ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzI5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0wLDAgKzEsMTI3IEBACisjCisjIFVTQiBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51ICJVU0Igc3VwcG9ydCIKKworIyBIb3N0LXNpZGUgVVNCIGRlcGVuZHMgb24gaGF2aW5nIGEgaG9zdCBjb250cm9sbGVyCisjIE5PVEU6ICBkdW1teV9oY2QgaXMgYWx3YXlzIGFuIG9wdGlvbiwgYnV0IGl0J3MgaWdub3JlZCBoZXJlIC4uLgorIyBOT1RFOiAgU0wtODExIG9wdGlvbiBzaG91bGQgYmUgYm9hcmQtc3BlY2lmaWMgLi4uCitjb25maWcgVVNCX0FSQ0hfSEFTX0hDRAorCWJvb2xlYW4KKwlkZWZhdWx0IHkgaWYgVVNCX0FSQ0hfSEFTX09IQ0kKKwlkZWZhdWx0IHkgaWYgQVJNCQkJCSMgU0wtODExCisJZGVmYXVsdCBQQ0kKKworIyBtYW55IG5vbi1QQ0kgU09DIGNoaXBzIGVtYmVkIE9IQ0kKK2NvbmZpZyBVU0JfQVJDSF9IQVNfT0hDSQorCWJvb2xlYW4KKwkjIEFSTToKKwlkZWZhdWx0IHkgaWYgU0ExMTExCisJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUAorCWRlZmF1bHQgeSBpZiBBUkNIX0xIN0E0MDQKKwlkZWZhdWx0IHkgaWYgUFhBMjd4CisJIyBQUEM6CisJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CisJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CisJIyBNSVBTOgorCWRlZmF1bHQgeSBpZiBTT0NfQVUxWDAwCisJIyBtb3JlOgorCWRlZmF1bHQgUENJCisKKyMgQVJNIFNBMTExMSBjaGlwcyBoYXZlIGEgbm9uLVBDSSBiYXNlZCAiT0hDSS1jb21wYXRpYmxlIiBVU0IgaG9zdCBpbnRlcmZhY2UuCitjb25maWcgVVNCCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEhvc3Qtc2lkZSBVU0IiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJLS0taGVscC0tLQorCSAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgaXMgYSBzcGVjaWZpY2F0aW9uIGZvciBhIHNlcmlhbCBidXMKKwkgIHN1YnN5c3RlbSB3aGljaCBvZmZlcnMgaGlnaGVyIHNwZWVkcyBhbmQgbW9yZSBmZWF0dXJlcyB0aGFuIHRoZQorCSAgdHJhZGl0aW9uYWwgUEMgc2VyaWFsIHBvcnQuICBUaGUgYnVzIHN1cHBsaWVzIHBvd2VyIHRvIHBlcmlwaGVyYWxzCisJICBhbmQgYWxsb3dzIGZvciBob3Qgc3dhcHBpbmcuICBVcCB0byAxMjcgVVNCIHBlcmlwaGVyYWxzIGNhbiBiZQorCSAgY29ubmVjdGVkIHRvIGEgc2luZ2xlIFVTQiBob3N0IGluIGEgdHJlZSBzdHJ1Y3R1cmUuCisJICAKKwkgIFRoZSBVU0IgaG9zdCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgdGhlIHBlcmlwaGVyYWxzIGFyZSB0aGUKKwkgIGxlYXZlcyBhbmQgdGhlIGlubmVyIG5vZGVzIGFyZSBzcGVjaWFsIFVTQiBkZXZpY2VzIGNhbGxlZCBodWJzLgorCSAgTW9zdCBQQ3Mgbm93IGhhdmUgVVNCIGhvc3QgcG9ydHMsIHVzZWQgdG8gY29ubmVjdCBwZXJpcGhlcmFscworCSAgc3VjaCBhcyBzY2FubmVycywga2V5Ym9hcmRzLCBtaWNlLCBtb2RlbXMsIGNhbWVyYXMsIGRpc2tzLAorCSAgZmxhc2ggbWVtb3J5LCBuZXR3b3JrIGxpbmtzLCBhbmQgcHJpbnRlcnMgdG8gdGhlIFBDLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdXIgY29tcHV0ZXIgaGFzIGEgaG9zdC1zaWRlIFVTQiBwb3J0IGFuZCB5b3Ugd2FudAorCSAgdG8gdXNlIFVTQiBkZXZpY2VzLiAgWW91IHRoZW4gbmVlZCB0byBzYXkgWSB0byBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIChIQ0QpIG9wdGlvbnMgYmVsb3cuICBDaG9vc2UgYSBVU0IgMS4xCisJICBjb250cm9sbGVyLCBzdWNoIGFzICJVSENJIEhDRCBzdXBwb3J0IiBvciAiT0hDSSBIQ0Qgc3VwcG9ydCIsCisJICBhbmQgIkVIQ0kgSENEIChVU0IgMi4wKSBzdXBwb3J0IiBleGNlcHQgZm9yIG9sZGVyIHN5c3RlbXMgdGhhdAorCSAgZG8gbm90IGhhdmUgVVNCIDIuMCBzdXBwb3J0LiAgSXQgZG9lc24ndCBub3JtYWxseSBodXJ0IHRvIHNlbGVjdAorCSAgdGhlbSBhbGwgaWYgeW91IGFyZSBub3QgY2VydGFpbi4KKworCSAgSWYgeW91ciBzeXN0ZW0gaGFzIGEgZGV2aWNlLXNpZGUgVVNCIHBvcnQsIHVzZWQgaW4gdGhlIHBlcmlwaGVyYWwKKwkgIHNpZGUgb2YgdGhlIFVTQiBwcm90b2NvbCwgc2VlIHRoZSAiVVNCIEdhZGdldCIgZnJhbWV3b3JrIGluc3RlYWQuCisKKwkgIEFmdGVyIGNob29zaW5nIHlvdXIgSENELCB0aGVuIHNlbGVjdCBkcml2ZXJzIGZvciB0aGUgVVNCIHBlcmlwaGVyYWxzCisJICB5b3UnbGwgYmUgdXNpbmcuICBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZAorCSAgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvPiBhbmQgZXNwZWNpYWxseSB0aGUgbGlua3MgZ2l2ZW4gaW4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmNvcmUuCisKK3NvdXJjZSAiZHJpdmVycy91c2IvY29yZS9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9tb24vS2NvbmZpZyIKKworY29tbWVudCAiVVNCIHBvcnQgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX1VTUzcyMAorCXRyaXN0YXRlICJVU1M3MjAgcGFycG9ydCBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgUEFSUE9SVAorCXNlbGVjdCBQQVJQT1JUX05PVF9QQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgcGFyYWxsZWwgcG9ydCBhZGFwdGVycyB0aGF0IHVzZSB0aGUgTHVjZW50CisJICBUZWNobm9sb2dpZXMgVVNTLTcyMCBjaGlwLiBUaGVzZSBjYWJsZXMgYXJlIHBsdWdnZWQgaW50byB5b3VyIFVTQgorCSAgcG9ydCBhbmQgcHJvdmlkZSBVU0IgY29tcGF0aWJpbGl0eSB0byBwZXJpcGhlcmFscyBkZXNpZ25lZCB3aXRoCisJICBwYXJhbGxlbCBwb3J0IGludGVyZmFjZXMuCisKKwkgIFRoZSBjaGlwIGhhcyB0d28gbW9kZXM6IGF1dG9tYXRpYyBtb2RlIGFuZCBtYW51YWwgbW9kZS4gSW4gYXV0b21hdGljCisJICBtb2RlLCBpdCBsb29rcyB0byB0aGUgY29tcHV0ZXIgbGlrZSBhIHN0YW5kYXJkIFVTQiBwcmludGVyLiBPbmx5CisJICBwcmludGVycyBtYXkgYmUgY29ubmVjdGVkIHRvIHRoZSBVU1MtNzIwIGluIHRoaXMgbW9kZS4gVGhlIGdlbmVyaWMKKwkgIFVTQiBwcmludGVyIGRyaXZlciAoIlVTQiBQcmludGVyIHN1cHBvcnQiLCBhYm92ZSkgbWF5IGJlIHVzZWQgaW4KKwkgIHRoYXQgbW9kZSwgYW5kIHlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGNoaXAgb25seQorCSAgaW4gdGhpcyBtb2RlLgorCisJICBNYW51YWwgbW9kZSBpcyBub3QgbGltaXRlZCB0byBwcmludGVycywgYW55IHBhcmFsbGVsIHBvcnQKKwkgIGRldmljZSBzaG91bGQgd29yay4gVGhpcyBkcml2ZXIgdXRpbGl6ZXMgbWFudWFsIG1vZGUuCisJICBOb3RlIGhvd2V2ZXIgdGhhdCBzb21lIG9wZXJhdGlvbnMgYXJlIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUKKwkgIHNsb3dlciB0aGFuIG9uIGEgUENJL0lTQSBQYXJhbGxlbCBQb3J0LCBzbyB0aW1pbmcgY3JpdGljYWwKKwkgIGFwcGxpY2F0aW9ucyBtaWdodCBub3Qgd29yay4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugb3duIGFuIFVTUy03MjAgVVNCLT5QYXJwb3J0IGNhYmxlIGFuZCBpbnRlbmQgdG8KKwkgIGNvbm5lY3QgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHByaW50ZXIgdG8gaXQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzczcyMC4KKworc291cmNlICJkcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9taXNjL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvYXRtL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWciCisKK2VuZG1lbnUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFkNDQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSw3NCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBVU0IgZGV2aWNlIGRyaXZlcnMuCisjCisKKyMgT2JqZWN0IGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzCisKK29iai0kKENPTkZJR19VU0IpCQkrPSBjb3JlLworCitvYmotJChDT05GSUdfVVNCX01PTikJCSs9IG1vbi8KKworb2JqLSQoQ09ORklHX1VTQl9FSENJX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfRVRSQVhfVVNCX0hPU1QpCSs9IGhvc3QvCisKK29iai0kKENPTkZJR19VU0JfQUNNKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX0FVRElPKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGNsYXNzLworb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX1BSSU5URVIpCSs9IGNsYXNzLworCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHN0b3JhZ2UvCisKK29iai0kKENPTkZJR19VU0JfQUlQVEVLKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfQVRJX1JFTU9URSkJKz0gaW5wdXQvCitvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IGlucHV0Lworb2JqLSQoQ09ORklHX1VTQl9LQkQpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfS0JUQUIpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfTU9VU0UpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfTVRPVUNIKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfUE9XRVJNQVRFKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfV0FDT00pCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfWFBBRCkJCSs9IGlucHV0LworCitvYmotJChDT05GSUdfVVNCX0RBQlVTQikJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX0RTQlIpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfSUJNQ0FNKQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfS09OSUNBV0MpCSs9IG1lZGlhLworb2JqLSQoQ09ORklHX1VTQl9PVjUxMSkJCSs9IG1lZGlhLworb2JqLSQoQ09ORklHX1VTQl9QV0MpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfU0U0MDEpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfU045QzEwMikJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1NUVjY4MCkJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKQkJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1c5OTY4Q0YpCSs9IG1lZGlhLworCitvYmotJChDT05GSUdfVVNCX0NBVEMpCQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX0tBV0VUSCkJKz0gbmV0Lworb2JqLSQoQ09ORklHX1VTQl9QRUdBU1VTKQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX1JUTDgxNTApCSs9IG5ldC8KK29iai0kKENPTkZJR19VU0JfVVNCTkVUKQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX1pEMTIwMSkJKz0gbmV0LworCitvYmotJChDT05GSUdfVVNCX01EQzgwMCkJKz0gaW1hZ2UvCitvYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKQkrPSBpbWFnZS8KKworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUwpCSs9IHNlcmlhbC8KKworb2JqLSQoQ09ORklHX1VTQl9BVUVSU1dBTEQpCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfRU1JNjIpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9JRE1PVVNFKQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MQ0QpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfUEhJREdFVFNFUlZPKQkrPSBtaXNjLworCitvYmotJChDT05GSUdfVVNCX0FUTSkJCSs9IGF0bS8KK29iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gYXRtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvUkVBRE1FIGIvZHJpdmVycy91c2IvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODQzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorVG8gdW5kZXJzdGFuZCBhbGwgdGhlIExpbnV4LVVTQiBmcmFtZXdvcmssIHlvdSdsbCB1c2UgdGhlc2UgcmVzb3VyY2VzOgorCisgICAgKiBUaGlzIHNvdXJjZSBjb2RlLiAgVGhpcyBpcyBuZWNlc3NhcmlseSBhbiBldm9sdmluZyB3b3JrLCBhbmQKKyAgICAgIGluY2x1ZGVzIGtlcm5lbGRvYyB0aGF0IHNob3VsZCBoZWxwIHlvdSBnZXQgYSBjdXJyZW50IG92ZXJ2aWV3LgorICAgICAgKCJtYWtlIHBkZmRvY3MiLCBhbmQgdGhlbiBsb29rIGF0ICJ1c2IucGRmIiBmb3IgaG9zdCBzaWRlIGFuZAorICAgICAgImdhZGdldC5wZGYiIGZvciBwZXJpcGhlcmFsIHNpZGUuKSAgQWxzbywgRG9jdW1lbnRhdGlvbi91c2IgaGFzCisgICAgICBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgKiBUaGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uIChmcm9tIHd3dy51c2Iub3JnKSwgd2l0aCBzdXBwbGVtZW50cworICAgICAgc3VjaCBhcyB0aG9zZSBmb3IgVVNCIE9URyBhbmQgdGhlIHZhcmlvdXMgZGV2aWNlIGNsYXNzZXMuCisgICAgICBUaGUgVVNCIHNwZWNpZmljYXRpb24gaGFzIGEgZ29vZCBvdmVydmlldyBjaGFwdGVyLCBhbmQgVVNCCisgICAgICBwZXJpcGhlcmFscyBjb25mb3JtIHRvIHRoZSB3aWRlbHkga25vd24gIkNoYXB0ZXIgOSIuCisKKyAgICAqIENoaXAgc3BlY2lmaWNhdGlvbnMgZm9yIFVTQiBjb250cm9sbGVycy4gIEV4YW1wbGVzIGluY2x1ZGUKKyAgICAgIGhvc3QgY29udHJvbGxlcnMgKG9uIFBDcywgc2VydmVycywgYW5kIG1vcmUpOyBwZXJpcGhlcmFsCisgICAgICBjb250cm9sbGVycyAoaW4gZGV2aWNlcyB3aXRoIExpbnV4IGZpcm13YXJlLCBsaWtlIHByaW50ZXJzIG9yCisgICAgICBjZWxsIHBob25lcyk7IGFuZCBoYXJkLXdpcmVkIHBlcmlwaGVyYWxzIGxpa2UgRXRoZXJuZXQgYWRhcHRlcnMuCisKKyAgICAqIFNwZWNpZmljYXRpb25zIGZvciBvdGhlciBwcm90b2NvbHMgaW1wbGVtZW50ZWQgYnkgVVNCIHBlcmlwaGVyYWwKKyAgICAgIGZ1bmN0aW9ucy4gIFNvbWUgYXJlIHZlbmRvci1zcGVjaWZpYzsgb3RoZXJzIGFyZSB2ZW5kb3ItbmV1dHJhbAorICAgICAgYnV0IGp1c3Qgc3RhbmRhcmRpemVkIG91dHNpZGUgb2YgdGhlIHd3dy51c2Iub3JnIHRlYW0uCisKK0hlcmUgaXMgYSBsaXN0IG9mIHdoYXQgZWFjaCBzdWJkaXJlY3RvcnkgaGVyZSBpcywgYW5kIHdoYXQgaXMgY29udGFpbmVkIGluCit0aGVtLgorCitjb3JlLwkJLSBUaGlzIGlzIGZvciB0aGUgY29yZSBVU0IgaG9zdCBjb2RlLCBpbmNsdWRpbmcgdGhlCisJCSAgdXNiZnMgZmlsZXMgYW5kIHRoZSBodWIgY2xhc3MgZHJpdmVyICgia2h1YmQiKS4KKworaG9zdC8JCS0gVGhpcyBpcyBmb3IgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiAgVGhpcworCQkgIGluY2x1ZGVzIFVIQ0ksIE9IQ0ksIEVIQ0ksIGFuZCBvdGhlcnMgdGhhdCBtaWdodAorCQkgIGJlIHVzZWQgd2l0aCBtb3JlIHNwZWNpYWxpemVkICJlbWJlZGRlZCIgc3lzdGVtcy4KKworZ2FkZ2V0LwkJLSBUaGlzIGlzIGZvciBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgYW5kCisJCSAgdGhlIHZhcmlvdXMgZ2FkZ2V0IGRyaXZlcnMgd2hpY2ggdGFsayB0byB0aGVtLgorCisKK0luZGl2aWR1YWwgVVNCIGRyaXZlciBkaXJlY3Rvcmllcy4gIEEgbmV3IGRyaXZlciBzaG91bGQgYmUgYWRkZWQgdG8gdGhlCitmaXJzdCBzdWJkaXJlY3RvcnkgaW4gdGhlIGxpc3QgYmVsb3cgdGhhdCBpdCBmaXRzIGludG8uCisKK2ltYWdlLwkJLSBUaGlzIGlzIGZvciBzdGlsbCBpbWFnZSBkcml2ZXJzLCBsaWtlIHNjYW5uZXJzIG9yCisJCSAgZGlnaXRhbCBjYW1lcmFzLgoraW5wdXQvCQktIFRoaXMgaXMgZm9yIGFueSBkcml2ZXIgdGhhdCB1c2VzIHRoZSBpbnB1dCBzdWJzeXN0ZW0sCisJCSAgbGlrZSBrZXlib2FyZCwgbWljZSwgdG91Y2hzY3JlZW5zLCB0YWJsZXRzLCBldGMuCittZWRpYS8JCS0gVGhpcyBpcyBmb3IgbXVsdGltZWRpYSBkcml2ZXJzLCBsaWtlIHZpZGVvIGNhbWVyYXMsCisJCSAgcmFkaW9zLCBhbmQgYW55IG90aGVyIGRyaXZlcnMgdGhhdCB0YWxrIHRvIHRoZSB2NGwKKwkJICBzdWJzeXN0ZW0uCituZXQvCQktIFRoaXMgaXMgZm9yIG5ldHdvcmsgZHJpdmVycy4KK3NlcmlhbC8JCS0gVGhpcyBpcyBmb3IgVVNCIHRvIHNlcmlhbCBkcml2ZXJzLgorc3RvcmFnZS8JLSBUaGlzIGlzIGZvciBVU0IgbWFzcy1zdG9yYWdlIGRyaXZlcnMuCitjbGFzcy8JCS0gVGhpcyBpcyBmb3IgYWxsIFVTQiBkZXZpY2UgZHJpdmVycyB0aGF0IGRvIG5vdCBmaXQKKwkJICBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcywgYW5kIHdvcmsgZm9yIGEgcmFuZ2UKKwkJICBvZiBVU0IgQ2xhc3Mgc3BlY2lmaWVkIGRldmljZXMuIAorbWlzYy8JCS0gVGhpcyBpcyBmb3IgYWxsIFVTQiBkZXZpY2UgZHJpdmVycyB0aGF0IGRvIG5vdCBmaXQKKwkJICBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnIGIvZHJpdmVycy91c2IvYXRtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ZjUzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgVVNCIEFUTSBkcml2ZXIgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIEFUTS9EU0wgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0FUTQorCXRyaXN0YXRlICJHZW5lcmljIFVTQiBBVE0vRFNMIGNvcmUgSS9PIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgQVRNCisJc2VsZWN0IENSQzMyCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBwcm92aWRlcyBhIGxpYnJhcnkgd2hpY2ggaXMgdXNlZCBmb3IgcGFja2V0IEkvTyBieSBVU0IgRFNMCisJICBtb2RlbXMsIHN1Y2ggYXMgdGhlIFNwZWVkVG91Y2ggZHJpdmVyIGJlbG93LiAKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiX2F0bS4KKworY29uZmlnIFVTQl9TUEVFRFRPVUNICisJdHJpc3RhdGUgIkFsY2F0ZWwgU3BlZWR0b3VjaCBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBBVE0KKwlzZWxlY3QgVVNCX0FUTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQWxjYXRlbCBTcGVlZFRvdWNoIFVTQiBvciBTcGVlZFRvdWNoIDMzMAorCSAgbW9kZW0uICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIAorCSAgdHdvIHBhcnRzIG9mIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWUKKwkgIDxodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvU3BlZWRUb3VjaC8+IGZvciBkZXRhaWxzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjEzYjhiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSByZXN0IG9mIHRoZSBVU0IgZHJpdmVycworIyAodGhlIG9uZXMgdGhhdCBkb24ndCBmaXQgaW50byBhbnkgb3RoZXIgY2F0ZWdvcmllcykKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BVE0pCQkrPSB1c2JfYXRtLm8KK29iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gc3BlZWR0Y2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzcGVlZHRjaC5jICAtICBBbGNhdGVsIFNwZWVkVG91Y2ggVVNCIHhEU0wgbW9kZW0gZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwgQWxjYXRlbAorICogIENvcHlyaWdodCAoQykgMjAwMywgRHVuY2FuIFNhbmRzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCBEYXZpZCBXb29kaG91c2UKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJ1c2JfYXRtLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19GV19MT0FERVIpIHx8IGRlZmluZWQoQ09ORklHX0ZXX0xPQURFUl9NT0RVTEUpCisjCWRlZmluZSBVU0VfRldfTE9BREVSCisjZW5kaWYKKworI2RlZmluZSBEUklWRVJfQVVUSE9SCSJKb2hhbiBWZXJyZXB0LCBEdW5jYW4gU2FuZHMgPGR1bmNhbi5zYW5kc0BmcmVlLmZyPiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjEuOCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIkFsY2F0ZWwgU3BlZWRUb3VjaCBVU0IgZHJpdmVyIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgY29uc3QgY2hhciBzcGVlZHRjaF9kcml2ZXJfbmFtZVtdID0gInNwZWVkdGNoIjsKKworI2RlZmluZSBTUEVFRFRPVUNIX1ZFTkRPUklECQkweDA2YjkKKyNkZWZpbmUgU1BFRURUT1VDSF9QUk9EVUNUSUQJCTB4NDA2MQorCisvKiBUaW1lb3V0IGluIGppZmZpZXMgKi8KKyNkZWZpbmUgQ1RSTF9USU1FT1VUIDIwMDAKKyNkZWZpbmUgREFUQV9USU1FT1VUIDIwMDAKKworI2RlZmluZSBPRkZTRVRfNyAgMAkJLyogc2l6ZSAxICovCisjZGVmaW5lIE9GRlNFVF9iICAxCQkvKiBzaXplIDggKi8KKyNkZWZpbmUgT0ZGU0VUX2QgIDkJCS8qIHNpemUgNCAqLworI2RlZmluZSBPRkZTRVRfZSAxMwkJLyogc2l6ZSAxICovCisjZGVmaW5lIE9GRlNFVF9mIDE0CQkvKiBzaXplIDEgKi8KKyNkZWZpbmUgVE9UQUwgICAgMTUKKworI2RlZmluZSBTSVpFXzcgMQorI2RlZmluZSBTSVpFX2IgOAorI2RlZmluZSBTSVpFX2QgNAorI2RlZmluZSBTSVpFX2UgMQorI2RlZmluZSBTSVpFX2YgMQorCitzdGF0aWMgaW50IGRsXzUxMl9maXJzdCA9IDA7CitzdGF0aWMgaW50IHN3X2J1ZmZlcmluZyA9IDA7CisKK21vZHVsZV9wYXJhbShkbF81MTJfZmlyc3QsIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkbF81MTJfZmlyc3QsICJSZWFkIDUxMiBieXRlcyBiZWZvcmUgc2VuZGluZyBmaXJtd2FyZSIpOworCittb2R1bGVfcGFyYW0oc3dfYnVmZmVyaW5nLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dfYnVmZmVyaW5nLCAiRW5hYmxlIHNvZnR3YXJlIGJ1ZmZlcmluZyIpOworCisjZGVmaW5lIFVEU0xfSU9DVExfTElORV9VUAkJMQorI2RlZmluZSBVRFNMX0lPQ1RMX0xJTkVfRE9XTgkJMgorCisjZGVmaW5lIFNQRUVEVENIX0VORFBPSU5UX0lOVAkJMHg4MQorI2RlZmluZSBTUEVFRFRDSF9FTkRQT0lOVF9EQVRBCQkweDA3CisjZGVmaW5lIFNQRUVEVENIX0VORFBPSU5UX0ZJUk1XQVJFCTB4MDUKKworI2RlZmluZSBoZXgyaW50KGMpICggKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpID8gKGMgLSAnMCcpIDogKChjICYgMHhmKSArIDkpICkKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNwZWVkdGNoX3VzYl9pZHNbXSA9IHsKKwl7VVNCX0RFVklDRShTUEVFRFRPVUNIX1ZFTkRPUklELCBTUEVFRFRPVUNIX1BST0RVQ1RJRCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3BlZWR0Y2hfdXNiX2lkcyk7CisKK3N0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhIHsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhIHU7CisKKwkvKiBTdGF0dXMgKi8KKwlzdHJ1Y3QgdXJiICppbnRfdXJiOworCXVuc2lnbmVkIGNoYXIgaW50X2RhdGFbMTZdOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwb2xsX3dvcms7CisJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKK307CisvKiBVU0IgKi8KKworc3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBzcGVlZHRjaF91c2JfaW9jdGwoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2hhbmRsZV9pbnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBzcGVlZHRjaF9wb2xsX3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3BlZWR0Y2hfdXNiX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gc3BlZWR0Y2hfZHJpdmVyX25hbWUsCisJLnByb2JlCQk9IHNwZWVkdGNoX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHNwZWVkdGNoX3VzYl9kaXNjb25uZWN0LAorCS5pb2N0bAkJPSBzcGVlZHRjaF91c2JfaW9jdGwsCisJLmlkX3RhYmxlCT0gc3BlZWR0Y2hfdXNiX2lkcywKK307CisKKy8qKioqKioqKioqKioqKioKKyoqICBmaXJtd2FyZSAgKioKKyoqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfZ290X2Zpcm13YXJlKHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCQkgIGludCBnb3RfaXQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKworCWRvd24oJmluc3RhbmNlLT51LnNlcmlhbGl6ZSk7CS8qIHZzIHNlbGYsIHNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0ICovCisJaWYgKGluc3RhbmNlLT51LnN0YXR1cyA9PSBVRFNMX0xPQURFRF9GSVJNV0FSRSkKKwkJZ290byBvdXQ7CisJaWYgKCFnb3RfaXQpIHsKKwkJaW5zdGFuY2UtPnUuc3RhdHVzID0gVURTTF9OT19GSVJNV0FSRTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgoZXJyID0gdXNiX3NldF9pbnRlcmZhY2UoaW5zdGFuY2UtPnUudXNiX2RldiwgMSwgMSkpIDwgMCkgeworCQlkYmcoInNwZWVkdGNoX2dvdF9maXJtd2FyZTogdXNiX3NldF9pbnRlcmZhY2UgcmV0dXJuZWQgJWQhIiwgZXJyKTsKKwkJaW5zdGFuY2UtPnUuc3RhdHVzID0gVURTTF9OT19GSVJNV0FSRTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogU2V0IHVwIGludGVycnVwdCBlbmRwb2ludCAqLworCWludGYgPSB1c2JfaWZudW1fdG9faWYoaW5zdGFuY2UtPnUudXNiX2RldiwgMCk7CisJaWYgKGludGYgJiYgIXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBpbnRmLCBOVUxMKSkgeworCisJCWluc3RhbmNlLT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGluc3RhbmNlLT5pbnRfdXJiKSB7CisKKwkJCXVzYl9maWxsX2ludF91cmIoaW5zdGFuY2UtPmludF91cmIsIGluc3RhbmNlLT51LnVzYl9kZXYsCisJCQkJCSB1c2JfcmN2aW50cGlwZShpbnN0YW5jZS0+dS51c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9JTlQpLAorCQkJCQkgaW5zdGFuY2UtPmludF9kYXRhLAorCQkJCQkgc2l6ZW9mKGluc3RhbmNlLT5pbnRfZGF0YSksCisJCQkJCSBzcGVlZHRjaF9oYW5kbGVfaW50LCBpbnN0YW5jZSwgNTApOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIoaW5zdGFuY2UtPmludF91cmIsIEdGUF9LRVJORUwpOworCQkJaWYgKGVycikgeworCQkJCS8qIERvZXNuJ3QgbWF0dGVyOyB3ZSdsbCBwb2xsIGFueXdheSAqLworCQkJCWRiZygic3BlZWR0Y2hfZ290X2Zpcm13YXJlOiBTdWJtaXNzaW9uIG9mIGludGVycnVwdCBVUkIgZmFpbGVkICVkIiwgZXJyKTsKKwkJCQl1c2JfZnJlZV91cmIoaW5zdGFuY2UtPmludF91cmIpOworCQkJCWluc3RhbmNlLT5pbnRfdXJiID0gTlVMTDsKKwkJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBpbnRmKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBTdGFydCBzdGF0dXMgcG9sbGluZyAqLworCW1vZF90aW1lcigmaW5zdGFuY2UtPnBvbGxfdGltZXIsIGppZmZpZXMgKyAoMSAqIEhaKSk7CisKKwlpbnN0YW5jZS0+dS5zdGF0dXMgPSBVRFNMX0xPQURFRF9GSVJNV0FSRTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+dS5yZWNlaXZlX3Rhc2tsZXQpOworIG91dDoKKwl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluc3RhbmNlLT51LmZpcm13YXJlX3dhaXRlcnMpOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3NldF9zd2J1ZmYoc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlLAorCQkJICAgICAgIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW5zdGFuY2UtPnUudXNiX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDMyLCAweDQwLCBzdGF0ZSA/IDB4MDEgOiAweDAwLAorCQkJICAgICAgMHgwMCwgTlVMTCwgMCwgMTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIldhcm5pbmc6ICVzYWJsaW5nIFNXIGJ1ZmZlcmluZzogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkgICAgIHN0YXRlID8gIkVuIiA6ICJEaXMiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRiZygic3BlZWR0Y2hfc2V0X3N3YnVmZjogJXNibGVkIFNXIGJ1ZmZlcmluZyIsIHN0YXRlID8gIkVuIiA6ICJEaXMiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdGVzdF9zZXF1ZW5jZShzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGluc3RhbmNlLT51LnVzYl9kZXY7CisJdW5zaWduZWQgY2hhciBidWZbMTBdOworCWludCByZXQ7CisKKwkvKiBVUkIgMTQ3ICovCisJYnVmWzBdID0gMHgxYzsKKwlidWZbMV0gPSAweDUwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHg0MCwgMHgwYiwgMHgwMCwgYnVmLCAyLCAxMDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBmYWlsZWQgb24gVVJCMTQ3OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBVUkIgMTQ4ICovCisJYnVmWzBdID0gMHgzMjsKKwlidWZbMV0gPSAweDAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHg0MCwgMHgwMiwgMHgwMCwgYnVmLCAyLCAxMDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBmYWlsZWQgb24gVVJCMTQ4OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBVUkIgMTQ5ICovCisJYnVmWzBdID0gMHgwMTsKKwlidWZbMV0gPSAweDAwOworCWJ1ZlsyXSA9IDB4MDE7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDAxLCAweDQwLCAweDAzLCAweDAwLCBidWYsIDMsIDEwMCk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGZhaWxlZCBvbiBVUkIxNDk6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCS8qIFVSQiAxNTAgKi8KKwlidWZbMF0gPSAweDAxOworCWJ1ZlsxXSA9IDB4MDA7CisJYnVmWzJdID0gMHgwMTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIGJ1ZiwgMywgMTAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZmFpbGVkIG9uIFVSQjE1MDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3N0YXJ0X3N5bmNocm8oc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MTIsIDB4YzAsIDB4MDQsIDB4MDAsCisJCQkgICAgICBidWYsIHNpemVvZihidWYpLCBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwZWVkVG91Y2g6IEZhaWxlZCB0byBzdGFydCBBRFNMIHN5bmNocm9uaXNhdGlvbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGJnKCJzcGVlZHRjaF9zdGFydF9zeW5jaHJvOiBtb2RlbSBwcm9kZGVkLiAlZCBCeXRlcyByZXR1cm5lZDogJTAyeCAlMDJ4IiwgcmV0LCBidWZbMF0sIGJ1ZlsxXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2hhbmRsZV9pbnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCByZXQ7CisKKwkvKiBUaGUgbWFnaWMgaW50ZXJydXB0IGZvciAidXAgc3RhdGUiICovCisJY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXBfaW50WzZdICAgPSB7IDB4YTEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkvKiBUaGUgbWFnaWMgaW50ZXJydXB0IGZvciAiZG93biBzdGF0ZSIgKi8KKwljb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBkb3duX2ludFs2XSA9IHsgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQ7IGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNvdW50IDwgNikgeworCQlkYmcoIiVzIC0gaW50IHBhY2tldCB0b28gc2hvcnQiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIW1lbWNtcCh1cF9pbnQsIGluc3RhbmNlLT5pbnRfZGF0YSwgNikpIHsKKwkJZGVsX3RpbWVyKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJCXByaW50ayhLRVJOX05PVElDRSAiRFNMIGxpbmUgZ29lcyB1cFxuIik7CisJfSBlbHNlIGlmICghbWVtY21wKGRvd25faW50LCBpbnN0YW5jZS0+aW50X2RhdGEsIDYpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRFNMIGxpbmUgZ29lcyBkb3duXG4iKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiVW5rbm93biBpbnRlcnJ1cHQgcGFja2V0IG9mICVkIGJ5dGVzOiIsIGNvdW50KTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgaW5zdGFuY2UtPmludF9kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlzY2hlZHVsZV93b3JrKCZpbnN0YW5jZS0+cG9sbF93b3JrKTsKKworIGV4aXQ6CisJcm1iKCk7CisJaWYgKCFpbnN0YW5jZS0+aW50X3VyYikKKwkJcmV0dXJuOworCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwgX19mdW5jX18sIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfZ2V0X3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCWludCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBUT1RBTCk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MTIsIDB4YzAsIDB4MDcsIDB4MDAsIGJ1ZiArIE9GRlNFVF83LCBTSVpFXzcsCisJCQkgICAgICBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZygiTVNHIDcgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDEyLCAweGMwLCAweDBiLCAweDAwLCBidWYgKyBPRkZTRVRfYiwgU0laRV9iLAorCQkJICAgICAgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmcoIk1TRyBCIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgxMiwgMHhjMCwgMHgwZCwgMHgwMCwgYnVmICsgT0ZGU0VUX2QsIFNJWkVfZCwKKwkJCSAgICAgIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGJnKCJNU0cgRCBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4YzAsIDB4MGUsIDB4MDAsIGJ1ZiArIE9GRlNFVF9lLCBTSVpFX2UsCisJCQkgICAgICBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZygiTVNHIEUgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDAxLCAweGMwLCAweDBmLCAweDAwLCBidWYgKyBPRkZTRVRfZiwgU0laRV9mLAorCQkJICAgICAgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmcoIk1TRyBGIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGVlZHRjaF9wb2xsX3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJdW5zaWduZWQgY2hhciBidWZbVE9UQUxdOworCWludCByZXQ7CisKKwlyZXQgPSBzcGVlZHRjaF9nZXRfc3RhdHVzKGluc3RhbmNlLCBidWYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlNwZWVkVG91Y2g6IEVycm9yICVkIGZldGNoaW5nIGRldmljZSBzdGF0dXNcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIkxpbmUgc3RhdGUgJTAyeCIsIGJ1ZltPRkZTRVRfN10pOworCisJc3dpdGNoIChidWZbT0ZGU0VUXzddKSB7CisJY2FzZSAwOgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX0xPU1QpIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFEU0wgbGluZSBpcyBkb3duXG4iKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgwODoKKwkJaWYgKGluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCAhPSBBVE1fUEhZX1NJR19VTktOT1dOKSB7CisJCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19VTktOT1dOOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBRFNMIGxpbmUgaXMgYmxvY2tlZD9cbiIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAweDEwOgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX0xPU1QpIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFEU0wgbGluZSBpcyBzeW5jaHJvbmlzaW5nXG4iKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgyMDoKKwkJaWYgKGluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCAhPSBBVE1fUEhZX1NJR19GT1VORCkgeworCQkJaW50IGRvd25fc3BlZWQgPSBidWZbT0ZGU0VUX2JdIHwgKGJ1ZltPRkZTRVRfYiArIDFdIDw8IDgpCisJCQkJfCAoYnVmW09GRlNFVF9iICsgMl0gPDwgMTYpIHwgKGJ1ZltPRkZTRVRfYiArIDNdIDw8IDI0KTsKKwkJCWludCB1cF9zcGVlZCA9IGJ1ZltPRkZTRVRfYiArIDRdIHwgKGJ1ZltPRkZTRVRfYiArIDVdIDw8IDgpCisJCQkJfCAoYnVmW09GRlNFVF9iICsgNl0gPDwgMTYpIHwgKGJ1ZltPRkZTRVRfYiArIDddIDw8IDI0KTsKKworCQkJaWYgKCEoZG93bl9zcGVlZCAmIDB4MDAwMGZmZmYpICYmCisJCQkgICAgISh1cF9zcGVlZCAmIDB4MDAwMGZmZmYpKSB7CisJCQkJZG93bl9zcGVlZCA+Pj0gMTY7CisJCQkJdXBfc3BlZWQgPj49IDE2OworCQkJfQorCQkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+bGlua19yYXRlID0gZG93bl9zcGVlZCAqIDEwMDAgLyA0MjQ7CisJCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkgICAgICAgIkFEU0wgbGluZSBpcyB1cCAoJWQgS2liL3MgZG93biB8ICVkIEtpYi9zIHVwKVxuIiwKKwkJCSAgICAgICBkb3duX3NwZWVkLCB1cF9zcGVlZCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX1VOS05PV04pIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX1VOS05PV047CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVua25vd24gbGluZSBzdGF0ZSAlMDJ4XG4iLCBidWZbT0ZGU0VUXzddKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX3RpbWVyX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9ICh2b2lkICopZGF0YTsKKworCXNjaGVkdWxlX3dvcmsoJmluc3RhbmNlLT5wb2xsX3dvcmspOworCW1vZF90aW1lcigmaW5zdGFuY2UtPnBvbGxfdGltZXIsIGppZmZpZXMgKyAoNSAqIEhaKSk7Cit9CisKKyNpZmRlZiBVU0VfRldfTE9BREVSCitzdGF0aWMgdm9pZCBzcGVlZHRjaF91cGxvYWRfZmlybXdhcmUoc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MikKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCWludCBhY3R1YWxfbGVuZ3RoLCByZXQ7CisJaW50IG9mZnNldDsKKworCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlIik7CisKKwlpZiAoIShpbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDIpKSkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogaW50ZXJmYWNlIG5vdCBmb3VuZCEiKTsKKwkJZ290byBmYWlsOworCX0KKworCWlmICghKGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpKSkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogbm8gbWVtb3J5IGZvciBidWZmZXIhIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBIHVzZXItc3BhY2UgZmlybXdhcmUgbG9hZGVyIG1heSBhbHJlYWR5IGhhdmUgY2xhaW1lZCBpbnRlcmZhY2UgIzIgKi8KKwlpZiAoKHJldCA9CisJICAgICB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmc3BlZWR0Y2hfdXNiX2RyaXZlciwgaW50ZiwgTlVMTCkpIDwgMCkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogaW50ZXJmYWNlIGluIHVzZSAoJWQpISIsIHJldCk7CisJCWdvdG8gZmFpbF9mcmVlOworCX0KKworCS8qIFVSQiA3ICovCisJaWYgKGRsXzUxMl9maXJzdCkgewkvKiBzb21lIG1vZGVtcyBuZWVkIGEgcmVhZCBiZWZvcmUgd3JpdGluZyB0aGUgZmlybXdhcmUgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9GSVJNV0FSRSksCisJCQkJICAgYnVmZmVyLCAweDIwMCwgJmFjdHVhbF9sZW5ndGgsIDIwMDApOworCisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRVRJTUVET1VUKQorCQkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IHJlYWQgQkxPQ0swIGZyb20gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJZWxzZQorCQkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IEJMT0NLMCBkb3dubG9hZGVkICglZCBieXRlcykiLCByZXQpOworCX0KKworCS8qIFVSQiA4IDogYm90aCBsZWRzIGFyZSBzdGF0aWMgZ3JlZW4gKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3MS0+c2l6ZTsgb2Zmc2V0ICs9IFBBR0VfU0laRSkgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgUEFHRV9TSVpFLCBmdzEtPnNpemUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCBmdzEtPmRhdGEgKyBvZmZzZXQsIHRoaXNsZW4pOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgU1BFRURUQ0hfRU5EUE9JTlRfRklSTVdBUkUpLAorCQkJCSAgIGJ1ZmZlciwgdGhpc2xlbiwgJmFjdHVhbF9sZW5ndGgsIERBVEFfVElNRU9VVCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiB3cml0ZSBCTE9DSzEgdG8gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlOworCQl9CisJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzEgdXBsb2FkZWQgKCV6dSBieXRlcykiLCBmdzEtPnNpemUpOworCX0KKworCS8qIFVTQiBsZWQgYmxpbmtpbmcgZ3JlZW4sIEFEU0wgbGVkIG9mZiAqLworCisJLyogVVJCIDExICovCisJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9GSVJNV0FSRSksCisJCQkgICBidWZmZXIsIDB4MjAwLCAmYWN0dWFsX2xlbmd0aCwgREFUQV9USU1FT1VUKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiByZWFkIEJMT0NLMiBmcm9tIG1vZGVtIGZhaWxlZCAoJWQpISIsIHJldCk7CisJCWdvdG8gZmFpbF9yZWxlYXNlOworCX0KKwlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogQkxPQ0syIGRvd25sb2FkZWQgKCVkIGJ5dGVzKSIsIGFjdHVhbF9sZW5ndGgpOworCisJLyogVVJCcyAxMiB0byAxMzkgLSBVU0IgbGVkIGJsaW5raW5nIGdyZWVuLCBBRFNMIGxlZCBvZmYgKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3Mi0+c2l6ZTsgb2Zmc2V0ICs9IFBBR0VfU0laRSkgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgUEFHRV9TSVpFLCBmdzItPnNpemUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCBmdzItPmRhdGEgKyBvZmZzZXQsIHRoaXNsZW4pOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgU1BFRURUQ0hfRU5EUE9JTlRfRklSTVdBUkUpLAorCQkJCSAgIGJ1ZmZlciwgdGhpc2xlbiwgJmFjdHVhbF9sZW5ndGgsIERBVEFfVElNRU9VVCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiB3cml0ZSBCTE9DSzMgdG8gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlOworCQl9CisJfQorCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzMgdXBsb2FkZWQgKCV6dSBieXRlcykiLCBmdzItPnNpemUpOworCisJLyogVVNCIGxlZCBzdGF0aWMgZ3JlZW4sIEFEU0wgbGVkIHN0YXRpYyByZWQgKi8KKworCS8qIFVSQiAxNDIgKi8KKwlyZXQgPSB1c2JfYnVsa19tc2codXNiX2RldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIFNQRUVEVENIX0VORFBPSU5UX0ZJUk1XQVJFKSwKKwkJCSAgIGJ1ZmZlciwgMHgyMDAsICZhY3R1YWxfbGVuZ3RoLCBEQVRBX1RJTUVPVVQpOworCisJaWYgKHJldCA8IDApIHsKKwkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IHJlYWQgQkxPQ0s0IGZyb20gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJZ290byBmYWlsX3JlbGVhc2U7CisJfQorCisJLyogc3VjY2VzcyAqLworCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzQgZG93bmxvYWRlZCAoJWQgYnl0ZXMpIiwgYWN0dWFsX2xlbmd0aCk7CisKKwkvKiBEZWxheSB0byBhbGxvdyBmaXJtd2FyZSB0byBzdGFydCB1cC4gV2UgY2FuIGRvIHRoaXMgaGVyZQorCSAgIGJlY2F1c2Ugd2UncmUgaW4gb3VyIG93biBrZXJuZWwgdGhyZWFkIGFueXdheS4gKi8KKwltc2xlZXAoMTAwMCk7CisKKwkvKiBFbmFibGUgc29mdHdhcmUgYnVmZmVyaW5nLCBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoc3dfYnVmZmVyaW5nKQorCQlzcGVlZHRjaF9zZXRfc3didWZmKGluc3RhbmNlLCAxKTsKKworCS8qIE1hZ2ljIHNwZWxsOyBkb24ndCBhc2sgdXMgd2hhdCB0aGlzIGRvZXMgKi8KKwlzcGVlZHRjaF90ZXN0X3NlcXVlbmNlKGluc3RhbmNlKTsKKworCS8qIFN0YXJ0IG1vZGVtIHN5bmNocm9uaXNhdGlvbiAqLworCWlmIChzcGVlZHRjaF9zdGFydF9zeW5jaHJvKGluc3RhbmNlKSkKKwkJZGJnKCJzcGVlZHRjaF9zdGFydF9zeW5jaHJvOiBmYWlsZWQiKTsKKworCXNwZWVkdGNoX2dvdF9maXJtd2FyZShpbnN0YW5jZSwgMSk7CisKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKwlyZXR1cm47CisKKyBmYWlsX3JlbGVhc2U6CisJLyogT25seSByZWxlYXNlIGludGVyZmFjZSAjMiBpZiB1cGxvYWRpbmcgZmFpbGVkOyB3ZSBkb24ndCByZWxlYXNlIGl0CisJICAgd2Ugc3VjY2VlZGVkLiAgVGhpcyBwcmV2ZW50cyB0aGUgdXNlcnNwYWNlIHRvb2xzIGZyb20gdHJ5aW5nIHRvIGxvYWQKKwkgICB0aGUgZmlybXdhcmUgdGhlbXNlbHZlcyAqLworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnNwZWVkdGNoX3VzYl9kcml2ZXIsIGludGYpOworIGZhaWxfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKyBmYWlsOgorCXNwZWVkdGNoX2dvdF9maXJtd2FyZShpbnN0YW5jZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfZmluZF9maXJtd2FyZShzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YQorCQkJCSAgKmluc3RhbmNlLCBpbnQgcGhhc2UsCisJCQkJICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19wKQoreworCWNoYXIgYnVmWzI0XTsKKwljb25zdCB1MTYgYmNkRGV2aWNlID0gbGUxNl90b19jcHUoaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCWNvbnN0IHU4IG1ham9yX3JldmlzaW9uID0gYmNkRGV2aWNlID4+IDg7CisJY29uc3QgdTggbWlub3JfcmV2aXNpb24gPSBiY2REZXZpY2UgJiAweGZmOworCisJc3ByaW50ZihidWYsICJzcGVlZHRjaC0lZC5iaW4uJXguJTAyeCIsIHBoYXNlLCBtYWpvcl9yZXZpc2lvbiwgbWlub3JfcmV2aXNpb24pOworCWRiZygic3BlZWR0Y2hfZmluZF9maXJtd2FyZTogbG9va2luZyBmb3IgJXMiLCBidWYpOworCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoZndfcCwgYnVmLCAmaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGV2KSkgeworCQlzcHJpbnRmKGJ1ZiwgInNwZWVkdGNoLSVkLmJpbi4leCIsIHBoYXNlLCBtYWpvcl9yZXZpc2lvbik7CisJCWRiZygic3BlZWR0Y2hfZmluZF9maXJtd2FyZTogbG9va2luZyBmb3IgJXMiLCBidWYpOworCisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKGZ3X3AsIGJ1ZiwgJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldikpIHsKKwkJCXNwcmludGYoYnVmLCAic3BlZWR0Y2gtJWQuYmluIiwgcGhhc2UpOworCQkJZGJnKCJzcGVlZHRjaF9maW5kX2Zpcm13YXJlOiBsb29raW5nIGZvciAlcyIsIGJ1Zik7CisKKwkJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKGZ3X3AsIGJ1ZiwgJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldikpIHsKKwkJCQlkZXZfd2FybigmaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGV2LCAibm8gc3RhZ2UgJWQgZmlybXdhcmUgZm91bmQhIiwgcGhhc2UpOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCQl9CisJfQorCisJZGV2X2luZm8oJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldiwgImZvdW5kIHN0YWdlICVkIGZpcm13YXJlICVzXG4iLCBwaGFzZSwgYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX2xvYWRfZmlybXdhcmUodm9pZCAqYXJnKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyOworCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IGFyZzsKKworCUJVR19PTighaW5zdGFuY2UpOworCisJZGFlbW9uaXplKCJmaXJtd2FyZS9zcGVlZHRjaCIpOworCisJaWYgKCFzcGVlZHRjaF9maW5kX2Zpcm13YXJlKGluc3RhbmNlLCAxLCAmZncxKSkgeworCQlpZiAoIXNwZWVkdGNoX2ZpbmRfZmlybXdhcmUoaW5zdGFuY2UsIDIsICZmdzIpKSB7CisJCQlzcGVlZHRjaF91cGxvYWRfZmlybXdhcmUoaW5zdGFuY2UsIGZ3MSwgZncyKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncyKTsKKwkJfQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7CisJfQorCisJLyogSW4gY2FzZSB3ZSBmYWlsZWQsIHNldCBzdGF0ZSBiYWNrIHRvIE5PX0ZJUk1XQVJFIHNvIHRoYXQKKwkgICBhbm90aGVyIGxhdGVyIGF0dGVtcHQgbWF5IHdvcmsuIE90aGVyd2lzZSwgd2UgbmV2ZXIgYWN0dWFsbHkKKwkgICBtYW5hZ2UgdG8gcmVjb3ZlciBpZiwgZm9yIGV4YW1wbGUsIHRoZSBmaXJtd2FyZSBpcyBvbiAvdXNyIGFuZAorCSAgIHdlIGxvb2sgZm9yIGl0IHRvbyBlYXJseS4gKi8KKwlzcGVlZHRjaF9nb3RfZmlybXdhcmUoaW5zdGFuY2UsIDApOworCisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJdWRzbF9wdXRfaW5zdGFuY2UoJmluc3RhbmNlLT51KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBVU0VfRldfTE9BREVSICovCisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSkKK3sKKyNpZmRlZiBVU0VfRldfTE9BREVSCisJaW50IHJldDsKKyNlbmRpZgorCisJZGJnKCJzcGVlZHRjaF9maXJtd2FyZV9zdGFydCIpOworCisJZG93bigmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsJLyogdnMgc2VsZiwgc3BlZWR0Y2hfZ290X2Zpcm13YXJlICovCisKKwlpZiAoaW5zdGFuY2UtPnUuc3RhdHVzID49IFVEU0xfTE9BRElOR19GSVJNV0FSRSkgeworCQl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKwkJcmV0dXJuOworCX0KKworCWluc3RhbmNlLT51LnN0YXR1cyA9IFVEU0xfTE9BRElOR19GSVJNV0FSRTsKKwl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKworI2lmZGVmIFVTRV9GV19MT0FERVIKKwl1ZHNsX2dldF9pbnN0YW5jZSgmaW5zdGFuY2UtPnUpOworCXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKworCXJldCA9IGtlcm5lbF90aHJlYWQoc3BlZWR0Y2hfbG9hZF9maXJtd2FyZSwgaW5zdGFuY2UsCisJCQkgICAgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyk7CisKKwlpZiAocmV0ID49IDApCisJCXJldHVybjsJCS8qIE9LICovCisKKwlkYmcoInNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0OiBrZXJuZWxfdGhyZWFkIGZhaWxlZCAoJWQpISIsIHJldCk7CisKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwl1ZHNsX3B1dF9pbnN0YW5jZSgmaW5zdGFuY2UtPnUpOworCS8qIEp1c3QgcHJldGVuZCBpdCBuZXZlciBoYXBwZW5lZC4uLiBob3BlIG1vZGVtX3J1biBoYXBwZW5zICovCisjZW5kaWYJCQkJLyogVVNFX0ZXX0xPQURFUiAqLworCisJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAwKTsKK30KKworc3RhdGljIGludCBzcGVlZHRjaF9maXJtd2FyZV93YWl0KHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCXNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KCh2b2lkICopaW5zdGFuY2UpOworCisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbnN0YW5jZS0+ZmlybXdhcmVfd2FpdGVycywgaW5zdGFuY2UtPnN0YXR1cyAhPSBVRFNMX0xPQURJTkdfRklSTVdBUkUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldHVybiAoaW5zdGFuY2UtPnN0YXR1cyA9PSBVRFNMX0xPQURFRF9GSVJNV0FSRSkgPyAwIDogLUVBR0FJTjsKK30KKworLyoqKioqKioqKioKKyoqICBVU0IgICoqCisqKioqKioqKioqLworCitzdGF0aWMgaW50IHNwZWVkdGNoX3VzYl9pb2N0bChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsCisJCQkgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygic3BlZWR0Y2hfdXNiX2lvY3RsIGVudGVyZWQiKTsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJZGJnKCJzcGVlZHRjaF91c2JfaW9jdGw6IE5VTEwgaW5zdGFuY2UhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN3aXRjaCAoY29kZSkgeworCWNhc2UgVURTTF9JT0NUTF9MSU5FX1VQOgorCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKwkJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAxKTsKKwkJcmV0dXJuIChpbnN0YW5jZS0+dS5zdGF0dXMgPT0gVURTTF9MT0FERURfRklSTVdBUkUpID8gMCA6IC1FSU87CisJY2FzZSBVRFNMX0lPQ1RMX0xJTkVfRE9XTjoKKwkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlOworCXVuc2lnbmVkIGNoYXIgbWFjX3N0clsxM107CisJaW50IHJldCwgaTsKKwljaGFyIGJ1ZjdbU0laRV83XTsKKworCWRiZygic3BlZWR0Y2hfdXNiX3Byb2JlOiB0cnlpbmcgZGV2aWNlIHdpdGggdmVuZG9yPTB4JXgsIHByb2R1Y3Q9MHgleCwgaWZudW0gJWQiLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwgaWZudW0pOworCisJaWYgKChkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwgCisJICAgIChpZm51bSAhPSAxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYmcoInNwZWVkdGNoX3VzYl9wcm9iZTogZGV2aWNlIGFjY2VwdGVkIik7CisKKwkvKiBpbnN0YW5jZSBpbml0ICovCisJaW5zdGFuY2UgPSBrbWFsbG9jKHNpemVvZigqaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygic3BlZWR0Y2hfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIGluc3RhbmNlIGRhdGEhIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChpbnN0YW5jZSwgMCwgc2l6ZW9mKHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhKSk7CisKKwlpZiAoKHJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldiwgMCwgMCkpIDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKChyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYsIDIsIDApKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWluc3RhbmNlLT51LmRhdGFfZW5kcG9pbnQgPSBTUEVFRFRDSF9FTkRQT0lOVF9EQVRBOworCWluc3RhbmNlLT51LmZpcm13YXJlX3dhaXQgPSBzcGVlZHRjaF9maXJtd2FyZV93YWl0OworCWluc3RhbmNlLT51LmRyaXZlcl9uYW1lID0gc3BlZWR0Y2hfZHJpdmVyX25hbWU7CisKKwlyZXQgPSB1ZHNsX2luc3RhbmNlX3NldHVwKGRldiwgJmluc3RhbmNlLT51KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpbml0X3RpbWVyKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJaW5zdGFuY2UtPnBvbGxfdGltZXIuZnVuY3Rpb24gPSBzcGVlZHRjaF90aW1lcl9wb2xsOworCWluc3RhbmNlLT5wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbnN0YW5jZTsKKworCUlOSVRfV09SSygmaW5zdGFuY2UtPnBvbGxfd29yaywgKHZvaWQgKilzcGVlZHRjaF9wb2xsX3N0YXR1cywgaW5zdGFuY2UpOworCisJLyogc2V0IE1BQyBhZGRyZXNzLCBpdCBpcyBzdG9yZWQgaW4gdGhlIHNlcmlhbCBudW1iZXIgKi8KKwltZW1zZXQoaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpLCAwLCBzaXplb2YoaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpKSk7CisJaWYgKHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgbWFjX3N0ciwgc2l6ZW9mKG1hY19zdHIpKSA9PSAxMikgeworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpW2ldID0KKwkJCQkoaGV4MmludChtYWNfc3RyW2kgKiAyXSkgKiAxNikgKyAoaGV4MmludChtYWNfc3RyW2kgKiAyICsgMV0pKTsKKwl9CisKKwkvKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZSBtb2RlbSBhbHJlYWR5IHNlZW1zIHRvIGJlIGFsaXZlICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDEyLCAweGMwLCAweDA3LCAweDAwLCBidWY3LCBTSVpFXzcsIDUwMCk7CisKKwlpZiAocmV0ID09IFNJWkVfNykgeworCQlkYmcoImZpcm13YXJlIGFwcGVhcnMgdG8gYmUgYWxyZWFkeSBsb2FkZWQiKTsKKwkJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAxKTsKKwkJc3BlZWR0Y2hfcG9sbF9zdGF0dXMoaW5zdGFuY2UpOworCX0gZWxzZSB7CisJCXNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KGluc3RhbmNlKTsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGluc3RhbmNlKTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwlrZnJlZShpbnN0YW5jZSk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygic3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3QgZW50ZXJlZCIpOworCisJaWYgKCFpbnN0YW5jZSkgeworCQlkYmcoInNwZWVkdGNoX3VzYl9kaXNjb25uZWN0OiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm47CisJfQorCisvKlFRIG5lZWQgdG8gaGFuZGxlIGRpc2Nvbm5lY3RzIG9uIGludGVyZmFjZSAjMiB3aGlsZSB1cGxvYWRpbmcgZmlybXdhcmUgKi8KKy8qUVEgYW5kIHdoYXQgYWJvdXQgaW50ZXJmYWNlICMxPyAqLworCisJaWYgKGluc3RhbmNlLT5pbnRfdXJiKSB7CisJCXN0cnVjdCB1cmIgKmludF91cmIgPSBpbnN0YW5jZS0+aW50X3VyYjsKKwkJaW5zdGFuY2UtPmludF91cmIgPSBOVUxMOworCQl3bWIoKTsKKwkJdXNiX3VubGlua191cmIoaW50X3VyYik7CisJCXVzYl9mcmVlX3VyYihpbnRfdXJiKTsKKwl9CisKKwlpbnN0YW5jZS0+aW50X2RhdGFbMF0gPSAxOworCWRlbF90aW1lcl9zeW5jKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJd21iKCk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXVkc2xfaW5zdGFuY2VfZGlzY29ubmVjdCgmaW5zdGFuY2UtPnUpOworCisJLyogY2xlYW4gdXAgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCXVkc2xfcHV0X2luc3RhbmNlKCZpbnN0YW5jZS0+dSk7Cit9CisKKy8qKioqKioqKioqKgorKiogIGluaXQgICoqCisqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgc3BlZWR0Y2hfdXNiX2luaXQodm9pZCkKK3sKKwlkYmcoInNwZWVkdGNoX3VzYl9pbml0OiBkcml2ZXIgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNwZWVkdGNoX3VzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3BlZWR0Y2hfdXNiX2NsZWFudXAodm9pZCkKK3sKKwlkYmcoInNwZWVkdGNoX3VzYl9jbGVhbnVwIGVudGVyZWQiKTsKKworCXVzYl9kZXJlZ2lzdGVyKCZzcGVlZHRjaF91c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3BlZWR0Y2hfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoc3BlZWR0Y2hfdXNiX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JfYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2Q0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5jCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHVzYl9hdG0uYyAtIEdlbmVyaWMgVVNCIHhEU0wgZHJpdmVyIGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCBBbGNhdGVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCBEdW5jYW4gU2FuZHMsIFNvbE5lZ3JvLCBKb3NlcCBDb21hcworICogIENvcHlyaWdodCAoQykgMjAwNCwgRGF2aWQgV29vZGhvdXNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogIFdyaXR0ZW4gYnkgSm9oYW4gVmVycmVwdCwgbWFpbnRhaW5lZCBieSBEdW5jYW4gU2FuZHMgKGR1bmNhbi5zYW5kc0BmcmVlLmZyKQorICoKKyAqICAxLjcrOgktIFNlZSB0aGUgY2hlY2staW4gbG9ncworICoKKyAqICAxLjY6CS0gTm8gbG9uZ2VyIG9wZW5zIGEgY29ubmVjdGlvbiBpZiB0aGUgZmlybXdhcmUgaXMgbm90IGxvYWRlZAorICogIAkJLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgc3BlZWR0b3VjaCAzMzAKKyAqICAJCS0gUmVtb3ZlZCB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBkZXZpY2VzCisgKiAgCQktIE1vZHVsZSBub3cgYXV0b2xvYWRzIG9uIGRldmljZSBwbHVnaW4KKyAqICAJCS0gTWVyZ2VkIHJlbGV2YW50IHBhcnRzIG9mIHNhcmxpYgorICogIAkJLSBSZXBsYWNlZCB0aGUga2VybmVsIHRocmVhZCB3aXRoIGEgdGFza2xldAorICogIAkJLSBOZXcgcGFja2V0IHRyYW5zbWlzc2lvbiBjb2RlCisgKiAgCQktIENoYW5nZWQgcHJvYyBmaWxlIGNvbnRlbnRzCisgKiAgCQktIEZpeGVkIGFsbCBrbm93biBTTVAgcmFjZXMKKyAqICAJCS0gTWFueSBmaXhlcyBhbmQgY2xlYW51cHMKKyAqICAJCS0gVmFyaW91cyBmaXhlcyBieSBPbGl2ZXIgTmV1a3VtIChvbGl2ZXJAbmV1a3VtLm5hbWUpCisgKgorICogIDEuNUE6CS0gVmVyc2lvbiBmb3IgaW5jbHVzaW9uIGluIDIuNSBzZXJpZXMga2VybmVsCisgKgkJLSBNb2RpZmljYXRpb25zIGJ5IFJpY2hhcmQgUHVyZGllIChycHVyZGllQHJwc3lzLm5ldCkKKyAqCQktIG1hZGUgY29tcGF0aWJsZSB3aXRoIGtlcm5lbCAyLjUuNiBvbndhcmRzIGJ5IGNoYW5naW5nCisgKgkJdWRzbF91c2Jfc2VuZF9kYXRhX2NvbnRleHQtPnVyYiB0byBhIHBvaW50ZXIgYW5kIGFkZGluZyBjb2RlCisgKgkJdG8gYWxsb2MgYW5kIGZyZWUgaXQKKyAqCQktIHJlbW92ZV93YWl0X3F1ZXVlKCkgYWRkZWQgdG8gdWRzbF9hdG1fcHJvY2Vzc3F1ZXVlX3RocmVhZCgpCisgKgorICogIDEuNToJLSBmaXhlZCBtZW1vcnkgbGVhayB3aGVuIGF0bXNhcl9kZWNvZGVfYWFsNSByZXR1cm5lZCBOVUxMLgorICoJCShyZXBvcnRlZCBieSBzdGVwaGVuLnJvYmluc29uQHplbi5jby51aykKKyAqCisgKiAgMS40OgktIGNoYW5nZWQgdGhlIHNwaW5fbG9jaygpIHVuZGVyIGludGVycnVwdCB0byBzcGluX2xvY2tfaXJxc2F2ZSgpCisgKgkJLSB1bmxpbmsgYWxsIGFjdGl2ZSBzZW5kIHVyYnMgb2YgYSB2Y2MgdGhhdCBpcyBiZWluZyBjbG9zZWQuCisgKgorICogIDEuMy4xOgktIGFkZGVkIHRoZSB2ZXJzaW9uIG51bWJlcgorICoKKyAqICAxLjM6CS0gQWRkZWQgbXVsdGlwbGUgc2VuZCB1cmIgc3VwcG9ydAorICoJCS0gZml4ZWQgbWVtb3J5IGxlYWsgYW5kIHZjYy0+dHhfaW51c2Ugc3RhcnZhdGlvbiBidWcKKyAqCQkgIHdoZW4gbm90IGVub3VnaCBtZW1vcnkgbGVmdCBpbiB2Y2MuCisgKgorICogIDEuMjoJLSBGaXhlZCByYWNlIGNvbmRpdGlvbiBpbiB1ZHNsX3VzYl9zZW5kX2RhdGEoKQorICogIDEuMToJLSBUdXJuZWQgb2ZmIHBhY2tldCBkZWJ1Z2dpbmcKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAidXNiX2F0bS5oIgorCisjaWZkZWYgVkVSQk9TRV9ERUJVRworc3RhdGljIGludCB1ZHNsX3ByaW50X3BhY2tldChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKKyNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQl1ZHNsX3ByaW50X3BhY2tldCAoYXJnKQorI2RlZmluZSB2ZGJnKGFyZy4uLikJCWRiZyAoYXJnKQorI2Vsc2UKKyNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQorI2RlZmluZSB2ZGJnKGFyZy4uLikKKyNlbmRpZgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJIkpvaGFuIFZlcnJlcHQsIER1bmNhbiBTYW5kcyA8ZHVuY2FuLnNhbmRzQGZyZWUuZnI+IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMS44IgorI2RlZmluZSBEUklWRVJfREVTQwkiR2VuZXJpYyBVU0IgQVRNL0RTTCBJL08sIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9yY3ZfdXJicyA9IFVEU0xfREVGQVVMVF9SQ1ZfVVJCUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX3NuZF91cmJzID0gVURTTF9ERUZBVUxUX1NORF9VUkJTOworc3RhdGljIHVuc2lnbmVkIGludCBudW1fcmN2X2J1ZnMgPSBVRFNMX0RFRkFVTFRfUkNWX0JVRlM7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9zbmRfYnVmcyA9IFVEU0xfREVGQVVMVF9TTkRfQlVGUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmN2X2J1Zl9zaXplID0gVURTTF9ERUZBVUxUX1JDVl9CVUZfU0laRTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2J1Zl9zaXplID0gVURTTF9ERUZBVUxUX1NORF9CVUZfU0laRTsKKworbW9kdWxlX3BhcmFtKG51bV9yY3ZfdXJicywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yY3ZfdXJicywKKwkJICJOdW1iZXIgb2YgdXJicyB1c2VkIGZvciByZWNlcHRpb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9SQ1ZfVVJCUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfVVJCUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9zbmRfdXJicywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9zbmRfdXJicywKKwkJICJOdW1iZXIgb2YgdXJicyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfVVJCUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfVVJCUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9yY3ZfYnVmcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yY3ZfYnVmcywKKwkJICJOdW1iZXIgb2YgYnVmZmVycyB1c2VkIGZvciByZWNlcHRpb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9SQ1ZfQlVGUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfQlVGUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9zbmRfYnVmcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9zbmRfYnVmcywKKwkJICJOdW1iZXIgb2YgYnVmZmVycyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfQlVGUykgIikiKTsKKworbW9kdWxlX3BhcmFtKHJjdl9idWZfc2l6ZSwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJjdl9idWZfc2l6ZSwKKwkJICJTaXplIG9mIHRoZSBidWZmZXJzIHVzZWQgZm9yIHJlY2VwdGlvbiAocmFuZ2U6IDAtIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfTUFYX1JDVl9CVUZfU0laRSkgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfQlVGX1NJWkUpICIpIik7CisKK21vZHVsZV9wYXJhbShzbmRfYnVmX3NpemUsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzbmRfYnVmX3NpemUsCisJCSAiU2l6ZSBvZiB0aGUgYnVmZmVycyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGX1NJWkUpICIsIGRlZmF1bHQ6ICIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX0RFRkFVTFRfU05EX0JVRl9TSVpFKSAiKSIpOworCisvKiBBVE0gKi8KKworc3RhdGljIHZvaWQgdWRzbF9hdG1fZGV2X2Nsb3NlKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworc3RhdGljIGludCB1ZHNsX2F0bV9vcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpOworc3RhdGljIHZvaWQgdWRzbF9hdG1fY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYyk7CitzdGF0aWMgaW50IHVkc2xfYXRtX2lvY3RsKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKTsKK3N0YXRpYyBpbnQgdWRzbF9hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBpbnQgdWRzbF9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpOworCitzdGF0aWMgc3RydWN0IGF0bWRldl9vcHMgdWRzbF9hdG1fZGV2b3BzID0geworCS5kZXZfY2xvc2UJPSB1ZHNsX2F0bV9kZXZfY2xvc2UsCisJLm9wZW4JCT0gdWRzbF9hdG1fb3BlbiwKKwkuY2xvc2UJCT0gdWRzbF9hdG1fY2xvc2UsCisJLmlvY3RsCQk9IHVkc2xfYXRtX2lvY3RsLAorCS5zZW5kCQk9IHVkc2xfYXRtX3NlbmQsCisJLnByb2NfcmVhZAk9IHVkc2xfYXRtX3Byb2NfcmVhZCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisvKioqKioqKioqKioKKyoqICBtaXNjICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZHNsX3BvcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh2Y2MtPnBvcCkKKwkJdmNjLT5wb3AodmNjLCBza2IpOworCWVsc2UKKwkJZGV2X2tmcmVlX3NrYihza2IpOworfQorCisvKioqKioqKioqKioqKgorKiogIGRlY29kZSAgKioKKyoqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVkc2xfdmNjX2RhdGEgKnVkc2xfZmluZF92Y2Moc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkJCQkgIHNob3J0IHZwaSwgaW50IHZjaSkKK3sKKwlzdHJ1Y3QgdWRzbF92Y2NfZGF0YSAqdmNjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Y2MsICZpbnN0YW5jZS0+dmNjX2xpc3QsIGxpc3QpCisJCWlmICgodmNjLT52Y2kgPT0gdmNpKSAmJiAodmNjLT52cGkgPT0gdnBpKSkKKwkJCXJldHVybiB2Y2M7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfZXh0cmFjdF9jZWxscyhzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIHVuc2lnbmVkIGludCBob3dtYW55KQoreworCXN0cnVjdCB1ZHNsX3ZjY19kYXRhICpjYWNoZWRfdmNjID0gTlVMTDsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXN0cnVjdCBza19idWZmICpzYXJiOworCXN0cnVjdCB1ZHNsX3ZjY19kYXRhICp2Y2NfZGF0YTsKKwlpbnQgY2FjaGVkX3ZjaSA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHB0aTsKKwlpbnQgdmNpOworCXNob3J0IGNhY2hlZF92cGkgPSAwOworCXNob3J0IHZwaTsKKworCWZvciAoaSA9IDA7IGkgPCBob3dtYW55OworCSAgICAgaSsrLCBzb3VyY2UgKz0gQVRNX0NFTExfU0laRSArIGluc3RhbmNlLT5yY3ZfcGFkZGluZykgeworCQl2cGkgPSAoKHNvdXJjZVswXSAmIDB4MGYpIDw8IDQpIHwgKHNvdXJjZVsxXSA+PiA0KTsKKwkJdmNpID0gKChzb3VyY2VbMV0gJiAweDBmKSA8PCAxMikgfCAoc291cmNlWzJdIDw8IDQpIHwgKHNvdXJjZVszXSA+PiA0KTsKKwkJcHRpID0gKHNvdXJjZVszXSAmIDB4MikgIT0gMDsKKworCQl2ZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IHZwaSAlaGQsIHZjaSAlZCwgcHRpICVkIiwgdnBpLCB2Y2ksIHB0aSk7CisKKwkJaWYgKGNhY2hlZF92Y2MgJiYgKHZjaSA9PSBjYWNoZWRfdmNpKSAmJiAodnBpID09IGNhY2hlZF92cGkpKQorCQkJdmNjX2RhdGEgPSBjYWNoZWRfdmNjOworCQllbHNlIGlmICgodmNjX2RhdGEgPSB1ZHNsX2ZpbmRfdmNjKGluc3RhbmNlLCB2cGksIHZjaSkpKSB7CisJCQljYWNoZWRfdmNjID0gdmNjX2RhdGE7CisJCQljYWNoZWRfdnBpID0gdnBpOworCQkJY2FjaGVkX3ZjaSA9IHZjaTsKKwkJfSBlbHNlIHsKKwkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiB1bmtub3duIHZwaS92Y2kgKCVoZC8lZCkhIiwgdnBpLCB2Y2kpOworCQkJY29udGludWU7CisJCX0KKworCQl2Y2MgPSB2Y2NfZGF0YS0+dmNjOworCQlzYXJiID0gdmNjX2RhdGEtPnNhcmI7CisKKwkJaWYgKHNhcmItPnRhaWwgKyBBVE1fQ0VMTF9QQVlMT0FEID4gc2FyYi0+ZW5kKSB7CisJCQlkYmcoInVkc2xfZXh0cmFjdF9jZWxsczogYnVmZmVyIG92ZXJydW4gKHNhcmItPmxlbiAldSwgdmNjOiAweCVwKSEiLCBzYXJiLT5sZW4sIHZjYyk7CisJCQkvKiBkaXNjYXJkIGNlbGxzIGFscmVhZHkgcmVjZWl2ZWQgKi8KKwkJCXNrYl90cmltKHNhcmIsIDApOworCQl9CisKKwkJbWVtY3B5KHNhcmItPnRhaWwsIHNvdXJjZSArIEFUTV9DRUxMX0hFQURFUiwgQVRNX0NFTExfUEFZTE9BRCk7CisJCV9fc2tiX3B1dChzYXJiLCBBVE1fQ0VMTF9QQVlMT0FEKTsKKworCQlpZiAocHRpKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKKwkJCXVuc2lnbmVkIGludCBwZHVfbGVuZ3RoOworCisJCQlsZW5ndGggPSAoc291cmNlW0FUTV9DRUxMX1NJWkUgLSA2XSA8PCA4KSArIHNvdXJjZVtBVE1fQ0VMTF9TSVpFIC0gNV07CisKKwkJCS8qIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgKi8KKwkJCWlmIChsZW5ndGggPiBBVE1fTUFYX0FBTDVfUERVKSB7CisJCQkJZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IGJvZ3VzIGxlbmd0aCAldSAodmNjOiAweCVwKSEiLCBsZW5ndGgsIHZjYyk7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcGR1X2xlbmd0aCA9IFVEU0xfTlVNX0NFTExTKGxlbmd0aCkgKiBBVE1fQ0VMTF9QQVlMT0FEOworCisJCQlpZiAoc2FyYi0+bGVuIDwgcGR1X2xlbmd0aCkgeworCQkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBib2d1cyBwZHVfbGVuZ3RoICV1IChzYXJiLT5sZW46ICV1LCB2Y2M6IDB4JXApISIsIHBkdV9sZW5ndGgsIHNhcmItPmxlbiwgdmNjKTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9lcnIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpZiAoY3JjMzJfYmUofjAsIHNhcmItPnRhaWwgLSBwZHVfbGVuZ3RoLCBwZHVfbGVuZ3RoKSAhPSAweGM3MDRkZDdiKSB7CisJCQkJZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IHBhY2tldCBmYWlsZWQgY3JjIGNoZWNrICh2Y2M6IDB4JXApISIsIHZjYyk7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBnb3QgcGFja2V0IChsZW5ndGg6ICV1LCBwZHVfbGVuZ3RoOiAldSwgdmNjOiAweCVwKSIsIGxlbmd0aCwgcGR1X2xlbmd0aCwgdmNjKTsKKworCQkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgpKSkgeworCQkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBubyBtZW1vcnkgZm9yIHNrYiAobGVuZ3RoOiAldSkhIiwgbGVuZ3RoKTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBhbGxvY2F0ZWQgbmV3IHNrX2J1ZmYgKHNrYjogMHglcCwgc2tiLT50cnVlc2l6ZTogJXUpIiwgc2tiLCBza2ItPnRydWVzaXplKTsKKworCQkJaWYgKCFhdG1fY2hhcmdlKHZjYywgc2tiLT50cnVlc2l6ZSkpIHsKKwkJCQlkYmcoInVkc2xfZXh0cmFjdF9jZWxsczogZmFpbGVkIGF0bV9jaGFyZ2UgKHNrYi0+dHJ1ZXNpemU6ICV1KSEiLCBza2ItPnRydWVzaXplKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJZ290byBvdXQ7CS8qIGF0bV9jaGFyZ2UgaW5jcmVtZW50cyByeF9kcm9wICovCisJCQl9CisKKwkJCW1lbWNweShza2ItPmRhdGEsIHNhcmItPnRhaWwgLSBwZHVfbGVuZ3RoLCBsZW5ndGgpOworCQkJX19za2JfcHV0KHNrYiwgbGVuZ3RoKTsKKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBzZW5kaW5nIHNrYiAweCVwLCBza2ItPmxlbiAldSwgc2tiLT50cnVlc2l6ZSAldSIsIHNrYiwgc2tiLT5sZW4sIHNrYi0+dHJ1ZXNpemUpOworCisJCQlQQUNLRVRERUJVRyhza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQkJdmNjLT5wdXNoKHZjYywgc2tiKTsKKworCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOworCQlvdXQ6CisJCQlza2JfdHJpbShzYXJiLCAwKTsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioKKyoqICBlbmNvZGUgICoqCisqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdWRzbF9maWxsX2NlbGxfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgc3RydWN0IGF0bV92Y2MgKnZjYykKK3sKKwl0YXJnZXRbMF0gPSB2Y2MtPnZwaSA+PiA0OworCXRhcmdldFsxXSA9ICh2Y2MtPnZwaSA8PCA0KSB8ICh2Y2MtPnZjaSA+PiAxMik7CisJdGFyZ2V0WzJdID0gdmNjLT52Y2kgPj4gNDsKKwl0YXJnZXRbM10gPSB2Y2MtPnZjaSA8PCA0OworCXRhcmdldFs0XSA9IDB4ZWM7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHplcm9zW0FUTV9DRUxMX1BBWUxPQURdOworCitzdGF0aWMgdm9pZCB1ZHNsX2dyb29tX3NrYihzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHNsX2NvbnRyb2wgKmN0cmwgPSBVRFNMX1NLQihza2IpOworCXVuc2lnbmVkIGludCB6ZXJvX3BhZGRpbmc7CisJdTMyIGNyYzsKKworCWN0cmwtPmF0bV9kYXRhLnZjYyA9IHZjYzsKKworCWN0cmwtPm51bV9jZWxscyA9IFVEU0xfTlVNX0NFTExTKHNrYi0+bGVuKTsKKwljdHJsLT5udW1fZW50aXJlID0gc2tiLT5sZW4gLyBBVE1fQ0VMTF9QQVlMT0FEOworCisJemVyb19wYWRkaW5nID0gY3RybC0+bnVtX2NlbGxzICogQVRNX0NFTExfUEFZTE9BRCAtIHNrYi0+bGVuIC0gQVRNX0FBTDVfVFJBSUxFUjsKKworCWlmIChjdHJsLT5udW1fZW50aXJlICsgMSA8IGN0cmwtPm51bV9jZWxscykKKwkJY3RybC0+cGR1X3BhZGRpbmcgPSB6ZXJvX3BhZGRpbmcgLSAoQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVIpOworCWVsc2UKKwkJY3RybC0+cGR1X3BhZGRpbmcgPSB6ZXJvX3BhZGRpbmc7CisKKwljdHJsLT5hYWw1X3RyYWlsZXJbMF0gPSAwOwkvKiBVVSA9IDAgKi8KKwljdHJsLT5hYWw1X3RyYWlsZXJbMV0gPSAwOwkvKiBDUEkgPSAwICovCisJY3RybC0+YWFsNV90cmFpbGVyWzJdID0gc2tiLT5sZW4gPj4gODsKKwljdHJsLT5hYWw1X3RyYWlsZXJbM10gPSBza2ItPmxlbjsKKworCWNyYyA9IGNyYzMyX2JlKH4wLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwljcmMgPSBjcmMzMl9iZShjcmMsIHplcm9zLCB6ZXJvX3BhZGRpbmcpOworCWNyYyA9IGNyYzMyX2JlKGNyYywgY3RybC0+YWFsNV90cmFpbGVyLCA0KTsKKwljcmMgPSB+Y3JjOworCisJY3RybC0+YWFsNV90cmFpbGVyWzRdID0gY3JjID4+IDI0OworCWN0cmwtPmFhbDVfdHJhaWxlcls1XSA9IGNyYyA+PiAxNjsKKwljdHJsLT5hYWw1X3RyYWlsZXJbNl0gPSBjcmMgPj4gODsKKwljdHJsLT5hYWw1X3RyYWlsZXJbN10gPSBjcmM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWRzbF93cml0ZV9jZWxscyhzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBob3dtYW55LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqKnRhcmdldF9wKQoreworCXN0cnVjdCB1ZHNsX2NvbnRyb2wgKmN0cmwgPSBVRFNMX1NLQihza2IpOworCXVuc2lnbmVkIGNoYXIgKnRhcmdldCA9ICp0YXJnZXRfcDsKKwl1bnNpZ25lZCBpbnQgbmMsIG5lLCBpOworCisJdmRiZygidWRzbF93cml0ZV9jZWxsczogaG93bWFueT0ldSwgc2tiLT5sZW49JWQsIG51bV9jZWxscz0ldSwgbnVtX2VudGlyZT0ldSwgcGR1X3BhZGRpbmc9JXUiLCBob3dtYW55LCBza2ItPmxlbiwgY3RybC0+bnVtX2NlbGxzLCBjdHJsLT5udW1fZW50aXJlLCBjdHJsLT5wZHVfcGFkZGluZyk7CisKKwluYyA9IGN0cmwtPm51bV9jZWxsczsKKwluZSA9IG1pbihob3dtYW55LCBjdHJsLT5udW1fZW50aXJlKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZTsgaSsrKSB7CisJCXVkc2xfZmlsbF9jZWxsX2hlYWRlcih0YXJnZXQsIGN0cmwtPmF0bV9kYXRhLnZjYyk7CisJCXRhcmdldCArPSBBVE1fQ0VMTF9IRUFERVI7CisJCW1lbWNweSh0YXJnZXQsIHNrYi0+ZGF0YSwgQVRNX0NFTExfUEFZTE9BRCk7CisJCXRhcmdldCArPSBBVE1fQ0VMTF9QQVlMT0FEOworCQlpZiAoaW5zdGFuY2UtPnNuZF9wYWRkaW5nKSB7CisJCQltZW1zZXQodGFyZ2V0LCAwLCBpbnN0YW5jZS0+c25kX3BhZGRpbmcpOworCQkJdGFyZ2V0ICs9IGluc3RhbmNlLT5zbmRfcGFkZGluZzsKKwkJfQorCQlfX3NrYl9wdWxsKHNrYiwgQVRNX0NFTExfUEFZTE9BRCk7CisJfQorCisJY3RybC0+bnVtX2VudGlyZSAtPSBuZTsKKworCWlmICghKGN0cmwtPm51bV9jZWxscyAtPSBuZSkgfHwgIShob3dtYW55IC09IG5lKSkKKwkJZ290byBvdXQ7CisKKwl1ZHNsX2ZpbGxfY2VsbF9oZWFkZXIodGFyZ2V0LCBjdHJsLT5hdG1fZGF0YS52Y2MpOworCXRhcmdldCArPSBBVE1fQ0VMTF9IRUFERVI7CisJbWVtY3B5KHRhcmdldCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJdGFyZ2V0ICs9IHNrYi0+bGVuOworCV9fc2tiX3B1bGwoc2tiLCBza2ItPmxlbik7CisJbWVtc2V0KHRhcmdldCwgMCwgY3RybC0+cGR1X3BhZGRpbmcpOworCXRhcmdldCArPSBjdHJsLT5wZHVfcGFkZGluZzsKKworCWlmICgtLWN0cmwtPm51bV9jZWxscykgeworCQlpZiAoIS0taG93bWFueSkgeworCQkJY3RybC0+cGR1X3BhZGRpbmcgPSBBVE1fQ0VMTF9QQVlMT0FEIC0gQVRNX0FBTDVfVFJBSUxFUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGluc3RhbmNlLT5zbmRfcGFkZGluZykgeworCQkJbWVtc2V0KHRhcmdldCwgMCwgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKTsKKwkJCXRhcmdldCArPSBpbnN0YW5jZS0+c25kX3BhZGRpbmc7CisJCX0KKwkJdWRzbF9maWxsX2NlbGxfaGVhZGVyKHRhcmdldCwgY3RybC0+YXRtX2RhdGEudmNjKTsKKwkJdGFyZ2V0ICs9IEFUTV9DRUxMX0hFQURFUjsKKwkJbWVtc2V0KHRhcmdldCwgMCwgQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVIpOworCQl0YXJnZXQgKz0gQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVI7CisKKwkJLS1jdHJsLT5udW1fY2VsbHM7CisJCVVEU0xfQVNTRVJUKCFjdHJsLT5udW1fY2VsbHMpOworCX0KKworCW1lbWNweSh0YXJnZXQsIGN0cmwtPmFhbDVfdHJhaWxlciwgQVRNX0FBTDVfVFJBSUxFUik7CisJdGFyZ2V0ICs9IEFUTV9BQUw1X1RSQUlMRVI7CisJLyogc2V0IHB0aSBiaXQgaW4gbGFzdCBjZWxsICovCisJKih0YXJnZXQgKyAzIC0gQVRNX0NFTExfU0laRSkgfD0gMHgyOworCWlmIChpbnN0YW5jZS0+c25kX3BhZGRpbmcpIHsKKwkJbWVtc2V0KHRhcmdldCwgMCwgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKTsKKwkJdGFyZ2V0ICs9IGluc3RhbmNlLT5zbmRfcGFkZGluZzsKKwl9Cisgb3V0OgorCSp0YXJnZXRfcCA9IHRhcmdldDsKKwlyZXR1cm4gbmMgLSBjdHJsLT5udW1fY2VsbHM7Cit9CisKKy8qKioqKioqKioqKioqKgorKiogIHJlY2VpdmUgICoqCisqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgdWRzbF9jb21wbGV0ZV9yZWNlaXZlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZTsKKwlzdHJ1Y3QgdWRzbF9yZWNlaXZlciAqcmN2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYiB8fCAhKHJjdiA9IHVyYi0+Y29udGV4dCkpIHsKKwkJZGJnKCJ1ZHNsX2NvbXBsZXRlX3JlY2VpdmU6IGJhZCB1cmIhIik7CisJCXJldHVybjsKKwl9CisKKwlpbnN0YW5jZSA9IHJjdi0+aW5zdGFuY2U7CisJYnVmID0gcmN2LT5idWZmZXI7CisKKwlidWYtPmZpbGxlZF9jZWxscyA9IHVyYi0+YWN0dWFsX2xlbmd0aCAvIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnJjdl9wYWRkaW5nKTsKKworCXZkYmcoInVkc2xfY29tcGxldGVfcmVjZWl2ZTogdXJiIDB4JXAsIHN0YXR1cyAlZCwgYWN0dWFsX2xlbmd0aCAlZCwgZmlsbGVkX2NlbGxzICV1LCByY3YgMHglcCwgYnVmIDB4JXAiLCB1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgsIGJ1Zi0+ZmlsbGVkX2NlbGxzLCByY3YsIGJ1Zik7CisKKwlVRFNMX0FTU0VSVChidWYtPmZpbGxlZF9jZWxscyA8PSByY3ZfYnVmX3NpemUpOworCisJLyogbWF5IG5vdCBiZSBpbl9pbnRlcnJ1cHQoKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJnJjdi0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9yZWNlaXZlcnMpOworCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKwlpZiAobGlrZWx5KCF1cmItPnN0YXR1cykpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRzbF9wcm9jZXNzX3JlY2VpdmUodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1ZHNsX3JlY2VpdmVfYnVmZmVyICpidWY7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKWRhdGE7CisJc3RydWN0IHVkc2xfcmVjZWl2ZXIgKnJjdjsKKwlpbnQgZXJyOworCisgbWFkZV9wcm9ncmVzczoKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmluc3RhbmNlLT5zcGFyZV9yZWNlaXZlX2J1ZmZlcnMpKSB7CisJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVycykpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlyY3YgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9yZWNlaXZlcnMubmV4dCwKKwkJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmcmN2LT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKworCQlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9yZWNlaXZlX2J1ZmZlcnMubmV4dCwKKwkJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKworCQlyY3YtPmJ1ZmZlciA9IGJ1ZjsKKworCQl1c2JfZmlsbF9idWxrX3VyYihyY3YtPnVyYiwgaW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoaW5zdGFuY2UtPnVzYl9kZXYsIGluc3RhbmNlLT5kYXRhX2VuZHBvaW50KSwKKwkJCQkgIGJ1Zi0+YmFzZSwKKwkJCQkgIHJjdl9idWZfc2l6ZSAqIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnJjdl9wYWRkaW5nKSwKKwkJCQkgIHVkc2xfY29tcGxldGVfcmVjZWl2ZSwgcmN2KTsKKworCQl2ZGJnKCJ1ZHNsX3Byb2Nlc3NfcmVjZWl2ZTogc2VuZGluZyB1cmIgMHglcCwgcmN2IDB4JXAsIGJ1ZiAweCVwIiwKKwkJICAgICByY3YtPnVyYiwgcmN2LCBidWYpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIocmN2LT51cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCWRiZygidWRzbF9wcm9jZXNzX3JlY2VpdmU6IHVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpISIsIGVycik7CisJCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwkJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfcmVjZWl2ZXJzKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZpbnN0YW5jZS0+ZmlsbGVkX3JlY2VpdmVfYnVmZmVycykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwkJcmV0dXJuOwkJLyogZG9uZSAtIG5vIG1vcmUgYnVmZmVycyAqLworCX0KKwlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzLm5leHQsCisJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIsIGxpc3QpOworCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisKKwl2ZGJnKCJ1ZHNsX3Byb2Nlc3NfcmVjZWl2ZTogcHJvY2Vzc2luZyBidWYgMHglcCIsIGJ1Zik7CisJdWRzbF9leHRyYWN0X2NlbGxzKGluc3RhbmNlLCBidWYtPmJhc2UsIGJ1Zi0+ZmlsbGVkX2NlbGxzKTsKKwlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJZ290byBtYWRlX3Byb2dyZXNzOworfQorCisvKioqKioqKioqKioKKyoqICBzZW5kICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHVkc2xfY29tcGxldGVfc2VuZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlOworCXN0cnVjdCB1ZHNsX3NlbmRlciAqc25kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYiB8fCAhKHNuZCA9IHVyYi0+Y29udGV4dCkgfHwgIShpbnN0YW5jZSA9IHNuZC0+aW5zdGFuY2UpKSB7CisJCWRiZygidWRzbF9jb21wbGV0ZV9zZW5kOiBiYWQgdXJiISIpOworCQlyZXR1cm47CisJfQorCisJdmRiZygidWRzbF9jb21wbGV0ZV9zZW5kOiB1cmIgMHglcCwgc3RhdHVzICVkLCBzbmQgMHglcCwgYnVmIDB4JXAiLCB1cmIsCisJICAgICB1cmItPnN0YXR1cywgc25kLCBzbmQtPmJ1ZmZlcik7CisKKwkvKiBtYXkgbm90IGJlIGluX2ludGVycnVwdCgpICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5zZW5kX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmc25kLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3NlbmRlcnMpOworCWxpc3RfYWRkKCZzbmQtPmJ1ZmZlci0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zZW5kX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRzbF9wcm9jZXNzX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyICpidWY7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKWRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgdWRzbF9zZW5kZXIgKnNuZDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBudW1fd3JpdHRlbjsKKworIG1hZGVfcHJvZ3Jlc3M6CisJc3Bpbl9sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycykpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+ZmlsbGVkX3NlbmRfYnVmZmVycykpIHsKKwkJCWJ1ZiA9IGxpc3RfZW50cnkoaW5zdGFuY2UtPmZpbGxlZF9zZW5kX2J1ZmZlcnMubmV4dCwKKwkJCQkJIHN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyLCBsaXN0KTsKKwkJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQl9IGVsc2UgaWYgKChidWYgPSBpbnN0YW5jZS0+Y3VycmVudF9idWZmZXIpKSB7CisJCQlpbnN0YW5jZS0+Y3VycmVudF9idWZmZXIgPSBOVUxMOworCQl9IGVsc2UJCS8qIGFsbCBidWZmZXJzIGVtcHR5ICovCisJCQlicmVhazsKKworCQlzbmQgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9zZW5kZXJzLm5leHQsCisJCQkJIHN0cnVjdCB1ZHNsX3NlbmRlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZzbmQtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCisJCXNuZC0+YnVmZmVyID0gYnVmOworCQl1c2JfZmlsbF9idWxrX3VyYihzbmQtPnVyYiwgaW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoaW5zdGFuY2UtPnVzYl9kZXYsIGluc3RhbmNlLT5kYXRhX2VuZHBvaW50KSwKKwkJCQkgIGJ1Zi0+YmFzZSwKKwkJCQkgIChzbmRfYnVmX3NpemUgLSBidWYtPmZyZWVfY2VsbHMpICogKEFUTV9DRUxMX1NJWkUgKyBpbnN0YW5jZS0+c25kX3BhZGRpbmcpLAorCQkJCSAgdWRzbF9jb21wbGV0ZV9zZW5kLCBzbmQpOworCisJCXZkYmcoInVkc2xfcHJvY2Vzc19zZW5kOiBzdWJtaXR0aW5nIHVyYiAweCVwICglZCBjZWxscyksIHNuZCAweCVwLCBidWYgMHglcCIsCisJCSAgICAgc25kLT51cmIsIHNuZF9idWZfc2l6ZSAtIGJ1Zi0+ZnJlZV9jZWxscywgc25kLCBidWYpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIoc25kLT51cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCWRiZygidWRzbF9wcm9jZXNzX3NlbmQ6IHVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpISIsIGVycik7CisJCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+c2VuZF9sb2NrKTsKKwkJCWxpc3RfYWRkKCZzbmQtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycyk7CisJCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCQkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKwkJCXJldHVybjsJLyogYmFpbCBvdXQgKi8KKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCX0JCQkvKiB3aGlsZSAqLworCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisKKwlpZiAoIWluc3RhbmNlLT5jdXJyZW50X3NrYikKKwkJaW5zdGFuY2UtPmN1cnJlbnRfc2tiID0gc2tiX2RlcXVldWUoJmluc3RhbmNlLT5zbmRxdWV1ZSk7CisJaWYgKCFpbnN0YW5jZS0+Y3VycmVudF9za2IpCisJCXJldHVybjsJCS8qIGRvbmUgLSBubyBtb3JlIHNrYnMgKi8KKworCXNrYiA9IGluc3RhbmNlLT5jdXJyZW50X3NrYjsKKworCWlmICghKGJ1ZiA9IGluc3RhbmNlLT5jdXJyZW50X2J1ZmZlcikpIHsKKwkJc3Bpbl9sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZpbnN0YW5jZS0+c3BhcmVfc2VuZF9idWZmZXJzKSkgeworCQkJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJCQlyZXR1cm47CS8qIGRvbmUgLSBubyBtb3JlIGJ1ZmZlcnMgKi8KKwkJfQorCQlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMubmV4dCwKKwkJCSAgICAgICBzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCisJCWJ1Zi0+ZnJlZV9zdGFydCA9IGJ1Zi0+YmFzZTsKKwkJYnVmLT5mcmVlX2NlbGxzID0gc25kX2J1Zl9zaXplOworCisJCWluc3RhbmNlLT5jdXJyZW50X2J1ZmZlciA9IGJ1ZjsKKwl9CisKKwludW1fd3JpdHRlbiA9IHVkc2xfd3JpdGVfY2VsbHMoaW5zdGFuY2UsIGJ1Zi0+ZnJlZV9jZWxscywgc2tiLCAmYnVmLT5mcmVlX3N0YXJ0KTsKKworCXZkYmcoInVkc2xfcHJvY2Vzc19zZW5kOiB3cm90ZSAldSBjZWxscyBmcm9tIHNrYiAweCVwIHRvIGJ1ZmZlciAweCVwIiwKKwkgICAgIG51bV93cml0dGVuLCBza2IsIGJ1Zik7CisKKwlpZiAoIShidWYtPmZyZWVfY2VsbHMgLT0gbnVtX3dyaXR0ZW4pKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKwkJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKwl9CisKKwl2ZGJnKCJ1ZHNsX3Byb2Nlc3Nfc2VuZDogYnVmZmVyIGNvbnRhaW5zICVkIGNlbGxzLCAlZCBsZWZ0IiwKKwkgICAgIHNuZF9idWZfc2l6ZSAtIGJ1Zi0+ZnJlZV9jZWxscywgYnVmLT5mcmVlX2NlbGxzKTsKKworCWlmICghVURTTF9TS0Ioc2tiKS0+bnVtX2NlbGxzKSB7CisJCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBVRFNMX1NLQihza2IpLT5hdG1fZGF0YS52Y2M7CisKKwkJdWRzbF9wb3AodmNjLCBza2IpOworCQlpbnN0YW5jZS0+Y3VycmVudF9za2IgPSBOVUxMOworCisJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKKwl9CisKKwlnb3RvIG1hZGVfcHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfY2FuY2VsX3NlbmQoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm47CisKKwlkYmcoInVkc2xfY2FuY2VsX3NlbmQgZW50ZXJlZCIpOworCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5zbmRxdWV1ZS5sb2NrKTsKKwlmb3IgKHNrYiA9IGluc3RhbmNlLT5zbmRxdWV1ZS5uZXh0LCBuID0gc2tiLT5uZXh0OworCSAgICAgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZpbnN0YW5jZS0+c25kcXVldWU7CisJICAgICBza2IgPSBuLCBuID0gc2tiLT5uZXh0KQorCQlpZiAoVURTTF9TS0Ioc2tiKS0+YXRtX2RhdGEudmNjID09IHZjYykgeworCQkJZGJnKCJ1ZHNsX2NhbmNlbF9zZW5kOiBwb3BwaW5nIHNrYiAweCVwIiwgc2tiKTsKKwkJCV9fc2tiX3VubGluayhza2IsICZpbnN0YW5jZS0+c25kcXVldWUpOworCQkJdWRzbF9wb3AodmNjLCBza2IpOworCQl9CisJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+c25kcXVldWUubG9jayk7CisKKwl0YXNrbGV0X2Rpc2FibGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCWlmICgoc2tiID0gaW5zdGFuY2UtPmN1cnJlbnRfc2tiKSAmJiAoVURTTF9TS0Ioc2tiKS0+YXRtX2RhdGEudmNjID09IHZjYykpIHsKKwkJZGJnKCJ1ZHNsX2NhbmNlbF9zZW5kOiBwb3BwaW5nIGN1cnJlbnQgc2tiICgweCVwKSIsIHNrYik7CisJCWluc3RhbmNlLT5jdXJyZW50X3NrYiA9IE5VTEw7CisJCXVkc2xfcG9wKHZjYywgc2tiKTsKKwl9CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCWRiZygidWRzbF9jYW5jZWxfc2VuZCBkb25lIik7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdmNjLT5kZXYtPmRldl9kYXRhOworCWludCBlcnI7CisKKwl2ZGJnKCJ1ZHNsX2F0bV9zZW5kIGNhbGxlZCAoc2tiIDB4JXAsIGxlbiAldSkiLCBza2IsIHNrYi0+bGVuKTsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9zZW5kOiBOVUxMIGRhdGEhIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRiZygidWRzbF9hdG1fc2VuZDogdW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWQhIiwgdmNjLT5xb3MuYWFsKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChza2ItPmxlbiA+IEFUTV9NQVhfQUFMNV9QRFUpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9zZW5kOiBwYWNrZXQgdG9vIGxvbmcgKCVkIHZzICVkKSEiLCBza2ItPmxlbiwKKwkJICAgIEFUTV9NQVhfQUFMNV9QRFUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCisJUEFDS0VUREVCVUcoc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwl1ZHNsX2dyb29tX3NrYih2Y2MsIHNrYik7CisJc2tiX3F1ZXVlX3RhaWwoJmluc3RhbmNlLT5zbmRxdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwl1ZHNsX3BvcCh2Y2MsIHNrYik7CisJcmV0dXJuIGVycjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqCisqKiAgYmVhbiBjb3VudGluZyAgKioKKyoqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1ZHNsX2Rlc3Ryb3lfaW5zdGFuY2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPQorCSAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSwgcmVmY291bnQpOworCisJdGFza2xldF9raWxsKCZpbnN0YW5jZS0+cmVjZWl2ZV90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCXVzYl9wdXRfZGV2KGluc3RhbmNlLT51c2JfZGV2KTsKKwlrZnJlZShpbnN0YW5jZSk7Cit9CisKK3ZvaWQgdWRzbF9nZXRfaW5zdGFuY2Uoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJa3JlZl9nZXQoJmluc3RhbmNlLT5yZWZjb3VudCk7Cit9CisKK3ZvaWQgdWRzbF9wdXRfaW5zdGFuY2Uoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJa3JlZl9wdXQoJmluc3RhbmNlLT5yZWZjb3VudCwgdWRzbF9kZXN0cm95X2luc3RhbmNlKTsKK30KKworLyoqKioqKioqKioKKyoqICBBVE0gICoqCisqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1ZHNsX2F0bV9kZXZfY2xvc2Uoc3RydWN0IGF0bV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IGRldi0+ZGV2X2RhdGE7CisKKwlkZXYtPmRldl9kYXRhID0gTlVMTDsKKwl1ZHNsX3B1dF9pbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSBhdG1fZGV2LT5kZXZfZGF0YTsKKwlpbnQgbGVmdCA9ICpwb3M7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9hdG1fcHJvY19yZWFkOiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWxlZnQtLSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBpbnN0YW5jZS0+ZGVzY3JpcHRpb24pOworCisJaWYgKCFsZWZ0LS0pCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJNQUM6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVswXSwgYXRtX2Rldi0+ZXNpWzFdLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVsyXSwgYXRtX2Rldi0+ZXNpWzNdLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVs0XSwgYXRtX2Rldi0+ZXNpWzVdKTsKKworCWlmICghbGVmdC0tKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLAorCQkJICAgICAgICJBQUw1OiB0eCAlZCAoICVkIGVyciApLCByeCAlZCAoICVkIGVyciwgJWQgZHJvcCApXG4iLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnR4KSwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmYXRtX2Rldi0+c3RhdHMuYWFsNS50eF9lcnIpLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnJ4KSwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmYXRtX2Rldi0+c3RhdHMuYWFsNS5yeF9lcnIpLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnJ4X2Ryb3ApKTsKKworCWlmICghbGVmdC0tKSB7CisJCXN3aXRjaCAoYXRtX2Rldi0+c2lnbmFsKSB7CisJCWNhc2UgQVRNX1BIWV9TSUdfRk9VTkQ6CisJCQlzcHJpbnRmKHBhZ2UsICJMaW5lIHVwIik7CisJCQlicmVhazsKKwkJY2FzZSBBVE1fUEhZX1NJR19MT1NUOgorCQkJc3ByaW50ZihwYWdlLCAiTGluZSBkb3duIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocGFnZSwgIkxpbmUgc3RhdGUgdW5rbm93biIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW5zdGFuY2UtPnVzYl9kZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJCXN0cmNhdChwYWdlLCAiLCBkaXNjb25uZWN0ZWRcbiIpOworCQllbHNlIHsKKwkJCWlmIChpbnN0YW5jZS0+c3RhdHVzID09IFVEU0xfTE9BREVEX0ZJUk1XQVJFKQorCQkJCXN0cmNhdChwYWdlLCAiLCBmaXJtd2FyZSBsb2FkZWRcbiIpOworCQkJZWxzZSBpZiAoaW5zdGFuY2UtPnN0YXR1cyA9PSBVRFNMX0xPQURJTkdfRklSTVdBUkUpCisJCQkJc3RyY2F0KHBhZ2UsICIsIGZpcm13YXJlIGxvYWRpbmdcbiIpOworCQkJZWxzZQorCQkJCXN0cmNhdChwYWdlLCAiLCBubyBmaXJtd2FyZVxuIik7CisJCX0KKworCQlyZXR1cm4gc3RybGVuKHBhZ2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkc2xfYXRtX29wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKK3sKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IHZjYy0+ZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgdWRzbF92Y2NfZGF0YSAqbmV3OworCXVuc2lnbmVkIGludCBtYXhfcGR1OworCWludCB2Y2kgPSB2Y2MtPnZjaTsKKwlzaG9ydCB2cGkgPSB2Y2MtPnZwaTsKKwlpbnQgZXJyOworCisJZGJnKCJ1ZHNsX2F0bV9vcGVuOiB2cGkgJWhkLCB2Y2kgJWQiLCB2cGksIHZjaSk7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9hdG1fb3BlbjogTlVMTCBkYXRhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBvbmx5IHN1cHBvcnQgQUFMNSAqLworCWlmICgodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB8fCAodmNjLT5xb3Mucnh0cC5tYXhfc2R1IDwgMCkKKwkgICAgfHwgKHZjYy0+cW9zLnJ4dHAubWF4X3NkdSA+IEFUTV9NQVhfQUFMNV9QRFUpKSB7CisJCWRiZygidWRzbF9hdG1fb3BlbjogdW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWQhIiwgdmNjLT5xb3MuYWFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluc3RhbmNlLT5maXJtd2FyZV93YWl0ICYmCisJICAgIChlcnIgPSBpbnN0YW5jZS0+ZmlybXdhcmVfd2FpdChpbnN0YW5jZSkpIDwgMCkgeworCQlkYmcoInVkc2xfYXRtX29wZW46IGZpcm13YXJlIG5vdCBsb2FkZWQgKCVkKSEiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRvd24oJmluc3RhbmNlLT5zZXJpYWxpemUpOwkvKiB2cyBzZWxmLCB1ZHNsX2F0bV9jbG9zZSAqLworCisJaWYgKHVkc2xfZmluZF92Y2MoaW5zdGFuY2UsIHZwaSwgdmNpKSkgeworCQlkYmcoInVkc2xfYXRtX29wZW46ICVoZC8lZCBhbHJlYWR5IGluIHVzZSEiLCB2cGksIHZjaSk7CisJCXVwKCZpbnN0YW5jZS0+c2VyaWFsaXplKTsKKwkJcmV0dXJuIC1FQUREUklOVVNFOworCX0KKworCWlmICghKG5ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZHNsX3ZjY19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWRiZygidWRzbF9hdG1fb3Blbjogbm8gbWVtb3J5IGZvciB2Y2NfZGF0YSEiKTsKKwkJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQobmV3LCAwLCBzaXplb2Yoc3RydWN0IHVkc2xfdmNjX2RhdGEpKTsKKwluZXctPnZjYyA9IHZjYzsKKwluZXctPnZwaSA9IHZwaTsKKwluZXctPnZjaSA9IHZjaTsKKworCS8qIHVkc2xfZXh0cmFjdF9jZWxscyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY2VsbCAqLworCW1heF9wZHUgPSBtYXgoMSwgVURTTF9OVU1fQ0VMTFModmNjLT5xb3Mucnh0cC5tYXhfc2R1KSkgKiBBVE1fQ0VMTF9QQVlMT0FEOworCWlmICghKG5ldy0+c2FyYiA9IGFsbG9jX3NrYihtYXhfcGR1LCBHRlBfS0VSTkVMKSkpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9vcGVuOiBubyBtZW1vcnkgZm9yIFNBUiBidWZmZXIhIik7CisJCWtmcmVlKG5ldyk7CisJCXVwKCZpbnN0YW5jZS0+c2VyaWFsaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdmNjLT5kZXZfZGF0YSA9IG5ldzsKKworCXRhc2tsZXRfZGlzYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJmluc3RhbmNlLT52Y2NfbGlzdCk7CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCisJc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCisJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlkYmcoInVkc2xfYXRtX29wZW46IGFsbG9jYXRlZCB2Y2MgZGF0YSAweCVwIChtYXhfcGR1OiAldSkiLCBuZXcsIG1heF9wZHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfYXRtX2Nsb3NlKHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSB2Y2MtPmRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHVkc2xfdmNjX2RhdGEgKnZjY19kYXRhID0gdmNjLT5kZXZfZGF0YTsKKworCWRiZygidWRzbF9hdG1fY2xvc2UgY2FsbGVkIik7CisKKwlpZiAoIWluc3RhbmNlIHx8ICF2Y2NfZGF0YSkgeworCQlkYmcoInVkc2xfYXRtX2Nsb3NlOiBOVUxMIGRhdGEhIik7CisJCXJldHVybjsKKwl9CisKKwlkYmcoInVkc2xfYXRtX2Nsb3NlOiBkZWFsbG9jYXRpbmcgdmNjIDB4JXAgd2l0aCB2cGkgJWQgdmNpICVkIiwKKwkgICAgdmNjX2RhdGEsIHZjY19kYXRhLT52cGksIHZjY19kYXRhLT52Y2kpOworCisJdWRzbF9jYW5jZWxfc2VuZChpbnN0YW5jZSwgdmNjKTsKKworCWRvd24oJmluc3RhbmNlLT5zZXJpYWxpemUpOwkvKiB2cyBzZWxmLCB1ZHNsX2F0bV9vcGVuICovCisKKwl0YXNrbGV0X2Rpc2FibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCWxpc3RfZGVsKCZ2Y2NfZGF0YS0+bGlzdCk7CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCisJa2ZyZWVfc2tiKHZjY19kYXRhLT5zYXJiKTsKKwl2Y2NfZGF0YS0+c2FyYiA9IE5VTEw7CisKKwlrZnJlZSh2Y2NfZGF0YSk7CisJdmNjLT5kZXZfZGF0YSA9IE5VTEw7CisKKwl2Y2MtPnZwaSA9IEFUTV9WUElfVU5TUEVDOworCXZjYy0+dmNpID0gQVRNX1ZDSV9VTlNQRUM7CisJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCisJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJZGJnKCJ1ZHNsX2F0bV9jbG9zZSBzdWNjZXNzZnVsIik7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1faW9jdGwoc3RydWN0IGF0bV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEFUTV9RVUVSWUxPT1A6CisJCXJldHVybiBwdXRfdXNlcihBVE1fTE1fTk9ORSwgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKKy8qKioqKioqKioqCisqKiAgVVNCICAqKgorKioqKioqKioqKi8KKworaW50IHVkc2xfaW5zdGFuY2Vfc2V0dXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgaSwgbGVuZ3RoOworCisJa3JlZl9pbml0KCZpbnN0YW5jZS0+cmVmY291bnQpOwkvKiBvbmUgZm9yIFVTQiAqLworCXVkc2xfZ2V0X2luc3RhbmNlKGluc3RhbmNlKTsJLyogb25lIGZvciBBVE0gKi8KKworCWluaXRfTVVURVgoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJaW5zdGFuY2UtPnVzYl9kZXYgPSBkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnZjY19saXN0KTsKKworCWluc3RhbmNlLT5zdGF0dXMgPSBVRFNMX05PX0ZJUk1XQVJFOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluc3RhbmNlLT5maXJtd2FyZV93YWl0ZXJzKTsKKworCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVycyk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKworCXRhc2tsZXRfaW5pdCgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCwgdWRzbF9wcm9jZXNzX3JlY2VpdmUsICh1bnNpZ25lZCBsb25nKWluc3RhbmNlKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpbnN0YW5jZS0+c25kcXVldWUpOworCisJc3Bpbl9sb2NrX2luaXQoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycyk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCisJdGFza2xldF9pbml0KCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0LCB1ZHNsX3Byb2Nlc3Nfc2VuZCwKKwkJICAgICAodW5zaWduZWQgbG9uZylpbnN0YW5jZSk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKworCS8qIHJlY2VpdmUgaW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcmN2X3VyYnM7IGkrKykgeworCQlzdHJ1Y3QgdWRzbF9yZWNlaXZlciAqcmN2ID0gJihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldKTsKKworCQlpZiAoIShyY3YtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKSB7CisJCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIHJlY2VpdmUgdXJiICVkISIsIGkpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJcmN2LT5pbnN0YW5jZSA9IGluc3RhbmNlOworCisJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfcmVjZWl2ZXJzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspIHsKKwkJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZiA9CisJCSAgICAmKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0pOworCisJCWJ1Zi0+YmFzZSA9IGttYWxsb2MocmN2X2J1Zl9zaXplICogKEFUTV9DRUxMX1NJWkUgKyBpbnN0YW5jZS0+cmN2X3BhZGRpbmcpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYtPmJhc2UpIHsKKwkJCWRiZygidWRzbF91c2JfcHJvYmU6IG5vIG1lbW9yeSBmb3IgcmVjZWl2ZSBidWZmZXIgJWQhIiwgaSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJfQorCisJLyogc2VuZCBpbml0ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9zbmRfdXJiczsgaSsrKSB7CisJCXN0cnVjdCB1ZHNsX3NlbmRlciAqc25kID0gJihpbnN0YW5jZS0+c2VuZGVyc1tpXSk7CisKKwkJaWYgKCEoc25kLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQkJZGJnKCJ1ZHNsX3VzYl9wcm9iZTogbm8gbWVtb3J5IGZvciBzZW5kIHVyYiAlZCEiLCBpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCXNuZC0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQlsaXN0X2FkZCgmc25kLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3NlbmRlcnMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX2J1ZnM7IGkrKykgeworCQlzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciAqYnVmID0gJihpbnN0YW5jZS0+c2VuZF9idWZmZXJzW2ldKTsKKworCQlidWYtPmJhc2UgPSBrbWFsbG9jKHNuZF9idWZfc2l6ZSAqIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmLT5iYXNlKSB7CisJCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIHNlbmQgYnVmZmVyICVkISIsIGkpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCX0KKworCS8qIEFUTSBpbml0ICovCisJaW5zdGFuY2UtPmF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLT5kcml2ZXJfbmFtZSwKKwkJCQkJICAgICAmdWRzbF9hdG1fZGV2b3BzLCAtMSwgTlVMTCk7CisJaWYgKCFpbnN0YW5jZS0+YXRtX2RldikgeworCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBmYWlsZWQgdG8gcmVnaXN0ZXIgQVRNIGRldmljZSEiKTsKKwkJZ290byBmYWlsOworCX0KKworCWluc3RhbmNlLT5hdG1fZGV2LT5jaV9yYW5nZS52cGlfYml0cyA9IEFUTV9DSV9NQVg7CisJaW5zdGFuY2UtPmF0bV9kZXYtPmNpX3JhbmdlLnZjaV9iaXRzID0gQVRNX0NJX01BWDsKKwlpbnN0YW5jZS0+YXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCS8qIHRlbXAgaW5pdCBBVE0gZGV2aWNlLCBzZXQgdG8gMTI4a2JpdCAqLworCWluc3RhbmNlLT5hdG1fZGV2LT5saW5rX3JhdGUgPSAxMjggKiAxMDAwIC8gNDI0OworCisJLyogZGV2aWNlIGRlc2NyaXB0aW9uICovCisJYnVmID0gaW5zdGFuY2UtPmRlc2NyaXB0aW9uOworCWxlbmd0aCA9IHNpemVvZihpbnN0YW5jZS0+ZGVzY3JpcHRpb24pOworCisJaWYgKChpID0gdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgYnVmLCBsZW5ndGgpKSA8IDApCisJCWdvdG8gZmluaXNoOworCisJYnVmICs9IGk7CisJbGVuZ3RoIC09IGk7CisKKwlpID0gc2NucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiICgiKTsKKwlidWYgKz0gaTsKKwlsZW5ndGggLT0gaTsKKworCWlmIChsZW5ndGggPD0gMCB8fCAoaSA9IHVzYl9tYWtlX3BhdGgoZGV2LCBidWYsIGxlbmd0aCkpIDwgMCkKKwkJZ290byBmaW5pc2g7CisKKwlidWYgKz0gaTsKKwlsZW5ndGggLT0gaTsKKworCXNucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiKSIpOworCisgZmluaXNoOgorCS8qIHJlYWR5IGZvciBBVE0gY2FsbGJhY2tzICovCisJd21iKCk7CisJaW5zdGFuY2UtPmF0bV9kZXYtPmRldl9kYXRhID0gaW5zdGFuY2U7CisKKwl1c2JfZ2V0X2RldihkZXYpOworCisJcmV0dXJuIDA7CisKKyBmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX2J1ZnM7IGkrKykKKwkJa2ZyZWUoaW5zdGFuY2UtPnNlbmRfYnVmZmVyc1tpXS5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCB1ZHNsX2luc3RhbmNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlkYmcoInVkc2xfaW5zdGFuY2VfZGlzY29ubmVjdCBlbnRlcmVkIik7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9pbnN0YW5jZV9kaXNjb25uZWN0OiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm47CisJfQorCisJLyogcmVjZWl2ZSBmaW5hbGl6ZSAqLworCXRhc2tsZXRfZGlzYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9raWxsX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwkvKiBubyBuZWVkIHRvIHRha2UgdGhlIHNwaW5sb2NrICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisKKwl0YXNrbGV0X2VuYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwkvKiBzZW5kIGZpbmFsaXplICovCisJdGFza2xldF9kaXNhYmxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2tpbGxfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwkvKiBubyBuZWVkIHRvIHRha2UgdGhlIHNwaW5sb2NrICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5zcGFyZV9zZW5kZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3NlbmRfYnVmZmVycyk7CisJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKworCXRhc2tsZXRfZW5hYmxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NuZF9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5zZW5kX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwkvKiBBVE0gZmluYWxpemUgKi8KKwlzaHV0ZG93bl9hdG1fZGV2KGluc3RhbmNlLT5hdG1fZGV2KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9nZXRfaW5zdGFuY2UpOworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9wdXRfaW5zdGFuY2UpOworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9pbnN0YW5jZV9zZXR1cCk7CitFWFBPUlRfU1lNQk9MX0dQTCh1ZHNsX2luc3RhbmNlX2Rpc2Nvbm5lY3QpOworCisvKioqKioqKioqKioKKyoqICBpbml0ICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVkc2xfdXNiX2luaXQodm9pZCkKK3sKKwlkYmcoInVkc2xfdXNiX2luaXQ6IGRyaXZlciB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04pOworCisJaWYgKHNpemVvZihzdHJ1Y3QgdWRzbF9jb250cm9sKSA+IHNpemVvZigoKHN0cnVjdCBza19idWZmICopIDApLT5jYikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IHVudXNhYmxlIHdpdGggdGhpcyBrZXJuZWwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKChudW1fcmN2X3VyYnMgPiBVRFNMX01BWF9SQ1ZfVVJCUykKKwkgICAgfHwgKG51bV9zbmRfdXJicyA+IFVEU0xfTUFYX1NORF9VUkJTKQorCSAgICB8fCAobnVtX3Jjdl9idWZzID4gVURTTF9NQVhfUkNWX0JVRlMpCisJICAgIHx8IChudW1fc25kX2J1ZnMgPiBVRFNMX01BWF9TTkRfQlVGUykKKwkgICAgfHwgKHJjdl9idWZfc2l6ZSA+IFVEU0xfTUFYX1JDVl9CVUZfU0laRSkKKwkgICAgfHwgKHNuZF9idWZfc2l6ZSA+IFVEU0xfTUFYX1NORF9CVUZfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZHNsX3VzYl9leGl0KHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KHVkc2xfdXNiX2luaXQpOworbW9kdWxlX2V4aXQodWRzbF91c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOworCisvKioqKioqKioqKioqCisqKiAgZGVidWcgICoqCisqKioqKioqKioqKiovCisKKyNpZmRlZiBWRVJCT1NFX0RFQlVHCitzdGF0aWMgaW50IHVkc2xfcHJpbnRfcGFja2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMjU2XTsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjspIHsKKwkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJc3ByaW50ZihidWZmZXIsICIlLjNkIDoiLCBpKTsKKwkJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGkgPCBsZW4pOyBqKyssIGkrKykgeworCQkJc3ByaW50ZihidWZmZXIsICIlcyAlMi4yeCIsIGJ1ZmZlciwgZGF0YVtpXSk7CisJCX0KKwkJZGJnKCIlcyIsIGJ1ZmZlcik7CisJfQorCXJldHVybiBpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYl9hdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhjNTMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYl9hdG0uaApAQCAtMCwwICsxLDE3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHVzYl9hdG0uaCAtIEdlbmVyaWMgVVNCIHhEU0wgZHJpdmVyIGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCBBbGNhdGVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCBEdW5jYW4gU2FuZHMsIFNvbE5lZ3JvLCBKb3NlcCBDb21hcworICogIENvcHlyaWdodCAoQykgMjAwNCwgRGF2aWQgV29vZGhvdXNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKy8qCisjZGVmaW5lIERFQlVHCisjZGVmaW5lIFZFUkJPU0VfREVCVUcKKyovCisKKyNpZiAhZGVmaW5lZCAoREVCVUcpICYmIGRlZmluZWQgKENPTkZJR19VU0JfREVCVUcpCisjCWRlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIFVEU0xfQVNTRVJUKHgpCUJVR19PTighKHgpKQorI2Vsc2UKKyNkZWZpbmUgVURTTF9BU1NFUlQoeCkJZG8geyBpZiAoISh4KSkgd2FybigiZmFpbGVkIGFzc2VydGlvbiAnIiAjeCAiJyBhdCBsaW5lICVkIiwgX19MSU5FX18pOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBVRFNMX01BWF9SQ1ZfVVJCUwkJNAorI2RlZmluZSBVRFNMX01BWF9TTkRfVVJCUwkJNAorI2RlZmluZSBVRFNMX01BWF9SQ1ZfQlVGUwkJOAorI2RlZmluZSBVRFNMX01BWF9TTkRfQlVGUwkJOAorI2RlZmluZSBVRFNMX01BWF9SQ1ZfQlVGX1NJWkUJCTEwMjQJLyogQVRNIGNlbGxzICovCisjZGVmaW5lIFVEU0xfTUFYX1NORF9CVUZfU0laRQkJMTAyNAkvKiBBVE0gY2VsbHMgKi8KKyNkZWZpbmUgVURTTF9ERUZBVUxUX1JDVl9VUkJTCQkyCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfVVJCUwkJMgorI2RlZmluZSBVRFNMX0RFRkFVTFRfUkNWX0JVRlMJCTQKKyNkZWZpbmUgVURTTF9ERUZBVUxUX1NORF9CVUZTCQk0CisjZGVmaW5lIFVEU0xfREVGQVVMVF9SQ1ZfQlVGX1NJWkUJNjQJLyogQVRNIGNlbGxzICovCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfQlVGX1NJWkUJNjQJLyogQVRNIGNlbGxzICovCisKKyNkZWZpbmUgQVRNX0NFTExfSEVBREVSCQkJKEFUTV9DRUxMX1NJWkUgLSBBVE1fQ0VMTF9QQVlMT0FEKQorI2RlZmluZSBVRFNMX05VTV9DRUxMUyh4KQkJKCgoeCkgKyBBVE1fQUFMNV9UUkFJTEVSICsgQVRNX0NFTExfUEFZTE9BRCAtIDEpIC8gQVRNX0NFTExfUEFZTE9BRCkKKworLyogcmVjZWl2ZSAqLworCitzdHJ1Y3QgdWRzbF9yZWNlaXZlX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJdW5zaWduZWQgaW50IGZpbGxlZF9jZWxsczsKK307CisKK3N0cnVjdCB1ZHNsX3JlY2VpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgdWRzbF92Y2NfZGF0YSB7CisJLyogdnBpL3ZjaSBsb29rdXAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc2hvcnQgdnBpOworCWludCB2Y2k7CisJc3RydWN0IGF0bV92Y2MgKnZjYzsKKworCS8qIHJhdyBjZWxsIHJlYXNzZW1ibHkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2FyYjsKK307CisKKy8qIHNlbmQgKi8KKworc3RydWN0IHVkc2xfc2VuZF9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBjaGFyICpiYXNlOworCXVuc2lnbmVkIGNoYXIgKmZyZWVfc3RhcnQ7CisJdW5zaWduZWQgaW50IGZyZWVfY2VsbHM7Cit9OworCitzdHJ1Y3QgdWRzbF9zZW5kZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZTsKK307CisKK3N0cnVjdCB1ZHNsX2NvbnRyb2wgeworCXN0cnVjdCBhdG1fc2tiX2RhdGEgYXRtX2RhdGE7CisJdW5zaWduZWQgaW50IG51bV9jZWxsczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VudGlyZTsKKwl1bnNpZ25lZCBpbnQgcGR1X3BhZGRpbmc7CisJdW5zaWduZWQgY2hhciBhYWw1X3RyYWlsZXJbQVRNX0FBTDVfVFJBSUxFUl07Cit9OworCisjZGVmaW5lIFVEU0xfU0tCKHgpCQkoKHN0cnVjdCB1ZHNsX2NvbnRyb2wgKikoeCktPmNiKQorCisvKiBtYWluIGRyaXZlciBkYXRhICovCisKK2VudW0gdWRzbF9zdGF0dXMgeworCVVEU0xfTk9fRklSTVdBUkUsCisJVURTTF9MT0FESU5HX0ZJUk1XQVJFLAorCVVEU0xfTE9BREVEX0ZJUk1XQVJFCit9OworCitzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhIHsKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlcmlhbGl6ZTsKKworCS8qIFVTQiBkZXZpY2UgcGFydCAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCWNoYXIgZGVzY3JpcHRpb25bNjRdOworCWludCBkYXRhX2VuZHBvaW50OworCWludCBzbmRfcGFkZGluZzsKKwlpbnQgcmN2X3BhZGRpbmc7CisJY29uc3QgY2hhciAqZHJpdmVyX25hbWU7CisKKwkvKiBBVE0gZGV2aWNlIHBhcnQgKi8KKwlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZjY19saXN0OworCisJLyogZmlybXdhcmUgKi8KKwlpbnQgKCpmaXJtd2FyZV93YWl0KSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKTsKKwllbnVtIHVkc2xfc3RhdHVzIHN0YXR1czsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmaXJtd2FyZV93YWl0ZXJzOworCisJLyogcmVjZWl2ZSAqLworCXN0cnVjdCB1ZHNsX3JlY2VpdmVyIHJlY2VpdmVyc1tVRFNMX01BWF9SQ1ZfVVJCU107CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgcmVjZWl2ZV9idWZmZXJzW1VEU0xfTUFYX1JDVl9CVUZTXTsKKworCXNwaW5sb2NrX3QgcmVjZWl2ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgc3BhcmVfcmVjZWl2ZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgZmlsbGVkX3JlY2VpdmVfYnVmZmVyczsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByZWNlaXZlX3Rhc2tsZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWNlaXZlX2J1ZmZlcnM7CisKKwkvKiBzZW5kICovCisJc3RydWN0IHVkc2xfc2VuZGVyIHNlbmRlcnNbVURTTF9NQVhfU05EX1VSQlNdOworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyIHNlbmRfYnVmZmVyc1tVRFNMX01BWF9TTkRfQlVGU107CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNuZHF1ZXVlOworCisJc3BpbmxvY2tfdCBzZW5kX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9zZW5kZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgc3BhcmVfc2VuZF9idWZmZXJzOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNlbmRfdGFza2xldDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9za2I7CQkJLyogYmVpbmcgZW1wdGllZCAqLworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyICpjdXJyZW50X2J1ZmZlcjsJLyogYmVpbmcgZmlsbGVkICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxsZWRfc2VuZF9idWZmZXJzOworfTsKKworZXh0ZXJuIGludCB1ZHNsX2luc3RhbmNlX3NldHVwKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpOworZXh0ZXJuIHZvaWQgdWRzbF9pbnN0YW5jZV9kaXNjb25uZWN0KHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKK2V4dGVybiB2b2lkIHVkc2xfZ2V0X2luc3RhbmNlKHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKK2V4dGVybiB2b2lkIHVkc2xfcHV0X2luc3RhbmNlKHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjFkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCkBAIC0wLDAgKzEsODYgQEAKKyMKKyMgVVNCIENsYXNzIGRyaXZlciBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9BVURJTworCXRyaXN0YXRlICJVU0IgQXVkaW8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBTT1VORAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBVU0IgYXVkaW8gZXF1aXBtZW50IHN1Y2ggYXMKKwkgIHNwZWFrZXJzIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSB1c2UKKwkgIHRoZSBPU1Mgc291bmQgZHJpdmVyOyBBTFNBIGhhcyBpdHMgb3duIG9wdGlvbiBmb3IgdXNiIGF1ZGlvIHN1cHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF1ZGlvLgorCitjb21tZW50ICJVU0IgQmx1ZXRvb3RoIFRUWSBjYW4gb25seSBiZSB1c2VkIHdpdGggZGlzYWJsZWQgQmx1ZXRvb3RoIHN1YnN5c3RlbSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBCVAorCitjb25maWcgVVNCX0JMVUVUT09USF9UVFkKKwl0cmlzdGF0ZSAiVVNCIEJsdWV0b290aCBUVFkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBCVD1uCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBhIG5vbnN0YW5kYXJkIHR0eSBpbnRlcmZhY2UgdG8gYSBCbHVldG9vdGgKKwkgIGRldmljZSB0aGF0IGNhbiBiZSB1c2VkIG9ubHkgYnkgc3BlY2lhbGl6ZWQgQmx1ZXRvb3RoIEhDSSBzb2Z0d2FyZS4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgT3BlbkJUIEJsdWV0b290aCBzdGFjayAoYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL2RldmVsb3Blci5heGlzLmNvbS9zb2Z0d2FyZT4pLCBvciBvdGhlciBUVFkgYmFzZWQKKwkgIEJsdWV0b290aCBzdGFja3MsIGFuZCB3YW50IHRvIGNvbm5lY3QgYSBVU0IgQmx1ZXRvb3RoIGRldmljZQorCSAgdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LgorCisJICBEbyAqbm90KiBlbmFibGUgdGhpcyBkcml2ZXIgaWYgeW91IHdhbnQgdG8gdXNlIGdlbmVyaWMgTGludXgKKwkgIEJsdWV0b290aCBzdXBwb3J0LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmx1ZXR0eS4KKworY29uZmlnIFVTQl9NSURJCisJdHJpc3RhdGUgIlVTQiBNSURJIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgU09VTkQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgTUlESSBkZXZpY2UgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBkcml2ZXIgaXMgZm9yIGRldmljZXMgdGhhdCBjb21wbHkgd2l0aAorCSAgJ1VuaXZlcnNhbCBTZXJpYWwgQnVzIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBNSURJIERldmljZScuCisKKwkgIFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUga25vd24gdG8gd29yazoKKwkgICogU3RlaW5iZXJnIFVTQjJNSURJCisJICAqIFJvbGFuZCBNUFU2NAorCSAgKiBSb2xhbmQgUEMtMzAwCisJICAqIFJvbGFuZCBTQzg4NTAKKwkgICogUm9sYW5kIFVNLTEKKwkgICogUm9sYW5kIFVNLTIKKwkgICogUm9sYW5kIFVBLTEwMAorCSAgKiBZYW1haGEgTVUxMDAwCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYi1taWRpLgorCitjb25maWcgVVNCX0FDTQorCXRyaXN0YXRlICJVU0IgTW9kZW0gKENEQyBBQ00pIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBVU0IgbW9kZW1zIGFuZCBJU0ROIGFkYXB0ZXJzIHdoaWNoIHN1cHBvcnQgdGhlCisJICBDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGludGVyZmFjZS4KKwkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2FjbS50eHQ+IGZvciBkZXRhaWxzLgorCisJICBJZiB5b3VyIG1vZGVtIG9ubHkgcmVwb3J0cyAiQ2xzPWZmKHZlbmQuKSIgaW4gdGhlIGRlc2NyaXB0b3JzIGluCisJICAvcHJvYy9idXMvdXNiL2RldmljZXMsIHRoZW4geW91ciBtb2RlbSB3aWxsIG5vdCB3b3JrIHdpdGggdGhpcworCSAgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjZGMtYWNtLgorCitjb25maWcgVVNCX1BSSU5URVIKKwl0cmlzdGF0ZSAiVVNCIFByaW50ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBwcmludGVyIHRvIHlvdXIgY29tcHV0ZXIncworCSAgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmxwLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MWU1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgQ2xhc3MgZHJpdmVycworIyAob25lIHN0ZXAgdXAgZnJvbSB0aGUgbWlzYyBjYXRlZ29yeSkKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KK29iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBhdWRpby5vCitvYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGJsdWV0dHkubworb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gdXNiLW1pZGkubworb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSB1c2JscC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5jIGIvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDMyYjdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uYwpAQCAtMCwwICsxLDM4ODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWF1ZGlvLmMgIC0tICBVU0IgQXVkaW8gQ2xhc3MgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0CisgKgkgICAgQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aykKKyAqCSAgICBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBEZWJ1Z2dpbmc6CisgKiAJVXNlIHRoZSAnbHN1c2InIHV0aWxpdHkgdG8gZHVtcCB0aGUgZGVzY3JpcHRvcnMuCisgKgorICogMTk5OS0wOS0wNzogIEFsYW4gQ294CisgKgkJUGFyc2luZyBBdWRpbyBkZXNjcmlwdG9yIHBhdGNoCisgKiAxOTk5LTA5LTA4OiAgVGhvbWFzIFNhaWxlcgorICoJCUFkZGVkIE9TUyBjb21wYXRpYmxlIGRhdGEgaW8gZnVuY3Rpb25zOyBib3RoIHBhcnRzIG9mIHRoZQorICoJCWRyaXZlciByZW1haW4gdG8gYmUgZ2x1ZWQgdG9nZXRoZXIKKyAqIDE5OTktMDktMTA6ICBUaG9tYXMgU2FpbGVyCisgKgkJQmVhdXRpZmllZCB0aGUgZHJpdmVyLiBBZGRlZCBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb25zLgorICoJCVN0aWxsIG5vdCBwcm9wZXJseSBnbHVlZCB3aXRoIHRoZSBwYXJzaW5nIGNvZGUuCisgKgkJVGhlIHBhcnNpbmcgY29kZSBzZWVtcyB0byBoYXZlIGl0cyBwcm9ibGVtcyBidHcsCisgKgkJU2luY2UgaXQgcGFyc2VzIGFsbCBhdmFpbGFibGUgY29uZmlncyBidXQgZG9lc24ndAorICoJCXN0b3JlIHdoaWNoIGlmYWNlL2FsdHNldHRpbmcgYmVsb25ncyB0byB3aGljaCBjb25maWcuCisgKiAxOTk5LTA5LTIwOiAgVGhvbWFzIFNhaWxlcgorICoJCVRocmV3IG91dCBBbGFuJ3MgcGFyc2luZyBjb2RlIGFuZCBpbXBsZW1lbnRlZCBteSBvd24gb25lLgorICoJCVlvdSBjYW5ub3QgcmVhc29ubmFibHkgbGluZWFybHkgcGFyc2UgYXVkaW8gZGVzY3JpcHRvcnMsCisgKgkJZXNwZWNpYWxseSB0aGUgQXVkaW9DbGFzcyBkZXNjcmlwdG9ycyBoYXZlIHRvIGJlIGNvbnNpZGVyZWQKKyAqCQlwb2ludGVyIGxpc3RzLiBNaXhlciBwYXJzaW5nIHVudGVzdGVkLCBkdWUgdG8gbGFjayBvZiBkZXZpY2UuCisgKgkJRmlyc3Qgc3RhYiBhdCBzeW5jaCBwaXBlIGltcGxlbWVudGF0aW9uLCB0aGUgRGFsbGFzIFVTQiBEQUMKKyAqCQl3YW50cyB0byB1c2UgYW4gQXN5bmNoIG91dCBwaXBlLiB1c2JfYXVkaW9fc3RhdGUgbm93IGJhc2ljYWxseQorICoJCW9ubHkgY29udGFpbnMgbGlzdHMgb2YgbWl4ZXIgYW5kIHdhdmUgZGV2aWNlcy4gV2UgY2FuIHRoZXJlZm9yZQorICoJCW5vdyBoYXZlIG11bHRpcGxlIG1peGVyL3dhdmUgZGV2aWNlcyBwZXIgVVNCIGRldmljZS4KKyAqIDE5OTktMTAtMjg6ICBUaG9tYXMgU2FpbGVyCisgKgkJQ29udmVydGVkIHRvIFVSQiBBUEkuIEZpeGVkIGEgdGFza3N0YXRlL3dha2V1cCBzZW1hbnRpY3MgbWlzdGFrZQorICoJCXRoYXQgbWFkZSB0aGUgZHJpdmVyIGNvbnN1bWUgYWxsIGF2YWlsYWJsZSBDUFUgY3ljbGVzLgorICoJCU5vdyBydW5zIHN0YWJsZSBvbiBVSENJLUFjaGVyL0ZsaWVnbC9TYWlsZXIuCisgKiAxOTk5LTEwLTMxOiAgVGhvbWFzIFNhaWxlcgorICoJCUF1ZGlvIGNhbiBub3cgYmUgdW5sb2FkZWQgaWYgaXQgaXMgbm90IGluIHVzZSBieSBhbnkgbWl4ZXIKKyAqCQlvciBkc3AgY2xpZW50IChmb3JtZXJseSB5b3UgaGFkIHRvIGRpc2Nvbm5lY3QgdGhlIGF1ZGlvIGRldmljZXMKKyAqCQlmcm9tIHRoZSBVU0IgcG9ydCkKKyAqCQlGaW5hbGx5LCBhYm91dCB0aHJlZSBtb250aHMgYWZ0ZXIgb3JkZXJpbmcsIG15ICJNYXh4dHJvIFNQSzIyMiIKKyAqCQlzcGVha2VycyBhcnJpdmVkLCBpc24ndCBkaXNkYXRhIGEgZ3JlYXQgbWFpbCBvcmRlciBjb21wYW55IDgtKQorICoJCVBhcnNlIGNsYXNzIHNwZWNpZmljIGVuZHBvaW50IGRlc2NyaXB0b3Igb2YgdGhlIGF1ZGlvc3RyZWFtaW5nCisgKgkJaW50ZXJmYWNlcyBhbmQgdGFrZSB0aGUgZW5kcG9pbnQgYXR0cmlidXRlcyBmcm9tIHRoZXJlLgorICoJCVVuYmVsaWV2YWJseSwgdGhlIFBoaWxpcHMgVVNCIERBQyBoYXMgYSBzYW1wbGluZyByYXRlIHJhbmdlCisgKgkJb2Ygb3ZlciBhIGRlY2FkZSwgeWV0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNhbXBsaW5nIHJhdGUgY29udHJvbCEKKyAqCQlObyB3b25kZXIgaXQgc291bmRzIHNvIGJhZCwgaGFzIHZlcnkgYXVkaWJsZSBzYW1wbGluZyByYXRlCisgKgkJY29udmVyc2lvbiBkaXN0b3J0aW9uLiBEb24ndCB0cnkgdG8gbGlzdGVuIHRvIGl0IHVzaW5nCisgKgkJZGVjZW50IGhlYWRwaG9uZXMhCisgKgkJIkxldCdzIG1ha2UgdGhpbmdzIGJldHRlciIgLT4gYnV0IHBsZWFzZSBQaGlsaXBzIHN0YXJ0IHdpdGggeW91cgorICoJCW93biBzdHVmZiEhISEKKyAqIDE5OTktMTEtMDI6ICBUaG9tYXMgU2FpbGVyCisgKgkJSXQgdGFrZXMgdGhlIFBoaWxpcHMgYm94ZXMgc2V2ZXJhbCBzZWNvbmRzIHRvIGFjcXVpcmUgc3luY2hyb25pc2F0aW9uCisgKgkJdGhhdCBtZWFucyB0aGV5IHdvbid0IHBsYXkgc2hvcnQgc291bmRzLiBTaG91bGQgcHJvYmFibHkgbWFpbnRhaW4KKyAqCQl0aGUgSVNPIGRhdGFzdHJlYW0gZXZlbiBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gcGxheS4KKyAqCQlGaXggY291bnRpbmcgdGhlIHRvdGFsX2J5dGVzIGNvdW50ZXIsIFJlYWxQbGF5ZXIgRzIgZGVwZW5kcyBvbiBpdC4KKyAqIDE5OTktMTItMjA6ICBUaG9tYXMgU2FpbGVyCisgKgkJRml4IGJhZCBidWcgaW4gY29udmVyc2lvbiB0byBwZXIgaW50ZXJmYWNlIHByb2JpbmcuCisgKgkJZGlzY29ubmVjdCB3YXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgYXVkaW8gZGV2aWNlLAorICoJCWxlYWRpbmcgdG8gYSBwcmVtYXR1cmUgZnJlZWluZyBvZiB0aGUgYXVkaW8gc3RydWN0dXJlcworICogMjAwMC0wNS0xMzogIFRob21hcyBTYWlsZXIKKyAqCQlJIGRvbid0IHJlbWVtYmVyIHdobyBjaGFuZ2VkIHRoZSBmaW5kX2Zvcm1hdCByb3V0aW5lLAorICogICAgICAgICAgICAgIGJ1dCB0aGUgY2hhbmdlIHdhcyBjb21wbGV0ZWx5IGJyb2tlbiBmb3IgdGhlIERhbGxhcworICogICAgICAgICAgICAgIGNoaXAuIEFueXdheSB0YWtpbmcgc2FtcGxpbmcgcmF0ZSBpbnRvIGFjY291bnQgaW4gZmluZF9mb3JtYXQKKyAqICAgICAgICAgICAgICBpcyBiYWQgYW5kIHNob3VsZCBub3QgYmUgZG9uZSB1bmxlc3MgdGhlcmUgYXJlIGRldmljZXMgd2l0aAorICogICAgICAgICAgICAgIGNvbXBsZXRlbHkgYnJva2VuIGF1ZGlvIGRlc2NyaXB0b3JzLiBVbmxlc3Mgc29tZW9uZSBzaG93cworICogICAgICAgICAgICAgIG1lIHN1Y2ggYSBkZXNjcmlwdG9yLCBJIHdpbGwgbm90IGFsbG93IGZpbmRfZm9ybWF0IHRvCisgKiAgICAgICAgICAgICAgdGFrZSB0aGUgc2FtcGxpbmcgcmF0ZSBpbnRvIGFjY291bnQuCisgKiAgICAgICAgICAgICAgQWxzbywgdGhlIGZvcm1lciBmaW5kX2Zvcm1hdCBtYWRlOgorICogICAgICAgICAgICAgIC0gbXBnMTIzIHBsYXkgbW9ubyBpbnN0ZWFkIG9mIHN0ZXJlbworICogICAgICAgICAgICAgIC0gc294IGNvbXBsZXRlbHkgZmFpbCBmb3Igd2F2J3Mgd2l0aCBzYW1wbGUgcmF0ZXMgPCA0NC4xa0h6CisgKiAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGFsbGFzIGNoaXAuCisgKiAgICAgICAgICAgICAgQWxzbyBmaXggYSByYXRoZXIgbG9uZyBzdGFuZGluZyBwcm9ibGVtIHdpdGggYXBwbGljYXRpb25zIHRoYXQKKyAqICAgICAgICAgICAgICB1c2UgInNtYWxsIiB3cml0ZXMgcHJvZHVjaW5nIG5vIHNvdW5kIGF0IGFsbC4KKyAqIDIwMDAtMDUtMTU6ICBUaG9tYXMgU2FpbGVyCisgKgkJTXkgZmVhcnMgY2FtZSB0cnVlLCB0aGUgUGhpbGlwcyBjYW1lcmEgaW5kZWVkIGhhcyBwcmV0dHkgc3R1cGlkCisgKiAgICAgICAgICAgICAgYXVkaW8gZGVzY3JpcHRvcnMuCisgKiAyMDAwLTA1LTE3OiAgVGhvbWFzIFNhaWxlcgorICoJCU5lbXNvZnQgc3BvdHRlZCBteSBzdHVwaWQgbGFzdCBtaW51dGUgY2hhbmdlLCB0aGFua3MKKyAqIDIwMDAtMDUtMTk6ICBUaG9tYXMgU2FpbGVyCisgKgkJRml4ZWQgRkVBVFVSRV9VTklUIHRoaW5rb3MgZm91bmQgdGhhbmtzIHRvIHRoZSBLQyBUZWNobm9sb2d5CisgKiAgICAgICAgICAgICAgWHRlbmQgZGV2aWNlLiBCYXNpY2FsbHkgdGhlIGRyaXZlciB0cmVhdGVkIEZFQVRVUkVfVU5JVCdzIHNvdXJjZWQKKyAqICAgICAgICAgICAgICBieSBtb25vIHRlcm1pbmFscyBhcyBzdGVyZW8uCisgKiAyMDAwLTA1LTIwOiAgVGhvbWFzIFNhaWxlcgorICoJCVNFTEVDVE9SIHN1cHBvcnQgKGFuZCB0aHVzIHNlbGVjdGluZyByZWNvcmQgY2hhbm5lbHMgZnJvbSB0aGUgbWl4ZXIpLgorICogICAgICAgICAgICAgIFNvbWV3aGF0IHBlY3VsaWFyIGR1ZSB0byBPU1MgaW50ZXJmYWNlIGxpbWl0YXRpb25zLiBPbmx5IHdvcmtzCisgKiAgICAgICAgICAgICAgZm9yIGNoYW5uZWxzIHdoZXJlIGEgInNsaWRlciIgaXMgYWxyZWFkeSBpbiBmcm9udCBvZiBpdCAoaS5lLgorICogICAgICAgICAgICAgIGEgTUlYRVIgdW5pdCBvciBhIEZFQVRVUkUgdW5pdCB3aXRoIHZvbHVtZSBjYXBhYmlsaXR5KS4KKyAqIDIwMDAtMTEtMjY6ICBUaG9tYXMgU2FpbGVyCisgKiAgICAgICAgICAgICAgV29ya2Fyb3VuZCBmb3IgRGFsbGFzIERTNDIwMS4gVGhlIERTNDIwMSB1c2VzIFBDTTggYXMgZm9ybWF0IHRhZyBmb3IKKyAqICAgICAgICAgICAgICBpdHMgOCBiaXQgbW9kZXMsIGJ1dCBleHBlY3RzIHNpZ25lZCBkYXRhIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBoYXZlIHVzZWQgUENNKS4KKyAqIDIwMDEtMDMtMTA6ICBUaG9tYXMgU2FpbGVyCisgKiAgICAgICAgICAgICAgcHJvdmlkZSBhYnMgZnVuY3Rpb24sIHByZXZlbnQgcGlja2luZyB1cCBhIGJvZ3VzIGtlcm5lbCBtYWNybworICogICAgICAgICAgICAgIGZvciBhYnMuIEJ1ZyByZXBvcnQgYnkgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICogMjAwMS0wNi0xNjogIEJyeWNlIE5lc2JpdHQgPGJyeWNlQG9idmlvdXNseS5jb20+CisgKiAgICAgICAgICAgICAgRml4IFNORENUTF9EU1BfU1RFUkVPIEFQSSB2aW9sYXRpb24KKyAqIDIwMDMtMDQtMDg6CU9saXZlciBOZXVrdW0gKG9saXZlckBuZXVrdW0ubmFtZSk6CisgKgkJU2V0dGluZyBhIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBieSB1c2Jjb3JlIGFuZCBtdXN0IG5vdCBiZSBvdmVycmlkZGVuCisgKiAyMDA0LTAyLTI3OiAgV29ya2Fyb3VuZCBmb3IgYnJva2VuIHN5bmNoIGRlc2NyaXB0b3JzCisgKiAyMDA0LTAzLTA3OglBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoJCUFkZCB1c2JfaWZudW1fdG9faWYoKSBhbmQgdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKCkgc3VwcG9ydC4KKyAqCQlVc2UgdGhlIGluLW1lbW9yeSBkZXNjcmlwdG9ycyBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBkZXZpY2UuCisgKiAKKyAqLworCisvKgorICogU3RyYXRlZ3k6CisgKgorICogQWxhbiBDb3ggYW5kIFRob21hcyBTYWlsZXIgYXJlIHN0YXJ0aW5nIHRvIGRpZyBhdCBvcHBvc2l0ZSBlbmRzIGFuZAorICogYXJlIGhvcGluZyB0byBtZWV0IGluIHRoZSBtaWRkbGUsIGp1c3QgbGlrZSB0dW5uZWwgZGlnZ2VycyA6KQorICogQWxhbiB0YWNrbGVzIHRoZSBkZXNjcmlwdG9yIHBhcnNpbmcsIFRob21hcyB0aGUgYWN0dWFsIGRhdGEgSU8gYW5kIHRoZQorICogT1NTIGNvbXBhdGlibGUgaW50ZXJmYWNlLgorICoKKyAqIERhdGEgSU8gaW1wbGVtZW50YXRpb24gaXNzdWVzCisgKgorICogQSBtbWFwJ2FibGUgcmluZyBidWZmZXIgcGVyIGRpcmVjdGlvbiBpcyBpbXBsZW1lbnRlZCwgYmVjYXVzZQorICogYWxtb3N0IGV2ZXJ5IE9TUyBhcHAgZXhwZWN0cyBpdC4gSXQgaXMgaG93ZXZlciBpbXByYWN0aWNhbCB0bworICogdHJhbnNtaXQvcmVjZWl2ZSBVU0IgZGF0YSBkaXJlY3RseSBpbnRvIGFuZCBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyLAorICogZHVlIHRvIGFsaWdubWVudCBhbmQgc3luY2hyb25pc2F0aW9uIGlzc3Vlcy4gSW5zdGVhZCwgdGhlIHJpbmcgYnVmZmVyCisgKiBmZWVkcyBhIGNvbnN0YW50IHRpbWUgZGVsYXkgbGluZSB0aGF0IGhhbmRsZXMgdGhlIFVTQiBpc3N1ZXMuCisgKgorICogTm93IHdlIGZpcnN0IHRyeSB0byBmaW5kIGFuIGFsdGVybmF0ZSBzZXR0aW5nIHRoYXQgZXhhY3RseSBtYXRjaGVzCisgKiB0aGUgc2FtcGxlIGZvcm1hdCByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIElmIHdlIGZpbmQgb25lLCB3ZSBkbyBub3QKKyAqIG5lZWQgdG8gcGVyZm9ybSBhbnkgc2FtcGxlIHJhdGUgY29udmVyc2lvbnMuIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nCisgKiBhbHRzZXR0aW5nLCB3ZSBjaG9vc2UgdGhlIGNsb3Nlc3Qgb25lIGFuZCBwZXJmb3JtIHNhbXBsZSBmb3JtYXQKKyAqIGNvbnZlcnNpb25zLiBXZSBuZXZlciBkbyBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uOyB0aGVzZSBhcmUgdG9vCisgKiBleHBlbnNpdmUgdG8gYmUgcGVyZm9ybWVkIGluIHRoZSBrZXJuZWwuCisgKgorICogQ3VycmVudCBzdGF0dXM6IG5vIGtub3duIEhDRC1zcGVjaWZpYyBpc3N1ZXMuCisgKgorICogR2VuZXJhbGx5OiBEdWUgdG8gdGhlIGJyb2tlbm5lc3Mgb2YgdGhlIEF1ZGlvIENsYXNzIHNwZWMKKyAqIGl0IHNlZW1zIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHdyaXRlIGEgZ2VuZXJpYyBBdWRpbyBDbGFzcyBkcml2ZXIsCisgKiBzbyBhIHJlYXNvbmFibGUgZHJpdmVyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIGFjdHVhbGx5CisgKiB1c2VkLgorICoKKyAqIFBhcnNpbmcgaW1wbGVtZW50YXRpb24gaXNzdWVzCisgKgorICogT25lIGNhbm5vdCByZWFzb25hYmx5IHBhcnNlIHRoZSBBdWRpb0NsYXNzIGRlc2NyaXB0b3JzIGxpbmVhcmx5LgorICogVGhlcmVmb3JlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZlYXR1cmVzIHJvdXRpbmVzIHRvIGxvb2sKKyAqIGZvciBhIHNwZWNpZmljIGRlc2NyaXB0b3IgaW4gdGhlIGRlc2NyaXB0b3IgbGlzdC4KKyAqCisgKiBIb3cgZG9lcyB0aGUgcGFyc2luZyB3b3JrPyBGaXJzdCwgYWxsIGludGVyZmFjZXMgYXJlIHNlYXJjaGVkCisgKiBmb3IgYW4gQXVkaW9Db250cm9sIGNsYXNzIGludGVyZmFjZS4gSWYgZm91bmQsIHRoZSBjb25maWcgZGVzY3JpcHRvcgorICogdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgc2VhcmNoZWQgYW5kCisgKiB0aGUgSEVBREVSIGRlc2NyaXB0b3IgaXMgZm91bmQuIEl0IGNvbnRhaW5zIGEgbGlzdCBvZgorICogYWxsIEF1ZGlvU3RyZWFtaW5nIGFuZCBNSURJU3RyZWFtaW5nIGRldmljZXMuIFRoaXMgbGlzdCBpcyB0aGVuIHdhbGtlZCwKKyAqIGFuZCBhbGwgQXVkaW9TdHJlYW1pbmcgaW50ZXJmYWNlcyBhcmUgY2xhc3NpZmllZCBpbnRvIGlucHV0IGFuZCBvdXRwdXQKKyAqIGludGVyZmFjZXMgKGFjY29yZGluZyB0byB0aGUgZW5kcG9pbnQwIGRpcmVjdGlvbiBpbiBhbHRzZXR0aW5nMSkgKE1JRElTdHJlYW1pbmcKKyAqIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkKS4gVGhlIGlucHV0ICYgb3V0cHV0IGxpc3QgaXMgdGhlbiB1c2VkCisgKiB0byBncm91cCBpbnB1dHMgYW5kIG91dHB1dHMgdG9nZXRoZXIgYW5kIGlzc3VlZCBwYWlyd2lzZSB0byB0aGUKKyAqIEF1ZGlvU3RyZWFtaW5nIGNsYXNzIHBhcnNlci4gRmluYWxseSwgYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycworICogYXJlIHdhbGtlZCBhbmQgaXNzdWVkIHRvIHRoZSBtaXhlciBjb25zdHJ1Y3Rpb24gcm91dGluZS4KKyAqCisgKiBUaGUgQXVkaW9TdHJlYW1pbmcgcGFyc2VyIHNpbXBseSBlbnVtZXJhdGVzIGFsbCBhbHRzZXR0aW5ncyBiZWxvbmdpbmcKKyAqIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLiBJdCBsb29rcyBmb3IgQVNfR0VORVJBTCBhbmQgRk9STUFUX1RZUEUKKyAqIGNsYXNzIHNwZWNpZmljIGRlc2NyaXB0b3JzIHRvIGV4dHJhY3QgdGhlIHNhbXBsZSBmb3JtYXQvc2FtcGxlIHJhdGUKKyAqIGRhdGEuIE9ubHkgc2FtcGxlIGZvcm1hdCB0eXBlcyBQQ00gYW5kIFBDTTggYXJlIHN1cHBvcnRlZCByaWdodCBub3csIGFuZAorICogb25seSBGT1JNQVRfVFlQRV9JIGlzIGhhbmRsZWQuIFRoZSBpc29jaHJvbm91cyBkYXRhIGVuZHBvaW50IG5lZWRzIHRvCisgKiBiZSB0aGUgZmlyc3QgZW5kcG9pbnQgb2YgdGhlIGludGVyZmFjZSwgYW5kIHRoZSBvcHRpb25hbCBzeW5jaHJvbmlzYXRpb24KKyAqIGlzb2Nocm9ub3VzIGVuZHBvaW50IHRoZSBzZWNvbmQgb25lLgorICoKKyAqIE1peGVyIGNvbnN0cnVjdGlvbiB3b3JrcyBhcyBmb2xsb3dzOiBUaGUgdmFyaW91cyBURVJNSU5BTCBhbmQgVU5JVAorICogZGVzY3JpcHRvcnMgc3BhbiBhIHRyZWUgZnJvbSB0aGUgcm9vdCAoT1VUUFVUX1RFUk1JTkFMKSB0aHJvdWdoIHRoZQorICogaW50ZXJtZWRpYXRlIG5vZGVzIChVTklUcykgdG8gdGhlIGxlYXZlcyAoSU5QVVRfVEVSTUlOQUwpLiBXZSB3YWxrCisgKiB0aGF0IHRyZWUgaW4gYSBkZXB0aCBmaXJzdCBtYW5uZXIuIEZFQVRVUkVfVU5JVHMgbWF5IGNvbnRyaWJ1dGUgdm9sdW1lLAorICogYmFzcyBhbmQgdHJlYmxlIHNsaWRlcnMgdG8gdGhlIG1peGVyLCBNSVhFUl9VTklUcyB2b2x1bWUgc2xpZGVycy4KKyAqIFRoZSB0ZXJtaW5hbCB0eXBlIGVuY29kZWQgaW4gdGhlIElOUFVUX1RFUk1JTkFMcyBmZWVkcyBhIGhldXJpc3RpYworICogdG8gZGV0ZXJtaW5lICJtZWFuaW5nZnVsIiBPU1Mgc2xpZGVyIG51bWJlcnMsIGhvd2V2ZXIgd2Ugd2lsbCBzZWUKKyAqIGhvdyB3ZWxsIHRoaXMgd29ya3MgaW4gcHJhY3RpY2UuIE90aGVyIGZlYXR1cmVzIGFyZSBub3QgdXNlZCBhdCB0aGUKKyAqIG1vbWVudCwgdGhleSBzZWVtIGxlc3Mgb2Z0ZW4gdXNlZC4gQWxzbywgaXQgc2VlbXMgZGlmZmljdWx0IGF0IGxlYXN0CisgKiB0byBjb25zdHJ1Y3QgcmVjb3JkaW5nIHNvdXJjZSBzd2l0Y2hlcyBmcm9tIFNFTEVDVE9SX1VOSVRzLCBidXQKKyAqIHNpbmNlIHRoZXJlIGFyZSBub3QgbWFueSBVU0IgQURDJ3MgYXZhaWxhYmxlLCB3ZSBsZWF2ZSB0aGF0IGZvciBsYXRlci4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQXVkaW8gQ2xhc3MgZHJpdmVyIgorCisjZGVmaW5lIEFVRElPX0RFQlVHIDEKKworI2RlZmluZSBTTkRfREVWX0RTUDE2ICAgNQorCisjZGVmaW5lIGRwcmludGsoeCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBMaW5rZWQgbGlzdCBvZiBhbGwgYXVkaW8gZGV2aWNlcy4uLgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhdWRpb2RldnMgPSBMSVNUX0hFQURfSU5JVChhdWRpb2RldnMpOworc3RhdGljIERFQ0xBUkVfTVVURVgob3Blbl9zZW0pOworCisvKgorICogd2FpdCBxdWV1ZSBmb3IgcHJvY2Vzc2VzIHdhbnRpbmcgdG8gb3BlbiBhbiBVU0IgYXVkaW8gZGV2aWNlCisgKi8KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvcGVuX3dhaXQpOworCisKKyNkZWZpbmUgTUFYRk9STUFUUyAgICAgICAgTUFYX0FMVAorI2RlZmluZSBETUFCVUZTSElGVCAgICAgICAxNyAgLyogMTI4ayB3b3J0aCBvZiBETUEgYnVmZmVyICovCisjZGVmaW5lIE5SU0dCVUYgICAgICAgICAgICgxVTw8KERNQUJVRlNISUZULVBBR0VfU0hJRlQpKQorCisvKgorICogVGhpcyBpbmZsdWVuY2VzOgorICogLSBMYXRlbmN5CisgKiAtIEludGVycnVwdCByYXRlCisgKiAtIFN5bmNocm9uaXNhdGlvbiBiZWhhdmlvdXIKKyAqIERvbid0IHRvdWNoIHRoaXMgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQgYWxsIG9mIHRoZSBhYm92ZS4KKyAqLworI2RlZmluZSBERVNDRlJBTUVTICA1CisjZGVmaW5lIFNZTkNGUkFNRVMgIERFU0NGUkFNRVMKKworI2RlZmluZSBNSVhGTEdfU1RFUkVPSU4gICAxCisjZGVmaW5lIE1JWEZMR19TVEVSRU9PVVQgIDIKKworc3RydWN0IG1peGVyY2hhbm5lbCB7CisJX191MTYgdmFsdWU7CisJX191MTYgb3NzY2hhbm5lbDsgIC8qIG51bWJlciBvZiB0aGUgT1NTIGNoYW5uZWwgKi8KKwlfX3MxNiBtaW52YWwsIG1heHZhbDsKKwlfX3UxNiBzbGN0dW5pdGlkOworCV9fdTggdW5pdGlkOworCV9fdTggc2VsZWN0b3I7CisJX191OCBjaG51bTsKKwlfX3U4IGZsYWdzOworfTsKKworc3RydWN0IGF1ZGlvZm9ybWF0IHsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0OworCXVuc2lnbmVkIGludCBzcmF0ZWxvOworCXVuc2lnbmVkIGludCBzcmF0ZWhpOworCXVuc2lnbmVkIGNoYXIgYWx0c2V0dGluZzsKKwl1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXM7Cit9OworCitzdHJ1Y3QgZG1hYnVmIHsKKwkvKiBidWZmZXIgZGF0YSBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgZm9ybWF0OworCXVuc2lnbmVkIGludCBzcmF0ZTsKKwkvKiBwaHlzaWNhbCBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyICpzZ2J1ZltOUlNHQlVGXTsKKwl1bnNpZ25lZCBidWZzaXplOworCXVuc2lnbmVkIG51bWZyYWc7CisJdW5zaWduZWQgZnJhZ3NoaWZ0OworCXVuc2lnbmVkIHdycHRyLCByZHB0cjsKKwl1bnNpZ25lZCB0b3RhbF9ieXRlczsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgZXJyb3I7IC8qIG92ZXIvdW5kZXJydW4gKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCS8qIHJlZHVuZGFudCwgYnV0IG1ha2VzIGNhbGN1bGF0aW9ucyBlYXNpZXIgKi8KKwl1bnNpZ25lZCBmcmFnc2l6ZTsKKwl1bnNpZ25lZCBkbWFzaXplOworCS8qIE9TUyBzdHVmZiAqLworCXVuc2lnbmVkIG1hcHBlZDoxOworCXVuc2lnbmVkIHJlYWR5OjE7CisJdW5zaWduZWQgb3NzZnJhZ3NoaWZ0OworCWludCBvc3NtYXhmcmFnczsKKwl1bnNpZ25lZCBzdWJkaXZpc2lvbjsKK307CisKK3N0cnVjdCB1c2JfYXVkaW9fc3RhdGU7CisKKyNkZWZpbmUgRkxHX1VSQjBSVU5OSU5HICAgMQorI2RlZmluZSBGTEdfVVJCMVJVTk5JTkcgICAyCisjZGVmaW5lIEZMR19TWU5DMFJVTk5JTkcgIDQKKyNkZWZpbmUgRkxHX1NZTkMxUlVOTklORyAgOAorI2RlZmluZSBGTEdfUlVOTklORyAgICAgIDE2CisjZGVmaW5lIEZMR19DT05ORUNURUQgICAgMzIKKworc3RydWN0IG15X2RhdGFfdXJiIHsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCitzdHJ1Y3QgbXlfc3luY191cmIgeworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKKworc3RydWN0IHVzYl9hdWRpb2RldiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnN0YXRlOworCQorCS8qIHNvdW5kY29yZSBzdHVmZiAqLworCWludCBkZXZfYXVkaW87CisKKwkvKiB3YXZlIHN0dWZmICovCisJbW9kZV90IG9wZW5fbW9kZTsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgLyogRE1BIGJ1ZmZlciBhY2Nlc3Mgc3BpbmxvY2sgKi8KKworCXN0cnVjdCB1c2JpbiB7CisJCWludCBpbnRlcmZhY2U7ICAgICAgICAgICAvKiBJbnRlcmZhY2UgbnVtYmVyLCAtMSBtZWFucyBub3QgdXNlZCAqLworCQl1bnNpZ25lZCBpbnQgZm9ybWF0OyAgICAgLyogVVNCIGRhdGEgZm9ybWF0ICovCisJCXVuc2lnbmVkIGludCBkYXRhcGlwZTsgICAvKiB0aGUgZGF0YSBpbnB1dCBwaXBlICovCisJCXVuc2lnbmVkIGludCBzeW5jcGlwZTsgICAvKiB0aGUgc3luY2hyb25pc2F0aW9uIHBpcGUgLSAwIGZvciBhbnl0aGluZyBidXQgYWRhcHRpdmUgSU4gbW9kZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY2ludGVydmFsOyAgLyogUCBmb3IgYWRhcHRpdmUgSU4gbW9kZSwgMCBvdGhlcndpc2UgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFuOyAgICAgIC8qIG5vbWluYWwgc2FtcGxpbmcgcmF0ZSBpbiBVU0IgZm9ybWF0LCBpLmUuIGZzLzEwMDAgaW4gUTEwLjE0ICovCisJCXVuc2lnbmVkIGludCBmcmVxbWF4OyAgICAvKiBtYXhpbXVtIHNhbXBsaW5nIHJhdGUsIHVzZWQgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50ICovCisJCXVuc2lnbmVkIGludCBwaGFzZTsgICAgICAvKiBwaGFzZSBhY2N1bXVsYXRvciAqLworCQl1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgLyogc2VlIEZMR18gZGVmaW5lcyAqLworCQkKKwkJc3RydWN0IG15X2RhdGFfdXJiIGR1cmJbMl07ICAvKiBJU08gZGVzY3JpcHRvcnMgZm9yIHRoZSBkYXRhIGVuZHBvaW50ICovCisJCXN0cnVjdCBteV9zeW5jX3VyYiBzdXJiWzJdOyAgLyogSVNPIHN5bmMgcGlwZSBkZXNjcmlwdG9yIGlmIG5lZWRlZCAqLworCQkKKwkJc3RydWN0IGRtYWJ1ZiBkbWE7CisJfSB1c2JpbjsKKworCXN0cnVjdCB1c2JvdXQgeworCQlpbnQgaW50ZXJmYWNlOyAgICAgICAgICAgLyogSW50ZXJmYWNlIG51bWJlciwgLTEgbWVhbnMgbm90IHVzZWQgKi8KKwkJdW5zaWduZWQgaW50IGZvcm1hdDsgICAgIC8qIFVTQiBkYXRhIGZvcm1hdCAqLworCQl1bnNpZ25lZCBpbnQgZGF0YXBpcGU7ICAgLyogdGhlIGRhdGEgaW5wdXQgcGlwZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY3BpcGU7ICAgLyogdGhlIHN5bmNocm9uaXNhdGlvbiBwaXBlIC0gMCBmb3IgYW55dGhpbmcgYnV0IGFzeW5jaHJvbm91cyBPVVQgbW9kZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY2ludGVydmFsOyAgLyogUCBmb3IgYXN5bmNocm9ub3VzIE9VVCBtb2RlLCAwIG90aGVyd2lzZSAqLworCQl1bnNpZ25lZCBpbnQgZnJlcW47ICAgICAgLyogbm9taW5hbCBzYW1wbGluZyByYXRlIGluIFVTQiBmb3JtYXQsIGkuZS4gZnMvMTAwMCBpbiBRMTAuMTQgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFtOyAgICAgIC8qIG1vbWVudGFyeSBzYW1wbGluZyByYXRlIGluIFVTQiBmb3JtYXQsIGkuZS4gZnMvMTAwMCBpbiBRMTAuMTQgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFtYXg7ICAgIC8qIG1heGltdW0gc2FtcGxpbmcgcmF0ZSwgdXNlZCBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgKi8KKwkJdW5zaWduZWQgaW50IHBoYXNlOyAgICAgIC8qIHBoYXNlIGFjY3VtdWxhdG9yICovCisJCXVuc2lnbmVkIGludCBmbGFnczsgICAgICAvKiBzZWUgRkxHXyBkZWZpbmVzICovCisKKwkJc3RydWN0IG15X2RhdGFfdXJiIGR1cmJbMl07ICAvKiBJU08gZGVzY3JpcHRvcnMgZm9yIHRoZSBkYXRhIGVuZHBvaW50ICovCisJCXN0cnVjdCBteV9zeW5jX3VyYiBzdXJiWzJdOyAgLyogSVNPIHN5bmMgcGlwZSBkZXNjcmlwdG9yIGlmIG5lZWRlZCAqLworCQkKKwkJc3RydWN0IGRtYWJ1ZiBkbWE7CisJfSB1c2JvdXQ7CisKKworCXVuc2lnbmVkIGludCBudW1mbXRpbiwgbnVtZm10b3V0OworCXN0cnVjdCBhdWRpb2Zvcm1hdCBmbXRpbltNQVhGT1JNQVRTXTsKKwlzdHJ1Y3QgYXVkaW9mb3JtYXQgZm10b3V0W01BWEZPUk1BVFNdOworfTsgIAorCitzdHJ1Y3QgdXNiX21peGVyZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqc3RhdGU7CisKKwkvKiBzb3VuZGNvcmUgc3R1ZmYgKi8KKwlpbnQgZGV2X21peGVyOworCisJdW5zaWduZWQgY2hhciBpZmFjZTsgIC8qIGludGVyZmFjZSBudW1iZXIgb2YgdGhlIEF1ZGlvQ29udHJvbCBpbnRlcmZhY2UgKi8KKworCS8qIFVTQiBmb3JtYXQgZGVzY3JpcHRpb25zICovCisJdW5zaWduZWQgaW50IG51bWNoLCBtb2RjbnQ7CisKKwkvKiBtaXhjaCBpcyBsYXN0IGFuZCBnZXRzIGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLworCXN0cnVjdCBtaXhlcmNoYW5uZWwgY2hbMF07Cit9OworCitzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGlvZGV2OworCisJLyogVVNCIGRldmljZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGlvbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1peGVybGlzdDsKKworCXVuc2lnbmVkIGNvdW50OyAgLyogdXNhZ2UgY291bnRlcjsgTk9URTogdGhlIHVzYiBzdGFjayBpcyBhbHNvIGNvbnNpZGVyZWQgYSB1c2VyICovCit9OworCisvKiBwcml2YXRlIGF1ZGlvIGZvcm1hdCBleHRlbnNpb25zICovCisjZGVmaW5lIEFGTVRfU1RFUkVPICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEFGTVRfSVNTVEVSRU8oeCkgICAoKHgpICYgQUZNVF9TVEVSRU8pCisjZGVmaW5lIEFGTVRfSVMxNkJJVCh4KSAgICAoKHgpICYgKEFGTVRfUzE2X0xFfEFGTVRfUzE2X0JFfEFGTVRfVTE2X0xFfEFGTVRfVTE2X0JFKSkKKyNkZWZpbmUgQUZNVF9JU1VOU0lHTkVEKHgpICgoeCkgJiAoQUZNVF9VOHxBRk1UX1UxNl9MRXxBRk1UX1UxNl9CRSkpCisjZGVmaW5lIEFGTVRfQllURVNTSElGVCh4KSAoKEFGTVRfSVNTVEVSRU8oeCkgPyAxIDogMCkgKyAoQUZNVF9JUzE2QklUKHgpID8gMSA6IDApKQorI2RlZmluZSBBRk1UX0JZVEVTKHgpICAgICAgKDE8PEFGTVRfQllURVNTSEZJVCh4KSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbGQyKHVuc2lnbmVkIGludCB4KQoreworCXVuc2lnbmVkIHIgPSAwOworCQorCWlmICh4ID49IDB4MTAwMDApIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICh4ID49IDB4MTAwKSB7CisJCXggPj49IDg7CisJCXIgKz0gODsKKwl9CisJaWYgKHggPj0gMHgxMCkgeworCQl4ID4+PSA0OworCQlyICs9IDQ7CisJfQorCWlmICh4ID49IDQpIHsKKwkJeCA+Pj0gMjsKKwkJciArPSAyOworCX0KKwlpZiAoeCA+PSAyKQorCQlyKys7CisJcmV0dXJuIHI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogT1NTIGNvbXBhdGlibGUgcmluZyBidWZmZXIgbWFuYWdlbWVudC4gVGhlIHJpbmcgYnVmZmVyIG1heSBiZSBtbWFwJ2VkIGludG8KKyAqIGFuIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2UuCisgKgorICogSSBmaXJzdCB1c2VkIHRoZSBydm1hbGxvYyBzdHVmZiBjb3BpZWQgZnJvbSBidHR2LiBBbGFuIENveCBkaWQgbm90IGxpa2UgaXQsIHNvCisgKiB3ZSBub3cgdXNlIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGEgc2luZ2xlIHBhZ2UgZWFjaC4gVGhpcyBzYXZlcyB1cyB0aGUKKyAqIGtlcm5lbCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIGJ1dCB3ZSBoYXZlIHRvIGRvIGEgcGFnZSB0YWJsZSBhbGlrZSBtZWNoYW5pc20KKyAqICh0aG91Z2ggb25seSBvbmUgaW5kaXJlY3Rpb24pIGluIHNvZnR3YXJlLgorICovCisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9yZWxlYXNlKHN0cnVjdCBkbWFidWYgKmRiKQoreworCXVuc2lnbmVkIGludCBucjsKKwl2b2lkICpwOworCisJZm9yKG5yID0gMDsgbnIgPCBOUlNHQlVGOyBucisrKSB7CisJCWlmICghKHAgPSBkYi0+c2didWZbbnJdKSkKKwkJCWNvbnRpbnVlOworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcCk7CisJCWRiLT5zZ2J1Zltucl0gPSBOVUxMOworCX0KKwlkYi0+bWFwcGVkID0gZGItPnJlYWR5ID0gMDsKK30KKworc3RhdGljIGludCBkbWFidWZfaW5pdChzdHJ1Y3QgZG1hYnVmICpkYikKK3sKKwl1bnNpZ25lZCBpbnQgbnIsIGJ5dGVwZXJzZWMsIGJ1ZnM7CisJdm9pZCAqcDsKKworCS8qIGluaXRpYWxpemUgc29tZSBmaWVsZHMgKi8KKwlkYi0+cmRwdHIgPSBkYi0+d3JwdHIgPSBkYi0+dG90YWxfYnl0ZXMgPSBkYi0+Y291bnQgPSBkYi0+ZXJyb3IgPSAwOworCS8qIGNhbGN1bGF0ZSByZXF1aXJlZCBidWZmZXIgc2l6ZSAqLworCWJ5dGVwZXJzZWMgPSBkYi0+c3JhdGUgPDwgQUZNVF9CWVRFU1NISUZUKGRiLT5mb3JtYXQpOworCWJ1ZnMgPSAxVSA8PCBETUFCVUZTSElGVDsKKwlpZiAoZGItPm9zc2ZyYWdzaGlmdCkgeworCQlpZiAoKDEwMDAgPDwgZGItPm9zc2ZyYWdzaGlmdCkgPCBieXRlcGVyc2VjKQorCQkJZGItPmZyYWdzaGlmdCA9IGxkMihieXRlcGVyc2VjLzEwMDApOworCQllbHNlCisJCQlkYi0+ZnJhZ3NoaWZ0ID0gZGItPm9zc2ZyYWdzaGlmdDsKKwl9IGVsc2UgeworCQlkYi0+ZnJhZ3NoaWZ0ID0gbGQyKGJ5dGVwZXJzZWMvMTAwLyhkYi0+c3ViZGl2aXNpb24gPyBkYi0+c3ViZGl2aXNpb24gOiAxKSk7CisJCWlmIChkYi0+ZnJhZ3NoaWZ0IDwgMykKKwkJCWRiLT5mcmFnc2hpZnQgPSAzOworCX0KKwlkYi0+bnVtZnJhZyA9IGJ1ZnMgPj4gZGItPmZyYWdzaGlmdDsKKwl3aGlsZSAoZGItPm51bWZyYWcgPCA0ICYmIGRiLT5mcmFnc2hpZnQgPiAzKSB7CisJCWRiLT5mcmFnc2hpZnQtLTsKKwkJZGItPm51bWZyYWcgPSBidWZzID4+IGRiLT5mcmFnc2hpZnQ7CisJfQorCWRiLT5mcmFnc2l6ZSA9IDEgPDwgZGItPmZyYWdzaGlmdDsKKwlpZiAoZGItPm9zc21heGZyYWdzID49IDQgJiYgZGItPm9zc21heGZyYWdzIDwgZGItPm51bWZyYWcpCisJCWRiLT5udW1mcmFnID0gZGItPm9zc21heGZyYWdzOworCWRiLT5kbWFzaXplID0gZGItPm51bWZyYWcgPDwgZGItPmZyYWdzaGlmdDsKKwlmb3IobnIgPSAwOyBuciA8IE5SU0dCVUY7IG5yKyspIHsKKwkJaWYgKCFkYi0+c2didWZbbnJdKSB7CisJCQlwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlkYi0+c2didWZbbnJdID0gcDsKKwkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOworCQl9CisJCW1lbXNldChkYi0+c2didWZbbnJdLCBBRk1UX0lTVU5TSUdORUQoZGItPmZvcm1hdCkgPyAweDgwIDogMCwgUEFHRV9TSVpFKTsKKwkJaWYgKChuciA8PCBQQUdFX1NISUZUKSA+PSBkYi0+ZG1hc2l6ZSkKKwkJCWJyZWFrOworCX0KKwlkYi0+YnVmc2l6ZSA9IG5yIDw8IFBBR0VfU0hJRlQ7CisJZGItPnJlYWR5ID0gMTsKKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogZG1hYnVmX2luaXQgYnl0ZXBlcnNlYyAlZCBidWZzICVkIG9zc2ZyYWdzaGlmdCAlZCBvc3NtYXhmcmFncyAlZCAiCisJICAgICAgICAgImZyYWdzaGlmdCAlZCBmcmFnc2l6ZSAlZCBudW1mcmFnICVkIGRtYXNpemUgJWQgYnVmc2l6ZSAlZCBmbXQgMHgleCBzcmF0ZSAlZFxuIiwKKwkgICAgICAgICBieXRlcGVyc2VjLCBidWZzLCBkYi0+b3NzZnJhZ3NoaWZ0LCBkYi0+b3NzbWF4ZnJhZ3MsIGRiLT5mcmFnc2hpZnQsIGRiLT5mcmFnc2l6ZSwKKwkgICAgICAgICBkYi0+bnVtZnJhZywgZGItPmRtYXNpemUsIGRiLT5idWZzaXplLCBkYi0+Zm9ybWF0LCBkYi0+c3JhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbWFidWZfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBpbnQgbnI7CisKKwlpZiAoIWRiLT5yZWFkeSB8fCBkYi0+bWFwcGVkIHx8IChzdGFydCB8IHNpemUpICYgKFBBR0VfU0laRS0xKSB8fCBzaXplID4gZGItPmJ1ZnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCXNpemUgPj49IFBBR0VfU0hJRlQ7CisJZm9yKG5yID0gMDsgbnIgPCBzaXplOyBucisrKQorCQlpZiAoIWRiLT5zZ2J1Zltucl0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwlkYi0+bWFwcGVkID0gMTsKKwlmb3IobnIgPSAwOyBuciA8IHNpemU7IG5yKyspIHsKKwkJdW5zaWduZWQgbG9uZyBwZm47CisKKwkJcGZuID0gdmlydF90b19waHlzKGRiLT5zZ2J1Zltucl0pID4+IFBBR0VfU0hJRlQ7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGZuLCBQQUdFX1NJWkUsIHByb3QpKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9jb3B5aW4oc3RydWN0IGRtYWJ1ZiAqZGIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IHBncmVtLCByZW07CisKKwlkYi0+dG90YWxfYnl0ZXMgKz0gc2l6ZTsKKwlmb3IgKDs7KSB7CisJCWlmIChzaXplIDw9IDApCisJCQlyZXR1cm47CisJCXBncmVtID0gKCh+ZGItPndycHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBkYi0+d3JwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQltZW1jcHkoKGRiLT5zZ2J1ZltkYi0+d3JwdHIgPj4gUEFHRV9TSElGVF0pICsgKGRiLT53cnB0ciAmIChQQUdFX1NJWkUtMSkpLCBidWZmZXIsIHBncmVtKTsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlkYi0+d3JwdHIgKz0gcGdyZW07CisJCWlmIChkYi0+d3JwdHIgPj0gZGItPmRtYXNpemUpCisJCQlkYi0+d3JwdHIgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZG1hYnVmX2NvcHlvdXQoc3RydWN0IGRtYWJ1ZiAqZGIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IHBncmVtLCByZW07CisKKwlkYi0+dG90YWxfYnl0ZXMgKz0gc2l6ZTsKKwlmb3IgKDs7KSB7CisJCWlmIChzaXplIDw9IDApCisJCQlyZXR1cm47CisJCXBncmVtID0gKCh+ZGItPnJkcHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBkYi0+cmRwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQltZW1jcHkoYnVmZmVyLCAoZGItPnNnYnVmW2RiLT5yZHB0ciA+PiBQQUdFX1NISUZUXSkgKyAoZGItPnJkcHRyICYgKFBBR0VfU0laRS0xKSksIHBncmVtKTsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlkYi0+cmRwdHIgKz0gcGdyZW07CisJCWlmIChkYi0+cmRwdHIgPj0gZGItPmRtYXNpemUpCisJCQlkYi0+cmRwdHIgPSAwOworCX0KK30KKworc3RhdGljIGludCBkbWFidWZfY29weWluX3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGludCBwdHIsIGNvbnN0IHZvaWQgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOworCisJaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yICg7OykgeworCQlpZiAoc2l6ZSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCXBncmVtID0gKCh+cHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQlpZiAoY29weV9mcm9tX3VzZXIoKGRiLT5zZ2J1ZltwdHIgPj4gUEFHRV9TSElGVF0pICsgKHB0ciAmIChQQUdFX1NJWkUtMSkpLCBidWZmZXIsIHBncmVtKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlzaXplIC09IHBncmVtOworCQlidWZmZXIgKz0gcGdyZW07CisJCXB0ciArPSBwZ3JlbTsKKwkJaWYgKHB0ciA+PSBkYi0+ZG1hc2l6ZSkKKwkJCXB0ciA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGRtYWJ1Zl9jb3B5b3V0X3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGludCBwdHIsIHZvaWQgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOworCisJaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yICg7OykgeworCQlpZiAoc2l6ZSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCXBncmVtID0gKCh+cHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgKGRiLT5zZ2J1ZltwdHIgPj4gUEFHRV9TSElGVF0pICsgKHB0ciAmIChQQUdFX1NJWkUtMSkpLCBwZ3JlbSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlwdHIgKz0gcGdyZW07CisJCWlmIChwdHIgPj0gZGItPmRtYXNpemUpCisJCQlwdHIgPSAwOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVVNCIEkvTyBjb2RlLiBXZSBkbyBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb24gaWYgbmVjZXNzYXJ5CisgKi8KKworc3RhdGljIHZvaWQgdXNiaW5fc3RvcChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGksIG5vdGtpbGxlZCA9IDE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJaSA9IHUtPmZsYWdzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKGkgJiAoRkxHX1VSQjBSVU5OSU5HfEZMR19VUkIxUlVOTklOR3xGTEdfU1lOQzBSVU5OSU5HfEZMR19TWU5DMVJVTk5JTkcpKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKG5vdGtpbGxlZCA/IFRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWkgPSB1LT5mbGFnczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKG5vdGtpbGxlZCAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJaWYgKGkgJiBGTEdfVVJCMFJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPmR1cmJbMF0udXJiKTsKKwkJCWlmIChpICYgRkxHX1VSQjFSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5kdXJiWzFdLnVyYik7CisJCQlpZiAoaSAmIEZMR19TWU5DMFJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPnN1cmJbMF0udXJiKTsKKwkJCWlmIChpICYgRkxHX1NZTkMxUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+c3VyYlsxXS51cmIpOworCQkJbm90a2lsbGVkID0gMDsKKwkJfQorCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCWlmICh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlpZiAodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJaWYgKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWlmICh1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IAorCQl1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jpbl9yZWxlYXNlKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXVzYmluX3N0b3AoYXMpOworfQorCitzdGF0aWMgdm9pZCB1c2Jpbl9kaXNjKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdS0+ZmxhZ3MgJj0gfihGTEdfUlVOTklORyB8IEZMR19DT05ORUNURUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdXNiaW5fc3RvcChhcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnNpb24oY29uc3Qgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgaW50IGlmbXQsIHZvaWQgKm9idWYsIHVuc2lnbmVkIGludCBvZm10LCB2b2lkICp0bXAsIHVuc2lnbmVkIGludCBzY250KQoreworCXVuc2lnbmVkIGludCBjbnQsIGk7CisJX19zMTYgKnNwLCAqc3AyLCBzOworCXVuc2lnbmVkIGNoYXIgKmJwOworCisJY250ID0gc2NudDsKKwlpZiAoQUZNVF9JU1NURVJFTyhpZm10KSkKKwkJY250IDw8PSAxOworCXNwID0gKChfX3MxNiAqKXRtcCkgKyBjbnQ7CisJc3dpdGNoIChpZm10ICYgfkFGTVRfU1RFUkVPKSB7CisJY2FzZSBBRk1UX1U4OgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicC0tOworCQkJc3AtLTsKKwkJCSpzcCA9ICgqYnAgXiAweDgwKSA8PCA4OworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBBRk1UX1M4OgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicC0tOworCQkJc3AtLTsKKwkJCSpzcCA9ICpicCA8PCA4OworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIEFGTVRfVTE2X0xFOgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrMipjbnQsIGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCWJwIC09IDI7CisJCQlzcC0tOworCQkJKnNwID0gKGJwWzBdIHwgKGJwWzFdIDw8IDgpKSBeIDB4ODAwMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9VMTZfQkU6CisJCWZvciAoYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilpYnVmKSsyKmNudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJYnAgLT0gMjsKKwkJCXNwLS07CisJCQkqc3AgPSAoYnBbMV0gfCAoYnBbMF0gPDwgOCkpIF4gMHg4MDAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1MxNl9MRToKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpKzIqY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicCAtPSAyOworCQkJc3AtLTsKKwkJCSpzcCA9IGJwWzBdIHwgKGJwWzFdIDw8IDgpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1MxNl9CRToKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpKzIqY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicCAtPSAyOworCQkJc3AtLTsKKwkJCSpzcCA9IGJwWzFdIHwgKGJwWzBdIDw8IDgpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoIUFGTVRfSVNTVEVSRU8oaWZtdCkgJiYgQUZNVF9JU1NURVJFTyhvZm10KSkgeworCQkvKiBleHBhbmQgZnJvbSBtb25vIHRvIHN0ZXJlbyAqLworCQlmb3IgKHNwID0gKChfX3MxNiAqKXRtcCkrc2NudCwgc3AyID0gKChfX3MxNiAqKXRtcCkrMipzY250LCBpID0gMDsgaSA8IHNjbnQ7IGkrKykgeworCQkJc3AtLTsKKwkJCXNwMiAtPSAyOworCQkJc3AyWzBdID0gc3AyWzFdID0gc3BbMF07CisJCX0KKwl9CisJaWYgKEFGTVRfSVNTVEVSRU8oaWZtdCkgJiYgIUFGTVRfSVNTVEVSRU8ob2ZtdCkpIHsKKwkJLyogY29udHJhY3QgZnJvbSBzdGVyZW8gdG8gbW9ubyAqLworCQlmb3IgKHNwID0gc3AyID0gKChfX3MxNiAqKXRtcCksIGkgPSAwOyBpIDwgc2NudDsgaSsrLCBzcCsrLCBzcDIgKz0gMikKKwkJCXNwWzBdID0gKHNwMlswXSArIHNwMlsxXSkgPj4gMTsKKwl9CisJY250ID0gc2NudDsKKwlpZiAoQUZNVF9JU1NURVJFTyhvZm10KSkKKwkJY250IDw8PSAxOworCXNwID0gKChfX3MxNiAqKXRtcCk7CisJYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilvYnVmKTsKKwlzd2l0Y2ggKG9mbXQgJiB+QUZNVF9TVEVSRU8pIHsKKwljYXNlIEFGTVRfVTg6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnArKykKKwkJCSpicCA9ICgqc3AgPj4gOCkgXiAweDgwOworCQlicmVhazsKKworCWNhc2UgQUZNVF9TODoKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCsrKQorCQkJKmJwID0gKnNwID4+IDg7CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1UxNl9MRToKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCArPSAyKSB7CisJCQlzID0gKnNwOworCQkJYnBbMF0gPSBzOworCQkJYnBbMV0gPSAocyA+PiA4KSBeIDB4ODA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFGTVRfVTE2X0JFOgorCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHNwKyssIGJwICs9IDIpIHsKKwkJCXMgPSAqc3A7CisJCQlicFsxXSA9IHM7CisJCQlicFswXSA9IChzID4+IDgpIF4gMHg4MDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9TMTZfTEU6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnAgKz0gMikgeworCQkJcyA9ICpzcDsKKwkJCWJwWzBdID0gczsKKwkJCWJwWzFdID0gcyA+PiA4OworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1MxNl9CRToKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCArPSAyKSB7CisJCQlzID0gKnNwOworCQkJYnBbMV0gPSBzOworCQkJYnBbMF0gPSBzID4+IDg7CisJCX0KKwkJYnJlYWs7CisJfQorCQorfQorCitzdGF0aWMgdm9pZCB1c2Jpbl9jb252ZXJ0KHN0cnVjdCB1c2JpbiAqdSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2FtcGxlcykKK3sKKwl1bmlvbiB7CisJCV9fczE2IHNbNjRdOworCQl1bnNpZ25lZCBjaGFyIGJbMF07CisJfSB0bXA7CisJdW5zaWduZWQgaW50IHNjbnQsIG1heHMsIHVmbXRzaCwgZGZtdHNoOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCW1heHMgPSAoQUZNVF9JU1NURVJFTyh1LT5kbWEuZm9ybWF0IHwgdS0+Zm9ybWF0KSkgPyAzMiA6IDY0OworCXdoaWxlIChzYW1wbGVzID4gMCkgeworCQlzY250ID0gc2FtcGxlczsKKwkJaWYgKHNjbnQgPiBtYXhzKQorCQkJc2NudCA9IG1heHM7CisJCWNvbnZlcnNpb24oYnVmZmVyLCB1LT5mb3JtYXQsIHRtcC5iLCB1LT5kbWEuZm9ybWF0LCB0bXAuYiwgc2NudCk7CisJCWRtYWJ1Zl9jb3B5aW4oJnUtPmRtYSwgdG1wLmIsIHNjbnQgPDwgZGZtdHNoKTsKKwkJYnVmZmVyICs9IHNjbnQgPDwgdWZtdHNoOworCQlzYW1wbGVzIC09IHNjbnQ7CisJfQorfQkJCisKK3N0YXRpYyBpbnQgdXNiaW5fcHJlcGFyZV9kZXNjKHN0cnVjdCB1c2JpbiAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpLCBtYXhzaXplLCBvZmZzOworCisJbWF4c2l6ZSA9ICh1LT5mcmVxbWF4ICsgMHgzZmZmKSA+PiAoMTQgLSBBRk1UX0JZVEVTU0hJRlQodS0+Zm9ybWF0KSk7CisJLy9wcmludGsoS0VSTl9ERUJVRyAidXNiaW5fcHJlcGFyZV9kZXNjOiBtYXhzaXplICVkIGZyZXEgMHgleCBmb3JtYXQgMHgleFxuIiwgbWF4c2l6ZSwgdS0+ZnJlcW4sIHUtPmZvcm1hdCk7CisJZm9yIChpID0gb2ZmcyA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyssIG9mZnMgKz0gbWF4c2l6ZSkgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IG1heHNpemU7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmczsKKwl9CisJdXJiLT5pbnRlcnZhbCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gdmFsdWU6IDAgaWYgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVzdGFydGVkLCAtMSBvdGhlcndpc2UKKyAqIGNvbnZlcnQgc2FtcGxlIGZvcm1hdCBvbiB0aGUgZmx5IGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgaW50IHVzYmluX3JldGlyZV9kZXNjKHN0cnVjdCB1c2JpbiAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpLCB1Zm10c2gsIGRmbXRzaCwgZXJyID0gMCwgY250LCBzY250LCBkbWFmcmVlOworCXVuc2lnbmVkIGNoYXIgKmNwOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCWZvciAoaSA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyspIHsKKwkJY3AgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcikgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2Jpbl9yZXRpcmVfZGVzYzogZnJhbWUgJXUgc3RhdHVzICVkXG4iLCBpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykpOworCQkJY29udGludWU7CisJCX0KKwkJc2NudCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+PiB1Zm10c2g7CisJCWlmICghc2NudCkKKwkJCWNvbnRpbnVlOworCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJaWYgKCF1LT5kbWEubWFwcGVkKSB7CisJCQlkbWFmcmVlID0gdS0+ZG1hLmRtYXNpemUgLSB1LT5kbWEuY291bnQ7CisJCQlpZiAoY250ID4gZG1hZnJlZSkgeworCQkJCXNjbnQgPSBkbWFmcmVlID4+IGRmbXRzaDsKKwkJCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCQl1LT5kbWEuY291bnQgKz0gY250OworCQlpZiAodS0+Zm9ybWF0ID09IHUtPmRtYS5mb3JtYXQpIHsKKwkJCS8qIHdlIGRvIG5vdCBuZWVkIGZvcm1hdCBjb252ZXJzaW9uICovCisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogbm8gc2FtcGxlIGZvcm1hdCBjb252ZXJzaW9uXG4iKSk7CisJCQlkbWFidWZfY29weWluKCZ1LT5kbWEsIGNwLCBjbnQpOworCQl9IGVsc2UgeworCQkJLyogd2UgbmVlZCBzYW1wbGluZyBmb3JtYXQgY29udmVyc2lvbiAqLworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IHNhbXBsZSBmb3JtYXQgY29udmVyc2lvbiAleCAhPSAleFxuIiwgdS0+Zm9ybWF0LCB1LT5kbWEuZm9ybWF0KSk7CisJCQl1c2Jpbl9jb252ZXJ0KHUsIGNwLCBzY250KTsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQl1LT5kbWEuZXJyb3IrKzsKKwlpZiAodS0+ZG1hLmNvdW50ID49IChzaWduZWQpdS0+ZG1hLmZyYWdzaXplKQorCQl3YWtlX3VwKCZ1LT5kbWEud2FpdCk7CisJcmV0dXJuIGVyciA/IC0xIDogMDsKK30KKworc3RhdGljIHZvaWQgdXNiaW5fY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IHN1cmV0ID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fY29tcGxldGVkOiBzdGF0dXMgJWQgZXJyY250ICVkIGZsYWdzIDB4JXhcbiIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1LT5mbGFncyk7CisjZW5kaWYKKwlpZiAodXJiID09IHUtPmR1cmJbMF0udXJiKQorCQltYXNrID0gRkxHX1VSQjBSVU5OSU5HOworCWVsc2UgaWYgKHVyYiA9PSB1LT5kdXJiWzFdLnVyYikKKwkJbWFzayA9IEZMR19VUkIxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNiaW5fY29tcGxldGVkOiBwYW5pYzogdW5rbm93biBVUkJcbiIpOworCX0KKwl1cmItPmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmICghdXNiaW5fcmV0aXJlX2Rlc2ModSwgdXJiKSAmJgorCSAgICB1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmCisJICAgICF1c2Jpbl9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fY29tcGxldGVkOiBkZXNjcmlwdG9yIG5vdCByZXN0YXJ0ZWQgKHVzYl9zdWJtaXRfdXJiOiAlZClcbiIsIHN1cmV0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHdlIG91dHB1dCBzeW5jIGRhdGEKKyAqLworc3RhdGljIGludCB1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBjaGFyICpjcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBpLCBvZmZzOworCQorCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrLCBvZmZzICs9IDMsIGNwICs9IDMpIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSAzOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnM7CisJCWNwWzBdID0gdS0+ZnJlcW47CisJCWNwWzFdID0gdS0+ZnJlcW4gPj4gODsKKwkJY3BbMl0gPSB1LT5mcmVxbiA+PiAxNjsKKwl9CisJdXJiLT5pbnRlcnZhbCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gdmFsdWU6IDAgaWYgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVzdGFydGVkLCAtMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB1c2Jpbl9zeW5jX3JldGlyZV9kZXNjKHN0cnVjdCB1c2JpbiAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpOworCQorCWZvciAoaSA9IDA7IGkgPCBTWU5DRlJBTUVTOyBpKyspCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjWzBdLnN0YXR1cykKKwkJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmluX3N5bmNfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiaW5fc3luY19jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgc3VyZXQgPSAwOworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2Jpbl9zeW5jX2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOworI2VuZGlmCisJaWYgKHVyYiA9PSB1LT5zdXJiWzBdLnVyYikKKwkJbWFzayA9IEZMR19TWU5DMFJVTk5JTkc7CisJZWxzZSBpZiAodXJiID09IHUtPnN1cmJbMV0udXJiKQorCQltYXNrID0gRkxHX1NZTkMxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNiaW5fc3luY19jb21wbGV0ZWQ6IHBhbmljOiB1bmtub3duIFVSQlxuIik7CisJfQorCXVyYi0+ZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJaWYgKCF1c2Jpbl9zeW5jX3JldGlyZV9kZXNjKHUsIHVyYikgJiYKKwkgICAgdS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJgorCSAgICAhdXNiaW5fc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2Jpbl9zeW5jX2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHVzYmluX3N0YXJ0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXhzemUsIGJ1ZnN6OworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2Jpbl9zdGFydDogZGV2aWNlICVkIHVmbXQgMHglMDh4IGRmbXQgMHglMDh4IHNyYXRlICVkXG4iLAorCSAgICAgICBkZXYtPmRldm51bSwgdS0+Zm9ybWF0LCB1LT5kbWEuZm9ybWF0LCB1LT5kbWEuc3JhdGUpOworI2VuZGlmCisJLyogYWxsb2NhdGUgVVNCIHN0b3JhZ2UgaWYgbm90IGFscmVhZHkgZG9uZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmICghKHUtPmZsYWdzICYgRkxHX0NPTk5FQ1RFRCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmICghKHUtPmZsYWdzICYgRkxHX1JVTk5JTkcpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXUtPmZyZXFuID0gKCh1LT5kbWEuc3JhdGUgPDwgMTEpICsgNjIpIC8gMTI1OyAvKiB0aGlzIHdpbGwgb3ZlcmZsb3cgYXQgYXBwcm94IDJNU1BTICovCisJCXUtPmZyZXFtYXggPSB1LT5mcmVxbiArICh1LT5mcmVxbiA+PiAyKTsKKwkJdS0+cGhhc2UgPSAwOworCQltYXhzemUgPSAodS0+ZnJlcW1heCArIDB4M2ZmZikgPj4gKDE0IC0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCkpOworCQlidWZzeiA9IERFU0NGUkFNRVMgKiBtYXhzemU7CisJCWlmICh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZzejsKKwkJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCQl1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OworCQlpZiAodS0+c3luY3BpcGUpIHsKKwkJCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOworCQkJaWYgKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygzKlNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOworCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzKlNZTkNGUkFNRVM7CisJCX0KKwkJaWYgKCF1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8ICF1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8IAorCQkgICAgKHUtPnN5bmNwaXBlICYmICghdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgZGV2aWNlICVkXG4iLCBkZXYtPmRldm51bSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKHUtPmRtYS5jb3VudCA+PSB1LT5kbWEuZG1hc2l6ZSAmJiAhdS0+ZG1hLm1hcHBlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJdS0+ZmxhZ3MgfD0gRkxHX1JVTk5JTkc7CisJaWYgKCEodS0+ZmxhZ3MgJiBGTEdfVVJCMFJVTk5JTkcpKSB7CisJCXVyYiA9IHUtPmR1cmJbMF0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOworCQl1cmItPmNvbnRleHQgPSBhczsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYmluX2NvbXBsZXRlZDsKKwkJaWYgKCF1c2Jpbl9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKKwkJCXUtPmZsYWdzIHw9IEZMR19VUkIwUlVOTklORzsKKwkJZWxzZQorCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCX0KKwlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1VSQjFSVU5OSU5HKSkgeworCQl1cmIgPSB1LT5kdXJiWzFdLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHUtPmRhdGFwaXBlOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gREVTQ0ZSQU1FUzsKKwkJdXJiLT5jb250ZXh0ID0gYXM7CisJCXVyYi0+Y29tcGxldGUgPSB1c2Jpbl9jb21wbGV0ZWQ7CisJCWlmICghdXNiaW5fcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpCisJCQl1LT5mbGFncyB8PSBGTEdfVVJCMVJVTk5JTkc7CisJCWVsc2UKKwkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwl9CisJaWYgKHUtPnN5bmNwaXBlKSB7CisJCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzBSVU5OSU5HKSkgeworCQkJdXJiID0gdS0+c3VyYlswXS51cmI7CisJCQl1cmItPmRldiA9IGRldjsKKwkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOworCQkJdXJiLT5jb250ZXh0ID0gYXM7CisJCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fc3luY19jb21wbGV0ZWQ7CisJCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLworCQkJaWYgKCF1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMFJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzFSVU5OSU5HKSkgeworCQkJdXJiID0gdS0+c3VyYlsxXS51cmI7CisJCQl1cmItPmRldiA9IGRldjsKKwkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOworCQkJdXJiLT5jb250ZXh0ID0gYXM7CisJCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fc3luY19jb21wbGV0ZWQ7CisJCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLworCQkJaWYgKCF1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMVJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYm91dF9zdG9wKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpLCBub3RraWxsZWQgPSAxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCWkgPSB1LT5mbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXdoaWxlIChpICYgKEZMR19VUkIwUlVOTklOR3xGTEdfVVJCMVJVTk5JTkd8RkxHX1NZTkMwUlVOTklOR3xGTEdfU1lOQzFSVU5OSU5HKSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShub3RraWxsZWQgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpID0gdS0+ZmxhZ3M7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChub3RraWxsZWQgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWlmIChpICYgRkxHX1VSQjBSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5kdXJiWzBdLnVyYik7CisJCQlpZiAoaSAmIEZMR19VUkIxUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+ZHVyYlsxXS51cmIpOworCQkJaWYgKGkgJiBGTEdfU1lOQzBSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5zdXJiWzBdLnVyYik7CisJCQlpZiAoaSAmIEZMR19TWU5DMVJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPnN1cmJbMV0udXJiKTsKKwkJCW5vdGtpbGxlZCA9IDA7CisJCX0KKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlpZiAodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlpZiAodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSAKKwkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNib3V0X3JlbGVhc2Uoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJdXNib3V0X3N0b3AoYXMpOworfQorCitzdGF0aWMgdm9pZCB1c2JvdXRfZGlzYyhzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCXUtPmZsYWdzICY9IH4oRkxHX1JVTk5JTkcgfCBGTEdfQ09OTkVDVEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXVzYm91dF9zdG9wKGFzKTsKK30KKworc3RhdGljIHZvaWQgdXNib3V0X2NvbnZlcnQoc3RydWN0IHVzYm91dCAqdSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2FtcGxlcykKK3sKKwl1bmlvbiB7CisJCV9fczE2IHNbNjRdOworCQl1bnNpZ25lZCBjaGFyIGJbMF07CisJfSB0bXA7CisJdW5zaWduZWQgaW50IHNjbnQsIG1heHMsIHVmbXRzaCwgZGZtdHNoOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCW1heHMgPSAoQUZNVF9JU1NURVJFTyh1LT5kbWEuZm9ybWF0IHwgdS0+Zm9ybWF0KSkgPyAzMiA6IDY0OworCXdoaWxlIChzYW1wbGVzID4gMCkgeworCQlzY250ID0gc2FtcGxlczsKKwkJaWYgKHNjbnQgPiBtYXhzKQorCQkJc2NudCA9IG1heHM7CisJCWRtYWJ1Zl9jb3B5b3V0KCZ1LT5kbWEsIHRtcC5iLCBzY250IDw8IGRmbXRzaCk7CisJCWNvbnZlcnNpb24odG1wLmIsIHUtPmRtYS5mb3JtYXQsIGJ1ZmZlciwgdS0+Zm9ybWF0LCB0bXAuYiwgc2NudCk7CisJCWJ1ZmZlciArPSBzY250IDw8IHVmbXRzaDsKKwkJc2FtcGxlcyAtPSBzY250OworCX0KK30JCQorCitzdGF0aWMgaW50IHVzYm91dF9wcmVwYXJlX2Rlc2Moc3RydWN0IHVzYm91dCAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpLCB1Zm10c2gsIGRmbXRzaCwgZXJyID0gMCwgY250LCBzY250LCBvZmZzOworCXVuc2lnbmVkIGNoYXIgKmNwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwl1Zm10c2ggPSBBRk1UX0JZVEVTU0hJRlQodS0+Zm9ybWF0KTsKKwlkZm10c2ggPSBBRk1UX0JZVEVTU0hJRlQodS0+ZG1hLmZvcm1hdCk7CisJZm9yIChpID0gb2ZmcyA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyspIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzOworCQl1LT5waGFzZSA9ICh1LT5waGFzZSAmIDB4M2ZmZikgKyB1LT5mcmVxbTsKKwkJc2NudCA9IHUtPnBoYXNlID4+IDE0OworCQlpZiAoIXNjbnQpIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNudCA9IHNjbnQgPDwgZGZtdHNoOworCQlpZiAoIXUtPmRtYS5tYXBwZWQpIHsKKwkJCWlmIChjbnQgPiB1LT5kbWEuY291bnQpIHsKKwkJCQlzY250ID0gdS0+ZG1hLmNvdW50ID4+IGRmbXRzaDsKKwkJCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCXUtPmRtYS5jb3VudCAtPSBjbnQ7CisJCX0gZWxzZQorCQkJdS0+ZG1hLmNvdW50ICs9IGNudDsKKwkJaWYgKHUtPmZvcm1hdCA9PSB1LT5kbWEuZm9ybWF0KSB7CisJCQkvKiB3ZSBkbyBub3QgbmVlZCBmb3JtYXQgY29udmVyc2lvbiAqLworCQkJZG1hYnVmX2NvcHlvdXQoJnUtPmRtYSwgY3AsIGNudCk7CisJCX0gZWxzZSB7CisJCQkvKiB3ZSBuZWVkIHNhbXBsaW5nIGZvcm1hdCBjb252ZXJzaW9uICovCisJCQl1c2JvdXRfY29udmVydCh1LCBjcCwgc2NudCk7CisJCX0KKwkJY250ID0gc2NudCA8PCB1Zm10c2g7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY250OworCQlvZmZzICs9IGNudDsKKwkJY3AgKz0gY250OworCX0KKwl1cmItPmludGVydmFsID0gMTsKKwlpZiAoZXJyKQorCQl1LT5kbWEuZXJyb3IrKzsKKwlpZiAodS0+ZG1hLm1hcHBlZCkgeworCQlpZiAodS0+ZG1hLmNvdW50ID49IChzaWduZWQpdS0+ZG1hLmZyYWdzaXplKQorCQkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCX0gZWxzZSB7CisJCWlmICgoc2lnbmVkKXUtPmRtYS5kbWFzaXplID49IHUtPmRtYS5jb3VudCArIChzaWduZWQpdS0+ZG1hLmZyYWdzaXplKQorCQkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCX0KKwlyZXR1cm4gZXJyID8gLTEgOiAwOworfQorCisvKgorICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgdXNib3V0X3JldGlyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyspIHsKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JvdXRfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgc3VyZXQgPSAwOworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2JvdXRfY29tcGxldGVkOiBzdGF0dXMgJWQgZXJyY250ICVkIGZsYWdzIDB4JXhcbiIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1LT5mbGFncyk7CisjZW5kaWYKKwlpZiAodXJiID09IHUtPmR1cmJbMF0udXJiKQorCQltYXNrID0gRkxHX1VSQjBSVU5OSU5HOworCWVsc2UgaWYgKHVyYiA9PSB1LT5kdXJiWzFdLnVyYikKKwkJbWFzayA9IEZMR19VUkIxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNib3V0X2NvbXBsZXRlZDogcGFuaWM6IHVua25vd24gVVJCXG4iKTsKKwl9CisJdXJiLT5kZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXVzYm91dF9yZXRpcmVfZGVzYyh1LCB1cmIpICYmCisJICAgIHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYKKwkgICAgIXVzYm91dF9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfY29tcGxldGVkOiBkZXNjcmlwdG9yIG5vdCByZXN0YXJ0ZWQgKHVzYl9zdWJtaXRfdXJiOiAlZClcbiIsIHN1cmV0KSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgdXNib3V0X3N5bmNfcHJlcGFyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgb2ZmczsKKworCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrLCBvZmZzICs9IDMpIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSAzOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnM7CisJfQorCXVyYi0+aW50ZXJ2YWwgPSAxOworCXJldHVybiAwOworfQorCisvKgorICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgdXNib3V0X3N5bmNfcmV0aXJlX2Rlc2Moc3RydWN0IHVzYm91dCAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGNoYXIgKmNwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGYsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrLCBjcCArPSAzKSB7CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X3N5bmNfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPCAzKSB7CisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfc3luY19yZXRpcmVfZGVzYzogZnJhbWUgJXUgbGVuZ3RoICVkXG4iLCBpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWYgPSBjcFswXSB8IChjcFsxXSA8PCA4KSB8IChjcFsyXSA8PCAxNik7CisJCWlmIChhYnMoZiAtIHUtPmZyZXFuKSA+ICh1LT5mcmVxbiA+PiAzKSB8fCBmID4gdS0+ZnJlcW1heCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNib3V0X3N5bmNfcmV0aXJlX2Rlc2M6IHJlcXVlc3RlZCBmcmVxdWVuY3kgJXUgKG5vbWluYWwgJXUpIG91dCBvZiByYW5nZSFcbiIsIGYsIHUtPmZyZXFuKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXUtPmZyZXFtID0gZjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYm91dF9zeW5jX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IHN1cmV0ID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNib3V0X3N5bmNfY29tcGxldGVkOiBzdGF0dXMgJWQgZXJyY250ICVkIGZsYWdzIDB4JXhcbiIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1LT5mbGFncyk7CisjZW5kaWYKKwlpZiAodXJiID09IHUtPnN1cmJbMF0udXJiKQorCQltYXNrID0gRkxHX1NZTkMwUlVOTklORzsKKwllbHNlIGlmICh1cmIgPT0gdS0+c3VyYlsxXS51cmIpCisJCW1hc2sgPSBGTEdfU1lOQzFSVU5OSU5HOworCWVsc2UgeworCQltYXNrID0gMDsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JvdXRfc3luY19jb21wbGV0ZWQ6IHBhbmljOiB1bmtub3duIFVSQlxuIik7CisJfQorCXVyYi0+ZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJaWYgKCF1c2JvdXRfc3luY19yZXRpcmVfZGVzYyh1LCB1cmIpICYmCisJICAgIHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYKKwkgICAgIXVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmIAorCSAgICAoc3VyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSA9PSAwKSB7CisJCXUtPmZsYWdzIHw9IG1hc2s7CisJfSBlbHNlIHsKKwkJdS0+ZmxhZ3MgJj0gfihtYXNrIHwgRkxHX1JVTk5JTkcpOworCQl3YWtlX3VwKCZ1LT5kbWEud2FpdCk7CisJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYm91dF9zeW5jX2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHVzYm91dF9zdGFydChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXhzemUsIGJ1ZnN6OworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2JvdXRfc3RhcnQ6IGRldmljZSAlZCB1Zm10IDB4JTA4eCBkZm10IDB4JTA4eCBzcmF0ZSAlZFxuIiwKKwkgICAgICAgZGV2LT5kZXZudW0sIHUtPmZvcm1hdCwgdS0+ZG1hLmZvcm1hdCwgdS0+ZG1hLnNyYXRlKTsKKyNlbmRpZgorCS8qIGFsbG9jYXRlIFVTQiBzdG9yYWdlIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoISh1LT5mbGFncyAmIEZMR19DT05ORUNURUQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoISh1LT5mbGFncyAmIEZMR19SVU5OSU5HKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQl1LT5mcmVxbiA9IHUtPmZyZXFtID0gKCh1LT5kbWEuc3JhdGUgPDwgMTEpICsgNjIpIC8gMTI1OyAvKiB0aGlzIHdpbGwgb3ZlcmZsb3cgYXQgYXBwcm94IDJNU1BTICovCisJCXUtPmZyZXFtYXggPSB1LT5mcmVxbiArICh1LT5mcmVxbiA+PiAyKTsKKwkJdS0+cGhhc2UgPSAwOworCQltYXhzemUgPSAodS0+ZnJlcW1heCArIDB4M2ZmZikgPj4gKDE0IC0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCkpOworCQlidWZzeiA9IERFU0NGUkFNRVMgKiBtYXhzemU7CisJCWlmICh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZzejsKKwkJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCQl1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OworCQlpZiAodS0+c3luY3BpcGUpIHsKKwkJCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOworCQkJaWYgKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygzKlNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOworCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzKlNZTkNGUkFNRVM7CisJCX0KKwkJaWYgKCF1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8ICF1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8IAorCQkgICAgKHUtPnN5bmNwaXBlICYmICghdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgZGV2aWNlICVkXG4iLCBkZXYtPmRldm51bSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKHUtPmRtYS5jb3VudCA8PSAwICYmICF1LT5kbWEubWFwcGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKyAgICAgICAJdS0+ZmxhZ3MgfD0gRkxHX1JVTk5JTkc7CisJaWYgKCEodS0+ZmxhZ3MgJiBGTEdfVVJCMFJVTk5JTkcpKSB7CisJCXVyYiA9IHUtPmR1cmJbMF0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOworCQl1cmItPmNvbnRleHQgPSBhczsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9jb21wbGV0ZWQ7CisJCWlmICghdXNib3V0X3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjBSVU5OSU5HOworCQllbHNlCisJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJfQorCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfVVJCMVJVTk5JTkcpKSB7CisJCXVyYiA9IHUtPmR1cmJbMV0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOworCQl1cmItPmNvbnRleHQgPSBhczsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9jb21wbGV0ZWQ7CisJCWlmICghdXNib3V0X3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjFSVU5OSU5HOworCQllbHNlCisJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJfQorCWlmICh1LT5zeW5jcGlwZSkgeworCQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1NZTkMwUlVOTklORykpIHsKKwkJCXVyYiA9IHUtPnN1cmJbMF0udXJiOworCQkJdXJiLT5kZXYgPSBkZXY7CisJCQl1cmItPnBpcGUgPSB1LT5zeW5jcGlwZTsKKwkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU1lOQ0ZSQU1FUzsKKwkJCXVyYi0+Y29udGV4dCA9IGFzOworCQkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9zeW5jX2NvbXBsZXRlZDsKKwkJCS8qIHN0cmlkZTogdS0+c3luY2ludGVydmFsICovCisJCQlpZiAoIXVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMFJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzFSVU5OSU5HKSkgeworCQkJdXJiID0gdS0+c3VyYlsxXS51cmI7CisJCQl1cmItPmRldiA9IGRldjsKKwkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOworCQkJdXJiLT5jb250ZXh0ID0gYXM7CisJCQl1cmItPmNvbXBsZXRlID0gdXNib3V0X3N5bmNfY29tcGxldGVkOworCQkJLyogc3RyaWRlOiB1LT5zeW5jaW50ZXJ2YWwgKi8KKwkJCWlmICghdXNib3V0X3N5bmNfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpCisJCQkJdS0+ZmxhZ3MgfD0gRkxHX1NZTkMxUlVOTklORzsKKwkJCWVsc2UKKwkJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZm9ybWF0X2dvb2RuZXNzKHN0cnVjdCBhdWRpb2Zvcm1hdCAqYWZwLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCit7CisJdW5zaWduZWQgaW50IGcgPSAwOworCisJaWYgKHNyYXRlIDwgYWZwLT5zcmF0ZWxvKQorCQlnICs9IGFmcC0+c3JhdGVsbyAtIHNyYXRlOworCWlmIChzcmF0ZSA+IGFmcC0+c3JhdGVoaSkKKwkJZyArPSBzcmF0ZSAtIGFmcC0+c3JhdGVoaTsKKwlpZiAoQUZNVF9JU1NURVJFTyhhZnAtPmZvcm1hdCkgJiYgIUFGTVRfSVNTVEVSRU8oZm10KSkKKwkJZyArPSAweDEwMDAwMDsKKwlpZiAoIUFGTVRfSVNTVEVSRU8oYWZwLT5mb3JtYXQpICYmIEFGTVRfSVNTVEVSRU8oZm10KSkKKwkJZyArPSAweDQwMDAwMDsKKwlpZiAoQUZNVF9JUzE2QklUKGFmcC0+Zm9ybWF0KSAmJiAhQUZNVF9JUzE2QklUKGZtdCkpCisJCWcgKz0gMHgxMDAwMDA7CisJaWYgKCFBRk1UX0lTMTZCSVQoYWZwLT5mb3JtYXQpICYmIEFGTVRfSVMxNkJJVChmbXQpKQorCQlnICs9IDB4NDAwMDAwOworCXJldHVybiBnOworfQorCitzdGF0aWMgaW50IGZpbmRfZm9ybWF0KHN0cnVjdCBhdWRpb2Zvcm1hdCAqYWZwLCB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBmbXQsIHVuc2lnbmVkIGludCBzcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZywgZ2IgPSB+MDsKKwlpbnQgaiA9IC0xOyAvKiBkZWZhdWx0IHRvIGZhaWx1cmUgKi8KKworCS8qIGZpbmQgImJlc3QiIGZvcm1hdCAoYWNjb3JkaW5nIHRvIGZvcm1hdF9nb29kbmVzcykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlnID0gZm9ybWF0X2dvb2RuZXNzKCZhZnBbaV0sIGZtdCwgc3JhdGUpOworCQlpZiAoZyA+PSBnYikgCisJCQljb250aW51ZTsKKwkJaiA9IGk7CisJCWdiID0gZzsKKwl9CisgICAgICAgCXJldHVybiBqOworfQorCitzdGF0aWMgaW50IHNldF9mb3JtYXRfaW4oc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOworCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47CisJc3RydWN0IGRtYWJ1ZiAqZCA9ICZ1LT5kbWE7CisJc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQ7CisJdW5zaWduZWQgaW50IGVwOworCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKKwlpbnQgZm10bnIsIHJldDsKKworCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdS0+aW50ZXJmYWNlKTsKKwlpZiAoIWlmYWNlKQorCQlyZXR1cm4gMDsKKworCWZtdG5yID0gZmluZF9mb3JtYXQoYXMtPmZtdGluLCBhcy0+bnVtZm10aW4sIGQtPmZvcm1hdCwgZC0+c3JhdGUpOworCWlmIChmbXRuciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbigpOiBmYWlsZWQgdG8gZmluZCBkZXNpcmVkIGZvcm1hdC9zcGVlZCBjb21iaW5hdGlvbi5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gYXMtPmZtdGluICsgZm10bnI7CisJYWx0cyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwl1LT5mb3JtYXQgPSBmbXQtPmZvcm1hdDsKKwl1LT5kYXRhcGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7CisJdS0+c3luY3BpcGUgPSB1LT5zeW5jaW50ZXJ2YWwgPSAwOworCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDBjKSA9PSAweDA4KSB7CisJCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJtQXR0cmlidXRlcyAhPSAweDAxIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJTeW5jaEFkZHJlc3MgIT0gMCB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICE9IChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJTeW5jaEFkZHJlc3MgJiAweDdmKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBjbGFpbXMgYWRhcHRpdmUgaW4gIgorCQkJICAgICAgICJidXQgaGFzIGludmFsaWQgc3luY2ggcGlwZTsgdHJlYXRpbmcgYXMgYXN5bmNocm9ub3VzIGluXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJCX0gZWxzZSB7CisJCQl1LT5zeW5jcGlwZSA9IHVzYl9zbmRpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7CisJCQl1LT5zeW5jaW50ZXJ2YWwgPSBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJSZWZyZXNoOworCQl9CisJfQorCWlmIChkLT5zcmF0ZSA8IGZtdC0+c3JhdGVsbykKKwkJZC0+c3JhdGUgPSBmbXQtPnNyYXRlbG87CisJaWYgKGQtPnNyYXRlID4gZm10LT5zcmF0ZWhpKQorCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVoaTsKKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogdXNiX3NldF9pbnRlcmZhY2UgJXUgJXVcbiIsCisJCQl1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykpOworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFsdHMtPmRlc2MuYkludGVyZmFjZU51bWJlciwgZm10LT5hbHRzZXR0aW5nKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAorCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZm10LT5zcmF0ZWxvID09IGZtdC0+c3JhdGVoaSkKKwkJcmV0dXJuIDA7CisJZXAgPSB1c2JfcGlwZWVuZHBvaW50KHUtPmRhdGFwaXBlKSB8ICh1LT5kYXRhcGlwZSAmIFVTQl9ESVJfSU4pOworCS8qIGlmIGVuZHBvaW50IGhhcyBwaXRjaCBjb250cm9sLCBlbmFibGUgaXQgKi8KKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMikgeworCQlkYXRhWzBdID0gMTsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgcGl0Y2ggY29udHJvbCBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCS8qIGlmIGVuZHBvaW50IGhhcyBzYW1wbGluZyByYXRlIGNvbnRyb2wsIHNldCBpdCAqLworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiAweDAxKSB7CisJCWRhdGFbMF0gPSBkLT5zcmF0ZTsKKwkJZGF0YVsxXSA9IGQtPnNyYXRlID4+IDg7CisJCWRhdGFbMl0gPSBkLT5zcmF0ZSA+PiAxNjsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gc2V0IGlucHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAorCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGZhaWx1cmUgKGVycm9yICVkKSB0byBnZXQgaW5wdXQgc2FtcGxpbmcgZnJlcXVlbmN5IGRldmljZSAlZCBpbnRlcmZhY2UgJXUgZW5kcG9pbnQgMHgleFxuIiwKKwkJCSAgICAgICByZXQsIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGVwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIHNyYXRlIHJlcTogJXUgcmVhbCAldVxuIiwKKwkJICAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGQtPnNyYXRlLCBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNikpKTsKKwkJZC0+c3JhdGUgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNik7CisJfQorCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X2luOiBVU0IgZm9ybWF0IDB4JXgsIERNQSBmb3JtYXQgMHgleCBzcmF0ZSAldVxuIiwgdS0+Zm9ybWF0LCBkLT5mb3JtYXQsIGQtPnNyYXRlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2Zvcm1hdF9vdXQoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwkKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJc3RydWN0IGRtYWJ1ZiAqZCA9ICZ1LT5kbWE7CisJc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQ7CisJdW5zaWduZWQgaW50IGVwOworCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKKwlpbnQgZm10bnIsIHJldDsKKworCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdS0+aW50ZXJmYWNlKTsKKwlpZiAoIWlmYWNlKQorCQlyZXR1cm4gMDsKKworCWZtdG5yID0gZmluZF9mb3JtYXQoYXMtPmZtdG91dCwgYXMtPm51bWZtdG91dCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSk7CisJaWYgKGZtdG5yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dCgpOiBmYWlsZWQgdG8gZmluZCBkZXNpcmVkIGZvcm1hdC9zcGVlZCBjb21iaW5hdGlvbi5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gYXMtPmZtdG91dCArIGZtdG5yOworCXUtPmZvcm1hdCA9IGZtdC0+Zm9ybWF0OworCWFsdHMgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJdS0+ZGF0YXBpcGUgPSB1c2Jfc25kaXNvY3BpcGUoZGV2LCBhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweGYpOworCXUtPnN5bmNwaXBlID0gdS0+c3luY2ludGVydmFsID0gMDsKKwlpZiAoKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwYykgPT0gMHgwNCkgeworI2lmIDAKKwkJcHJpbnRrKEtFUk5fREVCVUcgImJOdW1FbmRwb2ludHMgMHglMDJ4IGVuZHBvaW50WzFdLmJtQXR0cmlidXRlcyAweCUwMnhcbiIKKwkJICAgICAgIEtFUk5fREVCVUcgImVuZHBvaW50WzFdLmJTeW5jaEFkZHJlc3MgMHglMDJ4IGVuZHBvaW50WzFdLmJFbmRwb2ludEFkZHJlc3MgMHglMDJ4XG4iCisJCSAgICAgICBLRVJOX0RFQlVHICJlbmRwb2ludFswXS5iU3luY2hBZGRyZXNzIDB4JTAyeFxuIiwgYWx0cy0+Yk51bUVuZHBvaW50cywKKwkJICAgICAgIGFsdHMtPmVuZHBvaW50WzFdLmJtQXR0cmlidXRlcywgYWx0cy0+ZW5kcG9pbnRbMV0uYlN5bmNoQWRkcmVzcywKKwkJICAgICAgIGFsdHMtPmVuZHBvaW50WzFdLmJFbmRwb2ludEFkZHJlc3MsIGFsdHMtPmVuZHBvaW50WzBdLmJTeW5jaEFkZHJlc3MpOworI2VuZGlmCisJCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJtQXR0cmlidXRlcyAhPSAweDAxIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJTeW5jaEFkZHJlc3MgIT0gMCB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICE9IChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJTeW5jaEFkZHJlc3MgfCAweDgwKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBjbGFpbXMgYXN5bmNoIG91dCAiCisJCQkgICAgICAgImJ1dCBoYXMgaW52YWxpZCBzeW5jaCBwaXBlOyB0cmVhdGluZyBhcyBhZGFwdGl2ZSBvdXRcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwkJfSBlbHNlIHsKKwkJCXUtPnN5bmNwaXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHhmKTsKKwkJCXUtPnN5bmNpbnRlcnZhbCA9IGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYlJlZnJlc2g7CisJCX0KKwl9CisJaWYgKGQtPnNyYXRlIDwgZm10LT5zcmF0ZWxvKQorCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVsbzsKKwlpZiAoZC0+c3JhdGUgPiBmbXQtPnNyYXRlaGkpCisJCWQtPnNyYXRlID0gZm10LT5zcmF0ZWhpOworCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogdXNiX3NldF9pbnRlcmZhY2UgJXUgJXVcbiIsCisJCQl1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykpOworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXYsIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAorCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZm10LT5zcmF0ZWxvID09IGZtdC0+c3JhdGVoaSkKKwkJcmV0dXJuIDA7CisJZXAgPSB1c2JfcGlwZWVuZHBvaW50KHUtPmRhdGFwaXBlKSB8ICh1LT5kYXRhcGlwZSAmIFVTQl9ESVJfSU4pOworCS8qIGlmIGVuZHBvaW50IGhhcyBwaXRjaCBjb250cm9sLCBlbmFibGUgaXQgKi8KKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMikgeworCQlkYXRhWzBdID0gMTsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgcGl0Y2ggY29udHJvbCBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCS8qIGlmIGVuZHBvaW50IGhhcyBzYW1wbGluZyByYXRlIGNvbnRyb2wsIHNldCBpdCAqLworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiAweDAxKSB7CisJCWRhdGFbMF0gPSBkLT5zcmF0ZTsKKwkJZGF0YVsxXSA9IGQtPnNyYXRlID4+IDg7CisJCWRhdGFbMl0gPSBkLT5zcmF0ZSA+PiAxNjsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gc2V0IG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4IHRvICV1XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXAsIGQtPnNyYXRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gZ2V0IG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXApOworCQkJcmV0dXJuIC0xOworCQl9CisJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIHNyYXRlIHJlcTogJXUgcmVhbCAldVxuIiwKKwkJICAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGQtPnNyYXRlLCBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNikpKTsKKwkJZC0+c3JhdGUgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNik7CisJfQorCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogVVNCIGZvcm1hdCAweCV4LCBETUEgZm9ybWF0IDB4JXggc3JhdGUgJXVcbiIsIHUtPmZvcm1hdCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mb3JtYXQoc3RydWN0IHVzYl9hdWRpb2RldiAqcywgdW5zaWduZWQgaW50IGZtb2RlLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCit7CisJaW50IHJldDEgPSAwLCByZXQyID0gMDsKKworCWlmICghKGZtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZtb2RlICYgRk1PREVfUkVBRCkgeworCQl1c2Jpbl9zdG9wKHMpOworCQlzLT51c2Jpbi5kbWEucmVhZHkgPSAwOworCQlpZiAoZm10ID09IEFGTVRfUVVFUlkpCisJCQlmbXQgPSBzLT51c2Jpbi5kbWEuZm9ybWF0OworCQllbHNlCisJCQlzLT51c2Jpbi5kbWEuZm9ybWF0ID0gZm10OworCQlpZiAoIXNyYXRlKQorCQkJc3JhdGUgPSBzLT51c2Jpbi5kbWEuc3JhdGU7CisJCWVsc2UKKwkJCXMtPnVzYmluLmRtYS5zcmF0ZSA9IHNyYXRlOworCX0KKwlpZiAoZm1vZGUgJiBGTU9ERV9XUklURSkgeworCQl1c2JvdXRfc3RvcChzKTsKKwkJcy0+dXNib3V0LmRtYS5yZWFkeSA9IDA7CisJCWlmIChmbXQgPT0gQUZNVF9RVUVSWSkKKwkJCWZtdCA9IHMtPnVzYm91dC5kbWEuZm9ybWF0OworCQllbHNlCisJCQlzLT51c2JvdXQuZG1hLmZvcm1hdCA9IGZtdDsKKwkJaWYgKCFzcmF0ZSkKKwkJCXNyYXRlID0gcy0+dXNib3V0LmRtYS5zcmF0ZTsKKwkJZWxzZQorCQkJcy0+dXNib3V0LmRtYS5zcmF0ZSA9IHNyYXRlOworCX0KKwlpZiAoZm1vZGUgJiBGTU9ERV9SRUFEKQorCQlyZXQxID0gc2V0X2Zvcm1hdF9pbihzKTsKKwlpZiAoZm1vZGUgJiBGTU9ERV9XUklURSkKKwkJcmV0MiA9IHNldF9mb3JtYXRfb3V0KHMpOworCXJldHVybiByZXQxID8gcmV0MSA6IHJldDI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHdybWl4ZXIoc3RydWN0IHVzYl9taXhlcmRldiAqbXMsIHVuc2lnbmVkIG1peGNoLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbXMtPnN0YXRlLT51c2JkZXY7CisJdW5zaWduZWQgY2hhciBkYXRhWzJdOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCWludCB2MSwgdjIsIHYzOworCisJaWYgKG1peGNoID49IG1zLT5udW1jaCkKKwkJcmV0dXJuIC0xOworCWNoID0gJm1zLT5jaFttaXhjaF07CisJdjMgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKKwl2MSA9IHZhbHVlICYgMHhmZjsKKwl2MiA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisJaWYgKHYxID4gMTAwKQorCQl2MSA9IDEwMDsKKwlpZiAodjIgPiAxMDApCisJCXYyID0gMTAwOworCWlmICghKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkpCisJCXYyID0gdjE7CisJY2gtPnZhbHVlID0gdjEgfCAodjIgPDwgOCk7CisJdjEgPSAodjEgKiB2MykgLyAxMDAgKyBjaC0+bWludmFsOworCXYyID0gKHYyICogdjMpIC8gMTAwICsgY2gtPm1pbnZhbDsKKwlzd2l0Y2ggKGNoLT5zZWxlY3RvcikgeworCWNhc2UgMDogIC8qIG1peGVyIHVuaXQgcmVxdWVzdCAqLworCQlkYXRhWzBdID0gdjE7CisJCWRhdGFbMV0gPSB2MSA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoY2gtPmNobnVtIDw8IDgpIHwgMSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoIShjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQorCQkJcmV0dXJuIDA7CisJCWRhdGFbMF0gPSB2MjsKKwkJZGF0YVsxXSA9IHYyID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgICgoY2gtPmNobnVtICsgISEoY2gtPmZsYWdzICYgTUlYRkxHX1NURVJFT0lOKSkgPDwgOCkgfCAoMSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9PVVQpKSwKKwkJCQkgICAgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlyZXR1cm4gMDsKKworCQkvKiB2YXJpb3VzIGZlYXR1cmUgdW5pdCBjb250cm9scyAqLworCWNhc2UgVk9MVU1FX0NPTlRST0w6CisJCWRhdGFbMF0gPSB2MTsKKwkJZGF0YVsxXSA9IHYxID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKKwkJCXJldHVybiAwOworCQlkYXRhWzBdID0gdjI7CisJCWRhdGFbMV0gPSB2MiA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBtcy0+aWZhY2UgfCAoY2gtPnVuaXRpZCA8PCA4KSwgZGF0YSwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCXJldHVybiAwOworICAgICAgICAgICAgICAgIAorCWNhc2UgQkFTU19DT05UUk9MOgorCWNhc2UgTUlEX0NPTlRST0w6CisJY2FzZSBUUkVCTEVfQ09OVFJPTDoKKwkJZGF0YVswXSA9IHYxID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKKwkJCXJldHVybiAwOworCQlkYXRhWzBdID0gdjIgPj4gODsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IChjaC0+Y2hudW0gKyAxKSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CisKKyBlcnI6CisJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogbWl4ZXIgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBjaCAldSBzZWxlY3RvciAldSBmYWlsZWRcbiIsIAorCQlkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBjaC0+dW5pdGlkLCBjaC0+Y2hudW0sIGNoLT5zZWxlY3Rvcik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9yZWNfc3JjKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtcy0+c3RhdGUtPnVzYmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHJldG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBpLCBqOworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKSB7CisJCWlmICghbXMtPmNoW2ldLnNsY3R1bml0aWQgfHwgKG1hc2sgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAwLCBtcy0+aWZhY2UgfCAobXMtPmNoW2ldLnNsY3R1bml0aWQgPDwgOCksICZidWYsIDEsIDEwMDApIDwgMCkgeworCQkJZXJyID0gLUVJTzsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHJlYWQgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBmYWlsZWRcbiIsIAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBtcy0+aWZhY2UsIG1zLT5jaFtpXS5zbGN0dW5pdGlkICYgMHhmZik7CisJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKGogPSBpOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKKwkJCWlmICgobXMtPmNoW2ldLnNsY3R1bml0aWQgXiBtcy0+Y2hbal0uc2xjdHVuaXRpZCkgJiAweGZmKQorCQkJCWNvbnRpbnVlOworCQkJbWFzayB8PSAxIDw8IGo7CisJCQlpZiAoYnVmID09IChtcy0+Y2hbal0uc2xjdHVuaXRpZCA+PiA4KSkKKwkJCQlyZXRtYXNrIHw9IDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWw7CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHJldG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JlY19zcmMoc3RydWN0IHVzYl9taXhlcmRldiAqbXMsIGludCBzcmNtYXNrKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtcy0+c3RhdGUtPnVzYmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHNtYXNrLCBibWFzazsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtcy0+bnVtY2g7IGkrKykgeworCQlpZiAoIW1zLT5jaFtpXS5zbGN0dW5pdGlkIHx8IChtYXNrICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgMCwgbXMtPmlmYWNlIHwgKG1zLT5jaFtpXS5zbGN0dW5pdGlkIDw8IDgpLCAmYnVmLCAxLCAxMDAwKSA8IDApIHsKKwkJCWVyciA9IC1FSU87CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZWxlY3RvciByZWFkIHJlcXVlc3QgZGV2aWNlICV1IGlmICV1IHVuaXQgJXUgZmFpbGVkXG4iLCAKKwkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbaV0uc2xjdHVuaXRpZCAmIDB4ZmYpOworCQkJY29udGludWU7CisJCX0KKwkJLyogZmlyc3QgZ2VuZXJhdGUgc21hc2sgKi8KKwkJc21hc2sgPSBibWFzayA9IDA7CisJCWZvciAoaiA9IGk7IGogPCBtcy0+bnVtY2g7IGorKykgeworCQkJaWYgKChtcy0+Y2hbaV0uc2xjdHVuaXRpZCBeIG1zLT5jaFtqXS5zbGN0dW5pdGlkKSAmIDB4ZmYpCisJCQkJY29udGludWU7CisJCQlzbWFzayB8PSAxIDw8IG1zLT5jaFtqXS5vc3NjaGFubmVsOworCQkJaWYgKGJ1ZiA9PSAobXMtPmNoW2pdLnNsY3R1bml0aWQgPj4gOCkpCisJCQkJYm1hc2sgfD0gMSA8PCBtcy0+Y2hbal0ub3NzY2hhbm5lbDsKKwkJCW1hc2sgfD0gMSA8PCBqOworCQl9CisJCS8qIGNoZWNrIGZvciBtdWx0aXBsZSBzZXQgc291cmNlcyAqLworCQlqID0gaHdlaWdodDMyKHNyY21hc2sgJiBzbWFzayk7CisJCWlmIChqID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKGogPiAxKQorCQkJc3JjbWFzayAmPSB+Ym1hc2s7CisJCWZvciAoaiA9IGk7IGogPCBtcy0+bnVtY2g7IGorKykgeworCQkJaWYgKChtcy0+Y2hbaV0uc2xjdHVuaXRpZCBeIG1zLT5jaFtqXS5zbGN0dW5pdGlkKSAmIDB4ZmYpCisJCQkJY29udGludWU7CisJCQlpZiAoIShzcmNtYXNrICYgKDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWwpKSkKKwkJCQljb250aW51ZTsKKwkJCWJ1ZiA9IG1zLT5jaFtqXS5zbGN0dW5pdGlkID4+IDg7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAwLCBtcy0+aWZhY2UgfCAobXMtPmNoW2pdLnNsY3R1bml0aWQgPDwgOCksICZidWYsIDEsIDEwMDApIDwgMCkgeworCQkJCWVyciA9IC1FSU87CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2VsZWN0b3Igd3JpdGUgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBmYWlsZWRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbal0uc2xjdHVuaXRpZCAmIDB4ZmYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJfQorCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggb3Blbl9zZW0gaG9sZCwgc28gdGhhdCBubyBuZXcgcHJvY2Vzc2VzCisgKiBsb29rIGF0IHRoZSBhdWRpbyBkZXZpY2UgdG8gYmUgZGVzdHJveWVkCisgKi8KKworc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOworCisJcy0+Y291bnQtLTsKKwlpZiAocy0+Y291bnQpIHsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuOworCX0KKwl1cCgmb3Blbl9zZW0pOworCXdha2VfdXAoJm9wZW5fd2FpdCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzLT5hdWRpb2xpc3QpKSB7CisJCWFzID0gbGlzdF9lbnRyeShzLT5hdWRpb2xpc3QubmV4dCwgc3RydWN0IHVzYl9hdWRpb2RldiwgbGlzdCk7CisJCWxpc3RfZGVsKCZhcy0+bGlzdCk7CisJCXVzYmluX3JlbGVhc2UoYXMpOworCQl1c2JvdXRfcmVsZWFzZShhcyk7CisJCWRtYWJ1Zl9yZWxlYXNlKCZhcy0+dXNiaW4uZG1hKTsKKwkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2JvdXQuZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMV0udXJiKTsKKwkJa2ZyZWUoYXMpOworCX0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnMtPm1peGVybGlzdCkpIHsKKwkJbXMgPSBsaXN0X2VudHJ5KHMtPm1peGVybGlzdC5uZXh0LCBzdHJ1Y3QgdXNiX21peGVyZGV2LCBsaXN0KTsKKwkJbGlzdF9kZWwoJm1zLT5saXN0KTsKKwkJa2ZyZWUobXMpOworCX0KKwlrZnJlZShzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfaW4oc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJdXNiaW5fc3RvcChhcyk7CisJcmV0dXJuIGRtYWJ1Zl9pbml0KCZhcy0+dXNiaW4uZG1hKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfb3V0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXVzYm91dF9zdG9wKGFzKTsKKwlyZXR1cm4gZG1hYnVmX2luaXQoJmFzLT51c2JvdXQuZG1hKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX29wZW5fbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IHVzYl9taXhlcmRldiAqbXM7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKworCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZhdWRpb2RldnMsIGF1ZGlvZGV2KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobXMsICZzLT5taXhlcmxpc3QsIGxpc3QpIHsKKwkJCWlmIChtcy0+ZGV2X21peGVyID09IG1pbm9yKQorCQkJCWdvdG8gbWl4ZXJfZm91bmQ7CisJCX0KKwl9CisJdXAoJm9wZW5fc2VtKTsKKwlyZXR1cm4gLUVOT0RFVjsKKworIG1peGVyX2ZvdW5kOgorCWlmICghcy0+dXNiZGV2KSB7CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBtczsKKwlzLT5jb3VudCsrOworCisJdXAoJm9wZW5fc2VtKTsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX3JlbGVhc2VfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zID0gKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKworCWxvY2tfa2VybmVsKCk7CisJcyA9IG1zLT5zdGF0ZTsKKwlkb3duKCZvcGVuX3NlbSk7CisJcmVsZWFzZShzKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX2lvY3RsX21peGRldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9taXhlcmRldiAqbXMgPSAoc3RydWN0IHVzYl9taXhlcmRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgaiwgdmFsOworCWludCBfX3VzZXIgKnVzZXJfYXJnID0gKGludCBfX3VzZXIgKilhcmc7CisKKwlpZiAoIW1zLT5zdGF0ZS0+dXNiZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKyAgCisJaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9JTkZPKSB7CisJCW1peGVyX2luZm8gaW5mbzsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJCXN0cm5jcHkoaW5mby5pZCwgIlVTQl9BVURJTyIsIHNpemVvZihpbmZvLmlkKSk7CisJCXN0cm5jcHkoaW5mby5uYW1lLCAiVVNCIEF1ZGlvIENsYXNzIERyaXZlciIsIHNpemVvZihpbmZvLm5hbWUpKTsKKwkJaW5mby5tb2RpZnlfY291bnRlciA9IG1zLT5tb2RjbnQ7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNtZCA9PSBTT1VORF9PTERfTUlYRVJfSU5GTykgeworCQlfb2xkX21peGVyX2luZm8gaW5mbzsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJCXN0cm5jcHkoaW5mby5pZCwgIlVTQl9BVURJTyIsIHNpemVvZihpbmZvLmlkKSk7CisJCXN0cm5jcHkoaW5mby5uYW1lLCAiVVNCIEF1ZGlvIENsYXNzIERyaXZlciIsIHNpemVvZihpbmZvLm5hbWUpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKQorCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgdXNlcl9hcmcpOworCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnTScgfHwgX0lPQ19TSVpFKGNtZCkgIT0gc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChfSU9DX0RJUihjbWQpID09IF9JT0NfUkVBRCkgeworCQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgeworCQljYXNlIFNPVU5EX01JWEVSX1JFQ1NSQzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHJlY29yZGluZyBzb3VyY2UgKi8KKwkJCXZhbCA9IGdldF9yZWNfc3JjKG1zKTsKKwkJCWlmICh2YWwgPCAwKQorCQkJCXJldHVybiB2YWw7CisJCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisKKwkJY2FzZSBTT1VORF9NSVhFUl9ERVZNQVNLOiAvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGRldmljZSAqLworCQkJZm9yICh2YWwgPSBpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKQorCQkJCXZhbCB8PSAxIDw8IG1zLT5jaFtpXS5vc3NjaGFubmVsOworCQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgdXNlcl9hcmcpOworCisJCWNhc2UgU09VTkRfTUlYRVJfUkVDTUFTSzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByZWNvcmRpbmcgc291cmNlICovCisJCQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspCisJCQkJaWYgKG1zLT5jaFtpXS5zbGN0dW5pdGlkKQorCQkJCQl2YWwgfD0gMSA8PCBtcy0+Y2hbaV0ub3NzY2hhbm5lbDsKKwkJCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKKworCQljYXNlIFNPVU5EX01JWEVSX1NURVJFT0RFVlM6IC8qIE1peGVyIGNoYW5uZWxzIHN1cHBvcnRpbmcgc3RlcmVvICovCisJCQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspCisJCQkJaWYgKG1zLT5jaFtpXS5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkKKwkJCQkJdmFsIHw9IDEgPDwgbXMtPmNoW2ldLm9zc2NoYW5uZWw7CisJCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisJCQkKKwkJY2FzZSBTT1VORF9NSVhFUl9DQVBTOgorCQkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX0NBUF9FWENMX0lOUFVULCB1c2VyX2FyZyk7CisKKwkJZGVmYXVsdDoKKwkJCWkgPSBfSU9DX05SKGNtZCk7CisJCQlpZiAoaSA+PSBTT1VORF9NSVhFUl9OUkRFVklDRVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlmb3IgKGogPSAwOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKKwkJCQlpZiAobXMtPmNoW2pdLm9zc2NoYW5uZWwgPT0gaSkgeworCQkJCQlyZXR1cm4gcHV0X3VzZXIobXMtPmNoW2pdLnZhbHVlLCB1c2VyX2FyZyk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKF9JT0NfRElSKGNtZCkgIT0gKF9JT0NfUkVBRHxfSU9DX1dSSVRFKSkgCisJCXJldHVybiAtRUlOVkFMOworCW1zLT5tb2RjbnQrKzsKKwlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgeworCWNhc2UgU09VTkRfTUlYRVJfUkVDU1JDOiAvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggcmVjb3JkaW5nIHNvdXJjZSAqLworCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIHNldF9yZWNfc3JjKG1zLCB2YWwpOworCisJZGVmYXVsdDoKKwkJaSA9IF9JT0NfTlIoY21kKTsKKwkJaWYgKGkgPj0gU09VTkRfTUlYRVJfTlJERVZJQ0VTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZvciAoaiA9IDA7IGogPCBtcy0+bnVtY2ggJiYgbXMtPmNoW2pdLm9zc2NoYW5uZWwgIT0gaTsgaisrKTsKKwkJaWYgKGogPj0gbXMtPm51bWNoKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAod3JtaXhlcihtcywgaiwgdmFsKSkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gcHV0X3VzZXIobXMtPmNoW2pdLnZhbHVlLCB1c2VyX2FyZyk7CisJfQorfQorCitzdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX21peGVyX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkuaW9jdGwgPQl1c2JfYXVkaW9faW9jdGxfbWl4ZGV2LAorCS5vcGVuID0JCXVzYl9hdWRpb19vcGVuX21peGRldiwKKwkucmVsZWFzZSA9CXVzYl9hdWRpb19yZWxlYXNlX21peGRldiwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGRyYWluX291dChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcywgaW50IG5vbmJsb2NrKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50LCB0bW87CisJCisJaWYgKGFzLT51c2JvdXQuZG1hLm1hcHBlZCB8fCAhYXMtPnVzYm91dC5kbWEucmVhZHkpCisJCXJldHVybiAwOworCXVzYm91dF9zdGFydChhcyk7CisJYWRkX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNvdW50ID0gYXMtPnVzYm91dC5kbWEuY291bnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjb3VudCA8PSAwKQorCQkJYnJlYWs7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQlpZiAobm9uYmxvY2spIHsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQl0bW8gPSAzICogSFogKiBjb3VudCAvIGFzLT51c2JvdXQuZG1hLnNyYXRlOworCQl0bW8gPj49IEFGTVRfQllURVNTSElGVChhcy0+dXNib3V0LmRtYS5mb3JtYXQpOworCQlpZiAoIXNjaGVkdWxlX3RpbWVvdXQodG1vICsgMSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ1c2JhdWRpbzogZG1hIHRpbWVkIG91dD8/XG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3NpemVfdCB1c2JfYXVkaW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzc2l6ZV90IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcHRyOworCWludCBjbnQsIGVycjsKKworCWlmIChhcy0+dXNiaW4uZG1hLm1hcHBlZCkKKwkJcmV0dXJuIC1FTlhJTzsKKwlpZiAoIWFzLT51c2Jpbi5kbWEucmVhZHkgJiYgKHJldCA9IHByb2dfZG1hYnVmX2luKGFzKSkpCisJCXJldHVybiByZXQ7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYWRkX3dhaXRfcXVldWUoJmFzLT51c2Jpbi5kbWEud2FpdCwgJndhaXQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXB0ciA9IGFzLT51c2Jpbi5kbWEucmRwdHI7CisJCWNudCA9IGFzLT51c2Jpbi5kbWEuY291bnQ7CisJCS8qIHNldCB0YXNrIHN0YXRlIGVhcmx5IHRvIGF2b2lkIHdha2V1cCByYWNlcyAqLworCQlpZiAoY250IDw9IDApCisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjbnQgPiBjb3VudCkKKwkJCWNudCA9IGNvdW50OworCQlpZiAoY250IDw9IDApIHsKKwkJCWlmICh1c2Jpbl9zdGFydChhcykpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRUFHQUlOOworCQkJCWJyZWFrOworCQkJfQorCQkJc2NoZWR1bGUoKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKGVyciA9IGRtYWJ1Zl9jb3B5b3V0X3VzZXIoJmFzLT51c2Jpbi5kbWEsIHB0ciwgYnVmZmVyLCBjbnQpKSkgeworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gZXJyOworCQkJYnJlYWs7CisJCX0KKwkJcHRyICs9IGNudDsKKwkJaWYgKHB0ciA+PSBhcy0+dXNiaW4uZG1hLmRtYXNpemUpCisJCQlwdHIgLT0gYXMtPnVzYmluLmRtYS5kbWFzaXplOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJYXMtPnVzYmluLmRtYS5yZHB0ciA9IHB0cjsKKwkJYXMtPnVzYmluLmRtYS5jb3VudCAtPSBjbnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNvdW50IC09IGNudDsKKwkJYnVmZmVyICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNiaW4uZG1hLndhaXQsICZ3YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB1c2JfYXVkaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3NpemVfdCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHB0cjsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfdGhyOworCWludCBjbnQsIGVycjsKKworCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpCisJCXJldHVybiAtRU5YSU87CisJaWYgKCFhcy0+dXNib3V0LmRtYS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkpCisJCXJldHVybiByZXQ7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlzdGFydF90aHIgPSAoYXMtPnVzYm91dC5kbWEuc3JhdGUgPDwgQUZNVF9CWVRFU1NISUZUKGFzLT51c2JvdXQuZG1hLmZvcm1hdCkpIC8gKDEwMDAgLyAoMyAqIERFU0NGUkFNRVMpKTsKKwlhZGRfd2FpdF9xdWV1ZSgmYXMtPnVzYm91dC5kbWEud2FpdCwgJndhaXQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKyNpZiAwCisJCXByaW50ayhLRVJOX0RFQlVHICJ1c2JfYXVkaW9fd3JpdGU6IGNvdW50ICV1IGRtYTogY291bnQgJXUgcmRwdHIgJXUgd3JwdHIgJXUgZG1hc2l6ZSAldSBmcmFnc2l6ZSAldSBmbGFncyAweCUwMnggdGFza3N0IDB4JWx4XG4iLAorCQkgICAgICAgY291bnQsIGFzLT51c2JvdXQuZG1hLmNvdW50LCBhcy0+dXNib3V0LmRtYS5yZHB0ciwgYXMtPnVzYm91dC5kbWEud3JwdHIsIGFzLT51c2JvdXQuZG1hLmRtYXNpemUsIGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLAorCQkgICAgICAgYXMtPnVzYm91dC5mbGFncywgY3VycmVudC0+c3RhdGUpOworI2VuZGlmCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPCAwKSB7CisJCQlhcy0+dXNib3V0LmRtYS5jb3VudCA9IDA7CisJCQlhcy0+dXNib3V0LmRtYS5yZHB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyOworCQl9CisJCXB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyOworCQljbnQgPSBhcy0+dXNib3V0LmRtYS5kbWFzaXplIC0gYXMtPnVzYm91dC5kbWEuY291bnQ7CisJCS8qIHNldCB0YXNrIHN0YXRlIGVhcmx5IHRvIGF2b2lkIHdha2V1cCByYWNlcyAqLworCQlpZiAoY250IDw9IDApCisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjbnQgPiBjb3VudCkKKwkJCWNudCA9IGNvdW50OworCQlpZiAoY250IDw9IDApIHsKKwkJCWlmICh1c2JvdXRfc3RhcnQoYXMpKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjaGVkdWxlKCk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKChlcnIgPSBkbWFidWZfY29weWluX3VzZXIoJmFzLT51c2JvdXQuZG1hLCBwdHIsIGJ1ZmZlciwgY250KSkpIHsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IGVycjsKKwkJCWJyZWFrOworCQl9CisJCXB0ciArPSBjbnQ7CisJCWlmIChwdHIgPj0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSkKKwkJCXB0ciAtPSBhcy0+dXNib3V0LmRtYS5kbWFzaXplOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJYXMtPnVzYm91dC5kbWEud3JwdHIgPSBwdHI7CisJCWFzLT51c2JvdXQuZG1hLmNvdW50ICs9IGNudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJY291bnQgLT0gY250OworCQlidWZmZXIgKz0gY250OworCQlyZXQgKz0gY250OworCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPj0gc3RhcnRfdGhyICYmIHVzYm91dF9zdGFydChhcykpIHsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxsZWQgd2l0aG91dCB0aGUga2VybmVsIGxvY2sgLSBmaW5lICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9hdWRpb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQlpZiAoIWFzLT51c2JvdXQuZG1hLnJlYWR5KQorCQkJcHJvZ19kbWFidWZfb3V0KGFzKTsKKwkJcG9sbF93YWl0KGZpbGUsICZhcy0+dXNib3V0LmRtYS53YWl0LCB3YWl0KTsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5KQorCQkJcHJvZ19kbWFidWZfaW4oYXMpOworCQlwb2xsX3dhaXQoZmlsZSwgJmFzLT51c2Jpbi5kbWEud2FpdCwgd2FpdCk7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCWlmIChhcy0+dXNiaW4uZG1hLmNvdW50ID49IChzaWduZWQpYXMtPnVzYmluLmRtYS5mcmFnc2l6ZSkKKwkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpIHsKKwkJCWlmIChhcy0+dXNib3V0LmRtYS5jb3VudCA+PSAoc2lnbmVkKWFzLT51c2JvdXQuZG1hLmZyYWdzaXplKSAKKwkJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCQl9IGVsc2UgeworCQkJaWYgKChzaWduZWQpYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSA+PSBhcy0+dXNib3V0LmRtYS5jb3VudCArIChzaWduZWQpYXMtPnVzYm91dC5kbWEuZnJhZ3NpemUpCisJCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHVzYl9hdWRpb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkbWFidWYgKmRiOworCWludCByZXQgPSAtRUlOVkFMOworCisJbG9ja19rZXJuZWwoKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7CisJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkgIT0gMCkKKwkJCWdvdG8gb3V0OworCQlkYiA9ICZhcy0+dXNib3V0LmRtYTsKKwl9IGVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB7CisJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfaW4oYXMpKSAhPSAwKQorCQkJZ290byBvdXQ7CisJCWRiID0gJmFzLT51c2Jpbi5kbWE7CisJfSBlbHNlCisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAodm1hLT52bV9wZ29mZiAhPSAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IGRtYWJ1Zl9tbWFwKHZtYSwgZGIsICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KTsKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2JfYXVkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcyA9IGFzLT5zdGF0ZTsKKwlpbnQgX191c2VyICp1c2VyX2FyZyA9IChpbnQgX191c2VyICopYXJnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYXVkaW9fYnVmX2luZm8gYWJpbmZvOworCWNvdW50X2luZm8gY2luZm87CisJaW50IHZhbCA9IDA7CisJaW50IHZhbDIsIG1hcHBlZCwgcmV0OworCisJaWYgKCFzLT51c2JkZXYpCisJCXJldHVybiAtRUlPOworCW1hcHBlZCA9ICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIGFzLT51c2JvdXQuZG1hLm1hcHBlZCkgfHwKKwkJKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBhcy0+dXNiaW4uZG1hLm1hcHBlZCk7CisjaWYgMAorCWlmIChhcmcpCisJCWdldF91c2VyKHZhbCwgKGludCAqKWFyZyk7CisJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1c2JfYXVkaW9faW9jdGwgY21kPSV4IGFyZz0lbHggKmFyZz0lZFxuIiwgY21kLCBhcmcsIHZhbCkKKyNlbmRpZgorCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPU1NfR0VUVkVSU0lPTjoKKwkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TWU5DOgorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCQlyZXR1cm4gZHJhaW5fb3V0KGFzLCAwLypmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyovKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfU0VURFVQTEVYOgorCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgorCQlyZXR1cm4gcHV0X3VzZXIoRFNQX0NBUF9EVVBMRVggfCBEU1BfQ0FQX1JFQUxUSU1FIHwgRFNQX0NBUF9UUklHR0VSIHwgCisJCQkJRFNQX0NBUF9NTUFQIHwgRFNQX0NBUF9CQVRDSCwgdXNlcl9hcmcpOworCisJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJCXVzYm91dF9zdG9wKGFzKTsKKwkJCWFzLT51c2JvdXQuZG1hLnJkcHRyID0gYXMtPnVzYm91dC5kbWEud3JwdHIgPSBhcy0+dXNib3V0LmRtYS5jb3VudCA9IGFzLT51c2JvdXQuZG1hLnRvdGFsX2J5dGVzID0gMDsKKwkJfQorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQkJdXNiaW5fc3RvcChhcyk7CisJCQlhcy0+dXNiaW4uZG1hLnJkcHRyID0gYXMtPnVzYmluLmRtYS53cnB0ciA9IGFzLT51c2Jpbi5kbWEuY291bnQgPSBhcy0+dXNiaW4uZG1hLnRvdGFsX2J5dGVzID0gMDsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9TUEVFRDoKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWwgPj0gMCkgeworCQkJaWYgKHZhbCA8IDQwMDApCisJCQkJdmFsID0gNDAwMDsKKwkJCWlmICh2YWwgPiAxMDAwMDApCisJCQkJdmFsID0gMTAwMDAwOworCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgQUZNVF9RVUVSWSwgdmFsKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZXR1cm4gcHV0X3VzZXIoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gCisJCQkJYXMtPnVzYmluLmRtYS5zcmF0ZSA6IGFzLT51c2JvdXQuZG1hLnNyYXRlLAorCQkJCXVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TVEVSRU86CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCWlmICh2YWwpCisJCQl2YWwyIHw9IEFGTVRfU1RFUkVPOworCQllbHNlCisJCQl2YWwyICY9IH5BRk1UX1NURVJFTzsKKwkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsMiwgMCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfQ0hBTk5FTFM6CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodmFsICE9IDApIHsKKwkJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJCWlmICh2YWwgPT0gMSkKKwkJCQl2YWwyICY9IH5BRk1UX1NURVJFTzsKKwkJCWVsc2UKKwkJCQl2YWwyIHw9IEFGTVRfU1RFUkVPOworCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsMiwgMCkpCisJCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OworCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JU1NURVJFTyh2YWwyKSA/IDIgOiAxLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfR0VURk1UUzogLyogUmV0dXJucyBhIG1hc2sgKi8KKwkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTggfCBBRk1UX1UxNl9MRSB8IEFGTVRfVTE2X0JFIHwKKwkJCQlBRk1UX1M4IHwgQUZNVF9TMTZfTEUgfCBBRk1UX1MxNl9CRSwgdXNlcl9hcmcpOworCisJY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogLyogU2VsZWN0cyBPTkUgZm10Ki8KKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWwgIT0gQUZNVF9RVUVSWSkgeworCQkJaWYgKGh3ZWlnaHQzMih2YWwpICE9IDEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoISh2YWwgJiAoQUZNVF9VOCB8IEFGTVRfVTE2X0xFIHwgQUZNVF9VMTZfQkUgfAorCQkJCSAgICAgQUZNVF9TOCB8IEFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJCXZhbCB8PSB2YWwyICYgQUZNVF9TVEVSRU87CisJCQlpZiAoc2V0X2Zvcm1hdChhcywgZmlsZS0+Zl9tb2RlLCB2YWwsIDApKQorCQkJCXJldHVybiAtRUlPOworCQl9CisJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJcmV0dXJuIHB1dF91c2VyKHZhbDIgJiB+QUZNVF9TVEVSRU8sIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9QT1NUOgorCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9HRVRUUklHR0VSOgorCQl2YWwgPSAwOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCAmJiBhcy0+dXNiaW4uZmxhZ3MgJiBGTEdfUlVOTklORykgCisJCQl2YWwgfD0gUENNX0VOQUJMRV9JTlBVVDsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmIGFzLT51c2JvdXQuZmxhZ3MgJiBGTEdfUlVOTklORykgCisJCQl2YWwgfD0gUENNX0VOQUJMRV9PVVRQVVQ7CisJCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TRVRUUklHR0VSOgorCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJCWlmICh2YWwgJiBQQ01fRU5BQkxFX0lOUFVUKSB7CisJCQkJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQorCQkJCQlyZXR1cm4gcmV0OworCQkJCWlmICh1c2Jpbl9zdGFydChhcykpCisJCQkJCXJldHVybiAtRU5PREVWOworCQkJfSBlbHNlCisJCQkJdXNiaW5fc3RvcChhcyk7CisJCX0KKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCQlpZiAodmFsICYgUENNX0VOQUJMRV9PVVRQVVQpIHsKKwkJCQlpZiAoIWFzLT51c2JvdXQuZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9vdXQoYXMpKSkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlpZiAodXNib3V0X3N0YXJ0KGFzKSkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9IGVsc2UKKwkJCQl1c2JvdXRfc3RvcChhcyk7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUT1NQQUNFOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCEoYXMtPnVzYm91dC5mbGFncyAmIEZMR19SVU5OSU5HKSAmJiAodmFsID0gcHJvZ19kbWFidWZfb3V0KGFzKSkgIT0gMCkKKwkJCXJldHVybiB2YWw7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlhYmluZm8uZnJhZ3NpemUgPSBhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZTsKKwkJYWJpbmZvLmJ5dGVzID0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSAtIGFzLT51c2JvdXQuZG1hLmNvdW50OworCQlhYmluZm8uZnJhZ3N0b3RhbCA9IGFzLT51c2JvdXQuZG1hLm51bWZyYWc7CisJCWFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gYXMtPnVzYm91dC5kbWEuZnJhZ3NoaWZ0OyAgICAgIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmFiaW5mbywgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUSVNQQUNFOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIShhcy0+dXNiaW4uZmxhZ3MgJiBGTEdfUlVOTklORykgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2luKGFzKSkgIT0gMCkKKwkJCXJldHVybiB2YWw7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlhYmluZm8uZnJhZ3NpemUgPSBhcy0+dXNiaW4uZG1hLmZyYWdzaXplOworCQlhYmluZm8uYnl0ZXMgPSBhcy0+dXNiaW4uZG1hLmNvdW50OworCQlhYmluZm8uZnJhZ3N0b3RhbCA9IGFzLT51c2Jpbi5kbWEubnVtZnJhZzsKKwkJYWJpbmZvLmZyYWdtZW50cyA9IGFiaW5mby5ieXRlcyA+PiBhcy0+dXNiaW4uZG1hLmZyYWdzaGlmdDsgICAgICAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZhYmluZm8sIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOworCQkKKwljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGFzLT51c2JvdXQuZG1hLmNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfR0VUSVBUUjoKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNpbmZvLmJ5dGVzID0gYXMtPnVzYmluLmRtYS50b3RhbF9ieXRlczsKKwkJY2luZm8uYmxvY2tzID0gYXMtPnVzYmluLmRtYS5jb3VudCA+PiBhcy0+dXNiaW4uZG1hLmZyYWdzaGlmdDsKKwkJY2luZm8ucHRyID0gYXMtPnVzYmluLmRtYS53cnB0cjsKKwkJaWYgKGFzLT51c2Jpbi5kbWEubWFwcGVkKQorCQkJYXMtPnVzYmluLmRtYS5jb3VudCAmPSBhcy0+dXNiaW4uZG1hLmZyYWdzaXplLTE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX0dFVE9QVFI6CisJCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJY2luZm8uYnl0ZXMgPSBhcy0+dXNib3V0LmRtYS50b3RhbF9ieXRlczsKKwkJY2luZm8uYmxvY2tzID0gYXMtPnVzYm91dC5kbWEuY291bnQgPj4gYXMtPnVzYm91dC5kbWEuZnJhZ3NoaWZ0OworCQljaW5mby5wdHIgPSBhcy0+dXNib3V0LmRtYS5yZHB0cjsKKwkJaWYgKGFzLT51c2JvdXQuZG1hLm1hcHBlZCkKKwkJCWFzLT51c2JvdXQuZG1hLmNvdW50ICY9IGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLTE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9vdXQoYXMpKSkKKwkJCQlyZXR1cm4gdmFsOworCQkJcmV0dXJuIHB1dF91c2VyKGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLCB1c2VyX2FyZyk7CisJCX0KKwkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQorCQkJcmV0dXJuIHZhbDsKKwkJcmV0dXJuIHB1dF91c2VyKGFzLT51c2Jpbi5kbWEuZnJhZ3NpemUsIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDoKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCQlhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKKwkJCWFzLT51c2Jpbi5kbWEub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKKwkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA8IDQpCisJCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSA0OworCQkJaWYgKGFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID4gMTUpCisJCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSAxNTsKKwkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzIDwgNCkKKwkJCQlhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzID0gNDsKKwkJfQorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKKwkJCWFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzID0gKHZhbCA+PiAxNikgJiAweGZmZmY7CisJCQlpZiAoYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0IDwgNCkKKwkJCQlhcy0+dXNib3V0LmRtYS5vc3NmcmFnc2hpZnQgPSA0OworCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA+IDE1KQorCQkJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IDE1OworCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzIDwgNCkKKwkJCQlhcy0+dXNib3V0LmRtYS5vc3NtYXhmcmFncyA9IDQ7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfU1VCRElWSURFOgorCQlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgYXMtPnVzYmluLmRtYS5zdWJkaXZpc2lvbikgfHwKKwkJICAgIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJiBhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWwgIT0gMSAmJiB2YWwgIT0gMiAmJiB2YWwgIT0gNCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKKwkJCWFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24gPSB2YWw7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJCWFzLT51c2JvdXQuZG1hLnN1YmRpdmlzaW9uID0gdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgU09VTkRfUENNX1JFQURfUkFURToKKwkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IAorCQkJCWFzLT51c2Jpbi5kbWEuc3JhdGUgOiBhcy0+dXNib3V0LmRtYS5zcmF0ZSwKKwkJCQl1c2VyX2FyZyk7CisKKwljYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgorCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCXJldHVybiBwdXRfdXNlcihBRk1UX0lTU1RFUkVPKHZhbDIpID8gMiA6IDEsIHVzZXJfYXJnKTsKKworCWNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKKwkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OworCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JUzE2QklUKHZhbDIpID8gMTYgOiA4LCB1c2VyX2FyZyk7CisKKwljYXNlIFNPVU5EX1BDTV9XUklURV9GSUxURVI6CisJY2FzZSBTTkRDVExfRFNQX1NFVFNZTkNSTzoKKwljYXNlIFNPVU5EX1BDTV9SRUFEX0ZJTFRFUjoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1c2JfYXVkaW9faW9jdGwgLSBubyBjb21tYW5kIGZvdW5kXG4iKSk7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCB1c2JfYXVkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisKKwlmb3IgKDs7KSB7CisJCWRvd24oJm9wZW5fc2VtKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmYXVkaW9kZXZzLCBhdWRpb2RldikgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnMtPmF1ZGlvbGlzdCwgbGlzdCkgeworCQkJCWlmICghKChhcy0+ZGV2X2F1ZGlvIF4gbWlub3IpICYgfjB4ZikpCisJCQkJCWdvdG8gZGV2aWNlX2ZvdW5kOworCQkJfQorCQl9CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCisJZGV2aWNlX2ZvdW5kOgorCQlpZiAoIXMtPnVzYmRldikgeworCQkJdXAoJm9wZW5fc2VtKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLworCQlpZiAoIShhcy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSkKKwkJCWJyZWFrOworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXVwKCZvcGVuX3NlbSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJYWRkX3dhaXRfcXVldWUoJm9wZW5fd2FpdCwgJndhaXQpOworCQl1cCgmb3Blbl9zZW0pOworCQlzY2hlZHVsZSgpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZvcGVuX3dhaXQsICZ3YWl0KTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCWFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID0gYXMtPnVzYmluLmRtYS5vc3NtYXhmcmFncyA9IGFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24gPSAwOworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0ID0gYXMtPnVzYm91dC5kbWEub3NzbWF4ZnJhZ3MgPSBhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbiA9IDA7CisJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgKChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikgPyBBRk1UX1MxNl9MRSA6IEFGTVRfVTggLyogQUZNVF9VTEFXICovLCA4MDAwKSkgeworCQl1cCgmb3Blbl9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYXM7CisJYXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKKwlzLT5jb3VudCsrOworCXVwKCZvcGVuX3NlbSk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHVzYl9hdWRpb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCisJbG9ja19rZXJuZWwoKTsKKwlzID0gYXMtPnN0YXRlOworCWRldiA9IHMtPnVzYmRldjsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCWRyYWluX291dChhcywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCWRvd24oJm9wZW5fc2VtKTsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJdXNib3V0X3N0b3AoYXMpOworCQlpZiAoZGV2ICYmIGFzLT51c2JvdXQuaW50ZXJmYWNlID49IDApCisJCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFzLT51c2JvdXQuaW50ZXJmYWNlLCAwKTsKKwkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2JvdXQuZG1hKTsKKwkJdXNib3V0X3JlbGVhc2UoYXMpOworCX0KKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQl1c2Jpbl9zdG9wKGFzKTsKKwkJaWYgKGRldiAmJiBhcy0+dXNiaW4uaW50ZXJmYWNlID49IDApCisJCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFzLT51c2Jpbi5pbnRlcmZhY2UsIDApOworCQlkbWFidWZfcmVsZWFzZSgmYXMtPnVzYmluLmRtYSk7CisJCXVzYmluX3JlbGVhc2UoYXMpOworCX0KKwlhcy0+b3Blbl9tb2RlICY9ICh+ZmlsZS0+Zl9tb2RlKSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKKwlyZWxlYXNlKHMpOworCXdha2VfdXAoJm9wZW5fd2FpdCk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2F1ZGlvX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkucmVhZCA9CQl1c2JfYXVkaW9fcmVhZCwKKwkud3JpdGUgPQl1c2JfYXVkaW9fd3JpdGUsCisJLnBvbGwgPQkJdXNiX2F1ZGlvX3BvbGwsCisJLmlvY3RsID0JdXNiX2F1ZGlvX2lvY3RsLAorCS5tbWFwID0JCXVzYl9hdWRpb19tbWFwLAorCS5vcGVuID0JCXVzYl9hdWRpb19vcGVuLAorCS5yZWxlYXNlID0JdXNiX2F1ZGlvX3JlbGVhc2UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB1c2JfYXVkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYXVkaW9faWRzIFtdID0geworICAgIHsgLm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpLAorICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IDF9LAorICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9hdWRpb19pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2F1ZGlvX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiYXVkaW8iLAorCS5wcm9iZSA9CXVzYl9hdWRpb19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9hdWRpb19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9hdWRpb19pZHMsCit9OworCitzdGF0aWMgdm9pZCAqZmluZF9kZXNjcmlwdG9yKHZvaWQgKmRlc2NzdGFydCwgdW5zaWduZWQgaW50IGRlc2NsZW4sIHZvaWQgKmFmdGVyLCAKKwkJCSAgICAgdTggZHR5cGUsIGludCBpZmFjZSwgaW50IGFsdHNldHRpbmcpCit7CisJdTggKnAsICplbmQsICpuZXh0OworCWludCBpZmMgPSAtMSwgYXMgPSAtMTsKKworCXAgPSBkZXNjc3RhcnQ7CisJZW5kID0gcCArIGRlc2NsZW47CisJZm9yICg7IHAgPCBlbmQ7KSB7CisJCWlmIChwWzBdIDwgMikKKwkJCXJldHVybiBOVUxMOworCQluZXh0ID0gcCArIHBbMF07CisJCWlmIChuZXh0ID4gZW5kKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChwWzFdID09IFVTQl9EVF9JTlRFUkZBQ0UpIHsKKwkJCS8qIG1pbmltdW0gbGVuZ3RoIG9mIGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJCQlpZiAocFswXSA8IDkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZmMgPSBwWzJdOworCQkJYXMgPSBwWzNdOworCQl9CisJCWlmIChwWzFdID09IGR0eXBlICYmICghYWZ0ZXIgfHwgKHZvaWQgKilwID4gYWZ0ZXIpICYmCisJCSAgICAoaWZhY2UgPT0gLTEgfHwgaWZhY2UgPT0gaWZjKSAmJiAoYWx0c2V0dGluZyA9PSAtMSB8fCBhbHRzZXR0aW5nID09IGFzKSkgeworCQkJcmV0dXJuIHA7CisJCX0KKwkJcCA9IG5leHQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKHZvaWQgKmRlc2NzdGFydCwgdW5zaWduZWQgaW50IGRlc2NsZW4sIHZvaWQgKmFmdGVyLCB1OCBkc3VidHlwZSwgaW50IGlmYWNlLCBpbnQgYWx0c2V0dGluZykKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCisJcCA9IGZpbmRfZGVzY3JpcHRvcihkZXNjc3RhcnQsIGRlc2NsZW4sIGFmdGVyLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0c2V0dGluZyk7CisJd2hpbGUgKHApIHsKKwkJaWYgKHBbMF0gPj0gMyAmJiBwWzJdID09IGRzdWJ0eXBlKQorCQkJcmV0dXJuIHA7CisJCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0c2V0dGluZyk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZmluZF9hdWRpb2NvbnRyb2xfdW5pdCh2b2lkICpkZXNjc3RhcnQsIHVuc2lnbmVkIGludCBkZXNjbGVuLCB2b2lkICphZnRlciwgdTggdW5pdCwgaW50IGlmYWNlKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlwID0gZmluZF9kZXNjcmlwdG9yKGRlc2NzdGFydCwgZGVzY2xlbiwgYWZ0ZXIsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIGlmYWNlLCAtMSk7CisJd2hpbGUgKHApIHsKKwkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IElOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gRVhURU5TSU9OX1VOSVQgJiYgcFszXSA9PSB1bml0KQorCQkJcmV0dXJuIHA7CisJCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgLTEpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnMsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IGFzaWZpbiwgaW50IGFzaWZvdXQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHMtPnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphczsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOworCXVuc2lnbmVkIGNoYXIgKmZtdCwgKmNzZXA7CisJdW5zaWduZWQgaW50IGksIGosIGssIGZvcm1hdCwgaWR4OworCisJaWYgKCEoYXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2F1ZGlvZGV2KSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm47CisJbWVtc2V0KGFzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9hdWRpb2RldikpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFzLT51c2Jpbi5kbWEud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYXMtPnVzYm91dC5kbWEud2FpdCk7CisJc3Bpbl9sb2NrX2luaXQoJmFzLT5sb2NrKTsKKwlhcy0+dXNiaW4uZHVyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNiaW4uZHVyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNiaW4uc3VyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNiaW4uc3VyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNib3V0LmR1cmJbMF0udXJiID0gdXNiX2FsbG9jX3VyYiAoREVTQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYm91dC5kdXJiWzFdLnVyYiA9IHVzYl9hbGxvY191cmIgKERFU0NGUkFNRVMsIEdGUF9LRVJORUwpOworCWFzLT51c2JvdXQuc3VyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNib3V0LnN1cmJbMV0udXJiID0gdXNiX2FsbG9jX3VyYiAoU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJaWYgKCghYXMtPnVzYmluLmR1cmJbMF0udXJiKSB8fAorCSAgICAoIWFzLT51c2Jpbi5kdXJiWzFdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNiaW4uc3VyYlswXS51cmIpIHx8CisJICAgICghYXMtPnVzYmluLnN1cmJbMV0udXJiKSB8fAorCSAgICAoIWFzLT51c2JvdXQuZHVyYlswXS51cmIpIHx8CisJICAgICghYXMtPnVzYm91dC5kdXJiWzFdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNib3V0LnN1cmJbMF0udXJiKSB8fAorCSAgICAoIWFzLT51c2JvdXQuc3VyYlsxXS51cmIpKSB7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuOworCX0KKwlhcy0+c3RhdGUgPSBzOworCWFzLT51c2Jpbi5pbnRlcmZhY2UgPSBhc2lmaW47CisJYXMtPnVzYm91dC5pbnRlcmZhY2UgPSBhc2lmb3V0OworCS8qIHNlYXJjaCBmb3IgaW5wdXQgZm9ybWF0cyAqLworCWlmIChhc2lmaW4gPj0gMCkgeworCQlhcy0+dXNiaW4uZmxhZ3MgPSBGTEdfQ09OTkVDVEVEOworCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGFzaWZpbik7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpZHgrKykgeworCQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1tpZHhdOworCQkJaSA9IGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCQlpZiAoYWx0cy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8IGFsdHMtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDIpCisJCQkJY29udGludWU7CisJCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMSkgeworCQkJCWlmIChpICE9IDApIHsgIC8qIGFsdHNldHRpbmcgMCBoYXMgbm8gZW5kcG9pbnRzIChTZWN0aW9uIEIuMy40LjEpICovCisJCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBkb2VzIG5vdCBoYXZlIGFuIGVuZHBvaW50XG4iLCAKKwkJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxIHx8CisJCQkgICAgIShhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBmaXJzdCBlbmRwb2ludCBub3QgaXNvY2hyb25vdXMgaW5cbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgQVNfR0VORVJBTCwgYXNpZmluLCBpKTsKKwkJCWlmICghZm10KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IEZPUk1BVF9UWVBFIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzBdIDwgNyB8fCBmbXRbNl0gIT0gMCB8fCAoZm10WzVdICE9IDEgJiYgZm10WzVdICE9IDIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmb3JtYXQgPSAoZm10WzVdID09IDIpID8gKEFGTVRfVTE2X0xFIHwgQUZNVF9VOCkgOiAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgRk9STUFUX1RZUEUsIGFzaWZpbiwgaSk7CisJCQlpZiAoIWZtdCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGZtdFswXSA8IDgrMyooZm10WzddID8gZm10WzddIDogMikgfHwgZm10WzNdICE9IDEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3Qgc3VwcG9ydGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzRdIDwgMSB8fCBmbXRbNF0gPiAyIHx8IGZtdFs1XSA8IDEgfHwgZm10WzVdID4gMikgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSB1bnN1cHBvcnRlZCBjaGFubmVscyAldSBmcmFtZXNpemUgJXVcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpLCBmbXRbNF0sIGZtdFs1XSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQljc2VwID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBVU0JfRFRfQ1NfRU5EUE9JTlQsIGFzaWZpbiwgaSk7CisJCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBFUF9HRU5FUkFMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IG5vIG9yIGludmFsaWQgY2xhc3Mgc3BlY2lmaWMgZW5kcG9pbnQgZGVzY3JpcHRvclxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGFzLT5udW1mbXRpbiA+PSBNQVhGT1JNQVRTKQorCQkJCWNvbnRpbnVlOworCQkJZnAgPSAmYXMtPmZtdGluW2FzLT5udW1mbXRpbisrXTsKKwkJCWlmIChmbXRbNV0gPT0gMikKKwkJCQlmb3JtYXQgJj0gKEFGTVRfVTE2X0xFIHwgQUZNVF9TMTZfTEUpOworCQkJZWxzZQorCQkJCWZvcm1hdCAmPSAoQUZNVF9VOCB8IEFGTVRfUzgpOworCQkJaWYgKGZtdFs0XSA9PSAyKQorCQkJCWZvcm1hdCB8PSBBRk1UX1NURVJFTzsKKwkJCWZwLT5mb3JtYXQgPSBmb3JtYXQ7CisJCQlmcC0+YWx0c2V0dGluZyA9IGk7CisJCQlmcC0+c3JhdGVsbyA9IGZwLT5zcmF0ZWhpID0gZm10WzhdIHwgKGZtdFs5XSA8PCA4KSB8IChmbXRbMTBdIDw8IDE2KTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBpbnB1dCBzYW1wbGUgcmF0ZSAldVxuIiwgZnAtPnNyYXRlbG8pOworCQkJZm9yIChqID0gZm10WzddID8gKGZtdFs3XS0xKSA6IDE7IGogPiAwOyBqLS0pIHsKKwkJCQlrID0gZm10WzgrMypqXSB8IChmbXRbOSszKmpdIDw8IDgpIHwgKGZtdFsxMCszKmpdIDw8IDE2KTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdmFsaWQgaW5wdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGspOworCQkJCWlmIChrID4gZnAtPnNyYXRlaGkpCisJCQkJCWZwLT5zcmF0ZWhpID0gazsKKwkJCQlpZiAoayA8IGZwLT5zcmF0ZWxvKQorCQkJCQlmcC0+c3JhdGVsbyA9IGs7CisJCQl9CisJCQlmcC0+YXR0cmlidXRlcyA9IGNzZXBbM107CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1OiBmb3JtYXQgMHglMDh4IHNyYXRlbG8gJXUgc3JhdGVoaSAldSBhdHRyaWJ1dGVzIDB4JTAyeFxuIiwgCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSwgZnAtPmZvcm1hdCwgZnAtPnNyYXRlbG8sIGZwLT5zcmF0ZWhpLCBmcC0+YXR0cmlidXRlcyk7CisJCX0KKwl9CisJLyogc2VhcmNoIGZvciBvdXRwdXQgZm9ybWF0cyAqLworCWlmIChhc2lmb3V0ID49IDApIHsKKwkJYXMtPnVzYm91dC5mbGFncyA9IEZMR19DT05ORUNURUQ7CisJCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgYXNpZm91dCk7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpZHgrKykgeworCQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1tpZHhdOworCQkJaSA9IGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCQlpZiAoYWx0cy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8IGFsdHMtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDIpCisJCQkJY29udGludWU7CisJCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMSkgeworCQkJCS8qIGFsdHNldHRpbmcgMCBzaG91bGQgbmV2ZXIgaGF2ZSBpc28gRVBzICovCisJCQkJaWYgKGkgIT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZG9lcyBub3QgaGF2ZSBhbiBlbmRwb2ludFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxIHx8CisJCQkgICAgKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4ODApKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZpcnN0IGVuZHBvaW50IG5vdCBpc29jaHJvbm91cyBvdXRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBTZWUgVVNCIGF1ZGlvIGZvcm1hdHMgbWFudWFsLCBzZWN0aW9uIDIgKi8KKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgQVNfR0VORVJBTCwgYXNpZm91dCwgaSk7CisJCQlpZiAoIWZtdCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChmbXRbMF0gPCA3IHx8IGZtdFs2XSAhPSAwIHx8IChmbXRbNV0gIT0gMSAmJiBmbXRbNV0gIT0gMikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmb3JtYXQgPSAoZm10WzVdID09IDIpID8gKEFGTVRfVTE2X0xFIHwgQUZNVF9VOCkgOiAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKKwkJCS8qIERhbGxhcyBEUzQyMDEgd29ya2Fyb3VuZCAqLworCQkJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNGZhICYmIAorCQkJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NDIwMSkKKwkJCQlmb3JtYXQgPSAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgRk9STUFUX1RZUEUsIGFzaWZvdXQsIGkpOworCQkJaWYgKCFmbXQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzBdIDwgOCszKihmbXRbN10gPyBmbXRbN10gOiAyKSB8fCBmbXRbM10gIT0gMSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBzdXBwb3J0ZWRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzRdIDwgMSB8fCBmbXRbNF0gPiAyIHx8IGZtdFs1XSA8IDEgfHwgZm10WzVdID4gMikgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSB1bnN1cHBvcnRlZCBjaGFubmVscyAldSBmcmFtZXNpemUgJXVcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSwgZm10WzRdLCBmbXRbNV0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3NlcCA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgVVNCX0RUX0NTX0VORFBPSU5ULCBhc2lmb3V0LCBpKTsKKwkJCWlmICghY3NlcCB8fCBjc2VwWzBdIDwgNyB8fCBjc2VwWzJdICE9IEVQX0dFTkVSQUwpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgbm8gb3IgaW52YWxpZCBjbGFzcyBzcGVjaWZpYyBlbmRwb2ludCBkZXNjcmlwdG9yXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGFzLT5udW1mbXRvdXQgPj0gTUFYRk9STUFUUykKKwkJCQljb250aW51ZTsKKwkJCWZwID0gJmFzLT5mbXRvdXRbYXMtPm51bWZtdG91dCsrXTsKKwkJCWlmIChmbXRbNV0gPT0gMikKKwkJCQlmb3JtYXQgJj0gKEFGTVRfVTE2X0xFIHwgQUZNVF9TMTZfTEUpOworCQkJZWxzZQorCQkJCWZvcm1hdCAmPSAoQUZNVF9VOCB8IEFGTVRfUzgpOworCQkJaWYgKGZtdFs0XSA9PSAyKQorCQkJCWZvcm1hdCB8PSBBRk1UX1NURVJFTzsKKwkJCWZwLT5mb3JtYXQgPSBmb3JtYXQ7CisJCQlmcC0+YWx0c2V0dGluZyA9IGk7CisJCQlmcC0+c3JhdGVsbyA9IGZwLT5zcmF0ZWhpID0gZm10WzhdIHwgKGZtdFs5XSA8PCA4KSB8IChmbXRbMTBdIDw8IDE2KTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBvdXRwdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGZwLT5zcmF0ZWxvKTsKKwkJCWZvciAoaiA9IGZtdFs3XSA/IChmbXRbN10tMSkgOiAxOyBqID4gMDsgai0tKSB7CisJCQkJayA9IGZtdFs4KzMqal0gfCAoZm10WzkrMypqXSA8PCA4KSB8IChmbXRbMTArMypqXSA8PCAxNik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHZhbGlkIG91dHB1dCBzYW1wbGUgcmF0ZSAldVxuIiwgayk7CisJCQkJaWYgKGsgPiBmcC0+c3JhdGVoaSkKKwkJCQkJZnAtPnNyYXRlaGkgPSBrOworCQkJCWlmIChrIDwgZnAtPnNyYXRlbG8pCisJCQkJCWZwLT5zcmF0ZWxvID0gazsKKwkJCX0KKwkJCWZwLT5hdHRyaWJ1dGVzID0gY3NlcFszXTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXU6IGZvcm1hdCAweCUwOHggc3JhdGVsbyAldSBzcmF0ZWhpICV1IGF0dHJpYnV0ZXMgMHglMDJ4XG4iLCAKKwkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSwgZnAtPmZvcm1hdCwgZnAtPnNyYXRlbG8sIGZwLT5zcmF0ZWhpLCBmcC0+YXR0cmlidXRlcyk7CisJCX0KKwl9CisJaWYgKGFzLT5udW1mbXRpbiA9PSAwICYmIGFzLT5udW1mbXRvdXQgPT0gMCkgeworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlsxXS51cmIpOworCQlrZnJlZShhcyk7CisJCXJldHVybjsKKwl9CisJaWYgKChhcy0+ZGV2X2F1ZGlvID0gcmVnaXN0ZXJfc291bmRfZHNwKCZ1c2JfYXVkaW9fZm9wcywgLTEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHJlZ2lzdGVyIGRzcFxuIik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogcmVnaXN0ZXJlZCBkc3AgMTQsJWRcbiIsIGFzLT5kZXZfYXVkaW8pOworCS8qIGV2ZXJ5dGhpbmcgc3VjY2Vzc2Z1bCAqLworCWxpc3RfYWRkX3RhaWwoJmFzLT5saXN0LCAmcy0+YXVkaW9saXN0KTsKK30KKworc3RydWN0IGNvbnNtaXhzdGF0ZSB7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGJ1ZmxlbjsKKwl1bnNpZ25lZCBpbnQgY3RybGlmOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgbWl4Y2hbU09VTkRfTUlYRVJfTlJERVZJQ0VTXTsKKwl1bnNpZ25lZCBpbnQgbnJtaXhjaDsKKwl1bnNpZ25lZCBpbnQgbWl4Y2htYXNrOworCXVuc2lnbmVkIGxvbmcgdW5pdGJpdG1hcFszMi9zaXplb2YodW5zaWduZWQgbG9uZyldOworCS8qIHJldHVybiB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnJjaGFubmVsczsKKwl1bnNpZ25lZCBpbnQgdGVybXR5cGU7CisJdW5zaWduZWQgaW50IGNoY29uZmlnOworfTsKKworc3RhdGljIHN0cnVjdCBtaXhlcmNoYW5uZWwgKmdldG1peGNoYW5uZWwoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBucikKK3sKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsICpjOworCisJaWYgKG5yID49IFNPVU5EX01JWEVSX05SREVWSUNFUykgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBpbnZhbGlkIE9TUyBtaXhlciBjaGFubmVsICV1XG4iLCBucik7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoIShzdGF0ZS0+bWl4Y2htYXNrICYgKDEgPDwgbnIpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JhdWRpbzogT1NTIG1peGVyIGNoYW5uZWwgJXUgYWxyZWFkeSBpbiB1c2VcbiIsIG5yKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWMgPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoKytdOworCWMtPm9zc2NoYW5uZWwgPSBucjsKKwlzdGF0ZS0+bWl4Y2htYXNrICY9IH4oMSA8PCBucik7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0dm9sY2hhbm5lbChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdTsKKworCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAwMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1ZPTFVNRSkpCisJCXJldHVybiBTT1VORF9NSVhFUl9WT0xVTUU7CisJaWYgKChzdGF0ZS0+dGVybXR5cGUgJiAweGZmMDApID09IDB4MDEwMCkgeworCQlpZiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfUENNKQorCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BDTTsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX0FMVFBDTSkKKwkJCXJldHVybiBTT1VORF9NSVhFUl9BTFRQQ007CisJfQorCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAyMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX01JQykpCisJCXJldHVybiBTT1VORF9NSVhFUl9NSUM7CisJaWYgKChzdGF0ZS0+dGVybXR5cGUgJiAweGZmMDApID09IDB4MDMwMCAmJiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfU1BFQUtFUikpCisJCXJldHVybiBTT1VORF9NSVhFUl9TUEVBS0VSOworCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDA1MDApIHsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BIT05FSU4pCisJCQlyZXR1cm4gU09VTkRfTUlYRVJfUEhPTkVJTjsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BIT05FT1VUKQorCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BIT05FT1VUOworCX0KKwlpZiAoc3RhdGUtPnRlcm10eXBlID49IDB4NzEwICYmIHN0YXRlLT50ZXJtdHlwZSA8PSAweDcxMSAmJiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfUkFESU8pKQorCQlyZXR1cm4gU09VTkRfTUlYRVJfUkFESU87CisJaWYgKHN0YXRlLT50ZXJtdHlwZSA+PSAweDcwOSAmJiBzdGF0ZS0+dGVybXR5cGUgPD0gMHg3MGYgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1ZJREVPKSkKKwkJcmV0dXJuIFNPVU5EX01JWEVSX1ZJREVPOworCXUgPSBmZnMoc3RhdGUtPm1peGNobWFzayAmIChTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX0NEIHwgU09VTkRfTUFTS19MSU5FMSB8IFNPVU5EX01BU0tfTElORTIgfCBTT1VORF9NQVNLX0xJTkUzIHwKKwkJCQkgICAgU09VTkRfTUFTS19ESUdJVEFMMSB8IFNPVU5EX01BU0tfRElHSVRBTDIgfCBTT1VORF9NQVNLX0RJR0lUQUwzKSk7CisJcmV0dXJuIHUtMTsKK30KKworc3RhdGljIHZvaWQgcHJlcG1peGNoKHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzdGF0ZS0+cy0+dXNiZGV2OworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlfX3MxNiB2MTsKKwl1bnNpZ25lZCBpbnQgdjIsIHYzOworCisJaWYgKCFzdGF0ZS0+bnJtaXhjaCB8fCBzdGF0ZS0+bnJtaXhjaCA+IFNPVU5EX01JWEVSX05SREVWSUNFUykKKwkJcmV0dXJuOworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwcmVwbWl4Y2g6IG91dCBvZiBtZW1vcnlcbiIpIDsKKwkJcmV0dXJuOworCX0KKworCWNoID0gJnN0YXRlLT5taXhjaFtzdGF0ZS0+bnJtaXhjaC0xXTsKKwlzd2l0Y2ggKGNoLT5zZWxlY3RvcikgeworCWNhc2UgMDogIC8qIG1peGVyIHVuaXQgcmVxdWVzdCAqLworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWNoLT5taW52YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NQVgsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWNoLT5tYXh2YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQl2MiA9IGNoLT5tYXh2YWwgLSBjaC0+bWludmFsOworCQlpZiAoIXYyKQorCQkJdjIgPSAxOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJaWYgKHYzID4gMTAwKQorCQkJdjMgPSAxMDA7CisJCWNoLT52YWx1ZSA9IHYzOworCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJCSAgICAoKGNoLT5jaG51bSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9JTikpIDw8IDgpIHwgKDEgKyAhIShjaC0+ZmxhZ3MgJiBNSVhGTEdfU1RFUkVPT1VUKSksCisJCQkJCSAgICBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCQl2MSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCQl2MyA9IHYxIC0gY2gtPm1pbnZhbDsKKwkJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJCWlmICh2MyA+IDEwMCkKKwkJCQl2MyA9IDEwMDsKKwkJfQorCQljaC0+dmFsdWUgfD0gdjMgPDwgODsKKwkJYnJlYWs7CisKKwkJLyogdmFyaW91cyBmZWF0dXJlIHVuaXQgY29udHJvbHMgKi8KKwljYXNlIFZPTFVNRV9DT05UUk9MOgorCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJY2gtPm1pbnZhbCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01BWCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWF4dmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgY2gtPmNobnVtLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJdjIgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKKwkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCWlmICghdjIpCisJCQl2MiA9IDE7CisJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJaWYgKHYzID4gMTAwKQorCQkJdjMgPSAxMDA7CisJCWNoLT52YWx1ZSA9IHYzOworCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJCWdvdG8gZXJyOworCQkJdjEgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCQlpZiAodjMgPiAxMDApCisJCQkJdjMgPSAxMDA7CisJCX0KKwkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7CisJCWJyZWFrOworCQkKKwljYXNlIEJBU1NfQ09OVFJPTDoKKwljYXNlIE1JRF9DT05UUk9MOgorCWNhc2UgVFJFQkxFX0NPTlRST0w6CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01JTiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWludmFsID0gYnVmWzBdIDw8IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01BWCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWF4dmFsID0gYnVmWzBdIDw8IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQl2MSA9IGJ1ZlswXSA8PCA4OworCQl2MiA9IGNoLT5tYXh2YWwgLSBjaC0+bWludmFsOworCQl2MyA9IHYxIC0gY2gtPm1pbnZhbDsKKwkJaWYgKCF2MikKKwkJCXYyID0gMTsKKwkJdjMgPSAxMDAgKiB2MyAvIHYyOworCQlpZiAodjMgPiAxMDApCisJCQl2MyA9IDEwMDsKKwkJY2gtPnZhbHVlID0gdjM7CisJCWlmIChjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpIHsKKwkJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCAoY2gtPmNobnVtICsgMSksIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAxLCAxMDAwKSA8IDApCisJCQkJZ290byBlcnI7CisJCQl2MSA9IGJ1ZlswXSA8PCA4OworCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCQlpZiAodjMgPiAxMDApCisJCQkJdjMgPSAxMDA7CisJCX0KKwkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7CisJCWJyZWFrOworCQkKKwlkZWZhdWx0OgorCQlnb3RvIGVycjsKKwl9CisKKyBmcmVlYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuOworIGVycjoKKwlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBtaXhlciByZXF1ZXN0IGRldmljZSAldSBpZiAldSB1bml0ICV1IGNoICV1IHNlbGVjdG9yICV1IGZhaWxlZFxuIiwgCisJICAgICAgIGRldi0+ZGV2bnVtLCBzdGF0ZS0+Y3RybGlmLCBjaC0+dW5pdGlkLCBjaC0+Y2hudW0sIGNoLT5zZWxlY3Rvcik7CisJaWYgKHN0YXRlLT5ucm1peGNoKQorCQlzdGF0ZS0+bnJtaXhjaC0tOworCWdvdG8gZnJlZWJ1ZjsKK30KKworCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgdW5pdGlkKTsKKworc3RhdGljIGlubGluZSBpbnQgY2hlY2ttaXhibWFwKHVuc2lnbmVkIGNoYXIgKmJtYXAsIHVuc2lnbmVkIGNoYXIgZmxnLCB1bnNpZ25lZCBpbnQgaW5pZHgsIHVuc2lnbmVkIGludCBudW1vY2gpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKworCWlkeCA9IGluaWR4Km51bW9jaDsKKwlpZiAoIShibWFwWy0oaWR4ID4+IDMpXSAmICgweDgwID4+IChpZHggJiA3KSkpKQorCQlyZXR1cm4gMDsKKwlpZiAoIShmbGcgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQorCQlyZXR1cm4gMTsKKwlpZHggPSAoaW5pZHgrISEoZmxnICYgTUlYRkxHX1NURVJFT0lOKSkqbnVtb2NoKyEhKGZsZyAmIE1JWEZMR19TVEVSRU9PVVQpOworCWlmICghKGJtYXBbLShpZHggPj4gMyldICYgKDB4ODAgPj4gKGlkeCAmIDcpKSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fbWl4ZXJ1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICptaXhlcikKK3sKKwl1bnNpZ25lZCBpbnQgbnJvdXRjaCA9IG1peGVyWzUrbWl4ZXJbNF1dOworCXVuc2lnbmVkIGludCBjaGlkeFtTT1VORF9NSVhFUl9OUkRFVklDRVMrMV07CisJdW5zaWduZWQgaW50IHRlcm10W1NPVU5EX01JWEVSX05SREVWSUNFU107CisJdW5zaWduZWQgY2hhciBmbGcgPSAobnJvdXRjaCA+PSAyKSA/IE1JWEZMR19TVEVSRU9PVVQgOiAwOworCXVuc2lnbmVkIGNoYXIgKmJtYXAgPSAmbWl4ZXJbOSttaXhlcls0XV07CisJdW5zaWduZWQgaW50IGJtYXBzaXplOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFtaXhlcls0XSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yXG4iLCBtaXhlclszXSk7CisJCXJldHVybjsKKwl9CisJaWYgKG1peGVyWzRdID4gU09VTkRfTUlYRVJfTlJERVZJQ0VTKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IG1peGVyIHVuaXQgJXU6IHRvbyBtYW55IGlucHV0IHBpbnNcbiIsIG1peGVyWzNdKTsKKwkJcmV0dXJuOworCX0KKwljaGlkeFswXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1peGVyWzRdOyBpKyspIHsKKwkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBtaXhlcls1K2ldKTsKKwkJY2hpZHhbaSsxXSA9IGNoaWR4W2ldICsgc3RhdGUtPm5yY2hhbm5lbHM7CisJCXRlcm10W2ldID0gc3RhdGUtPnRlcm10eXBlOworCX0KKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IG1peGVyWzYrbWl4ZXJbNF1dIHwgKG1peGVyWzcrbWl4ZXJbNF1dIDw8IDgpOworCWJtYXBzaXplID0gKG5yb3V0Y2ggKiBjaGlkeFttaXhlcls0XV0gKyA3KSA+PiAzOworCWJtYXAgKz0gYm1hcHNpemUgLSAxOworCWlmIChtaXhlclswXSA8IDEwK21peGVyWzRdK2JtYXBzaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXUgaW52YWxpZCBNSVhFUl9VTklUIGRlc2NyaXB0b3IgKGJpdG1hcCB0b28gc21hbGwpXG4iLCBtaXhlclszXSk7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IG1peGVyWzRdOyBpKyspIHsKKwkJc3RhdGUtPnRlcm10eXBlID0gdGVybXRbaV07CisJCWlmIChjaGlkeFtpKzFdLWNoaWR4W2ldID49IDIpIHsKKwkJCWZsZyB8PSBNSVhGTEdfU1RFUkVPSU47CisJCQlpZiAoY2hlY2ttaXhibWFwKGJtYXAsIGZsZywgY2hpZHhbaV0sIG5yb3V0Y2gpKSB7CisJCQkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7CisJCQkJaWYgKGNoKSB7CisJCQkJCWNoLT51bml0aWQgPSBtaXhlclszXTsKKwkJCQkJY2gtPnNlbGVjdG9yID0gMDsKKwkJCQkJY2gtPmNobnVtID0gY2hpZHhbaV0rMTsKKwkJCQkJY2gtPmZsYWdzID0gZmxnOworCQkJCQlwcmVwbWl4Y2goc3RhdGUpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlmbGcgJj0gfk1JWEZMR19TVEVSRU9JTjsKKwkJaWYgKGNoZWNrbWl4Ym1hcChibWFwLCBmbGcsIGNoaWR4W2ldLCBucm91dGNoKSkgeworCQkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7CisJCQlpZiAoY2gpIHsKKwkJCQljaC0+dW5pdGlkID0gbWl4ZXJbM107CisJCQkJY2gtPnNlbGVjdG9yID0gMDsKKwkJCQljaC0+Y2hudW0gPSBjaGlkeFtpXSsxOworCQkJCWNoLT5mbGFncyA9IGZsZzsKKwkJCQlwcmVwbWl4Y2goc3RhdGUpOworCQkJfQorCQl9CisJfQkKKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworfQorCitzdGF0aWMgc3RydWN0IG1peGVyY2hhbm5lbCAqc2xjdHNyY19maW5kdW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgX191OCB1bml0aWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucm1peGNoOyBpKyspCisJCWlmIChzdGF0ZS0+bWl4Y2hbaV0udW5pdGlkID09IHVuaXRpZCkKKwkJCXJldHVybiAmc3RhdGUtPm1peGNoW2ldOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fc2VsZWN0b3J1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpzZWxlY3RvcikKK3sKKwl1bnNpZ25lZCBpbnQgY2hudW0sIGksIG1peGNoOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKm1jaDsKKworCWlmICghc2VsZWN0b3JbNF0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldSBpbnZhbGlkIFNFTEVDVE9SX1VOSVQgZGVzY3JpcHRvclxuIiwgc2VsZWN0b3JbM10pOworCQlyZXR1cm47CisJfQorCW1peGNoID0gc3RhdGUtPm5ybWl4Y2g7CisJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBzZWxlY3Rvcls1XSk7CisJaWYgKHN0YXRlLT5ucm1peGNoICE9IG1peGNoKSB7CisJCW1jaCA9ICZzdGF0ZS0+bWl4Y2hbc3RhdGUtPm5ybWl4Y2gtMV07CisJCW1jaC0+c2xjdHVuaXRpZCA9IHNlbGVjdG9yWzNdIHwgKDEgPDwgOCk7CisJfSBlbHNlIGlmICgobWNoID0gc2xjdHNyY19maW5kdW5pdChzdGF0ZSwgc2VsZWN0b3JbNV0pKSkgeworCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgxIDw8IDgpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBzZWxlY3RvciB1bml0ICV1OiBpZ25vcmluZyBjaGFubmVsIDFcbiIsIHNlbGVjdG9yWzNdKTsKKwl9CisJY2hudW0gPSBzdGF0ZS0+bnJjaGFubmVsczsKKwlmb3IgKGkgPSAxOyBpIDwgc2VsZWN0b3JbNF07IGkrKykgeworCQltaXhjaCA9IHN0YXRlLT5ucm1peGNoOworCQl1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RhdGUsIHNlbGVjdG9yWzUraV0pOworCQlpZiAoY2hudW0gIT0gc3RhdGUtPm5yY2hhbm5lbHMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHVuaXQgJXU6IGlucHV0IHBpbnMgd2l0aCB2YXJ5aW5nIGNoYW5uZWwgbnVtYmVyc1xuIiwgc2VsZWN0b3JbM10pOworCQkJc3RhdGUtPnRlcm10eXBlID0gMDsKKwkJCXN0YXRlLT5jaGNvbmZpZyA9IDA7CisJCQlzdGF0ZS0+bnJjaGFubmVscyA9IDA7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXRlLT5ucm1peGNoICE9IG1peGNoKSB7CisJCQltY2ggPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoLTFdOworCQkJbWNoLT5zbGN0dW5pdGlkID0gc2VsZWN0b3JbM10gfCAoKGkgKyAxKSA8PCA4KTsKKwkJfSBlbHNlIGlmICgobWNoID0gc2xjdHNyY19maW5kdW5pdChzdGF0ZSwgc2VsZWN0b3JbNStpXSkpKSB7CisJCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgoaSArIDEpIDw8IDgpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHNlbGVjdG9yIHVuaXQgJXU6IGlnbm9yaW5nIGNoYW5uZWwgJXVcbiIsIHNlbGVjdG9yWzNdLCBpKzEpOworCQl9CisJfQorCXN0YXRlLT50ZXJtdHlwZSA9IDA7CisJc3RhdGUtPmNoY29uZmlnID0gMDsKK30KKworLyogaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCB0cnkgdG8gaGFuZGxlIDNEIGV0Yy4gZWZmZWN0IHVuaXRzICovCisKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19wcm9jZXNzaW5ndW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqcHJvYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcm9jWzZdOyBpKyspCisJCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgcHJvY1s3K2ldKTsKKwlzdGF0ZS0+bnJjaGFubmVscyA9IHByb2NbNytwcm9jWzZdXTsKKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IHByb2NbOCtwcm9jWzZdXSB8IChwcm9jWzkrcHJvY1s2XV0gPDwgOCk7Cit9CisKKworLyogU2VlIEF1ZGlvIENsYXNzIFNwZWMsIHNlY3Rpb24gNC4zLjIuNSAqLworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2ZlYXR1cmV1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpmdHIpCit7CisJc3RydWN0IG1peGVyY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgc2hvcnQgY2hmdHIsIG1jaGZ0cjsKKyNpZiAwCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHN0YXRlLT5zLT51c2JkZXY7CisJdW5zaWduZWQgY2hhciBkYXRhWzFdOworI2VuZGlmCisJdW5zaWduZWQgY2hhciBucl9sb2dpY2FsX2NoYW5uZWxzLCBpOworCisJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBmdHJbNF0pOworCisJaWYgKGZ0cls1XSA9PSAwICkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB3cm9uZyBjb250cm9scyBzaXplIGluIGZlYXR1cmUgdW5pdCAldVxuIixmdHJbM10pOworCQlyZXR1cm47CisJfQorCisJaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmVhdHVyZSB1bml0ICV1IHNvdXJjZSBoYXMgbm8gY2hhbm5lbHNcbiIsIGZ0clszXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHN0YXRlLT5ucmNoYW5uZWxzID4gMikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGZlYXR1cmUgdW5pdCAldTogT1NTIG1peGVyIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAyIGNoYW5uZWxzXG4iLCBmdHJbM10pOworCisJbnJfbG9naWNhbF9jaGFubmVscz0oZnRyWzBdLTcpL2Z0cls1XS0xOworCisJaWYgKG5yX2xvZ2ljYWxfY2hhbm5lbHMgIT0gc3RhdGUtPm5yY2hhbm5lbHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHdhcm5pbmc6IGZvdW5kICVkIG9mICVkIGxvZ2ljYWwgY2hhbm5lbHMuXG4iLCBzdGF0ZS0+bnJjaGFubmVscyxucl9sb2dpY2FsX2NoYW5uZWxzKTsKKworCQlpZiAoc3RhdGUtPm5yY2hhbm5lbHMgPT0gMSAmJiBucl9sb2dpY2FsX2NoYW5uZWxzPT0wKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogYXNzdW1pbmcgdGhlIGNoYW5uZWwgZm91bmQgaXMgdGhlIG1hc3RlciBjaGFubmVsIChnb3QgYSBQaGlsaXBzIGNhbWVyYT8pLiBTaG91bGQgYmUgZmluZS5cbiIpOworCQl9IGVsc2UgaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDEgJiYgbnJfbG9naWNhbF9jaGFubmVscz09MikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGFzc3VtaW5nIHRoYXQgYSBzdGVyZW8gY2hhbm5lbCBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gYSBtaXhlciBpcyBtaXNzaW5nIGluIHNlYXJjaCAoZ290IExhYnRlYyBoZWFkc2V0PykuIFNob3VsZCBiZSBmaW5lLlxuIik7CisJCQlzdGF0ZS0+bnJjaGFubmVscz1ucl9sb2dpY2FsX2NoYW5uZWxzOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IG5vIGlkZWEgd2hhdCdzIGdvaW5nIG9uLi4uLCBjb250YWN0IGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOworCQl9CisJfQorCisJLyogVGhlcmUgaXMgYWx3YXlzIGEgbWFzdGVyIGNoYW5uZWwgKi8KKwltY2hmdHIgPSBmdHJbNl07CisJLyogQmluYXJ5IEFORCBvdmVyIGxvZ2ljYWwgY2hhbm5lbHMgaWYgdGhleSBleGlzdCAqLworCWlmIChucl9sb2dpY2FsX2NoYW5uZWxzKSB7CisJCWNoZnRyID0gZnRyWzYrZnRyWzVdXTsKKwkJZm9yIChpID0gMjsgaSA8PSBucl9sb2dpY2FsX2NoYW5uZWxzOyBpKyspCisJCQljaGZ0ciAmPSBmdHJbNitpKmZ0cls1XV07CisJfSBlbHNlIHsKKwkJY2hmdHIgPSAwOworCX0KKworCS8qIHZvbHVtZSBjb250cm9sICovCisJaWYgKGNoZnRyICYgMikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIGdldHZvbGNoYW5uZWwoc3RhdGUpKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gVk9MVU1FX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAxOworCQkJY2gtPmZsYWdzID0gKHN0YXRlLT5ucmNoYW5uZWxzID4gMSkgPyAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkgOiAwOworCQkJcHJlcG1peGNoKHN0YXRlKTsKKwkJfQorCX0gZWxzZSBpZiAobWNoZnRyICYgMikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIGdldHZvbGNoYW5uZWwoc3RhdGUpKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gVk9MVU1FX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAwOworCQkJY2gtPmZsYWdzID0gMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9CisJLyogYmFzcyBjb250cm9sICovCisJaWYgKGNoZnRyICYgNCkgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX0JBU1MpOworCQlpZiAoY2gpIHsKKwkJCWNoLT51bml0aWQgPSBmdHJbM107CisJCQljaC0+c2VsZWN0b3IgPSBCQVNTX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAxOworCQkJY2gtPmZsYWdzID0gKHN0YXRlLT5ucmNoYW5uZWxzID4gMSkgPyAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkgOiAwOworCQkJcHJlcG1peGNoKHN0YXRlKTsKKwkJfQorCX0gZWxzZSBpZiAobWNoZnRyICYgNCkgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX0JBU1MpOworCQlpZiAoY2gpIHsKKwkJCWNoLT51bml0aWQgPSBmdHJbM107CisJCQljaC0+c2VsZWN0b3IgPSBCQVNTX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAwOworCQkJY2gtPmZsYWdzID0gMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9CisJLyogdHJlYmxlIGNvbnRyb2wgKi8KKwlpZiAoY2hmdHIgJiAxNikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX1RSRUJMRSk7CisJCWlmIChjaCkgeworCQkJY2gtPnVuaXRpZCA9IGZ0clszXTsKKwkJCWNoLT5zZWxlY3RvciA9IFRSRUJMRV9DT05UUk9MOworCQkJY2gtPmNobnVtID0gMTsKKwkJCWNoLT5mbGFncyA9IChzdGF0ZS0+bnJjaGFubmVscyA+IDEpID8gKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpIDogMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9IGVsc2UgaWYgKG1jaGZ0ciAmIDE2KSB7CisJCWNoID0gZ2V0bWl4Y2hhbm5lbChzdGF0ZSwgU09VTkRfTUlYRVJfVFJFQkxFKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gVFJFQkxFX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAwOworCQkJY2gtPmZsYWdzID0gMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9CisjaWYgMAorCS8qIGlmIHRoZXJlIGFyZSBtdXRlIGNvbnRyb2xzLCB1bm11dGUgdGhlbSAqLworCS8qIGRvZXMgbm90IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LCBhbmQgdGhlIERhbGxhcyBjaGlwIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCB0aGUgImFsbCIgY2hhbm5lbCAoMjU1KSAqLworCWlmICgoY2hmdHIgJiAxKSB8fCAobWNoZnRyICYgMSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1bm11dGluZyBmZWF0dXJlIHVuaXQgJXUgaW50ZXJmYWNlICV1XG4iLCBmdHJbM10sIHN0YXRlLT5jdHJsaWYpOworCQlkYXRhWzBdID0gMDsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgKE1VVEVfQ09OVFJPTCA8PCA4KSB8IDB4ZmYsIHN0YXRlLT5jdHJsaWYgfCAoZnRyWzNdIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JhdWRpbzogZmFpbHVyZSB0byB1bm11dGUgZmVhdHVyZSB1bml0ICV1IGludGVyZmFjZSAldVxuIiwgZnRyWzNdLCBzdGF0ZS0+Y3RybGlmKTsKKyAJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19yZWN1cnNldW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciB1bml0aWQpCit7CisJdW5zaWduZWQgY2hhciAqcDE7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCh1bml0aWQsIHN0YXRlLT51bml0Yml0bWFwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogbWl4ZXIgcGF0aCByZXZpc2l0cyB1bml0ICVkXG4iLCB1bml0aWQpOworCQlyZXR1cm47CisJfQorCXAxID0gZmluZF9hdWRpb2NvbnRyb2xfdW5pdChzdGF0ZS0+YnVmZmVyLCBzdGF0ZS0+YnVmbGVuLCBOVUxMLCB1bml0aWQsIHN0YXRlLT5jdHJsaWYpOworCWlmICghcDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAlZCBub3QgZm91bmQhXG4iLCB1bml0aWQpOworCQlyZXR1cm47CisJfQorCXN0YXRlLT5ucmNoYW5uZWxzID0gMDsKKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IDA7CisJc3dpdGNoIChwMVsyXSkgeworCWNhc2UgSU5QVVRfVEVSTUlOQUw6CisJCWlmIChwMVswXSA8IDEyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIElOUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3RhdGUtPm5yY2hhbm5lbHMgPSBwMVs3XTsKKwkJc3RhdGUtPnRlcm10eXBlID0gcDFbNF0gfCAocDFbNV0gPDwgOCk7CisJCXN0YXRlLT5jaGNvbmZpZyA9IHAxWzhdIHwgKHAxWzldIDw8IDgpOworCQlyZXR1cm47CisKKwljYXNlIE1JWEVSX1VOSVQ6CisJCWlmIChwMVswXSA8IDEwIHx8IHAxWzBdIDwgMTArcDFbNF0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCXVzYl9hdWRpb19taXhlcnVuaXQoc3RhdGUsIHAxKTsKKwkJcmV0dXJuOworCisJY2FzZSBTRUxFQ1RPUl9VTklUOgorCQlpZiAocDFbMF0gPCA2IHx8IHAxWzBdIDwgNitwMVs0XSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBTRUxFQ1RPUl9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2F1ZGlvX3NlbGVjdG9ydW5pdChzdGF0ZSwgcDEpOworCQlyZXR1cm47CisKKwljYXNlIEZFQVRVUkVfVU5JVDogLyogU2VlIFVTQiBBdWRpbyBDbGFzcyBTcGVjIDQuMy4yLjUgKi8KKwkJaWYgKHAxWzBdIDwgNyB8fCBwMVswXSA8IDcrcDFbNV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgRkVBVFVSRV9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2F1ZGlvX2ZlYXR1cmV1bml0KHN0YXRlLCBwMSk7CisJCXJldHVybjsJCQorCisJY2FzZSBQUk9DRVNTSU5HX1VOSVQ6CisJCWlmIChwMVswXSA8IDEzIHx8IHAxWzBdIDwgMTMrcDFbNl0gfHwgcDFbMF0gPCAxMytwMVs2XStwMVsxMStwMVs2XV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgUFJPQ0VTU0lOR19VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2F1ZGlvX3Byb2Nlc3Npbmd1bml0KHN0YXRlLCBwMSk7CisJCXJldHVybjsJCQorCisJY2FzZSBFWFRFTlNJT05fVU5JVDoKKwkJaWYgKHAxWzBdIDwgMTMgfHwgcDFbMF0gPCAxMytwMVs2XSB8fCBwMVswXSA8IDEzK3AxWzZdK3AxWzExK3AxWzZdXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBFWFRFTlNJT05fVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCWZvciAoaiA9IGkgPSAwOyBpIDwgcDFbNl07IGkrKykgeworCQkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBwMVs3K2ldKTsKKwkJCWlmICghaSkKKwkJCQlqID0gc3RhdGUtPnRlcm10eXBlOworCQkJZWxzZSBpZiAoaiAhPSBzdGF0ZS0+dGVybXR5cGUpCisJCQkJaiA9IDA7CisJCX0KKwkJc3RhdGUtPm5yY2hhbm5lbHMgPSBwMVs3K3AxWzZdXTsKKwkJc3RhdGUtPmNoY29uZmlnID0gcDFbOCtwMVs2XV0gfCAocDFbOStwMVs2XV0gPDwgOCk7CisJCXN0YXRlLT50ZXJtdHlwZSA9IGo7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IHVuZXhwZWN0ZWQgdHlwZSAweCUwMnhcbiIsIHVuaXRpZCwgcDFbMl0pOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fY29uc3RydWN0bWl4ZXIoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcywgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1bnNpZ25lZCBpbnQgY3RybGlmLCB1bnNpZ25lZCBjaGFyICpvdGVybSkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyZGV2ICptczsKKwlzdHJ1Y3QgY29uc21peHN0YXRlIHN0YXRlOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJc3RhdGUucyA9IHM7CisJc3RhdGUubnJtaXhjaCA9IDA7CisJc3RhdGUubWl4Y2htYXNrID0gfjA7CisJc3RhdGUuYnVmZmVyID0gYnVmZmVyOworCXN0YXRlLmJ1ZmxlbiA9IGJ1ZmxlbjsKKwlzdGF0ZS5jdHJsaWYgPSBjdHJsaWY7CisJc2V0X2JpdChvdGVybVszXSwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAidXNiYXVkaW86IGNvbnN0cnVjdGluZyBtaXhlciBmb3IgVGVybWluYWwgJXUgdHlwZSAweCUwNHhcbiIsCisJICAgICAgIG90ZXJtWzNdLCBvdGVybVs0XSB8IChvdGVybVs1XSA8PCA4KSk7CisJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KCZzdGF0ZSwgb3Rlcm1bN10pOworCWlmICghc3RhdGUubnJtaXhjaCkgeworCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogbm8gbWl4ZXIgY29udHJvbHMgZm91bmQgZm9yIFRlcm1pbmFsICV1XG4iLCBvdGVybVszXSk7CisJCXJldHVybjsKKwl9CisJaWYgKCEobXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21peGVyZGV2KStzdGF0ZS5ucm1peGNoKnNpemVvZihzdHJ1Y3QgbWl4ZXJjaGFubmVsKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm47CisJbWVtc2V0KG1zLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9taXhlcmRldikpOworCW1lbWNweSgmbXMtPmNoLCAmc3RhdGUubWl4Y2gsIHN0YXRlLm5ybWl4Y2gqc2l6ZW9mKHN0cnVjdCBtaXhlcmNoYW5uZWwpKTsKKwltcy0+c3RhdGUgPSBzOworCW1zLT5pZmFjZSA9IGN0cmxpZjsKKwltcy0+bnVtY2ggPSBzdGF0ZS5ucm1peGNoOworCWlmICgobXMtPmRldl9taXhlciA9IHJlZ2lzdGVyX3NvdW5kX21peGVyKCZ1c2JfbWl4ZXJfZm9wcywgLTEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHJlZ2lzdGVyIG1peGVyXG4iKTsKKwkJa2ZyZWUobXMpOworCQlyZXR1cm47CisJfQorCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiByZWdpc3RlcmVkIG1peGVyIDE0LCVkXG4iLCBtcy0+ZGV2X21peGVyKTsKKwlsaXN0X2FkZF90YWlsKCZtcy0+bGlzdCwgJnMtPm1peGVybGlzdCk7Cit9CisKKy8qIGFyYml0cmFyeSBsaW1pdCwgd2Ugd29uJ3QgY2hlY2sgbW9yZSBpbnRlcmZhY2VzIHRoYW4gdGhpcyAqLworI2RlZmluZSBVU0JfTUFYSU5URVJGQUNFUwkzMgorCitzdGF0aWMgc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqdXNiX2F1ZGlvX3BhcnNlY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHVuc2lnbmVkIGludCBjdHJsaWYpCit7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCXVuc2lnbmVkIGNoYXIgaWZpbltVU0JfTUFYSU5URVJGQUNFU10sIGlmb3V0W1VTQl9NQVhJTlRFUkZBQ0VTXTsKKwl1bnNpZ25lZCBjaGFyICpwMTsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgaywgbnVtaWZpbiA9IDAsIG51bWlmb3V0ID0gMDsKKwkKKwlpZiAoIShzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHMsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlKSk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPmF1ZGlvbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPm1peGVybGlzdCk7CisJcy0+dXNiZGV2ID0gZGV2OworCXMtPmNvdW50ID0gMTsKKworCS8qIGZpbmQgYXVkaW9jb250cm9sIGludGVyZmFjZSAqLworCWlmICghKHAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBIRUFERVIsIGN0cmxpZiwgLTEpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBubyBIRUFERVIgZm91bmRcbiIsCisJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKKwkJZ290byByZXQ7CisJfQorCWlmIChwMVswXSA8IDggKyBwMVs3XSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBIRUFERVIgZXJyb3JcbiIsCisJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKKwkJZ290byByZXQ7CisJfQorCWlmICghcDFbN10pCisJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBoYXMgbm8gQXVkaW9TdHJlYW1pbmcgYW5kIE1pZGlTdHJlYW1pbmcgaW50ZXJmYWNlc1xuIiwKKwkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYpOworCWZvciAoaSA9IDA7IGkgPCBwMVs3XTsgaSsrKSB7CisJCWogPSBwMVs4K2ldOworCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGopOworCQlpZiAoIWlmYWNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgZG9lcyBub3QgZXhpc3RcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaWZhY2UtPm51bV9hbHRzZXR0aW5nID09IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGhhcyBvbmx5IDEgYWx0c2V0dGluZy5cbiIsIGRldi0+ZGV2bnVtLCBjdHJsaWYpOworCQkJY29udGludWU7CisJCX0KKwkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGlmYWNlLCAwKTsKKwkJaWYgKCFhbHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBoYXMgbm8gYWx0c2V0dGluZyAwXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaXMgbm90IGFuIEF1ZGlvQ2xhc3MgaW50ZXJmYWNlXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBNSURJU3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaW52YWxpZCBBdWRpb0NsYXNzIHN1YnR5cGVcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYWx0LT5kZXNjLmJOdW1FbmRwb2ludHMgPiAwKSB7CisJCQkvKiBDaGVjayBhbGwgZW5kcG9pbnRzOyBzaG91bGQgdGhleSBhbGwgaGF2ZSBhIGJhbmR3aWR0aCBvZiAwID8gKi8KKwkJCWZvciAoayA9IDA7IGsgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsgaysrKSB7CisJCQkJaWYgKGxlMTZfdG9fY3B1KGFsdC0+ZW5kcG9pbnRba10uZGVzYy53TWF4UGFja2V0U2l6ZSkgPiAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGVuZHBvaW50ICVkIGRvZXMgbm90IGhhdmUgMCBiYW5kd2lkdGggYXQgYWx0WzBdXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBrKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGsgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50cykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgMSk7CisJCWlmICghYWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaGFzIG5vIGFsdHNldHRpbmcgMVxuIiwKKwkJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBoYXMgbm8gZW5kcG9pbnRcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBub3RlOiB0aGlzIHJlcXVpcmVzIHRoZSBkYXRhIGVuZHBvaW50IHRvIGJlIGVwMCBhbmQgdGhlIG9wdGlvbmFsIHN5bmMKKwkJICAgZXAgdG8gYmUgZXAxLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSAqLworCQlpZiAoYWx0LT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQlpZiAobnVtaWZpbiA8IFVTQl9NQVhJTlRFUkZBQ0VTKSB7CisJCQkJaWZpbltudW1pZmluKytdID0gajsKKwkJCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG51bWlmb3V0IDwgVVNCX01BWElOVEVSRkFDRVMpIHsKKwkJCQlpZm91dFtudW1pZm91dCsrXSA9IGo7CisJCQkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYl9hdWRpb19kcml2ZXIsIGlmYWNlLCAodm9pZCAqKS0xKTsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaGFzICV1IGlucHV0IGFuZCAldSBvdXRwdXQgQXVkaW9TdHJlYW1pbmcgaW50ZXJmYWNlc1xuIiwKKwkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgbnVtaWZpbiwgbnVtaWZvdXQpOworCWZvciAoaSA9IDA7IGkgPCBudW1pZmluICYmIGkgPCBudW1pZm91dDsgaSsrKQorCQl1c2JfYXVkaW9fcGFyc2VzdHJlYW1pbmcocywgYnVmZmVyLCBidWZsZW4sIGlmaW5baV0sIGlmb3V0W2ldKTsKKwlmb3IgKGogPSBpOyBqIDwgbnVtaWZpbjsgaisrKQorCQl1c2JfYXVkaW9fcGFyc2VzdHJlYW1pbmcocywgYnVmZmVyLCBidWZsZW4sIGlmaW5baV0sIC0xKTsKKwlmb3IgKGogPSBpOyBqIDwgbnVtaWZvdXQ7IGorKykKKwkJdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHMsIGJ1ZmZlciwgYnVmbGVuLCAtMSwgaWZvdXRbaV0pOworCS8qIG5vdyB3YWxrIHRocm91Z2ggYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycyAqLworCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBPVVRQVVRfVEVSTUlOQUwsIGN0cmxpZiwgLTEpOworCXdoaWxlIChwMSkgeworCQlpZiAocDFbMF0gPj0gOSkKKwkJCXVzYl9hdWRpb19jb25zdHJ1Y3RtaXhlcihzLCBidWZmZXIsIGJ1ZmxlbiwgY3RybGlmLCBwMSk7CisJCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBwMSwgT1VUUFVUX1RFUk1JTkFMLCBjdHJsaWYsIC0xKTsKKwl9CisKK3JldDoKKwlpZiAobGlzdF9lbXB0eSgmcy0+YXVkaW9saXN0KSAmJiBsaXN0X2VtcHR5KCZzLT5taXhlcmxpc3QpKSB7CisJCWtmcmVlKHMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogZXZlcnl0aGluZyBzdWNjZXNzZnVsICovCisJZG93bigmb3Blbl9zZW0pOworCWxpc3RfYWRkX3RhaWwoJnMtPmF1ZGlvZGV2LCAmYXVkaW9kZXZzKTsKKwl1cCgmb3Blbl9zZW0pOworCXByaW50ayhLRVJOX0RFQlVHICJ1c2JfYXVkaW9fcGFyc2Vjb250cm9sOiB1c2JfYXVkaW9fc3RhdGUgYXQgJXBcbiIsIHMpOworCXJldHVybiBzOworfQorCisvKiB3ZSBvbmx5IGNhcmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbmZpZ3VyYXRpb24gKi8KKworc3RhdGljIGludCB1c2JfYXVkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBidWZsZW47CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBQcm9iaW5nIGlmICVpOiBJQyAleCwgSVNDICV4XG4iLCBpZm51bSwKKwkgICAgICAgY29uZmlnLT5pbnRlcmZhY2VbaWZudW1dLmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJICAgICAgIGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXS5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZVN1YkNsYXNzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlIGZvdW5kCisJICogZmluZCB3aGljaCBjb25maWd1cmF0aW9uIG51bWJlciBpcyBhY3RpdmUKKwkgKi8KKwlidWZmZXIgPSBkZXYtPnJhd2Rlc2NyaXB0b3JzW2Rldi0+YWN0Y29uZmlnIC0gZGV2LT5jb25maWddOworCWJ1ZmxlbiA9IGxlMTZfdG9fY3B1KGRldi0+YWN0Y29uZmlnLT5kZXNjLndUb3RhbExlbmd0aCk7CisJcyA9IHVzYl9hdWRpb19wYXJzZWNvbnRyb2woZGV2LCBidWZmZXIsIGJ1ZmxlbiwgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwlpZiAocykgeworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCisKKy8qIGEgcmV2b2tlIGZhY2lsaXR5IHdvdWxkIG1ha2UgdGhpbmdzIHNpbXBsZXIgKi8KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOworCisJaWYgKCFzKQorCQlyZXR1cm47CisKKwkvKiB3ZSBnZXQgY2FsbGVkIHdpdGggLTEgZm9yIGV2ZXJ5IGF1ZGlvc3RyZWFtaW5nIGludGVyZmFjZSByZWdpc3RlcmVkICovCisJaWYgKHMgPT0gKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKiktMSkgeworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogbm90ZSwgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3QgY2FsbGVkIHdpdGggLTFcbiIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXMtPnVzYmRldikgeworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogZXJyb3IsICB1c2JfYXVkaW9fZGlzY29ubmVjdCBhbHJlYWR5IGNhbGxlZCBmb3IgJXAhXG4iLCBzKSk7CisJCXJldHVybjsKKwl9CisJZG93bigmb3Blbl9zZW0pOworCWxpc3RfZGVsX2luaXQoJnMtPmF1ZGlvZGV2KTsKKwlzLT51c2JkZXYgPSBOVUxMOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJLyogZGVyZWdpc3RlciBhbGwgYXVkaW8gYW5kIG1peGVyIGRldmljZXMsIHNvIG5vIG5ldyBwcm9jZXNzZXMgY2FuIG9wZW4gdGhpcyBkZXZpY2UgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmcy0+YXVkaW9saXN0LCBsaXN0KSB7CisJCXVzYmluX2Rpc2MoYXMpOworCQl1c2JvdXRfZGlzYyhhcyk7CisJCXdha2VfdXAoJmFzLT51c2Jpbi5kbWEud2FpdCk7CisJCXdha2VfdXAoJmFzLT51c2JvdXQuZG1hLndhaXQpOworCQlpZiAoYXMtPmRldl9hdWRpbyA+PSAwKSB7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChhcy0+ZGV2X2F1ZGlvKTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB1bnJlZ2lzdGVyIGRzcCAxNCwlZFxuIiwgYXMtPmRldl9hdWRpbyk7CisJCX0KKwkJYXMtPmRldl9hdWRpbyA9IC0xOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zLCAmcy0+bWl4ZXJsaXN0LCBsaXN0KSB7CisJCWlmIChtcy0+ZGV2X21peGVyID49IDApIHsKKwkJCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIobXMtPmRldl9taXhlcik7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdW5yZWdpc3RlciBtaXhlciAxNCwlZFxuIiwgbXMtPmRldl9taXhlcik7CisJCX0KKwkJbXMtPmRldl9taXhlciA9IC0xOworCX0KKwlyZWxlYXNlKHMpOworCXdha2VfdXAoJm9wZW5fd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9hdWRpb19pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2F1ZGlvX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKSAKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9hdWRpb19jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9hdWRpb19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfYXVkaW9faW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfYXVkaW9fY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5MTZlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNkZWZpbmUgQ1NfQVVESU9fVU5ERUZJTkVECQkweDIwCisjZGVmaW5lIENTX0FVRElPX0RFVklDRQkJCTB4MjEKKyNkZWZpbmUgQ1NfQVVESU9fQ09ORklHVVJBVElPTgkJMHgyMgorI2RlZmluZSBDU19BVURJT19TVFJJTkcJCQkweDIzCisjZGVmaW5lIENTX0FVRElPX0lOVEVSRkFDRQkJMHgyNAorI2RlZmluZSBDU19BVURJT19FTkRQT0lOVAkJMHgyNQorCisjZGVmaW5lIEhFQURFUgkJCQkweDAxCisjZGVmaW5lIElOUFVUX1RFUk1JTkFMCQkJMHgwMgorI2RlZmluZSBPVVRQVVRfVEVSTUlOQUwJCQkweDAzCisjZGVmaW5lIE1JWEVSX1VOSVQJCQkweDA0CisjZGVmaW5lIFNFTEVDVE9SX1VOSVQJCQkweDA1CisjZGVmaW5lIEZFQVRVUkVfVU5JVAkJCTB4MDYKKyNkZWZpbmUgUFJPQ0VTU0lOR19VTklUCQkJMHgwNworI2RlZmluZSBFWFRFTlNJT05fVU5JVAkJCTB4MDgKKworI2RlZmluZSBBU19HRU5FUkFMCQkJMHgwMQorI2RlZmluZSBGT1JNQVRfVFlQRQkJCTB4MDIKKyNkZWZpbmUgRk9STUFUX1NQRUNJRklDCQkJMHgwMworCisjZGVmaW5lIEVQX0dFTkVSQUwJCQkweDAxCisKKyNkZWZpbmUgTUFYX0NIQU4JCQk5CisjZGVmaW5lIE1BWF9GUkVRCQkJMTYKKyNkZWZpbmUgTUFYX0lGQUNFCQkJOAorI2RlZmluZSBNQVhfRk9STUFUCQkJOAorI2RlZmluZSBNQVhfQUxUCQkJCTMyIAkvKiBTb3JyeSwgd2UgbmVlZCBxdWl0ZSBhIGZldyBmb3IgdGhlIFBoaWxpcHMgd2ViY2FtcyAqLworCitzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm1pbmFsCit7CQorCXU4CWZsYWdzOworCXU4CWFzc29jOworCXUxNgl0eXBlOwkJCS8qIE1pYyBldGMgKi8KKwl1OAljaGFubmVsczsKKwl1OAlzb3VyY2U7CisJdTE2CWNoYW5jZmc7Cit9OworCitzdHJ1Y3QgdXNiX2F1ZGlvX2Zvcm1hdAoreworCXU4CXR5cGU7CisJdTgJY2hhbm5lbHM7CisJdTgJbnVtX2ZyZXE7CisJdTgJc2Z6OworCXU4CWJpdHM7CisJdTE2CWZyZXFbTUFYX0ZSRVFdOworfTsKKworc3RydWN0IHVzYl9hdWRpb19pbnRlcmZhY2UKK3sKKwl1OAl0ZXJtaW5hbDsKKwl1OAlkZWxheTsKKwl1MTYJbnVtX2Zvcm1hdHM7CisJdTE2CWZvcm1hdF90eXBlOworCXU4CWZsYWdzOworCXU4CWlkbGVjb25mOwkvKiBJZGxlIGNvbmZpZyAqLworI2RlZmluZSBBVV9JRkFDRV9GT1VORAkxCisJc3RydWN0ICB1c2JfYXVkaW9fZm9ybWF0IGZvcm1hdFtNQVhfRk9STUFUXTsKK307CisKK3N0cnVjdCB1c2JfYXVkaW9fZGV2aWNlCit7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXU4CW1peGVyOworCXU4CXNlbGVjdG9yOworCXZvaWQJKmlycV9oYW5kbGU7CisJdTgJbnVtX2NoYW5uZWxzOworCXU4CW51bV9kc3BfaWZhY2U7CisJdTgJY2hhbm5lbF9tYXBbTUFYX0NIQU5dOworCXN0cnVjdCB1c2JfYXVkaW9fdGVybWluYWwgdGVybWluYWxbTUFYX0NIQU5dOworCXN0cnVjdCB1c2JfYXVkaW9faW50ZXJmYWNlIGludGVyZmFjZVtNQVhfSUZBQ0VdW01BWF9BTFRdOworfTsKKworCisKKy8qIEF1ZGlvIENsYXNzIHNwZWNpZmljIFJlcXVlc3QgQ29kZXMgKi8KKworI2RlZmluZSBTRVRfQ1VSICAgIDB4MDEKKyNkZWZpbmUgR0VUX0NVUiAgICAweDgxCisjZGVmaW5lIFNFVF9NSU4gICAgMHgwMgorI2RlZmluZSBHRVRfTUlOICAgIDB4ODIKKyNkZWZpbmUgU0VUX01BWCAgICAweDAzCisjZGVmaW5lIEdFVF9NQVggICAgMHg4MworI2RlZmluZSBTRVRfUkVTICAgIDB4MDQKKyNkZWZpbmUgR0VUX1JFUyAgICAweDg0CisjZGVmaW5lIFNFVF9NRU0gICAgMHgwNQorI2RlZmluZSBHRVRfTUVNICAgIDB4ODUKKyNkZWZpbmUgR0VUX1NUQVQgICAweGZmCisKKy8qIFRlcm1pbmFsIENvbnRyb2wgU2VsZWN0b3JzICovCisKKyNkZWZpbmUgQ09QWV9QUk9URUNUX0NPTlRST0wgICAgICAgMHgwMQorCisvKiBGZWF0dXJlIFVuaXQgQ29udHJvbCBTZWxlY3RvcnMgKi8KKworI2RlZmluZSBNVVRFX0NPTlRST0wgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFZPTFVNRV9DT05UUk9MICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQkFTU19DT05UUk9MICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBNSURfQ09OVFJPTCAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFRSRUJMRV9DT05UUk9MICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgR1JBUEhJQ19FUVVBTElaRVJfQ09OVFJPTCAgMHgwNgorI2RlZmluZSBBVVRPTUFUSUNfR0FJTl9DT05UUk9MICAgICAweDA3CisjZGVmaW5lIERFTEFZX0NPTlRST0wgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQkFTU19CT09TVF9DT05UUk9MICAgICAgICAgMHgwOQorI2RlZmluZSBMT1VETkVTU19DT05UUk9MICAgICAgICAgICAweDBhCisKKy8qIEVuZHBvaW50IENvbnRyb2wgU2VsZWN0b3JzICovCisKKyNkZWZpbmUgU0FNUExJTkdfRlJFUV9DT05UUk9MICAgICAgMHgwMQorI2RlZmluZSBQSVRDSF9DT05UUk9MICAgICAgICAgICAgICAweDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhYzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2JsdWV0dHkuYwpAQCAtMCwwICsxLDEyNzkgQEAKKy8qCisgKiBibHVldHR5LmMgICBWZXJzaW9uIDAuMTMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuCTxncmVnQGtyb2FoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMCBNYXJrIERvdWdsYXMgQ29ybmVyCTxtY29ybmVyQHVtaWNoLmVkdT4KKyAqCisgKiBVU0IgQmx1ZXRvb3RoIFRUWSBkcml2ZXIsIGJhc2VkIG9uIHRoZSBCbHVldG9vdGggU3BlYyB2ZXJzaW9uIDEuMEIKKyAqIAorICogKDIwMDEvMTEvMzApIFZlcnNpb24gMC4xMyBna2gKKyAqCS0gYWRkZWQgbG9ja2luZyBwYXRjaCBmcm9tIE1hc29vZHVyIFJhaG1hbiA8cm1hc29vZHVAaW4uaWJtLmNvbT4KKyAqCS0gcmVtb3ZlZCBhY3RpdmUgdmFyaWFibGUsIGFzIG9wZW5fY291bnQgd2lsbCBkby4KKyAqCisgKiAoMjAwMS8wNy8wOSkgVmVyc2lvbiAwLjEyIGdraAorICoJLSByZW1vdmVkIGluX2ludGVycnVwdCgpIGNhbGwsIGFzIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBkbyAKKyAqCSAgdGhhdCBhbnltb3JlLgorICoKKyAqICgyMDAxLzA2LzA1KSBWZXJzaW9uIDAuMTEgZ2toCisgKgktIEZpeGVkIHByb2JsZW0gd2l0aCByZWFkIHVyYiBzdGF0dXMgc2F5aW5nIHRoYXQgd2UgaGF2ZSBzaHV0ZG93biwKKyAqCSAgYW5kIHRoYXQgd2Ugc2hvdWxkbid0IHJlc3VibWl0IHRoZSB1cmIuICBQYXRjaCBmcm9tIHVua25vd24uCisgKgorICogKDIwMDEvMDUvMjgpIFZlcnNpb24gMC4xMCBna2gKKyAqCS0gRml4ZWQgcHJvYmxlbSB3aXRoIHVzaW5nIGRhdGEgZnJvbSB1c2Vyc3BhY2UgaW4gdGhlIGJsdWV0b290aF93cml0ZQorICoJICBmdW5jdGlvbiBhcyBmb3VuZCBieSB0aGUgQ0hFQ0tFUiBwcm9qZWN0LgorICoJLSBBZGRlZCBhIGJ1ZmZlciB0byB0aGUgd3JpdGVfdXJiX3Bvb2wgd2hpY2ggcmVkdWNlcyB0aGUgbnVtYmVyIG9mCisgKgkgIGJ1ZmZlcnMgYmVpbmcgY3JlYXRlZCBhbmQgZGVzdHJveWVkIGZvciBldmVyIHdyaXRlLiAgQWxzbyBjbGVhbnMKKyAqCSAgdXAgdGhlIGxvZ2ljIGEgYml0LgorICoJLSBBZGRlZCBhIGJ1ZmZlciB0byB0aGUgY29udHJvbF91cmJfcG9vbCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrCisgKgkgIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KKyAqCisgKiAoMjAwMS8wNS8yOCkgVmVyc2lvbiAwLjkgZ2toCisgKglGaXhlZCBwcm9ibGVtIHdpdGggYmx1ZXRvb3RoPT1OVUxMIGZvciBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrCisgKgl3aGljaCB3YXMgZm91bmQgYnkgYm90aCB0aGUgQ0hFQ0tFUiBwcm9qZWN0IGFuZCBNaWtrbyBSYWhrb25lbi4KKyAqCisgKiAoMDgvMDQvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKgorICogKDIwMDEvMDMvMTApIFZlcnNpb24gMC44IGdraAorICoJRml4ZWQgcHJvYmxlbSB3aXRoIG5vdCB1bmxpbmtpbmcgaW50ZXJydXB0IHVyYiBvbiBkZXZpY2UgY2xvc2UKKyAqCWFuZCByZXN1Ym1pdHRpbmcgdGhlIHJlYWQgdXJiIG9uIGVycm9yIHdpdGggYmx1ZXRvb3RoIHN0cnVjdC4KKyAqCVRoYW5rcyB0byBOYXJheWFuIE1vaGFucmFtIDxuYXJheWFuQFJvdmluZ05ldHdvcmtzLmNvbT4gZm9yIHRoZQorICoJZml4ZXMuCisgKgorICogKDExLzI5LzIwMDApIFZlcnNpb24gMC43IGdraAorICoJRml4ZWQgcHJvYmxlbSB3aXRoIG92ZXJydW5uaW5nIHRoZSB0dHkgZmxpcCBidWZmZXIuCisgKglSZW1vdmVkIHVubmVlZGVkIE5VTEwgcG9pbnRlciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiAoMTAvMDUvMjAwMCkgVmVyc2lvbiAwLjYgZ2toCisgKglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisgKgljb3JlIG5lZWRzIGl0LgorICoJR290IGEgcmVhbCBtYWpvciBpZCBudW1iZXIgYW5kIG5hbWUuCisgKgorICogKDA4LzA2LzIwMDApIFZlcnNpb24gMC41IGdraAorICoJRml4ZWQgcHJvYmxlbSBvZiBub3QgcmVzdWJtaXR0aW5nIHRoZSBidWxrIHJlYWQgdXJiIGlmIHRoZXJlIGlzCisgKglhbiBlcnJvciBpbiB0aGUgY2FsbGJhY2suICBFcmljc3NvbiBkZXZpY2VzIHNlZW0gdG8gbmVlZCB0aGlzLgorICoKKyAqICgwNy8xMS8yMDAwKSBWZXJzaW9uIDAuNCBna2gKKyAqCUZpeGVkIGJ1ZyBpbiBkaXNjb25uZWN0IGZvciB3aGVuIHdlIGNhbGwgdHR5X2hhbmd1cAorICoJRml4ZWQgYnVnIGluIGJsdWV0b290aF9jdHJsX21zZyB3aGVyZSB0aGUgYmx1ZXRvb3RoIHN0cnVjdCB3YXMgbm90CisgKglnZXR0aW5nIGF0dGFjaGVkIHRvIHRoZSBjb250cm9sIHVyYiBwcm9wZXJseS4KKyAqCUZpeGVkIGJ1ZyBpbiBibHVldG9vdGhfd3JpdGUgd2hlcmUgd2UgcGF5IGF0dGVudGlvbiB0byB0aGUgcmVzdWx0CisgKglvZiBibHVldG9vdGhfY3RybF9tc2cuCisgKgorICogKDA4LzAzLzIwMDApIFZlcnNpb24gMC4zIGdraCBtZGMKKyAqCU1lcmdlZCBpbiBNYXJrJ3MgY2hhbmdlcyB0byBtYWtlIHRoZSBkcml2ZXIgcGxheSBuaWNlIHdpdGggdGhlIEF4aXMKKyAqCXN0YWNrLgorICoJTWFkZSB0aGUgd3JpdGUgYnVsayB1c2UgYW4gdXJiIHBvb2wgdG8gZW5hYmxlIGxhcmdlciB0cmFuc2ZlcnMgd2l0aAorICoJZmV3ZXIgY2FsbHMgdG8gdGhlIGRyaXZlci4KKyAqCUZpeGVkIG9mZiBieSBvbmUgYnVnIGluIGFjbCBwa3QgcmVjZWl2ZQorICoJTWFkZSBwYWNrZXQgY291bnRlcnMgc3BlY2lmaWMgdG8gZWFjaCBibHVldG9vdGggZGV2aWNlIAorICoJQWRkZWQgY2hlY2tzIGZvciB6ZXJvIGxlbmd0aCBjYWxsYmFja3MKKyAqCUFkZGVkIGJ1ZmZlcnMgZm9yIGludCBhbmQgYnVsayBwYWNrZXRzLiAgSGFkIHRvIGRvIHRoaXMgb3RoZXJ3aXNlIAorICoJcGFja2V0IHR5cGVzIGNvdWxkIGludGVybWluZ2xlLgorICoJTWFkZSBhIGNvbnRyb2wgdXJiIHBvb2wgZm9yIHRoZSBjb250cm9sIG1lc3NhZ2VzLgorICoKKyAqICgwNy8xMS8yMDAwKSBWZXJzaW9uIDAuMiBna2gKKyAqCUZpeGVkIGEgc21hbGwgYnVnIGZvdW5kIGJ5IE5pbHMgRmFlcmJlciBpbiB0aGUgdXNiX2JsdWV0b290aF9wcm9iZSAKKyAqCWZ1bmN0aW9uLgorICoKKyAqICgwNy8wOS8yMDAwKSBWZXJzaW9uIDAuMSBna2gKKyAqCUluaXRpYWwgcmVsZWFzZS4gSGFzIHN1cHBvcnQgZm9yIHNlbmRpbmcgQUNMIGRhdGEgKHdoaWNoIGlzIHJlYWxseSBqdXN0CisgKglhIEhDSSBmcmFtZS4pIFJhdyBIQ0kgY29tbWFuZHMgYW5kIEhDSSBldmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKglBIGlvY3RsIHdpbGwgcHJvYmFibHkgYmUgbmVlZGVkIGZvciB0aGUgSENJIGNvbW1hbmRzIGFuZCBldmVudHMgaW4gdGhlCisgKglmdXR1cmUuIEFsbCBpc29jaCBlbmRwb2ludHMgYXJlIGlnbm9yZWQgYXQgdGhpcyB0aW1lIGFsc28uCisgKglUaGlzIGRyaXZlciBzaG91bGQgd29yayBmb3IgYWxsIGN1cnJlbnRseSBzaGlwcGluZyBVU0IgQmx1ZXRvb3RoIAorICoJZGV2aWNlcyBhdCB0aGlzIHRpbWUgOikKKyAqIAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjZGVmaW5lIERFQlVHCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjEzIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIE1hcmsgRG91Z2xhcyBDb3JuZXIiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQmx1ZXRvb3RoIHR0eSBkcml2ZXIiCisKKy8qIGRlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGhhcmR3YXJlIHRoYXQgaXMgbm90IGdvb2QgKi8KKy8qI2RlZmluZQlCVEJVR0dZSEFSRFdBUkUgKi8KKworLyogQ2xhc3MsIFN1YkNsYXNzLCBhbmQgUHJvdG9jb2wgY29kZXMgdGhhdCBkZXNjcmliZSBhIEJsdWV0b290aCBkZXZpY2UgKi8KKyNkZWZpbmUgV0lSRUxFU1NfQ0xBU1NfQ09ERQkJCTB4ZTAKKyNkZWZpbmUgUkZfU1VCQ0xBU1NfQ09ERQkJCTB4MDEKKyNkZWZpbmUgQkxVRVRPT1RIX1BST0dSQU1NSU5HX1BST1RPQ09MX0NPREUJMHgwMQorCisKKyNkZWZpbmUgQkxVRVRPT1RIX1RUWV9NQUpPUgkyMTYJLyogcmVhbCBkZXZpY2Ugbm9kZSBtYWpvciBpZCAqLworI2RlZmluZSBCTFVFVE9PVEhfVFRZX01JTk9SUwkyNTYJLyogd2hvbGUgbG90dGEgYmx1ZXRvb3RoIGRldmljZXMgKi8KKworI2RlZmluZSBVU0JfQkxVRVRPT1RIX01BR0lDCTB4NmQwMgkvKiBtYWdpYyBudW1iZXIgZm9yIGJsdWV0b290aCBzdHJ1Y3QgKi8KKworI2RlZmluZSBCTFVFVE9PVEhfQ09OVFJPTF9SRVFVRVNUX1RZUEUJMHgyMAorCisvKiBCbHVldG9vdGggcGFja2V0IHR5cGVzICovCisjZGVmaW5lIENNRF9QS1QJCQkweDAxCisjZGVmaW5lIEFDTF9QS1QJCQkweDAyCisjZGVmaW5lIFNDT19QS1QJCQkweDAzCisjZGVmaW5lIEVWRU5UX1BLVAkJMHgwNAorI2RlZmluZSBFUlJPUl9QS1QJCTB4MDUKKyNkZWZpbmUgTkVHX1BLVAkJCTB4MDYKKworLyogTWVzc2FnZSBzaXplcyAqLworI2RlZmluZSBNQVhfRVZFTlRfU0laRQkJMHhGRgorI2RlZmluZSBFVkVOVF9IRFJfU0laRQkJMwkvKiAyIGZvciB0aGUgaGVhZGVyICsgMSBmb3IgdGhlIHR5cGUgaW5kaWNhdG9yICovCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCShNQVhfRVZFTlRfU0laRSArIEVWRU5UX0hEUl9TSVpFKQorCisjZGVmaW5lIE1BWF9BQ0xfU0laRQkJMHhGRkZGCisjZGVmaW5lIEFDTF9IRFJfU0laRQkJNQkvKiA0IGZvciB0aGUgaGVhZGVyICsgMSBmb3IgdGhlIHR5cGUgaW5kaWNhdG9yICovCisjZGVmaW5lIEFDTF9CVUZGRVJfU0laRQkJKE1BWF9BQ0xfU0laRSArIEFDTF9IRFJfU0laRSkKKworLyogcGFyaXR5IGNoZWNrIGZsYWcgKi8KKyNkZWZpbmUgUkVMRVZBTlRfSUZMQUcoaWZsYWcpCShpZmxhZyAmIChJR05CUkt8QlJLSU5UfElHTlBBUnxQQVJNUkt8SU5QQ0spKQorCisjZGVmaW5lIENIQVIySU5UMTYoYzEsYzApCSgoKHUzMikoKGMxKSAmIDB4ZmYpIDw8IDgpICsgKHUzMikoKGMwKSAmIDB4ZmYpKQorCisjZGVmaW5lIE5VTV9CVUxLX1VSQlMJCTI0CisjZGVmaW5lIE5VTV9DT05UUk9MX1VSQlMJMTYKKworc3RydWN0IHVzYl9ibHVldG9vdGggeworCWludAkJCW1hZ2ljOworCXN0cnVjdCB1c2JfZGV2aWNlICoJZGV2OworCXN0cnVjdCB0dHlfZHJpdmVyICoJdHR5X2RyaXZlcjsJLyogdGhlIHR0eV9kcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKgl0dHk7CQkvKiB0aGUgY29ycmVzcG9uZGluZyB0dHkgZm9yIHRoaXMgcG9ydCAqLworCisJdW5zaWduZWQgY2hhcgkJbWlub3I7CQkvKiB0aGUgc3RhcnRpbmcgbWlub3IgbnVtYmVyIGZvciB0aGlzIGRldmljZSAqLworCWludAkJCXRocm90dGxlOwkvKiB0aHJvdHRsZWQgYnkgdHR5IGxheWVyICovCisJaW50CQkJb3Blbl9jb3VudDsKKwkKKwlfX3U4CQkJY29udHJvbF9vdXRfYkludGVyZmFjZU51bTsKKwlzdHJ1Y3QgdXJiICoJCWNvbnRyb2xfdXJiX3Bvb2xbTlVNX0NPTlRST0xfVVJCU107CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlkcltOVU1fQ09OVFJPTF9VUkJTXTsKKworCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICoJCWludGVycnVwdF9pbl91cmI7CisJX191OAkJCWludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJX191OAkJCWludGVycnVwdF9pbl9pbnRlcnZhbDsKKwlpbnQJCQlpbnRlcnJ1cHRfaW5fYnVmZmVyX3NpemU7CisKKwl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfaW5fYnVmZmVyOworCXN0cnVjdCB1cmIgKgkJcmVhZF91cmI7CisJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCWludAkJCWJ1bGtfaW5fYnVmZmVyX3NpemU7CisKKwlpbnQJCQlidWxrX291dF9idWZmZXJfc2l6ZTsKKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAkJCXdvcms7CS8qIHdvcmsgcXVldWUgZW50cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KKwkKKwl1bnNpZ25lZCBpbnQJCWludF9wYWNrZXRfcG9zOworCXVuc2lnbmVkIGNoYXIJCWludF9idWZmZXJbRVZFTlRfQlVGRkVSX1NJWkVdOworCXVuc2lnbmVkIGludAkJYnVsa19wYWNrZXRfcG9zOworCXVuc2lnbmVkIGNoYXIJCWJ1bGtfYnVmZmVyW0FDTF9CVUZGRVJfU0laRV07CS8qIDY0ayBwcmVhbGxvY2F0ZWQsIGZpeD8gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCWxvY2s7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgIGJsdWV0b290aF9vcGVuCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2Nsb3NlCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgYmx1ZXRvb3RoX3dyaXRlCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgYmx1ZXRvb3RoX3dyaXRlX3Jvb20JKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCAgYmx1ZXRvb3RoX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfdGhyb3R0bGUJCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGJsdWV0b290aF91bnRocm90dGxlCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGJsdWV0b290aF9pb2N0bAkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfc2V0X3Rlcm1pb3MJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpOworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfaW50X2NhbGxiYWNrCQkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfY3RybF9jYWxsYmFjawkJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBpbnQgdXNiX2JsdWV0b290aF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB1c2JfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3QJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2JsdWV0b290aF9pZHMgW10gPSB7CisJeyBVU0JfREVWSUNFX0lORk8oV0lSRUxFU1NfQ0xBU1NfQ09ERSwgUkZfU1VCQ0xBU1NfQ09ERSwgQkxVRVRPT1RIX1BST0dSQU1NSU5HX1BST1RPQ09MX0NPREUpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX2JsdWV0b290aF9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2JsdWV0b290aF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImJsdWV0dHkiLAorCS5wcm9iZSA9CXVzYl9ibHVldG9vdGhfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNiX2JsdWV0b290aF9pZHMsCit9OworCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIJKmJsdWV0b290aF90dHlfZHJpdmVyOworc3RhdGljIHN0cnVjdCB1c2JfYmx1ZXRvb3RoCSpibHVldG9vdGhfdGFibGVbQkxVRVRPT1RIX1RUWV9NSU5PUlNdOworCisKK3N0YXRpYyBpbmxpbmUgaW50IGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCwgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJaWYgKCFibHVldG9vdGgpIHsKKwkJZGJnKCIlcyAtIGJsdWV0b290aCA9PSBOVUxMIiwgZnVuY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChibHVldG9vdGgtPm1hZ2ljICE9IFVTQl9CTFVFVE9PVEhfTUFHSUMpIHsKKwkJZGJnKCIlcyAtIGJhZCBtYWdpYyBudW1iZXIgZm9yIGJsdWV0b290aCIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9ibHVldG9vdGgqIGdldF91c2JfYmx1ZXRvb3RoIChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoLCBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlpZiAoIWJsdWV0b290aCB8fCAKKwkgICAgYmx1ZXRvb3RoX3BhcmFub2lhX2NoZWNrIChibHVldG9vdGgsIGZ1bmN0aW9uKSkgeyAKKwkJLyogdGhlbiBzYXkgdGhhdCB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgdXNiX2JsdWV0b290aCB0aGluZywgd2hpY2ggd2lsbAorCQkgKiBlbmQgdXAgZ2VuZXJhdGluZyAtRU5PREVWIHJldHVybiB2YWx1ZXMgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGJsdWV0b290aDsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfYmx1ZXRvb3RoICpnZXRfYmx1ZXRvb3RoX2J5X2luZGV4IChpbnQgaW5kZXgpCit7CisJcmV0dXJuIGJsdWV0b290aF90YWJsZVtpbmRleF07Cit9CisKKworc3RhdGljIGludCBibHVldG9vdGhfY3RybF9tc2cgKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGgsIGludCByZXF1ZXN0LCBpbnQgdmFsdWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyID0gTlVMTDsKKwlpbnQgaTsKKwlpbnQgc3RhdHVzOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogdHJ5IHRvIGZpbmQgYSBmcmVlIHVyYiBpbiBvdXIgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTF9VUkJTOyArK2kpIHsKKwkJaWYgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJdXJiID0gYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldOworCQkJZHIgPSAmYmx1ZXRvb3RoLT5kcltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICh1cmIgPT0gTlVMTCkgeworCQlkYmcgKCIlcyAtIG5vIGZyZWUgdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGtlZXAgaW5jcmVhc2luZyB0aGUgdXJiIHRyYW5zZmVyIGJ1ZmZlciB0byBmaXQgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllcnIgKCIlcyAtIG91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IGxlbikgeworCQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllcnIgKCIlcyAtIG91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBsZW4pOworCisJZHItPmJSZXF1ZXN0VHlwZT0gQkxVRVRPT1RIX0NPTlRST0xfUkVRVUVTVF9UWVBFOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KCh1MTYpIHZhbHVlKTsKKwlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoKHUxNikgYmx1ZXRvb3RoLT5jb250cm9sX291dF9iSW50ZXJmYWNlTnVtKTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KCh1MTYpIGxlbik7CisJCisJdXNiX2ZpbGxfY29udHJvbF91cmIgKHVyYiwgYmx1ZXRvb3RoLT5kZXYsIHVzYl9zbmRjdHJscGlwZShibHVldG9vdGgtPmRldiwgMCksCisJCQkgICh1bnNpZ25lZCBjaGFyKilkciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbiwgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2ssIGJsdWV0b290aCk7CisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChzdGF0dXMpCisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihjb250cm9sKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGJsdWV0b290aF9vcGVuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aDsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBwb2ludGVyIGluY2FzZSBzb21ldGhpbmcgZmFpbHMgKi8KKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCS8qIGdldCB0aGUgYmx1ZXRvb3RoIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dHkgcG9pbnRlciAqLworCWJsdWV0b290aCA9IGdldF9ibHVldG9vdGhfYnlfaW5kZXggKHR0eS0+aW5kZXgpOworCisJaWYgKGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoYmx1ZXRvb3RoLCBfX0ZVTkNUSU9OX18pKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRvd24gKCZibHVldG9vdGgtPmxvY2spOworIAorCSsrYmx1ZXRvb3RoLT5vcGVuX2NvdW50OworCWlmIChibHVldG9vdGgtPm9wZW5fY291bnQgPT0gMSkgeworCQkvKiBzZXQgdXAgb3VyIHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIgcmVtZW1iZXIgb3VyIG9iamVjdCwgYW5kIHVzIGl0ICovCisJCXR0eS0+ZHJpdmVyX2RhdGEgPSBibHVldG9vdGg7CisJCWJsdWV0b290aC0+dHR5ID0gdHR5OworCisJCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YSB0aHJvdWdoLCAKKwkgCSogb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YQorCSAJKiBjYW4gZ2V0IGxvc3QuICovCisJCWJsdWV0b290aC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJCisJCS8qIFJlc2V0IHRoZSBwYWNrZXQgcG9zaXRpb24gY291bnRlcnMgKi8KKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKworI2lmbmRlZiBCVEJVR0dZSEFSRFdBUkUKKwkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIgKGJsdWV0b290aC0+cmVhZF91cmIsIGJsdWV0b290aC0+ZGV2LCAKKwkJCSAgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsCisJCQkgICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLAorCQkJICAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworI2VuZGlmCisJCXVzYl9maWxsX2ludF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYiwgYmx1ZXRvb3RoLT5kZXYsCisJCQkgICAgICB1c2JfcmN2aW50cGlwZShibHVldG9vdGgtPmRldiwgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcl9zaXplLAorCQkJICAgICAgYmx1ZXRvb3RoX2ludF9jYWxsYmFjaywgYmx1ZXRvb3RoLAorCQkJICAgICAgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludGVycnVwdCBpbikgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKwkKKwl1cCgmYmx1ZXRvb3RoLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9jbG9zZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZG93biAoJmJsdWV0b290aC0+bG9jayk7CisgCisJLS1ibHVldG9vdGgtPm9wZW5fY291bnQ7CisJaWYgKGJsdWV0b290aC0+b3Blbl9jb3VudCA8PSAwKSB7CisJCWJsdWV0b290aC0+b3Blbl9jb3VudCA9IDA7CisKKwkJLyogc2h1dGRvd24gYW55IGluLWZsaWdodCB1cmJzIHRoYXQgd2Uga25vdyBhYm91dCAqLworCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+cmVhZF91cmIpOworCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7CisJfQorCXVwKCZibHVldG9vdGgtPmxvY2spOworfQorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3dyaXRlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqdGVtcF9idWZmZXIgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKnVyYl9idWZmZXI7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkYmcoIiVzIC0gJWQgYnl0ZShzKSIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNvdW50ID09IDEpIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb25seSBpbmNsdWRlZCB0eXBlICVkIiwgX19GVU5DVElPTl9fLCBidWZbMF0pOworCQlyZXR1cm4gMTsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJcHJpbnRrICgiJS4yeCAiLCBidWZbaV0pOworCX0KKwlwcmludGsgKCJcbiIpOworI2VuZGlmCisKKwljdXJyZW50X2J1ZmZlciA9IGJ1ZjsKKworCXN3aXRjaCAoKmN1cnJlbnRfYnVmZmVyKSB7CisJCS8qIEZpcnN0IGJ5dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHBhY2tldCAqLworCQljYXNlIENNRF9QS1Q6CisJCQkvKiBkYmcoIiVzLSBTZW5kIGNtZF9wa3QgbGVuOiVkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7Ki8KKworCQkJcmV0dmFsID0gYmx1ZXRvb3RoX2N0cmxfbXNnIChibHVldG9vdGgsIDB4MDAsIDB4MDAsICZjdXJyZW50X2J1ZmZlclsxXSwgY291bnQtMSk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJcmV0dmFsID0gY291bnQ7CisJCQlicmVhazsKKworCQljYXNlIEFDTF9QS1Q6CisJCQkrK2N1cnJlbnRfYnVmZmVyOworCQkJLS1jb3VudDsKKworCQkJdXJiX2J1ZmZlciA9IGttYWxsb2MgKGNvdW50LCBHRlBfQVRPTUlDKTsKKwkJCWlmICghdXJiX2J1ZmZlcikgeworCQkJCWRldl9lcnIoJmJsdWV0b290aC0+ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghdXJiKSB7CisJCQkJZGV2X2VycigmYmx1ZXRvb3RoLT5kZXYtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKKwkJCQlrZnJlZSh1cmJfYnVmZmVyKTsKKwkJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCW1lbWNweSAodXJiX2J1ZmZlciwgY3VycmVudF9idWZmZXIsIGNvdW50KTsKKworCQkJLyogYnVpbGQgdXAgb3VyIHVyYiAqLworCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBibHVldG9vdGgtPmRldiwgCisJCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LAorCQkJCQkJICAJICBibHVldG9vdGgtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgdXJiX2J1ZmZlciwKKwkJCQkJICBjb3VudCwKKwkJCQkJICBibHVldG9vdGhfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCQkJICBibHVldG9vdGgpOworCisKKwkJCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisKKwkJCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKKwkJCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCQkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQkJcmV0dmFsID0gY291bnQgKyAxOworCQkJYnJlYWs7CisJCQorCQlkZWZhdWx0IDoKKwkJCWRiZygiJXMgLSB1bnN1cHBvcnRlZCAoYXQgdGhpcyB0aW1lKSB3cml0ZSB0eXBlIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisKK2V4aXQ6CisJa2ZyZWUgKHRlbXBfYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9IAorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3dyaXRlX3Jvb20gKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyoKKwkgKiBXZSByZWFsbHkgY2FuIHRha2UgYW55dGhpbmcgdGhlIHVzZXIgdGhyb3dzIGF0IHVzCisJICogYnV0IGxldCdzIHBpY2sgYSBuaWNlIGJpZyBudW1iZXIgdG8gdGVsbCB0aGUgdHR5CisJICogbGF5ZXIgdGhhdCB3ZSBoYXZlIGxvdHMgb2YgZnJlZSBzcGFjZQorCSAqLworCXJldHVybiAyMDQ4OworfQorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiAKKwkgKiBXZSBjYW4ndCByZWFsbHkgYWNjb3VudCBmb3IgaG93IG11Y2ggZGF0YSB3ZQorCSAqIGhhdmUgc2VudCBvdXQsIGJ1dCBoYXNuJ3QgbWFkZSBpdCB0aHJvdWdoIHRvIHRoZQorCSAqIGRldmljZSwgc28ganVzdCB0ZWxsIHRoZSB0dHkgbGF5ZXIgdGhhdCBldmVyeXRoaW5nCisJICogaXMgZmx1c2hlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfdGhyb3R0bGUgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwkKKwlkYmcoIiVzIHVuc3VwcG9ydGVkIChhdCB0aGlzIHRpbWUpIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfdW50aHJvdHRsZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyB1bnN1cHBvcnRlZCAoYXQgdGhpcyB0aW1lKSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworc3RhdGljIGludCBibHVldG9vdGhfaW9jdGwgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGJnKCIlcyAtIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEZJWE1FISEhICovCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfc2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZJWE1FISEhICovCisKKwlyZXR1cm47Cit9CisKKworI2lmZGVmIEJUQlVHR1lIQVJEV0FSRQordm9pZCBidHVzYl9lbmFibGVfYnVsa19yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpeworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKwlpbnQgcmVzdWx0OworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKGJsdWV0b290aC0+cmVhZF91cmIpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgYmx1ZXRvb3RoLT5kZXYsIAorCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LCBibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSwgCisJCQkgICAgICBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWVyciAoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KK30KKwordm9pZCBidHVzYl9kaXNhYmxlX2J1bGtfcmVhZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KXsKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGJsdWV0b290aC0+cmVhZF91cmIpICYmIChibHVldG9vdGgtPnJlYWRfdXJiLT5hY3R1YWxfbGVuZ3RoKSkKKwkJdXNiX2tpbGxfdXJiKGJsdWV0b290aC0+cmVhZF91cmIpOworfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB1cmIgY2FsbGJhY2sgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXVyYi0+Y29udGV4dCwgX19GVU5DVElPTl9fKTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZTsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlkYmcoIiVzIC0gYmFkIGJsdWV0b290aCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFjb3VudCkgeworCQlkYmcoIiVzIC0gemVybyBsZW5ndGggaW50IiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCisjaWZkZWYgREVCVUcKKwlpZiAoY291bnQpIHsKKwkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6ICVzLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKKwkJfQorCQlwcmludGsgKCJcbiIpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQlRCVUdHWUhBUkRXQVJFCisJaWYgKChjb3VudCA+PSAyKSAmJiAoZGF0YVswXSA9PSAweEZGKSAmJiAoZGF0YVsxXSA9PSAweDAwKSkgeworCQlkYXRhICs9IDI7CisJCWNvdW50IC09IDI7CisJfQorCWlmIChjb3VudCA9PSAwKSB7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisjZW5kaWYKKwkvKiBXZSBhZGQgIGEgcGFja2V0IHR5cGUgaWRlbnRpZmllciB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2gKKwkgICBIQ0kgZnJhbWUuICBUaGlzIG1ha2VzIHRoZSBkYXRhIGluIHRoZSB0dHkgbG9vayBsaWtlIGEKKwkgICBzZXJpYWwgVVNCIGRldmljZXMuICBFYWNoIEhDSSBmcmFtZSBjYW4gYmUgYnJva2VuIGFjcm9zcworCSAgIG11bHRpcGxlIFVSQnMgc28gd2UgYnVmZmVyIHRoZW0gdW50aWwgd2UgaGF2ZSBhIGZ1bGwgaGNpCisJICAgcGFja2V0ICovCisKKwlpZiAoIWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MpIHsKKwkJYmx1ZXRvb3RoLT5pbnRfYnVmZmVyWzBdID0gRVZFTlRfUEtUOworCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zKys7CisJfQorCQorCWlmIChibHVldG9vdGgtPmludF9wYWNrZXRfcG9zICsgY291bnQgPiBFVkVOVF9CVUZGRVJfU0laRSkgeworCQllcnIoIiVzIC0gZXhjZWVkZWQgRVZFTlRfQlVGRkVSX1NJWkUiLCBfX0ZVTkNUSU9OX18pOworCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSAoJmJsdWV0b290aC0+aW50X2J1ZmZlcltibHVldG9vdGgtPmludF9wYWNrZXRfcG9zXSwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50KTsKKwlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zICs9IGNvdW50OworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpZiAoYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA+PSBFVkVOVF9IRFJfU0laRSkKKwkJcGFja2V0X3NpemUgPSBibHVldG9vdGgtPmludF9idWZmZXJbMl07CisJZWxzZQorCQlnb3RvIGV4aXQ7CisKKwlpZiAocGFja2V0X3NpemUgKyBFVkVOVF9IRFJfU0laRSA8IGJsdWV0b290aC0+aW50X3BhY2tldF9wb3MpIHsKKwkJZXJyKCIlcyAtIHBhY2tldCB3YXMgdG9vIGxvbmciLCBfX0ZVTkNUSU9OX18pOworCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwYWNrZXRfc2l6ZSArIEVWRU5UX0hEUl9TSVpFID09IGJsdWV0b290aC0+aW50X3BhY2tldF9wb3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJsdWV0b290aC0+aW50X3BhY2tldF9wb3M7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbSAqLworCQkJaWYgKGJsdWV0b290aC0+dHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaChibHVldG9vdGgtPnR0eSk7CisJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcihibHVldG9vdGgtPnR0eSwgYmx1ZXRvb3RoLT5pbnRfYnVmZmVyW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaChibHVldG9vdGgtPnR0eSk7CisKKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil1cmItPmNvbnRleHQsIF9fRlVOQ1RJT05fXyk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXVyYi0+Y29udGV4dCwgX19GVU5DVElPTl9fKTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZTsKKwlpbnQgcmVzdWx0OworCisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKSB7ICAgICAgICAgICAgICAgICAgIAorCQkJZGJnKCIlcyAtIFVSQiBjYW5jZWxlZCwgd29uJ3QgcmVzY2hlZHVsZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwkJZ290byBleGl0OworCX0KKworCWlmICghY291bnQpIHsKKwkJZGJnKCIlcyAtIHplcm8gbGVuZ3RoIHJlYWQgYnVsayIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKyNpZmRlZiBERUJVRworCWlmIChjb3VudCkgeworCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogJXMtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCQl9CisJCXByaW50ayAoIlxuIik7CisJfQorI2VuZGlmCisjaWZkZWYgQlRCVUdHWUhBUkRXQVJFCisJaWYgKChjb3VudCA9PSA0KSAmJiAoZGF0YVswXSA9PSAweDAwKSAmJiAoZGF0YVsxXSA9PSAweDAwKQorCSAgICAmJiAoZGF0YVsyXSA9PSAweDAwKSAmJiAoZGF0YVszXSA9PSAweDAwKSkgeworCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQl1c2JfZmlsbF9idWxrX3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBibHVldG9vdGgtPmRldiwgCisJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciwgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLCAKKwkJCSAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZXJyICgiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyogV2UgYWRkICBhIHBhY2tldCB0eXBlIGlkZW50aWZpZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoCisJICAgSENJIGZyYW1lLiAgVGhpcyBtYWtlcyB0aGUgZGF0YSBpbiB0aGUgdHR5IGxvb2sgbGlrZSBhCisJICAgc2VyaWFsIFVTQiBkZXZpY2VzLiAgRWFjaCBIQ0kgZnJhbWUgY2FuIGJlIGJyb2tlbiBhY3Jvc3MKKwkgICBtdWx0aXBsZSBVUkJzIHNvIHdlIGJ1ZmZlciB0aGVtIHVudGlsIHdlIGhhdmUgYSBmdWxsIGhjaQorCSAgIHBhY2tldCAqLworCQorCWlmICghYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MpIHsKKwkJYmx1ZXRvb3RoLT5idWxrX2J1ZmZlclswXSA9IEFDTF9QS1Q7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zKys7CisJfQorCisJaWYgKGJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zICsgY291bnQgPiBBQ0xfQlVGRkVSX1NJWkUpIHsKKwkJZXJyKCIlcyAtIGV4Y2VlZGVkIEFDTF9CVUZGRVJfU0laRSIsIF9fRlVOQ1RJT05fXyk7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSAoJmJsdWV0b290aC0+YnVsa19idWZmZXJbYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3NdLAorCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQpOworCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zICs9IGNvdW50OworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpZiAoYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgPj0gQUNMX0hEUl9TSVpFKSB7CisJCXBhY2tldF9zaXplID0gQ0hBUjJJTlQxNihibHVldG9vdGgtPmJ1bGtfYnVmZmVyWzRdLGJsdWV0b290aC0+YnVsa19idWZmZXJbM10pOworCX0gZWxzZSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocGFja2V0X3NpemUgKyBBQ0xfSERSX1NJWkUgPCBibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcykgeworCQllcnIoIiVzIC0gcGFja2V0IHdhcyB0b28gbG9uZyIsIF9fRlVOQ1RJT05fXyk7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwYWNrZXRfc2l6ZSArIEFDTF9IRFJfU0laRSA9PSBibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcykgeworCQlmb3IgKGkgPSAwOyBpIDwgYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3M7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmIChibHVldG9vdGgtPnR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goYmx1ZXRvb3RoLT50dHkpOworCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoYmx1ZXRvb3RoLT50dHksIGJsdWV0b290aC0+YnVsa19idWZmZXJbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKGJsdWV0b290aC0+dHR5KTsKKwkJYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgPSAwOworCX0JCisKK2V4aXQ6CisJaWYgKCFibHVldG9vdGggfHwgIWJsdWV0b290aC0+b3Blbl9jb3VudCkKKwkJcmV0dXJuOworCisJdXNiX2ZpbGxfYnVsa191cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgYmx1ZXRvb3RoLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyLCBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyX3NpemUsIAorCQkgICAgICBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpCisJCWVyciAoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil1cmItPmNvbnRleHQsIF9fRlVOQ1RJT05fXyk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogd2FrZSB1cCBvdXIgbGl0dGxlIGZ1bmN0aW9uIHRvIGxldCB0aGUgdHR5IGxheWVyIGtub3cgdGhhdCBzb21ldGhpbmcgaGFwcGVuZWQgKi8KKwlzY2hlZHVsZV93b3JrKCZibHVldG9vdGgtPndvcmspOworfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKilwcml2YXRlLCBfX0ZVTkNUSU9OX18pOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkKKwkJcmV0dXJuOworCisJdHR5X3dha2V1cChibHVldG9vdGgtPnR0eSk7Cit9CisKKworc3RhdGljIGludCB1c2JfYmx1ZXRvb3RoX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludFs4XTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfaW5fZW5kcG9pbnRbOF07CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX291dF9lbmRwb2ludFs4XTsKKwlpbnQgY29udHJvbF9vdXRfZW5kcG9pbnQ7CisKKwlpbnQgbWlub3I7CisJaW50IGJ1ZmZlcl9zaXplOworCWludCBpOworCWludCBudW1faW50ZXJydXB0X2luID0gMDsKKwlpbnQgbnVtX2J1bGtfaW4gPSAwOworCWludCBudW1fYnVsa19vdXQgPSAwOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJY29udHJvbF9vdXRfZW5kcG9pbnQgPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCS8qIGZpbmQgdGhlIGVuZHBvaW50cyB0aGF0IHdlIG5lZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGJ1bGsgaW4iKTsKKwkJCWJ1bGtfaW5fZW5kcG9pbnRbbnVtX2J1bGtfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX2luOworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgYnVsayBvdXQiKTsKKwkJCWJ1bGtfb3V0X2VuZHBvaW50W251bV9idWxrX291dF0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfb3V0OworCQl9CisKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgaW50ZXJydXB0IGluIik7CisJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbbnVtX2ludGVycnVwdF9pbl0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2ludGVycnVwdF9pbjsKKwkJfQorCX0KKworCS8qIGFjY29yZGluZyB0byB0aGUgc3BlYywgd2UgY2FuIG9ubHkgaGF2ZSAxIGJ1bGtfaW4sIDEgYnVsa19vdXQsIGFuZCAxIGludGVycnVwdF9pbiBlbmRwb2ludHMgKi8KKwlpZiAoKG51bV9idWxrX2luICE9IDEpIHx8CisJICAgIChudW1fYnVsa19vdXQgIT0gMSkgfHwKKwkgICAgKG51bV9pbnRlcnJ1cHRfaW4gIT0gMSkpIHsKKwkJZGJnICgiJXMgLSBpbXByb3BlciBudW1iZXIgb2YgZW5kcG9pbnRzLiBCbHVldG9vdGggZHJpdmVyIG5vdCBib3VuZC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpbmZvKCJVU0IgQmx1ZXRvb3RoIGNvbnZlcnRlciBkZXRlY3RlZCIpOworCisJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgQkxVRVRPT1RIX1RUWV9NSU5PUlMgJiYgYmx1ZXRvb3RoX3RhYmxlW21pbm9yXTsgKyttaW5vcikKKwkJOworCWlmIChibHVldG9vdGhfdGFibGVbbWlub3JdKSB7CisJCWVycigiTm8gbW9yZSBmcmVlIEJsdWV0b290aCBkZXZpY2VzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGJsdWV0b290aCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfYmx1ZXRvb3RoKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigiT3V0IG9mIG1lbW9yeSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoYmx1ZXRvb3RoLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9ibHVldG9vdGgpKTsKKworCWJsdWV0b290aC0+bWFnaWMgPSBVU0JfQkxVRVRPT1RIX01BR0lDOworCWJsdWV0b290aC0+ZGV2ID0gZGV2OworCWJsdWV0b290aC0+bWlub3IgPSBtaW5vcjsKKwlJTklUX1dPUksoJmJsdWV0b290aC0+d29yaywgYmx1ZXRvb3RoX3NvZnRpbnQsIGJsdWV0b290aCk7CisJaW5pdF9NVVRFWCgmYmx1ZXRvb3RoLT5sb2NrKTsKKworCS8qIHJlY29yZCB0aGUgaW50ZXJmYWNlIG51bWJlciBmb3IgdGhlIGNvbnRyb2wgb3V0ICovCisJYmx1ZXRvb3RoLT5jb250cm9sX291dF9iSW50ZXJmYWNlTnVtID0gY29udHJvbF9vdXRfZW5kcG9pbnQ7CisJCisJLyogY3JlYXRlIG91ciBjb250cm9sIG91dCB1cmIgcG9vbCAqLyAKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSB7CisJCXN0cnVjdCB1cmIgICp1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJCWJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSA9IHVyYjsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJZW5kcG9pbnQgPSBidWxrX2luX2VuZHBvaW50WzBdOworCWJsdWV0b290aC0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+cmVhZF91cmIpIHsKKwkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCWJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwlibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlciIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7CisKKwllbmRwb2ludCA9IGJ1bGtfb3V0X2VuZHBvaW50WzBdOworCWJsdWV0b290aC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJYmx1ZXRvb3RoLT5idWxrX291dF9idWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgKiAyOworCisJZW5kcG9pbnQgPSBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbMF07CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYikgeworCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOworCWJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXIiKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJdXNiX2ZpbGxfaW50X3VyYihibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIsIGRldiwgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCSAgICAgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCBidWZmZXJfc2l6ZSwgYmx1ZXRvb3RoX2ludF9jYWxsYmFjaywKKwkJICAgICBibHVldG9vdGgsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgZGV2ZnMgbm9kZXMgZm9yIHRoaXMgZGV2aWNlIGFuZCBsZXQgdGhlIHVzZXIga25vdyB3aGF0IGJsdWV0b290aHMgd2UgYXJlIGJvdW5kIHRvICovCisJdHR5X3JlZ2lzdGVyX2RldmljZSAoYmx1ZXRvb3RoX3R0eV9kcml2ZXIsIG1pbm9yLCAmaW50Zi0+ZGV2KTsKKwlpbmZvKCJCbHVldG9vdGggY29udmVydGVyIG5vdyBhdHRhY2hlZCB0byB0dHlVQiVkIChvciB1c2IvdHR1Yi8lZCBmb3IgZGV2ZnMpIiwgbWlub3IsIG1pbm9yKTsKKworCWJsdWV0b290aF90YWJsZVttaW5vcl0gPSBibHVldG9vdGg7CisKKwkvKiBzdWNjZXNzICovCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgYmx1ZXRvb3RoKTsKKwlyZXR1cm4gMDsKKworcHJvYmVfZXJyb3I6CisJaWYgKGJsdWV0b290aC0+cmVhZF91cmIpCisJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5yZWFkX3VyYik7CisJaWYgKGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpCisJCWtmcmVlIChibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyKTsKKwlpZiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7CisJaWYgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcikKKwkJa2ZyZWUgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MX1VSQlM7ICsraSkgCisJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pIHsKKwkJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZSAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pOworCQl9CisKKwlibHVldG9vdGhfdGFibGVbbWlub3JdID0gTlVMTDsKKworCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLworCWtmcmVlIChibHVldG9vdGgpOworCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyB2b2lkIHVzYl9ibHVldG9vdGhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJaW50IGk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlpZiAoYmx1ZXRvb3RoKSB7CisJCWlmICgoYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSAmJiAoYmx1ZXRvb3RoLT50dHkpKQorCQkJdHR5X2hhbmd1cChibHVldG9vdGgtPnR0eSk7CisKKwkJYmx1ZXRvb3RoLT5vcGVuX2NvdW50ID0gMDsKKworCQlpZiAoYmx1ZXRvb3RoLT5yZWFkX3VyYikgeworCQkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPnJlYWRfdXJiKTsKKwkJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5yZWFkX3VyYik7CisJCX0KKwkJaWYgKGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpCisJCQlrZnJlZSAoYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcik7CisKKwkJaWYgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpOworCQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpOworCQl9CisJCWlmIChibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIpCisJCQlrZnJlZSAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKworCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UgKGJsdWV0b290aF90dHlfZHJpdmVyLCBibHVldG9vdGgtPm1pbm9yKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSB7CisJCQlpZiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldKSB7CisJCQkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pOworCQkJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQkJa2ZyZWUgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSk7CisJCQl9CisJCX0KKwkJCisJCWluZm8oIkJsdWV0b290aCBjb252ZXJ0ZXIgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHR0eVVCJWQiLCBibHVldG9vdGgtPm1pbm9yKTsKKworCQlibHVldG9vdGhfdGFibGVbYmx1ZXRvb3RoLT5taW5vcl0gPSBOVUxMOworCisJCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLworCQlrZnJlZSAoYmx1ZXRvb3RoKTsKKwl9IGVsc2UgeworCQlpbmZvKCJkZXZpY2UgZGlzY29ubmVjdGVkIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGJsdWV0b290aF9vcHMgPSB7CisJLm9wZW4gPQkJCWJsdWV0b290aF9vcGVuLAorCS5jbG9zZSA9CQlibHVldG9vdGhfY2xvc2UsCisJLndyaXRlID0JCWJsdWV0b290aF93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlibHVldG9vdGhfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJYmx1ZXRvb3RoX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlibHVldG9vdGhfc2V0X3Rlcm1pb3MsCisJLnRocm90dGxlID0JCWJsdWV0b290aF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlibHVldG9vdGhfdW50aHJvdHRsZSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JYmx1ZXRvb3RoX2NoYXJzX2luX2J1ZmZlciwKK307CisKK3N0YXRpYyBpbnQgdXNiX2JsdWV0b290aF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCS8qIEluaXRpYWxpemUgb3VyIGdsb2JhbCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IEJMVUVUT09USF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJYmx1ZXRvb3RoX3RhYmxlW2ldID0gTlVMTDsKKwl9CisKKwlpbmZvICgiVVNCIEJsdWV0b290aCBzdXBwb3J0IHJlZ2lzdGVyZWQiKTsKKworCWJsdWV0b290aF90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihCTFVFVE9PVEhfVFRZX01JTk9SUyk7CisJaWYgKCFibHVldG9vdGhfdHR5X2RyaXZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSAidXNiLWJsdWV0b290aCI7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5VUIiOworCWJsdWV0b290aF90dHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInVzYi90dHViLyI7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPm1ham9yID0gQkxVRVRPT1RIX1RUWV9NQUpPUjsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOworCWJsdWV0b290aF90dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCWJsdWV0b290aF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnMoYmx1ZXRvb3RoX3R0eV9kcml2ZXIsICZibHVldG9vdGhfb3BzKTsKKwlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlciAoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpKSB7CisJCWVycigiJXMgLSBmYWlsZWQgdG8gcmVnaXN0ZXIgdHR5IGRyaXZlciIsIF9fRlVOQ1RJT05fXyk7CisJCXB1dF90dHlfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBVU0IgZHJpdmVyICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2JfYmx1ZXRvb3RoX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwkJcHV0X3R0eV9kcml2ZXIoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpOworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSBVU0IgYmx1ZXRvb3RoIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHVzYl9ibHVldG9vdGhfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfYmx1ZXRvb3RoX2RyaXZlcik7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwlwdXRfdHR5X2RyaXZlcihibHVldG9vdGhfdHR5X2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQodXNiX2JsdWV0b290aF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9ibHVldG9vdGhfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxZjliNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMCwwICsxLDk0MiBAQAorLyoKKyAqIGNkYy1hY20uYworICoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBBcm1pbiBGdWVyc3QJPGZ1ZXJzdEBpbi50dW0uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgUGF2ZWwgTWFjaGVrCTxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IChjKSAxOTk5IEpvaGFubmVzIEVyZGZlbHQJPGpvaGFubmVzQGVyZGZlbHQuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDAwIFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgT2xpdmVyIE5ldWt1bQk8b2xpdmVyQG5ldWt1bS5uYW1lPgorICoKKyAqIFVTQiBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGRyaXZlciBmb3IgVVNCIG1vZGVtcyBhbmQgSVNETiBhZGFwdGVycworICoKKyAqIFNwb25zb3JlZCBieSBTdVNFCisgKgorICogQ2hhbmdlTG9nOgorICoJdjAuOSAgLSB0aG9yb3VnaCBjbGVhbmluZywgVVJCaWZpY2F0aW9uLCBhbG1vc3QgYSByZXdyaXRlCisgKgl2MC4xMCAtIHNvbWUgbW9yZSBjbGVhbnVwcworICoJdjAuMTEgLSBmaXhlZCBmbG93IGNvbnRyb2wsIHJlYWQgZXJyb3IgZG9lc24ndCBzdG9wIHJlYWRzCisgKgl2MC4xMiAtIGFkZGVkIFRJT0NNIGlvY3RscywgYWRkZWQgYnJlYWsgaGFuZGxpbmcsIG1hZGUgc3RydWN0IGFjbSBrbWFsbG9jZWQKKyAqCXYwLjEzIC0gYWRkZWQgdGVybWlvcywgYWRkZWQgaGFuZ3VwCisgKgl2MC4xNCAtIHNpemVkIGRvd24gc3RydWN0IGFjbQorICoJdjAuMTUgLSBmaXhlZCBmbG93IGNvbnRyb2wgYWdhaW4gLSBjaGFyYWN0ZXJzIGNvdWxkIGJlIGxvc3QKKyAqCXYwLjE2IC0gYWRkZWQgY29kZSBmb3IgbW9kZW1zIHdpdGggc3dhcHBlZCBkYXRhIGFuZCBjb250cm9sIGludGVyZmFjZXMKKyAqCXYwLjE3IC0gYWRkZWQgbmV3IHN0eWxlIHByb2JpbmcKKyAqCXYwLjE4IC0gZml4ZWQgbmV3IHN0eWxlIHByb2JpbmcgZm9yIGRldmljZXMgd2l0aCBtb3JlIGNvbmZpZ3VyYXRpb25zCisgKgl2MC4xOSAtIGZpeGVkIENMT0NBTCBoYW5kbGluZyAodGhhbmtzIHRvIFJpY2hhcmQgU2hpaC1QaW5nIENoYW4pCisgKgl2MC4yMCAtIHN3aXRjaGVkIHRvIHByb2Jpbmcgb24gaW50ZXJmYWNlIChyYXRoZXIgdGhhbiBkZXZpY2UpIGNsYXNzCisgKgl2MC4yMSAtIHJldmVydCB0byBwcm9iaW5nIG9uIGRldmljZSBmb3IgZGV2aWNlcyB3aXRoIG11bHRpcGxlIGNvbmZpZ3MKKyAqCXYwLjIyIC0gcHJvYmUgb25seSB0aGUgY29udHJvbCBpbnRlcmZhY2UuIGlmIHVzYmNvcmUgZG9lc24ndCBjaG9vc2UgdGhlCisgKgkJY29uZmlnIHdlIHdhbnQsIHN5c2FkbWluIGNoYW5nZXMgYkNvbmZpZ3VyYXRpb25WYWx1ZSBpbiBzeXNmcy4KKyAqCXYwLjIzIC0gdXNlIHNvZnRpcnEgZm9yIHJ4IHByb2Nlc3NpbmcsIGFzIG5lZWRlZCBieSB0dHkgbGF5ZXIKKyAqCXYwLjI0IC0gY2hhbmdlIHByb2JlIG1ldGhvZCB0byBldmFsdWF0ZSBDREMgdW5pb24gZGVzY3JpcHRvcgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2RjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImNkYy1hY20uaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMjMiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFybWluIEZ1ZXJzdCwgUGF2ZWwgTWFjaGVrLCBKb2hhbm5lcyBFcmRmZWx0LCBWb2p0ZWNoIFBhdmxpayIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGRyaXZlciBmb3IgVVNCIG1vZGVtcyBhbmQgSVNETiBhZGFwdGVycyIKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFjbV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmFjbV90dHlfZHJpdmVyOworc3RhdGljIHN0cnVjdCBhY20gKmFjbV90YWJsZVtBQ01fVFRZX01JTk9SU107CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKG9wZW5fc2VtKTsKKworI2RlZmluZSBBQ01fUkVBRFkoYWNtKQkoYWNtICYmIGFjbS0+ZGV2ICYmIGFjbS0+dXNlZCkKKworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgQUNNIGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KKworc3RhdGljIGludCBhY21fY3RybF9tc2coc3RydWN0IGFjbSAqYWNtLCBpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW50IHJldHZhbCA9IHVzYl9jb250cm9sX21zZyhhY20tPmRldiwgdXNiX3NuZGN0cmxwaXBlKGFjbS0+ZGV2LCAwKSwKKwkJcmVxdWVzdCwgVVNCX1JUX0FDTSwgdmFsdWUsCisJCWFjbS0+Y29udHJvbC0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCWJ1ZiwgbGVuLCA1MDAwKTsKKwlkYmcoImFjbV9jb250cm9sX21zZzogcnE6IDB4JTAyeCB2YWw6ICUjeCBsZW46ICUjeCByZXN1bHQ6ICVkIiwgcmVxdWVzdCwgdmFsdWUsIGxlbiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKKy8qIGRldmljZXMgYXJlbid0IHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlc2UgcmVxdWVzdHMuCisgKiB0aGUgY2RjIGFjbSBkZXNjcmlwdG9yIHRlbGxzIHdoZXRoZXIgdGhleSBkby4uLgorICovCisjZGVmaW5lIGFjbV9zZXRfY29udHJvbChhY20sIGNvbnRyb2wpIFwKKwlhY21fY3RybF9tc2coYWNtLCBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFLCBjb250cm9sLCBOVUxMLCAwKQorI2RlZmluZSBhY21fc2V0X2xpbmUoYWNtLCBsaW5lKSBcCisJYWNtX2N0cmxfbXNnKGFjbSwgVVNCX0NEQ19SRVFfU0VUX0xJTkVfQ09ESU5HLCAwLCBsaW5lLCBzaXplb2YgKihsaW5lKSkKKyNkZWZpbmUgYWNtX3NlbmRfYnJlYWsoYWNtLCBtcykgXAorCWFjbV9jdHJsX21zZyhhY20sIFVTQl9DRENfUkVRX1NFTkRfQlJFQUssIG1zLCBOVUxMLCAwKQorCisvKgorICogSW50ZXJydXB0IGhhbmRsZXJzIGZvciB2YXJpb3VzIEFDTSBkZXZpY2UgcmVzcG9uc2VzCisgKi8KKworLyogY29udHJvbCBpbnRlcmZhY2UgcmVwb3J0cyBzdGF0dXMgY2hhbmdlcyB3aXRoICJpbnRlcnJ1cHQiIHRyYW5zZmVycyAqLworc3RhdGljIHZvaWQgYWNtX2N0cmxfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiAqZHIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCBuZXdjdHJsOworCWludCBzdGF0dXM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCWdvdG8gZXhpdDsKKworCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKShkciArIDEpOworCXN3aXRjaCAoZHItPmJOb3RpZmljYXRpb25UeXBlKSB7CisKKwkJY2FzZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT046CisKKwkJCWRiZygiJXMgbmV0d29yayIsIGRyLT53VmFsdWUgPyAiY29ubmVjdGVkIHRvIiA6ICJkaXNjb25uZWN0ZWQgZnJvbSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfQ0RDX05PVElGWV9TRVJJQUxfU1RBVEU6CisKKwkJCW5ld2N0cmwgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgZGF0YSkpOworCisJCQlpZiAoYWNtLT50dHkgJiYgIWFjbS0+Y2xvY2FsICYmIChhY20tPmN0cmxpbiAmIH5uZXdjdHJsICYgQUNNX0NUUkxfRENEKSkgeworCQkJCWRiZygiY2FsbGluZyBoYW5ndXAiKTsKKwkJCQl0dHlfaGFuZ3VwKGFjbS0+dHR5KTsKKwkJCX0KKworCQkJYWNtLT5jdHJsaW4gPSBuZXdjdHJsOworCisJCQlkYmcoImlucHV0IGNvbnRyb2wgbGluZXM6IGRjZCVjIGRzciVjIGJyZWFrJWMgcmluZyVjIGZyYW1pbmclYyBwYXJpdHklYyBvdmVycnVuJWMiLAorCQkJCWFjbS0+Y3RybGluICYgQUNNX0NUUkxfRENEID8gJysnIDogJy0nLAlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX0RTUiA/ICcrJyA6ICctJywKKwkJCQlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX0JSSyA/ICcrJyA6ICctJywJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9SSSAgPyAnKycgOiAnLScsCisJCQkJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9GUkFNSU5HID8gJysnIDogJy0nLAlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX1BBUklUWSA/ICcrJyA6ICctJywKKwkJCQlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX09WRVJSVU4gPyAnKycgOiAnLScpOworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGJnKCJ1bmtub3duIG5vdGlmaWNhdGlvbiAlZCByZWNlaXZlZDogaW5kZXggJWQgbGVuICVkIGRhdGEwICVkIGRhdGExICVkIiwKKwkJCQlkci0+Yk5vdGlmaWNhdGlvblR5cGUsIGRyLT53SW5kZXgsCisJCQkJZHItPndMZW5ndGgsIGRhdGFbMF0sIGRhdGFbMV0pOworCQkJYnJlYWs7CisJfQorZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisvKiBkYXRhIGludGVyZmFjZSByZXR1cm5zIGluY29taW5nIGJ5dGVzLCBvciB3ZSBnb3QgdW50aHJvdHRsZWQgKi8KK3N0YXRpYyB2b2lkIGFjbV9yZWFkX2J1bGsoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB1cmItPmNvbnRleHQ7CisJZGJnKCJFbnRlcmluZyBhY21fcmVhZF9idWxrIHdpdGggc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRldl9kYmcoJmFjbS0+ZGF0YS0+ZGV2LCAiYnVsayByeCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKworCS8qIGNhbGxpbmcgdHR5X2ZsaXBfYnVmZmVyX3B1c2goKSBpbl9pcnEoKSBpc24ndCBhbGxvd2VkICovCisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT5iaCk7Cit9CisKK3N0YXRpYyB2b2lkIGFjbV9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgX2FjbSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSAodm9pZCAqKV9hY207CisJc3RydWN0IHVyYiAqdXJiID0gYWNtLT5yZWFkdXJiOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBhY20tPnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGkgPSAwOworCWRiZygiRW50ZXJpbmcgYWNtX3J4X3Rhc2tsZXQiKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwICYmICFhY20tPnRocm90dGxlKSAgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoICYmICFhY20tPnRocm90dGxlOyBpKyspIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLAorCQkJICogd2UgZHJvcCB0aGVtLiAqLworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJZGJnKCJIYW5kZWQgJWQgYnl0ZXMgdG8gdHR5IGxheWVyIiwgaSsxKTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwlzcGluX2xvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJaWYgKGFjbS0+dGhyb3R0bGUpIHsKKwkJZGJnKCJUaHJvdHRlbGluZyBub3RpY2VkIik7CisJCW1lbW1vdmUoZGF0YSwgZGF0YSArIGksIHVyYi0+YWN0dWFsX2xlbmd0aCAtIGkpOworCQl1cmItPmFjdHVhbF9sZW5ndGggLT0gaTsKKwkJYWNtLT5yZXN1Ym1pdF90b191bnRocm90dGxlID0gMTsKKwkJc3Bpbl91bmxvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXVyYi0+ZGV2ID0gYWNtLT5kZXY7CisKKwlpID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoaSkKKwkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICJidWxrIHJ4IHJlc3VibWl0ICVkXG4iLCBpKTsKK30KKworLyogZGF0YSBpbnRlcmZhY2Ugd3JvdGUgdGhvc2Ugb3V0Z29pbmcgYnl0ZXMgKi8KK3N0YXRpYyB2b2lkIGFjbV93cml0ZV9idWxrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFjbSAqYWNtID0gKHN0cnVjdCBhY20gKil1cmItPmNvbnRleHQ7CisJZGJnKCJFbnRlcmluZyBhY21fd3JpdGVfYnVsayB3aXRoIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJZ290byBvdXQ7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRiZygibm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7CisKKwlzY2hlZHVsZV93b3JrKCZhY20tPndvcmspOworb3V0OgorCWFjbS0+cmVhZHlfZm9yX3dyaXRlID0gMTsKK30KKworc3RhdGljIHZvaWQgYWNtX3NvZnRpbnQodm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSBwcml2YXRlOworCWRiZygiRW50ZXJpbmcgYWNtX3NvZnRpbnQuXG4iKTsKKwkKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJdHR5X3dha2V1cChhY20tPnR0eSk7Cit9CisKKy8qCisgKiBUVFkgaGFuZGxlcnMKKyAqLworCitzdGF0aWMgaW50IGFjbV90dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgYWNtICphY207CisJaW50IHJ2ID0gLUVJTlZBTDsKKwlkYmcoIkVudGVyaW5nIGFjbV90dHlfb3Blbi5cbiIpOworCQorCWRvd24oJm9wZW5fc2VtKTsKKworCWFjbSA9IGFjbV90YWJsZVt0dHktPmluZGV4XTsKKwlpZiAoIWFjbSB8fCAhYWNtLT5kZXYpCisJCWdvdG8gZXJyX291dDsKKwllbHNlCisJCXJ2ID0gMDsKKworCXR0eS0+ZHJpdmVyX2RhdGEgPSBhY207CisJYWNtLT50dHkgPSB0dHk7CisKKworCisJaWYgKGFjbS0+dXNlZCsrKSB7CisJCWdvdG8gZG9uZTsKKyAgICAgICAgfQorCisJYWNtLT5jdHJsdXJiLT5kZXYgPSBhY20tPmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoYWNtLT5jdHJsdXJiLCBHRlBfS0VSTkVMKSkgeworCQlkYmcoInVzYl9zdWJtaXRfdXJiKGN0cmwgaXJxKSBmYWlsZWQiKTsKKwkJZ290byBiYWlsX291dDsKKwl9CisKKwlhY20tPnJlYWR1cmItPmRldiA9IGFjbS0+ZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihhY20tPnJlYWR1cmIsIEdGUF9LRVJORUwpKSB7CisJCWRiZygidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQiKTsKKwkJZ290byBiYWlsX291dF9hbmRfdW5saW5rOworCX0KKworCWlmICgwID4gYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gQUNNX0NUUkxfRFRSIHwgQUNNX0NUUkxfUlRTKSkKKwkJZ290byBmdWxsX2JhaWxvdXQ7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwgCisJICAgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIGRhdGEgY2FuIGdldCBsb3N0LiAqLworCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCitkb25lOgorZXJyX291dDoKKwl1cCgmb3Blbl9zZW0pOworCXJldHVybiBydjsKKworZnVsbF9iYWlsb3V0OgorCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworYmFpbF9vdXRfYW5kX3VubGluazoKKwl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKK2JhaWxfb3V0OgorCWFjbS0+dXNlZC0tOworCXVwKCZvcGVuX3NlbSk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGFjbV90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghYWNtIHx8ICFhY20tPnVzZWQpCisJCXJldHVybjsKKworCWRvd24oJm9wZW5fc2VtKTsKKwlpZiAoIS0tYWNtLT51c2VkKSB7CisJCWlmIChhY20tPmRldikgeworCQkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gMCk7CisJCQl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKKwkJCXVzYl9raWxsX3VyYihhY20tPndyaXRldXJiKTsKKwkJCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworCQl9IGVsc2UgeworCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGFjbV90dHlfZHJpdmVyLCBhY20tPm1pbm9yKTsKKwkJCWFjbV90YWJsZVthY20tPm1pbm9yXSA9IE5VTEw7CisJCQl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihhY20tPnJlYWR1cmIpOworCQkJdXNiX2ZyZWVfdXJiKGFjbS0+d3JpdGV1cmIpOworCQkJa2ZyZWUoYWNtKTsKKwkJfQorCX0KKwl1cCgmb3Blbl9zZW0pOworfQorCitzdGF0aWMgaW50IGFjbV90dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgc3RhdDsKKwlkYmcoIkVudGVyaW5nIGFjbV90dHlfd3JpdGUgdG8gd3JpdGUgJWQgYnl0ZXMsXG4iLCBjb3VudCk7CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWFjbS0+cmVhZHlfZm9yX3dyaXRlKQorCQlyZXR1cm4gMDsKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gKGNvdW50ID4gYWNtLT53cml0ZXNpemUpID8gYWNtLT53cml0ZXNpemUgOiBjb3VudDsKKworCWRiZygiR2V0ICVkIGJ5dGVzLi4uIiwgY291bnQpOworCW1lbWNweShhY20tPndyaXRlX2J1ZmZlciwgYnVmLCBjb3VudCk7CisJZGJnKCIgIFN1Y2Nlc3NmdWxseSBjb3BpZWQuXG4iKTsKKworCWFjbS0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKKwlhY20tPndyaXRldXJiLT5kZXYgPSBhY20tPmRldjsKKworCWFjbS0+cmVhZHlfZm9yX3dyaXRlID0gMDsKKwlzdGF0ID0gdXNiX3N1Ym1pdF91cmIoYWNtLT53cml0ZXVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXQgPCAwKSB7CisJCWRiZygidXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIik7CisJCWFjbS0+cmVhZHlfZm9yX3dyaXRlID0gMTsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGFjbV90dHlfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuICFhY20tPnJlYWR5X2Zvcl93cml0ZSA/IDAgOiBhY20tPndyaXRlc2l6ZTsKK30KKworc3RhdGljIGludCBhY21fdHR5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuICFhY20tPnJlYWR5X2Zvcl93cml0ZSA/IGFjbS0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiAwOworfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworCWFjbS0+dGhyb3R0bGUgPSAxOworCXNwaW5fdW5sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybjsKKwlzcGluX2xvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJYWNtLT50aHJvdHRsZSA9IDA7CisJc3Bpbl91bmxvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJaWYgKGFjbS0+cmVzdWJtaXRfdG9fdW50aHJvdHRsZSkgeworCQlhY20tPnJlc3VibWl0X3RvX3VudGhyb3R0bGUgPSAwOworCQlhY21fcmVhZF9idWxrKGFjbS0+cmVhZHVyYiwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJaWYgKGFjbV9zZW5kX2JyZWFrKGFjbSwgc3RhdGUgPyAweGZmZmYgOiAwKSkKKwkJZGJnKCJzZW5kIGJyZWFrIGZhaWxlZCIpOworfQorCitzdGF0aWMgaW50IGFjbV90dHlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIChhY20tPmN0cmxvdXQgJiBBQ01fQ1RSTF9EVFIgPyBUSU9DTV9EVFIgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxvdXQgJiBBQ01fQ1RSTF9SVFMgPyBUSU9DTV9SVFMgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxpbiAgJiBBQ01fQ1RSTF9EU1IgPyBUSU9DTV9EU1IgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxpbiAgJiBBQ01fQ1RSTF9SSSAgPyBUSU9DTV9SSSAgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxpbiAgJiBBQ01fQ1RSTF9EQ0QgPyBUSU9DTV9DRCAgOiAwKSB8CisJICAgICAgIFRJT0NNX0NUUzsKK30KKworc3RhdGljIGludCBhY21fdHR5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBuZXdjdHJsOworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdjdHJsID0gYWNtLT5jdHJsb3V0OworCXNldCA9IChzZXQgJiBUSU9DTV9EVFIgPyBBQ01fQ1RSTF9EVFIgOiAwKSB8IChzZXQgJiBUSU9DTV9SVFMgPyBBQ01fQ1RSTF9SVFMgOiAwKTsKKwljbGVhciA9IChjbGVhciAmIFRJT0NNX0RUUiA/IEFDTV9DVFJMX0RUUiA6IDApIHwgKGNsZWFyICYgVElPQ01fUlRTID8gQUNNX0NUUkxfUlRTIDogMCk7CisKKwluZXdjdHJsID0gKG5ld2N0cmwgJiB+Y2xlYXIpIHwgc2V0OworCisJaWYgKGFjbS0+Y3RybG91dCA9PSBuZXdjdHJsKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gbmV3Y3RybCk7Cit9CisKK3N0YXRpYyBpbnQgYWNtX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIF9fdTMyIGFjbV90dHlfc3BlZWRbXSA9IHsKKwkwLCA1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsCisJMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLAorCTU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA1MDAwMDAsIDU3NjAwMCwKKwk5MjE2MDAsIDEwMDAwMDAsIDExNTIwMDAsIDE1MDAwMDAsIDIwMDAwMDAsCisJMjUwMDAwMCwgMzAwMDAwMCwgMzUwMDAwMCwgNDAwMDAwMAorfTsKKworc3RhdGljIF9fdTggYWNtX3R0eV9zaXplW10gPSB7CisJNSwgNiwgNywgOAorfTsKKworc3RhdGljIHZvaWQgYWNtX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvc19vbGQpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcyA9IHR0eS0+dGVybWlvczsKKwlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBuZXdsaW5lOworCWludCBuZXdjdHJsID0gYWNtLT5jdHJsb3V0OworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuOworCisJbmV3bGluZS5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMnAoYWNtX3R0eV9zcGVlZCArCisJCSh0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQgJiB+Q0JBVURFWCkgKyAodGVybWlvcy0+Y19jZmxhZyAmIENCQVVERVggPyAxNSA6IDApKTsKKwluZXdsaW5lLmJDaGFyRm9ybWF0ID0gdGVybWlvcy0+Y19jZmxhZyAmIENTVE9QQiA/IDIgOiAwOworCW5ld2xpbmUuYlBhcml0eVR5cGUgPSB0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CID8KKwkJKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQgPyAxIDogMikgKyAodGVybWlvcy0+Y19jZmxhZyAmIENNU1BBUiA/IDIgOiAwKSA6IDA7CisJbmV3bGluZS5iRGF0YUJpdHMgPSBhY21fdHR5X3NpemVbKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgPj4gNF07CisKKwlhY20tPmNsb2NhbCA9ICgodGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgIT0gMCk7CisKKwlpZiAoIW5ld2xpbmUuZHdEVEVSYXRlKSB7CisJCW5ld2xpbmUuZHdEVEVSYXRlID0gYWNtLT5saW5lLmR3RFRFUmF0ZTsKKwkJbmV3Y3RybCAmPSB+QUNNX0NUUkxfRFRSOworCX0gZWxzZSAgbmV3Y3RybCB8PSAgQUNNX0NUUkxfRFRSOworCisJaWYgKG5ld2N0cmwgIT0gYWNtLT5jdHJsb3V0KQorCQlhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQgPSBuZXdjdHJsKTsKKworCWlmIChtZW1jbXAoJmFjbS0+bGluZSwgJm5ld2xpbmUsIHNpemVvZiBuZXdsaW5lKSkgeworCQltZW1jcHkoJmFjbS0+bGluZSwgJm5ld2xpbmUsIHNpemVvZiBuZXdsaW5lKTsKKwkJZGJnKCJzZXQgbGluZTogJWQgJWQgJWQgJWQiLCBsZTMyX3RvX2NwdShuZXdsaW5lLmR3RFRFUmF0ZSksCisJCQluZXdsaW5lLmJDaGFyRm9ybWF0LCBuZXdsaW5lLmJQYXJpdHlUeXBlLAorCQkJbmV3bGluZS5iRGF0YUJpdHMpOworCQlhY21fc2V0X2xpbmUoYWNtLCAmYWNtLT5saW5lKTsKKwl9Cit9CisKKy8qCisgKiBVU0IgcHJvYmUgYW5kIGRpc2Nvbm5lY3Qgcm91dGluZXMuCisgKi8KKworc3RhdGljIGludCBhY21fcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyAqdW5pb25faGVhZGVyID0gTlVMTDsKKwljaGFyICpidWZmZXIgPSBpbnRmLT5hbHRzZXR0aW5nLT5leHRyYTsKKwlpbnQgYnVmbGVuID0gaW50Zi0+YWx0c2V0dGluZy0+ZXh0cmFsZW47CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmNvbnRyb2xfaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpkYXRhX2ludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwY3RybDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwcmVhZDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwd3JpdGU7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBhY20gKmFjbTsKKwlpbnQgbWlub3I7CisJaW50IGN0cmxzaXplLHJlYWRzaXplOworCXU4ICpidWY7CisJdTggYWNfbWFuYWdlbWVudF9mdW5jdGlvbiA9IDA7CisJdTggY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gMDsKKwlpbnQgY2FsbF9pbnRlcmZhY2VfbnVtID0gLTE7CisJaW50IGRhdGFfaW50ZXJmYWNlX251bTsKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKworCS8qIGhhbmRsZSBxdWlya3MgZGVhZGx5IHRvIG5vcm1hbCBwcm9iaW5nKi8KKwlxdWlya3MgPSAodW5zaWduZWQgbG9uZylpZC0+ZHJpdmVyX2luZm87CisJaWYgKHF1aXJrcyA9PSBOT19VTklPTl9OT1JNQUwpIHsKKwkJZGF0YV9pbnRlcmZhY2UgPSB1c2JfaWZudW1fdG9faWYodXNiX2RldiwgMSk7CisJCWNvbnRyb2xfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDApOworCQlnb3RvIHNraXBfbm9ybWFsX3Byb2JlOworCX0KKwkKKwkvKiBub3JtYWwgcHJvYmluZyovCisJaWYgKCFidWZmZXIpIHsKKwkJZXJyKCJXaWVyZCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWJ1ZmxlbikgeworCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbiAmJiBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhKSB7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIlNlZWtpbmcgZXh0cmEgZGVzY3JpcHRvcnMgb24gZW5kcG9pbnRcbiIpOworCQkJYnVmbGVuID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbjsKKwkJCWJ1ZmZlciA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmE7CisJCX0gZWxzZSB7CisJCQllcnIoIlplcm8gbGVuZ3RoIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXdoaWxlIChidWZsZW4gPiAwKSB7CisJCWlmIChidWZmZXIgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKKwkJCWVycigic2tpcHBpbmcgZ2FyYmFnZVxuIik7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfQorCisJCXN3aXRjaCAoYnVmZmVyIFsyXSkgeworCQkJY2FzZSBVU0JfQ0RDX1VOSU9OX1RZUEU6IC8qIHdlJ3ZlIGZvdW5kIGl0ICovCisJCQkJaWYgKHVuaW9uX2hlYWRlcikgeworCQkJCQllcnIoIk1vcmUgdGhhbiBvbmUgdW5pb24gZGVzY3JpcHRvciwgc2tpcHBpbmcgLi4uIik7CisJCQkJCWdvdG8gbmV4dF9kZXNjOworCQkJCX0KKwkJCQl1bmlvbl9oZWFkZXIgPSAoc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyAqKQorCQkJCQkJCWJ1ZmZlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0NEQ19DT1VOVFJZX1RZUEU6IC8qIG1heWJlIHNvbWVob3cgZXhwb3J0ICovCisJCQkJYnJlYWs7IC8qIGZvciBub3cgd2UgaWdub3JlIGl0ICovCisJCQljYXNlIFVTQl9DRENfSEVBREVSX1RZUEU6IC8qIG1heWJlIGNoZWNrIHZlcnNpb24gKi8gCisJCQkJYnJlYWs7IC8qIGZvciBub3cgd2UgaWdub3JlIGl0ICovIAorCQkJY2FzZSBVU0JfQ0RDX0FDTV9UWVBFOgorCQkJCWFjX21hbmFnZW1lbnRfZnVuY3Rpb24gPSBidWZmZXJbM107CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9DRENfQ0FMTF9NQU5BR0VNRU5UX1RZUEU6CisJCQkJY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gYnVmZmVyWzNdOworCQkJCWNhbGxfaW50ZXJmYWNlX251bSA9IGJ1ZmZlcls0XTsKKwkJCQlpZiAoKGNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiAmIDMpICE9IDMpCisJCQkJCWVycigiVGhpcyBkZXZpY2UgY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uIEl0IGlzIG5vIG1vZGVtLiIpOworCQkJCWJyZWFrOworCQkJCQorCQkJZGVmYXVsdDoKKwkJCQllcnIoIklnbm9yaW5nIGV4dHJhIGhlYWRlciwgdHlwZSAlZCwgbGVuZ3RoICVkIiwgYnVmZmVyWzJdLCBidWZmZXJbMF0pOworCQkJCWJyZWFrOworCQkJfQorbmV4dF9kZXNjOgorCQlidWZsZW4gLT0gYnVmZmVyWzBdOworCQlidWZmZXIgKz0gYnVmZmVyWzBdOworCX0KKworCWlmICghdW5pb25faGVhZGVyKSB7CisJCWlmIChjYWxsX2ludGVyZmFjZV9udW0gPiAwKSB7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIk5vIHVuaW9uIGRlc2NyaXB0b3IsIHVzaW5nIGNhbGwgbWFuYWdlbWVudCBkZXNjcmlwdG9yXG4iKTsKKwkJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIChkYXRhX2ludGVyZmFjZV9udW0gPSBjYWxsX2ludGVyZmFjZV9udW0pKTsKKwkJCWNvbnRyb2xfaW50ZXJmYWNlID0gaW50ZjsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmludGYtPmRldiwiTm8gdW5pb24gZGVzY3JpcHRvciwgZ2l2aW5nIHVwXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfSBlbHNlIHsKKwkJY29udHJvbF9pbnRlcmZhY2UgPSB1c2JfaWZudW1fdG9faWYodXNiX2RldiwgdW5pb25faGVhZGVyLT5iTWFzdGVySW50ZXJmYWNlMCk7CisJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIChkYXRhX2ludGVyZmFjZV9udW0gPSB1bmlvbl9oZWFkZXItPmJTbGF2ZUludGVyZmFjZTApKTsKKwkJaWYgKCFjb250cm9sX2ludGVyZmFjZSB8fCAhZGF0YV9pbnRlcmZhY2UpIHsKKwkJCWRldl9kYmcoJmludGYtPmRldiwibm8gaW50ZXJmYWNlc1xuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwkKKwlpZiAoZGF0YV9pbnRlcmZhY2VfbnVtICE9IGNhbGxfaW50ZXJmYWNlX251bSkKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCJTZXBlcmF0ZSBjYWxsIGNvbnRyb2wgaW50ZXJmYWNlLiBUaGF0IGlzIG5vdCBmdWxseSBzdXBwb3J0ZWQuXG4iKTsKKworc2tpcF9ub3JtYWxfcHJvYmU6CisKKwkvKndvcmthcm91bmQgZm9yIHN3aXRjaGVkIGludGVyZmFjZXMgKi8KKwlpZiAoZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSBDRENfREFUQV9JTlRFUkZBQ0VfVFlQRSkgeworCQlpZiAoY29udHJvbF9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBDRENfREFUQV9JTlRFUkZBQ0VfVFlQRSkgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnQ7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIllvdXIgZGV2aWNlIGhhcyBzd2l0Y2hlZCBpbnRlcmZhY2VzLlxuIik7CisKKwkJCXQgPSBjb250cm9sX2ludGVyZmFjZTsKKwkJCWNvbnRyb2xfaW50ZXJmYWNlID0gZGF0YV9pbnRlcmZhY2U7CisJCQlkYXRhX2ludGVyZmFjZSA9IHQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwkKKwlpZiAodXNiX2ludGVyZmFjZV9jbGFpbWVkKGRhdGFfaW50ZXJmYWNlKSkgeyAvKiB2YWxpZCBpbiB0aGlzIGNvbnRleHQgKi8KKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCJUaGUgZGF0YSBpbnRlcmZhY2UgaXNuJ3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKworCWlmIChkYXRhX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZXBjdHJsID0gJmNvbnRyb2xfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKwllcHJlYWQgPSAmZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCWVwd3JpdGUgPSAmZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOworCisKKwkvKiB3b3JrYXJvdW5kIGZvciBzd2l0Y2hlZCBlbmRwb2ludHMgKi8KKwlpZiAoKGVwcmVhZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICE9IFVTQl9ESVJfSU4pIHsKKwkJLyogZGVzY3JpcHRvcnMgYXJlIHN3YXBwZWQgKi8KKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp0OworCQlkZXZfZGJnKCZpbnRmLT5kZXYsIlRoZSBkYXRhIGludGVyZmFjZSBoYXMgc3dpdGNoZWQgZW5kcG9pbnRzXG4iKTsKKwkJCisJCXQgPSBlcHJlYWQ7CisJCWVwcmVhZCA9IGVwd3JpdGU7CisJCWVwd3JpdGUgPSB0OworCX0KKwlkYmcoImludGVyZmFjZXMgYXJlIHZhbGlkIik7CisJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgQUNNX1RUWV9NSU5PUlMgJiYgYWNtX3RhYmxlW21pbm9yXTsgbWlub3IrKyk7CisKKwlpZiAobWlub3IgPT0gQUNNX1RUWV9NSU5PUlMpIHsKKwkJZXJyKCJubyBtb3JlIGZyZWUgYWNtIGRldmljZXMiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCEoYWNtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjbSksIEdGUF9LRVJORUwpKSkgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChhY20ga21hbGxvYylcbiIpOworCQlnb3RvIGFsbG9jX2ZhaWw7CisJfQorCW1lbXNldChhY20sIDAsIHNpemVvZihzdHJ1Y3QgYWNtKSk7CisKKwljdHJsc2l6ZSA9IGxlMTZfdG9fY3B1KGVwY3RybC0+d01heFBhY2tldFNpemUpOworCXJlYWRzaXplID0gbGUxNl90b19jcHUoZXByZWFkLT53TWF4UGFja2V0U2l6ZSk7CisJYWNtLT53cml0ZXNpemUgPSBsZTE2X3RvX2NwdShlcHdyaXRlLT53TWF4UGFja2V0U2l6ZSk7CisJYWNtLT5jb250cm9sID0gY29udHJvbF9pbnRlcmZhY2U7CisJYWNtLT5kYXRhID0gZGF0YV9pbnRlcmZhY2U7CisJYWNtLT5taW5vciA9IG1pbm9yOworCWFjbS0+ZGV2ID0gdXNiX2RldjsKKwlhY20tPmN0cmxfY2FwcyA9IGFjX21hbmFnZW1lbnRfZnVuY3Rpb247CisJYWNtLT5jdHJsc2l6ZSA9IGN0cmxzaXplOworCWFjbS0+cmVhZHNpemUgPSByZWFkc2l6ZTsKKwlhY20tPmJoLmZ1bmMgPSBhY21fcnhfdGFza2xldDsKKwlhY20tPmJoLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNtOworCUlOSVRfV09SSygmYWNtLT53b3JrLCBhY21fc29mdGludCwgYWNtKTsKKwlzcGluX2xvY2tfaW5pdCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwlhY20tPnJlYWR5X2Zvcl93cml0ZSA9IDE7CisKKwlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVzYl9kZXYsIGN0cmxzaXplLCBHRlBfS0VSTkVMLCAmYWNtLT5jdHJsX2RtYSk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoY3RybCBidWZmZXIgYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsMjsKKwl9CisJYWNtLT5jdHJsX2J1ZmZlciA9IGJ1ZjsKKworCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2ModXNiX2RldiwgcmVhZHNpemUsIEdGUF9LRVJORUwsICZhY20tPnJlYWRfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChyZWFkIGJ1ZmZlciBhbGxvYylcbiIpOworCQlnb3RvIGFsbG9jX2ZhaWwzOworCX0KKwlhY20tPnJlYWRfYnVmZmVyID0gYnVmOworCisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1c2JfZGV2LCBhY20tPndyaXRlc2l6ZSwgR0ZQX0tFUk5FTCwgJmFjbS0+d3JpdGVfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5ICh3cml0ZSBidWZmZXIgYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNDsKKwl9CisJYWNtLT53cml0ZV9idWZmZXIgPSBidWY7CQorCisJYWNtLT5jdHJsdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjbS0+Y3RybHVyYikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsdXJiIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNTsKKwl9CisJYWNtLT5yZWFkdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjbS0+cmVhZHVyYikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChyZWFkdXJiIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNjsKKwl9CisJYWNtLT53cml0ZXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY20tPndyaXRldXJiKSB7CisJCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKHdyaXRldXJiIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNzsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKGFjbS0+Y3RybHVyYiwgdXNiX2RldiwgdXNiX3JjdmludHBpcGUodXNiX2RldiwgZXBjdHJsLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBhY20tPmN0cmxfYnVmZmVyLCBjdHJsc2l6ZSwgYWNtX2N0cmxfaXJxLCBhY20sIGVwY3RybC0+YkludGVydmFsKTsKKwlhY20tPmN0cmx1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCWFjbS0+Y3RybHVyYi0+dHJhbnNmZXJfZG1hID0gYWNtLT5jdHJsX2RtYTsKKworCXVzYl9maWxsX2J1bGtfdXJiKGFjbS0+cmVhZHVyYiwgdXNiX2RldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIGVwcmVhZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgIGFjbS0+cmVhZF9idWZmZXIsIHJlYWRzaXplLCBhY21fcmVhZF9idWxrLCBhY20pOworCWFjbS0+cmVhZHVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX0ZTQlIgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlhY20tPnJlYWR1cmItPnRyYW5zZmVyX2RtYSA9IGFjbS0+cmVhZF9kbWE7CisKKwl1c2JfZmlsbF9idWxrX3VyYihhY20tPndyaXRldXJiLCB1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgZXB3cml0ZS0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgIGFjbS0+d3JpdGVfYnVmZmVyLCBhY20tPndyaXRlc2l6ZSwgYWNtX3dyaXRlX2J1bGssIGFjbSk7CisJYWNtLT53cml0ZXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX0ZTQlIgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlhY20tPndyaXRldXJiLT50cmFuc2Zlcl9kbWEgPSBhY20tPndyaXRlX2RtYTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJ0dHlBQ00lZDogVVNCIEFDTSBkZXZpY2VcbiIsIG1pbm9yKTsKKworCWFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCk7CisKKwlhY20tPmxpbmUuZHdEVEVSYXRlID0gY3B1X3RvX2xlMzIoOTYwMCk7CisJYWNtLT5saW5lLmJEYXRhQml0cyA9IDg7CisJYWNtX3NldF9saW5lKGFjbSwgJmFjbS0+bGluZSk7CisKKwl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmYWNtX2RyaXZlciwgZGF0YV9pbnRlcmZhY2UsIGFjbSk7CisKKwl0dHlfcmVnaXN0ZXJfZGV2aWNlKGFjbV90dHlfZHJpdmVyLCBtaW5vciwgJmludGYtPmRldik7CisKKwlhY21fdGFibGVbbWlub3JdID0gYWNtOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGFjbSk7CisJcmV0dXJuIDA7CisKK2FsbG9jX2ZhaWw3OgorCXVzYl9mcmVlX3VyYihhY20tPnJlYWR1cmIpOworYWxsb2NfZmFpbDY6CisJdXNiX2ZyZWVfdXJiKGFjbS0+Y3RybHVyYik7CithbGxvY19mYWlsNToKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT53cml0ZXNpemUsIGFjbS0+d3JpdGVfYnVmZmVyLCBhY20tPndyaXRlX2RtYSk7CithbGxvY19mYWlsNDoKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgcmVhZHNpemUsIGFjbS0+cmVhZF9idWZmZXIsIGFjbS0+cmVhZF9kbWEpOworYWxsb2NfZmFpbDM6CisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGN0cmxzaXplLCBhY20tPmN0cmxfYnVmZmVyLCBhY20tPmN0cmxfZG1hKTsKK2FsbG9jX2ZhaWwyOgorCWtmcmVlKGFjbSk7CithbGxvY19mYWlsOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBhY21fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwlpZiAoIWFjbSB8fCAhYWNtLT5kZXYpIHsKKwkJZGJnKCJkaXNjb25uZWN0IG9uIG5vbmV4aXN0aW5nIGludGVyZmFjZSIpOworCQlyZXR1cm47CisJfQorCisJZG93bigmb3Blbl9zZW0pOworCWFjbS0+ZGV2ID0gTlVMTDsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOworCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworCXVzYl9raWxsX3VyYihhY20tPndyaXRldXJiKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7IC8qIHdhaXQgZm9yIGFjbV9zb2Z0aW50ICovCisKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT53cml0ZXNpemUsIGFjbS0+d3JpdGVfYnVmZmVyLCBhY20tPndyaXRlX2RtYSk7CisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGFjbS0+cmVhZHNpemUsIGFjbS0+cmVhZF9idWZmZXIsIGFjbS0+cmVhZF9kbWEpOworCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPmN0cmxzaXplLCBhY20tPmN0cmxfYnVmZmVyLCBhY20tPmN0cmxfZG1hKTsKKworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmFjbV9kcml2ZXIsIGFjbS0+ZGF0YSk7CisKKwlpZiAoIWFjbS0+dXNlZCkgeworCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoYWNtX3R0eV9kcml2ZXIsIGFjbS0+bWlub3IpOworCQlhY21fdGFibGVbYWNtLT5taW5vcl0gPSBOVUxMOworCQl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFjbS0+cmVhZHVyYik7CisJCXVzYl9mcmVlX3VyYihhY20tPndyaXRldXJiKTsKKwkJa2ZyZWUoYWNtKTsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuOworCX0KKworCXVwKCZvcGVuX3NlbSk7CisKKwlpZiAoYWNtLT50dHkpCisJCXR0eV9oYW5ndXAoYWNtLT50dHkpOworfQorCisvKgorICogVVNCIGRyaXZlciBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFjbV9pZHNbXSA9IHsKKwkvKiBxdWlya3kgYW5kIGJyb2tlbiBkZXZpY2VzICovCisJeyBVU0JfREVWSUNFKDB4MDg3MCwgMHgwMDAxKSwgLyogTWV0cmljb20gR1MgTW9kZW0gKi8KKwkuZHJpdmVyX2luZm8gPSBOT19VTklPTl9OT1JNQUwsIC8qIGhhcyBubyB1bmlvbiBkZXNjcmlwdG9yICovCisJfSwKKwkvKiBjb250cm9sIGludGVyZmFjZXMgd2l0aCB2YXJpb3VzIEFULWNvbW1hbmQgc2V0cyAqLworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkJVVNCX0NEQ19BQ01fUFJPVE9fQVRfVjI1VEVSKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkJVVNCX0NEQ19BQ01fUFJPVE9fQVRfUENDQTEwMSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX1BDQ0ExMDFfV0FLRSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX0dTTSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUXzNHCSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX0NETUEpIH0sCisKKwkvKiBOT1RFOiAgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUyAuLi4gTk9UIGEgbW9kZW0hISAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBhY21faWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFjbV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImNkY19hY20iLAorCS5wcm9iZSA9CWFjbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWFjbV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWFjbV9pZHMsCit9OworCisvKgorICogVFRZIGRyaXZlciBzdHJ1Y3R1cmVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgYWNtX29wcyA9IHsKKwkub3BlbiA9CQkJYWNtX3R0eV9vcGVuLAorCS5jbG9zZSA9CQlhY21fdHR5X2Nsb3NlLAorCS53cml0ZSA9CQlhY21fdHR5X3dyaXRlLAorCS53cml0ZV9yb29tID0JCWFjbV90dHlfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJYWNtX3R0eV9pb2N0bCwKKwkudGhyb3R0bGUgPQkJYWNtX3R0eV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlhY21fdHR5X3VudGhyb3R0bGUsCisJLmNoYXJzX2luX2J1ZmZlciA9CWFjbV90dHlfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwgPQkJYWNtX3R0eV9icmVha19jdGwsCisJLnNldF90ZXJtaW9zID0JCWFjbV90dHlfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ID0JCWFjbV90dHlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCWFjbV90dHlfdGlvY21zZXQsCit9OworCisvKgorICogSW5pdCAvIGV4aXQuCisgKi8KKworc3RhdGljIGludCBfX2luaXQgYWNtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCWFjbV90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihBQ01fVFRZX01JTk9SUyk7CisJaWYgKCFhY21fdHR5X2RyaXZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJYWNtX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEUsCisJYWNtX3R0eV9kcml2ZXItPmRyaXZlcl9uYW1lID0gImFjbSIsCisJYWNtX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5QUNNIiwKKwlhY21fdHR5X2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ1c2IvYWNtLyIsCisJYWNtX3R0eV9kcml2ZXItPm1ham9yID0gQUNNX1RUWV9NQUpPUiwKKwlhY21fdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwLAorCWFjbV90dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTCwKKwlhY21fdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTCwKKwlhY21fdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUywKKwlhY21fdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCWFjbV90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnMoYWNtX3R0eV9kcml2ZXIsICZhY21fb3BzKTsKKworCXJldHZhbCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJcHV0X3R0eV9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmYWNtX2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCQlwdXRfdHR5X2RyaXZlcihhY21fdHR5X2RyaXZlcik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhY21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhY21fZHJpdmVyKTsKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCXB1dF90dHlfZHJpdmVyKGFjbV90dHlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWNtX2luaXQpOworbW9kdWxlX2V4aXQoYWNtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDA5MTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKgorICogSW5jbHVkZXMgZm9yIGNkYy1hY20uYworICoKKyAqIE1haW5seSB0YWtlIGZyb20gdXNibmV0J3MgY2RjLWV0aGVyIHBhcnQKKyAqCisgKi8KKworLyoKKyAqIENNU1BBUiwgc29tZSBhcmNoaXRlY3R1cmVzIGNhbid0IGhhdmUgc3BhY2UgYW5kIG1hcmsgcGFyaXR5LgorICovCisKKyNpZm5kZWYgQ01TUEFSCisjZGVmaW5lIENNU1BBUgkJCTAKKyNlbmRpZgorCisvKgorICogTWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuCisgKi8KKworI2RlZmluZSBBQ01fVFRZX01BSk9SCQkxNjYKKyNkZWZpbmUgQUNNX1RUWV9NSU5PUlMJCTMyCisKKy8qCisgKiBSZXF1ZXN0cy4KKyAqLworCisjZGVmaW5lIFVTQl9SVF9BQ00JCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisKKy8qCisgKiBPdXRwdXQgY29udHJvbCBsaW5lcy4KKyAqLworCisjZGVmaW5lIEFDTV9DVFJMX0RUUgkJMHgwMQorI2RlZmluZSBBQ01fQ1RSTF9SVFMJCTB4MDIKKworLyoKKyAqIElucHV0IGNvbnRyb2wgbGluZXMgYW5kIGxpbmUgZXJyb3JzLgorICovCisKKyNkZWZpbmUgQUNNX0NUUkxfRENECQkweDAxCisjZGVmaW5lIEFDTV9DVFJMX0RTUgkJMHgwMgorI2RlZmluZSBBQ01fQ1RSTF9CUksJCTB4MDQKKyNkZWZpbmUgQUNNX0NUUkxfUkkJCTB4MDgKKworI2RlZmluZSBBQ01fQ1RSTF9GUkFNSU5HCTB4MTAKKyNkZWZpbmUgQUNNX0NUUkxfUEFSSVRZCQkweDIwCisjZGVmaW5lIEFDTV9DVFJMX09WRVJSVU4JMHg0MAorCisvKgorICogSW50ZXJuYWwgZHJpdmVyIHN0cnVjdHVyZXMuCisgKi8KKworc3RydWN0IGFjbSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsJCQkJLyogdGhlIGNvcnJlc3BvbmRpbmcgdXNiIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpjb250cm9sOwkJCS8qIGNvbnRyb2wgaW50ZXJmYWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmRhdGE7CQkJLyogZGF0YSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwkJCQkvKiB0aGUgY29ycmVzcG9uZGluZyB0dHkgKi8KKwlzdHJ1Y3QgdXJiICpjdHJsdXJiLCAqcmVhZHVyYiwgKndyaXRldXJiOwkvKiB1cmJzICovCisJdTggKmN0cmxfYnVmZmVyLCAqcmVhZF9idWZmZXIsICp3cml0ZV9idWZmZXI7CS8qIGJ1ZmZlcnMgb2YgdXJicyAqLworCWRtYV9hZGRyX3QgY3RybF9kbWEsIHJlYWRfZG1hLCB3cml0ZV9kbWE7CS8qIGRtYSBoYW5kbGVzIG9mIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBsaW5lOwkJLyogYml0cywgc3RvcCwgcGFyaXR5ICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CQkJLyogd29yayBxdWV1ZSBlbnRyeSBmb3IgbGluZSBkaXNjaXBsaW5lIHdha2luZyB1cCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBiaDsJCQkvKiByeCBwcm9jZXNzaW5nICovCisJc3BpbmxvY2tfdCB0aHJvdHRsZV9sb2NrOwkJCS8qIHN5bmNocm9uaXplIHRocm90dGVsaW5nIGFuZCByZWFkIGNhbGxiYWNrICovCisJdW5zaWduZWQgaW50IGN0cmxpbjsJCQkJLyogaW5wdXQgY29udHJvbCBsaW5lcyAoRENELCBEU1IsIFJJLCBicmVhaywgb3ZlcnJ1bnMpICovCisJdW5zaWduZWQgaW50IGN0cmxvdXQ7CQkJCS8qIG91dHB1dCBjb250cm9sIGxpbmVzIChEVFIsIFJUUykgKi8KKwl1bnNpZ25lZCBpbnQgd3JpdGVzaXplOwkJCQkvKiBtYXggcGFja2V0IHNpemUgZm9yIHRoZSBvdXRwdXQgYnVsayBlbmRwb2ludCAqLworCXVuc2lnbmVkIGludCByZWFkc2l6ZSxjdHJsc2l6ZTsJCQkvKiBidWZmZXIgc2l6ZXMgZm9yIGZyZWVpbmcgKi8KKwl1bnNpZ25lZCBpbnQgdXNlZDsJCQkJLyogc29tZW9uZSBoYXMgdGhpcyBhY20ncyBkZXZpY2Ugb3BlbiAqLworCXVuc2lnbmVkIGludCBtaW5vcjsJCQkJLyogYWNtIG1pbm9yIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgdGhyb3R0bGU7CQkJCS8qIHRocm90dGxlZCBieSB0dHkgbGF5ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGNsb2NhbDsJCQkJLyogdGVybWlvcyBDTE9DQUwgKi8KKwl1bnNpZ25lZCBjaGFyIHJlYWR5X2Zvcl93cml0ZTsJCQkvKiB3cml0ZSB1cmIgY2FuIGJlIHVzZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc3VibWl0X3RvX3VudGhyb3R0bGU7CQkvKiB0aHJvdHRlbGluZyBoYXMgZGlzYWJsZWQgdGhlIHJlYWQgdXJiICovCisJdW5zaWduZWQgaW50IGN0cmxfY2FwczsJCQkJLyogY29udHJvbCBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgY2xhc3Mgc3BlY2lmaWMgaGVhZGVyICovCit9OworCisjZGVmaW5lIENEQ19EQVRBX0lOVEVSRkFDRV9UWVBFCTB4MGEKKworLyogY29uc3RhbnRzIGRlc2NyaWJpbmcgdmFyaW91cyBxdWlya3MgYW5kIGVycm9ycyAqLworI2RlZmluZSBOT19VTklPTl9OT1JNQUwJCQkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2ItbWlkaS5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhhZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYwpAQCAtMCwwICsxLDIxNTQgQEAKKy8qCisgIHVzYi1taWRpLmMgIC0tICBVU0ItTUlESSBkcml2ZXIKKworICBDb3B5cmlnaHQgKEMpIDIwMDEgCisgICAgICBOQUdBTk8gRGFpc3VrZSA8YnJlZXplLm5hZ2Fub0BuaWZ0eS5uZS5qcD4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgVGhpcyBkcml2ZXIgaXMgYmFzZWQgb246CisgICAgLSAnVW5pdmVyc2FsIFNlcmlhbCBCdXMgRGV2aWNlIENsYXNzIERlZmluaXRpb24gZm9yIE1JREkgRGV2aWNlJworICAgIC0gbGludXgvZHJpdmVycy9zb3VuZC9lczEzNzEuYywgbGludXgvZHJpdmVycy91c2IvYXVkaW8uYworICAgIC0gYWxzYS9sb3dsZXZlbC9wY2kvY3M2NHh4LmMKKyAgICAtIHVtaWRpLmMgZm9yIE5ldEJTRAorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlICJ1c2ItbWlkaS5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE1vcmUgdmVyYm9zZSBvbiBzeXNsb2cgKi8KKyN1bmRlZiBNSURJX0RFQlVHCisKKyNkZWZpbmUgTUlESV9JTl9CVUZTSVogMTAyNAorCisjZGVmaW5lIEhBVkVfU1VQUE9SVF9VU0JfTUlESV9DTEFTUworCisjdW5kZWYgSEFWRV9TVVBQT1JUX0FMU0EKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNpbmdsZWJ5dGUgPSAwOworbW9kdWxlX3BhcmFtKHNpbmdsZWJ5dGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpbmdsZWJ5dGUsIkVuYWJsZSBzZW5kaW5nIE1JREkgbWVzc2FnZXMgd2l0aCBzaW5nbGUgbWVzc2FnZSBwYWNrZXQiKTsKKworc3RhdGljIGludCBtYXhkZXZpY2VzID0gNDsKK21vZHVsZV9wYXJhbShtYXhkZXZpY2VzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhkZXZpY2VzLCJNYXggbnVtYmVyIG9mIGFsbG9jYXRhYmxlIE1JREkgZGV2aWNlIik7CisKK3N0YXRpYyBpbnQgdXZlbmRvciAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1dmVuZG9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1dmVuZG9yLCAiVGhlIFVTQiBWZW5kb3IgSUQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1cHJvZHVjdCAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVwcm9kdWN0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1cHJvZHVjdCwgIlRoZSBVU0IgUHJvZHVjdCBJRCBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOworCitzdGF0aWMgaW50IHVpbnRlcmZhY2UgID0gLTE7Cittb2R1bGVfcGFyYW0odWludGVyZmFjZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWludGVyZmFjZSwgIlRoZSBJbnRlcmZhY2UgbnVtYmVyIG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBpbnQgdWFsdCAgICAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1YWx0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1YWx0LCAiVGhlIG9wdGlvbmFsIGFsdGVybmF0aXZlIHNldHRpbmcgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1bWluICAgICAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVtaW4sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVtaW4sICJUaGUgaW5wdXQgZW5kcG9pbnQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1bW91dCAgICAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVtb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bW91dCwgIlRoZSBvdXRwdXQgZW5kcG9pbnQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1Y2FibGUgICAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVjYWJsZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWNhYmxlLCAiVGhlIGNhYmxlIG51bWJlciB1c2VkIGZvciBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOworCisvKiogTm90ZSAtLSB0aGUgdXNiX3N0cmluZygpIHJldHVybnMgb25seSBMYXRpbi0xIGNoYXJhY3RlcnMuCisgKiAodW5pY29kZSBjaGFycyA8PSAyNTUpLiBUbyBzdXBwb3J0IEphcGFuZXNlLCBhIHVuaWNvZGUxNkxFLXRvLUVVQyBvcgorICogdW5pY29kZTE2TEUtdG8tSklTIHJvdXRpbmUgaXMgbmVlZGVkIHRvIHdyYXAgYXJvdW5kIHVzYl9nZXRfc3RyaW5nKCkuCisgKiovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdWxhbmdpZCAgICAgID0gMHgwNDA5OyAvKiogMHgwNDExIGZvciBKYXBhbmVzZSAqKi8KK21vZHVsZV9wYXJhbSh1bGFuZ2lkLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bGFuZ2lkLCAiVGhlIG9wdGlvbmFsIHByZWZlcnJlZCBVU0IgTGFuZ3VhZ2UgSUQgZm9yIGFsbCBkZXZpY2VzIik7CisKK01PRFVMRV9BVVRIT1IoIk5BR0FOTyBEYWlzdWtlIDxicmVlemUubmFnYW5vQG5pZnR5Lm5lLmpwPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0ItTUlESSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogTUlESVN0cmVhbWluZyBDbGFzcy1TcGVjaWZpYyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqKi8KKworI2RlZmluZSBNU19ERVNDUklQVE9SX1VOREVGSU5FRAkwCisjZGVmaW5lIE1TX0hFQURFUgkJMQorI2RlZmluZSBNSURJX0lOX0pBQ0sJCTIKKyNkZWZpbmUgTUlESV9PVVRfSkFDSwkJMworLyogU3BlYyByZWFkczogRUxFTUVOVCAqLworI2RlZmluZSBFTEVNRU5UX0RFU0NSSVBUT1IgICAJNAorCisjZGVmaW5lIE1TX0hFQURFUl9MRU5HVEgJNworCisvKiogTUlESVN0cmVhbWluZyBDbGFzcy1TcGVjaWZpYyBFbmRwb2ludCBEZXNjcmlwdG9yIFN1YnR5cGVzICoqLworCisjZGVmaW5lIERFU0NSSVBUT1JfVU5ERUZJTkVECTAKKy8qIFNwZWMgcmVhZHM6IE1TX0dFTkVSQUwgKi8KKyNkZWZpbmUgTVNfR0VORVJBTF9FTkRQT0lOVAkxCisKKy8qKiBNSURJU3RyZWFtaW5nIE1JREkgSU4gYW5kIE9VVCBKYWNrIFR5cGVzICoqLworCisjZGVmaW5lIEpBQ0tfVFlQRV9VTkRFRklORUQJMAorLyogU3BlYyByZWFkczogRU1CRURERUQgKi8KKyNkZWZpbmUgRU1CRURERURfSkFDSwkJMQorLyogU3BlYyByZWFkczogRVhURVJOQUwgKi8KKyNkZWZpbmUgRVhURVJOQUxfSkFDSwkJMgorCisKKy8qIHN0cnVjdHVyZSBzdW1tYXJ5CisgIAorICAgICAgdXNiX21pZGlfc3RhdGUgICAgIHVzYl9kZXZpY2UKKyAgICAgICB8ICAgICAgICAgfAorICAgICAgKnwgICAgICAgICp8ICAgICAgIHBlciBlcAorICAgICBpbl9lcCAgICAgb3V0X2VwCisgICAgICAgfCAgICAgICAgIHwKKyAgICAgICp8ICAgICAgICAqfCAgICAgICBwZXIgY2FibGUKKyAgICAgIG1pbiAgICAgICBtb3V0CisgICAgICAgfCAgICAgICAgIHwgICAgICAgKGNhYmxlIHRvIGRldmljZSBwYWlyaW5nIG1hZ2ljKQorICAgICAgIHwgICAgICAgICB8CisgICAgICAgdXNiX21pZGlfZGV2ICAgICAgZGV2X2lkIChtYWpvcixtaW5vcikgPT0gZmlsZS0+cHJpdmF0ZV9kYXRhCisKKyovCisKKy8qIHVzYl9taWRpX3N0YXRlOiBjb3JyZXNwb25kcyB0byBhIFVTQi1NSURJIG1vZHVsZSAqLworc3RydWN0IHVzYl9taWRpX3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgbWlkaWRldjsKKwkKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCQorCXN0cnVjdCBsaXN0X2hlYWQgICBtaWRpRGV2TGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgaW5FbmRwb2ludExpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAgIG91dEVuZHBvaW50TGlzdDsKKwkKKwlzcGlubG9ja190ICAgICAgICAgbG9jazsKKwkKKwl1bnNpZ25lZCBpbnQgICAgICAgY291bnQ7IC8qIHVzYWdlIGNvdW50ZXIgKi8KK307CisKKy8qIG1pZGlfb3V0X2VuZHBvaW50OiBjb3JyZXNwb25kcyB0byBhbiBvdXRwdXQgZW5kcG9pbnQgKi8KK3N0cnVjdCBtaWRpX291dF9lbmRwb2ludCB7CisJc3RydWN0IGxpc3RfaGVhZCAgbGlzdDsKKwkKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCWludCAgICAgICAgICAgICAgICBlbmRwb2ludDsKKwlzcGlubG9ja190ICAgICAgICAgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgd2FpdDsKKwkKKwl1bnNpZ25lZCBjaGFyICAgICAqYnVmOworCWludCAgICAgICAgICAgICAgICBidWZXclB0cjsKKwlpbnQgICAgICAgICAgICAgICAgYnVmU2l6ZTsKKwkKKwlzdHJ1Y3QgdXJiICAgICAgICp1cmI7Cit9OworCisvKiBtaWRpX2luX2VuZHBvaW50OiBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCBlbmRwb2ludCAqLworc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgICBsaXN0OworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlpbnQgICAgICAgICAgICAgICAgZW5kcG9pbnQ7CisJc3BpbmxvY2tfdCAgICAgICAgIGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgIHdhaXQ7CisKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKmNhYmxlc1sxNl07CS8vIGNhYmxlcyBvcGVuIGZvciByZWFkCisJaW50ICAgICAgICAgICAgICAgICByZWFkZXJzOwkvLyBudW1iZXIgb2YgY2FibGVzIG9wZW4gZm9yIHJlYWQKKworCXN0cnVjdCB1cmIgICAgICAgICp1cmI7CisJdW5zaWduZWQgY2hhciAgICAgKnJlY3ZCdWY7CisJaW50ICAgICAgICAgICAgICAgIHJlY3ZCdWZTaXplOworCWludCAgICAgICAgICAgICAgICB1cmJTdWJtaXR0ZWQ7CS8vRklYTUU6ID09IHJlYWRlcnMgPiAwCit9OworCisvKiB1c2JfbWlkaWRldjogY29ycmVzcG9uZHMgdG8gYSBsb2dpY2FsIGRldmljZSAqLworc3RydWN0IHVzYl9taWRpZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CisKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKm1pZGk7CisJaW50ICAgICAgICAgICAgICAgICAgICBkZXZfbWlkaTsKKwltb2RlX3QgICAgICAgICAgICAgICAgIG9wZW5fbW9kZTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICplcDsKKwkJaW50ICAgICAgICAgICAgICBjYWJsZUlkOworCQkKKy8vIGFzIHdlIGFyZSBwdXNoaW5nIGRhdGEgZnJvbSB1c2JfYnVsa19yZWFkIHRvIHVzYl9taWRpX3JlYWQsCisvLyB3ZSBuZWVkIGEgbGFyZ2VyLCBjeWNsaWMgYnVmZmVyIGhlcmUuCisJCXVuc2lnbmVkIGNoYXIgICAgYnVmW01JRElfSU5fQlVGU0laXTsKKwkJaW50ICAgICAgICAgICAgICBidWZSZFB0cjsKKwkJaW50ICAgICAgICAgICAgICBidWZXclB0cjsKKwkJaW50ICAgICAgICAgICAgICBidWZSZW1haW5zOworCX0gbWluOworCisJc3RydWN0IHsKKwkJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcDsKKwkJaW50ICAgICAgICAgICAgICBjYWJsZUlkOworCQkKKwkJdW5zaWduZWQgY2hhciAgICBidWZbM107CisJCWludCAgICAgICAgICAgICAgYnVmUHRyOworCQlpbnQgICAgICAgICAgICAgIGJ1ZlJlbWFpbnM7CisJCQorCQlpbnQgICAgICAgICAgICAgIGlzSW5FeGNsdXNpdmU7CisJCXVuc2lnbmVkIGNoYXIgICAgbGFzdEV2ZW50OworCX0gbW91dDsKKworCWludCBzaW5nbGVieXRlOworfTsKKworLyoqIE1hcCB0aGUgaGlnaCBueWJibGUgb2YgTUlESSB2b2ljZSBtZXNzYWdlcyB0byBudW1iZXIgb2YgTWVzc2FnZSBieXRlcy4KKyAqIEhpZ2ggbnlibGUgcmFuZ2VzIGZyb20gMHg4IHRvIDB4ZQorICovCisKK3N0YXRpYyBpbnQgcmVtYWluc184MGUwW10gPSB7CisJMywJLyoqIDB4OFggTm90ZSBPZmYgKiovCisJMywJLyoqIDB4OVggTm90ZSBPbiAqKi8KKwkzLAkvKiogMHhBWCBQb2x5LWtleSBwcmVzc3VyZSAqKi8KKwkzLAkvKiogMHhCWCBDb250cm9sIENoYW5nZSAqKi8KKwkyLAkvKiogMHhDWCBQcm9ncmFtIENoYW5nZSAqKi8KKwkyLAkvKiogMHhEWCBDaGFubmVsIHByZXNzdXJlICoqLworCTMgCS8qKiAweEVYIFBpdGNoQmVuZCBDaGFuZ2UgKiovCit9OworCisvKiogTWFwIHRoZSBtZXNzYWdlcyB0byBhIG51bWJlciBvZiBNZXNzYWdlIGJ5dGVzLgorICoKKyAqKi8KK3N0YXRpYyBpbnQgcmVtYWluc19mMGY2W10gPSB7CisJMCwJLyoqIDB4RjAgKiovCisJMiwJLyoqIDBYRjEgKiovCisJMywJLyoqIDBYRjIgKiovCisJMiwJLyoqIDBYRjMgKiovCisJMiwJLyoqIDBYRjQgKFVuZGVmaW5lZCBieSBNSURJIFNwZWMsIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSkgKiovCisJMiwJLyoqIDBYRjUgKFVuZGVmaW5lZCBieSBNSURJIFNwZWMsIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSkgKiovCisJMQkvKiogMFhGNiAqKi8KK307CisKKy8qKiBNYXAgdGhlIG1lc3NhZ2VzIHRvIGEgQ0lOIChDb2RlIEluZGV4IE51bWJlcikuCisgKgorICoqLworc3RhdGljIGludCBjaW5fZjBmZltdID0geworCTQsCS8qKiAweEYwIFN5c3RlbSBFeGNsdXNpdmUgTWVzc2FnZSBTdGFydCAoc3BlY2lhbCBjYXNlcyBtYXkgYmUgNiBvciA3KSAqLworCTIsCS8qKiAweEYxICoqLworCTMsCS8qKiAweEYyICoqLworCTIsCS8qKiAweEYzICoqLworCTIsCS8qKiAweEY0ICoqLworCTIsCS8qKiAweEY1ICoqLworCTUsCS8qKiAweEY2ICoqLworCTUsCS8qKiAweEY3IEVuZCBvZiBTeXN0ZW0gRXhjbHVzaXZlIE1lc3NhZ2UgKE1heSBiZSA2IG9yIDcpICoqLworCTUsCS8qKiAweEY4ICoqLworCTUsCS8qKiAweEY5ICoqLworCTUsCS8qKiAweEZBICoqLworCTUsCS8qKiAweEZCICoqLworCTUsCS8qKiAweEZDICoqLworCTUsCS8qKiAweEZEICoqLworCTUsCS8qKiAweEZFICoqLworCTUJLyoqIDB4RkYgKiovCit9OworCisvKiogTWFwIE1JRElTdHJlYW1pbmcgRXZlbnQgcGFja2V0IENvZGUgSW5kZXggTnVtYmVyIChsb3cgbnliYmxlIG9mIGJ5dGUgMCkKKyAqIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdmFsaWQgTUlESSBkYXRhLgorICoKKyAqIENJTiBvZiAwIGFuZCAxIGFyZSBOT1QgVVNFRCBpbiBNSURJU3RyZWFtaW5nIDEuMC4KKyAqCisgKiovCitzdGF0aWMgaW50IGNpbl90b19sZW5bXSA9IHsKKwkwLCAwLCAyLCAzLAorCTMsIDEsIDIsIDMsCisJMywgMywgMywgMywKKwkyLCAyLCAzLCAxCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbWlkaWRldnMgPSBMSVNUX0hFQURfSU5JVChtaWRpZGV2cyk7CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKG9wZW5fc2VtKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvcGVuX3dhaXQpOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgdXNiX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IChzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKil1cmItPmNvbnRleHQ7CisKKwlpZiAoIHdhaXRxdWV1ZV9hY3RpdmUoICZlcC0+d2FpdCApICkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmZXAtPndhaXQgKTsKK30KKworCitzdGF0aWMgaW50IHVzYl93cml0ZSggc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuICkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZDsKKwlpbnQgcGlwZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgc3RhdHVzOworCWludCBtYXhyZXRyeSA9IDUwOworCQorCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsY3VycmVudCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndhaXQpOworCisJZCA9IGVwLT51c2JkZXY7CisJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkLCBlcC0+ZW5kcG9pbnQpOworCXVzYl9maWxsX2J1bGtfdXJiKCBlcC0+dXJiLCBkLCBwaXBlLCAodW5zaWduZWQgY2hhciopYnVmLCBsZW4sCisJCSAgICAgICB1c2Jfd3JpdGVfY2FsbGJhY2ssIGVwICk7CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihlcC0+dXJiLCBHRlBfS0VSTkVMKTsKKyAgICAKKwlpZiAoc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogQ2Fubm90IHN1Ym1pdCB1cmIgKCVkKVxuIixzdGF0dXMpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCWFkZF93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7CisJc2V0X2N1cnJlbnRfc3RhdGUoIFRBU0tfSU5URVJSVVBUSUJMRSApOworCisJd2hpbGUoIGVwLT51cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgKSB7CisJCWlmICggbWF4cmV0cnktLSA8IDAgKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IHVzYl9idWxrX21zZyB0aW1lZCBvdXRcbiIpOworCQkJcmV0ID0gLUVUSU1FOworCQkJYnJlYWs7CisJCX0KKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCAmZXAtPndhaXQsIDEwICk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKCBUQVNLX1JVTk5JTkcgKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSggJmVwLT53YWl0LCAmd2FpdCApOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBDb3B5IGRhdGEgZnJvbSBVUkIgdG8gSW4gZW5kcG9pbnQgYnVmLgorICogRGlzY2FyZCBpZiBDSU4gPT0gMCBvciBDSU4gPSAxLgorICoKKyAqCisgKiovCisKK3N0YXRpYyB2b2lkIHVzYl9idWxrX3JlYWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqZXAgPSAoc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKikodXJiLT5jb250ZXh0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGksIGosIHdha2U7CisKKwlpZiAoICFlcC0+dXJiU3VibWl0dGVkICkgeworCQlyZXR1cm47CisJfQorCisJaWYgKCAodXJiLT5zdGF0dXMgPT0gMCkgJiYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApICkgeworCQl3YWtlID0gMDsKKwkJc3Bpbl9sb2NrKCAmZXAtPmxvY2sgKTsKKworCQlmb3IoaiA9IDA7IGogPCB1cmItPmFjdHVhbF9sZW5ndGg7IGogKz0gNCkgeworCQkJaW50IGNpbiA9IChkYXRhW2pdPj4wKSYweGY7CisJCQlpbnQgY2FiID0gKGRhdGFbal0+PjQpJjB4ZjsKKwkJCXN0cnVjdCB1c2JfbWlkaWRldiAqY2FibGUgPSBlcC0+Y2FibGVzW2NhYl07CisJCQlpZiAoIGNhYmxlICkgeworCQkJCWludCBsZW4gPSBjaW5fdG9fbGVuW2Npbl07IC8qKiBsZW5ndGggb2YgTUlESSBkYXRhICoqLworCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJCQljYWJsZS0+bWluLmJ1ZltjYWJsZS0+bWluLmJ1ZldyUHRyXSA9IGRhdGFbMStpK2pdOworCQkJCQljYWJsZS0+bWluLmJ1ZldyUHRyID0gKGNhYmxlLT5taW4uYnVmV3JQdHIrMSklTUlESV9JTl9CVUZTSVo7CisJCQkJCWlmIChjYWJsZS0+bWluLmJ1ZlJlbWFpbnMgPCBNSURJX0lOX0JVRlNJWikKKwkJCQkJCWNhYmxlLT5taW4uYnVmUmVtYWlucyArPSAxOworCQkJCQllbHNlIC8qKiBuZWVkIHRvIGRyb3AgZGF0YSAqKi8KKwkJCQkJCWNhYmxlLT5taW4uYnVmUmRQdHIgKz0gKGNhYmxlLT5taW4uYnVmUmRQdHIrMSklTUlESV9JTl9CVUZTSVo7CisJCQkJCXdha2UgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrICggJmVwLT5sb2NrICk7CisJCWlmICggd2FrZSApIHsKKwkJCXdha2VfdXAoICZlcC0+d2FpdCApOworCQl9CisJfQorCisJLyogdXJiLT5kZXYgbXVzdCBiZSByZWluaXRpYWxpemVkIG9uIDIuNC54IGtlcm5lbHMgKi8KKwl1cmItPmRldiA9IGVwLT51c2JkZXY7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoaXMgcm91dGluZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHNwaW5fbG9jayAqLworCisvKiogV3JhcHBlciBhcm91bmQgdXNiX3dyaXRlKCkuCisgKiAgVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHdpdGggc3Bpbl9sb2NrIGhlbGQgb24gZXAuCisgKiAgQ2FsbGVkIGJ5IG1pZGlXcml0ZSgpLCBwdXRPbmVNaWRpRXZlbnQoKSwgYW5kICB1c2JfbWlkaV93cml0ZSgpOworICoqLworc3RhdGljIGludCBmbHVzaF9taWRpX2J1ZmZlciggc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCApCit7CisJaW50IHJldD0wOworCisJaWYgKCBlcC0+YnVmV3JQdHIgPiAwICkgeworCQlyZXQgPSB1c2Jfd3JpdGUoIGVwLCBlcC0+YnVmLCBlcC0+YnVmV3JQdHIgKTsKKwkJZXAtPmJ1ZldyUHRyID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiogR2l2ZW4gYSBNSURJIEV2ZW50LCBkZXRlcm1pbmUgc2l6ZSBvZiBkYXRhIHRvIGJlIGF0dGFjaGVkIHRvIAorICogVVNCLU1JREkgcGFja2V0LgorICogUmV0dXJucyAxLCAyIG9yIDMuCisgKiBDYWxsZWQgYnkgbWlkaVdyaXRlKCk7CisgKiBVc2VzIHJlbWFpbnNfODBlMCBhbmQgcmVtYWluc19mMGY2OworICoqLworc3RhdGljIGludCBnZXRfcmVtYWlucyhpbnQgZXZlbnQpCit7CisJaW50IHJldDsKKworCWlmICggZXZlbnQgIDwgMHg4MCApIHsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKCBldmVudCA8IDB4ZjAgKSB7CisJCXJldCA9IHJlbWFpbnNfODBlMFsoKGV2ZW50LTB4ODApPj40KSYweDBmXTsKKwl9IGVsc2UgaWYgKCBldmVudCA8IDB4ZjcgKSB7CisJCXJldCA9IHJlbWFpbnNfZjBmNltldmVudC0weGYwXTsKKwl9IGVsc2UgeworCQlyZXQgPSAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKiBHaXZlbiB0aGUgb3V0cHV0IE1JREkgZGF0YSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwgY29tcHV0ZXMgYSByZWFzb25hYmxlIAorICogQ0lOLgorICogQ2FsbGVkIGJ5IHB1dE9uZU1pZGlFdmVudCgpLgorICoqLworc3RhdGljIGludCBnZXRfQ0lOKCBzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gKQoreworCWludCBjaW47CisKKwlpZiAoIG0tPm1vdXQuYnVmWzBdID09IDB4ZjcgKSB7CisJCWNpbiA9IDU7CisJfQorCWVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlsxXSA9PSAweGY3ICkgeworCQljaW4gPSA2OworCX0KKwllbHNlIGlmICggbS0+bW91dC5idWZbMl0gPT0gMHhmNyApIHsKKwkJY2luID0gNzsKKwl9CisJZWxzZSB7CisJCWlmICggbS0+bW91dC5pc0luRXhjbHVzaXZlID09IDEgKSB7CisJCQljaW4gPSA0OworCQl9IGVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlswXSA8IDB4ODAgKSB7CisJCQkvKiogT25lIGJ5dGUgdGhhdCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQuICoqLworCQkJY2luID0gMHhGOyAKKwkJfSBlbHNlIGlmICggbS0+bW91dC5idWZbMF0gPCAweGYwICkgeworCQkJLyoqIE1JREkgVm9pY2UgbWVzc2FnZXMgMHg4WCB0byAweEVYIG1hcCB0byBjaW4gMHg4IHRvIDB4RS4gKiovCisJCQljaW4gPSAobS0+bW91dC5idWZbMF0+PjQpJjB4MGY7IAorCQl9CisJCWVsc2UgeworCQkJLyoqIFNwZWNpYWwgbG9va3VwIHRhYmxlIGV4aXN0cyBmb3IgcmVhbC10aW1lIGV2ZW50cy4gKiovCisJCQljaW4gPSBjaW5fZjBmZlttLT5tb3V0LmJ1ZlswXS0weGYwXTsKKwkJfQorCX0KKworCXJldHVybiBjaW47Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKworLyoqIE1vdmUgZGF0YSB0byBVU0IgZW5kcG9pbnQgYnVmZmVyLgorICoKKyAqKi8KK3N0YXRpYyBpbnQgcHV0X29uZV9taWRpX2V2ZW50KHN0cnVjdCB1c2JfbWlkaWRldiAqbSkKK3sKKwlpbnQgY2luOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IG0tPm1vdXQuZXA7CisJaW50IHJldD0wOworCisJY2luID0gZ2V0X0NJTiggbSApOworCWlmICggY2luID4gMHgwZiB8fCBjaW4gPCAwICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJmVwLT5sb2NrLCBmbGFncyApOworCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gKG0tPm1vdXQuY2FibGVJZDw8NCkgfCBjaW47CisJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSBtLT5tb3V0LmJ1ZlswXTsKKwllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IG0tPm1vdXQuYnVmWzFdOworCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gbS0+bW91dC5idWZbMl07CisJaWYgKCBlcC0+YnVmV3JQdHIgPj0gZXAtPmJ1ZlNpemUgKSB7CisJCXJldCA9IGZsdXNoX21pZGlfYnVmZmVyKCBlcCApOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzKTsKKworCW0tPm1vdXQuYnVmWzBdID0gbS0+bW91dC5idWZbMV0gPSBtLT5tb3V0LmJ1ZlsyXSA9IDA7CisJbS0+bW91dC5idWZQdHIgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworLyoqIFdyaXRlIHRoZSBNSURJIG1lc3NhZ2UgdiBvbiB0aGUgbWlkaSBkZXZpY2UuCisgKiAgQ2FsbGVkIGJ5IHVzYl9taWRpX3dyaXRlKCk7CisgKiAgUmVzcG9uc2libGUgZm9yIHBhY2thZ2luZyBhIE1JREkgZGF0YSBzdHJlYW0gaW50byBVU0ItTUlESSBwYWNrZXRzLgorICoqLworCitzdGF0aWMgaW50IG1pZGlfd3JpdGUoIHN0cnVjdCB1c2JfbWlkaWRldiAqbSwgaW50IHYgKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IG0tPm1vdXQuZXA7CisJaW50IHJldD0wOworCXVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKXY7CisJdW5zaWduZWQgY2hhciBzeXNydF9idWZbNF07CisKKwlpZiAoIG0tPnNpbmdsZWJ5dGUgIT0gMCApIHsKKwkJLyoqIFNpbXBsZSBjb2RlIHRvIGhhbmRsZSB0aGUgc2luZ2xlLWJ5dGUgVVNCLU1JREkgcHJvdG9jb2wuICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCWlmICggZXAtPmJ1ZldyUHRyKzQgPiBlcC0+YnVmU2l6ZSApIHsKKwkJCXJldCA9IGZsdXNoX21pZGlfYnVmZmVyKCBlcCApOworCQkJaWYgKCAhcmV0ICkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gKG0tPm1vdXQuY2FibGVJZDw8NCkgfCAgMHgwZjsgLyogc2luZ2xlIGJ5dGUgKi8KKwkJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSBjOworCQllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IDA7CisJCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gMDsKKwkJaWYgKCBlcC0+YnVmV3JQdHIgPj0gZXAtPmJ1ZlNpemUgKSB7CisJCQlyZXQgPSBmbHVzaF9taWRpX2J1ZmZlciggZXAgKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisKKwkJcmV0dXJuIHJldDsKKwl9CisJLyoqIE5vcm1hbCBVU0ItTUlESSBwcm90b2NvbCBiZWdpbnMgaGVyZS4gKi8KKworCWlmICggYyA+IDB4ZjcgKSB7CS8qIHN5c3RlbTogUmVhbHRpbWUgbWVzc2FnZXMgKi8KKwkJLyoqIFJlYWx0aW1lIG1lc3NhZ2VzIGFyZSB3cml0dGVuIElNTUVESUFURUxZLiAqLworCQlzeXNydF9idWZbMF0gPSAobS0+bW91dC5jYWJsZUlkPDw0KSB8IDB4MGY7CisJCXN5c3J0X2J1ZlsxXSA9IGM7CisJCXN5c3J0X2J1ZlsyXSA9IDA7CisJCXN5c3J0X2J1ZlszXSA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCXJldCA9IHVzYl93cml0ZSggZXAsIHN5c3J0X2J1ZiwgNCApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KKworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICggYyA+PSAweDgwICkgeworCQlpZiAoIGMgPCAweGYwICkgeworCQkJbS0+bW91dC5sYXN0RXZlbnQgPSBjOworCQkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsKKwkJCW0tPm1vdXQuYnVmUmVtYWlucyA9IGdldF9yZW1haW5zKGMpOworCQl9IGVsc2UgaWYgKCBjID09IDB4ZjAgKSB7CisJCQkvKiBtLT5tb3V0Lmxhc3RFdmVudCA9IDA7ICovCisJCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAxOworCQkJbS0+bW91dC5idWZSZW1haW5zID0gZ2V0X3JlbWFpbnMoYyk7CisJCX0gZWxzZSBpZiAoIGMgPT0gMHhmNyAmJiBtLT5tb3V0LmlzSW5FeGNsdXNpdmUgPT0gMSApIHsKKwkJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KKwkJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSAxOworCQl9IGVsc2UgaWYgKCBjID4gMHhmMCApIHsKKwkJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KKwkJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSBnZXRfcmVtYWlucyhjKTsKKwkJfQorICAgIAorCX0gZWxzZSBpZiAoIG0tPm1vdXQuYnVmUmVtYWlucyA9PSAwICYmIG0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9PSAwICkgeworCQlpZiAoIG0tPm1vdXQubGFzdEV2ZW50ID09IDAgKSB7CisJCQlyZXR1cm4gMDsgLyogZGlzY2FyZCwgd2FpdGluZyBmb3IgdGhlIGZpcnN0IGV2ZW50ICovCisJCX0KKwkJLyoqIHRyYWNrIHN0YXR1cyAqKi8KKwkJbS0+bW91dC5idWZbMF0gPSBtLT5tb3V0Lmxhc3RFdmVudDsKKwkJbS0+bW91dC5idWZQdHIgPSAxOworCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSBnZXRfcmVtYWlucyhtLT5tb3V0Lmxhc3RFdmVudCktMTsKKwl9CisgIAorCW0tPm1vdXQuYnVmW20tPm1vdXQuYnVmUHRyKytdID0gYzsKKwltLT5tb3V0LmJ1ZlJlbWFpbnMtLTsKKwlpZiAoIG0tPm1vdXQuYnVmUmVtYWlucyA9PSAwIHx8IG0tPm1vdXQuYnVmUHRyID49IDMpIHsKKwkJcmV0ID0gcHV0X29uZV9taWRpX2V2ZW50KG0pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqICBCYXNpYyBjb250cmFjdDogVXNlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiBhIGZpbGUuCisgKiAgT24gc3VjY2VzcywgdGhlIG5vbi1uZWdhdGl2ZSBwb3NpdGlvbiBpcyByZXBvcnRlZC4KKyAqICBPbiBmYWlsdXJlLCB0aGUgbmVnYXRpdmUgb2YgYW4gZXJyb3IgY29kZSBpcyByZXBvcnRlZC4KKyAqCisgKiAgQmVjYXVzZSBhIE1JRElTdHJlYW0gaXMgbm90IGEgZmlsZSwgYWxsIHNlZWsgb3BlcmF0aW9ucyBhcmUgZG9vbWVkIHRvIGZhaWwuCisgKgorICoqLworc3RhdGljIGxvZmZfdCB1c2JfbWlkaV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisJLyoqIFRlbGwgdXNlciB5b3UgY2Fubm90IHNlZWsgb24gYSBQSVBFLWxpa2UgZGV2aWNlLiAqKi8KKwlyZXR1cm4gLUVTUElQRTsKK30KKworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqIEJhc2ljIGNvbnRyYWN0OiBCbG9jayB1bnRpbCBjb3VudCBieXRlcyBoYXZlIGJlZW4gcmVhZCBvciBhbiBlcnJvciBvY2N1cnMuCisgKgorICoqLworCitzdGF0aWMgc3NpemVfdCB1c2JfbWlkaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gPSAoc3RydWN0IHVzYl9taWRpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICplcCA9IG0tPm1pbi5lcDsKKwlzc2l6ZV90IHJldDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICggIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBjb3VudCkgKSB7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoIGNvdW50ID09IDAgKSB7CisJCXJldHVybiAwOworCX0KKworCWFkZF93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7CisJcmV0ID0gMDsKKwl3aGlsZSggY291bnQgPiAwICkgeworCQlpbnQgY250OworCQlpbnQgZCA9IChpbnQpY291bnQ7CisKKwkJY250ID0gbS0+bWluLmJ1ZlJlbWFpbnM7CisJCWlmICggY250ID4gZCApIHsKKwkJCWNudCA9IGQ7CisJCX0KKworCQlpZiAoIGNudCA8PSAwICkgeworCQkJaWYgKCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyApIHsKKwkJCQlpZiAoIXJldCkgCisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZSgpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJaWYoIXJldCkKKwkJCQkJcmV0PS1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJeworCQkJaW50IGk7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOyAvKiB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgZW5kcG9pbnQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCQlpZiAoIGNvcHlfdG9fdXNlciggYnVmZmVyK2ksIG0tPm1pbi5idWYrbS0+bWluLmJ1ZlJkUHRyLCAxICkgKSB7CisJCQkJCWlmICggIXJldCApCisJCQkJCQlyZXQgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbS0+bWluLmJ1ZlJkUHRyID0gKG0tPm1pbi5idWZSZFB0cisxKSVNSURJX0lOX0JVRlNJWjsKKwkJCQltLT5taW4uYnVmUmVtYWlucyAtPSAxOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmVwLT5sb2NrLCBmbGFncyApOworCQl9CisKKwkJY291bnQtPWNudDsKKwkJYnVmZmVyKz1jbnQ7CisJCXJldCs9Y250OworCisJCWJyZWFrOworCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiAgQmFzaWMgQ29udHJhY3Q6IFRha2UgTUlESSBkYXRhIGJ5dGUtYnktYnl0ZSBhbmQgcGFzcyBpdCB0bworICogIHdyaXRlTWlkaSgpIHdoaWNoIHBhY2thZ2VzIE1JREkgZGF0YSBpbnRvIFVTQi1NSURJIHN0cmVhbS4KKyAqICBUaGVuIGZsdXNoTWlkaURhdGEoKSBpcyBjYWxsZWQgdG8gZW5zdXJlIGFsbCBieXRlcyBoYXZlIGJlZW4gd3JpdHRlbgorICogIGluIGEgdGltZWx5IGZhc2hpb24uCisgKgorICoqLworCitzdGF0aWMgc3NpemVfdCB1c2JfbWlkaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBsb25nIGludCBmbGFnczsKKworCWlmICggIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBjb3VudCkgKSB7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoIGNvdW50ID09IDAgKSB7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IDA7CisJd2hpbGUoIGNvdW50ID4gMCApIHsKKwkJdW5zaWduZWQgY2hhciBjOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigodW5zaWduZWQgY2hhciAqKSZjLCBidWZmZXIsIDEpKSB7CisJCQlpZiAoIHJldCA9PSAwICkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYoIG1pZGlfd3JpdGUobSwgKGludCljKSApIHsKKwkJCWlmICggcmV0ID09IDAgKQorCQkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQljb3VudC0tOworCQlidWZmZXIrKzsKKwkJcmV0Kys7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoICZtLT5tb3V0LmVwLT5sb2NrLCBmbGFncyApOworCWlmICggZmx1c2hfbWlkaV9idWZmZXIobS0+bW91dC5lcCkgPCAwICkgeworCQlyZXQgPSAtRUZBVUxUOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmbS0+bW91dC5lcC0+bG9jaywgZmxhZ3MgKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCisgKgorICogQmFzaWMgY29udHJhY3Q6ICBXYWl0IChzcGluKSB1bnRpbCByZWFkeSB0byByZWFkIG9yIHdyaXRlIG9uIHRoZSBmaWxlLgorICoKKyAqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX21pZGlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmllcCA9IG0tPm1pbi5lcDsKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm9lcCA9IG0tPm1vdXQuZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisgIAorCWlmICggZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCApIHsKKwkJcG9sbF93YWl0KCBmaWxlLCAmaWVwLT53YWl0LCB3YWl0ICk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmaWVwLT5sb2NrLCBmbGFncyApOworCQlpZiAoIG0tPm1pbi5idWZSZW1haW5zID4gMCApCisJCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZpZXAtPmxvY2ssIGZsYWdzICk7CisJfQorCisJaWYgKCBmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSApIHsKKwkJcG9sbF93YWl0KCBmaWxlLCAmb2VwLT53YWl0LCB3YWl0ICk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmb2VwLT5sb2NrLCBmbGFncyApOworCQlpZiAoIG9lcC0+YnVmV3JQdHIgPCBvZXAtPmJ1ZlNpemUgKQorCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm9lcC0+bG9jaywgZmxhZ3MgKTsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqIEJhc2ljIGNvbnRyYWN0OiBUaGlzIGlzIGFsd2F5cyB0aGUgZmlyc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGUKKyAqIGRldmljZSBub2RlLiBJZiBubyBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIG9wZW4gc3VjY2VlZHMgd2l0aG91dCBhbnkKKyAqIG5vdGlmaWNhdGlvbiBnaXZlbiB0byB0aGUgbW9kdWxlLgorICoKKyAqKi8KKworc3RhdGljIGludCB1c2JfbWlkaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzOworCXN0cnVjdCB1c2JfbWlkaWRldiAgICAqbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdWNjZWVkID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogT3BlbiBtaW5vcj0gJWQuXG4iLCBtaW5vcik7CisjZW5kaWYKKworCWZvcig7OykgeworCQlkb3duKCZvcGVuX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJm1pZGlkZXZzLCBtaWRpZGV2KSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZzLT5taWRpRGV2TGlzdCwgbGlzdCkgeworCQkJCWlmICggISgobS0+ZGV2X21pZGkgXiBtaW5vcikgJiB+MHhmKSApCisJCQkJCWdvdG8gZGV2aWNlX2ZvdW5kOworCQkJfQorCQl9CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCisJZGV2aWNlX2ZvdW5kOgorCQlpZiAoICFzLT51c2JkZXYgKSB7CisJCQl1cCgmb3Blbl9zZW0pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCAhKG0tPm9wZW5fbW9kZSAmIGZpbGUtPmZfbW9kZSkgKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICkgeworCQkJdXAoJm9wZW5fc2VtKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlhZGRfd2FpdF9xdWV1ZSggJm9wZW5fd2FpdCwgJndhaXQgKTsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJc2NoZWR1bGUoKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoICZvcGVuX3dhaXQsICZ3YWl0ICk7CisJCWlmICggc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbTsKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnMtPmxvY2ssIGZsYWdzICk7CisKKwlpZiAoICEobS0+b3Blbl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpICkgeworCQkvL0ZJWE1FOiBpbnRlbnRlZCBzZW1hbnRpY3MgdW5jbGVhciBoZXJlCisJCW0tPm1pbi5idWZSZFB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZXclB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZSZW1haW5zICAgICA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZtLT5taW4uZXAtPmxvY2spOworCisJCW0tPm1vdXQuYnVmUHRyICAgICAgICA9IDA7CisJCW0tPm1vdXQuYnVmUmVtYWlucyAgICA9IDA7CisJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCW0tPm1vdXQubGFzdEV2ZW50ICAgICA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZtLT5tb3V0LmVwLT5sb2NrKTsKKwl9CisKKwlpZiAoIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBtLT5taW4uZXAgIT0gTlVMTCApIHsKKwkJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3NlcDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKKwkJbS0+bWluLmVwLT5jYWJsZXNbbS0+bWluLmNhYmxlSWRdID0gbTsKKwkJbS0+bWluLmVwLT5yZWFkZXJzICs9IDE7CisJCW0tPm1pbi5idWZSZFB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZXclB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZSZW1haW5zICAgICA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKKworCQlpZiAoICEobS0+bWluLmVwLT51cmJTdWJtaXR0ZWQpKSB7CisKKwkJCS8qIHVyYi0+ZGV2IG11c3QgYmUgcmVpbml0aWFsaXplZCBvbiAyLjQueCBrZXJuZWxzICovCisJCQltLT5taW4uZXAtPnVyYi0+ZGV2ID0gbS0+bWluLmVwLT51c2JkZXY7CisKKwkJCWlmICggdXNiX3N1Ym1pdF91cmIobS0+bWluLmVwLT51cmIsIEdGUF9BVE9NSUMpICkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogQ2Fubm90IHN1Ym1pdCB1cmIgZm9yIE1JREktSU5cbiIpOworCQkJfQorCQkJbS0+bWluLmVwLT51cmJTdWJtaXR0ZWQgPSAxOworCQl9CisJCW0tPm9wZW5fbW9kZSB8PSBGTU9ERV9SRUFEOworCQlzdWNjZWVkID0gMTsKKwl9CisKKwlpZiAoIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYgbS0+bW91dC5lcCAhPSBOVUxMICkgeworCQltLT5tb3V0LmJ1ZlB0ciAgICAgICAgPSAwOworCQltLT5tb3V0LmJ1ZlJlbWFpbnMgICAgPSAwOworCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOworCQltLT5tb3V0Lmxhc3RFdmVudCAgICAgPSAwOworCQltLT5vcGVuX21vZGUgfD0gRk1PREVfV1JJVEU7CisJCXN1Y2NlZWQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZzLT5sb2NrLCBmbGFncyApOworCisJcy0+Y291bnQrKzsKKwl1cCgmb3Blbl9zZW0pOworCisJLyoqIENoYW5nZWQgdG8gcHJldmVudCBleHRyYSBpbmNyZW1lbnRzIHRvIFVTRV9DT1VOVC4gKiovCisJaWYgKCFzdWNjZWVkKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisjaWYgMAorCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBPcGVuIFN1Y2NlZWRlZC4gbWlub3I9ICVkLlxuIiwgbWlub3IpOworI2VuZGlmCisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7IC8qKiBTdWNjZXNzLiAqKi8KK30KKworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqICBCYXNpYyBjb250cmFjdDogQ2xvc2UgYW4gb3BlbmVkIGZpbGUgYW5kIGRlYWxsb2NhdGUgYW55dGhpbmcgd2UgYWxsb2NhdGVkLgorICogIExpa2Ugb3BlbigpLCB0aGlzIGNhbiBiZSBtaXNzaW5nLiBJZiBvcGVuIHNldCBmaWxlLT5wcml2YXRlX2RhdGEsCisgKiAgcmVsZWFzZSgpIG11c3QgY2xlYXIgaXQuCisgKgorICoqLworCitzdGF0aWMgaW50IHVzYl9taWRpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMgPSAoc3RydWN0IHVzYl9taWRpX3N0YXRlICopbS0+bWlkaTsKKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogQ2xvc2UuXG4iKTsKKyNlbmRpZgorCisJZG93bigmb3Blbl9zZW0pOworCisJaWYgKCBtLT5vcGVuX21vZGUgJiBGTU9ERV9XUklURSApIHsKKwkJbS0+b3Blbl9tb2RlICY9IH5GTU9ERV9XUklURTsKKwkJdXNiX2tpbGxfdXJiKCBtLT5tb3V0LmVwLT51cmIgKTsKKwl9CisKKwlpZiAoIG0tPm9wZW5fbW9kZSAmIEZNT0RFX1JFQUQgKSB7CisJICAgICAgICB1bnNpZ25lZCBsb25nIGludCBmbGFnc2VwOworCSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKKyAgICAgICAgICAgICAgICBtLT5taW4uZXAtPmNhYmxlc1ttLT5taW4uY2FibGVJZF0gPSBOVUxMOyAvLyBkaXNjYXJkIGNhYmxlCisgICAgICAgICAgICAgICAgbS0+bWluLmVwLT5yZWFkZXJzIC09IDE7CisJCW0tPm9wZW5fbW9kZSAmPSB+Rk1PREVfUkVBRDsKKwkJaWYgKCBtLT5taW4uZXAtPnJlYWRlcnMgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgbS0+bWluLmVwLT51cmJTdWJtaXR0ZWQgKSB7CisJCQltLT5taW4uZXAtPnVyYlN1Ym1pdHRlZCA9IDA7CisJCQl1c2Jfa2lsbF91cmIobS0+bWluLmVwLT51cmIpOworCQl9CisJICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmbS0+bWluLmVwLT5sb2NrLCBmbGFnc2VwICk7CisJfQorCisJcy0+Y291bnQtLTsKKworCXVwKCZvcGVuX3NlbSk7CisJd2FrZV91cCgmb3Blbl93YWl0KTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9taWRpX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CXVzYl9taWRpX2xsc2VlaywKKwkucmVhZCA9CQl1c2JfbWlkaV9yZWFkLAorCS53cml0ZSA9CXVzYl9taWRpX3dyaXRlLAorCS5wb2xsID0JCXVzYl9taWRpX3BvbGwsCisJLm9wZW4gPQkJdXNiX21pZGlfb3BlbiwKKwkucmVsZWFzZSA9CXVzYl9taWRpX3JlbGVhc2UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKiBSZXR1cm5zIGZpbGxlZCBtaWRpX2luX2VuZHBvaW50IHN0cnVjdHVyZSBvciBudWxsIG9uIGZhaWx1cmUuCisgKgorICogUGFyYW1ldGVyczoKKyAqCWQgICAgICAgIC0gYSB1c2JfZGV2aWNlCisgKgllbmRQb2ludCAtIEFuIHVzYiBlbmRwb2ludCBpbiB0aGUgcmFuZ2UgMCB0byAxNS4KKyAqIENhbGxlZCBieSBhbGxvY1VzYk1pZGlEZXYoKTsKKyAqCisgKiovCisKK3N0YXRpYyBzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqYWxsb2NfbWlkaV9pbl9lbmRwb2ludCggc3RydWN0IHVzYl9kZXZpY2UgKmQsIGludCBlbmRQb2ludCApCit7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmVwOworCWludCBidWZTaXplOworCWludCBwaXBlOworCisJZW5kUG9pbnQgJj0gMHgwZjsgLyogU2lsZW50bHkgZm9yY2UgZW5kUG9pbnQgdG8gbGllIGluIHJhbmdlIDAgdG8gMTUuICovCisKKwlwaXBlID0gIHVzYl9yY3ZidWxrcGlwZSggZCwgZW5kUG9pbnQgKTsKKwlidWZTaXplID0gdXNiX21heHBhY2tldCggZCwgcGlwZSwgMCApOworCS8qIHVzYl9waXBlaW4oKSA9ICEgdXNiX3BpcGVvdXQoKSA9IHRydWUgZm9yIGFuIGluIEVuZHBvaW50ICovCisKKwllcCA9IChzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX2luX2VuZHBvaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIGluLWVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldCggZXAsIDAsIHNpemVvZihzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCkgKTsKKy8vICAgICAgdGhpcyBzZXRzIGNhYmxlc1tdIGFuZCByZWFkZXJzIHRvIDAsIHRvby4KKy8vICAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykgZXAtPmNhYmxlc1tpXSA9IDA7IC8vIGRpc2NhcmQgY2FibGUKKy8vICAgICAgZXAtPnJlYWRlcnMgPSAwOworCisJZXAtPmVuZHBvaW50ID0gZW5kUG9pbnQ7CisKKwllcC0+cmVjdkJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopa21hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikqKGJ1ZlNpemUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoICFlcC0+cmVjdkJ1ZiApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgaW4tZW5kcG9pbnQgYnVmZmVyXG4iKTsKKwkJa2ZyZWUoZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllcC0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsgLyogbm8gSVNPICovCisJaWYgKCAhZXAtPnVyYiApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgaW4tZW5kcG9pbnQgdXJiXG4iKTsKKwkJa2ZyZWUoZXAtPnJlY3ZCdWYpOworCQlrZnJlZShlcCk7CisJCXJldHVybiBOVUxMOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYiggZXAtPnVyYiwgZCwgCisJCSAgICAgICB1c2JfcmN2YnVsa3BpcGUoZCwgZW5kUG9pbnQpLAorCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKillcC0+cmVjdkJ1ZiwgYnVmU2l6ZSwKKwkJICAgICAgIHVzYl9idWxrX3JlYWQsIGVwICk7CisKKwkvKiBlcC0+YnVmUmRQdHIgICAgID0gMDsgKi8KKwkvKiBlcC0+YnVmV3JQdHIgICAgID0gMDsgKi8KKwkvKiBlcC0+YnVmUmVtYWlucyAgID0gMDsgKi8KKwkvKiBlcC0+dXJiU3VibWl0dGVkID0gMDsgKi8KKwllcC0+cmVjdkJ1ZlNpemUgID0gYnVmU2l6ZTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVwLT53YWl0KTsKKworCXJldHVybiBlcDsKK30KKworc3RhdGljIGludCByZW1vdmVfbWlkaV9pbl9lbmRwb2ludCggc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbiApCit7CisJdXNiX2tpbGxfdXJiKCBtaW4tPnVyYiApOworCXVzYl9mcmVlX3VyYiggbWluLT51cmIgKTsKKwlrZnJlZSggbWluLT5yZWN2QnVmICk7CisJa2ZyZWUoIG1pbiApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBSZXR1cm5zIGZpbGxlZCBtaWRpX291dF9lbmRwb2ludCBzdHJ1Y3R1cmUgb3IgbnVsbCBvbiBmYWlsdXJlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKglkICAgICAgICAtIGEgdXNiX2RldmljZQorICoJZW5kUG9pbnQgLSBBbiB1c2IgZW5kcG9pbnQgaW4gdGhlIHJhbmdlIDAgdG8gMTUuCisgKiBDYWxsZWQgYnkgYWxsb2NVc2JNaWRpRGV2KCk7CisgKgorICoqLworc3RhdGljIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqYWxsb2NfbWlkaV9vdXRfZW5kcG9pbnQoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCBpbnQgZW5kUG9pbnQgKQoreworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAgPSBOVUxMOworCWludCBwaXBlOworCWludCBidWZTaXplOworCisJZW5kUG9pbnQgJj0gMHgwZjsKKwlwaXBlID0gIHVzYl9zbmRidWxrcGlwZSggZCwgZW5kUG9pbnQgKTsKKwlidWZTaXplID0gdXNiX21heHBhY2tldCggZCwgcGlwZSwgMSApOworCisJZXAgPSAoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIG91dC1lbmRwb2ludFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQoIGVwLCAwLCBzaXplb2Yoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50KSApOworCisJZXAtPmVuZHBvaW50ID0gZW5kUG9pbnQ7CisJZXAtPmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopa21hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikqYnVmU2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAtPmJ1ZiApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgb3V0LWVuZHBvaW50IGJ1ZmZlclxuIik7CisJCWtmcmVlKGVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXAtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7IC8qIG5vIElTTyAqLworCWlmICggIWVwLT51cmIgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIG91dC1lbmRwb2ludCB1cmJcbiIpOworCQlrZnJlZShlcC0+YnVmKTsKKwkJa2ZyZWUoZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllcC0+YnVmU2l6ZSAgICAgICA9IGJ1ZlNpemU7CisJLyogZXAtPmJ1ZldyUHRyICAgICAgPSAwOyAqLworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndhaXQpOworCisJcmV0dXJuIGVwOworfQorCisKK3N0YXRpYyBpbnQgcmVtb3ZlX21pZGlfb3V0X2VuZHBvaW50KCBzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXQgKQoreworCXVzYl9raWxsX3VyYiggbW91dC0+dXJiICk7CisJdXNiX2ZyZWVfdXJiKCBtb3V0LT51cmIgKTsKKwlrZnJlZSggbW91dC0+YnVmICk7CisJa2ZyZWUoIG1vdXQgKTsKKworCXJldHVybiAwOworfQorCisKKy8qKiBSZXR1cm5zIGEgZmlsbGVkIHVzYl9taWRpZGV2IHN0cnVjdHVyZSwgcmVnaXN0ZXJlZCBhcyBhIExpbnV4IE1JREkgZGV2aWNlLgorICoKKyAqIFJldHVybnMgbnVsbCBpZiBtZW1vcnkgaXMgbm90IGF2YWlsYWJsZSBvciB0aGUgZGV2aWNlIGNhbm5vdCBiZSByZWdpc3RlcmVkLgorICogQ2FsbGVkIGJ5IGFsbG9jVXNiTWlkaURldigpOworICoKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX21pZGlkZXYgKmFsbG9jTWlkaURldigKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMsCisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbiwKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXQsCisJaW50IGluQ2FibGVJZCwKKwlpbnQgb3V0Q2FibGVJZCApCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptOworCisJbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21pZGlkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KG0sIDAsIHNpemVvZihzdHJ1Y3QgdXNiX21pZGlkZXYpKTsKKworCWlmICgobS0+ZGV2X21pZGkgPSByZWdpc3Rlcl9zb3VuZF9taWRpKCZ1c2JfbWlkaV9mb3BzLCAtMSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IGNhbm5vdCByZWdpc3RlciBtaWRpIGRldmljZVxuIik7CisJCWtmcmVlKG0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltLT5taWRpICAgICAgICAgICAgICAgPSBzOworCS8qIG0tPm9wZW5fbW9kZSAgICAgICAgICA9IDA7ICovCisKKwlpZiAoIG1pbiApIHsKKwkJbS0+bWluLmVwICAgICAgICAgICAgID0gbWluOworCQltLT5taW4uZXAtPnVzYmRldiAgICAgPSBzLT51c2JkZXY7CisJCW0tPm1pbi5jYWJsZUlkICAgICAgICA9IGluQ2FibGVJZDsKKwl9CisJLyogbS0+bWluLmJ1ZlB0ciAgICAgICAgID0gMDsgKi8KKwkvKiBtLT5taW4uYnVmUmVtYWlucyAgICAgPSAwOyAqLworCisJaWYgKCBtb3V0ICkgeworCQltLT5tb3V0LmVwICAgICAgICAgICAgPSBtb3V0OworCQltLT5tb3V0LmVwLT51c2JkZXYgICAgPSBzLT51c2JkZXY7CisJCW0tPm1vdXQuY2FibGVJZCAgICAgICA9IG91dENhYmxlSWQ7CisJfQorCS8qIG0tPm1vdXQuYnVmUHRyICAgICAgICA9IDA7ICovCisJLyogbS0+bW91dC5idWZSZW1haW5zICAgID0gMDsgKi8KKwkvKiBtLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOyAqLworCS8qIG0tPm1vdXQubGFzdEV2ZW50ICAgICA9IDA7ICovCisKKwltLT5zaW5nbGVieXRlICAgICAgICAgPSBzaW5nbGVieXRlOworCisJcmV0dXJuIG07Cit9CisKKworc3RhdGljIHZvaWQgcmVsZWFzZV9taWRpX2RldmljZSggc3RydWN0IHVzYl9taWRpX3N0YXRlICpzICkKK3sKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKm07CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbjsKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXQ7CisKKwlpZiAoIHMtPmNvdW50ID4gMCApIHsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuOworCX0KKwl1cCggJm9wZW5fc2VtICk7CisJd2FrZV91cCggJm9wZW5fd2FpdCApOworCisJd2hpbGUoIWxpc3RfZW1wdHkoJnMtPmluRW5kcG9pbnRMaXN0KSkgeworCQltaW4gPSBsaXN0X2VudHJ5KHMtPmluRW5kcG9pbnRMaXN0Lm5leHQsIHN0cnVjdCBtaWRpX2luX2VuZHBvaW50LCBsaXN0KTsKKwkJbGlzdF9kZWwoJm1pbi0+bGlzdCk7CisJCXJlbW92ZV9taWRpX2luX2VuZHBvaW50KG1pbik7CisJfQorCisJd2hpbGUoIWxpc3RfZW1wdHkoJnMtPm91dEVuZHBvaW50TGlzdCkpIHsKKwkJbW91dCA9IGxpc3RfZW50cnkocy0+b3V0RW5kcG9pbnRMaXN0Lm5leHQsIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCwgbGlzdCk7CisJCWxpc3RfZGVsKCZtb3V0LT5saXN0KTsKKwkJcmVtb3ZlX21pZGlfb3V0X2VuZHBvaW50KG1vdXQpOworCX0KKworCXdoaWxlKCFsaXN0X2VtcHR5KCZzLT5taWRpRGV2TGlzdCkpIHsKKwkJbSA9IGxpc3RfZW50cnkocy0+bWlkaURldkxpc3QubmV4dCwgc3RydWN0IHVzYl9taWRpZGV2LCBsaXN0KTsKKwkJbGlzdF9kZWwoJm0tPmxpc3QpOworCQlrZnJlZShtKTsKKwl9CisKKwlrZnJlZShzKTsKKworCXJldHVybjsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKiBVdGlsaXR5IHJvdXRpbmUgdG8gZmluZCBhIGRlc2NyaXB0b3IgaW4gYSBkdW1wIG9mIG1hbnkgZGVzY3JpcHRvcnMuCisgKiBSZXR1cm5zIHN0YXJ0IG9mIGRlc2NyaXB0b3Igb3IgTlVMTCBpZiBub3QgZm91bmQuIAorICogZGVzY1N0YXJ0IHBvaW50ZXIgdG8gbGlzdCBvZiBpbnRlcmZhY2VzLgorICogZGVzY0xlbmd0aCBsZW5ndGggKGluIGJ5dGVzKSBvZiBkdW1wCisgKiBhZnRlciAoaWdub3JlZCBpZiBOVUxMKSB0aGlzIHJvdXRpbmUgcmV0dXJucyBvbmx5IGRlc2NyaXB0b3JzIGFmdGVyICJhZnRlciIKKyAqIGR0eXBlIChtYW5kYXRvcnkpIFRoZSBkZXNjcmlwdG9yIHR5cGUuCisgKiBpZmFjZSAoaWdub3JlZCBpZiAtMSkgcmV0dXJucyBkZXNjcmlwdG9yIGF0L2ZvbGxvd2luZyBnaXZlbiBpbnRlcmZhY2UKKyAqIGFsdFNldHRpbmcgKGlnbm9yZWQgaWYgLTEpIHJldHVybnMgZGVzY3JpcHRvciBhdC9mb2xsb3dpbmcgZ2l2ZW4gYWx0U2V0dGluZworICoKKyAqCisgKiAgQ2FsbGVkIGJ5IHBhcnNlRGVzY3JpcHRvcigpLCBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoKTsKKyAqCisgKi8KK3N0YXRpYyB2b2lkICpmaW5kX2Rlc2NyaXB0b3IoIHZvaWQgKmRlc2NTdGFydCwgdW5zaWduZWQgaW50IGRlc2NMZW5ndGgsIHZvaWQgKmFmdGVyLCB1bnNpZ25lZCBjaGFyIGR0eXBlLCBpbnQgaWZhY2UsIGludCBhbHRTZXR0aW5nICkKK3sKKwl1bnNpZ25lZCBjaGFyICpwLCAqZW5kLCAqbmV4dDsKKwlpbnQgaW50ZXJmYWNlTnVtYmVyID0gLTEsIGFsdFNldCA9IC0xOworCisJcCA9IGRlc2NTdGFydDsKKwllbmQgPSBwICsgZGVzY0xlbmd0aDsKKwlmb3IoIDsgcCA8IGVuZDsgKSB7CisJCWlmICggcFswXSA8IDIgKQorCQkJcmV0dXJuIE5VTEw7CisJCW5leHQgPSBwICsgcFswXTsKKwkJaWYgKCBuZXh0ID4gZW5kICkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoIHBbMV0gPT0gVVNCX0RUX0lOVEVSRkFDRSApIHsKKwkJCWlmICggcFswXSA8IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSApCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpbnRlcmZhY2VOdW1iZXIgPSBwWzJdOworCQkJYWx0U2V0ID0gcFszXTsKKwkJfQorCQlpZiAoIHBbMV0gPT0gZHR5cGUgJiYKKwkJICAgICAoICFhZnRlciB8fCAoIHAgPiAodW5zaWduZWQgY2hhciAqKWFmdGVyKSApICYmCisJCSAgICAgKCAoIGlmYWNlID09IC0xKSB8fCAoaWZhY2UgPT0gaW50ZXJmYWNlTnVtYmVyKSApICYmCisJCSAgICAgKCAoYWx0U2V0dGluZyA9PSAtMSkgfHwgKGFsdFNldHRpbmcgPT0gYWx0U2V0KSApKSB7CisJCQlyZXR1cm4gcDsKKwkJfQorCQlwID0gbmV4dDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKiBVdGlsaXR5IHRvIGZpbmQgYSBjbGFzcy1zcGVjaWZpYyBpbnRlcmZhY2UgZGVzY3JpcHRvci4KKyAqICBkc3VidHlwZSBpcyBhIGRlc2NyaXB0b3Igc3VidHlwZQorICogIENhbGxlZCBieSBwYXJzZURlc2NyaXB0b3IoKTsKKyAqKi8KK3N0YXRpYyB2b2lkICpmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3Iodm9pZCAqZGVzY1N0YXJ0LCB1bnNpZ25lZCBpbnQgZGVzY0xlbmd0aCwgdm9pZCAqYWZ0ZXIsIHU4IGRzdWJ0eXBlLCBpbnQgaWZhY2UsIGludCBhbHRTZXR0aW5nKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisgIAorCXAgPSBmaW5kX2Rlc2NyaXB0b3IoIGRlc2NTdGFydCwgZGVzY0xlbmd0aCwgYWZ0ZXIsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIGlmYWNlLCBhbHRTZXR0aW5nICk7CisJd2hpbGUgKCBwICkgeworCQlpZiAoIHBbMF0gPj0gMyAmJiBwWzJdID09IGRzdWJ0eXBlICkKKwkJCXJldHVybiBwOworCQlwID0gZmluZF9kZXNjcmlwdG9yKCBkZXNjU3RhcnQsIGRlc2NMZW5ndGgsIHAsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIAorCQkJCSAgICAgaWZhY2UsIGFsdFNldHRpbmcgKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoqIFRoZSBtYWdpYyBvZiBtYWtpbmcgYSBuZXcgdXNiX21pZGlfZGV2aWNlIGZyb20gY29uZmlnIGhhcHBlbnMgaGVyZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlLWluZyB0aGlzIHJldHVybiB2YWx1ZSAoaWYgbm90IE5VTEwpLgorICoKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICpwYXJzZV9kZXNjcmlwdG9yKCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgYnVmU2l6ZSwgdW5zaWduZWQgaW50IGlmbnVtICwgdW5zaWduZWQgaW50IGFsdFNldHRpbmcsIGludCBxdWlya3MpCit7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSAqdTsKKwl1bnNpZ25lZCBjaGFyICpwMTsKKwl1bnNpZ25lZCBjaGFyICpwMjsKKwl1bnNpZ25lZCBjaGFyICpuZXh0OworCWludCBpZXAsIG9lcDsKKwlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgbG9uZ0JpdHM7CisJaW50IHBpbnMsIG5ieXRlcywgb2Zmc2V0LCBzaGlmdCwgamFjazsKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCS8qKiBKYWNrcyBjYW4gaGF2ZSBhc3NvY2lhdGVkIG5hbWVzLiAgKiovCisJdW5zaWduZWQgY2hhciBqYWNrMnN0cmluZ1syNTZdOworI2VuZGlmCisKKwl1ID0gTlVMTDsKKwkvKiBmaW5kIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgKi8KKwlwMSA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvciggYnVmZmVyLCBidWZTaXplLCBOVUxMLAorCQkJCQkgIE1TX0hFQURFUiwgaWZudW0sIGFsdFNldHRpbmcpOworCisJaWYgKCAhcDEgKSB7CisJCWdvdG8gZXJyb3JfZW5kOworCX0KKworCWlmICggcDFbMF0gPCBNU19IRUFERVJfTEVOR1RIICkgeworCQlnb3RvIGVycm9yX2VuZDsKKwl9CisKKwkvKiBBc3N1bWUgc3VjY2Vzcy4gU2luY2UgdGhlIGRldmljZSBjb3JyZXNwb25kcyB0byBVU0ItTUlESSBzcGVjLCB3ZSBhc3N1bWUKKwkgICB0aGF0IHRoZSByZXN0IG9mIHRoZSBVU0IgMi4wIHNwZWMgaXMgb2JleWVkLiAqLworCisJdSA9IChzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICopa21hbGxvYyggc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UpLCBHRlBfS0VSTkVMICk7CisJaWYgKCAhdSApIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXUtPmRldmljZU5hbWUgPSBOVUxMOworCXUtPmlkVmVuZG9yID0gbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJdS0+aWRQcm9kdWN0ID0gbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCXUtPmludGVyZmFjZSA9IGlmbnVtOworCXUtPmFsdFNldHRpbmcgPSBhbHRTZXR0aW5nOworCXUtPmluWzBdLmVuZHBvaW50ID0gLTE7CisJdS0+aW5bMF0uY2FibGVJZCA9IC0xOworCXUtPm91dFswXS5lbmRwb2ludCA9IC0xOworCXUtPm91dFswXS5jYWJsZUlkID0gLTE7CisKKworCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBNSURJU3RyZWFtaW5nIGRldmljZSBjb3JyZXNwb25kaW5nIHRvIFJlbGVhc2UgJWQuJTAyZCBvZiBzcGVjLlxuIiwKKwkgICAgICAgKHAxWzRdID4+IDQpICogMTAgKyAocDFbNF0gJiAweDBmICksCisJICAgICAgIChwMVszXSA+PiA0KSAqIDEwICsgKHAxWzNdICYgMHgwZiApCisJCSk7CisKKwlsZW5ndGggPSBwMVs1XSB8IChwMVs2XSA8PCA4KTsKKworI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCisJbWVtc2V0KGphY2syc3RyaW5nLCAwLCBzaXplb2YodW5zaWduZWQgY2hhcikgKiAyNTYpOworI2VuZGlmCisKKwlsZW5ndGggLT0gcDFbMF07CisJZm9yIChwMiA9IHAxICsgcDFbMF07IGxlbmd0aCA+IDA7IHAyID0gbmV4dCkgeworCQluZXh0ID0gcDIgKyBwMlswXTsKKwkJbGVuZ3RoIC09IHAyWzBdOworCisJCWlmIChwMlswXSA8IDIgKQorCQkJYnJlYWs7CisJCWlmIChwMlsxXSAhPSBVU0JfRFRfQ1NfSU5URVJGQUNFKQorCQkJYnJlYWs7CisJCWlmIChwMlsyXSA9PSBNSURJX0lOX0pBQ0sgJiYgcDJbMF0gPj0gNiApIHsKKwkJCWphY2sgPSBwMls0XTsKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCQkJamFjazJzdHJpbmdbamFja10gPSBwMls1XTsKKyNlbmRpZgorCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIElOIEphY2sgMHglMDJ4ICVzXG4iLAorCQkJICAgICAgIGphY2ssIChwMlszXSA9PSBFTUJFRERFRF9KQUNLKT8iRU1CRURERUQiOiJFWFRFUk5BTCIgKTsKKwkJfSBlbHNlIGlmICggcDJbMl0gPT0gTUlESV9PVVRfSkFDSyAmJiBwMlswXSA+PSA2KSB7CisJCQlwaW5zID0gcDJbNV07CisJCQlpZiAoIHAyWzBdIDwgKDYgKyAyICogcGlucykgKQorCQkJCWNvbnRpbnVlOworCQkJamFjayA9IHAyWzRdOworI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCisJCQlqYWNrMnN0cmluZ1tqYWNrXSA9IHAyWzUgKyAyICogcGluc107CisjZW5kaWYKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBPVVQgSmFjayAweCUwMnggJXMsICVkIHBpbnNcbiIsCisJCQkgICAgICAgamFjaywgKHAyWzNdID09IEVNQkVEREVEX0pBQ0spPyJFTUJFRERFRCI6IkVYVEVSTkFMIiwgcGlucyApOworCQl9IGVsc2UgaWYgKCBwMlsyXSA9PSBFTEVNRU5UX0RFU0NSSVBUT1IgICYmIHAyWzBdICA+PSAxMCkgeworCQkJcGlucyA9IHAyWzRdOworCQkJaWYgKCBwMlswXSA8ICg5ICsgMiAqIHBpbnMgKSApCisJCQkJY29udGludWU7CisJCQluYnl0ZXMgPSBwMls4ICsgMiAqIHBpbnMgXTsKKwkJCWlmICggcDJbMF0gPCAoMTAgKyAyICogcGlucyArIG5ieXRlcykgKQorCQkJCWNvbnRpbnVlOworCQkJbG9uZ0JpdHMgPSAwTDsKKwkJCWZvciAoIG9mZnNldCA9IDAsIHNoaWZ0ID0gMDsgb2Zmc2V0IDwgbmJ5dGVzICYmIG9mZnNldCA8IDg7IG9mZnNldCArKywgc2hpZnQgKz0gOCkgeworCQkJCWxvbmdCaXRzIHw9ICgobG9uZykocDJbOSArIDIgKiBwaW5zICsgb2Zmc2V0XSkpIDw8IHNoaWZ0OworCQkJfQorCQkJamFjayA9IHAyWzNdOworI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCisJCQlqYWNrMnN0cmluZ1tqYWNrXSA9IHAyWzkgKyAyICogcGlucyArIG5ieXRlc107CisjZW5kaWYKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBFTEVNRU5UIDB4JTAyeCwgJWQvJWQgcGlucyBpbi9vdXQsIGJpdHM6IDB4JTAxNmx4XG4iLAorCQkJICAgICAgIGphY2ssIHBpbnMsIChpbnQpKHAyWzUgKyAyICogcGluc10pLCAobG9uZylsb25nQml0cyApOworCQl9IGVsc2UgeworCQl9CisJfQorCisJaWVwPTA7CisJb2VwPTA7CisKKwlpZiAocXVpcmtzPT0wKSB7CisJCS8qIE1JRElTVFJFQU0gKi8KKwkJcDIgPSBOVUxMOworCQlmb3IgKHAxID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgTlVMTCwgVVNCX0RUX0VORFBPSU5ULAorCQkJCQkgIGlmbnVtLCBhbHRTZXR0aW5nICk7IHAxOyBwMSA9IG5leHQgKSB7CisJCQluZXh0ID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgcDEsIFVTQl9EVF9FTkRQT0lOVCwKKwkJCQkJICAgICAgIGlmbnVtLCBhbHRTZXR0aW5nICk7IAorCQkJcDIgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBwMSwgVVNCX0RUX0NTX0VORFBPSU5ULAorCQkJCQkgICAgIGlmbnVtLCBhbHRTZXR0aW5nICk7IAorCisJCQlpZiAoIHAyICYmIG5leHQgJiYgKCBwMiA+IG5leHQgKSApCisJCQkJcDIgPSBOVUxMOworCisJCQlpZiAoIHAxWzBdIDwgOSB8fCAhcDIgfHwgcDJbMF0gPCA0ICkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCAocDFbMl0gJiAweDgwKSA9PSAweDgwICkgeworCQkJCWlmICggaWVwIDwgMTUgKSB7CisJCQkJCXBpbnMgPSBwMlszXTsgLyogbm90IHBpbnMgLS0gYWN0dWFsbHkgImNhYmxlcyIgKi8KKwkJCQkJaWYgKCBwaW5zID4gMTYgKQorCQkJCQkJcGlucyA9IDE2OworCQkJCQl1LT5pbltpZXBdLmVuZHBvaW50ID0gcDFbMl07CisJCQkJCXUtPmluW2llcF0uY2FibGVJZCA9ICggMSA8PCBwaW5zICkgLSAxOworCQkJCQlpZiAoIHUtPmluW2llcF0uY2FibGVJZCApCisJCQkJCQlpZXAgKys7CisJCQkJCWlmICggaWVwIDwgMTUgKSB7CisJCQkJCQl1LT5pbltpZXBdLmVuZHBvaW50ID0gLTE7CisJCQkJCQl1LT5pbltpZXBdLmNhYmxlSWQgPSAtMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCBvZXAgPCAxNSApIHsKKwkJCQkJcGlucyA9IHAyWzNdOyAvKiBub3QgcGlucyAtLSBhY3R1YWxseSAiY2FibGVzIiAqLworCQkJCQlpZiAoIHBpbnMgPiAxNiApCisJCQkJCQlwaW5zID0gMTY7CisJCQkJCXUtPm91dFtvZXBdLmVuZHBvaW50ID0gcDFbMl07CisJCQkJCXUtPm91dFtvZXBdLmNhYmxlSWQgPSAoIDEgPDwgcGlucyApIC0gMTsKKwkJCQkJaWYgKCB1LT5vdXRbb2VwXS5jYWJsZUlkICkKKwkJCQkJCW9lcCArKzsKKwkJCQkJaWYgKCBvZXAgPCAxNSApIHsKKwkJCQkJCXUtPm91dFtvZXBdLmVuZHBvaW50ID0gLTE7CisJCQkJCQl1LT5vdXRbb2VwXS5jYWJsZUlkID0gLTE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCisJCX0KKwl9IGVsc2UgaWYgKHF1aXJrcz09MSkgeworCQkvKiBZQU1BSEEgcXVpcmtzICovCisJCWZvciAocDEgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBOVUxMLCBVU0JfRFRfRU5EUE9JTlQsCisJCQkJCSAgaWZudW0sIGFsdFNldHRpbmcgKTsgcDE7IHAxID0gbmV4dCApIHsKKwkJCW5leHQgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBwMSwgVVNCX0RUX0VORFBPSU5ULAorCQkJCQkgICAgICAgaWZudW0sIGFsdFNldHRpbmcgKTsgCisJCisJCQlpZiAoIHAxWzBdIDwgNyApCisJCQkJY29udGludWU7CisKKwkJCWlmICggKHAxWzJdICYgMHg4MCkgPT0gMHg4MCApIHsKKwkJCQlpZiAoIGllcCA8IDE1ICkgeworCQkJCQlwaW5zID0gaWVwKzE7CisJCQkJCWlmICggcGlucyA+IDE2ICkKKwkJCQkJCXBpbnMgPSAxNjsKKwkJCQkJdS0+aW5baWVwXS5lbmRwb2ludCA9IHAxWzJdOworCQkJCQl1LT5pbltpZXBdLmNhYmxlSWQgPSAoIDEgPDwgcGlucyApIC0gMTsKKwkJCQkJaWYgKCB1LT5pbltpZXBdLmNhYmxlSWQgKQorCQkJCQkJaWVwICsrOworCQkJCQlpZiAoIGllcCA8IDE1ICkgeworCQkJCQkJdS0+aW5baWVwXS5lbmRwb2ludCA9IC0xOworCQkJCQkJdS0+aW5baWVwXS5jYWJsZUlkID0gLTE7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICggb2VwIDwgMTUgKSB7CisJCQkJCXBpbnMgPSBvZXArMTsKKwkJCQkJdS0+b3V0W29lcF0uZW5kcG9pbnQgPSBwMVsyXTsKKwkJCQkJdS0+b3V0W29lcF0uY2FibGVJZCA9ICggMSA8PCBwaW5zICkgLSAxOworCQkJCQlpZiAoIHUtPm91dFtvZXBdLmNhYmxlSWQgKQorCQkJCQkJb2VwICsrOworCQkJCQlpZiAoIG9lcCA8IDE1ICkgeworCQkJCQkJdS0+b3V0W29lcF0uZW5kcG9pbnQgPSAtMTsKKwkJCQkJCXUtPm91dFtvZXBdLmNhYmxlSWQgPSAtMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkKKwkJfQorCX0KKworCWlmICggIWllcCAmJiAhIG9lcCApIHsKKwkJZ290byBlcnJvcl9lbmQ7CisJfQorCisJcmV0dXJuIHU7CisKK2Vycm9yX2VuZDoKKwlrZnJlZSh1KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogUmV0dXJucyBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNi4KKyAqCisgKiovCitzdGF0aWMgaW50IG9uX2JpdHMoIHVuc2lnbmVkIHNob3J0IHYgKQoreworCWludCBpOworCWludCByZXQ9MDsKKworCWZvciAoIGk9MCA7IGk8MTYgOyBpKysgKSB7CisJCWlmICggdiAmICgxPDxpKSApCisJCQlyZXQrKzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBVU0ItZGV2aWNlIHdpbGwgYmUgaW50ZXJyb2dhdGVkIGZvciBhbHRTZXR0aW5nLgorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgb24gZXJyb3IuCisgKiBDYWxsZWQgYnkgYWxsb2NVc2JNaWRpRGV2KCk7CisgKgorICoqLworCitzdGF0aWMgaW50IGdldF9hbHRfc2V0dGluZyggc3RydWN0IHVzYl9kZXZpY2UgKmQsIGludCBpZm51bSApCit7CisJaW50IGFsdHMsIGFsdD0wOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKKwlpbnQgZXBpbiwgZXBvdXQ7CisJaW50IGk7CisKKwlpZmFjZSA9IHVzYl9pZm51bV90b19pZiggZCwgaWZudW0gKTsKKwlhbHRzID0gaWZhY2UtPm51bV9hbHRzZXR0aW5nOworCisJZm9yICggYWx0PTAgOyBhbHQ8YWx0cyA7IGFsdCsrICkgeworCQlpbnRlcmZhY2UgPSAmaWZhY2UtPmFsdHNldHRpbmdbYWx0XTsKKwkJZXBpbiA9IC0xOworCQllcG91dCA9IC0xOworCisJCWZvciAoIGk9MCA7IGk8aW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgOyBpKysgKSB7CisJCQllcCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50W2ldLmRlc2M7CisJCQlpZiAoIChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spICE9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmIGVwaW4gPCAwICkgeworCQkJCWVwaW4gPSBpOworCQkJfSBlbHNlIGlmICggZXBvdXQgPCAwICkgeworCQkJCWVwb3V0ID0gaTsKKwkJCX0KKwkJCWlmICggZXBpbiA+PSAwICYmIGVwb3V0ID49IDAgKSB7CisJCQkJcmV0dXJuIGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAtRU5PREVWOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgaW4gYWxsb2NhdGluZyBhbmQgcmVnaXN0ZXJpbmcgaW50ZXJuYWwgc3RydWN0dXJlcy4KKyAqIFJldHVybnMgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqIENhbGxzIGFsbG9jTWlkaURldiB3aGljaCBhZGRpdGlvbmFsbHkgcmVnaXN0ZXJzIC9kZXYvbWlkaVhYIGRldmljZXMuCisgKiBXcml0ZXMgbWVzc2FnZXMgb24gc3VjY2VzcyB0byBpbmRpY2F0ZSB3aGljaCAvZGV2L21pZGlYWCBpcyB3aGljaCBwaHlzaWNhbAorICogZW5kcG9pbnQuCisgKgorICoqLworc3RhdGljIGludCBhbGxvY191c2JfbWlkaV9kZXZpY2UoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCBzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMsIHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnUgKQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqKm1kZXZzPU5VTEw7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbnNbMTVdLCAqbWluOworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqbW91dHNbMTVdLCAqbW91dDsKKwlpbnQgaW5EZXZzPTAsIG91dERldnM9MDsKKwlpbnQgaW5FbmRwb2ludHM9MCwgb3V0RW5kcG9pbnRzPTA7CisJaW50IGluRW5kcG9pbnQsIG91dEVuZHBvaW50OworCWludCBpbkNhYmxlSWQsIG91dENhYmxlSWQ7CisJaW50IGk7CisJaW50IGRldmljZXMgPSAwOworCWludCBhbHQgPSAwOworCisJLyogT2J0YWluIGFsdFNldHRpbmcgb3IgZGllLi4gKi8KKwlhbHQgPSB1LT5hbHRTZXR0aW5nOworCWlmICggYWx0IDwgMCApIHsKKwkJYWx0ID0gZ2V0X2FsdF9zZXR0aW5nKCBkLCB1LT5pbnRlcmZhY2UgKTsKKwl9CisJaWYgKCBhbHQgPCAwICkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIENvbmZpZ3VyZSBpbnRlcmZhY2UgKi8KKwlpZiAoIHVzYl9zZXRfaW50ZXJmYWNlKCBkLCB1LT5pbnRlcmZhY2UsIGFsdCApIDwgMCApIHsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlmb3IgKCBpID0gMCA7IGkgPCAxNSA7IGkrKyApIHsKKwkJbWluc1tpXSA9IE5VTEw7CisJCW1vdXRzW2ldID0gTlVMTDsKKwl9CisKKwkvKiBCZWdpbiBBbGxvY2F0aW9uICovCisJd2hpbGUoIGluRW5kcG9pbnRzIDwgMTUKKwkgICAgICAgJiYgaW5EZXZzIDwgbWF4ZGV2aWNlcworCSAgICAgICAmJiB1LT5pbltpbkVuZHBvaW50c10uY2FibGVJZCA+PSAwICkgeworCQlpbkRldnMgKz0gb25fYml0cygodW5zaWduZWQgc2hvcnQpdS0+aW5baW5FbmRwb2ludHNdLmNhYmxlSWQpOworCQltaW5zW2luRW5kcG9pbnRzXSA9IGFsbG9jX21pZGlfaW5fZW5kcG9pbnQoIGQsIHUtPmluW2luRW5kcG9pbnRzXS5lbmRwb2ludCApOworCQlpZiAoIG1pbnNbaW5FbmRwb2ludHNdID09IE5VTEwgKQorCQkJZ290byBlcnJvcl9lbmQ7CisJCWluRW5kcG9pbnRzKys7CisJfQorCisJd2hpbGUoIG91dEVuZHBvaW50cyA8IDE1CisJICAgICAgICYmIG91dERldnMgPCBtYXhkZXZpY2VzCisJICAgICAgICYmIHUtPm91dFtvdXRFbmRwb2ludHNdLmNhYmxlSWQgPj0gMCApIHsKKwkJb3V0RGV2cyArPSBvbl9iaXRzKCh1bnNpZ25lZCBzaG9ydCl1LT5vdXRbb3V0RW5kcG9pbnRzXS5jYWJsZUlkKTsKKwkJbW91dHNbb3V0RW5kcG9pbnRzXSA9IGFsbG9jX21pZGlfb3V0X2VuZHBvaW50KCBkLCB1LT5vdXRbb3V0RW5kcG9pbnRzXS5lbmRwb2ludCApOworCQlpZiAoIG1vdXRzW291dEVuZHBvaW50c10gPT0gTlVMTCApCisJCQlnb3RvIGVycm9yX2VuZDsKKwkJb3V0RW5kcG9pbnRzKys7CisJfQorCisJZGV2aWNlcyA9IGluRGV2cyA+IG91dERldnMgPyBpbkRldnMgOiBvdXREZXZzOworCWRldmljZXMgPSBtYXhkZXZpY2VzID4gZGV2aWNlcyA/IGRldmljZXMgOiBtYXhkZXZpY2VzOworCisJLyogb2J0YWluIHNwYWNlIGZvciBkZXZpY2UgbmFtZSAoaVByb2R1Y3QpIGlmIG5vdCBrbm93bi4gKi8KKwlpZiAoICEgdS0+ZGV2aWNlTmFtZSApIHsKKwkJbWRldnMgPSAoc3RydWN0IHVzYl9taWRpZGV2ICoqKQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9taWRpZGV2cyAqKSpkZXZpY2VzCisJCQkJKyBzaXplb2YoY2hhcikgKiAyNTYsIEdGUF9LRVJORUwpOworCX0gZWxzZSB7CisJCW1kZXZzID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKikKKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaWRldnMgKikqZGV2aWNlcywgR0ZQX0tFUk5FTCk7CisJfQorCisJaWYgKCAhbWRldnMgKSB7CisJCS8qIGRldmljZXMgPSAwOyAqLworCQkvKiBtZGV2cyA9IE5VTEw7ICovCisJCWdvdG8gZXJyb3JfZW5kOworCX0KKwlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7CisJCW1kZXZzW2ldID0gTlVMTDsKKwl9CisKKwkvKiBvYnRhaW4gZGV2aWNlIG5hbWUgKGlQcm9kdWN0KSBpZiBub3Qga25vd24uICovCisJaWYgKCAhIHUtPmRldmljZU5hbWUgKSB7CisJCXUtPmRldmljZU5hbWUgPSAoY2hhciAqKSAobWRldnMgKyBkZXZpY2VzKTsKKwkJaWYgKCAhIGQtPmhhdmVfbGFuZ2lkICYmIGQtPmRlc2NyaXB0b3IuaVByb2R1Y3QpIHsKKwkJCWFsdCA9IHVzYl9nZXRfc3RyaW5nKGQsIDAsIDAsIHUtPmRldmljZU5hbWUsIDI1MCk7CisJCQlpZiAoYWx0IDwgMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImVycm9yIGdldHRpbmcgc3RyaW5nIGRlc2NyaXB0b3IgMCAoZXJyb3I9JWQpXG4iLCBhbHQpOworCQkJfSBlbHNlIGlmICh1LT5kZXZpY2VOYW1lWzBdIDwgNCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gInN0cmluZyBkZXNjcmlwdG9yIDAgdG9vIHNob3J0IChsZW5ndGggPSAlZClcbiIsIGFsdCk7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0lORk8gInN0cmluZyBkZXNjcmlwdG9yIDAgZm91bmQgKGxlbmd0aCA9ICVkKVxuIiwgYWx0KTsKKwkJCQlmb3IoOyBhbHQgPj0gNDsgYWx0IC09IDIpIHsKKwkJCQkJaSA9IHUtPmRldmljZU5hbWVbYWx0LTJdIHwgKHUtPmRldmljZU5hbWVbYWx0LTFdPDwgOCk7CisJCQkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBsYW5naWQoJWQpIDB4JTA0eFxuIiwKKwkJCQkJICAgICAgIChhbHQtNCkgPj4gMSwgaSk7CisJCQkJCWlmICggKCAoIGkgXiB1bGFuZ2lkICkgJiAweGZmICkgPT0gMCApIHsKKwkJCQkJCWQtPmhhdmVfbGFuZ2lkID0gMTsKKwkJCQkJCWQtPnN0cmluZ19sYW5naWQgPSBpOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IGxhbmdpZChtYXRjaCkgMHglMDR4XG4iLCBpKTsKKwkJCQkJCWlmICggaSA9PSB1bGFuZ2lkICkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQl1LT5kZXZpY2VOYW1lWzBdID0gKGNoYXIpIDA7CisJCWlmIChkLT5kZXNjcmlwdG9yLmlQcm9kdWN0KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogZmV0Y2hTdHJpbmcoJWQpXG4iLCBkLT5kZXNjcmlwdG9yLmlQcm9kdWN0KTsKKwkJCWFsdCA9IHVzYl9zdHJpbmcoZCwgZC0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgdS0+ZGV2aWNlTmFtZSwgMjU1KTsKKwkJCWlmKCBhbHQgPCAwICkgeworCQkJCXUtPmRldmljZU5hbWVbMF0gPSAoY2hhcikgMDsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBmZXRjaFN0cmluZyA9ICVkXG4iLCBhbHQpOworCQl9IAorCQkvKiBGYWlsc2FmZSAqLworCQlpZiAoICF1LT5kZXZpY2VOYW1lWzBdICkgeworCQkJaWYgKGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9WRU5ET1JfSURfUk9MQU5EICkgeworCQkJCXN0cmNweSh1LT5kZXZpY2VOYW1lLCAiVW5rbm93biBSb2xhbmQiKTsKKwkJCX0gZWxzZSBpZiAobGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1ZFTkRPUl9JRF9TVEVJTkJFUkcgICkgeworCQkJCXN0cmNweSh1LT5kZXZpY2VOYW1lLCAiVW5rbm93biBTdGVpbmJlcmciKTsKKwkJCX0gZWxzZSBpZiAobGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1ZFTkRPUl9JRF9ZQU1BSEEgKSB7CisJCQkJc3RyY3B5KHUtPmRldmljZU5hbWUsICJVbmtub3duIFlhbWFoYSIpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJjcHkodS0+ZGV2aWNlTmFtZSwgIlVua25vd24iKTsKKwkJCX0KKwkJfQorCX0KKworCWluRW5kcG9pbnQgID0gMDsgaW5DYWJsZUlkICA9IC0xOworCW91dEVuZHBvaW50ID0gMDsgb3V0Q2FibGVJZCA9IC0xOworCisJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQlmb3IgKCBpbkNhYmxlSWQgKysgOworCQkgICAgICBpbkVuZHBvaW50IDwxNQorCQkJICAgICAgJiYgbWluc1tpbkVuZHBvaW50XSAKKwkJCSAgICAgICYmICEodS0+aW5baW5FbmRwb2ludF0uY2FibGVJZCAmICgxPDxpbkNhYmxlSWQpKSA7CisJCSAgICAgIGluQ2FibGVJZCsrICkgeworCQkJaWYgKCBpbkNhYmxlSWQgPj0gMTYgKSB7CisJCQkJaW5FbmRwb2ludCAgKys7CisJCQkJaW5DYWJsZUlkICA9IDA7CisJCQl9CisJCX0KKwkJbWluICA9IG1pbnNbaW5FbmRwb2ludF07CisJCWZvciAoIG91dENhYmxlSWQgKysgOworCQkgICAgICBvdXRFbmRwb2ludCA8MTUKKwkJCSAgICAgICYmIG1vdXRzW291dEVuZHBvaW50XSAKKwkJCSAgICAgICYmICEodS0+b3V0W291dEVuZHBvaW50XS5jYWJsZUlkICYgKDE8PG91dENhYmxlSWQpKSA7CisJCSAgICAgIG91dENhYmxlSWQrKyApIHsKKwkJCWlmICggb3V0Q2FibGVJZCA+PSAxNiApIHsKKwkJCQlvdXRFbmRwb2ludCAgKys7CisJCQkJb3V0Q2FibGVJZCAgPSAwOworCQkJfQorCQl9CisJCW1vdXQgPSBtb3V0c1tvdXRFbmRwb2ludF07CisKKwkJbWRldnNbaV0gPSBhbGxvY01pZGlEZXYoIHMsIG1pbiwgbW91dCwgaW5DYWJsZUlkLCBvdXRDYWJsZUlkICk7CisJCWlmICggbWRldnNbaV0gPT0gTlVMTCApCisJCQlnb3RvIGVycm9yX2VuZDsKKworCX0KKworCS8qIFN1Y2Nlc3MhICovCisJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQlsaXN0X2FkZF90YWlsKCAmbWRldnNbaV0tPmxpc3QsICZzLT5taWRpRGV2TGlzdCApOworCX0KKwlmb3IgKCBpPTAgOyBpPGluRW5kcG9pbnRzIDsgaSsrICkgeworCQlsaXN0X2FkZF90YWlsKCAmbWluc1tpXS0+bGlzdCwgJnMtPmluRW5kcG9pbnRMaXN0ICk7CisJfQorCWZvciAoIGk9MCA7IGk8b3V0RW5kcG9pbnRzIDsgaSsrICkgeworCQlsaXN0X2FkZF90YWlsKCAmbW91dHNbaV0tPmxpc3QsICZzLT5vdXRFbmRwb2ludExpc3QgKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiBmb3VuZCBbICVzIF0gKDB4JTA0eDoweCUwNHgpLCBhdHRhY2hlZDpcbiIsIHUtPmRldmljZU5hbWUsIHUtPmlkVmVuZG9yLCB1LT5pZFByb2R1Y3QgKTsKKwlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7CisJCWludCBkbSA9IChtZGV2c1tpXS0+ZGV2X21pZGktMik+PjQ7CisJCWlmICggbWRldnNbaV0tPm1vdXQuZXAgIT0gTlVMTCAmJiBtZGV2c1tpXS0+bWluLmVwICE9IE5VTEwgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiAvZGV2L21pZGklMDJkOiBpbiAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMmQpIG91dCAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMmQpXG4iLCAKKwkJCSAgICAgICBkbSwKKwkJCSAgICAgICBtZGV2c1tpXS0+bWluLmVwLT5lbmRwb2ludHxVU0JfRElSX0lOLCBtZGV2c1tpXS0+bWluLmNhYmxlSWQsIG1kZXZzW2ldLT5taW4uZXAtPnJlY3ZCdWZTaXplLAorCQkJICAgICAgIG1kZXZzW2ldLT5tb3V0LmVwLT5lbmRwb2ludCwgbWRldnNbaV0tPm1vdXQuY2FibGVJZCwgbWRldnNbaV0tPm1vdXQuZXAtPmJ1ZlNpemUpOworCQl9IGVsc2UgaWYgKCBtZGV2c1tpXS0+bWluLmVwICE9IE5VTEwgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiAvZGV2L21pZGklMDJkOiBpbiAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMDJkKVxuIiwgCisJCQkgICAgICAgZG0sCisJCQkgICAgICAgbWRldnNbaV0tPm1pbi5lcC0+ZW5kcG9pbnR8VVNCX0RJUl9JTiwgbWRldnNbaV0tPm1pbi5jYWJsZUlkLCBtZGV2c1tpXS0+bWluLmVwLT5yZWN2QnVmU2l6ZSk7CisJCX0gZWxzZSBpZiAoIG1kZXZzW2ldLT5tb3V0LmVwICE9IE5VTEwgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiAvZGV2L21pZGklMDJkOiBvdXQgKGVwOiUwMnggY2lkOiUyZCBidWZzaXo6JTAyZClcbiIsIAorCQkJICAgICAgIGRtLAorCQkJICAgICAgIG1kZXZzW2ldLT5tb3V0LmVwLT5lbmRwb2ludCwgbWRldnNbaV0tPm1vdXQuY2FibGVJZCwgbWRldnNbaV0tPm1vdXQuZXAtPmJ1ZlNpemUpOworCQl9CisJfQorCisJa2ZyZWUobWRldnMpOworCXJldHVybiAwOworCisgZXJyb3JfZW5kOgorCWlmICggbWRldnMgIT0gTlVMTCApIHsKKwkJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQkJaWYgKCBtZGV2c1tpXSAhPSBOVUxMICkgeworCQkJCXVucmVnaXN0ZXJfc291bmRfbWlkaSggbWRldnNbaV0tPmRldl9taWRpICk7CisJCQkJa2ZyZWUobWRldnNbaV0pOworCQkJfQorCQl9CisJCWtmcmVlKG1kZXZzKTsKKwl9CisKKwlmb3IgKCBpPTAgOyBpPDE1IDsgaSsrICkgeworCQlpZiAoIG1pbnNbaV0gIT0gTlVMTCApIHsKKwkJCXJlbW92ZV9taWRpX2luX2VuZHBvaW50KCBtaW5zW2ldICk7CisJCX0KKwkJaWYgKCBtb3V0c1tpXSAhPSBOVUxMICkgeworCQkJcmVtb3ZlX21pZGlfb3V0X2VuZHBvaW50KCBtb3V0c1tpXSApOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqIEF0dGVtcHQgdG8gc2NhbiBZQU1BSEEncyBkZXZpY2UgZGVzY3JpcHRvciBhbmQgZGV0ZWN0IGNvcnJlY3QgdmFsdWVzIG9mCisgKiAgdGhlbS4KKyAqICBSZXR1cm4gMCBvbiBzdWNjZXMsIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKiAgQ2FsbGVkIGJ5IHVzYl9taWRpX3Byb2JlKCk7CisgKiovCisKK3N0YXRpYyBpbnQgZGV0ZWN0X3lhbWFoYV9kZXZpY2UoIHN0cnVjdCB1c2JfZGV2aWNlICpkLAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHVuc2lnbmVkIGludCBpZm51bSwKKwkJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICp1OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgYnVmU2l6ZTsKKwlpbnQgaTsKKwlpbnQgYWx0cz0tMTsKKwlpbnQgcmV0OworCisJaWYgKGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IFVTQl9WRU5ET1JfSURfWUFNQUhBKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoIGk9MCA7IGkgPCBpZmFjZS0+bnVtX2FsdHNldHRpbmc7IGkrKyApIHsKKwkJaW50ZXJmYWNlID0gaWZhY2UtPmFsdHNldHRpbmcgKyBpOworCisJCWlmICggaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAyNTUgfHwKKwkJICAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDAgKQorCQkJY29udGludWU7CisJCWFsdHMgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJfQorCWlmICggYWx0cyA9PSAtMSApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIFlBTUFIQSBVU0ItTUlESSBkZXZpY2Ugb24gZGV2ICUwNHg6JTA0eCwgaWZhY2UgJWRcbiIsCisJICAgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksIGlmbnVtKTsKKworCWkgPSBkLT5hY3Rjb25maWcgLSBkLT5jb25maWc7CisJYnVmZmVyID0gZC0+cmF3ZGVzY3JpcHRvcnNbaV07CisJYnVmU2l6ZSA9IGxlMTZfdG9fY3B1KGQtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpOworCisJdSA9IHBhcnNlX2Rlc2NyaXB0b3IoIGQsIGJ1ZmZlciwgYnVmU2l6ZSwgaWZudW0sIGFsdHMsIDEpOworCWlmICggdSA9PSBOVUxMICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBhbGxvY191c2JfbWlkaV9kZXZpY2UoIGQsIHMsIHUgKTsKKworCWtmcmVlKHUpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiogU2NhbiB0YWJsZSBvZiBrbm93biBkZXZpY2VzIHdoaWNoIGFyZSBvbmx5IHBhcnRpYWxseSBjb21wbGlhbnQgd2l0aCAKKyAqIHRoZSBNSURJU3RyZWFtaW5nIHNwZWNpZmljYXRpb24uCisgKiBDYWxsZWQgYnkgdXNiX21pZGlfcHJvYmUoKTsKKyAqCisgKiovCisKK3N0YXRpYyBpbnQgZGV0ZWN0X3ZlbmRvcl9zcGVjaWZpY19kZXZpY2UoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCB1bnNpZ25lZCBpbnQgaWZudW0sIHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcyApCit7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSAqdTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOWElPOworCisJZm9yICggaT0wOyBpPFZFTkRPUl9TUEVDSUZJQ19VU0JfTUlESV9ERVZJQ0VTIDsgaSsrICkgeworCQl1PSYodXNiX21pZGlfZGV2aWNlc1tpXSk7CisgICAgCisJCWlmICggbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gdS0+aWRWZW5kb3IgfHwKKwkJICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gdS0+aWRQcm9kdWN0IHx8CisJCSAgICAgaWZudW0gIT0gdS0+aW50ZXJmYWNlICkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGFsbG9jX3VzYl9taWRpX2RldmljZSggZCwgcywgdSApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBBdHRlbXB0IHRvIG1hdGNoIGFueSBjb25maWcgb2YgYW4gaW50ZXJmYWNlIHRvIGEgTUlESVNUUkVBTUlORyBpbnRlcmZhY2UuCisgKiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKiBDYWxsZWQgYnkgdXNiX21pZGlfcHJvYmUoKTsKKyAqKi8KK3N0YXRpYyBpbnQgZGV0ZWN0X21pZGlfc3ViY2xhc3Moc3RydWN0IHVzYl9kZXZpY2UgKmQsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgdW5zaWduZWQgaW50IGlmbnVtLAorCQlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnU7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBidWZTaXplOworCWludCBpOworCWludCBhbHRzPS0xOworCWludCByZXQ7CisKKwlmb3IgKCBpPTAgOyBpIDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKysgKSB7CisJCWludGVyZmFjZSA9IGlmYWNlLT5hbHRzZXR0aW5nICsgaTsKKworCQlpZiAoIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8CisJCSAgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlORyApCisJCQljb250aW51ZTsKKwkJYWx0cyA9IGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwl9CisJaWYgKCBhbHRzID09IC0xICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgTUlESVNUUkVBTUlORyBvbiBkZXYgJTA0eDolMDR4LCBpZmFjZSAlZFxuIiwKKwkgICAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvciksIAorCSAgICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksIGlmbnVtKTsKKworCisJLyogRnJvbSBVU0IgU3BlYyB2Mi4wLCBTZWN0aW9uIDkuNS4KKwkgICBJZiB0aGUgY2xhc3Mgb3IgdmVuZG9yIHNwZWNpZmljIGRlc2NyaXB0b3JzIHVzZSB0aGUgc2FtZSBmb3JtYXQKKwkgICBhcyBzdGFuZGFyZCBkZXNjcmlwdG9ycyAoZS5nLiwgc3RhcnQgd2l0aCBhIGxlbmd0aCBieXRlIGFuZAorCSAgIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlKSwgdGhleSBtdXN0IGJlIHJldHVybmVkIGludGVybGVhdmVkIHdpdGgKKwkgICBzdGFuZGFyZCBkZXNjcmlwdG9ycyBpbiB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiByZXR1cm5lZCBieQorCSAgIGEgR2V0RGVzY3JpcHRvcihDb25maWd1cmF0aW9uKSByZXF1ZXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBjbGFzcworCSAgIG9yIHZlbmRvci1zcGVjaWZpYyBkZXNjcmlwdG9ycyBtdXN0IGZvbGxvdyBhIHJlbGF0ZWQgc3RhbmRhcmQKKwkgICBkZXNjcmlwdG9yIHRoZXkgbW9kaWZ5IG9yIGV4dGVuZC4KKwkqLworCisJaSA9IGQtPmFjdGNvbmZpZyAtIGQtPmNvbmZpZzsKKwlidWZmZXIgPSBkLT5yYXdkZXNjcmlwdG9yc1tpXTsKKwlidWZTaXplID0gbGUxNl90b19jcHUoZC0+YWN0Y29uZmlnLT5kZXNjLndUb3RhbExlbmd0aCk7CisKKwl1ID0gcGFyc2VfZGVzY3JpcHRvciggZCwgYnVmZmVyLCBidWZTaXplLCBpZm51bSwgYWx0cywgMCk7CisJaWYgKCB1ID09IE5VTEwgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFsbG9jX3VzYl9taWRpX2RldmljZSggZCwgcywgdSApOworCisJa2ZyZWUodSk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBXaGVuIHVzZXIgaGFzIHJlcXVlc3RlZCBhIHNwZWNpZmljIGRldmljZSwgbWF0Y2ggaXQgZXhhY3RseS4KKyAqCisgKiBVc2VzIHV2ZW5kb3IsIHVwcm9kdWN0LCB1aW50ZXJmYWNlLCB1YWx0LCB1bWluLCB1bW91dCBhbmQgdWNhYmxlLgorICogQ2FsbGVkIGJ5IHVzYl9taWRpX3Byb2JlKCk7CisgKgorICoqLworc3RhdGljIGludCBkZXRlY3RfYnlfaGFuZChzdHJ1Y3QgdXNiX2RldmljZSAqZCwgdW5zaWduZWQgaW50IGlmbnVtLCBzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMpCit7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSB1OworCisJaWYgKCBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSB1dmVuZG9yIHx8CisJICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gdXByb2R1Y3QgfHwKKwkgICAgIGlmbnVtICE9IHVpbnRlcmZhY2UgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICggdWFsdCA8IDAgKQorCQl1YWx0ID0gLTE7CisKKwlpZiAoIHVtaW4gICA8IDAgfHwgdW1pbiAgID4gMTUgKQorCQl1bWluICAgPSAweDAxIHwgVVNCX0RJUl9JTjsKKwlpZiAoIHVtb3V0ICA8IDAgfHwgdW1vdXQgID4gMTUgKQorCQl1bW91dCAgPSAweDAxOworCWlmICggdWNhYmxlIDwgMCB8fCB1Y2FibGUgPiAxNSApCisJCXVjYWJsZSA9IDA7CisKKwl1LmRldmljZU5hbWUgPSBOVUxMOyAvKiBBIGZsYWcgZm9yIGFsbG9jX3VzYl9taWRpX2RldmljZSB0byBnZXQgZGV2aWNlCisJCQkJbmFtZSBmcm9tIGRldmljZS4gKi8KKwl1LmlkVmVuZG9yICAgPSB1dmVuZG9yOworCXUuaWRQcm9kdWN0ICA9IHVwcm9kdWN0OworCXUuaW50ZXJmYWNlICA9IHVpbnRlcmZhY2U7CisJdS5hbHRTZXR0aW5nID0gdWFsdDsKKworCXUuaW5bMF0uZW5kcG9pbnQgICAgPSB1bWluOworCXUuaW5bMF0uY2FibGVJZCAgICAgPSAoMTw8dWNhYmxlKTsKKworCXUub3V0WzBdLmVuZHBvaW50ICAgPSB1bW91dDsKKwl1Lm91dFswXS5jYWJsZUlkICAgID0gKDE8PHVjYWJsZSk7CisKKwlyZXR1cm4gYWxsb2NfdXNiX21pZGlfZGV2aWNlKCBkLCBzLCAmdSApOworfQorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHVzYl9taWRpX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCSAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgaWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJcyA9IChzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21pZGlfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoICFzICkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoIHMsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX21pZGlfc3RhdGUpICk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPm1pZGlEZXZMaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcy0+aW5FbmRwb2ludExpc3QpOworCUlOSVRfTElTVF9IRUFEKCZzLT5vdXRFbmRwb2ludExpc3QpOworCXMtPnVzYmRldiA9IGRldjsKKwlzLT5jb3VudCAgPSAwOworCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKKworCWlmICgKKwkJZGV0ZWN0X2J5X2hhbmQoIGRldiwgaWZudW0sIHMgKSAmJgorCQlkZXRlY3RfbWlkaV9zdWJjbGFzcyggZGV2LCBpbnRmLCBpZm51bSwgcyApICYmCisJCWRldGVjdF92ZW5kb3Jfc3BlY2lmaWNfZGV2aWNlKCBkZXYsIGlmbnVtLCBzICkgJiYKKwkJZGV0ZWN0X3lhbWFoYV9kZXZpY2UoIGRldiwgaW50ZiwgaWZudW0sIHMpICkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZG93bigmb3Blbl9zZW0pOworCWxpc3RfYWRkX3RhaWwoJnMtPm1pZGlkZXYsICZtaWRpZGV2cyk7CisJdXAoJm9wZW5fc2VtKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHMpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHVzYl9taWRpX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl9taWRpZGV2ICAgICptOworCisJaWYgKCAhcyApCisJCXJldHVybjsKKworCWlmICggcyA9PSAoc3RydWN0IHVzYl9taWRpX3N0YXRlICopLTEgKSB7CisJCXJldHVybjsKKwl9CisJaWYgKCAhcy0+dXNiZGV2ICkgeworCQlyZXR1cm47CisJfQorCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2RlbCgmcy0+bWlkaWRldik7CisJSU5JVF9MSVNUX0hFQUQoJnMtPm1pZGlkZXYpOworCXMtPnVzYmRldiA9IE5VTEw7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZzLT5taWRpRGV2TGlzdCwgbGlzdCkgeworCQl3YWtlX3VwKCYobS0+bWluLmVwLT53YWl0KSk7CisJCXdha2VfdXAoJihtLT5tb3V0LmVwLT53YWl0KSk7CisJCWlmICggbS0+ZGV2X21pZGkgPj0gMCApIHsKKwkJCXVucmVnaXN0ZXJfc291bmRfbWlkaShtLT5kZXZfbWlkaSk7CisJCX0KKwkJbS0+ZGV2X21pZGkgPSAtMTsKKwl9CisJcmVsZWFzZV9taWRpX2RldmljZShzKTsKKwl3YWtlX3VwKCZvcGVuX3dhaXQpOworfQorCisvKiB3ZSB3YW50IHRvIGxvb2sgYXQgYWxsIGRldmljZXMgYnkgaGFuZCAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJey5kcml2ZXJfaW5mbyA9IDQyfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9taWRpX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkibWlkaSIsCisJLnByb2JlID0JdXNiX21pZGlfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfbWlkaV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfbWlkaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiX21pZGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9taWRpX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX21pZGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX21pZGlfaW5pdCkgOworbW9kdWxlX2V4aXQodXNiX21pZGlfZXhpdCkgOworCisjaWZkZWYgSEFWRV9BTFNBX1NVUFBPUlQKKyNkZWZpbmUgU05EUlZfTUFJTl9PQkpFQ1RfRklMRQorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZHJpdmVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9jb250cm9sLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9pbmZvLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9jczQ2eHguaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNuZF91c2JtaWRpX2lucHV0X2Nsb3NlKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF91c2JtaWRpX2lucHV0X29wZW4oc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0gKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9pbnB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLCBpbnQgdXApCit7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNuZF91c2JtaWRpX291dHB1dF9jbG9zZShzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfdXNibWlkaV9vdXRwdXRfb3BlbihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX3VzYl9taWRpX291dHB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLAorCQkJCQlpbnQgdXApCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHNuZF9yYXdtaWRpX29wc190IHNuZF91c2JtaWRpX291dHB1dCA9Cit7CisgICAgICAgIC5vcGVuID0gICAgICAgICBzbmRfdXNibWlkaV9vdXRwdXRfb3BlbiwKKyAgICAgICAgLmNsb3NlID0gICAgICAgIHNuZF91c2JtaWRpX291dHB1dF9jbG9zZSwKKyAgICAgICAgLnRyaWdnZXIgPSAgICAgIHNuZF91c2JtaWRpX291dHB1dF90cmlnZ2VyLAorfTsKK3N0YXRpYyBzbmRfcmF3bWlkaV9vcHNfdCBzbmRfdXNibWlkaV9pbnB1dCA9Cit7CisgICAgICAgIC5vcGVuID0gICAgICAgICBzbmRfdXNibWlkaV9pbnB1dF9vcGVuLAorICAgICAgICAuY2xvc2UgPSAgICAgICAgc25kX3VzYm1pZGlfaW5wdXRfY2xvc2UsCisgICAgICAgIC50cmlnZ2VyID0gICAgICBzbmRfdXNibWlkaV9pbnB1dF90cmlnZ2VyLAorfTsKKworaW50IHNuZF91c2JtaWRpX21pZGkoY3M0Nnh4X3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9yYXdtaWRpX3QgKipycmF3bWlkaSkKK3sKKwlzbmRfcmF3bWlkaV90ICpybWlkaTsKKwlpbnQgZXJyOworCisJaWYgKHJyYXdtaWRpKQorCQkqcnJhd21pZGkgPSBOVUxMOworCWlmICgoZXJyID0gc25kX3Jhd21pZGlfbmV3KGNoaXAtPmNhcmQsICJVU0ItTUlESSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXN0cmNweShybWlkaS0+bmFtZSwgIlVTQi1NSURJIik7CisKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKCBybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmc25kX3VzYm1pZGlfb3V0cHV0ICk7CisJc25kX3Jhd21pZGlfc2V0X29wcyggcm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULCAmc25kX3VzYm1pZGlfaW5wdXQgKTsKKworCXJtaWRpLT5pbmZvX2ZsYWdzIHw9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfCBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfCBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYOworCisJcm1pZGktPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJY2hpcC0+cm1pZGkgPSBybWlkaTsKKwlpZiAocnJhd21pZGkpCisJCSpycmF3bWlkaSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNuZF91c2JtaWRpX2NyZWF0ZSggc25kX2NhcmRfdCAqIGNhcmQsCisJCQlzdHJ1Y3QgcGNpX2RldiAqIHBjaSwKKwkJCXVzYm1pZGlfdCAqKiByY2hpcCApCit7CisJdXNibWlkaV90ICpjaGlwOworCWludCBlcnIsIGlkeDsKKwlzbmRfcmVnaW9uX3QgKnJlZ2lvbjsKKwlzdGF0aWMgc25kX2RldmljZV9vcHRfdCBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF91c2JtaWRpX2Rldl9mcmVlLAorCX07CisKKwkqcmNoaXAgPSBOVUxMOworCWNoaXAgPSBzbmRfbWFnaWNfa2NhbGxvYyggdXNibWlkaV90LCAwLCBHRlBfS0VSTkVMICk7CisJaWYgKCBjaGlwID09IE5VTEwgKQorCQlyZXR1cm4gLUVOT01FTTsKK30KKworRVhQT1JUX1NZTUJPTChzbmRfdXNibWlkaV9jcmVhdGUpOworRVhQT1JUX1NZTUJPTChzbmRfdXNibWlkaV9taWRpKTsKKyNlbmRpZiAvKiBIQVZFX0FMU0FfU1VQUE9SVCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2ItbWlkaS5oIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNThjZGVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAgdXNiLW1pZGkuaCAgLS0gIFVTQi1NSURJIGRyaXZlcgorCisgIENvcHlyaWdodCAoQykgMjAwMQorICAgICAgTkFHQU5PIERhaXN1a2UgPGJyZWV6ZS5uYWdhbm9AbmlmdHkubmUuanA+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBfVVNCX01JRElfSF8KKyNkZWZpbmUgX1VTQl9NSURJX0hfCisKKyNpZm5kZWYgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcKKyNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcJMworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFJvbGFuZCBNSURJIERldmljZXMgKi8KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1JPTEFORAkJMHgwNTgyCisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1VBMTAwRwkJMHgwMDAwCisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX01QVTY0CQkweDAwMDIKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfU0M4ODUwCQkweDAwMDMKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfU0M4ODIwCQkweDAwMDcKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfVU0yCQkweDAwMDUKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfVU0xCQkweDAwMDkKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfUEMzMDAJCTB4MDAwOAorCisvKiBZQU1BSEEgTUlESSBEZXZpY2VzICovCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfWUFNQUhBCQkweDA0OTkKKyNkZWZpbmUgVVNCTUlESV9ZQU1BSEFfTVUxMDAwCQkweDEwMDEKKworLyogU3RlaW5iZXJnIE1JREkgRGV2aWNlcyAqLworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NURUlOQkVSRwkJMHgwNzYzCisjZGVmaW5lIFVTQk1JRElfU1RFSU5CRVJHX1VTQjJNSURJCTB4MTAwMQorCisvKiBNYXJrIG9mIHRoZSBVbmljb3JuIE1JREkgRGV2aWNlcyAqLworI2RlZmluZSBVU0JfVkVORE9SX0lEX01PVFUJCTB4MDdmZAorI2RlZmluZSBVU0JNSURJX01PVFVfRkFTVExBTkUJCTB4MDAwMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBTdXBwb3J0ZWQgZGV2aWNlcyAqLworCitzdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgeworCWludCAgZW5kcG9pbnQ7CisJaW50ICBjYWJsZUlkOyAvKiBpZiBiaXQtbiA9PSAxIHRoZW4gY2FibGVJZC1uIGlzIGVuYWJsZWQgKG46IDAgLSAxNSkgKi8KK307CisKK3N0cnVjdCB1c2JfbWlkaV9kZXZpY2UgeworCWNoYXIgICpkZXZpY2VOYW1lOworCisJdTE2ICAgIGlkVmVuZG9yOworCXUxNiAgICBpZFByb2R1Y3Q7CisJaW50ICAgIGludGVyZmFjZTsKKwlpbnQgICAgYWx0U2V0dGluZzsgLyogLTE6IGF1dG8gZGV0ZWN0ICovCisKKwlzdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgaW5bMTVdOworCXN0cnVjdCB1c2JfbWlkaV9lbmRwb2ludCBvdXRbMTVdOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgdXNiX21pZGlfZGV2aWNlc1tdID0geworICB7IC8qIFJvbGFuZCBVTS0xICovCisgICAgIlJvbGFuZCBVTS0xIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0xLCAyLCAtMSwKKyAgICB7IHsgMHg4MSwgMSB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAxLH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBSb2xhbmQgVU0tMiAqLworICAgICJSb2xhbmQgVU0tMiIgLAorICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VTTIsIDIsIC0xLAorICAgIHsgeyAweDgxLCAzIH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDMsfSwgey0xLCAtMX0gfSwKKyAgfSwKKworLyoqIE5leHQgZW50cnkgY291cnRlc3kgcmVzZWFyY2ggYnkgTWljaGFlbCBNaW5uIDxtaWNoYWVsQG1pY2hhZWxtaW5uLmNvbT4gKiovCisgIHsgLyogUm9sYW5kIFVBLTEwMCAqLworICAgICJSb2xhbmQgVUEtMTAwIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVUExMDBHLCAyLCAtMSwKKyAgICB7IHsgMHg4MiwgNyB9LCB7LTEsIC0xfSB9LCAvKiogY2FibGVzIDAsMSBhbmQgMiBmb3IgU1lTRVggKiovCisgICAgeyB7IDB4MDIsIDcgfSwgey0xLCAtMX0gfSwKKyAgfSwKKworLyoqIE5leHQgZW50cnkgY291cnRlc3kgcmVzZWFyY2ggYnkgTWljaGFlbCBNaW5uIDxtaWNoYWVsQG1pY2hhZWxtaW5uLmNvbT4gKiovCisgIHsgLyogUm9sYW5kIFNDODg1MCAqLworICAgICJSb2xhbmQgU0M4ODUwIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODUwLCAyLCAtMSwKKyAgICB7IHsgMHg4MSwgMHgzZiB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAweDNmIH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBSb2xhbmQgU0M4ODIwICovCisgICAgIlJvbGFuZCBTQzg4MjAiLAorICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9TQzg4MjAsIDIsIC0xLAorICAgIHsgeyAweDgxLCAweDEzIH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDB4MTMgfSwgey0xLCAtMX0gfSwKKyAgfSwKKworICB7IC8qIFJvbGFuZCBTQzg4MjAgKi8KKyAgICAiUm9sYW5kIFNDODgyMCIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODgyMCwgMiwgLTEsCisgICAgeyB7IDB4ODEsIDE3IH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDE3IH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBZQU1BSEEgTVUxMDAwICovCisgICAgIllBTUFIQSBNVTEwMDAiLAorICAgIFVTQl9WRU5ET1JfSURfWUFNQUhBLCBVU0JNSURJX1lBTUFIQV9NVTEwMDAsIDAsIC0xLCAKKyAgICB7IHsgMHg4MSwgMSB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAxNSB9LCB7LTEsIC0xfSB9LAorICB9LAorICB7IC8qIFJvbGFuZCBQQy0zMDAgKi8KKyAgICAiUm9sYW5kIFBDLTMwMCIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1BDMzAwLCAyLCAtMSwgCisgICAgeyB7IDB4ODEsIDEgfSwgey0xLCAtMX0gfSwKKyAgICB7IHsgMHgwMSwgMSB9LCB7LTEsIC0xfSB9LAorICB9LAorICB7IC8qIE1PVFUgRmFzdGxhbmUgVVNCICovCisgICAgIk1PVFUgRmFzdGxhbmUgVVNCIiwKKyAgICBVU0JfVkVORE9SX0lEX01PVFUsIFVTQk1JRElfTU9UVV9GQVNUTEFORSwgMSwgMCwKKyAgICB7IHsgMHg4MiwgMyB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAyLCAzIH0sIHstMSwgLTF9IH0sCisgIH0KK307CisKKyNkZWZpbmUgVkVORE9SX1NQRUNJRklDX1VTQl9NSURJX0RFVklDRVMgKHNpemVvZih1c2JfbWlkaV9kZXZpY2VzKS9zaXplb2Yoc3RydWN0IHVzYl9taWRpX2RldmljZSkpCisKKy8qIGZvciBIb3QtUGx1Z2dpbmcgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9taWRpX2lkcyBbXSA9IHsKKwl7IC5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlOR30sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0xICAgICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VTTIgICAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1VBMTAwRyApIH0sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfUEMzMDAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODg1MCApIH0sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODIwICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfWUFNQUhBLCBVU0JNSURJX1lBTUFIQV9NVTEwMDAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9NT1RVLCAgIFVTQk1JRElfTU9UVV9GQVNUTEFORSApIH0sCisvKgl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfU1RFSU5CRVJHLCBVU0JNSURJX1NURUlOQkVSR19VU0IyTUlESSApIH0sKi8KKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX21pZGlfaWRzKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmIC8qIF9VU0JfTUlESV9IXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTIyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC0wLDAgKzEsMTIxNCBAQAorLyoKKyAqIHVzYmxwLmMgIFZlcnNpb24gMC4xMworICoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBNaWNoYWVsIEdlZQk8bWljaGFlbEBsaW51eHNwZWNpZmljLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBQYXZlbCBNYWNoZWsJPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgUmFuZHkgRHVubGFwCTxyZGR1bmxhcEBvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMCBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEBzdXNlLmN6PgorICMgQ29weXJpZ2h0IChjKSAyMDAxIFBldGUgWmFpdGNldgk8emFpdGNldkByZWRoYXQuY29tPgorICMgQ29weXJpZ2h0IChjKSAyMDAxIERhdmlkIFBhc2NoYWwJPHBhc2NoYWxAcmNzaXMuY29tPgorICoKKyAqIFVTQiBQcmludGVyIERldmljZSBDbGFzcyBkcml2ZXIgZm9yIFVTQiBwcmludGVycyBhbmQgcHJpbnRlciBjYWJsZXMKKyAqCisgKiBTcG9uc29yZWQgYnkgU3VTRQorICoKKyAqIENoYW5nZUxvZzoKKyAqCXYwLjEgLSB0aG9yb3VnaCBjbGVhbmluZywgVVJCaWZpY2F0aW9uLCBhbG1vc3QgYSByZXdyaXRlCisgKgl2MC4yIC0gc29tZSBtb3JlIGNsZWFudXBzCisgKgl2MC4zIC0gY2xlYW5lciBhZ2Fpbiwgd2FpdHF1ZXVlIGZpeGVzCisgKgl2MC40IC0gZml4ZXMgaW4gdW5pZGlyZWN0aW9uYWwgbW9kZQorICoJdjAuNSAtIGFkZCBERVZJQ0VfSUQgc3RyaW5nIHN1cHBvcnQKKyAqCXYwLjYgLSBuZXZlciB0aW1lIG91dAorICoJdjAuNyAtIGZpeGVkIGJ1bGstSU4gcmVhZCBhbmQgcG9sbCAoRGF2aWQgUGFzY2hhbCkKKyAqCXYwLjggLSBhZGQgZGV2ZnMgc3VwcG9ydAorICoJdjAuOSAtIGZpeCB1bnBsdWctd2hpbGUtb3BlbiBwYXRocworICoJdjAuMTAtIHJlbW92ZSBzbGVlcF9vbiwgZml4IGVycm9yIG9uIG9vbSAob2xpdmVyQG5ldWt1bS5vcmcpCisgKgl2MC4xMSAtIGFkZCBwcm90b19iaWFzIG9wdGlvbiAoUGV0ZSBaYWl0Y2V2KQorICoJdjAuMTIgLSBhZGQgaHBvai5zb3VyY2Vmb3JnZS5uZXQgaW9jdGxzIChEYXZpZCBQYXNjaGFsKQorICoJdjAuMTMgLSBhbGxvYyBzcGFjZSBmb3Igc3RhdHVzYnVmICg8c3RhdHVzPiBub3Qgb24gc3RhY2spOworICoJCXVzZSB1c2JfYnVmZmVyX2FsbG9jKCkgZm9yIHJlYWQgYnVmICYgd3JpdGUgYnVmOworICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbHAuaD4KKyN1bmRlZiBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWljaGFlbCBHZWUsIFBhdmVsIE1hY2hlaywgVm9qdGVjaCBQYXZsaWssIFJhbmR5IER1bmxhcCwgUGV0ZSBaYWl0Y2V2LCBEYXZpZCBQYXNjaGFsIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFByaW50ZXIgRGV2aWNlIENsYXNzIGRyaXZlciIKKworI2RlZmluZSBVU0JMUF9CVUZfU0laRQkJODE5MgorI2RlZmluZSBVU0JMUF9ERVZJQ0VfSURfU0laRQkxMDI0CisKKy8qIGlvY3RsczogKi8KKyNkZWZpbmUgTFBHRVRTVEFUVVMJCTB4MDYwYgkJLyogc2FtZSBhcyBpbiBkcml2ZXJzL2NoYXIvbHAuYyAqLworI2RlZmluZSBJT0NOUl9HRVRfREVWSUNFX0lECQkxCisjZGVmaW5lIElPQ05SX0dFVF9QUk9UT0NPTFMJCTIKKyNkZWZpbmUgSU9DTlJfU0VUX1BST1RPQ09MCQkzCisjZGVmaW5lIElPQ05SX0hQX1NFVF9DSEFOTkVMCQk0CisjZGVmaW5lIElPQ05SX0dFVF9CVVNfQUREUkVTUwkJNQorI2RlZmluZSBJT0NOUl9HRVRfVklEX1BJRAkJNgorI2RlZmluZSBJT0NOUl9TT0ZUX1JFU0VUCQk3CisvKiBHZXQgZGV2aWNlX2lkIHN0cmluZzogKi8KKyNkZWZpbmUgTFBJT0NfR0VUX0RFVklDRV9JRChsZW4pIF9JT0MoX0lPQ19SRUFELCAnUCcsIElPQ05SX0dFVF9ERVZJQ0VfSUQsIGxlbikKKy8qIFRoZSBmb2xsb3dpbmcgaW9jdGxzIHdlcmUgYWRkZWQgZm9yIGh0dHA6Ly9ocG9qLnNvdXJjZWZvcmdlLm5ldDogKi8KKy8qIEdldCB0d28taW50IGFycmF5OgorICogWzBdPWN1cnJlbnQgcHJvdG9jb2wgKDE9Ny8xLzEsIDI9Ny8xLzIsIDM9Ny8xLzMpLAorICogWzFdPXN1cHBvcnRlZCBwcm90b2NvbCBtYXNrIChtYXNrJigxPDxuKSE9MCBtZWFucyA3LzEvbiBzdXBwb3J0ZWQpOiAqLworI2RlZmluZSBMUElPQ19HRVRfUFJPVE9DT0xTKGxlbikgX0lPQyhfSU9DX1JFQUQsICdQJywgSU9DTlJfR0VUX1BST1RPQ09MUywgbGVuKQorLyogU2V0IHByb3RvY29sIChhcmc6IDE9Ny8xLzEsIDI9Ny8xLzIsIDM9Ny8xLzMpOiAqLworI2RlZmluZSBMUElPQ19TRVRfUFJPVE9DT0wgX0lPQyhfSU9DX1dSSVRFLCAnUCcsIElPQ05SX1NFVF9QUk9UT0NPTCwgMCkKKy8qIFNldCBjaGFubmVsIG51bWJlciAoSFAgVmVuZG9yLXNwZWNpZmljIGNvbW1hbmQpOiAqLworI2RlZmluZSBMUElPQ19IUF9TRVRfQ0hBTk5FTCBfSU9DKF9JT0NfV1JJVEUsICdQJywgSU9DTlJfSFBfU0VUX0NIQU5ORUwsIDApCisvKiBHZXQgdHdvLWludCBhcnJheTogWzBdPWJ1cyBudW1iZXIsIFsxXT1kZXZpY2UgYWRkcmVzczogKi8KKyNkZWZpbmUgTFBJT0NfR0VUX0JVU19BRERSRVNTKGxlbikgX0lPQyhfSU9DX1JFQUQsICdQJywgSU9DTlJfR0VUX0JVU19BRERSRVNTLCBsZW4pCisvKiBHZXQgdHdvLWludCBhcnJheTogWzBdPXZlbmRvciBJRCwgWzFdPXByb2R1Y3QgSUQ6ICovCisjZGVmaW5lIExQSU9DX0dFVF9WSURfUElEKGxlbikgX0lPQyhfSU9DX1JFQUQsICdQJywgSU9DTlJfR0VUX1ZJRF9QSUQsIGxlbikKKy8qIFBlcmZvcm0gY2xhc3Mgc3BlY2lmaWMgc29mdCByZXNldCAqLworI2RlZmluZSBMUElPQ19TT0ZUX1JFU0VUIF9JT0MoX0lPQ19OT05FLCAnUCcsIElPQ05SX1NPRlRfUkVTRVQsIDApOworCisvKgorICogQSBERVZJQ0VfSUQgc3RyaW5nIG1heSBpbmNsdWRlIHRoZSBwcmludGVyJ3Mgc2VyaWFsIG51bWJlci4KKyAqIEl0IHNob3VsZCBlbmQgd2l0aCBhIHNlbWktY29sb24gKCc7JykuCisgKiBBbiBleGFtcGxlIGZyb20gYW4gSFAgOTcwQyBEZXNrSmV0IHByaW50ZXIgaXMgKHRoaXMgaXMgb25lIGxvbmcgc3RyaW5nLAorICogd2l0aCB0aGUgc2VyaWFsIG51bWJlciBjaGFuZ2VkKToKK01GRzpIRVdMRVRULVBBQ0tBUkQ7TURMOkRFU0tKRVQgOTcwQztDTUQ6TUxDLFBDTCxQTUw7Q0xBU1M6UFJJTlRFUjtERVNDUklQVElPTjpIZXdsZXR0LVBhY2thcmQgRGVza0pldCA5NzBDO1NFUk46VVM5NzBDU0VQUk9GO1ZTVEFUVVM6JEhCMCROQzAsZmYsRE4sSURMRSxDVVQsSzEsQzAsRFAsTlIsS1AwMDAsQ1AwMjc7VlA6MDgwMCxGTCxCMDtWSjogICAgICAgICAgICAgICAgICAgIDsKKyAqLworCisvKgorICogVVNCIFByaW50ZXIgUmVxdWVzdHMKKyAqLworCisjZGVmaW5lIFVTQkxQX1JFUV9HRVRfSUQJCQkweDAwCisjZGVmaW5lIFVTQkxQX1JFUV9HRVRfU1RBVFVTCQkJMHgwMQorI2RlZmluZSBVU0JMUF9SRVFfUkVTRVQJCQkJMHgwMgorI2RlZmluZSBVU0JMUF9SRVFfSFBfQ0hBTk5FTF9DSEFOR0VfUkVRVUVTVAkweDAwCS8qIEhQIFZlbmRvci1zcGVjaWZpYyAqLworCisjZGVmaW5lIFVTQkxQX01JTk9SUwkJMTYKKyNkZWZpbmUgVVNCTFBfTUlOT1JfQkFTRQkwCisKKyNkZWZpbmUgVVNCTFBfV1JJVEVfVElNRU9VVAkoNTAwMCkJCQkvKiA1IHNlY29uZHMgKi8KKworI2RlZmluZSBVU0JMUF9GSVJTVF9QUk9UT0NPTAkxCisjZGVmaW5lIFVTQkxQX0xBU1RfUFJPVE9DT0wJMworI2RlZmluZSBVU0JMUF9NQVhfUFJPVE9DT0xTCShVU0JMUF9MQVNUX1BST1RPQ09MKzEpCisKKy8qCisgKiBzb21lIGFyYml0cmFyeSBzdGF0dXMgYnVmZmVyIHNpemU7CisgKiBuZWVkIGEgc3RhdHVzIGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCB2aWEga21hbGxvYygpLCBub3Qgb24gc3RhY2sKKyAqLworI2RlZmluZSBTVEFUVVNfQlVGX1NJWkUJCTgKKworc3RydWN0IHVzYmxwIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAJKmRldjsJCQkvKiBVU0IgZGV2aWNlICovCisJc3RydWN0IHNlbWFwaG9yZQlzZW07CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3QsIGVzcGVjaWFsbHkgImRldiIgKi8KKwljaGFyCQkJKndyaXRlYnVmOwkJLyogd3JpdGUgdHJhbnNmZXJfYnVmZmVyICovCisJY2hhcgkJCSpyZWFkYnVmOwkJLyogcmVhZCB0cmFuc2Zlcl9idWZmZXIgKi8KKwljaGFyCQkJKnN0YXR1c2J1ZjsJCS8qIHN0YXR1cyB0cmFuc2Zlcl9idWZmZXIgKi8KKwlzdHJ1Y3QgdXJiCQkqcmVhZHVyYiwgKndyaXRldXJiOwkvKiBUaGUgdXJicyAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CQkJLyogWnp6enogLi4uICovCisJaW50CQkJcmVhZGNvdW50OwkJLyogQ291bnRlciBmb3IgcmVhZHMgKi8KKwlpbnQJCQlpZm51bTsJCQkvKiBJbnRlcmZhY2UgbnVtYmVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CQkJLyogVGhlIGludGVyZmFjZSAqLworCS8qIEFsdGVybmF0ZS1zZXR0aW5nIG51bWJlcnMgYW5kIGVuZHBvaW50cyBmb3IgZWFjaCBwcm90b2NvbAorCSAqICg3LzEve2luZGV4PTEsMiwzfSkgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzOiAqLworCXN0cnVjdCB7CisJCWludAkJCQlhbHRfc2V0dGluZzsKKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSplcHdyaXRlOworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmVwcmVhZDsKKwl9CQkJcHJvdG9jb2xbVVNCTFBfTUFYX1BST1RPQ09MU107CisJaW50CQkJY3VycmVudF9wcm90b2NvbDsKKwlpbnQJCQltaW5vcjsJCQkvKiBtaW5vciBudW1iZXIgb2YgZGV2aWNlICovCisJaW50CQkJd2NvbXBsZXRlOwkJLyogd3JpdGluZyBpcyBjb21wbGV0ZWQgKi8KKwlpbnQJCQlyY29tcGxldGU7CQkvKiByZWFkaW5nIGlzIGNvbXBsZXRlZCAqLworCXVuc2lnbmVkIGludAkJcXVpcmtzOwkJCS8qIHF1aXJrcyBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIJCXVzZWQ7CQkJLyogVHJ1ZSBpZiBvcGVuICovCisJdW5zaWduZWQgY2hhcgkJcHJlc2VudDsJCS8qIFRydWUgaWYgbm90IGRpc2Nvbm5lY3RlZCAqLworCXVuc2lnbmVkIGNoYXIJCWJpZGlyOwkJCS8qIGludGVyZmFjZSBpcyBiaWRpcmVjdGlvbmFsICovCisJdW5zaWduZWQgY2hhcgkJKmRldmljZV9pZF9zdHJpbmc7CS8qIElFRUUgMTI4NCBERVZJQ0UgSUQgc3RyaW5nIChwdHIpICovCisJCQkJCQkJLyogZmlyc3QgMiBieXRlcyBhcmUgKGJpZy1lbmRpYW4pIGxlbmd0aCAqLworfTsKKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCB1c2JscF9kdW1wKHN0cnVjdCB1c2JscCAqdXNibHApIHsKKwlpbnQgcDsKKworCWRiZygidXNibHA9MHglcCIsIHVzYmxwKTsKKwlkYmcoImRldj0weCVwIiwgdXNibHAtPmRldik7CisJZGJnKCJwcmVzZW50PSVkIiwgdXNibHAtPnByZXNlbnQpOworCWRiZygicmVhZGJ1Zj0weCVwIiwgdXNibHAtPnJlYWRidWYpOworCWRiZygid3JpdGVidWY9MHglcCIsIHVzYmxwLT53cml0ZWJ1Zik7CisJZGJnKCJyZWFkdXJiPTB4JXAiLCB1c2JscC0+cmVhZHVyYik7CisJZGJnKCJ3cml0ZXVyYj0weCVwIiwgdXNibHAtPndyaXRldXJiKTsKKwlkYmcoInJlYWRjb3VudD0lZCIsIHVzYmxwLT5yZWFkY291bnQpOworCWRiZygiaWZudW09JWQiLCB1c2JscC0+aWZudW0pOworICAgIGZvciAocCA9IFVTQkxQX0ZJUlNUX1BST1RPQ09MOyBwIDw9IFVTQkxQX0xBU1RfUFJPVE9DT0w7IHArKykgeworCWRiZygicHJvdG9jb2xbJWRdLmFsdF9zZXR0aW5nPSVkIiwgcCwgdXNibHAtPnByb3RvY29sW3BdLmFsdF9zZXR0aW5nKTsKKwlkYmcoInByb3RvY29sWyVkXS5lcHdyaXRlPSVwIiwgcCwgdXNibHAtPnByb3RvY29sW3BdLmVwd3JpdGUpOworCWRiZygicHJvdG9jb2xbJWRdLmVwcmVhZD0lcCIsIHAsIHVzYmxwLT5wcm90b2NvbFtwXS5lcHJlYWQpOworICAgIH0KKwlkYmcoImN1cnJlbnRfcHJvdG9jb2w9JWQiLCB1c2JscC0+Y3VycmVudF9wcm90b2NvbCk7CisJZGJnKCJtaW5vcj0lZCIsIHVzYmxwLT5taW5vcik7CisJZGJnKCJ3Y29tcGxldGU9JWQiLCB1c2JscC0+d2NvbXBsZXRlKTsKKwlkYmcoInJjb21wbGV0ZT0lZCIsIHVzYmxwLT5yY29tcGxldGUpOworCWRiZygicXVpcmtzPSVkIiwgdXNibHAtPnF1aXJrcyk7CisJZGJnKCJ1c2VkPSVkIiwgdXNibHAtPnVzZWQpOworCWRiZygiYmlkaXI9JWQiLCB1c2JscC0+YmlkaXIpOworCWRiZygiZGV2aWNlX2lkX3N0cmluZz1cIiVzXCIiLAorCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyA/CisJCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyArIDIgOgorCQkJKHVuc2lnbmVkIGNoYXIgKikiKG51bGwpIik7Cit9CisjZW5kaWYKKworLyogUXVpcmtzOiB2YXJpb3VzIHByaW50ZXIgcXVpcmtzIGFyZSBoYW5kbGVkIGJ5IHRoaXMgdGFibGUgJiBpdHMgZmxhZ3MuICovCisKK3N0cnVjdCBxdWlya19wcmludGVyX3N0cnVjdCB7CisJX191MTYgdmVuZG9ySWQ7CisJX191MTYgcHJvZHVjdElkOworCXVuc2lnbmVkIGludCBxdWlya3M7Cit9OworCisjZGVmaW5lIFVTQkxQX1FVSVJLX0JJRElSCTB4MQkvKiByZXBvcnRzIGJpZGlyIGJ1dCByZXF1aXJlcyB1bmlkaXJlY3Rpb25hbCBtb2RlIChubyBJTnMvcmVhZHMpICovCisjZGVmaW5lIFVTQkxQX1FVSVJLX1VTQl9JTklUCTB4MgkvKiBuZWVkcyB2ZW5kb3IgVVNCIGluaXQgc3RyaW5nICovCisKK3N0YXRpYyBzdHJ1Y3QgcXVpcmtfcHJpbnRlcl9zdHJ1Y3QgcXVpcmtfcHJpbnRlcnNbXSA9IHsKKwl7IDB4MDNmMCwgMHgwMDA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDg5NUMgKi8KKwl7IDB4MDNmMCwgMHgwMTA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDg4MEMgKi8KKwl7IDB4MDNmMCwgMHgwMjA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgxNUMgKi8KKwl7IDB4MDNmMCwgMHgwMzA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgxMEMvODEyQyAqLworCXsgMHgwM2YwLCAweDA0MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODMwQyAqLworCXsgMHgwM2YwLCAweDA1MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODg1QyAqLworCXsgMHgwM2YwLCAweDA2MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODQwQyAqLyAgIAorCXsgMHgwM2YwLCAweDA4MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODE2QyAqLyAgIAorCXsgMHgwM2YwLCAweDExMDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tqZXQgOTU5QyAqLworCXsgMHgwNDA5LCAweGVmYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTkwMCAoSFAgT0VNKSAqLworCXsgMHgwNDA5LCAweGJlZjQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTc2MCAoSFAgT0VNKSAqLworCXsgMHgwNDA5LCAweGYwYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTkyMCAoSFAgT0VNKSAqLworCXsgMHgwNDA5LCAweGYxYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTgwMCAoSFAgT0VNKSAqLworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgaW50IHVzYmxwX3NlbGVjdF9hbHRzKHN0cnVjdCB1c2JscCAqdXNibHApOworc3RhdGljIGludCB1c2JscF9zZXRfcHJvdG9jb2woc3RydWN0IHVzYmxwICp1c2JscCwgaW50IHByb3RvY29sKTsKK3N0YXRpYyBpbnQgdXNibHBfY2FjaGVfZGV2aWNlX2lkX3N0cmluZyhzdHJ1Y3QgdXNibHAgKnVzYmxwKTsKKworLyogZm9yd2FyZCByZWZlcmVuY2UgdG8gbWFrZSBvdXIgbGl2ZXMgZWFzaWVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibHBfZHJpdmVyOworc3RhdGljIERFQ0xBUkVfTVVURVgodXNibHBfc2VtKTsJLyogbG9ja3MgdGhlIGV4aXN0ZW5jZSBvZiB1c2JscCdzICovCisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIHVzYmxwIGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KKworc3RhdGljIGludCB1c2JscF9jdHJsX21zZyhzdHJ1Y3QgdXNibHAgKnVzYmxwLCBpbnQgcmVxdWVzdCwgaW50IHR5cGUsIGludCBkaXIsIGludCByZWNpcCwgaW50IHZhbHVlLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW50IHJldHZhbDsKKwlpbnQgaW5kZXggPSB1c2JscC0+aWZudW07CisKKwkvKiBIaWdoIGJ5dGUgaGFzIHRoZSBpbnRlcmZhY2UgaW5kZXguCisJICAgTG93IGJ5dGUgaGFzIHRoZSBhbHRlcm5hdGUgc2V0dGluZy4KKwkgKi8KKwlpZiAoKHJlcXVlc3QgPT0gVVNCTFBfUkVRX0dFVF9JRCkgJiYgKHR5cGUgPT0gVVNCX1RZUEVfQ0xBU1MpKSB7CisJICBpbmRleCA9ICh1c2JscC0+aWZudW08PDgpfHVzYmxwLT5wcm90b2NvbFt1c2JscC0+Y3VycmVudF9wcm90b2NvbF0uYWx0X3NldHRpbmc7CisJfQorCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVzYmxwLT5kZXYsCisJCWRpciA/IHVzYl9yY3ZjdHJscGlwZSh1c2JscC0+ZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZSh1c2JscC0+ZGV2LCAwKSwKKwkJcmVxdWVzdCwgdHlwZSB8IGRpciB8IHJlY2lwLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCBVU0JMUF9XUklURV9USU1FT1VUKTsKKwlkYmcoInVzYmxwX2NvbnRyb2xfbXNnOiBycTogMHglMDJ4IGRpcjogJWQgcmVjaXA6ICVkIHZhbHVlOiAlZCBpZHg6ICVkIGxlbjogJSN4IHJlc3VsdDogJWQiLAorCQlyZXF1ZXN0LCAhIWRpciwgcmVjaXAsIHZhbHVlLCBpbmRleCwgbGVuLCByZXR2YWwpOworCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKK30KKworI2RlZmluZSB1c2JscF9yZWFkX3N0YXR1cyh1c2JscCwgc3RhdHVzKVwKKwl1c2JscF9jdHJsX21zZyh1c2JscCwgVVNCTFBfUkVRX0dFVF9TVEFUVVMsIFVTQl9UWVBFX0NMQVNTLCBVU0JfRElSX0lOLCBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCBzdGF0dXMsIDEpCisjZGVmaW5lIHVzYmxwX2dldF9pZCh1c2JscCwgY29uZmlnLCBpZCwgbWF4bGVuKVwKKwl1c2JscF9jdHJsX21zZyh1c2JscCwgVVNCTFBfUkVRX0dFVF9JRCwgVVNCX1RZUEVfQ0xBU1MsIFVTQl9ESVJfSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGNvbmZpZywgaWQsIG1heGxlbikKKyNkZWZpbmUgdXNibHBfcmVzZXQodXNibHApXAorCXVzYmxwX2N0cmxfbXNnKHVzYmxwLCBVU0JMUF9SRVFfUkVTRVQsIFVTQl9UWVBFX0NMQVNTLCBVU0JfRElSX09VVCwgVVNCX1JFQ0lQX09USEVSLCAwLCBOVUxMLCAwKQorCisjZGVmaW5lIHVzYmxwX2hwX2NoYW5uZWxfY2hhbmdlX3JlcXVlc3QodXNibHAsIGNoYW5uZWwsIGJ1ZmZlcikgXAorCXVzYmxwX2N0cmxfbXNnKHVzYmxwLCBVU0JMUF9SRVFfSFBfQ0hBTk5FTF9DSEFOR0VfUkVRVUVTVCwgVVNCX1RZUEVfVkVORE9SLCBVU0JfRElSX0lOLCBVU0JfUkVDSVBfSU5URVJGQUNFLCBjaGFubmVsLCBidWZmZXIsIDEpCisKKy8qCisgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciB1c2JscF9zZWxlY3RfYWx0cygpIGJlbG93IGZvciB0aGUgdXNhZ2UKKyAqIGV4cGxhbmF0aW9uLiAgTG9vayBpbnRvIHlvdXIgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIGFuZCBkbWVzZyBpbgorICogY2FzZSBvZiBhbnkgdHJvdWJsZS4KKyAqLworc3RhdGljIGludCBwcm90b19iaWFzID0gLTE7CisKKy8qCisgKiBVUkIgY2FsbGJhY2suCisgKi8KKworc3RhdGljIHZvaWQgdXNibHBfYnVsa19yZWFkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IHVyYi0+Y29udGV4dDsKKworCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYgfHwgIXVzYmxwLT51c2VkIHx8ICF1c2JscC0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzKSkKKwkJd2FybigidXNibHAlZDogbm9uemVybyByZWFkL3dyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQl1c2JscC0+bWlub3IsIHVyYi0+c3RhdHVzKTsKKwl1c2JscC0+cmNvbXBsZXRlID0gMTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzYmxwLT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgdXNibHBfYnVsa193cml0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2IHx8ICF1c2JscC0+dXNlZCB8fCAhdXNibHAtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cykpCisJCXdhcm4oInVzYmxwJWQ6IG5vbnplcm8gcmVhZC93cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJdXNibHAtPm1pbm9yLCB1cmItPnN0YXR1cyk7CisJdXNibHAtPndjb21wbGV0ZSA9IDE7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2JscC0+d2FpdCk7Cit9CisKKy8qCisgKiBHZXQgYW5kIHByaW50IHByaW50ZXIgZXJyb3JzLgorICovCisKK3N0YXRpYyBjaGFyICp1c2JscF9tZXNzYWdlc1tdID0geyAib2siLCAib3V0IG9mIHBhcGVyIiwgIm9mZi1saW5lIiwgIm9uIGZpcmUiIH07CisKK3N0YXRpYyBpbnQgdXNibHBfY2hlY2tfc3RhdHVzKHN0cnVjdCB1c2JscCAqdXNibHAsIGludCBlcnIpCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXMsIG5ld2VyciA9IDA7CisJaW50IGVycm9yOworCisJZXJyb3IgPSB1c2JscF9yZWFkX3N0YXR1cyAodXNibHAsIHVzYmxwLT5zdGF0dXNidWYpOworCWlmIChlcnJvciA8IDApIHsKKwkJZXJyKCJ1c2JscCVkOiBlcnJvciAlZCByZWFkaW5nIHByaW50ZXIgc3RhdHVzIiwKKwkJCXVzYmxwLT5taW5vciwgZXJyb3IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGF0dXMgPSAqdXNibHAtPnN0YXR1c2J1ZjsKKworCWlmICh+c3RhdHVzICYgTFBfUEVSUk9SUCkKKwkJbmV3ZXJyID0gMzsKKwlpZiAoc3RhdHVzICYgTFBfUE9VVFBBKQorCQluZXdlcnIgPSAxOworCWlmICh+c3RhdHVzICYgTFBfUFNFTEVDRCkKKwkJbmV3ZXJyID0gMjsKKworCWlmIChuZXdlcnIgIT0gZXJyKQorCQlpbmZvKCJ1c2JscCVkOiAlcyIsIHVzYmxwLT5taW5vciwgdXNibHBfbWVzc2FnZXNbbmV3ZXJyXSk7CisKKwlyZXR1cm4gbmV3ZXJyOworfQorCisvKgorICogRmlsZSBvcCBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIGludCB1c2JscF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IHVzYmxwICp1c2JscDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgcmV0dmFsOworCisJaWYgKG1pbm9yIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duICgmdXNibHBfc2VtKTsKKworCXJldHZhbCA9IC1FTk9ERVY7CisJaW50ZiA9IHVzYl9maW5kX2ludGVyZmFjZSgmdXNibHBfZHJpdmVyLCBtaW5vcik7CisJaWYgKCFpbnRmKSB7CisJCWdvdG8gb3V0OworCX0KKwl1c2JscCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYgfHwgIXVzYmxwLT5wcmVzZW50KQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IC1FQlVTWTsKKwlpZiAodXNibHAtPnVzZWQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBUT0RPOiBuZWVkIHRvIGltcGxlbWVudCBMUF9BQk9SVE9QRU4gKyBPX05PTkJMT0NLIGFzIGluIGRyaXZlcnMvY2hhci9scC5jID8/PworCSAqIFRoaXMgaXMgI2lmIDAtZWQgYmVjYXVzZSB3ZSAqZG9uJ3QqIHdhbnQgdG8gZmFpbCBhbiBvcGVuCisJICoganVzdCBiZWNhdXNlIHRoZSBwcmludGVyIGlzIG9mZi1saW5lLgorCSAqLworI2lmIDAKKwlpZiAoKHJldHZhbCA9IHVzYmxwX2NoZWNrX3N0YXR1cyh1c2JscCwgMCkpKSB7CisJCXJldHZhbCA9IHJldHZhbCA+IDEgPyAtRUlPIDogLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorI2Vsc2UKKwlyZXR2YWwgPSAwOworI2VuZGlmCisKKwl1c2JscC0+dXNlZCA9IDE7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdXNibHA7CisKKwl1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAwOworCXVzYmxwLT53Y29tcGxldGUgPSAxOyAvKiB3ZSBiZWdpbiB3cml0ZWFibGUgKi8KKwl1c2JscC0+cmNvbXBsZXRlID0gMDsKKworCWlmICh1c2JscC0+YmlkaXIpIHsKKwkJdXNibHAtPnJlYWRjb3VudCA9IDA7CisJCXVzYmxwLT5yZWFkdXJiLT5kZXYgPSB1c2JscC0+ZGV2OworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNibHAtPnJlYWR1cmIsIEdGUF9LRVJORUwpIDwgMCkgeworCQkJcmV0dmFsID0gLUVJTzsKKwkJCXVzYmxwLT51c2VkID0gMDsKKwkJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJCX0KKwl9CitvdXQ6CisJdXAgKCZ1c2JscF9zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmxwX2NsZWFudXAgKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJaW5mbygidXNibHAlZDogcmVtb3ZlZCIsIHVzYmxwLT5taW5vcik7CisKKwlrZnJlZSAodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOworCWtmcmVlICh1c2JscC0+c3RhdHVzYnVmKTsKKwl1c2JfZnJlZV91cmIodXNibHAtPndyaXRldXJiKTsKKwl1c2JfZnJlZV91cmIodXNibHAtPnJlYWR1cmIpOworCWtmcmVlICh1c2JscCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmxwX3VubGlua191cmJzKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJdXNiX2tpbGxfdXJiKHVzYmxwLT53cml0ZXVyYik7CisJaWYgKHVzYmxwLT5iaWRpcikKKwkJdXNiX2tpbGxfdXJiKHVzYmxwLT5yZWFkdXJiKTsKK30KKworc3RhdGljIGludCB1c2JscF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JscCAqdXNibHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlkb3duICgmdXNibHBfc2VtKTsKKwl1c2JscC0+dXNlZCA9IDA7CisJaWYgKHVzYmxwLT5wcmVzZW50KSB7CisJCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKKwl9IGVsc2UgCQkvKiBmaW5pc2ggY2xlYW51cCBmcm9tIGRpc2Nvbm5lY3QgKi8KKwkJdXNibHBfY2xlYW51cCAodXNibHApOworCXVwICgmdXNibHBfc2VtKTsKKwlyZXR1cm4gMDsKK30KKworLyogTm8ga2VybmVsIGxvY2sgLSBmaW5lICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYmxwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxlLCAmdXNibHAtPndhaXQsIHdhaXQpOworIAlyZXR1cm4gKCghdXNibHAtPmJpZGlyIHx8ICF1c2JscC0+cmNvbXBsZXRlKSA/IDAgOiBQT0xMSU4gIHwgUE9MTFJETk9STSkKKyAJCQkgICAgICAgfCAoIXVzYmxwLT53Y29tcGxldGUgPyAwIDogUE9MTE9VVCB8IFBPTExXUk5PUk0pOworfQorCitzdGF0aWMgaW50IHVzYmxwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBsZW5ndGgsIGVyciwgaTsKKwl1bnNpZ25lZCBjaGFyIG5ld0NoYW5uZWw7CisJaW50IHN0YXR1czsKKwlpbnQgdHdvaW50c1syXTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRvd24gKCZ1c2JscC0+c2VtKTsKKwlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlkYmcoInVzYmxwX2lvY3RsOiBjbWQ9MHgleCAoJWMgbnI9JWQgbGVuPSVkIGRpcj0lZCkiLCBjbWQsIF9JT0NfVFlQRShjbWQpLAorCQlfSU9DX05SKGNtZCksIF9JT0NfU0laRShjbWQpLCBfSU9DX0RJUihjbWQpICk7CisKKwlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gJ1AnKQkvKiBuZXctc3R5bGUgaW9jdGwgbnVtYmVyICovCisKKwkJc3dpdGNoIChfSU9DX05SKGNtZCkpIHsKKworCQkJY2FzZSBJT0NOUl9HRVRfREVWSUNFX0lEOiAvKiBnZXQgdGhlIERFVklDRV9JRCBzdHJpbmcgKi8KKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWxlbmd0aCA9IHVzYmxwX2NhY2hlX2RldmljZV9pZF9zdHJpbmcodXNibHApOworCQkJCWlmIChsZW5ndGggPCAwKSB7CisJCQkJCXJldHZhbCA9IGxlbmd0aDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoID4gX0lPQ19TSVpFKGNtZCkpCisJCQkJCWxlbmd0aCA9IF9JT0NfU0laRShjbWQpOyAvKiB0cnVuY2F0ZSAqLworCisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLAorCQkJCQkJdXNibHAtPmRldmljZV9pZF9zdHJpbmcsCisJCQkJCQkodW5zaWduZWQgbG9uZykgbGVuZ3RoKSkgeworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfR0VUX1BST1RPQ09MUzoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQgfHwKKwkJCQkgICAgX0lPQ19TSVpFKGNtZCkgPCBzaXplb2YodHdvaW50cykpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCXR3b2ludHNbMF0gPSB1c2JscC0+Y3VycmVudF9wcm90b2NvbDsKKwkJCQl0d29pbnRzWzFdID0gMDsKKwkJCQlmb3IgKGkgPSBVU0JMUF9GSVJTVF9QUk9UT0NPTDsKKwkJCQkgICAgIGkgPD0gVVNCTFBfTEFTVF9QUk9UT0NPTDsgaSsrKSB7CisJCQkJCWlmICh1c2JscC0+cHJvdG9jb2xbaV0uYWx0X3NldHRpbmcgPj0gMCkKKwkJCQkJCXR3b2ludHNbMV0gfD0gKDE8PGkpOworCQkJCX0KKworCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJCQkJKHVuc2lnbmVkIGNoYXIgKil0d29pbnRzLAorCQkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgeworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfU0VUX1BST1RPQ09MOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworI2lmZGVmIERFQlVHCisJCQkJaWYgKGFyZyA9PSAtMTApIHsKKwkJCQkJdXNibHBfZHVtcCh1c2JscCk7CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorCisJCQkJdXNibHBfdW5saW5rX3VyYnModXNibHApOworCQkJCXJldHZhbCA9IHVzYmxwX3NldF9wcm90b2NvbCh1c2JscCwgYXJnKTsKKwkJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCQl1c2JscF9zZXRfcHJvdG9jb2wodXNibHAsCisJCQkJCQl1c2JscC0+Y3VycmVudF9wcm90b2NvbCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX0hQX1NFVF9DSEFOTkVMOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUgfHwKKwkJCQkgICAgbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gMHgwM0YwIHx8CisJCQkJICAgIHVzYmxwLT5xdWlya3MgJiBVU0JMUF9RVUlSS19CSURJUikgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJZXJyID0gdXNibHBfaHBfY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdCh1c2JscCwKKwkJCQkJYXJnLCAmbmV3Q2hhbm5lbCk7CisJCQkJaWYgKGVyciA8IDApIHsKKwkJCQkJZXJyKCJ1c2JscCVkOiBlcnJvciA9ICVkIHNldHRpbmcgIgorCQkJCQkJIkhQIGNoYW5uZWwiLAorCQkJCQkJdXNibHAtPm1pbm9yLCBlcnIpOworCQkJCQlyZXR2YWwgPSAtRUlPOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJZGJnKCJ1c2JscCVkIHJlcXVlc3RlZC9nb3QgSFAgY2hhbm5lbCAlbGQvJWQiLAorCQkJCQl1c2JscC0+bWlub3IsIGFyZywgbmV3Q2hhbm5lbCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfR0VUX0JVU19BRERSRVNTOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCB8fAorCQkJCSAgICBfSU9DX1NJWkUoY21kKSA8IHNpemVvZih0d29pbnRzKSkgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJdHdvaW50c1swXSA9IHVzYmxwLT5kZXYtPmJ1cy0+YnVzbnVtOworCQkJCXR3b2ludHNbMV0gPSB1c2JscC0+ZGV2LT5kZXZudW07CisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQkJCQkodW5zaWduZWQgY2hhciAqKXR3b2ludHMsCisJCQkJCQlzaXplb2YodHdvaW50cykpKSB7CisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlkYmcoInVzYmxwJWQgaXMgYnVzPSVkLCBkZXZpY2U9JWQiLAorCQkJCQl1c2JscC0+bWlub3IsIHR3b2ludHNbMF0sIHR3b2ludHNbMV0pOworCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX0dFVF9WSURfUElEOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCB8fAorCQkJCSAgICBfSU9DX1NJWkUoY21kKSA8IHNpemVvZih0d29pbnRzKSkgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJdHdvaW50c1swXSA9IGxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCQkJCXR3b2ludHNbMV0gPSBsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQkJCQkodW5zaWduZWQgY2hhciAqKXR3b2ludHMsCisJCQkJCQlzaXplb2YodHdvaW50cykpKSB7CisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlkYmcoInVzYmxwJWQgaXMgVklEPTB4JTQuNFgsIFBJRD0weCU0LjRYIiwKKwkJCQkJdXNibHAtPm1pbm9yLCB0d29pbnRzWzBdLCB0d29pbnRzWzFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJT0NOUl9TT0ZUX1JFU0VUOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfTk9ORSkgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJCXJldHZhbCA9IHVzYmxwX3Jlc2V0KHVzYmxwKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dmFsID0gLUVOT1RUWTsKKwkJfQorCWVsc2UJLyogb2xkLXN0eWxlIGlvY3RsIHZhbHVlICovCisJCXN3aXRjaCAoY21kKSB7CisKKwkJCWNhc2UgTFBHRVRTVEFUVVM6CisJCQkJaWYgKHVzYmxwX3JlYWRfc3RhdHVzKHVzYmxwLCB1c2JscC0+c3RhdHVzYnVmKSkgeworCQkJCQllcnIoInVzYmxwJWQ6IGZhaWxlZCByZWFkaW5nIHByaW50ZXIgc3RhdHVzIiwgdXNibHAtPm1pbm9yKTsKKwkJCQkJcmV0dmFsID0gLUVJTzsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCQlzdGF0dXMgPSAqdXNibHAtPnN0YXR1c2J1ZjsKKwkJCQlpZiAoY29weV90b191c2VyICgodm9pZCBfX3VzZXIgKilhcmcsICZzdGF0dXMsIHNpemVvZihpbnQpKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlyZXR2YWwgPSAtRU5PVFRZOworCQl9CisKK2RvbmU6CisJdXAgKCZ1c2JscC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCB1c2JscF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgdGltZW91dCwgZXJyID0gMCwgdHJhbnNmZXJfbGVuZ3RoID0gMDsKKwlzaXplX3Qgd3JpdGVjb3VudCA9IDA7CisKKwl3aGlsZSAod3JpdGVjb3VudCA8IGNvdW50KSB7CisJCWlmICghdXNibHAtPndjb21wbGV0ZSkgeworCQkJYmFycmllcigpOworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJd3JpdGVjb3VudCArPSB0cmFuc2Zlcl9sZW5ndGg7CisJCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVBR0FJTjsKKwkJCX0KKworCQkJdGltZW91dCA9IFVTQkxQX1dSSVRFX1RJTUVPVVQ7CisJCQlhZGRfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJCXdoaWxlICggMT09MSApIHsKKworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVJTlRSOworCQkJCX0KKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmICh0aW1lb3V0ICYmICF1c2JscC0+d2NvbXBsZXRlKSB7CisJCQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQkJCX0gZWxzZSB7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZ1c2JscC0+d2FpdCwgJndhaXQpOworCQl9CisKKwkJZG93biAoJnVzYmxwLT5zZW0pOworCQlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCQl1cCAoJnVzYmxwLT5zZW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlpZiAodXNibHAtPndyaXRldXJiLT5zdGF0dXMgIT0gMCkgeworCQkJaWYgKHVzYmxwLT5xdWlya3MgJiBVU0JMUF9RVUlSS19CSURJUikgeworCQkJCWlmICghdXNibHAtPndjb21wbGV0ZSkKKwkJCQkJZXJyKCJ1c2JscCVkOiBlcnJvciAlZCB3cml0aW5nIHRvIHByaW50ZXIiLAorCQkJCQkJdXNibHAtPm1pbm9yLCB1c2JscC0+d3JpdGV1cmItPnN0YXR1cyk7CisJCQkJZXJyID0gdXNibHAtPndyaXRldXJiLT5zdGF0dXM7CisJCQl9IGVsc2UKKwkJCQllcnIgPSB1c2JscF9jaGVja19zdGF0dXModXNibHAsIGVycik7CisJCQl1cCAoJnVzYmxwLT5zZW0pOworCisJCQkvKiBpZiB0aGUgZmF1bHQgd2FzIGR1ZSB0byBkaXNjb25uZWN0LCBsZXQga2h1YmQncworCQkJICogY2FsbCB0byB1c2JscF9kaXNjb25uZWN0KCkgZ3JhYiB1c2JscC0+c2VtIC4uLgorCQkJICovCisJCQlzY2hlZHVsZSAoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgbXVzdCBpbmNyZW1lbnQgd3JpdGVjb3VudCBoZXJlLCBhbmQgbm90IGF0IHRoZQorCQkgKiBlbmQgb2YgdGhlIGxvb3AuIE90aGVyd2lzZSwgdGhlIGZpbmFsIGxvb3AgaXRlcmF0aW9uIG1heQorCQkgKiBiZSBza2lwcGVkLCBsZWFkaW5nIHRvIGluY29tcGxldGUgcHJpbnRlciBvdXRwdXQuCisJCSAqLworCQl3cml0ZWNvdW50ICs9IHRyYW5zZmVyX2xlbmd0aDsKKwkJaWYgKHdyaXRlY291bnQgPT0gY291bnQpIHsKKwkJCXVwKCZ1c2JscC0+c2VtKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdHJhbnNmZXJfbGVuZ3RoPShjb3VudCAtIHdyaXRlY291bnQpOworCQlpZiAodHJhbnNmZXJfbGVuZ3RoID4gVVNCTFBfQlVGX1NJWkUpCisJCQl0cmFuc2Zlcl9sZW5ndGggPSBVU0JMUF9CVUZfU0laRTsKKworCQl1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB0cmFuc2Zlcl9sZW5ndGg7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfYnVmZmVyLCAKKwkJCQkgICBidWZmZXIgKyB3cml0ZWNvdW50LCB0cmFuc2Zlcl9sZW5ndGgpKSB7CisJCQl1cCgmdXNibHAtPnNlbSk7CisJCQlyZXR1cm4gd3JpdGVjb3VudCA/IHdyaXRlY291bnQgOiAtRUZBVUxUOworCQl9CisKKwkJdXNibHAtPndyaXRldXJiLT5kZXYgPSB1c2JscC0+ZGV2OworCQl1c2JscC0+d2NvbXBsZXRlID0gMDsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXNibHAtPndyaXRldXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJaWYgKGVyciAhPSAtRU5PTUVNKQorCQkJCWNvdW50ID0gLUVJTzsKKwkJCWVsc2UKKwkJCQljb3VudCA9IHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVOT01FTTsKKwkJCXVwICgmdXNibHAtPnNlbSk7CisJCQlicmVhazsKKwkJfQorCQl1cCAoJnVzYmxwLT5zZW0pOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgdXNibHBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICghdXNibHAtPmJpZGlyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvd24gKCZ1c2JscC0+c2VtKTsKKwlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCWNvdW50ID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKworCWlmICghdXNibHAtPnJjb21wbGV0ZSkgeworCQliYXJyaWVyKCk7CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQljb3VudCA9IC1FQUdBSU47CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlhZGRfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJd2hpbGUgKDE9PTEpIHsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWNvdW50ID0gLUVJTlRSOworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZ1c2JscC0+d2FpdCwgJndhaXQpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXVwICgmdXNibHAtPnNlbSk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJaWYgKCF1c2JscC0+cmNvbXBsZXRlKSB7CisJCQkJc2NoZWR1bGUoKTsKKwkJCX0gZWxzZSB7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRvd24gKCZ1c2JscC0+c2VtKTsKKwkJfQorCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwl9CisKKwlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCWNvdW50ID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKworCWlmICh1c2JscC0+cmVhZHVyYi0+c3RhdHVzKSB7CisJCWVycigidXNibHAlZDogZXJyb3IgJWQgcmVhZGluZyBmcm9tIHByaW50ZXIiLAorCQkJdXNibHAtPm1pbm9yLCB1c2JscC0+cmVhZHVyYi0+c3RhdHVzKTsKKwkJdXNibHAtPnJlYWR1cmItPmRldiA9IHVzYmxwLT5kZXY7CisgCQl1c2JscC0+cmVhZGNvdW50ID0gMDsKKwkJdXNibHAtPnJjb21wbGV0ZSA9IDA7CisJCWlmICh1c2Jfc3VibWl0X3VyYih1c2JscC0+cmVhZHVyYiwgR0ZQX0tFUk5FTCkgPCAwKQorCQkJZGJnKCJlcnJvciBzdWJtaXR0aW5nIHVyYiIpOworCQljb3VudCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisKKwljb3VudCA9IGNvdW50IDwgdXNibHAtPnJlYWR1cmItPmFjdHVhbF9sZW5ndGggLSB1c2JscC0+cmVhZGNvdW50ID8KKwkJY291bnQgOgl1c2JscC0+cmVhZHVyYi0+YWN0dWFsX2xlbmd0aCAtIHVzYmxwLT5yZWFkY291bnQ7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgdXNibHAtPnJlYWR1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVzYmxwLT5yZWFkY291bnQsIGNvdW50KSkgeworCQljb3VudCA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoKHVzYmxwLT5yZWFkY291bnQgKz0gY291bnQpID09IHVzYmxwLT5yZWFkdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXVzYmxwLT5yZWFkY291bnQgPSAwOworCQl1c2JscC0+cmVhZHVyYi0+ZGV2ID0gdXNibHAtPmRldjsKKwkJdXNibHAtPnJjb21wbGV0ZSA9IDA7CisJCWlmICh1c2Jfc3VibWl0X3VyYih1c2JscC0+cmVhZHVyYiwgR0ZQX0tFUk5FTCkpIHsKKwkJCWNvdW50ID0gLUVJTzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwl1cCAoJnVzYmxwLT5zZW0pOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENoZWNrcyBmb3IgcHJpbnRlcnMgdGhhdCBoYXZlIHF1aXJrcywgc3VjaCBhcyByZXF1aXJpbmcgdW5pZGlyZWN0aW9uYWwKKyAqIGNvbW11bmljYXRpb24gYnV0IHJlcG9ydGluZyBiaWRpcmVjdGlvbmFsOyBjdXJyZW50bHkgc29tZSBIUCBwcmludGVycworICogaGF2ZSB0aGlzIGZsYXcgKEhQIDgxMCwgODgwLCA4OTUsIGV0Yy4pLCBvciBuZWVkaW5nIGFuIGluaXQgc3RyaW5nCisgKiBzZW50IGF0IGVhY2ggb3BlbiAobGlrZSBzb21lIEVwc29ucykuCisgKiBSZXR1cm5zIDEgaWYgZm91bmQsIDAgaWYgbm90IGZvdW5kLgorICoKKyAqIEhQIHJlY29tbWVuZGVkIHRoYXQgd2UgdXNlIHRoZSBiaWRpcmVjdGlvbmFsIGludGVyZmFjZSBidXQKKyAqIGRvbid0IGF0dGVtcHQgYW55IGJ1bGsgSU4gdHJhbnNmZXJzIGZyb20gdGhlIElOIGVuZHBvaW50LgorICogSGVyZSdzIHNvbWUgbW9yZSBkZXRhaWwgb24gdGhlIHByb2JsZW06CisgKiBUaGUgcHJvYmxlbSBpcyBub3QgdGhhdCBpdCBpc24ndCBiaWRpcmVjdGlvbmFsIHRob3VnaC4gVGhlIHByb2JsZW0KKyAqIGlzIHRoYXQgaWYgeW91IHJlcXVlc3QgYSBkZXZpY2UgSUQsIG9yIHN0YXR1cyBpbmZvcm1hdGlvbiwgd2hpbGUKKyAqIHRoZSBidWZmZXJzIGFyZSBmdWxsLCB0aGUgcmV0dXJuIGRhdGEgd2lsbCBlbmQgdXAgaW4gdGhlIHByaW50IGRhdGEKKyAqIGJ1ZmZlci4gRm9yIGV4YW1wbGUgaWYgeW91IG1ha2Ugc3VyZSB5b3UgbmV2ZXIgcmVxdWVzdCB0aGUgZGV2aWNlIElECisgKiB3aGlsZSB5b3UgYXJlIHNlbmRpbmcgcHJpbnQgZGF0YSwgYW5kIHlvdSBkb24ndCB0cnkgdG8gcXVlcnkgdGhlCisgKiBwcmludGVyIHN0YXR1cyBldmVyeSBjb3VwbGUgb2YgbWlsbGlzZWNvbmRzLCB5b3Ugd2lsbCBwcm9iYWJseSBiZSBPSy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB1c2JscF9xdWlya3MgKF9fdTE2IHZlbmRvciwgX191MTYgcHJvZHVjdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHF1aXJrX3ByaW50ZXJzW2ldLnZlbmRvcklkOyBpKyspIHsKKwkJaWYgKHZlbmRvciA9PSBxdWlya19wcmludGVyc1tpXS52ZW5kb3JJZCAmJgorCQkgICAgcHJvZHVjdCA9PSBxdWlya19wcmludGVyc1tpXS5wcm9kdWN0SWQpCisJCQlyZXR1cm4gcXVpcmtfcHJpbnRlcnNbaV0ucXVpcmtzOworIAl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmxwX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJdXNibHBfcmVhZCwKKwkud3JpdGUgPQl1c2JscF93cml0ZSwKKwkucG9sbCA9CQl1c2JscF9wb2xsLAorCS5pb2N0bCA9CXVzYmxwX2lvY3RsLAorCS5vcGVuID0JCXVzYmxwX29wZW4sCisJLnJlbGVhc2UgPQl1c2JscF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYmxwX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvbHAlZCIsCisJLmZvcHMgPQkJJnVzYmxwX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlVU0JMUF9NSU5PUl9CQVNFLAorfTsKKworc3RhdGljIGludCB1c2JscF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IE5VTEw7CisJaW50IHByb3RvY29sOworCWludCByZXR2YWw7CisKKwkvKiBNYWxsb2MgYW5kIHN0YXJ0IGluaXRpYWxpemluZyB1c2JscCBzdHJ1Y3R1cmUgc28gd2UgY2FuIHVzZSBpdAorCSAqIGRpcmVjdGx5LiAqLworCWlmICghKHVzYmxwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYmxwKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3IgdXNibHAiKTsKKwkJZ290byBhYm9ydDsKKwl9CisJbWVtc2V0KHVzYmxwLCAwLCBzaXplb2Yoc3RydWN0IHVzYmxwKSk7CisJdXNibHAtPmRldiA9IGRldjsKKwlpbml0X01VVEVYICgmdXNibHAtPnNlbSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNibHAtPndhaXQpOworCXVzYmxwLT5pZm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJdXNibHAtPmludGYgPSBpbnRmOworCisJdXNibHAtPndyaXRldXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYmxwLT53cml0ZXVyYikgeworCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBhYm9ydDsKKwl9CisJdXNibHAtPnJlYWR1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXNibHAtPnJlYWR1cmIpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJLyogTWFsbG9jIGRldmljZSBJRCBzdHJpbmcgYnVmZmVyIHRvIHRoZSBsYXJnZXN0IGV4cGVjdGVkIGxlbmd0aCwKKwkgKiBzaW5jZSB3ZSBjYW4gcmUtcXVlcnkgaXQgb24gYW4gaW9jdGwgYW5kIGEgZHluYW1pYyBzdHJpbmcKKwkgKiBjb3VsZCBjaGFuZ2UgaW4gbGVuZ3RoLiAqLworCWlmICghKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nID0ga21hbGxvYyhVU0JMUF9ERVZJQ0VfSURfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3IgZGV2aWNlX2lkX3N0cmluZyIpOworCQlnb3RvIGFib3J0OworCX0KKworCXVzYmxwLT53cml0ZWJ1ZiA9IHVzYmxwLT5yZWFkYnVmID0gTlVMTDsKKwl1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJdXNibHAtPnJlYWR1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJLyogTWFsbG9jIHdyaXRlICYgcmVhZCBidWZmZXJzLiAgV2Ugc29tZXdoYXQgd2FzdGVmdWxseQorCSAqIG1hbGxvYyBib3RoIHJlZ2FyZGxlc3Mgb2YgYmlkaXJlY3Rpb25hbGl0eSwgYmVjYXVzZSB0aGUKKwkgKiBhbHRlcm5hdGUgc2V0dGluZyBjYW4gYmUgY2hhbmdlZCBsYXRlciB2aWEgYW4gaW9jdGwuICovCisJaWYgKCEodXNibHAtPndyaXRlYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCUdGUF9LRVJORUwsICZ1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2RtYSkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3Igd3JpdGUgYnVmIik7CisJCWdvdG8gYWJvcnQ7CisJfQorCWlmICghKHVzYmxwLT5yZWFkYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCUdGUF9LRVJORUwsICZ1c2JscC0+cmVhZHVyYi0+dHJhbnNmZXJfZG1hKSkpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5IGZvciByZWFkIGJ1ZiIpOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJpbnRlciBzdGF0dXMgKi8KKwl1c2JscC0+c3RhdHVzYnVmID0ga21hbGxvYyhTVEFUVVNfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghdXNibHAtPnN0YXR1c2J1ZikgeworCQllcnIoIm91dCBvZiBtZW1vcnkgZm9yIHN0YXR1c2J1ZiIpOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIExvb2t1cCBxdWlya3MgZm9yIHRoaXMgcHJpbnRlci4gKi8KKwl1c2JscC0+cXVpcmtzID0gdXNibHBfcXVpcmtzKAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBBbmFseXplIGFuZCBwaWNrIGluaXRpYWwgYWx0ZXJuYXRlIHNldHRpbmdzIGFuZCBlbmRwb2ludHMuICovCisJcHJvdG9jb2wgPSB1c2JscF9zZWxlY3RfYWx0cyh1c2JscCk7CisJaWYgKHByb3RvY29sIDwgMCkgeworCQlkYmcoImluY29tcGF0aWJsZSBwcmludGVyLWNsYXNzIGRldmljZSAweCU0LjRYLzB4JTQuNFgiLAorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBTZXR1cCB0aGUgc2VsZWN0ZWQgYWx0ZXJuYXRlIHNldHRpbmcgYW5kIGVuZHBvaW50cy4gKi8KKwlpZiAodXNibHBfc2V0X3Byb3RvY29sKHVzYmxwLCBwcm90b2NvbCkgPCAwKQorCQlnb3RvIGFib3J0OworCisJLyogUmV0cmlldmUgYW5kIHN0b3JlIHRoZSBkZXZpY2UgSUQgc3RyaW5nLiAqLworCXVzYmxwX2NhY2hlX2RldmljZV9pZF9zdHJpbmcodXNibHApOworCisjaWZkZWYgREVCVUcKKwl1c2JscF9jaGVja19zdGF0dXModXNibHAsIDApOworI2VuZGlmCisKKwlpbmZvKCJ1c2JscCVkOiBVU0IgJXNkaXJlY3Rpb25hbCBwcmludGVyIGRldiAlZCAiCisJCSJpZiAlZCBhbHQgJWQgcHJvdG8gJWQgdmlkIDB4JTQuNFggcGlkIDB4JTQuNFgiLAorCQl1c2JscC0+bWlub3IsIHVzYmxwLT5iaWRpciA/ICJCaSIgOiAiVW5pIiwgZGV2LT5kZXZudW0sCisJCXVzYmxwLT5pZm51bSwKKwkJdXNibHAtPnByb3RvY29sW3VzYmxwLT5jdXJyZW50X3Byb3RvY29sXS5hbHRfc2V0dGluZywKKwkJdXNibHAtPmN1cnJlbnRfcHJvdG9jb2wsCisJCWxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXNibHApOworCisJdXNibHAtPnByZXNlbnQgPSAxOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNibHBfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCWdvdG8gYWJvcnRfaW50ZmRhdGE7CisJfQorCXVzYmxwLT5taW5vciA9IGludGYtPm1pbm9yOworCisJcmV0dXJuIDA7CisKK2Fib3J0X2ludGZkYXRhOgorCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworYWJvcnQ6CisJaWYgKHVzYmxwKSB7CisJCWlmICh1c2JscC0+d3JpdGVidWYpCisJCQl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCXVzYmxwLT53cml0ZWJ1ZiwgdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAodXNibHAtPnJlYWRidWYpCisJCQl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCXVzYmxwLT5yZWFkYnVmLCB1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2RtYSk7CisJCWtmcmVlKHVzYmxwLT5zdGF0dXNidWYpOworCQlrZnJlZSh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyk7CisJCXVzYl9mcmVlX3VyYih1c2JscC0+d3JpdGV1cmIpOworCQl1c2JfZnJlZV91cmIodXNibHAtPnJlYWR1cmIpOworCQlrZnJlZSh1c2JscCk7CisJfQorCXJldHVybiAtRUlPOworfQorCisvKgorICogV2UgYXJlIGEgIm5ldyIgc3R5bGUgZHJpdmVyIHdpdGggdXNiX2RldmljZV9pZCB0YWJsZSwKKyAqIGJ1dCBvdXIgcmVxdWlyZW1lbnRzIGFyZSB0b28gaW50cmljYXRlIGZvciBzaW1wbGUgbWF0Y2ggdG8gaGFuZGxlLgorICoKKyAqIFRoZSAicHJvdG9fYmlhcyIgb3B0aW9uIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHByZWZlcnJlZCBwcm90b2NvbAorICogZm9yIGFsbCBVU0IgcHJpbnRlcnMgKDE9Ny8xLzEsIDI9Ny8xLzIsIDM9Ny8xLzMpLiAgSWYgdGhlIGRldmljZQorICogc3VwcG9ydHMgdGhlIHByZWZlcnJlZCBwcm90b2NvbCwgdGhlbiB3ZSBiaW5kIHRvIGl0LgorICoKKyAqIFRoZSBiZXN0IGludGVyZmFjZSBmb3IgdXMgaXMgNy8xLzIsIGJlY2F1c2UgaXQgaXMgY29tcGF0aWJsZQorICogd2l0aCBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzLiBJZiB3ZSBmaW5kIGl0LCB3ZSBiaW5kIHRvIGl0LgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcGVvcGxlIGZyb20gaHBvai5zb3VyY2Vmb3JnZS5uZXQgbmVlZCB0byBiZSBhYmxlIHRvCisgKiBiaW5kIHRvIDcvMS8zIChNTEMvMTI4NC40KSwgc28gd2UgcHJvdmlkZSB0aGVtIGlvY3RscyBmb3IgdGhpcyBwdXJwb3NlLgorICoKKyAqIEZhaWxpbmcgNy8xLzIsIHdlIGxvb2sgZm9yIDcvMS8zLCBldmVuIHRob3VnaCBpdCdzIHByb2JhYmx5IG5vdAorICogc3RyZWFtLWNvbXBhdGlibGUsIGJlY2F1c2UgdGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIG9sZCBjb2RlLgorICoKKyAqIElmIG5vdGhpbmcgZWxzZSwgd2UgYmluZCB0byA3LzEvMSAtIHRoZSB1bmlkaXJlY3Rpb25hbCBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgdXNibHBfc2VsZWN0X2FsdHMoc3RydWN0IHVzYmxwICp1c2JscCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZfYWx0OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmZDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCwgKmVwd3JpdGUsICplcHJlYWQ7CisJaW50IHAsIGksIGU7CisKKwlpZl9hbHQgPSB1c2JscC0+aW50ZjsKKworCWZvciAocCA9IDA7IHAgPCBVU0JMUF9NQVhfUFJPVE9DT0xTOyBwKyspCisJCXVzYmxwLT5wcm90b2NvbFtwXS5hbHRfc2V0dGluZyA9IC0xOworCisJLyogRmluZCBvdXQgd2hhdCB3ZSBoYXZlLiAqLworCWZvciAoaSA9IDA7IGkgPCBpZl9hbHQtPm51bV9hbHRzZXR0aW5nOyBpKyspIHsKKwkJaWZkID0gJmlmX2FsdC0+YWx0c2V0dGluZ1tpXTsKKworCQlpZiAoaWZkLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSA3IHx8IGlmZC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sIDwgVVNCTFBfRklSU1RfUFJPVE9DT0wgfHwKKwkJICAgIGlmZC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgPiBVU0JMUF9MQVNUX1BST1RPQ09MKQorCQkJY29udGludWU7CisKKwkJLyogTG9vayBmb3IgYnVsayBPVVQgYW5kIElOIGVuZHBvaW50cy4gKi8KKwkJZXB3cml0ZSA9IGVwcmVhZCA9IE5VTEw7CisJCWZvciAoZSA9IDA7IGUgPCBpZmQtPmRlc2MuYk51bUVuZHBvaW50czsgZSsrKSB7CisJCQllcGQgPSAmaWZkLT5lbmRwb2ludFtlXS5kZXNjOworCisJCQlpZiAoKGVwZC0+Ym1BdHRyaWJ1dGVzJlVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSE9CisJCQkgICAgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCEoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSkgeworCQkJCWlmICghZXB3cml0ZSkKKwkJCQkJZXB3cml0ZSA9IGVwZDsKKworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWVwcmVhZCkKKwkJCQkJZXByZWFkID0gZXBkOworCQkJfQorCQl9CisKKwkJLyogSWdub3JlIGJ1Z2d5IGhhcmR3YXJlIHdpdGhvdXQgdGhlIHJpZ2h0IGVuZHBvaW50cy4gKi8KKwkJaWYgKCFlcHdyaXRlIHx8IChpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sID4gMSAmJiAhZXByZWFkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFR1cm4gb2ZmIHJlYWRzIGZvciA3LzEvMSAodW5pZGlyZWN0aW9uYWwpIGludGVyZmFjZXMKKwkJICogYW5kIGJ1Z2d5IGJpZGlyZWN0aW9uYWwgcHJpbnRlcnMuICovCisJCWlmIChpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sID09IDEpIHsKKwkJCWVwcmVhZCA9IE5VTEw7CisJCX0gZWxzZSBpZiAodXNibHAtPnF1aXJrcyAmIFVTQkxQX1FVSVJLX0JJRElSKSB7CisJCQlpbmZvKCJEaXNhYmxpbmcgcmVhZHMgZnJvbSBwcm9ibGVtIGJpZGlyZWN0aW9uYWwgIgorCQkJCSJwcmludGVyIG9uIHVzYmxwJWQiLCB1c2JscC0+bWlub3IpOworCQkJZXByZWFkID0gTlVMTDsKKwkJfQorCisJCXVzYmxwLT5wcm90b2NvbFtpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sXS5hbHRfc2V0dGluZyA9CisJCQkJaWZkLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQl1c2JscC0+cHJvdG9jb2xbaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbF0uZXB3cml0ZSA9IGVwd3JpdGU7CisJCXVzYmxwLT5wcm90b2NvbFtpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sXS5lcHJlYWQgPSBlcHJlYWQ7CisJfQorCisJLyogSWYgb3VyIHJlcXVlc3RlZCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQsIHRoZW4gdXNlIGl0LiAqLworCWlmIChwcm90b19iaWFzID49IFVTQkxQX0ZJUlNUX1BST1RPQ09MICYmCisJICAgIHByb3RvX2JpYXMgPD0gVVNCTFBfTEFTVF9QUk9UT0NPTCAmJgorCSAgICB1c2JscC0+cHJvdG9jb2xbcHJvdG9fYmlhc10uYWx0X3NldHRpbmcgIT0gLTEpCisJCXJldHVybiBwcm90b19iaWFzOworCisJLyogT3JkZXJpbmcgaXMgaW1wb3J0YW50IGhlcmUuICovCisJaWYgKHVzYmxwLT5wcm90b2NvbFsyXS5hbHRfc2V0dGluZyAhPSAtMSkKKwkJcmV0dXJuIDI7CisJaWYgKHVzYmxwLT5wcm90b2NvbFsxXS5hbHRfc2V0dGluZyAhPSAtMSkKKwkJcmV0dXJuIDE7CisJaWYgKHVzYmxwLT5wcm90b2NvbFszXS5hbHRfc2V0dGluZyAhPSAtMSkKKwkJcmV0dXJuIDM7CisKKwkvKiBJZiBub3RoaW5nIGlzIGF2YWlsYWJsZSwgdGhlbiBkb24ndCBiaW5kIHRvIHRoaXMgZGV2aWNlLiAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB1c2JscF9zZXRfcHJvdG9jb2woc3RydWN0IHVzYmxwICp1c2JscCwgaW50IHByb3RvY29sKQoreworCWludCByLCBhbHRzOworCisJaWYgKHByb3RvY29sIDwgVVNCTFBfRklSU1RfUFJPVE9DT0wgfHwgcHJvdG9jb2wgPiBVU0JMUF9MQVNUX1BST1RPQ09MKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFsdHMgPSB1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmFsdF9zZXR0aW5nOworCWlmIChhbHRzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYmxwLT5kZXYsIHVzYmxwLT5pZm51bSwgYWx0cyk7CisJaWYgKHIgPCAwKSB7CisJCWVycigiY2FuJ3Qgc2V0IGRlc2lyZWQgYWx0c2V0dGluZyAlZCBvbiBpbnRlcmZhY2UgJWQiLAorCQkJYWx0cywgdXNibHAtPmlmbnVtKTsKKwkJcmV0dXJuIHI7CisJfQorCisJdXNiX2ZpbGxfYnVsa191cmIodXNibHAtPndyaXRldXJiLCB1c2JscC0+ZGV2LAorCQl1c2Jfc25kYnVsa3BpcGUodXNibHAtPmRldiwKKwkJICB1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmVwd3JpdGUtPmJFbmRwb2ludEFkZHJlc3MpLAorCQl1c2JscC0+d3JpdGVidWYsIDAsCisJCXVzYmxwX2J1bGtfd3JpdGUsIHVzYmxwKTsKKworCXVzYmxwLT5iaWRpciA9ICh1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmVwcmVhZCAhPSBOVUxMKTsKKwlpZiAodXNibHAtPmJpZGlyKQorCQl1c2JfZmlsbF9idWxrX3VyYih1c2JscC0+cmVhZHVyYiwgdXNibHAtPmRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZSh1c2JscC0+ZGV2LAorCQkJICB1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmVwcmVhZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQl1c2JscC0+cmVhZGJ1ZiwgVVNCTFBfQlVGX1NJWkUsCisJCQl1c2JscF9idWxrX3JlYWQsIHVzYmxwKTsKKworCXVzYmxwLT5jdXJyZW50X3Byb3RvY29sID0gcHJvdG9jb2w7CisJZGJnKCJ1c2JscCVkIHNldCBwcm90b2NvbCAlZCIsIHVzYmxwLT5taW5vciwgcHJvdG9jb2wpOworCXJldHVybiAwOworfQorCisvKiBSZXRyaWV2ZXMgYW5kIGNhY2hlcyBkZXZpY2UgSUQgc3RyaW5nLgorICogUmV0dXJucyBsZW5ndGgsIGluY2x1ZGluZyBsZW5ndGggYnl0ZXMgYnV0IG5vdCBudWxsIHRlcm1pbmF0b3IuCisgKiBPbiBlcnJvciwgcmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAqLworc3RhdGljIGludCB1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJaW50IGVyciwgbGVuZ3RoOworCisJZXJyID0gdXNibHBfZ2V0X2lkKHVzYmxwLCAwLCB1c2JscC0+ZGV2aWNlX2lkX3N0cmluZywgVVNCTFBfREVWSUNFX0lEX1NJWkUgLSAxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkYmcoInVzYmxwJWQ6IGVycm9yID0gJWQgcmVhZGluZyBJRUVFLTEyODQgRGV2aWNlIElEIHN0cmluZyIsCisJCQl1c2JscC0+bWlub3IsIGVycik7CisJCXVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nWzBdID0gdXNibHAtPmRldmljZV9pZF9zdHJpbmdbMV0gPSAnXDAnOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBGaXJzdCB0d28gYnl0ZXMgYXJlIGxlbmd0aCBpbiBiaWctZW5kaWFuLgorCSAqIFRoZXkgY291bnQgdGhlbXNlbHZlcywgYW5kIHdlIGNvcHkgdGhlbSBpbnRvCisJICogdGhlIHVzZXIncyBidWZmZXIuICovCisJbGVuZ3RoID0gYmUxNl90b19jcHUoKigoX19iZTE2ICopdXNibHAtPmRldmljZV9pZF9zdHJpbmcpKTsKKwlpZiAobGVuZ3RoIDwgMikKKwkJbGVuZ3RoID0gMjsKKwllbHNlIGlmIChsZW5ndGggPj0gVVNCTFBfREVWSUNFX0lEX1NJWkUpCisJCWxlbmd0aCA9IFVTQkxQX0RFVklDRV9JRF9TSVpFIC0gMTsKKwl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZ1tsZW5ndGhdID0gJ1wwJzsKKworCWRiZygidXNibHAlZCBEZXZpY2UgSUQgc3RyaW5nIFtsZW49JWRdPVwiJXNcIiIsCisJCXVzYmxwLT5taW5vciwgbGVuZ3RoLCAmdXNibHAtPmRldmljZV9pZF9zdHJpbmdbMl0pOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgdXNibHBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYmxwX2NsYXNzKTsKKworCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYpIHsKKwkJZXJyKCJib2d1cyBkaXNjb25uZWN0Iik7CisJCUJVRyAoKTsKKwl9CisKKwlkb3duICgmdXNibHBfc2VtKTsKKwlkb3duICgmdXNibHAtPnNlbSk7CisJdXNibHAtPnByZXNlbnQgPSAwOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJdXNibHBfdW5saW5rX3VyYnModXNibHApOworCXVzYl9idWZmZXJfZnJlZSAodXNibHAtPmRldiwgVVNCTFBfQlVGX1NJWkUsCisJCQl1c2JscC0+d3JpdGVidWYsIHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfZG1hKTsKKwl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJdXNibHAtPnJlYWRidWYsIHVzYmxwLT5yZWFkdXJiLT50cmFuc2Zlcl9kbWEpOworCXVwICgmdXNibHAtPnNlbSk7CisKKwlpZiAoIXVzYmxwLT51c2VkKQorCQl1c2JscF9jbGVhbnVwICh1c2JscCk7CisJdXAgKCZ1c2JscF9zZW0pOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNibHBfaWRzIFtdID0geworCXsgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDEpIH0sCisJeyBVU0JfREVWSUNFX0lORk8oNywgMSwgMikgfSwKKwl7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAzKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDcsIDEsIDEpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oNywgMSwgMikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyg3LCAxLCAzKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYmxwX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JscF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYmxwIiwKKwkucHJvYmUgPQl1c2JscF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYmxwX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNibHBfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNibHBfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JscF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjogIiBEUklWRVJfREVTQyk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmxwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNibHBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNibHBfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JscF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworbW9kdWxlX3BhcmFtKHByb3RvX2JpYXMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhwcm90b19iaWFzLCAiRmF2b3VyaXRlIHByb3RvY29sIG51bWJlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOWZmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTAsMCArMSw5OSBAQAorIworIyBVU0IgQ29yZSBjb25maWd1cmF0aW9uCisjCitjb25maWcgVVNCX0RFQlVHCisJYm9vbCAiVVNCIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBVU0IgY29yZSAmIGh1YiBkcml2ZXJzIHRvIHByb2R1Y2UgYSBidW5jaAorCSAgb2YgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHN5c3RlbSBsb2cuIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgaGF2aW5nIGEKKwkgIHByb2JsZW0gd2l0aCBVU0Igc3VwcG9ydCBhbmQgd2FudCB0byBzZWUgbW9yZSBvZiB3aGF0IGlzIGdvaW5nIG9uLgorCitjb21tZW50ICJNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zIgorCWRlcGVuZHMgb24gVVNCCisKK2NvbmZpZyBVU0JfREVWSUNFRlMKKwlib29sICJVU0IgZGV2aWNlIGZpbGVzeXN0ZW0iCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSAoYW5kIHRvICIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0IiBpbiB0aGUgIkZpbGUKKwkgIHN5c3RlbXMiIHNlY3Rpb24sIGFib3ZlKSwgeW91IHdpbGwgZ2V0IGEgZmlsZSAvcHJvYy9idXMvdXNiL2RldmljZXMKKwkgIHdoaWNoIGxpc3RzIHRoZSBkZXZpY2VzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8geW91ciBVU0IgYnVzIG9yCisJICBidXNzZXMsIGFuZCBmb3IgZXZlcnkgY29ubmVjdGVkIGRldmljZSBhIGZpbGUgbmFtZWQKKwkgICIvcHJvYy9idXMvdXNiL3h4eC95eXkiLCB3aGVyZSB4eHggaXMgdGhlIGJ1cyBudW1iZXIgYW5kIHl5eSB0aGUKKwkgIGRldmljZSBudW1iZXI7IHRoZSBsYXR0ZXIgZmlsZXMgY2FuIGJlIHVzZWQgYnkgdXNlciBzcGFjZSBwcm9ncmFtcworCSAgdG8gdGFsayBkaXJlY3RseSB0byB0aGUgZGV2aWNlLiBUaGVzZSBmaWxlcyBhcmUgInZpcnR1YWwiLCBtZWFuaW5nCisJICB0aGV5IGFyZSBnZW5lcmF0ZWQgb24gdGhlIGZseSBhbmQgbm90IHN0b3JlZCBvbiB0aGUgaGFyZCBkcml2ZS4KKworCSAgWW91IG1heSBuZWVkIHRvIG1vdW50IHRoZSB1c2JmcyBmaWxlIHN5c3RlbSB0byBzZWUgdGhlIGZpbGVzLCB1c2UKKwkgIG1vdW50IC10IHVzYmZzIG5vbmUgL3Byb2MvYnVzL3VzYgorCisJICBGb3IgdGhlIGZvcm1hdCBvZiB0aGUgdmFyaW91cyAvcHJvYy9idXMvdXNiLyBmaWxlcywgcGxlYXNlIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0Pi4KKworCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gZGV2ZnMsIHRoZQorCSAgIi9kZXYgZmlsZSBzeXN0ZW0gc3VwcG9ydCIuCisKKwkgIE1vc3QgdXNlcnMgd2FudCB0byBzYXkgWSBoZXJlLgorCitjb25maWcgVVNCX0JBTkRXSURUSAorCWJvb2wgIkVuZm9yY2UgVVNCIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgVVNCIHN1YnN5c3RlbSBlbmZvcmNlcyBVU0IgYmFuZHdpZHRoCisJICBhbGxvY2F0aW9uIGFuZCB3aWxsIHByZXZlbnQgc29tZSBkZXZpY2Ugb3BlbnMgZnJvbSBzdWNjZWVkaW5nCisJICBpZiB0aGV5IHdvdWxkIGNhdXNlIFVTQiBiYW5kd2lkdGggdXNhZ2UgdG8gZ28gYWJvdmUgOTAlIG9mCisJICB0aGUgYnVzIGJhbmR3aWR0aC4KKworCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZXNlIGNvbmRpdGlvbnMgd2lsbCBjYXVzZSB3YXJuaW5nIG1lc3NhZ2VzCisJICBhYm91dCBVU0IgYmFuZHdpZHRoIHVzYWdlIHRvIGJlIGxvZ2dlZCBhbmQgc29tZSBkZXZpY2VzIG9yCisJICBkcml2ZXJzIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCisKK2NvbmZpZyBVU0JfRFlOQU1JQ19NSU5PUlMKKwlib29sICJEeW5hbWljIFVTQiBtaW5vciBhbGxvY2F0aW9uIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgVVNCIHN1YnN5c3RlbSB3aWxsIHVzZSBkeW5hbWljIG1pbm9yCisJICBhbGxvY2F0aW9uIGZvciBhbnkgZGV2aWNlIHRoYXQgdXNlcyB0aGUgVVNCIG1ham9yIG51bWJlci4KKwkgIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGhhdmUgbW9yZSB0aGFuIDE2IG9mIGEgc2luZ2xlIHR5cGUKKwkgIG9mIGRldmljZSAobGlrZSBVU0IgcHJpbnRlcnMpLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgorCitjb25maWcgVVNCX1NVU1BFTkQKKwlib29sICJVU0Igc3VzcGVuZC9yZXN1bWUgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgUE0gJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gdXNlIGRyaXZlciBjYWxscyBvciB0aGUgc3lzZnMKKwkgICJwb3dlci9zdGF0ZSIgZmlsZSB0byBzdXNwZW5kIG9yIHJlc3VtZSBpbmRpdmlkdWFsIFVTQgorCSAgcGVyaXBoZXJhbHMuICBUaGVyZSBhcmUgbWFueSByZWxhdGVkIGZlYXR1cmVzLCBzdWNoIGFzCisJICByZW1vdGUgd2FrZXVwIGFuZCBkcml2ZXItc3BlY2lmaWMgc3VzcGVuZCBwcm9jZXNzaW5nLCB0aGF0CisJICBtYXkgbm90IHlldCB3b3JrIGFzIGV4cGVjdGVkLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgorCisKK2NvbmZpZyBVU0JfT1RHCisJYm9vbAorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBVU0JfU1VTUEVORAorCWRlZmF1bHQgbgorCisKK2NvbmZpZyBVU0JfT1RHX1dISVRFTElTVAorCWJvb2wgIlJlbHkgb24gT1RHIFRhcmdldGVkIFBlcmlwaGVyYWxzIExpc3QiCisJZGVwZW5kcyBvbiBVU0JfT1RHCisJZGVmYXVsdCB5CisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSAib3RnX3doaXRlbGlzdC5oIiBmaWxlIHdpbGwgYmUgdXNlZCBhcyBhCisJICBwcm9kdWN0IHdoaXRlbGlzdCwgc28gVVNCIHBlcmlwaGVyYWxzIG5vdCBsaXN0ZWQgdGhlcmUgd2lsbCBiZQorCSAgcmVqZWN0ZWQgZHVyaW5nIGVudW1lcmF0aW9uLiAgVGhpcyBiZWhhdmlvciBpcyByZXF1aXJlZCBieSB0aGUKKwkgIFVTQiBPVEcgc3BlY2lmaWNhdGlvbiBmb3IgYWxsIGRldmljZXMgbm90IG9uIHlvdXIgcHJvZHVjdCdzCisJICAiVGFyZ2V0ZWQgUGVyaXBoZXJhbHMgTGlzdCIuCisKKwkgIE90aGVyd2lzZSwgcGVyaXBoZXJhbHMgbm90IGxpc3RlZCB0aGVyZSB3aWxsIG9ubHkgZ2VuZXJhdGUgYQorCSAgd2FybmluZyBhbmQgZW51bWVyYXRpb24gd2lsbCBjb250aW51ZS4gIFRoYXQncyBtb3JlIGxpa2Ugd2hhdAorCSAgbm9ybWFsIExpbnV4LVVTQiBob3N0cyBkbyAob3RoZXIgdGhhbiB0aGUgd2FybmluZyksIGFuZCBpcworCSAgY29udmVuaWVudCBmb3IgbWFueSBzdGFnZXMgb2YgcHJvZHVjdCBkZXZlbG9wbWVudC4KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZThjMzc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgQ29yZSBmaWxlcyBhbmQgZmlsZXN5c3RlbQorIworCit1c2Jjb3JlLW9ianMJOj0gdXNiLm8gaHViLm8gaGNkLm8gdXJiLm8gbWVzc2FnZS5vIFwKKwkJCWNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vCisKK2lmZXEgKCQoQ09ORklHX1BDSSkseSkKKwl1c2Jjb3JlLW9ianMJKz0gaGNkLXBjaS5vCitlbmRpZgorCitpZmVxICgkKENPTkZJR19VU0JfREVWSUNFRlMpLHkpCisJdXNiY29yZS1vYmpzCSs9IGRldmlvLm8gaW5vZGUubyBkZXZpY2VzLm8KK2VuZGlmCisKK29iai0kKENPTkZJR19VU0IpCSs9IHVzYmNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4MjdkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBETUEgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIGZyYW1ld29yayBsZXZlbCBIQ0QgY29kZSAoaGNfZHJpdmVyKQorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gcGx1Z3MgaW4gdGhyb3VnaCBnZW5lcmljICJ1c2JfYnVzIiBsZXZlbCBtZXRob2RzLAorICogYW5kIHNob3VsZCB3b3JrIHdpdGggYWxsIFVTQiBjb250cm9sbGVycywgcmVnYXJkbGVzIG9mIGJ1cyB0eXBlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgImhjZC5oIgorCisKKy8qCisgKiBETUEtQ29oZXJlbnQgQnVmZmVycworICovCisKKy8qIEZJWE1FIHR1bmUgdGhlc2UgYmFzZWQgb24gcG9vbCBzdGF0aXN0aWNzIC4uLiAqLworc3RhdGljIGNvbnN0IHNpemVfdAlwb29sX21heCBbSENEX0JVRkZFUl9QT09MU10gPSB7CisJLyogcGxhdGZvcm1zIHdpdGhvdXQgZG1hLWZyaWVuZGx5IGNhY2hlcyBtaWdodCBuZWVkIHRvCisJICogcHJldmVudCBjYWNoZWxpbmUgc2hhcmluZy4uLgorCSAqLworCTMyLAorCTEyOCwKKwk1MTIsCisJUEFHRV9TSVpFIC8gMgorCS8qIGJpZ2dlciAtLT4gYWxsb2NhdGUgcGFnZXMgKi8KK307CisKKworLyogU0VUVVAgcHJpbWl0aXZlcyAqLworCisvKioKKyAqIGhjZF9idWZmZXJfY3JlYXRlIC0gaW5pdGlhbGl6ZSBidWZmZXIgcG9vbHMKKyAqIEBoY2Q6IHRoZSBidXMgd2hvc2UgYnVmZmVyIHBvb2xzIGFyZSB0byBiZSBpbml0aWFsaXplZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQ2FsbCB0aGlzIGFzIHBhcnQgb2YgaW5pdGlhbGl6aW5nIGEgaG9zdCBjb250cm9sbGVyIHRoYXQgdXNlcyB0aGUgZG1hCisgKiBtZW1vcnkgYWxsb2NhdG9ycy4gIEl0IGluaXRpYWxpemVzIHNvbWUgcG9vbHMgb2YgZG1hLWNvaGVyZW50IG1lbW9yeSB0aGF0CisgKiB3aWxsIGJlIHNoYXJlZCBieSBhbGwgZHJpdmVycyB1c2luZyB0aGF0IGNvbnRyb2xsZXIsIG9yIHJldHVybnMgYSBuZWdhdGl2ZQorICogZXJybm8gdmFsdWUgb24gZXJyb3IuCisgKgorICogQ2FsbCBoY2RfYnVmZmVyX2Rlc3Ryb3koKSB0byBjbGVhbiB1cCBhZnRlciB1c2luZyB0aG9zZSBwb29scy4KKyAqLworaW50IGhjZF9idWZmZXJfY3JlYXRlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWNoYXIJCW5hbWUgWzE2XTsKKwlpbnQgCQlpLCBzaXplOworCisJZm9yIChpID0gMDsgaSA8IEhDRF9CVUZGRVJfUE9PTFM7IGkrKykgeyAKKwkJaWYgKCEoc2l6ZSA9IHBvb2xfbWF4IFtpXSkpCisJCQljb250aW51ZTsKKwkJc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiYnVmZmVyLSVkIiwgc2l6ZSk7CisJCWhjZC0+cG9vbCBbaV0gPSBkbWFfcG9vbF9jcmVhdGUgKG5hbWUsIGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCXNpemUsIHNpemUsIDApOworCQlpZiAoIWhjZC0+cG9vbCBbaV0pIHsKKwkJCWhjZF9idWZmZXJfZGVzdHJveSAoaGNkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qKgorICogaGNkX2J1ZmZlcl9kZXN0cm95IC0gZGVhbGxvY2F0ZSBidWZmZXIgcG9vbHMKKyAqIEBoY2Q6IHRoZSBidXMgd2hvc2UgYnVmZmVyIHBvb2xzIGFyZSB0byBiZSBkZXN0cm95ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFRoaXMgZnJlZXMgdGhlIGJ1ZmZlciBwb29scyBjcmVhdGVkIGJ5IGhjZF9idWZmZXJfY3JlYXRlKCkuCisgKi8KK3ZvaWQgaGNkX2J1ZmZlcl9kZXN0cm95IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWludAkJaTsKKworCWZvciAoaSA9IDA7IGkgPCBIQ0RfQlVGRkVSX1BPT0xTOyBpKyspIHsgCisJCXN0cnVjdCBkbWFfcG9vbAkJKnBvb2wgPSBoY2QtPnBvb2wgW2ldOworCQlpZiAocG9vbCkgeworCQkJZG1hX3Bvb2xfZGVzdHJveSAocG9vbCk7CisJCQloY2QtPnBvb2xbaV0gPSBOVUxMOworCQl9CisJfQorfQorCisKKy8qIHNvbWV0aW1lcyBhbGxvYy9mcmVlIGNvdWxkIHVzZSBrbWFsbG9jIHdpdGggU0xBQl9ETUEsIGZvcgorICogYmV0dGVyIHNoYXJpbmcgYW5kIHRvIGxldmVyYWdlIG1tL3NsYWIuYyBpbnRlbGxpZ2VuY2UuCisgKi8KKwordm9pZCAqaGNkX2J1ZmZlcl9hbGxvYyAoCisJc3RydWN0IHVzYl9idXMgCQkqYnVzLAorCXNpemVfdAkJCXNpemUsCisJaW50CQkJbWVtX2ZsYWdzLAorCWRtYV9hZGRyX3QJCSpkbWEKKykKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1cy0+aGNwcml2OworCWludCAJCQlpOworCisJLyogc29tZSBVU0IgaG9zdHMganVzdCB1c2UgUElPICovCisJaWYgKCFidXMtPmNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCSpkbWEgPSB+KGRtYV9hZGRyX3QpIDA7CisJCXJldHVybiBrbWFsbG9jIChzaXplLCBtZW1fZmxhZ3MpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBIQ0RfQlVGRkVSX1BPT0xTOyBpKyspIHsKKwkJaWYgKHNpemUgPD0gcG9vbF9tYXggW2ldKQorCQkJcmV0dXJuIGRtYV9wb29sX2FsbG9jIChoY2QtPnBvb2wgW2ldLCBtZW1fZmxhZ3MsIGRtYSk7CisJfQorCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQgKGhjZC0+c2VsZi5jb250cm9sbGVyLCBzaXplLCBkbWEsIDApOworfQorCit2b2lkIGhjZF9idWZmZXJfZnJlZSAoCisJc3RydWN0IHVzYl9idXMgCQkqYnVzLAorCXNpemVfdAkJCXNpemUsCisJdm9pZCAJCQkqYWRkciwKKwlkbWFfYWRkcl90CQlkbWEKKykKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1cy0+aGNwcml2OworCWludCAJCQlpOworCisJaWYgKCFhZGRyKQorCQlyZXR1cm47CisKKwlpZiAoIWJ1cy0+Y29udHJvbGxlci0+ZG1hX21hc2spIHsKKwkJa2ZyZWUgKGFkZHIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IEhDRF9CVUZGRVJfUE9PTFM7IGkrKykgeworCQlpZiAoc2l6ZSA8PSBwb29sX21heCBbaV0pIHsKKwkJCWRtYV9wb29sX2ZyZWUgKGhjZC0+cG9vbCBbaV0sIGFkZHIsIGRtYSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZG1hX2ZyZWVfY29oZXJlbnQgKGhjZC0+c2VsZi5jb250cm9sbGVyLCBzaXplLCBhZGRyLCBkbWEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwOTJiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKQEAgLTAsMCArMSw1MzQgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKworI2RlZmluZSBVU0JfTUFYQUxUU0VUVElORwkJMTI4CS8qIEhhcmQgbGltaXQgKi8KKyNkZWZpbmUgVVNCX01BWEVORFBPSU5UUwkJMzAJLyogSGFyZCBsaW1pdCAqLworCisjZGVmaW5lIFVTQl9NQVhDT05GSUcJCQk4CS8qIEFyYml0cmFyeSBsaW1pdCAqLworCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGx1cmFsKGludCBuKQoreworCXJldHVybiAobiA9PSAxID8gIiIgOiAicyIpOworfQorCitzdGF0aWMgaW50IGZpbmRfbmV4dF9kZXNjcmlwdG9yKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsCisgICAgaW50IGR0MSwgaW50IGR0MiwgaW50ICpudW1fc2tpcHBlZCkKK3sKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCisJLyogRmluZCB0aGUgbmV4dCBkZXNjcmlwdG9yIG9mIHR5cGUgZHQxIG9yIGR0MiAqLworCXdoaWxlIChzaXplID4gMCkgeworCQloID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgYnVmZmVyOworCQlpZiAoaC0+YkRlc2NyaXB0b3JUeXBlID09IGR0MSB8fCBoLT5iRGVzY3JpcHRvclR5cGUgPT0gZHQyKQorCQkJYnJlYWs7CisJCWJ1ZmZlciArPSBoLT5iTGVuZ3RoOworCQlzaXplIC09IGgtPmJMZW5ndGg7CisJCSsrbjsKKwl9CisKKwkvKiBTdG9yZSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHNraXBwZWQgYW5kIHJldHVybiB0aGUKKwkgKiBudW1iZXIgb2YgYnl0ZXMgc2tpcHBlZCAqLworCWlmIChudW1fc2tpcHBlZCkKKwkJKm51bV9za2lwcGVkID0gbjsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMDsKK30KKworc3RhdGljIGludCB1c2JfcGFyc2VfZW5kcG9pbnQoc3RydWN0IGRldmljZSAqZGRldiwgaW50IGNmZ25vLCBpbnQgaW51bSwKKyAgICBpbnQgYXNudW0sIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmcCwgaW50IG51bV9lcCwKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjAgPSBidWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQ7CisJaW50IG4sIGk7CisKKwlkID0gKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqKSBidWZmZXI7CisJYnVmZmVyICs9IGQtPmJMZW5ndGg7CisJc2l6ZSAtPSBkLT5iTGVuZ3RoOworCisJaWYgKGQtPmJMZW5ndGggPj0gVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUpCisJCW4gPSBVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRTsKKwllbHNlIGlmIChkLT5iTGVuZ3RoID49IFVTQl9EVF9FTkRQT0lOVF9TSVpFKQorCQluID0gVVNCX0RUX0VORFBPSU5UX1NJWkU7CisJZWxzZSB7CisJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgaGFzIGFuICIKKwkJICAgICJpbnZhbGlkIGVuZHBvaW50IGRlc2NyaXB0b3Igb2YgbGVuZ3RoICVkLCBza2lwcGluZ1xuIiwKKwkJICAgIGNmZ25vLCBpbnVtLCBhc251bSwgZC0+Ykxlbmd0aCk7CisJCWdvdG8gc2tpcF90b19uZXh0X2VuZHBvaW50X29yX2ludGVyZmFjZV9kZXNjcmlwdG9yOworCX0KKworCWkgPSBkLT5iRW5kcG9pbnRBZGRyZXNzICYgflVTQl9FTkRQT0lOVF9ESVJfTUFTSzsKKwlpZiAoaSA+PSAxNiB8fCBpID09IDApIHsKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBoYXMgYW4gIgorCQkgICAgImludmFsaWQgZW5kcG9pbnQgd2l0aCBhZGRyZXNzIDB4JVgsIHNraXBwaW5nXG4iLAorCQkgICAgY2Znbm8sIGludW0sIGFzbnVtLCBkLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJZ290byBza2lwX3RvX25leHRfZW5kcG9pbnRfb3JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisJfQorCisJLyogT25seSBzdG9yZSBhcyBtYW55IGVuZHBvaW50cyBhcyB3ZSBoYXZlIHJvb20gZm9yICovCisJaWYgKGlmcC0+ZGVzYy5iTnVtRW5kcG9pbnRzID49IG51bV9lcCkKKwkJZ290byBza2lwX3RvX25leHRfZW5kcG9pbnRfb3JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisKKwllbmRwb2ludCA9ICZpZnAtPmVuZHBvaW50W2lmcC0+ZGVzYy5iTnVtRW5kcG9pbnRzXTsKKwkrK2lmcC0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCisJbWVtY3B5KCZlbmRwb2ludC0+ZGVzYywgZCwgbik7CisJSU5JVF9MSVNUX0hFQUQoJmVuZHBvaW50LT51cmJfbGlzdCk7CisKKwkvKiBTa2lwIG92ZXIgYW55IENsYXNzIFNwZWNpZmljIG9yIFZlbmRvciBTcGVjaWZpYyBkZXNjcmlwdG9yczsKKwkgKiBmaW5kIHRoZSBuZXh0IGVuZHBvaW50IG9yIGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJZW5kcG9pbnQtPmV4dHJhID0gYnVmZmVyOworCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9FTkRQT0lOVCwKKwkgICAgVVNCX0RUX0lOVEVSRkFDRSwgJm4pOworCWVuZHBvaW50LT5leHRyYWxlbiA9IGk7CisJaWYgKG4gPiAwKQorCQlkZXZfZGJnKGRkZXYsICJza2lwcGVkICVkIGRlc2NyaXB0b3IlcyBhZnRlciAlc1xuIiwKKwkJICAgIG4sIHBsdXJhbChuKSwgImVuZHBvaW50Iik7CisJcmV0dXJuIGJ1ZmZlciAtIGJ1ZmZlcjAgKyBpOworCitza2lwX3RvX25leHRfZW5kcG9pbnRfb3JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I6CisJaSA9IGZpbmRfbmV4dF9kZXNjcmlwdG9yKGJ1ZmZlciwgc2l6ZSwgVVNCX0RUX0VORFBPSU5ULAorCSAgICBVU0JfRFRfSU5URVJGQUNFLCBOVUxMKTsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMCArIGk7Cit9CisKK3ZvaWQgdXNiX3JlbGVhc2VfaW50ZXJmYWNlX2NhY2hlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjID0gcmVmX3RvX3VzYl9pbnRlcmZhY2VfY2FjaGUocmVmKTsKKwlpbnQgajsKKworCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7IGorKykKKwkJa2ZyZWUoaW50ZmMtPmFsdHNldHRpbmdbal0uZW5kcG9pbnQpOworCWtmcmVlKGludGZjKTsKK30KKworc3RhdGljIGludCB1c2JfcGFyc2VfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRkZXYsIGludCBjZmdubywKKyAgICBzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsCisgICAgdTggaW51bXNbXSwgdTggbmFsdHNbXSkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmQ7CisJaW50IGludW0sIGFzbnVtOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYzsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJaW50IGksIG47CisJaW50IGxlbiwgcmV0dmFsOworCWludCBudW1fZXAsIG51bV9lcF9vcmlnOworCisJZCA9IChzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICopIGJ1ZmZlcjsKKwlidWZmZXIgKz0gZC0+Ykxlbmd0aDsKKwlzaXplIC09IGQtPmJMZW5ndGg7CisKKwlpZiAoZC0+Ykxlbmd0aCA8IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSkKKwkJZ290byBza2lwX3RvX25leHRfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisKKwkvKiBXaGljaCBpbnRlcmZhY2UgZW50cnkgaXMgdGhpcz8gKi8KKwlpbnRmYyA9IE5VTEw7CisJaW51bSA9IGQtPmJJbnRlcmZhY2VOdW1iZXI7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgKytpKSB7CisJCWlmIChpbnVtc1tpXSA9PSBpbnVtKSB7CisJCQlpbnRmYyA9IGNvbmZpZy0+aW50Zl9jYWNoZVtpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghaW50ZmMgfHwgaW50ZmMtPm51bV9hbHRzZXR0aW5nID49IG5hbHRzW2ldKQorCQlnb3RvIHNraXBfdG9fbmV4dF9pbnRlcmZhY2VfZGVzY3JpcHRvcjsKKworCS8qIENoZWNrIGZvciBkdXBsaWNhdGUgYWx0c2V0dGluZyBlbnRyaWVzICovCisJYXNudW0gPSBkLT5iQWx0ZXJuYXRlU2V0dGluZzsKKwlmb3IgKChpID0gMCwgYWx0ID0gJmludGZjLT5hbHRzZXR0aW5nWzBdKTsKKwkgICAgICBpIDwgaW50ZmMtPm51bV9hbHRzZXR0aW5nOworCSAgICAgKCsraSwgKythbHQpKSB7CisJCWlmIChhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgPT0gYXNudW0pIHsKKwkJCWRldl93YXJuKGRkZXYsICJEdXBsaWNhdGUgZGVzY3JpcHRvciBmb3IgY29uZmlnICVkICIKKwkJCSAgICAiaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQsIHNraXBwaW5nXG4iLAorCQkJICAgIGNmZ25vLCBpbnVtLCBhc251bSk7CisJCQlnb3RvIHNraXBfdG9fbmV4dF9pbnRlcmZhY2VfZGVzY3JpcHRvcjsKKwkJfQorCX0KKworCSsraW50ZmMtPm51bV9hbHRzZXR0aW5nOworCW1lbWNweSgmYWx0LT5kZXNjLCBkLCBVU0JfRFRfSU5URVJGQUNFX1NJWkUpOworCisJLyogU2tpcCBvdmVyIGFueSBDbGFzcyBTcGVjaWZpYyBvciBWZW5kb3IgU3BlY2lmaWMgZGVzY3JpcHRvcnM7CisJICogZmluZCB0aGUgZmlyc3QgZW5kcG9pbnQgb3IgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwlhbHQtPmV4dHJhID0gYnVmZmVyOworCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9FTkRQT0lOVCwKKwkgICAgVVNCX0RUX0lOVEVSRkFDRSwgJm4pOworCWFsdC0+ZXh0cmFsZW4gPSBpOworCWlmIChuID4gMCkKKwkJZGV2X2RiZyhkZGV2LCAic2tpcHBlZCAlZCBkZXNjcmlwdG9yJXMgYWZ0ZXIgJXNcbiIsCisJCSAgICBuLCBwbHVyYWwobiksICJpbnRlcmZhY2UiKTsKKwlidWZmZXIgKz0gaTsKKwlzaXplIC09IGk7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHJpZ2h0KD8pIG51bWJlciBvZiBlbmRwb2ludHMgKi8KKwludW1fZXAgPSBudW1fZXBfb3JpZyA9IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCWFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzID0gMDsJCS8vIFVzZSBhcyBhIGNvdW50ZXIKKwlpZiAobnVtX2VwID4gVVNCX01BWEVORFBPSU5UUykgeworCQlkZXZfd2FybihkZGV2LCAidG9vIG1hbnkgZW5kcG9pbnRzIGZvciBjb25maWcgJWQgaW50ZXJmYWNlICVkICIKKwkJICAgICJhbHRzZXR0aW5nICVkOiAlZCwgdXNpbmcgbWF4aW11bSBhbGxvd2VkOiAlZFxuIiwKKwkJICAgIGNmZ25vLCBpbnVtLCBhc251bSwgbnVtX2VwLCBVU0JfTUFYRU5EUE9JTlRTKTsKKwkJbnVtX2VwID0gVVNCX01BWEVORFBPSU5UUzsKKwl9CisKKwlsZW4gPSBzaXplb2Yoc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50KSAqIG51bV9lcDsKKwlhbHQtPmVuZHBvaW50ID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYWx0LT5lbmRwb2ludCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGFsdC0+ZW5kcG9pbnQsIDAsIGxlbik7CisKKwkvKiBQYXJzZSBhbGwgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzICovCisJbiA9IDA7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWlmICgoKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgYnVmZmVyKS0+YkRlc2NyaXB0b3JUeXBlCisJCSAgICAgPT0gVVNCX0RUX0lOVEVSRkFDRSkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSB1c2JfcGFyc2VfZW5kcG9pbnQoZGRldiwgY2Znbm8sIGludW0sIGFzbnVtLCBhbHQsCisJCSAgICBudW1fZXAsIGJ1ZmZlciwgc2l6ZSk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJKytuOworCisJCWJ1ZmZlciArPSByZXR2YWw7CisJCXNpemUgLT0gcmV0dmFsOworCX0KKworCWlmIChuICE9IG51bV9lcF9vcmlnKQorCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIGhhcyAlZCAiCisJCSAgICAiZW5kcG9pbnQgZGVzY3JpcHRvciVzLCBkaWZmZXJlbnQgZnJvbSB0aGUgaW50ZXJmYWNlICIKKwkJICAgICJkZXNjcmlwdG9yJ3MgdmFsdWU6ICVkXG4iLAorCQkgICAgY2Znbm8sIGludW0sIGFzbnVtLCBuLCBwbHVyYWwobiksIG51bV9lcF9vcmlnKTsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMDsKKworc2tpcF90b19uZXh0X2ludGVyZmFjZV9kZXNjcmlwdG9yOgorCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9JTlRFUkZBQ0UsCisJICAgIFVTQl9EVF9JTlRFUkZBQ0UsIE5VTEwpOworCXJldHVybiBidWZmZXIgLSBidWZmZXIwICsgaTsKK30KKworc3RhdGljIGludCB1c2JfcGFyc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZGV2LCBpbnQgY2ZnaWR4LAorICAgIHN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCWludCBjZmdubzsKKwlpbnQgbmludGYsIG5pbnRmX29yaWc7CisJaW50IGksIGosIG47CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjI7CisJaW50IHNpemUyOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhlYWRlcjsKKwlpbnQgbGVuLCByZXR2YWw7CisJdTggaW51bXNbVVNCX01BWElOVEVSRkFDRVNdLCBuYWx0c1tVU0JfTUFYSU5URVJGQUNFU107CisKKwltZW1jcHkoJmNvbmZpZy0+ZGVzYywgYnVmZmVyLCBVU0JfRFRfQ09ORklHX1NJWkUpOworCWlmIChjb25maWctPmRlc2MuYkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9DT05GSUcgfHwKKwkgICAgY29uZmlnLT5kZXNjLmJMZW5ndGggPCBVU0JfRFRfQ09ORklHX1NJWkUpIHsKKwkJZGV2X2VycihkZGV2LCAiaW52YWxpZCBkZXNjcmlwdG9yIGZvciBjb25maWcgaW5kZXggJWQ6ICIKKwkJICAgICJ0eXBlID0gMHglWCwgbGVuZ3RoID0gJWRcbiIsIGNmZ2lkeCwKKwkJICAgIGNvbmZpZy0+ZGVzYy5iRGVzY3JpcHRvclR5cGUsIGNvbmZpZy0+ZGVzYy5iTGVuZ3RoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNmZ25vID0gY29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisKKwlidWZmZXIgKz0gY29uZmlnLT5kZXNjLmJMZW5ndGg7CisJc2l6ZSAtPSBjb25maWctPmRlc2MuYkxlbmd0aDsKKworCW5pbnRmID0gbmludGZfb3JpZyA9IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwlpZiAobmludGYgPiBVU0JfTUFYSU5URVJGQUNFUykgeworCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGhhcyB0b28gbWFueSBpbnRlcmZhY2VzOiAlZCwgIgorCQkgICAgInVzaW5nIG1heGltdW0gYWxsb3dlZDogJWRcbiIsCisJCSAgICBjZmdubywgbmludGYsIFVTQl9NQVhJTlRFUkZBQ0VTKTsKKwkJbmludGYgPSBVU0JfTUFYSU5URVJGQUNFUzsKKwl9CisKKwkvKiBHbyB0aHJvdWdoIHRoZSBkZXNjcmlwdG9ycywgY2hlY2tpbmcgdGhlaXIgbGVuZ3RoIGFuZCBjb3VudGluZyB0aGUKKwkgKiBudW1iZXIgb2YgYWx0c2V0dGluZ3MgZm9yIGVhY2ggaW50ZXJmYWNlICovCisJbiA9IDA7CisJZm9yICgoYnVmZmVyMiA9IGJ1ZmZlciwgc2l6ZTIgPSBzaXplKTsKKwkgICAgICBzaXplMiA+IDA7CisJICAgICAoYnVmZmVyMiArPSBoZWFkZXItPmJMZW5ndGgsIHNpemUyIC09IGhlYWRlci0+Ykxlbmd0aCkpIHsKKworCQlpZiAoc2l6ZTIgPCBzaXplb2Yoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcikpIHsKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgZGVzY3JpcHRvciBoYXMgJWQgZXhjZXNzICIKKwkJCSAgICAiYnl0ZSVzLCBpZ25vcmluZ1xuIiwKKwkJCSAgICBjZmdubywgc2l6ZTIsIHBsdXJhbChzaXplMikpOworCQkJYnJlYWs7CisJCX0KKworCQloZWFkZXIgPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSBidWZmZXIyOworCQlpZiAoKGhlYWRlci0+Ykxlbmd0aCA+IHNpemUyKSB8fCAoaGVhZGVyLT5iTGVuZ3RoIDwgMikpIHsKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIGFuIGludmFsaWQgZGVzY3JpcHRvciAiCisJCQkgICAgIm9mIGxlbmd0aCAlZCwgc2tpcHBpbmcgcmVtYWluZGVyIG9mIHRoZSBjb25maWdcbiIsCisJCQkgICAgY2Znbm8sIGhlYWRlci0+Ykxlbmd0aCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChoZWFkZXItPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfSU5URVJGQUNFKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkOworCQkJaW50IGludW07CisKKwkJCWQgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqKSBoZWFkZXI7CisJCQlpZiAoZC0+Ykxlbmd0aCA8IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSkgeworCQkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIGFuIGludmFsaWQgIgorCQkJCSAgICAiaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2YgbGVuZ3RoICVkLCAiCisJCQkJICAgICJza2lwcGluZ1xuIiwgY2Znbm8sIGQtPmJMZW5ndGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbnVtID0gZC0+YkludGVyZmFjZU51bWJlcjsKKwkJCWlmIChpbnVtID49IG5pbnRmX29yaWcpCisJCQkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgYW4gaW52YWxpZCAiCisJCQkJICAgICJpbnRlcmZhY2UgbnVtYmVyOiAlZCBidXQgbWF4IGlzICVkXG4iLAorCQkJCSAgICBjZmdubywgaW51bSwgbmludGZfb3JpZyAtIDEpOworCisJCQkvKiBIYXZlIHdlIGFscmVhZHkgZW5jb3VudGVyZWQgdGhpcyBpbnRlcmZhY2U/CisJCQkgKiBDb3VudCBpdHMgYWx0c2V0dGluZ3MgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKKwkJCQlpZiAoaW51bXNbaV0gPT0gaW51bSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaSA8IG4pIHsKKwkJCQlpZiAobmFsdHNbaV0gPCAyNTUpCisJCQkJCSsrbmFsdHNbaV07CisJCQl9IGVsc2UgaWYgKG4gPCBVU0JfTUFYSU5URVJGQUNFUykgeworCQkJCWludW1zW25dID0gaW51bTsKKwkJCQluYWx0c1tuXSA9IDE7CisJCQkJKytuOworCQkJfQorCisJCX0gZWxzZSBpZiAoaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0RFVklDRSB8fAorCQkJICAgIGhlYWRlci0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DT05GSUcpCisJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGNvbnRhaW5zIGFuIHVuZXhwZWN0ZWQgIgorCQkJICAgICJkZXNjcmlwdG9yIG9mIHR5cGUgMHglWCwgc2tpcHBpbmdcbiIsCisJCQkgICAgY2Znbm8sIGhlYWRlci0+YkRlc2NyaXB0b3JUeXBlKTsKKworCX0JLyogZm9yICgoYnVmZmVyMiA9IGJ1ZmZlciwgc2l6ZTIgPSBzaXplKTsgLi4uKSAqLworCXNpemUgPSBidWZmZXIyIC0gYnVmZmVyOworCWNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGggPSBjcHVfdG9fbGUxNihidWZmZXIyIC0gYnVmZmVyMCk7CisKKwlpZiAobiAhPSBuaW50ZikKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgJWQgaW50ZXJmYWNlJXMsIGRpZmZlcmVudCBmcm9tICIKKwkJICAgICJ0aGUgZGVzY3JpcHRvcidzIHZhbHVlOiAlZFxuIiwKKwkJICAgIGNmZ25vLCBuLCBwbHVyYWwobiksIG5pbnRmX29yaWcpOworCWVsc2UgaWYgKG4gPT0gMCkKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgbm8gaW50ZXJmYWNlcz9cbiIsIGNmZ25vKTsKKwljb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgPSBuaW50ZiA9IG47CisKKwkvKiBDaGVjayBmb3IgbWlzc2luZyBpbnRlcmZhY2UgbnVtYmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBuaW50ZjsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBuaW50ZjsgKytqKSB7CisJCQlpZiAoaW51bXNbal0gPT0gaSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaiA+PSBuaW50ZikKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIG5vIGludGVyZmFjZSBudW1iZXIgIgorCQkJICAgICIlZFxuIiwgY2Znbm8sIGkpOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSB1c2JfaW50ZXJmYWNlX2NhY2hlcyBhbmQgYWx0c2V0dGluZyBhcnJheXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQlqID0gbmFsdHNbaV07CisJCWlmIChqID4gVVNCX01BWEFMVFNFVFRJTkcpIHsKKwkJCWRldl93YXJuKGRkZXYsICJ0b28gbWFueSBhbHRlcm5hdGUgc2V0dGluZ3MgZm9yICIKKwkJCSAgICAiY29uZmlnICVkIGludGVyZmFjZSAlZDogJWQsICIKKwkJCSAgICAidXNpbmcgbWF4aW11bSBhbGxvd2VkOiAlZFxuIiwKKwkJCSAgICBjZmdubywgaW51bXNbaV0sIGosIFVTQl9NQVhBTFRTRVRUSU5HKTsKKwkJCW5hbHRzW2ldID0gaiA9IFVTQl9NQVhBTFRTRVRUSU5HOworCQl9CisKKwkJbGVuID0gc2l6ZW9mKCppbnRmYykgKyBzaXplb2Yoc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSkgKiBqOworCQljb25maWctPmludGZfY2FjaGVbaV0gPSBpbnRmYyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpbnRmYykKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1zZXQoaW50ZmMsIDAsIGxlbik7CisJCWtyZWZfaW5pdCgmaW50ZmMtPnJlZik7CisJfQorCisJLyogU2tpcCBvdmVyIGFueSBDbGFzcyBTcGVjaWZpYyBvciBWZW5kb3IgU3BlY2lmaWMgZGVzY3JpcHRvcnM7CisJICogZmluZCB0aGUgZmlyc3QgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwljb25maWctPmV4dHJhID0gYnVmZmVyOworCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9JTlRFUkZBQ0UsCisJICAgIFVTQl9EVF9JTlRFUkZBQ0UsICZuKTsKKwljb25maWctPmV4dHJhbGVuID0gaTsKKwlpZiAobiA+IDApCisJCWRldl9kYmcoZGRldiwgInNraXBwZWQgJWQgZGVzY3JpcHRvciVzIGFmdGVyICVzXG4iLAorCQkgICAgbiwgcGx1cmFsKG4pLCAiY29uZmlndXJhdGlvbiIpOworCWJ1ZmZlciArPSBpOworCXNpemUgLT0gaTsKKworCS8qIFBhcnNlIGFsbCB0aGUgaW50ZXJmYWNlL2FsdHNldHRpbmcgZGVzY3JpcHRvcnMgKi8KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcmV0dmFsID0gdXNiX3BhcnNlX2ludGVyZmFjZShkZGV2LCBjZmdubywgY29uZmlnLAorCQkgICAgYnVmZmVyLCBzaXplLCBpbnVtcywgbmFsdHMpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJYnVmZmVyICs9IHJldHZhbDsKKwkJc2l6ZSAtPSByZXR2YWw7CisJfQorCisJLyogQ2hlY2sgZm9yIG1pc3NpbmcgYWx0c2V0dGluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQlpbnRmYyA9IGNvbmZpZy0+aW50Zl9jYWNoZVtpXTsKKwkJZm9yIChqID0gMDsgaiA8IGludGZjLT5udW1fYWx0c2V0dGluZzsgKytqKSB7CisJCQlmb3IgKG4gPSAwOyBuIDwgaW50ZmMtPm51bV9hbHRzZXR0aW5nOyArK24pIHsKKwkJCQlpZiAoaW50ZmMtPmFsdHNldHRpbmdbbl0uZGVzYy4KKwkJCQkgICAgYkFsdGVybmF0ZVNldHRpbmcgPT0gaikKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobiA+PSBpbnRmYy0+bnVtX2FsdHNldHRpbmcpCisJCQkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQgaGFzIG5vICIKKwkJCQkgICAgImFsdHNldHRpbmcgJWRcbiIsIGNmZ25vLCBpbnVtc1tpXSwgaik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gaHViLW9ubHkhISAuLi4gYW5kIG9ubHkgZXhwb3J0ZWQgZm9yIHJlc2V0L3JlaW5pdCBwYXRoLgorLy8gb3RoZXJ3aXNlIHVzZWQgaW50ZXJuYWxseSBvbiBkaXNjb25uZWN0L2Rlc3Ryb3kgcGF0aAordm9pZCB1c2JfZGVzdHJveV9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGMsIGk7CisKKwlpZiAoIWRldi0+Y29uZmlnKQorCQlyZXR1cm47CisKKwlpZiAoZGV2LT5yYXdkZXNjcmlwdG9ycykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKQorCQkJa2ZyZWUoZGV2LT5yYXdkZXNjcmlwdG9yc1tpXSk7CisKKwkJa2ZyZWUoZGV2LT5yYXdkZXNjcmlwdG9ycyk7CisJCWRldi0+cmF3ZGVzY3JpcHRvcnMgPSBOVUxMOworCX0KKworCWZvciAoYyA9IDA7IGMgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBjKyspIHsKKwkJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY2YgPSAmZGV2LT5jb25maWdbY107CisKKwkJa2ZyZWUoY2YtPnN0cmluZyk7CisJCWNmLT5zdHJpbmcgPSBOVUxMOworCisJCWZvciAoaSA9IDA7IGkgPCBjZi0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlpZiAoY2YtPmludGZfY2FjaGVbaV0pCisJCQkJa3JlZl9wdXQoJmNmLT5pbnRmX2NhY2hlW2ldLT5yZWYsIAorCQkJCQkgIHVzYl9yZWxlYXNlX2ludGVyZmFjZV9jYWNoZSk7CisJCX0KKwl9CisJa2ZyZWUoZGV2LT5jb25maWcpOworCWRldi0+Y29uZmlnID0gTlVMTDsKK30KKworCisvLyBodWItb25seSEhIC4uLiBhbmQgb25seSBpbiByZXNldCBwYXRoLCBvciB1c2JfbmV3X2RldmljZSgpCisvLyAodXNlZCBieSByZWFsIGh1YnMgYW5kIHZpcnR1YWwgcm9vdCBodWJzKQoraW50IHVzYl9nZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRkZXYgPSAmZGV2LT5kZXY7CisJaW50IG5jZmcgPSBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXVuc2lnbmVkIGludCBjZmdubywgbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpiaWdidWZmZXI7CisgCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmRlc2M7CisKKwlpZiAobmNmZyA+IFVTQl9NQVhDT05GSUcpIHsKKwkJZGV2X3dhcm4oZGRldiwgInRvbyBtYW55IGNvbmZpZ3VyYXRpb25zOiAlZCwgIgorCQkgICAgInVzaW5nIG1heGltdW0gYWxsb3dlZDogJWRcbiIsIG5jZmcsIFVTQl9NQVhDT05GSUcpOworCQlkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID0gbmNmZyA9IFVTQl9NQVhDT05GSUc7CisJfQorCisJaWYgKG5jZmcgPCAxKSB7CisJCWRldl9lcnIoZGRldiwgIm5vIGNvbmZpZ3VyYXRpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGVuZ3RoID0gbmNmZyAqIHNpemVvZihzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnKTsKKwlkZXYtPmNvbmZpZyA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+Y29uZmlnKQorCQlnb3RvIGVycjI7CisJbWVtc2V0KGRldi0+Y29uZmlnLCAwLCBsZW5ndGgpOworCisJbGVuZ3RoID0gbmNmZyAqIHNpemVvZihjaGFyICopOworCWRldi0+cmF3ZGVzY3JpcHRvcnMgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJhd2Rlc2NyaXB0b3JzKQorCQlnb3RvIGVycjI7CisJbWVtc2V0KGRldi0+cmF3ZGVzY3JpcHRvcnMsIDAsIGxlbmd0aCk7CisKKwlidWZmZXIgPSBrbWFsbG9jKFVTQl9EVF9DT05GSUdfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCWdvdG8gZXJyMjsKKwlkZXNjID0gKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKilidWZmZXI7CisKKwlmb3IgKGNmZ25vID0gMDsgY2Znbm8gPCBuY2ZnOyBjZmdubysrKSB7CisJCS8qIFdlIGdyYWIganVzdCB0aGUgZmlyc3QgZGVzY3JpcHRvciBzbyB3ZSBrbm93IGhvdyBsb25nCisJCSAqIHRoZSB3aG9sZSBjb25maWd1cmF0aW9uIGlzICovCisJCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9DT05GSUcsIGNmZ25vLAorCQkgICAgYnVmZmVyLCBVU0JfRFRfQ09ORklHX1NJWkUpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZGV2LCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGluZGV4ICVkICIKKwkJCSAgICAiZGVzY3JpcHRvci8lc1xuIiwgY2Znbm8sICJzdGFydCIpOworCQkJZ290byBlcnI7CisJCX0gZWxzZSBpZiAocmVzdWx0IDwgNCkgeworCQkJZGV2X2VycihkZGV2LCAiY29uZmlnIGluZGV4ICVkIGRlc2NyaXB0b3IgdG9vIHNob3J0ICIKKwkJCSAgICAiKGV4cGVjdGVkICVpLCBnb3QgJWkpXG4iLCBjZmdubywKKwkJCSAgICBVU0JfRFRfQ09ORklHX1NJWkUsIHJlc3VsdCk7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CisJCX0KKwkJbGVuZ3RoID0gbWF4KChpbnQpIGxlMTZfdG9fY3B1KGRlc2MtPndUb3RhbExlbmd0aCksCisJCSAgICBVU0JfRFRfQ09ORklHX1NJWkUpOworCisJCS8qIE5vdyB0aGF0IHdlIGtub3cgdGhlIGxlbmd0aCwgZ2V0IHRoZSB3aG9sZSB0aGluZyAqLworCQliaWdidWZmZXIgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmlnYnVmZmVyKSB7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwkJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX0NPTkZJRywgY2Znbm8sCisJCSAgICBiaWdidWZmZXIsIGxlbmd0aCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlkZXZfZXJyKGRkZXYsICJ1bmFibGUgdG8gcmVhZCBjb25maWcgaW5kZXggJWQgIgorCQkJICAgICJkZXNjcmlwdG9yLyVzXG4iLCBjZmdubywgImFsbCIpOworCQkJa2ZyZWUoYmlnYnVmZmVyKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCWlmIChyZXN1bHQgPCBsZW5ndGgpIHsKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgaW5kZXggJWQgZGVzY3JpcHRvciB0b28gc2hvcnQgIgorCQkJICAgICIoZXhwZWN0ZWQgJWksIGdvdCAlaSlcbiIsIGNmZ25vLCBsZW5ndGgsIHJlc3VsdCk7CisJCQlsZW5ndGggPSByZXN1bHQ7CisJCX0KKworCQlkZXYtPnJhd2Rlc2NyaXB0b3JzW2NmZ25vXSA9IGJpZ2J1ZmZlcjsKKworCQlyZXN1bHQgPSB1c2JfcGFyc2VfY29uZmlndXJhdGlvbigmZGV2LT5kZXYsIGNmZ25vLAorCQkgICAgJmRldi0+Y29uZmlnW2NmZ25vXSwgYmlnYnVmZmVyLCBsZW5ndGgpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJKytjZmdubzsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCXJlc3VsdCA9IDA7CisKK2VycjoKKwlrZnJlZShidWZmZXIpOworCWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPSBjZmdubzsKK2VycjI6CisJaWYgKHJlc3VsdCA9PSAtRU5PTUVNKQorCQlkZXZfZXJyKGRkZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjYxYmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBkZXZpY2VzLmMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAuCisgKiAoQykgQ29weXJpZ2h0IDE5OTksMjAwMCBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+LiAocHJvYyBmaWxlIHBlciBkZXZpY2UpCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgRGV0aSBGbGllZ2wgKG5ldyBVU0IgYXJjaGl0ZWN0dXJlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIDxtb3VudHBvaW50Pi9kZXZpY2VzIGNvbnRhaW5zIFVTQiB0b3BvbG9neSwgZGV2aWNlLCBjb25maWcsIGNsYXNzLAorICogaW50ZXJmYWNlLCAmIGVuZHBvaW50IGRhdGEuCisgKgorICogSSBjb25zaWRlcmVkIHVzaW5nIC9wcm9jL2J1cy91c2IvZGV2aWNlcy9kZXZpY2UjIGZvciBlYWNoIGRldmljZQorICogYXMgaXQgaXMgYXR0YWNoZWQgb3IgZGV0YWNoZWQsIGJ1dCBJIGRpZG4ndCBsaWtlIHRoaXMgZm9yIHNvbWUKKyAqIHJlYXNvbiAtLSBtYXliZSBpdCdzIGp1c3QgdG9vIGRlZXAgb2YgYSBkaXJlY3Rvcnkgc3RydWN0dXJlLgorICogSSBhbHNvIGRvbid0IGxpa2UgbG9va2luZyBpbiBtdWx0aXBsZSBwbGFjZXMgdG8gZ2F0aGVyIGFuZCB2aWV3CisgKiB0aGUgZGF0YS4gIEhhdmluZyBvbmx5IG9uZSBmaWxlIGZvciAuL2RldmljZXMgYWxzbyBwcmV2ZW50cyByYWNlCisgKiBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgaWYgYSBwcm9ncmFtIHdhcyByZWFkaW5nIGRldmljZSBpbmZvCisgKiBmb3IgZGV2aWNlcyB0aGF0IGFyZSBiZWluZyByZW1vdmVkICh1bnBsdWdnZWQpLiAgKFRoYXQgaXMsIHRoZQorICogcHJvZ3JhbSBtYXkgZmluZCBhIGRpcmVjdG9yeSBmb3IgZGV2bnVtXzEyIHRoZW4gdHJ5IHRvIG9wZW4gaXQsCisgKiBidXQgaXQgd2FzIGp1c3QgdW5wbHVnZ2VkLCBzbyB0aGUgZGlyZWN0b3J5IGlzIG5vdyBkZWxldGVkLgorICogQnV0IHByb2dyYW1zIHdvdWxkIGp1c3QgaGF2ZSB0byBiZSBwcmVwYXJlZCBmb3Igc2l0dWF0aW9ucyBsaWtlCisgKiB0aGlzIGluIGFueSBwbHVnLWFuZC1wbGF5IGVudmlyb25tZW50LikKKyAqCisgKiAxOTk5LTEyLTE2OiBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisgKiAgIENvbnZlcnRlZCB0aGUgd2hvbGUgcHJvYyBzdHVmZiB0byByZWFsCisgKiAgIHJlYWQgbWV0aG9kcy4gTm93IG5vdCB0aGUgd2hvbGUgZGV2aWNlIGxpc3QgbmVlZHMgdG8gZml0CisgKiAgIGludG8gb25lIHBhZ2UsIG9ubHkgdGhlIGRldmljZSBsaXN0IGZvciBvbmUgYnVzLgorICogICBBZGRlZCBhIHBvbGwgbWV0aG9kIHRvIC9wcm9jL2J1cy91c2IvZGV2aWNlcywgdG8gd2FrZQorICogICB1cCBhbiBldmVudHVhbCB1c2JkCisgKiAyMDAwLTAxLTA0OiBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisgKiAgIFR1cm5lZCBpbnRvIGl0cyBvd24gZmlsZXN5c3RlbQorICogMjAwMC0wNy0wNTogQXNobGV5IE1vbnRhbmFybyA8YXNobGV5QGNvbXBzb2MubWFuLmFjLnVrPgorICogICBDb252ZXJ0ZWQgZmlsZSByZWFkaW5nIHJvdXRpbmUgdG8gZHVtcCB0byBidWZmZXIgb25jZQorICogICBwZXIgZGV2aWNlLCBub3QgcGVyIGJ1cworICoKKyAqICRJZDogZGV2aWNlcy5jLHYgMS41IDIwMDAvMDEvMTEgMTM6NTg6MjEgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImhjZC5oIgorCisjZGVmaW5lIE1BWF9UT1BPX0xFVkVMCQk2CisKKy8qIERlZmluZSBBTExPV19TRVJJQUxfTlVNQkVSIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgc2VyaWFsIG51bWJlciBvZiBkZXZpY2VzICovCisjZGVmaW5lIEFMTE9XX1NFUklBTF9OVU1CRVIKKworc3RhdGljIGNoYXIgKmZvcm1hdF90b3BvID0KKy8qIFQ6ICBCdXM9ZGQgTGV2PWRkIFBybnQ9ZGQgUG9ydD1kZCBDbnQ9ZGQgRGV2Iz1kZGQgU3BkPWRkZCBNeENoPWRkICovCisiXG5UOiAgQnVzPSUyLjJkIExldj0lMi4yZCBQcm50PSUyLjJkIFBvcnQ9JTIuMmQgQ250PSUyLjJkIERldiM9JTNkIFNwZD0lM3MgTXhDaD0lMmRcbiI7CisKK3N0YXRpYyBjaGFyICpmb3JtYXRfc3RyaW5nX21hbnVmYWN0dXJlciA9CisvKiBTOiAgTWFudWZhY3R1cmVyPXh4eHggKi8KKyAgIlM6ICBNYW51ZmFjdHVyZXI9JS4xMDBzXG4iOworCitzdGF0aWMgY2hhciAqZm9ybWF0X3N0cmluZ19wcm9kdWN0ID0KKy8qIFM6ICBQcm9kdWN0PXh4eHggKi8KKyAgIlM6ICBQcm9kdWN0PSUuMTAwc1xuIjsKKworI2lmZGVmIEFMTE9XX1NFUklBTF9OVU1CRVIKK3N0YXRpYyBjaGFyICpmb3JtYXRfc3RyaW5nX3NlcmlhbG51bWJlciA9CisvKiBTOiAgU2VyaWFsTnVtYmVyPXh4eHggKi8KKyAgIlM6ICBTZXJpYWxOdW1iZXI9JS4xMDBzXG4iOworI2VuZGlmCisKK3N0YXRpYyBjaGFyICpmb3JtYXRfYmFuZHdpZHRoID0KKy8qIEI6ICBBbGxvYz1kZGQvZGRkIHVzICh4eCUpLCAjSW50PWRkZCwgI0lzbz1kZGQgKi8KKyAgIkI6ICBBbGxvYz0lM2QvJTNkIHVzICglMmQlJSksICNJbnQ9JTNkLCAjSXNvPSUzZFxuIjsKKyAgCitzdGF0aWMgY2hhciAqZm9ybWF0X2RldmljZTEgPQorLyogRDogIFZlcj14eC54eCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IE14UFM9ZGQgI0NmZ3M9ZGQgKi8KKyAgIkQ6ICBWZXI9JTJ4LiUwMnggQ2xzPSUwMngoJS01cykgU3ViPSUwMnggUHJvdD0lMDJ4IE14UFM9JTJkICNDZmdzPSUzZFxuIjsKKworc3RhdGljIGNoYXIgKmZvcm1hdF9kZXZpY2UyID0KKy8qIFA6ICBWZW5kb3I9eHh4eCBQcm9kSUQ9eHh4eCBSZXY9eHgueHggKi8KKyAgIlA6ICBWZW5kb3I9JTA0eCBQcm9kSUQ9JTA0eCBSZXY9JTJ4LiUwMnhcbiI7CisKK3N0YXRpYyBjaGFyICpmb3JtYXRfY29uZmlnID0KKy8qIEM6ICAjSWZzPWRkIENmZyM9ZGQgQXRyPXh4IE1Qd3I9ZGRkbUEgKi8KKyAgIkM6JWMgI0lmcz0lMmQgQ2ZnIz0lMmQgQXRyPSUwMnggTXhQd3I9JTNkbUFcbiI7CisgIAorc3RhdGljIGNoYXIgKmZvcm1hdF9pZmFjZSA9CisvKiBJOiAgSWYjPWRkIEFsdD1kZCAjRVBzPWRkIENscz14eChzc3NzcykgU3ViPXh4IFByb3Q9eHggRHJpdmVyPXh4eHgqLworICAiSTogIElmIz0lMmQgQWx0PSUyZCAjRVBzPSUyZCBDbHM9JTAyeCglLTVzKSBTdWI9JTAyeCBQcm90PSUwMnggRHJpdmVyPSVzXG4iOworCitzdGF0aWMgY2hhciAqZm9ybWF0X2VuZHB0ID0KKy8qIEU6ICBBZD14eChzKSBBdHI9eHgoc3NzcykgTXhQUz1kZGRkIEl2bD1EP3MgKi8KKyAgIkU6ICBBZD0lMDJ4KCVjKSBBdHI9JTAyeCglLTRzKSBNeFBTPSU0ZCBJdmw9JWQlY3NcbiI7CisKKworLyoKKyAqIE5lZWQgYWNjZXNzIHRvIHRoZSBkcml2ZXIgYW5kIFVTQiBidXMgbGlzdHMuCisgKiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB1c2JfYnVzX2xpc3Q7CisgKiBIb3dldmVyLCB0aGVzZSB3aWxsIGNvbWUgZnJvbSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcHRycyB0byBlYWNoIG9mIHRoZW0uCisgKi8KKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGRldmljZWNvbm5kaXNjd3EpOworc3RhdGljIHVuc2lnbmVkIGludCBjb25uZGlzY2V2Y250ID0gMDsKKworLyogdGhpcyBzdHJ1Y3Qgc3RvcmVzIHRoZSBwb2xsIHN0YXRlIGZvciA8bW91bnRwb2ludD4vZGV2aWNlcyBwb2xsZXJzICovCitzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgeworCXVuc2lnbmVkIGludCBsYXN0ZXY7Cit9OworCitzdHJ1Y3QgY2xhc3NfaW5mbyB7CisJaW50IGNsYXNzOworCWNoYXIgKmNsYXNzX25hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzX2luZm8gY2xhc19pbmZvW10gPQorewkJCQkJLyogbWF4LiA1IGNoYXJzLiBwZXIgbmFtZSBzdHJpbmcgKi8KKwl7VVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCSI+aWZjIn0sCisJe1VTQl9DTEFTU19BVURJTywJCSJhdWRpbyJ9LAorCXtVU0JfQ0xBU1NfQ09NTSwJCSJjb21tLiJ9LAorCXtVU0JfQ0xBU1NfSElELAkJCSJISUQifSwKKwl7VVNCX0NMQVNTX0hVQiwJCQkiaHViIn0sCisJe1VTQl9DTEFTU19QSFlTSUNBTCwJCSJQSUQifSwKKwl7VVNCX0NMQVNTX1BSSU5URVIsCQkicHJpbnQifSwKKwl7VVNCX0NMQVNTX01BU1NfU1RPUkFHRSwJInN0b3IuIn0sCisJe1VTQl9DTEFTU19DRENfREFUQSwJCSJkYXRhIn0sCisJe1VTQl9DTEFTU19BUFBfU1BFQywJCSJhcHAuIn0sCisJe1VTQl9DTEFTU19WRU5ET1JfU1BFQywJCSJ2ZW5kLiJ9LAorCXtVU0JfQ0xBU1NfU1RJTExfSU1BR0UsCQkic3RpbGwifSwKKwl7VVNCX0NMQVNTX0NTQ0lELAkJInNjYXJkIn0sCisJe1VTQl9DTEFTU19DT05URU5UX1NFQywJCSJjLXNlYyJ9LAorCXstMSwJCQkJInVuay4ifQkJLyogbGVhdmUgYXMgbGFzdCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHVzYmZzX2Nvbm5fZGlzY19ldmVudCh2b2lkKQoreworCWNvbm5kaXNjZXZjbnQrKzsKKwl3YWtlX3VwKCZkZXZpY2Vjb25uZGlzY3dxKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsYXNzX2RlY29kZShjb25zdCBpbnQgY2xhc3MpCit7CisJaW50IGl4OworCisJZm9yIChpeCA9IDA7IGNsYXNfaW5mb1tpeF0uY2xhc3MgIT0gLTE7IGl4KyspCisJCWlmIChjbGFzX2luZm9baXhdLmNsYXNzID09IGNsYXNzKQorCQkJYnJlYWs7CisJcmV0dXJuIChjbGFzX2luZm9baXhdLmNsYXNzX25hbWUpOworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfZW5kcG9pbnRfZGVzY3JpcHRvciAoCisJaW50IHNwZWVkLAorCWNoYXIgKnN0YXJ0LAorCWNoYXIgKmVuZCwKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MKKykKK3sKKwljaGFyIGRpciwgdW5pdCwgKnR5cGU7CisJdW5zaWduZWQgaW50ZXJ2YWwsIGluLCBiYW5kd2lkdGggPSAxOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJaW4gPSAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pOworCWRpciA9IGluID8gJ0knIDogJ08nOworCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAmICgweDAzIDw8IDExKSkgeworCQljYXNlIDEgPDwgMTE6CWJhbmR3aWR0aCA9IDI7IGJyZWFrOworCQljYXNlIDIgPDwgMTE6CWJhbmR3aWR0aCA9IDM7IGJyZWFrOworCQl9CisJfQorCisJLyogdGhpcyBpc24ndCBjaGVja2luZyBmb3IgaWxsZWdhbCB2YWx1ZXMgKi8KKwlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQl0eXBlID0gIkN0cmwiOworCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KKwkJCWludGVydmFsID0gZGVzYy0+YkludGVydmFsOworCQllbHNlCisJCQlpbnRlcnZhbCA9IDA7CisJCWRpciA9ICdCJzsJCQkvKiBjdHJsIGlzIGJpZGlyZWN0aW9uYWwgKi8KKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQl0eXBlID0gIklzb2MiOworCQlpbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCXR5cGUgPSAiQnVsayI7CisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCAmJiAhaW4pCS8qIHVmcmFtZXMgcGVyIE5BSyAqLworCQkJaW50ZXJ2YWwgPSBkZXNjLT5iSW50ZXJ2YWw7CisJCWVsc2UKKwkJCWludGVydmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCXR5cGUgPSAiSW50LiI7CisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJaW50ZXJ2YWwgPSAxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKTsKKwkJfSBlbHNlCisJCQlpbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogImNhbid0IGhhcHBlbiIgKi8KKwkJcmV0dXJuIHN0YXJ0OworCX0KKwlpbnRlcnZhbCAqPSAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gMTI1IDogMTAwMDsKKwlpZiAoaW50ZXJ2YWwgJSAxMDAwKQorCQl1bml0ID0gJ3UnOworCWVsc2UgeworCQl1bml0ID0gJ20nOworCQlpbnRlcnZhbCAvPSAxMDAwOworCX0KKworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9lbmRwdCwgZGVzYy0+YkVuZHBvaW50QWRkcmVzcywgZGlyLAorCQkJIGRlc2MtPmJtQXR0cmlidXRlcywgdHlwZSwKKwkJCSAobGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpICYgMHgwN2ZmKSAqIGJhbmR3aWR0aCwKKwkJCSBpbnRlcnZhbCwgdW5pdCk7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwKKwljb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmMsCisJY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCWludCBzZXRubykKK3sKKwljb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjID0gJmludGZjLT5hbHRzZXR0aW5nW3NldG5vXS5kZXNjOworCWNoYXIgKmRyaXZlcl9uYW1lID0gIiI7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwlkb3duX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCWlmIChpZmFjZSkKKwkJZHJpdmVyX25hbWUgPSAoaWZhY2UtPmRldi5kcml2ZXIKKwkJCQk/IGlmYWNlLT5kZXYuZHJpdmVyLT5uYW1lCisJCQkJOiAiKG5vbmUpIik7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X2lmYWNlLAorCQkJIGRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCisJCQkgZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcsCisJCQkgZGVzYy0+Yk51bUVuZHBvaW50cywKKwkJCSBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MsCisJCQkgY2xhc3NfZGVjb2RlKGRlc2MtPmJJbnRlcmZhY2VDbGFzcyksCisJCQkgZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzLAorCQkJIGRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCwKKwkJCSBkcml2ZXJfbmFtZSk7CisJdXBfcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfaW50ZXJmYWNlKAorCWludCBzcGVlZCwKKwljaGFyICpzdGFydCwKKwljaGFyICplbmQsCisJY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjLAorCWNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwlpbnQgc2V0bm8KKykgeworCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmRlc2MgPSAmaW50ZmMtPmFsdHNldHRpbmdbc2V0bm9dOworCWludCBpOworCisJc3RhcnQgPSB1c2JfZHVtcF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdGFydCwgZW5kLCBpbnRmYywgaWZhY2UsIHNldG5vKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJaWYgKHN0YXJ0ID4gZW5kKQorCQkJcmV0dXJuIHN0YXJ0OworCQlzdGFydCA9IHVzYl9kdW1wX2VuZHBvaW50X2Rlc2NyaXB0b3Ioc3BlZWQsCisJCQkJc3RhcnQsIGVuZCwgJmRlc2MtPmVuZHBvaW50W2ldLmRlc2MpOworCX0KKwlyZXR1cm4gc3RhcnQ7Cit9CisKKy8qIFRCRDoKKyAqIDAuIFRCRHMKKyAqIDEuIG1hcmtpbmcgYWN0aXZlIGludGVyZmFjZSBhbHRzZXR0aW5ncyAoY29kZSBsaXN0cyBhbGwsIGJ1dCBzaG91bGQgbWFyaworICogICAgd2hpY2ggb25lcyBhcmUgYWN0aXZlLCBpZiBhbnkpCisgKi8KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2NvbmZpZ19kZXNjcmlwdG9yKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmRlc2MsIGludCBhY3RpdmUpCit7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X2NvbmZpZywKKwkJCSBhY3RpdmUgPyAnKicgOiAnICcsCS8qIG1hcmsgYWN0aXZlL2FjdHVhbC9jdXJyZW50IGNmZy4gKi8KKwkJCSBkZXNjLT5iTnVtSW50ZXJmYWNlcywKKwkJCSBkZXNjLT5iQ29uZmlndXJhdGlvblZhbHVlLAorCQkJIGRlc2MtPmJtQXR0cmlidXRlcywKKwkJCSBkZXNjLT5iTWF4UG93ZXIgKiAyKTsKKwlyZXR1cm4gc3RhcnQ7Cit9CisKK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9jb25maWcgKAorCWludCBzcGVlZCwKKwljaGFyICpzdGFydCwKKwljaGFyICplbmQsCisJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnLAorCWludCBhY3RpdmUKKykKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCWlmICghY29uZmlnKQkJLyogZ2V0dGluZyB0aGVzZSBzb21lIGluIDIuMy43OyBub25lIGluIDIuMy42ICovCisJCXJldHVybiBzdGFydCArIHNwcmludGYoc3RhcnQsICIobnVsbCBDZmcuIGRlc2MuKVxuIik7CisJc3RhcnQgPSB1c2JfZHVtcF9jb25maWdfZGVzY3JpcHRvcihzdGFydCwgZW5kLCAmY29uZmlnLT5kZXNjLCBhY3RpdmUpOworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQlpbnRmYyA9IGNvbmZpZy0+aW50Zl9jYWNoZVtpXTsKKwkJaW50ZXJmYWNlID0gY29uZmlnLT5pbnRlcmZhY2VbaV07CisJCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7IGorKykgeworCQkJaWYgKHN0YXJ0ID4gZW5kKQorCQkJCXJldHVybiBzdGFydDsKKwkJCXN0YXJ0ID0gdXNiX2R1bXBfaW50ZXJmYWNlKHNwZWVkLAorCQkJCXN0YXJ0LCBlbmQsIGludGZjLCBpbnRlcmZhY2UsIGopOworCQl9CisJfQorCXJldHVybiBzdGFydDsKK30KKworLyoKKyAqIER1bXAgdGhlIGRpZmZlcmVudCBVU0IgZGVzY3JpcHRvcnMuCisgKi8KK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXZpY2VfZGVzY3JpcHRvcihjaGFyICpzdGFydCwgY2hhciAqZW5kLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yICpkZXNjKQoreworCXUxNiBiY2RVU0IgPSBsZTE2X3RvX2NwdShkZXNjLT5iY2RVU0IpOworCXUxNiBiY2REZXZpY2UgPSBsZTE2X3RvX2NwdShkZXNjLT5iY2REZXZpY2UpOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZiAoc3RhcnQsIGZvcm1hdF9kZXZpY2UxLAorCQkJICBiY2RVU0IgPj4gOCwgYmNkVVNCICYgMHhmZiwKKwkJCSAgZGVzYy0+YkRldmljZUNsYXNzLAorCQkJICBjbGFzc19kZWNvZGUgKGRlc2MtPmJEZXZpY2VDbGFzcyksCisJCQkgIGRlc2MtPmJEZXZpY2VTdWJDbGFzcywKKwkJCSAgZGVzYy0+YkRldmljZVByb3RvY29sLAorCQkJICBkZXNjLT5iTWF4UGFja2V0U2l6ZTAsCisJCQkgIGRlc2MtPmJOdW1Db25maWd1cmF0aW9ucyk7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X2RldmljZTIsCisJCQkgbGUxNl90b19jcHUoZGVzYy0+aWRWZW5kb3IpLAorCQkJIGxlMTZfdG9fY3B1KGRlc2MtPmlkUHJvZHVjdCksCisJCQkgYmNkRGV2aWNlID4+IDgsIGJjZERldmljZSAmIDB4ZmYpOworCXJldHVybiBzdGFydDsKK30KKworLyoKKyAqIER1bXAgdGhlIGRpZmZlcmVudCBzdHJpbmdzIHRoYXQgdGhpcyBkZXZpY2UgaG9sZHMuCisgKi8KK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXZpY2Vfc3RyaW5ncyAoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9zdHJpbmdfbWFudWZhY3R1cmVyLCBkZXYtPm1hbnVmYWN0dXJlcik7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlnb3RvIG91dDsKKwlpZiAoZGV2LT5wcm9kdWN0KQorCQlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCBmb3JtYXRfc3RyaW5nX3Byb2R1Y3QsIGRldi0+cHJvZHVjdCk7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlnb3RvIG91dDsKKyNpZmRlZiBBTExPV19TRVJJQUxfTlVNQkVSCisJaWYgKGRldi0+c2VyaWFsKQorCQlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCBmb3JtYXRfc3RyaW5nX3NlcmlhbG51bWJlciwgZGV2LT5zZXJpYWwpOworI2VuZGlmCisgb3V0OgorCXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2Rlc2MoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCQkKKwlzdGFydCA9IHVzYl9kdW1wX2RldmljZV9kZXNjcmlwdG9yKHN0YXJ0LCBlbmQsICZkZXYtPmRlc2NyaXB0b3IpOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJCisJc3RhcnQgPSB1c2JfZHVtcF9kZXZpY2Vfc3RyaW5ncyAoc3RhcnQsIGVuZCwgZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJaWYgKHN0YXJ0ID4gZW5kKQorCQkJcmV0dXJuIHN0YXJ0OworCQlzdGFydCA9IHVzYl9kdW1wX2NvbmZpZyhkZXYtPnNwZWVkLAorCQkJCXN0YXJ0LCBlbmQsIGRldi0+Y29uZmlnICsgaSwKKwkJCQkvKiBhY3RpdmUgPyAqLworCQkJCShkZXYtPmNvbmZpZyArIGkpID09IGRldi0+YWN0Y29uZmlnKTsKKwl9CisJcmV0dXJuIHN0YXJ0OworfQorCisKKyNpZmRlZiBQUk9DX0VYVFJBIC8qIFRCRDogbWF5IHdhbnQgdG8gYWRkIHRoaXMgY29kZSBsYXRlciAqLworCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfaHViX2Rlc2NyaXB0b3IoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgY29uc3Qgc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqIGRlc2MpCit7CisJaW50IGxlbmcgPSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZGVzYzsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsICJJbnRlcmZhY2U6Iik7CisJd2hpbGUgKGxlbmcgJiYgc3RhcnQgPD0gZW5kKSB7CisJCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsICIgJTAyeCIsICpwdHIpOworCQlwdHIrKzsgbGVuZy0tOworCX0KKwkqc3RhcnQrKyA9ICdcbic7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfc3RyaW5nKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGNoYXIgKmlkLCBpbnQgaW5kZXgpCit7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgIkludGVyZmFjZToiKTsKKwlpZiAoaW5kZXggPD0gZGV2LT5tYXhzdHJpbmcgJiYgZGV2LT5zdHJpbmdpbmRleCAmJiBkZXYtPnN0cmluZ2luZGV4W2luZGV4XSkKKwkJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgIiVzOiAlLjEwMHMgIiwgaWQsIGRldi0+c3RyaW5naW5kZXhbaW5kZXhdKTsKKwlyZXR1cm4gc3RhcnQ7Cit9CisKKyNlbmRpZiAvKiBQUk9DX0VYVFJBICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbi4gUGFyYW1ldGVyczoKKyAqIGJ1ZmZlciAtIHRoZSB1c2VyLXNwYWNlIGJ1ZmZlciB0byB3cml0ZSBkYXRhIGludG8KKyAqIG5ieXRlcyAtIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICogc2tpcF9ieXRlcyAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCBiZWZvcmUgd3JpdGluZyBhbnl0aGluZworICogZmlsZV9vZmZzZXQgLSB0aGUgb2Zmc2V0IGludG8gdGhlIGRldmljZXMgZmlsZSBvbiBjb21wbGV0aW9uCisgKiBUaGUgY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4KKyAqLworc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcywgbG9mZl90ICpza2lwX2J5dGVzLCBsb2ZmX3QgKmZpbGVfb2Zmc2V0LAorCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIHN0cnVjdCB1c2JfYnVzICpidXMsIGludCBsZXZlbCwgaW50IGluZGV4LCBpbnQgY291bnQpCit7CisJaW50IGNoaXg7CisJaW50IHJldCwgY250ID0gMDsKKwlpbnQgcGFyZW50X2Rldm51bSA9IDA7CisJY2hhciAqcGFnZXNfc3RhcnQsICpkYXRhX2VuZCwgKnNwZWVkOworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJc3NpemVfdCB0b3RhbF93cml0dGVuID0gMDsKKwkKKwkvKiBkb24ndCBib3RoZXIgd2l0aCBhbnl0aGluZyBlbHNlIGlmIHdlJ3JlIG5vdCB3cml0aW5nIGFueSBkYXRhICovCisJaWYgKCpuYnl0ZXMgPD0gMCkKKwkJcmV0dXJuIDA7CisJCisJaWYgKGxldmVsID4gTUFYX1RPUE9fTEVWRUwpCisJCXJldHVybiAwOworCS8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTsgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yIG9uZSBkZXZpY2UgKi8KKyAgICAgICAgaWYgKCEocGFnZXNfc3RhcnQgPSAoY2hhciopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwxKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJCQorCWlmICh1c2JkZXYtPnBhcmVudCAmJiB1c2JkZXYtPnBhcmVudC0+ZGV2bnVtICE9IC0xKQorCQlwYXJlbnRfZGV2bnVtID0gdXNiZGV2LT5wYXJlbnQtPmRldm51bTsKKwkvKgorCSAqIFNvIHRoZSByb290IGh1YidzIHBhcmVudCBpcyAwIGFuZCBhbnkgZGV2aWNlIHRoYXQgaXMKKwkgKiBwbHVnZ2VkIGludG8gdGhlIHJvb3QgaHViIGhhcyBhIHBhcmVudCBvZiAwLgorCSAqLworCXN3aXRjaCAodXNiZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJc3BlZWQgPSAiMS41IjsgYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjoJCS8qIHVzYiAxLjEgcm9vdCBodWIgY29kZSAqLworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXNwZWVkID0gIjEyICI7IGJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXNwZWVkID0gIjQ4MCI7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwZWVkID0gIj8/ICI7CisJfQorCWRhdGFfZW5kID0gcGFnZXNfc3RhcnQgKyBzcHJpbnRmKHBhZ2VzX3N0YXJ0LCBmb3JtYXRfdG9wbywKKwkJCWJ1cy0+YnVzbnVtLCBsZXZlbCwgcGFyZW50X2Rldm51bSwKKwkJCWluZGV4LCBjb3VudCwgdXNiZGV2LT5kZXZudW0sCisJCQlzcGVlZCwgdXNiZGV2LT5tYXhjaGlsZCk7CisJLyoKKwkgKiBsZXZlbCA9IHRvcG9sb2d5LXRpZXIgbGV2ZWw7CisJICogcGFyZW50X2Rldm51bSA9IHBhcmVudCBkZXZpY2UgbnVtYmVyOworCSAqIGluZGV4ID0gcGFyZW50J3MgY29ubmVjdG9yIG51bWJlcjsKKwkgKiBjb3VudCA9IGRldmljZSBjb3VudCBhdCB0aGlzIGxldmVsCisJICovCisJLyogSWYgdGhpcyBpcyB0aGUgcm9vdCBodWIsIGRpc3BsYXkgdGhlIGJhbmR3aWR0aCBpbmZvcm1hdGlvbiAqLworCWlmIChsZXZlbCA9PSAwKSB7CisJCWludAltYXg7CisKKwkJLyogaGlnaCBzcGVlZCByZXNlcnZlcyA4MCUsIGZ1bGwvbG93IHJlc2VydmVzIDkwJSAqLworCQlpZiAodXNiZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCW1heCA9IDgwMDsKKwkJZWxzZQorCQkJbWF4ID0gRlJBTUVfVElNRV9NQVhfVVNFQ1NfQUxMT0M7CisKKwkJLyogcmVwb3J0ICJhdmVyYWdlIiBwZXJpb2RpYyBhbGxvY2F0aW9uIG92ZXIgYSBtaWNyb3NlY29uZC4KKwkJICogdGhlIHNjaGVkdWxlcyBhcmUgYWN0dWFsbHkgYnVyc3R5LCBIQ0RzIG5lZWQgdG8gZGVhbCB3aXRoCisJCSAqIHRoYXQgYW5kIGp1c3QgY29tcHV0ZS9yZXBvcnQgdGhpcyBhdmVyYWdlLgorCQkgKi8KKwkJZGF0YV9lbmQgKz0gc3ByaW50ZihkYXRhX2VuZCwgZm9ybWF0X2JhbmR3aWR0aCwKKwkJCQlidXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQsIG1heCwKKwkJCQkoMTAwICogYnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkICsgbWF4IC8gMikKKwkJCQkJLyBtYXgsCisJCQkgICAgICAgICBidXMtPmJhbmR3aWR0aF9pbnRfcmVxcywKKwkJCQkgYnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzKTsKKwkKKwl9CisJZGF0YV9lbmQgPSB1c2JfZHVtcF9kZXNjKGRhdGFfZW5kLCBwYWdlc19zdGFydCArICgyICogUEFHRV9TSVpFKSAtIDI1NiwgdXNiZGV2KTsKKwkKKwlpZiAoZGF0YV9lbmQgPiAocGFnZXNfc3RhcnQgKyAoMiAqIFBBR0VfU0laRSkgLSAyNTYpKQorCQlkYXRhX2VuZCArPSBzcHJpbnRmKGRhdGFfZW5kLCAiKHRydW5jYXRlZClcbiIpOworCQorCWxlbmd0aCA9IGRhdGFfZW5kIC0gcGFnZXNfc3RhcnQ7CisJLyogaWYgd2UgY2FuIHN0YXJ0IGNvcHlpbmcgc29tZSBkYXRhIHRvIHRoZSB1c2VyICovCisJaWYgKGxlbmd0aCA+ICpza2lwX2J5dGVzKSB7CisJCWxlbmd0aCAtPSAqc2tpcF9ieXRlczsKKwkJaWYgKGxlbmd0aCA+ICpuYnl0ZXMpCisJCQlsZW5ndGggPSAqbmJ5dGVzOworCQlpZiAoY29weV90b191c2VyKCpidWZmZXIsIHBhZ2VzX3N0YXJ0ICsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHsKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJKm5ieXRlcyAtPSBsZW5ndGg7CisJCSpmaWxlX29mZnNldCArPSBsZW5ndGg7CisJCXRvdGFsX3dyaXR0ZW4gKz0gbGVuZ3RoOworCQkqYnVmZmVyICs9IGxlbmd0aDsKKwkJKnNraXBfYnl0ZXMgPSAwOworCX0gZWxzZQorCQkqc2tpcF9ieXRlcyAtPSBsZW5ndGg7CisJCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwYWdlc19zdGFydCwgMSk7CisJCisJLyogTm93IGxvb2sgYXQgYWxsIG9mIHRoaXMgZGV2aWNlJ3MgY2hpbGRyZW4uICovCisJZm9yIChjaGl4ID0gMDsgY2hpeCA8IHVzYmRldi0+bWF4Y2hpbGQ7IGNoaXgrKykgeworCQlzdHJ1Y3QgdXNiX2RldmljZSAqY2hpbGRkZXYgPSB1c2JkZXYtPmNoaWxkcmVuW2NoaXhdOworCisJCWlmIChjaGlsZGRldikgeworCQkJZG93bigmY2hpbGRkZXYtPnNlcmlhbGl6ZSk7CisJCQlyZXQgPSB1c2JfZGV2aWNlX2R1bXAoYnVmZmVyLCBuYnl0ZXMsIHNraXBfYnl0ZXMsIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwKKwkJCQkJYnVzLCBsZXZlbCArIDEsIGNoaXgsICsrY250KTsKKwkJCXVwKCZjaGlsZGRldi0+c2VyaWFsaXplKTsKKwkJCWlmIChyZXQgPT0gLUVGQVVMVCkKKwkJCQlyZXR1cm4gdG90YWxfd3JpdHRlbjsKKwkJCXRvdGFsX3dyaXR0ZW4gKz0gcmV0OworCQl9CisJfQorCXJldHVybiB0b3RhbF93cml0dGVuOworfQorCitzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXNzaXplX3QgcmV0LCB0b3RhbF93cml0dGVuID0gMDsKKwlsb2ZmX3Qgc2tpcF9ieXRlcyA9ICpwcG9zOworCisJaWYgKCpwcG9zIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ieXRlcyA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgbmJ5dGVzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkb3duICgmdXNiX2J1c19saXN0X2xvY2spOworCS8qIHByaW50IGRldmljZXMgZm9yIGFsbCBidXNzZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnVzYl9idXNfbGlzdCwgYnVzX2xpc3QpIHsKKwkJLyogcmVjdXJzZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBvZiB0aGUgcm9vdCBodWIgKi8KKwkJaWYgKCFidXMtPnJvb3RfaHViKQorCQkJY29udGludWU7CisJCXVzYl9sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJcmV0ID0gdXNiX2RldmljZV9kdW1wKCZidWYsICZuYnl0ZXMsICZza2lwX2J5dGVzLCBwcG9zLCBidXMtPnJvb3RfaHViLCBidXMsIDAsIDAsIDApOworCQl1c2JfdW5sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXRvdGFsX3dyaXR0ZW4gKz0gcmV0OworCX0KKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gdG90YWxfd3JpdHRlbjsKK30KKworLyogS2VybmVsIGxvY2sgZm9yICJsYXN0ZXYiIHByb3RlY3Rpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX2RldmljZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzICpzdCA9IChzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoIXN0KSB7CisJCXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3QpIHsKKwkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXJldHVybiBQT0xMSU47CisJCX0KKwkJCisJCS8qIHdlIG1heSBoYXZlIGRyb3BwZWQgQktMIC0gbmVlZCB0byBjaGVjayBmb3IgaGF2aW5nIGxvc3QgdGhlIHJhY2UgKi8KKwkJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkgeworCQkJa2ZyZWUoc3QpOworCQkJc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlnb3RvIGxvc3RfcmFjZTsKKwkJfQorCisJCS8qCisJCSAqIG5lZWQgdG8gcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgdW5sb2FkZWQsIHNpbmNlCisJCSAqIHByb2NfdW5yZWdpc3RlciBkb2VzIG5vdCBjYWxsIHRoZSByZWxlYXNlIG1ldGhvZCBhbmQKKwkJICogd2Ugd291bGQgaGF2ZSBhIG1lbW9yeSBsZWFrCisJCSAqLworCQlzdC0+bGFzdGV2ID0gY29ubmRpc2NldmNudDsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc3Q7CisJCW1hc2sgPSBQT0xMSU47CisJfQorbG9zdF9yYWNlOgorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQorICAgICAgICAgICAgICAgIHBvbGxfd2FpdChmaWxlLCAmZGV2aWNlY29ubmRpc2N3cSwgd2FpdCk7CisJaWYgKHN0LT5sYXN0ZXYgIT0gY29ubmRpc2NldmNudCkKKwkJbWFzayB8PSBQT0xMSU47CisJc3QtPmxhc3RldiA9IGNvbm5kaXNjZXZjbnQ7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHVzYl9kZXZpY2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKyAgICAgICAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKKwkJa2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwl9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb2ZmX3QgdXNiX2RldmljZV9sc2VlayhzdHJ1Y3QgZmlsZSAqIGZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQoreworCWxvZmZfdCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCisJc3dpdGNoIChvcmlnKSB7CisJY2FzZSAwOgorCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKKwkJcmV0ID0gZmlsZS0+Zl9wb3M7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZmlsZS0+Zl9wb3MgKz0gb2Zmc2V0OworCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzID0geworCS5sbHNlZWsgPQl1c2JfZGV2aWNlX2xzZWVrLAorCS5yZWFkID0JCXVzYl9kZXZpY2VfcmVhZCwKKwkucG9sbCA9CQl1c2JfZGV2aWNlX3BvbGwsCisJLm9wZW4gPQkJdXNiX2RldmljZV9vcGVuLAorCS5yZWxlYXNlID0JdXNiX2RldmljZV9yZWxlYXNlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3YmMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0wLDAgKzEsMTQ4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogICAgICBkZXZpby5jICAtLSAgVXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIHdpdGggVVNCIGRldmljZXMuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgJElkOiBkZXZpby5jLHYgMS43IDIwMDAvMDIvMDEgMTc6Mjg6NDggZmxpZWdsIEV4cCAkCisgKgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSB1c2Jmcy94L3kgZmlsZXMsIHdoZXJlCisgKiAgeCBpcyB0aGUgYnVzIG51bWJlciBhbmQgeSB0aGUgZGV2aWNlIG51bWJlci4KKyAqCisgKiAgSXQgYWxsb3dzIHVzZXIgc3BhY2UgcHJvZ3JhbXMvImRyaXZlcnMiIHRvIGNvbW11bmljYXRlIGRpcmVjdGx5CisgKiAgd2l0aCBVU0IgZGV2aWNlcyB3aXRob3V0IGludGVydmVuaW5nIGtlcm5lbCBkcml2ZXIuCisgKgorICogIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgIDIyLjEyLjE5OTkgICAwLjEgICBJbml0aWFsIHJlbGVhc2UgKHNwbGl0IGZyb20gcHJvY191c2IuYykKKyAqICAgIDA0LjAxLjIwMDAgICAwLjIgICBUdXJuZWQgaW50byBpdHMgb3duIGZpbGVzeXN0ZW0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlICJoY2QuaCIJLyogZm9yIHVzYmNvcmUgaW50ZXJuYWxzICovCisjaW5jbHVkZSAidXNiLmgiCisKK3N0cnVjdCBhc3luYyB7CisJc3RydWN0IGxpc3RfaGVhZCBhc3luY2xpc3Q7CisJc3RydWN0IGRldl9zdGF0ZSAqcHM7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXVuc2lnbmVkIGludCBzaWducjsKKwl1bnNpZ25lZCBpbnQgaWZudW07CisJdm9pZCBfX3VzZXIgKnVzZXJidWZmZXI7CisJdm9pZCBfX3VzZXIgKnVzZXJ1cmI7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworc3RhdGljIGludCB1c2Jmc19zbm9vcCA9IDA7Cittb2R1bGVfcGFyYW0gKHVzYmZzX3Nub29wLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDICh1c2Jmc19zbm9vcCwgInRydWUgdG8gbG9nIGFsbCB1c2JmcyB0cmFmZmljIik7CisKKyNkZWZpbmUgc25vb3AoZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAodXNiZnNfc25vb3ApCQkJCVwKKwkJCWRldl9pbmZvKCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpOwlcCisJfSB3aGlsZSAoMCkKKworCisjZGVmaW5lCU1BWF9VU0JGU19CVUZGRVJfU0laRQkxNjM4NAorCitzdGF0aWMgaW5saW5lIGludCBjb25uZWN0ZWQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEOworfQorCitzdGF0aWMgbG9mZl90IHVzYmRldl9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJbG9mZl90IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisKKwlzd2l0Y2ggKG9yaWcpIHsKKwljYXNlIDA6CisJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmaWxlLT5mX3BvcyArPSBvZmZzZXQ7CisJCXJldCA9IGZpbGUtPmZfcG9zOworCQlicmVhazsKKwljYXNlIDI6CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdXNiZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IChzdHJ1Y3QgZGV2X3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXNzaXplX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBsZW47CisJbG9mZl90IHBvczsKKwlpbnQgaTsKKworCXBvcyA9ICpwcG9zOworCXVzYl9sb2NrX2RldmljZShkZXYpOworCWlmICghY29ubmVjdGVkKGRldikpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfSBlbHNlIGlmIChwb3MgPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChwb3MgPCBzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcikpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpkZXNjKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGVzYykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisJCW1lbWNweShkZXNjLCAmZGV2LT5kZXNjcmlwdG9yLCBzaXplb2YoZGV2LT5kZXNjcmlwdG9yKSk7CisJCWxlMTZfdG9fY3B1cygmZGVzYy0+YmNkVVNCKTsKKwkJbGUxNl90b19jcHVzKCZkZXNjLT5pZFZlbmRvcik7CisJCWxlMTZfdG9fY3B1cygmZGVzYy0+aWRQcm9kdWN0KTsKKwkJbGUxNl90b19jcHVzKCZkZXNjLT5iY2REZXZpY2UpOworCisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yKSAtIHBvczsKKwkJaWYgKGxlbiA+IG5ieXRlcykKKwkJCWxlbiA9IG5ieXRlczsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICgoY2hhciAqKWRlc2MpICsgcG9zLCBsZW4pKSB7CisJCQlrZnJlZShkZXNjKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycjsKKwkJfQorCQlrZnJlZShkZXNjKTsKKworCQkqcHBvcyArPSBsZW47CisJCWJ1ZiArPSBsZW47CisJCW5ieXRlcyAtPSBsZW47CisJCXJldCArPSBsZW47CisJfQorCisJcG9zID0gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpOworCWZvciAoaSA9IDA7IG5ieXRlcyAmJiBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKSB7CisJCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZyA9CisJCQkoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKWRldi0+cmF3ZGVzY3JpcHRvcnNbaV07CisJCXVuc2lnbmVkIGludCBsZW5ndGggPSBsZTE2X3RvX2NwdShjb25maWctPndUb3RhbExlbmd0aCk7CisKKwkJaWYgKCpwcG9zIDwgcG9zICsgbGVuZ3RoKSB7CisKKwkJCS8qIFRoZSBkZXNjcmlwdG9yIG1heSBjbGFpbSB0byBiZSBsb25nZXIgdGhhbiBpdAorCQkJICogcmVhbGx5IGlzLiAgSGVyZSBpcyB0aGUgYWN0dWFsIGFsbG9jYXRlZCBsZW5ndGguICovCisJCQl1bnNpZ25lZCBhbGxvY2xlbiA9CisJCQkJbGUxNl90b19jcHUoZGV2LT5jb25maWdbaV0uZGVzYy53VG90YWxMZW5ndGgpOworCisJCQlsZW4gPSBsZW5ndGggLSAoKnBwb3MgLSBwb3MpOworCQkJaWYgKGxlbiA+IG5ieXRlcykKKwkJCQlsZW4gPSBuYnl0ZXM7CisKKwkJCS8qIFNpbXBseSBkb24ndCB3cml0ZSAoc2tpcCBvdmVyKSB1bmFsbG9jYXRlZCBwYXJ0cyAqLworCQkJaWYgKGFsbG9jbGVuID4gKCpwcG9zIC0gcG9zKSkgeworCQkJCWFsbG9jbGVuIC09ICgqcHBvcyAtIHBvcyk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsCisJCQkJICAgIGRldi0+cmF3ZGVzY3JpcHRvcnNbaV0gKyAoKnBwb3MgLSBwb3MpLAorCQkJCSAgICBtaW4obGVuLCBhbGxvY2xlbikpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCX0KKworCQkJKnBwb3MgKz0gbGVuOworCQkJYnVmICs9IGxlbjsKKwkJCW5ieXRlcyAtPSBsZW47CisJCQlyZXQgKz0gbGVuOworCQl9CisKKwkJcG9zICs9IGxlbmd0aDsKKwl9CisKK2VycjoKKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhc3luYyBsaXN0IGhhbmRsaW5nCisgKi8KKworc3RhdGljIHN0cnVjdCBhc3luYyAqYWxsb2NfYXN5bmModW5zaWduZWQgaW50IG51bWlzb2ZyYW1lcykKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGFzc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXN5bmMpICsgbnVtaXNvZnJhbWVzICogc2l6ZW9mKHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yKTsKKyAgICAgICAgc3RydWN0IGFzeW5jICphcyA9IGttYWxsb2MoYXNzaXplLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKCFhcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbWVtc2V0KGFzLCAwLCBhc3NpemUpOworCWFzLT51cmIgPSB1c2JfYWxsb2NfdXJiKG51bWlzb2ZyYW1lcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcy0+dXJiKSB7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorICAgICAgICByZXR1cm4gYXM7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYXN5bmMoc3RydWN0IGFzeW5jICphcykKK3sKKyAgICAgICAgaWYgKGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcikKKyAgICAgICAgICAgICAgICBrZnJlZShhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIpOworICAgICAgICBpZiAoYXMtPnVyYi0+c2V0dXBfcGFja2V0KQorICAgICAgICAgICAgICAgIGtmcmVlKGFzLT51cmItPnNldHVwX3BhY2tldCk7CisJdXNiX2ZyZWVfdXJiKGFzLT51cmIpOworICAgICAgICBrZnJlZShhcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3luY19uZXdwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCit7CisgICAgICAgIHN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICAKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGxpc3RfYWRkX3RhaWwoJmFzLT5hc3luY2xpc3QsICZwcy0+YXN5bmNfcGVuZGluZyk7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3luY19yZW1vdmVwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCit7CisgICAgICAgIHN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICAKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGxpc3RfZGVsX2luaXQoJmFzLT5hc3luY2xpc3QpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBzdHJ1Y3QgYXN5bmMgKmFzID0gTlVMTDsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5KCZwcy0+YXN5bmNfY29tcGxldGVkKSkgeworICAgICAgICAgICAgICAgIGFzID0gbGlzdF9lbnRyeShwcy0+YXN5bmNfY29tcGxldGVkLm5leHQsIHN0cnVjdCBhc3luYywgYXN5bmNsaXN0KTsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbF9pbml0KCZhcy0+YXN5bmNsaXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworICAgICAgICByZXR1cm4gYXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFzeW5jICphc3luY19nZXRwZW5kaW5nKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqdXNlcnVyYikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IGFzeW5jICphczsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmcHMtPmFzeW5jX3BlbmRpbmcsIGFzeW5jbGlzdCkKKwkJaWYgKGFzLT51c2VydXJiID09IHVzZXJ1cmIpIHsKKwkJCWxpc3RfZGVsX2luaXQoJmFzLT5hc3luY2xpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBhczsKKwkJfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYXN5bmNfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHN0cnVjdCBhc3luYyAqYXMgPSAoc3RydWN0IGFzeW5jICopdXJiLT5jb250ZXh0OworICAgICAgICBzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKKwlzdHJ1Y3Qgc2lnaW5mbyBzaW5mbzsKKworICAgICAgICBzcGluX2xvY2soJnBzLT5sb2NrKTsKKyAgICAgICAgbGlzdF9tb3ZlX3RhaWwoJmFzLT5hc3luY2xpc3QsICZwcy0+YXN5bmNfY29tcGxldGVkKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJnBzLT5sb2NrKTsKKwlpZiAoYXMtPnNpZ25yKSB7CisJCXNpbmZvLnNpX3NpZ25vID0gYXMtPnNpZ25yOworCQlzaW5mby5zaV9lcnJubyA9IGFzLT51cmItPnN0YXR1czsKKwkJc2luZm8uc2lfY29kZSA9IFNJX0FTWU5DSU87CisJCXNpbmZvLnNpX2FkZHIgPSBhcy0+dXNlcnVyYjsKKwkJc2VuZF9zaWdfaW5mbyhhcy0+c2lnbnIsICZzaW5mbywgYXMtPnRhc2spOworCX0KKyAgICAgICAgd2FrZV91cCgmcHMtPndhaXQpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FzeW5jIChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKKwkJYXMgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBhc3luYywgYXN5bmNsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmYXMtPmFzeW5jbGlzdCk7CisKKwkJLyogZHJvcCB0aGUgc3BpbmxvY2sgc28gdGhlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gcnVuICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJCXVzYl9raWxsX3VyYihhcy0+dXJiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCXdoaWxlIChhcykgeworCQlmcmVlX2FzeW5jKGFzKTsKKwkJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCX0KK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9hc3luY19vbl9pbnRlcmZhY2UgKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB1bnNpZ25lZCBpbnQgaWZudW0pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnEsIGhpdGxpc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUlOSVRfTElTVF9IRUFEKCZoaXRsaXN0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgcSwgJnBzLT5hc3luY19wZW5kaW5nKQorCQlpZiAoaWZudW0gPT0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYXN5bmMsIGFzeW5jbGlzdCktPmlmbnVtKQorCQkJbGlzdF9tb3ZlX3RhaWwocCwgJmhpdGxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJZGVzdHJveV9hc3luYyhwcywgJmhpdGxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9hbGxfYXN5bmMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCit7CisJICAgICAgICBkZXN0cm95X2FzeW5jKHBzLCAmcHMtPmFzeW5jX3BlbmRpbmcpOworfQorCisvKgorICogaW50ZXJmYWNlIGNsYWltcyBhcmUgbWFkZSBvbmx5IGF0IHRoZSByZXF1ZXN0IG9mIHVzZXIgbGV2ZWwgY29kZSwKKyAqIHdoaWNoIGNhbiBhbHNvIHJlbGVhc2UgdGhlbSAoZXhwbGljaXRseSBvciBieSBjbG9zaW5nIGZpbGVzKS4KKyAqIHRoZXkncmUgYWxzbyB1bmRvbmUgd2hlbiBkZXZpY2VzIGRpc2Nvbm5lY3QuCisgKi8KKworc3RhdGljIGludCBkcml2ZXJfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgZHJpdmVyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwl1bnNpZ25lZCBpbnQgaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwlpZiAoIXBzKQorCQlyZXR1cm47CisKKwkvKiBOT1RFOiAgdGhpcyByZWxpZXMgb24gdXNiY29yZSBoYXZpbmcgY2FuY2VsZWQgYW5kIGNvbXBsZXRlZAorCSAqIGFsbCBwZW5kaW5nIEkvTyByZXF1ZXN0czsgMi42IGRvZXMgdGhhdC4KKwkgKi8KKworCWlmIChsaWtlbHkoaWZudW0gPCA4KnNpemVvZihwcy0+aWZjbGFpbWVkKSkpCisJCWNsZWFyX2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpOworCWVsc2UKKwkJd2FybigiaW50ZXJmYWNlIG51bWJlciAldSBvdXQgb2YgcmFuZ2UiLCBpZm51bSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCS8qIGZvcmNlIGFzeW5jIHJlcXVlc3RzIHRvIGNvbXBsZXRlICovCisJZGVzdHJveV9hc3luY19vbl9pbnRlcmZhY2UocHMsIGlmbnVtKTsKK30KKworc3RydWN0IHVzYl9kcml2ZXIgdXNiZnNfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JmcyIsCisJLnByb2JlID0JZHJpdmVyX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JZHJpdmVyX2Rpc2Nvbm5lY3QsCit9OworCitzdGF0aWMgaW50IGNsYWltaW50ZihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgaW50IGlmbnVtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCWludCBlcnI7CisKKwlpZiAoaWZudW0gPj0gOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiAtRUlOVkFMOworCS8qIGFscmVhZHkgY2xhaW1lZCAqLworCWlmICh0ZXN0X2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpKQorCQlyZXR1cm4gMDsKKworCS8qIGxvY2sgYWdhaW5zdCBvdGhlciBjaGFuZ2VzIHRvIGRyaXZlciBiaW5kaW5ncyAqLworCWRvd25fd3JpdGUoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCWludGYgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBpZm51bSk7CisJaWYgKCFpbnRmKQorCQllcnIgPSAtRU5PRU5UOworCWVsc2UKKwkJZXJyID0gdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYmZzX2RyaXZlciwgaW50ZiwgcHMpOworCXVwX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlpZiAoZXJyID09IDApCisJCXNldF9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJlbGVhc2VpbnRmKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB1bnNpZ25lZCBpbnQgaWZudW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgZXJyOworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoaWZudW0gPj0gOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiBlcnI7CisJZGV2ID0gcHMtPmRldjsKKwkvKiBsb2NrIGFnYWluc3Qgb3RoZXIgY2hhbmdlcyB0byBkcml2ZXIgYmluZGluZ3MgKi8KKwlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgaWZudW0pOworCWlmICghaW50ZikKKwkJZXJyID0gLUVOT0VOVDsKKwllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKSkgeworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZ1c2Jmc19kcml2ZXIsIGludGYpOworCQllcnIgPSAwOworCX0KKwl1cF93cml0ZSgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjaGVja2ludGYoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHVuc2lnbmVkIGludCBpZm51bSkKK3sKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCWlmIChpZm51bSA+PSA4KnNpemVvZihwcy0+aWZjbGFpbWVkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHRlc3RfYml0KGlmbnVtLCAmcHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiAwOworCS8qIGlmIG5vdCB5ZXQgY2xhaW1lZCwgY2xhaW0gaXQgZm9yIHRoZSBkcml2ZXIgKi8KKwlkZXZfd2FybigmcHMtPmRldi0+ZGV2LCAidXNiZnM6IHByb2Nlc3MgJWQgKCVzKSBkaWQgbm90IGNsYWltIGludGVyZmFjZSAldSBiZWZvcmUgdXNlXG4iLAorCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIGlmbnVtKTsKKwlyZXR1cm4gY2xhaW1pbnRmKHBzLCBpZm51bSk7Cit9CisKK3N0YXRpYyBpbnQgZmluZGludGZlcChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZXApCit7CisJdW5zaWduZWQgaW50IGksIGosIGU7CisgICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwdDsKKworCWlmIChlcCAmIH4oVVNCX0RJUl9JTnwweGYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldi0+YWN0Y29uZmlnKQorCQlyZXR1cm4gLUVTUkNIOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCWludGYgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQlmb3IgKGogPSAwOyBqIDwgaW50Zi0+bnVtX2FsdHNldHRpbmc7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgYWx0cyA9ICZpbnRmLT5hbHRzZXR0aW5nW2pdOworCQkJZm9yIChlID0gMDsgZSA8IGFsdHMtPmRlc2MuYk51bUVuZHBvaW50czsgZSsrKSB7CisJCQkJZW5kcHQgPSAmYWx0cy0+ZW5kcG9pbnRbZV0uZGVzYzsKKwkJCQlpZiAoZW5kcHQtPmJFbmRwb2ludEFkZHJlc3MgPT0gZXApCisJCQkJCXJldHVybiBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIC1FTk9FTlQ7IAorfQorCitzdGF0aWMgaW50IGNoZWNrX2N0cmxyZWNpcChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgaW50IHJlcXVlc3R0eXBlLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCWlmIChVU0JfVFlQRV9WRU5ET1IgPT0gKFVTQl9UWVBFX01BU0sgJiByZXF1ZXN0dHlwZSkpCisJCXJldHVybiAwOworCisJaW5kZXggJj0gMHhmZjsKKwlzd2l0Y2ggKHJlcXVlc3R0eXBlICYgVVNCX1JFQ0lQX01BU0spIHsKKwljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKKwkJaWYgKChyZXQgPSBmaW5kaW50ZmVwKHBzLT5kZXYsIGluZGV4KSkgPj0gMCkKKwkJCXJldCA9IGNoZWNraW50ZihwcywgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6CisJCXJldCA9IGNoZWNraW50ZihwcywgaW5kZXgpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGZpbGUgb3BlcmF0aW9ucworICovCitzdGF0aWMgaW50IHVzYmRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IGRldl9zdGF0ZSAqcHM7CisJaW50IHJldDsKKworCS8qIAorCSAqIG5vIGxvY2tpbmcgbmVjZXNzYXJ5IGhlcmUsIGFzIGNocmRldl9vcGVuIGhhcyB0aGUga2VybmVsIGxvY2sKKwkgKiAoc3RpbGwgYWNxdWlyZSB0aGUga2VybmVsIGxvY2sgZm9yIHNhZmV0eSkKKwkgKi8KKwlyZXQgPSAtRU5PTUVNOworCWlmICghKHBzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9zdGF0ZSksIEdGUF9LRVJORUwpKSkKKwkJZ290byBvdXRfbm9sb2NrOworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSAtRU5PRU5UOworCWRldiA9IHVzYl9nZXRfZGV2KGlub2RlLT51LmdlbmVyaWNfaXApOworCWlmICghZGV2KSB7CisJCWtmcmVlKHBzKTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IDA7CisJcHMtPmRldiA9IGRldjsKKwlwcy0+ZmlsZSA9IGZpbGU7CisJc3Bpbl9sb2NrX2luaXQoJnBzLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHMtPmFzeW5jX3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZwcy0+YXN5bmNfY29tcGxldGVkKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcy0+d2FpdCk7CisJcHMtPmRpc2NzaWduciA9IDA7CisJcHMtPmRpc2N0YXNrID0gY3VycmVudDsKKwlwcy0+ZGlzY2NvbnRleHQgPSBOVUxMOworCXBzLT5pZmNsYWltZWQgPSAwOworCXdtYigpOworCWxpc3RfYWRkX3RhaWwoJnBzLT5saXN0LCAmZGV2LT5maWxlbGlzdCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHM7Cisgb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKyBvdXRfbm9sb2NrOgorICAgICAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVzYmRldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJdW5zaWduZWQgaW50IGlmbnVtOworCisJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJbGlzdF9kZWxfaW5pdCgmcHMtPmxpc3QpOworCWZvciAoaWZudW0gPSAwOyBwcy0+aWZjbGFpbWVkICYmIGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCk7CisJCQlpZm51bSsrKSB7CisJCWlmICh0ZXN0X2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpKQorCQkJcmVsZWFzZWludGYocHMsIGlmbnVtKTsKKwl9CisJZGVzdHJveV9hbGxfYXN5bmMocHMpOworCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CisJdXNiX3B1dF9kZXYoZGV2KTsKKwlwcy0+ZGV2ID0gTlVMTDsKKwlrZnJlZShwcyk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfY29udHJvbChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcHMtPmRldjsKKwlzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyIGN0cmw7CisJdW5zaWduZWQgaW50IHRtbzsKKwl1bnNpZ25lZCBjaGFyICp0YnVmOworCWludCBpLCBqLCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSBjaGVja19jdHJscmVjaXAocHMsIGN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLndJbmRleCkpKQorCQlyZXR1cm4gcmV0OworCWlmIChjdHJsLndMZW5ndGggPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghKHRidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCXRtbyA9IGN0cmwudGltZW91dDsKKwlpZiAoY3RybC5iUmVxdWVzdFR5cGUgJiAweDgwKSB7CisJCWlmIChjdHJsLndMZW5ndGggJiYgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGN0cmwuZGF0YSwgY3RybC53TGVuZ3RoKSkgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCByZWFkOiBiUmVxdWVzdD0lMDJ4IGJScmVxdWVzdFR5cGU9JTAyeCB3VmFsdWU9JTA0eCB3SW5kZXg9JTA0eFxuIiwgCisJCQljdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4KTsKKworCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCQlpID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIGN0cmwuYlJlcXVlc3QsIGN0cmwuYlJlcXVlc3RUeXBlLAorCQkJCSAgICAgICBjdHJsLndWYWx1ZSwgY3RybC53SW5kZXgsIHRidWYsIGN0cmwud0xlbmd0aCwgdG1vKTsKKwkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJCWlmICgoaSA+IDApICYmIGN0cmwud0xlbmd0aCkgeworCQkJaWYgKHVzYmZzX3Nub29wKSB7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiY29udHJvbCByZWFkOiBkYXRhICIpOworCQkJCWZvciAoaiA9IDA7IGogPCBjdHJsLndMZW5ndGg7ICsraikKKwkJCQkJcHJpbnRrICgiJTAyeCAiLCAodW5zaWduZWQgY2hhcikodGJ1Zilbal0pOworCQkJCXByaW50aygiXG4iKTsKKwkJCX0KKwkJCWlmIChjb3B5X3RvX3VzZXIoY3RybC5kYXRhLCB0YnVmLCBjdHJsLndMZW5ndGgpKSB7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGN0cmwud0xlbmd0aCkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKHRidWYsIGN0cmwuZGF0YSwgY3RybC53TGVuZ3RoKSkgeworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfQorCQlzbm9vcCgmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBiUmVxdWVzdD0lMDJ4IGJScmVxdWVzdFR5cGU9JTAyeCB3VmFsdWU9JTA0eCB3SW5kZXg9JTA0eFxuIiwgCisJCQljdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4KTsKKwkJaWYgKHVzYmZzX3Nub29wKSB7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBkYXRhOiAiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBjdHJsLndMZW5ndGg7ICsraikKKwkJCQlwcmludGsgKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CisJCQlwcmludGsoIlxuIik7CisJCX0KKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwKKwkJCQkgICAgICAgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LCB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CisJCXVzYl9sb2NrX2RldmljZShkZXYpOworCX0KKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CisJaWYgKGk8MCAmJiBpICE9IC1FUElQRSkgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInVzYmZzOiBVU0JERVZGU19DT05UUk9MICIKKwkJCSAgICJmYWlsZWQgY21kICVzIHJxdCAldSBycSAldSBsZW4gJXUgcmV0ICVkXG4iLAorCQkJICAgY3VycmVudC0+Y29tbSwgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwuYlJlcXVlc3QsCisJCQkgICBjdHJsLndMZW5ndGgsIGkpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBwcm9jX2J1bGsoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlciBidWxrOworCXVuc2lnbmVkIGludCB0bW8sIGxlbjEsIHBpcGU7CisJaW50IGxlbjI7CisJdW5zaWduZWQgY2hhciAqdGJ1ZjsKKwlpbnQgaSwgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWxrLCBhcmcsIHNpemVvZihidWxrKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gZmluZGludGZlcChwcy0+ZGV2LCBidWxrLmVwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCByZXQpKSkKKwkJcmV0dXJuIHJldDsKKwlpZiAoYnVsay5lcCAmIFVTQl9ESVJfSU4pCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCBidWxrLmVwICYgMHg3Zik7CisJZWxzZQorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwgYnVsay5lcCAmIDB4N2YpOworCWlmICghdXNiX21heHBhY2tldChkZXYsIHBpcGUsICEoYnVsay5lcCAmIFVTQl9ESVJfSU4pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuMSA9IGJ1bGsubGVuOworCWlmIChsZW4xID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh0YnVmID0ga21hbGxvYyhsZW4xLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCXRtbyA9IGJ1bGsudGltZW91dDsKKwlpZiAoYnVsay5lcCAmIDB4ODApIHsKKwkJaWYgKGxlbjEgJiYgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1bGsuZGF0YSwgbGVuMSkpIHsKKwkJCWtmcmVlKHRidWYpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwkJaWYgKCFpICYmIGxlbjIpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVsay5kYXRhLCB0YnVmLCBsZW4yKSkgeworCQkJCWtmcmVlKHRidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxlbjEpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcih0YnVmLCBidWxrLmRhdGEsIGxlbjEpKSB7CisJCQkJa2ZyZWUodGJ1Zik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwl9CisJa2ZyZWUodGJ1Zik7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKwlyZXR1cm4gbGVuMjsKK30KKworc3RhdGljIGludCBwcm9jX3Jlc2V0ZXAoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgaW50IGVwOworCWludCByZXQ7CisKKwlpZiAoZ2V0X3VzZXIoZXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSBmaW5kaW50ZmVwKHBzLT5kZXYsIGVwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCByZXQpKSkKKwkJcmV0dXJuIHJldDsKKwl1c2Jfc2V0dG9nZ2xlKHBzLT5kZXYsIGVwICYgMHhmLCAhKGVwICYgVVNCX0RJUl9JTiksIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfY2xlYXJoYWx0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXVuc2lnbmVkIGludCBlcDsKKwlpbnQgcGlwZTsKKwlpbnQgcmV0OworCisJaWYgKGdldF91c2VyKGVwLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZykpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gZmluZGludGZlcChwcy0+ZGV2LCBlcCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGNoZWNraW50ZihwcywgcmV0KSkpCisJCXJldHVybiByZXQ7CisJaWYgKGVwICYgVVNCX0RJUl9JTikKKyAgICAgICAgICAgICAgICBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHBzLT5kZXYsIGVwICYgMHg3Zik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHBzLT5kZXYsIGVwICYgMHg3Zik7CisKKwlyZXR1cm4gdXNiX2NsZWFyX2hhbHQocHMtPmRldiwgcGlwZSk7Cit9CisJCQorCitzdGF0aWMgaW50IHByb2NfZ2V0ZHJpdmVyKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc19nZXRkcml2ZXIgZ2Q7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJaW50IHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZ2QsIGFyZywgc2l6ZW9mKGdkKSkpCisJCXJldHVybiAtRUZBVUxUOworCWRvd25fcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJaW50ZiA9IHVzYl9pZm51bV90b19pZihwcy0+ZGV2LCBnZC5pbnRlcmZhY2UpOworCWlmICghaW50ZiB8fCAhaW50Zi0+ZGV2LmRyaXZlcikKKwkJcmV0ID0gLUVOT0RBVEE7CisJZWxzZSB7CisJCXN0cm5jcHkoZ2QuZHJpdmVyLCBpbnRmLT5kZXYuZHJpdmVyLT5uYW1lLAorCQkJCXNpemVvZihnZC5kcml2ZXIpKTsKKwkJcmV0ID0gKGNvcHlfdG9fdXNlcihhcmcsICZnZCwgc2l6ZW9mKGdkKSkgPyAtRUZBVUxUIDogMCk7CisJfQorCXVwX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19jb25uZWN0aW5mbyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8gY2k7CisKKwljaS5kZXZudW0gPSBwcy0+ZGV2LT5kZXZudW07CisJY2kuc2xvdyA9IHBzLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1c7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjaSwgc2l6ZW9mKGNpKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfcmVzZXRkZXZpY2Uoc3RydWN0IGRldl9zdGF0ZSAqcHMpCit7CisJcmV0dXJuIHVzYl9yZXNldF9kZXZpY2UocHMtPmRldik7CisKK30KKworc3RhdGljIGludCBwcm9jX3NldGludGYoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSBzZXRpbnRmOworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNldGludGYsIGFyZywgc2l6ZW9mKHNldGludGYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSBjaGVja2ludGYocHMsIHNldGludGYuaW50ZXJmYWNlKSkpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHVzYl9zZXRfaW50ZXJmYWNlKHBzLT5kZXYsIHNldGludGYuaW50ZXJmYWNlLAorCQkJc2V0aW50Zi5hbHRzZXR0aW5nKTsKK30KKworc3RhdGljIGludCBwcm9jX3NldGNvbmZpZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgdTsKKwlpbnQgc3RhdHVzID0gMDsKKyAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOworCisJaWYgKGdldF91c2VyKHUsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKyAJYWN0Y29uZmlnID0gcHMtPmRldi0+YWN0Y29uZmlnOworIAorIAkvKiBEb24ndCB0b3VjaCB0aGUgZGV2aWNlIGlmIGFueSBpbnRlcmZhY2VzIGFyZSBjbGFpbWVkLgorIAkgKiBJdCBjb3VsZCBpbnRlcmZlcmUgd2l0aCBvdGhlciBkcml2ZXJzJyBvcGVyYXRpb25zLCBhbmQgaWYKKwkgKiBhbiBpbnRlcmZhY2UgaXMgY2xhaW1lZCBieSB1c2JmcyBpdCBjb3VsZCBlYXNpbHkgZGVhZGxvY2suCisJICovCisgCWlmIChhY3Rjb25maWcpIHsKKyAJCWludCBpOworIAorIAkJZm9yIChpID0gMDsgaSA8IGFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgKytpKSB7CisgCQkJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChhY3Rjb25maWctPmludGVyZmFjZVtpXSkpIHsKKwkJCQlkZXZfd2FybiAoJnBzLT5kZXYtPmRldiwKKwkJCQkJInVzYmZzOiBpbnRlcmZhY2UgJWQgY2xhaW1lZCAiCisJCQkJCSJ3aGlsZSAnJXMnIHNldHMgY29uZmlnICMlZFxuIiwKKwkJCQkJYWN0Y29uZmlnLT5pbnRlcmZhY2VbaV0KKwkJCQkJCS0+Y3VyX2FsdHNldHRpbmcKKwkJCQkJCS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCQljdXJyZW50LT5jb21tLCB1KTsKKyNpZiAwCS8qIEZJWE1FOiAgZW5hYmxlIGluIDIuNi4xMCBvciBzbyAqLworIAkJCQlzdGF0dXMgPSAtRUJVU1k7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCX0KKyAJCX0KKyAJfQorCisJLyogU0VUX0NPTkZJR1VSQVRJT04gaXMgb2Z0ZW4gYWJ1c2VkIGFzIGEgImNoZWFwIiBkcml2ZXIgcmVzZXQsCisJICogc28gYXZvaWQgdXNiX3NldF9jb25maWd1cmF0aW9uKCkncyBraWNrIHRvIHN5c2ZzCisJICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChhY3Rjb25maWcgJiYgYWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgPT0gdSkKKwkJCXN0YXR1cyA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHBzLT5kZXYpOworCQllbHNlCisJCQlzdGF0dXMgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24ocHMtPmRldiwgdSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHByb2NfZG9fc3VibWl0dXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1dXJiLAorCQkJICAgICBzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIF9fdXNlciAqaXNvX2ZyYW1lX2Rlc2MsCisJCQkgICAgIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyAqaXNvcGt0ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCBhc3luYyAqYXM7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHIgPSBOVUxMOworCXVuc2lnbmVkIGludCB1LCB0b3RsZW4sIGlzb2ZybWxlbjsKKwlpbnQgcmV0LCBpbnRlcnZhbCA9IDAsIGlmbnVtID0gLTE7CisKKwlpZiAodXVyYi0+ZmxhZ3MgJiB+KFVTQkRFVkZTX1VSQl9JU09fQVNBUHxVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LfAorCQkJICAgVVJCX05PX0ZTQlJ8VVJCX1pFUk9fUEFDS0VUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF1dXJiLT5idWZmZXIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh1dXJiLT5zaWduciAhPSAwICYmICh1dXJiLT5zaWduciA8IFNJR1JUTUlOIHx8IHV1cmItPnNpZ25yID4gU0lHUlRNQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh1dXJiLT50eXBlID09IFVTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0wgJiYgKHV1cmItPmVuZHBvaW50ICYgflVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gMCkpIHsKKwkJaWYgKChpZm51bSA9IGZpbmRpbnRmZXAocHMtPmRldiwgdXVyYi0+ZW5kcG9pbnQpKSA8IDApCisJCQlyZXR1cm4gaWZudW07CisJCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCBpZm51bSkpKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgIT0gMCkKKwkJZXAgPSBwcy0+ZGV2LT5lcF9pbiBbdXVyYi0+ZW5kcG9pbnQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0tdOworCWVsc2UKKwkJZXAgPSBwcy0+ZGV2LT5lcF9vdXQgW3V1cmItPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLXTsKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlzd2l0Y2godXVyYi0+dHlwZSkgeworCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQ09OVFJPTDoKKwkJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIG1pbiA4IGJ5dGUgc2V0dXAgcGFja2V0LCBtYXggYXJiaXRyYXJ5ICovCisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoIDwgOCB8fCB1dXJiLT5idWZmZXJfbGVuZ3RoID4gUEFHRV9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghKGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoY29weV9mcm9tX3VzZXIoZHIsIHV1cmItPmJ1ZmZlciwgOCkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoIDwgKGxlMTZfdG9fY3B1cCgmZHItPndMZW5ndGgpICsgOCkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgocmV0ID0gY2hlY2tfY3RybHJlY2lwKHBzLCBkci0+YlJlcXVlc3RUeXBlLCBsZTE2X3RvX2NwdXAoJmRyLT53SW5kZXgpKSkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJdXVyYi0+ZW5kcG9pbnQgPSAodXVyYi0+ZW5kcG9pbnQgJiB+VVNCX0VORFBPSU5UX0RJUl9NQVNLKSB8IChkci0+YlJlcXVlc3RUeXBlICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKTsKKwkJdXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSAwOworCQl1dXJiLT5idWZmZXJfbGVuZ3RoID0gbGUxNl90b19jcHVwKCZkci0+d0xlbmd0aCk7CisJCXV1cmItPmJ1ZmZlciArPSA4OworCQlpZiAoIWFjY2Vzc19vaygodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKSA/ICBWRVJJRllfV1JJVEUgOiBWRVJJRllfUkVBRCwgdXVyYi0+YnVmZmVyLCB1dXJiLT5idWZmZXJfbGVuZ3RoKSkgeworCQkJa2ZyZWUoZHIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0JVTEs6CisJCXN3aXRjaCAoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogYWxsb3cgc2luZ2xlLXNob3QgaW50ZXJydXB0IHRyYW5zZmVycywgYXQgYm9ndXMgcmF0ZXMgKi8KKwkJfQorCQl1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IDA7CisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghYWNjZXNzX29rKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pID8gVkVSSUZZX1dSSVRFIDogVkVSSUZZX1JFQUQsIHV1cmItPmJ1ZmZlciwgdXVyYi0+YnVmZmVyX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lTTzoKKwkJLyogYXJiaXRyYXJ5IGxpbWl0ICovCisJCWlmICh1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDEgfHwgdXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAxMjgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWludGVydmFsID0gMSA8PCBtaW4gKDE1LCBlcC0+ZGVzYy5iSW50ZXJ2YWwgLSAxKTsKKwkJaXNvZnJtbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MpICogdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCWlmICghKGlzb3BrdCA9IGttYWxsb2MoaXNvZnJtbGVuLCBHRlBfS0VSTkVMKSkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGlzb3BrdCwgaXNvX2ZyYW1lX2Rlc2MsIGlzb2ZybWxlbikpIHsKKwkJCWtmcmVlKGlzb3BrdCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlmb3IgKHRvdGxlbiA9IHUgPSAwOyB1IDwgdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IHUrKykgeworCQkJaWYgKGlzb3BrdFt1XS5sZW5ndGggPiAxMDIzKSB7CisJCQkJa2ZyZWUoaXNvcGt0KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOworCQl9CisJCWlmICh0b3RsZW4gPiAzMjc2OCkgeworCQkJa2ZyZWUoaXNvcGt0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXV1cmItPmJ1ZmZlcl9sZW5ndGggPSB0b3RsZW47CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFQ6CisJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKKwkJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBzLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJaW50ZXJ2YWwgPSAxIDw8IG1pbiAoMTUsIGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpOworCQllbHNlCisJCQlpbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbDsKKwkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFhY2Nlc3Nfb2soKHV1cmItPmVuZHBvaW50ICYgVVNCX0RJUl9JTikgPyBWRVJJRllfV1JJVEUgOiBWRVJJRllfUkVBRCwgdXVyYi0+YnVmZmVyLCB1dXJiLT5idWZmZXJfbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIShhcyA9IGFsbG9jX2FzeW5jKHV1cmItPm51bWJlcl9vZl9wYWNrZXRzKSkpIHsKKwkJaWYgKGlzb3BrdCkKKwkJCWtmcmVlKGlzb3BrdCk7CisJCWlmIChkcikKKwkJCWtmcmVlKGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghKGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2ModXVyYi0+YnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmIChpc29wa3QpCisJCQlrZnJlZShpc29wa3QpOworCQlpZiAoZHIpCisJCQlrZnJlZShkcik7CisJCWZyZWVfYXN5bmMoYXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisgICAgICAgIGFzLT51cmItPmRldiA9IHBzLT5kZXY7CisgICAgICAgIGFzLT51cmItPnBpcGUgPSAodXVyYi0+dHlwZSA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKHBzLT5kZXYsIHV1cmItPmVuZHBvaW50ICYgMHhmKSB8ICh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pOworICAgICAgICBhcy0+dXJiLT50cmFuc2Zlcl9mbGFncyA9IHV1cmItPmZsYWdzOworCWFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1dXJiLT5idWZmZXJfbGVuZ3RoOworCWFzLT51cmItPnNldHVwX3BhY2tldCA9ICh1bnNpZ25lZCBjaGFyKilkcjsKKwlhcy0+dXJiLT5zdGFydF9mcmFtZSA9IHV1cmItPnN0YXJ0X2ZyYW1lOworCWFzLT51cmItPm51bWJlcl9vZl9wYWNrZXRzID0gdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJYXMtPnVyYi0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgYXMtPnVyYi0+Y29udGV4dCA9IGFzOworICAgICAgICBhcy0+dXJiLT5jb21wbGV0ZSA9IGFzeW5jX2NvbXBsZXRlZDsKKwlmb3IgKHRvdGxlbiA9IHUgPSAwOyB1IDwgdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IHUrKykgeworCQlhcy0+dXJiLT5pc29fZnJhbWVfZGVzY1t1XS5vZmZzZXQgPSB0b3RsZW47CisJCWFzLT51cmItPmlzb19mcmFtZV9kZXNjW3VdLmxlbmd0aCA9IGlzb3BrdFt1XS5sZW5ndGg7CisJCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOworCX0KKwlpZiAoaXNvcGt0KQorCQlrZnJlZShpc29wa3QpOworCWFzLT5wcyA9IHBzOworICAgICAgICBhcy0+dXNlcnVyYiA9IGFyZzsKKwlpZiAodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKQorCQlhcy0+dXNlcmJ1ZmZlciA9IHV1cmItPmJ1ZmZlcjsKKwllbHNlCisJCWFzLT51c2VyYnVmZmVyID0gTlVMTDsKKwlhcy0+c2lnbnIgPSB1dXJiLT5zaWducjsKKwlhcy0+aWZudW0gPSBpZm51bTsKKwlhcy0+dGFzayA9IGN1cnJlbnQ7CisJaWYgKCEodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1dXJiLT5idWZmZXIsIGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpKSB7CisJCQlmcmVlX2FzeW5jKGFzKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQorICAgICAgICBhc3luY19uZXdwZW5kaW5nKGFzKTsKKyAgICAgICAgaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihhcy0+dXJiLCBHRlBfS0VSTkVMKSkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcHMtPmRldi0+ZGV2LCAidXNiZnM6IHVzYl9zdWJtaXRfdXJiIHJldHVybmVkICVkXG4iLCByZXQpOworICAgICAgICAgICAgICAgIGFzeW5jX3JlbW92ZXBlbmRpbmcoYXMpOworICAgICAgICAgICAgICAgIGZyZWVfYXN5bmMoYXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19zdWJtaXR1cmIoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX3VyYiB1dXJiOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1dXJiLCBhcmcsIHNpemVvZih1dXJiKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHByb2NfZG9fc3VibWl0dXJiKHBzLCAmdXVyYiwgKCgoc3RydWN0IHVzYmRldmZzX3VyYiBfX3VzZXIgKilhcmcpLT5pc29fZnJhbWVfZGVzYyksIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY191bmxpbmt1cmIoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGFzeW5jICphczsKKworCWFzID0gYXN5bmNfZ2V0cGVuZGluZyhwcywgYXJnKTsKKwlpZiAoIWFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl1c2Jfa2lsbF91cmIoYXMtPnVyYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc2NvbXBsKHN0cnVjdCBhc3luYyAqYXMsIHZvaWQgX191c2VyICogX191c2VyICphcmcpCit7CisJc3RydWN0IHVyYiAqdXJiID0gYXMtPnVyYjsKKwlzdHJ1Y3QgdXNiZGV2ZnNfdXJiIF9fdXNlciAqdXNlcnVyYiA9IGFzLT51c2VydXJiOworCXZvaWQgX191c2VyICphZGRyID0gYXMtPnVzZXJ1cmI7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYXMtPnVzZXJidWZmZXIpCisJCWlmIChjb3B5X3RvX3VzZXIoYXMtPnVzZXJidWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+c3RhdHVzLCAmdXNlcnVyYi0+c3RhdHVzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+YWN0dWFsX2xlbmd0aCwgJnVzZXJ1cmItPmFjdHVhbF9sZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5lcnJvcl9jb3VudCwgJnVzZXJ1cmItPmVycm9yX2NvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoISh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaWYgKHB1dF91c2VyKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCSAgICAgJnVzZXJ1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcih1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cywKKwkJCSAgICAgJnVzZXJ1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlmcmVlX2FzeW5jKGFzKTsKKworCWlmIChwdXRfdXNlcihhZGRyLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhc3luYyogcmVhcF9hcyhzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3sKKyAgICAgICAgREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IGFzeW5jICphcyA9IE5VTEw7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcHMtPndhaXQsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKChhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcykpKQorCQkJYnJlYWs7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCQlzY2hlZHVsZSgpOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBzLT53YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZXR1cm4gYXM7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZWFwdXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXMgPSByZWFwX2FzKHBzKTsKKwlpZiAoYXMpCisJCXJldHVybiBwcm9jZXNzY29tcGwoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHByb2NfcmVhcHVyYm5vbmJsb2NrKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXM7CisKKwlpZiAoIShhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcykpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gcHJvY2Vzc2NvbXBsKGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCitzdGF0aWMgaW50IGdldF91cmIzMihzdHJ1Y3QgdXNiZGV2ZnNfdXJiICprdXJiLAorCQkgICAgIHN0cnVjdCB1c2JkZXZmc191cmIzMiBfX3VzZXIgKnV1cmIpCit7CisJX191MzIgIHVwdHI7CisJaWYgKGdldF91c2VyKGt1cmItPnR5cGUsICZ1dXJiLT50eXBlKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmVuZHBvaW50LCAmdXVyYi0+ZW5kcG9pbnQpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+c3RhdHVzLCAmdXVyYi0+c3RhdHVzKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmZsYWdzLCAmdXVyYi0+ZmxhZ3MpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+YnVmZmVyX2xlbmd0aCwgJnV1cmItPmJ1ZmZlcl9sZW5ndGgpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+YWN0dWFsX2xlbmd0aCwgJnV1cmItPmFjdHVhbF9sZW5ndGgpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+c3RhcnRfZnJhbWUsICZ1dXJiLT5zdGFydF9mcmFtZSkgfHwKKwkgICAgX19nZXRfdXNlcihrdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgJnV1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmVycm9yX2NvdW50LCAmdXVyYi0+ZXJyb3JfY291bnQpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+c2lnbnIsICZ1dXJiLT5zaWducikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKF9fZ2V0X3VzZXIodXB0ciwgJnV1cmItPmJ1ZmZlcikpCisJCXJldHVybiAtRUZBVUxUOworCWt1cmItPmJ1ZmZlciA9IGNvbXBhdF9wdHIodXB0cik7CisJaWYgKF9fZ2V0X3VzZXIodXB0ciwgJnV1cmItPmJ1ZmZlcikpCisJCXJldHVybiAtRUZBVUxUOworCWt1cmItPnVzZXJjb250ZXh0ID0gY29tcGF0X3B0cih1cHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nfc3VibWl0dXJiX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfdXJiIHV1cmI7CisKKwlpZiAoZ2V0X3VyYjMyKCZ1dXJiLChzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBwcm9jX2RvX3N1Ym1pdHVyYihwcywgJnV1cmIsICgoc3RydWN0IHVzYmRldmZzX3VyYiBfX3VzZXIgKilhcmcpLT5pc29fZnJhbWVfZGVzYywgYXJnKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzY29tcGxfY29tcGF0KHN0cnVjdCBhc3luYyAqYXMsIHZvaWQgX191c2VyICogX191c2VyICphcmcpCit7CisJc3RydWN0IHVyYiAqdXJiID0gYXMtPnVyYjsKKwlzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgX191c2VyICp1c2VydXJiID0gYXMtPnVzZXJ1cmI7CisJdm9pZCBfX3VzZXIgKmFkZHIgPSBhcy0+dXNlcnVyYjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcy0+dXNlcmJ1ZmZlcikKKwkJaWYgKGNvcHlfdG9fdXNlcihhcy0+dXNlcmJ1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5zdGF0dXMsICZ1c2VydXJiLT5zdGF0dXMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5hY3R1YWxfbGVuZ3RoLCAmdXNlcnVyYi0+YWN0dWFsX2xlbmd0aCkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwdXRfdXNlcih1cmItPmVycm9yX2NvdW50LCAmdXNlcnVyYi0+ZXJyb3JfY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpZiAocHV0X3VzZXIodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoLAorCQkJICAgICAmdXNlcnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHB1dF91c2VyKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzLAorCQkJICAgICAmdXNlcnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCWZyZWVfYXN5bmMoYXMpOworCWlmIChwdXRfdXNlcigodTMyKSh1NjQpYWRkciwgKHUzMiBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3JlYXB1cmJfY29tcGF0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXMgPSByZWFwX2FzKHBzKTsKKwlpZiAoYXMpCisJCXJldHVybiBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwcm9jX3JlYXB1cmJub25ibG9ja19jb21wYXQoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGFzeW5jICphczsKKworCXByaW50aygicmVhcHVyYm5ibG9ja1xuIik7CisJaWYgKCEoYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpKSkKKwkJcmV0dXJuIC1FQUdBSU47CisJcHJpbnRrKCJyZWFwIGdvdCBhcyAlcFxuIiwgYXMpOworCXJldHVybiBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBwcm9jX2Rpc2Nvbm5lY3RzaWduYWwoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwgZHM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmRzLCBhcmcsIHNpemVvZihkcykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoZHMuc2lnbnIgIT0gMCAmJiAoZHMuc2lnbnIgPCBTSUdSVE1JTiB8fCBkcy5zaWduciA+IFNJR1JUTUFYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHMtPmRpc2NzaWduciA9IGRzLnNpZ25yOworCXBzLT5kaXNjY29udGV4dCA9IGRzLmNvbnRleHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19jbGFpbWludGVyZmFjZShzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgaWZudW07CisKKwlpZiAoZ2V0X3VzZXIoaWZudW0sICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGNsYWltaW50ZihwcywgaWZudW0pOworfQorCitzdGF0aWMgaW50IHByb2NfcmVsZWFzZWludGVyZmFjZShzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgaWZudW07CisJaW50IHJldDsKKworCWlmIChnZXRfdXNlcihpZm51bSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKHJldCA9IHJlbGVhc2VpbnRmKHBzLCBpZm51bSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXN0cm95X2FzeW5jX29uX2ludGVyZmFjZSAocHMsIGlmbnVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX2lvY3RsIChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwJY3RybDsKKwlpbnQJCQlzaXplOworCXZvaWQJCQkqYnVmID0gTlVMTDsKKwlpbnQJCQlyZXR2YWwgPSAwOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICAgICppbnRmID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAgICAgICAqZHJpdmVyID0gTlVMTDsKKwlpbnQJCQlpOworCisJLyogZ2V0IGlucHV0IHBhcmFtZXRlcnMgYW5kIGFsbG9jIGJ1ZmZlciAqLworCWlmIChjb3B5X2Zyb21fdXNlcigmY3RybCwgYXJnLCBzaXplb2YgKGN0cmwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChzaXplID0gX0lPQ19TSVpFIChjdHJsLmlvY3RsX2NvZGUpKSA+IDApIHsKKwkJaWYgKChidWYgPSBrbWFsbG9jIChzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoKF9JT0NfRElSKGN0cmwuaW9jdGxfY29kZSkgJiBfSU9DX1dSSVRFKSkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyIChidWYsIGN0cmwuZGF0YSwgc2l6ZSkpIHsKKwkJCQlrZnJlZSAoYnVmKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1lbXNldCAoYnVmLCAwLCBzaXplKTsKKwkJfQorCX0KKworCWlmICghY29ubmVjdGVkKHBzLT5kZXYpKSB7CisJCWlmIChidWYpCisJCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHZhbCA9IC1FSE9TVFVOUkVBQ0g7CisJZWxzZSBpZiAoIShpbnRmID0gdXNiX2lmbnVtX3RvX2lmIChwcy0+ZGV2LCBjdHJsLmlmbm8pKSkKKyAgICAgICAgICAgICAgIHJldHZhbCA9IC1FSU5WQUw7CisJZWxzZSBzd2l0Y2ggKGN0cmwuaW9jdGxfY29kZSkgeworCisJLyogZGlzY29ubmVjdCBrZXJuZWwgZHJpdmVyIGZyb20gaW50ZXJmYWNlICovCisJY2FzZSBVU0JERVZGU19ESVNDT05ORUNUOgorCisJCS8qIGRvbid0IGFsbG93IHRoZSB1c2VyIHRvIHVuYmluZCB0aGUgaHViIGRyaXZlciBmcm9tCisJCSAqIGEgaHViIHdpdGggY2hpbGRyZW4gdG8gbWFuYWdlICovCisJCWZvciAoaSA9IDA7IGkgPCBwcy0+ZGV2LT5tYXhjaGlsZDsgKytpKSB7CisJCQlpZiAocHMtPmRldi0+Y2hpbGRyZW5baV0pCisJCQkJcmV0dmFsID0gLUVCVVNZOworCQl9CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKworCQlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwkJaWYgKGludGYtPmRldi5kcml2ZXIpIHsKKwkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiZGlzY29ubmVjdCBieSB1c2Jmc1xuIik7CisJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKGRyaXZlciwgaW50Zik7CisJCX0gZWxzZQorCQkJcmV0dmFsID0gLUVOT0RBVEE7CisJCXVwX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwkJYnJlYWs7CisKKwkvKiBsZXQga2VybmVsIGRyaXZlcnMgdHJ5IHRvIChyZSliaW5kIHRvIHRoZSBpbnRlcmZhY2UgKi8KKwljYXNlIFVTQkRFVkZTX0NPTk5FQ1Q6CisJCXVzYl91bmxvY2tfZGV2aWNlKHBzLT5kZXYpOworCQl1c2JfbG9ja19hbGxfZGV2aWNlcygpOworCQlidXNfcmVzY2FuX2RldmljZXMoaW50Zi0+ZGV2LmJ1cyk7CisJCXVzYl91bmxvY2tfYWxsX2RldmljZXMoKTsKKwkJdXNiX2xvY2tfZGV2aWNlKHBzLT5kZXYpOworCQlicmVhazsKKworCS8qIHRhbGsgZGlyZWN0bHkgdG8gdGhlIGludGVyZmFjZSdzIGRyaXZlciAqLworCWRlZmF1bHQ6CisJCWRvd25fcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJCWlmIChpbnRmLT5kZXYuZHJpdmVyKQorCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKwkJaWYgKGRyaXZlciA9PSBOVUxMIHx8IGRyaXZlci0+aW9jdGwgPT0gTlVMTCkgeworCQkJcmV0dmFsID0gLUVOT1RUWTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IGRyaXZlci0+aW9jdGwgKGludGYsIGN0cmwuaW9jdGxfY29kZSwgYnVmKTsKKwkJCWlmIChyZXR2YWwgPT0gLUVOT0lPQ1RMQ01EKQorCQkJCXJldHZhbCA9IC1FTk9UVFk7CisJCX0KKwkJdXBfcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJfQorCisJLyogY2xlYW51cCBhbmQgcmV0dXJuICovCisJaWYgKHJldHZhbCA+PSAwCisJCQkmJiAoX0lPQ19ESVIgKGN0cmwuaW9jdGxfY29kZSkgJiBfSU9DX1JFQUQpICE9IDAKKwkJCSYmIHNpemUgPiAwCisJCQkmJiBjb3B5X3RvX3VzZXIgKGN0cmwuZGF0YSwgYnVmLCBzaXplKSAhPSAwKQorCQlyZXR2YWwgPSAtRUZBVUxUOworCWlmIChidWYgIT0gTlVMTCkKKwkJa2ZyZWUgKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIE5PVEU6ICBBbGwgcmVxdWVzdHMgaGVyZSB0aGF0IGhhdmUgaW50ZXJmYWNlIG51bWJlcnMgYXMgcGFyYW1ldGVycworICogYXJlIGFzc3VtaW5nIHRoYXQgc29tZWhvdyB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBwcmV2ZW50ZWQgZnJvbQorICogY2hhbmdpbmcuICBCdXQgdGhlcmUncyBubyBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQuLi4KKyAqLworc3RhdGljIGludCB1c2JkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IHJldCA9IC1FTk9UVFk7CisKKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCXJldHVybiAtRVBFUk07CisJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJaWYgKCFjb25uZWN0ZWQoZGV2KSkgeworCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVVNCREVWRlNfQ09OVFJPTDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENPTlRST0xcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfY29udHJvbChwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQlVMSzoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IEJVTEtcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfYnVsayhwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVTRVRFUDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFU0VURVBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVzZXRlcChwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVTRVQ6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRVNFVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19yZXNldGRldmljZShwcyk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19DTEVBUl9IQUxUOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogQ0xFQVJfSEFMVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19jbGVhcmhhbHQocHMsIHApOworCQlpZiAocmV0ID49IDApCisJCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX0dFVERSSVZFUjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IEdFVERSSVZFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19nZXRkcml2ZXIocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQ09OTkVDVElORk86CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBDT05ORUNUSU5GT1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19jb25uZWN0aW5mbyhwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19TRVRJTlRFUkZBQ0U6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBTRVRJTlRFUkZBQ0VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2Nfc2V0aW50ZihwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogU0VUQ09ORklHVVJBVElPTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19zZXRjb25maWcocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfU1VCTUlUVVJCOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogU1VCTUlUVVJCXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3N1Ym1pdHVyYihwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19DT01QQVQKKworCWNhc2UgVVNCREVWRlNfU1VCTUlUVVJCMzI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBTVUJNSVRVUkIzMlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19zdWJtaXR1cmJfY29tcGF0KHBzLCBwKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19SRUFQVVJCMzI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCMzJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVhcHVyYl9jb21wYXQocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQkRFTEFZMzJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVhcHVyYm5vbmJsb2NrX2NvbXBhdChwcywgcCk7CisJCWJyZWFrOworCisjZW5kaWYKKworCWNhc2UgVVNCREVWRlNfRElTQ0FSRFVSQjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IERJU0NBUkRVUkJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfdW5saW5rdXJiKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFQVBVUkI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3JlYXB1cmIocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVBUFVSQk5ERUxBWToKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFQVBVUkJERUxBWVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19yZWFwdXJibm9uYmxvY2socHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfRElTQ1NJR05BTDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IERJU0NTSUdOQUxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfZGlzY29ubmVjdHNpZ25hbChwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19DTEFJTUlOVEVSRkFDRToKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENMQUlNSU5URVJGQUNFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX2NsYWltaW50ZXJmYWNlKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0U6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUxFQVNFSU5URVJGQUNFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3JlbGVhc2VpbnRlcmZhY2UocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfSU9DVEw6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBJT0NUTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19pb2N0bChwcywgcCk7CisJCWJyZWFrOworCX0KKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCWlmIChyZXQgPj0gMCkKKwkJaW5vZGUtPmlfYXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJcmV0dXJuIHJldDsKK30KKworLyogTm8ga2VybmVsIGxvY2sgLSBmaW5lICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYmRldl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSAoc3RydWN0IGRldl9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJcG9sbF93YWl0KGZpbGUsICZwcy0+d2FpdCwgd2FpdCk7CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmICFsaXN0X2VtcHR5KCZwcy0+YXN5bmNfY29tcGxldGVkKSkKKwkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwlpZiAoIWNvbm5lY3RlZChwcy0+ZGV2KSkKKwkJbWFzayB8PSBQT0xMRVJSIHwgUE9MTEhVUDsKKwlyZXR1cm4gbWFzazsKK30KKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jmc19kZXZpY2VfZmlsZV9vcGVyYXRpb25zID0geworCS5sbHNlZWsgPQl1c2JkZXZfbHNlZWssCisJLnJlYWQgPQkJdXNiZGV2X3JlYWQsCisJLnBvbGwgPQkJdXNiZGV2X3BvbGwsCisJLmlvY3RsID0JdXNiZGV2X2lvY3RsLAorCS5vcGVuID0JCXVzYmRldl9vcGVuLAorCS5yZWxlYXNlID0JdXNiZGV2X3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGNlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9maWxlLmMKKyAqCisgKiAoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqIChDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICogKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OSAobmV3IFVTQiBhcmNoaXRlY3R1cmUpCisgKiAoQykgQ29weXJpZ2h0IFJhbmR5IER1bmxhcCAyMDAwCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMDAtMjAwMSAoa2VybmVsIGhvdHBsdWcsIHVzYl9kZXZpY2VfaWQsCisgCW1vcmUgZG9jcywgZXRjKQorICogKEMpIENvcHlyaWdodCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIDIwMDAKKyAqICAgICAodXNiX2RldmljZV9pZCBtYXRjaGluZyBjaGFuZ2VzIGJ5IEFkYW0gSi4gUmljaHRlcikKKyAqIChDKSBDb3B5cmlnaHQgR3JlZyBLcm9haC1IYXJ0bWFuIDIwMDItMjAwMworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBNQVhfVVNCX01JTk9SUwkyNTYKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICp1c2JfbWlub3JzW01BWF9VU0JfTUlOT1JTXTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWlub3JfbG9jayk7CisKK3N0YXRpYyBpbnQgdXNiX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmM7CisJaW50IGVyciA9IC1FTk9ERVY7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqb2xkX2ZvcHMsICpuZXdfZm9wcyA9IE5VTEw7CisKKwlzcGluX2xvY2sgKCZtaW5vcl9sb2NrKTsKKwljID0gdXNiX21pbm9yc1ttaW5vcl07CisKKwlpZiAoIWMgfHwgIShuZXdfZm9wcyA9IGZvcHNfZ2V0KGMpKSkgeworCQlzcGluX3VubG9jaygmbWlub3JfbG9jayk7CisJCXJldHVybiBlcnI7CisJfQorCXNwaW5fdW5sb2NrKCZtaW5vcl9sb2NrKTsKKworCW9sZF9mb3BzID0gZmlsZS0+Zl9vcDsKKwlmaWxlLT5mX29wID0gbmV3X2ZvcHM7CisJLyogQ3VyaW91c2VyIGFuZCBjdXJpb3VzZXIuLi4gTlVMTCAtPm9wZW4oKSBhcyAibm8gZGV2aWNlIiA/ICovCisJaWYgKGZpbGUtPmZfb3AtPm9wZW4pCisJCWVyciA9IGZpbGUtPmZfb3AtPm9wZW4oaW5vZGUsZmlsZSk7CisJaWYgKGVycikgeworCQlmb3BzX3B1dChmaWxlLT5mX29wKTsKKwkJZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KG9sZF9mb3BzKTsKKwl9CisJZm9wc19wdXQob2xkX2ZvcHMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCXVzYl9vcGVuLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGFzc19zaW1wbGUgKnVzYl9jbGFzczsKKworaW50IHVzYl9tYWpvcl9pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIiwgJnVzYl9mb3BzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJyKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB1c2IgZGV2aWNlcyIsIFVTQl9NQUpPUik7CisJCWdvdG8gb3V0OworCX0KKworCXVzYl9jbGFzcyA9IGNsYXNzX3NpbXBsZV9jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2IiKTsKKwlpZiAoSVNfRVJSKHVzYl9jbGFzcykpIHsKKwkJZXJyKCJjbGFzc19zaW1wbGVfY3JlYXRlIGZhaWxlZCBmb3IgdXNiIGRldmljZXMiKTsKKwkJdW5yZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIik7CisJCWdvdG8gb3V0OworCX0KKworCWRldmZzX21rX2RpcigidXNiIik7CisKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgdXNiX21ham9yX2NsZWFudXAodm9pZCkKK3sKKwljbGFzc19zaW1wbGVfZGVzdHJveSh1c2JfY2xhc3MpOworCWRldmZzX3JlbW92ZSgidXNiIik7CisJdW5yZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIik7Cit9CisKKy8qKgorICogdXNiX3JlZ2lzdGVyX2RldiAtIHJlZ2lzdGVyIGEgVVNCIGRldmljZSwgYW5kIGFzayBmb3IgYSBtaW5vciBudW1iZXIKKyAqIEBpbnRmOiBwb2ludGVyIHRvIHRoZSB1c2JfaW50ZXJmYWNlIHRoYXQgaXMgYmVpbmcgcmVnaXN0ZXJlZAorICogQGNsYXNzX2RyaXZlcjogcG9pbnRlciB0byB0aGUgdXNiX2NsYXNzX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UKKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgYWxsIFVTQiBkcml2ZXJzIHRoYXQgdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLgorICogSWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBlbmFibGVkLCB0aGUgbWlub3IgbnVtYmVyIHdpbGwgYmUKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBvdXQgb2YgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9uZXMuICBJZiBpdCBpcyBub3QKKyAqIGVuYWJsZWQsIHRoZSBtaW5vciBudW1iZXIgd2lsbCBiZSBiYXNlZCBvbiB0aGUgbmV4dCBhdmFpbGFibGUgZnJlZSBtaW5vciwKKyAqIHN0YXJ0aW5nIGF0IHRoZSBjbGFzc19kcml2ZXItPm1pbm9yX2Jhc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHNvIGNyZWF0ZXMgdGhlIGRldmZzIGZpbGUgZm9yIHRoZSB1c2IgZGV2aWNlLCBpZiBkZXZmcworICogaXMgZW5hYmxlZCwgYW5kIGNyZWF0ZXMgYSB1c2IgY2xhc3MgZGV2aWNlIGluIHRoZSBzeXNmcyB0cmVlLgorICoKKyAqIHVzYl9kZXJlZ2lzdGVyX2RldigpIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBkb25lIHdpdGgKKyAqIHRoZSBtaW5vciBudW1iZXJzIGdpdmVuIG91dCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgLUVJTlZBTCBpZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgd2l0aCB0cnlpbmcgdG8gcmVnaXN0ZXIgYQorICogZGV2aWNlLCBhbmQgMCBvbiBzdWNjZXNzLgorICovCitpbnQgdXNiX3JlZ2lzdGVyX2RldihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciAqY2xhc3NfZHJpdmVyKQoreworCWludCByZXR2YWwgPSAtRUlOVkFMOworCWludCBtaW5vcl9iYXNlID0gY2xhc3NfZHJpdmVyLT5taW5vcl9iYXNlOworCWludCBtaW5vciA9IDA7CisJY2hhciBuYW1lW0JVU19JRF9TSVpFXTsKKwljaGFyICp0ZW1wOworCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworCS8qIAorCSAqIFdlIGRvbid0IGNhcmUgd2hhdCB0aGUgZGV2aWNlIHRyaWVzIHRvIHN0YXJ0IGF0LCB3ZSB3YW50IHRvIHN0YXJ0CisJICogYXQgemVybyB0byBwYWNrIHRoZSBkZXZpY2VzIGludG8gdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBzcGFjZSB3aXRoCisJICogbm8gaG9sZXMgaW4gdGhlIG1pbm9yIHJhbmdlLgorCSAqLworCW1pbm9yX2Jhc2UgPSAwOworI2VuZGlmCisJaW50Zi0+bWlub3IgPSAtMTsKKworCWRiZyAoImxvb2tpbmcgZm9yIGEgbWlub3IsIHN0YXJ0aW5nIGF0ICVkIiwgbWlub3JfYmFzZSk7CisKKwlpZiAoY2xhc3NfZHJpdmVyLT5mb3BzID09IE5VTEwpCisJCWdvdG8gZXhpdDsKKworCXNwaW5fbG9jayAoJm1pbm9yX2xvY2spOworCWZvciAobWlub3IgPSBtaW5vcl9iYXNlOyBtaW5vciA8IE1BWF9VU0JfTUlOT1JTOyArK21pbm9yKSB7CisJCWlmICh1c2JfbWlub3JzW21pbm9yXSkKKwkJCWNvbnRpbnVlOworCisJCXVzYl9taW5vcnNbbWlub3JdID0gY2xhc3NfZHJpdmVyLT5mb3BzOworCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jayAoJm1pbm9yX2xvY2spOworCisJaWYgKHJldHZhbCkKKwkJZ290byBleGl0OworCisJaW50Zi0+bWlub3IgPSBtaW5vcjsKKworCS8qIGhhbmRsZSB0aGUgZGV2ZnMgcmVnaXN0cmF0aW9uICovCisJc25wcmludGYobmFtZSwgQlVTX0lEX1NJWkUsIGNsYXNzX2RyaXZlci0+bmFtZSwgbWlub3IgLSBtaW5vcl9iYXNlKTsKKwlkZXZmc19ta19jZGV2KE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLCBjbGFzc19kcml2ZXItPm1vZGUsIG5hbWUpOworCisJLyogY3JlYXRlIGEgdXNiIGNsYXNzIGRldmljZSBmb3IgdGhpcyB1c2IgaW50ZXJmYWNlICovCisJdGVtcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKwlpZiAodGVtcCAmJiAodGVtcFsxXSAhPSAweDAwKSkKKwkJKyt0ZW1wOworCWVsc2UKKwkJdGVtcCA9IG5hbWU7CisJaW50Zi0+Y2xhc3NfZGV2ID0gY2xhc3Nfc2ltcGxlX2RldmljZV9hZGQodXNiX2NsYXNzLCBNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgJmludGYtPmRldiwgIiVzIiwgdGVtcCk7CisJaWYgKElTX0VSUihpbnRmLT5jbGFzc19kZXYpKSB7CisJCXNwaW5fbG9jayAoJm1pbm9yX2xvY2spOworCQl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrICgmbWlub3JfbG9jayk7CisJCWRldmZzX3JlbW92ZSAobmFtZSk7CisJCXJldHZhbCA9IFBUUl9FUlIoaW50Zi0+Y2xhc3NfZGV2KTsKKwl9CitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9yZWdpc3Rlcl9kZXYpOworCisvKioKKyAqIHVzYl9kZXJlZ2lzdGVyX2RldiAtIGRlcmVnaXN0ZXIgYSBVU0IgZGV2aWNlJ3MgZHluYW1pYyBtaW5vci4KKyAqIEBpbnRmOiBwb2ludGVyIHRvIHRoZSB1c2JfaW50ZXJmYWNlIHRoYXQgaXMgYmVpbmcgZGVyZWdpc3RlcmVkCisgKiBAY2xhc3NfZHJpdmVyOiBwb2ludGVyIHRvIHRoZSB1c2JfY2xhc3NfZHJpdmVyIGZvciB0aGlzIGRldmljZQorICoKKyAqIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB1c2JfcmVnaXN0ZXJfZGV2KCkuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogd2hlbiB0aGUgVVNCIGRyaXZlciBpcyBmaW5pc2hlZCB3aXRoIHRoZSBtaW5vciBudW1iZXJzIGdvdHRlbiBmcm9tIGEKKyAqIGNhbGwgdG8gdXNiX3JlZ2lzdGVyX2RldigpICh1c3VhbGx5IHdoZW4gdGhlIGRldmljZSBpcyBkaXNjb25uZWN0ZWQKKyAqIGZyb20gdGhlIHN5c3RlbS4pCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHNvIGNsZWFucyB1cCB0aGUgZGV2ZnMgZmlsZSBmb3IgdGhlIHVzYiBkZXZpY2UsIGlmIGRldmZzCisgKiBpcyBlbmFibGVkLCBhbmQgcmVtb3ZlcyB0aGUgdXNiIGNsYXNzIGRldmljZSBmcm9tIHRoZSBzeXNmcyB0cmVlLgorICogCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgYWxsIGRyaXZlcnMgdGhhdCB1c2UgdGhlIFVTQiBtYWpvciBudW1iZXIuCisgKi8KK3ZvaWQgdXNiX2RlcmVnaXN0ZXJfZGV2KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzX2RyaXZlcikKK3sKKwlpbnQgbWlub3JfYmFzZSA9IGNsYXNzX2RyaXZlci0+bWlub3JfYmFzZTsKKwljaGFyIG5hbWVbQlVTX0lEX1NJWkVdOworCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworCW1pbm9yX2Jhc2UgPSAwOworI2VuZGlmCisKKwlpZiAoaW50Zi0+bWlub3IgPT0gLTEpCisJCXJldHVybjsKKworCWRiZyAoInJlbW92aW5nICVkIG1pbm9yIiwgaW50Zi0+bWlub3IpOworCisJc3Bpbl9sb2NrICgmbWlub3JfbG9jayk7CisJdXNiX21pbm9yc1tpbnRmLT5taW5vcl0gPSBOVUxMOworCXNwaW5fdW5sb2NrICgmbWlub3JfbG9jayk7CisKKwlzbnByaW50ZihuYW1lLCBCVVNfSURfU0laRSwgY2xhc3NfZHJpdmVyLT5uYW1lLCBpbnRmLT5taW5vciAtIG1pbm9yX2Jhc2UpOworCWRldmZzX3JlbW92ZSAobmFtZSk7CisJY2xhc3Nfc2ltcGxlX2RldmljZV9yZW1vdmUoTUtERVYoVVNCX01BSk9SLCBpbnRmLT5taW5vcikpOworCWludGYtPmNsYXNzX2RldiA9IE5VTEw7CisJaW50Zi0+bWlub3IgPSAtMTsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2RlcmVnaXN0ZXJfZGV2KTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YTNkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgRGF2aWQgQnJvd25lbGwgMjAwMC0yMDAyCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAiaGNkLmgiCisKKworLyogUENJLWJhc2VkIEhDcyBhcmUgbm9ybWFsLCBidXQgY3VzdG9tIGJ1cyBnbHVlIHNob3VsZCBiZSBvayAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKy8qKgorICogdXNiX2hjZF9wY2lfcHJvYmUgLSBpbml0aWFsaXplIFBDSS1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHByb2JlZAorICogQGlkOiBwY2kgaG90cGx1ZyBpZCBjb25uZWN0aW5nIGNvbnRyb2xsZXIgdG8gSENEIGZyYW1ld29yaworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIFBDSSByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHByb2JlKCkuCisgKi8KK2ludCB1c2JfaGNkX3BjaV9wcm9iZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBoY19kcml2ZXIJKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXR2YWw7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFpZCB8fCAhKGRyaXZlciA9IChzdHJ1Y3QgaGNfZHJpdmVyICopIGlkLT5kcml2ZXJfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlIChkZXYpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2LT5jdXJyZW50X3N0YXRlID0gMDsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJCisgICAgICAgIGlmICghZGV2LT5pcnEpIHsKKyAgICAgICAgCWRldl9lcnIgKCZkZXYtPmRldiwKKwkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gIENoZWNrIEJJT1MvUENJICVzIHNldHVwIVxuIiwKKwkJCXBjaV9uYW1lKGRldikpOworICAgCSAgICAgICAgcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworICAgICAgICB9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmZGV2LT5kZXYsIHBjaV9uYW1lKGRldikpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwlpZiAoZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpIHsJLy8gRUhDSSwgT0hDSQorCQloY2QtPnJzcmNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKGRldiwgMCk7CisJCWhjZC0+cnNyY19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChkZXYsIDApOworCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbiAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJjb250cm9sbGVyIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyMjsKKwkJfQorCQloY2QtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUgKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJCWlmIChoY2QtPnJlZ3MgPT0gTlVMTCkgeworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBtZW1vcnlcbiIpOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyMzsKKwkJfQorCisJfSBlbHNlIHsgCQkJCS8vIFVIQ0kKKwkJaW50CXJlZ2lvbjsKKworCQlmb3IgKHJlZ2lvbiA9IDA7IHJlZ2lvbiA8IFBDSV9ST01fUkVTT1VSQ0U7IHJlZ2lvbisrKSB7CisJCQlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MgKGRldiwgcmVnaW9uKSAmCisJCQkJCUlPUkVTT1VSQ0VfSU8pKQorCQkJCWNvbnRpbnVlOworCisJCQloY2QtPnJzcmNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKGRldiwgcmVnaW9uKTsKKwkJCWhjZC0+cnNyY19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChkZXYsIHJlZ2lvbik7CisJCQlpZiAocmVxdWVzdF9yZWdpb24gKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbikpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlZ2lvbiA9PSBQQ0lfUk9NX1JFU09VUkNFKSB7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJubyBpL28gcmVnaW9ucyBhdmFpbGFibGVcbiIpOworCQkJcmV0dmFsID0gLUVCVVNZOworCQkJZ290byBlcnIxOworCQl9CisJfQorCisjaWZkZWYgQ09ORklHX1BDSV9OQU1FUworCWhjZC0+cHJvZHVjdF9kZXNjID0gZGV2LT5wcmV0dHlfbmFtZTsKKyNlbmRpZgorCisJcGNpX3NldF9tYXN0ZXIgKGRldik7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZCAoaGNkLCBkZXYtPmlycSwgU0FfU0hJUlEpOworCWlmIChyZXR2YWwgIT0gMCkKKwkJZ290byBlcnI0OworCXJldHVybiByZXR2YWw7CisKKyBlcnI0OgorCWlmIChkcml2ZXItPmZsYWdzICYgSENEX01FTU9SWSkgeworCQlpb3VubWFwIChoY2QtPnJlZ3MpOworIGVycjM6CisJCXJlbGVhc2VfbWVtX3JlZ2lvbiAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl9IGVsc2UKKwkJcmVsZWFzZV9yZWdpb24gKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisgZXJyMjoKKwl1c2JfcHV0X2hjZCAoaGNkKTsKKyBlcnIxOgorCXBjaV9kaXNhYmxlX2RldmljZSAoZGV2KTsKKwlkZXZfZXJyICgmZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLCBwY2lfbmFtZShkZXYpLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9IAorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wY2lfcHJvYmUpOworCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3BjaV9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBQQ0ktYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfcGNpX3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyByZW1vdmUoKS4KKyAqLwordm9pZCB1c2JfaGNkX3BjaV9yZW1vdmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisKKwloY2QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuOworCisJdXNiX3JlbW92ZV9oY2QgKGhjZCk7CisJaWYgKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpIHsKKwkJaW91bm1hcCAoaGNkLT5yZWdzKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCX0gZWxzZSB7CisJCXJlbGVhc2VfcmVnaW9uIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCX0KKwl1c2JfcHV0X2hjZCAoaGNkKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9oY2RfcGNpX3JlbW92ZSk7CisKKworI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgY2hhciBfX2F0dHJpYnV0ZV91c2VkX18gKnBjaV9zdGF0ZSh1MzIgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoJCXJldHVybiAiRDAiOworCWNhc2UgMToJCXJldHVybiAiRDEiOworCWNhc2UgMjoJCXJldHVybiAiRDIiOworCWNhc2UgMzoJCXJldHVybiAiRDNob3QiOworCWNhc2UgNDoJCXJldHVybiAiRDNjb2xkIjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2hjZF9wY2lfc3VzcGVuZCAtIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCBvZiBhIFBDSS1iYXNlZCBIQ0QKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgc3VzcGVuZGVkCisgKiBAc3RhdGU6IHN0YXRlIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgZ29pbmcgaW50bworICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHN1c3BlbmQoKS4KKyAqLworaW50IHVzYl9oY2RfcGNpX3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXR2YWwgPSAwOworCWludAkJCWhhc19wY2lfcG07CisKKwloY2QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIGV2ZW4gd2hlbiB0aGUgUENJIGxheWVyIHJlamVjdHMgc29tZSBvZiB0aGUgUENJIGNhbGxzCisJICogYmVsb3csIEhDcyBjYW4gdHJ5IGdsb2JhbCBzdXNwZW5kIGFuZCByZWR1Y2UgRE1BIHRyYWZmaWMuCisJICogUE0tc2Vuc2l0aXZlIEhDRHMgbWF5IGFscmVhZHkgaGF2ZSBkb25lIHRoaXMuCisJICovCisJaGFzX3BjaV9wbSA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwlpZiAoc3RhdGUgPiA0KQorCQlzdGF0ZSA9IDQ7CisKKwlzd2l0Y2ggKGhjZC0+c3RhdGUpIHsKKworCS8qIGVudHJ5IGlmIHJvb3QgaHViIHdhc24ndCB5ZXQgc3VzcGVuZGVkIC4uLiBmcm9tIHN5c2ZzLAorCSAqIHdpdGhvdXQgYXV0b3N1c3BlbmQsIG9yIGlmIFVTQl9TVVNQRU5EIGlzbid0IGNvbmZpZ3VyZWQuCisJICovCisJY2FzZSBIQ19TVEFURV9SVU5OSU5HOgorCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCQlyZXR2YWwgPSBoY2QtPmRyaXZlci0+c3VzcGVuZCAoaGNkLCBzdGF0ZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkJInN1c3BlbmQgZmFpbCwgcmV0dmFsICVkXG4iLAorCQkJCQlyZXR2YWwpOworCQkJYnJlYWs7CisJCX0KKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCS8qIGVudHJ5IHdpdGggQ09ORklHX1VTQl9TVVNQRU5ELCBvciBoY2RzIHRoYXQgYXV0b3N1c3BlbmQ6IHRoZQorCSAqIGNvbnRyb2xsZXIgYW5kL29yIHJvb3QgaHViIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc3VzcGVuZGVkLAorCSAqIGJ1dCBpdCB3b24ndCBiZSByZWFkeSBmb3IgYSBQQ0kgcmVzdW1lIGNhbGwuCisJICoKKwkgKiBGSVhNRSBvbmx5IENPTkZJR19VU0JfU1VTUEVORCBndWFyYW50ZWVzIGh1Yl9zdXNwZW5kKCkgd2lsbAorCSAqIGhhdmUgYmVlbiBjYWxsZWQsIG90aGVyd2lzZSByb290IGh1YiB0aW1lcnMgc3RpbGwgcnVuIC4uLgorCSAqLworCWNhc2UgSENfU1RBVEVfU1VTUEVOREVEOgorCQlpZiAoc3RhdGUgPD0gZGV2LT5jdXJyZW50X3N0YXRlKQorCQkJYnJlYWs7CisKKwkJLyogbm8gRE1BIG9yIElSUXMgZXhjZXB0IGluIEQwICovCisJCWlmICghZGV2LT5jdXJyZW50X3N0YXRlKSB7CisJCQlwY2lfc2F2ZV9zdGF0ZSAoZGV2KTsKKwkJCXBjaV9kaXNhYmxlX2RldmljZSAoZGV2KTsKKwkJCWZyZWVfaXJxIChoY2QtPmlycSwgaGNkKTsKKwkJfQorCisJCWlmICghaGFzX3BjaV9wbSkgeworCQkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICItLT4gUENJIEQwL2xlZ2FjeVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFBPTElDWTogaWdub3JlIEQxL0QyL0QzaG90IGRpZmZlcmVuY2VzOworCQkgKiB3ZSBrbm93IEQzaG90IHdpbGwgYWx3YXlzIHdvcmsuCisJCSAqLworCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIHN0YXRlKTsKKwkJaWYgKHJldHZhbCA8IDAgJiYgc3RhdGUgPCAzKSB7CisJCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIDMpOworCQkJaWYgKHJldHZhbCA9PSAwKQorCQkJCXN0YXRlID0gMzsKKwkJfQorCQlpZiAocmV0dmFsID09IDApIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiLS0+IFBDSSAlc1xuIiwKKwkJCQkJcGNpX3N0YXRlKGRldi0+Y3VycmVudF9zdGF0ZSkpOworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCQkJcGNpX2VuYWJsZV93YWtlIChkZXYsIHN0YXRlLCBoY2QtPnJlbW90ZV93YWtldXApOworCQkJcGNpX2VuYWJsZV93YWtlIChkZXYsIDQsIGhjZC0+cmVtb3RlX3dha2V1cCk7CisjZW5kaWYKKwkJfSBlbHNlIGlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJQQ0kgJXMgc3VzcGVuZCBmYWlsLCAlZFxuIiwKKwkJCQkJcGNpX3N0YXRlKHN0YXRlKSwgcmV0dmFsKTsKKwkJCSh2b2lkKSB1c2JfaGNkX3BjaV9yZXN1bWUgKGRldik7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgImhjZCBzdGF0ZSAlZDsgbm90IHN1c3BlbmRlZFxuIiwKKwkJCWhjZC0+c3RhdGUpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwkvKiB1cGRhdGUgcG93ZXJfc3RhdGUgKipPTkxZKiogdG8gbWFrZSBzeXNmcyBoYXBwaWVyICovCisJaWYgKHJldHZhbCA9PSAwKQorCQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfaGNkX3BjaV9zdXNwZW5kKTsKKworLyoqCisgKiB1c2JfaGNkX3BjaV9yZXN1bWUgLSBwb3dlciBtYW5hZ2VtZW50IHJlc3VtZSBvZiBhIFBDSS1iYXNlZCBIQ0QKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVzdW1lZAorICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHJlc3VtZSgpLgorICovCitpbnQgdXNiX2hjZF9wY2lfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldHZhbDsKKwlpbnQJCQloYXNfcGNpX3BtOworCisJaGNkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaWYgKGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfU1VTUEVOREVEKSB7CisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkiY2FuJ3QgcmVzdW1lLCBub3Qgc3VzcGVuZGVkIVxuIik7CisJCXJldHVybiAwOworCX0KKwloYXNfcGNpX3BtID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfUE0pOworCisJLyogRDNjb2xkIHJlc3VtZSBpc24ndCB1c3VhbGx5IHJlcG9ydGVkIHRoaXMgd2F5Li4uICovCisJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJlc3VtZSBmcm9tIFBDSSAlcyVzXG4iLAorCQkJcGNpX3N0YXRlKGRldi0+Y3VycmVudF9zdGF0ZSksCisJCQloYXNfcGNpX3BtID8gIiIgOiAiIChsZWdhY3kpIik7CisKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CisKKwlpZiAoaGFzX3BjaV9wbSkKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZSAoZGV2LCAwKTsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEgKGRldi0+aXJxLCB1c2JfaGNkX2lycSwgU0FfU0hJUlEsCisJCQkJaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uLCBoY2QpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJImNhbid0IHJlc3RvcmUgSVJRIGFmdGVyIHJlc3VtZSFcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwloY2QtPnNhd19pcnEgPSAwOworCXBjaV9yZXN0b3JlX3N0YXRlIChkZXYpOworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCXBjaV9lbmFibGVfd2FrZSAoZGV2LCBkZXYtPmN1cnJlbnRfc3RhdGUsIDApOworCXBjaV9lbmFibGVfd2FrZSAoZGV2LCA0LCAwKTsKKyNlbmRpZgorCisJcmV0dmFsID0gaGNkLT5kcml2ZXItPnJlc3VtZSAoaGNkKTsKKwlpZiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKSB7CisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkicmVzdW1lIGZhaWwsIHJldHZhbCAlZFxuIiwgcmV0dmFsKTsKKwkJdXNiX2hjX2RpZWQgKGhjZCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9oY2RfcGNpX3Jlc3VtZSk7CisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjZlOWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMCwwICsxLDE4NDAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqIChDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICogKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OQorICogKEMpIENvcHlyaWdodCBSYW5keSBEdW5sYXAgMjAwMAorICogKEMpIENvcHlyaWdodCBEYXZpZCBCcm93bmVsbCAyMDAwLTIwMDIKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworI2RlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImhjZC5oIgorI2luY2x1ZGUgImh1Yi5oIgorCisKKy8vICNkZWZpbmUgVVNCX0JBTkRXSURUSF9NRVNTQUdFUworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgZnJhbWV3b3JrCisgKgorICogUGx1Z3MgaW50byB1c2Jjb3JlICh1c2JfYnVzKSBhbmQgbGV0cyBIQ0RzIHNoYXJlIGNvZGUsIG1pbmltaXppbmcKKyAqIEhDRC1zcGVjaWZpYyBiZWhhdmlvcnMvYnVncy4KKyAqCisgKiBUaGlzIGRvZXMgZXJyb3IgY2hlY2tzLCB0cmFja3MgZGV2aWNlcyBhbmQgdXJicywgYW5kIGRlbGVnYXRlcyB0byBhCisgKiAiaGNfZHJpdmVyIiBvbmx5IGZvciBjb2RlIChhbmQgZGF0YSkgdGhhdCByZWFsbHkgbmVlZHMgdG8ga25vdyBhYm91dAorICogaGFyZHdhcmUgZGlmZmVyZW5jZXMuICBUaGF0IGluY2x1ZGVzIHJvb3QgaHViIHJlZ2lzdGVycywgaS9vIHF1ZXVlcywKKyAqIGFuZCBzbyBvbiAuLi4gYnV0IGFzIGxpdHRsZSBlbHNlIGFzIHBvc3NpYmxlLgorICoKKyAqIFNoYXJlZCBjb2RlIGluY2x1ZGVzIG1vc3Qgb2YgdGhlICJyb290IGh1YiIgY29kZSAodGhlc2UgYXJlIGVtdWxhdGVkLAorICogdGhvdWdoIGVhY2ggSEMncyBoYXJkd2FyZSB3b3JrcyBkaWZmZXJlbnRseSkgYW5kIFBDSSBnbHVlLCBwbHVzIHJlcXVlc3QKKyAqIHRyYWNraW5nIG92ZXJoZWFkLiAgVGhlIEhDRCBjb2RlIHNob3VsZCBvbmx5IGJsb2NrIG9uIHNwaW5sb2NrcyBvciBvbgorICogaGFyZHdhcmUgaGFuZHNoYWtpbmc7IGJsb2NraW5nIG9uIHNvZnR3YXJlIGV2ZW50cyAoc3VjaCBhcyBvdGhlciBrZXJuZWwKKyAqIHRocmVhZHMgcmVsZWFzaW5nIHJlc291cmNlcywgb3IgY29tcGxldGluZyBhY3Rpb25zKSBpcyBhbGwgZ2VuZXJpYy4KKyAqCisgKiBIYXBwZW5zIHRoZSBVU0IgMi4wIHNwZWMgc2F5cyB0aGlzIHdvdWxkIGJlIGludmlzaWJsZSBpbnNpZGUgdGhlICJVU0JEIiwKKyAqIGFuZCBpbmNsdWRlcyBtb3N0bHkgYSAiSENESSIgKEhDRCBJbnRlcmZhY2UpIGFsb25nIHdpdGggc29tZSBBUElzIHVzZWQKKyAqIG9ubHkgYnkgdGhlIGh1YiBkcml2ZXIgLi4uIGFuZCB0aGF0IG5laXRoZXIgc2hvdWxkIGJlIHNlZW4gb3IgdXNlZCBieQorICogdXNiIGNsaWVudCBkZXZpY2UgZHJpdmVycy4KKyAqCisgKiBDb250cmlidXRvcnMgb2YgaWRlYXMgb3IgdW5hdHRyaWJ1dGVkIHBhdGNoZXMgaW5jbHVkZTogRGF2aWQgQnJvd25lbGwsCisgKiBSb21hbiBXZWlzc2dhZXJiZXIsIFJvcnkgQm9sdCwgR3JlZyBLcm9haC1IYXJ0bWFuLCAuLi4KKyAqCisgKiBISVNUT1JZOgorICogMjAwMi0wMi0yMQlQdWxsIGluIG1vc3Qgb2YgdGhlIHVzYl9idXMgc3VwcG9ydCBmcm9tIHVzYi5jOyBzb21lCisgKgkJYXNzb2NpYXRlZCBjbGVhbnVwLiAgInVzYl9oY2QiIHN0aWxsICE9ICJ1c2JfYnVzIi4KKyAqIDIwMDEtMTItMTIJSW5pdGlhbCBwYXRjaCB2ZXJzaW9uIGZvciBMaW51eCAyLjUuMSBrZXJuZWwuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaG9zdCBjb250cm9sbGVycyB3ZSBtYW5hZ2UgKi8KK0xJU1RfSEVBRCAodXNiX2J1c19saXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3QpOworCisvKiB1c2VkIHdoZW4gYWxsb2NhdGluZyBidXMgbnVtYmVycyAqLworI2RlZmluZSBVU0JfTUFYQlVTCQk2NAorc3RydWN0IHVzYl9idXNtYXAgeworCXVuc2lnbmVkIGxvbmcgYnVzbWFwIFtVU0JfTUFYQlVTIC8gKDgqc2l6ZW9mICh1bnNpZ25lZCBsb25nKSldOworfTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2J1c21hcCBidXNtYXA7CisKKy8qIHVzZWQgd2hlbiB1cGRhdGluZyBsaXN0IG9mIGhjZHMgKi8KK0RFQ0xBUkVfTVVURVggKHVzYl9idXNfbGlzdF9sb2NrKTsJLyogZXhwb3J0ZWQgb25seSBmb3IgdXNiZnMgKi8KK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3RfbG9jayk7CisKKy8qIHVzZWQgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB2aXJ0dWFsIHJvb3QgaHVicyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhoY2Rfcm9vdF9odWJfbG9jayk7CisKKy8qIHVzZWQgd2hlbiB1cGRhdGluZyBoY2QgZGF0YSAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhoY2RfZGF0YV9sb2NrKTsKKworLyogd2FpdCBxdWV1ZSBmb3Igc3luY2hyb25vdXMgdW5saW5rcyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodXNiX2tpbGxfdXJiX3F1ZXVlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFNoYXJhYmxlIGNodW5rcyBvZiByb290IGh1YiBjb2RlLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgS0VSTkVMX1JFTAkoKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweDBmZikKKyNkZWZpbmUgS0VSTkVMX1ZFUgkoKExJTlVYX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4MGZmKQorCisvKiB1c2IgMi4wIHJvb3QgaHViIGRldmljZSBkZXNjcmlwdG9yICovCitzdGF0aWMgY29uc3QgdTggdXNiMl9yaF9kZXZfZGVzY3JpcHRvciBbMThdID0geworCTB4MTIsICAgICAgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IERldmljZSAqLworCTB4MDAsIDB4MDIsIC8qICBfX2xlMTYgYmNkVVNCOyB2Mi4wICovCisKKwkweDA5LAkgICAgLyogIF9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsCSAgICAvKiAgX191OCAgYkRldmljZVN1YkNsYXNzOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiRGV2aWNlUHJvdG9jb2w7IFsgdXNiIDIuMCBzaW5nbGUgVFQgXSovCisJMHgwOCwgICAgICAgLyogIF9fdTggIGJNYXhQYWNrZXRTaXplMDsgOCBCeXRlcyAqLworCisJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KKyAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCisJS0VSTkVMX1ZFUiwgS0VSTkVMX1JFTCwgLyogIF9fbGUxNiBiY2REZXZpY2UgKi8KKworCTB4MDMsICAgICAgIC8qICBfX3U4ICBpTWFudWZhY3R1cmVyOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBpUHJvZHVjdDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgaVNlcmlhbE51bWJlcjsgKi8KKwkweDAxICAgICAgICAvKiAgX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOyAqLworfTsKKworLyogbm8gdXNiIDIuMCByb290IGh1YiAiZGV2aWNlIHF1YWxpZmllciIgZGVzY3JpcHRvcjogb25lIHNwZWVkIG9ubHkgKi8KKworLyogdXNiIDEuMSByb290IGh1YiBkZXZpY2UgZGVzY3JpcHRvciAqLworc3RhdGljIGNvbnN0IHU4IHVzYjExX3JoX2Rldl9kZXNjcmlwdG9yIFsxOF0gPSB7CisJMHgxMiwgICAgICAgLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgRGV2aWNlICovCisJMHgxMCwgMHgwMSwgLyogIF9fbGUxNiBiY2RVU0I7IHYxLjEgKi8KKworCTB4MDksCSAgICAvKiAgX191OCAgYkRldmljZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwJICAgIC8qICBfX3U4ICBiRGV2aWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGJEZXZpY2VQcm90b2NvbDsgWyBsb3cvZnVsbCBzcGVlZHMgb25seSBdICovCisJMHgwOCwgICAgICAgLyogIF9fdTggIGJNYXhQYWNrZXRTaXplMDsgOCBCeXRlcyAqLworCisJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KKyAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCisJS0VSTkVMX1ZFUiwgS0VSTkVMX1JFTCwgLyogIF9fbGUxNiBiY2REZXZpY2UgKi8KKworCTB4MDMsICAgICAgIC8qICBfX3U4ICBpTWFudWZhY3R1cmVyOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBpUHJvZHVjdDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgaVNlcmlhbE51bWJlcjsgKi8KKwkweDAxICAgICAgICAvKiAgX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOyAqLworfTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIGZvciBvdXIgcm9vdCBodWJzICovCisKK3N0YXRpYyBjb25zdCB1OCBmc19yaF9jb25maWdfZGVzY3JpcHRvciBbXSA9IHsKKworCS8qIG9uZSBjb25maWd1cmF0aW9uICovCisJMHgwOSwgICAgICAgLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgwMiwgICAgICAgLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgQ29uZmlndXJhdGlvbiAqLworCTB4MTksIDB4MDAsIC8qICBfX2xlMTYgd1RvdGFsTGVuZ3RoOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiTnVtSW50ZXJmYWNlczsgKDEpICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGJDb25maWd1cmF0aW9uVmFsdWU7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlDb25maWd1cmF0aW9uOyAqLworCTB4YzAsICAgICAgIC8qICBfX3U4ICBibUF0dHJpYnV0ZXM7IAorCQkJCSBCaXQgNzogbXVzdCBiZSBzZXQsCisJCQkJICAgICA2OiBTZWxmLXBvd2VyZWQsCisJCQkJICAgICA1OiBSZW1vdGUgd2FrZXVwLAorCQkJCSAgICAgNC4uMDogcmVzdmQgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgTWF4UG93ZXI7ICovCisgICAgICAKKwkvKiBVU0IgMS4xOgorCSAqIFVTQiAyLjAsIHNpbmdsZSBUVCBvcmdhbml6YXRpb24gKG1hbmRhdG9yeSk6CisJICoJb25lIGludGVyZmFjZSwgcHJvdG9jb2wgMAorCSAqCisJICogVVNCIDIuMCwgbXVsdGlwbGUgVFQgb3JnYW5pemF0aW9uIChvcHRpb25hbCk6CisJICoJdHdvIGludGVyZmFjZXMsIHByb3RvY29scyAxIChsaWtlIHNpbmdsZSBUVCkKKwkgKglhbmQgMiAobXVsdGlwbGUgVFQgbW9kZSkgLi4uIGNvbmZpZyBpcworCSAqCXNvbWV0aW1lcyBzZXR0YWJsZQorCSAqCU5PVCBJTVBMRU1FTlRFRAorCSAqLworCisJLyogb25lIGludGVyZmFjZSAqLworCTB4MDksICAgICAgIC8qICBfX3U4ICBpZl9iTGVuZ3RoOyAqLworCTB4MDQsICAgICAgIC8qICBfX3U4ICBpZl9iRGVzY3JpcHRvclR5cGU7IEludGVyZmFjZSAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlTnVtYmVyOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iQWx0ZXJuYXRlU2V0dGluZzsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgaWZfYk51bUVuZHBvaW50czsgKi8KKwkweDA5LCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VTdWJDbGFzczsgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZVByb3RvY29sOyBbdXNiMS4xIG9yIHNpbmdsZSB0dF0gKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfaUludGVyZmFjZTsgKi8KKyAgICAgCisJLyogb25lIGVuZHBvaW50IChzdGF0dXMgY2hhbmdlIGVuZHBvaW50KSAqLworCTB4MDcsICAgICAgIC8qICBfX3U4ICBlcF9iTGVuZ3RoOyAqLworCTB4MDUsICAgICAgIC8qICBfX3U4ICBlcF9iRGVzY3JpcHRvclR5cGU7IEVuZHBvaW50ICovCisJMHg4MSwgICAgICAgLyogIF9fdTggIGVwX2JFbmRwb2ludEFkZHJlc3M7IElOIEVuZHBvaW50IDEgKi8KKyAJMHgwMywgICAgICAgLyogIF9fdTggIGVwX2JtQXR0cmlidXRlczsgSW50ZXJydXB0ICovCisgCTB4MDIsIDB4MDAsIC8qICBfX2xlMTYgZXBfd01heFBhY2tldFNpemU7IDEgKyAoTUFYX1JPT1RfUE9SVFMgLyA4KSAqLworCTB4ZmYgICAgICAgIC8qICBfX3U4ICBlcF9iSW50ZXJ2YWw7ICgyNTVtcyAtLSB1c2IgMi4wIHNwZWMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggaHNfcmhfY29uZmlnX2Rlc2NyaXB0b3IgW10gPSB7CisKKwkvKiBvbmUgY29uZmlndXJhdGlvbiAqLworCTB4MDksICAgICAgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IENvbmZpZ3VyYXRpb24gKi8KKwkweDE5LCAweDAwLCAvKiAgX19sZTE2IHdUb3RhbExlbmd0aDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgYk51bUludGVyZmFjZXM7ICgxKSAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiQ29uZmlndXJhdGlvblZhbHVlOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpQ29uZmlndXJhdGlvbjsgKi8KKwkweGMwLCAgICAgICAvKiAgX191OCAgYm1BdHRyaWJ1dGVzOyAKKwkJCQkgQml0IDc6IG11c3QgYmUgc2V0LAorCQkJCSAgICAgNjogU2VsZi1wb3dlcmVkLAorCQkJCSAgICAgNTogUmVtb3RlIHdha2V1cCwKKwkJCQkgICAgIDQuLjA6IHJlc3ZkICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIE1heFBvd2VyOyAqLworICAgICAgCisJLyogVVNCIDEuMToKKwkgKiBVU0IgMi4wLCBzaW5nbGUgVFQgb3JnYW5pemF0aW9uIChtYW5kYXRvcnkpOgorCSAqCW9uZSBpbnRlcmZhY2UsIHByb3RvY29sIDAKKwkgKgorCSAqIFVTQiAyLjAsIG11bHRpcGxlIFRUIG9yZ2FuaXphdGlvbiAob3B0aW9uYWwpOgorCSAqCXR3byBpbnRlcmZhY2VzLCBwcm90b2NvbHMgMSAobGlrZSBzaW5nbGUgVFQpCisJICoJYW5kIDIgKG11bHRpcGxlIFRUIG1vZGUpIC4uLiBjb25maWcgaXMKKwkgKglzb21ldGltZXMgc2V0dGFibGUKKwkgKglOT1QgSU1QTEVNRU5URUQKKwkgKi8KKworCS8qIG9uZSBpbnRlcmZhY2UgKi8KKwkweDA5LCAgICAgICAvKiAgX191OCAgaWZfYkxlbmd0aDsgKi8KKwkweDA0LCAgICAgICAvKiAgX191OCAgaWZfYkRlc2NyaXB0b3JUeXBlOyBJbnRlcmZhY2UgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZU51bWJlcjsgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkFsdGVybmF0ZVNldHRpbmc7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGlmX2JOdW1FbmRwb2ludHM7ICovCisJMHgwOSwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VQcm90b2NvbDsgW3VzYjEuMSBvciBzaW5nbGUgdHRdICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2lJbnRlcmZhY2U7ICovCisgICAgIAorCS8qIG9uZSBlbmRwb2ludCAoc3RhdHVzIGNoYW5nZSBlbmRwb2ludCkgKi8KKwkweDA3LCAgICAgICAvKiAgX191OCAgZXBfYkxlbmd0aDsgKi8KKwkweDA1LCAgICAgICAvKiAgX191OCAgZXBfYkRlc2NyaXB0b3JUeXBlOyBFbmRwb2ludCAqLworCTB4ODEsICAgICAgIC8qICBfX3U4ICBlcF9iRW5kcG9pbnRBZGRyZXNzOyBJTiBFbmRwb2ludCAxICovCisgCTB4MDMsICAgICAgIC8qICBfX3U4ICBlcF9ibUF0dHJpYnV0ZXM7IEludGVycnVwdCAqLworIAkweDAyLCAweDAwLCAvKiAgX19sZTE2IGVwX3dNYXhQYWNrZXRTaXplOyAxICsgKE1BWF9ST09UX1BPUlRTIC8gOCkgKi8KKwkweDBjICAgICAgICAvKiAgX191OCAgZXBfYkludGVydmFsOyAoMjU2bXMgLS0gdXNiIDIuMCBzcGVjKSAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGhlbHBlciByb3V0aW5lIGZvciByZXR1cm5pbmcgc3RyaW5nIGRlc2NyaXB0b3JzIGluIFVURi0xNkxFCisgKiBpbnB1dCBjYW4gYWN0dWFsbHkgYmUgSVNPLTg4NTktMTsgQVNDSUkgaXMgaXRzIDctYml0IHN1YnNldAorICovCitzdGF0aWMgaW50IGFzY2lpMnV0ZiAoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKK3sKKwlpbnQgcmV0dmFsOworCisJZm9yIChyZXR2YWwgPSAwOyAqcyAmJiB1dGZtYXggPiAxOyB1dGZtYXggLT0gMiwgcmV0dmFsICs9IDIpIHsKKwkJKnV0ZisrID0gKnMrKzsKKwkJKnV0ZisrID0gMDsKKwl9CisJaWYgKHV0Zm1heCA+IDApIHsKKwkJKnV0ZiA9ICpzOworCQkrK3JldHZhbDsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIHJoX3N0cmluZyAtIHByb3ZpZGVzIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBhbmQgc2VyaWFsIHN0cmluZ3MgZm9yIHJvb3QgaHViCisgKiBAaWQ6IHRoZSBzdHJpbmcgSUQgbnVtYmVyICgxOiBzZXJpYWwgbnVtYmVyLCAyOiBwcm9kdWN0LCAzOiB2ZW5kb3IpCisgKiBAaGNkOiB0aGUgaG9zdCBjb250cm9sbGVyIGZvciB0aGlzIHJvb3QgaHViCisgKiBAdHlwZTogc3RyaW5nIGRlc2NyaWJpbmcgb3VyIGRyaXZlciAKKyAqIEBkYXRhOiByZXR1cm4gcGFja2V0IGluIFVURi0xNiBMRQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSByZXR1cm4gcGFja2V0CisgKgorICogUHJvZHVjZXMgZWl0aGVyIGEgbWFudWZhY3R1cmVyLCBwcm9kdWN0IG9yIHNlcmlhbCBudW1iZXIgc3RyaW5nIGZvciB0aGUKKyAqIHZpcnR1YWwgcm9vdCBodWIgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHJoX3N0cmluZyAoCisJaW50CQlpZCwKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAorCXU4CQkqZGF0YSwKKwlpbnQJCWxlbgorKSB7CisJY2hhciBidWYgWzEwMF07CisKKwkvLyBsYW5ndWFnZSBpZHMKKwlpZiAoaWQgPT0gMCkgeworCQlidWZbMF0gPSA0OyAgICBidWZbMV0gPSAzOwkvKiA0IGJ5dGVzIHN0cmluZyBkYXRhICovCisJCWJ1ZlsyXSA9IDB4MDk7IGJ1ZlszXSA9IDB4MDQ7CS8qIE1TRlQtc3BlYWsgZm9yICJlbi11cyIgKi8KKwkJbGVuID0gbWluIChsZW4sIDQpOworCQltZW1jcHkgKGRhdGEsIGJ1ZiwgbGVuKTsKKwkJcmV0dXJuIGxlbjsKKworCS8vIHNlcmlhbCBudW1iZXIKKwl9IGVsc2UgaWYgKGlkID09IDEpIHsKKwkJc3RybGNweSAoYnVmLCBoY2QtPnNlbGYuYnVzX25hbWUsIHNpemVvZiBidWYpOworCisJLy8gcHJvZHVjdCBkZXNjcmlwdGlvbgorCX0gZWxzZSBpZiAoaWQgPT0gMikgeworCQlzdHJsY3B5IChidWYsIGhjZC0+cHJvZHVjdF9kZXNjLCBzaXplb2YgYnVmKTsKKworIAkvLyBpZCAzID09IHZlbmRvciBkZXNjcmlwdGlvbgorCX0gZWxzZSBpZiAoaWQgPT0gMykgeworCQlzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJXMgJXMgJXMiLCBzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lLAorCQkJc3lzdGVtX3V0c25hbWUucmVsZWFzZSwgaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uKTsKKworCS8vIHVuc3VwcG9ydGVkIElEcyAtLT4gInByb3RvY29sIHN0YWxsIgorCX0gZWxzZQorCQlyZXR1cm4gLUVQSVBFOworCisJc3dpdGNoIChsZW4pIHsJCS8qIEFsbCBjYXNlcyBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlsZW4gPSAyICsgYXNjaWkydXRmIChidWYsIGRhdGEgKyAyLCBsZW4gLSAyKTsKKwljYXNlIDI6CisJCWRhdGEgWzFdID0gMzsJLyogdHlwZSA9PSBzdHJpbmcgKi8KKwljYXNlIDE6CisJCWRhdGEgWzBdID0gMiAqIChzdHJsZW4gKGJ1ZikgKyAxKTsKKwljYXNlIDA6CisJCTsJCS8qIENvbXBpbGVyIHdhbnRzIGEgc3RhdGVtZW50IGhlcmUgKi8KKwl9CisJcmV0dXJuIGxlbjsKK30KKworCisvKiBSb290IGh1YiBjb250cm9sIHRyYW5zZmVycyBleGVjdXRlIHN5bmNocm9ub3VzbHkgKi8KK3N0YXRpYyBpbnQgcmhfY2FsbF9jb250cm9sIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kOworIAl1MTYJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoOworCXU4CQkqdWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXU4CQl0YnVmIFtzaXplb2YgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IpXTsKKwljb25zdCB1OAkqYnVmcCA9IHRidWY7CisJaW50CQlsZW4gPSAwOworCWludAkJcGF0Y2hfd2FrZXVwID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzID0gMDsKKwlpbnQJCW47CisKKwljbWQgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwl0eXBlUmVxICA9IChjbWQtPmJSZXF1ZXN0VHlwZSA8PCA4KSB8IGNtZC0+YlJlcXVlc3Q7CisJd1ZhbHVlICAgPSBsZTE2X3RvX2NwdSAoY21kLT53VmFsdWUpOworCXdJbmRleCAgID0gbGUxNl90b19jcHUgKGNtZC0+d0luZGV4KTsKKwl3TGVuZ3RoICA9IGxlMTZfdG9fY3B1IChjbWQtPndMZW5ndGgpOworCisJaWYgKHdMZW5ndGggPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCWdvdG8gZXJyb3I7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXN3aXRjaCAodHlwZVJlcSkgeworCisJLyogREVWSUNFIFJFUVVFU1RTICovCisKKwljYXNlIERldmljZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCXRidWYgWzBdID0gKGhjZC0+cmVtb3RlX3dha2V1cCA8PCBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApCisJCQkJfCAoMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7CisJCXRidWYgWzFdID0gMDsKKwkJbGVuID0gMjsKKwkJYnJlYWs7CisJY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQlpZiAod1ZhbHVlID09IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCWhjZC0+cmVtb3RlX3dha2V1cCA9IDA7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCWlmIChoY2QtPmNhbl93YWtldXAgJiYgd1ZhbHVlID09IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCWhjZC0+cmVtb3RlX3dha2V1cCA9IDE7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWNhc2UgRGV2aWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCXRidWYgWzBdID0gMTsKKwkJbGVuID0gMTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJYnJlYWs7CisJY2FzZSBEZXZpY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJc3dpdGNoICh3VmFsdWUgJiAweGZmMDApIHsKKwkJY2FzZSBVU0JfRFRfREVWSUNFIDw8IDg6CisJCQlpZiAoaGNkLT5kcml2ZXItPmZsYWdzICYgSENEX1VTQjIpCisJCQkJYnVmcCA9IHVzYjJfcmhfZGV2X2Rlc2NyaXB0b3I7CisJCQllbHNlIGlmIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfVVNCMTEpCisJCQkJYnVmcCA9IHVzYjExX3JoX2Rldl9kZXNjcmlwdG9yOworCQkJZWxzZQorCQkJCWdvdG8gZXJyb3I7CisJCQlsZW4gPSAxODsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9DT05GSUcgPDwgODoKKwkJCWlmIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfVVNCMikgeworCQkJCWJ1ZnAgPSBoc19yaF9jb25maWdfZGVzY3JpcHRvcjsKKwkJCQlsZW4gPSBzaXplb2YgaHNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CisJCQl9IGVsc2UgeworCQkJCWJ1ZnAgPSBmc19yaF9jb25maWdfZGVzY3JpcHRvcjsKKwkJCQlsZW4gPSBzaXplb2YgZnNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CisJCQl9CisJCQlpZiAoaGNkLT5jYW5fd2FrZXVwKQorCQkJCXBhdGNoX3dha2V1cCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRFRfU1RSSU5HIDw8IDg6CisJCQluID0gcmhfc3RyaW5nICh3VmFsdWUgJiAweGZmLCBoY2QsIHVidWYsIHdMZW5ndGgpOworCQkJaWYgKG4gPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgRGV2aWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJdGJ1ZiBbMF0gPSAwOworCQlsZW4gPSAxOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIERldmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWJyZWFrOworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCS8vIHdWYWx1ZSA9PSB1cmItPmRldi0+ZGV2YWRkcgorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgInJvb3QgaHViIGRldmljZSBhZGRyZXNzICVkXG4iLAorCQkJd1ZhbHVlKTsKKwkJYnJlYWs7CisKKwkvKiBJTlRFUkZBQ0UgUkVRVUVTVFMgKG5vIGRlZmluZWQgZmVhdHVyZS9zdGF0dXMgZmxhZ3MpICovCisKKwkvKiBFTkRQT0lOVCBSRVFVRVNUUyAqLworCisJY2FzZSBFbmRwb2ludFJlcXVlc3QgfCBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCS8vIEVORFBPSU5UX0hBTFQgZmxhZworCQl0YnVmIFswXSA9IDA7CisJCXRidWYgWzFdID0gMDsKKwkJbGVuID0gMjsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBFbmRwb2ludE91dFJlcXVlc3QgfCBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJY2FzZSBFbmRwb2ludE91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgIm5vIGVuZHBvaW50IGZlYXR1cmVzIHlldFxuIik7CisJCWJyZWFrOworCisJLyogQ0xBU1MgUkVRVUVTVFMgKGFuZCBlcnJvcnMpICovCisKKwlkZWZhdWx0OgorCQkvKiBub24tZ2VuZXJpYyByZXF1ZXN0ICovCisJCWlmIChIQ19JU19TVVNQRU5ERUQgKGhjZC0+c3RhdGUpKQorCQkJc3RhdHVzID0gLUVBR0FJTjsKKwkJZWxzZSB7CisJCQlzd2l0Y2ggKHR5cGVSZXEpIHsKKwkJCWNhc2UgR2V0SHViU3RhdHVzOgorCQkJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQkJCWxlbiA9IDQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0YXR1cyA9IGhjZC0+ZHJpdmVyLT5odWJfY29udHJvbCAoaGNkLAorCQkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LAorCQkJCXRidWYsIHdMZW5ndGgpOworCQl9CisJCWJyZWFrOworZXJyb3I6CisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJc3RhdHVzID0gLUVQSVBFOworCX0KKworCWlmIChzdGF0dXMpIHsKKwkJbGVuID0gMDsKKwkJaWYgKHN0YXR1cyAhPSAtRVBJUEUpIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJDVFJMOiBUeXBlUmVxPTB4JXggdmFsPTB4JXggIgorCQkJCSJpZHg9MHgleCBsZW49JWQgPT0+ICVkXG4iLAorCQkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LAorCQkJCXdMZW5ndGgsIHVyYi0+c3RhdHVzKTsKKwkJfQorCX0KKwlpZiAobGVuKSB7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCBsZW4pCisJCQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IGxlbjsKKwkJLy8gYWx3YXlzIFVTQl9ESVJfSU4sIHRvd2FyZCBob3N0CisJCW1lbWNweSAodWJ1ZiwgYnVmcCwgbGVuKTsKKworCQkvKiByZXBvcnQgd2hldGhlciBSSCBoYXJkd2FyZSBzdXBwb3J0cyByZW1vdGUgd2FrZXVwICovCisJCWlmIChwYXRjaF93YWtldXAgJiYKKwkJCQlsZW4gPiBvZmZzZXRvZiAoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciwKKwkJCQkJCWJtQXR0cmlidXRlcykpCisJCQkoKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKil1YnVmKS0+Ym1BdHRyaWJ1dGVzCisJCQkJfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCS8qIGFueSBlcnJvcnMgZ2V0IHJldHVybmVkIHRocm91Z2ggdGhlIHVyYiBjb21wbGV0aW9uICovCisJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYiAoaGNkLCB1cmIsIE5VTEwpOworCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBSb290IEh1YiBpbnRlcnJ1cHQgdHJhbnNmZXJzIGFyZSBzeW50aGVzaXplZCB3aXRoIGEgdGltZXIuCisgKiBDb21wbGV0aW9ucyBhcmUgY2FsbGVkIGluX2ludGVycnVwdCgpIGJ1dCBub3QgaW5faXJxKCkuCisgKgorICogTm90ZTogc29tZSByb290IGh1YnMgKGluY2x1ZGluZyBjb21tb24gVUhDSSBiYXNlZCBkZXNpZ25zKSBjYW4ndAorICogY29ycmVjdGx5IGlzc3VlIHBvcnQgY2hhbmdlIElSUXMuICBUaGV5J3JlIHRoZSBvbmVzIHRoYXQgX25lZWRfIGEKKyAqIHRpbWVyOyBtb3N0IG90aGVyIHJvb3QgaHVicyBkb24ndC4gIFNvbWUgc3lzdGVtcyBjb3VsZCBzYXZlIGEKKyAqIGxvdCBvZiBiYXR0ZXJ5IHBvd2VyIGJ5IGVsaW1pbmF0aW5nIHRoZXNlIHJvb3QgaHViIHRpbWVyIElSUXMuCisgKi8KKworc3RhdGljIHZvaWQgcmhfcmVwb3J0X3N0YXR1cyAodW5zaWduZWQgbG9uZyBwdHIpOworCitzdGF0aWMgaW50IHJoX3N0YXR1c191cmIgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikgCit7CisJaW50CWxlbiA9IDEgKyAodXJiLT5kZXYtPm1heGNoaWxkIC8gOCk7CisKKwkvKiByaF90aW1lciBwcm90ZWN0ZWQgYnkgaGNkX2RhdGFfbG9jayAqLworCWlmIChoY2QtPnJoX3RpbWVyLmRhdGEgfHwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgbGVuKSB7CisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJub3QgcXVldWluZyByaCBzdGF0dXMgdXJiLCBzdGF0ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5pdF90aW1lciAoJmhjZC0+cmhfdGltZXIpOworCWhjZC0+cmhfdGltZXIuZnVuY3Rpb24gPSByaF9yZXBvcnRfc3RhdHVzOworCWhjZC0+cmhfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB1cmI7CisJLyogVVNCIDIuMCBzcGVjIHNheXMgMjU2bXNlYzsgdGhpcyBpcyBjbG9zZSBlbm91Z2ggKi8KKwloY2QtPnJoX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFovNDsKKwlhZGRfdGltZXIgKCZoY2QtPnJoX3RpbWVyKTsKKwl1cmItPmhjcHJpdiA9IGhjZDsJLyogbm9uemVybyB0byBpbmRpY2F0ZSBpdCdzIHF1ZXVlZCAqLworCXJldHVybiAwOworfQorCisvKiB0aW1lciBjYWxsYmFjayAqLworCitzdGF0aWMgdm9pZCByaF9yZXBvcnRfc3RhdHVzICh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgdXJiCSp1cmI7CisJc3RydWN0IHVzYl9oY2QJKmhjZDsKKwlpbnQJCWxlbmd0aCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXVyYiA9IChzdHJ1Y3QgdXJiICopIHB0cjsKKwlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisKKwkvKiBkbyBub3RoaW5nIGlmIHRoZSB1cmIncyBiZWVuIHVubGlua2VkICovCisJaWYgKCF1cmItPmRldgorCQkJfHwgdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTCisJCQl8fCAoaGNkID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2KSA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNvbXBsZXRlIHRoZSBzdGF0dXMgdXJiLCBvciByZXRyaWdnZXIgdGhlIHRpbWVyICovCisJc3Bpbl9sb2NrICgmaGNkX2RhdGFfbG9jayk7CisJaWYgKHVyYi0+ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkgeworCQlsZW5ndGggPSBoY2QtPmRyaXZlci0+aHViX3N0YXR1c19kYXRhICgKKwkJCQkJaGNkLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCWlmIChsZW5ndGggPiAwKSB7CisJCQloY2QtPnJoX3RpbWVyLmRhdGEgPSAwOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbGVuZ3RoOworCQkJdXJiLT5zdGF0dXMgPSAwOworCQkJdXJiLT5oY3ByaXYgPSBOVUxMOworCQl9IGVsc2UKKwkJCW1vZF90aW1lciAoJmhjZC0+cmhfdGltZXIsIGppZmZpZXMgKyBIWi80KTsKKwl9CisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisKKwkvKiBsb2NhbCBpcnFzIGFyZSBhbHdheXMgYmxvY2tlZCBpbiBjb21wbGV0aW9ucyAqLworCWlmIChsZW5ndGggPiAwKQorCQl1c2JfaGNkX2dpdmViYWNrX3VyYiAoaGNkLCB1cmIsIE5VTEwpOworCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcmhfdXJiX2VucXVldWUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXNiX3BpcGVpbnQgKHVyYi0+cGlwZSkpIHsKKwkJaW50CQlyZXR2YWw7CisJCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJCXJldHZhbCA9IHJoX3N0YXR1c191cmIgKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJcmV0dXJuIHJoX2NhbGxfY29udHJvbCAoaGNkLCB1cmIpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdXNiX3JoX3VyYl9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCS8qIG5vdGU6ICBhbHdheXMgYSBzeW5jaHJvbm91cyB1bmxpbmsgKi8KKwlpZiAoKHVuc2lnbmVkIGxvbmcpIHVyYiA9PSBoY2QtPnJoX3RpbWVyLmRhdGEpIHsKKwkJZGVsX3RpbWVyX3N5bmMgKCZoY2QtPnJoX3RpbWVyKTsKKwkJaGNkLT5yaF90aW1lci5kYXRhID0gMDsKKworCQlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCQl1cmItPmhjcHJpdiA9IE5VTEw7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChoY2QsIHVyYiwgTlVMTCk7CisJCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSA9PSAwKSB7CisJCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CS8qIGZyb20gdXNiX2tpbGxfdXJiICovCisJCSsrdXJiLT5yZWplY3Q7CisJCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKKworCQl3YWl0X2V2ZW50KHVzYl9raWxsX3VyYl9xdWV1ZSwKKwkJCQlhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworCisJCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CisJCS0tdXJiLT5yZWplY3Q7CisJCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLworc3RydWN0IHVzYl9idXMgKnVzYl9idXNfZ2V0IChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKnRtcDsKKworCWlmICghYnVzKQorCQlyZXR1cm4gTlVMTDsKKworCXRtcCA9IGNsYXNzX2RldmljZV9nZXQoJmJ1cy0+Y2xhc3NfZGV2KTsKKwlpZiAodG1wKSAgICAgICAgCisJCXJldHVybiB0b191c2JfYnVzKHRtcCk7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLwordm9pZCB1c2JfYnVzX3B1dCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlpZiAoYnVzKQorCQljbGFzc19kZXZpY2VfcHV0KCZidXMtPmNsYXNzX2Rldik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVzYl9ob3N0X3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQoreworCXN0cnVjdCB1c2JfYnVzICpidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisKKwlpZiAoYnVzLT5yZWxlYXNlKQorCQlidXMtPnJlbGVhc2UoYnVzKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyB1c2JfaG9zdF9jbGFzcyA9IHsKKwkubmFtZQkJPSAidXNiX2hvc3QiLAorCS5yZWxlYXNlCT0gJnVzYl9ob3N0X3JlbGVhc2UsCit9OworCitpbnQgdXNiX2hvc3RfaW5pdCh2b2lkKQoreworCXJldHVybiBjbGFzc19yZWdpc3RlcigmdXNiX2hvc3RfY2xhc3MpOworfQorCit2b2lkIHVzYl9ob3N0X2NsZWFudXAodm9pZCkKK3sKKwljbGFzc191bnJlZ2lzdGVyKCZ1c2JfaG9zdF9jbGFzcyk7Cit9CisKKy8qKgorICogdXNiX2J1c19pbml0IC0gc2hhcmVkIGluaXRpYWxpemF0aW9uIGNvZGUKKyAqIEBidXM6IHRoZSBidXMgc3RydWN0dXJlIGJlaW5nIGluaXRpYWxpemVkCisgKgorICogVGhpcyBjb2RlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHVzYl9idXMgc3RydWN0dXJlLCBtZW1vcnkgZm9yIHdoaWNoIGlzCisgKiBzZXBhcmF0ZWx5IG1hbmFnZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYl9idXNfaW5pdCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwltZW1zZXQgKCZidXMtPmRldm1hcCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfZGV2bWFwKSk7CisKKwlidXMtPmRldm51bV9uZXh0ID0gMTsKKworCWJ1cy0+cm9vdF9odWIgPSBOVUxMOworCWJ1cy0+aGNwcml2ID0gTlVMTDsKKwlidXMtPmJ1c251bSA9IC0xOworCWJ1cy0+YmFuZHdpZHRoX2FsbG9jYXRlZCA9IDA7CisJYnVzLT5iYW5kd2lkdGhfaW50X3JlcXMgID0gMDsKKwlidXMtPmJhbmR3aWR0aF9pc29jX3JlcXMgPSAwOworCisJSU5JVF9MSVNUX0hFQUQgKCZidXMtPmJ1c19saXN0KTsKKworCWNsYXNzX2RldmljZV9pbml0aWFsaXplKCZidXMtPmNsYXNzX2Rldik7CisJYnVzLT5jbGFzc19kZXYuY2xhc3MgPSAmdXNiX2hvc3RfY2xhc3M7Cit9CisKKy8qKgorICogdXNiX2FsbG9jX2J1cyAtIGNyZWF0ZXMgYSBuZXcgVVNCIGhvc3QgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqIEBvcDogcG9pbnRlciB0byBhIHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyB0aGF0IHRoaXMgYnVzIHN0cnVjdHVyZSBzaG91bGQgdXNlCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBDcmVhdGVzIGEgVVNCIGhvc3QgY29udHJvbGxlciBidXMgc3RydWN0dXJlIHdpdGggdGhlIHNwZWNpZmllZCAKKyAqIHVzYl9vcGVyYXRpb25zIGFuZCBpbml0aWFsaXplcyBhbGwgdGhlIG5lY2Vzc2FyeSBpbnRlcm5hbCBvYmplY3RzLgorICoKKyAqIElmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUsIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCB1c2JfcHV0X2J1cygpIHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCB0aGUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgdXNiX2J1cyAqdXNiX2FsbG9jX2J1cyAoc3RydWN0IHVzYl9vcGVyYXRpb25zICpvcCkKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCisJYnVzID0ga21hbGxvYyAoc2l6ZW9mICpidXMsIEdGUF9LRVJORUwpOworCWlmICghYnVzKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYnVzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9idXMpKTsKKwl1c2JfYnVzX2luaXQgKGJ1cyk7CisJYnVzLT5vcCA9IG9wOworCXJldHVybiBidXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX3JlZ2lzdGVyX2J1cyAtIHJlZ2lzdGVycyB0aGUgVVNCIGhvc3QgY29udHJvbGxlciB3aXRoIHRoZSB1c2IgY29yZQorICogQGJ1czogcG9pbnRlciB0byB0aGUgYnVzIHRvIHJlZ2lzdGVyCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBc3NpZ25zIGEgYnVzIG51bWJlciwgYW5kIGxpbmtzIHRoZSBjb250cm9sbGVyIGludG8gdXNiY29yZSBkYXRhCisgKiBzdHJ1Y3R1cmVzIHNvIHRoYXQgaXQgY2FuIGJlIHNlZW4gYnkgc2Nhbm5pbmcgdGhlIGJ1cyBsaXN0LgorICovCitzdGF0aWMgaW50IHVzYl9yZWdpc3Rlcl9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlpbnQgYnVzbnVtOworCWludCByZXR2YWw7CisKKwlkb3duICgmdXNiX2J1c19saXN0X2xvY2spOworCWJ1c251bSA9IGZpbmRfbmV4dF96ZXJvX2JpdCAoYnVzbWFwLmJ1c21hcCwgVVNCX01BWEJVUywgMSk7CisJaWYgKGJ1c251bSA8IFVTQl9NQVhCVVMpIHsKKwkJc2V0X2JpdCAoYnVzbnVtLCBidXNtYXAuYnVzbWFwKTsKKwkJYnVzLT5idXNudW0gPSBidXNudW07CisJfSBlbHNlIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHRvbyBtYW55IGJ1c2VzXG4iLCB1c2Jjb3JlX25hbWUpOworCQl1cCgmdXNiX2J1c19saXN0X2xvY2spOworCQlyZXR1cm4gLUUyQklHOworCX0KKworCXNucHJpbnRmKGJ1cy0+Y2xhc3NfZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwgInVzYiVkIiwgYnVzbnVtKTsKKwlidXMtPmNsYXNzX2Rldi5kZXYgPSBidXMtPmNvbnRyb2xsZXI7CisJcmV0dmFsID0gY2xhc3NfZGV2aWNlX2FkZCgmYnVzLT5jbGFzc19kZXYpOworCWlmIChyZXR2YWwpIHsKKwkJY2xlYXJfYml0KGJ1c251bSwgYnVzbWFwLmJ1c21hcCk7CisJCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogQWRkIGl0IHRvIHRoZSBsb2NhbCBsaXN0IG9mIGJ1c2VzICovCisJbGlzdF9hZGQgKCZidXMtPmJ1c19saXN0LCAmdXNiX2J1c19saXN0KTsKKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKworCXVzYmZzX2FkZF9idXMgKGJ1cyk7CisJdXNibW9uX25vdGlmeV9idXNfYWRkIChidXMpOworCisJZGV2X2luZm8gKGJ1cy0+Y29udHJvbGxlciwgIm5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFzc2lnbmVkIGJ1cyBudW1iZXIgJWRcbiIsIGJ1cy0+YnVzbnVtKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1c2JfZGVyZWdpc3Rlcl9idXMgLSBkZXJlZ2lzdGVycyB0aGUgVVNCIGhvc3QgY29udHJvbGxlcgorICogQGJ1czogcG9pbnRlciB0byB0aGUgYnVzIHRvIGRlcmVnaXN0ZXIKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJlY3ljbGVzIHRoZSBidXMgbnVtYmVyLCBhbmQgdW5saW5rcyB0aGUgY29udHJvbGxlciBmcm9tIHVzYmNvcmUgZGF0YQorICogc3RydWN0dXJlcyBzbyB0aGF0IGl0IHdvbid0IGJlIHNlZW4gYnkgc2Nhbm5pbmcgdGhlIGJ1cyBsaXN0LgorICovCitzdGF0aWMgdm9pZCB1c2JfZGVyZWdpc3Rlcl9idXMgKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJZGV2X2luZm8gKGJ1cy0+Y29udHJvbGxlciwgIlVTQiBidXMgJWQgZGVyZWdpc3RlcmVkXG4iLCBidXMtPmJ1c251bSk7CisKKwkvKgorCSAqIE5PVEU6IG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgZGV2aWNlcyBhcmUgcmVtb3ZlZCBieSB0aGUKKwkgKiBjb250cm9sbGVyIGNvZGUsIGFzIHdlbGwgYXMgaGF2aW5nIGl0IGNhbGwgdGhpcyB3aGVuIGNsZWFuaW5nCisJICogaXRzZWxmIHVwCisJICovCisJZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCAoJmJ1cy0+YnVzX2xpc3QpOworCXVwICgmdXNiX2J1c19saXN0X2xvY2spOworCisJdXNibW9uX25vdGlmeV9idXNfcmVtb3ZlIChidXMpOworCXVzYmZzX3JlbW92ZV9idXMgKGJ1cyk7CisKKwljbGVhcl9iaXQgKGJ1cy0+YnVzbnVtLCBidXNtYXAuYnVzbWFwKTsKKworCWNsYXNzX2RldmljZV9kZWwoJmJ1cy0+Y2xhc3NfZGV2KTsKK30KKworLyoqCisgKiB1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViIC0gY2FsbGVkIGJ5IEhDRCB0byByZWdpc3RlciBpdHMgcm9vdCBodWIgCisgKiBAdXNiX2RldjogdGhlIHVzYiByb290IGh1YiBkZXZpY2UgdG8gYmUgcmVnaXN0ZXJlZC4KKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgorICoKKyAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgdGhlIHJvb3QgaHViCisgKiBwcm9wZXJseSB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiAgSXQgc2V0cyB1cCB0aGUgZGV2aWNlIHByb3Blcmx5IGluCisgKiB0aGUgZGV2aWNlIHRyZWUgYW5kIHN0b3JlcyB0aGUgcm9vdF9odWIgcG9pbnRlciBpbiB0aGUgYnVzIHN0cnVjdHVyZSwKKyAqIHRoZW4gY2FsbHMgdXNiX25ld19kZXZpY2UoKSB0byByZWdpc3RlciB0aGUgdXNiIGRldmljZS4gIEl0IGFsc28KKyAqIGFzc2lnbnMgdGhlIHJvb3QgaHViJ3MgVVNCIGFkZHJlc3MgKGFsd2F5cyAxKS4KKyAqLworaW50IHVzYl9oY2RfcmVnaXN0ZXJfcm9vdF9odWIgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYgPSBoY2QtPnNlbGYuY29udHJvbGxlcjsKKwljb25zdCBpbnQgZGV2bnVtID0gMTsKKwlpbnQgcmV0dmFsOworCisJLyogaGNkLT5kcml2ZXItPnN0YXJ0KCkgcmVwb3J0ZWQgY2FuX3dha2V1cCwgcHJvYmFibHkgd2l0aAorCSAqIGFzc2lzdGFuY2UgZnJvbSBib2FyZCdzIGJvb3QgZmlybXdhcmUuCisJICogTk9URTogIG5vcm1hbCBkZXZpY2VzIHdvbid0IGVuYWJsZSB3YWtldXAgYnkgZGVmYXVsdC4KKwkgKi8KKwlpZiAoaGNkLT5jYW5fd2FrZXVwKQorCQlkZXZfZGJnIChwYXJlbnRfZGV2LCAic3VwcG9ydHMgVVNCIHJlbW90ZSB3YWtldXBcbiIpOworCWhjZC0+cmVtb3RlX3dha2V1cCA9IGhjZC0+Y2FuX3dha2V1cDsKKworCXVzYl9kZXYtPmRldm51bSA9IGRldm51bTsKKwl1c2JfZGV2LT5idXMtPmRldm51bV9uZXh0ID0gZGV2bnVtICsgMTsKKwltZW1zZXQgKCZ1c2JfZGV2LT5idXMtPmRldm1hcC5kZXZpY2VtYXAsIDAsCisJCQlzaXplb2YgdXNiX2Rldi0+YnVzLT5kZXZtYXAuZGV2aWNlbWFwKTsKKwlzZXRfYml0IChkZXZudW0sIHVzYl9kZXYtPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCisJZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwl1c2JfZGV2LT5idXMtPnJvb3RfaHViID0gdXNiX2RldjsKKworCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOworCWlmIChyZXR2YWwgIT0gc2l6ZW9mIHVzYl9kZXYtPmRlc2NyaXB0b3IpIHsKKwkJdXNiX2Rldi0+YnVzLT5yb290X2h1YiA9IE5VTEw7CisJCXVwICgmdXNiX2J1c19saXN0X2xvY2spOworCQlkZXZfZGJnIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVhZCAlcyBkZXZpY2UgZGVzY3JpcHRvciAlZFxuIiwKKwkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOworCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVNU0dTSVpFOworCX0KKworCXVzYl9sb2NrX2RldmljZSAodXNiX2Rldik7CisJcmV0dmFsID0gdXNiX25ld19kZXZpY2UgKHVzYl9kZXYpOworCXVzYl91bmxvY2tfZGV2aWNlICh1c2JfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9kZXYtPmJ1cy0+cm9vdF9odWIgPSBOVUxMOworCQlkZXZfZXJyIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgcm9vdCBodWIgZm9yICVzLCAlZFxuIiwKKwkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOworCX0KKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKworCWlmIChyZXR2YWwgPT0gMCkgeworCQlzcGluX2xvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOworCQloY2QtPnJoX3JlZ2lzdGVyZWQgPSAxOworCQlzcGluX3VubG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CisKKwkJLyogRGlkIHRoZSBIQyBkaWUgYmVmb3JlIHRoZSByb290IGh1YiB3YXMgcmVnaXN0ZXJlZD8gKi8KKwkJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfSEFMVCkKKwkJCXVzYl9oY19kaWVkIChoY2QpOwkvKiBUaGlzIHRpbWUgY2xlYW4gdXAgKi8KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1Yik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfY2FsY19idXNfdGltZSAtIGFwcHJveGltYXRlIHBlcmlvZGljIHRyYW5zYWN0aW9uIHRpbWUgaW4gbmFub3NlY29uZHMKKyAqIEBzcGVlZDogZnJvbSBkZXYtPnNwZWVkOyBVU0JfU1BFRURfe0xPVyxGVUxMLEhJR0h9CisgKiBAaXNfaW5wdXQ6IHRydWUgaWZmIHRoZSB0cmFuc2FjdGlvbiBzZW5kcyBkYXRhIHRvIHRoZSBob3N0CisgKiBAaXNvYzogdHJ1ZSBmb3IgaXNvY2hyb25vdXMgdHJhbnNhY3Rpb25zLCBmYWxzZSBmb3IgaW50ZXJydXB0IG9uZXMKKyAqIEBieXRlY291bnQ6IGhvdyBtYW55IGJ5dGVzIGluIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBSZXR1cm5zIGFwcHJveGltYXRlIGJ1cyB0aW1lIGluIG5hbm9zZWNvbmRzIGZvciBhIHBlcmlvZGljIHRyYW5zYWN0aW9uLgorICogU2VlIFVTQiAyLjAgc3BlYyBzZWN0aW9uIDUuMTEuMzsgb25seSBwZXJpb2RpYyB0cmFuc2ZlcnMgbmVlZCB0byBiZQorICogc2NoZWR1bGVkIGluIHNvZnR3YXJlLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3Igc3VjaCBzY2hlZHVsaW5nLgorICovCitsb25nIHVzYl9jYWxjX2J1c190aW1lIChpbnQgc3BlZWQsIGludCBpc19pbnB1dCwgaW50IGlzb2MsIGludCBieXRlY291bnQpCit7CisJdW5zaWduZWQgbG9uZwl0bXA7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOiAJLyogSU5UUiBvbmx5ICovCisJCWlmIChpc19pbnB1dCkgeworCQkJdG1wID0gKDY3NjY3TCAqICgzMUwgKyAxMEwgKiBCaXRUaW1lIChieXRlY291bnQpKSkgLyAxMDAwTDsKKwkJCXJldHVybiAoNjQwNjBMICsgKDIgKiBCV19IVUJfTFNfU0VUVVApICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0gZWxzZSB7CisJCQl0bXAgPSAoNjY3MDBMICogKDMxTCArIDEwTCAqIEJpdFRpbWUgKGJ5dGVjb3VudCkpKSAvIDEwMDBMOworCQkJcmV0dXJuICg2NDEwN0wgKyAoMiAqIEJXX0hVQl9MU19TRVRVUCkgKyBCV19IT1NUX0RFTEFZICsgdG1wKTsKKwkJfQorCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CS8qIElTT0Mgb3IgSU5UUiAqLworCQlpZiAoaXNvYykgeworCQkJdG1wID0gKDgzNTRMICogKDMxTCArIDEwTCAqIEJpdFRpbWUgKGJ5dGVjb3VudCkpKSAvIDEwMDBMOworCQkJcmV0dXJuICgoKGlzX2lucHV0KSA/IDcyNjhMIDogNjI2NUwpICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0gZWxzZSB7CisJCQl0bXAgPSAoODM1NEwgKiAoMzFMICsgMTBMICogQml0VGltZSAoYnl0ZWNvdW50KSkpIC8gMTAwMEw7CisJCQlyZXR1cm4gKDkxMDdMICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0KKwljYXNlIFVTQl9TUEVFRF9ISUdIOgkvKiBJU09DIG9yIElOVFIgKi8KKwkJLy8gRklYTUUgYWRqdXN0IGZvciBpbnB1dCB2cyBvdXRwdXQKKwkJaWYgKGlzb2MpCisJCQl0bXAgPSBIU19VU0VDUyAoYnl0ZWNvdW50KTsKKwkJZWxzZQorCQkJdG1wID0gSFNfVVNFQ1NfSVNPIChieXRlY291bnQpOworCQlyZXR1cm4gdG1wOworCWRlZmF1bHQ6CisJCXByX2RlYnVnICgiJXM6IGJvZ3VzIGRldmljZSBzcGVlZCFcbiIsIHVzYmNvcmVfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfY2FsY19idXNfdGltZSk7CisKKy8qCisgKiB1c2JfY2hlY2tfYmFuZHdpZHRoKCk6CisgKgorICogb2xkX2FsbG9jIGlzIGZyb20gaG9zdF9jb250cm9sbGVyLT5iYW5kd2lkdGhfYWxsb2NhdGVkIGluIG1pY3Jvc2Vjb25kczsKKyAqIGJ1c3RpbWUgaXMgZnJvbSBjYWxjX2J1c190aW1lKCksIGJ1dCBjb252ZXJ0ZWQgdG8gbWljcm9zZWNvbmRzLgorICoKKyAqIHJldHVybnMgPGJ1c3RpbWUgaW4gdXM+IGlmIHN1Y2Nlc3NmdWwsCisgKiBvciAtRU5PU1BDIGlmIGJhbmR3aWR0aCByZXF1ZXN0IGZhaWxzLgorICoKKyAqIEZJWE1FOgorICogVGhpcyBpbml0aWFsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHVzZSBFbmRwb2ludC5iSW50ZXJ2YWwKKyAqIGluIG1hbmFnaW5nIGJhbmR3aWR0aCBhbGxvY2F0aW9uLgorICogSXQgcHJvYmFibHkgbmVlZHMgdG8gYmUgZXhwYW5kZWQgdG8gdXNlIEVuZHBvaW50LmJJbnRlcnZhbC4KKyAqIFRoaXMgY2FuIGJlIGRvbmUgYXMgYSBsYXRlciBlbmhhbmNlbWVudCAoY29ycmVjdGlvbikuCisgKgorICogVGhpcyB3aWxsIGFsc28gcHJvYmFibHkgcmVxdWlyZSBzb21lIGtpbmQgb2YKKyAqIGZyYW1lIGFsbG9jYXRpb24gdHJhY2tpbmcuLi5tZWFuaW5nLCBmb3IgZXhhbXBsZSwKKyAqIHRoYXQgaWYgbXVsdGlwbGUgZHJpdmVycyByZXF1ZXN0IGludGVycnVwdHMgZXZlcnkgMTAgVVNCIGZyYW1lcywKKyAqIHRoZXkgZG9uJ3QgYWxsIGhhdmUgdG8gYmUgYWxsb2NhdGVkIGF0CisgKiBmcmFtZSBudW1iZXJzIE4sIE4rMTAsIE4rMjAsIGV0Yy4gIFNvbWUgb2YgdGhlbSBjb3VsZCBiZSBhdAorICogTisxMSwgTisyMSwgTiszMSwgZXRjLiwgYW5kIG90aGVycyBhdAorICogTisxMiwgTisyMiwgTiszMiwgZXRjLgorICoKKyAqIFNpbWlsYXJseSBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzLi4uCisgKgorICogSW5kaXZpZHVhbCBIQ0RzIGNhbiBzY2hlZHVsZSBtb3JlIGRpcmVjdGx5IC4uLiB0aGlzIGxvZ2ljCisgKiBpcyBub3QgY29ycmVjdCBmb3IgaGlnaCBzcGVlZCB0cmFuc2ZlcnMuCisgKi8KK2ludCB1c2JfY2hlY2tfYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgaW50CXBpcGUgPSB1cmItPnBpcGU7CisJbG9uZwkJYnVzdGltZTsKKwlpbnQJCWlzX2luID0gdXNiX3BpcGVpbiAocGlwZSk7CisJaW50CQlpc19pc28gPSB1c2JfcGlwZWlzb2MgKHBpcGUpOworCWludAkJb2xkX2FsbG9jID0gZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQ7CisJaW50CQluZXdfYWxsb2M7CisKKworCWJ1c3RpbWUgPSBOU19UT19VUyAodXNiX2NhbGNfYnVzX3RpbWUgKGRldi0+c3BlZWQsIGlzX2luLCBpc19pc28sCisJCQl1c2JfbWF4cGFja2V0IChkZXYsIHBpcGUsICFpc19pbikpKTsKKwlpZiAoaXNfaXNvKQorCQlidXN0aW1lIC89IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisKKwluZXdfYWxsb2MgPSBvbGRfYWxsb2MgKyAoaW50KSBidXN0aW1lOworCWlmIChuZXdfYWxsb2MgPiBGUkFNRV9USU1FX01BWF9VU0VDU19BTExPQykgeworI2lmZGVmCURFQlVHCisJCWNoYXIJKm1vZGUgPSAKKyNpZmRlZiBDT05GSUdfVVNCX0JBTkRXSURUSAorCQkJIiI7CisjZWxzZQorCQkJIndvdWxkIGhhdmUgIjsKKyNlbmRpZgorCQlkZXZfZGJnICgmZGV2LT5kZXYsICJ1c2JfY2hlY2tfYmFuZHdpZHRoICVzRkFJTEVEOiAlZCArICVsZCA9ICVkIHVzZWNcbiIsCisJCQltb2RlLCBvbGRfYWxsb2MsIGJ1c3RpbWUsIG5ld19hbGxvYyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX0JBTkRXSURUSAorCQlidXN0aW1lID0gLUVOT1NQQzsJLyogcmVwb3J0IGVycm9yICovCisjZW5kaWYKKwl9CisKKwlyZXR1cm4gYnVzdGltZTsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9jaGVja19iYW5kd2lkdGgpOworCisKKy8qKgorICogdXNiX2NsYWltX2JhbmR3aWR0aCAtIHJlY29yZHMgYmFuZHdpZHRoIGZvciBhIHBlcmlvZGljIHRyYW5zZmVyCisgKiBAZGV2OiBzb3VyY2UvdGFyZ2V0IG9mIHJlcXVlc3QKKyAqIEB1cmI6IHJlcXVlc3QgKHVyYi0+ZGV2ID09IGRldikKKyAqIEBidXN0aW1lOiBiYW5kd2lkdGggY29uc3VtZWQsIGluIChhdmVyYWdlKSBtaWNyb3NlY29uZHMgcGVyIGZyYW1lCisgKiBAaXNvYzogdHJ1ZSBpZmYgdGhlIHJlcXVlc3QgaXMgaXNvY2hyb25vdXMKKyAqCisgKiBCdXMgYmFuZHdpZHRoIHJlc2VydmF0aW9ucyBhcmUgcmVjb3JkZWQgcHVyZWx5IGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLgorICogSENEcyBhcmUgZXhwZWN0ZWQgbm90IHRvIG92ZXJjb21taXQgcGVyaW9kaWMgYmFuZHdpZHRoLCBhbmQgdG8gcmVjb3JkIHN1Y2gKKyAqIHJlc2VydmF0aW9ucyB3aGVuZXZlciBlbmRwb2ludHMgYXJlIGFkZGVkIHRvIHRoZSBwZXJpb2RpYyBzY2hlZHVsZS4KKyAqCisgKiBGSVhNRSBhdmVyYWdpbmcgcGVyLWZyYW1lIGlzIHN1Ym9wdGltYWwuICBCZXR0ZXIgdG8gc3VtIG92ZXIgdGhlIEhDRCdzCisgKiBlbnRpcmUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uIDMyIGZyYW1lcyBmb3IgT0hDSSwgMTAyNCBmb3IgVUhDSSwgc2V0dGFibGUKKyAqIGZvciBFSENJICgyNTYvNTEyLzEwMjQgZnJhbWVzLCBkZWZhdWx0IDEwMjQpIGFuZCBoYXZlIHRoZSBidXMgZXhwb3NlIGhvdworICogbGFyZ2UgaXRzIHBlcmlvZGljIHNjaGVkdWxlIGlzLgorICovCit2b2lkIHVzYl9jbGFpbV9iYW5kd2lkdGggKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGJ1c3RpbWUsIGludCBpc29jKQoreworCWRldi0+YnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkICs9IGJ1c3RpbWU7CisJaWYgKGlzb2MpCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzKys7CisJZWxzZQorCQlkZXYtPmJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzKys7CisJdXJiLT5iYW5kd2lkdGggPSBidXN0aW1lOworCisjaWZkZWYgVVNCX0JBTkRXSURUSF9NRVNTQUdFUworCWRldl9kYmcgKCZkZXYtPmRldiwgImJhbmR3aWR0aCBhbGxvYyBpbmNyZWFzZWQgYnkgJWQgKCVzKSB0byAlZCBmb3IgJWQgcmVxdWVzdGVyc1xuIiwKKwkJYnVzdGltZSwKKwkJaXNvYyA/ICJJU09DIiA6ICJJTlRSIiwKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQsCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaW50X3JlcXMgKyBkZXYtPmJ1cy0+YmFuZHdpZHRoX2lzb2NfcmVxcyk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9jbGFpbV9iYW5kd2lkdGgpOworCisKKy8qKgorICogdXNiX3JlbGVhc2VfYmFuZHdpZHRoIC0gcmV2ZXJzZXMgZWZmZWN0IG9mIHVzYl9jbGFpbV9iYW5kd2lkdGgoKQorICogQGRldjogc291cmNlL3RhcmdldCBvZiByZXF1ZXN0CisgKiBAdXJiOiByZXF1ZXN0ICh1cmItPmRldiA9PSBkZXYpCisgKiBAaXNvYzogdHJ1ZSBpZmYgdGhlIHJlcXVlc3QgaXMgaXNvY2hyb25vdXMKKyAqCisgKiBUaGlzIHJlY29yZHMgdGhhdCBwcmV2aW91c2x5IGFsbG9jYXRlZCBiYW5kd2lkdGggaGFzIGJlZW4gcmVsZWFzZWQuCisgKiBCYW5kd2lkdGggaXMgcmVsZWFzZWQgd2hlbiBlbmRwb2ludHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaG9zdCBjb250cm9sbGVyJ3MKKyAqIHBlcmlvZGljIHNjaGVkdWxlLgorICovCit2b2lkIHVzYl9yZWxlYXNlX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiLCBpbnQgaXNvYykKK3sKKwlkZXYtPmJ1cy0+YmFuZHdpZHRoX2FsbG9jYXRlZCAtPSB1cmItPmJhbmR3aWR0aDsKKwlpZiAoaXNvYykKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKwllbHNlCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaW50X3JlcXMtLTsKKworI2lmZGVmIFVTQl9CQU5EV0lEVEhfTUVTU0FHRVMKKwlkZXZfZGJnICgmZGV2LT5kZXYsICJiYW5kd2lkdGggYWxsb2MgcmVkdWNlZCBieSAlZCAoJXMpIHRvICVkIGZvciAlZCByZXF1ZXN0ZXJzXG4iLAorCQl1cmItPmJhbmR3aWR0aCwKKwkJaXNvYyA/ICJJU09DIiA6ICJJTlRSIiwKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQsCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaW50X3JlcXMgKyBkZXYtPmJ1cy0+YmFuZHdpZHRoX2lzb2NfcmVxcyk7CisjZW5kaWYKKwl1cmItPmJhbmR3aWR0aCA9IDA7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfcmVsZWFzZV9iYW5kd2lkdGgpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBHZW5lcmljIEhDIG9wZXJhdGlvbnMuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdXJiX3VubGluayAoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJLyogUmVsZWFzZSBhbnkgcGVyaW9kaWMgdHJhbnNmZXIgYmFuZHdpZHRoICovCisJaWYgKHVyYi0+YmFuZHdpZHRoKQorCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGggKHVyYi0+ZGV2LCB1cmIsCisJCQl1c2JfcGlwZWlzb2MgKHVyYi0+cGlwZSkpOworCisJLyogY2xlYXIgYWxsIHN0YXRlIGxpbmtpbmcgdXJiIHRvIHRoaXMgZGV2IChhbmQgaGNkKSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCAoJnVyYi0+dXJiX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJdXNiX3B1dF9kZXYgKHVyYi0+ZGV2KTsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIGluIGFueSBjb250ZXh0IHdpdGggYSB2YWxpZCB1cmItPmRldiB1c2Vjb3VudAorICogY2FsbGVyIHN1cnJlbmRlcnMgIm93bmVyc2hpcCIgb2YgdXJiCisgKiBleHBlY3RzIHVzYl9zdWJtaXRfdXJiKCkgdG8gaGF2ZSBzYW5pdHkgY2hlY2tlZCBhbmQgY29uZGl0aW9uZWQgYWxsCisgKiBpbnB1dHMgaW4gdGhlIHVyYgorICovCitzdGF0aWMgaW50IGhjZF9zdWJtaXRfdXJiIChzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50CQkJc3RhdHVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1c2Jtb25fdXJiX3N1Ym1pdCgmaGNkLT5zZWxmLCB1cmIpOworCisJLyoKKwkgKiBBdG9taWNhbGx5IHF1ZXVlIHRoZSB1cmIsICBmaXJzdCB0byBvdXIgcmVjb3JkcywgdGhlbiB0byB0aGUgSENELgorCSAqIEFjY2VzcyB0byB1cmItPnN0YXR1cyBpcyBjb250cm9sbGVkIGJ5IHVyYi0+bG9jayAuLi4gY2hhbmdlcyBvbgorCSAqIGkvbyBjb21wbGV0aW9uIChub3JtYWwgb3IgZmF1bHQpIG9yIHVubGlua2luZy4KKwkgKi8KKworCS8vIEZJWE1FOiAgdmVyaWZ5IHRoYXQgcXVpZXNjaW5nIGhjIHdvcmtzIHJpZ2h0IChSSCBjbGVhbnMgdXApCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKKwllcCA9ICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyB1cmItPmRldi0+ZXBfaW4gOiB1cmItPmRldi0+ZXBfb3V0KQorCQkJW3VzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKV07CisJaWYgKHVubGlrZWx5ICghZXApKQorCQlzdGF0dXMgPSAtRU5PRU5UOworCWVsc2UgaWYgKHVubGlrZWx5ICh1cmItPnJlamVjdCkpCisJCXN0YXR1cyA9IC1FUEVSTTsKKwllbHNlIHN3aXRjaCAoaGNkLT5zdGF0ZSkgeworCWNhc2UgSENfU1RBVEVfUlVOTklORzoKKwljYXNlIEhDX1NUQVRFX1JFU1VNSU5HOgorCQl1c2JfZ2V0X2RldiAodXJiLT5kZXYpOworCQlsaXN0X2FkZF90YWlsICgmdXJiLT51cmJfbGlzdCwgJmVwLT51cmJfbGlzdCk7CisJCXN0YXR1cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FU0hVVERPV047CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX2RhdGFfbG9jaywgZmxhZ3MpOworCWlmIChzdGF0dXMpIHsKKwkJSU5JVF9MSVNUX0hFQUQgKCZ1cmItPnVyYl9saXN0KTsKKwkJdXNibW9uX3VyYl9zdWJtaXRfZXJyb3IoJmhjZC0+c2VsZiwgdXJiLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIGluY3JlbWVudCB1cmIncyByZWZlcmVuY2UgY291bnQgYXMgcGFydCBvZiBnaXZpbmcgaXQgdG8gdGhlIEhDRAorCSAqICh3aGljaCBub3cgY29udHJvbHMgaXQpLiAgSENEIGd1YXJhbnRlZXMgdGhhdCBpdCBlaXRoZXIgcmV0dXJucworCSAqIGFuIGVycm9yIG9yIGNhbGxzIGdpdmViYWNrKCksIGJ1dCBub3QgYm90aC4KKwkgKi8KKwl1cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwlhdG9taWNfaW5jICgmdXJiLT51c2VfY291bnQpOworCisJaWYgKHVyYi0+ZGV2ID09IGhjZC0+c2VsZi5yb290X2h1YikgeworCQkvKiBOT1RFOiAgcmVxdWlyZW1lbnQgb24gaHViIGNhbGxlcnMgKHVzYmZzIGFuZCB0aGUgaHViCisJCSAqIGRyaXZlciwgZm9yIG5vdykgdGhhdCBVUkJzJyB1cmItPnRyYW5zZmVyX2J1ZmZlciBiZQorCQkgKiB2YWxpZCBhbmQgdXNiX2J1ZmZlcl97c3luYyx1bm1hcH0oKSBub3QgYmUgbmVlZGVkLCBzaW5jZQorCQkgKiB0aGV5IGNvdWxkIGNsb2JiZXIgcm9vdCBodWIgcmVzcG9uc2UgZGF0YS4KKwkJICovCisJCXN0YXR1cyA9IHJoX3VyYl9lbnF1ZXVlIChoY2QsIHVyYik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBsb3dlciBsZXZlbCBoY2QgY29kZSBzaG91bGQgdXNlICpfZG1hIGV4Y2x1c2l2ZWx5LAorCSAqIHVubGVzcyBpdCB1c2VzIHBpbyBvciB0YWxrcyB0byBhbm90aGVyIHRyYW5zcG9ydC4KKwkgKi8KKwlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19TRVRVUF9ETUFfTUFQKSkKKwkJCXVyYi0+c2V0dXBfZG1hID0gZG1hX21hcF9zaW5nbGUgKAorCQkJCQloY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkJdXJiLT5zZXR1cF9wYWNrZXQsCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICE9IDAKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKSkKKwkJCXVyYi0+dHJhbnNmZXJfZG1hID0gZG1hX21hcF9zaW5nbGUgKAorCQkJCQloY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCQkgICAgPyBETUFfRlJPTV9ERVZJQ0UKKwkJCQkJICAgIDogRE1BX1RPX0RFVklDRSk7CisJfQorCisJc3RhdHVzID0gaGNkLT5kcml2ZXItPnVyYl9lbnF1ZXVlIChoY2QsIGVwLCB1cmIsIG1lbV9mbGFncyk7Citkb25lOgorCWlmICh1bmxpa2VseSAoc3RhdHVzKSkgeworCQl1cmJfdW5saW5rICh1cmIpOworCQlhdG9taWNfZGVjICgmdXJiLT51c2VfY291bnQpOworCQlpZiAodXJiLT5yZWplY3QpCisJCQl3YWtlX3VwICgmdXNiX2tpbGxfdXJiX3F1ZXVlKTsKKwkJdXNiX3B1dF91cmIgKHVyYik7CisJCXVzYm1vbl91cmJfc3VibWl0X2Vycm9yKCZoY2QtPnNlbGYsIHVyYiwgc3RhdHVzKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY2FsbGVkIGluIGFueSBjb250ZXh0ICovCitzdGF0aWMgaW50IGhjZF9nZXRfZnJhbWVfbnVtYmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gKHN0cnVjdCB1c2JfaGNkICopdWRldi0+YnVzLT5oY3ByaXY7CisJaWYgKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisJcmV0dXJuIGhjZC0+ZHJpdmVyLT5nZXRfZnJhbWVfbnVtYmVyIChoY2QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGlzIG1ha2VzIHRoZSBoY2QgZ2l2ZWJhY2soKSB0aGUgdXJiIG1vcmUgcXVpY2tseSwgYnkga2lja2luZyBpdAorICogb2ZmIGhhcmR3YXJlIHF1ZXVlcyAod2hpY2ggbWF5IHRha2UgYSB3aGlsZSkgYW5kIHJldHVybmluZyBpdCBhcworICogc29vbiBhcyBwcmFjdGljYWwuICB3ZSd2ZSBhbHJlYWR5IHNldCB1cCB0aGUgdXJiJ3MgcmV0dXJuIHN0YXR1cywKKyAqIGJ1dCB3ZSBjYW4ndCBrbm93IGlmIHRoZSBjYWxsYmFjayBjb21wbGV0ZWQgYWxyZWFkeS4KKyAqLworc3RhdGljIGludAordW5saW5rMSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludAkJdmFsdWU7CisKKwlpZiAodXJiLT5kZXYgPT0gaGNkLT5zZWxmLnJvb3RfaHViKQorCQl2YWx1ZSA9IHVzYl9yaF91cmJfZGVxdWV1ZSAoaGNkLCB1cmIpOworCWVsc2UgeworCisJCS8qIFRoZSBvbmx5IHJlYXNvbiBhbiBIQ0QgbWlnaHQgZmFpbCB0aGlzIGNhbGwgaXMgaWYKKwkJICogaXQgaGFzIG5vdCB5ZXQgZnVsbHkgcXVldWVkIHRoZSB1cmIgdG8gYmVnaW4gd2l0aC4KKwkJICogU3VjaCBmYWlsdXJlcyBzaG91bGQgYmUgaGFybWxlc3MuICovCisJCXZhbHVlID0gaGNkLT5kcml2ZXItPnVyYl9kZXF1ZXVlIChoY2QsIHVyYik7CisJfQorCisJaWYgKHZhbHVlICE9IDApCisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiZGVxdWV1ZSAlcCAtLT4gJWRcbiIsCisJCQkJdXJiLCB2YWx1ZSk7CisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogY2FsbGVkIGluIGFueSBjb250ZXh0CisgKgorICogY2FsbGVyIGd1YXJhbnRlZXMgdXJiIHdvbid0IGJlIHJlY3ljbGVkIHRpbGwgYm90aCB1bmxpbmsoKQorICogYW5kIHRoZSB1cmIncyBjb21wbGV0aW9uIGZ1bmN0aW9uIHJldHVybgorICovCitzdGF0aWMgaW50IGhjZF91bmxpbmtfdXJiIChzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplcDsKKwlzdHJ1Y3QgdXNiX2hjZAkJCSpoY2QgPSBOVUxMOworCXN0cnVjdCBkZXZpY2UJCQkqc3lzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZAkJKnRtcDsKKwlpbnQJCQkJcmV0dmFsOworCisJaWYgKCF1cmIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdXJiLT5kZXYgfHwgIXVyYi0+ZGV2LT5idXMpCisJCXJldHVybiAtRU5PREVWOworCWVwID0gKHVzYl9waXBlaW4odXJiLT5waXBlKSA/IHVyYi0+ZGV2LT5lcF9pbiA6IHVyYi0+ZGV2LT5lcF9vdXQpCisJCQlbdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpXTsKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogd2UgY29udGVuZCBmb3IgdXJiLT5zdGF0dXMgd2l0aCB0aGUgaGNkIGNvcmUsCisJICogd2hpY2ggY2hhbmdlcyBpdCB3aGlsZSByZXR1cm5pbmcgdGhlIHVyYi4KKwkgKgorCSAqIENhbGxlciBndWFyYW50ZWVkIHRoYXQgdGhlIHVyYiBwb2ludGVyIGhhc24ndCBiZWVuIGZyZWVkLCBhbmQKKwkgKiB0aGF0IGl0IHdhcyBzdWJtaXR0ZWQuICBCdXQgYXMgYSBydWxlIGl0IGNhbid0IGtub3cgd2hldGhlciBvcgorCSAqIG5vdCBpdCdzIGFscmVhZHkgYmVlbiB1bmxpbmtlZCAuLi4gc28gd2UgcmVzcGVjdCB0aGUgcmV2ZXJzZWQKKwkgKiBsb2NrIHNlcXVlbmNlIG5lZWRlZCBmb3IgdGhlIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKCkgY29kZSBwYXRocworCSAqICh1cmIgbG9jaywgdGhlbiBoY2RfZGF0YV9sb2NrKSBpbiBjYXNlIHNvbWUgb3RoZXIgQ1BVIGlzIG5vdworCSAqIHVubGlua2luZyBpdC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnVyYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jayAoJmhjZF9kYXRhX2xvY2spOworCisJc3lzID0gJnVyYi0+ZGV2LT5kZXY7CisJaGNkID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCWlmIChoY2QgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogcnVubmluZyB+PSBoYyB1bmxpbmsgaGFuZHNoYWtlIHdvcmtzIChpcnEsIHRpbWVyLCBldGMpCisJICogaGFsdGVkIH49IG5vIHVubGluayBoYW5kc2hha2UgaXMgbmVlZGVkCisJICogc3VzcGVuZGVkLCByZXN1bWluZyA9PSBzaG91bGQgbmV2ZXIgaGFwcGVuCisJICovCisJV0FSTl9PTiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpICYmIGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCk7CisKKwkvKiBpbnNpc3QgdGhlIHVyYiBpcyBzdGlsbCBxdWV1ZWQgKi8KKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmVwLT51cmJfbGlzdCkgeworCQlpZiAodG1wID09ICZ1cmItPnVyYl9saXN0KQorCQkJYnJlYWs7CisJfQorCWlmICh0bXAgIT0gJnVyYi0+dXJiX2xpc3QpIHsKKwkJcmV0dmFsID0gLUVJRFJNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQW55IHN0YXR1cyBleGNlcHQgLUVJTlBST0dSRVNTIG1lYW5zIHNvbWV0aGluZyBhbHJlYWR5IHN0YXJ0ZWQgdG8KKwkgKiB1bmxpbmsgdGhpcyBVUkIgZnJvbSB0aGUgaGFyZHdhcmUuICBTbyB0aGVyZSdzIG5vIG1vcmUgd29yayB0byBkby4KKwkgKi8KKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCS8qIElSUSBzZXR1cCBjYW4gZWFzaWx5IGJlIGJyb2tlbiBzbyB0aGF0IFVTQiBjb250cm9sbGVycworCSAqIG5ldmVyIGdldCBjb21wbGV0aW9uIElSUXMgLi4uIG1heWJlIGV2ZW4gdGhlIG9uZXMgd2UgbmVlZCB0bworCSAqIGZpbmlzaCB1bmxpbmtpbmcgdGhlIGluaXRpYWwgZmFpbGVkIHVzYl9zZXRfYWRkcmVzcygpCisJICogb3IgZGV2aWNlIGRlc2NyaXB0b3IgZmV0Y2guCisJICovCisJaWYgKCFoY2QtPnNhd19pcnEgJiYgaGNkLT5zZWxmLnJvb3RfaHViICE9IHVyYi0+ZGV2KSB7CisJCWRldl93YXJuIChoY2QtPnNlbGYuY29udHJvbGxlciwgIlVubGluayBhZnRlciBuby1JUlE/ICAiCisJCQkiQ29udHJvbGxlciBpcyBwcm9iYWJseSB1c2luZyB0aGUgd3JvbmcgSVJRLiIKKwkJCSJcbiIpOworCQloY2QtPnNhd19pcnEgPSAxOworCX0KKworCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdXJiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR2YWwgPSB1bmxpbmsxIChoY2QsIHVyYik7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR2YWwgPSAtRUlOUFJPR1JFU1M7CisJcmV0dXJuIHJldHZhbDsKKworZG9uZToKKwlzcGluX3VubG9jayAoJmhjZF9kYXRhX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ1cmItPmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0dmFsICE9IC1FSURSTSAmJiBzeXMgJiYgc3lzLT5kcml2ZXIpCisJCWRldl9kYmcgKHN5cywgImhjZF91bmxpbmtfdXJiICVwIGZhaWwgJWRcbiIsIHVyYiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkaXNhYmxlcyB0aGUgZW5kcG9pbnQ6IGNhbmNlbHMgYW55IHBlbmRpbmcgdXJicywgdGhlbiBzeW5jaHJvbml6ZXMgd2l0aAorICogdGhlIGhjZCB0byBtYWtlIHN1cmUgYWxsIGVuZHBvaW50IHN0YXRlIGlzIGdvbmUgZnJvbSBoYXJkd2FyZS4gdXNlIGZvcgorICogc2V0X2NvbmZpZ3VyYXRpb24sIHNldF9pbnRlcmZhY2UsIGRyaXZlciByZW1vdmFsLCBwaHlzaWNhbCBkaXNjb25uZWN0LgorICoKKyAqIGV4YW1wbGU6ICBhIHFoIHN0b3JlZCBpbiBlcC0+aGNwcml2LCBob2xkaW5nIHN0YXRlIHJlbGF0ZWQgdG8gZW5kcG9pbnQKKyAqIHR5cGUsIG1heHBhY2tldCBzaXplLCB0b2dnbGUsIGhhbHQgc3RhdHVzLCBhbmQgc2NoZWR1bGluZy4KKyAqLworc3RhdGljIHZvaWQKK2hjZF9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCisJaGNkID0gdWRldi0+YnVzLT5oY3ByaXY7CisKKwlXQVJOX09OICghSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkgJiYgaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9IQUxUKTsKKworCWxvY2FsX2lycV9kaXNhYmxlICgpOworCisJLyogRklYTUUgbW92ZSBtb3N0IG9mIHRoaXMgaW50byBtZXNzYWdlLmMgYXMgcGFydCBvZiBpdHMKKwkgKiBlbmRwb2ludCBkaXNhYmxlIGxvZ2ljCisJICovCisKKwkvKiBlcCBpcyBhbHJlYWR5IGdvbmUgZnJvbSB1ZGV2LT5lcF97aW4sb3V0fVtdOyBubyBtb3JlIHN1Ym1pdHMgKi8KK3Jlc2NhbjoKKwlzcGluX2xvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1cmIsICZlcC0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CisJCWludAl0bXA7CisKKwkJLyogYW5vdGhlciBjcHUgbWF5IGJlIGluIGhjZCwgc3Bpbm5pbmcgb24gaGNkX2RhdGFfbG9jaworCQkgKiB0byBnaXZlYmFjaygpIHRoaXMgdXJiLiAgdGhlIHJhY2VzIGhlcmUgc2hvdWxkIGJlCisJCSAqIHNtYWxsLCBidXQgYSBmdWxsIGZpeCBuZWVkcyBhIG5ldyAiY2FuJ3Qgc3VibWl0IgorCQkgKiB1cmIgc3RhdGUuCisJCSAqIEZJWE1FIHVyYi0+cmVqZWN0IHNob3VsZCBhbGxvdyB0aGF0Li4uCisJCSAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJY29udGludWU7CisJCXVzYl9nZXRfdXJiICh1cmIpOworCQlzcGluX3VubG9jayAoJmhjZF9kYXRhX2xvY2spOworCisJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCXRtcCA9IHVyYi0+c3RhdHVzOworCQlpZiAodG1wID09IC1FSU5QUk9HUkVTUykKKwkJCXVyYi0+c3RhdHVzID0gLUVTSFVURE9XTjsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCisJCS8qIGtpY2sgaGNkIHVubGVzcyBpdCdzIGFscmVhZHkgcmV0dXJuaW5nIHRoaXMgKi8KKwkJaWYgKHRtcCA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCXRtcCA9IHVyYi0+cGlwZTsKKwkJCXVubGluazEgKGhjZCwgdXJiKTsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJzaHV0ZG93biB1cmIgJXAgcGlwZSAlMDh4IGVwJWQlcyVzXG4iLAorCQkJCXVyYiwgdG1wLCB1c2JfcGlwZWVuZHBvaW50ICh0bXApLAorCQkJCSh0bXAgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJCQkoeyBjaGFyICpzOyBcCisJCQkJIHN3aXRjaCAodXNiX3BpcGV0eXBlICh0bXApKSB7IFwKKwkJCQkgY2FzZSBQSVBFX0NPTlRST0w6CXMgPSAiIjsgYnJlYWs7IFwKKwkJCQkgY2FzZSBQSVBFX0JVTEs6CXMgPSAiLWJ1bGsiOyBicmVhazsgXAorCQkJCSBjYXNlIFBJUEVfSU5URVJSVVBUOglzID0gIi1pbnRyIjsgYnJlYWs7IFwKKwkJCQkgZGVmYXVsdDogCQlzID0gIi1pc28iOyBicmVhazsgXAorCQkJCX07IHM7fSkpOworCQl9CisJCXVzYl9wdXRfdXJiICh1cmIpOworCisJCS8qIGxpc3QgY29udGVudHMgbWF5IGhhdmUgY2hhbmdlZCAqLworCQlnb3RvIHJlc2NhbjsKKwl9CisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlsb2NhbF9pcnFfZW5hYmxlICgpOworCisJLyogc3luY2hyb25pemUgd2l0aCB0aGUgaGFyZHdhcmUsIHNvIG9sZCBjb25maWd1cmF0aW9uIHN0YXRlCisJICogY2xlYXJzIG91dCBpbW1lZGlhdGVseSAoYW5kIHdpbGwgYmUgZnJlZWQpLgorCSAqLworCW1pZ2h0X3NsZWVwICgpOworCWlmIChoY2QtPmRyaXZlci0+ZW5kcG9pbnRfZGlzYWJsZSkKKwkJaGNkLT5kcml2ZXItPmVuZHBvaW50X2Rpc2FibGUgKGhjZCwgZXApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisKK3N0YXRpYyBpbnQgaGNkX2h1Yl9zdXNwZW5kIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKKwlpZiAoaGNkLT5kcml2ZXItPmh1Yl9zdXNwZW5kKQorCQlyZXR1cm4gaGNkLT5kcml2ZXItPmh1Yl9zdXNwZW5kIChoY2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhjZF9odWJfcmVzdW1lIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKKwlpZiAoaGNkLT5kcml2ZXItPmh1Yl9yZXN1bWUpCisJCXJldHVybiBoY2QtPmRyaXZlci0+aHViX3Jlc3VtZSAoaGNkKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAtIGNhbGxlZCBieSBIQ0QgdG8gcmVzdW1lIGl0cyByb290IGh1YiAKKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgorICoKKyAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBpdHMgcm9vdCBodWIgaXMKKyAqIHN1c3BlbmRlZCAod2l0aCB0aGUgcmVtb3RlIHdha2V1cCBmZWF0dXJlIGVuYWJsZWQpIGFuZCBhIHJlbW90ZQorICogd2FrZXVwIHJlcXVlc3QgaXMgcmVjZWl2ZWQuICBJdCBxdWV1ZXMgYSByZXF1ZXN0IGZvciBraHViZCB0bworICogcmVzdW1lIHRoZSByb290IGh1Yi4KKyAqLwordm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOworCWlmIChoY2QtPnJoX3JlZ2lzdGVyZWQpCisJCXVzYl9yZXN1bWVfcm9vdF9odWIgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7Cit9CisKKyNlbHNlCit2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworfQorI2VuZGlmCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3Jlc3VtZV9yb290X2h1Yik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfVVNCX09URworCisvKioKKyAqIHVzYl9idXNfc3RhcnRfZW51bSAtIHN0YXJ0IGltbWVkaWF0ZSBlbnVtZXJhdGlvbiAoZm9yIE9URykKKyAqIEBidXM6IHRoZSBidXMgKG11c3QgdXNlIGhjZCBmcmFtZXdvcmspCisgKiBAcG9ydF9udW06IDEtYmFzZWQgbnVtYmVyIG9mIHBvcnQ7IHVzdWFsbHkgYnVzLT5vdGdfcG9ydAorICogQ29udGV4dDogaW5faW50ZXJydXB0KCkKKyAqCisgKiBTdGFydHMgZW51bWVyYXRpb24sIHdpdGggYW4gaW1tZWRpYXRlIHJlc2V0IGZvbGxvd2VkIGxhdGVyIGJ5CisgKiBraHViZCBpZGVudGlmeWluZyBhbmQgcG9zc2libHkgY29uZmlndXJpbmcgdGhlIGRldmljZS4KKyAqIFRoaXMgaXMgbmVlZGVkIGJ5IE9URyBjb250cm9sbGVyIGRyaXZlcnMsIHdoZXJlIGl0IGhlbHBzIG1lZXQKKyAqIEhOUCBwcm90b2NvbCB0aW1pbmcgcmVxdWlyZW1lbnRzIGZvciBzdGFydGluZyBhIHBvcnQgcmVzZXQuCisgKi8KK2ludCB1c2JfYnVzX3N0YXJ0X2VudW0oc3RydWN0IHVzYl9idXMgKmJ1cywgdW5zaWduZWQgcG9ydF9udW0pCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJaW50CQkJc3RhdHVzID0gLUVPUE5PVFNVUFA7CisKKwkvKiBOT1RFOiBzaW5jZSBITlAgY2FuJ3Qgc3RhcnQgYnkgZ3JhYmJpbmcgdGhlIGJ1cydzIGFkZHJlc3MwX3NlbSwKKwkgKiBib2FyZHMgd2l0aCByb290IGh1YnMgaG9va2VkIHVwIHRvIGludGVybmFsIGRldmljZXMgKGluc3RlYWQgb2YKKwkgKiBqdXN0IHRoZSBPVEcgcG9ydCkgbWF5IG5lZWQgbW9yZSBhdHRlbnRpb24gdG8gcmVzZXR0aW5nLi4uCisJICovCisJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKKwlpZiAocG9ydF9udW0gJiYgaGNkLT5kcml2ZXItPnN0YXJ0X3BvcnRfcmVzZXQpCisJCXN0YXR1cyA9IGhjZC0+ZHJpdmVyLT5zdGFydF9wb3J0X3Jlc2V0KGhjZCwgcG9ydF9udW0pOworCisJLyogcnVuIGtodWJkIHNob3J0bHkgYWZ0ZXIgKGZpcnN0KSByb290IHBvcnQgcmVzZXQgZmluaXNoZXM7CisJICogaXQgbWF5IGlzc3VlIG90aGVycywgdW50aWwgYXQgbGVhc3QgNTAgbXNlY3MgaGF2ZSBwYXNzZWQuCisJICovCisJaWYgKHN0YXR1cyA9PSAwKQorCQltb2RfdGltZXIoJmhjZC0+cmhfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9idXNfc3RhcnRfZW51bSk7CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogdXNiX2hjZF9vcGVyYXRpb25zIC0gYWRhcHRzIHVzYl9idXMgZnJhbWV3b3JrIHRvIEhDRCBmcmFtZXdvcmsgKGJ1cyBnbHVlKQorICovCitzdGF0aWMgc3RydWN0IHVzYl9vcGVyYXRpb25zIHVzYl9oY2Rfb3BlcmF0aW9ucyA9IHsKKwkuZ2V0X2ZyYW1lX251bWJlciA9CWhjZF9nZXRfZnJhbWVfbnVtYmVyLAorCS5zdWJtaXRfdXJiID0JCWhjZF9zdWJtaXRfdXJiLAorCS51bmxpbmtfdXJiID0JCWhjZF91bmxpbmtfdXJiLAorCS5idWZmZXJfYWxsb2MgPQkJaGNkX2J1ZmZlcl9hbGxvYywKKwkuYnVmZmVyX2ZyZWUgPQkJaGNkX2J1ZmZlcl9mcmVlLAorCS5kaXNhYmxlID0JCWhjZF9lbmRwb2ludF9kaXNhYmxlLAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCS5odWJfc3VzcGVuZCA9CQloY2RfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJaGNkX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2hjZF9naXZlYmFja191cmIgLSByZXR1cm4gVVJCIGZyb20gSENEIHRvIGRldmljZSBkcml2ZXIKKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciByZXR1cm5pbmcgdGhlIFVSQgorICogQHVyYjogdXJiIGJlaW5nIHJldHVybmVkIHRvIHRoZSBVU0IgZGV2aWNlIGRyaXZlci4KKyAqIEByZWdzOiBwdF9yZWdzLCBwYXNzZWQgZG93biB0byB0aGUgVVJCIGNvbXBsZXRpb24gaGFuZGxlcgorICogQ29udGV4dDogaW5faW50ZXJydXB0KCkKKyAqCisgKiBUaGlzIGhhbmRzIHRoZSBVUkIgZnJvbSBIQ0QgdG8gaXRzIFVTQiBkZXZpY2UgZHJpdmVyLCB1c2luZyBpdHMKKyAqIGNvbXBsZXRpb24gZnVuY3Rpb24uICBUaGUgSENEIGhhcyBmcmVlZCBhbGwgcGVyLXVyYiByZXNvdXJjZXMKKyAqIChhbmQgaXMgZG9uZSB1c2luZyB1cmItPmhjcHJpdikuICBJdCBhbHNvIHJlbGVhc2VkIGFsbCBIQ0QgbG9ja3M7CisgKiB0aGUgZGV2aWNlIGRyaXZlciB3b24ndCBjYXVzZSBwcm9ibGVtcyBpZiBpdCBmcmVlcywgbW9kaWZpZXMsCisgKiBvciByZXN1Ym1pdHMgdGhpcyBVUkIuCisgKi8KK3ZvaWQgdXNiX2hjZF9naXZlYmFja191cmIgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGF0X3Jvb3RfaHViOworCisJYXRfcm9vdF9odWIgPSAodXJiLT5kZXYgPT0gaGNkLT5zZWxmLnJvb3RfaHViKTsKKwl1cmJfdW5saW5rICh1cmIpOworCisJLyogbG93ZXIgbGV2ZWwgaGNkIGNvZGUgc2hvdWxkIHVzZSAqX2RtYSBleGNsdXNpdmVseSAqLworCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+ZG1hX21hc2sgJiYgIWF0X3Jvb3RfaHViKSB7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19TRVRVUF9ETUFfTUFQKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUgKGhjZC0+c2VsZi5jb250cm9sbGVyLCB1cmItPnNldHVwX2RtYSwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggIT0gMAorCQkJJiYgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApKQorCQkJZG1hX3VubWFwX3NpbmdsZSAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIAorCQkJCQl1cmItPnRyYW5zZmVyX2RtYSwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJCSAgICA/IERNQV9GUk9NX0RFVklDRQorCQkJCQkgICAgOiBETUFfVE9fREVWSUNFKTsKKwl9CisKKwl1c2Jtb25fdXJiX2NvbXBsZXRlICgmaGNkLT5zZWxmLCB1cmIpOworCS8qIHBhc3Mgb3duZXJzaGlwIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgKi8KKwl1cmItPmNvbXBsZXRlICh1cmIsIHJlZ3MpOworCWF0b21pY19kZWMgKCZ1cmItPnVzZV9jb3VudCk7CisJaWYgKHVubGlrZWx5ICh1cmItPnJlamVjdCkpCisJCXdha2VfdXAgKCZ1c2Jfa2lsbF91cmJfcXVldWUpOworCXVzYl9wdXRfdXJiICh1cmIpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9naXZlYmFja191cmIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9oY2RfaXJxIC0gaG9vayBJUlFzIHRvIEhDRCBmcmFtZXdvcmsgKGJ1cyBnbHVlKQorICogQGlycTogdGhlIElSUSBiZWluZyByYWlzZWQKKyAqIEBfX2hjZDogcG9pbnRlciB0byB0aGUgSENEIHdob3NlIElSUSBpcyBiZWluZyBzaWduYWxlZAorICogQHI6IHNhdmVkIGhhcmR3YXJlIHJlZ2lzdGVycworICoKKyAqIElmIHRoZSBjb250cm9sbGVyIGlzbid0IEhBTFRlZCwgY2FsbHMgdGhlIGRyaXZlcidzIGlycSBoYW5kbGVyLgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRyb2xsZXIgaXMgbm93IGRlYWQuCisgKi8KK2lycXJldHVybl90IHVzYl9oY2RfaXJxIChpbnQgaXJxLCB2b2lkICpfX2hjZCwgc3RydWN0IHB0X3JlZ3MgKiByKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gX19oY2Q7CisJaW50CQkJc3RhcnQgPSBoY2QtPnN0YXRlOworCisJaWYgKHN0YXJ0ID09IEhDX1NUQVRFX0hBTFQpCisJCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoaGNkLT5kcml2ZXItPmlycSAoaGNkLCByKSA9PSBJUlFfTk9ORSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaGNkLT5zYXdfaXJxID0gMTsKKwlpZiAoaGNkLT5zdGF0ZSAhPSBzdGFydCAmJiBoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpCisJCXVzYl9oY19kaWVkIChoY2QpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfaGNfZGllZCAtIHJlcG9ydCBhYm5vcm1hbCBzaHV0ZG93biBvZiBhIGhvc3QgY29udHJvbGxlciAoYnVzIGdsdWUpCisgKiBAaGNkOiBwb2ludGVyIHRvIHRoZSBIQ0QgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sbGVyCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgYnVzIGdsdWUgdG8gcmVwb3J0IGEgVVNCIGhvc3QgY29udHJvbGxlciB0aGF0IGRpZWQKKyAqIHdoaWxlIG9wZXJhdGlvbnMgbWF5IHN0aWxsIGhhdmUgYmVlbiBwZW5kaW5nLiAgSXQncyBjYWxsZWQgYXV0b21hdGljYWxseQorICogYnkgdGhlIFBDSSBnbHVlLCBzbyBvbmx5IGdsdWUgZm9yIG5vbi1QQ0kgYnVzc2VzIHNob3VsZCBuZWVkIHRvIGNhbGwgaXQuIAorICovCit2b2lkIHVzYl9oY19kaWVkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZXJyIChoY2QtPnNlbGYuY29udHJvbGxlciwgIkhDIGRpZWQ7IGNsZWFuaW5nIHVwXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKKwlpZiAoaGNkLT5yaF9yZWdpc3RlcmVkKSB7CisKKwkJLyogbWFrZSBraHViZCBjbGVhbiB1cCBvbGQgdXJicyBhbmQgZGV2aWNlcyAqLworCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAoaGNkLT5zZWxmLnJvb3RfaHViLAorCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJCXVzYl9raWNrX2todWJkIChoY2QtPnNlbGYucm9vdF9odWIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfaGNfZGllZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGhjZF9yZWxlYXNlIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwloY2QgPSBjb250YWluZXJfb2YoYnVzLCBzdHJ1Y3QgdXNiX2hjZCwgc2VsZik7CisJa2ZyZWUoaGNkKTsKK30KKworLyoqCisgKiB1c2JfY3JlYXRlX2hjZCAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBIQ0Qgc3RydWN0dXJlCisgKiBAZHJpdmVyOiBIQyBkcml2ZXIgdGhhdCB3aWxsIHVzZSB0aGlzIGhjZAorICogQGRldjogZGV2aWNlIGZvciB0aGlzIEhDLCBzdG9yZWQgaW4gaGNkLT5zZWxmLmNvbnRyb2xsZXIKKyAqIEBidXNfbmFtZTogdmFsdWUgdG8gc3RvcmUgaW4gaGNkLT5zZWxmLmJ1c19uYW1lCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZSBhIHN0cnVjdCB1c2JfaGNkLCB3aXRoIGV4dHJhIHNwYWNlIGF0IHRoZSBlbmQgZm9yIHRoZQorICogSEMgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhLiAgSW5pdGlhbGl6ZSB0aGUgZ2VuZXJpYyBtZW1iZXJzIG9mIHRoZQorICogaGNkIHN0cnVjdHVyZS4KKyAqCisgKiBJZiBtZW1vcnkgaXMgdW5hdmFpbGFibGUsIHJldHVybnMgTlVMTC4KKyAqLworc3RydWN0IHVzYl9oY2QgKnVzYl9jcmVhdGVfaGNkIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCXN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVzX25hbWUpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKworCWhjZCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpoY2QpICsgZHJpdmVyLT5oY2RfcHJpdl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhjZCkgeworCQlkZXZfZGJnIChkZXYsICJoY2QgYWxsb2MgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhjZCk7CisKKwl1c2JfYnVzX2luaXQoJmhjZC0+c2VsZik7CisJaGNkLT5zZWxmLm9wID0gJnVzYl9oY2Rfb3BlcmF0aW9uczsKKwloY2QtPnNlbGYuaGNwcml2ID0gaGNkOworCWhjZC0+c2VsZi5yZWxlYXNlID0gJmhjZF9yZWxlYXNlOworCWhjZC0+c2VsZi5jb250cm9sbGVyID0gZGV2OworCWhjZC0+c2VsZi5idXNfbmFtZSA9IGJ1c19uYW1lOworCisJaW5pdF90aW1lcigmaGNkLT5yaF90aW1lcik7CisKKwloY2QtPmRyaXZlciA9IGRyaXZlcjsKKwloY2QtPnByb2R1Y3RfZGVzYyA9IChkcml2ZXItPnByb2R1Y3RfZGVzYykgPyBkcml2ZXItPnByb2R1Y3RfZGVzYyA6CisJCQkiVVNCIEhvc3QgQ29udHJvbGxlciI7CisKKwlyZXR1cm4gaGNkOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2NyZWF0ZV9oY2QpOworCit2b2lkIHVzYl9wdXRfaGNkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWRldl9zZXRfZHJ2ZGF0YShoY2QtPnNlbGYuY29udHJvbGxlciwgTlVMTCk7CisJdXNiX2J1c19wdXQoJmhjZC0+c2VsZik7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfcHV0X2hjZCk7CisKKy8qKgorICogdXNiX2FkZF9oY2QgLSBmaW5pc2ggZ2VuZXJpYyBIQ0Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RlcgorICogQGhjZDogdGhlIHVzYl9oY2Qgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqIEBpcnFudW06IEludGVycnVwdCBsaW5lIHRvIGFsbG9jYXRlCisgKiBAaXJxZmxhZ3M6IEludGVycnVwdCB0eXBlIGZsYWdzCisgKgorICogRmluaXNoIHRoZSByZW1haW5pbmcgcGFydHMgb2YgZ2VuZXJpYyBIQ0QgaW5pdGlhbGl6YXRpb246IGFsbG9jYXRlIHRoZQorICogYnVmZmVycyBvZiBjb25zaXN0ZW50IG1lbW9yeSwgcmVnaXN0ZXIgdGhlIGJ1cywgcmVxdWVzdCB0aGUgSVJRIGxpbmUsCisgKiBhbmQgY2FsbCB0aGUgZHJpdmVyJ3MgcmVzZXQoKSBhbmQgc3RhcnQoKSByb3V0aW5lcy4KKyAqLworaW50IHVzYl9hZGRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCXVuc2lnbmVkIGludCBpcnFudW0sIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MpCit7CisJaW50CXJldHZhbDsKKworCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXNcbiIsIGhjZC0+cHJvZHVjdF9kZXNjKTsKKworCS8qIHRpbGwgbm93IEhDIGhhcyBiZWVuIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUgLi4uICovCisJaWYgKGhjZC0+ZHJpdmVyLT5yZXNldCAmJiAocmV0dmFsID0gaGNkLT5kcml2ZXItPnJlc2V0KGhjZCkpIDwgMCkgeworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiY2FuJ3QgcmVzZXRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgocmV0dmFsID0gaGNkX2J1ZmZlcl9jcmVhdGUoaGNkKSkgIT0gMCkgeworCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAicG9vbCBhbGxvYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgocmV0dmFsID0gdXNiX3JlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKSkgPCAwKQorCQlnb3RvIGVycjE7CisKKwlpZiAoaGNkLT5kcml2ZXItPmlycSkgeworCQljaGFyCWJ1Zls4XSwgKmJ1ZnAgPSBidWY7CisKKyNpZmRlZiBfX3NwYXJjX18KKwkJYnVmcCA9IF9faXJxX2l0b2EoaXJxbnVtKTsKKyNlbHNlCisJCXNwcmludGYoYnVmLCAiJWQiLCBpcnFudW0pOworI2VuZGlmCisKKwkJc25wcmludGYoaGNkLT5pcnFfZGVzY3IsIHNpemVvZihoY2QtPmlycV9kZXNjciksICIlczp1c2IlZCIsCisJCQkJaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uLCBoY2QtPnNlbGYuYnVzbnVtKTsKKwkJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShpcnFudW0sICZ1c2JfaGNkX2lycSwgaXJxZmxhZ3MsCisJCQkJaGNkLT5pcnFfZGVzY3IsIGhjZCkpICE9IDApIHsKKwkJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCisJCQkJCSJyZXF1ZXN0IGludGVycnVwdCAlcyBmYWlsZWRcbiIsIGJ1ZnApOworCQkJZ290byBlcnIyOworCQl9CisJCWhjZC0+aXJxID0gaXJxbnVtOworCQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgImlycSAlcywgJXMgMHglMDhsbHhcbiIsIGJ1ZnAsCisJCQkJKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpID8KKwkJCQkJImlvIG1lbSIgOiAiaW8gYmFzZSIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGNkLT5yc3JjX3N0YXJ0KTsKKwl9IGVsc2UgeworCQloY2QtPmlycSA9IC0xOworCQlpZiAoaGNkLT5yc3JjX3N0YXJ0KQorCQkJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIlcyAweCUwOGxseFxuIiwKKwkJCQkJKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpID8KKwkJCQkJImlvIG1lbSIgOiAiaW8gYmFzZSIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGNkLT5yc3JjX3N0YXJ0KTsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGhjZC0+ZHJpdmVyLT5zdGFydChoY2QpKSA8IDApIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgInN0YXJ0dXAgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworCisgZXJyMzoKKwlpZiAoaGNkLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoaXJxbnVtLCBoY2QpOworIGVycjI6CisJdXNiX2RlcmVnaXN0ZXJfYnVzKCZoY2QtPnNlbGYpOworIGVycjE6CisJaGNkX2J1ZmZlcl9kZXN0cm95KGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30gCitFWFBPUlRfU1lNQk9MICh1c2JfYWRkX2hjZCk7CisKKy8qKgorICogdXNiX3JlbW92ZV9oY2QgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBnZW5lcmljIEhDRHMKKyAqIEBoY2Q6IHRoZSB1c2JfaGNkIHN0cnVjdHVyZSB0byByZW1vdmUKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIERpc2Nvbm5lY3RzIHRoZSByb290IGh1YiwgdGhlbiByZXZlcnNlcyB0aGUgZWZmZWN0cyBvZiB1c2JfYWRkX2hjZCgpLAorICogaW52b2tpbmcgdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuCisgKi8KK3ZvaWQgdXNiX3JlbW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJlbW92ZSwgc3RhdGUgJXhcbiIsIGhjZC0+c3RhdGUpOworCisJaWYgKEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKQorCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCisJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJvb3RodWIgZ3JhY2VmdWwgZGlzY29ubmVjdFxuIik7CisJc3Bpbl9sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwloY2QtPnJoX3JlZ2lzdGVyZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwl1c2JfZGlzY29ubmVjdCgmaGNkLT5zZWxmLnJvb3RfaHViKTsKKworCWhjZC0+ZHJpdmVyLT5zdG9wKGhjZCk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisKKwlpZiAoaGNkLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CisJdXNiX2RlcmVnaXN0ZXJfYnVzKCZoY2QtPnNlbGYpOworCWhjZF9idWZmZXJfZGVzdHJveShoY2QpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX3JlbW92ZV9oY2QpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01PTikgfHwgZGVmaW5lZChDT05GSUdfVVNCX01PTl9NT0RVTEUpCisKK3N0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm1vbl9vcHM7CisKKy8qCisgKiBUaGUgcmVnaXN0cmF0aW9uIGlzIHVubG9ja2VkLgorICogV2UgZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBsb2NrIGluIGhvdCBwYXRocy4KKyAqCisgKiBOb3RpY2UgdGhhdCB0aGUgY29kZSBpcyBtaW5pbWFsbHkgZXJyb3ItcHJvb2YuIEJlY2F1c2UgdXNibW9uIG5lZWRzCisgKiBzeW1ib2xzIGZyb20gdXNiY29yZSwgdXNiY29yZSBnZXRzIHJlZmVyZW5jZWQgYW5kIGNhbm5vdCBiZSB1bmxvYWRlZCBmaXJzdC4KKyAqLworIAoraW50IHVzYl9tb25fcmVnaXN0ZXIgKHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm9wcykKK3sKKworCWlmIChtb25fb3BzKQorCQlyZXR1cm4gLUVCVVNZOworCisJbW9uX29wcyA9IG9wczsKKwltYigpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9tb25fcmVnaXN0ZXIpOworCit2b2lkIHVzYl9tb25fZGVyZWdpc3RlciAodm9pZCkKK3sKKworCWlmIChtb25fb3BzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVU0I6IG1vbml0b3Igd2FzIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwltb25fb3BzID0gTlVMTDsKKwltYigpOworfQorRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9tb25fZGVyZWdpc3Rlcik7CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX01PTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2MjViMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBieSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiB1c2Jjb3JlIGludGVybmFscyB0aGF0IGFyZSBtb3N0bHkKKyAqIHVzZWQgb3IgZXhwb3NlZCBieSBIb3N0IENvbnRyb2xsZXIgRHJpdmVycy4KKyAqLworCisvKgorICogVVNCIFBhY2tldCBJRHMgKFBJRHMpCisgKi8KKyNkZWZpbmUgVVNCX1BJRF9VTkRFRl8wCQkJMHhmMAorI2RlZmluZSBVU0JfUElEX09VVAkJCTB4ZTEKKyNkZWZpbmUgVVNCX1BJRF9BQ0sJCQkweGQyCisjZGVmaW5lIFVTQl9QSURfREFUQTAJCQkweGMzCisjZGVmaW5lIFVTQl9QSURfUElORwkJCTB4YjQJLyogVVNCIDIuMCAqLworI2RlZmluZSBVU0JfUElEX1NPRgkJCTB4YTUKKyNkZWZpbmUgVVNCX1BJRF9OWUVUCQkJMHg5NgkvKiBVU0IgMi4wICovCisjZGVmaW5lIFVTQl9QSURfREFUQTIJCQkweDg3CS8qIFVTQiAyLjAgKi8KKyNkZWZpbmUgVVNCX1BJRF9TUExJVAkJCTB4NzgJLyogVVNCIDIuMCAqLworI2RlZmluZSBVU0JfUElEX0lOCQkJMHg2OQorI2RlZmluZSBVU0JfUElEX05BSwkJCTB4NWEKKyNkZWZpbmUgVVNCX1BJRF9EQVRBMQkJCTB4NGIKKyNkZWZpbmUgVVNCX1BJRF9QUkVBTUJMRQkJMHgzYwkvKiBUb2tlbiBtb2RlICovCisjZGVmaW5lIFVTQl9QSURfRVJSCQkJMHgzYwkvKiBVU0IgMi4wOiBoYW5kc2hha2UgbW9kZSAqLworI2RlZmluZSBVU0JfUElEX1NFVFVQCQkJMHgyZAorI2RlZmluZSBVU0JfUElEX1NUQUxMCQkJMHgxZQorI2RlZmluZSBVU0JfUElEX01EQVRBCQkJMHgwZgkvKiBVU0IgMi4wICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciAodXNiX2hjZCkgZnJhbWV3b3JrCisgKgorICogU2luY2UgInN0cnVjdCB1c2JfYnVzIiBpcyBzbyB0aGluLCB5b3UgY2FuJ3Qgc2hhcmUgbXVjaCBjb2RlIGluIGl0LgorICogVGhpcyBmcmFtZXdvcmsgaXMgYSBsYXllciBvdmVyIHRoYXQsIGFuZCBzaG91bGQgYmUgbW9yZSBzaGFyYWJsZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgdXNiX2hjZCB7CS8qIHVzYl9idXMuaGNwcml2IHBvaW50cyB0byB0aGlzICovCisKKwkvKgorCSAqIGhvdXNla2VlcGluZworCSAqLworCXN0cnVjdCB1c2JfYnVzCQlzZWxmOwkJLyogaGNkIGlzLWEgYnVzICovCisKKwljb25zdCBjaGFyCQkqcHJvZHVjdF9kZXNjOwkvKiBwcm9kdWN0L3ZlbmRvciBzdHJpbmcgKi8KKwljaGFyCQkJaXJxX2Rlc2NyWzI0XTsJLyogZHJpdmVyICsgYnVzICMgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0CXJoX3RpbWVyOwkvKiBkcml2ZXMgcm9vdCBodWIgKi8KKworCS8qCisJICogaGFyZHdhcmUgaW5mby9zdGF0ZQorCSAqLworCWNvbnN0IHN0cnVjdCBoY19kcml2ZXIJKmRyaXZlcjsJLyogaHctc3BlY2lmaWMgaG9va3MgKi8KKwl1bnNpZ25lZAkJc2F3X2lycSA6IDE7CisJdW5zaWduZWQJCWNhbl93YWtldXA6MTsJLyogaHcgc3VwcG9ydHMgd2FrZXVwPyAqLworCXVuc2lnbmVkCQlyZW1vdGVfd2FrZXVwOjE7Lyogc3cgc2hvdWxkIHVzZSB3YWtldXA/ICovCisJdW5zaWduZWQJCXJoX3JlZ2lzdGVyZWQ6MTsvKiBpcyByb290IGh1YiByZWdpc3RlcmVkPyAqLworCisJaW50CQkJaXJxOwkJLyogaXJxIGFsbG9jYXRlZCAqLworCXZvaWQgX19pb21lbQkJKnJlZ3M7CQkvKiBkZXZpY2UgbWVtb3J5L2lvICovCisJdTY0CQkJcnNyY19zdGFydDsJLyogbWVtb3J5L2lvIHJlc291cmNlIHN0YXJ0ICovCisJdTY0CQkJcnNyY19sZW47CS8qIG1lbW9yeS9pbyByZXNvdXJjZSBsZW5ndGggKi8KKworI2RlZmluZSBIQ0RfQlVGRkVSX1BPT0xTCTQKKwlzdHJ1Y3QgZG1hX3Bvb2wJCSpwb29sIFtIQ0RfQlVGRkVSX1BPT0xTXTsKKworCWludAkJCXN0YXRlOworIwlkZWZpbmUJX19BQ1RJVkUJCTB4MDEKKyMJZGVmaW5lCV9fU1VTUEVORAkJMHgwNAorIwlkZWZpbmUJX19UUkFOU0lFTlQJCTB4ODAKKworIwlkZWZpbmUJSENfU1RBVEVfSEFMVAkJMAorIwlkZWZpbmUJSENfU1RBVEVfUlVOTklORwkoX19BQ1RJVkUpCisjCWRlZmluZQlIQ19TVEFURV9RVUlFU0NJTkcJKF9fU1VTUEVORHxfX1RSQU5TSUVOVHxfX0FDVElWRSkKKyMJZGVmaW5lCUhDX1NUQVRFX1JFU1VNSU5HCShfX1NVU1BFTkR8X19UUkFOU0lFTlQpCisjCWRlZmluZQlIQ19TVEFURV9TVVNQRU5ERUQJKF9fU1VTUEVORCkKKworI2RlZmluZQlIQ19JU19SVU5OSU5HKHN0YXRlKSAoKHN0YXRlKSAmIF9fQUNUSVZFKQorI2RlZmluZQlIQ19JU19TVVNQRU5ERUQoc3RhdGUpICgoc3RhdGUpICYgX19TVVNQRU5EKQorCisJLyogbW9yZSBzaGFyZWQgcXVldWluZyBjb2RlIHdvdWxkIGJlIGdvb2Q7IGl0IHNob3VsZCBzdXBwb3J0CisJICogc21hcnRlciBzY2hlZHVsaW5nLCBoYW5kbGUgdHJhbnNhY3Rpb24gdHJhbnNsYXRvcnMsIGV0YzsKKwkgKiBpbnB1dCBzaXplIG9mIHBlcmlvZGljIHRhYmxlIHRvIGFuIGludGVycnVwdCBzY2hlZHVsZXIuIAorCSAqIChvaGNpIDMyLCB1aGNpIDEwMjQsIGVoY2kgMjU2LzUxMi8xMDI0KS4KKwkgKi8KKworCS8qIFRoZSBIQyBkcml2ZXIncyBwcml2YXRlIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBlbmQgb2YKKwkgKiB0aGlzIHN0cnVjdHVyZS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGhjZF9wcml2WzBdCisJCQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpOworfTsKKworLyogMi40IGRvZXMgdGhpcyBhIGJpdCBkaWZmZXJlbnRseSAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9idXMgKmhjZF90b19idXMgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuICZoY2QtPnNlbGY7Cit9CisKKworLy8gdXJiLmhjcHJpdiBpcyByZWFsbHkgaGFyZHdhcmUtc3BlY2lmaWMKKworc3RydWN0IGhjZF90aW1lb3V0IHsJLyogdGltZW91dHMgd2UgYWxsb2NhdGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRpbWVvdXRfbGlzdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBGSVhNRSB1c2Jfb3BlcmF0aW9ucyBzaG91bGQgdmFuaXNoIG9yIGJlY29tZSBoY19kcml2ZXIsCisgKiB3aGVuIHVzYl9idXMgYW5kIHVzYl9oY2QgYmVjb21lIHRoZSBzYW1lIHRoaW5nLgorICovCisKK3N0cnVjdCB1c2Jfb3BlcmF0aW9ucyB7CisJaW50ICgqZ2V0X2ZyYW1lX251bWJlcikgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KTsKKwlpbnQgKCpzdWJtaXRfdXJiKSAoc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKTsKKwlpbnQgKCp1bmxpbmtfdXJiKSAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKKworCS8qIGFsbG9jYXRlIGRtYS1jb25zaXN0ZW50IGJ1ZmZlciBmb3IgVVJCX0RNQV9OT01BUFBJTkcgKi8KKwl2b2lkICooKmJ1ZmZlcl9hbGxvYykoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCisJCQlpbnQgbWVtX2ZsYWdzLAorCQkJZG1hX2FkZHJfdCAqZG1hKTsKKwl2b2lkICgqYnVmZmVyX2ZyZWUpKHN0cnVjdCB1c2JfYnVzICpidXMsIHNpemVfdCBzaXplLAorCQkJdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBkbWEpOworCisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CisKKwkvKiBnbG9iYWwgc3VzcGVuZC9yZXN1bWUgb2YgYnVzICovCisJaW50ICgqaHViX3N1c3BlbmQpKHN0cnVjdCB1c2JfYnVzICopOworCWludCAoKmh1Yl9yZXN1bWUpKHN0cnVjdCB1c2JfYnVzICopOworfTsKKworLyogZWFjaCBkcml2ZXIgcHJvdmlkZXMgb25lIG9mIHRoZXNlLCBhbmQgaGFyZHdhcmUgaW5pdCBzdXBwb3J0ICovCisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgaGNfZHJpdmVyIHsKKwljb25zdCBjaGFyCSpkZXNjcmlwdGlvbjsJLyogImVoY2ktaGNkIiBldGMgKi8KKwljb25zdCBjaGFyCSpwcm9kdWN0X2Rlc2M7CS8qIHByb2R1Y3QvdmVuZG9yIHN0cmluZyAqLworCXNpemVfdAkJaGNkX3ByaXZfc2l6ZTsJLyogc2l6ZSBvZiBwcml2YXRlIGRhdGEgKi8KKworCS8qIGlycSBoYW5kbGVyICovCisJaXJxcmV0dXJuX3QJKCppcnEpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKwlpbnQJZmxhZ3M7CisjZGVmaW5lCUhDRF9NRU1PUlkJMHgwMDAxCQkvKiBIQyByZWdzIHVzZSBtZW1vcnkgKGVsc2UgSS9PKSAqLworI2RlZmluZQlIQ0RfVVNCMTEJMHgwMDEwCQkvKiBVU0IgMS4xICovCisjZGVmaW5lCUhDRF9VU0IyCTB4MDAyMAkJLyogVVNCIDIuMCAqLworCisJLyogY2FsbGVkIHRvIGluaXQgSENEIGFuZCByb290IGh1YiAqLworCWludAkoKnJlc2V0KSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisJaW50CSgqc3RhcnQpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIE5PVEU6ICB0aGVzZSBzdXNwZW5kL3Jlc3VtZSBjYWxscyByZWxhdGUgdG8gdGhlIEhDIGFzCisJICogYSB3aG9sZSwgbm90IGp1c3QgdGhlIHJvb3QgaHViOyB0aGV5J3JlIGZvciBidXMgZ2x1ZS4KKwkgKi8KKwkvKiBjYWxsZWQgYWZ0ZXIgYWxsIGRldmljZXMgd2VyZSBzdXNwZW5kZWQgKi8KKwlpbnQJKCpzdXNwZW5kKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIHN0YXRlKTsKKworCS8qIGNhbGxlZCBiZWZvcmUgYW55IGRldmljZXMgZ2V0IHJlc3VtZWQgKi8KKwlpbnQJKCpyZXN1bWUpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIGNsZWFubHkgbWFrZSBIQ0Qgc3RvcCB3cml0aW5nIG1lbW9yeSBhbmQgZG9pbmcgSS9PICovCisJdm9pZAkoKnN0b3ApIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIHJldHVybiBjdXJyZW50IGZyYW1lIG51bWJlciAqLworCWludAkoKmdldF9mcmFtZV9udW1iZXIpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIG1hbmFnZSBpL28gcmVxdWVzdHMsIGRldmljZSBzdGF0ZSAqLworCWludAkoKnVyYl9lbnF1ZXVlKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwkJCQkJc3RydWN0IHVyYiAqdXJiLAorCQkJCQlpbnQgbWVtX2ZsYWdzKTsKKwlpbnQJKCp1cmJfZGVxdWV1ZSkgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYik7CisKKwkvKiBodyBzeW5jaCwgZnJlZWluZyBlbmRwb2ludCByZXNvdXJjZXMgdGhhdCB1cmJfZGVxdWV1ZSBjYW4ndCAqLworCXZvaWQgCSgqZW5kcG9pbnRfZGlzYWJsZSkoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApOworCisJLyogcm9vdCBodWIgc3VwcG9ydCAqLworCWludAkJKCpodWJfc3RhdHVzX2RhdGEpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpOworCWludAkJKCpodWJfY29udHJvbCkgKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsIHUxNiB3SW5kZXgsCisJCQkJY2hhciAqYnVmLCB1MTYgd0xlbmd0aCk7CisJaW50CQkoKmh1Yl9zdXNwZW5kKShzdHJ1Y3QgdXNiX2hjZCAqKTsKKwlpbnQJCSgqaHViX3Jlc3VtZSkoc3RydWN0IHVzYl9oY2QgKik7CisJaW50CQkoKnN0YXJ0X3BvcnRfcmVzZXQpKHN0cnVjdCB1c2JfaGNkICosIHVuc2lnbmVkIHBvcnRfbnVtKTsKK307CisKK2V4dGVybiB2b2lkIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIHN0cnVjdCB1c2JfaGNkICp1c2JfY3JlYXRlX2hjZCAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1c19uYW1lKTsKK2V4dGVybiB2b2lkIHVzYl9wdXRfaGNkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK2V4dGVybiBpbnQgdXNiX2FkZF9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJdW5zaWduZWQgaW50IGlycW51bSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncyk7CitleHRlcm4gdm9pZCB1c2JfcmVtb3ZlX2hjZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworI2lmZGVmIENPTkZJR19QQ0kKK3N0cnVjdCBwY2lfZGV2Oworc3RydWN0IHBjaV9kZXZpY2VfaWQ7CitleHRlcm4gaW50IHVzYl9oY2RfcGNpX3Byb2JlIChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitleHRlcm4gdm9pZCB1c2JfaGNkX3BjaV9yZW1vdmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gaW50IHVzYl9oY2RfcGNpX3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSk7CitleHRlcm4gaW50IHVzYl9oY2RfcGNpX3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldik7CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKy8qIHBjaS1pc2ggKHBkZXYgbnVsbCBpcyBvaykgYnVmZmVyIGFsbG9jL21hcHBpbmcgc3VwcG9ydCAqLworaW50IGhjZF9idWZmZXJfY3JlYXRlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK3ZvaWQgaGNkX2J1ZmZlcl9kZXN0cm95IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKwordm9pZCAqaGNkX2J1ZmZlcl9hbGxvYyAoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCisJaW50IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqZG1hKTsKK3ZvaWQgaGNkX2J1ZmZlcl9mcmVlIChzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzaXplX3Qgc2l6ZSwKKwl2b2lkICphZGRyLCBkbWFfYWRkcl90IGRtYSk7CisKKy8qIGdlbmVyaWMgYnVzIGdsdWUsIG5lZWRlZCBmb3IgaG9zdCBjb250cm9sbGVycyB0aGF0IGRvbid0IHVzZSBQQ0kgKi8KK2V4dGVybiBpcnFyZXR1cm5fdCB1c2JfaGNkX2lycSAoaW50IGlycSwgdm9pZCAqX19oY2QsIHN0cnVjdCBwdF9yZWdzICpyKTsKK2V4dGVybiB2b2lkIHVzYl9oY19kaWVkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRW51bWVyYXRpb24gaXMgb25seSBmb3IgdGhlIGh1YiBkcml2ZXIsIG9yIEhDRCB2aXJ0dWFsIHJvb3QgaHVicyAqLworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfYWxsb2NfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICpwYXJlbnQsCisJCQkJCXN0cnVjdCB1c2JfYnVzICosIHVuc2lnbmVkIHBvcnQpOworZXh0ZXJuIGludCB1c2JfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICoqKTsKKworZXh0ZXJuIGludCB1c2JfZ2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2JfZGVzdHJveV9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogSENEIFJvb3QgSHViIHN1cHBvcnQKKyAqLworCisjaW5jbHVkZSAiaHViLmgiCisKKy8qIChzaGlmdGVkKSBkaXJlY3Rpb24vdHlwZS9yZWNpcGllbnQgZnJvbSB0aGUgVVNCIDIuMCBzcGVjLCB0YWJsZSA5LjIgKi8KKyNkZWZpbmUgRGV2aWNlUmVxdWVzdCBcCisJKChVU0JfRElSX0lOfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpPDw4KQorI2RlZmluZSBEZXZpY2VPdXRSZXF1ZXN0IFwKKwkoKFVTQl9ESVJfT1VUfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpPDw4KQorCisjZGVmaW5lIEludGVyZmFjZVJlcXVlc3QgXAorCSgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfSU5URVJGQUNFKTw8OCkKKworI2RlZmluZSBFbmRwb2ludFJlcXVlc3QgXAorCSgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfSU5URVJGQUNFKTw8OCkKKyNkZWZpbmUgRW5kcG9pbnRPdXRSZXF1ZXN0IFwKKwkoKFVTQl9ESVJfT1VUfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9JTlRFUkZBQ0UpPDw4KQorCisvKiBjbGFzcyByZXF1ZXN0cyBmcm9tIHRoZSBVU0IgMi4wIGh1YiBzcGVjLCB0YWJsZSAxMS0xNSAqLworLyogR2V0QnVzU3RhdGUgYW5kIFNldEh1YkRlc2NyaXB0b3IgYXJlIG9wdGlvbmFsLCBvbWl0dGVkICovCisjZGVmaW5lIENsZWFySHViRmVhdHVyZQkJKDB4MjAwMCB8IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSkKKyNkZWZpbmUgQ2xlYXJQb3J0RmVhdHVyZQkoMHgyMzAwIHwgVVNCX1JFUV9DTEVBUl9GRUFUVVJFKQorI2RlZmluZSBHZXRIdWJEZXNjcmlwdG9yCSgweGEwMDAgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9SKQorI2RlZmluZSBHZXRIdWJTdGF0dXMJCSgweGEwMDAgfCBVU0JfUkVRX0dFVF9TVEFUVVMpCisjZGVmaW5lIEdldFBvcnRTdGF0dXMJCSgweGEzMDAgfCBVU0JfUkVRX0dFVF9TVEFUVVMpCisjZGVmaW5lIFNldEh1YkZlYXR1cmUJCSgweDIwMDAgfCBVU0JfUkVRX1NFVF9GRUFUVVJFKQorI2RlZmluZSBTZXRQb3J0RmVhdHVyZQkJKDB4MjMwMCB8IFVTQl9SRVFfU0VUX0ZFQVRVUkUpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEdlbmVyaWMgYmFuZHdpZHRoIGFsbG9jYXRpb24gY29uc3RhbnRzL3N1cHBvcnQKKyAqLworI2RlZmluZSBGUkFNRV9USU1FX1VTRUNTCTEwMDBMCisjZGVmaW5lIEJpdFRpbWUoYnl0ZWNvdW50KSAgKDcgKiA4ICogYnl0ZWNvdW50IC8gNikgIC8qIHdpdGggaW50ZWdlciB0cnVuY2F0aW9uICovCisJCS8qIFRyeWluZyBub3QgdG8gdXNlIHdvcnN0LWNhc2UgYml0LXN0dWZmaW5nCisgICAgICAgICAgICAgICAgICAgb2YgKDcvNiAqIDggKiBieXRlY291bnQpID0gOS4zMyAqIGJ5dGVjb3VudCAqLworCQkvKiBieXRlY291bnQgPSBkYXRhIHBheWxvYWQgYnl0ZSBjb3VudCAqLworCisjZGVmaW5lIE5TX1RPX1VTKG5zKQkoKG5zICsgNTAwTCkgLyAxMDAwTCkKKwkJCS8qIGNvbnZlcnQgJiByb3VuZCBuYW5vc2Vjb25kcyB0byBtaWNyb3NlY29uZHMgKi8KKworZXh0ZXJuIHZvaWQgdXNiX2NsYWltX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiLAorCQlpbnQgYnVzdGltZSwgaW50IGlzb2MpOworZXh0ZXJuIHZvaWQgdXNiX3JlbGVhc2VfYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIsCisJCWludCBpc29jKTsKKworLyoKKyAqIEZ1bGwvbG93IHNwZWVkIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGNvbnN0YW50cy9zdXBwb3J0LgorICovCisjZGVmaW5lIEJXX0hPU1RfREVMQVkJMTAwMEwJCS8qIG5hbm9zZWNvbmRzICovCisjZGVmaW5lIEJXX0hVQl9MU19TRVRVUAkzMzNMCQkvKiBuYW5vc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogNCBmdWxsLXNwZWVkIGJpdCB0aW1lcyAoZXN0LikgKi8KKworI2RlZmluZSBGUkFNRV9USU1FX0JJVFMgICAgICAgICAxMjAwMEwJCS8qIGZyYW1lID0gMSBtaWxsaXNlY29uZCAqLworI2RlZmluZSBGUkFNRV9USU1FX01BWF9CSVRTX0FMTE9DCSg5MEwgKiBGUkFNRV9USU1FX0JJVFMgLyAxMDBMKQorI2RlZmluZSBGUkFNRV9USU1FX01BWF9VU0VDU19BTExPQwkoOTBMICogRlJBTUVfVElNRV9VU0VDUyAvIDEwMEwpCisKK2V4dGVybiBpbnQgdXNiX2NoZWNrX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiKTsKKworLyoKKyAqIENlaWxpbmcgbWljcm9zZWNvbmRzICh0eXBpY2FsKSBmb3IgdGhhdCBtYW55IGJ5dGVzIGF0IGhpZ2ggc3BlZWQKKyAqIElTTyBpcyBhIGJpdCBsZXNzLCBubyBBQ0sgLi4uIGZyb20gVVNCIDIuMCBzcGVjLCA1LjExLjMgKGFuZCBuZWVkZWQKKyAqIHRvIHByZWFsbG9jYXRlIGJhbmR3aWR0aCkKKyAqLworI2RlZmluZSBVU0IyX0hPU1RfREVMQVkJNQkvKiBuc2VjLCBndWVzcyAqLworI2RlZmluZSBIU19VU0VDUyhieXRlcykgTlNfVE9fVVMgKCAoKDU1ICogOCAqIDIwODMpLzEwMDApIFwKKwkrICgoMjA4M1VMICogKDMxNjcgKyBCaXRUaW1lIChieXRlcykpKS8xMDAwKSBcCisJKyBVU0IyX0hPU1RfREVMQVkpCisjZGVmaW5lIEhTX1VTRUNTX0lTTyhieXRlcykgTlNfVE9fVVMgKCAoKDM4ICogOCAqIDIwODMpLzEwMDApIFwKKwkrICgoMjA4M1VMICogKDMxNjcgKyBCaXRUaW1lIChieXRlcykpKS8xMDAwKSBcCisJKyBVU0IyX0hPU1RfREVMQVkpCisKK2V4dGVybiBsb25nIHVzYl9jYWxjX2J1c190aW1lIChpbnQgc3BlZWQsIGludCBpc19pbnB1dCwKKwkJCWludCBpc29jLCBpbnQgYnl0ZWNvdW50KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIHN0cnVjdCB1c2JfYnVzICp1c2JfYWxsb2NfYnVzIChzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgKik7CisKK2V4dGVybiBpbnQgdXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1YiAoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCB1c2JfaGNkICpoY2QpOworCitleHRlcm4gdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKK2V4dGVybiB2b2lkIHVzYl9zZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQllbnVtIHVzYl9kZXZpY2Vfc3RhdGUgbmV3X3N0YXRlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB1c2JfYnVzX2xpc3Q7CitleHRlcm4gc3RydWN0IHNlbWFwaG9yZSB1c2JfYnVzX2xpc3RfbG9jazsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCB1c2Jfa2lsbF91cmJfcXVldWU7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX2J1cyAqdXNiX2J1c19nZXQgKHN0cnVjdCB1c2JfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgdXNiX2J1c19wdXQgKHN0cnVjdCB1c2JfYnVzICpidXMpOworCitleHRlcm4gaW50IHVzYl9maW5kX2ludGVyZmFjZV9kcml2ZXIgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKKyNkZWZpbmUgdXNiX2VuZHBvaW50X291dChlcF9kaXIpCSghKChlcF9kaXIpICYgVVNCX0RJUl9JTikpCisKKy8qCisgKiBVU0IgZGV2aWNlIGZzIHN0dWZmCisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfREVWSUNFRlMKKworLyoKKyAqIHRoZXNlIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgVVNCIGNvcmUvaHViIHRocmVhZAorICogd2l0aCB0aGUga2VybmVsIGxvY2sgaGVsZAorICovCitleHRlcm4gdm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgdXNiZnNfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHVzYmZzX2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2Jmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiZnNfdXBkYXRlX3NwZWNpYWwgKHZvaWQpOworCitleHRlcm4gaW50IHVzYmZzX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1c2Jmc19jbGVhbnVwKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfVVNCX0RFVklDRUZTICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfdXBkYXRlX3NwZWNpYWwgKHZvaWQpIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVzYmZzX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX2NsZWFudXAodm9pZCkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0RFVklDRUZTICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTU9OKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTU9OX01PRFVMRSkKKworc3RydWN0IHVzYl9tb25fb3BlcmF0aW9ucyB7CisJdm9pZCAoKnVyYl9zdWJtaXQpKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYik7CisJdm9pZCAoKnVyYl9zdWJtaXRfZXJyb3IpKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGVycik7CisJdm9pZCAoKnVyYl9jb21wbGV0ZSkoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKTsKKwkvKiB2b2lkICgqdXJiX3VubGluaykoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKTsgKi8KKwl2b2lkICgqYnVzX2FkZCkoc3RydWN0IHVzYl9idXMgKmJ1cyk7CisJdm9pZCAoKmJ1c19yZW1vdmUpKHN0cnVjdCB1c2JfYnVzICpidXMpOworfTsKKworZXh0ZXJuIHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm1vbl9vcHM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdChzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKGJ1cy0+bW9uaXRvcmVkKQorCQkoKm1vbl9vcHMtPnVyYl9zdWJtaXQpKGJ1cywgdXJiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfc3VibWl0X2Vycm9yKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYiwKKyAgICBpbnQgZXJyb3IpCit7CisJaWYgKGJ1cy0+bW9uaXRvcmVkKQorCQkoKm1vbl9vcHMtPnVyYl9zdWJtaXRfZXJyb3IpKGJ1cywgdXJiLCBlcnJvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX2NvbXBsZXRlKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAoYnVzLT5tb25pdG9yZWQpCisJCSgqbW9uX29wcy0+dXJiX2NvbXBsZXRlKShidXMsIHVyYik7Cit9CisgCitzdGF0aWMgaW5saW5lIHZvaWQgdXNibW9uX25vdGlmeV9idXNfYWRkKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJaWYgKG1vbl9vcHMpCisJCSgqbW9uX29wcy0+YnVzX2FkZCkoYnVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX3JlbW92ZShzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCWlmIChtb25fb3BzKQorCQkoKm1vbl9vcHMtPmJ1c19yZW1vdmUpKGJ1cyk7Cit9CisKK2ludCB1c2JfbW9uX3JlZ2lzdGVyKHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm9wcyk7Cit2b2lkIHVzYl9tb25fZGVyZWdpc3Rlcih2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfc3VibWl0KHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdF9lcnJvcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgaW50IGVycm9yKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfY29tcGxldGUoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX2FkZChzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX3JlbW92ZShzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9NT04gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaHViLmggLi4uIERldmljZVJlbW92YWJsZSBpbiAyLjQuMi1hYzExLCBnb25lIGluIDIuNC4xMCAqLworLy8gYmxlZWNoIC0tIHJlc3VyZmFjZWQgaW4gMi40LjExIG9yIDIuNC4xMgorI2RlZmluZSBiaXRtYXAgCURldmljZVJlbW92YWJsZQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJhbmRvbSBzdHVmZiAqLworCisjZGVmaW5lCVJVTl9DT05URVhUIChpbl9pcnEgKCkgPyAiaW5faXJxIiBcCisJCTogKGluX2ludGVycnVwdCAoKSA/ICJpbl9pbnRlcnJ1cHQiIDogImNhbiBzbGVlcCIpKQorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGRjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0wLDAgKzEsMzA1NyBAQAorLyoKKyAqIFVTQiBodWIgZHJpdmVyLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5IEpvaGFubmVzIEVyZGZlbHQKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoCisgKiAoQykgQ29weXJpZ2h0IDIwMDEgQnJhZCBIYXJkcyAoYmhhcmRzQGJpZ3BvbmQubmV0LmF1KQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJoY2QuaCIKKyNpbmNsdWRlICJodWIuaCIKKworLyogUHJvdGVjdCBzdHJ1Y3QgdXNiX2RldmljZS0+c3RhdGUgYW5kIC0+Y2hpbGRyZW4gbWVtYmVycworICogTm90ZTogQm90aCBhcmUgYWxzbyBwcm90ZWN0ZWQgYnkgLT5zZXJpYWxpemUsIGV4Y2VwdCB0aGF0IC0+c3RhdGUgY2FuCisgKiBjaGFuZ2UgdG8gVVNCX1NUQVRFX05PVEFUVEFDSEVEIGV2ZW4gd2hlbiB0aGUgc2VtYXBob3JlIGlzbid0IGhlbGQuICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldmljZV9zdGF0ZV9sb2NrKTsKKworLyoga2h1YmQncyB3b3JrbGlzdCBhbmQgaXRzIGxvY2sgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHViX2V2ZW50X2xvY2spOworc3RhdGljIExJU1RfSEVBRChodWJfZXZlbnRfbGlzdCk7CS8qIExpc3Qgb2YgaHVicyBuZWVkaW5nIHNlcnZpY2luZyAqLworCisvKiBXYWtlcyB1cCBraHViZCAqLworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGtodWJkX3dhaXQpOworCitzdGF0aWMgcGlkX3Qga2h1YmRfcGlkID0gMDsJCQkvKiBQSUQgb2Yga2h1YmQgKi8KK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oa2h1YmRfZXhpdGVkKTsKKworLyogY3ljbGUgbGVkcyBvbiBodWJzIHRoYXQgYXJlbid0IGJsaW5raW5nIGZvciBhdHRlbnRpb24gKi8KK3N0YXRpYyBpbnQgYmxpbmtlbmxpZ2h0cyA9IDA7Cittb2R1bGVfcGFyYW0gKGJsaW5rZW5saWdodHMsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyAoYmxpbmtlbmxpZ2h0cywgInRydWUgdG8gY3ljbGUgbGVkcyBvbiBodWJzIik7CisKKy8qCisgKiBBcyBvZiAyLjYuMTAgd2UgaW50cm9kdWNlIGEgbmV3IFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lIHdoaWNoCisgKiBjbG9zZWx5IHJlc2VtYmxlcyB0aGUgd2F5IFdpbmRvd3Mgd29ya3MuICBIb3BlZnVsbHkgaXQgd2lsbCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2YgZGV2aWNlcyB0aGFuIHRoZSBvbGQgc2NoZW1lLiAgSG93ZXZlciBzb21lIHByZXZpb3VzbHkKKyAqIHdvcmtpbmcgZGV2aWNlcyBtYXkgc3RhcnQgZ2l2aW5nIHJpc2UgdG8gImRldmljZSBub3QgYWNjZXB0aW5nIGFkZHJlc3MiCisgKiBlcnJvcnM7IGlmIHRoYXQgaGFwcGVucyB0aGUgdXNlciBjYW4gdHJ5IHRoZSBvbGQgc2NoZW1lIGJ5IGFkanVzdGluZyB0aGUKKyAqIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycy4KKyAqCisgKiBGb3IgbWF4aW11bSBmbGV4aWJpbGl0eSB0aGVyZSBhcmUgdHdvIGJvb2xlYW4gcGFyYW1ldGVycyB0byBjb250cm9sIHRoZQorICogaHViIGRyaXZlcidzIGJlaGF2aW9yLiAgT24gdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIGF0dGVtcHQsIGlmIHRoZQorICogIm9sZF9zY2hlbWVfZmlyc3QiIHBhcmFtZXRlciBpcyBzZXQgdGhlbiB0aGUgb2xkIHNjaGVtZSB3aWxsIGJlIHVzZWQsCisgKiBvdGhlcndpc2UgdGhlIG5ldyBzY2hlbWUgaXMgdXNlZC4gIElmIHRoYXQgZmFpbHMgYW5kICJ1c2VfYm90aF9zY2hlbWVzIgorICogaXMgc2V0LCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBtYWtlIGFub3RoZXIgYXR0ZW1wdCwgdXNpbmcgdGhlIG90aGVyIHNjaGVtZS4KKyAqLworc3RhdGljIGludCBvbGRfc2NoZW1lX2ZpcnN0ID0gMDsKK21vZHVsZV9wYXJhbShvbGRfc2NoZW1lX2ZpcnN0LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKG9sZF9zY2hlbWVfZmlyc3QsCisJCSAic3RhcnQgd2l0aCB0aGUgb2xkIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUiKTsKKworc3RhdGljIGludCB1c2VfYm90aF9zY2hlbWVzID0gMTsKK21vZHVsZV9wYXJhbSh1c2VfYm90aF9zY2hlbWVzLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9ib3RoX3NjaGVtZXMsCisJCSJ0cnkgdGhlIG90aGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUgaWYgdGhlICIKKwkJImZpcnN0IG9uZSBmYWlscyIpOworCisKKyNpZmRlZglERUJVRworc3RhdGljIGlubGluZSBjaGFyICpwb3J0c3BlZWQgKGludCBwb3J0c3RhdHVzKQoreworCWlmIChwb3J0c3RhdHVzICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpKQorICAgIAkJcmV0dXJuICI0ODAgTWIvcyI7CisJZWxzZSBpZiAocG9ydHN0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpKQorCQlyZXR1cm4gIjEuNSBNYi9zIjsKKwllbHNlCisJCXJldHVybiAiMTIgTWIvcyI7Cit9CisjZW5kaWYKKworLyogTm90ZSB0aGF0IGhkZXYgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBtdXN0IGJlIGxvY2tlZCEgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9odWIgKmhkZXZfdG9faHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCXJldHVybiB1c2JfZ2V0X2ludGZkYXRhKGhkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKTsKK30KKworLyogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuNC41ICovCitzdGF0aWMgaW50IGdldF9odWJfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9yY3ZjdHJscGlwZShoZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4gfCBVU0JfUlRfSFVCLAorCQkJVVNCX0RUX0hVQiA8PCA4LCAwLCBkYXRhLCBzaXplLAorCQkJVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQlpZiAocmV0ID49IChVU0JfRFRfSFVCX05PTlZBUl9TSVpFICsgMikpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuMQorICovCitzdGF0aWMgaW50IGNsZWFyX2h1Yl9mZWF0dXJlKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCBpbnQgZmVhdHVyZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9zbmRjdHJscGlwZShoZGV2LCAwKSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUlRfSFVCLCBmZWF0dXJlLCAwLCBOVUxMLCAwLCAxMDAwKTsKK30KKworLyoKKyAqIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuMgorICovCitzdGF0aWMgaW50IGNsZWFyX3BvcnRfZmVhdHVyZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgaW50IHBvcnQxLCBpbnQgZmVhdHVyZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9zbmRjdHJscGlwZShoZGV2LCAwKSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUlRfUE9SVCwgZmVhdHVyZSwgcG9ydDEsCisJCU5VTEwsIDAsIDEwMDApOworfQorCisvKgorICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi4xMworICovCitzdGF0aWMgaW50IHNldF9wb3J0X2ZlYXR1cmUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIGludCBwb3J0MSwgaW50IGZlYXR1cmUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2Jfc25kY3RybHBpcGUoaGRldiwgMCksCisJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9SVF9QT1JULCBmZWF0dXJlLCBwb3J0MSwKKwkJTlVMTCwgMCwgMTAwMCk7Cit9CisKKy8qCisgKiBVU0IgMi4wIHNwZWMgU2VjdGlvbiAxMS4yNC4yLjcuMS4xMCBhbmQgdGFibGUgMTEtNworICogZm9yIGluZm8gYWJvdXQgdXNpbmcgcG9ydCBpbmRpY2F0b3JzCisgKi8KK3N0YXRpYyB2b2lkIHNldF9wb3J0X2xlZCgKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViLAorCWludCBwb3J0MSwKKwlpbnQgc2VsZWN0b3IKKykKK3sKKwlpbnQgc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIChzZWxlY3RvciA8PCA4KSB8IHBvcnQxLAorCQkJVVNCX1BPUlRfRkVBVF9JTkRJQ0FUT1IpOworCWlmIChzdGF0dXMgPCAwKQorCQlkZXZfZGJnIChodWItPmludGZkZXYsCisJCQkicG9ydCAlZCBpbmRpY2F0b3IgJXMgc3RhdHVzICVkXG4iLAorCQkJcG9ydDEsCisJCQkoeyBjaGFyICpzOyBzd2l0Y2ggKHNlbGVjdG9yKSB7CisJCQljYXNlIEhVQl9MRURfQU1CRVI6IHMgPSAiYW1iZXIiOyBicmVhazsKKwkJCWNhc2UgSFVCX0xFRF9HUkVFTjogcyA9ICJncmVlbiI7IGJyZWFrOworCQkJY2FzZSBIVUJfTEVEX09GRjogcyA9ICJvZmYiOyBicmVhazsKKwkJCWNhc2UgSFVCX0xFRF9BVVRPOiBzID0gImF1dG8iOyBicmVhazsKKwkJCWRlZmF1bHQ6IHMgPSAiPz8iOyBicmVhazsKKwkJCX07IHM7IH0pLAorCQkJc3RhdHVzKTsKK30KKworI2RlZmluZQlMRURfQ1lDTEVfUEVSSU9ECSgoMipIWikvMykKKworc3RhdGljIHZvaWQgbGVkX3dvcmsgKHZvaWQgKl9faHViKQoreworCXN0cnVjdCB1c2JfaHViCQkqaHViID0gX19odWI7CisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CisJdW5zaWduZWQJCWk7CisJdW5zaWduZWQJCWNoYW5nZWQgPSAwOworCWludAkJCWN1cnNvciA9IC0xOworCisJaWYgKGhkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEIHx8IGh1Yi0+cXVpZXNjaW5nKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaHViLT5kZXNjcmlwdG9yLT5iTmJyUG9ydHM7IGkrKykgeworCQl1bnNpZ25lZAlzZWxlY3RvciwgbW9kZTsKKworCQkvKiAzMCUtNTAlIGR1dHkgY3ljbGUgKi8KKworCQlzd2l0Y2ggKGh1Yi0+aW5kaWNhdG9yW2ldKSB7CisJCS8qIGN5Y2xlIG1hcmtlciAqLworCQljYXNlIElORElDQVRPUl9DWUNMRToKKwkJCWN1cnNvciA9IGk7CisJCQlzZWxlY3RvciA9IEhVQl9MRURfQVVUTzsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQVVUTzsKKwkJCWJyZWFrOworCQkvKiBibGlua2luZyBncmVlbiA9IHN3IGF0dGVudGlvbiAqLworCQljYXNlIElORElDQVRPUl9HUkVFTl9CTElOSzoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9HUkVFTjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfR1JFRU5fQkxJTktfT0ZGOworCQkJYnJlYWs7CisJCWNhc2UgSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRjoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9PRkY7CisJCQltb2RlID0gSU5ESUNBVE9SX0dSRUVOX0JMSU5LOworCQkJYnJlYWs7CisJCS8qIGJsaW5raW5nIGFtYmVyID0gaHcgYXR0ZW50aW9uICovCisJCWNhc2UgSU5ESUNBVE9SX0FNQkVSX0JMSU5LOgorCQkJc2VsZWN0b3IgPSBIVUJfTEVEX0FNQkVSOworCQkJbW9kZSA9IElORElDQVRPUl9BTUJFUl9CTElOS19PRkY7CisJCQlicmVhazsKKwkJY2FzZSBJTkRJQ0FUT1JfQU1CRVJfQkxJTktfT0ZGOgorCQkJc2VsZWN0b3IgPSBIVUJfTEVEX09GRjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQU1CRVJfQkxJTks7CisJCQlicmVhazsKKwkJLyogYmxpbmsgZ3JlZW4vYW1iZXIgPSByZXNlcnZlZCAqLworCQljYXNlIElORElDQVRPUl9BTFRfQkxJTks6CisJCQlzZWxlY3RvciA9IEhVQl9MRURfR1JFRU47CisJCQltb2RlID0gSU5ESUNBVE9SX0FMVF9CTElOS19PRkY7CisJCQlicmVhazsKKwkJY2FzZSBJTkRJQ0FUT1JfQUxUX0JMSU5LX09GRjoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9BTUJFUjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQUxUX0JMSU5LOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2VsZWN0b3IgIT0gSFVCX0xFRF9BVVRPKQorCQkJY2hhbmdlZCA9IDE7CisJCXNldF9wb3J0X2xlZChodWIsIGkgKyAxLCBzZWxlY3Rvcik7CisJCWh1Yi0+aW5kaWNhdG9yW2ldID0gbW9kZTsKKwl9CisJaWYgKCFjaGFuZ2VkICYmIGJsaW5rZW5saWdodHMpIHsKKwkJY3Vyc29yKys7CisJCWN1cnNvciAlPSBodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0czsKKwkJc2V0X3BvcnRfbGVkKGh1YiwgY3Vyc29yICsgMSwgSFVCX0xFRF9HUkVFTik7CisJCWh1Yi0+aW5kaWNhdG9yW2N1cnNvcl0gPSBJTkRJQ0FUT1JfQ1lDTEU7CisJCWNoYW5nZWQrKzsKKwl9CisJaWYgKGNoYW5nZWQpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaHViLT5sZWRzLCBMRURfQ1lDTEVfUEVSSU9EKTsKK30KKworLyogdXNlIGEgc2hvcnQgdGltZW91dCBmb3IgaHViL3BvcnQgc3RhdHVzIGZldGNoZXMgKi8KKyNkZWZpbmUJVVNCX1NUU19USU1FT1VUCQkxMDAwCisjZGVmaW5lCVVTQl9TVFNfUkVUUklFUwkJNQorCisvKgorICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi42CisgKi8KK3N0YXRpYyBpbnQgZ2V0X2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCisJCXN0cnVjdCB1c2JfaHViX3N0YXR1cyAqZGF0YSkKK3sKKwlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX0hVQiwgMCwgMCwKKwkJCWRhdGEsIHNpemVvZigqZGF0YSksIFVTQl9TVFNfVElNRU9VVCk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBVU0IgMi4wIHNwZWMgU2VjdGlvbiAxMS4yNC4yLjcKKyAqLworc3RhdGljIGludCBnZXRfcG9ydF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIGludCBwb3J0MSwKKwkJc3RydWN0IHVzYl9wb3J0X3N0YXR1cyAqZGF0YSkKK3sKKwlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX1BPUlQsIDAsIHBvcnQxLAorCQkJZGF0YSwgc2l6ZW9mKCpkYXRhKSwgVVNCX1NUU19USU1FT1VUKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQga2lja19raHViZChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHViX2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmaHViLT5ldmVudF9saXN0KSkgeworCQlsaXN0X2FkZF90YWlsKCZodWItPmV2ZW50X2xpc3QsICZodWJfZXZlbnRfbGlzdCk7CisJCXdha2VfdXAoJmtodWJkX3dhaXQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodWJfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHVzYl9raWNrX2todWJkKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCWtpY2tfa2h1YmQoaGRldl90b19odWIoaGRldikpOworfQorCisKKy8qIGNvbXBsZXRpb24gZnVuY3Rpb24sIGZpcmVzIG9uIHBvcnQgc3RhdHVzIGNoYW5nZXMgYW5kIHZhcmlvdXMgZmF1bHRzICovCitzdGF0aWMgdm9pZCBodWJfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IChzdHJ1Y3QgdXNiX2h1YiAqKXVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYml0czsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FTk9FTlQ6CQkvKiBzeW5jaHJvbm91cyB1bmxpbmsgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkvKiBhc3luYyB1bmxpbmsgKi8KKwljYXNlIC1FU0hVVERPV046CS8qIGhhcmR3YXJlIGdvaW5nIGF3YXkgKi8KKwkJcmV0dXJuOworCisJZGVmYXVsdDoJCS8qIHByZXN1bWFibHkgYW4gZXJyb3IgKi8KKwkJLyogQ2F1c2UgYSBodWIgcmVzZXQgYWZ0ZXIgMTAgY29uc2VjdXRpdmUgZXJyb3JzICovCisJCWRldl9kYmcgKGh1Yi0+aW50ZmRldiwgInRyYW5zZmVyIC0tPiAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlpZiAoKCsraHViLT5uZXJyb3JzIDwgMTApIHx8IGh1Yi0+ZXJyb3IpCisJCQlnb3RvIHJlc3VibWl0OworCQlodWItPmVycm9yID0gdXJiLT5zdGF0dXM7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCQorCS8qIGxldCBraHViZCBoYW5kbGUgdGhpbmdzICovCisJY2FzZSAwOgkJCS8qIHdlIGdvdCBkYXRhOiAgcG9ydCBzdGF0dXMgY2hhbmdlZCAqLworCQliaXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgKytpKQorCQkJYml0cyB8PSAoKHVuc2lnbmVkIGxvbmcpICgoKmh1Yi0+YnVmZmVyKVtpXSkpCisJCQkJCTw8IChpKjgpOworCQlodWItPmV2ZW50X2JpdHNbMF0gPSBiaXRzOworCQlicmVhazsKKwl9CisKKwlodWItPm5lcnJvcnMgPSAwOworCisJLyogU29tZXRoaW5nIGhhcHBlbmVkLCBsZXQga2h1YmQgZmlndXJlIGl0IG91dCAqLworCWtpY2tfa2h1YmQoaHViKTsKKworcmVzdWJtaXQ6CisJaWYgKGh1Yi0+cXVpZXNjaW5nKQorCQlyZXR1cm47CisKKwlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiIChodWItPnVyYiwgR0ZQX0FUT01JQykpICE9IDAKKwkJCSYmIHN0YXR1cyAhPSAtRU5PREVWICYmIHN0YXR1cyAhPSAtRVBFUk0pCisJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwgInJlc3VibWl0IC0tPiAlZFxuIiwgc3RhdHVzKTsKK30KKworLyogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi4zICovCitzdGF0aWMgaW5saW5lIGludAoraHViX2NsZWFyX3R0X2J1ZmZlciAoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHUxNiBkZXZpbmZvLCB1MTYgdHQpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2JfcmN2Y3RybHBpcGUoaGRldiwgMCksCisJCQkgICAgICAgSFVCX0NMRUFSX1RUX0JVRkZFUiwgVVNCX1JUX1BPUlQsIGRldmluZm8sCisJCQkgICAgICAgdHQsIE5VTEwsIDAsIDEwMDApOworfQorCisvKgorICogZW51bWVyYXRpb24gYmxvY2tzIGtodWJkIGZvciBhIGxvbmcgdGltZS4gd2UgdXNlIGtldmVudGQgaW5zdGVhZCwgc2luY2UKKyAqIGxvbmcgYmxvY2tpbmcgdGhlcmUgaXMgdGhlIGV4Y2VwdGlvbiwgbm90IHRoZSBydWxlLiAgYWNjb3JkaW5nbHksIEhDRHMKKyAqIHRhbGtpbmcgdG8gVFRzIG11c3QgcXVldWUgY29udHJvbCB0cmFuc2ZlcnMgKG5vdCBqdXN0IGJ1bGsgYW5kIGlzbyksIHNvCisgKiBib3RoIGNhbiB0YWxrIHRvIHRoZSBzYW1lIGh1YiBjb25jdXJyZW50bHkuCisgKi8KK3N0YXRpYyB2b2lkIGh1Yl90dF9rZXZlbnQgKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiX2h1YgkJKmh1YiA9IGFyZzsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaHViLT50dC5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5ICgmaHViLT50dC5jbGVhcl9saXN0KSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkCSp0ZW1wOworCQlzdHJ1Y3QgdXNiX3R0X2NsZWFyCSpjbGVhcjsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CisJCWludAkJCXN0YXR1czsKKworCQl0ZW1wID0gaHViLT50dC5jbGVhcl9saXN0Lm5leHQ7CisJCWNsZWFyID0gbGlzdF9lbnRyeSAodGVtcCwgc3RydWN0IHVzYl90dF9jbGVhciwgY2xlYXJfbGlzdCk7CisJCWxpc3RfZGVsICgmY2xlYXItPmNsZWFyX2xpc3QpOworCisJCS8qIGRyb3AgbG9jayBzbyBIQ0QgY2FuIGNvbmN1cnJlbnRseSByZXBvcnQgb3RoZXIgVFQgZXJyb3JzICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZodWItPnR0LmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gaHViX2NsZWFyX3R0X2J1ZmZlciAoaGRldiwgY2xlYXItPmRldmluZm8sIGNsZWFyLT50dCk7CisJCXNwaW5fbG9ja19pcnFzYXZlICgmaHViLT50dC5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9lcnIgKCZoZGV2LT5kZXYsCisJCQkJImNsZWFyIHR0ICVkICglMDR4KSBlcnJvciAlZFxuIiwKKwkJCQljbGVhci0+dHQsIGNsZWFyLT5kZXZpbmZvLCBzdGF0dXMpOworCQlrZnJlZSAoY2xlYXIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaHViLT50dC5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogdXNiX2h1Yl90dF9jbGVhcl9idWZmZXIgLSBjbGVhciBjb250cm9sL2J1bGsgVFQgc3RhdGUgaW4gaGlnaCBzcGVlZCBodWIKKyAqIEB1ZGV2OiB0aGUgZGV2aWNlIHdob3NlIHNwbGl0IHRyYW5zYWN0aW9uIGZhaWxlZAorICogQHBpcGU6IGlkZW50aWZpZXMgdGhlIGVuZHBvaW50IG9mIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24KKyAqCisgKiBIaWdoIHNwZWVkIEhDRHMgdXNlIHRoaXMgdG8gdGVsbCB0aGUgaHViIGRyaXZlciB0aGF0IHNvbWUgc3BsaXQgY29udHJvbCBvcgorICogYnVsayB0cmFuc2FjdGlvbiBmYWlsZWQgaW4gYSB3YXkgdGhhdCByZXF1aXJlcyBjbGVhcmluZyBpbnRlcm5hbCBzdGF0ZSBvZgorICogYSB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yLiAgVGhpcyBpcyBub3JtYWxseSBkZXRlY3RlZCAoYW5kIHJlcG9ydGVkKSBmcm9tCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBJdCBtYXkgbm90IGJlIHBvc3NpYmxlIGZvciB0aGF0IGh1YiB0byBoYW5kbGUgYWRkaXRpb25hbCBmdWxsIChvciBsb3cpCisgKiBzcGVlZCB0cmFuc2FjdGlvbnMgdW50aWwgdGhhdCBzdGF0ZSBpcyBmdWxseSBjbGVhcmVkIG91dC4KKyAqLwordm9pZCB1c2JfaHViX3R0X2NsZWFyX2J1ZmZlciAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBwaXBlKQoreworCXN0cnVjdCB1c2JfdHQJCSp0dCA9IHVkZXYtPnR0OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCB1c2JfdHRfY2xlYXIJKmNsZWFyOworCisJLyogd2UndmUgZ290IHRvIGNvcGUgd2l0aCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBlbmRpbmcgVFQgY2xlYXJzLAorCSAqIHNpbmNlIGVhY2ggVFQgaGFzICJhdCBsZWFzdCB0d28iIGJ1ZmZlcnMgdGhhdCBjYW4gbmVlZCBpdCAoYW5kCisJICogdGhlcmUgY2FuIGJlIG1hbnkgVFRzIHBlciBodWIpLiAgZXZlbiBpZiB0aGV5J3JlIHVuY29tbW9uLgorCSAqLworCWlmICgoY2xlYXIgPSBrbWFsbG9jIChzaXplb2YgKmNsZWFyLCBTTEFCX0FUT01JQykpID09IE5VTEwpIHsKKwkJZGV2X2VyciAoJnVkZXYtPmRldiwgImNhbid0IHNhdmUgQ0xFQVJfVFRfQlVGRkVSIHN0YXRlXG4iKTsKKwkJLyogRklYTUUgcmVjb3ZlciBzb21laG93IC4uLiBSRVNFVF9UVD8gKi8KKwkJcmV0dXJuOworCX0KKworCS8qIGluZm8gdGhhdCBDTEVBUl9UVF9CVUZGRVIgbmVlZHMgKi8KKwljbGVhci0+dHQgPSB0dC0+bXVsdGkgPyB1ZGV2LT50dHBvcnQgOiAxOworCWNsZWFyLT5kZXZpbmZvID0gdXNiX3BpcGVlbmRwb2ludCAocGlwZSk7CisJY2xlYXItPmRldmluZm8gfD0gdWRldi0+ZGV2bnVtIDw8IDQ7CisJY2xlYXItPmRldmluZm8gfD0gdXNiX3BpcGVjb250cm9sIChwaXBlKQorCQkJPyAoVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCA8PCAxMSkKKwkJCTogKFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgPDwgMTEpOworCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJY2xlYXItPmRldmluZm8gfD0gMSA8PCAxNTsKKwkKKwkvKiB0ZWxsIGtldmVudGQgdG8gY2xlYXIgc3RhdGUgZm9yIHRoaXMgVFQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnR0LT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCAoJmNsZWFyLT5jbGVhcl9saXN0LCAmdHQtPmNsZWFyX2xpc3QpOworCXNjaGVkdWxlX3dvcmsgKCZ0dC0+a2V2ZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIpCit7CisJaW50IHBvcnQxOworCisJLyogaWYgaHViIHN1cHBvcnRzIHBvd2VyIHN3aXRjaGluZywgZW5hYmxlIHBvd2VyIG9uIGVhY2ggcG9ydCAqLworCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfTFBTTSkgPCAyKSB7CisJCWRldl9kYmcoaHViLT5pbnRmZGV2LCAiZW5hYmxpbmcgcG93ZXIgb24gYWxsIHBvcnRzXG4iKTsKKwkJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOyBwb3J0MSsrKQorCQkJc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLAorCQkJCQlVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwl9CisKKwkvKiBXYWl0IGZvciBwb3dlciB0byBiZSBlbmFibGVkICovCisJbXNsZWVwKGh1Yi0+ZGVzY3JpcHRvci0+YlB3ck9uMlB3ckdvb2QgKiAyKTsKK30KKworc3RhdGljIHZvaWQgaHViX3F1aWVzY2Uoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwkvKiBzdG9wIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5ICovCisJaHViLT5xdWllc2NpbmcgPSAxOworCXVzYl9raWxsX3VyYihodWItPnVyYik7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMpCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmh1Yi0+bGVkcyk7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMgfHwgaHViLT50dC5odWIpCisJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCWludAlzdGF0dXM7CisKKwlodWItPnF1aWVzY2luZyA9IDA7CisJaHViLT5hY3RpdmF0aW5nID0gMTsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihodWItPnVyYiwgR0ZQX05PSU8pOworCWlmIChzdGF0dXMgPCAwKQorCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgImFjdGl2YXRlIC0tPiAlZFxuIiwgc3RhdHVzKTsKKwlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycyAmJiBibGlua2VubGlnaHRzKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmh1Yi0+bGVkcywgTEVEX0NZQ0xFX1BFUklPRCk7CisKKwkvKiBzY2FuIGFsbCBwb3J0cyBBU0FQICovCisJa2lja19raHViZChodWIpOworfQorCitzdGF0aWMgaW50IGh1Yl9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaHViICpodWIsCisJCXUxNiAqc3RhdHVzLCB1MTYgKmNoYW5nZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X2h1Yl9zdGF0dXMoaHViLT5oZGV2LCAmaHViLT5zdGF0dXMtPmh1Yik7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKKwkJCSIlcyBmYWlsZWQgKGVyciA9ICVkKVxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCWVsc2UgeworCQkqc3RhdHVzID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPmh1Yi53SHViU3RhdHVzKTsKKwkJKmNoYW5nZSA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5odWIud0h1YkNoYW5nZSk7IAorCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh1Yl9jb25maWd1cmUoc3RydWN0IHVzYl9odWIgKmh1YiwKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCXN0cnVjdCBkZXZpY2UgKmh1Yl9kZXYgPSBodWItPmludGZkZXY7CisJdTE2IGh1YnN0YXR1cywgaHViY2hhbmdlOworCXVuc2lnbmVkIGludCBwaXBlOworCWludCBtYXhwLCByZXQ7CisJY2hhciAqbWVzc2FnZTsKKworCWh1Yi0+YnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhoZGV2LCBzaXplb2YoKmh1Yi0+YnVmZmVyKSwgR0ZQX0tFUk5FTCwKKwkJCSZodWItPmJ1ZmZlcl9kbWEpOworCWlmICghaHViLT5idWZmZXIpIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCBhbGxvY2F0ZSBodWIgaXJxIGJ1ZmZlciI7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlodWItPnN0YXR1cyA9IGttYWxsb2Moc2l6ZW9mKCpodWItPnN0YXR1cyksIEdGUF9LRVJORUwpOworCWlmICghaHViLT5zdGF0dXMpIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCBrbWFsbG9jIGh1YiBzdGF0dXMgYnVmZmVyIjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWh1Yi0+ZGVzY3JpcHRvciA9IGttYWxsb2Moc2l6ZW9mKCpodWItPmRlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1Yi0+ZGVzY3JpcHRvcikgeworCQltZXNzYWdlID0gImNhbid0IGttYWxsb2MgaHViIGRlc2NyaXB0b3IiOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogUmVxdWVzdCB0aGUgZW50aXJlIGh1YiBkZXNjcmlwdG9yLgorCSAqIGh1Yi0+ZGVzY3JpcHRvciBjYW4gaGFuZGxlIFVTQl9NQVhDSElMRFJFTiBwb3J0cywKKwkgKiBidXQgdGhlIGh1YiBjYW4vd2lsbCByZXR1cm4gZmV3ZXIgYnl0ZXMgaGVyZS4KKwkgKi8KKwlyZXQgPSBnZXRfaHViX2Rlc2NyaXB0b3IoaGRldiwgaHViLT5kZXNjcmlwdG9yLAorCQkJc2l6ZW9mKCpodWItPmRlc2NyaXB0b3IpKTsKKwlpZiAocmV0IDwgMCkgeworCQltZXNzYWdlID0gImNhbid0IHJlYWQgaHViIGRlc2NyaXB0b3IiOworCQlnb3RvIGZhaWw7CisJfSBlbHNlIGlmIChodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0cyA+IFVTQl9NQVhDSElMRFJFTikgeworCQltZXNzYWdlID0gImh1YiBoYXMgdG9vIG1hbnkgcG9ydHMhIjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWhkZXYtPm1heGNoaWxkID0gaHViLT5kZXNjcmlwdG9yLT5iTmJyUG9ydHM7CisJZGV2X2luZm8gKGh1Yl9kZXYsICIlZCBwb3J0JXMgZGV0ZWN0ZWRcbiIsIGhkZXYtPm1heGNoaWxkLAorCQkoaGRldi0+bWF4Y2hpbGQgPT0gMSkgPyAiIiA6ICJzIik7CisKKwlsZTE2X3RvX2NwdXMoJmh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyk7CisKKwlpZiAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfQ09NUE9VTkQpIHsKKwkJaW50CWk7CisJCWNoYXIJcG9ydHN0ciBbVVNCX01BWENISUxEUkVOICsgMV07CisKKwkJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyBpKyspCisJCQlwb3J0c3RyW2ldID0gaHViLT5kZXNjcmlwdG9yLT5EZXZpY2VSZW1vdmFibGUKKwkJCQkgICAgWygoaSArIDEpIC8gOCldICYgKDEgPDwgKChpICsgMSkgJSA4KSkKKwkJCQk/ICdGJyA6ICdSJzsKKwkJcG9ydHN0cltoZGV2LT5tYXhjaGlsZF0gPSAwOworCQlkZXZfZGJnKGh1Yl9kZXYsICJjb21wb3VuZCBkZXZpY2U7IHBvcnQgcmVtb3ZhYmxlIHN0YXR1czogJXNcbiIsIHBvcnRzdHIpOworCX0gZWxzZQorCQlkZXZfZGJnKGh1Yl9kZXYsICJzdGFuZGFsb25lIGh1YlxuIik7CisKKwlzd2l0Y2ggKGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0xQU00pIHsKKwkJY2FzZSAweDAwOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiZ2FuZ2VkIHBvd2VyIHN3aXRjaGluZ1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDAxOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiaW5kaXZpZHVhbCBwb3J0IHBvd2VyIHN3aXRjaGluZ1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDAyOgorCQljYXNlIDB4MDM6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJubyBwb3dlciBzd2l0Y2hpbmcgKHVzYiAxLjApXG4iKTsKKwkJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfT0NQTSkgeworCQljYXNlIDB4MDA6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJnbG9iYWwgb3Zlci1jdXJyZW50IHByb3RlY3Rpb25cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwODoKKwkJCWRldl9kYmcoaHViX2RldiwgImluZGl2aWR1YWwgcG9ydCBvdmVyLWN1cnJlbnQgcHJvdGVjdGlvblxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDEwOgorCQljYXNlIDB4MTg6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJubyBvdmVyLWN1cnJlbnQgcHJvdGVjdGlvblxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCAoJmh1Yi0+dHQubG9jayk7CisJSU5JVF9MSVNUX0hFQUQgKCZodWItPnR0LmNsZWFyX2xpc3QpOworCUlOSVRfV09SSyAoJmh1Yi0+dHQua2V2ZW50LCBodWJfdHRfa2V2ZW50LCBodWIpOworCXN3aXRjaCAoaGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRldl9kYmcoaHViX2RldiwgIlNpbmdsZSBUVFxuIik7CisJCQlodWItPnR0Lmh1YiA9IGhkZXY7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoaGRldiwgMCwgMSk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQlkZXZfZGJnKGh1Yl9kZXYsICJUVCBwZXIgcG9ydFxuIik7CisJCQkJaHViLT50dC5tdWx0aSA9IDE7CisJCQl9IGVsc2UKKwkJCQlkZXZfZXJyKGh1Yl9kZXYsICJVc2luZyBzaW5nbGUgVFQgKGVyciAlZClcbiIsCisJCQkJCXJldCk7CisJCQlodWItPnR0Lmh1YiA9IGhkZXY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoaHViX2RldiwgIlVucmVjb2duaXplZCBodWIgcHJvdG9jb2wgJWRcbiIsCisJCQkJaGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpOworCQkJYnJlYWs7CisJfQorCisJc3dpdGNoIChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9UVFRUKSB7CisJCWNhc2UgMHgwMDoKKwkJCWlmIChoZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCAhPSAwKQorCQkJCWRldl9kYmcoaHViX2RldiwgIlRUIHJlcXVpcmVzIGF0IG1vc3QgOCBGUyBiaXQgdGltZXNcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgyMDoKKwkJCWRldl9kYmcoaHViX2RldiwgIlRUIHJlcXVpcmVzIGF0IG1vc3QgMTYgRlMgYml0IHRpbWVzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NDA6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJUVCByZXF1aXJlcyBhdCBtb3N0IDI0IEZTIGJpdCB0aW1lc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDYwOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiVFQgcmVxdWlyZXMgYXQgbW9zdCAzMiBGUyBiaXQgdGltZXNcbiIpOworCQkJYnJlYWs7CisJfQorCisJLyogcHJvYmUoKSB6ZXJvZXMgaHViLT5pbmRpY2F0b3JbXSAqLworCWlmIChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9QT1JUSU5EKSB7CisJCWh1Yi0+aGFzX2luZGljYXRvcnMgPSAxOworCQlkZXZfZGJnKGh1Yl9kZXYsICJQb3J0IGluZGljYXRvcnMgYXJlIHN1cHBvcnRlZFxuIik7CisJfQorCisJZGV2X2RiZyhodWJfZGV2LCAicG93ZXIgb24gdG8gcG93ZXIgZ29vZCB0aW1lOiAlZG1zXG4iLAorCQlodWItPmRlc2NyaXB0b3ItPmJQd3JPbjJQd3JHb29kICogMik7CisKKwkvKiBwb3dlciBidWRnZXRpbmcgbW9zdGx5IG1hdHRlcnMgd2l0aCBidXMtcG93ZXJlZCBodWJzLAorCSAqIGFuZCBiYXR0ZXJ5LXBvd2VyZWQgcm9vdCBodWJzIChtYXkgcHJvdmlkZSBqdXN0IDggbUEpLgorCSAqLworCXJldCA9IHVzYl9nZXRfc3RhdHVzKGhkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZodWJzdGF0dXMpOworCWlmIChyZXQgPCAwKSB7CisJCW1lc3NhZ2UgPSAiY2FuJ3QgZ2V0IGh1YiBzdGF0dXMiOworCQlnb3RvIGZhaWw7CisJfQorCWNwdV90b19sZTE2cygmaHVic3RhdHVzKTsKKwlpZiAoKGh1YnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKSkgPT0gMCkgeworCQlkZXZfZGJnKGh1Yl9kZXYsICJodWIgY29udHJvbGxlciBjdXJyZW50IHJlcXVpcmVtZW50OiAlZG1BXG4iLAorCQkJaHViLT5kZXNjcmlwdG9yLT5iSHViQ29udHJDdXJyZW50KTsKKwkJaHViLT5wb3dlcl9idWRnZXQgPSAoNTAxIC0gaHViLT5kZXNjcmlwdG9yLT5iSHViQ29udHJDdXJyZW50KQorCQkJCQkvIDI7CisJCWRldl9kYmcoaHViX2RldiwgIiVkbUEgYnVzIHBvd2VyIGJ1ZGdldCBmb3IgY2hpbGRyZW5cbiIsCisJCQlodWItPnBvd2VyX2J1ZGdldCAqIDIpOworCX0KKworCisJcmV0ID0gaHViX2h1Yl9zdGF0dXMoaHViLCAmaHVic3RhdHVzLCAmaHViY2hhbmdlKTsKKwlpZiAocmV0IDwgMCkgeworCQltZXNzYWdlID0gImNhbid0IGdldCBodWIgc3RhdHVzIjsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGxvY2FsIHBvd2VyIHN0YXR1cyByZXBvcnRzIGFyZW4ndCBhbHdheXMgY29ycmVjdCAqLworCWlmIChoZGV2LT5hY3Rjb25maWctPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSKQorCQlkZXZfZGJnKGh1Yl9kZXYsICJsb2NhbCBwb3dlciBzb3VyY2UgaXMgJXNcbiIsCisJCQkoaHVic3RhdHVzICYgSFVCX1NUQVRVU19MT0NBTF9QT1dFUikKKwkJCT8gImxvc3QgKGluYWN0aXZlKSIgOiAiZ29vZCIpOworCisJaWYgKChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9PQ1BNKSA9PSAwKQorCQlkZXZfZGJnKGh1Yl9kZXYsICIlc292ZXItY3VycmVudCBjb25kaXRpb24gZXhpc3RzXG4iLAorCQkJKGh1YnN0YXR1cyAmIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQpID8gIiIgOiAibm8gIik7CisKKwkvKiBzZXQgdXAgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoaGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaWYgKG1heHAgPiBzaXplb2YoKmh1Yi0+YnVmZmVyKSkKKwkJbWF4cCA9IHNpemVvZigqaHViLT5idWZmZXIpOworCisJaHViLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghaHViLT51cmIpIHsKKwkJbWVzc2FnZSA9ICJjb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHQgdXJiIjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXVzYl9maWxsX2ludF91cmIoaHViLT51cmIsIGhkZXYsIHBpcGUsICpodWItPmJ1ZmZlciwgbWF4cCwgaHViX2lycSwKKwkJaHViLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwlodWItPnVyYi0+dHJhbnNmZXJfZG1hID0gaHViLT5idWZmZXJfZG1hOworCWh1Yi0+dXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIG1heWJlIGN5Y2xlIHRoZSBodWIgbGVkcyAqLworCWlmIChodWItPmhhc19pbmRpY2F0b3JzICYmIGJsaW5rZW5saWdodHMpCisJCWh1Yi0+aW5kaWNhdG9yIFswXSA9IElORElDQVRPUl9DWUNMRTsKKworCWh1Yl9wb3dlcl9vbihodWIpOworCWh1Yl9hY3RpdmF0ZShodWIpOworCXJldHVybiAwOworCitmYWlsOgorCWRldl9lcnIgKGh1Yl9kZXYsICJjb25maWcgZmFpbGVkLCAlcyAoZXJyICVkKVxuIiwKKwkJCW1lc3NhZ2UsIHJldCk7CisJLyogaHViX2Rpc2Nvbm5lY3QoKSBmcmVlcyB1cmIgYW5kIGRlc2NyaXB0b3IgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaGlnaHNwZWVkX2h1YnM7CisKK3N0YXRpYyB2b2lkIGh1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldjsKKworCWlmICghaHViKQorCQlyZXR1cm47CisJaGRldiA9IGh1Yi0+aGRldjsKKworCWlmIChoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJaGlnaHNwZWVkX2h1YnMtLTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJaHViX3F1aWVzY2UoaHViKTsKKwl1c2JfZnJlZV91cmIoaHViLT51cmIpOworCWh1Yi0+dXJiID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnEoJmh1Yl9ldmVudF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZodWItPmV2ZW50X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmaHViX2V2ZW50X2xvY2spOworCisJaWYgKGh1Yi0+ZGVzY3JpcHRvcikgeworCQlrZnJlZShodWItPmRlc2NyaXB0b3IpOworCQlodWItPmRlc2NyaXB0b3IgPSBOVUxMOworCX0KKworCWlmIChodWItPnN0YXR1cykgeworCQlrZnJlZShodWItPnN0YXR1cyk7CisJCWh1Yi0+c3RhdHVzID0gTlVMTDsKKwl9CisKKwlpZiAoaHViLT5idWZmZXIpIHsKKwkJdXNiX2J1ZmZlcl9mcmVlKGhkZXYsIHNpemVvZigqaHViLT5idWZmZXIpLCBodWItPmJ1ZmZlciwKKwkJCQlodWItPmJ1ZmZlcl9kbWEpOworCQlodWItPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJLyogRnJlZSB0aGUgbWVtb3J5ICovCisJa2ZyZWUoaHViKTsKK30KKworc3RhdGljIGludCBodWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpkZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXY7CisJc3RydWN0IHVzYl9odWIgKmh1YjsKKworCWRlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwloZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCS8qIFNvbWUgaHVicyBoYXZlIGEgc3ViY2xhc3Mgb2YgMSwgd2hpY2ggQUZBSUNUIGFjY29yZGluZyB0byB0aGUgKi8KKwkvKiAgc3BlY3MgaXMgbm90IGRlZmluZWQsIGJ1dCBpdCB3b3JrcyAqLworCWlmICgoZGVzYy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCkgJiYKKwkgICAgKGRlc2MtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDEpKSB7CitkZXNjcmlwdG9yX2Vycm9yOgorCQlkZXZfZXJyICgmaW50Zi0+ZGV2LCAiYmFkIGRlc2NyaXB0b3IsIGlnbm9yaW5nIGh1YlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIE11bHRpcGxlIGVuZHBvaW50cz8gV2hhdCBraW5kIG9mIG11dGFudCBuaW5qYS1odWIgaXMgdGhpcz8gKi8KKwlpZiAoZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCisJCWdvdG8gZGVzY3JpcHRvcl9lcnJvcjsKKworCWVuZHBvaW50ID0gJmRlc2MtPmVuZHBvaW50WzBdLmRlc2M7CisKKwkvKiBPdXRwdXQgZW5kcG9pbnQ/IEN1cmlvdXNlciBhbmQgY3VyaW91c2VyLi4gKi8KKwlpZiAoIShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKQorCQlnb3RvIGRlc2NyaXB0b3JfZXJyb3I7CisKKwkvKiBJZiBpdCdzIG5vdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQsIHdlJ2QgYmV0dGVyIHB1bnQhICovCisJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCisJCWdvdG8gZGVzY3JpcHRvcl9lcnJvcjsKKworCS8qIFdlIGZvdW5kIGEgaHViICovCisJZGV2X2luZm8gKCZpbnRmLT5kZXYsICJVU0IgaHViIGZvdW5kXG4iKTsKKworCWh1YiA9IGttYWxsb2Moc2l6ZW9mKCpodWIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1YikgeworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiY291bGRuJ3Qga21hbGxvYyBodWIgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGh1YiwgMCwgc2l6ZW9mKCpodWIpKTsKKworCUlOSVRfTElTVF9IRUFEKCZodWItPmV2ZW50X2xpc3QpOworCWh1Yi0+aW50ZmRldiA9ICZpbnRmLT5kZXY7CisJaHViLT5oZGV2ID0gaGRldjsKKwlJTklUX1dPUksoJmh1Yi0+bGVkcywgbGVkX3dvcmssIGh1Yik7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBodWIpOworCisJaWYgKGhkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQloaWdoc3BlZWRfaHVicysrOworCisJaWYgKGh1Yl9jb25maWd1cmUoaHViLCBlbmRwb2ludCkgPj0gMCkKKwkJcmV0dXJuIDA7CisKKwlodWJfZGlzY29ubmVjdCAoaW50Zik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQKK2h1Yl9pb2N0bChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCisJLyogYXNzZXJ0IGlmbm8gPT0gMCAocGFydCBvZiBodWIgc3BlYykgKi8KKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFVTQkRFVkZTX0hVQl9QT1JUSU5GTzogeworCQlzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvICppbmZvID0gdXNlcl9kYXRhOworCQlpbnQgaTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisJCWlmIChoZGV2LT5kZXZudW0gPD0gMCkKKwkJCWluZm8tPm5wb3J0cyA9IDA7CisJCWVsc2UgeworCQkJaW5mby0+bnBvcnRzID0gaGRldi0+bWF4Y2hpbGQ7CisJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnBvcnRzOyBpKyspIHsKKwkJCQlpZiAoaGRldi0+Y2hpbGRyZW5baV0gPT0gTlVMTCkKKwkJCQkJaW5mby0+cG9ydFtpXSA9IDA7CisJCQkJZWxzZQorCQkJCQlpbmZvLT5wb3J0W2ldID0KKwkJCQkJCWhkZXYtPmNoaWxkcmVuW2ldLT5kZXZudW07CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisKKwkJcmV0dXJuIGluZm8tPm5wb3J0cyArIDE7CisJCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PU1lTOworCX0KK30KKworLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIGh1YiBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGh1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5tYXhjaGlsZDsgKytpKSB7CisJCWlmIChoZGV2LT5jaGlsZHJlbltpXSkKKwkJCXVzYl9kaXNjb25uZWN0KCZoZGV2LT5jaGlsZHJlbltpXSk7CisJfQorCWh1Yl9xdWllc2NlKGh1Yik7Cit9CisKKy8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBodWIgZGV2aWNlICovCitzdGF0aWMgdm9pZCBodWJfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCWh1Yl9hY3RpdmF0ZShodWIpOworCWh1Yl9wb3dlcl9vbihodWIpOworfQorCisKKy8qIGdyYWIgZGV2aWNlL3BvcnQgbG9jaywgcmV0dXJuaW5nIGluZGV4IG9mIHRoYXQgcG9ydCAoemVybyBiYXNlZCkuCisgKiBwcm90ZWN0cyB0aGUgdXBzdHJlYW0gbGluayB1c2VkIGJ5IHRoaXMgZGV2aWNlIGZyb20gY29uY3VycmVudAorICogdHJlZSBvcGVyYXRpb25zIGxpa2Ugc3VzcGVuZCwgcmVzdW1lLCByZXNldCwgYW5kIGRpc2Nvbm5lY3QsIHdoaWNoCisgKiBhcHBseSB0byBldmVyeXRoaW5nIGRvd25zdHJlYW0gb2YgYSBnaXZlbiBwb3J0LgorICovCitzdGF0aWMgaW50IGxvY2t0cmVlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAkJCXQ7CisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXY7CisKKwlpZiAoIXVkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogcm9vdCBodWIgaXMgYWx3YXlzIHRoZSBmaXJzdCBsb2NrIGluIHRoZSBzZXJpZXMgKi8KKwloZGV2ID0gdWRldi0+cGFyZW50OworCWlmICghaGRldikgeworCQl1c2JfbG9ja19kZXZpY2UodWRldik7CisJCXJldHVybiAwOworCX0KKworCS8qIG9uIHRoZSBwYXRoIGZyb20gcm9vdCB0byB1cywgbG9jayBldmVyeXRoaW5nIGZyb20KKwkgKiB0b3AgZG93biwgZHJvcHBpbmcgcGFyZW50IGxvY2tzIHdoZW4gbm90IG5lZWRlZAorCSAqLworCXQgPSBsb2NrdHJlZShoZGV2KTsKKwlpZiAodCA8IDApCisJCXJldHVybiB0OworCWZvciAodCA9IDA7IHQgPCBoZGV2LT5tYXhjaGlsZDsgdCsrKSB7CisJCWlmIChoZGV2LT5jaGlsZHJlblt0XSA9PSB1ZGV2KSB7CisJCQkvKiBldmVyeXRoaW5nIGlzIGZhaWwtZmFzdCBvbmNlIGRpc2Nvbm5lY3QKKwkJCSAqIHByb2Nlc3Npbmcgc3RhcnRzCisJCQkgKi8KKwkJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCQkJYnJlYWs7CisKKwkJCS8qIHdoZW4gZXZlcnlvbmUgZ3JhYnMgbG9ja3MgdG9wLT5ib3R0b20sCisJCQkgKiBub24tb3ZlcmxhcHBpbmcgd29yayBtYXkgYmUgY29uY3VycmVudAorCQkJICovCisJCQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworCQkJdXAoJmhkZXYtPnNlcmlhbGl6ZSk7CisJCQlyZXR1cm4gdCArIDE7CisJCX0KKwl9CisJdXNiX3VubG9ja19kZXZpY2UoaGRldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWRldi0+bWF4Y2hpbGQ7ICsraSkgeworCQlpZiAodWRldi0+Y2hpbGRyZW5baV0pCisJCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYtPmNoaWxkcmVuW2ldKTsKKwl9CisJdWRldi0+c3RhdGUgPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7Cit9CisKKy8qKgorICogdXNiX3NldF9kZXZpY2Vfc3RhdGUgLSBjaGFuZ2UgYSBkZXZpY2UncyBjdXJyZW50IHN0YXRlICh1c2Jjb3JlLCBoY2RzKQorICogQHVkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHdob3NlIHN0YXRlIHNob3VsZCBiZSBjaGFuZ2VkCisgKiBAbmV3X3N0YXRlOiBuZXcgc3RhdGUgdmFsdWUgdG8gYmUgc3RvcmVkCisgKgorICogdWRldi0+c3RhdGUgaXMgX25vdF8gZnVsbHkgcHJvdGVjdGVkIGJ5IHRoZSBkZXZpY2UgbG9jay4gIEFsdGhvdWdoCisgKiBtb3N0IHRyYW5zaXRpb25zIGFyZSBtYWRlIG9ubHkgd2hpbGUgaG9sZGluZyB0aGUgbG9jaywgdGhlIHN0YXRlIGNhbgorICogY2FuIGNoYW5nZSB0byBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgYXQgYWxtb3N0IGFueSB0aW1lLiAgVGhpcworICogaXMgc28gdGhhdCBkZXZpY2VzIGNhbiBiZSBtYXJrZWQgYXMgZGlzY29ubmVjdGVkIGFzIHNvb24gYXMgcG9zc2libGUsCisgKiB3aXRob3V0IGhhdmluZyB0byB3YWl0IGZvciBhbnkgc2VtYXBob3JlcyB0byBiZSByZWxlYXNlZC4gIEFzIGEgcmVzdWx0LAorICogYWxsIGNoYW5nZXMgdG8gYW55IGRldmljZSdzIHN0YXRlIG11c3QgYmUgcHJvdGVjdGVkIGJ5IHRoZQorICogZGV2aWNlX3N0YXRlX2xvY2sgc3BpbmxvY2suCisgKgorICogT25jZSBhIGRldmljZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZGV2aWNlIHRyZWUsIGFsbCBjaGFuZ2VzIHRvIGl0cyBzdGF0ZQorICogc2hvdWxkIGJlIG1hZGUgdXNpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHN0YXRlIHNob3VsZCBfbm90XyBiZSBzZXQgZGlyZWN0bHkuCisgKgorICogSWYgdWRldi0+c3RhdGUgaXMgYWxyZWFkeSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgdGhlbiBubyBjaGFuZ2UgaXMgbWFkZS4KKyAqIE90aGVyd2lzZSB1ZGV2LT5zdGF0ZSBpcyBzZXQgdG8gbmV3X3N0YXRlLCBhbmQgaWYgbmV3X3N0YXRlIGlzCisgKiBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgdGhlbiBhbGwgb2YgdWRldidzIGRlc2NlbmRhbnRzJyBzdGF0ZXMgYXJlIGFsc28gc2V0CisgKiB0byBVU0JfU1RBVEVfTk9UQVRUQUNIRUQuCisgKi8KK3ZvaWQgdXNiX3NldF9kZXZpY2Vfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCWVudW0gdXNiX2RldmljZV9zdGF0ZSBuZXdfc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCTsJLyogZG8gbm90aGluZyAqLworCWVsc2UgaWYgKG5ld19zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCXVkZXYtPnN0YXRlID0gbmV3X3N0YXRlOworCWVsc2UKKwkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCh1ZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTCh1c2Jfc2V0X2RldmljZV9zdGF0ZSk7CisKKworc3RhdGljIHZvaWQgY2hvb3NlX2FkZHJlc3Moc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50CQlkZXZudW07CisJc3RydWN0IHVzYl9idXMJKmJ1cyA9IHVkZXYtPmJ1czsKKworCS8qIElmIGtodWJkIGV2ZXIgYmVjb21lcyBtdWx0aXRocmVhZGVkLCB0aGlzIHdpbGwgbmVlZCBhIGxvY2sgKi8KKworCS8qIFRyeSB0byBhbGxvY2F0ZSB0aGUgbmV4dCBkZXZudW0gYmVnaW5uaW5nIGF0IGJ1cy0+ZGV2bnVtX25leHQuICovCisJZGV2bnVtID0gZmluZF9uZXh0X3plcm9fYml0KGJ1cy0+ZGV2bWFwLmRldmljZW1hcCwgMTI4LAorCQkJYnVzLT5kZXZudW1fbmV4dCk7CisJaWYgKGRldm51bSA+PSAxMjgpCisJCWRldm51bSA9IGZpbmRfbmV4dF96ZXJvX2JpdChidXMtPmRldm1hcC5kZXZpY2VtYXAsIDEyOCwgMSk7CisKKwlidXMtPmRldm51bV9uZXh0ID0gKCBkZXZudW0gPj0gMTI3ID8gMSA6IGRldm51bSArIDEpOworCisJaWYgKGRldm51bSA8IDEyOCkgeworCQlzZXRfYml0KGRldm51bSwgYnVzLT5kZXZtYXAuZGV2aWNlbWFwKTsKKwkJdWRldi0+ZGV2bnVtID0gZGV2bnVtOworCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWlmICh1ZGV2LT5kZXZudW0gPiAwKSB7CisJCWNsZWFyX2JpdCh1ZGV2LT5kZXZudW0sIHVkZXYtPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJCXVkZXYtPmRldm51bSA9IC0xOworCX0KK30KKworLyoqCisgKiB1c2JfZGlzY29ubmVjdCAtIGRpc2Nvbm5lY3QgYSBkZXZpY2UgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiBAcGRldjogcG9pbnRlciB0byBkZXZpY2UgYmVpbmcgZGlzY29ubmVjdGVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogU29tZXRoaW5nIGdvdCBkaXNjb25uZWN0ZWQuIEdldCByaWQgb2YgaXQgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4uCisgKgorICogSWYgKnBkZXYgaXMgYSBub3JtYWwgZGV2aWNlIHRoZW4gdGhlIHBhcmVudCBodWIgbXVzdCBhbHJlYWR5IGJlIGxvY2tlZC4KKyAqIElmICpwZGV2IGlzIGEgcm9vdCBodWIgdGhlbiB0aGlzIHJvdXRpbmUgd2lsbCBhY3F1aXJlIHRoZQorICogdXNiX2J1c19saXN0X2xvY2sgb24gYmVoYWxmIG9mIHRoZSBjYWxsZXIuCisgKgorICogT25seSBodWIgZHJpdmVycyAoaW5jbHVkaW5nIHZpcnR1YWwgcm9vdCBodWIgZHJpdmVycyBmb3IgaG9zdAorICogY29udHJvbGxlcnMpIHNob3VsZCBldmVyIGNhbGwgdGhpcy4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKipwZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gKnBkZXY7CisJaW50CQkJaTsKKworCWlmICghdWRldikgeworCQlwcl9kZWJ1ZyAoIiVzIG5vZGV2XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogbWFyayB0aGUgZGV2aWNlIGFzIGluYWN0aXZlLCBzbyBhbnkgZnVydGhlciB1cmIgc3VibWlzc2lvbnMgZm9yCisJICogdGhpcyBkZXZpY2UgKGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuKSB3aWxsIGZhaWwgaW1tZWRpYXRlbHkuCisJICogdGhpcyBxdWllc2NlcyBldmVyeXRpbmcgZXhjZXB0IHBlbmRpbmcgdXJicy4KKwkgKi8KKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCisJLyogbG9jayB0aGUgYnVzIGxpc3Qgb24gYmVoYWxmIG9mIEhDRHMgdW5yZWdpc3RlcmluZyB0aGVpciByb290IGh1YnMgKi8KKwlpZiAoIXVkZXYtPnBhcmVudCkgeworCQlkb3duKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwl9IGVsc2UKKwkJZG93bigmdWRldi0+c2VyaWFsaXplKTsKKworCWRldl9pbmZvICgmdWRldi0+ZGV2LCAiVVNCIGRpc2Nvbm5lY3QsIGFkZHJlc3MgJWRcbiIsIHVkZXYtPmRldm51bSk7CisKKwkvKiBGcmVlIHVwIGFsbCB0aGUgY2hpbGRyZW4gYmVmb3JlIHdlIHJlbW92ZSB0aGlzIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYQ0hJTERSRU47IGkrKykgeworCQlpZiAodWRldi0+Y2hpbGRyZW5baV0pCisJCQl1c2JfZGlzY29ubmVjdCgmdWRldi0+Y2hpbGRyZW5baV0pOworCX0KKworCS8qIGRlYWxsb2NhdGUgaGNkL2hhcmR3YXJlIHN0YXRlIC4uLiBudWtpbmcgYWxsIHBlbmRpbmcgdXJicyBhbmQKKwkgKiBjbGVhbmluZyB1cCBhbGwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKwkgKiBzbyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBub3cgZnVsbHkgcXVpZXNjZWQuCisJICovCisJdXNiX2Rpc2FibGVfZGV2aWNlKHVkZXYsIDApOworCisJLyogRnJlZSB0aGUgZGV2aWNlIG51bWJlciwgcmVtb3ZlIHRoZSAvcHJvYy9idXMvdXNiIGVudHJ5IGFuZAorCSAqIHRoZSBzeXNmcyBhdHRyaWJ1dGVzLCBhbmQgZGVsZXRlIHRoZSBwYXJlbnQncyBjaGlsZHJlbltdCisJICogKG9yIHJvb3RfaHViKSBwb2ludGVyLgorCSAqLworCWRldl9kYmcgKCZ1ZGV2LT5kZXYsICJ1bnJlZ2lzdGVyaW5nIGRldmljZVxuIik7CisJcmVsZWFzZV9hZGRyZXNzKHVkZXYpOworCXVzYmZzX3JlbW92ZV9kZXZpY2UodWRldik7CisJdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXModWRldik7CisKKwkvKiBBdm9pZCByYWNlcyB3aXRoIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoKSAqLworCXNwaW5fbG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKwkqcGRldiA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisKKwlpZiAoIXVkZXYtPnBhcmVudCkgeworCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwl9IGVsc2UKKwkJdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRldi0+ZGV2KTsKK30KKworc3RhdGljIGludCBjaG9vc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgYywgaTsKKworCS8qIE5PVEU6IHRoaXMgc2hvdWxkIGludGVyYWN0IHdpdGggaHViIHBvd2VyIGJ1ZGdldGluZyAqLworCisJYyA9IHVkZXYtPmNvbmZpZ1swXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmRlc2M7CisKKwkJCS8qIGhldXJpc3RpYzogIExpbnV4IGlzIG1vcmUgbGlrZWx5IHRvIGhhdmUgY2xhc3MKKwkJCSAqIGRyaXZlcnMsIHNvIGF2b2lkIHZlbmRvci1zcGVjaWZpYyBpbnRlcmZhY2VzLgorCQkJICovCisJCQlkZXNjID0gJnVkZXYtPmNvbmZpZ1tpXS5pbnRmX2NhY2hlWzBdCisJCQkJCS0+YWx0c2V0dGluZy0+ZGVzYzsKKwkJCWlmIChkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKQorCQkJCWNvbnRpbnVlOworCQkJLyogQ09NTS8yL2FsbCBpcyBDREMgQUNNLCBleGNlcHQgMHhmZiBpcyBNU0ZUIFJORElTLgorCQkJICogTVNGVCBuZWVkcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCBjb25maWc7IG5ldmVyIHVzZQorCQkJICogaXQgYXMgdGhlIGRlZmF1bHQgdW5sZXNzIExpbnV4IGhhcyBob3N0LXNpZGUgUk5ESVMuCisJCQkgKiBBIHNlY29uZCBjb25maWcgd291bGQgaWRlYWxseSBiZSBDREMtRXRoZXJuZXQsIGJ1dAorCQkJICogbWF5IGluc3RlYWQgYmUgdGhlICJ2ZW5kb3Igc3BlY2lmaWMiIENEQyBzdWJzZXQKKwkJCSAqIGxvbmcgdXNlZCBieSBBUk0gTGludXggZm9yIHNhMTEwMCBvciBweGEyNTUuCisJCQkgKi8KKwkJCWlmIChkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0NPTU0KKwkJCQkJJiYgZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzID09IDIKKwkJCQkJJiYgZGVzYy0+YkludGVyZmFjZVByb3RvY29sID09IDB4ZmYpIHsKKwkJCQljID0gdWRldi0+Y29uZmlnWzFdLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWMgPSB1ZGV2LT5jb25maWdbaV0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOworCQkJYnJlYWs7CisJCX0KKwkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCSJjb25maWd1cmF0aW9uICMlZCBjaG9zZW4gZnJvbSAlZCBjaG9pY2VzXG4iLAorCQkJYywgdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMpOworCX0KKwlyZXR1cm4gYzsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBzaG93X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY2hhciAqaWQsIGNoYXIgKnN0cmluZykKK3sKKwlpZiAoIXN0cmluZykKKwkJcmV0dXJuOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmdWRldi0+ZGV2LCAiJXM6ICVzXG4iLCBpZCwgc3RyaW5nKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG93X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY2hhciAqaWQsIGNoYXIgKnN0cmluZykKK3t9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2V0X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY2hhciAqKnN0cmluZywgaW50IGluZGV4KQoreworCWNoYXIgKmJ1ZjsKKworCWlmICghaW5kZXgpCisJCXJldHVybjsKKwlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKwlpZiAodXNiX3N0cmluZyh1ZGV2LCBpbmRleCwgYnVmLCAyNTYpID4gMCkKKwkJKnN0cmluZyA9IGJ1ZjsKKwllbHNlCisJCWtmcmVlKGJ1Zik7Cit9CisKKworI2lmZGVmCUNPTkZJR19VU0JfT1RHCisjaW5jbHVkZSAib3RnX3doaXRlbGlzdC5oIgorI2VuZGlmCisKKy8qKgorICogdXNiX25ld19kZXZpY2UgLSBwZXJmb3JtIGluaXRpYWwgZGV2aWNlIHNldHVwICh1c2Jjb3JlLWludGVybmFsKQorICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2l0aCBkZXZpY2VzIHdoaWNoIGhhdmUgYmVlbiBlbnVtZXJhdGVkLCBidXQgbm90IHlldAorICogY29uZmlndXJlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKKyAqIGZvciBhbnkgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBsb2NrZWQgdWRldiBhbmQKKyAqIGVpdGhlciB0aGUgcGFyZW50IGh1YiAoaWYgdWRldiBpcyBhIG5vcm1hbCBkZXZpY2UpIG9yIGVsc2UgdGhlCisgKiB1c2JfYnVzX2xpc3RfbG9jayAoaWYgdWRldiBpcyBhIHJvb3QgaHViKS4gIFRoZSBwYXJlbnQncyBwb2ludGVyIHRvCisgKiB1ZGV2IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLCBidXQgdWRldiBpcyBub3QgeWV0IHZpc2libGUgdGhyb3VnaAorICogc3lzZnMgb3Igb3RoZXIgZmlsZXN5c3RlbSBjb2RlLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyAoZGV2aWNlIGlzIGNvbmZpZ3VyZWQgYW5kIGxpc3RlZCwgd2l0aCBpdHMKKyAqIGludGVyZmFjZXMsIGluIHN5c2ZzKTsgZWxzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBPbmx5IHRoZSBodWIgZHJpdmVyIHNob3VsZCBldmVyIGNhbGwgdGhpczsgcm9vdCBodWIgcmVnaXN0cmF0aW9uCisgKiB1c2VzIGl0IGluZGlyZWN0bHkuCisgKi8KK2ludCB1c2JfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgZXJyOworCWludCBjOworCisJZXJyID0gdXNiX2dldF9jb25maWd1cmF0aW9uKHVkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IHJlYWQgY29uZmlndXJhdGlvbnMsIGVycm9yICVkXG4iLAorCQkJZXJyKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIHJlYWQgdGhlIHN0YW5kYXJkIHN0cmluZ3MgYW5kIGNhY2hlIHRoZW0gaWYgcHJlc2VudCAqLworCWdldF9zdHJpbmcodWRldiwgJnVkZXYtPnByb2R1Y3QsIHVkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QpOworCWdldF9zdHJpbmcodWRldiwgJnVkZXYtPm1hbnVmYWN0dXJlciwgdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyKTsKKwlnZXRfc3RyaW5nKHVkZXYsICZ1ZGV2LT5zZXJpYWwsIHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcik7CisKKwkvKiBUZWxsIHRoZSB3b3JsZCEgKi8KKwlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJuZXcgZGV2aWNlIHN0cmluZ3M6IE1mcj0lZCwgUHJvZHVjdD0lZCwgIgorCQkJIlNlcmlhbE51bWJlcj0lZFxuIiwKKwkJCXVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwkJCXVkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCisJCQl1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpOworCXNob3dfc3RyaW5nKHVkZXYsICJQcm9kdWN0IiwgdWRldi0+cHJvZHVjdCk7CisJc2hvd19zdHJpbmcodWRldiwgIk1hbnVmYWN0dXJlciIsIHVkZXYtPm1hbnVmYWN0dXJlcik7CisJc2hvd19zdHJpbmcodWRldiwgIlNlcmlhbE51bWJlciIsIHVkZXYtPnNlcmlhbCk7CisKKyNpZmRlZglDT05GSUdfVVNCX09URworCS8qCisJICogT1RHLWF3YXJlIGRldmljZXMgb24gT1RHLWNhcGFibGUgcm9vdCBodWJzIG1heSBiZSBhYmxlIHRvIHVzZSBTUlAsCisJICogdG8gd2FrZSB1cyBhZnRlciB3ZSd2ZSBwb3dlcmVkIG9mZiBWQlVTOyBhbmQgSE5QLCBzd2l0Y2hpbmcgcm9sZXMKKwkgKiAiaG9zdCIgdG8gInBlcmlwaGVyYWwiLiAgVGhlIE9URyBkZXNjcmlwdG9yIGhlbHBzIGZpZ3VyZSB0aGlzIG91dC4KKwkgKi8KKwlpZiAoIXVkZXYtPmJ1cy0+aXNfYl9ob3N0CisJCQkmJiB1ZGV2LT5jb25maWcKKwkJCSYmIHVkZXYtPnBhcmVudCA9PSB1ZGV2LT5idXMtPnJvb3RfaHViKSB7CisJCXN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IJKmRlc2MgPSAwOworCQlzdHJ1Y3QgdXNiX2J1cwkJCSpidXMgPSB1ZGV2LT5idXM7CisKKwkJLyogZGVzY3JpcHRvciBtYXkgYXBwZWFyIGFueXdoZXJlIGluIGNvbmZpZyAqLworCQlpZiAoX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IgKHVkZXYtPnJhd2Rlc2NyaXB0b3JzWzBdLAorCQkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5jb25maWdbMF0uZGVzYy53VG90YWxMZW5ndGgpLAorCQkJCQlVU0JfRFRfT1RHLCAodm9pZCAqKikgJmRlc2MpID09IDApIHsKKwkJCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfT1RHX0hOUCkgeworCQkJCXVuc2lnbmVkCQlwb3J0MTsKKwkJCQlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdCA9IHVkZXYtPnBhcmVudDsKKwkJCQkKKwkJCQlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gcm9vdC0+bWF4Y2hpbGQ7CisJCQkJCQlwb3J0MSsrKSB7CisJCQkJCWlmIChyb290LT5jaGlsZHJlbltwb3J0MS0xXSA9PSB1ZGV2KQorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCQkJIkR1YWwtUm9sZSBPVEcgZGV2aWNlIG9uICVzSE5QIHBvcnRcbiIsCisJCQkJCShwb3J0MSA9PSBidXMtPm90Z19wb3J0KQorCQkJCQkJPyAiIiA6ICJub24tIik7CisKKwkJCQkvKiBlbmFibGUgSE5QIGJlZm9yZSBzdXNwZW5kLCBpdCdzIHNpbXBsZXIgKi8KKwkJCQlpZiAocG9ydDEgPT0gYnVzLT5vdGdfcG9ydCkKKwkJCQkJYnVzLT5iX2hucF9lbmFibGUgPSAxOworCQkJCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJCQl1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIDAsCisJCQkJCWJ1cy0+Yl9obnBfZW5hYmxlCisJCQkJCQk/IFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFCisJCQkJCQk6IFVTQl9ERVZJQ0VfQV9BTFRfSE5QX1NVUFBPUlQsCisJCQkJCTAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJCQlpZiAoZXJyIDwgMCkgeworCQkJCQkvKiBPVEcgTUVTU0FHRTogcmVwb3J0IGVycm9ycyBoZXJlLAorCQkJCQkgKiBjdXN0b21pemUgdG8gbWF0Y2ggeW91ciBwcm9kdWN0LgorCQkJCQkgKi8KKwkJCQkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCQkJCSJjYW4ndCBzZXQgSE5QIG1vZGU7ICVkXG4iLAorCQkJCQkJZXJyKTsKKwkJCQkJYnVzLT5iX2hucF9lbmFibGUgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICghaXNfdGFyZ2V0ZWQodWRldikpIHsKKworCQkvKiBNYXliZSBpdCBjYW4gdGFsayB0byB1cywgdGhvdWdoIHdlIGNhbid0IHRhbGsgdG8gaXQuCisJCSAqIChJbmNsdWRlcyBITlAgdGVzdCBkZXZpY2UuKQorCQkgKi8KKwkJaWYgKHVkZXYtPmJ1cy0+Yl9obnBfZW5hYmxlIHx8IHVkZXYtPmJ1cy0+aXNfYl9ob3N0KSB7CisJCQlzdGF0aWMgaW50IF9fdXNiX3N1c3BlbmRfZGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqLAorCQkJCQkJaW50IHBvcnQxLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworCQkJZXJyID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwKKwkJCQkJdWRldi0+YnVzLT5vdGdfcG9ydCwKKwkJCQkJUE1TR19TVVNQRU5EKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgIkhOUCBmYWlsLCAlZFxuIiwgZXJyKTsKKwkJfQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorI2VuZGlmCisKKwkvKiBwdXQgZGV2aWNlLXNwZWNpZmljIGZpbGVzIGludG8gc3lzZnMgKi8KKwllcnIgPSBkZXZpY2VfYWRkICgmdWRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IGRldmljZV9hZGQsIGVycm9yICVkXG4iLCBlcnIpOworCQlnb3RvIGZhaWw7CisJfQorCXVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzICh1ZGV2KTsKKworCS8qIGNob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiB0aGF0IHJlZ2lzdGVycyB0aGUgaW50ZXJmYWNlcworCSAqIHdpdGggdGhlIGRyaXZlciBjb3JlLCBhbmQgbGV0cyB1c2IgZGV2aWNlIGRyaXZlcnMgYmluZCB0byB0aGVtLgorCSAqLworCWMgPSBjaG9vc2VfY29uZmlndXJhdGlvbih1ZGV2KTsKKwlpZiAoYyA8IDApCisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCisJCQkJImNhbid0IGNob29zZSBhbiBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiIpOworCWVsc2UgeworCQllcnIgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgYyk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IHNldCBjb25maWcgIyVkLCBlcnJvciAlZFxuIiwKKwkJCQkJYywgZXJyKTsKKwkJCXVzYl9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHVkZXYpOworCQkJZGV2aWNlX2RlbCgmdWRldi0+ZGV2KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCS8qIFVTQiBkZXZpY2Ugc3RhdGUgPT0gY29uZmlndXJlZCAuLi4gdXNhYmxlICovCisKKwkvKiBhZGQgYSAvcHJvYy9idXMvdXNiIGVudHJ5ICovCisJdXNiZnNfYWRkX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBodWJfcG9ydF9zdGF0dXMoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQkJICAgICAgIHUxNiAqc3RhdHVzLCB1MTYgKmNoYW5nZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X3BvcnRfc3RhdHVzKGh1Yi0+aGRldiwgcG9ydDEsICZodWItPnN0YXR1cy0+cG9ydCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKKwkJCSIlcyBmYWlsZWQgKGVyciA9ICVkKVxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCWVsc2UgeworCQkqc3RhdHVzID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPnBvcnQud1BvcnRTdGF0dXMpOworCQkqY2hhbmdlID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPnBvcnQud1BvcnRDaGFuZ2UpOyAKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBQT1JUX1JFU0VUX1RSSUVTCTUKKyNkZWZpbmUgU0VUX0FERFJFU1NfVFJJRVMJMgorI2RlZmluZSBHRVRfREVTQ1JJUFRPUl9UUklFUwkyCisjZGVmaW5lIFNFVF9DT05GSUdfVFJJRVMJKDIgKiAodXNlX2JvdGhfc2NoZW1lcyArIDEpKQorI2RlZmluZSBVU0VfTkVXX1NDSEVNRShpKQkoKGkpIC8gMiA9PSBvbGRfc2NoZW1lX2ZpcnN0KQorCisjZGVmaW5lIEhVQl9ST09UX1JFU0VUX1RJTUUJNTAJLyogdGltZXMgYXJlIGluIG1zZWMgKi8KKyNkZWZpbmUgSFVCX1NIT1JUX1JFU0VUX1RJTUUJMTAKKyNkZWZpbmUgSFVCX0xPTkdfUkVTRVRfVElNRQkyMDAKKyNkZWZpbmUgSFVCX1JFU0VUX1RJTUVPVVQJNTAwCisKK3N0YXRpYyBpbnQgaHViX3BvcnRfd2FpdF9yZXNldChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCisJCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwlpbnQgZGVsYXlfdGltZSwgcmV0OworCXUxNiBwb3J0c3RhdHVzOworCXUxNiBwb3J0Y2hhbmdlOworCisJZm9yIChkZWxheV90aW1lID0gMDsKKwkJCWRlbGF5X3RpbWUgPCBIVUJfUkVTRVRfVElNRU9VVDsKKwkJCWRlbGF5X3RpbWUgKz0gZGVsYXkpIHsKKwkJLyogd2FpdCB0byBnaXZlIHRoZSBkZXZpY2UgYSBjaGFuY2UgdG8gcmVzZXQgKi8KKwkJbXNsZWVwKGRlbGF5KTsKKworCQkvKiByZWFkIGFuZCBkZWNvZGUgcG9ydCBzdGF0dXMgKi8KKwkJcmV0ID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsICZwb3J0c3RhdHVzLCAmcG9ydGNoYW5nZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBEZXZpY2Ugd2VudCBhd2F5PyAqLworCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkKKwkJCXJldHVybiAtRU5PVENPTk47CisKKwkJLyogYm9tYiBvdXQgY29tcGxldGVseSBpZiBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZWQgKi8KKwkJaWYgKChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogaWYgd2VgdmUgZmluaXNoZWQgcmVzZXR0aW5nLCB0aGVuIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLworCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9SRVNFVCkgJiYKKwkJICAgIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpKSB7CisJCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCkKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCQkJZWxzZSBpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEKQorCQkJCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0xPVzsKKwkJCWVsc2UKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBzd2l0Y2ggdG8gdGhlIGxvbmcgZGVsYXkgYWZ0ZXIgdHdvIHNob3J0IGRlbGF5IGZhaWx1cmVzICovCisJCWlmIChkZWxheV90aW1lID49IDIgKiBIVUJfU0hPUlRfUkVTRVRfVElNRSkKKwkJCWRlbGF5ID0gSFVCX0xPTkdfUkVTRVRfVElNRTsKKworCQlkZXZfZGJnIChodWItPmludGZkZXYsCisJCQkicG9ydCAlZCBub3QgcmVzZXQgeWV0LCB3YWl0aW5nICVkbXNcbiIsCisJCQlwb3J0MSwgZGVsYXkpOworCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgaHViX3BvcnRfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpCit7CisJaW50IGksIHN0YXR1czsKKworCS8qIFJlc2V0IHRoZSBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IFBPUlRfUkVTRVRfVFJJRVM7IGkrKykgeworCQlzdGF0dXMgPSBzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKKwkJCQlwb3J0MSwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwKKwkJCQkJImNhbm5vdCByZXNldCBwb3J0ICVkIChlcnIgPSAlZClcbiIsCisJCQkJCXBvcnQxLCBzdGF0dXMpOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IGh1Yl9wb3J0X3dhaXRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOworCQkJaWYgKHN0YXR1cykKKwkJCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCQkJCSJwb3J0X3dhaXRfcmVzZXQ6IGVyciA9ICVkXG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJfQorCisJCS8qIHJldHVybiBvbiBkaXNjb25uZWN0IG9yIHJlc2V0ICovCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCS8qIFRSU1RSQ1kgPSAxMCBtcyAqLworCQkJbXNsZWVwKDEwKTsKKwkJCS8qIEZBTEwgVEhST1VHSCAqLworCQljYXNlIC1FTk9UQ09OTjoKKwkJY2FzZSAtRU5PREVWOgorCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKKwkJCQlwb3J0MSwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKwkJCS8qIEZJWE1FIG5lZWQgZGlzY29ubmVjdCgpIGZvciBOT1RBVFRBQ0hFRCBkZXZpY2UgKi8KKwkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIHN0YXR1cworCQkJCQk/IFVTQl9TVEFURV9OT1RBVFRBQ0hFRAorCQkJCQk6IFVTQl9TVEFURV9ERUZBVUxUKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKworCQlkZXZfZGJnIChodWItPmludGZkZXYsCisJCQkicG9ydCAlZCBub3QgZW5hYmxlZCwgdHJ5aW5nIHJlc2V0IGFnYWluLi4uXG4iLAorCQkJcG9ydDEpOworCQlkZWxheSA9IEhVQl9MT05HX1JFU0VUX1RJTUU7CisJfQorCisJZGV2X2VyciAoaHViLT5pbnRmZGV2LAorCQkiQ2Fubm90IGVuYWJsZSBwb3J0ICVpLiAgTWF5YmUgdGhlIFVTQiBjYWJsZSBpcyBiYWQ/XG4iLAorCQlwb3J0MSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGh1Yl9wb3J0X2Rpc2FibGUoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLCBpbnQgc2V0X3N0YXRlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCWludCByZXQ7CisKKwlpZiAoaGRldi0+Y2hpbGRyZW5bcG9ydDEtMV0gJiYgc2V0X3N0YXRlKSB7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdLAorCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJfQorCXJldCA9IGNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpOworCWlmIChyZXQpCisJCWRldl9lcnIoaHViLT5pbnRmZGV2LCAiY2Fubm90IGRpc2FibGUgcG9ydCAlZCAoZXJyID0gJWQpXG4iLAorCQkJcG9ydDEsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGlzYWJsZSBhIHBvcnQgYW5kIG1hcmsgYSBsb2dpY2FsIGNvbm5uZWN0LWNoYW5nZSBldmVudCwgc28gdGhhdCBzb21lCisgKiB0aW1lIGxhdGVyIGtodWJkIHdpbGwgZGlzY29ubmVjdCgpIGFueSBleGlzdGluZyB1c2JfZGV2aWNlIG9uIHRoZSBwb3J0CisgKiBhbmQgd2lsbCByZS1lbnVtZXJhdGUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSBkZXZpY2UgYXR0YWNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIGh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEpCit7CisJZGV2X2RiZyhodWItPmludGZkZXYsICJsb2dpY2FsIGRpc2Nvbm5lY3Qgb24gcG9ydCAlZFxuIiwgcG9ydDEpOworCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBwb3J0MSwgMSk7CisKKwkvKiBGSVhNRSBsZXQgY2FsbGVyIGFzayB0byBwb3dlciBkb3duIHRoZSBwb3J0OgorCSAqICAtIHNvbWUgZGV2aWNlcyB3b24ndCBlbnVtZXJhdGUgd2l0aG91dCBhIFZCVVMgcG93ZXIgY3ljbGUKKwkgKiAgLSBTUlAgc2F2ZXMgcG93ZXIgdGhhdCB3YXkKKwkgKiAgLSB1c2Jfc3VzcGVuZF9kZXZpY2UoZGV2LFBNX1NVU1BFTkRfRElTSykKKwkgKiBUaGF0J3MgZWFzeSBpZiB0aGlzIGh1YiBjYW4gc3dpdGNoIHBvd2VyIHBlci1wb3J0LCBhbmQKKwkgKiBraHViZCByZWFjdGl2YXRlcyB0aGUgcG9ydCBsYXRlciAodGltZXIsIFNSUCwgZXRjKS4KKwkgKiBQb3dlcmRvd24gbXVzdCBiZSBvcHRpb25hbCwgYmVjYXVzZSBvZiByZXNldC9ERlUuCisJICovCisKKwlzZXRfYml0KHBvcnQxLCBodWItPmNoYW5nZV9iaXRzKTsKKyAJa2lja19raHViZChodWIpOworfQorCisKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKworLyoKKyAqIFNlbGVjdGl2ZSBwb3J0IHN1c3BlbmQgcmVkdWNlcyBwb3dlcjsgbW9zdCBzdXNwZW5kZWQgZGV2aWNlcyBkcmF3CisgKiBsZXNzIHRoYW4gNTAwIHVBLiAgSXQncyBhbHNvIHVzZWQgaW4gT1RHLCBhbG9uZyB3aXRoIHJlbW90ZSB3YWtldXAuCisgKiBBbGwgZGV2aWNlcyBiZWxvdyB0aGUgc3VzcGVuZGVkIHBvcnQgYXJlIGFsc28gc3VzcGVuZGVkLgorICoKKyAqIERldmljZXMgbGVhdmUgc3VzcGVuZCBzdGF0ZSB3aGVuIHRoZSBob3N0IHdha2VzIHRoZW0gdXAuICBTb21lIGRldmljZXMKKyAqIGFsc28gc3VwcG9ydCAicmVtb3RlIHdha2V1cCIsIHdoZXJlIHRoZSBkZXZpY2UgY2FuIGFjdGl2YXRlIHRoZSBVU0IKKyAqIHRyZWUgYWJvdmUgdGhlbSB0byBkZWxpdmVyIGRhdGEsIHN1Y2ggYXMgYSBrZXlwcmVzcyBvciBwYWNrZXQuICBJbgorICogc29tZSBjYXNlcywgdGhpcyB3YWtlcyB0aGUgVVNCIGhvc3QuCisgKi8KK3N0YXRpYyBpbnQgaHViX3BvcnRfc3VzcGVuZChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAlzdGF0dXM7CisKKwkvLyBkZXZfZGJnKGh1Yi0+aW50ZmRldiwgInN1c3BlbmQgcG9ydCAlZFxuIiwgcG9ydDEpOworCisJLyogZW5hYmxlIHJlbW90ZSB3YWtldXAgd2hlbiBhcHByb3ByaWF0ZTsgdGhpcyBsZXRzIHRoZSBkZXZpY2UKKwkgKiB3YWtlIHVwIHRoZSB1cHN0cmVhbSBodWIgKGluY2x1ZGluZyBtYXliZSB0aGUgcm9vdCBodWIpLgorCSAqCisJICogTk9URTogIE9URyBkZXZpY2VzIG1heSBpc3N1ZSByZW1vdGUgd2FrZXVwIChvciBTUlApIGV2ZW4gd2hlbgorCSAqIHdlIGRvbid0IGV4cGxpY2l0bHkgZW5hYmxlIGl0IGhlcmUuCisJICovCisJaWYgKHVkZXYtPmFjdGNvbmZpZworCQkJLy8gJiYgRklYTUUgKHJlbW90ZSB3YWtldXAgZW5hYmxlZCBvbiB0aGlzIGJ1cykKKwkJCS8vIC4uLiBjdXJyZW50bHkgYXNzdW1pbmcgaXQncyBhbHdheXMgYXBwcm9wcmlhdGUKKwkJCSYmICh1ZGV2LT5hY3Rjb25maWctPmRlc2MuYm1BdHRyaWJ1dGVzCisJCQkJJiBVU0JfQ09ORklHX0FUVF9XQUtFVVApICE9IDApIHsKKwkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgMCwKKwkJCQlOVUxMLCAwLAorCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9kYmcoJnVkZXYtPmRldiwKKwkJCQkid29uJ3QgcmVtb3RlIHdha2V1cCwgc3RhdHVzICVkXG4iLAorCQkJCXN0YXR1cyk7CisJfQorCisJLyogc2VlIDcuMS43LjYgKi8KKwlzdGF0dXMgPSBzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCSJjYW4ndCBzdXNwZW5kIHBvcnQgJWQsIHN0YXR1cyAlZFxuIiwKKwkJCXBvcnQxLCBzdGF0dXMpOworCQkvKiBwYXJhbm9pYTogICJzaG91bGQgbm90IGhhcHBlbiIgKi8KKwkJKHZvaWQpIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgMCwKKwkJCQlOVUxMLCAwLAorCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwl9IGVsc2UgeworCQkvKiBkZXZpY2UgaGFzIHVwIHRvIDEwIG1zZWMgdG8gZnVsbHkgc3VzcGVuZCAqLworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2Igc3VzcGVuZFxuIik7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9TVVNQRU5ERUQpOworCQltc2xlZXAoMTApOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogRGV2aWNlcyBvbiBVU0IgaHViIHBvcnRzIGhhdmUgb25seSBvbmUgInN1c3BlbmQiIHN0YXRlLCBjb3JyZXNwb25kaW5nCisgKiB0byBBQ1BJIEQyIChQTV9TVVNQRU5EX01FTSksICJtYXkgY2F1c2UgdGhlIGRldmljZSB0byBsb3NlIHNvbWUgY29udGV4dCIuCisgKiBTdGF0ZSB0cmFuc2l0aW9ucyBpbmNsdWRlOgorICoKKyAqICAgLSBzdXNwZW5kLCByZXN1bWUgLi4uIHdoZW4gdGhlIFZCVVMgcG93ZXIgbGluayBzdGF5cyBsaXZlCisgKiAgIC0gc3VzcGVuZCwgZGlzY29ubmVjdCAuLi4gVkJVUyBsb3N0CisgKgorICogT25jZSBWQlVTIGRyb3AgYnJlYWtzIHRoZSBjaXJjdWl0LCB0aGUgcG9ydCBpdCdzIHVzaW5nIGhhcyB0byBnbyB0aHJvdWdoCisgKiBub3JtYWwgcmUtZW51bWVyYXRpb24gcHJvY2VkdXJlcywgc3RhcnRpbmcgd2l0aCBlbmFibGluZyBWQlVTIHBvd2VyLgorICogT3RoZXIgdGhhbiByZS1pbml0aWFsaXppbmcgdGhlIGh1YiAocGx1Zy91bnBsdWcsIGV4Y2VwdCBmb3Igcm9vdCBodWJzKSwKKyAqIExpbnV4ICgyLjYpIGN1cnJlbnRseSBoYXMgTk8gbWVjaGFuaXNtcyB0byBpbml0aWF0ZSB0aGF0OiAgbm8ga2h1YmQKKyAqIHRpbWVyLCBubyBTUlAsIG5vIHJlcXVlc3RzIHRocm91Z2ggc3lzZnMuCisgKi8KK3N0YXRpYyBpbnQgX191c2Jfc3VzcGVuZF9kZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEsCisJCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQJc3RhdHVzOworCisJLyogY2FsbGVyIG93bnMgdGhlIHVkZXYgZGV2aWNlIGxvY2sgKi8KKwlpZiAocG9ydDEgPCAwKQorCQlyZXR1cm4gcG9ydDE7CisKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRAorCQkJfHwgdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIHN1c3BlbmQgaW50ZXJmYWNlIGRyaXZlcnM7IGlmIHRoaXMgaXMgYSBodWIsIGl0CisJICogc3VzcGVuZHMgdGhlIGNoaWxkIGRldmljZXMKKwkgKi8KKwlpZiAodWRldi0+YWN0Y29uZmlnKSB7CisJCWludAlpOworCisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJCQlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOworCisJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CisJCQlpZiAoc3RhdGUgPD0gaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpbnRmLT5kZXYuZHJpdmVyKQorCQkJCWNvbnRpbnVlOworCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKworCQkJaWYgKGRyaXZlci0+c3VzcGVuZCkgeworCQkJCXN0YXR1cyA9IGRyaXZlci0+c3VzcGVuZChpbnRmLCBzdGF0ZSk7CisJCQkJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSAhPSBzdGF0ZQorCQkJCQkJfHwgc3RhdHVzKQorCQkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJCQkic3VzcGVuZCAlZCBmYWlsLCBjb2RlICVkXG4iLAorCQkJCQkJc3RhdGUsIHN0YXR1cyk7CisJCQl9CisKKwkJCS8qIG9ubHkgZHJpdmVycyB3aXRoIHN1c3BlbmQoKSBjYW4gZXZlciByZXN1bWUoKTsKKwkJCSAqIGFuZCBhZnRlciBwb3dlciBsb3NzLCBldmVuIHRoZXkgd29uJ3QuCisJCQkgKiBidXNfcmVzY2FuX2RldmljZXMoKSBjYW4gcmViaW5kIGRyaXZlcnMgbGF0ZXIuCisJCQkgKgorCQkJICogRklYTUUgdGhlIFBNIGNvcmUgc2VsZi1kZWFkbG9ja3Mgd2hlbiB1bmJpbmRpbmcKKwkJCSAqIGRyaXZlcnMgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIC4uLiBldmVyeXRoaW5nIGdyYWJzCisJCQkgKiBkcG1fc2VtIChub3QgYSBzcGlubG9jaywgdWdoKS4gIHdlIHdhbnQgdG8gdW5iaW5kLAorCQkJICogc2luY2Ugd2Uga25vdyBldmVyeSBkcml2ZXIncyBwcm9iZS9kaXNjb25uZWN0IHdvcmtzCisJCQkgKiBldmVuIGZvciBkcml2ZXJzIHRoYXQgY2FuJ3Qgc3VzcGVuZC4KKwkJCSAqLworCQkJaWYgKCFkcml2ZXItPnN1c3BlbmQgfHwgc3RhdGUgPiBQTV9TVVNQRU5EX01FTSkgeworI2lmIDEKKwkJCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAicmVzdW1lIGlzIHVuc2FmZSFcbiIpOworI2Vsc2UKKwkJCQlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUucndzZW0pOworCQkJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmaW50Zi0+ZGV2KTsKKwkJCQl1cF93cml0ZSgmdXNiX2J1c190eXBlLnJ3c2VtKTsKKyNlbmRpZgorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBGSVhNRSB0aGlzIG5lZWRzIHBvcnQgcG93ZXIgb2ZmIGNhbGwgcGF0aHMgdG9vLCB0byBoZWxwIGZvcmNlCisJICogVVNCIGludG8gdGhlICJnZW5lcmljIiBQTSBtb2RlbC4gIEF0IGxlYXN0IGZvciBkZXZpY2VzIG9uCisJICogcG9ydHMgdGhhdCBhcmVuJ3QgdXNpbmcgZ2FuZ2VkIHN3aXRjaGluZyAodXN1YWxseSByb290IGh1YnMpLgorCSAqCisJICogTk9URTogU1JQLWNhcGFibGUgbGlua3Mgc2hvdWxkIGFkb3B0IG1vcmUgYWdncmVzc2l2ZSBwb3dlcm9mZgorCSAqIHBvbGljaWVzICh3aGVuIEhOUCBkb2Vzbid0IGFwcGx5KSBvbmNlIHdlIGhhdmUgbWVjaGFuaXNtcyB0bworCSAqIHR1cm4gcG93ZXIgYmFjayBvbiEgIChMaWtlbHkgbm90IGJlZm9yZSAyLjcuLi4pCisJICovCisJaWYgKHN0YXRlID4gUE1fU1VTUEVORF9NRU0pIHsKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIm5vIHBvd2Vyb2ZmIHlldCwgc3VzcGVuZGluZyBpbnN0ZWFkXG4iKTsKKwl9CisKKwkvKiAiZ2xvYmFsIHN1c3BlbmQiIG9mIHRoZSBIQy10by1VU0IgaW50ZXJmYWNlIChyb290IGh1YiksIG9yCisJICogInNlbGVjdGl2ZSBzdXNwZW5kIiBvZiBqdXN0IG9uZSBodWItZGV2aWNlIGxpbmsuCisJICovCisJaWYgKCF1ZGV2LT5wYXJlbnQpIHsKKwkJc3RydWN0IHVzYl9idXMJKmJ1cyA9IHVkZXYtPmJ1czsKKwkJaWYgKGJ1cyAmJiBidXMtPm9wLT5odWJfc3VzcGVuZCkgeworCQkJc3RhdHVzID0gYnVzLT5vcC0+aHViX3N1c3BlbmQgKGJ1cyk7CisJCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2Igc3VzcGVuZFxuIik7CisJCQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwKKwkJCQkJCVVTQl9TVEFURV9TVVNQRU5ERUQpOworCQkJfQorCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCX0gZWxzZQorCQlzdGF0dXMgPSBodWJfcG9ydF9zdXNwZW5kKGhkZXZfdG9faHViKHVkZXYtPnBhcmVudCksIHBvcnQxLAorCQkJCXVkZXYpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9zdXNwZW5kX2RldmljZSAtIHN1c3BlbmQgYSB1c2IgZGV2aWNlCisgKiBAdWRldjogZGV2aWNlIHRoYXQncyBubyBsb25nZXIgaW4gYWN0aXZlIHVzZQorICogQHN0YXRlOiBQTVNHX1NVU1BFTkQgdG8gc3VzcGVuZAorICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwOyBkZXZpY2Ugbm90IGxvY2tlZAorICoKKyAqIFN1c3BlbmRzIGEgVVNCIGRldmljZSB0aGF0IGlzbid0IGluIGFjdGl2ZSB1c2UsIGNvbnNlcnZpbmcgcG93ZXIuCisgKiBEZXZpY2VzIG1heSB3YWtlIG91dCBvZiBhIHN1c3BlbmQsIGlmIGFueXRoaW5nIGltcG9ydGFudCBoYXBwZW5zLAorICogdXNpbmcgdGhlIHJlbW90ZSB3YWtldXAgbWVjaGFuaXNtLiAgVGhleSBtYXkgYWxzbyBiZSB0YWtlbiBvdXQgb2YKKyAqIHN1c3BlbmQgYnkgdGhlIGhvc3QsIHVzaW5nIHVzYl9yZXN1bWVfZGV2aWNlKCkuICBJdCdzIGFsc28gcm91dGluZQorICogdG8gZGlzY29ubmVjdCBkZXZpY2VzIHdoaWxlIHRoZXkgYXJlIHN1c3BlbmRlZC4KKyAqCisgKiBTdXNwZW5kaW5nIE9URyBkZXZpY2VzIG1heSB0cmlnZ2VyIEhOUCwgaWYgdGhhdCdzIGJlZW4gZW5hYmxlZAorICogYmV0d2VlbiBhIHBhaXIgb2YgZHVhbC1yb2xlIGRldmljZXMuICBUaGF0IHdpbGwgY2hhbmdlIHJvbGVzLCBzdWNoCisgKiBhcyBmcm9tIEEtSG9zdCB0byBBLVBlcmlwaGVyYWwgb3IgZnJvbSBCLUhvc3QgYmFjayB0byBCLVBlcmlwaGVyYWwuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQJcG9ydDEsIHN0YXR1czsKKworCXBvcnQxID0gbG9ja3RyZWUodWRldik7CisJaWYgKHBvcnQxIDwgMCkKKwkJcmV0dXJuIHBvcnQxOworCisJc3RhdHVzID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwgcG9ydDEsIHN0YXRlKTsKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogaGFyZHdhcmUgcmVzdW1lIHNpZ25hbGluZyBpcyBmaW5pc2hlZCwgZWl0aGVyIGJlY2F1c2Ugb2Ygc2VsZWN0aXZlCisgKiByZXN1bWUgKGJ5IGhvc3QpIG9yIHJlbW90ZSB3YWtldXAgKGJ5IGRldmljZSkgLi4uIG5vdyBzZWUgd2hhdCBjaGFuZ2VkCisgKiBpbiB0aGUgdHJlZSB0aGF0J3Mgcm9vdGVkIGF0IHRoaXMgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGZpbmlzaF9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJc3RhdHVzOworCXUxNglkZXZzdGF0dXM7CisKKwkvKiBjYWxsZXIgb3ducyB0aGUgdWRldiBkZXZpY2UgbG9jayAqLworCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiByZXN1bWVcbiIpOworCisJLyogdXNiIGNoOSBpZGVudGlmaWVzIGZvdXIgdmFyaWFudHMgb2YgU1VTUEVOREVELCBiYXNlZCBvbiB3aGF0CisJICogc3RhdGUgdGhlIGRldmljZSByZXN1bWVzIHRvLiAgTGludXggY3VycmVudGx5IHdvbid0IHNlZSB0aGUKKwkgKiBmaXJzdCB0d28gb24gdGhlIGhvc3Qgc2lkZTsgdGhleSdkIGJlIGluc2lkZSBodWJfcG9ydF9pbml0KCkKKwkgKiBkdXJpbmcgbWFueSB0aW1lb3V0cywgYnV0IGtodWJkIGNhbid0IHN1c3BlbmQgdW50aWwgbGF0ZXIuCisJICovCisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgdWRldi0+YWN0Y29uZmlnCisJCQk/IFVTQl9TVEFURV9DT05GSUdVUkVECisJCQk6IFVTQl9TVEFURV9BRERSRVNTKTsKKwl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCisgCS8qIDEwLjUuNC41IHNheXMgYmUgc3VyZSBkZXZpY2VzIGluIHRoZSB0cmVlIGFyZSBzdGlsbCB0aGVyZS4KKyAJICogRm9yIG5vdyBsZXQncyBhc3N1bWUgdGhlIGRldmljZSBkaWRuJ3QgZ28gY3Jhenkgb24gcmVzdW1lLAorCSAqIGFuZCBkZXZpY2UgZHJpdmVycyB3aWxsIGtub3cgYWJvdXQgYW55IHJlc3VtZSBxdWlya3MuCisJICovCisJc3RhdHVzID0gdXNiX2dldF9zdGF0dXModWRldiwgVVNCX1JFQ0lQX0RFVklDRSwgMCwgJmRldnN0YXR1cyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWRldl9kYmcoJnVkZXYtPmRldiwKKwkJCSJnb25lIGFmdGVyIHVzYiByZXN1bWU/IHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CisJZWxzZSBpZiAodWRldi0+YWN0Y29uZmlnKSB7CisJCXVuc2lnbmVkCWk7CisKKwkJbGUxNl90b19jcHVzKCZkZXZzdGF0dXMpOworCQlpZiAoZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkgeworCQkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJCQkJVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQLCAwLAorCQkJCQlOVUxMLCAwLAorCQkJCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZGlzYWJsZSByZW1vdGUgIgorCQkJCQkid2FrZXVwLCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCQkJc3RhdHVzID0gMDsKKwkJCX0KKwkJfQorCisJCS8qIHJlc3VtZSBpbnRlcmZhY2UgZHJpdmVyczsgaWYgdGhpcyBpcyBhIGh1YiwgaXQKKwkJICogcmVzdW1lcyB0aGUgY2hpbGQgZGV2aWNlcworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwkJCXN0cnVjdCB1c2JfZHJpdmVyCSpkcml2ZXI7CisKKwkJCWludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKKwkJCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPT0gUE1fU1VTUEVORF9PTikKKwkJCQljb250aW51ZTsKKwkJCWlmICghaW50Zi0+ZGV2LmRyaXZlcikgeworCQkJCS8qIEZJWE1FIG1heWJlIGZvcmNlIHRvIGFsdCAwICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCisJCQkvKiBidXNfcmVzY2FuX2RldmljZXMoKSBtYXkgcmViaW5kIGRyaXZlcnMgKi8KKwkJCWlmICghZHJpdmVyLT5yZXN1bWUpCisJCQkJY29udGludWU7CisKKwkJCS8qIGNhbiB3ZSBkbyBiZXR0ZXIgdGhhbiBqdXN0IGxvZ2dpbmcgZXJyb3JzPyAqLworCQkJc3RhdHVzID0gZHJpdmVyLT5yZXN1bWUoaW50Zik7CisJCQlpZiAoaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlICE9IFBNX1NVU1BFTkRfT04KKwkJCQkJfHwgc3RhdHVzKQorCQkJCWRldl9kYmcoJmludGYtPmRldiwKKwkJCQkJInJlc3VtZSBmYWlsLCBzdGF0ZSAlZCBjb2RlICVkXG4iLAorCQkJCQlpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUsIHN0YXR1cyk7CisJCX0KKwkJc3RhdHVzID0gMDsKKworCX0gZWxzZSBpZiAodWRldi0+ZGV2bnVtIDw9IDApIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiYm9ndXMgcmVzdW1lIVxuIik7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQKK2h1Yl9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAlzdGF0dXM7CisKKwkvLyBkZXZfZGJnKGh1Yi0+aW50ZmRldiwgInJlc3VtZSBwb3J0ICVkXG4iLCBwb3J0MSk7CisKKwkvKiBzZWUgNy4xLjcuNzsgYWZmZWN0cyBwb3dlciB1c2FnZSwgYnV0IG5vdCBidWRnZXRpbmcgKi8KKwlzdGF0dXMgPSBjbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LAorCQkJcG9ydDEsIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCSJjYW4ndCByZXN1bWUgcG9ydCAlZCwgc3RhdHVzICVkXG4iLAorCQkJcG9ydDEsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJdTE2CQlkZXZzdGF0dXM7CisJCXUxNgkJcG9ydGNoYW5nZTsKKworCQkvKiBkcml2ZSByZXN1bWUgZm9yIGF0IGxlYXN0IDIwIG1zZWMgKi8KKwkJaWYgKHVkZXYpCisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUVcbiIpOworCQltc2xlZXAoMjUpOworCisjZGVmaW5lIExJVkVfRkxBR1MJKCBVU0JfUE9SVF9TVEFUX1BPV0VSIFwKKwkJCXwgVVNCX1BPUlRfU1RBVF9FTkFCTEUgXAorCQkJfCBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pCisKKwkJLyogVmlydHVhbCByb290IGh1YnMgY2FuIHRyaWdnZXIgb24gR0VUX1BPUlRfU1RBVFVTIHRvCisJCSAqIHN0b3AgcmVzdW1lIHNpZ25hbGluZy4gIFRoZW4gZmluaXNoIHRoZSByZXN1bWUKKwkJICogc2VxdWVuY2UuCisJCSAqLworCQlkZXZzdGF0dXMgPSBwb3J0Y2hhbmdlID0gMDsKKwkJc3RhdHVzID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsCisJCQkJJmRldnN0YXR1cywgJnBvcnRjaGFuZ2UpOworCQlpZiAoc3RhdHVzIDwgMAorCQkJCXx8IChkZXZzdGF0dXMgJiBMSVZFX0ZMQUdTKSAhPSBMSVZFX0ZMQUdTCisJCQkJfHwgKGRldnN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfU1VTUEVORCkgIT0gMAorCQkJCSkgeworCQkJZGV2X2RiZyhodWItPmludGZkZXYsCisJCQkJInBvcnQgJWQgc3RhdHVzICUwNHguJTA0eCBhZnRlciByZXN1bWUsICVkXG4iLAorCQkJCXBvcnQxLCBwb3J0Y2hhbmdlLCBkZXZzdGF0dXMsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLworCQkJbXNsZWVwKDEwKTsKKwkJCWlmICh1ZGV2KQorCQkJCXN0YXR1cyA9IGZpbmlzaF9wb3J0X3Jlc3VtZSh1ZGV2KTsKKwkJfQorCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KGh1YiwgcG9ydDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBodWJfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKy8qKgorICogdXNiX3Jlc3VtZV9kZXZpY2UgLSByZS1hY3RpdmF0ZSBhIHN1c3BlbmRlZCB1c2IgZGV2aWNlCisgKiBAdWRldjogZGV2aWNlIHRvIHJlLWFjdGl2YXRlCisgKiBDb250ZXh0OiBtdXN0IGJlIGFibGUgdG8gc2xlZXA7IGRldmljZSBub3QgbG9ja2VkCisgKgorICogVGhpcyB3aWxsIHJlLWFjdGl2YXRlIHRoZSBzdXNwZW5kZWQgZGV2aWNlLCBpbmNyZWFzaW5nIHBvd2VyIHVzYWdlCisgKiB3aGlsZSBsZXR0aW5nIGRyaXZlcnMgY29tbXVuaWNhdGUgYWdhaW4gd2l0aCBpdHMgZW5kcG9pbnRzLgorICogVVNCIHJlc3VtZSBleHBsaWNpdGx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgcG93ZXIgc2Vzc2lvbiBiZXR3ZWVuCisgKiB0aGUgaG9zdCBhbmQgdGhlIGRldmljZSBpcyB0aGUgc2FtZSBhcyBpdCB3YXMgd2hlbiB0aGUgZGV2aWNlCisgKiBzdXNwZW5kZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCB1c2JfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJcG9ydDEsIHN0YXR1czsKKworCXBvcnQxID0gbG9ja3RyZWUodWRldik7CisJaWYgKHBvcnQxIDwgMCkKKwkJcmV0dXJuIHBvcnQxOworCisJLyogImdsb2JhbCByZXN1bWUiIG9mIHRoZSBIQy10by1VU0IgaW50ZXJmYWNlIChyb290IGh1YiksIG9yCisJICogc2VsZWN0aXZlIHJlc3VtZSBvZiBvbmUgaHViLXRvLWRldmljZSBwb3J0CisJICovCisJaWYgKCF1ZGV2LT5wYXJlbnQpIHsKKwkJc3RydWN0IHVzYl9idXMJKmJ1cyA9IHVkZXYtPmJ1czsKKwkJaWYgKGJ1cyAmJiBidXMtPm9wLT5odWJfcmVzdW1lKSB7CisJCQlzdGF0dXMgPSBidXMtPm9wLT5odWJfcmVzdW1lIChidXMpOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiByZXN1bWVcbiIpOworCQkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KKwkJCW1zbGVlcCgxMCk7CisJCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAodWRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOworCQkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwkJCXN0YXR1cyA9IGh1Yl9yZXN1bWUgKHVkZXYKKwkJCQkJLT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7CisJCX0KKwl9IGVsc2UgaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKKwkJLy8gTk9URSB0aGlzIGZhaWxzIGlmIHBhcmVudCBpcyBhbHNvIHN1c3BlbmRlZC4uLgorCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaGRldl90b19odWIodWRldi0+cGFyZW50KSwKKwkJCQlwb3J0MSwgdWRldik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gMDsKKwl9CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiY2FuJ3QgcmVzdW1lLCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOworCX0KKworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCisJLyogcmViaW5kIGRyaXZlcnMgdGhhdCBoYWQgbm8gc3VzcGVuZCgpICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXVzYl9sb2NrX2FsbF9kZXZpY2VzKCk7CisJCWJ1c19yZXNjYW5fZGV2aWNlcygmdXNiX2J1c190eXBlKTsKKwkJdXNiX3VubG9ja19hbGxfZGV2aWNlcygpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50CXN0YXR1cyA9IDA7CisKKwkvKiBkb24ndCByZXBlYXQgUkVTVU1FIHNlcXVlbmNlIGlmIHRoaXMgZGV2aWNlCisJICogd2FzIGFscmVhZHkgd29rZW4gdXAgYnkgc29tZSBvdGhlciB0YXNrCisJICovCisJZG93bigmdWRldi0+c2VyaWFsaXplKTsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgeworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUUgKHdha2V1cClcbiIpOworCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLworCQltc2xlZXAoMTApOworCQlzdGF0dXMgPSBmaW5pc2hfcG9ydF9yZXN1bWUodWRldik7CisJfQorCXVwKCZ1ZGV2LT5zZXJpYWxpemUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaHViX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2h1YgkJKmh1YiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaHViLT5oZGV2OworCXVuc2lnbmVkCQlwb3J0MTsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiBzdG9wIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5ICovCisJaHViX3F1aWVzY2UoaHViKTsKKworCS8qIHRoZW4gc3VzcGVuZCBldmVyeSBwb3J0ICovCisJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyBwb3J0MSsrKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCisJCXVkZXYgPSBoZGV2LT5jaGlsZHJlbiBbcG9ydDEtMV07CisJCWlmICghdWRldikKKwkJCWNvbnRpbnVlOworCQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworCQlzdGF0dXMgPSBfX3VzYl9zdXNwZW5kX2RldmljZSh1ZGV2LCBwb3J0MSwgc3RhdGUpOworCQl1cCgmdWRldi0+c2VyaWFsaXplKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJzdXNwZW5kIHBvcnQgJWQgLS0+ICVkXG4iLAorCQkJCXBvcnQxLCBzdGF0dXMpOworCX0KKworCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh1Yl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaHViCQkqaHViID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdW5zaWduZWQJCXBvcnQxOworCWludAkJCXN0YXR1czsKKworCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPT0gUE1fU1VTUEVORF9PTikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gaGRldi0+bWF4Y2hpbGQ7IHBvcnQxKyspIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJCXUxNgkJCXBvcnRzdGF0LCBwb3J0Y2hhbmdlOworCisJCXVkZXYgPSBoZGV2LT5jaGlsZHJlbiBbcG9ydDEtMV07CisJCXN0YXR1cyA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXQsICZwb3J0Y2hhbmdlKTsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EKSB7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJCQkJcG9ydGNoYW5nZSAmPSB+VVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQ7CisJCQl9CisKKwkJCS8qIGxldCBraHViZCBoYW5kbGUgZGlzY29ubmVjdHMgZXRjICovCisJCQlpZiAocG9ydGNoYW5nZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghdWRldiB8fCBzdGF0dXMgPCAwKQorCQkJY29udGludWU7CisJCWRvd24gKCZ1ZGV2LT5zZXJpYWxpemUpOworCQlpZiAocG9ydHN0YXQgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpCisJCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaHViLCBwb3J0MSwgdWRldik7CisJCWVsc2UgeworCQkJc3RhdHVzID0gZmluaXNoX3BvcnRfcmVzdW1lKHVkZXYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJyZXN1bWUgcG9ydCAlZCAtLT4gJWRcbiIsCisJCQkJCXBvcnQxLCBzdGF0dXMpOworCQkJCWh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChodWIsIHBvcnQxKTsKKwkJCX0KKwkJfQorCQl1cCgmdWRldi0+c2VyaWFsaXplKTsKKwl9CisJaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKworCWh1Yi0+cmVzdW1lX3Jvb3RfaHViID0gMDsKKwlodWJfYWN0aXZhdGUoaHViKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2JfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSBoZGV2X3RvX2h1YihoZGV2KTsKKworCWh1Yi0+cmVzdW1lX3Jvb3RfaHViID0gMTsKKwlraWNrX2todWJkKGh1Yik7Cit9CisKKyNlbHNlCS8qICFDT05GSUdfVVNCX1NVU1BFTkQgKi8KKworaW50IHVzYl9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAwOworfQorCitpbnQgdXNiX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUJaHViX3N1c3BlbmQJCU5VTEwKKyNkZWZpbmUJaHViX3Jlc3VtZQkJTlVMTAorI2RlZmluZQlyZW1vdGVfd2FrZXVwKHgpCTAKKworI2VuZGlmCS8qIENPTkZJR19VU0JfU1VTUEVORCAqLworCitFWFBPUlRfU1lNQk9MKHVzYl9zdXNwZW5kX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9yZXN1bWVfZGV2aWNlKTsKKworCisKKy8qIFVTQiAyLjAgc3BlYywgNy4xLjcuMyAvIGZpZyA3LTI5OgorICoKKyAqIEJldHdlZW4gY29ubmVjdCBkZXRlY3Rpb24gYW5kIHJlc2V0IHNpZ25hbGluZyB0aGVyZSBtdXN0IGJlIGEgZGVsYXkKKyAqIG9mIDEwMG1zIGF0IGxlYXN0IGZvciBkZWJvdW5jZSBhbmQgcG93ZXItc2V0dGxpbmcuICBUaGUgY29ycmVzcG9uZGluZworICogdGltZXIgc2hhbGwgcmVzdGFydCB3aGVuZXZlciB0aGUgZG93bnN0cmVhbSBwb3J0IGRldGVjdHMgYSBkaXNjb25uZWN0LgorICogCisgKiBBcHBhcmVudGx5IHRoZXJlIGFyZSBzb21lIGJsdWV0b290aCBhbmQgaXJkYS1kb25nbGVzIGFuZCBhIG51bWJlciBvZgorICogbG93LXNwZWVkIGRldmljZXMgZm9yIHdoaWNoIHRoaXMgZGVib3VuY2UgcGVyaW9kIG1heSBsYXN0IG92ZXIgYSBzZWNvbmQuCisgKiBOb3QgY292ZXJlZCBieSB0aGUgc3BlYyAtIGJ1dCBlYXN5IHRvIGRlYWwgd2l0aC4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYSAxNTAwbXMgdG90YWwgZGVib3VuY2UgdGltZW91dDsgaWYgdGhlCisgKiBjb25uZWN0aW9uIGlzbid0IHN0YWJsZSBieSB0aGVuIGl0IHJldHVybnMgLUVUSU1FRE9VVC4gIEl0IGNoZWNrcworICogZXZlcnkgMjVtcyBmb3IgdHJhbnNpZW50IGRpc2Nvbm5lY3RzLiAgV2hlbiB0aGUgcG9ydCBzdGF0dXMgaGFzIGJlZW4KKyAqIHVuY2hhbmdlZCBmb3IgMTAwbXMgaXQgcmV0dXJucyB0aGUgcG9ydCBzdGF0dXMuCisgKi8KKworI2RlZmluZSBIVUJfREVCT1VOQ0VfVElNRU9VVAkxNTAwCisjZGVmaW5lIEhVQl9ERUJPVU5DRV9TVEVQCSAgMjUKKyNkZWZpbmUgSFVCX0RFQk9VTkNFX1NUQUJMRQkgMTAwCisKK3N0YXRpYyBpbnQgaHViX3BvcnRfZGVib3VuY2Uoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxKQoreworCWludCByZXQ7CisJaW50IHRvdGFsX3RpbWUsIHN0YWJsZV90aW1lID0gMDsKKwl1MTYgcG9ydGNoYW5nZSwgcG9ydHN0YXR1czsKKwl1bnNpZ25lZCBjb25uZWN0aW9uID0gMHhmZmZmOworCisJZm9yICh0b3RhbF90aW1lID0gMDsgOyB0b3RhbF90aW1lICs9IEhVQl9ERUJPVU5DRV9TVEVQKSB7CisJCXJldCA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXR1cywgJnBvcnRjaGFuZ2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKCEocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSAmJgorCQkgICAgIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSA9PSBjb25uZWN0aW9uKSB7CisJCQlzdGFibGVfdGltZSArPSBIVUJfREVCT1VOQ0VfU1RFUDsKKwkJCWlmIChzdGFibGVfdGltZSA+PSBIVUJfREVCT1VOQ0VfU1RBQkxFKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc3RhYmxlX3RpbWUgPSAwOworCQkJY29ubmVjdGlvbiA9IHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT047CisJCX0KKworCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSB7CisJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCQl9CisKKwkJaWYgKHRvdGFsX3RpbWUgPj0gSFVCX0RFQk9VTkNFX1RJTUVPVVQpCisJCQlicmVhazsKKwkJbXNsZWVwKEhVQl9ERUJPVU5DRV9TVEVQKTsKKwl9CisKKwlkZXZfZGJnIChodWItPmludGZkZXYsCisJCSJkZWJvdW5jZTogcG9ydCAlZDogdG90YWwgJWRtcyBzdGFibGUgJWRtcyBzdGF0dXMgMHgleFxuIiwKKwkJcG9ydDEsIHRvdGFsX3RpbWUsIHN0YWJsZV90aW1lLCBwb3J0c3RhdHVzKTsKKworCWlmIChzdGFibGVfdGltZSA8IEhVQl9ERUJPVU5DRV9TVEFCTEUpCisJCXJldHVybiAtRVRJTUVET1VUOworCXJldHVybiBwb3J0c3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlcDBfcmVpbml0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVzYl9kaXNhYmxlX2VuZHBvaW50KHVkZXYsIDAgKyBVU0JfRElSX0lOKTsKKwl1c2JfZGlzYWJsZV9lbmRwb2ludCh1ZGV2LCAwICsgVVNCX0RJUl9PVVQpOworCXVkZXYtPmVwX2luWzBdID0gdWRldi0+ZXBfb3V0WzBdID0gJnVkZXYtPmVwMDsKK30KKworI2RlZmluZSB1c2Jfc25kYWRkcjBwaXBlKCkJKFBJUEVfQ09OVFJPTCA8PCAzMCkKKyNkZWZpbmUgdXNiX3JjdmFkZHIwcGlwZSgpCSgoUElQRV9DT05UUk9MIDw8IDMwKSB8IFVTQl9ESVJfSU4pCisKK3N0YXRpYyBpbnQgaHViX3NldF9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXR2YWw7CisKKwlpZiAodWRldi0+ZGV2bnVtID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQUREUkVTUykKKwkJcmV0dXJuIDA7CisJaWYgKHVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9ERUZBVUxUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGFkZHIwcGlwZSgpLAorCQlVU0JfUkVRX1NFVF9BRERSRVNTLCAwLCB1ZGV2LT5kZXZudW0sIDAsCisJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCQllcDBfcmVpbml0KHVkZXYpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBSZXNldCBkZXZpY2UsIChyZSlhc3NpZ24gYWRkcmVzcywgZ2V0IGRldmljZSBkZXNjcmlwdG9yLgorICogRGV2aWNlIGNvbm5lY3Rpb24gbXVzdCBiZSBzdGFibGUsIG5vIG1vcmUgZGVib3VuY2luZyBuZWVkZWQuCisgKiBSZXR1cm5zIGRldmljZSBpbiBVU0JfU1RBVEVfQUREUkVTUywgZXhjZXB0IG9uIGVycm9yLgorICoKKyAqIElmIHRoaXMgaXMgY2FsbGVkIGZvciBhbiBhbHJlYWR5LWV4aXN0aW5nIGRldmljZSAoYXMgcGFydCBvZgorICogdXNiX3Jlc2V0X2RldmljZSksIHRoZSBjYWxsZXIgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrLiAgRm9yIGEKKyAqIG5ld2x5IGRldGVjdGVkIGRldmljZSB0aGF0IGlzIG5vdCBhY2Nlc3NpYmxlIHRocm91Z2ggYW55IGdsb2JhbAorICogcG9pbnRlcnMsIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBsb2NrIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2h1Yl9wb3J0X2luaXQgKHN0cnVjdCB1c2JfaHViICpodWIsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEsCisJCWludCByZXRyeV9jb3VudGVyKQoreworCXN0YXRpYyBERUNMQVJFX01VVEVYKHVzYl9hZGRyZXNzMF9zZW0pOworCisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CisJaW50CQkJaSwgaiwgcmV0dmFsOworCXVuc2lnbmVkCQlkZWxheSA9IEhVQl9TSE9SVF9SRVNFVF9USU1FOworCWVudW0gdXNiX2RldmljZV9zcGVlZAlvbGRzcGVlZCA9IHVkZXYtPnNwZWVkOworCisJLyogcm9vdCBodWIgcG9ydHMgaGF2ZSBhIHNsaWdodGx5IGxvbmdlciByZXNldCBwZXJpb2QKKwkgKiAoZnJvbSBVU0IgMi4wIHNwZWMsIHNlY3Rpb24gNy4xLjcuNSkKKwkgKi8KKwlpZiAoIWhkZXYtPnBhcmVudCkgeworCQlkZWxheSA9IEhVQl9ST09UX1JFU0VUX1RJTUU7CisJCWlmIChwb3J0MSA9PSBoZGV2LT5idXMtPm90Z19wb3J0KQorCQkJaGRldi0+YnVzLT5iX2hucF9lbmFibGUgPSAwOworCX0KKworCS8qIFNvbWUgbG93IHNwZWVkIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSBxdWljayBkZWxheSwgc28gKi8KKwkvKiAgYmUgYSBiaXQgcGVzc2ltaXN0aWMgd2l0aCB0aG9zZSBkZXZpY2VzLiBSSGJ1ZyAjMjM2NzAgKi8KKwlpZiAob2xkc3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKKwkJZGVsYXkgPSBIVUJfTE9OR19SRVNFVF9USU1FOworCisJZG93bigmdXNiX2FkZHJlc3MwX3NlbSk7CisKKwkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCisJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOworCWlmIChyZXR2YWwgPCAwKQkJLyogZXJyb3Igb3IgZGlzY29ubmVjdCAqLworCQlnb3RvIGZhaWw7CisJCQkJLyogc3VjY2Vzcywgc3BlZWQgaXMga25vd24gKi8KKwlyZXR2YWwgPSAtRU5PREVWOworCisJaWYgKG9sZHNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOICYmIG9sZHNwZWVkICE9IHVkZXYtPnNwZWVkKSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgImRldmljZSByZXNldCBjaGFuZ2VkIHNwZWVkIVxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisJb2xkc3BlZWQgPSB1ZGV2LT5zcGVlZDsKKyAgCisJLyogVVNCIDIuMCBzZWN0aW9uIDUuNS4zIHRhbGtzIGFib3V0IGVwMCBtYXhwYWNrZXQgLi4uCisJICogaXQncyBmaXhlZCBzaXplIGV4Y2VwdCBmb3IgZnVsbCBzcGVlZCBkZXZpY2VzLgorCSAqLworCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgkJLyogZml4ZWQgYXQgNjQgKi8KKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoJCS8qIDgsIDE2LCAzMiwgb3IgNjQgKi8KKwkJLyogdG8gZGV0ZXJtaW5lIHRoZSBlcDAgbWF4cGFja2V0IHNpemUsIHRyeSB0byByZWFkCisJCSAqIHRoZSBkZXZpY2UgZGVzY3JpcHRvciB0byBnZXQgYk1heFBhY2tldFNpemUwIGFuZAorCQkgKiB0aGVuIGNvcnJlY3Qgb3VyIGluaXRpYWwgZ3Vlc3MuCisJCSAqLworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CQkvKiBmaXhlZCBhdCA4ICovCisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBmYWlsOworCX0KKyAKKwlkZXZfaW5mbyAoJnVkZXYtPmRldiwKKwkJCSIlcyAlcyBzcGVlZCBVU0IgZGV2aWNlIHVzaW5nICVzIGFuZCBhZGRyZXNzICVkXG4iLAorCQkJKHVkZXYtPmNvbmZpZykgPyAicmVzZXQiIDogIm5ldyIsCisJCQkoeyBjaGFyICpzcGVlZDsgc3dpdGNoICh1ZGV2LT5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfTE9XOglzcGVlZCA9ICJsb3ciOwlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CXNwZWVkID0gImZ1bGwiOwlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CXNwZWVkID0gImhpZ2giOwlicmVhazsKKwkJCWRlZmF1bHQ6IAkJc3BlZWQgPSAiPyI7CWJyZWFrOworCQkJfTsgc3BlZWQ7fSksCisJCQl1ZGV2LT5idXMtPmNvbnRyb2xsZXItPmRyaXZlci0+bmFtZSwKKwkJCXVkZXYtPmRldm51bSk7CisKKwkvKiBTZXQgdXAgVFQgcmVjb3JkcywgaWYgbmVlZGVkICAqLworCWlmIChoZGV2LT50dCkgeworCQl1ZGV2LT50dCA9IGhkZXYtPnR0OworCQl1ZGV2LT50dHBvcnQgPSBoZGV2LT50dHBvcnQ7CisJfSBlbHNlIGlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSAorCQkJJiYgaGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJdWRldi0+dHQgPSAmaHViLT50dDsKKwkJdWRldi0+dHRwb3J0ID0gcG9ydDE7CisJfQorIAorCS8qIFdoeSBpbnRlcmxlYXZlIEdFVF9ERVNDUklQVE9SIGFuZCBTRVRfQUREUkVTUyB0aGlzIHdheT8KKwkgKiBCZWNhdXNlIGRldmljZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaXMgc29tZXRpbWVzIGJ1Z2d5IGluCisJICogdGhpcyBhcmVhLCBhbmQgdGhpcyBpcyBob3cgTGludXggaGFzIGRvbmUgaXQgZm9yIGFnZXMuCisJICogQ2hhbmdlIGl0IGNhdXRpb3VzbHkuCisJICoKKwkgKiBOT1RFOiAgSWYgVVNFX05FV19TQ0hFTUUoKSBpcyB0cnVlIHdlIHdpbGwgc3RhcnQgYnkgaXNzdWluZworCSAqIGEgNjQtYnl0ZSBHRVRfREVTQ1JJUFRPUiByZXF1ZXN0LiAgVGhpcyBpcyB3aGF0IFdpbmRvd3MgZG9lcywKKwkgKiBzbyBpdCBtYXkgaGVscCB3aXRoIHNvbWUgbm9uLXN0YW5kYXJkcy1jb21wbGlhbnQgZGV2aWNlcy4KKwkgKiBPdGhlcndpc2Ugd2Ugc3RhcnQgd2l0aCBTRVRfQUREUkVTUyBhbmQgdGhlbiB0cnkgdG8gcmVhZCB0aGUKKwkgKiBmaXJzdCA4IGJ5dGVzIG9mIHRoZSBkZXZpY2UgZGVzY3JpcHRvciB0byBnZXQgdGhlIGVwMCBtYXhwYWNrZXQKKwkgKiB2YWx1ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgR0VUX0RFU0NSSVBUT1JfVFJJRVM7ICgrK2ksIG1zbGVlcCgxMDApKSkgeworCQlpZiAoVVNFX05FV19TQ0hFTUUocmV0cnlfY291bnRlcikpIHsKKwkJCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgKmJ1ZjsKKwkJCWludCByID0gMDsKKworI2RlZmluZSBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFCTY0CisJCQlidWYgPSBrbWFsbG9jKEdFVF9ERVNDUklQVE9SX0JVRlNJWkUsIEdGUF9OT0lPKTsKKwkJCWlmICghYnVmKSB7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogVXNlIGEgc2hvcnQgdGltZW91dCB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAorCQkJICogc28gdGhhdCByZWNhbGNpdHJhbnQgZnVsbC1zcGVlZCBkZXZpY2VzIHdpdGgKKwkJCSAqIDgtIG9yIDE2LWJ5dGUgZXAwLW1heHBhY2tldHMgd29uJ3Qgc2xvdyB0aGluZ3MKKwkJCSAqIGRvd24gdHJlbWVuZG91c2x5IGJ5IE5BS2luZyB0aGUgdW5leHBlY3RlZGx5CisJCQkgKiBlYXJseSBzdGF0dXMgc3RhZ2UuICBBbHNvLCByZXRyeSBvbiBhbGwgZXJyb3JzOworCQkJICogc29tZSBkZXZpY2VzIGFyZSBmbGFrZXkuCisJCQkgKi8KKwkJCWZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKwkJCQlidWYtPmJNYXhQYWNrZXRTaXplMCA9IDA7CisJCQkJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2YWRkcjBwaXBlKCksCisJCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCisJCQkJCVVTQl9EVF9ERVZJQ0UgPDwgOCwgMCwKKwkJCQkJYnVmLCBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLAorCQkJCQkoaSA/IFVTQl9DVFJMX0dFVF9USU1FT1VUIDogMTAwMCkpOworCQkJCXN3aXRjaCAoYnVmLT5iTWF4UGFja2V0U2l6ZTApIHsKKwkJCQljYXNlIDg6IGNhc2UgMTY6IGNhc2UgMzI6IGNhc2UgNjQ6CisJCQkJCWlmIChidWYtPmJEZXNjcmlwdG9yVHlwZSA9PQorCQkJCQkJCVVTQl9EVF9ERVZJQ0UpIHsKKwkJCQkJCXIgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJLyogRkFMTCBUSFJPVUdIICovCisJCQkJZGVmYXVsdDoKKwkJCQkJaWYgKHIgPT0gMCkKKwkJCQkJCXIgPSAtRVBST1RPOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHIgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQl1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMCA9CisJCQkJCWJ1Zi0+Yk1heFBhY2tldFNpemUwOworCQkJa2ZyZWUoYnVmKTsKKworCQkJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOworCQkJaWYgKHJldHZhbCA8IDApCQkvKiBlcnJvciBvciBkaXNjb25uZWN0ICovCisJCQkJZ290byBmYWlsOworCQkJaWYgKG9sZHNwZWVkICE9IHVkZXYtPnNwZWVkKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LAorCQkJCQkiZGV2aWNlIHJlc2V0IGNoYW5nZWQgc3BlZWQhXG4iKTsKKwkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZGV2aWNlIGRlc2NyaXB0b3IgIgorCQkJCQkJInJlYWQvJXMsIGVycm9yICVkXG4iLAorCQkJCQkJIjY0Iiwgcik7CisJCQkJcmV0dmFsID0gLUVNU0dTSVpFOworCQkJCWNvbnRpbnVlOworCQkJfQorI3VuZGVmIEdFVF9ERVNDUklQVE9SX0JVRlNJWkUKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBTRVRfQUREUkVTU19UUklFUzsgKytqKSB7CisJCQlyZXR2YWwgPSBodWJfc2V0X2FkZHJlc3ModWRldik7CisJCQlpZiAocmV0dmFsID49IDApCisJCQkJYnJlYWs7CisJCQltc2xlZXAoMjAwKTsKKwkJfQorCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LAorCQkJCSJkZXZpY2Ugbm90IGFjY2VwdGluZyBhZGRyZXNzICVkLCBlcnJvciAlZFxuIiwKKwkJCQl1ZGV2LT5kZXZudW0sIHJldHZhbCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKyAKKwkJLyogY29wZSB3aXRoIGhhcmR3YXJlIHF1aXJraW5lc3M6CisJCSAqICAtIGxldCBTRVRfQUREUkVTUyBzZXR0bGUsIHNvbWUgZGV2aWNlIGhhcmR3YXJlIHdhbnRzIGl0CisJCSAqICAtIHJlYWQgZXAwIG1heHBhY2tldCBldmVuIGZvciBoaWdoIGFuZCBsb3cgc3BlZWQsCisgIAkJICovCisJCW1zbGVlcCgxMCk7CisJCWlmIChVU0VfTkVXX1NDSEVNRShyZXRyeV9jb3VudGVyKSkKKwkJCWJyZWFrOworCisJCXJldHZhbCA9IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodWRldiwgOCk7CisJCWlmIChyZXR2YWwgPCA4KSB7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZGVzY3JpcHRvciAiCisJCQkJCSJyZWFkLyVzLCBlcnJvciAlZFxuIiwKKwkJCQkJIjgiLCByZXR2YWwpOworCQkJaWYgKHJldHZhbCA+PSAwKQorCQkJCXJldHZhbCA9IC1FTVNHU0laRTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWw7CisKKwlpID0gdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplKSAhPSBpKSB7CisJCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTCB8fAorCQkJCSEoaSA9PSA4IHx8IGkgPT0gMTYgfHwgaSA9PSAzMiB8fCBpID09IDY0KSkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXAwIG1heHBhY2tldCA9ICVkXG4iLCBpKTsKKwkJCXJldHZhbCA9IC1FTVNHU0laRTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJlcDAgbWF4cGFja2V0ID0gJWRcbiIsIGkpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KGkpOworCQllcDBfcmVpbml0KHVkZXYpOworCX0KKyAgCisJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1ZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOworCWlmIChyZXR2YWwgPCAoc2lnbmVkKXNpemVvZih1ZGV2LT5kZXNjcmlwdG9yKSkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZGVzY3JpcHRvciByZWFkLyVzLCBlcnJvciAlZFxuIiwKKwkJCSJhbGwiLCByZXR2YWwpOworCQlpZiAocmV0dmFsID49IDApCisJCQlyZXR2YWwgPSAtRU5PTVNHOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dmFsID0gMDsKKworZmFpbDoKKwlpZiAocmV0dmFsKQorCQlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDApOworCXVwKCZ1c2JfYWRkcmVzczBfc2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfaGlnaHNwZWVkIChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHBvcnQxKQoreworCXN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IJKnF1YWw7CisJaW50CQkJCXN0YXR1czsKKworCXF1YWwgPSBrbWFsbG9jIChzaXplb2YgKnF1YWwsIFNMQUJfS0VSTkVMKTsKKwlpZiAocXVhbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IgKHVkZXYsIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLCAwLAorCQkJcXVhbCwgc2l6ZW9mICpxdWFsKTsKKwlpZiAoc3RhdHVzID09IHNpemVvZiAqcXVhbCkgeworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAibm90IHJ1bm5pbmcgYXQgdG9wIHNwZWVkOyAiCisJCQkiY29ubmVjdCB0byBhIGhpZ2ggc3BlZWQgaHViXG4iKTsKKwkJLyogaHViIExFRHMgYXJlIHByb2JhYmx5IGhhcmRlciB0byBtaXNzIHRoYW4gc3lzbG9nICovCisJCWlmIChodWItPmhhc19pbmRpY2F0b3JzKSB7CisJCQlodWItPmluZGljYXRvcltwb3J0MS0xXSA9IElORElDQVRPUl9HUkVFTl9CTElOSzsKKwkJCXNjaGVkdWxlX3dvcmsgKCZodWItPmxlZHMpOworCQl9CisJfQorCWtmcmVlIChxdWFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkCitodWJfcG93ZXJfcmVtYWluaW5nIChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCWludCByZW1haW5pbmc7CisJdW5zaWduZWQgaTsKKworCXJlbWFpbmluZyA9IGh1Yi0+cG93ZXJfYnVkZ2V0OworCWlmICghcmVtYWluaW5nKQkJLyogc2VsZi1wb3dlcmVkICovCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyBpKyspIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBoZGV2LT5jaGlsZHJlbltpXTsKKwkJaW50CQkJZGVsdGEsIGNlaWxpbmc7CisKKwkJaWYgKCF1ZGV2KQorCQkJY29udGludWU7CisKKwkJLyogMTAwbUEgcGVyLXBvcnQgY2VpbGluZywgb3IgOG1BIGZvciBPVEcgcG9ydHMgKi8KKwkJaWYgKGkgIT0gKHVkZXYtPmJ1cy0+b3RnX3BvcnQgLSAxKSB8fCBoZGV2LT5wYXJlbnQpCisJCQljZWlsaW5nID0gNTA7CisJCWVsc2UKKwkJCWNlaWxpbmcgPSA0OworCisJCWlmICh1ZGV2LT5hY3Rjb25maWcpCisJCQlkZWx0YSA9IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTWF4UG93ZXI7CisJCWVsc2UKKwkJCWRlbHRhID0gY2VpbGluZzsKKwkJLy8gZGV2X2RiZygmdWRldi0+ZGV2LCAiYnVkZ2V0ZWQgJWRtQVxuIiwgMiAqIGRlbHRhKTsKKwkJaWYgKGRlbHRhID4gY2VpbGluZykKKwkJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICIlZG1BIG92ZXIgJWRtQSBidWRnZXQhXG4iLAorCQkJCTIgKiAoZGVsdGEgLSBjZWlsaW5nKSwgMiAqIGNlaWxpbmcpOworCQlyZW1haW5pbmcgLT0gZGVsdGE7CisJfQorCWlmIChyZW1haW5pbmcgPCAwKSB7CisJCWRldl93YXJuKGh1Yi0+aW50ZmRldiwKKwkJCSIlZG1BIG92ZXIgcG93ZXIgYnVkZ2V0IVxuIiwKKwkJCS0yICogcmVtYWluaW5nKTsKKwkJcmVtYWluaW5nID0gMDsKKwl9CisJcmV0dXJuIHJlbWFpbmluZzsKK30KKworLyogSGFuZGxlIHBoeXNpY2FsIG9yIGxvZ2ljYWwgY29ubmVjdGlvbiBjaGFuZ2UgZXZlbnRzLgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuOgorICogCWEgcG9ydCBjb25uZWN0aW9uLWNoYW5nZSBvY2N1cnM7CisgKglhIHBvcnQgZW5hYmxlLWNoYW5nZSBvY2N1cnMgKG9mdGVuIGNhdXNlZCBieSBFTUkpOworICoJdXNiX3Jlc2V0X2RldmljZSgpIGVuY291bnRlcnMgY2hhbmdlZCBkZXNjcmlwdG9ycyAoYXMgZnJvbQorICoJCWEgZmlybXdhcmUgZG93bmxvYWQpCisgKiBjYWxsZXIgYWxyZWFkeSBsb2NrZWQgdGhlIGh1YgorICovCitzdGF0aWMgdm9pZCBodWJfcG9ydF9jb25uZWN0X2NoYW5nZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCisJCQkJCXUxNiBwb3J0c3RhdHVzLCB1MTYgcG9ydGNoYW5nZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2ID0gaHViLT5pbnRmZGV2OworCWludCBzdGF0dXMsIGk7CisgCisJZGV2X2RiZyAoaHViX2RldiwKKwkJInBvcnQgJWQsIHN0YXR1cyAlMDR4LCBjaGFuZ2UgJTA0eCwgJXNcbiIsCisJCXBvcnQxLCBwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlLCBwb3J0c3BlZWQgKHBvcnRzdGF0dXMpKTsKKworCWlmIChodWItPmhhc19pbmRpY2F0b3JzKSB7CisJCXNldF9wb3J0X2xlZChodWIsIHBvcnQxLCBIVUJfTEVEX0FVVE8pOworCQlodWItPmluZGljYXRvcltwb3J0MS0xXSA9IElORElDQVRPUl9BVVRPOworCX0KKyAKKwkvKiBEaXNjb25uZWN0IGFueSBleGlzdGluZyBkZXZpY2VzIHVuZGVyIHRoaXMgcG9ydCAqLworCWlmIChoZGV2LT5jaGlsZHJlbltwb3J0MS0xXSkKKwkJdXNiX2Rpc2Nvbm5lY3QoJmhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdKTsKKwljbGVhcl9iaXQocG9ydDEsIGh1Yi0+Y2hhbmdlX2JpdHMpOworCisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwkvKiBkdXJpbmcgSE5QLCBkb24ndCByZXBlYXQgdGhlIGRlYm91bmNlICovCisJaWYgKGhkZXYtPmJ1cy0+aXNfYl9ob3N0KQorCQlwb3J0Y2hhbmdlICY9IH5VU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTjsKKyNlbmRpZgorCisJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgeworCQlzdGF0dXMgPSBodWJfcG9ydF9kZWJvdW5jZShodWIsIHBvcnQxKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRldl9lcnIgKGh1Yl9kZXYsCisJCQkJImNvbm5lY3QtZGVib3VuY2UgZmFpbGVkLCBwb3J0ICVkIGRpc2FibGVkXG4iLAorCQkJCXBvcnQxKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlwb3J0c3RhdHVzID0gc3RhdHVzOworCX0KKworCS8qIFJldHVybiBub3cgaWYgbm90aGluZyBpcyBjb25uZWN0ZWQgKi8KKwlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkgeworCisJCS8qIG1heWJlIHN3aXRjaCBwb3dlciBiYWNrIG9uIChlLmcuIHJvb3QgaHViIHdhcyByZXNldCkgKi8KKwkJaWYgKChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MKKwkJCQkJJiBIVUJfQ0hBUl9MUFNNKSA8IDIKKwkJCQkmJiAhKHBvcnRzdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKSkpCisJCQlzZXRfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKyAKKwkJaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0VOQUJMRSkKKyAgCQkJZ290byBkb25lOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgIENPTkZJR19VU0JfU1VTUEVORAorCS8qIElmIHNvbWV0aGluZyBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcG9ydCBpcyBzdXNwZW5kZWQsIHdha2UgaXQgdXAuICovCisJaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpIHsKKwkJc3RhdHVzID0gaHViX3BvcnRfcmVzdW1lKGh1YiwgcG9ydDEsIE5VTEwpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2RiZyhodWJfZGV2LAorCQkJCSJjYW4ndCBjbGVhciBzdXNwZW5kIG9uIHBvcnQgJWQ7ICVkXG4iLAorCQkJCXBvcnQxLCBzdGF0dXMpOworCQkJZ290byBkb25lOworCQl9CisJfQorI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgU0VUX0NPTkZJR19UUklFUzsgaSsrKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJCS8qIHJlYWxsb2NhdGUgZm9yIGVhY2ggYXR0ZW1wdCwgc2luY2UgcmVmZXJlbmNlcworCQkgKiB0byB0aGUgcHJldmlvdXMgb25lIGNhbiBlc2NhcGUgaW4gdmFyaW91cyB3YXlzCisJCSAqLworCQl1ZGV2ID0gdXNiX2FsbG9jX2RldihoZGV2LCBoZGV2LT5idXMsIHBvcnQxKTsKKwkJaWYgKCF1ZGV2KSB7CisJCQlkZXZfZXJyIChodWJfZGV2LAorCQkJCSJjb3VsZG4ndCBhbGxvY2F0ZSBwb3J0ICVkIHVzYl9kZXZpY2VcbiIsCisJCQkJcG9ydDEpOworCQkJZ290byBkb25lOworCQl9CisKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX1BPV0VSRUQpOworCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworIAorCQkvKiBzZXQgdGhlIGFkZHJlc3MgKi8KKwkJY2hvb3NlX2FkZHJlc3ModWRldik7CisJCWlmICh1ZGV2LT5kZXZudW0gPD0gMCkgeworCQkJc3RhdHVzID0gLUVOT1RDT05OOwkvKiBEb24ndCByZXRyeSAqLworCQkJZ290byBsb29wOworCQl9CisKKwkJLyogcmVzZXQgYW5kIGdldCBkZXNjcmlwdG9yICovCisJCXN0YXR1cyA9IGh1Yl9wb3J0X2luaXQoaHViLCB1ZGV2LCBwb3J0MSwgaSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBsb29wOworCisJCS8qIGNvbnNlY3V0aXZlIGJ1cy1wb3dlcmVkIGh1YnMgYXJlbid0IHJlbGlhYmxlOyB0aGV5IGNhbgorCQkgKiB2aW9sYXRlIHRoZSB2b2x0YWdlIGRyb3AgYnVkZ2V0LiAgaWYgdGhlIG5ldyBjaGlsZCBoYXMKKwkJICogYSAicG93ZXJlZCIgTEVELCB1c2VycyBzaG91bGQgbm90aWNlIHdlIGRpZG4ndCBlbmFibGUgaXQKKwkJICogKHdpdGhvdXQgcmVhZGluZyBzeXNsb2cpLCBldmVuIHdpdGhvdXQgcGVyLXBvcnQgTEVEcworCQkgKiBvbiB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IFVTQl9DTEFTU19IVUIKKwkJCQkmJiBodWItPnBvd2VyX2J1ZGdldCkgeworCQkJdTE2CWRldnN0YXQ7CisKKwkJCXN0YXR1cyA9IHVzYl9nZXRfc3RhdHVzKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsCisJCQkJCSZkZXZzdGF0KTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZ2V0IHN0YXR1cyAlZCA/XG4iLCBzdGF0dXMpOworCQkJCWdvdG8gbG9vcF9kaXNhYmxlOworCQkJfQorCQkJY3B1X3RvX2xlMTZzKCZkZXZzdGF0KTsKKwkJCWlmICgoZGV2c3RhdCAmICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKSkgPT0gMCkgeworCQkJCWRldl9lcnIoJnVkZXYtPmRldiwKKwkJCQkJImNhbid0IGNvbm5lY3QgYnVzLXBvd2VyZWQgaHViICIKKwkJCQkJInRvIHRoaXMgcG9ydFxuIik7CisJCQkJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMpIHsKKwkJCQkJaHViLT5pbmRpY2F0b3JbcG9ydDEtMV0gPQorCQkJCQkJSU5ESUNBVE9SX0FNQkVSX0JMSU5LOworCQkJCQlzY2hlZHVsZV93b3JrICgmaHViLT5sZWRzKTsKKwkJCQl9CisJCQkJc3RhdHVzID0gLUVOT1RDT05OOwkvKiBEb24ndCByZXRyeSAqLworCQkJCWdvdG8gbG9vcF9kaXNhYmxlOworCQkJfQorCQl9CisgCisJCS8qIGNoZWNrIGZvciBkZXZpY2VzIHJ1bm5pbmcgc2xvd2VyIHRoYW4gdGhleSBjb3VsZCAqLworCQlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2RVU0IpID49IDB4MDIwMAorCQkJCSYmIHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMCisJCQkJJiYgaGlnaHNwZWVkX2h1YnMgIT0gMCkKKwkJCWNoZWNrX2hpZ2hzcGVlZCAoaHViLCB1ZGV2LCBwb3J0MSk7CisKKwkJLyogU3RvcmUgdGhlIHBhcmVudCdzIGNoaWxkcmVuW10gcG9pbnRlci4gIEF0IHRoaXMgcG9pbnQKKwkJICogdWRldiBiZWNvbWVzIGdsb2JhbGx5IGFjY2Vzc2libGUsIGFsdGhvdWdoIHByZXN1bWFibHkKKwkJICogbm8gb25lIHdpbGwgbG9vayBhdCBpdCB1bnRpbCBoZGV2IGlzIHVubG9ja2VkLgorCQkgKi8KKwkJZG93biAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJCXN0YXR1cyA9IDA7CisKKwkJLyogV2UgbXVzdG4ndCBhZGQgbmV3IGRldmljZXMgaWYgdGhlIHBhcmVudCBodWIgaGFzCisJCSAqIGJlZW4gZGlzY29ubmVjdGVkOyB3ZSB3b3VsZCByYWNlIHdpdGggdGhlCisJCSAqIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoKSByb3V0aW5lLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQkJc3RhdHVzID0gLUVOT1RDT05OOworCQllbHNlCisJCQloZGV2LT5jaGlsZHJlbltwb3J0MS0xXSA9IHVkZXY7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCisJCS8qIFJ1biBpdCB0aHJvdWdoIHRoZSBob29wcyAoZmluZCBhIGRyaXZlciwgZXRjKSAqLworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gdXNiX25ld19kZXZpY2UodWRldik7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCQkJCWhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdID0gTlVMTDsKKwkJCQlzcGluX3VubG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKwkJCX0KKwkJfQorCisJCXVwICgmdWRldi0+c2VyaWFsaXplKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gbG9vcF9kaXNhYmxlOworCisJCXN0YXR1cyA9IGh1Yl9wb3dlcl9yZW1haW5pbmcoaHViKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9kYmcoaHViX2RldiwKKwkJCQkiJWRtQSBwb3dlciBidWRnZXQgbGVmdFxuIiwKKwkJCQkyICogc3RhdHVzKTsKKworCQlyZXR1cm47CisKK2xvb3BfZGlzYWJsZToKKwkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAxKTsKK2xvb3A6CisJCWVwMF9yZWluaXQodWRldik7CisJCXJlbGVhc2VfYWRkcmVzcyh1ZGV2KTsKKwkJdXNiX3B1dF9kZXYodWRldik7CisJCWlmIChzdGF0dXMgPT0gLUVOT1RDT05OKQorCQkJYnJlYWs7CisJfQorIAorZG9uZToKKwlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDEpOworfQorCitzdGF0aWMgdm9pZCBodWJfZXZlbnRzKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfaHViICpodWI7CisJc3RydWN0IGRldmljZSAqaHViX2RldjsKKwl1MTYgaHVic3RhdHVzOworCXUxNiBodWJjaGFuZ2U7CisJdTE2IHBvcnRzdGF0dXM7CisJdTE2IHBvcnRjaGFuZ2U7CisJaW50IGksIHJldDsKKwlpbnQgY29ubmVjdF9jaGFuZ2U7CisKKwkvKgorCSAqICBXZSByZXN0YXJ0IHRoZSBsaXN0IGV2ZXJ5IHRpbWUgdG8gYXZvaWQgYSBkZWFkbG9jayB3aXRoCisJICogZGVsZXRpbmcgaHVicyBkb3duc3RyZWFtIGZyb20gdGhpcyBvbmUuIFRoaXMgc2hvdWxkIGJlCisJICogc2FmZSBzaW5jZSB3ZSBkZWxldGUgdGhlIGh1YiBmcm9tIHRoZSBldmVudCBsaXN0LgorCSAqIE5vdCB0aGUgbW9zdCBlZmZpY2llbnQsIGJ1dCBhdm9pZHMgZGVhZGxvY2tzLgorCSAqLworCXdoaWxlICgxKSB7CisKKwkJLyogR3JhYiB0aGUgZmlyc3QgZW50cnkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLworCQlzcGluX2xvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaHViX2V2ZW50X2xvY2spOworCQkJYnJlYWs7CisJCX0KKworCQl0bXAgPSBodWJfZXZlbnRfbGlzdC5uZXh0OworCQlsaXN0X2RlbF9pbml0KHRtcCk7CisKKwkJaHViID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1c2JfaHViLCBldmVudF9saXN0KTsKKwkJaGRldiA9IGh1Yi0+aGRldjsKKwkJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KTsKKwkJaHViX2RldiA9ICZpbnRmLT5kZXY7CisKKwkJZGV2X2RiZyhodWJfZGV2LCAic3RhdGUgJWQgcG9ydHMgJWQgY2hnICUwNHggZXZ0ICUwNHhcbiIsCisJCQkJaGRldi0+c3RhdGUsIGh1Yi0+ZGVzY3JpcHRvcgorCQkJCQk/IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzCisJCQkJCTogMCwKKwkJCQkvKiBOT1RFOiBleHBlY3RzIG1heCAxNSBwb3J0cy4uLiAqLworCQkJCSh1MTYpIGh1Yi0+Y2hhbmdlX2JpdHNbMF0sCisJCQkJKHUxNikgaHViLT5ldmVudF9iaXRzWzBdKTsKKworCQl1c2JfZ2V0X2ludGYoaW50Zik7CisJCWkgPSBodWItPnJlc3VtZV9yb290X2h1YjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CisKKwkJLyogSXMgdGhpcyBpcyBhIHJvb3QgaHViIHdhbnRpbmcgdG8gYmUgcmVzdW1lZD8gKi8KKwkJaWYgKGkpCisJCQl1c2JfcmVzdW1lX2RldmljZShoZGV2KTsKKworCQkvKiBMb2NrIHRoZSBkZXZpY2UsIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHdlIHdlcmUKKwkJICogZGlzY29ubmVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIHN1Y2NlZWQuICovCisJCWlmIChsb2NrdHJlZShoZGV2KSA8IDApIHsKKwkJCXVzYl9wdXRfaW50ZihpbnRmKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChodWIgIT0gdXNiX2dldF9pbnRmZGF0YShpbnRmKSkKKwkJCWdvdG8gbG9vcDsKKworCQkvKiBJZiB0aGUgaHViIGhhcyBkaWVkLCBjbGVhbiB1cCBhZnRlciBpdCAqLworCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CisJCQlodWJfcHJlX3Jlc2V0KGh1Yik7CisJCQlnb3RvIGxvb3A7CisJCX0KKworCQkvKiBJZiB0aGlzIGlzIGFuIGluYWN0aXZlIG9yIHN1c3BlbmRlZCBodWIsIGRvIG5vdGhpbmcgKi8KKwkJaWYgKGh1Yi0+cXVpZXNjaW5nKQorCQkJZ290byBsb29wOworCisJCWlmIChodWItPmVycm9yKSB7CisJCQlkZXZfZGJnIChodWJfZGV2LCAicmVzZXR0aW5nIGZvciBlcnJvciAlZFxuIiwKKwkJCQlodWItPmVycm9yKTsKKworCQkJcmV0ID0gdXNiX3Jlc2V0X2RldmljZShoZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZGJnIChodWJfZGV2LAorCQkJCQkiZXJyb3IgcmVzZXR0aW5nIGh1YjogJWRcbiIsIHJldCk7CisJCQkJZ290byBsb29wOworCQkJfQorCisJCQlodWItPm5lcnJvcnMgPSAwOworCQkJaHViLT5lcnJvciA9IDA7CisJCX0KKworCQkvKiBkZWFsIHdpdGggcG9ydCBzdGF0dXMgY2hhbmdlcyAqLworCQlmb3IgKGkgPSAxOyBpIDw9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOyBpKyspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBodWItPmJ1c3lfYml0cykpCisJCQkJY29udGludWU7CisJCQljb25uZWN0X2NoYW5nZSA9IHRlc3RfYml0KGksIGh1Yi0+Y2hhbmdlX2JpdHMpOworCQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgaHViLT5ldmVudF9iaXRzKSAmJgorCQkJCQkhY29ubmVjdF9jaGFuZ2UgJiYgIWh1Yi0+YWN0aXZhdGluZykKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgaSwKKwkJCQkJJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoaHViLT5hY3RpdmF0aW5nICYmICFoZGV2LT5jaGlsZHJlbltpLTFdICYmCisJCQkJCShwb3J0c3RhdHVzICYKKwkJCQkJCVVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpCisJCQkJY29ubmVjdF9jaGFuZ2UgPSAxOworCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSB7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKwkJCQljb25uZWN0X2NoYW5nZSA9IDE7CisJCQl9CisKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSkgeworCQkJCWlmICghY29ubmVjdF9jaGFuZ2UpCisJCQkJCWRldl9kYmcgKGh1Yl9kZXYsCisJCQkJCQkicG9ydCAlZCBlbmFibGUgY2hhbmdlLCAiCisJCQkJCQkic3RhdHVzICUwOHhcbiIsCisJCQkJCQlpLCBwb3J0c3RhdHVzKTsKKwkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSk7CisKKwkJCQkvKgorCQkJCSAqIEVNIGludGVyZmVyZW5jZSBzb21ldGltZXMgY2F1c2VzIGJhZGx5CisJCQkJICogc2hpZWxkZWQgVVNCIGRldmljZXMgdG8gYmUgc2h1dGRvd24gYnkKKwkJCQkgKiB0aGUgaHViLCB0aGlzIGhhY2sgZW5hYmxlcyB0aGVtIGFnYWluLgorCQkJCSAqIFdvcmtzIGF0IGxlYXN0IHdpdGggbW91c2UgZHJpdmVyLiAKKwkJCQkgKi8KKwkJCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpCisJCQkJICAgICYmICFjb25uZWN0X2NoYW5nZQorCQkJCSAgICAmJiBoZGV2LT5jaGlsZHJlbltpLTFdKSB7CisJCQkJCWRldl9lcnIgKGh1Yl9kZXYsCisJCQkJCSAgICAicG9ydCAlaSAiCisJCQkJCSAgICAiZGlzYWJsZWQgYnkgaHViIChFTUk/KSwgIgorCQkJCQkgICAgInJlLWVuYWJsaW5nLi4uXG4iLAorCQkJCQkJaSk7CisJCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQpIHsKKwkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOworCQkJCWlmIChoZGV2LT5jaGlsZHJlbltpLTFdKSB7CisJCQkJCXJldCA9IHJlbW90ZV93YWtldXAoaGRldi0+CisJCQkJCQkJY2hpbGRyZW5baS0xXSk7CisJCQkJCWlmIChyZXQgPCAwKQorCQkJCQkJY29ubmVjdF9jaGFuZ2UgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBpLCAxKTsKKwkJCQl9CisJCQkJZGV2X2RiZyAoaHViX2RldiwKKwkJCQkJInJlc3VtZSBvbiBwb3J0ICVkLCBzdGF0dXMgJWRcbiIsCisJCQkJCWksIHJldCk7CisJCQl9CisJCQkKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UKSB7CisJCQkJZGV2X2VyciAoaHViX2RldiwKKwkJCQkJIm92ZXItY3VycmVudCBjaGFuZ2Ugb24gcG9ydCAlZFxuIiwKKwkJCQkJaSk7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQpOworCQkJCWh1Yl9wb3dlcl9vbihodWIpOworCQkJfQorCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgeworCQkJCWRldl9kYmcgKGh1Yl9kZXYsCisJCQkJCSJyZXNldCBjaGFuZ2Ugb24gcG9ydCAlZFxuIiwKKwkJCQkJaSk7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19SRVNFVCk7CisJCQl9CisKKwkJCWlmIChjb25uZWN0X2NoYW5nZSkKKwkJCQlodWJfcG9ydF9jb25uZWN0X2NoYW5nZShodWIsIGksCisJCQkJCQlwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlKTsKKwkJfSAvKiBlbmQgZm9yIGkgKi8KKworCQkvKiBkZWFsIHdpdGggaHViIHN0YXR1cyBjaGFuZ2VzICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgaHViLT5ldmVudF9iaXRzKSA9PSAwKQorCQkJOwkvKiBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKGh1Yl9odWJfc3RhdHVzKGh1YiwgJmh1YnN0YXR1cywgJmh1YmNoYW5nZSkgPCAwKQorCQkJZGV2X2VyciAoaHViX2RldiwgImdldF9odWJfc3RhdHVzIGZhaWxlZFxuIik7CisJCWVsc2UgeworCQkJaWYgKGh1YmNoYW5nZSAmIEhVQl9DSEFOR0VfTE9DQUxfUE9XRVIpIHsKKwkJCQlkZXZfZGJnIChodWJfZGV2LCAicG93ZXIgY2hhbmdlXG4iKTsKKwkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9MT0NBTF9QT1dFUik7CisJCQl9CisJCQlpZiAoaHViY2hhbmdlICYgSFVCX0NIQU5HRV9PVkVSQ1VSUkVOVCkgeworCQkJCWRldl9kYmcgKGh1Yl9kZXYsICJvdmVyY3VycmVudCBjaGFuZ2VcbiIpOworCQkJCW1zbGVlcCg1MDApOwkvKiBDb29sIGRvd24gKi8KKwkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9PVkVSX0NVUlJFTlQpOworICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIpOworCQkJfQorCQl9CisKKwkJaHViLT5hY3RpdmF0aW5nID0gMDsKKworbG9vcDoKKwkJdXNiX3VubG9ja19kZXZpY2UoaGRldik7CisJCXVzYl9wdXRfaW50ZihpbnRmKTsKKworICAgICAgICB9IC8qIGVuZCB3aGlsZSAoMSkgKi8KK30KKworc3RhdGljIGludCBodWJfdGhyZWFkKHZvaWQgKl9fdW51c2VkKQoreworCS8qCisJICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKKwkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzCisJICovCisKKwlkYWVtb25pemUoImtodWJkIik7CisJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOworCisJLyogU2VuZCBtZSBhIHNpZ25hbCB0byBnZXQgbWUgZGllIChmb3IgZGVidWdnaW5nKSAqLworCWRvIHsKKwkJaHViX2V2ZW50cygpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoa2h1YmRfd2FpdCwgIWxpc3RfZW1wdHkoJmh1Yl9ldmVudF9saXN0KSk7IAorCQl0cnlfdG9fZnJlZXplKFBGX0ZSRUVaRSk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworCXByX2RlYnVnICgiJXM6IGtodWJkIGV4aXRpbmdcbiIsIHVzYmNvcmVfbmFtZSk7CisJY29tcGxldGVfYW5kX2V4aXQoJmtodWJkX2V4aXRlZCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBodWJfaWRfdGFibGUgW10gPSB7CisgICAgeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUywKKyAgICAgIC5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfSFVCfSwKKyAgICB7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLAorICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19IVUJ9LAorICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGh1Yl9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBodWJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJodWIiLAorCS5wcm9iZSA9CWh1Yl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWh1Yl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JaHViX3N1c3BlbmQsCisJLnJlc3VtZSA9CWh1Yl9yZXN1bWUsCisJLmlvY3RsID0JaHViX2lvY3RsLAorCS5pZF90YWJsZSA9CWh1Yl9pZF90YWJsZSwKK307CisKK2ludCB1c2JfaHViX2luaXQodm9pZCkKK3sKKwlwaWRfdCBwaWQ7CisKKwlpZiAodXNiX3JlZ2lzdGVyKCZodWJfZHJpdmVyKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgcmVnaXN0ZXIgaHViIGRyaXZlclxuIiwKKwkJCXVzYmNvcmVfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlwaWQgPSBrZXJuZWxfdGhyZWFkKGh1Yl90aHJlYWQsIE5VTEwsIENMT05FX0tFUk5FTCk7CisJaWYgKHBpZCA+PSAwKSB7CisJCWtodWJkX3BpZCA9IHBpZDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGYWxsIHRocm91Z2ggaWYga2VybmVsX3RocmVhZCBmYWlsZWQgKi8KKwl1c2JfZGVyZWdpc3RlcigmaHViX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3Qgc3RhcnQga2h1YmRcbiIsIHVzYmNvcmVfbmFtZSk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgdXNiX2h1Yl9jbGVhbnVwKHZvaWQpCit7CisJaW50IHJldDsKKworCS8qIEtpbGwgdGhlIHRocmVhZCAqLworCXJldCA9IGtpbGxfcHJvYyhraHViZF9waWQsIFNJR0tJTEwsIDEpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigma2h1YmRfZXhpdGVkKTsKKworCS8qCisJICogSHViIHJlc291cmNlcyBhcmUgZnJlZWQgZm9yIHVzIGJ5IHVzYl9kZXJlZ2lzdGVyLiBJdCBjYWxscworCSAqIHVzYl9kcml2ZXJfcHVyZ2Ugb24gZXZlcnkgZGV2aWNlIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhhdAorCSAqIGRldmljZXMgZGlzY29ubmVjdCBmdW5jdGlvbiBpZiBpdCBpcyB1c2luZyB0aGlzIGRyaXZlci4KKwkgKiBUaGUgaHViX2Rpc2Nvbm5lY3QgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiByZWxlYXNpbmcgdGhlCisJICogaW5kaXZpZHVhbCBodWIgcmVzb3VyY2VzLiAtZ3JlZworCSAqLworCXVzYl9kZXJlZ2lzdGVyKCZodWJfZHJpdmVyKTsKK30gLyogdXNiX2h1Yl9jbGVhbnVwKCkgKi8KKworCitzdGF0aWMgaW50IGNvbmZpZ19kZXNjcmlwdG9yc19jaGFuZ2VkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVuc2lnbmVkCQkJaW5kZXg7CisJdW5zaWduZWQJCQlsZW4gPSAwOworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmJ1ZjsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpbmRleCsrKSB7CisJCWlmIChsZW4gPCBsZTE2X3RvX2NwdSh1ZGV2LT5jb25maWdbaW5kZXhdLmRlc2Mud1RvdGFsTGVuZ3RoKSkKKwkJCWxlbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmNvbmZpZ1tpbmRleF0uZGVzYy53VG90YWxMZW5ndGgpOworCX0KKwlidWYgPSBrbWFsbG9jIChsZW4sIFNMQUJfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAibm8gbWVtIHRvIHJlLXJlYWQgY29uZmlncyBhZnRlciByZXNldFxuIik7CisJCS8qIGFzc3VtZSB0aGUgd29yc3QgKi8KKwkJcmV0dXJuIDE7CisJfQorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpbmRleCsrKSB7CisJCWludCBsZW5ndGg7CisJCWludCBvbGRfbGVuZ3RoID0gbGUxNl90b19jcHUodWRldi0+Y29uZmlnW2luZGV4XS5kZXNjLndUb3RhbExlbmd0aCk7CisKKwkJbGVuZ3RoID0gdXNiX2dldF9kZXNjcmlwdG9yKHVkZXYsIFVTQl9EVF9DT05GSUcsIGluZGV4LCBidWYsCisJCQkJb2xkX2xlbmd0aCk7CisJCWlmIChsZW5ndGggPCBvbGRfbGVuZ3RoKSB7CisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJjb25maWcgaW5kZXggJWQsIGVycm9yICVkXG4iLAorCQkJCQlpbmRleCwgbGVuZ3RoKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChtZW1jbXAgKGJ1ZiwgdWRldi0+cmF3ZGVzY3JpcHRvcnNbaW5kZXhdLCBvbGRfbGVuZ3RoKQorCQkJCSE9IDApIHsKKwkJCWRldl9kYmcoJnVkZXYtPmRldiwgImNvbmZpZyBpbmRleCAlZCBjaGFuZ2VkICgjJWQpXG4iLAorCQkJCWluZGV4LCBidWYtPmJDb25maWd1cmF0aW9uVmFsdWUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gaW5kZXggIT0gdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7Cit9CisKKy8qKgorICogdXNiX3Jlc2V0X2RldmljZSAtIHBlcmZvcm0gYSBVU0IgcG9ydCByZXNldCB0byByZWluaXRpYWxpemUgYSBkZXZpY2UKKyAqIEB1ZGV2OiBkZXZpY2UgdG8gcmVzZXQgKG5vdCBpbiBTVVNQRU5ERUQgb3IgTk9UQVRUQUNIRUQgc3RhdGUpCisgKgorICogV0FSTklORyAtIGRvbid0IHJlc2V0IGFueSBkZXZpY2UgdW5sZXNzIGRyaXZlcnMgZm9yIGFsbCBvZiBpdHMKKyAqIGludGVyZmFjZXMgYXJlIGV4cGVjdGluZyB0aGF0IHJlc2V0ISAgTWF5YmUgc29tZSBkcml2ZXItPnJlc2V0KCkKKyAqIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBoZWxwIGVuc3VyZSBzdWZmaWNpZW50IGNvb3BlcmF0aW9uLgorICoKKyAqIERvIGEgcG9ydCByZXNldCwgcmVhc3NpZ24gdGhlIGRldmljZSdzIGFkZHJlc3MsIGFuZCBlc3RhYmxpc2ggaXRzCisgKiBmb3JtZXIgb3BlcmF0aW5nIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgcmVzZXQgZmFpbHMsIG9yIHRoZSBkZXZpY2UncworICogZGVzY3JpcHRvcnMgY2hhbmdlIGZyb20gdGhlaXIgdmFsdWVzIGJlZm9yZSB0aGUgcmVzZXQsIG9yIHRoZSBvcmlnaW5hbAorICogY29uZmlndXJhdGlvbiBhbmQgYWx0c2V0dGluZ3MgY2Fubm90IGJlIHJlc3RvcmVkLCBhIGZsYWcgd2lsbCBiZSBzZXQKKyAqIHRlbGxpbmcga2h1YmQgdG8gcHJldGVuZCB0aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgdGhlbgorICogcmUtY29ubmVjdGVkLiAgQWxsIGRyaXZlcnMgd2lsbCBiZSB1bmJvdW5kLCBhbmQgdGhlIGRldmljZSB3aWxsIGJlCisgKiByZS1lbnVtZXJhdGVkIGFuZCBwcm9iZWQgYWxsIG92ZXIgYWdhaW4uCisgKgorICogUmV0dXJucyAwIGlmIHRoZSByZXNldCBzdWNjZWVkZWQsIC1FTk9ERVYgaWYgdGhlIGRldmljZSBoYXMgYmVlbgorICogZmxhZ2dlZCBmb3IgbG9naWNhbCBkaXNjb25uZWN0aW9uLCBvciBzb21lIG90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqIGlmIHRoZSByZXNldCB3YXNuJ3QgZXZlbiBhdHRlbXB0ZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suICBGb3IgZXhhbXBsZSwgaXQncyBzYWZlIHRvIHVzZQorICogdGhpcyBmcm9tIGEgZHJpdmVyIHByb2JlKCkgcm91dGluZSBhZnRlciBkb3dubG9hZGluZyBuZXcgZmlybXdhcmUuCisgKiBGb3IgY2FsbHMgdGhhdCBtaWdodCBub3Qgb2NjdXIgZHVyaW5nIHByb2JlKCksIGRyaXZlcnMgc2hvdWxkIGxvY2sKKyAqIHRoZSBkZXZpY2UgdXNpbmcgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCgpLgorICovCitpbnQgdXNiX3Jlc2V0X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnBhcmVudF9oZGV2ID0gdWRldi0+cGFyZW50OworCXN0cnVjdCB1c2JfaHViCQkJKnBhcmVudF9odWI7CisJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcglkZXNjcmlwdG9yID0gdWRldi0+ZGVzY3JpcHRvcjsKKwlzdHJ1Y3QgdXNiX2h1YgkJCSpodWIgPSBOVUxMOworCWludCAJCQkJaSwgcmV0ID0gMCwgcG9ydDEgPSAtMTsKKworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwKKwkJCXVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0IG5vdCBhbGxvd2VkIGluIHN0YXRlICVkXG4iLAorCQkJCXVkZXYtPnN0YXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwYXJlbnRfaGRldikgeworCQkvKiB0aGlzIHJlcXVpcmVzIGhjZC1zcGVjaWZpYyBsb2dpYzsgc2VlIE9IQ0kgaGNfcmVzdGFydCgpICovCisJCWRldl9kYmcoJnVkZXYtPmRldiwgIiVzIGZvciByb290IGh1YiFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlTRElSOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwYXJlbnRfaGRldi0+bWF4Y2hpbGQ7IGkrKykKKwkJaWYgKHBhcmVudF9oZGV2LT5jaGlsZHJlbltpXSA9PSB1ZGV2KSB7CisJCQlwb3J0MSA9IGkgKyAxOworCQkJYnJlYWs7CisJCX0KKworCWlmIChwb3J0MSA8IDApIHsKKwkJLyogSWYgdGhpcyBldmVyIGhhcHBlbnMsIGl0J3MgdmVyeSBiYWQgKi8KKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiQ2FuJ3QgbG9jYXRlIGRldmljZSdzIHBvcnQhXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCXBhcmVudF9odWIgPSBoZGV2X3RvX2h1YihwYXJlbnRfaGRldik7CisKKwkvKiBJZiB3ZSdyZSByZXNldHRpbmcgYW4gYWN0aXZlIGh1YiwgdGFrZSBzb21lIHNwZWNpYWwgYWN0aW9ucyAqLworCWlmICh1ZGV2LT5hY3Rjb25maWcgJiYKKwkJCXVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdLT5kZXYuZHJpdmVyID09CisJCQkJJmh1Yl9kcml2ZXIuZHJpdmVyICYmCisJCQkoaHViID0gaGRldl90b19odWIodWRldikpICE9IE5VTEwpIHsKKwkJaHViX3ByZV9yZXNldChodWIpOworCX0KKworCXNldF9iaXQocG9ydDEsIHBhcmVudF9odWItPmJ1c3lfYml0cyk7CisJZm9yIChpID0gMDsgaSA8IFNFVF9DT05GSUdfVFJJRVM7ICsraSkgeworCisJCS8qIGVwMCBtYXhwYWNrZXQgc2l6ZSBtYXkgY2hhbmdlOyBsZXQgdGhlIEhDRCBrbm93IGFib3V0IGl0LgorCQkgKiBPdGhlciBlbmRwb2ludHMgd2lsbCBiZSBoYW5kbGVkIGJ5IHJlLWVudW1lcmF0aW9uLiAqLworCQllcDBfcmVpbml0KHVkZXYpOworCQlyZXQgPSBodWJfcG9ydF9pbml0KHBhcmVudF9odWIsIHVkZXYsIHBvcnQxLCBpKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJYnJlYWs7CisJfQorCWNsZWFyX2JpdChwb3J0MSwgcGFyZW50X2h1Yi0+YnVzeV9iaXRzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byByZV9lbnVtZXJhdGU7CisgCisJLyogRGV2aWNlIG1pZ2h0IGhhdmUgY2hhbmdlZCBmaXJtd2FyZSAoREZVIG9yIHNpbWlsYXIpICovCisJaWYgKG1lbWNtcCgmdWRldi0+ZGVzY3JpcHRvciwgJmRlc2NyaXB0b3IsIHNpemVvZiBkZXNjcmlwdG9yKQorCQkJfHwgY29uZmlnX2Rlc2NyaXB0b3JzX2NoYW5nZWQgKHVkZXYpKSB7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZmlybXdhcmUgY2hhbmdlZFxuIik7CisJCXVkZXYtPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwkvKiBmb3IgZGlzY29ubmVjdCgpIGNhbGxzICovCisJCWdvdG8gcmVfZW51bWVyYXRlOworICAJfQorICAKKwlpZiAoIXVkZXYtPmFjdGNvbmZpZykKKwkJZ290byBkb25lOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsCisJCQl1ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMCwKKwkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsCisJCQkiY2FuJ3QgcmVzdG9yZSBjb25maWd1cmF0aW9uICMlZCAoZXJyb3I9JWQpXG4iLAorCQkJdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIHJldCk7CisJCWdvdG8gcmVfZW51bWVyYXRlOworICAJfQorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKKworCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOworCisJCS8qIHNldF9pbnRlcmZhY2UgcmVzZXRzIGhvc3Qgc2lkZSB0b2dnbGUgZXZlbgorCQkgKiBmb3IgYWx0c2V0dGluZyB6ZXJvLiAgdGhlIGludGVyZmFjZSBtYXkgaGF2ZSBubyBkcml2ZXIuCisJCSAqLworCQlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAorCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc3RvcmUgaW50ZXJmYWNlICVkICIKKwkJCQkiYWx0c2V0dGluZyAlZCAoZXJyb3I9JWQpXG4iLAorCQkJCWRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcsCisJCQkJcmV0KTsKKwkJCWdvdG8gcmVfZW51bWVyYXRlOworCQl9CisJfQorCitkb25lOgorCWlmIChodWIpCisJCWh1Yl9wb3N0X3Jlc2V0KGh1Yik7CisJcmV0dXJuIDA7CisgCityZV9lbnVtZXJhdGU6CisJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KHBhcmVudF9odWIsIHBvcnQxKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmggYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTRiODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCkBAIC0wLDAgKzEsMjM4IEBACisjaWZuZGVmIF9fTElOVVhfSFVCX0gKKyNkZWZpbmUgX19MSU5VWF9IVUJfSAorCisvKgorICogSHViIHByb3RvY29sIGFuZCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIFNvbWUgb2YgdGhlc2UgYXJlIGtub3duIHRvIHRoZSAidmlydHVhbCByb290IGh1YiIgY29kZQorICogaW4gaG9zdCBjb250cm9sbGVyIGRyaXZlcnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBsaWtlbHkoKS91bmxpa2VseSgpICovCisKKy8qCisgKiBIdWIgcmVxdWVzdCB0eXBlcworICovCisKKyNkZWZpbmUgVVNCX1JUX0hVQgkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfREVWSUNFKQorI2RlZmluZSBVU0JfUlRfUE9SVAkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfT1RIRVIpCisKKy8qCisgKiBIdWIgY2xhc3MgcmVxdWVzdHMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTYKKyAqLworI2RlZmluZSBIVUJfQ0xFQVJfVFRfQlVGRkVSCTgKKyNkZWZpbmUgSFVCX1JFU0VUX1RUCQk5CisjZGVmaW5lIEhVQl9HRVRfVFRfU1RBVEUJMTAKKyNkZWZpbmUgSFVCX1NUT1BfVFQJCTExCisKKy8qCisgKiBIdWIgQ2xhc3MgZmVhdHVyZSBudW1iZXJzCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTE3CisgKi8KKyNkZWZpbmUgQ19IVUJfTE9DQUxfUE9XRVIJMAorI2RlZmluZSBDX0hVQl9PVkVSX0NVUlJFTlQJMQorCisvKgorICogUG9ydCBmZWF0dXJlIG51bWJlcnMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTcKKyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04JMAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0VOQUJMRQkJMQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQJCTIKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQJMworI2RlZmluZSBVU0JfUE9SVF9GRUFUX1JFU0VUCQk0CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUE9XRVIJCTgKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRAkJOQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRAkJMTAKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04JMTYKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRQkJMTcKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQJCTE4CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQJMTkKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1JFU0VUCQkyMAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX1RFU1QgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SICAgICAgICAgMjIKKworLyogCisgKiBIdWIgU3RhdHVzIGFuZCBIdWIgQ2hhbmdlIHJlc3VsdHMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTkgYW5kIFRhYmxlIDExLTIwCisgKi8KK3N0cnVjdCB1c2JfcG9ydF9zdGF0dXMgeworCV9fbGUxNiB3UG9ydFN0YXR1czsKKwlfX2xlMTYgd1BvcnRDaGFuZ2U7CQorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIAorICogd1BvcnRTdGF0dXMgYml0IGZpZWxkCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTIxCisgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCTB4MDAwMQorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0VOQUJMRQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1VTUEVORAkJMHgwMDA0CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfT1ZFUkNVUlJFTlQJMHgwMDA4CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfUkVTRVQJCTB4MDAxMAorLyogYml0cyA1IHRvIDcgYXJlIHJlc2VydmVkICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfUE9XRVIJCTB4MDEwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRAkJMHgwMjAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCAgICAgICAgMHgwNDAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfVEVTVCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfSU5ESUNBVE9SICAgICAgICAgMHgxMDAwCisvKiBiaXRzIDEzIHRvIDE1IGFyZSByZXNlcnZlZCAqLworCisvKiAKKyAqIHdQb3J0Q2hhbmdlIGJpdCBmaWVsZAorICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0yMgorICogQml0cyAwIHRvIDQgc2hvd24sIGJpdHMgNSB0byAxNSBhcmUgcmVzZXJ2ZWQKKyAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTgkweDAwMDEKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5ECQkweDAwMDQKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UCTB4MDAwOAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQJCTB4MDAxMAorCisvKgorICogd0h1YkNoYXJhY3RlcmlzdGljcyAobWFza3MpIAorICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xMywgb2Zmc2V0IDMKKyAqLworI2RlZmluZSBIVUJfQ0hBUl9MUFNNCQkweDAwMDMgLyogRDEgLi4gRDAgKi8KKyNkZWZpbmUgSFVCX0NIQVJfQ09NUE9VTkQJMHgwMDA0IC8qIEQyICAgICAgICovCisjZGVmaW5lIEhVQl9DSEFSX09DUE0JCTB4MDAxOCAvKiBENCAuLiBEMyAqLworI2RlZmluZSBIVUJfQ0hBUl9UVFRUICAgICAgICAgICAweDAwNjAgLyogRDYgLi4gRDUgKi8KKyNkZWZpbmUgSFVCX0NIQVJfUE9SVElORCAgICAgICAgMHgwMDgwIC8qIEQ3ICAgICAgICovCisKK3N0cnVjdCB1c2JfaHViX3N0YXR1cyB7CisJX19sZTE2IHdIdWJTdGF0dXM7CisJX19sZTE2IHdIdWJDaGFuZ2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEh1YiBTdGF0dXMgJiBIdWIgQ2hhbmdlIGJpdCBtYXNrcworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xOSBhbmQgVGFibGUgMTEtMjAKKyAqIEJpdHMgMCBhbmQgMSBmb3Igd0h1YlN0YXR1cyBhbmQgd0h1YkNoYW5nZQorICogQml0cyAyIHRvIDE1IGFyZSByZXNlcnZlZCBmb3IgYm90aAorICovCisjZGVmaW5lIEhVQl9TVEFUVVNfTE9DQUxfUE9XRVIJMHgwMDAxCisjZGVmaW5lIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQJMHgwMDAyCisjZGVmaW5lIEhVQl9DSEFOR0VfTE9DQUxfUE9XRVIJMHgwMDAxCisjZGVmaW5lIEhVQl9DSEFOR0VfT1ZFUkNVUlJFTlQJMHgwMDAyCisKKworLyogCisgKiBIdWIgZGVzY3JpcHRvciAKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTMKKyAqLworCisjZGVmaW5lIFVTQl9EVF9IVUIJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDA5KQorI2RlZmluZSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFCQk3CisKK3N0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgeworCV9fdTggIGJEZXNjTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiTmJyUG9ydHM7CisJX191MTYgd0h1YkNoYXJhY3RlcmlzdGljczsKKwlfX3U4ICBiUHdyT24yUHdyR29vZDsKKwlfX3U4ICBiSHViQ29udHJDdXJyZW50OworCSAgICAJLyogYWRkIDEgYml0IGZvciBodWIgc3RhdHVzIGNoYW5nZTsgcm91bmQgdG8gYnl0ZXMgKi8KKwlfX3U4ICBEZXZpY2VSZW1vdmFibGVbKFVTQl9NQVhDSElMRFJFTiArIDEgKyA3KSAvIDhdOworCV9fdTggIFBvcnRQd3JDdHJsTWFza1soVVNCX01BWENISUxEUkVOICsgMSArIDcpIC8gOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiBwb3J0IGluZGljYXRvciBzdGF0dXMgc2VsZWN0b3JzLCB0YWJsZXMgMTEtNyBhbmQgMTEtMjUgKi8KKyNkZWZpbmUgSFVCX0xFRF9BVVRPCTAKKyNkZWZpbmUgSFVCX0xFRF9BTUJFUgkxCisjZGVmaW5lIEhVQl9MRURfR1JFRU4JMgorI2RlZmluZSBIVUJfTEVEX09GRgkzCisKK2VudW0gaHViX2xlZF9tb2RlIHsKKwlJTkRJQ0FUT1JfQVVUTyA9IDAsCisJSU5ESUNBVE9SX0NZQ0xFLAorCS8qIHNvZnR3YXJlIGJsaW5rcyBmb3IgYXR0ZW50aW9uOiAgc29mdHdhcmUsIGhhcmR3YXJlLCByZXNlcnZlZCAqLworCUlORElDQVRPUl9HUkVFTl9CTElOSywgSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRiwKKwlJTkRJQ0FUT1JfQU1CRVJfQkxJTkssIElORElDQVRPUl9BTUJFUl9CTElOS19PRkYsCisJSU5ESUNBVE9SX0FMVF9CTElOSywgSU5ESUNBVE9SX0FMVF9CTElOS19PRkYKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdXNiX2RldmljZTsKKworLyoKKyAqIEFzIG9mIFVTQiAyLjAsIGZ1bGwvbG93IHNwZWVkIGRldmljZXMgYXJlIHNlZ3JlZ2F0ZWQgaW50byB0cmVlcy4KKyAqIE9uZSB0eXBlIGdyb3dzIGZyb20gVVNCIDEuMSBob3N0IGNvbnRyb2xsZXJzIChPSENJLCBVSENJIGV0YykuCisgKiBUaGUgb3RoZXIgdHlwZSBncm93cyBmcm9tIGhpZ2ggc3BlZWQgaHVicyB3aGVuIHRoZXkgY29ubmVjdCB0bworICogZnVsbC9sb3cgc3BlZWQgZGV2aWNlcyB1c2luZyAiVHJhbnNhY3Rpb24gVHJhbnNsYXRvcnMiIChUVHMpLgorICoKKyAqIFRUcyBzaG91bGQgb25seSBiZSBrbm93biB0byB0aGUgaHViIGRyaXZlciwgYW5kIGhpZ2ggc3BlZWQgYnVzCisgKiBkcml2ZXJzIChvbmx5IEVIQ0kgZm9yIG5vdykuICBUaGV5IGFmZmVjdCBwZXJpb2RpYyBzY2hlZHVsaW5nIGFuZAorICogc29tZXRpbWVzIGNvbnRyb2wvYnVsayBlcnJvciByZWNvdmVyeS4KKyAqLworc3RydWN0IHVzYl90dCB7CisJc3RydWN0IHVzYl9kZXZpY2UJKmh1YjsJLyogdXBzdHJlYW0gaGlnaHNwZWVkIGh1YiAqLworCWludAkJCW11bHRpOwkvKiB0cnVlIG1lYW5zIG9uZSBUVCBwZXIgcG9ydCAqLworCisJLyogZm9yIGNvbnRyb2wvYnVsayBlcnJvciByZWNvdmVyeSAoQ0xFQVJfVFRfQlVGRkVSKSAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAljbGVhcl9saXN0OwkvKiBvZiB1c2JfdHRfY2xlYXIgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQlrZXZlbnQ7Cit9OworCitzdHJ1Y3QgdXNiX3R0X2NsZWFyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFyX2xpc3Q7CisJdW5zaWduZWQJCXR0OworCXUxNgkJCWRldmluZm87Cit9OworCitleHRlcm4gdm9pZCB1c2JfaHViX3R0X2NsZWFyX2J1ZmZlciAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IHBpcGUpOworCitzdHJ1Y3QgdXNiX2h1YiB7CisJc3RydWN0IGRldmljZQkJKmludGZkZXY7CS8qIHRoZSAiaW50ZXJmYWNlIiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqaGRldjsKKwlzdHJ1Y3QgdXJiCQkqdXJiOwkJLyogZm9yIGludGVycnVwdCBwb2xsaW5nIHBpcGUgKi8KKworCS8qIGJ1ZmZlciBmb3IgdXJiIC4uLiB3aXRoIGV4dHJhIHNwYWNlIGluIGNhc2Ugb2YgYmFiYmxlICovCisJY2hhcgkJCSgqYnVmZmVyKVs4XTsKKwlkbWFfYWRkcl90CQlidWZmZXJfZG1hOwkvKiBETUEgYWRkcmVzcyBmb3IgYnVmZmVyICovCisJdW5pb24geworCQlzdHJ1Y3QgdXNiX2h1Yl9zdGF0dXMJaHViOworCQlzdHJ1Y3QgdXNiX3BvcnRfc3RhdHVzCXBvcnQ7CisJfQkJCSpzdGF0dXM7CS8qIGJ1ZmZlciBmb3Igc3RhdHVzIHJlcG9ydHMgKi8KKworCWludAkJCWVycm9yOwkJLyogbGFzdCByZXBvcnRlZCBlcnJvciAqLworCWludAkJCW5lcnJvcnM7CS8qIHRyYWNrIGNvbnNlY3V0aXZlIGVycm9ycyAqLworCisJc3RydWN0IGxpc3RfaGVhZAlldmVudF9saXN0OwkvKiBodWJzIHcvZGF0YSBvciBlcnJzIHJlYWR5ICovCisJdW5zaWduZWQgbG9uZwkJZXZlbnRfYml0c1sxXTsJLyogc3RhdHVzIGNoYW5nZSBiaXRtYXNrICovCisJdW5zaWduZWQgbG9uZwkJY2hhbmdlX2JpdHNbMV07CS8qIHBvcnRzIHdpdGggbG9naWNhbCBjb25uZWN0CisJCQkJCQkJc3RhdHVzIGNoYW5nZSAqLworCXVuc2lnbmVkIGxvbmcJCWJ1c3lfYml0c1sxXTsJLyogcG9ydHMgYmVpbmcgcmVzZXQgKi8KKyNpZiBVU0JfTUFYQ0hJTERSRU4gPiAzMSAvKiA4KnNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEgKi8KKyNlcnJvciBldmVudF9iaXRzW10gaXMgdG9vIHNob3J0IQorI2VuZGlmCisKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICpkZXNjcmlwdG9yOwkvKiBjbGFzcyBkZXNjcmlwdG9yICovCisJc3RydWN0IHVzYl90dAkJdHQ7CQkvKiBUcmFuc2FjdGlvbiBUcmFuc2xhdG9yICovCisKKwl1OAkJCXBvd2VyX2J1ZGdldDsJLyogaW4gMm1BIHVuaXRzOyBvciB6ZXJvICovCisKKwl1bnNpZ25lZAkJcXVpZXNjaW5nOjE7CisJdW5zaWduZWQJCWFjdGl2YXRpbmc6MTsKKwl1bnNpZ25lZAkJcmVzdW1lX3Jvb3RfaHViOjE7CisKKwl1bnNpZ25lZAkJaGFzX2luZGljYXRvcnM6MTsKKwllbnVtIGh1Yl9sZWRfbW9kZQlpbmRpY2F0b3JbVVNCX01BWENISUxEUkVOXTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbGVkczsKK307CisKKy8qIHVzZSB0aGlzIGZvciBsb3ctcG93ZXJlZCByb290IGh1YnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraHViX3NldF9wb3dlcl9idWRnZXQgKHN0cnVjdCB1c2JfZGV2aWNlICpodWJkZXYsIHVuc2lnbmVkIG1BKQoreworCXN0cnVjdCB1c2JfaHViCSpodWI7CisKKwlodWIgPSAoc3RydWN0IHVzYl9odWIgKikKKwkJdXNiX2dldF9pbnRmZGF0YSAoaHViZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7CisJaHViLT5wb3dlcl9idWRnZXQgPSBtaW4obUEsKHVuc2lnbmVkKTUwMCkvMjsKK30KKworI2VuZGlmIC8qIF9fTElOVVhfSFVCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTEzNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0wLDAgKzEsNzY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglpbm9kZS5jICAtLSAgSW5vZGUvRGVudHJ5IGZ1bmN0aW9ucyBmb3IgdGhlIFVTQiBkZXZpY2UgZmlsZSBzeXN0ZW0uCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAwIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkKKyAqCUNvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgSGlzdG9yeToKKyAqICAgMC4xICAwNC4wMS4yMDAwICBDcmVhdGVkCisgKiAgIDAuMiAgMTAuMTIuMjAwMSAgY29udmVydGVkIHRvIHVzZSB0aGUgdmZzIGxheWVyIGJldHRlcgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgInVzYi5oIgorCitzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdXNiZnNfb3BzOworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmYXVsdF9maWxlX29wZXJhdGlvbnM7CitzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdXNiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgc3RydWN0IHZmc21vdW50ICp1c2Jmc19tb3VudDsKK3N0YXRpYyBpbnQgdXNiZnNfbW91bnRfY291bnQ7CS8qID0gMCAqLworc3RhdGljIGludCBpZ25vcmVfbW91bnQgPSAwOworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGV2aWNlc191c2Jmc19kZW50cnk7CitzdGF0aWMgaW50IG51bV9idXNlczsJLyogPSAwICovCisKK3N0YXRpYyB1aWRfdCBkZXZ1aWQ7CS8qID0gMCAqLworc3RhdGljIHVpZF90IGJ1c3VpZDsJLyogPSAwICovCitzdGF0aWMgdWlkX3QgbGlzdHVpZDsJLyogPSAwICovCitzdGF0aWMgZ2lkX3QgZGV2Z2lkOwkvKiA9IDAgKi8KK3N0YXRpYyBnaWRfdCBidXNnaWQ7CS8qID0gMCAqLworc3RhdGljIGdpZF90IGxpc3RnaWQ7CS8qID0gMCAqLworc3RhdGljIHVtb2RlX3QgZGV2bW9kZSA9IFNfSVdVU1IgfCBTX0lSVUdPOworc3RhdGljIHVtb2RlX3QgYnVzbW9kZSA9IFNfSVhVR08gfCBTX0lSVUdPOworc3RhdGljIHVtb2RlX3QgbGlzdG1vZGUgPSBTX0lSVUdPOworCitlbnVtIHsKKwlPcHRfZGV2dWlkLCBPcHRfZGV2Z2lkLCBPcHRfZGV2bW9kZSwKKwlPcHRfYnVzdWlkLCBPcHRfYnVzZ2lkLCBPcHRfYnVzbW9kZSwKKwlPcHRfbGlzdHVpZCwgT3B0X2xpc3RnaWQsIE9wdF9saXN0bW9kZSwKKwlPcHRfZXJyLAorfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworCXtPcHRfZGV2dWlkLCAiZGV2dWlkPSV1In0sCisJe09wdF9kZXZnaWQsICJkZXZnaWQ9JXUifSwKKwl7T3B0X2Rldm1vZGUsICJkZXZtb2RlPSVvIn0sCisJe09wdF9idXN1aWQsICJidXN1aWQ9JXUifSwKKwl7T3B0X2J1c2dpZCwgImJ1c2dpZD0ldSJ9LAorCXtPcHRfYnVzbW9kZSwgImJ1c21vZGU9JW8ifSwKKwl7T3B0X2xpc3R1aWQsICJsaXN0dWlkPSV1In0sCisJe09wdF9saXN0Z2lkLCAibGlzdGdpZD0ldSJ9LAorCXtPcHRfbGlzdG1vZGUsICJsaXN0bW9kZT0lbyJ9LAorCXtPcHRfZXJyLCBOVUxMfQorfTsKKworc3RhdGljIGludCBwYXJzZV9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY2hhciAqZGF0YSkKK3sKKwljaGFyICpwOworCWludCBvcHRpb247CisKKwkvKiAocmUpc2V0IHRvIGRlZmF1bHRzLiAqLworCWRldnVpZCA9IDA7CisJYnVzdWlkID0gMDsKKwlsaXN0dWlkID0gMDsKKwlkZXZnaWQgPSAwOworCWJ1c2dpZCA9IDA7CisJbGlzdGdpZCA9IDA7CisJZGV2bW9kZSA9IFNfSVdVU1IgfCBTX0lSVUdPOworCWJ1c21vZGUgPSBTX0lYVUdPIHwgU19JUlVHTzsKKwlsaXN0bW9kZSA9IFNfSVJVR087CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJmRhdGEsICIsIikpICE9IE5VTEwpIHsKKwkJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW47CisJCWlmICghKnApCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfZGV2dWlkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZ1aWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGV2Z2lkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZnaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGV2bW9kZToKKwkJCWlmIChtYXRjaF9vY3RhbCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZtb2RlID0gb3B0aW9uICYgU19JUldYVUdPOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1c3VpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJYnVzdWlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1c2dpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJYnVzZ2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1c21vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnVzbW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9saXN0dWlkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlsaXN0dWlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2xpc3RnaWQ6CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJCWxpc3RnaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbGlzdG1vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbGlzdG1vZGUgPSBvcHRpb24gJiBTX0lSV1hVR087CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigidXNiZnM6IHVucmVjb2duaXNlZCBtb3VudCBvcHRpb24gXCIlc1wiICIKKwkJCSAgICAib3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc3BlY2lhbChzdHJ1Y3QgZGVudHJ5ICpzcGVjaWFsKQoreworCXNwZWNpYWwtPmRfaW5vZGUtPmlfdWlkID0gbGlzdHVpZDsKKwlzcGVjaWFsLT5kX2lub2RlLT5pX2dpZCA9IGxpc3RnaWQ7CisJc3BlY2lhbC0+ZF9pbm9kZS0+aV9tb2RlID0gU19JRlJFRyB8IGxpc3Rtb2RlOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGV2KHN0cnVjdCBkZW50cnkgKmRldikKK3sKKwlkZXYtPmRfaW5vZGUtPmlfdWlkID0gZGV2dWlkOworCWRldi0+ZF9pbm9kZS0+aV9naWQgPSBkZXZnaWQ7CisJZGV2LT5kX2lub2RlLT5pX21vZGUgPSBTX0lGUkVHIHwgZGV2bW9kZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2J1cyhzdHJ1Y3QgZGVudHJ5ICpidXMpCit7CisJc3RydWN0IGRlbnRyeSAqZGV2ID0gTlVMTDsKKworCWJ1cy0+ZF9pbm9kZS0+aV91aWQgPSBidXN1aWQ7CisJYnVzLT5kX2lub2RlLT5pX2dpZCA9IGJ1c2dpZDsKKwlidXMtPmRfaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBidXNtb2RlOworCisJZG93bigmYnVzLT5kX2lub2RlLT5pX3NlbSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZF9zdWJkaXJzLCBkX2NoaWxkKQorCQlpZiAoZGV2LT5kX2lub2RlKQorCQkJdXBkYXRlX2RldihkZXYpOworCisJdXAoJmJ1cy0+ZF9pbm9kZS0+aV9zZW0pOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2ItPnNfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpidXMgPSBOVUxMOworCisJaWYgKCFyb290KQorCQlyZXR1cm47CisKKwlkb3duKCZyb290LT5kX2lub2RlLT5pX3NlbSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnJvb3QtPmRfc3ViZGlycywgZF9jaGlsZCkgeworCQlpZiAoYnVzLT5kX2lub2RlKSB7CisJCQlzd2l0Y2ggKFNfSUZNVCAmIGJ1cy0+ZF9pbm9kZS0+aV9tb2RlKSB7CisJCQljYXNlIFNfSUZESVI6CisJCQkJdXBkYXRlX2J1cyhidXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBTX0lGUkVHOgorCQkJCXVwZGF0ZV9zcGVjaWFsKGJ1cyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXdhcm4oIlVua25vd24gbm9kZSAlcyBtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLGJ1cy0+ZF9uYW1lLm5hbWUsYnVzLT5kX2lub2RlLT5pX21vZGUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJdXAoJnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKK30KKworc3RhdGljIGludCByZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCit7CisJLyogSWYgdGhpcyBpcyBub3QgYSByZWFsIG1vdW50LAorCSAqIGkuZS4gaXQncyBhIHNpbXBsZV9waW5fZnMgZnJvbSBjcmVhdGVfc3BlY2lhbF9maWxlcywKKwkgKiB0aGVuIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoaWdub3JlX21vdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChwYXJzZV9vcHRpb25zKHNiLCBkYXRhKSkgeworCQl3YXJuKCJ1c2JmczogbW91bnQgcGFyYW1ldGVyIGVycm9yOiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNiZnNfbW91bnQgJiYgdXNiZnNfbW91bnQtPm1udF9zYikKKwkJdXBkYXRlX3NiKHVzYmZzX21vdW50LT5tbnRfc2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKnVzYmZzX2dldF9pbm9kZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGRldl90IGRldikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKKworCWlmIChpbm9kZSkgeworCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCQlpbm9kZS0+aV9ibG9ja3MgPSAwOworCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCQlkZWZhdWx0OgorCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgU19JRlJFRzoKKwkJCWlub2RlLT5pX2ZvcCA9ICZkZWZhdWx0X2ZpbGVfb3BlcmF0aW9uczsKKwkJCWJyZWFrOworCQljYXNlIFNfSUZESVI6CisJCQlpbm9kZS0+aV9vcCA9ICZ1c2Jmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKKwkJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CisKKwkJCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLworCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBpbm9kZTsgCit9CisKKy8qIFNNUC1zYWZlICovCitzdGF0aWMgaW50IHVzYmZzX21rbm9kIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJCWRldl90IGRldikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdXNiZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSwgZGV2KTsKKwlpbnQgZXJyb3IgPSAtRVBFUk07CisKKwlpZiAoZGVudHJ5LT5kX2lub2RlKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWlmIChpbm9kZSkgeworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQlkZ2V0KGRlbnRyeSk7CisJCWVycm9yID0gMDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IHVzYmZzX21rZGlyIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlpbnQgcmVzOworCisJbW9kZSA9IChtb2RlICYgKFNfSVJXWFVHTyB8IFNfSVNWVFgpKSB8IFNfSUZESVI7CisJcmVzID0gdXNiZnNfbWtub2QgKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKKwlpZiAoIXJlcykKKwkJZGlyLT5pX25saW5rKys7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB1c2Jmc19jcmVhdGUgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQoreworCW1vZGUgPSAobW9kZSAmIFNfSUFMTFVHTykgfCBTX0lGUkVHOworCXJldHVybiB1c2Jmc19ta25vZCAoZGlyLCBkZW50cnksIG1vZGUsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2Jmc19wb3NpdGl2ZSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBkZW50cnktPmRfaW5vZGUgJiYgIWRfdW5oYXNoZWQoZGVudHJ5KTsKK30KKworc3RhdGljIGludCB1c2Jmc19lbXB0eSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRlbnRyeS0+ZF9zdWJkaXJzKSB7CisJCXN0cnVjdCBkZW50cnkgKmRlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZGVudHJ5LCBkX2NoaWxkKTsKKwkJaWYgKHVzYmZzX3Bvc2l0aXZlKGRlKSkgeworCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1c2Jmc191bmxpbmsgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlkb3duKCZpbm9kZS0+aV9zZW0pOworCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOworCWRwdXQoZGVudHJ5KTsKKwl1cCgmaW5vZGUtPmlfc2VtKTsKKwlkX2RlbGV0ZShkZW50cnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycm9yID0gLUVOT1RFTVBUWTsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCWRvd24oJmlub2RlLT5pX3NlbSk7CisJZGVudHJ5X3VuaGFzaChkZW50cnkpOworCWlmICh1c2Jmc19lbXB0eShkZW50cnkpKSB7CisJCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayAtPSAyOworCQlkcHV0KGRlbnRyeSk7CisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfREVBRDsKKwkJZGlyLT5pX25saW5rLS07CisJCWVycm9yID0gMDsKKwl9CisJdXAoJmlub2RlLT5pX3NlbSk7CisJaWYgKCFlcnJvcikKKwkJZF9kZWxldGUoZGVudHJ5KTsKKwlkcHV0KGRlbnRyeSk7CisJcmV0dXJuIGVycm9yOworfQorCisKKy8qIGRlZmF1bHQgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgc3NpemVfdCBkZWZhdWx0X3JlYWRfZmlsZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZGVmYXVsdF93cml0ZV9maWxlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBsb2ZmX3QgZGVmYXVsdF9maWxlX2xzZWVrIChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJbG9mZl90IHJldHZhbCA9IC1FSU5WQUw7CisKKwlkb3duKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCXN3aXRjaChvcmlnKSB7CisJY2FzZSAwOgorCQlpZiAob2Zmc2V0ID4gMCkgeworCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CisJCQlyZXR2YWwgPSBmaWxlLT5mX3BvczsKKwkJfSAKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoKG9mZnNldCArIGZpbGUtPmZfcG9zKSA+IDApIHsKKwkJCWZpbGUtPmZfcG9zICs9IG9mZnNldDsKKwkJCXJldHZhbCA9IGZpbGUtPmZfcG9zOworCQl9IAorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJdXAoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBkZWZhdWx0X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChpbm9kZS0+dS5nZW5lcmljX2lwKQorCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcGVyYXRpb25zID0geworCS5yZWFkID0JCWRlZmF1bHRfcmVhZF9maWxlLAorCS53cml0ZSA9CWRlZmF1bHRfd3JpdGVfZmlsZSwKKwkub3BlbiA9CQlkZWZhdWx0X29wZW4sCisJLmxsc2VlayA9CWRlZmF1bHRfZmlsZV9sc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1c2Jmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkubG9va3VwID0Jc2ltcGxlX2xvb2t1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1c2Jmc19vcHMgPSB7CisJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCisJLmRyb3BfaW5vZGUgPQlnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkucmVtb3VudF9mcyA9CXJlbW91bnQsCit9OworCitzdGF0aWMgaW50IHVzYmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBkZW50cnkgKnJvb3Q7CisKKwlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOworCXNiLT5zX21hZ2ljID0gVVNCREVWSUNFX1NVUEVSX01BR0lDOworCXNiLT5zX29wID0gJnVzYmZzX29wczsKKwlzYi0+c190aW1lX2dyYW4gPSAxOworCWlub2RlID0gdXNiZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgMDc1NSwgMCk7CisKKwlpZiAoIWlub2RlKSB7CisJCWRiZygiJXM6IGNvdWxkIG5vdCBnZXQgaW5vZGUhIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKKwlpZiAoIXJvb3QpIHsKKwkJZGJnKCIlczogY291bGQgbm90IGdldCByb290IGRlbnRyeSEiLF9fRlVOQ1RJT05fXyk7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2ItPnNfcm9vdCA9IHJvb3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICogZ2V0X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCit7ICAgICAgICAgICAgICAgCisJc3RydWN0IHFzdHIgcXN0cjsKKworCXFzdHIubmFtZSA9IG5hbWU7CisJcXN0ci5sZW4gPSBzdHJsZW4obmFtZSk7CisJcXN0ci5oYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSxxc3RyLmxlbik7CisJcmV0dXJuIGxvb2t1cF9oYXNoKCZxc3RyLHBhcmVudCk7Cit9ICAgICAgICAgICAgICAgCisKKworLyoKKyAqIGZzX2NyZWF0ZV9ieV9uYW1lIC0gY3JlYXRlIGEgZmlsZSwgZ2l2ZW4gYSBuYW1lCisgKiBAbmFtZToJbmFtZSBvZiBmaWxlCisgKiBAbW9kZToJdHlwZSBvZiBmaWxlCisgKiBAcGFyZW50OglkZW50cnkgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBpdCBpbgorICogQGRlbnRyeToJcmVzdWx0aW5nIGRlbnRyeSBvZiBmaWxlCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGJvdGggcmVndWxhciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisgKi8KK3N0YXRpYyBpbnQgZnNfY3JlYXRlX2J5X25hbWUgKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5KQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBJZiB0aGUgcGFyZW50IGlzIG5vdCBzcGVjaWZpZWQsIHdlIGNyZWF0ZSBpdCBpbiB0aGUgcm9vdC4KKwkgKiBXZSBuZWVkIHRoZSByb290IGRlbnRyeSB0byBkbyB0aGlzLCB3aGljaCBpcyBpbiB0aGUgc3VwZXIgCisJICogYmxvY2suIEEgcG9pbnRlciB0byB0aGF0IGlzIGluIHRoZSBzdHJ1Y3QgdmZzbW91bnQgdGhhdCB3ZQorCSAqIGhhdmUgYXJvdW5kLgorCSAqLworCWlmICghcGFyZW50ICkgeworCQlpZiAodXNiZnNfbW91bnQgJiYgdXNiZnNfbW91bnQtPm1udF9zYikgeworCQkJcGFyZW50ID0gdXNiZnNfbW91bnQtPm1udF9zYi0+c19yb290OworCQl9CisJfQorCisJaWYgKCFwYXJlbnQpIHsKKwkJZGJnKCJBaCEgY2FuIG5vdCBmaW5kIGEgcGFyZW50ISIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkqZGVudHJ5ID0gTlVMTDsKKwlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwkqZGVudHJ5ID0gZ2V0X2RlbnRyeSAocGFyZW50LCBuYW1lKTsKKwlpZiAoIUlTX0VSUihkZW50cnkpKSB7CisJCWlmICgobW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKwkJCWVycm9yID0gdXNiZnNfbWtkaXIgKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJCWVsc2UgCisJCQllcnJvciA9IHVzYmZzX2NyZWF0ZSAocGFyZW50LT5kX2lub2RlLCAqZGVudHJ5LCBtb2RlKTsKKwl9IGVsc2UKKwkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CisJdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZnNfY3JlYXRlX2ZpbGUgKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQkJCSAgICAgIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlpbnQgZXJyb3I7CisKKwlkYmcoImNyZWF0aW5nIGZpbGUgJyVzJyIsbmFtZSk7CisKKwllcnJvciA9IGZzX2NyZWF0ZV9ieV9uYW1lIChuYW1lLCBtb2RlLCBwYXJlbnQsICZkZW50cnkpOworCWlmIChlcnJvcikgeworCQlkZW50cnkgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJCWlmIChkYXRhKQorCQkJCWRlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKKwkJCWlmIChmb3BzKQorCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mb3AgPSBmb3BzOworCQkJZGVudHJ5LT5kX2lub2RlLT5pX3VpZCA9IHVpZDsKKwkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9naWQgPSBnaWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gZGVudHJ5OworfQorCitzdGF0aWMgdm9pZCBmc19yZW1vdmVfZmlsZSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJCisJaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+ZF9pbm9kZSkKKwkJcmV0dXJuOworCisJZG93bigmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJaWYgKHVzYmZzX3Bvc2l0aXZlKGRlbnRyeSkpIHsKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgeworCQkJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkJCXVzYmZzX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJCWVsc2UKKwkJCQl1c2Jmc191bmxpbmsocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOworCQlkcHV0KGRlbnRyeSk7CisJCX0KKwl9CisJdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqdXNiX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQoreworCXJldHVybiBnZXRfc2Jfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCB1c2Jmc19maWxsX3N1cGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVzYl9mc190eXBlID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JmcyIsCisJLmdldF9zYiA9CXVzYl9nZXRfc2IsCisJLmtpbGxfc2IgPQlraWxsX2xpdHRlcl9zdXBlciwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGNyZWF0ZV9zcGVjaWFsX2ZpbGVzICh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwlpbnQgcmV0dmFsOworCisJLyogdGhlIHNpbXBsZV9waW5fZnMgY2FsbHMgd2lsbCBjYWxsIHJlbW91bnQgd2l0aCBubyBvcHRpb25zCisJICogd2l0aG91dCB0aGlzIGZsYWcgdGhhdCB3b3VsZCBvdmVyd3JpdGUgdGhlIHJlYWwgbW91bnQgb3B0aW9ucyAoaWYgYW55KQorCSAqLworCWlnbm9yZV9tb3VudCA9IDE7CisKKwkvKiBjcmVhdGUgdGhlIGRldmljZXMgc3BlY2lhbCBmaWxlICovCisJcmV0dmFsID0gc2ltcGxlX3Bpbl9mcygidXNiZnMiLCAmdXNiZnNfbW91bnQsICZ1c2Jmc19tb3VudF9jb3VudCk7CisJaWYgKHJldHZhbCkgeworCQllcnIgKCJVbmFibGUgdG8gZ2V0IHVzYmZzIG1vdW50Iik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZ25vcmVfbW91bnQgPSAwOworCisJcGFyZW50ID0gdXNiZnNfbW91bnQtPm1udF9zYi0+c19yb290OworCWRldmljZXNfdXNiZnNfZGVudHJ5ID0gZnNfY3JlYXRlX2ZpbGUgKCJkZXZpY2VzIiwKKwkJCQkJICAgICAgIGxpc3Rtb2RlIHwgU19JRlJFRywgcGFyZW50LAorCQkJCQkgICAgICAgTlVMTCwgJnVzYmZzX2RldmljZXNfZm9wcywKKwkJCQkJICAgICAgIGxpc3R1aWQsIGxpc3RnaWQpOworCWlmIChkZXZpY2VzX3VzYmZzX2RlbnRyeSA9PSBOVUxMKSB7CisJCWVyciAoIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfY2xlYW5fbW91bnRzOworCX0KKworCWdvdG8gZXhpdDsKKwkKK2Vycm9yX2NsZWFuX21vdW50czoKKwlzaW1wbGVfcmVsZWFzZV9mcygmdXNiZnNfbW91bnQsICZ1c2Jmc19tb3VudF9jb3VudCk7CitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zcGVjaWFsX2ZpbGVzICh2b2lkKQoreworCWlmIChkZXZpY2VzX3VzYmZzX2RlbnRyeSkKKwkJZnNfcmVtb3ZlX2ZpbGUgKGRldmljZXNfdXNiZnNfZGVudHJ5KTsKKwlkZXZpY2VzX3VzYmZzX2RlbnRyeSA9IE5VTEw7CisJc2ltcGxlX3JlbGVhc2VfZnMoJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOworfQorCit2b2lkIHVzYmZzX3VwZGF0ZV9zcGVjaWFsICh2b2lkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkpIHsKKwkJaW5vZGUgPSBkZXZpY2VzX3VzYmZzX2RlbnRyeS0+ZF9pbm9kZTsKKwkJaWYgKGlub2RlKQorCQkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCX0KK30KKwordm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCWNoYXIgbmFtZVs4XTsKKwlpbnQgcmV0dmFsOworCisJLyogY3JlYXRlIHRoZSBzcGVjaWFsIGZpbGVzIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGJ1cyBhZGRlZCAqLworCWlmIChudW1fYnVzZXMgPT0gMCkgeworCQlyZXR2YWwgPSBjcmVhdGVfc3BlY2lhbF9maWxlcygpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuOworCX0KKwkrK251bV9idXNlczsKKworCXNwcmludGYgKG5hbWUsICIlMDNkIiwgYnVzLT5idXNudW0pOworCisJcGFyZW50ID0gdXNiZnNfbW91bnQtPm1udF9zYi0+c19yb290OworCWJ1cy0+dXNiZnNfZGVudHJ5ID0gZnNfY3JlYXRlX2ZpbGUgKG5hbWUsIGJ1c21vZGUgfCBTX0lGRElSLCBwYXJlbnQsCisJCQkJCSAgICBidXMsIE5VTEwsIGJ1c3VpZCwgYnVzZ2lkKTsKKwlpZiAoYnVzLT51c2Jmc19kZW50cnkgPT0gTlVMTCkgeworCQllcnIgKCJlcnJvciBjcmVhdGluZyB1c2JmcyBidXMgZW50cnkiKTsKKwkJcmV0dXJuOworCX0KKworCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CisJdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7Cit9CisKK3ZvaWQgdXNiZnNfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCWlmIChidXMtPnVzYmZzX2RlbnRyeSkgeworCQlmc19yZW1vdmVfZmlsZSAoYnVzLT51c2Jmc19kZW50cnkpOworCQlidXMtPnVzYmZzX2RlbnRyeSA9IE5VTEw7CisJfQorCisJLS1udW1fYnVzZXM7CisJaWYgKG51bV9idXNlcyA8PSAwKSB7CisJCXJlbW92ZV9zcGVjaWFsX2ZpbGVzKCk7CisJCW51bV9idXNlcyA9IDA7CisJfQorCisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl1c2Jmc19jb25uX2Rpc2NfZXZlbnQoKTsKK30KKwordm9pZCB1c2Jmc19hZGRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJY2hhciBuYW1lWzhdOworCWludCBpOworCWludCBpX3NpemU7CisKKwlzcHJpbnRmIChuYW1lLCAiJTAzZCIsIGRldi0+ZGV2bnVtKTsKKwlkZXYtPnVzYmZzX2RlbnRyeSA9IGZzX2NyZWF0ZV9maWxlIChuYW1lLCBkZXZtb2RlIHwgU19JRlJFRywKKwkJCQkJICAgIGRldi0+YnVzLT51c2Jmc19kZW50cnksIGRldiwKKwkJCQkJICAgICZ1c2Jmc19kZXZpY2VfZmlsZV9vcGVyYXRpb25zLAorCQkJCQkgICAgZGV2dWlkLCBkZXZnaWQpOworCWlmIChkZXYtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7CisJCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeSIpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBkZXZpY2UncyBmaWxlIHRvIGJlCisJICogZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIGRldmljZSBkZXNjcmlwdG9ycy4gKi8KKwlpX3NpemUgPSBzaXplb2YgKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyArK2kpIHsKKwkJc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqY29uZmlnID0KKwkJCShzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopZGV2LT5yYXdkZXNjcmlwdG9yc1tpXTsKKwkJaV9zaXplICs9IGxlMTZfdG9fY3B1KGNvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwl9CisJaWYgKGRldi0+dXNiZnNfZGVudHJ5LT5kX2lub2RlKQorCQlkZXYtPnVzYmZzX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID0gaV9zaXplOworCisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl1c2Jmc19jb25uX2Rpc2NfZXZlbnQoKTsKK30KKwordm9pZCB1c2Jmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqZHM7CisJc3RydWN0IHNpZ2luZm8gc2luZm87CisKKwlpZiAoZGV2LT51c2Jmc19kZW50cnkpIHsKKwkJZnNfcmVtb3ZlX2ZpbGUgKGRldi0+dXNiZnNfZGVudHJ5KTsKKwkJZGV2LT51c2Jmc19kZW50cnkgPSBOVUxMOworCX0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+ZmlsZWxpc3QpKSB7CisJCWRzID0gbGlzdF9lbnRyeShkZXYtPmZpbGVsaXN0Lm5leHQsIHN0cnVjdCBkZXZfc3RhdGUsIGxpc3QpOworCQl3YWtlX3VwX2FsbCgmZHMtPndhaXQpOworCQlsaXN0X2RlbF9pbml0KCZkcy0+bGlzdCk7CisJCWlmIChkcy0+ZGlzY3NpZ25yKSB7CisJCQlzaW5mby5zaV9zaWdubyA9IFNJR1BJUEU7CisJCQlzaW5mby5zaV9lcnJubyA9IEVQSVBFOworCQkJc2luZm8uc2lfY29kZSA9IFNJX0FTWU5DSU87CisJCQlzaW5mby5zaV9hZGRyID0gZHMtPmRpc2Njb250ZXh0OworCQkJc2VuZF9zaWdfaW5mbyhkcy0+ZGlzY3NpZ25yLCAmc2luZm8sIGRzLT5kaXNjdGFzayk7CisJCX0KKwl9CisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl1c2Jmc19jb25uX2Rpc2NfZXZlbnQoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnVzYmRpciA9IE5VTEw7CisKK2ludCBfX2luaXQgdXNiZnNfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYmZzX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnVzYl9mc190eXBlKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9kZXJlZ2lzdGVyKCZ1c2Jmc19kcml2ZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIGNyZWF0ZSBtb3VudCBwb2ludCBmb3IgdXNiZnMgKi8KKwl1c2JkaXIgPSBwcm9jX21rZGlyKCJ1c2IiLCBwcm9jX2J1cyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2Jmc19jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYmZzX2RyaXZlcik7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ1c2JfZnNfdHlwZSk7CisJaWYgKHVzYmRpcikKKwkJcmVtb3ZlX3Byb2NfZW50cnkoInVzYiIsIHByb2NfYnVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJkYjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTAsMCArMSwxNDgwIEBACisvKgorICogbWVzc2FnZS5jIC0gc3luY2hyb25vdXMgbWVzc2FnZSBoYW5kbGluZworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JLyogZm9yIHNjYXR0ZXJsaXN0IG1hY3JvcyAqLworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAiaGNkLmgiCS8qIGZvciB1c2Jjb3JlIGludGVybmFscyAqLworI2luY2x1ZGUgInVzYi5oIgorCitzdGF0aWMgdm9pZCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKil1cmItPmNvbnRleHQpOworfQorCisKK3N0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVyYgkqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKKworCXVzYl91bmxpbmtfdXJiKHVyYik7Cit9CisKKy8vIFN0YXJ0cyB1cmIgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIG9yIHRpbWVvdXQKKy8vIG5vdGUgdGhhdCB0aGlzIGNhbGwgaXMgTk9UIGludGVycnVwdGlibGUsIHdoaWxlCisvLyBtYW55IGRldmljZSBkcml2ZXIgaS9vIHJlcXVlc3RzIHNob3VsZCBiZSBpbnRlcnJ1cHRpYmxlCitzdGF0aWMgaW50IHVzYl9zdGFydF93YWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCB0aW1lb3V0LCBpbnQqIGFjdHVhbF9sZW5ndGgpCit7IAorCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJaW50CQkJc3RhdHVzOworCisJaW5pdF9jb21wbGV0aW9uKCZkb25lKTsgCQorCXVyYi0+Y29udGV4dCA9ICZkb25lOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmICh0aW1lb3V0ID4gMCkgeworCQkJaW5pdF90aW1lcigmdGltZXIpOworCQkJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQkJdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwkJCXRpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOworCQkJLyogZ3JyLiAgdGltZW91dCBfc2hvdWxkXyBpbmNsdWRlIHN1Ym1pdCBkZWxheXMuICovCisJCQlhZGRfdGltZXIoJnRpbWVyKTsKKwkJfQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKwkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJCS8qIG5vdGU6ICBIQ0RzIHJldHVybiBFVElNRURPVVQgZm9yIG90aGVyIHJlYXNvbnMgdG9vICovCisJCWlmIChzdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKwkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCisJCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSVkLyVkXG4iLAorCQkJCWN1cnJlbnQtPmNvbW0sCisJCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQkJKTsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQorCQkJCXN0YXR1cyA9IDA7CisJCQllbHNlCisJCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJfQorCQlpZiAodGltZW91dCA+IDApCisJCQlkZWxfdGltZXJfc3luYygmdGltZXIpOworCX0KKworCWlmIChhY3R1YWxfbGVuZ3RoKQorCQkqYWN0dWFsX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy8gcmV0dXJucyBzdGF0dXMgKG5lZ2F0aXZlKSBvciBsZW5ndGggKHBvc2l0aXZlKQorc3RhdGljIGludCB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBwaXBlLCAKKwkJCQkgICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kLAorCQkJCSAgICB2b2lkICpkYXRhLCBpbnQgbGVuLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJldHY7CisJaW50IGxlbmd0aDsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX05PSU8pOworCWlmICghdXJiKQorCQlyZXR1cm4gLUVOT01FTTsKKyAgCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCB1c2JfZGV2LCBwaXBlLCAodW5zaWduZWQgY2hhciAqKWNtZCwgZGF0YSwKKwkJCSAgICAgbGVuLCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOworCisJcmV0diA9IHVzYl9zdGFydF93YWl0X3VyYih1cmIsIHRpbWVvdXQsICZsZW5ndGgpOworCWlmIChyZXR2IDwgMCkKKwkJcmV0dXJuIHJldHY7CisJZWxzZQorCQlyZXR1cm4gbGVuZ3RoOworfQorCisvKioKKyAqCXVzYl9jb250cm9sX21zZyAtIEJ1aWxkcyBhIGNvbnRyb2wgdXJiLCBzZW5kcyBpdCBvZmYgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uCisgKglAZGV2OiBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqCUBwaXBlOiBlbmRwb2ludCAicGlwZSIgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworICoJQHJlcXVlc3Q6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUKKyAqCUByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlCisgKglAdmFsdWU6IFVTQiBtZXNzYWdlIHZhbHVlCisgKglAaW5kZXg6IFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlCisgKglAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kCisgKglAc2l6ZTogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQKKyAqCUB0aW1lb3V0OiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZQorICoJCXRpbWluZyBvdXQgKGlmIDAgdGhlIHdhaXQgaXMgZm9yZXZlcikKKyAqCUNvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludAorICoJYW5kIHdhaXRzIGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSwgb3IgdGltZW91dC4KKyAqCQorICoJSWYgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKgorICoJRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGxpa2UgYQorICoJYm90dG9tIGhhbGYgaGFuZGxlci4gIElmIHlvdSBuZWVkIGFuIGFzeW5jaHJvbm91cyBtZXNzYWdlLCBvciBuZWVkIHRvIHNlbmQKKyAqCWEgbWVzc2FnZSBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dCwgdXNlIHVzYl9zdWJtaXRfdXJiKCkKKyAqICAgICAgSWYgYSB0aHJlYWQgaW4geW91ciBkcml2ZXIgdXNlcyB0aGlzIGNhbGwsIG1ha2Ugc3VyZSB5b3VyIGRpc2Nvbm5lY3QoKQorICogICAgICBtZXRob2QgY2FuIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgU2luY2UgeW91IGRvbid0IGhhdmUgYSBoYW5kbGUgb24KKyAqICAgICAgdGhlIFVSQiB1c2VkLCB5b3UgY2FuJ3QgY2FuY2VsIHRoZSByZXF1ZXN0LgorICovCitpbnQgdXNiX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsIF9fdTggcmVxdWVzdHR5cGUsCisJCQkgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLCBfX3UxNiBzaXplLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfTk9JTyk7CisJaW50IHJldDsKKwkKKwlpZiAoIWRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRyLT5iUmVxdWVzdFR5cGU9IHJlcXVlc3R0eXBlOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2cCgmdmFsdWUpOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNnAoJmluZGV4KTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2cCgmc2l6ZSk7CisKKwkvL2RiZygidXNiX2NvbnRyb2xfbXNnIik7CQorCisJcmV0ID0gdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKGRldiwgcGlwZSwgZHIsIGRhdGEsIHNpemUsIHRpbWVvdXQpOworCisJa2ZyZWUoZHIpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqCXVzYl9idWxrX21zZyAtIEJ1aWxkcyBhIGJ1bGsgdXJiLCBzZW5kcyBpdCBvZmYgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uCisgKglAdXNiX2RldjogcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKglAcGlwZTogZW5kcG9pbnQgInBpcGUiIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqCUBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQKKyAqCUBsZW46IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kCisgKglAYWN0dWFsX2xlbmd0aDogcG9pbnRlciB0byBhIGxvY2F0aW9uIHRvIHB1dCB0aGUgYWN0dWFsIGxlbmd0aCB0cmFuc2ZlcnJlZCBpbiBieXRlcworICoJQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlCisgKgkJdGltaW5nIG91dCAoaWYgMCB0aGUgd2FpdCBpcyBmb3JldmVyKQorICoJQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICoKKyAqCVRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgYnVsayBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50CisgKglhbmQgd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LgorICoJCisgKglJZiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIDAsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCVRoZSBudW1iZXIgb2YgYWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIHdpbGwgYmUgc3RvcmVkIGluIHRoZSAKKyAqCWFjdHVhbF9sZW5ndGggcGFyYW1hdGVyLgorICoKKyAqCURvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LCBsaWtlIGEKKyAqCWJvdHRvbSBoYWxmIGhhbmRsZXIuICBJZiB5b3UgbmVlZCBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSwgb3IgbmVlZCB0bworICoJc2VuZCBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQsIHVzZSB1c2Jfc3VibWl0X3VyYigpCisgKiAgICAgIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLCBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkKKyAqICAgICAgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIFNpbmNlIHlvdSBkb24ndCBoYXZlIGEgaGFuZGxlIG9uCisgKiAgICAgIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqLworaW50IHVzYl9idWxrX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdW5zaWduZWQgaW50IHBpcGUsIAorCQkJdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50ICphY3R1YWxfbGVuZ3RoLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1cmI9dXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCSAgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKworCXJldHVybiB1c2Jfc3RhcnRfd2FpdF91cmIodXJiLCB0aW1lb3V0LCBhY3R1YWxfbGVuZ3RoKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgc2dfY2xlYW4gKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8pCit7CisJaWYgKGlvLT51cmJzKSB7CisJCXdoaWxlIChpby0+ZW50cmllcy0tKQorCQkJdXNiX2ZyZWVfdXJiIChpby0+dXJicyBbaW8tPmVudHJpZXNdKTsKKwkJa2ZyZWUgKGlvLT51cmJzKTsKKwkJaW8tPnVyYnMgPSBOVUxMOworCX0KKwlpZiAoaW8tPmRldi0+ZGV2LmRtYV9tYXNrICE9IE5VTEwpCisJCXVzYl9idWZmZXJfdW5tYXBfc2cgKGlvLT5kZXYsIGlvLT5waXBlLCBpby0+c2csIGlvLT5uZW50cyk7CisJaW8tPmRldiA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNnX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2dfcmVxdWVzdAkqaW8gPSAoc3RydWN0IHVzYl9zZ19yZXF1ZXN0ICopIHVyYi0+Y29udGV4dDsKKworCXNwaW5fbG9jayAoJmlvLT5sb2NrKTsKKworCS8qIEluIDIuNSB3ZSByZXF1aXJlIGhjZHMnIGVuZHBvaW50IHF1ZXVlcyBub3QgdG8gcHJvZ3Jlc3MgYWZ0ZXIgZmF1bHQKKwkgKiByZXBvcnRzLCB1bnRpbCB0aGUgY29tcGxldGlvbiBjYWxsYmFjayAodGhpcyEpIHJldHVybnMuICBUaGF0IGxldHMKKwkgKiBkZXZpY2UgZHJpdmVyIGNvZGUgKGxpa2UgdGhpcyByb3V0aW5lKSB1bmxpbmsgcXVldWVkIHVyYnMgZmlyc3QsCisJICogaWYgaXQgbmVlZHMgdG8sIHNpbmNlIHRoZSBIQyB3b24ndCB3b3JrIG9uIHRoZW0gYXQgYWxsLiAgU28gaXQncworCSAqIG5vdCBwb3NzaWJsZSBmb3IgcGFnZSBOKzEgdG8gb3ZlcndyaXRlIHBhZ2UgTiwgYW5kIHNvIG9uLgorCSAqCisJICogVGhhdCdzIG9ubHkgZm9yICJoYXJkIiBmYXVsdHM7ICJzb2Z0IiBmYXVsdHMgKHVubGlua3MpIHNvbWV0aW1lcworCSAqIGNvbXBsZXRlIGJlZm9yZSB0aGUgSENEIGNhbiBnZXQgcmVxdWVzdHMgYXdheSBmcm9tIGhhcmR3YXJlLAorCSAqIHRob3VnaCBuZXZlciBkdXJpbmcgY2xlYW51cCBhZnRlciBhIGhhcmQgZmF1bHQuCisJICovCisJaWYgKGlvLT5zdGF0dXMKKwkJCSYmIChpby0+c3RhdHVzICE9IC1FQ09OTlJFU0VUCisJCQkJfHwgdXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCQkmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZGV2X2VyciAoaW8tPmRldi0+YnVzLT5jb250cm9sbGVyLAorCQkJImRldiAlcyBlcCVkJXMgc2NhdHRlcmxpc3QgZXJyb3IgJWQvJWRcbiIsCisJCQlpby0+ZGV2LT5kZXZwYXRoLAorCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl1cmItPnN0YXR1cywgaW8tPnN0YXR1cyk7CisJCS8vIEJVRyAoKTsKKwl9CisKKwlpZiAoaW8tPnN0YXR1cyA9PSAwICYmIHVyYi0+c3RhdHVzICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKSB7CisJCWludAkJaSwgZm91bmQsIHN0YXR1czsKKworCQlpby0+c3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkJLyogdGhlIHByZXZpb3VzIHVyYnMsIGFuZCB0aGlzIG9uZSwgY29tcGxldGVkIGFscmVhZHkuCisJCSAqIHVubGluayBwZW5kaW5nIHVyYnMgc28gdGhleSB3b24ndCByeC90eCBiYWQgZGF0YS4KKwkJICogY2FyZWZ1bDogdW5saW5rIGNhbiBzb21ldGltZXMgYmUgc3luY2hyb25vdXMuLi4KKwkJICovCisJCXNwaW5fdW5sb2NrICgmaW8tPmxvY2spOworCQlmb3IgKGkgPSAwLCBmb3VuZCA9IDA7IGkgPCBpby0+ZW50cmllczsgaSsrKSB7CisJCQlpZiAoIWlvLT51cmJzIFtpXSB8fCAhaW8tPnVyYnMgW2ldLT5kZXYpCisJCQkJY29udGludWU7CisJCQlpZiAoZm91bmQpIHsKKwkJCQlzdGF0dXMgPSB1c2JfdW5saW5rX3VyYiAoaW8tPnVyYnMgW2ldKTsKKwkJCQlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJiBzdGF0dXMgIT0gLUVCVVNZKQorCQkJCQlkZXZfZXJyICgmaW8tPmRldi0+ZGV2LAorCQkJCQkJIiVzLCB1bmxpbmsgLS0+ICVkXG4iLAorCQkJCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJfSBlbHNlIGlmICh1cmIgPT0gaW8tPnVyYnMgW2ldKQorCQkJCWZvdW5kID0gMTsKKwkJfQorCQlzcGluX2xvY2sgKCZpby0+bG9jayk7CisJfQorCXVyYi0+ZGV2ID0gTlVMTDsKKworCS8qIG9uIHRoZSBsYXN0IGNvbXBsZXRpb24sIHNpZ25hbCB1c2Jfc2dfd2FpdCgpICovCisJaW8tPmJ5dGVzICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpby0+Y291bnQtLTsKKwlpZiAoIWlvLT5jb3VudCkKKwkJY29tcGxldGUgKCZpby0+Y29tcGxldGUpOworCisJc3Bpbl91bmxvY2sgKCZpby0+bG9jayk7Cit9CisKKworLyoqCisgKiB1c2Jfc2dfaW5pdCAtIGluaXRpYWxpemVzIHNjYXR0ZXJsaXN0LWJhc2VkIGJ1bGsvaW50ZXJydXB0IEkvTyByZXF1ZXN0CisgKiBAaW86IHJlcXVlc3QgYmxvY2sgYmVpbmcgaW5pdGlhbGl6ZWQuICB1bnRpbCB1c2Jfc2dfd2FpdCgpIHJldHVybnMsCisgKgl0cmVhdCB0aGlzIGFzIGEgcG9pbnRlciB0byBhbiBvcGFxdWUgYmxvY2sgb2YgbWVtb3J5LAorICogQGRldjogdGhlIHVzYiBkZXZpY2UgdGhhdCB3aWxsIHNlbmQgb3IgcmVjZWl2ZSB0aGUgZGF0YQorICogQHBpcGU6IGVuZHBvaW50ICJwaXBlIiB1c2VkIHRvIHRyYW5zZmVyIHRoZSBkYXRhCisgKiBAcGVyaW9kOiBwb2xsaW5nIHJhdGUgZm9yIGludGVycnVwdCBlbmRwb2ludHMsIGluIGZyYW1lcyBvcgorICogCShmb3IgaGlnaCBzcGVlZCBlbmRwb2ludHMpIG1pY3JvZnJhbWVzOyBpZ25vcmVkIGZvciBidWxrCisgKiBAc2c6IHNjYXR0ZXJsaXN0IGVudHJpZXMKKyAqIEBuZW50czogaG93IG1hbnkgZW50cmllcyBpbiB0aGUgc2NhdHRlcmxpc3QKKyAqIEBsZW5ndGg6IGhvdyBtYW55IGJ5dGVzIHRvIHNlbmQgZnJvbSB0aGUgc2NhdHRlcmxpc3QsIG9yIHplcm8gdG8KKyAqIAlzZW5kIGV2ZXJ5IGJ5dGUgaWRlbnRpZmllZCBpbiB0aGUgbGlzdC4KKyAqIEBtZW1fZmxhZ3M6IFNMQUJfKiBmbGFncyBhZmZlY3RpbmcgbWVtb3J5IGFsbG9jYXRpb25zIGluIHRoaXMgY2FsbAorICoKKyAqIFJldHVybnMgemVybyBmb3Igc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhpcyBpbml0aWFsaXplcyBhCisgKiBzY2F0dGVyL2dhdGhlciByZXF1ZXN0LCBhbGxvY2F0aW5nIHJlc291cmNlcyBzdWNoIGFzIEkvTyBtYXBwaW5ncyBhbmQgdXJiCisgKiBtZW1vcnkgKGV4Y2VwdCBtYXliZSBtZW1vcnkgdXNlZCBieSBVU0IgY29udHJvbGxlciBkcml2ZXJzKS4KKyAqCisgKiBUaGUgcmVxdWVzdCBtdXN0IGJlIGlzc3VlZCB1c2luZyB1c2Jfc2dfd2FpdCgpLCB3aGljaCB3YWl0cyBmb3IgdGhlIEkvTyB0bworICogY29tcGxldGUgKG9yIHRvIGJlIGNhbmNlbGVkKSBhbmQgdGhlbiBjbGVhbnMgdXAgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkKKyAqIHVzYl9zZ19pbml0KCkuCisgKgorICogVGhlIHJlcXVlc3QgbWF5IGJlIGNhbmNlbGVkIHdpdGggdXNiX3NnX2NhbmNlbCgpLCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyCisgKiB1c2Jfc2dfd2FpdCgpIGlzIGNhbGxlZC4KKyAqLworaW50IHVzYl9zZ19pbml0ICgKKwlzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QJKmlvLAorCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXYsCisJdW5zaWduZWQJCXBpcGUsIAorCXVuc2lnbmVkCQlwZXJpb2QsCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZywKKwlpbnQJCQluZW50cywKKwlzaXplX3QJCQlsZW5ndGgsCisJaW50CQkJbWVtX2ZsYWdzCispCit7CisJaW50CQkJaTsKKwlpbnQJCQl1cmJfZmxhZ3M7CisJaW50CQkJZG1hOworCisJaWYgKCFpbyB8fCAhZGV2IHx8ICFzZworCQkJfHwgdXNiX3BpcGVjb250cm9sIChwaXBlKQorCQkJfHwgdXNiX3BpcGVpc29jIChwaXBlKQorCQkJfHwgbmVudHMgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaW5pdCAoJmlvLT5sb2NrKTsKKwlpby0+ZGV2ID0gZGV2OworCWlvLT5waXBlID0gcGlwZTsKKwlpby0+c2cgPSBzZzsKKwlpby0+bmVudHMgPSBuZW50czsKKworCS8qIG5vdCBhbGwgaG9zdCBjb250cm9sbGVycyB1c2UgRE1BIChsaWtlIHRoZSBtYWluc3RyZWFtIHBjaSBvbmVzKTsKKwkgKiB0aGV5IGNhbiB1c2UgUElPIChzbDgxMSkgb3IgYmUgc29mdHdhcmUgb3ZlciBhbm90aGVyIHRyYW5zcG9ydC4KKwkgKi8KKwlkbWEgPSAoZGV2LT5kZXYuZG1hX21hc2sgIT0gTlVMTCk7CisJaWYgKGRtYSkKKwkJaW8tPmVudHJpZXMgPSB1c2JfYnVmZmVyX21hcF9zZyAoZGV2LCBwaXBlLCBzZywgbmVudHMpOworCWVsc2UKKwkJaW8tPmVudHJpZXMgPSBuZW50czsKKworCS8qIGluaXRpYWxpemUgYWxsIHRoZSB1cmJzIHdlJ2xsIHVzZSAqLworCWlmIChpby0+ZW50cmllcyA8PSAwKQorCQlyZXR1cm4gaW8tPmVudHJpZXM7CisKKwlpby0+Y291bnQgPSBpby0+ZW50cmllczsKKwlpby0+dXJicyA9IGttYWxsb2MgKGlvLT5lbnRyaWVzICogc2l6ZW9mICppby0+dXJicywgbWVtX2ZsYWdzKTsKKwlpZiAoIWlvLT51cmJzKQorCQlnb3RvIG5vbWVtOworCisJdXJiX2ZsYWdzID0gVVJCX0FTWU5DX1VOTElOSyB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQl8IFVSQl9OT19JTlRFUlJVUFQ7CisJaWYgKHVzYl9waXBlaW4gKHBpcGUpKQorCQl1cmJfZmxhZ3MgfD0gVVJCX1NIT1JUX05PVF9PSzsKKworCWZvciAoaSA9IDA7IGkgPCBpby0+ZW50cmllczsgaSsrKSB7CisJCXVuc2lnbmVkCQlsZW47CisKKwkJaW8tPnVyYnMgW2ldID0gdXNiX2FsbG9jX3VyYiAoMCwgbWVtX2ZsYWdzKTsKKwkJaWYgKCFpby0+dXJicyBbaV0pIHsKKwkJCWlvLT5lbnRyaWVzID0gaTsKKwkJCWdvdG8gbm9tZW07CisJCX0KKworCQlpby0+dXJicyBbaV0tPmRldiA9IE5VTEw7CisJCWlvLT51cmJzIFtpXS0+cGlwZSA9IHBpcGU7CisJCWlvLT51cmJzIFtpXS0+aW50ZXJ2YWwgPSBwZXJpb2Q7CisJCWlvLT51cmJzIFtpXS0+dHJhbnNmZXJfZmxhZ3MgPSB1cmJfZmxhZ3M7CisKKwkJaW8tPnVyYnMgW2ldLT5jb21wbGV0ZSA9IHNnX2NvbXBsZXRlOworCQlpby0+dXJicyBbaV0tPmNvbnRleHQgPSBpbzsKKwkJaW8tPnVyYnMgW2ldLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJCWlvLT51cmJzIFtpXS0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwkJaWYgKGRtYSkgeworCQkJLyogaGMgbWF5IHVzZSBfb25seV8gdHJhbnNmZXJfZG1hICovCisJCQlpby0+dXJicyBbaV0tPnRyYW5zZmVyX2RtYSA9IHNnX2RtYV9hZGRyZXNzIChzZyArIGkpOworCQkJbGVuID0gc2dfZG1hX2xlbiAoc2cgKyBpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGhjIG1heSB1c2UgX29ubHlfIHRyYW5zZmVyX2J1ZmZlciAqLworCQkJaW8tPnVyYnMgW2ldLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCXBhZ2VfYWRkcmVzcyAoc2cgW2ldLnBhZ2UpICsgc2cgW2ldLm9mZnNldDsKKwkJCWxlbiA9IHNnIFtpXS5sZW5ndGg7CisJCX0KKworCQlpZiAobGVuZ3RoKSB7CisJCQlsZW4gPSBtaW5fdCAodW5zaWduZWQsIGxlbiwgbGVuZ3RoKTsKKwkJCWxlbmd0aCAtPSBsZW47CisJCQlpZiAobGVuZ3RoID09IDApCisJCQkJaW8tPmVudHJpZXMgPSBpICsgMTsKKwkJfQorCQlpby0+dXJicyBbaV0tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJfQorCWlvLT51cmJzIFstLWldLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX05PX0lOVEVSUlVQVDsKKworCS8qIHRyYW5zYWN0aW9uIHN0YXRlICovCisJaW8tPnN0YXR1cyA9IDA7CisJaW8tPmJ5dGVzID0gMDsKKwlpbml0X2NvbXBsZXRpb24gKCZpby0+Y29tcGxldGUpOworCXJldHVybiAwOworCitub21lbToKKwlzZ19jbGVhbiAoaW8pOworCXJldHVybiAtRU5PTUVNOworfQorCisKKy8qKgorICogdXNiX3NnX3dhaXQgLSBzeW5jaHJvbm91c2x5IGV4ZWN1dGUgc2NhdHRlci9nYXRoZXIgcmVxdWVzdAorICogQGlvOiByZXF1ZXN0IGJsb2NrIGhhbmRsZSwgYXMgaW5pdGlhbGl6ZWQgd2l0aCB1c2Jfc2dfaW5pdCgpLgorICogCXNvbWUgZmllbGRzIGJlY29tZSBhY2Nlc3NpYmxlIHdoZW4gdGhpcyBjYWxsIHJldHVybnMuCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIHNwZWNpZmllZCBJL08gb3BlcmF0aW9uIGNvbXBsZXRlcy4gIEl0CisgKiBsZXZlcmFnZXMgdGhlIGdyb3VwaW5nIG9mIHRoZSByZWxhdGVkIEkvTyByZXF1ZXN0cyB0byBnZXQgZ29vZCB0cmFuc2ZlcgorICogcmF0ZXMsIGJ5IHF1ZXVlaW5nIHRoZSByZXF1ZXN0cy4gIEF0IGhpZ2hlciBzcGVlZHMsIHN1Y2ggcXVldWluZyBjYW4KKyAqIHNpZ25pZmljYW50bHkgaW1wcm92ZSBVU0IgdGhyb3VnaHB1dC4KKyAqCisgKiBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgY29tcGxldGlvbiBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqICgxKSBzdWNjZXNzLCB3aGVyZSBpby0+c3RhdHVzIGlzIHplcm8uICBUaGUgbnVtYmVyIG9mIGlvLT5ieXRlcworICogICAgIHRyYW5zZmVycmVkIGlzIGFzIHJlcXVlc3RlZC4KKyAqICgyKSBlcnJvciwgd2hlcmUgaW8tPnN0YXR1cyBpcyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIG51bWJlcgorICogICAgIG9mIGlvLT5ieXRlcyB0cmFuc2ZlcnJlZCBiZWZvcmUgdGhlIGVycm9yIGlzIHVzdWFsbHkgbGVzcworICogICAgIHRoYW4gcmVxdWVzdGVkLCBhbmQgY2FuIGJlIG5vbnplcm8uCisgKiAoMykgY2FuY2VsYXRpb24sIGEgdHlwZSBvZiBlcnJvciB3aXRoIHN0YXR1cyAtRUNPTk5SRVNFVCB0aGF0CisgKiAgICAgaXMgaW5pdGlhdGVkIGJ5IHVzYl9zZ19jYW5jZWwoKS4KKyAqCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgdGhyb3VnaCB1c2Jfc2dfaW5pdCgpIG9yCisgKiB0aGlzIGNhbGwgd2lsbCBoYXZlIGJlZW4gZnJlZWQuICBUaGUgcmVxdWVzdCBibG9jayBwYXJhbWV0ZXIgbWF5IHN0aWxsIGJlCisgKiBwYXNzZWQgdG8gdXNiX3NnX2NhbmNlbCgpLCBvciBpdCBtYXkgYmUgZnJlZWQuICBJdCBjb3VsZCBhbHNvIGJlCisgKiByZWluaXRpYWxpemVkIGFuZCB0aGVuIHJldXNlZC4KKyAqCisgKiBEYXRhIFRyYW5zZmVyIFJhdGVzOgorICoKKyAqIEJ1bGsgdHJhbnNmZXJzIGFyZSB2YWxpZCBmb3IgZnVsbCBvciBoaWdoIHNwZWVkIGVuZHBvaW50cy4KKyAqIFRoZSBiZXN0IGZ1bGwgc3BlZWQgZGF0YSByYXRlIGlzIDE5IHBhY2tldHMgb2YgNjQgYnl0ZXMgZWFjaAorICogcGVyIGZyYW1lLCBvciAxMjE2IGJ5dGVzIHBlciBtaWxsaXNlY29uZC4KKyAqIFRoZSBiZXN0IGhpZ2ggc3BlZWQgZGF0YSByYXRlIGlzIDEzIHBhY2tldHMgb2YgNTEyIGJ5dGVzIGVhY2gKKyAqIHBlciBtaWNyb2ZyYW1lLCBvciA1MiBLQnl0ZXMgcGVyIG1pbGxpc2Vjb25kLgorICoKKyAqIFRoZSByZWFzb24gdG8gdXNlIGludGVycnVwdCB0cmFuc2ZlcnMgdGhyb3VnaCB0aGlzIEFQSSB3b3VsZCBtb3N0IGxpa2VseQorICogYmUgdG8gcmVzZXJ2ZSBoaWdoIHNwZWVkIGJhbmR3aWR0aCwgd2hlcmUgdXAgdG8gMjQgS0J5dGVzIHBlciBtaWxsaXNlY29uZAorICogY291bGQgYmUgdHJhbnNmZXJyZWQuICBUaGF0IGNhcGFiaWxpdHkgaXMgbGVzcyB1c2VmdWwgZm9yIGxvdyBvciBmdWxsCisgKiBzcGVlZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLCB3aGljaCBhbGxvdyBhdCBtb3N0IG9uZSBwYWNrZXQgcGVyIG1pbGxpc2Vjb25kLAorICogb2YgYXQgbW9zdCA4IG9yIDY0IGJ5dGVzIChyZXNwZWN0aXZlbHkpLgorICovCit2b2lkIHVzYl9zZ193YWl0IChzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QgKmlvKQoreworCWludAkJaSwgZW50cmllcyA9IGlvLT5lbnRyaWVzOworCisJLyogcXVldWUgdGhlIHVyYnMuICAqLworCXNwaW5fbG9ja19pcnEgKCZpby0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXMgJiYgIWlvLT5zdGF0dXM7IGkrKykgeworCQlpbnQJcmV0dmFsOworCisJCWlvLT51cmJzIFtpXS0+ZGV2ID0gaW8tPmRldjsKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKGlvLT51cmJzIFtpXSwgU0xBQl9BVE9NSUMpOworCisJCS8qIGFmdGVyIHdlIHN1Ym1pdCwgbGV0IGNvbXBsZXRpb25zIG9yIGNhbmNlbGF0aW9ucyBmaXJlOworCQkgKiB3ZSBoYW5kc2hha2UgdXNpbmcgaW8tPnN0YXR1cy4KKwkJICovCisJCXNwaW5fdW5sb2NrX2lycSAoJmlvLT5sb2NrKTsKKwkJc3dpdGNoIChyZXR2YWwpIHsKKwkJCS8qIG1heWJlIHdlIHJldHJ5aW5nIHdpbGwgcmVjb3ZlciAqLworCQljYXNlIC1FTlhJTzoJLy8gaGMgZGlkbid0IHF1ZXVlIHRoaXMgb25lCisJCWNhc2UgLUVBR0FJTjoKKwkJY2FzZSAtRU5PTUVNOgorCQkJaW8tPnVyYnNbaV0tPmRldiA9IE5VTEw7CisJCQlyZXR2YWwgPSAwOworCQkJaS0tOworCQkJeWllbGQgKCk7CisJCQlicmVhazsKKworCQkJLyogbm8gZXJyb3I/IGNvbnRpbnVlIGltbWVkaWF0ZWx5LgorCQkJICoKKwkJCSAqIE5PVEU6IHRvIHdvcmsgYmV0dGVyIHdpdGggVUhDSSAoNEsgSS9PIGJ1ZmZlciBtYXkKKwkJCSAqIG5lZWQgM0sgb2YgVERzKSBpdCBtYXkgYmUgZ29vZCB0byBsaW1pdCBob3cgbWFueQorCQkJICogVVJCcyBhcmUgcXVldWVkIGF0IG9uY2U7IE4gbWlsbGlzZWNvbmRzPworCQkJICovCisJCWNhc2UgMDoKKwkJCWNwdV9yZWxheCAoKTsKKwkJCWJyZWFrOworCisJCQkvKiBmYWlsIGFueSB1bmNvbXBsZXRlZCB1cmJzICovCisJCWRlZmF1bHQ6CisJCQlpby0+dXJicyBbaV0tPmRldiA9IE5VTEw7CisJCQlpby0+dXJicyBbaV0tPnN0YXR1cyA9IHJldHZhbDsKKwkJCWRldl9kYmcgKCZpby0+ZGV2LT5kZXYsICIlcywgc3VibWl0IC0tPiAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQl1c2Jfc2dfY2FuY2VsIChpbyk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycSAoJmlvLT5sb2NrKTsKKwkJaWYgKHJldHZhbCAmJiAoaW8tPnN0YXR1cyA9PSAwIHx8IGlvLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpKQorCQkJaW8tPnN0YXR1cyA9IHJldHZhbDsKKwl9CisJaW8tPmNvdW50IC09IGVudHJpZXMgLSBpOworCWlmIChpby0+Y291bnQgPT0gMCkKKwkJY29tcGxldGUgKCZpby0+Y29tcGxldGUpOworCXNwaW5fdW5sb2NrX2lycSAoJmlvLT5sb2NrKTsKKworCS8qIE9LLCB5ZXMsIHRoaXMgY291bGQgYmUgcGFja2FnZWQgYXMgbm9uLWJsb2NraW5nLgorCSAqIFNvIGNvdWxkIHRoZSBzdWJtaXQgbG9vcCBhYm92ZSAuLi4gYnV0IGl0J3MgZWFzaWVyIHRvCisJICogc29sdmUgbmVpdGhlciBwcm9ibGVtIHRoYW4gdG8gc29sdmUgYm90aCEKKwkgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uICgmaW8tPmNvbXBsZXRlKTsKKworCXNnX2NsZWFuIChpbyk7Cit9CisKKy8qKgorICogdXNiX3NnX2NhbmNlbCAtIHN0b3Agc2NhdHRlci9nYXRoZXIgaS9vIGlzc3VlZCBieSB1c2Jfc2dfd2FpdCgpCisgKiBAaW86IHJlcXVlc3QgYmxvY2ssIGluaXRpYWxpemVkIHdpdGggdXNiX3NnX2luaXQoKQorICoKKyAqIFRoaXMgc3RvcHMgYSByZXF1ZXN0IGFmdGVyIGl0IGhhcyBiZWVuIHN0YXJ0ZWQgYnkgdXNiX3NnX3dhaXQoKS4KKyAqIEl0IGNhbiBhbHNvIHByZXZlbnRzIG9uZSBpbml0aWFsaXplZCBieSB1c2Jfc2dfaW5pdCgpIGZyb20gc3RhcnRpbmcsCisgKiBzbyB0aGF0IGNhbGwganVzdCBmcmVlcyByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSByZXF1ZXN0LgorICovCit2b2lkIHVzYl9zZ19jYW5jZWwgKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8pCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaW8tPmxvY2ssIGZsYWdzKTsKKworCS8qIHNodXQgZXZlcnl0aGluZyBkb3duLCBpZiBpdCBkaWRuJ3QgYWxyZWFkeSAqLworCWlmICghaW8tPnN0YXR1cykgeworCQlpbnQJaTsKKworCQlpby0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCXNwaW5fdW5sb2NrICgmaW8tPmxvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgaW8tPmVudHJpZXM7IGkrKykgeworCQkJaW50CXJldHZhbDsKKworCQkJaWYgKCFpby0+dXJicyBbaV0tPmRldikKKwkJCQljb250aW51ZTsKKwkJCXJldHZhbCA9IHVzYl91bmxpbmtfdXJiIChpby0+dXJicyBbaV0pOworCQkJaWYgKHJldHZhbCAhPSAtRUlOUFJPR1JFU1MgJiYgcmV0dmFsICE9IC1FQlVTWSkKKwkJCQlkZXZfd2FybiAoJmlvLT5kZXYtPmRldiwgIiVzLCB1bmxpbmsgLS0+ICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCX0KKwkJc3Bpbl9sb2NrICgmaW8tPmxvY2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaW8tPmxvY2ssIGZsYWdzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfZ2V0X2Rlc2NyaXB0b3IgLSBpc3N1ZXMgYSBnZW5lcmljIEdFVF9ERVNDUklQVE9SIHJlcXVlc3QKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgZGVzY3JpcHRvciBpcyBiZWluZyByZXRyaWV2ZWQKKyAqIEB0eXBlOiB0aGUgZGVzY3JpcHRvciB0eXBlIChVU0JfRFRfKikKKyAqIEBpbmRleDogdGhlIG51bWJlciBvZiB0aGUgZGVzY3JpcHRvcgorICogQGJ1Zjogd2hlcmUgdG8gcHV0IHRoZSBkZXNjcmlwdG9yCisgKiBAc2l6ZTogaG93IGJpZyBpcyAiYnVmIj8KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBHZXRzIGEgVVNCIGRlc2NyaXB0b3IuICBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZXhpc3QgdG8gc2ltcGxpZnkKKyAqIGdldHRpbmcgc29tZSB0eXBlcyBvZiBkZXNjcmlwdG9ycy4gIFVzZQorICogdXNiX2dldF9zdHJpbmcoKSBvciB1c2Jfc3RyaW5nKCkgZm9yIFVTQl9EVF9TVFJJTkcuCisgKiBEZXZpY2UgKFVTQl9EVF9ERVZJQ0UpIGFuZCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIChVU0JfRFRfQ09ORklHKQorICogYXJlIHBhcnQgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBJbiBhZGRpdGlvbiB0byBhIG51bWJlciBvZiBVU0Itc3RhbmRhcmQgZGVzY3JpcHRvcnMsIHNvbWUKKyAqIGRldmljZXMgYWxzbyB1c2UgY2xhc3Mtc3BlY2lmaWMgb3IgdmVuZG9yLXNwZWNpZmljIGRlc2NyaXB0b3JzLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUKKyAqIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCisgKi8KK2ludCB1c2JfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBjaGFyIGluZGV4LCB2b2lkICpidWYsIGludCBzaXplKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJCisJbWVtc2V0KGJ1ZiwwLHNpemUpOwkvLyBNYWtlIHN1cmUgd2UgcGFyc2UgcmVhbGx5IHJlY2VpdmVkIGRhdGEKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKKwkJLyogcmV0cnkgb24gbGVuZ3RoIDAgb3Igc3RhbGw7IHNvbWUgZGV2aWNlcyBhcmUgZmxha2V5ICovCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCisJCQkJKHR5cGUgPDwgOCkgKyBpbmRleCwgMCwgYnVmLCBzaXplLAorCQkJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKHJlc3VsdCA9PSAwIHx8IHJlc3VsdCA9PSAtRVBJUEUpCisJCQljb250aW51ZTsKKwkJaWYgKHJlc3VsdCA+IDEgJiYgKCh1OCAqKWJ1ZilbMV0gIT0gdHlwZSkgeworCQkJcmVzdWx0ID0gLUVQUk9UTzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHVzYl9nZXRfc3RyaW5nIC0gZ2V0cyBhIHN0cmluZyBkZXNjcmlwdG9yCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIHN0cmluZyBkZXNjcmlwdG9yIGlzIGJlaW5nIHJldHJpZXZlZAorICogQGxhbmdpZDogY29kZSBmb3IgbGFuZ3VhZ2UgY2hvc2VuIChmcm9tIHN0cmluZyBkZXNjcmlwdG9yIHplcm8pCisgKiBAaW5kZXg6IHRoZSBudW1iZXIgb2YgdGhlIGRlc2NyaXB0b3IKKyAqIEBidWY6IHdoZXJlIHRvIHB1dCB0aGUgc3RyaW5nCisgKiBAc2l6ZTogaG93IGJpZyBpcyAiYnVmIj8KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBSZXRyaWV2ZXMgYSBzdHJpbmcsIGVuY29kZWQgdXNpbmcgVVRGLTE2TEUgKFVuaWNvZGUsIDE2IGJpdHMgcGVyIGNoYXJhY3RlciwKKyAqIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlcikuCisgKiBUaGUgdXNiX3N0cmluZygpIGZ1bmN0aW9uIHdpbGwgb2Z0ZW4gYmUgYSBjb252ZW5pZW50IHdheSB0byB0dXJuCisgKiB0aGVzZSBzdHJpbmdzIGludG8ga2VybmVsLXByaW50YWJsZSBmb3JtLgorICoKKyAqIFN0cmluZ3MgbWF5IGJlIHJlZmVyZW5jZWQgaW4gZGV2aWNlLCBjb25maWd1cmF0aW9uLCBpbnRlcmZhY2UsIG9yIG90aGVyCisgKiBkZXNjcmlwdG9ycywgYW5kIGNvdWxkIGFsc28gYmUgdXNlZCBpbiB2ZW5kb3Itc3BlY2lmaWMgd2F5cy4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlCisgKiByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyB1c2JfY29udHJvbF9tc2coKSBjYWxsLgorICovCitpbnQgdXNiX2dldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgbGFuZ2lkLAorCQl1bnNpZ25lZCBjaGFyIGluZGV4LCB2b2lkICpidWYsIGludCBzaXplKQoreworCWludCBpOworCWludCByZXN1bHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7CisJCS8qIHJldHJ5IG9uIGxlbmd0aCAwIG9yIHN0YWxsOyBzb21lIGRldmljZXMgYXJlIGZsYWtleSAqLworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCisJCQkoVVNCX0RUX1NUUklORyA8PCA4KSArIGluZGV4LCBsYW5naWQsIGJ1Ziwgc2l6ZSwKKwkJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKCEocmVzdWx0ID09IDAgfHwgcmVzdWx0ID09IC1FUElQRSkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdXNiX3RyeV9zdHJpbmdfd29ya2Fyb3VuZHModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgKmxlbmd0aCkKK3sKKwlpbnQgbmV3bGVuZ3RoLCBvbGRsZW5ndGggPSAqbGVuZ3RoOworCisJZm9yIChuZXdsZW5ndGggPSAyOyBuZXdsZW5ndGggKyAxIDwgb2xkbGVuZ3RoOyBuZXdsZW5ndGggKz0gMikKKwkJaWYgKCFpc3ByaW50KGJ1ZltuZXdsZW5ndGhdKSB8fCBidWZbbmV3bGVuZ3RoICsgMV0pCisJCQlicmVhazsKKworCWlmIChuZXdsZW5ndGggPiAyKSB7CisJCWJ1ZlswXSA9IG5ld2xlbmd0aDsKKwkJKmxlbmd0aCA9IG5ld2xlbmd0aDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNiX3N0cmluZ19zdWIoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxhbmdpZCwKKwkJdW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJaW50IHJjOworCisJLyogVHJ5IHRvIHJlYWQgdGhlIHN0cmluZyBkZXNjcmlwdG9yIGJ5IGFza2luZyBmb3IgdGhlIG1heGltdW0KKwkgKiBwb3NzaWJsZSBudW1iZXIgb2YgYnl0ZXMgKi8KKwlyYyA9IHVzYl9nZXRfc3RyaW5nKGRldiwgbGFuZ2lkLCBpbmRleCwgYnVmLCAyNTUpOworCisJLyogSWYgdGhhdCBmYWlsZWQgdHJ5IHRvIHJlYWQgdGhlIGRlc2NyaXB0b3IgbGVuZ3RoLCB0aGVuCisJICogYXNrIGZvciBqdXN0IHRoYXQgbWFueSBieXRlcyAqLworCWlmIChyYyA8IDIpIHsKKwkJcmMgPSB1c2JfZ2V0X3N0cmluZyhkZXYsIGxhbmdpZCwgaW5kZXgsIGJ1ZiwgMik7CisJCWlmIChyYyA9PSAyKQorCQkJcmMgPSB1c2JfZ2V0X3N0cmluZyhkZXYsIGxhbmdpZCwgaW5kZXgsIGJ1ZiwgYnVmWzBdKTsKKwl9CisKKwlpZiAocmMgPj0gMikgeworCQlpZiAoIWJ1ZlswXSAmJiAhYnVmWzFdKQorCQkJdXNiX3RyeV9zdHJpbmdfd29ya2Fyb3VuZHMoYnVmLCAmcmMpOworCisJCS8qIFRoZXJlIG1pZ2h0IGJlIGV4dHJhIGp1bmsgYXQgdGhlIGVuZCBvZiB0aGUgZGVzY3JpcHRvciAqLworCQlpZiAoYnVmWzBdIDwgcmMpCisJCQlyYyA9IGJ1ZlswXTsKKworCQlyYyA9IHJjIC0gKHJjICYgMSk7IC8qIGZvcmNlIGEgbXVsdGlwbGUgb2YgdHdvICovCisJfQorCisJaWYgKHJjIDwgMikKKwkJcmMgPSAocmMgPCAwID8gcmMgOiAtRUlOVkFMKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB1c2Jfc3RyaW5nIC0gcmV0dXJucyBJU08gODg1OS0xIHZlcnNpb24gb2YgYSBzdHJpbmcgZGVzY3JpcHRvcgorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBzdHJpbmcgZGVzY3JpcHRvciBpcyBiZWluZyByZXRyaWV2ZWQKKyAqIEBpbmRleDogdGhlIG51bWJlciBvZiB0aGUgZGVzY3JpcHRvcgorICogQGJ1Zjogd2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcKKyAqIEBzaXplOiBob3cgYmlnIGlzICJidWYiPworICogQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICogCisgKiBUaGlzIGNvbnZlcnRzIHRoZSBVVEYtMTZMRSBlbmNvZGVkIHN0cmluZ3MgcmV0dXJuZWQgYnkgZGV2aWNlcywgZnJvbQorICogdXNiX2dldF9zdHJpbmdfZGVzY3JpcHRvcigpLCB0byBudWxsLXRlcm1pbmF0ZWQgSVNPLTg4NTktMSBlbmNvZGVkIG9uZXMKKyAqIHRoYXQgYXJlIG1vcmUgdXNhYmxlIGluIG1vc3Qga2VybmVsIGNvbnRleHRzLiAgTm90ZSB0aGF0IGFsbCBjaGFyYWN0ZXJzCisgKiBpbiB0aGUgY2hvc2VuIGRlc2NyaXB0b3IgdGhhdCBjYW4ndCBiZSBlbmNvZGVkIHVzaW5nIElTTy04ODU5LTEKKyAqIGFyZSBjb252ZXJ0ZWQgdG8gdGhlIHF1ZXN0aW9uIG1hcmsgKCI/IikgY2hhcmFjdGVyLCBhbmQgdGhpcyBmdW5jdGlvbgorICogY2hvb3NlcyBzdHJpbmdzIGluIHRoZSBmaXJzdCBsYW5ndWFnZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS4KKyAqCisgKiBUaGUgQVNDSUkgKG9yLCByZWR1bmRhbnRseSwgIlVTLUFTQ0lJIikgY2hhcmFjdGVyIHNldCBpcyB0aGUgc2V2ZW4tYml0CisgKiBzdWJzZXQgb2YgSVNPIDg4NTktMS4gSVNPLTg4NTktMSBpcyB0aGUgZWlnaHQtYml0IHN1YnNldCBvZiBVbmljb2RlLAorICogYW5kIGlzIGFwcHJvcHJpYXRlIGZvciB1c2UgbWFueSB1c2VzIG9mIEVuZ2xpc2ggYW5kIHNldmVyYWwgb3RoZXIKKyAqIFdlc3Rlcm4gRXVyb3BlYW4gbGFuZ3VhZ2VzLiAgKEJ1dCBpdCBkb2Vzbid0IGluY2x1ZGUgdGhlICJFdXJvIiBzeW1ib2wuKQorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIGxlbmd0aCBvZiB0aGUgc3RyaW5nICg+PSAwKSBvciB1c2JfY29udHJvbF9tc2cgc3RhdHVzICg8IDApLgorICovCitpbnQgdXNiX3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgY2hhciAqdGJ1ZjsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCB1LCBpZHg7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoc2l6ZSA8PSAwIHx8ICFidWYgfHwgIWluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWZbMF0gPSAwOworCXRidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGdldCBsYW5naWQgZm9yIHN0cmluZ3MgaWYgaXQncyBub3QgeWV0IGtub3duICovCisJaWYgKCFkZXYtPmhhdmVfbGFuZ2lkKSB7CisJCWVyciA9IHVzYl9zdHJpbmdfc3ViKGRldiwgMCwgMCwgdGJ1Zik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyICgmZGV2LT5kZXYsCisJCQkJInN0cmluZyBkZXNjcmlwdG9yIDAgcmVhZCBlcnJvcjogJWRcbiIsCisJCQkJZXJyKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9IGVsc2UgaWYgKGVyciA8IDQpIHsKKwkJCWRldl9lcnIgKCZkZXYtPmRldiwgInN0cmluZyBkZXNjcmlwdG9yIDAgdG9vIHNob3J0XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGVycm91dDsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aGF2ZV9sYW5naWQgPSAtMTsKKwkJCWRldi0+c3RyaW5nX2xhbmdpZCA9IHRidWZbMl0gfCAodGJ1ZlszXTw8IDgpOworCQkJCS8qIGFsd2F5cyB1c2UgdGhlIGZpcnN0IGxhbmdpZCBsaXN0ZWQgKi8KKwkJCWRldl9kYmcgKCZkZXYtPmRldiwgImRlZmF1bHQgbGFuZ3VhZ2UgMHglMDR4XG4iLAorCQkJCWRldi0+c3RyaW5nX2xhbmdpZCk7CisJCX0KKwl9CisJCisJZXJyID0gdXNiX3N0cmluZ19zdWIoZGV2LCBkZXYtPnN0cmluZ19sYW5naWQsIGluZGV4LCB0YnVmKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvdXQ7CisKKwlzaXplLS07CQkvKiBsZWF2ZSByb29tIGZvciB0cmFpbGluZyBOVUxMIGNoYXIgaW4gb3V0cHV0IGJ1ZmZlciAqLworCWZvciAoaWR4ID0gMCwgdSA9IDI7IHUgPCBlcnI7IHUgKz0gMikgeworCQlpZiAoaWR4ID49IHNpemUpCisJCQlicmVhazsKKwkJaWYgKHRidWZbdSsxXSkJCQkvKiBoaWdoIGJ5dGUgKi8KKwkJCWJ1ZltpZHgrK10gPSAnPyc7ICAvKiBub24gSVNPLTg4NTktMSBjaGFyYWN0ZXIgKi8KKwkJZWxzZQorCQkJYnVmW2lkeCsrXSA9IHRidWZbdV07CisJfQorCWJ1ZltpZHhdID0gMDsKKwllcnIgPSBpZHg7CisKKwlpZiAodGJ1ZlsxXSAhPSBVU0JfRFRfU1RSSU5HKQorCQlkZXZfZGJnKCZkZXYtPmRldiwgIndyb25nIGRlc2NyaXB0b3IgdHlwZSAlMDJ4IGZvciBzdHJpbmcgJWQgKFwiJXNcIilcbiIsIHRidWZbMV0sIGluZGV4LCBidWYpOworCisgZXJyb3V0OgorCWtmcmVlKHRidWYpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yIC0gKHJlKXJlYWRzIHRoZSBkZXZpY2UgZGVzY3JpcHRvciAodXNiY29yZSkKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgZGV2aWNlIGRlc2NyaXB0b3IgaXMgYmVpbmcgdXBkYXRlZAorICogQHNpemU6IGhvdyBtdWNoIG9mIHRoZSBkZXNjcmlwdG9yIHRvIHJlYWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBVcGRhdGVzIHRoZSBjb3B5IG9mIHRoZSBkZXZpY2UgZGVzY3JpcHRvciBzdG9yZWQgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUsCisgKiB3aGljaCBkZWRpY2F0ZXMgc3BhY2UgZm9yIHRoaXMgcHVycG9zZS4gIE5vdGUgdGhhdCBzZXZlcmFsIGZpZWxkcyBhcmUKKyAqIGNvbnZlcnRlZCB0byB0aGUgaG9zdCBDUFUncyBieXRlIG9yZGVyOiAgdGhlIFVTQiB2ZXJzaW9uIChiY2RVU0IpLCBhbmQKKyAqIHZlbmRvcnMgcHJvZHVjdCBhbmQgdmVyc2lvbiBmaWVsZHMgKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGFuZCBiY2REZXZpY2UpLgorICogVGhhdCBsZXRzIGRldmljZSBkcml2ZXJzIGNvbXBhcmUgYWdhaW5zdCBub24tYnl0ZXN3YXBwZWQgY29uc3RhbnRzLgorICoKKyAqIE5vdCBleHBvcnRlZCwgb25seSBmb3IgdXNlIGJ5IHRoZSBjb3JlLiAgSWYgZHJpdmVycyByZWFsbHkgd2FudCB0byByZWFkCisgKiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgZGlyZWN0bHksIHRoZXkgY2FuIGNhbGwgdXNiX2dldF9kZXNjcmlwdG9yKCkgd2l0aAorICogdHlwZSA9IFVTQl9EVF9ERVZJQ0UgYW5kIGluZGV4ID0gMC4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlCisgKiByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyB1c2JfY29udHJvbF9tc2coKSBjYWxsLgorICovCitpbnQgdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yICpkZXNjOworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA+IHNpemVvZigqZGVzYykpCisJCXJldHVybiAtRUlOVkFMOworCWRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9OT0lPKTsKKwlpZiAoIWRlc2MpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX0RFVklDRSwgMCwgZGVzYywgc2l6ZSk7CisJaWYgKHJldCA+PSAwKSAKKwkJbWVtY3B5KCZkZXYtPmRlc2NyaXB0b3IsIGRlc2MsIHNpemUpOworCWtmcmVlKGRlc2MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdXNiX2dldF9zdGF0dXMgLSBpc3N1ZXMgYSBHRVRfU1RBVFVTIGNhbGwKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2Ugc3RhdHVzIGlzIGJlaW5nIGNoZWNrZWQKKyAqIEB0eXBlOiBVU0JfUkVDSVBfKjsgZm9yIGRldmljZSwgaW50ZXJmYWNlLCBvciBlbmRwb2ludAorICogQHRhcmdldDogemVybyAoZm9yIGRldmljZSksIGVsc2UgaW50ZXJmYWNlIG9yIGVuZHBvaW50IG51bWJlcgorICogQGRhdGE6IHBvaW50ZXIgdG8gdHdvIGJ5dGVzIG9mIGJpdG1hcCBkYXRhCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogUmV0dXJucyBkZXZpY2UsIGludGVyZmFjZSwgb3IgZW5kcG9pbnQgc3RhdHVzLiAgTm9ybWFsbHkgb25seSBvZgorICogaW50ZXJlc3QgdG8gc2VlIGlmIHRoZSBkZXZpY2UgaXMgc2VsZiBwb3dlcmVkLCBvciBoYXMgZW5hYmxlZCB0aGUKKyAqIHJlbW90ZSB3YWtldXAgZmFjaWxpdHk7IG9yIHdoZXRoZXIgYSBidWxrIG9yIGludGVycnVwdCBlbmRwb2ludAorICogaXMgaGFsdGVkICgic3RhbGxlZCIpLgorICoKKyAqIEJpdHMgaW4gdGhlc2Ugc3RhdHVzIGJpdG1hcHMgYXJlIHNldCB1c2luZyB0aGUgU0VUX0ZFQVRVUkUgcmVxdWVzdCwKKyAqIGFuZCBjbGVhcmVkIHVzaW5nIHRoZSBDTEVBUl9GRUFUVVJFIHJlcXVlc3QuICBUaGUgdXNiX2NsZWFyX2hhbHQoKQorICogZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gY2xlYXIgaGFsdCAoInN0YWxsIikgc3RhdHVzLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUKKyAqIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCisgKi8KK2ludCB1c2JfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgdHlwZSwgaW50IHRhcmdldCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXUxNiAqc3RhdHVzID0ga21hbGxvYyhzaXplb2YoKnN0YXR1cyksIEdGUF9LRVJORUwpOworCisJaWYgKCFzdGF0dXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCVVTQl9SRVFfR0VUX1NUQVRVUywgVVNCX0RJUl9JTiB8IHR5cGUsIDAsIHRhcmdldCwgc3RhdHVzLAorCQlzaXplb2YoKnN0YXR1cyksIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCSoodTE2ICopZGF0YSA9ICpzdGF0dXM7CisJa2ZyZWUoc3RhdHVzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHVzYl9jbGVhcl9oYWx0IC0gdGVsbHMgZGV2aWNlIHRvIGNsZWFyIGVuZHBvaW50IGhhbHQvc3RhbGwgY29uZGl0aW9uCisgKiBAZGV2OiBkZXZpY2Ugd2hvc2UgZW5kcG9pbnQgaXMgaGFsdGVkCisgKiBAcGlwZTogZW5kcG9pbnQgInBpcGUiIGJlaW5nIGNsZWFyZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gY2xlYXIgaGFsdCBjb25kaXRpb25zIGZvciBidWxrIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLAorICogYXMgcmVwb3J0ZWQgYnkgVVJCIGNvbXBsZXRpb24gc3RhdHVzLiAgRW5kcG9pbnRzIHRoYXQgYXJlIGhhbHRlZCBhcmUKKyAqIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBiZWluZyAic3RhbGxlZCIuICBTdWNoIGVuZHBvaW50cyBhcmUgdW5hYmxlCisgKiB0byB0cmFuc21pdCBvciByZWNlaXZlIGRhdGEgdW50aWwgdGhlIGhhbHQgc3RhdHVzIGlzIGNsZWFyZWQuICBBbnkgVVJCcworICogcXVldWVkIGZvciBzdWNoIGFuIGVuZHBvaW50IHNob3VsZCBub3JtYWxseSBiZSB1bmxpbmtlZCBieSB0aGUgZHJpdmVyCisgKiBiZWZvcmUgY2xlYXJpbmcgdGhlIGhhbHQgY29uZGl0aW9uLCBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbnMgNS43LjUKKyAqIGFuZCA1LjguNSBvZiB0aGUgVVNCIDIuMCBzcGVjLgorICoKKyAqIE5vdGUgdGhhdCBjb250cm9sIGFuZCBpc29jaHJvbm91cyBlbmRwb2ludHMgZG9uJ3QgaGFsdCwgYWx0aG91Z2ggY29udHJvbAorICogZW5kcG9pbnRzIHJlcG9ydCAicHJvdG9jb2wgc3RhbGwiIChmb3IgdW5zdXBwb3J0ZWQgcmVxdWVzdHMpIHVzaW5nIHRoZQorICogc2FtZSBzdGF0dXMgY29kZSB1c2VkIHRvIHJlcG9ydCBhIHRydWUgc3RhbGwuCisgKgorICogVGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLCBhbmQgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUKKyAqIHVuZGVybHlpbmcgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbC4KKyAqLworaW50IHVzYl9jbGVhcl9oYWx0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWludCByZXN1bHQ7CisJaW50IGVuZHAgPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCQorCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJZW5kcCB8PSBVU0JfRElSX0lOOworCisJLyogd2UgZG9uJ3QgY2FyZSBpZiBpdCB3YXNuJ3QgaGFsdGVkIGZpcnN0LiBpbiBmYWN0IHNvbWUgZGV2aWNlcworCSAqIChsaWtlIHNvbWUgaWJtY2FtIG1vZGVsIDEgdW5pdHMpIHNlZW0gdG8gZXhwZWN0IGhvc3RzIHRvIG1ha2UKKwkgKiB0aGlzIHJlcXVlc3QgZm9yIGlzbyBlbmRwb2ludHMsIHdoaWNoIGNhbid0IGhhbHQhCisJICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQlVU0JfRU5EUE9JTlRfSEFMVCwgZW5kcCwgTlVMTCwgMCwKKwkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJLyogZG9uJ3QgdW4taGFsdCBvciBmb3JjZSB0byBEQVRBMCBleGNlcHQgb24gc3VjY2VzcyAqLworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTk9URTogIHNlZW1zIGxpa2UgTWljcm9zb2Z0IGFuZCBBcHBsZSBkb24ndCBib3RoZXIgdmVyaWZ5aW5nCisJICogdGhlIGNsZWFyICJ0b29rIiwgc28gc29tZSBkZXZpY2VzIGNvdWxkIGxvY2sgdXAgaWYgeW91IGNoZWNrLi4uCisJICogc3VjaCBhcyB0aGUgSGFnaXdhcmEgRmxhc2hHYXRlIERVQUwuICBTbyB3ZSB3b24ndCBib3RoZXIuCisJICoKKwkgKiBOT1RFOiAgbWFrZSBzdXJlIHRoZSBsb2dpYyBoZXJlIGRvZXNuJ3QgZGl2ZXJnZSBtdWNoIGZyb20KKwkgKiB0aGUgY29weSBpbiB1c2Itc3RvcmFnZSwgZm9yIGFzIGxvbmcgYXMgd2UgbmVlZCB0d28gY29waWVzLgorCSAqLworCisJLyogdG9nZ2xlIHdhcyByZXNldCBieSB0aGUgY2xlYXIgKi8KKwl1c2Jfc2V0dG9nZ2xlKGRldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSwgdXNiX3BpcGVvdXQocGlwZSksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX2Rpc2FibGVfZW5kcG9pbnQgLS0gRGlzYWJsZSBhbiBlbmRwb2ludCBieSBhZGRyZXNzCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGVuZHBvaW50IGlzIGJlaW5nIGRpc2FibGVkCisgKiBAZXBhZGRyOiB0aGUgZW5kcG9pbnQncyBhZGRyZXNzLiAgRW5kcG9pbnQgbnVtYmVyIGZvciBvdXRwdXQsCisgKgllbmRwb2ludCBudW1iZXIgKyBVU0JfRElSX0lOIGZvciBpbnB1dAorICoKKyAqIERlYWxsb2NhdGVzIGhjZC9oYXJkd2FyZSBzdGF0ZSBmb3IgdGhpcyBlbmRwb2ludCAuLi4gYW5kIG51a2VzIGFsbAorICogcGVuZGluZyB1cmJzLgorICoKKyAqIElmIHRoZSBIQ0QgaGFzbid0IHJlZ2lzdGVyZWQgYSBkaXNhYmxlKCkgZnVuY3Rpb24sIHRoaXMgc2V0cyB0aGUKKyAqIGVuZHBvaW50J3MgbWF4cGFja2V0IHNpemUgdG8gMCB0byBwcmV2ZW50IGZ1cnRoZXIgc3VibWlzc2lvbnMuCisgKi8KK3ZvaWQgdXNiX2Rpc2FibGVfZW5kcG9pbnQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVwYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgZXBudW0gPSBlcGFkZHIgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZiAodXNiX2VuZHBvaW50X291dChlcGFkZHIpKSB7CisJCWVwID0gZGV2LT5lcF9vdXRbZXBudW1dOworCQlkZXYtPmVwX291dFtlcG51bV0gPSBOVUxMOworCX0gZWxzZSB7CisJCWVwID0gZGV2LT5lcF9pbltlcG51bV07CisJCWRldi0+ZXBfaW5bZXBudW1dID0gTlVMTDsKKwl9CisJaWYgKGVwICYmIGRldi0+YnVzICYmIGRldi0+YnVzLT5vcCAmJiBkZXYtPmJ1cy0+b3AtPmRpc2FibGUpCisJCWRldi0+YnVzLT5vcC0+ZGlzYWJsZShkZXYsIGVwKTsKK30KKworLyoqCisgKiB1c2JfZGlzYWJsZV9pbnRlcmZhY2UgLS0gRGlzYWJsZSBhbGwgZW5kcG9pbnRzIGZvciBhbiBpbnRlcmZhY2UKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJmYWNlIGlzIGJlaW5nIGRpc2FibGVkCisgKiBAaW50ZjogcG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIGRlc2NyaXB0b3IKKyAqCisgKiBEaXNhYmxlcyBhbGwgdGhlIGVuZHBvaW50cyBmb3IgdGhlIGludGVyZmFjZSdzIGN1cnJlbnQgYWx0c2V0dGluZy4KKyAqLwordm9pZCB1c2JfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQl1c2JfZGlzYWJsZV9lbmRwb2ludChkZXYsCisJCQkJYWx0LT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCX0KK30KKworLyoKKyAqIHVzYl9kaXNhYmxlX2RldmljZSAtIERpc2FibGUgYWxsIHRoZSBlbmRwb2ludHMgZm9yIGEgVVNCIGRldmljZQorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBlbmRwb2ludHMgYXJlIGJlaW5nIGRpc2FibGVkCisgKiBAc2tpcF9lcDA6IDAgdG8gZGlzYWJsZSBlbmRwb2ludCAwLCAxIHRvIHNraXAgaXQuCisgKgorICogRGlzYWJsZXMgYWxsIHRoZSBkZXZpY2UncyBlbmRwb2ludHMsIHBvdGVudGlhbGx5IGluY2x1ZGluZyBlbmRwb2ludCAwLgorICogRGVhbGxvY2F0ZXMgaGNkL2hhcmR3YXJlIHN0YXRlIGZvciB0aGUgZW5kcG9pbnRzIChudWtpbmcgYWxsIG9yIG1vc3QKKyAqIHBlbmRpbmcgdXJicykgYW5kIHVzYmNvcmUgc3RhdGUgZm9yIHRoZSBpbnRlcmZhY2VzLCBzbyB0aGF0IHVzYmNvcmUKKyAqIG11c3QgdXNiX3NldF9jb25maWd1cmF0aW9uKCkgYmVmb3JlIGFueSBpbnRlcmZhY2VzIGNvdWxkIGJlIHVzZWQuCisgKi8KK3ZvaWQgdXNiX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBza2lwX2VwMCkKK3sKKwlpbnQgaTsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiJXMgbnVraW5nICVzIFVSQnNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCXNraXBfZXAwID8gIm5vbi1lcDAiIDogImFsbCIpOworCWZvciAoaSA9IHNraXBfZXAwOyBpIDwgMTY7ICsraSkgeworCQl1c2JfZGlzYWJsZV9lbmRwb2ludChkZXYsIGkpOworCQl1c2JfZGlzYWJsZV9lbmRwb2ludChkZXYsIGkgKyBVU0JfRElSX0lOKTsKKwl9CisJZGV2LT50b2dnbGVbMF0gPSBkZXYtPnRvZ2dsZVsxXSA9IDA7CisKKwkvKiBnZXR0aW5nIHJpZCBvZiBpbnRlcmZhY2VzIHdpbGwgZGlzY29ubmVjdAorCSAqIGFueSBkcml2ZXJzIGJvdW5kIHRvIHRoZW0gKGEga2V5IHNpZGUgZWZmZWN0KQorCSAqLworCWlmIChkZXYtPmFjdGNvbmZpZykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKKworCQkJLyogcmVtb3ZlIHRoaXMgaW50ZXJmYWNlICovCisJCQlpbnRlcmZhY2UgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBpbnRlcmZhY2UgJXNcbiIsCisJCQkJaW50ZXJmYWNlLT5kZXYuYnVzX2lkKTsKKwkJCXVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyhpbnRlcmZhY2UpOworCQkJa2ZyZWUoaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKTsKKwkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyA9IE5VTEw7CisJCQlkZXZpY2VfZGVsICgmaW50ZXJmYWNlLT5kZXYpOworCQl9CisKKwkJLyogTm93IHRoYXQgdGhlIGludGVyZmFjZXMgYXJlIHVuYm91bmQsIG5vYm9keSBzaG91bGQKKwkJICogdHJ5IHRvIGFjY2VzcyB0aGVtLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJCXB1dF9kZXZpY2UgKCZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5kZXYpOworCQkJZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXSA9IE5VTEw7CisJCX0KKwkJZGV2LT5hY3Rjb25maWcgPSBOVUxMOworCQlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKKwkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGRldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCX0KK30KKworCisvKgorICogdXNiX2VuYWJsZV9lbmRwb2ludCAtIEVuYWJsZSBhbiBlbmRwb2ludCBmb3IgVVNCIGNvbW11bmljYXRpb25zCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGludGVyZmFjZSBpcyBiZWluZyBlbmFibGVkCisgKiBAZXA6IHRoZSBlbmRwb2ludAorICoKKyAqIFJlc2V0cyB0aGUgZW5kcG9pbnQgdG9nZ2xlLCBhbmQgc2V0cyBkZXYtPmVwX3tpbixvdXR9IHBvaW50ZXJzLgorICogRm9yIGNvbnRyb2wgZW5kcG9pbnRzLCBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNpZGVzIGFyZSBoYW5kbGVkLgorICovCitzdGF0aWMgdm9pZAordXNiX2VuYWJsZV9lbmRwb2ludChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXVuc2lnbmVkIGludCBlcGFkZHIgPSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCXVuc2lnbmVkIGludCBlcG51bSA9IGVwYWRkciAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwlpbnQgaXNfY29udHJvbDsKKworCWlzX2NvbnRyb2wgPSAoKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7CisJaWYgKHVzYl9lbmRwb2ludF9vdXQoZXBhZGRyKSB8fCBpc19jb250cm9sKSB7CisJCXVzYl9zZXR0b2dnbGUoZGV2LCBlcG51bSwgMSwgMCk7CisJCWRldi0+ZXBfb3V0W2VwbnVtXSA9IGVwOworCX0KKwlpZiAoIXVzYl9lbmRwb2ludF9vdXQoZXBhZGRyKSB8fCBpc19jb250cm9sKSB7CisJCXVzYl9zZXR0b2dnbGUoZGV2LCBlcG51bSwgMCwgMCk7CisJCWRldi0+ZXBfaW5bZXBudW1dID0gZXA7CisJfQorfQorCisvKgorICogdXNiX2VuYWJsZV9pbnRlcmZhY2UgLSBFbmFibGUgYWxsIHRoZSBlbmRwb2ludHMgZm9yIGFuIGludGVyZmFjZQorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBpbnRlcmZhY2UgaXMgYmVpbmcgZW5hYmxlZAorICogQGludGY6IHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBkZXNjcmlwdG9yCisgKgorICogRW5hYmxlcyBhbGwgdGhlIGVuZHBvaW50cyBmb3IgdGhlIGludGVyZmFjZSdzIGN1cnJlbnQgYWx0c2V0dGluZy4KKyAqLworc3RhdGljIHZvaWQgdXNiX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkKKwkJdXNiX2VuYWJsZV9lbmRwb2ludChkZXYsICZhbHQtPmVuZHBvaW50W2ldKTsKK30KKworLyoqCisgKiB1c2Jfc2V0X2ludGVyZmFjZSAtIE1ha2VzIGEgcGFydGljdWxhciBhbHRlcm5hdGUgc2V0dGluZyBiZSBjdXJyZW50CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGludGVyZmFjZSBpcyBiZWluZyB1cGRhdGVkCisgKiBAaW50ZXJmYWNlOiB0aGUgaW50ZXJmYWNlIGJlaW5nIHVwZGF0ZWQKKyAqIEBhbHRlcm5hdGU6IHRoZSBzZXR0aW5nIGJlaW5nIGNob3Nlbi4KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXJzIG9uIGludGVyZmFjZXMgdGhhdCBtYXkgbm90CisgKiBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBOb3QgYWxsIGRldmljZXMgc3VwcG9ydCBzdWNoIGNvbmZpZ3VyYWJpbGl0eS4KKyAqIE9ubHkgdGhlIGRyaXZlciBib3VuZCB0byBhbiBpbnRlcmZhY2UgbWF5IGNoYW5nZSBpdHMgc2V0dGluZy4KKyAqCisgKiBXaXRoaW4gYW55IGdpdmVuIGNvbmZpZ3VyYXRpb24sIGVhY2ggaW50ZXJmYWNlIG1heSBoYXZlIHNldmVyYWwKKyAqIGFsdGVybmF0aXZlIHNldHRpbmdzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gY29udHJvbCBsZXZlbHMgb2YKKyAqIGJhbmR3aWR0aCBjb25zdW1wdGlvbi4gIEZvciBleGFtcGxlLCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBhIGhpZ2gKKyAqIHNwZWVkIGludGVycnVwdCBlbmRwb2ludCBtYXkgbm90IHNlbmQgbW9yZSB0aGFuIDY0IGJ5dGVzIHBlciBtaWNyb2ZyYW1lLAorICogd2hpbGUgaW50ZXJydXB0IHRyYW5zZmVycyBvZiB1cCB0byAzS0J5dGVzIHBlciBtaWNyb2ZyYW1lIGFyZSBsZWdhbC4KKyAqIEFsc28sIGlzb2Nocm9ub3VzIGVuZHBvaW50cyBtYXkgbmV2ZXIgYmUgcGFydCBvZiBhbgorICogaW50ZXJmYWNlJ3MgZGVmYXVsdCBzZXR0aW5nLiAgVG8gYWNjZXNzIHN1Y2ggYmFuZHdpZHRoLCBhbHRlcm5hdGUKKyAqIGludGVyZmFjZSBzZXR0aW5ncyBtdXN0IGJlIG1hZGUgY3VycmVudC4KKyAqCisgKiBOb3RlIHRoYXQgaW4gdGhlIExpbnV4IFVTQiBzdWJzeXN0ZW0sIGJhbmR3aWR0aCBhc3NvY2lhdGVkIHdpdGgKKyAqIGFuIGVuZHBvaW50IGluIGEgZ2l2ZW4gYWx0ZXJuYXRlIHNldHRpbmcgaXMgbm90IHJlc2VydmVkIHVudGlsIGFuIFVSQgorICogaXMgc3VibWl0dGVkIHRoYXQgbmVlZHMgdGhhdCBiYW5kd2lkdGguICBTb21lIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zCisgKiBhbGxvY2F0ZSBiYW5kd2lkdGggZWFybHksIHdoZW4gYSBjb25maWd1cmF0aW9uIGlzIGNob3Nlbi4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKiBBbHNvLCBkcml2ZXJzIG11c3Qgbm90IGNoYW5nZSBhbHRzZXR0aW5ncyB3aGlsZSB1cmJzIGFyZSBzY2hlZHVsZWQgZm9yCisgKiBlbmRwb2ludHMgaW4gdGhhdCBpbnRlcmZhY2U7IGFsbCBzdWNoIHVyYnMgbXVzdCBmaXJzdCBiZSBjb21wbGV0ZWQKKyAqIChwZXJoYXBzIGZvcmNlZCBieSB1bmxpbmtpbmcpLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUKKyAqIHVuZGVybHlpbmcgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbC4KKyAqLworaW50IHVzYl9zZXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBpbnRlcmZhY2UsIGludCBhbHRlcm5hdGUpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlpbnQgcmV0OworCWludCBtYW51YWwgPSAwOworCisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGludGVyZmFjZSk7CisJaWYgKCFpZmFjZSkgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGludGVyZmFjZSAlZFxuIiwKKwkJCWludGVyZmFjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgYWx0ZXJuYXRlKTsKKwlpZiAoIWFsdCkgeworCQl3YXJuKCJzZWxlY3RpbmcgaW52YWxpZCBhbHRzZXR0aW5nICVkIiwgYWx0ZXJuYXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJICAgVVNCX1JFUV9TRVRfSU5URVJGQUNFLCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAgIGFsdGVybmF0ZSwgaW50ZXJmYWNlLCBOVUxMLCAwLCA1MDAwKTsKKworCS8qIDkuNC4xMCBzYXlzIGRldmljZXMgZG9uJ3QgbmVlZCB0aGlzIGFuZCBhcmUgZnJlZSB0byBTVEFMTCB0aGUKKwkgKiByZXF1ZXN0IGlmIHRoZSBpbnRlcmZhY2Ugb25seSBoYXMgb25lIGFsdGVybmF0ZSBzZXR0aW5nLgorCSAqLworCWlmIChyZXQgPT0gLUVQSVBFICYmIGlmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAxKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LAorCQkJIm1hbnVhbCBzZXRfaW50ZXJmYWNlIGZvciBpZmFjZSAlZCwgYWx0ICVkXG4iLAorCQkJaW50ZXJmYWNlLCBhbHRlcm5hdGUpOworCQltYW51YWwgPSAxOworCX0gZWxzZSBpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZJWE1FIGRyaXZlcnMgc2hvdWxkbid0IG5lZWQgdG8gcmVwbGljYXRlL2J1Z2ZpeCB0aGUgbG9naWMgaGVyZQorCSAqIHdoZW4gdGhleSBpbXBsZW1lbnQgYXN5bmMgb3IgZWFzaWx5LWtpbGxhYmxlIHZlcnNpb25zIG9mIHRoaXMgb3IKKwkgKiBvdGhlciAic2hvdWxkLWJlLWludGVybmFsIiBmdW5jdGlvbnMgKGxpa2UgY2xlYXJfaGFsdCkuCisJICogc2hvdWxkIGhjZCt1c2Jjb3JlIHBvc3Rwcm9jZXNzIGNvbnRyb2wgcmVxdWVzdHM/CisJICovCisKKwkvKiBwcmV2ZW50IHN1Ym1pc3Npb25zIHVzaW5nIHByZXZpb3VzIGVuZHBvaW50IHNldHRpbmdzICovCisJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKGRldiwgaWZhY2UpOworCisJLyogOS4xLjEuNSBzYXlzOgorCSAqCisJICoJQ29uZmlndXJpbmcgYSBkZXZpY2Ugb3IgY2hhbmdpbmcgYW4gYWx0ZXJuYXRlIHNldHRpbmcKKwkgKgljYXVzZXMgYWxsIG9mIHRoZSBzdGF0dXMgYW5kIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisJICoJYXNzb2NpYXRlZCB3aXRoIGVuZHBvaW50cyBpbiB0aGUgYWZmZWN0ZWQgaW50ZXJmYWNlcyB0bworCSAqCWJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4gVGhpcyBpbmNsdWRlcyBzZXR0aW5nCisJICoJdGhlIGRhdGEgdG9nZ2xlIG9mIGFueSBlbmRwb2ludCB1c2luZyBkYXRhIHRvZ2dsZXMgdG8KKwkgKgl0aGUgdmFsdWUgREFUQTAuCisJICoKKwkgKiBTb21lIGRldmljZXMgdGFrZSB0aGlzIHRvbyBsaXRlcmFsbHkgYW5kIGRvbid0IHJlc2V0IHRoZSBkYXRhCisJICogdG9nZ2xlcyBpZiB0aGUgbmV3IGFsdHNldHRpbmcgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmUgKHRoZQorCSAqIGNvbW1hbmQgaXNuJ3QgImNoYW5naW5nIiBhbiBhbHRlcm5hdGUgc2V0dGluZykuICBXZSB3aWxsIG1hbnVhbGx5CisJICogcmVzZXQgdGhlIHRvZ2dsZXMgd2hlbiB0aGUgbmV3IGFuZCBvbGQgYWx0c2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorCSAqIE1vc3QgZGV2aWNlcyB3b24ndCBuZWVkIHRoaXMsIGJ1dCBmb3J0dW5hdGVseSBpdCBkb2Vzbid0IGhhcHBlbgorCSAqIG9mdGVuLgorCSAqLworCWlmIChpZmFjZS0+Y3VyX2FsdHNldHRpbmcgPT0gYWx0KQorCQltYW51YWwgPSAxOworCWlmYWNlLT5jdXJfYWx0c2V0dGluZyA9IGFsdDsKKworCS8qIElmIHRoZSBpbnRlcmZhY2Ugb25seSBoYXMgb25lIGFsdHNldHRpbmcgYW5kIHRoZSBkZXZpY2UgZGlkbid0CisJICogYWNjZXB0IHRoZSByZXF1ZXN0IChvciB3aGVuZXZlciB0aGUgb2xkIGFsdHNldHRpbmcgaXMgdGhlIHNhbWUKKwkgKiBhcyB0aGUgbmV3IG9uZSksIHdlIGF0dGVtcHQgdG8gY2Fycnkgb3V0IHRoZSBlcXVpdmFsZW50IGFjdGlvbgorCSAqIGJ5IG1hbnVhbGx5IGNsZWFyaW5nIHRoZSBIQUxUIGZlYXR1cmUgZm9yIGVhY2ggZW5kcG9pbnQgaW4gdGhlCisJICogbmV3IGFsdHNldHRpbmcuCisJICovCisJaWYgKG1hbnVhbCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQkJdW5zaWduZWQgaW50IGVwYWRkciA9CisJCQkJYWx0LT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCQl1bnNpZ25lZCBpbnQgcGlwZSA9CisJX19jcmVhdGVfcGlwZShkZXYsIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyAmIGVwYWRkcikKKwl8ICh1c2JfZW5kcG9pbnRfb3V0KGVwYWRkcikgPyBVU0JfRElSX09VVCA6IFVTQl9ESVJfSU4pOworCisJCQl1c2JfY2xlYXJfaGFsdChkZXYsIHBpcGUpOworCQl9CisJfQorCisJLyogOS4xLjEuNTogcmVzZXQgdG9nZ2xlcyBmb3IgYWxsIGVuZHBvaW50cyBpbiB0aGUgbmV3IGFsdHNldHRpbmcKKwkgKgorCSAqIE5vdGU6CisJICogRGVzcGl0ZSBFUDAgaXMgYWx3YXlzIHByZXNlbnQgaW4gYWxsIGludGVyZmFjZXMvQVMsIHRoZSBsaXN0IG9mCisJICogZW5kcG9pbnRzIGZyb20gdGhlIGRlc2NyaXB0b3IgZG9lcyBub3QgY29udGFpbiBFUDAuIER1ZSB0byBpdHMKKwkgKiBvbW5pcHJlc2VuY2Ugb25lIG1pZ2h0IGV4cGVjdCBFUDAgYmVpbmcgY29uc2lkZXJlZCAiYWZmZWN0ZWQiIGJ5CisJICogYW55IFNldEludGVyZmFjZSByZXF1ZXN0IGFuZCBoZW5jZSBhc3N1bWUgdG9nZ2xlcyBuZWVkIHRvIGJlIHJlc2V0LgorCSAqIEhvd2V2ZXIsIEVQMCB0b2dnbGVzIGFyZSByZS1zeW5jZWQgZm9yIGV2ZXJ5IGluZGl2aWR1YWwgdHJhbnNmZXIKKwkgKiBkdXJpbmcgdGhlIFNFVFVQIHN0YWdlIC0gaGVuY2UgRVAwIHRvZ2dsZXMgYXJlICJkb24ndCBjYXJlIiBoZXJlLgorCSAqIChMaWtld2lzZSwgRVAwIG5ldmVyICJoYWx0cyIgb24gd2VsbCBkZXNpZ25lZCBkZXZpY2VzLikKKwkgKi8KKwl1c2JfZW5hYmxlX2ludGVyZmFjZShkZXYsIGlmYWNlKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9yZXNldF9jb25maWd1cmF0aW9uIC0gbGlnaHR3ZWlnaHQgZGV2aWNlIHJlc2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgcmVzZXQKKyAqCisgKiBUaGlzIGlzc3VlcyBhIHN0YW5kYXJkIFNFVF9DT05GSUdVUkFUSU9OIHJlcXVlc3QgdG8gdGhlIGRldmljZSB1c2luZworICogdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFRoZSBlZmZlY3QgaXMgdG8gcmVzZXQgbW9zdCBVU0ItcmVsYXRlZAorICogc3RhdGUgaW4gdGhlIGRldmljZSwgaW5jbHVkaW5nIGludGVyZmFjZSBhbHRzZXR0aW5ncyAocmVzZXQgdG8gemVybyksCisgKiBlbmRwb2ludCBoYWx0cyAoY2xlYXJlZCksIGFuZCBkYXRhIHRvZ2dsZSAob25seSBmb3IgYnVsayBhbmQgaW50ZXJydXB0CisgKiBlbmRwb2ludHMpLiAgT3RoZXIgdXNiY29yZSBzdGF0ZSBpcyB1bmNoYW5nZWQsIGluY2x1ZGluZyBiaW5kaW5ncyBvZgorICogdXNiIGRldmljZSBkcml2ZXJzIHRvIGludGVyZmFjZXMuCisgKgorICogQmVjYXVzZSB0aGlzIGFmZmVjdHMgbXVsdGlwbGUgaW50ZXJmYWNlcywgYXZvaWQgdXNpbmcgdGhpcyB3aXRoIGNvbXBvc2l0ZQorICogKG11bHRpLWludGVyZmFjZSkgZGV2aWNlcy4gIEluc3RlYWQsIHRoZSBkcml2ZXIgZm9yIGVhY2ggaW50ZXJmYWNlIG1heQorICogdXNlIHVzYl9zZXRfaW50ZXJmYWNlKCkgb24gdGhlIGludGVyZmFjZXMgaXQgY2xhaW1zLiAgUmVzZXR0aW5nIHRoZSB3aG9sZQorICogY29uZmlndXJhdGlvbiB3b3VsZCBhZmZlY3Qgb3RoZXIgZHJpdmVycycgaW50ZXJmYWNlcy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCB1c2JfcmVzZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludAkJCWksIHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnCSpjb25maWc7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKworCS8qIGNhbGxlciBtdXN0IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UgYW5kIG11c3Qgb3duCisJICogdGhlIHVzYiBidXMgcmVhZGxvY2sgKHNvIGRyaXZlciBiaW5kaW5ncyBhcmUgc3RhYmxlKTsKKwkgKiBjYWxscyBkdXJpbmcgcHJvYmUoKSBhcmUgZmluZQorCSAqLworCisJZm9yIChpID0gMTsgaSA8IDE2OyArK2kpIHsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LCBpKTsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LCBpICsgVVNCX0RJUl9JTik7CisJfQorCisJY29uZmlnID0gZGV2LT5hY3Rjb25maWc7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLCAwLAorCQkJY29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIDAsCisJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUoZGV2LCBVU0JfU1RBVEVfQUREUkVTUyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGV2LT50b2dnbGVbMF0gPSBkZXYtPnRvZ2dsZVsxXSA9IDA7CisKKwkvKiByZS1pbml0IGhjL2hjZCBpbnRlcmZhY2UvZW5kcG9pbnQgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBjb25maWctPmludGVyZmFjZVtpXTsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCAwKTsKKworCQkvKiBObyBhbHRzZXR0aW5nIDA/ICBXZSdsbCBhc3N1bWUgdGhlIGZpcnN0IGFsdHNldHRpbmcuCisJCSAqIFdlIGNvdWxkIHVzZSBhIEdldEludGVyZmFjZSBjYWxsLCBidXQgaWYgYSBkZXZpY2UgaXMKKwkJICogc28gbm9uLWNvbXBsaWFudCB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhbHRzZXR0aW5nIDAKKwkJICogdGhlbiBJIHdvdWxkbid0IHRydXN0IGl0cyByZXBseSBhbnl3YXkuCisJCSAqLworCQlpZiAoIWFsdCkKKwkJCWFsdCA9ICZpbnRmLT5hbHRzZXR0aW5nWzBdOworCisJCWludGYtPmN1cl9hbHRzZXR0aW5nID0gYWx0OworCQl1c2JfZW5hYmxlX2ludGVyZmFjZShkZXYsIGludGYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYyA9CisJCQlhbHRzZXR0aW5nX3RvX3VzYl9pbnRlcmZhY2VfY2FjaGUoaW50Zi0+YWx0c2V0dGluZyk7CisKKwlrcmVmX3B1dCgmaW50ZmMtPnJlZiwgdXNiX3JlbGVhc2VfaW50ZXJmYWNlX2NhY2hlKTsKKwlrZnJlZShpbnRmKTsKK30KKworLyoKKyAqIHVzYl9zZXRfY29uZmlndXJhdGlvbiAtIE1ha2VzIGEgcGFydGljdWxhciBkZXZpY2Ugc2V0dGluZyBiZSBjdXJyZW50CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgdXBkYXRlZAorICogQGNvbmZpZ3VyYXRpb246IHRoZSBjb25maWd1cmF0aW9uIGJlaW5nIGNob3Nlbi4KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKSwgY2FsbGVyIG93bnMgdGhlIGRldmljZSBsb2NrCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGVuYWJsZSBub24tZGVmYXVsdCBkZXZpY2UgbW9kZXMuICBOb3QgYWxsIGRldmljZXMKKyAqIHVzZSB0aGlzIGtpbmQgb2YgY29uZmlndXJhYmlsaXR5OyBtYW55IGRldmljZXMgb25seSBoYXZlIG9uZQorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiBVU0IgZGV2aWNlIGNvbmZpZ3VyYXRpb25zIG1heSBhZmZlY3QgTGludXggaW50ZXJvcGVyYWJpbGl0eSwKKyAqIHBvd2VyIGNvbnN1bXB0aW9uIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuICBGb3IgZXhhbXBsZSwKKyAqIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgbGltaXRlZCB0byB1c2luZyAxMDBtQSBvZiBidXMgcG93ZXIsCisgKiBzbyB0aGF0IHdoZW4gY2VydGFpbiBkZXZpY2UgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBtb3JlIHBvd2VyLAorICogYW5kIHRoZSBkZXZpY2UgaXMgYnVzIHBvd2VyZWQsIHRoYXQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgaW4gc29tZQorICogbm9uLWRlZmF1bHQgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBPdGhlciBkZXZpY2UgbW9kZXMgbWF5IGFsc28gYmUKKyAqIHJlZmxlY3RlZCBhcyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHN1Y2ggYXMgd2hldGhlciB0d28gSVNETgorICogY2hhbm5lbHMgYXJlIGF2YWlsYWJsZSBpbmRlcGVuZGVudGx5OyBhbmQgY2hvb3NpbmcgYmV0d2VlbiBvcGVuCisgKiBzdGFuZGFyZCBkZXZpY2UgcHJvdG9jb2xzIChsaWtlIENEQykgb3IgcHJvcHJpZXRhcnkgb25lcy4KKyAqCisgKiBOb3RlIHRoYXQgVVNCIGhhcyBhbiBhZGRpdGlvbmFsIGxldmVsIG9mIGRldmljZSBjb25maWd1cmFiaWxpdHksCisgKiBhc3NvY2lhdGVkIHdpdGggaW50ZXJmYWNlcy4gIFRoYXQgY29uZmlndXJhYmlsaXR5IGlzIGFjY2Vzc2VkIHVzaW5nCisgKiB1c2Jfc2V0X2ludGVyZmFjZSgpLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cy4gVGhlIGNhbGxpbmcgY29udGV4dCBtdXN0IGJlIGFibGUgdG8gc2xlZXAsCisgKiBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2ssIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBkcml2ZXIgbW9kZWwncyBVU0IKKyAqIGJ1cyByd3NlbTsgdXNiIGRldmljZSBkcml2ZXIgcHJvYmUoKSBtZXRob2RzIGNhbm5vdCB1c2UgdGhpcyByb3V0aW5lLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUKKyAqIHVuZGVybHlpbmcgY2FsbCB0aGF0IGZhaWxlZC4gIE9uIHN1Y2Nlc2Z1bCBjb21wbGV0aW9uLCBlYWNoIGludGVyZmFjZQorICogaW4gdGhlIG9yaWdpbmFsIGRldmljZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGRlc3Ryb3llZCwgYW5kIGVhY2ggb25lCisgKiBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcHJvYmVkIGJ5IGFsbCByZWxldmFudCB1c2IgZGV2aWNlCisgKiBkcml2ZXJzIGN1cnJlbnRseSBrbm93biB0byB0aGUga2VybmVsLgorICovCitpbnQgdXNiX3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBjb25maWd1cmF0aW9uKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY3AgPSBOVUxMOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoqbmV3X2ludGVyZmFjZXMgPSBOVUxMOworCWludCBuLCBuaW50ZjsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJaWYgKGRldi0+Y29uZmlnW2ldLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBjb25maWd1cmF0aW9uKSB7CisJCQljcCA9ICZkZXYtPmNvbmZpZ1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICgoIWNwICYmIGNvbmZpZ3VyYXRpb24gIT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIFVTQiBzcGVjIHNheXMgY29uZmlndXJhdGlvbiAwIG1lYW5zIHVuY29uZmlndXJlZC4KKwkgKiBCdXQgaWYgYSBkZXZpY2UgaW5jbHVkZXMgYSBjb25maWd1cmF0aW9uIG51bWJlcmVkIDAsCisJICogd2Ugd2lsbCBhY2NlcHQgaXQgYXMgYSBjb3JyZWN0bHkgY29uZmlndXJlZCBzdGF0ZS4KKwkgKi8KKwlpZiAoY3AgJiYgY29uZmlndXJhdGlvbiA9PSAwKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJjb25maWcgMCBkZXNjcmlwdG9yPz9cbiIpOworCisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBpbnRlcmZhY2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLAorCSAqIHNvIHRoYXQgaWYgd2UgcnVuIG91dCB0aGVuIG5vdGhpbmcgd2lsbCBoYXZlIGNoYW5nZWQuICovCisJbiA9IG5pbnRmID0gMDsKKwlpZiAoY3ApIHsKKwkJbmludGYgPSBjcC0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwkJbmV3X2ludGVyZmFjZXMgPSBrbWFsbG9jKG5pbnRmICogc2l6ZW9mKCpuZXdfaW50ZXJmYWNlcyksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X2ludGVyZmFjZXMpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeSIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlmb3IgKDsgbiA8IG5pbnRmOyArK24pIHsKKwkJCW5ld19pbnRlcmZhY2VzW25dID0ga21hbGxvYygKKwkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfaW50ZXJmYWNlKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ld19pbnRlcmZhY2VzW25dKSB7CisJCQkJZGV2X2VycigmZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5Iik7CisJCQkJcmV0ID0gLUVOT01FTTsKK2ZyZWVfaW50ZXJmYWNlczoKKwkJCQl3aGlsZSAoLS1uID49IDApCisJCQkJCWtmcmVlKG5ld19pbnRlcmZhY2VzW25dKTsKKwkJCQlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCS8qIGlmIGl0J3MgYWxyZWFkeSBjb25maWd1cmVkLCBjbGVhciBvdXQgb2xkIHN0YXRlIGZpcnN0LgorCSAqIGdldHRpbmcgcmlkIG9mIG9sZCBpbnRlcmZhY2VzIG1lYW5zIHVuYmluZGluZyB0aGVpciBkcml2ZXJzLgorCSAqLworCWlmIChkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTKQorCQl1c2JfZGlzYWJsZV9kZXZpY2UgKGRldiwgMSk7CS8vIFNraXAgZXAwCisKKwlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwgMCwgY29uZmlndXJhdGlvbiwgMCwKKwkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSkgPCAwKQorCQlnb3RvIGZyZWVfaW50ZXJmYWNlczsKKworCWRldi0+YWN0Y29uZmlnID0gY3A7CisJaWYgKCFjcCkKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUoZGV2LCBVU0JfU1RBVEVfQUREUkVTUyk7CisJZWxzZSB7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOworCisJCS8qIEluaXRpYWxpemUgdGhlIG5ldyBpbnRlcmZhY2Ugc3RydWN0dXJlcyBhbmQgdGhlCisJCSAqIGhjL2hjZC91c2Jjb3JlIGludGVyZmFjZS9lbmRwb2ludCBzdGF0ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuaW50ZjsgKytpKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmM7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKworCQkJY3AtPmludGVyZmFjZVtpXSA9IGludGYgPSBuZXdfaW50ZXJmYWNlc1tpXTsKKwkJCW1lbXNldChpbnRmLCAwLCBzaXplb2YoKmludGYpKTsKKwkJCWludGZjID0gY3AtPmludGZfY2FjaGVbaV07CisJCQlpbnRmLT5hbHRzZXR0aW5nID0gaW50ZmMtPmFsdHNldHRpbmc7CisJCQlpbnRmLT5udW1fYWx0c2V0dGluZyA9IGludGZjLT5udW1fYWx0c2V0dGluZzsKKwkJCWtyZWZfZ2V0KCZpbnRmYy0+cmVmKTsKKworCQkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIDApOworCisJCQkvKiBObyBhbHRzZXR0aW5nIDA/ICBXZSdsbCBhc3N1bWUgdGhlIGZpcnN0IGFsdHNldHRpbmcuCisJCQkgKiBXZSBjb3VsZCB1c2UgYSBHZXRJbnRlcmZhY2UgY2FsbCwgYnV0IGlmIGEgZGV2aWNlIGlzCisJCQkgKiBzbyBub24tY29tcGxpYW50IHRoYXQgaXQgZG9lc24ndCBoYXZlIGFsdHNldHRpbmcgMAorCQkJICogdGhlbiBJIHdvdWxkbid0IHRydXN0IGl0cyByZXBseSBhbnl3YXkuCisJCQkgKi8KKwkJCWlmICghYWx0KQorCQkJCWFsdCA9ICZpbnRmLT5hbHRzZXR0aW5nWzBdOworCisJCQlpbnRmLT5jdXJfYWx0c2V0dGluZyA9IGFsdDsKKwkJCXVzYl9lbmFibGVfaW50ZXJmYWNlKGRldiwgaW50Zik7CisJCQlpbnRmLT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OworCQkJaW50Zi0+ZGV2LmRyaXZlciA9IE5VTEw7CisJCQlpbnRmLT5kZXYuYnVzID0gJnVzYl9idXNfdHlwZTsKKwkJCWludGYtPmRldi5kbWFfbWFzayA9IGRldi0+ZGV2LmRtYV9tYXNrOworCQkJaW50Zi0+ZGV2LnJlbGVhc2UgPSByZWxlYXNlX2ludGVyZmFjZTsKKwkJCWRldmljZV9pbml0aWFsaXplICgmaW50Zi0+ZGV2KTsKKwkJCXNwcmludGYgKCZpbnRmLT5kZXYuYnVzX2lkWzBdLCAiJWQtJXM6JWQuJWQiLAorCQkJCSBkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPmRldnBhdGgsCisJCQkJIGNvbmZpZ3VyYXRpb24sCisJCQkJIGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJfQorCQlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CisKKwkJaWYgKChjcC0+ZGVzYy5pQ29uZmlndXJhdGlvbikgJiYKKwkJICAgIChjcC0+c3RyaW5nID09IE5VTEwpKSB7CisJCQljcC0+c3RyaW5nID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCQkJaWYgKGNwLT5zdHJpbmcpCisJCQkJdXNiX3N0cmluZyhkZXYsIGNwLT5kZXNjLmlDb25maWd1cmF0aW9uLCBjcC0+c3RyaW5nLCAyNTYpOworCQl9CisKKwkJLyogTm93IHRoYXQgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBzZXQgdXAsIHJlZ2lzdGVyIHRoZW0KKwkJICogdG8gdHJpZ2dlciBiaW5kaW5nIG9mIGRyaXZlcnMgdG8gaW50ZXJmYWNlcy4gIHByb2JlKCkKKwkJICogcm91dGluZXMgbWF5IGluc3RhbGwgZGlmZmVyZW50IGFsdHNldHRpbmdzIGFuZCBtYXkKKwkJICogY2xhaW0oKSBhbnkgaW50ZXJmYWNlcyBub3QgeWV0IGJvdW5kLiAgTWFueSBjbGFzcyBkcml2ZXJzCisJCSAqIG5lZWQgdGhhdDogQ0RDLCBhdWRpbywgdmlkZW8sIGV0Yy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuaW50ZjsgKytpKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IGNwLT5pbnRlcmZhY2VbaV07CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOworCisJCQlkZXNjID0gJmludGYtPmFsdHNldHRpbmcgWzBdLmRlc2M7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsCisJCQkJImFkZGluZyAlcyAoY29uZmlnICMlZCwgaW50ZXJmYWNlICVkKVxuIiwKKwkJCQlpbnRmLT5kZXYuYnVzX2lkLCBjb25maWd1cmF0aW9uLAorCQkJCWRlc2MtPmJJbnRlcmZhY2VOdW1iZXIpOworCQkJcmV0ID0gZGV2aWNlX2FkZCAoJmludGYtPmRldik7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJImRldmljZV9hZGQoJXMpIC0tPiAlZFxuIiwKKwkJCQkJaW50Zi0+ZGV2LmJ1c19pZCwKKwkJCQkJcmV0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuaUludGVyZmFjZSkgJiYKKwkJCSAgICAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyA9PSBOVUxMKSkgeworCQkJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcpCisJCQkJCXVzYl9zdHJpbmcoZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5pSW50ZXJmYWNlLAorCQkJCQkJICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZywgMjU2KTsKKwkJCX0KKwkJCXVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyAoaW50Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvLyBzeW5jaHJvbm91cyByZXF1ZXN0IGNvbXBsZXRpb24gbW9kZWwKK0VYUE9SVF9TWU1CT0wodXNiX2NvbnRyb2xfbXNnKTsKK0VYUE9SVF9TWU1CT0wodXNiX2J1bGtfbXNnKTsKKworRVhQT1JUX1NZTUJPTCh1c2Jfc2dfaW5pdCk7CitFWFBPUlRfU1lNQk9MKHVzYl9zZ19jYW5jZWwpOworRVhQT1JUX1NZTUJPTCh1c2Jfc2dfd2FpdCk7CisKKy8vIHN5bmNocm9ub3VzIGNvbnRyb2wgbWVzc2FnZSBjb252ZW5pZW5jZSByb3V0aW5lcworRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X2Rlc2NyaXB0b3IpOworRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X3N0YXR1cyk7CitFWFBPUlRfU1lNQk9MKHVzYl9nZXRfc3RyaW5nKTsKK0VYUE9SVF9TWU1CT0wodXNiX3N0cmluZyk7CisKKy8vIHN5bmNocm9ub3VzIGNhbGxzIHRoYXQgYWxzbyBtYWludGFpbiB1c2Jjb3JlIHN0YXRlCitFWFBPUlRfU1lNQk9MKHVzYl9jbGVhcl9oYWx0KTsKK0VYUE9SVF9TWU1CT0wodXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24pOworRVhQT1JUX1NZTUJPTCh1c2Jfc2V0X2ludGVyZmFjZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3YTVhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBUaGlzIE9URyBXaGl0ZWxpc3QgaXMgdGhlIE9URyAiVGFyZ2V0ZWQgUGVyaXBoZXJhbCBMaXN0Ii4gIEl0IHNob3VsZAorICogbW9zdGx5IHVzZSBvZiBVU0JfREVWSUNFKCkgb3IgVVNCX0RFVklDRV9WRVIoKSBlbnRyaWVzLi4KKyAqCisgKiBZT1UgX1NIT1VMRF8gQ0hBTkdFIFRISVMgTElTVCBUTyBNQVRDSCBZT1VSIFBST0RVQ1QgQU5EIElUUyBURVNUSU5HIQorICovIAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2hpdGVsaXN0X3RhYmxlIFtdID0geworCisvKiBodWJzIGFyZSBvcHRpb25hbCBpbiBPVEcsIGJ1dCB2ZXJ5IGhhbmR5IC4uLiAqLworeyBVU0JfREVWSUNFX0lORk8oVVNCX0NMQVNTX0hVQiwgMCwgMCksIH0sCit7IFVTQl9ERVZJQ0VfSU5GTyhVU0JfQ0xBU1NfSFVCLCAwLCAxKSwgfSwKKworI2lmZGVmCUNPTkZJR19VU0JfUFJJTlRFUgkJLyogaWdub3Jpbmcgbm9uc3RhdGljIGxpbmthZ2UhICovCisvKiBGSVhNRSBhY3R1YWxseSwgcHJpbnRlcnMgYXJlIE5PVCBzdXBwb3NlZCB0byB1c2UgZGV2aWNlIGNsYXNzZXM7CisgKiB0aGV5J3JlIHN1cHBvc2VkIHRvIHVzZSBpbnRlcmZhY2UgY2xhc3Nlcy4uLgorICovCit7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAxKSB9LAoreyBVU0JfREVWSUNFX0lORk8oNywgMSwgMikgfSwKK3sgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDMpIH0sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKKy8qIExpbnV4LVVTQiBDREMgRXRoZXJuZXQgZ2FkZ2V0ICovCit7IFVTQl9ERVZJQ0UoMHgwNTI1LCAweGE0YTEpLCB9LAorLyogTGludXgtVVNCIENEQyBFdGhlcm5ldCArIFJORElTIGdhZGdldCAqLworeyBVU0JfREVWSUNFKDB4MDUyNSwgMHhhNGEyKSwgfSwKKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1RFU1QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9URVNUX01PRFVMRSkKKy8qIGdhZGdldCB6ZXJvLCBmb3IgdGVzdGluZyAqLworeyBVU0JfREVWSUNFKDB4MDUyNSwgMHhhNGEwKSwgfSwKKyNlbmRpZgorCit7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBpbnQgaXNfdGFyZ2V0ZWQoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZV9pZAkqaWQgPSB3aGl0ZWxpc3RfdGFibGU7CisKKwkvKiBwb3NzaWJsZSBpbiBkZXZlbG9wZXIgY29uZmlncyBvbmx5ISAqLworCWlmICghZGV2LT5idXMtPm90Z19wb3J0KQorCQlyZXR1cm4gMTsKKworCS8qIEhOUCB0ZXN0IGRldmljZSBpcyBfbmV2ZXJfIHRhcmdldGVkIChzZWUgT1RHIHNwZWMgNi42LjYpICovCisJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MWEwYSAmJiAKKwkgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4YmFkZCkpCisJCXJldHVybiAwOworCisJLyogTk9URTogY2FuJ3QgdXNlIHVzYl9tYXRjaF9pZCgpIHNpbmNlIGludGVyZmFjZSBjYWNoZXMKKwkgKiBhcmVuJ3Qgc2V0IHVwIHlldC4gdGhpcyBpcyBjdXQvcGFzdGUgZnJvbSB0aGF0IGNvZGUuCisJICovCisJZm9yIChpZCA9IHdoaXRlbGlzdF90YWJsZTsgaWQtPm1hdGNoX2ZsYWdzOyBpZCsrKSB7CisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IpICYmCisJCSAgICBpZC0+aWRWZW5kb3IgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKSAmJgorCQkgICAgaWQtPmlkUHJvZHVjdCAhPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vIG5lZWQgdG8gdGVzdCBpZC0+YmNkRGV2aWNlX2xvICE9IDAsIHNpbmNlIDAgaXMgbmV2ZXIKKwkJICAgZ3JlYXRlciB0aGFuIGFueSB1bnNpZ25lZCBudW1iZXIuICovCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8pICYmCisJCSAgICAoaWQtPmJjZERldmljZV9sbyA+IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkpICYmCisJCSAgICAoaWQtPmJjZERldmljZV9oaSA8IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VDbGFzcyAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfU1VCQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VTdWJDbGFzcyE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTCkgJiYKKwkJICAgIChpZC0+YkRldmljZVByb3RvY29sICE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIDE7CisJfQorCisJLyogYWRkIG90aGVyIG1hdGNoIGNyaXRlcmlhIGhlcmUgLi4uICovCisKKworCS8qIE9URyBNRVNTQUdFOiByZXBvcnQgZXJyb3JzIGhlcmUsIGN1c3RvbWl6ZSB0byBtYXRjaCB5b3VyIHByb2R1Y3QgKi8KKwlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZSB2JTA0eCBwJTA0eCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisjaWZkZWYJQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUCisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzliM2JkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyIERhdmlkIEJyb3duZWxsCisgKiAoQykgQ29weXJpZ2h0IDIwMDIsMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiwyMDA0IElCTSBDb3JwLgorICoKKyAqIEFsbCBvZiB0aGUgc3lzZnMgZmlsZSBhdHRyaWJ1dGVzIGZvciB1c2IgZGV2aWNlcyBhbmQgaW50ZXJmYWNlcy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRworI2Vsc2UKKwkjdW5kZWYgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAidXNiLmgiCisKKy8qIEFjdGl2ZSBjb25maWd1cmF0aW9uIGZpZWxkcyAqLworI2RlZmluZSB1c2JfYWN0Y29uZmlnX3Nob3coZmllbGQsIG11bHRpcGxpZXIsIGZvcm1hdF9zdHJpbmcpCQlcCitzdGF0aWMgc3NpemVfdCAgc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOwkJCQlcCisJCQkJCQkJCQlcCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CQkJCQlcCisJYWN0Y29uZmlnID0gdWRldi0+YWN0Y29uZmlnOwkJCQkJXAorCWlmIChhY3Rjb25maWcpCQkJCQkJCVwKKwkJcmV0dXJuIHNwcmludGYgKGJ1ZiwgZm9ybWF0X3N0cmluZywJCQlcCisJCQkJYWN0Y29uZmlnLT5kZXNjLmZpZWxkICogbXVsdGlwbGllcik7CVwKKwllbHNlCQkJCQkJCQlcCisJCXJldHVybiAwOwkJCQkJCVwKK30JCQkJCQkJCQlcCisKKyNkZWZpbmUgdXNiX2FjdGNvbmZpZ19hdHRyKGZpZWxkLCBtdWx0aXBsaWVyLCBmb3JtYXRfc3RyaW5nKQkJXAordXNiX2FjdGNvbmZpZ19zaG93KGZpZWxkLCBtdWx0aXBsaWVyLCBmb3JtYXRfc3RyaW5nKQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2FjdGNvbmZpZ19hdHRyIChiTnVtSW50ZXJmYWNlcywgMSwgIiUyZFxuIikKK3VzYl9hY3Rjb25maWdfYXR0ciAoYm1BdHRyaWJ1dGVzLCAxLCAiJTJ4XG4iKQordXNiX2FjdGNvbmZpZ19hdHRyIChiTWF4UG93ZXIsIDIsICIlM2RtQVxuIikKKworc3RhdGljIHNzaXplX3Qgc2hvd19jb25maWd1cmF0aW9uX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICphY3Rjb25maWc7CisJaW50IGxlbjsKKworCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOworCWFjdGNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsKKwlpZiAoKCFhY3Rjb25maWcpIHx8ICghYWN0Y29uZmlnLT5zdHJpbmcpKQorCQlyZXR1cm4gMDsKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgYWN0Y29uZmlnLT5zdHJpbmcsIFBBR0VfU0laRSk7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAwOworCWJ1ZltsZW5dID0gJ1xuJzsKKwlidWZbbGVuKzFdID0gMDsKKwlyZXR1cm4gbGVuKzE7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoY29uZmlndXJhdGlvbiwgU19JUlVHTywgc2hvd19jb25maWd1cmF0aW9uX3N0cmluZywgTlVMTCk7CisKKy8qIGNvbmZpZ3VyYXRpb24gdmFsdWUgaXMgYWx3YXlzIHByZXNlbnQsIGFuZCByL3cgKi8KK3VzYl9hY3Rjb25maWdfc2hvdyhiQ29uZmlndXJhdGlvblZhbHVlLCAxLCAiJXVcbiIpOworCitzdGF0aWMgc3NpemVfdAorc2V0X2JDb25maWd1cmF0aW9uVmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKwlpbnQJCQljb25maWcsIHZhbHVlOworCisJaWYgKHNzY2FuZiAoYnVmLCAiJXUiLCAmY29uZmlnKSAhPSAxIHx8IGNvbmZpZyA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCXZhbHVlID0gdXNiX3NldF9jb25maWd1cmF0aW9uICh1ZGV2LCBjb25maWcpOworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCXJldHVybiAodmFsdWUgPCAwKSA/IHZhbHVlIDogY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihiQ29uZmlndXJhdGlvblZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwgCisJCXNob3dfYkNvbmZpZ3VyYXRpb25WYWx1ZSwgc2V0X2JDb25maWd1cmF0aW9uVmFsdWUpOworCisvKiBTdHJpbmcgZmllbGRzICovCisjZGVmaW5lIHVzYl9zdHJpbmdfYXR0cihuYW1lKQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90ICBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCisJaW50IGxlbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOwkJCQkJXAorCWxlbiA9IHNucHJpbnRmKGJ1ZiwgMjU2LCAiJXMiLCB1ZGV2LT5uYW1lKTsJCQlcCisJaWYgKGxlbiA8IDApCQkJCQkJCVwKKwkJcmV0dXJuIDA7CQkJCQkJXAorCWJ1ZltsZW5dID0gJ1xuJzsJCQkJCQlcCisJYnVmW2xlbisxXSA9IDA7CQkJCQkJCVwKKwlyZXR1cm4gbGVuKzE7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOworCit1c2Jfc3RyaW5nX2F0dHIocHJvZHVjdCk7Cit1c2Jfc3RyaW5nX2F0dHIobWFudWZhY3R1cmVyKTsKK3VzYl9zdHJpbmdfYXR0cihzZXJpYWwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19zcGVlZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJY2hhciAqc3BlZWQ7CisKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKworCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCXNwZWVkID0gIjEuNSI7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX1VOS05PV046CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJc3BlZWQgPSAiMTIiOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQlzcGVlZCA9ICI0ODAiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGVlZCA9ICJ1bmtub3duIjsKKwl9CisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVzXG4iLCBzcGVlZCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3BlZWQsIFNfSVJVR08sIHNob3dfc3BlZWQsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19kZXZudW0gKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVkXG4iLCB1ZGV2LT5kZXZudW0pOworfQorc3RhdGljIERFVklDRV9BVFRSKGRldm51bSwgU19JUlVHTywgc2hvd19kZXZudW0sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd192ZXJzaW9uIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1MTYgYmNkVVNCOworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwliY2RVU0IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZFVTQik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTJ4LiUwMnhcbiIsIGJjZFVTQiA+PiA4LCBiY2RVU0IgJiAweGZmKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBzaG93X3ZlcnNpb24sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19tYXhjaGlsZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWRcbiIsIHVkZXYtPm1heGNoaWxkKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtYXhjaGlsZCwgU19JUlVHTywgc2hvd19tYXhjaGlsZCwgTlVMTCk7CisKKy8qIERlc2NyaXB0b3IgZmllbGRzICovCisjZGVmaW5lIHVzYl9kZXNjcmlwdG9yX2F0dHJfbGUxNihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwkJCQkJCQkJCVwKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLCAJCQkJXAorCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5maWVsZCkpOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2Rlc2NyaXB0b3JfYXR0cl9sZTE2KGlkVmVuZG9yLCAiJTA0eFxuIikKK3VzYl9kZXNjcmlwdG9yX2F0dHJfbGUxNihpZFByb2R1Y3QsICIlMDR4XG4iKQordXNiX2Rlc2NyaXB0b3JfYXR0cl9sZTE2KGJjZERldmljZSwgIiUwNHhcbiIpCisKKyNkZWZpbmUgdXNiX2Rlc2NyaXB0b3JfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwkJCQkJCQkJCVwKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLCB1ZGV2LT5kZXNjcmlwdG9yLmZpZWxkKTsJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2Rlc2NyaXB0b3JfYXR0ciAoYkRldmljZUNsYXNzLCAiJTAyeFxuIikKK3VzYl9kZXNjcmlwdG9yX2F0dHIgKGJEZXZpY2VTdWJDbGFzcywgIiUwMnhcbiIpCit1c2JfZGVzY3JpcHRvcl9hdHRyIChiRGV2aWNlUHJvdG9jb2wsICIlMDJ4XG4iKQordXNiX2Rlc2NyaXB0b3JfYXR0ciAoYk51bUNvbmZpZ3VyYXRpb25zLCAiJWRcbiIpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkvKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24ncyBhdHRyaWJ1dGVzICovCisJJmRldl9hdHRyX2JOdW1JbnRlcmZhY2VzLmF0dHIsCisJJmRldl9hdHRyX2JDb25maWd1cmF0aW9uVmFsdWUuYXR0ciwKKwkmZGV2X2F0dHJfYm1BdHRyaWJ1dGVzLmF0dHIsCisJJmRldl9hdHRyX2JNYXhQb3dlci5hdHRyLAorCS8qIGRldmljZSBhdHRyaWJ1dGVzICovCisJJmRldl9hdHRyX2lkVmVuZG9yLmF0dHIsCisJJmRldl9hdHRyX2lkUHJvZHVjdC5hdHRyLAorCSZkZXZfYXR0cl9iY2REZXZpY2UuYXR0ciwKKwkmZGV2X2F0dHJfYkRldmljZUNsYXNzLmF0dHIsCisJJmRldl9hdHRyX2JEZXZpY2VTdWJDbGFzcy5hdHRyLAorCSZkZXZfYXR0cl9iRGV2aWNlUHJvdG9jb2wuYXR0ciwKKwkmZGV2X2F0dHJfYk51bUNvbmZpZ3VyYXRpb25zLmF0dHIsCisJJmRldl9hdHRyX3NwZWVkLmF0dHIsCisJJmRldl9hdHRyX2Rldm51bS5hdHRyLAorCSZkZXZfYXR0cl92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX21heGNoaWxkLmF0dHIsCisJTlVMTCwKK307CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gZGV2X2F0dHJzLAorfTsKKwordm9pZCB1c2JfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKKworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCWRldmljZV9jcmVhdGVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfbWFudWZhY3R1cmVyKTsKKwlpZiAodWRldi0+cHJvZHVjdCkKKwkJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9wcm9kdWN0KTsKKwlpZiAodWRldi0+c2VyaWFsKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9jb25maWd1cmF0aW9uKTsKK30KKwordm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tYW51ZmFjdHVyZXIpOworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0KQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdCk7CisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcikKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlIChkZXYsICZkZXZfYXR0cl9jb25maWd1cmF0aW9uKTsKK30KKworLyogSW50ZXJmYWNlIGZpZWxkcyAqLworI2RlZmluZSB1c2JfaW50Zl9hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UgKGRldik7CQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgZm9ybWF0X3N0cmluZywgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuZmllbGQpOyBcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLCBzaG93XyMjZmllbGQsIE5VTEwpOworCit1c2JfaW50Zl9hdHRyIChiSW50ZXJmYWNlTnVtYmVyLCAiJTAyeFxuIikKK3VzYl9pbnRmX2F0dHIgKGJBbHRlcm5hdGVTZXR0aW5nLCAiJTJkXG4iKQordXNiX2ludGZfYXR0ciAoYk51bUVuZHBvaW50cywgIiUwMnhcbiIpCit1c2JfaW50Zl9hdHRyIChiSW50ZXJmYWNlQ2xhc3MsICIlMDJ4XG4iKQordXNiX2ludGZfYXR0ciAoYkludGVyZmFjZVN1YkNsYXNzLCAiJTAyeFxuIikKK3VzYl9pbnRmX2F0dHIgKGJJbnRlcmZhY2VQcm90b2NvbCwgIiUwMnhcbiIpCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW50ZXJmYWNlX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgbGVuOworCisJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UgKGRldik7CisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgMjU2LCAiJXMiLCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIDA7CisJYnVmW2xlbl0gPSAnXG4nOworCWJ1ZltsZW4rMV0gPSAwOworCXJldHVybiBsZW4rMTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihpbnRlcmZhY2UsIFNfSVJVR08sIHNob3dfaW50ZXJmYWNlX3N0cmluZywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppbnRmX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2JJbnRlcmZhY2VOdW1iZXIuYXR0ciwKKwkmZGV2X2F0dHJfYkFsdGVybmF0ZVNldHRpbmcuYXR0ciwKKwkmZGV2X2F0dHJfYk51bUVuZHBvaW50cy5hdHRyLAorCSZkZXZfYXR0cl9iSW50ZXJmYWNlQ2xhc3MuYXR0ciwKKwkmZGV2X2F0dHJfYkludGVyZmFjZVN1YkNsYXNzLmF0dHIsCisJJmRldl9hdHRyX2JJbnRlcmZhY2VQcm90b2NvbC5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW50Zl9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBpbnRmX2F0dHJzLAorfTsKKwordm9pZCB1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZpbnRmX2F0dHJfZ3JwKTsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7CisJCQorfQorCit2b2lkIHVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmludGZfYXR0cl9ncnApOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKTsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4MzhmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTAsMCArMSw1MTEgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJoY2QuaCIKKworI2RlZmluZSB0b191cmIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1cmIsIGtyZWYpCisKK3N0YXRpYyB2b2lkIHVyYl9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHRvX3VyYihrcmVmKTsKKwlrZnJlZSh1cmIpOworfQorCisvKioKKyAqIHVzYl9pbml0X3VyYiAtIGluaXRpYWxpemVzIGEgdXJiIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYnkgYSBVU0IgZHJpdmVyCisgKiBAdXJiOiBwb2ludGVyIHRvIHRoZSB1cmIgdG8gaW5pdGlhbGl6ZQorICoKKyAqIEluaXRpYWxpemVzIGEgdXJiIHNvIHRoYXQgdGhlIFVTQiBzdWJzeXN0ZW0gY2FuIHVzZSBpdCBwcm9wZXJseS4KKyAqCisgKiBJZiBhIHVyYiBpcyBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIHVzYl9hbGxvY191cmIoKSBpdCBpcyBub3QKKyAqIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgZnVuY3Rpb24uICBPbmx5IHVzZSB0aGlzIGlmIHlvdSBhbGxvY2F0ZSB0aGUKKyAqIHNwYWNlIGZvciBhIHN0cnVjdCB1cmIgb24geW91ciBvd24uICBJZiB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uLCBiZQorICogY2FyZWZ1bCB3aGVuIGZyZWVpbmcgdGhlIG1lbW9yeSBmb3IgeW91ciB1cmIgdGhhdCBpdCBpcyBubyBsb25nZXIgaW4KKyAqIHVzZSBieSB0aGUgVVNCIGNvcmUuCisgKgorICogT25seSB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgX3JlYWxseV8gdW5kZXJzdGFuZCB3aGF0IHlvdSBhcmUgZG9pbmcuCisgKi8KK3ZvaWQgdXNiX2luaXRfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXJiKSB7CisJCW1lbXNldCh1cmIsIDAsIHNpemVvZigqdXJiKSk7CisJCWtyZWZfaW5pdCgmdXJiLT5rcmVmKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CisJfQorfQorCisvKioKKyAqIHVzYl9hbGxvY191cmIgLSBjcmVhdGVzIGEgbmV3IHVyYiBmb3IgYSBVU0IgZHJpdmVyIHRvIHVzZQorICogQGlzb19wYWNrZXRzOiBudW1iZXIgb2YgaXNvIHBhY2tldHMgZm9yIHRoaXMgdXJiCisgKiBAbWVtX2ZsYWdzOiB0aGUgdHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUsIHNlZSBrbWFsbG9jKCkgZm9yIGEgbGlzdCBvZgorICoJdmFsaWQgb3B0aW9ucyBmb3IgdGhpcy4KKyAqCisgKiBDcmVhdGVzIGFuIHVyYiBmb3IgdGhlIFVTQiBkcml2ZXIgdG8gdXNlLCBpbml0aWFsaXplcyBhIGZldyBpbnRlcm5hbAorICogc3RydWN0dXJlcywgaW5jcmVtZW50ZXMgdGhlIHVzYWdlIGNvdW50ZXIsIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4KKyAqCisgKiBJZiBubyBtZW1vcnkgaXMgYXZhaWxhYmxlLCBOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIElmIHRoZSBkcml2ZXIgd2FudCB0byB1c2UgdGhpcyB1cmIgZm9yIGludGVycnVwdCwgY29udHJvbCwgb3IgYnVsaworICogZW5kcG9pbnRzLCBwYXNzICcwJyBhcyB0aGUgbnVtYmVyIG9mIGlzbyBwYWNrZXRzLgorICoKKyAqIFRoZSBkcml2ZXIgbXVzdCBjYWxsIHVzYl9mcmVlX3VyYigpIHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCB0aGUgdXJiLgorICovCitzdHJ1Y3QgdXJiICp1c2JfYWxsb2NfdXJiKGludCBpc29fcGFja2V0cywgaW50IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwl1cmIgPSAoc3RydWN0IHVyYiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1cmIpICsgCisJCWlzb19wYWNrZXRzICogc2l6ZW9mKHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yKSwKKwkJbWVtX2ZsYWdzKTsKKwlpZiAoIXVyYikgeworCQllcnIoImFsbG9jX3VyYjoga21hbGxvYyBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXVzYl9pbml0X3VyYih1cmIpOworCXJldHVybiB1cmI7Cit9CisKKy8qKgorICogdXNiX2ZyZWVfdXJiIC0gZnJlZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IGEgdXJiIHdoZW4gYWxsIHVzZXJzIG9mIGl0IGFyZSBmaW5pc2hlZAorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIGZyZWUsIG1heSBiZSBOVUxMCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hlbiBhIHVzZXIgb2YgYSB1cmIgaXMgZmluaXNoZWQgd2l0aCBpdC4gIFdoZW4gdGhlIGxhc3QgdXNlcgorICogb2YgdGhlIHVyYiBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0aGUgbWVtb3J5IG9mIHRoZSB1cmIgaXMgZnJlZWQuCisgKgorICogTm90ZTogVGhlIHRyYW5zZmVyIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIHVyYiBpcyBub3QgZnJlZWQsIHRoYXQgbXVzdCBiZQorICogZG9uZSBlbHNld2hlcmUuCisgKi8KK3ZvaWQgdXNiX2ZyZWVfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXJiKQorCQlrcmVmX3B1dCgmdXJiLT5rcmVmLCB1cmJfZGVzdHJveSk7Cit9CisKKy8qKgorICogdXNiX2dldF91cmIgLSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHVyYgorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIG1vZGlmeSwgbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIG11c3QgYmUgIGNhbGxlZCB3aGVuZXZlciBhIHVyYiBpcyB0cmFuc2ZlcnJlZCBmcm9tIGEgZGV2aWNlIGRyaXZlciB0byBhCisgKiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiAgVGhpcyBhbGxvd3MgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyB0byBoYXBwZW4KKyAqIGZvciB1cmJzLgorICoKKyAqIEEgcG9pbnRlciB0byB0aGUgdXJiIHdpdGggdGhlIGluY3JlbWVudGVkIHJlZmVyZW5jZSBjb3VudGVyIGlzIHJldHVybmVkLgorICovCitzdHJ1Y3QgdXJiICogdXNiX2dldF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICh1cmIpCisJCWtyZWZfZ2V0KCZ1cmItPmtyZWYpOworCXJldHVybiB1cmI7Cit9CisJCQorCQkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX3N1Ym1pdF91cmIgLSBpc3N1ZSBhbiBhc3luY2hyb25vdXMgdHJhbnNmZXIgcmVxdWVzdCBmb3IgYW4gZW5kcG9pbnQKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdGhlIHVyYiBkZXNjcmliaW5nIHRoZSByZXF1ZXN0CisgKiBAbWVtX2ZsYWdzOiB0aGUgdHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUsIHNlZSBrbWFsbG9jKCkgZm9yIGEgbGlzdAorICoJb2YgdmFsaWQgb3B0aW9ucyBmb3IgdGhpcy4KKyAqCisgKiBUaGlzIHN1Ym1pdHMgYSB0cmFuc2ZlciByZXF1ZXN0LCBhbmQgdHJhbnNmZXJzIGNvbnRyb2wgb2YgdGhlIFVSQgorICogZGVzY3JpYmluZyB0aGF0IHJlcXVlc3QgdG8gdGhlIFVTQiBzdWJzeXN0ZW0uICBSZXF1ZXN0IGNvbXBsZXRpb24gd2lsbAorICogYmUgaW5kaWNhdGVkIGxhdGVyLCBhc3luY2hyb25vdXNseSwgYnkgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorICogVGhlIHRocmVlIHR5cGVzIG9mIGNvbXBsZXRpb24gYXJlIHN1Y2Nlc3MsIGVycm9yLCBhbmQgdW5saW5rCisgKiAoYSBzb2Z0d2FyZS1pbmR1Y2VkIGZhdWx0LCBhbHNvIGNhbGxlZCAicmVxdWVzdCBjYW5jZWxhdGlvbiIpLiAgCisgKgorICogVVJCcyBtYXkgYmUgc3VibWl0dGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGNvcnJlY3RseSBpbml0aWFsaXplZCB0aGUgVVJCIGJlZm9yZSBzdWJtaXR0aW5nCisgKiBpdC4gIEZ1bmN0aW9ucyBzdWNoIGFzIHVzYl9maWxsX2J1bGtfdXJiKCkgYW5kIHVzYl9maWxsX2NvbnRyb2xfdXJiKCkgYXJlCisgKiBhdmFpbGFibGUgdG8gZW5zdXJlIHRoYXQgbW9zdCBmaWVsZHMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCwgZm9yCisgKiB0aGUgcGFydGljdWxhciBraW5kIG9mIHRyYW5zZmVyLCBhbHRob3VnaCB0aGV5IHdpbGwgbm90IGluaXRpYWxpemUKKyAqIGFueSB0cmFuc2ZlciBmbGFncy4KKyAqCisgKiBTdWNjZXNzZnVsIHN1Ym1pc3Npb25zIHJldHVybiAwOyBvdGhlcndpc2UgdGhpcyByb3V0aW5lIHJldHVybnMgYQorICogbmVnYXRpdmUgZXJyb3IgbnVtYmVyLiAgSWYgdGhlIHN1Ym1pc3Npb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvbXBsZXRlKCkKKyAqIGNhbGxiYWNrIGZyb20gdGhlIFVSQiB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UsIHdoZW4gdGhlIFVTQiBjb3JlIGFuZAorICogSG9zdCBDb250cm9sbGVyIERyaXZlciAoSENEKSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgVVJCLiAgV2hlbiB0aGUgY29tcGxldGlvbgorICogZnVuY3Rpb24gaXMgY2FsbGVkLCBjb250cm9sIG9mIHRoZSBVUkIgaXMgcmV0dXJuZWQgdG8gdGhlIGRldmljZQorICogZHJpdmVyIHdoaWNoIGlzc3VlZCB0aGUgcmVxdWVzdC4gIFRoZSBjb21wbGV0aW9uIGhhbmRsZXIgbWF5IHRoZW4KKyAqIGltbWVkaWF0ZWx5IGZyZWUgb3IgcmV1c2UgdGhhdCBVUkIuCisgKgorICogV2l0aCBmZXcgZXhjZXB0aW9ucywgVVNCIGRldmljZSBkcml2ZXJzIHNob3VsZCBuZXZlciBhY2Nlc3MgVVJCIGZpZWxkcworICogcHJvdmlkZWQgYnkgdXNiY29yZSBvciB0aGUgSENEIHVudGlsIGl0cyBjb21wbGV0ZSgpIGlzIGNhbGxlZC4KKyAqIFRoZSBleGNlcHRpb25zIHJlbGF0ZSB0byBwZXJpb2RpYyB0cmFuc2ZlciBzY2hlZHVsaW5nLiAgRm9yIGJvdGgKKyAqIGludGVycnVwdCBhbmQgaXNvY2hyb25vdXMgdXJicywgYXMgcGFydCBvZiBzdWNjZXNzZnVsIFVSQiBzdWJtaXNzaW9uCisgKiB1cmItPmludGVydmFsIGlzIG1vZGlmaWVkIHRvIHJlZmxlY3QgdGhlIGFjdHVhbCB0cmFuc2ZlciBwZXJpb2QgdXNlZAorICogKG5vcm1hbGx5IHNvbWUgcG93ZXIgb2YgdHdvIHVuaXRzKS4gIEFuZCBmb3IgaXNvY2hyb25vdXMgdXJicywKKyAqIHVyYi0+c3RhcnRfZnJhbWUgaXMgbW9kaWZpZWQgdG8gcmVmbGVjdCB3aGVuIHRoZSBVUkIncyB0cmFuc2ZlcnMgd2VyZQorICogc2NoZWR1bGVkIHRvIHN0YXJ0LiAgTm90IGFsbCBpc29jaHJvbm91cyB0cmFuc2ZlciBzY2hlZHVsaW5nIHBvbGljaWVzCisgKiB3aWxsIHdvcmssIGJ1dCBtb3N0IGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHNob3VsZCBlYXNpbHkgaGFuZGxlIElTTworICogcXVldWVzIGdvaW5nIGZyb20gbm93IHVudGlsIDEwLTIwMCBtc2VjIGludG8gdGhlIGZ1dHVyZS4KKyAqCisgKiBGb3IgY29udHJvbCBlbmRwb2ludHMsIHRoZSBzeW5jaHJvbm91cyB1c2JfY29udHJvbF9tc2coKSBjYWxsIGlzCisgKiBvZnRlbiB1c2VkIChpbiBub24taW50ZXJydXB0IGNvbnRleHQpIGluc3RlYWQgb2YgdGhpcyBjYWxsLgorICogVGhhdCBpcyBvZnRlbiB1c2VkIHRocm91Z2ggY29udmVuaWVuY2Ugd3JhcHBlcnMsIGZvciB0aGUgcmVxdWVzdHMKKyAqIHRoYXQgYXJlIHN0YW5kYXJkaXplZCBpbiB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uLiAgRm9yIGJ1bGsKKyAqIGVuZHBvaW50cywgYSBzeW5jaHJvbm91cyB1c2JfYnVsa19tc2coKSBjYWxsIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBSZXF1ZXN0IFF1ZXVpbmc6CisgKgorICogVVJCcyBtYXkgYmUgc3VibWl0dGVkIHRvIGVuZHBvaW50cyBiZWZvcmUgcHJldmlvdXMgb25lcyBjb21wbGV0ZSwgdG8KKyAqIG1pbmltaXplIHRoZSBpbXBhY3Qgb2YgaW50ZXJydXB0IGxhdGVuY2llcyBhbmQgc3lzdGVtIG92ZXJoZWFkIG9uIGRhdGEKKyAqIHRocm91Z2hwdXQuICBXaXRoIHRoYXQgcXVldWluZyBwb2xpY3ksIGFuIGVuZHBvaW50J3MgcXVldWUgd291bGQgbmV2ZXIKKyAqIGJlIGVtcHR5LiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgY29udGludW91cyBpc29jaHJvbm91cyBkYXRhIHN0cmVhbXMsCisgKiBhbmQgbWF5IGFsc28gYmUgcmVxdWlyZWQgZm9yIHNvbWUga2luZHMgb2YgaW50ZXJydXB0IHRyYW5zZmVycy4gU3VjaAorICogcXVldWluZyBhbHNvIG1heGltaXplcyBiYW5kd2lkdGggdXRpbGl6YXRpb24gYnkgbGV0dGluZyBVU0IgY29udHJvbGxlcnMKKyAqIHN0YXJ0IHdvcmsgb24gbGF0ZXIgcmVxdWVzdHMgYmVmb3JlIGRyaXZlciBzb2Z0d2FyZSBoYXMgZmluaXNoZWQgdGhlCisgKiBjb21wbGV0aW9uIHByb2Nlc3NpbmcgZm9yIGVhcmxpZXIgKHN1Y2Nlc3NmdWwpIHJlcXVlc3RzLgorICoKKyAqIEFzIG9mIExpbnV4IDIuNiwgYWxsIFVTQiBlbmRwb2ludCB0cmFuc2ZlciBxdWV1ZXMgc3VwcG9ydCBkZXB0aHMgZ3JlYXRlcgorICogdGhhbiBvbmUuICBUaGlzIHdhcyBwcmV2aW91c2x5IGEgSENELXNwZWNpZmljIGJlaGF2aW9yLCBleGNlcHQgZm9yIElTTworICogdHJhbnNmZXJzLiAgTm9uLWlzb2Nocm9ub3VzIGVuZHBvaW50IHF1ZXVlcyBhcmUgaW5hY3RpdmUgZHVyaW5nIGNsZWFudXAKKyAqIGFmdGVyIGZhdWx0cyAodHJhbnNmZXIgZXJyb3JzIG9yIGNhbmNlbGF0aW9uKS4KKyAqCisgKiBSZXNlcnZlZCBCYW5kd2lkdGggVHJhbnNmZXJzOgorICoKKyAqIFBlcmlvZGljIHRyYW5zZmVycyAoaW50ZXJydXB0IG9yIGlzb2Nocm9ub3VzKSBhcmUgcGVyZm9ybWVkIHJlcGVhdGVkbHksCisgKiB1c2luZyB0aGUgaW50ZXJ2YWwgc3BlY2lmaWVkIGluIHRoZSB1cmIuICBTdWJtaXR0aW5nIHRoZSBmaXJzdCB1cmIgdG8KKyAqIHRoZSBlbmRwb2ludCByZXNlcnZlcyB0aGUgYmFuZHdpZHRoIG5lY2Vzc2FyeSB0byBtYWtlIHRob3NlIHRyYW5zZmVycy4KKyAqIElmIHRoZSBVU0Igc3Vic3lzdGVtIGNhbid0IGFsbG9jYXRlIHN1ZmZpY2llbnQgYmFuZHdpZHRoIHRvIHBlcmZvcm0KKyAqIHRoZSBwZXJpb2RpYyByZXF1ZXN0LCBzdWJtaXR0aW5nIHN1Y2ggYSBwZXJpb2RpYyByZXF1ZXN0IHNob3VsZCBmYWlsLgorICoKKyAqIERldmljZSBkcml2ZXJzIG11c3QgZXhwbGljaXRseSByZXF1ZXN0IHRoYXQgcmVwZXRpdGlvbiwgYnkgZW5zdXJpbmcgdGhhdAorICogc29tZSBVUkIgaXMgYWx3YXlzIG9uIHRoZSBlbmRwb2ludCdzIHF1ZXVlIChleGNlcHQgcG9zc2libHkgZm9yIHNob3J0CisgKiBwZXJpb2RzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxhY2tzKS4gIFdoZW4gdGhlcmUgaXMgbm8gbG9uZ2VyIGFuIHVyYgorICogcXVldWVkLCB0aGUgZW5kcG9pbnQncyBiYW5kd2lkdGggcmVzZXJ2YXRpb24gaXMgY2FuY2VsZWQuICBUaGlzIG1lYW5zCisgKiBkcml2ZXJzIGNhbiB1c2UgdGhlaXIgY29tcGxldGlvbiBoYW5kbGVycyB0byBlbnN1cmUgdGhleSBrZWVwIGJhbmR3aWR0aAorICogdGhleSBuZWVkLCBieSByZWluaXRpYWxpemluZyBhbmQgcmVzdWJtaXR0aW5nIHRoZSBqdXN0LWNvbXBsZXRlZCB1cmIKKyAqIHVudGlsIHRoZSBkcml2ZXIgbG9uZ2VyIG5lZWRzIHRoYXQgcGVyaW9kaWMgYmFuZHdpZHRoLgorICoKKyAqIE1lbW9yeSBGbGFnczoKKyAqCisgKiBUaGUgZ2VuZXJhbCBydWxlcyBmb3IgaG93IHRvIGRlY2lkZSB3aGljaCBtZW1fZmxhZ3MgdG8gdXNlCisgKiBhcmUgdGhlIHNhbWUgYXMgZm9yIGttYWxsb2MuICBUaGVyZSBhcmUgZm91cgorICogZGlmZmVyZW50IHBvc3NpYmxlIHZhbHVlczsgR0ZQX0tFUk5FTCwgR0ZQX05PRlMsIEdGUF9OT0lPIGFuZAorICogR0ZQX0FUT01JQy4KKyAqCisgKiBHRlBfTk9GUyBpcyBub3QgZXZlciB1c2VkLCBhcyBpdCBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LgorICoKKyAqIEdGUF9BVE9NSUMgaXMgdXNlZCB3aGVuCisgKiAgIChhKSB5b3UgYXJlIGluc2lkZSBhIGNvbXBsZXRpb24gaGFuZGxlciwgYW4gaW50ZXJydXB0LCBib3R0b20gaGFsZiwKKyAqICAgICAgIHRhc2tsZXQgb3IgdGltZXIsIG9yCisgKiAgIChiKSB5b3UgYXJlIGhvbGRpbmcgYSBzcGlubG9jayBvciByd2xvY2sgKGRvZXMgbm90IGFwcGx5IHRvCisgKiAgICAgICBzZW1hcGhvcmVzKSwgb3IKKyAqICAgKGMpIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORywgdGhpcyBpcyB0aGUgY2FzZSBvbmx5IGFmdGVyCisgKiAgICAgICB5b3UndmUgY2hhbmdlZCBpdC4KKyAqIAorICogR0ZQX05PSU8gaXMgdXNlZCBpbiB0aGUgYmxvY2sgaW8gcGF0aCBhbmQgZXJyb3IgaGFuZGxpbmcgb2Ygc3RvcmFnZQorICogZGV2aWNlcy4KKyAqCisgKiBBbGwgb3RoZXIgc2l0dWF0aW9ucyB1c2UgR0ZQX0tFUk5FTC4KKyAqCisgKiBTb21lIG1vcmUgc3BlY2lmaWMgcnVsZXMgZm9yIG1lbV9mbGFncyBjYW4gYmUgaW5mZXJyZWQsIHN1Y2ggYXMKKyAqICAoMSkgc3RhcnRfeG1pdCwgdGltZW91dCwgYW5kIHJlY2VpdmUgbWV0aG9kcyBvZiBuZXR3b3JrIGRyaXZlcnMgbXVzdAorICogICAgICB1c2UgR0ZQX0FUT01JQyAodGhleSBhcmUgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkKTsKKyAqICAoMikgcXVldWVjb21tYW5kIG1ldGhvZHMgb2Ygc2NzaSBkcml2ZXJzIG11c3QgdXNlIEdGUF9BVE9NSUMgKGFsc28KKyAqICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkKTsKKyAqICAoMykgSWYgeW91IHVzZSBhIGtlcm5lbCB0aHJlYWQgd2l0aCBhIG5ldHdvcmsgZHJpdmVyIHlvdSBtdXN0IHVzZQorICogICAgICBHRlBfTk9JTywgdW5sZXNzIChiKSBvciAoYykgYXBwbHk7CisgKiAgKDQpIGFmdGVyIHlvdSBoYXZlIGRvbmUgYSBkb3duKCkgeW91IGNhbiB1c2UgR0ZQX0tFUk5FTCwgdW5sZXNzIChiKSBvciAoYykKKyAqICAgICAgYXBwbHkgb3IgeW91ciBhcmUgaW4gYSBzdG9yYWdlIGRyaXZlcidzIGJsb2NrIGlvIHBhdGg7CisgKiAgKDUpIFVTQiBwcm9iZSBhbmQgZGlzY29ubmVjdCBjYW4gdXNlIEdGUF9LRVJORUwgdW5sZXNzIChiKSBvciAoYykgYXBwbHk7IGFuZAorICogICg2KSBjaGFuZ2luZyBmaXJtd2FyZSBvbiBhIHJ1bm5pbmcgc3RvcmFnZSBvciBuZXQgZGV2aWNlIHVzZXMKKyAqICAgICAgR0ZQX05PSU8sIHVubGVzcyBiKSBvciBjKSBhcHBseQorICoKKyAqLworaW50IHVzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwlpbnQJCQlwaXBlLCB0ZW1wLCBtYXg7CisJc3RydWN0IHVzYl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgdXNiX29wZXJhdGlvbnMJKm9wOworCWludAkJCWlzX291dDsKKworCWlmICghdXJiIHx8IHVyYi0+aGNwcml2IHx8ICF1cmItPmNvbXBsZXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIShkZXYgPSB1cmItPmRldikgfHwKKwkgICAgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfREVGQVVMVCkgfHwKKwkgICAgKCFkZXYtPmJ1cykgfHwgKGRldi0+ZGV2bnVtIDw9IDApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoIShvcCA9IGRldi0+YnVzLT5vcCkgfHwgIW9wLT5zdWJtaXRfdXJiKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXJiLT5iYW5kd2lkdGggPSAwOworCisJLyogTG90cyBvZiBzYW5pdHkgY2hlY2tzLCBzbyBIQ0RzIGNhbiByZWx5IG9uIGNsZWFuIGRhdGEKKwkgKiBhbmQgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUgdGVzdHMKKwkgKi8KKwlwaXBlID0gdXJiLT5waXBlOworCXRlbXAgPSB1c2JfcGlwZXR5cGUgKHBpcGUpOworCWlzX291dCA9IHVzYl9waXBlb3V0IChwaXBlKTsKKworCWlmICghdXNiX3BpcGVjb250cm9sIChwaXBlKSAmJiBkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHVybiAtRU5PREVWOworCisJLyogRklYTUUgdGhlcmUgc2hvdWxkIGJlIGEgc2hhcmFibGUgbG9jayBwcm90ZWN0aW5nIHVzIGFnYWluc3QKKwkgKiBjb25maWcvYWx0c2V0dGluZyBjaGFuZ2VzIGFuZCBkaXNjb25uZWN0cywga2lja2luZyBpbiBoZXJlLgorCSAqIChoZXJlID09IGJlZm9yZSBtYXhwYWNrZXQsIGFuZCBldmVudHVhbGx5IGVuZHBvaW50IHR5cGUsCisJICogY2hlY2tzIGdldCBtYWRlLikKKwkgKi8KKworCW1heCA9IHVzYl9tYXhwYWNrZXQgKGRldiwgcGlwZSwgaXNfb3V0KTsKKwlpZiAobWF4IDw9IDApIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsCisJCQkiYm9ndXMgZW5kcG9pbnQgZXAlZCVzIGluICVzIChiYWQgbWF4cGFja2V0ICVkKVxuIiwKKwkJCXVzYl9waXBlZW5kcG9pbnQgKHBpcGUpLCBpc19vdXQgPyAib3V0IiA6ICJpbiIsCisJCQlfX0ZVTkNUSU9OX18sIG1heCk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJLyogcGVyaW9kaWMgdHJhbnNmZXJzIGxpbWl0IHNpemUgcGVyIGZyYW1lL3VmcmFtZSwKKwkgKiBidXQgZHJpdmVycyBvbmx5IGNvbnRyb2wgdGhvc2Ugc2l6ZXMgZm9yIElTTy4KKwkgKiB3aGlsZSB3ZSdyZSBjaGVja2luZywgaW5pdGlhbGl6ZSByZXR1cm4gc3RhdHVzLgorCSAqLworCWlmICh0ZW1wID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJaW50CW4sIGxlbjsKKworCQkvKiAiaGlnaCBiYW5kd2lkdGgiIG1vZGUsIDEtMyBwYWNrZXRzL3VmcmFtZT8gKi8KKwkJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCWludAltdWx0ID0gMSArICgobWF4ID4+IDExKSAmIDB4MDMpOworCQkJbWF4ICY9IDB4MDdmZjsKKwkJCW1heCAqPSBtdWx0OworCQl9CisKKwkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPD0gMCkJCSAgICAKKwkJCXJldHVybiAtRUlOVkFMOworCQlmb3IgKG4gPSAwOyBuIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgbisrKSB7CisJCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjIFtuXS5sZW5ndGg7CisJCQlpZiAobGVuIDwgMCB8fCBsZW4gPiBtYXgpIAorCQkJCXJldHVybiAtRU1TR1NJWkU7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtuXS5zdGF0dXMgPSAtRVhERVY7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtuXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJfQorCX0KKworCS8qIHRoZSBJL08gYnVmZmVyIG11c3QgYmUgbWFwcGVkL3VubWFwcGVkLCBleGNlcHQgd2hlbiBsZW5ndGg9MCAqLworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCAwKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisjaWZkZWYgREVCVUcKKwkvKiBzdHVmZiB0aGF0IGRyaXZlcnMgc2hvdWxkbid0IGRvLCBidXQgd2hpY2ggc2hvdWxkbid0CisJICogY2F1c2UgcHJvYmxlbXMgaW4gSENEcyBpZiB0aGV5IGdldCBpdCB3cm9uZy4KKwkgKi8KKwl7CisJdW5zaWduZWQgaW50CW9yaWdfZmxhZ3MgPSB1cmItPnRyYW5zZmVyX2ZsYWdzOworCXVuc2lnbmVkIGludAlhbGxvd2VkOworCisJLyogZW5mb3JjZSBzaW1wbGUvc3RhbmRhcmQgcG9saWN5ICovCisJYWxsb3dlZCA9IFVSQl9BU1lOQ19VTkxJTks7CS8vIGFmZmVjdHMgbGF0ZXIgdW5saW5rcworCWFsbG93ZWQgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX1NFVFVQX0RNQV9NQVApOworCWFsbG93ZWQgfD0gVVJCX05PX0lOVEVSUlVQVDsKKwlzd2l0Y2ggKHRlbXApIHsKKwljYXNlIFBJUEVfQlVMSzoKKwkJaWYgKGlzX291dCkKKwkJCWFsbG93ZWQgfD0gVVJCX1pFUk9fUEFDS0VUOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgUElQRV9DT05UUk9MOgorCQlhbGxvd2VkIHw9IFVSQl9OT19GU0JSOwkvKiBvbmx5IGFmZmVjdHMgVUhDSSAqLworCQkvKiBGQUxMVEhST1VHSCAqLworCWRlZmF1bHQ6CQkJLyogYWxsIG5vbi1pc28gZW5kcG9pbnRzICovCisJCWlmICghaXNfb3V0KQorCQkJYWxsb3dlZCB8PSBVUkJfU0hPUlRfTk9UX09LOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWFsbG93ZWQgfD0gVVJCX0lTT19BU0FQOworCQlicmVhazsKKwl9CisJdXJiLT50cmFuc2Zlcl9mbGFncyAmPSBhbGxvd2VkOworCisJLyogZmFpbCBpZiBzdWJtaXR0ZXIgZ2F2ZSBib2d1cyBmbGFncyAqLworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICE9IG9yaWdfZmxhZ3MpIHsKKwkJZXJyICgiQk9HVVMgdXJiIGZsYWdzLCAleCAtLT4gJXgiLAorCQkJb3JpZ19mbGFncywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl9CisjZW5kaWYKKwkvKgorCSAqIEZvcmNlIHBlcmlvZGljIHRyYW5zZmVyIGludGVydmFscyB0byBiZSBsZWdhbCB2YWx1ZXMgdGhhdCBhcmUKKwkgKiBhIHBvd2VyIG9mIHR3byAoc28gSENEcyBkb24ndCBuZWVkIHRvKS4KKwkgKgorCSAqIEZJWE1FIHdhbnQgYnVzLT57aW50cixpc299X3NjaGVkX2hvcml6b24gdmFsdWVzIGhlcmUuICBFYWNoIEhDCisJICogc3VwcG9ydHMgZGlmZmVyZW50IHZhbHVlcy4uLiB0aGlzIHVzZXMgRUhDSS9VSENJIGRlZmF1bHRzIChhbmQKKwkgKiBFSENJIGNhbiB1c2Ugc21hbGxlciBub24tZGVmYXVsdCB2YWx1ZXMpLgorCSAqLworCXN3aXRjaCAodGVtcCkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkvKiB0b28gc21hbGw/ICovCisJCWlmICh1cmItPmludGVydmFsIDw9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogdG9vIGJpZz8gKi8KKwkJc3dpdGNoIChkZXYtPnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CS8qIHVuaXRzIGFyZSBtaWNyb2ZyYW1lcyAqLworCQkJLy8gTk9URSB1c2IgaGFuZGxlcyAyXjE1CisJCQlpZiAodXJiLT5pbnRlcnZhbCA+ICgxMDI0ICogOCkpCisJCQkJdXJiLT5pbnRlcnZhbCA9IDEwMjQgKiA4OworCQkJdGVtcCA9IDEwMjQgKiA4OworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CS8qIHVuaXRzIGFyZSBmcmFtZXMvbXNlYyAqLworCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQlpZiAodGVtcCA9PSBQSVBFX0lOVEVSUlVQVCkgeworCQkJCWlmICh1cmItPmludGVydmFsID4gMjU1KQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkvLyBOT1RFIG9oY2kgb25seSBoYW5kbGVzIHVwIHRvIDMyCisJCQkJdGVtcCA9IDEyODsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPiAxMDI0KQorCQkJCQl1cmItPmludGVydmFsID0gMTAyNDsKKwkJCQkvLyBOT1RFIHVzYiBhbmQgb2hjaSBoYW5kbGUgdXAgdG8gMl4xNQorCQkJCXRlbXAgPSAxMDI0OworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBwb3dlciBvZiB0d28/ICovCisJCXdoaWxlICh0ZW1wID4gdXJiLT5pbnRlcnZhbCkKKwkJCXRlbXAgPj49IDE7CisJCXVyYi0+aW50ZXJ2YWwgPSB0ZW1wOworCX0KKworCXJldHVybiBvcC0+c3VibWl0X3VyYiAodXJiLCBtZW1fZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl91bmxpbmtfdXJiIC0gYWJvcnQvY2FuY2VsIGEgdHJhbnNmZXIgcmVxdWVzdCBmb3IgYW4gZW5kcG9pbnQKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdXJiIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgVVJCcyBjb21wbGV0ZSBvbmx5CisgKiBvbmNlIHBlciBzdWJtaXNzaW9uLCBhbmQgbWF5IGJlIGNhbmNlbGVkIG9ubHkgb25jZSBwZXIgc3VibWlzc2lvbi4KKyAqIFN1Y2Nlc3NmdWwgY2FuY2VsYXRpb24gbWVhbnMgdGhlIHJlcXVlc3RzJ3MgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwKKyAqIGJlIGNhbGxlZCB3aXRoIGEgc3RhdHVzIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGhhcyBiZWVuCisgKiBjYW5jZWxlZCAocmF0aGVyIHRoYW4gYW55IG90aGVyIGNvZGUpIGFuZCB3aWxsIHF1aWNrbHkgYmUgcmVtb3ZlZAorICogZnJvbSBob3N0IGNvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIEluIHRoZSBwYXN0LCBjbGVhcmluZyB0aGUgVVJCX0FTWU5DX1VOTElOSyB0cmFuc2ZlciBmbGFnIGZvciB0aGUKKyAqIFVSQiBpbmRpY2F0ZWQgdGhhdCB0aGUgcmVxdWVzdCB3YXMgc3luY2hyb25vdXMuICBUaGlzIHVzYWdlIGlzIG5vdworICogZGVwcmVjYXRlZDsgaWYgdGhlIGZsYWcgaXMgY2xlYXIgdGhlIGNhbGwgd2lsbCBiZSBmb3J3YXJkZWQgdG8KKyAqIHVzYl9raWxsX3VyYigpIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMC4gIEluIHRoZSBmdXR1cmUsIGRyaXZlcnMKKyAqIHNob3VsZCBjYWxsIHVzYl9raWxsX3VyYigpIGRpcmVjdGx5IGZvciBzeW5jaHJvbm91cyB1bmxpbmtpbmcuCisgKgorICogV2hlbiB0aGUgVVJCX0FTWU5DX1VOTElOSyB0cmFuc2ZlciBmbGFnIGZvciB0aGUgVVJCIGlzIHNldCwgdGhpcworICogcmVxdWVzdCBpcyBhc3luY2hyb25vdXMuICBTdWNjZXNzIGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgLUVJTlBST0dSRVNTLAorICogYXQgd2hpY2ggdGltZSB0aGUgVVJCIHdpbGwgbm9ybWFsbHkgaGF2ZSBiZWVuIHVubGlua2VkIGJ1dCBub3QgeWV0CisgKiBnaXZlbiBiYWNrIHRvIHRoZSBkZXZpY2UgZHJpdmVyLiAgV2hlbiBpdCBpcyBjYWxsZWQsIHRoZSBjb21wbGV0aW9uCisgKiBmdW5jdGlvbiB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVC4gIEZhaWx1cmUgaXMgaW5kaWNhdGVkCisgKiBieSBhbnkgb3RoZXIgcmV0dXJuIHZhbHVlLiAgVW5saW5raW5nIHdpbGwgZmFpbCB3aGVuIHRoZSBVUkIgaXMgbm90CisgKiBjdXJyZW50bHkgImxpbmtlZCIgKGkuZS4sIGl0IHdhcyBuZXZlciBzdWJtaXR0ZWQsIG9yIGl0IHdhcyB1bmxpbmtlZAorICogYmVmb3JlLCBvciB0aGUgaGFyZHdhcmUgaXMgYWxyZWFkeSBmaW5pc2hlZCB3aXRoIGl0KSwgZXZlbiBpZiB0aGUKKyAqIGNvbXBsZXRpb24gaGFuZGxlciBoYXMgbm90IHlldCBydW4uCisgKgorICogVW5saW5raW5nIGFuZCBFbmRwb2ludCBRdWV1ZXM6CisgKgorICogSG9zdCBDb250cm9sbGVyIERyaXZlcnMgKEhDRHMpIHBsYWNlIGFsbCB0aGUgVVJCcyBmb3IgYSBwYXJ0aWN1bGFyCisgKiBlbmRwb2ludCBpbiBhIHF1ZXVlLiAgTm9ybWFsbHkgdGhlIHF1ZXVlIGFkdmFuY2VzIGFzIHRoZSBjb250cm9sbGVyCisgKiBoYXJkd2FyZSBwcm9jZXNzZXMgZWFjaCByZXF1ZXN0LiAgQnV0IHdoZW4gYW4gVVJCIHRlcm1pbmF0ZXMgd2l0aCBhbnkKKyAqIGZhdWx0IChzdWNoIGFzIGFuIGVycm9yLCBvciBiZWluZyB1bmxpbmtlZCkgaXRzIHF1ZXVlIHN0b3BzLCBhdCBsZWFzdAorICogdW50aWwgdGhhdCBVUkIncyBjb21wbGV0aW9uIHJvdXRpbmUgcmV0dXJucy4gIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAorICogdGhlIHF1ZXVlIHdpbGwgbm90IHJlc3RhcnQgdW50aWwgYWxsIGl0cyB1bmxpbmtlZCBVUkJzIGhhdmUgYmVlbiBmdWxseQorICogcmV0aXJlZCwgd2l0aCB0aGVpciBjb21wbGV0aW9uIHJvdXRpbmVzIHJ1biwgZXZlbiBpZiB0aGF0J3Mgbm90IHVudGlsCisgKiBzb21lIHRpbWUgYWZ0ZXIgdGhlIG9yaWdpbmFsIGNvbXBsZXRpb24gaGFuZGxlciByZXR1cm5zLgorICoKKyAqIFRoaXMgbWVhbnMgdGhhdCBVU0IgZGV2aWNlIGRyaXZlcnMgY2FuIHNhZmVseSBidWlsZCBkZWVwIHF1ZXVlcyBmb3IKKyAqIGxhcmdlIG9yIGNvbXBsZXggdHJhbnNmZXJzLCBhbmQgY2xlYW4gdGhlbSB1cCByZWxpYWJseSBhZnRlciBhbnkgc29ydAorICogb2YgYWJvcnRlZCB0cmFuc2ZlciBieSB1bmxpbmtpbmcgYWxsIHBlbmRpbmcgVVJCcyBhdCB0aGUgZmlyc3QgZmF1bHQuCisgKgorICogTm90ZSB0aGF0IGFuIFVSQiB0ZXJtaW5hdGluZyBlYXJseSBiZWNhdXNlIGEgc2hvcnQgcGFja2V0IHdhcyByZWNlaXZlZAorICogd2lsbCBjb3VudCBhcyBhbiBlcnJvciBpZiBhbmQgb25seSBpZiB0aGUgVVJCX1NIT1JUX05PVF9PSyBmbGFnIGlzIHNldC4KKyAqIEFsc28sIHRoYXQgYWxsIHVubGlua3MgcGVyZm9ybWVkIGluIGFueSBVUkIgY29tcGxldGlvbiBoYW5kbGVyIG11c3QKKyAqIGJlIGFzeW5jaHJvbm91cy4KKyAqCisgKiBRdWV1ZXMgZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50cyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB0aGV5CisgKiBhZHZhbmNlIGF0IGZpeGVkIHJhdGVzLiAgU3VjaCBxdWV1ZXMgZG8gbm90IHN0b3Agd2hlbiBhbiBVUkIgaXMgdW5saW5rZWQuCisgKiBBbiB1bmxpbmtlZCBVUkIgbWF5IGxlYXZlIGEgZ2FwIGluIHRoZSBzdHJlYW0gb2YgcGFja2V0cy4gIEl0IGlzIHVuZGVmaW5lZAorICogd2hldGhlciBzdWNoIGdhcHMgY2FuIGJlIGZpbGxlZCBpbi4KKyAqCisgKiBXaGVuIGEgY29udHJvbCBVUkIgdGVybWluYXRlcyB3aXRoIGFuIGVycm9yLCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUKKyAqIHN0YXR1cyBzdGFnZSBvZiB0aGUgdHJhbnNmZXIgd2lsbCBub3QgdGFrZSBwbGFjZSwgZXZlbiBpZiBpdCBpcyBtZXJlbHkKKyAqIGEgc29mdCBlcnJvciByZXN1bHRpbmcgZnJvbSBhIHNob3J0LXBhY2tldCB3aXRoIFVSQl9TSE9SVF9OT1RfT0sgc2V0LgorICovCitpbnQgdXNiX3VubGlua191cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICghdXJiKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0FTWU5DX1VOTElOSykpIHsKKyNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAidXNiX3VubGlua191cmIoKSBpcyBkZXByZWNhdGVkIGZvciAiCisJCQkJInN5bmNocm9ub3VzIHVubGlua3MuICBVc2UgdXNiX2tpbGxfdXJiKCkgaW5zdGVhZC5cbiIpOworCQkJV0FSTl9PTigxKTsKKwkJfQorI2VuZGlmCisJCXVzYl9raWxsX3VyYih1cmIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCEodXJiLT5kZXYgJiYgdXJiLT5kZXYtPmJ1cyAmJiB1cmItPmRldi0+YnVzLT5vcCkpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiB1cmItPmRldi0+YnVzLT5vcC0+dW5saW5rX3VyYih1cmIsIC1FQ09OTlJFU0VUKTsKK30KKworLyoqCisgKiB1c2Jfa2lsbF91cmIgLSBjYW5jZWwgYSB0cmFuc2ZlciByZXF1ZXN0IGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2gKKyAqIEB1cmI6IHBvaW50ZXIgdG8gVVJCIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgSXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgKiB1cG9uIHJldHVybiBhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3aWxsIGhhdmUgZmluaXNoZWQgYW5kIHRoZSBVUkIKKyAqIHdpbGwgYmUgdG90YWxseSBpZGxlIGFuZCBhdmFpbGFibGUgZm9yIHJldXNlLiAgVGhlc2UgZmVhdHVyZXMgbWFrZQorICogdGhpcyBhbiBpZGVhbCB3YXkgdG8gc3RvcCBJL08gaW4gYSBkaXNjb25uZWN0KCkgY2FsbGJhY2sgb3IgY2xvc2UoKQorICogZnVuY3Rpb24uICBJZiB0aGUgcmVxdWVzdCBoYXMgbm90IGFscmVhZHkgZmluaXNoZWQgb3IgYmVlbiB1bmxpbmtlZAorICogdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRU5PRU5ULgorICoKKyAqIFdoaWxlIHRoZSByb3V0aW5lIGlzIHJ1bm5pbmcsIGF0dGVtcHRzIHRvIHJlc3VibWl0IHRoZSBVUkIgd2lsbCBmYWlsCisgKiB3aXRoIGVycm9yIC1FUEVSTS4gIFRodXMgZXZlbiBpZiB0aGUgVVJCJ3MgY29tcGxldGlvbiBoYW5kbGVyIGFsd2F5cworICogdHJpZXMgdG8gcmVzdWJtaXQsIGl0IHdpbGwgbm90IHN1Y2NlZWQgYW5kIHRoZSBVUkIgd2lsbCBiZWNvbWUgaWRsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0IChzdWNoIGFzIGEgYm90dG9tCisgKiBoYWxmIG9yIGEgY29tcGxldGlvbiBoYW5kbGVyKSwgb3Igd2hlbiBob2xkaW5nIGEgc3BpbmxvY2ssIG9yIGluIG90aGVyCisgKiBzaXR1YXRpb25zIHdoZXJlIHRoZSBjYWxsZXIgY2FuJ3Qgc2NoZWR1bGUoKS4KKyAqLwordm9pZCB1c2Jfa2lsbF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICghKHVyYiAmJiB1cmItPmRldiAmJiB1cmItPmRldi0+YnVzICYmIHVyYi0+ZGV2LT5idXMtPm9wKSkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CisJKyt1cmItPnJlamVjdDsKKwlzcGluX3VubG9ja19pcnEoJnVyYi0+bG9jayk7CisKKwl1cmItPmRldi0+YnVzLT5vcC0+dW5saW5rX3VyYih1cmIsIC1FTk9FTlQpOworCXdhaXRfZXZlbnQodXNiX2tpbGxfdXJiX3F1ZXVlLCBhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworCisJc3Bpbl9sb2NrX2lycSgmdXJiLT5sb2NrKTsKKwktLXVyYi0+cmVqZWN0OworCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKK30KKworRVhQT1JUX1NZTUJPTCh1c2JfaW5pdF91cmIpOworRVhQT1JUX1NZTUJPTCh1c2JfYWxsb2NfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2ZyZWVfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2dldF91cmIpOworRVhQT1JUX1NZTUJPTCh1c2Jfc3VibWl0X3VyYik7CitFWFBPUlRfU1lNQk9MKHVzYl91bmxpbmtfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2tpbGxfdXJiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1MzRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTAsMCArMSwxNTczIEBACisvKgorICogZHJpdmVycy91c2IvdXNiLmMKKyAqCisgKiAoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqIChDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICogKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OSAobmV3IFVTQiBhcmNoaXRlY3R1cmUpCisgKiAoQykgQ29weXJpZ2h0IFJhbmR5IER1bmxhcCAyMDAwCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMDAtMjAwNAorICogKEMpIENvcHlyaWdodCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIDIwMDAKKyAqICAgICAodXNiX2RldmljZV9pZCBtYXRjaGluZyBjaGFuZ2VzIGJ5IEFkYW0gSi4gUmljaHRlcikKKyAqIChDKSBDb3B5cmlnaHQgR3JlZyBLcm9haC1IYXJ0bWFuIDIwMDItMjAwMworICoKKyAqIE5PVEUhIFRoaXMgaXMgbm90IGFjdHVhbGx5IGEgZHJpdmVyIGF0IGFsbCwgcmF0aGVyIHRoaXMgaXMKKyAqIGp1c3QgYSBjb2xsZWN0aW9uIG9mIGhlbHBlciByb3V0aW5lcyB0aGF0IGltcGxlbWVudCB0aGUKKyAqIGdlbmVyaWMgVVNCIHRoaW5ncyB0aGF0IHRoZSByZWFsIGRyaXZlcnMgY2FuIHVzZS4uCisgKgorICogVGhpbmsgb2YgdGhpcyBhcyBhICJVU0IgbGlicmFyeSIgcmF0aGVyIHRoYW4gYW55dGhpbmcgZWxzZS4KKyAqIEl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgc2xhdmUsIHdpdGggbm8gY2FsbGJhY2tzLiBDYWxsYmFja3MKKyAqIGFyZSBldmlsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ICAvKiBmb3IgaW5faW50ZXJydXB0KCkgKi8KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlICJoY2QuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKworZXh0ZXJuIGludCAgdXNiX2h1Yl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX2h1Yl9jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCB1c2JfbWFqb3JfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9tYWpvcl9jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCB1c2JfaG9zdF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX2hvc3RfY2xlYW51cCh2b2lkKTsKKworCitjb25zdCBjaGFyICp1c2Jjb3JlX25hbWUgPSAidXNiY29yZSI7CisKK3N0YXRpYyBpbnQgbm91c2I7CS8qIERpc2FibGUgVVNCIHdoZW4gYnVpbHQgaW50byBrZXJuZWwgaW1hZ2UgKi8KKwkJCS8qIE5vdCBob25vcmVkIG9uIG1vZHVsYXIgYnVpbGQgKi8KKworc3RhdGljIERFQ0xBUkVfUldTRU0odXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKKworCitzdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgZ2VuZXJpY19yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9CSJ1c2IiLAorCS5idXMgPSAmdXNiX2J1c190eXBlLAorCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCisJLnJlbW92ZSA9IGdlbmVyaWNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCB1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YTsKKworLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCB1c2JfYnVzX3R5cGUuc3Vic3lzIHdyaXRlbG9jayAqLworc3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqIGludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9kcml2ZXIgKiBkcml2ZXIgPSB0b191c2JfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CisJaW50IGVycm9yID0gLUVOT0RFVjsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWRyaXZlci0+cHJvYmUpCisJCXJldHVybiBlcnJvcjsKKwkvKiBGSVhNRSB3ZSdkIG11Y2ggcHJlZmVyIHRvIGp1c3QgcmVzdW1lIGl0IC4uLiAqLworCWlmIChpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKworCWlkID0gdXNiX21hdGNoX2lkIChpbnRmLCBkcml2ZXItPmlkX3RhYmxlKTsKKwlpZiAoaWQpIHsKKwkJZGV2X2RiZyAoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQklORElORzsKKwkJZXJyb3IgPSBkcml2ZXItPnByb2JlIChpbnRmLCBpZCk7CisJCWludGYtPmNvbmRpdGlvbiA9IGVycm9yID8gVVNCX0lOVEVSRkFDRV9VTkJPVU5EIDoKKwkJCQlVU0JfSU5URVJGQUNFX0JPVU5EOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCB1c2JfYnVzX3R5cGUuc3Vic3lzIHdyaXRlbG9jayAqLworc3RhdGljIGludCB1c2JfdW5iaW5kX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisKKwlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQklORElORzsKKworCS8qIHJlbGVhc2UgYWxsIHVyYnMgZm9yIHRoaXMgaW50ZXJmYWNlICovCisJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYpOworCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmRpc2Nvbm5lY3QpCisJCWRyaXZlci0+ZGlzY29ubmVjdChpbnRmKTsKKworCS8qIHJlc2V0IG90aGVyIGludGVyZmFjZSBzdGF0ZSAqLworCXVzYl9zZXRfaW50ZXJmYWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksCisJCQlpbnRmLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCTApOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBVU0IgZHJpdmVyCisgKiBAbmV3X2RyaXZlcjogVVNCIG9wZXJhdGlvbnMgZm9yIHRoZSBkcml2ZXIKKyAqCisgKiBSZWdpc3RlcnMgYSBVU0IgZHJpdmVyIHdpdGggdGhlIFVTQiBjb3JlLiAgVGhlIGxpc3Qgb2YgdW5hdHRhY2hlZAorICogaW50ZXJmYWNlcyB3aWxsIGJlIHJlc2Nhbm5lZCB3aGVuZXZlciBhIG5ldyBkcml2ZXIgaXMgYWRkZWQsIGFsbG93aW5nCisgKiB0aGUgbmV3IGRyaXZlciB0byBhdHRhY2ggdG8gYW55IHJlY29nbml6ZWQgZGV2aWNlcy4KKyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgYW5kIDAgb24gc3VjY2Vzcy4KKyAqIAorICogTk9URTogaWYgeW91IHdhbnQgeW91ciBkcml2ZXIgdG8gdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLCB5b3UgbXVzdCBjYWxsCisgKiB1c2JfcmVnaXN0ZXJfZGV2KCkgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eS4gIFRoaXMgZnVuY3Rpb24gbm8gbG9uZ2VyCisgKiB0YWtlcyBjYXJlIG9mIHRoYXQuCisgKi8KK2ludCB1c2JfcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAobm91c2IpCisJCXJldHVybiAtRU5PREVWOworCisJbmV3X2RyaXZlci0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKW5ld19kcml2ZXItPm5hbWU7CisJbmV3X2RyaXZlci0+ZHJpdmVyLmJ1cyA9ICZ1c2JfYnVzX3R5cGU7CisJbmV3X2RyaXZlci0+ZHJpdmVyLnByb2JlID0gdXNiX3Byb2JlX2ludGVyZmFjZTsKKwluZXdfZHJpdmVyLT5kcml2ZXIucmVtb3ZlID0gdXNiX3VuYmluZF9pbnRlcmZhY2U7CisJbmV3X2RyaXZlci0+ZHJpdmVyLm93bmVyID0gbmV3X2RyaXZlci0+b3duZXI7CisKKwl1c2JfbG9ja19hbGxfZGV2aWNlcygpOworCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbmV3X2RyaXZlci0+ZHJpdmVyKTsKKwl1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKCk7CisKKwlpZiAoIXJldHZhbCkgeworCQlwcl9pbmZvKCIlczogcmVnaXN0ZXJlZCBuZXcgZHJpdmVyICVzXG4iLAorCQkJdXNiY29yZV9uYW1lLCBuZXdfZHJpdmVyLT5uYW1lKTsKKwkJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsCisJCQl1c2Jjb3JlX25hbWUsIHJldHZhbCwgbmV3X2RyaXZlci0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiB1c2JfZGVyZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBVU0IgZHJpdmVyCisgKiBAZHJpdmVyOiBVU0Igb3BlcmF0aW9ucyBvZiB0aGUgZHJpdmVyIHRvIHVucmVnaXN0ZXIKKyAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcAorICoKKyAqIFVubGlua3MgdGhlIHNwZWNpZmllZCBkcml2ZXIgZnJvbSB0aGUgaW50ZXJuYWwgVVNCIGRyaXZlciBsaXN0LgorICogCisgKiBOT1RFOiBJZiB5b3UgY2FsbGVkIHVzYl9yZWdpc3Rlcl9kZXYoKSwgeW91IHN0aWxsIG5lZWQgdG8gY2FsbAorICogdXNiX2RlcmVnaXN0ZXJfZGV2KCkgdG8gY2xlYW4gdXAgeW91ciBkcml2ZXIncyBhbGxvY2F0ZWQgbWlub3IgbnVtYmVycywKKyAqIHRoaXMgKiBjYWxsIHdpbGwgbm8gbG9uZ2VyIGRvIGl0IGZvciB5b3UuCisgKi8KK3ZvaWQgdXNiX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcikKK3sKKwlwcl9pbmZvKCIlczogZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIHVzYmNvcmVfbmFtZSwgZHJpdmVyLT5uYW1lKTsKKworCXVzYl9sb2NrX2FsbF9kZXZpY2VzKCk7CisJZHJpdmVyX3VucmVnaXN0ZXIgKCZkcml2ZXItPmRyaXZlcik7CisJdXNiX3VubG9ja19hbGxfZGV2aWNlcygpOworCisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKK30KKworLyoqCisgKiB1c2JfaWZudW1fdG9faWYgLSBnZXQgdGhlIGludGVyZmFjZSBvYmplY3Qgd2l0aCBhIGdpdmVuIGludGVyZmFjZSBudW1iZXIKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNvbnNpZGVyZWQKKyAqIEBpZm51bTogdGhlIGRlc2lyZWQgaW50ZXJmYWNlCisgKgorICogVGhpcyB3YWxrcyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbmZpZ3VyYXRpb24KKyAqIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGludGVyZmFjZQorICogbnVtYmVyLCBvciBudWxsLgorICoKKyAqIE5vdGUgdGhhdCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIGFyZSBub3QgcmVxdWlyZWQgdG8gYXNzaWduIGludGVyZmFjZQorICogbnVtYmVycyBzZXF1ZW50aWFsbHksIHNvIHRoYXQgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIGFzc3VtZSB0aGF0CisgKiB0aGUgZmlyc3QgaW50ZXJmYWNlIGluIHRoYXQgZGVzY3JpcHRvciBjb3JyZXNwb25kcyB0byBpbnRlcmZhY2UgemVyby4KKyAqIFRoaXMgcm91dGluZSBoZWxwcyBkZXZpY2UgZHJpdmVycyBhdm9pZCBzdWNoIG1pc3Rha2VzLgorICogSG93ZXZlciwgeW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggYW55CisgKiBhbHRlcm5hdGUgc2V0dGluZ3MgYXZhaWxhYmxlIGZvciB0aGlzIGludGVyZmFjZXMuCisgKgorICogRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgYXJlIGJvdW5kIHRvIG9uZSBvZiB0aGUgaW50ZXJmYWNlcworICogb24gdGhpcyBkZXZpY2Ugb3IgeW91IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UhCisgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZudW1fdG9faWYoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaWZudW0pCit7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnID0gZGV2LT5hY3Rjb25maWc7CisJaW50IGk7CisKKwlpZiAoIWNvbmZpZykKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKQorCQlpZiAoY29uZmlnLT5pbnRlcmZhY2VbaV0tPmFsdHNldHRpbmdbMF0KKwkJCQkuZGVzYy5iSW50ZXJmYWNlTnVtYmVyID09IGlmbnVtKQorCQkJcmV0dXJuIGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2FsdG51bV90b19hbHRzZXR0aW5nIC0gZ2V0IHRoZSBhbHRzZXR0aW5nIHN0cnVjdHVyZSB3aXRoIGEgZ2l2ZW4KKyAqCWFsdGVybmF0ZSBzZXR0aW5nIG51bWJlci4KKyAqIEBpbnRmOiB0aGUgaW50ZXJmYWNlIGNvbnRhaW5pbmcgdGhlIGFsdHNldHRpbmcgaW4gcXVlc3Rpb24KKyAqIEBhbHRudW06IHRoZSBkZXNpcmVkIGFsdGVybmF0ZSBzZXR0aW5nIG51bWJlcgorICoKKyAqIFRoaXMgc2VhcmNoZXMgdGhlIGFsdHNldHRpbmcgYXJyYXkgb2YgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgZm9yCisgKiBhbiBlbnRyeSB3aXRoIHRoZSBjb3JyZWN0IGJBbHRlcm5hdGVTZXR0aW5nIHZhbHVlIGFuZCByZXR1cm5zIGEgcG9pbnRlcgorICogdG8gdGhhdCBlbnRyeSwgb3IgbnVsbC4KKyAqCisgKiBOb3RlIHRoYXQgYWx0c2V0dGluZ3MgbmVlZCBub3QgYmUgc3RvcmVkIHNlcXVlbnRpYWxseSBieSBudW1iZXIsIHNvCisgKiBpdCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gYXNzdW1lIHRoYXQgdGhlIGZpcnN0IGFsdHNldHRpbmcgZW50cnkgaW4KKyAqIHRoZSBhcnJheSBjb3JyZXNwb25kcyB0byBhbHRzZXR0aW5nIHplcm8uICBUaGlzIHJvdXRpbmUgaGVscHMgZGV2aWNlCisgKiBkcml2ZXJzIGF2b2lkIHN1Y2ggbWlzdGFrZXMuCisgKgorICogRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgYXJlIGJvdW5kIHRvIHRoZSBpbnRmIGludGVyZmFjZQorICogb3IgeW91IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UhCisgKi8KK3N0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJdW5zaWduZWQgaW50IGFsdG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgaSsrKSB7CisJCWlmIChpbnRmLT5hbHRzZXR0aW5nW2ldLmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgPT0gYWx0bnVtKQorCQkJcmV0dXJuICZpbnRmLT5hbHRzZXR0aW5nW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSAtIGJpbmQgYSBkcml2ZXIgdG8gYW4gaW50ZXJmYWNlCisgKiBAZHJpdmVyOiB0aGUgZHJpdmVyIHRvIGJlIGJvdW5kCisgKiBAaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gd2hpY2ggaXQgd2lsbCBiZSBib3VuZDsgbXVzdCBiZSBpbiB0aGUKKyAqCXVzYiBkZXZpY2UncyBhY3RpdmUgY29uZmlndXJhdGlvbgorICogQHByaXY6IGRyaXZlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGludGVyZmFjZQorICoKKyAqIFRoaXMgaXMgdXNlZCBieSB1c2IgZGV2aWNlIGRyaXZlcnMgdGhhdCBuZWVkIHRvIGNsYWltIG1vcmUgdGhhbiBvbmUKKyAqIGludGVyZmFjZSBvbiBhIGRldmljZSB3aGVuIHByb2JpbmcgKGF1ZGlvIGFuZCBhY20gYXJlIGN1cnJlbnQgZXhhbXBsZXMpLgorICogTm8gZGV2aWNlIGRyaXZlciBzaG91bGQgZGlyZWN0bHkgbW9kaWZ5IGludGVybmFsIHVzYl9pbnRlcmZhY2Ugb3IKKyAqIHVzYl9kZXZpY2Ugc3RydWN0dXJlIG1lbWJlcnMuCisgKgorICogRmV3IGRyaXZlcnMgc2hvdWxkIG5lZWQgdG8gdXNlIHRoaXMgcm91dGluZSwgc2luY2UgdGhlIG1vc3QgbmF0dXJhbAorICogd2F5IHRvIGJpbmQgdG8gYW4gaW50ZXJmYWNlIGlzIHRvIHJldHVybiB0aGUgcHJpdmF0ZSBkYXRhIGZyb20KKyAqIHRoZSBkcml2ZXIncyBwcm9iZSgpIG1ldGhvZC4KKyAqCisgKiBDYWxsZXJzIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jayBhbmQgdGhlIGRyaXZlciBtb2RlbCdzIHVzYl9idXNfdHlwZS5zdWJzeXMKKyAqIHdyaXRlbG9jay4gIFNvIGRyaXZlciBwcm9iZSgpIGVudHJpZXMgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nLAorICogYnV0IG90aGVyIGNhbGwgY29udGV4dHMgbWF5IG5lZWQgdG8gZXhwbGljaXRseSBjbGFpbSB0aG9zZSBsb2Nrcy4KKyAqLworaW50IHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKHN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIsCisJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCB2b2lkKiBwcml2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpZmFjZS0+ZGV2OworCisJaWYgKGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJZGV2LT5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcHJpdik7CisJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisKKwkvKiBpZiBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgYWRkZWQsIGJpbmQgbm93OyBlbHNlIGxldAorCSAqIHRoZSBmdXR1cmUgZGV2aWNlX2FkZCgpIGJpbmQgaXQsIGJ5cGFzc2luZyBwcm9iZSgpCisJICovCisJaWYgKCFsaXN0X2VtcHR5ICgmZGV2LT5idXNfbGlzdCkpCisJCWRldmljZV9iaW5kX2RyaXZlcihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAtIHVuYmluZCBhIGRyaXZlciBmcm9tIGFuIGludGVyZmFjZQorICogQGRyaXZlcjogdGhlIGRyaXZlciB0byBiZSB1bmJvdW5kCisgKiBAaWZhY2U6IHRoZSBpbnRlcmZhY2UgZnJvbSB3aGljaCBpdCB3aWxsIGJlIHVuYm91bmQKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGRyaXZlcnMgdG8gcmVsZWFzZSBhbiBpbnRlcmZhY2Ugd2l0aG91dCB3YWl0aW5nCisgKiBmb3IgdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMgdG8gYmUgY2FsbGVkLiAgSW4gdHlwaWNhbCBjYXNlcyB0aGlzCisgKiBhbHNvIGNhdXNlcyB0aGUgZHJpdmVyIGRpc2Nvbm5lY3QoKSBtZXRob2QgdG8gYmUgY2FsbGVkLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIENhbGxlcnMgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrIGFuZCB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiX2J1c190eXBlLnN1YnN5cworICogd3JpdGVsb2NrLiAgU28gZHJpdmVyIGRpc2Nvbm5lY3QoKSBlbnRyaWVzIGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZywKKyAqIGJ1dCBvdGhlciBjYWxsIGNvbnRleHRzIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xhaW0gdGhvc2UgbG9ja3MuCisgKi8KK3ZvaWQgdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyLAorCQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisKKwkvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGRvbid0IHJlbGVhc2Ugc29tZXRoaW5nIHRoYXQncyBub3Qgb3VycyAqLworCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5kcml2ZXIgIT0gJmRyaXZlci0+ZHJpdmVyKQorCQlyZXR1cm47CisKKwkvKiBkb24ndCBkaXNjb25uZWN0IGZyb20gZGlzY29ubmVjdCgpLCBvciBiZWZvcmUgZGV2X2FkZCgpICovCisJaWYgKCFsaXN0X2VtcHR5ICgmZGV2LT5kcml2ZXJfbGlzdCkgJiYgIWxpc3RfZW1wdHkgKCZkZXYtPmJ1c19saXN0KSkKKwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7CisKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgTlVMTCk7CisJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CT1VORDsKK30KKworLyoqCisgKiB1c2JfbWF0Y2hfaWQgLSBmaW5kIGZpcnN0IHVzYl9kZXZpY2VfaWQgbWF0Y2hpbmcgZGV2aWNlIG9yIGludGVyZmFjZQorICogQGludGVyZmFjZTogdGhlIGludGVyZmFjZSBvZiBpbnRlcmVzdAorICogQGlkOiBhcnJheSBvZiB1c2JfZGV2aWNlX2lkIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgemVybyBlbnRyeQorICoKKyAqIHVzYl9tYXRjaF9pZCBzZWFyY2hlcyBhbiBhcnJheSBvZiB1c2JfZGV2aWNlX2lkJ3MgYW5kIHJldHVybnMKKyAqIHRoZSBmaXJzdCBvbmUgbWF0Y2hpbmcgdGhlIGRldmljZSBvciBpbnRlcmZhY2UsIG9yIG51bGwuCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBiaW5kaW5nIChvciByZWJpbmRpbmcpIGEgZHJpdmVyIHRvIGFuIGludGVyZmFjZS4KKyAqIE1vc3QgVVNCIGRldmljZSBkcml2ZXJzIHdpbGwgdXNlIHRoaXMgaW5kaXJlY3RseSwgdGhyb3VnaCB0aGUgdXNiIGNvcmUsCisgKiBidXQgc29tZSBsYXllcmVkIGRyaXZlciBmcmFtZXdvcmtzIHVzZSBpdCBkaXJlY3RseS4KKyAqIFRoZXNlIGRldmljZSB0YWJsZXMgYXJlIGV4cG9ydGVkIHdpdGggTU9EVUxFX0RFVklDRV9UQUJMRSwgdGhyb3VnaAorICogbW9kdXRpbHMgYW5kICJtb2R1bGVzLnVzYm1hcCIsIHRvIHN1cHBvcnQgdGhlIGRyaXZlciBsb2FkaW5nCisgKiBmdW5jdGlvbmFsaXR5IG9mIFVTQiBob3RwbHVnZ2luZy4KKyAqCisgKiBXaGF0IE1hdGNoZXM6CisgKgorICogVGhlICJtYXRjaF9mbGFncyIgZWxlbWVudCBpbiBhIHVzYl9kZXZpY2VfaWQgY29udHJvbHMgd2hpY2gKKyAqIG1lbWJlcnMgYXJlIHVzZWQuICBJZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB0aGUKKyAqIHZhbHVlIGluIHRoZSBkZXZpY2VfaWQgbXVzdCBtYXRjaCBpdHMgY29ycmVzcG9uZGluZyBtZW1iZXIKKyAqIGluIHRoZSBkZXZpY2Ugb3IgaW50ZXJmYWNlIGRlc2NyaXB0b3IsIG9yIGVsc2UgdGhlIGRldmljZV9pZAorICogZG9lcyBub3QgbWF0Y2guCisgKgorICogImRyaXZlcl9pbmZvIiBpcyBub3JtYWxseSB1c2VkIG9ubHkgYnkgZGV2aWNlIGRyaXZlcnMsCisgKiBidXQgeW91IGNhbiBjcmVhdGUgYSB3aWxkY2FyZCAibWF0Y2hlcyBhbnl0aGluZyIgdXNiX2RldmljZV9pZAorICogYXMgYSBkcml2ZXIncyAibW9kdWxlcy51c2JtYXAiIGVudHJ5IGlmIHlvdSBwcm92aWRlIGFuIGlkIHdpdGgKKyAqIG9ubHkgYSBub256ZXJvICJkcml2ZXJfaW5mbyIgZmllbGQuICBJZiB5b3UgZG8gdGhpcywgdGhlIFVTQiBkZXZpY2UKKyAqIGRyaXZlcidzIHByb2JlKCkgcm91dGluZSBzaG91bGQgdXNlIGFkZGl0aW9uYWwgaW50ZWxsaWdlbmNlIHRvCisgKiBkZWNpZGUgd2hldGhlciB0byBiaW5kIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLgorICogCisgKiBXaGF0IE1ha2VzIEdvb2QgdXNiX2RldmljZV9pZCBUYWJsZXM6CisgKgorICogVGhlIG1hdGNoIGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSwgc28gdGhhdCBpbnRlbGxpZ2VuY2UgaW4KKyAqIGRyaXZlciBzZWxlY3Rpb24gbXVzdCBjb21lIGZyb20gc21hcnQgZHJpdmVyIGlkIHJlY29yZHMuCisgKiBVbmxlc3MgeW91IGhhdmUgZ29vZCByZWFzb25zIHRvIHVzZSBhbm90aGVyIHNlbGVjdGlvbiBwb2xpY3ksCisgKiBwcm92aWRlIG1hdGNoIGVsZW1lbnRzIG9ubHkgaW4gcmVsYXRlZCBncm91cHMsIGFuZCBvcmRlciBtYXRjaAorICogc3BlY2lmaWVycyBmcm9tIHNwZWNpZmljIHRvIGdlbmVyYWwuICBVc2UgdGhlIG1hY3JvcyBwcm92aWRlZAorICogZm9yIHRoYXQgcHVycG9zZSBpZiB5b3UgY2FuLgorICoKKyAqIFRoZSBtb3N0IHNwZWNpZmljIG1hdGNoIHNwZWNpZmllcnMgdXNlIGRldmljZSBkZXNjcmlwdG9yCisgKiBkYXRhLiAgVGhlc2UgYXJlIGNvbW1vbmx5IHVzZWQgd2l0aCBwcm9kdWN0LXNwZWNpZmljIG1hdGNoZXM7CisgKiB0aGUgVVNCX0RFVklDRSBtYWNybyBsZXRzIHlvdSBwcm92aWRlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMsCisgKiBhbmQgeW91IGNhbiBhbHNvIG1hdGNoIGFnYWluc3QgcmFuZ2VzIG9mIHByb2R1Y3QgcmV2aXNpb25zLgorICogVGhlc2UgYXJlIHdpZGVseSB1c2VkIGZvciBkZXZpY2VzIHdpdGggYXBwbGljYXRpb24gb3IgdmVuZG9yCisgKiBzcGVjaWZpYyBiRGV2aWNlQ2xhc3MgdmFsdWVzLgorICoKKyAqIE1hdGNoZXMgYmFzZWQgb24gZGV2aWNlIGNsYXNzL3N1YmNsYXNzL3Byb3RvY29sIHNwZWNpZmljYXRpb25zCisgKiBhcmUgc2xpZ2h0bHkgbW9yZSBnZW5lcmFsOyB1c2UgdGhlIFVTQl9ERVZJQ0VfSU5GTyBtYWNybywgb3IKKyAqIGl0cyBzaWJsaW5ncy4gIFRoZXNlIGFyZSB1c2VkIHdpdGggc2luZ2xlLWZ1bmN0aW9uIGRldmljZXMKKyAqIHdoZXJlIGJEZXZpY2VDbGFzcyBkb2Vzbid0IHNwZWNpZnkgdGhhdCBlYWNoIGludGVyZmFjZSBoYXMKKyAqIGl0cyBvd24gY2xhc3MuIAorICoKKyAqIE1hdGNoZXMgYmFzZWQgb24gaW50ZXJmYWNlIGNsYXNzL3N1YmNsYXNzL3Byb3RvY29sIGFyZSB0aGUKKyAqIG1vc3QgZ2VuZXJhbDsgdGhleSBsZXQgZHJpdmVycyBiaW5kIHRvIGFueSBpbnRlcmZhY2Ugb24gYQorICogbXVsdGlwbGUtZnVuY3Rpb24gZGV2aWNlLiAgVXNlIHRoZSBVU0JfSU5URVJGQUNFX0lORk8KKyAqIG1hY3JvLCBvciBpdHMgc2libGluZ3MsIHRvIG1hdGNoIGNsYXNzLXBlci1pbnRlcmZhY2Ugc3R5bGUgCisgKiBkZXZpY2VzIChhcyByZWNvcmRlZCBpbiBiRGV2aWNlQ2xhc3MpLgorICogIAorICogV2l0aGluIHRob3NlIGdyb3VwcywgcmVtZW1iZXIgdGhhdCBub3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUKKyAqIG1lYW5pbmdmdWwuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2l2ZSBhIHByb2R1Y3QgdmVyc2lvbiByYW5nZQorICogd2l0aG91dCB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzOyBvciBzcGVjaWZ5IGEgcHJvdG9jb2wgd2l0aG91dAorICogaXRzIGFzc29jaWF0ZWQgY2xhc3MgYW5kIHN1YmNsYXNzLgorICovICAgCitjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqCit1c2JfbWF0Y2hfaWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCS8qIHByb2NfY29ubmVjdGluZm8gaW4gZGV2aW8uYyBtYXkgY2FsbCB1cyB3aXRoIGlkID09IE5VTEwuICovCisJaWYgKGlkID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaW50ZiA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCisJLyogSXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoYXQgaWQtPmRyaXZlcl9pbmZvIGlzIG5vbnplcm8sCisJICAgc2luY2UgYW4gZW50cnkgdGhhdCBpcyBhbGwgemVyb2VzIGV4Y2VwdCBmb3IgYSBub256ZXJvCisJICAgaWQtPmRyaXZlcl9pbmZvIGlzIHRoZSB3YXkgdG8gY3JlYXRlIGFuIGVudHJ5IHRoYXQKKwkgICBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHdhbnQgdG8gZXhhbWluZSBldmVyeQorCSAgIGRldmljZSBhbmQgaW50ZXJmYWNlLiAqLworCWZvciAoOyBpZC0+aWRWZW5kb3IgfHwgaWQtPmJEZXZpY2VDbGFzcyB8fCBpZC0+YkludGVyZmFjZUNsYXNzIHx8CisJICAgICAgIGlkLT5kcml2ZXJfaW5mbzsgaWQrKykgeworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IpICYmCisJCSAgICBpZC0+aWRWZW5kb3IgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKSAmJgorCQkgICAgaWQtPmlkUHJvZHVjdCAhPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vIG5lZWQgdG8gdGVzdCBpZC0+YmNkRGV2aWNlX2xvICE9IDAsIHNpbmNlIDAgaXMgbmV2ZXIKKwkJICAgZ3JlYXRlciB0aGFuIGFueSB1bnNpZ25lZCBudW1iZXIuICovCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8pICYmCisJCSAgICAoaWQtPmJjZERldmljZV9sbyA+IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkpICYmCisJCSAgICAoaWQtPmJjZERldmljZV9oaSA8IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VDbGFzcyAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfU1VCQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VTdWJDbGFzcyE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTCkgJiYKKwkJICAgIChpZC0+YkRldmljZVByb3RvY29sICE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUykgJiYKKwkJICAgIChpZC0+YkludGVyZmFjZUNsYXNzICE9IGludGYtPmRlc2MuYkludGVyZmFjZUNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpICYmCisJCSAgICAoaWQtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBpbnRmLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1BST1RPQ09MKSAmJgorCQkgICAgKGlkLT5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gaW50Zi0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIGlkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHVzYl9maW5kX2ludGVyZmFjZSAtIGZpbmQgdXNiX2ludGVyZmFjZSBwb2ludGVyIGZvciBkcml2ZXIgYW5kIGRldmljZQorICogQGRydjogdGhlIGRyaXZlciB3aG9zZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgY29uc2lkZXJlZAorICogQG1pbm9yOiB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBkZXNpcmVkIGRldmljZQorICoKKyAqIFRoaXMgd2Fsa3MgdGhlIGRyaXZlciBkZXZpY2UgbGlzdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSAKKyAqIHdpdGggdGhlIG1hdGNoaW5nIG1pbm9yLiAgTm90ZSwgdGhpcyBvbmx5IHdvcmtzIGZvciBkZXZpY2VzIHRoYXQgc2hhcmUgdGhlCisgKiBVU0IgbWFqb3IgbnVtYmVyLgorICovCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ZpbmRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsIGludCBtaW5vcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmZHJ2LT5kcml2ZXIuZGV2aWNlcykgeworCQlkZXYgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBkZXZpY2UsIGRyaXZlcl9saXN0KTsKKworCQkvKiBjYW4ndCBsb29rIGF0IHVzYiBkZXZpY2VzLCBvbmx5IGludGVyZmFjZXMgKi8KKwkJaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJCQljb250aW51ZTsKKworCQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCQlpZiAoaW50Zi0+bWlub3IgPT0gLTEpCisJCQljb250aW51ZTsKKwkJaWYgKGludGYtPm1pbm9yID09IG1pbm9yKQorCQkJcmV0dXJuIGludGY7CisJfQorCisJLyogbm8gZGV2aWNlIGZvdW5kIHRoYXQgbWF0Y2hlcyAqLworCXJldHVybiBOVUxMOwkKK30KKworc3RhdGljIGludCB1c2JfZGV2aWNlX21hdGNoIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnY7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCisJLyogY2hlY2sgZm9yIGdlbmVyaWMgZHJpdmVyLCB3aGljaCB3ZSBkb24ndCBtYXRjaCBhbnkgZGV2aWNlIHdpdGggKi8KKwlpZiAoZHJ2ID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJCXJldHVybiAwOworCisJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwl1c2JfZHJ2ID0gdG9fdXNiX2RyaXZlcihkcnYpOworCQorCWlkID0gdXNiX21hdGNoX2lkIChpbnRmLCB1c2JfZHJ2LT5pZF90YWJsZSk7CisJaWYgKGlkKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisKKyNpZmRlZglDT05GSUdfSE9UUExVRworCisvKgorICogVVNCIGhvdHBsdWdnaW5nIGludm9rZXMgd2hhdCAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcgc2F5cworICogKG5vcm1hbGx5IC9zYmluL2hvdHBsdWcpIHdoZW4gVVNCIGRldmljZXMgZ2V0IGFkZGVkIG9yIHJlbW92ZWQuCisgKgorICogVGhpcyBpbnZva2VzIGEgdXNlciBtb2RlIHBvbGljeSBhZ2VudCwgdHlwaWNhbGx5IGhlbHBpbmcgdG8gbG9hZCBkcml2ZXIKKyAqIG9yIG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyZSB0aGUgZGV2aWNlLCBhbmQgbW9yZS4gIERyaXZlcnMgY2FuIHByb3ZpZGUKKyAqIGEgTU9EVUxFX0RFVklDRV9UQUJMRSB0byBoZWxwIHdpdGggbW9kdWxlIGxvYWRpbmcgc3VidGFza3MuCisgKgorICogV2UncmUgY2FsbGVkIGVpdGhlciBmcm9tIGtodWJkICh0aGUgdHlwaWNhbCBjYXNlKSBvciBmcm9tIHJvb3QgaHViCisgKiAoaW5pdCwga2FwbWQsIG1vZHByb2JlLCBybW1vZCwgZXRjKSwgYnV0IHRoZSBhZ2VudHMgbmVlZCB0byBoYW5kbGUKKyAqIGRlbGF5cyBpbiBldmVudCBkZWxpdmVyeS4gIFVzZSBzeXNmcyAoYW5kIERFVlBBVEgpIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGRldmljZSAoYW5kIHRoaXMgY29uZmlndXJhdGlvbiEpIGFyZSBzdGlsbCBwcmVzZW50LgorICovCitzdGF0aWMgaW50IHVzYl9ob3RwbHVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCQljaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlpbnQgaSA9IDA7CisJaW50IGxlbmd0aCA9IDA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBkcml2ZXIgaXMgb2Z0ZW4gbnVsbCBoZXJlOyBkZXZfZGJnKCkgd291bGQgb29wcyAqLworCXByX2RlYnVnICgidXNiICVzOiBob3RwbHVnXG4iLCBkZXYtPmJ1c19pZCk7CisKKwkvKiBNdXN0IGNoZWNrIGRyaXZlcl9kYXRhIGhlcmUsIGFzIG9uIHJlbW92ZSBkcml2ZXIgaXMgYWx3YXlzIE5VTEwgKi8KKwlpZiAoKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpIHx8IAorCSAgICAoZGV2LT5kcml2ZXJfZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCQorCWlmICh1c2JfZGV2LT5kZXZudW0gPCAwKSB7CisJCXByX2RlYnVnICgidXNiICVzOiBhbHJlYWR5IGRlbGV0ZWQ/XG4iLCBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIXVzYl9kZXYtPmJ1cykgeworCQlwcl9kZWJ1ZyAoInVzYiAlczogYnVzIHJlbW92ZWQ/XG4iLCBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmCUNPTkZJR19VU0JfREVWSUNFRlMKKwkvKiBJZiB0aGlzIGlzIGF2YWlsYWJsZSwgdXNlcnNwYWNlIHByb2dyYW1zIGNhbiBkaXJlY3RseSByZWFkCisJICogYWxsIHRoZSBkZXZpY2UgZGVzY3JpcHRvcnMgd2UgZG9uJ3QgdGVsbCB0aGVtIGFib3V0LiAgT3IKKwkgKiBldmVuIGFjdCBhcyB1c2VybW9kZSBkcml2ZXJzLgorCSAqCisJICogRklYTUUgcmVkdWNlIGhhcmR3aXJlZCBpbnRlbGxpZ2VuY2UgaGVyZQorCSAqLworCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCSJERVZJQ0U9L3Byb2MvYnVzL3VzYi8lMDNkLyUwM2QiLAorCQkJCXVzYl9kZXYtPmJ1cy0+YnVzbnVtLCB1c2JfZGV2LT5kZXZudW0pKQorCQlyZXR1cm4gLUVOT01FTTsKKyNlbmRpZgorCisJLyogcGVyLWRldmljZSBjb25maWd1cmF0aW9ucyBhcmUgY29tbW9uICovCisJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkJIlBST0RVQ1Q9JXgvJXgvJXgiLAorCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGNsYXNzLWJhc2VkIGRyaXZlciBiaW5kaW5nIG1vZGVscyAqLworCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCSJUWVBFPSVkLyVkLyVkIiwKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IDApIHsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwkJLyogMi40IG9ubHkgZXhwb3NlZCBpbnRlcmZhY2UgemVyby4gIGluIDIuNSwgaG90cGx1ZworCQkgKiBhZ2VudHMgYXJlIGNhbGxlZCBmb3IgYWxsIGludGVyZmFjZXMsIGFuZCBjYW4gdXNlCisJCSAqICRERVZQQVRIL2JJbnRlcmZhY2VOdW1iZXIgaWYgbmVjZXNzYXJ5LgorCQkgKi8KKwkJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCQkiSU5URVJGQUNFPSVkLyVkLyVkIiwKKwkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VDbGFzcywKKwkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCisJCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkJCSJNT0RBTElBUz11c2I6diUwNFhwJTA0WGRsJTA0WGRoJTA0WGRjJTAyWGRzYyUwMlhkcCUwMlhpYyUwMlhpc2MlMDJYaXAlMDJYIiwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzLAorCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQkJcmV0dXJuIC1FTk9NRU07CisgCX0gZWxzZSB7CisJCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCQkJIk1PREFMSUFTPXVzYjp2JTA0WHAlMDRYZGwlMDRYZGglMDRYZGMlMDJYZHNjJTAyWGRwJTAyWGljKmlzYyppcCoiLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKKwkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAorCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwllbnZwW2ldID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisjZWxzZQorCitzdGF0aWMgaW50IHVzYl9ob3RwbHVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAorCQkJaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworI2VuZGlmCS8qIENPTkZJR19IT1RQTFVHICovCisKKy8qKgorICogdXNiX3JlbGVhc2VfZGV2IC0gZnJlZSBhIHVzYiBkZXZpY2Ugc3RydWN0dXJlIHdoZW4gYWxsIHVzZXJzIG9mIGl0IGFyZSBmaW5pc2hlZC4KKyAqIEBkZXY6IGRldmljZSB0aGF0J3MgYmVlbiBkaXNjb25uZWN0ZWQKKyAqCisgKiBXaWxsIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBkZXZpY2UgY29yZSB3aGVuIGFsbCB1c2VycyBvZiB0aGlzIHVzYiBkZXZpY2UgYXJlCisgKiBkb25lLgorICovCitzdGF0aWMgdm9pZCB1c2JfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKworCXVzYl9kZXN0cm95X2NvbmZpZ3VyYXRpb24odWRldik7CisJdXNiX2J1c19wdXQodWRldi0+YnVzKTsKKwlrZnJlZSh1ZGV2LT5wcm9kdWN0KTsKKwlrZnJlZSh1ZGV2LT5tYW51ZmFjdHVyZXIpOworCWtmcmVlKHVkZXYtPnNlcmlhbCk7CisJa2ZyZWUodWRldik7Cit9CisKKy8qKgorICogdXNiX2FsbG9jX2RldiAtIHVzYiBkZXZpY2UgY29uc3RydWN0b3IgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiBAcGFyZW50OiBodWIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZDsgbnVsbCB0byBhbGxvY2F0ZSBhIHJvb3QgaHViCisgKiBAYnVzOiBidXMgdXNlZCB0byBhY2Nlc3MgdGhlIGRldmljZQorICogQHBvcnQxOiBvbmUtYmFzZWQgaW5kZXggb2YgcG9ydDsgaWdub3JlZCBmb3Igcm9vdCBodWJzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogT25seSBodWIgZHJpdmVycyAoaW5jbHVkaW5nIHZpcnR1YWwgcm9vdCBodWIgZHJpdmVycyBmb3IgaG9zdAorICogY29udHJvbGxlcnMpIHNob3VsZCBldmVyIGNhbGwgdGhpcy4KKyAqCisgKiBUaGlzIGNhbGwgbWF5IG5vdCBiZSB1c2VkIGluIGEgbm9uLXNsZWVwaW5nIGNvbnRleHQuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICoKK3VzYl9hbGxvY19kZXYoc3RydWN0IHVzYl9kZXZpY2UgKnBhcmVudCwgc3RydWN0IHVzYl9idXMgKmJ1cywgdW5zaWduZWQgcG9ydDEpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOworCisJYnVzID0gdXNiX2J1c19nZXQoYnVzKTsKKwlpZiAoIWJ1cykgeworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmZGV2LT5kZXYpOworCWRldi0+ZGV2LmJ1cyA9ICZ1c2JfYnVzX3R5cGU7CisJZGV2LT5kZXYuZG1hX21hc2sgPSBidXMtPmNvbnRyb2xsZXItPmRtYV9tYXNrOworCWRldi0+ZGV2LmRyaXZlcl9kYXRhID0gJnVzYl9nZW5lcmljX2RyaXZlcl9kYXRhOworCWRldi0+ZGV2LmRyaXZlciA9ICZ1c2JfZ2VuZXJpY19kcml2ZXI7CisJZGV2LT5kZXYucmVsZWFzZSA9IHVzYl9yZWxlYXNlX2RldjsKKwlkZXYtPnN0YXRlID0gVVNCX1NUQVRFX0FUVEFDSEVEOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXAwLnVyYl9saXN0KTsKKwlkZXYtPmVwMC5kZXNjLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRTsKKwlkZXYtPmVwMC5kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVDsKKwkvKiBlcDAgbWF4cGFja2V0IGNvbWVzIGxhdGVyLCBmcm9tIGRldmljZSBkZXNjcmlwdG9yICovCisJZGV2LT5lcF9pblswXSA9IGRldi0+ZXBfb3V0WzBdID0gJmRldi0+ZXAwOworCisJLyogU2F2ZSByZWFkYWJsZSBhbmQgc3RhYmxlIHRvcG9sb2d5IGlkLCBkaXN0aW5ndWlzaGluZyBkZXZpY2VzCisJICogYnkgbG9jYXRpb24gZm9yIGRpYWdub3N0aWNzLCB0b29scywgZHJpdmVyIG1vZGVsLCBldGMuICBUaGUKKwkgKiBzdHJpbmcgaXMgYSBwYXRoIGFsb25nIGh1YiBwb3J0cywgZnJvbSB0aGUgcm9vdC4gIEVhY2ggZGV2aWNlJ3MKKwkgKiBkZXYtPmRldnBhdGggd2lsbCBiZSBzdGFibGUgdW50aWwgVVNCIGlzIHJlLWNhYmxlZCwgYW5kIGh1YnMKKwkgKiBhcmUgb2Z0ZW4gbGFiZWxlZCB3aXRoIHRoZXNlIHBvcnQgbnVtYmVycy4gIFRoZSBidXNfaWQgaXNuJ3QKKwkgKiBhcyBzdGFibGU6ICBidXMtPmJ1c251bSBjaGFuZ2VzIGVhc2lseSBmcm9tIG1vZHByb2JlIG9yZGVyLAorCSAqIGNhcmRidXMgb3IgcGNpIGhvdHBsdWdnaW5nLCBhbmQgc28gb24uCisJICovCisJaWYgKHVubGlrZWx5ICghcGFyZW50KSkgeworCQlkZXYtPmRldnBhdGggWzBdID0gJzAnOworCisJCWRldi0+ZGV2LnBhcmVudCA9IGJ1cy0+Y29udHJvbGxlcjsKKwkJc3ByaW50ZiAoJmRldi0+ZGV2LmJ1c19pZFswXSwgInVzYiVkIiwgYnVzLT5idXNudW0pOworCX0gZWxzZSB7CisJCS8qIG1hdGNoIGFueSBsYWJlbGluZyBvbiB0aGUgaHViczsgaXQncyBvbmUtYmFzZWQgKi8KKwkJaWYgKHBhcmVudC0+ZGV2cGF0aCBbMF0gPT0gJzAnKQorCQkJc25wcmludGYgKGRldi0+ZGV2cGF0aCwgc2l6ZW9mIGRldi0+ZGV2cGF0aCwKKwkJCQkiJWQiLCBwb3J0MSk7CisJCWVsc2UKKwkJCXNucHJpbnRmIChkZXYtPmRldnBhdGgsIHNpemVvZiBkZXYtPmRldnBhdGgsCisJCQkJIiVzLiVkIiwgcGFyZW50LT5kZXZwYXRoLCBwb3J0MSk7CisKKwkJZGV2LT5kZXYucGFyZW50ID0gJnBhcmVudC0+ZGV2OworCQlzcHJpbnRmICgmZGV2LT5kZXYuYnVzX2lkWzBdLCAiJWQtJXMiLAorCQkJYnVzLT5idXNudW0sIGRldi0+ZGV2cGF0aCk7CisKKwkJLyogaHViIGRyaXZlciBzZXRzIHVwIFRUIHJlY29yZHMgKi8KKwl9CisKKwlkZXYtPmJ1cyA9IGJ1czsKKwlkZXYtPnBhcmVudCA9IHBhcmVudDsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5maWxlbGlzdCk7CisKKwlpbml0X01VVEVYKCZkZXYtPnNlcmlhbGl6ZSk7CisKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIHVzYl9nZXRfZGV2IC0gaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQGRldjogdGhlIGRldmljZSBiZWluZyByZWZlcmVuY2VkCisgKgorICogRWFjaCBsaXZlIHJlZmVyZW5jZSB0byBhIGRldmljZSBzaG91bGQgYmUgcmVmY291bnRlZC4KKyAqCisgKiBEcml2ZXJzIGZvciBVU0IgaW50ZXJmYWNlcyBzaG91bGQgbm9ybWFsbHkgcmVjb3JkIHN1Y2ggcmVmZXJlbmNlcyBpbgorICogdGhlaXIgcHJvYmUoKSBtZXRob2RzLCB3aGVuIHRoZXkgYmluZCB0byBhbiBpbnRlcmZhY2UsIGFuZCByZWxlYXNlCisgKiB0aGVtIGJ5IGNhbGxpbmcgdXNiX3B1dF9kZXYoKSwgaW4gdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMuCisgKgorICogQSBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugd2l0aCB0aGUgaW5jcmVtZW50ZWQgcmVmZXJlbmNlIGNvdW50ZXIgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICp1c2JfZ2V0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCWdldF9kZXZpY2UoJmRldi0+ZGV2KTsKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIHVzYl9wdXRfZGV2IC0gcmVsZWFzZSBhIHVzZSBvZiB0aGUgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBkZXY6IGRldmljZSB0aGF0J3MgYmVlbiBkaXNjb25uZWN0ZWQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGVuIGEgdXNlciBvZiBhIGRldmljZSBpcyBmaW5pc2hlZCB3aXRoIGl0LiAgV2hlbiB0aGUgbGFzdAorICogdXNlciBvZiB0aGUgZGV2aWNlIGNhbGxzIHRoaXMgZnVuY3Rpb24sIHRoZSBtZW1vcnkgb2YgdGhlIGRldmljZSBpcyBmcmVlZC4KKyAqLwordm9pZCB1c2JfcHV0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKK30KKworLyoqCisgKiB1c2JfZ2V0X2ludGYgLSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHVzYiBpbnRlcmZhY2Ugc3RydWN0dXJlCisgKiBAaW50ZjogdGhlIGludGVyZmFjZSBiZWluZyByZWZlcmVuY2VkCisgKgorICogRWFjaCBsaXZlIHJlZmVyZW5jZSB0byBhIGludGVyZmFjZSBtdXN0IGJlIHJlZmNvdW50ZWQuCisgKgorICogRHJpdmVycyBmb3IgVVNCIGludGVyZmFjZXMgc2hvdWxkIG5vcm1hbGx5IHJlY29yZCBzdWNoIHJlZmVyZW5jZXMgaW4KKyAqIHRoZWlyIHByb2JlKCkgbWV0aG9kcywgd2hlbiB0aGV5IGJpbmQgdG8gYW4gaW50ZXJmYWNlLCBhbmQgcmVsZWFzZQorICogdGhlbSBieSBjYWxsaW5nIHVzYl9wdXRfaW50ZigpLCBpbiB0aGVpciBkaXNjb25uZWN0KCkgbWV0aG9kcy4KKyAqCisgKiBBIHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSB3aXRoIHRoZSBpbmNyZW1lbnRlZCByZWZlcmVuY2UgY291bnRlciBpcworICogcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfZ2V0X2ludGYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaWYgKGludGYpCisJCWdldF9kZXZpY2UoJmludGYtPmRldik7CisJcmV0dXJuIGludGY7Cit9CisKKy8qKgorICogdXNiX3B1dF9pbnRmIC0gcmVsZWFzZSBhIHVzZSBvZiB0aGUgdXNiIGludGVyZmFjZSBzdHJ1Y3R1cmUKKyAqIEBpbnRmOiBpbnRlcmZhY2UgdGhhdCdzIGJlZW4gZGVjcmVtZW50ZWQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGVuIGEgdXNlciBvZiBhbiBpbnRlcmZhY2UgaXMgZmluaXNoZWQgd2l0aCBpdC4gIFdoZW4gdGhlCisgKiBsYXN0IHVzZXIgb2YgdGhlIGludGVyZmFjZSBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0aGUgbWVtb3J5IG9mIHRoZSBpbnRlcmZhY2UKKyAqIGlzIGZyZWVkLgorICovCit2b2lkIHVzYl9wdXRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpZiAoaW50ZikKKwkJcHV0X2RldmljZSgmaW50Zi0+ZGV2KTsKK30KKworCisvKgkJCVVTQiBkZXZpY2UgbG9ja2luZworICoKKyAqIEFsdGhvdWdoIGxvY2tpbmcgVVNCIGRldmljZXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCwgaXQgaXMKKyAqIGNvbXBsaWNhdGVkIGJ5IHRoZSB3YXkgdGhlIGRyaXZlci1tb2RlbCBjb3JlIHdvcmtzLiAgV2hlbiBhIG5ldyBVU0IKKyAqIGRyaXZlciBpcyByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgdGhlIGNvcmUgd2lsbCBhdXRvbWF0aWNhbGx5CisgKiBwcm9iZSBvciBkaXNjb25uZWN0IGFsbCBtYXRjaGluZyBpbnRlcmZhY2VzIG9uIGFsbCBVU0IgZGV2aWNlcyB3aGlsZQorICogaG9sZGluZyB0aGUgVVNCIHN1YnN5c3RlbSB3cml0ZWxvY2suICBUaGVyZSdzIG5vIGdvb2Qgd2F5IGZvciB1cyB0bworICogdGVsbCB3aGljaCBkZXZpY2VzIHdpbGwgYmUgdXNlZCBvciB0byBsb2NrIHRoZW0gYmVmb3JlaGFuZDsgb3VyIG9ubHkKKyAqIG9wdGlvbiBpcyB0byBlZmZlY3RpdmVseSBsb2NrIGFsbCB0aGUgVVNCIGRldmljZXMuCisgKgorICogV2UgZG8gdGhhdCBieSB1c2luZyBhIHByaXZhdGUgcnctc2VtYXBob3JlLCB1c2JfYWxsX2RldmljZXNfcndzZW0uCisgKiBXaGVuIGxvY2tpbmcgYW4gaW5kaXZpZHVhbCBkZXZpY2UgeW91IG11c3QgZmlyc3QgYWNxdWlyZSB0aGUgcndzZW0ncworICogcmVhZGxvY2suICBXaGVuIGEgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIHRoZSB3cml0ZWxvY2sKKyAqIG11c3QgYmUgaGVsZC4gIFRoZXNlIGFjdGlvbnMgYXJlIGVuY2Fwc3VsYXRlZCBpbiB0aGUgc3Vicm91dGluZXMKKyAqIGJlbG93LCBzbyBhbGwgYSBkcml2ZXIgbmVlZHMgdG8gZG8gaXMgY2FsbCB1c2JfbG9ja19kZXZpY2UoKSBhbmQKKyAqIHVzYl91bmxvY2tfZGV2aWNlKCkuCisgKgorICogQ29tcGxpY2F0aW9ucyBhcmlzZSB3aGVuIHNldmVyYWwgZGV2aWNlcyBhcmUgdG8gYmUgbG9ja2VkIGF0IHRoZSBzYW1lCisgKiB0aW1lLiAgT25seSBodWItYXdhcmUgZHJpdmVycyB0aGF0IGFyZSBwYXJ0IG9mIHVzYmNvcmUgZXZlciBoYXZlIHRvCisgKiBkbyB0aGlzOyBub2JvZHkgZWxzZSBuZWVkcyB0byB3b3JyeSBhYm91dCBpdC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQKKyAqIHVzYl9sb2NrX2RldmljZSgpIG11c3Qgbm90IGJlIGNhbGxlZCB0byBsb2NrIGEgc2Vjb25kIGRldmljZSBzaW5jZSBpdAorICogd291bGQgYWNxdWlyZSB0aGUgcndzZW0ncyByZWFkbG9jayByZWVudHJhbnRseSwgbGVhZGluZyB0byBkZWFkbG9jayBpZgorICogYW5vdGhlciB0aHJlYWQgd2FzIHdhaXRpbmcgZm9yIHRoZSB3cml0ZWxvY2suICBUaGUgc29sdXRpb24gaXMgc2ltcGxlOgorICoKKyAqCVdoZW4gbG9ja2luZyBtb3JlIHRoYW4gb25lIGRldmljZSwgY2FsbCB1c2JfbG9ja19kZXZpY2UoKQorICoJdG8gbG9jayB0aGUgZmlyc3Qgb25lLiAgTG9jayB0aGUgb3RoZXJzIGJ5IGNhbGxpbmcKKyAqCWRvd24oJnVkZXYtPnNlcmlhbGl6ZSkgZGlyZWN0bHkuCisgKgorICoJV2hlbiB1bmxvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcywgdXNlIHVwKCZ1ZGV2LT5zZXJpYWxpemUpCisgKgl0byB1bmxvY2sgYWxsIGJ1dCB0aGUgbGFzdCBvbmUuICBVbmxvY2sgdGhlIGxhc3Qgb25lIGJ5CisgKgljYWxsaW5nIHVzYl91bmxvY2tfZGV2aWNlKCkuCisgKgorICoJV2hlbiBsb2NraW5nIGJvdGggYSBkZXZpY2UgYW5kIGl0cyBwYXJlbnQsIGFsd2F5cyBsb2NrIHRoZQorICoJdGhlIHBhcmVudCBmaXJzdC4KKyAqLworCisvKioKKyAqIHVzYl9sb2NrX2RldmljZSAtIGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB1ZGV2OiBkZXZpY2UgdGhhdCdzIGJlaW5nIGxvY2tlZAorICoKKyAqIFVzZSB0aGlzIHJvdXRpbmUgd2hlbiB5b3UgZG9uJ3QgaG9sZCBhbnkgb3RoZXIgZGV2aWNlIGxvY2tzOworICogdG8gYWNxdWlyZSBuZXN0ZWQgaW5uZXIgbG9ja3MgY2FsbCBkb3duKCZ1ZGV2LT5zZXJpYWxpemUpIGRpcmVjdGx5LgorICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHByb3BlciBpbnRlcmFjdGlvbiB3aXRoIHVzYl9sb2NrX2FsbF9kZXZpY2VzKCkuCisgKi8KK3ZvaWQgdXNiX2xvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWRvd25fcmVhZCgmdXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKKwlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworfQorCisvKioKKyAqIHVzYl90cnlsb2NrX2RldmljZSAtIGF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgbG9jayBmb3IgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgbG9ja2VkCisgKgorICogRG9uJ3QgdXNlIHRoaXMgcm91dGluZSBpZiB5b3UgYWxyZWFkeSBob2xkIGEgZGV2aWNlIGxvY2s7CisgKiB1c2UgZG93bl90cnlsb2NrKCZ1ZGV2LT5zZXJpYWxpemUpIGluc3RlYWQuCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGludGVyYWN0aW9uIHdpdGggdXNiX2xvY2tfYWxsX2RldmljZXMoKS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uLgorICovCitpbnQgdXNiX3RyeWxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnVzYl9hbGxfZGV2aWNlc19yd3NlbSkpCisJCXJldHVybiAwOworCWlmIChkb3duX3RyeWxvY2soJnVkZXYtPnNlcmlhbGl6ZSkpIHsKKwkJdXBfcmVhZCgmdXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgLSBjYXV0aW91c2x5IGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEKKyAqCXVzYiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdWRldjogZGV2aWNlIHRoYXQncyBiZWluZyBsb2NrZWQKKyAqIEBpZmFjZTogaW50ZXJmYWNlIGJvdW5kIHRvIHRoZSBkcml2ZXIgbWFraW5nIHRoZSByZXF1ZXN0IChvcHRpb25hbCkKKyAqCisgKiBBdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBkZXZpY2UgbG9jaywgYnV0IGZhaWxzIGlmIHRoZSBkZXZpY2UgaXMKKyAqIE5PVEFUVEFDSEVEIG9yIFNVU1BFTkRFRCwgb3IgaWYgaWZhY2UgaXMgc3BlY2lmaWVkIGFuZCB0aGUgaW50ZXJmYWNlCisgKiBpcyBuZWl0aGVyIEJJTkRJTkcgbm9yIEJPVU5ELiAgUmF0aGVyIHRoYW4gc2xlZXBpbmcgdG8gd2FpdCBmb3IgdGhlCisgKiBsb2NrLCB0aGUgcm91dGluZSBwb2xscyByZXBlYXRlZGx5LiAgVGhpcyBpcyB0byBwcmV2ZW50IGRlYWRsb2NrIHdpdGgKKyAqIGRpc2Nvbm5lY3Q7IGluIHNvbWUgZHJpdmVycyAoc3VjaCBhcyB1c2Itc3RvcmFnZSkgdGhlIGRpc2Nvbm5lY3QoKQorICogY2FsbGJhY2sgd2lsbCBibG9jayB3YWl0aW5nIGZvciBhIGRldmljZSByZXNldCB0byBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBmb3IgZmFpbHVyZSwgb3RoZXJ3aXNlIDEgb3IgMCB0byBpbmRpY2F0ZQorICogdGhhdCB0aGUgZGV2aWNlIHdpbGwgb3Igd2lsbCBub3QgaGF2ZSB0byBiZSB1bmxvY2tlZC4gICgwIGNhbiBiZQorICogcmV0dXJuZWQgd2hlbiBhbiBpbnRlcmZhY2UgaXMgZ2l2ZW4gYW5kIGlzIEJJTkRJTkcsIGJlY2F1c2UgaW4gdGhhdAorICogY2FzZSB0aGUgZHJpdmVyIGFscmVhZHkgb3ducyB0aGUgZGV2aWNlIGxvY2suKQorICovCitpbnQgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCXJldHVybiAtRU5PREVWOworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoaWZhY2UpIHsKKwkJc3dpdGNoIChpZmFjZS0+Y29uZGl0aW9uKSB7CisJCSAgY2FzZSBVU0JfSU5URVJGQUNFX0JJTkRJTkc6CisJCQlyZXR1cm4gMDsKKwkJICBjYXNlIFVTQl9JTlRFUkZBQ0VfQk9VTkQ6CisJCQlicmVhazsKKwkJICBkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCXdoaWxlICghdXNiX3RyeWxvY2tfZGV2aWNlKHVkZXYpKSB7CisJCW1zbGVlcCgxNSk7CisJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwkJaWYgKGlmYWNlICYmIGlmYWNlLT5jb25kaXRpb24gIT0gVVNCX0lOVEVSRkFDRV9CT1VORCkKKwkJCXJldHVybiAtRUlOVFI7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHVzYl91bmxvY2tfZGV2aWNlIC0gcmVsZWFzZSB0aGUgbG9jayBmb3IgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgdW5sb2NrZWQKKyAqCisgKiBVc2UgdGhpcyByb3V0aW5lIHdoZW4gcmVsZWFzaW5nIHRoZSBvbmx5IGRldmljZSBsb2NrIHlvdSBob2xkOworICogdG8gcmVsZWFzZSBpbm5lciBuZXN0ZWQgbG9ja3MgY2FsbCB1cCgmdWRldi0+c2VyaWFsaXplKSBkaXJlY3RseS4KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBwcm9wZXIgaW50ZXJhY3Rpb24gd2l0aCB1c2JfbG9ja19hbGxfZGV2aWNlcygpLgorICovCit2b2lkIHVzYl91bmxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVwKCZ1ZGV2LT5zZXJpYWxpemUpOworCXVwX3JlYWQoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Cit9CisKKy8qKgorICogdXNiX2xvY2tfYWxsX2RldmljZXMgLSBhY3F1aXJlIHRoZSBsb2NrIGZvciBhbGwgdXNiIGRldmljZSBzdHJ1Y3R1cmVzCisgKgorICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBkcml2ZXIgb3IgcHJvYmluZyBhIGJ1cywKKyAqIHNpbmNlIHRoZSBkcml2ZXItbW9kZWwgY29yZSBtYXkgdHJ5IHRvIHVzZSBhbnkgdXNiX2RldmljZS4KKyAqLwordm9pZCB1c2JfbG9ja19hbGxfZGV2aWNlcyh2b2lkKQoreworCWRvd25fd3JpdGUoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Cit9CisKKy8qKgorICogdXNiX3VubG9ja19hbGxfZGV2aWNlcyAtIHJlbGVhc2UgdGhlIGxvY2sgZm9yIGFsbCB1c2IgZGV2aWNlIHN0cnVjdHVyZXMKKyAqLwordm9pZCB1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKHZvaWQpCit7CisJdXBfd3JpdGUoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICptYXRjaF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnJldF9kZXYgPSBOVUxMOworCWludCBjaGlsZDsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiY2hlY2sgZm9yIHZlbmRvciAlMDR4LCBwcm9kdWN0ICUwNHggLi4uXG4iLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBzZWUgaWYgdGhpcyBkZXZpY2UgbWF0Y2hlcyAqLworCWlmICgodmVuZG9yX2lkID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpICYmCisJICAgIChwcm9kdWN0X2lkID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSkgeworCQlkZXZfZGJnICgmZGV2LT5kZXYsICJtYXRjaGVkIHRoaXMgZGV2aWNlIVxuIik7CisJCXJldF9kZXYgPSB1c2JfZ2V0X2RldihkZXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogbG9vayB0aHJvdWdoIGFsbCBvZiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UgKi8KKwlmb3IgKGNoaWxkID0gMDsgY2hpbGQgPCBkZXYtPm1heGNoaWxkOyArK2NoaWxkKSB7CisJCWlmIChkZXYtPmNoaWxkcmVuW2NoaWxkXSkgeworCQkJZG93bigmZGV2LT5jaGlsZHJlbltjaGlsZF0tPnNlcmlhbGl6ZSk7CisJCQlyZXRfZGV2ID0gbWF0Y2hfZGV2aWNlKGRldi0+Y2hpbGRyZW5bY2hpbGRdLAorCQkJCQkgICAgICAgdmVuZG9yX2lkLCBwcm9kdWN0X2lkKTsKKwkJCXVwKCZkZXYtPmNoaWxkcmVuW2NoaWxkXS0+c2VyaWFsaXplKTsKKwkJCWlmIChyZXRfZGV2KQorCQkJCWdvdG8gZXhpdDsKKwkJfQorCX0KK2V4aXQ6CisJcmV0dXJuIHJldF9kZXY7Cit9CisKKy8qKgorICogdXNiX2ZpbmRfZGV2aWNlIC0gZmluZCBhIHNwZWNpZmljIHVzYiBkZXZpY2UgaW4gdGhlIHN5c3RlbQorICogQHZlbmRvcl9pZDogdGhlIHZlbmRvciBpZCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQKKyAqIEBwcm9kdWN0X2lkOiB0aGUgcHJvZHVjdCBpZCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCB1c2JfZGV2aWNlIGlmIHN1Y2ggYSBzcGVjaWZpZWQgdXNiCisgKiBkZXZpY2UgaXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGN1cnJlbnRseS4gIFRoZSB1c2FnZSBjb3VudCBvZiB0aGUKKyAqIGRldmljZSB3aWxsIGJlIGluY3JlbWVudGVkIGlmIGEgZGV2aWNlIGlzIGZvdW5kLiAgTWFrZSBzdXJlIHRvIGNhbGwKKyAqIHVzYl9wdXRfZGV2KCkgd2hlbiB0aGUgY2FsbGVyIGlzIGZpbmlzaGVkIHdpdGggdGhlIGRldmljZS4KKyAqCisgKiBJZiBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgdmVuZG9yIGFuZCBwcm9kdWN0IGlkIGlzIG5vdCBmb3VuZCwKKyAqIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICp1c2JfZmluZF9kZXZpY2UodTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqYnVzbGlzdDsKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOworCQorCWRvd24oJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlmb3IgKGJ1c2xpc3QgPSB1c2JfYnVzX2xpc3QubmV4dDsKKwkgICAgIGJ1c2xpc3QgIT0gJnVzYl9idXNfbGlzdDsgCisJICAgICBidXNsaXN0ID0gYnVzbGlzdC0+bmV4dCkgeworCQlidXMgPSBjb250YWluZXJfb2YoYnVzbGlzdCwgc3RydWN0IHVzYl9idXMsIGJ1c19saXN0KTsKKwkJaWYgKCFidXMtPnJvb3RfaHViKQorCQkJY29udGludWU7CisJCXVzYl9sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJZGV2ID0gbWF0Y2hfZGV2aWNlKGJ1cy0+cm9vdF9odWIsIHZlbmRvcl9pZCwgcHJvZHVjdF9pZCk7CisJCXVzYl91bmxvY2tfZGV2aWNlKGJ1cy0+cm9vdF9odWIpOworCQlpZiAoZGV2KQorCQkJZ290byBleGl0OworCX0KK2V4aXQ6CisJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIgLSByZXR1cm4gY3VycmVudCBidXMgZnJhbWUgbnVtYmVyCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGJ1cyBpcyBiZWluZyBxdWVyaWVkCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIgZm9yIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyCisgKiB1c2VkIHdpdGggdGhlIGdpdmVuIFVTQiBkZXZpY2UuICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc2NoZWR1bGluZworICogaXNvY2hyb25vdXMgcmVxdWVzdHMuCisgKgorICogTm90ZSB0aGF0IGRpZmZlcmVudCBraW5kcyBvZiBob3N0IGNvbnRyb2xsZXIgaGF2ZSBkaWZmZXJlbnQKKyAqICJzY2hlZHVsaW5nIGhvcml6b25zIi4gIFdoaWxlIG9uZSB0eXBlIG1pZ2h0IHN1cHBvcnQgc2NoZWR1bGluZyBvbmx5CisgKiAzMiBmcmFtZXMgaW50byB0aGUgZnV0dXJlLCBvdGhlcnMgY291bGQgc3VwcG9ydCBzY2hlZHVsaW5nIHVwIHRvCisgKiAxMDI0IGZyYW1lcyBpbnRvIHRoZSBmdXR1cmUuCisgKi8KK2ludCB1c2JfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+YnVzLT5vcC0+Z2V0X2ZyYW1lX251bWJlciAoZGV2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBfX3VzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcigpIGZpbmRzIGEgZGVzY3JpcHRvciBvZiBzcGVjaWZpYyB0eXBlIGluIHRoZQorICogZXh0cmEgZmllbGQgb2YgdGhlIGludGVyZmFjZSBhbmQgZW5kcG9pbnQgZGVzY3JpcHRvciBzdHJ1Y3RzLgorICovCisKK2ludCBfX3VzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcihjaGFyICpidWZmZXIsIHVuc2lnbmVkIHNpemUsCisJdW5zaWduZWQgY2hhciB0eXBlLCB2b2lkICoqcHRyKQoreworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhlYWRlcjsKKworCXdoaWxlIChzaXplID49IHNpemVvZihzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyKSkgeworCQloZWFkZXIgPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKWJ1ZmZlcjsKKworCQlpZiAoaGVhZGVyLT5iTGVuZ3RoIDwgMikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIiVzOiBib2d1cyBkZXNjcmlwdG9yLCB0eXBlICVkIGxlbmd0aCAlZFxuIiwKKwkJCQl1c2Jjb3JlX25hbWUsCisJCQkJaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUsIAorCQkJCWhlYWRlci0+Ykxlbmd0aCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gdHlwZSkgeworCQkJKnB0ciA9IGhlYWRlcjsKKwkJCXJldHVybiAwOworCQl9CisKKwkJYnVmZmVyICs9IGhlYWRlci0+Ykxlbmd0aDsKKwkJc2l6ZSAtPSBoZWFkZXItPmJMZW5ndGg7CisJfQorCXJldHVybiAtMTsKK30KKworLyoqCisgKiB1c2JfYnVmZmVyX2FsbG9jIC0gYWxsb2NhdGUgZG1hLWNvbnNpc3RlbnQgYnVmZmVyIGZvciBVUkJfTk9feHh4X0RNQV9NQVAKKyAqIEBkZXY6IGRldmljZSB0aGUgYnVmZmVyIHdpbGwgYmUgdXNlZCB3aXRoCisgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplCisgKiBAbWVtX2ZsYWdzOiBhZmZlY3Qgd2hldGhlciBhbGxvY2F0aW9uIG1heSBibG9jaworICogQGRtYTogdXNlZCB0byByZXR1cm4gRE1BIGFkZHJlc3Mgb2YgYnVmZmVyCisgKgorICogUmV0dXJuIHZhbHVlIGlzIGVpdGhlciBudWxsIChpbmRpY2F0aW5nIG5vIGJ1ZmZlciBjb3VsZCBiZSBhbGxvY2F0ZWQpLCBvcgorICogdGhlIGNwdS1zcGFjZSBwb2ludGVyIHRvIGEgYnVmZmVyIHRoYXQgbWF5IGJlIHVzZWQgdG8gcGVyZm9ybSBETUEgdG8gdGhlCisgKiBzcGVjaWZpZWQgZGV2aWNlLiAgU3VjaCBjcHUtc3BhY2UgYnVmZmVycyBhcmUgcmV0dXJuZWQgYWxvbmcgd2l0aCB0aGUgRE1BCisgKiBhZGRyZXNzICh0aHJvdWdoIHRoZSBwb2ludGVyIHByb3ZpZGVkKS4KKyAqCisgKiBUaGVzZSBidWZmZXJzIGFyZSB1c2VkIHdpdGggVVJCX05PX3h4eF9ETUFfTUFQIHNldCBpbiB1cmItPnRyYW5zZmVyX2ZsYWdzCisgKiB0byBhdm9pZCBiZWhhdmlvcnMgbGlrZSB1c2luZyAiRE1BIGJvdW5jZSBidWZmZXJzIiwgb3IgdHlpbmcgZG93biBJL08KKyAqIG1hcHBpbmcgaGFyZHdhcmUgZm9yIGxvbmcgaWRsZSBwZXJpb2RzLiAgVGhlIGltcGxlbWVudGF0aW9uIHZhcmllcyBiZXR3ZWVuCisgKiBwbGF0Zm9ybXMsIGRlcGVuZGluZyBvbiBkZXRhaWxzIG9mIGhvdyBETUEgd2lsbCB3b3JrIHRvIHRoaXMgZGV2aWNlLgorICogVXNpbmcgdGhlc2UgYnVmZmVycyBhbHNvIGhlbHBzIHByZXZlbnQgY2FjaGVsaW5lIHNoYXJpbmcgcHJvYmxlbXMgb24KKyAqIGFyY2hpdGVjdHVyZXMgd2hlcmUgQ1BVIGNhY2hlcyBhcmUgbm90IERNQS1jb2hlcmVudC4KKyAqCisgKiBXaGVuIHRoZSBidWZmZXIgaXMgbm8gbG9uZ2VyIHVzZWQsIGZyZWUgaXQgd2l0aCB1c2JfYnVmZmVyX2ZyZWUoKS4KKyAqLwordm9pZCAqdXNiX2J1ZmZlcl9hbGxvYyAoCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwlzaXplX3Qgc2l6ZSwKKwlpbnQgbWVtX2ZsYWdzLAorCWRtYV9hZGRyX3QgKmRtYQorKQoreworCWlmICghZGV2IHx8ICFkZXYtPmJ1cyB8fCAhZGV2LT5idXMtPm9wIHx8ICFkZXYtPmJ1cy0+b3AtPmJ1ZmZlcl9hbGxvYykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGRldi0+YnVzLT5vcC0+YnVmZmVyX2FsbG9jIChkZXYtPmJ1cywgc2l6ZSwgbWVtX2ZsYWdzLCBkbWEpOworfQorCisvKioKKyAqIHVzYl9idWZmZXJfZnJlZSAtIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCB3aXRoIHVzYl9idWZmZXJfYWxsb2MoKQorICogQGRldjogZGV2aWNlIHRoZSBidWZmZXIgd2FzIHVzZWQgd2l0aAorICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZQorICogQGFkZHI6IENQVSBhZGRyZXNzIG9mIGJ1ZmZlcgorICogQGRtYTogRE1BIGFkZHJlc3Mgb2YgYnVmZmVyCisgKgorICogVGhpcyByZWNsYWltcyBhbiBJL08gYnVmZmVyLCBsZXR0aW5nIGl0IGJlIHJldXNlZC4gIFRoZSBtZW1vcnkgbXVzdCBoYXZlCisgKiBiZWVuIGFsbG9jYXRlZCB1c2luZyB1c2JfYnVmZmVyX2FsbG9jKCksIGFuZCB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoCisgKiB0aG9zZSBwcm92aWRlZCBpbiB0aGF0IGFsbG9jYXRpb24gcmVxdWVzdC4gCisgKi8KK3ZvaWQgdXNiX2J1ZmZlcl9mcmVlICgKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCXNpemVfdCBzaXplLAorCXZvaWQgKmFkZHIsCisJZG1hX2FkZHJfdCBkbWEKKykKK3sKKwlpZiAoIWRldiB8fCAhZGV2LT5idXMgfHwgIWRldi0+YnVzLT5vcCB8fCAhZGV2LT5idXMtPm9wLT5idWZmZXJfZnJlZSkKKwkgICAgCXJldHVybjsKKwlkZXYtPmJ1cy0+b3AtPmJ1ZmZlcl9mcmVlIChkZXYtPmJ1cywgc2l6ZSwgYWRkciwgZG1hKTsKK30KKworLyoqCisgKiB1c2JfYnVmZmVyX21hcCAtIGNyZWF0ZSBETUEgbWFwcGluZyhzKSBmb3IgYW4gdXJiCisgKiBAdXJiOiB1cmIgd2hvc2UgdHJhbnNmZXJfYnVmZmVyL3NldHVwX3BhY2tldCB3aWxsIGJlIG1hcHBlZAorICoKKyAqIFJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCAoaW5kaWNhdGluZyBubyBidWZmZXIgY291bGQgYmUgbWFwcGVkKSwgb3IKKyAqIHRoZSBwYXJhbWV0ZXIuICBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCBhbmQgVVJCX05PX1NFVFVQX0RNQV9NQVAgYXJlCisgKiBhZGRlZCB0byB1cmItPnRyYW5zZmVyX2ZsYWdzIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMuICBJZiB0aGUgZGV2aWNlCisgKiBpcyBjb25uZWN0ZWQgdG8gdGhpcyBzeXN0ZW0gdGhyb3VnaCBhIG5vbi1ETUEgY29udHJvbGxlciwgdGhpcyBvcGVyYXRpb24KKyAqIGFsd2F5cyBzdWNjZWVkcy4KKyAqCisgKiBUaGlzIGNhbGwgd291bGQgbm9ybWFsbHkgYmUgdXNlZCBmb3IgYW4gdXJiIHdoaWNoIGlzIHJldXNlZCwgcGVyaGFwcworICogYXMgdGhlIHRhcmdldCBvZiBhIGxhcmdlIHBlcmlvZGljIHRyYW5zZmVyLCB3aXRoIHVzYl9idWZmZXJfZG1hc3luYygpCisgKiBjYWxscyB0byBzeW5jaHJvbml6ZSBtZW1vcnkgYW5kIGRtYSBzdGF0ZS4KKyAqCisgKiBSZXZlcnNlIHRoZSBlZmZlY3Qgb2YgdGhpcyBjYWxsIHdpdGggdXNiX2J1ZmZlcl91bm1hcCgpLgorICovCisjaWYgMAorc3RydWN0IHVyYiAqdXNiX2J1ZmZlcl9tYXAgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghdXJiCisJCQl8fCAhdXJiLT5kZXYKKwkJCXx8ICEoYnVzID0gdXJiLT5kZXYtPmJ1cykKKwkJCXx8ICEoY29udHJvbGxlciA9IGJ1cy0+Y29udHJvbGxlcikpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCXVyYi0+dHJhbnNmZXJfZG1hID0gZG1hX21hcF9zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCT8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpCisJCQl1cmItPnNldHVwX2RtYSA9IGRtYV9tYXBfc2luZ2xlIChjb250cm9sbGVyLAorCQkJCQl1cmItPnNldHVwX3BhY2tldCwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJLy8gRklYTUUgZ2VuZXJpYyBhcGkgYnJva2VuIGxpa2UgcGNpLCBjYW4ndCByZXBvcnQgZXJyb3JzCisJLy8gaWYgKHVyYi0+dHJhbnNmZXJfZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHJldHVybiAwOworCX0gZWxzZQorCQl1cmItPnRyYW5zZmVyX2RtYSA9IH4wOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQkJfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7CisJcmV0dXJuIHVyYjsKK30KKyNlbmRpZiAgLyogIDAgICovCisKKy8qIFhYWCBESVNBQkxFRCwgbm8gdXNlcnMgY3VycmVudGx5LiAgSWYgeW91IHdpc2ggdG8gcmUtZW5hYmxlIHRoaXMKKyAqIFhYWCBwbGVhc2UgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN5bmMgaXMgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mCisgKiBYWFggdGhlIGJ1ZmZlciBmcm9tIGRldmljZSB0byBjcHUgb3IgdmljZSB2ZXJzZSwgYW5kIHRodXNseSB1c2UgdGhlCisgKiBYWFggYXBwcm9wcmlhdGUgX2Zvcl97Y3B1LGRldmljZX0oKSBtZXRob2QuICAtRGF2ZU0KKyAqLworI2lmIDAKKworLyoqCisgKiB1c2JfYnVmZmVyX2RtYXN5bmMgLSBzeW5jaHJvbml6ZSBETUEgYW5kIENQVSB2aWV3IG9mIGJ1ZmZlcihzKQorICogQHVyYjogdXJiIHdob3NlIHRyYW5zZmVyX2J1ZmZlci9zZXR1cF9wYWNrZXQgd2lsbCBiZSBzeW5jaHJvbml6ZWQKKyAqLwordm9pZCB1c2JfYnVmZmVyX2RtYXN5bmMgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghdXJiCisJCQl8fCAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkKKwkJCXx8ICF1cmItPmRldgorCQkJfHwgIShidXMgPSB1cmItPmRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKSkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCWRtYV9zeW5jX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCXVyYi0+dHJhbnNmZXJfZG1hLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJCWRtYV9zeW5jX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCQkJdXJiLT5zZXR1cF9kbWEsCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCX0KK30KKyNlbmRpZgorCisvKioKKyAqIHVzYl9idWZmZXJfdW5tYXAgLSBmcmVlIERNQSBtYXBwaW5nKHMpIGZvciBhbiB1cmIKKyAqIEB1cmI6IHVyYiB3aG9zZSB0cmFuc2Zlcl9idWZmZXIgd2lsbCBiZSB1bm1hcHBlZAorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2J1ZmZlcl9tYXAoKS4KKyAqLworI2lmIDAKK3ZvaWQgdXNiX2J1ZmZlcl91bm1hcCAoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCBkZXZpY2UJCSpjb250cm9sbGVyOworCisJaWYgKCF1cmIKKwkJCXx8ICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQorCQkJfHwgIXVyYi0+ZGV2CisJCQl8fCAhKGJ1cyA9IHVyYi0+ZGV2LT5idXMpCisJCQl8fCAhKGNvbnRyb2xsZXIgPSBidXMtPmNvbnRyb2xsZXIpKQorCQlyZXR1cm47CisKKwlpZiAoY29udHJvbGxlci0+ZG1hX21hc2spIHsKKwkJZG1hX3VubWFwX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCXVyYi0+dHJhbnNmZXJfZG1hLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQkJCXVyYi0+c2V0dXBfZG1hLAorCQkJCQlzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisJdXJiLT50cmFuc2Zlcl9mbGFncyAmPSB+KFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQkJfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7Cit9CisjZW5kaWYgIC8qICAwICAqLworCisvKioKKyAqIHVzYl9idWZmZXJfbWFwX3NnIC0gY3JlYXRlIHNjYXR0ZXJsaXN0IERNQSBtYXBwaW5nKHMpIGZvciBhbiBlbmRwb2ludAorICogQGRldjogZGV2aWNlIHRvIHdoaWNoIHRoZSBzY2F0dGVybGlzdCB3aWxsIGJlIG1hcHBlZAorICogQHBpcGU6IGVuZHBvaW50IGRlZmluaW5nIHRoZSBtYXBwaW5nIGRpcmVjdGlvbgorICogQHNnOiB0aGUgc2NhdHRlcmxpc3QgdG8gbWFwCisgKiBAbmVudHM6IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2NhdHRlcmxpc3QKKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgZWl0aGVyIDwgMCAoaW5kaWNhdGluZyBubyBidWZmZXJzIGNvdWxkIGJlIG1hcHBlZCksIG9yCisgKiB0aGUgbnVtYmVyIG9mIERNQSBtYXBwaW5nIGFycmF5IGVudHJpZXMgaW4gdGhlIHNjYXR0ZXJsaXN0LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgdGhlIHJlc3VsdGluZyBETUEgYWRkcmVzc2VzIGZyb20KKyAqIHRoZSBzY2F0dGVybGlzdCBpbnRvIFVSQiB0cmFuc2ZlciBidWZmZXIgcG9pbnRlcnMsIGFuZCBmb3Igc2V0dGluZyB0aGUKKyAqIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHRyYW5zZmVyIGZsYWcgaW4gZWFjaCBvZiB0aG9zZSBVUkJzLgorICoKKyAqIFRvcCBJL08gcmF0ZXMgY29tZSBmcm9tIHF1ZXVpbmcgVVJCcywgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBlYWNoIG9uZQorICogdG8gY29tcGxldGUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IEkvTy4gICBUaGlzIGlzIHBhcnRpY3VsYXJseSBlYXN5CisgKiB0byBkbyB3aXRoIHNjYXR0ZXJsaXN0cy4gIEp1c3QgYWxsb2NhdGUgYW5kIHN1Ym1pdCBvbmUgVVJCIGZvciBlYWNoIERNQQorICogbWFwcGluZyBlbnRyeSByZXR1cm5lZCwgc3RvcHBpbmcgb24gdGhlIGZpcnN0IGVycm9yIG9yIHdoZW4gYWxsIHN1Y2NlZWQuCisgKiBCZXR0ZXIgeWV0LCB1c2UgdGhlIHVzYl9zZ18qKCkgY2FsbHMsIHdoaWNoIGRvIHRoYXQgKGFuZCBtb3JlKSBmb3IgeW91LgorICoKKyAqIFRoaXMgY2FsbCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHdoZW4gdHJhbnNsYXRpbmcgc2NhdHRlcmxpc3QgcmVxdWVzdHMsCisgKiByYXRoZXIgdGhhbiB1c2JfYnVmZmVyX21hcCgpLCBzaW5jZSBvbiBzb21lIGhhcmR3YXJlICh3aXRoIElPTU1VcykgaXQKKyAqIG1heSBiZSBhYmxlIHRvIGNvYWxlc2NlIG1hcHBpbmdzIGZvciBpbXByb3ZlZCBJL08gZWZmaWNpZW5jeS4KKyAqCisgKiBSZXZlcnNlIHRoZSBlZmZlY3Qgb2YgdGhpcyBjYWxsIHdpdGggdXNiX2J1ZmZlcl91bm1hcF9zZygpLgorICovCitpbnQgdXNiX2J1ZmZlcl9tYXBfc2cgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cykKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghZGV2CisJCQl8fCB1c2JfcGlwZWNvbnRyb2wgKHBpcGUpCisJCQl8fCAhKGJ1cyA9IGRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKQorCQkJfHwgIWNvbnRyb2xsZXItPmRtYV9tYXNrKQorCQlyZXR1cm4gLTE7CisKKwkvLyBGSVhNRSBnZW5lcmljIGFwaSBicm9rZW4gbGlrZSBwY2ksIGNhbid0IHJlcG9ydCBlcnJvcnMKKwlyZXR1cm4gZG1hX21hcF9zZyAoY29udHJvbGxlciwgc2csIG5lbnRzLAorCQkJdXNiX3BpcGVpbiAocGlwZSkgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKK30KKworLyogWFhYIERJU0FCTEVELCBubyB1c2VycyBjdXJyZW50bHkuICBJZiB5b3Ugd2lzaCB0byByZS1lbmFibGUgdGhpcworICogWFhYIHBsZWFzZSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3luYyBpcyB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YKKyAqIFhYWCB0aGUgYnVmZmVyIGZyb20gZGV2aWNlIHRvIGNwdSBvciB2aWNlIHZlcnNlLCBhbmQgdGh1c2x5IHVzZSB0aGUKKyAqIFhYWCBhcHByb3ByaWF0ZSBfZm9yX3tjcHUsZGV2aWNlfSgpIG1ldGhvZC4gIC1EYXZlTQorICovCisjaWYgMAorCisvKioKKyAqIHVzYl9idWZmZXJfZG1hc3luY19zZyAtIHN5bmNocm9uaXplIERNQSBhbmQgQ1BVIHZpZXcgb2Ygc2NhdHRlcmxpc3QgYnVmZmVyKHMpCisgKiBAZGV2OiBkZXZpY2UgdG8gd2hpY2ggdGhlIHNjYXR0ZXJsaXN0IHdpbGwgYmUgbWFwcGVkCisgKiBAcGlwZTogZW5kcG9pbnQgZGVmaW5pbmcgdGhlIG1hcHBpbmcgZGlyZWN0aW9uCisgKiBAc2c6IHRoZSBzY2F0dGVybGlzdCB0byBzeW5jaHJvbml6ZQorICogQG5faHdfZW50czogdGhlIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBmcm9tIHVzYl9idWZmZXJfbWFwX3NnCisgKgorICogVXNlIHRoaXMgd2hlbiB5b3UgYXJlIHJlLXVzaW5nIGEgc2NhdHRlcmxpc3QncyBkYXRhIGJ1ZmZlcnMgZm9yCisgKiBhbm90aGVyIFVTQiByZXF1ZXN0LgorICovCit2b2lkIHVzYl9idWZmZXJfZG1hc3luY19zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cykKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghZGV2CisJCQl8fCAhKGJ1cyA9IGRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKQorCQkJfHwgIWNvbnRyb2xsZXItPmRtYV9tYXNrKQorCQlyZXR1cm47CisKKwlkbWFfc3luY19zZyAoY29udHJvbGxlciwgc2csIG5faHdfZW50cywKKwkJCXVzYl9waXBlaW4gKHBpcGUpID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7Cit9CisjZW5kaWYKKworLyoqCisgKiB1c2JfYnVmZmVyX3VubWFwX3NnIC0gZnJlZSBETUEgbWFwcGluZyhzKSBmb3IgYSBzY2F0dGVybGlzdAorICogQGRldjogZGV2aWNlIHRvIHdoaWNoIHRoZSBzY2F0dGVybGlzdCB3aWxsIGJlIG1hcHBlZAorICogQHBpcGU6IGVuZHBvaW50IGRlZmluaW5nIHRoZSBtYXBwaW5nIGRpcmVjdGlvbgorICogQHNnOiB0aGUgc2NhdHRlcmxpc3QgdG8gdW5tYXAKKyAqIEBuX2h3X2VudHM6IHRoZSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSB1c2JfYnVmZmVyX21hcF9zZworICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2J1ZmZlcl9tYXBfc2coKS4KKyAqLwordm9pZCB1c2JfYnVmZmVyX3VubWFwX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCBkZXZpY2UJCSpjb250cm9sbGVyOworCisJaWYgKCFkZXYKKwkJCXx8ICEoYnVzID0gZGV2LT5idXMpCisJCQl8fCAhKGNvbnRyb2xsZXIgPSBidXMtPmNvbnRyb2xsZXIpCisJCQl8fCAhY29udHJvbGxlci0+ZG1hX21hc2spCisJCXJldHVybjsKKworCWRtYV91bm1hcF9zZyAoY29udHJvbGxlciwgc2csIG5faHdfZW50cywKKwkJCXVzYl9waXBlaW4gKHBpcGUpID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOworCisJaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJCXJldHVybiB1c2Jfc3VzcGVuZF9kZXZpY2UgKHRvX3VzYl9kZXZpY2UoZGV2KSwgc3RhdGUpOworCisJaWYgKChkZXYtPmRyaXZlciA9PSBOVUxMKSB8fAorCSAgICAoZGV2LT5kcml2ZXJfZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwkvKiB0aGVyZSdzIG9ubHkgb25lIFVTQiBzdXNwZW5kIHN0YXRlICovCisJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZHJpdmVyLT5zdXNwZW5kKQorCQlyZXR1cm4gZHJpdmVyLT5zdXNwZW5kKGludGYsIHN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXI7CisKKwkvKiBkZXZpY2VzIHJlc3VtZSB0aHJvdWdoIHRoZWlyIGh1YiAqLworCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQorCQlyZXR1cm4gdXNiX3Jlc3VtZV9kZXZpY2UgKHRvX3VzYl9kZXZpY2UoZGV2KSk7CisKKwlpZiAoKGRldi0+ZHJpdmVyID09IE5VTEwpIHx8CisJICAgIChkZXYtPmRyaXZlcl9kYXRhID09ICZ1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YSkpCisJCXJldHVybiAwOworCisJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCWlmIChkcml2ZXItPnJlc3VtZSkKKwkJcmV0dXJuIGRyaXZlci0+cmVzdW1lKGludGYpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0geworCS5uYW1lID0JCSJ1c2IiLAorCS5tYXRjaCA9CXVzYl9kZXZpY2VfbWF0Y2gsCisJLmhvdHBsdWcgPQl1c2JfaG90cGx1ZywKKwkuc3VzcGVuZCA9CXVzYl9nZW5lcmljX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9nZW5lcmljX3Jlc3VtZSwKK307CisKKyNpZm5kZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zZXR1cF9kaXNhYmxlKGNoYXIgKnN0cikKK3sKKwlub3VzYiA9IDE7CisJcmV0dXJuIDE7Cit9CisKKy8qIGZvcm1hdCB0byBkaXNhYmxlIFVTQiBvbiBrZXJuZWwgY29tbWFuZCBsaW5lIGlzOiBub3VzYiAqLworX19zZXR1cCgibm91c2IiLCB1c2Jfc2V0dXBfZGlzYWJsZSk7CisKKyNlbmRpZgorCisvKgorICogZm9yIGV4dGVybmFsIHJlYWQgYWNjZXNzIHRvIDxub3VzYj4KKyAqLworaW50IHVzYl9kaXNhYmxlZCh2b2lkKQoreworCXJldHVybiBub3VzYjsKK30KKworLyoKKyAqIEluaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgdXNiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCWlmIChub3VzYikgeworCQlwcl9pbmZvICgiJXM6IFVTQiBzdXBwb3J0IGRpc2FibGVkXG4iLCB1c2Jjb3JlX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR2YWwgPSBidXNfcmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gb3V0OworCXJldHZhbCA9IHVzYl9ob3N0X2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGhvc3RfaW5pdF9mYWlsZWQ7CisJcmV0dmFsID0gdXNiX21ham9yX2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1ham9yX2luaXRfZmFpbGVkOworCXJldHZhbCA9IHVzYmZzX2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZzX2luaXRfZmFpbGVkOworCXJldHZhbCA9IHVzYl9odWJfaW5pdCgpOworCWlmIChyZXR2YWwpCisJCWdvdG8gaHViX2luaXRfZmFpbGVkOworCisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ1c2JfZ2VuZXJpY19kcml2ZXIpOworCWlmICghcmV0dmFsKQorCQlnb3RvIG91dDsKKworCXVzYl9odWJfY2xlYW51cCgpOworaHViX2luaXRfZmFpbGVkOgorCXVzYmZzX2NsZWFudXAoKTsKK2ZzX2luaXRfZmFpbGVkOgorCXVzYl9tYWpvcl9jbGVhbnVwKCk7CQorbWFqb3JfaW5pdF9mYWlsZWQ6CisJdXNiX2hvc3RfY2xlYW51cCgpOworaG9zdF9pbml0X2ZhaWxlZDoKKwlidXNfdW5yZWdpc3RlcigmdXNiX2J1c190eXBlKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQ2xlYW51cAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2V4aXQodm9pZCkKK3sKKwkvKiBUaGlzIHdpbGwgbWF0dGVyIGlmIHNodXRkb3duL3JlYm9vdCBkb2VzIGV4aXRjYWxscy4gKi8KKwlpZiAobm91c2IpCisJCXJldHVybjsKKworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1c2JfZ2VuZXJpY19kcml2ZXIpOworCXVzYl9tYWpvcl9jbGVhbnVwKCk7CisJdXNiZnNfY2xlYW51cCgpOworCXVzYl9odWJfY2xlYW51cCgpOworCXVzYl9ob3N0X2NsZWFudXAoKTsKKwlidXNfdW5yZWdpc3RlcigmdXNiX2J1c190eXBlKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHVzYl9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9leGl0KTsKKworLyoKKyAqIFVTQiBtYXkgYmUgYnVpbHQgaW50byB0aGUga2VybmVsIG9yIGJlIGJ1aWx0IGFzIG1vZHVsZXMuCisgKiBUaGVzZSBzeW1ib2xzIGFyZSBleHBvcnRlZCBmb3IgZGV2aWNlIChvciBob3N0IGNvbnRyb2xsZXIpCisgKiBkcml2ZXIgbW9kdWxlcyB0byB1c2UuCisgKi8KKworRVhQT1JUX1NZTUJPTCh1c2JfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTCh1c2JfZGVyZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKHVzYl9kaXNhYmxlZCk7CisKK0VYUE9SVF9TWU1CT0wodXNiX2FsbG9jX2Rldik7CitFWFBPUlRfU1lNQk9MKHVzYl9wdXRfZGV2KTsKK0VYUE9SVF9TWU1CT0wodXNiX2dldF9kZXYpOworRVhQT1JUX1NZTUJPTCh1c2JfaHViX3R0X2NsZWFyX2J1ZmZlcik7CisKK0VYUE9SVF9TWU1CT0wodXNiX2xvY2tfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX3RyeWxvY2tfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCk7CitFWFBPUlRfU1lNQk9MKHVzYl91bmxvY2tfZGV2aWNlKTsKKworRVhQT1JUX1NZTUJPTCh1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfbWF0Y2hfaWQpOworRVhQT1JUX1NZTUJPTCh1c2JfZmluZF9pbnRlcmZhY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfaWZudW1fdG9faWYpOworRVhQT1JUX1NZTUJPTCh1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcpOworCitFWFBPUlRfU1lNQk9MKHVzYl9yZXNldF9kZXZpY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfZGlzY29ubmVjdCk7CisKK0VYUE9SVF9TWU1CT0woX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IpOworCitFWFBPUlRfU1lNQk9MKHVzYl9maW5kX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIpOworCitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2FsbG9jKTsKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfZnJlZSk7CisKKyNpZiAwCitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX21hcCk7CitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2RtYXN5bmMpOworRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl91bm1hcCk7CisjZW5kaWYKKworRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl9tYXBfc2cpOworI2lmIDAKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfZG1hc3luY19zZyk7CisjZW5kaWYKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfdW5tYXBfc2cpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzMzZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtMCwwICsxLDQ2IEBACisvKiBGdW5jdGlvbnMgbG9jYWwgdG8gZHJpdmVycy91c2IvY29yZS8gKi8KKworZXh0ZXJuIHZvaWQgdXNiX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworZXh0ZXJuIHZvaWQgdXNiX2Rpc2FibGVfZW5kcG9pbnQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlcGFkZHIpOworZXh0ZXJuIHZvaWQgdXNiX2Rpc2FibGVfaW50ZXJmYWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gdm9pZCB1c2JfcmVsZWFzZV9pbnRlcmZhY2VfY2FjaGUoc3RydWN0IGtyZWYgKnJlZik7CitleHRlcm4gdm9pZCB1c2JfZGlzYWJsZV9kZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBza2lwX2VwMCk7CisKK2V4dGVybiBpbnQgdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gaW50IHVzYl9zZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgY29uZmlndXJhdGlvbik7CisKK2V4dGVybiB2b2lkIHVzYl9sb2NrX2FsbF9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX3VubG9ja19hbGxfZGV2aWNlcyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgdXNiX2tpY2tfa2h1YmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2JfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworCisvKiBmb3IgbGFiZWxpbmcgZGlhZ25vc3RpY3MgKi8KK2V4dGVybiBjb25zdCBjaGFyICp1c2Jjb3JlX25hbWU7CisKKy8qIHVzYmZzIHN0dWZmICovCitleHRlcm4gc3RydWN0IHVzYl9kcml2ZXIgdXNiZnNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiB2b2lkIHVzYmZzX2Nvbm5fZGlzY19ldmVudCh2b2lkKTsKKworc3RydWN0IGRldl9zdGF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAgIC8qIHN0YXRlIGxpc3QgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCBmaWxlICpmaWxlOworCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAvKiBwcm90ZWN0cyB0aGUgYXN5bmMgdXJiIGxpc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBhc3luY19wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNfY29tcGxldGVkOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7ICAgICAvKiB3YWtlIHVwIGlmIGEgcmVxdWVzdCBjb21wbGV0ZWQgKi8KKwl1bnNpZ25lZCBpbnQgZGlzY3NpZ25yOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZGlzY3Rhc2s7CisJdm9pZCBfX3VzZXIgKmRpc2Njb250ZXh0OworCXVuc2lnbmVkIGxvbmcgaWZjbGFpbWVkOworfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI0ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTAsMCArMSwzODkgQEAKKyMKKyMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzCisjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kCisjICAgIChiKSB0aGUgZ2FkZ2V0IGRyaXZlciB1c2luZyBpdC4KKyMKKyMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIQorIworIyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggIkEiIGphY2tzKS4KKyMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCAiQiIgamFja3MpLgorIyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIG9mIGNvbnRyb2xsZXIuCisjCisjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSAiTWluaS1BQiIgamFjaywgc3lzdGVtcyB3aXRoCisjIGJvdGgga2luZHMgb2YgY29udHJvbGxlciBjYW4gYWxzbyBzdXBwb3J0ICJVU0IgT24tdGhlLUdvIiAoQ09ORklHX1VTQl9PVEcpLgorIworbWVudSAiVVNCIEdhZGdldCBTdXBwb3J0IgorCitjb25maWcgVVNCX0dBREdFVAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBVU0IgR2FkZ2V0cyIKKwloZWxwCisJICAgVVNCIGlzIGEgbWFzdGVyL3NsYXZlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgbWFzdGVyCisJICAgaG9zdCAoc3VjaCBhcyBhIFBDKSBjb250cm9sbGluZyB1cCB0byAxMjcgcGVyaXBoZXJhbCBkZXZpY2VzLgorCSAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDoKKwkgICB5b3UgY2FuJ3QgY29ubmVjdCBhICJ0by10aGUtaG9zdCIgY29ubmVjdG9yIHRvIGEgcGVyaXBoZXJhbC4KKworCSAgIExpbnV4IGNhbiBydW4gaW4gdGhlIGhvc3QsIG9yIGluIHRoZSBwZXJpcGhlcmFsLiAgSW4gYm90aCBjYXNlcworCSAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmUKKwkgICB0YWxraW5nIHRvIGl0LiAgUGVyaXBoZXJhbCBjb250cm9sbGVycyBhcmUgb2Z0ZW4gZGlzY3JldGUgc2lsaWNvbiwKKwkgICBvciBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBDUFUgaW4gYSBtaWNyb2NvbnRyb2xsZXIuICBUaGUgbW9yZQorCSAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgbGlrZSAiRUhDSSIsICJPSENJIiwKKwkgICBvciAiVUhDSSIsIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDCisJICAgbW90aGVyYm9hcmRzLgorCisJICAgRW5hYmxlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIExpbnV4IGluc2lkZQorCSAgIGEgVVNCIHBlcmlwaGVyYWwgZGV2aWNlLiAgQ29uZmlndXJlIG9uZSBoYXJkd2FyZSBkcml2ZXIgZm9yIHlvdXIKKwkgICBwZXJpcGhlcmFsL2RldmljZSBzaWRlIGJ1cyBjb250cm9sbGVyLCBhbmQgYSAiZ2FkZ2V0IGRyaXZlciIgZm9yCisJICAgeW91ciBwZXJpcGhlcmFsIHByb3RvY29sLiAgKElmIHlvdSB1c2UgbW9kdWxhciBnYWRnZXQgZHJpdmVycywKKwkgICB5b3UgbWF5IGNvbmZpZ3VyZSBtb3JlIHRoYW4gb25lLikKKworCSAgIElmIGluIGRvdWJ0LCBzYXkgIk4iIGFuZCBkb24ndCBlbmFibGUgdGhlc2UgZHJpdmVyczsgbW9zdCBwZW9wbGUKKwkgICBkb24ndCBoYXZlIHRoaXMga2luZCBvZiBoYXJkd2FyZSAoZXhjZXB0IG1heWJlIGluc2lkZSBMaW51eCBQREFzKS4KKworCSAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXQ+IGFuZAorCSAgIHRoZSBrZXJuZWwgRG9jQm9vayBkb2N1bWVudGF0aW9uIGZvciB0aGlzIEFQSS4KKworY29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVMKKwlib29sZWFuICJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIFBST0NfRlMKKwloZWxwCisJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKKwkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgc3VjaCBhcyAvcHJvYy9kcml2ZXIvdWRjCisJICAgKGZvciBhIHBlcmlwaGVyYWwgY29udHJvbGxlcikuICBUaGUgaW5mb3JtYXRpb24gaW4gdGhlc2UKKwkgICBmaWxlcyBtYXkgaGVscCB3aGVuIHlvdSdyZSB0cm91Ymxlc2hvb3Rpbmcgb3IgYnJpbmdpbmcgdXAgYQorCSAgIGRyaXZlciBvbiBhIG5ldyBib2FyZC4gICBFbmFibGUgdGhlc2UgZmlsZXMgYnkgY2hvb3NpbmcgIlkiCisJICAgaGVyZS4gIElmIGluIGRvdWJ0LCBvciB0byBjb25zZXJ2ZSBrZXJuZWwgbWVtb3J5LCBzYXkgIk4iLgorCisjCisjIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIgU3VwcG9ydAorIworY2hvaWNlCisJcHJvbXB0ICJVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gVVNCX0dBREdFVAorCWhlbHAKKwkgICBBIFVTQiBkZXZpY2UgdXNlcyBhIGNvbnRyb2xsZXIgdG8gdGFsayB0byBpdHMgaG9zdC4KKwkgICBTeXN0ZW1zIHNob3VsZCBoYXZlIG9ubHkgb25lIHN1Y2ggdXBzdHJlYW0gbGluay4KKwkgICBNYW55IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgcGxhdGZvcm0tc3BlY2lmaWM7IHRoZXNlCisJICAgb2Z0ZW4gbmVlZCBib2FyZC1zcGVjaWZpYyBob29rcy4KKworY29uZmlnIFVTQl9HQURHRVRfTkVUMjI4MAorCWJvb2xlYW4gIk5ldENoaXAgMjI4MCIKKwlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAorCWhlbHAKKwkgICBOZXRDaGlwIDIyODAgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLiAgCisJICAgCisJICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KKwkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKKwkgICBmdW5jdGlvbnMuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJuZXQyMjgwIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfTkVUMjI4MAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworY29uZmlnIFVTQl9HQURHRVRfUFhBMlhYCisJYm9vbGVhbiAiUFhBIDI1eCBvciBJWFAgNHh4IgorCWRlcGVuZHMgb24gKEFSQ0hfUFhBICYmIFBYQTI1eCkgfHwgQVJDSF9JWFA0WFgKKwloZWxwCisJICAgSW50ZWwncyBQWEEgMjV4IHNlcmllcyBYU2NhbGUgQVJNLTVURSBwcm9jZXNzb3JzIGluY2x1ZGUKKwkgICBhbiBpbnRlZ3JhdGVkIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4gIFRoZQorCSAgIGNvbnRyb2xsZXIgaW4gdGhlIElYUCA0eHggc2VyaWVzIGlzIHJlZ2lzdGVyLWNvbXBhdGlibGUuCisKKwkgICBJdCBoYXMgZmlmdGVlbiBmaXhlZC1mdW5jdGlvbiBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQKKwkgICB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMnh4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX1BYQTJYWAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1BYQTJYWAorCWRlZmF1bHQgVVNCX0dBREdFVAorCisjIGlmIHRoZXJlJ3Mgb25seSBvbmUgZ2FkZ2V0IGRyaXZlciwgdXNpbmcgb25seSB0d28gYnVsayBlbmRwb2ludHMsCisjIGRvbid0IHdhc3RlIG1lbW9yeSBmb3IgdGhlIG90aGVyIGVuZHBvaW50cworY29uZmlnIFVTQl9QWEEyWFhfU01BTEwKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUFhBMlhYCisJYm9vbAorCWRlZmF1bHQgbiBpZiBVU0JfRVRIX1JORElTCisJZGVmYXVsdCB5IGlmIFVTQl9aRVJPCisJZGVmYXVsdCB5IGlmIFVTQl9FVEgKKwlkZWZhdWx0IHkgaWYgVVNCX0dfU0VSSUFMCisKK2NvbmZpZyBVU0JfR0FER0VUX0dPS1UKKwlib29sZWFuICJUb3NoaWJhIFRDODZDMDAxICdHb2t1LVMnIgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgIFRoZSBUb3NoaWJhIFRDODZDMDAxIGlzIGEgUENJIGRldmljZSB3aGljaCBpbmNsdWRlcyBjb250cm9sbGVycworCSAgIGZvciBmdWxsIHNwZWVkIFVTQiBkZXZpY2VzLCBJREUsIEkyQywgU0lPLCBwbHVzIGEgVVNCIGhvc3QgKE9IQ0kpLgorCSAgIAorCSAgIFRoZSBkZXZpY2UgY29udHJvbGxlciBoYXMgdGhyZWUgY29uZmlndXJhYmxlIChidWxrIG9yIGludGVycnVwdCkKKwkgICBlbmRwb2ludHMsIHBsdXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdva3VfdWRjIiBhbmQgdG8gZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfR09LVQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0dPS1UKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworCitjb25maWcgVVNCX0dBREdFVF9MSDdBNDBYCisJYm9vbGVhbiAiTEg3QTQwWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWAorCWhlbHAKKyAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyIGZvciBMSDdBNDB4CisKK2NvbmZpZyBVU0JfTEg3QTQwWAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0xIN0E0MFgKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworCitjb25maWcgVVNCX0dBREdFVF9PTUFQCisJYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKKwloZWxwCisJICAgTWFueSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIHByb2Nlc3NvcnMgaGF2ZSBmbGV4aWJsZSBmdWxsCisJICAgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycywgd2l0aCBzdXBwb3J0IGZvciB1cCB0byAzMAorCSAgIGVuZHBvaW50cyAocGx1cyBlbmRwb2ludCB6ZXJvKS4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZQorCSAgIGNvbnRyb2xsZXIgaW4gdGhlIE9NQVAgMTYxMSwgYW5kIHNob3VsZCB3b3JrIHdpdGggY29udHJvbGxlcnMKKwkgICBpbiBvdGhlciBPTUFQIHByb2Nlc3NvcnMgdG9vLCBnaXZlbiBtaW5vciB0d2Vha3MuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJvbWFwX3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX09NQVAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQCisJZGVmYXVsdCBVU0JfR0FER0VUCisKK2NvbmZpZyBVU0JfT1RHCisJYm9vbGVhbiAiT1RHIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKKwloZWxwCisJICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQorCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKKwkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAorCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCisKKwkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KKworCitjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKKwlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICBUaGlzIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZW11bGF0ZXMgVVNCLCBsb29waW5nIGFsbCBkYXRhIHRyYW5zZmVyCisJICByZXF1ZXN0cyBiYWNrIHRvIGEgVVNCICJnYWRnZXQgZHJpdmVyIiBpbiB0aGUgc2FtZSBob3N0LiAgVGhlIGhvc3QKKwkgIHNpZGUgaXMgdGhlIG1hc3RlcjsgdGhlIGdhZGdldCBzaWRlIGlzIHRoZSBzbGF2ZS4gIEdhZGdldCBkcml2ZXJzCisJICBjYW4gYmUgaGlnaCwgZnVsbCwgb3IgbG93IHNwZWVkOyBhbmQgdGhleSBoYXZlIGFjY2VzcyB0byBlbmRwb2ludHMKKwkgIGxpa2UgdGhvc2UgZnJvbSBORVQyMjgwLCBQWEEyeHgsIG9yIFNBMTEwMCBoYXJkd2FyZS4KKwkgIAorCSAgVGhpcyBtYXkgaGVscCBpbiBzb21lIHN0YWdlcyBvZiBjcmVhdGluZyBhIGRyaXZlciB0byBlbWJlZCBpbiBhCisJICBMaW51eCBkZXZpY2UsIHNpbmNlIGl0IGxldHMgeW91IGRlYnVnIHNldmVyYWwgcGFydHMgb2YgdGhlIGdhZGdldAorCSAgZHJpdmVyIHdpdGhvdXQgaXRzIGhhcmR3YXJlIG9yIGRyaXZlcnMgYmVpbmcgaW52b2x2ZWQuCisJICAKKwkgIFNpbmNlIHN1Y2ggYSBnYWRnZXQgc2lkZSBkcml2ZXIgbmVlZHMgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBob3N0CisJICBzaWRlIExpbnV4LVVTQiBkZXZpY2UgZHJpdmVyLCB0aGlzIG1heSBoZWxwIHRvIGRlYnVnIGJvdGggc2lkZXMKKwkgIG9mIGEgVVNCIHByb3RvY29sIHN0YWNrLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImR1bW15X2hjZCIgYW5kIGZvcmNlIGFsbAorCSAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfRFVNTVlfSENECisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfRFVNTVlfSENECisJZGVmYXVsdCBVU0JfR0FER0VUCisKKyMgTk9URTogIFBsZWFzZSBrZWVwIGR1bW15X2hjZCBMQVNUIHNvIHRoYXQgInJlYWwgaGFyZHdhcmUiIGFwcGVhcnMKKyMgZmlyc3QgYW5kIHdpbGwgYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBVU0JfR0FER0VUX0RVQUxTUEVFRAorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBNZWFucyB0aGF0IGdhZGdldCBkcml2ZXJzIHNob3VsZCBpbmNsdWRlIGV4dHJhIGRlc2NyaXB0b3JzCisJICBhbmQgY29kZSB0byBoYW5kbGUgZHVhbC1zcGVlZCBjb250cm9sbGVycy4KKworIworIyBVU0IgR2FkZ2V0IERyaXZlcnMKKyMKK2Nob2ljZQorCXRyaXN0YXRlICJVU0IgR2FkZ2V0IERyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUCisJZGVmYXVsdCBVU0JfRVRICisJaGVscAorCSAgQSBMaW51eCAiR2FkZ2V0IERyaXZlciIgdGFsa3MgdG8gdGhlIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIKKwkgIGRyaXZlciB0aHJvdWdoIHRoZSBhYnN0cmFjdCAiZ2FkZ2V0IiBBUEkuICBTb21lIG90aGVyIG9wZXJhdGluZworCSAgc3lzdGVtcyBjYWxsIHRoZXNlICJjbGllbnQiIGRyaXZlcnMsIG9mIHdoaWNoICJjbGFzcyBkcml2ZXJzIgorCSAgYXJlIGEgc3Vic2V0IChpbXBsZW1lbnRpbmcgYSBVU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24pLgorCSAgQSBnYWRnZXQgZHJpdmVyIGltcGxlbWVudHMgb25lIG9yIG1vcmUgVVNCIGZ1bmN0aW9ucyB1c2luZworCSAgdGhlIHBlcmlwaGVyYWwgaGFyZHdhcmUuCisKKwkgIEdhZGdldCBkcml2ZXJzIGFyZSBoYXJkd2FyZS1uZXV0cmFsLCBvciAicGxhdGZvcm0gaW5kZXBlbmRlbnQiLAorCSAgZXhjZXB0IHRoYXQgdGhleSBzb21ldGltZXMgbXVzdCB1bmRlcnN0YW5kIHF1aXJrcyBvciBsaW1pdGF0aW9ucworCSAgb2YgdGhlIHBhcnRpY3VsYXIgY29udHJvbGxlcnMgdGhleSB3b3JrIHdpdGguICBGb3IgZXhhbXBsZSwgd2hlbgorCSAgYSBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbnMgb3IgcHJvdmlkZQorCSAgZW5vdWdoIG9mIHRoZSByaWdodCB0eXBlcyBvZiBlbmRwb2ludHMsIHRoZSBnYWRnZXQgZHJpdmVyIG1pZ2h0CisJICBub3QgYmUgYWJsZSB3b3JrIHdpdGggdGhhdCBjb250cm9sbGVyLCBvciBtaWdodCBuZWVkIHRvIGltcGxlbWVudAorCSAgYSBsZXNzIGNvbW1vbiB2YXJpYW50IG9mIGEgZGV2aWNlIGNsYXNzIHByb3RvY29sLgorCisjIHRoaXMgZmlyc3Qgc2V0IG9mIGRyaXZlcnMgYWxsIGRlcGVuZCBvbiBidWxrLWNhcGFibGUgaGFyZHdhcmUuCisKK2NvbmZpZyBVU0JfWkVSTworCXRyaXN0YXRlICJHYWRnZXQgWmVybyAoREVWRUxPUE1FTlQpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgR2FkZ2V0IFplcm8gaXMgYSB0d28tY29uZmlndXJhdGlvbiBkZXZpY2UuICBJdCBlaXRoZXIgc2lua3MgYW5kCisJICBzb3VyY2VzIGJ1bGsgZGF0YTsgb3IgaXQgbG9vcHMgYmFjayBhIGNvbmZpZ3VyYWJsZSBudW1iZXIgb2YKKwkgIHRyYW5zZmVycy4gIEl0IGFsc28gaW1wbGVtZW50cyBjb250cm9sIHJlcXVlc3RzLCBmb3IgImNoYXB0ZXIgOSIKKwkgIGNvbmZvcm1hbmNlLiAgVGhlIGRyaXZlciBuZWVkcyBvbmx5IHR3byBidWxrLWNhcGFibGUgZW5kcG9pbnRzLCBzbworCSAgaXQgY2FuIHdvcmsgb24gdG9wIG9mIG1vc3QgZGV2aWNlLXNpZGUgdXNiIGNvbnRyb2xsZXJzLiAgSXQncworCSAgdXNlZnVsIGZvciB0ZXN0aW5nLCBhbmQgaXMgYWxzbyBhIHdvcmtpbmcgZXhhbXBsZSBzaG93aW5nIGhvdworCSAgVVNCICJnYWRnZXQgZHJpdmVycyIgY2FuIGJlIHdyaXR0ZW4uCisKKwkgIE1ha2UgdGhpcyBiZSB0aGUgZmlyc3QgZHJpdmVyIHlvdSB0cnkgdXNpbmcgb24gdG9wIG9mIGFueSBuZXcKKwkgIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVyLiAgVGhlbiB5b3UgY2FuIHVzZSBob3N0LXNpZGUKKwkgIHRlc3Qgc29mdHdhcmUsIGxpa2UgdGhlICJ1c2J0ZXN0IiBkcml2ZXIsIHRvIHB1dCB5b3VyIGhhcmR3YXJlCisJICBhbmQgaXRzIGRyaXZlciB0aHJvdWdoIGEgYmFzaWMgc2V0IG9mIGZ1bmN0aW9uYWwgdGVzdHMuCisKKwkgIEdhZGdldCBaZXJvIGFsc28gd29ya3Mgd2l0aCB0aGUgaG9zdC1zaWRlICJ1c2Itc2tlbGV0b24iIGRyaXZlciwKKwkgIGFuZCB3aXRoIG1hbnkga2luZHMgb2YgaG9zdC1zaWRlIHRlc3Qgc29mdHdhcmUuICBZb3UgbWF5IG5lZWQKKwkgIHRvIHR3ZWFrIHByb2R1Y3QgYW5kIHZlbmRvciBJRHMgYmVmb3JlIGhvc3Qgc29mdHdhcmUga25vd3MgYWJvdXQKKwkgIHRoaXMgZGV2aWNlLCBhbmQgYXJyYW5nZSB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbi4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnX3plcm8iLgorCitjb25maWcgVVNCX1pFUk9fSE5QVEVTVAorCWJvb2xlYW4gIkhOUCBUZXN0IERldmljZSIKKwlkZXBlbmRzIG9uIFVTQl9aRVJPICYmIFVTQl9PVEcKKwloZWxwCisJICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGRldmljZSB0byBlbnVtZXJhdGUgdXNpbmcgdGhlIGRldmljZQorCSAgaWRlbnRpZmllcnMgb2YgdGhlIFVTQi1PVEcgdGVzdCBkZXZpY2UuICBUaGF0IG1lYW5zIHRoYXQgd2hlbgorCSAgdGhpcyBnYWRnZXQgY29ubmVjdHMgdG8gYW5vdGhlciBPVEcgZGV2aWNlLCB3aXRoIHRoaXMgb25lIHVzaW5nCisJICB0aGUgIkItUGVyaXBoZXJhbCIgcm9sZSwgdGhhdCBkZXZpY2Ugd2lsbCB1c2UgSE5QIHRvIGxldCB0aGlzCisJICBvbmUgc2VydmUgYXMgdGhlIFVTQiBob3N0IGluc3RlYWQgKGluIHRoZSAiQi1Ib3N0IiByb2xlKS4KKworY29uZmlnIFVTQl9FVEgKKwl0cmlzdGF0ZSAiRXRoZXJuZXQgR2FkZ2V0ICh3aXRoIENEQyBFdGhlcm5ldCBzdXBwb3J0KSIKKwlkZXBlbmRzIG9uIE5FVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgRXRoZXJuZXQgc3R5bGUgY29tbXVuaWNhdGlvbiwgaW4gZWl0aGVyCisJICBvZiB0d28gd2F5czoKKwkgIAorCSAgIC0gVGhlICJDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcyIgKENEQykgRXRoZXJuZXQgQ29udHJvbCBNb2RlbC4KKwkgICAgIFRoYXQgcHJvdG9jb2wgaXMgb2Z0ZW4gYXZvaWRlZCB3aXRoIHB1cmUgRXRoZXJuZXQgYWRhcHRlcnMsIGluCisJICAgICBmYXZvciBvZiBzaW1wbGVyIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYnV0IGlzIHdpZGVseQorCSAgICAgc3VwcG9ydGVkIGJ5IGZpcm13YXJlIGZvciBzbWFydCBuZXR3b3JrIGRldmljZXMuCisKKwkgICAtIE9uIGhhcmR3YXJlIGNhbid0IGltcGxlbWVudCB0aGF0IHByb3RvY29sLCBhIHNpbXBsZSBDREMgc3Vic2V0CisJICAgICBpcyB1c2VkLCBwbGFjaW5nIGZld2VyIGRlbWFuZHMgb24gVVNCLgorCisJICBSTkRJUyBzdXBwb3J0IGlzIGEgdGhpcmQgb3B0aW9uLCBtb3JlIGRlbWFuZGluZyB0aGFuIHRoYXQgc3Vic2V0LgorCisJICBXaXRoaW4gdGhlIFVTQiBkZXZpY2UsIHRoaXMgZ2FkZ2V0IGRyaXZlciBleHBvc2VzIGEgbmV0d29yayBkZXZpY2UKKwkgICJ1c2JYIiwgd2hlcmUgWCBkZXBlbmRzIG9uIHdoYXQgb3RoZXIgbmV0d29ya2luZyBkZXZpY2VzIHlvdSBoYXZlLgorCSAgVHJlYXQgaXQgbGlrZSBhIHR3by1ub2RlIEV0aGVybmV0IGxpbms6ICBob3N0LCBhbmQgZ2FkZ2V0LgorCisJICBUaGUgTGludXgtVVNCIGhvc3Qtc2lkZSAidXNibmV0IiBkcml2ZXIgaW50ZXJvcGVyYXRlcyB3aXRoIHRoaXMKKwkgIGRyaXZlciwgc28gdGhhdCBkZWVwIEkvTyBxdWV1ZXMgY2FuIGJlIHN1cHBvcnRlZC4gIE9uIDIuNCBrZXJuZWxzLAorCSAgdXNlICJDRENFdGhlciIgaW5zdGVhZCwgaWYgeW91J3JlIHVzaW5nIHRoZSBDREMgb3B0aW9uLiBUaGF0IENEQworCSAgbW9kZSBzaG91bGQgYWxzbyBpbnRlcm9wZXJhdGUgd2l0aCBzdGFuZGFyZCBDREMgRXRoZXJuZXQgY2xhc3MKKwkgIGRyaXZlcnMgb24gb3RoZXIgaG9zdCBvcGVyYXRpbmcgc3lzdGVtcy4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnX2V0aGVyIi4KKworY29uZmlnIFVTQl9FVEhfUk5ESVMKKwlib29sICJSTkRJUyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX0VUSCAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IHkKKwloZWxwCisJICAgTWljcm9zb2Z0IFdpbmRvd3MgWFAgYnVuZGxlcyB0aGUgIlJlbW90ZSBORElTIiAoUk5ESVMpIHByb3RvY29sLAorCSAgIGFuZCBNaWNyb3NvZnQgcHJvdmlkZXMgcmVkaXN0cmlidXRhYmxlIGJpbmFyeSBSTkRJUyBkcml2ZXJzIGZvcgorCSAgIG9sZGVyIHZlcnNpb25zIG9mIFdpbmRvd3MuCisKKwkgICBJZiB5b3Ugc2F5ICJ5IiBoZXJlLCB0aGUgRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciB3aWxsIHRyeSB0byBwcm92aWRlCisJICAgYSBzZWNvbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHN1cHBvcnRpbmcgUk5ESVMgdG8gdGFsayB0byBzdWNoCisJICAgTWljcm9zb2Z0IFVTQiBob3N0cy4KKwkgICAKKwkgICBUbyBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIHRoaXMsIHVzZSBEb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKKwkgICBhcyB0aGUgImRyaXZlciBpbmZvIGZpbGUiLiAgRm9yIHZlcnNpb25zIG9mIE1TLVdpbmRvd3Mgb2xkZXIgdGhhbgorCSAgIFhQLCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCBkcml2ZXJzIGZyb20gTWljcm9zb2Z0J3Mgd2Vic2l0ZTsgYSBVUkwKKwkgICBpcyBnaXZlbiBpbiBjb21tZW50cyBmb3VuZCBpbiB0aGF0IGluZm8gZmlsZS4KKworY29uZmlnIFVTQl9HQURHRVRGUworCXRyaXN0YXRlICJHYWRnZXQgRmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZQorCSAgcHJvZ3JhbXMgaW1wbGVtZW50IGEgc2luZ2xlLWNvbmZpZ3VyYXRpb24gVVNCIGRldmljZSwgaW5jbHVkaW5nCisJICBlbmRwb2ludCBJL08gYW5kIGNvbnRyb2wgcmVxdWVzdHMgdGhhdCBkb24ndCByZWxhdGUgdG8gZW51bWVyYXRpb24uCisJICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnkKKwkgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnYWRnZXRmcyIuCisKK2NvbmZpZyBVU0JfRklMRV9TVE9SQUdFCisJdHJpc3RhdGUgIkZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IgorCWhlbHAKKwkgIFRoZSBGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCBhY3RzIGFzIGEgVVNCIE1hc3MgU3RvcmFnZQorCSAgZGlzayBkcml2ZS4gIEFzIGl0cyBzdG9yYWdlIHJlcG9zaXRvcnkgaXQgY2FuIHVzZSBhIHJlZ3VsYXIKKwkgIGZpbGUgb3IgYSBibG9jayBkZXZpY2UgKGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIHRoZSAibG9vcCIKKwkgIGRldmljZSBkcml2ZXIpLCBzcGVjaWZpZWQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfZmlsZV9zdG9yYWdlIi4KKworY29uZmlnIFVTQl9GSUxFX1NUT1JBR0VfVEVTVAorCWJvb2wgIkZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IHRlc3RpbmcgdmVyc2lvbiIKKwlkZXBlbmRzIG9uIFVTQl9GSUxFX1NUT1JBR0UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgInkiIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXIgdGVzdGluZyB2ZXJzaW9uIG9mIHRoZQorCSAgRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQsIHVzZWZ1bCBmb3IgcHJvYmluZyB0aGUKKwkgIGJlaGF2aW9yIG9mIFVTQiBNYXNzIFN0b3JhZ2UgaG9zdHMuICBOb3QgbmVlZGVkIGZvcgorCSAgbm9ybWFsIG9wZXJhdGlvbi4KKworY29uZmlnIFVTQl9HX1NFUklBTAorCXRyaXN0YXRlICJTZXJpYWwgR2FkZ2V0ICh3aXRoIENEQyBBQ00gc3VwcG9ydCkiCisJaGVscAorCSAgVGhlIFNlcmlhbCBHYWRnZXQgdGFsa3MgdG8gdGhlIExpbnV4LVVTQiBnZW5lcmljIHNlcmlhbCBkcml2ZXIuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBhIENEQy1BQ00gbW9kdWxlIG9wdGlvbiwgd2hpY2ggY2FuIGJlIHVzZWQKKwkgIHRvIGludGVyb3BlcmF0ZSB3aXRoIE1TLVdpbmRvd3MgaG9zdHMgb3Igd2l0aCB0aGUgTGludXgtVVNCCisJICAiY2RjLWFjbSIgZHJpdmVyLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfc2VyaWFsIi4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dAorCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KKwkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisKKworIyBwdXQgZHJpdmVycyB0aGF0IG5lZWQgaXNvY2hyb25vdXMgdHJhbnNmZXIgc3VwcG9ydCAoZm9yIGF1ZGlvCisjIG9yIHZpZGVvIGNsYXNzIGdhZGdldCBkcml2ZXJzKSwgb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGhlcmUuCisKKyMgLSBub25lIHlldAorCitlbmRjaG9pY2UKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmQwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKQEAgLTAsMCArMSwzMCBAQAorIworIyBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMKKyMKK29iai0kKENPTkZJR19VU0JfRFVNTVlfSENEKQkrPSBkdW1teV9oY2Qubworb2JqLSQoQ09ORklHX1VTQl9ORVQyMjgwKQkrPSBuZXQyMjgwLm8KK29iai0kKENPTkZJR19VU0JfUFhBMlhYKQkrPSBweGEyeHhfdWRjLm8KK29iai0kKENPTkZJR19VU0JfR09LVSkJCSs9IGdva3VfdWRjLm8KK29iai0kKENPTkZJR19VU0JfT01BUCkJCSs9IG9tYXBfdWRjLm8KK29iai0kKENPTkZJR19VU0JfTEg3QTQwWCkJKz0gbGg3YTQweF91ZGMubworCisjCisjIFVTQiBnYWRnZXQgZHJpdmVycworIworZ196ZXJvLW9ianMJCQk6PSB6ZXJvLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCitnX2V0aGVyLW9ianMJCQk6PSBldGhlci5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIGVwYXV0b2NvbmYubworZ19zZXJpYWwtb2JqcwkJCTo9IHNlcmlhbC5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIGVwYXV0b2NvbmYubworZ2FkZ2V0ZnMtb2JqcwkJCTo9IGlub2RlLm8KK2dfZmlsZV9zdG9yYWdlLW9ianMJCTo9IGZpbGVfc3RvcmFnZS5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIFwKKwkJCQkJZXBhdXRvY29uZi5vCisKK2lmZXEgKCQoQ09ORklHX1VTQl9FVEhfUk5ESVMpLHkpCisJZ19ldGhlci1vYmpzCQkrPSBybmRpcy5vCitlbmRpZgorIAorb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KK29iai0kKENPTkZJR19VU0JfRVRIKQkJKz0gZ19ldGhlci5vCitvYmotJChDT05GSUdfVVNCX0dBREdFVEZTKQkrPSBnYWRnZXRmcy5vCitvYmotJChDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSkJKz0gZ19maWxlX3N0b3JhZ2Uubworb2JqLSQoQ09ORklHX1VTQl9HX1NFUklBTCkJKz0gZ19zZXJpYWwubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNDg2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWcuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIHVzYi9nYWRnZXQvY29uZmlnLmMgLS0gc2ltcGxpZnkgYnVpbGRpbmcgY29uZmlnIGRlc2NyaXB0b3JzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKworLyoqCisgKiB1c2JfZGVzY3JpcHRvcl9maWxsYnVmIC0gZmlsbCBidWZmZXIgd2l0aCBkZXNjcmlwdG9ycworICogQGJ1ZjogQnVmZmVyIHRvIGJlIGZpbGxlZAorICogQGJ1ZmxlbjogU2l6ZSBvZiBidWYKKyAqIEBzcmM6IEFycmF5IG9mIGRlc2NyaXB0b3IgcG9pbnRlcnMsIHRlcm1pbmF0ZWQgYnkgbnVsbCBwb2ludGVyLgorICoKKyAqIENvcGllcyBkZXNjcmlwdG9ycyBpbnRvIHRoZSBidWZmZXIsIHJldHVybmluZyB0aGUgbGVuZ3RoIG9yIGEKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhleSBjYW4ndCBhbGwgYmUgY29waWVkLiAgVXNlZnVsIHdoZW4KKyAqIGFzc2VtYmxpbmcgZGVzY3JpcHRvcnMgZm9yIGFuIGFzc29jaWF0ZWQgc2V0IG9mIGludGVyZmFjZXMgdXNlZAorICogYXMgcGFydCBvZiBjb25maWd1cmluZyBhIGNvbXBvc2l0ZSBkZXZpY2U7IG9yIGluIG90aGVyIGNhc2VzIHdoZXJlCisgKiBzZXRzIG9mIGRlc2NyaXB0b3JzIG5lZWQgdG8gYmUgbWFyc2hhbGVkLgorICovCitpbnQKK3VzYl9kZXNjcmlwdG9yX2ZpbGxidWYodm9pZCAqYnVmLCB1bnNpZ25lZCBidWZsZW4sCisJCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipzcmMpCit7CisJdTgJKmRlc3QgPSBidWY7CisKKwlpZiAoIXNyYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmaWxsIGJ1ZmZlciBmcm9tIHNyY1tdIHVudGlsIG51bGwgZGVzY3JpcHRvciBwdHIgKi8KKwlmb3IgKDsgMCAhPSAqc3JjOyBzcmMrKykgeworCQl1bnNpZ25lZAkJbGVuID0gKCpzcmMpLT5iTGVuZ3RoOworCisJCWlmIChsZW4gPiBidWZsZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtY3B5KGRlc3QsICpzcmMsIGxlbik7CisJCWJ1ZmxlbiAtPSBsZW47CisJCWRlc3QgKz0gbGVuOworCX0KKwlyZXR1cm4gZGVzdCAtICh1OCAqKWJ1ZjsKK30KKworCisvKioKKyAqIHVzYl9nYWRnZXRfY29uZmlnX2J1ZiAtIGJ1aWx0cyBhIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcgorICogQGNvbmZpZzogSGVhZGVyIGZvciB0aGUgZGVzY3JpcHRvciwgaW5jbHVkaW5nIGNoYXJhY3RlcmlzdGljcyBzdWNoCisgKglhcyBwb3dlciByZXF1aXJlbWVudHMgYW5kIG51bWJlciBvZiBpbnRlcmZhY2VzLgorICogQGRlc2M6IE51bGwtdGVybWluYXRlZCB2ZWN0b3Igb2YgcG9pbnRlcnMgdG8gdGhlIGRlc2NyaXB0b3JzIChpbnRlcmZhY2UsCisgKgllbmRwb2ludCwgZXRjKSBkZWZpbmluZyBhbGwgZnVuY3Rpb25zIGluIHRoaXMgZGV2aWNlIGNvbmZpZ3VyYXRpb24uCisgKiBAYnVmOiBCdWZmZXIgZm9yIHRoZSByZXN1bHRpbmcgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yLgorICogQGxlbmd0aDogTGVuZ3RoIG9mIGJ1ZmZlci4gIElmIHRoaXMgaXMgbm90IGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUKKyAqCWVudGlyZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IsIGFuIGVycm9yIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBUaGlzIGNvcGllcyBkZXNjcmlwdG9ycyBpbnRvIHRoZSByZXNwb25zZSBidWZmZXIsIGJ1aWxkaW5nIGEgZGVzY3JpcHRvcgorICogZm9yIHRoYXQgY29uZmlndXJhdGlvbi4gIEl0IHJldHVybnMgdGhlIGJ1ZmZlciBsZW5ndGggb3IgYSBuZWdhdGl2ZQorICogc3RhdHVzIGNvZGUuICBUaGUgY29uZmlnLndUb3RhbExlbmd0aCBmaWVsZCBpcyBzZXQgdG8gbWF0Y2ggdGhlIGxlbmd0aAorICogb2YgdGhlIHJlc3VsdCwgYnV0IG90aGVyIGRlc2NyaXB0b3IgZmllbGRzIChpbmNsdWRpbmcgcG93ZXIgdXNhZ2UgYW5kCisgKiBpbnRlcmZhY2UgY291bnQpIG11c3QgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisgKgorICogR2FkZ2V0IGRyaXZlcnMgY291bGQgdXNlIHRoaXMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBjb25maWcgZGVzY3JpcHRvcgorICogaW4gcmVzcG9uc2UgdG8gVVNCX1JFUV9HRVRfREVTQ1JJUFRPUi4gIFRoZXkgd2lsbCBuZWVkIHRvIHBhdGNoIHRoZQorICogcmVzdWx0aW5nIGJEZXNjcmlwdG9yVHlwZSB2YWx1ZSBpZiBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHIGlzIG5lZWRlZC4KKyAqLworaW50IHVzYl9nYWRnZXRfY29uZmlnX2J1ZigKKwljb25zdCBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCSpjb25maWcsCisJdm9pZAkJCQkJKmJ1ZiwKKwl1bnNpZ25lZAkJCQlsZW5ndGgsCisJY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmRlc2MKKykKK3sKKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCQkqY3AgPSBidWY7CisJaW50CQkJCQlsZW47CisKKwkvKiBjb25maWcgZGVzY3JpcHRvciBmaXJzdCAqLworCWlmIChsZW5ndGggPCBVU0JfRFRfQ09ORklHX1NJWkUgfHwgIWRlc2MpCisJCXJldHVybiAtRUlOVkFMOworCSpjcCA9ICpjb25maWc7IAorCisJLyogdGhlbiBpbnRlcmZhY2UvZW5kcG9pbnQvY2xhc3MvdmVuZG9yLy4uLiAqLworCWxlbiA9IHVzYl9kZXNjcmlwdG9yX2ZpbGxidWYoVVNCX0RUX0NPTkZJR19TSVpFICsgKHU4KilidWYsCisJCQlsZW5ndGggLSBVU0JfRFRfQ09ORklHX1NJWkUsIGRlc2MpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gbGVuOworCWxlbiArPSBVU0JfRFRfQ09ORklHX1NJWkU7CisJaWYgKGxlbiA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBwYXRjaCB1cCB0aGUgY29uZmlnIGRlc2NyaXB0b3IgKi8KKwljcC0+Ykxlbmd0aCA9IFVTQl9EVF9DT05GSUdfU0laRTsKKwljcC0+YkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0NPTkZJRzsKKwljcC0+d1RvdGFsTGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKKwljcC0+Ym1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX09ORTsKKwlyZXR1cm4gbGVuOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmOGE5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMCwwICsxLDE3OTMgQEAKKy8qCisgKiBkdW1teV9oY2QuYyAtLSBEdW1teS9Mb29wYmFjayBVU0IgaG9zdCBhbmQgZGV2aWNlIGVtdWxhdG9yIGRyaXZlci4KKyAqCisgKiBNYWludGFpbmVyOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgQWxhbiBTdGVybgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKy8qCisgKiBUaGlzIGV4cG9zZXMgYSBkZXZpY2Ugc2lkZSAiVVNCIGdhZGdldCIgQVBJLCBkcml2ZW4gYnkgcmVxdWVzdHMgdG8gYQorICogTGludXgtVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXIuICBVU0IgdHJhZmZpYyBpcyBzaW11bGF0ZWQ7IHRoZXJlJ3MKKyAqIG5vIG5lZWQgZm9yIFVTQiBoYXJkd2FyZS4gIFVzZSB0aGlzIHdpdGggdHdvIG90aGVyIGRyaXZlcnM6CisgKgorICogIC0gR2FkZ2V0IGRyaXZlciwgcmVzcG9uZGluZyB0byByZXF1ZXN0cyAoc2xhdmUpOworICogIC0gSG9zdC1zaWRlIGRldmljZSBkcml2ZXIsIGFzIGFscmVhZHkgZmFtaWxpYXIgaW4gTGludXguCisgKgorICogSGF2aW5nIHRoaXMgYWxsIGluIG9uZSBrZXJuZWwgY2FuIGhlbHAgc29tZSBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQsCisgKiBieXBhc3Npbmcgc29tZSBoYXJkd2FyZSAoYW5kIGRyaXZlcikgaXNzdWVzLiAgVU1MIGNvdWxkIGhlbHAgdG9vLgorICovCisKKyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKworI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisKKworI2RlZmluZSBEUklWRVJfREVTQwkiVVNCIEhvc3QrR2FkZ2V0IEVtdWxhdG9yIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMTcgRGVjIDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyCWRyaXZlcl9uYW1lIFtdID0gImR1bW15X2hjZCI7CitzdGF0aWMgY29uc3QgY2hhcglkcml2ZXJfZGVzYyBbXSA9ICJVU0IgSG9zdCtHYWRnZXQgRW11bGF0b3IiOworCitzdGF0aWMgY29uc3QgY2hhcglnYWRnZXRfbmFtZSBbXSA9ICJkdW1teV91ZGMiOworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZ2FkZ2V0IHNpZGUgZHJpdmVyIGRhdGEgc3RydWN0cmVzICovCitzdHJ1Y3QgZHVtbXlfZXAgeworCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOworCXVuc2lnbmVkIGxvbmcJCQlsYXN0X2lvOwkvKiBqaWZmaWVzIHRpbWVzdGFtcCAqLworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZ2FkZ2V0OworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgdXNiX2VwCQkJZXA7CisJdW5zaWduZWQJCQloYWx0ZWQgOiAxOworCXVuc2lnbmVkCQkJYWxyZWFkeV9zZWVuIDogMTsKKwl1bnNpZ25lZAkJCXNldHVwX3N0YWdlIDogMTsKK307CisKK3N0cnVjdCBkdW1teV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsJCS8qIGVwJ3MgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCXJlcTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR1bW15X2VwICp1c2JfZXBfdG9fZHVtbXlfZXAgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBkdW1teV9lcCwgZXApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teV9yZXF1ZXN0ICp1c2JfcmVxdWVzdF90b19kdW1teV9yZXF1ZXN0CisJCShzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoX3JlcSwgc3RydWN0IGR1bW15X3JlcXVlc3QsIHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFdmVyeSBkZXZpY2UgaGFzIGVwMCBmb3IgY29udHJvbCByZXF1ZXN0cywgcGx1cyB1cCB0byAzMCBtb3JlIGVuZHBvaW50cywKKyAqIGluIG9uZSBvZiB0d28gdHlwZXM6CisgKgorICogICAtIENvbmZpZ3VyYWJsZTogIGRpcmVjdGlvbiAoaW4vb3V0KSwgdHlwZSAoYnVsaywgaXNvLCBldGMpLCBhbmQgZW5kcG9pbnQKKyAqICAgICBudW1iZXIgY2FuIGJlIGNoYW5nZWQuICBOYW1lcyBsaWtlICJlcC1hIiBhcmUgdXNlZCBmb3IgdGhpcyB0eXBlLgorICoKKyAqICAgLSBGaXhlZCBGdW5jdGlvbjogIGluIG90aGVyIGNhc2VzLiAgc29tZSBjaGFyYWN0ZXJpc3RpY3MgbWF5IGJlIG11dGFibGU7CisgKiAgICAgdGhhdCdkIGJlIGhhcmR3YXJlLXNwZWNpZmljLiAgTmFtZXMgbGlrZSAiZXAxMm91dC1idWxrIiBhcmUgdXNlZC4KKyAqCisgKiBHYWRnZXQgZHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIG5vdCBzZXR0aW5nIHVwIGNvbmZsaWN0aW5nIGVuZHBvaW50CisgKiBjb25maWd1cmF0aW9ucywgaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWNrZXQgbGVuZ3RocywgYW5kIHNvIG9uLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyIGVwMG5hbWUgW10gPSAiZXAwIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVwX25hbWUgW10gPSB7CisJZXAwbmFtZSwJCQkJLyogZXZlcnlvbmUgaGFzIGVwMCAqLworCisJLyogYWN0IGxpa2UgYSBuZXQyMjgwOiBoaWdoIHNwZWVkLCBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cyAqLworCSJlcC1hIiwgImVwLWIiLCAiZXAtYyIsICJlcC1kIiwgImVwLWUiLCAiZXAtZiIsCisKKwkvKiBvciBsaWtlIHB4YTI1MDogZmlmdGVlbiBmaXhlZCBmdW5jdGlvbiBlbmRwb2ludHMgKi8KKwkiZXAxaW4tYnVsayIsICJlcDJvdXQtYnVsayIsICJlcDNpbi1pc28iLCAiZXA0b3V0LWlzbyIsICJlcDVpbi1pbnQiLAorCSJlcDZpbi1idWxrIiwgImVwN291dC1idWxrIiwgImVwOGluLWlzbyIsICJlcDlvdXQtaXNvIiwgImVwMTBpbi1pbnQiLAorCSJlcDExaW4tYnVsayIsICJlcDEyb3V0LWJ1bGsiLCAiZXAxM2luLWlzbyIsICJlcDE0b3V0LWlzbyIsCisJCSJlcDE1aW4taW50IiwKKworCS8qIG9yIGxpa2Ugc2ExMTAwOiB0d28gZml4ZWQgZnVuY3Rpb24gZW5kcG9pbnRzICovCisJImVwMW91dC1idWxrIiwgImVwMmluLWJ1bGsiLAorfTsKKyNkZWZpbmUgRFVNTVlfRU5EUE9JTlRTCShzaXplb2YoZXBfbmFtZSkvc2l6ZW9mKGNoYXIgKikpCisKKyNkZWZpbmUgRklGT19TSVpFCQk2NAorCitzdHJ1Y3QgdXJicCB7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXVyYnBfbGlzdDsKK307CisKK3N0cnVjdCBkdW1teSB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisKKwkvKgorCSAqIFNMQVZFL0dBREdFVCBzaWRlIHN1cHBvcnQKKwkgKi8KKwlzdHJ1Y3QgZHVtbXlfZXAJCQllcCBbRFVNTVlfRU5EUE9JTlRTXTsKKwlpbnQJCQkJYWRkcmVzczsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkqZHJpdmVyOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CQlmaWZvX3JlcTsKKwl1OAkJCQlmaWZvX2J1ZiBbRklGT19TSVpFXTsKKwl1MTYJCQkJZGV2c3RhdHVzOworCisJLyoKKwkgKiBNQVNURVIvSE9TVCBzaWRlIHN1cHBvcnQKKwkgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CisJdTMyCQkJCXBvcnRfc3RhdHVzOworCXVuc2lnbmVkCQkJcmVzdW1pbmc6MTsKKwl1bnNpZ25lZCBsb25nCQkJcmVfdGltZW91dDsKKworCXN0cnVjdCB1c2JfZGV2aWNlCQkqdWRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQl1cmJwX2xpc3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqaGNkX3RvX2R1bW15IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IGR1bW15ICopIChoY2QtPmhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqZHVtbXlfdG9faGNkIChzdHJ1Y3QgZHVtbXkgKmR1bSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIGR1bSwgc3RydWN0IHVzYl9oY2QsIGhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICpkdW1teV9kZXYgKHN0cnVjdCBkdW1teSAqZHVtKQoreworCXJldHVybiBkdW1teV90b19oY2QoZHVtKS0+c2VsZi5jb250cm9sbGVyOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqZXBfdG9fZHVtbXkgKHN0cnVjdCBkdW1teV9lcCAqZXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoZXAtPmdhZGdldCwgc3RydWN0IGR1bW15LCBnYWRnZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqZ2FkZ2V0X3RvX2R1bW15IChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXJldHVybiBjb250YWluZXJfb2YgKGdhZGdldCwgc3RydWN0IGR1bW15LCBnYWRnZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqZ2FkZ2V0X2Rldl90b19kdW1teSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YgKGRldiwgc3RydWN0IGR1bW15LCBnYWRnZXQuZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBkdW1teQkJCSp0aGVfY29udHJvbGxlcjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoaXMgImhhcmR3YXJlIiBtYXkgbG9vayBhIGJpdCBvZGQgaW4gZGlhZ25vc3RpY3Mgc2luY2UgaXQncyBnb3QgYm90aAorICogaG9zdCBhbmQgZGV2aWNlIHNpZGVzOyBhbmQgaXQgYmluZHMgZGlmZmVyZW50IGRyaXZlcnMgdG8gZWFjaCBzaWRlLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZQkJdGhlX3BkZXY7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkdW1teV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTTEFWRS9HQURHRVQgU0lERSBEUklWRVIKKyAqCisgKiBUaGlzIG9ubHkgdHJhY2tzIGdhZGdldCBzdGF0ZS4gIEFsbCB0aGUgd29yayBpcyBkb25lIHdoZW4gdGhlIGhvc3QKKyAqIHNpZGUgdHJpZXMgc29tZSAoZW11bGF0ZWQpIGkvbyBvcGVyYXRpb24uICBSZWFsIGRldmljZSBjb250cm9sbGVyCisgKiBkcml2ZXJzIHdvdWxkIGRvIHJlYWwgaS9vIHVzaW5nIGRtYSwgZmlmb3MsIGlycXMsIHRpbWVycywgZXRjLgorICovCisKKyNkZWZpbmUgaXNfZW5hYmxlZChkdW0pIFwKKwkoZHVtLT5wb3J0X3N0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKQorCitzdGF0aWMgaW50CitkdW1teV9lbmFibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwl1bnNpZ25lZAkJbWF4OworCWludAkJCXJldHZhbDsKKworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCWlmICghZHVtLT5kcml2ZXIgfHwgIWlzX2VuYWJsZWQgKGR1bSkpCisJCXJldHVybiAtRVNIVVRET1dOOworCW1heCA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAmIDB4M2ZmOworCisJLyogZHJpdmVycyBtdXN0IG5vdCByZXF1ZXN0IGJhZCBzZXR0aW5ncywgc2luY2UgbG93ZXIgbGV2ZWxzCisJICogKGhhcmR3YXJlIG9yIGl0cyBkcml2ZXJzKSBtYXkgbm90IGNoZWNrLiAgc29tZSBlbmRwb2ludHMKKwkgKiBjYW4ndCBkbyBpc28sIG1hbnkgaGF2ZSBtYXhwYWNrZXQgbGltaXRhdGlvbnMsIGV0Yy4KKwkgKgorCSAqIHNpbmNlIHRoaXMgImhhcmR3YXJlIiBkcml2ZXIgaXMgaGVyZSB0byBoZWxwIGRlYnVnZ2luZywgd2UKKwkgKiBoYXZlIHNvbWUgZXh0cmEgc2FuaXR5IGNoZWNrcy4gICh0aGVyZSBjb3VsZCBiZSBtb3JlIHRob3VnaCwKKwkgKiBlc3BlY2lhbGx5IGZvciAiZXA5b3V0IiBzdHlsZSBmaXhlZCBmdW5jdGlvbiBvbmVzLikKKwkgKi8KKwlyZXR2YWwgPSAtRUlOVkFMOworCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJaWYgKHN0cnN0ciAoZXAtPmVwLm5hbWUsICItaXNvIikKKwkJCQl8fCBzdHJzdHIgKGVwLT5lcC5uYW1lLCAiLWludCIpKSB7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKG1heCA9PSA1MTIpCisJCQkJYnJlYWs7CisJCQkvKiBjb25zZXJ2ZSByZXR1cm4gc3RhdGVtZW50cyAqLworCQlkZWZhdWx0OgorCQkJc3dpdGNoIChtYXgpIHsKKwkJCWNhc2UgODogY2FzZSAxNjogY2FzZSAzMjogY2FzZSA2NDoKKwkJCQkvKiB3ZSdsbCBmYWtlIGFueSBsZWdhbCBzaXplICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQlpZiAoc3Ryc3RyIChlcC0+ZXAubmFtZSwgIi1pc28iKSkgLyogYnVsayBpcyBvayAqLworCQkJZ290byBkb25lOworCQkvKiByZWFsIGhhcmR3YXJlIG1pZ2h0IG5vdCBoYW5kbGUgYWxsIHBhY2tldCBzaXplcyAqLworCQlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQlpZiAobWF4IDw9IDEwMjQpCisJCQkJYnJlYWs7CisJCQkvKiBzYXZlIGEgcmV0dXJuIHN0YXRlbWVudCAqLworCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJaWYgKG1heCA8PSA2NCkKKwkJCQlicmVhazsKKwkJCS8qIHNhdmUgYSByZXR1cm4gc3RhdGVtZW50ICovCisJCWRlZmF1bHQ6CisJCQlpZiAobWF4IDw9IDgpCisJCQkJYnJlYWs7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQlpZiAoc3Ryc3RyIChlcC0+ZXAubmFtZSwgIi1idWxrIikKKwkJCQl8fCBzdHJzdHIgKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJZ290byBkb25lOworCQkvKiByZWFsIGhhcmR3YXJlIG1pZ2h0IG5vdCBoYW5kbGUgYWxsIHBhY2tldCBzaXplcyAqLworCQlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQlpZiAobWF4IDw9IDEwMjQpCisJCQkJYnJlYWs7CisJCQkvKiBzYXZlIGEgcmV0dXJuIHN0YXRlbWVudCAqLworCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJaWYgKG1heCA8PSAxMDIzKQorCQkJCWJyZWFrOworCQkJLyogc2F2ZSBhIHJldHVybiBzdGF0ZW1lbnQgKi8KKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBmZXcgY2hpcHMgc3VwcG9ydCBjb250cm9sIGV4Y2VwdCBvbiBlcDAgKi8KKwkJZ290byBkb25lOworCX0KKworCV9lcC0+bWF4cGFja2V0ID0gbWF4OworCWVwLT5kZXNjID0gZGVzYzsKKworCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAiZW5hYmxlZCAlcyAoZXAlZCVzLSVzKSBtYXhwYWNrZXQgJWRcbiIsCisJCV9lcC0+bmFtZSwKKwkJZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYsCisJCShkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIsCisJCSh7IGNoYXIgKnZhbDsKKwkJIHN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOiB2YWwgPSAiYnVsayI7IGJyZWFrOworCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOiB2YWwgPSAiaXNvIjsgYnJlYWs7CisJCSBjYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDogdmFsID0gImludHIiOyBicmVhazsKKwkJIGRlZmF1bHQ6IHZhbCA9ICJjdHJsIjsgYnJlYWs7CisJCSB9OyB2YWw7IH0pLAorCQltYXgpOworCisJLyogYXQgdGhpcyBwb2ludCByZWFsIGhhcmR3YXJlIHNob3VsZCBiZSBOQUtpbmcgdHJhbnNmZXJzCisJICogdG8gdGhhdCBlbmRwb2ludCwgdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LgorCSAqLworCXJldHZhbCA9IDA7Citkb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHNwaW5sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG51a2UgKHN0cnVjdCBkdW1teSAqZHVtLCBzdHJ1Y3QgZHVtbXlfZXAgKmVwKQoreworCXdoaWxlICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJc3RydWN0IGR1bW15X3JlcXVlc3QJKnJlcTsKKworCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwgc3RydWN0IGR1bW15X3JlcXVlc3QsIHF1ZXVlKTsKKwkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCQlyZXEtPnJlcS5zdGF0dXMgPSAtRVNIVVRET1dOOworCisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJcmVxLT5yZXEuY29tcGxldGUgKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IGR1bW15X2Rpc2FibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJcmV0dmFsOworCisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwllcC0+ZGVzYyA9IE5VTEw7CisJcmV0dmFsID0gMDsKKwludWtlIChkdW0sIGVwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgImRpc2FibGVkICVzXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorZHVtbXlfYWxsb2NfcmVxdWVzdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisKKwlyZXEgPSBrbWFsbG9jIChzaXplb2YgKnJlcSwgbWVtX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0IChyZXEsIDAsIHNpemVvZiAqcmVxKTsKKwlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkCitkdW1teV9mcmVlX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXE7CisKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlpZiAoIWVwIHx8ICFfcmVxIHx8ICghZXAtPmRlc2MgJiYgX2VwLT5uYW1lICE9IGVwMG5hbWUpKQorCQlyZXR1cm47CisKKwlyZXEgPSB1c2JfcmVxdWVzdF90b19kdW1teV9yZXF1ZXN0IChfcmVxKTsKKwlXQVJOX09OICghbGlzdF9lbXB0eSAoJnJlcS0+cXVldWUpKTsKKwlrZnJlZSAocmVxKTsKK30KKworc3RhdGljIHZvaWQgKgorZHVtbXlfYWxsb2NfYnVmZmVyICgKKwlzdHJ1Y3QgdXNiX2VwICpfZXAsCisJdW5zaWduZWQgYnl0ZXMsCisJZG1hX2FkZHJfdCAqZG1hLAorCWludCBtZW1fZmxhZ3MKKykgeworCWNoYXIJCQkqcmV0dmFsOworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCWR1bSA9IGVwX3RvX2R1bW15IChlcCk7CisKKwlpZiAoIWR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR2YWwgPSBrbWFsbG9jIChieXRlcywgbWVtX2ZsYWdzKTsKKwkqZG1hID0gKGRtYV9hZGRyX3QpIHJldHZhbDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfZnJlZV9idWZmZXIgKAorCXN0cnVjdCB1c2JfZXAgKl9lcCwKKwl2b2lkICpidWYsCisJZG1hX2FkZHJfdCBkbWEsCisJdW5zaWduZWQgYnl0ZXMKKykgeworCWlmIChieXRlcykKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitmaWZvX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X3F1ZXVlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXJlcSA9IHVzYl9yZXF1ZXN0X3RvX2R1bW15X3JlcXVlc3QgKF9yZXEpOworCWlmICghX3JlcSB8fCAhbGlzdF9lbXB0eSAoJnJlcS0+cXVldWUpIHx8ICFfcmVxLT5jb21wbGV0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIF9lcC0+bmFtZSAhPSBlcDBuYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCWlmICghZHVtLT5kcml2ZXIgfHwgIWlzX2VuYWJsZWQgKGR1bSkpCisJCXJldHVybiAtRVNIVVRET1dOOworCisjaWYgMAorCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAiZXAgJXAgcXVldWUgcmVxICVwIHRvICVzLCBsZW4gJWQgYnVmICVwXG4iLAorCQkJZXAsIF9yZXEsIF9lcC0+bmFtZSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworI2VuZGlmCisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJLyogaW1wbGVtZW50IGFuIGVtdWxhdGVkIHNpbmdsZS1yZXF1ZXN0IEZJRk8gKi8KKwlpZiAoZXAtPmRlc2MgJiYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKKwkJCWxpc3RfZW1wdHkgKCZkdW0tPmZpZm9fcmVxLnF1ZXVlKSAmJgorCQkJbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkgJiYKKwkJCV9yZXEtPmxlbmd0aCA8PSBGSUZPX1NJWkUpIHsKKwkJcmVxID0gJmR1bS0+Zmlmb19yZXE7CisJCXJlcS0+cmVxID0gKl9yZXE7CisJCXJlcS0+cmVxLmJ1ZiA9IGR1bS0+Zmlmb19idWY7CisJCW1lbWNweSAoZHVtLT5maWZvX2J1ZiwgX3JlcS0+YnVmLCBfcmVxLT5sZW5ndGgpOworCQlyZXEtPnJlcS5jb250ZXh0ID0gZHVtOworCQlyZXEtPnJlcS5jb21wbGV0ZSA9IGZpZm9fY29tcGxldGU7CisKKwkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQlfcmVxLT5hY3R1YWwgPSBfcmVxLT5sZW5ndGg7CisJCV9yZXEtPnN0YXR1cyA9IDA7CisJCV9yZXEtPmNvbXBsZXRlIChfZXAsIF9yZXEpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCX0KKwlsaXN0X2FkZF90YWlsICgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJLyogcmVhbCBoYXJkd2FyZSB3b3VsZCBsaWtlbHkgZW5hYmxlIHRyYW5zZmVycyBoZXJlLCBpbiBjYXNlCisJICogaXQnZCBiZWVuIGxlZnQgTkFLaW5nLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1bW15X2RlcXVldWUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwlpbnQJCQlyZXR2YWwgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXEgPSBOVUxMOworCisJaWYgKCFfZXAgfHwgIV9yZXEpCisJCXJldHVybiByZXR2YWw7CisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJZHVtID0gZXBfdG9fZHVtbXkgKGVwKTsKKworCWlmICghZHVtLT5kcml2ZXIpCisJCXJldHVybiAtRVNIVVRET1dOOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkgeworCQkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCQkJX3JlcS0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCQlyZXR2YWwgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldHZhbCA9PSAwKSB7CisJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLAorCQkJCSJkZXF1ZXVlZCByZXEgJXAgZnJvbSAlcywgbGVuICVkIGJ1ZiAlcFxuIiwKKwkJCQlyZXEsIF9lcC0+bmFtZSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworCQlfcmVxLT5jb21wbGV0ZSAoX2VwLCBfcmVxKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorZHVtbXlfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKworCWlmICghX2VwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCWlmICghZHVtLT5kcml2ZXIpCisJCXJldHVybiAtRVNIVVRET1dOOworCWlmICghdmFsdWUpCisJCWVwLT5oYWx0ZWQgPSAwOworCWVsc2UgaWYgKGVwLT5kZXNjICYmIChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCQkhbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCXJldHVybiAtRUFHQUlOOworCWVsc2UKKwkJZXAtPmhhbHRlZCA9IDE7CisJLyogRklYTUUgY2xlYXIgZW11bGF0ZWQgZGF0YSB0b2dnbGUgdG9vICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBkdW1teV9lcF9vcHMgPSB7CisJLmVuYWJsZQkJPSBkdW1teV9lbmFibGUsCisJLmRpc2FibGUJPSBkdW1teV9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBkdW1teV9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBkdW1teV9mcmVlX3JlcXVlc3QsCisKKwkuYWxsb2NfYnVmZmVyCT0gZHVtbXlfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IGR1bW15X2ZyZWVfYnVmZmVyLAorCS8qIG1hcCwgdW5tYXAsIC4uLiBldmVudHVhbGx5IGhvb2sgdGhlICJnZW5lcmljIiBkbWEgY2FsbHMgKi8KKworCS5xdWV1ZQkJPSBkdW1teV9xdWV1ZSwKKwkuZGVxdWV1ZQk9IGR1bW15X2RlcXVldWUsCisKKwkuc2V0X2hhbHQJPSBkdW1teV9zZXRfaGFsdCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZXJlIGFyZSBib3RoIGhvc3QgYW5kIGRldmljZSBzaWRlIHZlcnNpb25zIG9mIHRoaXMgY2FsbCAuLi4gKi8KK3N0YXRpYyBpbnQgZHVtbXlfZ19nZXRfZnJhbWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXN0cnVjdCB0aW1ldmFsCXR2OworCisJZG9fZ2V0dGltZW9mZGF5ICgmdHYpOworCXJldHVybiB0di50dl91c2VjIC8gMTAwMDsKK30KKworc3RhdGljIGludCBkdW1teV93YWtldXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXN0cnVjdCBkdW1teQkqZHVtOworCisJZHVtID0gZ2FkZ2V0X3RvX2R1bW15IChfZ2FkZ2V0KTsKKwlpZiAoKGR1bS0+ZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkgPT0gMAorCQkJfHwgIShkdW0tPnBvcnRfc3RhdHVzICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaHViIG5vdGljZXMgb3VyIHJlcXVlc3QsIGlzc3VlcyBkb3duc3RyZWFtIHJlc3VtZSwgZXRjICovCisJZHVtLT5yZXN1bWluZyA9IDE7CisJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfc2V0X3NlbGZwb3dlcmVkIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkdW1teQkqZHVtOworCisJZHVtID0gZ2FkZ2V0X3RvX2R1bW15IChfZ2FkZ2V0KTsKKwlpZiAodmFsdWUpCisJCWR1bS0+ZGV2c3RhdHVzIHw9ICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKTsKKwllbHNlCisJCWR1bS0+ZGV2c3RhdHVzICY9IH4oMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgZHVtbXlfb3BzID0geworCS5nZXRfZnJhbWUJPSBkdW1teV9nX2dldF9mcmFtZSwKKwkud2FrZXVwCQk9IGR1bW15X3dha2V1cCwKKwkuc2V0X3NlbGZwb3dlcmVkID0gZHVtbXlfc2V0X3NlbGZwb3dlcmVkLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogImZ1bmN0aW9uIiBzeXNmcyBhdHRyaWJ1dGUgKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X2Z1bmN0aW9uIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGdhZGdldF9kZXZfdG9fZHVtbXkgKGRldik7CisKKwlpZiAoIWR1bS0+ZHJpdmVyIHx8ICFkdW0tPmRyaXZlci0+ZnVuY3Rpb24pCisJCXJldHVybiAwOworCXJldHVybiBzY25wcmludGYgKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGR1bS0+ZHJpdmVyLT5mdW5jdGlvbik7Cit9CitERVZJQ0VfQVRUUiAoZnVuY3Rpb24sIFNfSVJVR08sIHNob3dfZnVuY3Rpb24sIE5VTEwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRHJpdmVyIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbi4KKyAqCisgKiBUaGlzIGlzIGJhc2ljYWxseSBoYXJkd2FyZS1zcGVjaWZpYzsgdGhlcmUncyB1c3VhbGx5IG9ubHkgb25lIHJlYWwgVVNCCisgKiBkZXZpY2UgKG5vdCBob3N0KSBjb250cm9sbGVyIHNpbmNlIHRoYXQncyBob3cgVVNCIGRldmljZXMgYXJlIGludGVuZGVkCisgKiB0byB3b3JrLiAgU28gbW9zdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgYXBpIGNhbGxzIHdpbGwgcmVseSBvbiB0aGUKKyAqIGZhY3QgdGhhdCBvbmx5IG9uZSBkcml2ZXIgd2lsbCBldmVyIGJpbmQgdG8gdGhlIGhhcmR3YXJlLiAgQnV0IGN1cmlvdXMKKyAqIGhhcmR3YXJlIGNhbiBiZSBidWlsdCB3aXRoIGRpc2NyZXRlIGNvbXBvbmVudHMsIHNvIHRoZSBnYWRnZXQgQVBJIGRvZXNuJ3QKKyAqIHJlcXVpcmUgdGhhdCBhc3N1bXB0aW9uLgorICoKKyAqIEZvciB0aGlzIGVtdWxhdG9yLCBpdCBtaWdodCBiZSBjb252ZW5pZW50IHRvIGNyZWF0ZSBhIHVzYiBzbGF2ZSBkZXZpY2UKKyAqIGZvciBlYWNoIGRyaXZlciB0aGF0IHJlZ2lzdGVyczogIGp1c3QgYWRkIHRvIGEgYmlnIHJvb3QgaHViLgorICovCisKK3N0YXRpYyB2b2lkCitkdW1teV91ZGNfcmVsZWFzZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfcGRldl9yZWxlYXNlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X3JlZ2lzdGVyX3VkYyAoc3RydWN0IGR1bW15ICpkdW0pCit7CisJaW50CQlyYzsKKworCXN0cmNweSAoZHVtLT5nYWRnZXQuZGV2LmJ1c19pZCwgInVkYyIpOworCWR1bS0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBkdW1teV9kZXYoZHVtKTsKKwlkdW0tPmdhZGdldC5kZXYucmVsZWFzZSA9IGR1bW15X3VkY19yZWxlYXNlOworCisJcmMgPSBkZXZpY2VfcmVnaXN0ZXIgKCZkdW0tPmdhZGdldC5kZXYpOworCWlmIChyYyA9PSAwKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfdW5yZWdpc3Rlcl91ZGMgKHN0cnVjdCBkdW1teSAqZHVtKQoreworCWRldmljZV9yZW1vdmVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKwlkZXZpY2VfdW5yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7Cit9CisKK2ludAordXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBkdW1teQkqZHVtID0gdGhlX2NvbnRyb2xsZXI7CisJaW50CQlyZXR2YWwsIGk7CisKKwlpZiAoIWR1bSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5zZXR1cAorCQkJfHwgZHJpdmVyLT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFNMQVZFIHNpZGUgaW5pdCAuLi4gdGhlIGxheWVyIGFib3ZlIGhhcmR3YXJlLCB3aGljaAorCSAqIGNhbid0IGVudW1lcmF0ZSB3aXRob3V0IGhlbHAgZnJvbSB0aGUgZHJpdmVyIHdlJ3JlIGJpbmRpbmcuCisJICovCisJZHVtLT5nYWRnZXQubmFtZSA9IGdhZGdldF9uYW1lOworCWR1bS0+Z2FkZ2V0Lm9wcyA9ICZkdW1teV9vcHM7CisJZHVtLT5nYWRnZXQuaXNfZHVhbHNwZWVkID0gMTsKKworCWR1bS0+ZGV2c3RhdHVzID0gMDsKKwlkdW0tPnJlc3VtaW5nID0gMDsKKworCUlOSVRfTElTVF9IRUFEICgmZHVtLT5nYWRnZXQuZXBfbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IERVTU1ZX0VORFBPSU5UUzsgaSsrKSB7CisJCXN0cnVjdCBkdW1teV9lcAkqZXAgPSAmZHVtLT5lcCBbaV07CisKKwkJaWYgKCFlcF9uYW1lIFtpXSkKKwkJCWJyZWFrOworCQllcC0+ZXAubmFtZSA9IGVwX25hbWUgW2ldOworCQllcC0+ZXAub3BzID0gJmR1bW15X2VwX29wczsKKwkJbGlzdF9hZGRfdGFpbCAoJmVwLT5lcC5lcF9saXN0LCAmZHVtLT5nYWRnZXQuZXBfbGlzdCk7CisJCWVwLT5oYWx0ZWQgPSBlcC0+YWxyZWFkeV9zZWVuID0gZXAtPnNldHVwX3N0YWdlID0gMDsKKwkJZXAtPmVwLm1heHBhY2tldCA9IH4wOworCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CisJCWVwLT5nYWRnZXQgPSAmZHVtLT5nYWRnZXQ7CisJCWVwLT5kZXNjID0gTlVMTDsKKwkJSU5JVF9MSVNUX0hFQUQgKCZlcC0+cXVldWUpOworCX0KKworCWR1bS0+Z2FkZ2V0LmVwMCA9ICZkdW0tPmVwIFswXS5lcDsKKwlkdW0tPmVwIFswXS5lcC5tYXhwYWNrZXQgPSA2NDsKKwlsaXN0X2RlbF9pbml0ICgmZHVtLT5lcCBbMF0uZXAuZXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmR1bS0+Zmlmb19yZXEucXVldWUpOworCisJZHVtLT5kcml2ZXIgPSBkcml2ZXI7CisJZHVtLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgImJpbmRpbmcgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJaWYgKChyZXR2YWwgPSBkcml2ZXItPmJpbmQgKCZkdW0tPmdhZGdldCkpICE9IDApIHsKKwkJZHVtLT5kcml2ZXIgPSBOVUxMOworCQlkdW0tPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvLyBGSVhNRTogQ2hlY2sgdGhlc2UgY2FsbHMgZm9yIGVycm9ycyBhbmQgcmUtb3JkZXIKKwlkcml2ZXItPmRyaXZlci5idXMgPSBkdW0tPmdhZGdldC5kZXYucGFyZW50LT5idXM7CisJZHJpdmVyX3JlZ2lzdGVyICgmZHJpdmVyLT5kcml2ZXIpOworCisJZGV2aWNlX2JpbmRfZHJpdmVyICgmZHVtLT5nYWRnZXQuZGV2KTsKKworCS8qIGtodWJkIHdpbGwgZW51bWVyYXRlIHRoaXMgaW4gYSB3aGlsZSAqLworCWR1bS0+cG9ydF9zdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCisJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCisvKiBjYWxsZXIgbXVzdCBob2xkIGxvY2sgKi8KK3N0YXRpYyB2b2lkCitzdG9wX2FjdGl2aXR5IChzdHJ1Y3QgZHVtbXkgKmR1bSwgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGR1bW15X2VwCSplcDsKKworCS8qIHByZXZlbnQgYW55IG1vcmUgcmVxdWVzdHMgKi8KKwlkdW0tPmFkZHJlc3MgPSAwOworCisJLyogVGhlIHRpbWVyIGlzIGxlZnQgcnVubmluZyBzbyB0aGF0IG91dHN0YW5kaW5nIFVSQnMgY2FuIGZhaWwgKi8KKworCS8qIG51a2UgYW55IHBlbmRpbmcgcmVxdWVzdHMgZmlyc3QsIHNvIGRyaXZlciBpL28gaXMgcXVpZXNjZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpCisJCW51a2UgKGR1bSwgZXApOworCisJLyogZHJpdmVyIG5vdyBkb2VzIGFueSBub24tdXNiIHF1aWVzY2luZyBuZWNlc3NhcnkgKi8KKwlpZiAoZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJZHJpdmVyLT5kaXNjb25uZWN0ICgmZHVtLT5nYWRnZXQpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCX0KK30KKworaW50Cit1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHRoZV9jb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIWR1bSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAidW5yZWdpc3RlciBnYWRnZXQgZHJpdmVyICclcydcbiIsCisJCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJc3RvcF9hY3Rpdml0eSAoZHVtLCBkcml2ZXIpOworCWR1bS0+cG9ydF9zdGF0dXMgJj0gfihVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04gfCBVU0JfUE9SVF9TVEFUX0VOQUJMRSB8CisJCQlVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCB8IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCk7CisJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT51bmJpbmQgKCZkdW0tPmdhZGdldCk7CisJZHVtLT5kcml2ZXIgPSBOVUxMOworCisJZGV2aWNlX3JlbGVhc2VfZHJpdmVyICgmZHVtLT5nYWRnZXQuZGV2KTsKKworCWRyaXZlcl91bnJlZ2lzdGVyICgmZHJpdmVyLT5kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworI3VuZGVmIGlzX2VuYWJsZWQKKworaW50IG5ldDIyODBfc2V0X2ZpZm9fbW9kZSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IG1vZGUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitFWFBPUlRfU1lNQk9MIChuZXQyMjgwX3NldF9maWZvX21vZGUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBNQVNURVIvSE9TVCBTSURFIERSSVZFUgorICoKKyAqIHRoaXMgdXNlcyB0aGUgaGNkIGZyYW1ld29yayB0byBob29rIHVwIHRvIGhvc3Qgc2lkZSBkcml2ZXJzLgorICogaXRzIHJvb3QgaHViIHdpbGwgb25seSBoYXZlIG9uZSBkZXZpY2UsIG90aGVyd2lzZSBpdCBhY3RzIGxpa2UKKyAqIGEgbm9ybWFsIGhvc3QgY29udHJvbGxlci4KKyAqCisgKiB3aGVuIHVyYnMgYXJlIHF1ZXVlZCwgdGhleSdyZSBqdXN0IHN0dWNrIG9uIGEgbGlzdCB0aGF0IHdlCisgKiBzY2FuIGluIGEgdGltZXIgY2FsbGJhY2suICB0aGF0IGNhbGxiYWNrIGNvbm5lY3RzIHdyaXRlcyBmcm9tCisgKiB0aGUgaG9zdCB3aXRoIHJlYWRzIGZyb20gdGhlIGRldmljZSwgYW5kIHNvIG9uLCBiYXNlZCBvbiB0aGUKKyAqIHVzYiAyLjAgcnVsZXMuCisgKi8KKworc3RhdGljIGludCBkdW1teV91cmJfZW5xdWV1ZSAoCisJc3RydWN0IHVzYl9oY2QJCQkqaGNkLAorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZXAsCisJc3RydWN0IHVyYgkJCSp1cmIsCisJaW50CQkJCW1lbV9mbGFncworKSB7CisJc3RydWN0IGR1bW15CSpkdW07CisJc3RydWN0IHVyYnAJKnVyYnA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVyYnAgPSBrbWFsbG9jIChzaXplb2YgKnVyYnAsIG1lbV9mbGFncyk7CisJaWYgKCF1cmJwKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cmJwLT51cmIgPSB1cmI7CisKKwlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCWlmICghZHVtLT51ZGV2KSB7CisJCWR1bS0+dWRldiA9IHVyYi0+ZGV2OworCQl1c2JfZ2V0X2RldiAoZHVtLT51ZGV2KTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5IChkdW0tPnVkZXYgIT0gdXJiLT5kZXYpKQorCQlkZXZfZXJyIChkdW1teV9kZXYoZHVtKSwgInVzYl9kZXZpY2UgYWRkcmVzcyBoYXMgY2hhbmdlZCFcbiIpOworCisJbGlzdF9hZGRfdGFpbCAoJnVyYnAtPnVyYnBfbGlzdCwgJmR1bS0+dXJicF9saXN0KTsKKwl1cmItPmhjcHJpdiA9IHVyYnA7CisJaWYgKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpCisJCXVyYi0+ZXJyb3JfY291bnQgPSAxOwkJLyogbWFyayBhcyBhIG5ldyB1cmIgKi8KKworCS8qIGtpY2sgdGhlIHNjaGVkdWxlciwgaXQnbGwgZG8gdGhlIHJlc3QgKi8KKwlpZiAoIXRpbWVyX3BlbmRpbmcgKCZkdW0tPnRpbWVyKSkKKwkJbW9kX3RpbWVyICgmZHVtLT50aW1lciwgamlmZmllcyArIDEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1bW15X3VyYl9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJLyogZ2l2ZWJhY2sgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGluIHRpbWVyIGNhbGxiYWNrICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1heWJlX3NldF9zdGF0dXMgKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKK30KKworLyogdHJhbnNmZXIgdXAgdG8gYSBmcmFtZSdzIHdvcnRoOyBjYWxsZXIgbXVzdCBvd24gbG9jayAqLworc3RhdGljIGludAordHJhbnNmZXIgKHN0cnVjdCBkdW1teSAqZHVtLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBkdW1teV9lcCAqZXAsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxOworCit0b3A6CisJLyogaWYgdGhlcmUncyBubyByZXF1ZXN0IHF1ZXVlZCwgdGhlIGRldmljZSBpcyBOQUtpbmc7IHJldHVybiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJdW5zaWduZWQJaG9zdF9sZW4sIGRldl9sZW4sIGxlbjsKKwkJaW50CQlpc19zaG9ydCwgdG9faG9zdDsKKwkJaW50CQlyZXNjYW4gPSAwOworCisJCS8qIDEuLk4gcGFja2V0cyBvZiBlcC0+ZXAubWF4cGFja2V0IGVhY2ggLi4uIHRoZSBsYXN0IG9uZQorCQkgKiBtYXkgYmUgc2hvcnQgKGluY2x1ZGluZyB6ZXJvIGxlbmd0aCkuCisJCSAqCisJCSAqIHdyaXRlciBjYW4gc2VuZCBhIHpscCBleHBsaWNpdGx5IChsZW5ndGggMCkgb3IgaW1wbGljaXRseQorCQkgKiAobGVuZ3RoIG1vZCBtYXhwYWNrZXQgemVybywgYW5kICd6ZXJvJyBmbGFnKTsgdGhleSBhbHdheXMKKwkJICogdGVybWluYXRlIHJlYWRzLgorCQkgKi8KKwkJaG9zdF9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCWRldl9sZW4gPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisJCWxlbiA9IG1pbiAoaG9zdF9sZW4sIGRldl9sZW4pOworCisJCS8qIEZJWE1FIHVwZGF0ZSBlbXVsYXRlZCBkYXRhIHRvZ2dsZSB0b28gKi8KKworCQl0b19ob3N0ID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKTsKKwkJaWYgKHVubGlrZWx5IChsZW4gPT0gMCkpCisJCQlpc19zaG9ydCA9IDE7CisJCWVsc2UgeworCQkJY2hhcgkJKnVidWYsICpyYnVmOworCisJCQkvKiBub3QgZW5vdWdoIGJhbmR3aWR0aCBsZWZ0PyAqLworCQkJaWYgKGxpbWl0IDwgZXAtPmVwLm1heHBhY2tldCAmJiBsaW1pdCA8IGxlbikKKwkJCQlicmVhazsKKwkJCWxlbiA9IG1pbiAobGVuLCAodW5zaWduZWQpIGxpbWl0KTsKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlicmVhazsKKworCQkJLyogdXNlIGFuIGV4dHJhIHBhc3MgZm9yIHRoZSBmaW5hbCBzaG9ydCBwYWNrZXQgKi8KKwkJCWlmIChsZW4gPiBlcC0+ZXAubWF4cGFja2V0KSB7CisJCQkJcmVzY2FuID0gMTsKKwkJCQlsZW4gLT0gKGxlbiAlIGVwLT5lcC5tYXhwYWNrZXQpOworCQkJfQorCQkJaXNfc2hvcnQgPSAobGVuICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMDsKKworCQkJLyogZWxzZSB0cmFuc2ZlciBwYWNrZXQocykgKi8KKwkJCXVidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXJidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJCQlpZiAodG9faG9zdCkKKwkJCQltZW1jcHkgKHVidWYsIHJidWYsIGxlbik7CisJCQllbHNlCisJCQkJbWVtY3B5IChyYnVmLCB1YnVmLCBsZW4pOworCQkJZXAtPmxhc3RfaW8gPSBqaWZmaWVzOworCisJCQlsaW1pdCAtPSBsZW47CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gbGVuOworCQkJcmVxLT5yZXEuYWN0dWFsICs9IGxlbjsKKwkJfQorCisJCS8qIHNob3J0IHBhY2tldHMgdGVybWluYXRlLCBtYXliZSB3aXRoIG92ZXJmbG93L3VuZGVyZmxvdy4KKwkJICogaXQncyBvbmx5IHJlYWxseSBhbiBlcnJvciB0byB3cml0ZSB0b28gbXVjaC4KKwkJICoKKwkJICogcGFydGlhbGx5IGZpbGxpbmcgYSBidWZmZXIgb3B0aW9uYWxseSBibG9ja3MgcXVldWUgYWR2YW5jZXMKKwkJICogKHNvIGNvbXBsZXRpb24gaGFuZGxlcnMgY2FuIGNsZWFuIHVwIHRoZSBxdWV1ZSkgYnV0IHdlIGRvbid0CisJCSAqIG5lZWQgdG8gZW11bGF0ZSBzdWNoIGRhdGEtaW4tZmxpZ2h0LiAgc28gd2Ugb25seSBzaG93IHBhcnQKKwkJICogb2YgdGhlIFVSQl9TSE9SVF9OT1RfT0sgZWZmZWN0OiBjb21wbGV0aW9uIHN0YXR1cy4KKwkJICovCisJCWlmIChpc19zaG9ydCkgeworCQkJaWYgKGhvc3RfbGVuID09IGRldl9sZW4pIHsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAwOworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQl9IGVsc2UgaWYgKHRvX2hvc3QpIHsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAwOworCQkJCWlmIChkZXZfbGVuID4gaG9zdF9sZW4pCisJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgLUVPVkVSRkxPVyk7CisJCQkJZWxzZQorCQkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsCisJCQkJCQkodXJiLT50cmFuc2Zlcl9mbGFncworCQkJCQkJCSYgVVJCX1NIT1JUX05PVF9PSykKKwkJCQkJCT8gLUVSRU1PVEVJTyA6IDApOworCQkJfSBlbHNlIGlmICghdG9faG9zdCkgeworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJaWYgKGhvc3RfbGVuID4gZGV2X2xlbikKKwkJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCQllbHNlCisJCQkJCXJlcS0+cmVxLnN0YXR1cyA9IDA7CisJCQl9CisKKwkJLyogbWFueSByZXF1ZXN0cyB0ZXJtaW5hdGUgd2l0aG91dCBhIHNob3J0IHBhY2tldCAqLworCQl9IGVsc2UgeworCQkJaWYgKHJlcS0+cmVxLmxlbmd0aCA9PSByZXEtPnJlcS5hY3R1YWwKKwkJCQkJJiYgIXJlcS0+cmVxLnplcm8pCisJCQkJcmVxLT5yZXEuc3RhdHVzID0gMDsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPT0gdXJiLT5hY3R1YWxfbGVuZ3RoCisJCQkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncworCQkJCQkJJiBVUkJfWkVST19QQUNLRVQpKSB7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCX0KKwkJfQorCisJCS8qIGRldmljZSBzaWRlIGNvbXBsZXRpb24gLS0+IGNvbnRpbnVhYmxlICovCisJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQlsaXN0X2RlbF9pbml0ICgmcmVxLT5xdWV1ZSk7CisKKwkJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJCXJlcS0+cmVxLmNvbXBsZXRlICgmZXAtPmVwLCAmcmVxLT5yZXEpOworCQkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKworCQkJLyogcmVxdWVzdHMgbWlnaHQgaGF2ZSBiZWVuIHVubGlua2VkLi4uICovCisJCQlyZXNjYW4gPSAxOworCQl9CisKKwkJLyogaG9zdCBzaWRlIGNvbXBsZXRpb24gLS0+IHRlcm1pbmF0ZSAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJYnJlYWs7CisKKwkJLyogcmVzY2FuIHRvIGNvbnRpbnVlIHdpdGggYW55IG90aGVyIHF1ZXVlZCBpL28gKi8KKwkJaWYgKHJlc2NhbikKKwkJCWdvdG8gdG9wOworCX0KKwlyZXR1cm4gbGltaXQ7Cit9CisKK3N0YXRpYyBpbnQgcGVyaW9kaWNfYnl0ZXMgKHN0cnVjdCBkdW1teSAqZHVtLCBzdHJ1Y3QgZHVtbXlfZXAgKmVwKQoreworCWludAlsaW1pdCA9IGVwLT5lcC5tYXhwYWNrZXQ7CisKKwlpZiAoZHVtLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJaW50CXRtcDsKKworCQkvKiBoaWdoIGJhbmR3aWR0aCBtb2RlICovCisJCXRtcCA9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLT53TWF4UGFja2V0U2l6ZSk7CisJCXRtcCA9IGxlMTZfdG9fY3B1ICh0bXApOworCQl0bXAgPSAodG1wID4+IDExKSAmIDB4MDM7CisJCXRtcCAqPSA4IC8qIGFwcGxpZXMgdG8gZW50aXJlIGZyYW1lICovOworCQlsaW1pdCArPSBsaW1pdCAqIHRtcDsKKwl9CisJcmV0dXJuIGxpbWl0OworfQorCisjZGVmaW5lIGlzX2FjdGl2ZShkdW0pCSgoZHVtLT5wb3J0X3N0YXR1cyAmIFwKKwkJKFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8IFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwgXAorCQkJVVNCX1BPUlRfU1RBVF9TVVNQRU5EKSkgXAorCQk9PSAoVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OIHwgVVNCX1BPUlRfU1RBVF9FTkFCTEUpKQorCitzdGF0aWMgc3RydWN0IGR1bW15X2VwICpmaW5kX2VuZHBvaW50IChzdHJ1Y3QgZHVtbXkgKmR1bSwgdTggYWRkcmVzcykKK3sKKwlpbnQJCWk7CisKKwlpZiAoIWlzX2FjdGl2ZSAoZHVtKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKChhZGRyZXNzICYgflVTQl9ESVJfSU4pID09IDApCisJCXJldHVybiAmZHVtLT5lcCBbMF07CisJZm9yIChpID0gMTsgaSA8IERVTU1ZX0VORFBPSU5UUzsgaSsrKSB7CisJCXN0cnVjdCBkdW1teV9lcAkqZXAgPSAmZHVtLT5lcCBbaV07CisKKwkJaWYgKCFlcC0+ZGVzYykKKwkJCWNvbnRpbnVlOworCQlpZiAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgPT0gYWRkcmVzcykKKwkJCXJldHVybiBlcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyN1bmRlZiBpc19hY3RpdmUKKworI2RlZmluZSBEZXZfUmVxdWVzdAkoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFKQorI2RlZmluZSBEZXZfSW5SZXF1ZXN0CShEZXZfUmVxdWVzdCB8IFVTQl9ESVJfSU4pCisjZGVmaW5lIEludGZfUmVxdWVzdAkoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfSU5URVJGQUNFKQorI2RlZmluZSBJbnRmX0luUmVxdWVzdAkoSW50Zl9SZXF1ZXN0IHwgVVNCX0RJUl9JTikKKyNkZWZpbmUgRXBfUmVxdWVzdAkoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCisjZGVmaW5lIEVwX0luUmVxdWVzdAkoRXBfUmVxdWVzdCB8IFVTQl9ESVJfSU4pCisKKy8qIGRyaXZlIGJvdGggc2lkZXMgb2YgdGhlIHRyYW5zZmVyczsgbG9va3MgbGlrZSBpcnEgaGFuZGxlcnMgdG8KKyAqIGJvdGggZHJpdmVycyBleGNlcHQgdGhlIGNhbGxiYWNrcyBhcmVuJ3QgaW5faXJxKCkuCisgKi8KK3N0YXRpYyB2b2lkIGR1bW15X3RpbWVyICh1bnNpZ25lZCBsb25nIF9kdW0pCit7CisJc3RydWN0IGR1bW15CQkqZHVtID0gKHN0cnVjdCBkdW1teSAqKSBfZHVtOworCXN0cnVjdCB1cmJwCQkqdXJicCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlsaW1pdCwgdG90YWw7CisJaW50CQkJaTsKKworCS8qIHNpbXBsaXN0aWMgbW9kZWwgZm9yIG9uZSBmcmFtZSdzIGJhbmR3aWR0aCAqLworCXN3aXRjaCAoZHVtLT5nYWRnZXQuc3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCXRvdGFsID0gOC8qYnl0ZXMqLyAqIDEyLypwYWNrZXRzKi87CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXRvdGFsID0gNjQvKmJ5dGVzKi8gKiAxOS8qcGFja2V0cyovOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQl0b3RhbCA9IDUxMi8qYnl0ZXMqLyAqIDEzLypwYWNrZXRzKi8gKiA4Lyp1ZnJhbWVzKi87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIgKGR1bW15X2RldihkdW0pLCAiYm9ndXMgZGV2aWNlIHNwZWVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZJWE1FIGlmIEhaICE9IDEwMDAgdGhpcyB3aWxsIHByb2JhYmx5IG1pc2JlaGF2ZSAuLi4gKi8KKworCS8qIGxvb2sgYXQgZWFjaCB1cmIgcXVldWVkIGJ5IHRoZSBob3N0IHNpZGUgZHJpdmVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCWlmICghZHVtLT51ZGV2KSB7CisJCWRldl9lcnIgKGR1bW15X2RldihkdW0pLAorCQkJCSJ0aW1lciBmaXJlZCB3aXRoIG5vIFVSQnMgcGVuZGluZz9cbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRFVNTVlfRU5EUE9JTlRTOyBpKyspIHsKKwkJaWYgKCFlcF9uYW1lIFtpXSkKKwkJCWJyZWFrOworCQlkdW0tPmVwIFtpXS5hbHJlYWR5X3NlZW4gPSAwOworCX0KKworcmVzdGFydDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgKHVyYnAsIHRtcCwgJmR1bS0+dXJicF9saXN0LCB1cmJwX2xpc3QpIHsKKwkJc3RydWN0IHVyYgkJKnVyYjsKKwkJc3RydWN0IGR1bW15X3JlcXVlc3QJKnJlcTsKKwkJdTgJCQlhZGRyZXNzOworCQlzdHJ1Y3QgZHVtbXlfZXAJCSplcCA9IE5VTEw7CisJCWludAkJCXR5cGU7CisKKwkJdXJiID0gdXJicC0+dXJiOworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQkvKiBsaWtlbHkgaXQgd2FzIGp1c3QgdW5saW5rZWQgKi8KKwkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJfQorCQl0eXBlID0gdXNiX3BpcGV0eXBlICh1cmItPnBpcGUpOworCisJCS8qIHVzZWQgdXAgdGhpcyBmcmFtZSdzIG5vbi1wZXJpb2RpYyBiYW5kd2lkdGg/CisJCSAqIEZJWE1FIHRoZXJlJ3MgaW5maW5pdGUgYmFuZHdpZHRoIGZvciBjb250cm9sIGFuZAorCQkgKiBwZXJpb2RpYyB0cmFuc2ZlcnMgLi4uIHVucmVhbGlzdGljLgorCQkgKi8KKwkJaWYgKHRvdGFsIDw9IDAgJiYgdHlwZSA9PSBQSVBFX0JVTEspCisJCQljb250aW51ZTsKKworCQkvKiBmaW5kIHRoZSBnYWRnZXQncyBlcCBmb3IgdGhpcyByZXF1ZXN0IChpZiBjb25maWd1cmVkKSAqLworCQlhZGRyZXNzID0gdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKTsKKwkJaWYgKHVzYl9waXBlaW4gKHVyYi0+cGlwZSkpCisJCQlhZGRyZXNzIHw9IFVTQl9ESVJfSU47CisJCWVwID0gZmluZF9lbmRwb2ludChkdW0sIGFkZHJlc3MpOworCQlpZiAoIWVwKSB7CisJCQkvKiBzZXRfY29uZmlndXJhdGlvbigpIGRpc2FncmVlbWVudCAqLworCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksCisJCQkJIm5vIGVwIGNvbmZpZ3VyZWQgZm9yIHVyYiAlcFxuIiwKKwkJCQl1cmIpOworCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRVBST1RPKTsKKwkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJfQorCisJCWlmIChlcC0+YWxyZWFkeV9zZWVuKQorCQkJY29udGludWU7CisJCWVwLT5hbHJlYWR5X3NlZW4gPSAxOworCQlpZiAoZXAgPT0gJmR1bS0+ZXAgWzBdICYmIHVyYi0+ZXJyb3JfY291bnQpIHsKKwkJCWVwLT5zZXR1cF9zdGFnZSA9IDE7CS8qIGEgbmV3IHVyYiAqLworCQkJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJCX0KKwkJaWYgKGVwLT5oYWx0ZWQgJiYgIWVwLT5zZXR1cF9zdGFnZSkgeworCQkJLyogTk9URTogbXVzdCBub3QgYmUgaXNvISAqLworCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJlcCAlcyBoYWx0ZWQsIHVyYiAlcFxuIiwKKwkJCQkJZXAtPmVwLm5hbWUsIHVyYik7CisJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FUElQRSk7CisJCQlnb3RvIHJldHVybl91cmI7CisJCX0KKwkJLyogRklYTUUgbWFrZSBzdXJlIGJvdGggZW5kcyBhZ3JlZSBvbiBtYXhwYWNrZXQgKi8KKworCQkvKiBoYW5kbGUgY29udHJvbCByZXF1ZXN0cyAqLworCQlpZiAoZXAgPT0gJmR1bS0+ZXAgWzBdICYmIGVwLT5zZXR1cF9zdGFnZSkgeworCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXA7CisJCQlpbnQJCQkJdmFsdWUgPSAxOworCQkJc3RydWN0IGR1bW15X2VwCQkJKmVwMjsKKworCQkJc2V0dXAgPSAqKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QqKSB1cmItPnNldHVwX3BhY2tldDsKKwkJCWxlMTZfdG9fY3B1cyAoJnNldHVwLndJbmRleCk7CisJCQlsZTE2X3RvX2NwdXMgKCZzZXR1cC53VmFsdWUpOworCQkJbGUxNl90b19jcHVzICgmc2V0dXAud0xlbmd0aCk7CisJCQlpZiAoc2V0dXAud0xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FT1ZFUkZMT1cpOworCQkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJCX0KKworCQkJLyogcGFyYW5vaWEsIGluIGNhc2Ugb2Ygc3RhbGUgcXVldWVkIGRhdGEgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJCQlsaXN0X2RlbF9pbml0ICgmcmVxLT5xdWV1ZSk7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInN0YWxlIHJlcSA9ICVwXG4iLAorCQkJCQkJcmVxKTsKKworCQkJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQlyZXEtPnJlcS5jb21wbGV0ZSAoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwkJCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCQkJCWVwLT5hbHJlYWR5X3NlZW4gPSAwOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKworCQkJLyogZ2FkZ2V0IGRyaXZlciBuZXZlciBzZWVzIHNldF9hZGRyZXNzIG9yIG9wZXJhdGlvbnMKKwkJCSAqIG9uIHN0YW5kYXJkIGZlYXR1cmUgZmxhZ3MuICBzb21lIGhhcmR3YXJlIGRvZXNuJ3QKKwkJCSAqIGV2ZW4gZXhwb3NlIHRoZW0uCisJCQkgKi8KKwkJCWVwLT5sYXN0X2lvID0gamlmZmllczsKKwkJCWVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCQllcC0+aGFsdGVkID0gMDsKKwkJCXN3aXRjaCAoc2V0dXAuYlJlcXVlc3QpIHsKKwkJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlICE9IERldl9SZXF1ZXN0KQorCQkJCQlicmVhazsKKwkJCQlkdW0tPmFkZHJlc3MgPSBzZXR1cC53VmFsdWU7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInNldF9hZGRyZXNzID0gJWRcbiIsCisJCQkJCQlzZXR1cC53VmFsdWUpOworCQkJCXZhbHVlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9SZXF1ZXN0KSB7CisJCQkJCXZhbHVlID0gMDsKKwkJCQkJc3dpdGNoIChzZXR1cC53VmFsdWUpIHsKKwkJCQkJY2FzZSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVA6CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCX0KKwkJCQkJaWYgKHZhbHVlID09IDApIHsKKwkJCQkJCWR1bS0+ZGV2c3RhdHVzIHw9CisJCQkJCQkJKDEgPDwgc2V0dXAud1ZhbHVlKTsKKwkJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJCX0KKworCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKKwkJCQkJLy8gZW5kcG9pbnQgaGFsdAorCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sCisJCQkJCQkJc2V0dXAud0luZGV4KTsKKwkJCQkJaWYgKCFlcDIpIHsKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQllcDItPmhhbHRlZCA9IDE7CisJCQkJCXZhbHVlID0gMDsKKwkJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9SZXF1ZXN0KSB7CisJCQkJCXN3aXRjaCAoc2V0dXAud1ZhbHVlKSB7CisJCQkJCWNhc2UgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQOgorCQkJCQkJZHVtLT5kZXZzdGF0dXMgJj0gfigxIDw8CisJCQkJCQkJVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKTsKKwkJCQkJCXZhbHVlID0gMDsKKwkJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKKwkJCQkJLy8gZW5kcG9pbnQgaGFsdAorCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sCisJCQkJCQkJc2V0dXAud0luZGV4KTsKKwkJCQkJaWYgKCFlcDIpIHsKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQllcDItPmhhbHRlZCA9IDA7CisJCQkJCXZhbHVlID0gMDsKKwkJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9JblJlcXVlc3QKKwkJCQkJCXx8IHNldHVwLmJSZXF1ZXN0VHlwZQorCQkJCQkJCT09IEludGZfSW5SZXF1ZXN0CisJCQkJCQl8fCBzZXR1cC5iUmVxdWVzdFR5cGUKKwkJCQkJCQk9PSBFcF9JblJlcXVlc3QKKwkJCQkJCSkgeworCQkJCQljaGFyICpidWY7CisKKwkJCQkJLy8gZGV2aWNlOiByZW1vdGUgd2FrZXVwLCBzZWxmcG93ZXJlZAorCQkJCQkvLyBpbnRlcmZhY2U6IG5vdGhpbmcKKwkJCQkJLy8gZW5kcG9pbnQ6IGhhbHQKKwkJCQkJYnVmID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChzZXR1cC5iUmVxdWVzdFR5cGUgPT0KKwkJCQkJCQkJRXBfSW5SZXF1ZXN0KSB7CisJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLCBzZXR1cC53SW5kZXgpOworCWlmICghZXAyKSB7CisJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKwlidWYgWzBdID0gZXAyLT5oYWx0ZWQ7CisJCQkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PQorCQkJCQkJCQlEZXZfSW5SZXF1ZXN0KSB7CisJCQkJCQkJYnVmIFswXSA9ICh1OCkKKwkJCQkJCQkJZHVtLT5kZXZzdGF0dXM7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQlidWYgWzBdID0gMDsKKwkJCQkJfQorCQkJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMSkKKwkJCQkJCWJ1ZiBbMV0gPSAwOworCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW4gKDIsCisJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQkJCQl2YWx1ZSA9IDA7CisJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBnYWRnZXQgZHJpdmVyIGhhbmRsZXMgYWxsIG90aGVyIHJlcXVlc3RzLiAgYmxvY2sKKwkJCSAqIHVudGlsIHNldHVwKCkgcmV0dXJuczsgbm8gcmVlbnRyYW5jeSBpc3N1ZXMgZXRjLgorCQkJICovCisJCQlpZiAodmFsdWUgPiAwKSB7CisJCQkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJCXZhbHVlID0gZHVtLT5kcml2ZXItPnNldHVwICgmZHVtLT5nYWRnZXQsCisJCQkJCQkmc2V0dXApOworCQkJCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisKKwkJCQlpZiAodmFsdWUgPj0gMCkgeworCQkJCQkvKiBubyBkZWxheXMgKG1heCA2NEtCIGRhdGEgc3RhZ2UpICovCisJCQkJCWxpbWl0ID0gNjQqMTAyNDsKKwkJCQkJZ290byB0cmVhdF9jb250cm9sX2xpa2VfYnVsazsKKwkJCQl9CisJCQkJLyogZXJyb3IsIHNlZSBiZWxvdyAqLworCQkJfQorCisJCQlpZiAodmFsdWUgPCAwKSB7CisJCQkJaWYgKHZhbHVlICE9IC1FT1BOT1RTVVBQKQorCQkJCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwKKwkJCQkJCSJzZXR1cCAtLT4gJWRcbiIsCisJCQkJCQl2YWx1ZSk7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRVBJUEUpOworCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCQl9CisKKwkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJfQorCisJCS8qIG5vbi1jb250cm9sIHJlcXVlc3RzICovCisJCWxpbWl0ID0gdG90YWw7CisJCXN3aXRjaCAodXNiX3BpcGV0eXBlICh1cmItPnBpcGUpKSB7CisJCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJCS8qIEZJWE1FIGlzIGl0IHVyYi0+aW50ZXJ2YWwgc2luY2UgdGhlIGxhc3QgeGZlcj8KKwkJCSAqIHVzZSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLgorCQkJICogY29tcGxldGUgd2hldGhlciBvciBub3QgZXAgaGFzIHJlcXVlc3RzIHF1ZXVlZC4KKwkJCSAqIHJlcG9ydCByYW5kb20gZXJyb3JzLCB0byBkZWJ1ZyBkcml2ZXJzLgorCQkJICovCisJCQlsaW1pdCA9IG1heCAobGltaXQsIHBlcmlvZGljX2J5dGVzIChkdW0sIGVwKSk7CisJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FTk9TWVMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJCS8qIEZJWE1FIGlzIGl0IHVyYi0+aW50ZXJ2YWwgc2luY2UgdGhlIGxhc3QgeGZlcj8KKwkJCSAqIHRoaXMgYWxtb3N0IGNlcnRhaW5seSBwb2xscyB0b28gZmFzdC4KKwkJCSAqLworCQkJbGltaXQgPSBtYXggKGxpbWl0LCBwZXJpb2RpY19ieXRlcyAoZHVtLCBlcCkpOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKworCQkvLyBjYXNlIFBJUEVfQlVMSzogIGNhc2UgUElQRV9DT05UUk9MOgorCQlkZWZhdWx0OgorCQl0cmVhdF9jb250cm9sX2xpa2VfYnVsazoKKwkJCWVwLT5sYXN0X2lvID0gamlmZmllczsKKwkJCXRvdGFsID0gdHJhbnNmZXIgKGR1bSwgdXJiLCBlcCwgbGltaXQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBpbmNvbXBsZXRlIHRyYW5zZmVyPyAqLworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJY29udGludWU7CisKK3JldHVybl91cmI6CisJCXVyYi0+aGNwcml2ID0gTlVMTDsKKwkJbGlzdF9kZWwgKCZ1cmJwLT51cmJwX2xpc3QpOworCQlrZnJlZSAodXJicCk7CisJCWlmIChlcCkKKwkJCWVwLT5hbHJlYWR5X3NlZW4gPSBlcC0+c2V0dXBfc3RhZ2UgPSAwOworCisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJdXNiX2hjZF9naXZlYmFja191cmIgKGR1bW15X3RvX2hjZChkdW0pLCB1cmIsIE5VTEwpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiB3YW50IGEgMSBtc2VjIGRlbGF5IGhlcmUgKi8KKwlpZiAoIWxpc3RfZW1wdHkgKCZkdW0tPnVyYnBfbGlzdCkpCisJCW1vZF90aW1lciAoJmR1bS0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEpKTsKKwllbHNlIHsKKwkJdXNiX3B1dF9kZXYgKGR1bS0+dWRldik7CisJCWR1bS0+dWRldiA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFBPUlRfQ19NQVNLIFwKKwkgKCgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKSBcCisJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFKSBcCisJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCkgXAorCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVCkgXAorCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKSkKKworc3RhdGljIGludCBkdW1teV9odWJfc3RhdHVzIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGR1bW15CQkqZHVtOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJldHZhbDsKKworCWR1bSA9IGhjZF90b19kdW1teSAoaGNkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJaWYgKCEoZHVtLT5wb3J0X3N0YXR1cyAmIFBPUlRfQ19NQVNLKSkKKwkJcmV0dmFsID0gMDsKKwllbHNlIHsKKwkJKmJ1ZiA9ICgxIDw8IDEpOworCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInBvcnQgc3RhdHVzIDB4JTA4eCBoYXMgY2hhbmdlc1xuIiwKKwkJCWR1bS0+cG9ydF9zdGF0dXMpOworCQlyZXR2YWwgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitodWJfZGVzY3JpcHRvciAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKK3sKKwltZW1zZXQgKGRlc2MsIDAsIHNpemVvZiAqZGVzYyk7CisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDAwMSk7CisJZGVzYy0+Yk5iclBvcnRzID0gMTsKKwlkZXNjLT5iaXRtYXAgWzBdID0gMHhmZjsKKwlkZXNjLT5iaXRtYXAgWzFdID0gMHhmZjsKK30KKworc3RhdGljIGludCBkdW1teV9odWJfY29udHJvbCAoCisJc3RydWN0IHVzYl9oY2QJKmhjZCwKKwl1MTYJCXR5cGVSZXEsCisJdTE2CQl3VmFsdWUsCisJdTE2CQl3SW5kZXgsCisJY2hhcgkJKmJ1ZiwKKwl1MTYJCXdMZW5ndGgKKykgeworCXN0cnVjdCBkdW1teQkqZHVtOworCWludAkJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpIHsKKwkJCQkvKiAyMG1zZWMgcmVzdW1lIHNpZ25hbGluZyAqLworCQkJCWR1bS0+cmVzdW1pbmcgPSAxOworCQkJCWR1bS0+cmVfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWR1bS0+cG9ydF9zdGF0dXMgPSAwOworCQkJZHVtLT5yZXN1bWluZyA9IDA7CisJCQlzdG9wX2FjdGl2aXR5KGR1bSwgZHVtLT5kcml2ZXIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkdW0tPnBvcnRfc3RhdHVzICY9IH4oMSA8PCB3VmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJaHViX2Rlc2NyaXB0b3IgKChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgR2V0SHViU3RhdHVzOgorCQkqKHUzMiAqKSBidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlpZiAod0luZGV4ICE9IDEpCisJCQlyZXR2YWwgPSAtRVBJUEU7CisKKwkJLyogd2hvZXZlciByZXNldHMgb3IgcmVzdW1lcyBtdXN0IEdldFBvcnRTdGF0dXMgdG8KKwkJICogY29tcGxldGUgaXQhIQorCQkgKi8KKwkJaWYgKGR1bS0+cmVzdW1pbmcgJiYgdGltZV9hZnRlciAoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgeworCQkJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJCQlkdW0tPnBvcnRfc3RhdHVzICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQkJZHVtLT5yZXN1bWluZyA9IDA7CisJCQlkdW0tPnJlX3RpbWVvdXQgPSAwOworCQkJaWYgKGR1bS0+ZHJpdmVyICYmIGR1bS0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCQkJZHVtLT5kcml2ZXItPnJlc3VtZSAoJmR1bS0+Z2FkZ2V0KTsKKwkJCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCQkJfQorCQl9CisJCWlmICgoZHVtLT5wb3J0X3N0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSAhPSAwCisJCQkJJiYgdGltZV9hZnRlciAoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgeworCQkJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQpOworCQkJZHVtLT5wb3J0X3N0YXR1cyAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CisJCQlkdW0tPnJlX3RpbWVvdXQgPSAwOworCQkJaWYgKGR1bS0+ZHJpdmVyKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0VOQUJMRTsKKwkJCQkvKiBnaXZlIGl0IHRoZSBiZXN0IHNwZWVkIHdlIGFncmVlIG9uICovCisJCQkJZHVtLT5nYWRnZXQuc3BlZWQgPSBkdW0tPmRyaXZlci0+c3BlZWQ7CisJCQkJZHVtLT5nYWRnZXQuZXAwLT5tYXhwYWNrZXQgPSA2NDsKKwkJCQlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gODsKKwkJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQkoKHUxNiAqKSBidWYpWzBdID0gY3B1X3RvX2xlMTYgKGR1bS0+cG9ydF9zdGF0dXMpOworCQkoKHUxNiAqKSBidWYpWzFdID0gY3B1X3RvX2xlMTYgKGR1bS0+cG9ydF9zdGF0dXMgPj4gMTYpOworCQlicmVhazsKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCXJldHZhbCA9IC1FUElQRTsKKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoKGR1bS0+cG9ydF9zdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKQorCQkJCQk9PSAwKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PQorCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCQlpZiAoZHVtLT5kcml2ZXIgJiYgZHVtLT5kcml2ZXItPnN1c3BlbmQpIHsKKwkJCQkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJCQlkdW0tPmRyaXZlci0+c3VzcGVuZCAoJmR1bS0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJLyogaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIGRpc2Nvbm5lY3QgZmlyc3QgKi8KKwkJCWlmIChkdW0tPnBvcnRfc3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKKwkJCQlkdW0tPnBvcnRfc3RhdHVzICY9IH4oVVNCX1BPUlRfU1RBVF9FTkFCTEUKKwkJCQkJCXwgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQKKwkJCQkJCXwgVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEKTsKKwkJCQlpZiAoZHVtLT5kcml2ZXIpIHsKKwkJCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksCisJCQkJCQkJImRpc2Nvbm5lY3RcbiIpOworCQkJCQlzdG9wX2FjdGl2aXR5IChkdW0sIGR1bS0+ZHJpdmVyKTsKKwkJCQl9CisKKwkJCQkvKiBGSVhNRSB0ZXN0IHRoYXQgY29kZSBwYXRoISAqLworCQkJfQorCQkJLyogNTBtc2VjIHJlc2V0IHNpZ25hbGluZyAqLworCQkJZHVtLT5yZV90aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoKKwkJCWR1bS0+cG9ydF9zdGF0dXMgfD0gKDEgPDwgd1ZhbHVlKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLAorCQkJImh1YiBjb250cm9sIHJlcSUwNHggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHNzaXplX3QKK3Nob3dfdXJiIChjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwID0gdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKTsKKworCXJldHVybiBzbnByaW50ZiAoYnVmLCBzaXplLAorCQkidXJiLyVwICVzIGVwJWQlcyVzIGxlbiAlZC8lZFxuIiwKKwkJdXJiLAorCQkoeyBjaGFyICpzOworCQkgc3dpdGNoICh1cmItPmRldi0+c3BlZWQpIHsKKwkJIGNhc2UgVVNCX1NQRUVEX0xPVzoJcyA9ICJscyI7IGJyZWFrOworCQkgY2FzZSBVU0JfU1BFRURfRlVMTDoJcyA9ICJmcyI7IGJyZWFrOworCQkgY2FzZSBVU0JfU1BFRURfSElHSDoJcyA9ICJocyI7IGJyZWFrOworCQkgZGVmYXVsdDoJCXMgPSAiPyI7IGJyZWFrOworCQkgfTsgczsgfSksCisJCWVwLCBlcCA/ICh1c2JfcGlwZWluICh1cmItPnBpcGUpID8gImluIiA6ICJvdXQiKSA6ICIiLAorCQkoeyBjaGFyICpzOyBcCisJCSBzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgeyBcCisJCSBjYXNlIFBJUEVfQ09OVFJPTDoJcyA9ICIiOyBicmVhazsgXAorCQkgY2FzZSBQSVBFX0JVTEs6CXMgPSAiLWJ1bGsiOyBicmVhazsgXAorCQkgY2FzZSBQSVBFX0lOVEVSUlVQVDoJcyA9ICItaW50IjsgYnJlYWs7IFwKKwkJIGRlZmF1bHQ6IAkJcyA9ICItaXNvIjsgYnJlYWs7IFwKKwkJfTsgczt9KSwKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd191cmJzIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisJc3RydWN0IHVyYnAJCSp1cmJwOworCXNpemVfdAkJCXNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1cmJwLCAmZHVtLT51cmJwX2xpc3QsIHVyYnBfbGlzdCkgeworCQlzaXplX3QJCXRlbXA7CisKKwkJdGVtcCA9IHNob3dfdXJiIChidWYsIFBBR0VfU0laRSAtIHNpemUsIHVyYnAtPnVyYik7CisJCWJ1ZiArPSB0ZW1wOworCQlzaXplICs9IHRlbXA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSICh1cmJzLCBTX0lSVUdPLCBzaG93X3VyYnMsIE5VTEwpOworCitzdGF0aWMgaW50IGR1bW15X3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdDsKKwlpbnQJCQlyZXR2YWw7CisKKwlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisKKwkvKgorCSAqIE1BU1RFUiBzaWRlIGluaXQgLi4uIHdlIGVtdWxhdGUgYSByb290IGh1YiB0aGF0J2xsIG9ubHkgZXZlcgorCSAqIHRhbGsgdG8gb25lIGRldmljZSAodGhlIHNsYXZlIHNpZGUpLiAgQWxzbyBhcHBlYXJzIGluIHN5c2ZzLAorCSAqIGp1c3QgbGlrZSBtb3JlIGZhbWlsaWFyIHBjaS1iYXNlZCBIQ0RzLgorCSAqLworCXNwaW5fbG9ja19pbml0ICgmZHVtLT5sb2NrKTsKKwlpbml0X3RpbWVyICgmZHVtLT50aW1lcik7CisJZHVtLT50aW1lci5mdW5jdGlvbiA9IGR1bW15X3RpbWVyOworCWR1bS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkdW07CisKKwlJTklUX0xJU1RfSEVBRCAoJmR1bS0+dXJicF9saXN0KTsKKworCXJvb3QgPSB1c2JfYWxsb2NfZGV2IChOVUxMLCAmaGNkLT5zZWxmLCAwKTsKKwlpZiAoIXJvb3QpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcm9vdCBodWIgZW50ZXJzIGFkZHJlc3NlZCBzdGF0ZS4uLiAqLworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCXJvb3QtPnNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CisKKwkvKiAuLi50aGVuIGNvbmZpZ3VyZWQsIHNvIGtodWJkIHNlZXMgdXMuICovCisJaWYgKChyZXR2YWwgPSB1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViIChyb290LCBoY2QpKSAhPSAwKSB7CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBvbmx5IHNob3cgYSBsb3ctcG93ZXIgcG9ydDoganVzdCA4bUEgKi8KKwlodWJfc2V0X3Bvd2VyX2J1ZGdldCAocm9vdCwgOCk7CisKKwlpZiAoKHJldHZhbCA9IGR1bW15X3JlZ2lzdGVyX3VkYyAoZHVtKSkgIT0gMCkKKwkJZ290byBlcnIyOworCisJLyogRklYTUUgJ3VyYnMnIHNob3VsZCBiZSBhIHBlci1kZXZpY2UgdGhpbmcsIG1heWJlIGluIHVzYmNvcmUgKi8KKwlkZXZpY2VfY3JlYXRlX2ZpbGUgKGR1bW15X2RldihkdW0pLCAmZGV2X2F0dHJfdXJicyk7CisJcmV0dXJuIDA7CisKKyBlcnIyOgorCXVzYl9kaXNjb25uZWN0ICgmaGNkLT5zZWxmLnJvb3RfaHViKTsKKyBlcnIxOgorCXVzYl9wdXRfZGV2IChyb290KTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGR1bW15CQkqZHVtOworCisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCisJZGV2aWNlX3JlbW92ZV9maWxlIChkdW1teV9kZXYoZHVtKSwgJmRldl9hdHRyX3VyYnMpOworCisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoZHVtLT5kcml2ZXIpOworCWR1bW15X3VucmVnaXN0ZXJfdWRjIChkdW0pOworCisJZGV2X2luZm8gKGR1bW15X2RldihkdW0pLCAic3RvcHBlZFxuIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZHVtbXlfaF9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIGR1bW15X2dfZ2V0X2ZyYW1lIChOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZHVtbXlfaGNkID0geworCS5kZXNjcmlwdGlvbiA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJEdW1teSBob3N0IGNvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBkdW1teSksCisKKwkuZmxhZ3MgPQkJSENEX1VTQjIsCisKKwkuc3RhcnQgPQkJZHVtbXlfc3RhcnQsCisJLnN0b3AgPQkJCWR1bW15X3N0b3AsCisKKwkudXJiX2VucXVldWUgPSAJCWR1bW15X3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IAkJZHVtbXlfdXJiX2RlcXVldWUsCisKKwkuZ2V0X2ZyYW1lX251bWJlciA9IAlkdW1teV9oX2dldF9mcmFtZSwKKworCS5odWJfc3RhdHVzX2RhdGEgPSAJZHVtbXlfaHViX3N0YXR1cywKKwkuaHViX2NvbnRyb2wgPSAJCWR1bW15X2h1Yl9jb250cm9sLAorfTsKKworc3RhdGljIGludCBkdW1teV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldHZhbDsKKworCWRldl9pbmZvIChkZXYsICIlcywgZHJpdmVyICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKCZkdW1teV9oY2QsIGRldiwgZGV2LT5idXNfaWQpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0aGVfY29udHJvbGxlciA9IGhjZF90b19kdW1teSAoaGNkKTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCXVzYl9wdXRfaGNkIChoY2QpOworCQl0aGVfY29udHJvbGxlciA9IE5VTEw7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCXVzYl9yZW1vdmVfaGNkIChoY2QpOworCXVzYl9wdXRfaGNkIChoY2QpOworCXRoZV9jb250cm9sbGVyID0gTlVMTDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkdW1teV9wZGV2X2RldGVjdCAodm9pZCkKK3sKKwlpbnQJCQlyZXR2YWw7CisKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV9kcml2ZXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJdGhlX3BkZXYubmFtZSA9ICJoYyI7CisJdGhlX3BkZXYuZGV2LmRyaXZlciA9ICZkdW1teV9kcml2ZXI7CisJdGhlX3BkZXYuZGV2LnJlbGVhc2UgPSBkdW1teV9wZGV2X3JlbGVhc2U7CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIgKCZ0aGVfcGRldik7CisJaWYgKHJldHZhbCA8IDApCisJCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfZHJpdmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9wZGV2X3JlbW92ZSAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV9wZGV2KTsKKwlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2RyaXZlcik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQgKHZvaWQpCit7CisJaW50CXJldHZhbDsKKworCWlmICh1c2JfZGlzYWJsZWQgKCkpCisJCXJldHVybiAtRU5PREVWOworCWlmICgocmV0dmFsID0gZHVtbXlfcGRldl9kZXRlY3QgKCkpICE9IDApCisJCXJldHVybiByZXR2YWw7CisJaWYgKChyZXR2YWwgPSBkdW1teV9wcm9iZSAoJnRoZV9wZGV2LmRldikpICE9IDApCisJCWR1bW15X3BkZXZfcmVtb3ZlICgpOworCXJldHVybiByZXR2YWw7Cit9Cittb2R1bGVfaW5pdCAoaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKQoreworCWR1bW15X3JlbW92ZSAoJnRoZV9wZGV2LmRldik7CisJZHVtbXlfcGRldl9yZW1vdmUgKCk7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M2ZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIGVwYXV0b2NvbmYuYyAtLSBlbmRwb2ludCBhdXRvY29uZmlndXJhdGlvbiBmb3IgdXNiIGdhZGdldCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qIHdlIG11c3QgYXNzaWduIGFkZHJlc3NlcyBmb3IgY29uZmlndXJhYmxlIGVuZHBvaW50cyAobGlrZSBuZXQyMjgwKSAqLworc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgZXBudW07CisKKy8vICNkZWZpbmUgTUFOWV9FTkRQT0lOVFMKKyNpZmRlZiBNQU5ZX0VORFBPSU5UUworLyogbW9yZSB0aGFuIDE1IGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKi8KK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGluX2VwbnVtOworI2VuZGlmCisKKworLyoKKyAqIFRoaXMgc2hvdWxkIHdvcmsgd2l0aCBlbmRwb2ludHMgZnJvbSBjb250cm9sbGVyIGRyaXZlcnMgc2hhcmluZyB0aGUKKyAqIHNhbWUgZW5kcG9pbnQgbmFtaW5nIGNvbnZlbnRpb24uICBCeSBleGFtcGxlOgorICoKKyAqCS0gZXAxLCBlcDIsIC4uLiBhZGRyZXNzIGlzIGZpeGVkLCBub3QgZGlyZWN0aW9uIG9yIHR5cGUKKyAqCS0gZXAxaW4sIGVwMm91dCwgLi4uIGFkZHJlc3MgYW5kIGRpcmVjdGlvbiBhcmUgZml4ZWQsIG5vdCB0eXBlCisgKgktIGVwMS1idWxrLCBlcDItYnVsaywgLi4uIGFkZHJlc3MgYW5kIHR5cGUgYXJlIGZpeGVkLCBub3QgZGlyZWN0aW9uCisgKgktIGVwMWluLWJ1bGssIGVwMm91dC1pc28sIC4uLiBhbGwgdGhyZWUgYXJlIGZpeGVkCisgKgktIGVwLSogLi4uIG5vIGZ1bmN0aW9uYWxpdHkgcmVzdHJpY3Rpb25zCisgKgorICogVHlwZSBzdWZmaXhlcyBhcmUgIi1idWxrIiwgIi1pc28iLCBvciAiLWludCIuICBOdW1iZXJzIGFyZSBkZWNpbWFsLgorICogTGVzcyBjb21tb24gcmVzdHJpY3Rpb25zIGFyZSBpbXBsaWVkIGJ5IGdhZGdldF9pc18qKCkuCisgKgorICogTk9URTogIGVhY2ggZW5kcG9pbnQgaXMgdW5pZGlyZWN0aW9uYWwsIGFzIHNwZWNpZmllZCBieSBpdHMgVVNCCisgKiBkZXNjcmlwdG9yOyBhbmQgaXNuJ3Qgc3BlY2lmaWMgdG8gYSBjb25maWd1cmF0aW9uIG9yIGFsdHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0CitlcF9tYXRjaGVzICgKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldCwKKwlzdHJ1Y3QgdXNiX2VwCQkJKmVwLAorCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYworKQoreworCXU4CQl0eXBlOworCWNvbnN0IGNoYXIJKnRtcDsKKwl1MTYJCW1heDsKKworCS8qIGVuZHBvaW50IGFscmVhZHkgY2xhaW1lZD8gKi8KKwlpZiAoMCAhPSBlcC0+ZHJpdmVyX2RhdGEpCisJCXJldHVybiAwOworCQkKKwkvKiBvbmx5IHN1cHBvcnQgZXAwIGZvciBwb3J0YWJsZSBDT05UUk9MIHRyYWZmaWMgKi8KKwl0eXBlID0gZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisJaWYgKFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgPT0gdHlwZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBzb21lIG90aGVyIG5hbWluZyBjb252ZW50aW9uICovCisJaWYgKCdlJyAhPSBlcC0+bmFtZVswXSkKKwkJcmV0dXJuIDA7CisKKwkvKiB0eXBlLXJlc3RyaWN0aW9uOiAgIi1pc28iLCAiLWJ1bGsiLCBvciAiLWludCIuCisJICogZGlyZWN0aW9uLXJlc3RyaWN0aW9uOiAgImluIiwgIm91dCIuCisJICovCisJaWYgKCctJyAhPSBlcC0+bmFtZVsyXSkgeworCQl0bXAgPSBzdHJyY2hyIChlcC0+bmFtZSwgJy0nKTsKKwkJaWYgKHRtcCkgeworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJCQkvKiBidWxrIGVuZHBvaW50cyBoYW5kbGUgaW50ZXJydXB0IHRyYW5zZmVycywKKwkJCQkgKiBleGNlcHQgdGhlIHRvZ2dsZS1xdWlya3kgaXNvLXN5bmNoIGtpbmQKKwkJCQkgKi8KKwkJCQlpZiAoJ3MnID09IHRtcFsyXSkJLy8gPT0gIi1pc28iCisJCQkJCXJldHVybiAwOworCQkJCS8qIGZvciBub3csIGF2b2lkIFBYQSAiaW50ZXJydXB0LWluIjsKKwkJCQkgKiBpdCdzIGRvY3VtZW50ZWQgYXMgbmV2ZXIgdXNpbmcgREFUQTEuCisJCQkJICovCisJCQkJaWYgKGdhZGdldF9pc19weGEgKGdhZGdldCkKKwkJCQkJCSYmICdpJyA9PSB0bXAgWzFdKQorCQkJCQlyZXR1cm4gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCQlpZiAoJ2InICE9IHRtcFsxXSkJLy8gIT0gIi1idWxrIgorCQkJCQlyZXR1cm4gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCQlpZiAoJ3MnICE9IHRtcFsyXSkJLy8gIT0gIi1pc28iCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9IGVsc2UgeworCQkJdG1wID0gZXAtPm5hbWUgKyBzdHJsZW4gKGVwLT5uYW1lKTsKKwkJfQorCisJCS8qIGRpcmVjdGlvbi1yZXN0cmljdGlvbjogICIuLmluLS4uIiwgIm91dC0uLiIgKi8KKwkJdG1wLS07CisJCWlmICghaXNkaWdpdCAoKnRtcCkpIHsKKwkJCWlmIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJCWlmICgnbicgIT0gKnRtcCkKKwkJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCWlmICgndCcgIT0gKnRtcCkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwkvKiBlbmRwb2ludCBtYXhwYWNrZXQgc2l6ZSBpcyBhbiBpbnB1dCBwYXJhbWV0ZXIsIGV4Y2VwdCBmb3IgYnVsaworCSAqIHdoZXJlIGl0J3MgYW4gb3V0cHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGZ1bGwgc3BlZWQgbGltaXQuCisJICogdGhlIHVzYiBzcGVjIGZpeGVzIGhpZ2ggc3BlZWQgYnVsayBtYXhwYWNrZXQgYXQgNTEyIGJ5dGVzLgorCSAqLworCW1heCA9IDB4N2ZmICYgbGUxNl90b19jcHVwICgmZGVzYy0+d01heFBhY2tldFNpemUpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkvKiBJTlQ6ICBsaW1pdCA2NCBieXRlcyBmdWxsIHNwZWVkLCAxMDI0IGhpZ2ggc3BlZWQgKi8KKwkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCAmJiBtYXggPiA2NCkKKwkJCXJldHVybiAwOworCQkvKiBGQUxMVEhST1VHSCAqLworCisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQkvKiBJU086ICBsaW1pdCAxMDIzIGJ5dGVzIGZ1bGwgc3BlZWQsIDEwMjQgaGlnaCBzcGVlZCAqLworCQlpZiAoZXAtPm1heHBhY2tldCA8IG1heCkKKwkJCXJldHVybiAwOworCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkICYmIG1heCA+IDEwMjMpCisJCQlyZXR1cm4gMDsKKworCQkvKiBCT1RIOiAgImhpZ2ggYmFuZHdpZHRoIiB3b3JrcyBvbmx5IGF0IGhpZ2ggc3BlZWQgKi8KKwkJaWYgKChkZXNjLT53TWF4UGFja2V0U2l6ZSAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMzw8MTEpKSkgeworCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlyZXR1cm4gMDsKKwkJCS8qIGNvbmZpZ3VyZSB5b3VyIGhhcmR3YXJlIHdpdGggZW5vdWdoIGJ1ZmZlcmluZyEhICovCisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogTUFUQ0ghISAqLworCisJLyogcmVwb3J0IGFkZHJlc3MgKi8KKwlpZiAoaXNkaWdpdCAoZXAtPm5hbWUgWzJdKSkgeworCQl1OAludW0gPSBzaW1wbGVfc3RydG9sICgmZXAtPm5hbWUgWzJdLCBOVUxMLCAxMCk7CisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgfD0gbnVtOworI2lmZGVmCU1BTllfRU5EUE9JTlRTCisJfSBlbHNlIGlmIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQlpZiAoKytpbl9lcG51bSA+IDE1KQorCQkJcmV0dXJuIDA7CisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgaW5fZXBudW07CisjZW5kaWYKKwl9IGVsc2UgeworCQlpZiAoKytlcG51bSA+IDE1KQorCQkJcmV0dXJuIDA7CisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgfD0gZXBudW07CisJfQorCisJLyogcmVwb3J0ICh2YXJpYWJsZSkgZnVsbCBzcGVlZCBidWxrIG1heHBhY2tldCAqLworCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9CVUxLID09IHR5cGUpIHsKKwkJaW50IHNpemUgPSBlcC0+bWF4cGFja2V0OworCisJCS8qIG1pbigpIGRvZXNuJ3Qgd29yayBvbiBiaXRmaWVsZHMgd2l0aCBnY2MtMy41ICovCisJCWlmIChzaXplID4gNjQpCisJCQlzaXplID0gNjQ7CisJCWRlc2MtPndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcCAqIF9faW5pdAorZmluZF9lcCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdXNiX2VwCSplcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCWlmICgwID09IHN0cmNtcCAoZXAtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGVwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB1c2JfZXBfYXV0b2NvbmZpZyAtIGNob29zZSBhbiBlbmRwb2ludCBtYXRjaGluZyB0aGUgZGVzY3JpcHRvcgorICogQGdhZGdldDogVGhlIGRldmljZSB0byB3aGljaCB0aGUgZW5kcG9pbnQgbXVzdCBiZWxvbmcuCisgKiBAZGVzYzogRW5kcG9pbnQgZGVzY3JpcHRvciwgd2l0aCBlbmRwb2ludCBkaXJlY3Rpb24gYW5kIHRyYW5zZmVyIG1vZGUKKyAqCWluaXRpYWxpemVkLiAgRm9yIHBlcmlvZGljIHRyYW5zZmVycywgdGhlIG1heGltdW0gcGFja2V0CisgKglzaXplIG11c3QgYWxzbyBiZSBpbml0aWFsaXplZC4gIFRoaXMgaXMgbW9kaWZpZWQgb24gc3VjY2Vzcy4KKyAqCisgKiBCeSBjaG9vc2luZyBhbiBlbmRwb2ludCB0byB1c2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGRlc2NyaXB0b3IsIHRoaXMKKyAqIHJvdXRpbmUgc2ltcGxpZmllcyB3cml0aW5nIGdhZGdldCBkcml2ZXJzIHRoYXQgd29yayB3aXRoIG11bHRpcGxlCisgKiBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLiAgVGhlIGVuZHBvaW50IHdvdWxkIGJlIHBhc3NlZCBsYXRlciB0bworICogdXNiX2VwX2VuYWJsZSgpLCBhbG9uZyB3aXRoIHNvbWUgZGVzY3JpcHRvci4KKyAqCisgKiBUaGF0IHNlY29uZCBkZXNjcmlwdG9yIHdvbid0IGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3Qgb25lLgorICogRm9yIGV4YW1wbGUsIGlzb2Nocm9ub3VzIGVuZHBvaW50cyBjYW4gYmUgYXV0b2NvbmZpZ3VyZWQgZm9yIGhpZ2gKKyAqIGJhbmR3aWR0aCwgYW5kIHRoZW4gdXNlZCBpbiBzZXZlcmFsIGxvd2VyIGJhbmR3aWR0aCBhbHRzZXR0aW5ncy4KKyAqIEFsc28sIGhpZ2ggYW5kIGZ1bGwgc3BlZWQgZGVzY3JpcHRvcnMgd2lsbCBiZSBkaWZmZXJlbnQuCisgKgorICogQmUgc3VyZSB0byBleGFtaW5lIGFuZCB0ZXN0IHRoZSByZXN1bHRzIG9mIGF1dG9jb25maWd1cmF0aW9uIG9uIHlvdXIKKyAqIGhhcmR3YXJlLiAgVGhpcyBjb2RlIG1heSBub3QgbWFrZSB0aGUgYmVzdCBjaG9pY2VzIGFib3V0IGhvdyB0byB1c2UgdGhlCisgKiBVU0IgY29udHJvbGxlciwgYW5kIGl0IGNhbid0IGtub3cgYWxsIHRoZSByZXN0cmljdGlvbnMgdGhhdCBtYXkgYXBwbHkuCisgKiBTb21lIGNvbWJpbmF0aW9ucyBvZiBkcml2ZXIgYW5kIGhhcmR3YXJlIHdvbid0IGJlIGFibGUgdG8gYXV0b2NvbmZpZ3VyZS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGlzIHJldHVybnMgYW4gdW4tY2xhaW1lZCB1c2JfZXAsIGFuZCBtb2RpZmllcyB0aGUgZW5kcG9pbnQKKyAqIGRlc2NyaXB0b3IgYkVuZHBvaW50QWRkcmVzcy4gIEZvciBidWxrIGVuZHBvaW50cywgdGhlIHdNYXhQYWNrZXQgdmFsdWUKKyAqIGlzIGluaXRpYWxpemVkIGFzIGlmIHRoZSBlbmRwb2ludCB3ZXJlIHVzZWQgYXQgZnVsbCBzcGVlZC4gIFRvIHByZXZlbnQKKyAqIHRoZSBlbmRwb2ludCBmcm9tIGJlaW5nIHJldHVybmVkIGJ5IGEgbGF0ZXIgYXV0b2NvbmZpZyBjYWxsLCBjbGFpbSBpdAorICogYnkgYXNzaWduaW5nIGVwLT5kcml2ZXJfZGF0YSB0byBzb21lIG5vbi1udWxsIHZhbHVlLgorICoKKyAqIE9uIGZhaWx1cmUsIHRoaXMgcmV0dXJucyBhIG51bGwgZW5kcG9pbnQgZGVzY3JpcHRvci4KKyAqLworc3RydWN0IHVzYl9lcCAqIF9faW5pdCB1c2JfZXBfYXV0b2NvbmZpZyAoCisJc3RydWN0IHVzYl9nYWRnZXQJCSpnYWRnZXQsCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjCispCit7CisJc3RydWN0IHVzYl9lcAkqZXA7CisJdTgJCXR5cGU7CisKKwl0eXBlID0gZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisKKwkvKiBGaXJzdCwgYXBwbHkgY2hpcC1zcGVjaWZpYyAiYmVzdCB1c2FnZSIga25vd2xlZGdlLgorCSAqIFRoaXMgbWlnaHQgbWFrZSBhIGdvb2QgdXNiX2dhZGdldF9vcHMgaG9vayAuLi4KKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX25ldDIyODAgKGdhZGdldCkgJiYgdHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJLyogZXAtZSwgZXAtZiBhcmUgUElPIHdpdGggb25seSA2NCBieXRlIGZpZm9zICovCisJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAtZSIpOworCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAtZiIpOworCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19nb2t1IChnYWRnZXQpKSB7CisJCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgeworCQkJLyogc2luZ2xlIGJ1ZmZlcmluZyBpcyBlbm91Z2ggKi8KKwkJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAzLWJ1bGsiKTsKKwkJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCQlyZXR1cm4gZXA7CisJCX0gZWxzZSBpZiAoVVNCX0VORFBPSU5UX1hGRVJfQlVMSyA9PSB0eXBlCisJCQkJJiYgKFVTQl9ESVJfSU4gJiBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzKSkgeworCQkJLyogRE1BIG1heSBiZSBhdmFpbGFibGUgKi8KKwkJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAyLWJ1bGsiKTsKKwkJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCQlyZXR1cm4gZXA7CisJCX0KKworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoIChnYWRnZXQpICYmIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCA9PSB0eXBlKSB7CisJCS8qIHNpbmdsZSBidWZmZXJpbmcgaXMgZW5vdWdoOyBtYXliZSA4IGJ5dGUgZmlmbyBpcyB0b28gKi8KKwkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDNpbi1idWxrIik7CisJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCXJldHVybiBlcDsKKworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX21xMTF4eCAoZ2FkZ2V0KSAmJiBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgeworCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwMS1idWxrIik7CisJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCXJldHVybiBlcDsKKwl9CisKKwkvKiBTZWNvbmQsIGxvb2sgYXQgZW5kcG9pbnRzIHVudGlsIGFuIHVuY2xhaW1lZCBvbmUgbG9va3MgdXNhYmxlICovIAorCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCWlmIChlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCXJldHVybiBlcDsKKwl9CisKKwkvKiBGYWlsICovCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2VwX2F1dG9jb25maWdfcmVzZXQgLSByZXNldCBlbmRwb2ludCBhdXRvY29uZmlnIHN0YXRlCisgKiBAZ2FkZ2V0OiBkZXZpY2UgZm9yIHdoaWNoIGF1dG9jb25maWcgc3RhdGUgd2lsbCBiZSByZXNldAorICoKKyAqIFVzZSB0aGlzIGZvciBkZXZpY2VzIHdoZXJlIG9uZSBjb25maWd1cmF0aW9uIG1heSBuZWVkIHRvIGFzc2lnbgorICogZW5kcG9pbnQgcmVzb3VyY2VzIHZlcnkgZGlmZmVyZW50bHkgZnJvbSB0aGUgbmV4dCBvbmUuICBJdCBjbGVhcnMKKyAqIHN0YXRlIHN1Y2ggYXMgZXAtPmRyaXZlcl9kYXRhIGFuZCB0aGUgcmVjb3JkIG9mIGFzc2lnbmVkIGVuZHBvaW50cworICogdXNlZCBieSB1c2JfZXBfYXV0b2NvbmZpZygpLgorICovCit2b2lkIF9faW5pdCB1c2JfZXBfYXV0b2NvbmZpZ19yZXNldCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgdXNiX2VwCSplcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCWVwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJfQorI2lmZGVmCU1BTllfRU5EUE9JTlRTCisJaW5fZXBudW0gPSAwOworI2VuZGlmCisJZXBudW0gPSAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjlmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMCwwICsxLDI2NjAgQEAKKy8qCisgKiBldGhlci5jIC0tIEV0aGVybmV0IGdhZGdldCBkcml2ZXIsIHdpdGggQ0RDIGFuZCBub24tQ0RDIG9wdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgUm9iZXJ0IFNjaHdlYmVsLCBCZW5lZGlrdCBTcHJhbmdlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKy8vICNkZWZpbmUgREVCVUcgMQorLy8gI2RlZmluZSBWRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jZGMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciAtLSB3aXRoIENEQyBhbmQgbm9uLUNEQyBvcHRpb25zCisgKiBCdWlsZHMgb24gaGFyZHdhcmUgc3VwcG9ydCBmb3IgYSBmdWxsIGR1cGxleCBsaW5rLgorICoKKyAqIENEQyBFdGhlcm5ldCBpcyB0aGUgc3RhbmRhcmQgVVNCIHNvbHV0aW9uIGZvciBzZW5kaW5nIEV0aGVybmV0IGZyYW1lcworICogdXNpbmcgVVNCLiAgUmVhbCBoYXJkd2FyZSB0ZW5kcyB0byB1c2UgdGhlIHNhbWUgZnJhbWluZyBwcm90b2NvbCBidXQgbG9vaworICogZGlmZmVyZW50IGZvciBjb250cm9sIGZlYXR1cmVzLiAgVGhpcyBkcml2ZXIgc3Ryb25nbHkgcHJlZmVycyB0byB1c2UKKyAqIHRoaXMgVVNCLUlGIHN0YW5kYXJkIGFzIGl0cyBvcGVuLXN5c3RlbXMgaW50ZXJvcGVyYWJpbGl0eSBzb2x1dGlvbjsKKyAqIG1vc3QgaG9zdCBzaWRlIFVTQiBzdGFja3MgKGV4Y2VwdCBmcm9tIE1pY3Jvc29mdCkgc3VwcG9ydCBpdC4KKyAqCisgKiBUaGVyZSdzIHNvbWUgaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrIENEQy4gIFdlIG1ha2UgdGhhdCBoYXJkd2FyZQorICogaW1wbGVtZW50IGEgIm1pbmltYWxpc3QiIHZlbmRvci1hZ25vc3RpYyBDREMgY29yZTogIHNhbWUgZnJhbWluZywgYnV0CisgKiBsaW5rLWxldmVsIHNldHVwIG9ubHkgcmVxdWlyZXMgYWN0aXZhdGluZyB0aGUgY29uZmlndXJhdGlvbi4KKyAqIExpbnV4IHN1cHBvcnRzIGl0LCBidXQgb3RoZXIgaG9zdCBvcGVyYXRpbmcgc3lzdGVtcyBtYXkgbm90LgorICogKFRoaXMgaXMgYSBzdWJzZXQgb2YgQ0RDIEV0aGVybmV0LikKKyAqCisgKiBBIHRoaXJkIG9wdGlvbiBpcyBhbHNvIGluIHVzZS4gIFJhdGhlciB0aGFuIENEQyBFdGhlcm5ldCwgb3Igc29tZXRoaW5nCisgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCisgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCisgKiBuZWVkbGVzc2x5IGNvbXBsZXguCisgKi8KKworI2RlZmluZSBEUklWRVJfREVTQwkJIkV0aGVybmV0IEdhZGdldCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJFcXVpbm94IDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0bmFtZSBbXSA9ICJldGhlciI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOworCisjZGVmaW5lIFJYX0VYVFJBCTIwCQkvKiBndWFyZCBhZ2FpbnN0IHJ4IG92ZXJmbG93cyAqLworCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKyNpbmNsdWRlICJybmRpcy5oIgorI2Vsc2UKKyNkZWZpbmUgcm5kaXNfaW5pdCgpIDAKKyNkZWZpbmUgcm5kaXNfZXhpdCgpIGRve313aGlsZSgwKQorI2VuZGlmCisKKy8qIENEQyBhbmQgUk5ESVMgc3VwcG9ydCB0aGUgc2FtZSBob3N0LWNob3NlbiBvdXRnb2luZyBwYWNrZXQgZmlsdGVycy4gKi8KKyNkZWZpbmUJREVGQVVMVF9GSUxURVIJKFVTQl9DRENfUEFDS0VUX1RZUEVfQlJPQURDQVNUIFwKKyAJCQl8VVNCX0NEQ19QQUNLRVRfVFlQRV9ESVJFQ1RFRCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgZXRoX2RldiB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwkJLyogZm9yIGNvbnRyb2wgcmVzcG9uc2VzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0CSpzdGF0X3JlcTsJLyogZm9yIGNkYyAmIHJuZGlzIHN0YXR1cyAqLworCisJdTgJCQljb25maWc7CisJc3RydWN0IHVzYl9lcAkJKmluX2VwLCAqb3V0X2VwLCAqc3RhdHVzX2VwOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorCQkJCSppbiwgKm91dCwgKnN0YXR1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXR4X3JlcXMsIHJ4X3JlcXM7CisKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOworCWF0b21pY190CQl0eF9xbGVuOworCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJdW5zaWduZWQJCXpscDoxOworCXVuc2lnbmVkCQljZGM6MTsKKwl1bnNpZ25lZAkJcm5kaXM6MTsKKwl1bnNpZ25lZAkJc3VzcGVuZGVkOjE7CisJdTE2CQkJY2RjX2ZpbHRlcjsKKwl1bnNpZ25lZCBsb25nCQl0b2RvOworI2RlZmluZQlXT1JLX1JYX01FTU9SWQkJMAorCWludAkJCXJuZGlzX2NvbmZpZzsKKwl1OAkJCWhvc3RfbWFjIFtFVEhfQUxFTl07Cit9OworCisvKiBUaGlzIHZlcnNpb24gYXV0b2NvbmZpZ3VyZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhdCBydW4tdGltZS4KKyAqCisgKiBJdCBhbHNvIEFTU1VNRVMgYSBzZWxmLXBvd2VyZWQgZGV2aWNlLCB3aXRob3V0IHJlbW90ZSB3YWtldXAsCisgKiBhbHRob3VnaCByZW1vdGUgd2FrZXVwIHN1cHBvcnQgd291bGQgbWFrZSBzZW5zZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKkVQX0lOX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfT1VUX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfU1RBVFVTX05BTUU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhIHByb3RvY29sLWluY29tcGF0aWJsZSBkcml2ZXIhISAgRXZlciEhCisgKiBJbnN0ZWFkOiAgYWxsb2NhdGUgeW91ciBvd24sIHVzaW5nIG5vcm1hbCBVU0ItSUYgcHJvY2VkdXJlcy4KKyAqLworCisvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqIEl0J3MgZm9yIGRldmljZXMgd2l0aCBvbmx5IENEQyBFdGhlcm5ldCBjb25maWd1cmF0aW9ucy4KKyAqLworI2RlZmluZSBDRENfVkVORE9SX05VTQkweDA1MjUJCS8qIE5ldENoaXAgKi8KKyNkZWZpbmUgQ0RDX1BST0RVQ1RfTlVNCTB4YTRhMQkJLyogTGludXgtVVNCIEV0aGVybmV0IEdhZGdldCAqLworCisvKiBGb3IgaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrIENEQywgd2UgdXNlIHRoZSBzYW1lIHZlbmRvciBJRCB0aGF0CisgKiBBUk0gTGludXggaGFzIHVzZWQgZm9yIGV0aGVybmV0LW92ZXItdXNiLCBib3RoIHdpdGggc2ExMTAwIGFuZAorICogd2l0aCBweGEyNTAuICBXZSdyZSBwcm90b2NvbC1jb21wYXRpYmxlLCBpZiB0aGUgaG9zdC1zaWRlIGRyaXZlcnMKKyAqIHVzZSB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMuICBiY2REZXZpY2UgKHZlcnNpb24pIGlzIG5vbnplcm8sIHNvCisgKiBkcml2ZXJzIHRoYXQgbmVlZCB0byBoYXJkLXdpcmUgZW5kcG9pbnQgbnVtYmVycyBoYXZlIGEgaG9vay4KKyAqCisgKiBUaGUgcHJvdG9jb2wgaXMgYSBtaW5pbWFsIHN1YnNldCBvZiBDREMgRXRoZXIsIHdoaWNoIHdvcmtzIG9uIGFueSBidWxrCisgKiBoYXJkd2FyZSB0aGF0J3Mgbm90IGRlZXBseSBicm9rZW4gLi4uIGV2ZW4gb24gaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrCisgKiBSTkRJUyAobGlrZSBTQS0xMTAwLCB3aXRoIG5vIGludGVycnVwdCBlbmRwb2ludCwgb3IgYW55dGhpbmcgdGhhdAorICogZG9lc24ndCBoYW5kbGUgY29udHJvbC1PVVQpLgorICovCisjZGVmaW5lCVNJTVBMRV9WRU5ET1JfTlVNCTB4MDQ5ZgorI2RlZmluZQlTSU1QTEVfUFJPRFVDVF9OVU0JMHg1MDVhCisKKy8qIEZvciBoYXJkd2FyZSB0aGF0IGNhbiB0YWxrIFJORElTIGFuZCBlaXRoZXIgb2YgdGhlIGFib3ZlIHByb3RvY29scywKKyAqIHVzZSB0aGlzIElEIC4uLiB0aGUgd2luZG93cyBJTkYgZmlsZXMgd2lsbCBrbm93IGl0LiAgVW5sZXNzIGl0J3MKKyAqIHVzZWQgd2l0aCBDREMgRXRoZXJuZXQsIExpbnV4IDIuNCBob3N0cyB3aWxsIG5lZWQgdXBkYXRlcyB0byBjaG9vc2UKKyAqIHRoZSBub24tUk5ESVMgY29uZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBSTkRJU19WRU5ET1JfTlVNCTB4MDUyNQkvKiBOZXRDaGlwICovCisjZGVmaW5lIFJORElTX1BST0RVQ1RfTlVNCTB4YTRhMgkvKiBFdGhlcm5ldC9STkRJUyBHYWRnZXQgKi8KKworCisvKiBTb21lIHN5c3RlbXMgd2lsbCB3YW50IGRpZmZlcmVudCBwcm9kdWN0IGlkZW50aWZlcnMgcHVibGlzaGVkIGluIHRoZQorICogZGV2aWNlIGRlc2NyaXB0b3IsIGVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3Mgb3IgYm90aC4gIFRoZXNlIHN0cmluZworICogcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCisgKi8KKworc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGlkVmVuZG9yOworbW9kdWxlX3BhcmFtKGlkVmVuZG9yLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpZFZlbmRvciwgIlVTQiBWZW5kb3IgSUQiKTsKKworc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGlkUHJvZHVjdDsKK21vZHVsZV9wYXJhbShpZFByb2R1Y3QsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlkUHJvZHVjdCwgIlVTQiBQcm9kdWN0IElEIik7CisKK3N0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBiY2REZXZpY2U7Cittb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKKworc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK21vZHVsZV9wYXJhbShpTWFudWZhY3R1cmVyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlNYW51ZmFjdHVyZXIsICJVU0IgTWFudWZhY3R1cmVyIHN0cmluZyIpOworCitzdGF0aWMgY2hhciAqX19pbml0ZGF0YSBpUHJvZHVjdDsKK21vZHVsZV9wYXJhbShpUHJvZHVjdCwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpUHJvZHVjdCwgIlVTQiBQcm9kdWN0IHN0cmluZyIpOworCisvKiBpbml0aWFsIHZhbHVlLCBjaGFuZ2VkIGJ5ICJpZmNvbmZpZyB1c2IwIGh3IGV0aGVyIHh4Onh4Onh4Onh4Onh4Onh4IiAqLworc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgZGV2X2FkZHI7Cittb2R1bGVfcGFyYW0oZGV2X2FkZHIsIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZGV2X2FkZHIsICJEZXZpY2UgRXRoZXJuZXQgQWRkcmVzcyIpOworCisvKiB0aGlzIGFkZHJlc3MgaXMgaW52aXNpYmxlIHRvIGlmY29uZmlnICovCitzdGF0aWMgY2hhciAqX19pbml0ZGF0YSBob3N0X2FkZHI7Cittb2R1bGVfcGFyYW0oaG9zdF9hZGRyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGhvc3RfYWRkciwgIkhvc3QgRXRoZXJuZXQgQWRkcmVzcyIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEluY2x1ZGUgQ0RDIHN1cHBvcnQgaWYgd2UgY291bGQgcnVuIG9uIENEQy1jYXBhYmxlIGhhcmR3YXJlLiAqLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MAorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QKKyNkZWZpbmUJREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfR09LVQorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYCisjZGVmaW5lIERFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01RMTFYWAorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9PTUFQCisjZGVmaW5lCURFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX045NjA0CisjZGVmaW5lCURFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WAorI2RlZmluZSBERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9BVDkxCisjZGVmaW5lIERFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworCisvKiBGb3IgQ0RDLWluY2FwYWJsZSBoYXJkd2FyZSwgY2hvb3NlIHRoZSBzaW1wbGUgY2RjIHN1YnNldC4KKyAqIEFueXRoaW5nIHRoYXQgdGFsa3MgYnVsayAod2l0aG91dCBub3RhYmxlIGJ1Z3MpIGNhbiBkbyB0aGlzLgorICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYCisjZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NICisjZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NBMTEwMAorLyogdXNlIG5vbi1DREMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAKKyNkZWZpbmUgREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiAibWFpbiIgY29uZmlnIGlzIGVpdGhlciBDREMsIG9yIGl0cyBzaW1wbGUgc3Vic2V0ICovCitzdGF0aWMgaW5saW5lIGludCBpc19jZGMoc3RydWN0IGV0aF9kZXYgKmRldikKK3sKKyNpZgkhZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkKKwlyZXR1cm4gMTsJCS8qIG9ubHkgY2RjIHBvc3NpYmxlICovCisjZWxpZgkhZGVmaW5lZCAoREVWX0NPTkZJR19DREMpCisJcmV0dXJuIDA7CQkvKiBvbmx5IHN1YnNldCBwb3NzaWJsZSAqLworI2Vsc2UKKwlyZXR1cm4gZGV2LT5jZGM7CS8qIGRlcGVuZHMgb24gd2hhdCBoYXJkd2FyZSB3ZSBmb3VuZCAqLworI2VuZGlmCit9CisKKy8qICJzZWNvbmRhcnkiIFJORElTIGNvbmZpZyBtYXkgc29tZXRpbWVzIGJlIGFjdGl2YXRlZCAqLworc3RhdGljIGlubGluZSBpbnQgcm5kaXNfYWN0aXZlKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlyZXR1cm4gZGV2LT5ybmRpczsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworI2RlZmluZQlzdWJzZXRfYWN0aXZlKGRldikJKCFpc19jZGMoZGV2KSAmJiAhcm5kaXNfYWN0aXZlKGRldikpCisjZGVmaW5lCWNkY19hY3RpdmUoZGV2KQkJKCBpc19jZGMoZGV2KSAmJiAhcm5kaXNfYWN0aXZlKGRldikpCisKKworCisjZGVmaW5lIERFRkFVTFRfUUxFTgkyCS8qIGRvdWJsZSBidWZmZXJpbmcgYnkgZGVmYXVsdCAqLworCisvKiBwZWFrIGJ1bGsgdHJhbnNmZXIgYml0cy1wZXItc2Vjb25kICovCisjZGVmaW5lCUhTX0JQUyAJCSgxMyAqIDUxMiAqIDggKiAxMDAwICogOCkKKyNkZWZpbmUJRlNfQlBTCQkoMTkgKiAgNjQgKiAxICogMTAwMCAqIDgpCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKworc3RhdGljIHVuc2lnbmVkIHFtdWx0ID0gNTsKK21vZHVsZV9wYXJhbSAocW11bHQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CisKKworLyogZm9yIGR1YWwtc3BlZWQgaGFyZHdhcmUsIHVzZSBkZWVwZXIgcXVldWVzIGF0IGhpZ2hzcGVlZCAqLworI2RlZmluZSBxbGVuKGdhZGdldCkgXAorCShERUZBVUxUX1FMRU4qKChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IHFtdWx0IDogMSkpCisKKy8qIGFsc28gZGVmZXIgSVJRcyBvbiBoaWdoc3BlZWQgVFggKi8KKyNkZWZpbmUgVFhfREVMQVkJcW11bHQKKworI2RlZmluZQlCSVRSQVRFKGcpCSgoKGcpLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyBIU19CUFMgOiBGU19CUFMpCisKKyNlbHNlCS8qIGZ1bGwgc3BlZWQgKGxvdyBzcGVlZCBkb2Vzbid0IGRvIGJ1bGspICovCisjZGVmaW5lIHFsZW4oZ2FkZ2V0KSBERUZBVUxUX1FMRU4KKworI2RlZmluZQlCSVRSQVRFKGcpCUZTX0JQUworI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSB4cHJpbnRrKGQsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKKwlwcmludGsobGV2ZWwgIiVzOiAiIGZtdCAsIChkKS0+bmV0LT5uYW1lICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjdW5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREVCVUcJREVCVUcKKyNlbHNlCisjZGVmaW5lIFZERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0IgRFJJVkVSIEhPT0tVUCAodG8gdGhlIGhhcmR3YXJlIGRyaXZlciwgYmVsb3cgdXMpLCBtb3N0bHkKKyAqIGVwMCBpbXBsZW1lbnRhdGlvbjogIGRlc2NyaXB0b3JzLCBjb25maWcgbWFuYWdlbWVudCwgc2V0dXAoKS4KKyAqIGFsc28gb3B0aW9uYWwgY2xhc3Mtc3BlY2lmaWMgbm90aWZpY2F0aW9uIGludGVycnVwdCB0cmFuc2Zlci4KKyAqLworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKSBjb25maWd1cmF0aW9uCisgKiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLiAgRm9yIG5vdyB3ZSBkbyBlaXRoZXIgZnVsbCBDREMsIG9yCisgKiBvdXIgc2ltcGxlIHN1YnNldCwgd2l0aCBSTkRJUyBhcyBhbiBvcHRpb25hbCBzZWNvbmQgY29uZmlndXJhdGlvbi4KKyAqCisgKiBSTkRJUyBpbmNsdWRlcyBzb21lIENEQyBBQ00gZGVzY3JpcHRvcnMgLi4uIGxpa2UgQ0RDIEV0aGVybmV0LiAgQnV0CisgKiB0aGUgY2xhc3MgZGVzY3JpcHRvcnMgbWF0Y2ggYSBtb2RlbSAodGhleSdyZSBpZ25vcmVkOyBpdCdzIHJlYWxseSBqdXN0CisgKiBFdGhlcm5ldCBmdW5jdGlvbmFsaXR5KSwgdGhleSBkb24ndCBuZWVkIHRoZSBOT1AgYWx0c2V0dGluZywgYW5kIHRoZQorICogc3RhdHVzIHRyYW5zZmVyIGVuZHBvaW50IGlzbid0IG9wdGlvbmFsLgorICovCisKKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkJMQorI2RlZmluZSBTVFJJTkdfUFJPRFVDVAkJCTIKKyNkZWZpbmUgU1RSSU5HX0VUSEFERFIJCQkzCisjZGVmaW5lIFNUUklOR19EQVRBCQkJNAorI2RlZmluZSBTVFJJTkdfQ09OVFJPTAkJCTUKKyNkZWZpbmUgU1RSSU5HX1JORElTX0NPTlRST0wJCTYKKyNkZWZpbmUgU1RSSU5HX0NEQwkJCTcKKyNkZWZpbmUgU1RSSU5HX1NVQlNFVAkJCTgKKyNkZWZpbmUgU1RSSU5HX1JORElTCQkJOQorCisjZGVmaW5lIFVTQl9CVUZTSVoJMjU2CQkvKiBob2xkcyBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCisKKy8qCisgKiBUaGlzIGRldmljZSBhZHZlcnRpc2VzIG9uZSBjb25maWd1cmF0aW9uLCBldGhfY29uZmlnLCB1bmxlc3MgUk5ESVMKKyAqIGlzIGVuYWJsZWQgKHJuZGlzX2NvbmZpZykgb24gaGFyZHdhcmUgc3VwcG9ydGluZyBhdCBsZWFzdCB0d28gY29uZmlncy4KKyAqCisgKiBOT1RFOiAgQ29udHJvbGxlcnMgbGlrZSBzdXBlcmhfdWRjIHNob3VsZCBwcm9iYWJseSBiZSBhYmxlIHRvIHVzZQorICogYW4gUk5ESVMtb25seSBjb25maWd1cmF0aW9uLgorICoKKyAqIEZJWE1FIGRlZmluZSBzb21lIGhpZ2hlci1wb3dlcmVkIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2UgaXQgZWFzaWVyCisgKiB0byByZWNoYXJnZSBiYXR0ZXJpZXMgLi4uCisgKi8KKworI2RlZmluZSBERVZfQ09ORklHX1ZBTFVFCTEJLyogY2RjIG9yIHN1YnNldCAqLworI2RlZmluZSBERVZfUk5ESVNfQ09ORklHX1ZBTFVFCTIJLyogcm5kaXM7IG9wdGlvbmFsICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCitkZXZpY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCisKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAorCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAorCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCisJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAorCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yCitvdGdfZGVzY3JpcHRvciA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygb3RnX2Rlc2NyaXB0b3IsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9PVEcsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IKK2V0aF9jb25maWcgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGV0aF9jb25maWcsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisKKwkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0JMiwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CURFVl9DT05GSUdfVkFMVUUsCisJLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0NEQywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0JCTUwLAorfTsKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAKK3JuZGlzX2NvbmZpZyA9IHsKKwkuYkxlbmd0aCA9ICAgICAgICAgICAgICBzaXplb2Ygcm5kaXNfY29uZmlnLAorCS5iRGVzY3JpcHRvclR5cGUgPSAgICAgIFVTQl9EVF9DT05GSUcsCisKKwkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0gICAgICAgMiwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9ICBERVZfUk5ESVNfQ09ORklHX1ZBTFVFLAorCS5pQ29uZmlndXJhdGlvbiA9ICAgICAgIFNUUklOR19STkRJUywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0gICAgICAgICAgICA1MCwKK307CisjZW5kaWYKKworLyoKKyAqIENvbXBhcmVkIHRvIHRoZSBzaW1wbGUgQ0RDIHN1YnNldCwgdGhlIGZ1bGwgQ0RDIEV0aGVybmV0IG1vZGVsIGFkZHMKKyAqIHRocmVlIGNsYXNzIGRlc2NyaXB0b3JzLCB0d28gaW50ZXJmYWNlIGRlc2NyaXB0b3JzLCBvcHRpb25hbCBzdGF0dXMKKyAqIGVuZHBvaW50LiAgQm90aCBoYXZlIGEgImRhdGEiIGludGVyZmFjZSBhbmQgdHdvIGJ1bGsgZW5kcG9pbnRzLgorICogVGhlcmUgYXJlIGFsc28gZGlmZmVyZW5jZXMgaW4gaG93IGNvbnRyb2wgcmVxdWVzdHMgYXJlIGhhbmRsZWQuCisgKgorICogUk5ESVMgc2hhcmVzIGEgbG90IHdpdGggQ0RDLUV0aGVybmV0LCBzaW5jZSBpdCdzIGEgdmFyaWFudCBvZgorICogdGhlIENEQy1BQ00gKG1vZGVtKSBzcGVjLgorICovCisKKyNpZmRlZglERVZfQ09ORklHX0NEQworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK2NvbnRyb2xfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgY29udHJvbF9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkwLAorCS8qIHN0YXR1cyBlbmRwb2ludCBpcyBvcHRpb25hbDsgdGhpcyBtYXkgYmUgcGF0Y2hlZCBsYXRlciAqLworCS5iTnVtRW5kcG9pbnRzID0JMSwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfUFJPVE9fTk9ORSwKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfQ09OVFJPTCwKK307CisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorcm5kaXNfY29udHJvbF9pbnRmID0geworCS5iTGVuZ3RoID0gICAgICAgICAgICAgIHNpemVvZiBybmRpc19jb250cm9sX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9ICAgICAgVVNCX0RUX0lOVEVSRkFDRSwKKwkgIAorCS5iSW50ZXJmYWNlTnVtYmVyID0gICAgIDAsCisJLmJOdW1FbmRwb2ludHMgPSAgICAgICAgMSwKKwkuYkludGVyZmFjZUNsYXNzID0gICAgICBVU0JfQ0xBU1NfQ09NTSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gICBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkuYkludGVyZmFjZVByb3RvY29sID0gICBVU0JfQ0RDX0FDTV9QUk9UT19WRU5ET1IsCisJLmlJbnRlcmZhY2UgPSAgICAgICAgICAgU1RSSU5HX1JORElTX0NPTlRST0wsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERFVl9DT05GSUdfQ0RDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgaGVhZGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGhlYWRlcl9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAorCisJLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAxMTApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgdW5pb25fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgdW5pb25fZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19VTklPTl9UWVBFLAorCisJLmJNYXN0ZXJJbnRlcmZhY2UwID0JMCwJLyogaW5kZXggb2YgY29udHJvbCBpbnRlcmZhY2UgKi8KKwkuYlNsYXZlSW50ZXJmYWNlMCA9CTEsCS8qIGluZGV4IG9mIERBVEEgaW50ZXJmYWNlICovCit9OworCisjZW5kaWYJLyogQ0RDIHx8IFJORElTICovCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgY2FsbF9tZ210X2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPSAgCQlzaXplb2YgY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJLmJEZXNjcmlwdG9yVHlwZSA9IAlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPSAJVVNCX0NEQ19DQUxMX01BTkFHRU1FTlRfVFlQRSwKKworCS5ibUNhcGFiaWxpdGllcyA9IAkweDAwLAorCS5iRGF0YUludGVyZmFjZSA9IAkweDAxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2FjbV9kZXNjcmlwdG9yIGFjbV9kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0gIAkJc2l6ZW9mIGFjbV9kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQUNNX1RZUEUsCisKKwkuYm1DYXBhYmlsaXRpZXMgPSAJMHgwMCwKK307CisKKyNlbmRpZgorCisjaWZkZWYJREVWX0NPTkZJR19DREMKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZXRoZXJfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19FVEhFUk5FVF9UWVBFLAorCisJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLworCS5pTUFDQWRkcmVzcyA9CQlTVFJJTkdfRVRIQUREUiwKKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDApLAorCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKworLyogaW5jbHVkZSB0aGUgc3RhdHVzIGVuZHBvaW50IGlmIHdlIGNhbiwgZXZlbiB3aGVyZSBpdCdzIG9wdGlvbmFsLgorICogdXNlIHdNYXhQYWNrZXRTaXplIGJpZyBlbm91Z2ggdG8gZml0IENEQ19OT1RJRllfU1BFRURfQ0hBTkdFIGluIG9uZQorICogcGFja2V0LCB0byBzaW1wbGlmeSBjYW5jZWxhdGlvbjsgYW5kIGEgYmlnIHRyYW5zZmVyIGludGVydmFsLCB0bworICogd2FzdGUgbGVzcyBiYW5kd2lkdGguCisgKgorICogc29tZSBkcml2ZXJzIChsaWtlIExpbnV4IDIuNCBjZGMtZXRoZXIhKSAibmVlZCIgaXQgdG8gZXhpc3QgZXZlbgorICogaWYgdGhleSBpZ25vcmUgdGhlIGNvbm5lY3QvZGlzY29ubmVjdCBub3RpZmljYXRpb25zIHRoYXQgcmVhbCBhZXRoZXIKKyAqIGNhbiBwcm92aWRlLiAgbW9yZSBhZHZhbmNlZCBjZGMgY29uZmlndXJhdGlvbnMgbWlnaHQgd2FudCB0byBzdXBwb3J0CisgKiBlbmNhcHN1bGF0ZWQgY29tbWFuZHMgKHZlbmRvci1zcGVjaWZpYywgdXNpbmcgY29udHJvbC1PVVQpLgorICoKKyAqIFJORElTIHJlcXVpcmVzIHRoZSBzdGF0dXMgZW5kcG9pbnQsIHNpbmNlIGl0IHVzZXMgdGhhdCBlbmNhcHN1bGF0aW9uCisgKiBtZWNoYW5pc20gZm9yIGl0cyBmdW5reSBSUEMgc2NoZW1lLgorICovCisgCisjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLworI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQkxNgkvKiA4IGJ5dGUgaGVhZGVyICsgZGF0YSAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19zdGF0dXNfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKFNUQVRVU19CWVRFQ09VTlQpLAorCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAorfTsKKyNlbmRpZgorCisjaWZkZWYJREVWX0NPTkZJR19DREMKKworLyogdGhlIGRlZmF1bHQgZGF0YSBpbnRlcmZhY2UgaGFzIG5vIGVuZHBvaW50cyAuLi4gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK2RhdGFfbm9wX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRhdGFfbm9wX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYkludGVyZmFjZU51bWJlciA9CTEsCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMCwKKwkuYk51bUVuZHBvaW50cyA9CTAsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKK307CisKKy8qIC4uLiBidXQgdGhlICJyZWFsIiBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGJ1bGsgZW5kcG9pbnRzICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitkYXRhX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRhdGFfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iSW50ZXJmYWNlTnVtYmVyID0JMSwKKwkuYkFsdGVybmF0ZVNldHRpbmcgPQkxLAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorCS5pSW50ZXJmYWNlID0JCVNUUklOR19EQVRBLAorfTsKKworI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCisvKiBSTkRJUyBkb2Vzbid0IGFjdGl2YXRlIGJ5IGNoYW5naW5nIHRvIHRoZSAicmVhbCIgYWx0c2V0dGluZyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorcm5kaXNfZGF0YV9pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBybmRpc19kYXRhX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYkludGVyZmFjZU51bWJlciA9CTEsCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMCwKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfREFUQSwKK307CisKKyNlbmRpZgorCisjaWZkZWYgREVWX0NPTkZJR19TVUJTRVQKKworLyoKKyAqICJTaW1wbGUiIENEQy1zdWJzZXQgb3B0aW9uIGlzIGEgc2ltcGxlIHZlbmRvci1uZXV0cmFsIG1vZGVsIHRoYXQgbW9zdAorICogZnVsbCBzcGVlZCBjb250cm9sbGVycyBjYW4gaGFuZGxlOiAgb25lIGludGVyZmFjZSwgdHdvIGJ1bGsgZW5kcG9pbnRzLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitzdWJzZXRfZGF0YV9pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBzdWJzZXRfZGF0YV9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkwLAorCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0RBVEEsCit9OworCisjZW5kaWYJLyogU1VCU0VUICovCisKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc291cmNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19zaW5rX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2V0aF9mdW5jdGlvbiBbMTFdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKyNpZmRlZiBERVZfQ09ORklHX0NEQworCS8qICJjZGMiIG1vZGUgZGVzY3JpcHRvcnMgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkvKiBOT1RFOiBzdGF0dXMgZW5kcG9pbnQgbWF5IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zdGF0dXNfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSwgd2l0aCBhbHRzZXR0aW5nICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmRhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmRhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwlOVUxMLAorI2VuZGlmIC8qIERFVl9DT05GSUdfQ0RDICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGZzX3N1YnNldF9kZXNjcmlwdG9ycyh2b2lkKQoreworI2lmZGVmIERFVl9DT05GSUdfU1VCU0VUCisJZnNfZXRoX2Z1bmN0aW9uWzFdID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnN1YnNldF9kYXRhX2ludGY7CisJZnNfZXRoX2Z1bmN0aW9uWzJdID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NvdXJjZV9kZXNjOworCWZzX2V0aF9mdW5jdGlvblszXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zaW5rX2Rlc2M7CisJZnNfZXRoX2Z1bmN0aW9uWzRdID0gTlVMTDsKKyNlbHNlCisJZnNfZXRoX2Z1bmN0aW9uWzFdID0gTlVMTDsKKyNlbmRpZgorfQorCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19ybmRpc19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJLyogY29udHJvbCBpbnRlcmZhY2UgbWF0Y2hlcyBBQ00sIG5vdCBFdGhlcm5ldCAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZjYWxsX21nbXRfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnVuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3N0YXR1c19kZXNjLAorCS8qIGRhdGEgaW50ZXJmYWNlIGhhcyBubyBhbHRzZXR0aW5nICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnJuZGlzX2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwlOVUxMLAorfTsKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisKKy8qCisgKiB1c2IgMi4wIGRldmljZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCisgKiBkZXNjcmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KKyAqLworCisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX3N0YXR1c19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChTVEFUVVNfQllURUNPVU5UKSwKKwkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAorfTsKKyNlbmRpZiAvKiBERVZfQ09ORklHX0NEQyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19zb3VyY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19zaW5rX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICg1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IKK2Rldl9xdWFsaWZpZXIgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCisKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb24gWzExXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkvKiAiY2RjIiBtb2RlIGRlc2NyaXB0b3JzICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnVuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmV0aGVyX2Rlc2MsCisJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1heSBuZWVkIHRvIGJlIHJlbW92ZWQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3RhdHVzX2Rlc2MsCisJLyogZGF0YSBpbnRlcmZhY2UsIHdpdGggYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKKyNlbmRpZiAvKiBERVZfQ09ORklHX0NEQyAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoc19zdWJzZXRfZGVzY3JpcHRvcnModm9pZCkKK3sKKyNpZmRlZiBERVZfQ09ORklHX1NVQlNFVAorCWhzX2V0aF9mdW5jdGlvblsxXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmOworCWhzX2V0aF9mdW5jdGlvblsyXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYzsKKwloc19ldGhfZnVuY3Rpb25bM10gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjOworCWhzX2V0aF9mdW5jdGlvbls0XSA9IE5VTEw7CisjZWxzZQorCWhzX2V0aF9mdW5jdGlvblsxXSA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfcm5kaXNfZnVuY3Rpb24gW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAorCS8qIGNvbnRyb2wgaW50ZXJmYWNlIG1hdGNoZXMgQUNNLCBub3QgRXRoZXJuZXQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZ1bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zdGF0dXNfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSBoYXMgbm8gYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisjZW5kaWYKKworCisvKiBtYXhwYWNrZXQgYW5kIG90aGVyIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcyB2YXJ5IGJ5IHNwZWVkLiAqLworI2RlZmluZSBlcF9kZXNjKGcsaHMsZnMpICgoKGcpLT5zcGVlZD09VVNCX1NQRUVEX0hJR0gpPyhocyk6KGZzKSkKKworI2Vsc2UKKworLyogaWYgdGhlcmUncyBubyBoaWdoIHNwZWVkIHN1cHBvcnQsIG1heHBhY2tldCBkb2Vzbid0IGNoYW5nZS4gKi8KKyNkZWZpbmUgZXBfZGVzYyhnLGhzLGZzKSBmcworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGhzX3N1YnNldF9kZXNjcmlwdG9ycyh2b2lkKQoreworfQorCisjZW5kaWYJLyogIUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkZXNjcmlwdG9ycyB0aGF0IGFyZSBidWlsdCBvbi1kZW1hbmQgKi8KKworc3RhdGljIGNoYXIJCQkJbWFudWZhY3R1cmVyIFs1MF07CitzdGF0aWMgY2hhcgkJCQlwcm9kdWN0X2Rlc2MgWzQwXSA9IERSSVZFUl9ERVNDOworCisjaWZkZWYJREVWX0NPTkZJR19DREMKKy8qIGFkZHJlc3MgdGhhdCB0aGUgaG9zdCB3aWxsIHVzZSAuLi4gdXN1YWxseSBhc3NpZ25lZCBhdCByYW5kb20gKi8KK3N0YXRpYyBjaGFyCQkJCWV0aGFkZHIgWzIgKiBFVEhfQUxFTiArIDFdOworI2VuZGlmCisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nCQlzdHJpbmdzIFtdID0geworCXsgU1RSSU5HX01BTlVGQUNUVVJFUiwJbWFudWZhY3R1cmVyLCB9LAorCXsgU1RSSU5HX1BST0RVQ1QsCXByb2R1Y3RfZGVzYywgfSwKKwl7IFNUUklOR19EQVRBLAkJIkV0aGVybmV0IERhdGEiLCB9LAorI2lmZGVmCURFVl9DT05GSUdfQ0RDCisJeyBTVFJJTkdfQ0RDLAkJIkNEQyBFdGhlcm5ldCIsIH0sCisJeyBTVFJJTkdfRVRIQUREUiwJZXRoYWRkciwgfSwKKwl7IFNUUklOR19DT05UUk9MLAkiQ0RDIENvbW11bmljYXRpb25zIENvbnRyb2wiLCB9LAorI2VuZGlmCisjaWZkZWYJREVWX0NPTkZJR19TVUJTRVQKKwl7IFNUUklOR19TVUJTRVQsCSJDREMgRXRoZXJuZXQgU3Vic2V0IiwgfSwKKyNlbmRpZgorI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJeyBTVFJJTkdfUk5ESVMsCQkiUk5ESVMiLCB9LAorCXsgU1RSSU5HX1JORElTX0NPTlRST0wsCSJSTkRJUyBDb21tdW5pY2F0aW9ucyBDb250cm9sIiwgfSwKKyNlbmRpZgorCXsgIH0JCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwlzdHJpbmd0YWIgPSB7CisJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzCT0gc3RyaW5ncywKK307CisKKy8qCisgKiBvbmUgY29uZmlnLCB0d28gaW50ZXJmYWNlczogIGNvbnRyb2wsIGRhdGEuCisgKiBjb21wbGljYXRpb25zOiBjbGFzcyBkZXNjcmlwdG9ycywgYW5kIGFuIGFsdHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbnQKK2NvbmZpZ19idWYgKGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCwKKwl1OCAqYnVmLCB1OCB0eXBlLAorCXVuc2lnbmVkIGluZGV4LCBpbnQgaXNfb3RnKQoreworCWludAkJCQkJbGVuOworCWNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyCSoqZnVuY3Rpb247CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJaW50CQkJCWhzID0gKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKTsKKworCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCisJCWhzID0gIWhzOworI2RlZmluZSB3aGljaF9mbih0KQkoaHMgPyBoc18gIyMgdCAjIyBfZnVuY3Rpb24gOiBmc18gIyMgdCAjIyBfZnVuY3Rpb24pCisjZWxzZQorI2RlZmluZQl3aGljaF9mbih0KQkoZnNfICMjIHQgIyMgX2Z1bmN0aW9uKQorI2VuZGlmCisKKwlpZiAoaW5kZXggPj0gZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJLyogbGlzdCB0aGUgUk5ESVMgY29uZmlnIGZpcnN0LCB0byBtYWtlIE1pY3Jvc29mdCdzIGRyaXZlcnMKKwkgKiBoYXBweS4gRE9DU0lTIDEuMCBuZWVkcyB0aGlzIHRvby4KKwkgKi8KKwlpZiAoZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zID09IDIgJiYgaW5kZXggPT0gMCkgeworCQljb25maWcgPSAmcm5kaXNfY29uZmlnOworCQlmdW5jdGlvbiA9IHdoaWNoX2ZuIChybmRpcyk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWNvbmZpZyA9ICZldGhfY29uZmlnOworCQlmdW5jdGlvbiA9IHdoaWNoX2ZuIChldGgpOworCX0KKworCS8qIGZvciBub3csIGRvbid0IGFkdmVydGlzZSBzcnAtb25seSBkZXZpY2VzICovCisJaWYgKCFpc19vdGcpCisJCWZ1bmN0aW9uKys7CisKKwlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYgKGNvbmZpZywgYnVmLCBVU0JfQlVGU0laLCBmdW5jdGlvbik7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiBsZW47CisJKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopIGJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7CisJcmV0dXJuIGxlbjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZXRoX3N0YXJ0IChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKTsKK3N0YXRpYyBpbnQgYWxsb2NfcmVxdWVzdHMgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHVuc2lnbmVkIG4sIGludCBnZnBfZmxhZ3MpOworCisjaWZkZWYJREVWX0NPTkZJR19DREMKK3N0YXRpYyBpbmxpbmUgaW50IGV0aGVyX2FsdF9lcF9zZXR1cCAoc3RydWN0IGV0aF9kZXYgKmRldiwgc3RydWN0IHVzYl9lcCAqZXApCit7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJLyogV2l0aCBDREMsICB0aGUgaG9zdCBpc24ndCBhbGxvd2VkIHRvIHVzZSB0aGVzZSB0d28gZGF0YQorCSAqIGVuZHBvaW50cyBpbiB0aGUgZGVmYXVsdCBhbHRzZXR0aW5nIGZvciB0aGUgaW50ZXJmYWNlLgorCSAqIHNvIHdlIGRvbid0IGFjdGl2YXRlIHRoZW0geWV0LiAgUmVzZXQgZnJvbSBTRVRfSU5URVJGQUNFLgorCSAqCisJICogU3RyaWN0bHkgc3BlYWtpbmcgUk5ESVMgc2hvdWxkIHdvcmsgdGhlIHNhbWU6IGFjdGl2YXRpb24gaXMKKwkgKiBhIHNpZGUgZWZmZWN0IG9mIHNldHRpbmcgYSBwYWNrZXQgZmlsdGVyLiAgRGVhY3RpdmF0aW9uIGlzCisJICogZnJvbSBSRU1PVEVfTkRJU19IQUxUX01TRywgcmVzZXQgZnJvbSBSRU1PVEVfTkRJU19SRVNFVF9NU0cuCisJICovCisKKwkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLworCWlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9JTl9OQU1FKSA9PSAwKSB7CisJCWQgPSBlcF9kZXNjIChkZXYtPmdhZGdldCwgJmhzX3NvdXJjZV9kZXNjLCAmZnNfc291cmNlX2Rlc2MpOworCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCWRldi0+aW4gPSBkOworCisJLyogb25lIGVuZHBvaW50IGp1c3QgcmVhZHMgT1VUIHBhY2tldHMgKi8KKwl9IGVsc2UgaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7CisJCWQgPSBlcF9kZXNjIChkZXYtPmdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJZGV2LT5vdXQgPSBkOworCisJLyogb3B0aW9uYWwgc3RhdHVzL25vdGlmaWNhdGlvbiBlbmRwb2ludCAqLworCX0gZWxzZSBpZiAoRVBfU1RBVFVTX05BTUUgJiYKKwkJCXN0cmNtcCAoZXAtPm5hbWUsIEVQX1NUQVRVU19OQU1FKSA9PSAwKSB7CisJCWludAkJCXJlc3VsdDsKKworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zdGF0dXNfZGVzYywgJmZzX3N0YXR1c19kZXNjKTsKKwkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQlkZXYtPnN0YXR1cyA9IGQ7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZglkZWZpbmVkKERFVl9DT05GSUdfU1VCU0VUKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQorc3RhdGljIGlubGluZSBpbnQgZXRoZXJfZXBfc2V0dXAgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWludAkJCQkJcmVzdWx0OworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCS8qIENEQyBzdWJzZXQgaXMgc2ltcGxlcjogIGlmIHRoZSBkZXZpY2UgaXMgdGhlcmUsCisJICogaXQncyBsaXZlIHdpdGggcnggYW5kIHR4IGVuZHBvaW50cy4KKwkgKgorCSAqIERvIHRoaXMgYXMgYSBzaG9ydGN1dCBmb3IgUk5ESVMgdG9vLgorCSAqLworCisJLyogb25lIGVuZHBvaW50IHdyaXRlcyBkYXRhIGJhY2sgSU4gdG8gdGhlIGhvc3QgKi8KKwlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgeworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQlkZXYtPmluID0gZDsKKworCS8qIG9uZSBlbmRwb2ludCBqdXN0IHJlYWRzIE9VVCBwYWNrZXRzICovCisJfSBlbHNlIGlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9PVVRfTkFNRSkgPT0gMCkgeworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOworCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCWRldi0+b3V0ID0gZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitzZXRfZXRoZXJfY29uZmlnIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWdhZGdldF9mb3JfZWFjaF9lcCAoZXAsIGdhZGdldCkgeworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisJCWlmICghZGV2LT5ybmRpcyAmJiBkZXYtPmNkYykgeworCQkJcmVzdWx0ID0gZXRoZXJfYWx0X2VwX3NldHVwIChkZXYsIGVwKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCQlpZiAoZGV2LT5ybmRpcyAmJiBzdHJjbXAgKGVwLT5uYW1lLCBFUF9TVEFUVVNfTkFNRSkgPT0gMCkgeworCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCQkJZCA9IGVwX2Rlc2MgKGdhZGdldCwgJmhzX3N0YXR1c19kZXNjLCAmZnNfc3RhdHVzX2Rlc2MpOworCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQkJCWRldi0+c3RhdHVzID0gZDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlCisjZW5kaWYKKworCQl7CisjaWYJZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwkJCXJlc3VsdCA9IGV0aGVyX2VwX3NldHVwIChkZXYsIGVwKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkKKwkJCQljb250aW51ZTsKKyNlbmRpZgorCQl9CisKKwkJLyogc3RvcCBvbiBlcnJvciAqLworCQlFUlJPUiAoZGV2LCAiY2FuJ3QgZW5hYmxlICVzLCByZXN1bHQgJWRcbiIsIGVwLT5uYW1lLCByZXN1bHQpOworCQlicmVhazsKKwl9CisJaWYgKCFyZXN1bHQgJiYgKCFkZXYtPmluX2VwIHx8ICFkZXYtPm91dF9lcCkpCisJCXJlc3VsdCA9IC1FTk9ERVY7CisKKwlpZiAocmVzdWx0ID09IDApCisJCXJlc3VsdCA9IGFsbG9jX3JlcXVlc3RzIChkZXYsIHFsZW4gKGdhZGdldCksIGdmcF9mbGFncyk7CisKKwkvKiBvbiBlcnJvciwgZGlzYWJsZSBhbnkgZW5kcG9pbnRzICAqLworCWlmIChyZXN1bHQgPCAwKSB7CisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwkJaWYgKGRldi0+c3RhdHVzKQorCQkJKHZvaWQpIHVzYl9lcF9kaXNhYmxlIChkZXYtPnN0YXR1c19lcCk7CisjZW5kaWYKKwkJZGV2LT5zdGF0dXMgPSBOVUxMOworI2lmIGRlZmluZWQoREVWX0NPTkZJR19TVUJTRVQpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJCWlmIChkZXYtPnJuZGlzIHx8ICFkZXYtPmNkYykgeworCQkJaWYgKGRldi0+aW4pCisJCQkJKHZvaWQpIHVzYl9lcF9kaXNhYmxlIChkZXYtPmluX2VwKTsKKwkJCWlmIChkZXYtPm91dCkKKwkJCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGRldi0+b3V0X2VwKTsKKwkJfQorI2VuZGlmCisJCWRldi0+aW4gPSBOVUxMOworCQlkZXYtPm91dCA9IE5VTEw7CisJfSBlbHNlCisKKwkvKiBhY3RpdmF0ZSBub24tQ0RDIGNvbmZpZ3MgcmlnaHQgYXdheQorCSAqIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgYWNjb3JkaW5nIHRvIHRoZSBSTkRJUyBzcGVjCisJICovCisjaWYgZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwlpZiAoZGV2LT5ybmRpcyB8fCAhZGV2LT5jZGMpIHsKKwkJbmV0aWZfY2Fycmllcl9vbiAoZGV2LT5uZXQpOworCQlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKSB7CisJCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCQlldGhfc3RhcnQgKGRldiwgR0ZQX0FUT01JQyk7CisJCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCQl9CisJfQorI2VuZGlmCisKKwlpZiAocmVzdWx0ID09IDApCisJCURFQlVHIChkZXYsICJxbGVuICVkXG4iLCBxbGVuIChnYWRnZXQpKTsKKworCS8qIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW51cCBvbiBlcnJvciAqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0aF9yZXNldF9jb25maWcgKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoZGV2LT5jb25maWcgPT0gMCkKKwkJcmV0dXJuOworCisJREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOworCW5ldGlmX2NhcnJpZXJfb2ZmIChkZXYtPm5ldCk7CisKKwkvKiBkaXNhYmxlIGVuZHBvaW50cywgZm9yY2luZyAoc3luY2hyb25vdXMpIGNvbXBsZXRpb24gb2YKKwkgKiBwZW5kaW5nIGkvby4gIHRoZW4gZnJlZSB0aGUgcmVxdWVzdHMuCisJICovCisJaWYgKGRldi0+aW4pIHsKKwkJdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOworCQl3aGlsZSAobGlrZWx5ICghbGlzdF9lbXB0eSAoJmRldi0+dHhfcmVxcykpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+dHhfcmVxcy5uZXh0LAorCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwkJCWxpc3RfZGVsICgmcmVxLT5saXN0KTsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGRldi0+aW5fZXAsIHJlcSk7CisJCX0KKwl9CisJaWYgKGRldi0+b3V0KSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7CisJCXdoaWxlIChsaWtlbHkgKCFsaXN0X2VtcHR5ICgmZGV2LT5yeF9yZXFzKSkpIHsKKwkJCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT5yeF9yZXFzLm5leHQsCisJCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCQkJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZGV2LT5vdXRfZXAsIHJlcSk7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5zdGF0dXMpIHsKKwkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKKwl9CisJZGV2LT5jb25maWcgPSAwOworfQorCisvKiBjaGFuZ2Ugb3VyIG9wZXJhdGlvbmFsIGNvbmZpZy4gIG11c3QgYWdyZWUgd2l0aCB0aGUgY29kZQorICogdGhhdCByZXR1cm5zIGNvbmZpZyBkZXNjcmlwdG9ycywgYW5kIGFsdHNldHRpbmcgY29kZS4KKyAqLworc3RhdGljIGludAorZXRoX3NldF9jb25maWcgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHVuc2lnbmVkIG51bWJlciwgaW50IGdmcF9mbGFncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWlmIChudW1iZXIgPT0gZGV2LT5jb25maWcpCisJCXJldHVybiAwOworCisJaWYgKGdhZGdldF9pc19zYTExMDAgKGdhZGdldCkKKwkJCSYmIGRldi0+Y29uZmlnCisJCQkmJiBhdG9taWNfcmVhZCAoJmRldi0+dHhfcWxlbikgIT0gMCkgeworCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCisJCUlORk8gKGRldiwgImNhbid0IGNoYW5nZSBjb25maWd1cmF0aW9uc1xuIik7CisJCXJldHVybiAtRVNQSVBFOworCX0KKwlldGhfcmVzZXRfY29uZmlnIChkZXYpOworCisJLyogZGVmYXVsdDogIHBhc3MgYWxsIHBhY2tldHMsIG5vIG11bHRpY2FzdCBmaWx0ZXJpbmcgKi8KKwlkZXYtPmNkY19maWx0ZXIgPSAweDAwMGY7CisKKwlzd2l0Y2ggKG51bWJlcikgeworCWNhc2UgREVWX0NPTkZJR19WQUxVRToKKwkJZGV2LT5ybmRpcyA9IDA7CisJCXJlc3VsdCA9IHNldF9ldGhlcl9jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwljYXNlIERFVl9STkRJU19DT05GSUdfVkFMVUU6CisJCWRldi0+cm5kaXMgPSAxOworCQlyZXN1bHQgPSBzZXRfZXRoZXJfY29uZmlnIChkZXYsIGdmcF9mbGFncyk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSAwOgorCQlicmVhazsKKwl9CisKKwlpZiAocmVzdWx0KSB7CisJCWlmIChudW1iZXIpCisJCQlldGhfcmVzZXRfY29uZmlnIChkZXYpOworCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtPmdhZGdldCwKKwkJCQlkZXYtPmdhZGdldC0+aXNfb3RnID8gOCA6IDEwMCk7CisJfSBlbHNlIHsKKwkJY2hhciAqc3BlZWQ7CisJCXVuc2lnbmVkIHBvd2VyOworCisJCXBvd2VyID0gMiAqIGV0aF9jb25maWcuYk1heFBvd2VyOworCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtPmdhZGdldCwgcG93ZXIpOworCisJCXN3aXRjaCAoZ2FkZ2V0LT5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsgYnJlYWs7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CXNwZWVkID0gImhpZ2giOyBicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOyBicmVhazsKKwkJfQorCisJCWRldi0+Y29uZmlnID0gbnVtYmVyOworCQlJTkZPIChkZXYsICIlcyBzcGVlZCBjb25maWcgIyVkOiAlZCBtQSwgJXMsIHVzaW5nICVzXG4iLAorCQkJCXNwZWVkLCBudW1iZXIsIHBvd2VyLCBkcml2ZXJfZGVzYywKKwkJCQlkZXYtPnJuZGlzCisJCQkJCT8gIlJORElTIgorCQkJCQk6IChkZXYtPmNkYworCQkJCQkJPyAiQ0RDIEV0aGVybmV0IgorCQkJCQkJOiAiQ0RDIEV0aGVybmV0IFN1YnNldCIpKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisKK3N0YXRpYyB2b2lkIGV0aF9zdGF0dXNfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24JKmV2ZW50ID0gcmVxLT5idWY7CisJaW50CQkJCXZhbHVlID0gcmVxLT5zdGF0dXM7CisJc3RydWN0IGV0aF9kZXYJCQkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCisJLyogaXNzdWUgdGhlIHNlY29uZCBub3RpZmljYXRpb24gaWYgaG9zdCByZWFkcyB0aGUgZmlyc3QgKi8KKwlpZiAoZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID09IFVTQl9DRENfTk9USUZZX05FVFdPUktfQ09OTkVDVElPTgorCQkJJiYgdmFsdWUgPT0gMCkgeworCQlfX2xlMzIJKmRhdGEgPSByZXEtPmJ1ZiArIHNpemVvZiAqZXZlbnQ7CisKKwkJZXZlbnQtPmJtUmVxdWVzdFR5cGUgPSAweEExOworCQlldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX05PVElGWV9TUEVFRF9DSEFOR0U7CisJCWV2ZW50LT53VmFsdWUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgwKTsKKwkJZXZlbnQtPndJbmRleCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDEpOworCQlldmVudC0+d0xlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDgpOworCisJCS8qIFNQRUVEX0NIQU5HRSBkYXRhIGlzIHVwL2Rvd24gc3BlZWRzIGluIGJpdHMvc2VjICovCisJCWRhdGEgWzBdID0gZGF0YSBbMV0gPSBjcHVfdG9fbGUzMiAoQklUUkFURSAoZGV2LT5nYWRnZXQpKTsKKworCQlyZXEtPmxlbmd0aCA9IFNUQVRVU19CWVRFQ09VTlQ7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJREVCVUcgKGRldiwgInNlbmQgU1BFRURfQ0hBTkdFIC0tPiAlZFxuIiwgdmFsdWUpOworCQlpZiAodmFsdWUgPT0gMCkKKwkJCXJldHVybjsKKwl9IGVsc2UgaWYgKHZhbHVlICE9IC1FQ09OTlJFU0VUKQorCQlERUJVRyAoZGV2LCAiZXZlbnQgJTAyeCAtLT4gJWRcbiIsCisJCQlldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUsIHZhbHVlKTsKKwlldmVudC0+Ym1SZXF1ZXN0VHlwZSA9IDB4ZmY7Cit9CisKK3N0YXRpYyB2b2lkIGlzc3VlX3N0YXJ0X3N0YXR1cyAoc3RydWN0IGV0aF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBkZXYtPnN0YXRfcmVxOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQ7CisJaW50CQkJCXZhbHVlOworIAorCURFQlVHIChkZXYsICIlcywgZmx1c2ggb2xkIHN0YXR1cyBmaXJzdFxuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZsdXNoIG9sZCBzdGF0dXMKKwkgKgorCSAqIEZJWE1FIHVnbHkgaWRpb20sIG1heWJlIHdlJ2QgYmUgYmV0dGVyIHdpdGgganVzdAorCSAqIGEgImNhbmNlbCB0aGUgd2hvbGUgcXVldWUiIHByaW1pdGl2ZSBzaW5jZSBhbnkKKwkgKiB1bmxpbmstb25lIHByaW1pdGl2ZSBoYXMgd2F5IHRvbyBtYW55IGVycm9yIG1vZGVzLgorCSAqIGhlcmUsIHdlICJrbm93IiB0b2dnbGUgaXMgYWxyZWFkeSBjbGVhci4uLgorCSAqLworCXVzYl9lcF9kaXNhYmxlIChkZXYtPnN0YXR1c19lcCk7CisJdXNiX2VwX2VuYWJsZSAoZGV2LT5zdGF0dXNfZXAsIGRldi0+c3RhdHVzKTsKKworCS8qIDMuOC4xIHNheXMgdG8gaXNzdWUgZmlyc3QgTkVUV09SS19DT05ORUNUSU9OLCB0aGVuCisJICogYSBTUEVFRF9DSEFOR0UuICBjb3VsZCBiZSB1c2VmdWwgaW4gc29tZSBjb25maWdzLgorCSAqLworCWV2ZW50ID0gcmVxLT5idWY7CisJZXZlbnQtPmJtUmVxdWVzdFR5cGUgPSAweEExOworCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfTk9USUZZX05FVFdPUktfQ09OTkVDVElPTjsKKwlldmVudC0+d1ZhbHVlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMSk7CS8qIGNvbm5lY3RlZCAqLworCWV2ZW50LT53SW5kZXggPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgxKTsKKwlldmVudC0+d0xlbmd0aCA9IDA7CisKKwlyZXEtPmxlbmd0aCA9IHNpemVvZiAqZXZlbnQ7CisJcmVxLT5jb21wbGV0ZSA9IGV0aF9zdGF0dXNfY29tcGxldGU7CisJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGRldi0+c3RhdHVzX2VwLCByZXEsIEdGUF9BVE9NSUMpOworCWlmICh2YWx1ZSA8IDApCisJCURFQlVHIChkZXYsICJzdGF0dXMgYnVmIHF1ZXVlIC0tPiAlZFxuIiwgdmFsdWUpOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZXRoX3NldHVwX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlERUJVRyAoKHN0cnVjdCBldGhfZGV2ICopIGVwLT5kcml2ZXJfZGF0YSwKKwkJCQkic2V0dXAgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKK30KKworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisKK3N0YXRpYyB2b2lkIHJuZGlzX3Jlc3BvbnNlX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlERUJVRyAoKHN0cnVjdCBldGhfZGV2ICopIGVwLT5kcml2ZXJfZGF0YSwKKwkJCSJybmRpcyByZXNwb25zZSBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisKKwkvKiBkb25lIHNlbmRpbmcgYWZ0ZXIgVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFICovCit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX2NvbW1hbmRfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZXRoX2RldiAgICAgICAgICAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJCXN0YXR1czsKKwkKKwkvKiByZWNlaXZlZCBSTkRJUyBjb21tYW5kIGZyb20gVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EICovCisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCXN0YXR1cyA9IHJuZGlzX21zZ19wYXJzZXIgKGRldi0+cm5kaXNfY29uZmlnLCAodTggKikgcmVxLT5idWYpOworCWlmIChzdGF0dXMgPCAwKQorCQlFUlJPUihkZXYsICIlczogcm5kaXMgcGFyc2UgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKK30KKworI2VuZGlmCS8qIFJORElTICovCisKKy8qCisgKiBUaGUgc2V0dXAoKSBjYWxsYmFjayBpbXBsZW1lbnRzIGFsbCB0aGUgZXAwIGZ1bmN0aW9uYWxpdHkgdGhhdCdzIG5vdAorICogaGFuZGxlZCBsb3dlciBkb3duLiAgQ0RDIGhhcyBhIG51bWJlciBvZiBsZXNzLWNvbW1vbiBmZWF0dXJlczoKKyAqCisgKiAgLSB0d28gaW50ZXJmYWNlczogIGNvbnRyb2wsIGFuZCBldGhlcm5ldCBkYXRhCisgKiAgLSBFdGhlcm5ldCBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGFsdHNldHRpbmdzOiAgZGVmYXVsdCwgYW5kIGFjdGl2ZQorICogIC0gY2xhc3Mtc3BlY2lmaWMgZGVzY3JpcHRvcnMgZm9yIHRoZSBjb250cm9sIGludGVyZmFjZQorICogIC0gY2xhc3Mtc3BlY2lmaWMgY29udHJvbCByZXF1ZXN0cworICovCitzdGF0aWMgaW50CitldGhfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBkZXYtPnJlcTsKKwlpbnQJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXUxNgkJCXdJbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3VmFsdWUgPSBjdHJsLT53VmFsdWU7CisJdTE2CQkJd0xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwkvKiBkZXNjcmlwdG9ycyBqdXN0IGdvIGludG8gdGhlIHByZS1hbGxvY2F0ZWQgZXAwIGJ1ZmZlciwKKwkgKiB3aGlsZSBjb25maWcgY2hhbmdlIGV2ZW50cyBtYXkgZW5hYmxlIG5ldHdvcmsgdHJhZmZpYy4KKwkgKi8KKwlyZXEtPmNvbXBsZXRlID0gZXRoX3NldHVwX2NvbXBsZXRlOworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQorCQkJYnJlYWs7CisJCXN3aXRjaCAod1ZhbHVlID4+IDgpIHsKKworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgc2l6ZW9mIGRldmljZV9kZXNjKTsKKwkJCW1lbWNweSAocmVxLT5idWYsICZkZXZpY2VfZGVzYywgdmFsdWUpOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6CisJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIHNpemVvZiBkZXZfcXVhbGlmaWVyKTsKKwkJCW1lbWNweSAocmVxLT5idWYsICZkZXZfcXVhbGlmaWVyLCB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJLy8gRkFMTFRIUk9VR0gKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJdmFsdWUgPSBjb25maWdfYnVmIChnYWRnZXQtPnNwZWVkLCByZXEtPmJ1ZiwKKwkJCQkJd1ZhbHVlID4+IDgsCisJCQkJCXdWYWx1ZSAmIDB4ZmYsCisJCQkJCWdhZGdldC0+aXNfb3RnKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3TGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQl2YWx1ZSA9IHVzYl9nYWRnZXRfZ2V0X3N0cmluZyAoJnN0cmluZ3RhYiwKKwkJCQkJd1ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCisJCQlicmVhazsKKwkJaWYgKGdhZGdldC0+YV9obnBfc3VwcG9ydCkKKwkJCURFQlVHIChkZXYsICJITlAgYXZhaWxhYmxlXG4iKTsKKwkJZWxzZSBpZiAoZ2FkZ2V0LT5hX2FsdF9obnBfc3VwcG9ydCkKKwkJCURFQlVHIChkZXYsICJITlAgbmVlZHMgYSBkaWZmZXJlbnQgcm9vdCBwb3J0XG4iKTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJdmFsdWUgPSBldGhfc2V0X2NvbmZpZyAoZGV2LCB3VmFsdWUsIEdGUF9BVE9NSUMpOworCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQorCQkJYnJlYWs7CisJCSoodTggKilyZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOworCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJCXx8ICFkZXYtPmNvbmZpZworCQkJCXx8IHdJbmRleCA+IDEpCisJCQlicmVhazsKKwkJaWYgKCFkZXYtPmNkYyAmJiB3SW5kZXggIT0gMCkKKwkJCWJyZWFrOworCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCisJCS8qIFBYQSBoYXJkd2FyZSBwYXJ0aWFsbHkgaGFuZGxlcyBTRVRfSU5URVJGQUNFOworCQkgKiB3ZSBuZWVkIHRvIGtsdWdlIGFyb3VuZCB0aGF0IGludGVyZmVyZW5jZS4KKwkJICovCisJCWlmIChnYWRnZXRfaXNfcHhhIChnYWRnZXQpKSB7CisJCQl2YWx1ZSA9IGV0aF9zZXRfY29uZmlnIChkZXYsIERFVl9DT05GSUdfVkFMVUUsCisJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCWdvdG8gZG9uZV9zZXRfaW50ZjsKKwkJfQorCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkJc3dpdGNoICh3SW5kZXgpIHsKKwkJY2FzZSAwOgkJLyogY29udHJvbC9tYXN0ZXIgaW50ZiAqLworCQkJaWYgKHdWYWx1ZSAhPSAwKQorCQkJCWJyZWFrOworCQkJaWYgKGRldi0+c3RhdHVzKSB7CisJCQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKKwkJCQl1c2JfZXBfZW5hYmxlIChkZXYtPnN0YXR1c19lcCwgZGV2LT5zdGF0dXMpOworCQkJfQorCQkJdmFsdWUgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMToJCS8qIGRhdGEgaW50ZiAqLworCQkJaWYgKHdWYWx1ZSA+IDEpCisJCQkJYnJlYWs7CisJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7CisJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCisJCQkvKiBDREMgcmVxdWlyZXMgdGhlIGRhdGEgdHJhbnNmZXJzIG5vdCBiZSBkb25lIGZyb20KKwkJCSAqIHRoZSBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5nIC4uLiBhbHNvLCBzZXR0aW5nCisJCQkgKiB0aGUgbm9uLWRlZmF1bHQgaW50ZXJmYWNlIGNsZWFycyBmaWx0ZXJzIGV0Yy4KKwkJCSAqLworCQkJaWYgKHdWYWx1ZSA9PSAxKSB7CisJCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5pbl9lcCwgZGV2LT5pbik7CisJCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5vdXRfZXAsIGRldi0+b3V0KTsKKwkJCQlkZXYtPmNkY19maWx0ZXIgPSBERUZBVUxUX0ZJTFRFUjsKKwkJCQluZXRpZl9jYXJyaWVyX29uIChkZXYtPm5ldCk7CisJCQkJaWYgKGRldi0+c3RhdHVzKQorCQkJCQlpc3N1ZV9zdGFydF9zdGF0dXMgKGRldik7CisJCQkJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KSkgeworCQkJCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCQkJCWV0aF9zdGFydCAoZGV2LCBHRlBfQVRPTUlDKTsKKwkJCQkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW5ldGlmX3N0b3BfcXVldWUgKGRldi0+bmV0KTsKKwkJCQluZXRpZl9jYXJyaWVyX29mZiAoZGV2LT5uZXQpOworCQkJfQorCQkJdmFsdWUgPSAwOworCQkJYnJlYWs7CisJCX0KKyNlbHNlCisJCS8qIEZJWE1FIHRoaXMgaXMgd3JvbmcsIGFzIGlzIHRoZSBhc3N1bXB0aW9uIHRoYXQKKwkJICogYWxsIG5vbi1QWEEgaGFyZHdhcmUgdGFsa3MgcmVhbCBDREMgLi4uCisJCSAqLworCQlkZXZfd2FybiAoJmdhZGdldC0+ZGV2LCAic2V0X2ludGVyZmFjZSBpZ25vcmVkIVxuIik7CisjZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KKworZG9uZV9zZXRfaW50ZjoKKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCXx8ICFkZXYtPmNvbmZpZworCQkJCXx8IHdJbmRleCA+IDEpCisJCQlicmVhazsKKwkJaWYgKCEoZGV2LT5jZGMgfHwgZGV2LT5ybmRpcykgJiYgd0luZGV4ICE9IDApCisJCQlicmVhazsKKworCQkvKiBmb3IgQ0RDLCBpZmYgY2FycmllciBpcyBvbiwgZGF0YSBpbnRlcmZhY2UgaXMgYWN0aXZlLiAqLworCQlpZiAoZGV2LT5ybmRpcyB8fCB3SW5kZXggIT0gMSkKKwkJCSoodTggKilyZXEtPmJ1ZiA9IDA7CisJCWVsc2UKKwkJCSoodTggKilyZXEtPmJ1ZiA9IG5ldGlmX2NhcnJpZXJfb2sgKGRldi0+bmV0KSA/IDEgOiAwOworCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwljYXNlIFVTQl9DRENfU0VUX0VUSEVSTkVUX1BBQ0tFVF9GSUxURVI6CisJCS8qIHNlZSA2LjIuMzA6IG5vIGRhdGEsIHdJbmRleCA9IGludGVyZmFjZSwKKwkJICogd1ZhbHVlID0gcGFja2V0IGZpbHRlciBiaXRtYXAKKwkJICovCisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisJCQkJfHwgIWRldi0+Y2RjCisJCQkJfHwgZGV2LT5ybmRpcworCQkJCXx8IHdMZW5ndGggIT0gMAorCQkJCXx8IHdJbmRleCA+IDEpCisJCQlicmVhazsKKwkJREVCVUcgKGRldiwgInBhY2tldCBmaWx0ZXIgJTAyeFxuIiwgd1ZhbHVlKTsKKwkJZGV2LT5jZGNfZmlsdGVyID0gd1ZhbHVlOworCQl2YWx1ZSA9IDA7CisJCWJyZWFrOworCisJLyogYW5kIHBvdGVudGlhbGx5OgorCSAqIGNhc2UgVVNCX0NEQ19TRVRfRVRIRVJORVRfTVVMVElDQVNUX0ZJTFRFUlM6CisJICogY2FzZSBVU0JfQ0RDX1NFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUjoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VUSEVSTkVUX1BNX1BBVFRFUk5fRklMVEVSOgorCSAqIGNhc2UgVVNCX0NEQ19HRVRfRVRIRVJORVRfU1RBVElTVElDOgorCSAqLworCisjZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KKworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCQkKKwkvKiBSTkRJUyB1c2VzIHRoZSBDREMgY29tbWFuZCBlbmNhcHN1bGF0aW9uIG1lY2hhbmlzbSB0byBpbXBsZW1lbnQKKwkgKiBhbiBSUEMgc2NoZW1lLCB3aXRoIG11Y2ggZ2V0dGluZy9zZXR0aW5nIG9mIGF0dHJpYnV0ZXMgYnkgT0lELgorCSAqLworCWNhc2UgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCXx8ICFkZXYtPnJuZGlzCisJCQkJfHwgd0xlbmd0aCA+IFVTQl9CVUZTSVoKKwkJCQl8fCB3VmFsdWUKKwkJCQl8fCBybmRpc19jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlcgorCQkJCQkhPSB3SW5kZXgpCisJCQlicmVhazsKKwkJLyogcmVhZCB0aGUgcmVxdWVzdCwgdGhlbiBwcm9jZXNzIGl0ICovCisJCXZhbHVlID0gd0xlbmd0aDsKKwkJcmVxLT5jb21wbGV0ZSA9IHJuZGlzX2NvbW1hbmRfY29tcGxldGU7CisJCS8qIGxhdGVyLCBybmRpc19jb250cm9sX2FjayAoKSBzZW5kcyBhIG5vdGlmaWNhdGlvbiAqLworCQlicmVhazsKKwkJCisJY2FzZSBVU0JfQ0RDX0dFVF9FTkNBUFNVTEFURURfUkVTUE9OU0U6CisJCWlmICgoVVNCX0RJUl9JTnxVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCQk9PSBjdHJsLT5iUmVxdWVzdFR5cGUKKwkJCQkmJiBkZXYtPnJuZGlzCisJCQkJLy8gJiYgd0xlbmd0aCA+PSAweDA0MDAKKwkJCQkmJiAhd1ZhbHVlCisJCQkJJiYgcm5kaXNfY29udHJvbF9pbnRmLmJJbnRlcmZhY2VOdW1iZXIKKwkJCQkJPT0gd0luZGV4KSB7CisJCQl1OCAqYnVmOworCisJCQkvKiByZXR1cm4gdGhlIHJlc3VsdCAqLworCQkJYnVmID0gcm5kaXNfZ2V0X25leHRfcmVzcG9uc2UgKGRldi0+cm5kaXNfY29uZmlnLAorCQkJCQkJICAgICAgICZ2YWx1ZSk7CisJCQlpZiAoYnVmKSB7CisJCQkJbWVtY3B5IChyZXEtPmJ1ZiwgYnVmLCB2YWx1ZSk7CisJCQkJcmVxLT5jb21wbGV0ZSA9IHJuZGlzX3Jlc3BvbnNlX2NvbXBsZXRlOworCQkJCXJuZGlzX2ZyZWVfcmVzcG9uc2UoZGV2LT5ybmRpc19jb25maWcsIGJ1Zik7CisJCQl9CisJCQkvKiBlbHNlIHN0YWxscyAuLi4gc3BlYyBzYXlzIHRvIGF2b2lkIHRoYXQgKi8KKwkJfQorCQlicmVhazsKKyNlbmRpZgkvKiBSTkRJUyAqLworCisJZGVmYXVsdDoKKwkJVkRFQlVHIChkZXYsCisJCQkidW5rbm93biBjb250cm9sIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCX0KKworCS8qIHJlc3BvbmQgd2l0aCBkYXRhIHRyYW5zZmVyIGJlZm9yZSBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHZhbHVlID49IDApIHsKKwkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKKwkJcmVxLT56ZXJvID0gdmFsdWUgPCB3TGVuZ3RoCisJCQkJJiYgKHZhbHVlICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMDsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAodmFsdWUgPCAwKSB7CisJCQlERUJVRyAoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQlyZXEtPnN0YXR1cyA9IDA7CisJCQlldGhfc2V0dXBfY29tcGxldGUgKGdhZGdldC0+ZXAwLCByZXEpOworCQl9CisJfQorCisJLyogaG9zdCBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQKK2V0aF9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7CisJbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKKwlldGhfcmVzZXRfY29uZmlnIChkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZJWE1FIFJORElTIHNob3VsZCBlbnRlciBSTkRJU19VTklOSVRJQUxJWkVEICovCisKKwkvKiBuZXh0IHdlIG1heSBnZXQgc2V0dXAoKSBjYWxscyB0byBlbnVtZXJhdGUgbmV3IGNvbm5lY3Rpb25zOworCSAqIG9yIGFuIHVuYmluZCgpIGR1cmluZyBzaHV0ZG93biAoaW5jbHVkaW5nIHJlbW92aW5nIG1vZHVsZSkuCisJICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIE5FVFdPUksgRFJJVkVSIEhPT0tVUCAodG8gdGhlIGxheWVyIGFib3ZlIHRoaXMgZHJpdmVyKSAqLworCitzdGF0aWMgaW50IGV0aF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCS8vIEZJWE1FIGlmIHJuZGlzLCBkb24ndCBjaGFuZ2Ugd2hpbGUgbGluaydzIGxpdmUKKworCWlmIChuZXdfbXR1IDw9IEVUSF9ITEVOIHx8IG5ld19tdHUgPiBFVEhfRlJBTUVfTEVOKQorCQlyZXR1cm4gLUVSQU5HRTsKKwkvKiBubyB6ZXJvLWxlbmd0aCBwYWNrZXQgcmVhZCB3YW50ZWQgYWZ0ZXIgbXR1LXNpemVkIHBhY2tldHMgKi8KKwlpZiAoKChuZXdfbXR1ICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSkgJSBkZXYtPmluX2VwLT5tYXhwYWNrZXQpID09IDApCisJCXJldHVybiAtRURPTTsKKwluZXQtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXRoX2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlyZXR1cm4gJigoc3RydWN0IGV0aF9kZXYgKiluZXRkZXZfcHJpdihuZXQpKS0+c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIGV0aF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpwKQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXN0cmxjcHkocC0+ZHJpdmVyLCBzaG9ydG5hbWUsIHNpemVvZiBwLT5kcml2ZXIpOworCXN0cmxjcHkocC0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKKwlzdHJsY3B5KHAtPmZ3X3ZlcnNpb24sIGRldi0+Z2FkZ2V0LT5uYW1lLCBzaXplb2YgcC0+ZndfdmVyc2lvbik7CisJc3RybGNweSAocC0+YnVzX2luZm8sIGRldi0+Z2FkZ2V0LT5kZXYuYnVzX2lkLCBzaXplb2YgcC0+YnVzX2luZm8pOworfQorCitzdGF0aWMgdTMyIGV0aF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXJldHVybiBkZXYtPmdhZGdldC0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV047Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IGV0aF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBldGhfZ2V0X2xpbmsKK307CisKK3N0YXRpYyB2b2lkIGRlZmVyX2tldmVudCAoc3RydWN0IGV0aF9kZXYgKmRldiwgaW50IGZsYWcpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQgKGZsYWcsICZkZXYtPnRvZG8pKQorCQlyZXR1cm47CisJaWYgKCFzY2hlZHVsZV93b3JrICgmZGV2LT53b3JrKSkKKwkJRVJST1IgKGRldiwgImtldmVudCAlZCBtYXkgaGF2ZSBiZWVuIGRyb3BwZWRcbiIsIGZsYWcpOworCWVsc2UKKwkJREVCVUcgKGRldiwgImtldmVudCAlZCBzY2hlZHVsZWRcbiIsIGZsYWcpOworfQorCitzdGF0aWMgdm9pZCByeF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKKworc3RhdGljIGludAorcnhfc3VibWl0IChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlpbnQJCQlyZXR2YWwgPSAtRU5PTUVNOworCXNpemVfdAkJCXNpemU7CisKKwkvKiBQYWRkaW5nIHVwIHRvIFJYX0VYVFJBIGhhbmRsZXMgbWlub3IgZGlzYWdyZWVtZW50cyB3aXRoIGhvc3QuCisJICogTm9ybWFsbHkgd2UgdXNlIHRoZSBVU0IgInRlcm1pbmF0ZSBvbiBzaG9ydCByZWFkIiBjb252ZW50aW9uOworCSAqIHNvIGFsbG93IHVwIHRvIChOKm1heHBhY2tldCksIHNpbmNlIHRoYXQgbWVtb3J5IGlzIG5vcm1hbGx5CisJICogYWxyZWFkeSBhbGxvY2F0ZWQuICBTb21lIGhhcmR3YXJlIGRvZXNuJ3QgZGVhbCB3ZWxsIHdpdGggc2hvcnQKKwkgKiByZWFkcyAoZS5nLiBETUEgbXVzdCBiZSBOKm1heHBhY2tldCksIHNvIGZvciBub3cgZG9uJ3QgdHJpbSBhCisJICogYnl0ZSBvZmYgdGhlIGVuZCAodG8gZm9yY2UgaGFyZHdhcmUgZXJyb3JzIG9uIG92ZXJmbG93KS4KKwkgKgorCSAqIFJORElTIHVzZXMgaW50ZXJuYWwgZnJhbWluZywgYW5kIGV4cGxpY2l0bHkgYWxsb3dzIHNlbmRlcnMgdG8KKwkgKiBwYWQgdG8gZW5kLW9mLXBhY2tldC4gIFRoYXQncyBwb3RlbnRpYWxseSBuaWNlIGZvciBzcGVlZCwKKwkgKiBidXQgbWVhbnMgcmVjZWl2ZXJzIGNhbid0IHJlY292ZXIgc3luY2ggb24gdGhlaXIgb3duLgorCSAqLworCXNpemUgPSAoc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSArIGRldi0+bmV0LT5tdHUgKyBSWF9FWFRSQSk7CisJc2l6ZSArPSBkZXYtPm91dF9lcC0+bWF4cGFja2V0IC0gMTsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCWlmIChkZXYtPnJuZGlzKQorCQlzaXplICs9IHNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSk7CisjZW5kaWYJCisJc2l6ZSAtPSBzaXplICUgZGV2LT5vdXRfZXAtPm1heHBhY2tldDsKKworCWlmICgoc2tiID0gYWxsb2Nfc2tiIChzaXplICsgTkVUX0lQX0FMSUdOLCBnZnBfZmxhZ3MpKSA9PSAwKSB7CisJCURFQlVHIChkZXYsICJubyByeCBza2JcbiIpOworCQlnb3RvIGVub21lbTsKKwl9CisJCisJLyogU29tZSBwbGF0Zm9ybXMgcGVyZm9ybSBiZXR0ZXIgd2hlbiBJUCBwYWNrZXRzIGFyZSBhbGlnbmVkLAorCSAqIGJ1dCBvbiBhdCBsZWFzdCBvbmUsIGNoZWNrc3VtbWluZyBmYWlscyBvdGhlcndpc2UuICBOb3RlOgorCSAqIHRoaXMgZG9lc24ndCBhY2NvdW50IGZvciB2YXJpYWJsZS1zaXplZCBSTkRJUyBoZWFkZXJzLgorCSAqLworCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKworCXJlcS0+YnVmID0gc2tiLT5kYXRhOworCXJlcS0+bGVuZ3RoID0gc2l6ZTsKKwlyZXEtPmNvbXBsZXRlID0gcnhfY29tcGxldGU7CisJcmVxLT5jb250ZXh0ID0gc2tiOworCisJcmV0dmFsID0gdXNiX2VwX3F1ZXVlIChkZXYtPm91dF9lcCwgcmVxLCBnZnBfZmxhZ3MpOworCWlmIChyZXR2YWwgPT0gLUVOT01FTSkKK2Vub21lbToKKwkJZGVmZXJfa2V2ZW50IChkZXYsIFdPUktfUlhfTUVNT1JZKTsKKwlpZiAocmV0dmFsKSB7CisJCURFQlVHIChkZXYsICJyeCBzdWJtaXQgLS0+ICVkXG4iLCByZXR2YWwpOworCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnJ4X3JlcXMpOworCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYiA9IHJlcS0+Y29udGV4dDsKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJc3RhdHVzID0gcmVxLT5zdGF0dXM7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCisJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwljYXNlIDA6CisJCXNrYl9wdXQgKHNrYiwgcmVxLT5hY3R1YWwpOworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisJCS8qIHdlIGtub3cgTWF4UGFja2V0c1BlclRyYW5zZmVyID09IDEgaGVyZSAqLworCQlpZiAoZGV2LT5ybmRpcykKKwkJCXJuZGlzX3JtX2hkciAocmVxLT5idWYsICYoc2tiLT5sZW4pKTsKKyNlbmRpZgorCQlpZiAoRVRIX0hMRU4gPiBza2ItPmxlbiB8fCBza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pIHsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCURFQlVHIChkZXYsICJyeCBsZW5ndGggJWRcbiIsIHNrYi0+bGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2tiLT5kZXYgPSBkZXYtPm5ldDsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRldi0+bmV0KTsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkJLyogbm8gYnVmZmVyIGNvcGllcyBuZWVkZWQsIHVubGVzcyBoYXJkd2FyZSBjYW4ndAorCQkgKiB1c2Ugc2tiIGJ1ZmZlcnMuCisJCSAqLworCQlzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTsKKwkJc2tiID0gTlVMTDsKKwkJYnJlYWs7CisKKwkvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8vIHVubGluaworCWNhc2UgLUVTSFVURE9XTjoJCS8vIGRpc2Nvbm5lY3QgZXRjCisJCVZERUJVRyAoZGV2LCAicnggc2h1dGRvd24sIGNvZGUgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gcXVpZXNjZTsKKworCS8qIGZvciBoYXJkd2FyZSBhdXRvbWFnaWMgKHN1Y2ggYXMgcHhhKSAqLworCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8vIGVuZHBvaW50IHJlc2V0CisJCURFQlVHIChkZXYsICJyeCAlcyByZXNldFxuIiwgZXAtPm5hbWUpOworCQlkZWZlcl9rZXZlbnQgKGRldiwgV09SS19SWF9NRU1PUlkpOworcXVpZXNjZToKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCWdvdG8gY2xlYW47CisKKwkvKiBkYXRhIG92ZXJydW4gKi8KKwljYXNlIC1FT1ZFUkZMT1c6CisJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJLy8gRkFMTFRIUk9VR0gKKwkgICAgCisJZGVmYXVsdDoKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJREVCVUcgKGRldiwgInJ4IHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNrYikKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJaWYgKCFuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpIHsKK2NsZWFuOgorCQkvKiBub2JvZHkgcmVhZGluZyByeF9yZXFzLCBzbyBubyBkZXYtPmxvY2sgKi8KKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnJ4X3JlcXMpOworCQlyZXEgPSBOVUxMOworCX0KKwlpZiAocmVxKQorCQlyeF9zdWJtaXQgKGRldiwgcmVxLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIGludCBwcmVhbGxvYyAoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IHVzYl9lcCAqZXAsCisJCQl1bnNpZ25lZCBuLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXVuc2lnbmVkCQlpOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHF1ZXVlL3JlY3ljbGUgdXAgdG8gTiByZXF1ZXN0cyAqLworCWkgPSBuOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgbGlzdCwgbGlzdCkgeworCQlpZiAoaS0tID09IDApCisJCQlnb3RvIGV4dHJhOworCX0KKwl3aGlsZSAoaS0tKSB7CisJCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChlcCwgZ2ZwX2ZsYWdzKTsKKwkJaWYgKCFyZXEpCisJCQlyZXR1cm4gbGlzdF9lbXB0eSAobGlzdCkgPyAtRU5PTUVNIDogMDsKKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsIGxpc3QpOworCX0KKwlyZXR1cm4gMDsKKworZXh0cmE6CisJLyogZnJlZSBleHRyYXMgKi8KKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQJKm5leHQ7CisKKwkJbmV4dCA9IHJlcS0+bGlzdC5uZXh0OworCQlsaXN0X2RlbCAoJnJlcS0+bGlzdCk7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOworCisJCWlmIChuZXh0ID09IGxpc3QpCisJCQlicmVhazsKKworCQlyZXEgPSBjb250YWluZXJfb2YgKG5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX3JlcXVlc3RzIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCB1bnNpZ25lZCBuLCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBwcmVhbGxvYyAoJmRldi0+dHhfcmVxcywgZGV2LT5pbl9lcCwgbiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXN0YXR1cyA9IHByZWFsbG9jICgmZGV2LT5yeF9yZXFzLCBkZXYtPm91dF9lcCwgbiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXJldHVybiAwOworZmFpbDoKKwlERUJVRyAoZGV2LCAiY2FuJ3QgYWxsb2MgcmVxdWVzdHNcbiIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2ZpbGwgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwljbGVhcl9iaXQgKFdPUktfUlhfTUVNT1JZLCAmZGV2LT50b2RvKTsKKworCS8qIGZpbGwgdW51c2VkIHJ4cSBzbG90cyB3aXRoIHNvbWUgc2tiICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkgKCZkZXYtPnJ4X3JlcXMpKSB7CisJCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT5yeF9yZXFzLm5leHQsCisJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAocnhfc3VibWl0IChkZXYsIHJlcSwgZ2ZwX2ZsYWdzKSA8IDApIHsKKwkJCWRlZmVyX2tldmVudCAoZGV2LCBXT1JLX1JYX01FTU9SWSk7CisJCQlyZXR1cm47CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aF93b3JrICh2b2lkICpfZGV2KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gX2RldjsKKworCWlmICh0ZXN0X2JpdCAoV09SS19SWF9NRU1PUlksICZkZXYtPnRvZG8pKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpCisJCQlyeF9maWxsIChkZXYsIEdGUF9LRVJORUwpOworCQllbHNlCisJCQljbGVhcl9iaXQgKFdPUktfUlhfTUVNT1JZLCAmZGV2LT50b2RvKTsKKwl9CisKKwlpZiAoZGV2LT50b2RvKQorCQlERUJVRyAoZGV2LCAid29yayBkb25lLCBmbGFncyA9IDB4JWx4XG4iLCBkZXYtPnRvZG8pOworfQorCitzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBza19idWZmCSpza2IgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IGV0aF9kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKworCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwlkZWZhdWx0OgorCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlWREVCVUcgKGRldiwgInR4IGVyciAlZFxuIiwgcmVxLT5zdGF0dXMpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvLyB1bmxpbmsKKwljYXNlIC1FU0hVVERPV046CQkvLyBkaXNjb25uZWN0IGV0YworCQlicmVhazsKKwljYXNlIDA6CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfQorCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7CisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCisJYXRvbWljX2RlYyAoJmRldi0+dHhfcWxlbik7CisJaWYgKG5ldGlmX2NhcnJpZXJfb2sgKGRldi0+bmV0KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2LT5uZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBldGhfaXNfcHJvbWlzYyAoc3RydWN0IGV0aF9kZXYgKmRldikKK3sKKwkvKiBubyBmaWx0ZXJzIGZvciB0aGUgQ0RDIHN1YnNldDsgYWx3YXlzIHByb21pc2MgKi8KKwlpZiAoc3Vic2V0X2FjdGl2ZSAoZGV2KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGRldi0+Y2RjX2ZpbHRlciAmIFVTQl9DRENfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVM7Cit9CisKK3N0YXRpYyBpbnQgZXRoX3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludAkJCWxlbmd0aCA9IHNrYi0+bGVuOworCWludAkJCXJldHZhbDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwkvKiBhcHBseSBvdXRnb2luZyBDREMgb3IgUk5ESVMgZmlsdGVycyAqLworCWlmICghZXRoX2lzX3Byb21pc2MgKGRldikpIHsKKwkJdTgJCSpkZXN0ID0gc2tiLT5kYXRhOworCisJCWlmIChkZXN0IFswXSAmIDB4MDEpIHsKKwkJCXUxNgl0eXBlOworCisJCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfTVVMVElDQVNUIGFuZCBob3N0CisJCQkgKiBTRVRfRVRIRVJORVRfTVVMVElDQVNUX0ZJTFRFUlMgcmVxdWVzdHMKKwkJCSAqLworCQkJaWYgKG1lbWNtcCAoZGVzdCwgbmV0LT5icm9hZGNhc3QsIEVUSF9BTEVOKSA9PSAwKQorCQkJCXR5cGUgPSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVDsKKwkJCWVsc2UKKwkJCQl0eXBlID0gVVNCX0NEQ19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOworCQkJaWYgKCEoZGV2LT5jZGNfZmlsdGVyICYgdHlwZSkpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQgKi8KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT50eF9yZXFzLm5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOworCWlmIChsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkKKwkJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIHRoZSBuZXR3b3JrIHN0YWNrIGRpZCBpdAorCSAqIG9yIHRoZSBoYXJkd2FyZSBjYW4ndCB1c2Ugc2tiIGJ1ZmZlcnMuCisJICogb3IgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIGZvciBhbnkgUk5ESVMgaGVhZGVycyB3ZSBuZWVkCisJICovCisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlpZiAoZGV2LT5ybmRpcykgeworCQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiX3JuZGlzOworCisJCXNrYl9ybmRpcyA9IHNrYl9yZWFsbG9jX2hlYWRyb29tIChza2IsCisJCQkJc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKSk7CisJCWlmICghc2tiX3JuZGlzKQorCQkJZ290byBkcm9wOworCQorCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJc2tiID0gc2tiX3JuZGlzOworCQlybmRpc19hZGRfaGRyIChza2IpOworCQlsZW5ndGggPSBza2ItPmxlbjsKKwl9CisjZW5kaWYKKwlyZXEtPmJ1ZiA9IHNrYi0+ZGF0YTsKKwlyZXEtPmNvbnRleHQgPSBza2I7CisJcmVxLT5jb21wbGV0ZSA9IHR4X2NvbXBsZXRlOworCisJLyogdXNlIHpscCBmcmFtaW5nIG9uIHR4IGZvciBzdHJpY3QgQ0RDLUV0aGVyIGNvbmZvcm1hbmNlLAorCSAqIHRob3VnaCBhbnkgcm9idXN0IG5ldHdvcmsgcnggcGF0aCBpZ25vcmVzIGV4dHJhIHBhZGRpbmcuCisJICogYW5kIHNvbWUgaGFyZHdhcmUgZG9lc24ndCBsaWtlIHRvIHdyaXRlIHpscHMuCisJICovCisJcmVxLT56ZXJvID0gMTsKKwlpZiAoIWRldi0+emxwICYmIChsZW5ndGggJSBkZXYtPmluX2VwLT5tYXhwYWNrZXQpID09IDApCisJCWxlbmd0aCsrOworCisJcmVxLT5sZW5ndGggPSBsZW5ndGg7CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkvKiB0aHJvdHRsZSBoaWdoc3BlZWQgSVJRIHJhdGUgYmFjayBzbGlnaHRseSAqLworCXJlcS0+bm9faW50ZXJydXB0ID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJPyAoKGF0b21pY19yZWFkICgmZGV2LT50eF9xbGVuKSAlIFRYX0RFTEFZKSAhPSAwKQorCQk6IDA7CisjZW5kaWYKKworCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSAoZGV2LT5pbl9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwlzd2l0Y2ggKHJldHZhbCkgeworCWRlZmF1bHQ6CisJCURFQlVHIChkZXYsICJ0eCBxdWV1ZSBlcnIgJWRcbiIsIHJldHZhbCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCWF0b21pY19pbmMgKCZkZXYtPnR4X3FsZW4pOworCX0KKworCWlmIChyZXR2YWwpIHsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworZHJvcDoKKyNlbmRpZgorCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJCWlmIChsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOworCQlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCitzdGF0aWMgdm9pZCBybmRpc19zZW5kX21lZGlhX3N0YXRlIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgY29ubmVjdCkKK3sKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCQorCWlmIChjb25uZWN0KSB7CisJCWlmIChybmRpc19zaWduYWxfY29ubmVjdCAoZGV2LT5ybmRpc19jb25maWcpKQorCQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChybmRpc19zaWduYWxfZGlzY29ubmVjdCAoZGV2LT5ybmRpc19jb25maWcpKQorCQkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQKK3JuZGlzX2NvbnRyb2xfYWNrX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlERUJVRyAoKHN0cnVjdCBldGhfZGV2ICopIGVwLT5kcml2ZXJfZGF0YSwKKwkJCSJybmRpcyBjb250cm9sIGFjayBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisKKwl1c2JfZXBfZnJlZV9idWZmZXIoZXAsIHJlcS0+YnVmLCByZXEtPmRtYSwgOCk7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKK30KKworc3RhdGljIGludCBybmRpc19jb250cm9sX2FjayAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldiAgICAgICAgICAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgKnJlc3A7CisJCisJLyogaW4gY2FzZSBSTkRJUyBjYWxscyB0aGlzIGFmdGVyIGRpc2Nvbm5lY3QgKi8KKwlpZiAoIWRldi0+c3RhdHVzX2VwKSB7CisJCURFQlVHIChkZXYsICJzdGF0dXMgRU5PREVWXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBub3RpZmljYXRpb24gaWUuIEFDSyAqLworCXJlc3AgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZGV2LT5zdGF0dXNfZXAsIEdGUF9BVE9NSUMpOworCWlmICghcmVzcCkgeworCQlERUJVRyAoZGV2LCAic3RhdHVzIEVOT01FTVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkKKwlyZXNwLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyIChkZXYtPnN0YXR1c19lcCwgOCwKKwkJCQkJICZyZXNwLT5kbWEsIEdGUF9BVE9NSUMpOworCWlmICghcmVzcC0+YnVmKSB7CisJCURFQlVHIChkZXYsICJzdGF0dXMgYnVmIEVOT01FTVxuIik7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGRldi0+c3RhdHVzX2VwLCByZXNwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCQorCS8qIFNlbmQgUk5ESVMgUkVTUE9OU0VfQVZBSUxBQkxFIG5vdGlmaWNhdGlvbjsKKwkgKiBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEUgc2hvdWxkIHdvcmsgdG9vCisJICovCisJcmVzcC0+bGVuZ3RoID0gODsKKwlyZXNwLT5jb21wbGV0ZSA9IHJuZGlzX2NvbnRyb2xfYWNrX2NvbXBsZXRlOworCQorCSooKF9fbGUzMiAqKSByZXNwLT5idWYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJKigoX19sZTMyICopIHJlc3AtPmJ1ZiArIDEpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCisJbGVuZ3RoID0gdXNiX2VwX3F1ZXVlIChkZXYtPnN0YXR1c19lcCwgcmVzcCwgR0ZQX0FUT01JQyk7CisJaWYgKGxlbmd0aCA8IDApIHsKKwkJcmVzcC0+c3RhdHVzID0gMDsKKwkJcm5kaXNfY29udHJvbF9hY2tfY29tcGxldGUgKGRldi0+c3RhdHVzX2VwLCByZXNwKTsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgkvKiBSTkRJUyAqLworCitzdGF0aWMgdm9pZCBldGhfc3RhcnQgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGludCBnZnBfZmxhZ3MpCit7CisJREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogZmlsbCB0aGUgcnggcXVldWUgKi8KKwlyeF9maWxsIChkZXYsIGdmcF9mbGFncyk7CisKKwkvKiBhbmQgb3BlbiB0aGUgdHggZmxvb2RnYXRlcyAqLyAKKwlhdG9taWNfc2V0ICgmZGV2LT50eF9xbGVuLCAwKTsKKwluZXRpZl93YWtlX3F1ZXVlIChkZXYtPm5ldCk7CisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlpZiAoZGV2LT5ybmRpcykgeworCQlybmRpc19zZXRfcGFyYW1fbWVkaXVtIChkZXYtPnJuZGlzX2NvbmZpZywKKwkJCQkJTkRJU19NRURJVU1fODAyXzMsCisJCQkJCUJJVFJBVEUoZGV2LT5nYWRnZXQpKTsKKwkJcm5kaXNfc2VuZF9tZWRpYV9zdGF0ZSAoZGV2LCAxKTsKKwl9CisjZW5kaWYJCit9CisKK3N0YXRpYyBpbnQgZXRoX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkpCisJCWV0aF9zdGFydCAoZGV2LCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlWREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CisKKwlERUJVRyAoZGV2LCAic3RvcCBzdGF0czogcngvdHggJWxkLyVsZCwgZXJycyAlbGQvJWxkXG4iLAorCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMsIGRldi0+c3RhdHMudHhfcGFja2V0cywgCisJCWRldi0+c3RhdHMucnhfZXJyb3JzLCBkZXYtPnN0YXRzLnR4X2Vycm9ycworCQkpOworCisJLyogZW5zdXJlIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSByZXF1ZXN0cyAqLworCWlmIChkZXYtPmNvbmZpZykgeworCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkpIHsKKwkJCURFQlVHIChkZXYsICJob3N0IHN0aWxsIHVzaW5nIGluL291dCBlbmRwb2ludHNcbiIpOworCQkJLy8gRklYTUUgaWRpb20gbWF5IGxlYXZlIHRvZ2dsZSB3cm9uZyBoZXJlCisJCQl1c2JfZXBfZW5hYmxlIChkZXYtPmluX2VwLCBkZXYtPmluKTsKKwkJCXVzYl9lcF9lbmFibGUgKGRldi0+b3V0X2VwLCBkZXYtPm91dCk7CisJCX0KKwkJaWYgKGRldi0+c3RhdHVzX2VwKSB7CisJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5zdGF0dXNfZXApOworCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5zdGF0dXNfZXAsIGRldi0+c3RhdHVzKTsKKwkJfQorCX0KKwkKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCWlmIChkZXYtPnJuZGlzKSB7CisJCXJuZGlzX3NldF9wYXJhbV9tZWRpdW0gKGRldi0+cm5kaXNfY29uZmlnLAorCQkJCQlORElTX01FRElVTV84MDJfMywgMCk7CisJCXJuZGlzX3NlbmRfbWVkaWFfc3RhdGUgKGRldiwgMCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZXRoX3JlcV9hbGxvYyAoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIHNpemUpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisKKwlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZXAsIEdGUF9LRVJORUwpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcS0+YnVmID0ga21hbGxvYyAoc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEtPmJ1ZikgeworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChlcCwgcmVxKTsKKwkJcmVxID0gTlVMTDsKKwl9CisJcmV0dXJuIHJlcTsKK30KKworc3RhdGljIHZvaWQKK2V0aF9yZXFfZnJlZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWtmcmVlIChyZXEtPmJ1Zik7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZXAsIHJlcSk7Cit9CisKKworc3RhdGljIHZvaWQKK2V0aF91bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlERUJVRyAoZGV2LCAidW5iaW5kXG4iKTsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCXJuZGlzX2RlcmVnaXN0ZXIgKGRldi0+cm5kaXNfY29uZmlnKTsKKwlybmRpc19leGl0ICgpOworI2VuZGlmCisKKwkvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCisJaWYgKGRldi0+cmVxKSB7CisJCWV0aF9yZXFfZnJlZSAoZ2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJZGV2LT5yZXEgPSBOVUxMOworCX0KKwlpZiAoZGV2LT5zdGF0X3JlcSkgeworCQlldGhfcmVxX2ZyZWUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXRfcmVxKTsKKwkJZGV2LT5zdGF0X3JlcSA9IE5VTEw7CisJfQorCisJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldi0+bmV0KTsKKwlmcmVlX25ldGRldihkZXYtPm5ldCk7CisKKwkvKiBhc3N1bWluZyB3ZSB1c2VkIGtldmVudGQsIGl0IG11c3QgcXVpZXNjZSB0b28gKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yayAoKTsKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7Cit9CisKK3N0YXRpYyB1OCBfX2luaXQgbmliYmxlICh1bnNpZ25lZCBjaGFyIGMpCit7CisJaWYgKGxpa2VseSAoaXNkaWdpdCAoYykpKQorCQlyZXR1cm4gYyAtICcwJzsKKwljID0gdG91cHBlciAoYyk7CisJaWYgKGxpa2VseSAoaXN4ZGlnaXQgKGMpKSkKKwkJcmV0dXJuIDEwICsgYyAtICdBJzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGdldF9ldGhlcl9hZGRyIChjb25zdCBjaGFyICpzdHIsIHU4ICpkZXZfYWRkcikKK3sKKwlpZiAoc3RyKSB7CisJCXVuc2lnbmVkCWk7CisKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJdW5zaWduZWQgY2hhciBudW07CisKKwkJCWlmKCgqc3RyID09ICcuJykgfHwgKCpzdHIgPT0gJzonKSkKKwkJCQlzdHIrKzsKKwkJCW51bSA9IG5pYmJsZSgqc3RyKyspIDw8IDQ7CisJCQludW0gfD0gKG5pYmJsZSgqc3RyKyspKTsKKwkJCWRldl9hZGRyIFtpXSA9IG51bTsKKwkJfQorCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkciAoZGV2X2FkZHIpKQorCQkJcmV0dXJuOworCX0KKwlyYW5kb21fZXRoZXJfYWRkcihkZXZfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitldGhfYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXU4CQkJY2RjID0gMSwgemxwID0gMSwgcm5kaXMgPSAxOworCXN0cnVjdCB1c2JfZXAJCSppbl9lcCwgKm91dF9lcCwgKnN0YXR1c19lcCA9IE5VTEw7CisJaW50CQkJc3RhdHVzID0gLUVOT01FTTsKKworCS8qIHRoZXNlIGZsYWdzIGFyZSBvbmx5IGV2ZXIgY2xlYXJlZDsgY29tcGlsZXIgdGFrZSBub3RlICovCisjaWZuZGVmCURFVl9DT05GSUdfQ0RDCisJY2RjID0gMDsKKyNlbmRpZgorI2lmbmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCXJuZGlzID0gMDsKKyNlbmRpZgorCisJLyogQmVjYXVzZSBtb3N0IGhvc3Qgc2lkZSBVU0Igc3RhY2tzIGhhbmRsZSBDREMgRXRoZXJuZXQsIHRoYXQKKwkgKiBzdGFuZGFyZCBwcm90b2NvbCBpcyBfc3Ryb25nbHlfIHByZWZlcnJlZCBmb3IgaW50ZXJvcCBwdXJwb3Nlcy4KKwkgKiAoQnkgZXZlcnlvbmUgZXhjZXB0IE1pY3Jvc29mdC4pCisJICovCisJaWYgKGdhZGdldF9pc19uZXQyMjgwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfZHVtbXkgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAyKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAzKTsKKwkJLyogcHhhIGRvZXNuJ3Qgc3VwcG9ydCBhbHRzZXR0aW5ncyAqLworCQljZGMgPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA0KTsKKwkJLyogc2ggZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgb3IgY29uZmlncyAqLworCQljZGMgPSAwOworCQlybmRpcyA9IDA7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfc2ExMTAwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNSk7CisJCS8qIGhhcmR3YXJlIGNhbid0IHdyaXRlIHpscHMgKi8KKwkJemxwID0gMDsKKwkJLyogc2ExMTAwIENBTiBkbyBDREMsIHdpdGhvdXQgc3RhdHVzIGVuZHBvaW50IC4uLiB3ZSB1c2UKKwkJICogbm9uLUNEQyB0byBiZSBjb21wYXRpYmxlIHdpdGggQVJNIExpbnV4LTIuNCAidXNiLWV0aCIuCisJCSAqLworCQljZGMgPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2dva3UgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA2KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19tcTExeHggKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA3KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19vbWFwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwOCk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbGg3YTQweChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwOSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbjk2MDQoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTApOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YTI3eChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMSk7CisgCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzYzI0MTAoZ2FkZ2V0KSkgeworIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEyKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19hdDkxKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEzKTsKKwl9IGVsc2UgeworCQkvKiBjYW4ndCBhc3N1bWUgQ0RDIHdvcmtzLiAgZG9uJ3Qgd2FudCB0byBkZWZhdWx0IHRvCisJCSAqIGFueXRoaW5nIGxlc3MgZnVuY3Rpb25hbCBvbiBDREMtY2FwYWJsZSBoYXJkd2FyZSwKKwkJICogc28gd2UgZmFpbCBpbiB0aGlzIGNhc2UuCisJCSAqLworCQlkZXZfZXJyICgmZ2FkZ2V0LT5kZXYsCisJCQkiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAorCQkJZ2FkZ2V0LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNucHJpbnRmIChtYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIsICIlcyAlcy8lcyIsCisJCXN5c3RlbV91dHNuYW1lLnN5c25hbWUsIHN5c3RlbV91dHNuYW1lLnJlbGVhc2UsCisJCWdhZGdldC0+bmFtZSk7CisKKwkvKiBJZiB0aGVyZSdzIGFuIFJORElTIGNvbmZpZ3VyYXRpb24sIHRoYXQncyB3aGF0IFdpbmRvd3Mgd2FudHMgdG8KKwkgKiBiZSB1c2luZyAuLi4gc28gdXNlIHRoZXNlIHByb2R1Y3QgSURzIGhlcmUgYW5kIGluIHRoZSAibGludXguaW5mIgorCSAqIG5lZWRlZCB0byBpbnN0YWxsIE1TRlQgZHJpdmVycy4gIEN1cnJlbnQgTGludXgga2VybmVscyB3aWxsIHVzZQorCSAqIHRoZSBzZWNvbmQgY29uZmlndXJhdGlvbiBpZiBpdCdzIENEQyBFdGhlcm5ldCwgYW5kIG5lZWQgc29tZSBoZWxwCisJICogdG8gY2hvb3NlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG90aGVyd2lzZS4KKwkgKi8KKwlpZiAocm5kaXMpIHsKKwkJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihSTkRJU19WRU5ET1JfTlVNKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUk5ESVNfUFJPRFVDVF9OVU0pOworCQlzbnByaW50ZiAocHJvZHVjdF9kZXNjLCBzaXplb2YgcHJvZHVjdF9kZXNjLAorCQkJIlJORElTLyVzIiwgZHJpdmVyX2Rlc2MpOworCisJLyogQ0RDIHN1YnNldCAuLi4gcmVjb2duaXplZCBieSBMaW51eCBzaW5jZSAyLjQuMTAsIGJ1dCBXaW5kb3dzCisJICogZHJpdmVycyBhcmVuJ3Qgd2lkZWx5IGF2YWlsYWJsZS4KKwkgKi8KKwl9IGVsc2UgaWYgKCFjZGMpIHsKKwkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOworCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNJTVBMRV9WRU5ET1JfTlVNKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU0lNUExFX1BST0RVQ1RfTlVNKTsKKwl9CisKKwkvKiBzdXBwb3J0IG9wdGlvbmFsIHZlbmRvci9kaXN0cm8gY3VzdG9taXphdGlvbiAqLworCWlmIChpZFZlbmRvcikgeworCQlpZiAoIWlkUHJvZHVjdCkgeworCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LCAiaWRWZW5kb3IgbmVlZHMgaWRQcm9kdWN0IVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9IGNwdV90b19sZTE2KGlkVmVuZG9yKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gY3B1X3RvX2xlMTYoaWRQcm9kdWN0KTsKKwkJaWYgKGJjZERldmljZSkKKwkJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KGJjZERldmljZSk7CisJfQorCWlmIChpTWFudWZhY3R1cmVyKQorCQlzdHJsY3B5IChtYW51ZmFjdHVyZXIsIGlNYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIpOworCWlmIChpUHJvZHVjdCkKKwkJc3RybGNweSAocHJvZHVjdF9kZXNjLCBpUHJvZHVjdCwgc2l6ZW9mIHByb2R1Y3RfZGVzYyk7CisKKwkvKiBhbGwgd2UgcmVhbGx5IG5lZWQgaXMgYnVsayBJTi9PVVQgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldCAoZ2FkZ2V0KTsKKwlpbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zb3VyY2VfZGVzYyk7CisJaWYgKCFpbl9lcCkgeworYXV0b2NvbmZfZmFpbDoKKwkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LAorCQkJImNhbid0IGF1dG9jb25maWd1cmUgb24gJXNcbiIsCisJCQlnYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJRVBfSU5fTkFNRSA9IGluX2VwLT5uYW1lOworCWluX2VwLT5kcml2ZXJfZGF0YSA9IGluX2VwOwkvKiBjbGFpbSAqLworCQorCW91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zaW5rX2Rlc2MpOworCWlmICghb3V0X2VwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJRVBfT1VUX05BTUUgPSBvdXRfZXAtPm5hbWU7CisJb3V0X2VwLT5kcml2ZXJfZGF0YSA9IG91dF9lcDsJLyogY2xhaW0gKi8KKworI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJLyogQ0RDIEV0aGVybmV0IGNvbnRyb2wgaW50ZXJmYWNlIGRvZXNuJ3QgcmVxdWlyZSBhIHN0YXR1cyBlbmRwb2ludC4KKwkgKiBTaW5jZSBzb21lIGhvc3RzIGV4cGVjdCBvbmUsIHRyeSB0byBhbGxvY2F0ZSBvbmUgYW55d2F5LgorCSAqLworCWlmIChjZGMgfHwgcm5kaXMpIHsKKwkJc3RhdHVzX2VwID0gdXNiX2VwX2F1dG9jb25maWcgKGdhZGdldCwgJmZzX3N0YXR1c19kZXNjKTsKKwkJaWYgKHN0YXR1c19lcCkgeworCQkJRVBfU1RBVFVTX05BTUUgPSBzdGF0dXNfZXAtPm5hbWU7CisJCQlzdGF0dXNfZXAtPmRyaXZlcl9kYXRhID0gc3RhdHVzX2VwOwkvKiBjbGFpbSAqLworCQl9IGVsc2UgaWYgKHJuZGlzKSB7CisJCQlkZXZfZXJyICgmZ2FkZ2V0LT5kZXYsCisJCQkJImNhbid0IHJ1biBSTkRJUyBvbiAlc1xuIiwKKwkJCQlnYWRnZXQtPm5hbWUpOworCQkJcmV0dXJuIC1FTk9ERVY7CisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkJLyogcHhhMjV4IG9ubHkgZG9lcyBDREMgc3Vic2V0OyBvZnRlbiB1c2VkIHdpdGggUk5ESVMgKi8KKwkJfSBlbHNlIGlmIChjZGMpIHsKKwkJCWNvbnRyb2xfaW50Zi5iTnVtRW5kcG9pbnRzID0gMDsKKwkJCS8qIEZJWE1FIHJlbW92ZSBlbmRwb2ludCBmcm9tIGRlc2NyaXB0b3IgbGlzdCAqLworI2VuZGlmCisJCX0KKwl9CisjZW5kaWYKKworCS8qIG9uZSBjb25maWc6ICBjZGMsIGVsc2UgbWluaW1hbCBzdWJzZXQgKi8KKwlpZiAoIWNkYykgeworCQlldGhfY29uZmlnLmJOdW1JbnRlcmZhY2VzID0gMTsKKwkJZXRoX2NvbmZpZy5pQ29uZmlndXJhdGlvbiA9IFNUUklOR19TVUJTRVQ7CisJCWZzX3N1YnNldF9kZXNjcmlwdG9ycygpOworCQloc19zdWJzZXRfZGVzY3JpcHRvcnMoKTsKKwl9CisKKwkvKiBGb3Igbm93IFJORElTIGlzIGFsd2F5cyBhIHNlY29uZCBjb25maWcgKi8KKwlpZiAocm5kaXMpCisJCWRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucyA9IDI7CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpZiAocm5kaXMpCisJCWRldl9xdWFsaWZpZXIuYk51bUNvbmZpZ3VyYXRpb25zID0gMjsKKwllbHNlIGlmICghY2RjKQorCQlkZXZfcXVhbGlmaWVyLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKworCS8qIGFzc3VtZXMgZXAwIHVzZXMgdGhlIHNhbWUgdmFsdWUgZm9yIGJvdGggc3BlZWRzIC4uLiAqLworCWRldl9xdWFsaWZpZXIuYk1heFBhY2tldFNpemUwID0gZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwOworCisJLyogYW5kIHRoYXQgYWxsIGVuZHBvaW50cyBhcmUgZHVhbC1zcGVlZCAqLworCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPSBmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWhzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0gZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwlpZiAoRVBfU1RBVFVTX05BTUUpCisJCWhzX3N0YXR1c19kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX3N0YXR1c19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjZW5kaWYKKyNlbmRpZgkvKiBEVUFMU1BFRUQgKi8KKworCWRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQgKGdhZGdldCk7CisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQlldGhfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJCWV0aF9jb25maWcuYk1heFBvd2VyID0gNDsKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCQlybmRpc19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJcm5kaXNfY29uZmlnLmJNYXhQb3dlciA9IDQ7CisjZW5kaWYKKwl9CisKKyAJbmV0ID0gYWxsb2NfZXRoZXJkZXYgKHNpemVvZiAqZGV2KTsKKyAJaWYgKCFuZXQpCisJCXJldHVybiBzdGF0dXM7CisJZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CisJSU5JVF9XT1JLICgmZGV2LT53b3JrLCBldGhfd29yaywgZGV2KTsKKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+dHhfcmVxcyk7CisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPnJ4X3JlcXMpOworCisJLyogbmV0d29yayBkZXZpY2Ugc2V0dXAgKi8KKwlkZXYtPm5ldCA9IG5ldDsKKwlTRVRfTU9EVUxFX09XTkVSIChuZXQpOworCXN0cmNweSAobmV0LT5uYW1lLCAidXNiJWQiKTsKKwlkZXYtPmNkYyA9IGNkYzsKKwlkZXYtPnpscCA9IHpscDsKKworCWRldi0+aW5fZXAgPSBpbl9lcDsKKwlkZXYtPm91dF9lcCA9IG91dF9lcDsKKwlkZXYtPnN0YXR1c19lcCA9IHN0YXR1c19lcDsKKworCS8qIE1vZHVsZSBwYXJhbXMgZm9yIHRoZXNlIGFkZHJlc3NlcyBzaG91bGQgY29tZSBmcm9tIElEIHByb21zLgorCSAqIFRoZSBob3N0IHNpZGUgYWRkcmVzcyBpcyB1c2VkIHdpdGggQ0RDIGFuZCBSTkRJUywgYW5kIGNvbW1vbmx5CisJICogZW5kcyB1cCBpbiBhIHBlcnNpc3RlbnQgY29uZmlnIGRhdGFiYXNlLgorCSAqLworCWdldF9ldGhlcl9hZGRyKGRldl9hZGRyLCBuZXQtPmRldl9hZGRyKTsKKwlpZiAoY2RjIHx8IHJuZGlzKSB7CisJCWdldF9ldGhlcl9hZGRyKGhvc3RfYWRkciwgZGV2LT5ob3N0X21hYyk7CisjaWZkZWYJREVWX0NPTkZJR19DREMKKwkJc25wcmludGYgKGV0aGFkZHIsIHNpemVvZiBldGhhZGRyLCAiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKKwkJCWRldi0+aG9zdF9tYWMgWzBdLCBkZXYtPmhvc3RfbWFjIFsxXSwKKwkJCWRldi0+aG9zdF9tYWMgWzJdLCBkZXYtPmhvc3RfbWFjIFszXSwKKwkJCWRldi0+aG9zdF9tYWMgWzRdLCBkZXYtPmhvc3RfbWFjIFs1XSk7CisjZW5kaWYKKwl9CisKKwlpZiAocm5kaXMpIHsKKwkJc3RhdHVzID0gcm5kaXNfaW5pdCgpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LCAiY2FuJ3QgaW5pdCBSTkRJUywgJWRcbiIsCisJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCW5ldC0+Y2hhbmdlX210dSA9IGV0aF9jaGFuZ2VfbXR1OworCW5ldC0+Z2V0X3N0YXRzID0gZXRoX2dldF9zdGF0czsKKwluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGV0aF9zdGFydF94bWl0OworCW5ldC0+b3BlbiA9IGV0aF9vcGVuOworCW5ldC0+c3RvcCA9IGV0aF9zdG9wOworCS8vIHdhdGNoZG9nX3RpbWVvLCB0eF90aW1lb3V0IC4uLgorCS8vIHNldF9tdWx0aWNhc3RfbGlzdAorCVNFVF9FVEhUT09MX09QUyhuZXQsICZvcHMpOworCisJLyogcHJlYWxsb2NhdGUgY29udHJvbCBtZXNzYWdlIGRhdGEgYW5kIGJ1ZmZlciAqLworCWRldi0+cmVxID0gZXRoX3JlcV9hbGxvYyAoZ2FkZ2V0LT5lcDAsIFVTQl9CVUZTSVopOworCWlmICghZGV2LT5yZXEpCisJCWdvdG8gZmFpbDsKKwlkZXYtPnJlcS0+Y29tcGxldGUgPSBldGhfc2V0dXBfY29tcGxldGU7CisKKwkvKiAuLi4gYW5kIG1heWJlIGxpa2V3aXNlIGZvciBzdGF0dXMgdHJhbnNmZXIgKi8KKwlpZiAoZGV2LT5zdGF0dXNfZXApIHsKKwkJZGV2LT5zdGF0X3JlcSA9IGV0aF9yZXFfYWxsb2MgKGRldi0+c3RhdHVzX2VwLAorCQkJCQlTVEFUVVNfQllURUNPVU5UKTsKKwkJaWYgKCFkZXYtPnN0YXRfcmVxKSB7CisJCQlldGhfcmVxX2ZyZWUgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwkvKiBmaW5pc2ggaG9va3VwIHRvIGxvd2VyIGxheWVyIC4uLiAqLworCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkKKwkvKiB0d28ga2luZHMgb2YgaG9zdC1pbml0aWF0ZWQgc3RhdGUgY2hhbmdlczoKKwkgKiAgLSBpZmYgREFUQSB0cmFuc2ZlciBpcyBhY3RpdmUsIGNhcnJpZXIgaXMgIm9uIgorCSAqICAtIHR4IHF1ZXVlaW5nIGVuYWJsZWQgaWYgb3BlbiAqYW5kKiBjYXJyaWVyIGlzICJvbiIKKwkgKi8KKwluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7CisJbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKKworIAkvLyBTRVRfTkVUREVWX0RFViAoZGV2LT5uZXQsICZnYWRnZXQtPmRldik7CisgCXN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldiAoZGV2LT5uZXQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWwxOworCisJSU5GTyAoZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOworCUlORk8gKGRldiwgInVzaW5nICVzLCBPVVQgJXMgSU4gJXMlcyVzXG4iLCBnYWRnZXQtPm5hbWUsCisJCUVQX09VVF9OQU1FLCBFUF9JTl9OQU1FLAorCQlFUF9TVEFUVVNfTkFNRSA/ICIgU1RBVFVTICIgOiAiIiwKKwkJRVBfU1RBVFVTX05BTUUgPyBFUF9TVEFUVVNfTkFNRSA6ICIiCisJCSk7CisJSU5GTyAoZGV2LCAiTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQluZXQtPmRldl9hZGRyIFswXSwgbmV0LT5kZXZfYWRkciBbMV0sCisJCW5ldC0+ZGV2X2FkZHIgWzJdLCBuZXQtPmRldl9hZGRyIFszXSwKKwkJbmV0LT5kZXZfYWRkciBbNF0sIG5ldC0+ZGV2X2FkZHIgWzVdKTsKKworCWlmIChjZGMgfHwgcm5kaXMpCisJCUlORk8gKGRldiwgIkhPU1QgTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJZGV2LT5ob3N0X21hYyBbMF0sIGRldi0+aG9zdF9tYWMgWzFdLAorCQkJZGV2LT5ob3N0X21hYyBbMl0sIGRldi0+aG9zdF9tYWMgWzNdLAorCQkJZGV2LT5ob3N0X21hYyBbNF0sIGRldi0+aG9zdF9tYWMgWzVdKTsKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJaWYgKHJuZGlzKSB7CisJCXUzMgl2ZW5kb3JJRCA9IDA7CisKKwkJLyogRklYTUUgUk5ESVMgdmVuZG9yIGlkID09ICJ2ZW5kb3IgTklDIGNvZGUiID09ID8gKi8KKwkJCisJCWRldi0+cm5kaXNfY29uZmlnID0gcm5kaXNfcmVnaXN0ZXIgKHJuZGlzX2NvbnRyb2xfYWNrKTsKKwkJaWYgKGRldi0+cm5kaXNfY29uZmlnIDwgMCkgeworZmFpbDA6CisJCQl1bnJlZ2lzdGVyX25ldGRldiAoZGV2LT5uZXQpOworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQkKKwkJLyogdGhlc2Ugc2V0IHVwIGEgbG90IG9mIHRoZSBPSURzIHRoYXQgUk5ESVMgbmVlZHMgKi8KKwkJcm5kaXNfc2V0X2hvc3RfbWFjIChkZXYtPnJuZGlzX2NvbmZpZywgZGV2LT5ob3N0X21hYyk7CisJCWlmIChybmRpc19zZXRfcGFyYW1fZGV2IChkZXYtPnJuZGlzX2NvbmZpZywgZGV2LT5uZXQsCisJCQkJCSAmZGV2LT5zdGF0cykpCisJCQlnb3RvIGZhaWwwOworCQlpZiAocm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAoZGV2LT5ybmRpc19jb25maWcsIHZlbmRvcklELAorCQkJCQkgICAgbWFudWZhY3R1cmVyKSkKKwkJCWdvdG8gZmFpbDA7CisJCWlmIChybmRpc19zZXRfcGFyYW1fbWVkaXVtIChkZXYtPnJuZGlzX2NvbmZpZywKKwkJCQkJICAgIE5ESVNfTUVESVVNXzgwMl8zLAorCQkJCQkgICAgMCkpCisJCQlnb3RvIGZhaWwwOworCQlJTkZPIChkZXYsICJSTkRJUyByZWFkeVxuIik7CisJfQorI2VuZGlmCQorCisJcmV0dXJuIHN0YXR1czsKKworZmFpbDE6CisJZGV2X2RiZygmZ2FkZ2V0LT5kZXYsICJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLCAlZFxuIiwgc3RhdHVzKTsKK2ZhaWw6CisJZXRoX3VuYmluZCAoZ2FkZ2V0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorZXRoX3N1c3BlbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlERUJVRyAoZGV2LCAic3VzcGVuZFxuIik7CisJZGV2LT5zdXNwZW5kZWQgPSAxOworfQorCitzdGF0aWMgdm9pZAorZXRoX3Jlc3VtZSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCURFQlVHIChkZXYsICJyZXN1bWVcbiIpOworCWRldi0+c3VzcGVuZGVkID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBldGhfZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorI2VuZGlmCisJLmZ1bmN0aW9uCT0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsCisJLmJpbmQJCT0gZXRoX2JpbmQsCisJLnVuYmluZAkJPSBldGhfdW5iaW5kLAorCisJLnNldHVwCQk9IGV0aF9zZXR1cCwKKwkuZGlzY29ubmVjdAk9IGV0aF9kaXNjb25uZWN0LAorCisJLnN1c3BlbmQJPSBldGhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGV0aF9yZXN1bWUsCisKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAuc2h1dGRvd24gPSAuLi4KKwkJLy8gLnN1c3BlbmQgPSAuLi4KKwkJLy8gLnJlc3VtZSA9IC4uLgorCX0sCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCwgQmVuZWRpa3QgU3BhbmdlciIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKQoreworCXJldHVybiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoJmV0aF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyICgmZXRoX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODU3ZjBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC0wLDAgKzEsNDEzOSBAQAorLyoKKyAqIGZpbGVfc3RvcmFnZS5jIC0tIEZpbGUtYmFja2VkIFVTQiBTdG9yYWdlIEdhZGdldCwgZm9yIFVTQiBkZXZlbG9wbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IEFsYW4gU3Rlcm4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBtYXkgbm90IGJlIHVzZWQKKyAqICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisvKgorICogVGhlIEZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IGFjdHMgYXMgYSBVU0IgTWFzcyBTdG9yYWdlIGRldmljZSwKKyAqIGFwcGVhcmluZyB0byB0aGUgaG9zdCBhcyBhIGRpc2sgZHJpdmUuICBJbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgYW4KKyAqIGV4YW1wbGUgb2YgYSBnZW51aW5lbHkgdXNlZnVsIGdhZGdldCBkcml2ZXIgZm9yIGEgVVNCIGRldmljZSwgaXQgYWxzbworICogaWxsdXN0cmF0ZXMgYSB0ZWNobmlxdWUgb2YgZG91YmxlLWJ1ZmZlcmluZyBmb3IgaW5jcmVhc2VkIHRocm91Z2hwdXQuCisgKiBMYXN0IGJ1dCBub3QgbGVhc3QsIGl0IGdpdmVzIGFuIGVhc3kgd2F5IHRvIHByb2JlIHRoZSBiZWhhdmlvciBvZiB0aGUKKyAqIE1hc3MgU3RvcmFnZSBkcml2ZXJzIGluIGEgVVNCIGhvc3QuCisgKgorICogQmFja2luZyBzdG9yYWdlIGlzIHByb3ZpZGVkIGJ5IGEgcmVndWxhciBmaWxlIG9yIGEgYmxvY2sgZGV2aWNlLCBzcGVjaWZpZWQKKyAqIGJ5IHRoZSAiZmlsZSIgbW9kdWxlIHBhcmFtZXRlci4gIEFjY2VzcyBjYW4gYmUgbGltaXRlZCB0byByZWFkLW9ubHkgYnkKKyAqIHNldHRpbmcgdGhlIG9wdGlvbmFsICJybyIgbW9kdWxlIHBhcmFtZXRlci4gIFRoZSBnYWRnZXQgd2lsbCBpbmRpY2F0ZSB0aGF0CisgKiBpdCBoYXMgcmVtb3ZhYmxlIG1lZGlhIGlmIHRoZSBvcHRpb25hbCAicmVtb3ZhYmxlIiBtb2R1bGUgcGFyYW1ldGVyIGlzIHNldC4KKyAqCisgKiBUaGUgZ2FkZ2V0IHN1cHBvcnRzIHRoZSBDb250cm9sLUJ1bGsgKENCKSwgQ29udHJvbC1CdWxrLUludGVycnVwdCAoQ0JJKSwKKyAqIGFuZCBCdWxrLU9ubHkgKGFsc28ga25vd24gYXMgQnVsay1CdWxrLUJ1bGsgb3IgQkJCKSB0cmFuc3BvcnRzLCBzZWxlY3RlZAorICogYnkgdGhlIG9wdGlvbmFsICJ0cmFuc3BvcnQiIG1vZHVsZSBwYXJhbWV0ZXIuICBJdCBhbHNvIHN1cHBvcnRzIHRoZQorICogZm9sbG93aW5nIHByb3RvY29sczogUkJDICgweDAxKSwgQVRBUEkgb3IgU0ZGLTgwMjBpICgweDAyKSwgUUlDLTE1NyAoMGMwMyksCisgKiBVRkkgKDB4MDQpLCBTRkYtODA3MGkgKDB4MDUpLCBhbmQgdHJhbnNwYXJlbnQgU0NTSSAoMHgwNiksIHNlbGVjdGVkIGJ5CisgKiB0aGUgb3B0aW9uYWwgInByb3RvY29sIiBtb2R1bGUgcGFyYW1ldGVyLiAgSW4gYWRkaXRpb24sIHRoZSBkZWZhdWx0CisgKiBWZW5kb3IgSUQsIFByb2R1Y3QgSUQsIGFuZCByZWxlYXNlIG51bWJlciBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAqCisgKiBUaGVyZSBpcyBzdXBwb3J0IGZvciBtdWx0aXBsZSBsb2dpY2FsIHVuaXRzIChMVU5zKSwgZWFjaCBvZiB3aGljaCBoYXMKKyAqIGl0cyBvd24gYmFja2luZyBmaWxlLiAgVGhlIG51bWJlciBvZiBMVU5zIGNhbiBiZSBzZXQgdXNpbmcgdGhlIG9wdGlvbmFsCisgKiAibHVucyIgbW9kdWxlIHBhcmFtZXRlciAoYW55d2hlcmUgZnJvbSAxIHRvIDgpLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGZpbGVzIGFyZSBzcGVjaWZpZWQgdXNpbmcgY29tbWEtc2VwYXJhdGVkIGxpc3RzIGZvciAiZmlsZSIgYW5kICJybyIuCisgKiBUaGUgZGVmYXVsdCBudW1iZXIgb2YgTFVOcyBpcyB0YWtlbiBmcm9tIHRoZSBudW1iZXIgb2YgImZpbGUiIGVsZW1lbnRzOworICogaXQgaXMgMSBpZiAiZmlsZSIgaXMgbm90IGdpdmVuLiAgSWYgInJlbW92YWJsZSIgaXMgbm90IHNldCB0aGVuIGEgYmFja2luZworICogZmlsZSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZWFjaCBMVU4uICBJZiBpdCBpcyBzZXQsIHRoZW4gYW4gdW5zcGVjaWZpZWQKKyAqIG9yIGVtcHR5IGJhY2tpbmcgZmlsZW5hbWUgbWVhbnMgdGhlIExVTidzIG1lZGl1bSBpcyBub3QgbG9hZGVkLgorICoKKyAqIFJlcXVpcmVtZW50cyBhcmUgbW9kZXN0OyBvbmx5IGEgYnVsay1pbiBhbmQgYSBidWxrLW91dCBlbmRwb2ludCBhcmUKKyAqIG5lZWRlZCAoYW4gaW50ZXJydXB0LW91dCBlbmRwb2ludCBpcyBhbHNvIG5lZWRlZCBmb3IgQ0JJKS4gIFRoZSBtZW1vcnkKKyAqIHJlcXVpcmVtZW50IGFtb3VudHMgdG8gdHdvIDE2SyBidWZmZXJzLCBzaXplIGNvbmZpZ3VyYWJsZSBieSBhIHBhcmFtZXRlci4KKyAqIFN1cHBvcnQgaXMgaW5jbHVkZWQgZm9yIGJvdGggZnVsbC1zcGVlZCBhbmQgaGlnaC1zcGVlZCBvcGVyYXRpb24uCisgKgorICogTW9kdWxlIG9wdGlvbnM6CisgKgorICoJZmlsZT1maWxlbmFtZVssZmlsZW5hbWUuLi5dCisgKgkJCQlSZXF1aXJlZCBpZiAicmVtb3ZhYmxlIiBpcyBub3Qgc2V0LCBuYW1lcyBvZgorICoJCQkJCXRoZSBmaWxlcyBvciBibG9jayBkZXZpY2VzIHVzZWQgZm9yCisgKgkJCQkJYmFja2luZyBzdG9yYWdlCisgKglybz1iWyxiLi4uXQkJRGVmYXVsdCBmYWxzZSwgYm9vbGVhbnMgZm9yIHJlYWQtb25seSBhY2Nlc3MKKyAqCXJlbW92YWJsZQkJRGVmYXVsdCBmYWxzZSwgYm9vbGVhbiBmb3IgcmVtb3ZhYmxlIG1lZGlhCisgKglsdW5zPU4JCQlEZWZhdWx0IE4gPSBudW1iZXIgb2YgZmlsZW5hbWVzLCBudW1iZXIgb2YKKyAqCQkJCQlMVU5zIHRvIHN1cHBvcnQKKyAqCXRyYW5zcG9ydD1YWFgJCURlZmF1bHQgQkJCLCB0cmFuc3BvcnQgbmFtZSAoQ0IsIENCSSwgb3IgQkJCKQorICoJcHJvdG9jb2w9WVlZCQlEZWZhdWx0IFNDU0ksIHByb3RvY29sIG5hbWUgKFJCQywgODAyMCBvcgorICoJCQkJCUFUQVBJLCBRSUMsIFVGSSwgODA3MCwgb3IgU0NTSTsKKyAqCQkJCQlhbHNvIDEgLSA2KQorICoJdmVuZG9yPTB4VlZWVgkJRGVmYXVsdCAweDA1MjUgKE5ldENoaXApLCBVU0IgVmVuZG9yIElECisgKglwcm9kdWN0PTB4UFBQUAkJRGVmYXVsdCAweGE0YTUgKEZTRyksIFVTQiBQcm9kdWN0IElECisgKglyZWxlYXNlPTB4UlJSUgkJT3ZlcnJpZGUgdGhlIFVTQiByZWxlYXNlIG51bWJlciAoYmNkRGV2aWNlKQorICoJYnVmbGVuPU4JCURlZmF1bHQgTj0xNjM4NCwgYnVmZmVyIHNpemUgdXNlZCAod2lsbCBiZQorICoJCQkJCXJvdW5kZWQgZG93biB0byBhIG11bHRpcGxlIG9mCisgKgkJCQkJUEFHRV9DQUNIRV9TSVpFKQorICoJc3RhbGwJCQlEZWZhdWx0IGRldGVybWluZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mCisgKgkJCQkJVVNCIGRldmljZSBjb250cm9sbGVyICh1c3VhbGx5IHRydWUpLAorICoJCQkJCWJvb2xlYW4gdG8gcGVybWl0IHRoZSBkcml2ZXIgdG8gaGFsdAorICoJCQkJCWJ1bGsgZW5kcG9pbnRzCisgKgorICogSWYgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0LCBvbmx5IHRoZSAiZmlsZSIsICJybyIsCisgKiAicmVtb3ZhYmxlIiwgYW5kICJsdW5zIiBvcHRpb25zIGFyZSBhdmFpbGFibGU7IGRlZmF1bHQgdmFsdWVzIGFyZSB1c2VkCisgKiBmb3IgZXZlcnl0aGluZyBlbHNlLgorICoKKyAqIFRoZSBwYXRobmFtZXMgb2YgdGhlIGJhY2tpbmcgZmlsZXMgYW5kIHRoZSBybyBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIGluCisgKiB0aGUgYXR0cmlidXRlIGZpbGVzICJmaWxlIiBhbmQgInJvIiBpbiB0aGUgbHVuPG4+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAqIGdhZGdldCdzIHN5c2ZzIGRpcmVjdG9yeS4gIElmIHRoZSAicmVtb3ZhYmxlIiBvcHRpb24gaXMgc2V0LCB3cml0aW5nIHRvCisgKiB0aGVzZSBmaWxlcyB3aWxsIHNpbXVsYXRlIGVqZWN0aW5nL2xvYWRpbmcgdGhlIG1lZGl1bSAod3JpdGluZyBhbiBlbXB0eQorICogbGluZSBtZWFucyBlamVjdCkgYW5kIGFkanVzdGluZyBhIHdyaXRlLWVuYWJsZSB0YWIuICBDaGFuZ2VzIHRvIHRoZSBybworICogc2V0dGluZyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0aGUgbWVkaXVtIGlzIGxvYWRlZC4KKyAqCisgKiBUaGlzIGdhZGdldCBkcml2ZXIgaXMgaGVhdmlseSBiYXNlZCBvbiAiR2FkZ2V0IFplcm8iIGJ5IERhdmlkIEJyb3duZWxsLgorICovCisKKworLyoKKyAqCQkJCURyaXZlciBEZXNpZ24KKyAqCisgKiBUaGUgRlNHIGRyaXZlciBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiAgVGhlcmUgaXMgYSBtYWluIGtlcm5lbAorICogdGhyZWFkIHRoYXQgaGFuZGxlcyBtb3N0IG9mIHRoZSB3b3JrLiAgSW50ZXJydXB0IHJvdXRpbmVzIGZpZWxkCisgKiBjYWxsYmFja3MgZnJvbSB0aGUgY29udHJvbGxlciBkcml2ZXI6IGJ1bGstIGFuZCBpbnRlcnJ1cHQtcmVxdWVzdAorICogY29tcGxldGlvbiBub3RpZmljYXRpb25zLCBlbmRwb2ludC0wIGV2ZW50cywgYW5kIGRpc2Nvbm5lY3QgZXZlbnRzLgorICogQ29tcGxldGlvbiBldmVudHMgYXJlIHBhc3NlZCB0byB0aGUgbWFpbiB0aHJlYWQgYnkgd2FrZXVwIGNhbGxzLiAgTWFueQorICogZXAwIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGF0IGludGVycnVwdCB0aW1lLCBidXQgU2V0SW50ZXJmYWNlLAorICogU2V0Q29uZmlndXJhdGlvbiwgYW5kIGRldmljZSByZXNldCByZXF1ZXN0cyBhcmUgZm9yd2FyZGVkIHRvIHRoZQorICogdGhyZWFkIGluIHRoZSBmb3JtIG9mICJleGNlcHRpb25zIiB1c2luZyBTSUdVU1IxIHNpZ25hbHMgKHNpbmNlIHRoZXkKKyAqIHNob3VsZCBpbnRlcnJ1cHQgYW55IG9uZ29pbmcgZmlsZSBJL08gb3BlcmF0aW9ucykuCisgKgorICogVGhlIHRocmVhZCdzIG1haW4gcm91dGluZSBpbXBsZW1lbnRzIHRoZSBzdGFuZGFyZCBjb21tYW5kL2RhdGEvc3RhdHVzCisgKiBwYXJ0cyBvZiBhIFNDU0kgaW50ZXJhY3Rpb24uICBJdCBhbmQgaXRzIHN1YnJvdXRpbmVzIGFyZSBmdWxsIG9mIHRlc3RzCisgKiBmb3IgcGVuZGluZyBzaWduYWxzL2V4Y2VwdGlvbnMgLS0gYWxsIHRoaXMgcG9sbGluZyBpcyBuZWNlc3Nhcnkgc2luY2UKKyAqIHRoZSBrZXJuZWwgaGFzIG5vIHNldGptcC9sb25nam1wIGVxdWl2YWxlbnRzLiAgKE1heWJlIHRoaXMgaXMgYW4KKyAqIGluZGljYXRpb24gdGhhdCB0aGUgZHJpdmVyIHJlYWxseSB3YW50cyB0byBiZSBydW5uaW5nIGluIHVzZXJzcGFjZS4pCisgKiBBbiBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBzbyBsb25nIGFzIHRoZSB0aHJlYWQgaXMgYWxpdmUgaXQga2VlcHMgYW4KKyAqIG9wZW4gcmVmZXJlbmNlIHRvIHRoZSBiYWNraW5nIGZpbGUuICBUaGlzIHdpbGwgcHJldmVudCB1bm1vdW50aW5nCisgKiB0aGUgYmFja2luZyBmaWxlJ3MgdW5kZXJseWluZyBmaWxlc3lzdGVtIGFuZCBjb3VsZCBjYXVzZSBwcm9ibGVtcworICogZHVyaW5nIHN5c3RlbSBzaHV0ZG93biwgZm9yIGV4YW1wbGUuICBUbyBwcmV2ZW50IHN1Y2ggcHJvYmxlbXMsIHRoZQorICogdGhyZWFkIGNhdGNoZXMgSU5ULCBURVJNLCBhbmQgS0lMTCBzaWduYWxzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8KKyAqIGFuIEVYSVQgZXhjZXB0aW9uLgorICoKKyAqIEluIG5vcm1hbCBvcGVyYXRpb24gdGhlIG1haW4gdGhyZWFkIGlzIHN0YXJ0ZWQgZHVyaW5nIHRoZSBnYWRnZXQncworICogZnNnX2JpbmQoKSBjYWxsYmFjayBhbmQgc3RvcHBlZCBkdXJpbmcgZnNnX3VuYmluZCgpLiAgQnV0IGl0IGNhbiBhbHNvCisgKiBleGl0IHdoZW4gaXQgcmVjZWl2ZXMgYSBzaWduYWwsIGFuZCB0aGVyZSdzIG5vIHBvaW50IGxlYXZpbmcgdGhlCisgKiBnYWRnZXQgcnVubmluZyB3aGVuIHRoZSB0aHJlYWQgaXMgZGVhZC4gIFNvIGp1c3QgYmVmb3JlIHRoZSB0aHJlYWQKKyAqIGV4aXRzLCBpdCBkZXJlZ2lzdGVycyB0aGUgZ2FkZ2V0IGRyaXZlci4gIFRoaXMgbWFrZXMgdGhpbmdzIGEgbGl0dGxlCisgKiB0cmlja3k6IFRoZSBkcml2ZXIgaXMgZGVyZWdpc3RlcmVkIGF0IHR3byBwbGFjZXMsIGFuZCB0aGUgZXhpdGluZworICogdGhyZWFkIGNhbiBpbmRpcmVjdGx5IGNhbGwgZnNnX3VuYmluZCgpIHdoaWNoIGluIHR1cm4gY2FuIHRlbGwgdGhlCisgKiB0aHJlYWQgdG8gZXhpdC4gIFRoZSBmaXJzdCBwcm9ibGVtIGlzIHJlc29sdmVkIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUKKyAqIFJFR0lTVEVSRUQgYXRvbWljIGJpdGZsYWc7IHRoZSBkcml2ZXIgd2lsbCBvbmx5IGJlIGRlcmVnaXN0ZXJlZCBvbmNlLgorICogVGhlIHNlY29uZCBwcm9ibGVtIGlzIHJlc29sdmVkIGJ5IGhhdmluZyBmc2dfdW5iaW5kKCkgY2hlY2sKKyAqIGZzZy0+c3RhdGU7IGl0IHdvbid0IHRyeSB0byBzdG9wIHRoZSB0aHJlYWQgaWYgdGhlIHN0YXRlIGlzIGFscmVhZHkKKyAqIEZTR19TVEFURV9URVJNSU5BVEVELgorICoKKyAqIFRvIHByb3ZpZGUgbWF4aW11bSB0aHJvdWdocHV0LCB0aGUgZHJpdmVyIHVzZXMgYSBjaXJjdWxhciBwaXBlbGluZSBvZgorICogYnVmZmVyIGhlYWRzIChzdHJ1Y3QgZnNnX2J1ZmZoZCkuICBJbiBwcmluY2lwbGUgdGhlIHBpcGVsaW5lIGNhbiBiZQorICogYXJiaXRyYXJpbHkgbG9uZzsgaW4gcHJhY3RpY2UgdGhlIGJlbmVmaXRzIGRvbid0IGp1c3RpZnkgaGF2aW5nIG1vcmUKKyAqIHRoYW4gMiBzdGFnZXMgKGkuZS4sIGRvdWJsZSBidWZmZXJpbmcpLiAgQnV0IGl0IGhlbHBzIHRvIHRoaW5rIG9mIHRoZQorICogcGlwZWxpbmUgYXMgYmVpbmcgYSBsb25nIG9uZS4gIEVhY2ggYnVmZmVyIGhlYWQgY29udGFpbnMgYSBidWxrLWluIGFuZAorICogYSBidWxrLW91dCByZXF1ZXN0IHBvaW50ZXIgKHNpbmNlIHRoZSBidWZmZXIgY2FuIGJlIHVzZWQgZm9yIGJvdGgKKyAqIG91dHB1dCBhbmQgaW5wdXQgLS0gZGlyZWN0aW9ucyBhbHdheXMgYXJlIGdpdmVuIGZyb20gdGhlIGhvc3QncworICogcG9pbnQgb2YgdmlldykgYXMgd2VsbCBhcyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBhbmQgdmFyaW91cyBzdGF0ZQorICogdmFyaWFibGVzLgorICoKKyAqIFVzZSBvZiB0aGUgcGlwZWxpbmUgZm9sbG93cyBhIHNpbXBsZSBwcm90b2NvbC4gIFRoZXJlIGlzIGEgdmFyaWFibGUKKyAqIChmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwpIHRoYXQgcG9pbnRzIHRvIHRoZSBuZXh0IGJ1ZmZlciBoZWFkIHRvIHVzZS4KKyAqIEF0IGFueSB0aW1lIHRoYXQgYnVmZmVyIGhlYWQgbWF5IHN0aWxsIGJlIGluIHVzZSBmcm9tIGFuIGVhcmxpZXIKKyAqIHJlcXVlc3QsIHNvIGVhY2ggYnVmZmVyIGhlYWQgaGFzIGEgc3RhdGUgdmFyaWFibGUgaW5kaWNhdGluZyB3aGV0aGVyCisgKiBpdCBpcyBFTVBUWSwgRlVMTCwgb3IgQlVTWS4gIFR5cGljYWwgdXNlIGludm9sdmVzIHdhaXRpbmcgZm9yIHRoZQorICogYnVmZmVyIGhlYWQgdG8gYmUgRU1QVFksIGZpbGxpbmcgdGhlIGJ1ZmZlciBlaXRoZXIgYnkgZmlsZSBJL08gb3IgYnkKKyAqIFVTQiBJL08gKGR1cmluZyB3aGljaCB0aGUgYnVmZmVyIGhlYWQgaXMgQlVTWSksIGFuZCBtYXJraW5nIHRoZSBidWZmZXIKKyAqIGhlYWQgRlVMTCB3aGVuIHRoZSBJL08gaXMgY29tcGxldGUuICBUaGVuIHRoZSBidWZmZXIgd2lsbCBiZSBlbXB0aWVkCisgKiAoYWdhaW4gcG9zc2libHkgYnkgVVNCIEkvTywgZHVyaW5nIHdoaWNoIGl0IGlzIG1hcmtlZCBCVVNZKSBhbmQKKyAqIGZpbmFsbHkgbWFya2VkIEVNUFRZIGFnYWluIChwb3NzaWJseSBieSBhIGNvbXBsZXRpb24gcm91dGluZSkuCisgKgorICogQSBtb2R1bGUgcGFyYW1ldGVyIHRlbGxzIHRoZSBkcml2ZXIgdG8gYXZvaWQgc3RhbGxpbmcgdGhlIGJ1bGsKKyAqIGVuZHBvaW50cyB3aGVyZXZlciB0aGUgdHJhbnNwb3J0IHNwZWNpZmljYXRpb24gYWxsb3dzLiAgVGhpcyBpcworICogbmVjZXNzYXJ5IGZvciBzb21lIFVEQ3MgbGlrZSB0aGUgU3VwZXJILCB3aGljaCBjYW5ub3QgcmVsaWFibHkgY2xlYXIgYQorICogaGFsdCBvbiBhIGJ1bGsgZW5kcG9pbnQuICBIb3dldmVyLCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdGhlCisgKiBCdWxrLW9ubHkgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhIHN0YWxsLiAgSW4gc3VjaCBjYXNlcyB0aGUgZHJpdmVyCisgKiB3aWxsIGhhbHQgdGhlIGVuZHBvaW50IGFuZCBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCBpdCBzaG91bGQgY2xlYXIKKyAqIHRoZSBoYWx0IGluIHNvZnR3YXJlIGR1cmluZyB0aGUgbmV4dCBkZXZpY2UgcmVzZXQuICBIb3BlZnVsbHkgdGhpcworICogd2lsbCBwZXJtaXQgZXZlcnl0aGluZyB0byB3b3JrIGNvcnJlY3RseS4gIEZ1cnRoZXJtb3JlLCBhbHRob3VnaCB0aGUKKyAqIHNwZWNpZmljYXRpb24gYWxsb3dzIHRoZSBidWxrLW91dCBlbmRwb2ludCB0byBoYWx0IHdoZW4gdGhlIGhvc3Qgc2VuZHMKKyAqIHRvbyBtdWNoIGRhdGEsIGltcGxlbWVudGluZyB0aGlzIHdvdWxkIGNhdXNlIGFuIHVuYXZvaWRhYmxlIHJhY2UuCisgKiBUaGUgZHJpdmVyIHdpbGwgYWx3YXlzIHVzZSB0aGUgIm5vLXN0YWxsIiBhcHByb2FjaCBmb3IgT1VUIHRyYW5zZmVycy4KKyAqCisgKiBPbmUgc3VidGxlIHBvaW50IGNvbmNlcm5zIHNlbmRpbmcgc3RhdHVzLXN0YWdlIHJlc3BvbnNlcyBmb3IgZXAwCisgKiByZXF1ZXN0cy4gIFNvbWUgb2YgdGhlc2UgcmVxdWVzdHMsIHN1Y2ggYXMgZGV2aWNlIHJlc2V0LCBjYW4gaW52b2x2ZQorICogaW50ZXJydXB0aW5nIGFuIG9uZ29pbmcgZmlsZSBJL08gb3BlcmF0aW9uLCB3aGljaCBtaWdodCB0YWtlIGFuCisgKiBhcmJpdHJhcmlseSBsb25nIHRpbWUuICBEdXJpbmcgdGhhdCBkZWxheSB0aGUgaG9zdCBtaWdodCBnaXZlIHVwIG9uCisgKiB0aGUgb3JpZ2luYWwgZXAwIHJlcXVlc3QgYW5kIGlzc3VlIGEgbmV3IG9uZS4gIFdoZW4gdGhhdCBoYXBwZW5zIHRoZQorICogZHJpdmVyIHNob3VsZCBub3Qgbm90aWZ5IHRoZSBob3N0IGFib3V0IGNvbXBsZXRpb24gb2YgdGhlIG9yaWdpbmFsCisgKiByZXF1ZXN0LCBhcyB0aGUgaG9zdCB3aWxsIG5vIGxvbmdlciBiZSB3YWl0aW5nIGZvciBpdC4gIFNvIHRoZSBkcml2ZXIKKyAqIGFzc2lnbnMgdG8gZWFjaCBlcDAgcmVxdWVzdCBhIHVuaXF1ZSB0YWcsIGFuZCBpdCBrZWVwcyB0cmFjayBvZiB0aGUKKyAqIHRhZyB2YWx1ZSBvZiB0aGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggYSBsb25nLXJ1bm5pbmcgZXhjZXB0aW9uCisgKiAoZGV2aWNlLXJlc2V0LCBpbnRlcmZhY2UtY2hhbmdlLCBvciBjb25maWd1cmF0aW9uLWNoYW5nZSkuICBXaGVuIHRoZQorICogZXhjZXB0aW9uIGhhbmRsZXIgaXMgZmluaXNoZWQsIHRoZSBzdGF0dXMtc3RhZ2UgcmVzcG9uc2UgaXMgc3VibWl0dGVkCisgKiBvbmx5IGlmIHRoZSBjdXJyZW50IGVwMCByZXF1ZXN0IHRhZyBpcyBlcXVhbCB0byB0aGUgZXhjZXB0aW9uIHJlcXVlc3QKKyAqIHRhZy4gIFRodXMgb25seSB0aGUgbW9zdCByZWNlbnRseSByZWNlaXZlZCBlcDAgcmVxdWVzdCB3aWxsIGdldCBhCisgKiBzdGF0dXMtc3RhZ2UgcmVzcG9uc2UuCisgKgorICogV2FybmluZzogVGhpcyBkcml2ZXIgc291cmNlIGZpbGUgaXMgdG9vIGxvbmcuICBJdCBvdWdodCB0byBiZSBzcGxpdCB1cAorICogaW50byBhIGhlYWRlciBmaWxlIHBsdXMgYWJvdXQgMyBzZXBhcmF0ZSAuYyBmaWxlcywgdG8gaGFuZGxlIHRoZSBkZXRhaWxzCisgKiBvZiB0aGUgR2FkZ2V0LCBVU0IgTWFzcyBTdG9yYWdlLCBhbmQgU0NTSSBwcm90b2NvbHMuCisgKi8KKworCisjdW5kZWYgREVCVUcKKyN1bmRlZiBWRVJCT1NFCisjdW5kZWYgRFVNUF9NU0dTCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCIKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJnX2ZpbGVfc3RvcmFnZSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyMCBPY3RvYmVyIDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyIGxvbmduYW1lW10gPSBEUklWRVJfREVTQzsKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0bmFtZVtdID0gRFJJVkVSX05BTUU7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKCJBbGFuIFN0ZXJuIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKKy8qIFRoYW5rcyB0byBOZXRDaGlwIFRlY2hub2xvZ2llcyBmb3IgZG9uYXRpbmcgdGhpcyBwcm9kdWN0IElELgorICoKKyAqIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhbnkgb3RoZXIgZHJpdmVyISEgIEV2ZXIhIQorICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuICovCisjZGVmaW5lIERSSVZFUl9WRU5ET1JfSUQJMHgwNTI1CS8vIE5ldENoaXAKKyNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfSUQJMHhhNGE1CS8vIExpbnV4LVVTQiBGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldAorCisKKy8qCisgKiBUaGlzIGRyaXZlciBhc3N1bWVzIHNlbGYtcG93ZXJlZCBoYXJkd2FyZSBhbmQgaGFzIG5vIHdheSBmb3IgdXNlcnMgdG8KKyAqIHRyaWdnZXIgcmVtb3RlIHdha2V1cC4gIEl0IHVzZXMgYXV0b2NvbmZpZ3VyYXRpb24gdG8gc2VsZWN0IGVuZHBvaW50cworICogYW5kIGVuZHBvaW50IGFkZHJlc3Nlcy4KKyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgeHByaW50ayhmLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYoZiktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgeXByaW50ayhsLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYobCktPmRldiAsIGZtdCAsICMjIGFyZ3MpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZnNnLGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhmc2cgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgTERCRyhsdW4sZm10LGFyZ3MuLi4pIFwKKwl5cHJpbnRrKGx1biAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBNREJHKGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZzZyxmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTERCRyhsdW4sZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIE1EQkcoZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjdW5kZWYgVkVSQk9TRQorI3VuZGVmIERVTVBfTVNHUworI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZEQkcJREJHCisjZGVmaW5lIFZMREJHCUxEQkcKKyNlbHNlCisjZGVmaW5lIFZEQkcoZnNnLGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBWTERCRyhsdW4sZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGZzZyxmbXQsYXJncy4uLikgXAorCXhwcmludGsoZnNnICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBMRVJST1IobHVuLGZtdCxhcmdzLi4uKSBcCisJeXByaW50ayhsdW4gLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgV0FSTihmc2csZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGZzZyAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIExXQVJOKGx1bixmbXQsYXJncy4uLikgXAorCXlwcmludGsobHVuICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKworI2RlZmluZSBJTkZPKGZzZyxmbXQsYXJncy4uLikgXAorCXhwcmludGsoZnNnICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgTElORk8obHVuLGZtdCxhcmdzLi4uKSBcCisJeXByaW50ayhsdW4gLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIE1JTkZPKGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAiIGZtdCAsICMjIGFyZ3MpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRW5jYXBzdWxhdGUgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGluZ3MgKi8KKworI2RlZmluZSBNQVhfTFVOUwk4CisKKwkvKiBBcmdnaCEgIFRoZXJlIHNob3VsZCBiZSBhIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZCBtYWNybyEgKi8KK3N0YXRpYyBjaGFyCQkqZmlsZVtNQVhfTFVOU10gPSB7TlVMTCwgfTsKK3N0YXRpYyBpbnQJCXJvW01BWF9MVU5TXSA9IHswLCB9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQJCW51bV9maWxlbmFtZXM7CisJaW50CQludW1fcm9zOworCXVuc2lnbmVkIGludAlubHVuczsKKworCWNoYXIJCSp0cmFuc3BvcnRfcGFybTsKKwljaGFyCQkqcHJvdG9jb2xfcGFybTsKKwlpbnQJCXJlbW92YWJsZTsKKwl1bnNpZ25lZCBzaG9ydAl2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQJcHJvZHVjdDsKKwl1bnNpZ25lZCBzaG9ydAlyZWxlYXNlOworCXVuc2lnbmVkIGludAlidWZsZW47CisJaW50CQljYW5fc3RhbGw7CisKKwlpbnQJCXRyYW5zcG9ydF90eXBlOworCWNoYXIJCSp0cmFuc3BvcnRfbmFtZTsKKwlpbnQJCXByb3RvY29sX3R5cGU7CisJY2hhcgkJKnByb3RvY29sX25hbWU7CisKK30gbW9kX2RhdGEgPSB7CQkJCQkvLyBEZWZhdWx0IHZhbHVlcworCS50cmFuc3BvcnRfcGFybQkJPSAiQkJCIiwKKwkucHJvdG9jb2xfcGFybQkJPSAiU0NTSSIsCisJLnJlbW92YWJsZQkJPSAwLAorCS52ZW5kb3IJCQk9IERSSVZFUl9WRU5ET1JfSUQsCisJLnByb2R1Y3QJCT0gRFJJVkVSX1BST0RVQ1RfSUQsCisJLnJlbGVhc2UJCT0gMHhmZmZmLAkvLyBVc2UgY29udHJvbGxlciBjaGlwIHR5cGUKKwkuYnVmbGVuCQkJPSAxNjM4NCwKKwkuY2FuX3N0YWxsCQk9IDEsCisJfTsKKworCittb2R1bGVfcGFyYW1fYXJyYXkoZmlsZSwgY2hhcnAsICZtb2RfZGF0YS5udW1fZmlsZW5hbWVzLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZmlsZSwgIm5hbWVzIG9mIGJhY2tpbmcgZmlsZXMgb3IgZGV2aWNlcyIpOworCittb2R1bGVfcGFyYW1fYXJyYXkocm8sIGJvb2wsICZtb2RfZGF0YS5udW1fcm9zLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mocm8sICJ0cnVlIHRvIGZvcmNlIHJlYWQtb25seSIpOworCittb2R1bGVfcGFyYW1fbmFtZWQobHVucywgbW9kX2RhdGEubmx1bnMsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhsdW5zLCAibnVtYmVyIG9mIExVTnMiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHJlbW92YWJsZSwgbW9kX2RhdGEucmVtb3ZhYmxlLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocmVtb3ZhYmxlLCAidHJ1ZSB0byBzaW11bGF0ZSByZW1vdmFibGUgbWVkaWEiKTsKKworCisvKiBJbiB0aGUgbm9uLVRFU1QgdmVyc2lvbiwgb25seSB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgbGlzdGVkIGFib3ZlCisgKiBhcmUgYXZhaWxhYmxlLiAqLworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKKworbW9kdWxlX3BhcmFtX25hbWVkKHRyYW5zcG9ydCwgbW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0sIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModHJhbnNwb3J0LCAidHlwZSBvZiB0cmFuc3BvcnQgKEJCQiwgQ0JJLCBvciBDQikiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHByb3RvY29sLCBtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHByb3RvY29sLCAidHlwZSBvZiBwcm90b2NvbCAoUkJDLCA4MDIwLCBRSUMsIFVGSSwgIgorCQkiODA3MCwgb3IgU0NTSSkiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHZlbmRvciwgbW9kX2RhdGEudmVuZG9yLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVU0IgVmVuZG9yIElEIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChwcm9kdWN0LCBtb2RfZGF0YS5wcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVVNCIFByb2R1Y3QgSUQiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHJlbGVhc2UsIG1vZF9kYXRhLnJlbGVhc2UsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbGVhc2UsICJVU0IgcmVsZWFzZSBudW1iZXIiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGJ1ZmxlbiwgbW9kX2RhdGEuYnVmbGVuLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYnVmbGVuLCAiSS9PIGJ1ZmZlciBzaXplIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChzdGFsbCwgbW9kX2RhdGEuY2FuX3N0YWxsLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RhbGwsICJmYWxzZSB0byBwcmV2ZW50IGJ1bGsgc3RhbGxzIik7CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCIHByb3RvY29sIHZhbHVlID0gdGhlIHRyYW5zcG9ydCBtZXRob2QgKi8KKyNkZWZpbmUgVVNCX1BSX0NCSQkweDAwCQkvLyBDb250cm9sL0J1bGsvSW50ZXJydXB0CisjZGVmaW5lIFVTQl9QUl9DQgkweDAxCQkvLyBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdAorI2RlZmluZSBVU0JfUFJfQlVMSwkweDUwCQkvLyBCdWxrLW9ubHkKKworLyogVVNCIHN1YmNsYXNzIHZhbHVlID0gdGhlIHByb3RvY29sIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgVVNCX1NDX1JCQwkweDAxCQkvLyBSZWR1Y2VkIEJsb2NrIENvbW1hbmRzIChmbGFzaCkKKyNkZWZpbmUgVVNCX1NDXzgwMjAJMHgwMgkJLy8gU0ZGLTgwMjBpLCBNTUMtMiwgQVRBUEkgKENELVJPTSkKKyNkZWZpbmUgVVNCX1NDX1FJQwkweDAzCQkvLyBRSUMtMTU3ICh0YXBlKQorI2RlZmluZSBVU0JfU0NfVUZJCTB4MDQJCS8vIFVGSSAoZmxvcHB5KQorI2RlZmluZSBVU0JfU0NfODA3MAkweDA1CQkvLyBTRkYtODA3MGkgKHJlbW92YWJsZSkKKyNkZWZpbmUgVVNCX1NDX1NDU0kJMHgwNgkJLy8gVHJhbnNwYXJlbnQgU0NTSQorCisvKiBCdWxrLW9ubHkgZGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qIENvbW1hbmQgQmxvY2sgV3JhcHBlciAqLworc3RydWN0IGJ1bGtfY2Jfd3JhcCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8vIENvbnRhaW5zICdVU0JDJworCXUzMglUYWc7CQkJLy8gVW5pcXVlIHBlciBjb21tYW5kIGlkCisJX19sZTMyCURhdGFUcmFuc2Zlckxlbmd0aDsJLy8gU2l6ZSBvZiB0aGUgZGF0YQorCXU4CUZsYWdzOwkJCS8vIERpcmVjdGlvbiBpbiBiaXQgNworCXU4CUx1bjsJCQkvLyBMVU4gKG5vcm1hbGx5IDApCisJdTgJTGVuZ3RoOwkJCS8vIE9mIHRoZSBDREIsIDw9IE1BWF9DT01NQU5EX1NJWkUKKwl1OAlDREJbMTZdOwkJLy8gQ29tbWFuZCBEYXRhIEJsb2NrCit9OworCisjZGVmaW5lIFVTQl9CVUxLX0NCX1dSQVBfTEVOCTMxCisjZGVmaW5lIFVTQl9CVUxLX0NCX1NJRwkJMHg0MzQyNTM1NQkvLyBTcGVsbHMgb3V0IFVTQkMKKyNkZWZpbmUgVVNCX0JVTEtfSU5fRkxBRwkweDgwCisKKy8qIENvbW1hbmQgU3RhdHVzIFdyYXBwZXIgKi8KK3N0cnVjdCBidWxrX2NzX3dyYXAgeworCV9fbGUzMglTaWduYXR1cmU7CQkvLyBTaG91bGQgPSAnVVNCUycKKwl1MzIJVGFnOwkJCS8vIFNhbWUgYXMgb3JpZ2luYWwgY29tbWFuZAorCV9fbGUzMglSZXNpZHVlOwkJLy8gQW1vdW50IG5vdCB0cmFuc2ZlcnJlZAorCXU4CVN0YXR1czsJCQkvLyBTZWUgYmVsb3cKK307CisKKyNkZWZpbmUgVVNCX0JVTEtfQ1NfV1JBUF9MRU4JMTMKKyNkZWZpbmUgVVNCX0JVTEtfQ1NfU0lHCQkweDUzNDI1MzU1CS8vIFNwZWxscyBvdXQgJ1VTQlMnCisjZGVmaW5lIFVTQl9TVEFUVVNfUEFTUwkJMAorI2RlZmluZSBVU0JfU1RBVFVTX0ZBSUwJCTEKKyNkZWZpbmUgVVNCX1NUQVRVU19QSEFTRV9FUlJPUgkyCisKKy8qIEJ1bGstb25seSBjbGFzcyBzcGVjaWZpYyByZXF1ZXN0cyAqLworI2RlZmluZSBVU0JfQlVMS19SRVNFVF9SRVFVRVNUCQkweGZmCisjZGVmaW5lIFVTQl9CVUxLX0dFVF9NQVhfTFVOX1JFUVVFU1QJMHhmZQorCisKKy8qIENCSSBJbnRlcnJ1cHQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBpbnRlcnJ1cHRfZGF0YSB7CisJdTgJYlR5cGU7CisJdTgJYlZhbHVlOworfTsKKworI2RlZmluZSBDQklfSU5URVJSVVBUX0RBVEFfTEVOCQkyCisKKy8qIENCSSBBY2NlcHQgRGV2aWNlLVNwZWNpZmljIENvbW1hbmQgcmVxdWVzdCAqLworI2RlZmluZSBVU0JfQ0JJX0FEU0NfUkVRVUVTVAkJMHgwMAorCisKKyNkZWZpbmUgTUFYX0NPTU1BTkRfU0laRQkxNgkvLyBMZW5ndGggb2YgYSBTQ1NJIENvbW1hbmQgRGF0YSBCbG9jaworCisvKiBTQ1NJIGNvbW1hbmRzIHRoYXQgd2UgcmVjb2duaXplICovCisjZGVmaW5lIFNDX0ZPUk1BVF9VTklUCQkJMHgwNAorI2RlZmluZSBTQ19JTlFVSVJZCQkJMHgxMgorI2RlZmluZSBTQ19NT0RFX1NFTEVDVF82CQkweDE1CisjZGVmaW5lIFNDX01PREVfU0VMRUNUXzEwCQkweDU1CisjZGVmaW5lIFNDX01PREVfU0VOU0VfNgkJCTB4MWEKKyNkZWZpbmUgU0NfTU9ERV9TRU5TRV8xMAkJMHg1YQorI2RlZmluZSBTQ19QUkVWRU5UX0FMTE9XX01FRElVTV9SRU1PVkFMCTB4MWUKKyNkZWZpbmUgU0NfUkVBRF82CQkJMHgwOAorI2RlZmluZSBTQ19SRUFEXzEwCQkJMHgyOAorI2RlZmluZSBTQ19SRUFEXzEyCQkJMHhhOAorI2RlZmluZSBTQ19SRUFEX0NBUEFDSVRZCQkweDI1CisjZGVmaW5lIFNDX1JFQURfRk9STUFUX0NBUEFDSVRJRVMJMHgyMworI2RlZmluZSBTQ19SRUxFQVNFCQkJMHgxNworI2RlZmluZSBTQ19SRVFVRVNUX1NFTlNFCQkweDAzCisjZGVmaW5lIFNDX1JFU0VSVkUJCQkweDE2CisjZGVmaW5lIFNDX1NFTkRfRElBR05PU1RJQwkJMHgxZAorI2RlZmluZSBTQ19TVEFSVF9TVE9QX1VOSVQJCTB4MWIKKyNkZWZpbmUgU0NfU1lOQ0hST05JWkVfQ0FDSEUJCTB4MzUKKyNkZWZpbmUgU0NfVEVTVF9VTklUX1JFQURZCQkweDAwCisjZGVmaW5lIFNDX1ZFUklGWQkJCTB4MmYKKyNkZWZpbmUgU0NfV1JJVEVfNgkJCTB4MGEKKyNkZWZpbmUgU0NfV1JJVEVfMTAJCQkweDJhCisjZGVmaW5lIFNDX1dSSVRFXzEyCQkJMHhhYQorCisvKiBTQ1NJIFNlbnNlIEtleS9BZGRpdGlvbmFsIFNlbnNlIENvZGUvQVNDIFF1YWxpZmllciB2YWx1ZXMgKi8KKyNkZWZpbmUgU1NfTk9fU0VOU0UJCQkJMAorI2RlZmluZSBTU19DT01NVU5JQ0FUSU9OX0ZBSUxVUkUJCTB4MDQwODAwCisjZGVmaW5lIFNTX0lOVkFMSURfQ09NTUFORAkJCTB4MDUyMDAwCisjZGVmaW5lIFNTX0lOVkFMSURfRklFTERfSU5fQ0RCCQkJMHgwNTI0MDAKKyNkZWZpbmUgU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRQkweDA1MjEwMAorI2RlZmluZSBTU19MT0dJQ0FMX1VOSVRfTk9UX1NVUFBPUlRFRAkJMHgwNTI1MDAKKyNkZWZpbmUgU1NfTUVESVVNX05PVF9QUkVTRU5UCQkJMHgwMjNhMDAKKyNkZWZpbmUgU1NfTUVESVVNX1JFTU9WQUxfUFJFVkVOVEVECQkweDA1NTMwMgorI2RlZmluZSBTU19OT1RfUkVBRFlfVE9fUkVBRFlfVFJBTlNJVElPTgkweDA2MjgwMAorI2RlZmluZSBTU19SRVNFVF9PQ0NVUlJFRAkJCTB4MDYyOTAwCisjZGVmaW5lIFNTX1NBVklOR19QQVJBTUVURVJTX05PVF9TVVBQT1JURUQJMHgwNTM5MDAKKyNkZWZpbmUgU1NfVU5SRUNPVkVSRURfUkVBRF9FUlJPUgkJMHgwMzExMDAKKyNkZWZpbmUgU1NfV1JJVEVfRVJST1IJCQkJMHgwMzBjMDIKKyNkZWZpbmUgU1NfV1JJVEVfUFJPVEVDVEVECQkJMHgwNzI3MDAKKworI2RlZmluZSBTSyh4KQkJKCh1OCkgKCh4KSA+PiAxNikpCS8vIFNlbnNlIEtleSBieXRlLCBldGMuCisjZGVmaW5lIEFTQyh4KQkJKCh1OCkgKCh4KSA+PiA4KSkKKyNkZWZpbmUgQVNDUSh4KQkJKCh1OCkgKHgpKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVzZSBkZWZpbml0aW9ucyB3aWxsIHBlcm1pdCB0aGUgY29tcGlsZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBjb2RlIGZvcgorICogcGFydHMgb2YgdGhlIGRyaXZlciB0aGF0IGFyZW4ndCB1c2VkIGluIHRoZSBub24tVEVTVCB2ZXJzaW9uLiAgRXZlbiBnY2MKKyAqIGNhbiByZWNvZ25pemUgd2hlbiBhIHRlc3Qgb2YgYSBjb25zdGFudCBleHByZXNzaW9uIHlpZWxkcyBhIGRlYWQgY29kZQorICogcGF0aC4KKyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVAorCisjZGVmaW5lIHRyYW5zcG9ydF9pc19iYmIoKQkobW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPT0gVVNCX1BSX0JVTEspCisjZGVmaW5lIHRyYW5zcG9ydF9pc19jYmkoKQkobW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPT0gVVNCX1BSX0NCSSkKKyNkZWZpbmUgcHJvdG9jb2xfaXNfc2NzaSgpCShtb2RfZGF0YS5wcm90b2NvbF90eXBlID09IFVTQl9TQ19TQ1NJKQorCisjZWxzZQorCisjZGVmaW5lIHRyYW5zcG9ydF9pc19iYmIoKQkxCisjZGVmaW5lIHRyYW5zcG9ydF9pc19jYmkoKQkwCisjZGVmaW5lIHByb3RvY29sX2lzX3Njc2koKQkxCisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworc3RydWN0IGx1biB7CisJc3RydWN0IGZpbGUJKmZpbHA7CisJbG9mZl90CQlmaWxlX2xlbmd0aDsKKwlsb2ZmX3QJCW51bV9zZWN0b3JzOworCisJdW5zaWduZWQgaW50CXJvIDogMTsKKwl1bnNpZ25lZCBpbnQJcHJldmVudF9tZWRpdW1fcmVtb3ZhbCA6IDE7CisJdW5zaWduZWQgaW50CXJlZ2lzdGVyZWQgOiAxOworCisJdTMyCQlzZW5zZV9kYXRhOworCXUzMgkJc2Vuc2VfZGF0YV9pbmZvOworCXUzMgkJdW5pdF9hdHRlbnRpb25fZGF0YTsKKworCXN0cnVjdCBkZXZpY2UJZGV2OworfTsKKworI2RlZmluZSBiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pCSgoY3VybHVuKS0+ZmlscCAhPSBOVUxMKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsdW4gKmRldl90b19sdW4oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbHVuLCBkZXYpOworfQorCisKKy8qIEJpZyBlbm91Z2ggdG8gaG9sZCBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lIEVQMF9CVUZTSVpFCTI1NgorI2RlZmluZSBERUxBWUVEX1NUQVRVUwkoRVAwX0JVRlNJWkUgKyA5OTkpCS8vIEFuIGltcG9zc2libHkgbGFyZ2UgdmFsdWUKKworLyogTnVtYmVyIG9mIGJ1ZmZlcnMgd2Ugd2lsbCB1c2UuICAyIGlzIGVub3VnaCBmb3IgZG91YmxlLWJ1ZmZlcmluZyAqLworI2RlZmluZSBOVU1fQlVGRkVSUwkyCisKK2VudW0gZnNnX2J1ZmZlcl9zdGF0ZSB7CisJQlVGX1NUQVRFX0VNUFRZID0gMCwKKwlCVUZfU1RBVEVfRlVMTCwKKwlCVUZfU1RBVEVfQlVTWQorfTsKKworc3RydWN0IGZzZ19idWZmaGQgeworCXZvaWQJCQkJKmJ1ZjsKKwlkbWFfYWRkcl90CQkJZG1hOworCXZvbGF0aWxlIGVudW0gZnNnX2J1ZmZlcl9zdGF0ZQlzdGF0ZTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkJKm5leHQ7CisKKwkvKiBUaGUgTmV0Q2hpcCAyMjgwIGlzIGZhc3RlciwgYW5kIGhhbmRsZXMgc29tZSBwcm90b2NvbCBmYXVsdHMKKwkgKiBiZXR0ZXIsIGlmIHdlIGRvbid0IHN1Ym1pdCBhbnkgc2hvcnQgYnVsay1vdXQgcmVhZCByZXF1ZXN0cy4KKwkgKiBTbyB3ZSB3aWxsIHJlY29yZCB0aGUgaW50ZW5kZWQgcmVxdWVzdCBsZW5ndGggaGVyZS4gKi8KKwl1bnNpZ25lZCBpbnQJCQlidWxrX291dF9pbnRlbmRlZF9sZW5ndGg7CisKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSppbnJlcTsKKwl2b2xhdGlsZSBpbnQJCQlpbnJlcV9idXN5OworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKm91dHJlcTsKKwl2b2xhdGlsZSBpbnQJCQlvdXRyZXFfYnVzeTsKK307CisKK2VudW0gZnNnX3N0YXRlIHsKKwlGU0dfU1RBVEVfQ09NTUFORF9QSEFTRSA9IC0xMCwJCS8vIFRoaXMgb25lIGlzbid0IHVzZWQgYW55d2hlcmUKKwlGU0dfU1RBVEVfREFUQV9QSEFTRSwKKwlGU0dfU1RBVEVfU1RBVFVTX1BIQVNFLAorCisJRlNHX1NUQVRFX0lETEUgPSAwLAorCUZTR19TVEFURV9BQk9SVF9CVUxLX09VVCwKKwlGU0dfU1RBVEVfUkVTRVQsCisJRlNHX1NUQVRFX0lOVEVSRkFDRV9DSEFOR0UsCisJRlNHX1NUQVRFX0NPTkZJR19DSEFOR0UsCisJRlNHX1NUQVRFX0RJU0NPTk5FQ1QsCisJRlNHX1NUQVRFX0VYSVQsCisJRlNHX1NUQVRFX1RFUk1JTkFURUQKK307CisKK2VudW0gZGF0YV9kaXJlY3Rpb24geworCURBVEFfRElSX1VOS05PV04gPSAwLAorCURBVEFfRElSX0ZST01fSE9TVCwKKwlEQVRBX0RJUl9UT19IT1NULAorCURBVEFfRElSX05PTkUKK307CisKK3N0cnVjdCBmc2dfZGV2IHsKKwkvKiBsb2NrIHByb3RlY3RzOiBzdGF0ZSwgYWxsIHRoZSByZXFfYnVzeSdzLCBhbmQgY2JidWZfY21uZCAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsKKworCS8qIGZpbGVzZW0gcHJvdGVjdHM6IGJhY2tpbmcgZmlsZXMgaW4gdXNlICovCisJc3RydWN0IHJ3X3NlbWFwaG9yZQlmaWxlc2VtOworCisJc3RydWN0IHVzYl9lcAkJKmVwMDsJCS8vIEhhbmR5IGNvcHkgb2YgZ2FkZ2V0LT5lcDAKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKmVwMHJlcTsJLy8gRm9yIGNvbnRyb2wgcmVzcG9uc2VzCisJdm9sYXRpbGUgdW5zaWduZWQgaW50CWVwMF9yZXFfdGFnOworCWNvbnN0IGNoYXIJCSplcDByZXFfbmFtZTsKKworCXN0cnVjdCB1c2JfcmVxdWVzdAkqaW50cmVxOwkvLyBGb3IgaW50ZXJydXB0IHJlc3BvbnNlcworCXZvbGF0aWxlIGludAkJaW50cmVxX2J1c3k7CisJc3RydWN0IGZzZ19idWZmaGQJKmludHJfYnVmZmhkOworCisgCXVuc2lnbmVkIGludAkJYnVsa19vdXRfbWF4cGFja2V0OworCWVudW0gZnNnX3N0YXRlCQlzdGF0ZTsJCS8vIEZvciBleGNlcHRpb24gaGFuZGxpbmcKKwl1bnNpZ25lZCBpbnQJCWV4Y2VwdGlvbl9yZXFfdGFnOworCisJdTgJCQljb25maWcsIG5ld19jb25maWc7CisKKwl1bnNpZ25lZCBpbnQJCXJ1bm5pbmcgOiAxOworCXVuc2lnbmVkIGludAkJYnVsa19pbl9lbmFibGVkIDogMTsKKwl1bnNpZ25lZCBpbnQJCWJ1bGtfb3V0X2VuYWJsZWQgOiAxOworCXVuc2lnbmVkIGludAkJaW50cl9pbl9lbmFibGVkIDogMTsKKwl1bnNpZ25lZCBpbnQJCXBoYXNlX2Vycm9yIDogMTsKKwl1bnNpZ25lZCBpbnQJCXNob3J0X3BhY2tldF9yZWNlaXZlZCA6IDE7CisJdW5zaWduZWQgaW50CQliYWRfbHVuX29rYXkgOiAxOworCisJdW5zaWduZWQgbG9uZwkJYXRvbWljX2JpdGZsYWdzOworI2RlZmluZSBSRUdJU1RFUkVECQkwCisjZGVmaW5lIENMRUFSX0JVTEtfSEFMVFMJMQorI2RlZmluZSBTVVNQRU5ERUQJCTIKKworCXN0cnVjdCB1c2JfZXAJCSpidWxrX2luOworCXN0cnVjdCB1c2JfZXAJCSpidWxrX291dDsKKwlzdHJ1Y3QgdXNiX2VwCQkqaW50cl9pbjsKKworCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90b19maWxsOworCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90b19kcmFpbjsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAlidWZmaGRzW05VTV9CVUZGRVJTXTsKKworCXdhaXRfcXVldWVfaGVhZF90CXRocmVhZF93cWg7CisJaW50CQkJdGhyZWFkX3dha2V1cF9uZWVkZWQ7CisJc3RydWN0IGNvbXBsZXRpb24JdGhyZWFkX25vdGlmaWVyOworCWludAkJCXRocmVhZF9waWQ7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWRfdGFzazsKKwlzaWdzZXRfdAkJdGhyZWFkX3NpZ25hbF9tYXNrOworCisJaW50CQkJY21uZF9zaXplOworCXU4CQkJY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwllbnVtIGRhdGFfZGlyZWN0aW9uCWRhdGFfZGlyOworCXUzMgkJCWRhdGFfc2l6ZTsKKwl1MzIJCQlkYXRhX3NpemVfZnJvbV9jbW5kOworCXUzMgkJCXRhZzsKKwl1bnNpZ25lZCBpbnQJCWx1bjsKKwl1MzIJCQlyZXNpZHVlOworCXUzMgkJCXVzYl9hbW91bnRfbGVmdDsKKworCS8qIFRoZSBDQiBwcm90b2NvbCBvZmZlcnMgbm8gd2F5IGZvciBhIGhvc3QgdG8ga25vdyB3aGVuIGEgY29tbWFuZAorCSAqIGhhcyBjb21wbGV0ZWQuICBBcyBhIHJlc3VsdCB0aGUgbmV4dCBjb21tYW5kIG1heSBhcnJpdmUgZWFybHksCisJICogYW5kIHdlIHdpbGwgc3RpbGwgaGF2ZSB0byBoYW5kbGUgaXQuICBGb3IgdGhhdCByZWFzb24gd2UgbmVlZAorCSAqIGEgYnVmZmVyIHRvIHN0b3JlIG5ldyBjb21tYW5kcyB3aGVuIHVzaW5nIENCIChvciBDQkksIHdoaWNoCisJICogZG9lcyBub3Qgb2JsaWdlIGEgaG9zdCB0byB3YWl0IGZvciBjb21tYW5kIGNvbXBsZXRpb24gZWl0aGVyKS4gKi8KKwlpbnQJCQljYmJ1Zl9jbW5kX3NpemU7CisJdTgJCQljYmJ1Zl9jbW5kW01BWF9DT01NQU5EX1NJWkVdOworCisJdW5zaWduZWQgaW50CQlubHVuczsKKwlzdHJ1Y3QgbHVuCQkqbHVuczsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXN0cnVjdCBjb21wbGV0aW9uCWx1bl9yZWxlYXNlZDsKK307CisKK3R5cGVkZWYgdm9pZCAoKmZzZ19yb3V0aW5lX3QpKHN0cnVjdCBmc2dfZGV2ICopOworCitzdGF0aWMgaW50IGlubGluZSBleGNlcHRpb25faW5fcHJvZ3Jlc3Moc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlyZXR1cm4gKGZzZy0+c3RhdGUgPiBGU0dfU1RBVEVfSURMRSk7Cit9CisKKy8qIE1ha2UgYnVsay1vdXQgcmVxdWVzdHMgYmUgZGl2aXNpYmxlIGJ5IHRoZSBtYXhwYWNrZXQgc2l6ZSAqLworc3RhdGljIHZvaWQgaW5saW5lIHNldF9idWxrX291dF9yZXFfbGVuZ3RoKHN0cnVjdCBmc2dfZGV2ICpmc2csCisJCXN0cnVjdCBmc2dfYnVmZmhkICpiaCwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQJcmVtOworCisJYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9IGxlbmd0aDsKKwlyZW0gPSBsZW5ndGggJSBmc2ctPmJ1bGtfb3V0X21heHBhY2tldDsKKwlpZiAocmVtID4gMCkKKwkJbGVuZ3RoICs9IGZzZy0+YnVsa19vdXRfbWF4cGFja2V0IC0gcmVtOworCWJoLT5vdXRyZXEtPmxlbmd0aCA9IGxlbmd0aDsKK30KKworc3RhdGljIHN0cnVjdCBmc2dfZGV2CQkJKnRoZV9mc2c7CitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCQlmc2dfZHJpdmVyOworCitzdGF0aWMgdm9pZAljbG9zZV9iYWNraW5nX2ZpbGUoc3RydWN0IGx1biAqY3VybHVuKTsKK3N0YXRpYyB2b2lkCWNsb3NlX2FsbF9iYWNraW5nX2ZpbGVzKHN0cnVjdCBmc2dfZGV2ICpmc2cpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBEVU1QX01TR1MKKworc3RhdGljIHZvaWQgZHVtcF9tc2coc3RydWN0IGZzZ19kZXYgKmZzZywgY29uc3QgY2hhciAqbGFiZWwsCisJCWNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50CXN0YXJ0LCBudW0sIGk7CisJY2hhcgkJbGluZVs1Ml0sICpwOworCisJaWYgKGxlbmd0aCA+PSA1MTIpCisJCXJldHVybjsKKwlEQkcoZnNnLCAiJXMsIGxlbmd0aCAldTpcbiIsIGxhYmVsLCBsZW5ndGgpOworCisJc3RhcnQgPSAwOworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCW51bSA9IG1pbihsZW5ndGgsIDE2dSk7CisJCXAgPSBsaW5lOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKwkJCWlmIChpID09IDgpCisJCQkJKnArKyA9ICcgJzsKKwkJCXNwcmludGYocCwgIiAlMDJ4IiwgYnVmW2ldKTsKKwkJCXAgKz0gMzsKKwkJfQorCQkqcCA9IDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlNng6ICVzXG4iLCBzdGFydCwgbGluZSk7CisJCWJ1ZiArPSBudW07CisJCXN0YXJ0ICs9IG51bTsKKwkJbGVuZ3RoIC09IG51bTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZSBkdW1wX2NkYihzdHJ1Y3QgZnNnX2RldiAqZnNnKQore30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgaW5saW5lIGR1bXBfbXNnKHN0cnVjdCBmc2dfZGV2ICpmc2csIGNvbnN0IGNoYXIgKmxhYmVsLAorCQljb25zdCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQore30KKworc3RhdGljIHZvaWQgaW5saW5lIGR1bXBfY2RiKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CWk7CisJY2hhcgljbWRidWZbMypNQVhfQ09NTUFORF9TSVpFICsgMV07CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5jbW5kX3NpemU7ICsraSkKKwkJc3ByaW50ZihjbWRidWYgKyBpKjMsICIgJTAyeCIsIGZzZy0+Y21uZFtpXSk7CisJVkRCRyhmc2csICJTQ1NJIENEQjogJXNcbiIsIGNtZGJ1Zik7Cit9CisKKyNlbmRpZiAvKiBEVU1QX01TR1MgKi8KKworCitzdGF0aWMgaW50IGZzZ19zZXRfaGFsdChzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwljb25zdCBjaGFyCSpuYW1lOworCisJaWYgKGVwID09IGZzZy0+YnVsa19pbikKKwkJbmFtZSA9ICJidWxrLWluIjsKKwllbHNlIGlmIChlcCA9PSBmc2ctPmJ1bGtfb3V0KQorCQluYW1lID0gImJ1bGstb3V0IjsKKwllbHNlCisJCW5hbWUgPSBlcC0+bmFtZTsKKwlEQkcoZnNnLCAiJXMgc2V0IGhhbHRcbiIsIG5hbWUpOworCXJldHVybiB1c2JfZXBfc2V0X2hhbHQoZXApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFJvdXRpbmVzIGZvciB1bmFsaWduZWQgZGF0YSBhY2Nlc3MgKi8KKworc3RhdGljIHUxNiBpbmxpbmUgZ2V0X2JlMTYodTggKmJ1ZikKK3sKKwlyZXR1cm4gKCh1MTYpIGJ1ZlswXSA8PCA4KSB8ICgodTE2KSBidWZbMV0pOworfQorCitzdGF0aWMgdTMyIGlubGluZSBnZXRfYmUzMih1OCAqYnVmKQoreworCXJldHVybiAoKHUzMikgYnVmWzBdIDw8IDI0KSB8ICgodTMyKSBidWZbMV0gPDwgMTYpIHwKKwkJCSgodTMyKSBidWZbMl0gPDwgOCkgfCAoKHUzMikgYnVmWzNdKTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHB1dF9iZTE2KHU4ICpidWYsIHUxNiB2YWwpCit7CisJYnVmWzBdID0gdmFsID4+IDg7CisJYnVmWzFdID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgcHV0X2JlMzIodTggKmJ1ZiwgdTMyIHZhbCkKK3sKKwlidWZbMF0gPSB2YWwgPj4gMjQ7CisJYnVmWzFdID0gdmFsID4+IDE2OworCWJ1ZlsyXSA9IHZhbCA+PiA4OworCWJ1ZlszXSA9IHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKSBjb25maWd1cmF0aW9uCisgKiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLiAgQWxzbyB0aGUgKHN0YXRpYykgY29uZmlnIGFuZCBpbnRlcmZhY2UKKyAqIGRlc2NyaXB0b3JzIGFyZSBhZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKS4KKyAqLworI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSCTEKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1QJCTIKKyNkZWZpbmUgU1RSSU5HX1NFUklBTAkJMworI2RlZmluZSBTVFJJTkdfQ09ORklHCQk0CisjZGVmaW5lIFNUUklOR19JTlRFUkZBQ0UJNQorCisvKiBUaGVyZSBpcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uLiAqLworI2RlZmluZQlDT05GSUdfVkFMVUUJCTEKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IKK2RldmljZV9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKKworCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCisKKwkvKiBUaGUgbmV4dCB0aHJlZSB2YWx1ZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMgKi8KKwkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX0lEKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfSUQpLAorCS5iY2REZXZpY2UgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpLAorCisJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAorCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkuaVNlcmlhbE51bWJlciA9CVNUUklOR19TRVJJQUwsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgorY29uZmlnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGNvbmZpZ19kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCisJLyogd1RvdGFsTGVuZ3RoIGNvbXB1dGVkIGJ5IHVzYl9nYWRnZXRfY29uZmlnX2J1ZigpICovCisJLmJOdW1JbnRlcmZhY2VzID0JMSwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19WQUxVRSwKKwkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfQ09ORklHLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwJLy8gc2VsZi1wb3dlcmVkCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvcgorb3RnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKG90Z19kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAsCit9OworCisvKiBUaGVyZSBpcyBvbmx5IG9uZSBpbnRlcmZhY2UuICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitpbnRmX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGludGZfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iTnVtRW5kcG9pbnRzID0JMiwJCS8vIEFkanVzdGVkIGR1cmluZyBmc2dfYmluZCgpCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19NQVNTX1NUT1JBR0UsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9TQ19TQ1NJLAkvLyBBZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKQorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfUFJfQlVMSywJLy8gQWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfSU5URVJGQUNFLAorfTsKKworLyogVGhyZWUgZnVsbC1zcGVlZCBlbmRwb2ludCBkZXNjcmlwdG9yczogYnVsay1pbiwgYnVsay1vdXQsCisgKiBhbmQgaW50ZXJydXB0LWluLiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19idWxrX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLyogd01heFBhY2tldFNpemUgc2V0IGJ5IGF1dG9jb25maWd1cmF0aW9uICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19idWxrX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkvKiB3TWF4UGFja2V0U2l6ZSBzZXQgYnkgYXV0b2NvbmZpZ3VyYXRpb24gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2ZzX2ludHJfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLmJJbnRlcnZhbCA9CQkzMiwJLy8gZnJhbWVzIC0+IDMyIG1zCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfZnVuY3Rpb25bXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmludGZfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfYnVsa19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19idWxrX291dF9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbnRyX2luX2Rlc2MsCisJTlVMTCwKK307CisjZGVmaW5lIEZTX0ZVTkNUSU9OX1BSRV9FUF9FTlRSSUVTCTIKKworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisKKy8qCisgKiBVU0IgMi4wIGRldmljZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCisgKiBkZXNjcmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KKyAqCisgKiBUaGF0IG1lYW5zIGFsdGVybmF0ZSBlbmRwb2ludCBkZXNjcmlwdG9ycyAoYmlnZ2VyIHBhY2tldHMpCisgKiBhbmQgYSAiZGV2aWNlIHF1YWxpZmllciIgLi4uIHBsdXMgbW9yZSBjb25zdHJ1Y3Rpb24gb3B0aW9ucworICogZm9yIHRoZSBjb25maWcgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IKK2Rldl9xdWFsaWZpZXIgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKKworCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfYnVsa19pbl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19idWxrX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfb3V0X2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS5iSW50ZXJ2YWwgPQkJMSwJLy8gTkFLIGV2ZXJ5IDEgdWZyYW1lCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19pbnRyX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfaW50cl9pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkuYkludGVydmFsID0JCTksCS8vIDIqKig5LTEpID0gMjU2IHVmcmFtZXMgLT4gMzIgbXMKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19mdW5jdGlvbltdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaW50Zl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19idWxrX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2J1bGtfb3V0X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2ludHJfaW5fZGVzYywKKwlOVUxMLAorfTsKKyNkZWZpbmUgSFNfRlVOQ1RJT05fUFJFX0VQX0VOVFJJRVMJMgorCisvKiBNYXhwYWNrZXQgYW5kIG90aGVyIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcyB2YXJ5IGJ5IHNwZWVkLiAqLworI2RlZmluZSBlcF9kZXNjKGcsZnMsaHMpCSgoKGcpLT5zcGVlZD09VVNCX1NQRUVEX0hJR0gpID8gKGhzKSA6IChmcykpCisKKyNlbHNlCisKKy8qIElmIHRoZXJlJ3Mgbm8gaGlnaCBzcGVlZCBzdXBwb3J0LCBhbHdheXMgdXNlIHRoZSBmdWxsLXNwZWVkIGRlc2NyaXB0b3IuICovCisjZGVmaW5lIGVwX2Rlc2MoZyxmcyxocykJZnMKKworI2VuZGlmCS8qICFDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworCisvKiBUaGUgQ0JJIHNwZWNpZmljYXRpb24gbGltaXRzIHRoZSBzZXJpYWwgc3RyaW5nIHRvIDEyIHVwcGVyY2FzZSBoZXhhZGVjaW1hbAorICogY2hhcmFjdGVycy4gKi8KK3N0YXRpYyBjaGFyCQkJCW1hbnVmYWN0dXJlcls2NF07CitzdGF0aWMgY2hhcgkJCQlzZXJpYWxbMTNdOworCisvKiBTdGF0aWMgc3RyaW5ncywgaW4gVVRGLTggKGZvciBzaW1wbGljaXR5IHdlIHVzZSBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMpICovCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcJCXN0cmluZ3NbXSA9IHsKKwl7U1RSSU5HX01BTlVGQUNUVVJFUiwJbWFudWZhY3R1cmVyfSwKKwl7U1RSSU5HX1BST0RVQ1QsCWxvbmduYW1lfSwKKwl7U1RSSU5HX1NFUklBTCwJCXNlcmlhbH0sCisJe1NUUklOR19DT05GSUcsCQkiU2VsZi1wb3dlcmVkIn0sCisJe1NUUklOR19JTlRFUkZBQ0UsCSJNYXNzIFN0b3JhZ2UifSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MJc3RyaW5ndGFiID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJCS8vIGVuLXVzCisJLnN0cmluZ3MJPSBzdHJpbmdzLAorfTsKKworCisvKgorICogQ29uZmlnIGRlc2NyaXB0b3JzIG11c3QgYWdyZWUgd2l0aCB0aGUgY29kZSB0aGF0IHNldHMgY29uZmlndXJhdGlvbnMKKyAqIGFuZCB3aXRoIGNvZGUgbWFuYWdpbmcgaW50ZXJmYWNlcyBhbmQgdGhlaXIgYWx0c2V0dGluZ3MuICBUaGV5IG11c3QKKyAqIGFsc28gaGFuZGxlIGRpZmZlcmVudCBzcGVlZHMgYW5kIG90aGVyLXNwZWVkIHJlcXVlc3RzLgorICovCitzdGF0aWMgaW50IHBvcHVsYXRlX2NvbmZpZ19idWYoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwkJdTggKmJ1ZiwgdTggdHlwZSwgdW5zaWduZWQgaW5kZXgpCit7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJZW51bSB1c2JfZGV2aWNlX3NwZWVkCQkJc3BlZWQgPSBnYWRnZXQtPnNwZWVkOworI2VuZGlmCisJaW50CQkJCQlsZW47CisJY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmZ1bmN0aW9uOworCisJaWYgKGluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlzcGVlZCA9IChVU0JfU1BFRURfRlVMTCArIFVTQl9TUEVFRF9ISUdIKSAtIHNwZWVkOworCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJZnVuY3Rpb24gPSBoc19mdW5jdGlvbjsKKwllbHNlCisjZW5kaWYKKwkJZnVuY3Rpb24gPSBmc19mdW5jdGlvbjsKKworCS8qIGZvciBub3csIGRvbid0IGFkdmVydGlzZSBzcnAtb25seSBkZXZpY2VzICovCisJaWYgKCFnYWRnZXQtPmlzX290ZykKKwkJZnVuY3Rpb24rKzsKKworCWxlbiA9IHVzYl9nYWRnZXRfY29uZmlnX2J1ZigmY29uZmlnX2Rlc2MsIGJ1ZiwgRVAwX0JVRlNJWkUsIGZ1bmN0aW9uKTsKKwkoKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKikgYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKKwlyZXR1cm4gbGVuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZXNlIHJvdXRpbmVzIG1heSBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IG9yIGluX2lycSAqLworCitzdGF0aWMgdm9pZCB3YWtldXBfdGhyZWFkKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJLyogVGVsbCB0aGUgbWFpbiB0aHJlYWQgdGhhdCBzb21ldGhpbmcgaGFzIGhhcHBlbmVkICovCisJZnNnLT50aHJlYWRfd2FrZXVwX25lZWRlZCA9IDE7CisJd2FrZV91cF9hbGwoJmZzZy0+dGhyZWFkX3dxaCk7Cit9CisKKworc3RhdGljIHZvaWQgcmFpc2VfZXhjZXB0aW9uKHN0cnVjdCBmc2dfZGV2ICpmc2csIGVudW0gZnNnX3N0YXRlIG5ld19zdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZF90YXNrOworCisJLyogRG8gbm90aGluZyBpZiBhIGhpZ2hlci1wcmlvcml0eSBleGNlcHRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KKwkgKiBJZiBhIGxvd2VyLW9yLWVxdWFsIHByaW9yaXR5IGV4Y2VwdGlvbiBpcyBpbiBwcm9ncmVzcywgcHJlZW1wdCBpdAorCSAqIGFuZCBub3RpZnkgdGhlIG1haW4gdGhyZWFkIGJ5IHNlbmRpbmcgaXQgYSBzaWduYWwuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzZy0+bG9jaywgZmxhZ3MpOworCWlmIChmc2ctPnN0YXRlIDw9IG5ld19zdGF0ZSkgeworCQlmc2ctPmV4Y2VwdGlvbl9yZXFfdGFnID0gZnNnLT5lcDBfcmVxX3RhZzsKKwkJZnNnLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwkJdGhyZWFkX3Rhc2sgPSBmc2ctPnRocmVhZF90YXNrOworCQlpZiAodGhyZWFkX3Rhc2spCisJCQlzZW5kX3NpZ19pbmZvKFNJR1VTUjEsIFNFTkRfU0lHX0ZPUkNFRCwgdGhyZWFkX3Rhc2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2ctPmxvY2ssIGZsYWdzKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgZGlzY29ubmVjdCBjYWxsYmFjayBhbmQgZXAwIHJvdXRpbmVzLiAgVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEsCisgKiBleGNlcHQgdGhhdCBlcDBfcXVldWUoKSBpcyBjYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIHRvIGFja25vd2xlZGdlCisgKiBjb21wbGV0aW9uIG9mIHZhcmlvdXMgcmVxdWVzdHM6IHNldCBjb25maWcsIHNldCBpbnRlcmZhY2UsIGFuZAorICogQnVsay1vbmx5IGRldmljZSByZXNldC4gKi8KKworc3RhdGljIHZvaWQgZnNnX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJREJHKGZzZywgImRpc2Nvbm5lY3Qgb3IgcG9ydCByZXNldFxuIik7CisJcmFpc2VfZXhjZXB0aW9uKGZzZywgRlNHX1NUQVRFX0RJU0NPTk5FQ1QpOworfQorCisKK3N0YXRpYyBpbnQgZXAwX3F1ZXVlKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CXJjOworCisJcmMgPSB1c2JfZXBfcXVldWUoZnNnLT5lcDAsIGZzZy0+ZXAwcmVxLCBHRlBfQVRPTUlDKTsKKwlpZiAocmMgIT0gMCAmJiByYyAhPSAtRVNIVVRET1dOKSB7CisKKwkJLyogV2UgY2FuJ3QgZG8gbXVjaCBtb3JlIHRoYW4gd2FpdCBmb3IgYSByZXNldCAqLworCQlXQVJOKGZzZywgImVycm9yIGluIHN1Ym1pc3Npb246ICVzIC0tPiAlZFxuIiwKKwkJCQlmc2ctPmVwMC0+bmFtZSwgcmMpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGVwMF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSAoc3RydWN0IGZzZ19kZXYgKikgZXAtPmRyaXZlcl9kYXRhOworCisJaWYgKHJlcS0+YWN0dWFsID4gMCkKKwkJZHVtcF9tc2coZnNnLCBmc2ctPmVwMHJlcV9uYW1lLCByZXEtPmJ1ZiwgcmVxLT5hY3R1YWwpOworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREJHKGZzZywgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJaWYgKHJlcS0+c3RhdHVzID09IDAgJiYgcmVxLT5jb250ZXh0KQorCQkoKGZzZ19yb3V0aW5lX3QpIChyZXEtPmNvbnRleHQpKShmc2cpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEJ1bGsgYW5kIGludGVycnVwdCBlbmRwb2ludCBjb21wbGV0aW9uIGhhbmRsZXJzLgorICogVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCisKK3N0YXRpYyB2b2lkIGJ1bGtfaW5fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAoc3RydWN0IGZzZ19idWZmaGQgKikgcmVxLT5jb250ZXh0OworCisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcoZnNnLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCWlmIChyZXEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkJCS8vIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZAorCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CisKKwkvKiBIb2xkIHRoZSBsb2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLworCXNwaW5fbG9jaygmZnNnLT5sb2NrKTsKKwliaC0+aW5yZXFfYnVzeSA9IDA7CisJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOworCXdha2V1cF90aHJlYWQoZnNnKTsKK30KKworc3RhdGljIHZvaWQgYnVsa19vdXRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAoc3RydWN0IGZzZ19idWZmaGQgKikgcmVxLT5jb250ZXh0OworCisJZHVtcF9tc2coZnNnLCAiYnVsay1vdXQiLCByZXEtPmJ1ZiwgcmVxLT5hY3R1YWwpOworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoKQorCQlEQkcoZnNnLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwKKwkJCQliaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJLyogSG9sZCB0aGUgbG9jayB3aGlsZSB3ZSB1cGRhdGUgdGhlIHJlcXVlc3QgYW5kIGJ1ZmZlciBzdGF0ZXMgKi8KKwlzcGluX2xvY2soJmZzZy0+bG9jayk7CisJYmgtPm91dHJlcV9idXN5ID0gMDsKKwliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKKwlzcGluX3VubG9jaygmZnNnLT5sb2NrKTsKKwl3YWtldXBfdGhyZWFkKGZzZyk7Cit9CisKKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKK3N0YXRpYyB2b2lkIGludHJfaW5fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAoc3RydWN0IGZzZ19idWZmaGQgKikgcmVxLT5jb250ZXh0OworCisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcoZnNnLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCWlmIChyZXEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkJCS8vIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZAorCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CisKKwkvKiBIb2xkIHRoZSBsb2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLworCXNwaW5fbG9jaygmZnNnLT5sb2NrKTsKKwlmc2ctPmludHJlcV9idXN5ID0gMDsKKwliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CisJd2FrZXVwX3RocmVhZChmc2cpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgaW50cl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7fQorI2VuZGlmIC8qIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFcDAgY2xhc3Mtc3BlY2lmaWMgaGFuZGxlcnMuICBUaGVzZSBhbHdheXMgcnVuIGluX2lycS4gKi8KKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKK3N0YXRpYyB2b2lkIHJlY2VpdmVkX2NiaV9hZHNjKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCXN0YXRpYyB1OAkJY2JpX3Jlc2V0X2NtbmRbNl0gPSB7CisJCQlTQ19TRU5EX0RJQUdOT1NUSUMsIDQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCisJLyogRXJyb3IgaW4gY29tbWFuZCB0cmFuc2Zlcj8gKi8KKwlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5sZW5ndGggIT0gcmVxLT5hY3R1YWwgfHwKKwkJCXJlcS0+YWN0dWFsIDwgNiB8fCByZXEtPmFjdHVhbCA+IE1BWF9DT01NQU5EX1NJWkUpIHsKKworCQkvKiBOb3QgYWxsIGNvbnRyb2xsZXJzIGFsbG93IGEgcHJvdG9jb2wgc3RhbGwgYWZ0ZXIKKwkJICogcmVjZWl2aW5nIGNvbnRyb2wtb3V0IGRhdGEsIGJ1dCB3ZSdsbCB0cnkgYW55d2F5LiAqLworCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmVwMCk7CisJCXJldHVybjsJCQkvLyBXYWl0IGZvciByZXNldAorCX0KKworCS8qIElzIGl0IHRoZSBzcGVjaWFsIHJlc2V0IGNvbW1hbmQ/ICovCisJaWYgKHJlcS0+YWN0dWFsID49IHNpemVvZiBjYmlfcmVzZXRfY21uZCAmJgorCQkJbWVtY21wKHJlcS0+YnVmLCBjYmlfcmVzZXRfY21uZCwKKwkJCQlzaXplb2YgY2JpX3Jlc2V0X2NtbmQpID09IDApIHsKKworCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gc3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24KKwkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCisJCURCRyhmc2csICJjYmkgcmVzZXQgcmVxdWVzdFxuIik7CisJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9SRVNFVCk7CisJCXJldHVybjsKKwl9CisKKwlWREJHKGZzZywgIkNCW0ldIGFjY2VwdCBkZXZpY2Utc3BlY2lmaWMgY29tbWFuZFxuIik7CisJc3Bpbl9sb2NrKCZmc2ctPmxvY2spOworCisJLyogU2F2ZSB0aGUgY29tbWFuZCBmb3IgbGF0ZXIgKi8KKwlpZiAoZnNnLT5jYmJ1Zl9jbW5kX3NpemUpCisJCVdBUk4oZnNnLCAiQ0JbSV0gb3ZlcndyaXRpbmcgcHJldmlvdXMgY29tbWFuZFxuIik7CisJZnNnLT5jYmJ1Zl9jbW5kX3NpemUgPSByZXEtPmFjdHVhbDsKKwltZW1jcHkoZnNnLT5jYmJ1Zl9jbW5kLCByZXEtPmJ1ZiwgZnNnLT5jYmJ1Zl9jbW5kX3NpemUpOworCisJc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CisJd2FrZXVwX3RocmVhZChmc2cpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgcmVjZWl2ZWRfY2JpX2Fkc2Moc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQgKmJoKQore30KKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworc3RhdGljIGludCBjbGFzc19zZXR1cF9yZXEoc3RydWN0IGZzZ19kZXYgKmZzZywKKwkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3X2xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwlpZiAoIWZzZy0+Y29uZmlnKQorCQlyZXR1cm4gdmFsdWU7CisKKwkvKiBIYW5kbGUgQnVsay1vbmx5IGNsYXNzLXNwZWNpZmljIHJlcXVlc3RzICovCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwkJY2FzZSBVU0JfQlVMS19SRVNFVF9SRVFVRVNUOgorCQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfAorCQkJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJCWJyZWFrOworCQkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJCXZhbHVlID0gLUVET007CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIFJhaXNlIGFuIGV4Y2VwdGlvbiB0byBzdG9wIHRoZSBjdXJyZW50IG9wZXJhdGlvbgorCQkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCisJCQlEQkcoZnNnLCAiYnVsayByZXNldCByZXF1ZXN0XG4iKTsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9SRVNFVCk7CisJCQl2YWx1ZSA9IERFTEFZRURfU1RBVFVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfQlVMS19HRVRfTUFYX0xVTl9SRVFVRVNUOgorCQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTiB8CisJCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQkJYnJlYWs7CisJCQlpZiAod19pbmRleCAhPSAwKSB7CisJCQkJdmFsdWUgPSAtRURPTTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCVZEQkcoZnNnLCAiZ2V0IG1heCBMVU5cbiIpOworCQkJKih1OCAqKSByZXEtPmJ1ZiA9IGZzZy0+bmx1bnMgLSAxOworCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIDEpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgQ0JJIGNsYXNzLXNwZWNpZmljIHJlcXVlc3RzICovCisJZWxzZSB7CisJCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCQljYXNlIFVTQl9DQklfQURTQ19SRVFVRVNUOgorCQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfAorCQkJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJCWJyZWFrOworCQkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJCXZhbHVlID0gLUVET007CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAod19sZW5ndGggPiBNQVhfQ09NTUFORF9TSVpFKSB7CisJCQkJdmFsdWUgPSAtRU9WRVJGTE9XOworCQkJCWJyZWFrOworCQkJfQorCQkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJCWZzZy0+ZXAwcmVxLT5jb250ZXh0ID0gcmVjZWl2ZWRfY2JpX2Fkc2M7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh2YWx1ZSA9PSAtRU9QTk9UU1VQUCkKKwkJVkRCRyhmc2csCisJCQkidW5rbm93biBjbGFzcy1zcGVjaWZpYyBjb250cm9sIHJlcSAiCisJCQkiJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwldVxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQljdHJsLT53VmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXAwIHN0YW5kYXJkIHJlcXVlc3QgaGFuZGxlcnMuICBUaGVzZSBhbHdheXMgcnVuIGluX2lycS4gKi8KKworc3RhdGljIGludCBzdGFuZGFyZF9zZXR1cF9yZXEoc3RydWN0IGZzZ19kZXYgKmZzZywKKwkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3X3ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNgkJCXdfbGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCS8qIFVzdWFsbHkgdGhpcyBqdXN0IHN0b3JlcyByZXBseSBkYXRhIGluIHRoZSBwcmUtYWxsb2NhdGVkIGVwMCBidWZmZXIsCisJICogYnV0IGNvbmZpZyBjaGFuZ2UgZXZlbnRzIHdpbGwgYWxzbyByZWNvbmZpZ3VyZSBoYXJkd2FyZS4gKi8KKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJc3dpdGNoICh3X3ZhbHVlID4+IDgpIHsKKworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQlWREJHKGZzZywgImdldCBkZXZpY2UgZGVzY3JpcHRvclxuIik7CisJCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgc2l6ZW9mIGRldmljZV9kZXNjKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmRldmljZV9kZXNjLCB2YWx1ZSk7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCVZEQkcoZnNnLCAiZ2V0IGRldmljZSBxdWFsaWZpZXJcbiIpOworCQkJaWYgKCFmc2ctPmdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZfcXVhbGlmaWVyKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmRldl9xdWFsaWZpZXIsIHZhbHVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJCVZEQkcoZnNnLCAiZ2V0IG90aGVyLXNwZWVkIGNvbmZpZyBkZXNjcmlwdG9yXG4iKTsKKwkJCWlmICghZnNnLT5nYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCWdvdG8gZ2V0X2NvbmZpZzsKKyNlbmRpZgorCQljYXNlIFVTQl9EVF9DT05GSUc6CisJCQlWREJHKGZzZywgImdldCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JcbiIpOworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCQlnZXRfY29uZmlnOgorI2VuZGlmCisJCQl2YWx1ZSA9IHBvcHVsYXRlX2NvbmZpZ19idWYoZnNnLT5nYWRnZXQsCisJCQkJCXJlcS0+YnVmLAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQlWREJHKGZzZywgImdldCBzdHJpbmcgZGVzY3JpcHRvclxuIik7CisKKwkJCS8qIHdJbmRleCA9PSBsYW5ndWFnZSBjb2RlICovCisJCQl2YWx1ZSA9IHVzYl9nYWRnZXRfZ2V0X3N0cmluZygmc3RyaW5ndGFiLAorCQkJCQl3X3ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJLyogT25lIGNvbmZpZywgdHdvIHNwZWVkcyAqLworCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJVkRCRyhmc2csICJzZXQgY29uZmlndXJhdGlvblxuIik7CisJCWlmICh3X3ZhbHVlID09IENPTkZJR19WQUxVRSB8fCB3X3ZhbHVlID09IDApIHsKKwkJCWZzZy0+bmV3X2NvbmZpZyA9IHdfdmFsdWU7CisKKwkJCS8qIFJhaXNlIGFuIGV4Y2VwdGlvbiB0byB3aXBlIG91dCBwcmV2aW91cyB0cmFuc2FjdGlvbgorCQkJICogc3RhdGUgKHF1ZXVlZCBidWZzLCBldGMpIGFuZCBzZXQgdGhlIG5ldyBjb25maWcuICovCisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfQ09ORklHX0NIQU5HRSk7CisJCQl2YWx1ZSA9IERFTEFZRURfU1RBVFVTOworCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCQlVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCQlWREJHKGZzZywgImdldCBjb25maWd1cmF0aW9uXG4iKTsKKwkJKih1OCAqKSByZXEtPmJ1ZiA9IGZzZy0+Y29uZmlnOworCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlicmVhazsKKwkJaWYgKGZzZy0+Y29uZmlnICYmIHdfaW5kZXggPT0gMCkgeworCisJCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gd2lwZSBvdXQgcHJldmlvdXMgdHJhbnNhY3Rpb24KKwkJCSAqIHN0YXRlIChxdWV1ZWQgYnVmcywgZXRjKSBhbmQgaW5zdGFsbCB0aGUgbmV3CisJCQkgKiBpbnRlcmZhY2UgYWx0c2V0dGluZy4gKi8KKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9JTlRFUkZBQ0VfQ0hBTkdFKTsKKwkJCXZhbHVlID0gREVMQVlFRF9TVEFUVVM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlicmVhazsKKwkJaWYgKCFmc2ctPmNvbmZpZykKKwkJCWJyZWFrOworCQlpZiAod19pbmRleCAhPSAwKSB7CisJCQl2YWx1ZSA9IC1FRE9NOworCQkJYnJlYWs7CisJCX0KKwkJVkRCRyhmc2csICJnZXQgaW50ZXJmYWNlXG4iKTsKKwkJKih1OCAqKSByZXEtPmJ1ZiA9IDA7CisJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlWREJHKGZzZywKKwkJCSJ1bmtub3duIGNvbnRyb2wgcmVxICUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJXVcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworCitzdGF0aWMgaW50IGZzZ19zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJaW50CQkJcmM7CisKKwkrK2ZzZy0+ZXAwX3JlcV90YWc7CQkvLyBSZWNvcmQgYXJyaXZhbCBvZiBhIG5ldyByZXF1ZXN0CisJZnNnLT5lcDByZXEtPmNvbnRleHQgPSBOVUxMOworCWZzZy0+ZXAwcmVxLT5sZW5ndGggPSAwOworCWR1bXBfbXNnKGZzZywgImVwMC1zZXR1cCIsICh1OCAqKSBjdHJsLCBzaXplb2YoKmN0cmwpKTsKKworCWlmICgoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfQ0xBU1MpCisJCXJjID0gY2xhc3Nfc2V0dXBfcmVxKGZzZywgY3RybCk7CisJZWxzZQorCQlyYyA9IHN0YW5kYXJkX3NldHVwX3JlcShmc2csIGN0cmwpOworCisJLyogUmVzcG9uZCB3aXRoIGRhdGEvc3RhdHVzIG9yIGRlZmVyIHVudGlsIGxhdGVyPyAqLworCWlmIChyYyA+PSAwICYmIHJjICE9IERFTEFZRURfU1RBVFVTKSB7CisJCWZzZy0+ZXAwcmVxLT5sZW5ndGggPSByYzsKKwkJZnNnLT5lcDByZXEtPnplcm8gPSAocmMgPCBjdHJsLT53TGVuZ3RoICYmCisJCQkJKHJjICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMCk7CisJCWZzZy0+ZXAwcmVxX25hbWUgPSAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTiA/CisJCQkJImVwMC1pbiIgOiAiZXAwLW91dCIpOworCQlyYyA9IGVwMF9xdWV1ZShmc2cpOworCX0KKworCS8qIERldmljZSBlaXRoZXIgc3RhbGxzIChyYyA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiByYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBbGwgdGhlIGZvbGxvd2luZyByb3V0aW5lcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0ICovCisKKworLyogVXNlIHRoaXMgZm9yIGJ1bGsgb3IgaW50ZXJydXB0IHRyYW5zZmVycywgbm90IGVwMCAqLworc3RhdGljIHZvaWQgc3RhcnRfdHJhbnNmZXIoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXAsCisJCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLCB2b2xhdGlsZSBpbnQgKnBidXN5LAorCQl2b2xhdGlsZSBlbnVtIGZzZ19idWZmZXJfc3RhdGUgKnN0YXRlKQoreworCWludAlyYzsKKworCWlmIChlcCA9PSBmc2ctPmJ1bGtfaW4pCisJCWR1bXBfbXNnKGZzZywgImJ1bGstaW4iLCByZXEtPmJ1ZiwgcmVxLT5sZW5ndGgpOworCWVsc2UgaWYgKGVwID09IGZzZy0+aW50cl9pbikKKwkJZHVtcF9tc2coZnNnLCAiaW50ci1pbiIsIHJlcS0+YnVmLCByZXEtPmxlbmd0aCk7CisJKnBidXN5ID0gMTsKKwkqc3RhdGUgPSBCVUZfU1RBVEVfQlVTWTsKKwlyYyA9IHVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfS0VSTkVMKTsKKwlpZiAocmMgIT0gMCkgeworCQkqcGJ1c3kgPSAwOworCQkqc3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisKKwkJLyogV2UgY2FuJ3QgZG8gbXVjaCBtb3JlIHRoYW4gd2FpdCBmb3IgYSByZXNldCAqLworCisJCS8qIE5vdGU6IGN1cnJlbnRseSB0aGUgbmV0MjI4MCBkcml2ZXIgZmFpbHMgemVyby1sZW5ndGgKKwkJICogc3VibWlzc2lvbnMgaWYgRE1BIGlzIGVuYWJsZWQuICovCisJCWlmIChyYyAhPSAtRVNIVVRET1dOICYmICEocmMgPT0gLUVPUE5PVFNVUFAgJiYKKwkJCQkJCXJlcS0+bGVuZ3RoID09IDApKQorCQkJV0FSTihmc2csICJlcnJvciBpbiBzdWJtaXNzaW9uOiAlcyAtLT4gJWRcbiIsCisJCQkJCWVwLT5uYW1lLCByYyk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgc2xlZXBfdGhyZWFkKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CXJjOworCisJLyogV2FpdCB1bnRpbCBhIHNpZ25hbCBhcnJpdmVzIG9yIHdlIGFyZSB3b2tlbiB1cCAqLworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZzZy0+dGhyZWFkX3dxaCwKKwkJCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQpOworCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQgPSAwOworCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkKKwkJcmVmcmlnZXJhdG9yKFBGX0ZSRUVaRSk7CisJcmV0dXJuIChyYyA/IC1FSU5UUiA6IDApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZG9fcmVhZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1MzIJCQlsYmE7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCXJjOworCXUzMgkJCWFtb3VudF9sZWZ0OworCWxvZmZfdAkJCWZpbGVfb2Zmc2V0LCBmaWxlX29mZnNldF90bXA7CisJdW5zaWduZWQgaW50CQlhbW91bnQ7CisJdW5zaWduZWQgaW50CQlwYXJ0aWFsX3BhZ2U7CisJc3NpemVfdAkJCW5yZWFkOworCisJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncworCSAqIG5vdCB0b28gYmlnICovCisJaWYgKGZzZy0+Y21uZFswXSA9PSBTQ19SRUFEXzYpCisJCWxiYSA9IChmc2ctPmNtbmRbMV0gPDwgMTYpIHwgZ2V0X2JlMTYoJmZzZy0+Y21uZFsyXSk7CisJZWxzZSB7CisJCWxiYSA9IGdldF9iZTMyKCZmc2ctPmNtbmRbMl0pOworCisJCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKKwkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzID0gZG9uJ3QgcmVhZCBmcm9tIHRoZQorCQkgKiBjYWNoZSksIGJ1dCB3ZSBkb24ndCBpbXBsZW1lbnQgdGhlbS4gKi8KKwkJaWYgKChmc2ctPmNtbmRbMV0gJiB+MHgxOCkgIT0gMCkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZpbGVfb2Zmc2V0ID0gKChsb2ZmX3QpIGxiYSkgPDwgOTsKKworCS8qIENhcnJ5IG91dCB0aGUgZmlsZSByZWFkcyAqLworCWFtb3VudF9sZWZ0ID0gZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kOworCWlmICh1bmxpa2VseShhbW91bnRfbGVmdCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CQkvLyBObyBkZWZhdWx0IHJlcGx5CisKKwlmb3IgKDs7KSB7CisKKwkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSBuZWVkIHRvIHJlYWQ6CisJCSAqIFRyeSB0byByZWFkIHRoZSByZW1haW5pbmcgYW1vdW50LgorCQkgKiBCdXQgZG9uJ3QgcmVhZCBtb3JlIHRoYW4gdGhlIGJ1ZmZlciBzaXplLgorCQkgKiBBbmQgZG9uJ3QgdHJ5IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCQkgKiBGaW5hbGx5LCBpZiB3ZSdyZSBub3QgYXQgYSBwYWdlIGJvdW5kYXJ5LCBkb24ndCByZWFkIHBhc3QKKwkJICoJdGhlIG5leHQgcGFnZS4KKwkJICogSWYgdGhpcyBtZWFucyByZWFkaW5nIDAgdGhlbiB3ZSB3ZXJlIGFza2VkIHRvIHJlYWQgcGFzdAorCQkgKgl0aGUgZW5kIG9mIGZpbGUuICovCisJCWFtb3VudCA9IG1pbigodW5zaWduZWQgaW50KSBhbW91bnRfbGVmdCwgbW9kX2RhdGEuYnVmbGVuKTsKKwkJYW1vdW50ID0gbWluKChsb2ZmX3QpIGFtb3VudCwKKwkJCQljdXJsdW4tPmZpbGVfbGVuZ3RoIC0gZmlsZV9vZmZzZXQpOworCQlwYXJ0aWFsX3BhZ2UgPSBmaWxlX29mZnNldCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwkJaWYgKHBhcnRpYWxfcGFnZSA+IDApCisJCQlhbW91bnQgPSBtaW4oYW1vdW50LCAodW5zaWduZWQgaW50KSBQQUdFX0NBQ0hFX1NJWkUgLQorCQkJCQlwYXJ0aWFsX3BhZ2UpOworCisJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQl3aGlsZSAoYmgtPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSkgeworCQkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCS8qIElmIHdlIHdlcmUgYXNrZWQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZSwKKwkJICogZW5kIHdpdGggYW4gZW1wdHkgYnVmZmVyLiAqLworCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9CisJCQkJCVNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQliaC0+aW5yZXEtPmxlbmd0aCA9IDA7CisJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogUGVyZm9ybSB0aGUgcmVhZCAqLworCQlmaWxlX29mZnNldF90bXAgPSBmaWxlX29mZnNldDsKKwkJbnJlYWQgPSB2ZnNfcmVhZChjdXJsdW4tPmZpbHAsCisJCQkJKGNoYXIgX191c2VyICopIGJoLT5idWYsCisJCQkJYW1vdW50LCAmZmlsZV9vZmZzZXRfdG1wKTsKKwkJVkxEQkcoY3VybHVuLCAiZmlsZSByZWFkICV1IEAgJWxsdSAtPiAlZFxuIiwgYW1vdW50LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAorCQkJCShpbnQpIG5yZWFkKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FSU5UUjsKKworCQlpZiAobnJlYWQgPCAwKSB7CisJCQlMREJHKGN1cmx1biwgImVycm9yIGluIGZpbGUgcmVhZDogJWRcbiIsCisJCQkJCShpbnQpIG5yZWFkKTsKKwkJCW5yZWFkID0gMDsKKwkJfSBlbHNlIGlmIChucmVhZCA8IGFtb3VudCkgeworCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgcmVhZDogJWQvJXVcbiIsCisJCQkJCShpbnQpIG5yZWFkLCBhbW91bnQpOworCQkJbnJlYWQgLT0gKG5yZWFkICYgNTExKTsJLy8gUm91bmQgZG93biB0byBhIGJsb2NrCisJCX0KKwkJZmlsZV9vZmZzZXQgICs9IG5yZWFkOworCQlhbW91bnRfbGVmdCAgLT0gbnJlYWQ7CisJCWZzZy0+cmVzaWR1ZSAtPSBucmVhZDsKKwkJYmgtPmlucmVxLT5sZW5ndGggPSBucmVhZDsKKwkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7CisKKwkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJlcG9ydCBpdCBhbmQgaXRzIHBvc2l0aW9uICovCisJCWlmIChucmVhZCA8IGFtb3VudCkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfVU5SRUNPVkVSRURfUkVBRF9FUlJPUjsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gZmlsZV9vZmZzZXQgPj4gOTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGFtb3VudF9sZWZ0ID09IDApCisJCQlicmVhazsJCS8vIE5vIG1vcmUgbGVmdCB0byByZWFkCisKKwkJLyogU2VuZCB0aGlzIGJ1ZmZlciBhbmQgZ28gcmVhZCBzb21lIG1vcmUgKi8KKwkJYmgtPmlucmVxLT56ZXJvID0gMDsKKwkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOworCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gLUVJTzsJCS8vIE5vIGRlZmF1bHQgcmVwbHkKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGRvX3dyaXRlKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGx1bgkJKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCXUzMgkJCWxiYTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CisJaW50CQkJZ2V0X3NvbWVfbW9yZTsKKwl1MzIJCQlhbW91bnRfbGVmdF90b19yZXEsIGFtb3VudF9sZWZ0X3RvX3dyaXRlOworCWxvZmZfdAkJCXVzYl9vZmZzZXQsIGZpbGVfb2Zmc2V0LCBmaWxlX29mZnNldF90bXA7CisJdW5zaWduZWQgaW50CQlhbW91bnQ7CisJdW5zaWduZWQgaW50CQlwYXJ0aWFsX3BhZ2U7CisJc3NpemVfdAkJCW53cml0dGVuOworCWludAkJCXJjOworCisJaWYgKGN1cmx1bi0+cm8pIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfV1JJVEVfUFJPVEVDVEVEOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3VybHVuLT5maWxwLT5mX2ZsYWdzICY9IH5PX1NZTkM7CS8vIERlZmF1bHQgaXMgbm90IHRvIHdhaXQKKworCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKKwkgKiBub3QgdG9vIGJpZyAqLworCWlmIChmc2ctPmNtbmRbMF0gPT0gU0NfV1JJVEVfNikKKwkJbGJhID0gKGZzZy0+Y21uZFsxXSA8PCAxNikgfCBnZXRfYmUxNigmZnNnLT5jbW5kWzJdKTsKKwllbHNlIHsKKwkJbGJhID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFsyXSk7CisKKwkJLyogV2UgYWxsb3cgRFBPIChEaXNhYmxlIFBhZ2UgT3V0ID0gZG9uJ3Qgc2F2ZSBkYXRhIGluIHRoZQorCQkgKiBjYWNoZSkgYW5kIEZVQSAoRm9yY2UgVW5pdCBBY2Nlc3MgPSB3cml0ZSBkaXJlY3RseSB0byB0aGUKKwkJICogbWVkaXVtKS4gIFdlIGRvbid0IGltcGxlbWVudCBEUE87IHdlIGltcGxlbWVudCBGVUEgYnkKKwkJICogcGVyZm9ybWluZyBzeW5jaHJvbm91cyBvdXRwdXQuICovCisJCWlmICgoZnNnLT5jbW5kWzFdICYgfjB4MTgpICE9IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpCS8vIEZVQQorCQkJY3VybHVuLT5maWxwLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwl9CisJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENhcnJ5IG91dCB0aGUgZmlsZSB3cml0ZXMgKi8KKwlnZXRfc29tZV9tb3JlID0gMTsKKwlmaWxlX29mZnNldCA9IHVzYl9vZmZzZXQgPSAoKGxvZmZfdCkgbGJhKSA8PCA5OworCWFtb3VudF9sZWZ0X3RvX3JlcSA9IGFtb3VudF9sZWZ0X3RvX3dyaXRlID0gZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kOworCisJd2hpbGUgKGFtb3VudF9sZWZ0X3RvX3dyaXRlID4gMCkgeworCisJCS8qIFF1ZXVlIGEgcmVxdWVzdCBmb3IgbW9yZSBkYXRhIGZyb20gdGhlIGhvc3QgKi8KKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZICYmIGdldF9zb21lX21vcmUpIHsKKworCQkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSB3YW50IHRvIGdldDoKKwkJCSAqIFRyeSB0byBnZXQgdGhlIHJlbWFpbmluZyBhbW91bnQuCisJCQkgKiBCdXQgZG9uJ3QgZ2V0IG1vcmUgdGhhbiB0aGUgYnVmZmVyIHNpemUuCisJCQkgKiBBbmQgZG9uJ3QgdHJ5IHRvIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJCSAqIElmIHdlJ3JlIG5vdCBhdCBhIHBhZ2UgYm91bmRhcnksCisJCQkgKglkb24ndCBnbyBwYXN0IHRoZSBuZXh0IHBhZ2UuCisJCQkgKiBJZiB0aGlzIG1lYW5zIGdldHRpbmcgMCwgdGhlbiB3ZSB3ZXJlIGFza2VkCisJCQkgKgl0byB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgZmlsZS4KKwkJCSAqIEZpbmFsbHksIHJvdW5kIGRvd24gdG8gYSBibG9jayBib3VuZGFyeS4gKi8KKwkJCWFtb3VudCA9IG1pbihhbW91bnRfbGVmdF90b19yZXEsIG1vZF9kYXRhLmJ1Zmxlbik7CisJCQlhbW91bnQgPSBtaW4oKGxvZmZfdCkgYW1vdW50LCBjdXJsdW4tPmZpbGVfbGVuZ3RoIC0KKwkJCQkJdXNiX29mZnNldCk7CisJCQlwYXJ0aWFsX3BhZ2UgPSB1c2Jfb2Zmc2V0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCQkJaWYgKHBhcnRpYWxfcGFnZSA+IDApCisJCQkJYW1vdW50ID0gbWluKGFtb3VudCwKKwkodW5zaWduZWQgaW50KSBQQUdFX0NBQ0hFX1NJWkUgLSBwYXJ0aWFsX3BhZ2UpOworCisJCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCQlnZXRfc29tZV9tb3JlID0gMDsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQorCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOworCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gdXNiX29mZnNldCA+PiA5OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYW1vdW50IC09IChhbW91bnQgJiA1MTEpOworCQkJaWYgKGFtb3VudCA9PSAwKSB7CisKKwkJCQkvKiBXaHkgd2VyZSB3ZSB3ZXJlIGFza2VkIHRvIHRyYW5zZmVyIGEKKwkJCQkgKiBwYXJ0aWFsIGJsb2NrPyAqLworCQkJCWdldF9zb21lX21vcmUgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCisJCQl1c2Jfb2Zmc2V0ICs9IGFtb3VudDsKKwkJCWZzZy0+dXNiX2Ftb3VudF9sZWZ0IC09IGFtb3VudDsKKwkJCWFtb3VudF9sZWZ0X3RvX3JlcSAtPSBhbW91bnQ7CisJCQlpZiAoYW1vdW50X2xlZnRfdG9fcmVxID09IDApCisJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7CisKKwkJCS8qIGFtb3VudCBpcyBhbHdheXMgZGl2aXNpYmxlIGJ5IDUxMiwgaGVuY2UgYnkKKwkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZSAqLworCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9CisJCQkJCWFtb3VudDsKKwkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKKwkJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV3JpdGUgdGhlIHJlY2VpdmVkIGRhdGEgdG8gdGhlIGJhY2tpbmcgZmlsZSAqLworCQliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZHJhaW47CisJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZICYmICFnZXRfc29tZV9tb3JlKQorCQkJYnJlYWs7CQkJLy8gV2Ugc3RvcHBlZCBlYXJseQorCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9GVUxMKSB7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluID0gYmgtPm5leHQ7CisJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisKKwkJCS8qIERpZCBzb21ldGhpbmcgZ28gd3Jvbmcgd2l0aCB0aGUgdHJhbnNmZXI/ICovCisJCQlpZiAoYmgtPm91dHJlcS0+c3RhdHVzICE9IDApIHsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19DT01NVU5JQ0FUSU9OX0ZBSUxVUkU7CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJCWJyZWFrOworCQkJfQorCisJCQlhbW91bnQgPSBiaC0+b3V0cmVxLT5hY3R1YWw7CisJCQlpZiAoY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0IDwgYW1vdW50KSB7CisJCQkJTEVSUk9SKGN1cmx1biwKKwkid3JpdGUgJXUgQCAlbGx1IGJleW9uZCBlbmQgJWxsdVxuIiwKKwlhbW91bnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAorCSh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cmx1bi0+ZmlsZV9sZW5ndGgpOworCQkJCWFtb3VudCA9IGN1cmx1bi0+ZmlsZV9sZW5ndGggLSBmaWxlX29mZnNldDsKKwkJCX0KKworCQkJLyogUGVyZm9ybSB0aGUgd3JpdGUgKi8KKwkJCWZpbGVfb2Zmc2V0X3RtcCA9IGZpbGVfb2Zmc2V0OworCQkJbndyaXR0ZW4gPSB2ZnNfd3JpdGUoY3VybHVuLT5maWxwLAorCQkJCQkoY2hhciBfX3VzZXIgKikgYmgtPmJ1ZiwKKwkJCQkJYW1vdW50LCAmZmlsZV9vZmZzZXRfdG1wKTsKKwkJCVZMREJHKGN1cmx1biwgImZpbGUgd3JpdGUgJXUgQCAlbGx1IC0+ICVkXG4iLCBhbW91bnQsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAorCQkJCQkoaW50KSBud3JpdHRlbik7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FSU5UUjsJCS8vIEludGVycnVwdGVkIQorCisJCQlpZiAobndyaXR0ZW4gPCAwKSB7CisJCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHdyaXRlOiAlZFxuIiwKKwkJCQkJCShpbnQpIG53cml0dGVuKTsKKwkJCQlud3JpdHRlbiA9IDA7CisJCQl9IGVsc2UgaWYgKG53cml0dGVuIDwgYW1vdW50KSB7CisJCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgd3JpdGU6ICVkLyV1XG4iLAorCQkJCQkJKGludCkgbndyaXR0ZW4sIGFtb3VudCk7CisJCQkJbndyaXR0ZW4gLT0gKG53cml0dGVuICYgNTExKTsKKwkJCQkJCS8vIFJvdW5kIGRvd24gdG8gYSBibG9jaworCQkJfQorCQkJZmlsZV9vZmZzZXQgKz0gbndyaXR0ZW47CisJCQlhbW91bnRfbGVmdF90b193cml0ZSAtPSBud3JpdHRlbjsKKwkJCWZzZy0+cmVzaWR1ZSAtPSBud3JpdHRlbjsKKworCQkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJlcG9ydCBpdCBhbmQgaXRzIHBvc2l0aW9uICovCisJCQlpZiAobndyaXR0ZW4gPCBhbW91bnQpIHsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19XUklURV9FUlJPUjsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIERpZCB0aGUgaG9zdCBkZWNpZGUgdG8gc3RvcCBlYXJseT8gKi8KKwkJCWlmIChiaC0+b3V0cmVxLT5hY3R1YWwgIT0gYmgtPm91dHJlcS0+bGVuZ3RoKSB7CisJCQkJZnNnLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBXYWl0IGZvciBzb21ldGhpbmcgdG8gaGFwcGVuICovCisJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gLUVJTzsJCS8vIE5vIGRlZmF1bHQgcmVwbHkKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTeW5jIHRoZSBmaWxlIGRhdGEsIGRvbid0IGJvdGhlciB3aXRoIHRoZSBtZXRhZGF0YS4KKyAqIFRoaXMgY29kZSB3YXMgY29waWVkIGZyb20gZnMvYnVmZmVyLmM6c3lzX2ZkYXRhc3luYygpLiAqLworc3RhdGljIGludCBmc3luY19zdWIoc3RydWN0IGx1biAqY3VybHVuKQoreworCXN0cnVjdCBmaWxlCSpmaWxwID0gY3VybHVuLT5maWxwOworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CisJaW50CQlyYywgZXJyOworCisJaWYgKGN1cmx1bi0+cm8gfHwgIWZpbHApCisJCXJldHVybiAwOworCWlmICghZmlscC0+Zl9vcC0+ZnN5bmMpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlkb3duKCZpbm9kZS0+aV9zZW0pOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NZTkNXUklURTsKKwlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwllcnIgPSBmaWxwLT5mX29wLT5mc3luYyhmaWxwLCBmaWxwLT5mX2RlbnRyeSwgMSk7CisJaWYgKCFyYykKKwkJcmMgPSBlcnI7CisJZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKCFyYykKKwkJcmMgPSBlcnI7CisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX1NZTkNXUklURTsKKwl1cCgmaW5vZGUtPmlfc2VtKTsKKwlWTERCRyhjdXJsdW4sICJmZGF0YXN5bmMgLT4gJWRcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGZzeW5jX2FsbChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkKKwkJZnN5bmNfc3ViKCZmc2ctPmx1bnNbaV0pOworfQorCitzdGF0aWMgaW50IGRvX3N5bmNocm9uaXplX2NhY2hlKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJaW50CQlyYzsKKworCS8qIFdlIGlnbm9yZSB0aGUgcmVxdWVzdGVkIExCQSBhbmQgd3JpdGUgb3V0IGFsbCBmaWxlJ3MKKwkgKiBkaXJ0eSBkYXRhIGJ1ZmZlcnMuICovCisJcmMgPSBmc3luY19zdWIoY3VybHVuKTsKKwlpZiAocmMpCisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX0VSUk9SOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfc3ViKHN0cnVjdCBsdW4gKmN1cmx1bikKK3sKKwlzdHJ1Y3QgZmlsZQkqZmlscCA9IGN1cmx1bi0+ZmlscDsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJdW5zaWduZWQgbG9uZwlyYzsKKworCXJjID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyhpbm9kZS0+aV9tYXBwaW5nKTsKKwlWTERCRyhjdXJsdW4sICJpbnZhbGlkYXRlX2lub2RlX3BhZ2VzIC0+ICVsZFxuIiwgcmMpOworfQorCitzdGF0aWMgaW50IGRvX3ZlcmlmeShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1MzIJCQlsYmE7CisJdTMyCQkJdmVyaWZpY2F0aW9uX2xlbmd0aDsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJbG9mZl90CQkJZmlsZV9vZmZzZXQsIGZpbGVfb2Zmc2V0X3RtcDsKKwl1MzIJCQlhbW91bnRfbGVmdDsKKwl1bnNpZ25lZCBpbnQJCWFtb3VudDsKKwlzc2l6ZV90CQkJbnJlYWQ7CisKKwkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxvY2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCisJICogbm90IHRvbyBiaWcgKi8KKwlsYmEgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzJdKTsKKwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2UgYWxsb3cgRFBPIChEaXNhYmxlIFBhZ2UgT3V0ID0gZG9uJ3Qgc2F2ZSBkYXRhIGluIHRoZQorCSAqIGNhY2hlKSBidXQgd2UgZG9uJ3QgaW1wbGVtZW50IGl0LiAqLworCWlmICgoZnNnLT5jbW5kWzFdICYgfjB4MTApICE9IDApIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZlcmlmaWNhdGlvbl9sZW5ndGggPSBnZXRfYmUxNigmZnNnLT5jbW5kWzddKTsKKwlpZiAodW5saWtlbHkodmVyaWZpY2F0aW9uX2xlbmd0aCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CQkvLyBObyBkZWZhdWx0IHJlcGx5CisKKwkvKiBQcmVwYXJlIHRvIGNhcnJ5IG91dCB0aGUgZmlsZSB2ZXJpZnkgKi8KKwlhbW91bnRfbGVmdCA9IHZlcmlmaWNhdGlvbl9sZW5ndGggPDwgOTsKKwlmaWxlX29mZnNldCA9ICgobG9mZl90KSBsYmEpIDw8IDk7CisKKwkvKiBXcml0ZSBvdXQgYWxsIHRoZSBkaXJ0eSBidWZmZXJzIGJlZm9yZSBpbnZhbGlkYXRpbmcgdGhlbSAqLworCWZzeW5jX3N1YihjdXJsdW4pOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWludmFsaWRhdGVfc3ViKGN1cmx1bik7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCisJLyogSnVzdCB0cnkgdG8gcmVhZCB0aGUgcmVxdWVzdGVkIGJsb2NrcyAqLworCXdoaWxlIChhbW91bnRfbGVmdCA+IDApIHsKKworCQkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVhZDoKKwkJICogVHJ5IHRvIHJlYWQgdGhlIHJlbWFpbmluZyBhbW91bnQsIGJ1dCBub3QgbW9yZSB0aGFuCisJCSAqIHRoZSBidWZmZXIgc2l6ZS4KKwkJICogQW5kIGRvbid0IHRyeSB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJICogSWYgdGhpcyBtZWFucyByZWFkaW5nIDAgdGhlbiB3ZSB3ZXJlIGFza2VkIHRvIHJlYWQKKwkJICogcGFzdCB0aGUgZW5kIG9mIGZpbGUuICovCisJCWFtb3VudCA9IG1pbigodW5zaWduZWQgaW50KSBhbW91bnRfbGVmdCwgbW9kX2RhdGEuYnVmbGVuKTsKKwkJYW1vdW50ID0gbWluKChsb2ZmX3QpIGFtb3VudCwKKwkJCQljdXJsdW4tPmZpbGVfbGVuZ3RoIC0gZmlsZV9vZmZzZXQpOworCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9CisJCQkJCVNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFBlcmZvcm0gdGhlIHJlYWQgKi8KKwkJZmlsZV9vZmZzZXRfdG1wID0gZmlsZV9vZmZzZXQ7CisJCW5yZWFkID0gdmZzX3JlYWQoY3VybHVuLT5maWxwLAorCQkJCShjaGFyIF9fdXNlciAqKSBiaC0+YnVmLAorCQkJCWFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CisJCVZMREJHKGN1cmx1biwgImZpbGUgcmVhZCAldSBAICVsbHUgLT4gJWRcbiIsIGFtb3VudCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKKwkJCQkoaW50KSBucmVhZCk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CisKKwkJaWYgKG5yZWFkIDwgMCkgeworCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHZlcmlmeTogJWRcbiIsCisJCQkJCShpbnQpIG5yZWFkKTsKKwkJCW5yZWFkID0gMDsKKwkJfSBlbHNlIGlmIChucmVhZCA8IGFtb3VudCkgeworCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgdmVyaWZ5OiAlZC8ldVxuIiwKKwkJCQkJKGludCkgbnJlYWQsIGFtb3VudCk7CisJCQlucmVhZCAtPSAobnJlYWQgJiA1MTEpOwkvLyBSb3VuZCBkb3duIHRvIGEgc2VjdG9yCisJCX0KKwkJaWYgKG5yZWFkID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1VOUkVDT1ZFUkVEX1JFQURfRVJST1I7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQlicmVhazsKKwkJfQorCQlmaWxlX29mZnNldCArPSBucmVhZDsKKwkJYW1vdW50X2xlZnQgLT0gbnJlYWQ7CisJfQorCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZG9faW5xdWlyeShzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJdTgJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCisJc3RhdGljIGNoYXIgdmVuZG9yX2lkW10gPSAiTGludXggICAiOworCXN0YXRpYyBjaGFyIHByb2R1Y3RfaWRbXSA9ICJGaWxlLVN0b3IgR2FkZ2V0IjsKKworCWlmICghZnNnLT5jdXJsdW4pIHsJCS8vIFVuc3VwcG9ydGVkIExVTnMgYXJlIG9rYXkKKwkJZnNnLT5iYWRfbHVuX29rYXkgPSAxOworCQltZW1zZXQoYnVmLCAwLCAzNik7CisJCWJ1ZlswXSA9IDB4N2Y7CQkvLyBVbnN1cHBvcnRlZCwgbm8gZGV2aWNlLXR5cGUKKwkJcmV0dXJuIDM2OworCX0KKworCW1lbXNldChidWYsIDAsIDgpOwkvLyBOb24tcmVtb3ZhYmxlLCBkaXJlY3QtYWNjZXNzIGRldmljZQorCWlmIChtb2RfZGF0YS5yZW1vdmFibGUpCisJCWJ1ZlsxXSA9IDB4ODA7CisJYnVmWzJdID0gMjsJCS8vIEFOU0kgU0NTSSBsZXZlbCAyCisJYnVmWzNdID0gMjsJCS8vIFNDU0ktMiBJTlFVSVJZIGRhdGEgZm9ybWF0CisJYnVmWzRdID0gMzE7CQkvLyBBZGRpdGlvbmFsIGxlbmd0aAorCQkJCS8vIE5vIHNwZWNpYWwgb3B0aW9ucworCXNwcmludGYoYnVmICsgOCwgIiUtOHMlLTE2cyUwNHgiLCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQsCisJCQltb2RfZGF0YS5yZWxlYXNlKTsKKwlyZXR1cm4gMzY7Cit9CisKKworc3RhdGljIGludCBkb19yZXF1ZXN0X3NlbnNlKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCXUzMgkJc2QsIHNkaW5mbzsKKworCS8qCisJICogRnJvbSB0aGUgU0NTSS0yIHNwZWMuLCBzZWN0aW9uIDcuOSAoVW5pdCBhdHRlbnRpb24gY29uZGl0aW9uKToKKwkgKgorCSAqIElmIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kIGlzIHJlY2VpdmVkIGZyb20gYW4gaW5pdGlhdG9yCisJICogd2l0aCBhIHBlbmRpbmcgdW5pdCBhdHRlbnRpb24gY29uZGl0aW9uIChiZWZvcmUgdGhlIHRhcmdldAorCSAqIGdlbmVyYXRlcyB0aGUgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiksIHRoZW4gdGhlCisJICogdGFyZ2V0IHNoYWxsIGVpdGhlcjoKKwkgKiAgIGEpIHJlcG9ydCBhbnkgcGVuZGluZyBzZW5zZSBkYXRhIGFuZCBwcmVzZXJ2ZSB0aGUgdW5pdAorCSAqCWF0dGVudGlvbiBjb25kaXRpb24gb24gdGhlIGxvZ2ljYWwgdW5pdCwgb3IsCisJICogICBiKSByZXBvcnQgdGhlIHVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbiwgbWF5IGRpc2NhcmQgYW55CisJICoJcGVuZGluZyBzZW5zZSBkYXRhLCBhbmQgY2xlYXIgdGhlIHVuaXQgYXR0ZW50aW9uCisJICoJY29uZGl0aW9uIG9uIHRoZSBsb2dpY2FsIHVuaXQgZm9yIHRoYXQgaW5pdGlhdG9yLgorCSAqCisJICogRlNHIG5vcm1hbGx5IHVzZXMgb3B0aW9uIGEpOyBlbmFibGUgdGhpcyBjb2RlIHRvIHVzZSBvcHRpb24gYikuCisJICovCisjaWYgMAorCWlmIChjdXJsdW4gJiYgY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhICE9IFNTX05PX1NFTlNFKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IGN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YTsKKwkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTk9fU0VOU0U7CisJfQorI2VuZGlmCisKKwlpZiAoIWN1cmx1bikgewkJLy8gVW5zdXBwb3J0ZWQgTFVOcyBhcmUgb2theQorCQlmc2ctPmJhZF9sdW5fb2theSA9IDE7CisJCXNkID0gU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQ7CisJCXNkaW5mbyA9IDA7CisJfSBlbHNlIHsKKwkJc2QgPSBjdXJsdW4tPnNlbnNlX2RhdGE7CisJCXNkaW5mbyA9IGN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvOworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19OT19TRU5TRTsKKwkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSAwOworCX0KKworCW1lbXNldChidWYsIDAsIDE4KTsKKwlidWZbMF0gPSAweDgwIHwgMHg3MDsJCQkvLyBWYWxpZCwgY3VycmVudCBlcnJvcgorCWJ1ZlsyXSA9IFNLKHNkKTsKKwlwdXRfYmUzMigmYnVmWzNdLCBzZGluZm8pOwkJLy8gU2Vuc2UgaW5mb3JtYXRpb24KKwlidWZbN10gPSAxOCAtIDg7CQkJLy8gQWRkaXRpb25hbCBzZW5zZSBsZW5ndGgKKwlidWZbMTJdID0gQVNDKHNkKTsKKwlidWZbMTNdID0gQVNDUShzZCk7CisJcmV0dXJuIDE4OworfQorCisKK3N0YXRpYyBpbnQgZG9fcmVhZF9jYXBhY2l0eShzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTMyCQlsYmEgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzJdKTsKKwlpbnQJCXBtaSA9IGZzZy0+Y21uZFs4XTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCisJLyogQ2hlY2sgdGhlIFBNSSBhbmQgTEJBIGZpZWxkcyAqLworCWlmIChwbWkgPiAxIHx8IChwbWkgPT0gMCAmJiBsYmEgIT0gMCkpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXB1dF9iZTMyKCZidWZbMF0sIGN1cmx1bi0+bnVtX3NlY3RvcnMgLSAxKTsJLy8gTWF4IGxvZ2ljYWwgYmxvY2sKKwlwdXRfYmUzMigmYnVmWzRdLCA1MTIpOwkJCQkvLyBCbG9jayBsZW5ndGgKKwlyZXR1cm4gODsKK30KKworCitzdGF0aWMgaW50IGRvX21vZGVfc2Vuc2Uoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQgKmJoKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCWludAkJbXNjbW5kID0gZnNnLT5jbW5kWzBdOworCXU4CQkqYnVmID0gKHU4ICopIGJoLT5idWY7CisJdTgJCSpidWYwID0gYnVmOworCWludAkJcGMsIHBhZ2VfY29kZTsKKwlpbnQJCWNoYW5nZWFibGVfdmFsdWVzLCBhbGxfcGFnZXM7CisJaW50CQl2YWxpZF9wYWdlID0gMDsKKwlpbnQJCWxlbiwgbGltaXQ7CisKKwlpZiAoKGZzZy0+Y21uZFsxXSAmIH4weDA4KSAhPSAwKSB7CQkvLyBNYXNrIGF3YXkgREJECisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcGMgPSBmc2ctPmNtbmRbMl0gPj4gNjsKKwlwYWdlX2NvZGUgPSBmc2ctPmNtbmRbMl0gJiAweDNmOworCWlmIChwYyA9PSAzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1NBVklOR19QQVJBTUVURVJTX05PVF9TVVBQT1JURUQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGFuZ2VhYmxlX3ZhbHVlcyA9IChwYyA9PSAxKTsKKwlhbGxfcGFnZXMgPSAocGFnZV9jb2RlID09IDB4M2YpOworCisJLyogV3JpdGUgdGhlIG1vZGUgcGFyYW1ldGVyIGhlYWRlci4gIEZpeGVkIHZhbHVlcyBhcmU6IGRlZmF1bHQKKwkgKiBtZWRpdW0gdHlwZSwgbm8gY2FjaGUgY29udHJvbCAoRFBPRlVBKSwgYW5kIG5vIGJsb2NrIGRlc2NyaXB0b3JzLgorCSAqIFRoZSBvbmx5IHZhcmlhYmxlIHZhbHVlIGlzIHRoZSBXcml0ZVByb3RlY3QgYml0LiAgV2Ugd2lsbCBmaWxsIGluCisJICogdGhlIG1vZGUgZGF0YSBsZW5ndGggbGF0ZXIuICovCisJbWVtc2V0KGJ1ZiwgMCwgOCk7CisJaWYgKG1zY21uZCA9PSBTQ19NT0RFX1NFTlNFXzYpIHsKKwkJYnVmWzJdID0gKGN1cmx1bi0+cm8gPyAweDgwIDogMHgwMCk7CQkvLyBXUCwgRFBPRlVBCisJCWJ1ZiArPSA0OworCQlsaW1pdCA9IDI1NTsKKwl9IGVsc2UgewkJCS8vIFNDX01PREVfU0VOU0VfMTAKKwkJYnVmWzNdID0gKGN1cmx1bi0+cm8gPyAweDgwIDogMHgwMCk7CQkvLyBXUCwgRFBPRlVBCisJCWJ1ZiArPSA4OworCQlsaW1pdCA9IDY1NTM1OwkJLy8gU2hvdWxkIHJlYWxseSBiZSBtb2RfZGF0YS5idWZsZW4KKwl9CisKKwkvKiBObyBibG9jayBkZXNjcmlwdG9ycyAqLworCisJLyogVGhlIG1vZGUgcGFnZXMsIGluIG51bWVyaWNhbCBvcmRlci4gIFRoZSBvbmx5IHBhZ2Ugd2Ugc3VwcG9ydAorCSAqIGlzIHRoZSBDYWNoaW5nIHBhZ2UuICovCisJaWYgKHBhZ2VfY29kZSA9PSAweDA4IHx8IGFsbF9wYWdlcykgeworCQl2YWxpZF9wYWdlID0gMTsKKwkJYnVmWzBdID0gMHgwODsJCS8vIFBhZ2UgY29kZQorCQlidWZbMV0gPSAxMDsJCS8vIFBhZ2UgbGVuZ3RoCisJCW1lbXNldChidWYrMiwgMCwgMTApOwkvLyBOb25lIG9mIHRoZSBmaWVsZHMgYXJlIGNoYW5nZWFibGUKKworCQlpZiAoIWNoYW5nZWFibGVfdmFsdWVzKSB7CisJCQlidWZbMl0gPSAweDA0OwkvLyBXcml0ZSBjYWNoZSBlbmFibGUsCisJCQkJCS8vIFJlYWQgY2FjaGUgbm90IGRpc2FibGVkCisJCQkJCS8vIE5vIGNhY2hlIHJldGVudGlvbiBwcmlvcml0aWVzCisJCQlwdXRfYmUxNigmYnVmWzRdLCAweGZmZmYpOyAgLy8gRG9uJ3QgZGlzYWJsZSBwcmVmZXRjaAorCQkJCQkvLyBNaW5pbXVtIHByZWZldGNoID0gMAorCQkJcHV0X2JlMTYoJmJ1Zls4XSwgMHhmZmZmKTsgIC8vIE1heGltdW0gcHJlZmV0Y2gKKwkJCXB1dF9iZTE2KCZidWZbMTBdLCAweGZmZmYpOyAvLyBNYXhpbXVtIHByZWZldGNoIGNlaWxpbmcKKwkJfQorCQlidWYgKz0gMTI7CisJfQorCisJLyogQ2hlY2sgdGhhdCBhIHZhbGlkIHBhZ2Ugd2FzIHJlcXVlc3RlZCBhbmQgdGhlIG1vZGUgZGF0YSBsZW5ndGgKKwkgKiBpc24ndCB0b28gbG9uZy4gKi8KKwlsZW4gPSBidWYgLSBidWYwOworCWlmICghdmFsaWRfcGFnZSB8fCBsZW4gPiBsaW1pdCkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogIFN0b3JlIHRoZSBtb2RlIGRhdGEgbGVuZ3RoICovCisJaWYgKG1zY21uZCA9PSBTQ19NT0RFX1NFTlNFXzYpCisJCWJ1ZjBbMF0gPSBsZW4gLSAxOworCWVsc2UKKwkJcHV0X2JlMTYoYnVmMCwgbGVuIC0gMik7CisJcmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgaW50IGRvX3N0YXJ0X3N0b3Aoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwlpbnQJCWxvZWosIHN0YXJ0OworCisJaWYgKCFtb2RfZGF0YS5yZW1vdmFibGUpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBpbnQgaW1tZWQgPSBmc2ctPmNtbmRbMV0gJiAweDAxOworCWxvZWogPSBmc2ctPmNtbmRbNF0gJiAweDAyOworCXN0YXJ0ID0gZnNnLT5jbW5kWzRdICYgMHgwMTsKKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKKwlpZiAoKGZzZy0+Y21uZFsxXSAmIH4weDAxKSAhPSAwIHx8CQkvLyBNYXNrIGF3YXkgSW1tZWQKKwkJCShmc2ctPmNtbmRbNF0gJiB+MHgwMykgIT0gMCkgewkvLyBNYXNrIExvRWosIFN0YXJ0CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXN0YXJ0KSB7CisKKwkJLyogQXJlIHdlIGFsbG93ZWQgdG8gdW5sb2FkIHRoZSBtZWRpYT8gKi8KKwkJaWYgKGN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCkgeworCQkJTERCRyhjdXJsdW4sICJ1bmxvYWQgYXR0ZW1wdCBwcmV2ZW50ZWRcbiIpOworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTUVESVVNX1JFTU9WQUxfUFJFVkVOVEVEOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGxvZWopIHsJCS8vIFNpbXVsYXRlIGFuIHVubG9hZC9lamVjdAorCQkJdXBfcmVhZCgmZnNnLT5maWxlc2VtKTsKKwkJCWRvd25fd3JpdGUoJmZzZy0+ZmlsZXNlbSk7CisJCQljbG9zZV9iYWNraW5nX2ZpbGUoY3VybHVuKTsKKwkJCXVwX3dyaXRlKCZmc2ctPmZpbGVzZW0pOworCQkJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOworCQl9CisJfSBlbHNlIHsKKworCQkvKiBPdXIgZW11bGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBtb3VudGluZzsgdGhlIG1lZGl1bSBpcworCQkgKiBhdmFpbGFibGUgZm9yIHVzZSBhcyBzb29uIGFzIGl0IGlzIGxvYWRlZC4gKi8KKwkJaWYgKCFiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19NRURJVU1fTk9UX1BSRVNFTlQ7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZG9fcHJldmVudF9hbGxvdyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCWludAkJcHJldmVudDsKKworCWlmICghbW9kX2RhdGEucmVtb3ZhYmxlKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfQ09NTUFORDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJldmVudCA9IGZzZy0+Y21uZFs0XSAmIDB4MDE7CisJaWYgKChmc2ctPmNtbmRbNF0gJiB+MHgwMSkgIT0gMCkgewkJLy8gTWFzayBhd2F5IFByZXZlbnQKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwgJiYgIXByZXZlbnQpCisJCWZzeW5jX3N1YihjdXJsdW4pOworCWN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCA9IHByZXZlbnQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkb19yZWFkX2Zvcm1hdF9jYXBhY2l0aWVzKHN0cnVjdCBmc2dfZGV2ICpmc2csCisJCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsKKworCWJ1ZlswXSA9IGJ1ZlsxXSA9IGJ1ZlsyXSA9IDA7CisJYnVmWzNdID0gODsJCS8vIE9ubHkgdGhlIEN1cnJlbnQvTWF4aW11bSBDYXBhY2l0eSBEZXNjcmlwdG9yCisJYnVmICs9IDQ7CisKKwlwdXRfYmUzMigmYnVmWzBdLCBjdXJsdW4tPm51bV9zZWN0b3JzKTsJCS8vIE51bWJlciBvZiBibG9ja3MKKwlwdXRfYmUzMigmYnVmWzRdLCA1MTIpOwkJCQkvLyBCbG9jayBsZW5ndGgKKwlidWZbNF0gPSAweDAyOwkJCQkJLy8gQ3VycmVudCBjYXBhY2l0eQorCXJldHVybiAxMjsKK30KKworCitzdGF0aWMgaW50IGRvX21vZGVfc2VsZWN0KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKworCS8qIFdlIGRvbid0IHN1cHBvcnQgTU9ERSBTRUxFQ1QgKi8KKwljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJcmM7CisKKwlyYyA9IGZzZ19zZXRfaGFsdChmc2csIGZzZy0+YnVsa19pbik7CisJaWYgKHJjID09IC1FQUdBSU4pCisJCVZEQkcoZnNnLCAiZGVsYXllZCBidWxrLWluIGVuZHBvaW50IGhhbHRcbiIpOworCXdoaWxlIChyYyAhPSAwKSB7CisJCWlmIChyYyAhPSAtRUFHQUlOKSB7CisJCQlXQVJOKGZzZywgInVzYl9lcF9zZXRfaGFsdCAtPiAlZFxuIiwgcmMpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBXYWl0IGZvciBhIHNob3J0IHRpbWUgYW5kIHRoZW4gdHJ5IGFnYWluICovCisJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApICE9IDApCisJCQlyZXR1cm4gLUVJTlRSOworCQlyYyA9IHVzYl9lcF9zZXRfaGFsdChmc2ctPmJ1bGtfaW4pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcGFkX3dpdGhfemVyb3Moc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJdTMyCQkJbmtlZXAgPSBiaC0+aW5yZXEtPmxlbmd0aDsKKwl1MzIJCQluc2VuZDsKKwlpbnQJCQlyYzsKKworCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsJCS8vIEZvciB0aGUgZmlyc3QgaXRlcmF0aW9uCisJZnNnLT51c2JfYW1vdW50X2xlZnQgPSBua2VlcCArIGZzZy0+cmVzaWR1ZTsKKwl3aGlsZSAoZnNnLT51c2JfYW1vdW50X2xlZnQgPiAwKSB7CisKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlIGZyZWUgKi8KKwkJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKworCQluc2VuZCA9IG1pbihmc2ctPnVzYl9hbW91bnRfbGVmdCwgKHUzMikgbW9kX2RhdGEuYnVmbGVuKTsKKwkJbWVtc2V0KGJoLT5idWYgKyBua2VlcCwgMCwgbnNlbmQgLSBua2VlcCk7CisJCWJoLT5pbnJlcS0+bGVuZ3RoID0gbnNlbmQ7CisJCWJoLT5pbnJlcS0+emVybyA9IDA7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJZnNnLT51c2JfYW1vdW50X2xlZnQgLT0gbnNlbmQ7CisJCW5rZWVwID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGhyb3dfYXdheV9kYXRhKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCXUzMgkJCWFtb3VudDsKKwlpbnQJCQlyYzsKKworCXdoaWxlICgoYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluKS0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZIHx8CisJCQlmc2ctPnVzYl9hbW91bnRfbGVmdCA+IDApIHsKKworCQkvKiBUaHJvdyBhd2F5IHRoZSBkYXRhIGluIGEgZmlsbGVkIGJ1ZmZlciAqLworCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9GVUxMKSB7CisJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluID0gYmgtPm5leHQ7CisKKwkJCS8qIEEgc2hvcnQgcGFja2V0IG9yIGFuIGVycm9yIGVuZHMgZXZlcnl0aGluZyAqLworCQkJaWYgKGJoLT5vdXRyZXEtPmFjdHVhbCAhPSBiaC0+b3V0cmVxLT5sZW5ndGggfHwKKwkJCQkJYmgtPm91dHJlcS0+c3RhdHVzICE9IDApIHsKKwkJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQpOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRyeSB0byBzdWJtaXQgYW5vdGhlciByZXF1ZXN0IGlmIHdlIG5lZWQgb25lICovCisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9FTVBUWSAmJiBmc2ctPnVzYl9hbW91bnRfbGVmdCA+IDApIHsKKwkJCWFtb3VudCA9IG1pbihmc2ctPnVzYl9hbW91bnRfbGVmdCwKKwkJCQkJKHUzMikgbW9kX2RhdGEuYnVmbGVuKTsKKworCQkJLyogYW1vdW50IGlzIGFsd2F5cyBkaXZpc2libGUgYnkgNTEyLCBoZW5jZSBieQorCQkJICogdGhlIGJ1bGstb3V0IG1heHBhY2tldCBzaXplICovCisJCQliaC0+b3V0cmVxLT5sZW5ndGggPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoID0KKwkJCQkJYW1vdW50OworCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxLAorCQkJCQkmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OworCQkJZnNnLT51c2JfYW1vdW50X2xlZnQgLT0gYW1vdW50OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBPdGhlcndpc2Ugd2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiAqLworCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZmluaXNoX3JlcGx5KHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCWludAkJCXJjID0gMDsKKworCXN3aXRjaCAoZnNnLT5kYXRhX2RpcikgeworCWNhc2UgREFUQV9ESVJfTk9ORToKKwkJYnJlYWs7CQkJLy8gTm90aGluZyB0byBzZW5kCisKKwkvKiBJZiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIGhvc3Qgd2FudHMgdG8gcmVhZCBvciB3cml0ZSwKKwkgKiB0aGlzIG11c3QgYmUgQ0Igb3IgQ0JJIHdpdGggYW4gdW5rbm93biBjb21tYW5kLiAgV2UgbXVzdG4ndAorCSAqIHRyeSB0byBzZW5kIG9yIHJlY2VpdmUgYW55IGRhdGEuICBTbyBzdGFsbCBib3RoIGJ1bGsgcGlwZXMKKwkgKiBpZiB3ZSBjYW4gYW5kIHdhaXQgZm9yIGEgcmVzZXQuICovCisJY2FzZSBEQVRBX0RJUl9VTktOT1dOOgorCQlpZiAobW9kX2RhdGEuY2FuX3N0YWxsKSB7CisJCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfb3V0KTsKKwkJCXJjID0gaGFsdF9idWxrX2luX2VuZHBvaW50KGZzZyk7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBBbGwgYnV0IHRoZSBsYXN0IGJ1ZmZlciBvZiBkYXRhIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gc2VudCAqLworCWNhc2UgREFUQV9ESVJfVE9fSE9TVDoKKwkJaWYgKGZzZy0+ZGF0YV9zaXplID09IDApCisJCQk7CQkvLyBOb3RoaW5nIHRvIHNlbmQKKworCQkvKiBJZiB0aGVyZSdzIG5vIHJlc2lkdWUsIHNpbXBseSBzZW5kIHRoZSBsYXN0IGJ1ZmZlciAqLworCQllbHNlIGlmIChmc2ctPnJlc2lkdWUgPT0gMCkgeworCQkJYmgtPmlucmVxLT56ZXJvID0gMDsKKwkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJfQorCisJCS8qIFRoZXJlIGlzIGEgcmVzaWR1ZS4gIEZvciBDQiBhbmQgQ0JJLCBzaW1wbHkgbWFyayB0aGUgZW5kCisJCSAqIG9mIHRoZSBkYXRhIHdpdGggYSBzaG9ydCBwYWNrZXQuICBIb3dldmVyLCBpZiB3ZSBhcmUKKwkJICogYWxsb3dlZCB0byBzdGFsbCwgdGhlcmUgd2FzIG5vIGRhdGEgYXQgYWxsIChyZXNpZHVlID09CisJCSAqIGRhdGFfc2l6ZSksIGFuZCB0aGUgY29tbWFuZCBmYWlsZWQgKGludmFsaWQgTFVOIG9yCisJCSAqIHNlbnNlIGRhdGEgaXMgc2V0KSwgdGhlbiBoYWx0IHRoZSBidWxrLWluIGVuZHBvaW50CisJCSAqIGluc3RlYWQuICovCisJCWVsc2UgaWYgKCF0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJCWlmIChtb2RfZGF0YS5jYW5fc3RhbGwgJiYKKwkJCQkJZnNnLT5yZXNpZHVlID09IGZzZy0+ZGF0YV9zaXplICYmCisJKCFmc2ctPmN1cmx1biB8fCBmc2ctPmN1cmx1bi0+c2Vuc2VfZGF0YSAhPSBTU19OT19TRU5TRSkpIHsKKwkJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJCQkJcmMgPSBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJCX0gZWxzZSB7CisJCQkJYmgtPmlucmVxLT56ZXJvID0gMTsKKwkJCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAorCQkJCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJCX0KKwkJfQorCisJCS8qIEZvciBCdWxrLW9ubHksIGlmIHdlJ3JlIGFsbG93ZWQgdG8gc3RhbGwgdGhlbiBzZW5kIHRoZQorCQkgKiBzaG9ydCBwYWNrZXQgYW5kIGhhbHQgdGhlIGJ1bGstaW4gZW5kcG9pbnQuICBJZiB3ZSBjYW4ndAorCQkgKiBzdGFsbCwgcGFkIG91dCB0aGUgcmVtYWluaW5nIGRhdGEgd2l0aCAwJ3MuICovCisJCWVsc2UgeworCQkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgeworCQkJCWJoLT5pbnJlcS0+emVybyA9IDE7CisJCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQkJcmMgPSBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJCX0gZWxzZQorCQkJCXJjID0gcGFkX3dpdGhfemVyb3MoZnNnKTsKKwkJfQorCQlicmVhazsKKworCS8qIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCB3ZSB3YW50IGZyb20gdGhlIGRhdGEgdGhlIGhvc3QgaGFzIHNlbnQuCisJICogVGhlcmUgbWF5IHN0aWxsIGJlIG91dHN0YW5kaW5nIGJ1bGstb3V0IHJlcXVlc3RzLiAqLworCWNhc2UgREFUQV9ESVJfRlJPTV9IT1NUOgorCQlpZiAoZnNnLT5yZXNpZHVlID09IDApCisJCQk7CQkvLyBOb3RoaW5nIHRvIHJlY2VpdmUKKworCQkvKiBEaWQgdGhlIGhvc3Qgc3RvcCBzZW5kaW5nIHVuZXhwZWN0ZWRseSBlYXJseT8gKi8KKwkJZWxzZSBpZiAoZnNnLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQpIHsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CisJCQlyYyA9IC1FSU5UUjsKKwkJfQorCisJCS8qIFdlIGhhdmVuJ3QgcHJvY2Vzc2VkIGFsbCB0aGUgaW5jb21pbmcgZGF0YS4gIEV2ZW4gdGhvdWdoCisJCSAqIHdlIG1heSBiZSBhbGxvd2VkIHRvIHN0YWxsLCBkb2luZyBzbyB3b3VsZCBjYXVzZSBhIHJhY2UuCisJCSAqIFRoZSBjb250cm9sbGVyIG1heSBhbHJlYWR5IGhhdmUgQUNLJ2VkIGFsbCB0aGUgcmVtYWluaW5nCisJCSAqIGJ1bGstb3V0IHBhY2tldHMsIGluIHdoaWNoIGNhc2UgdGhlIGhvc3Qgd291bGRuJ3Qgc2VlIGEKKwkJICogU1RBTEwuICBOb3QgcmVhbGl6aW5nIHRoZSBlbmRwb2ludCB3YXMgaGFsdGVkLCBpdCB3b3VsZG4ndAorCQkgKiBjbGVhciB0aGUgaGFsdCAtLSBsZWFkaW5nIHRvIHByb2JsZW1zIGxhdGVyIG9uLiAqLworI2lmIDAKKwkJZWxzZSBpZiAobW9kX2RhdGEuY2FuX3N0YWxsKSB7CisJCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfb3V0KTsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CisJCQlyYyA9IC1FSU5UUjsKKwkJfQorI2VuZGlmCisKKwkJLyogV2UgY2FuJ3Qgc3RhbGwuICBSZWFkIGluIHRoZSBleGNlc3MgZGF0YSBhbmQgdGhyb3cgaXQKKwkJICogYWxsIGF3YXkuICovCisJCWVsc2UKKwkJCXJjID0gdGhyb3dfYXdheV9kYXRhKGZzZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBzZW5kX3N0YXR1cyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CisJaW50CQkJcmM7CisJdTgJCQlzdGF0dXMgPSBVU0JfU1RBVFVTX1BBU1M7CisJdTMyCQkJc2QsIHNkaW5mbyA9IDA7CisKKwkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSAqLworCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCXJldHVybiByYzsKKwl9CisKKwlpZiAoY3VybHVuKSB7CisJCXNkID0gY3VybHVuLT5zZW5zZV9kYXRhOworCQlzZGluZm8gPSBjdXJsdW4tPnNlbnNlX2RhdGFfaW5mbzsKKwl9IGVsc2UgaWYgKGZzZy0+YmFkX2x1bl9va2F5KQorCQlzZCA9IFNTX05PX1NFTlNFOworCWVsc2UKKwkJc2QgPSBTU19MT0dJQ0FMX1VOSVRfTk9UX1NVUFBPUlRFRDsKKworCWlmIChmc2ctPnBoYXNlX2Vycm9yKSB7CisJCURCRyhmc2csICJzZW5kaW5nIHBoYXNlLWVycm9yIHN0YXR1c1xuIik7CisJCXN0YXR1cyA9IFVTQl9TVEFUVVNfUEhBU0VfRVJST1I7CisJCXNkID0gU1NfSU5WQUxJRF9DT01NQU5EOworCX0gZWxzZSBpZiAoc2QgIT0gU1NfTk9fU0VOU0UpIHsKKwkJREJHKGZzZywgInNlbmRpbmcgY29tbWFuZC1mYWlsdXJlIHN0YXR1c1xuIik7CisJCXN0YXR1cyA9IFVTQl9TVEFUVVNfRkFJTDsKKwkJVkRCRyhmc2csICIgIHNlbnNlIGRhdGE6IFNLIHglMDJ4LCBBU0MgeCUwMngsIEFTQ1EgeCUwMng7IgorCQkJCSIgIGluZm8geCV4XG4iLAorCQkJCVNLKHNkKSwgQVNDKHNkKSwgQVNDUShzZCksIHNkaW5mbyk7CisJfQorCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCQlzdHJ1Y3QgYnVsa19jc193cmFwCSpjc3cgPSAoc3RydWN0IGJ1bGtfY3Nfd3JhcCAqKSBiaC0+YnVmOworCisJCS8qIFN0b3JlIGFuZCBzZW5kIHRoZSBCdWxrLW9ubHkgQ1NXICovCisJCWNzdy0+U2lnbmF0dXJlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOworCQljc3ctPlRhZyA9IGZzZy0+dGFnOworCQljc3ctPlJlc2lkdWUgPSBjcHVfdG9fbGUzMihmc2ctPnJlc2lkdWUpOworCQljc3ctPlN0YXR1cyA9IHN0YXR1czsKKworCQliaC0+aW5yZXEtPmxlbmd0aCA9IFVTQl9CVUxLX0NTX1dSQVBfTEVOOworCQliaC0+aW5yZXEtPnplcm8gPSAwOworCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAorCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisKKwl9IGVsc2UgaWYgKG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID09IFVTQl9QUl9DQikgeworCisJCS8qIENvbnRyb2wtQnVsayB0cmFuc3BvcnQgaGFzIG5vIHN0YXR1cyBwaGFzZSEgKi8KKwkJcmV0dXJuIDA7CisKKwl9IGVsc2UgewkJCS8vIFVTQl9QUl9DQkkKKwkJc3RydWN0IGludGVycnVwdF9kYXRhCSpidWYgPSAoc3RydWN0IGludGVycnVwdF9kYXRhICopCisJCQkJCQliaC0+YnVmOworCisJCS8qIFN0b3JlIGFuZCBzZW5kIHRoZSBJbnRlcnJ1cHQgZGF0YS4gIFVGSSBzZW5kcyB0aGUgQVNDCisJCSAqIGFuZCBBU0NRIGJ5dGVzLiAgRXZlcnl0aGluZyBlbHNlIHNlbmRzIGEgVHlwZSAod2hpY2gKKwkJICogaXMgYWx3YXlzIDApIGFuZCB0aGUgc3RhdHVzIFZhbHVlLiAqLworCQlpZiAobW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9PSBVU0JfU0NfVUZJKSB7CisJCQlidWYtPmJUeXBlID0gQVNDKHNkKTsKKwkJCWJ1Zi0+YlZhbHVlID0gQVNDUShzZCk7CisJCX0gZWxzZSB7CisJCQlidWYtPmJUeXBlID0gMDsKKwkJCWJ1Zi0+YlZhbHVlID0gc3RhdHVzOworCQl9CisJCWZzZy0+aW50cmVxLT5sZW5ndGggPSBDQklfSU5URVJSVVBUX0RBVEFfTEVOOworCisJCWZzZy0+aW50cl9idWZmaGQgPSBiaDsJCS8vIFBvaW50IHRvIHRoZSByaWdodCBidWZmaGQKKwkJZnNnLT5pbnRyZXEtPmJ1ZiA9IGJoLT5pbnJlcS0+YnVmOworCQlmc2ctPmludHJlcS0+ZG1hID0gYmgtPmlucmVxLT5kbWE7CisJCWZzZy0+aW50cmVxLT5jb250ZXh0ID0gYmg7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5pbnRyX2luLCBmc2ctPmludHJlcSwKKwkJCQkmZnNnLT5pbnRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJfQorCisJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2hlY2sgd2hldGhlciB0aGUgY29tbWFuZCBpcyBwcm9wZXJseSBmb3JtZWQgYW5kIHdoZXRoZXIgaXRzIGRhdGEgc2l6ZQorICogYW5kIGRpcmVjdGlvbiBhZ3JlZSB3aXRoIHRoZSB2YWx1ZXMgd2UgYWxyZWFkeSBoYXZlLiAqLworc3RhdGljIGludCBjaGVja19jb21tYW5kKHN0cnVjdCBmc2dfZGV2ICpmc2csIGludCBjbW5kX3NpemUsCisJCWVudW0gZGF0YV9kaXJlY3Rpb24gZGF0YV9kaXIsIHVuc2lnbmVkIGludCBtYXNrLAorCQlpbnQgbmVlZHNfbWVkaXVtLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludAkJCWk7CisJaW50CQkJbHVuID0gZnNnLT5jbW5kWzFdID4+IDU7CisJc3RhdGljIGNvbnN0IGNoYXIJZGlybGV0dGVyWzRdID0geyd1JywgJ28nLCAnaScsICduJ307CisJY2hhcgkJCWhkbGVuWzIwXTsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCisJLyogQWRqdXN0IHRoZSBleHBlY3RlZCBjbW5kX3NpemUgZm9yIHByb3RvY29sIGVuY2Fwc3VsYXRpb24gcGFkZGluZy4KKwkgKiBUcmFuc3BhcmVudCBTQ1NJIGRvZXNuJ3QgcGFkLiAqLworCWlmIChwcm90b2NvbF9pc19zY3NpKCkpCisJCTsKKworCS8qIFRoZXJlJ3Mgc29tZSBkaXNhZ3JlZW1lbnQgYXMgdG8gd2hldGhlciBSQkMgcGFkcyBjb21tYW5kcyBvciBub3QuCisJICogV2UnbGwgcGxheSBpdCBzYWZlIGFuZCBhY2NlcHQgZWl0aGVyIGZvcm0uICovCisJZWxzZSBpZiAobW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9PSBVU0JfU0NfUkJDKSB7CisJCWlmIChmc2ctPmNtbmRfc2l6ZSA9PSAxMikKKwkJCWNtbmRfc2l6ZSA9IDEyOworCisJLyogQWxsIHRoZSBvdGhlciBwcm90b2NvbHMgcGFkIHRvIDEyIGJ5dGVzICovCisJfSBlbHNlCisJCWNtbmRfc2l6ZSA9IDEyOworCisJaGRsZW5bMF0gPSAwOworCWlmIChmc2ctPmRhdGFfZGlyICE9IERBVEFfRElSX1VOS05PV04pCisJCXNwcmludGYoaGRsZW4sICIsIEglYz0ldSIsIGRpcmxldHRlclsoaW50KSBmc2ctPmRhdGFfZGlyXSwKKwkJCQlmc2ctPmRhdGFfc2l6ZSk7CisJVkRCRyhmc2csICJTQ1NJIGNvbW1hbmQ6ICVzOyAgRGM9JWQsIEQlYz0ldTsgIEhjPSVkJXNcbiIsCisJCQluYW1lLCBjbW5kX3NpemUsIGRpcmxldHRlclsoaW50KSBkYXRhX2Rpcl0sCisJCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQsIGZzZy0+Y21uZF9zaXplLCBoZGxlbik7CisKKwkvKiBXZSBjYW4ndCByZXBseSBhdCBhbGwgdW50aWwgd2Uga25vdyB0aGUgY29ycmVjdCBkYXRhIGRpcmVjdGlvbgorCSAqIGFuZCBzaXplLiAqLworCWlmIChmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPT0gMCkKKwkJZGF0YV9kaXIgPSBEQVRBX0RJUl9OT05FOworCWlmIChmc2ctPmRhdGFfZGlyID09IERBVEFfRElSX1VOS05PV04pIHsJLy8gQ0Igb3IgQ0JJCisJCWZzZy0+ZGF0YV9kaXIgPSBkYXRhX2RpcjsKKwkJZnNnLT5kYXRhX3NpemUgPSBmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQ7CisKKwl9IGVsc2UgewkJCQkJLy8gQnVsay1vbmx5CisJCWlmIChmc2ctPmRhdGFfc2l6ZSA8IGZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCkgeworCisJCQkvKiBIb3N0IGRhdGEgc2l6ZSA8IERldmljZSBkYXRhIHNpemUgaXMgYSBwaGFzZSBlcnJvci4KKwkJCSAqIENhcnJ5IG91dCB0aGUgY29tbWFuZCwgYnV0IG9ubHkgdHJhbnNmZXIgYXMgbXVjaAorCQkJICogYXMgd2UgYXJlIGFsbG93ZWQuICovCisJCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBmc2ctPmRhdGFfc2l6ZTsKKwkJCWZzZy0+cGhhc2VfZXJyb3IgPSAxOworCQl9CisJfQorCWZzZy0+cmVzaWR1ZSA9IGZzZy0+dXNiX2Ftb3VudF9sZWZ0ID0gZnNnLT5kYXRhX3NpemU7CisKKwkvKiBDb25mbGljdGluZyBkYXRhIGRpcmVjdGlvbnMgaXMgYSBwaGFzZSBlcnJvciAqLworCWlmIChmc2ctPmRhdGFfZGlyICE9IGRhdGFfZGlyICYmIGZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA+IDApIHsKKwkJZnNnLT5waGFzZV9lcnJvciA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFZlcmlmeSB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGl0c2VsZiAqLworCWlmIChjbW5kX3NpemUgIT0gZnNnLT5jbW5kX3NpemUpIHsKKworCQkvKiBTcGVjaWFsIGNhc2Ugd29ya2Fyb3VuZDogTVMtV2luZG93cyBpc3N1ZXMgUkVRVUVTVCBTRU5TRQorCQkgKiB3aXRoIGNidy0+TGVuZ3RoID09IDEyIChpdCBzaG91bGQgYmUgNikuICovCisJCWlmIChmc2ctPmNtbmRbMF0gPT0gU0NfUkVRVUVTVF9TRU5TRSAmJiBmc2ctPmNtbmRfc2l6ZSA9PSAxMikKKwkJCWNtbmRfc2l6ZSA9IGZzZy0+Y21uZF9zaXplOworCQllbHNlIHsKKwkJCWZzZy0+cGhhc2VfZXJyb3IgPSAxOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSBMVU4gdmFsdWVzIGFyZSBvb25zaXN0ZW50ICovCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCQlpZiAoZnNnLT5sdW4gIT0gbHVuKQorCQkJREJHKGZzZywgInVzaW5nIExVTiAlZCBmcm9tIENCVywgIgorCQkJCQkibm90IExVTiAlZCBmcm9tIENEQlxuIiwKKwkJCQkJZnNnLT5sdW4sIGx1bik7CisJfSBlbHNlCisJCWZzZy0+bHVuID0gbHVuOwkJLy8gVXNlIExVTiBmcm9tIHRoZSBjb21tYW5kCisKKwkvKiBDaGVjayB0aGUgTFVOICovCisJaWYgKGZzZy0+bHVuID49IDAgJiYgZnNnLT5sdW4gPCBmc2ctPm5sdW5zKSB7CisJCWZzZy0+Y3VybHVuID0gY3VybHVuID0gJmZzZy0+bHVuc1tmc2ctPmx1bl07CisJCWlmIChmc2ctPmNtbmRbMF0gIT0gU0NfUkVRVUVTVF9TRU5TRSkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTk9fU0VOU0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlmc2ctPmN1cmx1biA9IGN1cmx1biA9IE5VTEw7CisJCWZzZy0+YmFkX2x1bl9va2F5ID0gMDsKKworCQkvKiBJTlFVSVJZIGFuZCBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQKKwkJICogdG8gdXNlIHVuc3VwcG9ydGVkIExVTnM7IGFsbCBvdGhlcnMgbWF5IG5vdC4gKi8KKwkJaWYgKGZzZy0+Y21uZFswXSAhPSBTQ19JTlFVSVJZICYmCisJCQkJZnNnLT5jbW5kWzBdICE9IFNDX1JFUVVFU1RfU0VOU0UpIHsKKwkJCURCRyhmc2csICJ1bnN1cHBvcnRlZCBMVU4gJWRcbiIsIGZzZy0+bHVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogSWYgYSB1bml0IGF0dGVudGlvbiBjb25kaXRpb24gZXhpc3RzLCBvbmx5IElOUVVJUlkgYW5kCisJICogUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgYWxsb3dlZDsgYW55dGhpbmcgZWxzZSBtdXN0IGZhaWwuICovCisJaWYgKGN1cmx1biAmJiBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgIT0gU1NfTk9fU0VOU0UgJiYKKwkJCWZzZy0+Y21uZFswXSAhPSBTQ19JTlFVSVJZICYmCisJCQlmc2ctPmNtbmRbMF0gIT0gU0NfUkVRVUVTVF9TRU5TRSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGE7CisJCWN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSA9IFNTX05PX1NFTlNFOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IG9ubHkgY29tbWFuZCBieXRlcyBsaXN0ZWQgaW4gdGhlIG1hc2sgYXJlIG5vbi16ZXJvICovCisJZnNnLT5jbW5kWzFdICY9IDB4MWY7CQkJLy8gTWFzayBhd2F5IHRoZSBMVU4KKwlmb3IgKGkgPSAxOyBpIDwgY21uZF9zaXplOyArK2kpIHsKKwkJaWYgKGZzZy0+Y21uZFtpXSAmJiAhKG1hc2sgJiAoMSA8PCBpKSkpIHsKKwkJCWlmIChjdXJsdW4pCisJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIElmIHRoZSBtZWRpdW0gaXNuJ3QgbW91bnRlZCBhbmQgdGhlIGNvbW1hbmQgbmVlZHMgdG8gYWNjZXNzCisJICogaXQsIHJldHVybiBhbiBlcnJvci4gKi8KKwlpZiAoY3VybHVuICYmICFiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pICYmIG5lZWRzX21lZGl1bSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19NRURJVU1fTk9UX1BSRVNFTlQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZG9fc2NzaV9jb21tYW5kKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCXJjOworCWludAkJCXJlcGx5ID0gLUVJTlZBTDsKKwlpbnQJCQlpOworCXN0YXRpYyBjaGFyCQl1bmtub3duWzE2XTsKKworCWR1bXBfY2RiKGZzZyk7CisKKwkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSBmb3IgZGF0YSBvciBzdGF0dXMgKi8KKwliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZHJhaW4gPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJcmV0dXJuIHJjOworCQl9CisJZnNnLT5waGFzZV9lcnJvciA9IDA7CisJZnNnLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQgPSAwOworCisJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOwkvLyBXZSdyZSB1c2luZyB0aGUgYmFja2luZyBmaWxlCisJc3dpdGNoIChmc2ctPmNtbmRbMF0pIHsKKworCWNhc2UgU0NfSU5RVUlSWToKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZnNnLT5jbW5kWzRdOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDQpLCAwLAorCQkJCSJJTlFVSVJZIikpID09IDApCisJCQlyZXBseSA9IGRvX2lucXVpcnkoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTEVDVF82OgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBmc2ctPmNtbmRbNF07CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgNiwgREFUQV9ESVJfRlJPTV9IT1NULAorCQkJCSgxPDwxKSB8ICgxPDw0KSwgMCwKKwkJCQkiTU9ERSBTRUxFQ1QoNikiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fbW9kZV9zZWxlY3QoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTEVDVF8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMzw8NyksIDAsCisJCQkJIk1PREUgU0VMRUNUKDEwKSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19tb2RlX3NlbGVjdChmc2csIGJoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX01PREVfU0VOU0VfNjoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZnNnLT5jbW5kWzRdOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDEpIHwgKDE8PDIpIHwgKDE8PDQpLCAwLAorCQkJCSJNT0RFIFNFTlNFKDYpIikpID09IDApCisJCQlyZXBseSA9IGRvX21vZGVfc2Vuc2UoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTlNFXzEwOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBnZXRfYmUxNigmZnNnLT5jbW5kWzddKTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMTw8MikgfCAoMzw8NyksIDAsCisJCQkJIk1PREUgU0VOU0UoMTApIikpID09IDApCisJCQlyZXBseSA9IGRvX21vZGVfc2Vuc2UoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19QUkVWRU5UX0FMTE9XX01FRElVTV9SRU1PVkFMOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX05PTkUsCisJCQkJKDE8PDQpLCAwLAorCQkJCSJQUkVWRU5ULUFMTE9XIE1FRElVTSBSRU1PVkFMIikpID09IDApCisJCQlyZXBseSA9IGRvX3ByZXZlbnRfYWxsb3coZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1JFQURfNjoKKwkJaSA9IGZzZy0+Y21uZFs0XTsKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gKGkgPT0gMCA/IDI1NiA6IGkpIDw8IDk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgNiwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoNzw8MSkgfCAoMTw8NCksIDEsCisJCQkJIlJFQUQoNikiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfUkVBRF8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMHhmPDwyKSB8ICgzPDw3KSwgMSwKKwkJCQkiUkVBRCgxMCkiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfUkVBRF8xMjoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFs2XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMiwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMHhmPDwyKSB8ICgweGY8PDYpLCAxLAorCQkJCSJSRUFEKDEyKSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19yZWFkKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19SRUFEX0NBUEFDSVRZOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSA4OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEwLCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSgweGY8PDIpIHwgKDE8PDgpLCAxLAorCQkJCSJSRUFEIENBUEFDSVRZIikpID09IDApCisJCQlyZXBseSA9IGRvX3JlYWRfY2FwYWNpdHkoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19SRUFEX0ZPUk1BVF9DQVBBQ0lUSUVTOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBnZXRfYmUxNigmZnNnLT5jbW5kWzddKTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMzw8NyksIDEsCisJCQkJIlJFQUQgRk9STUFUIENBUEFDSVRJRVMiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZF9mb3JtYXRfY2FwYWNpdGllcyhmc2csIGJoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1JFUVVFU1RfU0VOU0U6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGZzZy0+Y21uZFs0XTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSgxPDw0KSwgMCwKKwkJCQkiUkVRVUVTVCBTRU5TRSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19yZXF1ZXN0X3NlbnNlKGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfU1RBUlRfU1RPUF9VTklUOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX05PTkUsCisJCQkJKDE8PDEpIHwgKDE8PDQpLCAwLAorCQkJCSJTVEFSVC1TVE9QIFVOSVQiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fc3RhcnRfc3RvcChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfU1lOQ0hST05JWkVfQ0FDSEU6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX05PTkUsCisJCQkJKDB4Zjw8MikgfCAoMzw8NyksIDEsCisJCQkJIlNZTkNIUk9OSVpFIENBQ0hFIikpID09IDApCisJCQlyZXBseSA9IGRvX3N5bmNocm9uaXplX2NhY2hlKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19URVNUX1VOSVRfUkVBRFk6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX05PTkUsCisJCQkJMCwgMSwKKwkJCQkiVEVTVCBVTklUIFJFQURZIik7CisJCWJyZWFrOworCisJLyogQWx0aG91Z2ggb3B0aW9uYWwsIHRoaXMgY29tbWFuZCBpcyB1c2VkIGJ5IE1TLVdpbmRvd3MuICBXZQorCSAqIHN1cHBvcnQgYSBtaW5pbWFsIHZlcnNpb246IEJ5dENoayBtdXN0IGJlIDAuICovCisJY2FzZSBTQ19WRVJJRlk6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX05PTkUsCisJCQkJKDE8PDEpIHwgKDB4Zjw8MikgfCAoMzw8NyksIDEsCisJCQkJIlZFUklGWSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb192ZXJpZnkoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1dSSVRFXzY6CisJCWkgPSBmc2ctPmNtbmRbNF07CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IChpID09IDAgPyAyNTYgOiBpKSA8PCA5OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkoNzw8MSkgfCAoMTw8NCksIDEsCisJCQkJIldSSVRFKDYpIikpID09IDApCisJCQlyZXBseSA9IGRvX3dyaXRlKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19XUklURV8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfRlJPTV9IT1NULAorCQkJCSgxPDwxKSB8ICgweGY8PDIpIHwgKDM8PDcpLCAxLAorCQkJCSJXUklURSgxMCkiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fd3JpdGUoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1dSSVRFXzEyOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzZdKSA8PCA5OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEyLCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJKDE8PDEpIHwgKDB4Zjw8MikgfCAoMHhmPDw2KSwgMSwKKwkJCQkiV1JJVEUoMTIpIikpID09IDApCisJCQlyZXBseSA9IGRvX3dyaXRlKGZzZyk7CisJCWJyZWFrOworCisJLyogU29tZSBtYW5kYXRvcnkgY29tbWFuZHMgdGhhdCB3ZSByZWNvZ25pemUgYnV0IGRvbid0IGltcGxlbWVudC4KKwkgKiBUaGV5IGRvbid0IG1lYW4gbXVjaCBpbiB0aGlzIHNldHRpbmcuICBJdCdzIGxlZnQgYXMgYW4gZXhlcmNpc2UKKwkgKiBmb3IgYW55b25lIGludGVyZXN0ZWQgdG8gaW1wbGVtZW50IFJFU0VSVkUgYW5kIFJFTEVBU0UgaW4gdGVybXMKKwkgKiBvZiBQb3NpeCBsb2Nrcy4gKi8KKwljYXNlIFNDX0ZPUk1BVF9VTklUOgorCWNhc2UgU0NfUkVMRUFTRToKKwljYXNlIFNDX1JFU0VSVkU6CisJY2FzZSBTQ19TRU5EX0RJQUdOT1NUSUM6CisJCS8vIEZhbGwgdGhyb3VnaAorCisJZGVmYXVsdDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gMDsKKwkJc3ByaW50Zih1bmtub3duLCAiVW5rbm93biB4JTAyeCIsIGZzZy0+Y21uZFswXSk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgZnNnLT5jbW5kX3NpemUsCisJCQkJREFUQV9ESVJfVU5LTk9XTiwgMHhmZiwgMCwgdW5rbm93bikpID09IDApIHsKKwkJCWZzZy0+Y3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOworCQkJcmVwbHkgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZmc2ctPmZpbGVzZW0pOworCisJaWYgKHJlcGx5ID09IC1FSU5UUiB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCS8qIFNldCB1cCB0aGUgc2luZ2xlIHJlcGx5IGJ1ZmZlciBmb3IgZmluaXNoX3JlcGx5KCkgKi8KKwlpZiAocmVwbHkgPT0gLUVJTlZBTCkKKwkJcmVwbHkgPSAwOwkJLy8gRXJyb3IgcmVwbHkgbGVuZ3RoCisJaWYgKHJlcGx5ID49IDAgJiYgZnNnLT5kYXRhX2RpciA9PSBEQVRBX0RJUl9UT19IT1NUKSB7CisJCXJlcGx5ID0gbWluKCh1MzIpIHJlcGx5LCBmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQpOworCQliaC0+aW5yZXEtPmxlbmd0aCA9IHJlcGx5OworCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKKwkJZnNnLT5yZXNpZHVlIC09IHJlcGx5OworCX0JCQkJLy8gT3RoZXJ3aXNlIGl0J3MgYWxyZWFkeSBzZXQKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcmVjZWl2ZWRfY2J3KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGJoLT5vdXRyZXE7CisJc3RydWN0IGJ1bGtfY2Jfd3JhcAkqY2J3ID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgcmVxLT5idWY7CisKKwkvKiBXYXMgdGhpcyBhIHJlYWwgcGFja2V0PyAqLworCWlmIChyZXEtPnN0YXR1cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJcyB0aGUgQ0JXIHZhbGlkPyAqLworCWlmIChyZXEtPmFjdHVhbCAhPSBVU0JfQlVMS19DQl9XUkFQX0xFTiB8fAorCQkJY2J3LT5TaWduYXR1cmUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCQlVU0JfQlVMS19DQl9TSUcpKSB7CisJCURCRyhmc2csICJpbnZhbGlkIENCVzogbGVuICV1IHNpZyAweCV4XG4iLAorCQkJCXJlcS0+YWN0dWFsLAorCQkJCWxlMzJfdG9fY3B1KGNidy0+U2lnbmF0dXJlKSk7CisKKwkJLyogVGhlIEJ1bGstb25seSBzcGVjIHNheXMgd2UgTVVTVCBzdGFsbCB0aGUgYnVsayBwaXBlcyEKKwkJICogSWYgd2Ugd2FudCB0byBhdm9pZCBzdGFsbHMsIHNldCBhIGZsYWcgc28gdGhhdCB3ZSB3aWxsCisJCSAqIGNsZWFyIHRoZSBlbmRwb2ludCBoYWx0cyBhdCB0aGUgbmV4dCByZXNldC4gKi8KKwkJaWYgKCFtb2RfZGF0YS5jYW5fc3RhbGwpCisJCQlzZXRfYml0KENMRUFSX0JVTEtfSEFMVFMsICZmc2ctPmF0b21pY19iaXRmbGFncyk7CisJCWZzZ19zZXRfaGFsdChmc2csIGZzZy0+YnVsa19vdXQpOworCQloYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSXMgdGhlIENCVyBtZWFuaW5nZnVsPyAqLworCWlmIChjYnctPkx1biA+PSBNQVhfTFVOUyB8fCBjYnctPkZsYWdzICYgflVTQl9CVUxLX0lOX0ZMQUcgfHwKKwkJCWNidy0+TGVuZ3RoIDwgNiB8fCBjYnctPkxlbmd0aCA+IE1BWF9DT01NQU5EX1NJWkUpIHsKKwkJREJHKGZzZywgIm5vbi1tZWFuaW5nZnVsIENCVzogbHVuID0gJXUsIGZsYWdzID0gMHgleCwgIgorCQkJCSJjbWRsZW4gJXVcbiIsCisJCQkJY2J3LT5MdW4sIGNidy0+RmxhZ3MsIGNidy0+TGVuZ3RoKTsKKworCQkvKiBXZSBjYW4gZG8gYW55dGhpbmcgd2Ugd2FudCBoZXJlLCBzbyBsZXQncyBzdGFsbCB0aGUKKwkJICogYnVsayBwaXBlcyBpZiB3ZSBhcmUgYWxsb3dlZCB0by4gKi8KKwkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgeworCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5idWxrX291dCk7CisJCQloYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTYXZlIHRoZSBjb21tYW5kIGZvciBsYXRlciAqLworCWZzZy0+Y21uZF9zaXplID0gY2J3LT5MZW5ndGg7CisJbWVtY3B5KGZzZy0+Y21uZCwgY2J3LT5DREIsIGZzZy0+Y21uZF9zaXplKTsKKwlpZiAoY2J3LT5GbGFncyAmIFVTQl9CVUxLX0lOX0ZMQUcpCisJCWZzZy0+ZGF0YV9kaXIgPSBEQVRBX0RJUl9UT19IT1NUOworCWVsc2UKKwkJZnNnLT5kYXRhX2RpciA9IERBVEFfRElSX0ZST01fSE9TVDsKKwlmc2ctPmRhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KGNidy0+RGF0YVRyYW5zZmVyTGVuZ3RoKTsKKwlpZiAoZnNnLT5kYXRhX3NpemUgPT0gMCkKKwkJZnNnLT5kYXRhX2RpciA9IERBVEFfRElSX05PTkU7CisJZnNnLT5sdW4gPSBjYnctPkx1bjsKKwlmc2ctPnRhZyA9IGNidy0+VGFnOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X25leHRfY29tbWFuZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwlpbnQJCQlyYyA9IDA7CisKKwlpZiAodHJhbnNwb3J0X2lzX2JiYigpKSB7CisKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlY29tZSBhdmFpbGFibGUgKi8KKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQkJcmV0dXJuIHJjOworCQkJfQorCisJCS8qIFF1ZXVlIGEgcmVxdWVzdCB0byByZWFkIGEgQnVsay1vbmx5IENCVyAqLworCQlzZXRfYnVsa19vdXRfcmVxX2xlbmd0aChmc2csIGJoLCBVU0JfQlVMS19DQl9XUkFQX0xFTik7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKKwkJCQkmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKworCQkvKiBXZSB3aWxsIGRyYWluIHRoZSBidWZmZXIgaW4gc29mdHdhcmUsIHdoaWNoIG1lYW5zIHdlCisJCSAqIGNhbiByZXVzZSBpdCBmb3IgdGhlIG5leHQgZmlsbGluZy4gIE5vIG5lZWQgdG8gYWR2YW5jZQorCQkgKiBuZXh0X2J1ZmZoZF90b19maWxsLiAqLworCisJCS8qIFdhaXQgZm9yIHRoZSBDQlcgdG8gYXJyaXZlICovCisJCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0ZVTEwpIHsKKwkJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCXJjID0gcmVjZWl2ZWRfY2J3KGZzZywgYmgpOworCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisKKwl9IGVsc2UgewkJLy8gVVNCX1BSX0NCIG9yIFVTQl9QUl9DQkkKKworCQkvKiBXYWl0IGZvciB0aGUgbmV4dCBjb21tYW5kIHRvIGFycml2ZSAqLworCQl3aGlsZSAoZnNnLT5jYmJ1Zl9jbW5kX3NpemUgPT0gMCkgeworCQkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJCXJldHVybiByYzsKKwkJCX0KKworCQkvKiBJcyB0aGUgcHJldmlvdXMgc3RhdHVzIGludGVycnVwdCByZXF1ZXN0IHN0aWxsIGJ1c3k/CisJCSAqIFRoZSBob3N0IGlzIGFsbG93ZWQgdG8gc2tpcCByZWFkaW5nIHRoZSBzdGF0dXMsCisJCSAqIHNvIHdlIG11c3QgY2FuY2VsIGl0LiAqLworCQlpZiAoZnNnLT5pbnRyZXFfYnVzeSkKKwkJCXVzYl9lcF9kZXF1ZXVlKGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEpOworCisJCS8qIENvcHkgdGhlIGNvbW1hbmQgYW5kIG1hcmsgdGhlIGJ1ZmZlciBlbXB0eSAqLworCQlmc2ctPmRhdGFfZGlyID0gREFUQV9ESVJfVU5LTk9XTjsKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJZnNnLT5jbW5kX3NpemUgPSBmc2ctPmNiYnVmX2NtbmRfc2l6ZTsKKwkJbWVtY3B5KGZzZy0+Y21uZCwgZnNnLT5jYmJ1Zl9jbW5kLCBmc2ctPmNtbmRfc2l6ZSk7CisJCWZzZy0+Y2JidWZfY21uZF9zaXplID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlbmFibGVfZW5kcG9pbnQoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXAsCisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZCkKK3sKKwlpbnQJcmM7CisKKwllcC0+ZHJpdmVyX2RhdGEgPSBmc2c7CisJcmMgPSB1c2JfZXBfZW5hYmxlKGVwLCBkKTsKKwlpZiAocmMpCisJCUVSUk9SKGZzZywgImNhbid0IGVuYWJsZSAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBhbGxvY19yZXF1ZXN0KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCB1c2JfZXAgKmVwLAorCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKipwcmVxKQoreworCSpwcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9BVE9NSUMpOworCWlmICgqcHJlcSkKKwkJcmV0dXJuIDA7CisJRVJST1IoZnNnLCAiY2FuJ3QgYWxsb2NhdGUgcmVxdWVzdCBmb3IgJXNcbiIsIGVwLT5uYW1lKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIFJlc2V0IGludGVyZmFjZSBzZXR0aW5nIGFuZCByZS1pbml0IGVuZHBvaW50IHN0YXRlICh0b2dnbGUgZXRjKS4KKyAqIENhbGwgd2l0aCBhbHRzZXR0aW5nIDwgMCB0byBkaXNhYmxlIHRoZSBpbnRlcmZhY2UuICBUaGUgb25seSBvdGhlcgorICogYXZhaWxhYmxlIGFsdHNldHRpbmcgaXMgMCwgd2hpY2ggZW5hYmxlcyB0aGUgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50IGRvX3NldF9pbnRlcmZhY2Uoc3RydWN0IGZzZ19kZXYgKmZzZywgaW50IGFsdHNldHRpbmcpCit7CisJaW50CXJjID0gMDsKKwlpbnQJaTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwlpZiAoZnNnLT5ydW5uaW5nKQorCQlEQkcoZnNnLCAicmVzZXQgaW50ZXJmYWNlXG4iKTsKKworcmVzZXQ6CisJLyogRGVhbGxvY2F0ZSB0aGUgcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWlmIChiaC0+aW5yZXEpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZnNnLT5idWxrX2luLCBiaC0+aW5yZXEpOworCQkJYmgtPmlucmVxID0gTlVMTDsKKwkJfQorCQlpZiAoYmgtPm91dHJlcSkgeworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxKTsKKwkJCWJoLT5vdXRyZXEgPSBOVUxMOworCQl9CisJfQorCWlmIChmc2ctPmludHJlcSkgeworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEpOworCQlmc2ctPmludHJlcSA9IE5VTEw7CisJfQorCisJLyogRGlzYWJsZSB0aGUgZW5kcG9pbnRzICovCisJaWYgKGZzZy0+YnVsa19pbl9lbmFibGVkKSB7CisJCXVzYl9lcF9kaXNhYmxlKGZzZy0+YnVsa19pbik7CisJCWZzZy0+YnVsa19pbl9lbmFibGVkID0gMDsKKwl9CisJaWYgKGZzZy0+YnVsa19vdXRfZW5hYmxlZCkgeworCQl1c2JfZXBfZGlzYWJsZShmc2ctPmJ1bGtfb3V0KTsKKwkJZnNnLT5idWxrX291dF9lbmFibGVkID0gMDsKKwl9CisJaWYgKGZzZy0+aW50cl9pbl9lbmFibGVkKSB7CisJCXVzYl9lcF9kaXNhYmxlKGZzZy0+aW50cl9pbik7CisJCWZzZy0+aW50cl9pbl9lbmFibGVkID0gMDsKKwl9CisKKwlmc2ctPnJ1bm5pbmcgPSAwOworCWlmIChhbHRzZXR0aW5nIDwgMCB8fCByYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlEQkcoZnNnLCAic2V0IGludGVyZmFjZSAlZFxuIiwgYWx0c2V0dGluZyk7CisKKwkvKiBFbmFibGUgdGhlIGVuZHBvaW50cyAqLworCWQgPSBlcF9kZXNjKGZzZy0+Z2FkZ2V0LCAmZnNfYnVsa19pbl9kZXNjLCAmaHNfYnVsa19pbl9kZXNjKTsKKwlpZiAoKHJjID0gZW5hYmxlX2VuZHBvaW50KGZzZywgZnNnLT5idWxrX2luLCBkKSkgIT0gMCkKKwkJZ290byByZXNldDsKKwlmc2ctPmJ1bGtfaW5fZW5hYmxlZCA9IDE7CisKKwlkID0gZXBfZGVzYyhmc2ctPmdhZGdldCwgJmZzX2J1bGtfb3V0X2Rlc2MsICZoc19idWxrX291dF9kZXNjKTsKKwlpZiAoKHJjID0gZW5hYmxlX2VuZHBvaW50KGZzZywgZnNnLT5idWxrX291dCwgZCkpICE9IDApCisJCWdvdG8gcmVzZXQ7CisJZnNnLT5idWxrX291dF9lbmFibGVkID0gMTsKKwlmc2ctPmJ1bGtfb3V0X21heHBhY2tldCA9IGxlMTZfdG9fY3B1KGQtPndNYXhQYWNrZXRTaXplKTsKKworCWlmICh0cmFuc3BvcnRfaXNfY2JpKCkpIHsKKwkJZCA9IGVwX2Rlc2MoZnNnLT5nYWRnZXQsICZmc19pbnRyX2luX2Rlc2MsICZoc19pbnRyX2luX2Rlc2MpOworCQlpZiAoKHJjID0gZW5hYmxlX2VuZHBvaW50KGZzZywgZnNnLT5pbnRyX2luLCBkKSkgIT0gMCkKKwkJCWdvdG8gcmVzZXQ7CisJCWZzZy0+aW50cl9pbl9lbmFibGVkID0gMTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWlmICgocmMgPSBhbGxvY19yZXF1ZXN0KGZzZywgZnNnLT5idWxrX2luLCAmYmgtPmlucmVxKSkgIT0gMCkKKwkJCWdvdG8gcmVzZXQ7CisJCWlmICgocmMgPSBhbGxvY19yZXF1ZXN0KGZzZywgZnNnLT5idWxrX291dCwgJmJoLT5vdXRyZXEpKSAhPSAwKQorCQkJZ290byByZXNldDsKKwkJYmgtPmlucmVxLT5idWYgPSBiaC0+b3V0cmVxLT5idWYgPSBiaC0+YnVmOworCQliaC0+aW5yZXEtPmRtYSA9IGJoLT5vdXRyZXEtPmRtYSA9IGJoLT5kbWE7CisJCWJoLT5pbnJlcS0+Y29udGV4dCA9IGJoLT5vdXRyZXEtPmNvbnRleHQgPSBiaDsKKwkJYmgtPmlucmVxLT5jb21wbGV0ZSA9IGJ1bGtfaW5fY29tcGxldGU7CisJCWJoLT5vdXRyZXEtPmNvbXBsZXRlID0gYnVsa19vdXRfY29tcGxldGU7CisJfQorCWlmICh0cmFuc3BvcnRfaXNfY2JpKCkpIHsKKwkJaWYgKChyYyA9IGFsbG9jX3JlcXVlc3QoZnNnLCBmc2ctPmludHJfaW4sICZmc2ctPmludHJlcSkpICE9IDApCisJCQlnb3RvIHJlc2V0OworCQlmc2ctPmludHJlcS0+Y29tcGxldGUgPSBpbnRyX2luX2NvbXBsZXRlOworCX0KKworCWZzZy0+cnVubmluZyA9IDE7CisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkKKwkJZnNnLT5sdW5zW2ldLnVuaXRfYXR0ZW50aW9uX2RhdGEgPSBTU19SRVNFVF9PQ0NVUlJFRDsKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIENoYW5nZSBvdXIgb3BlcmF0aW9uYWwgY29uZmlndXJhdGlvbi4gIFRoaXMgY29kZSBtdXN0IGFncmVlIHdpdGggdGhlIGNvZGUKKyAqIHRoYXQgcmV0dXJucyBjb25maWcgZGVzY3JpcHRvcnMsIGFuZCB3aXRoIGludGVyZmFjZSBhbHRzZXR0aW5nIGNvZGUuCisgKgorICogSXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvciBwb3dlciBtYW5hZ2VtZW50IGludGVyYWN0aW9ucy4gIFNvbWUKKyAqIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IG5vdCB3b3JrIHdpdGggb3VyIGN1cnJlbnQgcG93ZXIgc291cmNlcy4KKyAqIEZvciBub3cgd2UganVzdCBhc3N1bWUgdGhlIGdhZGdldCBpcyBhbHdheXMgc2VsZi1wb3dlcmVkLgorICovCitzdGF0aWMgaW50IGRvX3NldF9jb25maWcoc3RydWN0IGZzZ19kZXYgKmZzZywgdTggbmV3X2NvbmZpZykKK3sKKwlpbnQJcmMgPSAwOworCisJLyogRGlzYWJsZSB0aGUgc2luZ2xlIGludGVyZmFjZSAqLworCWlmIChmc2ctPmNvbmZpZyAhPSAwKSB7CisJCURCRyhmc2csICJyZXNldCBjb25maWdcbiIpOworCQlmc2ctPmNvbmZpZyA9IDA7CisJCXJjID0gZG9fc2V0X2ludGVyZmFjZShmc2csIC0xKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIGludGVyZmFjZSAqLworCWlmIChuZXdfY29uZmlnICE9IDApIHsKKwkJZnNnLT5jb25maWcgPSBuZXdfY29uZmlnOworCQlpZiAoKHJjID0gZG9fc2V0X2ludGVyZmFjZShmc2csIDApKSAhPSAwKQorCQkJZnNnLT5jb25maWcgPSAwOwkvLyBSZXNldCBvbiBlcnJvcnMKKwkJZWxzZSB7CisJCQljaGFyICpzcGVlZDsKKworCQkJc3dpdGNoIChmc2ctPmdhZGdldC0+c3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0xPVzoJc3BlZWQgPSAibG93IjsJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsJYnJlYWs7CisJCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOwlicmVhazsKKwkJCX0KKwkJCUlORk8oZnNnLCAiJXMgc3BlZWQgY29uZmlnICMlZFxuIiwgc3BlZWQsIGZzZy0+Y29uZmlnKTsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXNpZ2luZm9fdAkJaW5mbzsKKwlpbnQJCQlzaWc7CisJaW50CQkJaTsKKwlpbnQJCQludW1fYWN0aXZlOworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwllbnVtIGZzZ19zdGF0ZQkJb2xkX3N0YXRlOworCXU4CQkJbmV3X2NvbmZpZzsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXVuc2lnbmVkIGludAkJZXhjZXB0aW9uX3JlcV90YWc7CisJaW50CQkJcmM7CisKKwkvKiBDbGVhciB0aGUgZXhpc3Rpbmcgc2lnbmFscy4gIEFueXRoaW5nIGJ1dCBTSUdVU1IxIGlzIGNvbnZlcnRlZAorCSAqIGludG8gYSBoaWdoLXByaW9yaXR5IEVYSVQgZXhjZXB0aW9uLiAqLworCWZvciAoOzspIHsKKwkJc2lnID0gZGVxdWV1ZV9zaWduYWxfbG9jayhjdXJyZW50LCAmZnNnLT50aHJlYWRfc2lnbmFsX21hc2ssCisJCQkJJmluZm8pOworCQlpZiAoIXNpZykKKwkJCWJyZWFrOworCQlpZiAoc2lnICE9IFNJR1VTUjEpIHsKKwkJCWlmIChmc2ctPnN0YXRlIDwgRlNHX1NUQVRFX0VYSVQpCisJCQkJREJHKGZzZywgIk1haW4gdGhyZWFkIGV4aXRpbmcgb24gc2lnbmFsXG4iKTsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9FWElUKTsKKwkJfQorCX0KKworCS8qIENhbmNlbCBhbGwgdGhlIHBlbmRpbmcgdHJhbnNmZXJzICovCisJaWYgKGZzZy0+aW50cmVxX2J1c3kpCisJCXVzYl9lcF9kZXF1ZXVlKGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQlVGRkVSUzsgKytpKSB7CisJCWJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKwkJaWYgKGJoLT5pbnJlcV9idXN5KQorCQkJdXNiX2VwX2RlcXVldWUoZnNnLT5idWxrX2luLCBiaC0+aW5yZXEpOworCQlpZiAoYmgtPm91dHJlcV9idXN5KQorCQkJdXNiX2VwX2RlcXVldWUoZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSk7CisJfQorCisJLyogV2FpdCB1bnRpbCBldmVyeXRoaW5nIGlzIGlkbGUgKi8KKwlmb3IgKDs7KSB7CisJCW51bV9hY3RpdmUgPSBmc2ctPmludHJlcV9idXN5OworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQkJYmggPSAmZnNnLT5idWZmaGRzW2ldOworCQkJbnVtX2FjdGl2ZSArPSBiaC0+aW5yZXFfYnVzeSArIGJoLT5vdXRyZXFfYnVzeTsKKwkJfQorCQlpZiAobnVtX2FjdGl2ZSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChzbGVlcF90aHJlYWQoZnNnKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBDbGVhciBvdXQgdGhlIGNvbnRyb2xsZXIncyBmaWZvcyAqLworCWlmIChmc2ctPmJ1bGtfaW5fZW5hYmxlZCkKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZnNnLT5idWxrX2luKTsKKwlpZiAoZnNnLT5idWxrX291dF9lbmFibGVkKQorCQl1c2JfZXBfZmlmb19mbHVzaChmc2ctPmJ1bGtfb3V0KTsKKwlpZiAoZnNnLT5pbnRyX2luX2VuYWJsZWQpCisJCXVzYl9lcF9maWZvX2ZsdXNoKGZzZy0+aW50cl9pbik7CisKKwkvKiBSZXNldCB0aGUgSS9PIGJ1ZmZlciBzdGF0ZXMgYW5kIHBvaW50ZXJzLCB0aGUgU0NTSQorCSAqIHN0YXRlLCBhbmQgdGhlIGV4Y2VwdGlvbi4gIFRoZW4gaW52b2tlIHRoZSBoYW5kbGVyLiAqLworCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQliaCA9ICZmc2ctPmJ1ZmZoZHNbaV07CisJCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKKwl9CisJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gZnNnLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9CisJCQkmZnNnLT5idWZmaGRzWzBdOworCisJZXhjZXB0aW9uX3JlcV90YWcgPSBmc2ctPmV4Y2VwdGlvbl9yZXFfdGFnOworCW5ld19jb25maWcgPSBmc2ctPm5ld19jb25maWc7CisJb2xkX3N0YXRlID0gZnNnLT5zdGF0ZTsKKworCWlmIChvbGRfc3RhdGUgPT0gRlNHX1NUQVRFX0FCT1JUX0JVTEtfT1VUKQorCQlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX1NUQVRVU19QSEFTRTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgeworCQkJY3VybHVuID0gJmZzZy0+bHVuc1tpXTsKKwkJCWN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCA9IDA7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgPQorCQkJCQlTU19OT19TRU5TRTsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gMDsKKwkJfQorCQlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX0lETEU7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmZnNnLT5sb2NrKTsKKworCS8qIENhcnJ5IG91dCBhbnkgZXh0cmEgYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIGV4Y2VwdGlvbiAqLworCXN3aXRjaCAob2xkX3N0YXRlKSB7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVDoKKwkJc2VuZF9zdGF0dXMoZnNnKTsKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJaWYgKGZzZy0+c3RhdGUgPT0gRlNHX1NUQVRFX1NUQVRVU19QSEFTRSkKKwkJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfSURMRTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX1JFU0VUOgorCQkvKiBJbiBjYXNlIHdlIHdlcmUgZm9yY2VkIGFnYWluc3Qgb3VyIHdpbGwgdG8gaGFsdCBhCisJCSAqIGJ1bGsgZW5kcG9pbnQsIGNsZWFyIHRoZSBoYWx0IG5vdy4gIChUaGUgU3VwZXJIIFVEQworCQkgKiByZXF1aXJlcyB0aGlzLikgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDTEVBUl9CVUxLX0hBTFRTLAorCQkJCSZmc2ctPmF0b21pY19iaXRmbGFncykpIHsKKwkJCXVzYl9lcF9jbGVhcl9oYWx0KGZzZy0+YnVsa19pbik7CisJCQl1c2JfZXBfY2xlYXJfaGFsdChmc2ctPmJ1bGtfb3V0KTsKKwkJfQorCisJCWlmICh0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJCWlmIChmc2ctPmVwMF9yZXFfdGFnID09IGV4Y2VwdGlvbl9yZXFfdGFnKQorCQkJCWVwMF9xdWV1ZShmc2cpOwkvLyBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlCisKKwkJfSBlbHNlIGlmICh0cmFuc3BvcnRfaXNfY2JpKCkpCisJCQlzZW5kX3N0YXR1cyhmc2cpOwkvLyBTdGF0dXMgYnkgaW50ZXJydXB0IHBpcGUKKworCQkvKiBUZWNobmljYWxseSB0aGlzIHNob3VsZCBnbyBoZXJlLCBidXQgaXQgd291bGQgb25seSBiZQorCQkgKiBhIHdhc3RlIG9mIHRpbWUuICBEaXR0byBmb3IgdGhlIElOVEVSRkFDRV9DSEFOR0UgYW5kCisJCSAqIENPTkZJR19DSEFOR0UgY2FzZXMuICovCisJCS8vIGZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpCisJCS8vCWZzZy0+bHVuc1tpXS51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfUkVTRVRfT0NDVVJSRUQ7CisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfSU5URVJGQUNFX0NIQU5HRToKKwkJcmMgPSBkb19zZXRfaW50ZXJmYWNlKGZzZywgMCk7CisJCWlmIChmc2ctPmVwMF9yZXFfdGFnICE9IGV4Y2VwdGlvbl9yZXFfdGFnKQorCQkJYnJlYWs7CisJCWlmIChyYyAhPSAwKQkJCS8vIFNUQUxMIG9uIGVycm9ycworCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5lcDApOworCQllbHNlCQkJCS8vIENvbXBsZXRlIHRoZSBzdGF0dXMgc3RhZ2UKKwkJCWVwMF9xdWV1ZShmc2cpOworCQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0U6CisJCXJjID0gZG9fc2V0X2NvbmZpZyhmc2csIG5ld19jb25maWcpOworCQlpZiAoZnNnLT5lcDBfcmVxX3RhZyAhPSBleGNlcHRpb25fcmVxX3RhZykKKwkJCWJyZWFrOworCQlpZiAocmMgIT0gMCkJCQkvLyBTVEFMTCBvbiBlcnJvcnMKKwkJCWZzZ19zZXRfaGFsdChmc2csIGZzZy0+ZXAwKTsKKwkJZWxzZQkJCQkvLyBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlCisJCQllcDBfcXVldWUoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9ESVNDT05ORUNUOgorCQlmc3luY19hbGwoZnNnKTsKKwkJZG9fc2V0X2NvbmZpZyhmc2csIDApOwkJLy8gVW5jb25maWd1cmVkIHN0YXRlCisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfRVhJVDoKKwljYXNlIEZTR19TVEFURV9URVJNSU5BVEVEOgorCQlkb19zZXRfY29uZmlnKGZzZywgMCk7CQkJLy8gRnJlZSByZXNvdXJjZXMKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9URVJNSU5BVEVEOwkvLyBTdG9wIHRoZSB0aHJlYWQKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCQlicmVhazsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBmc2dfbWFpbl90aHJlYWQodm9pZCAqZnNnXykKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBmc2dfOworCisJZnNnLT50aHJlYWRfdGFzayA9IGN1cnJlbnQ7CisKKwkvKiBSZWxlYXNlIGFsbCBvdXIgdXNlcnNwYWNlIHJlc291cmNlcyAqLworCWRhZW1vbml6ZSgiZmlsZS1zdG9yYWdlLWdhZGdldCIpOworCisJLyogQWxsb3cgdGhlIHRocmVhZCB0byBiZSBraWxsZWQgYnkgYSBzaWduYWwsIGJ1dCBzZXQgdGhlIHNpZ25hbCBtYXNrCisJICogdG8gYmxvY2sgZXZlcnl0aGluZyBidXQgSU5ULCBURVJNLCBLSUxMLCBhbmQgVVNSMS4gKi8KKwlzaWdpbml0c2V0aW52KCZmc2ctPnRocmVhZF9zaWduYWxfbWFzaywgc2lnbWFzayhTSUdJTlQpIHwKKwkJCXNpZ21hc2soU0lHVEVSTSkgfCBzaWdtYXNrKFNJR0tJTEwpIHwKKwkJCXNpZ21hc2soU0lHVVNSMSkpOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmZnNnLT50aHJlYWRfc2lnbmFsX21hc2ssIE5VTEwpOworCisJLyogQXJyYW5nZSBmb3IgdXNlcnNwYWNlIHJlZmVyZW5jZXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMga2VybmVsCisJICogcG9pbnRlcnMuICBUaGF0IHdheSB3ZSBjYW4gcGFzcyBhIGtlcm5lbCBwb2ludGVyIHRvIGEgcm91dGluZQorCSAqIHRoYXQgZXhwZWN0cyBhIF9fdXNlciBwb2ludGVyIGFuZCBpdCB3aWxsIHdvcmsgb2theS4gKi8KKwlzZXRfZnMoZ2V0X2RzKCkpOworCisJLyogV2FpdCBmb3IgdGhlIGdhZGdldCByZWdpc3RyYXRpb24gdG8gZmluaXNoIHVwICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJLyogVGhlIG1haW4gbG9vcCAqLworCXdoaWxlIChmc2ctPnN0YXRlICE9IEZTR19TVEFURV9URVJNSU5BVEVEKSB7CisJCWlmIChleGNlcHRpb25faW5fcHJvZ3Jlc3MoZnNnKSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJaGFuZGxlX2V4Y2VwdGlvbihmc2cpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZzZy0+cnVubmluZykgeworCQkJc2xlZXBfdGhyZWFkKGZzZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChnZXRfbmV4dF9jb21tYW5kKGZzZykpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxKCZmc2ctPmxvY2spOworCQlpZiAoIWV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhmc2cpKQorCQkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9EQVRBX1BIQVNFOworCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwkJaWYgKGRvX3Njc2lfY29tbWFuZChmc2cpIHx8IGZpbmlzaF9yZXBseShmc2cpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJaWYgKCFleGNlcHRpb25faW5fcHJvZ3Jlc3MoZnNnKSkKKwkJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfU1RBVFVTX1BIQVNFOworCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwkJaWYgKHNlbmRfc3RhdHVzKGZzZykpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxKCZmc2ctPmxvY2spOworCQlpZiAoIWV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhmc2cpKQorCQkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9JRExFOworCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisJCX0KKworCWZzZy0+dGhyZWFkX3Rhc2sgPSBOVUxMOworCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CisKKwkvKiBJbiBjYXNlIHdlIGFyZSBleGl0aW5nIGJlY2F1c2Ugb2YgYSBzaWduYWwsIHVucmVnaXN0ZXIgdGhlCisJICogZ2FkZ2V0IGRyaXZlciBhbmQgY2xvc2UgdGhlIGJhY2tpbmcgZmlsZS4gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJFR0lTVEVSRUQsICZmc2ctPmF0b21pY19iaXRmbGFncykpIHsKKwkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmZnNnX2RyaXZlcik7CisJCWNsb3NlX2FsbF9iYWNraW5nX2ZpbGVzKGZzZyk7CisJfQorCisJLyogTGV0IHRoZSB1bmJpbmQgYW5kIGNsZWFudXAgcm91dGluZXMga25vdyB0aGUgdGhyZWFkIGhhcyBleGl0ZWQgKi8KKwljb21wbGV0ZV9hbmRfZXhpdCgmZnNnLT50aHJlYWRfbm90aWZpZXIsIDApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIElmIHRoZSBuZXh0IHR3byByb3V0aW5lcyBhcmUgY2FsbGVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCwKKyAqIHRoZSBjYWxsZXIgbXVzdCBvd24gZnNnLT5maWxlc2VtIGZvciB3cml0aW5nLiAqLworCitzdGF0aWMgaW50IG9wZW5fYmFja2luZ19maWxlKHN0cnVjdCBsdW4gKmN1cmx1biwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaW50CQkJCXJvOworCXN0cnVjdCBmaWxlCQkJKmZpbHAgPSBOVUxMOworCWludAkJCQlyYyA9IC1FSU5WQUw7CisJc3RydWN0IGlub2RlCQkJKmlub2RlID0gTlVMTDsKKwlsb2ZmX3QJCQkJc2l6ZTsKKwlsb2ZmX3QJCQkJbnVtX3NlY3RvcnM7CisKKwkvKiBSL1cgaWYgd2UgY2FuLCBSL08gaWYgd2UgbXVzdCAqLworCXJvID0gY3VybHVuLT5ybzsKKwlpZiAoIXJvKSB7CisJCWZpbHAgPSBmaWxwX29wZW4oZmlsZW5hbWUsIE9fUkRXUiB8IE9fTEFSR0VGSUxFLCAwKTsKKwkJaWYgKC1FUk9GUyA9PSBQVFJfRVJSKGZpbHApKQorCQkJcm8gPSAxOworCX0KKwlpZiAocm8pCisJCWZpbHAgPSBmaWxwX29wZW4oZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19MQVJHRUZJTEUsIDApOworCWlmIChJU19FUlIoZmlscCkpIHsKKwkJTElORk8oY3VybHVuLCAidW5hYmxlIHRvIG9wZW4gYmFja2luZyBmaWxlOiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihmaWxwKTsKKwl9CisKKwlpZiAoIShmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCXJvID0gMTsKKworCWlmIChmaWxwLT5mX2RlbnRyeSkKKwkJaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpZiAoaW5vZGUgJiYgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoYmRldl9yZWFkX29ubHkoaW5vZGUtPmlfYmRldikpCisJCQlybyA9IDE7CisJfSBlbHNlIGlmICghaW5vZGUgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJTElORk8oY3VybHVuLCAiaW52YWxpZCBmaWxlIHR5cGU6ICVzXG4iLCBmaWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIElmIHdlIGNhbid0IHJlYWQgdGhlIGZpbGUsIGl0J3Mgbm8gZ29vZC4KKwkgKiBJZiB3ZSBjYW4ndCB3cml0ZSB0aGUgZmlsZSwgdXNlIGl0IHJlYWQtb25seS4gKi8KKwlpZiAoIWZpbHAtPmZfb3AgfHwgIShmaWxwLT5mX29wLT5yZWFkIHx8IGZpbHAtPmZfb3AtPmFpb19yZWFkKSkgeworCQlMSU5GTyhjdXJsdW4sICJmaWxlIG5vdCByZWFkYWJsZTogJXNcbiIsIGZpbGVuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICghKGZpbHAtPmZfb3AtPndyaXRlIHx8IGZpbHAtPmZfb3AtPmFpb193cml0ZSkpCisJCXJvID0gMTsKKworCXNpemUgPSBpX3NpemVfcmVhZChpbm9kZS0+aV9tYXBwaW5nLT5ob3N0KTsKKwlpZiAoc2l6ZSA8IDApIHsKKwkJTElORk8oY3VybHVuLCAidW5hYmxlIHRvIGZpbmQgZmlsZSBzaXplOiAlc1xuIiwgZmlsZW5hbWUpOworCQlyYyA9IChpbnQpIHNpemU7CisJCWdvdG8gb3V0OworCX0KKwludW1fc2VjdG9ycyA9IHNpemUgPj4gOTsJLy8gRmlsZSBzaXplIGluIDUxMi1ieXRlIHNlY3RvcnMKKwlpZiAobnVtX3NlY3RvcnMgPT0gMCkgeworCQlMSU5GTyhjdXJsdW4sICJmaWxlIHRvbyBzbWFsbDogJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmMgPSAtRVRPT1NNQUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlnZXRfZmlsZShmaWxwKTsKKwljdXJsdW4tPnJvID0gcm87CisJY3VybHVuLT5maWxwID0gZmlscDsKKwljdXJsdW4tPmZpbGVfbGVuZ3RoID0gc2l6ZTsKKwljdXJsdW4tPm51bV9zZWN0b3JzID0gbnVtX3NlY3RvcnM7CisJTERCRyhjdXJsdW4sICJvcGVuIGJhY2tpbmcgZmlsZTogJXNcbiIsIGZpbGVuYW1lKTsKKwlyYyA9IDA7CisKK291dDoKKwlmaWxwX2Nsb3NlKGZpbHAsIGN1cnJlbnQtPmZpbGVzKTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHZvaWQgY2xvc2VfYmFja2luZ19maWxlKHN0cnVjdCBsdW4gKmN1cmx1bikKK3sKKwlpZiAoY3VybHVuLT5maWxwKSB7CisJCUxEQkcoY3VybHVuLCAiY2xvc2UgYmFja2luZyBmaWxlXG4iKTsKKwkJZnB1dChjdXJsdW4tPmZpbHApOworCQljdXJsdW4tPmZpbHAgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgY2xvc2VfYWxsX2JhY2tpbmdfZmlsZXMoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpCisJCWNsb3NlX2JhY2tpbmdfZmlsZSgmZnNnLT5sdW5zW2ldKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzaG93X3JvKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdXJsdW4tPnJvKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIJCSpwOworCXNzaXplX3QJCXJjOworCisJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOworCWlmIChiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CS8vIEdldCB0aGUgY29tcGxldGUgcGF0aG5hbWUKKwkJcCA9IGRfcGF0aChjdXJsdW4tPmZpbHAtPmZfZGVudHJ5LCBjdXJsdW4tPmZpbHAtPmZfdmZzbW50LAorCQkJCWJ1ZiwgUEFHRV9TSVpFIC0gMSk7CisJCWlmIChJU19FUlIocCkpCisJCQlyYyA9IFBUUl9FUlIocCk7CisJCWVsc2UgeworCQkJcmMgPSBzdHJsZW4ocCk7CisJCQltZW1tb3ZlKGJ1ZiwgcCwgcmMpOworCQkJYnVmW3JjXSA9ICdcbic7CQkvLyBBZGQgYSBuZXdsaW5lCisJCQlidWZbKytyY10gPSAwOworCQl9CisJfSBlbHNlIHsJCQkJLy8gTm8gZmlsZSwgcmV0dXJuIDAgYnl0ZXMKKwkJKmJ1ZiA9IDA7CisJCXJjID0gMDsKKwl9CisJdXBfcmVhZCgmZnNnLT5maWxlc2VtKTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcm8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90CQlyYyA9IGNvdW50OworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludAkJaTsKKworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBBbGxvdyB0aGUgd3JpdGUtZW5hYmxlIHN0YXR1cyB0byBjaGFuZ2Ugb25seSB3aGlsZSB0aGUgYmFja2luZyBmaWxlCisJICogaXMgY2xvc2VkLiAqLworCWRvd25fcmVhZCgmZnNnLT5maWxlc2VtKTsKKwlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQlMREJHKGN1cmx1biwgInJlYWQtb25seSBzdGF0dXMgY2hhbmdlIHByZXZlbnRlZFxuIik7CisJCXJjID0gLUVCVVNZOworCX0gZWxzZSB7CisJCWN1cmx1bi0+cm8gPSAhIWk7CisJCUxEQkcoY3VybHVuLCAicmVhZC1vbmx5IHN0YXR1cyBzZXQgdG8gJWRcbiIsIGN1cmx1bi0+cm8pOworCX0KKwl1cF9yZWFkKCZmc2ctPmZpbGVzZW0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludAkJcmMgPSAwOworCisJaWYgKGN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCAmJiBiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CisJCUxEQkcoY3VybHVuLCAiZWplY3QgYXR0ZW1wdCBwcmV2ZW50ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOwkJCQkvLyAiRG9vciBpcyBsb2NrZWQiCisJfQorCisJLyogUmVtb3ZlIGEgdHJhaWxpbmcgbmV3bGluZSAqLworCWlmIChjb3VudCA+IDAgJiYgYnVmW2NvdW50LTFdID09ICdcbicpCisJCSgoY2hhciAqKSBidWYpW2NvdW50LTFdID0gMDsJCS8vIFVnaCEKKworCS8qIEVqZWN0IGN1cnJlbnQgbWVkaXVtICovCisJZG93bl93cml0ZSgmZnNnLT5maWxlc2VtKTsKKwlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQljbG9zZV9iYWNraW5nX2ZpbGUoY3VybHVuKTsKKwkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTUVESVVNX05PVF9QUkVTRU5UOworCX0KKworCS8qIExvYWQgbmV3IG1lZGl1bSAqLworCWlmIChjb3VudCA+IDAgJiYgYnVmWzBdKSB7CisJCXJjID0gb3Blbl9iYWNraW5nX2ZpbGUoY3VybHVuLCBidWYpOworCQlpZiAocmMgPT0gMCkKKwkJCWN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSA9CisJCQkJCVNTX05PVF9SRUFEWV9UT19SRUFEWV9UUkFOU0lUSU9OOworCX0KKwl1cF93cml0ZSgmZnNnLT5maWxlc2VtKTsKKwlyZXR1cm4gKHJjIDwgMCA/IHJjIDogY291bnQpOworfQorCisKKy8qIFRoZSB3cml0ZSBwZXJtaXNzaW9ucyBhbmQgc3RvcmVfeHh4IHBvaW50ZXJzIGFyZSBzZXQgaW4gZnNnX2JpbmQoKSAqLworc3RhdGljIERFVklDRV9BVFRSKHJvLCAwNDQ0LCBzaG93X3JvLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWxlLCAwNDQ0LCBzaG93X2ZpbGUsIE5VTEwpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGx1bl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY29tcGxldGUoJmZzZy0+bHVuX3JlbGVhc2VkKTsKK30KKworc3RhdGljIHZvaWQgZnNnX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJaW50CQkJaTsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gZnNnLT5lcDByZXE7CisKKwlEQkcoZnNnLCAidW5iaW5kXG4iKTsKKwljbGVhcl9iaXQoUkVHSVNURVJFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKKworCS8qIFVucmVnaXN0ZXIgdGhlIHN5c2ZzIGF0dHJpYnV0ZSBmaWxlcyBhbmQgdGhlIExVTnMgKi8KKwlpbml0X2NvbXBsZXRpb24oJmZzZy0+bHVuX3JlbGVhc2VkKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CisJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCWlmIChjdXJsdW4tPnJlZ2lzdGVyZWQpIHsKKwkJCWRldmljZV9yZW1vdmVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9ybyk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfZmlsZSk7CisJCQlkZXZpY2VfdW5yZWdpc3RlcigmY3VybHVuLT5kZXYpOworCQkJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT5sdW5fcmVsZWFzZWQpOworCQkJY3VybHVuLT5yZWdpc3RlcmVkID0gMDsKKwkJfQorCX0KKworCS8qIElmIHRoZSB0aHJlYWQgaXNuJ3QgYWxyZWFkeSBkZWFkLCB0ZWxsIGl0IHRvIGV4aXQgbm93ICovCisJaWYgKGZzZy0+c3RhdGUgIT0gRlNHX1NUQVRFX1RFUk1JTkFURUQpIHsKKwkJcmFpc2VfZXhjZXB0aW9uKGZzZywgRlNHX1NUQVRFX0VYSVQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmc2ctPnRocmVhZF9ub3RpZmllcik7CisKKwkJLyogVGhlIGNsZWFudXAgcm91dGluZSB3YWl0cyBmb3IgdGhpcyBjb21wbGV0aW9uIGFsc28gKi8KKwkJY29tcGxldGUoJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBkYXRhIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWlmIChiaC0+YnVmKQorCQkJdXNiX2VwX2ZyZWVfYnVmZmVyKGZzZy0+YnVsa19pbiwgYmgtPmJ1ZiwgYmgtPmRtYSwKKwkJCQkJbW9kX2RhdGEuYnVmbGVuKTsKKwl9CisKKwkvKiBGcmVlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgZm9yIGVuZHBvaW50IDAgKi8KKwlpZiAocmVxKSB7CisJCWlmIChyZXEtPmJ1ZikKKwkJCXVzYl9lcF9mcmVlX2J1ZmZlcihmc2ctPmVwMCwgcmVxLT5idWYsCisJCQkJCXJlcS0+ZG1hLCBFUDBfQlVGU0laRSk7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZnNnLT5lcDAsIHJlcSk7CisJfQorCisJc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgY2hlY2tfcGFyYW1ldGVycyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlwcm90OworCisJLyogU3RvcmUgdGhlIGRlZmF1bHQgdmFsdWVzICovCisJbW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPSBVU0JfUFJfQlVMSzsKKwltb2RfZGF0YS50cmFuc3BvcnRfbmFtZSA9ICJCdWxrLW9ubHkiOworCW1vZF9kYXRhLnByb3RvY29sX3R5cGUgPSBVU0JfU0NfU0NTSTsKKwltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kiOworCisJaWYgKGdhZGdldF9pc19zaChmc2ctPmdhZGdldCkpCisJCW1vZF9kYXRhLmNhbl9zdGFsbCA9IDA7CisKKwlpZiAobW9kX2RhdGEucmVsZWFzZSA9PSAweGZmZmYpIHsJLy8gUGFyYW1ldGVyIHdhc24ndCBzZXQKKwkJaWYgKGdhZGdldF9pc19uZXQyMjgwKGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMDE7CisJCWVsc2UgaWYgKGdhZGdldF9pc19kdW1teShmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzAyOworCQllbHNlIGlmIChnYWRnZXRfaXNfcHhhKGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMDM7CisJCWVsc2UgaWYgKGdhZGdldF9pc19zaChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA0OworCisJCS8qIFRoZSBzYTExMDAgY29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkICovCisKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX2dva3UoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwNjsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX21xMTF4eChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA3OworCQllbHNlIGlmIChnYWRnZXRfaXNfb21hcChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA4OworCQllbHNlIGlmIChnYWRnZXRfaXNfbGg3YTQweChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA5OworCQllbHNlIGlmIChnYWRnZXRfaXNfbjk2MDQoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMDsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YTI3eChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzExOworCQllbHNlIGlmIChnYWRnZXRfaXNfczNjMjQxMChnYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMjsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX2F0OTEoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMzsKKwkJZWxzZSB7CisJCQlXQVJOKGZzZywgImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKKwkJCQlmc2ctPmdhZGdldC0+bmFtZSk7CisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzk5OworCQl9CisJfQorCisJcHJvdCA9IHNpbXBsZV9zdHJ0b2wobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgTlVMTCwgMCk7CisKKyNpZmRlZiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUCisJaWYgKHN0cm5pY21wKG1vZF9kYXRhLnRyYW5zcG9ydF9wYXJtLCAiQkJCIiwgMTApID09IDApIHsKKwkJOwkJLy8gVXNlIGRlZmF1bHQgc2V0dGluZworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0sICJDQiIsIDEwKSA9PSAwKSB7CisJCW1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID0gVVNCX1BSX0NCOworCQltb2RfZGF0YS50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sLUJ1bGsiOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0sICJDQkkiLCAxMCkgPT0gMCkgeworCQltb2RfZGF0YS50cmFuc3BvcnRfdHlwZSA9IFVTQl9QUl9DQkk7CisJCW1vZF9kYXRhLnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wtQnVsay1JbnRlcnJ1cHQiOworCX0gZWxzZSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgdHJhbnNwb3J0OiAlc1xuIiwgbW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIlNDU0kiLCAxMCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfU0NTSSkgeworCQk7CQkvLyBVc2UgZGVmYXVsdCBzZXR0aW5nCisJfSBlbHNlIGlmIChzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiUkJDIiwgMTApID09IDAgfHwKKwkJCXByb3QgPT0gVVNCX1NDX1JCQykgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDX1JCQzsKKwkJbW9kX2RhdGEucHJvdG9jb2xfbmFtZSA9ICJSQkMiOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIjgwMjAiLCA0KSA9PSAwIHx8CisJCQlzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiQVRBUEkiLCAxMCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfODAyMCkgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDXzgwMjA7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiODAyMGkgKEFUQVBJKSI7CisJfSBlbHNlIGlmIChzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiUUlDIiwgMykgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfUUlDKSB7CisJCW1vZF9kYXRhLnByb3RvY29sX3R5cGUgPSBVU0JfU0NfUUlDOworCQltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIlFJQy0xNTciOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIlVGSSIsIDEwKSA9PSAwIHx8CisJCQlwcm90ID09IFVTQl9TQ19VRkkpIHsKKwkJbW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9IFVTQl9TQ19VRkk7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiVUZJIjsKKwl9IGVsc2UgaWYgKHN0cm5pY21wKG1vZF9kYXRhLnByb3RvY29sX3Bhcm0sICI4MDcwIiwgNCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfODA3MCkgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDXzgwNzA7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiODA3MGkiOworCX0gZWxzZSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgcHJvdG9jb2w6ICVzXG4iLCBtb2RfZGF0YS5wcm90b2NvbF9wYXJtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbW9kX2RhdGEuYnVmbGVuICY9IFBBR0VfQ0FDSEVfTUFTSzsKKwlpZiAobW9kX2RhdGEuYnVmbGVuIDw9IDApIHsKKwkJRVJST1IoZnNnLCAiaW52YWxpZCBidWZsZW5cbiIpOworCQlyZXR1cm4gLUVUT09TTUFMTDsKKwl9CisjZW5kaWYgLyogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCAqLworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgZnNnX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IHRoZV9mc2c7CisJaW50CQkJcmM7CisJaW50CQkJaTsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKwljaGFyCQkJKnBhdGhidWYsICpwOworCisJZnNnLT5nYWRnZXQgPSBnYWRnZXQ7CisJc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgZnNnKTsKKwlmc2ctPmVwMCA9IGdhZGdldC0+ZXAwOworCWZzZy0+ZXAwLT5kcml2ZXJfZGF0YSA9IGZzZzsKKworCWlmICgocmMgPSBjaGVja19wYXJhbWV0ZXJzKGZzZykpICE9IDApCisJCWdvdG8gb3V0OworCisJaWYgKG1vZF9kYXRhLnJlbW92YWJsZSkgewkvLyBFbmFibGUgdGhlIHN0b3JlX3h4eCBhdHRyaWJ1dGVzCisJCWRldl9hdHRyX3JvLmF0dHIubW9kZSA9IGRldl9hdHRyX2ZpbGUuYXR0ci5tb2RlID0gMDY0NDsKKwkJZGV2X2F0dHJfcm8uc3RvcmUgPSBzdG9yZV9ybzsKKwkJZGV2X2F0dHJfZmlsZS5zdG9yZSA9IHN0b3JlX2ZpbGU7CisJfQorCisJLyogRmluZCBvdXQgaG93IG1hbnkgTFVOcyB0aGVyZSBzaG91bGQgYmUgKi8KKwlpID0gbW9kX2RhdGEubmx1bnM7CisJaWYgKGkgPT0gMCkKKwkJaSA9IG1heChtb2RfZGF0YS5udW1fZmlsZW5hbWVzLCAxKTsKKwlpZiAoaSA+IE1BWF9MVU5TKSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgbnVtYmVyIG9mIExVTnM6ICVkXG4iLCBpKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIExVTnMsIG9wZW4gdGhlaXIgYmFja2luZyBmaWxlcywgYW5kIHJlZ2lzdGVyIHRoZQorCSAqIExVTiBkZXZpY2VzIGluIHN5c2ZzLiAqLworCWZzZy0+bHVucyA9IGttYWxsb2MoaSAqIHNpemVvZihzdHJ1Y3QgbHVuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmc2ctPmx1bnMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbWVtc2V0KGZzZy0+bHVucywgMCwgaSAqIHNpemVvZihzdHJ1Y3QgbHVuKSk7CisJZnNnLT5ubHVucyA9IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CisJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCWN1cmx1bi0+cm8gPSByb1tpXTsKKwkJY3VybHVuLT5kZXYucGFyZW50ID0gJmdhZGdldC0+ZGV2OworCQljdXJsdW4tPmRldi5kcml2ZXIgPSAmZnNnX2RyaXZlci5kcml2ZXI7CisJCWRldl9zZXRfZHJ2ZGF0YSgmY3VybHVuLT5kZXYsIGZzZyk7CisJCXNucHJpbnRmKGN1cmx1bi0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsCisJCQkJIiVzLWx1biVkIiwgZ2FkZ2V0LT5kZXYuYnVzX2lkLCBpKTsKKworCQlpZiAoKHJjID0gZGV2aWNlX3JlZ2lzdGVyKCZjdXJsdW4tPmRldikpICE9IDApCisJCQlJTkZPKGZzZywgImZhaWxlZCB0byByZWdpc3RlciBMVU4lZDogJWRcbiIsIGksIHJjKTsKKwkJZWxzZSB7CisJCQljdXJsdW4tPnJlZ2lzdGVyZWQgPSAxOworCQkJY3VybHVuLT5kZXYucmVsZWFzZSA9IGx1bl9yZWxlYXNlOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX3JvKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9maWxlKTsKKwkJfQorCisJCWlmIChmaWxlW2ldICYmICpmaWxlW2ldKSB7CisJCQlpZiAoKHJjID0gb3Blbl9iYWNraW5nX2ZpbGUoY3VybHVuLCBmaWxlW2ldKSkgIT0gMCkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmICghbW9kX2RhdGEucmVtb3ZhYmxlKSB7CisJCQlFUlJPUihmc2csICJubyBmaWxlIGdpdmVuIGZvciBMVU4lZFxuIiwgaSk7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEZpbmQgYWxsIHRoZSBlbmRwb2ludHMgd2Ugd2lsbCB1c2UgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChnYWRnZXQpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZnNfYnVsa19pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJZXAtPmRyaXZlcl9kYXRhID0gZnNnOwkJLy8gY2xhaW0gdGhlIGVuZHBvaW50CisJZnNnLT5idWxrX2luID0gZXA7CisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmZzX2J1bGtfb3V0X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gYXV0b2NvbmZfZmFpbDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBmc2c7CQkvLyBjbGFpbSB0aGUgZW5kcG9pbnQKKwlmc2ctPmJ1bGtfb3V0ID0gZXA7CisKKwlpZiAodHJhbnNwb3J0X2lzX2NiaSgpKSB7CisJCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZnNfaW50cl9pbl9kZXNjKTsKKwkJaWYgKCFlcCkKKwkJCWdvdG8gYXV0b2NvbmZfZmFpbDsKKwkJZXAtPmRyaXZlcl9kYXRhID0gZnNnOwkJLy8gY2xhaW0gdGhlIGVuZHBvaW50CisJCWZzZy0+aW50cl9pbiA9IGVwOworCX0KKworCS8qIEZpeCB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBmc2ctPmVwMC0+bWF4cGFja2V0OworCWRldmljZV9kZXNjLmlkVmVuZG9yID0gY3B1X3RvX2xlMTYobW9kX2RhdGEudmVuZG9yKTsKKwlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPSBjcHVfdG9fbGUxNihtb2RfZGF0YS5wcm9kdWN0KTsKKwlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihtb2RfZGF0YS5yZWxlYXNlKTsKKworCWkgPSAodHJhbnNwb3J0X2lzX2NiaSgpID8gMyA6IDIpOwkvLyBOdW1iZXIgb2YgZW5kcG9pbnRzCisJaW50Zl9kZXNjLmJOdW1FbmRwb2ludHMgPSBpOworCWludGZfZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBtb2RfZGF0YS5wcm90b2NvbF90eXBlOworCWludGZfZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgPSBtb2RfZGF0YS50cmFuc3BvcnRfdHlwZTsKKwlmc19mdW5jdGlvbltpICsgRlNfRlVOQ1RJT05fUFJFX0VQX0VOVFJJRVNdID0gTlVMTDsKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWhzX2Z1bmN0aW9uW2kgKyBIU19GVU5DVElPTl9QUkVfRVBfRU5UUklFU10gPSBOVUxMOworCisJLyogQXNzdW1lIGVwMCB1c2VzIHRoZSBzYW1lIG1heHBhY2tldCB2YWx1ZSBmb3IgYm90aCBzcGVlZHMgKi8KKwlkZXZfcXVhbGlmaWVyLmJNYXhQYWNrZXRTaXplMCA9IGZzZy0+ZXAwLT5tYXhwYWNrZXQ7CisKKwkvKiBBc3N1bWUgdGhhdCBhbGwgZW5kcG9pbnQgYWRkcmVzc2VzIGFyZSB0aGUgc2FtZSBmb3IgYm90aCBzcGVlZHMgKi8KKwloc19idWxrX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX2J1bGtfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWhzX2J1bGtfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX2J1bGtfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwloc19pbnRyX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX2ludHJfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworI2VuZGlmCisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQljb25maWdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCXJjID0gLUVOT01FTTsKKworCS8qIEFsbG9jYXRlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgZm9yIGVuZHBvaW50IDAgKi8KKwlmc2ctPmVwMHJlcSA9IHJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGZzZy0+ZXAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJZ290byBvdXQ7CisJcmVxLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyKGZzZy0+ZXAwLCBFUDBfQlVGU0laRSwKKwkJCSZyZXEtPmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEtPmJ1ZikKKwkJZ290byBvdXQ7CisJcmVxLT5jb21wbGV0ZSA9IGVwMF9jb21wbGV0ZTsKKworCS8qIEFsbG9jYXRlIHRoZSBkYXRhIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWJoLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyKGZzZy0+YnVsa19pbiwgbW9kX2RhdGEuYnVmbGVuLAorCQkJCSZiaC0+ZG1hLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiaC0+YnVmKQorCQkJZ290byBvdXQ7CisJCWJoLT5uZXh0ID0gYmggKyAxOworCX0KKwlmc2ctPmJ1ZmZoZHNbTlVNX0JVRkZFUlMgLSAxXS5uZXh0ID0gJmZzZy0+YnVmZmhkc1swXTsKKworCS8qIFRoaXMgc2hvdWxkIHJlZmxlY3QgdGhlIGFjdHVhbCBnYWRnZXQgcG93ZXIgc291cmNlICovCisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQoZ2FkZ2V0KTsKKworCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mIG1hbnVmYWN0dXJlciwgIiVzICVzIHdpdGggJXMiLAorCQkJc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwgc3lzdGVtX3V0c25hbWUucmVsZWFzZSwKKwkJCWdhZGdldC0+bmFtZSk7CisKKwkvKiBPbiBhIHJlYWwgZGV2aWNlLCBzZXJpYWxbXSB3b3VsZCBiZSBsb2FkZWQgZnJvbSBwZXJtYW5lbnQKKwkgKiBzdG9yYWdlLiAgV2UganVzdCBlbmNvZGUgaXQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gc3RyaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2VyaWFsKSAtIDI7IGkgKz0gMikgeworCQl1bnNpZ25lZCBjaGFyCQljID0gRFJJVkVSX1ZFUlNJT05baSAvIDJdOworCisJCWlmICghYykKKwkJCWJyZWFrOworCQlzcHJpbnRmKCZzZXJpYWxbaV0sICIlMDJYIiwgYyk7CisJfQorCisJaWYgKChyYyA9IGtlcm5lbF90aHJlYWQoZnNnX21haW5fdGhyZWFkLCBmc2csIChDTE9ORV9WTSB8IENMT05FX0ZTIHwKKwkJCUNMT05FX0ZJTEVTKSkpIDwgMCkKKwkJZ290byBvdXQ7CisJZnNnLT50aHJlYWRfcGlkID0gcmM7CisKKwlJTkZPKGZzZywgRFJJVkVSX0RFU0MgIiwgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlJTkZPKGZzZywgIk51bWJlciBvZiBMVU5zPSVkXG4iLCBmc2ctPm5sdW5zKTsKKworCXBhdGhidWYgPSBrbWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CisJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCWlmIChiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CisJCQlwID0gTlVMTDsKKwkJCWlmIChwYXRoYnVmKSB7CisJCQkJcCA9IGRfcGF0aChjdXJsdW4tPmZpbHAtPmZfZGVudHJ5LAorCQkJCQljdXJsdW4tPmZpbHAtPmZfdmZzbW50LAorCQkJCQlwYXRoYnVmLCBQQVRIX01BWCk7CisJCQkJaWYgKElTX0VSUihwKSkKKwkJCQkJcCA9IE5VTEw7CisJCQl9CisJCQlMSU5GTyhjdXJsdW4sICJybz0lZCwgZmlsZTogJXNcbiIsCisJCQkJCWN1cmx1bi0+cm8sIChwID8gcCA6ICIoZXJyb3IpIikpOworCQl9CisJfQorCWtmcmVlKHBhdGhidWYpOworCisJREJHKGZzZywgInRyYW5zcG9ydD0lcyAoeCUwMngpXG4iLAorCQkJbW9kX2RhdGEudHJhbnNwb3J0X25hbWUsIG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlKTsKKwlEQkcoZnNnLCAicHJvdG9jb2w9JXMgKHglMDJ4KVxuIiwKKwkJCW1vZF9kYXRhLnByb3RvY29sX25hbWUsIG1vZF9kYXRhLnByb3RvY29sX3R5cGUpOworCURCRyhmc2csICJWZW5kb3JJRD14JTA0eCwgUHJvZHVjdElEPXglMDR4LCBSZWxlYXNlPXglMDR4XG4iLAorCQkJbW9kX2RhdGEudmVuZG9yLCBtb2RfZGF0YS5wcm9kdWN0LCBtb2RfZGF0YS5yZWxlYXNlKTsKKwlEQkcoZnNnLCAicmVtb3ZhYmxlPSVkLCBzdGFsbD0lZCwgYnVmbGVuPSV1XG4iLAorCQkJbW9kX2RhdGEucmVtb3ZhYmxlLCBtb2RfZGF0YS5jYW5fc3RhbGwsCisJCQltb2RfZGF0YS5idWZsZW4pOworCURCRyhmc2csICJJL08gdGhyZWFkIHBpZDogJWRcbiIsIGZzZy0+dGhyZWFkX3BpZCk7CisJcmV0dXJuIDA7CisKK2F1dG9jb25mX2ZhaWw6CisJRVJST1IoZnNnLCAidW5hYmxlIHRvIGF1dG9jb25maWd1cmUgYWxsIGVuZHBvaW50c1xuIik7CisJcmMgPSAtRU5PVFNVUFA7CisKK291dDoKKwlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX1RFUk1JTkFURUQ7CS8vIFRoZSB0aHJlYWQgaXMgZGVhZAorCWZzZ191bmJpbmQoZ2FkZ2V0KTsKKwljbG9zZV9hbGxfYmFja2luZ19maWxlcyhmc2cpOworCXJldHVybiByYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBmc2dfc3VzcGVuZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisKKwlEQkcoZnNnLCAic3VzcGVuZFxuIik7CisJc2V0X2JpdChTVVNQRU5ERUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGZzZ19yZXN1bWUoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJREJHKGZzZywgInJlc3VtZVxuIik7CisJY2xlYXJfYml0KFNVU1BFTkRFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCQlmc2dfZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorI2VuZGlmCisJLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCisJLmJpbmQJCT0gZnNnX2JpbmQsCisJLnVuYmluZAkJPSBmc2dfdW5iaW5kLAorCS5kaXNjb25uZWN0CT0gZnNnX2Rpc2Nvbm5lY3QsCisJLnNldHVwCQk9IGZzZ19zZXR1cCwKKwkuc3VzcGVuZAk9IGZzZ19zdXNwZW5kLAorCS5yZXN1bWUJCT0gZnNnX3Jlc3VtZSwKKworCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAoY2hhciAqKSBzaG9ydG5hbWUsCisJCS8vIC5yZWxlYXNlID0gLi4uCisJCS8vIC5zdXNwZW5kID0gLi4uCisJCS8vIC5yZXN1bWUgPSAuLi4KKwl9LAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBmc2dfYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZzsKKworCWZzZyA9IGttYWxsb2Moc2l6ZW9mICpmc2csIEdGUF9LRVJORUwpOworCWlmICghZnNnKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoZnNnLCAwLCBzaXplb2YgKmZzZyk7CisJc3Bpbl9sb2NrX2luaXQoJmZzZy0+bG9jayk7CisJaW5pdF9yd3NlbSgmZnNnLT5maWxlc2VtKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc2ctPnRocmVhZF93cWgpOworCWluaXRfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJdGhlX2ZzZyA9IGZzZzsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBmc2dfZnJlZShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWtmcmVlKGZzZy0+bHVucyk7CisJa2ZyZWUoZnNnKTsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBmc2dfaW5pdCh2b2lkKQoreworCWludAkJcmM7CisJc3RydWN0IGZzZ19kZXYJKmZzZzsKKworCWlmICgocmMgPSBmc2dfYWxsb2MoKSkgIT0gMCkKKwkJcmV0dXJuIHJjOworCWZzZyA9IHRoZV9mc2c7CisJaWYgKChyYyA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZmc2dfZHJpdmVyKSkgIT0gMCkgeworCQlmc2dfZnJlZShmc2cpOworCQlyZXR1cm4gcmM7CisJfQorCXNldF9iaXQoUkVHSVNURVJFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKKworCS8qIFRlbGwgdGhlIHRocmVhZCB0byBzdGFydCB3b3JraW5nICovCisJY29tcGxldGUoJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGZzZ19pbml0KTsKKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNnX2NsZWFudXAodm9pZCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gdGhlX2ZzZzsKKworCS8qIFVucmVnaXN0ZXIgdGhlIGRyaXZlciBpZmYgdGhlIHRocmVhZCBoYXNuJ3QgYWxyZWFkeSBkb25lIHNvICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRUdJU1RFUkVELCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpKQorCQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZmc2dfZHJpdmVyKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gZmluaXNoIHVwICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJY2xvc2VfYWxsX2JhY2tpbmdfZmlsZXMoZnNnKTsKKwlmc2dfZnJlZShmc2cpOworfQorbW9kdWxlX2V4aXQoZnNnX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmViNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIFVTQiBkZXZpY2UgY29udHJvbGxlcnMgaGF2ZSBsb3RzIG9mIHF1aXJrcy4gIFVzZSB0aGVzZSBtYWNyb3MgaW4KKyAqIGdhZGdldCBkcml2ZXJzIG9yIG90aGVyIGNvZGUgdGhhdCBuZWVkcyB0byBkZWFsIHdpdGggdGhlbSwgYW5kIHdoaWNoCisgKiBhdXRvY29uZmlndXJlcyBpbnN0ZWFkIG9mIHVzaW5nIGVhcmx5IGJpbmRpbmcgdG8gdGhlIGhhcmR3YXJlLgorICoKKyAqIFRoaXMgY291bGQgZXZlbnR1YWxseSB3b3JrIGxpa2UgdGhlIEFSTSBtYWNoX2lzXyooKSBzdHVmZiwgZHJpdmVuIGJ5CisgKiBzb21lIGNvbmZpZyBmaWxlIHRoYXQgZ2V0cyB1cGRhdGVkIGFzIG5ldyBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQuCisgKgorICogTk9URTogIHNvbWUgb2YgdGhlc2UgY29udHJvbGxlciBkcml2ZXJzIG1heSBub3QgYmUgYXZhaWxhYmxlIHlldC4KKyAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAKKyNkZWZpbmUJZ2FkZ2V0X2lzX25ldDIyODAoZykJIXN0cmNtcCgibmV0MjI4MCIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19uZXQyMjgwKGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENECisjZGVmaW5lCWdhZGdldF9pc19kdW1teShnKQkhc3RyY21wKCJkdW1teV91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfZHVtbXkoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFgKKyNkZWZpbmUJZ2FkZ2V0X2lzX3B4YShnKQkhc3RyY21wKCJweGEyeHhfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX3B4YShnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0dPS1UKKyNkZWZpbmUJZ2FkZ2V0X2lzX2dva3UoZykJIXN0cmNtcCgiZ29rdV91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfZ29rdShnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NVUEVSSAorI2RlZmluZQlnYWRnZXRfaXNfc2goZykJCSFzdHJjbXAoInNoX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19zaChnKQkJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TQTExMDAKKyNkZWZpbmUJZ2FkZ2V0X2lzX3NhMTEwMChnKQkhc3RyY21wKCJzYTExMDBfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX3NhMTEwMChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFgKKyNkZWZpbmUJZ2FkZ2V0X2lzX2xoN2E0MHgoZykJIXN0cmNtcCgibGg3YTQweF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfbGg3YTQweChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01RMTFYWAorI2RlZmluZQlnYWRnZXRfaXNfbXExMXh4KGcpCSFzdHJjbXAoIm1xMTF4eF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfbXExMXh4KGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfT01BUAorI2RlZmluZQlnYWRnZXRfaXNfb21hcChnKQkhc3RyY21wKCJvbWFwX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19vbWFwKGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTjk2MDQKKyNkZWZpbmUJZ2FkZ2V0X2lzX245NjA0KGcpCSFzdHJjbXAoIm45NjA0X3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19uOTYwNChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WAorI2RlZmluZQlnYWRnZXRfaXNfcHhhMjd4KGcpCSFzdHJjbXAoInB4YTI3eF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfcHhhMjd4KGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMAorI2RlZmluZSBnYWRnZXRfaXNfczNjMjQxMChnKSAgICAhc3RyY21wKCJzM2MyNDEwX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19zM2MyNDEwKGcpICAgIDAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorI2RlZmluZSBnYWRnZXRfaXNfYXQ5MShnKQkhc3RyY21wKCJhdDkxX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19hdDkxKGcpCTAKKyNlbmRpZgorCisvLyBDT05GSUdfVVNCX0dBREdFVF9TWDIKKy8vIENPTkZJR19VU0JfR0FER0VUX0FVMVgwMAorLy8gLi4uCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1ZGI3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0wLDAgKzEsMTk4NCBAQAorLyoKKyAqIFRvc2hpYmEgVEM4NkMwMDEgKCJHb2t1LVMiKSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgTGluZW8KKyAqICAgICAgYnkgU3R1YXJ0IEx5bm5lLCBUb20gUnVzaHdvcnRoLCBhbmQgQnJ1Y2UgQmFsZGVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVG9zaGliYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgKHNvdXJjZUBtdmlzdGEuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy8qCisgKiBUaGlzIGRldmljZSBoYXMgZXAwIGFuZCB0aHJlZSBzZW1pLWNvbmZpZ3VyYWJsZSBidWxrL2ludGVycnVwdCBlbmRwb2ludHMuCisgKgorICogIC0gRW5kcG9pbnQgbnVtYmVyaW5nIGlzIGZpeGVkOiBlcHsxLDIsM30tYnVsaworICogIC0gR2FkZ2V0IGRyaXZlcnMgY2FuIGNob29zZSBlcCBtYXhwYWNrZXQgKDgvMTYvMzIvNjQpCisgKiAgLSBHYWRnZXQgZHJpdmVycyBjYW4gY2hvb3NlIGRpcmVjdGlvbiAoSU4sIE9VVCkKKyAqICAtIERNQSB3b3JrcyB3aXRoIGVwMSAoT1VUIHRyYW5zZmVycykgYW5kIGVwMiAoSU4gdHJhbnNmZXJzKS4KKyAqLworCisjdW5kZWYgREVCVUcKKy8vICNkZWZpbmUJVkVSQk9TRQkJLyogZXh0cmEgZGVidWcgbWVzc2FnZXMgKHN1Y2Nlc3MgdG9vKSAqLworLy8gI2RlZmluZQlVU0JfVFJBQ0UJLyogcGFja2V0LWxldmVsIHN1Y2Nlc3MgbWVzc2FnZXMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCisjaW5jbHVkZSAiZ29rdV91ZGMuaCIKKworI2RlZmluZQlEUklWRVJfREVTQwkJIlRDODZDMDAxIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCSIzMC1PY3QgMjAwMyIKKworI2RlZmluZQlETUFfQUREUl9JTlZBTElECSh+KGRtYV9hZGRyX3QpMCkKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAiZ29rdV91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2MgW10gPSBEUklWRVJfREVTQzsKKworTU9EVUxFX0FVVEhPUigic291cmNlQG12aXN0YS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKworLyoKKyAqIElOIGRtYSBiZWhhdmVzIG9rIHVuZGVyIHRlc3RpbmcsIHRob3VnaCB0aGUgSU4tZG1hIGFib3J0IHBhdGhzIGRvbid0CisgKiBzZWVtIHRvIGJlaGF2ZSBxdWl0ZSBhcyBleHBlY3RlZC4gIFVzZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBPVVQgZG1hIGRvY3VtZW50cyBkZXNpZ24gcHJvYmxlbXMgaGFuZGxpbmcgdGhlIGNvbW1vbiAic2hvcnQgcGFja2V0IgorICogdHJhbnNmZXIgdGVybWluYXRpb24gcG9saWN5OyBpdCBjb3VsZG4ndCBlbmFibGVkIGJ5IGRlZmF1bHQsIGV2ZW4KKyAqIGlmIHRoZSBPVVQtZG1hIGFib3J0IHByb2JsZW1zIGhhZCBhIHJlc29sdXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCB1c2VfZG1hID0gMTsKKworI2lmIDAKKy8vI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisvKiAibW9kcHJvYmUgZ29rdV91ZGMgdXNlX2RtYT0xIiBldGMKKyAqCTAgdG8gZGlzYWJsZSBkbWEKKyAqCTEgdG8gdXNlIElOIGRtYSBvbmx5IChub3JtYWwgb3BlcmF0aW9uKQorICoJMiB0byB1c2UgSU4gYW5kIE9VVCBkbWEKKyAqLworbW9kdWxlX3BhcmFtKHVzZV9kbWEsIHVpbnQsIFNfSVJVR08pOworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IGdva3VfZXAgKiwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY29tbWFuZChzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBpbnQgY29tbWFuZCwgdW5zaWduZWQgZXBudW0pCit7CisJd3JpdGVsKENPTU1BTkRfRVAoZXBudW0pIHwgY29tbWFuZCwgJnJlZ3MtPkNvbW1hbmQpOworCXVkZWxheSgzMDApOworfQorCitzdGF0aWMgaW50Citnb2t1X2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldjsKKwlzdHJ1Y3QgZ29rdV9lcAkqZXA7CisJdTMyCQltb2RlOworCXUxNgkJbWF4OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWRlc2MgfHwgZXAtPmRlc2MKKwkJCXx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGVwLT5kZXY7CisJaWYgKGVwID09ICZkZXYtPmVwWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKwlpZiAoZXAtPm51bSAhPSAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgocmVhZGwoZXAtPnJlZ19zdGF0dXMpICYgRVB4U1RBVFVTX0VQX01BU0spCisJCQkhPSBFUHhTVEFUVVNfRVBfSU5WQUxJRCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIGVuYWJsaW5nIHRoZSBuby10b2dnbGUgaW50ZXJydXB0IG1vZGUgd291bGQgbmVlZCBhbiBhcGkgaG9vayAqLworCW1vZGUgPSAwOworCW1heCA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoJmRlc2MtPndNYXhQYWNrZXRTaXplKSk7CisJc3dpdGNoIChtYXgpIHsKKwljYXNlIDY0Ogltb2RlKys7CisJY2FzZSAzMjoJbW9kZSsrOworCWNhc2UgMTY6CW1vZGUrKzsKKwljYXNlIDg6CQltb2RlIDw8PSAzOworCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1vZGUgfD0gMiA8PCAxOwkJLyogYnVsaywgb3IgaW50ci13aXRoLXRvZ2dsZSAqLworCisJLyogZXAxL2VwMiBkbWEgZGlyZWN0aW9uIGlzIGNob3NlbiBlYXJseTsgaXQgd29ya3MgaW4gdGhlIG90aGVyCisJICogZGlyZWN0aW9uLCB3aXRoIHBpby4gIGJlIGNhdXRpb3VzIHdpdGggb3V0LWRtYS4KKwkgKi8KKwllcC0+aXNfaW4gPSAoVVNCX0RJUl9JTiAmIGRlc2MtPmJFbmRwb2ludEFkZHJlc3MpICE9IDA7CisJaWYgKGVwLT5pc19pbikgeworCQltb2RlIHw9IDE7CisJCWVwLT5kbWEgPSAodXNlX2RtYSAhPSAwKSAmJiAoZXAtPm51bSA9PSBVRENfTVNUUkRfRU5EUE9JTlQpOworCX0gZWxzZSB7CisJCWVwLT5kbWEgPSAodXNlX2RtYSA9PSAyKSAmJiAoZXAtPm51bSA9PSBVRENfTVNUV1JfRU5EUE9JTlQpOworCQlpZiAoZXAtPmRtYSkKKwkJCURCRyhkZXYsICIlcyBvdXQtZG1hIGhpZGVzIHNob3J0IHBhY2tldHNcbiIsCisJCQkJZXAtPmVwLm5hbWUpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBlcDEgYW5kIGVwMiBjYW4gZG8gZG91YmxlIGJ1ZmZlcmluZyBhbmQvb3IgZG1hICovCisJaWYgKGVwLT5udW0gPCAzKSB7CisJCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBlcC0+ZGV2LT5yZWdzOworCQl1MzIJCQkJdG1wOworCisJCS8qIGRvdWJsZSBidWZmZXIgZXhjZXB0IChmb3Igbm93KSB3aXRoIHBpbyBpbiAqLworCQl0bXAgPSAoKGVwLT5kbWEgfHwgIWVwLT5pc19pbikKKwkJCQk/IDB4MTAJLyogZG91YmxlIGJ1ZmZlcmVkICovCisJCQkJOiAweDExCS8qIHNpbmdsZSBidWZmZXIgKi8KKwkJCSkgPDwgZXAtPm51bTsKKwkJdG1wIHw9IHJlYWRsKCZyZWdzLT5FUHhTaW5nbGUpOworCQl3cml0ZWwodG1wLCAmcmVncy0+RVB4U2luZ2xlKTsKKworCQl0bXAgPSAoZXAtPmRtYSA/IDB4MTAvKmRtYSovIDogMHgxMS8qcGlvKi8pIDw8IGVwLT5udW07CisJCXRtcCB8PSByZWFkbCgmcmVncy0+RVB4QkNTKTsKKwkJd3JpdGVsKHRtcCwgJnJlZ3MtPkVQeEJDUyk7CisJfQorCXdyaXRlbChtb2RlLCBlcC0+cmVnX21vZGUpOworCWNvbW1hbmQoZXAtPmRldi0+cmVncywgQ09NTUFORF9SRVNFVCwgZXAtPm51bSk7CisJZXAtPmVwLm1heHBhY2tldCA9IG1heDsKKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPmRlc2MgPSBkZXNjOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCURCRyhkZXYsICJlbmFibGUgJXMgJXMgJXMgbWF4cGFja2V0ICV1XG4iLCBlcC0+ZXAubmFtZSwKKwkJZXAtPmlzX2luID8gIklOIiA6ICJPVVQiLAorCQllcC0+ZG1hID8gImRtYSIgOiAicGlvIiwKKwkJbWF4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcF9yZXNldChzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2ID0gZXAtPmRldjsKKworCWlmIChyZWdzKSB7CisJCWNvbW1hbmQocmVncywgQ09NTUFORF9JTlZBTElELCBlcC0+bnVtKTsKKwkJaWYgKGVwLT5udW0pIHsKKwkJCWlmIChlcC0+bnVtID09IFVEQ19NU1RXUl9FTkRQT0lOVCkKKwkJCQlkZXYtPmludF9lbmFibGUgJj0gfihJTlRfTVNUV1JFTkQKKwkJCQkJCQl8SU5UX01TVFdSVE1PVVQpOworCQkJZWxzZSBpZiAoZXAtPm51bSA9PSBVRENfTVNUUkRfRU5EUE9JTlQpCisJCQkJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfTVNUUkRFTkQ7CisJCQlkZXYtPmludF9lbmFibGUgJj0gfklOVF9FUHhEQVRBU0VUIChlcC0+bnVtKTsKKwkJfSBlbHNlCisJCQlkZXYtPmludF9lbmFibGUgJj0gfklOVF9FUDA7CisJCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwkJcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworCQlpZiAoZXAtPm51bSA8IDMpIHsKKwkJCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnIgPSBlcC0+ZGV2LT5yZWdzOworCQkJdTMyCQkJCXRtcDsKKworCQkJdG1wID0gcmVhZGwoJnItPkVQeFNpbmdsZSk7CisJCQl0bXAgJj0gfigweDExIDw8IGVwLT5udW0pOworCQkJd3JpdGVsKHRtcCwgJnItPkVQeFNpbmdsZSk7CisKKwkJCXRtcCA9IHJlYWRsKCZyLT5FUHhCQ1MpOworCQkJdG1wICY9IH4oMHgxMSA8PCBlcC0+bnVtKTsKKwkJCXdyaXRlbCh0bXAsICZyLT5FUHhCQ1MpOworCQl9CisJCS8qIHJlc2V0IGRtYSBpbiBjYXNlIHdlJ3JlIHN0aWxsIHVzaW5nIGl0ICovCisJCWlmIChlcC0+ZG1hKSB7CisJCQl1MzIJbWFzdGVyOworCisJCQltYXN0ZXIgPSByZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUldfQklUUzsKKwkJCWlmIChlcC0+bnVtID09IFVEQ19NU1RXUl9FTkRQT0lOVCkgeworCQkJCW1hc3RlciAmPSB+TVNUX1dfQklUUzsKKwkJCQltYXN0ZXIgfD0gTVNUX1dSX1JFU0VUOworCQkJfSBlbHNlIHsKKwkJCQltYXN0ZXIgJj0gfk1TVF9SX0JJVFM7CisJCQkJbWFzdGVyIHw9IE1TVF9SRF9SRVNFVDsKKwkJCX0KKwkJCXdyaXRlbChtYXN0ZXIsICZyZWdzLT5kbWFfbWFzdGVyKTsKKwkJfQorCX0KKworCWVwLT5lcC5tYXhwYWNrZXQgPSBNQVhfRklGT19TSVpFOworCWVwLT5kZXNjID0gTlVMTDsKKwllcC0+c3RvcHBlZCA9IDE7CisJZXAtPmlycXMgPSAwOworCWVwLT5kbWEgPSAwOworfQorCitzdGF0aWMgaW50IGdva3VfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IGdva3VfZXAJKmVwOworCXN0cnVjdCBnb2t1X3VkYwkqZGV2OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkZXYgPSBlcC0+ZGV2OworCWlmIChkZXYtPmVwMHN0YXRlID09IEVQMF9TVVNQRU5EKQorCQlyZXR1cm4gLUVCVVNZOworCisJVkRCRyhkZXYsICJkaXNhYmxlICVzXG4iLCBfZXAtPm5hbWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCW51a2UoZXAsIC1FU0hVVERPV04pOworCWVwX3Jlc2V0KGRldi0+cmVncywgZXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorZ29rdV9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwlJTklUX0xJU1RfSEVBRCgmcmVxLT5xdWV1ZSk7CisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQKK2dva3VfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBnb2t1X3JlcXVlc3QJKnJlcTsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm47CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IGdva3VfcmVxdWVzdCwgcmVxKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSk7CisJa2ZyZWUocmVxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI3VuZGVmIFVTRV9LTUFMTE9DCisKKy8qIG1hbnkgY29tbW9uIHBsYXRmb3JtcyBoYXZlIGRtYS1jb2hlcmVudCBjYWNoZXMsIHdoaWNoIG1lYW5zIHRoYXQgaXQncworICogc2FmZSB0byB1c2Uga21hbGxvYygpIG1lbW9yeSBmb3IgYWxsIGkvbyBidWZmZXJzIHdpdGhvdXQgdXNpbmcgYW55CisgKiBjYWNoZSBmbHVzaGluZyBjYWxscy4gICh1bmxlc3MgeW91J3JlIHRyeWluZyB0byBzaGFyZSBjYWNoZSBsaW5lcworICogYmV0d2VlbiBkbWEgYW5kIG5vbi1kbWEgYWN0aXZpdGllcywgd2hpY2ggaXMgYSBzbG93IGlkZWEgaW4gYW55IGNhc2UuKQorICoKKyAqIG90aGVyIHBsYXRmb3JtcyBuZWVkIG1vcmUgY2FyZSwgd2l0aCAyLjYgaGF2aW5nIGEgbW9kZXJhdGVseSBnZW5lcmFsCisgKiBzb2x1dGlvbiBleGNlcHQgZm9yIHRoZSBjb21tb24gImJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gYSBwYWdlIiBjYXNlLgorICovCisjaWYJZGVmaW5lZChDT05GSUdfWDg2KQorI2RlZmluZSBVU0VfS01BTExPQworCisjZWxpZglkZWZpbmVkKENPTkZJR19NSVBTKSAmJiAhZGVmaW5lZChDT05GSUdfTk9OQ09IRVJFTlRfSU8pCisjZGVmaW5lIFVTRV9LTUFMTE9DCisKKyNlbGlmCWRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkKKyNkZWZpbmUgVVNFX0tNQUxMT0MKKworI2VuZGlmCisKKy8qIGFsbG9jYXRpbmcgYnVmZmVycyB0aGlzIHdheSBlbGltaW5hdGVzIGRtYSBtYXBwaW5nIG92ZXJoZWFkLCB3aGljaAorICogb24gc29tZSBwbGF0Zm9ybXMgd2lsbCBtZWFuIGVsaW1pbmF0aW5nIGEgcGVyLWlvIGJ1ZmZlciBjb3B5LiAgd2l0aAorICogc29tZSBraW5kcyBvZiBzeXN0ZW0gY2FjaGVzLCBmdXJ0aGVyIHR3ZWFrcyBtYXkgc3RpbGwgYmUgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCAqCitnb2t1X2FsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2VwICpfZXAsIHVuc2lnbmVkIGJ5dGVzLAorCQkJZG1hX2FkZHJfdCAqZG1hLCBpbnQgIGdmcF9mbGFncykKK3sKKwl2b2lkCQkqcmV0dmFsOworCXN0cnVjdCBnb2t1X2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJKmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisKKyNpZglkZWZpbmVkKFVTRV9LTUFMTE9DKQorCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyk7CisJaWYgKHJldHZhbCkKKwkJKmRtYSA9IHZpcnRfdG9fcGh5cyhyZXR2YWwpOworI2Vsc2UKKwlpZiAoZXAtPmRtYSkgeworCQkvKiB0aGUgbWFpbiBwcm9ibGVtIHdpdGggdGhpcyBjYWxsIGlzIHRoYXQgaXQgd2FzdGVzIG1lbW9yeQorCQkgKiBvbiB0eXBpY2FsIDEvTiBwYWdlIGFsbG9jYXRpb25zOiBpdCBhbGxvY2F0ZXMgMS1OIHBhZ2VzLgorCQkgKi8KKyN3YXJuaW5nIFVzaW5nIGRtYV9hbGxvY19jb2hlcmVudCBldmVuIHdpdGggYnVmZmVycyBzbWFsbGVyIHRoYW4gYSBwYWdlLgorCQlyZXR2YWwgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmVwLT5kZXYtPnBkZXYtPmRldiwKKwkJCQlieXRlcywgZG1hLCBnZnBfZmxhZ3MpOworCX0gZWxzZQorCQlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOworI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2dva3VfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqX2VwLCB2b2lkICpidWYsIGRtYV9hZGRyX3QgZG1hLCB1bnNpZ25lZCBieXRlcykKK3sKKwkvKiBmcmVlIG1lbW9yeSBpbnRvIHRoZSByaWdodCBhbGxvY2F0b3IgKi8KKyNpZm5kZWYJVVNFX0tNQUxMT0MKKwlpZiAoZG1hICE9IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJc3RydWN0IGdva3VfZXAJKmVwOworCisJCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwkJaWYgKCFfZXApCisJCQlyZXR1cm47CisJCWRtYV9mcmVlX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsIGJ5dGVzLCBidWYsIGRtYSk7CisJfSBlbHNlCisjZW5kaWYKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitkb25lKHN0cnVjdCBnb2t1X2VwICplcCwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBnb2t1X3VkYwkJKmRldjsKKwl1bnNpZ25lZAkJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwlpZiAobGlrZWx5KHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwlkZXYgPSBlcC0+ZGV2OworCWlmIChyZXEtPm1hcHBlZCkgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldi0+cGRldiwgcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQllcC0+aXNfaW4gPyBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJcmVxLT5tYXBwZWQgPSAwOworCX0KKworI2lmbmRlZiBVU0JfVFJBQ0UKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorI2VuZGlmCisJCVZEQkcoZGV2LCAiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBpbnQKK3dyaXRlX3BhY2tldCh1MzIgX19pb21lbSAqZmlmbywgdTggKmJ1Ziwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBtYXgpCit7CisJdW5zaWduZWQJbGVuZ3RoLCBjb3VudDsKKworCWxlbmd0aCA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbmd0aDsKKworCWNvdW50ID0gbGVuZ3RoOworCXdoaWxlIChsaWtlbHkoY291bnQtLSkpCisJCXdyaXRlbCgqYnVmKyssIGZpZm8pOworCXJldHVybiBsZW5ndGg7Cit9CisKKy8vIHJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gY29tcGxldGVkLCBuZWdhdGl2ZSA9IGVycm5vCitzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IGdva3VfZXAgKmVwLCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGdva3VfdWRjCSpkZXYgPSBlcC0+ZGV2OworCXUzMgkJdG1wOworCXU4CQkqYnVmOworCXVuc2lnbmVkCWNvdW50OworCWludAkJaXNfbGFzdDsKKworCXRtcCA9IHJlYWRsKCZkZXYtPnJlZ3MtPkRhdGFTZXQpOworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkoZXAtPm51bSA9PSAwICYmIGRldi0+ZXAwc3RhdGUgIT0gRVAwX0lOKSkKKwkJcmV0dXJuIC1FTDJITFQ7CisKKwkvKiBOT1RFOiAganVzdCBzaW5nbGUtYnVmZmVyZWQgUElPLUlOIGZvciBub3cuICAqLworCWlmICh1bmxpa2VseSgodG1wICYgREFUQVNFVF9BKGVwLT5udW0pKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjbGVhciBvdXIgInBhY2tldCBhdmFpbGFibGUiIGlycSAqLworCWlmIChlcC0+bnVtICE9IDApCisJCXdyaXRlbCh+SU5UX0VQeERBVEFTRVQoZXAtPm51bSksICZkZXYtPnJlZ3MtPmludF9zdGF0dXMpOworCisJY291bnQgPSB3cml0ZV9wYWNrZXQoZXAtPnJlZ19maWZvLCBidWYsIHJlcSwgZXAtPmVwLm1heHBhY2tldCk7CisKKwkvKiBsYXN0IHBhY2tldCBvZnRlbiBzaG9ydCAoc29tZXRpbWVzIGEgemxwLCBlc3BlY2lhbGx5IG9uIGVwMCkgKi8KKwlpZiAodW5saWtlbHkoY291bnQgIT0gZXAtPmVwLm1heHBhY2tldCkpIHsKKwkJd3JpdGVsKH4oMTw8ZXAtPm51bSksICZkZXYtPnJlZ3MtPkVPUCk7CisJCWlmIChlcC0+bnVtID09IDApIHsKKwkJCWRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJfQorCQlpc19sYXN0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAobGlrZWx5KHJlcS0+cmVxLmxlbmd0aCAhPSByZXEtPnJlcS5hY3R1YWwpCisJCQkJfHwgcmVxLT5yZXEuemVybykKKwkJCWlzX2xhc3QgPSAwOworCQllbHNlCisJCQlpc19sYXN0ID0gMTsKKwl9CisjaWYgMAkJLyogcHJpbnRrIHNlZW1lZCB0byB0cmFzaCBpc19sYXN0Li4uKi8KKy8vI2lmZGVmIFVTQl9UUkFDRQorCVZEQkcoZGV2LCAid3JvdGUgJXMgJXUgYnl0ZXMlcyBJTiAldSBsZWZ0ICVwXG4iLAorCQllcC0+ZXAubmFtZSwgY291bnQsIGlzX2xhc3QgPyAiL2xhc3QiIDogIiIsCisJCXJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgcmVxKTsKKyNlbmRpZgorCisJLyogcmVxdWVzdHMgY29tcGxldGUgd2hlbiBhbGwgSU4gZGF0YSBpcyBpbiB0aGUgRklGTywKKwkgKiBvciBzb21ldGltZXMgbGF0ZXIsIGlmIGEgemxwIHdhcyBuZWVkZWQuCisJICovCisJaWYgKGlzX2xhc3QpIHsKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWZvKHN0cnVjdCBnb2t1X2VwICplcCwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3M7CisJdTMyCQkJCXNpemUsIHNldDsKKwl1OAkJCQkqYnVmOworCXVuc2lnbmVkCQkJYnVmZmVyc3BhY2UsIGlzX3Nob3J0LCBkYnVmZjsKKworCXJlZ3MgPSBlcC0+ZGV2LT5yZWdzOwordG9wOgorCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKworCWlmICh1bmxpa2VseShlcC0+bnVtID09IDAgJiYgZXAtPmRldi0+ZXAwc3RhdGUgIT0gRVAwX09VVCkpCisJCXJldHVybiAtRUwySExUOworCisJZGJ1ZmYgPSAoZXAtPm51bSA9PSAxIHx8IGVwLT5udW0gPT0gMik7CisJZG8geworCQkvKiBhY2sgZGF0YXNldCBpcnEgbWF0Y2hpbmcgdGhlIHN0YXR1cyB3ZSdsbCBoYW5kbGUgKi8KKwkJaWYgKGVwLT5udW0gIT0gMCkKKwkJCXdyaXRlbCh+SU5UX0VQeERBVEFTRVQoZXAtPm51bSksICZyZWdzLT5pbnRfc3RhdHVzKTsKKworCQlzZXQgPSByZWFkbCgmcmVncy0+RGF0YVNldCkgJiBEQVRBU0VUX0FCKGVwLT5udW0pOworCQlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQVtlcC0+bnVtXSk7CisJCWJ1ZmZlcnNwYWNlID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCisJCS8qIHVzdWFsbHkgZG8gbm90aGluZyB3aXRob3V0IGFuIE9VVCBwYWNrZXQgKi8KKwkJaWYgKGxpa2VseShlcC0+bnVtICE9IDAgfHwgYnVmZmVyc3BhY2UgIT0gMCkpIHsKKwkJCWlmICh1bmxpa2VseShzZXQgPT0gMCkpCisJCQkJYnJlYWs7CisJCQkvKiB1c2UgZXAxL2VwMiBkb3VibGUtYnVmZmVyaW5nIGZvciBPVVQgKi8KKwkJCWlmICghKHNpemUgJiBQQUNLRVRfQUNUSVZFKSkKKwkJCQlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQltlcC0+bnVtXSk7CisJCQlpZiAoIShzaXplICYgUEFDS0VUX0FDVElWRSkpIAkvLyAiY2FuJ3QgaGFwcGVuIgorCQkJCWJyZWFrOworCQkJc2l6ZSAmPSBEQVRBU0laRTsJLyogRVB4U2l6ZUggPT0gMCAqLworCisJCS8qIGVwMG91dCBuby1vdXQtZGF0YSBjYXNlIGZvciBzZXRfY29uZmlnLCBldGMgKi8KKwkJfSBlbHNlCisJCQlzaXplID0gMDsKKworCQkvKiByZWFkIGFsbCBieXRlcyBmcm9tIHRoaXMgcGFja2V0ICovCisJCXJlcS0+cmVxLmFjdHVhbCArPSBzaXplOworCQlpc19zaG9ydCA9IChzaXplIDwgZXAtPmVwLm1heHBhY2tldCk7CisjaWZkZWYgVVNCX1RSQUNFCisJCVZEQkcoZXAtPmRldiwgInJlYWQgJXMgJXUgYnl0ZXMlcyBPVVQgcmVxICVwICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsIHNpemUsIGlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkJcmVxLCByZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisjZW5kaWYKKwkJd2hpbGUgKGxpa2VseShzaXplLS0gIT0gMCkpIHsKKwkJCXU4CWJ5dGUgPSAodTgpIHJlYWRsKGVwLT5yZWdfZmlmbyk7CisKKwkJCWlmICh1bmxpa2VseShidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkcml2ZXIncyBidWZmZXIKKwkJCQkgKiBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0aGUgaG9zdCBzZW50LgorCQkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEgaW4gdGhpcyBwYWNrZXQuCisJCQkJICovCisJCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQorCQkJCQlEQkcoZXAtPmRldiwgIiVzIG92ZXJmbG93ICV1XG4iLAorCQkJCQkJZXAtPmVwLm5hbWUsIHNpemUpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCSpidWYrKyA9IGJ5dGU7CisJCQkJYnVmZmVyc3BhY2UtLTsKKwkJCX0KKwkJfQorCisJCS8qIGNvbXBsZXRpb24gKi8KKwkJaWYgKHVubGlrZWx5KGlzX3Nob3J0IHx8IHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpKSB7CisJCQlpZiAodW5saWtlbHkoZXAtPm51bSA9PSAwKSkgeworCQkJCS8qIG5vbi1jb250cm9sIGVuZHBvaW50cyBub3cgdXNhYmxlPyAqLworCQkJCWlmIChlcC0+ZGV2LT5yZXFfY29uZmlnKQorCQkJCQl3cml0ZWwoZXAtPmRldi0+Y29uZmlndXJlZAorCQkJCQkJCT8gVVNCU1RBVEVfQ09ORklHVVJFRAorCQkJCQkJCTogMCwKKwkJCQkJCSZyZWdzLT5Vc2JTdGF0ZSk7CisJCQkJLyogZXAwb3V0IHN0YXR1cyBzdGFnZSAqLworCQkJCXdyaXRlbCh+KDE8PDApLCAmcmVncy0+RU9QKTsKKwkJCQllcC0+c3RvcHBlZCA9IDE7CisJCQkJZXAtPmRldi0+ZXAwc3RhdGUgPSBFUDBfU1RBVFVTOworCQkJfQorCQkJZG9uZShlcCwgcmVxLCAwKTsKKworCQkJLyogZW1wdHkgdGhlIHNlY29uZCBidWZmZXIgYXNhcCAqLworCQkJaWYgKGRidWZmICYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCBnb2t1X3JlcXVlc3QsIHF1ZXVlKTsKKwkJCQlnb3RvIHRvcDsKKwkJCX0KKwkJCXJldHVybiAxOworCQl9CisJfSB3aGlsZSAoZGJ1ZmYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Bpb19pcnFfZW5hYmxlKHN0cnVjdCBnb2t1X3VkYyAqZGV2LAorCQlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBpbnQgZXBudW0pCit7CisJZGV2LT5pbnRfZW5hYmxlIHw9IElOVF9FUHhEQVRBU0VUIChlcG51bSk7CisJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJnJlZ3MtPmludF9lbmFibGUpOworCS8qIHdyaXRlIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitwaW9faXJxX2Rpc2FibGUoc3RydWN0IGdva3VfdWRjICpkZXYsCisJCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0gKnJlZ3MsIGludCBlcG51bSkKK3sKKwlkZXYtPmludF9lbmFibGUgJj0gfklOVF9FUHhEQVRBU0VUIChlcG51bSk7CisJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJnJlZ3MtPmludF9lbmFibGUpOworCS8qIHdyaXRlIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitwaW9fYWR2YW5jZShzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSkKKwkJcmV0dXJuOworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHF1ZXVlKTsKKwkoZXAtPmlzX2luID8gd3JpdGVfZmlmbyA6IHJlYWRfZmlmbykoZXAsIHJlcSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gcmV0dXJuOiAgMCA9IHEgcnVubmluZywgMSA9IHEgc3RvcHBlZCwgbmVnYXRpdmUgPSBlcnJubworc3RhdGljIGludCBzdGFydF9kbWEoc3RydWN0IGdva3VfZXAgKmVwLCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJdTMyCQkJCW1hc3RlcjsKKwl1MzIJCQkJc3RhcnQgPSByZXEtPnJlcS5kbWE7CisJdTMyCQkJCWVuZCA9IHN0YXJ0ICsgcmVxLT5yZXEubGVuZ3RoIC0gMTsKKworCW1hc3RlciA9IHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9SV19CSVRTOworCisJLyogcmUtaW5pdCB0aGUgYml0cyBhZmZlY3RpbmcgSU4gZG1hOyBjYXJlZnVsIHdpdGggemxwcyAqLworCWlmIChsaWtlbHkoZXAtPmlzX2luKSkgeworCQlpZiAodW5saWtlbHkobWFzdGVyICYgTVNUX1JEX0VOQSkpIHsKKwkJCURCRyAoZXAtPmRldiwgInN0YXJ0LCBJTiBhY3RpdmUgZG1hICUwM3ghIVxuIiwKKwkJCQltYXN0ZXIpOworLy8JCQlyZXR1cm4gLUVMMkhMVDsKKwkJfQorCQl3cml0ZWwoZW5kLCAmcmVncy0+aW5fZG1hX2VuZCk7CisJCXdyaXRlbChzdGFydCwgJnJlZ3MtPmluX2RtYV9zdGFydCk7CisKKwkJbWFzdGVyICY9IH5NU1RfUl9CSVRTOworCQlpZiAodW5saWtlbHkocmVxLT5yZXEubGVuZ3RoID09IDApKQorCQkJbWFzdGVyID0gTVNUX1JEX0VOQSB8IE1TVF9SRF9FT1BCOworCQllbHNlIGlmICgocmVxLT5yZXEubGVuZ3RoICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMAorCQkJCQl8fCByZXEtPnJlcS56ZXJvKQorCQkJbWFzdGVyID0gTVNUX1JEX0VOQSB8IE1TVF9FT1BCX0VOQTsKKwkJZWxzZQorCQkJbWFzdGVyID0gTVNUX1JEX0VOQSB8IE1TVF9FT1BCX0RJUzsKKworCQllcC0+ZGV2LT5pbnRfZW5hYmxlIHw9IElOVF9NU1RSREVORDsKKworCS8qIEdva3UgRE1BLU9VVCBtZXJnZXMgc2hvcnQgcGFja2V0cywgd2hpY2ggcGxheXMgcG9vcmx5IHdpdGgKKwkgKiBwcm90b2NvbHMgd2hlcmUgc2hvcnQgcGFja2V0cyBtYXJrIHRoZSB0cmFuc2ZlciBib3VuZGFyaWVzLgorCSAqIFRoZSBjaGlwIHN1cHBvcnRzIGEgbm9uc3RhbmRhcmQgcG9saWN5IHdpdGggSU5UX01TVFdSVE1PVVQsCisJICogZW5kaW5nIHRyYW5zZmVycyBhZnRlciAzIFNPRnM7IHdlIGRvbid0IHR1cm4gaXQgb24uCisJICovCisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KG1hc3RlciAmIE1TVF9XUl9FTkEpKSB7CisJCQlEQkcgKGVwLT5kZXYsICJzdGFydCwgT1VUIGFjdGl2ZSBkbWEgJTAzeCEhXG4iLAorCQkJCW1hc3Rlcik7CisvLwkJCXJldHVybiAtRUwySExUOworCQl9CisJCXdyaXRlbChlbmQsICZyZWdzLT5vdXRfZG1hX2VuZCk7CisJCXdyaXRlbChzdGFydCwgJnJlZ3MtPm91dF9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1dfQklUUzsKKwkJbWFzdGVyIHw9IE1TVF9XUl9FTkEgfCBNU1RfVElNRU9VVF9ESVM7CisKKwkJZXAtPmRldi0+aW50X2VuYWJsZSB8PSBJTlRfTVNUV1JFTkR8SU5UX01TVFdSVE1PVVQ7CisJfQorCisJd3JpdGVsKG1hc3RlciwgJnJlZ3MtPmRtYV9tYXN0ZXIpOworCXdyaXRlbChlcC0+ZGV2LT5pbnRfZW5hYmxlLCAmcmVncy0+aW50X2VuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9hZHZhbmNlKHN0cnVjdCBnb2t1X3VkYyAqZGV2LCBzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkJKnJlcTsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZXAtPmRldi0+cmVnczsKKwl1MzIJCQkJbWFzdGVyOworCisJbWFzdGVyID0gcmVhZGwoJnJlZ3MtPmRtYV9tYXN0ZXIpOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKSB7CitzdG9wOgorCQlpZiAoZXAtPmlzX2luKQorCQkJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfTVNUUkRFTkQ7CisJCWVsc2UKKwkJCWRldi0+aW50X2VuYWJsZSAmPSB+KElOVF9NU1RXUkVORHxJTlRfTVNUV1JUTU9VVCk7CisJCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwkJcmV0dXJuOworCX0KKwlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCBxdWV1ZSk7CisKKwkvKiBub3JtYWwgaHcgZG1hIGNvbXBsZXRpb24gKG5vdCBhYm9ydCkgKi8KKwlpZiAobGlrZWx5KGVwLT5pc19pbikpIHsKKwkJaWYgKHVubGlrZWx5KG1hc3RlciAmIE1TVF9SRF9FTkEpKQorCQkJcmV0dXJuOworCQlyZXEtPnJlcS5hY3R1YWwgPSByZWFkbCgmcmVncy0+aW5fZG1hX2N1cnJlbnQpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShtYXN0ZXIgJiBNU1RfV1JfRU5BKSkKKwkJCXJldHVybjsKKworCQkvKiBoYXJkd2FyZSBtZXJnZXMgc2hvcnQgcGFja2V0cywgYW5kIGFsc28gaGlkZXMgcGFja2V0CisJCSAqIG92ZXJydW5zLiAgYSBwYXJ0aWFsIHBhY2tldCBNQVkgYmUgaW4gdGhlIGZpZm8gaGVyZS4KKwkJICovCisJCXJlcS0+cmVxLmFjdHVhbCA9IHJlYWRsKCZyZWdzLT5vdXRfZG1hX2N1cnJlbnQpOworCX0KKwlyZXEtPnJlcS5hY3R1YWwgLT0gcmVxLT5yZXEuZG1hOworCXJlcS0+cmVxLmFjdHVhbCsrOworCisjaWZkZWYgVVNCX1RSQUNFCisJVkRCRyhkZXYsICJkb25lICVzICVzIGRtYSwgJXUvJXUgYnl0ZXMsIHJlcSAlcFxuIiwKKwkJZXAtPmVwLm5hbWUsIGVwLT5pc19pbiA/ICJJTiIgOiAiT1VUIiwKKwkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgsIHJlcSk7CisjZW5kaWYKKwlkb25lKGVwLCByZXEsIDApOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlnb3RvIHN0b3A7CisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwgcXVldWUpOworCSh2b2lkKSBzdGFydF9kbWEoZXAsIHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X2RtYShzdHJ1Y3QgZ29rdV9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJc3RydWN0IGdva3VfcmVxdWVzdAkJKnJlcTsKKwl1MzIJCQkJY3VyciwgbWFzdGVyOworCisJLyogTkFLIGZ1dHVyZSBob3N0IHJlcXVlc3RzLCBob3BpbmcgdGhlIGltcGxpY2l0IGRlbGF5IGxldHMgdGhlCisJICogZG1hIGVuZ2luZSBmaW5pc2ggcmVhZGluZyAob3Igd3JpdGluZykgaXRzIGxhdGVzdCBwYWNrZXQgYW5kCisJICogZW1wdHkgdGhlIGRtYSBidWZmZXIgKHVwIHRvIDE2IGJ5dGVzKS4KKwkgKgorCSAqIFRoaXMgYXZvaWRzIG5lZWRpbmcgdG8gY2xlYW4gdXAgYSBwYXJ0aWFsIHBhY2tldCBpbiB0aGUgZmlmbzsKKwkgKiB3ZSBjYW4ndCBkbyB0aGF0IGZvciBJTiB3aXRob3V0IHNpZGUgZWZmZWN0cyB0byBIQUxUIGFuZCBUT0dHTEUuCisJICovCisJY29tbWFuZChyZWdzLCBDT01NQU5EX0ZJRk9fRElTQUJMRSwgZXAtPm51bSk7CisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwgcXVldWUpOworCW1hc3RlciA9IHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9SV19CSVRTOworCisJLyogRklYTUUgdXNpbmcgdGhlc2UgcmVzZXRzIGlzbid0IHVzYWJseSBkb2N1bWVudGVkLiB0aGlzIG1heQorCSAqIG5vdCB3b3JrIHVubGVzcyBpdCdzIGZvbGxvd2VkIGJ5IGRpc2FibGluZyB0aGUgZW5kcG9pbnQuCisJICoKKwkgKiBGSVhNRSB0aGUgT1VUIHJlc2V0IHBhdGggZG9lc24ndCBldmVuIGJlaGF2ZSBjb25zaXN0ZW50bHkuCisJICovCisJaWYgKGVwLT5pc19pbikgeworCQlpZiAodW5saWtlbHkoKHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9SRF9FTkEpID09IDApKQorCQkJZ290byBmaW5pc2hlZDsKKwkJY3VyciA9IHJlYWRsKCZyZWdzLT5pbl9kbWFfY3VycmVudCk7CisKKwkJd3JpdGVsKGN1cnIsICZyZWdzLT5pbl9kbWFfZW5kKTsKKwkJd3JpdGVsKGN1cnIsICZyZWdzLT5pbl9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1JfQklUUzsKKwkJbWFzdGVyIHw9IE1TVF9SRF9SRVNFVDsKKwkJd3JpdGVsKG1hc3RlciwgJnJlZ3MtPmRtYV9tYXN0ZXIpOworCisJCWlmIChyZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUkRfRU5BKQorCQkJREJHKGVwLT5kZXYsICJJTiBkbWEgYWN0aXZlIGFmdGVyIHJlc2V0IVxuIik7CisKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoKHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9XUl9FTkEpID09IDApKQorCQkJZ290byBmaW5pc2hlZDsKKwkJY3VyciA9IHJlYWRsKCZyZWdzLT5vdXRfZG1hX2N1cnJlbnQpOworCisJCXdyaXRlbChjdXJyLCAmcmVncy0+b3V0X2RtYV9lbmQpOworCQl3cml0ZWwoY3VyciwgJnJlZ3MtPm91dF9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1dfQklUUzsKKwkJbWFzdGVyIHw9IE1TVF9XUl9SRVNFVDsKKwkJd3JpdGVsKG1hc3RlciwgJnJlZ3MtPmRtYV9tYXN0ZXIpOworCisJCWlmIChyZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfV1JfRU5BKQorCQkJREJHKGVwLT5kZXYsICJPVVQgZG1hIGFjdGl2ZSBhZnRlciByZXNldCFcbiIpOworCX0KKwlyZXEtPnJlcS5hY3R1YWwgPSAoY3VyciAtIHJlcS0+cmVxLmRtYSkgKyAxOworCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKworCVZEQkcoZXAtPmRldiwgIiVzICVzICVzICVkLyVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLT5lcC5uYW1lLAorCQllcC0+aXNfaW4gPyAiSU4iIDogIk9VVCIsCisJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCWNvbW1hbmQocmVncywgQ09NTUFORF9GSUZPX0VOQUJMRSwgZXAtPm51bSk7CisKKwlyZXR1cm47CisKK2ZpbmlzaGVkOgorCS8qIGRtYSBhbHJlYWR5IGNvbXBsZXRlZDsgbm8gYWJvcnQgbmVlZGVkICovCisJY29tbWFuZChyZWdzLCBDT01NQU5EX0ZJRk9fRU5BQkxFLCBlcC0+bnVtKTsKKwlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGg7CisJcmVxLT5yZXEuc3RhdHVzID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorZ29rdV9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisJc3RydWN0IGdva3VfZXAJCSplcDsKKwlzdHJ1Y3QgZ29rdV91ZGMJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJc3RhdHVzOworCisJLyogYWx3YXlzIHJlcXVpcmUgYSBjcHUtdmlldyBidWZmZXIgc28gcGlvIHdvcmtzICovCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHJlcSk7CisJaWYgKHVubGlrZWx5KCFfcmVxIHx8ICFfcmVxLT5jb21wbGV0ZQorCQkJfHwgIV9yZXEtPmJ1ZiB8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKHVubGlrZWx5KCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiBjYW4ndCB0b3VjaCByZWdpc3RlcnMgd2hlbiBzdXNwZW5kZWQgKi8KKwlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfU1VTUEVORCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHNldCB1cCBkbWEgbWFwcGluZyBpbiBjYXNlIHRoZSBjYWxsZXIgZGlkbid0ICovCisJaWYgKGVwLT5kbWEgJiYgX3JlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJX3JlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCBfcmVxLT5idWYsIF9yZXEtPmxlbmd0aCwKKwkJCWVwLT5pc19pbiA/IFBDSV9ETUFfVE9ERVZJQ0UgOiBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDE7CisJfQorCisjaWZkZWYgVVNCX1RSQUNFCisJVkRCRyhkZXYsICIlcyBxdWV1ZSByZXEgJXAsIGxlbiAldSBidWYgJXBcbiIsCisJCQlfZXAtPm5hbWUsIF9yZXEsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisKKwkvKiBmb3IgZXAwIElOIHdpdGhvdXQgcHJlbWF0dXJlIHN0YXR1cywgemxwIGlzIHJlcXVpcmVkIGFuZAorCSAqIHdyaXRpbmcgRU9QIHN0YXJ0cyB0aGUgc3RhdHVzIHN0YWdlIChPVVQpLgorCSAqLworCWlmICh1bmxpa2VseShlcC0+bnVtID09IDAgJiYgZXAtPmlzX2luKSkKKwkJX3JlcS0+emVybyA9IDE7CisKKwkvKiBraWNrc3RhcnQgdGhpcyBpL28gcXVldWU/ICovCisJc3RhdHVzID0gMDsKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiBsaWtlbHkoIWVwLT5zdG9wcGVkKSkgeworCQkvKiBkbWE6ICBkb25lIGFmdGVyIGRtYSBjb21wbGV0aW9uIElSUSAob3IgZXJyb3IpCisJCSAqIHBpbzogIGRvbmUgYWZ0ZXIgbGFzdCBmaWZvIG9wZXJhdGlvbgorCQkgKi8KKwkJaWYgKGVwLT5kbWEpCisJCQlzdGF0dXMgPSBzdGFydF9kbWEoZXAsIHJlcSk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IChlcC0+aXNfaW4gPyB3cml0ZV9maWZvIDogcmVhZF9maWZvKShlcCwgcmVxKTsKKworCQlpZiAodW5saWtlbHkoc3RhdHVzICE9IDApKSB7CisJCQlpZiAoc3RhdHVzID4gMCkKKwkJCQlzdGF0dXMgPSAwOworCQkJcmVxID0gTlVMTDsKKwkJfQorCisJfSAvKiBlbHNlIHBpbyBvciBkbWEgaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlLiAqLworCisJaWYgKGxpa2VseShyZXEgIT0gMCkpCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCisJaWYgKGxpa2VseSghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCSYmIGxpa2VseShlcC0+bnVtICE9IDApCisJCQkmJiAhZXAtPmRtYQorCQkJJiYgIShkZXYtPmludF9lbmFibGUgJiBJTlRfRVB4REFUQVNFVCAoZXAtPm51bSkpKQorCQlwaW9faXJxX2VuYWJsZShkZXYsIGRldi0+cmVncywgZXAtPm51bSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIGRlcXVldWUgQUxMIHJlcXVlc3RzICovCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBnb2t1X2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisKKwllcC0+c3RvcHBlZCA9IDE7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJldHVybjsKKwlpZiAoZXAtPmRtYSkKKwkJYWJvcnRfZG1hKGVwLCBzdGF0dXMpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCBxdWV1ZSk7CisJCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKKwl9Cit9CisKKy8qIGRlcXVldWUgSlVTVCBPTkUgcmVxdWVzdCAqLworc3RhdGljIGludCBnb2t1X2RlcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBnb2t1X2VwCQkqZXA7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCWlmICghX2VwIHx8ICFfcmVxIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCS8qIHdlIGNhbid0IHRvdWNoIChkbWEpIHJlZ2lzdGVycyB3aGVuIHN1c3BlbmRlZCAqLworCWlmIChkZXYtPmVwMHN0YXRlID09IEVQMF9TVVNQRU5EKQorCQlyZXR1cm4gLUVCVVNZOworCisJVkRCRyhkZXYsICIlcyAlcyAlcyAlcyAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUsCisJCWVwLT5pc19pbiA/ICJJTiIgOiAiT1VUIiwKKwkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsCisJCV9yZXEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZXAtPmRtYSAmJiBlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJYWJvcnRfZG1hKGVwLCAtRUNPTk5SRVNFVCk7CisJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQlkbWFfYWR2YW5jZShkZXYsIGVwKTsKKwl9IGVsc2UgaWYgKCFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkKKwkJZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJZWxzZQorCQlyZXEgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcSA/IDAgOiAtRU9QTk9UU1VQUDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZ29rdV9jbGVhcl9oYWx0KHN0cnVjdCBnb2t1X2VwICplcCkKK3sKKwkvLyBhc3NlcnQgKGVwLT5udW0gIT0wKQorCVZEQkcoZXAtPmRldiwgIiVzIGNsZWFyIGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKKwljb21tYW5kKGVwLT5kZXYtPnJlZ3MsIENPTU1BTkRfU0VUREFUQTAsIGVwLT5udW0pOworCWNvbW1hbmQoZXAtPmRldi0+cmVncywgQ09NTUFORF9TVEFMTF9DTEVBUiwgZXAtPm51bSk7CisJaWYgKGVwLT5zdG9wcGVkKSB7CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJaWYgKGVwLT5kbWEpIHsKKwkJCXN0cnVjdCBnb2t1X3JlcXVlc3QJKnJlcTsKKworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJcmV0dXJuOworCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwKKwkJCQkJCXF1ZXVlKTsKKwkJCSh2b2lkKSBzdGFydF9kbWEoZXAsIHJlcSk7CisJCX0gZWxzZQorCQkJcGlvX2FkdmFuY2UoZXApOworCX0KK30KKworc3RhdGljIGludCBnb2t1X3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBnb2t1X2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKworCWlmICghX2VwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCisJaWYgKGVwLT5udW0gPT0gMCkgeworCQlpZiAodmFsdWUpIHsKKwkJCWVwLT5kZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCQkJZXAtPmRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBkb24ndCBjaGFuZ2UgRVB4U1RBVFVTX0VQX0lOVkFMSUQgdG8gUkVBRFkgKi8KKwl9IGVsc2UgaWYgKCFlcC0+ZGVzYykgeworCQlEQkcoZXAtPmRldiwgIiVzICVzIGluYWN0aXZlP1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZQorCQkJLyogZGF0YSBpbiAoZWl0aGVyKSBwYWNrZXQgYnVmZmVyPyAqLworCQkJJiYgKHJlYWRsKCZlcC0+ZGV2LT5yZWdzLT5EYXRhU2V0KQorCQkJCQkmIERBVEFTRVRfQUIoZXAtPm51bSkpKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKCF2YWx1ZSkKKwkJZ29rdV9jbGVhcl9oYWx0KGVwKTsKKwllbHNlIHsKKwkJZXAtPnN0b3BwZWQgPSAxOworCQlWREJHKGVwLT5kZXYsICIlcyBzZXQgaGFsdFxuIiwgZXAtPmVwLm5hbWUpOworCQljb21tYW5kKGVwLT5kZXYtPnJlZ3MsIENPTU1BTkRfU1RBTEwsIGVwLT5udW0pOworCQlyZWFkbChlcC0+cmVnX3N0YXR1cyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGdva3VfZmlmb19zdGF0dXMoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBnb2t1X2VwCQkJKmVwOworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3M7CisJdTMyCQkJCXNpemU7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCisJLyogc2l6ZSBpcyBvbmx5IHJlcG9ydGVkIHNhbmVseSBmb3IgT1VUICovCisJaWYgKGVwLT5pc19pbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogaWdub3JlcyAxNi1ieXRlIGRtYSBidWZmZXI7IFNpemVIID09IDAgKi8KKwlyZWdzID0gZXAtPmRldi0+cmVnczsKKwlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQVtlcC0+bnVtXSkgJiBEQVRBU0laRTsKKwlzaXplICs9IHJlYWRsKCZyZWdzLT5FUHhTaXplTEJbZXAtPm51bV0pICYgREFUQVNJWkU7CisJVkRCRyhlcC0+ZGV2LCAiJXMgJXMgJXVcbiIsIF9fRlVOQ1RJT05fXywgZXAtPmVwLm5hbWUsIHNpemUpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBnb2t1X2ZpZm9fZmx1c2goc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBnb2t1X2VwCQkJKmVwOworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3M7CisJdTMyCQkJCXNpemU7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuOworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwlWREJHKGVwLT5kZXYsICIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisKKwkvKiBkb24ndCBjaGFuZ2UgRVB4U1RBVFVTX0VQX0lOVkFMSUQgdG8gUkVBRFkgKi8KKwlpZiAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkgeworCQlEQkcoZXAtPmRldiwgIiVzICVzIGluYWN0aXZlP1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlyZWdzID0gZXAtPmRldi0+cmVnczsKKwlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQVtlcC0+bnVtXSk7CisJc2l6ZSAmPSBEQVRBU0laRTsKKworCS8qIE5vbi1kZXNpcmFibGUgYmVoYXZpb3I6ICBGSUZPX0NMRUFSIGFsc28gY2xlYXJzIHRoZQorCSAqIGVuZHBvaW50IGhhbHQgZmVhdHVyZS4gIEZvciBPVVQsIHdlIF9jb3VsZF8ganVzdCByZWFkCisJICogdGhlIGJ5dGVzIG91dCAoUElPLCBpZiAhZXAtPmRtYSk7IGZvciBpbiwgbm8gY2hvaWNlLgorCSAqLworCWlmIChzaXplKQorCQljb21tYW5kKHJlZ3MsIENPTU1BTkRfRklGT19DTEVBUiwgZXAtPm51bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBnb2t1X2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IGdva3VfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gZ29rdV9lcF9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBnb2t1X2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IGdva3VfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IGdva3VfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IGdva3VfZnJlZV9idWZmZXIsCisKKwkucXVldWUJCT0gZ29rdV9xdWV1ZSwKKwkuZGVxdWV1ZQk9IGdva3VfZGVxdWV1ZSwKKworCS5zZXRfaGFsdAk9IGdva3Vfc2V0X2hhbHQsCisJLmZpZm9fc3RhdHVzCT0gZ29rdV9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaAk9IGdva3VfZmlmb19mbHVzaCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZ29rdV9nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGdva3Vfb3BzID0geworCS5nZXRfZnJhbWUJPSBnb2t1X2dldF9mcmFtZSwKKwkvLyBubyByZW1vdGUgd2FrZXVwCisJLy8gbm90IHNlbGZwb3dlcmVkCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIGNoYXIgKmRtYXN0cih2b2lkKQoreworCWlmICh1c2VfZG1hID09IDApCisJCXJldHVybiAiKGRtYSBkaXNhYmxlZCkiOworCWVsc2UgaWYgKHVzZV9kbWEgPT0gMikKKwkJcmV0dXJuICIoZG1hIElOIGFuZCBPVVQpIjsKKwllbHNlCisJCXJldHVybiAiKGRtYSBJTikiOworfQorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19ub2RlX25hbWUgW10gPSAiZHJpdmVyL3VkYyI7CisKKyNkZWZpbmUgRk9VUkJJVFMgIiVzJXMlcyVzIgorI2RlZmluZSBFSUdIVEJJVFMgRk9VUkJJVFMgRk9VUkJJVFMKKworc3RhdGljIHZvaWQKK2R1bXBfaW50bWFzayhjb25zdCBjaGFyICpsYWJlbCwgdTMyIG1hc2ssIGNoYXIgKipuZXh0LCB1bnNpZ25lZCAqc2l6ZSkKK3sKKwlpbnQgdDsKKworCS8qIGludF9zdGF0dXMgaXMgdGhlIHNhbWUgZm9ybWF0IC4uLiAqLworCXQgPSBzY25wcmludGYoKm5leHQsICpzaXplLAorCQkiJXMgJTA1WCA9IiBGT1VSQklUUyBFSUdIVEJJVFMgRUlHSFRCSVRTICJcbiIsCisJCWxhYmVsLCBtYXNrLAorCQkobWFzayAmIElOVF9QV1JERVRFQ1QpID8gIiBwb3dlciIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfU1lTRVJST1IpID8gIiBzeXMiIDogIiIsCisJCShtYXNrICYgSU5UX01TVFJERU5EKSA/ICIgaW4tZG1hIiA6ICIiLAorCQkobWFzayAmIElOVF9NU1RXUlRNT1VUKSA/ICIgd3J0bW8iIDogIiIsCisKKwkJKG1hc2sgJiBJTlRfTVNUV1JFTkQpID8gIiBvdXQtZG1hIiA6ICIiLAorCQkobWFzayAmIElOVF9NU1RXUlNFVCkgPyAiIHdyc2V0IiA6ICIiLAorCQkobWFzayAmIElOVF9FUlIpID8gIiBlcnIiIDogIiIsCisJCShtYXNrICYgSU5UX1NPRikgPyAiIHNvZiIgOiAiIiwKKworCQkobWFzayAmIElOVF9FUDNOQUspID8gIiBlcDNuYWsiIDogIiIsCisJCShtYXNrICYgSU5UX0VQMk5BSykgPyAiIGVwMm5hayIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfRVAxTkFLKSA/ICIgZXAxbmFrIiA6ICIiLAorCQkobWFzayAmIElOVF9FUDNEQVRBU0VUKSA/ICIgZXAzIiA6ICIiLAorCisJCShtYXNrICYgSU5UX0VQMkRBVEFTRVQpID8gIiBlcDIiIDogIiIsCisJCShtYXNrICYgSU5UX0VQMURBVEFTRVQpID8gIiBlcDEiIDogIiIsCisJCShtYXNrICYgSU5UX1NUQVRVU05BSykgPyAiIGVwMHNuYWsiIDogIiIsCisJCShtYXNrICYgSU5UX1NUQVRVUykgPyAiIGVwMHN0YXR1cyIgOiAiIiwKKworCQkobWFzayAmIElOVF9TRVRVUCkgPyAiIHNldHVwIiA6ICIiLAorCQkobWFzayAmIElOVF9FTkRQT0lOVDApID8gIiBlcDAiIDogIiIsCisJCShtYXNrICYgSU5UX1VTQlJFU0VUKSA/ICIgcmVzZXQiIDogIiIsCisJCShtYXNrICYgSU5UX1NVU1BFTkQpID8gIiBzdXNwZW5kIiA6ICIiKTsKKwkqc2l6ZSAtPSB0OworCSpuZXh0ICs9IHQ7Cit9CisKKworc3RhdGljIGludAordWRjX3Byb2NfcmVhZChjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCWludCAqZW9mLCB2b2lkICpfZGV2KQoreworCWNoYXIJCQkJKmJ1ZiA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZ29rdV91ZGMJCQkqZGV2ID0gX2RldjsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZGV2LT5yZWdzOworCWNoYXIJCQkJKm5leHQgPSBidWY7CisJdW5zaWduZWQJCQlzaXplID0gY291bnQ7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCWludAkJCQlpLCB0LCBpc191c2JfY29ubmVjdGVkOworCXUzMgkJCQl0bXA7CisKKwlpZiAob2ZmICE9IDApCisJCXJldHVybiAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXRtcCA9IHJlYWRsKCZyZWdzLT5wb3dlcl9kZXRlY3QpOworCWlzX3VzYl9jb25uZWN0ZWQgPSB0bXAgJiBQV19ERVRFQ1Q7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkiJXMgLSAlc1xuIgorCQkiJXMgdmVyc2lvbjogJXMgJXNcbiIKKwkJIkdhZGdldCBkcml2ZXI6ICVzXG4iCisJCSJIb3N0ICVzLCAlc1xuIgorCQkiXG4iLAorCQlwY2lfbmFtZShkZXYtPnBkZXYpLCBkcml2ZXJfZGVzYywKKwkJZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OLCBkbWFzdHIoKSwKKwkJZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiKG5vbmUpIiwKKwkJaXNfdXNiX2Nvbm5lY3RlZAorCQkJPyAoKHRtcCAmIFBXX1BVTExVUCkgPyAiZnVsbCBzcGVlZCIgOiAicG93ZXJlZCIpCisJCQk6ICJkaXNjb25uZWN0ZWQiLAorCQkoe2NoYXIgKnRtcDsKKwkJc3dpdGNoKGRldi0+ZXAwc3RhdGUpeworCQljYXNlIEVQMF9ESVNDT05ORUNUOgl0bXAgPSAiZXAwX2Rpc2Nvbm5lY3QiOyBicmVhazsKKwkJY2FzZSBFUDBfSURMRToJCXRtcCA9ICJlcDBfaWRsZSI7IGJyZWFrOworCQljYXNlIEVQMF9JTjoJCXRtcCA9ICJlcDBfaW4iOyBicmVhazsKKwkJY2FzZSBFUDBfT1VUOgkJdG1wID0gImVwMF9vdXQiOyBicmVhazsKKwkJY2FzZSBFUDBfU1RBVFVTOgl0bXAgPSAiZXAwX3N0YXR1cyI7IGJyZWFrOworCQljYXNlIEVQMF9TVEFMTDoJCXRtcCA9ICJlcDBfc3RhbGwiOyBicmVhazsKKwkJY2FzZSBFUDBfU1VTUEVORDoJdG1wID0gImVwMF9zdXNwZW5kIjsgYnJlYWs7CisJCWRlZmF1bHQ6CQl0bXAgPSAiZXAwXz8iOyBicmVhazsKKwkJfSB0bXA7IH0pCisJCSk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCWR1bXBfaW50bWFzaygiaW50X3N0YXR1cyIsIHJlYWRsKCZyZWdzLT5pbnRfc3RhdHVzKSwgJm5leHQsICZzaXplKTsKKwlkdW1wX2ludG1hc2soImludF9lbmFibGUiLCByZWFkbCgmcmVncy0+aW50X2VuYWJsZSksICZuZXh0LCAmc2l6ZSk7CisKKwlpZiAoIWlzX3VzYl9jb25uZWN0ZWQgfHwgIWRldi0+ZHJpdmVyIHx8ICh0bXAgJiBQV19QVUxMVVApID09IDApCisJCWdvdG8gZG9uZTsKKworCS8qIHJlZ2lzdGVycyBmb3IgKGFjdGl2ZSkgZGV2aWNlIGFuZCBlcDAgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJcbmlycXMgJWx1XG5kYXRhc2V0ICUwMnggIgorCQkJInNpbmdsZS5iY3MgJTAyeC4lMDJ4IHN0YXRlICV4IGFkZHIgJXVcbiIsCisJCQlkZXYtPmlycXMsIHJlYWRsKCZyZWdzLT5EYXRhU2V0KSwKKwkJCXJlYWRsKCZyZWdzLT5FUHhTaW5nbGUpLCByZWFkbCgmcmVncy0+RVB4QkNTKSwKKwkJCXJlYWRsKCZyZWdzLT5Vc2JTdGF0ZSksCisJCQlyZWFkbCgmcmVncy0+YWRkcmVzcykpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwl0bXAgPSByZWFkbCgmcmVncy0+ZG1hX21hc3Rlcik7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkiZG1hICUwM1ggPSIgRUlHSFRCSVRTICIlcyAlc1xuIiwgdG1wLAorCQkodG1wICYgTVNUX0VPUEJfRElTKSA/ICIgZW9wYi0iIDogIiIsCisJCSh0bXAgJiBNU1RfRU9QQl9FTkEpID8gIiBlb3BiKyIgOiAiIiwKKwkJKHRtcCAmIE1TVF9USU1FT1VUX0RJUykgPyAiIHRtby0iIDogIiIsCisJCSh0bXAgJiBNU1RfVElNRU9VVF9FTkEpID8gIiB0bW8rIiA6ICIiLAorCisJCSh0bXAgJiBNU1RfUkRfRU9QQikgPyAiIGVvcGIiIDogIiIsCisJCSh0bXAgJiBNU1RfUkRfUkVTRVQpID8gIiBpbl9yZXNldCIgOiAiIiwKKwkJKHRtcCAmIE1TVF9XUl9SRVNFVCkgPyAiIG91dF9yZXNldCIgOiAiIiwKKwkJKHRtcCAmIE1TVF9SRF9FTkEpID8gIiBJTiIgOiAiIiwKKworCQkodG1wICYgTVNUX1dSX0VOQSkgPyAiIE9VVCIgOiAiIiwKKwkJKHRtcCAmIE1TVF9DT05ORUNUSU9OKQorCQkJPyAiZXAxaW4vZXAyb3V0IgorCQkJOiAiZXAxb3V0L2VwMmluIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCS8qIGR1bXAgZW5kcG9pbnQgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzdHJ1Y3QgZ29rdV9lcAkJKmVwID0gJmRldi0+ZXAgW2ldOworCQlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisJCWludAkJCXQ7CisKKwkJaWYgKGkgJiYgIWVwLT5kZXNjKQorCQkJY29udGludWU7CisKKwkJdG1wID0gcmVhZGwoZXAtPnJlZ19zdGF0dXMpOworCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkiJXMgJXMgbWF4ICV1ICVzLCBpcnFzICVsdSwgIgorCQkJInN0YXR1cyAlMDJ4ICglcykgIiBGT1VSQklUUyAiXG4iLAorCQkJZXAtPmVwLm5hbWUsCisJCQllcC0+aXNfaW4gPyAiaW4iIDogIm91dCIsCisJCQllcC0+ZXAubWF4cGFja2V0LAorCQkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsCisJCQllcC0+aXJxcywKKwkJCXRtcCwgKHsgY2hhciAqczsKKwkJCXN3aXRjaCAodG1wICYgRVB4U1RBVFVTX0VQX01BU0spIHsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX1JFQURZOgorCQkJCXMgPSAicmVhZHkiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX0RBVEFJTjoKKwkJCQlzID0gInBhY2tldCI7IGJyZWFrOworCQkJY2FzZSBFUHhTVEFUVVNfRVBfRlVMTDoKKwkJCQlzID0gImZ1bGwiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX1RYX0VSUjoJLy8gaG9zdCB3aWxsIHJldHJ5CisJCQkJcyA9ICJ0eF9lcnIiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX1JYX0VSUjoKKwkJCQlzID0gInJ4X2VyciI7IGJyZWFrOworCQkJY2FzZSBFUHhTVEFUVVNfRVBfQlVTWToJCS8qIGVwMCBvbmx5ICovCisJCQkJcyA9ICJidXN5IjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9TVEFMTDoKKwkJCQlzID0gInN0YWxsIjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9JTlZBTElEOgkvLyB0aGVzZSAiY2FuJ3QgaGFwcGVuIgorCQkJCXMgPSAiaW52YWxpZCI7IGJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzID0gIj8iOyBicmVhazsKKwkJCX07IHM7IH0pLAorCQkJKHRtcCAmIEVQeFNUQVRVU19UT0dHTEUpID8gImRhdGExIiA6ICJkYXRhMCIsCisJCQkodG1wICYgRVB4U1RBVFVTX1NVU1BFTkQpID8gIiBzdXNwZW5kIiA6ICIiLAorCQkJKHRtcCAmIEVQeFNUQVRVU19GSUZPX0RJU0FCTEUpID8gIiBkaXNhYmxlIiA6ICIiLAorCQkJKHRtcCAmIEVQeFNUQVRVU19TVEFHRV9FUlJPUikgPyAiIGVwMHN0YXQiIDogIiIKKwkJCSk7CisJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQlnb3RvIGRvbmU7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJcdChub3RoaW5nIHF1ZXVlZClcbiIpOworCQkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCQlnb3RvIGRvbmU7CisJCQlzaXplIC09IHQ7CisJCQluZXh0ICs9IHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJCWlmIChlcC0+ZG1hICYmIHJlcS0+cXVldWUucHJldiA9PSAmZXAtPnF1ZXVlKSB7CisJCQkJaWYgKGkgPT0gVURDX01TVFJEX0VORFBPSU5UKQorCQkJCQl0bXAgPSByZWFkbCgmcmVncy0+aW5fZG1hX2N1cnJlbnQpOworCQkJCWVsc2UKKwkJCQkJdG1wID0gcmVhZGwoJnJlZ3MtPm91dF9kbWFfY3VycmVudCk7CisJCQkJdG1wIC09IHJlcS0+cmVxLmRtYTsKKwkJCQl0bXArKzsKKwkJCX0gZWxzZQorCQkJCXRtcCA9IHJlcS0+cmVxLmFjdHVhbDsKKworCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJCSJcdHJlcSAlcCBsZW4gJXUvJXUgYnVmICVwXG4iLAorCQkJCSZyZXEtPnJlcSwgdG1wLCByZXEtPnJlcS5sZW5ndGgsCisJCQkJcmVxLT5yZXEuYnVmKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQl9CisJfQorCitkb25lOgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkqZW9mID0gMTsKKwlyZXR1cm4gY291bnQgLSBzaXplOworfQorCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdWRjX3JlaW5pdCAoc3RydWN0IGdva3VfdWRjICpkZXYpCit7CisJc3RhdGljIGNoYXIgKm5hbWVzIFtdID0geyAiZXAwIiwgImVwMS1idWxrIiwgImVwMi1idWxrIiwgImVwMy1idWxrIiB9OworCQorCXVuc2lnbmVkIGk7CisKKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWRldi0+Z2FkZ2V0LmVwMCA9ICZkZXYtPmVwIFswXS5lcDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCWRldi0+ZXAwc3RhdGUgPSBFUDBfRElTQ09OTkVDVDsKKwlkZXYtPmlycXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzdHJ1Y3QgZ29rdV9lcAkqZXAgPSAmZGV2LT5lcFtpXTsKKworCQllcC0+bnVtID0gaTsKKwkJZXAtPmVwLm5hbWUgPSBuYW1lc1tpXTsKKwkJZXAtPnJlZ19maWZvID0gJmRldi0+cmVncy0+ZXBfZmlmbyBbaV07CisJCWVwLT5yZWdfc3RhdHVzID0gJmRldi0+cmVncy0+ZXBfc3RhdHVzIFtpXTsKKwkJZXAtPnJlZ19tb2RlID0gJmRldi0+cmVncy0+ZXBfbW9kZVtpXTsKKworCQllcC0+ZXAub3BzID0gJmdva3VfZXBfb3BzOworCQlsaXN0X2FkZF90YWlsICgmZXAtPmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwkJZXAtPmRldiA9IGRldjsKKwkJSU5JVF9MSVNUX0hFQUQgKCZlcC0+cXVldWUpOworCisJCWVwX3Jlc2V0KE5VTEwsIGVwKTsKKwl9CisKKwlkZXYtPmVwWzBdLnJlZ19tb2RlID0gTlVMTDsKKwlkZXYtPmVwWzBdLmVwLm1heHBhY2tldCA9IE1BWF9FUDBfU0laRTsKKwlsaXN0X2RlbF9pbml0ICgmZGV2LT5lcFswXS5lcC5lcF9saXN0KTsKK30KKworc3RhdGljIHZvaWQgdWRjX3Jlc2V0KHN0cnVjdCBnb2t1X3VkYyAqZGV2KQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBkZXYtPnJlZ3M7CisKKwl3cml0ZWwoMCwgJnJlZ3MtPnBvd2VyX2RldGVjdCk7CisJd3JpdGVsKDAsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwlyZWFkbCgmcmVncy0+aW50X2VuYWJsZSk7CisJZGV2LT5pbnRfZW5hYmxlID0gMDsKKworCS8qIGRlYXNzZXJ0IHJlc2V0LCBsZWF2ZSBVU0IgRCsgYXQgaGktWiAobm8gcHVsbHVwKQorCSAqIGRvbid0IGxldCBJTlRfUFdSREVURUNUIHNlcXVlbmNlIGJlZ2luCisJICovCisJdWRlbGF5KDI1MCk7CisJd3JpdGVsKFBXX1JFU0VUQiwgJnJlZ3MtPnBvd2VyX2RldGVjdCk7CisJcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBlcDBfc3RhcnQoc3RydWN0IGdva3VfdWRjICpkZXYpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGRldi0+cmVnczsKKwl1bnNpZ25lZAkJCWk7CisKKwlWREJHKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJdWRjX3Jlc2V0KGRldik7CisJdWRjX3JlaW5pdCAoZGV2KTsKKwkvL3dyaXRlbChNU1RfRU9QQl9FTkEgfCBNU1RfVElNRU9VVF9FTkEsICZyZWdzLT5kbWFfbWFzdGVyKTsKKworCS8qIGh3IGhhbmRsZXMgc2V0X2FkZHJlc3MsIHNldF9mZWF0dXJlLCBnZXRfc3RhdHVzOyBtYXliZSBtb3JlICovCisJd3JpdGVsKCAgIEdfUkVRTU9ERV9TRVRfSU5URiB8IEdfUkVRTU9ERV9HRVRfSU5URgorCQl8IEdfUkVRTU9ERV9TRVRfQ09ORiB8IEdfUkVRTU9ERV9HRVRfQ09ORgorCQl8IEdfUkVRTU9ERV9HRVRfREVTQworCQl8IEdfUkVRTU9ERV9DTEVBUl9GRUFUCisJCSwgJnJlZ3MtPnJlcW1vZGUpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJZGV2LT5lcFtpXS5pcnFzID0gMDsKKworCS8qIGNhbid0IG1vZGlmeSBkZXNjcmlwdG9ycyBhZnRlciB3cml0aW5nIFVzYlJlYWR5ICovCisJZm9yIChpID0gMDsgaSA8IERFU0NfTEVOOyBpKyspCisJCXdyaXRlbCgwLCAmcmVncy0+ZGVzY3JpcHRvcnNbaV0pOworCXdyaXRlbCgwLCAmcmVncy0+VXNiUmVhZHkpOworCisJLyogZXhwZWN0IGVwMCByZXF1ZXN0cyB3aGVuIHRoZSBob3N0IGRyb3BzIHJlc2V0ICovCisJd3JpdGVsKFBXX1JFU0VUQiB8IFBXX1BVTExVUCwgJnJlZ3MtPnBvd2VyX2RldGVjdCk7CisJZGV2LT5pbnRfZW5hYmxlID0gSU5UX0RFVldJREUgfCBJTlRfRVAwOworCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZkZXYtPnJlZ3MtPmludF9lbmFibGUpOworCXJlYWRsKCZyZWdzLT5pbnRfZW5hYmxlKTsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCWRldi0+ZXAwc3RhdGUgPSBFUDBfSURMRTsKK30KKworc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgZ29rdV91ZGMgKmRldikKK3sKKwkvKiBzdGFydCBlbnVtZXJhdGlvbiBub3csIG9yIGFmdGVyIHBvd2VyIGRldGVjdCBpcnEgKi8KKwlpZiAocmVhZGwoJmRldi0+cmVncy0+cG93ZXJfZGV0ZWN0KSAmIFBXX0RFVEVDVCkKKwkJZXAwX3N0YXJ0KGRldik7CisJZWxzZSB7CisJCURCRyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2LT5pbnRfZW5hYmxlID0gSU5UX1BXUkRFVEVDVDsKKwkJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJmRldi0+cmVncy0+aW50X2VuYWJsZSk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBrZWVwaW5nIGl0IHNpbXBsZToKKyAqIC0gb25lIGJ1cyBkcml2ZXIsIGluaXR0ZWQgZmlyc3Q7CisgKiAtIG9uZSBmdW5jdGlvbiBkcml2ZXIsIGluaXR0ZWQgc2Vjb25kCisgKi8KKworc3RhdGljIHN0cnVjdCBnb2t1X3VkYwkqdGhlX2NvbnRyb2xsZXI7CisKKy8qIHdoZW4gYSBkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGl0IHdpbGwgcmVjZWl2ZQorICogY29udHJvbCByZXF1ZXN0cyBpbmNsdWRpbmcgc2V0X2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggZW5hYmxlcworICogbm9uLWNvbnRyb2wgcmVxdWVzdHMuICB0aGVuIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYQorICogZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIHRoZW4gYSBob3N0IG1heSBjb25uZWN0IGFnYWluLCBvcgorICogdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KKyAqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJaW50CQkJcmV0dmFsOworCisJaWYgKCFkcml2ZXIKKwkJCXx8IGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwKKwkJCXx8ICFkcml2ZXItPmJpbmQKKwkJCXx8ICFkcml2ZXItPnVuYmluZAorCQkJfHwgIWRyaXZlci0+ZGlzY29ubmVjdAorCQkJfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgKi8KKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOworCWRldi0+ZHJpdmVyID0gZHJpdmVyOworCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlEQkcoZGV2LCAiYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLAorCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCWRldi0+ZHJpdmVyID0gTlVMTDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogdGhlbiBlbmFibGUgaG9zdCBkZXRlY3Rpb24gYW5kIGVwMDsgYW5kIHdlJ3JlIHJlYWR5CisJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KKwkgKi8KKwl1ZGNfZW5hYmxlKGRldik7CisKKwlEQkcoZGV2LCAicmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisKK3N0YXRpYyB2b2lkCitzdG9wX2FjdGl2aXR5KHN0cnVjdCBnb2t1X3VkYyAqZGV2LCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwl1bnNpZ25lZAlpOworCisJREJHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJZHJpdmVyID0gTlVMTDsKKworCS8qIGRpc2Nvbm5lY3QgZ2FkZ2V0IGRyaXZlciBhZnRlciBxdWllc2NlaW5nIGh3IGFuZCB0aGUgZHJpdmVyICovCisJdWRjX3Jlc2V0IChkZXYpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCW51a2UoJmRldi0+ZXAgW2ldLCAtRVNIVVRET1dOKTsKKwlpZiAoZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCX0KKworCWlmIChkZXYtPmRyaXZlcikKKwkJdWRjX2VuYWJsZShkZXYpOworfQorCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldiA9IHRoZV9jb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisJc3RvcF9hY3Rpdml0eShkZXYsIGRyaXZlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOworCisJREJHKGRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGVwMF9zZXR1cChzdHJ1Y3QgZ29rdV91ZGMgKmRldikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZGV2LT5yZWdzOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJCWN0cmw7CisJaW50CQkJCXRtcDsKKworCS8qIHJlYWQgU0VUVVAgcGFja2V0IGFuZCBlbnRlciBEQVRBIHN0YWdlICovCisJY3RybC5iUmVxdWVzdFR5cGUgPSByZWFkbCgmcmVncy0+YlJlcXVlc3RUeXBlKTsKKwljdHJsLmJSZXF1ZXN0ID0gcmVhZGwoJnJlZ3MtPmJSZXF1ZXN0KTsKKwljdHJsLndWYWx1ZSAgPSAocmVhZGwoJnJlZ3MtPndWYWx1ZUgpICA8PCA4KSB8IHJlYWRsKCZyZWdzLT53VmFsdWVMKTsKKwljdHJsLndJbmRleCAgPSAocmVhZGwoJnJlZ3MtPndJbmRleEgpICA8PCA4KSB8IHJlYWRsKCZyZWdzLT53SW5kZXhMKTsKKwljdHJsLndMZW5ndGggPSAocmVhZGwoJnJlZ3MtPndMZW5ndGhIKSA8PCA4KSB8IHJlYWRsKCZyZWdzLT53TGVuZ3RoTCk7CisJd3JpdGVsKDAsICZyZWdzLT5TZXR1cFJlY3YpOworCisJbnVrZSgmZGV2LT5lcFswXSwgMCk7CisJZGV2LT5lcFswXS5zdG9wcGVkID0gMDsKKwlpZiAobGlrZWx5KGN0cmwuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpIHsKKwkJZGV2LT5lcFswXS5pc19pbiA9IDE7CisJCWRldi0+ZXAwc3RhdGUgPSBFUDBfSU47CisJCS8qIGRldGVjdCBlYXJseSBzdGF0dXMgc3RhZ2VzICovCisJCXdyaXRlbChJQ09OVFJPTF9TVEFUVVNOQUssICZkZXYtPnJlZ3MtPkludENvbnRyb2wpOworCX0gZWxzZSB7CisJCWRldi0+ZXBbMF0uaXNfaW4gPSAwOworCQlkZXYtPmVwMHN0YXRlID0gRVAwX09VVDsKKworCQkvKiBOT1RFOiAgQ0xFQVJfRkVBVFVSRSBpcyBkb25lIGluIHNvZnR3YXJlIHNvIHRoYXQgd2UgY2FuCisJCSAqIHN5bmNocm9uaXplIHRyYW5zZmVyIHJlc3RhcnRzIGFmdGVyIGJ1bGsgSU4gc3RhbGxzLiAgZGF0YQorCQkgKiB3b24ndCBldmVuIGVudGVyIHRoZSBmaWZvIHVudGlsIHRoZSBoYWx0IGlzIGNsZWFyZWQuCisJCSAqLworCQlzd2l0Y2ggKGN0cmwuYlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCQlzd2l0Y2ggKGN0cmwuYlJlcXVlc3RUeXBlKSB7CisJCQljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKKwkJCQl0bXAgPSBjdHJsLndJbmRleCAmIDB4MGY7CisJCQkJLyogYWN0aXZlIGVuZHBvaW50ICovCisJCQkJaWYgKHRtcCA+IDMgfHwgKCFkZXYtPmVwW3RtcF0uZGVzYyAmJiB0bXAgIT0gMCkpCisJCQkJCWdvdG8gc3RhbGw7CisJCQkJaWYgKGN0cmwud0luZGV4ICYgVVNCX0RJUl9JTikgeworCQkJCQlpZiAoIWRldi0+ZXBbdG1wXS5pc19pbikKKwkJCQkJCWdvdG8gc3RhbGw7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGRldi0+ZXBbdG1wXS5pc19pbikKKwkJCQkJCWdvdG8gc3RhbGw7CisJCQkJfQorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVCkKKwkJCQkJZ290byBzdGFsbDsKKwkJCQlpZiAodG1wKQorCQkJCQlnb2t1X2NsZWFyX2hhbHQoJmRldi0+ZXBbdG1wXSk7CitzdWNjZWVkOgorCQkJCS8qIHN0YXJ0IGVwMG91dCBzdGF0dXMgc3RhZ2UgKi8KKwkJCQl3cml0ZWwofigxPDwwKSwgJnJlZ3MtPkVPUCk7CisJCQkJZGV2LT5lcFswXS5zdG9wcGVkID0gMTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJCQlyZXR1cm47CisJCQljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CisJCQkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXA6IGFsd2F5cyBjbGVhciAqLworCQkJCWlmIChjdHJsLndWYWx1ZSAhPSAxKQorCQkJCQlnb3RvIHN0YWxsOworCQkJCVZEQkcoZGV2LCAiY2xlYXIgZGV2IHJlbW90ZSB3YWtldXBcbiIpOworCQkJCWdvdG8gc3VjY2VlZDsKKwkJCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKKwkJCQlnb3RvIHN0YWxsOworCQkJZGVmYXVsdDoJCS8qIHBhc3MgdG8gZ2FkZ2V0IGRyaXZlciAqLworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworI2lmZGVmIFVTQl9UUkFDRQorCVZEQkcoZGV2LCAiU0VUVVAgJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlMDR4XG4iLAorCQljdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC5iUmVxdWVzdCwKKwkJY3RybC53VmFsdWUsIGN0cmwud0luZGV4LCBjdHJsLndMZW5ndGgpOworI2VuZGlmCisKKwkvKiBodyB3YW50cyB0byBrbm93IHdoZW4gd2UncmUgY29uZmlndXJlZCAob3Igbm90KSAqLworCWRldi0+cmVxX2NvbmZpZyA9IChjdHJsLmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04KKwkJCQkmJiBjdHJsLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZGV2LT5yZXFfY29uZmlnKSkKKwkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IDApOworCisJLyogZGVsZWdhdGUgZXZlcnl0aGluZyB0byB0aGUgZ2FkZ2V0IGRyaXZlci4KKwkgKiBpdCBtYXkgcmVzcG9uZCBhZnRlciB0aGlzIGlycSBoYW5kbGVyIHJldHVybnMuCisJICovCisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCXRtcCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsICZjdHJsKTsKKwlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCWlmICh1bmxpa2VseSh0bXAgPCAwKSkgeworc3RhbGw6CisjaWZkZWYgVVNCX1RSQUNFCisJCVZEQkcoZGV2LCAicmVxICUwMnguJTAyeCBwcm90b2NvbCBTVEFMTDsgZXJyICVkXG4iLAorCQkJCWN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLmJSZXF1ZXN0LCB0bXApOworI2VuZGlmCisJCWNvbW1hbmQocmVncywgQ09NTUFORF9TVEFMTCwgMCk7CisJCWRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCWRldi0+ZXAwc3RhdGUgPSBFUDBfU1RBTEw7CisJfQorCisJLyogZXhwZWN0IGF0IGxlYXN0IG9uZSBkYXRhIG9yIHN0YXR1cyBzdGFnZSBpcnEgKi8KK30KKworI2RlZmluZSBBQ0soaXJxYml0KSB7IFwKKwkJc3RhdCAmPSB+aXJxYml0OyBcCisJCXdyaXRlbCh+aXJxYml0LCAmcmVncy0+aW50X3N0YXR1cyk7IFwKKwkJaGFuZGxlZCA9IDE7IFwKKwkJfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZ29rdV9pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IGdva3VfdWRjCQkJKmRldiA9IF9kZXY7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGRldi0+cmVnczsKKwlzdHJ1Y3QgZ29rdV9lcAkJCSplcDsKKwl1MzIJCQkJc3RhdCwgaGFuZGxlZCA9IDA7CisJdW5zaWduZWQJCQlpLCByZXNjYW5zID0gNTsKKworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKworcmVzY2FuOgorCXN0YXQgPSByZWFkbCgmcmVncy0+aW50X3N0YXR1cykgJiBkZXYtPmludF9lbmFibGU7CisgICAgICAgIGlmICghc3RhdCkKKwkJZ290byBkb25lOworCWRldi0+aXJxcysrOworCisJLyogZGV2aWNlLXdpZGUgaXJxcyAqLworCWlmICh1bmxpa2VseShzdGF0ICYgSU5UX0RFVldJREUpKSB7CisJCWlmIChzdGF0ICYgSU5UX1NZU0VSUk9SKSB7CisJCQlFUlJPUihkZXYsICJzeXN0ZW0gZXJyb3JcbiIpOworCQkJc3RvcF9hY3Rpdml0eShkZXYsIGRldi0+ZHJpdmVyKTsKKwkJCXN0YXQgPSAwOworCQkJaGFuZGxlZCA9IDE7CisJCQkvLyBGSVhNRSBoYXZlIGEgbmVhdGVyIHdheSB0byBwcmV2ZW50IHJlLWVudW1lcmF0aW9uCisJCQlkZXYtPmRyaXZlciA9IE5VTEw7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKHN0YXQgJiBJTlRfUFdSREVURUNUKSB7CisJCQl3cml0ZWwofnN0YXQsICZyZWdzLT5pbnRfc3RhdHVzKTsKKwkJCWlmIChyZWFkbCgmZGV2LT5yZWdzLT5wb3dlcl9kZXRlY3QpICYgUFdfREVURUNUKSB7CisJCQkJVkRCRyhkZXYsICJjb25uZWN0XG4iKTsKKwkJCQllcDBfc3RhcnQoZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJREJHKGRldiwgImRpc2Nvbm5lY3RcbiIpOworCQkJCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkKKwkJCQkJc3RvcF9hY3Rpdml0eShkZXYsIGRldi0+ZHJpdmVyKTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX0RJU0NPTk5FQ1Q7CisJCQkJZGV2LT5pbnRfZW5hYmxlID0gSU5UX0RFVldJREU7CisJCQkJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJmRldi0+cmVncy0+aW50X2VuYWJsZSk7CisJCQl9CisJCQlzdGF0ID0gMDsKKwkJCWhhbmRsZWQgPSAxOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChzdGF0ICYgSU5UX1NVU1BFTkQpIHsKKwkJCUFDSyhJTlRfU1VTUEVORCk7CisJCQlpZiAocmVhZGwoJnJlZ3MtPmVwX3N0YXR1c1swXSkgJiBFUHhTVEFUVVNfU1VTUEVORCkgeworCQkJCXN3aXRjaCAoZGV2LT5lcDBzdGF0ZSkgeworCQkJCWNhc2UgRVAwX0RJU0NPTk5FQ1Q6CisJCQkJY2FzZSBFUDBfU1VTUEVORDoKKwkJCQkJZ290byBwbV9uZXh0OworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlEQkcoZGV2LCAiVVNCIHN1c3BlbmRcbiIpOworCQkJCWRldi0+ZXAwc3RhdGUgPSBFUDBfU1VTUEVORDsKKwkJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkJCSYmIGRldi0+ZHJpdmVyCisJCQkJCQkmJiBkZXYtPmRyaXZlci0+c3VzcGVuZCkgeworCQkJCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRldi0+ZXAwc3RhdGUgIT0gRVAwX1NVU1BFTkQpIHsKKwkJCQkJREJHKGRldiwgImJvZ3VzIFVTQiByZXN1bWUgJWRcbiIsCisJCQkJCQlkZXYtPmVwMHN0YXRlKTsKKwkJCQkJZ290byBwbV9uZXh0OworCQkJCX0KKwkJCQlEQkcoZGV2LCAiVVNCIHJlc3VtZVxuIik7CisJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9JRExFOworCQkJCWlmIChkZXYtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgorCQkJCQkJJiYgZGV2LT5kcml2ZXIKKwkJCQkJCSYmIGRldi0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJCQkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJCQkJCWRldi0+ZHJpdmVyLT5yZXN1bWUoJmRldi0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCQkJCX0KKwkJCX0KKwkJfQorcG1fbmV4dDoKKwkJaWYgKHN0YXQgJiBJTlRfVVNCUkVTRVQpIHsJCS8qIGh1YiByZXNldCBkb25lICovCisJCQlBQ0soSU5UX1VTQlJFU0VUKTsKKwkJCUlORk8oZGV2LCAiVVNCIHJlc2V0IGRvbmUsIGdhZGdldCAlc1xuIiwKKwkJCQlkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQl9CisJCS8vIGFuZCBJTlRfRVJSIG9uIHNvbWUgZW5kcG9pbnQncyBjcmMvYml0c3R1ZmYvLi4uIHByb2JsZW0KKwl9CisKKwkvKiBwcm9ncmVzcyBlcDAgc2V0dXAsIGRhdGEsIG9yIHN0YXR1cyBzdGFnZXMuCisJICogbm8gdHJhbnNpdGlvbiB7RVAwX1NUQVRVUywgRVAwX1NUQUxMfSAtLT4gRVAwX0lETEU7IHNhdmVzIGlycXMKKwkgKi8KKwlpZiAoc3RhdCAmIElOVF9TRVRVUCkgeworCQlBQ0soSU5UX1NFVFVQKTsKKwkJZGV2LT5lcFswXS5pcnFzKys7CisJCWVwMF9zZXR1cChkZXYpOworCX0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfU1RBVFVTTkFLKSB7CisJCUFDSyhJTlRfU1RBVFVTTkFLfElOVF9FTkRQT0lOVDApOworCQlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfSU4pIHsKKwkJCWVwID0gJmRldi0+ZXBbMF07CisJCQllcC0+aXJxcysrOworCQkJbnVrZShlcCwgMCk7CisJCQl3cml0ZWwofigxPDwwKSwgJnJlZ3MtPkVPUCk7CisJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJfQorCX0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfRU5EUE9JTlQwKSB7CisJCUFDSyhJTlRfRU5EUE9JTlQwKTsKKwkJZXAgPSAmZGV2LT5lcFswXTsKKwkJZXAtPmlycXMrKzsKKwkJcGlvX2FkdmFuY2UoZXApOworICAgICAgICB9CisKKwkvKiBkbWEgY29tcGxldGlvbiAqLworICAgICAgICBpZiAoc3RhdCAmIElOVF9NU1RSREVORCkgewkvKiBJTiAqLworCQlBQ0soSU5UX01TVFJERU5EKTsKKwkJZXAgPSAmZGV2LT5lcFtVRENfTVNUUkRfRU5EUE9JTlRdOworCQllcC0+aXJxcysrOworCQlkbWFfYWR2YW5jZShkZXYsIGVwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdCAmIElOVF9NU1RXUkVORCkgewkvKiBPVVQgKi8KKwkJQUNLKElOVF9NU1RXUkVORCk7CisJCWVwID0gJmRldi0+ZXBbVURDX01TVFdSX0VORFBPSU5UXTsKKwkJZXAtPmlycXMrKzsKKwkJZG1hX2FkdmFuY2UoZGV2LCBlcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfTVNUV1JUTU9VVCkgewkvKiBPVVQgKi8KKwkJQUNLKElOVF9NU1RXUlRNT1VUKTsKKwkJZXAgPSAmZGV2LT5lcFtVRENfTVNUV1JfRU5EUE9JTlRdOworCQllcC0+aXJxcysrOworCQlFUlJPUihkZXYsICIlcyB3cml0ZSB0aW1lb3V0ID9cbiIsIGVwLT5lcC5uYW1lKTsKKwkJLy8gcmVzZXQgZG1hPyB0aGVuIGRtYV9hZHZhbmNlKCkKKyAgICAgICAgfQorCisJLyogcGlvICovCisJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgeworCQl1MzIJCXRtcCA9IElOVF9FUHhEQVRBU0VUKGkpOworCisJCWlmICghKHN0YXQgJiB0bXApKQorCQkJY29udGludWU7CisJCWVwID0gJmRldi0+ZXBbaV07CisJCXBpb19hZHZhbmNlKGVwKTsKKwkJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQkJcGlvX2lycV9kaXNhYmxlKGRldiwgcmVncywgaSk7CisJCXN0YXQgJj0gfnRtcDsKKwkJaGFuZGxlZCA9IDE7CisJCWVwLT5pcnFzKys7CisJfQorCisJaWYgKHJlc2NhbnMtLSkKKwkJZ290byByZXNjYW47CisKK2RvbmU6CisJKHZvaWQpcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCWlmIChzdGF0KQorCQlEQkcoZGV2LCAidW5oYW5kbGVkIGlycSBzdGF0dXM6ICUwNXggKCUwNXgsICUwNXgpXG4iLCBzdGF0LAorCQkJCXJlYWRsKCZyZWdzLT5pbnRfc3RhdHVzKSwgZGV2LT5pbnRfZW5hYmxlKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworI3VuZGVmIEFDSworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBnYWRnZXRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCisJa2ZyZWUoZGV2KTsKK30KKworLyogdGVhciBkb3duIHRoZSBiaW5kaW5nIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kIHRoZSBwY2kgZGV2aWNlICovCisKK3N0YXRpYyB2b2lkIGdva3VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBnb2t1X3VkYwkJKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCURCRyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkvKiBzdGFydCB3aXRoIHRoZSBkcml2ZXIgYWJvdmUgdXMgKi8KKwlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJLyogc2hvdWxkIGhhdmUgYmVlbiBkb25lIGFscmVhZHkgYnkgZHJpdmVyIG1vZGVsIGNvcmUgKi8KKwkJV0FSTihkZXYsICJwY2kgcmVtb3ZlLCBkcml2ZXIgJyVzJyBpcyBzdGlsbCByZWdpc3RlcmVkXG4iLAorCQkJCWRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoZGV2LT5kcml2ZXIpOworCX0KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19ub2RlX25hbWUsIE5VTEwpOworI2VuZGlmCisJaWYgKGRldi0+cmVncykKKwkJdWRjX3Jlc2V0KGRldik7CisJaWYgKGRldi0+Z290X2lycSkKKwkJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPnJlZ3MpCisJCWlvdW5tYXAoZGV2LT5yZWdzKTsKKwlpZiAoZGV2LT5nb3RfcmVnaW9uKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKSwKKwkJCQlwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSk7CisJaWYgKGRldi0+ZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmdhZGdldC5kZXYpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWRldi0+cmVncyA9IE5VTEw7CisJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCisJSU5GTyhkZXYsICJ1bmJpbmRcbiIpOworfQorCisvKiB3cmFwIHRoaXMgZHJpdmVyIGFyb3VuZCB0aGUgc3BlY2lmaWVkIHBjaSBkZXZpY2UsIGJ1dAorICogZG9uJ3QgcmVzcG9uZCBvdmVyIFVTQiB1bnRpbCBhIGdhZGdldCBkcml2ZXIgYmluZHMgdG8gdXMuCisgKi8KKworc3RhdGljIGludCBnb2t1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nCQlyZXNvdXJjZSwgbGVuOworCXZvaWQgX19pb21lbQkJKmJhc2UgPSBOVUxMOworCWludAkJCXJldHZhbDsKKwljaGFyCQkJYnVmIFs4XSwgKmJ1ZnA7CisKKwkvKiBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY29udHJvbGxlciBpbiBhIHN5c3RlbSwKKwkgKiB1c2JfZ2FkZ2V0X2RyaXZlcl97cmVnaXN0ZXIsdW5yZWdpc3Rlcn0oKSBtdXN0IGNoYW5nZS4KKwkgKi8KKwlpZiAodGhlX2NvbnRyb2xsZXIpIHsKKwkJV0FSTihkZXYsICJpZ25vcmluZyAlc1xuIiwgcGNpX25hbWUocGRldikpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoIXBkZXYtPmlycSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNoZWNrIFBDSSAlcyBJUlEgc2V0dXAhXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBhbGxvYywgYW5kIHN0YXJ0IGluaXQgKi8KKwlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCl7CisJCXByX2RlYnVnKCJlbm9tZW0gJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldChkZXYsIDAsIHNpemVvZiAqZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKKwlkZXYtPnBkZXYgPSBwZGV2OworCWRldi0+Z2FkZ2V0Lm9wcyA9ICZnb2t1X29wczsKKworCS8qIHRoZSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KKwlzdHJjcHkoZGV2LT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IHBkZXYtPmRldi5kbWFfbWFzazsKKwlkZXYtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOworCWRldi0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKKworCS8qIG5vdyBhbGwgdGhlIHBjaSBnb29kaWVzIC4uLiAqLworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCURCRyhkZXYsICJjYW4ndCBlbmFibGUsICVkXG4iLCByZXR2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+ZW5hYmxlZCA9IDE7CisKKwlyZXNvdXJjZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlc291cmNlLCBsZW4sIGRyaXZlcl9uYW1lKSkgeworCQlEQkcoZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPmdvdF9yZWdpb24gPSAxOworCisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXNvdXJjZSwgbGVuKTsKKwlpZiAoYmFzZSA9PSBOVUxMKSB7CisJCURCRyhkZXYsICJjYW4ndCBtYXAgbWVtb3J5XG4iKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPnJlZ3MgPSAoc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbSAqKSBiYXNlOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJSU5GTyhkZXYsICIlc1xuIiwgZHJpdmVyX2Rlc2MpOworCUlORk8oZGV2LCAidmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiICVzXG4iLCBkbWFzdHIoKSk7CisjaWZuZGVmIF9fc3BhcmNfXworCXNjbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlZCIsIHBkZXYtPmlycSk7CisJYnVmcCA9IGJ1ZjsKKyNlbHNlCisJYnVmcCA9IF9faXJxX2l0b2EocGRldi0+aXJxKTsKKyNlbmRpZgorCUlORk8oZGV2LCAiaXJxICVzLCBwY2kgbWVtICVwXG4iLCBidWZwLCBiYXNlKTsKKworCS8qIGluaXQgdG8ga25vd24gc3RhdGUsIHRoZW4gc2V0dXAgaXJxcyAqLworCXVkY19yZXNldChkZXYpOworCXVkY19yZWluaXQgKGRldik7CisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZ29rdV9pcnEsIFNBX1NISVJRLyp8U0FfU0FNUExFX1JBTkRPTSovLAorCQkJZHJpdmVyX25hbWUsIGRldikgIT0gMCkgeworCQlEQkcoZGV2LCAicmVxdWVzdCBpbnRlcnJ1cHQgJXMgZmFpbGVkXG4iLCBidWZwKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+Z290X2lycSA9IDE7CisJaWYgKHVzZV9kbWEpCisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkocHJvY19ub2RlX25hbWUsIDAsIE5VTEwsIHVkY19wcm9jX3JlYWQsIGRldik7CisjZW5kaWYKKworCS8qIGRvbmUgKi8KKwl0aGVfY29udHJvbGxlciA9IGRldjsKKwlkZXZpY2VfcmVnaXN0ZXIoJmRldi0+Z2FkZ2V0LmRldik7CisKKwlyZXR1cm4gMDsKKworZG9uZToKKwlpZiAoZGV2KQorCQlnb2t1X3JlbW92ZSAocGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgeworCS5jbGFzcyA9IAkoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSksCisJLmNsYXNzX21hc2sgPSAJfjAsCisJLnZlbmRvciA9CTB4MTAyZiwJCS8qIFRvc2hpYmEgKi8KKwkuZGV2aWNlID0JMHgwMTA3LAkJLyogdGhpcyBVREMgKi8KKwkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKKworfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcGNpX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnb2t1X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKworCS5wcm9iZSA9CWdva3VfcHJvYmUsCisJLnJlbW92ZSA9CWdva3VfcmVtb3ZlLAorCisJLyogRklYTUUgYWRkIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJmdva3VfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAoaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJmdva3VfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOGM4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuaApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIFRvc2hpYmEgVEM4NkMwMDEgKCJHb2t1LVMiKSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgTGluZW8KKyAqICAgICAgYnkgU3R1YXJ0IEx5bm5lLCBUb20gUnVzaHdvcnRoLCBhbmQgQnJ1Y2UgQmFsZGVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVG9zaGliYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgKHNvdXJjZUBtdmlzdGEuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy8qCisgKiBQQ0kgQkFSIDAgcG9pbnRzIHRvIHRoZXNlIHJlZ2lzdGVycy4KKyAqLworc3RydWN0IGdva3VfdWRjX3JlZ3MgeworCS8qIGlycSBtYW5hZ2VtZW50ICovCisJdTMyCWludF9zdGF0dXM7CQkvKiAweDAwMCAqLworCXUzMglpbnRfZW5hYmxlOworI2RlZmluZSBJTlRfU1VTUEVORAkJMHgwMDAwMQkJLyogb3IgcmVzdW1lICovCisjZGVmaW5lIElOVF9VU0JSRVNFVAkJMHgwMDAwMgorI2RlZmluZSBJTlRfRU5EUE9JTlQwCQkweDAwMDA0CisjZGVmaW5lIElOVF9TRVRVUAkJMHgwMDAwOAorI2RlZmluZSBJTlRfU1RBVFVTCQkweDAwMDEwCisjZGVmaW5lIElOVF9TVEFUVVNOQUsJCTB4MDAwMjAKKyNkZWZpbmUgSU5UX0VQeERBVEFTRVQobikJKDB4MDAwMjAgPDwgKG4pKQkvKiAwIDwgbiA8IDQgKi8KKyMJZGVmaW5lIElOVF9FUDFEQVRBU0VUCQkweDAwMDQwCisjCWRlZmluZSBJTlRfRVAyREFUQVNFVAkJMHgwMDA4MAorIwlkZWZpbmUgSU5UX0VQM0RBVEFTRVQJCTB4MDAxMDAKKyNkZWZpbmUgSU5UX0VQbk5BSyhuKQkJKDB4MDAxMDAgPCAobikpCQkvKiAwIDwgbiA8IDQgKi8KKyMJZGVmaW5lIElOVF9FUDFOQUsJCTB4MDAyMDAKKyMJZGVmaW5lIElOVF9FUDJOQUsJCTB4MDA0MDAKKyMJZGVmaW5lIElOVF9FUDNOQUsJCTB4MDA4MDAKKyNkZWZpbmUgSU5UX1NPRgkJCTB4MDEwMDAKKyNkZWZpbmUgSU5UX0VSUgkJCTB4MDIwMDAKKyNkZWZpbmUgSU5UX01TVFdSU0VUCQkweDA0MDAwCisjZGVmaW5lIElOVF9NU1RXUkVORAkJMHgwODAwMAorI2RlZmluZSBJTlRfTVNUV1JUTU9VVAkJMHgxMDAwMAorI2RlZmluZSBJTlRfTVNUUkRFTkQJCTB4MjAwMDAKKyNkZWZpbmUgSU5UX1NZU0VSUk9SCQkweDQwMDAwCisjZGVmaW5lIElOVF9QV1JERVRFQ1QJCTB4ODAwMDAKKworI2RlZmluZQlJTlRfREVWV0lERQkJKElOVF9QV1JERVRFQ1R8SU5UX1NZU0VSUk9SLyp8SU5UX0VSUiovfElOVF9VU0JSRVNFVHxJTlRfU1VTUEVORCkKKyNkZWZpbmUJSU5UX0VQMCAJCShJTlRfU0VUVVB8SU5UX0VORFBPSU5UMC8qfElOVF9TVEFUVVMqL3xJTlRfU1RBVFVTTkFLKQorCisJdTMyCWRtYV9tYXN0ZXI7CisjZGVmaW5lIE1TVF9FT1BCX0RJUwkJMHgwODAwCisjZGVmaW5lIE1TVF9FT1BCX0VOQQkJMHgwNDAwCisjZGVmaW5lIE1TVF9USU1FT1VUX0RJUwkJMHgwMjAwCisjZGVmaW5lIE1TVF9USU1FT1VUX0VOQQkJMHgwMTAwCisjZGVmaW5lIE1TVF9SRF9FT1BCCQkweDAwODAJCS8qIHdyaXRlLW9ubHkgKi8KKyNkZWZpbmUgTVNUX1JEX1JFU0VUCQkweDAwNDAKKyNkZWZpbmUgTVNUX1dSX1JFU0VUCQkweDAwMjAKKyNkZWZpbmUgTVNUX1JEX0VOQQkJMHgwMDA0CQkvKiAxOnN0YXJ0LCAwOmlnbm9yZSAqLworI2RlZmluZSBNU1RfV1JfRU5BCQkweDAwMDIJCS8qIDE6c3RhcnQsIDA6aWdub3JlICovCisjZGVmaW5lIE1TVF9DT05ORUNUSU9OCQkweDAwMDEJCS8qIDAgZm9yIGVwMW91dC9lcDJpbiAqLworCisjZGVmaW5lIE1TVF9SX0JJVFMJCShNU1RfRU9QQl9ESVN8TVNUX0VPUEJfRU5BIFwKKwkJCQkJfE1TVF9SRF9FTkF8TVNUX1JEX1JFU0VUKQorI2RlZmluZSBNU1RfV19CSVRTCQkoTVNUX1RJTUVPVVRfRElTfE1TVF9USU1FT1VUX0VOQSBcCisJCQkJCXxNU1RfV1JfRU5BfE1TVF9XUl9SRVNFVCkKKyNkZWZpbmUgTVNUX1JXX0JJVFMJCShNU1RfUl9CSVRTfE1TVF9XX0JJVFMgXAorCQkJCQl8TVNUX0NPTk5FQ1RJT04pCisKKy8qIHRoZXNlIHZhbHVlcyBhc3N1bWUgKGRtYV9tYXN0ZXIgJiBNU1RfQ09OTkVDVElPTikgPT0gMCAqLworI2RlZmluZSBVRENfTVNUV1JfRU5EUE9JTlQgICAgICAgIDEKKyNkZWZpbmUgVURDX01TVFJEX0VORFBPSU5UICAgICAgICAyCisKKwkvKiBkbWEgbWFzdGVyIHdyaXRlICovCisJdTMyCW91dF9kbWFfc3RhcnQ7CisJdTMyCW91dF9kbWFfZW5kOworCXUzMglvdXRfZG1hX2N1cnJlbnQ7CisKKwkvKiBkbWEgbWFzdGVyIHJlYWQgKi8KKwl1MzIJaW5fZG1hX3N0YXJ0OworCXUzMglpbl9kbWFfZW5kOworCXUzMglpbl9kbWFfY3VycmVudDsKKworCXUzMglwb3dlcl9kZXRlY3Q7CisjZGVmaW5lIFBXX0RFVEVDVAkJMHgwNAorI2RlZmluZSBQV19SRVNFVEIJCTB4MDIKKyNkZWZpbmUgUFdfUFVMTFVQCQkweDAxCisKKwl1OAlfcmVzZXJ2ZWQwIFsweDFkOF07CisKKwkvKiBlbmRwb2ludCByZWdpc3RlcnMgKi8KKwl1MzIJZXBfZmlmbyBbNF07CQkvKiAweDIwMCAqLworCXU4CV9yZXNlcnZlZDEgWzB4MTBdOworCXUzMgllcF9tb2RlIFs0XTsJCS8qIG9ubHkgMS0zIHZhbGlkICovCisJdTgJX3Jlc2VydmVkMiBbMHgxMF07CisKKwl1MzIJZXBfc3RhdHVzIFs0XTsKKyNkZWZpbmUgRVB4U1RBVFVTX1RPR0dMRQkweDQwCisjZGVmaW5lIEVQeFNUQVRVU19TVVNQRU5ECTB4MjAKKyNkZWZpbmUgRVB4U1RBVFVTX0VQX01BU0sJKDB4MDc8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfUkVBRFkJKDA8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfREFUQUlOCSgxPDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX0ZVTEwJKDI8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfVFhfRVJSCSgzPDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX1JYX0VSUgkoNDw8MikKKyMJZGVmaW5lIEVQeFNUQVRVU19FUF9CVVNZCSg1PDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX1NUQUxMCSg2PDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX0lOVkFMSUQJKDc8PDIpCisjZGVmaW5lIEVQeFNUQVRVU19GSUZPX0RJU0FCTEUJMHgwMgorI2RlZmluZSBFUHhTVEFUVVNfU1RBR0VfRVJST1IJMHgwMQorCisJdTgJX3Jlc2VydmVkMyBbMHgxMF07CisJdTMyCUVQeFNpemVMQVs0XTsKKyNkZWZpbmUgUEFDS0VUX0FDVElWRQkJKDE8PDcpCisjZGVmaW5lIERBVEFTSVpFCQkweDdmCisJdTgJX3Jlc2VydmVkM2EgWzB4MTBdOworCXUzMglFUHhTaXplTEJbNF07CQkvKiBvbmx5IDEsMiB2YWxpZCAqLworCXU4CV9yZXNlcnZlZDNiIFsweDEwXTsKKwl1MzIJRVB4U2l6ZUhBWzRdOwkJLyogb25seSAxLTMgdmFsaWQgKi8KKwl1OAlfcmVzZXJ2ZWQzYyBbMHgxMF07CisJdTMyCUVQeFNpemVIQls0XTsJCS8qIG9ubHkgMSwyIHZhbGlkICovCisJdTgJX3Jlc2VydmVkNFsweDMwXTsKKworCS8qIFNFVFVQIHBhY2tldCBjb250ZW50cyAqLworCXUzMgliUmVxdWVzdFR5cGU7CQkvKiAweDMwMCAqLworCXUzMgliUmVxdWVzdDsKKwl1MzIJd1ZhbHVlTDsKKwl1MzIJd1ZhbHVlSDsKKwl1MzIJd0luZGV4TDsKKwl1MzIJd0luZGV4SDsKKwl1MzIJd0xlbmd0aEw7CisJdTMyCXdMZW5ndGhIOworCisJLyogY29tbWFuZCBpbnRlcmFjdGlvbi9oYW5kc2hha2luZyAqLworCXUzMglTZXR1cFJlY3Y7CQkvKiAweDMyMCAqLworCXUzMglDdXJyQ29uZmlnOworCXUzMglTdGRSZXF1ZXN0OworCXUzMglSZXF1ZXN0OworCXUzMglEYXRhU2V0OworI2RlZmluZSBEQVRBU0VUX0EoZXBudW0pCSgxPDwoMiooZXBudW0pKSkKKyNkZWZpbmUgREFUQVNFVF9CKGVwbnVtKQkoMjw8KDIqKGVwbnVtKSkpCisjZGVmaW5lIERBVEFTRVRfQUIoZXBudW0pCSgzPDwoMiooZXBudW0pKSkKKwl1OAlfcmVzZXJ2ZWQ1WzRdOworCisJdTMyCVVzYlN0YXRlOworI2RlZmluZSBVU0JTVEFURV9DT05GSUdVUkVECTB4MDQKKyNkZWZpbmUgVVNCU1RBVEVfQUREUkVTU0VECTB4MDIKKyNkZWZpbmUgVVNCU1RBVEVfREVGQVVMVAkweDAxCisKKwl1MzIJRU9QOworCisJdTMyCUNvbW1hbmQ7CQkvKiAweDM0MCAqLworI2RlZmluZSBDT01NQU5EX1NFVERBVEEwCTIKKyNkZWZpbmUgQ09NTUFORF9SRVNFVAkJMworI2RlZmluZSBDT01NQU5EX1NUQUxMCQk0CisjZGVmaW5lIENPTU1BTkRfSU5WQUxJRAkJNQorI2RlZmluZSBDT01NQU5EX0ZJRk9fRElTQUJMRQk3CisjZGVmaW5lIENPTU1BTkRfRklGT19FTkFCTEUJOAorI2RlZmluZSBDT01NQU5EX0lOSVRfREVTQ1JJUFRPUgk5CisjZGVmaW5lIENPTU1BTkRfRklGT19DTEVBUgkxMAkvKiBhbHNvIHN0YWxsICovCisjZGVmaW5lIENPTU1BTkRfU1RBTExfQ0xFQVIJMTEKKyNkZWZpbmUgQ09NTUFORF9FUChuKQkJKChuKSA8PCA0KQorCisJdTMyCUVQeFNpbmdsZTsKKwl1OAlfcmVzZXJ2ZWQ2WzRdOworCXUzMglFUHhCQ1M7CisJdTgJX3Jlc2VydmVkN1s4XTsKKwl1MzIJSW50Q29udHJvbDsKKyNkZWZpbmUgSUNPTlRST0xfU1RBVFVTTkFLCTEKKwl1OAlfcmVzZXJ2ZWQ4WzRdOworCisJdTMyCXJlcW1vZGU7CS8vIDB4MzYwIHN0YW5kYXJkIHJlcXVlc3QgbW9kZSwgbG93IDggYml0cworI2RlZmluZSBHX1JFUU1PREVfU0VUX0lOVEYJKDE8PDcpCisjZGVmaW5lIEdfUkVRTU9ERV9HRVRfSU5URgkoMTw8NikKKyNkZWZpbmUgR19SRVFNT0RFX1NFVF9DT05GCSgxPDw1KQorI2RlZmluZSBHX1JFUU1PREVfR0VUX0NPTkYJKDE8PDQpCisjZGVmaW5lIEdfUkVRTU9ERV9HRVRfREVTQwkoMTw8MykKKyNkZWZpbmUgR19SRVFNT0RFX1NFVF9GRUFUCSgxPDwyKQorI2RlZmluZSBHX1JFUU1PREVfQ0xFQVJfRkVBVAkoMTw8MSkKKyNkZWZpbmUgR19SRVFNT0RFX0dFVF9TVEFUVVMJKDE8PDApCisKKwl1MzIJUmVxTW9kZTsKKwl1OAlfcmVzZXJ2ZWQ5WzB4MThdOworCXUzMglQb3J0U3RhdHVzOwkJLyogMHgzODAgKi8KKwl1OAlfcmVzZXJ2ZWQxMFs4XTsKKwl1MzIJYWRkcmVzczsKKwl1MzIJYnVmZl90ZXN0OworCXU4CV9yZXNlcnZlZDExWzRdOworCXUzMglVc2JSZWFkeTsKKwl1OAlfcmVzZXJ2ZWQxMls0XTsKKwl1MzIJU2V0RGVzY1N0YWxsOwkJLyogMHgzYTAgKi8KKwl1OAlfcmVzZXJ2ZWQxM1sweDQ1Y107CisKKwkvKiBoYXJkd2FyZSBjb3VsZCBoYW5kbGUgbGltaXRlZCBHRVRfREVTQ1JJUFRPUiBkdXRpZXMgKi8KKyNkZWZpbmUJREVTQ19MRU4JMHg4MAorCXUzMglkZXNjcmlwdG9yc1tERVNDX0xFTl07CS8qIDB4ODAwICovCisJdTgJX3Jlc2VydmVkMTRbMHg2MDBdOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZQlNQVhfRklGT19TSVpFCTY0CisjZGVmaW5lCU1BWF9FUDBfU0laRQk4CQkvKiBlcDAgZmlmbyBpcyBiaWdnZXIsIHRob3VnaCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERSSVZFUiBEQVRBIFNUUlVDVFVSRVMgYW5kIFVUSUxJVElFUyAqLworCitzdHJ1Y3QgZ29rdV9lcCB7CisJc3RydWN0IHVzYl9lcAkJCQllcDsKKwlzdHJ1Y3QgZ29rdV91ZGMJCQkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQkJCWlycXM7CisKKwl1bnNpZ25lZAkJCQludW06OCwKKwkJCQkJCWRtYToxLAorCQkJCQkJaXNfaW46MSwKKwkJCQkJCXN0b3BwZWQ6MTsKKworCS8qIGFuYWxvZ291cyB0byBhIGhvc3Qtc2lkZSBxaCAqLworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2M7CisKKwl1MzIgX19pb21lbQkJCQkqcmVnX2ZpZm87CisJdTMyIF9faW9tZW0JCQkJKnJlZ19tb2RlOworCXUzMiBfX2lvbWVtCQkJCSpyZWdfc3RhdHVzOworfTsKKworc3RydWN0IGdva3VfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQlyZXE7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisKKwl1bnNpZ25lZAkJCW1hcHBlZDoxOworfTsKKworZW51bSBlcDBzdGF0ZSB7CisJRVAwX0RJU0NPTk5FQ1QsCQkvKiBubyBob3N0ICovCisJRVAwX0lETEUsCQkvKiBiZXR3ZWVuIFNUQVRVUyBhY2sgYW5kIFNFVFVQIHJlcG9ydCAqLworCUVQMF9JTiwgRVAwX09VVCwgCS8qIGRhdGEgc3RhZ2UgKi8KKwlFUDBfU1RBVFVTLAkJLyogc3RhdHVzIHN0YWdlICovCisJRVAwX1NUQUxMLAkJLyogZGF0YSBvciBzdGF0dXMgc3RhZ2VzICovCisJRVAwX1NVU1BFTkQsCQkvKiB1c2Igc3VzcGVuZCAqLworfTsKKworc3RydWN0IGdva3VfdWRjIHsKKwkvKiBlYWNoIHBjaSBkZXZpY2UgcHJvdmlkZXMgb25lIGdhZGdldCwgc2V2ZXJhbCBlbmRwb2ludHMgKi8KKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBnb2t1X2VwCQkJZXBbNF07CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIAkqZHJpdmVyOworCisJZW51bSBlcDBzdGF0ZQkJCWVwMHN0YXRlOworCXVuc2lnbmVkCQkJZ290X2lycToxLAorCQkJCQlnb3RfcmVnaW9uOjEsCisJCQkJCXJlcV9jb25maWc6MSwKKwkJCQkJY29uZmlndXJlZDoxLAorCQkJCQllbmFibGVkOjE7CisKKwkvKiBwY2kgc3RhdGUgdXNlZCB0byBhY2Nlc3MgdGhvc2UgZW5kcG9pbnRzICovCisJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzOworCXUzMgkJCQlpbnRfZW5hYmxlOworCisJLyogc3RhdGlzdGljcy4uLiAqLworCXVuc2lnbmVkIGxvbmcJCQlpcnFzOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSB4cHJpbnRrKGRldixsZXZlbCxmbXQsYXJncy4uLikgXAorCXByaW50ayhsZXZlbCAiJXMgJXM6ICIgZm10ICwgZHJpdmVyX25hbWUgLCBcCisJCQlwY2lfbmFtZShkZXYtPnBkZXYpICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHIERCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYJLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmZjY3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0wLDAgKzEsMjExMCBAQAorLyoKKyAqIGlub2RlLmMgLS0gdXNlciBtb2RlIGZpbGVzeXN0ZW0gYXBpIGZvciB1c2IgZ2FkZ2V0IGNvbnRyb2xsZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBZ2lsZW50IFRlY2hub2xvZ2llcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKy8vICNkZWZpbmUJREVCVUcgCQkJLyogZGF0YSB0byBoZWxwIGZhdWx0IGRpYWdub3NpcyAqLworLy8gI2RlZmluZQlWRVJCT1NFCQkvKiBleHRyYSBkZWJ1ZyBtZXNzYWdlcyAoc3VjY2VzcyB0b28pICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXRzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldGZzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisKKy8qCisgKiBUaGUgZ2FkZ2V0ZnMgQVBJIG1hcHMgZWFjaCBlbmRwb2ludCB0byBhIGZpbGUgZGVzY3JpcHRvciBzbyB0aGF0IHlvdQorICogY2FuIHVzZSBzdGFuZGFyZCBzeW5jaHJvbm91cyByZWFkL3dyaXRlIGNhbGxzIGZvciBJL08uICBUaGVyZSdzIHNvbWUKKyAqIE9fTk9OQkxPQ0sgYW5kIE9fQVNZTkMvRkFTWU5DIHN0eWxlIGkvbyBzdXBwb3J0LiAgRXhhbXBsZSB1c2VybW9kZQorICogZHJpdmVycyBzaG93IGhvdyB0aGlzIHdvcmtzIGluIHByYWN0aWNlLiAgWW91IGNhbiBhbHNvIHVzZSBBSU8gdG8KKyAqIGVsaW1pbmF0ZSBJL08gZ2FwcyBiZXR3ZWVuIHJlcXVlc3RzLCB0byBoZWxwIHdoZW4gc3RyZWFtaW5nIGRhdGEuCisgKgorICogS2V5IHBhcnRzIHRoYXQgbXVzdCBiZSBVU0Itc3BlY2lmaWMgYXJlIHByb3RvY29scyBkZWZpbmluZyBob3cgdGhlCisgKiByZWFkL3dyaXRlIG9wZXJhdGlvbnMgcmVsYXRlIHRvIHRoZSBoYXJkd2FyZSBzdGF0ZSBtYWNoaW5lcy4gIFRoZXJlCisgKiBhcmUgdHdvIHR5cGVzIG9mIGZpbGVzLiAgT25lIHR5cGUgaXMgZm9yIHRoZSBkZXZpY2UsIGltcGxlbWVudGluZyBlcDAuCisgKiBUaGUgb3RoZXIgdHlwZSBpcyBmb3IgZWFjaCBJTiBvciBPVVQgZW5kcG9pbnQuICBJbiBib3RoIGNhc2VzLCB0aGUKKyAqIHVzZXIgbW9kZSBkcml2ZXIgbXVzdCBjb25maWd1cmUgdGhlIGhhcmR3YXJlIGJlZm9yZSB1c2luZyBpdC4KKyAqCisgKiAtIEZpcnN0LCBkZXZfY29uZmlnKCkgaXMgY2FsbGVkIHdoZW4gL2Rldi9nYWRnZXQvJENISVAgaXMgY29uZmlndXJlZAorICogICAoYnkgd3JpdGluZyBjb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgZGVzY3JpcHRvcnMpLiAgQWZ0ZXJ3YXJkcyBpdAorICogICBtYXkgc2VydmUgYXMgYSBzb3VyY2Ugb2YgZGV2aWNlIGV2ZW50cywgdXNlZCB0byBoYW5kbGUgYWxsIGNvbnRyb2wKKyAqICAgcmVxdWVzdHMgb3RoZXIgdGhhbiBiYXNpYyBlbnVtZXJhdGlvbi4KKyAqCisgKiAtIFRoZW4gZWl0aGVyIGltbWVkaWF0ZWx5LCBvciBhZnRlciBhIFNFVF9DT05GSUdVUkFUSU9OIGNvbnRyb2wgcmVxdWVzdCwKKyAqICAgZXBfY29uZmlnKCkgaXMgY2FsbGVkIHdoZW4gZWFjaCAvZGV2L2dhZGdldC9lcCogZmlsZSBpcyBjb25maWd1cmVkCisgKiAgIChieSB3cml0aW5nIGVuZHBvaW50IGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgdGhlc2UgZmlsZXMgYXJlIHVzZWQKKyAqICAgdG8gd3JpdGUoKSBJTiBkYXRhIG9yIHRvIHJlYWQoKSBPVVQgZGF0YS4gIFRvIGhhbHQgdGhlIGVuZHBvaW50LCBhCisgKiAgICJ3cm9uZyBkaXJlY3Rpb24iIHJlcXVlc3QgaXMgaXNzdWVkIChsaWtlIHJlYWRpbmcgYW4gSU4gZW5kcG9pbnQpLgorICoKKyAqIFVubGlrZSAidXNiZnMiIHRoZSBvbmx5IGlvY3RsKClzIGFyZSBmb3IgdGhpbmdzIHRoYXQgYXJlIHJhcmUsIGFuZCBtYXliZQorICogbm90IHBvc3NpYmxlIG9uIGFsbCBoYXJkd2FyZS4gIEZvciBleGFtcGxlLCBwcmVjaXNlIGZhdWx0IGhhbmRsaW5nIHdpdGgKKyAqIHJlc3BlY3QgdG8gZGF0YSBsZWZ0IGluIGVuZHBvaW50IGZpZm9zIGFmdGVyIGFib3J0ZWQgb3BlcmF0aW9uczsgb3IKKyAqIHNlbGVjdGl2ZSBjbGVhcmluZyBvZiBlbmRwb2ludCBoYWx0cywgdG8gaW1wbGVtZW50IFNFVF9JTlRFUkZBQ0UuCisgKi8KKworI2RlZmluZQlEUklWRVJfREVTQwkiVVNCIEdhZGdldCBmaWxlc3lzdGVtIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkiMjQgQXVnIDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjIFtdID0gRFJJVkVSX0RFU0M7CitzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWUgW10gPSAiZ2FkZ2V0ZnMiOworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIEdBREdFVEZTX01BR0lDCQkweGFlZTcxZWU3CisjZGVmaW5lIERNQV9BRERSX0lOVkFMSUQJKH4oZG1hX2FkZHJfdCkwKQorCisvKiAvZGV2L2dhZGdldC8kQ0hJUCByZXByZXNlbnRzIGVwMCBhbmQgdGhlIHdob2xlIGRldmljZSAqLworZW51bSBlcDBfc3RhdGUgeworCS8qIERJU0JMRUQgaXMgdGhlIGluaXRpYWwgc3RhdGUuCisJICovCisJU1RBVEVfREVWX0RJU0FCTEVEID0gMCwKKworCS8qIE9ubHkgb25lIG9wZW4oKSBvZiAvZGV2L2dhZGdldC8kQ0hJUDsgb25seSBvbmUgZmlsZSB0cmFja3MKKwkgKiBlcDAvZGV2aWNlIGkvbyBtb2RlcyBhbmQgYmluZGluZyB0byB0aGUgY29udHJvbGxlci4gIERyaXZlcgorCSAqIG11c3QgYWx3YXlzIHdyaXRlIGRlc2NyaXB0b3JzIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSwgdGhlbgorCSAqIHRoZSBkZXZpY2UgYmVjb21lcyBVTkNPTk5FQ1RFRCB1bnRpbCBlbnVtZXJhdGlvbi4KKwkgKi8KKwlTVEFURV9PUEVORUQsCisKKwkvKiBGcm9tIHRoZW4gb24sIGVwMCBmZCBpcyBpbiBlaXRoZXIgb2YgdHdvIGJhc2ljIG1vZGVzOgorCSAqIC0gKFVOKUNPTk5FQ1RFRDogcmVhZCB1c2JfZ2FkZ2V0ZnNfZXZlbnQocykgZnJvbSBpdAorCSAqIC0gU0VUVVA6IHJlYWQvd3JpdGUgd2lsbCB0cmFuc2ZlciBjb250cm9sIGRhdGEgYW5kIHN1Y2NlZWQ7CisJICogICBvciBpZiAid3JvbmcgZGlyZWN0aW9uIiwgcGVyZm9ybXMgcHJvdG9jb2wgc3RhbGwKKwkgKi8KKwlTVEFURV9VTkNPTk5FQ1RFRCwKKwlTVEFURV9DT05ORUNURUQsCisJU1RBVEVfU0VUVVAsCisKKwkvKiBVTkJPVU5EIG1lYW5zIHRoZSBkcml2ZXIgY2xvc2VkIGVwMCwgc28gdGhlIGRldmljZSB3b24ndCBiZQorCSAqIGFjY2Vzc2libGUgYWdhaW4gKERFVl9ESVNBQkxFRCkgdW50aWwgYWxsIGZkcyBhcmUgY2xvc2VkLgorCSAqLworCVNUQVRFX0RFVl9VTkJPVU5ELAorfTsKKworLyogZW5vdWdoIGZvciB0aGUgd2hvbGUgcXVldWU6IG1vc3QgZXZlbnRzIGludmFsaWRhdGUgb3RoZXJzICovCisjZGVmaW5lCU5fRVZFTlQJCQk1CisKK3N0cnVjdCBkZXZfZGF0YSB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJYXRvbWljX3QJCQljb3VudDsKKwllbnVtIGVwMF9zdGF0ZQkJCXN0YXRlOworCXN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQJZXZlbnQgW05fRVZFTlRdOworCXVuc2lnbmVkCQkJZXZfbmV4dDsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkJKmZhc3luYzsKKwl1OAkJCQljdXJyZW50X2NvbmZpZzsKKworCS8qIGRyaXZlcnMgcmVhZGluZyBlcDAgTVVTVCBoYW5kbGUgY29udHJvbCByZXF1ZXN0cyAoU0VUVVApCisJICogcmVwb3J0ZWQgdGhhdCB3YXk7IGVsc2UgdGhlIGhvc3Qgd2lsbCB0aW1lIG91dC4KKwkgKi8KKwl1bnNpZ25lZAkJCXVzZXJtb2RlX3NldHVwIDogMSwKKwkJCQkJc2V0dXBfaW4gOiAxLAorCQkJCQlzZXR1cF9jYW5fc3RhbGwgOiAxLAorCQkJCQlzZXR1cF9vdXRfcmVhZHkgOiAxLAorCQkJCQlzZXR1cF9vdXRfZXJyb3IgOiAxLAorCQkJCQlzZXR1cF9hYm9ydCA6IDE7CisKKwkvKiB0aGUgcmVzdCBpcyBiYXNpY2FsbHkgd3JpdGUtb25jZSAqLworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmNvbmZpZywgKmhzX2NvbmZpZzsKKwlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCSpkZXY7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqcmVxOworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZ2FkZ2V0OworCXN0cnVjdCBsaXN0X2hlYWQJCWVwZmlsZXM7CisJdm9pZAkJCQkqYnVmOworCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0OworCXN0cnVjdCBzdXBlcl9ibG9jawkJKnNiOworCXN0cnVjdCBkZW50cnkJCQkqZGVudHJ5OworCisJLyogZXhjZXB0IHRoaXMgc2NyYXRjaCBpL28gYnVmZmVyIGZvciBlcDAgKi8KKwl1OAkJCQlyYnVmIFsyNTZdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGdldF9kZXYgKHN0cnVjdCBkZXZfZGF0YSAqZGF0YSkKK3sKKwlhdG9taWNfaW5jICgmZGF0YS0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpCit7CisJaWYgKGxpa2VseSAoIWF0b21pY19kZWNfYW5kX3Rlc3QgKCZkYXRhLT5jb3VudCkpKQorCQlyZXR1cm47CisJLyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovCisJQlVHX09OICh3YWl0cXVldWVfYWN0aXZlICgmZGF0YS0+d2FpdCkpOworCWtmcmVlIChkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfZGF0YSAqZGV2X25ldyAodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXY7CisKKwlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJZGV2LT5zdGF0ZSA9IFNUQVRFX0RFVl9ESVNBQkxFRDsKKwlhdG9taWNfc2V0ICgmZGV2LT5jb3VudCwgMSk7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5lcGZpbGVzKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGV2LT53YWl0KTsKKwlyZXR1cm4gZGV2OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBvdGhlciAvZGV2L2dhZGdldC8kRU5EUE9JTlQgZmlsZXMgcmVwcmVzZW50IGVuZHBvaW50cyAqLworZW51bSBlcF9zdGF0ZSB7CisJU1RBVEVfRVBfRElTQUJMRUQgPSAwLAorCVNUQVRFX0VQX1JFQURZLAorCVNUQVRFX0VQX0RFRkVSX0VOQUJMRSwKKwlTVEFURV9FUF9FTkFCTEVELAorCVNUQVRFX0VQX1VOQk9VTkQsCit9OworCitzdHJ1Y3QgZXBfZGF0YSB7CisJc3RydWN0IHNlbWFwaG9yZQkJbG9jazsKKwllbnVtIGVwX3N0YXRlCQkJc3RhdGU7CisJYXRvbWljX3QJCQljb3VudDsKKwlzdHJ1Y3QgZGV2X2RhdGEJCQkqZGV2OworCS8qIG11c3QgaG9sZCBkZXYtPmxvY2sgYmVmb3JlIGFjY2Vzc2luZyBlcCBvciByZXEgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkJKmVwOworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKnJlcTsKKwlzc2l6ZV90CQkJCXN0YXR1czsKKwljaGFyCQkJCW5hbWUgWzE2XTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJZGVzYywgaHNfZGVzYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQllcGZpbGVzOworCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0OworCXN0cnVjdCBkZW50cnkJCQkqZGVudHJ5OworCXN0cnVjdCBpbm9kZQkJCSppbm9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKQoreworCWF0b21pY19pbmMgKCZkYXRhLT5jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9lcCAoc3RydWN0IGVwX2RhdGEgKmRhdGEpCit7CisJaWYgKGxpa2VseSAoIWF0b21pY19kZWNfYW5kX3Rlc3QgKCZkYXRhLT5jb3VudCkpKQorCQlyZXR1cm47CisJcHV0X2RldiAoZGF0YS0+ZGV2KTsKKwkvKiBuZWVkcyBubyBtb3JlIGNsZWFudXAgKi8KKwlCVUdfT04gKCFsaXN0X2VtcHR5ICgmZGF0YS0+ZXBmaWxlcykpOworCUJVR19PTiAod2FpdHF1ZXVlX2FjdGl2ZSAoJmRhdGEtPndhaXQpKTsKKwlCVUdfT04gKGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spICE9IDApOworCWtmcmVlIChkYXRhKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogbW9zdCAiaG93IHRvIHVzZSB0aGUgaGFyZHdhcmUiIHBvbGljeSBjaG9pY2VzIGFyZSBpbiB1c2Vyc3BhY2U6CisgKiBtYXBwaW5nIGVuZHBvaW50IHJvbGVzICh3aGljaCB0aGUgZHJpdmVyIG5lZWRzKSB0byB0aGUgY2FwYWJpbGl0aWVzCisgKiB3aGljaCB0aGUgdXNiIGNvbnRyb2xsZXIgaGFzLiAgbW9zdCBvZiB0aG9zZSBjYXBhYmlsaXRpZXMgYXJlIGV4cG9zZWQKKyAqIGltcGxpY2l0bHksIHN0YXJ0aW5nIHdpdGggdGhlIGRyaXZlciBuYW1lIGFuZCB0aGVuIGVuZHBvaW50IG5hbWVzLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpDSElQOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBOT1RFOiAgZG9uJ3QgdXNlIGRldl9wcmludGsgY2FsbHMgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGdhZGdldAorICogYXQgdGhlIGVuZCBvZiBlcDAgY29uZmlndXJhdGlvbiwgb3IgYWZ0ZXIgdW5iaW5kLgorICovCisKKy8qIHRvbyB3b3JkeTogZGV2X3ByaW50ayhsZXZlbCAsICYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykgKi8KKyNkZWZpbmUgeHByaW50ayhkLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKGxldmVsICIlczogIiBmbXQgLCBzaG9ydG5hbWUgLCAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZERUJVRwlEQkcKKyNlbHNlCisjZGVmaW5lIFZERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFNZTkNIUk9OT1VTIEVORFBPSU5UIE9QRVJBVElPTlMgKGJ1bGsvaW50ci9pc28pCisgKgorICogQWZ0ZXIgb3BlbmluZywgY29uZmlndXJlIG5vbi1jb250cm9sIGVuZHBvaW50cy4gIFRoZW4gdXNlIG5vcm1hbAorICogc3RyZWFtIHJlYWQoKSBhbmQgd3JpdGUoKSByZXF1ZXN0czsgYW5kIG1heWJlIGlvY3RsKCkgdG8gZ2V0IG1vcmUKKyAqIHByZWNpc2UgRklGTyBzdGF0dXMgd2hlbiByZWNvdmVyaW5nIGZyb20gY2FuY2VsYXRpb24uCisgKi8KKworc3RhdGljIHZvaWQgZXBpb19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBlcF9kYXRhCSplcGRhdGEgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIXJlcS0+Y29udGV4dCkKKwkJcmV0dXJuOworCWlmIChyZXEtPnN0YXR1cykKKwkJZXBkYXRhLT5zdGF0dXMgPSByZXEtPnN0YXR1czsKKwllbHNlCisJCWVwZGF0YS0+c3RhdHVzID0gcmVxLT5hY3R1YWw7CisJY29tcGxldGUgKChzdHJ1Y3QgY29tcGxldGlvbiAqKXJlcS0+Y29udGV4dCk7Cit9CisKKy8qIHRhc2tsb2NrIGVuZHBvaW50LCByZXR1cm5pbmcgd2hlbiBpdCdzIGNvbm5lY3RlZC4KKyAqIHN0aWxsIG5lZWQgZGV2LT5sb2NrIHRvIHVzZSBlcGRhdGEtPmVwLgorICovCitzdGF0aWMgaW50CitnZXRfcmVhZHlfZXAgKHVuc2lnbmVkIGZfZmxhZ3MsIHN0cnVjdCBlcF9kYXRhICplcGRhdGEpCit7CisJaW50CXZhbDsKKworCWlmIChmX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlpZiAoZG93bl90cnlsb2NrICgmZXBkYXRhLT5sb2NrKSAhPSAwKQorCQkJZ290byBub25ibG9jazsKKwkJaWYgKGVwZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkgeworCQkJdXAgKCZlcGRhdGEtPmxvY2spOworbm9uYmxvY2s6CisJCQl2YWwgPSAtRUFHQUlOOworCQl9IGVsc2UKKwkJCXZhbCA9IDA7CisJCXJldHVybiB2YWw7CisJfQorCisJaWYgKCh2YWwgPSBkb3duX2ludGVycnVwdGlibGUgKCZlcGRhdGEtPmxvY2spKSA8IDApCisJCXJldHVybiB2YWw7CituZXdzdGF0ZToKKwlzd2l0Y2ggKGVwZGF0YS0+c3RhdGUpIHsKKwljYXNlIFNUQVRFX0VQX0VOQUJMRUQ6CisJCWJyZWFrOworCWNhc2UgU1RBVEVfRVBfREVGRVJfRU5BQkxFOgorCQlEQkcgKGVwZGF0YS0+ZGV2LCAiJXMgd2FpdCBmb3IgaG9zdFxuIiwgZXBkYXRhLT5uYW1lKTsKKwkJaWYgKCh2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUgKGVwZGF0YS0+d2FpdCwgCisJCQkJZXBkYXRhLT5zdGF0ZSAhPSBTVEFURV9FUF9ERUZFUl9FTkFCTEUKKwkJCQl8fCBlcGRhdGEtPmRldi0+c3RhdGUgPT0gU1RBVEVfREVWX1VOQk9VTkQKKwkJCQkpKSA8IDApCisJCQlnb3RvIGZhaWw7CisJCWdvdG8gbmV3c3RhdGU7CisJLy8gY2FzZSBTVEFURV9FUF9ESVNBQkxFRDoJCS8qICJjYW4ndCBoYXBwZW4iICovCisJLy8gY2FzZSBTVEFURV9FUF9SRUFEWToJCQkvKiAiY2FuJ3QgaGFwcGVuIiAqLworCWRlZmF1bHQ6CQkJCS8qIGVycm9yISAqLworCQlwcl9kZWJ1ZyAoIiVzOiBlcCAlcCBub3QgYXZhaWxhYmxlLCBzdGF0ZSAlZFxuIiwKKwkJCQlzaG9ydG5hbWUsIGVwZGF0YSwgZXBkYXRhLT5zdGF0ZSk7CisJCS8vIEZBTExUSFJPVUdICisJY2FzZSBTVEFURV9FUF9VTkJPVU5EOgkJCS8qIGNsZWFuIGRpc2Nvbm5lY3QgKi8KKwkJdmFsID0gLUVOT0RFVjsKK2ZhaWw6CisJCXVwICgmZXBkYXRhLT5sb2NrKTsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHNzaXplX3QKK2VwX2lvIChzdHJ1Y3QgZXBfZGF0YSAqZXBkYXRhLCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKwlERUNMQVJFX0NPTVBMRVRJT04gKGRvbmUpOworCWludCB2YWx1ZTsKKworCXNwaW5fbG9ja19pcnEgKCZlcGRhdGEtPmRldi0+bG9jayk7CisJaWYgKGxpa2VseSAoZXBkYXRhLT5lcCAhPSBOVUxMKSkgeworCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGVwZGF0YS0+cmVxOworCisJCXJlcS0+Y29udGV4dCA9ICZkb25lOworCQlyZXEtPmNvbXBsZXRlID0gZXBpb19jb21wbGV0ZTsKKwkJcmVxLT5idWYgPSBidWY7CisJCXJlcS0+bGVuZ3RoID0gbGVuOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZXBkYXRhLT5lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UKKwkJdmFsdWUgPSAtRU5PREVWOworCXNwaW5fdW5sb2NrX2lycSAoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCWlmIChsaWtlbHkgKHZhbHVlID09IDApKSB7CisJCXZhbHVlID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChkb25lLndhaXQsIGRvbmUuZG9uZSk7CisJCWlmICh2YWx1ZSAhPSAwKSB7CisJCQlzcGluX2xvY2tfaXJxICgmZXBkYXRhLT5kZXYtPmxvY2spOworCQkJaWYgKGxpa2VseSAoZXBkYXRhLT5lcCAhPSBOVUxMKSkgeworCQkJCURCRyAoZXBkYXRhLT5kZXYsICIlcyBpL28gaW50ZXJydXB0ZWRcbiIsCisJCQkJCQllcGRhdGEtPm5hbWUpOworCQkJCXVzYl9lcF9kZXF1ZXVlIChlcGRhdGEtPmVwLCBlcGRhdGEtPnJlcSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxICgmZXBkYXRhLT5kZXYtPmxvY2spOworCisJCQkJd2FpdF9ldmVudCAoZG9uZS53YWl0LCBkb25lLmRvbmUpOworCQkJCWlmIChlcGRhdGEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkKKwkJCQkJZXBkYXRhLT5zdGF0dXMgPSAtRUlOVFI7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fdW5sb2NrX2lycSAoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCQkJCURCRyAoZXBkYXRhLT5kZXYsICJlbmRwb2ludCBnb25lXG4iKTsKKwkJCQllcGRhdGEtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVwZGF0YS0+c3RhdHVzOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKKworLyogaGFuZGxlIGEgc3luY2hyb25vdXMgT1VUIGJ1bGsvaW50ci9pc28gdHJhbnNmZXIgKi8KK3N0YXRpYyBzc2l6ZV90CitlcF9yZWFkIChzdHJ1Y3QgZmlsZSAqZmQsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CisJdm9pZAkJCSprYnVmOworCXNzaXplX3QJCQl2YWx1ZTsKKworCWlmICgodmFsdWUgPSBnZXRfcmVhZHlfZXAgKGZkLT5mX2ZsYWdzLCBkYXRhKSkgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwkvKiBoYWx0IGFueSBlbmRwb2ludCBieSBkb2luZyBhICJ3cm9uZyBkaXJlY3Rpb24iIGkvbyBjYWxsICovCisJaWYgKGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJaWYgKChkYXRhLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJREJHIChkYXRhLT5kZXYsICIlcyBoYWx0XG4iLCBkYXRhLT5uYW1lKTsKKwkJc3Bpbl9sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJCWlmIChsaWtlbHkgKGRhdGEtPmVwICE9IE5VTEwpKQorCQkJdXNiX2VwX3NldF9oYWx0IChkYXRhLT5lcCk7CisJCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJCXVwICgmZGF0YS0+bG9jayk7CisJCXJldHVybiAtRUJBRE1TRzsKKwl9CisKKwkvKiBGSVhNRSByZWFkYWhlYWQgZm9yIE9fTk9OQkxPQ0sgYW5kIHBvbGwoKTsgY2FyZWZ1bCB3aXRoIFpMUHMgKi8KKworCXZhbHVlID0gLUVOT01FTTsKKwlrYnVmID0ga21hbGxvYyAobGVuLCBTTEFCX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5ICgha2J1ZikpCisJCWdvdG8gZnJlZTE7CisKKwl2YWx1ZSA9IGVwX2lvIChkYXRhLCBrYnVmLCBsZW4pOworCVZERUJVRyAoZGF0YS0+ZGV2LCAiJXMgcmVhZCAlZCBPVVQsIHN0YXR1cyAlZFxuIiwKKwkJZGF0YS0+bmFtZSwgbGVuLCB2YWx1ZSk7CisJaWYgKHZhbHVlID49IDAgJiYgY29weV90b191c2VyIChidWYsIGtidWYsIHZhbHVlKSkKKwkJdmFsdWUgPSAtRUZBVUxUOworCitmcmVlMToKKwl1cCAoJmRhdGEtPmxvY2spOworCWtmcmVlIChrYnVmKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIGhhbmRsZSBhIHN5bmNocm9ub3VzIElOIGJ1bGsvaW50ci9pc28gdHJhbnNmZXIgKi8KK3N0YXRpYyBzc2l6ZV90CitlcF93cml0ZSAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXZvaWQJCQkqa2J1ZjsKKwlzc2l6ZV90CQkJdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gZ2V0X3JlYWR5X2VwIChmZC0+Zl9mbGFncywgZGF0YSkpIDwgMCkKKwkJcmV0dXJuIHZhbHVlOworCisJLyogaGFsdCBhbnkgZW5kcG9pbnQgYnkgZG9pbmcgYSAid3JvbmcgZGlyZWN0aW9uIiBpL28gY2FsbCAqLworCWlmICghKGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSB7CisJCWlmICgoZGF0YS0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCURCRyAoZGF0YS0+ZGV2LCAiJXMgaGFsdFxuIiwgZGF0YS0+bmFtZSk7CisJCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKKwkJCXVzYl9lcF9zZXRfaGFsdCAoZGF0YS0+ZXApOworCQlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCQl1cCAoJmRhdGEtPmxvY2spOworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJLyogRklYTUUgd3JpdGViZWhpbmQgZm9yIE9fTk9OQkxPQ0sgYW5kIHBvbGwoKSwgcWxlbiA9IDEgKi8KKworCXZhbHVlID0gLUVOT01FTTsKKwlrYnVmID0ga21hbGxvYyAobGVuLCBTTEFCX0tFUk5FTCk7CisJaWYgKCFrYnVmKQorCQlnb3RvIGZyZWUxOworCWlmIChjb3B5X2Zyb21fdXNlciAoa2J1ZiwgYnVmLCBsZW4pKSB7CisJCXZhbHVlID0gLUVGQVVMVDsKKwkJZ290byBmcmVlMTsKKwl9CisKKwl2YWx1ZSA9IGVwX2lvIChkYXRhLCBrYnVmLCBsZW4pOworCVZERUJVRyAoZGF0YS0+ZGV2LCAiJXMgd3JpdGUgJWQgSU4sIHN0YXR1cyAlZFxuIiwKKwkJZGF0YS0+bmFtZSwgbGVuLCB2YWx1ZSk7CitmcmVlMToKKwl1cCAoJmRhdGEtPmxvY2spOworCWtmcmVlIChrYnVmKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQKK2VwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCisJLyogY2xlYW4gdXAgaWYgdGhpcyBjYW4gYmUgcmVvcGVuZWQgKi8KKwlpZiAoZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfVU5CT1VORCkgeworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOworCQlkYXRhLT5kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CisJCWRhdGEtPmhzX2Rlc2MuYkRlc2NyaXB0b3JUeXBlID0gMDsKKwl9CisJcHV0X2VwIChkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkLAorCQl1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CisJaW50CQkJc3RhdHVzOworCisJaWYgKChzdGF0dXMgPSBnZXRfcmVhZHlfZXAgKGZkLT5mX2ZsYWdzLCBkYXRhKSkgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpIHsKKwkJc3dpdGNoIChjb2RlKSB7CisJCWNhc2UgR0FER0VURlNfRklGT19TVEFUVVM6CisJCQlzdGF0dXMgPSB1c2JfZXBfZmlmb19zdGF0dXMgKGRhdGEtPmVwKTsKKwkJCWJyZWFrOworCQljYXNlIEdBREdFVEZTX0ZJRk9fRkxVU0g6CisJCQl1c2JfZXBfZmlmb19mbHVzaCAoZGF0YS0+ZXApOworCQkJYnJlYWs7CisJCWNhc2UgR0FER0VURlNfQ0xFQVJfSEFMVDoKKwkJCXN0YXR1cyA9IHVzYl9lcF9jbGVhcl9oYWx0IChkYXRhLT5lcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0YXR1cyA9IC1FTk9UVFk7CisJCX0KKwl9IGVsc2UKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCXVwICgmZGF0YS0+bG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQVNZTkNIUk9OT1VTIEVORFBPSU5UIEkvTyBPUEVSQVRJT05TIChidWxrL2ludHIvaXNvKSAqLworCitzdHJ1Y3Qga2lvY2JfcHJpdiB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJc3RydWN0IGVwX2RhdGEJCSplcGRhdGE7CisJdm9pZAkJCSpidWY7CisJY2hhciBfX3VzZXIJCSp1YnVmOworCXVuc2lnbmVkCQlhY3R1YWw7Cit9OworCitzdGF0aWMgaW50IGVwX2Fpb19jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW9fZXZlbnQgKmUpCit7CisJc3RydWN0IGtpb2NiX3ByaXYJKnByaXYgPSBpb2NiLT5wcml2YXRlOworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhOworCWludAkJCXZhbHVlOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwllcGRhdGEgPSBwcml2LT5lcGRhdGE7CisJLy8gc3Bpbl9sb2NrKCZlcGRhdGEtPmRldi0+bG9jayk7CisJa2lvY2JTZXRDYW5jZWxsZWQoaW9jYik7CisJaWYgKGxpa2VseShlcGRhdGEgJiYgZXBkYXRhLT5lcCAmJiBwcml2LT5yZXEpKQorCQl2YWx1ZSA9IHVzYl9lcF9kZXF1ZXVlIChlcGRhdGEtPmVwLCBwcml2LT5yZXEpOworCWVsc2UKKwkJdmFsdWUgPSAtRUlOVkFMOworCS8vIHNwaW5fdW5sb2NrKCZlcGRhdGEtPmRldi0+bG9jayk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJYWlvX3B1dF9yZXEoaW9jYik7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgc3NpemVfdCBlcF9haW9fcmVhZF9yZXRyeShzdHJ1Y3Qga2lvY2IgKmlvY2IpCit7CisJc3RydWN0IGtpb2NiX3ByaXYJKnByaXYgPSBpb2NiLT5wcml2YXRlOworCXNzaXplX3QJCQlzdGF0dXMgPSBwcml2LT5hY3R1YWw7CisKKwkvKiB3ZSAicmV0cnkiIHRvIGdldCB0aGUgcmlnaHQgbW0gY29udGV4dCBmb3IgdGhpczogKi8KKwlzdGF0dXMgPSBjb3B5X3RvX3VzZXIocHJpdi0+dWJ1ZiwgcHJpdi0+YnVmLCBwcml2LT5hY3R1YWwpOworCWlmICh1bmxpa2VseSgwICE9IHN0YXR1cykpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJZWxzZQorCQlzdGF0dXMgPSBwcml2LT5hY3R1YWw7CisJa2ZyZWUocHJpdi0+YnVmKTsKKwlrZnJlZShwcml2KTsKKwlhaW9fcHV0X3JlcShpb2NiKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlcF9haW9fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBraW9jYgkJKmlvY2IgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IGtpb2NiX3ByaXYJKnByaXYgPSBpb2NiLT5wcml2YXRlOworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhID0gcHJpdi0+ZXBkYXRhOworCisJLyogbG9jayBhZ2FpbnN0IGRpc2Nvbm5lY3QgKGFuZCBpZGVhbGx5LCBjYW5jZWwpICovCisJc3Bpbl9sb2NrKCZlcGRhdGEtPmRldi0+bG9jayk7CisJcHJpdi0+cmVxID0gTlVMTDsKKwlwcml2LT5lcGRhdGEgPSBOVUxMOworCWlmIChOVUxMID09IGlvY2ItPmtpX3JldHJ5CisJCQl8fCB1bmxpa2VseSgwID09IHJlcS0+YWN0dWFsKQorCQkJfHwgdW5saWtlbHkoa2lvY2JJc0NhbmNlbGxlZChpb2NiKSkpIHsKKwkJa2ZyZWUocmVxLT5idWYpOworCQlrZnJlZShwcml2KTsKKwkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCS8qIGFpb19jb21wbGV0ZSgpIHJlcG9ydHMgYnl0ZXMtdHJhbnNmZXJyZWQgX2FuZF8gZmF1bHRzICovCisJCWlmICh1bmxpa2VseShraW9jYklzQ2FuY2VsbGVkKGlvY2IpKSkKKwkJCWFpb19wdXRfcmVxKGlvY2IpOworCQllbHNlCisJCQlhaW9fY29tcGxldGUoaW9jYiwKKwkJCQlyZXEtPmFjdHVhbCA/IHJlcS0+YWN0dWFsIDogcmVxLT5zdGF0dXMsCisJCQkJcmVxLT5zdGF0dXMpOworCX0gZWxzZSB7CisJCS8qIHJldHJ5KCkgd29uJ3QgcmVwb3J0IGJvdGg7IHNvIHdlIGhpZGUgc29tZSBmYXVsdHMgKi8KKwkJaWYgKHVubGlrZWx5KDAgIT0gcmVxLT5zdGF0dXMpKQorCQkJREJHKGVwZGF0YS0+ZGV2LCAiJXMgZmF1bHQgJWQgbGVuICVkXG4iLAorCQkJCWVwLT5uYW1lLCByZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwpOworCisJCXByaXYtPmJ1ZiA9IHJlcS0+YnVmOworCQlwcml2LT5hY3R1YWwgPSByZXEtPmFjdHVhbDsKKwkJa2lja19pb2NiKGlvY2IpOworCX0KKwlzcGluX3VubG9jaygmZXBkYXRhLT5kZXYtPmxvY2spOworCisJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKKwlwdXRfZXAoZXBkYXRhKTsKK30KKworc3RhdGljIHNzaXplX3QKK2VwX2Fpb19yd3RhaWwoCisJc3RydWN0IGtpb2NiCSppb2NiLAorCWNoYXIJCSpidWYsCisJc2l6ZV90CQlsZW4sCisJc3RydWN0IGVwX2RhdGEJKmVwZGF0YSwKKwljaGFyIF9fdXNlcgkqdWJ1ZgorKQoreworCXN0cnVjdCBraW9jYl9wcml2CSpwcml2ID0gKHZvaWQgKikgJmlvY2ItPnByaXZhdGU7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJc3NpemVfdAkJCXZhbHVlOworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJdmFsdWUgPSAtRU5PTUVNOworZmFpbDoKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIHZhbHVlOworCX0KKwlpb2NiLT5wcml2YXRlID0gcHJpdjsKKwlwcml2LT51YnVmID0gdWJ1ZjsKKworCXZhbHVlID0gZ2V0X3JlYWR5X2VwKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MsIGVwZGF0YSk7CisJaWYgKHVubGlrZWx5KHZhbHVlIDwgMCkpIHsKKwkJa2ZyZWUocHJpdik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpb2NiLT5raV9jYW5jZWwgPSBlcF9haW9fY2FuY2VsOworCWdldF9lcChlcGRhdGEpOworCXByaXYtPmVwZGF0YSA9IGVwZGF0YTsKKwlwcml2LT5hY3R1YWwgPSAwOworCisJLyogZWFjaCBraW9jYiBpcyBjb3VwbGVkIHRvIG9uZSB1c2JfcmVxdWVzdCwgYnV0IHdlIGNhbid0CisJICogYWxsb2NhdGUgb3Igc3VibWl0IHRob3NlIGlmIHRoZSBob3N0IGRpc2Nvbm5lY3RlZC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZlcGRhdGEtPmRldi0+bG9jayk7CisJaWYgKGxpa2VseShlcGRhdGEtPmVwKSkgeworCQlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcGRhdGEtPmVwLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGxpa2VseShyZXEpKSB7CisJCQlwcml2LT5yZXEgPSByZXE7CisJCQlyZXEtPmJ1ZiA9IGJ1ZjsKKwkJCXJlcS0+bGVuZ3RoID0gbGVuOworCQkJcmVxLT5jb21wbGV0ZSA9IGVwX2Fpb19jb21wbGV0ZTsKKwkJCXJlcS0+Y29udGV4dCA9IGlvY2I7CisJCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShlcGRhdGEtPmVwLCByZXEsIEdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KDAgIT0gdmFsdWUpKQorCQkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXBkYXRhLT5lcCwgcmVxKTsKKwkJfSBlbHNlCisJCQl2YWx1ZSA9IC1FQUdBSU47CisJfSBlbHNlCisJCXZhbHVlID0gLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnEoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCXVwKCZlcGRhdGEtPmxvY2spOworCisJaWYgKHVubGlrZWx5KHZhbHVlKSkgeworCQlrZnJlZShwcml2KTsKKwkJcHV0X2VwKGVwZGF0YSk7CisJfSBlbHNlCisJCXZhbHVlID0gLUVJT0NCUVVFVUVEOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHNzaXplX3QKK2VwX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sIGxvZmZfdCBvKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhID0gaW9jYi0+a2lfZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIJCQkqYnVmOworCisJaWYgKHVubGlrZWx5KGVwZGF0YS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWJ1ZikpCisJCXJldHVybiAtRU5PTUVNOworCWlvY2ItPmtpX3JldHJ5ID0gZXBfYWlvX3JlYWRfcmV0cnk7CisJcmV0dXJuIGVwX2Fpb19yd3RhaWwoaW9jYiwgYnVmLCBsZW4sIGVwZGF0YSwgdWJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcF9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90IG8pCit7CisJc3RydWN0IGVwX2RhdGEJCSplcGRhdGEgPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CisJY2hhcgkJCSpidWY7CisKKwlpZiAodW5saWtlbHkoIShlcGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghYnVmKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKGJ1ZiwgdWJ1ZiwgbGVuKSAhPSAwKSkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIGVwX2Fpb19yd3RhaWwoaW9jYiwgYnVmLCBsZW4sIGVwZGF0YSwgTlVMTCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHVzZWQgYWZ0ZXIgZW5kcG9pbnQgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCisJLnJlYWQgPQkJZXBfcmVhZCwKKwkud3JpdGUgPQllcF93cml0ZSwKKwkuaW9jdGwgPQllcF9pb2N0bCwKKwkucmVsZWFzZSA9CWVwX3JlbGVhc2UsCisKKwkuYWlvX3JlYWQgPQllcF9haW9fcmVhZCwKKwkuYWlvX3dyaXRlID0JZXBfYWlvX3dyaXRlLAorfTsKKworLyogRU5EUE9JTlQgSU5JVElBTElaQVRJT04KKyAqCisgKiAgICAgZmQgPSBvcGVuICgiL2Rldi9nYWRnZXQvJEVORFBPSU5UIiwgT19SRFdSKQorICogICAgIHN0YXR1cyA9IHdyaXRlIChmZCwgZGVzY3JpcHRvcnMsIHNpemVvZiBkZXNjcmlwdG9ycykKKyAqCisgKiBUaGF0IHdyaXRlIGVzdGFibGlzaGVzIHRoZSBlbmRwb2ludCBjb25maWd1cmF0aW9uLCBjb25maWd1cmluZworICogdGhlIGNvbnRyb2xsZXIgdG8gcHJvY2VzcyBidWxrLCBpbnRlcnJ1cHQsIG9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycworICogYXQgdGhlIHJpZ2h0IG1heHBhY2tldCBzaXplLCBhbmQgc28gb24uCisgKgorICogVGhlIGRlc2NyaXB0b3JzIGFyZSBtZXNzYWdlIHR5cGUgMSwgaWRlbnRpZmllZCBieSBhIGhvc3Qgb3JkZXIgdTMyCisgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHdoYXQncyB3cml0dGVuLiAgRGVzY3JpcHRvciBvcmRlciBpczogZnVsbC9sb3cKKyAqIHNwZWVkIGRlc2NyaXB0b3IsIHRoZW4gb3B0aW9uYWwgaGlnaCBzcGVlZCBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgc3NpemVfdAorZXBfY29uZmlnIChzdHJ1Y3QgZmlsZSAqZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXUzMgkJCXRhZzsKKwlpbnQJCQl2YWx1ZTsKKworCWlmICgodmFsdWUgPSBkb3duX2ludGVycnVwdGlibGUgKCZkYXRhLT5sb2NrKSkgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwlpZiAoZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfUkVBRFkpIHsKKwkJdmFsdWUgPSAtRUwySExUOworCQlnb3RvIGZhaWw7CisJfQorCisJdmFsdWUgPSBsZW47CisJaWYgKGxlbiA8IFVTQl9EVF9FTkRQT0lOVF9TSVpFICsgNCkKKwkJZ290byBmYWlsMDsKKworCS8qIHdlIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIG1lc3NhZ2UgZm9ybWF0IHNvbWVkYXkgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIgKCZ0YWcsIGJ1ZiwgNCkpIHsKKwkJZ290byBmYWlsMTsKKwl9CisJaWYgKHRhZyAhPSAxKSB7CisJCURCRyhkYXRhLT5kZXYsICJjb25maWcgJXMsIGJhZCB0YWcgJWRcbiIsIGRhdGEtPm5hbWUsIHRhZyk7CisJCWdvdG8gZmFpbDA7CisJfQorCWJ1ZiArPSA0OworCWxlbiAtPSA0OworCisJLyogTk9URTogIGF1ZGlvIGVuZHBvaW50IGV4dGVuc2lvbnMgbm90IGFjY2VwdGVkIGhlcmU7CisJICoganVzdCBkb24ndCBpbmNsdWRlIHRoZSBleHRyYSBieXRlcy4KKwkgKi8KKworCS8qIGZ1bGwvbG93IHNwZWVkIGRlc2NyaXB0b3IsIHRoZW4gaGlnaCBzcGVlZCAqLworCWlmIChjb3B5X2Zyb21fdXNlciAoJmRhdGEtPmRlc2MsIGJ1ZiwgVVNCX0RUX0VORFBPSU5UX1NJWkUpKSB7CisJCWdvdG8gZmFpbDE7CisJfQorCWlmIChkYXRhLT5kZXNjLmJMZW5ndGggIT0gVVNCX0RUX0VORFBPSU5UX1NJWkUKKwkJCXx8IGRhdGEtPmRlc2MuYkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVCkKKwkJZ290byBmYWlsMDsKKwlpZiAobGVuICE9IFVTQl9EVF9FTkRQT0lOVF9TSVpFKSB7CisJCWlmIChsZW4gIT0gMiAqIFVTQl9EVF9FTkRQT0lOVF9TSVpFKQorCQkJZ290byBmYWlsMDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyICgmZGF0YS0+aHNfZGVzYywgYnVmICsgVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJCQkJCVVTQl9EVF9FTkRQT0lOVF9TSVpFKSkgeworCQkJZ290byBmYWlsMTsKKwkJfQorCQlpZiAoZGF0YS0+aHNfZGVzYy5iTGVuZ3RoICE9IFVTQl9EVF9FTkRQT0lOVF9TSVpFCisJCQkJfHwgZGF0YS0+aHNfZGVzYy5iRGVzY3JpcHRvclR5cGUKKwkJCQkJIT0gVVNCX0RUX0VORFBPSU5UKSB7CisJCQlEQkcoZGF0YS0+ZGV2LCAiY29uZmlnICVzLCBiYWQgaHMgbGVuZ3RoIG9yIHR5cGVcbiIsCisJCQkJCWRhdGEtPm5hbWUpOworCQkJZ290byBmYWlsMDsKKwkJfQorCX0KKwl2YWx1ZSA9IGxlbjsKKworCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCWlmIChkYXRhLT5kZXYtPnN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CisJCXZhbHVlID0gLUVOT0VOVDsKKwkJZ290byBnb25lOworCX0gZWxzZSBpZiAoKGVwID0gZGF0YS0+ZXApID09IE5VTEwpIHsKKwkJdmFsdWUgPSAtRU5PREVWOworCQlnb3RvIGdvbmU7CisJfQorCXN3aXRjaCAoZGF0YS0+ZGV2LT5nYWRnZXQtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5kZXNjKTsKKwkJaWYgKHZhbHVlID09IDApCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0VOQUJMRUQ7CisJCWJyZWFrOworI2lmZGVmCUhJR0hTUEVFRAorCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCS8qIGZhaWxzIGlmIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSB0aGF0IGRlc2NyaXB0b3IuLi4gKi8KKwkJdmFsdWUgPSB1c2JfZXBfZW5hYmxlIChlcCwgJmRhdGEtPmhzX2Rlc2MpOworCQlpZiAodmFsdWUgPT0gMCkKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfRU5BQkxFRDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlEQkcgKGRhdGEtPmRldiwgInVuY29ubmVjdGVkLCAlcyBpbml0IGRlZmVycmVkXG4iLAorCQkJCWRhdGEtPm5hbWUpOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0RFRkVSX0VOQUJMRTsKKwl9CisJaWYgKHZhbHVlID09IDApCisJCWZkLT5mX29wID0gJmVwX2lvX29wZXJhdGlvbnM7Citnb25lOgorCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJaWYgKHZhbHVlIDwgMCkgeworZmFpbDoKKwkJZGF0YS0+ZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOworCQlkYXRhLT5oc19kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CisJfQorCXVwICgmZGF0YS0+bG9jayk7CisJcmV0dXJuIHZhbHVlOworZmFpbDA6CisJdmFsdWUgPSAtRUlOVkFMOworCWdvdG8gZmFpbDsKK2ZhaWwxOgorCXZhbHVlID0gLUVGQVVMVDsKKwlnb3RvIGZhaWw7Cit9CisKK3N0YXRpYyBpbnQKK2VwX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWludAkJCXZhbHVlID0gLUVCVVNZOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRhdGEtPmxvY2spICE9IDApCisJCXJldHVybiAtRUlOVFI7CisJc3Bpbl9sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJaWYgKGRhdGEtPmRldi0+c3RhdGUgPT0gU1RBVEVfREVWX1VOQk9VTkQpCisJCXZhbHVlID0gLUVOT0VOVDsKKwllbHNlIGlmIChkYXRhLT5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgeworCQl2YWx1ZSA9IDA7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfUkVBRFk7CisJCWdldF9lcCAoZGF0YSk7CisJCWZkLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCQlWREVCVUcgKGRhdGEtPmRldiwgIiVzIHJlYWR5XG4iLCBkYXRhLT5uYW1lKTsKKwl9IGVsc2UKKwkJREJHIChkYXRhLT5kZXYsICIlcyBzdGF0ZSAlZFxuIiwKKwkJCWRhdGEtPm5hbWUsIGRhdGEtPnN0YXRlKTsKKwlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCXVwICgmZGF0YS0+bG9jayk7CisJcmV0dXJuIHZhbHVlOworfQorCisvKiB1c2VkIGJlZm9yZSBlbmRwb2ludCBjb25maWd1cmF0aW9uICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9jb25maWdfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCisJLm9wZW4gPQkJZXBfb3BlbiwKKwkud3JpdGUgPQllcF9jb25maWcsCisJLnJlbGVhc2UgPQllcF9yZWxlYXNlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRVAwIElNUExFTUVOVEFUSU9OIGNhbiBiZSBwYXJ0bHkgaW4gdXNlcnNwYWNlLgorICoKKyAqIERyaXZlcnMgdGhhdCB1c2UgdGhpcyBmYWNpbGl0eSByZWNlaXZlIHZhcmlvdXMgZXZlbnRzLCBpbmNsdWRpbmcKKyAqIGNvbnRyb2wgcmVxdWVzdHMgdGhlIGtlcm5lbCBkb2Vzbid0IGhhbmRsZS4gIERyaXZlcnMgdGhhdCBkb24ndAorICogdXNlIHRoaXMgZmFjaWxpdHkgbWF5IGJlIHRvbyBzaW1wbGUtbWluZGVkIGZvciByZWFsIGFwcGxpY2F0aW9ucy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZXAwX3JlYWRhYmxlIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKK3sKKwl3YWtlX3VwICgmZGV2LT53YWl0KTsKKwlraWxsX2Zhc3luYyAoJmRldi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFuX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKworCWlmIChyZXEtPmJ1ZiAhPSBkZXYtPnJidWYpIHsKKwkJdXNiX2VwX2ZyZWVfYnVmZmVyIChlcCwgcmVxLT5idWYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCk7CisJCXJlcS0+YnVmID0gZGV2LT5yYnVmOworCQlyZXEtPmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJfQorCXJlcS0+Y29tcGxldGUgPSBlcGlvX2NvbXBsZXRlOworCWRldi0+c2V0dXBfb3V0X3JlYWR5ID0gMDsKK30KKworc3RhdGljIHZvaWQgZXAwX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJCWZyZWUgPSAxOworCisJLyogZm9yIGNvbnRyb2wgT1VULCBkYXRhIG11c3Qgc3RpbGwgZ2V0IHRvIHVzZXJzcGFjZSAqLworCWlmICghZGV2LT5zZXR1cF9pbikgeworCQlkZXYtPnNldHVwX291dF9lcnJvciA9IChyZXEtPnN0YXR1cyAhPSAwKTsKKwkJaWYgKCFkZXYtPnNldHVwX291dF9lcnJvcikKKwkJCWZyZWUgPSAwOworCQlkZXYtPnNldHVwX291dF9yZWFkeSA9IDE7CisJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwl9IGVsc2UgaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfU0VUVVApCisJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisKKwkvKiBjbGVhbiB1cCBhcyBhcHByb3ByaWF0ZSAqLworCWlmIChmcmVlICYmIHJlcS0+YnVmICE9ICZkZXYtPnJidWYpCisJCWNsZWFuX3JlcSAoZXAsIHJlcSk7CisJcmVxLT5jb21wbGV0ZSA9IGVwaW9fY29tcGxldGU7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcmVxIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIHUxNiBsZW4pCit7CisJc3RydWN0IGRldl9kYXRhCSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoZGV2LT5zZXR1cF9vdXRfcmVhZHkpIHsKKwkJREJHIChkZXYsICJlcDAgcmVxdWVzdCBidXN5IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChsZW4gPiBzaXplb2YgKGRldi0+cmJ1ZikpCisJCXJlcS0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlciAoZXAsIGxlbiwgJnJlcS0+ZG1hLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVxLT5idWYgPT0gMCkgeworCQlyZXEtPmJ1ZiA9IGRldi0+cmJ1ZjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJlcS0+Y29tcGxldGUgPSBlcDBfY29tcGxldGU7CisJcmVxLT5sZW5ndGggPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcDBfcmVhZCAoc3RydWN0IGZpbGUgKmZkLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90CQkJCXJldHZhbDsKKwllbnVtIGVwMF9zdGF0ZQkJCXN0YXRlOworCisJc3Bpbl9sb2NrX2lycSAoJmRldi0+bG9jayk7CisKKwkvKiByZXBvcnQgZmQgbW9kZSBjaGFuZ2UgYmVmb3JlIGFjdGluZyBvbiBpdCAqLworCWlmIChkZXYtPnNldHVwX2Fib3J0KSB7CisJCWRldi0+c2V0dXBfYWJvcnQgPSAwOworCQlyZXR2YWwgPSAtRUlEUk07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjb250cm9sIERBVEEgc3RhZ2UgKi8KKwlpZiAoKHN0YXRlID0gZGV2LT5zdGF0ZSkgPT0gU1RBVEVfU0VUVVApIHsKKworCQlpZiAoZGV2LT5zZXR1cF9pbikgewkJLyogc3RhbGwgSU4gKi8KKwkJCVZERUJVRyhkZXYsICJlcDBpbiBzdGFsbFxuIik7CisJCQkodm9pZCkgdXNiX2VwX3NldF9oYWx0IChkZXYtPmdhZGdldC0+ZXAwKTsKKwkJCXJldHZhbCA9IC1FTDJITFQ7CisJCQlkZXYtPnN0YXRlID0gU1RBVEVfQ09OTkVDVEVEOworCisJCX0gZWxzZSBpZiAobGVuID09IDApIHsJCS8qIGFjayBTRVRfQ09ORklHVVJBVElPTiBldGMgKi8KKwkJCXN0cnVjdCB1c2JfZXAJCSplcCA9IGRldi0+Z2FkZ2V0LT5lcDA7CisJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGRldi0+cmVxOworCisJCQlpZiAoKHJldHZhbCA9IHNldHVwX3JlcSAoZXAsIHJlcSwgMCkpID09IDApCisJCQkJcmV0dmFsID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisKKwkJCS8qIGFzc3VtZSB0aGF0IHdhcyBTRVRfQ09ORklHVVJBVElPTiAqLworCQkJaWYgKGRldi0+Y3VycmVudF9jb25maWcpIHsKKwkJCQl1bnNpZ25lZCBwb3dlcjsKKyNpZmRlZglISUdIU1BFRUQKKwkJCQlpZiAoZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJCQlwb3dlciA9IGRldi0+aHNfY29uZmlnLT5iTWF4UG93ZXI7CisJCQkJZWxzZQorI2VuZGlmCisJCQkJCXBvd2VyID0gZGV2LT5jb25maWctPmJNYXhQb3dlcjsKKwkJCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtPmdhZGdldCwgMiAqIHBvd2VyKTsKKwkJCX0KKworCQl9IGVsc2UgewkJCS8qIGNvbGxlY3QgT1VUIGRhdGEgKi8KKwkJCWlmICgoZmQtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAhPSAwCisJCQkJCSYmICFkZXYtPnNldHVwX291dF9yZWFkeSkgeworCQkJCXJldHZhbCA9IC1FQUdBSU47CisJCQkJZ290byBkb25lOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoZGV2LT53YWl0LAorCQkJCQlkZXYtPnNldHVwX291dF9yZWFkeSAhPSAwKTsKKworCQkJLyogRklYTUUgc3RhdGUgY291bGQgY2hhbmdlIGZyb20gdW5kZXIgdXMgKi8KKwkJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQlpZiAoZGV2LT5zZXR1cF9vdXRfZXJyb3IpCisJCQkJcmV0dmFsID0gLUVJTzsKKwkJCWVsc2UgeworCQkJCWxlbiA9IG1pbiAobGVuLCAoc2l6ZV90KWRldi0+cmVxLT5hY3R1YWwpOworLy8gRklYTUUgZG9uJ3QgY2FsbCB0aGlzIHdpdGggdGhlIHNwaW5sb2NrIGhlbGQgLi4uCisJCQkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCAmZGV2LT5yZXEtPmJ1ZiwgbGVuKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQljbGVhbl9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJCQkvKiBOT1RFIHVzZXJzcGFjZSBjYW4ndCB5ZXQgY2hvb3NlIHRvIHN0YWxsICovCisJCQl9CisJCX0KKwkJZ290byBkb25lOworCX0KKworCS8qIGVsc2Ugbm9ybWFsOiByZXR1cm4gZXZlbnQgZGF0YSAqLworCWlmIChsZW4gPCBzaXplb2YgZGV2LT5ldmVudCBbMF0pIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKwlsZW4gLT0gbGVuICUgc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KTsKKwlkZXYtPnVzZXJtb2RlX3NldHVwID0gMTsKKworc2NhbjoKKwkvKiByZXR1cm4gcXVldWVkIGV2ZW50cyByaWdodCBhd2F5ICovCisJaWYgKGRldi0+ZXZfbmV4dCAhPSAwKSB7CisJCXVuc2lnbmVkCQlpLCBuOworCQlpbnQJCQl0bXAgPSBkZXYtPmV2X25leHQ7CisKKwkJbGVuID0gbWluIChsZW4sIHRtcCAqIHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCkpOworCQluID0gbGVuIC8gc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KTsKKworCQkvKiBlcDAgY2FuJ3QgZGVsaXZlciBldmVudHMgd2hlbiBTVEFURV9TRVRVUCAqLworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoZGV2LT5ldmVudCBbaV0udHlwZSA9PSBHQURHRVRGU19TRVRVUCkgeworCQkJCWxlbiA9IG4gPSBpICsgMTsKKwkJCQlsZW4gKj0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KTsKKwkJCQluID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCQlpZiAoY29weV90b191c2VyIChidWYsICZkZXYtPmV2ZW50LCBsZW4pKQorCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0dmFsID0gbGVuOworCQlpZiAobGVuID4gMCkgeworCQkJbGVuIC89IHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCk7CisKKwkJCS8qIE5PVEUgdGhpcyBkb2Vzbid0IGd1YXJkIGFnYWluc3QgYnJva2VuIGRyaXZlcnM7CisJCQkgKiBjb25jdXJyZW50IGVwMCByZWFkZXJzIG1heSBsb3NlIGV2ZW50cy4KKwkJCSAqLworCQkJc3Bpbl9sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCQlkZXYtPmV2X25leHQgLT0gbGVuOworCQkJaWYgKGRldi0+ZXZfbmV4dCAhPSAwKQorCQkJCW1lbW1vdmUgKCZkZXYtPmV2ZW50LCAmZGV2LT5ldmVudCBbbGVuXSwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KQorCQkJCQkJKiAodG1wIC0gbGVuKSk7CisJCQlpZiAobiA9PSAwKQorCQkJCWRldi0+c3RhdGUgPSBTVEFURV9TRVRVUDsKKwkJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCX0KKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKGZkLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlyZXR2YWwgPSAtRUFHQUlOOworCQlnb3RvIGRvbmU7CisJfQorCisJc3dpdGNoIChzdGF0ZSkgeworCWRlZmF1bHQ6CisJCURCRyAoZGV2LCAiZmFpbCAlcywgc3RhdGUgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdGUpOworCQlyZXR2YWwgPSAtRVNSQ0g7CisJCWJyZWFrOworCWNhc2UgU1RBVEVfVU5DT05ORUNURUQ6CisJY2FzZSBTVEFURV9DT05ORUNURUQ6CisJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCURCRyAoZGV2LCAiJXMgd2FpdFxuIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiB3YWl0IGZvciBldmVudHMgKi8KKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChkZXYtPndhaXQsCisJCQkJZGV2LT5ldl9uZXh0ICE9IDApOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQlnb3RvIHNjYW47CisJfQorCitkb25lOgorCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQgKgorbmV4dF9ldmVudCAoc3RydWN0IGRldl9kYXRhICpkZXYsIGVudW0gdXNiX2dhZGdldGZzX2V2ZW50X3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50CSpldmVudDsKKwl1bnNpZ25lZAkJCWk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwkvKiB0aGVzZSBldmVudHMgcHVyZ2UgdGhlIHF1ZXVlICovCisJY2FzZSBHQURHRVRGU19ESVNDT05ORUNUOgorCQlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9TRVRVUCkKKwkJCWRldi0+c2V0dXBfYWJvcnQgPSAxOworCQkvLyBGQUxMIFRIUk9VR0gKKwljYXNlIEdBREdFVEZTX0NPTk5FQ1Q6CisJCWRldi0+ZXZfbmV4dCA9IDA7CisJCWJyZWFrOworCWNhc2UgR0FER0VURlNfU0VUVVA6CQkvKiBwcmV2aW91cyByZXF1ZXN0IHRpbWVkIG91dCAqLworCWNhc2UgR0FER0VURlNfU1VTUEVORDoJCS8qIHNhbWUgZWZmZWN0ICovCisJCS8qIHRoZXNlIGV2ZW50cyBjYW4ndCBiZSByZXBlYXRlZCAqLworCQlmb3IgKGkgPSAwOyBpICE9IGRldi0+ZXZfbmV4dDsgaSsrKSB7CisJCQlpZiAoZGV2LT5ldmVudCBbaV0udHlwZSAhPSB0eXBlKQorCQkJCWNvbnRpbnVlOworCQkJREJHIChkZXYsICJkaXNjYXJkIG9sZCBldmVudCAlZFxuIiwgdHlwZSk7CisJCQlkZXYtPmV2X25leHQtLTsKKwkJCWlmIChpID09IGRldi0+ZXZfbmV4dCkKKwkJCQlicmVhazsKKwkJCS8qIGluZGljZXMgc3RhcnQgYXQgemVybywgZm9yIHNpbXBsaWNpdHkgKi8KKwkJCW1lbW1vdmUgKCZkZXYtPmV2ZW50IFtpXSwgJmRldi0+ZXZlbnQgW2kgKyAxXSwKKwkJCQlzaXplb2YgKHN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQpCisJCQkJCSogKGRldi0+ZXZfbmV4dCAtIGkpKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcgKCk7CisJfQorCWV2ZW50ID0gJmRldi0+ZXZlbnQgW2Rldi0+ZXZfbmV4dCsrXTsKKwlCVUdfT04gKGRldi0+ZXZfbmV4dCA+IE5fRVZFTlQpOworCVZERUJVRyAoZGV2LCAiZXYgJWQsIG5leHQgJWRcbiIsIHR5cGUsIGRldi0+ZXZfbmV4dCk7CisJbWVtc2V0IChldmVudCwgMCwgc2l6ZW9mICpldmVudCk7CisJZXZlbnQtPnR5cGUgPSB0eXBlOworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHNzaXplX3QKK2VwMF93cml0ZSAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QJCQlyZXR2YWwgPSAtRVNSQ0g7CisKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKworCS8qIHJlcG9ydCBmZCBtb2RlIGNoYW5nZSBiZWZvcmUgYWN0aW5nIG9uIGl0ICovCisJaWYgKGRldi0+c2V0dXBfYWJvcnQpIHsKKwkJZGV2LT5zZXR1cF9hYm9ydCA9IDA7CisJCXJldHZhbCA9IC1FSURSTTsKKworCS8qIGRhdGEgYW5kL29yIHN0YXR1cyBzdGFnZSBmb3IgY29udHJvbCByZXF1ZXN0ICovCisJfSBlbHNlIGlmIChkZXYtPnN0YXRlID09IFNUQVRFX1NFVFVQKSB7CisKKwkJLyogSU4gREFUQStTVEFUVVMgY2FsbGVyIG1ha2VzIGxlbiA8PSB3TGVuZ3RoICovCisJCWlmIChkZXYtPnNldHVwX2luKSB7CisJCQlyZXR2YWwgPSBzZXR1cF9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxLCBsZW4pOworCQkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIgKGRldi0+cmVxLT5idWYsIGJ1ZiwgbGVuKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSAoCisJCQkJCQlkZXYtPmdhZGdldC0+ZXAwLCBkZXYtPnJlcSwKKwkJCQkJCUdGUF9LRVJORUwpOworCQkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQkJCQljbGVhbl9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCQl9IGVsc2UKKwkJCQkJcmV0dmFsID0gbGVuOworCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKworCQkvKiBjYW4gc3RhbGwgc29tZSBPVVQgdHJhbnNmZXJzICovCisJCX0gZWxzZSBpZiAoZGV2LT5zZXR1cF9jYW5fc3RhbGwpIHsKKwkJCVZERUJVRyhkZXYsICJlcDBvdXQgc3RhbGxcbiIpOworCQkJKHZvaWQpIHVzYl9lcF9zZXRfaGFsdCAoZGV2LT5nYWRnZXQtPmVwMCk7CisJCQlyZXR2YWwgPSAtRUwySExUOworCQkJZGV2LT5zdGF0ZSA9IFNUQVRFX0NPTk5FQ1RFRDsKKwkJfSBlbHNlIHsKKwkJCURCRyhkZXYsICJib2d1cyBlcDBvdXQgc3RhbGwhXG4iKTsKKwkJfQorCX0gZWxzZQorCQlEQkcgKGRldiwgImZhaWwgJXMsIHN0YXRlICVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+c3RhdGUpOworCisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CitlcDBfZmFzeW5jIChpbnQgZiwgc3RydWN0IGZpbGUgKmZkLCBpbnQgb24pCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwkvLyBjYWxsZXIgbXVzdCBGX1NFVE9XTiBiZWZvcmUgc2lnbmFsIGRlbGl2ZXJ5IGhhcHBlbnMKKwlWREVCVUcgKGRldiwgIiVzICVzXG4iLCBfX0ZVTkNUSU9OX18sIG9uID8gIm9uIiA6ICJvZmYiKTsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlciAoZiwgZmQsIG9uLCAmZGV2LT5mYXN5bmMpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlcjsKKworc3RhdGljIGludAorZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBmZC0+cHJpdmF0ZV9kYXRhOworCisJLyogY2xvc2luZyBlcDAgPT09IHNodXRkb3duIGFsbCAqLworCisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoJmdhZGdldGZzX2RyaXZlcik7CisKKwkvKiBhdCB0aGlzIHBvaW50ICJnb29kIiBoYXJkd2FyZSBoYXMgZGlzY29ubmVjdGVkIHRoZQorCSAqIGRldmljZSBmcm9tIFVTQjsgdGhlIGhvc3Qgd29uJ3Qgc2VlIGl0IGFueSBtb3JlLgorCSAqIGFsdGVybmF0aXZlbHksIGFsbCBob3N0IHJlcXVlc3RzIHdpbGwgdGltZSBvdXQuCisJICovCisKKwlmYXN5bmNfaGVscGVyICgtMSwgZmQsIDAsICZkZXYtPmZhc3luYyk7CisJa2ZyZWUgKGRldi0+YnVmKTsKKwlkZXYtPmJ1ZiA9IE5VTEw7CisJcHV0X2RldiAoZGV2KTsKKworCS8qIG90aGVyIGVuZHBvaW50cyB3ZXJlIGFsbCBkZWNvdXBsZWQgZnJvbSB0aGlzIGRldmljZSAqLworCWRldi0+c3RhdGUgPSBTVEFURV9ERVZfRElTQUJMRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGV2X2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQsCisJCXVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlpZiAoZ2FkZ2V0LT5vcHMtPmlvY3RsKQorCQlyZXR1cm4gZ2FkZ2V0LT5vcHMtPmlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTsKKwlyZXR1cm4gLUVOT1RUWTsKK30KKworLyogdXNlZCBhZnRlciBkZXZpY2UgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX2lvX29wZXJhdGlvbnMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKworCS5yZWFkID0JCWVwMF9yZWFkLAorCS53cml0ZSA9CWVwMF93cml0ZSwKKwkuZmFzeW5jID0JZXAwX2Zhc3luYywKKwkvLyAucG9sbCA9CWVwMF9wb2xsLAorCS5pb2N0bCA9CWRldl9pb2N0bCwKKwkucmVsZWFzZSA9CWRldl9yZWxlYXNlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhlIGluLWtlcm5lbCBnYWRnZXQgZHJpdmVyIGhhbmRsZXMgbW9zdCBlcDAgaXNzdWVzLCBpbiBwYXJ0aWN1bGFyCisgKiBlbnVtZXJhdGluZyB0aGUgc2luZ2xlIGNvbmZpZ3VyYXRpb24gKGFzIHByb3ZpZGVkIGZyb20gdXNlciBzcGFjZSkuCisgKgorICogVW5yZWNvZ25pemVkIGVwMCByZXF1ZXN0cyBtYXkgYmUgaGFuZGxlZCBpbiB1c2VyIHNwYWNlLgorICovCisKKyNpZmRlZglISUdIU1BFRUQKK3N0YXRpYyB2b2lkIG1ha2VfcXVhbGlmaWVyIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCQlxdWFsOworCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IJCSpkZXNjOworCisJcXVhbC5iTGVuZ3RoID0gc2l6ZW9mIHF1YWw7CisJcXVhbC5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjsKKwlxdWFsLmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisKKwlkZXNjID0gZGV2LT5kZXY7CisJcXVhbC5iRGV2aWNlQ2xhc3MgPSBkZXNjLT5iRGV2aWNlQ2xhc3M7CisJcXVhbC5iRGV2aWNlU3ViQ2xhc3MgPSBkZXNjLT5iRGV2aWNlU3ViQ2xhc3M7CisJcXVhbC5iRGV2aWNlUHJvdG9jb2wgPSBkZXNjLT5iRGV2aWNlUHJvdG9jb2w7CisKKwkvKiBhc3N1bWVzIGVwMCB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciBib3RoIHNwZWVkcyAuLi4gKi8KKwlxdWFsLmJNYXhQYWNrZXRTaXplMCA9IGRlc2MtPmJNYXhQYWNrZXRTaXplMDsKKworCXF1YWwuYk51bUNvbmZpZ3VyYXRpb25zID0gMTsKKwlxdWFsLmJSRVNFUlZFRCA9IDA7CisKKwltZW1jcHkgKGRldi0+cmJ1ZiwgJnF1YWwsIHNpemVvZiBxdWFsKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50Citjb25maWdfYnVmIChzdHJ1Y3QgZGV2X2RhdGEgKmRldiwgdTggdHlwZSwgdW5zaWduZWQgaW5kZXgpCit7CisJaW50CQlsZW47CisjaWZkZWYgSElHSFNQRUVECisJaW50CQloczsKKyNlbmRpZgorCisJLyogb25seSBvbmUgY29uZmlndXJhdGlvbiAqLworCWlmIChpbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgSElHSFNQRUVECisJaHMgPSAoZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKTsKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlocyA9ICFoczsKKwlpZiAoaHMpIHsKKwkJZGV2LT5yZXEtPmJ1ZiA9IGRldi0+aHNfY29uZmlnOworCQlsZW4gPSBsZTE2X3RvX2NwdXAgKCZkZXYtPmhzX2NvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJZGV2LT5yZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOworCQlsZW4gPSBsZTE2X3RvX2NwdXAgKCZkZXYtPmNvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwl9CisJKCh1OCAqKWRldi0+cmVxLT5idWYpIFsxXSA9IHR5cGU7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAorZ2FkZ2V0ZnNfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGRldl9kYXRhCQkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBkZXYtPnJlcTsKKwlpbnQJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50CSpldmVudDsKKwl1MTYJCQkJd192YWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYJCQkJd19sZW5ndGggPSBjdHJsLT53TGVuZ3RoOworCisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwlkZXYtPnNldHVwX2Fib3J0ID0gMDsKKwlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9VTkNPTk5FQ1RFRCkgeworCQlzdHJ1Y3QgdXNiX2VwCSplcDsKKwkJc3RydWN0IGVwX2RhdGEJKmRhdGE7CisKKwkJZGV2LT5zdGF0ZSA9IFNUQVRFX0NPTk5FQ1RFRDsKKwkJZGV2LT5kZXYtPmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisKKyNpZmRlZglISUdIU1BFRUQKKwkJaWYgKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggJiYgZGV2LT5oc19jb25maWcgPT0gMCkgeworCQkJRVJST1IgKGRldiwgIm5vIGhpZ2ggc3BlZWQgY29uZmlnPz9cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyNlbmRpZgkvKiBISUdIU1BFRUQgKi8KKworCQlJTkZPIChkZXYsICJjb25uZWN0ZWRcbiIpOworCQlldmVudCA9IG5leHRfZXZlbnQgKGRldiwgR0FER0VURlNfQ09OTkVDVCk7CisJCWV2ZW50LT51LnNwZWVkID0gZ2FkZ2V0LT5zcGVlZDsKKwkJZXAwX3JlYWRhYmxlIChkZXYpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCQlkYXRhID0gZXAtPmRyaXZlcl9kYXRhOworCQkJLyogLi4uIGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spIC4uLiAqLworCQkJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX0RFRkVSX0VOQUJMRSkKKwkJCQljb250aW51ZTsKKyNpZmRlZglISUdIU1BFRUQKKwkJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5oc19kZXNjKTsKKwkJCWVsc2UKKyNlbmRpZgkvKiBISUdIU1BFRUQgKi8KKwkJCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+ZGVzYyk7CisJCQlpZiAodmFsdWUpIHsKKwkJCQlFUlJPUiAoZGV2LCAiZGVmZXJyZWQgJXMgZW5hYmxlIC0tPiAlZFxuIiwKKwkJCQkJZGF0YS0+bmFtZSwgdmFsdWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9FTkFCTEVEOworCQkJd2FrZV91cCAoJmRhdGEtPndhaXQpOworCQkJREJHIChkZXYsICJ3b2tlIHVwICVzIHdhaXRlcnNcbiIsIGRhdGEtPm5hbWUpOworCQl9CisKKwkvKiBob3N0IG1heSBoYXZlIGdpdmVuIHVwIHdhaXRpbmcgZm9yIHJlc3BvbnNlLiAgd2UgY2FuIG1pc3MgY29udHJvbAorCSAqIHJlcXVlc3RzIGhhbmRsZWQgbG93ZXIgZG93biAoZGV2aWNlL2VuZHBvaW50IHN0YXR1cyBhbmQgZmVhdHVyZXMpOworCSAqIHRoZW4gZXAwX3tyZWFkLHdyaXRlfSB3aWxsIHJlcG9ydCB0aGUgd3Jvbmcgc3RhdHVzLiBjb250cm9sbGVyCisJICogZHJpdmVyIHdpbGwgaGF2ZSBhYm9ydGVkIHBlbmRpbmcgaS9vLgorCSAqLworCX0gZWxzZSBpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9TRVRVUCkKKwkJZGV2LT5zZXR1cF9hYm9ydCA9IDE7CisKKwlyZXEtPmJ1ZiA9IGRldi0+cmJ1ZjsKKwlyZXEtPmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJcmVxLT5jb250ZXh0ID0gTlVMTDsKKwl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQorCQkJZ290byB1bnJlY29nbml6ZWQ7CisJCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgKmRldi0+ZGV2KTsKKwkJCXJlcS0+YnVmID0gZGV2LT5kZXY7CisJCQlicmVhazsKKyNpZmRlZglISUdIU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCWlmICghZGV2LT5oc19jb25maWcpCisJCQkJYnJlYWs7CisJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpCisJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSk7CisJCQltYWtlX3F1YWxpZmllciAoZGV2KTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQkvLyBGQUxMVEhST1VHSAorI2VuZGlmCisJCWNhc2UgVVNCX0RUX0NPTkZJRzoKKwkJCXZhbHVlID0gY29uZmlnX2J1ZiAoZGV2LAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RUX1NUUklORzoKKwkJCWdvdG8gdW5yZWNvZ25pemVkOworCisJCWRlZmF1bHQ6CQkvLyBhbGwgb3RoZXJzIGFyZSBlcnJvcnMKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJLyogY3VycmVudGx5IG9uZSBjb25maWcsIHR3byBzcGVlZHMgKi8KKwljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gMCkKKwkJCWJyZWFrOworCQlpZiAoMCA9PSAodTgpIHdfdmFsdWUpIHsKKwkJCXZhbHVlID0gMDsKKwkJCWRldi0+Y3VycmVudF9jb25maWcgPSAwOworCQkJdXNiX2dhZGdldF92YnVzX2RyYXcoZ2FkZ2V0LCA4IC8qIG1BICovICk7CisJCQkvLyB1c2VyIG1vZGUgZXhwZWN0ZWQgdG8gZGlzYWJsZSBlbmRwb2ludHMKKwkJfSBlbHNlIHsKKwkJCXU4CWNvbmZpZywgcG93ZXI7CisjaWZkZWYJSElHSFNQRUVECisJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJCWNvbmZpZyA9IGRldi0+aHNfY29uZmlnLT5iQ29uZmlndXJhdGlvblZhbHVlOworCQkJCXBvd2VyID0gZGV2LT5oc19jb25maWctPmJNYXhQb3dlcjsKKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJY29uZmlnID0gZGV2LT5jb25maWctPmJDb25maWd1cmF0aW9uVmFsdWU7CisJCQkJcG93ZXIgPSBkZXYtPmNvbmZpZy0+Yk1heFBvd2VyOworCQkJfQorCisJCQlpZiAoY29uZmlnID09ICh1OCkgd192YWx1ZSkgeworCQkJCXZhbHVlID0gMDsKKwkJCQlkZXYtPmN1cnJlbnRfY29uZmlnID0gY29uZmlnOworCQkJCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgMiAqIHBvd2VyKTsKKwkJCX0KKwkJfQorCisJCS8qIHJlcG9ydCBTRVRfQ09ORklHVVJBVElPTiBsaWtlIGFueSBvdGhlciBjb250cm9sIHJlcXVlc3QsCisJCSAqIGV4Y2VwdCB0aGF0IHVzZXJtb2RlIG1heSBub3Qgc3RhbGwgdGhpcy4gIHRoZSBuZXh0CisJCSAqIHJlcXVlc3QgbXVzdG4ndCBiZSBhbGxvd2VkIHN0YXJ0IHVudGlsIHRoaXMgZmluaXNoZXM6CisJCSAqIGVuZHBvaW50cyBhbmQgdGhyZWFkcyBzZXQgdXAsIGV0Yy4KKwkJICoKKwkJICogTk9URTogIG9sZGVyIFBYQSBoYXJkd2FyZSAoYmVmb3JlIFBYQSAyNTU6IHdpdGhvdXQgVURDQ0ZSKQorCQkgKiBoYXMgYmFkL3JhY2V5IGF1dG9tYWdpYyB0aGF0IHByZXZlbnRzIHN5bmNocm9uaXppbmcgaGVyZS4KKwkJICogZXZlbiBrZXJuZWwgbW9kZSBkcml2ZXJzIG9mdGVuIG1pc3MgdGhlbS4KKwkJICovCisJCWlmICh2YWx1ZSA9PSAwKSB7CisJCQlJTkZPIChkZXYsICJjb25maWd1cmF0aW9uICMlZFxuIiwgZGV2LT5jdXJyZW50X2NvbmZpZyk7CisJCQlpZiAoZGV2LT51c2VybW9kZV9zZXR1cCkgeworCQkJCWRldi0+c2V0dXBfY2FuX3N0YWxsID0gMDsKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJfQorCQl9CisJCWJyZWFrOworCisjaWZuZGVmCUNPTkZJR19VU0JfR0FER0VURlNfUFhBMlhYCisJLyogUFhBIGF1dG9tYWdpY2FsbHkgaGFuZGxlcyB0aGlzIHJlcXVlc3QgdG9vICovCisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDB4ODApCisJCQlicmVhazsKKwkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5jdXJyZW50X2NvbmZpZzsKKwkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6Cit1bnJlY29nbml6ZWQ6CisJCVZERUJVRyAoZGV2LCAiJXMgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWRldi0+dXNlcm1vZGVfc2V0dXAgPyAiZGVsZWdhdGUiIDogImZhaWwiLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCksIHdfbGVuZ3RoKTsKKworCQkvKiBpZiB0aGVyZSdzIGFuIGVwMCByZWFkZXIsIGRvbid0IHN0YWxsICovCisJCWlmIChkZXYtPnVzZXJtb2RlX3NldHVwKSB7CisJCQlkZXYtPnNldHVwX2Nhbl9zdGFsbCA9IDE7CitkZWxlZ2F0ZToKKwkJCWRldi0+c2V0dXBfaW4gPSAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJCQkJCT8gMSA6IDA7CisJCQlkZXYtPnNldHVwX291dF9yZWFkeSA9IDA7CisJCQlkZXYtPnNldHVwX291dF9lcnJvciA9IDA7CisJCQl2YWx1ZSA9IDA7CisKKwkJCS8qIHJlYWQgREFUQSBzdGFnZSBmb3IgT1VUIHJpZ2h0IGF3YXkgKi8KKwkJCWlmICh1bmxpa2VseSAoIWRldi0+c2V0dXBfaW4gJiYgd19sZW5ndGgpKSB7CisJCQkJdmFsdWUgPSBzZXR1cF9yZXEgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSwKKwkJCQkJCQl3X2xlbmd0aCk7CisJCQkJaWYgKHZhbHVlIDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSwKKwkJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCQlpZiAodmFsdWUgPCAwKSB7CisJCQkJCWNsZWFuX3JlcSAoZ2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyogd2UgY2FuJ3QgY3VycmVudGx5IHN0YWxsIHRoZXNlICovCisJCQkJZGV2LT5zZXR1cF9jYW5fc3RhbGwgPSAwOworCQkJfQorCisJCQkvKiBzdGF0ZSBjaGFuZ2VzIHdoZW4gcmVhZGVyIGNvbGxlY3RzIGV2ZW50ICovCisJCQlldmVudCA9IG5leHRfZXZlbnQgKGRldiwgR0FER0VURlNfU0VUVVApOworCQkJZXZlbnQtPnUuc2V0dXAgPSAqY3RybDsKKwkJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwkJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogcHJvY2VlZCB3aXRoIGRhdGEgdHJhbnNmZXIgYW5kIHN0YXR1cyBwaGFzZXM/ICovCisJaWYgKHZhbHVlID49IDAgJiYgZGV2LT5zdGF0ZSAhPSBTVEFURV9TRVRVUCkgeworCQlyZXEtPmxlbmd0aCA9IHZhbHVlOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdfbGVuZ3RoOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCURCRyAoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQlyZXEtPnN0YXR1cyA9IDA7CisJCX0KKwl9CisKKwkvKiBkZXZpY2Ugc3RhbGxzIHdoZW4gdmFsdWUgPCAwICovCisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7CisKKwlEQkcgKGRldiwgIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+c3RhdGUpOworCisJLyogZGV2LT5zdGF0ZSBtdXN0IHByZXZlbnQgaW50ZXJmZXJlbmNlICovCityZXN0YXJ0OgorCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZSAoZW50cnksIHRtcCwgJmRldi0+ZXBmaWxlcykgeworCQlzdHJ1Y3QgZXBfZGF0YQkqZXA7CisJCXN0cnVjdCBpbm9kZQkqcGFyZW50OworCQlzdHJ1Y3QgZGVudHJ5CSpkZW50cnk7CisKKwkJLyogYnJlYWsgbGluayB0byBGUyAqLworCQllcCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZXBfZGF0YSwgZXBmaWxlcyk7CisJCWxpc3RfZGVsX2luaXQgKCZlcC0+ZXBmaWxlcyk7CisJCWRlbnRyeSA9IGVwLT5kZW50cnk7CisJCWVwLT5kZW50cnkgPSBOVUxMOworCQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCisJCS8qIGJyZWFrIGxpbmsgdG8gY29udHJvbGxlciAqLworCQlpZiAoZXAtPnN0YXRlID09IFNUQVRFX0VQX0VOQUJMRUQpCisJCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGVwLT5lcCk7CisJCWVwLT5zdGF0ZSA9IFNUQVRFX0VQX1VOQk9VTkQ7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLT5lcCwgZXAtPnJlcSk7CisJCWVwLT5lcCA9IE5VTEw7CisJCXdha2VfdXAgKCZlcC0+d2FpdCk7CisJCXB1dF9lcCAoZXApOworCisJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisKKwkJLyogYnJlYWsgbGluayB0byBkY2FjaGUgKi8KKwkJZG93biAoJnBhcmVudC0+aV9zZW0pOworCQlkX2RlbGV0ZSAoZGVudHJ5KTsKKwkJZHB1dCAoZGVudHJ5KTsKKwkJdXAgKCZwYXJlbnQtPmlfc2VtKTsKKworCQkvKiBmZHMgbWF5IHN0aWxsIGJlIG9wZW4gKi8KKwkJZ290byByZXN0YXJ0OworCX0KKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKgorZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCXN0cnVjdCBkZW50cnkgKipkZW50cnlfcCk7CisKK3N0YXRpYyBpbnQgYWN0aXZhdGVfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KQoreworCXN0cnVjdCB1c2JfZXAJKmVwOworCisJZ2FkZ2V0X2Zvcl9lYWNoX2VwIChlcCwgZGV2LT5nYWRnZXQpIHsKKwkJc3RydWN0IGVwX2RhdGEJKmRhdGE7CisKKwkJZGF0YSA9IGttYWxsb2MgKHNpemVvZiAqZGF0YSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGF0YSkKKwkJCWdvdG8gZW5vbWVtOworCQltZW1zZXQgKGRhdGEsIDAsIHNpemVvZiBkYXRhKTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKKwkJaW5pdF9NVVRFWCAoJmRhdGEtPmxvY2spOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGF0YS0+d2FpdCk7CisKKwkJc3RybmNweSAoZGF0YS0+bmFtZSwgZXAtPm5hbWUsIHNpemVvZiAoZGF0YS0+bmFtZSkgLSAxKTsKKwkJYXRvbWljX3NldCAoJmRhdGEtPmNvdW50LCAxKTsKKwkJZGF0YS0+ZGV2ID0gZGV2OworCQlnZXRfZGV2IChkZXYpOworCisJCWRhdGEtPmVwID0gZXA7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGRhdGE7CisKKwkJZGF0YS0+cmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGVwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkYXRhLT5yZXEpCisJCQlnb3RvIGVub21lbTsKKworCQlkYXRhLT5pbm9kZSA9IGdhZGdldGZzX2NyZWF0ZV9maWxlIChkZXYtPnNiLCBkYXRhLT5uYW1lLAorCQkJCWRhdGEsICZlcF9jb25maWdfb3BlcmF0aW9ucywKKwkJCQkmZGF0YS0+ZGVudHJ5KTsKKwkJaWYgKCFkYXRhLT5pbm9kZSkgeworCQkJa2ZyZWUgKGRhdGEpOworCQkJZ290byBlbm9tZW07CisJCX0KKwkJbGlzdF9hZGRfdGFpbCAoJmRhdGEtPmVwZmlsZXMsICZkZXYtPmVwZmlsZXMpOworCX0KKwlyZXR1cm4gMDsKKworZW5vbWVtOgorCURCRyAoZGV2LCAiJXMgZW5vbWVtXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlc3Ryb3lfZXBfZmlsZXMgKGRldik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkCitnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJREJHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCWRldi0+c3RhdGUgPSBTVEFURV9ERVZfVU5CT1VORDsKKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCisJZGVzdHJveV9lcF9maWxlcyAoZGV2KTsKKwlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTsKKworCS8qIHdlJ3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi8KKwlpZiAoZGV2LT5yZXEpCisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJREJHIChkZXYsICIlcyBkb25lXG4iLCBfX0ZVTkNUSU9OX18pOworCXB1dF9kZXYgKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X2RhdGEJCSp0aGVfZGV2aWNlOworCitzdGF0aWMgaW50CitnYWRnZXRmc19iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IHRoZV9kZXZpY2U7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAoMCAhPSBzdHJjbXAgKENISVAsIGdhZGdldC0+bmFtZSkpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXMgZXhwZWN0ZWQgJXMgY29udHJvbGxlciBub3QgJXNcbiIsCisJCQlzaG9ydG5hbWUsIENISVAsIGdhZGdldC0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOworCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwlkZXYtPmRldi0+Yk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKKworCS8qIHByZWFsbG9jYXRlIGNvbnRyb2wgcmVzcG9uc2UgYW5kIGJ1ZmZlciAqLworCWRldi0+cmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGdhZGdldC0+ZXAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cmVxKQorCQlnb3RvIGVub21lbTsKKwlkZXYtPnJlcS0+Y29udGV4dCA9IE5VTEw7CisJZGV2LT5yZXEtPmNvbXBsZXRlID0gZXBpb19jb21wbGV0ZTsKKworCWlmIChhY3RpdmF0ZV9lcF9maWxlcyAoZGV2KSA8IDApCisJCWdvdG8gZW5vbWVtOworCisJSU5GTyAoZGV2LCAiYm91bmQgdG8gJXMgZHJpdmVyXG4iLCBnYWRnZXQtPm5hbWUpOworCWRldi0+c3RhdGUgPSBTVEFURV9VTkNPTk5FQ1RFRDsKKwlnZXRfZGV2IChkZXYpOworCXJldHVybiAwOworCitlbm9tZW06CisJZ2FkZ2V0ZnNfdW5iaW5kIChnYWRnZXQpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZAorZ2FkZ2V0ZnNfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9VTkNPTk5FQ1RFRCkgeworCQlEQkcgKGRldiwgImFscmVhZHkgdW5jb25uZWN0ZWRcbiIpOworCQlyZXR1cm47CisJfQorCWRldi0+c3RhdGUgPSBTVEFURV9VTkNPTk5FQ1RFRDsKKworCUlORk8gKGRldiwgImRpc2Nvbm5lY3RlZFxuIik7CisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwluZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX0RJU0NPTk5FQ1QpOworCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwlzcGluX3VubG9jayAoJmRldi0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitnYWRnZXRmc19zdXNwZW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCUlORk8gKGRldiwgInN1c3BlbmRlZCBmcm9tIHN0YXRlICVkXG4iLCBkZXYtPnN0YXRlKTsKKwlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCXN3aXRjaCAoZGV2LT5zdGF0ZSkgeworCWNhc2UgU1RBVEVfU0VUVVA6CQkvLyBWRVJZIG9kZC4uLiBob3N0IGRpZWQ/PworCWNhc2UgU1RBVEVfQ09OTkVDVEVEOgorCWNhc2UgU1RBVEVfVU5DT05ORUNURUQ6CisJCW5leHRfZXZlbnQgKGRldiwgR0FER0VURlNfU1VTUEVORCk7CisJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHsKKyNpZmRlZglISUdIU1BFRUQKKwkuc3BlZWQJCT0gVVNCX1NQRUVEX0hJR0gsCisjZWxzZQorCS5zcGVlZAkJPSBVU0JfU1BFRURfRlVMTCwKKyNlbmRpZgorCS5mdW5jdGlvbgk9IChjaGFyICopIGRyaXZlcl9kZXNjLAorCS5iaW5kCQk9IGdhZGdldGZzX2JpbmQsCisJLnVuYmluZAkJPSBnYWRnZXRmc191bmJpbmQsCisJLnNldHVwCQk9IGdhZGdldGZzX3NldHVwLAorCS5kaXNjb25uZWN0CT0gZ2FkZ2V0ZnNfZGlzY29ubmVjdCwKKwkuc3VzcGVuZAk9IGdhZGdldGZzX3N1c3BlbmQsCisKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAuc2h1dGRvd24gPSAuLi4KKwkJLy8gLnN1c3BlbmQgPSAuLi4KKwkJLy8gLnJlc3VtZSA9IC4uLgorCX0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBnYWRnZXRmc19ub3Aoc3RydWN0IHVzYl9nYWRnZXQgKmFyZykgeyB9CisKK3N0YXRpYyBpbnQgZ2FkZ2V0ZnNfcHJvYmUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJQ0hJUCA9IGdhZGdldC0+bmFtZTsKKwlyZXR1cm4gLUVJU05BTTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBwcm9iZV9kcml2ZXIgPSB7CisJLnNwZWVkCQk9IFVTQl9TUEVFRF9ISUdILAorCS5iaW5kCQk9IGdhZGdldGZzX3Byb2JlLAorCS51bmJpbmQJCT0gZ2FkZ2V0ZnNfbm9wLAorCS5zZXR1cAkJPSAodm9pZCAqKWdhZGdldGZzX25vcCwKKwkuZGlzY29ubmVjdAk9IGdhZGdldGZzX25vcCwKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gIm5vcCIsCisJfSwKK307CisKKworLyogREVWSUNFIElOSVRJQUxJWkFUSU9OCisgKgorICogICAgIGZkID0gb3BlbiAoIi9kZXYvZ2FkZ2V0LyRDSElQIiwgT19SRFdSKQorICogICAgIHN0YXR1cyA9IHdyaXRlIChmZCwgZGVzY3JpcHRvcnMsIHNpemVvZiBkZXNjcmlwdG9ycykKKyAqCisgKiBUaGF0IHdyaXRlIGVzdGFibGlzaGVzIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiwgc28gdGhlIGtlcm5lbCBjYW4KKyAqIGJpbmQgdG8gdGhlIGNvbnRyb2xsZXIgLi4uIGd1YXJhbnRlZWluZyBpdCBjYW4gaGFuZGxlIGVudW1lcmF0aW9uCisgKiBhdCBhbGwgbmVjZXNzYXJ5IHNwZWVkcy4gIERlc2NyaXB0b3Igb3JkZXIgaXM6CisgKgorICogLiBtZXNzYWdlIHRhZyAodTMyLCBob3N0IG9yZGVyKSAuLi4gZm9yIG5vdywgbXVzdCBiZSB6ZXJvOyBpdAorICoJd291bGQgY2hhbmdlIHRvIHN1cHBvcnQgZmVhdHVyZXMgbGlrZSBtdWx0aS1jb25maWcgZGV2aWNlcworICogLiBmdWxsL2xvdyBzcGVlZCBjb25maWcgLi4uIGFsbCB3VG90YWxMZW5ndGggYnl0ZXMgKHdpdGggaW50ZXJmYWNlLAorICoJY2xhc3MsIGFsdHNldHRpbmcsIGVuZHBvaW50LCBhbmQgb3RoZXIgZGVzY3JpcHRvcnMpCisgKiAuIGhpZ2ggc3BlZWQgY29uZmlnIC4uLiBhbGwgZGVzY3JpcHRvcnMsIGZvciBoaWdoIHNwZWVkIG9wZXJhdGlvbjsKKyAqIAl0aGlzIG9uZSdzIG9wdGlvbmFsIGV4Y2VwdCBmb3IgaGlnaC1zcGVlZCBoYXJkd2FyZQorICogLiBkZXZpY2UgZGVzY3JpcHRvcgorICoKKyAqIEVuZHBvaW50cyBhcmUgbm90IHlldCBlbmFibGVkLiBEcml2ZXJzIG1heSB3YW50IHRvIGltbWVkaWF0ZWx5CisgKiBpbml0aWFsaXplIHRoZW0sIHVzaW5nIHRoZSAvZGV2L2dhZGdldC9lcCogZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlCisgKiBhcyBzb29uIGFzIHRoZSBrZXJuZWwgc2VlcyB0aGUgY29uZmlndXJhdGlvbiwgb3IgdGhleSBjYW4gd2FpdAorICogdW50aWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIGludGVyZmFjZSBhbHRzZXR0aW5nIGNoYW5nZXMgY3JlYXRlCisgKiB0aGUgbmVlZCB0byBjb25maWd1cmUgKG9yIHVuY29uZmlndXJlKSB0aGVtLgorICoKKyAqIEFmdGVyIGluaXRpYWxpemF0aW9uLCB0aGUgZGV2aWNlIHN0YXlzIGFjdGl2ZSBmb3IgYXMgbG9uZyBhcyB0aGF0CisgKiAkQ0hJUCBmaWxlIGlzIG9wZW4uICBFdmVudHMgbWF5IHRoZW4gYmUgcmVhZCBmcm9tIHRoYXQgZGVzY3JpcHRvciwKKyAqIHN1Y2ggY29uZmlndXJhdGlvbiBub3RpZmljYXRpb25zLiAgTW9yZSBjb21wbGV4IGRyaXZlcnMgd2lsbCBoYW5kbGUKKyAqIHNvbWUgY29udHJvbCByZXF1ZXN0cyBpbiB1c2VyIHNwYWNlLgorICovCisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfY29uZmlnIChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZy0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DT05GSUcKKwkJJiYgY29uZmlnLT5iTGVuZ3RoID09IFVTQl9EVF9DT05GSUdfU0laRQorCQkmJiBjb25maWctPmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMAorCQkmJiAoY29uZmlnLT5ibUF0dHJpYnV0ZXMgJiBVU0JfQ09ORklHX0FUVF9PTkUpICE9IDAKKwkJJiYgKGNvbmZpZy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0NPTkZJR19BVFRfV0FLRVVQKSA9PSAwOworCS8qIEZJWE1FIGlmIGdhZGdldC0+aXNfb3RnLCBfbXVzdF8gaW5jbHVkZSBhbiBvdGcgZGVzY3JpcHRvciAqLworCS8qIEZJWE1FIGNoZWNrIGxlbmd0aHM6IHdhbGsgdG8gZW5kICovCit9CisKK3N0YXRpYyBzc2l6ZV90CitkZXZfY29uZmlnIChzdHJ1Y3QgZmlsZSAqZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdAkJCXZhbHVlID0gbGVuLCBsZW5ndGggPSBsZW47CisJdW5zaWduZWQJCXRvdGFsOworCXUzMgkJCXRhZzsKKwljaGFyCQkJKmtidWY7CisKKwlpZiAoZGV2LT5zdGF0ZSAhPSBTVEFURV9PUEVORUQpCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKGxlbiA8IChVU0JfRFRfQ09ORklHX1NJWkUgKyBVU0JfRFRfREVWSUNFX1NJWkUgKyA0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB3ZSBtaWdodCBuZWVkIHRvIGNoYW5nZSBtZXNzYWdlIGZvcm1hdCBzb21lZGF5ICovCisJaWYgKGNvcHlfZnJvbV91c2VyICgmdGFnLCBidWYsIDQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodGFnICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiArPSA0OworCWxlbmd0aCAtPSA0OworCisJa2J1ZiA9IGttYWxsb2MgKGxlbmd0aCwgU0xBQl9LRVJORUwpOworCWlmICgha2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGNvcHlfZnJvbV91c2VyIChrYnVmLCBidWYsIGxlbmd0aCkpIHsKKwkJa2ZyZWUgKGtidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwl2YWx1ZSA9IC1FSU5WQUw7CisJaWYgKGRldi0+YnVmKQorCQlnb3RvIGZhaWw7CisJZGV2LT5idWYgPSBrYnVmOworCisJLyogZnVsbCBvciBsb3cgc3BlZWQgY29uZmlnICovCisJZGV2LT5jb25maWcgPSAodm9pZCAqKSBrYnVmOworCXRvdGFsID0gbGUxNl90b19jcHVwICgmZGV2LT5jb25maWctPndUb3RhbExlbmd0aCk7CisJaWYgKCFpc192YWxpZF9jb25maWcgKGRldi0+Y29uZmlnKSB8fCB0b3RhbCA+PSBsZW5ndGgpCisJCWdvdG8gZmFpbDsKKwlrYnVmICs9IHRvdGFsOworCWxlbmd0aCAtPSB0b3RhbDsKKworCS8qIG9wdGlvbmFsIGhpZ2ggc3BlZWQgY29uZmlnICovCisJaWYgKGtidWYgWzFdID09IFVTQl9EVF9DT05GSUcpIHsKKwkJZGV2LT5oc19jb25maWcgPSAodm9pZCAqKSBrYnVmOworCQl0b3RhbCA9IGxlMTZfdG9fY3B1cCAoJmRldi0+aHNfY29uZmlnLT53VG90YWxMZW5ndGgpOworCQlpZiAoIWlzX3ZhbGlkX2NvbmZpZyAoZGV2LT5oc19jb25maWcpIHx8IHRvdGFsID49IGxlbmd0aCkKKwkJCWdvdG8gZmFpbDsKKwkJa2J1ZiArPSB0b3RhbDsKKwkJbGVuZ3RoIC09IHRvdGFsOworCX0KKworCS8qIGNvdWxkIHN1cHBvcnQgbXVsdGlwbGUgY29uZmlncywgdXNpbmcgYW5vdGhlciBlbmNvZGluZyEgKi8KKworCS8qIGRldmljZSBkZXNjcmlwdG9yICh0d2Vha2VkIGZvciBwYXJhbm9pYSkgKi8KKwlpZiAobGVuZ3RoICE9IFVTQl9EVF9ERVZJQ0VfU0laRSkKKwkJZ290byBmYWlsOworCWRldi0+ZGV2ID0gKHZvaWQgKilrYnVmOworCWlmIChkZXYtPmRldi0+Ykxlbmd0aCAhPSBVU0JfRFRfREVWSUNFX1NJWkUKKwkJCXx8IGRldi0+ZGV2LT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0RFVklDRQorCQkJfHwgZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorCQlnb3RvIGZhaWw7CisJZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyA9IDE7CisJZGV2LT5kZXYtPmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisKKwkvKiB0cmlnZ2VycyBnYWRnZXRmc19iaW5kKCk7IHRoZW4gd2UgY2FuIGVudW1lcmF0ZS4gKi8KKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCXZhbHVlID0gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKCZnYWRnZXRmc19kcml2ZXIpOworCWlmICh2YWx1ZSAhPSAwKSB7CisJCWtmcmVlIChkZXYtPmJ1Zik7CisJCWRldi0+YnVmID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBhdCB0aGlzIHBvaW50ICJnb29kIiBoYXJkd2FyZSBoYXMgZm9yIHRoZSBmaXJzdCB0aW1lCisJCSAqIGxldCB0aGUgVVNCIHRoZSBob3N0IHNlZSB1cy4gIGFsdGVybmF0aXZlbHksIGlmIHVzZXJzCisJCSAqIHVucGx1Zy9yZXBsdWcgdGhhdCB3aWxsIGNsZWFyIGFsbCB0aGUgZXJyb3Igc3RhdGUuCisJCSAqCisJCSAqIG5vdGU6ICBldmVyeXRoaW5nIHJ1bm5pbmcgYmVmb3JlIGhlcmUgd2FzIGd1YXJhbnRlZWQKKwkJICogdG8gY2hva2UgZHJpdmVyIG1vZGVsIHN0eWxlIGRpYWdub3N0aWNzLiAgZnJvbSBoZXJlCisJCSAqIG9uLCB0aGV5IGNhbiB3b3JrIC4uLiBleGNlcHQgaW4gY2xlYW51cCBwYXRocyB0aGF0CisJCSAqIGtpY2sgaW4gYWZ0ZXIgdGhlIGVwMCBkZXNjcmlwdG9yIGlzIGNsb3NlZC4KKwkJICovCisJCWZkLT5mX29wID0gJmVwMF9pb19vcGVyYXRpb25zOworCQl2YWx1ZSA9IGxlbjsKKwl9CisJcmV0dXJuIHZhbHVlOworCitmYWlsOgorCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJcHJfZGVidWcgKCIlczogJXMgZmFpbCAlWmQsICVwXG4iLCBzaG9ydG5hbWUsIF9fRlVOQ1RJT05fXywgdmFsdWUsIGRldik7CisJa2ZyZWUgKGRldi0+YnVmKTsKKwlkZXYtPmJ1ZiA9IE5VTEw7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50CitkZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisJaW50CQkJdmFsdWUgPSAtRUJVU1k7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9ERVZfRElTQUJMRUQpIHsKKwkJZGV2LT5ldl9uZXh0ID0gMDsKKwkJZGV2LT5zdGF0ZSA9IFNUQVRFX09QRU5FRDsKKwkJZmQtPnByaXZhdGVfZGF0YSA9IGRldjsKKwkJZ2V0X2RldiAoZGV2KTsKKwkJdmFsdWUgPSAwOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9pbml0X29wZXJhdGlvbnMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKworCS5vcGVuID0JCWRldl9vcGVuLAorCS53cml0ZSA9CWRldl9jb25maWcsCisJLmZhc3luYyA9CWVwMF9mYXN5bmMsCisJLmlvY3RsID0JZGV2X2lvY3RsLAorCS5yZWxlYXNlID0JZGV2X3JlbGVhc2UsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBGSUxFU1lTVEVNIEFORCBTVVBFUkJMT0NLIE9QRVJBVElPTlMKKyAqCisgKiBNb3VudGluZyB0aGUgZmlsZXN5c3RlbSBjcmVhdGVzIGEgY29udHJvbGxlciBmaWxlLCB1c2VkIGZpcnN0IGZvcgorICogZGV2aWNlIGNvbmZpZ3VyYXRpb24gdGhlbiBsYXRlciBmb3IgZXZlbnQgbW9uaXRvcmluZy4KKyAqLworCisKKy8qIEZJWE1FIFBBTSBldGMgY291bGQgc2V0IHRoaXMgc2VjdXJpdHkgcG9saWN5IHdpdGhvdXQgbW91bnQgb3B0aW9ucworICogaWYgZXBmaWxlcyBpbmhlcml0ZWQgb3duZXJzaGlwIGFuZCBwZXJtaXNzb25zIGZyb20gZXAwIC4uLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBkZWZhdWx0X3VpZDsKK3N0YXRpYyB1bnNpZ25lZCBkZWZhdWx0X2dpZDsKK3N0YXRpYyB1bnNpZ25lZCBkZWZhdWx0X3Blcm0gPSBTX0lSVVNSIHwgU19JV1VTUjsKKworbW9kdWxlX3BhcmFtIChkZWZhdWx0X3VpZCwgdWludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0gKGRlZmF1bHRfZ2lkLCB1aW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbSAoZGVmYXVsdF9wZXJtLCB1aW50LCAwNjQ0KTsKKworCitzdGF0aWMgc3RydWN0IGlub2RlICoKK2dhZGdldGZzX21ha2VfaW5vZGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCWludCBtb2RlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUgKHNiKTsKKworCWlmIChpbm9kZSkgeworCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJaW5vZGUtPmlfdWlkID0gZGVmYXVsdF91aWQ7CisJCWlub2RlLT5pX2dpZCA9IGRlZmF1bHRfZ2lkOworCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCQlpbm9kZS0+aV9ibG9ja3MgPSAwOworCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUKKwkJCQk9IENVUlJFTlRfVElNRTsKKwkJaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJCWlub2RlLT5pX2ZvcCA9IGZvcHM7CisJfQorCXJldHVybiBpbm9kZTsKK30KKworLyogY3JlYXRlcyBpbiBmcyByb290IGRpcmVjdG9yeSwgc28gbm9uLXJlbmFtYWJsZSBhbmQgbm9uLWxpbmthYmxlLgorICogc28gaW5vZGUgYW5kIGRlbnRyeSBhcmUgcGFpcmVkLCB1bnRpbCBkZXZpY2UgcmVjb25maWcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKgorZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCXN0cnVjdCBkZW50cnkgKipkZW50cnlfcCkKK3sKKwlzdHJ1Y3QgZGVudHJ5CSpkZW50cnk7CisJc3RydWN0IGlub2RlCSppbm9kZTsKKworCWRlbnRyeSA9IGRfYWxsb2NfbmFtZShzYi0+c19yb290LCBuYW1lKTsKKwlpZiAoIWRlbnRyeSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpbm9kZSA9IGdhZGdldGZzX21ha2VfaW5vZGUgKHNiLCBkYXRhLCBmb3BzLAorCQkJU19JRlJFRyB8IChkZWZhdWx0X3Blcm0gJiBTX0lSV1hVR08pKTsKKwlpZiAoIWlub2RlKSB7CisJCWRwdXQoZGVudHJ5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRfYWRkIChkZW50cnksIGlub2RlKTsKKwkqZGVudHJ5X3AgPSBkZW50cnk7CisJcmV0dXJuIGlub2RlOworfQorCitzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7CisJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCisJLmRyb3BfaW5vZGUgPQlnZW5lcmljX2RlbGV0ZV9pbm9kZSwKK307CisKK3N0YXRpYyBpbnQKK2dhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKm9wdHMsIGludCBzaWxlbnQpCit7CisJc3RydWN0IGlub2RlCSppbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5CSpkOworCXN0cnVjdCBkZXZfZGF0YQkqZGV2OworCisJaWYgKHRoZV9kZXZpY2UpCisJCXJldHVybiAtRVNSQ0g7CisKKwkvKiBmYWtlIHByb2JlIHRvIGRldGVybWluZSAkQ0hJUCAqLworCSh2b2lkKSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoJnByb2JlX2RyaXZlcik7CisJaWYgKCFDSElQKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHN1cGVyYmxvY2sgKi8KKwlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOworCXNiLT5zX21hZ2ljID0gR0FER0VURlNfTUFHSUM7CisJc2ItPnNfb3AgPSAmZ2FkZ2V0X2ZzX29wZXJhdGlvbnM7CisJc2ItPnNfdGltZV9ncmFuID0gMTsKKworCS8qIHJvb3QgaW5vZGUgKi8KKwlpbm9kZSA9IGdhZGdldGZzX21ha2VfaW5vZGUgKHNiLAorCQkJTlVMTCwgJnNpbXBsZV9kaXJfb3BlcmF0aW9ucywKKwkJCVNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyk7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCWlmICghKGQgPSBkX2FsbG9jX3Jvb3QgKGlub2RlKSkpIHsKKwkJaXB1dCAoaW5vZGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2ItPnNfcm9vdCA9IGQ7CisKKwkvKiB0aGUgZXAwIGZpbGUgaXMgbmFtZWQgYWZ0ZXIgdGhlIGNvbnRyb2xsZXIgd2UgZXhwZWN0OworCSAqIHVzZXIgbW9kZSBjb2RlIGNhbiB1c2UgaXQgZm9yIHNhbml0eSBjaGVja3MsIGxpa2Ugd2UgZG8uCisJICovCisJZGV2ID0gZGV2X25ldyAoKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnNiID0gc2I7CisJaWYgKCEoaW5vZGUgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc2IsIENISVAsCisJCQkJZGV2LCAmZGV2X2luaXRfb3BlcmF0aW9ucywKKwkJCQkmZGV2LT5kZW50cnkpKSkgeworCQlwdXRfZGV2KGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIG90aGVyIGVuZHBvaW50IGZpbGVzIGFyZSBhdmFpbGFibGUgYWZ0ZXIgaGFyZHdhcmUgc2V0dXAsCisJICogZnJvbSBiaW5kaW5nIHRvIGEgY29udHJvbGxlci4KKwkgKi8KKwl0aGVfZGV2aWNlID0gZGV2OworCXJldHVybiAwOworfQorCisvKiAibW91bnQgLXQgZ2FkZ2V0ZnMgcGF0aCAvZGV2L2dhZGdldCIgZW5kcyB1cCBoZXJlICovCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKK2dhZGdldGZzX2dldF9zYiAoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnQsIGludCBmbGFncywKKwkJY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqb3B0cykKK3sKKwlyZXR1cm4gZ2V0X3NiX3NpbmdsZSAodCwgZmxhZ3MsIG9wdHMsIGdhZGdldGZzX2ZpbGxfc3VwZXIpOworfQorCitzdGF0aWMgdm9pZAorZ2FkZ2V0ZnNfa2lsbF9zYiAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlraWxsX2xpdHRlcl9zdXBlciAoc2IpOworCWlmICh0aGVfZGV2aWNlKSB7CisJCXB1dF9kZXYgKHRoZV9kZXZpY2UpOworCQl0aGVfZGV2aWNlID0gTlVMTDsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnYWRnZXRmc190eXBlID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSBzaG9ydG5hbWUsCisJLmdldF9zYgkJPSBnYWRnZXRmc19nZXRfc2IsCisJLmtpbGxfc2IJPSBnYWRnZXRmc19raWxsX3NiLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSAoJmdhZGdldGZzX3R5cGUpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJcHJfaW5mbyAoIiVzOiAlcywgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICJcbiIsCisJCQlzaG9ydG5hbWUsIGRyaXZlcl9kZXNjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoInVucmVnaXN0ZXIgJXNcbiIsIHNob3J0bmFtZSk7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtICgmZ2FkZ2V0ZnNfdHlwZSk7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlZjlmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0wLDAgKzEsMjE2NyBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisgKiBTaGFycCBMSDdBNDB4IG9uLWNoaXAgZnVsbCBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pa2tvIExhaHRlZW5tYWtpLCBOb3JkaWMgSUQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCbyBIZW5yaWtzZW4sIE5vcmRpYyBJRAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImxoN2E0MHhfdWRjLmgiCisKKy8vI2RlZmluZSBERUJVRyBwcmludGsKKy8vI2RlZmluZSBERUJVR19FUDAgcHJpbnRrCisvLyNkZWZpbmUgREVCVUdfU0VUVVAgcHJpbnRrCisKKyNpZm5kZWYgREVCVUdfRVAwCisjIGRlZmluZSBERUJVR19FUDAoZm10LGFyZ3MuLi4pCisjZW5kaWYKKyNpZm5kZWYgREVCVUdfU0VUVVAKKyMgZGVmaW5lIERFQlVHX1NFVFVQKGZtdCxhcmdzLi4uKQorI2VuZGlmCisjaWZuZGVmIERFQlVHCisjIGRlZmluZSBOT19TVEFURVMKKyMgZGVmaW5lIERFQlVHKGZtdCxhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJCQkiTEg3QTQweCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQlfX0RBVEVfXworCisjaWZuZGVmIF9CSVQJCQkvKiBGSVhNRSAtIHdoYXQgaGFwcGVuZGVkIHRvIF9CSVQgaW4gMi42LjdiazE4PyAqLworI2RlZmluZSBfQklUKHgpICgxPDwoeCkpCisjZW5kaWYKKworc3RydWN0IGxoN2E0MHhfdWRjICp0aGVfY29udHJvbGxlcjsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJsaDdhNDB4X3VkYyI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzY1tdID0gRFJJVkVSX0RFU0M7CitzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lW10gPSAiZXAwLWNvbnRyb2wiOworCisvKgorICBMb2NhbCBkZWZpbmludGlvbnMuCisqLworCisjaWZuZGVmIE5PX1NUQVRFUworc3RhdGljIGNoYXIgKnN0YXRlX25hbWVzW10gPSB7CisJIldBSVRfRk9SX1NFVFVQIiwKKwkiREFUQV9TVEFURV9YTUlUIiwKKwkiREFUQV9TVEFURV9ORUVEX1pMUCIsCisJIldBSVRfRk9SX09VVF9TVEFUVVMiLAorCSJEQVRBX1NUQVRFX1JFQ1YiCit9OworI2VuZGlmCisKKy8qCisgIExvY2FsIGRlY2xhcmF0aW9ucy4KKyovCitzdGF0aWMgaW50IGxoN2E0MHhfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKik7CitzdGF0aWMgaW50IGxoN2E0MHhfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICplcCk7CitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpsaDdhNDB4X2FsbG9jX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIGludCk7CitzdGF0aWMgdm9pZCBsaDdhNDB4X2ZyZWVfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICopOworc3RhdGljIHZvaWQgKmxoN2E0MHhfYWxsb2NfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCwgZG1hX2FkZHJfdCAqLAorCQkJCSAgaW50KTsKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqZXAsIHZvaWQgKiwgZG1hX2FkZHJfdCwKKwkJCQl1bnNpZ25lZCk7CitzdGF0aWMgaW50IGxoN2E0MHhfcXVldWUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqLCBpbnQpOworc3RhdGljIGludCBsaDdhNDB4X2RlcXVldWUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqKTsKK3N0YXRpYyBpbnQgbGg3YTQweF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICplcCwgaW50KTsKK3N0YXRpYyBpbnQgbGg3YTQweF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICplcCk7CitzdGF0aWMgaW50IGxoN2E0MHhfZmlmb19zdGF0dXMoc3RydWN0IHVzYl9lcCAqZXApOworc3RhdGljIHZvaWQgbGg3YTQweF9maWZvX2ZsdXNoKHN0cnVjdCB1c2JfZXAgKmVwKTsKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX2tpY2soc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHN0cnVjdCBsaDdhNDB4X2VwICplcCk7CitzdGF0aWMgdm9pZCBsaDdhNDB4X2hhbmRsZV9lcDAoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBpbnRyKTsKKworc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSwKKwkJIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgcGlvX2lycV9lbmFibGUoaW50IGJFbmRwb2ludEFkZHJlc3MpOworc3RhdGljIHZvaWQgcGlvX2lycV9kaXNhYmxlKGludCBiRW5kcG9pbnRBZGRyZXNzKTsKK3N0YXRpYyB2b2lkIHN0b3BfYWN0aXZpdHkoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsCisJCQkgIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKK3N0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBsaDdhNDB4X2VwICplcCk7CitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KTsKK3N0YXRpYyB2b2lkIHVkY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyZXNzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIGxoN2E0MHhfZXBfb3BzID0geworCS5lbmFibGUgPSBsaDdhNDB4X2VwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGxoN2E0MHhfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0ID0gbGg3YTQweF9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QgPSBsaDdhNDB4X2ZyZWVfcmVxdWVzdCwKKworCS5hbGxvY19idWZmZXIgPSBsaDdhNDB4X2FsbG9jX2J1ZmZlciwKKwkuZnJlZV9idWZmZXIgPSBsaDdhNDB4X2ZyZWVfYnVmZmVyLAorCisJLnF1ZXVlID0gbGg3YTQweF9xdWV1ZSwKKwkuZGVxdWV1ZSA9IGxoN2E0MHhfZGVxdWV1ZSwKKworCS5zZXRfaGFsdCA9IGxoN2E0MHhfc2V0X2hhbHQsCisJLmZpZm9fc3RhdHVzID0gbGg3YTQweF9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaCA9IGxoN2E0MHhfZmlmb19mbHVzaCwKK307CisKKy8qIElubGluZSBjb2RlICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCB3cml0ZV9wYWNrZXQoc3RydWN0IGxoN2E0MHhfZXAgKmVwLAorCQkJCSAgIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSwgaW50IG1heCkKK3sKKwl1OCAqYnVmOworCWludCBsZW5ndGgsIGNvdW50OworCXZvbGF0aWxlIHUzMiAqZmlmbyA9ICh2b2xhdGlsZSB1MzIgKillcC0+ZmlmbzsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJbGVuZ3RoID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCWxlbmd0aCA9IG1pbihsZW5ndGgsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbmd0aDsKKworCURFQlVHKCJXcml0ZSAlZCAobWF4ICVkKSwgZmlmbyAlcFxuIiwgbGVuZ3RoLCBtYXgsIGZpZm8pOworCisJY291bnQgPSBsZW5ndGg7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJKmZpZm8gPSAqYnVmKys7CisJfQorCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB1c2Jfc2V0X2luZGV4KHUzMiBlcCkKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKWlvX3AydihVU0JfSU5ERVgpID0gZXA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHUzMiB1c2JfcmVhZCh1MzIgcG9ydCkKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1MzIgKilpb19wMnYocG9ydCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdXNiX3dyaXRlKHUzMiB2YWwsIHUzMiBwb3J0KQoreworCSoodm9sYXRpbGUgdTMyICopaW9fcDJ2KHBvcnQpID0gdmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVzYl9zZXQodTMyIHZhbCwgdTMyIHBvcnQpCit7CisJdm9sYXRpbGUgdTMyICppb3BvcnQgPSAodm9sYXRpbGUgdTMyICopaW9fcDJ2KHBvcnQpOworCXUzMiBhZnRlciA9ICgqaW9wb3J0KSB8IHZhbDsKKwkqaW9wb3J0ID0gYWZ0ZXI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdXNiX2NsZWFyKHUzMiB2YWwsIHUzMiBwb3J0KQoreworCXZvbGF0aWxlIHUzMiAqaW9wb3J0ID0gKHZvbGF0aWxlIHUzMiAqKWlvX3Aydihwb3J0KTsKKwl1MzIgYWZ0ZXIgPSAoKmlvcG9ydCkgJiB+dmFsOworCSppb3BvcnQgPSBhZnRlcjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBHUElPX1BPUlRDX0RSIAkoMHg4MDAwMEUwOCkKKyNkZWZpbmUgR1BJT19QT1JUQ19ERFIgCSgweDgwMDAwRTE4KQorI2RlZmluZSBHUElPX1BPUlRDX1BEUiAJKDB4ODAwMDBFNzApCisKKy8qIGdldCBwb3J0IEMgcGluIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgZ2V0X3BvcnRjX3BkcihiaXQpIAkJKCh1c2JfcmVhZChHUElPX1BPUlRDX1BEUikgJiBfQklUKGJpdCkpICE9IDApCisvKiBnZXQgcG9ydCBDIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIGdldF9wb3J0Y19kZHIoYml0KSAJCSgodXNiX3JlYWQoR1BJT19QT1JUQ19ERFIpICYgX0JJVChiaXQpKSAhPSAwKQorLyogc2V0IHBvcnQgQyBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIHNldF9wb3J0Y19kcihiaXQsIHZhbCkgCSh2YWwgPyB1c2Jfc2V0KF9CSVQoYml0KSwgR1BJT19QT1JUQ19EUikgOiB1c2JfY2xlYXIoX0JJVChiaXQpLCBHUElPX1BPUlRDX0RSKSkKKy8qIHNldCBwb3J0IEMgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgc2V0X3BvcnRjX2RkcihiaXQsIHZhbCkgKHZhbCA/IHVzYl9zZXQoX0JJVChiaXQpLCBHUElPX1BPUlRDX0REUikgOiB1c2JfY2xlYXIoX0JJVChiaXQpLCBHUElPX1BPUlRDX0REUikpCisKKy8qCisgKiBMUEQ3QTQwNCBHUElPJ3M6CisgKiBQb3J0IEMgYml0IDEgPSBVU0IgUG9ydCAxIFBvd2VyIEVuYWJsZQorICogUG9ydCBDIGJpdCAyID0gVVNCIFBvcnQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0CisgKi8KKyNkZWZpbmUgaXNfdXNiX2Nvbm5lY3RlZCgpIAkJZ2V0X3BvcnRjX3BkcigyKQorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19ub2RlX25hbWVbXSA9ICJkcml2ZXIvdWRjIjsKKworc3RhdGljIGludAordWRjX3Byb2NfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCSAgICAgIGludCAqZW9mLCB2b2lkICpfZGV2KQoreworCWNoYXIgKmJ1ZiA9IHBhZ2U7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBfZGV2OworCWNoYXIgKm5leHQgPSBidWY7CisJdW5zaWduZWQgc2l6ZSA9IGNvdW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHQ7CisKKwlpZiAob2ZmICE9IDApCisJCXJldHVybiAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJICAgICAgRFJJVkVSX0RFU0MgIlxuIgorCQkgICAgICAiJXMgdmVyc2lvbjogJXNcbiIKKwkJICAgICAgIkdhZGdldCBkcml2ZXI6ICVzXG4iCisJCSAgICAgICJIb3N0OiAlc1xuXG4iLAorCQkgICAgICBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04sCisJCSAgICAgIGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lIDogIihub25lKSIsCisJCSAgICAgIGlzX3VzYl9jb25uZWN0ZWQoKT8gImZ1bGwgc3BlZWQiIDogImRpc2Nvbm5lY3RlZCIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSAgICAgICJHUElPOlxuIgorCQkgICAgICAiIFBvcnQgQyBiaXQgMTogJWQsIGRpciAlZFxuIgorCQkgICAgICAiIFBvcnQgQyBiaXQgMjogJWQsIGRpciAlZFxuXG4iLAorCQkgICAgICBnZXRfcG9ydGNfcGRyKDEpLCBnZXRfcG9ydGNfZGRyKDEpLAorCQkgICAgICBnZXRfcG9ydGNfcGRyKDIpLCBnZXRfcG9ydGNfZGRyKDIpCisJICAgICk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJICAgICAgIkRDUCBwdWxsdXA6ICVkXG5cbiIsCisJCSAgICAgICh1c2JfcmVhZChVU0JfUE0pICYgUE1fVVNCX0RDUCkgIT0gMCk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkqZW9mID0gMTsKKwlyZXR1cm4gY291bnQgLSBzaXplOworfQorCisjZGVmaW5lIGNyZWF0ZV9wcm9jX2ZpbGVzKCkgCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkocHJvY19ub2RlX25hbWUsIDAsIE5VTEwsIHVkY19wcm9jX3JlYWQsIGRldikKKyNkZWZpbmUgcmVtb3ZlX3Byb2NfZmlsZXMoKSAJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19ub2RlX25hbWUsIE5VTEwpCisKKyNlbHNlCS8qICFDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisjZGVmaW5lIGNyZWF0ZV9wcm9jX2ZpbGVzKCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHJlbW92ZV9wcm9jX2ZpbGVzKCkgZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisvKgorICogCXVkY19kaXNhYmxlIC0gZGlzYWJsZSBVU0IgZGV2aWNlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJdWRjX3NldF9hZGRyZXNzKGRldiwgMCk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl1c2Jfd3JpdGUoMCwgVVNCX0lOX0lOVF9FTik7CisJdXNiX3dyaXRlKDAsIFVTQl9PVVRfSU5UX0VOKTsKKwl1c2Jfd3JpdGUoMCwgVVNCX0lOVF9FTik7CisKKwkvKiBEaXNhYmxlIHRoZSBVU0IgKi8KKwl1c2Jfd3JpdGUoMCwgVVNCX1BNKTsKKworI2lmZGVmIENPTkZJR19BUkNIX0xIN0E0MDQKKwkvKiBEaXNhYmxlIFVTQiBwb3dlciAqLworCXNldF9wb3J0Y19kcigxLCAwKTsKKyNlbmRpZgorCisJLyogaWYgaGFyZHdhcmUgc3VwcG9ydHMgaXQsIGRpc2Nvbm5lY3QgZnJvbSB1c2IgKi8KKwkvKiBtYWtlX3VzYl9kaXNhcHBlYXIoKTsgKi8KKworCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCWRldi0+dXNiX2FkZHJlc3MgPSAwOworfQorCisvKgorICogCXVkY19yZWluaXQgLSBpbml0aWFsaXplIHNvZnR3YXJlIHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIHVkY19yZWluaXQoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJdTMyIGk7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwkvKiBkZXZpY2UvZXAwIHJlY29yZHMgaW5pdCAqLworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5nYWRnZXQuZXAwLT5lcF9saXN0KTsKKwlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisKKwkvKiBiYXNpYyBlbmRwb2ludCByZWNvcmRzIGluaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVURDX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAgPSAmZGV2LT5lcFtpXTsKKworCQlpZiAoaSAhPSAwKQorCQkJbGlzdF9hZGRfdGFpbCgmZXAtPmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKworCQllcC0+ZGVzYyA9IDA7CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CisJCWVwLT5waW9faXJxcyA9IDA7CisJfQorCisJLyogdGhlIHJlc3Qgd2FzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIGFuZCBpcyByZWFkLW9ubHkgKi8KK30KKworI2RlZmluZSBCWVRFUzJNQVhQKHgpCSh4IC8gOCkKKyNkZWZpbmUgTUFYUDJCWVRFUyh4KQkoeCAqIDgpCisKKy8qIHVudGlsIGl0J3MgZW5hYmxlZCwgdGhpcyBVREMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgaW52aXNpYmxlCisgKiB0byBhbnkgVVNCIGhvc3QuCisgKi8KK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJaW50IGVwOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworI2lmZGVmIENPTkZJR19BUkNIX0xIN0E0MDQKKwkvKiBTZXQgUG9ydCBDIGJpdCAxICYgMiBhcyBvdXRwdXQgKi8KKwlzZXRfcG9ydGNfZGRyKDEsIDEpOworCXNldF9wb3J0Y19kZHIoMiwgMSk7CisKKwkvKiBFbmFibGUgVVNCIHBvd2VyICovCisJc2V0X3BvcnRjX2RyKDEsIDApOworI2VuZGlmCisKKwkvKgorCSAqIEMuZiBDaGFwdGVyIDE4LjEuMy4xIEluaXRpYWxpemluZyB0aGUgVVNCCisJICovCisKKwkvKiBEaXNhYmxlIHRoZSBVU0IgKi8KKwl1c2JfY2xlYXIoUE1fVVNCX0VOQUJMRSwgVVNCX1BNKTsKKworCS8qIFJlc2V0IEFQQiAmIEkvTyBzaWRlcyBvZiB0aGUgVVNCICovCisJdXNiX3NldChVU0JfUkVTRVRfQVBCIHwgVVNCX1JFU0VUX0lPLCBVU0JfUkVTRVQpOworCW1kZWxheSg1KTsKKwl1c2JfY2xlYXIoVVNCX1JFU0VUX0FQQiB8IFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKworCS8qIFNldCBNQVhQIHZhbHVlcyBmb3IgZWFjaCAqLworCWZvciAoZXAgPSAwOyBlcCA8IFVEQ19NQVhfRU5EUE9JTlRTOyBlcCsrKSB7CisJCXN0cnVjdCBsaDdhNDB4X2VwICplcF9yZWcgPSAmZGV2LT5lcFtlcF07CisJCXUzMiBjc3I7CisKKwkJdXNiX3NldF9pbmRleChlcCk7CisKKwkJc3dpdGNoIChlcF9yZWctPmVwX3R5cGUpIHsKKwkJY2FzZSBlcF9idWxrX2luOgorCQljYXNlIGVwX2ludGVycnVwdDoKKwkJCXVzYl9jbGVhcihVU0JfSU5fQ1NSMl9VU0JfRE1BX0VOIHwgVVNCX0lOX0NTUjJfQVVUT19TRVQsCisJCQkJICBlcF9yZWctPmNzcjIpOworCQkJLyogRmFsbCB0aHJvdWdoICovCisJCWNhc2UgZXBfY29udHJvbDoKKwkJCXVzYl93cml0ZShCWVRFUzJNQVhQKGVwX21heHBhY2tldChlcF9yZWcpKSwKKwkJCQkgIFVTQl9JTl9NQVhQKTsKKwkJCWJyZWFrOworCQljYXNlIGVwX2J1bGtfb3V0OgorCQkJdXNiX2NsZWFyKFVTQl9PVVRfQ1NSMl9VU0JfRE1BX0VOIHwKKwkJCQkgIFVTQl9PVVRfQ1NSMl9BVVRPX0NMUiwgZXBfcmVnLT5jc3IyKTsKKwkJCXVzYl93cml0ZShCWVRFUzJNQVhQKGVwX21heHBhY2tldChlcF9yZWcpKSwKKwkJCQkgIFVTQl9PVVRfTUFYUCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJlYWQgJiBXcml0ZSBDU1IxLCBqdXN0IGluIGNhc2UgKi8KKwkJY3NyID0gdXNiX3JlYWQoZXBfcmVnLT5jc3IxKTsKKwkJdXNiX3dyaXRlKGNzciwgZXBfcmVnLT5jc3IxKTsKKworCQlmbHVzaChlcF9yZWcpOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXVzYl93cml0ZSgwLCBVU0JfSU5fSU5UX0VOKTsKKwl1c2Jfd3JpdGUoMCwgVVNCX09VVF9JTlRfRU4pOworCXVzYl93cml0ZSgwLCBVU0JfSU5UX0VOKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJdXNiX3NldChVU0JfSU5fSU5UX0VQMCwgVVNCX0lOX0lOVF9FTik7CisJdXNiX3NldChVU0JfSU5UX1JFU0VUX0lOVCB8IFVTQl9JTlRfUkVTVU1FX0lOVCwgVVNCX0lOVF9FTik7CisJLyogRG9udCBlbmFibGUgcmVzdCBvZiB0aGUgaW50ZXJydXB0cyAqLworCS8qIHVzYl9zZXQoVVNCX0lOX0lOVF9FUDMgfCBVU0JfSU5fSU5UX0VQMSB8IFVTQl9JTl9JTlRfRVAwLCBVU0JfSU5fSU5UX0VOKTsKKwkgICB1c2Jfc2V0KFVTQl9PVVRfSU5UX0VQMiwgVVNCX09VVF9JTlRfRU4pOyAqLworCisJLyogRW5hYmxlIFNVU1BFTkQgKi8KKwl1c2Jfc2V0KFBNX0VOQUJMRV9TVVNQRU5ELCBVU0JfUE0pOworCisJLyogRW5hYmxlIHRoZSBVU0IgKi8KKwl1c2Jfc2V0KFBNX1VTQl9FTkFCTEUsIFVTQl9QTSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisJLyogTk9URTogRE9FUyBOT1QgV09SSyEgKi8KKwkvKiBMZXQgaG9zdCBkZXRlY3QgVURDOgorCSAqIFNvZnR3YXJlIG11c3Qgd3JpdGUgYSAwIHRvIHRoZSBQTVI6RENQX0NUUkwgYml0IHRvIHR1cm4gdGhpcworCSAqIHRyYW5zaXN0b3Igb24gYW5kIHB1bGwgdGhlIFVTQkRQIHBpbiBISUdILgorCSAqLworCS8qIHVzYl9jbGVhcihQTV9VU0JfRENQLCBVU0JfUE0pOworCSAgIHVzYl9zZXQoUE1fVVNCX0RDUCwgVVNCX1BNKTsgKi8KKyNlbmRpZgorfQorCisvKgorICBSZWdpc3RlciBlbnRyeSBwb2ludCBmb3IgdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXIuCisqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJaW50IHJldHZhbDsKKworCURFQlVHKCIlczogJXNcbiIsIF9fRlVOQ1RJT05fXywgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlpZiAoIWRyaXZlcgorCSAgICB8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMCisJICAgIHx8ICFkcml2ZXItPmJpbmQKKwkgICAgfHwgIWRyaXZlci0+dW5iaW5kIHx8ICFkcml2ZXItPmRpc2Nvbm5lY3QgfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBmaXJzdCBob29rIHVwIHRoZSBkcml2ZXIgLi4uICovCisJZGV2LT5kcml2ZXIgPSBkcml2ZXI7CisJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKworCWRldmljZV9hZGQoJmRldi0+Z2FkZ2V0LmRldik7CisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoIiVzOiBiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCisJCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlkZXZpY2VfZGVsKCZkZXYtPmdhZGdldC5kZXYpOworCisJCWRldi0+ZHJpdmVyID0gMDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IDA7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogLi4uIHRoZW4gZW5hYmxlIGhvc3QgZGV0ZWN0aW9uIGFuZCBlcDA7IGFuZCB3ZSdyZSByZWFkeQorCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCisJICogTk9URTogIHRoaXMgc2hvdWxkbid0IHBvd2VyIHVwIHVudGlsIGxhdGVyLgorCSAqLworCXByaW50aygiJXM6IHJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkZXYtPmdhZGdldC5uYW1lLAorCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCXVkY19lbmFibGUoZGV2KTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworLyoKKyAgVW5yZWdpc3RlciBlbnRyeSBwb2ludCBmb3IgdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXIuCisqLworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJZGV2LT5kcml2ZXIgPSAwOworCXN0b3BfYWN0aXZpdHkoZGV2LCBkcml2ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKKwlkZXZpY2VfZGVsKCZkZXYtPmdhZGdldC5kZXYpOworCisJdWRjX2Rpc2FibGUoZGV2KTsKKworCURFQlVHKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIFdyaXRlIHJlcXVlc3QgdG8gRklGTyAobWF4IHdyaXRlID09IG1heHAgc2l6ZSkKKyAqICBSZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubworICogIE5PVEU6IElOREVYIHJlZ2lzdGVyIG11c3QgYmUgc2V0IGZvciBFUAorICovCitzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEpCit7CisJdTMyIG1heDsKKwl1MzIgY3NyOworCisJbWF4ID0gbGUxNl90b19jcHUoZXAtPmRlc2MtPndNYXhQYWNrZXRTaXplKTsKKworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlERUJVRygiQ1NSOiAleCAlZFxuIiwgY3NyLCBjc3IgJiBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWSk7CisKKwlpZiAoIShjc3IgJiBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWSkpIHsKKwkJdW5zaWduZWQgY291bnQ7CisJCWludCBpc19sYXN0LCBpc19zaG9ydDsKKworCQljb3VudCA9IHdyaXRlX3BhY2tldChlcCwgcmVxLCBtYXgpOworCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX0lOX1BLVF9SRFksIGVwLT5jc3IxKTsKKworCQkvKiBsYXN0IHBhY2tldCBpcyB1c3VhbGx5IHNob3J0IChvciBhIHpscCkgKi8KKwkJaWYgKHVubGlrZWx5KGNvdW50ICE9IG1heCkpCisJCQlpc19sYXN0ID0gaXNfc2hvcnQgPSAxOworCQllbHNlIHsKKwkJCWlmIChsaWtlbHkocmVxLT5yZXEubGVuZ3RoICE9IHJlcS0+cmVxLmFjdHVhbCkKKwkJCSAgICB8fCByZXEtPnJlcS56ZXJvKQorCQkJCWlzX2xhc3QgPSAwOworCQkJZWxzZQorCQkJCWlzX2xhc3QgPSAxOworCQkJLyogaW50ZXJydXB0L2lzbyBtYXhwYWNrZXQgbWF5IG5vdCBmaWxsIHRoZSBmaWZvICovCisJCQlpc19zaG9ydCA9IHVubGlrZWx5KG1heCA8IGVwX21heHBhY2tldChlcCkpOworCQl9CisKKwkJREVCVUcoIiVzOiB3cm90ZSAlcyAlZCBieXRlcyVzJXMgJWQgbGVmdCAlcFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICBlcC0+ZXAubmFtZSwgY291bnQsCisJCSAgICAgIGlzX2xhc3QgPyAiL0wiIDogIiIsIGlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkgICAgICByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIHJlcSk7CisKKwkJLyogcmVxdWVzdHMgY29tcGxldGUgd2hlbiBhbGwgSU4gZGF0YSBpcyBpbiB0aGUgRklGTyAqLworCQlpZiAoaXNfbGFzdCkgeworCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcGlvX2lycV9kaXNhYmxlKGVwX2luZGV4KGVwKSk7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSB7CisJCURFQlVHKCJIbW0uLiAlZCBlcCBGSUZPIGlzIG5vdCBlbXB0eSFcbiIsIGVwX2luZGV4KGVwKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKiBSZWFkIHRvIHJlcXVlc3QgZnJvbSBGSUZPIChtYXggcmVhZCA9PSBieXRlcyBpbiBmaWZvKQorICogIFJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gY29tcGxldGVkLCBuZWdhdGl2ZSA9IGVycm5vCisgKiAgTk9URTogSU5ERVggcmVnaXN0ZXIgbXVzdCBiZSBzZXQgZm9yIEVQCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9maWZvKHN0cnVjdCBsaDdhNDB4X2VwICplcCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxKQoreworCXUzMiBjc3I7CisJdTggKmJ1ZjsKKwl1bnNpZ25lZCBidWZmZXJzcGFjZSwgY291bnQsIGlzX3Nob3J0OworCXZvbGF0aWxlIHUzMiAqZmlmbyA9ICh2b2xhdGlsZSB1MzIgKillcC0+ZmlmbzsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSdzIGEgcGFja2V0IGluIHRoZSBGSUZPLiAqLworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlpZiAoIShjc3IgJiBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkpKSB7CisJCURFQlVHKCIlczogUGFja2V0IE5PVCByZWFkeSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKwlidWZmZXJzcGFjZSA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKworCS8qIHJlYWQgYWxsIGJ5dGVzIGZyb20gdGhpcyBwYWNrZXQgKi8KKwljb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCXJlcS0+cmVxLmFjdHVhbCArPSBtaW4oY291bnQsIGJ1ZmZlcnNwYWNlKTsKKworCWlzX3Nob3J0ID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCk7CisJREVCVUcoInJlYWQgJXMgJTAyeCwgJWQgYnl0ZXMlcyByZXEgJXAgJWQvJWRcbiIsCisJICAgICAgZXAtPmVwLm5hbWUsIGNzciwgY291bnQsCisJICAgICAgaXNfc2hvcnQgPyAiL1MiIDogIiIsIHJlcSwgcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJd2hpbGUgKGxpa2VseShjb3VudC0tICE9IDApKSB7CisJCXU4IGJ5dGUgPSAodTgpICgqZmlmbyAmIDB4ZmYpOworCisJCWlmICh1bmxpa2VseShidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJLyogdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlcidzIGJ1ZmZlcgorCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCisJCQkgKi8KKwkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQlwcmludGsoIiVzIG92ZXJmbG93ICVkXG4iLCBlcC0+ZXAubmFtZSwgY291bnQpOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIHsKKwkJCSpidWYrKyA9IGJ5dGU7CisJCQlidWZmZXJzcGFjZS0tOworCQl9CisJfQorCisJdXNiX2NsZWFyKFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSwgZXAtPmNzcjEpOworCisJLyogY29tcGxldGlvbiAqLworCWlmIChpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXVzYl9zZXQoVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsKKworCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCXBpb19pcnFfZGlzYWJsZShlcF9pbmRleChlcCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCXJldHVybiAwOworfQorCisvKgorICoJZG9uZSAtIHJldGlyZSBhIHJlcXVlc3Q7IGNhbGxlciBibG9ja2VkIGlycXMKKyAqICBJTkRFWCByZWdpc3RlciBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCBzYW1lCisgKi8KK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKwl1MzIgaW5kZXg7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKworCWlmIChsaWtlbHkocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykpCisJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKwllbHNlCisJCXN0YXR1cyA9IHJlcS0+cmVxLnN0YXR1czsKKworCWlmIChzdGF0dXMgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pCisJCURFQlVHKCJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCSAgICAgIGVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJICAgICAgcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCS8qIFJlYWQgY3VycmVudCBpbmRleCAoY29tcGxldGlvbiBtYXkgbW9kaWZ5IGl0KSAqLworCWluZGV4ID0gdXNiX3JlYWQoVVNCX0lOREVYKTsKKworCXNwaW5fdW5sb2NrKCZlcC0+ZGV2LT5sb2NrKTsKKwlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCXNwaW5fbG9jaygmZXAtPmRldi0+bG9jayk7CisKKwkvKiBSZXN0b3JlIGluZGV4ICovCisJdXNiX3NldF9pbmRleChpbmRleCk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisvKiogRW5hYmxlIEVQIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgcGlvX2lycV9lbmFibGUoaW50IGVwKQoreworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJc3dpdGNoIChlcCkgeworCWNhc2UgMToKKwkJdXNiX3NldChVU0JfSU5fSU5UX0VQMSwgVVNCX0lOX0lOVF9FTik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdXNiX3NldChVU0JfT1VUX0lOVF9FUDIsIFVTQl9PVVRfSU5UX0VOKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl1c2Jfc2V0KFVTQl9JTl9JTlRfRVAzLCBVU0JfSU5fSU5UX0VOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUcoIlVua25vd24gZW5kcG9pbnQ6ICVkXG4iLCBlcCk7CisJCWJyZWFrOworCX0KK30KKworLyoqIERpc2FibGUgRVAgaW50ZXJydXB0ICovCitzdGF0aWMgdm9pZCBwaW9faXJxX2Rpc2FibGUoaW50IGVwKQoreworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJc3dpdGNoIChlcCkgeworCWNhc2UgMToKKwkJdXNiX2NsZWFyKFVTQl9JTl9JTlRfRVAxLCBVU0JfSU5fSU5UX0VOKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl1c2JfY2xlYXIoVVNCX09VVF9JTlRfRVAyLCBVU0JfT1VUX0lOVF9FTik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdXNiX2NsZWFyKFVTQl9JTl9JTlRfRVAzLCBVU0JfSU5fSU5UX0VOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUcoIlVua25vd24gZW5kcG9pbnQ6ICVkXG4iLCBlcCk7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIAludWtlIC0gZGVxdWV1ZSBBTEwgcmVxdWVzdHMKKyAqLwordm9pZCBudWtlKHN0cnVjdCBsaDdhNDB4X2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCS8qIEZsdXNoIEZJRk8gKi8KKwlmbHVzaChlcCk7CisKKwkvKiBjYWxsZWQgd2l0aCBpcnFzIGJsb2NrZWQgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcXVldWUpOworCQlkb25lKGVwLCByZXEsIHN0YXR1cyk7CisJfQorCisJLyogRGlzYWJsZSBJUlEgaWYgRVAgaXMgZW5hYmxlZCAoaGFzIGRlY3JpcHRvcikgKi8KKwlpZiAoZXAtPmRlc2MpCisJCXBpb19pcnFfZGlzYWJsZShlcF9pbmRleChlcCkpOworfQorCisvKgordm9pZCBudWtlX2FsbChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldikKK3sKKwlpbnQgbjsKKwlmb3Iobj0wOyBuPFVEQ19NQVhfRU5EUE9JTlRTOyBuKyspIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbbl07CisJCXVzYl9zZXRfaW5kZXgobik7CisJCW51a2UoZXAsIDApOworCX0KK30qLworCisvKgorc3RhdGljIHZvaWQgZmx1c2hfYWxsKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KQoreworCWludCBuOworICAgIGZvciAobiA9IDA7IG4gPCBVRENfTUFYX0VORFBPSU5UUzsgbisrKQorICAgIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbbl07CisJCWZsdXNoKGVwKTsKKyAgICB9Cit9CisqLworCisvKiogRmx1c2ggRVAKKyAqIE5PVEU6IElOREVYIHJlZ2lzdGVyIG11c3QgYmUgc2V0IGJlZm9yZSB0aGlzIGNhbGwKKyAqLworc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IGxoN2E0MHhfZXAgKmVwKQoreworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJc3dpdGNoIChlcC0+ZXBfdHlwZSkgeworCWNhc2UgZXBfY29udHJvbDoKKwkJLyogY2hlY2ssIGJ5IGltcGxpY2F0aW9uIGMuZi4gMTUuMS4yLjExICovCisJCWJyZWFrOworCisJY2FzZSBlcF9idWxrX2luOgorCWNhc2UgZXBfaW50ZXJydXB0OgorCQkvKiBpZihjc3IgJiBVU0JfSU5fQ1NSMV9JTl9QS1RfUkRZKSAqLworCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsKKwkJYnJlYWs7CisKKwljYXNlIGVwX2J1bGtfb3V0OgorCQkvKiBpZihjc3IgJiBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkpICovCisJCXVzYl9zZXQoVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIGxoN2E0MHhfaW5fZXBuIC0gaGFuZGxlIElOIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X2luX2VwbihzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGVwX2lkeCwgdTMyIGludHIpCit7CisJdTMyIGNzcjsKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAgPSAmZGV2LT5lcFtlcF9pZHhdOworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKworCXVzYl9zZXRfaW5kZXgoZXBfaWR4KTsKKworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlERUJVRygiJXM6ICVkLCBjc3IgJXhcbiIsIF9fRlVOQ1RJT05fXywgZXBfaWR4LCBjc3IpOworCisJaWYgKGNzciAmIFVTQl9JTl9DU1IxX1NFTlRfU1RBTEwpIHsKKwkJREVCVUcoIlVTQl9JTl9DU1IxX1NFTlRfU1RBTExcbiIpOworCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX1NFTlRfU1RBTEwgLyp8VVNCX0lOX0NTUjFfU0VORF9TVEFMTCAqLyAsCisJCQllcC0+Y3NyMSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWVwLT5kZXNjKSB7CisJCURFQlVHKCIlczogTk8gRVAgREVTQ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSAwOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcXVldWUpOworCisJREVCVUcoInJlcTogJXBcbiIsIHJlcSk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJd3JpdGVfZmlmbyhlcCwgcmVxKTsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBCdWxrIE9VVCAocmVjdikKKyAqLworCitzdGF0aWMgdm9pZCBsaDdhNDB4X291dF9lcG4oc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBlcF9pZHgsIHUzMiBpbnRyKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwW2VwX2lkeF07CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCisJREVCVUcoIiVzOiAlZFxuIiwgX19GVU5DVElPTl9fLCBlcF9pZHgpOworCisJdXNiX3NldF9pbmRleChlcF9pZHgpOworCisJaWYgKGVwLT5kZXNjKSB7CisJCXUzMiBjc3I7CisJCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKworCQl3aGlsZSAoKGNzciA9CisJCQl1c2JfcmVhZChlcC0+CisJCQkJIGNzcjEpKSAmIChVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkgfAorCQkJCQkgICBVU0JfT1VUX0NTUjFfU0VOVF9TVEFMTCkpIHsKKwkJCURFQlVHKCIlczogJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCQkJaWYgKGNzciAmIFVTQl9PVVRfQ1NSMV9TRU5UX1NUQUxMKSB7CisJCQkJREVCVUcoIiVzOiBzdGFsbCBzZW50LCBmbHVzaCBmaWZvXG4iLAorCQkJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJLyogdXNiX3NldChVU0JfT1VUX0NTUjFfRklGT19GTFVTSCwgZXAtPmNzcjEpOyAqLworCQkJCWZsdXNoKGVwKTsKKwkJCX0gZWxzZSBpZiAoY3NyICYgVVNCX09VVF9DU1IxX09VVF9QS1RfUkRZKSB7CisJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJCXJlcSA9IDA7CisJCQkJZWxzZQorCQkJCQlyZXEgPQorCQkJCQkgICAgbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0LAorCQkJCQkJICAgICAgIHF1ZXVlKTsKKworCQkJCWlmICghcmVxKSB7CisJCQkJCXByaW50aygiJXM6IE5VTEwgUkVRICVkXG4iLAorCQkJCQkgICAgICAgX19GVU5DVElPTl9fLCBlcF9pZHgpOworCQkJCQlmbHVzaChlcCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCXJlYWRfZmlmbyhlcCwgcmVxKTsKKwkJCQl9CisJCQl9CisKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogVGhyb3cgcGFja2V0IGF3YXkuLiAqLworCQlwcmludGsoIiVzOiBObyBkZXNjcmlwdG9yPyE/XG4iLCBfX0ZVTkNUSU9OX18pOworCQlmbHVzaChlcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2FjdGl2aXR5KHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LAorCQkJICBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlpbnQgaTsKKworCS8qIGRvbid0IGRpc2Nvbm5lY3QgZHJpdmVycyBtb3JlIHRoYW4gb25jZSAqLworCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJZHJpdmVyID0gMDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJLyogcHJldmVudCBuZXcgcmVxdWVzdCBzdWJtaXNzaW9ucywga2lsbCBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdHMgICovCisJZm9yIChpID0gMDsgaSA8IFVEQ19NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbaV07CisJCWVwLT5zdG9wcGVkID0gMTsKKworCQl1c2Jfc2V0X2luZGV4KGkpOworCQludWtlKGVwLCAtRVNIVVRET1dOKTsKKwl9CisKKwkvKiByZXBvcnQgZGlzY29ubmVjdDsgdGhlIGRyaXZlciBpcyBhbHJlYWR5IHF1aWVzY2VkICovCisJaWYgKGRyaXZlcikgeworCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwkJZHJpdmVyLT5kaXNjb25uZWN0KCZkZXYtPmdhZGdldCk7CisJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwl9CisKKwkvKiByZS1pbml0IGRyaXZlci12aXNpYmxlIGRhdGEgc3RydWN0dXJlcyAqLworCXVkY19yZWluaXQoZGV2KTsKK30KKworLyoqIEhhbmRsZSBVU0IgUkVTRVQgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfcmVzZXRfaW50cihzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldikKK3sKKyNpZiAwCQkJCS8qIGRlZiBDT05GSUdfQVJDSF9MSDdBNDA0ICovCisJLyogRG9lcyBub3Qgd29yayBhbHdheXMuLi4gKi8KKworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT51c2JfYWRkcmVzcyk7CisKKwlpZiAoIWRldi0+dXNiX2FkZHJlc3MpIHsKKwkJLyp1c2Jfc2V0KFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKwkJICAgbWRlbGF5KDUpOworCQkgICB1c2JfY2xlYXIoVVNCX1JFU0VUX0lPLCBVU0JfUkVTRVQpOyAqLworCQlyZXR1cm47CisJfQorCS8qIFB1dCB0aGUgVVNCIGNvbnRyb2xsZXIgaW50byByZXNldC4gKi8KKwl1c2Jfc2V0KFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKworCS8qIFNldCBEZXZpY2UgSUQgdG8gMCAqLworCXVkY19zZXRfYWRkcmVzcyhkZXYsIDApOworCisJLyogTGV0IFBMTDIgc2V0dGxlIGRvd24gKi8KKwltZGVsYXkoNSk7CisKKwkvKiBSZWxlYXNlIHRoZSBVU0IgY29udHJvbGxlciBmcm9tIHJlc2V0ICovCisJdXNiX2NsZWFyKFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKworCS8qIFJlLWVuYWJsZSBVREMgKi8KKwl1ZGNfZW5hYmxlKGRldik7CisKKyNlbmRpZgorCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Cit9CisKKy8qCisgKglsaDdhNDB4IHVzYiBjbGllbnQgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBsaDdhNDB4X3VkY19pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBfZGV2OworCisJREVCVUcoIlxuXG4iKTsKKworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKworCWZvciAoOzspIHsKKwkJdTMyIGludHJfaW4gPSB1c2JfcmVhZChVU0JfSU5fSU5UKTsKKwkJdTMyIGludHJfb3V0ID0gdXNiX3JlYWQoVVNCX09VVF9JTlQpOworCQl1MzIgaW50cl9pbnQgPSB1c2JfcmVhZChVU0JfSU5UKTsKKworCQkvKiBUZXN0IGFsc28gYWdhaW5zdCBlbmFibGUgYml0cy4uIChsaDdhNDB4IGVycmF0YSkuLiBTaWdoLi4gKi8KKwkJdTMyIGluX2VuID0gdXNiX3JlYWQoVVNCX0lOX0lOVF9FTik7CisJCXUzMiBvdXRfZW4gPSB1c2JfcmVhZChVU0JfT1VUX0lOVF9FTik7CisKKwkJaWYgKCFpbnRyX291dCAmJiAhaW50cl9pbiAmJiAhaW50cl9pbnQpCisJCQlicmVhazsKKworCQlERUJVRygiJXMgKG9uIHN0YXRlICVzKVxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICBzdGF0ZV9uYW1lc1tkZXYtPmVwMHN0YXRlXSk7CisJCURFQlVHKCJpbnRyX291dCA9ICV4XG4iLCBpbnRyX291dCk7CisJCURFQlVHKCJpbnRyX2luICA9ICV4XG4iLCBpbnRyX2luKTsKKwkJREVCVUcoImludHJfaW50ID0gJXhcbiIsIGludHJfaW50KTsKKworCQlpZiAoaW50cl9pbikgeworCQkJdXNiX3dyaXRlKGludHJfaW4sIFVTQl9JTl9JTlQpOworCisJCQlpZiAoKGludHJfaW4gJiBVU0JfSU5fSU5UX0VQMSkKKwkJCSAgICAmJiAoaW5fZW4gJiBVU0JfSU5fSU5UX0VQMSkpIHsKKwkJCQlERUJVRygiVVNCX0lOX0lOVF9FUDFcbiIpOworCQkJCWxoN2E0MHhfaW5fZXBuKGRldiwgMSwgaW50cl9pbik7CisJCQl9CisJCQlpZiAoKGludHJfaW4gJiBVU0JfSU5fSU5UX0VQMykKKwkJCSAgICAmJiAoaW5fZW4gJiBVU0JfSU5fSU5UX0VQMykpIHsKKwkJCQlERUJVRygiVVNCX0lOX0lOVF9FUDNcbiIpOworCQkJCWxoN2E0MHhfaW5fZXBuKGRldiwgMywgaW50cl9pbik7CisJCQl9CisJCQlpZiAoaW50cl9pbiAmIFVTQl9JTl9JTlRfRVAwKSB7CisJCQkJREVCVUcoIlVTQl9JTl9JTlRfRVAwIChjb250cm9sKVxuIik7CisJCQkJbGg3YTQweF9oYW5kbGVfZXAwKGRldiwgaW50cl9pbik7CisJCQl9CisJCX0KKworCQlpZiAoaW50cl9vdXQpIHsKKwkJCXVzYl93cml0ZShpbnRyX291dCwgVVNCX09VVF9JTlQpOworCisJCQlpZiAoKGludHJfb3V0ICYgVVNCX09VVF9JTlRfRVAyKQorCQkJICAgICYmIChvdXRfZW4gJiBVU0JfT1VUX0lOVF9FUDIpKSB7CisJCQkJREVCVUcoIlVTQl9PVVRfSU5UX0VQMlxuIik7CisJCQkJbGg3YTQweF9vdXRfZXBuKGRldiwgMiwgaW50cl9vdXQpOworCQkJfQorCQl9CisKKwkJaWYgKGludHJfaW50KSB7CisJCQl1c2Jfd3JpdGUoaW50cl9pbnQsIFVTQl9JTlQpOworCisJCQlpZiAoaW50cl9pbnQgJiBVU0JfSU5UX1JFU0VUX0lOVCkgeworCQkJCWxoN2E0MHhfcmVzZXRfaW50cihkZXYpOworCQkJfQorCisJCQlpZiAoaW50cl9pbnQgJiBVU0JfSU5UX1JFU1VNRV9JTlQpIHsKKwkJCQlERUJVRygiVVNCIHJlc3VtZVxuIik7CisKKwkJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkgICAgJiYgZGV2LT5kcml2ZXIKKwkJCQkgICAgJiYgZGV2LT5kcml2ZXItPnJlc3VtZQorCQkJCSAgICAmJiBpc191c2JfY29ubmVjdGVkKCkpIHsKKwkJCQkJZGV2LT5kcml2ZXItPnJlc3VtZSgmZGV2LT5nYWRnZXQpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGludHJfaW50ICYgVVNCX0lOVF9TVVNQRU5EX0lOVCkgeworCQkJCURFQlVHKCJVU0Igc3VzcGVuZCVzXG4iLAorCQkJCSAgICAgIGlzX3VzYl9jb25uZWN0ZWQoKT8gIiIgOiAiK2Rpc2Nvbm5lY3QiKTsKKwkJCQlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSkgeworCQkJCQlzdG9wX2FjdGl2aXR5KGRldiwgZGV2LT5kcml2ZXIpOworCQkJCX0gZWxzZSBpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0KKwkJCQkJICAgVVNCX1NQRUVEX1VOS05PV04gJiYgZGV2LT5kcml2ZXIKKwkJCQkJICAgJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpIHsKKwkJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGxoN2E0MHhfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJICAgIHx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQKKwkgICAgfHwgZXAtPmJFbmRwb2ludEFkZHJlc3MgIT0gZGVzYy0+YkVuZHBvaW50QWRkcmVzcworCSAgICB8fCBlcF9tYXhwYWNrZXQoZXApIDwgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpKSB7CisJCURFQlVHKCIlcywgYmFkIGVwIG9yIGRlc2NyaXB0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHhmZXIgdHlwZXMgbXVzdCBtYXRjaCwgZXhjZXB0IHRoYXQgaW50ZXJydXB0IH49IGJ1bGsgKi8KKwlpZiAoZXAtPmJtQXR0cmlidXRlcyAhPSBkZXNjLT5ibUF0dHJpYnV0ZXMKKwkgICAgJiYgZXAtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJICAgICYmIGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJREVCVUcoIiVzLCAlcyB0eXBlIG1pc21hdGNoXG4iLCBfX0ZVTkNUSU9OX18sIF9lcC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGhhcmR3YXJlIF9jb3VsZF8gZG8gc21hbGxlciwgYnV0IGRyaXZlciBkb2Vzbid0ICovCisJaWYgKChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSworCSAgICAgJiYgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpICE9IGVwX21heHBhY2tldChlcCkpCisJICAgIHx8ICFkZXNjLT53TWF4UGFja2V0U2l6ZSkgeworCQlERUJVRygiJXMsIGJhZCAlcyBtYXhwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCURFQlVHKCIlcywgYm9ndXMgZGV2aWNlIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5kZXNjID0gZGVzYzsKKwllcC0+cGlvX2lycXMgPSAwOworCWVwLT5lcC5tYXhwYWNrZXQgPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwkvKiBSZXNldCBoYWx0IHN0YXRlIChkb2VzIGZsdXNoKSAqLworCWxoN2E0MHhfc2V0X2hhbHQoX2VwLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCURFQlVHKCIlczogZW5hYmxlZCAlc1xuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKiogRGlzYWJsZSBFUAorICogIE5PVEU6IFNldHMgSU5ERVggcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBsaDdhNDB4X2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlERUJVRygiJXMsICVzIG5vdCBlbmFibGVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgIF9lcCA/IGVwLT5lcC5uYW1lIDogTlVMTCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KGVwKSk7CisKKwkvKiBOdWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLworCW51a2UoZXAsIC1FU0hVVERPV04pOworCisJLyogRGlzYWJsZSBlcCBJUlEgKi8KKwlwaW9faXJxX2Rpc2FibGUoZXBfaW5kZXgoZXApKTsKKworCWVwLT5kZXNjID0gMDsKKwllcC0+c3RvcHBlZCA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwlERUJVRygiJXM6IGRpc2FibGVkICVzXG4iLCBfX0ZVTkNUSU9OX18sIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmxoN2E0MHhfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwKKwkJCQkJCSBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0LCByZXEpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKTsKKwlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCAqbGg3YTQweF9hbGxvY19idWZmZXIoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGJ5dGVzLAorCQkJCSAgZG1hX2FkZHJfdCAqIGRtYSwgaW50IGdmcF9mbGFncykKK3sKKwljaGFyICpyZXR2YWw7CisKKwlERUJVRygiJXMgKCVwLCAlZCwgJWQpXG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBieXRlcywgZ2ZwX2ZsYWdzKTsKKworCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyAmIH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSkpOworCWlmIChyZXR2YWwpCisJCSpkbWEgPSB2aXJ0X3RvX2J1cyhyZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqZXAsIHZvaWQgKmJ1ZiwgZG1hX2FkZHJfdCBkbWEsCisJCQkJdW5zaWduZWQgYnl0ZXMpCit7CisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJa2ZyZWUoYnVmKTsKK30KKworLyoqIFF1ZXVlIG9uZSByZXF1ZXN0CisgKiAgS2lja3N0YXJ0IHRyYW5zZmVyIGlmIG5lZWRlZAorICogIE5PVEU6IFNldHMgSU5ERVggcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBsaDdhNDB4X3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLAorCQkJIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIlxuXG5cbiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHJlcSk7CisJaWYgKHVubGlrZWx5CisJICAgICghX3JlcSB8fCAhX3JlcS0+Y29tcGxldGUgfHwgIV9yZXEtPmJ1ZgorCSAgICAgfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSkgeworCQlERUJVRygiJXMsIGJhZCBwYXJhbXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5lcC5uYW1lICE9IGVwMG5hbWUpKSkgeworCQlERUJVRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkgeworCQlERUJVRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZSAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYtPmRyaXZlcik7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCURFQlVHKCIlcyBxdWV1ZSByZXEgJXAsIGxlbiAlZCBidWYgJXBcbiIsIF9lcC0+bmFtZSwgX3JlcSwgX3JlcS0+bGVuZ3RoLAorCSAgICAgIF9yZXEtPmJ1Zik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKworCS8qIGtpY2tzdGFydCB0aGlzIGkvbyBxdWV1ZT8gKi8KKwlERUJVRygiQWRkIHRvICVkIFEgJWQgJWRcbiIsIGVwX2luZGV4KGVwKSwgbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSwKKwkgICAgICBlcC0+c3RvcHBlZCk7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgJiYgbGlrZWx5KCFlcC0+c3RvcHBlZCkpIHsKKwkJdTMyIGNzcjsKKworCQlpZiAodW5saWtlbHkoZXBfaW5kZXgoZXApID09IDApKSB7CisJCQkvKiBFUDAgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCQkJbGg3YTQweF9lcDBfa2ljayhkZXYsIGVwKTsKKwkJCXJlcSA9IDA7CisJCX0gZWxzZSBpZiAoZXBfaXNfaW4oZXApKSB7CisJCQkvKiBFUDEgJiBFUDMgKi8KKwkJCXVzYl9zZXRfaW5kZXgoZXBfaW5kZXgoZXApKTsKKwkJCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwkJCXBpb19pcnFfZW5hYmxlKGVwX2luZGV4KGVwKSk7CisJCQlpZiAoKGNzciAmIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZKSA9PSAwKSB7CisJCQkJaWYgKHdyaXRlX2ZpZm8oZXAsIHJlcSkgPT0gMSkKKwkJCQkJcmVxID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEVQMiAqLworCQkJdXNiX3NldF9pbmRleChlcF9pbmRleChlcCkpOworCQkJY3NyID0gdXNiX3JlYWQoZXAtPmNzcjEpOworCQkJcGlvX2lycV9lbmFibGUoZXBfaW5kZXgoZXApKTsKKwkJCWlmICghKGNzciAmIFVTQl9PVVRfQ1NSMV9GSUZPX0ZVTEwpKSB7CisJCQkJaWYgKHJlYWRfZmlmbyhlcCwgcmVxKSA9PSAxKQorCQkJCQlyZXEgPSAwOworCQkJfQorCQl9CisJfQorCisJLyogcGlvIG9yIGRtYSBpcnEgaGFuZGxlciBhZHZhbmNlcyB0aGUgcXVldWUuICovCisJaWYgKGxpa2VseShyZXEgIT0gMCkpCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZGVxdWV1ZSBKVVNUIE9ORSByZXF1ZXN0ICovCitzdGF0aWMgaW50IGxoN2E0MHhfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIF9lcCk7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBsaDdhNDB4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgZXAtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiogSGFsdCBzcGVjaWZpYyBFUAorICogIFJldHVybiAwIGlmIHN1Y2Nlc3MKKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyIHRvIEVQICEKKyAqLworc3RhdGljIGludCBsaDdhNDB4X3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICh1bmxpa2VseSghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpKSB7CisJCURFQlVHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KGVwKSk7CisKKwlERUJVRygiJXMsIGVwICVkLCB2YWwgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXBfaW5kZXgoZXApLCB2YWx1ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVwX2luZGV4KGVwKSA9PSAwKSB7CisJCS8qIEVQMCAqLworCQl1c2Jfc2V0KEVQMF9TRU5EX1NUQUxMLCBlcC0+Y3NyMSk7CisJfSBlbHNlIGlmIChlcF9pc19pbihlcCkpIHsKKwkJdTMyIGNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwkJaWYgKHZhbHVlICYmICgoY3NyICYgVVNCX0lOX0NTUjFfRklGT19OT1RfRU1QVFkpCisJCQkgICAgICB8fCAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpIHsKKwkJCS8qCisJCQkgKiBBdHRlbXB0cyB0byBoYWx0IElOIGVuZHBvaW50cyB3aWxsIGZhaWwgKHJldHVybmluZyAtRUFHQUlOKQorCQkJICogaWYgYW55IHRyYW5zZmVyIHJlcXVlc3RzIGFyZSBzdGlsbCBxdWV1ZWQsIG9yIGlmIHRoZSBjb250cm9sbGVyCisJCQkgKiBGSUZPIHN0aWxsIGhvbGRzIGJ5dGVzIHRoYXQgdGhlIGhvc3QgaGFzbpJ0IGNvbGxlY3RlZC4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCQkJREVCVUcKKwkJCSAgICAoIkF0dGVtcHQgdG8gaGFsdCBJTiBlbmRwb2ludCBmYWlsZWQgKHJldHVybmluZyAtRUFHQUlOKSAlZCAlZFxuIiwKKwkJCSAgICAgKGNzciAmIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZKSwKKwkJCSAgICAgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZmx1c2goZXApOworCQlpZiAodmFsdWUpCisJCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJZWxzZSB7CisJCQl1c2JfY2xlYXIoVVNCX0lOX0NTUjFfU0VORF9TVEFMTCwgZXAtPmNzcjEpOworCQkJdXNiX3NldChVU0JfSU5fQ1NSMV9DTFJfREFUQV9UT0dHTEUsIGVwLT5jc3IxKTsKKwkJfQorCisJfSBlbHNlIHsKKworCQlmbHVzaChlcCk7CisJCWlmICh2YWx1ZSkKKwkJCXVzYl9zZXQoVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJZWxzZSB7CisJCQl1c2JfY2xlYXIoVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJCXVzYl9zZXQoVVNCX09VVF9DU1IxX0NMUl9EQVRBX1JFRywgZXAtPmNzcjEpOworCQl9CisJfQorCisJaWYgKHZhbHVlKSB7CisJCWVwLT5zdG9wcGVkID0gMTsKKwl9IGVsc2UgeworCQllcC0+c3RvcHBlZCA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJREVCVUcoIiVzICVzIGhhbHRlZFxuIiwgX2VwLT5uYW1lLCB2YWx1ZSA9PSAwID8gIk5PVCIgOiAiSVMiKTsKKworCXJldHVybiAwOworfQorCisvKiogUmV0dXJuIGJ5dGVzIGluIEVQIEZJRk8KKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyIHRvIEVQCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJdTMyIGNzcjsKKwlpbnQgY291bnQgPSAwOworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAoIV9lcCkgeworCQlERUJVRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJREVCVUcoIiVzLCAlZFxuIiwgX19GVU5DVElPTl9fLCBlcF9pbmRleChlcCkpOworCisJLyogTFBEIGNhbid0IHJlcG9ydCB1bmNsYWltZWQgYnl0ZXMgZnJvbSBJTiBmaWZvcyAqLworCWlmIChlcF9pc19pbihlcCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXVzYl9zZXRfaW5kZXgoZXBfaW5kZXgoZXApKTsKKworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlpZiAoZXAtPmRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOIHx8CisJICAgIGNzciAmIFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSkgeworCQljb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoqIEZsdXNoIEVQIEZJRk8KKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyIHRvIEVQCisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICh1bmxpa2VseSghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpKSB7CisJCURFQlVHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdXNiX3NldF9pbmRleChlcF9pbmRleChlcCkpOworCWZsdXNoKGVwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFbmQgUG9pbnQgMCByZWxhdGVkIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiByZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubyAqLworc3RhdGljIGludCB3cml0ZV9maWZvX2VwMChzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIgbWF4OworCXVuc2lnbmVkIGNvdW50OworCWludCBpc19sYXN0OworCisJbWF4ID0gZXBfbWF4cGFja2V0KGVwKTsKKworCURFQlVHX0VQMCgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwljb3VudCA9IHdyaXRlX3BhY2tldChlcCwgcmVxLCBtYXgpOworCisJLyogbGFzdCBwYWNrZXQgaXMgdXN1YWxseSBzaG9ydCAob3IgYSB6bHApICovCisJaWYgKHVubGlrZWx5KGNvdW50ICE9IG1heCkpCisJCWlzX2xhc3QgPSAxOworCWVsc2UgeworCQlpZiAobGlrZWx5KHJlcS0+cmVxLmxlbmd0aCAhPSByZXEtPnJlcS5hY3R1YWwpIHx8IHJlcS0+cmVxLnplcm8pCisJCQlpc19sYXN0ID0gMDsKKwkJZWxzZQorCQkJaXNfbGFzdCA9IDE7CisJfQorCisJREVCVUdfRVAwKCIlczogd3JvdGUgJXMgJWQgYnl0ZXMlcyAlZCBsZWZ0ICVwXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgZXAtPmVwLm5hbWUsIGNvdW50LAorCQkgIGlzX2xhc3QgPyAiL0wiIDogIiIsIHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgcmVxKTsKKworCS8qIHJlcXVlc3RzIGNvbXBsZXRlIHdoZW4gYWxsIElOIGRhdGEgaXMgaW4gdGhlIEZJRk8gKi8KKwlpZiAoaXNfbGFzdCkgeworCQlkb25lKGVwLCByZXEsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGxoN2E0MHhfZmlmb19yZWFkKHN0cnVjdCBsaDdhNDB4X2VwICplcCwKKwkJCQkJdW5zaWduZWQgY2hhciAqY3AsIGludCBtYXgpCit7CisJaW50IGJ5dGVzOworCWludCBjb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCXZvbGF0aWxlIHUzMiAqZmlmbyA9ICh2b2xhdGlsZSB1MzIgKillcC0+ZmlmbzsKKworCWlmIChjb3VudCA+IG1heCkKKwkJY291bnQgPSBtYXg7CisJYnl0ZXMgPSBjb3VudDsKKwl3aGlsZSAoY291bnQtLSkKKwkJKmNwKysgPSAqZmlmbyAmIDB4RkY7CisJcmV0dXJuIGJ5dGVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxoN2E0MHhfZmlmb193cml0ZShzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsCisJCQkJCSAgdW5zaWduZWQgY2hhciAqY3AsIGludCBjb3VudCkKK3sKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisJREVCVUdfRVAwKCJmaWZvX3dyaXRlOiAlZCAlZFxuIiwgZXBfaW5kZXgoZXApLCBjb3VudCk7CisJd2hpbGUgKGNvdW50LS0pCisJCSpmaWZvID0gKmNwKys7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWZvX2VwMChzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIgY3NyOworCXU4ICpidWY7CisJdW5zaWduZWQgYnVmZmVyc3BhY2UsIGNvdW50LCBpc19zaG9ydDsKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisKKwlERUJVR19FUDAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJY3NyID0gdXNiX3JlYWQoVVNCX0VQMF9DU1IpOworCWlmICghKGNzciAmIFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSkpCisJCXJldHVybiAwOworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCXByZWZldGNodyhidWYpOworCWJ1ZmZlcnNwYWNlID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCisJLyogcmVhZCBhbGwgYnl0ZXMgZnJvbSB0aGlzIHBhY2tldCAqLworCWlmIChsaWtlbHkoY3NyICYgRVAwX09VVF9QS1RfUkRZKSkgeworCQljb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCQlyZXEtPnJlcS5hY3R1YWwgKz0gbWluKGNvdW50LCBidWZmZXJzcGFjZSk7CisJfSBlbHNlCQkJLyogemxwICovCisJCWNvdW50ID0gMDsKKworCWlzX3Nob3J0ID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCk7CisJREVCVUdfRVAwKCJyZWFkICVzICUwMngsICVkIGJ5dGVzJXMgcmVxICVwICVkLyVkXG4iLAorCQkgIGVwLT5lcC5uYW1lLCBjc3IsIGNvdW50LAorCQkgIGlzX3Nob3J0ID8gIi9TIiA6ICIiLCByZXEsIHJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCXdoaWxlIChsaWtlbHkoY291bnQtLSAhPSAwKSkgeworCQl1OCBieXRlID0gKHU4KSAoKmZpZm8gJiAweGZmKTsKKworCQlpZiAodW5saWtlbHkoYnVmZmVyc3BhY2UgPT0gMCkpIHsKKwkJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkcml2ZXIncyBidWZmZXIKKwkJCSAqIGlzIHNtYWxsZXIgdGhhbiB3aGF0IHRoZSBob3N0IHNlbnQuCisJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgorCQkJICovCisJCQlpZiAocmVxLT5yZXEuc3RhdHVzICE9IC1FT1ZFUkZMT1cpCisJCQkJREVCVUdfRVAwKCIlcyBvdmVyZmxvdyAlZFxuIiwgZXAtPmVwLm5hbWUsCisJCQkJCSAgY291bnQpOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIHsKKwkJCSpidWYrKyA9IGJ5dGU7CisJCQlidWZmZXJzcGFjZS0tOworCQl9CisJfQorCisJLyogY29tcGxldGlvbiAqLworCWlmIChpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXJldHVybiAxOworCX0KKworCS8qIGZpbmlzaGVkIHRoYXQgcGFja2V0LiAgdGhlIG5leHQgb25lIG1heSBiZSB3YWl0aW5nLi4uICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdWRjX3NldF9hZGRyZXNzIC0gc2V0IHRoZSBVU0IgYWRkcmVzcyBmb3IgdGhpcyBkZXZpY2UKKyAqIEBhZGRyZXNzOgorICoKKyAqIENhbGxlZCBmcm9tIGNvbnRyb2wgZW5kcG9pbnQgZnVuY3Rpb24gYWZ0ZXIgaXQgZGVjb2RlcyBhIHNldCBhZGRyZXNzIHNldHVwIHBhY2tldC4KKyAqLworc3RhdGljIHZvaWQgdWRjX3NldF9hZGRyZXNzKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MpCit7CisJREVCVUdfRVAwKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgYWRkcmVzcyk7CisJLyogYy5mLiAxNS4xLjIuMiBUYWJsZSAxNS00IGFkZHJlc3Mgd2lsbCBiZSB1c2VkIGFmdGVyIERBVEFfRU5EIGlzIHNldCAqLworCWRldi0+dXNiX2FkZHJlc3MgPSBhZGRyZXNzOworCXVzYl9zZXQoKGFkZHJlc3MgJiBVU0JfRkFfRlVOQ1RJT05fQUREUiksIFVTQl9GQSk7CisJdXNiX3NldChVU0JfRkFfQUREUl9VUERBVEUgfCAoYWRkcmVzcyAmIFVTQl9GQV9GVU5DVElPTl9BRERSKSwgVVNCX0ZBKTsKKwkvKiB1c2JfcmVhZChVU0JfRkEpOyAqLworfQorCisvKgorICogREFUQV9TVEFURV9SRUNWIChPVVRfUEtUX1JEWSkKKyAqICAgICAgLSBpZiBlcnJvcgorICogICAgICAgICAgICAgIHNldCBFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCB8IEVQMF9TRU5EX1NUQUxMIGJpdHMKKyAqICAgICAgLSBlbHNlCisgKiAgICAgICAgICAgICAgc2V0IEVQMF9DTFJfT1VUIGJpdAorIAkJCQlpZiBsYXN0IHNldCBFUDBfREFUQV9FTkQgYml0CisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX291dChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGNzcikKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJaW50IHJldDsKKworCURFQlVHX0VQMCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gMDsKKwllbHNlCisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHF1ZXVlKTsKKworCWlmIChyZXEpIHsKKworCQlpZiAocmVxLT5yZXEubGVuZ3RoID09IDApIHsKKwkJCURFQlVHX0VQMCgiWkVSTyBMRU5HVEggT1VUIVxuIik7CisJCQl1c2Jfc2V0KChFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJCXJldHVybjsKKwkJfQorCQlyZXQgPSByZWFkX2ZpZm9fZXAwKGVwLCByZXEpOworCQlpZiAocmV0KSB7CisJCQkvKiBEb25lISAqLworCQkJREVCVUdfRVAwKCIlczogZmluaXNoZWQsIHdhaXRpbmcgZm9yIHN0YXR1c1xuIiwKKwkJCQkgIF9fRlVOQ1RJT05fXyk7CisKKwkJCXVzYl9zZXQoKEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCQkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl9IGVsc2UgeworCQkJLyogTm90IGRvbmUgeWV0Li4gKi8KKwkJCURFQlVHX0VQMCgiJXM6IG5vdCBmaW5pc2hlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXVzYl9zZXQoRVAwX0NMUl9PVVQsIFVTQl9FUDBfQ1NSKTsKKwkJfQorCX0gZWxzZSB7CisJCURFQlVHX0VQMCgiTk8gUkVRPz8hXG4iKTsKKwl9Cit9CisKKy8qCisgKiBEQVRBX1NUQVRFX1hNSVQKKyAqLworc3RhdGljIGludCBsaDdhNDB4X2VwMF9pbihzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGNzcikKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJaW50IHJldCwgbmVlZF96bHAgPSAwOworCisJREVCVUdfRVAwKCIlczogJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSAwOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcXVldWUpOworCisJaWYgKCFyZXEpIHsKKwkJREVCVUdfRVAwKCIlczogTlVMTCBSRVFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyZXEtPnJlcS5sZW5ndGggPT0gMCkgeworCisJCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXJldHVybiAxOworCX0KKworCWlmIChyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwgPT0gRVAwX1BBQ0tFVFNJWkUpIHsKKwkJLyogTmV4dCB3cml0ZSB3aWxsIGVuZCB3aXRoIHRoZSBwYWNrZXQgc2l6ZSwgKi8KKwkJLyogc28gd2UgbmVlZCBaZXJvLWxlbmd0aC1wYWNrZXQgKi8KKwkJbmVlZF96bHAgPSAxOworCX0KKworCXJldCA9IHdyaXRlX2ZpZm9fZXAwKGVwLCByZXEpOworCisJaWYgKHJldCA9PSAxICYmICFuZWVkX3pscCkgeworCQkvKiBMYXN0IHBhY2tldCAqLworCQlERUJVR19FUDAoIiVzOiBmaW5pc2hlZCwgd2FpdGluZyBmb3Igc3RhdHVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJfSBlbHNlIHsKKwkJREVCVUdfRVAwKCIlczogbm90IGZpbmlzaGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQl1c2Jfc2V0KEVQMF9JTl9QS1RfUkRZLCBVU0JfRVAwX0NTUik7CisJfQorCisJaWYgKG5lZWRfemxwKSB7CisJCURFQlVHX0VQMCgiJXM6IE5lZWQgWkxQIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJdXNiX3NldChFUDBfSU5fUEtUX1JEWSwgVVNCX0VQMF9DU1IpOworCQlkZXYtPmVwMHN0YXRlID0gREFUQV9TVEFURV9ORUVEX1pMUDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsaDdhNDB4X2hhbmRsZV9nZXRfc3RhdHVzKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LAorCQkJCSAgICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAwID0gJmRldi0+ZXBbMF07CisJc3RydWN0IGxoN2E0MHhfZXAgKnFlcDsKKwlpbnQgcmVxdHlwZSA9IChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSyk7CisJdTE2IHZhbCA9IDA7CisKKwlpZiAocmVxdHlwZSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCS8qIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4KKwkJICogQW5kIGFjY29yZGluZyB0byB0aGUgVVNCIHNwZWMsIHRoaXMgb25lIGRvZXMgbm90aGluZy4uCisJCSAqIEp1c3QgcmV0dXJuIDAKKwkJICovCisJCURFQlVHX1NFVFVQKCJHRVRfU1RBVFVTOiBVU0JfUkVDSVBfSU5URVJGQUNFXG4iKTsKKwl9IGVsc2UgaWYgKHJlcXR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQlERUJVR19TRVRVUCgiR0VUX1NUQVRVUzogVVNCX1JFQ0lQX0RFVklDRVxuIik7CisJCXZhbCB8PSAoMSA8PCAwKTsJLyogU2VsZiBwb3dlcmVkICovCisJCS8qdmFsIHw9ICgxPDwxKTsgKi8vKiBSZW1vdGUgd2FrZXVwICovCisJfSBlbHNlIGlmIChyZXF0eXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQlpbnQgZXBfbnVtID0gKGN0cmwtPndJbmRleCAmIH5VU0JfRElSX0lOKTsKKworCQlERUJVR19TRVRVUAorCQkgICAgKCJHRVRfU1RBVFVTOiBVU0JfUkVDSVBfRU5EUE9JTlQgKCVkKSwgY3RybC0+d0xlbmd0aCA9ICVkXG4iLAorCQkgICAgIGVwX251bSwgY3RybC0+d0xlbmd0aCk7CisKKwkJaWYgKGN0cmwtPndMZW5ndGggPiAyIHx8IGVwX251bSA+IDMpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJcWVwID0gJmRldi0+ZXBbZXBfbnVtXTsKKwkJaWYgKGVwX2lzX2luKHFlcCkgIT0gKChjdHJsLT53SW5kZXggJiBVU0JfRElSX0lOKSA/IDEgOiAwKQorCQkgICAgJiYgZXBfaW5kZXgocWVwKSAhPSAwKSB7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KHFlcCkpOworCisJCS8qIFJldHVybiBzdGF0dXMgb24gbmV4dCBJTiB0b2tlbiAqLworCQlzd2l0Y2ggKHFlcC0+ZXBfdHlwZSkgeworCQljYXNlIGVwX2NvbnRyb2w6CisJCQl2YWwgPQorCQkJICAgICh1c2JfcmVhZChxZXAtPmNzcjEpICYgRVAwX1NFTkRfU1RBTEwpID09CisJCQkgICAgRVAwX1NFTkRfU1RBTEw7CisJCQlicmVhazsKKwkJY2FzZSBlcF9idWxrX2luOgorCQljYXNlIGVwX2ludGVycnVwdDoKKwkJCXZhbCA9CisJCQkgICAgKHVzYl9yZWFkKHFlcC0+Y3NyMSkgJiBVU0JfSU5fQ1NSMV9TRU5EX1NUQUxMKSA9PQorCQkJICAgIFVTQl9JTl9DU1IxX1NFTkRfU1RBTEw7CisJCQlicmVhazsKKwkJY2FzZSBlcF9idWxrX291dDoKKwkJCXZhbCA9CisJCQkgICAgKHVzYl9yZWFkKHFlcC0+Y3NyMSkgJiBVU0JfT1VUX0NTUjFfU0VORF9TVEFMTCkgPT0KKwkJCSAgICBVU0JfT1VUX0NTUjFfU0VORF9TVEFMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQmFjayB0byBFUDAgaW5kZXggKi8KKwkJdXNiX3NldF9pbmRleCgwKTsKKworCQlERUJVR19TRVRVUCgiR0VUX1NUQVRVUywgZXA6ICVkICgleCksIHZhbCA9ICVkXG4iLCBlcF9udW0sCisJCQkgICAgY3RybC0+d0luZGV4LCB2YWwpOworCX0gZWxzZSB7CisJCURFQlVHX1NFVFVQKCJVbmtub3duIFJFUSBUWVBFOiAlZFxuIiwgcmVxdHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBDbGVhciAib3V0IHBhY2tldCByZWFkeSIgKi8KKwl1c2Jfc2V0KChFUDBfQ0xSX09VVCksIFVTQl9FUDBfQ1NSKTsKKwkvKiBQdXQgc3RhdHVzIHRvIEZJRk8gKi8KKwlsaDdhNDB4X2ZpZm9fd3JpdGUoZXAwLCAodTggKikgJiB2YWwsIHNpemVvZih2YWwpKTsKKwkvKiBJc3N1ZSAiSW4gcGFja2V0IHJlYWR5IiAqLworCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXQUlUX0ZPUl9TRVRVUCAoT1VUX1BLVF9SRFkpCisgKiAgICAgIC0gcmVhZCBkYXRhIHBhY2tldCBmcm9tIEVQMCBGSUZPCisgKiAgICAgIC0gZGVjb2RlIGNvbW1hbmQKKyAqICAgICAgLSBpZiBlcnJvcgorICogICAgICAgICAgICAgIHNldCBFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCB8IEVQMF9TRU5EX1NUQUxMIGJpdHMKKyAqICAgICAgLSBlbHNlCisgKiAgICAgICAgICAgICAgc2V0IEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EIGJpdHMKKyAqLworc3RhdGljIHZvaWQgbGg3YTQweF9lcDBfc2V0dXAoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBjc3IpCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJsOworCWludCBpLCBieXRlcywgaXNfaW47CisKKwlERUJVR19TRVRVUCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkvKiBOdWtlIGFsbCBwcmV2aW91cyB0cmFuc2ZlcnMgKi8KKwludWtlKGVwLCAtRVBST1RPKTsKKworCS8qIHJlYWQgY29udHJvbCByZXEgZnJvbSBmaWZvICg4IGJ5dGVzKSAqLworCWJ5dGVzID0gbGg3YTQweF9maWZvX3JlYWQoZXAsICh1bnNpZ25lZCBjaGFyICopJmN0cmwsIDgpOworCisJREVCVUdfU0VUVVAoIlJlYWQgQ1RSTCBSRVEgJWQgYnl0ZXNcbiIsIGJ5dGVzKTsKKwlERUJVR19TRVRVUCgiQ1RSTC5iUmVxdWVzdFR5cGUgPSAlZCAoaXNfaW4gJWQpXG4iLCBjdHJsLmJSZXF1ZXN0VHlwZSwKKwkJICAgIGN0cmwuYlJlcXVlc3RUeXBlID09IFVTQl9ESVJfSU4pOworCURFQlVHX1NFVFVQKCJDVFJMLmJSZXF1ZXN0ID0gJWRcbiIsIGN0cmwuYlJlcXVlc3QpOworCURFQlVHX1NFVFVQKCJDVFJMLndMZW5ndGggPSAlZFxuIiwgY3RybC53TGVuZ3RoKTsKKwlERUJVR19TRVRVUCgiQ1RSTC53VmFsdWUgPSAlZCAoJWQpXG4iLCBjdHJsLndWYWx1ZSwgY3RybC53VmFsdWUgPj4gOCk7CisJREVCVUdfU0VUVVAoIkNUUkwud0luZGV4ID0gJWRcbiIsIGN0cmwud0luZGV4KTsKKworCS8qIFNldCBkaXJlY3Rpb24gb2YgRVAwICovCisJaWYgKGxpa2VseShjdHJsLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCWVwLT5iRW5kcG9pbnRBZGRyZXNzIHw9IFVTQl9ESVJfSU47CisJCWlzX2luID0gMTsKKwl9IGVsc2UgeworCQllcC0+YkVuZHBvaW50QWRkcmVzcyAmPSB+VVNCX0RJUl9JTjsKKwkJaXNfaW4gPSAwOworCX0KKworCWRldi0+cmVxX3BlbmRpbmcgPSAxOworCisJLyogSGFuZGxlIHNvbWUgU0VUVVAgcGFja2V0cyBvdXJzZWx2ZXMgKi8KKwlzd2l0Y2ggKGN0cmwuYlJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCWlmIChjdHJsLmJSZXF1ZXN0VHlwZSAhPSAoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCisJCURFQlVHX1NFVFVQKCJVU0JfUkVRX1NFVF9BRERSRVNTICglZClcbiIsIGN0cmwud1ZhbHVlKTsKKwkJdWRjX3NldF9hZGRyZXNzKGRldiwgY3RybC53VmFsdWUpOworCQl1c2Jfc2V0KChFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJcmV0dXJuOworCisJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6eworCQkJaWYgKGxoN2E0MHhfaGFuZGxlX2dldF9zdGF0dXMoZGV2LCAmY3RybCkgPT0gMCkKKwkJCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCQlpZiAoY3RybC5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCQkJc3RydWN0IGxoN2E0MHhfZXAgKnFlcDsKKwkJCQlpbnQgZXBfbnVtID0gKGN0cmwud0luZGV4ICYgMHgwZik7CisKKwkJCQkvKiBTdXBwb3J0IG9ubHkgSEFMVCBmZWF0dXJlICovCisJCQkJaWYgKGN0cmwud1ZhbHVlICE9IDAgfHwgY3RybC53TGVuZ3RoICE9IDAKKwkJCQkgICAgfHwgZXBfbnVtID4gMyB8fCBlcF9udW0gPCAxKQorCQkJCQlicmVhazsKKworCQkJCXFlcCA9ICZkZXYtPmVwW2VwX251bV07CisJCQkJaWYgKGN0cmwuYlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfRkVBVFVSRSkgeworCQkJCQlERUJVR19TRVRVUCgiU0VUX0ZFQVRVUkUgKCVkKVxuIiwKKwkJCQkJCSAgICBlcF9udW0pOworCQkJCQlsaDdhNDB4X3NldF9oYWx0KCZxZXAtPmVwLCAxKTsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVR19TRVRVUCgiQ0xSX0ZFQVRVUkUgKCVkKVxuIiwKKwkJCQkJCSAgICBlcF9udW0pOworCQkJCQlsaDdhNDB4X3NldF9oYWx0KCZxZXAtPmVwLCAwKTsKKwkJCQl9CisJCQkJdXNiX3NldF9pbmRleCgwKTsKKworCQkJCS8qIFJlcGx5IHdpdGggYSBaTFAgb24gbmV4dCBJTiB0b2tlbiAqLworCQkJCXVzYl9zZXQoKEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EKSwKKwkJCQkJVVNCX0VQMF9DU1IpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAobGlrZWx5KGRldi0+ZHJpdmVyKSkgeworCQkvKiBkZXZpY2UtMi1ob3N0IChJTikgb3Igbm8gZGF0YSBzZXR1cCBjb21tYW5kLCBwcm9jZXNzIGltbWVkaWF0ZWx5ICovCisJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQlpID0gZGV2LT5kcml2ZXItPnNldHVwKCZkZXYtPmdhZGdldCwgJmN0cmwpOworCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKGkgPCAwKSB7CisJCQkvKiBzZXR1cCBwcm9jZXNzaW5nIGZhaWxlZCwgZm9yY2Ugc3RhbGwgKi8KKwkJCURFQlVHX1NFVFVQCisJCQkgICAgKCIgIC0tPiBFUlJPUjogZ2FkZ2V0IHNldHVwIEZBSUxFRCAoc3RhbGxpbmcpLCBzZXR1cCByZXR1cm5lZCAlZFxuIiwKKwkJCSAgICAgaSk7CisJCQl1c2Jfc2V0X2luZGV4KDApOworCQkJdXNiX3NldCgoRVAwX0NMUl9PVVQgfCBFUDBfREFUQV9FTkQgfCBFUDBfU0VORF9TVEFMTCksCisJCQkJVVNCX0VQMF9DU1IpOworCisJCQkvKiBlcC0+c3RvcHBlZCA9IDE7ICovCisJCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCX0KKwl9Cit9CisKKy8qCisgKiBEQVRBX1NUQVRFX05FRURfWkxQCisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX2luX3pscChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGNzcikKK3sKKwlERUJVR19FUDAoIiVzOiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCisJLyogYy5mLiBUYWJsZSAxNS0xNCAqLworCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKK30KKworLyoKKyAqIGhhbmRsZSBlcDAgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfaGFuZGxlX2VwMChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGludHIpCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJdTMyIGNzcjsKKworCS8qIFNldCBpbmRleCAwICovCisJdXNiX3NldF9pbmRleCgwKTsKKyAJY3NyID0gdXNiX3JlYWQoVVNCX0VQMF9DU1IpOworCisJREVCVUdfRVAwKCIlczogY3NyID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCS8qCisJICogRm9yIG92ZXJ2aWV3IG9mIHdoYXQgd2Ugc2hvdWxkIGJlIGRvaW5nIHNlZSBjLmYuIENoYXB0ZXIgMTguMS4yLjQKKwkgKiBXZSB3aWxsIGZvbGxvdyB0aGF0IG91dGxpbmUgaGVyZSBtb2RpZmllZCBieSBvdXIgb3duIGdsb2JhbCBzdGF0ZQorCSAqIGluZGljYXRpb24gd2hpY2ggcHJvdmlkZXMgaGludHMgYXMgdG8gd2hhdCB3ZSB0aGluayBzaG91bGQgYmUKKwkgKiBoYXBwZW5pbmcuLgorCSAqLworCisJLyoKKwkgKiBpZiBTRU5UX1NUQUxMIGlzIHNldAorCSAqICAgICAgLSBjbGVhciB0aGUgU0VOVF9TVEFMTCBiaXQKKwkgKi8KKwlpZiAoY3NyICYgRVAwX1NFTlRfU1RBTEwpIHsKKwkJREVCVUdfRVAwKCIlczogRVAwX1NFTlRfU1RBTEwgaXMgc2V0OiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCQl1c2JfY2xlYXIoKEVQMF9TRU5UX1NUQUxMIHwgRVAwX1NFTkRfU1RBTEwpLCBVU0JfRVAwX0NTUik7CisJCW51a2UoZXAsIC1FQ09OTkFCT1JURUQpOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIGlmIGEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MgJiYgSU5fUEtUX1JEWSBhbmQgT1VUX1BLVF9SRFkgYXJlIGNsZWFyCisJICogICAgICAtIGZpbGwgRVAwIEZJRk8KKwkgKiAgICAgIC0gaWYgbGFzdCBwYWNrZXQKKwkgKiAgICAgIC0gICAgICAgc2V0IElOX1BLVF9SRFkgfCBEQVRBX0VORAorCSAqICAgICAgLSBlbHNlCisJICogICAgICAgICAgICAgIHNldCBJTl9QS1RfUkRZCisJICovCisJaWYgKCEoY3NyICYgKEVQMF9JTl9QS1RfUkRZIHwgRVAwX09VVF9QS1RfUkRZKSkpIHsKKwkJREVCVUdfRVAwKCIlczogSU5fUEtUX1JEWSBhbmQgT1VUX1BLVF9SRFkgYXJlIGNsZWFyXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCisJCXN3aXRjaCAoZGV2LT5lcDBzdGF0ZSkgeworCQljYXNlIERBVEFfU1RBVEVfWE1JVDoKKwkJCURFQlVHX0VQMCgiY29udGludWUgd2l0aCBEQVRBX1NUQVRFX1hNSVRcbiIpOworCQkJbGg3YTQweF9lcDBfaW4oZGV2LCBjc3IpOworCQkJcmV0dXJuOworCQljYXNlIERBVEFfU1RBVEVfTkVFRF9aTFA6CisJCQlERUJVR19FUDAoImNvbnRpbnVlIHdpdGggREFUQV9TVEFURV9ORUVEX1pMUFxuIik7CisJCQlsaDdhNDB4X2VwMF9pbl96bHAoZGV2LCBjc3IpOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJLyogU3RhbGw/ICovCisJCQlERUJVR19FUDAoIk9kZCBzdGF0ZSEhIHN0YXRlID0gJXNcbiIsCisJCQkJICBzdGF0ZV9uYW1lc1tkZXYtPmVwMHN0YXRlXSk7CisJCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCQkvKiBudWtlKGVwLCAwKTsgKi8KKwkJCS8qIHVzYl9zZXQoRVAwX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBpZiBTRVRVUF9FTkQgaXMgc2V0CisJICogICAgICAtIGFib3J0IHRoZSBsYXN0IHRyYW5zZmVyCisJICogICAgICAtIHNldCBTRVJWSUNFRF9TRVRVUF9FTkRfQklUCisJICovCisJaWYgKGNzciAmIEVQMF9TRVRVUF9FTkQpIHsKKwkJREVCVUdfRVAwKCIlczogRVAwX1NFVFVQX0VORCBpcyBzZXQ6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkJdXNiX3NldChFUDBfQ0xSX1NFVFVQX0VORCwgVVNCX0VQMF9DU1IpOworCisJCW51a2UoZXAsIDApOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJfQorCisJLyoKKwkgKiBpZiBFUDBfT1VUX1BLVF9SRFkgaXMgc2V0CisJICogICAgICAtIHJlYWQgZGF0YSBwYWNrZXQgZnJvbSBFUDAgRklGTworCSAqICAgICAgLSBkZWNvZGUgY29tbWFuZAorCSAqICAgICAgLSBpZiBlcnJvcgorCSAqICAgICAgICAgICAgICBzZXQgU0VSVklDRURfT1VUX1BLVF9SRFkgfCBEQVRBX0VORCBiaXRzIHwgU0VORF9TVEFMTAorCSAqICAgICAgLSBlbHNlCisJICogICAgICAgICAgICAgIHNldCBTRVJWSUNFRF9PVVRfUEtUX1JEWSB8IERBVEFfRU5EIGJpdHMKKwkgKi8KKwlpZiAoY3NyICYgRVAwX09VVF9QS1RfUkRZKSB7CisKKwkJREVCVUdfRVAwKCIlczogRVAwX09VVF9QS1RfUkRZIGlzIHNldDogJXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgY3NyKTsKKworCQlzd2l0Y2ggKGRldi0+ZXAwc3RhdGUpIHsKKwkJY2FzZSBXQUlUX0ZPUl9TRVRVUDoKKwkJCURFQlVHX0VQMCgiV0FJVF9GT1JfU0VUVVBcbiIpOworCQkJbGg3YTQweF9lcDBfc2V0dXAoZGV2LCBjc3IpOworCQkJYnJlYWs7CisKKwkJY2FzZSBEQVRBX1NUQVRFX1JFQ1Y6CisJCQlERUJVR19FUDAoIkRBVEFfU1RBVEVfUkVDVlxuIik7CisJCQlsaDdhNDB4X2VwMF9vdXQoZGV2LCBjc3IpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIHNlbmQgc3RhbGw/ICovCisJCQlERUJVR19FUDAoInN0cmFuZ2Ugc3RhdGUhISAyLiBzZW5kIHN0YWxsPyBzdGF0ZSA9ICVkXG4iLAorCQkJCSAgZGV2LT5lcDBzdGF0ZSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9lcDBfa2ljayhzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgc3RydWN0IGxoN2E0MHhfZXAgKmVwKQoreworCXUzMiBjc3I7CisKKwl1c2Jfc2V0X2luZGV4KDApOworCWNzciA9IHVzYl9yZWFkKFVTQl9FUDBfQ1NSKTsKKworCURFQlVHX0VQMCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkvKiBDbGVhciAib3V0IHBhY2tldCByZWFkeSIgKi8KKwl1c2Jfc2V0KEVQMF9DTFJfT1VULCBVU0JfRVAwX0NTUik7CisKKwlpZiAoZXBfaXNfaW4oZXApKSB7CisJCWRldi0+ZXAwc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CisJCWxoN2E0MHhfZXAwX2luKGRldiwgY3NyKTsKKwl9IGVsc2UgeworCQlkZXYtPmVwMHN0YXRlID0gREFUQV9TVEFURV9SRUNWOworCQlsaDdhNDB4X2VwMF9vdXQoZGV2LCBjc3IpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAJZGV2aWNlLXNjb3BlZCBwYXJ0cyBvZiB0aGUgYXBpIHRvIHRoZSB1c2IgY29udHJvbGxlciBoYXJkd2FyZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGludCBsaDdhNDB4X3VkY19nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJdTMyIGZyYW1lMSA9IHVzYl9yZWFkKFVTQl9GUk1fTlVNMSk7CS8qIExlYXN0IHNpZ25pZmljYW50IDggYml0cyAqLworCXUzMiBmcmFtZTIgPSB1c2JfcmVhZChVU0JfRlJNX05VTTIpOwkvKiBNb3N0IHNpZ25pZmljYW50IDMgYml0cyAqLworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgX2dhZGdldCk7CisJcmV0dXJuICgoZnJhbWUyICYgMHgwNykgPDwgOCkgfCAoZnJhbWUxICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCS8qIGhvc3QgbWF5IG5vdCBoYXZlIGVuYWJsZWQgcmVtb3RlIHdha2V1cCAqLworCS8qaWYgKChVRENDUzAgJiBVRENDUzBfRFJXRikgPT0gMCkKKwkgICByZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwkgICB1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfUlNNKTsgKi8KKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGxoN2E0MHhfdWRjX29wcyA9IHsKKwkuZ2V0X2ZyYW1lID0gbGg3YTQweF91ZGNfZ2V0X2ZyYW1lLAorCS53YWtldXAgPSBsaDdhNDB4X3VkY193YWtldXAsCisJLyogY3VycmVudCB2ZXJzaW9ucyBtdXN0IGFsd2F5cyBiZSBzZWxmLXBvd2VyZWQgKi8KK307CisKK3N0YXRpYyB2b2lkIG5vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlERUJVRygiJXMgJXNcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5idXNfaWQpOworfQorCitzdGF0aWMgc3RydWN0IGxoN2E0MHhfdWRjIG1lbW9yeSA9IHsKKwkudXNiX2FkZHJlc3MgPSAwLAorCisJLmdhZGdldCA9IHsKKwkJICAgLm9wcyA9ICZsaDdhNDB4X3VkY19vcHMsCisJCSAgIC5lcDAgPSAmbWVtb3J5LmVwWzBdLmVwLAorCQkgICAubmFtZSA9IGRyaXZlcl9uYW1lLAorCQkgICAuZGV2ID0geworCQkJICAgLmJ1c19pZCA9ICJnYWRnZXQiLAorCQkJICAgLnJlbGVhc2UgPSBub3BfcmVsZWFzZSwKKwkJCSAgIH0sCisJCSAgIH0sCisKKwkvKiBjb250cm9sIGVuZHBvaW50ICovCisJLmVwWzBdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9IGVwMG5hbWUsCisJCQkgLm9wcyA9ICZsaDdhNDB4X2VwX29wcywKKwkJCSAubWF4cGFja2V0ID0gRVAwX1BBQ0tFVFNJWkUsCisJCQkgfSwKKwkJICAuZGV2ID0gJm1lbW9yeSwKKworCQkgIC5iRW5kcG9pbnRBZGRyZXNzID0gMCwKKwkJICAuYm1BdHRyaWJ1dGVzID0gMCwKKworCQkgIC5lcF90eXBlID0gZXBfY29udHJvbCwKKwkJICAuZmlmbyA9IGlvX3AydihVU0JfRVAwX0ZJRk8pLAorCQkgIC5jc3IxID0gVVNCX0VQMF9DU1IsCisJCSAgLmNzcjIgPSBVU0JfRVAwX0NTUiwKKwkJICB9LAorCisJLyogZmlyc3QgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzFdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9ICJlcDFpbi1idWxrIiwKKwkJCSAub3BzID0gJmxoN2E0MHhfZXBfb3BzLAorCQkJIC5tYXhwYWNrZXQgPSA2NCwKKwkJCSB9LAorCQkgIC5kZXYgPSAmbWVtb3J5LAorCisJCSAgLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMSwKKwkJICAuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKworCQkgIC5lcF90eXBlID0gZXBfYnVsa19pbiwKKwkJICAuZmlmbyA9IGlvX3AydihVU0JfRVAxX0ZJRk8pLAorCQkgIC5jc3IxID0gVVNCX0lOX0NTUjEsCisJCSAgLmNzcjIgPSBVU0JfSU5fQ1NSMiwKKwkJICB9LAorCisJLmVwWzJdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9ICJlcDJvdXQtYnVsayIsCisJCQkgLm9wcyA9ICZsaDdhNDB4X2VwX29wcywKKwkJCSAubWF4cGFja2V0ID0gNjQsCisJCQkgfSwKKwkJICAuZGV2ID0gJm1lbW9yeSwKKworCQkgIC5iRW5kcG9pbnRBZGRyZXNzID0gMiwKKwkJICAuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKworCQkgIC5lcF90eXBlID0gZXBfYnVsa19vdXQsCisJCSAgLmZpZm8gPSBpb19wMnYoVVNCX0VQMl9GSUZPKSwKKwkJICAuY3NyMSA9IFVTQl9PVVRfQ1NSMSwKKwkJICAuY3NyMiA9IFVTQl9PVVRfQ1NSMiwKKwkJICB9LAorCisJLmVwWzNdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9ICJlcDNpbi1pbnQiLAorCQkJIC5vcHMgPSAmbGg3YTQweF9lcF9vcHMsCisJCQkgLm1heHBhY2tldCA9IDY0LAorCQkJIH0sCisJCSAgLmRldiA9ICZtZW1vcnksCisKKwkJICAuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCAzLAorCQkgIC5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisKKwkJICAuZXBfdHlwZSA9IGVwX2ludGVycnVwdCwKKwkJICAuZmlmbyA9IGlvX3AydihVU0JfRVAzX0ZJRk8pLAorCQkgIC5jc3IxID0gVVNCX0lOX0NTUjEsCisJCSAgLmNzcjIgPSBVU0JfSU5fQ1NSMiwKKwkJICB9LAorfTsKKworLyoKKyAqIAlwcm9iZSAtIGJpbmRzIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UKKyAqLworc3RhdGljIGludCBsaDdhNDB4X3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gJm1lbW9yeTsKKwlpbnQgcmV0dmFsOworCisJREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBfZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCWRldi0+ZGV2ID0gX2RldjsKKworCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OworCisJdGhlX2NvbnRyb2xsZXIgPSBkZXY7CisJZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisKKwl1ZGNfZGlzYWJsZShkZXYpOworCXVkY19yZWluaXQoZGV2KTsKKworCS8qIGlycSBzZXR1cCBhZnRlciBvbGQgaGFyZHdhcmUgc3RhdGUgaXMgY2xlYW5lZCB1cCAqLworCXJldHZhbCA9CisJICAgIHJlcXVlc3RfaXJxKElSUV9VU0JJTlRSLCBsaDdhNDB4X3VkY19pcnEsIFNBX0lOVEVSUlVQVCwgZHJpdmVyX25hbWUsCisJCQlkZXYpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlERUJVRyhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwgZHJpdmVyX25hbWUsCisJCSAgICAgIElSUV9VU0JJTlRSLCByZXR2YWwpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWNyZWF0ZV9wcm9jX2ZpbGVzKCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGxoN2E0MHhfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gX2Rldi0+ZHJpdmVyX2RhdGE7CisKKwlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwl1ZGNfZGlzYWJsZShkZXYpOworCXJlbW92ZV9wcm9jX2ZpbGVzKCk7CisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwlmcmVlX2lycShJUlFfVVNCSU5UUiwgZGV2KTsKKworCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAwKTsKKworCXRoZV9jb250cm9sbGVyID0gMDsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZSA9IChjaGFyICopZHJpdmVyX25hbWUsCisJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSBsaDdhNDB4X3VkY19wcm9iZSwKKwkucmVtb3ZlID0gbGg3YTQweF91ZGNfcmVtb3ZlCisJICAgIC8qIEZJWE1FIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLworCSAgICAvKiAuc3VzcGVuZCA9IC4uLiBkaXNhYmxlIFVEQyAqLworCSAgICAvKiAucmVzdW1lID0gLi4uIHJlLWVuYWJsZSBVREMgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCit7CisJREVCVUcoIiVzOiAlcyB2ZXJzaW9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodWRjX2luaXQpOworbW9kdWxlX2V4aXQodWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiTWlra28gTGFodGVlbm1ha2ksIEJvIEhlbnJpa3NlbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmI0NTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuaAorICogU2hhcnAgTEg3QTQweCBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWtrbyBMYWh0ZWVubWFraSwgTm9yZGljIElECisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQm8gSGVucmlrc2VuLCBOb3JkaWMgSUQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19MSDdBNDBYX0hfCisjZGVmaW5lIF9fTEg3QTQwWF9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKy8qCisgKiBNZW1vcnkgbWFwCisgKi8KKworI2RlZmluZSBVU0JfRkEJCQkJCTB4ODAwMDAyMDAJLy8gZnVuY3Rpb24gYWRkcmVzcyByZWdpc3RlcgorI2RlZmluZSBVU0JfUE0JCQkJCTB4ODAwMDAyMDQJLy8gcG93ZXIgbWFuYWdlbWVudCByZWdpc3RlcgorCisjZGVmaW5lIFVTQl9JTl9JTlQJCQkJMHg4MDAwMDIwOAkvLyBJTiBpbnRlcnJ1cHQgcmVnaXN0ZXIgYmFuayAoRVAwLUVQMykKKyNkZWZpbmUgVVNCX09VVF9JTlQJCQkJMHg4MDAwMDIxMAkvLyBPVVQgaW50ZXJydXB0IHJlZ2lzdGVyIGJhbmsgKEVQMikKKyNkZWZpbmUgVVNCX0lOVAkJCQkJMHg4MDAwMDIxOAkvLyBpbnRlcnJ1cHQgcmVnaXN0ZXIgYmFuaworCisjZGVmaW5lIFVTQl9JTl9JTlRfRU4JCQkweDgwMDAwMjFDCS8vIElOIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYmFuaworI2RlZmluZSBVU0JfT1VUX0lOVF9FTgkJCTB4ODAwMDAyMjQJLy8gT1VUIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYmFuaworI2RlZmluZSBVU0JfSU5UX0VOCQkJCTB4ODAwMDAyMkMJLy8gVVNCIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYmFuaworCisjZGVmaW5lIFVTQl9GUk1fTlVNMQkJCTB4ODAwMDAyMzAJLy8gRnJhbWUgbnVtYmVyMSByZWdpc3RlcgorI2RlZmluZSBVU0JfRlJNX05VTTIJCQkweDgwMDAwMjM0CS8vIEZyYW1lIG51bWJlcjIgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0lOREVYCQkJCTB4ODAwMDAyMzgJLy8gaW5kZXggcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfSU5fTUFYUAkJCQkweDgwMDAwMjQwCS8vIElOIE1BWFAgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0lOX0NTUjEJCQkJMHg4MDAwMDI0NAkvLyBJTiBDU1IxIHJlZ2lzdGVyL0VQMCBDU1IgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0VQMF9DU1IJCQkJMHg4MDAwMDI0NAkvLyBJTiBDU1IxIHJlZ2lzdGVyL0VQMCBDU1IgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0lOX0NTUjIJCQkJMHg4MDAwMDI0OAkvLyBJTiBDU1IyIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9PVVRfTUFYUAkJCTB4ODAwMDAyNEMJLy8gT1VUIE1BWFAgcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfT1VUX0NTUjEJCQkweDgwMDAwMjUwCS8vIE9VVCBDU1IxIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9PVVRfQ1NSMgkJCTB4ODAwMDAyNTQJLy8gT1VUIENTUjIgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX09VVF9GSUZPX1dDMQkJMHg4MDAwMDI1OAkvLyBPVVQgRklGTyB3cml0ZSBjb3VudDEgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX09VVF9GSUZPX1dDMgkJMHg4MDAwMDI1QwkvLyBPVVQgRklGTyB3cml0ZSBjb3VudDIgcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfUkVTRVQJCQkJMHg4MDAwMDQ0QwkvLyBVU0IgcmVzZXQgcmVnaXN0ZXIKKworI2RlZmluZQlVU0JfRVAwX0ZJRk8JCQkweDgwMDAwMjgwCisjZGVmaW5lCVVTQl9FUDFfRklGTwkJCTB4ODAwMDAyODQKKyNkZWZpbmUJVVNCX0VQMl9GSUZPCQkJMHg4MDAwMDI4OAorI2RlZmluZQlVU0JfRVAzX0ZJRk8JCQkweDgwMDAwMjhjCisKKy8qCisgKiBVU0IgcmVzZXQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfUkVTRVRfQVBCCQkJKDE8PDEpCS8vcmVzZXRzIFVTQiBBUEIgY29udHJvbCBzaWRlIFdSSVRFCisjZGVmaW5lIFVTQl9SRVNFVF9JTwkJCSgxPDwwKQkvL3Jlc2V0cyBVU0IgSU8gc2lkZSBXUklURQorCisvKgorICogVVNCIGZ1bmN0aW9uIGFkZHJlc3MgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfRkFfQUREUl9VUERBVEUJCSgxPDw3KQorI2RlZmluZSBVU0JfRkFfRlVOQ1RJT05fQUREUgkoMHg3RikKKworLyoKKyAqIFBvd2VyIE1hbmFnZW1lbnQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBQTV9VU0JfRENQCQkJCSgxPDw1KQorI2RlZmluZSBQTV9VU0JfRU5BQkxFCQkJKDE8PDQpCisjZGVmaW5lIFBNX1VTQl9SRVNFVAkJCSgxPDwzKQorI2RlZmluZSBQTV9VQ19SRVNVTUUJCQkoMTw8MikKKyNkZWZpbmUgUE1fU1VTUEVORF9NT0RFCQkJKDE8PDEpCisjZGVmaW5lIFBNX0VOQUJMRV9TVVNQRU5ECQkoMTw8MCkKKworLyoKKyAqIElOIGludGVycnVwdCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTl9JTlRfRVAzCQkJCSgxPDwzKQorI2RlZmluZSBVU0JfSU5fSU5UX0VQMQkJCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOX0lOVF9FUDAJCQkJKDE8PDApCisKKy8qCisgKiBPVVQgaW50ZXJydXB0IHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX09VVF9JTlRfRVAyCQkJCSgxPDwyKQorCisvKgorICogVVNCIGludGVycnVwdCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTlRfUkVTRVRfSU5UCQkJKDE8PDIpCisjZGVmaW5lIFVTQl9JTlRfUkVTVU1FX0lOVAkJCSgxPDwxKQorI2RlZmluZSBVU0JfSU5UX1NVU1BFTkRfSU5UCQkJKDE8PDApCisKKy8qCisgKiBVU0IgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTlRfRU5fVVNCX1JFU0VUX0lOVEVSCQkoMTw8MikKKyNkZWZpbmUgVVNCX0lOVF9FTl9SRVNVTUVfSU5URVIJCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOVF9FTl9TVVNQRU5EX0lOVEVSCQkoMTw8MCkKKworLyoKKyAqIElOQ1NSMSByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTl9DU1IxX0NMUl9EQVRBX1RPR0dMRQkJKDE8PDYpCisjZGVmaW5lIFVTQl9JTl9DU1IxX1NFTlRfU1RBTEwJCQkoMTw8NSkKKyNkZWZpbmUgVVNCX0lOX0NTUjFfU0VORF9TVEFMTAkJCSgxPDw0KQorI2RlZmluZSBVU0JfSU5fQ1NSMV9GSUZPX0ZMVVNICQkJKDE8PDMpCisjZGVmaW5lIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOX0NTUjFfSU5fUEtUX1JEWQkJCSgxPDwwKQorCisvKgorICogSU5DU1IyIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX0lOX0NTUjJfQVVUT19TRVQJCQkoMTw8NykKKyNkZWZpbmUgVVNCX0lOX0NTUjJfVVNCX0RNQV9FTgkJCSgxPDw0KQorCisvKgorICogT1VUIENTUjEgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfT1VUX0NTUjFfQ0xSX0RBVEFfUkVHCQkoMTw8NykKKyNkZWZpbmUgVVNCX09VVF9DU1IxX1NFTlRfU1RBTEwJCQkoMTw8NikKKyNkZWZpbmUgVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwJCQkoMTw8NSkKKyNkZWZpbmUgVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gJCQkoMTw8NCkKKyNkZWZpbmUgVVNCX09VVF9DU1IxX0ZJRk9fRlVMTAkJCSgxPDwxKQorI2RlZmluZSBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkJCSgxPDwwKQorCisvKgorICogT1VUIENTUjIgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfT1VUX0NTUjJfQVVUT19DTFIJCQkoMTw8NykKKyNkZWZpbmUgVVNCX09VVF9DU1IyX1VTQl9ETUFfRU4JCQkoMTw8NCkKKworLyoKKyAqIEVQMCBDU1IKKyAqLworI2RlZmluZSBFUDBfQ0xSX1NFVFVQX0VORAkJKDE8PDcpCS8qIENsZWFyICJTZXR1cCBFbmRzIiBCaXQgKHcpICovCisjZGVmaW5lIEVQMF9DTFJfT1VUCQkJCSgxPDw2KQkvKiBDbGVhciAiT3V0IHBhY2tldCByZWFkeSIgQml0ICh3KSAqLworI2RlZmluZSBFUDBfU0VORF9TVEFMTAkJCSgxPDw1KQkvKiBTZW5kIFNUQUxMIEhhbmRzaGFrZSAocncpICovCisjZGVmaW5lIEVQMF9TRVRVUF9FTkQJCQkoMTw8NCkJLyogU2V0dXAgRW5kcyAocikgKi8KKworI2RlZmluZSBFUDBfREFUQV9FTkQJCQkoMTw8MykJLyogRGF0YSBlbmQgKHJ3KSAqLworI2RlZmluZSBFUDBfU0VOVF9TVEFMTAkJCSgxPDwyKQkvKiBTZW50IFN0YWxsIEhhbmRzaGFrZSAocikgKi8KKyNkZWZpbmUgRVAwX0lOX1BLVF9SRFkJCQkoMTw8MSkJLyogSW4gcGFja2V0IHJlYWR5IChydykgKi8KKyNkZWZpbmUgRVAwX09VVF9QS1RfUkRZCQkJKDE8PDApCS8qIE91dCBwYWNrZXQgcmVhZHkgKHIpICovCisKKy8qIGdlbmVyYWwgQ1NSICovCisjZGVmaW5lIE9VVF9QS1RfUkRZCQkoMTw8MCkKKyNkZWZpbmUgSU5fUEtUX1JEWQkJKDE8PDApCisKKy8qCisgKiBJTi9PVVQgTUFYUCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9PVVRfTUFYUF9NQVhQCQkJKDB4RikKKyNkZWZpbmUgVVNCX0lOX01BWFBfTUFYUAkJCSgweEYpCisKKy8vIE1heCBwYWNrZXQgc2l6ZQorLy8jZGVmaW5lIEVQMF9QQUNLRVRTSVpFICAgICAgICAweDEwCisjZGVmaW5lIEVQMF9QQUNLRVRTSVpFICAJMHg4CisjZGVmaW5lIEVQMF9NQVhQQUNLRVRTSVpFICAJMHgxMAorCisjZGVmaW5lIFVEQ19NQVhfRU5EUE9JTlRTICAgICAgIDQKKworI2RlZmluZSBXQUlUX0ZPUl9TRVRVUCAgICAgICAgICAwCisjZGVmaW5lIERBVEFfU1RBVEVfWE1JVCAgICAgICAgIDEKKyNkZWZpbmUgREFUQV9TVEFURV9ORUVEX1pMUCAgICAgMgorI2RlZmluZSBXQUlUX0ZPUl9PVVRfU1RBVFVTICAgICAzCisjZGVmaW5lIERBVEFfU1RBVEVfUkVDViAgICAgICAgIDQKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBJTworICovCisKK3R5cGVkZWYgZW51bSBlcF90eXBlIHsKKwllcF9jb250cm9sLCBlcF9idWxrX2luLCBlcF9idWxrX291dCwgZXBfaW50ZXJydXB0Cit9IGVwX3R5cGVfdDsKKworc3RydWN0IGxoN2E0MHhfZXAgeworCXN0cnVjdCB1c2JfZXAgZXA7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXY7CisKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIHBpb19pcnFzOworCisJdTggc3RvcHBlZDsKKwl1OCBiRW5kcG9pbnRBZGRyZXNzOworCXU4IGJtQXR0cmlidXRlczsKKworCWVwX3R5cGVfdCBlcF90eXBlOworCXUzMiBmaWZvOworCXUzMiBjc3IxOworCXUzMiBjc3IyOworfTsKKworc3RydWN0IGxoN2E0MHhfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworfTsKKworc3RydWN0IGxoN2E0MHhfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCXNwaW5sb2NrX3QgbG9jazsKKworCWludCBlcDBzdGF0ZTsKKwlzdHJ1Y3QgbGg3YTQweF9lcCBlcFtVRENfTUFYX0VORFBPSU5UU107CisKKwl1bnNpZ25lZCBjaGFyIHVzYl9hZGRyZXNzOworCisJdW5zaWduZWQgcmVxX3BlbmRpbmc6MSwgcmVxX3N0ZDoxLCByZXFfY29uZmlnOjE7Cit9OworCitleHRlcm4gc3RydWN0IGxoN2E0MHhfdWRjICp0aGVfY29udHJvbGxlcjsKKworI2RlZmluZSBlcF9pc19pbihFUCkgCQkoKChFUCktPmJFbmRwb2ludEFkZHJlc3MmVVNCX0RJUl9JTik9PVVTQl9ESVJfSU4pCisjZGVmaW5lIGVwX2luZGV4KEVQKSAJCSgoRVApLT5iRW5kcG9pbnRBZGRyZXNzJjB4RikKKyNkZWZpbmUgZXBfbWF4cGFja2V0KEVQKSAJKChFUCktPmVwLm1heHBhY2tldCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmRpcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUzYmJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIG5kaXMuaCAKKyAqIAorICogbnRkZG5kaXMuaCBtb2RpZmllZCBieSBCZW5lZGlrdCBTcHJhbmdlciA8Yi5zcHJhbmdlckBwZW5ndXRyb25peC5kZT4KKyAqIAorICogVGhhbmtzIHRvIHRoZSBjeWd3aW4gZGV2ZWxvcG1lbnQgdGVhbSwgCisgKiBlc3BhY2lhbGx5IHRvIENhc3BlciBTLiBIb3Juc3RydXAgPGNob3Juc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgTk9UIENPUFlSSUdIVEVECisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBvZmZlcmVkIGZvciB1c2UgaW4gdGhlIHB1YmxpYyBkb21haW4uIFlvdSBtYXkKKyAqIHVzZSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgaXQgZnJlZWx5LgorICoKKyAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFkuIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQgQVJFIEhFUkVCWQorICogRElTQ0xBSU1FRC4gVGhpcyBpbmNsdWRlcyBidXQgaXMgbm90IGxpbWl0ZWQgdG8gd2FycmFudGllcyBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORElTX0gKKyNkZWZpbmUgX0xJTlVYX05ESVNfSAorCisKKyNkZWZpbmUgTkRJU19TVEFUVVNfTVVMVElDQVNUX0ZVTEwJICAweEMwMDEwMDA5CisjZGVmaW5lIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9FWElTVFMgICAgICAweEMwMDEwMDBBCisjZGVmaW5lIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9OT1RfRk9VTkQgICAweEMwMDEwMDBCCisKK2VudW0gTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgeworCU5kaXNEZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKKwlOZGlzRGV2aWNlU3RhdGVEMCwKKwlOZGlzRGV2aWNlU3RhdGVEMSwKKwlOZGlzRGV2aWNlU3RhdGVEMiwKKwlOZGlzRGV2aWNlU3RhdGVEMywKKwlOZGlzRGV2aWNlU3RhdGVNYXhpbXVtCit9OworCitzdHJ1Y3QgTkRJU19QTV9XQUtFX1VQX0NBUEFCSUxJVElFUyB7CisJZW51bSBORElTX0RFVklDRV9QT1dFUl9TVEFURSAgTWluTWFnaWNQYWNrZXRXYWtlVXA7CisJZW51bSBORElTX0RFVklDRV9QT1dFUl9TVEFURSAgTWluUGF0dGVybldha2VVcDsKKwllbnVtIE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFICBNaW5MaW5rQ2hhbmdlV2FrZVVwOworfTsKKworLyogTkRJU19QTlBfQ0FQQUJJTElUSUVTLkZsYWdzIGNvbnN0YW50cyAqLworI2RlZmluZSBORElTX0RFVklDRV9XQUtFX1VQX0VOQUJMRSAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5ESVNfREVWSUNFX1dBS0VfT05fUEFUVEVSTl9NQVRDSF9FTkFCTEUgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkRJU19ERVZJQ0VfV0FLRV9PTl9NQUdJQ19QQUNLRVRfRU5BQkxFICAgMHgwMDAwMDAwNAorCitzdHJ1Y3QgTkRJU19QTlBfQ0FQQUJJTElUSUVTIHsKKwl1MzIJCQkJCUZsYWdzOworCXN0cnVjdCBORElTX1BNX1dBS0VfVVBfQ0FQQUJJTElUSUVTCVdha2VVcENhcGFiaWxpdGllczsKK307CisKK3N0cnVjdCBORElTX1BNX1BBQ0tFVF9QQVRURVJOIHsKKwl1MzIJUHJpb3JpdHk7CisJdTMyCVJlc2VydmVkOworCXUzMglNYXNrU2l6ZTsKKwl1MzIJUGF0dGVybk9mZnNldDsKKwl1MzIJUGF0dGVyblNpemU7CisJdTMyCVBhdHRlcm5GbGFnczsKK307CisKKworLyogUmVxdWlyZWQgT2JqZWN0IElEcyAoT0lEcykgKi8KKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JURURfTElTVCAgICAgICAgICAgIDB4MDAwMTAxMDEKKyNkZWZpbmUgT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVMgICAgICAgICAgIDB4MDAwMTAxMDIKKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQgICAgICAgICAgIDB4MDAwMTAxMDMKKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9JTl9VU0UgICAgICAgICAgICAgIDB4MDAwMTAxMDQKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0xPT0tBSEVBRCAgICAgICAgIDB4MDAwMTAxMDUKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUgICAgICAgIDB4MDAwMTAxMDYKKyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVEICAgICAgICAgICAgICAgIDB4MDAwMTAxMDcKKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CVUZGRVJfU1BBQ0UgICAgIDB4MDAwMTAxMDgKKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRSAgICAgIDB4MDAwMTAxMDkKKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFICAgICAgIDB4MDAwMTAxMEEKKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUgICAgICAgIDB4MDAwMTAxMEIKKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MDAwMTAxMEMKKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04gICAgICAgIDB4MDAwMTAxMEQKKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgICAgIDB4MDAwMTAxMEUKKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX0xPT0tBSEVBRCAgICAgICAgIDB4MDAwMTAxMEYKKyNkZWZpbmUgT0lEX0dFTl9EUklWRVJfVkVSU0lPTiAgICAgICAgICAgIDB4MDAwMTAxMTAKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkUgICAgICAgIDB4MDAwMTAxMTEKKyNkZWZpbmUgT0lEX0dFTl9QUk9UT0NPTF9PUFRJT05TICAgICAgICAgIDB4MDAwMTAxMTIKKyNkZWZpbmUgT0lEX0dFTl9NQUNfT1BUSU9OUyAgICAgICAgICAgICAgIDB4MDAwMTAxMTMKKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUyAgICAgIDB4MDAwMTAxMTQKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1NFTkRfUEFDS0VUUyAgICAgIDB4MDAwMTAxMTUKKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04gICAgIDB4MDAwMTAxMTYKKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JURURfR1VJRFMgICAgICAgICAgIDB4MDAwMTAxMTcKKyNkZWZpbmUgT0lEX0dFTl9ORVRXT1JLX0xBWUVSX0FERFJFU1NFUyAgIDB4MDAwMTAxMTgKKyNkZWZpbmUgT0lEX0dFTl9UUkFOU1BPUlRfSEVBREVSX09GRlNFVCAgIDB4MDAwMTAxMTkKKyNkZWZpbmUgT0lEX0dFTl9NQUNISU5FX05BTUUgICAgICAgICAgICAgIDB4MDAwMTAyMUEKKyNkZWZpbmUgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSICAgIDB4MDAwMTAyMUIKKyNkZWZpbmUgT0lEX0dFTl9WTEFOX0lEICAgICAgICAgICAgICAgICAgIDB4MDAwMTAyMUMKKworLyogT3B0aW9uYWwgT0lEcyAqLworI2RlZmluZSBPSURfR0VOX01FRElBX0NBUEFCSUxJVElFUyAgICAgICAgMHgwMDAxMDIwMQorI2RlZmluZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTSAgICAgICAgICAgMHgwMDAxMDIwMgorCisvKiBSZXF1aXJlZCBzdGF0aXN0aWNzIE9JRHMgKi8KKyNkZWZpbmUgT0lEX0dFTl9YTUlUX09LICAgICAgICAgICAgICAgICAgIDB4MDAwMjAxMDEKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAxMDIKKyNkZWZpbmUgT0lEX0dFTl9YTUlUX0VSUk9SICAgICAgICAgICAgICAgIDB4MDAwMjAxMDMKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfRVJST1IgICAgICAgICAgICAgICAgIDB4MDAwMjAxMDQKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAgIDB4MDAwMjAxMDUKKworLyogT3B0aW9uYWwgc3RhdGlzdGljcyBPSURzICovCisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVCAgICAgICAweDAwMDIwMjAxCisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQgICAgICAweDAwMDIwMjAyCisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQgICAgICAweDAwMDIwMjAzCisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUICAgICAweDAwMDIwMjA0CisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQgICAgICAweDAwMDIwMjA1CisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUICAgICAweDAwMDIwMjA2CisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfQllURVNfUkNWICAgICAgICAweDAwMDIwMjA3CisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDViAgICAgICAweDAwMDIwMjA4CisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDViAgICAgICAweDAwMDIwMjA5CisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1YgICAgICAweDAwMDIwMjBBCisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDViAgICAgICAweDAwMDIwMjBCCisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgICAgICAweDAwMDIwMjBDCisjZGVmaW5lIE9JRF9HRU5fUkNWX0NSQ19FUlJPUiAgICAgICAgICAgICAweDAwMDIwMjBECisjZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIICAgICAweDAwMDIwMjBFCisjZGVmaW5lIE9JRF9HRU5fR0VUX1RJTUVfQ0FQUyAgICAgICAgICAgICAweDAwMDIwMjBGCisjZGVmaW5lIE9JRF9HRU5fR0VUX05FVENBUkRfVElNRSAgICAgICAgICAweDAwMDIwMjEwCisjZGVmaW5lIE9JRF9HRU5fTkVUQ0FSRF9MT0FEICAgICAgICAgICAgICAweDAwMDIwMjExCisjZGVmaW5lIE9JRF9HRU5fREVWSUNFX1BST0ZJTEUgICAgICAgICAgICAweDAwMDIwMjEyCisjZGVmaW5lIE9JRF9HRU5fSU5JVF9USU1FX01TICAgICAgICAgICAgICAweDAwMDIwMjEzCisjZGVmaW5lIE9JRF9HRU5fUkVTRVRfQ09VTlRTICAgICAgICAgICAgICAweDAwMDIwMjE0CisjZGVmaW5lIE9JRF9HRU5fTUVESUFfU0VOU0VfQ09VTlRTICAgICAgICAweDAwMDIwMjE1CisjZGVmaW5lIE9JRF9HRU5fRlJJRU5ETFlfTkFNRSAgICAgICAgICAgICAweDAwMDIwMjE2CisjZGVmaW5lIE9JRF9HRU5fTUlOSVBPUlRfSU5GTyAgICAgICAgICAgICAweDAwMDIwMjE3CisjZGVmaW5lIE9JRF9HRU5fUkVTRVRfVkVSSUZZX1BBUkFNRVRFUlMgICAweDAwMDIwMjE4CisKKy8qIElFRUUgODAyLjMgKEV0aGVybmV0KSBPSURzICovCisjZGVmaW5lIE5ESVNfODAyXzNfTUFDX09QVElPTl9QUklPUklUWSAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTICAgICAgIDB4MDEwMTAxMDEKKyNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUyAgICAgICAgIDB4MDEwMTAxMDIKKyNkZWZpbmUgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUICAgICAgICAgIDB4MDEwMTAxMDMKKyNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFICAgICAgIDB4MDEwMTAxMDQKKyNkZWZpbmUgT0lEXzgwMl8zX01BQ19PUFRJT05TICAgICAgICAgICAgIDB4MDEwMTAxMDUKKyNkZWZpbmUgT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQgICAgIDB4MDEwMjAxMDEKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTiAgICAgIDB4MDEwMjAxMDIKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TICAgIDB4MDEwMjAxMDMKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQgICAgICAgICAgIDB4MDEwMjAyMDEKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlMgICAgIDB4MDEwMjAyMDIKKyNkZWZpbmUgT0lEXzgwMl8zX1JDVl9PVkVSUlVOICAgICAgICAgICAgIDB4MDEwMjAyMDMKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfVU5ERVJSVU4gICAgICAgICAgIDB4MDEwMjAyMDQKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfSEVBUlRCRUFUX0ZBSUxVUkUgIDB4MDEwMjAyMDUKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfVElNRVNfQ1JTX0xPU1QgICAgIDB4MDEwMjAyMDYKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTEFURV9DT0xMSVNJT05TICAgIDB4MDEwMjAyMDcKKworLyogT0lEX0dFTl9NSU5JUE9SVF9JTkZPIGNvbnN0YW50cyAqLworI2RlZmluZSBORElTX01JTklQT1JUX0JVU19NQVNURVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORElTX01JTklQT1JUX1dETV9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORElTX01JTklQT1JUX1NHX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX01FRElBX1FVRVJZICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBORElTX01JTklQT1JUX0lORElDQVRFU19QQUNLRVRTICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBORElTX01JTklQT1JUX0lHTk9SRV9QQUNLRVRfUVVFVUUgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBORElTX01JTklQT1JUX0lHTk9SRV9SRVFVRVNUX1FVRVVFICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORElTX01JTklQT1JUX0lHTk9SRV9UT0tFTl9SSU5HX0VSUk9SUyAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBORElTX01JTklQT1JUX0lOVEVSTUVESUFURV9EUklWRVIgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBORElTX01JTklQT1JUX0lTX05ESVNfNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBORElTX01JTklQT1JUX0lTX0NPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBORElTX01JTklQT1JUX0RFU0VSSUFMSVpFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBORElTX01JTklQT1JUX1JFUVVJUkVTX01FRElBX1BPTExJTkcgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX01FRElBX1NFTlNFICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBORElTX01JTklQT1JUX05FVEJPT1RfQ0FSRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1BNX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX01BQ19BRERSRVNTX09WRVJXUklURSAgMHgwMDAxMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1VTRVNfU0FGRV9CVUZGRVJfQVBJUyAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX0hJRERFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NXRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUlBSSVNFX1JFTU9WRV9PSyAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX05PX0hBTFRfT05fU1VTUEVORCAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX0hBUkRXQVJFX0RFVklDRSAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX0NBTkNFTF9TRU5EX1BBQ0tFVFMgICAgMHgwMDgwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUXzY0QklUU19ETUEgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorCisjZGVmaW5lIE5ESVNfTUVESVVNXzgwMl8zCQkweDAwMDAwMDAwCisjZGVmaW5lIE5ESVNfTUVESVVNXzgwMl81CQkweDAwMDAwMDAxCisjZGVmaW5lIE5ESVNfTUVESVVNX0ZEREkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTkRJU19NRURJVU1fV0FOCQkJMHgwMDAwMDAwMworI2RlZmluZSBORElTX01FRElVTV9MT0NBTF9UQUxLCQkweDAwMDAwMDA0CisjZGVmaW5lIE5ESVNfTUVESVVNX0RJWAkJCTB4MDAwMDAwMDUKKyNkZWZpbmUgTkRJU19NRURJVU1fQVJDRU5UX1JBVwkJMHgwMDAwMDAwNgorI2RlZmluZSBORElTX01FRElVTV9BUkNFTlRfODc4XzIJMHgwMDAwMDAwNworI2RlZmluZSBORElTX01FRElVTV9BVE0JCQkweDAwMDAwMDA4CisjZGVmaW5lIE5ESVNfTUVESVVNX1dJUkVMRVNTX0xBTgkweDAwMDAwMDA5CisjZGVmaW5lIE5ESVNfTUVESVVNX0lSREEJCTB4MDAwMDAwMEEKKyNkZWZpbmUgTkRJU19NRURJVU1fQlBDCQkJMHgwMDAwMDAwQgorI2RlZmluZSBORElTX01FRElVTV9DT19XQU4JCTB4MDAwMDAwMEMKKyNkZWZpbmUgTkRJU19NRURJVU1fMTM5NAkJMHgwMDAwMDAwRAorCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJMHgwMDAwMDAwMQorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkweDAwMDAwMDAyCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkweDAwMDAwMDA0CisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCTB4MDAwMDAwMDgKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORwkweDAwMDAwMDEwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJMHgwMDAwMDAyMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1NNVAkJMHgwMDAwMDA0MAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTAkweDAwMDAwMDgwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfR1JPVVAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTAkweDAwMDAwMjAwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTAkweDAwMDAwNDAwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfTUFDX0ZSQU1FCTB4MDAwMDA4MDAKKworI2RlZmluZSBORElTX01FRElBX1NUQVRFX0NPTk5FQ1RFRAkweDAwMDAwMDAwCisjZGVmaW5lIE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVECTB4MDAwMDAwMDEKKworI2RlZmluZSBORElTX01BQ19PUFRJT05fQ09QWV9MT09LQUhFQURfREFUQSAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORElTX01BQ19PUFRJT05fUkVDRUlWRV9TRVJJQUxJWkVEICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORElTX01BQ19PUFRJT05fVFJBTlNGRVJTX05PVF9QRU5EICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBORElTX01BQ19PUFRJT05fTk9fTE9PUEJBQ0sgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVggICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBORElTX01BQ19PUFRJT05fRU9UWF9JTkRJQ0FUSU9OICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBORElTX01BQ19PUFRJT05fODAyMVBfUFJJT1JJVFkgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORElTX01BQ19PUFRJT05fUkVTRVJWRUQgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZW5kaWYgLyogX0xJTlVYX05ESVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0NTdmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTAsMCArMSwyOTY3IEBACisvKgorICogRHJpdmVyIGZvciB0aGUgUExYIE5FVDIyODAgVVNCIGRldmljZSBjb250cm9sbGVyLgorICogU3BlY3MgYW5kIGVycmF0YSBhcmUgYXZhaWxhYmxlIGZyb20gPGh0dHA6Ly93d3cucGx4dGVjaC5jb20+LgorICoKKyAqIFBMWCBUZWNobm9sb2d5IEluYy4gKGZvcm1lcmx5IE5ldENoaXAgVGVjaG5vbG9neSkgc3VwcG9ydGVkIHRoZSAKKyAqIGRldmVsb3BtZW50IG9mIHRoaXMgZHJpdmVyLgorICoKKyAqCisgKiBDT0RFIFNUQVRVUyBISUdITElHSFRTCisgKgorICogVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2VsbCB3aXRoIG1vc3QgImdhZGdldCIgZHJpdmVycywgaW5jbHVkaW5nCisgKiB0aGUgRmlsZSBTdG9yYWdlLCBTZXJpYWwsIGFuZCBFdGhlcm5ldC9STkRJUyBnYWRnZXQgZHJpdmVycworICogYXMgd2VsbCBhcyBHYWRnZXQgWmVybyBhbmQgR2FkZ2V0ZnMuCisgKgorICogRE1BIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIERyaXZlcnMgdXNpbmcgdHJhbnNmZXIgcXVldWVzIG1pZ2h0IHVzZQorICogRE1BIGNoYWluaW5nIHRvIHJlbW92ZSBJUlEgbGF0ZW5jaWVzIGJldHdlZW4gdHJhbnNmZXJzLiAgKEV4Y2VwdCB3aGVuCisgKiBzaG9ydCBPVVQgdHJhbnNmZXJzIGhhcHBlbi4pICBEcml2ZXJzIGNhbiB1c2UgdGhlIHJlcS0+bm9faW50ZXJydXB0CisgKiBoaW50IHRvIGNvbXBsZXRlbHkgZWxpbWluYXRlIHNvbWUgSVJRcywgaWYgYSBsYXRlciBJUlEgaXMgZ3VhcmFudGVlZAorICogYW5kIERNQSBjaGFpbmluZyBpcyBlbmFibGVkLgorICoKKyAqIE5vdGUgdGhhdCBhbG1vc3QgYWxsIHRoZSBlcnJhdGEgd29ya2Fyb3VuZHMgaGVyZSBhcmUgb25seSBuZWVkZWQgZm9yCisgKiByZXYxIGNoaXBzLiAgUmV2MWEgc2lsaWNvbiAoMDExMCkgZml4ZXMgYWxtb3N0IGFsbCBvZiB0aGVtLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFBMWCBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyN1bmRlZglERUJVRwkJLyogbWVzc2FnZXMgb24gZXJyb3IgYW5kIG1vc3QgZmF1bHQgcGF0aHMgKi8KKyN1bmRlZglWRVJCT1NFCQkvKiBleHRyYSBkZWJ1ZyBtZXNzYWdlcyAoc3VjY2VzcyB0b28pICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJCSJQTFggTkVUMjI4MCBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJIjIwMDUgRmViIDAzIgorCisjZGVmaW5lCURNQV9BRERSX0lOVkFMSUQJKH4oZG1hX2FkZHJfdCkwKQorI2RlZmluZQlFUF9ET05UVVNFCQkxMwkvKiBub256ZXJvICovCisKKyNkZWZpbmUgVVNFX1JES19MRURTCQkvKiBHUElPIHBpbnMgY29udHJvbCB0aHJlZSBMRURzICovCisKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAibmV0MjI4MCI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOworCitzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lIFtdID0gImVwMCI7CitzdGF0aWMgY29uc3QgY2hhciAqZXBfbmFtZSBbXSA9IHsKKwllcDBuYW1lLAorCSJlcC1hIiwgImVwLWIiLCAiZXAtYyIsICJlcC1kIiwKKwkiZXAtZSIsICJlcC1mIiwKK307CisKKy8qIHVzZV9kbWEgLS0gZ2VuZXJhbCBnb29kbmVzcywgZmV3ZXIgaW50ZXJydXB0cywgbGVzcyBjcHUgbG9hZCAodnMgUElPKQorICogdXNlX2RtYV9jaGFpbmluZyAtLSBkbWEgZGVzY3JpcHRvciBxdWV1ZWluZyBnaXZlcyBldmVuIG1vcmUgaXJxIHJlZHVjdGlvbgorICoKKyAqIFRoZSBuZXQyMjgwIERNQSBlbmdpbmVzIGFyZSBub3QgdGlnaHRseSBpbnRlZ3JhdGVkIHdpdGggdGhlaXIgRklGT3M7CisgKiBub3QgYWxsIGNhc2VzIGFyZSAoeWV0KSBoYW5kbGVkIHdlbGwgaW4gdGhpcyBkcml2ZXIgb3IgdGhlIHNpbGljb24uCisgKiBTb21lIGdhZGdldCBkcml2ZXJzIHdvcmsgYmV0dGVyIHdpdGggdGhlIGRtYSBzdXBwb3J0IGhlcmUgdGhhbiBvdGhlcnMuCisgKiBUaGVzZSB0d28gcGFyYW1ldGVycyBsZXQgeW91IHVzZSBQSU8gb3IgbW9yZSBhZ2dyZXNzaXZlIERNQS4KKyAqLworc3RhdGljIGludCB1c2VfZG1hID0gMTsKK3N0YXRpYyBpbnQgdXNlX2RtYV9jaGFpbmluZyA9IDA7CisKKy8qICJtb2Rwcm9iZSBuZXQyMjgwIHVzZV9kbWE9biIgZXRjICovCittb2R1bGVfcGFyYW0gKHVzZV9kbWEsIGJvb2wsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtICh1c2VfZG1hX2NoYWluaW5nLCBib29sLCBTX0lSVUdPKTsKKworCisvKiBtb2RlIDAgPT0gZXAte2EsYixjLGR9IDFLIGZpZm8gZWFjaAorICogbW9kZSAxID09IGVwLXthLGJ9IDJLIGZpZm8gZWFjaCwgZXAte2MsZH0gdW5hdmFpbGFibGUKKyAqIG1vZGUgMiA9PSBlcC1hIDJLIGZpZm8sIGVwLXtiLGN9IDFLIGVhY2gsIGVwLWQgdW5hdmFpbGFibGUKKyAqLworc3RhdGljIHVzaG9ydCBmaWZvX21vZGUgPSAwOworCisvKiAibW9kcHJvYmUgbmV0MjI4MCBmaWZvX21vZGU9MSIgZXRjICovCittb2R1bGVfcGFyYW0gKGZpZm9fbW9kZSwgdXNob3J0LCAwNjQ0KTsKKworLyogZW5hYmxlX3N1c3BlbmQgLS0gV2hlbiBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgcmVzcG9uZCB0bworICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgYnkgcG93ZXJpbmcgZG93biB0aGUgTkVUMjI4MC4gIE90aGVyd2lzZSwKKyAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgYWNjZXB0aWJsZSBmb3IKKyAqIHNlbGYtcG93ZXJlZCBkZXZpY2VzLCBhbmQgaGVscHMgYXZvaWQgc29tZSBxdWlya3MuCisgKi8KK3N0YXRpYyBpbnQgZW5hYmxlX3N1c3BlbmQgPSAwOworCisvKiAibW9kcHJvYmUgbmV0MjI4MCBlbmFibGVfc3VzcGVuZD0xIiBldGMgKi8KK21vZHVsZV9wYXJhbSAoZW5hYmxlX3N1c3BlbmQsIGJvb2wsIFNfSVJVR08pOworCisKKyNkZWZpbmUJRElSX1NUUklORyhiQWRkcmVzcykgKCgoYkFkZHJlc3MpICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIpCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTKSB8fCBkZWZpbmVkIChERUJVRykKK3N0YXRpYyBjaGFyICp0eXBlX3N0cmluZyAodTggYm1BdHRyaWJ1dGVzKQoreworCXN3aXRjaCAoKGJtQXR0cmlidXRlcykgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoJcmV0dXJuICJidWxrIjsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CXJldHVybiAiaXNvIjsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoJcmV0dXJuICJpbnRyIjsKKwl9OworCXJldHVybiAiY29udHJvbCI7Cit9CisjZW5kaWYKKworI2luY2x1ZGUgIm5ldDIyODAuaCIKKworI2RlZmluZSB2YWxpZF9iaXQJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBWQUxJRF9CSVQpCisjZGVmaW5lIGRtYV9kb25lX2llCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorbmV0MjI4MF9lbmFibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwl1MzIJCQltYXgsIHRtcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWRlc2MgfHwgZXAtPmRlc2MgfHwgX2VwLT5uYW1lID09IGVwMG5hbWUKKwkJCXx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGVwLT5kZXY7CisJaWYgKCFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiBlcnJhdHVtIDAxMTkgd29ya2Fyb3VuZCB0aWVzIHVwIGFuIGVuZHBvaW50IG51bWJlciAqLworCWlmICgoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYpID09IEVQX0RPTlRVU0UpCisJCXJldHVybiAtRURPTTsKKworCS8qIHNhbml0eSBjaGVjayBlcC1lL2VwLWYgc2luY2UgdGhlaXIgZmlmb3MgYXJlIHNtYWxsICovCisJbWF4ID0gbGUxNl90b19jcHUgKGRlc2MtPndNYXhQYWNrZXRTaXplKSAmIDB4MWZmZjsKKwlpZiAoZXAtPm51bSA+IDQgJiYgbWF4ID4gNjQpCisJCXJldHVybiAtRVJBTkdFOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlfZXAtPm1heHBhY2tldCA9IG1heCAmIDB4N2ZmOworCWVwLT5kZXNjID0gZGVzYzsKKworCS8qIGVwX3Jlc2V0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPm91dF9vdmVyZmxvdyA9IDA7CisKKwkvKiBzZXQgc3BlZWQtZGVwZW5kZW50IG1heCBwYWNrZXQ7IG1heSBraWNrIGluIGhpZ2ggYmFuZHdpZHRoICovCisJc2V0X2lkeF9yZWcgKGRldi0+cmVncywgUkVHX0VQX01BWFBLVCAoZGV2LCBlcC0+bnVtKSwgbWF4KTsKKworCS8qIEZJRk8gbGluZXMgY2FuJ3QgZ28gdG8gZGlmZmVyZW50IHBhY2tldHMuICBQSU8gaXMgb2ssIHNvCisJICogdXNlIGl0IGluc3RlYWQgb2YgdHJvdWJsZXNvbWUgKG5vbi1idWxrKSBtdWx0aS1wYWNrZXQgRE1BLgorCSAqLworCWlmIChlcC0+ZG1hICYmIChtYXggJSA0KSAhPSAwICYmIHVzZV9kbWFfY2hhaW5pbmcpIHsKKwkJREVCVUcgKGVwLT5kZXYsICIlcywgbm8gZG1hIGZvciBtYXhwYWNrZXQgJWRcbiIsCisJCQllcC0+ZXAubmFtZSwgZXAtPmVwLm1heHBhY2tldCk7CisJCWVwLT5kbWEgPSBOVUxMOworCX0KKworCS8qIHNldCB0eXBlLCBkaXJlY3Rpb24sIGFkZHJlc3M7IHJlc2V0IGZpZm8gY291bnRlcnMgKi8KKwl3cml0ZWwgKCgxIDw8IEZJRk9fRkxVU0gpLCAmZXAtPnJlZ3MtPmVwX3N0YXQpOworCXRtcCA9IChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJaWYgKHRtcCA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJLyogZXJyYXR1bSAwMTA1IHdvcmthcm91bmQgcHJldmVudHMgaHMgTllFVCAqLworCQlpZiAoZGV2LT5jaGlwcmV2ID09IDAxMDAKKwkJCQkmJiBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfSElHSAorCQkJCSYmICEoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKQorCQkJd3JpdGVsICgoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSksCisJCQkJJmVwLT5yZWdzLT5lcF9yc3ApOworCX0gZWxzZSBpZiAodG1wID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJLyogY2F0Y2ggc29tZSBwYXJ0aWN1bGFybHkgYmxhdGFudCBkcml2ZXIgYnVncyAqLworCQlpZiAoKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9ISUdICisJCQkJCSYmIG1heCAhPSA1MTIpCisJCQkJfHwgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9GVUxMCisJCQkJCSYmIG1heCA+IDY0KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FUkFOR0U7CisJCX0KKwl9CisJZXAtPmlzX2lzbyA9ICh0bXAgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgPyAxIDogMDsKKwl0bXAgPDw9IEVORFBPSU5UX1RZUEU7CisJdG1wIHw9IGRlc2MtPmJFbmRwb2ludEFkZHJlc3M7CisJdG1wIHw9ICg0IDw8IEVORFBPSU5UX0JZVEVfQ09VTlQpOwkvKiBkZWZhdWx0IGZ1bGwgZmlmbyBsaW5lcyAqLworCXRtcCB8PSAxIDw8IEVORFBPSU5UX0VOQUJMRTsKKwl3bWIgKCk7CisKKwkvKiBmb3IgT1VUIHRyYW5zZmVycywgYmxvY2sgdGhlIHJ4IGZpZm8gdW50aWwgYSByZWFkIGlzIHBvc3RlZCAqLworCWVwLT5pc19pbiA9ICh0bXAgJiBVU0JfRElSX0lOKSAhPSAwOworCWlmICghZXAtPmlzX2luKQorCQl3cml0ZWwgKCgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisKKwl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9jZmcpOworCisJLyogZW5hYmxlIGlycXMgKi8KKwlpZiAoIWVwLT5kbWEpIHsJCQkJLyogcGlvLCBwZXItcGFja2V0ICovCisJCXRtcCA9ICgxIDw8IGVwLT5udW0pIHwgcmVhZGwgKCZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOworCQl3cml0ZWwgKHRtcCwgJmRldi0+cmVncy0+cGNpaXJxZW5iMCk7CisKKwkJdG1wID0gKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSkKKwkJCXwgKDEgPDwgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUX0VOQUJMRSkKKwkJCXwgcmVhZGwgKCZlcC0+cmVncy0+ZXBfaXJxZW5iKTsKKwkJd3JpdGVsICh0bXAsICZlcC0+cmVncy0+ZXBfaXJxZW5iKTsKKwl9IGVsc2UgewkJCQkvKiBkbWEsIHBlci1yZXF1ZXN0ICovCisJCXRtcCA9ICgxIDw8ICg4ICsgZXAtPm51bSkpOwkvKiBjb21wbGV0aW9uICovCisJCXRtcCB8PSByZWFkbCAoJmRldi0+cmVncy0+cGNpaXJxZW5iMSk7CisJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIxKTsKKworCQkvKiBmb3Igc2hvcnQgT1VUIHRyYW5zZmVycywgZG1hIGNvbXBsZXRpb25zIGNhbid0CisJCSAqIGFkdmFuY2UgdGhlIHF1ZXVlOyBkbyBpdCBwaW8tc3R5bGUsIGJ5IGhhbmQuCisJCSAqIE5PVEUgZXJyYXR1bSAwMTEyIHdvcmthcm91bmQgIzIKKwkJICovCisJCWlmICgoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID09IDApIHsKKwkJCXRtcCA9ICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX2lycWVuYik7CisKKwkJCXRtcCA9ICgxIDw8IGVwLT5udW0pIHwgcmVhZGwgKCZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOworCQkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOworCQl9CisJfQorCisJdG1wID0gZGVzYy0+YkVuZHBvaW50QWRkcmVzczsKKwlERUJVRyAoZGV2LCAiZW5hYmxlZCAlcyAoZXAlZCVzLSVzKSAlcyBtYXggJTA0eFxuIiwKKwkJX2VwLT5uYW1lLCB0bXAgJiAweDBmLCBESVJfU1RSSU5HICh0bXApLAorCQl0eXBlX3N0cmluZyAoZGVzYy0+Ym1BdHRyaWJ1dGVzKSwKKwkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsIG1heCk7CisKKwkvKiBwY2kgd3JpdGVzIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZHNoYWtlICh1MzIgX19pb21lbSAqcHRyLCB1MzIgbWFzaywgdTMyIGRvbmUsIGludCB1c2VjKQoreworCXUzMglyZXN1bHQ7CisKKwlkbyB7CisJCXJlc3VsdCA9IHJlYWRsIChwdHIpOworCQlpZiAocmVzdWx0ID09IH4odTMyKTApCQkvKiAiZGV2aWNlIHVucGx1Z2dlZCIgKi8KKwkJCXJldHVybiAtRU5PREVWOworCQlyZXN1bHQgJj0gbWFzazsKKwkJaWYgKHJlc3VsdCA9PSBkb25lKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSAoMSk7CisJCXVzZWMtLTsKKwl9IHdoaWxlICh1c2VjID4gMCk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBuZXQyMjgwX2VwX29wczsKKworc3RhdGljIHZvaWQgZXBfcmVzZXQgKHN0cnVjdCBuZXQyMjgwX3JlZ3MgX19pb21lbSAqcmVncywgc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCXUzMgkJdG1wOworCisJZXAtPmRlc2MgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEICgmZXAtPnF1ZXVlKTsKKworCWVwLT5lcC5tYXhwYWNrZXQgPSB+MDsKKwllcC0+ZXAub3BzID0gJm5ldDIyODBfZXBfb3BzOworCisJLyogZGlzYWJsZSB0aGUgZG1hLCBpcnFzLCBlbmRwb2ludC4uLiAqLworCWlmIChlcC0+ZG1hKSB7CisJCXdyaXRlbCAoMCwgJmVwLT5kbWEtPmRtYWN0bCk7CisJCXdyaXRlbCAoICAoMSA8PCBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgRE1BX0FCT1JUKQorCQkJLCAmZXAtPmRtYS0+ZG1hc3RhdCk7CisKKwkJdG1wID0gcmVhZGwgKCZyZWdzLT5wY2lpcnFlbmIwKTsKKwkJdG1wICY9IH4oMSA8PCBlcC0+bnVtKTsKKwkJd3JpdGVsICh0bXAsICZyZWdzLT5wY2lpcnFlbmIwKTsKKwl9IGVsc2UgeworCQl0bXAgPSByZWFkbCAoJnJlZ3MtPnBjaWlycWVuYjEpOworCQl0bXAgJj0gfigxIDw8ICg4ICsgZXAtPm51bSkpOwkvKiBjb21wbGV0aW9uICovCisJCXdyaXRlbCAodG1wLCAmcmVncy0+cGNpaXJxZW5iMSk7CisJfQorCXdyaXRlbCAoMCwgJmVwLT5yZWdzLT5lcF9pcnFlbmIpOworCisJLyogaW5pdCB0byBvdXIgY2hvc2VuIGRlZmF1bHRzLCBub3RhYmx5IHNvIHRoYXQgd2UgTkFLIE9VVAorCSAqIHBhY2tldHMgdW50aWwgdGhlIGRyaXZlciBxdWV1ZXMgYSByZWFkICgrbm90ZSBlcnJhdHVtIDAxMTIpCisJICovCisJdG1wID0gKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFKQorCQl8ICgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpCisJCXwgKDEgPDwgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UpCisJCXwgKDEgPDwgQ0xFQVJfSU5URVJSVVBUX01PREUpOworCisJaWYgKGVwLT5udW0gIT0gMCkgeworCQl0bXAgfD0gKDEgPDwgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFKQorCQkJfCAoMSA8PCBDTEVBUl9FTkRQT0lOVF9IQUxUKTsKKwl9CisJd3JpdGVsICh0bXAsICZlcC0+cmVncy0+ZXBfcnNwKTsKKworCS8qIHNjcnViIG1vc3Qgc3RhdHVzIGJpdHMsIGFuZCBmbHVzaCBhbnkgZmlmbyBzdGF0ZSAqLworCXdyaXRlbCAoICAoMSA8PCBUSU1FT1VUKQorCQl8ICgxIDw8IFVTQl9TVEFMTF9TRU5UKQorCQl8ICgxIDw8IFVTQl9JTl9OQUtfU0VOVCkKKwkJfCAoMSA8PCBVU0JfSU5fQUNLX1JDVkQpCisJCXwgKDEgPDwgVVNCX09VVF9QSU5HX05BS19TRU5UKQorCQl8ICgxIDw8IFVTQl9PVVRfQUNLX1NFTlQpCisJCXwgKDEgPDwgRklGT19PVkVSRkxPVykKKwkJfCAoMSA8PCBGSUZPX1VOREVSRkxPVykKKwkJfCAoMSA8PCBGSUZPX0ZMVVNIKQorCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQpCisJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQpCisJCXwgKDEgPDwgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUKQorCQl8ICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKQorCQl8ICgxIDw8IERBVEFfSU5fVE9LRU5fSU5URVJSVVBUKQorCQksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisKKwkvKiBmaWZvIHNpemUgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5ICovCit9CisKK3N0YXRpYyB2b2lkIG51a2UgKHN0cnVjdCBuZXQyMjgwX2VwICopOworCitzdGF0aWMgaW50IG5ldDIyODBfZGlzYWJsZSAoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCW51a2UgKGVwKTsKKwllcF9yZXNldCAoZXAtPmRldi0+cmVncywgZXApOworCisJVkRFQlVHIChlcC0+ZGV2LCAiZGlzYWJsZWQgJXMgJXNcbiIsCisJCQllcC0+ZG1hID8gImRtYSIgOiAicGlvIiwgX2VwLT5uYW1lKTsKKworCS8qIHN5bmNoIG1lbW9yeSB2aWV3cyB3aXRoIHRoZSBkZXZpY2UgKi8KKwkodm9pZCkgcmVhZGwgKCZlcC0+cmVncy0+ZXBfY2ZnKTsKKworCWlmICh1c2VfZG1hICYmICFlcC0+ZG1hICYmIGVwLT5udW0gPj0gMSAmJiBlcC0+bnVtIDw9IDQpCisJCWVwLT5kbWEgPSAmZXAtPmRldi0+ZG1hIFtlcC0+bnVtIC0gMV07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK25ldDIyODBfYWxsb2NfcmVxdWVzdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKworCXJlcSA9IGttYWxsb2MgKHNpemVvZiAqcmVxLCBnZnBfZmxhZ3MpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOworCisJLyogdGhpcyBkbWEgZGVzY3JpcHRvciBtYXkgYmUgc3dhcHBlZCB3aXRoIHRoZSBwcmV2aW91cyBkdW1teSAqLworCWlmIChlcC0+ZG1hKSB7CisJCXN0cnVjdCBuZXQyMjgwX2RtYQkqdGQ7CisKKwkJdGQgPSBwY2lfcG9vbF9hbGxvYyAoZXAtPmRldi0+cmVxdWVzdHMsIGdmcF9mbGFncywKKwkJCQkmcmVxLT50ZF9kbWEpOworCQlpZiAoIXRkKSB7CisJCQlrZnJlZSAocmVxKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXRkLT5kbWFjb3VudCA9IDA7CS8qIG5vdCBWQUxJRCAqLworCQl0ZC0+ZG1hYWRkciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOworCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOworCQlyZXEtPnRkID0gdGQ7CisJfQorCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkCituZXQyMjgwX2ZyZWVfcmVxdWVzdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIV9yZXEpCisJCXJldHVybjsKKworCXJlcSA9IGNvbnRhaW5lcl9vZiAoX3JlcSwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcmVxKTsKKwlXQVJOX09OICghbGlzdF9lbXB0eSAoJnJlcS0+cXVldWUpKTsKKwlpZiAocmVxLT50ZCkKKwkJcGNpX3Bvb2xfZnJlZSAoZXAtPmRldi0+cmVxdWVzdHMsIHJlcS0+dGQsIHJlcS0+dGRfZG1hKTsKKwlrZnJlZSAocmVxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI3VuZGVmIFVTRV9LTUFMTE9DCisKKy8qIG1hbnkgY29tbW9uIHBsYXRmb3JtcyBoYXZlIGRtYS1jb2hlcmVudCBjYWNoZXMsIHdoaWNoIG1lYW5zIHRoYXQgaXQncworICogc2FmZSB0byB1c2Uga21hbGxvYygpIG1lbW9yeSBmb3IgYWxsIGkvbyBidWZmZXJzIHdpdGhvdXQgdXNpbmcgYW55CisgKiBjYWNoZSBmbHVzaGluZyBjYWxscy4gICh1bmxlc3MgeW91J3JlIHRyeWluZyB0byBzaGFyZSBjYWNoZSBsaW5lcworICogYmV0d2VlbiBkbWEgYW5kIG5vbi1kbWEgYWN0aXZpdGllcywgd2hpY2ggaXMgYSBzbG93IGlkZWEgaW4gYW55IGNhc2UuKQorICoKKyAqIG90aGVyIHBsYXRmb3JtcyBuZWVkIG1vcmUgY2FyZSwgd2l0aCAyLjUgaGF2aW5nIGEgbW9kZXJhdGVseSBnZW5lcmFsCisgKiBzb2x1dGlvbiAod2hpY2ggZmFsbHMgZG93biBmb3IgYWxsb2NhdGlvbnMgc21hbGxlciB0aGFuIG9uZSBwYWdlKQorICogdGhhdCBpbXByb3ZlcyBzaWduaWZpY2FudGx5IG9uIHRoZSAyLjQgUENJIGFsbG9jYXRvcnMgYnkgcmVtb3ZpbmcKKyAqIHRoZSByZXN0cmljdGlvbiB0aGF0IG1lbW9yeSBuZXZlciBiZSBmcmVlZCBpbl9pbnRlcnJ1cHQoKS4KKyAqLworI2lmCWRlZmluZWQoQ09ORklHX1g4NikKKyNkZWZpbmUgVVNFX0tNQUxMT0MKKworI2VsaWYJZGVmaW5lZChDT05GSUdfUFBDKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQorI2RlZmluZSBVU0VfS01BTExPQworCisjZWxpZglkZWZpbmVkKENPTkZJR19NSVBTKSAmJiAhZGVmaW5lZChDT05GSUdfTk9OQ09IRVJFTlRfSU8pCisjZGVmaW5lIFVTRV9LTUFMTE9DCisKKy8qIEZJWE1FIHRoZXJlIGFyZSBvdGhlciBjYXNlcywgaW5jbHVkaW5nIGFuIHg4Ni02NCBvbmUgLi4uICAqLworI2VuZGlmCisKKy8qIGFsbG9jYXRpbmcgYnVmZmVycyB0aGlzIHdheSBlbGltaW5hdGVzIGRtYSBtYXBwaW5nIG92ZXJoZWFkLCB3aGljaAorICogb24gc29tZSBwbGF0Zm9ybXMgd2lsbCBtZWFuIGVsaW1pbmF0aW5nIGEgcGVyLWlvIGJ1ZmZlciBjb3B5LiAgd2l0aAorICogc29tZSBraW5kcyBvZiBzeXN0ZW0gY2FjaGVzLCBmdXJ0aGVyIHR3ZWFrcyBtYXkgc3RpbGwgYmUgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCAqCituZXQyMjgwX2FsbG9jX2J1ZmZlciAoCisJc3RydWN0IHVzYl9lcAkJKl9lcCwKKwl1bnNpZ25lZAkJYnl0ZXMsCisJZG1hX2FkZHJfdAkJKmRtYSwKKwlpbnQJCQlnZnBfZmxhZ3MKKykKK3sKKwl2b2lkCQkJKnJldHZhbDsKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwKQorCQlyZXR1cm4gTlVMTDsKKwkqZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKworI2lmCWRlZmluZWQoVVNFX0tNQUxMT0MpCisJcmV0dmFsID0ga21hbGxvYyhieXRlcywgZ2ZwX2ZsYWdzKTsKKwlpZiAocmV0dmFsKQorCQkqZG1hID0gdmlydF90b19waHlzKHJldHZhbCk7CisjZWxzZQorCWlmIChlcC0+ZG1hKSB7CisJCS8qIHRoZSBtYWluIHByb2JsZW0gd2l0aCB0aGlzIGNhbGwgaXMgdGhhdCBpdCB3YXN0ZXMgbWVtb3J5CisJCSAqIG9uIHR5cGljYWwgMS9OIHBhZ2UgYWxsb2NhdGlvbnM6IGl0IGFsbG9jYXRlcyAxLU4gcGFnZXMuCisJCSAqLworI3dhcm5pbmcgVXNpbmcgZG1hX2FsbG9jX2NvaGVyZW50IGV2ZW4gd2l0aCBidWZmZXJzIHNtYWxsZXIgdGhhbiBhIHBhZ2UuCisJCXJldHZhbCA9IGRtYV9hbGxvY19jb2hlcmVudCgmZXAtPmRldi0+cGRldi0+ZGV2LAorCQkJCWJ5dGVzLCBkbWEsIGdmcF9mbGFncyk7CisJfSBlbHNlCisJCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyk7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorbmV0MjI4MF9mcmVlX2J1ZmZlciAoCisJc3RydWN0IHVzYl9lcCAqX2VwLAorCXZvaWQgKmJ1ZiwKKwlkbWFfYWRkcl90IGRtYSwKKwl1bnNpZ25lZCBieXRlcworKSB7CisJLyogZnJlZSBtZW1vcnkgaW50byB0aGUgcmlnaHQgYWxsb2NhdG9yICovCisjaWZuZGVmCVVTRV9LTUFMTE9DCisJaWYgKGRtYSAhPSBETUFfQUREUl9JTlZBTElEKSB7CisJCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKworCQllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJCWlmICghX2VwKQorCQkJcmV0dXJuOworCQlkbWFfZnJlZV9jb2hlcmVudCgmZXAtPmRldi0+cGRldi0+ZGV2LCBieXRlcywgYnVmLCBkbWEpOworCX0gZWxzZQorI2VuZGlmCisJCWtmcmVlIChidWYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBsb2FkIGEgcGFja2V0IGludG8gdGhlIGZpZm8gd2UgdXNlIGZvciB1c2IgSU4gdHJhbnNmZXJzLgorICogd29ya3MgZm9yIGFsbCBlbmRwb2ludHMuCisgKgorICogTk9URTogcGlvIHdpdGggZXAtYS4uZXAtZCBjb3VsZCBzdHVmZiBtdWx0aXBsZSBwYWNrZXRzIGludG8gdGhlIGZpZm8KKyAqIGF0IGEgdGltZSwgYnV0IHRoaXMgY29kZSBpcyBzaW1wbGVyIGJlY2F1c2UgaXQga25vd3MgaXQgb25seSB3cml0ZXMKKyAqIG9uZSBwYWNrZXQuICBlcC1hLi5lcC1kIHNob3VsZCB1c2UgZG1hIGluc3RlYWQuCisgKi8KK3N0YXRpYyB2b2lkCit3cml0ZV9maWZvIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MJX19pb21lbSAqcmVncyA9IGVwLT5yZWdzOworCXU4CQkJKmJ1ZjsKKwl1MzIJCQl0bXA7CisJdW5zaWduZWQJCWNvdW50LCB0b3RhbDsKKworCS8qIElOVkFSSUFOVDogIGZpZm8gaXMgY3VycmVudGx5IGVtcHR5LiAodGVzdGFibGUpICovCisKKwlpZiAocmVxKSB7CisJCWJ1ZiA9IHJlcS0+YnVmICsgcmVxLT5hY3R1YWw7CisJCXByZWZldGNoIChidWYpOworCQl0b3RhbCA9IHJlcS0+bGVuZ3RoIC0gcmVxLT5hY3R1YWw7CisJfSBlbHNlIHsKKwkJdG90YWwgPSAwOworCQlidWYgPSBOVUxMOworCX0KKworCS8qIHdyaXRlIGp1c3Qgb25lIHBhY2tldCBhdCBhIHRpbWUgKi8KKwljb3VudCA9IGVwLT5lcC5tYXhwYWNrZXQ7CisJaWYgKGNvdW50ID4gdG90YWwpCS8qIG1pbigpIGNhbm5vdCBiZSB1c2VkIG9uIGEgYml0ZmllbGQgKi8KKwkJY291bnQgPSB0b3RhbDsKKworCVZERUJVRyAoZXAtPmRldiwgIndyaXRlICVzIGZpZm8gKElOKSAlZCBieXRlcyVzIHJlcSAlcFxuIiwKKwkJCWVwLT5lcC5uYW1lLCBjb3VudCwKKwkJCShjb3VudCAhPSBlcC0+ZXAubWF4cGFja2V0KSA/ICIgKHNob3J0KSIgOiAiIiwKKwkJCXJlcSk7CisJd2hpbGUgKGNvdW50ID49IDQpIHsKKwkJLyogTk9URSBiZSBjYXJlZnVsIGlmIHlvdSB0cnkgdG8gYWxpZ24gdGhlc2UuIGZpZm8gbGluZXMKKwkJICogc2hvdWxkIG5vcm1hbGx5IGJlIGZ1bGwgKDQgYnl0ZXMpIGFuZCBzdWNjZXNzaXZlIHBhcnRpYWwKKwkJICogbGluZXMgYXJlIG9rIG9ubHkgaW4gY2VydGFpbiBjYXNlcy4KKwkJICovCisJCXRtcCA9IGdldF91bmFsaWduZWQgKCh1MzIgKilidWYpOworCQljcHVfdG9fbGUzMnMgKCZ0bXApOworCQl3cml0ZWwgKHRtcCwgJnJlZ3MtPmVwX2RhdGEpOworCQlidWYgKz0gNDsKKwkJY291bnQgLT0gNDsKKwl9CisKKwkvKiBsYXN0IGZpZm8gZW50cnkgaXMgInNob3J0IiB1bmxlc3Mgd2Ugd3JvdGUgYSBmdWxsIHBhY2tldC4KKwkgKiBhbHNvIGV4cGxpY2l0bHkgdmFsaWRhdGUgbGFzdCB3b3JkIGluIChwZXJpb2RpYykgdHJhbnNmZXJzCisJICogd2hlbiBtYXhwYWNrZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KKwkgKi8KKwlpZiAoY291bnQgfHwgdG90YWwgPCBlcC0+ZXAubWF4cGFja2V0KSB7CisJCXRtcCA9IGNvdW50ID8gZ2V0X3VuYWxpZ25lZCAoKHUzMiAqKWJ1ZikgOiBjb3VudDsKKwkJY3B1X3RvX2xlMzJzICgmdG1wKTsKKwkJc2V0X2ZpZm9fYnl0ZWNvdW50IChlcCwgY291bnQgJiAweDAzKTsKKwkJd3JpdGVsICh0bXAsICZyZWdzLT5lcF9kYXRhKTsKKwl9CisKKwkvKiBwY2kgd3JpdGVzIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KK30KKworLyogd29yayBhcm91bmQgZXJyYXR1bSAwMTA2OiBQQ0kgYW5kIFVTQiByYWNlIG92ZXIgdGhlIE9VVCBmaWZvLgorICogY2FsbGVyIGd1YXJhbnRlZXMgY2hpcHJldiAwMTAwLCBvdXQgZW5kcG9pbnQgaXMgTkFLaW5nLCBhbmQKKyAqIHRoZXJlJ3Mgbm8gcmVhbCBkYXRhIGluIHRoZSBmaWZvLgorICoKKyAqIE5PVEU6ICBhbHNvIHVzZWQgaW4gY2FzZXMgd2hlcmUgdGhhdCBlcnJhdHVtIGRvZXNuJ3QgYXBwbHk6CisgKiB3aGVyZSB0aGUgaG9zdCB3cm90ZSAidG9vIG11Y2giIGRhdGEgdG8gdXMuCisgKi8KK3N0YXRpYyB2b2lkIG91dF9mbHVzaCAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCXUzMglfX2lvbWVtICpzdGF0cDsKKwl1MzIJdG1wOworCisJQVNTRVJUX09VVF9OQUtJTkcgKGVwKTsKKworCXN0YXRwID0gJmVwLT5yZWdzLT5lcF9zdGF0OworCXdyaXRlbCAoICAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQpCisJCSwgc3RhdHApOworCXdyaXRlbCAoKDEgPDwgRklGT19GTFVTSCksIHN0YXRwKTsKKwltYiAoKTsKKwl0bXAgPSByZWFkbCAoc3RhdHApOworCWlmICh0bXAgJiAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkKKwkJCS8qIGhpZ2ggc3BlZWQgZGlkIGJ1bGsgTllFVDsgZmlmbyBpc24ndCBmaWxsaW5nICovCisJCQkmJiBlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKKwkJdW5zaWduZWQJdXNlYzsKKworCQl1c2VjID0gNTA7CQkvKiA2NCBieXRlIGJ1bGsvaW50ZXJydXB0ICovCisJCWhhbmRzaGFrZSAoc3RhdHAsICgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCksCisJCQkJKDEgPDwgVVNCX09VVF9QSU5HX05BS19TRU5UKSwgdXNlYyk7CisJCS8qIE5BSyBkb25lOyBub3cgQ0xFQVJfTkFLX09VVF9QQUNLRVRTIGlzIHNhZmUgKi8KKwl9Cit9CisKKy8qIHVubG9hZCBwYWNrZXQocykgZnJvbSB0aGUgZmlmbyB3ZSB1c2UgZm9yIHVzYiBPVVQgdHJhbnNmZXJzLgorICogcmV0dXJucyB0cnVlIGlmZiB0aGUgcmVxdWVzdCBjb21wbGV0ZWQsIGJlY2F1c2Ugb2Ygc2hvcnQgcGFja2V0CisgKiBvciB0aGUgcmVxdWVzdCBidWZmZXIgaGF2aW5nIGZpbGxlZCB3aXRoIGZ1bGwgcGFja2V0cy4KKyAqCisgKiBmb3IgZXAtYS4uZXAtZCB0aGlzIHdpbGwgcmVhZCBtdWx0aXBsZSBwYWNrZXRzIG91dCB3aGVuIHRoZXkKKyAqIGhhdmUgYmVlbiBhY2NlcHRlZC4KKyAqLworc3RhdGljIGludAorcmVhZF9maWZvIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzCV9faW9tZW0gKnJlZ3MgPSBlcC0+cmVnczsKKwl1OAkJCSpidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJdW5zaWduZWQJCWNvdW50LCB0bXAsIGlzX3Nob3J0OworCXVuc2lnbmVkCQljbGVhbnVwID0gMCwgcHJldmVudCA9IDA7CisKKwkvKiBlcnJhdHVtIDAxMDYgLi4uIHBhY2tldHMgY29taW5nIGluIGR1cmluZyBmaWZvIHJlYWRzIG1pZ2h0CisJICogYmUgaW5jb21wbGV0ZWx5IHJlamVjdGVkLiAgbm90IGFsbCBjYXNlcyBoYXZlIHdvcmthcm91bmRzLgorCSAqLworCWlmIChlcC0+ZGV2LT5jaGlwcmV2ID09IDB4MDEwMAorCQkJJiYgZXAtPmRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCXVkZWxheSAoMSk7CisJCXRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCQlpZiAoKHRtcCAmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpKQorCQkJY2xlYW51cCA9IDE7CisJCWVsc2UgaWYgKCh0bXAgJiAoMSA8PCBGSUZPX0ZVTEwpKSkgeworCQkJc3RhcnRfb3V0X25ha2luZyAoZXApOworCQkJcHJldmVudCA9IDE7CisJCX0KKwkJLyogZWxzZTogaG9wZSB3ZSBkb24ndCBzZWUgdGhlIHByb2JsZW0gKi8KKwl9CisKKwkvKiBuZXZlciBvdmVyZmxvdyB0aGUgcnggYnVmZmVyLiB0aGUgZmlmbyByZWFkcyBwYWNrZXRzIHVudGlsCisJICogaXQgc2VlcyBhIHNob3J0IG9uZTsgd2UgbWlnaHQgbm90IGJlIHJlYWR5IGZvciB0aGVtIGFsbC4KKwkgKi8KKwlwcmVmZXRjaHcgKGJ1Zik7CisJY291bnQgPSByZWFkbCAoJnJlZ3MtPmVwX2F2YWlsKTsKKwlpZiAodW5saWtlbHkgKGNvdW50ID09IDApKSB7CisJCXVkZWxheSAoMSk7CisJCXRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCQljb3VudCA9IHJlYWRsICgmcmVncy0+ZXBfYXZhaWwpOworCQkvKiBoYW5kbGVkIHRoYXQgZGF0YSBhbHJlYWR5PyAqLworCQlpZiAoY291bnQgPT0gMCAmJiAodG1wICYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkgPT0gMCkKKwkJCXJldHVybiAwOworCX0KKworCXRtcCA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKwlpZiAoY291bnQgPiB0bXApIHsKKwkJLyogYXMgd2l0aCBETUEsIGRhdGEgb3ZlcmZsb3cgZ2V0cyBmbHVzaGVkICovCisJCWlmICgodG1wICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkgeworCQkJRVJST1IgKGVwLT5kZXYsCisJCQkJIiVzIG91dCBmaWZvICVkIGJ5dGVzLCBleHBlY3RlZCAlZFxuIiwKKwkJCQllcC0+ZXAubmFtZSwgY291bnQsIHRtcCk7CisJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJY2xlYW51cCA9IDE7CisJCQkvKiBOQUtfT1VUX1BBQ0tFVFMgd2lsbCBiZSBzZXQsIHNvIGZsdXNoaW5nIGlzIHNhZmU7CisJCQkgKiB0aGUgbmV4dCByZWFkIHdpbGwgc3RhcnQgd2l0aCB0aGUgbmV4dCBwYWNrZXQKKwkJCSAqLworCQl9IC8qIGVsc2UgaXQncyBhIFpMUCwgbm8gd29ycmllcyAqLworCQljb3VudCA9IHRtcDsKKwl9CisJcmVxLT5yZXEuYWN0dWFsICs9IGNvdW50OworCisJaXNfc2hvcnQgPSAoY291bnQgPT0gMCkgfHwgKChjb3VudCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApOworCisJVkRFQlVHIChlcC0+ZGV2LCAicmVhZCAlcyBmaWZvIChPVVQpICVkIGJ5dGVzJXMlcyVzIHJlcSAlcCAlZC8lZFxuIiwKKwkJCWVwLT5lcC5uYW1lLCBjb3VudCwgaXNfc2hvcnQgPyAiIChzaG9ydCkiIDogIiIsCisJCQljbGVhbnVwID8gIiBmbHVzaCIgOiAiIiwgcHJldmVudCA/ICIgbmFrIiA6ICIiLAorCQkJcmVxLCByZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwl3aGlsZSAoY291bnQgPj0gNCkgeworCQl0bXAgPSByZWFkbCAoJnJlZ3MtPmVwX2RhdGEpOworCQljcHVfdG9fbGUzMnMgKCZ0bXApOworCQlwdXRfdW5hbGlnbmVkICh0bXAsICh1MzIgKilidWYpOworCQlidWYgKz0gNDsKKwkJY291bnQgLT0gNDsKKwl9CisJaWYgKGNvdW50KSB7CisJCXRtcCA9IHJlYWRsICgmcmVncy0+ZXBfZGF0YSk7CisJCS8qIExFIGNvbnZlcnNpb24gaXMgaW1wbGljaXQgaGVyZTogKi8KKwkJZG8geworCQkJKmJ1ZisrID0gKHU4KSB0bXA7CisJCQl0bXAgPj49IDg7CisJCX0gd2hpbGUgKC0tY291bnQpOworCX0KKwlpZiAoY2xlYW51cCkKKwkJb3V0X2ZsdXNoIChlcCk7CisJaWYgKHByZXZlbnQpIHsKKwkJd3JpdGVsICgoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisJCSh2b2lkKSByZWFkbCAoJmVwLT5yZWdzLT5lcF9yc3ApOworCX0KKworCXJldHVybiBpc19zaG9ydCB8fCAoKHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpCisJCQkJJiYgIXJlcS0+cmVxLnplcm8pOworfQorCisvKiBmaWxsIG91dCBkbWEgZGVzY3JpcHRvciB0byBtYXRjaCBhIGdpdmVuIHJlcXVlc3QgKi8KK3N0YXRpYyB2b2lkCitmaWxsX2RtYV9kZXNjIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QgKnJlcSwgaW50IHZhbGlkKQoreworCXN0cnVjdCBuZXQyMjgwX2RtYQkqdGQgPSByZXEtPnRkOworCXUzMgkJCWRtYWNvdW50ID0gcmVxLT5yZXEubGVuZ3RoOworCisJLyogZG9uJ3QgbGV0IERNQSBjb250aW51ZSBhZnRlciBhIHNob3J0IE9VVCBwYWNrZXQsCisJICogc28gb3ZlcnJ1bnMgY2FuJ3QgYWZmZWN0IHRoZSBuZXh0IHRyYW5zZmVyLgorCSAqIGluIGNhc2Ugb2Ygb3ZlcnJ1bnMgb24gbWF4LXNpemUgcGFja2V0cywgd2UgY2FuJ3QKKwkgKiBzdG9wIHRoZSBmaWZvIGZyb20gZmlsbGluZyBidXQgd2UgY2FuIGZsdXNoIGl0LgorCSAqLworCWlmIChlcC0+aXNfaW4pCisJCWRtYWNvdW50IHw9ICgxIDw8IERNQV9ESVJFQ1RJT04pOworCWVsc2UgaWYgKChkbWFjb3VudCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApCisJCWRtYWNvdW50IHw9ICgxIDw8IEVORF9PRl9DSEFJTik7CisKKwlyZXEtPnZhbGlkID0gdmFsaWQ7CisJaWYgKHZhbGlkKQorCQlkbWFjb3VudCB8PSAoMSA8PCBWQUxJRF9CSVQpOworCWlmIChsaWtlbHkoIXJlcS0+cmVxLm5vX2ludGVycnVwdCB8fCAhdXNlX2RtYV9jaGFpbmluZykpCisJCWRtYWNvdW50IHw9ICgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpOworCisJLyogdGQtPmRtYWRlc2MgPSBwcmV2aW91c2x5IHNldCBieSBjYWxsZXIgKi8KKwl0ZC0+ZG1hYWRkciA9IGNwdV90b19sZTMyIChyZXEtPnJlcS5kbWEpOworCisJLyogMjI4MCBtYXkgYmUgcG9sbGluZyBWQUxJRF9CSVQgdGhyb3VnaCBlcC0+ZG1hLT5kbWFkZXNjICovCisJd21iICgpOworCXRkLT5kbWFjb3VudCA9IGNwdV90b19sZTMycCAoJmRtYWNvdW50KTsKK30KKworc3RhdGljIGNvbnN0IHUzMiBkbWFjdGxfZGVmYXVsdCA9CisJCSAgKDEgPDwgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUKQorCQl8ICgxIDw8IERNQV9DTEVBUl9DT1VOVF9FTkFCTEUpCisJCS8qIGVycmF0dW0gMDExNiB3b3JrYXJvdW5kIHBhcnQgMSAodXNlIFBPTExJTkcpICovCisJCXwgKFBPTExfMTAwX1VTRUMgPDwgREVTQ1JJUFRPUl9QT0xMSU5HX1JBVEUpCisJCXwgKDEgPDwgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSkKKwkJfCAoMSA8PCBETUFfVkFMSURfQklUX0VOQUJMRSkKKwkJfCAoMSA8PCBETUFfU0NBVFRFUl9HQVRIRVJfRU5BQkxFKQorCQkvKiBlcnJhdHVtIDAxMTYgd29ya2Fyb3VuZCBwYXJ0IDIgKG5vIEFVVE9TVEFSVCkgKi8KKwkJfCAoMSA8PCBETUFfRU5BQkxFKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5fc3RvcF9kbWEgKHN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIF9faW9tZW0gKmRtYSkKK3sKKwloYW5kc2hha2UgKCZkbWEtPmRtYWN0bCwgKDEgPDwgRE1BX0VOQUJMRSksIDAsIDUwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0b3BfZG1hIChzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyBfX2lvbWVtICpkbWEpCit7CisJd3JpdGVsIChyZWFkbCAoJmRtYS0+ZG1hY3RsKSAmIH4oMSA8PCBETUFfRU5BQkxFKSwgJmRtYS0+ZG1hY3RsKTsKKwlzcGluX3N0b3BfZG1hIChkbWEpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9xdWV1ZSAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCB1MzIgZG1hY3RsLCB1MzIgdGRfZG1hKQoreworCXN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzCV9faW9tZW0gKmRtYSA9IGVwLT5kbWE7CisKKwl3cml0ZWwgKCgxIDw8IFZBTElEX0JJVCkgfCAoZXAtPmlzX2luIDw8IERNQV9ESVJFQ1RJT04pLAorCQkJJmRtYS0+ZG1hY291bnQpOworCXdyaXRlbCAocmVhZGwgKCZkbWEtPmRtYXN0YXQpLCAmZG1hLT5kbWFzdGF0KTsKKworCXdyaXRlbCAodGRfZG1hLCAmZG1hLT5kbWFkZXNjKTsKKwl3cml0ZWwgKGRtYWN0bCwgJmRtYS0+ZG1hY3RsKTsKKworCS8qIGVycmF0dW0gMDExNiB3b3JrYXJvdW5kIHBhcnQgMzogIHBjaSBhcmJpdGVyIGF3YXkgZnJvbSBuZXQyMjgwICovCisJKHZvaWQpIHJlYWRsICgmZXAtPmRldi0+cGNpLT5wY2ltc3RjdGwpOworCisJd3JpdGVsICgoMSA8PCBETUFfU1RBUlQpLCAmZG1hLT5kbWFzdGF0KTsKKworCWlmICghZXAtPmlzX2luKQorCQlzdG9wX291dF9uYWtpbmcgKGVwKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfZG1hIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIJCQl0bXA7CisJc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MJX19pb21lbSAqZG1hID0gZXAtPmRtYTsKKworCS8qIEZJWE1FIGNhbid0IHVzZSBETUEgZm9yIFpMUHMgKi8KKworCS8qIG9uIHRoaXMgcGF0aCB3ZSAia25vdyIgdGhlcmUncyBubyBkbWEgYWN0aXZlICh5ZXQpICovCisJV0FSTl9PTiAocmVhZGwgKCZkbWEtPmRtYWN0bCkgJiAoMSA8PCBETUFfRU5BQkxFKSk7CisJd3JpdGVsICgwLCAmZXAtPmRtYS0+ZG1hY3RsKTsKKworCS8qIHByZXZpb3VzIE9VVCBwYWNrZXQgbWlnaHQgaGF2ZSBiZWVuIHNob3J0ICovCisJaWYgKCFlcC0+aXNfaW4gJiYgKCh0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KSkKKwkJIAkJJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSAhPSAwKSB7CisJCXdyaXRlbCAoKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCksCisJCQkmZXAtPnJlZ3MtPmVwX3N0YXQpOworCisJCXRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKTsKKwkJaWYgKHRtcCkgeworCQkJd3JpdGVsIChyZWFkbCAoJmRtYS0+ZG1hc3RhdCksICZkbWEtPmRtYXN0YXQpOworCisJCQkvKiB0cmFuc2ZlciBhbGwvc29tZSBmaWZvIGRhdGEgKi8KKwkJCXdyaXRlbCAocmVxLT5yZXEuZG1hLCAmZG1hLT5kbWFhZGRyKTsKKwkJCXRtcCA9IG1pbiAodG1wLCByZXEtPnJlcS5sZW5ndGgpOworCisJCQkvKiBkbWEgaXJxLCBmYWtpbmcgc2NhdHRlcmxpc3Qgc3RhdHVzICovCisJCQlyZXEtPnRkLT5kbWFjb3VudCA9IGNwdV90b19sZTMyIChyZXEtPnJlcS5sZW5ndGggLSB0bXApOworCQkJd3JpdGVsICgoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKQorCQkJCXwgdG1wLCAmZG1hLT5kbWFjb3VudCk7CisJCQlyZXEtPnRkLT5kbWFkZXNjID0gMDsKKwkJCXJlcS0+dmFsaWQgPSAxOworCisJCQl3cml0ZWwgKCgxIDw8IERNQV9FTkFCTEUpLCAmZG1hLT5kbWFjdGwpOworCQkJd3JpdGVsICgoMSA8PCBETUFfU1RBUlQpLCAmZG1hLT5kbWFzdGF0KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXRtcCA9IGRtYWN0bF9kZWZhdWx0OworCisJLyogZm9yY2UgcGFja2V0IGJvdW5kYXJpZXMgYmV0d2VlbiBkbWEgcmVxdWVzdHMsIGJ1dCBwcmV2ZW50IHRoZQorCSAqIGNvbnRyb2xsZXIgZnJvbSBhdXRvbWFnaWNhbGx5IHdyaXRpbmcgYSBsYXN0ICJzaG9ydCIgcGFja2V0CisJICogKHplcm8gbGVuZ3RoKSB1bmxlc3MgdGhlIGRyaXZlciBleHBsaWNpdGx5IHNhaWQgdG8gZG8gdGhhdC4KKwkgKi8KKwlpZiAoZXAtPmlzX2luKSB7CisJCWlmIChsaWtlbHkgKChyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwCisJCQkJfHwgcmVxLT5yZXEuemVybykpIHsKKwkJCXRtcCB8PSAoMSA8PCBETUFfRklGT19WQUxJREFURSk7CisJCQllcC0+aW5fZmlmb192YWxpZGF0ZSA9IDE7CisJCX0gZWxzZQorCQkJZXAtPmluX2ZpZm9fdmFsaWRhdGUgPSAwOworCX0KKworCS8qIGluaXQgcmVxLT50ZCwgcG9pbnRpbmcgdG8gdGhlIGN1cnJlbnQgZHVtbXkgKi8KKwlyZXEtPnRkLT5kbWFkZXNjID0gY3B1X3RvX2xlMzIgKGVwLT50ZF9kbWEpOworCWZpbGxfZG1hX2Rlc2MgKGVwLCByZXEsIDEpOworCisJaWYgKCF1c2VfZG1hX2NoYWluaW5nKQorCQlyZXEtPnRkLT5kbWFjb3VudCB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IEVORF9PRl9DSEFJTik7CisKKwlzdGFydF9xdWV1ZSAoZXAsIHRtcCwgcmVxLT50ZF9kbWEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3F1ZXVlX2RtYSAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0ICpyZXEsIGludCB2YWxpZCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9kbWEJKmVuZDsKKwlkbWFfYWRkcl90CQl0bXA7CisKKwkvKiBzd2FwIG5ldyBkdW1teSBmb3Igb2xkLCBsaW5rOyBmaWxsIGFuZCBtYXliZSBhY3RpdmF0ZSAqLworCWVuZCA9IGVwLT5kdW1teTsKKwllcC0+ZHVtbXkgPSByZXEtPnRkOworCXJlcS0+dGQgPSBlbmQ7CisKKwl0bXAgPSBlcC0+dGRfZG1hOworCWVwLT50ZF9kbWEgPSByZXEtPnRkX2RtYTsKKwlyZXEtPnRkX2RtYSA9IHRtcDsKKworCWVuZC0+ZG1hZGVzYyA9IGNwdV90b19sZTMyIChlcC0+dGRfZG1hKTsKKworCWZpbGxfZG1hX2Rlc2MgKGVwLCByZXEsIHZhbGlkKTsKK30KKworc3RhdGljIHZvaWQKK2RvbmUgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXVuc2lnbmVkCQlzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwlsaXN0X2RlbF9pbml0ICgmcmVxLT5xdWV1ZSk7CisKKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJZGV2ID0gZXAtPmRldjsKKwlpZiAocmVxLT5tYXBwZWQpIHsKKwkJcGNpX3VubWFwX3NpbmdsZSAoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCWVwLT5pc19pbiA/IFBDSV9ETUFfVE9ERVZJQ0UgOiBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfQorCisJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikKKwkJVkRFQlVHIChkZXYsICJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCQllcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwkvKiBkb24ndCBtb2RpZnkgcXVldWUgaGVhZHMgZHVyaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCXJlcS0+cmVxLmNvbXBsZXRlICgmZXAtPmVwLCAmcmVxLT5yZXEpOworCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50CituZXQyMjgwX3F1ZXVlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJLyogd2UgYWx3YXlzIHJlcXVpcmUgYSBjcHUtdmlldyBidWZmZXIsIHNvIHRoYXQgd2UgY2FuCisJICogYWx3YXlzIHVzZSBwaW8gKGFzIGZhbGxiYWNrIG9yIHdoYXRldmVyKS4KKwkgKi8KKwlyZXEgPSBjb250YWluZXJfb2YgKF9yZXEsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHJlcSk7CisJaWYgKCFfcmVxIHx8ICFfcmVxLT5jb21wbGV0ZSB8fCAhX3JlcS0+YnVmCisJCQl8fCAhbGlzdF9lbXB0eSAoJnJlcS0+cXVldWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoX3JlcS0+bGVuZ3RoID4gKH4wICYgRE1BX0JZVEVfQ09VTlRfTUFTSykpCisJCXJldHVybiAtRURPTTsKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCS8qIEZJWE1FIGltcGxlbWVudCBQSU8gZmFsbGJhY2sgZm9yIFpMUHMgd2l0aCBETUEgKi8KKwlpZiAoZXAtPmRtYSAmJiBfcmVxLT5sZW5ndGggPT0gMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogc2V0IHVwIGRtYSBtYXBwaW5nIGluIGNhc2UgdGhlIGNhbGxlciBkaWRuJ3QgKi8KKwlpZiAoZXAtPmRtYSAmJiBfcmVxLT5kbWEgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQlfcmVxLT5kbWEgPSBwY2lfbWFwX3NpbmdsZSAoZGV2LT5wZGV2LCBfcmVxLT5idWYsIF9yZXEtPmxlbmd0aCwKKwkJCWVwLT5pc19pbiA/IFBDSV9ETUFfVE9ERVZJQ0UgOiBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDE7CisJfQorCisjaWYgMAorCVZERUJVRyAoZGV2LCAiJXMgcXVldWUgcmVxICVwLCBsZW4gJWQgYnVmICVwXG4iLAorCQkJX2VwLT5uYW1lLCBfcmVxLCBfcmVxLT5sZW5ndGgsIF9yZXEtPmJ1Zik7CisjZW5kaWYKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKworCS8qIGtpY2tzdGFydCB0aGlzIGkvbyBxdWV1ZT8gKi8KKwlpZiAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkgJiYgIWVwLT5zdG9wcGVkKSB7CisJCS8qIHVzZSBETUEgaWYgdGhlIGVuZHBvaW50IHN1cHBvcnRzIGl0LCBlbHNlIHBpbyAqLworCQlpZiAoZXAtPmRtYSkKKwkJCXN0YXJ0X2RtYSAoZXAsIHJlcSk7CisJCWVsc2UgeworCQkJLyogbWF5YmUgdGhlcmUncyBubyBjb250cm9sIGRhdGEsIGp1c3Qgc3RhdHVzIGFjayAqLworCQkJaWYgKGVwLT5udW0gPT0gMCAmJiBfcmVxLT5sZW5ndGggPT0gMCkgeworCQkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJCWRvbmUgKGVwLCByZXEsIDApOworCQkJCVZERUJVRyAoZGV2LCAiJXMgc3RhdHVzIGFja1xuIiwgZXAtPmVwLm5hbWUpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJLyogUElPIC4uLiBzdHVmZiB0aGUgZmlmbywgb3IgdW5ibG9jayBpdC4gICovCisJCQlpZiAoZXAtPmlzX2luKQorCQkJCXdyaXRlX2ZpZm8gKGVwLCBfcmVxKTsKKwkJCWVsc2UgaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQkJdTMyCXM7CisKKwkJCQkvKiBPVVQgRklGTyBtaWdodCBoYXZlIHBhY2tldChzKSBidWZmZXJlZCAqLworCQkJCXMgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwkJCQlpZiAoKHMgJiAoMSA8PCBGSUZPX0VNUFRZKSkgPT0gMCkgeworCQkJCQkvKiBub3RlOiAgX3JlcS0+c2hvcnRfbm90X29rIGlzCisJCQkJCSAqIGlnbm9yZWQgaGVyZSBzaW5jZSBQSU8gX2Fsd2F5c18KKwkJCQkJICogc3RvcHMgcXVldWUgYWR2YW5jZSBoZXJlLCBhbmQKKwkJCQkJICogX3JlcS0+c3RhdHVzIGRvZXNuJ3QgY2hhbmdlIGZvcgorCQkJCQkgKiBzaG9ydCByZWFkcyAob25seSBfcmVxLT5hY3R1YWwpCisJCQkJCSAqLworCQkJCQlpZiAocmVhZF9maWZvIChlcCwgcmVxKSkgeworCQkJCQkJZG9uZSAoZXAsIHJlcSwgMCk7CisJCQkJCQlpZiAoZXAtPm51bSA9PSAwKQorCQkJCQkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJCQkJLyogZG9uJ3QgcXVldWUgaXQgKi8KKwkJCQkJCXJlcSA9IE5VTEw7CisJCQkJCX0gZWxzZQorCQkJCQkJcyA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCQkJCX0KKworCQkJCS8qIGRvbid0IE5BSywgbGV0IHRoZSBmaWZvIGZpbGwgKi8KKwkJCQlpZiAocmVxICYmIChzICYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkpCisJCQkJCXdyaXRlbCAoKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKSwKKwkJCQkJCQkmZXAtPnJlZ3MtPmVwX3JzcCk7CisJCQl9CisJCX0KKworCX0gZWxzZSBpZiAoZXAtPmRtYSkgeworCQlpbnQJdmFsaWQgPSAxOworCisJCWlmIChlcC0+aXNfaW4pIHsKKwkJCWludAlleHBlY3Q7CisKKwkJCS8qIHByZXZlbnRpbmcgbWFnaWMgemxwcyBpcyBwZXItZW5naW5lIHN0YXRlLCBub3QKKwkJCSAqIHBlci10cmFuc2ZlcjsgaXJxIGxvZ2ljIG11c3QgcmVjb3ZlciBoaWNjdXBzLgorCQkJICovCisJCQlleHBlY3QgPSBsaWtlbHkgKHJlcS0+cmVxLnplcm8KKwkJCQl8fCAocmVxLT5yZXEubGVuZ3RoICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCk7CisJCQlpZiAoZXhwZWN0ICE9IGVwLT5pbl9maWZvX3ZhbGlkYXRlKQorCQkJCXZhbGlkID0gMDsKKwkJfQorCQlxdWV1ZV9kbWEgKGVwLCByZXEsIHZhbGlkKTsKKworCX0gLyogZWxzZSB0aGUgaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlLiAqLworCisJaWYgKHJlcSkKKwkJbGlzdF9hZGRfdGFpbCAoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBwY2kgd3JpdGVzIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkbWFfZG9uZSAoCisJc3RydWN0IG5ldDIyODBfZXAgKmVwLAorCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QgKnJlcSwKKwl1MzIgZG1hY291bnQsCisJaW50IHN0YXR1cworKQoreworCXJlcS0+cmVxLmFjdHVhbCA9IHJlcS0+cmVxLmxlbmd0aCAtIChETUFfQllURV9DT1VOVF9NQVNLICYgZG1hY291bnQpOworCWRvbmUgKGVwLCByZXEsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RhcnRfZG1hIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApOworCitzdGF0aWMgdm9pZCBzY2FuX2RtYV9jb21wbGV0aW9ucyAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCS8qIG9ubHkgbG9vayBhdCBkZXNjcmlwdG9ycyB0aGF0IHdlcmUgIm5hdHVyYWxseSIgcmV0aXJlZCwKKwkgKiBzbyBmaWZvIGFuZCBsaXN0IGhlYWQgc3RhdGUgd29uJ3QgbWF0dGVyCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisJCXUzMgkJCXRtcDsKKworCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisJCWlmICghcmVxLT52YWxpZCkKKwkJCWJyZWFrOworCQlybWIgKCk7CisJCXRtcCA9IGxlMzJfdG9fY3B1cCAoJnJlcS0+dGQtPmRtYWNvdW50KTsKKwkJaWYgKCh0bXAgJiAoMSA8PCBWQUxJRF9CSVQpKSAhPSAwKQorCQkJYnJlYWs7CisKKwkJLyogU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCBoYW5kbGVzICJ1c2Itc2hvcnQiCisJCSAqIGNhc2VzIHdoZXJlIERNQSBtdXN0IGJlIGFib3J0ZWQ7IHRoaXMgY29kZSBoYW5kbGVzCisJCSAqIGFsbCBub24tYWJvcnQgRE1BIGNvbXBsZXRpb25zLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5IChyZXEtPnRkLT5kbWFkZXNjID09IDApKSB7CisJCQkvKiBwYXJhbm9pYSAqLworCQkJdG1wID0gcmVhZGwgKCZlcC0+ZG1hLT5kbWFjb3VudCk7CisJCQlpZiAodG1wICYgRE1BX0JZVEVfQ09VTlRfTUFTSykKKwkJCQlicmVhazsKKwkJCS8qIHNpbmdsZSB0cmFuc2ZlciBtb2RlICovCisJCQlkbWFfZG9uZSAoZXAsIHJlcSwgdG1wLCAwKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKCFlcC0+aXNfaW4KKwkJCQkmJiAocmVxLT5yZXEubGVuZ3RoICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkgeworCQkJdG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisKKwkJCS8qIEFWT0lEIFRST1VCTEUgSEVSRSBieSBub3QgaXNzdWluZyBzaG9ydCByZWFkcyBmcm9tCisJCQkgKiB5b3VyIGdhZGdldCBkcml2ZXIuICBUaGF0IGhlbHBzIGF2b2lkcyBlcnJhdGEgMDEyMSwKKwkJCSAqIDAxMjIsIGFuZCAwMTI0OyBub3QgYWxsIGNhc2VzIHRyaWdnZXIgdGhlIHdhcm5pbmcuCisJCQkgKi8KKwkJCWlmICgodG1wICYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkgPT0gMCkgeworCQkJCVdBUk4gKGVwLT5kZXYsICIlcyBsb3N0IHBhY2tldCBzeW5jIVxuIiwKKwkJCQkJCWVwLT5lcC5uYW1lKTsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJfSBlbHNlIGlmICgodG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfYXZhaWwpKSAhPSAwKSB7CisJCQkJLyogZmlmbyBnZXRzIGZsdXNoZWQgbGF0ZXIgKi8KKwkJCQllcC0+b3V0X292ZXJmbG93ID0gMTsKKwkJCQlERUJVRyAoZXAtPmRldiwgIiVzIGRtYSwgZGlzY2FyZCAlZCBsZW4gJWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSwgdG1wLAorCQkJCQkJcmVxLT5yZXEubGVuZ3RoKTsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJfQorCQl9CisJCWRtYV9kb25lIChlcCwgcmVxLCB0bXAsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcmVzdGFydF9kbWEgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisJdTMyCQkJZG1hY3RsID0gZG1hY3RsX2RlZmF1bHQ7CisKKwlpZiAoZXAtPnN0b3BwZWQpCisJCXJldHVybjsKKwlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCisJaWYgKCF1c2VfZG1hX2NoYWluaW5nKSB7CisJCXN0YXJ0X2RtYSAoZXAsIHJlcSk7CisJCXJldHVybjsKKwl9CisKKwkvKiB0aGUgMjI4MCB3aWxsIGJlIHByb2Nlc3NpbmcgdGhlIHF1ZXVlIHVubGVzcyBxdWV1ZSBoaWNjdXBzIGFmdGVyCisJICogdGhlIHByZXZpb3VzIHRyYW5zZmVyOgorCSAqICBJTjogICB3YW50ZWQgYXV0b21hZ2ljIHpscCwgaGVhZCBkb2Vzbid0IChvciB2aWNlIHZlcnNhKQorCSAqICAgICAgICBETUFfRklGT19WQUxJREFURSBkb2Vzbid0IGluaXQgZnJvbSBkbWEgZGVzY3JpcHRvcnMuCisJICogIE9VVDogIHdhcyAidXNiLXNob3J0Iiwgd2UgbXVzdCByZXN0YXJ0LgorCSAqLworCWlmIChlcC0+aXNfaW4gJiYgIXJlcS0+dmFsaWQpIHsKKwkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqZW50cnksICpwcmV2ID0gTlVMTDsKKwkJaW50CQkJcmVxbW9kZSwgZG9uZSA9IDA7CisKKwkJREVCVUcgKGVwLT5kZXYsICIlcyBkbWEgaGljY3VwIHRkICVwXG4iLCBlcC0+ZXAubmFtZSwgcmVxLT50ZCk7CisJCWVwLT5pbl9maWZvX3ZhbGlkYXRlID0gbGlrZWx5IChyZXEtPnJlcS56ZXJvCisJCQl8fCAocmVxLT5yZXEubGVuZ3RoICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCk7CisJCWlmIChlcC0+aW5fZmlmb192YWxpZGF0ZSkKKwkJCWRtYWN0bCB8PSAoMSA8PCBETUFfRklGT19WQUxJREFURSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVudHJ5LCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQkJdTMyCQlkbWFjb3VudDsKKworCQkJaWYgKGVudHJ5ID09IHJlcSkKKwkJCQljb250aW51ZTsKKwkJCWRtYWNvdW50ID0gZW50cnktPnRkLT5kbWFjb3VudDsKKwkJCWlmICghZG9uZSkgeworCQkJCXJlcW1vZGUgPSBsaWtlbHkgKGVudHJ5LT5yZXEuemVybworCQkJCQl8fCAoZW50cnktPnJlcS5sZW5ndGgKKwkJCQkJCSUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCk7CisJCQkJaWYgKHJlcW1vZGUgPT0gZXAtPmluX2ZpZm9fdmFsaWRhdGUpIHsKKwkJCQkJZW50cnktPnZhbGlkID0gMTsKKwkJCQkJZG1hY291bnQgfD0gdmFsaWRfYml0OworCQkJCQllbnRyeS0+dGQtPmRtYWNvdW50ID0gZG1hY291bnQ7CisJCQkJCXByZXYgPSBlbnRyeTsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogZm9yY2UgYSBoaWNjdXAgKi8KKwkJCQkJcHJldi0+dGQtPmRtYWNvdW50IHw9IGRtYV9kb25lX2llOworCQkJCQlkb25lID0gMTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIHdhbGsgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlIHNvIHVubGlua3MgYmVoYXZlICovCisJCQllbnRyeS0+dmFsaWQgPSAwOworCQkJZG1hY291bnQgJj0gfnZhbGlkX2JpdDsKKwkJCWVudHJ5LT50ZC0+ZG1hY291bnQgPSBkbWFjb3VudDsKKwkJCXByZXYgPSBlbnRyeTsKKwkJfQorCX0KKworCXdyaXRlbCAoMCwgJmVwLT5kbWEtPmRtYWN0bCk7CisJc3RhcnRfcXVldWUgKGVwLCBkbWFjdGwsIHJlcS0+dGRfZG1hKTsKK30KKworc3RhdGljIHZvaWQgYWJvcnRfZG1hIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJLyogYWJvcnQgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpZiAobGlrZWx5ICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpKSB7CisJCS8qIEZJWE1FIHdvcmsgYXJvdW5kIGVycmF0YSAwMTIxLCAwMTIyLCAwMTI0ICovCisJCXdyaXRlbCAoKDEgPDwgRE1BX0FCT1JUKSwgJmVwLT5kbWEtPmRtYXN0YXQpOworCQlzcGluX3N0b3BfZG1hIChlcC0+ZG1hKTsKKwl9IGVsc2UKKwkJc3RvcF9kbWEgKGVwLT5kbWEpOworCXNjYW5fZG1hX2NvbXBsZXRpb25zIChlcCk7Cit9CisKKy8qIGRlcXVldWUgQUxMIHJlcXVlc3RzICovCitzdGF0aWMgdm9pZCBudWtlIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCisJLyogY2FsbGVkIHdpdGggc3BpbmxvY2sgaGVsZCAqLworCWVwLT5zdG9wcGVkID0gMTsKKwlpZiAoZXAtPmRtYSkKKwkJYWJvcnRfZG1hIChlcCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LAorCQkJCXF1ZXVlKTsKKwkJZG9uZSAoZXAsIHJlcSwgLUVTSFVURE9XTik7CisJfQorfQorCisvKiBkZXF1ZXVlIEpVU1QgT05FIHJlcXVlc3QgKi8KK3N0YXRpYyBpbnQgbmV0MjI4MF9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXUzMgkJCWRtYWN0bDsKKwlpbnQJCQlzdG9wcGVkOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkgfHwgIV9yZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJLyogcXVpZXNjZSBkbWEgd2hpbGUgd2UgcGF0Y2ggdGhlIHF1ZXVlICovCisJZG1hY3RsID0gMDsKKwllcC0+c3RvcHBlZCA9IDE7CisJaWYgKGVwLT5kbWEpIHsKKwkJZG1hY3RsID0gcmVhZGwgKCZlcC0+ZG1hLT5kbWFjdGwpOworCQkvKiBXQVJOSU5HIGVycmF0dW0gMDEyNyBtYXkga2ljayBpbiAuLi4gKi8KKwkJc3RvcF9kbWEgKGVwLT5kbWEpOworCQlzY2FuX2RtYV9jb21wbGV0aW9ucyAoZXApOworCX0KKworCS8qIG1ha2Ugc3VyZSBpdCdzIHN0aWxsIHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisJaWYgKCZyZXEtPnJlcSAhPSBfcmVxKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHF1ZXVlIGhlYWQgbWF5IGJlIHBhcnRpYWxseSBjb21wbGV0ZS4gKi8KKwlpZiAoZXAtPnF1ZXVlLm5leHQgPT0gJnJlcS0+cXVldWUpIHsKKwkJaWYgKGVwLT5kbWEpIHsKKwkJCURFQlVHIChlcC0+ZGV2LCAidW5saW5rICglcykgZG1hXG4iLCBfZXAtPm5hbWUpOworCQkJX3JlcS0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCQlhYm9ydF9kbWEgKGVwKTsKKwkJCWlmIChsaWtlbHkgKGVwLT5xdWV1ZS5uZXh0ID09ICZyZXEtPnF1ZXVlKSkgeworCQkJCS8vIE5PVEU6IG1pc3JlcG9ydHMgc2luZ2xlLXRyYW5zZmVyIG1vZGUKKwkJCQlyZXEtPnRkLT5kbWFjb3VudCA9IDA7CS8qIGludmFsaWRhdGUgKi8KKwkJCQlkbWFfZG9uZSAoZXAsIHJlcSwKKwkJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFjb3VudCksCisJCQkJCS1FQ09OTlJFU0VUKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCURFQlVHIChlcC0+ZGV2LCAidW5saW5rICglcykgcGlvXG4iLCBfZXAtPm5hbWUpOworCQkJZG9uZSAoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQl9CisJCXJlcSA9IE5VTEw7CisKKwkvKiBwYXRjaCB1cCBoYXJkd2FyZSBjaGFpbmluZyBkYXRhICovCisJfSBlbHNlIGlmIChlcC0+ZG1hICYmIHVzZV9kbWFfY2hhaW5pbmcpIHsKKwkJaWYgKHJlcS0+cXVldWUucHJldiA9PSBlcC0+cXVldWUubmV4dCkgeworCQkJd3JpdGVsIChsZTMyX3RvX2NwdSAocmVxLT50ZC0+ZG1hZGVzYyksCisJCQkJJmVwLT5kbWEtPmRtYWRlc2MpOworCQkJaWYgKHJlcS0+dGQtPmRtYWNvdW50ICYgZG1hX2RvbmVfaWUpCisJCQkJd3JpdGVsIChyZWFkbCAoJmVwLT5kbWEtPmRtYWNvdW50KQorCQkJCQkJfCBkbWFfZG9uZV9pZSwKKwkJCQkJJmVwLT5kbWEtPmRtYWNvdW50KTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnByZXY7CisKKwkJCXByZXYgPSBsaXN0X2VudHJ5IChyZXEtPnF1ZXVlLnByZXYsCisJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCQkJcHJldi0+dGQtPmRtYWRlc2MgPSByZXEtPnRkLT5kbWFkZXNjOworCQkJaWYgKHJlcS0+dGQtPmRtYWNvdW50ICYgZG1hX2RvbmVfaWUpCisJCQkJcHJldi0+dGQtPmRtYWNvdW50IHw9IGRtYV9kb25lX2llOworCQl9CisJfQorCisJaWYgKHJlcSkKKwkJZG9uZSAoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKKworCWlmIChlcC0+ZG1hKSB7CisJCS8qIHR1cm4gb2ZmIGRtYSBvbiBpbmFjdGl2ZSBxdWV1ZXMgKi8KKwkJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQkJc3RvcF9kbWEgKGVwLT5kbWEpOworCQllbHNlIGlmICghZXAtPnN0b3BwZWQpIHsKKwkJCS8qIHJlc3VtZSBjdXJyZW50IHJlcXVlc3QsIG9yIHN0YXJ0IG5ldyBvbmUgKi8KKwkJCWlmIChyZXEpCisJCQkJd3JpdGVsIChkbWFjdGwsICZlcC0+ZG1hLT5kbWFjdGwpOworCQkJZWxzZQorCQkJCXN0YXJ0X2RtYSAoZXAsIGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSkpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBuZXQyMjgwX2ZpZm9fc3RhdHVzIChzdHJ1Y3QgdXNiX2VwICpfZXApOworCitzdGF0aWMgaW50CituZXQyMjgwX3NldF9oYWx0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJcmV0dmFsID0gMDsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWVwLT5kZXYtPmRyaXZlciB8fCBlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCWlmIChlcC0+ZGVzYyAvKiBub3QgZXAwICovICYmIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykKKwkJCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIGlmIChlcC0+aXNfaW4gJiYgdmFsdWUgJiYgbmV0MjI4MF9maWZvX3N0YXR1cyAoX2VwKSAhPSAwKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgeworCQlWREVCVUcgKGVwLT5kZXYsICIlcyAlcyBoYWx0XG4iLCBfZXAtPm5hbWUsCisJCQkJdmFsdWUgPyAic2V0IiA6ICJjbGVhciIpOworCQkvKiBzZXQvY2xlYXIsIHRoZW4gc3luY2ggbWVtb3J5IHZpZXdzIHdpdGggdGhlIGRldmljZSAqLworCQlpZiAodmFsdWUpIHsKKwkJCWlmIChlcC0+bnVtID09IDApCisJCQkJZXAtPmRldi0+cHJvdG9jb2xfc3RhbGwgPSAxOworCQkJZWxzZQorCQkJCXNldF9oYWx0IChlcCk7CisJCX0gZWxzZQorCQkJY2xlYXJfaGFsdCAoZXApOworCQkodm9pZCkgcmVhZGwgKCZlcC0+cmVncy0+ZXBfcnNwKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK25ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJdTMyCQkJYXZhaWw7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFlcC0+ZGV2LT5kcml2ZXIgfHwgZXAtPmRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCWF2YWlsID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfYXZhaWwpICYgKCgxIDw8IDEyKSAtIDEpOworCWlmIChhdmFpbCA+IGVwLT5maWZvX3NpemUpCisJCXJldHVybiAtRU9WRVJGTE9XOworCWlmIChlcC0+aXNfaW4pCisJCWF2YWlsID0gZXAtPmZpZm9fc2l6ZSAtIGF2YWlsOworCXJldHVybiBhdmFpbDsKK30KKworc3RhdGljIHZvaWQKK25ldDIyODBfZmlmb19mbHVzaCAoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApKQorCQlyZXR1cm47CisJaWYgKCFlcC0+ZGV2LT5kcml2ZXIgfHwgZXAtPmRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm47CisKKwl3cml0ZWwgKCgxIDw8IEZJRk9fRkxVU0gpLCAmZXAtPnJlZ3MtPmVwX3N0YXQpOworCSh2b2lkKSByZWFkbCAoJmVwLT5yZWdzLT5lcF9yc3ApOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgbmV0MjI4MF9lcF9vcHMgPSB7CisJLmVuYWJsZQkJPSBuZXQyMjgwX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG5ldDIyODBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0CT0gbmV0MjI4MF9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBuZXQyMjgwX2ZyZWVfcmVxdWVzdCwKKworCS5hbGxvY19idWZmZXIJPSBuZXQyMjgwX2FsbG9jX2J1ZmZlciwKKwkuZnJlZV9idWZmZXIJPSBuZXQyMjgwX2ZyZWVfYnVmZmVyLAorCisJLnF1ZXVlCQk9IG5ldDIyODBfcXVldWUsCisJLmRlcXVldWUJPSBuZXQyMjgwX2RlcXVldWUsCisKKwkuc2V0X2hhbHQJPSBuZXQyMjgwX3NldF9oYWx0LAorCS5maWZvX3N0YXR1cwk9IG5ldDIyODBfZmlmb19zdGF0dXMsCisJLmZpZm9fZmx1c2gJPSBuZXQyMjgwX2ZpZm9fZmx1c2gsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG5ldDIyODBfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1MTYJCQlyZXR2YWw7CisKKwlpZiAoIV9nYWRnZXQpCisJCXJldHVybiAtRU5PREVWOworCWRldiA9IGNvbnRhaW5lcl9vZiAoX2dhZGdldCwgc3RydWN0IG5ldDIyODAsIGdhZGdldCk7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR2YWwgPSBnZXRfaWR4X3JlZyAoZGV2LT5yZWdzLCBSRUdfRlJBTUUpICYgMHgwM2ZmOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5ldDIyODBfd2FrZXVwIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwl1MzIJCQl0bXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoIV9nYWRnZXQpCisJCXJldHVybiAwOworCWRldiA9IGNvbnRhaW5lcl9vZiAoX2dhZGdldCwgc3RydWN0IG5ldDIyODAsIGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXRtcCA9IHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCk7CisJaWYgKHRtcCAmICgxIDw8IERFVklDRV9SRU1PVEVfV0FLRVVQX0VOQUJMRSkpCisJCXdyaXRlbCAoMSA8PCBHRU5FUkFURV9SRVNVTUUsICZkZXYtPnVzYi0+dXNic3RhdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogcGNpIHdyaXRlcyBtYXkgc3RpbGwgYmUgcG9zdGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0MjI4MF9zZXRfc2VsZnBvd2VyZWQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJdTMyCQkJdG1wOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKCFfZ2FkZ2V0KQorCQlyZXR1cm4gMDsKKwlkZXYgPSBjb250YWluZXJfb2YgKF9nYWRnZXQsIHN0cnVjdCBuZXQyMjgwLCBnYWRnZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl0bXAgPSByZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpOworCWlmICh2YWx1ZSkKKwkJdG1wIHw9ICgxIDw8IFNFTEZfUE9XRVJFRF9TVEFUVVMpOworCWVsc2UKKwkJdG1wICY9IH4oMSA8PCBTRUxGX1BPV0VSRURfU1RBVFVTKTsKKwl3cml0ZWwgKHRtcCwgJmRldi0+dXNiLT51c2JjdGwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ldDIyODBfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfb24pCit7CisJc3RydWN0IG5ldDIyODAgICpkZXY7CisJdTMyICAgICAgICAgICAgIHRtcDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlpZiAoIV9nYWRnZXQpCisJCXJldHVybiAtRU5PREVWOworCWRldiA9IGNvbnRhaW5lcl9vZiAoX2dhZGdldCwgc3RydWN0IG5ldDIyODAsIGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXRtcCA9IHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCk7CisJZGV2LT5zb2Z0Y29ubmVjdCA9IChpc19vbiAhPSAwKTsKKwlpZiAoaXNfb24pCisJCXRtcCB8PSAoMSA8PCBVU0JfREVURUNUX0VOQUJMRSk7CisJZWxzZQorCQl0bXAgJj0gfigxIDw8IFVTQl9ERVRFQ1RfRU5BQkxFKTsKKwl3cml0ZWwgKHRtcCwgJmRldi0+dXNiLT51c2JjdGwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIG5ldDIyODBfb3BzID0geworCS5nZXRfZnJhbWUJPSBuZXQyMjgwX2dldF9mcmFtZSwKKwkud2FrZXVwCQk9IG5ldDIyODBfd2FrZXVwLAorCS5zZXRfc2VsZnBvd2VyZWQgPSBuZXQyMjgwX3NldF9zZWxmcG93ZXJlZCwKKwkucHVsbHVwCQk9IG5ldDIyODBfcHVsbHVwLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKKy8qIEZJWE1FIG1vdmUgdGhlc2UgaW50byBwcm9jZnMsIGFuZCB1c2Ugc2VxX2ZpbGUuCisgKiBTeXNmcyBfc3RpbGxfIGRvZXNuJ3QgYmVoYXZlIGZvciBhcmJpdHJhcmlseSBzaXplZCBmaWxlcywKKyAqIGFuZCBhbHNvIGRvZXNuJ3QgaGVscCBwcm9kdWN0cyB1c2luZyB0aGlzIHdpdGggMi40IGtlcm5lbHMuCisgKi8KKworLyogImZ1bmN0aW9uIiBzeXNmcyBhdHRyaWJ1dGUgKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X2Z1bmN0aW9uIChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldDIyODAJKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSAoX2Rldik7CisKKwlpZiAoIWRldi0+ZHJpdmVyCisJCQl8fCAhZGV2LT5kcml2ZXItPmZ1bmN0aW9uCisJCQl8fCBzdHJsZW4gKGRldi0+ZHJpdmVyLT5mdW5jdGlvbikgPiBQQUdFX1NJWkUpCisJCXJldHVybiAwOworCXJldHVybiBzY25wcmludGYgKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRldi0+ZHJpdmVyLT5mdW5jdGlvbik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIgKGZ1bmN0aW9uLCBTX0lSVUdPLCBzaG93X2Z1bmN0aW9uLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfcmVnaXN0ZXJzIChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJY2hhcgkJCSpuZXh0OworCXVuc2lnbmVkCQlzaXplLCB0OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCWk7CisJdTMyCQkJdDEsIHQyOworCWNoYXIJCQkqczsKKworCWRldiA9IGRldl9nZXRfZHJ2ZGF0YSAoX2Rldik7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXMgPSBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWU7CisJZWxzZQorCQlzID0gIihub25lKSI7CisKKwkvKiBNYWluIENvbnRyb2wgUmVnaXN0ZXJzICovCisJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIiVzIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCQkJIiwgY2hpcHJldiAlMDR4LCBkbWEgJXNcblxuIgorCQkJImRldmluaXQgJTAzeCBmaWZvY3RsICUwOHggZ2FkZ2V0ICclcydcbiIKKwkJCSJwY2kgaXJxZW5iMCAlMDJ4IGlycWVuYjEgJTA4eCAiCisJCQkiaXJxc3RhdDAgJTA0eCBpcnFzdGF0MSAlMDh4XG4iLAorCQkJZHJpdmVyX25hbWUsIGRldi0+Y2hpcHJldiwKKwkJCXVzZV9kbWEKKwkJCQk/ICh1c2VfZG1hX2NoYWluaW5nID8gImNoYWluaW5nIiA6ICJlbmFibGVkIikKKwkJCQk6ICJkaXNhYmxlZCIsCisJCQlyZWFkbCAoJmRldi0+cmVncy0+ZGV2aW5pdCksCisJCQlyZWFkbCAoJmRldi0+cmVncy0+Zmlmb2N0bCksCisJCQlzLAorCQkJcmVhZGwgKCZkZXYtPnJlZ3MtPnBjaWlycWVuYjApLAorCQkJcmVhZGwgKCZkZXYtPnJlZ3MtPnBjaWlycWVuYjEpLAorCQkJcmVhZGwgKCZkZXYtPnJlZ3MtPmlycXN0YXQwKSwKKwkJCXJlYWRsICgmZGV2LT5yZWdzLT5pcnFzdGF0MSkpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KKwl0MSA9IHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCk7CisJdDIgPSByZWFkbCAoJmRldi0+dXNiLT51c2JzdGF0KTsKKwlpZiAodDEgJiAoMSA8PCBWQlVTX1BJTikpIHsKKwkJaWYgKHQyICYgKDEgPDwgSElHSF9TUEVFRCkpCisJCQlzID0gImhpZ2ggc3BlZWQiOworCQllbHNlIGlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJCXMgPSAicG93ZXJlZCI7CisJCWVsc2UKKwkJCXMgPSAiZnVsbCBzcGVlZCI7CisJCS8qIGZ1bGwgc3BlZWQgYml0ICg2KSBub3Qgd29ya2luZz8/ICovCisJfSBlbHNlCisJCQlzID0gIm5vdCBhdHRhY2hlZCI7CisJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCSJzdGRyc3AgJTA4eCB1c2JjdGwgJTA4eCB1c2JzdGF0ICUwOHggIgorCQkJCSJhZGRyIDB4JTAyeCAoJXMpXG4iLAorCQkJcmVhZGwgKCZkZXYtPnVzYi0+c3RkcnNwKSwgdDEsIHQyLAorCQkJcmVhZGwgKCZkZXYtPnVzYi0+b3VyYWRkciksIHMpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiBQQ0kgTWFzdGVyIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKwkvKiBETUEgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworCS8qIENvbmZpZ3VyYWJsZSBFUCBDb250cm9sIFJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCisJCWVwID0gJmRldi0+ZXAgW2ldOworCQlpZiAoaSAmJiAhZXAtPmRlc2MpCisJCQljb250aW51ZTsKKworCQl0MSA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2NmZyk7CisJCXQyID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfcnNwKSAmIDB4ZmY7CisJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJIlxuJXNcdGNmZyAlMDV4IHJzcCAoJTAyeCkgJXMlcyVzJXMlcyVzJXMlcyIKKwkJCQkJImlycWVuYiAlMDJ4XG4iLAorCQkJCWVwLT5lcC5uYW1lLCB0MSwgdDIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKSkKKwkJCQkJPyAiTkFLICIgOiAiIiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSkpCisJCQkJCT8gImhpZGUgIiA6ICIiLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX0VQX0ZPUkNFX0NSQ19FUlJPUikpCisJCQkJCT8gIkNSQyAiIDogIiIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfSU5URVJSVVBUX01PREUpKQorCQkJCQk/ICJpbnRlcnJ1cHQgIiA6ICIiLAorCQkJCSh0MiAmICgxPDxDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UpKQorCQkJCQk/ICJzdGF0dXMgIiA6ICIiLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKSkKKwkJCQkJPyAiTkFLbW9kZSAiIDogIiIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFKSkKKwkJCQkJPyAiREFUQTEgIiA6ICJEQVRBMCAiLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX0VORFBPSU5UX0hBTFQpKQorCQkJCQk/ICJIQUxUICIgOiAiIiwKKwkJCQlyZWFkbCAoJmVwLT5yZWdzLT5lcF9pcnFlbmIpKTsKKwkJc2l6ZSAtPSB0OworCQluZXh0ICs9IHQ7CisKKwkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkiXHRzdGF0ICUwOHggYXZhaWwgJTA0eCAiCisJCQkJIihlcCVkJXMtJXMpJXNcbiIsCisJCQkJcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCksCisJCQkJcmVhZGwgKCZlcC0+cmVncy0+ZXBfYXZhaWwpLAorCQkJCXQxICYgMHgwZiwgRElSX1NUUklORyAodDEpLAorCQkJCXR5cGVfc3RyaW5nICh0MSA+PiA4KSwKKwkJCQllcC0+c3RvcHBlZCA/ICIqIiA6ICIiKTsKKwkJc2l6ZSAtPSB0OworCQluZXh0ICs9IHQ7CisKKwkJaWYgKCFlcC0+ZG1hKQorCQkJY29udGludWU7CisKKwkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkiICBkbWFcdGN0bCAlMDh4IHN0YXQgJTA4eCBjb3VudCAlMDh4XG4iCisJCQkJIlx0YWRkciAlMDh4IGRlc2MgJTA4eFxuIiwKKwkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYWN0bCksCisJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFzdGF0KSwKKwkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYWNvdW50KSwKKwkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYWFkZHIpLAorCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hZGVzYykpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCX0KKworCS8qIEluZGV4ZWQgUmVnaXN0ZXJzICovCisJCS8vIG5vbmUgeWV0IAorCisJLyogU3RhdGlzdGljcyAqLworCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcbmlycXM6ICAiKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCisJCWVwID0gJmRldi0+ZXAgW2ldOworCQlpZiAoaSAmJiAhZXAtPmlycXMpCisJCQljb250aW51ZTsKKwkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIiAlcy8lbHUiLCBlcC0+ZXAubmFtZSwgZXAtPmlycXMpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCX0KKwl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiXG4iKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIgKHJlZ2lzdGVycywgU19JUlVHTywgc2hvd19yZWdpc3RlcnMsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19xdWV1ZXMgKHN0cnVjdCBkZXZpY2UgKl9kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwljaGFyCQkJKm5leHQ7CisJdW5zaWduZWQJCXNpemU7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJaTsKKworCWRldiA9IGRldl9nZXRfZHJ2ZGF0YSAoX2Rldik7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2VwCQkqZXAgPSAmZGV2LT5lcCBbaV07CisJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJCSpyZXE7CisJCWludAkJCQl0OworCisJCWlmIChpICE9IDApIHsKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCQkJZCA9IGVwLT5kZXNjOworCQkJaWYgKCFkKQorCQkJCWNvbnRpbnVlOworCQkJdCA9IGQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCSJcbiVzIChlcCVkJXMtJXMpIG1heCAlMDR4ICVzIGZpZm8gJWRcbiIsCisJCQkJZXAtPmVwLm5hbWUsIHQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0ssCisJCQkJKHQgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJCQkoeyBjaGFyICp2YWw7CisJCQkJIHN3aXRjaCAoZC0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCQkJCSBjYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQkJIAl2YWwgPSAiYnVsayI7IGJyZWFrOworCQkJCSBjYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJCQkgCXZhbCA9ICJpbnRyIjsgYnJlYWs7CisJCQkJIGRlZmF1bHQ6CisJCQkJIAl2YWwgPSAiaXNvIjsgYnJlYWs7CisJCQkJIH07IHZhbDsgfSksCisJCQkJbGUxNl90b19jcHUgKGQtPndNYXhQYWNrZXRTaXplKSAmIDB4MWZmZiwKKwkJCQllcC0+ZG1hID8gImRtYSIgOiAicGlvIiwgZXAtPmZpZm9fc2l6ZQorCQkJCSk7CisJCX0gZWxzZSAvKiBlcDAgc2hvdWxkIG9ubHkgaGF2ZSBvbmUgdHJhbnNmZXIgcXVldWVkICovCisJCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiZXAwIG1heCA2NCBwaW8gJXNcbiIsCisJCQkJCWVwLT5pc19pbiA/ICJpbiIgOiAib3V0Iik7CisJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQlnb3RvIGRvbmU7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJCWlmIChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlx0KG5vdGhpbmcgcXVldWVkKVxuIik7CisJCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJCWdvdG8gZG9uZTsKKwkJCXNpemUgLT0gdDsKKwkJCW5leHQgKz0gdDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJCWlmIChlcC0+ZG1hICYmIHJlcS0+dGRfZG1hID09IHJlYWRsICgmZXAtPmRtYS0+ZG1hZGVzYykpCisJCQkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJIlx0cmVxICVwIGxlbiAlZC8lZCAiCisJCQkJCSJidWYgJXAgKGRtYWNvdW50ICUwOHgpXG4iLAorCQkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKKwkJCQkJcmVxLT5yZXEubGVuZ3RoLCByZXEtPnJlcS5idWYsCisJCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hY291bnQpKTsKKwkJCWVsc2UKKwkJCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkiXHRyZXEgJXAgbGVuICVkLyVkIGJ1ZiAlcFxuIiwKKwkJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCisJCQlpZiAoZXAtPmRtYSkgeworCQkJCXN0cnVjdCBuZXQyMjgwX2RtYQkqdGQ7CisKKwkJCQl0ZCA9IHJlcS0+dGQ7CisJCQkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlx0ICAgIHRkICUwOHggIgorCQkJCQkiIGNvdW50ICUwOHggYnVmICUwOHggZGVzYyAlMDh4XG4iLAorCQkJCQkodTMyKSByZXEtPnRkX2RtYSwKKwkJCQkJbGUzMl90b19jcHUgKHRkLT5kbWFjb3VudCksCisJCQkJCWxlMzJfdG9fY3B1ICh0ZC0+ZG1hYWRkciksCisJCQkJCWxlMzJfdG9fY3B1ICh0ZC0+ZG1hZGVzYykpOworCQkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlzaXplIC09IHQ7CisJCQkJbmV4dCArPSB0OworCQkJfQorCQl9CisJfQorCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUiAocXVldWVzLCBTX0lSVUdPLCBzaG93X3F1ZXVlcywgTlVMTCk7CisKKworI2Vsc2UKKworI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGUoYSxiKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZGV2aWNlX3JlbW92ZV9maWxlCWRldmljZV9jcmVhdGVfZmlsZQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogYW5vdGhlciBkcml2ZXItc3BlY2lmaWMgbW9kZSBtaWdodCBiZSBhIHJlcXVlc3QgdHlwZSBkb2luZyBkbWEKKyAqIHRvL2Zyb20gYW5vdGhlciBkZXZpY2UgZmlmbyBpbnN0ZWFkIG9mIHRvL2Zyb20gbWVtb3J5LgorICovCisKK3N0YXRpYyB2b2lkIHNldF9maWZvX21vZGUgKHN0cnVjdCBuZXQyMjgwICpkZXYsIGludCBtb2RlKQoreworCS8qIGtlZXBpbmcgaGlnaCBiaXRzIHByZXNlcnZlcyBCQVIyICovCisJd3JpdGVsICgoMHhmZmZmIDw8IFBDSV9CQVNFMl9SQU5HRSkgfCBtb2RlLCAmZGV2LT5yZWdzLT5maWZvY3RsKTsKKworCS8qIGFsd2F5cyBlcC17YSxiLGUsZn0gLi4uIG1heWJlIG5vdCBlcC1jIG9yIGVwLWQgKi8KKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFsxXS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzJdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDA6CisJCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFszXS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFs0XS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJCWRldi0+ZXAgWzFdLmZpZm9fc2l6ZSA9IGRldi0+ZXAgWzJdLmZpZm9fc2l6ZSA9IDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2LT5lcCBbMV0uZmlmb19zaXplID0gZGV2LT5lcCBbMl0uZmlmb19zaXplID0gMjA0ODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbM10uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCQlkZXYtPmVwIFsxXS5maWZvX3NpemUgPSAyMDQ4OworCQlkZXYtPmVwIFsyXS5maWZvX3NpemUgPSAxMDI0OworCQlicmVhazsKKwl9CisJLyogZmlmbyBzaXplcyBmb3IgZXAwLCBlcC1jLCBlcC1kLCBlcC1lLCBhbmQgZXAtZiBuZXZlciBjaGFuZ2UgKi8KKwlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbNV0uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFs2XS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7Cit9CisKKy8qKgorICogbmV0MjI4MF9zZXRfZmlmb19tb2RlIC0gY2hhbmdlIGFsbG9jYXRpb24gb2YgZmlmbyBidWZmZXJzCisgKiBAZ2FkZ2V0OiBhY2Nlc3MgdG8gdGhlIG5ldDIyODAgZGV2aWNlIHRoYXQgd2lsbCBiZSB1cGRhdGVkCisgKiBAbW9kZTogMCBmb3IgZGVmYXVsdCwgZm91ciAxa0IgYnVmZmVycyAoZXAtYSB0aHJvdWdoIGVwLWQpOworICogCTEgZm9yIHR3byAya0IgYnVmZmVycyAoZXAtYSBhbmQgZXAtYiBvbmx5KTsKKyAqIAkyIGZvciBvbmUgMmtCIGJ1ZmZlciAoZXAtYSkgYW5kIHR3byAxa0Igb25lcyAoZXAtYiwgZXAtYykuCisgKgorICogcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uICB3aGVuIHRoaXMgc3VjY2VlZHMsCisgKiB0aGUgY29udGVudHMgb2YgZ2FkZ2V0LT5lcF9saXN0IG1heSBoYXZlIGNoYW5nZWQuCisgKgorICogeW91IG1heSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGVuZHBvaW50cyBhLWQgYXJlIGFsbCBkaXNhYmxlZC4KKyAqIHVzZSBpdCB3aGVuZXZlciBleHRyYSBoYXJkd2FyZSBidWZmZXJpbmcgY2FuIGhlbHAgcGVyZm9ybWFuY2UsIHN1Y2gKKyAqIGFzIGJlZm9yZSBlbmFibGluZyAiaGlnaCBiYW5kd2lkdGgiIGludGVycnVwdCBlbmRwb2ludHMgdGhhdCB1c2UKKyAqIG1heHBhY2tldCBiaWdnZXIgdGhhbiA1MTIgKHdoZW4gZG91YmxlIGJ1ZmZlcmluZyB3b3VsZCBvdGhlcndpc2UKKyAqIGJlIHVuYXZhaWxhYmxlKS4KKyAqLworaW50IG5ldDIyODBfc2V0X2ZpZm9fbW9kZSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IG1vZGUpCit7CisJaW50CQkJaTsKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwlpbnQJCQlzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKCFnYWRnZXQpCisJCXJldHVybiAtRU5PREVWOworCWRldiA9IGNvbnRhaW5lcl9vZiAoZ2FkZ2V0LCBzdHJ1Y3QgbmV0MjI4MCwgZ2FkZ2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IDQ7IGkrKykKKwkJaWYgKGRldi0+ZXAgW2ldLmRlc2MpIHsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCWlmIChtb2RlIDwgMCB8fCBtb2RlID4gMikKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwlpZiAoc3RhdHVzID09IDApCisJCXNldF9maWZvX21vZGUgKGRldiwgbW9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChtb2RlID09IDEpCisJCQlERUJVRyAoZGV2LCAiZmlmbzogIGVwLWEgMkssIGVwLWIgMktcbiIpOworCQllbHNlIGlmIChtb2RlID09IDIpCisJCQlERUJVRyAoZGV2LCAiZmlmbzogIGVwLWEgMkssIGVwLWIgMUssIGVwLWMgMUtcbiIpOworCQkvKiBlbHNlIGFsbCBhcmUgMUsgKi8KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0wgKG5ldDIyODBfc2V0X2ZpZm9fbW9kZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGtlZXBpbmcgaXQgc2ltcGxlOgorICogLSBvbmUgYnVzIGRyaXZlciwgaW5pdHRlZCBmaXJzdDsKKyAqIC0gb25lIGZ1bmN0aW9uIGRyaXZlciwgaW5pdHRlZCBzZWNvbmQKKyAqCisgKiBtb3N0IG9mIHRoZSB3b3JrIHRvIHN1cHBvcnQgbXVsdGlwbGUgbmV0MjI4MCBjb250cm9sbGVycyB3b3VsZAorICogYmUgdG8gYXNzb2NpYXRlIHRoaXMgZ2FkZ2V0IGRyaXZlciAoeWVzPykgd2l0aCBhbGwgb2YgdGhlbSwgb3IKKyAqIHBlcmhhcHMgdG8gYmluZCBzcGVjaWZpYyBkcml2ZXJzIHRvIHNwZWNpZmljIGRldmljZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCBuZXQyMjgwCSp0aGVfY29udHJvbGxlcjsKKworc3RhdGljIHZvaWQgdXNiX3Jlc2V0IChzdHJ1Y3QgbmV0MjI4MCAqZGV2KQoreworCXUzMgl0bXA7CisKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCSh2b2lkKSByZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpOworCisJbmV0MjI4MF9sZWRfaW5pdCAoZGV2KTsKKworCS8qIGRpc2FibGUgYXV0b21hdGljIHJlc3BvbnNlcywgYW5kIGlycXMgKi8KKwl3cml0ZWwgKDAsICZkZXYtPnVzYi0+c3RkcnNwKTsKKwl3cml0ZWwgKDAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOworCXdyaXRlbCAoMCwgJmRldi0+cmVncy0+cGNpaXJxZW5iMSk7CisKKwkvKiBjbGVhciBvbGQgZG1hIGFuZCBpcnEgc3RhdGUgKi8KKwlmb3IgKHRtcCA9IDA7IHRtcCA8IDQ7IHRtcCsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2VwCSplcCA9ICZkZXYtPmVwIFt0bXAgKyAxXTsKKworCQlpZiAoZXAtPmRtYSkKKwkJCWFib3J0X2RtYSAoZXApOworCX0KKwl3cml0ZWwgKH4wLCAmZGV2LT5yZWdzLT5pcnFzdGF0MCksCisJd3JpdGVsICh+KDEgPDwgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCksICZkZXYtPnJlZ3MtPmlycXN0YXQxKSwKKworCS8qIHJlc2V0LCBhbmQgZW5hYmxlIHBjaSAqLworCXRtcCA9IHJlYWRsICgmZGV2LT5yZWdzLT5kZXZpbml0KQorCQl8ICgxIDw8IFBDSV9FTkFCTEUpCisJCXwgKDEgPDwgRklGT19TT0ZUX1JFU0VUKQorCQl8ICgxIDw8IFVTQl9TT0ZUX1JFU0VUKQorCQl8ICgxIDw8IE04MDUxX1JFU0VUKTsKKwl3cml0ZWwgKHRtcCwgJmRldi0+cmVncy0+ZGV2aW5pdCk7CisKKwkvKiBzdGFuZGFyZCBmaWZvIGFuZCBlbmRwb2ludCBhbGxvY2F0aW9ucyAqLworCXNldF9maWZvX21vZGUgKGRldiwgKGZpZm9fbW9kZSA8PSAyKSA/IGZpZm9fbW9kZSA6IDApOworfQorCitzdGF0aWMgdm9pZCB1c2JfcmVpbml0IChzdHJ1Y3QgbmV0MjI4MCAqZGV2KQoreworCXUzMgl0bXA7CisJaW50CWluaXRfZG1hOworCisJLyogdXNlX2RtYSBjaGFuZ2VzIGFyZSBpZ25vcmVkIHRpbGwgbmV4dCBkZXZpY2UgcmUtaW5pdCAqLworCWluaXRfZG1hID0gdXNlX2RtYTsKKworCS8qIGJhc2ljIGVuZHBvaW50IGluaXQgKi8KKwlmb3IgKHRtcCA9IDA7IHRtcCA8IDc7IHRtcCsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2VwCSplcCA9ICZkZXYtPmVwIFt0bXBdOworCisJCWVwLT5lcC5uYW1lID0gZXBfbmFtZSBbdG1wXTsKKwkJZXAtPmRldiA9IGRldjsKKwkJZXAtPm51bSA9IHRtcDsKKworCQlpZiAodG1wID4gMCAmJiB0bXAgPD0gNCkgeworCQkJZXAtPmZpZm9fc2l6ZSA9IDEwMjQ7CisJCQlpZiAoaW5pdF9kbWEpCisJCQkJZXAtPmRtYSA9ICZkZXYtPmRtYSBbdG1wIC0gMV07CisJCX0gZWxzZQorCQkJZXAtPmZpZm9fc2l6ZSA9IDY0OworCQllcC0+cmVncyA9ICZkZXYtPmVwcmVncyBbdG1wXTsKKwkJZXBfcmVzZXQgKGRldi0+cmVncywgZXApOworCX0KKwlkZXYtPmVwIFswXS5lcC5tYXhwYWNrZXQgPSA2NDsKKwlkZXYtPmVwIFs1XS5lcC5tYXhwYWNrZXQgPSA2NDsKKwlkZXYtPmVwIFs2XS5lcC5tYXhwYWNrZXQgPSA2NDsKKworCWRldi0+Z2FkZ2V0LmVwMCA9ICZkZXYtPmVwIFswXS5lcDsKKwlkZXYtPmVwIFswXS5zdG9wcGVkID0gMDsKKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+Z2FkZ2V0LmVwMC0+ZXBfbGlzdCk7CisKKwkvKiB3ZSB3YW50IHRvIHByZXZlbnQgbG93bGV2ZWwvaW5zZWN1cmUgYWNjZXNzIGZyb20gdGhlIFVTQiBob3N0LAorCSAqIGJ1dCBlcnJhdHVtIDAxMTkgbWVhbnMgdGhpcyBlbmFibGUgYml0IGlzIGlnbm9yZWQKKwkgKi8KKwlmb3IgKHRtcCA9IDA7IHRtcCA8IDU7IHRtcCsrKQorCQl3cml0ZWwgKEVQX0RPTlRVU0UsICZkZXYtPmRlcCBbdG1wXS5kZXBfY2ZnKTsKK30KKworc3RhdGljIHZvaWQgZXAwX3N0YXJ0IChzdHJ1Y3QgbmV0MjI4MCAqZGV2KQoreworCXdyaXRlbCAoICAoMSA8PCBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSkKKwkJfCAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpCisJCXwgKDEgPDwgQ0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFKQorCQksICZkZXYtPmVwcmVncyBbMF0uZXBfcnNwKTsKKworCS8qCisJICogaGFyZHdhcmUgb3B0aW9uYWxseSBoYW5kbGVzIGEgYnVuY2ggb2Ygc3RhbmRhcmQgcmVxdWVzdHMKKwkgKiB0aGF0IHRoZSBBUEkgaGlkZXMgZnJvbSBkcml2ZXJzIGFueXdheS4gIGhhdmUgaXQgZG8gc28uCisJICogZW5kcG9pbnQgc3RhdHVzL2ZlYXR1cmVzIGFyZSBoYW5kbGVkIGluIHNvZnR3YXJlLCB0bworCSAqIGhlbHAgcGFzcyB0ZXN0cyBmb3Igc29tZSBkdWJpb3VzIGJlaGF2aW9yLgorCSAqLworCXdyaXRlbCAoICAoMSA8PCBTRVRfVEVTVF9NT0RFKQorCQl8ICgxIDw8IFNFVF9BRERSRVNTKQorCQl8ICgxIDw8IERFVklDRV9TRVRfQ0xFQVJfREVWSUNFX1JFTU9URV9XQUtFVVApCisJCXwgKDEgPDwgR0VUX0RFVklDRV9TVEFUVVMpCisJCXwgKDEgPDwgR0VUX0lOVEVSRkFDRV9TVEFUVVMpCisJCSwgJmRldi0+dXNiLT5zdGRyc3ApOworCXdyaXRlbCAoICAoMSA8PCBVU0JfUk9PVF9QT1JUX1dBS0VVUF9FTkFCTEUpCisJCXwgKDEgPDwgU0VMRl9QT1dFUkVEX1VTQl9ERVZJQ0UpCisJCXwgKDEgPDwgUkVNT1RFX1dBS0VVUF9TVVBQT1JUKQorCQl8IChkZXYtPnNvZnRjb25uZWN0IDw8IFVTQl9ERVRFQ1RfRU5BQkxFKQorCQl8ICgxIDw8IFNFTEZfUE9XRVJFRF9TVEFUVVMpCisJCSwgJmRldi0+dXNiLT51c2JjdGwpOworCisJLyogZW5hYmxlIGlycXMgc28gd2UgY2FuIHNlZSBlcDAgYW5kIGdlbmVyYWwgb3BlcmF0aW9uICAqLworCXdyaXRlbCAoICAoMSA8PCBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBFTkRQT0lOVF8wX0lOVEVSUlVQVF9FTkFCTEUpCisJCSwgJmRldi0+cmVncy0+cGNpaXJxZW5iMCk7CisJd3JpdGVsICggICgxIDw8IFBDSV9JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgVkJVU19JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSkKKwkJLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIxKTsKKworCS8qIGRvbid0IGxlYXZlIGFueSB3cml0ZXMgcG9zdGVkICovCisJKHZvaWQpIHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCk7Cit9CisKKy8qIHdoZW4gYSBkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGl0IHdpbGwgcmVjZWl2ZQorICogY29udHJvbCByZXF1ZXN0cyBpbmNsdWRpbmcgc2V0X2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggZW5hYmxlcworICogbm9uLWNvbnRyb2wgcmVxdWVzdHMuICB0aGVuIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYQorICogZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIHRoZW4gYSBob3N0IG1heSBjb25uZWN0IGFnYWluLCBvcgorICogdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KKyAqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldiA9IHRoZV9jb250cm9sbGVyOworCWludAkJCXJldHZhbDsKKwl1bnNpZ25lZAkJaTsKKworCS8qIGluc2lzdCBvbiBoaWdoIHNwZWVkIHN1cHBvcnQgZnJvbSB0aGUgZHJpdmVyLCBzaW5jZQorCSAqIChkZXYtPnVzYi0+eGN2cmRpYWcgJiBGT1JDRV9GVUxMX1NQRUVEX01PREUpCisJICogIm11c3Qgbm90IGJlIHVzZWQgaW4gbm9ybWFsIG9wZXJhdGlvbiIKKwkgKi8KKwlpZiAoIWRyaXZlcgorCQkJfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSAorCQkJfHwgIWRyaXZlci0+YmluZAorCQkJfHwgIWRyaXZlci0+dW5iaW5kCisJCQl8fCAhZHJpdmVyLT5zZXR1cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCWRldi0+ZXAgW2ldLmlycXMgPSAwOworCisJLyogaG9vayB1cCB0aGUgZHJpdmVyIC4uLiAqLworCWRldi0+c29mdGNvbm5lY3QgPSAxOworCWRyaXZlci0+ZHJpdmVyLmJ1cyA9IE5VTEw7CisJZGV2LT5kcml2ZXIgPSBkcml2ZXI7CisJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwlyZXR2YWwgPSBkcml2ZXItPmJpbmQgKCZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlERUJVRyAoZGV2LCAiYmluZCB0byBkcml2ZXIgJXMgLS0+ICVkXG4iLAorCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCWRldi0+ZHJpdmVyID0gTlVMTDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGV2aWNlX2NyZWF0ZV9maWxlICgmZGV2LT5wZGV2LT5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJZGV2aWNlX2NyZWF0ZV9maWxlICgmZGV2LT5wZGV2LT5kZXYsICZkZXZfYXR0cl9xdWV1ZXMpOworCisJLyogLi4uIHRoZW4gZW5hYmxlIGhvc3QgZGV0ZWN0aW9uIGFuZCBlcDA7IGFuZCB3ZSdyZSByZWFkeQorCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCisJICovCisJbmV0MjI4MF9sZWRfYWN0aXZlIChkZXYsIDEpOworCWVwMF9zdGFydCAoZGV2KTsKKworCURFQlVHIChkZXYsICIlcyByZWFkeSwgdXNiY3RsICUwOHggc3RkcnNwICUwOHhcbiIsCisJCQlkcml2ZXItPmRyaXZlci5uYW1lLAorCQkJcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKSwKKwkJCXJlYWRsICgmZGV2LT51c2ItPnN0ZHJzcCkpOworCisJLyogcGNpIHdyaXRlcyBtYXkgc3RpbGwgYmUgcG9zdGVkICovCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisKK3N0YXRpYyB2b2lkCitzdG9wX2FjdGl2aXR5IChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlpbnQJCQlpOworCisJLyogZG9uJ3QgZGlzY29ubmVjdCBpZiBpdCdzIG5vdCBjb25uZWN0ZWQgKi8KKwlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWRyaXZlciA9IE5VTEw7CisKKwkvKiBzdG9wIGhhcmR3YXJlOyBwcmV2ZW50IG5ldyByZXF1ZXN0IHN1Ym1pc3Npb25zOworCSAqIGFuZCBraWxsIGFueSBvdXRzdGFuZGluZyByZXF1ZXN0cy4KKwkgKi8KKwl1c2JfcmVzZXQgKGRldik7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJbnVrZSAoJmRldi0+ZXAgW2ldKTsKKworCS8qIHJlcG9ydCBkaXNjb25uZWN0OyB0aGUgZHJpdmVyIGlzIGFscmVhZHkgcXVpZXNjZWQgKi8KKwlpZiAoZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJZHJpdmVyLT5kaXNjb25uZWN0ICgmZGV2LT5nYWRnZXQpOworCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCX0KKworCXVzYl9yZWluaXQgKGRldik7Cit9CisKK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlzdG9wX2FjdGl2aXR5IChkZXYsIGRyaXZlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJbmV0MjI4MF9wdWxsdXAgKCZkZXYtPmdhZGdldCwgMCk7CisKKwlkcml2ZXItPnVuYmluZCAoJmRldi0+Z2FkZ2V0KTsKKwlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisKKwluZXQyMjgwX2xlZF9hY3RpdmUgKGRldiwgMCk7CisJZGV2aWNlX3JlbW92ZV9maWxlICgmZGV2LT5wZGV2LT5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJZGV2aWNlX3JlbW92ZV9maWxlICgmZGV2LT5wZGV2LT5kZXYsICZkZXZfYXR0cl9xdWV1ZXMpOworCisJREVCVUcgKGRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBoYW5kbGUgZXAwLCBlcC1lLCBlcC1mIHdpdGggNjQgYnl0ZSBwYWNrZXRzOiBwYWNrZXQgcGVyIGlycS4KKyAqIGFsc28gd29ya3MgZm9yIGRtYS1jYXBhYmxlIGVuZHBvaW50cywgaW4gcGlvIG1vZGUgb3IganVzdAorICogdG8gbWFudWFsbHkgYWR2YW5jZSB0aGUgcXVldWUgYWZ0ZXIgc2hvcnQgT1VUIHRyYW5zZmVycy4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX2VwX3NtYWxsIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCXUzMgkJCXQ7CisJLyogMCBlcnJvciwgMSBtaWQtZGF0YSwgMiBkb25lICovCisJaW50CQkJbW9kZSA9IDE7CisKKwlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKwllbHNlCisJCXJlcSA9IE5VTEw7CisKKwkvKiBhY2sgYWxsLCBhbmQgaGFuZGxlIHdoYXQgd2UgY2FyZSBhYm91dCAqLworCXQgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwllcC0+aXJxcysrOworI2lmIDAKKwlWREVCVUcgKGVwLT5kZXYsICIlcyBhY2sgZXBfc3RhdCAlMDh4LCByZXEgJXBcbiIsCisJCQllcC0+ZXAubmFtZSwgdCwgcmVxID8gJnJlcS0+cmVxIDogMCk7CisjZW5kaWYKKwl3cml0ZWwgKHQgJiB+KDEgPDwgTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKworCS8qIGZvciBlcDAsIG1vbml0b3IgdG9rZW4gaXJxcyB0byBjYXRjaCBkYXRhIHN0YWdlIGxlbmd0aCBlcnJvcnMKKwkgKiBhbmQgdG8gc3luY2hyb25pemUgb24gc3RhdHVzLgorCSAqCisJICogYWxzbywgdG8gZGVmZXIgcmVwb3J0aW5nIG9mIHByb3RvY29sIHN0YWxscyAuLi4gaGVyZSdzIHdoZXJlCisJICogZGF0YSBvciBzdGF0dXMgZmlyc3QgYXBwZWFycywgaGFuZGxpbmcgc3RhbGxzIGhlcmUgc2hvdWxkIG5ldmVyCisJICogY2F1c2UgdHJvdWJsZSBvbiB0aGUgaG9zdCBzaWRlLi4KKwkgKgorCSAqIGNvbnRyb2wgcmVxdWVzdHMgY291bGQgYmUgc2xpZ2h0bHkgZmFzdGVyIHdpdGhvdXQgdG9rZW4gc3luY2ggZm9yCisJICogc3RhdHVzLCBidXQgc3RhdHVzIGNhbiBqYW0gdXAgdGhhdCB3YXkuCisJICovCisJaWYgKHVubGlrZWx5IChlcC0+bnVtID09IDApKSB7CisJCWlmIChlcC0+aXNfaW4pIHsKKwkJCS8qIHN0YXR1czsgc3RvcCBOQUtpbmcgKi8KKwkJCWlmICh0ICYgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpKSB7CisJCQkJaWYgKGVwLT5kZXYtPnByb3RvY29sX3N0YWxsKSB7CisJCQkJCWVwLT5zdG9wcGVkID0gMTsKKwkJCQkJc2V0X2hhbHQgKGVwKTsKKwkJCQl9CisJCQkJaWYgKCFyZXEpCisJCQkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJCW1vZGUgPSAyOworCQkJLyogcmVwbHkgdG8gZXh0cmEgSU4gZGF0YSB0b2tlbnMgd2l0aCBhIHpscCAqLworCQkJfSBlbHNlIGlmICh0ICYgKDEgPDwgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQpKSB7CisJCQkJaWYgKGVwLT5kZXYtPnByb3RvY29sX3N0YWxsKSB7CisJCQkJCWVwLT5zdG9wcGVkID0gMTsKKwkJCQkJc2V0X2hhbHQgKGVwKTsKKwkJCQkJbW9kZSA9IDI7CisJCQkJfSBlbHNlIGlmICghcmVxICYmIGVwLT5zdG9wcGVkKQorCQkJCQl3cml0ZV9maWZvIChlcCwgTlVMTCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBzdGF0dXM7IHN0b3AgTkFLaW5nICovCisJCQlpZiAodCAmICgxIDw8IERBVEFfSU5fVE9LRU5fSU5URVJSVVBUKSkgeworCQkJCWlmIChlcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCkgeworCQkJCQllcC0+c3RvcHBlZCA9IDE7CisJCQkJCXNldF9oYWx0IChlcCk7CisJCQkJfQorCQkJCW1vZGUgPSAyOworCQkJLyogYW4gZXh0cmEgT1VUIHRva2VuIGlzIGFuIGVycm9yICovCisJCQl9IGVsc2UgaWYgKCgodCAmICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKSkKKwkJCQkJJiYgcmVxCisJCQkJCSYmIHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpCisJCQkJCXx8ICFyZXEpIHsKKwkJCQllcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CisJCQkJc2V0X2hhbHQgKGVwKTsKKwkJCQllcC0+c3RvcHBlZCA9IDE7CisJCQkJaWYgKHJlcSkKKwkJCQkJZG9uZSAoZXAsIHJlcSwgLUVPVkVSRkxPVyk7CisJCQkJcmVxID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCWlmICh1bmxpa2VseSAoIXJlcSkpCisJCXJldHVybjsKKworCS8qIG1hbnVhbCBETUEgcXVldWUgYWR2YW5jZSBhZnRlciBzaG9ydCBPVVQgKi8KKwlpZiAobGlrZWx5IChlcC0+ZG1hICE9IDApKSB7CisJCWlmICh0ICYgKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCkpIHsKKwkJCXUzMgljb3VudDsKKwkJCWludAlzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwkJCS8qIFRSQU5TRkVSUkVEIHdvcmtzIGFyb3VuZCBPVVRfRE9ORSBlcnJhdHVtIDAxMTIuCisJCQkgKiB3ZSBleHBlY3QgKE4gPD0gbWF4cGFja2V0KSBieXRlczsgaG9zdCB3cm90ZSBNLgorCQkJICogaWZmIChNIDwgTikgd2Ugd29uJ3QgZXZlciBzZWUgYSBETUEgaW50ZXJydXB0LgorCQkJICovCisJCQllcC0+c3RvcHBlZCA9IDE7CisJCQlmb3IgKGNvdW50ID0gMDsgOyB0ID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCkpIHsKKworCQkJCS8qIGFueSBwcmVjZWRpbmcgZG1hIHRyYW5zZmVycyBtdXN0IGZpbmlzaC4KKwkJCQkgKiBkbWEgaGFuZGxlcyAoTSA+PSBOKSwgbWF5IGVtcHR5IHRoZSBxdWV1ZQorCQkJCSAqLworCQkJCXNjYW5fZG1hX2NvbXBsZXRpb25zIChlcCk7CisJCQkJaWYgKHVubGlrZWx5IChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKQorCQkJCQkJfHwgZXAtPm91dF9vdmVyZmxvdykpIHsKKwkJCQkJcmVxID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisKKwkJCQkvKiBoZXJlIGVpdGhlciAoTSA8IE4pLCBhICJyZWFsIiBzaG9ydCByeDsKKwkJCQkgKiBvciAoTSA9PSBOKSBhbmQgdGhlIHF1ZXVlIGRpZG4ndCBlbXB0eQorCQkJCSAqLworCQkJCWlmIChsaWtlbHkgKHQgJiAoMSA8PCBGSUZPX0VNUFRZKSkpIHsKKwkJCQkJY291bnQgPSByZWFkbCAoJmVwLT5kbWEtPmRtYWNvdW50KTsKKwkJCQkJY291bnQgJj0gRE1BX0JZVEVfQ09VTlRfTUFTSzsKKwkJCQkJaWYgKHJlYWRsICgmZXAtPmRtYS0+ZG1hZGVzYykKKwkJCQkJCQkhPSByZXEtPnRkX2RtYSkKKwkJCQkJCXJlcSA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl1ZGVsYXkoMSk7CisJCQl9CisKKwkJCS8qIHN0b3AgRE1BLCBsZWF2ZSBlcCBOQUtpbmcgKi8KKwkJCXdyaXRlbCAoKDEgPDwgRE1BX0FCT1JUKSwgJmVwLT5kbWEtPmRtYXN0YXQpOworCQkJc3Bpbl9zdG9wX2RtYSAoZXAtPmRtYSk7CisKKwkJCWlmIChsaWtlbHkgKHJlcSkpIHsKKwkJCQlyZXEtPnRkLT5kbWFjb3VudCA9IDA7CisJCQkJdCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKTsKKwkJCQlkbWFfZG9uZSAoZXAsIHJlcSwgY291bnQsIHQpOworCQkJfQorCisJCQkvKiBhbHNvIGZsdXNoIHRvIHByZXZlbnQgZXJyYXR1bSAwMTA2IHRyb3VibGUgKi8KKwkJCWlmICh1bmxpa2VseSAoZXAtPm91dF9vdmVyZmxvdworCQkJCQl8fCAoZXAtPmRldi0+Y2hpcHJldiA9PSAweDAxMDAKKwkJCQkJCSYmIGVwLT5kZXYtPmdhZGdldC5zcGVlZAorCQkJCQkJCT09IFVTQl9TUEVFRF9GVUxMKSkpIHsKKwkJCQlvdXRfZmx1c2ggKGVwKTsKKwkJCQllcC0+b3V0X292ZXJmbG93ID0gMDsKKwkJCX0KKworCQkJLyogKHJlKXN0YXJ0IGRtYSBpZiBuZWVkZWQsIHN0b3AgTkFLaW5nICovCisJCQllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7CisJCQlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQkJCXJlc3RhcnRfZG1hIChlcCk7CisJCX0gZWxzZQorCQkJREVCVUcgKGVwLT5kZXYsICIlcyBkbWEgZXBfc3RhdCAlMDh4ID8/XG4iLAorCQkJCQllcC0+ZXAubmFtZSwgdCk7CisJCXJldHVybjsKKworCS8qIGRhdGEgcGFja2V0KHMpIHJlY2VpdmVkIChpbiB0aGUgZmlmbywgT1VUKSAqLworCX0gZWxzZSBpZiAodCAmICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCkpIHsKKwkJaWYgKHJlYWRfZmlmbyAoZXAsIHJlcSkgJiYgZXAtPm51bSAhPSAwKQorCQkJbW9kZSA9IDI7CisKKwkvKiBkYXRhIHBhY2tldChzKSB0cmFuc21pdHRlZCAoSU4pICovCisJfSBlbHNlIGlmICh0ICYgKDEgPDwgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUKSkgeworCQl1bnNpZ25lZAlsZW47CisKKwkJbGVuID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCQlpZiAobGVuID4gZXAtPmVwLm1heHBhY2tldCkKKwkJCWxlbiA9IGVwLT5lcC5tYXhwYWNrZXQ7CisJCXJlcS0+cmVxLmFjdHVhbCArPSBsZW47CisKKwkJLyogaWYgd2Ugd3JvdGUgaXQgYWxsLCB3ZSdyZSB1c3VhbGx5IGRvbmUgKi8KKwkJaWYgKHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpIHsKKwkJCWlmIChlcC0+bnVtID09IDApIHsKKwkJCQkvKiB3YWl0IGZvciBjb250cm9sIHN0YXR1cyAqLworCQkJCWlmIChtb2RlICE9IDIpCisJCQkJCXJlcSA9IE5VTEw7CisJCQl9IGVsc2UgaWYgKCFyZXEtPnJlcS56ZXJvIHx8IGxlbiAhPSBlcC0+ZXAubWF4cGFja2V0KQorCQkJCW1vZGUgPSAyOworCQl9CisKKwkvKiB0aGVyZSB3YXMgbm90aGluZyB0byBkbyAuLi4gICovCisJfSBlbHNlIGlmIChtb2RlID09IDEpCisJCXJldHVybjsKKworCS8qIGRvbmUgKi8KKwlpZiAobW9kZSA9PSAyKSB7CisJCS8qIHN0cmVhbSBlbmRwb2ludHMgb2Z0ZW4gcmVzdWJtaXQvdW5saW5rIGluIGNvbXBsZXRpb24gKi8KKwkJZG9uZSAoZXAsIHJlcSwgMCk7CisKKwkJLyogbWF5YmUgYWR2YW5jZSBxdWV1ZSB0byBuZXh0IHJlcXVlc3QgKi8KKwkJaWYgKGVwLT5udW0gPT0gMCkgeworCQkJLyogTk9URTogIG5ldDIyODAgY291bGQgbGV0IGdhZGdldCBkcml2ZXIgc3RhcnQgdGhlCisJCQkgKiBzdGF0dXMgc3RhZ2UgbGF0ZXIuIHNpbmNlIG5vdCBhbGwgY29udHJvbGxlcnMgbGV0CisJCQkgKiB0aGVtIGNvbnRyb2wgdGhhdCwgdGhlIGFwaSBkb2Vzbid0ICh5ZXQpIGFsbG93IGl0LgorCQkJICovCisJCQlpZiAoIWVwLT5zdG9wcGVkKQorCQkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJcmVxID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWlmICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkgJiYgIWVwLT5zdG9wcGVkKQorCQkJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisJCQllbHNlCisJCQkJcmVxID0gTlVMTDsKKwkJCWlmIChyZXEgJiYgIWVwLT5pc19pbikKKwkJCQlzdG9wX291dF9uYWtpbmcgKGVwKTsKKwkJfQorCX0KKworCS8qIGlzIHRoZXJlIGEgYnVmZmVyIGZvciB0aGUgbmV4dCBwYWNrZXQ/CisJICogZm9yIGJlc3Qgc3RyZWFtaW5nIHBlcmZvcm1hbmNlLCBtYWtlIHN1cmUgdGhlcmUgaXMgb25lLgorCSAqLworCWlmIChyZXEgJiYgIWVwLT5zdG9wcGVkKSB7CisKKwkJLyogbG9hZCBJTiBmaWZvIHdpdGggbmV4dCBwYWNrZXQgKG1heSBiZSB6bHApICovCisJCWlmICh0ICYgKDEgPDwgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUKSkKKwkJCXdyaXRlX2ZpZm8gKGVwLCAmcmVxLT5yZXEpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBuZXQyMjgwX2VwICoKK2dldF9lcF9ieV9hZGRyIChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCB1MTYgd0luZGV4KQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKworCWlmICgod0luZGV4ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKSA9PSAwKQorCQlyZXR1cm4gJmRldi0+ZXAgWzBdOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZGV2LT5nYWRnZXQuZXBfbGlzdCwgZXAuZXBfbGlzdCkgeworCQl1OAliRW5kcG9pbnRBZGRyZXNzOworCisJCWlmICghZXAtPmRlc2MpCisJCQljb250aW51ZTsKKwkJYkVuZHBvaW50QWRkcmVzcyA9IGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzOworCQlpZiAoKHdJbmRleCBeIGJFbmRwb2ludEFkZHJlc3MpICYgVVNCX0RJUl9JTikKKwkJCWNvbnRpbnVlOworCQlpZiAoKHdJbmRleCAmIDB4MGYpID09IChiRW5kcG9pbnRBZGRyZXNzICYgMHgwZikpCisJCQlyZXR1cm4gZXA7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RhdDBfaXJxcyAoc3RydWN0IG5ldDIyODAgKmRldiwgdTMyIHN0YXQpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXUzMgkJCW51bSwgc2NyYXRjaDsKKworCS8qIG1vc3Qgb2YgdGhlc2UgZG9uJ3QgbmVlZCBpbmRpdmlkdWFsIGFja3MgKi8KKwlzdGF0ICY9IH4oMSA8PCBJTlRBX0FTU0VSVEVEKTsKKwlpZiAoIXN0YXQpCisJCXJldHVybjsKKwkvLyBERUJVRyAoZGV2LCAiaXJxc3RhdDAgJTA0eFxuIiwgc3RhdCk7CisKKwkvKiBzdGFydGluZyBhIGNvbnRyb2wgcmVxdWVzdD8gKi8KKwlpZiAodW5saWtlbHkgKHN0YXQgJiAoMSA8PCBTRVRVUF9QQUNLRVRfSU5URVJSVVBUKSkpIHsKKwkJdW5pb24geworCQkJdTMyCQkJcmF3IFsyXTsKKwkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJcjsKKwkJfSB1OworCQlpbnQJCQkJdG1wID0gMDsKKwkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkJKnJlcTsKKworCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJCWlmIChyZWFkbCAoJmRldi0+dXNiLT51c2JzdGF0KSAmICgxIDw8IEhJR0hfU1BFRUQpKQorCQkJCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CisJCQllbHNlCisJCQkJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwkJCW5ldDIyODBfbGVkX3NwZWVkIChkZXYsIGRldi0+Z2FkZ2V0LnNwZWVkKTsKKwkJCURFQlVHIChkZXYsICIlcyBzcGVlZFxuIiwKKwkJCQkoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQkJCT8gImhpZ2giIDogImZ1bGwiKTsKKwkJfQorCisJCWVwID0gJmRldi0+ZXAgWzBdOworCQllcC0+aXJxcysrOworCisJCS8qIG1ha2Ugc3VyZSBhbnkgbGVmdG92ZXIgcmVxdWVzdCBzdGF0ZSBpcyBjbGVhcmVkICovCisJCXN0YXQgJj0gfigxIDw8IEVORFBPSU5UXzBfSU5URVJSVVBUKTsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKwkJCWRvbmUgKGVwLCByZXEsIChyZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKQorCQkJCQkJPyAwIDogLUVQUk9UTyk7CisJCX0KKwkJZXAtPnN0b3BwZWQgPSAwOworCQlkZXYtPnByb3RvY29sX3N0YWxsID0gMDsKKwkJd3JpdGVsICggICgxIDw8IFRJTUVPVVQpCisJCQl8ICgxIDw8IFVTQl9TVEFMTF9TRU5UKQorCQkJfCAoMSA8PCBVU0JfSU5fTkFLX1NFTlQpCisJCQl8ICgxIDw8IFVTQl9JTl9BQ0tfUkNWRCkKKwkJCXwgKDEgPDwgVVNCX09VVF9QSU5HX05BS19TRU5UKQorCQkJfCAoMSA8PCBVU0JfT1VUX0FDS19TRU5UKQorCQkJfCAoMSA8PCBGSUZPX09WRVJGTE9XKQorCQkJfCAoMSA8PCBGSUZPX1VOREVSRkxPVykKKwkJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKQorCQkJfCAoMSA8PCBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCkKKwkJCSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwkJdS5yYXcgWzBdID0gcmVhZGwgKCZkZXYtPnVzYi0+c2V0dXAwMTIzKTsKKwkJdS5yYXcgWzFdID0gcmVhZGwgKCZkZXYtPnVzYi0+c2V0dXA0NTY3KTsKKwkJCisJCWNwdV90b19sZTMycyAoJnUucmF3IFswXSk7CisJCWNwdV90b19sZTMycyAoJnUucmF3IFsxXSk7CisKKwkJbGUxNl90b19jcHVzICgmdS5yLndWYWx1ZSk7CisJCWxlMTZfdG9fY3B1cyAoJnUuci53SW5kZXgpOworCQlsZTE2X3RvX2NwdXMgKCZ1LnIud0xlbmd0aCk7CisKKwkJLyogYWNrIHRoZSBpcnEgKi8KKwkJd3JpdGVsICgxIDw8IFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQsICZkZXYtPnJlZ3MtPmlycXN0YXQwKTsKKwkJc3RhdCBePSAoMSA8PCBTRVRVUF9QQUNLRVRfSU5URVJSVVBUKTsKKworCQkvKiB3YXRjaCBjb250cm9sIHRyYWZmaWMgYXQgdGhlIHRva2VuIGxldmVsLCBhbmQgZm9yY2UKKwkJICogc3luY2hyb25pemF0aW9uIGJlZm9yZSBsZXR0aW5nIHRoZSBzdGF0dXMgc3RhZ2UgaGFwcGVuLgorCQkgKiBGSVhNRSBpZ25vcmUgdG9rZW5zIHdlJ2xsIE5BSywgdW50aWwgZHJpdmVyIHJlc3BvbmRzLgorCQkgKiB0aGF0J2xsIG1lYW4gYSBsb3QgbGVzcyBpcnFzIGZvciBzb21lIGRyaXZlcnMuCisJCSAqLworCQllcC0+aXNfaW4gPSAodS5yLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pICE9IDA7CisJCWlmIChlcC0+aXNfaW4pIHsKKwkJCXNjcmF0Y2ggPSAoMSA8PCBEQVRBX1BBQ0tFVF9UUkFOU01JVFRFRF9JTlRFUlJVUFQpCisJCQkJfCAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkKKwkJCQl8ICgxIDw8IERBVEFfSU5fVE9LRU5fSU5URVJSVVBUKTsKKwkJCXN0b3Bfb3V0X25ha2luZyAoZXApOworCQl9IGVsc2UKKwkJCXNjcmF0Y2ggPSAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQpCisJCQkJfCAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkKKwkJCQl8ICgxIDw8IERBVEFfSU5fVE9LRU5fSU5URVJSVVBUKTsKKwkJd3JpdGVsIChzY3JhdGNoLCAmZGV2LT5lcHJlZ3MgWzBdLmVwX2lycWVuYik7CisKKwkJLyogd2UgbWFkZSB0aGUgaGFyZHdhcmUgaGFuZGxlIG1vc3QgbG93bGV2ZWwgcmVxdWVzdHM7CisJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBnb2VzIHVwbGV2ZWwgdG8gdGhlIGdhZGdldCBjb2RlLgorCQkgKi8KKwkJc3dpdGNoICh1LnIuYlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6IHsKKwkJCXN0cnVjdCBuZXQyMjgwX2VwCSplOworCQkJdTE2CQkJc3RhdHVzOworCisJCQkvKiBodyBoYW5kbGVzIGRldmljZSBhbmQgaW50ZXJmYWNlIHN0YXR1cyAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1JFQ0lQX0VORFBPSU5UKSkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgdS5yLndJbmRleCkpID09IDAKKwkJCQkJfHwgdS5yLndMZW5ndGggPiAyKQorCQkJCWdvdG8gZG9fc3RhbGw7CisKKwkJCWlmIChyZWFkbCAoJmUtPnJlZ3MtPmVwX3JzcCkKKwkJCQkJJiAoMSA8PCBTRVRfRU5EUE9JTlRfSEFMVCkpCisJCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMSk7CisJCQllbHNlCisJCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMCk7CisKKwkJCS8qIGRvbid0IGJvdGhlciB3aXRoIGEgcmVxdWVzdCBvYmplY3QhICovCisJCQl3cml0ZWwgKDAsICZkZXYtPmVwcmVncyBbMF0uZXBfaXJxZW5iKTsKKwkJCXNldF9maWZvX2J5dGVjb3VudCAoZXAsIHUuci53TGVuZ3RoKTsKKwkJCXdyaXRlbCAoc3RhdHVzLCAmZGV2LT5lcHJlZ3MgWzBdLmVwX2RhdGEpOworCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQlWREVCVUcgKGRldiwgIiVzIHN0YXQgJTAyeFxuIiwgZXAtPmVwLm5hbWUsIHN0YXR1cyk7CisJCQlnb3RvIG5leHRfZW5kcG9pbnRzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOiB7CisJCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZTsKKworCQkJLyogaHcgaGFuZGxlcyBkZXZpY2UgZmVhdHVyZXMgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9FTkRQT0lOVCkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJaWYgKHUuci53VmFsdWUgIT0gVVNCX0VORFBPSU5UX0hBTFQKKwkJCQkJfHwgdS5yLndMZW5ndGggIT0gMCkKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgdS5yLndJbmRleCkpID09IDApCisJCQkJZ290byBkb19zdGFsbDsKKwkJCWNsZWFyX2hhbHQgKGUpOworCQkJYWxsb3dfc3RhdHVzIChlcCk7CisJCQlWREVCVUcgKGRldiwgIiVzIGNsZWFyIGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKKwkJCWdvdG8gbmV4dF9lbmRwb2ludHM7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOiB7CisJCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZTsKKworCQkJLyogaHcgaGFuZGxlcyBkZXZpY2UgZmVhdHVyZXMgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9FTkRQT0lOVCkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJaWYgKHUuci53VmFsdWUgIT0gVVNCX0VORFBPSU5UX0hBTFQKKwkJCQkJfHwgdS5yLndMZW5ndGggIT0gMCkKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgdS5yLndJbmRleCkpID09IDApCisJCQkJZ290byBkb19zdGFsbDsKKwkJCXNldF9oYWx0IChlKTsKKwkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJVkRFQlVHIChkZXYsICIlcyBzZXQgaGFsdFxuIiwgZXAtPmVwLm5hbWUpOworCQkJZ290byBuZXh0X2VuZHBvaW50czsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorZGVsZWdhdGU6CisJCQlWREVCVUcgKGRldiwgInNldHVwICUwMnguJTAyeCB2JTA0eCBpJTA0eCAiCisJCQkJImVwX2NmZyAlMDh4XG4iLAorCQkJCXUuci5iUmVxdWVzdFR5cGUsIHUuci5iUmVxdWVzdCwKKwkJCQl1LnIud1ZhbHVlLCB1LnIud0luZGV4LAorCQkJCXJlYWRsICgmZXAtPnJlZ3MtPmVwX2NmZykpOworCQkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQkJdG1wID0gZGV2LT5kcml2ZXItPnNldHVwICgmZGV2LT5nYWRnZXQsICZ1LnIpOworCQkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJfQorCisJCS8qIHN0YWxsIGVwMCBvbiBlcnJvciAqLworCQlpZiAodG1wIDwgMCkgeworZG9fc3RhbGw6CisJCQlWREVCVUcgKGRldiwgInJlcSAlMDJ4LiUwMnggcHJvdG9jb2wgU1RBTEw7IHN0YXQgJWRcbiIsCisJCQkJCXUuci5iUmVxdWVzdFR5cGUsIHUuci5iUmVxdWVzdCwgdG1wKTsKKwkJCWRldi0+cHJvdG9jb2xfc3RhbGwgPSAxOworCQl9CisKKwkJLyogc29tZSBpbi9vdXQgdG9rZW4gaXJxIHNob3VsZCBmb2xsb3c7IG1heWJlIHN0YWxsIHRoZW4uCisJCSAqIGRyaXZlciBtdXN0IHF1ZXVlIGEgcmVxdWVzdCAoZXZlbiB6bHApIG9yIGhhbHQgZXAwCisJCSAqIGJlZm9yZSB0aGUgaG9zdCB0aW1lcyBvdXQuCisJCSAqLworCX0KKworbmV4dF9lbmRwb2ludHM6CisJLyogZW5kcG9pbnQgZGF0YSBpcnEgPyAqLworCXNjcmF0Y2ggPSBzdGF0ICYgMHg3ZjsKKwlzdGF0ICY9IH4weDdmOworCWZvciAobnVtID0gMDsgc2NyYXRjaDsgbnVtKyspIHsKKwkJdTMyCQl0OworCisJCS8qIGRvIHRoaXMgZW5kcG9pbnQncyBGSUZPIGFuZCBxdWV1ZSBuZWVkIHRlbmRpbmc/ICovCisJCXQgPSAxIDw8IG51bTsKKwkJaWYgKChzY3JhdGNoICYgdCkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlzY3JhdGNoIF49IHQ7CisKKwkJZXAgPSAmZGV2LT5lcCBbbnVtXTsKKwkJaGFuZGxlX2VwX3NtYWxsIChlcCk7CisJfQorCisJaWYgKHN0YXQpCisJCURFQlVHIChkZXYsICJ1bmhhbmRsZWQgaXJxc3RhdDAgJTA4eFxuIiwgc3RhdCk7Cit9CisKKyNkZWZpbmUgRE1BX0lOVEVSUlVQVFMgKCBcCisJCSAgKDEgPDwgRE1BX0RfSU5URVJSVVBUKSBcCisJCXwgKDEgPDwgRE1BX0NfSU5URVJSVVBUKSBcCisJCXwgKDEgPDwgRE1BX0JfSU5URVJSVVBUKSBcCisJCXwgKDEgPDwgRE1BX0FfSU5URVJSVVBUKSkKKyNkZWZpbmUJUENJX0VSUk9SX0lOVEVSUlVQVFMgKCBcCisJCSAgKDEgPDwgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQpIFwKKwkJfCAoMSA8PCBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCkgXAorCQl8ICgxIDw8IFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFQpKQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RhdDFfaXJxcyAoc3RydWN0IG5ldDIyODAgKmRldiwgdTMyIHN0YXQpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXUzMgkJCXRtcCwgbnVtLCBtYXNrLCBzY3JhdGNoOworCisJLyogYWZ0ZXIgZGlzY29ubmVjdCB0aGVyZSdzIG5vdGhpbmcgZWxzZSB0byBkbyEgKi8KKwl0bXAgPSAoMSA8PCBWQlVTX0lOVEVSUlVQVCkgfCAoMSA8PCBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUKTsKKwltYXNrID0gKDEgPDwgSElHSF9TUEVFRCkgfCAoMSA8PCBGVUxMX1NQRUVEKTsKKworCS8qIFZCVVMgZGlzY29ubmVjdCBpcyBpbmRpY2F0ZWQgYnkgVkJVU19QSU4gYW5kIFZCVVNfSU5URVJSVVBUIHNldC4KKwkgKiBSb290IFBvcnQgUmVzZXQgaXMgaW5kaWNhdGVkIGJ5IFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJSVVBUIHNldCBhbmQKKwkgKiBib3RoIEhJR0hfU1BFRUQgYW5kIEZVTExfU1BFRUQgY2xlYXIgKGFzIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQgCisJICogb25seSBpbmRpY2F0ZXMgYSBjaGFuZ2UgaW4gdGhlIHJlc2V0IHN0YXRlKS4KKwkgKi8KKwlpZiAoc3RhdCAmIHRtcCkgeworCQl3cml0ZWwgKHRtcCwgJmRldi0+cmVncy0+aXJxc3RhdDEpOworCQlpZiAoKCgoc3RhdCAmICgxIDw8IFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQpKSAmJiAKKwkJCQkoKHJlYWRsICgmZGV2LT51c2ItPnVzYnN0YXQpICYgbWFzaykgPT0gMCkpCisJCQkJfHwgKChyZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpICYgKDEgPDwgVkJVU19QSU4pKSA9PSAwKSAKKwkJCSAgICApICYmICggZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pKSB7CisJCQlERUJVRyAoZGV2LCAiZGlzY29ubmVjdCAlc1xuIiwKKwkJCQkJZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJCXN0b3BfYWN0aXZpdHkgKGRldiwgZGV2LT5kcml2ZXIpOworCQkJZXAwX3N0YXJ0IChkZXYpOworCQkJcmV0dXJuOworCQl9CisJCXN0YXQgJj0gfnRtcDsKKworCQkvKiB2QlVTIGNhbiBib3VuY2UgLi4uIG9uZSBvZiBtYW55IHJlYXNvbnMgdG8gaWdub3JlIHRoZQorCQkgKiBub3Rpb24gb2YgaG90cGx1ZyBldmVudHMgb24gYnVzIGNvbm5lY3QvZGlzY29ubmVjdCEKKwkJICovCisJCWlmICghc3RhdCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBOT1RFOiBjaGlwIHN0YXlzIGluIFBDSSBEMCBzdGF0ZSBmb3Igbm93LCBidXQgaXQgY291bGQKKwkgKiBlbnRlciBEMSB0byBzYXZlIG1vcmUgcG93ZXIKKwkgKi8KKwl0bXAgPSAoMSA8PCBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVCk7CisJaWYgKHN0YXQgJiB0bXApIHsKKwkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPmlycXN0YXQxKTsKKwkJaWYgKHN0YXQgJiAoMSA8PCBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUKSkgeworCQkJaWYgKGRldi0+ZHJpdmVyLT5zdXNwZW5kKQorCQkJCWRldi0+ZHJpdmVyLT5zdXNwZW5kICgmZGV2LT5nYWRnZXQpOworCQkJaWYgKCFlbmFibGVfc3VzcGVuZCkKKwkJCQlzdGF0ICY9IH4oMSA8PCBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZXYtPmRyaXZlci0+cmVzdW1lKQorCQkJCWRldi0+ZHJpdmVyLT5yZXN1bWUgKCZkZXYtPmdhZGdldCk7CisJCQkvKiBhdCBoaWdoIHNwZWVkLCBub3RlIGVycmF0dW0gMDEzMyAqLworCQl9CisJCXN0YXQgJj0gfnRtcDsKKwl9CisKKwkvKiBjbGVhciBhbnkgb3RoZXIgc3RhdHVzL2lycXMgKi8KKwlpZiAoc3RhdCkKKwkJd3JpdGVsIChzdGF0LCAmZGV2LT5yZWdzLT5pcnFzdGF0MSk7CisKKwkvKiBzb21lIHN0YXR1cyB3ZSBjYW4ganVzdCBpZ25vcmUgKi8KKwlzdGF0ICY9IH4oKDEgPDwgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBSRVNVTUVfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBTT0ZfSU5URVJSVVBUKSk7CisJaWYgKCFzdGF0KQorCQlyZXR1cm47CisJLy8gREVCVUcgKGRldiwgImlycXN0YXQxICUwOHhcbiIsIHN0YXQpOworCisJLyogRE1BIHN0YXR1cywgZm9yIGVwLXthLGIsYyxkfSAqLworCXNjcmF0Y2ggPSBzdGF0ICYgRE1BX0lOVEVSUlVQVFM7CisJc3RhdCAmPSB+RE1BX0lOVEVSUlVQVFM7CisJc2NyYXRjaCA+Pj0gOTsKKwlmb3IgKG51bSA9IDA7IHNjcmF0Y2g7IG51bSsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzCV9faW9tZW0gKmRtYTsKKworCQl0bXAgPSAxIDw8IG51bTsKKwkJaWYgKCh0bXAgJiBzY3JhdGNoKSA9PSAwKQorCQkJY29udGludWU7CisJCXNjcmF0Y2ggXj0gdG1wOworCisJCWVwID0gJmRldi0+ZXAgW251bSArIDFdOworCQlkbWEgPSBlcC0+ZG1hOworCisJCWlmICghZG1hKQorCQkJY29udGludWU7CisKKwkJLyogY2xlYXIgZXAncyBkbWEgc3RhdHVzICovCisJCXRtcCA9IHJlYWRsICgmZG1hLT5kbWFzdGF0KTsKKwkJd3JpdGVsICh0bXAsICZkbWEtPmRtYXN0YXQpOworCisJCS8qIGNoYWluaW5nIHNob3VsZCBzdG9wIG9uIGFib3J0LCBzaG9ydCBPVVQgZnJvbSBmaWZvLAorCQkgKiBvciAoc3RhdDAgY29kZXBhdGgpIHNob3J0IE9VVCB0cmFuc2Zlci4KKwkJICovCisJCWlmICghdXNlX2RtYV9jaGFpbmluZykgeworCQkJaWYgKCh0bXAgJiAoMSA8PCBETUFfVFJBTlNBQ1RJT05fRE9ORV9JTlRFUlJVUFQpKQorCQkJCQk9PSAwKSB7CisJCQkJREVCVUcgKGVwLT5kZXYsICIlcyBubyB4YWN0IGRvbmU/ICUwOHhcbiIsCisJCQkJCWVwLT5lcC5uYW1lLCB0bXApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RvcF9kbWEgKGVwLT5kbWEpOworCQl9CisKKwkJLyogT1VUIHRyYW5zZmVycyB0ZXJtaW5hdGUgd2hlbiB0aGUgZGF0YSBmcm9tIHRoZQorCQkgKiBob3N0IGlzIGluIG91ciBtZW1vcnkuICBQcm9jZXNzIHdoYXRldmVyJ3MgZG9uZS4KKwkJICogT24gdGhpcyBwYXRoLCB3ZSBrbm93IHRyYW5zZmVyJ3MgbGFzdCBwYWNrZXQgd2Fzbid0CisJCSAqIGxlc3MgdGhhbiByZXEtPmxlbmd0aC4gTkFLX09VVF9QQUNLRVRTIG1heSBiZSBzZXQsCisJCSAqIG9yIHRoZSBGSUZPIG1heSBhbHJlYWR5IGJlIGhvbGRpbmcgbmV3IHBhY2tldHMuCisJCSAqCisJCSAqIElOIHRyYW5zZmVycyBjYW4gbGluZ2VyIGluIHRoZSBGSUZPIGZvciBhIHZlcnkKKwkJICogbG9uZyB0aW1lIC4uLiB3ZSBpZ25vcmUgdGhhdCBmb3Igbm93LCBhY2NvdW50aW5nCisJCSAqIHByZWNpc2VseSAobGlrZSBQSU8gZG9lcykgbmVlZHMgcGVyLXBhY2tldCBpcnFzCisJCSAqLworCQlzY2FuX2RtYV9jb21wbGV0aW9ucyAoZXApOworCisJCS8qIGRpc2FibGUgZG1hIG9uIGluYWN0aXZlIHF1ZXVlczsgZWxzZSBtYXliZSByZXN0YXJ0ICovCisJCWlmIChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQkJaWYgKHVzZV9kbWFfY2hhaW5pbmcpCisJCQkJc3RvcF9kbWEgKGVwLT5kbWEpOworCQl9IGVsc2UgeworCQkJdG1wID0gcmVhZGwgKCZkbWEtPmRtYWN0bCk7CisJCQlpZiAoIXVzZV9kbWFfY2hhaW5pbmcKKwkJCQkJfHwgKHRtcCAmICgxIDw8IERNQV9FTkFCTEUpKSA9PSAwKQorCQkJCXJlc3RhcnRfZG1hIChlcCk7CisJCQllbHNlIGlmIChlcC0+aXNfaW4gJiYgdXNlX2RtYV9jaGFpbmluZykgeworCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKwkJCQl1MzIJCQlkbWFjb3VudDsKKworCQkJCS8qIHRoZSBkZXNjcmlwdG9yIGF0IHRoZSBoZWFkIG9mIHRoZSBjaGFpbgorCQkJCSAqIG1heSBzdGlsbCBoYXZlIFZBTElEX0JJVCBjbGVhcjsgdGhhdCdzCisJCQkJICogdXNlZCB0byB0cmlnZ2VyIGNoYW5naW5nIERNQV9GSUZPX1ZBTElEQVRFCisJCQkJICogKGFmZmVjdHMgYXV0b21hZ2ljIHpscCB3cml0ZXMpLgorCQkJCSAqLworCQkJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCQkJCWRtYWNvdW50ID0gcmVxLT50ZC0+ZG1hY291bnQ7CisJCQkJZG1hY291bnQgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCQkJCQkoMSA8PCBWQUxJRF9CSVQpCisJCQkJCQl8IERNQV9CWVRFX0NPVU5UX01BU0spOworCQkJCWlmIChkbWFjb3VudCAmJiAoZG1hY291bnQgJiB2YWxpZF9iaXQpID09IDApCisJCQkJCXJlc3RhcnRfZG1hIChlcCk7CisJCQl9CisJCX0KKwkJZXAtPmlycXMrKzsKKwl9CisKKwkvKiBOT1RFOiAgdGhlcmUgYXJlIG90aGVyIFBDSSBlcnJvcnMgd2UgbWlnaHQgdXNlZnVsbHkgbm90aWNlLgorCSAqIGlmIHRoZXkgYXBwZWFyIHZlcnkgb2Z0ZW4sIGhlcmUncyB3aGVyZSB0byB0cnkgcmVjb3ZlcmluZy4KKwkgKi8KKwlpZiAoc3RhdCAmIFBDSV9FUlJPUl9JTlRFUlJVUFRTKSB7CisJCUVSUk9SIChkZXYsICJwY2kgZG1hIGVycm9yOyBzdGF0ICUwOHhcbiIsIHN0YXQpOworCQlzdGF0ICY9IH5QQ0lfRVJST1JfSU5URVJSVVBUUzsKKwkJLyogdGhlc2UgYXJlIGZhdGFsIGVycm9ycywgYnV0ICJtYXliZSIgdGhleSB3b24ndAorCQkgKiBoYXBwZW4gYWdhaW4gLi4uCisJCSAqLworCQlzdG9wX2FjdGl2aXR5IChkZXYsIGRldi0+ZHJpdmVyKTsKKwkJZXAwX3N0YXJ0IChkZXYpOworCQlzdGF0ID0gMDsKKwl9CisKKwlpZiAoc3RhdCkKKwkJREVCVUcgKGRldiwgInVuaGFuZGxlZCBpcnFzdGF0MSAlMDh4XG4iLCBzdGF0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IG5ldDIyODBfaXJxIChpbnQgaXJxLCB2b2lkICpfZGV2LCBzdHJ1Y3QgcHRfcmVncyAqIHIpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXYgPSBfZGV2OworCisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKworCS8qIGhhbmRsZSBkaXNjb25uZWN0LCBkbWEsIGFuZCBtb3JlICovCisJaGFuZGxlX3N0YXQxX2lycXMgKGRldiwgcmVhZGwgKCZkZXYtPnJlZ3MtPmlycXN0YXQxKSk7CisKKwkvKiBjb250cm9sIHJlcXVlc3RzIGFuZCBQSU8gKi8KKwloYW5kbGVfc3RhdDBfaXJxcyAoZGV2LCByZWFkbCAoJmRldi0+cmVncy0+aXJxc3RhdDApKTsKKworCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZ2FkZ2V0X3JlbGVhc2UgKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IG5ldDIyODAJKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSAoX2Rldik7CisKKwlrZnJlZSAoZGV2KTsKK30KKworLyogdGVhciBkb3duIHRoZSBiaW5kaW5nIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kIHRoZSBwY2kgZGV2aWNlICovCisKK3N0YXRpYyB2b2lkIG5ldDIyODBfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CisKKwkvKiBzdGFydCB3aXRoIHRoZSBkcml2ZXIgYWJvdmUgdXMgKi8KKwlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJLyogc2hvdWxkIGhhdmUgYmVlbiBkb25lIGFscmVhZHkgYnkgZHJpdmVyIG1vZGVsIGNvcmUgKi8KKwkJV0FSTiAoZGV2LCAicGNpIHJlbW92ZSwgZHJpdmVyICclcycgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuIiwKKwkJCQlkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChkZXYtPmRyaXZlcik7CisJfQorCisJLyogdGhlbiBjbGVhbiB1cCB0aGUgcmVzb3VyY2VzIHdlIGFsbG9jYXRlZCBkdXJpbmcgcHJvYmUoKSAqLworCW5ldDIyODBfbGVkX3NodXRkb3duIChkZXYpOworCWlmIChkZXYtPnJlcXVlc3RzKSB7CisJCWludAkJaTsKKwkJZm9yIChpID0gMTsgaSA8IDU7IGkrKykgeworCQkJaWYgKCFkZXYtPmVwIFtpXS5kdW1teSkKKwkJCQljb250aW51ZTsKKwkJCXBjaV9wb29sX2ZyZWUgKGRldi0+cmVxdWVzdHMsIGRldi0+ZXAgW2ldLmR1bW15LAorCQkJCQlkZXYtPmVwIFtpXS50ZF9kbWEpOworCQl9CisJCXBjaV9wb29sX2Rlc3Ryb3kgKGRldi0+cmVxdWVzdHMpOworCX0KKwlpZiAoZGV2LT5nb3RfaXJxKQorCQlmcmVlX2lycSAocGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPnJlZ3MpCisJCWlvdW5tYXAgKGRldi0+cmVncyk7CisJaWYgKGRldi0+cmVnaW9uKQorCQlyZWxlYXNlX21lbV9yZWdpb24gKHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMCksCisJCQkJcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCkpOworCWlmIChkZXYtPmVuYWJsZWQpCisJCXBjaV9kaXNhYmxlX2RldmljZSAocGRldik7CisJZGV2aWNlX3VucmVnaXN0ZXIgKCZkZXYtPmdhZGdldC5kZXYpOworCWRldmljZV9yZW1vdmVfZmlsZSAoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ2lzdGVycyk7CisJcGNpX3NldF9kcnZkYXRhIChwZGV2LCBOVUxMKTsKKworCUlORk8gKGRldiwgInVuYmluZFxuIik7CisKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7Cit9CisKKy8qIHdyYXAgdGhpcyBkcml2ZXIgYXJvdW5kIHRoZSBzcGVjaWZpZWQgZGV2aWNlLCBidXQKKyAqIGRvbid0IHJlc3BvbmQgb3ZlciBVU0IgdW50aWwgYSBnYWRnZXQgZHJpdmVyIGJpbmRzIHRvIHVzLgorICovCisKK3N0YXRpYyBpbnQgbmV0MjI4MF9wcm9iZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQlyZXNvdXJjZSwgbGVuOworCXZvaWQJCQlfX2lvbWVtICpiYXNlID0gTlVMTDsKKwlpbnQJCQlyZXR2YWwsIGk7CisJY2hhcgkJCWJ1ZiBbOF0sICpidWZwOworCisJLyogaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGNvbnRyb2xsZXIgaW4gYSBzeXN0ZW0sCisJICogdXNiX2dhZGdldF9kcml2ZXJfe3JlZ2lzdGVyLHVucmVnaXN0ZXJ9KCkgbXVzdCBjaGFuZ2UuCisJICovCisJaWYgKHRoZV9jb250cm9sbGVyKSB7CisJCWRldl93YXJuICgmcGRldi0+ZGV2LCAiaWdub3JpbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIGFsbG9jLCBhbmQgc3RhcnQgaW5pdCAqLworCWRldiA9IGttYWxsb2MgKHNpemVvZiAqZGV2LCBTTEFCX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKXsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOworCWRldi0+cGRldiA9IHBkZXY7CisJZGV2LT5nYWRnZXQub3BzID0gJm5ldDIyODBfb3BzOworCWRldi0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CisKKwkvKiB0aGUgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCisJc3RyY3B5IChkZXYtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gcGRldi0+ZGV2LmRtYV9tYXNrOworCWRldi0+Z2FkZ2V0LmRldi5yZWxlYXNlID0gZ2FkZ2V0X3JlbGVhc2U7CisJZGV2LT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOworCisJLyogbm93IGFsbCB0aGUgcGNpIGdvb2RpZXMgLi4uICovCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlIChwZGV2KSA8IDApIHsKKyAgIAkgICAgICAgIHJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5lbmFibGVkID0gMTsKKworCS8qIEJBUiAwIGhvbGRzIGFsbCB0aGUgcmVnaXN0ZXJzCisJICogQkFSIDEgaXMgODA1MSBtZW1vcnk7IHVudXNlZCBoZXJlIChub3RlIGVycmF0dW0gMDEwMykKKwkgKiBCQVIgMiBpcyBmaWZvIG1lbW9yeTsgdW51c2VkIGhlcmUKKwkgKi8KKwlyZXNvdXJjZSA9IHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMCk7CisJbGVuID0gcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKHJlc291cmNlLCBsZW4sIGRyaXZlcl9uYW1lKSkgeworCQlERUJVRyAoZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPnJlZ2lvbiA9IDE7CisKKwliYXNlID0gaW9yZW1hcF9ub2NhY2hlIChyZXNvdXJjZSwgbGVuKTsKKwlpZiAoYmFzZSA9PSBOVUxMKSB7CisJCURFQlVHIChkZXYsICJjYW4ndCBtYXAgbWVtb3J5XG4iKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPnJlZ3MgPSAoc3RydWN0IG5ldDIyODBfcmVncyBfX2lvbWVtICopIGJhc2U7CisJZGV2LT51c2IgPSAoc3RydWN0IG5ldDIyODBfdXNiX3JlZ3MgX19pb21lbSAqKSAoYmFzZSArIDB4MDA4MCk7CisJZGV2LT5wY2kgPSAoc3RydWN0IG5ldDIyODBfcGNpX3JlZ3MgX19pb21lbSAqKSAoYmFzZSArIDB4MDEwMCk7CisJZGV2LT5kbWEgPSAoc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgX19pb21lbSAqKSAoYmFzZSArIDB4MDE4MCk7CisJZGV2LT5kZXAgPSAoc3RydWN0IG5ldDIyODBfZGVwX3JlZ3MgX19pb21lbSAqKSAoYmFzZSArIDB4MDIwMCk7CisJZGV2LT5lcHJlZ3MgPSAoc3RydWN0IG5ldDIyODBfZXBfcmVncyBfX2lvbWVtICopIChiYXNlICsgMHgwMzAwKTsKKworCS8qIHB1dCBpbnRvIGluaXRpYWwgY29uZmlnLCBsaW5rIHVwIGFsbCBlbmRwb2ludHMgKi8KKwl3cml0ZWwgKDAsICZkZXYtPnVzYi0+dXNiY3RsKTsKKwl1c2JfcmVzZXQgKGRldik7CisJdXNiX3JlaW5pdCAoZGV2KTsKKworCS8qIGlycSBzZXR1cCBhZnRlciBvbGQgaGFyZHdhcmUgaXMgY2xlYW5lZCB1cCAqLworCWlmICghcGRldi0+aXJxKSB7CisJCUVSUk9SIChkZXYsICJObyBJUlEuICBDaGVjayBQQ0kgc2V0dXAhXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKyNpZm5kZWYgX19zcGFyY19fCisJc2NucHJpbnRmIChidWYsIHNpemVvZiBidWYsICIlZCIsIHBkZXYtPmlycSk7CisJYnVmcCA9IGJ1ZjsKKyNlbHNlCisJYnVmcCA9IF9faXJxX2l0b2EocGRldi0+aXJxKTsKKyNlbmRpZgorCWlmIChyZXF1ZXN0X2lycSAocGRldi0+aXJxLCBuZXQyMjgwX2lycSwgU0FfU0hJUlEsIGRyaXZlcl9uYW1lLCBkZXYpCisJCQkhPSAwKSB7CisJCUVSUk9SIChkZXYsICJyZXF1ZXN0IGludGVycnVwdCAlcyBmYWlsZWRcbiIsIGJ1ZnApOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5nb3RfaXJxID0gMTsKKworCS8qIERNQSBzZXR1cCAqLworCS8qIE5PVEU6ICB3ZSBrbm93IG9ubHkgdGhlIDMyIExTQnMgb2YgZG1hIGFkZHJlc3NlcyBtYXkgYmUgbm9uemVybyAqLworCWRldi0+cmVxdWVzdHMgPSBwY2lfcG9vbF9jcmVhdGUgKCJyZXF1ZXN0cyIsIHBkZXYsCisJCXNpemVvZiAoc3RydWN0IG5ldDIyODBfZG1hKSwKKwkJMCAvKiBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzICovLAorCQkwIC8qIG9yIHBhZ2UtY3Jvc3NpbmcgaXNzdWVzICovKTsKKwlpZiAoIWRldi0+cmVxdWVzdHMpIHsKKwkJREVCVUcgKGRldiwgImNhbid0IGdldCByZXF1ZXN0IHBvb2xcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCWZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKKwkJc3RydWN0IG5ldDIyODBfZG1hCSp0ZDsKKworCQl0ZCA9IHBjaV9wb29sX2FsbG9jIChkZXYtPnJlcXVlc3RzLCBHRlBfS0VSTkVMLAorCQkJCSZkZXYtPmVwIFtpXS50ZF9kbWEpOworCQlpZiAoIXRkKSB7CisJCQlERUJVRyAoZGV2LCAiY2FuJ3QgZ2V0IGR1bW15ICVkXG4iLCBpKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCisJCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CisJCWRldi0+ZXAgW2ldLmR1bW15ID0gdGQ7CisJfQorCisJLyogZW5hYmxlIGxvd2VyLW92ZXJoZWFkIHBjaSBtZW1vcnkgYnVyc3RzIGR1cmluZyBETUEgKi8KKwl3cml0ZWwgKCAoMSA8PCBETUFfTUVNT1JZX1dSSVRFX0FORF9JTlZBTElEQVRFX0VOQUJMRSkKKwkJCS8vIDI1NiB3cml0ZSByZXRyaWVzIG1heSBub3QgYmUgZW5vdWdoLi4uCisJCQkvLyB8ICgxIDw8IFBDSV9SRVRSWV9BQk9SVF9FTkFCTEUpCisJCQl8ICgxIDw8IERNQV9SRUFEX01VTFRJUExFX0VOQUJMRSkKKwkJCXwgKDEgPDwgRE1BX1JFQURfTElORV9FTkFCTEUpCisJCQksICZkZXYtPnBjaS0+cGNpbXN0Y3RsKTsKKwkvKiBlcnJhdHVtIDAxMTUgc2hvdWxkbid0IGFwcGVhcjogTGludXggaW5pdHMgUENJX0xBVEVOQ1lfVElNRVIgKi8KKwlwY2lfc2V0X21hc3RlciAocGRldik7CisJcGNpX3NldF9td2kgKHBkZXYpOworCisJLyogLi4uIGFsc28gZmx1c2hlcyBhbnkgcG9zdGVkIHBjaSB3cml0ZXMgKi8KKwlkZXYtPmNoaXByZXYgPSBnZXRfaWR4X3JlZyAoZGV2LT5yZWdzLCBSRUdfQ0hJUFJFVikgJiAweGZmZmY7CisKKwkvKiBkb25lICovCisJcGNpX3NldF9kcnZkYXRhIChwZGV2LCBkZXYpOworCUlORk8gKGRldiwgIiVzXG4iLCBkcml2ZXJfZGVzYyk7CisJSU5GTyAoZGV2LCAiaXJxICVzLCBwY2kgbWVtICVwLCBjaGlwIHJldiAlMDR4XG4iLAorCQkJYnVmcCwgYmFzZSwgZGV2LT5jaGlwcmV2KTsKKwlJTkZPIChkZXYsICJ2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICI7IGRtYSAlc1xuIiwKKwkJCXVzZV9kbWEKKwkJCQk/ICh1c2VfZG1hX2NoYWluaW5nID8gImNoYWluaW5nIiA6ICJlbmFibGVkIikKKwkJCQk6ICJkaXNhYmxlZCIpOworCXRoZV9jb250cm9sbGVyID0gZGV2OworCisJZGV2aWNlX3JlZ2lzdGVyICgmZGV2LT5nYWRnZXQuZGV2KTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9yZWdpc3RlcnMpOworCisJcmV0dXJuIDA7CisKK2RvbmU6CisJaWYgKGRldikKKwkJbmV0MjI4MF9yZW1vdmUgKHBkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkuY2xhc3MgPSAJKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUpLAorCS5jbGFzc19tYXNrID0gCX4wLAorCS52ZW5kb3IgPQkweDE3Y2MsCisJLmRldmljZSA9CTB4MjI4MCwKKwkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKKworfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcGNpX2lkcyk7CisKKy8qIHBjaSBkcml2ZXIgZ2x1ZTsgdGhpcyBpcyBhICJuZXcgc3R5bGUiIFBDSSBkcml2ZXIgbW9kdWxlICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmV0MjI4MF9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCShjaGFyICopIGRyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9CXBjaV9pZHMsCisKKwkucHJvYmUgPQluZXQyMjgwX3Byb2JlLAorCS5yZW1vdmUgPQluZXQyMjgwX3JlbW92ZSwKKworCS8qIEZJWE1FIGFkZCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgKi8KK307CisKK01PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUiAoIkRhdmlkIEJyb3duZWxsIik7CitNT0RVTEVfTElDRU5TRSAoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKQoreworCWlmICghdXNlX2RtYSkKKwkJdXNlX2RtYV9jaGFpbmluZyA9IDA7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIgKCZuZXQyMjgwX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZuZXQyMjgwX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmNDUwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKQEAgLTAsMCArMSw3MjggQEAKKy8qCisgKiBOZXRDaGlwIDIyODAgaGlnaC9mdWxsIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlci4KKyAqIFVubGlrZSBtYW55IHN1Y2ggY29udHJvbGxlcnMsIHRoaXMgb25lIHRhbGtzIFBDSS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIE5ldENoaXAgVGVjaG5vbG9neSwgSW5jLiAoaHR0cDovL3d3dy5uZXRjaGlwLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBORVQyMjgwIE1FTU9SWSBNQVBQRUQgUkVHSVNURVJTCisgKgorICogVGhlIHJlZ2lzdGVyIGxheW91dCBjYW1lIGZyb20gdGhlIGNoaXAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoZSBiaXQKKyAqIG51bWJlciBkZWZpbml0aW9ucyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNoaXAgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBVc2UgdGhlIHNoaWZ0IG9wZXJhdG9yICgnPDwnKSB0byBidWlsZCBiaXQgbWFza3MsIHdpdGggcmVhZGwvd3JpdGVsCisgKiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyB0aHJvdWdoIFBDSS4KKyAqLworCisvKiBtYWluIHJlZ2lzdGVycywgQkFSMCArIDB4MDAwMCAqLworc3RydWN0IG5ldDIyODBfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDAwMAorCXUzMgkJZGV2aW5pdDsKKyNkZWZpbmUgICAgIExPQ0FMX0NMT0NLX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBGT1JDRV9QQ0lfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgUENJX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFBDSV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBGSUZPX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgQ0ZHX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBDSV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBVU0JfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgTTgwNTFfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVlY3RsOworI2RlZmluZSAgICAgRUVQUk9NX0FERFJFU1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIEVFUFJPTV9QUkVTRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgRUVQUk9NX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBFRVBST01fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIEVFUFJPTV9DSElQX1NFTEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfUkVBRF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBFRVBST01fQllURV9XUklURV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEVFUFJPTV9SRUFEX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBFRVBST01fV1JJVEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZWVjbGtmcmVxOworCXUzMgkJX3VudXNlZDA7CisJLy8gb2Zmc2V0IDB4MDAxMAorCisJdTMyCQlwY2lpcnFlbmIwOwkJLyogaW50ZXJydXB0IFBDSSBtYXN0ZXIgLi4uICovCisjZGVmaW5lICAgICBTRVRVUF9QQUNLRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRU5EUE9JTlRfRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEVORFBPSU5UX0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBFTkRQT0lOVF9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRU5EUE9JTlRfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBFTkRQT0lOVF9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXBjaWlycWVuYjE7CisjZGVmaW5lICAgICBQQ0lfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX0FTU0VSVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWNwdV9pcnFlbmIwOwkJLyogLi4uIG9yIG9uYm9hcmQgODA1MSAqLworI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQljcHVfaXJxZW5iMTsKKyNkZWZpbmUgICAgIENQVV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisJLy8gb2Zmc2V0IDB4MDAyMAorCXUzMgkJX3VudXNlZDE7CisJdTMyCQl1c2JpcnFlbmIxOworI2RlZmluZSAgICAgVVNCX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlpcnFzdGF0MDsKKyNkZWZpbmUgICAgIElOVEFfQVNTRVJURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlpcnFzdGF0MTsKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwkvLyBvZmZzZXQgMHgwMDMwCisJdTMyCQlpZHhhZGRyOworCXUzMgkJaWR4ZGF0YTsKKwl1MzIJCWZpZm9jdGw7CisjZGVmaW5lICAgICBQQ0lfQkFTRTJfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIElHTk9SRV9GSUZPX0FWQUlMQUJJTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQQ0lfQkFTRTJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRklGT19DT05GSUdVUkFUSU9OX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCV91bnVzZWQyOworCS8vIG9mZnNldCAweDAwNDAKKwl1MzIJCW1lbWFkZHI7CisjZGVmaW5lICAgICBTVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgICAgIERJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgRklGT19ESUFHTk9TVElDX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBNRU1PUllfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJbWVtZGF0YTA7CisJdTMyCQltZW1kYXRhMTsKKwl1MzIJCV91bnVzZWQzOworCS8vIG9mZnNldCAweDAwNTAKKwl1MzIJCWdwaW9jdGw7CisjZGVmaW5lICAgICBHUElPM19MRURfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIEdQSU8zX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgR1BJTzJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBHUElPMV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgR1BJTzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIEdQSU8zX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBHUElPMl9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgR1BJTzFfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEdQSU8wX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBHUElPM19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR1BJTzJfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdQSU8xX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHUElPMF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZ3Bpb3N0YXQ7CisjZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgR1BJTzJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEdQSU8xX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBHUElPMF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIHVzYiBjb250cm9sLCBCQVIwICsgMHgwMDgwICovCitzdHJ1Y3QgbmV0MjI4MF91c2JfcmVncyB7CisJLy8gb2Zmc2V0IDB4MDA4MAorCXUzMgkJc3RkcnNwOworI2RlZmluZSAgICAgU1RBTExfVU5TVVBQT1JURURfUkVRVUVTVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBTRVRfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdFVF9PVEhFUl9TUEVFRF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSAgICAgR0VUX0RFVklDRV9RVUFMSUZJRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lICAgICBTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIEVORFBPSU5UX1NFVF9DTEVBUl9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgREVWSUNFX1NFVF9DTEVBUl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEdFVF9TVFJJTkdfREVTQ1JJUFRPUl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgR0VUX1NFVF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEdFVF9TRVRfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBHRVRfQ09ORklHVVJBVElPTl9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgR0VUX0RFVklDRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEdFVF9FTkRQT0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBHRVRfSU5URVJGQUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgR0VUX0RFVklDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXByb2R2ZW5kaWQ7CisjZGVmaW5lICAgICBQUk9EVUNUX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIFZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlyZWxudW07CisJdTMyCQl1c2JjdGw7CisjZGVmaW5lICAgICBTRVJJQUxfTlVNQkVSX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIFBST0RVQ1RfSURfU1RSSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgVkVORE9SX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBVU0JfUk9PVF9QT1JUX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIFZCVVNfUElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgVElNRURfRElTQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIFNVU1BFTkRfSU1NRURJQVRFTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBTRUxGX1BPV0VSRURfVVNCX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUkVNT1RFX1dBS0VVUF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIFBNRV9QT0xBUklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBVU0JfREVURUNUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgUE1FX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERFVklDRV9SRU1PVEVfV0FLRVVQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTRUxGX1BPV0VSRURfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAwOTAKKwl1MzIJCXVzYnN0YXQ7CisjZGVmaW5lICAgICBISUdIX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgRlVMTF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEdFTkVSQVRFX1JFU1VNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBHRU5FUkFURV9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAgICAgICAgICAgICAgICAgICAgICAgNAorCXUzMgkJeGN2cmRpYWc7CisjZGVmaW5lICAgICBGT1JDRV9ISUdIX1NQRUVEX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIEZPUkNFX0ZVTExfU1BFRURfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSAgICAgVVNCX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBMSU5FX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIFRSQU5TQ0VJVkVSX09QRVJBVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBUUkFOU0NFSVZFUl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgVEVSTUlOQVRJT05fU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCXNldHVwMDEyMzsKKwl1MzIJCXNldHVwNDU2NzsKKwkvLyBvZmZzZXQgMHgwMDkwCisJdTMyCQlfdW51c2VkMDsKKwl1MzIJCW91cmFkZHI7CisjZGVmaW5lICAgICBGT1JDRV9JTU1FRElBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgT1VSX1VTQl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCW91cmNvbmZpZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBwY2kgY29udHJvbCwgQkFSMCArIDB4MDEwMCAqLworc3RydWN0IG5ldDIyODBfcGNpX3JlZ3MgeworCS8vIG9mZnNldCAweDAxMDAKKwl1MzIJCSBwY2ltc3RjdGw7CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9QQVJLX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIFBDSV9NVUxUSSBMRVZFTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfTUVNT1JZX1dSSVRFX0FORF9JTlZBTElEQVRFX0VOQUJMRSAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9SRUFEX01VTFRJUExFX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBETUFfUkVBRF9MSU5FX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgUENJX01BU1RFUl9DT01NQU5EX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgICAgICBNRU1fUkVBRF9PUl9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIElPX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICAgICAgQ0ZHX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX1JFQURfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgUENJX01BU1RFUl9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQllURV9XUklURV9FTkFCTEVTICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQkgcGNpbXN0YWRkcjsKKwl1MzIJCSBwY2ltc3RkYXRhOworCXUzMgkJIHBjaW1zdHN0YXQ7CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9DTEVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUENJX0VYVEVSTkFMX0FSQklURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFBDSV9IT1NUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogZG1hIGNvbnRyb2wsIEJBUjAgKyAweDAxODAgLi4uIGFycmF5IG9mIGZvdXIgc3RydWN0cyBsaWtlIHRoaXMsCisgKiBmb3IgY2hhbm5lbHMgMC4uMy4gIHNlZSBhbHNvIHN0cnVjdCBuZXQyMjgwX2RtYTogIGRlc2NyaXB0b3IKKyAqIHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIHNvbWUgb2YgdGhlc2UgcmVnaXN0ZXJzLgorICovCitzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyB7CS8qIFsxMS43XSAqLworCS8vIG9mZnNldCAweDAxODAsIDB4MDFhMCwgMHgwMWMwLCAweDAxZTAsIAorCXUzMgkJZG1hY3RsOworI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBETUFfQ0xFQVJfQ09VTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIERFU0NSSVBUT1JfUE9MTElOR19SQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSAgICAgICAgIFBPTExfQ09OVElOVU9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgICAgICAgUE9MTF8xX1VTRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgICAgICBQT0xMXzEwMF9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgICAgIFBPTExfMV9NU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBETUFfVkFMSURfQklUX1BPTExJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIERNQV9WQUxJRF9CSVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBETUFfT1VUX0FVVE9fU1RBUlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgRE1BX1BSRUVNUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIERNQV9GSUZPX1ZBTElEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBETUFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgRE1BX0FERFJFU1NfSE9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWRtYXN0YXQ7CisjZGVmaW5lICAgICBETUFfU0NBVFRFUl9HQVRIRVJfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIERNQV9UUkFOU0FDVElPTl9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgRE1BX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERNQV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlfdW51c2VkMCBbMl07CisJLy8gb2Zmc2V0IDB4MDE5MCwgMHgwMWIwLCAweDAxZDAsIDB4MDFmMCwgCisJdTMyCQlkbWFjb3VudDsKKyNkZWZpbmUgICAgIFZBTElEX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgRE1BX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lICAgICBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgICAgIEVORF9PRl9DSEFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSAgICAgICAgIERNQV9CWVRFX0NPVU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDE8PDI0KS0xKQorI2RlZmluZSAgICAgRE1BX0JZVEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWRtYWFkZHI7CisJdTMyCQlkbWFkZXNjOworCXUzMgkJX3VudXNlZDE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogZGVkaWNhdGVkIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDIwMCAqLworCitzdHJ1Y3QgbmV0MjI4MF9kZXBfcmVncyB7CS8qIFsxMS44XSAqLworCS8vIG9mZnNldCAweDAyMDAsIDB4MDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MAorCXUzMgkJZGVwX2NmZzsKKwkvLyBvZmZzZXQgMHgwMjA0LCAweDAyMTQsIDB4MjI0LCAweDIzNCwgMHgyNDQKKwl1MzIJCWRlcF9yc3A7CisJdTMyCQlfdW51c2VkIFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBjb25maWd1cmFibGUgZW5kcG9pbnQgcmVnaXN0ZXJzLCBCQVIwICsgMHgwMzAwIC4uLiBhcnJheSBvZiBzZXZlbiBzdHJ1Y3RzCisgKiBsaWtlIHRoaXMsIGZvciBlcDAgdGhlbiB0aGUgY29uZmlndXJhYmxlIGVuZHBvaW50cyBBLi5GCisgKiBlcDAgcmVzZXJ2ZWQgZm9yIGNvbnRyb2w7IEUgYW5kIEYgaGF2ZSBvbmx5IDY0IGJ5dGVzIG9mIGZpZm8KKyAqLworc3RydWN0IG5ldDIyODBfZXBfcmVncyB7CS8qIFsxMS45XSAqLworCS8vIG9mZnNldCAweDAzMDAsIDB4MDMyMCwgMHgwMzQwLCAweDAzNjAsIDB4MDM4MCwgMHgwM2EwLCAweDAzYzAKKwl1MzIJCWVwX2NmZzsKKyNkZWZpbmUgICAgIEVORFBPSU5UX0JZVEVfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBFTkRQT0lOVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgRU5EUE9JTlRfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX05VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllcF9yc3A7CisjZGVmaW5lICAgICBTRVRfTkFLX09VVF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgICAgIFNFVF9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSAgICAgU0VUX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBTRVRfSU5URVJSVVBUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFNFVF9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBTRVRfRU5EUE9JTlRfVE9HR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDTEVBUl9FUF9ISURFX1NUQVRVU19QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgQ0xFQVJfRVBfRk9SQ0VfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIENMRUFSX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIENMRUFSX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZXBfaXJxZW5iOworI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICA1CisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZXBfc3RhdDsKKyNkZWZpbmUgICAgIEZJRk9fVkFMSURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgSElHSF9CQU5EV0lEVEhfT1VUX1RSQU5TQUNUSU9OX1BJRCAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFVTQl9TVEFMTF9TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSAgICAgVVNCX0lOX05BS19TRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICBVU0JfSU5fQUNLX1JDVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIFVTQl9PVVRfUElOR19OQUtfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgVVNCX09VVF9BQ0tfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBGSUZPX09WRVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIEZJRk9fVU5ERVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRklGT19GVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBGSUZPX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEZJRk9fRkxVU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIE5BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCS8vIG9mZnNldCAweDAzMTAsIDB4MDMzMCwgMHgwMzUwLCAweDAzNzAsIDB4MDM5MCwgMHgwM2IwLCAweDAzZDAKKwl1MzIJCWVwX2F2YWlsOworCXUzMgkJZXBfZGF0YTsKKwl1MzIJCV91bnVzZWQwIFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJX19LRVJORUxfXworCisvKiBpbmRleGVkIHJlZ2lzdGVycyBbMTEuMTBdIGFyZSBhY2Nlc3NlZCBpbmRpcmVjdGx5CisgKiBjYWxsZXIgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrLgorICovCisKK3N0YXRpYyBpbmxpbmUgdTMyCitnZXRfaWR4X3JlZyAoc3RydWN0IG5ldDIyODBfcmVncyBfX2lvbWVtICpyZWdzLCB1MzIgaW5kZXgpCit7CisJd3JpdGVsIChpbmRleCwgJnJlZ3MtPmlkeGFkZHIpOworCS8qIE5PVEU6ICBzeW5jaHMgZGV2aWNlL2NwdSBtZW1vcnkgdmlld3MgKi8KKwlyZXR1cm4gcmVhZGwgKCZyZWdzLT5pZHhkYXRhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfaWR4X3JlZyAoc3RydWN0IG5ldDIyODBfcmVncyBfX2lvbWVtICpyZWdzLCB1MzIgaW5kZXgsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwgKGluZGV4LCAmcmVncy0+aWR4YWRkcik7CisJd3JpdGVsICh2YWx1ZSwgJnJlZ3MtPmlkeGRhdGEpOworCS8qIHBvc3RlZCwgbWF5IG5vdCBiZSB2aXNpYmxlIHlldCAqLworfQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisKKyNkZWZpbmUgUkVHX0RJQUcJCTB4MAorI2RlZmluZSAgICAgUkVUUllfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBGT1JDRV9QQ0lfU0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEZPUkNFX1BDSV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRk9SQ0VfVVNCX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEZPUkNFX0NQVV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBJTExFR0FMX0JZVEVfRU5BQkxFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRkFTVF9USU1FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEZPUkNFX1JFQ0VJVkVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBGT1JDRV9UUkFOU01JVF9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRUdfRlJBTUUJCTB4MDIJLyogZnJvbSBsYXN0IHNvZiAqLworI2RlZmluZSBSRUdfQ0hJUFJFVgkJMHgwMwkvKiBpbiBiY2QgKi8KKyNkZWZpbmUJUkVHX0hTX05BS19SQVRFCQkweDBhCS8qIE5BSyBwZXIgTiB1ZnJhbWVzICovCisKKyNkZWZpbmUJQ0hJUFJFVl8xCTB4MDEwMAorI2RlZmluZQlDSElQUkVWXzFBCTB4MDExMAorCisjaWZkZWYJX19LRVJORUxfXworCisvKiBlcCBhLWYgaGlnaHNwZWVkIGFuZCBmdWxsc3BlZWQgbWF4cGFja2V0LCBhZGRyZXNzZXMKKyAqIGNvbXB1dGVkIGZyb20gZXAtPm51bQorICovCisjZGVmaW5lIFJFR19FUF9NQVhQS1QoZGV2LG51bSkgKCgobnVtKSArIDEpICogMHgxMCArIFwKKwkJKCgoZGV2KS0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDAgOiAxKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogWzguM10gZm9yIHNjYXR0ZXIvZ2F0aGVyIGkvbworICogdXNlIHN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIGJpdGZpZWxkcworICovCitzdHJ1Y3QgbmV0MjI4MF9kbWEgeworCV9fbGUzMgkJZG1hY291bnQ7CisJX19sZTMyCQlkbWFhZGRyOwkJLyogdGhlIGJ1ZmZlciAqLworCV9fbGUzMgkJZG1hZGVzYzsJCS8qIG5leHQgZG1hIGRlc2NyaXB0b3IgKi8KKwlfX2xlMzIJCV9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEUklWRVIgREFUQSBTVFJVQ1RVUkVTIGFuZCBVVElMSVRJRVMgKi8KKworc3RydWN0IG5ldDIyODBfZXAgeworCXN0cnVjdCB1c2JfZXAJCQkJZXA7CisJc3RydWN0IG5ldDIyODBfZXBfcmVncwkJCV9faW9tZW0gKnJlZ3M7CisJc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MJCQlfX2lvbWVtICpkbWE7CisJc3RydWN0IG5ldDIyODBfZG1hCQkJKmR1bW15OworCWRtYV9hZGRyX3QJCQkJdGRfZG1hOwkvKiBvZiBkdW1teSAqLworCXN0cnVjdCBuZXQyMjgwCQkJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJCQlpcnFzOworCisJLyogYW5hbG9nb3VzIHRvIGEgaG9zdC1zaWRlIHFoICovCisJc3RydWN0IGxpc3RfaGVhZAkJCXF1ZXVlOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYzsKKwl1bnNpZ25lZAkJCQludW0gOiA4LAorCQkJCQkJZmlmb19zaXplIDogMTIsCisJCQkJCQlpbl9maWZvX3ZhbGlkYXRlIDogMSwKKwkJCQkJCW91dF9vdmVyZmxvdyA6IDEsCisJCQkJCQlzdG9wcGVkIDogMSwKKwkJCQkJCWlzX2luIDogMSwKKwkJCQkJCWlzX2lzbyA6IDE7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgYWxsb3dfc3RhdHVzIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJLyogZXAwIG9ubHkgKi8KKwl3cml0ZWwgKCAgKDEgPDwgQ0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFKQorCQl8ICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUykKKwkJfCAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSkKKwkJLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisJZXAtPnN0b3BwZWQgPSAxOworfQorCisvKiBjb3VudCAoPD0gNCkgYnl0ZXMgaW4gdGhlIG5leHQgZmlmbyB3cml0ZSB3aWxsIGJlIHZhbGlkICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZpZm9fYnl0ZWNvdW50IChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHVuc2lnbmVkIGNvdW50KQoreworCXdyaXRlYiAoY291bnQsIDIgKyAodTggX19pb21lbSAqKSAmZXAtPnJlZ3MtPmVwX2NmZyk7Cit9CisKK3N0cnVjdCBuZXQyMjgwX3JlcXVlc3QgeworCXN0cnVjdCB1c2JfcmVxdWVzdAkJcmVxOworCXN0cnVjdCBuZXQyMjgwX2RtYQkJKnRkOworCWRtYV9hZGRyX3QJCQl0ZF9kbWE7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJdW5zaWduZWQJCQltYXBwZWQgOiAxLAorCQkJCQl2YWxpZCA6IDE7Cit9OworCitzdHJ1Y3QgbmV0MjI4MCB7CisJLyogZWFjaCBwY2kgZGV2aWNlIHByb3ZpZGVzIG9uZSBnYWRnZXQsIHNldmVyYWwgZW5kcG9pbnRzICovCisJc3RydWN0IHVzYl9nYWRnZXQJCWdhZGdldDsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkJZXAgWzddOworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAJKmRyaXZlcjsKKwl1bnNpZ25lZAkJCWVuYWJsZWQgOiAxLAorCQkJCQlwcm90b2NvbF9zdGFsbCA6IDEsCisJCQkJCXNvZnRjb25uZWN0IDogMSwKKwkJCQkJZ290X2lycSA6IDEsCisJCQkJCXJlZ2lvbiA6IDE7CisJdTE2CQkJCWNoaXByZXY7CisKKwkvKiBwY2kgc3RhdGUgdXNlZCB0byBhY2Nlc3MgdGhvc2UgZW5kcG9pbnRzICovCisJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKKwlzdHJ1Y3QgbmV0MjI4MF9yZWdzCQlfX2lvbWVtICpyZWdzOworCXN0cnVjdCBuZXQyMjgwX3VzYl9yZWdzCQlfX2lvbWVtICp1c2I7CisJc3RydWN0IG5ldDIyODBfcGNpX3JlZ3MJCV9faW9tZW0gKnBjaTsKKwlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwkJX19pb21lbSAqZG1hOworCXN0cnVjdCBuZXQyMjgwX2RlcF9yZWdzCQlfX2lvbWVtICpkZXA7CisJc3RydWN0IG5ldDIyODBfZXBfcmVncwkJX19pb21lbSAqZXByZWdzOworCisJc3RydWN0IHBjaV9wb29sCQkJKnJlcXVlc3RzOworCS8vIHN0YXRpc3RpY3MuLi4KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGFsdCAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCS8qIGVwMCBhbmQgYnVsay9pbnRyIGVuZHBvaW50cyAqLworCXdyaXRlbCAoICAoMSA8PCBDTEVBUl9DT05UUk9MX1NUQVRVU19QSEFTRV9IQU5EU0hBS0UpCisJCSAgICAvKiBzZXQgTkFLX09VVCBmb3IgZXJyYXR1bSAwMTE0ICovCisJCXwgKChlcC0+ZGV2LT5jaGlwcmV2ID09IENISVBSRVZfMSkgPDwgU0VUX05BS19PVVRfUEFDS0VUUykKKwkJfCAoMSA8PCBTRVRfRU5EUE9JTlRfSEFMVCkKKwkJLCAmZXAtPnJlZ3MtPmVwX3JzcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9oYWx0IChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJLyogZXAwIGFuZCBidWxrL2ludHIgZW5kcG9pbnRzICovCisJd3JpdGVsICggICgxIDw8IENMRUFSX0VORFBPSU5UX0hBTFQpCisJCXwgKDEgPDwgQ0xFQVJfRU5EUE9JTlRfVE9HR0xFKQorCQkgICAgLyogdW5sZXNzIHRoZSBnYWRnZXQgZHJpdmVyIGxlZnQgYSBzaG9ydCBwYWNrZXQgaW4gdGhlCisJCSAgICAgKiBmaWZvLCB0aGlzIHJldmVyc2VzIHRoZSBlcnJhdHVtIDAxMTQgd29ya2Fyb3VuZC4KKwkJICAgICAqLworCQl8ICgoZXAtPmRldi0+Y2hpcHJldiA9PSBDSElQUkVWXzEpIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUykKKwkJLCAmZXAtPnJlZ3MtPmVwX3JzcCk7Cit9CisKKyNpZmRlZiBVU0VfUkRLX0xFRFMKKworc3RhdGljIGlubGluZSB2b2lkIG5ldDIyODBfbGVkX2luaXQgKHN0cnVjdCBuZXQyMjgwICpkZXYpCit7CisJLyogTEVEMyAoZ3JlZW4pIGlzIG9uIGR1cmluZyBVU0IgYWN0aXZpdHkuIG5vdGUgZXJyYXR1bSAwMTEzLiAqLworCXdyaXRlbCAoKDEgPDwgR1BJTzNfTEVEX1NFTEVDVCkKKwkJfCAoMSA8PCBHUElPM19PVVRQVVRfRU5BQkxFKQorCQl8ICgxIDw8IEdQSU8yX09VVFBVVF9FTkFCTEUpCisJCXwgKDEgPDwgR1BJTzFfT1VUUFVUX0VOQUJMRSkKKwkJfCAoMSA8PCBHUElPMF9PVVRQVVRfRU5BQkxFKQorCQksICZkZXYtPnJlZ3MtPmdwaW9jdGwpOworfQorCisvKiBpbmRpY2F0ZSBzcGVlZCB3aXRoIGJpLWNvbG9yIExFRCAwLzEgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgbmV0MjI4MF9sZWRfc3BlZWQgKHN0cnVjdCBuZXQyMjgwICpkZXYsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCkKK3sKKwl1MzIJdmFsID0gcmVhZGwgKCZkZXYtPnJlZ3MtPmdwaW9jdGwpOworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgkJLyogZ3JlZW4gKi8KKwkJdmFsICY9IH4oMSA8PCBHUElPMF9EQVRBKTsKKwkJdmFsIHw9ICgxIDw8IEdQSU8xX0RBVEEpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgkJLyogcmVkICovCisJCXZhbCAmPSB+KDEgPDwgR1BJTzFfREFUQSk7CisJCXZhbCB8PSAoMSA8PCBHUElPMF9EQVRBKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoJCQkvKiAob2ZmL2JsYWNrKSAqLworCQl2YWwgJj0gfigoMSA8PCBHUElPMV9EQVRBKSB8ICgxIDw8IEdQSU8wX0RBVEEpKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlbCAodmFsLCAmZGV2LT5yZWdzLT5ncGlvY3RsKTsKK30KKworLyogaW5kaWNhdGUgcG93ZXIgd2l0aCBMRUQgMiAqLworc3RhdGljIGlubGluZSB2b2lkIG5ldDIyODBfbGVkX2FjdGl2ZSAoc3RydWN0IG5ldDIyODAgKmRldiwgaW50IGlzX2FjdGl2ZSkKK3sKKwl1MzIJdmFsID0gcmVhZGwgKCZkZXYtPnJlZ3MtPmdwaW9jdGwpOworCisJLy8gRklYTUUgdGhpcyBMRUQgbmV2ZXIgc2VlbXMgdG8gdHVybiBvbi4KKwlpZiAoaXNfYWN0aXZlKQorCQl2YWwgfD0gR1BJTzJfREFUQTsKKwllbHNlCisJCXZhbCAmPSB+R1BJTzJfREFUQTsKKwl3cml0ZWwgKHZhbCwgJmRldi0+cmVncy0+Z3Bpb2N0bCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmV0MjI4MF9sZWRfc2h1dGRvd24gKHN0cnVjdCBuZXQyMjgwICpkZXYpCit7CisJLyogdHVybiBvZmYgYWxsIGZvdXIgR1BJTypfREFUQSBiaXRzICovCisJd3JpdGVsIChyZWFkbCAoJmRldi0+cmVncy0+Z3Bpb2N0bCkgJiB+MHgwZiwKKwkJCSZkZXYtPnJlZ3MtPmdwaW9jdGwpOworfQorCisjZWxzZQorCisjZGVmaW5lIG5ldDIyODBfbGVkX2luaXQoZGV2KQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBuZXQyMjgwX2xlZF9zcGVlZChkZXYsIHNwZWVkKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5ldDIyODBfbGVkX3NodXRkb3duKGRldikJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSB4cHJpbnRrKGRldixsZXZlbCxmbXQsYXJncy4uLikgXAorCXByaW50ayhsZXZlbCAiJXMgJXM6ICIgZm10ICwgZHJpdmVyX25hbWUgLCBcCisJCQlwY2lfbmFtZShkZXYtPnBkZXYpICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjdW5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREVCVUcgREVCVUcKKyNlbHNlCisjZGVmaW5lIFZERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYJLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9vdXRfbmFraW5nIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJLyogTk9URTogIGhhcmR3YXJlIHJhY2VzIGx1cmsgaGVyZSwgYW5kIFBJTkcgcHJvdG9jb2wgaXNzdWVzICovCisJd3JpdGVsICgoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9yc3ApOworCS8qIHN5bmNoIHdpdGggZGV2aWNlICovCisJcmVhZGwgKCZlcC0+cmVncy0+ZXBfcnNwKTsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X291dF9uYWtpbmcgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgY29uc3QgY2hhciAqd2hlcmUpCit7CisJdTMyCXRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCisJaWYgKCh0bXAgJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSA9PSAwKSB7CisJCURFQlVHIChlcC0+ZGV2LCAiJXMgJXMgJTA4eCAhTkFLXG4iLAorCQkJCWVwLT5lcC5uYW1lLCB3aGVyZSwgdG1wKTsKKwkJd3JpdGVsICgoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTKSwKKwkJCSZlcC0+cmVncy0+ZXBfcnNwKTsKKwl9Cit9CisjZGVmaW5lIEFTU0VSVF9PVVRfTkFLSU5HKGVwKSBhc3NlcnRfb3V0X25ha2luZyhlcCxfX0ZVTkNUSU9OX18pCisjZWxzZQorI2RlZmluZSBBU1NFUlRfT1VUX05BS0lORyhlcCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHN0b3Bfb3V0X25ha2luZyAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCXUzMgl0bXA7CisKKwl0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwlpZiAoKHRtcCAmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpICE9IDApCisJCXdyaXRlbCAoKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9yc3ApOworfQorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjZlYTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTAsMCArMSwyODcyIEBACisvKgorICogb21hcF91ZGMuYyAtLSBmb3IgT01BUCBmdWxsIHNwZWVkIHVkYzsgbW9zdCBjaGlwcyBzdXBwb3J0IE9URy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyN1bmRlZglERUJVRworI3VuZGVmCVZFUkJPU0UKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorCisjaW5jbHVkZSAib21hcF91ZGMuaCIKKworI3VuZGVmCVVTQl9UUkFDRQorCisvKiBidWxrIERNQSBzZWVtcyB0byBiZSBiZWhhdmluZyBmb3IgYm90aCBJTiBhbmQgT1VUICovCisjZGVmaW5lCVVTRV9ETUEKKworLyogSVNPIHRvbyAqLworI2RlZmluZQlVU0VfSVNPCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJIk9NQVAgVURDIGRyaXZlciIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjQgT2N0b2JlciAyMDA0IgorCisjZGVmaW5lCURNQV9BRERSX0lOVkFMSUQJKH4oZG1hX2FkZHJfdCkwKQorCisKKy8qCisgKiBUaGUgT01BUCBVREMgbmVlZHMgX3ZlcnlfIGVhcmx5IGVuZHBvaW50IHNldHVwOiAgYmVmb3JlIGVuYWJsaW5nIHRoZQorICogRCsgcHVsbHVwIHRvIGFsbG93IGVudW1lcmF0aW9uLiAgVGhhdCdzIHRvbyBlYXJseSBmb3IgdGhlIGdhZGdldAorICogZnJhbWV3b3JrIHRvIHVzZSBmcm9tIHVzYl9lbmRwb2ludF9lbmFibGUoKSwgd2hpY2ggaGFwcGVucyBhZnRlcgorICogZW51bWVyYXRpb24gYXMgcGFydCBvZiBhY3RpdmF0aW5nIGFuIGludGVyZmFjZS4gIChCdXQgaWYgd2UgYWRkIGFuCisgKiBvcHRpb25hbCBuZXcgIlVEQyBub3QgeWV0IHJ1bm5pbmciIHN0YXRlIHRvIHRoZSBnYWRnZXQgZHJpdmVyIG1vZGVsLAorICogZXZlbiBqdXN0IGR1cmluZyBkcml2ZXIgYmluZGluZywgdGhlIGVuZHBvaW50IGF1dG9jb25maWcgbG9naWMgaXMgdGhlCisgKiBuYXR1cmFsIHNwb3QgdG8gbWFudWZhY3R1cmUgbmV3IGVuZHBvaW50cy4pCisgKgorICogU28gaW5zdGVhZCBvZiB1c2luZyBlbmRwb2ludCBlbmFibGUgY2FsbHMgdG8gY29udHJvbCB0aGUgaGFyZHdhcmUgc2V0dXAsCisgKiB0aGlzIGRyaXZlciBkZWZpbmVzIGEgImZpZm8gbW9kZSIgcGFyYW1ldGVyLiAgSXQncyB1c2VkIGR1cmluZyBkcml2ZXIKKyAqIGluaXRpYWxpemF0aW9uIHRvIGNob29zZSBhbW9uZyBhIHNldCBvZiBwcmUtZGVmaW5lZCBlbmRwb2ludCBjb25maWdzLgorICogU2VlIG9tYXBfdWRjX3NldHVwKCkgZm9yIGF2YWlsYWJsZSBtb2Rlcywgb3IgdG8gYWRkIG90aGVycy4gIFRoYXQgY29kZQorICogbGl2ZXMgaW4gYW4gaW5pdCBzZWN0aW9uLCBzbyB1c2UgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgaWYgeW91IG5lZWQKKyAqIHRvIGNoYW5nZSB0aGUgZmlmbyBtb2RlIGFmdGVyIHRoZSBrZXJuZWwgYm9vdHMuCisgKgorICogR2FkZ2V0IGRyaXZlcnMgbm9ybWFsbHkgaWdub3JlIGVuZHBvaW50cyB0aGV5IGRvbid0IGNhcmUgYWJvdXQsIGFuZAorICogd29uJ3QgaW5jbHVkZSB0aGVtIGluIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcnMuICBUaGF0IG1lYW5zIG9ubHkKKyAqIG1pc2JlaGF2aW5nIGhvc3RzIHdvdWxkIGV2ZW4gbm90aWNlIHRoZXkgZXhpc3QuCisgKi8KKyNpZmRlZglVU0VfSVNPCitzdGF0aWMgdW5zaWduZWQgZmlmb19tb2RlID0gMzsKKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgZmlmb19tb2RlID0gMDsKKyNlbmRpZgorCisvKiAibW9kcHJvYmUgb21hcF91ZGMgZmlmb19tb2RlPTQyIiwgb3IgZWxzZSBhcyBhIGtlcm5lbAorICogYm9vdCBwYXJhbWV0ZXIgIm9tYXBfdWRjOmZpZm9fbW9kZT00MiIKKyAqLworbW9kdWxlX3BhcmFtIChmaWZvX21vZGUsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAoZmlmb19tb2RlLCAiZW5kcG9pbnQgc2V0dXAgKDAgPT0gZGVmYXVsdCkiKTsKKworI2lmZGVmCVVTRV9ETUEKK3N0YXRpYyB1bnNpZ25lZCB1c2VfZG1hID0gMTsKKworLyogIm1vZHByb2JlIG9tYXBfdWRjIHVzZV9kbWE9eSIsIG9yIGVsc2UgYXMgYSBrZXJuZWwKKyAqIGJvb3QgcGFyYW1ldGVyICJvbWFwX3VkYzp1c2VfZG1hPXkiCisgKi8KK21vZHVsZV9wYXJhbSAodXNlX2RtYSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDICh1c2VfZG1hLCAiZW5hYmxlL2Rpc2FibGUgRE1BIik7CisjZWxzZQkvKiAhVVNFX0RNQSAqLworCisvKiBzYXZlIGEgYml0IG9mIGNvZGUgKi8KKyNkZWZpbmUJdXNlX2RtYQkJMAorI2VuZGlmCS8qICFVU0VfRE1BICovCisKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAib21hcF91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2MgW10gPSBEUklWRVJfREVTQzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlcmUncyBhIG5vdGlvbiBvZiAiY3VycmVudCBlbmRwb2ludCIgZm9yIG1vZGlmeWluZyBlbmRwb2ludAorICogc3RhdGUsIGFuZCBQSU8gYWNjZXNzIHRvIGl0cyBGSUZPLiAgCisgKi8KKworc3RhdGljIHZvaWQgdXNlX2VwKHN0cnVjdCBvbWFwX2VwICplcCwgdTE2IHNlbGVjdCkKK3sKKwl1MTYJbnVtID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmOworCisJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJbnVtIHw9IFVEQ19FUF9ESVI7CisJVURDX0VQX05VTV9SRUcgPSBudW0gfCBzZWxlY3Q7CisJLyogd2hlbiBzZWxlY3QsIE1VU1QgZGVzZWxlY3QgbGF0ZXIgISEgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlc2VsZWN0X2VwKHZvaWQpCit7CisJVURDX0VQX05VTV9SRUcgJj0gflVEQ19FUF9TRUw7CisJLyogNiB3YWl0IHN0YXRlcyBiZWZvcmUgVFggd2lsbCBoYXBwZW4gKi8KK30KKworc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfY2xhaW0oc3RydWN0IG9tYXBfZXAgKmVwLCB1bnNpZ25lZCBwcmVmZXJyZWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBvbWFwX2VwLCBlcCk7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1MTYJCW1heHA7CisKKwkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYworCQkJfHwgZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVAorCQkJfHwgZXAtPmJFbmRwb2ludEFkZHJlc3MgIT0gZGVzYy0+YkVuZHBvaW50QWRkcmVzcworCQkJfHwgZXAtPm1heHBhY2tldCA8IGxlMTZfdG9fY3B1CisJCQkJCQkoZGVzYy0+d01heFBhY2tldFNpemUpKSB7CisJCURCRygiJXMsIGJhZCBlcCBvciBkZXNjcmlwdG9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbWF4cCA9IGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisJaWYgKChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSworCQkJCSYmIG1heHAgIT0gZXAtPm1heHBhY2tldCkKKwkJCXx8IGRlc2MtPndNYXhQYWNrZXRTaXplID4gZXAtPm1heHBhY2tldAorCQkJfHwgIWRlc2MtPndNYXhQYWNrZXRTaXplKSB7CisJCURCRygiJXMsIGJhZCAlcyBtYXhwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisjaWZkZWYJVVNFX0lTTworCWlmICgoZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCQkmJiBkZXNjLT5iSW50ZXJ2YWwgIT0gMSkpIHsKKwkJLyogaGFyZHdhcmUgd2FudHMgcGVyaW9kID0gMTsgVVNCIGFsbG93cyAyXihJbnRlcnZhbC0xKSAqLworCQlEQkcoIiVzLCB1bnN1cHBvcnRlZCBJU08gcGVyaW9kICVkbXNcbiIsIF9lcC0+bmFtZSwKKwkJCQkxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKSk7CisJCXJldHVybiAtRURPTTsKKwl9CisjZWxzZQorCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQlEQkcoIiVzLCBJU08gbnlldFxuIiwgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKyNlbmRpZgorCisJLyogeGZlciB0eXBlcyBtdXN0IG1hdGNoLCBleGNlcHQgdGhhdCBpbnRlcnJ1cHQgfj0gYnVsayAqLworCWlmIChlcC0+Ym1BdHRyaWJ1dGVzICE9IGRlc2MtPmJtQXR0cmlidXRlcworCQkJJiYgZXAtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkmJiBkZXNjLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCURCRygiJXMsICVzIHR5cGUgbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWRjID0gZXAtPnVkYzsKKwlpZiAoIXVkYy0+ZHJpdmVyIHx8IHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCURCRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJZXAtPmRlc2MgPSBkZXNjOworCWVwLT5pcnFzID0gMDsKKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPmVwLm1heHBhY2tldCA9IG1heHA7CisKKwkvKiBzZXQgZW5kcG9pbnQgdG8gaW5pdGlhbCBzdGF0ZSAqLworCWVwLT5kbWFfY2hhbm5lbCA9IDA7CisJZXAtPmhhc19kbWEgPSAwOworCWVwLT5sY2ggPSAtMTsKKwl1c2VfZXAoZXAsIFVEQ19FUF9TRUwpOworCVVEQ19DVFJMX1JFRyA9IFVEQ19SRVNFVF9FUDsKKwllcC0+YWNrd2FpdCA9IDA7CisJZGVzZWxlY3RfZXAoKTsKKworCWlmIChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCWxpc3RfYWRkKCZlcC0+aXNvLCAmdWRjLT5pc28pOworCisJLyogbWF5YmUgYXNzaWduIGEgRE1BIGNoYW5uZWwgdG8gdGhpcyBlbmRwb2ludCAqLworCWlmICh1c2VfZG1hICYmIGRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKQorCQkvKiBGSVhNRSBJU08gY2FuIGRtYSwgYnV0IHByZWZlcnMgZmlyc3QgY2hhbm5lbCAqLworCQlkbWFfY2hhbm5lbF9jbGFpbShlcCwgMCk7CisKKwkvKiBQSU8gT1VUIG1heSBSWCBwYWNrZXRzICovCisJaWYgKGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DCisJCQkmJiAhZXAtPmhhc19kbWEKKwkJCSYmICEoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkgeworCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCWVwLT5hY2t3YWl0ID0gMSArIGVwLT5kb3VibGVfYnVmOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCVZEQkcoIiVzIGVuYWJsZWRcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IG9tYXBfZXAgKiwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBpbnQgb21hcF9lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJREJHKCIlcywgJXMgbm90IGVuYWJsZWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCV9lcCA/IGVwLT5lcC5uYW1lIDogTlVMTCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJZXAtPmRlc2MgPSAwOworCW51a2UgKGVwLCAtRVNIVVRET1dOKTsKKwllcC0+ZXAubWF4cGFja2V0ID0gZXAtPm1heHBhY2tldDsKKwllcC0+aGFzX2RtYSA9IDA7CisJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCWxpc3RfZGVsX2luaXQoJmVwLT5pc28pOworCWRlbF90aW1lcigmZXAtPnRpbWVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKworCVZEQkcoIiVzIGRpc2FibGVkXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK29tYXBfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJaWYgKHJlcSkgeworCQltZW1zZXQgKHJlcSwgMCwgc2l6ZW9mICpyZXEpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOworCX0KKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCitzdGF0aWMgdm9pZAorb21hcF9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3Qgb21hcF9yZXEsIHJlcSk7CisKKwlpZiAoX3JlcSkKKwkJa2ZyZWUgKHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkICoKK29tYXBfYWxsb2NfYnVmZmVyKAorCXN0cnVjdCB1c2JfZXAJKl9lcCwKKwl1bnNpZ25lZAlieXRlcywKKwlkbWFfYWRkcl90CSpkbWEsCisJaW50CQlnZnBfZmxhZ3MKKykKK3sKKwl2b2lkCQkqcmV0dmFsOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwlpZiAodXNlX2RtYSAmJiBlcC0+aGFzX2RtYSkgeworCQlzdGF0aWMgaW50CXdhcm5lZDsKKwkJaWYgKCF3YXJuZWQgJiYgYnl0ZXMgPCBQQUdFX1NJWkUpIHsKKwkJCWRldl93YXJuKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCSJ1c2luZyBkbWFfYWxsb2NfY29oZXJlbnQgZm9yICIKKwkJCQkic21hbGwgYWxsb2NhdGlvbnMgd2FzdGVzIG1lbW9yeVxuIik7CisJCQl3YXJuZWQrKzsKKwkJfQorCQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCWJ5dGVzLCBkbWEsIGdmcF9mbGFncyk7CisJfQorCisJcmV0dmFsID0ga21hbGxvYyhieXRlcywgZ2ZwX2ZsYWdzKTsKKwlpZiAocmV0dmFsKQorCQkqZG1hID0gdmlydF90b19waHlzKHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgb21hcF9mcmVlX2J1ZmZlcigKKwlzdHJ1Y3QgdXNiX2VwCSpfZXAsCisJdm9pZAkJKmJ1ZiwKKwlkbWFfYWRkcl90CWRtYSwKKwl1bnNpZ25lZAlieXRlcworKQoreworCXN0cnVjdCBvbWFwX2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwlpZiAodXNlX2RtYSAmJiBfZXAgJiYgZXAtPmhhc19kbWEpCisJCWRtYV9mcmVlX2NvaGVyZW50KGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LCBieXRlcywgYnVmLCBkbWEpOworCWVsc2UKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitkb25lKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQJCXN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWUpOworCisJaWYgKHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKwllbHNlCisJCXN0YXR1cyA9IHJlcS0+cmVxLnN0YXR1czsKKworCWlmICh1c2VfZG1hICYmIGVwLT5oYXNfZG1hKSB7CisJCWlmIChyZXEtPm1hcHBlZCkgeworCQkJZG1hX3VubWFwX3NpbmdsZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJCXJlcS0+bWFwcGVkID0gMDsKKwkJfSBlbHNlCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCX0KKworI2lmbmRlZglVU0JfVFJBQ0UKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorI2VuZGlmCisJCVZEQkcoImNvbXBsZXRlICVzIHJlcSAlcCBzdGF0ICVkIGxlbiAldS8ldVxuIiwKKwkJCWVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCS8qIGRvbid0IG1vZGlmeSBxdWV1ZSBoZWFkcyBkdXJpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCWVwLT5zdG9wcGVkID0gMTsKKwlzcGluX3VubG9jaygmZXAtPnVkYy0+bG9jayk7CisJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwlzcGluX2xvY2soJmVwLT51ZGMtPmxvY2spOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlGSUZPX0ZVTEwJKFVEQ19OT05fSVNPX0ZJRk9fRlVMTCB8IFVEQ19JU09fRklGT19GVUxMKQorI2RlZmluZQlGSUZPX1VOV1JJVEFCTEUJKFVEQ19FUF9IQUxURUQgfCBGSUZPX0ZVTEwpCisKKyNkZWZpbmUgRklGT19FTVBUWQkoVURDX05PTl9JU09fRklGT19FTVBUWSB8IFVEQ19JU09fRklGT19FTVBUWSkKKyNkZWZpbmUgRklGT19VTlJFQURBQkxFIChVRENfRVBfSEFMVEVEIHwgRklGT19FTVBUWSkKKworc3RhdGljIGlubGluZSBpbnQgCit3cml0ZV9wYWNrZXQodTggKmJ1Ziwgc3RydWN0IG9tYXBfcmVxICpyZXEsIHVuc2lnbmVkIG1heCkKK3sKKwl1bnNpZ25lZAlsZW47CisJdTE2CQkqd3A7CisKKwlsZW4gPSBtaW4ocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCBtYXgpOworCXJlcS0+cmVxLmFjdHVhbCArPSBsZW47CisKKwltYXggPSBsZW47CisJaWYgKGxpa2VseSgoKChpbnQpYnVmKSAmIDEpID09IDApKSB7CisJCXdwID0gKHUxNiAqKWJ1ZjsKKwkJd2hpbGUgKG1heCA+PSAyKSB7CisJCQlVRENfREFUQV9SRUcgPSAqd3ArKzsKKwkJCW1heCAtPSAyOworCQl9CisJCWJ1ZiA9ICh1OCAqKXdwOworCX0KKwl3aGlsZSAobWF4LS0pCisJCSoodm9sYXRpbGUgdTggKikmVURDX0RBVEFfUkVHID0gKmJ1ZisrOworCXJldHVybiBsZW47Cit9CisKKy8vIEZJWE1FIGNoYW5nZSByL3cgZmlmbyBjYWxsaW5nIGNvbnZlbnRpb24KKworCisvLyByZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubworc3RhdGljIGludCB3cml0ZV9maWZvKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEpCit7CisJdTgJCSpidWY7CisJdW5zaWduZWQJY291bnQ7CisJaW50CQlpc19sYXN0OworCXUxNgkJZXBfc3RhdDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJLyogUElPLUlOIGlzbid0IGRvdWJsZSBidWZmZXJlZCBleGNlcHQgZm9yIGlzbyAqLworCWVwX3N0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCWlmIChlcF9zdGF0ICYgRklGT19VTldSSVRBQkxFKQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gZXAtPmVwLm1heHBhY2tldDsKKwljb3VudCA9IHdyaXRlX3BhY2tldChidWYsIHJlcSwgY291bnQpOworCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwllcC0+YWNrd2FpdCA9IDE7CisKKwkvKiBsYXN0IHBhY2tldCBpcyBvZnRlbiBzaG9ydCAoc29tZXRpbWVzIGEgemxwKSAqLworCWlmIChjb3VudCAhPSBlcC0+ZXAubWF4cGFja2V0KQorCQlpc19sYXN0ID0gMTsKKwllbHNlIGlmIChyZXEtPnJlcS5sZW5ndGggPT0gcmVxLT5yZXEuYWN0dWFsCisJCQkmJiAhcmVxLT5yZXEuemVybykKKwkJaXNfbGFzdCA9IDE7CisJZWxzZQorCQlpc19sYXN0ID0gMDsKKworCS8qIE5PVEU6ICByZXF1ZXN0cyBjb21wbGV0ZSB3aGVuIGFsbCBJTiBkYXRhIGlzIGluIGEKKwkgKiBGSUZPIChvciBzb21ldGltZXMgbGF0ZXIsIGlmIGEgemxwIHdhcyBuZWVkZWQpLgorCSAqIFVzZSB1c2JfZXBfZmlmb19zdGF0dXMoKSB3aGVyZSBuZWVkZWQuCisJICovCisJaWYgKGlzX2xhc3QpCisJCWRvbmUoZXAsIHJlcSwgMCk7CisJcmV0dXJuIGlzX2xhc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IAorcmVhZF9wYWNrZXQodTggKmJ1Ziwgc3RydWN0IG9tYXBfcmVxICpyZXEsIHVuc2lnbmVkIGF2YWlsKQoreworCXVuc2lnbmVkCWxlbjsKKwl1MTYJCSp3cDsKKworCWxlbiA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIGF2YWlsKTsKKwlyZXEtPnJlcS5hY3R1YWwgKz0gbGVuOworCWF2YWlsID0gbGVuOworCisJaWYgKGxpa2VseSgoKChpbnQpYnVmKSAmIDEpID09IDApKSB7CisJCXdwID0gKHUxNiAqKWJ1ZjsKKwkJd2hpbGUgKGF2YWlsID49IDIpIHsKKwkJCSp3cCsrID0gVURDX0RBVEFfUkVHOworCQkJYXZhaWwgLT0gMjsKKwkJfQorCQlidWYgPSAodTggKil3cDsKKwl9CisJd2hpbGUgKGF2YWlsLS0pCisJCSpidWYrKyA9ICoodm9sYXRpbGUgdTggKikmVURDX0RBVEFfUkVHOworCXJldHVybiBsZW47Cit9CisKKy8vIHJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gcXVldWUgZW1wdHksIG5lZ2F0aXZlID0gZXJybm8KK3N0YXRpYyBpbnQgcmVhZF9maWZvKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEpCit7CisJdTgJCSpidWY7CisJdW5zaWduZWQJY291bnQsIGF2YWlsOworCWludAkJaXNfbGFzdDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKworCWZvciAoOzspIHsKKwkJdTE2CWVwX3N0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCisJCWlzX2xhc3QgPSAwOworCQlpZiAoZXBfc3RhdCAmIEZJRk9fRU1QVFkpIHsKKwkJCWlmICghZXAtPmRvdWJsZV9idWYpCisJCQkJYnJlYWs7CisJCQllcC0+Zm5mID0gMTsKKwkJfQorCQlpZiAoZXBfc3RhdCAmIFVEQ19FUF9IQUxURUQpCisJCQlicmVhazsKKworCQlpZiAoZXBfc3RhdCAmIEZJRk9fRlVMTCkKKwkJCWF2YWlsID0gZXAtPmVwLm1heHBhY2tldDsKKwkJZWxzZSAgeworCQkJYXZhaWwgPSBVRENfUlhGU1RBVF9SRUc7CisJCQllcC0+Zm5mID0gZXAtPmRvdWJsZV9idWY7CisJCX0KKwkJY291bnQgPSByZWFkX3BhY2tldChidWYsIHJlcSwgYXZhaWwpOworCisJCS8qIHBhcnRpYWwgcGFja2V0IHJlYWRzIG1heSBub3QgYmUgZXJyb3JzICovCisJCWlmIChjb3VudCA8IGVwLT5lcC5tYXhwYWNrZXQpIHsKKwkJCWlzX2xhc3QgPSAxOworCQkJLyogb3ZlcmZsb3dlZCB0aGlzIHJlcXVlc3Q/ICBmbHVzaCBleHRyYSBkYXRhICovCisJCQlpZiAoY291bnQgIT0gYXZhaWwpIHsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJCWF2YWlsIC09IGNvdW50OworCQkJCXdoaWxlIChhdmFpbC0tKQorCQkJCQkodm9pZCkgKih2b2xhdGlsZSB1OCAqKSZVRENfREFUQV9SRUc7CisJCQl9CisJCX0gZWxzZSBpZiAocmVxLT5yZXEubGVuZ3RoID09IHJlcS0+cmVxLmFjdHVhbCkKKwkJCWlzX2xhc3QgPSAxOworCQllbHNlCisJCQlpc19sYXN0ID0gMDsKKworCQlpZiAoIWVwLT5iRW5kcG9pbnRBZGRyZXNzKQorCQkJYnJlYWs7CisJCWlmIChpc19sYXN0KQorCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpc19sYXN0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdTE2IGRtYV9zcmNfbGVuKHN0cnVjdCBvbWFwX2VwICplcCwgZG1hX2FkZHJfdCBzdGFydCkKK3sKKwlkbWFfYWRkcl90CWVuZDsKKworCS8qIElOLURNQSBuZWVkcyB0aGlzIG9uIGZhdWx0L2NhbmNlbCBwYXRocywgc28gMTV4eCBtaXNyZXBvcnRzCisJICogdGhlIGxhc3QgdHJhbnNmZXIncyBieXRlY291bnQgYnkgbW9yZSB0aGFuIGEgRklGTydzIHdvcnRoLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJcmV0dXJuIDA7CisKKwllbmQgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTQUMoZXAtPmxjaCkpOworCWlmIChlbmQgPT0gZXAtPmRtYV9jb3VudGVyKQorCQlyZXR1cm4gMDsKKworCWVuZCB8PSBzdGFydCAmICgweGZmZmYgPDwgMTYpOworCWlmIChlbmQgPCBzdGFydCkKKwkJZW5kICs9IDB4MTAwMDA7CisJcmV0dXJuIGVuZCAtIHN0YXJ0OworfQorCisjZGVmaW5lIERNQV9ERVNUX0xBU1QoeCkgKGNwdV9pc19vbWFwMTV4eCgpIFwKKwkJPyBPTUFQX0RNQV9DU0FDKHgpIC8qIHJlYWxseTogQ1BDICovIFwKKwkJOiBPTUFQX0RNQV9DREFDKHgpKQorCitzdGF0aWMgdTE2IGRtYV9kZXN0X2xlbihzdHJ1Y3Qgb21hcF9lcCAqZXAsIGRtYV9hZGRyX3Qgc3RhcnQpCit7CisJZG1hX2FkZHJfdAllbmQ7CisKKwllbmQgPSBvbWFwX3JlYWR3KERNQV9ERVNUX0xBU1QoZXAtPmxjaCkpOworCWlmIChlbmQgPT0gZXAtPmRtYV9jb3VudGVyKQorCQlyZXR1cm4gMDsKKworCWVuZCB8PSBzdGFydCAmICgweGZmZmYgPDwgMTYpOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJZW5kKys7CisJaWYgKGVuZCA8IHN0YXJ0KQorCQllbmQgKz0gMHgxMDAwMDsKKwlyZXR1cm4gZW5kIC0gc3RhcnQ7Cit9CisKKworLyogRWFjaCBVU0IgdHJhbnNmZXIgcmVxdWVzdCB1c2luZyBETUEgbWFwcyB0byBvbmUgb3IgbW9yZSBETUEgdHJhbnNmZXJzLgorICogV2hlbiBETUEgY29tcGxldGlvbiBpc24ndCByZXF1ZXN0IGNvbXBsZXRpb24sIHRoZSBVREMgY29udGludWVzIHdpdGgKKyAqIHRoZSBuZXh0IERNQSB0cmFuc2ZlciBmb3IgdGhhdCBVU0IgdHJhbnNmZXIuCisgKi8KKworc3RhdGljIHZvaWQgbmV4dF9pbl9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSkKK3sKKwl1MTYJCXR4ZG1hX2N0cmw7CisJdW5zaWduZWQJbGVuZ3RoID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCWNvbnN0IGludAlzeW5jX21vZGUgPSBjcHVfaXNfb21hcDE1eHgoKQorCQkJCT8gT01BUF9ETUFfU1lOQ19GUkFNRQorCQkJCTogT01BUF9ETUFfU1lOQ19FTEVNRU5UOworCisJLyogbWVhc3VyZSBsZW5ndGggaW4gZWl0aGVyIGJ5dGVzIG9yIHBhY2tldHMgKi8KKwlpZiAoKGNwdV9pc19vbWFwMTZ4eCgpICYmIGxlbmd0aCA8PSAoVURDX1RYTl9UU0MgKyAxKSkKKwkJCXx8IChjcHVfaXNfb21hcDE1eHgoKSAmJiBsZW5ndGggPCBlcC0+bWF4cGFja2V0KSkgeworCQl0eGRtYV9jdHJsID0gVURDX1RYTl9FT1QgfCBsZW5ndGg7CisJCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfREFUQV9UWVBFX1M4LAorCQkJCWxlbmd0aCwgMSwgc3luY19tb2RlKTsKKwl9IGVsc2UgeworCQlsZW5ndGggPSBtaW4obGVuZ3RoIC8gZXAtPm1heHBhY2tldCwKKwkJCQkodW5zaWduZWQpIFVEQ19UWE5fVFNDICsgMSk7CisgCQl0eGRtYV9jdHJsID0gbGVuZ3RoOworCQlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGVwLT5sY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TOCwKKwkJCQllcC0+ZXAubWF4cGFja2V0LCBsZW5ndGgsIHN5bmNfbW9kZSk7CisJCWxlbmd0aCAqPSBlcC0+bWF4cGFja2V0OworCX0KKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKworCW9tYXBfc3RhcnRfZG1hKGVwLT5sY2gpOworCWVwLT5kbWFfY291bnRlciA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhlcC0+bGNoKSk7CisJVURDX0RNQV9JUlFfRU5fUkVHIHw9IFVEQ19UWF9ET05FX0lFKGVwLT5kbWFfY2hhbm5lbCk7CisJVURDX1RYRE1BX1JFRyhlcC0+ZG1hX2NoYW5uZWwpID0gVURDX1RYTl9TVEFSVCB8IHR4ZG1hX2N0cmw7CisJcmVxLT5kbWFfYnl0ZXMgPSBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9pbl9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgaW50IHN0YXR1cykKK3sKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJcmVxLT5yZXEuYWN0dWFsICs9IHJlcS0+ZG1hX2J5dGVzOworCisJCS8qIHJldHVybiBpZiB0aGlzIHJlcXVlc3QgbmVlZHMgdG8gc2VuZCBkYXRhIG9yIHpscCAqLworCQlpZiAocmVxLT5yZXEuYWN0dWFsIDwgcmVxLT5yZXEubGVuZ3RoKQorCQkJcmV0dXJuOworCQlpZiAocmVxLT5yZXEuemVybworCQkJCSYmIHJlcS0+ZG1hX2J5dGVzICE9IDAKKwkJCQkmJiAocmVxLT5yZXEuYWN0dWFsICUgZXAtPm1heHBhY2tldCkgPT0gMCkKKwkJCXJldHVybjsKKwl9IGVsc2UKKwkJcmVxLT5yZXEuYWN0dWFsICs9IGRtYV9zcmNfbGVuKGVwLCByZXEtPnJlcS5kbWEKKwkJCQkJCQkrIHJlcS0+cmVxLmFjdHVhbCk7CisKKwkvKiB0eCBjb21wbGV0aW9uICovCisJb21hcF9zdG9wX2RtYShlcC0+bGNoKTsKKwlVRENfRE1BX0lSUV9FTl9SRUcgJj0gflVEQ19UWF9ET05FX0lFKGVwLT5kbWFfY2hhbm5lbCk7CisJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBuZXh0X291dF9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSkKK3sKKwl1bnNpZ25lZCBwYWNrZXRzOworCisJLyogTk9URTogIHdlIGZpbHRlcmVkIG91dCAic2hvcnQgcmVhZHMiIGJlZm9yZSwgc28gd2Uga25vdworCSAqIHRoZSBidWZmZXIgaGFzIG9ubHkgd2hvbGUgbnVtYmVycyBvZiBwYWNrZXRzLgorCSAqLworCisJLyogc2V0IHVwIHRoaXMgRE1BIHRyYW5zZmVyLCBlbmFibGUgdGhlIGZpZm8sIHN0YXJ0ICovCisJcGFja2V0cyA9IChyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwpIC8gZXAtPmVwLm1heHBhY2tldDsKKwlwYWNrZXRzID0gbWluKHBhY2tldHMsICh1bnNpZ25lZClVRENfUlhOX1RDICsgMSk7CisJcmVxLT5kbWFfYnl0ZXMgPSBwYWNrZXRzICogZXAtPmVwLm1heHBhY2tldDsKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGVwLT5sY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TOCwKKwkJCWVwLT5lcC5tYXhwYWNrZXQsIHBhY2tldHMsCisJCQlPTUFQX0RNQV9TWU5DX0VMRU1FTlQpOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9QT1JUX0VNSUZGLAorCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwllcC0+ZG1hX2NvdW50ZXIgPSBvbWFwX3JlYWR3KERNQV9ERVNUX0xBU1QoZXAtPmxjaCkpOworCisJVURDX1JYRE1BX1JFRyhlcC0+ZG1hX2NoYW5uZWwpID0gVURDX1JYTl9TVE9QIHwgKHBhY2tldHMgLSAxKTsKKwlVRENfRE1BX0lSUV9FTl9SRUcgfD0gVURDX1JYX0VPVF9JRShlcC0+ZG1hX2NoYW5uZWwpOworCVVEQ19FUF9OVU1fUkVHID0gKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgMHhmKTsKKwlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisKKwlvbWFwX3N0YXJ0X2RtYShlcC0+bGNoKTsKK30KKworc3RhdGljIHZvaWQKK2ZpbmlzaF9vdXRfZG1hKHN0cnVjdCBvbWFwX2VwICplcCwgc3RydWN0IG9tYXBfcmVxICpyZXEsIGludCBzdGF0dXMpCit7CisJdTE2CWNvdW50OworCisJaWYgKHN0YXR1cyA9PSAwKQorCQllcC0+ZG1hX2NvdW50ZXIgPSAodTE2KSAocmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwljb3VudCA9IGRtYV9kZXN0X2xlbihlcCwgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwljb3VudCArPSByZXEtPnJlcS5hY3R1YWw7CisJaWYgKGNvdW50IDw9IHJlcS0+cmVxLmxlbmd0aCkKKwkJcmVxLT5yZXEuYWN0dWFsID0gY291bnQ7CisKKwlpZiAoY291bnQgIT0gcmVxLT5kbWFfYnl0ZXMgfHwgc3RhdHVzKQorCQlvbWFwX3N0b3BfZG1hKGVwLT5sY2gpOworCisJLyogaWYgdGhpcyB3YXNuJ3Qgc2hvcnQsIHJlcXVlc3QgbWF5IG5lZWQgYW5vdGhlciB0cmFuc2ZlciAqLworCWVsc2UgaWYgKHJlcS0+cmVxLmFjdHVhbCA8IHJlcS0+cmVxLmxlbmd0aCkKKwkJcmV0dXJuOworCisJLyogcnggY29tcGxldGlvbiAqLworCVVEQ19ETUFfSVJRX0VOX1JFRyAmPSB+VURDX1JYX0VPVF9JRShlcC0+ZG1hX2NoYW5uZWwpOworCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2lycShzdHJ1Y3Qgb21hcF91ZGMgKnVkYywgdTE2IGlycV9zcmMpCit7CisJdTE2CQlkbWFuX3N0YXQgPSBVRENfRE1BTl9TVEFUX1JFRzsKKwlzdHJ1Y3Qgb21hcF9lcAkqZXA7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwkvKiBJTiBkbWE6IHR4IHRvIGhvc3QgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19UWE5fRE9ORSkgeworCQllcCA9ICZ1ZGMtPmVwWzE2ICsgVURDX0RNQV9UWF9TUkMoZG1hbl9zdGF0KV07CisJCWVwLT5pcnFzKys7CisJCS8qIGNhbiBzZWUgVFhOX0RPTkUgYWZ0ZXIgZG1hIGFib3J0ICovCisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJCQlmaW5pc2hfaW5fZG1hKGVwLCByZXEsIDApOworCQl9CisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19UWE5fRE9ORTsKKworCQlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJbmV4dF9pbl9kbWEoZXAsIHJlcSk7CisJCX0KKwl9CisKKwkvKiBPVVQgZG1hOiByeCBmcm9tIGhvc3QgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19SWE5fRU9UKSB7CisJCWVwID0gJnVkYy0+ZXBbVURDX0RNQV9SWF9TUkMoZG1hbl9zdGF0KV07CisJCWVwLT5pcnFzKys7CisJCS8qIGNhbiBzZWUgUlhOX0VPVCBhZnRlciBkbWEgYWJvcnQgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJZmluaXNoX291dF9kbWEoZXAsIHJlcSwgMCk7CisJCX0KKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX1JYTl9FT1Q7CisKKwkJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCW5leHRfb3V0X2RtYShlcCwgcmVxKTsKKwkJfQorCX0KKworCWlmIChpcnFfc3JjICYgVURDX1JYTl9DTlQpIHsKKwkJZXAgPSAmdWRjLT5lcFtVRENfRE1BX1JYX1NSQyhkbWFuX3N0YXQpXTsKKwkJZXAtPmlycXMrKzsKKwkJLyogb21hcDE1eHggZG9lcyB0aGlzIHVuYXNrZWQuLi4gKi8KKwkJVkRCRygiJXMsIFJYX0NOVCBpcnE/XG4iLCBlcC0+ZXAubmFtZSk7CisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19SWE5fQ05UOworCX0KK30KKworc3RhdGljIHZvaWQgZG1hX2Vycm9yKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwID0gZGF0YTsKKworCS8qIGlmIGNoX3N0YXR1cyAmIE9NQVBfRE1BX0RST1BfSVJRIC4uLiAqLworCS8qIGlmIGNoX3N0YXR1cyAmIE9NQVBfRE1BX1RPVVRfSVJRIC4uLiAqLworCUVSUigiJXMgZG1hIGVycm9yLCBsY2ggJWQgc3RhdHVzICUwMnhcbiIsIGVwLT5lcC5uYW1lLCBsY2gsIGNoX3N0YXR1cyk7CisKKwkvKiBjb21wbGV0ZSBjdXJyZW50IHRyYW5zZmVyIC4uLiAqLworfQorCitzdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9jbGFpbShzdHJ1Y3Qgb21hcF9lcCAqZXAsIHVuc2lnbmVkIGNoYW5uZWwpCit7CisJdTE2CXJlZzsKKwlpbnQJc3RhdHVzLCByZXN0YXJ0LCBpc19pbjsKKworCWlzX2luID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOOworCWlmIChpc19pbikKKwkJcmVnID0gVURDX1RYRE1BX0NGR19SRUc7CisJZWxzZQorCQlyZWcgPSBVRENfUlhETUFfQ0ZHX1JFRzsKKwlyZWcgfD0gMSA8PCAxMjsJCS8qICJwdWxzZSIgYWN0aXZhdGVkICovCisKKwllcC0+ZG1hX2NoYW5uZWwgPSAwOworCWVwLT5sY2ggPSAtMTsKKwlpZiAoY2hhbm5lbCA9PSAwIHx8IGNoYW5uZWwgPiAzKSB7CisJCWlmICgocmVnICYgMHgwZjAwKSA9PSAwKQorCQkJY2hhbm5lbCA9IDM7CisJCWVsc2UgaWYgKChyZWcgJiAweDAwZjApID09IDApCisJCQljaGFubmVsID0gMjsKKwkJZWxzZSBpZiAoKHJlZyAmIDB4MDAwZikgPT0gMCkJLyogcHJlZmVycmVkIGZvciBJU08gKi8KKwkJCWNoYW5uZWwgPSAxOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IC1FTUxJTks7CisJCQlnb3RvIGp1c3RfcmVzdGFydDsKKwkJfQorCX0KKwlyZWcgfD0gKDB4MGYgJiBlcC0+YkVuZHBvaW50QWRkcmVzcykgPDwgKDQgKiAoY2hhbm5lbCAtIDEpKTsKKwllcC0+ZG1hX2NoYW5uZWwgPSBjaGFubmVsOworCisJaWYgKGlzX2luKSB7CisJCXN0YXR1cyA9IG9tYXBfcmVxdWVzdF9kbWEoT01BUF9ETUFfVVNCX1cyRkNfVFgwIC0gMSArIGNoYW5uZWwsCisJCQllcC0+ZXAubmFtZSwgZG1hX2Vycm9yLCBlcCwgJmVwLT5sY2gpOworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCVVEQ19UWERNQV9DRkdfUkVHID0gcmVnOworCQkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGVwLT5sY2gsCisJCQkJT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCSh1bnNpZ25lZCBsb25nKSBpb192MnAoKHUzMikmVURDX0RBVEFfRE1BX1JFRykpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gb21hcF9yZXF1ZXN0X2RtYShPTUFQX0RNQV9VU0JfVzJGQ19SWDAgLSAxICsgY2hhbm5lbCwKKwkJCWVwLT5lcC5uYW1lLCBkbWFfZXJyb3IsIGVwLCAmZXAtPmxjaCk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJVURDX1JYRE1BX0NGR19SRUcgPSByZWc7CisJCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhlcC0+bGNoLAorCQkJCU9NQVBfRE1BX1BPUlRfVElQQiwKKwkJCQlPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKKwkJCQkodW5zaWduZWQgbG9uZykgaW9fdjJwKCh1MzIpJlVEQ19EQVRBX0RNQV9SRUcpKTsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQllcC0+ZG1hX2NoYW5uZWwgPSAwOworCWVsc2UgeworCQllcC0+aGFzX2RtYSA9IDE7CisJCW9tYXBfZGlzYWJsZV9kbWFfaXJxKGVwLT5sY2gsIE9NQVBfRE1BX0JMT0NLX0lSUSk7CisKKwkJLyogY2hhbm5lbCB0eXBlIFA6IGh3IHN5bmNoIChmaWZvKSAqLworCQlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQorCQkJb21hcF93cml0ZXcoMiwgT01BUF9ETUFfTENIX0NUUkwoZXAtPmxjaCkpOworCX0KKworanVzdF9yZXN0YXJ0OgorCS8qIHJlc3RhcnQgYW55IHF1ZXVlLCBldmVuIGlmIHRoZSBjbGFpbSBmYWlsZWQgICovCisJcmVzdGFydCA9ICFlcC0+c3RvcHBlZCAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKTsKKworCWlmIChzdGF0dXMpCisJCURCRygiJXMgbm8gZG1hIGNoYW5uZWw6ICVkJXNcbiIsIGVwLT5lcC5uYW1lLCBzdGF0dXMsCisJCQlyZXN0YXJ0ID8gIiAocmVzdGFydCkiIDogIiIpOworCWVsc2UKKwkJREJHKCIlcyBjbGFpbWVkICVjeGRtYSVkIGxjaCAlZCVzXG4iLCBlcC0+ZXAubmFtZSwKKwkJCWlzX2luID8gJ3QnIDogJ3InLAorCQkJZXAtPmRtYV9jaGFubmVsIC0gMSwgZXAtPmxjaCwKKwkJCXJlc3RhcnQgPyAiIChyZXN0YXJ0KSIgOiAiIik7CisKKwlpZiAocmVzdGFydCkgeworCQlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKwkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJaWYgKGVwLT5oYXNfZG1hKQorCQkJKGlzX2luID8gbmV4dF9pbl9kbWEgOiBuZXh0X291dF9kbWEpKGVwLCByZXEpOworCQllbHNlIHsKKwkJCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CisJCQkoaXNfaW4gPyB3cml0ZV9maWZvIDogcmVhZF9maWZvKShlcCwgcmVxKTsKKwkJCWRlc2VsZWN0X2VwKCk7CisJCQlpZiAoIWlzX2luKSB7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCWVwLT5hY2t3YWl0ID0gMSArIGVwLT5kb3VibGVfYnVmOworCQkJfQorCQkJLyogSU46IDYgd2FpdCBzdGF0ZXMgYmVmb3JlIGl0J2xsIHR4ICovCisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IG9tYXBfZXAgKmVwKQoreworCWludAkJc2hpZnQgPSA0ICogKGVwLT5kbWFfY2hhbm5lbCAtIDEpOworCXUxNgkJbWFzayA9IDB4MGYgPDwgc2hpZnQ7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisJaW50CQlhY3RpdmU7CisKKwkvKiBhYm9ydCBhbnkgYWN0aXZlIHVzYiB0cmFuc2ZlciByZXF1ZXN0ICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCWVsc2UKKwkJcmVxID0gMDsKKworCWFjdGl2ZSA9ICgoMSA8PCA3KSAmIG9tYXBfcmVhZGwoT01BUF9ETUFfQ0NSKGVwLT5sY2gpKSkgIT0gMDsKKworCURCRygiJXMgcmVsZWFzZSAlcyAlY3hkbWElZCAlcFxuIiwgZXAtPmVwLm5hbWUsCisJCQlhY3RpdmUgPyAiYWN0aXZlIiA6ICJpZGxlIiwKKwkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gJ3QnIDogJ3InLAorCQkJZXAtPmRtYV9jaGFubmVsIC0gMSwgcmVxKTsKKworCS8qIHdhaXQgdGlsbCBjdXJyZW50IHBhY2tldCBETUEgZmluaXNoZXMsIGFuZCBmaWZvIGVtcHRpZXMgKi8KKwlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCVVEQ19UWERNQV9DRkdfUkVHICY9IH5tYXNrOworCisJCWlmIChyZXEpIHsKKwkJCWZpbmlzaF9pbl9kbWEoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCisJCQkvKiBjbGVhciBGSUZPOyBob3N0cyBwcm9iYWJseSB3b24ndCBlbXB0eSBpdCAqLworCQkJdXNlX2VwKGVwLCBVRENfRVBfU0VMKTsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQlkZXNlbGVjdF9lcCgpOworCQl9CisJCXdoaWxlIChVRENfVFhETUFfQ0ZHX1JFRyAmIG1hc2spCisJCQl1ZGVsYXkoMTApOworCX0gZWxzZSB7CisJCVVEQ19SWERNQV9DRkdfUkVHICY9IH5tYXNrOworCisJCS8qIGRtYSBlbXB0aWVzIHRoZSBmaWZvICovCisJCXdoaWxlIChVRENfUlhETUFfQ0ZHX1JFRyAmIG1hc2spCisJCQl1ZGVsYXkoMTApOworCQlpZiAocmVxKQorCQkJZmluaXNoX291dF9kbWEoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCX0KKwlvbWFwX2ZyZWVfZG1hKGVwLT5sY2gpOworCWVwLT5kbWFfY2hhbm5lbCA9IDA7CisJZXAtPmxjaCA9IC0xOworCS8qIGhhc19kbWEgc3RpbGwgc2V0LCB0aWxsIGVuZHBvaW50IGlzIGZ1bGx5IHF1aWVzY2VkICovCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorb21hcF9lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXN0cnVjdCBvbWFwX3JlcQkqcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBvbWFwX3JlcSwgcmVxKTsKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJaXNfaXNvID0gMDsKKworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX3JlcSB8fCAhcmVxLT5yZXEuY29tcGxldGUgfHwgIXJlcS0+cmVxLmJ1ZgorCQkJfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSB7CisJCURCRygiJXMsIGJhZCBwYXJhbXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5iRW5kcG9pbnRBZGRyZXNzKSkgeworCQlEQkcoIiVzLCBiYWQgZXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCWlmIChyZXEtPnJlcS5sZW5ndGggPiBlcC0+ZXAubWF4cGFja2V0KQorCQkJcmV0dXJuIC1FTVNHU0laRTsKKwkJaXNfaXNvID0gMTsKKwl9CisKKwkvKiB0aGlzIGlzbid0IGJvZ3VzLCBidXQgT01BUCBETUEgaXNuJ3QgdGhlIG9ubHkgaGFyZHdhcmUgdG8KKwkgKiBoYXZlIGEgaGFyZCB0aW1lIHdpdGggcGFydGlhbCBwYWNrZXQgcmVhZHMuLi4gIHJlamVjdCBpdC4KKwkgKi8KKwlpZiAodXNlX2RtYQorCQkJJiYgZXAtPmhhc19kbWEKKwkJCSYmIGVwLT5iRW5kcG9pbnRBZGRyZXNzICE9IDAKKwkJCSYmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID09IDAKKwkJCSYmIChyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKSB7CisJCURCRygiJXMsIG5vIHBhcnRpYWwgcGFja2V0IE9VVCByZWFkc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisKKwl1ZGMgPSBlcC0+dWRjOworCWlmICghdWRjLT5kcml2ZXIgfHwgdWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCisJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpIHsKKwkJaWYgKHJlcS0+cmVxLmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCQlyZXEtPnJlcS5kbWEgPSBkbWFfbWFwX3NpbmdsZSgKKwkJCQllcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5idWYsCisJCQkJcmVxLT5yZXEubGVuZ3RoLAorCQkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCQlyZXEtPm1hcHBlZCA9IDE7CisJCX0gZWxzZSB7CisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgKKwkJCQllcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCQkoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJcmVxLT5tYXBwZWQgPSAwOworCQl9CisJfQorCisJVkRCRygiJXMgcXVldWUgcmVxICVwLCBsZW4gJWQgYnVmICVwXG4iLAorCQllcC0+ZXAubmFtZSwgX3JlcSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisKKwkvKiBtYXliZSBraWNrc3RhcnQgbm9uLWlzbyBpL28gcXVldWVzICovCisJaWYgKGlzX2lzbykKKwkJVURDX0lSUV9FTl9SRUcgfD0gVURDX1NPRl9JRTsKKwllbHNlIGlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCAmJiAhZXAtPmFja3dhaXQpIHsKKwkJaW50CWlzX2luOworCisJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyA9PSAwKSB7CisJCQlpZiAoIXVkYy0+ZXAwX3BlbmRpbmcgfHwgIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCQkJcmV0dXJuIC1FTDJITFQ7CisJCQl9CisKKwkJCS8qIGVtcHR5IERBVEEgc3RhZ2U/ICovCisJCQlpc19pbiA9IHVkYy0+ZXAwX2luOworCQkJaWYgKCFyZXEtPnJlcS5sZW5ndGgpIHsKKworCQkJCS8qIGNoaXAgYmVjYW1lIENPTkZJR1VSRUQgb3IgQUREUkVTU0VECisJCQkJICogZWFybGllcjsgZHJpdmVycyBtYXkgYWxyZWFkeSBoYXZlIHF1ZXVlZAorCQkJCSAqIHJlcXVlc3RzIHRvIG5vbi1jb250cm9sIGVuZHBvaW50cworCQkJCSAqLworCQkJCWlmICh1ZGMtPmVwMF9zZXRfY29uZmlnKSB7CisJCQkJCXUxNglpcnFfZW4gPSBVRENfSVJRX0VOX1JFRzsKKworCQkJCQlpcnFfZW4gfD0gVURDX0RTX0NIR19JRSB8IFVEQ19FUDBfSUU7CisJCQkJCWlmICghdWRjLT5lcDBfcmVzZXRfY29uZmlnKQorCQkJCQkJaXJxX2VuIHw9IFVEQ19FUE5fUlhfSUUKKwkJCQkJCQl8IFVEQ19FUE5fVFhfSUU7CisJCQkJCVVEQ19JUlFfRU5fUkVHID0gaXJxX2VuOworCQkJCX0KKworCQkJCS8qIFNUQVRVUyBpcyByZXZlcnNlIGRpcmVjdGlvbiAqLworCQkJCVVEQ19FUF9OVU1fUkVHID0gaXNfaW4KKwkJCQkJCT8gVURDX0VQX1NFTAorCQkJCQkJOiAoVURDX0VQX1NFTHxVRENfRVBfRElSKTsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQlVRENfRVBfTlVNX1JFRyA9IHVkYy0+ZXAwX2luID8gMCA6IFVEQ19FUF9ESVI7CisKKwkJCQkvKiBjbGVhbnVwICovCisJCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQlyZXEgPSAwOworCisJCQkvKiBub24tZW1wdHkgREFUQSBzdGFnZSAqLworCQkJfSBlbHNlIGlmIChpc19pbikgeworCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodWRjLT5lcDBfc2V0dXApCisJCQkJCWdvdG8gaXJxX3dhaXQ7CisJCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMOworCQkJfQorCQl9IGVsc2UgeworCQkJaXNfaW4gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU47CisJCQlpZiAoIWVwLT5oYXNfZG1hKQorCQkJCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CisJCQkvKiBpZiBJU086IFNPRiBJUlFzIG11c3QgYmUgZW5hYmxlZC9kaXNhYmxlZCEgKi8KKwkJfQorCisJCWlmIChlcC0+aGFzX2RtYSkKKwkJCShpc19pbiA/IG5leHRfaW5fZG1hIDogbmV4dF9vdXRfZG1hKShlcCwgcmVxKTsKKwkJZWxzZSBpZiAocmVxKSB7CisJCQlpZiAoKGlzX2luID8gd3JpdGVfZmlmbyA6IHJlYWRfZmlmbykoZXAsIHJlcSkgPT0gMSkKKwkJCQlyZXEgPSAwOworCQkJZGVzZWxlY3RfZXAoKTsKKwkJCWlmICghaXNfaW4pIHsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQl9CisJCQkvKiBJTjogNiB3YWl0IHN0YXRlcyBiZWZvcmUgaXQnbGwgdHggKi8KKwkJfQorCX0KKworaXJxX3dhaXQ6CisJLyogaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlICovCisJaWYgKHJlcSAhPSAwKQorCQlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIV9lcCB8fCAhX3JlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNlX2RtYSAmJiBlcC0+ZG1hX2NoYW5uZWwgJiYgZXAtPnF1ZXVlLm5leHQgPT0gJnJlcS0+cXVldWUpIHsKKwkJaW50IGNoYW5uZWwgPSBlcC0+ZG1hX2NoYW5uZWw7CisKKwkJLyogcmVsZWFzaW5nIHRoZSBjaGFubmVsIGNhbmNlbHMgdGhlIHJlcXVlc3QsCisJCSAqIHJlY2xhaW1pbmcgdGhlIGNoYW5uZWwgcmVzdGFydHMgdGhlIHF1ZXVlCisJCSAqLworCQlkbWFfY2hhbm5lbF9yZWxlYXNlKGVwKTsKKwkJZG1hX2NoYW5uZWxfY2xhaW0oZXAsIGNoYW5uZWwpOworCX0gZWxzZSAKKwkJZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzID0gLUVPUE5PVFNVUFA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyoganVzdCB1c2UgcHJvdG9jb2wgc3RhbGxzIGZvciBlcDA7IHJlYWwgaGFsdHMgYXJlIGFubm95aW5nICovCisJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzID09IDApIHsKKwkJaWYgKCFlcC0+dWRjLT5lcDBfcGVuZGluZykKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWVsc2UgaWYgKHZhbHVlKSB7CisJCQlpZiAoZXAtPnVkYy0+ZXAwX3NldF9jb25maWcpIHsKKwkJCQlXQVJOKCJlcnJvciBjaGFuZ2luZyBjb25maWc/XG4iKTsKKwkJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfQ0xSX0NGRzsKKwkJCX0KKwkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19TVEFMTF9DTUQ7CisJCQllcC0+dWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgLyogTk9QICovCisJCQlzdGF0dXMgPSAwOworCisJLyogb3RoZXJ3aXNlLCBhbGwgYWN0aXZlIG5vbi1JU08gZW5kcG9pbnRzIGNhbiBoYWx0ICovCisJfSBlbHNlIGlmIChlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MgJiYgZXAtPmRlc2MpIHsKKworCQkvKiBJTiBlbmRwb2ludHMgbXVzdCBhbHJlYWR5IGJlIGlkbGUgKi8KKwkJaWYgKChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJJiYgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsgCisJCQlzdGF0dXMgPSAtRUFHQUlOOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKHZhbHVlKSB7CisJCQlpbnQJY2hhbm5lbDsKKworCQkJaWYgKHVzZV9kbWEgJiYgZXAtPmRtYV9jaGFubmVsCisJCQkJCSYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJY2hhbm5lbCA9IGVwLT5kbWFfY2hhbm5lbDsKKwkJCQlkbWFfY2hhbm5lbF9yZWxlYXNlKGVwKTsKKwkJCX0gZWxzZQorCQkJCWNoYW5uZWwgPSAwOworCisJCQl1c2VfZXAoZXAsIFVEQ19FUF9TRUwpOworCQkJaWYgKFVEQ19TVEFUX0ZMR19SRUcgJiBVRENfTk9OX0lTT19GSUZPX0VNUFRZKSB7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCQkJCXN0YXR1cyA9IDA7CisJCQl9IGVsc2UKKwkJCQlzdGF0dXMgPSAtRUFHQUlOOworCQkJZGVzZWxlY3RfZXAoKTsKKworCQkJaWYgKGNoYW5uZWwpCisJCQkJZG1hX2NoYW5uZWxfY2xhaW0oZXAsIGNoYW5uZWwpOworCQl9IGVsc2UgeworCQkJdXNlX2VwKGVwLCAwKTsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19SRVNFVF9FUDsKKwkJCWVwLT5hY2t3YWl0ID0gMDsKKwkJCWlmICghKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpIHsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQl9CisJCX0KKwl9Citkb25lOgorCVZEQkcoIiVzICVzIGhhbHQgc3RhdCAlZFxuIiwgZXAtPmVwLm5hbWUsCisJCXZhbHVlID8gInNldCIgOiAiY2xlYXIiLCBzdGF0dXMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBvbWFwX2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IG9tYXBfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcF9lcF9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBvbWFwX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IG9tYXBfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IG9tYXBfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IG9tYXBfZnJlZV9idWZmZXIsCisKKwkucXVldWUJCT0gb21hcF9lcF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IG9tYXBfZXBfZGVxdWV1ZSwKKworCS5zZXRfaGFsdAk9IG9tYXBfZXBfc2V0X2hhbHQsCisJLy8gZmlmb19zdGF0dXMgLi4uIHJlcG9ydCBieXRlcyBpbiBmaWZvCisJLy8gZmlmb19mbHVzaCAuLi4gZmx1c2ggZmlmbworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBvbWFwX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXUxNglzb2YgPSBVRENfU09GX1JFRzsKKwlyZXR1cm4gKHNvZiAmIFVEQ19UU19PSykgPyAoc29mICYgVURDX1RTKSA6IC1FTDJOU1lOQzsKK30KKworc3RhdGljIGludCBvbWFwX3dha2V1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAtRUhPU1RVTlJFQUNIOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG9tYXBfdWRjLCBnYWRnZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCWlmICh1ZGMtPmRldnN0YXQgJiBVRENfU1VTKSB7CisJCS8qIE5PVEU6ICBPVEcgc3BlYyBlcnJhdHVtIHNheXMgdGhhdCBPVEcgZGV2aWNlcyBtYXkKKwkJICogaXNzdWUgd2FrZXVwcyB3aXRob3V0IGhvc3QgZW5hYmxlLgorCQkgKi8KKwkJaWYgKHVkYy0+ZGV2c3RhdCAmIChVRENfQl9ITlBfRU5BQkxFfFVEQ19SX1dLX09LKSkgeworCQkJREJHKCJyZW1vdGUgd2FrZXVwLi4uXG4iKTsKKwkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19STVRfV0tQOworCQkJcmV0dmFsID0gMDsKKwkJfQorCisJLyogTk9URTogIG5vbi1PVEcgc3lzdGVtcyBtYXkgdXNlIFNSUCBUT08uLi4gKi8KKwl9IGVsc2UgaWYgKCEodWRjLT5kZXZzdGF0ICYgVURDX0FUVCkpIHsKKwkJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCQlyZXR2YWwgPSBvdGdfc3RhcnRfc3JwKHVkYy0+dHJhbnNjZWl2ZXIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK29tYXBfc2V0X3NlbGZwb3dlcmVkKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19zZWxmcG93ZXJlZCkKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUxNgkJc3lzY29uMTsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJc3lzY29uMSA9IFVEQ19TWVNDT04xX1JFRzsKKwlpZiAoaXNfc2VsZnBvd2VyZWQpCisJCXN5c2NvbjEgfD0gVURDX1NFTEZfUFdSOworCWVsc2UKKwkJc3lzY29uMSAmPSB+VURDX1NFTEZfUFdSOworCVVEQ19TWVNDT04xX1JFRyA9IHN5c2NvbjE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYW5fcHVsbHVwKHN0cnVjdCBvbWFwX3VkYyAqdWRjKQoreworCXJldHVybiB1ZGMtPmRyaXZlciAmJiB1ZGMtPnNvZnRjb25uZWN0ICYmIHVkYy0+dmJ1c19hY3RpdmU7Cit9CisKK3N0YXRpYyB2b2lkIHB1bGx1cF9lbmFibGUoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisJVURDX1NZU0NPTjFfUkVHIHw9IFVEQ19QVUxMVVBfRU47CisjaWZuZGVmIENPTkZJR19VU0JfT1RHCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJT1RHX0NUUkxfUkVHIHw9IE9UR19CU0VTU1ZMRDsKKyNlbmRpZgorCVVEQ19JUlFfRU5fUkVHID0gVURDX0RTX0NIR19JRTsKK30KKworc3RhdGljIHZvaWQgcHVsbHVwX2Rpc2FibGUoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisjaWZuZGVmIENPTkZJR19VU0JfT1RHCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJT1RHX0NUUkxfUkVHICY9IH5PVEdfQlNFU1NWTEQ7CisjZW5kaWYKKwlVRENfSVJRX0VOX1JFRyA9IFVEQ19EU19DSEdfSUU7CisJVURDX1NZU0NPTjFfUkVHICY9IH5VRENfUFVMTFVQX0VOOworfQorCisvKgorICogQ2FsbGVkIGJ5IHdoYXRldmVyIGRldGVjdHMgVkJVUyBzZXNzaW9uczogIGV4dGVybmFsIHRyYW5zY2VpdmVyCisgKiBkcml2ZXIsIG9yIG1heWJlIEdQSU8wIFZCVVMgSVJRLiAgTWF5IHJlcXVlc3QgNDggTUh6IGNsb2NrLgorICovCitzdGF0aWMgaW50IG9tYXBfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJVkRCRygiVkJVUyAlc1xuIiwgaXNfYWN0aXZlID8gIm9uIiA6ICJvZmYiKTsKKwl1ZGMtPnZidXNfYWN0aXZlID0gKGlzX2FjdGl2ZSAhPSAwKTsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJLyogInNvZnR3YXJlIiBkZXRlY3QsIGlnbm9yZWQgaWYgIVZCVVNfTU9ERV8xNTEwICovCisJCWlmIChpc19hY3RpdmUpCisJCQlGVU5DX01VWF9DVFJMXzBfUkVHIHw9IFZCVVNfQ1RSTF8xNTEwOworCQllbHNlCisJCQlGVU5DX01VWF9DVFJMXzBfUkVHICY9IH5WQlVTX0NUUkxfMTUxMDsKKwl9CisJaWYgKGNhbl9wdWxsdXAodWRjKSkKKwkJcHVsbHVwX2VuYWJsZSh1ZGMpOworCWVsc2UKKwkJcHVsbHVwX2Rpc2FibGUodWRjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX3ZidXNfZHJhdyhzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcG93ZXIodWRjLT50cmFuc2NlaXZlciwgbUEpOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBvbWFwX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgaXNfb24pCit7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBvbWFwX3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJdWRjLT5zb2Z0Y29ubmVjdCA9IChpc19vbiAhPSAwKTsKKwlpZiAoY2FuX3B1bGx1cCh1ZGMpKQorCQlwdWxsdXBfZW5hYmxlKHVkYyk7CisJZWxzZQorCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIG9tYXBfZ2FkZ2V0X29wcyA9IHsKKwkuZ2V0X2ZyYW1lCQk9IG9tYXBfZ2V0X2ZyYW1lLAorCS53YWtldXAJCQk9IG9tYXBfd2FrZXVwLAorCS5zZXRfc2VsZnBvd2VyZWQJPSBvbWFwX3NldF9zZWxmcG93ZXJlZCwKKwkudmJ1c19zZXNzaW9uCQk9IG9tYXBfdmJ1c19zZXNzaW9uLAorCS52YnVzX2RyYXcJCT0gb21hcF92YnVzX2RyYXcsCisJLnB1bGx1cAkJCT0gb21hcF9wdWxsdXAsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkZXF1ZXVlIEFMTCByZXF1ZXN0czsgY2FsbGVyIGhvbGRzIHVkYy0+bG9jayAqLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3Qgb21hcF9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwllcC0+c3RvcHBlZCA9IDE7CisKKwlpZiAodXNlX2RtYSAmJiBlcC0+ZG1hX2NoYW5uZWwpCisJCWRtYV9jaGFubmVsX3JlbGVhc2UoZXApOworCisJdXNlX2VwKGVwLCAwKTsKKwlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmJiBlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfSEFMVDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KK30KKworLyogY2FsbGVyIGhvbGRzIHVkYy0+bG9jayAqLworc3RhdGljIHZvaWQgdWRjX3F1aWVzY2Uoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCisJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwludWtlKCZ1ZGMtPmVwWzBdLCAtRVNIVVRET1dOKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpCisJCW51a2UoZXAsIC1FU0hVVERPV04pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1cGRhdGVfb3RnKHN0cnVjdCBvbWFwX3VkYyAqdWRjKQoreworCXUxNglkZXZzdGF0OworCisJaWYgKCF1ZGMtPmdhZGdldC5pc19vdGcpCisJCXJldHVybjsKKworCWlmIChPVEdfQ1RSTF9SRUcgJiBPVEdfSUQpCisJCWRldnN0YXQgPSBVRENfREVWU1RBVF9SRUc7CisJZWxzZQorCQlkZXZzdGF0ID0gMDsKKworCXVkYy0+Z2FkZ2V0LmJfaG5wX2VuYWJsZSA9ICEhKGRldnN0YXQgJiBVRENfQl9ITlBfRU5BQkxFKTsKKwl1ZGMtPmdhZGdldC5hX2hucF9zdXBwb3J0ID0gISEoZGV2c3RhdCAmIFVEQ19BX0hOUF9TVVBQT1JUKTsKKwl1ZGMtPmdhZGdldC5hX2FsdF9obnBfc3VwcG9ydCA9ICEhKGRldnN0YXQgJiBVRENfQV9BTFRfSE5QX1NVUFBPUlQpOworCisJLyogRW5hYmxlIEhOUCBlYXJseSwgYXZvaWRpbmcgcmFjZXMgb24gc3VzcGVuZCBpcnEgcGF0aC4KKwkgKiBBU1NVTUVTIE9URyBzdGF0ZSBtYWNoaW5lIEJfQlVTX1JFUSBpbnB1dCBpcyB0cnVlLgorCSAqLworCWlmICh1ZGMtPmdhZGdldC5iX2hucF9lbmFibGUpCisJCU9UR19DVFJMX1JFRyA9IChPVEdfQ1RSTF9SRUcgfCBPVEdfQl9ITlBFTiB8IE9UR19CX0JVU1JFUSkKKwkJCQkmIH5PVEdfUFVMTFVQOworfQorCitzdGF0aWMgdm9pZCBlcDBfaXJxKHN0cnVjdCBvbWFwX3VkYyAqdWRjLCB1MTYgaXJxX3NyYykKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAwID0gJnVkYy0+ZXBbMF07CisJc3RydWN0IG9tYXBfcmVxCSpyZXEgPSAwOworCisJZXAwLT5pcnFzKys7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyByZXF1ZXN0cyBhbmQgdGhlbiBzY3J1YiBhbnkgcngvdHggc3RhdGUKKwkgKiBiZWZvcmUgc3RhcnRpbmcgdG8gaGFuZGxlIHRoZSBTRVRVUCByZXF1ZXN0LgorCSAqLworCWlmIChpcnFfc3JjICYgVURDX1NFVFVQKSB7CisJCXUxNglhY2sgPSBpcnFfc3JjICYgKFVEQ19FUDBfVFh8VURDX0VQMF9SWCk7CisKKwkJbnVrZShlcDAsIDApOworCQlpZiAoYWNrKSB7CisJCQlVRENfSVJRX1NSQ19SRUcgPSBhY2s7CisJCQlpcnFfc3JjID0gVURDX1NFVFVQOworCQl9CisJfQorCisJLyogSU4vT1VUIHBhY2tldHMgbWVhbiB3ZSdyZSBpbiB0aGUgREFUQSBvciBTVEFUVVMgc3RhZ2UuICAKKwkgKiBUaGlzIGRyaXZlciB1c2VzIG9ubHkgdXNlcyBwcm90b2NvbCBzdGFsbHMgKGVwMCBuZXZlciBoYWx0cyksCisJICogYW5kIGlmIHdlIGdvdCB0aGlzIGZhciB0aGUgZ2FkZ2V0IGRyaXZlciBhbHJlYWR5IGhhZCBhCisJICogY2hhbmNlIHRvIHN0YWxsLiAgVHJpZXMgdG8gYmUgZm9yZ2l2aW5nIG9mIGhvc3Qgb2RkaXRpZXMuCisJICoKKwkgKiBOT1RFOiAgdGhlIGxhc3QgY2hhbmNlIGdhZGdldCBkcml2ZXJzIGhhdmUgdG8gc3RhbGwgY29udHJvbAorCSAqIHJlcXVlc3RzIGlzIGR1cmluZyB0aGVpciByZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcDAtPnF1ZXVlKSkKKwkJcmVxID0gY29udGFpbmVyX29mKGVwMC0+cXVldWUubmV4dCwgc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisKKwkvKiBJTiA9PSBUWCB0byBob3N0ICovCisJaWYgKGlycV9zcmMgJiBVRENfRVAwX1RYKSB7CisJCWludAlzdGF0OworCisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19FUDBfVFg7CisJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQlzdGF0ID0gVURDX1NUQVRfRkxHX1JFRzsKKwkJaWYgKHN0YXQgJiBVRENfQUNLKSB7CisJCQlpZiAodWRjLT5lcDBfaW4pIHsKKwkJCQkvKiB3cml0ZSBuZXh0IElOIHBhY2tldCBmcm9tIHJlc3BvbnNlLAorCQkJCSAqIG9yIHNldCB1cCB0aGUgc3RhdHVzIHN0YWdlLgorCQkJCSAqLworCQkJCWlmIChyZXEpCisJCQkJCXN0YXQgPSB3cml0ZV9maWZvKGVwMCwgcmVxKTsKKwkJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCQkJaWYgKCFyZXEgJiYgdWRjLT5lcDBfcGVuZGluZykgeworCQkJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUw7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCQl1ZGMtPmVwMF9wZW5kaW5nID0gMDsKKwkJCQl9IC8qIGVsc2U6ICA2IHdhaXQgc3RhdGVzIGJlZm9yZSBpdCdsbCB0eCAqLworCQkJfSBlbHNlIHsKKwkJCQkvKiBhY2sgc3RhdHVzIHN0YWdlIG9mIE9VVCB0cmFuc2ZlciAqLworCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX0RJUjsKKwkJCQlpZiAocmVxKQorCQkJCQlkb25lKGVwMCwgcmVxLCAwKTsKKwkJCX0KKwkJCXJlcSA9IDA7CisJCX0gZWxzZSBpZiAoc3RhdCAmIFVEQ19TVEFMTCkgeworCQkJVURDX0NUUkxfUkVHID0gVURDX0NMUl9IQUxUOworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQl9IGVsc2UgeworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQl9CisJfQorCisJLyogT1VUID09IFJYIGZyb20gaG9zdCAqLworCWlmIChpcnFfc3JjICYgVURDX0VQMF9SWCkgeworCQlpbnQJc3RhdDsKKworCQlVRENfSVJRX1NSQ19SRUcgPSBVRENfRVAwX1JYOworCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUw7CisJCXN0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCQlpZiAoc3RhdCAmIFVEQ19BQ0spIHsKKwkJCWlmICghdWRjLT5lcDBfaW4pIHsKKwkJCQlzdGF0ID0gMDsKKwkJCQkvKiByZWFkIG5leHQgT1VUIHBhY2tldCBvZiByZXF1ZXN0LCBtYXliZQorCQkJCSAqIHJlYWN0aXZpdGluZyB0aGUgZmlmbzsgc3RhbGwgb24gZXJyb3JzLgorCQkJCSAqLworCQkJCWlmICghcmVxIHx8IChzdGF0ID0gcmVhZF9maWZvKGVwMCwgcmVxKSkgPCAwKSB7CisJCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19TVEFMTF9DTUQ7CisJCQkJCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCQkJCQlzdGF0ID0gMDsKKwkJCQl9IGVsc2UgaWYgKHN0YXQgPT0gMCkKKwkJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJCQkKKwkJCQkvKiBhY3RpdmF0ZSBzdGF0dXMgc3RhZ2UgKi8KKwkJCQlpZiAoc3RhdCA9PSAxKSB7CisJCQkJCWRvbmUoZXAwLCByZXEsIDApOworCQkJCQkvKiB0aGF0IG1heSBoYXZlIFNUQUxMZWQgZXAwLi4uICovCisJCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQkJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX0RJUjsKKwkJCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBhY2sgc3RhdHVzIHN0YWdlIG9mIElOIHRyYW5zZmVyICovCisJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCWlmIChyZXEpCisJCQkJCWRvbmUoZXAwLCByZXEsIDApOworCQkJfQorCQl9IGVsc2UgaWYgKHN0YXQgJiBVRENfU1RBTEwpIHsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfSEFMVDsKKwkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJfQorCX0KKworCS8qIFNFVFVQIHN0YXJ0cyBhbGwgY29udHJvbCB0cmFuc2ZlcnMgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19TRVRVUCkgeworCQl1bmlvbiB1IHsKKwkJCXUxNgkJCXdvcmRbNF07CisJCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXI7CisJCX0gdTsKKwkJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJc3RydWN0IG9tYXBfZXAJCSplcDsKKworCQkvKiByZWFkIHRoZSAobGF0ZXN0KSBTRVRVUCBtZXNzYWdlICovCisJCWRvIHsKKwkJCVVEQ19FUF9OVU1fUkVHID0gVURDX1NFVFVQX1NFTDsKKwkJCS8qIHR3byBieXRlcyBhdCBhIHRpbWUgKi8KKwkJCXUud29yZFswXSA9IFVEQ19EQVRBX1JFRzsKKwkJCXUud29yZFsxXSA9IFVEQ19EQVRBX1JFRzsKKwkJCXUud29yZFsyXSA9IFVEQ19EQVRBX1JFRzsKKwkJCXUud29yZFszXSA9IFVEQ19EQVRBX1JFRzsKKwkJCVVEQ19FUF9OVU1fUkVHID0gMDsKKwkJfSB3aGlsZSAoVURDX0lSUV9TUkNfUkVHICYgVURDX1NFVFVQKTsKKwkJbGUxNl90b19jcHVzICgmdS5yLndWYWx1ZSk7CisJCWxlMTZfdG9fY3B1cyAoJnUuci53SW5kZXgpOworCQlsZTE2X3RvX2NwdXMgKCZ1LnIud0xlbmd0aCk7CisKKwkJLyogRGVsZWdhdGUgYWxtb3N0IGFsbCBjb250cm9sIHJlcXVlc3RzIHRvIHRoZSBnYWRnZXQgZHJpdmVyLAorCQkgKiBleGNlcHQgZm9yIGEgaGFuZGZ1bCBvZiBjaDkgc3RhdHVzL2ZlYXR1cmUgcmVxdWVzdHMgdGhhdAorCQkgKiBoYXJkd2FyZSBkb2Vzbid0IGF1dG9kZWNvZGUgX2FuZF8gdGhlIGdhZGdldCBBUEkgaGlkZXMuCisJCSAqLworCQl1ZGMtPmVwMF9pbiA9ICh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgIT0gMDsKKwkJdWRjLT5lcDBfc2V0X2NvbmZpZyA9IDA7CisJCXVkYy0+ZXAwX3BlbmRpbmcgPSAxOworCQllcDAtPnN0b3BwZWQgPSAwOworCQllcDAtPmFja3dhaXQgPSAwOworCQlzd2l0Y2ggKHUuci5iUmVxdWVzdCkgeworCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCQkvKiB1ZGMgbmVlZHMgdG8ga25vdyB3aGVuIGVwICE9IDAgaXMgdmFsaWQgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9ERVZJQ0UpCisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCWlmICh1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQl1ZGMtPmVwMF9zZXRfY29uZmlnID0gMTsKKwkJCXVkYy0+ZXAwX3Jlc2V0X2NvbmZpZyA9ICh1LnIud1ZhbHVlID09IDApOworCQkJVkRCRygic2V0IGNvbmZpZyAlZFxuIiwgdS5yLndWYWx1ZSk7CisKKwkJCS8qIHVwZGF0ZSB1ZGMgTk9XIHNpbmNlIGdhZGdldCBkcml2ZXIgbWF5IHN0YXJ0CisJCQkgKiBxdWV1ZWluZyByZXF1ZXN0cyBpbW1lZGlhdGVseTsgY2xlYXIgY29uZmlnCisJCQkgKiBsYXRlciBpZiBpdCBmYWlscyB0aGUgcmVxdWVzdC4KKwkJCSAqLworCQkJaWYgKHVkYy0+ZXAwX3Jlc2V0X2NvbmZpZykKKwkJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfQ0xSX0NGRzsKKwkJCWVsc2UKKwkJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfREVWX0NGRzsKKwkJCXVwZGF0ZV9vdGcodWRjKTsKKwkJCWdvdG8gZGVsZWdhdGU7CisJCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQkJLyogY2xlYXIgZW5kcG9pbnQgaGFsdCAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0VORFBPSU5UKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQlpZiAodS5yLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVAorCQkJCQl8fCB1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQllcCA9ICZ1ZGMtPmVwW3Uuci53SW5kZXggJiAweGZdOworCQkJaWYgKGVwICE9IGVwMCkgeworCQkJCWlmICh1LnIud0luZGV4ICYgVVNCX0RJUl9JTikKKwkJCQkJZXAgKz0gMTY7CisJCQkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQworCQkJCQkJfHwgIWVwLT5kZXNjKQorCQkJCQlnb3RvIGRvX3N0YWxsOworCQkJCXVzZV9lcChlcCwgMCk7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1JFU0VUX0VQOworCQkJCWVwLT5hY2t3YWl0ID0gMDsKKwkJCQlpZiAoIShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSB7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQkJfQorCQkJfQorCQkJVkRCRygiJXMgaGFsdCBjbGVhcmVkIGJ5IGhvc3RcbiIsIGVwLT5uYW1lKTsKKwkJCWdvdG8gZXAwb3V0X3N0YXR1c19zdGFnZTsKKwkJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQkJLyogc2V0IGVuZHBvaW50IGhhbHQgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9FTkRQT0lOVCkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJaWYgKHUuci53VmFsdWUgIT0gVVNCX0VORFBPSU5UX0hBTFQKKwkJCQkJfHwgdS5yLndMZW5ndGggIT0gMCkKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJZXAgPSAmdWRjLT5lcFt1LnIud0luZGV4ICYgMHhmXTsKKwkJCWlmICh1LnIud0luZGV4ICYgVVNCX0RJUl9JTikKKwkJCQllcCArPSAxNjsKKwkJCWlmIChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCQkJfHwgZXAgPT0gZXAwIHx8ICFlcC0+ZGVzYykKKwkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpIHsKKwkJCQkvKiB0aGlzIGhhcyBydWRlIHNpZGUtZWZmZWN0cyAoYWJvcnRzKSBhbmQKKwkJCQkgKiBjYW4ndCByZWFsbHkgd29yayBpZiBETUEtSU4gaXMgYWN0aXZlCisJCQkJICovCisJCQkJREJHKCIlcyBob3N0IHNldF9oYWx0LCBOWUVUIFxuIiwgZXAtPm5hbWUpOworCQkJCWdvdG8gZG9fc3RhbGw7CisJCQl9CisJCQl1c2VfZXAoZXAsIDApOworCQkJLyogY2FuJ3QgaGFsdCBpZiBmaWZvIGlzbid0IGVtcHR5Li4uICovCisJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCQkJVkRCRygiJXMgaGFsdGVkIGJ5IGhvc3RcbiIsIGVwLT5uYW1lKTsKK2VwMG91dF9zdGF0dXNfc3RhZ2U6CisJCQlzdGF0dXMgPSAwOworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMfFVEQ19FUF9ESVI7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0VQOworCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCQkvKiByZXR1cm4gaW50ZXJmYWNlIHN0YXR1cy4gIGlmIHdlIHdlcmUgcGVkYW50aWMsCisJCQkgKiB3ZSdkIGRldGVjdCBub24tZXhpc3RlbnQgaW50ZXJmYWNlcywgYW5kIHN0YWxsLgorCQkJICovCisJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZQorCQkJCQkhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKSkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJLyogcmV0dXJuIHR3byB6ZXJvIGJ5dGVzICovCisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUx8VURDX0VQX0RJUjsKKwkJCVVEQ19EQVRBX1JFRyA9IDA7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCQlzdGF0dXMgPSAwOworCQkJVkRCRygiR0VUX1NUQVRVUywgaW50ZXJmYWNlICVkXG4iLCB1LnIud0luZGV4KTsKKwkJCS8qIG5leHQsIHN0YXR1cyBzdGFnZSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CitkZWxlZ2F0ZToKKwkJCS8qIGFjdGl2YXRlIHRoZSBlcDBvdXQgZmlmbyByaWdodCBhd2F5ICovCisJCQlpZiAoIXVkYy0+ZXAwX2luICYmIHUuci53TGVuZ3RoKSB7CisJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCX0KKworCQkJLyogZ2FkZ2V0IGRyaXZlcnMgc2VlIGNsYXNzL3ZlbmRvciBzcGVjaWZpYyByZXF1ZXN0cywKKwkJCSAqIHtTRVQsR0VUfV97SU5URVJGQUNFLERFU0NSSVBUT1IsQ09ORklHVVJBVElPTn0sCisJCQkgKiBhbmQgbW9yZQorCQkJICovCisJCQlWREJHKCJTRVRVUCAlMDJ4LiUwMnggdiUwNHggaSUwNHggbCUwNHhcbiIsCisJCQkJdS5yLmJSZXF1ZXN0VHlwZSwgdS5yLmJSZXF1ZXN0LAorCQkJCXUuci53VmFsdWUsIHUuci53SW5kZXgsIHUuci53TGVuZ3RoKTsKKworCQkJLyogVGhlIGdhZGdldCBkcml2ZXIgbWF5IHJldHVybiBhbiBlcnJvciBoZXJlLAorCQkJICogY2F1c2luZyBhbiBpbW1lZGlhdGUgcHJvdG9jb2wgc3RhbGwuCisJCQkgKgorCQkJICogRWxzZSBpdCBtdXN0IGlzc3VlIGEgcmVzcG9uc2UsIGVpdGhlciBxdWV1ZWluZyBhCisJCQkgKiByZXNwb25zZSBidWZmZXIgZm9yIHRoZSBEQVRBIHN0YWdlLCBvciBoYWx0aW5nIGVwMAorCQkJICogKGNhdXNpbmcgYSBwcm90b2NvbCBzdGFsbCwgbm90IGEgcmVhbCBoYWx0KS4gIEEKKwkJCSAqIHplcm8gbGVuZ3RoIGJ1ZmZlciBtZWFucyBubyBEQVRBIHN0YWdlLgorCQkJICoKKwkJCSAqIEl0J3MgZmluZSB0byBpc3N1ZSB0aGF0IHJlc3BvbnNlIGFmdGVyIHRoZSBzZXR1cCgpCisJCQkgKiBjYWxsIHJldHVybnMsIGFuZCB0aGlzIElSUSB3YXMgaGFuZGxlZC4KKwkJCSAqLworCQkJdWRjLT5lcDBfc2V0dXAgPSAxOworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQlzdGF0dXMgPSB1ZGMtPmRyaXZlci0+c2V0dXAgKCZ1ZGMtPmdhZGdldCwgJnUucik7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCQl1ZGMtPmVwMF9zZXR1cCA9IDA7CisJCX0KKworCQlpZiAoc3RhdHVzIDwgMCkgeworZG9fc3RhbGw6CisJCQlWREJHKCJyZXEgJTAyeC4lMDJ4IHByb3RvY29sIFNUQUxMOyBzdGF0ICVkXG4iLAorCQkJCQl1LnIuYlJlcXVlc3RUeXBlLCB1LnIuYlJlcXVlc3QsIHN0YXR1cyk7CisJCQlpZiAodWRjLT5lcDBfc2V0X2NvbmZpZykgeworCQkJCWlmICh1ZGMtPmVwMF9yZXNldF9jb25maWcpCisJCQkJCVdBUk4oImVycm9yIHJlc2V0dGluZyBjb25maWc/XG4iKTsKKwkJCQllbHNlCisJCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19DTFJfQ0ZHOworCQkJfQorCQkJVURDX1NZU0NPTjJfUkVHID0gVURDX1NUQUxMX0NNRDsKKwkJCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCQl9CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE9UR19GTEFHUyAoVURDX0JfSE5QX0VOQUJMRXxVRENfQV9ITlBfU1VQUE9SVHxVRENfQV9BTFRfSE5QX1NVUFBPUlQpCisKK3N0YXRpYyB2b2lkIGRldnN0YXRlX2lycShzdHJ1Y3Qgb21hcF91ZGMgKnVkYywgdTE2IGlycV9zcmMpCit7CisJdTE2CWRldnN0YXQsIGNoYW5nZTsKKworCWRldnN0YXQgPSBVRENfREVWU1RBVF9SRUc7CisJY2hhbmdlID0gZGV2c3RhdCBeIHVkYy0+ZGV2c3RhdDsKKwl1ZGMtPmRldnN0YXQgPSBkZXZzdGF0OworCisJaWYgKGNoYW5nZSAmIChVRENfVVNCX1JFU0VUfFVEQ19BVFQpKSB7CisJCXVkY19xdWllc2NlKHVkYyk7CisKKwkJaWYgKGNoYW5nZSAmIFVEQ19BVFQpIHsKKwkJCS8qIGRyaXZlciBmb3IgYW55IGV4dGVybmFsIHRyYW5zY2VpdmVyIHdpbGwKKwkJCSAqIGhhdmUgY2FsbGVkIG9tYXBfdmJ1c19zZXNzaW9uKCkgYWxyZWFkeQorCQkJICovCisJCQlpZiAoZGV2c3RhdCAmIFVEQ19BVFQpIHsKKwkJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJCVZEQkcoImNvbm5lY3RcbiIpOworCQkJCWlmICghdWRjLT50cmFuc2NlaXZlcikKKwkJCQkJcHVsbHVwX2VuYWJsZSh1ZGMpOworCQkJCS8vIGlmIChkcml2ZXItPmNvbm5lY3QpIGNhbGwgaXQKKwkJCX0gZWxzZSBpZiAodWRjLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCQkJCWlmICghdWRjLT50cmFuc2NlaXZlcikKKwkJCQkJcHVsbHVwX2Rpc2FibGUodWRjKTsKKwkJCQlEQkcoImRpc2Nvbm5lY3QsIGdhZGdldCAlc1xuIiwKKwkJCQkJdWRjLT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJCQlpZiAodWRjLT5kcml2ZXItPmRpc2Nvbm5lY3QpIHsKKwkJCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQkJCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisJCQkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJCQl9CisJCQl9CisJCQljaGFuZ2UgJj0gflVEQ19BVFQ7CisJCX0KKworCQlpZiAoY2hhbmdlICYgVURDX1VTQl9SRVNFVCkgeworCQkJaWYgKGRldnN0YXQgJiBVRENfVVNCX1JFU0VUKSB7CisJCQkJVkRCRygiUkVTRVQ9MVxuIik7CisJCQl9IGVsc2UgeworCQkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJSU5GTygiVVNCIHJlc2V0IGRvbmUsIGdhZGdldCAlc1xuIiwKKwkJCQkJdWRjLT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJCQkvKiBlcDAgdHJhZmZpYyBpcyBsZWdhbCBmcm9tIG5vdyBvbiAqLworCQkJCVVEQ19JUlFfRU5fUkVHID0gVURDX0RTX0NIR19JRSB8IFVEQ19FUDBfSUU7CisJCQl9CisJCQljaGFuZ2UgJj0gflVEQ19VU0JfUkVTRVQ7CisJCX0KKwl9CisJaWYgKGNoYW5nZSAmIFVEQ19TVVMpIHsKKwkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCQkvLyBGSVhNRSB0ZWxsIGlzcDEzMDEgdG8gc3VzcGVuZC9yZXN1bWUgKD8pCisJCQlpZiAoZGV2c3RhdCAmIFVEQ19TVVMpIHsKKwkJCQlWREJHKCJzdXNwZW5kXG4iKTsKKwkJCQl1cGRhdGVfb3RnKHVkYyk7CisJCQkJLyogSE5QIGNvdWxkIGJlIHVuZGVyIHdheSBhbHJlYWR5ICovCisJCQkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9GVUxMCisJCQkJCQkmJiB1ZGMtPmRyaXZlci0+c3VzcGVuZCkgeworCQkJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCQkJdWRjLT5kcml2ZXItPnN1c3BlbmQoJnVkYy0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJVkRCRygicmVzdW1lXG4iKTsKKwkJCQlpZiAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwKKwkJCQkJCSYmIHVkYy0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQkJCXVkYy0+ZHJpdmVyLT5yZXN1bWUoJnVkYy0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQkJCX0KKwkJCX0KKwkJfQorCQljaGFuZ2UgJj0gflVEQ19TVVM7CisJfQorCWlmICghY3B1X2lzX29tYXAxNXh4KCkgJiYgKGNoYW5nZSAmIE9UR19GTEFHUykpIHsKKwkJdXBkYXRlX290Zyh1ZGMpOworCQljaGFuZ2UgJj0gfk9UR19GTEFHUzsKKwl9CisKKwljaGFuZ2UgJj0gfihVRENfQ0ZHfFVEQ19ERUZ8VURDX0FERCk7CisJaWYgKGNoYW5nZSkKKwkJVkRCRygiZGV2c3RhdCAlMDN4LCBpZ25vcmUgY2hhbmdlICUwM3hcbiIsCisJCQlkZXZzdGF0LCAgY2hhbmdlKTsKKworCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19EU19DSEc7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKl91ZGMsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjID0gX3VkYzsKKwl1MTYJCWlycV9zcmM7CisJaXJxcmV0dXJuX3QJc3RhdHVzID0gSVJRX05PTkU7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlpcnFfc3JjID0gVURDX0lSUV9TUkNfUkVHOworCisJLyogRGV2aWNlIHN0YXRlIGNoYW5nZSAodXNiIGNoOSBzdHVmZikgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19EU19DSEcpIHsKKwkJZGV2c3RhdGVfaXJxKF91ZGMsIGlycV9zcmMpOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJaXJxX3NyYyAmPSB+VURDX0RTX0NIRzsKKwl9CisKKwkvKiBFUDAgY29udHJvbCB0cmFuc2ZlcnMgKi8KKwlpZiAoaXJxX3NyYyAmIChVRENfRVAwX1JYfFVEQ19TRVRVUHxVRENfRVAwX1RYKSkgeworCQllcDBfaXJxKF91ZGMsIGlycV9zcmMpOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJaXJxX3NyYyAmPSB+KFVEQ19FUDBfUlh8VURDX1NFVFVQfFVEQ19FUDBfVFgpOworCX0KKworCS8qIERNQSB0cmFuc2ZlciBjb21wbGV0aW9uICovCisJaWYgKHVzZV9kbWEgJiYgKGlycV9zcmMgJiAoVURDX1RYTl9ET05FfFVEQ19SWE5fQ05UfFVEQ19SWE5fRU9UKSkpIHsKKwkJZG1hX2lycShfdWRjLCBpcnFfc3JjKTsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJCWlycV9zcmMgJj0gfihVRENfVFhOX0RPTkV8VURDX1JYTl9DTlR8VURDX1JYTl9FT1QpOworCX0KKworCWlycV9zcmMgJj0gfihVRENfU09GfFVEQ19FUE5fVFh8VURDX0VQTl9SWCk7CisJaWYgKGlycV9zcmMpCisJCURCRygidWRjX2lycSwgdW5oYW5kbGVkICUwM3hcbiIsIGlycV9zcmMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogd29ya2Fyb3VuZCBmb3Igc2VlbWluZ2x5LWxvc3QgSVJRcyBmb3IgUlggQUNLcy4uLiAqLworI2RlZmluZSBQSU9fT1VUX1RJTUVPVVQJKGppZmZpZXMgKyBIWi8zKQorI2RlZmluZSBIQUxGX0ZVTEwoZikJKCEoKGYpJihVRENfTk9OX0lTT19GSUZPX0ZVTEx8VURDX05PTl9JU09fRklGT19FTVBUWSkpKQorCitzdGF0aWMgdm9pZCBwaW9fb3V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgX2VwKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9ICh2b2lkICopIF9lcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUxNgkJc3RhdF9mbGc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiBlcC0+YWNrd2FpdCkgeworCQl1c2VfZXAoZXAsIDApOworCQlzdGF0X2ZsZyA9IFVEQ19TVEFUX0ZMR19SRUc7CisKKwkJaWYgKChzdGF0X2ZsZyAmIFVEQ19BQ0spICYmICghKHN0YXRfZmxnICYgVURDX0ZJRk9fRU4pCisJCQkJfHwgKGVwLT5kb3VibGVfYnVmICYmIEhBTEZfRlVMTChzdGF0X2ZsZykpKSkgeworCQkJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwkJCVZEQkcoIiVzOiBsb3NlLCAlMDR4XG4iLCBlcC0+ZXAubmFtZSwgc3RhdF9mbGcpOworCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCVVEQ19FUF9OVU1fUkVHID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgfCBVRENfRVBfU0VMOworCQkJKHZvaWQpIHJlYWRfZmlmbyhlcCwgcmVxKTsKKwkJCVVEQ19FUF9OVU1fUkVHID0gZXAtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKKwkJfQorCX0KKwltb2RfdGltZXIoJmVwLT50aW1lciwgUElPX09VVF9USU1FT1VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF91ZGNfcGlvX2lycShpbnQgaXJxLCB2b2lkICpfZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwl1MTYJCWVwbl9zdGF0LCBpcnFfc3JjOworCWlycXJldHVybl90CXN0YXR1cyA9IElSUV9OT05FOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwlpbnQJCWVwbnVtOworCXN0cnVjdCBvbWFwX3VkYwkqdWRjID0gX2RldjsKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCWVwbl9zdGF0ID0gVURDX0VQTl9TVEFUX1JFRzsKKwlpcnFfc3JjID0gVURDX0lSUV9TUkNfUkVHOworCisJLyogaGFuZGxlIE9VVCBmaXJzdCwgdG8gYXZvaWQgc29tZSB3YXN0ZWZ1bCBOQUtzICovCisJaWYgKGlycV9zcmMgJiBVRENfRVBOX1JYKSB7CisJCWVwbnVtID0gKGVwbl9zdGF0ID4+IDgpICYgMHgwZjsKKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX0VQTl9SWDsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJCWVwID0gJnVkYy0+ZXBbZXBudW1dOworCQllcC0+aXJxcysrOworCisJCVVEQ19FUF9OVU1fUkVHID0gZXBudW0gfCBVRENfRVBfU0VMOworCQllcC0+Zm5mID0gMDsKKwkJaWYgKChVRENfU1RBVF9GTEdfUkVHICYgVURDX0FDSykpIHsKKwkJCWVwLT5hY2t3YWl0LS07CisJCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQlpbnQgc3RhdDsKKwkJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCQlzdGF0ID0gcmVhZF9maWZvKGVwLCByZXEpOworCQkJCWlmICghZXAtPmRvdWJsZV9idWYpCisJCQkJCWVwLT5mbmYgPSAxOworCQkJfQorCQl9CisJCS8qIG1pbiA2IGNsb2NrIGRlbGF5IGJlZm9yZSBjbGVhcmluZyBFUF9TRUwgLi4uICovCisJCWVwbl9zdGF0ID0gVURDX0VQTl9TVEFUX1JFRzsKKwkJZXBuX3N0YXQgPSBVRENfRVBOX1NUQVRfUkVHOworCQlVRENfRVBfTlVNX1JFRyA9IGVwbnVtOworCisJCS8qIGVuYWJsaW5nIGZpZm8gX2FmdGVyXyBjbGVhcmluZyBBQ0ssIGNvbnRyYXJ5IHRvIGRvY3MsCisJCSAqIHJlZHVjZXMgbG9zc2FnZTsgdGltZXIgc3RpbGwgbmVlZGVkIHRob3VnaCAoc2lnaCkuCisJCSAqLworCQlpZiAoZXAtPmZuZikgeworCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCX0KKwkJbW9kX3RpbWVyKCZlcC0+dGltZXIsIFBJT19PVVRfVElNRU9VVCk7CisJfQorCisJLyogdGhlbiBJTiB0cmFuc2ZlcnMgKi8KKwllbHNlIGlmIChpcnFfc3JjICYgVURDX0VQTl9UWCkgeworCQllcG51bSA9IGVwbl9zdGF0ICYgMHgwZjsKKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX0VQTl9UWDsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJCWVwID0gJnVkYy0+ZXBbMTYgKyBlcG51bV07CisJCWVwLT5pcnFzKys7CisKKwkJVURDX0VQX05VTV9SRUcgPSBlcG51bSB8IFVEQ19FUF9ESVIgfCBVRENfRVBfU0VMOworCQlpZiAoKFVEQ19TVEFUX0ZMR19SRUcgJiBVRENfQUNLKSkgeworCQkJZXAtPmFja3dhaXQgPSAwOworCQkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJCQkJKHZvaWQpIHdyaXRlX2ZpZm8oZXAsIHJlcSk7CisJCQl9CisJCX0KKwkJLyogbWluIDYgY2xvY2sgZGVsYXkgYmVmb3JlIGNsZWFyaW5nIEVQX1NFTCAuLi4gKi8KKwkJZXBuX3N0YXQgPSBVRENfRVBOX1NUQVRfUkVHOworCQllcG5fc3RhdCA9IFVEQ19FUE5fU1RBVF9SRUc7CisJCVVEQ19FUF9OVU1fUkVHID0gZXBudW0gfCBVRENfRVBfRElSOworCQkvKiB0aGVuIDYgY2xvY2tzIGJlZm9yZSBpdCdkIHR4ICovCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2lmZGVmCVVTRV9JU08KK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF91ZGNfaXNvX2lycShpbnQgaXJxLCB2b2lkICpfZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYyA9IF9kZXY7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCWludAkJcGVuZGluZyA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCS8qIGhhbmRsZSBhbGwgbm9uLURNQSBJU08gdHJhbnNmZXJzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZ1ZGMtPmlzbywgaXNvKSB7CisJCXUxNgkJc3RhdDsKKwkJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisKKwkJaWYgKGVwLT5oYXNfZG1hIHx8IGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQljb250aW51ZTsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisKKwkJdXNlX2VwKGVwLCBVRENfRVBfU0VMKTsKKwkJc3RhdCA9IFVEQ19TVEFUX0ZMR19SRUc7CisKKwkJLyogTk9URTogbGlrZSB0aGUgb3RoZXIgY29udHJvbGxlciBkcml2ZXJzLCB0aGlzIGlzbid0CisJCSAqIGN1cnJlbnRseSByZXBvcnRpbmcgbG9zdCBvciBkYW1hZ2VkIGZyYW1lcy4KKwkJICovCisJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmIChzdGF0ICYgVURDX01JU1NfSU4pCisJCQkJLyogZG9uZShlcCwgcmVxLCAtRVBST1RPKSAqLzsKKwkJCWVsc2UKKwkJCQl3cml0ZV9maWZvKGVwLCByZXEpOworCQl9IGVsc2UgeworCQkJaW50CXN0YXR1cyA9IDA7CisKKwkJCWlmIChzdGF0ICYgVURDX05PX1JYUEFDS0VUKQorCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQllbHNlIGlmIChzdGF0ICYgVURDX0lTT19FUlIpCisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJCWVsc2UgaWYgKHN0YXQgJiBVRENfREFUQV9GTFVTSCkKKwkJCQlzdGF0dXMgPSAtRU5PU1I7CisKKwkJCWlmIChzdGF0dXMpCisJCQkJLyogZG9uZShlcCwgcmVxLCBzdGF0dXMpICovOworCQkJZWxzZQorCQkJCXJlYWRfZmlmbyhlcCwgcmVxKTsKKwkJfQorCQlkZXNlbGVjdF9lcCgpOworCQkvKiA2IHdhaXQgc3RhdGVzIGJlZm9yZSBuZXh0IEVQICovCisKKwkJZXAtPmlycXMrKzsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJcGVuZGluZyA9IDE7CisJfQorCWlmICghcGVuZGluZykKKwkJVURDX0lSUV9FTl9SRUcgJj0gflVEQ19TT0ZfSUU7CisJVURDX0lSUV9TUkNfUkVHID0gVURDX1NPRjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IG9tYXBfdWRjICp1ZGM7CisKK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50CQlzdGF0dXMgPSAtRU5PREVWOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJLyogYmFzaWMgc2FuaXR5IHRlc3RzICovCisJaWYgKCF1ZGMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyCisJCQkvLyBGSVhNRSBpZiBvdGcsIGNoZWNrOiAgZHJpdmVyLT5pc19vdGcKKwkJCXx8IGRyaXZlci0+c3BlZWQgPCBVU0JfU1BFRURfRlVMTAorCQkJfHwgIWRyaXZlci0+YmluZAorCQkJfHwgIWRyaXZlci0+dW5iaW5kCisJCQl8fCAhZHJpdmVyLT5zZXR1cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJaWYgKHVkYy0+ZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIHJlc2V0IHN0YXRlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZ1ZGMtPmdhZGdldC5lcF9saXN0LCBlcC5lcF9saXN0KSB7CisJCWVwLT5pcnFzID0gMDsKKwkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCWNvbnRpbnVlOworCQl1c2VfZXAoZXAsIDApOworCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0hBTFQ7CisJfQorCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCXVkYy0+ZXBbMF0uaXJxcyA9IDA7CisJdWRjLT5zb2Z0Y29ubmVjdCA9IDE7CisKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgKi8KKwlkcml2ZXItPmRyaXZlci5idXMgPSAwOworCXVkYy0+ZHJpdmVyID0gZHJpdmVyOworCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlzdGF0dXMgPSBkcml2ZXItPmJpbmQgKCZ1ZGMtPmdhZGdldCk7CisJaWYgKHN0YXR1cykgeworCQlEQkcoImJpbmQgdG8gJXMgLS0+ICVkXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lLCBzdGF0dXMpOworCQl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKKwkJdWRjLT5kcml2ZXIgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCURCRygiYm91bmQgdG8gZHJpdmVyICVzXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19JUlFfU1JDX01BU0s7CisKKwkvKiBjb25uZWN0IHRvIGJ1cyB0aHJvdWdoIHRyYW5zY2VpdmVyICovCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpIHsKKwkJc3RhdHVzID0gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsICZ1ZGMtPmdhZGdldCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlFUlIoImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOworCQkJZHJpdmVyLT51bmJpbmQgKCZ1ZGMtPmdhZGdldCk7CisJCQl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKKwkJCXVkYy0+ZHJpdmVyID0gMDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjYW5fcHVsbHVwKHVkYykpCisJCQlwdWxsdXBfZW5hYmxlICh1ZGMpOworCQllbHNlCisJCQlwdWxsdXBfZGlzYWJsZSAodWRjKTsKKwl9CisKKwkvKiBib2FyZHMgdGhhdCBkb24ndCBoYXZlIFZCVVMgc2Vuc2luZyBjYW4ndCBhdXRvZ2F0ZSA0OE1IejsKKwkgKiBjYW4ndCBlbnRlciBkZWVwIHNsZWVwIHdoaWxlIGEgZ2FkZ2V0IGRyaXZlciBpcyBhY3RpdmUuCisJICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSB8fCBtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCW9tYXBfdmJ1c19zZXNzaW9uKCZ1ZGMtPmdhZGdldCwgMSk7CisKK2RvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXN0YXR1cyA9IC1FTk9ERVY7CisKKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IHVkYy0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgfHwgbWFjaGluZV9pc19vbWFwX29zaygpKQorCQlvbWFwX3ZidXNfc2Vzc2lvbigmdWRjLT5nYWRnZXQsIDApOworCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCSh2b2lkKSBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgMCk7CisJZWxzZQorCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXVkY19xdWllc2NlKHVkYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOworCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOworCXVkYy0+ZHJpdmVyID0gMDsKKworCisJREJHKCJ1bnJlZ2lzdGVyZWQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19maWxlbmFtZVtdID0gImRyaXZlci91ZGMiOworCisjZGVmaW5lIEZPVVJCSVRTICIlcyVzJXMlcyIKKyNkZWZpbmUgRUlHSFRCSVRTIEZPVVJCSVRTIEZPVVJCSVRTCisKK3N0YXRpYyB2b2lkIHByb2NfZXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBvbWFwX2VwICplcCkKK3sKKwl1MTYJCXN0YXRfZmxnOworCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCWNoYXIJCWJ1ZlsyMF07CisKKwl1c2VfZXAoZXAsIDApOworCisJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiglY3hkbWElZCBsY2glZCkgIiwKKwkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gJ3QnIDogJ3InLAorCQkJZXAtPmRtYV9jaGFubmVsIC0gMSwgZXAtPmxjaCk7CisJZWxzZQorCQlidWZbMF0gPSAwOworCisJc3RhdF9mbGcgPSBVRENfU1RBVF9GTEdfUkVHOworCXNlcV9wcmludGYocywKKwkJIlxuJXMgJXMlcyVzaXJxcyAlbGQgc3RhdCAlMDR4ICIgRUlHSFRCSVRTIEZPVVJCSVRTICIlc1xuIiwKKwkJZXAtPm5hbWUsIGJ1ZiwKKwkJZXAtPmRvdWJsZV9idWYgPyAiZGJ1ZiAiIDogIiIsCisJCSh7Y2hhciAqczsgc3dpdGNoKGVwLT5hY2t3YWl0KXsKKwkJY2FzZSAwOiBzID0gIiI7IGJyZWFrOworCQljYXNlIDE6IHMgPSAiKGFja3cpICI7IGJyZWFrOworCQljYXNlIDI6IHMgPSAiKGFja3cyKSAiOyBicmVhazsKKwkJZGVmYXVsdDogcyA9ICIoPykgIjsgYnJlYWs7CisJCX0gczt9KSwKKwkJZXAtPmlycXMsIHN0YXRfZmxnLAorCQkoc3RhdF9mbGcgJiBVRENfTk9fUlhQQUNLRVQpID8gIm5vX3J4cGFja2V0ICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX01JU1NfSU4pID8gIm1pc3NfaW4gIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfREFUQV9GTFVTSCkgPyAiZGF0YV9mbHVzaCAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19JU09fRVJSKSA/ICJpc29fZXJyICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX0lTT19GSUZPX0VNUFRZKSA/ICJpc29fZmlmb19lbXB0eSAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19JU09fRklGT19GVUxMKSA/ICJpc29fZmlmb19mdWxsICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX0VQX0hBTFRFRCkgPyAiSEFMVCAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19TVEFMTCkgPyAiU1RBTEwgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfTkFLKSA/ICJOQUsgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfQUNLKSA/ICJBQ0sgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfRklGT19FTikgPyAiZmlmb19lbiAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19OT05fSVNPX0ZJRk9fRU1QVFkpID8gImZpZm9fZW1wdHkgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfTk9OX0lTT19GSUZPX0ZVTEwpID8gImZpZm9fZnVsbCAiIDogIiIpOworCisJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQlzZXFfcHJpbnRmKHMsICJcdChxdWV1ZSBlbXB0eSlcbiIpOworCWVsc2UKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQkJdW5zaWduZWQJbGVuZ3RoID0gcmVxLT5yZXEuYWN0dWFsOworCisJCQlpZiAodXNlX2RtYSAmJiBidWZbMF0pIHsKKwkJCQlsZW5ndGggKz0gKChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCQk/IGRtYV9zcmNfbGVuIDogZG1hX2Rlc3RfbGVuKQorCQkJCQkoZXAsIHJlcS0+cmVxLmRtYSArIGxlbmd0aCk7CisJCQkJYnVmWzBdID0gMDsKKwkJCX0KKwkJCXNlcV9wcmludGYocywgIlx0cmVxICVwIGxlbiAlZC8lZCBidWYgJXBcbiIsCisJCQkJCSZyZXEtPnJlcSwgbGVuZ3RoLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CisJCX0KK30KKworc3RhdGljIGNoYXIgKnRyeF9tb2RlKHVuc2lnbmVkIG0sIGludCBlbmFibGVkKQoreworCXN3aXRjaCAobSkgeworCWNhc2UgMDoJCXJldHVybiBlbmFibGVkID8gIio2d2lyZSIgOiAidW51c2VkIjsKKwljYXNlIDE6CQlyZXR1cm4gIjR3aXJlIjsKKwljYXNlIDI6CQlyZXR1cm4gIjN3aXJlIjsKKwljYXNlIDM6IAlyZXR1cm4gIjZ3aXJlIjsKKwlkZWZhdWx0OglyZXR1cm4gInVua25vd24iOworCX0KK30KKworc3RhdGljIGludCBwcm9jX290Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcykKK3sKKwl1MzIJCXRtcDsKKwl1MzIJCXRyYW5zOworCisJdG1wID0gT1RHX1JFVl9SRUc7CisJdHJhbnMgPSBVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUc7CisJc2VxX3ByaW50ZihzLCAiT1RHIHJldiAlZC4lZCwgdHJhbnNjZWl2ZXJfY3RybCAlMDN4XG4iLAorCQl0bXAgPj4gNCwgdG1wICYgMHhmLCB0cmFucyk7CisJdG1wID0gT1RHX1NZU0NPTl8xX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfc3lzY29uMSAlMDh4IHVzYjIgJXMsIHVzYjEgJXMsIHVzYjAgJXMsIgorCQkJRk9VUkJJVFMgIlxuIiwgdG1wLAorCQl0cnhfbW9kZShVU0IyX1RSWF9NT0RFKHRtcCksIHRyYW5zICYgQ09ORl9VU0IyX1VOSV9SKSwKKwkJdHJ4X21vZGUoVVNCMV9UUlhfTU9ERSh0bXApLCB0cmFucyAmIENPTkZfVVNCMV9VTklfUiksCisJCShVU0IwX1RSWF9NT0RFKHRtcCkgPT0gMCkKKwkJCT8gImludGVybmFsIgorCQkJOiB0cnhfbW9kZShVU0IwX1RSWF9NT0RFKHRtcCksIDEpLAorCQkodG1wICYgT1RHX0lETEVfRU4pID8gIiAhb3RnIiA6ICIiLAorCQkodG1wICYgSFNUX0lETEVfRU4pID8gIiAhaG9zdCIgOiAiIiwKKwkJKHRtcCAmIERFVl9JRExFX0VOKSA/ICIgIWRldiIgOiAiIiwKKwkJKHRtcCAmIE9UR19SRVNFVF9ET05FKSA/ICIgcmVzZXRfZG9uZSIgOiAiIHJlc2V0X2FjdGl2ZSIpOworCXRtcCA9IE9UR19TWVNDT05fMl9SRUc7CisJc2VxX3ByaW50ZihzLCAib3RnX3N5c2NvbjIgJTA4eCVzIiBFSUdIVEJJVFMKKwkJCSIgYl9hc2VfYnJzdD0lZCBobWM9JWRcbiIsIHRtcCwKKwkJKHRtcCAmIE9UR19FTikgPyAiIG90Z19lbiIgOiAiIiwKKwkJKHRtcCAmIFVTQlhfU1lOQ0hSTykgPyAiIHN5bmNocm8iIDogIiIsCisJCS8vIG11Y2ggbW9yZSBTUlAgc3R1ZmYKKwkJKHRtcCAmIFNSUF9EQVRBKSA/ICIgc3JwX2RhdGEiIDogIiIsCisJCSh0bXAgJiBTUlBfVkJVUykgPyAiIHNycF92YnVzIiA6ICIiLAorCQkodG1wICYgT1RHX1BBREVOKSA/ICIgb3RnX3BhZGVuIiA6ICIiLAorCQkodG1wICYgSE1DX1BBREVOKSA/ICIgaG1jX3BhZGVuIiA6ICIiLAorCQkodG1wICYgVUhPU1RfRU4pID8gIiB1aG9zdF9lbiIgOiAiIiwKKwkJKHRtcCAmIEhNQ19UTExTUEVFRCkgPyAiIHRsbHNwZWVkIiA6ICIiLAorCQkodG1wICYgSE1DX1RMTEFUVEFDSCkgPyAiIHRsbGF0dGFjaCIgOiAiIiwKKwkJQl9BU0VfQlJTVCh0bXApLAorCQlPVEdfSE1DKHRtcCkpOworCXRtcCA9IE9UR19DVFJMX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfY3RybCAgICAlMDZ4IiBFSUdIVEJJVFMgRUlHSFRCSVRTICIlc1xuIiwgdG1wLAorCQkodG1wICYgT1RHX0FTRVNTVkxEKSA/ICIgYXNlc3MiIDogIiIsCisJCSh0bXAgJiBPVEdfQlNFU1NFTkQpID8gIiBic2Vzc19lbmQiIDogIiIsCisJCSh0bXAgJiBPVEdfQlNFU1NWTEQpID8gIiBic2VzcyIgOiAiIiwKKwkJKHRtcCAmIE9UR19WQlVTVkxEKSA/ICIgdmJ1cyIgOiAiIiwKKwkJKHRtcCAmIE9UR19JRCkgPyAiIGlkIiA6ICIiLAorCQkodG1wICYgT1RHX0RSSVZFUl9TRUwpID8gIiBERVZJQ0UiIDogIiBIT1NUIiwKKwkJKHRtcCAmIE9UR19BX1NFVEJfSE5QRU4pID8gIiBhX3NldGJfaG5wZW4iIDogIiIsCisJCSh0bXAgJiBPVEdfQV9CVVNSRVEpID8gIiBhX2J1cyIgOiAiIiwKKwkJKHRtcCAmIE9UR19CX0hOUEVOKSA/ICIgYl9obnBlbiIgOiAiIiwKKwkJKHRtcCAmIE9UR19CX0JVU1JFUSkgPyAiIGJfYnVzIiA6ICIiLAorCQkodG1wICYgT1RHX0JVU0RST1ApID8gIiBidXNkcm9wIiA6ICIiLAorCQkodG1wICYgT1RHX1BVTExET1dOKSA/ICIgZG93biIgOiAiIiwKKwkJKHRtcCAmIE9UR19QVUxMVVApID8gIiB1cCIgOiAiIiwKKwkJKHRtcCAmIE9UR19EUlZfVkJVUykgPyAiIGRydiIgOiAiIiwKKwkJKHRtcCAmIE9UR19QRF9WQlVTKSA/ICIgcGRfdmIiIDogIiIsCisJCSh0bXAgJiBPVEdfUFVfVkJVUykgPyAiIHB1X3ZiIiA6ICIiLAorCQkodG1wICYgT1RHX1BVX0lEKSA/ICIgcHVfaWQiIDogIiIKKwkJKTsKKwl0bXAgPSBPVEdfSVJRX0VOX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfaXJxX2VuICAlMDR4IiAiXG4iLCB0bXApOworCXRtcCA9IE9UR19JUlFfU1JDX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfaXJxX3NyYyAlMDR4IiAiXG4iLCB0bXApOworCXRtcCA9IE9UR19PVVRDVFJMX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfb3V0Y3RybCAlMDR4IiAiXG4iLCB0bXApOworCXRtcCA9IE9UR19URVNUX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfdGVzdCAgICAlMDR4IiAiXG4iLCB0bXApOworfQorCitzdGF0aWMgaW50IHByb2NfdWRjX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpfKQoreworCXUzMgkJdG1wOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJc2VxX3ByaW50ZihzLCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04KKyNpZmRlZglVU0VfSVNPCisJCSIgKGlzbykiCisjZW5kaWYKKwkJIiVzXG4iLAorCQlkcml2ZXJfZGVzYywKKwkJdXNlX2RtYSA/ICAiIChkbWEpIiA6ICIiKTsKKworCXRtcCA9IFVEQ19SRVZfUkVHICYgMHhmZjsgCisJc2VxX3ByaW50ZihzLAorCQkiVURDIHJldiAlZC4lZCwgZmlmbyBtb2RlICVkLCBnYWRnZXQgJXNcbiIKKwkJImhtYyAlZCwgdHJhbnNjZWl2ZXIgJXNcbiIsCisJCXRtcCA+PiA0LCB0bXAgJiAweGYsCisJCWZpZm9fbW9kZSwKKwkJdWRjLT5kcml2ZXIgPyB1ZGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiKG5vbmUpIiwKKwkJSE1DLAorCQl1ZGMtPnRyYW5zY2VpdmVyID8gdWRjLT50cmFuc2NlaXZlci0+bGFiZWwgOiAiKG5vbmUpIik7CisJc2VxX3ByaW50ZihzLCAiVUxQRCBjb250cm9sICUwNHggcmVxICUwNHggc3RhdHVzICUwNHhcbiIsCisJCV9fUkVHMTYoVUxQRF9DTE9DS19DVFJMKSwKKwkJX19SRUcxNihVTFBEX1NPRlRfUkVRKSwKKwkJX19SRUcxNihVTFBEX1NUQVRVU19SRVEpKTsKKworCS8qIE9URyBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpCisJCXByb2Nfb3RnX3Nob3cocyk7CisKKwl0bXAgPSBVRENfU1lTQ09OMV9SRUc7CisJc2VxX3ByaW50ZihzLCAiXG5zeXNjb24xICAgICAlMDR4IiBFSUdIVEJJVFMgIlxuIiwgdG1wLAorCQkodG1wICYgVURDX0NGR19MT0NLKSA/ICIgY2ZnX2xvY2siIDogIiIsCisJCSh0bXAgJiBVRENfREFUQV9FTkRJQU4pID8gIiBkYXRhX2VuZGlhbiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19ETUFfRU5ESUFOKSA/ICIgZG1hX2VuZGlhbiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19OQUtfRU4pID8gIiBuYWsiIDogIiIsCisJCSh0bXAgJiBVRENfQVVUT0RFQ09ERV9ESVMpID8gIiBhdXRvZGVjb2RlX2RpcyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19TRUxGX1BXUikgPyAiIHNlbGZfcHdyIiA6ICIiLAorCQkodG1wICYgVURDX1NPRkZfRElTKSA/ICIgc29mZl9kaXMiIDogIiIsCisJCSh0bXAgJiBVRENfUFVMTFVQX0VOKSA/ICIgUFVMTFVQIiA6ICIiKTsKKwkvLyBzeXNjb24yIGlzIHdyaXRlLW9ubHkKKworCS8qIFVEQyBjb250cm9sbGVyIHJlZ2lzdGVycyAqLworCWlmICghKHRtcCAmIFVEQ19QVUxMVVBfRU4pKSB7CisJCXNlcV9wcmludGYocywgIihzdXNwZW5kZWQpXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IFVEQ19ERVZTVEFUX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJkZXZzdGF0ICAgICAlMDR4IiBFSUdIVEJJVFMgIiVzJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ19CX0hOUF9FTkFCTEUpID8gIiBiX2hucCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BX0hOUF9TVVBQT1JUKSA/ICIgYV9obnAiIDogIiIsCisJCSh0bXAgJiBVRENfQV9BTFRfSE5QX1NVUFBPUlQpID8gIiBhX2FsdF9obnAiIDogIiIsCisJCSh0bXAgJiBVRENfUl9XS19PSykgPyAiIHJfd2tfb2siIDogIiIsCisJCSh0bXAgJiBVRENfVVNCX1JFU0VUKSA/ICIgdXNiX3Jlc2V0IiA6ICIiLAorCQkodG1wICYgVURDX1NVUykgPyAiIFNVUyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19DRkcpID8gIiBDRkciIDogIiIsCisJCSh0bXAgJiBVRENfQUREKSA/ICIgQUREIiA6ICIiLAorCQkodG1wICYgVURDX0RFRikgPyAiIERFRiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BVFQpID8gIiBBVFQiIDogIiIpOworCXNlcV9wcmludGYocywgInNvZiAgICAgICAgICUwNHhcbiIsIFVEQ19TT0ZfUkVHKTsKKwl0bXAgPSBVRENfSVJRX0VOX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJpcnFfZW4gICAgICAlMDR4IiBGT1VSQklUUyAiJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ19TT0ZfSUUpID8gIiBzb2YiIDogIiIsCisJCSh0bXAgJiBVRENfRVBOX1JYX0lFKSA/ICIgZXBuX3J4IiA6ICIiLAorCQkodG1wICYgVURDX0VQTl9UWF9JRSkgPyAiIGVwbl90eCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19EU19DSEdfSUUpID8gIiBkc19jaGciIDogIiIsCisJCSh0bXAgJiBVRENfRVAwX0lFKSA/ICIgZXAwIiA6ICIiKTsKKwl0bXAgPSBVRENfSVJRX1NSQ19SRUc7CisJc2VxX3ByaW50ZihzLCAiaXJxX3NyYyAgICAgJTA0eCIgRUlHSFRCSVRTICIlcyVzXG4iLCB0bXAsCisJCSh0bXAgJiBVRENfVFhOX0RPTkUpID8gIiB0eG5fZG9uZSIgOiAiIiwKKwkJKHRtcCAmIFVEQ19SWE5fQ05UKSA/ICIgcnhuX2NudCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19SWE5fRU9UKSA/ICIgcnhuX2VvdCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19TT0YpID8gIiBzb2YiIDogIiIsCisJCSh0bXAgJiBVRENfRVBOX1JYKSA/ICIgZXBuX3J4IiA6ICIiLAorCQkodG1wICYgVURDX0VQTl9UWCkgPyAiIGVwbl90eCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19EU19DSEcpID8gIiBkc19jaGciIDogIiIsCisJCSh0bXAgJiBVRENfU0VUVVApID8gIiBzZXR1cCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19FUDBfUlgpID8gIiBlcDBvdXQiIDogIiIsCisJCSh0bXAgJiBVRENfRVAwX1RYKSA/ICIgZXAwaW4iIDogIiIpOworCWlmICh1c2VfZG1hKSB7CisJCXVuc2lnbmVkIGk7CisKKwkJdG1wID0gVURDX0RNQV9JUlFfRU5fUkVHOworCQlzZXFfcHJpbnRmKHMsICJkbWFfaXJxX2VuICAlMDR4JXMiIEVJR0hUQklUUyAiXG4iLCB0bXAsCisJCQkodG1wICYgVURDX1RYX0RPTkVfSUUoMykpID8gIiB0eDJfZG9uZSIgOiAiIiwKKwkJCSh0bXAgJiBVRENfUlhfQ05UX0lFKDMpKSA/ICIgcngyX2NudCIgOiAiIiwKKwkJCSh0bXAgJiBVRENfUlhfRU9UX0lFKDMpKSA/ICIgcngyX2VvdCIgOiAiIiwKKworCQkJKHRtcCAmIFVEQ19UWF9ET05FX0lFKDIpKSA/ICIgdHgxX2RvbmUiIDogIiIsCisJCQkodG1wICYgVURDX1JYX0NOVF9JRSgyKSkgPyAiIHJ4MV9jbnQiIDogIiIsCisJCQkodG1wICYgVURDX1JYX0VPVF9JRSgyKSkgPyAiIHJ4MV9lb3QiIDogIiIsCisKKwkJCSh0bXAgJiBVRENfVFhfRE9ORV9JRSgxKSkgPyAiIHR4MF9kb25lIiA6ICIiLAorCQkJKHRtcCAmIFVEQ19SWF9DTlRfSUUoMSkpID8gIiByeDBfY250IiA6ICIiLAorCQkJKHRtcCAmIFVEQ19SWF9FT1RfSUUoMSkpID8gIiByeDBfZW90IiA6ICIiKTsKKworCQl0bXAgPSBVRENfUlhETUFfQ0ZHX1JFRzsKKwkJc2VxX3ByaW50ZihzLCAicnhkbWFfY2ZnICAgJTA0eFxuIiwgdG1wKTsKKwkJaWYgKHRtcCkgeworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJCWlmICgodG1wICYgKDB4MGYgPDwgKGkgKiA0KSkpID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCXNlcV9wcmludGYocywgInJ4ZG1hWyVkXSAgICAlMDR4XG4iLCBpLAorCQkJCQkJVURDX1JYRE1BX1JFRyhpICsgMSkpOworCQkJfQorCQl9CisJCXRtcCA9IFVEQ19UWERNQV9DRkdfUkVHOworCQlzZXFfcHJpbnRmKHMsICJ0eGRtYV9jZmcgICAlMDR4XG4iLCB0bXApOworCQlpZiAodG1wKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkJaWYgKCEodG1wICYgKDB4MGYgPDwgKGkgKiA0KSkpKQorCQkJCQljb250aW51ZTsKKwkJCQlzZXFfcHJpbnRmKHMsICJ0eGRtYVslZF0gICAgJTA0eFxuIiwgaSwKKwkJCQkJCVVEQ19UWERNQV9SRUcoaSArIDEpKTsKKwkJCX0KKwkJfQorCX0KKworCXRtcCA9IFVEQ19ERVZTVEFUX1JFRzsKKwlpZiAodG1wICYgVURDX0FUVCkgeworCQlwcm9jX2VwX3Nob3cocywgJnVkYy0+ZXBbMF0pOworCQlpZiAodG1wICYgVURDX0FERCkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZ1ZGMtPmdhZGdldC5lcF9saXN0LAorCQkJCQllcC5lcF9saXN0KSB7CisJCQkJaWYgKGVwLT5kZXNjKQorCQkJCQlwcm9jX2VwX3Nob3cocywgZXApOworCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfdWRjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfdWRjX3Nob3csIDApOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKKwkub3BlbgkJPSBwcm9jX3VkY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBjcmVhdGVfcHJvY19maWxlKHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisKKwlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeSAocHJvY19maWxlbmFtZSwgMCwgTlVMTCk7CisJaWYgKHBkZSkKKwkJcGRlLT5wcm9jX2ZvcHMgPSAmcHJvY19vcHM7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9wcm9jX2ZpbGUodm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeShwcm9jX2ZpbGVuYW1lLCAwKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9wcm9jX2ZpbGUodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfcHJvY19maWxlKHZvaWQpIHt9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCZWZvcmUgdGhpcyBjb250cm9sbGVyIGNhbiBlbnVtZXJhdGUsIHdlIG5lZWQgdG8gcGljayBhbiBlbmRwb2ludAorICogY29uZmlndXJhdGlvbiwgb3IgImZpZm9fbW9kZSIgIFRoYXQgaW52b2x2ZXMgYWxsb2NhdGluZyAyS0Igb2YgcGFja2V0CisgKiBidWZmZXIgc3BhY2UgYW1vbmcgdGhlIGVuZHBvaW50cyB3ZSdsbCBiZSBvcGVyYXRpbmcuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBfX2luaXQKK29tYXBfZXBfc2V0dXAoY2hhciAqbmFtZSwgdTggYWRkciwgdTggdHlwZSwKKwkJdW5zaWduZWQgYnVmLCB1bnNpZ25lZCBtYXhwLCBpbnQgZGJ1ZikKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXA7CisJdTE2CQllcG5fcnh0eCA9IDA7CisKKwkvKiBPVVQgZW5kcG9pbnRzIGZpcnN0LCB0aGVuIElOICovCisJZXAgPSAmdWRjLT5lcFthZGRyICYgMHhmXTsKKwlpZiAoYWRkciAmIFVTQl9ESVJfSU4pCisJCWVwICs9IDE2OworCisJLyogaW4gY2FzZSBvZiBlcCBpbml0IHRhYmxlIGJ1Z3MgKi8KKwlCVUdfT04oZXAtPm5hbWVbMF0pOworCisJLyogY2hpcCBzZXR1cCAuLi4gYml0IHZhbHVlcyBhcmUgc2FtZSBmb3IgSU4sIE9VVCAqLworCWlmICh0eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJc3dpdGNoIChtYXhwKSB7CisJCWNhc2UgODoJCWVwbl9yeHR4ID0gMCA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMTY6CWVwbl9yeHR4ID0gMSA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMzI6CWVwbl9yeHR4ID0gMiA8PCAxMjsgYnJlYWs7CisJCWNhc2UgNjQ6CWVwbl9yeHR4ID0gMyA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMTI4OgllcG5fcnh0eCA9IDQgPDwgMTI7IGJyZWFrOworCQljYXNlIDI1NjoJZXBuX3J4dHggPSA1IDw8IDEyOyBicmVhazsKKwkJY2FzZSA1MTI6CWVwbl9yeHR4ID0gNiA8PCAxMjsgYnJlYWs7CisJCWRlZmF1bHQ6CUJVRygpOworCQl9CisJCWVwbl9yeHR4IHw9IFVEQ19FUE5fUlhfSVNPOworCQlkYnVmID0gMTsKKwl9IGVsc2UgeworCQkvKiBkb3VibGUtYnVmZmVyaW5nICJub3Qgc3VwcG9ydGVkIiBvbiAxNXh4LAorCQkgKiBhbmQgaWdub3JlZCBmb3IgUElPLUlOIG9uIDE2eHgKKwkJICovCisJCWlmICghdXNlX2RtYSB8fCBjcHVfaXNfb21hcDE1eHgoKSkKKwkJCWRidWYgPSAwOworCisJCXN3aXRjaCAobWF4cCkgeworCQljYXNlIDg6CQllcG5fcnh0eCA9IDAgPDwgMTI7IGJyZWFrOworCQljYXNlIDE2OgllcG5fcnh0eCA9IDEgPDwgMTI7IGJyZWFrOworCQljYXNlIDMyOgllcG5fcnh0eCA9IDIgPDwgMTI7IGJyZWFrOworCQljYXNlIDY0OgllcG5fcnh0eCA9IDMgPDwgMTI7IGJyZWFrOworCQlkZWZhdWx0OglCVUcoKTsKKwkJfQorCQlpZiAoZGJ1ZiAmJiBhZGRyKQorCQkJZXBuX3J4dHggfD0gVURDX0VQTl9SWF9EQjsKKwkJaW5pdF90aW1lcigmZXAtPnRpbWVyKTsKKwkJZXAtPnRpbWVyLmZ1bmN0aW9uID0gcGlvX291dF90aW1lcjsKKwkJZXAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZXA7CisJfQorCWlmIChhZGRyKQorCQllcG5fcnh0eCB8PSBVRENfRVBOX1JYX1ZBTElEOworCUJVR19PTihidWYgJiAweDA3KTsKKwllcG5fcnh0eCB8PSBidWYgPj4gMzsKKworCURCRygiJXMgYWRkciAlMDJ4IHJ4dHggJTA0eCBtYXhwICVkJXMgYnVmICVkXG4iLAorCQluYW1lLCBhZGRyLCBlcG5fcnh0eCwgbWF4cCwgZGJ1ZiA/ICJ4MiIgOiAiIiwgYnVmKTsKKworCWlmIChhZGRyICYgVVNCX0RJUl9JTikKKwkJVURDX0VQX1RYX1JFRyhhZGRyICYgMHhmKSA9IGVwbl9yeHR4OworCWVsc2UKKwkJVURDX0VQX1JYX1JFRyhhZGRyKSA9IGVwbl9yeHR4OworCisJLyogbmV4dCBlbmRwb2ludCdzIGJ1ZmZlciBzdGFydHMgYWZ0ZXIgdGhpcyBvbmUncyAqLworCWJ1ZiArPSBtYXhwOworCWlmIChkYnVmKQorCQlidWYgKz0gbWF4cDsKKwlCVUdfT04oYnVmID4gMjA0OCk7CisKKwkvKiBzZXQgdXAgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyAqLworCUJVR19PTihzdHJsZW4obmFtZSkgPj0gc2l6ZW9mIGVwLT5uYW1lKTsKKwlzdHJsY3B5KGVwLT5uYW1lLCBuYW1lLCBzaXplb2YgZXAtPm5hbWUpOworCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZlcC0+aXNvKTsKKwllcC0+YkVuZHBvaW50QWRkcmVzcyA9IGFkZHI7CisJZXAtPmJtQXR0cmlidXRlcyA9IHR5cGU7CisJZXAtPmRvdWJsZV9idWYgPSBkYnVmOworCWVwLT51ZGMgPSB1ZGM7IAorCisJZXAtPmVwLm5hbWUgPSBlcC0+bmFtZTsKKwllcC0+ZXAub3BzID0gJm9tYXBfZXBfb3BzOworCWVwLT5lcC5tYXhwYWNrZXQgPSBlcC0+bWF4cGFja2V0ID0gbWF4cDsKKwlsaXN0X2FkZF90YWlsICgmZXAtPmVwLmVwX2xpc3QsICZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfdWRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbXBsZXRlKHVkYy0+ZG9uZSk7CisJa2ZyZWUgKHVkYyk7CisJdWRjID0gMDsKK30KKworc3RhdGljIGludCBfX2luaXQKK29tYXBfdWRjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9kZXYsIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKnhjZWl2KQoreworCXVuc2lnbmVkCXRtcCwgYnVmOworCisJLyogYWJvbGlzaCBhbnkgcHJldmlvdXMgaGFyZHdhcmUgc3RhdGUgKi8KKwlVRENfU1lTQ09OMV9SRUcgPSAwOworCVVEQ19JUlFfRU5fUkVHID0gMDsKKwlVRENfSVJRX1NSQ19SRUcgPSBVRENfSVJRX1NSQ19NQVNLOworCVVEQ19ETUFfSVJRX0VOX1JFRyA9IDA7CisJVURDX1JYRE1BX0NGR19SRUcgPSAwOworCVVEQ19UWERNQV9DRkdfUkVHID0gMDsKKworCS8qIFVEQ19QVUxMVVBfRU4gZ2F0ZXMgdGhlIGNoaXAgY2xvY2sgKi8KKwkvLyBPVEdfU1lTQ09OXzFfUkVHIHw9IERFVl9JRExFX0VOOworCisJdWRjID0ga21hbGxvYyAoc2l6ZW9mICp1ZGMsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQodWRjLCAwLCBzaXplb2YgKnVkYyk7CisJc3Bpbl9sb2NrX2luaXQgKCZ1ZGMtPmxvY2spOworCisJdWRjLT5nYWRnZXQub3BzID0gJm9tYXBfZ2FkZ2V0X29wczsKKwl1ZGMtPmdhZGdldC5lcDAgPSAmdWRjLT5lcFswXS5lcDsKKwlJTklUX0xJU1RfSEVBRCgmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVkYy0+aXNvKTsKKwl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCXVkYy0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKKworCWRldmljZV9pbml0aWFsaXplKCZ1ZGMtPmdhZGdldC5kZXYpOworCXN0cmNweSAodWRjLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCXVkYy0+Z2FkZ2V0LmRldi5yZWxlYXNlID0gb21hcF91ZGNfcmVsZWFzZTsKKwl1ZGMtPmdhZGdldC5kZXYucGFyZW50ID0gJm9kZXYtPmRldjsKKwlpZiAodXNlX2RtYSkKKwkJdWRjLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gb2Rldi0+ZGV2LmRtYV9tYXNrOworCisJdWRjLT50cmFuc2NlaXZlciA9IHhjZWl2OworCisJLyogZXAwIGlzIHNwZWNpYWw7IHB1dCBpdCByaWdodCBhZnRlciB0aGUgU0VUVVAgYnVmZmVyICovCisJYnVmID0gb21hcF9lcF9zZXR1cCgiZXAwIiwgMCwgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKKwkJCTggLyogYWZ0ZXIgU0VUVVAgKi8sIDY0IC8qIG1heHBhY2tldCAqLywgMCk7CisJbGlzdF9kZWxfaW5pdCgmdWRjLT5lcFswXS5lcC5lcF9saXN0KTsKKworCS8qIGluaXRpYWxseSBkaXNhYmxlIGFsbCBub24tZXAwIGVuZHBvaW50cyAqLworCWZvciAodG1wID0gMTsgdG1wIDwgMTU7IHRtcCsrKSB7CisJCVVEQ19FUF9SWF9SRUcodG1wKSA9IDA7CisJCVVEQ19FUF9UWF9SRUcodG1wKSA9IDA7CisJfQorCisjZGVmaW5lIE9NQVBfQlVMS19FUChuYW1lLGFkZHIpIFwKKwlidWYgPSBvbWFwX2VwX3NldHVwKG5hbWUgIi1idWxrIiwgYWRkciwgXAorCQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywgYnVmLCA2NCwgMSk7CisjZGVmaW5lIE9NQVBfSU5UX0VQKG5hbWUsYWRkciwgbWF4cCkgXAorCWJ1ZiA9IG9tYXBfZXBfc2V0dXAobmFtZSAiLWludCIsIGFkZHIsIFwKKwkJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwgYnVmLCBtYXhwLCAwKTsKKyNkZWZpbmUgT01BUF9JU09fRVAobmFtZSxhZGRyLCBtYXhwKSBcCisJYnVmID0gb21hcF9lcF9zZXR1cChuYW1lICItaXNvIiwgYWRkciwgXAorCQkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQywgYnVmLCBtYXhwLCAxKTsKKworCXN3aXRjaCAoZmlmb19tb2RlKSB7CisJY2FzZSAwOgorCQlPTUFQX0JVTEtfRVAoImVwMWluIiwgIFVTQl9ESVJfSU4gIHwgMSk7CisJCU9NQVBfQlVMS19FUCgiZXAyb3V0IiwgVVNCX0RJUl9PVVQgfCAyKTsKKwkJT01BUF9JTlRfRVAoImVwM2luIiwgICBVU0JfRElSX0lOICB8IDMsIDE2KTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlPTUFQX0JVTEtfRVAoImVwMWluIiwgIFVTQl9ESVJfSU4gIHwgMSk7CisJCU9NQVBfQlVMS19FUCgiZXAyb3V0IiwgVVNCX0RJUl9PVVQgfCAyKTsKKwkJT01BUF9CVUxLX0VQKCJlcDNpbiIsICBVU0JfRElSX0lOICB8IDMpOworCQlPTUFQX0JVTEtfRVAoImVwNG91dCIsIFVTQl9ESVJfT1VUIHwgNCk7CisKKwkJT01BUF9CVUxLX0VQKCJlcDVpbiIsICBVU0JfRElSX0lOICB8IDUpOworCQlPTUFQX0JVTEtfRVAoImVwNW91dCIsIFVTQl9ESVJfT1VUIHwgNSk7CisJCU9NQVBfQlVMS19FUCgiZXA2aW4iLCAgVVNCX0RJUl9JTiAgfCA2KTsKKwkJT01BUF9CVUxLX0VQKCJlcDZvdXQiLCBVU0JfRElSX09VVCB8IDYpOworCisJCU9NQVBfQlVMS19FUCgiZXA3aW4iLCAgVVNCX0RJUl9JTiAgfCA3KTsKKwkJT01BUF9CVUxLX0VQKCJlcDdvdXQiLCBVU0JfRElSX09VVCB8IDcpOworCQlPTUFQX0JVTEtfRVAoImVwOGluIiwgIFVTQl9ESVJfSU4gIHwgOCk7CisJCU9NQVBfQlVMS19FUCgiZXA4b3V0IiwgVVNCX0RJUl9PVVQgfCA4KTsKKworCQlPTUFQX0lOVF9FUCgiZXA5aW4iLCAgIFVTQl9ESVJfSU4gIHwgOSwgMTYpOworCQlPTUFQX0lOVF9FUCgiZXAxMG91dCIsIFVTQl9ESVJfSU4gIHwgMTAsIDE2KTsKKwkJT01BUF9JTlRfRVAoImVwMTFpbiIsICBVU0JfRElSX0lOICB8IDksIDE2KTsKKwkJT01BUF9JTlRfRVAoImVwMTJvdXQiLCBVU0JfRElSX0lOICB8IDEwLCAxNik7CisJCWJyZWFrOworCisjaWZkZWYJVVNFX0lTTworCWNhc2UgMjoJCQkvKiBtaXhlZCBpc28vYnVsayAqLworCQlPTUFQX0lTT19FUCgiZXAxaW4iLCAgIFVTQl9ESVJfSU4gIHwgMSwgMjU2KTsKKwkJT01BUF9JU09fRVAoImVwMm91dCIsICBVU0JfRElSX09VVCB8IDIsIDI1Nik7CisJCU9NQVBfSVNPX0VQKCJlcDNpbiIsICAgVVNCX0RJUl9JTiAgfCAzLCAxMjgpOworCQlPTUFQX0lTT19FUCgiZXA0b3V0IiwgIFVTQl9ESVJfT1VUIHwgNCwgMTI4KTsKKworCQlPTUFQX0lOVF9FUCgiZXA1aW4iLCAgIFVTQl9ESVJfSU4gIHwgNSwgMTYpOworCisJCU9NQVBfQlVMS19FUCgiZXA2aW4iLCAgVVNCX0RJUl9JTiAgfCA2KTsKKwkJT01BUF9CVUxLX0VQKCJlcDdvdXQiLCBVU0JfRElSX09VVCB8IDcpOworCQlPTUFQX0lOVF9FUCgiZXA4aW4iLCAgIFVTQl9ESVJfSU4gIHwgOCwgMTYpOworCQlicmVhazsKKwljYXNlIDM6CQkJLyogbWl4ZWQgYnVsay9pc28gKi8KKwkJT01BUF9CVUxLX0VQKCJlcDFpbiIsICBVU0JfRElSX0lOICB8IDEpOworCQlPTUFQX0JVTEtfRVAoImVwMm91dCIsIFVTQl9ESVJfT1VUIHwgMik7CisJCU9NQVBfSU5UX0VQKCJlcDNpbiIsICAgVVNCX0RJUl9JTiAgfCAzLCAxNik7CisKKwkJT01BUF9CVUxLX0VQKCJlcDRpbiIsICBVU0JfRElSX0lOICB8IDQpOworCQlPTUFQX0JVTEtfRVAoImVwNW91dCIsIFVTQl9ESVJfT1VUIHwgNSk7CisJCU9NQVBfSU5UX0VQKCJlcDZpbiIsICAgVVNCX0RJUl9JTiAgfCA2LCAxNik7CisKKwkJT01BUF9JU09fRVAoImVwN2luIiwgICBVU0JfRElSX0lOICB8IDcsIDI1Nik7CisJCU9NQVBfSVNPX0VQKCJlcDhvdXQiLCAgVVNCX0RJUl9PVVQgfCA4LCAyNTYpOworCQlPTUFQX0lOVF9FUCgiZXA5aW4iLCAgIFVTQl9ESVJfSU4gIHwgOSwgMTYpOworCQlicmVhazsKKyNlbmRpZgorCisJLyogYWRkIG1vcmUgbW9kZXMgYXMgbmVlZGVkICovCisKKwlkZWZhdWx0OgorCQlFUlIoInVuc3VwcG9ydGVkIGZpZm9fbW9kZSAjJWRcbiIsIGZpZm9fbW9kZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlVRENfU1lTQ09OMV9SRUcgPSBVRENfQ0ZHX0xPQ0t8VURDX1NFTEZfUFdSOworCUlORk8oImZpZm8gbW9kZSAlZCwgJWQgYnl0ZXMgbm90IHVzZWRcbiIsIGZpZm9fbW9kZSwgMjA0OCAtIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50CQkJc3RhdHVzID0gLUVOT0RFVjsKKwlpbnQJCQlobWM7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkqeGNlaXYgPSAwOworCWNvbnN0IGNoYXIJCSp0eXBlID0gMDsKKwlzdHJ1Y3Qgb21hcF91c2JfY29uZmlnCSpjb25maWcgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBOT1RFOiAgImtub3dzIiB0aGUgb3JkZXIgb2YgdGhlIHJlc291cmNlcyEgKi8KKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgCisJCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCisJCQlkcml2ZXJfbmFtZSkpIHsKKwkJREJHKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlJTkZPKCJPTUFQIFVEQyByZXYgJWQuJWQlc1xuIiwKKwkJVURDX1JFVl9SRUcgPj4gNCwgVURDX1JFVl9SRUcgJiAweGYsCisJCWNvbmZpZy0+b3RnID8gIiwgTWluaS1BQiIgOiAiIik7CisKKwkvKiB1c2UgdGhlIG1vZGUgZ2l2ZW4gdG8gdXMgYnkgYm9hcmQgaW5pdCBjb2RlICovCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCWhtYyA9IEhNQ18xNTEwOworCQl0eXBlID0gIih1bmtub3duKSI7CisKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQkJLyoganVzdCBzZXQgdXAgc29mdHdhcmUgVkJVUyBkZXRlY3QsIGFuZCB0aGVuCisJCQkgKiBsYXRlciByaWcgaXQgc28gd2UgYWx3YXlzIHJlcG9ydCBWQlVTLgorCQkJICogRklYTUUgd2l0aG91dCByZWFsbHkgc2Vuc2luZyBWQlVTLCB3ZSBjYW4ndAorCQkJICoga25vdyB3aGVuIHRvIHR1cm4gUFVMTFVQX0VOIG9uL29mZjsgYW5kIHRoYXQKKwkJCSAqIG1lYW5zIHdlIGFsd2F5cyAibmVlZCIgdGhlIDQ4TUh6IGNsb2NrLgorCQkJICovCisJCQl1MzIgdG1wID0gRlVOQ19NVVhfQ1RSTF8wX1JFRzsKKworCQkJRlVOQ19NVVhfQ1RSTF8wX1JFRyAmPSB+VkJVU19DVFJMXzE1MTA7CisJCQl0bXAgfD0gVkJVU19NT0RFXzE1MTA7CisJCQl0bXAgJj0gflZCVVNfQ1RSTF8xNTEwOworCQkJRlVOQ19NVVhfQ1RSTF8wX1JFRyA9IHRtcDsKKwkJfQorCX0gZWxzZSB7CisJCWhtYyA9IEhNQ18xNjEwOworCQlzd2l0Y2ggKGhtYykgeworCQljYXNlIDM6CisJCWNhc2UgMTE6CisJCWNhc2UgMTY6CisJCWNhc2UgMTk6CisJCWNhc2UgMjU6CisJCQl4Y2VpdiA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKKwkJCWlmICgheGNlaXYpIHsKKwkJCQlEQkcoImV4dGVybmFsIHRyYW5zY2VpdmVyIG5vdCByZWdpc3RlcmVkIVxuIik7CisJCQkJaWYgKGNvbmZpZy0+b3RnKQorCQkJCQlnb3RvIGNsZWFudXAwOworCQkJCXR5cGUgPSAiKHVua25vd24gZXh0ZXJuYWwpIjsKKwkJCX0gZWxzZQorCQkJCXR5cGUgPSB4Y2Vpdi0+bGFiZWw7CisJCQlicmVhazsKKwkJY2FzZSAwOgkJCS8qIFBPV0VSVVAgREVGQVVMVCA9PSAwICovCisJCWNhc2UgNDoKKwkJY2FzZSAxMjoKKwkJY2FzZSAyMDoKKwkJCXR5cGUgPSAiSU5URUdSQVRFRCI7CisJCQlicmVhazsKKwkJY2FzZSAyMToJCQkvKiBpbnRlcm5hbCBsb29wYmFjayAqLworCQkJdHlwZSA9ICIobG9vcGJhY2spIjsKKwkJCWJyZWFrOworCQljYXNlIDE0OgkJCS8qIHRyYW5zY2VpdmVybGVzcyAqLworCQkJdHlwZSA9ICIobm9uZSkiOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUVSUigidW5yZWNvZ25pemVkIFVEQyBITUMgbW9kZSAlZFxuIiwgaG1jKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCUlORk8oImhtYyBtb2RlICVkLCB0cmFuc2NlaXZlciAlc1xuIiwgaG1jLCB0eXBlKTsKKworCS8qIGEgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCisJc3RhdHVzID0gb21hcF91ZGNfc2V0dXAob2RldiwgeGNlaXYpOworCWlmIChzdGF0dXMpIHsKKwkJZ290byBjbGVhbnVwMDsKKwl9CisJeGNlaXYgPSAwOworCS8vICJ1ZGMiIGlzIG5vdyB2YWxpZAorCXB1bGx1cF9kaXNhYmxlKHVkYyk7CisjaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorCXVkYy0+Z2FkZ2V0LmlzX290ZyA9IChjb25maWctPm90ZyAhPSAwKTsKKyNlbmRpZgorCisJLyogVVNCIGdlbmVyYWwgcHVycG9zZSBJUlE6ICBlcDAsIHN0YXRlIGNoYW5nZXMsIGRtYSwgZXRjICovCisJc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIG9tYXBfdWRjX2lycSwKKwkJCVNBX1NBTVBMRV9SQU5ET00sIGRyaXZlcl9uYW1lLCB1ZGMpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlFUlIoICJjYW4ndCBnZXQgaXJxICVsZCwgZXJyICVkXG4iLAorCQkJb2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHN0YXR1cyk7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCisJLyogVVNCICJub24taXNvIiBJUlEgKFBJTyBmb3IgYWxsIGJ1dCBlcDApICovCisJc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIG9tYXBfdWRjX3Bpb19pcnEsCisJCQlTQV9TQU1QTEVfUkFORE9NLCAib21hcF91ZGMgcGlvIiwgdWRjKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKKwkJCW9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBzdGF0dXMpOworCQlnb3RvIGNsZWFudXAyOworCX0KKyNpZmRlZglVU0VfSVNPCisJc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbM10uc3RhcnQsIG9tYXBfdWRjX2lzb19pcnEsCisJCQlTQV9JTlRFUlJVUFQsICJvbWFwX3VkYyBpc28iLCB1ZGMpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlFUlIoImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCisJCQlvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgc3RhdHVzKTsKKwkJZ290byBjbGVhbnVwMzsKKwl9CisjZW5kaWYKKworCWNyZWF0ZV9wcm9jX2ZpbGUoKTsKKwlkZXZpY2VfYWRkKCZ1ZGMtPmdhZGdldC5kZXYpOworCXJldHVybiAwOworCisjaWZkZWYJVVNFX0lTTworY2xlYW51cDM6CisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisjZW5kaWYKKworY2xlYW51cDI6CisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisKK2NsZWFudXAxOgorCWtmcmVlICh1ZGMpOworCXVkYyA9IDA7CisKK2NsZWFudXAwOgorCWlmICh4Y2VpdikKKwkJcHV0X2RldmljZSh4Y2Vpdi0+ZGV2KTsKKwlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG9tYXBfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqb2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKworCWlmICghdWRjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVkYy0+ZG9uZSA9ICZkb25lOworCisJcHVsbHVwX2Rpc2FibGUodWRjKTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlwdXRfZGV2aWNlKHVkYy0+dHJhbnNjZWl2ZXItPmRldik7CisJCXVkYy0+dHJhbnNjZWl2ZXIgPSAwOworCX0KKwlVRENfU1lTQ09OMV9SRUcgPSAwOworCisJcmVtb3ZlX3Byb2NfZmlsZSgpOworCisjaWZkZWYJVVNFX0lTTworCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCB1ZGMpOworI2VuZGlmCisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisKKwlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCisJZGV2aWNlX3VucmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogc3VzcGVuZC9yZXN1bWUvd2FrZXVwIGZyb20gc3lzZnMgKGVjaG8gPiBwb3dlci9zdGF0ZSkgKi8KKworc3RhdGljIGludCBvbWFwX3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJaWYgKGxldmVsICE9IDApCisJCXJldHVybiAwOworCisJREJHKCJzdXNwZW5kLCBzdGF0ZSAlZFxuIiwgc3RhdGUpOworCW9tYXBfcHVsbHVwKCZ1ZGMtPmdhZGdldCwgMCk7CisJdWRjLT5nYWRnZXQuZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gMzsKKwl1ZGMtPmdhZGdldC5kZXYucGFyZW50LT5wb3dlci5wb3dlcl9zdGF0ZSA9IDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF91ZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCWlmIChsZXZlbCAhPSAwKQorCQlyZXR1cm4gMDsKKworCURCRygicmVzdW1lICsgd2FrZXVwL1NSUFxuIik7CisJdWRjLT5nYWRnZXQuZGV2LnBhcmVudC0+cG93ZXIucG93ZXJfc3RhdGUgPSAwOworCXVkYy0+Z2FkZ2V0LmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJb21hcF9wdWxsdXAoJnVkYy0+Z2FkZ2V0LCAxKTsKKworCS8qIG1heWJlIHRoZSBob3N0IHdvdWxkIGVudW1lcmF0ZSB1cyBpZiB3ZSBudWRnZWQgaXQgKi8KKwltc2xlZXAoMTAwKTsKKwlyZXR1cm4gb21hcF93YWtldXAoJnVkYy0+Z2FkZ2V0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9tYXBfdWRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF91ZGNfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IG9tYXBfdWRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvbWFwX3VkY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQoreworCUlORk8oIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OCisjaWZkZWYJVVNFX0lTTworCQkiIChpc28pIgorI2VuZGlmCisJCSIlc1xuIiwgZHJpdmVyX2Rlc2MsCisJCXVzZV9kbWEgPyAgIiAoZG1hKSIgOiAiIik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHVkY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWU2ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmgKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBvbWFwX3VkYy5oIC0tIGZvciBvbWFwIDMuMiB1ZGMsIHdpdGggT1RHIHN1cHBvcnQKKyAqCisgKiAyMDA0IChDKSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogMjAwNCAoQykgRGF2aWQgQnJvd25lbGwKKyAqLworCisvKgorICogVVNCIGRldmljZS9lbmRwb2ludCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICovCisjZGVmaW5lIFVEQ19SRUcob2Zmc2V0KSAgICAgICAgICAgICAgX19SRUcxNihVRENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lCVVEQ19SRVZfUkVHCQkJVURDX1JFRygweDApCS8qIFJldmlzaW9uICovCisjZGVmaW5lCVVEQ19FUF9OVU1fUkVHCQkJVURDX1JFRygweDQpCS8qIFdoaWNoIGVuZHBvaW50ICovCisjCWRlZmluZQlVRENfU0VUVVBfU0VMCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX0VQX1NFTAkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19FUF9ESVIJCSgxIDw8IDQpCisJLyogbG93IDQgYml0cyBmb3IgZW5kcG9pbnQgbnVtYmVyICovCisjZGVmaW5lCVVEQ19EQVRBX1JFRwkJCVVEQ19SRUcoMHgwOCkJLyogRW5kcG9pbnQgRklGTyAqLworI2RlZmluZQlVRENfQ1RSTF9SRUcJCQlVRENfUkVHKDB4MEMpCS8qIEVuZHBvaW50IGNvbnRyb2wgKi8KKyMJZGVmaW5lCVVEQ19DTFJfSEFMVAkJKDEgPDwgNykKKyMJZGVmaW5lCVVEQ19TRVRfSEFMVAkJKDEgPDwgNikKKyMJZGVmaW5lCVVEQ19TRVRfRklGT19FTgkJKDEgPDwgMikKKyMJZGVmaW5lCVVEQ19DTFJfRVAJCSgxIDw8IDEpCisjCWRlZmluZQlVRENfUkVTRVRfRVAJCSgxIDw8IDApCisjZGVmaW5lCVVEQ19TVEFUX0ZMR19SRUcJCVVEQ19SRUcoMHgxMCkJLyogRW5kcG9pbnQgc3RhdHVzICovCisjCWRlZmluZQlVRENfTk9fUlhQQUNLRVQJCSgxIDw8IDE1KQorIwlkZWZpbmUJVURDX01JU1NfSU4JCSgxIDw8IDE0KQorIwlkZWZpbmUJVURDX0RBVEFfRkxVU0gJCSgxIDw8IDEzKQorIwlkZWZpbmUJVURDX0lTT19FUlIJCSgxIDw8IDEyKQorIwlkZWZpbmUJVURDX0lTT19GSUZPX0VNUFRZCSgxIDw8IDkpCisjCWRlZmluZQlVRENfSVNPX0ZJRk9fRlVMTAkoMSA8PCA4KQorIwlkZWZpbmUJVURDX0VQX0hBTFRFRAkJKDEgPDwgNikKKyMJZGVmaW5lCVVEQ19TVEFMTAkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19OQUsJCQkoMSA8PCA0KQorIwlkZWZpbmUJVURDX0FDSwkJCSgxIDw8IDMpCisjCWRlZmluZQlVRENfRklGT19FTgkJKDEgPDwgMikKKyMJZGVmaW5lCVVEQ19OT05fSVNPX0ZJRk9fRU1QVFkJKDEgPDwgMSkKKyMJZGVmaW5lCVVEQ19OT05fSVNPX0ZJRk9fRlVMTAkoMSA8PCAwKQorI2RlZmluZQlVRENfUlhGU1RBVF9SRUcJCQlVRENfUkVHKDB4MTQpCS8qIE9VVCBieXRlY291bnQgKi8KKyNkZWZpbmUJVURDX1NZU0NPTjFfUkVHCQkJVURDX1JFRygweDE4KQkvKiBTeXN0ZW0gY29uZmlnIDEgKi8KKyMJZGVmaW5lCVVEQ19DRkdfTE9DSwkJKDEgPDwgOCkKKyMJZGVmaW5lCVVEQ19EQVRBX0VORElBTgkJKDEgPDwgNykKKyMJZGVmaW5lCVVEQ19ETUFfRU5ESUFOCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX05BS19FTgkJKDEgPDwgNCkKKyMJZGVmaW5lCVVEQ19BVVRPREVDT0RFX0RJUwkoMSA8PCAzKQorIwlkZWZpbmUJVURDX1NFTEZfUFdSCQkoMSA8PCAyKQorIwlkZWZpbmUJVURDX1NPRkZfRElTCQkoMSA8PCAxKQorIwlkZWZpbmUJVURDX1BVTExVUF9FTgkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX1NZU0NPTjJfUkVHCQkJVURDX1JFRygweDFDKQkvKiBTeXN0ZW0gY29uZmlnIDIgKi8KKyMJZGVmaW5lCVVEQ19STVRfV0tQCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX1NUQUxMX0NNRAkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19ERVZfQ0ZHCQkoMSA8PCAzKQorIwlkZWZpbmUJVURDX0NMUl9DRkcJCSgxIDw8IDIpCisjZGVmaW5lCVVEQ19ERVZTVEFUX1JFRwkJCVVEQ19SRUcoMHgyMCkJLyogRGV2aWNlIHN0YXR1cyAqLworIwlkZWZpbmUJVURDX0JfSE5QX0VOQUJMRQkoMSA8PCA5KQorIwlkZWZpbmUJVURDX0FfSE5QX1NVUFBPUlQJKDEgPDwgOCkKKyMJZGVmaW5lCVVEQ19BX0FMVF9ITlBfU1VQUE9SVAkoMSA8PCA3KQorIwlkZWZpbmUJVURDX1JfV0tfT0sJCSgxIDw8IDYpCisjCWRlZmluZQlVRENfVVNCX1JFU0VUCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX1NVUwkJCSgxIDw8IDQpCisjCWRlZmluZQlVRENfQ0ZHCQkJKDEgPDwgMykKKyMJZGVmaW5lCVVEQ19BREQJCQkoMSA8PCAyKQorIwlkZWZpbmUJVURDX0RFRgkJCSgxIDw8IDEpCisjCWRlZmluZQlVRENfQVRUCQkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX1NPRl9SRUcJCQlVRENfUkVHKDB4MjQpCS8qIFN0YXJ0IG9mIGZyYW1lICovCisjCWRlZmluZQlVRENfRlRfTE9DSwkJKDEgPDwgMTIpCisjCWRlZmluZQlVRENfVFNfT0sJCSgxIDw8IDExKQorIwlkZWZpbmUJVURDX1RTCQkJMHgwM2ZmCisjZGVmaW5lCVVEQ19JUlFfRU5fUkVHCQkJVURDX1JFRygweDI4KQkvKiBJbnRlcnJ1cHQgZW5hYmxlICovCisjCWRlZmluZQlVRENfU09GX0lFCQkoMSA8PCA3KQorIwlkZWZpbmUJVURDX0VQTl9SWF9JRQkJKDEgPDwgNSkKKyMJZGVmaW5lCVVEQ19FUE5fVFhfSUUJCSgxIDw8IDQpCisjCWRlZmluZQlVRENfRFNfQ0hHX0lFCQkoMSA8PCAzKQorIwlkZWZpbmUJVURDX0VQMF9JRQkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX0RNQV9JUlFfRU5fUkVHCQlVRENfUkVHKDB4MkMpCS8qIERNQSBpcnEgZW5hYmxlICovCisJLyogcngvdHggZG1hIGNoYW5uZWxzIG51bWJlcmVkIDEtMyBub3QgMC0yICovCisjCWRlZmluZQlVRENfVFhfRE9ORV9JRShuKQkoMSA8PCAoNCAqIChuKSAtIDIpKQorIwlkZWZpbmUJVURDX1JYX0NOVF9JRShuKQkoMSA8PCAoNCAqIChuKSAtIDMpKQorIwlkZWZpbmUJVURDX1JYX0VPVF9JRShuKQkoMSA8PCAoNCAqIChuKSAtIDQpKQorI2RlZmluZQlVRENfSVJRX1NSQ19SRUcJCQlVRENfUkVHKDB4MzApCS8qIEludGVycnVwdCBzb3VyY2UgKi8KKyMJZGVmaW5lCVVEQ19UWE5fRE9ORQkJKDEgPDwgMTApCisjCWRlZmluZQlVRENfUlhOX0NOVAkJKDEgPDwgOSkKKyMJZGVmaW5lCVVEQ19SWE5fRU9UCQkoMSA8PCA4KQorIwlkZWZpbmUJVURDX1NPRgkJCSgxIDw8IDcpCisjCWRlZmluZQlVRENfRVBOX1JYCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX0VQTl9UWAkJKDEgPDwgNCkKKyMJZGVmaW5lCVVEQ19EU19DSEcJCSgxIDw8IDMpCisjCWRlZmluZQlVRENfU0VUVVAJCSgxIDw8IDIpCisjCWRlZmluZQlVRENfRVAwX1JYCQkoMSA8PCAxKQorIwlkZWZpbmUJVURDX0VQMF9UWAkJKDEgPDwgMCkKKyMJZGVmaW5lCVVEQ19JUlFfU1JDX01BU0sJMHg3YmYKKyNkZWZpbmUJVURDX0VQTl9TVEFUX1JFRwkJVURDX1JFRygweDM0KQkvKiBFUCBpcnEgc3RhdHVzICovCisjZGVmaW5lCVVEQ19ETUFOX1NUQVRfUkVHCQlVRENfUkVHKDB4MzgpCS8qIERNQSBpcnEgc3RhdHVzICovCisjCWRlZmluZQlVRENfRE1BX1JYX1NCCQkoMSA8PCAxMikKKyMJZGVmaW5lCVVEQ19ETUFfUlhfU1JDKHgpCSgoKHgpPj44KSAmIDB4ZikKKyMJZGVmaW5lCVVEQ19ETUFfVFhfU1JDKHgpCSgoKHgpPj4wKSAmIDB4ZikKKworCisvKiBETUEgY29uZmlndXJhdGlvbiByZWdpc3RlcnM6ICB1cCB0byB0aHJlZSBjaGFubmVscyBpbiBlYWNoIGRpcmVjdGlvbi4gICovCisjZGVmaW5lCVVEQ19SWERNQV9DRkdfUkVHCQlVRENfUkVHKDB4NDApCS8qIDMgZXBzIGZvciBSWCBETUEgKi8KKyNkZWZpbmUJVURDX1RYRE1BX0NGR19SRUcJCVVEQ19SRUcoMHg0NCkJLyogMyBlcHMgZm9yIFRYIERNQSAqLworI2RlZmluZQlVRENfREFUQV9ETUFfUkVHCQlVRENfUkVHKDB4NDgpCS8qIHJ4L3R4IGZpZm8gYWRkciAqLworCisvKiByeC90eCBkbWEgY29udHJvbCwgbnVtYmVyaW5nIGNoYW5uZWxzIDEtMyBub3QgMC0yICovCisjZGVmaW5lCVVEQ19UWERNQV9SRUcoY2hhbikJCVVEQ19SRUcoMHg1MCAtIDQgKyA0ICogKGNoYW4pKQorIwlkZWZpbmUgVURDX1RYTl9FT1QJCSgxIDw8IDE1KQkvKiBieXRlcyB2cyBwYWNrZXRzICovCisjCWRlZmluZSBVRENfVFhOX1NUQVJUCQkoMSA8PCAxNCkJLyogc3RhcnQgdHJhbnNmZXIgKi8KKyMJZGVmaW5lIFVEQ19UWE5fVFNDCQkweDAzZmYJCS8qIHVuaXRzIGluIHhmZXIgKi8KKyNkZWZpbmUJVURDX1JYRE1BX1JFRyhjaGFuKQkJVURDX1JFRygweDYwIC0gNCArIDQgKiAoY2hhbikpCisjCWRlZmluZSBVRENfUlhOX1NUT1AJCSgxIDw8IDE1KQkvKiBlbmFibGUgRU9UIGlycSAqLworIwlkZWZpbmUgVURDX1JYTl9UQwkJMHgwMGZmCQkvKiBwYWNrZXRzIGluIHhmZXIgKi8KKworCisvKgorICogRW5kcG9pbnQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKHVzZWQgYmVmb3JlIENGR19MT0NLIGlzIHNldCkKKyAqIFVEQ19FUF9UWF9SRUcoMCkgaXMgdW51c2VkCisgKi8KKyNkZWZpbmUJVURDX0VQX1JYX1JFRyhlbmRwb2ludCkJCVVEQ19SRUcoMHg4MCArIChlbmRwb2ludCkqNCkKKyMJZGVmaW5lCVVEQ19FUE5fUlhfVkFMSUQJKDEgPDwgMTUpCisjCWRlZmluZQlVRENfRVBOX1JYX0RCCQkoMSA8PCAxNCkKKwkvKiBidWZmZXIgc2l6ZSBpbiBiaXRzIDEzLCAxMiAqLworIwlkZWZpbmUJVURDX0VQTl9SWF9JU08JCSgxIDw8IDExKQorCS8qIGJ1ZmZlciBwb2ludGVyIGluIGxvdyAxMSBiaXRzICovCisjZGVmaW5lCVVEQ19FUF9UWF9SRUcoZW5kcG9pbnQpCQlVRENfUkVHKDB4YzAgKyAoZW5kcG9pbnQpKjQpCisJLyogc2FtZSBiaXRmaWVsZHMgYXMgaW4gUlhfUkVHICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBvbWFwX3JlcSB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQlyZXE7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJdW5zaWduZWQJCQlkbWFfYnl0ZXM7CisJdW5zaWduZWQJCQltYXBwZWQ6MTsKK307CisKK3N0cnVjdCBvbWFwX2VwIHsKKwlzdHJ1Y3QgdXNiX2VwCQkJZXA7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJdW5zaWduZWQgbG9uZwkJCWlycXM7CisJc3RydWN0IGxpc3RfaGVhZAkJaXNvOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYzsKKwljaGFyCQkJCW5hbWVbMTRdOworCXUxNgkJCQltYXhwYWNrZXQ7CisJdTgJCQkJYkVuZHBvaW50QWRkcmVzczsKKwl1OAkJCQlibUF0dHJpYnV0ZXM7CisJdW5zaWduZWQJCQlkb3VibGVfYnVmOjE7CisJdW5zaWduZWQJCQlzdG9wcGVkOjE7CisJdW5zaWduZWQJCQlmbmY6MTsKKwl1bnNpZ25lZAkJCWhhc19kbWE6MTsKKwl1OAkJCQlhY2t3YWl0OworCXU4CQkJCWRtYV9jaGFubmVsOworCXUxNgkJCQlkbWFfY291bnRlcjsKKwlpbnQJCQkJbGNoOworCXN0cnVjdCBvbWFwX3VkYwkJCSp1ZGM7CisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOworfTsKKworc3RydWN0IG9tYXBfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkqZHJpdmVyOworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBvbWFwX2VwCQkJZXBbMzJdOworCXUxNgkJCQlkZXZzdGF0OworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJCSp0cmFuc2NlaXZlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpc287CisJdW5zaWduZWQJCQlzb2Z0Y29ubmVjdDoxOworCXVuc2lnbmVkCQkJdmJ1c19hY3RpdmU6MTsKKwl1bnNpZ25lZAkJCWVwMF9wZW5kaW5nOjE7CisJdW5zaWduZWQJCQllcDBfaW46MTsKKwl1bnNpZ25lZAkJCWVwMF9zZXRfY29uZmlnOjE7CisJdW5zaWduZWQJCQllcDBfcmVzZXRfY29uZmlnOjE7CisJdW5zaWduZWQJCQllcDBfc2V0dXA6MTsKKworCXN0cnVjdCBjb21wbGV0aW9uCQkqZG9uZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9ERUJVRyAidWRjOiAiIHN0dWZmKQorI2Vsc2UKKyNkZWZpbmUgREJHKHN0dWZmLi4uKQkJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIFZFUkJPU0UKKyMgICAgZGVmaW5lIFZEQkcJCURCRworI2Vsc2UKKyMgICAgZGVmaW5lIFZEQkcoc3R1ZmYuLi4pCWRve313aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgRVJSKHN0dWZmLi4uKQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGM6ICIgc3R1ZmYpCisjZGVmaW5lIFdBUk4oc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1ZGM6ICIgc3R1ZmYpCisjZGVmaW5lIElORk8oc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9JTkZPICJ1ZGM6ICIgc3R1ZmYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJTU9EX0NPTkZfQ1RSTF8wX1JFRwlfX1JFRzMyKE1PRF9DT05GX0NUUkxfMCkKKyNkZWZpbmUJVkJVU19XMkZDXzE1MTAJCSgxIDw8IDE3KQkvKiAwIGdwaW8wLCAxIGR2ZGQyIHBpbiAqLworCisjZGVmaW5lCUZVTkNfTVVYX0NUUkxfMF9SRUcJX19SRUczMihGVU5DX01VWF9DVFJMXzApCisjZGVmaW5lCVZCVVNfQ1RSTF8xNTEwCQkoMSA8PCAxOSkJLyogMSBjb25uZWN0ZWQgKHNvZnR3YXJlKSAqLworI2RlZmluZQlWQlVTX01PREVfMTUxMAkJKDEgPDwgMTgpCS8qIDAgaGFyZHdhcmUsIDEgc29mdHdhcmUgKi8KKworI2RlZmluZQlITUNfMTUxMAkoKE1PRF9DT05GX0NUUkxfMF9SRUcgPj4gMSkgJiAweDNmKQorI2RlZmluZQlITUNfMTYxMAkoT1RHX1NZU0NPTl8yX1JFRyAmIDB4M2YpCisjZGVmaW5lCUhNQwkJKGNwdV9pc19vbWFwMTV4eCgpID8gSE1DXzE1MTAgOiBITUNfMTYxMCkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5MGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKQEAgLTAsMCArMSwyNjQ4IEBACisvKgorICogbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYworICogSW50ZWwgUFhBMnh4IGFuZCBJWFA0eHggb24tY2hpcCBmdWxsIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgSW50cmluc3ljLCBJbmMuIChGcmFuayBCZWNrZXIpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmVkaWt0IFNwcmFuZ2VyLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSm9zaHVhIFdpc2UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyN1bmRlZglERUJVRworLy8gI2RlZmluZQlWRVJCT1NFCURCR19WRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KKworCisvKgorICogVGhpcyBkcml2ZXIgaGFuZGxlcyB0aGUgVVNCIERldmljZSBDb250cm9sbGVyIChVREMpIGluIEludGVsJ3MgUFhBIDJ4eAorICogc2VyaWVzIHByb2Nlc3NvcnMuICBUaGUgVURDIGZvciB0aGUgSVhQIDR4eCBzZXJpZXMgaXMgdmVyeSBzaW1pbGFyLgorICogVGhlcmUgYXJlIGZpZnRlZW4gZW5kcG9pbnRzLCBpbiBhZGRpdGlvbiB0byBlcDAuCisgKgorICogU3VjaCBjb250cm9sbGVyIGRyaXZlcnMgd29yayB3aXRoIGEgZ2FkZ2V0IGRyaXZlci4gIFRoZSBnYWRnZXQgZHJpdmVyCisgKiByZXR1cm5zIGRlc2NyaXB0b3JzLCBpbXBsZW1lbnRzIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGEgcHJvdG9jb2xzIHVzZWQKKyAqIGJ5IHRoZSBob3N0IHRvIGludGVyYWN0IHdpdGggdGhpcyBkZXZpY2UsIGFuZCBhbGxvY2F0ZXMgZW5kcG9pbnRzIHRvCisgKiB0aGUgZGlmZmVyZW50IHByb3RvY29sIGludGVyZmFjZXMuICBUaGUgY29udHJvbGxlciBkcml2ZXIgdmlydHVhbGl6ZXMKKyAqIHVzYiBoYXJkd2FyZSBzbyB0aGF0IHRoZSBnYWRnZXQgZHJpdmVycyB3aWxsIGJlIG1vcmUgcG9ydGFibGUuCisgKiAKKyAqIFRoaXMgVURDIGhhcmR3YXJlIHdhbnRzIHRvIGltcGxlbWVudCBhIGJpdCB0b28gbXVjaCBVU0IgcHJvdG9jb2wsIHNvCisgKiBpdCBjb25zdHJhaW5zIHRoZSBzb3J0cyBvZiBVU0IgY29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzIHRoYXQgd29yay4KKyAqIFRoZSBlcnJhdGEgZm9yIHRoZXNlIGNoaXBzIGFyZSBtaXNsZWFkaW5nOyBzb21lICJmaXhlZCIgYnVncyBmcm9tCisgKiBweGEyNTAgYTAvYTEgYjAvYjEvYjIgc3VyZSBhY3QgbGlrZSB0aGV5J3JlIHN0aWxsIHRoZXJlLgorICovCisKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjE0LURlYy0yMDAzIgorI2RlZmluZQlEUklWRVJfREVTQwkiUFhBIDJ4eCBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyIgorCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gInB4YTJ4eF91ZGMiOworCitzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lIFtdID0gImVwMCI7CisKKworLy8gI2RlZmluZQlVU0VfRE1BCisvLyAjZGVmaW5lCVVTRV9PVVRfRE1BCisvLyAjZGVmaW5lCURJU0FCTEVfVEVTVF9NT0RFCisKKyNpZmRlZiBDT05GSUdfQVJDSF9JWFA0WFgKKyN1bmRlZiBVU0VfRE1BCisKKy8qIGNwdS1zcGVjaWZpYyByZWdpc3RlciBhZGRyZXNzZXMgYXJlIGNvbXBpbGVkIGluIHRvIHRoaXMgY29kZSAqLworI2lmZGVmIENPTkZJR19BUkNIX1BYQQorI2Vycm9yICJDYW4ndCBjb25maWd1cmUgYm90aCBJWFAgYW5kIFBYQSIKKyNlbmRpZgorCisjZW5kaWYKKworI2luY2x1ZGUgInB4YTJ4eF91ZGMuaCIKKworCisjaWZkZWYJVVNFX0RNQQorc3RhdGljIGludCB1c2VfZG1hID0gMTsKK21vZHVsZV9wYXJhbSh1c2VfZG1hLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHVzZV9kbWEsICJ0cnVlIHRvIHVzZSBkbWEiKTsKKworc3RhdGljIHZvaWQgZG1hX25vZGVzY19oYW5kbGVyIChpbnQgZG1hY2gsIHZvaWQgKl9lcCwgc3RydWN0IHB0X3JlZ3MgKnIpOworc3RhdGljIHZvaWQga2lja19kbWEoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKTsKKworI2lmZGVmIFVTRV9PVVRfRE1BCisjZGVmaW5lCURNQVNUUiAiIChkbWEgc3VwcG9ydCkiCisjZWxzZQorI2RlZmluZQlETUFTVFIgIiAoZG1hIGluKSIKKyNlbmRpZgorCisjZWxzZQkvKiAhVVNFX0RNQSAqLworI2RlZmluZQlETUFTVFIgIiAocGlvIG9ubHkpIgorI3VuZGVmCVVTRV9PVVRfRE1BCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfUFhBMlhYX1NNQUxMCisjZGVmaW5lIFNJWkVfU1RSCSIgKHNtYWxsKSIKKyNlbHNlCisjZGVmaW5lIFNJWkVfU1RSCSIiCisjZW5kaWYKKworI2lmZGVmIERJU0FCTEVfVEVTVF9NT0RFCisvKiAobW9kZSA9PSAwKSA9PSBubyB1bmRvY3VtZW50ZWQgY2hpcCB0d2Vha3MKKyAqIChtb2RlICYgMSkgID09IGRvdWJsZSBidWZmZXIgYnVsayBJTgorICogKG1vZGUgJiAyKSAgPT0gZG91YmxlIGJ1ZmZlciBidWxrIE9VVAorICogLi4uIHNvIG1vZGUgPSAzIChvciA3LCAxNSwgZXRjKSBkb2VzIGl0IGZvciBib3RoCisgKi8KK3N0YXRpYyB1c2hvcnQgZmlmb19tb2RlID0gMDsKK21vZHVsZV9wYXJhbShmaWZvX21vZGUsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChmaWZvX21vZGUsICJweGEyeHggdWRjIGZpZm8gbW9kZSIpOworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCWVuZHBvaW50IHJlbGF0ZWQgcGFydHMgb2YgdGhlIGFwaSB0byB0aGUgdXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUsCisgKgl1c2VkIGJ5IGdhZGdldCBkcml2ZXI7IGFuZCB0aGUgaW5uZXIgdGFsa2VyLXRvLWhhcmR3YXJlIGNvcmUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgdm9pZCBweGEyeHhfZXBfZmlmb19mbHVzaCAoc3RydWN0IHVzYl9lcCAqZXApOworc3RhdGljIHZvaWQgbnVrZSAoc3RydWN0IHB4YTJ4eF9lcCAqLCBpbnQgc3RhdHVzKTsKKworc3RhdGljIHZvaWQgcGlvX2lycV9lbmFibGUoaW50IGJFbmRwb2ludEFkZHJlc3MpCit7CisgICAgICAgIGJFbmRwb2ludEFkZHJlc3MgJj0gMHhmOworICAgICAgICBpZiAoYkVuZHBvaW50QWRkcmVzcyA8IDgpCisgICAgICAgICAgICAgICAgVUlDUjAgJj0gfigxIDw8IGJFbmRwb2ludEFkZHJlc3MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBiRW5kcG9pbnRBZGRyZXNzIC09IDg7CisgICAgICAgICAgICAgICAgVUlDUjEgJj0gfigxIDw8IGJFbmRwb2ludEFkZHJlc3MpOworCX0KK30KKworc3RhdGljIHZvaWQgcGlvX2lycV9kaXNhYmxlKGludCBiRW5kcG9pbnRBZGRyZXNzKQoreworICAgICAgICBiRW5kcG9pbnRBZGRyZXNzICY9IDB4ZjsKKyAgICAgICAgaWYgKGJFbmRwb2ludEFkZHJlc3MgPCA4KQorICAgICAgICAgICAgICAgIFVJQ1IwIHw9IDEgPDwgYkVuZHBvaW50QWRkcmVzczsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAtPSA4OworICAgICAgICAgICAgICAgIFVJQ1IxIHw9IDEgPDwgYkVuZHBvaW50QWRkcmVzczsKKyAgICAgICAgfQorfQorCisvKiBUaGUgVURDQ1IgcmVnIGNvbnRhaW5zIG1hc2sgYW5kIGludGVycnVwdCBzdGF0dXMgYml0cywKKyAqIHNvIHVzaW5nICd8PScgaXNuJ3Qgc2FmZSBhcyBpdCBtYXkgYWNrIGFuIGludGVycnVwdC4KKyAqLworI2RlZmluZSBVRENDUl9NQVNLX0JJVFMgICAgICAgICAoVURDQ1JfUkVNIHwgVURDQ1JfU1JNIHwgVURDQ1JfVURFKQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRjX3NldF9tYXNrX1VEQ0NSKGludCBtYXNrKQoreworCVVEQ0NSID0gKFVEQ0NSICYgVURDQ1JfTUFTS19CSVRTKSB8IChtYXNrICYgVURDQ1JfTUFTS19CSVRTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkY19jbGVhcl9tYXNrX1VEQ0NSKGludCBtYXNrKQoreworCVVEQ0NSID0gKFVEQ0NSICYgVURDQ1JfTUFTS19CSVRTKSAmIH4obWFzayAmIFVEQ0NSX01BU0tfQklUUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfYWNrX2ludF9VRENDUihpbnQgbWFzaykKK3sKKwkvKiB1ZGNjciBjb250YWlucyB0aGUgYml0cyB3ZSBkb250IHdhbnQgdG8gY2hhbmdlICovCisJX191MzIgdWRjY3IgPSBVRENDUiAmIFVEQ0NSX01BU0tfQklUUzsKKworCVVEQ0NSID0gdWRjY3IgfCAobWFzayAmIH5VRENDUl9NQVNLX0JJVFMpOworfQorCisvKgorICogZW5kcG9pbnQgZW5hYmxlL2Rpc2FibGUKKyAqCisgKiB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVzY3JpcHRvcnMgdXNlZCB0byBlbmFibGUgZW5kcG9pbnRzLiAgc2luY2UgcHhhMnh4CisgKiBlbmRwb2ludCBjb25maWd1cmF0aW9ucyBhcmUgZml4ZWQsIGFuZCBhcmUgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQsCisgKiB0aGVyZSdzIG5vdCBhIGxvdCB0byBtYW5hZ2UgaGVyZS4KKyAqCisgKiBiZWNhdXNlIHB4YTJ4eCBjYW4ndCBzZWxlY3RpdmVseSBpbml0aWFsaXplIGJ1bGsgKG9yIGludGVycnVwdCkgZW5kcG9pbnRzLAorICogKHJlc2V0dGluZyBlbmRwb2ludCBoYWx0IGFuZCB0b2dnbGUpLCBTRVRfSU5URVJGQUNFIGlzIHVudXNhYmxlIGV4Y2VwdAorICogZm9yIGEgc2luZ2xlIGludGVyZmFjZSAod2l0aCBvbmx5IHRoZSBkZWZhdWx0IGFsdHNldHRpbmcpIGFuZCBmb3IgZ2FkZ2V0CisgKiBkcml2ZXJzIHRoYXQgZG9uJ3QgaGFsdCBlbmRwb2ludHMgKG5vdCByZXNldCBieSBzZXRfaW50ZXJmYWNlKS4gIHRoYXQgYWxzbworICogbWVhbnMgdGhhdCBpZiB5b3UgdXNlIElTTywgeW91IG11c3QgdmlvbGF0ZSB0aGUgVVNCIHNwZWMgcnVsZSB0aGF0IGFsbAorICogaXNvIGVuZHBvaW50cyBtdXN0IGJlIGluIG5vbi1kZWZhdWx0IGFsdHNldHRpbmdzLgorICovCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9lbmFibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBweGEyeHhfZXAgICAgICAgICplcDsKKwlzdHJ1Y3QgcHhhMnh4X3VkYyAgICAgICAqZGV2OworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IHB4YTJ4eF9lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UCisJCQl8fCBlcC0+YkVuZHBvaW50QWRkcmVzcyAhPSBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzCisJCQl8fCBlcC0+Zmlmb19zaXplIDwgbGUxNl90b19jcHUKKwkJCQkJCShkZXNjLT53TWF4UGFja2V0U2l6ZSkpIHsKKwkJRE1TRygiJXMsIGJhZCBlcCBvciBkZXNjcmlwdG9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB4ZmVyIHR5cGVzIG11c3QgbWF0Y2gsIGV4Y2VwdCB0aGF0IGludGVycnVwdCB+PSBidWxrICovCisJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgIT0gZGVzYy0+Ym1BdHRyaWJ1dGVzCisJCQkmJiBlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkJCSYmIGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJRE1TRygiJXMsICVzIHR5cGUgbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaGFyZHdhcmUgX2NvdWxkXyBkbyBzbWFsbGVyLCBidXQgZHJpdmVyIGRvZXNuJ3QgKi8KKwlpZiAoKGRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkJJiYgbGUxNl90b19jcHUgKGRlc2MtPndNYXhQYWNrZXRTaXplKQorCQkJCQkJIT0gQlVMS19GSUZPX1NJWkUpCisJCQl8fCAhZGVzYy0+d01heFBhY2tldFNpemUpIHsKKwkJRE1TRygiJXMsIGJhZCAlcyBtYXhwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCURNU0coIiVzLCBib2d1cyBkZXZpY2Ugc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCWVwLT5kZXNjID0gZGVzYzsKKwllcC0+ZG1hID0gLTE7CisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5waW9faXJxcyA9IGVwLT5kbWFfaXJxcyA9IDA7CisJZXAtPmVwLm1heHBhY2tldCA9IGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwkvKiBmbHVzaCBmaWZvIChtb3N0bHkgZm9yIE9VVCBidWZmZXJzKSAqLworCXB4YTJ4eF9lcF9maWZvX2ZsdXNoIChfZXApOworCisJLyogLi4uIHJlc2V0IGhhbHQgc3RhdGUgdG9vLCBpZiB3ZSBjb3VsZCAuLi4gKi8KKworI2lmZGVmCVVTRV9ETUEKKwkvKiBmb3IgKHNvbWUpIGJ1bGsgYW5kIElTTyBlbmRwb2ludHMsIHRyeSB0byBnZXQgYSBETUEgY2hhbm5lbCBhbmQKKwkgKiBiaW5kIGl0IHRvIHRoZSBlbmRwb2ludC4gIG90aGVyd2lzZSB1c2UgUElPLiAKKwkgKi8KKwlzd2l0Y2ggKGVwLT5ibUF0dHJpYnV0ZXMpIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCWlmIChsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkgJSAzMikKKwkJCWJyZWFrOworCQkvLyBmYWxsIHRocm91Z2gKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCWlmICghdXNlX2RtYSB8fCAhZXAtPnJlZ19kcmNtcikKKwkJCWJyZWFrOworCQllcC0+ZG1hID0gcHhhX3JlcXVlc3RfZG1hICgoY2hhciAqKV9lcC0+bmFtZSwKKyAJCQkJKGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSkgPiA2NCkKKwkJCQkJPyBETUFfUFJJT19NRURJVU0gLyogc29tZSBpc28gKi8KKwkJCQkJOiBETUFfUFJJT19MT1csCisJCQkJZG1hX25vZGVzY19oYW5kbGVyLCBlcCk7CisJCWlmIChlcC0+ZG1hID49IDApIHsKKwkJCSplcC0+cmVnX2RyY21yID0gRFJDTVJfTUFQVkxEIHwgZXAtPmRtYTsKKwkJCURNU0coIiVzIHVzaW5nIGRtYSVkXG4iLCBfZXAtPm5hbWUsIGVwLT5kbWEpOworCQl9CisJfQorI2VuZGlmCisKKwlEQkcoREJHX1ZFUkJPU0UsICJlbmFibGVkICVzXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHB4YTJ4eF9lcAkqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjKSB7CisJCURNU0coIiVzLCAlcyBub3QgZW5hYmxlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJX2VwID8gZXAtPmVwLm5hbWUgOiBOVUxMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW51a2UgKGVwLCAtRVNIVVRET1dOKTsKKworI2lmZGVmCVVTRV9ETUEKKwlpZiAoZXAtPmRtYSA+PSAwKSB7CisJCSplcC0+cmVnX2RyY21yID0gMDsKKwkJcHhhX2ZyZWVfZG1hIChlcC0+ZG1hKTsKKwkJZXAtPmRtYSA9IC0xOworCX0KKyNlbmRpZgorCisJLyogZmx1c2ggZmlmbyAobW9zdGx5IGZvciBJTiBidWZmZXJzKSAqLworCXB4YTJ4eF9lcF9maWZvX2ZsdXNoIChfZXApOworCisJZXAtPmRlc2MgPSBOVUxMOworCWVwLT5zdG9wcGVkID0gMTsKKworCURCRyhEQkdfVkVSQk9TRSwgIiVzIGRpc2FibGVkXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmb3IgdGhlIHB4YTJ4eCwgdGhlc2UgY2FuIGp1c3Qgd3JhcCBrbWFsbG9jL2tmcmVlLiAgZ2FkZ2V0IGRyaXZlcnMKKyAqIG11c3Qgc3RpbGwgcGFzcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgZW5kcG9pbnRzLCBzaW5jZSBvdGhlciBjb250cm9sbGVyCisgKiBkcml2ZXJzIG1heSBjYXJlIGFib3V0IGhvdyBpdCdzIGN1cnJlbnRseSBzZXQgdXAgKGRtYSBpc3N1ZXMgZXRjKS4KKyAqLworCisvKgorICogCXB4YTJ4eF9lcF9hbGxvY19yZXF1ZXN0IC0gYWxsb2NhdGUgYSByZXF1ZXN0IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorcHhhMnh4X2VwX2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IGttYWxsb2MgKHNpemVvZiAqcmVxLCBnZnBfZmxhZ3MpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJSU5JVF9MSVNUX0hFQUQgKCZyZXEtPnF1ZXVlKTsKKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCisKKy8qCisgKiAJcHhhMnh4X2VwX2ZyZWVfcmVxdWVzdCAtIGRlYWxsb2NhdGUgYSByZXF1ZXN0IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkCitweGEyeHhfZXBfZnJlZV9yZXF1ZXN0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZiAoX3JlcSwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCByZXEpOworCVdBUk5fT04gKCFsaXN0X2VtcHR5ICgmcmVxLT5xdWV1ZSkpOworCWtmcmVlKHJlcSk7Cit9CisKKworLyogUFhBIGNhY2hlIG5lZWRzIGZsdXNoaW5nIHdpdGggRE1BIEkvTyAoaXQncyBkbWEtaW5jb2hlcmVudCksIGJ1dCB0aGVyZSdzCisgKiBubyBkZXZpY2UtYWZmaW5pdHkgYW5kIHRoZSBoZWFwIHdvcmtzIHBlcmZlY3RseSB3ZWxsIGZvciBpL28gYnVmZmVycy4KKyAqIEl0IHdhc3RlcyBtdWNoIGxlc3MgbWVtb3J5IHRoYW4gZG1hX2FsbG9jX2NvaGVyZW50KCkgd291bGQsIGFuZCBldmVuCisgKiBwcmV2ZW50cyBjYWNoZWxpbmUgKDMyIGJ5dGVzIHdpZGUpIHNoYXJpbmcgcHJvYmxlbXMuCisgKi8KK3N0YXRpYyB2b2lkICoKK3B4YTJ4eF9lcF9hbGxvY19idWZmZXIoc3RydWN0IHVzYl9lcCAqX2VwLCB1bnNpZ25lZCBieXRlcywKKwlkbWFfYWRkcl90ICpkbWEsIGludCBnZnBfZmxhZ3MpCit7CisJY2hhcgkJCSpyZXR2YWw7CisKKwlyZXR2YWwgPSBrbWFsbG9jIChieXRlcywgZ2ZwX2ZsYWdzICYgfihfX0dGUF9ETUF8X19HRlBfSElHSE1FTSkpOworCWlmIChyZXR2YWwpCisjaWZkZWYJVVNFX0RNQQorCQkqZG1hID0gdmlydF90b19idXMgKHJldHZhbCk7CisjZWxzZQorCQkqZG1hID0gKGRtYV9hZGRyX3QpfjA7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorcHhhMnh4X2VwX2ZyZWVfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKl9lcCwgdm9pZCAqYnVmLCBkbWFfYWRkcl90IGRtYSwKKwkJdW5zaWduZWQgYnl0ZXMpCit7CisJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKglkb25lIC0gcmV0aXJlIGEgcmVxdWVzdDsgY2FsbGVyIGJsb2NrZWQgaXJxcworICovCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZAkJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwlpZiAobGlrZWx5IChyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikKKwkJREJHKERCR19WRVJCT1NFLCAiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDBfaWRsZSAoc3RydWN0IHB4YTJ4eF91ZGMgKmRldikKK3sKKwlkZXYtPmVwMHN0YXRlID0gRVAwX0lETEU7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3BhY2tldCh2b2xhdGlsZSB1MzIgKnVkZHIsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBtYXgpCit7CisJdTgJCSpidWY7CisJdW5zaWduZWQJbGVuZ3RoLCBjb3VudDsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJLyogaG93IGJpZyB3aWxsIHRoaXMgcGFja2V0IGJlPyAqLworCWxlbmd0aCA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbmd0aDsKKworCWNvdW50ID0gbGVuZ3RoOworCXdoaWxlIChsaWtlbHkoY291bnQtLSkpCisJCSp1ZGRyID0gKmJ1ZisrOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIHdyaXRlIHRvIGFuIElOIGVuZHBvaW50IGZpZm8sIGFzIG1hbnkgcGFja2V0cyBhcyBwb3NzaWJsZS4KKyAqIGlycXMgd2lsbCB1c2UgdGhpcyB0byB3cml0ZSB0aGUgcmVzdCBsYXRlci4KKyAqIGNhbGxlciBndWFyYW50ZWVzIGF0IGxlYXN0IG9uZSBwYWNrZXQgYnVmZmVyIGlzIHJlYWR5IChvciBhIHpscCkuCisgKi8KK3N0YXRpYyBpbnQKK3dyaXRlX2ZpZm8gKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZAkJbWF4OworCisJbWF4ID0gbGUxNl90b19jcHUoZXAtPmRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwlkbyB7CisJCXVuc2lnbmVkCWNvdW50OworCQlpbnQJCWlzX2xhc3QsIGlzX3Nob3J0OworCisJCWNvdW50ID0gd3JpdGVfcGFja2V0KGVwLT5yZWdfdWRkciwgcmVxLCBtYXgpOworCisJCS8qIGxhc3QgcGFja2V0IGlzIHVzdWFsbHkgc2hvcnQgKG9yIGEgemxwKSAqLworCQlpZiAodW5saWtlbHkgKGNvdW50ICE9IG1heCkpCisJCQlpc19sYXN0ID0gaXNfc2hvcnQgPSAxOworCQllbHNlIHsKKwkJCWlmIChsaWtlbHkocmVxLT5yZXEubGVuZ3RoICE9IHJlcS0+cmVxLmFjdHVhbCkKKwkJCQkJfHwgcmVxLT5yZXEuemVybykKKwkJCQlpc19sYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlpc19sYXN0ID0gMTsKKwkJCS8qIGludGVycnVwdC9pc28gbWF4cGFja2V0IG1heSBub3QgZmlsbCB0aGUgZmlmbyAqLworCQkJaXNfc2hvcnQgPSB1bmxpa2VseSAobWF4IDwgZXAtPmZpZm9fc2l6ZSk7CisJCX0KKworCQlEQkcoREJHX1ZFUllfTk9JU1ksICJ3cm90ZSAlcyAlZCBieXRlcyVzJXMgJWQgbGVmdCAlcFxuIiwKKwkJCWVwLT5lcC5uYW1lLCBjb3VudCwKKwkJCWlzX2xhc3QgPyAiL0wiIDogIiIsIGlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkJcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCByZXEpOworCisJCS8qIGxldCBsb29zZSB0aGF0IHBhY2tldC4gbWF5YmUgdHJ5IHdyaXRpbmcgYW5vdGhlciBvbmUsCisJCSAqIGRvdWJsZSBidWZmZXJpbmcgbWlnaHQgd29yay4gIFRTUCwgVFBDLCBhbmQgVEZTCisJCSAqIGJpdCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGZvciBhbGwgbm9ybWFsIElOIGVuZHBvaW50cy4KKwkJICovCisJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfVFBDOworCQlpZiAoaXNfc2hvcnQpCisJCQkqZXAtPnJlZ191ZGNjcyA9IFVEQ0NTX0JJX1RTUDsKKworCQkvKiByZXF1ZXN0cyBjb21wbGV0ZSB3aGVuIGFsbCBJTiBkYXRhIGlzIGluIHRoZSBGSUZPICovCisJCWlmIChpc19sYXN0KSB7CisJCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpIHx8IHVubGlrZWx5KGVwLT5kbWEgPj0gMCkpIHsKKwkJCQlwaW9faXJxX2Rpc2FibGUgKGVwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKyNpZmRlZiBVU0VfRE1BCisJCQkJLyogdW5hbGlnbmVkIGRhdGEgYW5kIHpscHMgY291bGRuJ3QgdXNlIGRtYSAqLworCQkJCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpIHsKKwkJCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCQkJCQlraWNrX2RtYShlcCxyZXEpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJCXJldHVybiAxOworCQl9CisKKwkJLy8gVE9ETyBleHBlcmltZW50OiBob3cgcm9idXN0IGNhbiBmaWZvIG1vZGUgdHdlYWtpbmcgYmU/CisJCS8vIGRvdWJsZSBidWZmZXJpbmcgaXMgb2ZmIGluIHRoZSBkZWZhdWx0IGZpZm8gbW9kZSwgd2hpY2gKKwkJLy8gcHJldmVudHMgVEZTIGZyb20gYmVpbmcgc2V0IGhlcmUuCisKKwl9IHdoaWxlICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlciBhc3NlcnRzIHJlcS0+cGVuZGluZyAoZXAwIGlycSBzdGF0dXMgbnlldCBjbGVhcmVkKTsgc3RhcnRzCisgKiBlcDAgZGF0YSBzdGFnZS4gIHRoZXNlIGNoaXBzIHdhbnQgdmVyeSBzaW1wbGUgc3RhdGUgdHJhbnNpdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZXAwc3RhcnQoc3RydWN0IHB4YTJ4eF91ZGMgKmRldiwgdTMyIGZsYWdzLCBjb25zdCBjaGFyICp0YWcpCit7CisJVURDQ1MwID0gZmxhZ3N8VURDQ1MwX1NBfFVEQ0NTMF9PUFI7CisJVVNJUjAgPSBVU0lSMF9JUjA7CisJZGV2LT5yZXFfcGVuZGluZyA9IDA7CisJREJHKERCR19WRVJZX05PSVNZLCAiJXMgJXMsICUwMngvJTAyeFxuIiwKKwkJX19GVU5DVElPTl9fLCB0YWcsIFVEQ0NTMCwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9lcDBfZmlmbyAoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkCWNvdW50OworCWludAkJaXNfc2hvcnQ7CisKKwljb3VudCA9IHdyaXRlX3BhY2tldCgmVUREUjAsIHJlcSwgRVAwX0ZJRk9fU0laRSk7CisJZXAtPmRldi0+c3RhdHMud3JpdGUuYnl0ZXMgKz0gY291bnQ7CisKKwkvKiBsYXN0IHBhY2tldCAibXVzdCBiZSIgc2hvcnQgKG9yIGEgemxwKSAqLworCWlzX3Nob3J0ID0gKGNvdW50ICE9IEVQMF9GSUZPX1NJWkUpOworCisJREJHKERCR19WRVJZX05PSVNZLCAiZXAwaW4gJWQgYnl0ZXMgJWQgbGVmdCAlcFxuIiwgY291bnQsCisJCXJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgcmVxKTsKKworCWlmICh1bmxpa2VseSAoaXNfc2hvcnQpKSB7CisJCWlmIChlcC0+ZGV2LT5yZXFfcGVuZGluZykKKwkJCWVwMHN0YXJ0KGVwLT5kZXYsIFVEQ0NTMF9JUFIsICJzaG9ydCBJTiIpOworCQllbHNlCisJCQlVRENDUzAgPSBVRENDUzBfSVBSOworCisJCWNvdW50ID0gcmVxLT5yZXEubGVuZ3RoOworCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJZXAwX2lkbGUoZXAtPmRldik7CisjaWYgMQorCQkvKiBUaGlzIHNlZW1zIHRvIGdldCByaWQgb2YgbG9zdCBzdGF0dXMgaXJxcyBpbiBzb21lIGNhc2VzOgorCQkgKiBob3N0IHJlc3BvbmRzIHF1aWNrbHksIG9yIG5leHQgcmVxdWVzdCBpbnZvbHZlcyBjb25maWcKKwkJICogY2hhbmdlIGF1dG9tYWdpYywgb3Igc2hvdWxkIGhhdmUgYmVlbiBoaWRkZW4sIG9yIC4uLgorCQkgKgorCQkgKiBGSVhNRSBnZXQgcmlkIG9mIGFsbCB1ZGVsYXlzIHBvc3NpYmxlLi4uCisJCSAqLworCQlpZiAoY291bnQgPj0gRVAwX0ZJRk9fU0laRSkgeworCQkJY291bnQgPSAxMDA7CisJCQlkbyB7CisJCQkJaWYgKChVRENDUzAgJiBVRENDUzBfT1BSKSAhPSAwKSB7CisJCQkJCS8qIGNsZWFyIE9QUiwgZ2VuZXJhdGUgYWNrICovCisJCQkJCVVEQ0NTMCA9IFVEQ0NTMF9PUFI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljb3VudC0tOworCQkJCXVkZWxheSgxKTsKKwkJCX0gd2hpbGUgKGNvdW50KTsKKwkJfQorI2VuZGlmCisJfSBlbHNlIGlmIChlcC0+ZGV2LT5yZXFfcGVuZGluZykKKwkJZXAwc3RhcnQoZXAtPmRldiwgMCwgIklOIik7CisJcmV0dXJuIGlzX3Nob3J0OworfQorCisKKy8qCisgKiByZWFkX2ZpZm8gLSAgdW5sb2FkIHBhY2tldChzKSBmcm9tIHRoZSBmaWZvIHdlIHVzZSBmb3IgdXNiIE9VVAorICogdHJhbnNmZXJzIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSByZXF1ZXN0LiAgY2FsbGVyIHNob3VsZCBoYXZlIG1hZGUKKyAqIHN1cmUgdGhlcmUncyBhdCBsZWFzdCBvbmUgcGFja2V0IHJlYWR5LgorICoKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdCBjb21wbGV0ZWQgYmVjYXVzZSBvZiBzaG9ydCBwYWNrZXQgb3IgdGhlCisgKiByZXF1ZXN0IGJ1ZmZlciBoYXZpbmcgZmlsbGVkIChhbmQgbWF5YmUgb3ZlcnJhbiB0aWxsIGVuZC1vZi1wYWNrZXQpLgorICovCitzdGF0aWMgaW50CityZWFkX2ZpZm8gKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSkKK3sKKwlmb3IgKDs7KSB7CisJCXUzMgkJdWRjY3M7CisJCXU4CQkqYnVmOworCQl1bnNpZ25lZAlidWZmZXJzcGFjZSwgY291bnQsIGlzX3Nob3J0OworCisJCS8qIG1ha2Ugc3VyZSB0aGVyZSdzIGEgcGFja2V0IGluIHRoZSBGSUZPLgorCQkgKiBVRENDU197Qk8sSU99X1JQQyBhcmUgYWxsIHRoZSBzYW1lIGJpdCB2YWx1ZS4KKwkJICogVURDQ1Nfe0JPLElPfV9STkUgYXJlIGFsbCB0aGUgc2FtZSBiaXQgdmFsdWUuCisJCSAqLworCQl1ZGNjcyA9ICplcC0+cmVnX3VkY2NzOworCQlpZiAodW5saWtlbHkgKCh1ZGNjcyAmIFVEQ0NTX0JPX1JQQykgPT0gMCkpCisJCQlicmVhazsKKwkJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCQlwcmVmZXRjaHcoYnVmKTsKKwkJYnVmZmVyc3BhY2UgPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisKKwkJLyogcmVhZCBhbGwgYnl0ZXMgZnJvbSB0aGlzIHBhY2tldCAqLworCQlpZiAobGlrZWx5ICh1ZGNjcyAmIFVEQ0NTX0JPX1JORSkpIHsKKwkJCWNvdW50ID0gMSArICgweDBmZiAmICplcC0+cmVnX3ViY3IpOworCQkJcmVxLT5yZXEuYWN0dWFsICs9IG1pbiAoY291bnQsIGJ1ZmZlcnNwYWNlKTsKKwkJfSBlbHNlIC8qIHpscCAqLworCQkJY291bnQgPSAwOworCQlpc19zaG9ydCA9IChjb3VudCA8IGVwLT5lcC5tYXhwYWNrZXQpOworCQlEQkcoREJHX1ZFUllfTk9JU1ksICJyZWFkICVzICUwMngsICVkIGJ5dGVzJXMgcmVxICVwICVkLyVkXG4iLAorCQkJZXAtPmVwLm5hbWUsIHVkY2NzLCBjb3VudCwKKwkJCWlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkJcmVxLCByZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisJCXdoaWxlIChsaWtlbHkgKGNvdW50LS0gIT0gMCkpIHsKKwkJCXU4CWJ5dGUgPSAodTgpICplcC0+cmVnX3VkZHI7CisKKwkJCWlmICh1bmxpa2VseSAoYnVmZmVyc3BhY2UgPT0gMCkpIHsKKwkJCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZHJpdmVyJ3MgYnVmZmVyCisJCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgorCQkJCSAqLworCQkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQkJRE1TRygiJXMgb3ZlcmZsb3cgJWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSwgY291bnQpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCSpidWYrKyA9IGJ5dGU7CisJCQkJYnVmZmVyc3BhY2UtLTsKKwkJCX0KKwkJfQorCQkqZXAtPnJlZ191ZGNjcyA9ICBVRENDU19CT19SUEM7CisJCS8qIFJQQy9SU1AvUk5FIGNvdWxkIG5vdyByZWZsZWN0IHRoZSBvdGhlciBwYWNrZXQgYnVmZmVyICovCisKKwkJLyogaXNvIGlzIG9uZSByZXF1ZXN0IHBlciBwYWNrZXQgKi8KKwkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQkJaWYgKHVkY2NzICYgVURDQ1NfSU9fUk9GKQorCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FSE9TVFVOUkVBQ0g7CisJCQkvKiBtb3JlIGxpa2UgImlzX2RvbmUiICovCisJCQlpc19zaG9ydCA9IDE7CisJCX0KKworCQkvKiBjb21wbGV0aW9uICovCisJCWlmIChpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJCXBpb19pcnFfZGlzYWJsZSAoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNwZWNpYWwgZXAwIHZlcnNpb24gb2YgdGhlIGFib3ZlLiAgbm8gVUJDUjAgb3IgZG91YmxlIGJ1ZmZlcmluZzsgc3RhdHVzCisgKiBoYW5kc2hha2luZyBpcyBtYWdpYy4gIG1vc3QgZGV2aWNlIHByb3RvY29scyBkb24ndCBuZWVkIGNvbnRyb2wtT1VULgorICogQ0RDIHZlbmRvciBjb21tYW5kcyAoYW5kIFJORElTKSwgbWFzcyBzdG9yYWdlIENCL0NCSSwgYW5kIHNvbWUgb3RoZXIKKyAqIHByb3RvY29scyBkbyB1c2UgdGhlbS4KKyAqLworc3RhdGljIGludAorcmVhZF9lcDBfZmlmbyAoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCXU4CQkqYnVmLCBieXRlOworCXVuc2lnbmVkCWJ1ZmZlcnNwYWNlOworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCWJ1ZmZlcnNwYWNlID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCisJd2hpbGUgKFVEQ0NTMCAmIFVEQ0NTMF9STkUpIHsKKwkJYnl0ZSA9ICh1OCkgVUREUjA7CisKKwkJaWYgKHVubGlrZWx5IChidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJLyogdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlcidzIGJ1ZmZlcgorCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCisJCQkgKi8KKwkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQlETVNHKCIlcyBvdmVyZmxvd1xuIiwgZXAtPmVwLm5hbWUpOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIHsKKwkJCSpidWYrKyA9IGJ5dGU7CisJCQlyZXEtPnJlcS5hY3R1YWwrKzsKKwkJCWJ1ZmZlcnNwYWNlLS07CisJCX0KKwl9CisKKwlVRENDUzAgPSBVRENDUzBfT1BSIHwgVURDQ1MwX0lQUjsKKworCS8qIGNvbXBsZXRpb24gKi8KKwlpZiAocmVxLT5yZXEuYWN0dWFsID49IHJlcS0+cmVxLmxlbmd0aCkKKwkJcmV0dXJuIDE7CisKKwkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCXJldHVybiAwOworfQorCisjaWZkZWYJVVNFX0RNQQorCisjZGVmaW5lCU1BWF9JTl9ETUEJKChEQ01EX0xFTkdUSCArIDEpIC0gQlVMS19GSUZPX1NJWkUpCisKK3N0YXRpYyB2b2lkCitzdGFydF9kbWFfbm9kZXNjKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSwgaW50IGlzX2luKQoreworCXUzMglkY21kID0gcmVxLT5yZXEubGVuZ3RoOworCXUzMglidWYgPSByZXEtPnJlcS5kbWE7CisJdTMyCWZpZm8gPSBpb192MnAgKCh1MzIpZXAtPnJlZ191ZGRyKTsKKworCS8qIGNhbGxlciBndWFyYW50ZWVzIHRoZXJlJ3MgYSBwYWNrZXQgb3IgbW9yZSByZW1haW5pbmcKKwkgKiAgLSBJTiBtYXkgZW5kIHdpdGggYSBzaG9ydCBwYWNrZXQgKFRTUCBzZXQgc2VwYXJhdGVseSksCisJICogIC0gT1VUIGlzIGFsd2F5cyBmdWxsIGxlbmd0aAorCSAqLworCWJ1ZiArPSByZXEtPnJlcS5hY3R1YWw7CisJZGNtZCAtPSByZXEtPnJlcS5hY3R1YWw7CisJZXAtPmRtYV9maXh1cCA9IDA7CisKKwkvKiBuby1kZXNjcmlwdG9yIG1vZGUgY2FuIGJlIHNpbXBsZSBmb3IgYnVsay1pbiwgaXNvLWluLCBpc28tb3V0ICovCisJRENTUihlcC0+ZG1hKSA9IERDU1JfTk9ERVNDOworCWlmIChpc19pbikgeworCQlEU0FEUihlcC0+ZG1hKSA9IGJ1ZjsKKwkJRFRBRFIoZXAtPmRtYSkgPSBmaWZvOworCQlpZiAoZGNtZCA+IE1BWF9JTl9ETUEpCisJCQlkY21kID0gTUFYX0lOX0RNQTsKKwkJZWxzZQorCQkJZXAtPmRtYV9maXh1cCA9IChkY21kICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMDsKKwkJZGNtZCB8PSBEQ01EX0JVUlNUMzIgfCBEQ01EX1dJRFRIMQorCQkJfCBEQ01EX0ZMT1dUUkcgfCBEQ01EX0lOQ1NSQ0FERFI7CisJfSBlbHNlIHsKKyNpZmRlZiBVU0VfT1VUX0RNQQorCQlEU0FEUihlcC0+ZG1hKSA9IGZpZm87CisJCURUQURSKGVwLT5kbWEpID0gYnVmOworCQlpZiAoZXAtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJZGNtZCA9IGVwLT5lcC5tYXhwYWNrZXQ7CisJCWRjbWQgfD0gRENNRF9CVVJTVDMyIHwgRENNRF9XSURUSDEKKwkJCXwgRENNRF9GTE9XU1JDIHwgRENNRF9JTkNUUkdBRERSOworI2VuZGlmCisJfQorCURDTUQoZXAtPmRtYSkgPSBkY21kOworCURDU1IoZXAtPmRtYSkgPSBEQ1NSX1JVTiB8IERDU1JfTk9ERVNDCisJCXwgKHVubGlrZWx5KGlzX2luKQorCQkJPyBEQ1NSX1NUT1BJUlFFTgkvKiB1c2UgZG1hX25vZGVzY19oYW5kbGVyKCkgKi8KKwkJCTogMCk7CQkJLyogdXNlIGhhbmRsZV9lcCgpICovCit9CisKK3N0YXRpYyB2b2lkIGtpY2tfZG1hKHN0cnVjdCBweGEyeHhfZXAgKmVwLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQJaXNfaW4gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU47CisKKwlpZiAoaXNfaW4pIHsKKwkJLyogdW5hbGlnbmVkIHR4IGJ1ZmZlcnMgYW5kIHpscHMgb25seSB3b3JrIHdpdGggUElPICovCisJCWlmICgocmVxLT5yZXEuZG1hICYgMHgwZikgIT0gMAorCQkJCXx8IHVubGlrZWx5KChyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwpCisJCQkJCQk9PSAwKSkgeworCQkJcGlvX2lycV9lbmFibGUoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJaWYgKCgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUykgIT0gMCkKKwkJCQkodm9pZCkgd3JpdGVfZmlmbyhlcCwgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXJ0X2RtYV9ub2Rlc2MoZXAsIHJlcSwgVVNCX0RJUl9JTik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCkgPCBlcC0+ZXAubWF4cGFja2V0KSB7CisJCQlETVNHKCIlcyBzaG9ydCBkbWEgcmVhZC4uLlxuIiwgZXAtPmVwLm5hbWUpOworCQkJLyogd2UncmUgYWx3YXlzIHNldCB1cCBmb3IgcGlvIG91dCAqLworCQkJcmVhZF9maWZvIChlcCwgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQk9fRE1FCisJCQkJfCAoKmVwLT5yZWdfdWRjY3MgJiBVRENDU19CT19GU1QpOworCQkJc3RhcnRfZG1hX25vZGVzYyhlcCwgcmVxLCBVU0JfRElSX09VVCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhbmNlbF9kbWEoc3RydWN0IHB4YTJ4eF9lcCAqZXApCit7CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0CSpyZXE7CisJdTMyCQkJdG1wOworCisJaWYgKERDU1IoZXAtPmRtYSkgPT0gMCB8fCBsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXR1cm47CisKKwlEQ1NSKGVwLT5kbWEpID0gMDsKKwl3aGlsZSAoKERDU1IoZXAtPmRtYSkgJiBEQ1NSX1NUT1BTVEFURSkgPT0gMCkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKwl0bXAgPSBEQ01EKGVwLT5kbWEpICYgRENNRF9MRU5HVEg7CisJcmVxLT5yZXEuYWN0dWFsID0gcmVxLT5yZXEubGVuZ3RoIC0gKHRtcCAmIERDTURfTEVOR1RIKTsKKworCS8qIHRoZSBsYXN0IHR4IHBhY2tldCBtYXkgYmUgaW5jb21wbGV0ZSwgc28gZmx1c2ggdGhlIGZpZm8uCisJICogRklYTUUgY29ycmVjdCByZXEuYWN0dWFsIGlmIHdlIGNhbgorCSAqLworCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfRlRGOworfQorCisvKiBkbWEgY2hhbm5lbCBzdG9wcGVkIC4uLiBub3JtYWwgdHggZW5kIChJTiksIG9yIG9uIGVycm9yIChJTi9PVVQpICovCitzdGF0aWMgdm9pZCBkbWFfbm9kZXNjX2hhbmRsZXIoaW50IGRtYWNoLCB2b2lkICpfZXAsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBweGEyeHhfZXAJKmVwID0gX2VwOworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCXUzMgkJCXRtcCwgY29tcGxldGVkOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCisJZXAtPmRtYV9pcnFzKys7CisJZXAtPmRldi0+c3RhdHMuaXJxcysrOworCUhFWF9ESVNQTEFZKGVwLT5kZXYtPnN0YXRzLmlycXMpOworCisJLyogYWNrL2NsZWFyICovCisJdG1wID0gRENTUihlcC0+ZG1hKTsKKwlEQ1NSKGVwLT5kbWEpID0gdG1wOworCWlmICgodG1wICYgRENTUl9TVE9QU1RBVEUpID09IDAKKwkJCXx8IChEREFEUihlcC0+ZG1hKSAmIEREQURSX1NUT1ApICE9IDApIHsKKwkJREJHKERCR19WRVJCT1NFLCAiJXMsIGRjc3IgJTA4eCBkZGFkciAlMDh4XG4iLAorCQkJZXAtPmVwLm5hbWUsIERDU1IoZXAtPmRtYSksIEREQURSKGVwLT5kbWEpKTsKKwkJZ290byBkb25lOworCX0KKwlEQ1NSKGVwLT5kbWEpID0gMDsJLyogY2xlYXIgRENTUl9TVE9QU1RBVEUgKi8KKworCS8qIHVwZGF0ZSB0cmFuc2ZlciBzdGF0dXMgKi8KKwljb21wbGV0ZWQgPSB0bXAgJiBEQ1NSX0JVU0VSUjsKKwlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQl0bXAgPSBEU0FEUihlcC0+ZG1hKTsKKwllbHNlCisJCXRtcCA9IERUQURSKGVwLT5kbWEpOworCXJlcS0+cmVxLmFjdHVhbCA9IHRtcCAtIHJlcS0+cmVxLmRtYTsKKworCS8qIEZJWE1FIHNlZW1zIHdlIHNvbWV0aW1lcyBzZWUgcGFydGlhbCB0cmFuc2ZlcnMuLi4gKi8KKworCWlmICh1bmxpa2VseShjb21wbGV0ZWQgIT0gMCkpCisJCXJlcS0+cmVxLnN0YXR1cyA9IC1FSU87CisJZWxzZSBpZiAocmVxLT5yZXEuYWN0dWFsKSB7CisJCS8qIHRoZXNlIHJlZ2lzdGVycyBoYXZlIHplcm9lcyBpbiBsb3cgYml0czsgdGhleSBtaXNjb3VudAorCQkgKiBzb21lIChlbmQtb2YtdHJhbnNmZXIpIHNob3J0IHBhY2tldHM6ICB0eCAxNCBhcyB0eCAxMgorCQkgKi8KKwkJaWYgKGVwLT5kbWFfZml4dXApCisJCQlyZXEtPnJlcS5hY3R1YWwgPSBtaW4ocmVxLT5yZXEuYWN0dWFsICsgMywKKwkJCQkJCXJlcS0+cmVxLmxlbmd0aCk7CisKKwkJdG1wID0gKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCk7CisJCWNvbXBsZXRlZCA9ICh0bXAgPT0gMCk7CisJCWlmIChjb21wbGV0ZWQgJiYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpIHsKKworCQkJLyogbWF5YmUgdmFsaWRhdGUgZmluYWwgc2hvcnQgcGFja2V0IC4uLiAqLworCQkJaWYgKChyZXEtPnJlcS5hY3R1YWwgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCQkJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfVFNQLyp8VURDQ1NfQklfVFBDKi87CisKKwkJCS8qIC4uLiBvciB6bHAsIHVzaW5nIHBpbyBmYWxsYmFjayAqLworCQkJZWxzZSBpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkJCSYmIHJlcS0+cmVxLnplcm8pIHsKKwkJCQlETVNHKCIlcyB6bHAgdGVybWluYXRlIC4uLlxuIiwgZXAtPmVwLm5hbWUpOworCQkJCWNvbXBsZXRlZCA9IDA7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobGlrZWx5KGNvbXBsZXRlZCkpIHsKKwkJZG9uZShlcCwgcmVxLCAwKTsKKworCQkvKiBtYXliZSByZS1hY3RpdmF0ZSBhZnRlciBjb21wbGV0aW9uICovCisJCWlmIChlcC0+c3RvcHBlZCB8fCBsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQkJZ290byBkb25lOworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKwl9CisJa2lja19kbWEoZXAsIHJlcSk7Citkb25lOgorCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK3B4YTJ4eF9lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKwlzdHJ1Y3QgcHhhMnh4X2VwCSplcDsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcmVxKTsKKwlpZiAodW5saWtlbHkgKCFfcmVxIHx8ICFfcmVxLT5jb21wbGV0ZSB8fCAhX3JlcS0+YnVmCisJCQl8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpKSB7CisJCURNU0coIiVzLCBiYWQgcGFyYW1zXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+ZXAubmFtZSAhPSBlcDBuYW1lKSkpIHsKKwkJRE1TRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkgKCFkZXYtPmRyaXZlcgorCQkJfHwgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pKSB7CisJCURNU0coIiVzLCBib2d1cyBkZXZpY2Ugc3RhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCS8qIGlzbyBpcyBhbHdheXMgb25lIHBhY2tldCBwZXIgcmVxdWVzdCwgdGhhdCdzIHRoZSBvbmx5IHdheQorCSAqIHdlIGNhbiByZXBvcnQgcGVyLXBhY2tldCBzdGF0dXMuICB0aGF0IGFsc28gaGVscHMgd2l0aCBkbWEuCisJICovCisJaWYgKHVubGlrZWx5IChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCSYmIHJlcS0+cmVxLmxlbmd0aCA+IGxlMTZfdG9fY3B1CisJCQkJCQkoZXAtPmRlc2MtPndNYXhQYWNrZXRTaXplKSkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKyNpZmRlZglVU0VfRE1BCisJLy8gRklYTUUgY2FsbGVyIG1heSBhbHJlYWR5IGhhdmUgZG9uZSB0aGUgZG1hIG1hcHBpbmcKKwlpZiAoZXAtPmRtYSA+PSAwKSB7CisJCV9yZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LAorCQkJX3JlcS0+YnVmLCBfcmVxLT5sZW5ndGgsCisJCQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMCkKKwkJCQk/IERNQV9UT19ERVZJQ0UKKwkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJfQorI2VuZGlmCisKKwlEQkcoREJHX05PSVNZLCAiJXMgcXVldWUgcmVxICVwLCBsZW4gJWQgYnVmICVwXG4iLAorCSAgICAgX2VwLT5uYW1lLCBfcmVxLCBfcmVxLT5sZW5ndGgsIF9yZXEtPmJ1Zik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKworCS8qIGtpY2tzdGFydCB0aGlzIGkvbyBxdWV1ZT8gKi8KKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJaWYgKGVwLT5kZXNjID09IDAgLyogZXAwICovKSB7CisJCQl1bnNpZ25lZAlsZW5ndGggPSBfcmVxLT5sZW5ndGg7CisKKwkJCXN3aXRjaCAoZGV2LT5lcDBzdGF0ZSkgeworCQkJY2FzZSBFUDBfSU5fREFUQV9QSEFTRToKKwkJCQlkZXYtPnN0YXRzLndyaXRlLm9wcysrOworCQkJCWlmICh3cml0ZV9lcDBfZmlmbyhlcCwgcmVxKSkKKwkJCQkJcmVxID0gTlVMTDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFUDBfT1VUX0RBVEFfUEhBU0U6CisJCQkJZGV2LT5zdGF0cy5yZWFkLm9wcysrOworCQkJCS8qIG1lc3N5IC4uLiAqLworCQkJCWlmIChkZXYtPnJlcV9jb25maWcpIHsKKwkJCQkJREJHKERCR19WRVJCT1NFLCAiZXAwIGNvbmZpZyBhY2slc1xuIiwKKwkJCQkJCWRldi0+aGFzX2NmciA/ICAiIiA6ICIgcmFjZWQiKTsKKwkJCQkJaWYgKGRldi0+aGFzX2NmcikKKwkJCQkJCVVEQ0NGUiA9IFVEQ0NGUl9BUkVOfFVEQ0NGUl9BQ00KKwkJCQkJCQl8VURDQ0ZSX01CMTsKKwkJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9FTkRfWEZFUjsKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmIChkZXYtPnJlcV9wZW5kaW5nKQorCQkJCQllcDBzdGFydChkZXYsIFVEQ0NTMF9JUFIsICJPVVQiKTsKKwkJCQlpZiAobGVuZ3RoID09IDAgfHwgKChVRENDUzAgJiBVRENDUzBfUk5FKSAhPSAwCisJCQkJCQkmJiByZWFkX2VwMF9maWZvKGVwLCByZXEpKSkgeworCQkJCQllcDBfaWRsZShkZXYpOworCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCQlyZXEgPSBOVUxMOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlETVNHKCJlcDAgaS9vLCBvZGQgc3RhdGUgJWRcbiIsIGRldi0+ZXAwc3RhdGUpOworCQkJCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisJCQkJcmV0dXJuIC1FTDJITFQ7CisJCQl9CisjaWZkZWYJVVNFX0RNQQorCQkvKiBlaXRoZXIgc3RhcnQgZG1hIG9yIHByaW1lIHBpbyBwdW1wICovCisJCX0gZWxzZSBpZiAoZXAtPmRtYSA+PSAwKSB7CisJCQlraWNrX2RtYShlcCwgcmVxKTsKKyNlbmRpZgorCQkvKiBjYW4gdGhlIEZJRk8gY2FuIHNhdGlzZnkgdGhlIHJlcXVlc3QgaW1tZWRpYXRlbHk/ICovCisJCX0gZWxzZSBpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMAorCQkJCSYmICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUykgIT0gMAorCQkJCSYmIHdyaXRlX2ZpZm8oZXAsIHJlcSkpIHsKKwkJCXJlcSA9IE5VTEw7CisJCX0gZWxzZSBpZiAoKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQk9fUkZTKSAhPSAwCisJCQkJJiYgcmVhZF9maWZvKGVwLCByZXEpKSB7CisJCQlyZXEgPSBOVUxMOworCQl9CisKKwkJaWYgKGxpa2VseSAocmVxICYmIGVwLT5kZXNjKSAmJiBlcC0+ZG1hIDwgMCkKKwkJCXBpb19pcnFfZW5hYmxlKGVwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwl9CisKKwkvKiBwaW8gb3IgZG1hIGlycSBoYW5kbGVyIGFkdmFuY2VzIHRoZSBxdWV1ZS4gKi8KKwlpZiAobGlrZWx5IChyZXEgIT0gMCkpCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiAJbnVrZSAtIGRlcXVldWUgQUxMIHJlcXVlc3RzCisgKi8KK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXE7CisKKwkvKiBjYWxsZWQgd2l0aCBpcnFzIGJsb2NrZWQgKi8KKyNpZmRlZglVU0VfRE1BCisJaWYgKGVwLT5kbWEgPj0gMCAmJiAhZXAtPnN0b3BwZWQpCisJCWNhbmNlbF9kbWEoZXApOworI2VuZGlmCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LAorCQkJCXF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KKwlpZiAoZXAtPmRlc2MpCisJCXBpb19pcnFfZGlzYWJsZSAoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworfQorCisKKy8qIGRlcXVldWUgSlVTVCBPTkUgcmVxdWVzdCAqLworc3RhdGljIGludCBweGEyeHhfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X2VwCSplcDsKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHB4YTJ4eF9lcCwgZXApOworCWlmICghX2VwIHx8IGVwLT5lcC5uYW1lID09IGVwMG5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKyNpZmRlZglVU0VfRE1BCisJaWYgKGVwLT5kbWEgPj0gMCAmJiBlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJY2FuY2VsX2RtYShlcCk7CisJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQkvKiByZXN0YXJ0IGkvbyAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCQkJa2lja19kbWEoZXAsIHJlcSk7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCQlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBweGEyeHhfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHB4YTJ4eF9lcAkqZXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkgKCFfZXAKKwkJCXx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpCisJCQl8fCBlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJRE1TRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh2YWx1ZSA9PSAwKSB7CisJCS8qIHRoaXMgcGF0aCAocmVzZXQgdG9nZ2xlK2hhbHQpIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQKKwkJICogU0VUX0lOVEVSRkFDRSBvbiBub3JtYWwgaGFyZHdhcmUuICBidXQgaXQgY2FuJ3QgYmUKKwkJICogZG9uZSBmcm9tIHNvZnR3YXJlIG9uIHRoZSBQWEEgVURDLCBhbmQgdGhlIGhhcmR3YXJlCisJCSAqIGZvcmdldHMgdG8gZG8gaXQgYXMgcGFydCBvZiBTRVRfSU5URVJGQUNFIGF1dG9tYWdpYy4KKwkJICovCisJCURNU0coIm9ubHkgaG9zdCBjYW4gY2xlYXIgJXMgaGFsdFxuIiwgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUk9GUzsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMAorCQkJJiYgKCgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JJX1RGUykgPT0gMAorCQkJICAgfHwgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJLyogRlNUIGJpdCBpcyB0aGUgc2FtZSBmb3IgY29udHJvbCwgYnVsayBpbiwgYnVsayBvdXQsIGludGVycnVwdCBpbiAqLworCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfRlNUfFVEQ0NTX0JJX0ZURjsKKworCS8qIGVwMCBuZWVkcyBzcGVjaWFsIGNhcmUgKi8KKwlpZiAoIWVwLT5kZXNjKSB7CisJCXN0YXJ0X3dhdGNoZG9nKGVwLT5kZXYpOworCQllcC0+ZGV2LT5yZXFfcGVuZGluZyA9IDA7CisJCWVwLT5kZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCisgCS8qIGFuZCBidWxrL2ludHIgZW5kcG9pbnRzIGxpa2UgZHJvcHBpbmcgc3RhbGxzIHRvbyAqLworIAl9IGVsc2UgeworIAkJdW5zaWduZWQgaTsKKyAJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpICs9IDIwKSB7CisgCQkJaWYgKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQklfU1NUKQorIAkJCQlicmVhazsKKyAJCQl1ZGVsYXkoMjApOworIAkJfQorICAJfQorIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlEQkcoREJHX1ZFUkJPU0UsICIlcyBoYWx0XG4iLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHB4YTJ4eF9lcCAgICAgICAgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXApIHsKKwkJRE1TRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIHB4YSBjYW4ndCByZXBvcnQgdW5jbGFpbWVkIGJ5dGVzIGZyb20gSU4gZmlmb3MgKi8KKwlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWlmIChlcC0+ZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCXx8ICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JPX1JGUykgPT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gKCplcC0+cmVnX3ViY3IgJiAweGZmZikgKyAxOworfQorCitzdGF0aWMgdm9pZCBweGEyeHhfZXBfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHB4YTJ4eF9lcCAgICAgICAgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgZXAtPmVwLm5hbWUgPT0gZXAwbmFtZSB8fCAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlETVNHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogdG9nZ2xlIGFuZCBoYWx0IGJpdHMgc3RheSB1bmNoYW5nZWQgKi8KKworCS8qIGZvciBPVVQsIGp1c3QgcmVhZCBhbmQgZGlzY2FyZCB0aGUgRklGTyBjb250ZW50cy4gKi8KKwlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPT0gMCkgeworCQl3aGlsZSAoKCgqZXAtPnJlZ191ZGNjcykgJiBVRENDU19CT19STkUpICE9IDApCisJCQkodm9pZCkgKmVwLT5yZWdfdWRkcjsKKwkJcmV0dXJuOworCX0KKworCS8qIG1vc3QgSU4gc3RhdHVzIGlzIHRoZSBzYW1lLCBidXQgSVNPIGNhbid0IHN0YWxsICovCisJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CSV9UUEN8VURDQ1NfQklfRlRGfFVEQ0NTX0JJX1RVUgorCQl8IChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCQk/IDAgOiBVRENDU19CSV9TU1Q7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIHB4YTJ4eF9lcF9vcHMgPSB7CisJLmVuYWJsZQkJPSBweGEyeHhfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gcHhhMnh4X2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdAk9IHB4YTJ4eF9lcF9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBweGEyeHhfZXBfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IHB4YTJ4eF9lcF9hbGxvY19idWZmZXIsCisJLmZyZWVfYnVmZmVyCT0gcHhhMnh4X2VwX2ZyZWVfYnVmZmVyLAorCisJLnF1ZXVlCQk9IHB4YTJ4eF9lcF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IHB4YTJ4eF9lcF9kZXF1ZXVlLAorCisJLnNldF9oYWx0CT0gcHhhMnh4X2VwX3NldF9oYWx0LAorCS5maWZvX3N0YXR1cwk9IHB4YTJ4eF9lcF9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaAk9IHB4YTJ4eF9lcF9maWZvX2ZsdXNoLAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIAlkZXZpY2Utc2NvcGVkIHBhcnRzIG9mIHRoZSBhcGkgdG8gdGhlIHVzYiBjb250cm9sbGVyIGhhcmR3YXJlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgaW50IHB4YTJ4eF91ZGNfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXJldHVybiAoKFVGTlJIICYgMHgwNykgPDwgOCkgfCAoVUZOUkwgJiAweGZmKTsKK30KKworc3RhdGljIGludCBweGEyeHhfdWRjX3dha2V1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKK3sKKwkvKiBob3N0IG1heSBub3QgaGF2ZSBlbmFibGVkIHJlbW90ZSB3YWtldXAgKi8KKwlpZiAoKFVEQ0NTMCAmIFVEQ0NTMF9EUldGKSA9PSAwKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwl1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfUlNNKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RvcF9hY3Rpdml0eShzdHJ1Y3QgcHhhMnh4X3VkYyAqLCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKik7CitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlIChzdHJ1Y3QgcHhhMnh4X3VkYyAqKTsKK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGEyeHhfdWRjICopOworCisvKiBXZSBkaXNhYmxlIHRoZSBVREMgLS0gYW5kIGl0cyA0OCBNSHogY2xvY2sgLS0gd2hlbmV2ZXIgaXQncyBub3QKKyAqIGluIGFjdGl2ZSB1c2UuICAKKyAqLworc3RhdGljIGludCBwdWxsdXAoc3RydWN0IHB4YTJ4eF91ZGMgKnVkYywgaW50IGlzX2FjdGl2ZSkKK3sKKwlpc19hY3RpdmUgPSBpc19hY3RpdmUgJiYgdWRjLT52YnVzICYmIHVkYy0+cHVsbHVwOworCURNU0coIiVzXG4iLCBpc19hY3RpdmUgPyAiYWN0aXZlIiA6ICJpbmFjdGl2ZSIpOworCWlmIChpc19hY3RpdmUpCisJCXVkY19lbmFibGUodWRjKTsKKwllbHNlIHsKKwkJaWYgKHVkYy0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCQlETVNHKCJkaXNjb25uZWN0ICVzXG4iLCB1ZGMtPmRyaXZlcgorCQkJCT8gdWRjLT5kcml2ZXItPmRyaXZlci5uYW1lCisJCQkJOiAiKG5vIGRyaXZlcikiKTsKKwkJCXN0b3BfYWN0aXZpdHkodWRjLCB1ZGMtPmRyaXZlcik7CisJCX0KKwkJdWRjX2Rpc2FibGUodWRjKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFZCVVMgcmVwb3J0aW5nIGxvZ2ljYWxseSBjb21lcyBmcm9tIGEgdHJhbnNjZWl2ZXIgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X3VkY192YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYzsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihfZ2FkZ2V0LCBzdHJ1Y3QgcHhhMnh4X3VkYywgZ2FkZ2V0KTsKKwl1ZGMtPnZidXMgPSBpc19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOworCURNU0coInZidXMgJXNcbiIsIGlzX2FjdGl2ZSA/ICJzdXBwbGllZCIgOiAiaW5hY3RpdmUiKTsKKwlwdWxsdXAodWRjLCBpc19hY3RpdmUpOworCXJldHVybiAwOworfQorCisvKiBkcml2ZXJzIG1heSBoYXZlIHNvZnR3YXJlIGNvbnRyb2wgb3ZlciBEKyBwdWxsdXAgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYzsKKworCXVkYyA9IGNvbnRhaW5lcl9vZihfZ2FkZ2V0LCBzdHJ1Y3QgcHhhMnh4X3VkYywgZ2FkZ2V0KTsKKworCS8qIG5vdCBhbGwgYm9hcmRzIHN1cHBvcnQgcHVsbHVwIGNvbnRyb2wgKi8KKwlpZiAoIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlzX2FjdGl2ZSA9IChpc19hY3RpdmUgIT0gMCk7CisJdWRjLT5wdWxsdXAgPSBpc19hY3RpdmU7CisJcHVsbHVwKHVkYywgaXNfYWN0aXZlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBweGEyeHhfdWRjX29wcyA9IHsKKwkuZ2V0X2ZyYW1lCT0gcHhhMnh4X3VkY19nZXRfZnJhbWUsCisJLndha2V1cAkJPSBweGEyeHhfdWRjX3dha2V1cCwKKwkudmJ1c19zZXNzaW9uCT0gcHhhMnh4X3VkY192YnVzX3Nlc3Npb24sCisJLnB1bGx1cAkJPSBweGEyeHhfdWRjX3B1bGx1cCwKKworCS8vIC52YnVzX2RyYXcgLi4uIGJvYXJkcyBtYXkgY29uc3VtZSBjdXJyZW50IGZyb20gVkJVUywgdXAgdG8KKwkvLyAxMDAtNTAwbUEgYmFzZWQgb24gY29uZmlnLiAgdGhlIDUwMHVBIHN1c3BlbmQgY2VpbGluZyBtZWFucworCS8vIHRoYXQgZXhjbHVzaXZlbHkgdmJ1cy1wb3dlcmVkIFBYQSBkZXNpZ25zIHZpb2xhdGUgVVNCIHNwZWNzLgorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBjb25zdCBjaGFyIHByb2Nfbm9kZV9uYW1lIFtdID0gImRyaXZlci91ZGMiOworCitzdGF0aWMgaW50Cit1ZGNfcHJvY19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCWludCAqZW9mLCB2b2lkICpfZGV2KQoreworCWNoYXIJCQkqYnVmID0gcGFnZTsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gX2RldjsKKwljaGFyCQkJKm5leHQgPSBidWY7CisJdW5zaWduZWQJCXNpemUgPSBjb3VudDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlpLCB0OworCXUzMgkJCXRtcDsKKworCWlmIChvZmYgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBiYXNpYyBkZXZpY2Ugc3RhdHVzICovCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCBEUklWRVJfREVTQyAiXG4iCisJCSIlcyB2ZXJzaW9uOiAlc1xuR2FkZ2V0IGRyaXZlcjogJXNcbkhvc3QgJXNcblxuIiwKKwkJZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OIFNJWkVfU1RSIERNQVNUUiwKKwkJZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiKG5vbmUpIiwKKwkJaXNfdXNiX2Nvbm5lY3RlZCgpID8gImZ1bGwgc3BlZWQiIDogImRpc2Nvbm5lY3RlZCIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiByZWdpc3RlcnMgZm9yIGRldmljZSBhbmQgZXAwICovCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkidWljciAlMDJYLiUwMlgsIHVzaXIgJTAyWC4lMDJ4LCB1Zm5yICUwMlguJTAyWFxuIiwKKwkJVUlDUjEsIFVJQ1IwLCBVU0lSMSwgVVNJUjAsIFVGTlJILCBVRk5STCk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXRtcCA9IFVEQ0NSOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJInVkY2NyICUwMlggPSVzJXMlcyVzJXMlcyVzJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ0NSX1JFTSkgPyAiIHJlbSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1JTVElSKSA/ICIgcnN0aXIiIDogIiIsCisJCSh0bXAgJiBVRENDUl9TUk0pID8gIiBzcm0iIDogIiIsCisJCSh0bXAgJiBVRENDUl9TVVNJUikgPyAiIHN1c2lyIiA6ICIiLAorCQkodG1wICYgVURDQ1JfUkVTSVIpID8gIiByZXNpciIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1JTTSkgPyAiIHJzbSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1VEQSkgPyAiIHVkYSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1VERSkgPyAiIHVkZSIgOiAiIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXRtcCA9IFVEQ0NTMDsKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSJ1ZGNjczAgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwgdG1wLAorCQkodG1wICYgVURDQ1MwX1NBKSA/ICIgc2EiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfUk5FKSA/ICIgcm5lIiA6ICIiLAorCQkodG1wICYgVURDQ1MwX0ZTVCkgPyAiIGZzdCIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9TU1QpID8gIiBzc3QiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfRFJXRikgPyAiIGR3cmYiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfRlRGKSA/ICIgZnRmIiA6ICIiLAorCQkodG1wICYgVURDQ1MwX0lQUikgPyAiIGlwciIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9PUFIpID8gIiBvcHIiIDogIiIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwlpZiAoZGV2LT5oYXNfY2ZyKSB7CisJCXRtcCA9IFVEQ0NGUjsKKwkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJInVkY2NmciAlMDJYID0lcyVzXG4iLCB0bXAsCisJCQkodG1wICYgVURDQ0ZSX0FSRU4pID8gIiBhcmVuIiA6ICIiLAorCQkJKHRtcCAmIFVEQ0NGUl9BQ00pID8gIiBhY20iIDogIiIpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKwl9CisKKwlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSB8fCAhZGV2LT5kcml2ZXIpCisJCWdvdG8gZG9uZTsKKworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgImVwMCBJTiAlbHUvJWx1LCBPVVQgJWx1LyVsdVxuaXJxcyAlbHVcblxuIiwKKwkJZGV2LT5zdGF0cy53cml0ZS5ieXRlcywgZGV2LT5zdGF0cy53cml0ZS5vcHMsCisJCWRldi0+c3RhdHMucmVhZC5ieXRlcywgZGV2LT5zdGF0cy5yZWFkLm9wcywKKwkJZGV2LT5zdGF0cy5pcnFzKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJLyogZHVtcCBlbmRwb2ludCBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUFhBX1VEQ19OVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IHB4YTJ4eF9lcAkqZXAgPSAmZGV2LT5lcCBbaV07CisJCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCQlpbnQJCQl0OworCisJCWlmIChpICE9IDApIHsKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCQkJZCA9IGVwLT5kZXNjOworCQkJaWYgKCFkKQorCQkJCWNvbnRpbnVlOworCQkJdG1wID0gKmRldi0+ZXAgW2ldLnJlZ191ZGNjczsKKwkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCQkiJXMgbWF4ICVkICVzIHVkY2NzICUwMnggaXJxcyAlbHUvJWx1XG4iLAorCQkJCWVwLT5lcC5uYW1lLCBsZTE2X3RvX2NwdSAoZC0+d01heFBhY2tldFNpemUpLAorCQkJCShlcC0+ZG1hID49IDApID8gImRtYSIgOiAicGlvIiwgdG1wLAorCQkJCWVwLT5waW9faXJxcywgZXAtPmRtYV9pcnFzKTsKKwkJCS8qIFRPRE8gdHJhbnNsYXRlIGFsbCBmaXZlIGdyb3VwcyBvZiB1ZGNjcyBiaXRzISAqLworCisJCX0gZWxzZSAvKiBlcDAgc2hvdWxkIG9ubHkgaGF2ZSBvbmUgdHJhbnNmZXIgcXVldWVkICovCisJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJlcDAgbWF4IDE2IHBpbyBpcnFzICVsdVxuIiwKKwkJCQllcC0+cGlvX2lycXMpOworCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJZ290byBkb25lOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiXHQobm90aGluZyBxdWV1ZWQpXG4iKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQkJY29udGludWU7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisjaWZkZWYJVVNFX0RNQQorCQkJaWYgKGVwLT5kbWEgPj0gMCAmJiByZXEtPnF1ZXVlLnByZXYgPT0gJmVwLT5xdWV1ZSkKKwkJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkJCSJcdHJlcSAlcCBsZW4gJWQvJWQgIgorCQkJCQkiYnVmICVwIChkbWElZCBkY21kICUwOHgpXG4iLAorCQkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKKwkJCQkJcmVxLT5yZXEubGVuZ3RoLCByZXEtPnJlcS5idWYsCisJCQkJCWVwLT5kbWEsIERDTUQoZXAtPmRtYSkKKwkJCQkJLy8gbG93IDEzIGJpdHMgPT0gYnl0ZXMtdG8tZ28KKwkJCQkJKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCQkJIlx0cmVxICVwIGxlbiAlZC8lZCBidWYgJXBcbiIsCisJCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CisJCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJCWdvdG8gZG9uZTsKKwkJCXNpemUgLT0gdDsKKwkJCW5leHQgKz0gdDsKKwkJfQorCX0KKworZG9uZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJKmVvZiA9IDE7CisJcmV0dXJuIGNvdW50IC0gc2l6ZTsKK30KKworI2RlZmluZSBjcmVhdGVfcHJvY19maWxlcygpIFwKKwljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCAwLCBOVUxMLCB1ZGNfcHJvY19yZWFkLCBkZXYpCisjZGVmaW5lIHJlbW92ZV9wcm9jX2ZpbGVzKCkgXAorCXJlbW92ZV9wcm9jX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCBOVUxMKQorCisjZWxzZQkvKiAhQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworI2RlZmluZSBjcmVhdGVfcHJvY19maWxlcygpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSByZW1vdmVfcHJvY19maWxlcygpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworLyogImZ1bmN0aW9uIiBzeXNmcyBhdHRyaWJ1dGUgKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X2Z1bmN0aW9uIChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSAoX2Rldik7CisKKwlpZiAoIWRldi0+ZHJpdmVyCisJCQl8fCAhZGV2LT5kcml2ZXItPmZ1bmN0aW9uCisJCQl8fCBzdHJsZW4gKGRldi0+ZHJpdmVyLT5mdW5jdGlvbikgPiBQQUdFX1NJWkUpCisJCXJldHVybiAwOworCXJldHVybiBzY25wcmludGYgKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRldi0+ZHJpdmVyLT5mdW5jdGlvbik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIgKGZ1bmN0aW9uLCBTX0lSVUdPLCBzaG93X2Z1bmN0aW9uLCBOVUxMKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIAl1ZGNfZGlzYWJsZSAtIGRpc2FibGUgVVNCIGRldmljZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJLyogYmxvY2sgYWxsIGlycXMgKi8KKwl1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfU1JNfFVEQ0NSX1JFTSk7CisJVUlDUjAgPSBVSUNSMSA9IDB4ZmY7CisJVUZOUkggPSBVRk5SSF9TSU07CisKKwkvKiBpZiBoYXJkd2FyZSBzdXBwb3J0cyBpdCwgZGlzY29ubmVjdCBmcm9tIHVzYiAqLworCW1ha2VfdXNiX2Rpc2FwcGVhcigpOworCisJdWRjX2NsZWFyX21hc2tfVURDQ1IoVURDQ1JfVURFKTsKKworI2lmZGVmCUNPTkZJR19BUkNIX1BYQQorICAgICAgICAvKiBEaXNhYmxlIGNsb2NrIGZvciBVU0IgZGV2aWNlICovCisJcHhhX3NldF9ja2VuKENLRU4xMV9VU0IsIDApOworI2VuZGlmCisKKwllcDBfaWRsZSAoZGV2KTsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCUxFRF9DT05ORUNURURfT0ZGOworfQorCisKKy8qCisgKiAJdWRjX3JlaW5pdCAtIGluaXRpYWxpemUgc29mdHdhcmUgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgdWRjX3JlaW5pdChzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2KQoreworCXUzMglpOworCisJLyogZGV2aWNlL2VwMCByZWNvcmRzIGluaXQgKi8KKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5nYWRnZXQuZXAwLT5lcF9saXN0KTsKKwlkZXYtPmVwMHN0YXRlID0gRVAwX0lETEU7CisKKwkvKiBiYXNpYyBlbmRwb2ludCByZWNvcmRzIGluaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUFhBX1VEQ19OVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IHB4YTJ4eF9lcCAqZXAgPSAmZGV2LT5lcFtpXTsKKworCQlpZiAoaSAhPSAwKQorCQkJbGlzdF9hZGRfdGFpbCAoJmVwLT5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisKKwkJZXAtPmRlc2MgPSBOVUxMOworCQllcC0+c3RvcHBlZCA9IDA7CisJCUlOSVRfTElTVF9IRUFEICgmZXAtPnF1ZXVlKTsKKwkJZXAtPnBpb19pcnFzID0gZXAtPmRtYV9pcnFzID0gMDsKKwl9CisKKwkvKiB0aGUgcmVzdCB3YXMgc3RhdGljYWxseSBpbml0aWFsaXplZCwgYW5kIGlzIHJlYWQtb25seSAqLworfQorCisvKiB1bnRpbCBpdCdzIGVuYWJsZWQsIHRoaXMgVURDIHNob3VsZCBiZSBjb21wbGV0ZWx5IGludmlzaWJsZQorICogdG8gYW55IFVTQiBob3N0LgorICovCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlIChzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2KQoreworCXVkY19jbGVhcl9tYXNrX1VEQ0NSKFVEQ0NSX1VERSk7CisKKyNpZmRlZglDT05GSUdfQVJDSF9QWEEKKyAgICAgICAgLyogRW5hYmxlIGNsb2NrIGZvciBVU0IgZGV2aWNlICovCisJcHhhX3NldF9ja2VuKENLRU4xMV9VU0IsIDEpOworCXVkZWxheSg1KTsKKyNlbmRpZgorCisJLyogdHJ5IHRvIGNsZWFyIHRoZXNlIGJpdHMgYmVmb3JlIHdlIGVuYWJsZSB0aGUgdWRjICovCisJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfU1VTSVJ8LypVRENDUl9SU1RJUnwqL1VEQ0NSX1JFU0lSKTsKKworCWVwMF9pZGxlKGRldik7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwlkZXYtPnN0YXRzLmlycXMgPSAwOworCisJLyoKKwkgKiBzZXF1ZW5jZSB0YWtlbiBmcm9tIGNoYXB0ZXIgMTIuNS4xMCwgUFhBMjUwIEFwcFByb2NEZXZNYW51YWw6CisJICogLSBlbmFibGUgVURDCisJICogLSBpZiBSRVNFVCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBhY2sgaW50ZXJydXB0CisJICogLSB1bm1hc2sgcmVzZXQgaW50ZXJydXB0CisJICovCisJdWRjX3NldF9tYXNrX1VEQ0NSKFVEQ0NSX1VERSk7CisJaWYgKCEoVURDQ1IgJiBVRENDUl9VREEpKQorCQl1ZGNfYWNrX2ludF9VRENDUihVRENDUl9SU1RJUik7CisKKwlpZiAoZGV2LT5oYXNfY2ZyIC8qIFVEQ19SRVMyIGlzIGRlZmluZWQgKi8pIHsKKwkJLyogcHhhMjU1IChhMCspIGNhbiBhdm9pZCBhIHNldF9jb25maWcgcmFjZSB0aGF0IGNvdWxkCisJCSAqIHByZXZlbnQgZ2FkZ2V0IGRyaXZlcnMgZnJvbSBjb25maWd1cmluZyBjb3JyZWN0bHkKKwkJICovCisJCVVEQ0NGUiA9IFVEQ0NGUl9BQ00gfCBVRENDRlJfTUIxOworCX0gZWxzZSB7CisJCS8qICJVU0IgdGVzdCBtb2RlIiBmb3IgcHhhMjUwIGVycmF0YSA0MC00MiAoc3RlcHBpbmcgYTAsIGExKQorCQkgKiB3aGljaCBjb3VsZCByZXN1bHQgaW4gbWlzc2luZyBwYWNrZXRzIGFuZCBpbnRlcnJ1cHRzLgorCQkgKiBzdXBwb3NlZGx5IG9uZSBiaXQgcGVyIGVuZHBvaW50LCBjb250cm9sbGluZyB3aGV0aGVyIGl0CisJCSAqIGRvdWJsZSBidWZmZXJzIG9yIG5vdDsgQUNNL0FSRU4gYml0cyBmaXQgaW50byB0aGUgaG9sZXMuCisJCSAqIHplcm8gYml0cyAobGlrZSBVU0lSMF9JUngpIGRpc2FibGUgZG91YmxlIGJ1ZmZlcmluZy4KKwkJICovCisJCVVEQ19SRVMxID0gMHgwMDsKKwkJVURDX1JFUzIgPSAweDAwOworCX0KKworI2lmZGVmCURJU0FCTEVfVEVTVF9NT0RFCisJLyogInRlc3QgbW9kZSIgc2VlbXMgdG8gaGF2ZSBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gbGF0ZXIgY2hpcAorCSAqIHJldnMsIHByZXZlbnRpbmcgZG91YmxlIGJ1ZmZlcmluZyAoYW5kIGludmFsaWRhdGluZyBkb2NzKS4KKwkgKiB0aGlzIEVYUEVSSU1FTlQgZW5hYmxlcyBpdCBmb3IgYnVsayBlbmRwb2ludHMgYnkgdHdlYWtpbmcKKwkgKiB1bmRlZmluZWQvcmVzZXJ2ZWQgcmVnaXN0ZXIgYml0cyAodGhhdCBvdGhlciBkcml2ZXJzIGNsZWFyKS4KKwkgKiBCZWxjYXJyYSBjb2RlIGNvbW1lbnRzIG5vdGVkIHRoaXMgdXNhZ2UuCisJICovCisJaWYgKGZpZm9fbW9kZSAmIDEpIHsJLyogSU4gZW5kcG9pbnRzICovCisJCVVEQ19SRVMxIHw9IFVTSVIwX0lSMXxVU0lSMF9JUjY7CisJCVVEQ19SRVMyIHw9IFVTSVIxX0lSMTE7CisJfQorCWlmIChmaWZvX21vZGUgJiAyKSB7CS8qIE9VVCBlbmRwb2ludHMgKi8KKwkJVURDX1JFUzEgfD0gVVNJUjBfSVIyfFVTSVIwX0lSNzsKKwkJVURDX1JFUzIgfD0gVVNJUjFfSVIxMjsKKwl9CisjZW5kaWYKKworCS8qIGVuYWJsZSBzdXNwZW5kL3Jlc3VtZSBhbmQgcmVzZXQgaXJxcyAqLworCXVkY19jbGVhcl9tYXNrX1VEQ0NSKFVEQ0NSX1NSTSB8IFVEQ0NSX1JFTSk7CisKKwkvKiBlbmFibGUgZXAwIGlycXMgKi8KKwlVSUNSMCAmPSB+VUlDUjBfSU0wOworCisJLyogaWYgaGFyZHdhcmUgc3VwcG9ydHMgaXQsIHB1bGx1cCBEKyBhbmQgd2FpdCBmb3IgcmVzZXQgKi8KKwlsZXRfdXNiX2FwcGVhcigpOworfQorCisKKy8qIHdoZW4gYSBkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGl0IHdpbGwgcmVjZWl2ZQorICogY29udHJvbCByZXF1ZXN0cyBpbmNsdWRpbmcgc2V0X2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggZW5hYmxlcworICogbm9uLWNvbnRyb2wgcmVxdWVzdHMuICB0aGVuIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYQorICogZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIHRoZW4gYSBob3N0IG1heSBjb25uZWN0IGFnYWluLCBvcgorICogdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KKyAqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwlpbnQJCQlyZXR2YWw7CisKKwlpZiAoIWRyaXZlcgorCQkJfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCQkJfHwgIWRyaXZlci0+YmluZAorCQkJfHwgIWRyaXZlci0+dW5iaW5kCisJCQl8fCAhZHJpdmVyLT5kaXNjb25uZWN0CisJCQl8fCAhZHJpdmVyLT5zZXR1cCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIGZpcnN0IGhvb2sgdXAgdGhlIGRyaXZlciAuLi4gKi8KKwlkZXYtPmRyaXZlciA9IGRyaXZlcjsKKwlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCWRldi0+cHVsbHVwID0gMTsKKworCWRldmljZV9hZGQgKCZkZXYtPmdhZGdldC5kZXYpOworCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJRE1TRygiYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLAorCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCWRldmljZV9kZWwgKCZkZXYtPmdhZGdldC5kZXYpOworCisJCWRldi0+ZHJpdmVyID0gTlVMTDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCWRldmljZV9jcmVhdGVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKworCS8qIC4uLiB0aGVuIGVuYWJsZSBob3N0IGRldGVjdGlvbiBhbmQgZXAwOyBhbmQgd2UncmUgcmVhZHkKKwkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgorCSAqLworCURNU0coInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwdWxsdXAoZGV2LCAxKTsKKwlkdW1wX3N0YXRlKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworc3RhdGljIHZvaWQKK3N0b3BfYWN0aXZpdHkoc3RydWN0IHB4YTJ4eF91ZGMgKmRldiwgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50IGk7CisKKwkvKiBkb24ndCBkaXNjb25uZWN0IGRyaXZlcnMgbW9yZSB0aGFuIG9uY2UgKi8KKwlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWRyaXZlciA9IE5VTEw7CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworCS8qIHByZXZlbnQgbmV3IHJlcXVlc3Qgc3VibWlzc2lvbnMsIGtpbGwgYW55IG91dHN0YW5kaW5nIHJlcXVlc3RzICAqLworCWZvciAoaSA9IDA7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgcHhhMnh4X2VwICplcCA9ICZkZXYtPmVwW2ldOworCisJCWVwLT5zdG9wcGVkID0gMTsKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7CisJfQorCWRlbF90aW1lcl9zeW5jKCZkZXYtPnRpbWVyKTsKKworCS8qIHJlcG9ydCBkaXNjb25uZWN0OyB0aGUgZHJpdmVyIGlzIGFscmVhZHkgcXVpZXNjZWQgKi8KKwlMRURfQ09OTkVDVEVEX09GRjsKKwlpZiAoZHJpdmVyKQorCQlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKKworCS8qIHJlLWluaXQgZHJpdmVyLXZpc2libGUgZGF0YSBzdHJ1Y3R1cmVzICovCisJdWRjX3JlaW5pdChkZXYpOworfQorCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcHVsbHVwKGRldiwgMCk7CisJc3RvcF9hY3Rpdml0eShkZXYsIGRyaXZlcik7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisKKwlkZXZpY2VfZGVsICgmZGV2LT5nYWRnZXQuZGV2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisKKwlETVNHKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlkdW1wX3N0YXRlKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9MVUJCT0NLCisKKy8qIEx1YmJvY2sgaGFzIHNlcGFyYXRlIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgaXJxcy4gIE1vcmUgdHlwaWNhbCBkZXNpZ25zCisgKiB1c2Ugb25lIEdQSU8gYXMgdGhlIFZCVVMgSVJRLCBhbmQgYW5vdGhlciB0byBjb250cm9sIHRoZSBEKyBwdWxsdXAuCisgKi8KKworc3RhdGljIGlycXJldHVybl90CitsdWJib2NrX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSBfZGV2OworCWludAkJCXZidXM7CisKKwlkZXYtPnN0YXRzLmlycXMrKzsKKwlIRVhfRElTUExBWShkZXYtPnN0YXRzLmlycXMpOworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBMVUJCT0NLX1VTQl9JUlE6CisJCUxFRF9DT05ORUNURURfT047CisJCXZidXMgPSAxOworCQlkaXNhYmxlX2lycShMVUJCT0NLX1VTQl9JUlEpOworCQllbmFibGVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBMVUJCT0NLX1VTQl9ESVNDX0lSUToKKwkJTEVEX0NPTk5FQ1RFRF9PRkY7CisJCXZidXMgPSAwOworCQlkaXNhYmxlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSk7CisJCWVuYWJsZV9pcnEoTFVCQk9DS19VU0JfSVJRKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXB4YTJ4eF91ZGNfdmJ1c19zZXNzaW9uKCZkZXYtPmdhZGdldCwgdmJ1cyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZXBfc3RhdGUgKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdW5zaWduZWQgaTsKKworCS8qIGhhcmR3YXJlIFNFVF97Q09ORklHVVJBVElPTixJTlRFUkZBQ0V9IGF1dG9tYWdpYyByZXNldHMgZW5kcG9pbnQKKwkgKiBmaWZvcywgYW5kIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG11c3RuJ3QgYmUgY29udGludWVkIGluIGFueSBjYXNlLgorCSAqLworCWZvciAoaSA9IDE7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykKKwkJbnVrZSgmZGV2LT5lcFtpXSwgLUVDT05OQUJPUlRFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHVkY193YXRjaGRvZyh1bnNpZ25lZCBsb25nIF9kZXYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9ICh2b2lkICopX2RldjsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKGRldi0+ZXAwc3RhdGUgPT0gRVAwX1NUQUxMCisJCQkmJiAoVURDQ1MwICYgVURDQ1MwX0ZTVCkgPT0gMAorCQkJJiYgKFVEQ0NTMCAmIFVEQ0NTMF9TU1QpID09IDApIHsKKwkJVURDQ1MwID0gVURDQ1MwX0ZTVHxVRENDUzBfRlRGOworCQlEQkcoREJHX1ZFUkJPU0UsICJlcDAgcmUtc3RhbGxcbiIpOworCQlzdGFydF93YXRjaGRvZyhkZXYpOworCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9lcDAgKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdTMyCQkJdWRjY3MwID0gVURDQ1MwOworCXN0cnVjdCBweGEyeHhfZXAJKmVwID0gJmRldi0+ZXAgWzBdOworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCXVuaW9uIHsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlyOworCQl1OAkJCXJhdyBbOF07CisJCXUzMgkJCXdvcmQgWzJdOworCX0gdTsKKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBOVUxMOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCBxdWV1ZSk7CisKKwkvKiBjbGVhciBzdGFsbCBzdGF0dXMgKi8KKwlpZiAodWRjY3MwICYgVURDQ1MwX1NTVCkgeworCQludWtlKGVwLCAtRVBJUEUpOworCQlVRENDUzAgPSBVRENDUzBfU1NUOworCQlkZWxfdGltZXIoJmRldi0+dGltZXIpOworCQllcDBfaWRsZShkZXYpOworCX0KKworCS8qIHByZXZpb3VzIHJlcXVlc3QgdW5maW5pc2hlZD8gIG5vbi1lcnJvciBpZmYgYmFjay10by1iYWNrIC4uLiAqLworCWlmICgodWRjY3MwICYgVURDQ1MwX1NBKSAhPSAwICYmIGRldi0+ZXAwc3RhdGUgIT0gRVAwX0lETEUpIHsKKwkJbnVrZShlcCwgMCk7CisJCWRlbF90aW1lcigmZGV2LT50aW1lcik7CisJCWVwMF9pZGxlKGRldik7CisJfQorCisJc3dpdGNoIChkZXYtPmVwMHN0YXRlKSB7CisJY2FzZSBFUDBfSURMRToKKwkJLyogbGF0ZS1icmVha2luZyBzdGF0dXM/ICovCisJCXVkY2NzMCA9IFVEQ0NTMDsKKworCQkvKiBzdGFydCBjb250cm9sIHJlcXVlc3Q/ICovCisJCWlmIChsaWtlbHkoKHVkY2NzMCAmIChVRENDUzBfT1BSfFVEQ0NTMF9TQXxVRENDUzBfUk5FKSkKKwkJCQk9PSAoVURDQ1MwX09QUnxVRENDUzBfU0F8VURDQ1MwX1JORSkpKSB7CisJCQlpbnQgaTsKKworCQkJbnVrZSAoZXAsIC1FUFJPVE8pOworCisJCQkvKiByZWFkIFNFVFVQIHBhY2tldCAqLworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCWlmICh1bmxpa2VseSghKFVEQ0NTMCAmIFVEQ0NTMF9STkUpKSkgeworYmFkX3NldHVwOgorCQkJCQlETVNHKCJTRVRVUCAlZCFcbiIsIGkpOworCQkJCQlnb3RvIHN0YWxsOworCQkJCX0KKwkJCQl1LnJhdyBbaV0gPSAodTgpIFVERFIwOworCQkJfQorCQkJaWYgKHVubGlrZWx5KChVRENDUzAgJiBVRENDUzBfUk5FKSAhPSAwKSkKKwkJCQlnb3RvIGJhZF9zZXR1cDsKKworZ290X3NldHVwOgorCQkJREJHKERCR19WRVJCT1NFLCAiU0VUVVAgJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlMDR4XG4iLAorCQkJCXUuci5iUmVxdWVzdFR5cGUsIHUuci5iUmVxdWVzdCwKKwkJCQlsZTE2X3RvX2NwdSh1LnIud1ZhbHVlKSwKKwkJCQlsZTE2X3RvX2NwdSh1LnIud0luZGV4KSwKKwkJCQlsZTE2X3RvX2NwdSh1LnIud0xlbmd0aCkpOworCisJCQkvKiBjb3BlIHdpdGggYXV0b21hZ2ljIGZvciBzb21lIHN0YW5kYXJkIHJlcXVlc3RzLiAqLworCQkJZGV2LT5yZXFfc3RkID0gKHUuci5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKQorCQkJCQkJPT0gVVNCX1RZUEVfU1RBTkRBUkQ7CisJCQlkZXYtPnJlcV9jb25maWcgPSAwOworCQkJZGV2LT5yZXFfcGVuZGluZyA9IDE7CisJCQlzd2l0Y2ggKHUuci5iUmVxdWVzdCkgeworCQkJLyogaGFyZHdhcmUgcmVzdHJpY3RzIGdhZGdldCBkcml2ZXJzIGhlcmUhICovCisJCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQkJCQkvKiByZWZsZWN0IGhhcmR3YXJlJ3MgYXV0b21hZ2ljCisJCQkJCSAqIHVwIHRvIHRoZSBnYWRnZXQgZHJpdmVyLgorCQkJCQkgKi8KK2NvbmZpZ19jaGFuZ2U6CisJCQkJCWRldi0+cmVxX2NvbmZpZyA9IDE7CisJCQkJCWNsZWFyX2VwX3N0YXRlKGRldik7CisJCQkJCS8qIGlmICFoYXNfY2ZyLCB0aGVyZSdzIG5vIHN5bmNoCisJCQkJCSAqIGVsc2UgdXNlIEFSRU4gKGxhdGVyKSBub3QgU0F8T1BSCisJCQkJCSAqIFVTSVIwX0lSMCBhY3RzIGVkZ2Ugc2Vuc2l0aXZlCisJCQkJCSAqLworCQkJCX0KKwkJCQlicmVhazsKKwkJCS8qIC4uLiBhbmQgaGVyZSwgZXZlbiBtb3JlIC4uLiAqLworCQkJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSkgeworCQkJCQkvKiB1ZGMgaGFyZHdhcmUgaXMgYnJva2VuIGJ5IGRlc2lnbjoKKwkJCQkJICogIC0gYWx0c2V0dGluZyBtYXkgb25seSBiZSB6ZXJvOworCQkJCQkgKiAgLSBodyByZXNldHMgYWxsIGludGVyZmFjZXMnIGVwczsKKwkJCQkJICogIC0gZXAgcmVzZXQgZG9lc24ndCBpbmNsdWRlIGhhbHQoPykuCisJCQkJCSAqLworCQkJCQlETVNHKCJicm9rZW4gc2V0X2ludGVyZmFjZSAoJWQvJWQpXG4iLAorCQkJCQkJbGUxNl90b19jcHUodS5yLndJbmRleCksCisJCQkJCQlsZTE2X3RvX2NwdSh1LnIud1ZhbHVlKSk7CisJCQkJCWdvdG8gY29uZmlnX2NoYW5nZTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkvKiBoYXJkd2FyZSB3YXMgc3VwcG9zZWQgdG8gaGlkZSB0aGlzICovCisJCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQkJCQllcDBzdGFydChkZXYsIDAsICJhZGRyZXNzIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX0lOX0RBVEFfUEhBU0U7CisJCQllbHNlCisJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9PVVRfREFUQV9QSEFTRTsKKworCQkJaSA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsICZ1LnIpOworCQkJaWYgKGkgPCAwKSB7CisJCQkJLyogaGFyZHdhcmUgYXV0b21hZ2ljIHByZXZlbnRpbmcgU1RBTEwuLi4gKi8KKwkJCQlpZiAoZGV2LT5yZXFfY29uZmlnKSB7CisJCQkJCS8qIGhhcmR3YXJlIHNvbWV0aW1lcyBuZWdsZWN0cyB0byB0ZWxsCisJCQkJCSAqIHRlbGwgdXMgYWJvdXQgY29uZmlnIGNoYW5nZSBldmVudHMsCisJCQkJCSAqIHNvIGxhdGVyIG9uZXMgbWF5IGZhaWwuLi4KKwkJCQkJICovCisJCQkJCVdBUk4oImNvbmZpZyBjaGFuZ2UgJTAyeCBmYWlsICVkP1xuIiwKKwkJCQkJCXUuci5iUmVxdWVzdCwgaSk7CisJCQkJCXJldHVybjsKKwkJCQkJLyogVE9ETyBleHBlcmltZW50OiAgaWYgaGFzX2NmciwKKwkJCQkJICogaGFyZHdhcmUgZGlkbid0IEFDSzsgbWF5YmUgd2UKKwkJCQkJICogY291bGQgYWN0dWFsbHkgU1RBTEwhCisJCQkJCSAqLworCQkJCX0KKwkJCQlEQkcoREJHX1ZFUkJPU0UsICJwcm90b2NvbCBTVEFMTCwgIgorCQkJCQkiJTAyeCBlcnIgJWRcbiIsIFVEQ0NTMCwgaSk7CitzdGFsbDoKKwkJCQkvKiB0aGUgd2F0Y2hkb2cgdGltZXIgaGVscHMgZGVhbCB3aXRoIGNhc2VzCisJCQkJICogd2hlcmUgdWRjIHNlZW1zIHRvIGNsZWFyIEZTVCB3cm9uZ2x5LCBhbmQKKwkJCQkgKiB0aGVuIE5BS3MgaW5zdGVhZCBvZiBTVEFMTGluZy4KKwkJCQkgKi8KKwkJCQllcDBzdGFydChkZXYsIFVEQ0NTMF9GU1R8VURDQ1MwX0ZURiwgInN0YWxsIik7CisJCQkJc3RhcnRfd2F0Y2hkb2coZGV2KTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCisJCQkvKiBkZWZlcnJlZCBpL28gPT0gbm8gcmVzcG9uc2UgeWV0ICovCisJCQl9IGVsc2UgaWYgKGRldi0+cmVxX3BlbmRpbmcpIHsKKwkJCQlpZiAobGlrZWx5KGRldi0+ZXAwc3RhdGUgPT0gRVAwX0lOX0RBVEFfUEhBU0UKKwkJCQkJCXx8IGRldi0+cmVxX3N0ZCB8fCB1LnIud0xlbmd0aCkpCisJCQkJCWVwMHN0YXJ0KGRldiwgMCwgImRlZmVyIik7CisJCQkJZWxzZQorCQkJCQllcDBzdGFydChkZXYsIFVEQ0NTMF9JUFIsICJkZWZlci9JUFIiKTsKKwkJCX0KKworCQkJLyogZXhwZWN0IGF0IGxlYXN0IG9uZSBkYXRhIG9yIHN0YXR1cyBzdGFnZSBpcnEgKi8KKwkJCXJldHVybjsKKworCQl9IGVsc2UgaWYgKGxpa2VseSgodWRjY3MwICYgKFVEQ0NTMF9PUFJ8VURDQ1MwX1NBKSkKKwkJCQk9PSAoVURDQ1MwX09QUnxVRENDUzBfU0EpKSkgeworCQkJdW5zaWduZWQgaTsKKworCQkJLyogcHhhMjEwLzI1MCBlcnJhdHVtIDEzMSBmb3IgQjAvQjEgc2F5cyBSTkUgbGllcy4KKwkJCSAqIHN0aWxsIG9ic2VydmVkIG9uIGEgcHhhMjU1IGEwLgorCQkJICovCisJCQlEQkcoREJHX1ZFUkJPU0UsICJlMTMxXG4iKTsKKwkJCW51a2UoZXAsIC1FUFJPVE8pOworCisJCQkvKiByZWFkIFNFVFVQIGRhdGEsIGJ1dCBkb24ndCB0cnVzdCBpdCB0b28gbXVjaCAqLworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQl1LnJhdyBbaV0gPSAodTgpIFVERFIwOworCQkJaWYgKCh1LnIuYlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spCisJCQkJCT4gVVNCX1JFQ0lQX09USEVSKQorCQkJCWdvdG8gc3RhbGw7CisJCQlpZiAodS53b3JkIFswXSA9PSAwICYmIHUud29yZCBbMV0gPT0gMCkKKwkJCQlnb3RvIHN0YWxsOworCQkJZ290byBnb3Rfc2V0dXA7CisJCX0gZWxzZSB7CisJCQkvKiBzb21lIHJhbmRvbSBlYXJseSBJUlE6CisJCQkgKiAtIHdlIGFja2VkIEZTVAorCQkJICogLSBJUFIgY2xlYXJlZAorCQkJICogLSBPUFIgZ290IHNldCwgd2l0aG91dCBTQSAobGlrZWx5IHN0YXR1cyBzdGFnZSkKKwkJCSAqLworCQkJVURDQ1MwID0gdWRjY3MwICYgKFVEQ0NTMF9TQXxVRENDUzBfT1BSKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVQMF9JTl9EQVRBX1BIQVNFOgkJCS8qIEdFVF9ERVNDUklQVE9SIGV0YyAqLworCQlpZiAodWRjY3MwICYgVURDQ1MwX09QUikgeworCQkJVURDQ1MwID0gVURDQ1MwX09QUnxVRENDUzBfRlRGOworCQkJREJHKERCR19WRVJCT1NFLCAiZXAwaW4gcHJlbWF0dXJlIHN0YXR1c1xuIik7CisJCQlpZiAocmVxKQorCQkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQllcDBfaWRsZShkZXYpOworCQl9IGVsc2UgLyogaXJxIHdhcyBJUFIgY2xlYXJpbmcgKi8geworCQkJaWYgKHJlcSkgeworCQkJCS8qIHRoaXMgSU4gcGFja2V0IG1pZ2h0IGZpbmlzaCB0aGUgcmVxdWVzdCAqLworCQkJCSh2b2lkKSB3cml0ZV9lcDBfZmlmbyhlcCwgcmVxKTsKKwkJCX0gLyogZWxzZSBJTiB0b2tlbiBiZWZvcmUgcmVzcG9uc2Ugd2FzIHdyaXR0ZW4gKi8KKwkJfQorCQlicmVhazsKKwljYXNlIEVQMF9PVVRfREFUQV9QSEFTRToJCS8qIFNFVF9ERVNDUklQVE9SIGV0YyAqLworCQlpZiAodWRjY3MwICYgVURDQ1MwX09QUikgeworCQkJaWYgKHJlcSkgeworCQkJCS8qIHRoaXMgT1VUIHBhY2tldCBtaWdodCBmaW5pc2ggdGhlIHJlcXVlc3QgKi8KKwkJCQlpZiAocmVhZF9lcDBfZmlmbyhlcCwgcmVxKSkKKwkJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCQkvKiBlbHNlIG1vcmUgT1VUIHBhY2tldHMgZXhwZWN0ZWQgKi8KKwkJCX0gLyogZWxzZSBPVVQgdG9rZW4gYmVmb3JlIHJlYWQgd2FzIGlzc3VlZCAqLworCQl9IGVsc2UgLyogaXJxIHdhcyBJUFIgY2xlYXJpbmcgKi8geworCQkJREJHKERCR19WRVJCT1NFLCAiZXAwb3V0IHByZW1hdHVyZSBzdGF0dXNcbiIpOworCQkJaWYgKHJlcSkKKwkJCQlkb25lKGVwLCByZXEsIDApOworCQkJZXAwX2lkbGUoZGV2KTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVQMF9FTkRfWEZFUjoKKwkJaWYgKHJlcSkKKwkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCS8qIGFjayBjb250cm9sLUlOIHN0YXR1cyAobWF5YmUgaW4temxwIHdhcyBza2lwcGVkKQorCQkgKiBhbHNvIGFwcGVhcnMgYWZ0ZXIgc29tZSBjb25maWcgY2hhbmdlIGV2ZW50cy4KKwkJICovCisJCWlmICh1ZGNjczAgJiBVRENDUzBfT1BSKQorCQkJVURDQ1MwID0gVURDQ1MwX09QUjsKKwkJZXAwX2lkbGUoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBFUDBfU1RBTEw6CisJCVVEQ0NTMCA9IFVEQ0NTMF9GU1Q7CisJCWJyZWFrOworCX0KKwlVU0lSMCA9IFVTSVIwX0lSMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2VwKHN0cnVjdCBweGEyeHhfZXAgKmVwKQoreworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCWludAkJCWlzX2luID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOOworCWludAkJCWNvbXBsZXRlZDsKKwl1MzIJCQl1ZGNjcywgdG1wOworCisJZG8geworCQljb21wbGV0ZWQgPSAwOworCQlpZiAobGlrZWx5ICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpCisJCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKwkJZWxzZQorCQkJcmVxID0gTlVMTDsKKworCQkvLyBUT0RPIGNoZWNrIEZTVCBoYW5kbGluZworCisJCXVkY2NzID0gKmVwLT5yZWdfdWRjY3M7CisJCWlmICh1bmxpa2VseShpc19pbikpIHsJLyogaXJxIGZyb20gVFBDLCBTU1QsIG9yIChJU08pIFRVUiAqLworCQkJdG1wID0gVURDQ1NfQklfVFVSOworCQkJaWYgKGxpa2VseShlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKQorCQkJCXRtcCB8PSBVRENDU19CSV9TU1Q7CisJCQl0bXAgJj0gdWRjY3M7CisJCQlpZiAobGlrZWx5ICh0bXApKQorCQkJCSplcC0+cmVnX3VkY2NzID0gdG1wOworCQkJaWYgKHJlcSAmJiBsaWtlbHkgKCh1ZGNjcyAmIFVEQ0NTX0JJX1RGUykgIT0gMCkpCisJCQkJY29tcGxldGVkID0gd3JpdGVfZmlmbyhlcCwgcmVxKTsKKworCQl9IGVsc2UgewkvKiBpcnEgZnJvbSBSUEMgKG9yIGZvciBJU08sIFJPRikgKi8KKwkJCWlmIChsaWtlbHkoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkKKwkJCQl0bXAgPSBVRENDU19CT19TU1QgfCBVRENDU19CT19ETUU7CisJCQllbHNlCisJCQkJdG1wID0gVURDQ1NfSU9fUk9GIHwgVURDQ1NfSU9fRE1FOworCQkJdG1wICY9IHVkY2NzOworCQkJaWYgKGxpa2VseSh0bXApKQorCQkJCSplcC0+cmVnX3VkY2NzID0gdG1wOworCisJCQkvKiBmaWZvcyBjYW4gaG9sZCBwYWNrZXRzLCByZWFkeSBmb3IgcmVhZGluZy4uLiAqLworCQkJaWYgKGxpa2VseShyZXEpKSB7CisjaWZkZWYgVVNFX09VVF9ETUEKKy8vIFRPRE8gZGlkbid0IHlldCBkZWJ1ZyBvdXQtZG1hLiAgdGhpcyBhcHByb2FjaCBhc3N1bWVzCisvLyB0aGUgd29yc3QgYWJvdXQgc2hvcnQgcGFja2V0cyBhbmQgUlBDOyBpdCBtaWdodCBiZSBiZXR0ZXIuCisKKwkJCQlpZiAobGlrZWx5KGVwLT5kbWEgPj0gMCkpIHsKKwkJCQkJaWYgKCEodWRjY3MgJiBVRENDU19CT19SU1ApKSB7CisJCQkJCQkqZXAtPnJlZ191ZGNjcyA9IFVEQ0NTX0JPX1JQQzsKKwkJCQkJCWVwLT5kbWFfaXJxcysrOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisJCQkJfQorI2VuZGlmCisJCQkJY29tcGxldGVkID0gcmVhZF9maWZvKGVwLCByZXEpOworCQkJfSBlbHNlCisJCQkJcGlvX2lycV9kaXNhYmxlIChlcC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCX0KKwkJZXAtPnBpb19pcnFzKys7CisJfSB3aGlsZSAoY29tcGxldGVkKTsKK30KKworLyoKKyAqCXB4YTJ4eF91ZGNfaXJxIC0gaW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBhdm9pZCBkZWxheXMgaW4gZXAwIHByb2Nlc3NpbmcuIHRoZSBjb250cm9sIGhhbmRzaGFraW5nIGlzbid0IGFsd2F5cworICogdW5kZXIgc29mdHdhcmUgY29udHJvbCAocHhhMjUwYzAgYW5kIHRoZSBweGEyNTUgYXJlIGJldHRlciksIGFuZCBkZWxheXMKKyAqIGNvdWxkIGNhdXNlIHVzYiBwcm90b2NvbCBlcnJvcnMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorcHhhMnh4X3VkY19pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9IF9kZXY7CisJaW50CQkJaGFuZGxlZDsKKworCWRldi0+c3RhdHMuaXJxcysrOworCUhFWF9ESVNQTEFZKGRldi0+c3RhdHMuaXJxcyk7CisJZG8geworCQl1MzIJCXVkY2NyID0gVURDQ1I7CisKKwkJaGFuZGxlZCA9IDA7CisKKwkJLyogU1VTcGVuZCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworCQlpZiAodW5saWtlbHkodWRjY3IgJiBVRENDUl9TVVNJUikpIHsKKwkJCXVkY19hY2tfaW50X1VEQ0NSKFVEQ0NSX1NVU0lSKTsKKwkJCWhhbmRsZWQgPSAxOworCQkJREJHKERCR19WRVJCT1NFLCAiVVNCIHN1c3BlbmQlc1xuIiwgaXNfdXNiX2Nvbm5lY3RlZCgpCisJCQkJPyAiIiA6ICIrZGlzY29ubmVjdCIpOworCisJCQlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSkKKwkJCQlzdG9wX2FjdGl2aXR5KGRldiwgZGV2LT5kcml2ZXIpOworCQkJZWxzZSBpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkJJiYgZGV2LT5kcml2ZXIKKwkJCQkJJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCWVwMF9pZGxlIChkZXYpOworCQl9CisKKwkJLyogUkVTdW1lIEludGVycnVwdCBSZXF1ZXN0ICovCisJCWlmICh1bmxpa2VseSh1ZGNjciAmIFVEQ0NSX1JFU0lSKSkgeworCQkJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfUkVTSVIpOworCQkJaGFuZGxlZCA9IDE7CisJCQlEQkcoREJHX1ZFUkJPU0UsICJVU0IgcmVzdW1lXG4iKTsKKworCQkJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkJCSYmIGRldi0+ZHJpdmVyCisJCQkJCSYmIGRldi0+ZHJpdmVyLT5yZXN1bWUKKwkJCQkJJiYgaXNfdXNiX2Nvbm5lY3RlZCgpKQorCQkJCWRldi0+ZHJpdmVyLT5yZXN1bWUoJmRldi0+Z2FkZ2V0KTsKKwkJfQorCisJCS8qIFJlU2VUIEludGVycnVwdCBSZXF1ZXN0IC0gVVNCIHJlc2V0ICovCisJCWlmICh1bmxpa2VseSh1ZGNjciAmIFVEQ0NSX1JTVElSKSkgeworCQkJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfUlNUSVIpOworCQkJaGFuZGxlZCA9IDE7CisKKwkJCWlmICgoVURDQ1IgJiBVRENDUl9VREEpID09IDApIHsKKwkJCQlEQkcoREJHX1ZFUkJPU0UsICJVU0IgcmVzZXQgc3RhcnRcbiIpOworCisJCQkJLyogcmVzZXQgZHJpdmVyIGFuZCBlbmRwb2ludHMsCisJCQkJICogaW4gY2FzZSB0aGF0J3Mgbm90IHlldCBkb25lCisJCQkJICovCisJCQkJc3RvcF9hY3Rpdml0eSAoZGV2LCBkZXYtPmRyaXZlcik7CisKKwkJCX0gZWxzZSB7CisJCQkJREJHKERCR19WRVJCT1NFLCAiVVNCIHJlc2V0IGVuZFxuIik7CisJCQkJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwkJCQlMRURfQ09OTkVDVEVEX09OOworCQkJCW1lbXNldCgmZGV2LT5zdGF0cywgMCwgc2l6ZW9mIGRldi0+c3RhdHMpOworCQkJCS8qIGRyaXZlciBhbmQgZW5kcG9pbnRzIGFyZSBzdGlsbCByZXNldCAqLworCQkJfQorCisJCX0gZWxzZSB7CisJCQl1MzIJdXNpcjAgPSBVU0lSMCAmIH5VSUNSMDsKKwkJCXUzMgl1c2lyMSA9IFVTSVIxICYgflVJQ1IxOworCQkJaW50CWk7CisKKwkJCWlmICh1bmxpa2VseSAoIXVzaXIwICYmICF1c2lyMSkpCisJCQkJY29udGludWU7CisKKwkJCURCRyhEQkdfVkVSWV9OT0lTWSwgImlycSAlMDJ4LiUwMnhcbiIsIHVzaXIxLCB1c2lyMCk7CisKKwkJCS8qIGNvbnRyb2wgdHJhZmZpYyAqLworCQkJaWYgKHVzaXIwICYgVVNJUjBfSVIwKSB7CisJCQkJZGV2LT5lcFswXS5waW9faXJxcysrOworCQkJCWhhbmRsZV9lcDAoZGV2KTsKKwkJCQloYW5kbGVkID0gMTsKKwkJCX0KKworCQkJLyogZW5kcG9pbnQgZGF0YSB0cmFuc2ZlcnMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCQl1MzIJdG1wID0gMSA8PCBpOworCisJCQkJaWYgKGkgJiYgKHVzaXIwICYgdG1wKSkgeworCQkJCQloYW5kbGVfZXAoJmRldi0+ZXBbaV0pOworCQkJCQlVU0lSMCB8PSB0bXA7CisJCQkJCWhhbmRsZWQgPSAxOworCQkJCX0KKwkJCQlpZiAodXNpcjEgJiB0bXApIHsKKwkJCQkJaGFuZGxlX2VwKCZkZXYtPmVwW2krOF0pOworCQkJCQlVU0lSMSB8PSB0bXA7CisJCQkJCWhhbmRsZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIHdlIGNvdWxkIGFsc28gYXNrIGZvciAxIG1zZWMgU09GIChTSVIpIGludGVycnVwdHMgKi8KKworCX0gd2hpbGUgKGhhbmRsZWQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgbm9wX3JlbGVhc2UgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlETVNHKCIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBkZXYtPmJ1c19pZCk7Cit9CisKKy8qIHRoaXMgdXNlcyBsb2FkLXRpbWUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gKGluc3RlYWQgb2YKKyAqIGRvaW5nIGl0IGF0IHJ1bi10aW1lKSB0byBzYXZlIGNvZGUsIGVsaW1pbmF0ZSBmYXVsdCBwYXRocywgYW5kCisgKiBiZSBtb3JlIG9idmlvdXNseSBjb3JyZWN0LgorICovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGMgbWVtb3J5ID0geworCS5nYWRnZXQgPSB7CisJCS5vcHMJCT0gJnB4YTJ4eF91ZGNfb3BzLAorCQkuZXAwCQk9ICZtZW1vcnkuZXBbMF0uZXAsCisJCS5uYW1lCQk9IGRyaXZlcl9uYW1lLAorCQkuZGV2ID0geworCQkJLmJ1c19pZAkJPSAiZ2FkZ2V0IiwKKwkJCS5yZWxlYXNlCT0gbm9wX3JlbGVhc2UsCisJCX0sCisJfSwKKworCS8qIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwkuZXBbMF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9IGVwMG5hbWUsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEVQMF9GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzAsCisJCS5yZWdfdWRkcgk9ICZVRERSMCwKKwl9LAorCisJLyogZmlyc3QgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzFdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXAxaW4tYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMSwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxLAorCQkucmVnX3VkZHIJPSAmVUREUjEsCisJCWRyY21yICgyNSkKKwl9LAorCS5lcFsyXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMm91dC1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IDIsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMiwKKwkJLnJlZ191YmNyCT0gJlVCQ1IyLAorCQkucmVnX3VkZHIJPSAmVUREUjIsCisJCWRyY21yICgyNikKKwl9LAorI2lmbmRlZiBDT05GSUdfVVNCX1BYQTJYWF9TTUFMTAorCS5lcFszXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwM2luLWlzbyIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElTT19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElTT19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDMsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMywKKwkJLnJlZ191ZGRyCT0gJlVERFIzLAorCQlkcmNtciAoMjcpCisJfSwKKwkuZXBbNF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDRvdXQtaXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSA0LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQywKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzQsCisJCS5yZWdfdWJjcgk9ICZVQkNSNCwKKwkJLnJlZ191ZGRyCT0gJlVERFI0LAorCQlkcmNtciAoMjgpCisJfSwKKwkuZXBbNV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDVpbi1pbnQiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBJTlRfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBJTlRfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCA1LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTNSwKKwkJLnJlZ191ZGRyCT0gJlVERFI1LAorCX0sCisKKwkvKiBzZWNvbmQgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzZdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXA2aW4tYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgNiwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1M2LAorCQkucmVnX3VkZHIJPSAmVUREUjYsCisJCWRyY21yICgzMCkKKwl9LAorCS5lcFs3XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwN291dC1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IDcsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTNywKKwkJLnJlZ191YmNyCT0gJlVCQ1I3LAorCQkucmVnX3VkZHIJPSAmVUREUjcsCisJCWRyY21yICgzMSkKKwl9LAorCS5lcFs4XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwOGluLWlzbyIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElTT19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElTT19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDgsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTOCwKKwkJLnJlZ191ZGRyCT0gJlVERFI4LAorCQlkcmNtciAoMzIpCisJfSwKKwkuZXBbOV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDlvdXQtaXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSA5LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQywKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzksCisJCS5yZWdfdWJjcgk9ICZVQkNSOSwKKwkJLnJlZ191ZGRyCT0gJlVERFI5LAorCQlkcmNtciAoMzMpCisJfSwKKwkuZXBbMTBdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXAxMGluLWludCIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElOVF9GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElOVF9GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDEwLAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTAsCisJCS5yZWdfdWRkcgk9ICZVRERSMTAsCisJfSwKKworCS8qIHRoaXJkIGdyb3VwIG9mIGVuZHBvaW50cyAqLworCS5lcFsxMV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDExaW4tYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTEsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTEsCisJCS5yZWdfdWRkcgk9ICZVRERSMTEsCisJCWRyY21yICgzNSkKKwl9LAorCS5lcFsxMl0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDEyb3V0LWJ1bGsiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBCVUxLX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gQlVMS19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gMTIsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTIsCisJCS5yZWdfdWJjcgk9ICZVQkNSMTIsCisJCS5yZWdfdWRkcgk9ICZVRERSMTIsCisJCWRyY21yICgzNikKKwl9LAorCS5lcFsxM10gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDEzaW4taXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTMsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTMsCisJCS5yZWdfdWRkcgk9ICZVRERSMTMsCisJCWRyY21yICgzNykKKwl9LAorCS5lcFsxNF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDE0b3V0LWlzbyIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElTT19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElTT19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gMTQsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMTQsCisJCS5yZWdfdWJjcgk9ICZVQkNSMTQsCisJCS5yZWdfdWRkcgk9ICZVRERSMTQsCisJCWRyY21yICgzOCkKKwl9LAorCS5lcFsxNV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDE1aW4taW50IiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSU5UX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSU5UX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTUsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxNSwKKwkJLnJlZ191ZGRyCT0gJlVERFIxNSwKKwl9LAorI2VuZGlmIC8qICFDT05GSUdfVVNCX1BYQTJYWF9TTUFMTCAqLworfTsKKworI2RlZmluZSBDUDE1UjBfVkVORE9SX01BU0sJMHhmZmZmZTAwMAorCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpCisjZGVmaW5lIENQMTVSMF9YU0NBTEVfVkFMVUUJMHg2OTA1MjAwMAkvKiBpbnRlbC9hcm0veHNjYWxlICovCisKKyNlbGlmCWRlZmluZWQoQ09ORklHX0FSQ0hfSVhQNFhYKQorI2RlZmluZSBDUDE1UjBfWFNDQUxFX1ZBTFVFCTB4NjkwNTQwMDAJLyogaW50ZWwvYXJtL2l4cDR4eCAqLworCisjZW5kaWYKKworI2RlZmluZSBDUDE1UjBfUFJPRF9NQVNLCTB4MDAwMDAzZjAKKyNkZWZpbmUgUFhBMjV4CQkJMHgwMDAwMDEwMAkvKiBhbmQgUFhBMjZ4ICovCisjZGVmaW5lIFBYQTIxMAkJCTB4MDAwMDAxMjAKKworI2RlZmluZSBDUDE1UjBfUkVWX01BU0sJCTB4MDAwMDAwMGYKKworI2RlZmluZSBDUDE1UjBfUFJPRFJFVl9NQVNLCShDUDE1UjBfUFJPRF9NQVNLIHwgQ1AxNVIwX1JFVl9NQVNLKQorCisjZGVmaW5lIFBYQTI1NV9BMAkJMHgwMDAwMDEwNgkvKiBvciBQWEEyNjBfQjEgKi8KKyNkZWZpbmUgUFhBMjUwX0MwCQkweDAwMDAwMTA1CS8qIG9yIFBYQTI2eF9CMCAqLworI2RlZmluZSBQWEEyNTBfQjIJCTB4MDAwMDAxMDQKKyNkZWZpbmUgUFhBMjUwX0IxCQkweDAwMDAwMTAzCS8qIG9yIFBYQTI2MF9BMCAqLworI2RlZmluZSBQWEEyNTBfQjAJCTB4MDAwMDAxMDIKKyNkZWZpbmUgUFhBMjUwX0ExCQkweDAwMDAwMTAxCisjZGVmaW5lIFBYQTI1MF9BMAkJMHgwMDAwMDEwMAorCisjZGVmaW5lIFBYQTIxMF9DMAkJMHgwMDAwMDEyNQorI2RlZmluZSBQWEEyMTBfQjIJCTB4MDAwMDAxMjQKKyNkZWZpbmUgUFhBMjEwX0IxCQkweDAwMDAwMTIzCisjZGVmaW5lIFBYQTIxMF9CMAkJMHgwMDAwMDEyMgorI2RlZmluZSBJWFA0MjVfQTAJCTB4MDAwMDAxYzEKKworLyoKKyAqIAlwcm9iZSAtIGJpbmRzIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UKKyAqLworc3RhdGljIGludCBfX2luaXQgcHhhMnh4X3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBweGEyeHhfdWRjICpkZXYgPSAmbWVtb3J5OworCWludCByZXR2YWwsIG91dF9kbWEgPSAxOworCXUzMiBjaGlwcmV2OworCisJLyogaW5zaXN0IG9uIEludGVsL0FSTS9YU2NhbGUgKi8KKwlhc20oIm1yYyU/IHAxNSwgMCwgJTAsIGMwLCBjMCIgOiAiPXIiIChjaGlwcmV2KSk7CisJaWYgKChjaGlwcmV2ICYgQ1AxNVIwX1ZFTkRPUl9NQVNLKSAhPSBDUDE1UjBfWFNDQUxFX1ZBTFVFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCBYU2NhbGUhXG4iLCBkcml2ZXJfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHRyaWdnZXIgY2hpcHJldi1zcGVjaWZpYyBsb2dpYyAqLworCXN3aXRjaCAoY2hpcHJldiAmIENQMTVSMF9QUk9EUkVWX01BU0spIHsKKyNpZglkZWZpbmVkKENPTkZJR19BUkNIX1BYQSkKKwljYXNlIFBYQTI1NV9BMDoKKwkJZGV2LT5oYXNfY2ZyID0gMTsKKwkJYnJlYWs7CisJY2FzZSBQWEEyNTBfQTA6CisJY2FzZSBQWEEyNTBfQTE6CisJCS8qIEEwL0ExICJub3QgcmVsZWFzZWQiOyBlcCAxMywgMTUgdW51c2FibGUgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBQWEEyNTBfQjI6IGNhc2UgUFhBMjEwX0IyOgorCWNhc2UgUFhBMjUwX0IxOiBjYXNlIFBYQTIxMF9CMToKKwljYXNlIFBYQTI1MF9CMDogY2FzZSBQWEEyMTBfQjA6CisJCW91dF9kbWEgPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFBYQTI1MF9DMDogY2FzZSBQWEEyMTBfQzA6CisJCWJyZWFrOworI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9JWFA0WFgpCisJY2FzZSBJWFA0MjVfQTA6CisJCW91dF9kbWEgPSAwOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCW91dF9kbWEgPSAwOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbml6ZWQgcHJvY2Vzc29yOiAlMDh4XG4iLAorCQkJZHJpdmVyX25hbWUsIGNoaXByZXYpOworCQkvKiBpb3AzeHgsIGl4cDR4eCwgLi4uICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByX2RlYnVnKCIlczogSVJRICVkJXMlcyVzXG4iLCBkcml2ZXJfbmFtZSwgSVJRX1VTQiwKKwkJZGV2LT5oYXNfY2ZyID8gIiIgOiAiICghY2ZyKSIsCisJCW91dF9kbWEgPyAiIiA6ICIgKGJyb2tlbiBkbWEtb3V0KSIsCisJCVNJWkVfU1RSIERNQVNUUgorCQkpOworCisjaWZkZWYJVVNFX0RNQQorI2lmbmRlZglVU0VfT1VUX0RNQQorCW91dF9kbWEgPSAwOworI2VuZGlmCisJLyogcHhhIDI1MCBlcnJhdHVtIDEzMCBwcmV2ZW50cyB1c2luZyBPVVQgZG1hIChmaXhlZCBDMCkgKi8KKwlpZiAoIW91dF9kbWEpIHsKKwkJRE1TRygiZGlzYWJsZWQgT1VUIGRtYVxuIik7CisJCWRldi0+ZXBbIDJdLnJlZ19kcmNtciA9IGRldi0+ZXBbIDRdLnJlZ19kcmNtciA9IDA7CisJCWRldi0+ZXBbIDddLnJlZ19kcmNtciA9IGRldi0+ZXBbIDldLnJlZ19kcmNtciA9IDA7CisJCWRldi0+ZXBbMTJdLnJlZ19kcmNtciA9IGRldi0+ZXBbMTRdLnJlZ19kcmNtciA9IDA7CisJfQorI2VuZGlmCisKKwkvKiBvdGhlciBub24tc3RhdGljIHBhcnRzIG9mIGluaXQgKi8KKwlkZXYtPmRldiA9IF9kZXY7CisJZGV2LT5tYWNoID0gX2Rldi0+cGxhdGZvcm1fZGF0YTsKKworCWluaXRfdGltZXIoJmRldi0+dGltZXIpOworCWRldi0+dGltZXIuZnVuY3Rpb24gPSB1ZGNfd2F0Y2hkb2c7CisJZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKworCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IF9kZXYtPmRtYV9tYXNrOworCisJdGhlX2NvbnRyb2xsZXIgPSBkZXY7CisJZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisKKwl1ZGNfZGlzYWJsZShkZXYpOworCXVkY19yZWluaXQoZGV2KTsKKworCWRldi0+dmJ1cyA9IGlzX3VzYl9jb25uZWN0ZWQoKTsKKworCS8qIGlycSBzZXR1cCBhZnRlciBvbGQgaGFyZHdhcmUgc3RhdGUgaXMgY2xlYW5lZCB1cCAqLworCXJldHZhbCA9IHJlcXVlc3RfaXJxKElSUV9VU0IsIHB4YTJ4eF91ZGNfaXJxLAorCQkJU0FfSU5URVJSVVBULCBkcml2ZXJfbmFtZSwgZGV2KTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAorCQkJZHJpdmVyX25hbWUsIElSUV9VU0IsIHJldHZhbCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRldi0+Z290X2lycSA9IDE7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9MVUJCT0NLCisJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7CisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLAorCQkJCWx1YmJvY2tfdmJ1c19pcnEsCisJCQkJU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJCQlkcml2ZXJfbmFtZSwgZGV2KTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgaXJxICVpLCBlcnIgJWRcbiIsCisJCQkJZHJpdmVyX25hbWUsIExVQkJPQ0tfVVNCX0RJU0NfSVJRLCByZXR2YWwpOworbHViYm9ja19mYWlsMDoKKwkJCWZyZWVfaXJxKElSUV9VU0IsIGRldik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0lSUSwKKwkJCQlsdWJib2NrX3ZidXNfaXJxLAorCQkJCVNBX0lOVEVSUlVQVCB8IFNBX1NBTVBMRV9SQU5ET00sCisJCQkJZHJpdmVyX25hbWUsIGRldik7CisJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAorCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9JUlEsIHJldHZhbCk7CisJCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKKwkJCWdvdG8gbHViYm9ja19mYWlsMDsKKwkJfQorI2lmZGVmIERFQlVHCisJCS8qIHdpdGggVS1Cb290IChidXQgbm90IEJMT0IpLCBoZXggaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKwkJSEVYX0RJU1BMQVkoZGV2LT5zdGF0cy5pcnFzKTsKKwkJTFVCX0RJU0NfQkxOS19MRUQgJj0gMHhmZjsKKyNlbmRpZgorCX0KKyNlbmRpZgorCWNyZWF0ZV9wcm9jX2ZpbGVzKCk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF91ZGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKworCXVkY19kaXNhYmxlKGRldik7CisJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCWlmIChkZXYtPmdvdF9pcnEpIHsKKwkJZnJlZV9pcnEoSVJRX1VTQiwgZGV2KTsKKwkJZGV2LT5nb3RfaXJxID0gMDsKKwl9CisJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7CisJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLCBkZXYpOworCQlmcmVlX2lycShMVUJCT0NLX1VTQl9JUlEsIGRldik7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfUE0KKworLyogVVNCIHN1c3BlbmQgKGNvbnRyb2xsZWQgYnkgdGhlIGhvc3QpIGFuZCBzeXN0ZW0gc3VzcGVuZCAoY29udHJvbGxlZAorICogYnkgdGhlIFBYQSkgZG9uJ3QgbmVjZXNzYXJpbHkgd29yayB3ZWxsIHRvZ2V0aGVyLiAgSWYgVVNCIGlzIGFjdGl2ZSwKKyAqIHRoZSA0OCBNSHogY2xvY2sgaXMgcmVxdWlyZWQ7IHNvIHRoZSBzeXN0ZW0gY2FuJ3QgZW50ZXIgMzMgTUh6IGlkbGUKKyAqIG1vZGUsIG9yIGFueSBkZWVwZXIgUE0gc2F2aW5nIHN0YXRlLgorICoKKyAqIEZvciBub3csIHdlIHB1bnQgYW5kIGZvcmNpYmx5IGRpc2Nvbm5lY3QgZnJvbSB0aGUgVVNCIGhvc3Qgd2hlbiBQWEEKKyAqIGVudGVycyBhbnkgc3VzcGVuZCBzdGF0ZS4gIFdoaWxlIHdlJ3JlIGRpc2Nvbm5lY3RlZCwgd2UgYWx3YXlzIGRpc2FibGUKKyAqIHRoZSA0OE1IeiBVU0IgY2xvY2sgLi4uIGFsbG93aW5nIFBYQSBzbGVlcCBhbmQvb3IgMzMgTUh6IGlkbGUgc3RhdGVzLiAKKyAqIEJvYXJkcyB3aXRob3V0IHNvZnR3YXJlIHB1bGx1cCBjb250cm9sIHNob3VsZG4ndCB1c2UgdGhvc2Ugc3RhdGVzLgorICogVkJVUyBJUlFzIHNob3VsZCBwcm9iYWJseSBiZSBpZ25vcmVkIHNvIHRoYXQgdGhlIFBYQSBkZXZpY2UganVzdCBhY3RzCisgKiAiZGVhZCIgdG8gVVNCIGhvc3RzIHVudGlsIHN5c3RlbSByZXN1bWUuCisgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGxldmVsID09IFNVU1BFTkRfUE9XRVJfRE9XTikgeworCQlpZiAoIXVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCQlXQVJOKCJVU0IgaG9zdCB3b24ndCBkZXRlY3QgZGlzY29ubmVjdCFcbiIpOworCQlwdWxsdXAodWRjLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGxldmVsID09IFJFU1VNRV9QT1dFUl9PTikKKwkJcHVsbHVwKHVkYywgMSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lCXB4YTJ4eF91ZGNfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXB4YTJ4eF91ZGNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicHhhMnh4LXVkYyIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IHB4YTJ4eF91ZGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChweGEyeHhfdWRjX3JlbW92ZSksCisJLnN1c3BlbmQJPSBweGEyeHhfdWRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGEyeHhfdWRjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXNcbiIsIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHVkY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IoIkZyYW5rIEJlY2tlciwgUm9iZXJ0IFNjaHdlYmVsLCBEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjNhN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaApAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmgKKyAqIEludGVsIFBYQTJ4eCBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX1BYQTJYWF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9QWEEyWFhfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogcHhhMnh4IGhhcyB0aGlzIChtb3ZlIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oKSAqLworI2RlZmluZSBVRk5SSF9TSVIJKDEgPDwgNykJLyogU09GIGludGVycnVwdCByZXF1ZXN0ICovCisjZGVmaW5lIFVGTlJIX1NJTQkoMSA8PCA2KQkvKiBTT0YgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVUZOUkhfSVBFMTQJKDEgPDwgNSkJLyogSVNPIHBhY2tldCBlcnJvciwgZXAxNCAqLworI2RlZmluZSBVRk5SSF9JUEU5CSgxIDw8IDQpCS8qIElTTyBwYWNrZXQgZXJyb3IsIGVwOSAqLworI2RlZmluZSBVRk5SSF9JUEU0CSgxIDw8IDMpCS8qIElTTyBwYWNrZXQgZXJyb3IsIGVwNCAqLworCisvKiBweGEyNTUgaGFzIHRoaXMgKG1vdmUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgpICovCisjZGVmaW5lCVVEQ0NGUgkJVURDX1JFUzIJLyogVURDIENvbnRyb2wgRnVuY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDQ0ZSX0FSRU4JKDEgPDwgNykJLyogQUNLIHJlc3BvbnNlIGVuYWJsZSAobm93KSAqLworI2RlZmluZSBVRENDRlJfQUNNCSgxIDw8IDIpCS8qIEFDSyBjb250cm9sIG1vZGUgKHdhaXQgZm9yIEFSRU4pICovCisKKy8qIGxhdGVzdCBweGEyNTUgZXJyYXRhIGRlZmluZSBuZXcgIm11c3QgYmUgb25lIiBiaXRzIGluIFVEQ0NGUiAqLworI2RlZmluZQlVRENDRlJfTUIxCSgweGZmICYgfihVRENDRlJfQVJFTnxVRENDRlJfQUNNKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHB4YTJ4eF91ZGM7CisKK3N0cnVjdCBweGEyeHhfZXAgeworCXN0cnVjdCB1c2JfZXAJCQkJZXA7CisJc3RydWN0IHB4YTJ4eF91ZGMJCQkqZGV2OworCisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKKwl1bnNpZ25lZCBsb25nCQkJCXBpb19pcnFzOworCXVuc2lnbmVkIGxvbmcJCQkJZG1hX2lycXM7CisJc2hvcnQJCQkJCWRtYTsgCisKKwl1bnNpZ25lZCBzaG9ydAkJCQlmaWZvX3NpemU7CisJdTgJCQkJCWJFbmRwb2ludEFkZHJlc3M7CisJdTgJCQkJCWJtQXR0cmlidXRlczsKKworCXVuc2lnbmVkCQkJCXN0b3BwZWQgOiAxOworCXVuc2lnbmVkCQkJCWRtYV9maXh1cCA6IDE7CisJCQkJCQkJIAorCS8qIFVEQ0NTID0gVURDIENvbnRyb2wvU3RhdHVzIGZvciB0aGlzIEVQCisJICogVUJDUiA9IFVEQyBCeXRlIENvdW50IFJlbWFpbmluZyAoY29udGVudHMgb2YgT1VUIGZpZm8pCisJICogVUREUiA9IFVEQyBFbmRwb2ludCBEYXRhIFJlZ2lzdGVyICh0aGUgZmlmbykKKwkgKiBEUkNNID0gRE1BIFJlcXVlc3QgQ2hhbm5lbCBNYXAKKwkgKi8KKwl2b2xhdGlsZSB1MzIJCQkJKnJlZ191ZGNjczsKKwl2b2xhdGlsZSB1MzIJCQkJKnJlZ191YmNyOworCXZvbGF0aWxlIHUzMgkJCQkqcmVnX3VkZHI7CisjaWZkZWYgVVNFX0RNQQorCXZvbGF0aWxlIHUzMgkJCQkqcmVnX2RyY21yOworI2RlZmluZQlkcmNtcihuKSAgLnJlZ19kcmNtciA9ICYgRFJDTVIgIyMgbiAsCisjZWxzZQorI2RlZmluZQlkcmNtcihuKSAgCisjZW5kaWYKK307CisKK3N0cnVjdCBweGEyeHhfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkJcmVxOworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKK307CisKK2VudW0gZXAwX3N0YXRlIHsgCisJRVAwX0lETEUsCisJRVAwX0lOX0RBVEFfUEhBU0UsCisJRVAwX09VVF9EQVRBX1BIQVNFLAorCUVQMF9FTkRfWEZFUiwKKwlFUDBfU1RBTEwsCit9OworCisjZGVmaW5lIEVQMF9GSUZPX1NJWkUJKCh1bnNpZ25lZCkxNikKKyNkZWZpbmUgQlVMS19GSUZPX1NJWkUJKCh1bnNpZ25lZCk2NCkKKyNkZWZpbmUgSVNPX0ZJRk9fU0laRQkoKHVuc2lnbmVkKTI1NikKKyNkZWZpbmUgSU5UX0ZJRk9fU0laRQkoKHVuc2lnbmVkKTgpCisKK3N0cnVjdCB1ZGNfc3RhdHMgeworCXN0cnVjdCBlcDBzdGF0cyB7CisJCXVuc2lnbmVkIGxvbmcJCW9wczsKKwkJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisJfSByZWFkLCB3cml0ZTsKKwl1bnNpZ25lZCBsb25nCQkJaXJxczsKK307CisKKyNpZmRlZiBDT05GSUdfVVNCX1BYQTJYWF9TTUFMTAorLyogd2hlbiBtZW1vcnkncyB0aWdodCwgU01BTEwgY29uZmlnIHNhdmVzIGNvZGUrZGF0YS4gICovCisjdW5kZWYJVVNFX0RNQQorI2RlZmluZQlQWEFfVURDX05VTV9FTkRQT0lOVFMJMworI2VuZGlmCisKKyNpZm5kZWYJUFhBX1VEQ19OVU1fRU5EUE9JTlRTCisjZGVmaW5lCVBYQV9VRENfTlVNX0VORFBPSU5UUwkxNgorI2VuZGlmCisKK3N0cnVjdCBweGEyeHhfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJCWdhZGdldDsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJCSpkcml2ZXI7CisKKwllbnVtIGVwMF9zdGF0ZQkJCQllcDBzdGF0ZTsKKwlzdHJ1Y3QgdWRjX3N0YXRzCQkJc3RhdHM7CisJdW5zaWduZWQJCQkJZ290X2lycSA6IDEsCisJCQkJCQl2YnVzIDogMSwKKwkJCQkJCXB1bGx1cCA6IDEsCisJCQkJCQloYXNfY2ZyIDogMSwKKwkJCQkJCXJlcV9wZW5kaW5nIDogMSwKKwkJCQkJCXJlcV9zdGQgOiAxLAorCQkJCQkJcmVxX2NvbmZpZyA6IDE7CisKKyNkZWZpbmUgc3RhcnRfd2F0Y2hkb2coZGV2KSBtb2RfdGltZXIoJmRldi0+dGltZXIsIGppZmZpZXMgKyAoSFovMjAwKSkKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJCXRpbWVyOworCisJc3RydWN0IGRldmljZQkJCQkqZGV2OworCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2g7CisJdTY0CQkJCQlkbWFfbWFzazsKKwlzdHJ1Y3QgcHhhMnh4X2VwCQkJZXAgW1BYQV9VRENfTlVNX0VORFBPSU5UU107Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSworI2luY2x1ZGUgPGFzbS9hcmNoL2x1YmJvY2suaD4KKy8qIGx1YmJvY2sgY2FuIGFsc28gcmVwb3J0IHVzYiBjb25uZWN0L2Rpc2Nvbm5lY3QgaXJxcyAqLworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgSEVYX0RJU1BMQVkobikJaWYgKG1hY2hpbmVfaXNfbHViYm9jaygpKSB7IExVQl9IRVhMRUQgPSAobik7IH0KKyNlbmRpZgorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTEVEcyBhcmUgb25seSBmb3IgZGVidWcgKi8KKyNpZm5kZWYgSEVYX0RJU1BMQVkKKyNkZWZpbmUgSEVYX0RJU1BMQVkobikJCWRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKworI2RlZmluZSBMRURfQ09OTkVDVEVEX09OCWxlZHNfZXZlbnQobGVkX2dyZWVuX29uKQorI2RlZmluZSBMRURfQ09OTkVDVEVEX09GRglkbyB7IFwKKwkJCQkJbGVkc19ldmVudChsZWRfZ3JlZW5fb2ZmKTsgXAorCQkJCQlIRVhfRElTUExBWSgwKTsgXAorCQkJCX0gd2hpbGUoMCkKKyNlbmRpZgorCisjaWZuZGVmIExFRF9DT05ORUNURURfT04KKyNkZWZpbmUgTEVEX0NPTk5FQ1RFRF9PTglkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBMRURfQ09OTkVDVEVEX09GRglkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkYyAqdGhlX2NvbnRyb2xsZXI7CisKKy8qIG9uZSBHUElPIHNob3VsZCBiZSB1c2VkIHRvIGRldGVjdCBob3N0IGRpc2Nvbm5lY3QgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3VzYl9jb25uZWN0ZWQodm9pZCkKK3sKKwlpZiAoIXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfaXNfY29ubmVjdGVkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19pc19jb25uZWN0ZWQoKTsKK30KKworLyogb25lIEdQSU8gc2hvdWxkIGZvcmNlIHRoZSBob3N0IHRvIHNlZSB0aGlzIGRldmljZSAob3Igbm90KSAqLworc3RhdGljIGlubGluZSB2b2lkIG1ha2VfdXNiX2Rpc2FwcGVhcih2b2lkKQoreworCWlmICghdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19jb21tYW5kKQorCQlyZXR1cm47CisJdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGV0X3VzYl9hcHBlYXIodm9pZCkKK3sKKwlpZiAoIXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJcmV0dXJuOworCXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9DT05ORUNUKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERlYnVnZ2luZyBzdXBwb3J0IHZhbmlzaGVzIGluIG5vbi1kZWJ1ZyBidWlsZHMuICBEQkdfTk9STUFMIHNob3VsZCBiZQorICogbW9zdGx5IHNpbGVudCBkdXJpbmcgbm9ybWFsIHVzZS90ZXN0aW5nLCB3aXRoIG5vIHRpbWluZyBzaWRlLWVmZmVjdHMuCisgKi8KKyNkZWZpbmUgREJHX05PUk1BTAkxCS8qIGVycm9yIHBhdGhzLCBkZXZpY2Ugc3RhdGUgdHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgREJHX1ZFUkJPU0UJMgkvKiBhZGQgc29tZSBzdWNjZXNzIHBhdGggdHJhY2UgaW5mbyAqLworI2RlZmluZSBEQkdfTk9JU1kJMwkvKiAuLi4gZXZlbiBtb3JlOiByZXF1ZXN0IGxldmVsICovCisjZGVmaW5lIERCR19WRVJZX05PSVNZCTQJLyogLi4uIGV2ZW4gbW9yZTogcGFja2V0IGxldmVsICovCisKKyNpZmRlZiBERUJVRworCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfbmFtZVtdID0geworCSJFUDBfSURMRSIsCisJIkVQMF9JTl9EQVRBX1BIQVNFIiwgIkVQMF9PVVRfREFUQV9QSEFTRSIsCisJIkVQMF9FTkRfWEZFUiIsICJFUDBfU1RBTEwiCit9OworCisjZGVmaW5lIERNU0coc3R1ZmYuLi4pIHByaW50ayhLRVJOX0RFQlVHICJ1ZGM6ICIgc3R1ZmYpCisKKyNpZmRlZiBWRVJCT1NFCisjICAgIGRlZmluZSBVRENfREVCVUcgREJHX1ZFUkJPU0UKKyNlbHNlCisjICAgIGRlZmluZSBVRENfREVCVUcgREJHX05PUk1BTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKK2R1bXBfdWRjY3IoY29uc3QgY2hhciAqbGFiZWwpCit7CisJdTMyCXVkY2NyID0gVURDQ1I7CisJRE1TRygiJXMgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJbGFiZWwsIHVkY2NyLAorCQkodWRjY3IgJiBVRENDUl9SRU0pID8gIiByZW0iIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1JTVElSKSA/ICIgcnN0aXIiIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1NSTSkgPyAiIHNybSIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfU1VTSVIpID8gIiBzdXNpciIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfUkVTSVIpID8gIiByZXNpciIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfUlNNKSA/ICIgcnNtIiA6ICIiLAorCQkodWRjY3IgJiBVRENDUl9VREEpID8gIiB1ZGEiIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1VERSkgPyAiIHVkZSIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKK2R1bXBfdWRjY3MwKGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXUzMgkJdWRjY3MwID0gVURDQ1MwOworCisJRE1TRygiJXMgJXMgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJbGFiZWwsIHN0YXRlX25hbWVbdGhlX2NvbnRyb2xsZXItPmVwMHN0YXRlXSwgdWRjY3MwLAorCQkodWRjY3MwICYgVURDQ1MwX1NBKSA/ICIgc2EiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfUk5FKSA/ICIgcm5lIiA6ICIiLAorCQkodWRjY3MwICYgVURDQ1MwX0ZTVCkgPyAiIGZzdCIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9TU1QpID8gIiBzc3QiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfRFJXRikgPyAiIGR3cmYiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfRlRGKSA/ICIgZnRmIiA6ICIiLAorCQkodWRjY3MwICYgVURDQ1MwX0lQUikgPyAiIGlwciIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9PUFIpID8gIiBvcHIiIDogIiIpOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCitkdW1wX3N0YXRlKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdTMyCQl0bXA7CisJdW5zaWduZWQJaTsKKworCURNU0coIiVzICVzLCB1aWNyICUwMlguJTAyWCwgdXNpciAlMDJYLiUwMngsIHVmbnIgJTAyWC4lMDJYXG4iLAorCQlpc191c2JfY29ubmVjdGVkKCkgPyAiaG9zdCAiIDogImRpc2Nvbm5lY3RlZCIsCisJCXN0YXRlX25hbWVbZGV2LT5lcDBzdGF0ZV0sCisJCVVJQ1IxLCBVSUNSMCwgVVNJUjEsIFVTSVIwLCBVRk5SSCwgVUZOUkwpOworCWR1bXBfdWRjY3IoInVkY2NyIik7CisJaWYgKGRldi0+aGFzX2NmcikgeworCQl0bXAgPSBVRENDRlI7CisJCURNU0coInVkY2NmciAlMDJYID0lcyVzXG4iLCB0bXAsCisJCQkodG1wICYgVURDQ0ZSX0FSRU4pID8gIiBhcmVuIiA6ICIiLAorCQkJKHRtcCAmIFVEQ0NGUl9BQ00pID8gIiBhY20iIDogIiIpOworCX0KKworCWlmICghZGV2LT5kcml2ZXIpIHsKKwkJRE1TRygibm8gZ2FkZ2V0IGRyaXZlciBib3VuZFxuIik7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJRE1TRygiZXAwIGRyaXZlciAnJXMnXG4iLCBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCisJaWYgKCFpc191c2JfY29ubmVjdGVkKCkpCisJCXJldHVybjsKKworCWR1bXBfdWRjY3MwICgidWRjY3MwIik7CisJRE1TRygiZXAwIElOICVsdS8lbHUsIE9VVCAlbHUvJWx1XG4iLAorCQlkZXYtPnN0YXRzLndyaXRlLmJ5dGVzLCBkZXYtPnN0YXRzLndyaXRlLm9wcywKKwkJZGV2LT5zdGF0cy5yZWFkLmJ5dGVzLCBkZXYtPnN0YXRzLnJlYWQub3BzKTsKKworCWZvciAoaSA9IDE7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykgeworCQlpZiAoZGV2LT5lcCBbaV0uZGVzYyA9PSAwKQorCQkJY29udGludWU7CisJCURNU0cgKCJ1ZGNjcyVkID0gJTAyeFxuIiwgaSwgKmRldi0+ZXAtPnJlZ191ZGNjcyk7CisJfQorfQorCisjZWxzZQorCisjZGVmaW5lIERNU0coc3R1ZmYuLi4pCQlkb3t9d2hpbGUoMCkKKworI2RlZmluZQlkdW1wX3VkY2NyKHgpCWRve313aGlsZSgwKQorI2RlZmluZQlkdW1wX3VkY2NzMCh4KQlkb3t9d2hpbGUoMCkKKyNkZWZpbmUJZHVtcF9zdGF0ZSh4KQlkb3t9d2hpbGUoMCkKKworI2RlZmluZSBVRENfREVCVUcgKCh1bnNpZ25lZCkwKQorCisjZW5kaWYKKworI2RlZmluZSBEQkcobHZsLCBzdHVmZi4uLikgZG97aWYgKChsdmwpIDw9IFVEQ19ERUJVRykgRE1TRyhzdHVmZik7fXdoaWxlKDApCisKKyNkZWZpbmUgV0FSTihzdHVmZi4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAidWRjOiAiIHN0dWZmKQorI2RlZmluZSBJTkZPKHN0dWZmLi4uKSBwcmludGsoS0VSTl9JTkZPICJ1ZGM6ICIgc3R1ZmYpCisKKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX0dBREdFVF9QWEEyWFhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzUxOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTAsMCArMSwxNDI4IEBACisvKiAKKyAqIFJORElTIE1TRyBwYXJzZXIKKyAqIAorICogVmVyc2lvbjogICAgICRJZDogcm5kaXMuYyx2IDEuMTkgMjAwNC8wMy8yNSAyMTozMzo0NiByb2JlcnQgRXhwICQKKyAqIAorICogQXV0aG9yczoJQmVuZWRpa3QgU3ByYW5nZXIsIFBlbmd1dHJvbml4CisgKiAJCVJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgKKyAqIAorICogICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgICAgICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICAgICAgICAgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIAorICogCisgKgkJVGhpcyBzb2Z0d2FyZSB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgaW4gY29uZm9ybWFuY2Ugd2l0aAorICoJCU1pY3Jvc29mdCdzIFJlbW90ZSBORElTIFNwZWNpZmljYXRpb24gTGljZW5zZSBBZ3JlZW1lbnQuCisgKiAgICAgICAgICAgICAgCisgKiAwMy8xMi8yMDA0IEthaS1Vd2UgQmxvZW0gPGxpbnV4LWRldmVsb3BtZW50QGF1ZXJzd2FsZC5kZT4KKyAqCQlGaXhlZCBtZXNzYWdlIGxlbmd0aCBidWcgaW4gaW5pdF9yZXNwb25zZQorICogCisgKiAwMy8yNS8yMDA0IEthaS1Vd2UgQmxvZW0gPGxpbnV4LWRldmVsb3BtZW50QGF1ZXJzd2FsZC5kZT4KKyAqIAkJRml4ZWQgcm5kaXNfcm1faGRyIGxlbmd0aCBidWcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IERhdmlkIEJyb3duZWxsCisgKgkJdXBkYXRlcyB0byBtZXJnZSB3aXRoIExpbnV4IDIuNiwgYmV0dGVyIG1hdGNoIFJORElTIHNwZWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKworI3VuZGVmCVJORElTX1BNCisjdW5kZWYJVkVSQk9TRQorCisjaW5jbHVkZSAicm5kaXMuaCIKKworCisvKiBUaGUgZHJpdmVyIGZvciB5b3VyIFVTQiBjaGlwIG5lZWRzIHRvIHN1cHBvcnQgZXAwIE9VVCB0byB3b3JrIHdpdGgKKyAqIFJORElTLCBwbHVzIGFsbCB0aHJlZSBDREMgRXRoZXJuZXQgZW5kcG9pbnRzIChpbnRlcnJ1cHQgbm90IG9wdGlvbmFsKS4KKyAqCisgKiBXaW5kb3dzIGhvc3RzIG5lZWQgYW4gSU5GIGZpbGUgbGlrZSBEb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKKyAqIGFuZCB3aWxsIGJlIGhhcHBpZXIgaWYgeW91IHByb3ZpZGUgdGhlIGhvc3RfYWRkciBtb2R1bGUgcGFyYW1ldGVyLgorICovCisKKyNpZiAwCisjZGVmaW5lIERFQlVHKHN0cixhcmdzLi4uKSBkbyB7IFwKKwlpZiAocm5kaXNfZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgc3RyICwgIyMgYXJncyApOyBcCisJfSB3aGlsZSAoMCkKK3N0YXRpYyBpbnQgcm5kaXNfZGVidWcgPSAwOworCittb2R1bGVfcGFyYW0gKHJuZGlzX2RlYnVnLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHJuZGlzX2RlYnVnLCAiZW5hYmxlIGRlYnVnZ2luZyIpOworCisjZWxzZQorCisjZGVmaW5lIHJuZGlzX2RlYnVnCQkwCisjZGVmaW5lIERFQlVHKHN0cixhcmdzLi4uKQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIFJORElTX01BWF9DT05GSUdTCTEKKworCitzdGF0aWMgcm5kaXNfcGFyYW1zIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtSTkRJU19NQVhfQ09ORklHU107CisKKy8qIERyaXZlciBWZXJzaW9uICovCitzdGF0aWMgY29uc3QgX19sZTMyIHJuZGlzX2RyaXZlcl92ZXJzaW9uID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisKKy8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgcm5kaXNfaW5pdF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19pbml0X21zZ190eXBlICpidWYpOworc3RhdGljIGludCBybmRpc19xdWVyeV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19xdWVyeV9tc2dfdHlwZSAqYnVmKTsKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX3NldF9tc2dfdHlwZSAqYnVmKTsKK3N0YXRpYyBpbnQgcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfcmVzZXRfbXNnX3R5cGUgKmJ1Zik7CitzdGF0aWMgaW50IHJuZGlzX2tlZXBhbGl2ZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCAKKwkJCQkgICAgIHJuZGlzX2tlZXBhbGl2ZV9tc2dfdHlwZSAqYnVmKTsKKworc3RhdGljIHJuZGlzX3Jlc3BfdCAqcm5kaXNfYWRkX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpOworCisKKy8qIE5ESVMgRnVuY3Rpb25zICovCitzdGF0aWMgaW50IGdlbl9uZGlzX3F1ZXJ5X3Jlc3AgKGludCBjb25maWdOciwgdTMyIE9JRCwgcm5kaXNfcmVzcF90ICpyKQoreworCWludCAJCQlyZXR2YWwgPSAtRU5PVFNVUFA7CisJdTMyIAkJCWxlbmd0aCA9IDA7CisJX19sZTMyCQkJKnRtcDsKKwlpbnQJCQlpLCBjb3VudDsKKwlybmRpc19xdWVyeV9jbXBsdF90eXBlCSpyZXNwOworCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwlyZXNwID0gKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKikgci0+YnVmOworCisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKwkKKwlzd2l0Y2ggKE9JRCkgeworCisJLyogZ2VuZXJhbCBvaWRzICh0YWJsZSA0LTEpICovCisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fU1VQUE9SVEVEX0xJU1Q6CisJCURFQlVHICgiJXM6IE9JRF9HRU5fU1VQUE9SVEVEX0xJU1RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IHNpemVvZiAob2lkX3N1cHBvcnRlZF9saXN0KTsKKwkJY291bnQgID0gbGVuZ3RoIC8gc2l6ZW9mICh1MzIpOworCQl0bXAgPSAoX19sZTMyICopICgodTggKilyZXNwICsgMjQpOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJCXRtcFtpXSA9IGNwdV90b19sZTMyIChvaWRfc3VwcG9ydGVkX2xpc3RbaV0pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX0hBUkRXQVJFX1NUQVRVUzoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0hBUkRXQVJFX1NUQVRVU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJLyogQm9ndXMgcXVlc3Rpb24hIAorCQkgKiBIYXJkd2FyZSBtdXN0IGJlIHJlYWR5IHRvIHJlY2VpdmUgaGlnaCBsZXZlbCBwcm90b2NvbHMuCisJCSAqIEJUVzogCisJCSAqIHJlZGRpdGUgZXJnbyBxdWFlIHN1bnQgQ2Flc2FyaXMgQ2Flc2FyaQorCQkgKiBldCBxdWFlIHN1bnQgRGVpIERlbyEKKwkJICovCisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9NRURJQV9TVVBQT1JURURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NRURJQV9JTl9VU0U6CisJCURFQlVHKCIlczogT0lEX0dFTl9NRURJQV9JTl9VU0VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCS8qIG9uZSBtZWRpdW0sIG9uZSB0cmFuc3BvcnQuLi4gKG1heWJlIHlvdSBkbyBpdCBiZXR0ZXIpICovCisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkU6CisJCURFQlVHKCIlczogT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX0xJTktfU1BFRUQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9MSU5LX1NQRUVEXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQorCQkJPT0gTkRJU19NRURJQV9TVEFURV9ESVNDT05ORUNURUQpCisJCSAgICAqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCWVsc2UKKwkJICAgICooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zcGVlZCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkU6CisJCURFQlVHKCIlczogT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKKwkJCWxlbmd0aCA9IDQ7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRToKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldi0+bXR1KTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9WRU5ET1JfSUQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9WRU5ET1JfSURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvcklEKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT046CisJCURFQlVHKCIlczogT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IHN0cmxlbiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS52ZW5kb3JEZXNjcik7CisJCW1lbWNweSAoKHU4ICopIHJlc3AgKyAyNCwgCisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvckRlc2NyLCBsZW5ndGgpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCWNhc2UgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT046CisJCURFQlVHKCIlczogT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT05cbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCS8qIENyZWF0ZWQgYXMgTEUgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IHJuZGlzX2RyaXZlcl92ZXJzaW9uOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI6CisJCURFQlVHKCIlczogT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zW2NvbmZpZ05yXS5maWx0ZXIpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU6CisJCURFQlVHKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJCQlSTkRJU19NQVhfVE9UQUxfU0laRSk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTOgorCQlERUJVRygiJXM6IE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJCS5tZWRpYV9zdGF0ZSk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTToKKwkJREVCVUcoIiVzOiBPSURfR0VOX1BIWVNJQ0FMX01FRElVTVxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIFRoZSBSTkRJUyBzcGVjaWZpY2F0aW9uIGlzIGluY29tcGxldGUvd3JvbmcuICAgU29tZSB2ZXJzaW9ucworCSAqIG9mIE1TLVdpbmRvd3MgZXhwZWN0IE9JRHMgdGhhdCBhcmVuJ3Qgc3BlY2lmaWVkIHRoZXJlLiAgT3RoZXIKKwkgKiB2ZXJzaW9ucyBlbWl0IHVuZGVmaW5lZCBSTkRJUyBtZXNzYWdlcy4gRE9DVU1FTlQgQUxMIFRIRVNFIQorCSAqLworCWNhc2UgT0lEX0dFTl9NQUNfT1BUSU9OUzoJCS8qIGZyb20gV2luTUUgKi8KKwkJREVCVUcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCSAgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRAorCQkJfCBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVgpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIHN0YXRpc3RpY3MgT0lEcyAodGFibGUgNC0yKSAqLworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1hNSVRfT0s6CisJCURFQlVHKCIlczogT0lEX0dFTl9YTUlUX09LXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+dHhfcGFja2V0cyAtIAorCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnR4X2Vycm9ycyAtCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+dHhfZHJvcHBlZCk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9SQ1ZfT0s6CisJCURFQlVHKCIlczogT0lEX0dFTl9SQ1ZfT0tcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT5yeF9wYWNrZXRzIC0gCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+cnhfZXJyb3JzIC0KKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fWE1JVF9FUlJPUjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1hNSVRfRVJST1JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+dHhfZXJyb3JzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fUkNWX0VSUk9SOgorCQlERUJVRygiJXM6IE9JRF9HRU5fUkNWX0VSUk9SXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfZXJyb3JzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fUkNWX05PX0JVRkZFUjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5yeF9kcm9wcGVkKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCisjaWZkZWYJUk5ESVNfT1BUSU9OQUxfU1RBVFMKKwljYXNlIE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIAorCQkgKiBBdW50IFRpbGx5J3Mgc2l6ZSBvZiBzaG9lcworCQkgKiBtaW51cyBhbnRhcmN0aWNhIGNvdW50IG9mIHBlbmd1aW5zCisJCSAqIGRpdmlkZWQgYnkgd2VpZ2h0IG9mIEFscGhhIENlbnRhdXJpCisJCSAqLworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT50eF9wYWNrZXRzIC0gCisJCQkJIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJIC5zdGF0cy0+dHhfZXJyb3JzIC0KKwkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkgLnN0YXRzLT50eF9kcm9wcGVkKQorCQkJCSogMTIzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogZGl0byAqLworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT50eF9wYWNrZXRzIC0gCisJCQkJIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJIC5zdGF0cy0+dHhfZXJyb3JzIC0KKwkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkgLnN0YXRzLT50eF9kcm9wcGVkKQorCQkJCS8gMTIzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPm11bHRpY2FzdCoxMjM0KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUOgorCQlERUJVRygiJXM6IE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+bXVsdGljYXN0KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnR4X3BhY2tldHMvNDIqMjU1KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUOgorCQlERUJVRygiJXM6IE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+dHhfcGFja2V0cy80Mik7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVlxuIiwgX19GVU5DVElPTl9fKTsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1Y6CisJCURFQlVHKCIlczogT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1ZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5tdWx0aWNhc3QgKiAxMTExKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1Y6CisJCURFQlVHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDVlxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPm11bHRpY2FzdCk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1Y6CisJCURFQlVHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfcGFja2V0cy80MioyNTUpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfcGFja2V0cy80Mik7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX1JDVl9DUkNfRVJST1I6CisJCURFQlVHKCIlczogT0lEX0dFTl9SQ1ZfQ1JDX0VSUk9SXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfY3JjX2Vycm9ycyk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSFxuIiwgX19GVU5DVElPTl9fKTsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKyNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLworCisJLyogaWVlZTgwMi4zIE9JRHMgKHRhYmxlIDQtMykgKi8KKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CisJCQlsZW5ndGggPSBFVEhfQUxFTjsKKwkJCW1lbWNweSAoKHU4ICopIHJlc3AgKyAyNCwKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmhvc3RfbWFjLAorCQkJCWxlbmd0aCk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1NcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgeworCQkJbGVuZ3RoID0gRVRIX0FMRU47CisJCQltZW1jcHkgKCh1OCAqKSByZXNwICsgMjQsCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5ob3N0X21hYywKKwkJCQlsZW5ndGgpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1Q6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4RTAwMDAwMDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFXG4iLCBfX0ZVTkNUSU9OX18pOworCQkgbGVuZ3RoID0gNDsKKwkJLyogTXVsdGljYXN0IGJhc2UgYWRkcmVzcyBvbmx5ICovCisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX01BQ19PUFRJT05TOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19NQUNfT1BUSU9OU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJYnJlYWs7CisKKwkvKiBpZWVlODAyLjMgc3RhdGlzdGljcyBPSURzICh0YWJsZSA0LTQpICovCisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykKKwkJeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKyNpZmRlZglSTkRJU19PUFRJT05BTF9TVEFUUworCWNhc2UgT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQ6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfREVGRVJSRURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIFRPRE8gKi8KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIFRPRE8gKi8KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX1JDVl9PVkVSUlVOOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19SQ1ZfT1ZFUlJVTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9VTkRFUlJVTjoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9VTkRFUlJVTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRToKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9USU1FU19DUlNfTE9TVDoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9USU1FU19DUlNfTE9TVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9MQVRFX0NPTExJU0lPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1hNSVRfTEFURV9DT0xMSVNJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBUT0RPICovCisJCWJyZWFrOwkJCisjZW5kaWYJLyogUk5ESVNfT1BUSU9OQUxfU1RBVFMgKi8KKworI2lmZGVmCVJORElTX1BNCisJLyogcG93ZXIgbWFuYWdlbWVudCBPSURzICh0YWJsZSA0LTUpICovCisJY2FzZSBPSURfUE5QX0NBUEFCSUxJVElFUzoKKwkJREVCVUcoIiVzOiBPSURfUE5QX0NBUEFCSUxJVElFU1xuIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiBqdXN0IFBNLCBhbmQgcmVtb3RlIHdha2V1cCBvbiBsaW5rIHN0YXR1cyBjaGFuZ2UKKwkJICogKG5vdCBtYWdpYyBwYWNrZXQgb3IgcGF0dGVybiBtYXRjaCkKKwkJICovCisJCWxlbmd0aCA9IHNpemVvZiAoc3RydWN0IE5ESVNfUE5QX0NBUEFCSUxJVElFUyk7CisJCW1lbXNldCAocmVzcCwgMCwgbGVuZ3RoKTsKKwkJeworCQkJc3RydWN0IE5ESVNfUE5QX0NBUEFCSUxJVElFUyAqY2FwcyA9ICh2b2lkICopIHJlc3A7CisKKwkJCWNhcHMtPkZsYWdzID0gTkRJU19ERVZJQ0VfV0FLRV9VUF9FTkFCTEU7CisJCQljYXBzLT5XYWtlVXBDYXBhYmlsaXRpZXMuTWluTGlua0NoYW5nZVdha2VVcCAKKwkJCQkgPSBOZGlzRGV2aWNlU3RhdGVEMzsKKworCQkJLyogRklYTUUgdGhlbiB1c2UgdXNiX2dhZGdldF93YWtldXAoKSwgYW5kCisJCQkgKiBzZXQgVVNCX0NPTkZJR19BVFRfV0FLRVVQIGluIGNvbmZpZyBkZXNjCisJCQkgKi8KKwkJfQorCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwljYXNlIE9JRF9QTlBfUVVFUllfUE9XRVI6CisJCURFQlVHKCIlczogT0lEX1BOUF9RVUVSWV9QT1dFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogc3VyZSwgaGFuZGxlIGFueSBwb3dlciBzdGF0ZSB0aGF0IG1hcHMgdG8gVVNCIHN1c3BlbmQgKi8KKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogcXVlcnkgdW5rbm93biBPSUQgMHglMDhYXG4iLCAKKwkJCSBfX0ZVTkNUSU9OX18sIE9JRCk7CisJfQorCQorCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIgKGxlbmd0aCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyICgyNCArIGxlbmd0aCk7CisJci0+bGVuZ3RoID0gMjQgKyBsZW5ndGg7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBnZW5fbmRpc19zZXRfcmVzcCAodTggY29uZmlnTnIsIHUzMiBPSUQsIHU4ICpidWYsIHUzMiBidWZfbGVuLCAKKwkJCSAgICAgIHJuZGlzX3Jlc3BfdCAqcikKK3sKKwlybmRpc19zZXRfY21wbHRfdHlwZQkJKnJlc3A7CisJaW50IAkJCQlpLCByZXR2YWwgPSAtRU5PVFNVUFA7CisJc3RydWN0IHJuZGlzX3BhcmFtcwkJKnBhcmFtczsKKworCWlmICghcikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19zZXRfY21wbHRfdHlwZSAqKSByLT5idWY7CisJaWYgKCFyZXNwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCURFQlVHKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CisJZm9yIChpID0gMDsgaSA8IGJ1Zl9sZW47IGkgKz0gMTYpIHsKKwkJREVCVUcgKCIlMDNkOiAiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkiXG4iLAorCQkJaSwKKwkJCWJ1ZltpXSwgYnVmIFtpKzFdLAorCQkJCWJ1ZltpKzJdLCBidWZbaSszXSwKKwkJCWJ1ZltpKzRdLCBidWYgW2krNV0sCisJCQkJYnVmW2krNl0sIGJ1ZltpKzddLAorCQkJYnVmW2krOF0sIGJ1ZiBbaSs5XSwKKwkJCQlidWZbaSsxMF0sIGJ1ZltpKzExXSwKKwkJCWJ1ZltpKzEyXSwgYnVmIFtpKzEzXSwKKwkJCQlidWZbaSsxNF0sIGJ1ZltpKzE1XSk7CisJfQorCisJc3dpdGNoIChPSUQpIHsKKwljYXNlIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSOgorCQlwYXJhbXMgPSAmcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXTsKKwkJcmV0dmFsID0gMDsKKworCQkvKiBGSVhNRSB1c2UgdGhlc2UgTkRJU19QQUNLRVRfVFlQRV8qIGJpdGZsYWdzIHRvCisJCSAqIGZpbHRlciBwYWNrZXRzIGluIGhhcmRfc3RhcnRfeG1pdCgpCisJCSAqIE5ESVNfUEFDS0VUX1RZUEVfeCA9PSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX3ggZm9yIHggaW46CisJCSAqCVBST01JU0NVT1VTLCBESVJFQ1RFRCwKKwkJICoJTVVMVElDQVNULCBBTExfTVVMVElDQVNULCBCUk9BRENBU1QKKwkJICovCisJCXBhcmFtcy0+ZmlsdGVyID0gbGUzMl90b19jcHVwKChfX2xlMzIgKilidWYpOworCQlERUJVRygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICUwOHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHBhcmFtcy0+ZmlsdGVyKTsKKworCQkvKiB0aGlzIGNhbGwgaGFzIGEgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3Q6ICBpdCdzCisJCSAqIHdoYXQgbWFrZXMgdGhlIHBhY2tldCBmbG93IHN0YXJ0IGFuZCBzdG9wLCBsaWtlCisJCSAqIGFjdGl2YXRpbmcgdGhlIENEQyBFdGhlcm5ldCBhbHRzZXR0aW5nLgorCQkgKi8KKwkJaWYgKHBhcmFtcy0+ZmlsdGVyKSB7CisJCQlwYXJhbXMtPnN0YXRlID0gUk5ESVNfREFUQV9JTklUSUFMSVpFRDsKKwkJCW5ldGlmX2NhcnJpZXJfb24ocGFyYW1zLT5kZXYpOworCQkJaWYgKG5ldGlmX3J1bm5pbmcocGFyYW1zLT5kZXYpKQorCQkJCW5ldGlmX3dha2VfcXVldWUgKHBhcmFtcy0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19JTklUSUFMSVpFRDsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmIChwYXJhbXMtPmRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlIChwYXJhbXMtPmRldik7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgorCQkvKiBJIHRoaW5rIHdlIGNhbiBpZ25vcmUgdGhpcyAqLwkJCisJCURFQlVHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKyNpZiAwCisJY2FzZSBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVI6CisJCXsKKwkJc3RydWN0IHJuZGlzX2NvbmZpZ19wYXJhbWV0ZXIJKnBhcmFtOworCQlwYXJhbSA9IChzdHJ1Y3Qgcm5kaXNfY29uZmlnX3BhcmFtZXRlciAqKSBidWY7CisJCURFQlVHKCIlczogT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSICclKnMnXG4iLAorCQkJX19GVU5DVElPTl9fLAorCQkJbWluKGNwdV90b19sZTMyKHBhcmFtLT5QYXJhbWV0ZXJOYW1lTGVuZ3RoKSw4MCksCisJCQlidWYgKyBwYXJhbS0+UGFyYW1ldGVyTmFtZU9mZnNldCk7CisJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmCVJORElTX1BNCisJY2FzZSBPSURfUE5QX1NFVF9QT1dFUjoKKwkJREVCVUcgKCJPSURfUE5QX1NFVF9QT1dFUlxuIik7CisJCS8qIHN1cmUsIGhhbmRsZSBhbnkgcG93ZXIgc3RhdGUgdGhhdCBtYXBzIHRvIFVTQiBzdXNwZW5kICovCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPSURfUE5QX0VOQUJMRV9XQUtFX1VQOgorCQkvKiBhbHdheXMtY29ubmVjdGVkIC4uLiAqLworCQlERUJVRyAoIk9JRF9QTlBfRU5BQkxFX1dBS0VfVVBcbiIpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8vIG5vIFBNIHJlc3VtZSBwYXR0ZXJucyBzdXBwb3J0ZWQgKHNwZWNpZmllZCB3aGVyZT8pCisJLy8gc28gT0lEX1BOUF97QURELFJFTU9WRX1fV0FLRV9VUF9QQVRURVJOIGFsd2F5cyBmYWlscworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHNldCB1bmtub3duIE9JRCAweCUwOFgsIHNpemUgJWRcbiIsIAorCQkJIF9fRlVOQ1RJT05fXywgT0lELCBidWZfbGVuKTsKKwl9CisJCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogCisgKiBSZXNwb25zZSBGdW5jdGlvbnMgCisgKi8KKworc3RhdGljIGludCBybmRpc19pbml0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX2luaXRfbXNnX3R5cGUgKmJ1ZikKK3sKKwlybmRpc19pbml0X2NtcGx0X3R5cGUJKnJlc3A7IAorCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOworCQorCWlmICghcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHJldHVybiAtRU5PVFNVUFA7CisJCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAocm5kaXNfaW5pdF9jbXBsdF90eXBlKSk7CisJCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwkKKwlyZXNwID0gKHJuZGlzX2luaXRfY21wbHRfdHlwZSAqKSByLT5idWY7CisJCisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKwkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDUyKTsKKwlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLworCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwlyZXNwLT5NYWpvclZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NQUpPUl9WRVJTSU9OKTsKKwlyZXNwLT5NaW5vclZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NSU5PUl9WRVJTSU9OKTsKKwlyZXNwLT5EZXZpY2VGbGFncyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX0RGX0NPTk5FQ1RJT05MRVNTKTsKKwlyZXNwLT5NZWRpdW0gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19NRURJVU1fODAyXzMpOworCXJlc3AtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCXJlc3AtPk1heFRyYW5zZmVyU2l6ZSA9IGNwdV90b19sZTMyICgKKwkJICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldi0+bXR1CisJCSsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKQorCQkrIHNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSkKKwkJKyAyMik7CisJcmVzcC0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0T2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+QUZMaXN0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybmRpc19xdWVyeV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19xdWVyeV9tc2dfdHlwZSAqYnVmKQoreworCXJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKnJlc3A7CisJcm5kaXNfcmVzcF90ICAgICAgICAgICAgKnI7CisJCisJLy8gREVCVUcoIiVzOiBPSUQgPSAlMDhYXG4iLCBfX0ZVTkNUSU9OX18sIGNwdV90b19sZTMyKGJ1Zi0+T0lEKSk7CisJaWYgKCFybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgcmV0dXJuIC1FTk9UU1VQUDsKKwkKKwkvKiAKKwkgKiB3ZSBuZWVkIG1vcmUgbWVtb3J5OiAKKwkgKiBvaWRfc3VwcG9ydGVkX2xpc3QgaXMgdGhlIGxhcmdlc3QgYW5zd2VyIAorCSAqLworCXIgPSBybmRpc19hZGRfcmVzcG9uc2UgKGNvbmZpZ05yLCBzaXplb2YgKG9pZF9zdXBwb3J0ZWRfbGlzdCkpOworCQorCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwkKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgyNCk7CisJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KKwkKKwlpZiAoZ2VuX25kaXNfcXVlcnlfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksIHIpKSB7CisJCS8qIE9JRCBub3Qgc3VwcG9ydGVkICovCisJCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwl9IGVsc2UKKwkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybmRpc19zZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfc2V0X21zZ190eXBlICpidWYpCit7CisJdTMyCQkJQnVmTGVuZ3RoLCBCdWZPZmZzZXQ7CisJcm5kaXNfc2V0X2NtcGx0X3R5cGUJKnJlc3A7CisJcm5kaXNfcmVzcF90CQkqcjsKKwkKKwlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19zZXRfY21wbHRfdHlwZSkpOworCQorCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19zZXRfY21wbHRfdHlwZSAqKSByLT5idWY7CisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKworCUJ1Zkxlbmd0aCA9IGxlMzJfdG9fY3B1IChidWYtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKwlCdWZPZmZzZXQgPSBsZTMyX3RvX2NwdSAoYnVmLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCk7CisKKyNpZmRlZglWRVJCT1NFCisJREVCVUcoIiVzOiBMZW5ndGg6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIEJ1Zkxlbmd0aCk7CisJREVCVUcoIiVzOiBPZmZzZXQ6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIEJ1Zk9mZnNldCk7CisJREVCVUcoIiVzOiBJbmZvQnVmZmVyOiAiLCBfX0ZVTkNUSU9OX18pOworCQorCWZvciAoaSA9IDA7IGkgPCBCdWZMZW5ndGg7IGkrKykgeworCQlERUJVRyAoIiUwMnggIiwgKigoKHU4ICopIGJ1ZikgKyBpICsgOCArIEJ1Zk9mZnNldCkpOworCX0KKwkKKwlERUJVRyAoIlxuIik7CisjZW5kaWYKKwkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLworCWlmIChnZW5fbmRpc19zZXRfcmVzcCAoY29uZmlnTnIsIGxlMzJfdG9fY3B1IChidWYtPk9JRCksIAorCQkJICAgICAgICgodTggKikgYnVmKSArIDggKyBCdWZPZmZzZXQsIEJ1Zkxlbmd0aCwgcikpCisJICAgIHJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKKwllbHNlIHJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwkKKwlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2spCisJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrICgKKwkgICAgCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldik7CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfcmVzZXRfbXNnX3R5cGUgKmJ1ZikKK3sKKwlybmRpc19yZXNldF9jbXBsdF90eXBlCSpyZXNwOworCXJuZGlzX3Jlc3BfdAkJKnI7CisJCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAocm5kaXNfcmVzZXRfY21wbHRfdHlwZSkpOworCQorCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJcmVzcCA9IChybmRpc19yZXNldF9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCS8qIHJlc2VudCBpbmZvcm1hdGlvbiAqLworCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJuZGlzX2tlZXBhbGl2ZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLAorCQkJCSAgICAgcm5kaXNfa2VlcGFsaXZlX21zZ190eXBlICpidWYpCit7CisJcm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUJKnJlc3A7CisJcm5kaXNfcmVzcF90CQkJKnI7CisKKwkvKiBob3N0ICJzaG91bGQiIGNoZWNrIG9ubHkgaW4gUk5ESVNfREFUQV9JTklUSUFMSVpFRCBzdGF0ZSAqLworCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAocm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUpKTsKKwlyZXNwID0gKHJuZGlzX2tlZXBhbGl2ZV9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCisJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwkKKwlyZXR1cm4gMDsKK30KKworCisvKiAKKyAqIERldmljZSB0byBIb3N0IENvbXVuaWNhdGlvbiAKKyAqLworc3RhdGljIGludCBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnIChpbnQgY29uZmlnTnIsIHUzMiBzdGF0dXMpCit7CisJcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZ190eXBlCSpyZXNwOwkKKwlybmRpc19yZXNwX3QJCQkqcjsKKwkKKwlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0ZSA9PSBSTkRJU19VTklOSVRJQUxJWkVEKQorCSAgICByZXR1cm4gLUVOT1RTVVBQOworCQorCXIgPSBybmRpc19hZGRfcmVzcG9uc2UgKGNvbmZpZ05yLCAKKwkJCQlzaXplb2YgKHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZSkpOworCWlmICghcikgcmV0dXJuIC1FTk9NRU07CisJCisJcmVzcCA9IChybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUgKikgci0+YnVmOworCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CisJCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgKKwkJCVJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgyMCk7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKHN0YXR1cyk7CisJcmVzcC0+U3RhdHVzQnVmZmVyTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+U3RhdHVzQnVmZmVyT2Zmc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCisJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKSAKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJuZGlzX3NpZ25hbF9jb25uZWN0IChpbnQgY29uZmlnTnIpCit7CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQorCQkJPSBORElTX01FRElBX1NUQVRFX0NPTk5FQ1RFRDsKKwlyZXR1cm4gcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZyAoY29uZmlnTnIsIAorCQkJCQkgIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUKTsKK30KKworaW50IHJuZGlzX3NpZ25hbF9kaXNjb25uZWN0IChpbnQgY29uZmlnTnIpCit7CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpYV9zdGF0ZQorCQkJPSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRDsKKwlyZXR1cm4gcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZyAoY29uZmlnTnIsCisJCQkJCSAgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpOworfQorCit2b2lkIHJuZGlzX3NldF9ob3N0X21hYyAoaW50IGNvbmZpZ05yLCBjb25zdCB1OCAqYWRkcikKK3sKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmhvc3RfbWFjID0gYWRkcjsKK30KKworLyogCisgKiBNZXNzYWdlIFBhcnNlciAKKyAqLworaW50IHJuZGlzX21zZ19wYXJzZXIgKHU4IGNvbmZpZ05yLCB1OCAqYnVmKQoreworCXUzMiBNc2dUeXBlLCBNc2dMZW5ndGg7CisJX19sZTMyICp0bXA7CisJc3RydWN0IHJuZGlzX3BhcmFtcwkJKnBhcmFtczsKKwkKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJCisJdG1wID0gKF9fbGUzMiAqKSBidWY7IAorCU1zZ1R5cGUgICA9IGxlMzJfdG9fY3B1cCh0bXArKyk7CisJTXNnTGVuZ3RoID0gbGUzMl90b19jcHVwKHRtcCsrKTsKKwkKKwlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpCisJCXJldHVybiAtRU5PVFNVUFA7CisJcGFyYW1zID0gJnJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl07CisJCisJLyogRm9yIFVTQjogcmVzcG9uc2VzIG1heSB0YWtlIHVwIHRvIDEwIHNlY29uZHMgKi8KKwlzd2l0Y2ggKE1zZ1R5cGUpCisJeworCWNhc2UgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c6CisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0dcbiIsIAorCQkJX19GVU5DVElPTl9fICk7CisJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19JTklUSUFMSVpFRDsKKwkJcmV0dXJuICBybmRpc19pbml0X3Jlc3BvbnNlIChjb25maWdOciwKKwkJCQkJICAgICAocm5kaXNfaW5pdF9tc2dfdHlwZSAqKSBidWYpOworCQkKKwljYXNlIFJFTU9URV9ORElTX0hBTFRfTVNHOgorCQlERUJVRygiJXM6IFJFTU9URV9ORElTX0hBTFRfTVNHXG4iLAorCQkJX19GVU5DVElPTl9fICk7CisJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19VTklOSVRJQUxJWkVEOworCQlpZiAocGFyYW1zLT5kZXYpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmIChwYXJhbXMtPmRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlIChwYXJhbXMtPmRldik7CisJCX0KKwkJcmV0dXJuIDA7CisJCQorCWNhc2UgUkVNT1RFX05ESVNfUVVFUllfTVNHOgorCQlyZXR1cm4gcm5kaXNfcXVlcnlfcmVzcG9uc2UgKGNvbmZpZ05yLCAKKwkJCQkJICAgICAocm5kaXNfcXVlcnlfbXNnX3R5cGUgKikgYnVmKTsKKwkJCisJY2FzZSBSRU1PVEVfTkRJU19TRVRfTVNHOgorCQlyZXR1cm4gcm5kaXNfc2V0X3Jlc3BvbnNlIChjb25maWdOciwgCisJCQkJCSAgIChybmRpc19zZXRfbXNnX3R5cGUgKikgYnVmKTsKKwkJCisJY2FzZSBSRU1PVEVfTkRJU19SRVNFVF9NU0c6CisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfUkVTRVRfTVNHXG4iLCAKKwkJCV9fRlVOQ1RJT05fXyApOworCQlyZXR1cm4gcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGNvbmZpZ05yLAorCQkJCQkgICAgIChybmRpc19yZXNldF9tc2dfdHlwZSAqKSBidWYpOworCisJY2FzZSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHOgorCQkvKiBGb3IgVVNCOiBob3N0IGRvZXMgdGhpcyBldmVyeSA1IHNlY29uZHMgKi8KKyNpZmRlZglWRVJCT1NFCisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TR1xuIiwgCisJCQlfX0ZVTkNUSU9OX18gKTsKKyNlbmRpZgorCQlyZXR1cm4gcm5kaXNfa2VlcGFsaXZlX3Jlc3BvbnNlIChjb25maWdOciwKKwkJCQkJCSAocm5kaXNfa2VlcGFsaXZlX21zZ190eXBlICopIAorCQkJCQkJIGJ1Zik7CisJCQorCWRlZmF1bHQ6IAorCQkvKiBBdCBsZWFzdCBXaW5kb3dzIFhQIGVtaXRzIHNvbWUgdW5kZWZpbmVkIFJORElTIG1lc3NhZ2VzLgorCQkgKiBJbiBvbmUgY2FzZSB0aG9zZSBtZXNzYWdlcyBzZWVtZWQgdG8gcmVsYXRlIHRvIHRoZSBob3N0CisJCSAqIHN1c3BlbmRpbmcgaXRzZWxmLgorCQkgKi8KKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcKKwkJCSIlczogdW5rbm93biBSTkRJUyBtZXNzYWdlIDB4JTA4WCBsZW4gJWRcbiIsIAorCQkJX19GVU5DVElPTl9fICwgTXNnVHlwZSwgTXNnTGVuZ3RoKTsKKwkJeworCQkJdW5zaWduZWQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNc2dMZW5ndGg7IGkgKz0gMTYpIHsKKwkJCQlERUJVRyAoIiUwM2Q6ICIKKwkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgorCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgorCQkJCQkiXG4iLAorCQkJCQlpLAorCQkJCQlidWZbaV0sIGJ1ZiBbaSsxXSwKKwkJCQkJCWJ1ZltpKzJdLCBidWZbaSszXSwKKwkJCQkJYnVmW2krNF0sIGJ1ZiBbaSs1XSwKKwkJCQkJCWJ1ZltpKzZdLCBidWZbaSs3XSwKKwkJCQkJYnVmW2krOF0sIGJ1ZiBbaSs5XSwKKwkJCQkJCWJ1ZltpKzEwXSwgYnVmW2krMTFdLAorCQkJCQlidWZbaSsxMl0sIGJ1ZiBbaSsxM10sCisJCQkJCQlidWZbaSsxNF0sIGJ1ZltpKzE1XSk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCQorCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK2ludCBybmRpc19yZWdpc3RlciAoaW50ICgqIHJuZGlzX2NvbnRyb2xfYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKikpCit7CisJdTggaTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgUk5ESVNfTUFYX0NPTkZJR1M7IGkrKykgeworCQlpZiAoIXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS51c2VkKSB7CisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0udXNlZCA9IDE7CisJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0uYWNrID0gcm5kaXNfY29udHJvbF9hY2s7CisJCQlERUJVRygiJXM6IGNvbmZpZ05yID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlERUJVRygiZmFpbGVkXG4iKTsKKwkKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgcm5kaXNfZGVyZWdpc3RlciAoaW50IGNvbmZpZ05yKQoreworCURFQlVHKCIlczogXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkKKwlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybjsKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnVzZWQgPSAwOworCQorCXJldHVybjsKK30KKworaW50IHJuZGlzX3NldF9wYXJhbV9kZXYgKHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMpCit7CisJREVCVUcoIiVzOlxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCFkZXYgfHwgIXN0YXRzKSByZXR1cm4gLTE7CisJaWYgKGNvbmZpZ05yID49IFJORElTX01BWF9DT05GSUdTKSByZXR1cm4gLTE7CisJCisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYgPSBkZXY7CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cyA9IHN0YXRzOworCQorCXJldHVybiAwOworfQorCitpbnQgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpCit7CisJREVCVUcoIiVzOlxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKCF2ZW5kb3JEZXNjcikgcmV0dXJuIC0xOworCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOworCQorCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9ySUQgPSB2ZW5kb3JJRDsKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvckRlc2NyID0gdmVuZG9yRGVzY3I7CisJCisJcmV0dXJuIDA7Cit9CisKK2ludCBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKQoreworCURFQlVHKCIlczpcbiIsIF9fRlVOQ1RJT05fXyApOworCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOworCQorCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtID0gbWVkaXVtOworCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3BlZWQgPSBzcGVlZDsKKwkKKwlyZXR1cm4gMDsKK30KKwordm9pZCBybmRpc19hZGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBybmRpc19wYWNrZXRfbXNnX3R5cGUJKmhlYWRlcjsKKworCWlmICghc2tiKQorCQlyZXR1cm47CisJaGVhZGVyID0gKHZvaWQgKikgc2tiX3B1c2ggKHNrYiwgc2l6ZW9mICpoZWFkZXIpOworCW1lbXNldCAoaGVhZGVyLCAwLCBzaXplb2YgKmhlYWRlcik7CisJaGVhZGVyLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCWhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwloZWFkZXItPkRhdGFPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgzNik7CisJaGVhZGVyLT5PT0JEYXRhT2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4gLSA0NCk7Cit9CisKK3ZvaWQgcm5kaXNfZnJlZV9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1OCAqYnVmKQoreworCXJuZGlzX3Jlc3BfdAkJKnI7CisJc3RydWN0IGxpc3RfaGVhZAkqYWN0LCAqdG1wOworCQorCWxpc3RfZm9yX2VhY2hfc2FmZSAoYWN0LCB0bXAsIAorCQkJICAgICYocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5yZXNwX3F1ZXVlKSkKKwl7CisJCXIgPSBsaXN0X2VudHJ5IChhY3QsIHJuZGlzX3Jlc3BfdCwgbGlzdCk7CisJCWlmIChyICYmIHItPmJ1ZiA9PSBidWYpIHsKKwkJCWxpc3RfZGVsICgmci0+bGlzdCk7CisJCQlrZnJlZSAocik7CisJCX0KKwl9Cit9CisKK3U4ICpybmRpc19nZXRfbmV4dF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1MzIgKmxlbmd0aCkKK3sKKwlybmRpc19yZXNwX3QJCSpyOworCXN0cnVjdCBsaXN0X2hlYWQgCSphY3QsICp0bXA7CisJCisJaWYgKCFsZW5ndGgpIHJldHVybiBOVUxMOworCQorCWxpc3RfZm9yX2VhY2hfc2FmZSAoYWN0LCB0bXAsIAorCQkJICAgICYocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5yZXNwX3F1ZXVlKSkKKwl7CisJCXIgPSBsaXN0X2VudHJ5IChhY3QsIHJuZGlzX3Jlc3BfdCwgbGlzdCk7CisJCWlmICghci0+c2VuZCkgeworCQkJci0+c2VuZCA9IDE7CisJCQkqbGVuZ3RoID0gci0+bGVuZ3RoOworCQkJcmV0dXJuIHItPmJ1ZjsKKwkJfQorCX0KKwkKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHJuZGlzX3Jlc3BfdCAqcm5kaXNfYWRkX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpCit7CisJcm5kaXNfcmVzcF90CSpyOworCQorCXIgPSBrbWFsbG9jIChzaXplb2YgKHJuZGlzX3Jlc3BfdCkgKyBsZW5ndGgsIEdGUF9BVE9NSUMpOworCWlmICghcikgcmV0dXJuIE5VTEw7CisJCisJci0+YnVmID0gKHU4ICopIChyICsgMSk7CisJci0+bGVuZ3RoID0gbGVuZ3RoOworCXItPnNlbmQgPSAwOworCQorCWxpc3RfYWRkX3RhaWwgKCZyLT5saXN0LCAKKwkJICAgICAgICYocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5yZXNwX3F1ZXVlKSk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBybmRpc19ybV9oZHIgKHU4ICpidWYsIHUzMiAqbGVuZ3RoKQoreworCXUzMiBpLCBtZXNzYWdlTGVuLCBkYXRhT2Zmc2V0OworCV9fbGUzMiAqdG1wOworCQorCXRtcCA9IChfX2xlMzIgKikgYnVmOyAKKworCWlmICghYnVmIHx8ICFsZW5ndGgpIHJldHVybiAtMTsKKwlpZiAobGUzMl90b19jcHVwKHRtcCsrKSAhPSAxKSByZXR1cm4gLTE7CisJCisJbWVzc2FnZUxlbiA9IGxlMzJfdG9fY3B1cCh0bXArKyk7CisJZGF0YU9mZnNldCA9IGxlMzJfdG9fY3B1cCh0bXArKykgKyA4OworCisJaWYgKG1lc3NhZ2VMZW4gPCBkYXRhT2Zmc2V0IHx8IG1lc3NhZ2VMZW4gPiAqbGVuZ3RoKSByZXR1cm4gLTE7CisJCisJZm9yIChpID0gZGF0YU9mZnNldDsgaSA8IG1lc3NhZ2VMZW47IGkrKykKKwkJYnVmIFtpIC0gZGF0YU9mZnNldF0gPSBidWYgW2ldOworCQkKKwkqbGVuZ3RoID0gbWVzc2FnZUxlbiAtIGRhdGFPZmZzZXQ7CisJCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCitzdGF0aWMgaW50IHJuZGlzX3Byb2NfcmVhZCAoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIAorCQkgICAgIHZvaWQgKmRhdGEpCit7CisJY2hhciAqb3V0ID0gcGFnZTsKKwlpbnQgbGVuOworCXJuZGlzX3BhcmFtcyAqcGFyYW0gPSAocm5kaXNfcGFyYW1zICopIGRhdGE7CisJCisJb3V0ICs9IHNucHJpbnRmIChvdXQsIGNvdW50LCAKKwkJCSAiQ29uZmlnIE5yLiAlZFxuIgorCQkJICJ1c2VkICAgICAgOiAlc1xuIgorCQkJICJzdGF0ZSAgICAgOiAlc1xuIgorCQkJICJtZWRpdW0gICAgOiAweCUwOFhcbiIKKwkJCSAic3BlZWQgICAgIDogJWRcbiIKKwkJCSAiY2FibGUgICAgIDogJXNcbiIKKwkJCSAidmVuZG9yIElEIDogMHglMDhYXG4iCisJCQkgInZlbmRvciAgICA6ICVzXG4iLCAKKwkJCSBwYXJhbS0+Y29uZmlnbnIsIChwYXJhbS0+dXNlZCkgPyAieSIgOiAibiIsIAorCQkJICh7IGNoYXIgKnMgPSAiPyI7CisJCQkgc3dpdGNoIChwYXJhbS0+c3RhdGUpIHsKKwkJCSBjYXNlIFJORElTX1VOSU5JVElBTElaRUQ6CisJCQkJcyA9ICJSTkRJU19VTklOSVRJQUxJWkVEIjsgYnJlYWs7CisJCQkgY2FzZSBSTkRJU19JTklUSUFMSVpFRDoKKwkJCQlzID0gIlJORElTX0lOSVRJQUxJWkVEIjsgYnJlYWs7CisJCQkgY2FzZSBSTkRJU19EQVRBX0lOSVRJQUxJWkVEOgorCQkJCXMgPSAiUk5ESVNfREFUQV9JTklUSUFMSVpFRCI7IGJyZWFrOworCQkJfTsgczsgfSksCisJCQkgcGFyYW0tPm1lZGl1bSwgCisJCQkgKHBhcmFtLT5tZWRpYV9zdGF0ZSkgPyAwIDogcGFyYW0tPnNwZWVkKjEwMCwgCisJCQkgKHBhcmFtLT5tZWRpYV9zdGF0ZSkgPyAiZGlzY29ubmVjdGVkIiA6ICJjb25uZWN0ZWQiLAorCQkJIHBhcmFtLT52ZW5kb3JJRCwgcGFyYW0tPnZlbmRvckRlc2NyKTsgICAgICAKKwkKKwlsZW4gPSBvdXQgLSBwYWdlOworCWxlbiAtPSBvZmY7CisJCisJaWYgKGxlbiA8IGNvdW50KSB7CisJCSplb2YgPSAxOworCQlpZiAobGVuIDw9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJbGVuID0gY291bnQ7CisJCisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHJuZGlzX3Byb2Nfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCAKKwkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwlybmRpc19wYXJhbXMgKnAgPSBkYXRhOworCXUzMiBzcGVlZCA9IDA7CisJaW50IGksIGZsX3NwZWVkID0gMDsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQljaGFyIGM7CisJCWlmIChnZXRfdXNlcihjLCBidWZmZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXN3aXRjaCAoYykgeworCQljYXNlICcwJzoKKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJY2FzZSAnNCc6CisJCWNhc2UgJzUnOgorCQljYXNlICc2JzoKKwkJY2FzZSAnNyc6CisJCWNhc2UgJzgnOgorCQljYXNlICc5JzoKKwkJCWZsX3NwZWVkID0gMTsKKwkJCXNwZWVkID0gc3BlZWQqMTAgKyBjIC0gJzAnOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQljYXNlICdjJzoKKwkJCXJuZGlzX3NpZ25hbF9jb25uZWN0IChwLT5jb25maWducik7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCWNhc2UgJ2QnOgorCQkJcm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3QocC0+Y29uZmlnbnIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IAorCQkJaWYgKGZsX3NwZWVkKSBwLT5zcGVlZCA9IHNwZWVkOworCQkJZWxzZSBERUJVRyAoIiVjIGlzIG5vdCB2YWxpZFxuIiwgYyk7CisJCQlicmVhazsKKwkJfQorCQkKKwkJYnVmZmVyKys7CisJfQorCQorCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZQlOQU1FX1RFTVBMQVRFCSJkcml2ZXIvcm5kaXMtJTAzZCIKKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm5kaXNfY29ubmVjdF9zdGF0ZSBbUk5ESVNfTUFYX0NPTkZJR1NdOworCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworCitpbnQgX19pbml0IHJuZGlzX2luaXQgKHZvaWQpCit7CisJdTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBSTkRJU19NQVhfQ09ORklHUzsgaSsrKSB7CisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKwkJY2hhciBuYW1lIFsyMF07CisKKwkJc3ByaW50ZiAobmFtZSwgTkFNRV9URU1QTEFURSwgaSk7CisJCWlmICghKHJuZGlzX2Nvbm5lY3Rfc3RhdGUgW2ldCisJCQkJPSBjcmVhdGVfcHJvY19lbnRyeSAobmFtZSwgMDY2MCwgTlVMTCkpKSAKKwkJeworCQkJREVCVUcgKCIlcyA6cmVtb3ZlIGVudHJpZXMiLCBfX0ZVTkNUSU9OX18pOworCQkJd2hpbGUgKGkpIHsKKwkJCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCAtLWkpOworCQkJCXJlbW92ZV9wcm9jX2VudHJ5IChuYW1lLCBOVUxMKTsKKwkJCX0KKwkJCURFQlVHICgiXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0tPm5saW5rID0gMTsKKwkJcm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0tPndyaXRlX3Byb2MgPSBybmRpc19wcm9jX3dyaXRlOworCQlybmRpc19jb25uZWN0X3N0YXRlIFtpXS0+cmVhZF9wcm9jID0gcm5kaXNfcHJvY19yZWFkOworCQlybmRpc19jb25uZWN0X3N0YXRlIFtpXS0+ZGF0YSA9ICh2b2lkICopCisJCQkJKHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgaSk7CisjZW5kaWYKKwkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLmNvbmZpZ25yID0gaTsKKwkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnVzZWQgPSAwOworCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0uc3RhdGUgPSBSTkRJU19VTklOSVRJQUxJWkVEOworCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0ubWVkaWFfc3RhdGUKKwkJCQk9IE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVEOworCQlJTklUX0xJU1RfSEVBRCAoJihybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0ucmVzcF9xdWV1ZSkpOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKwordm9pZCBybmRpc19leGl0ICh2b2lkKQoreworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisJdTggaTsKKwljaGFyIG5hbWUgWzIwXTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgUk5ESVNfTUFYX0NPTkZJR1M7IGkrKykgeworCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCBpKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkgKG5hbWUsIE5VTEwpOworCX0KKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjUwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuaApAQCAtMCwwICsxLDM0OCBAQAorLyogCisgKiBSTkRJUwlEZWZpbml0aW9ucyBmb3IgUmVtb3RlIE5ESVMKKyAqIAorICogVmVyc2lvbjoJJElkOiBybmRpcy5oLHYgMS4xNSAyMDA0LzAzLzI1IDIxOjMzOjQ2IHJvYmVydCBFeHAgJAorICogCisgKiBBdXRob3JzOglCZW5lZGlrdCBTcHJhbmdlciwgUGVuZ3V0cm9uaXgKKyAqIAkJUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peAorICogCisgKiAJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCXZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIAorICogCisgKgkJVGhpcyBzb2Z0d2FyZSB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgaW4gY29uZm9ybWFuY2Ugd2l0aAorICoJCU1pY3Jvc29mdCdzIFJlbW90ZSBORElTIFNwZWNpZmljYXRpb24gTGljZW5zZSBBZ3JlZW1lbnQuCisgKi8KKworI2lmbmRlZiBfTElOVVhfUk5ESVNfSAorI2RlZmluZSBfTElOVVhfUk5ESVNfSAorCisjaW5jbHVkZSAibmRpcy5oIgorCisjZGVmaW5lIFJORElTX01BWElNVU1fRlJBTUVfU0laRQkxNTE4CisjZGVmaW5lIFJORElTX01BWF9UT1RBTF9TSVpFCQkxNTU4CisKKy8qIFJlbW90ZSBORElTIFZlcnNpb25zICovCisjZGVmaW5lIFJORElTX01BSk9SX1ZFUlNJT04JCTEKKyNkZWZpbmUgUk5ESVNfTUlOT1JfVkVSU0lPTgkJMAorCisvKiBTdGF0dXMgVmFsdWVzICovCisjZGVmaW5lIFJORElTX1NUQVRVU19TVUNDRVNTCQkweDAwMDAwMDAwVQkvKiBTdWNjZXNzICAgICAgICAgICAqLworI2RlZmluZSBSTkRJU19TVEFUVVNfRkFJTFVSRQkJMHhDMDAwMDAwMVUJLyogVW5zcGVjaWZpZWQgZXJyb3IgKi8KKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQkweEMwMDEwMDE1VQkvKiBJbnZhbGlkIGRhdGEgICAgICAqLworI2RlZmluZSBSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAkweEMwMDAwMEJCVQkvKiBVbnN1cHBvcnRlZCByZXF1ZXN0ICovCisjZGVmaW5lIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCTB4NDAwMTAwMEJVCS8qIERldmljZSBjb25uZWN0ZWQgICovCisjZGVmaW5lIFJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCTB4NDAwMTAwMENVCS8qIERldmljZSBkaXNjb25uZWN0ZWQgKi8KKy8qIEZvciBhbGwgbm90IHNwZWNpZmllZCBzdGF0dXMgbWVzc2FnZXM6CisgKiBSTkRJU19TVEFUVVNfWHh4IC0+IE5ESVNfU1RBVFVTX1h4eCAKKyAqLworCisvKiBNZXNzYWdlIFNldCBmb3IgQ29ubmVjdGlvbmxlc3MgKDgwMi4zKSBEZXZpY2VzICovCisjZGVmaW5lIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHCTB4MDAwMDAwMDJVCS8qIEluaXRpYWxpemUgZGV2aWNlICovCisjZGVmaW5lIFJFTU9URV9ORElTX0hBTFRfTVNHCQkweDAwMDAwMDAzVQorI2RlZmluZSBSRU1PVEVfTkRJU19RVUVSWV9NU0cJCTB4MDAwMDAwMDRVCisjZGVmaW5lIFJFTU9URV9ORElTX1NFVF9NU0cJCTB4MDAwMDAwMDVVCisjZGVmaW5lIFJFTU9URV9ORElTX1JFU0VUX01TRwkJMHgwMDAwMDAwNlUKKyNkZWZpbmUgUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRwkweDAwMDAwMDA3VQorI2RlZmluZSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHCTB4MDAwMDAwMDhVCisKKy8qIE1lc3NhZ2UgY29tcGxldGlvbiAqLworI2RlZmluZSBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUCTB4ODAwMDAwMDJVCisjZGVmaW5lIFJFTU9URV9ORElTX1FVRVJZX0NNUExUCQkweDgwMDAwMDA0VQorI2RlZmluZSBSRU1PVEVfTkRJU19TRVRfQ01QTFQJCTB4ODAwMDAwMDVVCisjZGVmaW5lIFJFTU9URV9ORElTX1JFU0VUX0NNUExUCQkweDgwMDAwMDA2VQorI2RlZmluZSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQJMHg4MDAwMDAwOFUKKworLyogRGV2aWNlIEZsYWdzICovCisjZGVmaW5lIFJORElTX0RGX0NPTk5FQ1RJT05MRVNTCQkweDAwMDAwMDAxVQorI2RlZmluZSBSTkRJU19ERl9DT05ORUNUSU9OX09SSUVOVEVECTB4MDAwMDAwMDJVCisKKyNkZWZpbmUgUk5ESVNfTUVESVVNXzgwMl8zCQkweDAwMDAwMDAwVQorCisvKiBmcm9tIGRyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlcG5taS5oICovCisjZGVmaW5lIE9JRF9QTlBfQ0FQQUJJTElUSUVTCQkJMHhGRDAxMDEwMAorI2RlZmluZSBPSURfUE5QX1NFVF9QT1dFUgkJCTB4RkQwMTAxMDEKKyNkZWZpbmUgT0lEX1BOUF9RVUVSWV9QT1dFUgkJCTB4RkQwMTAxMDIKKyNkZWZpbmUgT0lEX1BOUF9BRERfV0FLRV9VUF9QQVRURVJOCQkweEZEMDEwMTAzCisjZGVmaW5lIE9JRF9QTlBfUkVNT1ZFX1dBS0VfVVBfUEFUVEVSTgkJMHhGRDAxMDEwNAorI2RlZmluZSBPSURfUE5QX0VOQUJMRV9XQUtFX1VQCQkJMHhGRDAxMDEwNgorCisKKy8qIHN1cHBvcnRlZCBPSURzICovCitzdGF0aWMgY29uc3QgdTMyIG9pZF9zdXBwb3J0ZWRfbGlzdCBbXSA9IAoreworCS8qIHRoZSBnZW5lcmFsIHN0dWZmICovCisJT0lEX0dFTl9TVVBQT1JURURfTElTVCwKKwlPSURfR0VOX0hBUkRXQVJFX1NUQVRVUywKKwlPSURfR0VOX01FRElBX1NVUFBPUlRFRCwKKwlPSURfR0VOX01FRElBX0lOX1VTRSwKKwlPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRSwKKwlPSURfR0VOX0xJTktfU1BFRUQsCisJT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFLAorCU9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFLAorCU9JRF9HRU5fVkVORE9SX0lELAorCU9JRF9HRU5fVkVORE9SX0RFU0NSSVBUSU9OLAorCU9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OLAorCU9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLAorCU9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFLAorCU9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVMsCisJT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0sCisjaWYgMAorCU9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUiwKKyNlbmRpZgorCQorCS8qIHRoZSBzdGF0aXN0aWNhbCBzdHVmZiAqLworCU9JRF9HRU5fWE1JVF9PSywKKwlPSURfR0VOX1JDVl9PSywKKwlPSURfR0VOX1hNSVRfRVJST1IsCisJT0lEX0dFTl9SQ1ZfRVJST1IsCisJT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSLAorI2lmZGVmCVJORElTX09QVElPTkFMX1NUQVRTCisJT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlULAorCU9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQsCisJT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVCwKKwlPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCwKKwlPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlULAorCU9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlULAorCU9JRF9HRU5fRElSRUNURURfQllURVNfUkNWLAorCU9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDViwKKwlPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YsCisJT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDViwKKwlPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YsCisJT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDViwKKwlPSURfR0VOX1JDVl9DUkNfRVJST1IsCisJT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEgsCisjZW5kaWYJLyogUk5ESVNfT1BUSU9OQUxfU1RBVFMgKi8KKworICAgIAkvKiBtYW5kYXRvcnkgODAyLjMgKi8KKwkvKiB0aGUgZ2VuZXJhbCBzdHVmZiAqLworCU9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUywKKwlPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTLAorCU9JRF84MDJfM19NVUxUSUNBU1RfTElTVCwKKwlPSURfODAyXzNfTUFDX09QVElPTlMsCisJT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFLAorCQorCS8qIHRoZSBzdGF0aXN0aWNhbCBzdHVmZiAqLworCU9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5ULAorCU9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT04sCisJT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TLAorI2lmZGVmCVJORElTX09QVElPTkFMX1NUQVRTCisJT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQsCisJT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlMsCisJT0lEXzgwMl8zX1JDVl9PVkVSUlVOLAorCU9JRF84MDJfM19YTUlUX1VOREVSUlVOLAorCU9JRF84MDJfM19YTUlUX0hFQVJUQkVBVF9GQUlMVVJFLAorCU9JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NULAorCU9JRF84MDJfM19YTUlUX0xBVEVfQ09MTElTSU9OUywKKyNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLworCisjaWZkZWYJUk5ESVNfUE0KKwkvKiBQTSBhbmQgd2FrZXVwIGFyZSBtYW5kYXRvcnkgZm9yIFVTQjogKi8KKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlPSURfUE5QX0NBUEFCSUxJVElFUywKKwlPSURfUE5QX1FVRVJZX1BPV0VSLAorCU9JRF9QTlBfU0VUX1BPV0VSLAorCisJLyogd2FrZSB1cCBob3N0ICovCisJT0lEX1BOUF9FTkFCTEVfV0FLRV9VUCwKKwlPSURfUE5QX0FERF9XQUtFX1VQX1BBVFRFUk4sCisJT0lEX1BOUF9SRU1PVkVfV0FLRV9VUF9QQVRURVJOLAorI2VuZGlmCit9OworCisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX2luaXRfbXNnX3R5cGUgCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCU1ham9yVmVyc2lvbjsKKwlfX2xlMzIJTWlub3JWZXJzaW9uOworCV9fbGUzMglNYXhUcmFuc2ZlclNpemU7Cit9IHJuZGlzX2luaXRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX2luaXRfY21wbHRfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworCV9fbGUzMglTdGF0dXM7CisJX19sZTMyCU1ham9yVmVyc2lvbjsKKwlfX2xlMzIJTWlub3JWZXJzaW9uOworCV9fbGUzMglEZXZpY2VGbGFnczsKKwlfX2xlMzIJTWVkaXVtOworCV9fbGUzMglNYXhQYWNrZXRzUGVyVHJhbnNmZXI7CisJX19sZTMyCU1heFRyYW5zZmVyU2l6ZTsKKwlfX2xlMzIJUGFja2V0QWxpZ25tZW50RmFjdG9yOworCV9fbGUzMglBRkxpc3RPZmZzZXQ7CisJX19sZTMyCUFGTGlzdFNpemU7Cit9IHJuZGlzX2luaXRfY21wbHRfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfaGFsdF9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworfSBybmRpc19oYWx0X21zZ190eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19xdWVyeV9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworCV9fbGUzMglPSUQ7CisJX19sZTMyCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOworCV9fbGUzMglJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsKKwlfX2xlMzIJRGV2aWNlVmNIYW5kbGU7Cit9IHJuZGlzX3F1ZXJ5X21zZ190eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19xdWVyeV9jbXBsdF90eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7CisJX19sZTMyCUluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0OworfSBybmRpc19xdWVyeV9jbXBsdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19zZXRfbXNnX3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJT0lEOworCV9fbGUzMglJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKKwlfX2xlMzIJSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7CisJX19sZTMyCURldmljZVZjSGFuZGxlOworfSBybmRpc19zZXRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3NldF9jbXBsdF90eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCVN0YXR1czsKK30gcm5kaXNfc2V0X2NtcGx0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3Jlc2V0X21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXNlcnZlZDsKK30gcm5kaXNfcmVzZXRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3Jlc2V0X2NtcGx0X3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJQWRkcmVzc2luZ1Jlc2V0OworfSBybmRpc19yZXNldF9jbXBsdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJU3RhdHVzQnVmZmVyTGVuZ3RoOworCV9fbGUzMglTdGF0dXNCdWZmZXJPZmZzZXQ7Cit9IHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfa2VlcGFsaXZlX21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7Cit9IHJuZGlzX2tlZXBhbGl2ZV9tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJU3RhdHVzOworfSBybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZTsKKworc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJRGF0YU9mZnNldDsKKwlfX2xlMzIJRGF0YUxlbmd0aDsKKwlfX2xlMzIJT09CRGF0YU9mZnNldDsKKwlfX2xlMzIJT09CRGF0YUxlbmd0aDsKKwlfX2xlMzIJTnVtT09CRGF0YUVsZW1lbnRzOworCV9fbGUzMglQZXJQYWNrZXRJbmZvT2Zmc2V0OworCV9fbGUzMglQZXJQYWNrZXRJbmZvTGVuZ3RoOworCV9fbGUzMglWY0hhbmRsZTsKKwlfX2xlMzIJUmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3Qgcm5kaXNfY29uZmlnX3BhcmFtZXRlcgoreworCV9fbGUzMglQYXJhbWV0ZXJOYW1lT2Zmc2V0OworCV9fbGUzMglQYXJhbWV0ZXJOYW1lTGVuZ3RoOworCV9fbGUzMglQYXJhbWV0ZXJUeXBlOworCV9fbGUzMglQYXJhbWV0ZXJWYWx1ZU9mZnNldDsKKwlfX2xlMzIJUGFyYW1ldGVyVmFsdWVMZW5ndGg7Cit9OworCisvKiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyAqLworZW51bSBybmRpc19zdGF0ZQoreworCVJORElTX1VOSU5JVElBTElaRUQsCisJUk5ESVNfSU5JVElBTElaRUQsCisJUk5ESVNfREFUQV9JTklUSUFMSVpFRCwKK307CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3Jlc3BfdAoreworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1OAkJCSpidWY7CisJdTMyCQkJbGVuZ3RoOworCWludAkJCXNlbmQ7Cit9IHJuZGlzX3Jlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfcGFyYW1zCit7CisJdTgJCQljb25maWducjsKKwlpbnQJCQl1c2VkOworCWVudW0gcm5kaXNfc3RhdGUJc3RhdGU7CisJdTMyCQkJZmlsdGVyOworCXUzMgkJCW1lZGl1bTsKKwl1MzIJCQlzcGVlZDsKKwl1MzIJCQltZWRpYV9zdGF0ZTsKKwljb25zdCB1OAkJKmhvc3RfbWFjOworCXN0cnVjdCBuZXRfZGV2aWNlIAkqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwl1MzIJCQl2ZW5kb3JJRDsKKwljb25zdCBjaGFyCQkqdmVuZG9yRGVzY3I7CisJaW50IAkJCSgqYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKik7CisJc3RydWN0IGxpc3RfaGVhZAlyZXNwX3F1ZXVlOworfSBybmRpc19wYXJhbXM7CisKKy8qIFJORElTIE1lc3NhZ2UgcGFyc2VyIGFuZCBvdGhlciB1c2VsZXNzIGZ1bmN0aW9ucyAqLworaW50ICBybmRpc19tc2dfcGFyc2VyICh1OCBjb25maWdOciwgdTggKmJ1Zik7CitpbnQgIHJuZGlzX3JlZ2lzdGVyIChpbnQgKCpybmRpc19jb250cm9sX2FjaykgKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKK3ZvaWQgcm5kaXNfZGVyZWdpc3RlciAoaW50IGNvbmZpZ05yKTsKK2ludCAgcm5kaXNfc2V0X3BhcmFtX2RldiAodTggY29uZmlnTnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzKTsKK2ludCAgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgCisJCQkgICAgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpOworaW50ICBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKTsKK3ZvaWQgcm5kaXNfYWRkX2hkciAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgIHJuZGlzX3JtX2hkciAodTggKmJ1ZiwgdTMyICpsZW5ndGgpOwordTggICAqcm5kaXNfZ2V0X25leHRfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTMyICpsZW5ndGgpOwordm9pZCBybmRpc19mcmVlX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHU4ICpidWYpOworCitpbnQgIHJuZGlzX3NpZ25hbF9jb25uZWN0IChpbnQgY29uZmlnTnIpOworaW50ICBybmRpc19zaWduYWxfZGlzY29ubmVjdCAoaW50IGNvbmZpZ05yKTsKK2ludCAgcm5kaXNfc3RhdGUgKGludCBjb25maWdOcik7CitleHRlcm4gdm9pZCBybmRpc19zZXRfaG9zdF9tYWMgKGludCBjb25maWdOciwgY29uc3QgdTggKmFkZHIpOworCitpbnQgX19pbml0IHJuZGlzX2luaXQgKHZvaWQpOwordm9pZCBybmRpc19leGl0ICh2b2lkKTsKKworI2VuZGlmICAvKiBfTElOVVhfUk5ESVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjNmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTAsMCArMSwyNDM2IEBACisvKgorICogZ19zZXJpYWwuYyAtLSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwMyAoQykgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgaW4gcGFydCBvbiB0aGUgR2FkZ2V0IFplcm8gZHJpdmVyLCB3aGljaAorICogaXMgQ29weXJpZ2h0IChDKSAyMDAzIGJ5IERhdmlkIEJyb3duZWxsLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBhbHNvIGJvcnJvd3MgZnJvbSB1c2JzZXJpYWwuYywgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2RjLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCisKKworLyogV2FpdCBDb25kICovCisKKyNkZWZpbmUgX193YWl0X2NvbmRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywgcmV0KQlcCitkbyB7CQkJCQkJCQkJXAorCXdhaXRfcXVldWVfdCBfX3dhaXQ7CQkJCQkJXAorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOwkJCQlcCisJCQkJCQkJCQlcCisJYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsJCQlcCisJCWlmIChjb25kaXRpb24pCQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CQkJCVwKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwkJXAorCQkJc2NoZWR1bGUoKTsJCQkJCVwKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldCA9IC1FUkVTVEFSVFNZUzsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkJCQlcCisJcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJXAorfSB3aGlsZSAoMCkKKwkKKyNkZWZpbmUgd2FpdF9jb25kX2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbiwgbG9jaywgZmxhZ3MpCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQlcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQlcCisJCV9fd2FpdF9jb25kX2ludGVycnVwdGlibGUod3EsIGNvbmRpdGlvbiwgbG9jaywgZmxhZ3MsCVwKKwkJCQkJCV9fcmV0KTsJCQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd2FpdF9jb25kX2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywgCVwKKwkJCQkJCXRpbWVvdXQsIHJldCkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc2lnbmVkIGxvbmcgX190aW1lb3V0ID0gdGltZW91dDsJCQkJXAorCXdhaXRfcXVldWVfdCBfX3dhaXQ7CQkJCQkJXAorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOwkJCQlcCisJCQkJCQkJCQlcCisJYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsJCQlcCisJCWlmIChfX3RpbWVvdXQgPT0gMCkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsJCQkJXAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CQlcCisJCQlfX3RpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KF9fdGltZW91dCk7CVwKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsJCQlcCisJCQljb250aW51ZTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldCA9IC1FUkVTVEFSVFNZUzsJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkJCQlcCisJcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCQkJXAorfSB3aGlsZSAoMCkKKwkKKyNkZWZpbmUgd2FpdF9jb25kX2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywJXAorCQkJCQkJdGltZW91dCkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKKwkJX193YWl0X2NvbmRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIGxvY2ssCVwKKwkJCQkJCWZsYWdzLCB0aW1lb3V0LCBfX3JldCk7CVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKKworLyogRGVmaW5lcyAqLworCisjZGVmaW5lIEdTX1ZFUlNJT05fU1RSCQkJInYyLjAiCisjZGVmaW5lIEdTX1ZFUlNJT05fTlVNCQkJMHgwMjAwCisKKyNkZWZpbmUgR1NfTE9OR19OQU1FCQkJIkdhZGdldCBTZXJpYWwiCisjZGVmaW5lIEdTX1NIT1JUX05BTUUJCQkiZ19zZXJpYWwiCisKKyNkZWZpbmUgR1NfTUFKT1IJCQkxMjcKKyNkZWZpbmUgR1NfTUlOT1JfU1RBUlQJCQkwCisKKyNkZWZpbmUgR1NfTlVNX1BPUlRTCQkJMTYKKworI2RlZmluZSBHU19OVU1fQ09ORklHUwkJCTEKKyNkZWZpbmUgR1NfTk9fQ09ORklHX0lECQkJMAorI2RlZmluZSBHU19CVUxLX0NPTkZJR19JRAkJMQorI2RlZmluZSBHU19BQ01fQ09ORklHX0lECQkyCisKKyNkZWZpbmUgR1NfTUFYX05VTV9JTlRFUkZBQ0VTCQkyCisjZGVmaW5lIEdTX0JVTEtfSU5URVJGQUNFX0lECQkwCisjZGVmaW5lIEdTX0NPTlRST0xfSU5URVJGQUNFX0lECQkwCisjZGVmaW5lIEdTX0RBVEFfSU5URVJGQUNFX0lECQkxCisKKyNkZWZpbmUgR1NfTUFYX0RFU0NfTEVOCQkJMjU2CisKKyNkZWZpbmUgR1NfREVGQVVMVF9SRUFEX1FfU0laRQkJMzIKKyNkZWZpbmUgR1NfREVGQVVMVF9XUklURV9RX1NJWkUJCTMyCisKKyNkZWZpbmUgR1NfREVGQVVMVF9XUklURV9CVUZfU0laRQk4MTkyCisjZGVmaW5lIEdTX1RNUF9CVUZfU0laRQkJCTgxOTIKKworI2RlZmluZSBHU19DTE9TRV9USU1FT1VUCQkxNQorCisjZGVmaW5lIEdTX0RFRkFVTFRfVVNFX0FDTQkJMAorCisjZGVmaW5lIEdTX0RFRkFVTFRfRFRFX1JBVEUJCTk2MDAKKyNkZWZpbmUgR1NfREVGQVVMVF9EQVRBX0JJVFMJCTgKKyNkZWZpbmUgR1NfREVGQVVMVF9QQVJJVFkJCVVTQl9DRENfTk9fUEFSSVRZCisjZGVmaW5lIEdTX0RFRkFVTFRfQ0hBUl9GT1JNQVQJCVVTQl9DRENfMV9TVE9QX0JJVFMKKworLyogc2VsZWN0IGhpZ2hzcGVlZC9mdWxsc3BlZWQsIGhpZGluZyBoaWdoc3BlZWQgaWYgbm90IGNvbmZpZ3VyZWQgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKyNkZWZpbmUgR1NfU1BFRURfU0VMRUNUKGlzX2hzLGhzLGZzKSAoKGlzX2hzKSA/IChocykgOiAoZnMpKQorI2Vsc2UKKyNkZWZpbmUgR1NfU1BFRURfU0VMRUNUKGlzX2hzLGhzLGZzKSAoZnMpCisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKy8qIGRlYnVnIHNldHRpbmdzICovCisjaWZkZWYgR1NfREVCVUcKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworCisjZGVmaW5lIGdzX2RlYnVnKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyMgYXJnKTsgfSB3aGlsZSgwKQorI2RlZmluZSBnc19kZWJ1Z19sZXZlbChsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkZWJ1Zz49bGV2ZWwpIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyMgYXJnKTsgfSB3aGlsZSgwKQorCisjZWxzZQorCisjZGVmaW5lIGdzX2RlYnVnKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIGdzX2RlYnVnX2xldmVsKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgfSB3aGlsZSgwKQorCisjZW5kaWYgLyogR1NfREVCVUcgKi8KKworLyogVGhhbmtzIHRvIE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCisgKgorICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKKyAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgorICovCisjZGVmaW5lIEdTX1ZFTkRPUl9JRAkJCTB4MDUyNQkvKiBOZXRDaGlwICovCisjZGVmaW5lIEdTX1BST0RVQ1RfSUQJCQkweGE0YTYJLyogTGludXgtVVNCIFNlcmlhbCBHYWRnZXQgKi8KKyNkZWZpbmUgR1NfQ0RDX1BST0RVQ1RfSUQJCTB4YTRhNwkvKiAuLi4gYXMgQ0RDLUFDTSAqLworCisjZGVmaW5lIEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMCQk1CS8qIDEgPDwgNSA9PSAzMiBtc2VjICovCisjZGVmaW5lIEdTX05PVElGWV9NQVhQQUNLRVQJCTgKKworCisvKiBTdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBnc19kZXY7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RydWN0IGdzX2J1ZiB7CisJdW5zaWduZWQgaW50CQlidWZfc2l6ZTsKKwljaGFyCQkJKmJ1Zl9idWY7CisJY2hhcgkJCSpidWZfZ2V0OworCWNoYXIJCQkqYnVmX3B1dDsKK307CisKKy8qIGxpc3Qgb2YgcmVxdWVzdHMgKi8KK3N0cnVjdCBnc19yZXFfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQJcmVfZW50cnk7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZV9yZXE7Cit9OworCisvKiB0aGUgcG9ydCBzdHJ1Y3R1cmUgaG9sZHMgaW5mbyBmb3IgZWFjaCBwb3J0LCBvbmUgZm9yIGVhY2ggbWlub3IgbnVtYmVyICovCitzdHJ1Y3QgZ3NfcG9ydCB7CisJc3RydWN0IGdzX2RldiAJCSpwb3J0X2RldjsJLyogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0ICovCisJc3RydWN0IHR0eV9zdHJ1Y3QJKnBvcnRfdHR5OwkvKiBwb2ludGVyIHRvIHR0eSBzdHJ1Y3QgKi8KKwlzcGlubG9ja190CQlwb3J0X2xvY2s7CisJaW50IAkJCXBvcnRfbnVtOworCWludAkJCXBvcnRfb3Blbl9jb3VudDsKKwlpbnQJCQlwb3J0X2luX3VzZTsJLyogb3Blbi9jbG9zZSBpbiBwcm9ncmVzcyAqLworCXdhaXRfcXVldWVfaGVhZF90CXBvcnRfd3JpdGVfd2FpdDsvKiB3YWl0aW5nIHRvIHdyaXRlICovCisJc3RydWN0IGdzX2J1ZgkJKnBvcnRfd3JpdGVfYnVmOworCXN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nCXBvcnRfbGluZV9jb2Rpbmc7Cit9OworCisvKiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBob2xkcyBpbmZvIGZvciB0aGUgVVNCIGRldmljZSAqLworc3RydWN0IGdzX2RldiB7CisJc3RydWN0IHVzYl9nYWRnZXQJKmRldl9nYWRnZXQ7CS8qIGdhZGdldCBkZXZpY2UgcG9pbnRlciAqLworCXNwaW5sb2NrX3QJCWRldl9sb2NrOwkvKiBsb2NrIGZvciBzZXQvcmVzZXQgY29uZmlnICovCisJaW50CQkJZGV2X2NvbmZpZzsJLyogY29uZmlndXJhdGlvbiBudW1iZXIgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkqZGV2X25vdGlmeV9lcDsJLyogYWRkcmVzcyBvZiBub3RpZnkgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkqZGV2X2luX2VwOwkvKiBhZGRyZXNzIG9mIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVzYl9lcAkJKmRldl9vdXRfZXA7CS8qIGFkZHJlc3Mgb2Ygb3V0IGVuZHBvaW50ICovCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCQkvKiBkZXNjaXB0b3Igb2Ygbm90aWZ5IGVwICovCisJCQkJKmRldl9ub3RpZnlfZXBfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJCS8qIGRlc2NyaXB0b3Igb2YgaW4gZW5kcG9pbnQgKi8KKwkJCQkqZGV2X2luX2VwX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCQkvKiBkZXNjcmlwdG9yIG9mIG91dCBlbmRwb2ludCAqLworCQkJCSpkZXZfb3V0X2VwX2Rlc2M7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpkZXZfY3RybF9yZXE7CS8qIGNvbnRyb2wgcmVxdWVzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGV2X3JlcV9saXN0OwkvKiBsaXN0IG9mIHdyaXRlIHJlcXVlc3RzICovCisJaW50CQkJZGV2X3NjaGVkX3BvcnQ7CS8qIHJvdW5kIHJvYmluIHBvcnQgc2NoZWR1bGVkICovCisJc3RydWN0IGdzX3BvcnQJCSpkZXZfcG9ydFtHU19OVU1fUE9SVFNdOyAvKiB0aGUgcG9ydHMgKi8KK307CisKKworLyogRnVuY3Rpb25zICovCisKKy8qIG1vZHVsZSAqLworc3RhdGljIGludCBfX2luaXQgZ3NfbW9kdWxlX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgZ3NfbW9kdWxlX2V4aXQodm9pZCk7CisKKy8qIHR0eSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGdzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIGdzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOworc3RhdGljIHZvaWQgZ3NfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IGdzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgaW50IGdzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGdzX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKK3N0YXRpYyB2b2lkIGdzX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworc3RhdGljIHZvaWQgZ3NfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIGdzX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGdzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpOworCitzdGF0aWMgaW50IGdzX3NlbmQoc3RydWN0IGdzX2RldiAqZGV2KTsKK3N0YXRpYyBpbnQgZ3Nfc2VuZF9wYWNrZXQoc3RydWN0IGdzX2RldiAqZGV2LCBjaGFyICpwYWNrZXQsCisJdW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIGludCBnc19yZWN2X3BhY2tldChzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGNoYXIgKnBhY2tldCwKKwl1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBnc19yZWFkX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CitzdGF0aWMgdm9pZCBnc193cml0ZV9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworCisvKiBnYWRnZXQgZHJpdmVyICovCitzdGF0aWMgaW50IGdzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCk7CitzdGF0aWMgdm9pZCBnc191bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCk7CitzdGF0aWMgaW50IGdzX3NldHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCk7CitzdGF0aWMgaW50IGdzX3NldHVwX3N0YW5kYXJkKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCk7CitzdGF0aWMgaW50IGdzX3NldHVwX2NsYXNzKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCk7CitzdGF0aWMgdm9pZCBnc19zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworc3RhdGljIHZvaWQgZ3NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KTsKK3N0YXRpYyBpbnQgZ3Nfc2V0X2NvbmZpZyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIHVuc2lnbmVkIGNvbmZpZyk7CitzdGF0aWMgdm9pZCBnc19yZXNldF9jb25maWcoc3RydWN0IGdzX2RldiAqZGV2KTsKK3N0YXRpYyBpbnQgZ3NfYnVpbGRfY29uZmlnX2J1Zih1OCAqYnVmLCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQsCisJCXU4IHR5cGUsIHVuc2lnbmVkIGludCBpbmRleCwgaW50IGlzX290Zyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmdzX2FsbG9jX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgaW50IGxlbiwKKwlpbnQga21hbGxvY19mbGFncyk7CitzdGF0aWMgdm9pZCBnc19mcmVlX3JlcShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpOworCitzdGF0aWMgc3RydWN0IGdzX3JlcV9lbnRyeSAqZ3NfYWxsb2NfcmVxX2VudHJ5KHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBsZW4sCisJaW50IGttYWxsb2NfZmxhZ3MpOworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCBnc19yZXFfZW50cnkgKnJlcSk7CisKK3N0YXRpYyBpbnQgZ3NfYWxsb2NfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2LCBpbnQga21hbGxvY19mbGFncyk7CitzdGF0aWMgdm9pZCBnc19mcmVlX3BvcnRzKHN0cnVjdCBnc19kZXYgKmRldik7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RhdGljIHN0cnVjdCBnc19idWYgKmdzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGttYWxsb2NfZmxhZ3MpOworc3RhdGljIHZvaWQgZ3NfYnVmX2ZyZWUoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHZvaWQgZ3NfYnVmX2NsZWFyKHN0cnVjdCBnc19idWYgKmdiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfcHV0KHN0cnVjdCBnc19idWYgKmdiLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3NfYnVmX2dldChzdHJ1Y3QgZ3NfYnVmICpnYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CisKKy8qIGV4dGVybmFsIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBuZXQyMjgwX3NldF9maWZvX21vZGUoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IG1vZGUpOworCisKKy8qIEdsb2JhbHMgKi8KKworc3RhdGljIHN0cnVjdCBnc19kZXYgKmdzX2RldmljZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKkVQX0lOX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfT1VUX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfTk9USUZZX05BTUU7CisKK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlCWdzX29wZW5fY2xvc2Vfc2VtW0dTX05VTV9QT1JUU107CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZF9xX3NpemUgPSBHU19ERUZBVUxUX1JFQURfUV9TSVpFOworc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZV9xX3NpemUgPSBHU19ERUZBVUxUX1dSSVRFX1FfU0laRTsKKworc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZV9idWZfc2l6ZSA9IEdTX0RFRkFVTFRfV1JJVEVfQlVGX1NJWkU7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2FjbSA9IEdTX0RFRkFVTFRfVVNFX0FDTTsKKworCisvKiB0dHkgZHJpdmVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0geworCS5vcGVuID0JCQlnc19vcGVuLAorCS5jbG9zZSA9CQlnc19jbG9zZSwKKwkud3JpdGUgPQkJZ3Nfd3JpdGUsCisJLnB1dF9jaGFyID0JCWdzX3B1dF9jaGFyLAorCS5mbHVzaF9jaGFycyA9CQlnc19mbHVzaF9jaGFycywKKwkud3JpdGVfcm9vbSA9CQlnc193cml0ZV9yb29tLAorCS5pb2N0bCA9CQlnc19pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZ3Nfc2V0X3Rlcm1pb3MsCisJLnRocm90dGxlID0JCWdzX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWdzX3VudGhyb3R0bGUsCisJLmJyZWFrX2N0bCA9CQlnc19icmVhaywKKwkuY2hhcnNfaW5fYnVmZmVyID0JZ3NfY2hhcnNfaW5fYnVmZmVyLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqZ3NfdHR5X2RyaXZlcjsKKworLyogZ2FkZ2V0IGRyaXZlciBzdHJ1Y3QgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ3NfZ2FkZ2V0X2RyaXZlciA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkuc3BlZWQgPQkJVVNCX1NQRUVEX0hJR0gsCisjZWxzZQorCS5zcGVlZCA9CQlVU0JfU1BFRURfRlVMTCwKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkuZnVuY3Rpb24gPQkJR1NfTE9OR19OQU1FLAorCS5iaW5kID0JCQlnc19iaW5kLAorCS51bmJpbmQgPQkJZ3NfdW5iaW5kLAorCS5zZXR1cCA9CQlnc19zZXR1cCwKKwkuZGlzY29ubmVjdCA9CQlnc19kaXNjb25uZWN0LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0JCUdTX1NIT1JUX05BTUUsCisJCS8qIC5zaHV0ZG93biA9IC4uLiAqLworCQkvKiAuc3VzcGVuZCA9IC4uLiAgKi8KKwkJLyogLnJlc3VtZSA9IC4uLiAgICovCisJfSwKK307CisKKworLyogVVNCIGRlc2NyaXB0b3JzICovCisKKyNkZWZpbmUgR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRAkxCisjZGVmaW5lIEdTX1BST0RVQ1RfU1RSX0lECTIKKyNkZWZpbmUgR1NfU0VSSUFMX1NUUl9JRAkzCisjZGVmaW5lIEdTX0JVTEtfQ09ORklHX1NUUl9JRAk0CisjZGVmaW5lIEdTX0FDTV9DT05GSUdfU1RSX0lECTUKKyNkZWZpbmUgR1NfQ09OVFJPTF9TVFJfSUQJNgorI2RlZmluZSBHU19EQVRBX1NUUl9JRAkJNworCisvKiBzdGF0aWMgc3RyaW5ncywgaW4gVVRGLTggKi8KK3N0YXRpYyBjaGFyIG1hbnVmYWN0dXJlcls1MF07CitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgZ3Nfc3RyaW5nc1tdID0geworCXsgR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRCwgbWFudWZhY3R1cmVyIH0sCisJeyBHU19QUk9EVUNUX1NUUl9JRCwgR1NfTE9OR19OQU1FIH0sCisJeyBHU19TRVJJQUxfU1RSX0lELCAiMCIgfSwKKwl7IEdTX0JVTEtfQ09ORklHX1NUUl9JRCwgIkdhZGdldCBTZXJpYWwgQnVsayIgfSwKKwl7IEdTX0FDTV9DT05GSUdfU1RSX0lELCAiR2FkZ2V0IFNlcmlhbCBDREMgQUNNIiB9LAorCXsgR1NfQ09OVFJPTF9TVFJfSUQsICJHYWRnZXQgU2VyaWFsIENvbnRyb2wiIH0sCisJeyBHU19EQVRBX1NUUl9JRCwgIkdhZGdldCBTZXJpYWwgRGF0YSIgfSwKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBnc19zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlID0JCTB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncyA9CQlnc19zdHJpbmdzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZ3NfZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0RFVklDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAorCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1BST0RVQ1RfSUQpLAorCS5pTWFudWZhY3R1cmVyID0JR1NfTUFOVUZBQ1RVUkVSX1NUUl9JRCwKKwkuaVByb2R1Y3QgPQkJR1NfUFJPRFVDVF9TVFJfSUQsCisJLmlTZXJpYWxOdW1iZXIgPQlHU19TRVJJQUxfU1RSX0lELAorCS5iTnVtQ29uZmlndXJhdGlvbnMgPQlHU19OVU1fQ09ORklHUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIGdzX290Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZihnc19vdGdfZGVzY3JpcHRvciksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9PVEcsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGdzX2J1bGtfY29uZmlnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0NPTkZJR19TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCS8qIC53VG90YWxMZW5ndGggY29tcHV0ZWQgZHluYW1pY2FsbHkgKi8KKwkuYk51bUludGVyZmFjZXMgPQkxLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0JR1NfQlVMS19DT05GSUdfSUQsCisJLmlDb25maWd1cmF0aW9uID0JR1NfQlVMS19DT05GSUdfU1RSX0lELAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIGdzX2FjbV9jb25maWdfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfQ09ORklHX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisJLyogLndUb3RhbExlbmd0aCBjb21wdXRlZCBkeW5hbWljYWxseSAqLworCS5iTnVtSW50ZXJmYWNlcyA9CTIsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlHU19BQ01fQ09ORklHX0lELAorCS5pQ29uZmlndXJhdGlvbiA9CUdTX0FDTV9DT05GSUdfU1RSX0lELAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGdzX2J1bGtfaW50ZXJmYWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyID0JR1NfQlVMS19JTlRFUkZBQ0VfSUQsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLmlJbnRlcmZhY2UgPQkJR1NfREFUQV9TVFJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBnc19jb250cm9sX2ludGVyZmFjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkuYkludGVyZmFjZU51bWJlciA9CUdTX0NPTlRST0xfSU5URVJGQUNFX0lELAorCS5iTnVtRW5kcG9pbnRzID0JMSwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfQUNNLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfQ0RDX0FDTV9QUk9UT19BVF9WMjVURVIsCisJLmlJbnRlcmZhY2UgPQkJR1NfQ09OVFJPTF9TVFJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBnc19kYXRhX2ludGVyZmFjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkuYkludGVyZmFjZU51bWJlciA9CUdTX0RBVEFfSU5URVJGQUNFX0lELAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorCS5pSW50ZXJmYWNlID0JCUdTX0RBVEFfU1RSX0lELAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGdzX2hlYWRlcl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZihnc19oZWFkZXJfZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCisJLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPSAgCQlzaXplb2YoZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQ0FMTF9NQU5BR0VNRU5UX1RZUEUsCisJLmJtQ2FwYWJpbGl0aWVzID0gCTAsCisJLmJEYXRhSW50ZXJmYWNlID0gCTEsCS8qIGluZGV4IG9mIGRhdGEgaW50ZXJmYWNlICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfYWNtX2Rlc2NyaXB0b3IgZ3NfYWNtX2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPSAgCQlzaXplb2YoZ3NfYWNtX2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQUNNX1RZUEUsCisJLmJtQ2FwYWJpbGl0aWVzID0gCTAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBnc191bmlvbl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZihnc191bmlvbl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19VTklPTl9UWVBFLAorCS5iTWFzdGVySW50ZXJmYWNlMCA9CTAsCS8qIGluZGV4IG9mIGNvbnRyb2wgaW50ZXJmYWNlICovCisJLmJTbGF2ZUludGVyZmFjZTAgPQkxLAkvKiBpbmRleCBvZiBkYXRhIGludGVyZmFjZSAqLworfTsKKyAKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfZnVsbHNwZWVkX25vdGlmeV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLmJJbnRlcnZhbCA9CQkxIDw8IEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19mdWxsc3BlZWRfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2Z1bGxzcGVlZF9vdXRfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzX2J1bGtfZnVsbHNwZWVkX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX290Z19kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19idWxrX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3NfYWNtX2Z1bGxzcGVlZF9mdW5jdGlvbltdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19vdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfY29udHJvbF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2NhbGxfbWdtdF9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19hY21fZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX25vdGlmeV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19kYXRhX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfZnVsbHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2hpZ2hzcGVlZF9ub3RpZnlfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS5iSW50ZXJ2YWwgPQkJR1NfTE9HMl9OT1RJRllfSU5URVJWQUwrNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfaGlnaHNwZWVkX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19oaWdoc3BlZWRfb3V0X2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgZ3NfcXVhbGlmaWVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLyogYXNzdW1lcyBlcDAgdXNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgYm90aCBzcGVlZHMgLi4uICovCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CUdTX05VTV9DT05GSUdTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdzX2J1bGtfaGlnaHNwZWVkX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX290Z19kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19idWxrX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3NfYWNtX2hpZ2hzcGVlZF9mdW5jdGlvbltdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19vdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfY29udHJvbF9pbnRlcmZhY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2NhbGxfbWdtdF9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19hY21fZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX25vdGlmeV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19kYXRhX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfaGlnaHNwZWVkX291dF9kZXNjLAorCU5VTEwsCit9OworCisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKworLyogTW9kdWxlICovCitNT0RVTEVfREVTQ1JJUFRJT04oR1NfTE9OR19OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkFsIEJvcmNoZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpZmRlZiBHU19ERUJVRworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZywgMD1vZmYsIDE9b24iKTsKKyNlbmRpZgorCittb2R1bGVfcGFyYW0ocmVhZF9xX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhyZWFkX3Ffc2l6ZSwgIlJlYWQgcmVxdWVzdCBxdWV1ZSBzaXplLCBkZWZhdWx0PTMyIik7CisKK21vZHVsZV9wYXJhbSh3cml0ZV9xX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9xX3NpemUsICJXcml0ZSByZXF1ZXN0IHF1ZXVlIHNpemUsIGRlZmF1bHQ9MzIiKTsKKworbW9kdWxlX3BhcmFtKHdyaXRlX2J1Zl9zaXplLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mod3JpdGVfYnVmX3NpemUsICJXcml0ZSBidWZmZXIgc2l6ZSwgZGVmYXVsdD04MTkyIik7CisKK21vZHVsZV9wYXJhbSh1c2VfYWNtLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModXNlX2FjbSwgIlVzZSBDREMgQUNNLCAwPW5vLCAxPXllcywgZGVmYXVsdD1ubyIpOworCittb2R1bGVfaW5pdChnc19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChnc19tb2R1bGVfZXhpdCk7CisKKy8qCisqICBnc19tb2R1bGVfaW5pdAorKgorKiAgUmVnaXN0ZXIgYXMgYSBVU0IgZ2FkZ2V0IGRyaXZlciBhbmQgYSB0dHkgZHJpdmVyLgorKi8KK3N0YXRpYyBpbnQgX19pbml0IGdzX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZnc19nYWRnZXRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfbW9kdWxlX2luaXQ6IGNhbm5vdCByZWdpc3RlciBnYWRnZXQgZHJpdmVyLCByZXQ9JWRcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZ3NfdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoR1NfTlVNX1BPUlRTKTsKKwlpZiAoIWdzX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCWdzX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CisJZ3NfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSBHU19TSE9SVF9OQU1FOworCWdzX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5Z3MiOworCWdzX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL3R0eWdzLyI7CisJZ3NfdHR5X2RyaXZlci0+bWFqb3IgPSBHU19NQUpPUjsKKwlnc190dHlfZHJpdmVyLT5taW5vcl9zdGFydCA9IEdTX01JTk9SX1NUQVJUOworCWdzX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCWdzX3R0eV9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJZ3NfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJdHR5X3NldF9vcGVyYXRpb25zKGdzX3R0eV9kcml2ZXIsICZnc190dHlfb3BzKTsKKworCWZvciAoaT0wOyBpIDwgR1NfTlVNX1BPUlRTOyBpKyspCisJCXNlbWFfaW5pdCgmZ3Nfb3Blbl9jbG9zZV9zZW1baV0sIDEpOworCisJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOworCQlwdXRfdHR5X2RyaXZlcihnc190dHlfZHJpdmVyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19tb2R1bGVfaW5pdDogY2Fubm90IHJlZ2lzdGVyIHR0eSBkcml2ZXIsIHJldD0lZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJnc19tb2R1bGVfaW5pdDogJXMgJXMgbG9hZGVkXG4iLCBHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyogZ3NfbW9kdWxlX2V4aXQKKyoKKyogVW5yZWdpc3RlciBhcyBhIHR0eSBkcml2ZXIgYW5kIGEgVVNCIGdhZGdldCBkcml2ZXIuCisqLworc3RhdGljIHZvaWQgX19leGl0IGdzX21vZHVsZV9leGl0KHZvaWQpCit7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOworCXB1dF90dHlfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3NfbW9kdWxlX2V4aXQ6ICVzICVzIHVubG9hZGVkXG4iLCBHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKK30KKworLyogVFRZIERyaXZlciAqLworCisvKgorICogZ3Nfb3BlbgorICovCitzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHBvcnRfbnVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CisJc3RydWN0IGdzX2RldiAqZGV2OworCXN0cnVjdCBnc19idWYgKmJ1ZjsKKwlzdHJ1Y3Qgc2VtYXBob3JlICpzZW07CisJaW50IHJldDsKKworCXBvcnRfbnVtID0gdHR5LT5pbmRleDsKKworCWdzX2RlYnVnKCJnc19vcGVuOiAoJWQsJXAsJXApXG4iLCBwb3J0X251bSwgdHR5LCBmaWxlKTsKKworCWlmIChwb3J0X251bSA8IDAgfHwgcG9ydF9udW0gPj0gR1NfTlVNX1BPUlRTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBpbnZhbGlkIHBvcnQgbnVtYmVyXG4iLAorCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldiA9IGdzX2RldmljZTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX29wZW46ICglZCwlcCwlcCkgTlVMTCBkZXZpY2UgcG9pbnRlclxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzZW0gPSAmZ3Nfb3Blbl9jbG9zZV9zZW1bcG9ydF9udW1dOworCWlmIChkb3duX2ludGVycnVwdGlibGUoc2VtKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJImdzX29wZW46ICglZCwlcCwlcCkgaW50ZXJydXB0ZWQgd2FpdGluZyBmb3Igc2VtYXBob3JlXG4iLAorCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmRldl9jb25maWcgPT0gR1NfTk9fQ09ORklHX0lEKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX29wZW46ICglZCwlcCwlcCkgZGV2aWNlIGlzIG5vdCBjb25uZWN0ZWRcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X3VubG9ja19kZXY7CisJfQorCisJcG9ydCA9IGRldi0+ZGV2X3BvcnRbcG9ydF9udW1dOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX29wZW46ICglZCwlcCwlcCkgTlVMTCBwb3J0IHBvaW50ZXJcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X3VubG9ja19kZXY7CisJfQorCisJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBwb3J0IGRpc2Nvbm5lY3RlZCAoMSlcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0X3VubG9ja19wb3J0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwKSB7CisJCSsrcG9ydC0+cG9ydF9vcGVuX2NvdW50OworCQlnc19kZWJ1ZygiZ3Nfb3BlbjogKCVkLCVwLCVwKSBhbHJlYWR5IG9wZW5cbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0ID0gMDsKKwkJZ290byBleGl0X3VubG9ja19wb3J0OworCX0KKworCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCisJLyogbWFyayBwb3J0IGFzIGluIHVzZSwgd2UgY2FuIGRyb3AgcG9ydCBsb2NrIGFuZCBzbGVlcCBpZiBuZWNlc3NhcnkgKi8KKwlwb3J0LT5wb3J0X2luX3VzZSA9IDE7CisKKwkvKiBhbGxvY2F0ZSB3cml0ZSBidWZmZXIgb24gZmlyc3Qgb3BlbiAqLworCWlmIChwb3J0LT5wb3J0X3dyaXRlX2J1ZiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCQlidWYgPSBnc19idWZfYWxsb2Mod3JpdGVfYnVmX3NpemUsIEdGUF9LRVJORUwpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwkJLyogbWlnaHQgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCB3aGlsZSBhc2xlZXAsIGNoZWNrICovCisJCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ3Nfb3BlbjogKCVkLCVwLCVwKSBwb3J0IGRpc2Nvbm5lY3RlZCAoMilcbiIsCisJCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBleGl0X3VubG9ja19wb3J0OworCQl9CisKKwkJaWYgKChwb3J0LT5wb3J0X3dyaXRlX2J1Zj1idWYpID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBjYW5ub3QgYWxsb2NhdGUgcG9ydCB3cml0ZSBidWZmZXJcbiIsCisJCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBleGl0X3VubG9ja19wb3J0OworCQl9CisKKwl9CisKKwkvKiB3YWl0IGZvciBjYXJyaWVyIGRldGVjdCAobm90IGltcGxlbWVudGVkKSAqLworCisJLyogbWlnaHQgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCB3aGlsZSBhc2xlZXAsIGNoZWNrICovCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19vcGVuOiAoJWQsJXAsJXApIHBvcnQgZGlzY29ubmVjdGVkICgzKVxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlwb3J0LT5wb3J0X2luX3VzZSA9IDA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdF91bmxvY2tfcG9ydDsKKwl9CisKKwl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKKwlwb3J0LT5wb3J0X3R0eSA9IHR0eTsKKwlwb3J0LT5wb3J0X29wZW5fY291bnQgPSAxOworCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKworCWdzX2RlYnVnKCJnc19vcGVuOiAoJWQsJXAsJXApIGNvbXBsZXRlZFxuIiwgcG9ydF9udW0sIHR0eSwgZmlsZSk7CisKKwlyZXQgPSAwOworCitleGl0X3VubG9ja19wb3J0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCXVwKHNlbSk7CisJcmV0dXJuIHJldDsKKworZXhpdF91bmxvY2tfZGV2OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKwl1cChzZW0pOworCXJldHVybiByZXQ7CisKK30KKworLyoKKyAqIGdzX2Nsb3NlCisgKi8KK3N0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19jbG9zZTogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3NfZGVidWcoImdzX2Nsb3NlOiAoJWQsJXAsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKKworCXNlbSA9ICZnc19vcGVuX2Nsb3NlX3NlbVtwb3J0LT5wb3J0X251bV07CisJZG93bihzZW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX2Nsb3NlOiAoJWQsJXAsJXApIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAxKSB7CisJCS0tcG9ydC0+cG9ydF9vcGVuX2NvdW50OworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogZnJlZSBkaXNjb25uZWN0ZWQgcG9ydCBvbiBmaW5hbCBjbG9zZSAqLworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCWtmcmVlKHBvcnQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogbWFyayBwb3J0IGFzIGNsb3NlZCBidXQgaW4gdXNlLCB3ZSBjYW4gZHJvcCBwb3J0IGxvY2sgKi8KKwkvKiBhbmQgc2xlZXAgaWYgbmVjZXNzYXJ5ICovCisJcG9ydC0+cG9ydF9pbl91c2UgPSAxOworCXBvcnQtPnBvcnRfb3Blbl9jb3VudCA9IDA7CisKKwkvKiB3YWl0IGZvciB3cml0ZSBidWZmZXIgdG8gZHJhaW4sIG9yICovCisJLyogYXQgbW9zdCBHU19DTE9TRV9USU1FT1VUIHNlY29uZHMgKi8KKwlpZiAoZ3NfYnVmX2RhdGFfYXZhaWwocG9ydC0+cG9ydF93cml0ZV9idWYpID4gMCkgeworCQl3YWl0X2NvbmRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBvcnQtPnBvcnRfd3JpdGVfd2FpdCwKKwkJcG9ydC0+cG9ydF9kZXYgPT0gTlVMTAorCQl8fCBnc19idWZfZGF0YV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1ZikgPT0gMCwKKwkJJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MsIEdTX0NMT1NFX1RJTUVPVVQgKiBIWik7CisJfQorCisJLyogZnJlZSBkaXNjb25uZWN0ZWQgcG9ydCBvbiBmaW5hbCBjbG9zZSAqLworCS8qIChtaWdodCBoYXZlIGhhcHBlbmVkIGR1cmluZyB0aGUgYWJvdmUgc2xlZXApICovCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJa2ZyZWUocG9ydCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlnc19idWZfY2xlYXIocG9ydC0+cG9ydF93cml0ZV9idWYpOworCisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJcG9ydC0+cG9ydF90dHkgPSBOVUxMOworCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKworCWdzX2RlYnVnKCJnc19jbG9zZTogKCVkLCVwLCVwKSBjb21wbGV0ZWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUpOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCXVwKHNlbSk7Cit9CisKKy8qCisgKiBnc193cml0ZQorICovCitzdGF0aWMgaW50IGdzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwlpZiAocG9ydCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfd3JpdGU6IE5VTEwgcG9ydCBwb2ludGVyXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZ3NfZGVidWcoImdzX3dyaXRlOiAoJWQsJXApIHdyaXRpbmcgJWQgYnl0ZXNcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksCisJCWNvdW50KTsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfd3JpdGU6ICglZCwlcCkgcG9ydCBpcyBub3QgY29ubmVjdGVkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc193cml0ZTogKCVkLCVwKSBwb3J0IGlzIGNsb3NlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOworCQlyZXQgPSAtRUJBREY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwljb3VudCA9IGdzX2J1Zl9wdXQocG9ydC0+cG9ydF93cml0ZV9idWYsIGJ1ZiwgY291bnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlnc19zZW5kKGdzX2RldmljZSk7CisKKwlnc19kZWJ1ZygiZ3Nfd3JpdGU6ICglZCwlcCkgd3JvdGUgJWQgYnl0ZXNcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksCisJCWNvdW50KTsKKworCXJldHVybiBjb3VudDsKKworZXhpdDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ3NfcHV0X2NoYXIKKyAqLworc3RhdGljIHZvaWQgZ3NfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19wdXRfY2hhcjogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3NfZGVidWcoImdzX3B1dF9jaGFyOiAoJWQsJXApIGNoYXI9MHgleCwgY2FsbGVkIGZyb20gJXAsICVwLCAlcFxuIiwgcG9ydC0+cG9ydF9udW0sIHR0eSwgY2gsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDEpLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMikpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19wdXRfY2hhcjogKCVkLCVwKSBwb3J0IGlzIG5vdCBjb25uZWN0ZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5KTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3B1dF9jaGFyOiAoJWQsJXApIHBvcnQgaXMgY2xvc2VkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlnc19idWZfcHV0KHBvcnQtPnBvcnRfd3JpdGVfYnVmLCAmY2gsIDEpOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogZ3NfZmx1c2hfY2hhcnMKKyAqLworc3RhdGljIHZvaWQgZ3NfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19mbHVzaF9jaGFyczogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3NfZGVidWcoImdzX2ZsdXNoX2NoYXJzOiAoJWQsJXApXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX2ZsdXNoX2NoYXJzOiAoJWQsJXApIHBvcnQgaXMgbm90IGNvbm5lY3RlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfZmx1c2hfY2hhcnM6ICglZCwlcCkgcG9ydCBpcyBjbG9zZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5KTsKKwkJZ290byBleGl0OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJZ3Nfc2VuZChnc19kZXZpY2UpOworCisJcmV0dXJuOworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogZ3Nfd3JpdGVfcm9vbQorICovCitzdGF0aWMgaW50IGdzX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKworCWludCByb29tID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlpZiAocG9ydC0+cG9ydF9kZXYgIT0gTlVMTCAmJiBwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwCisJJiYgcG9ydC0+cG9ydF93cml0ZV9idWYgIT0gTlVMTCkKKwkJcm9vbSA9IGdzX2J1Zl9zcGFjZV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1Zik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWdzX2RlYnVnKCJnc193cml0ZV9yb29tOiAoJWQsJXApIHJvb209JWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIHJvb20pOworCisJcmV0dXJuIHJvb207Cit9CisKKy8qCisgKiBnc19jaGFyc19pbl9idWZmZXIKKyAqLworc3RhdGljIGludCBnc19jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlpZiAocG9ydC0+cG9ydF9kZXYgIT0gTlVMTCAmJiBwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwCisJJiYgcG9ydC0+cG9ydF93cml0ZV9idWYgIT0gTlVMTCkKKwkJY2hhcnMgPSBnc19idWZfZGF0YV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1Zik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWdzX2RlYnVnKCJnc19jaGFyc19pbl9idWZmZXI6ICglZCwlcCkgY2hhcnM9JWRcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGNoYXJzKTsKKworCXJldHVybiBjaGFyczsKK30KKworLyoKKyAqIGdzX3Rocm90dGxlCisgKi8KK3N0YXRpYyB2b2lkIGdzX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7Cit9CisKKy8qCisgKiBnc191bnRocm90dGxlCisgKi8KK3N0YXRpYyB2b2lkIGdzX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKK30KKworLyoKKyAqIGdzX2JyZWFrCisgKi8KK3N0YXRpYyB2b2lkIGdzX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3sKK30KKworLyoKKyAqIGdzX2lvY3RsCisgKi8KK3N0YXRpYyBpbnQgZ3NfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19pb2N0bDogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlnc19kZWJ1ZygiZ3NfaW9jdGw6ICglZCwlcCwlcCkgY21kPTB4JTQuNHgsIGFyZz0lbHVcbiIsCisJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUsIGNtZCwgYXJnKTsKKworCS8qIGhhbmRsZSBpb2N0bHMgKi8KKworCS8qIGNvdWxkIG5vdCBoYW5kbGUgaW9jdGwgKi8KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisvKgorICogZ3Nfc2V0X3Rlcm1pb3MKKyAqLworc3RhdGljIHZvaWQgZ3Nfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3sKK30KKworLyoKKyogZ3Nfc2VuZAorKgorKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGF2YWlsYWJsZSB3cml0ZSByZXF1ZXN0cywgY2FsbHMKKyogZ3Nfc2VuZF9wYWNrZXQgdG8gZmlsbCB0aGVzZSBwYWNrZXRzIHdpdGggZGF0YSwgYW5kCisqIGNvbnRpbnVlcyB1bnRpbCBlaXRoZXIgdGhlcmUgYXJlIG5vIG1vcmUgd3JpdGUgcmVxdWVzdHMKKyogYXZhaWxhYmxlIG9yIG5vIG1vcmUgZGF0YSB0byBzZW5kLiAgVGhpcyBmdW5jdGlvbiBpcworKiBydW4gd2hlbmV2ZXIgZGF0YSBhcnJpdmVzIG9yIHdyaXRlIHJlcXVlc3RzIGFyZSBhdmFpbGFibGUuCisqLworc3RhdGljIGludCBnc19zZW5kKHN0cnVjdCBnc19kZXYgKmRldikKK3sKKwlpbnQgcmV0LGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2JfZXAgKmVwOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBnc19yZXFfZW50cnkgKnJlcV9lbnRyeTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NlbmQ6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJZXAgPSBkZXYtPmRldl9pbl9lcDsKKworCXdoaWxlKCFsaXN0X2VtcHR5KCZkZXYtPmRldl9yZXFfbGlzdCkpIHsKKworCQlyZXFfZW50cnkgPSBsaXN0X2VudHJ5KGRldi0+ZGV2X3JlcV9saXN0Lm5leHQsCisJCQlzdHJ1Y3QgZ3NfcmVxX2VudHJ5LCByZV9lbnRyeSk7CisKKwkJcmVxID0gcmVxX2VudHJ5LT5yZV9yZXE7CisKKwkJbGVuID0gZ3Nfc2VuZF9wYWNrZXQoZGV2LCByZXEtPmJ1ZiwgZXAtPm1heHBhY2tldCk7CisKKwkJaWYgKGxlbiA+IDApIHsKK2dzX2RlYnVnX2xldmVsKDMsICJnc19zZW5kOiBsZW49JWQsIDB4JTIuMnggMHglMi4yeCAweCUyLjJ4IC4uLlxuIiwgbGVuLCAqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYpLCAqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYrMSksICooKHVuc2lnbmVkIGNoYXIgKilyZXEtPmJ1ZisyKSk7CisJCQlsaXN0X2RlbCgmcmVxX2VudHJ5LT5yZV9lbnRyeSk7CisJCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJCWlmICgocmV0PXVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ3Nfc2VuZDogY2Fubm90IHF1ZXVlIHJlYWQgcmVxdWVzdCwgcmV0PSVkXG4iLAorCQkJCQlyZXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogZ3Nfc2VuZF9wYWNrZXQKKyAqCisgKiBJZiB0aGVyZSBpcyBkYXRhIHRvIHNlbmQsIGEgcGFja2V0IGlzIGJ1aWx0IGluIHRoZSBnaXZlbgorICogYnVmZmVyIGFuZCB0aGUgc2l6ZSBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGlzIG5vIGRhdGEgdG8KKyAqIHNlbmQsIDAgaXMgcmV0dXJuZWQuICBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgYSBuZWdhdGl2ZQorICogZXJyb3IgbnVtYmVyIGlzIHJldHVybmVkLgorICoKKyAqIENhbGxlZCBkdXJpbmcgVVNCIGNvbXBsZXRpb24gcm91dGluZSwgb24gaW50ZXJydXB0IHRpbWUuCisgKgorICogV2UgYXNzdW1lIHRoYXQgZGlzY29ubmVjdCB3aWxsIG5vdCBoYXBwZW4gdW50aWwgYWxsIGNvbXBsZXRpb24KKyAqIHJvdXRpbmVzIGhhdmUgY29tcGxldGVkLCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIGRldl9wb3J0CisgKiBhcnJheSBkb2VzIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGdzX3NlbmRfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXN0cnVjdCBnc19wb3J0ICpwb3J0OworCisJLyogVEVNUE9SQVJZIC0tIG9ubHkgcG9ydCAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgKi8KKwlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ3Nfc2VuZF9wYWNrZXQ6IHBvcnQ9JWQsIE5VTEwgcG9ydCBwb2ludGVyXG4iLAorCQkJMCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKworCWxlbiA9IGdzX2J1Zl9kYXRhX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKwlpZiAobGVuIDwgc2l6ZSkKKwkJc2l6ZSA9IGxlbjsKKworCWlmIChzaXplID09IDApCisJCWdvdG8gZXhpdDsKKworCXNpemUgPSBnc19idWZfZ2V0KHBvcnQtPnBvcnRfd3JpdGVfYnVmLCBwYWNrZXQsIHNpemUpOworCisJaWYgKHBvcnQtPnBvcnRfdHR5KQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnRfdHR5LT53cml0ZV93YWl0KTsKKworZXhpdDoKKwlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIGdzX3JlY3ZfcGFja2V0CisgKgorICogQ2FsbGVkIGZvciBlYWNoIFVTQiBwYWNrZXQgcmVjZWl2ZWQuICBSZWFkcyB0aGUgcGFja2V0CisgKiBoZWFkZXIgYW5kIHN0dWZmcyB0aGUgZGF0YSBpbiB0aGUgYXBwcm9wcmlhdGUgdHR5IGJ1ZmZlci4KKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIFVTQiBjb21wbGV0aW9uIHJvdXRpbmUsIG9uIGludGVycnVwdCB0aW1lLgorICoKKyAqIFdlIGFzc3VtZSB0aGF0IGRpc2Nvbm5lY3Qgd2lsbCBub3QgaGFwcGVuIHVudGlsIGFsbCBjb21wbGV0aW9uCisgKiByb3V0aW5lcyBoYXZlIGNvbXBsZXRlZCwgc28gd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBkZXZfcG9ydAorICogYXJyYXkgZG9lcyBub3QgY2hhbmdlIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBnc19yZWN2X3BhY2tldChzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGNoYXIgKnBhY2tldCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKKwlpbnQgcmV0OworCisJLyogVEVNUE9SQVJZIC0tIG9ubHkgcG9ydCAwIGlzIHN1cHBvcnRlZCByaWdodCBub3cgKi8KKwlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19yZWN2X3BhY2tldDogcG9ydD0lZCwgTlVMTCBwb3J0IHBvaW50ZXJcbiIsCisJCQlwb3J0LT5wb3J0X251bSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3JlY3ZfcGFja2V0OiBwb3J0PSVkLCBwb3J0IGlzIGNsb3NlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X3R0eSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcmVjdl9wYWNrZXQ6IHBvcnQ9JWQsIE5VTEwgdHR5IHBvaW50ZXJcbiIsCisJCQlwb3J0LT5wb3J0X251bSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydC0+cG9ydF90dHktPm1hZ2ljICE9IFRUWV9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3JlY3ZfcGFja2V0OiBwb3J0PSVkLCBiYWQgdHR5IG1hZ2ljXG4iLAorCQkJcG9ydC0+cG9ydF9udW0pOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJbGVuID0gKHVuc2lnbmVkIGludCkoVFRZX0ZMSVBCVUZfU0laRSAtIHBvcnQtPnBvcnRfdHR5LT5mbGlwLmNvdW50KTsKKwlpZiAobGVuIDwgc2l6ZSkKKwkJc2l6ZSA9IGxlbjsKKworCWlmIChzaXplID4gMCkgeworCQltZW1jcHkocG9ydC0+cG9ydF90dHktPmZsaXAuY2hhcl9idWZfcHRyLCBwYWNrZXQsIHNpemUpOworCQlwb3J0LT5wb3J0X3R0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gc2l6ZTsKKwkJcG9ydC0+cG9ydF90dHktPmZsaXAuY291bnQgKz0gc2l6ZTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+cG9ydF90dHkpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnRfdHR5LT5yZWFkX3dhaXQpOworCX0KKworCXJldCA9IDA7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyogZ3NfcmVhZF9jb21wbGV0ZQorKi8KK3N0YXRpYyB2b2lkIGdzX3JlYWRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcmVhZF9jb21wbGV0ZTogTlVMTCBkZXZpY2UgcG9pbnRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2gocmVxLT5zdGF0dXMpIHsKKwljYXNlIDA6CisgCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLworCQlnc19yZWN2X3BhY2tldChkZXYsIHJlcS0+YnVmLCByZXEtPmFjdHVhbCk7CityZXF1ZXVlOgorCQlyZXEtPmxlbmd0aCA9IGVwLT5tYXhwYWNrZXQ7CisJCWlmICgocmV0PXVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJImdzX3JlYWRfY29tcGxldGU6IGNhbm5vdCBxdWV1ZSByZWFkIHJlcXVlc3QsIHJldD0lZFxuIiwKKwkJCQlyZXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiBkaXNjb25uZWN0ICovCisJCWdzX2RlYnVnKCJnc19yZWFkX2NvbXBsZXRlOiBzaHV0ZG93blxuIik7CisJCWdzX2ZyZWVfcmVxKGVwLCByZXEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIHVuZXhwZWN0ZWQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSCisJCSJnc19yZWFkX2NvbXBsZXRlOiB1bmV4cGVjdGVkIHN0YXR1cyBlcnJvciwgc3RhdHVzPSVkXG4iLAorCQkJcmVxLT5zdGF0dXMpOworCQlnb3RvIHJlcXVldWU7CisJCWJyZWFrOworCX0KK30KKworLyoKKyogZ3Nfd3JpdGVfY29tcGxldGUKKyovCitzdGF0aWMgdm9pZCBnc193cml0ZV9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBnc19yZXFfZW50cnkgKmdzX3JlcSA9IHJlcS0+Y29udGV4dDsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3dyaXRlX2NvbXBsZXRlOiBOVUxMIGRldmljZSBwb2ludGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaChyZXEtPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KK3JlcXVldWU6CisJCWlmIChnc19yZXEgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImdzX3dyaXRlX2NvbXBsZXRlOiBOVUxMIHJlcXVlc3QgcG9pbnRlclxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlzcGluX2xvY2soJmRldi0+ZGV2X2xvY2spOworCQlsaXN0X2FkZCgmZ3NfcmVxLT5yZV9lbnRyeSwgJmRldi0+ZGV2X3JlcV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmRldi0+ZGV2X2xvY2spOworCisJCWdzX3NlbmQoZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogZGlzY29ubmVjdCAqLworCQlnc19kZWJ1ZygiZ3Nfd3JpdGVfY29tcGxldGU6IHNodXRkb3duXG4iKTsKKwkJZ3NfZnJlZV9yZXEoZXAsIHJlcSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSJnc193cml0ZV9jb21wbGV0ZTogdW5leHBlY3RlZCBzdGF0dXMgZXJyb3IsIHN0YXR1cz0lZFxuIiwKKwkJCXJlcS0+c3RhdHVzKTsKKwkJZ290byByZXF1ZXVlOworCQlicmVhazsKKwl9Cit9CisKKy8qIEdhZGdldCBEcml2ZXIgKi8KKworLyoKKyAqIGdzX2JpbmQKKyAqCisgKiBDYWxsZWQgb24gbW9kdWxlIGxvYWQuICBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBkZXZpY2UKKyAqIHN0cnVjdHVyZSBhbmQgYSBjb250cm9sIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQgZ3NfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWludCByZXQ7CisJc3RydWN0IHVzYl9lcCAqZXA7CisJc3RydWN0IGdzX2RldiAqZGV2OworCisJLyogZGV2aWNlIHNwZWNpZmljICovCisJaWYgKGdhZGdldF9pc19uZXQyMjgwKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDAxKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDIpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDAzKTsKKwkJLyogc2ggZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgb3IgY29uZmlncyAqLworCQl1c2VfYWNtID0gMDsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDQpOworCQkvKiBzYTExMDAgZG9lc24ndCBzdXBwb3J0IG5lY2Vzc2FyeSBlbmRwb2ludHMgKi8KKwkJdXNlX2FjbSA9IDA7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfZ29rdShnYWRnZXQpKSB7CisJCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNfDB4MDAwNSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA2KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19vbWFwKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA3KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19saDdhNDB4KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA4KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19uOTYwNChnYWRnZXQpKSB7CisJCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNfDB4MDAwOSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfcHhhMjd4KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDExKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zM2MyNDEwKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDEyKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19hdDkxKGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDEzKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJnc19iaW5kOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCisJCQlnYWRnZXQtPm5hbWUpOworCQkvKiB1bnJlY29nbml6ZWQsIGJ1dCBzYWZlIHVubGVzcyBidWxrIGlzIFJFQUxMWSBxdWlya3kgKi8KKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDk5KTsKKwl9CisKKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChnYWRnZXQpOworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZnc19mdWxsc3BlZWRfaW5fZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX0lOX05BTUUgPSBlcC0+bmFtZTsKKwllcC0+ZHJpdmVyX2RhdGEgPSBlcDsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmdzX2Z1bGxzcGVlZF9vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX09VVF9OQU1FID0gZXAtPm5hbWU7CisJZXAtPmRyaXZlcl9kYXRhID0gZXA7CS8qIGNsYWltIHRoZSBlbmRwb2ludCAqLworCisJaWYgKHVzZV9hY20pIHsKKwkJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MpOworCQlpZiAoIWVwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdzX2JpbmQ6IGNhbm5vdCBydW4gQUNNIG9uICVzXG4iLCBnYWRnZXQtPm5hbWUpOworCQkJZ290byBhdXRvY29uZl9mYWlsOworCQl9CisJCWdzX2RldmljZV9kZXNjLmlkUHJvZHVjdCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCQkJCQlHU19DRENfUFJPRFVDVF9JRCksCisJCUVQX05PVElGWV9OQU1FID0gZXAtPm5hbWU7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSB0aGUgZW5kcG9pbnQgKi8KKwl9CisKKwlnc19kZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSB1c2VfYWNtCisJCT8gVVNCX0NMQVNTX0NPTU0gOiBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7CisJZ3NfZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWdzX3F1YWxpZmllcl9kZXNjLmJEZXZpY2VDbGFzcyA9IHVzZV9hY20KKwkJPyBVU0JfQ0xBU1NfQ09NTSA6IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKwkvKiBhc3N1bWUgZXAwIHVzZXMgdGhlIHNhbWUgcGFja2V0IHNpemUgZm9yIGJvdGggc3BlZWRzICovCisJZ3NfcXVhbGlmaWVyX2Rlc2MuYk1heFBhY2tldFNpemUwID0gZ3NfZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwOworCS8qIGFzc3VtZSBlbmRwb2ludHMgYXJlIGR1YWwtc3BlZWQgKi8KKwlnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCWdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWdzX2hpZ2hzcGVlZF9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQlnc19mdWxsc3BlZWRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWdzX2hpZ2hzcGVlZF9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJZ3NfZnVsbHNwZWVkX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKKwl1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZChnYWRnZXQpOworCisJaWYgKGdhZGdldC0+aXNfb3RnKSB7CisJCWdzX290Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKKwkJZ3NfYnVsa19jb25maWdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCQlnc19hY21fY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlnc19kZXZpY2UgPSBkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlciksICIlcyAlcyB3aXRoICVzIiwKKwkJc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwgc3lzdGVtX3V0c25hbWUucmVsZWFzZSwKKwkJZ2FkZ2V0LT5uYW1lKTsKKworCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZ3NfZGV2KSk7CisJZGV2LT5kZXZfZ2FkZ2V0ID0gZ2FkZ2V0OworCXNwaW5fbG9ja19pbml0KCZkZXYtPmRldl9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5kZXZfcmVxX2xpc3QpOworCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIGRldik7CisKKwlpZiAoKHJldD1nc19hbGxvY19wb3J0cyhkZXYsIEdGUF9LRVJORUwpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfYmluZDogY2Fubm90IGFsbG9jYXRlIHBvcnRzXG4iKTsKKwkJZ3NfdW5iaW5kKGdhZGdldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcHJlYWxsb2NhdGUgY29udHJvbCByZXNwb25zZSBhbmQgYnVmZmVyICovCisJZGV2LT5kZXZfY3RybF9yZXEgPSBnc19hbGxvY19yZXEoZ2FkZ2V0LT5lcDAsIEdTX01BWF9ERVNDX0xFTiwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKGRldi0+ZGV2X2N0cmxfcmVxID09IE5VTEwpIHsKKwkJZ3NfdW5iaW5kKGdhZGdldCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZXYtPmRldl9jdHJsX3JlcS0+Y29tcGxldGUgPSBnc19zZXR1cF9jb21wbGV0ZTsKKworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGRldjsKKworCXByaW50ayhLRVJOX0lORk8gImdzX2JpbmQ6ICVzICVzIGJvdW5kXG4iLAorCQlHU19MT05HX05BTUUsIEdTX1ZFUlNJT05fU1RSKTsKKworCXJldHVybiAwOworCithdXRvY29uZl9mYWlsOgorCXByaW50ayhLRVJOX0VSUiAiZ3NfYmluZDogY2Fubm90IGF1dG9jb25maWd1cmUgb24gJXNcbiIsIGdhZGdldC0+bmFtZSk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisgKiBnc191bmJpbmQKKyAqCisgKiBDYWxsZWQgb24gbW9kdWxlIHVubG9hZC4gIEZyZWVzIHRoZSBjb250cm9sIHJlcXVlc3QgYW5kIGRldmljZQorICogc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBnc191bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKworCWdzX2RldmljZSA9IE5VTEw7CisKKwkvKiByZWFkL3dyaXRlIHJlcXVlc3RzIGFscmVhZHkgZnJlZWQsIG9ubHkgY29udHJvbCByZXF1ZXN0IHJlbWFpbnMgKi8KKwlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJaWYgKGRldi0+ZGV2X2N0cmxfcmVxICE9IE5VTEwpIHsKKwkJCWdzX2ZyZWVfcmVxKGdhZGdldC0+ZXAwLCBkZXYtPmRldl9jdHJsX3JlcSk7CisJCQlkZXYtPmRldl9jdHJsX3JlcSA9IE5VTEw7CisJCX0KKwkJZ3NfZnJlZV9wb3J0cyhkZXYpOworCQlrZnJlZShkZXYpOworCQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJnc191bmJpbmQ6ICVzICVzIHVuYm91bmRcbiIsIEdTX0xPTkdfTkFNRSwKKwkJR1NfVkVSU0lPTl9TVFIpOworfQorCisvKgorICogZ3Nfc2V0dXAKKyAqCisgKiBJbXBsZW1lbnRzIGFsbCB0aGUgY29udHJvbCBlbmRwb2ludCBmdW5jdGlvbmFsaXR5IHRoYXQncyBub3QKKyAqIGhhbmRsZWQgaW4gaGFyZHdhcmUgb3IgdGhlIGhhcmR3YXJlIGRyaXZlci4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhIHNlbnQgdG8gdGhlIGhvc3QsIG9yIGEgbmVnYXRpdmUKKyAqIGVycm9yIG51bWJlci4KKyAqLworc3RhdGljIGludCBnc19zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCBnc19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZGV2LT5kZXZfY3RybF9yZXE7CisJdTE2IHdJbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYgd1ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNiB3TGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgeworCWNhc2UgVVNCX1RZUEVfU1RBTkRBUkQ6CisJCXJldCA9IGdzX3NldHVwX3N0YW5kYXJkKGdhZGdldCxjdHJsKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9UWVBFX0NMQVNTOgorCQlyZXQgPSBnc19zZXR1cF9jbGFzcyhnYWRnZXQsY3RybCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXR1cDogdW5rbm93biByZXF1ZXN0LCB0eXBlPSUwMngsIHJlcXVlc3Q9JTAyeCwgdmFsdWU9JTA0eCwgaW5kZXg9JTA0eCwgbGVuZ3RoPSVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsKKwkJYnJlYWs7CisJfQorCisJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KKwlpZiAocmV0ID49IDApIHsKKwkJcmVxLT5sZW5ndGggPSByZXQ7CisJCXJlcS0+emVybyA9IHJldCA8IHdMZW5ndGgKKwkJCQkmJiAocmV0ICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMDsKKwkJcmV0ID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXR1cDogY2Fubm90IHF1ZXVlIHJlc3BvbnNlLCByZXQ9JWRcbiIsCisJCQkJcmV0KTsKKwkJCXJlcS0+c3RhdHVzID0gMDsKKwkJCWdzX3NldHVwX2NvbXBsZXRlKGdhZGdldC0+ZXAwLCByZXEpOworCQl9CisJfQorCisJLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHJldCA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3Nfc2V0dXBfc3RhbmRhcmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+ZGV2X2N0cmxfcmVxOworCXUxNiB3SW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2IHdWYWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYgd0xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlicmVhazsKKworCQlzd2l0Y2ggKHdWYWx1ZSA+PiA4KSB7CisJCWNhc2UgVVNCX0RUX0RFVklDRToKKwkJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJCSh1MTYpc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmdzX2RldmljZV9kZXNjLCByZXQpOworCQkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQlyZXQgPSBtaW4od0xlbmd0aCwKKwkJCQkodTE2KXNpemVvZihzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSk7CisJCQltZW1jcHkocmVxLT5idWYsICZnc19xdWFsaWZpZXJfZGVzYywgcmV0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJcmV0ID0gZ3NfYnVpbGRfY29uZmlnX2J1ZihyZXEtPmJ1ZiwgZ2FkZ2V0LT5zcGVlZCwKKwkJCQl3VmFsdWUgPj4gOCwgd1ZhbHVlICYgMHhmZiwKKwkJCQlnYWRnZXQtPmlzX290Zyk7CisJCQlpZiAocmV0ID49IDApCisJCQkJcmV0ID0gbWluKHdMZW5ndGgsICh1MTYpcmV0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX1NUUklORzoKKwkJCS8qIHdJbmRleCA9PSBsYW5ndWFnZSBjb2RlLiAqLworCQkJcmV0ID0gdXNiX2dhZGdldF9nZXRfc3RyaW5nKCZnc19zdHJpbmdfdGFibGUsCisJCQkJd1ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOworCQkJaWYgKHJldCA+PSAwKQorCQkJCXJldCA9IG1pbih3TGVuZ3RoLCAodTE2KXJldCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAwKQorCQkJYnJlYWs7CisJCXNwaW5fbG9jaygmZGV2LT5kZXZfbG9jayk7CisJCXJldCA9IGdzX3NldF9jb25maWcoZGV2LCB3VmFsdWUpOworCQlzcGluX3VubG9jaygmZGV2LT5kZXZfbG9jayk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlicmVhazsKKwkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5kZXZfY29uZmlnOworCQlyZXQgPSBtaW4od0xlbmd0aCwgKHUxNikxKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfU0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfUkVDSVBfSU5URVJGQUNFCisJCQkJfHwgIWRldi0+ZGV2X2NvbmZpZworCQkJCXx8IHdJbmRleCA+PSBHU19NQVhfTlVNX0lOVEVSRkFDRVMpCisJCQlicmVhazsKKwkJaWYgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19CVUxLX0NPTkZJR19JRAorCQkJCSYmIHdJbmRleCAhPSBHU19CVUxLX0lOVEVSRkFDRV9JRCkKKwkJCWJyZWFrOworCQkvKiBubyBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmdzICovCisJCWlmICh3VmFsdWUgIT0gMCkKKwkJCWJyZWFrOworCQlzcGluX2xvY2soJmRldi0+ZGV2X2xvY2spOworCQkvKiBQWEEgaGFyZHdhcmUgcGFydGlhbGx5IGhhbmRsZXMgU0VUX0lOVEVSRkFDRTsKKwkJICogd2UgbmVlZCB0byBrbHVnZSBhcm91bmQgdGhhdCBpbnRlcmZlcmVuY2UuICAqLworCQlpZiAoZ2FkZ2V0X2lzX3B4YShnYWRnZXQpKSB7CisJCQlyZXQgPSBnc19zZXRfY29uZmlnKGRldiwgdXNlX2FjbSA/CisJCQkJR1NfQUNNX0NPTkZJR19JRCA6IEdTX0JVTEtfQ09ORklHX0lEKTsKKwkJCWdvdG8gc2V0X2ludGVyZmFjZV9kb25lOworCQl9CisJCWlmIChkZXYtPmRldl9jb25maWcgIT0gR1NfQlVMS19DT05GSUdfSUQKKwkJCQkmJiB3SW5kZXggPT0gR1NfQ09OVFJPTF9JTlRFUkZBQ0VfSUQpIHsKKwkJCWlmIChkZXYtPmRldl9ub3RpZnlfZXApIHsKKwkJCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9ub3RpZnlfZXApOworCQkJCXVzYl9lcF9lbmFibGUoZGV2LT5kZXZfbm90aWZ5X2VwLCBkZXYtPmRldl9ub3RpZnlfZXBfZGVzYyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9pbl9lcCk7CisJCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9vdXRfZXApOworCQkJdXNiX2VwX2VuYWJsZShkZXYtPmRldl9pbl9lcCwgZGV2LT5kZXZfaW5fZXBfZGVzYyk7CisJCQl1c2JfZXBfZW5hYmxlKGRldi0+ZGV2X291dF9lcCwgZGV2LT5kZXZfb3V0X2VwX2Rlc2MpOworCQl9CisJCXJldCA9IDA7CitzZXRfaW50ZXJmYWNlX2RvbmU6CisJCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKQorCQl8fCBkZXYtPmRldl9jb25maWcgPT0gR1NfTk9fQ09ORklHX0lEKQorCQkJYnJlYWs7CisJCWlmICh3SW5kZXggPj0gR1NfTUFYX05VTV9JTlRFUkZBQ0VTCisJCQkJfHwgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19CVUxLX0NPTkZJR19JRAorCQkJCSYmIHdJbmRleCAhPSBHU19CVUxLX0lOVEVSRkFDRV9JRCkpIHsKKwkJCXJldCA9IC1FRE9NOworCQkJYnJlYWs7CisJCX0KKwkJLyogbm8gYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5ncyAqLworCQkqKHU4ICopcmVxLT5idWYgPSAwOworCQlyZXQgPSBtaW4od0xlbmd0aCwgKHUxNikxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwOiB1bmtub3duIHN0YW5kYXJkIHJlcXVlc3QsIHR5cGU9JTAyeCwgcmVxdWVzdD0lMDJ4LCB2YWx1ZT0lMDR4LCBpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdzX3NldHVwX2NsYXNzKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSBkZXYtPmRldl9wb3J0WzBdOwkvKiBBQ00gb25seSBoYXMgb25lIHBvcnQgKi8KKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+ZGV2X2N0cmxfcmVxOworCXUxNiB3SW5kZXggPSBjdHJsLT53SW5kZXg7CisJdTE2IHdWYWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYgd0xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfQ0RDX1JFUV9TRVRfTElORV9DT0RJTkc6CisJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJKHUxNilzaXplb2Yoc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcpKTsKKwkJaWYgKHBvcnQpIHsKKwkJCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJCW1lbWNweSgmcG9ydC0+cG9ydF9saW5lX2NvZGluZywgcmVxLT5idWYsIHJldCk7CisJCQlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX0NEQ19SRVFfR0VUX0xJTkVfQ09ESU5HOgorCQlwb3J0ID0gZGV2LT5kZXZfcG9ydFswXTsJLyogQUNNIG9ubHkgaGFzIG9uZSBwb3J0ICovCisJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJKHUxNilzaXplb2Yoc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcpKTsKKwkJaWYgKHBvcnQpIHsKKwkJCXNwaW5fbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJnBvcnQtPnBvcnRfbGluZV9jb2RpbmcsIHJldCk7CisJCQlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURToKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwOiB1bmtub3duIGNsYXNzIHJlcXVlc3QsIHR5cGU9JTAyeCwgcmVxdWVzdD0lMDJ4LCB2YWx1ZT0lMDR4LCBpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ3Nfc2V0dXBfY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQgZ3Nfc2V0dXBfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwX2NvbXBsZXRlOiBzdGF0dXMgZXJyb3IsIHN0YXR1cz0lZCwgYWN0dWFsPSVkLCBsZW5ndGg9JWRcbiIsCisJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwl9Cit9CisKKy8qCisgKiBnc19kaXNjb25uZWN0CisgKgorICogQ2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyBkaXNjb25uZWN0ZWQuICBGcmVlcyB0aGUgY2xvc2VkCisgKiBwb3J0cyBhbmQgZGlzY29ubmVjdHMgb3BlbiBwb3J0cy4gIE9wZW4gcG9ydHMgd2lsbCBiZSBmcmVlZAorICogb24gY2xvc2UuICBUaGVuIHJlYWxsb2NhdGVzIHRoZSBwb3J0cyBmb3IgdGhlIG5leHQgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJZ3NfcmVzZXRfY29uZmlnKGRldik7CisKKwkvKiBmcmVlIGNsb3NlZCBwb3J0cyBhbmQgZGlzY29ubmVjdCBvcGVuIHBvcnRzICovCisJLyogKG9wZW4gcG9ydHMgd2lsbCBiZSBmcmVlZCB3aGVuIGNsb3NlZCkgKi8KKwlnc19mcmVlX3BvcnRzKGRldik7CisKKwkvKiByZS1hbGxvY2F0ZSBwb3J0cyBmb3IgdGhlIG5leHQgY29ubmVjdGlvbiAqLworCWlmIChnc19hbGxvY19wb3J0cyhkZXYsIEdGUF9BVE9NSUMpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiZ3NfZGlzY29ubmVjdDogY2Fubm90IHJlLWFsbG9jYXRlIHBvcnRzXG4iKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCXByaW50ayhLRVJOX0lORk8gImdzX2Rpc2Nvbm5lY3Q6ICVzIGRpc2Nvbm5lY3RlZFxuIiwgR1NfTE9OR19OQU1FKTsKK30KKworLyoKKyAqIGdzX3NldF9jb25maWcKKyAqCisgKiBDb25maWd1cmVzIHRoZSBkZXZpY2UgYnkgZW5hYmxpbmcgZGV2aWNlIHNwZWNpZmljCisgKiBvcHRpbWl6YXRpb25zLCBzZXR0aW5nIHVwIHRoZSBlbmRwb2ludHMsIGFsbG9jYXRpbmcKKyAqIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzIGFuZCBxdWV1aW5nIHJlYWQgcmVxdWVzdHMuCisgKgorICogVGhlIGRldmljZSBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBnc19zZXRfY29uZmlnKHN0cnVjdCBnc19kZXYgKmRldiwgdW5zaWduZWQgY29uZmlnKQoreworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBkZXYtPmRldl9nYWRnZXQ7CisJc3RydWN0IHVzYl9lcCAqZXA7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9kZXNjOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBnc19yZXFfZW50cnkgKnJlcV9lbnRyeTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY29uZmlnID09IGRldi0+ZGV2X2NvbmZpZykKKwkJcmV0dXJuIDA7CisKKwlnc19yZXNldF9jb25maWcoZGV2KTsKKworCXN3aXRjaCAoY29uZmlnKSB7CisJY2FzZSBHU19OT19DT05GSUdfSUQ6CisJCXJldHVybiAwOworCWNhc2UgR1NfQlVMS19DT05GSUdfSUQ6CisJCWlmICh1c2VfYWNtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGRldmljZSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zICovCisJCWlmIChnYWRnZXRfaXNfbmV0MjI4MChnYWRnZXQpKQorCQkJbmV0MjI4MF9zZXRfZmlmb19tb2RlKGdhZGdldCwgMSk7CisJCWJyZWFrOworCWNhc2UgR1NfQUNNX0NPTkZJR19JRDoKKwkJaWYgKCF1c2VfYWNtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGRldmljZSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zICovCisJCWlmIChnYWRnZXRfaXNfbmV0MjI4MChnYWRnZXQpKQorCQkJbmV0MjI4MF9zZXRfZmlmb19tb2RlKGdhZGdldCwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+ZGV2X2NvbmZpZyA9IGNvbmZpZzsKKworCWdhZGdldF9mb3JfZWFjaF9lcChlcCwgZ2FkZ2V0KSB7CisKKwkJaWYgKEVQX05PVElGWV9OQU1FCisJCSYmIHN0cmNtcChlcC0+bmFtZSwgRVBfTk9USUZZX05BTUUpID09IDApIHsKKwkJCWVwX2Rlc2MgPSBHU19TUEVFRF9TRUxFQ1QoCisJCQkJZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCwKKwkJCQkmZ3NfaGlnaHNwZWVkX25vdGlmeV9kZXNjLAorCQkJCSZnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MpOworCQkJcmV0ID0gdXNiX2VwX2VuYWJsZShlcCxlcF9kZXNjKTsKKwkJCWlmIChyZXQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPmRldl9ub3RpZnlfZXAgPSBlcDsKKwkJCQlkZXYtPmRldl9ub3RpZnlfZXBfZGVzYyA9IGVwX2Rlc2M7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGVuYWJsZSBub3RpZnkgZW5kcG9pbnQgJXMsIHJldD0lZFxuIiwKKwkJCQkJZXAtPm5hbWUsIHJldCk7CisJCQkJZ290byBleGl0X3Jlc2V0X2NvbmZpZzsKKwkJCX0KKwkJfQorCisJCWVsc2UgaWYgKHN0cmNtcChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgeworCQkJZXBfZGVzYyA9IEdTX1NQRUVEX1NFTEVDVCgKKwkJCQlnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdILAorIAkJCQkmZ3NfaGlnaHNwZWVkX2luX2Rlc2MsCisJCQkJJmdzX2Z1bGxzcGVlZF9pbl9kZXNjKTsKKwkJCXJldCA9IHVzYl9lcF9lbmFibGUoZXAsZXBfZGVzYyk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJZGV2LT5kZXZfaW5fZXAgPSBlcDsKKwkJCQlkZXYtPmRldl9pbl9lcF9kZXNjID0gZXBfZGVzYzsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgZW5hYmxlIGluIGVuZHBvaW50ICVzLCByZXQ9JWRcbiIsCisJCQkJCWVwLT5uYW1lLCByZXQpOworCQkJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJCQl9CisJCX0KKworCQllbHNlIGlmIChzdHJjbXAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7CisJCQllcF9kZXNjID0gR1NfU1BFRURfU0VMRUNUKAorCQkJCWdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gsCisJCQkJJmdzX2hpZ2hzcGVlZF9vdXRfZGVzYywKKwkJCQkmZ3NfZnVsbHNwZWVkX291dF9kZXNjKTsKKwkJCXJldCA9IHVzYl9lcF9lbmFibGUoZXAsZXBfZGVzYyk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJZGV2LT5kZXZfb3V0X2VwID0gZXA7CisJCQkJZGV2LT5kZXZfb3V0X2VwX2Rlc2MgPSBlcF9kZXNjOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBlbmFibGUgb3V0IGVuZHBvaW50ICVzLCByZXQ9JWRcbiIsCisJCQkJCWVwLT5uYW1lLCByZXQpOworCQkJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJCQl9CisJCX0KKworCX0KKworCWlmIChkZXYtPmRldl9pbl9lcCA9PSBOVUxMIHx8IGRldi0+ZGV2X291dF9lcCA9PSBOVUxMCisJfHwgKGNvbmZpZyAhPSBHU19CVUxLX0NPTkZJR19JRCAmJiBkZXYtPmRldl9ub3RpZnlfZXAgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgZmluZCBlbmRwb2ludHNcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBxdWV1ZSByZWFkIHJlcXVlc3RzICovCisJZXAgPSBkZXYtPmRldl9vdXRfZXA7CisJZm9yIChpPTA7IGk8cmVhZF9xX3NpemUgJiYgcmV0ID09IDA7IGkrKykgeworCQlpZiAoKHJlcT1nc19hbGxvY19yZXEoZXAsIGVwLT5tYXhwYWNrZXQsIEdGUF9BVE9NSUMpKSkgeworCQkJcmVxLT5jb21wbGV0ZSA9IGdzX3JlYWRfY29tcGxldGU7CisJCQlpZiAoKHJldD11c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQykpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgcXVldWUgcmVhZCByZXF1ZXN0LCByZXQ9JWRcbiIsCisJCQkJCXJldCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBhbGxvY2F0ZSByZWFkIHJlcXVlc3RzXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCQl9CisJfQorCisJLyogYWxsb2NhdGUgd3JpdGUgcmVxdWVzdHMsIGFuZCBwdXQgb24gZnJlZSBsaXN0ICovCisJZXAgPSBkZXYtPmRldl9pbl9lcDsKKwlmb3IgKGk9MDsgaTx3cml0ZV9xX3NpemU7IGkrKykgeworCQlpZiAoKHJlcV9lbnRyeT1nc19hbGxvY19yZXFfZW50cnkoZXAsIGVwLT5tYXhwYWNrZXQsIEdGUF9BVE9NSUMpKSkgeworCQkJcmVxX2VudHJ5LT5yZV9yZXEtPmNvbXBsZXRlID0gZ3Nfd3JpdGVfY29tcGxldGU7CisJCQlsaXN0X2FkZCgmcmVxX2VudHJ5LT5yZV9lbnRyeSwgJmRldi0+ZGV2X3JlcV9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGFsbG9jYXRlIHdyaXRlIHJlcXVlc3RzXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3Nfc2V0X2NvbmZpZzogJXMgY29uZmlndXJlZCwgJXMgc3BlZWQgJXMgY29uZmlnXG4iLAorCQlHU19MT05HX05BTUUsCisJCWdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyAiaGlnaCIgOiAiZnVsbCIsCisJCWNvbmZpZyA9PSBHU19CVUxLX0NPTkZJR19JRCA/ICJCVUxLIiA6ICJDREMtQUNNIik7CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZXNldF9jb25maWc6CisJZ3NfcmVzZXRfY29uZmlnKGRldik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdzX3Jlc2V0X2NvbmZpZworICoKKyAqIE1hcmsgdGhlIGRldmljZSBhcyBub3QgY29uZmlndXJlZCwgZGlzYWJsZSBhbGwgZW5kcG9pbnRzLAorICogd2hpY2ggZm9yY2VzIGNvbXBsZXRpb24gb2YgcGVuZGluZyBJL08gYW5kIGZyZWVzIHF1ZXVlZAorICogcmVxdWVzdHMsIGFuZCBmcmVlIHRoZSByZW1haW5pbmcgd3JpdGUgcmVxdWVzdHMgb24gdGhlCisgKiBmcmVlIGxpc3QuCisgKgorICogVGhlIGRldmljZSBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3NfcmVzZXRfY29uZmlnKHN0cnVjdCBnc19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZ3NfcmVxX2VudHJ5ICpyZXFfZW50cnk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19yZXNldF9jb25maWc6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19OT19DT05GSUdfSUQpCisJCXJldHVybjsKKworCWRldi0+ZGV2X2NvbmZpZyA9IEdTX05PX0NPTkZJR19JRDsKKworCS8qIGZyZWUgd3JpdGUgcmVxdWVzdHMgb24gdGhlIGZyZWUgbGlzdCAqLworCXdoaWxlKCFsaXN0X2VtcHR5KCZkZXYtPmRldl9yZXFfbGlzdCkpIHsKKwkJcmVxX2VudHJ5ID0gbGlzdF9lbnRyeShkZXYtPmRldl9yZXFfbGlzdC5uZXh0LAorCQkJc3RydWN0IGdzX3JlcV9lbnRyeSwgcmVfZW50cnkpOworCQlsaXN0X2RlbCgmcmVxX2VudHJ5LT5yZV9lbnRyeSk7CisJCWdzX2ZyZWVfcmVxX2VudHJ5KGRldi0+ZGV2X2luX2VwLCByZXFfZW50cnkpOworCX0KKworCS8qIGRpc2FibGUgZW5kcG9pbnRzLCBmb3JjaW5nIGNvbXBsZXRpb24gb2YgcGVuZGluZyBpL287ICovCisJLyogY29tcGxldGlvbiBoYW5kbGVycyBmcmVlIHRoZWlyIHJlcXVlc3RzIGluIHRoaXMgY2FzZSAqLworCWlmIChkZXYtPmRldl9ub3RpZnlfZXApIHsKKwkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfbm90aWZ5X2VwKTsKKwkJZGV2LT5kZXZfbm90aWZ5X2VwID0gTlVMTDsKKwl9CisJaWYgKGRldi0+ZGV2X2luX2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X2luX2VwKTsKKwkJZGV2LT5kZXZfaW5fZXAgPSBOVUxMOworCX0KKwlpZiAoZGV2LT5kZXZfb3V0X2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X291dF9lcCk7CisJCWRldi0+ZGV2X291dF9lcCA9IE5VTEw7CisJfQorfQorCisvKgorICogZ3NfYnVpbGRfY29uZmlnX2J1ZgorICoKKyAqIEJ1aWxkcyB0aGUgY29uZmlnIGRlc2NyaXB0b3JzIGluIHRoZSBnaXZlbiBidWZmZXIgYW5kIHJldHVybnMgdGhlCisgKiBsZW5ndGgsIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICovCitzdGF0aWMgaW50IGdzX2J1aWxkX2NvbmZpZ19idWYodTggKmJ1ZiwgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkLAorCXU4IHR5cGUsIHVuc2lnbmVkIGludCBpbmRleCwgaW50IGlzX290ZykKK3sKKwlpbnQgbGVuOworCWludCBoaWdoX3NwZWVkOworCWNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZ19kZXNjOworCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipmdW5jdGlvbjsKKworCWlmIChpbmRleCA+PSBnc19kZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogb3RoZXIgc3BlZWQgc3dpdGNoZXMgaGlnaCBhbmQgZnVsbCBzcGVlZCAqLworCWhpZ2hfc3BlZWQgPSAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpOworCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCisJCWhpZ2hfc3BlZWQgPSAhaGlnaF9zcGVlZDsKKworCWlmICh1c2VfYWNtKSB7CisJCWNvbmZpZ19kZXNjID0gJmdzX2FjbV9jb25maWdfZGVzYzsKKwkJZnVuY3Rpb24gPSBHU19TUEVFRF9TRUxFQ1QoaGlnaF9zcGVlZCwKKwkJCWdzX2FjbV9oaWdoc3BlZWRfZnVuY3Rpb24sCisJCQlnc19hY21fZnVsbHNwZWVkX2Z1bmN0aW9uKTsKKwl9IGVsc2UgeworCQljb25maWdfZGVzYyA9ICZnc19idWxrX2NvbmZpZ19kZXNjOworCQlmdW5jdGlvbiA9IEdTX1NQRUVEX1NFTEVDVChoaWdoX3NwZWVkLAorCQkJZ3NfYnVsa19oaWdoc3BlZWRfZnVuY3Rpb24sCisJCQlnc19idWxrX2Z1bGxzcGVlZF9mdW5jdGlvbik7CisJfQorCisJLyogZm9yIG5vdywgZG9uJ3QgYWR2ZXJ0aXNlIHNycC1vbmx5IGRldmljZXMgKi8KKwlpZiAoIWlzX290ZykKKwkJZnVuY3Rpb24rKzsKKworCWxlbiA9IHVzYl9nYWRnZXRfY29uZmlnX2J1Zihjb25maWdfZGVzYywgYnVmLCBHU19NQVhfREVTQ19MRU4sIGZ1bmN0aW9uKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKworCSgoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKWJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogZ3NfYWxsb2NfcmVxCisgKgorICogQWxsb2NhdGUgYSB1c2JfcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogdXNiX3JlcXVlc3Qgb3IgTlVMTCBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZ3NfYWxsb2NfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQga21hbGxvY19mbGFncykKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKworCWlmIChlcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLCBrbWFsbG9jX2ZsYWdzKTsKKworCWlmIChyZXEgIT0gTlVMTCkgeworCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJcmVxLT5idWYgPSBrbWFsbG9jKGxlbiwga21hbGxvY19mbGFncyk7CisJCWlmIChyZXEtPmJ1ZiA9PSBOVUxMKSB7CisJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCByZXEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVxOworfQorCisvKgorICogZ3NfZnJlZV9yZXEKKyAqCisgKiBGcmVlIGEgdXNiX3JlcXVlc3QgYW5kIGl0cyBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlpZiAoZXAgIT0gTlVMTCAmJiByZXEgIT0gTlVMTCkgeworCQlrZnJlZShyZXEtPmJ1Zik7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CisJfQorfQorCisvKgorICogZ3NfYWxsb2NfcmVxX2VudHJ5CisgKgorICogQWxsb2NhdGVzIGEgcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlciwgdXNpbmcgdGhlIGdpdmVuCisgKiBlbmRwb2ludCwgYnVmZmVyIGxlbiwgYW5kIGttYWxsb2MgZmxhZ3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3NfcmVxX2VudHJ5ICpnc19hbGxvY19yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbiwgaW50IGttYWxsb2NfZmxhZ3MpCit7CisJc3RydWN0IGdzX3JlcV9lbnRyeQkqcmVxOworCisJcmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdzX3JlcV9lbnRyeSksIGttYWxsb2NfZmxhZ3MpOworCWlmIChyZXEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXEtPnJlX3JlcSA9IGdzX2FsbG9jX3JlcShlcCwgbGVuLCBrbWFsbG9jX2ZsYWdzKTsKKwlpZiAocmVxLT5yZV9yZXEgPT0gTlVMTCkgeworCQlrZnJlZShyZXEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXEtPnJlX3JlcS0+Y29udGV4dCA9IHJlcTsKKworCXJldHVybiByZXE7Cit9CisKKy8qCisgKiBnc19mcmVlX3JlcV9lbnRyeQorICoKKyAqIEZyZWVzIGEgcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCBnc19yZXFfZW50cnkgKnJlcSkKK3sKKwlpZiAoZXAgIT0gTlVMTCAmJiByZXEgIT0gTlVMTCkgeworCQlpZiAocmVxLT5yZV9yZXEgIT0gTlVMTCkKKwkJCWdzX2ZyZWVfcmVxKGVwLCByZXEtPnJlX3JlcSk7CisJCWtmcmVlKHJlcSk7CisJfQorfQorCisvKgorICogZ3NfYWxsb2NfcG9ydHMKKyAqCisgKiBBbGxvY2F0ZSBhbGwgcG9ydHMgYW5kIHNldCB0aGUgZ3NfZGV2IHN0cnVjdCB0byBwb2ludCB0byB0aGVtLgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKgorICogVGhlIGRldmljZSBsb2NrIGlzIG5vcm1hbGx5IGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZ3NfYWxsb2NfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2LCBpbnQga21hbGxvY19mbGFncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlmb3IgKGk9MDsgaTxHU19OVU1fUE9SVFM7IGkrKykgeworCQlpZiAoKHBvcnQ9KHN0cnVjdCBnc19wb3J0ICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGdzX3BvcnQpLCBrbWFsbG9jX2ZsYWdzKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbXNldChwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGdzX3BvcnQpKTsKKwkJcG9ydC0+cG9ydF9kZXYgPSBkZXY7CisJCXBvcnQtPnBvcnRfbnVtID0gaTsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMihHU19ERUZBVUxUX0RURV9SQVRFKTsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5iQ2hhckZvcm1hdCA9IEdTX0RFRkFVTFRfQ0hBUl9GT1JNQVQ7CisJCXBvcnQtPnBvcnRfbGluZV9jb2RpbmcuYlBhcml0eVR5cGUgPSBHU19ERUZBVUxUX1BBUklUWTsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5iRGF0YUJpdHMgPSBHU19ERUZBVUxUX0RBVEFfQklUUzsKKwkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPnBvcnRfbG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPnBvcnRfd3JpdGVfd2FpdCk7CisKKwkJZGV2LT5kZXZfcG9ydFtpXSA9IHBvcnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnc19mcmVlX3BvcnRzCisgKgorICogRnJlZSBhbGwgY2xvc2VkIHBvcnRzLiAgT3BlbiBwb3J0cyBhcmUgZGlzY29ubmVjdGVkIGJ5CisgKiBmcmVlaW5nIHRoZWlyIHdyaXRlIGJ1ZmZlcnMsIHNldHRpbmcgdGhlaXIgZGV2aWNlIHBvaW50ZXJzCisgKiBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZW0gaW4gdGhlIGRldmljZSB0byBOVUxMLiAgVGhlc2UKKyAqIHBvcnRzIHdpbGwgYmUgZnJlZWQgd2hlbiBjbG9zZWQuCisgKgorICogVGhlIGRldmljZSBsb2NrIGlzIG5vcm1hbGx5IGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIGdzX2ZyZWVfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaT0wOyBpPEdTX05VTV9QT1JUUzsgaSsrKSB7CisJCWlmICgocG9ydD1kZXYtPmRldl9wb3J0W2ldKSAhPSBOVUxMKSB7CisJCQlkZXYtPmRldl9wb3J0W2ldID0gTlVMTDsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocG9ydC0+cG9ydF93cml0ZV9idWYgIT0gTlVMTCkgeworCQkJCWdzX2J1Zl9mcmVlKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKwkJCQlwb3J0LT5wb3J0X3dyaXRlX2J1ZiA9IE5VTEw7CisJCQl9CisKKwkJCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPiAwIHx8IHBvcnQtPnBvcnRfaW5fdXNlKSB7CisJCQkJcG9ydC0+cG9ydF9kZXYgPSBOVUxMOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydF93cml0ZV93YWl0KTsKKwkJCQlpZiAocG9ydC0+cG9ydF90dHkpIHsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3R0eS0+cmVhZF93YWl0KTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3R0eS0+d3JpdGVfd2FpdCk7CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKwkJCQlrZnJlZShwb3J0KTsKKwkJCX0KKworCQl9CisJfQorfQorCisvKiBDaXJjdWxhciBCdWZmZXIgKi8KKworLyoKKyAqIGdzX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3NfYnVmICpnc19idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUsIGludCBrbWFsbG9jX2ZsYWdzKQoreworCXN0cnVjdCBnc19idWYgKmdiOworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlnYiA9IChzdHJ1Y3QgZ3NfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGdzX2J1ZiksIGttYWxsb2NfZmxhZ3MpOworCWlmIChnYiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWdiLT5idWZfYnVmID0ga21hbGxvYyhzaXplLCBrbWFsbG9jX2ZsYWdzKTsKKwlpZiAoZ2ItPmJ1Zl9idWYgPT0gTlVMTCkgeworCQlrZnJlZShnYik7CisJCXJldHVybiBOVUxMOworCX0KKworCWdiLT5idWZfc2l6ZSA9IHNpemU7CisJZ2ItPmJ1Zl9nZXQgPSBnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmOworCisJcmV0dXJuIGdiOworfQorCisvKgorICogZ3NfYnVmX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLwordm9pZCBnc19idWZfZnJlZShzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlpZiAoZ2IgIT0gTlVMTCkgeworCQlpZiAoZ2ItPmJ1Zl9idWYgIT0gTlVMTCkKKwkJCWtmcmVlKGdiLT5idWZfYnVmKTsKKwkJa2ZyZWUoZ2IpOworCX0KK30KKworLyoKKyAqIGdzX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCit2b2lkIGdzX2J1Zl9jbGVhcihzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlpZiAoZ2IgIT0gTlVMTCkKKwkJZ2ItPmJ1Zl9nZXQgPSBnYi0+YnVmX3B1dDsKKwkJLyogZXF1aXZhbGVudCB0byBhIGdldCBvZiBhbGwgZGF0YSBhdmFpbGFibGUgKi8KK30KKworLyoKKyAqIGdzX2J1Zl9kYXRhX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KK3Vuc2lnbmVkIGludCBnc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgZ3NfYnVmICpnYikKK3sKKwlpZiAoZ2IgIT0gTlVMTCkKKwkJcmV0dXJuIChnYi0+YnVmX3NpemUgKyBnYi0+YnVmX3B1dCAtIGdiLT5idWZfZ2V0KSAlIGdiLT5idWZfc2l6ZTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogZ3NfYnVmX3NwYWNlX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCit1bnNpZ25lZCBpbnQgZ3NfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBnc19idWYgKmdiKQoreworCWlmIChnYiAhPSBOVUxMKQorCQlyZXR1cm4gKGdiLT5idWZfc2l6ZSArIGdiLT5idWZfZ2V0IC0gZ2ItPmJ1Zl9wdXQgLSAxKSAlIGdiLT5idWZfc2l6ZTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogZ3NfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLwordW5zaWduZWQgaW50IGdzX2J1Zl9wdXQoc3RydWN0IGdzX2J1ZiAqZ2IsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoZ2IgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gID0gZ3NfYnVmX3NwYWNlX2F2YWlsKGdiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZ2ItPmJ1Zl9idWYgKyBnYi0+YnVmX3NpemUgLSBnYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGdiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShnYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQlnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGdiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZ2ItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlnYi0+YnVmX3B1dCA9IGdiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIGdzX2J1Zl9nZXQKKyAqCisgKiBHZXQgZGF0YSBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIgYW5kIGNvcHkgdG8gdGhlIGdpdmVuIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2YgZGF0YSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCit1bnNpZ25lZCBpbnQgZ3NfYnVmX2dldChzdHJ1Y3QgZ3NfYnVmICpnYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmIChnYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGdzX2J1Zl9kYXRhX2F2YWlsKGdiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZ2ItPmJ1Zl9idWYgKyBnYi0+YnVmX3NpemUgLSBnYi0+YnVmX2dldDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGJ1ZiwgZ2ItPmJ1Zl9nZXQsIGxlbik7CisJCW1lbWNweShidWYrbGVuLCBnYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOworCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgZ2ItPmJ1Zl9nZXQsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZ2ItPmJ1Zl9nZXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91c2JzdHJpbmcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91c2JzdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTczNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYnN0cmluZy5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCitzdGF0aWMgaW50IHV0ZjhfdG9fdXRmMTZsZShjb25zdCBjaGFyICpzLCBfX2xlMTYgKmNwLCB1bnNpZ25lZCBsZW4pCit7CisJaW50CWNvdW50ID0gMDsKKwl1OAljOworCXUxNgl1Y2hhcjsKKworCS8qIHRoaXMgaW5zaXN0cyBvbiBjb3JyZWN0IGVuY29kaW5ncywgdGhvdWdoIG5vdCBtaW5pbWFsIG9uZXMuCisJICogQlVUIGl0IGN1cnJlbnRseSByZWplY3RzIGxlZ2l0IDQtYnl0ZSBVVEYtOCBjb2RlIHBvaW50cywKKwkgKiB3aGljaCBuZWVkIHN1cnJvZ2F0ZSBwYWlycy4gIChVbmljb2RlIDMuMSBjYW4gdXNlIHRoZW0uKQorCSAqLworCXdoaWxlIChsZW4gIT0gMCAmJiAoYyA9ICh1OCkgKnMrKykgIT0gMCkgeworCQlpZiAodW5saWtlbHkoYyAmIDB4ODApKSB7CisJCQkvLyAyLWJ5dGUgc2VxdWVuY2U6CisJCQkvLyAwMDAwMHl5eXl5eHh4eHh4ID0gMTEweXl5eXkgMTB4eHh4eHgKKwkJCWlmICgoYyAmIDB4ZTApID09IDB4YzApIHsKKwkJCQl1Y2hhciA9IChjICYgMHgxZikgPDwgNjsKKworCQkJCWMgPSAodTgpICpzKys7CisJCQkJaWYgKChjICYgMHhjMCkgIT0gMHhjMCkKKwkJCQkJZ290byBmYWlsOworCQkJCWMgJj0gMHgzZjsKKwkJCQl1Y2hhciB8PSBjOworCisJCQkvLyAzLWJ5dGUgc2VxdWVuY2UgKG1vc3QgQ0pLViBjaGFyYWN0ZXJzKToKKwkJCS8vIHp6enp5eXl5eXl4eHh4eHggPSAxMTEwenp6eiAxMHl5eXl5eSAxMHh4eHh4eAorCQkJfSBlbHNlIGlmICgoYyAmIDB4ZjApID09IDB4ZTApIHsKKwkJCQl1Y2hhciA9IChjICYgMHgwZikgPDwgMTI7CisKKwkJCQljID0gKHU4KSAqcysrOworCQkJCWlmICgoYyAmIDB4YzApICE9IDB4YzApCisJCQkJCWdvdG8gZmFpbDsKKwkJCQljICY9IDB4M2Y7CisJCQkJdWNoYXIgfD0gYyA8PCA2OworCisJCQkJYyA9ICh1OCkgKnMrKzsKKwkJCQlpZiAoKGMgJiAweGMwKSAhPSAweGMwKQorCQkJCQlnb3RvIGZhaWw7CisJCQkJYyAmPSAweDNmOworCQkJCXVjaGFyIHw9IGM7CisKKwkJCQkvKiBubyBib2d1cyBzdXJyb2dhdGVzICovCisJCQkJaWYgKDB4ZDgwMCA8PSB1Y2hhciAmJiB1Y2hhciA8PSAweGRmZmYpCisJCQkJCWdvdG8gZmFpbDsKKworCQkJLy8gNC1ieXRlIHNlcXVlbmNlIChzdXJyb2dhdGUgcGFpcnMsIGN1cnJlbnRseSByYXJlKToKKwkJCS8vIDExMTAxMTEwd3d3d3p6enp5eSArIDExMDExMXl5eXl4eHh4eHgKKwkJCS8vICAgICA9IDExMTEwdXV1IDEwdXV6enp6IDEweXl5eXl5IDEweHh4eHh4CisJCQkvLyAodXV1dXUgPSB3d3d3ICsgMSkKKwkJCS8vIEZJWE1FIGFjY2VwdCB0aGUgc3Vycm9nYXRlIGNvZGUgcG9pbnRzIChvbmx5KQorCisJCQl9IGVsc2UKKwkJCQlnb3RvIGZhaWw7CisJCX0gZWxzZQorCQkJdWNoYXIgPSBjOworCQlwdXRfdW5hbGlnbmVkIChjcHVfdG9fbGUxNiAodWNoYXIpLCBjcCsrKTsKKwkJY291bnQrKzsKKwkJbGVuLS07CisJfQorCXJldHVybiBjb3VudDsKK2ZhaWw6CisJcmV0dXJuIC0xOworfQorCisKKy8qKgorICogdXNiX2dhZGdldF9nZXRfc3RyaW5nIC0gZmlsbCBvdXQgYSBzdHJpbmcgZGVzY3JpcHRvciAKKyAqIEB0YWJsZTogb2YgYyBzdHJpbmdzIGVuY29kZWQgdXNpbmcgVVRGLTgKKyAqIEBpZDogc3RyaW5nIGlkLCBmcm9tIGxvdyBieXRlIG9mIHdWYWx1ZSBpbiBnZXQgc3RyaW5nIGRlc2NyaXB0b3IKKyAqIEBidWY6IGF0IGxlYXN0IDI1NiBieXRlcworICoKKyAqIEZpbmRzIHRoZSBVVEYtOCBzdHJpbmcgbWF0Y2hpbmcgdGhlIElELCBhbmQgY29udmVydHMgaXQgaW50byBhCisgKiBzdHJpbmcgZGVzY3JpcHRvciBpbiB1dGYxNi1sZS4KKyAqIFJldHVybnMgbGVuZ3RoIG9mIGRlc2NyaXB0b3IgKGFsd2F5cyBldmVuKSBvciBuZWdhdGl2ZSBlcnJubworICoKKyAqIElmIHlvdXIgZHJpdmVyIG5lZWRzIHN0aW5ncyBpbiBtdWx0aXBsZSBsYW5ndWFnZXMsIHlvdSdsbCBwcm9iYWJseQorICogInN3aXRjaCAod0luZGV4KSB7IC4uLiB9IiAgaW4geW91ciBlcDAgc3RyaW5nIGRlc2NyaXB0b3IgbG9naWMsCisgKiB1c2luZyB0aGlzIHJvdXRpbmUgYWZ0ZXIgY2hvb3Npbmcgd2hpY2ggc2V0IG9mIFVURi04IHN0cmluZ3MgdG8gdXNlLgorICogTm90ZSB0aGF0IFVTLUFTQ0lJIGlzIGEgc3RyaWN0IHN1YnNldCBvZiBVVEYtODsgYW55IHN0cmluZyBieXRlcyB3aXRoCisgKiB0aGUgZWlnaHRoIGJpdCBzZXQgd2lsbCBiZSBtdWx0aWJ5dGUgVVRGLTggY2hhcmFjdGVycywgbm90IElTTy04ODU5LzEKKyAqIGNoYXJhY3RlcnMgKHdoaWNoIGFyZSBhbHNvIHdpZGVseSB1c2VkIGluIEMgc3RyaW5ncykuCisgKi8KK2ludAordXNiX2dhZGdldF9nZXRfc3RyaW5nIChzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICp0YWJsZSwgaW50IGlkLCB1OCAqYnVmKQoreworCXN0cnVjdCB1c2Jfc3RyaW5nCSpzOworCWludAkJCWxlbjsKKworCS8qIGRlc2NyaXB0b3IgMCBoYXMgdGhlIGxhbmd1YWdlIGlkICovCisJaWYgKGlkID09IDApIHsKKwkJYnVmIFswXSA9IDQ7CisJCWJ1ZiBbMV0gPSBVU0JfRFRfU1RSSU5HOworCQlidWYgWzJdID0gKHU4KSB0YWJsZS0+bGFuZ3VhZ2U7CisJCWJ1ZiBbM10gPSAodTgpICh0YWJsZS0+bGFuZ3VhZ2UgPj4gOCk7CisJCXJldHVybiA0OworCX0KKwlmb3IgKHMgPSB0YWJsZS0+c3RyaW5nczsgcyAmJiBzLT5zOyBzKyspCisJCWlmIChzLT5pZCA9PSBpZCkKKwkJCWJyZWFrOworCisJLyogdW5yZWNvZ25pemVkOiBzdGFsbC4gKi8KKwlpZiAoIXMgfHwgIXMtPnMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc3RyaW5nIGRlc2NyaXB0b3JzIGhhdmUgbGVuZ3RoLCB0YWcsIHRoZW4gVVRGMTYtTEUgdGV4dCAqLworCWxlbiA9IG1pbiAoKHNpemVfdCkgMTI2LCBzdHJsZW4gKHMtPnMpKTsKKwltZW1zZXQgKGJ1ZiArIDIsIDAsIDIgKiBsZW4pOwkvKiB6ZXJvIGFsbCB0aGUgYnl0ZXMgKi8KKwlsZW4gPSB1dGY4X3RvX3V0ZjE2bGUocy0+cywgKF9fbGUxNiAqKSZidWZbMl0sIGxlbik7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiBbMF0gPSAobGVuICsgMSkgKiAyOworCWJ1ZiBbMV0gPSBVU0JfRFRfU1RSSU5HOworCXJldHVybiBidWYgWzBdOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ5NDMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtMCwwICsxLDEzNTcgQEAKKy8qCisgKiB6ZXJvLmMgLS0gR2FkZ2V0IFplcm8sIGZvciBVU0IgZGV2ZWxvcG1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBEYXZpZCBCcm93bmVsbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG1heSBub3QgYmUgdXNlZAorICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKy8qCisgKiBHYWRnZXQgWmVybyBvbmx5IG5lZWRzIHR3byBidWxrIGVuZHBvaW50cywgYW5kIGlzIGFuIGV4YW1wbGUgb2YgaG93IHlvdQorICogY2FuIHdyaXRlIGEgaGFyZHdhcmUtYWdub3N0aWMgZ2FkZ2V0IGRyaXZlciBydW5uaW5nIGluc2lkZSBhIFVTQiBkZXZpY2UuCisgKgorICogSGFyZHdhcmUgZGV0YWlscyBhcmUgdmlzaWJsZSAoc2VlIENPTkZJR19VU0JfWkVST18qIGJlbG93KSBidXQgZG9uJ3QKKyAqIGFmZmVjdCBtb3N0IG9mIHRoZSBkcml2ZXIuCisgKgorICogVXNlIGl0IHdpdGggdGhlIExpbnV4IGhvc3QvbWFzdGVyIHNpZGUgInVzYnRlc3QiIGRyaXZlciB0byBnZXQgYSBiYXNpYworICogZnVuY3Rpb25hbCB0ZXN0IG9mIHlvdXIgZGV2aWNlLXNpZGUgdXNiIHN0YWNrLCBvciB3aXRoICJ1c2Itc2tlbGV0b24iLgorICoKKyAqIEl0IHN1cHBvcnRzIHR3byBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLiAgT25lIHNpbmtzIHdoYXRldmVyIHRoZSB1c2IgaG9zdAorICogd3JpdGVzLCBhbmQgaW4gcmV0dXJuIHNvdXJjZXMgemVyb2VzLiAgVGhlIG90aGVyIGxvb3BzIHdoYXRldmVyIHRoZSBob3N0CisgKiB3cml0ZXMgYmFjaywgc28gdGhlIGhvc3QgY2FuIHJlYWQgaXQuICBNb2R1bGUgb3B0aW9ucyBpbmNsdWRlOgorICoKKyAqICAgYnVmbGVuPU4JCWRlZmF1bHQgTj00MDk2LCBidWZmZXIgc2l6ZSB1c2VkCisgKiAgIHFsZW49TgkJZGVmYXVsdCBOPTMyLCBob3cgbWFueSBidWZmZXJzIGluIHRoZSBsb29wYmFjayBxdWV1ZQorICogICBsb29wZGVmYXVsdAlkZWZhdWx0IGZhbHNlLCBsaXN0IGxvb3BiYWNrIGNvbmZpZyBmaXJzdAorICoKKyAqIE1hbnkgZHJpdmVycyB3aWxsIG9ubHkgaGF2ZSBvbmUgY29uZmlndXJhdGlvbiwgbGV0dGluZyB0aGVtIGJlIG11Y2gKKyAqIHNpbXBsZXIgaWYgdGhleSBhbHNvIGRvbid0IHN1cHBvcnQgaGlnaCBzcGVlZCBvcGVyYXRpb24gKGxpa2UgdGhpcworICogZHJpdmVyIGRvZXMpLgorICovCisKKyNkZWZpbmUgREVCVUcgMQorLy8gI2RlZmluZSBWRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIlN0IFBhdHJpY2sncyBEYXkgMjAwNCIKKworc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRuYW1lIFtdID0gInplcm8iOworc3RhdGljIGNvbnN0IGNoYXIgbG9uZ25hbWUgW10gPSAiR2FkZ2V0IFplcm8iOworCitzdGF0aWMgY29uc3QgY2hhciBzb3VyY2Vfc2luayBbXSA9ICJzb3VyY2UgYW5kIHNpbmsgZGF0YSI7CitzdGF0aWMgY29uc3QgY2hhciBsb29wYmFjayBbXSA9ICJsb29wIGlucHV0IHRvIG91dHB1dCI7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBkcml2ZXIgYXNzdW1lcyBzZWxmLXBvd2VyZWQgaGFyZHdhcmUsIGFuZAorICogaGFzIG5vIHdheSBmb3IgdXNlcnMgdG8gdHJpZ2dlciByZW1vdGUgd2FrZXVwLgorICoKKyAqIHRoaXMgdmVyc2lvbiBhdXRvY29uZmlndXJlcyBhcyBtdWNoIGFzIHBvc3NpYmxlLAorICogd2hpY2ggaXMgcmVhc29uYWJsZSBmb3IgbW9zdCAiYnVsay1vbmx5IiBkcml2ZXJzLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqRVBfSU5fTkFNRTsJCS8qIHNvdXJjZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKkVQX09VVF9OQU1FOwkJLyogc2luayAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBiaWcgZW5vdWdoIHRvIGhvbGQgb3VyIGJpZ2dlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZSBVU0JfQlVGU0laCTI1NgorCitzdHJ1Y3QgemVyb19kZXYgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsJCS8qIGZvciBjb250cm9sIHJlc3BvbnNlcyAqLworCisJLyogd2hlbiBjb25maWd1cmVkLCB3ZSBoYXZlIG9uZSBvZiB0d28gY29uZmlnczoKKwkgKiAtIHNvdXJjZSBkYXRhIChpbiB0byBob3N0KSBhbmQgc2luayBpdCAob3V0IGZyb20gaG9zdCkKKwkgKiAtIG9yIGxvb3AgaXQgYmFjayAob3V0IGZyb20gaG9zdCBiYWNrIGluIHRvIGhvc3QpCisJICovCisJdTgJCQljb25maWc7CisJc3RydWN0IHVzYl9lcAkJKmluX2VwLCAqb3V0X2VwOworCisJLyogYXV0b3Jlc3VtZSB0aW1lciAqLworCXN0cnVjdCB0aW1lcl9saXN0CXJlc3VtZTsKK307CisKKyNkZWZpbmUgeHByaW50ayhkLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHCURCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCBidWZsZW4gPSA0MDk2Oworc3RhdGljIHVuc2lnbmVkIHFsZW4gPSAzMjsKK3N0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuID0gMDsKKworbW9kdWxlX3BhcmFtIChidWZsZW4sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Cittb2R1bGVfcGFyYW0gKHFsZW4sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Cittb2R1bGVfcGFyYW0gKHBhdHRlcm4sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CisKKy8qCisgKiBpZiBpdCdzIG5vbnplcm8sIGF1dG9yZXN1bWUgc2F5cyBob3cgbWFueSBzZWNvbmRzIHRvIHdhaXQKKyAqIGJlZm9yZSB0cnlpbmcgdG8gd2FrZSB1cCB0aGUgaG9zdCBhZnRlciBzdXNwZW5kLgorICovCitzdGF0aWMgdW5zaWduZWQgYXV0b3Jlc3VtZSA9IDA7Cittb2R1bGVfcGFyYW0gKGF1dG9yZXN1bWUsIHVpbnQsIDApOworCisvKgorICogTm9ybWFsbHkgdGhlICJsb29wYmFjayIgY29uZmlndXJhdGlvbiBpcyBzZWNvbmQgKGluZGV4IDEpIHNvCisgKiBpdCdzIG5vdCB0aGUgZGVmYXVsdC4gIEhlcmUncyB3aGVyZSB0byBjaGFuZ2UgdGhhdCBvcmRlciwgdG8KKyAqIHdvcmsgYmV0dGVyIHdpdGggaG9zdHMgd2hlcmUgY29uZmlnIGNoYW5nZXMgYXJlIHByb2JsZW1hdGljLgorICogT3IgY29udHJvbGxlcnMgKGxpa2Ugc3VwZXJoKSB0aGF0IG9ubHkgc3VwcG9ydCBvbmUgY29uZmlnLgorICovCitzdGF0aWMgaW50IGxvb3BkZWZhdWx0ID0gMDsKKworbW9kdWxlX3BhcmFtIChsb29wZGVmYXVsdCwgYm9vbCwgU19JUlVHT3xTX0lXVVNSKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhhbmtzIHRvIE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCisgKgorICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKKyAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgorICovCisjaWZuZGVmCUNPTkZJR19VU0JfWkVST19ITlBURVNUCisjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MDUyNQkJLyogTmV0Q2hpcCAqLworI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhhNGEwCQkvKiBMaW51eC1VU0IgIkdhZGdldCBaZXJvIiAqLworI2Vsc2UKKyNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgxYTBhCQkvKiBPVEcgdGVzdCBkZXZpY2UgSURzICovCisjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGJhZGQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKQorICogY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLgorICovCisKKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkJMjUKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1QJCQk0MgorI2RlZmluZSBTVFJJTkdfU0VSSUFMCQkJMTAxCisjZGVmaW5lIFNUUklOR19TT1VSQ0VfU0lOSwkJMjUwCisjZGVmaW5lIFNUUklOR19MT09QQkFDSwkJCTI1MQorCisvKgorICogVGhpcyBkZXZpY2UgYWR2ZXJ0aXNlcyB0d28gY29uZmlndXJhdGlvbnM7IHRoZXNlIG51bWJlcnMgd29yaworICogb24gYSBweGEyNTAgYXMgd2VsbCBhcyBtb3JlIGZsZXhpYmxlIGhhcmR3YXJlLgorICovCisjZGVmaW5lCUNPTkZJR19TT1VSQ0VfU0lOSwkzCisjZGVmaW5lCUNPTkZJR19MT09QQkFDSwkJMgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcgorZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAorCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkuaVNlcmlhbE51bWJlciA9CVNUUklOR19TRVJJQUwsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTIsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgorc291cmNlX3NpbmtfY29uZmlnID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBzb3VyY2Vfc2lua19jb25maWcsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisKKwkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0JMSwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19TT1VSQ0VfU0lOSywKKwkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfU09VUkNFX1NJTkssCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlciA9CQkxLAkvKiBzZWxmLXBvd2VyZWQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCitsb29wYmFja19jb25maWcgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGxvb3BiYWNrX2NvbmZpZywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NPTkZJRywKKworCS8qIGNvbXB1dGUgd1RvdGFsTGVuZ3RoIG9uIHRoZSBmbHkgKi8KKwkuYk51bUludGVyZmFjZXMgPQkxLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0JQ09ORklHX0xPT1BCQUNLLAorCS5pQ29uZmlndXJhdGlvbiA9CVNUUklOR19MT09QQkFDSywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0JCTEsCS8qIHNlbGYtcG93ZXJlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKK290Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAsCit9OworCisvKiBvbmUgaW50ZXJmYWNlIGluIGVhY2ggY29uZmlndXJhdGlvbiAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorc291cmNlX3NpbmtfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygc291cmNlX3NpbmtfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX1ZFTkRPUl9TUEVDLAorCS5pSW50ZXJmYWNlID0JCVNUUklOR19TT1VSQ0VfU0lOSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitsb29wYmFja19pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBsb29wYmFja19pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0xPT1BCQUNLLAorfTsKKworLyogdHdvIGZ1bGwgc3BlZWQgYnVsayBlbmRwb2ludHM7IHRoZWlyIHVzZSBpcyBjb25maWctZGVwZW5kZW50ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2ZzX3NvdXJjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19zb3VyY2Vfc2lua19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19sb29wYmFja19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJTlVMTCwKK307CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKworLyoKKyAqIHVzYiAyLjAgZGV2aWNlcyBuZWVkIHRvIGV4cG9zZSBib3RoIGhpZ2ggc3BlZWQgYW5kIGZ1bGwgc3BlZWQKKyAqIGRlc2NyaXB0b3JzLCB1bmxlc3MgdGhleSBvbmx5IHJ1biBhdCBmdWxsIHNwZWVkLgorICoKKyAqIHRoYXQgbWVhbnMgYWx0ZXJuYXRlIGVuZHBvaW50IGRlc2NyaXB0b3JzIChiaWdnZXIgcGFja2V0cykKKyAqIGFuZCBhICJkZXZpY2UgcXVhbGlmaWVyIiAuLi4gcGx1cyBtb3JlIGNvbnN0cnVjdGlvbiBvcHRpb25zCisgKiBmb3IgdGhlIGNvbmZpZyBkZXNjcmlwdG9yLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX3NvdXJjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX3NpbmtfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcgorZGV2X3F1YWxpZmllciA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCisKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19zb3VyY2Vfc2lua19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnNvdXJjZV9zaW5rX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19sb29wYmFja19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisKKy8qIG1heHBhY2tldCBhbmQgb3RoZXIgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzIHZhcnkgYnkgc3BlZWQuICovCisjZGVmaW5lIGVwX2Rlc2MoZyxocyxmcykgKCgoZyktPnNwZWVkPT1VU0JfU1BFRURfSElHSCk/KGhzKTooZnMpKQorCisjZWxzZQorCisvKiBpZiB0aGVyZSdzIG5vIGhpZ2ggc3BlZWQgc3VwcG9ydCwgbWF4cGFja2V0IGRvZXNuJ3QgY2hhbmdlLiAqLworI2RlZmluZSBlcF9kZXNjKGcsaHMsZnMpIGZzCisKKyNlbmRpZgkvKiAhQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCisKK3N0YXRpYyBjaGFyCQkJCW1hbnVmYWN0dXJlciBbNTBdOworc3RhdGljIGNoYXIJCQkJc2VyaWFsIFs0MF07CisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nCQlzdHJpbmdzIFtdID0geworCXsgU1RSSU5HX01BTlVGQUNUVVJFUiwgbWFudWZhY3R1cmVyLCB9LAorCXsgU1RSSU5HX1BST0RVQ1QsIGxvbmduYW1lLCB9LAorCXsgU1RSSU5HX1NFUklBTCwgc2VyaWFsLCB9LAorCXsgU1RSSU5HX0xPT1BCQUNLLCBsb29wYmFjaywgfSwKKwl7IFNUUklOR19TT1VSQ0VfU0lOSywgc291cmNlX3NpbmssIH0sCisJeyAgfQkJCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwlzdHJpbmd0YWIgPSB7CisJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzCT0gc3RyaW5ncywKK307CisKKy8qCisgKiBjb25maWcgZGVzY3JpcHRvcnMgYXJlIGFsc28gaGFuZGNyYWZ0ZWQuICB0aGVzZSBtdXN0IGFncmVlIHdpdGggY29kZQorICogdGhhdCBzZXRzIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2l0aCBjb2RlIG1hbmFnaW5nIGludGVyZmFjZXMgYW5kIHRoZWlyCisgKiBhbHRzZXR0aW5ncy4gIG90aGVyIGNvbXBsZXhpdHkgbWF5IGNvbWUgZnJvbToKKyAqCisgKiAgLSBoaWdoIHNwZWVkIHN1cHBvcnQsIGluY2x1ZGluZyAib3RoZXIgc3BlZWQgY29uZmlnIiBydWxlcworICogIC0gbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKyAqICAtIGludGVyZmFjZXMgd2l0aCBhbHRlcm5hdGUgc2V0dGluZ3MKKyAqICAtIGVtYmVkZGVkIGNsYXNzIG9yIHZlbmRvci1zcGVjaWZpYyBkZXNjcmlwdG9ycworICoKKyAqIHRoaXMgaGFuZGxlcyBoaWdoIHNwZWVkLCBhbmQgaGFzIGEgc2Vjb25kIGNvbmZpZyB0aGF0IGNvdWxkIGFzIGVhc2lseQorICogaGF2ZSBiZWVuIGFuIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZyAob24gbW9zdCBoYXJkd2FyZSkuCisgKgorICogTk9URTogIHRvIGRlbW9uc3RyYXRlIChhbmQgdGVzdCkgbW9yZSBVU0IgY2FwYWJpbGl0aWVzLCB0aGlzIGRyaXZlcgorICogc2hvdWxkIGluY2x1ZGUgYW4gYWx0c2V0dGluZyB0byB0ZXN0IGludGVycnVwdCB0cmFuc2ZlcnMsIGluY2x1ZGluZworICogaGlnaCBiYW5kd2lkdGggbW9kZXMgYXQgaGlnaCBzcGVlZC4gIChNYXliZSB3b3JrIGxpa2UgSW50ZWwncyB0ZXN0CisgKiBkZXZpY2U/KQorICovCitzdGF0aWMgaW50Citjb25maWdfYnVmIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQl1OCAqYnVmLCB1OCB0eXBlLCB1bnNpZ25lZCBpbmRleCkKK3sKKwlpbnQJCQkJaXNfc291cmNlX3Npbms7CisJaW50CQkJCWxlbjsKKwljb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqZnVuY3Rpb247CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJaW50CQkJCWhzID0gKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpOworI2VuZGlmCisKKwkvKiB0d28gY29uZmlndXJhdGlvbnMgd2lsbCBhbHdheXMgYmUgaW5kZXggMCBhbmQgaW5kZXggMSAqLworCWlmIChpbmRleCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCWlzX3NvdXJjZV9zaW5rID0gbG9vcGRlZmF1bHQgPyAoaW5kZXggPT0gMSkgOiAoaW5kZXggPT0gMCk7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlocyA9ICFoczsKKwlpZiAoaHMpCisJCWZ1bmN0aW9uID0gaXNfc291cmNlX3NpbmsKKwkJCT8gaHNfc291cmNlX3NpbmtfZnVuY3Rpb24KKwkJCTogaHNfbG9vcGJhY2tfZnVuY3Rpb247CisJZWxzZQorI2VuZGlmCisJCWZ1bmN0aW9uID0gaXNfc291cmNlX3NpbmsKKwkJCT8gZnNfc291cmNlX3NpbmtfZnVuY3Rpb24KKwkJCTogZnNfbG9vcGJhY2tfZnVuY3Rpb247CisKKwkvKiBmb3Igbm93LCBkb24ndCBhZHZlcnRpc2Ugc3JwLW9ubHkgZGV2aWNlcyAqLworCWlmICghZ2FkZ2V0LT5pc19vdGcpCisJCWZ1bmN0aW9uKys7CisKKwlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYgKGlzX3NvdXJjZV9zaW5rCisJCQkJCT8gJnNvdXJjZV9zaW5rX2NvbmZpZworCQkJCQk6ICZsb29wYmFja19jb25maWcsCisJCQlidWYsIFVTQl9CVUZTSVosIGZ1bmN0aW9uKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKwkoKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKikgYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKKwlyZXR1cm4gbGVuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK2FsbG9jX2VwX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKworCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChlcCwgR0ZQX0FUT01JQyk7CisJaWYgKHJlcSkgeworCQlyZXEtPmxlbmd0aCA9IGxlbmd0aDsKKwkJcmVxLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyIChlcCwgbGVuZ3RoLAorCQkJCSZyZXEtPmRtYSwgR0ZQX0FUT01JQyk7CisJCWlmICghcmVxLT5idWYpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOworCQkJcmVxID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gcmVxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2VwX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPmJ1ZikKKwkJdXNiX2VwX2ZyZWVfYnVmZmVyIChlcCwgcmVxLT5idWYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCk7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZXAsIHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIG9wdGlvbmFsbHkgcmVxdWlyZSBzcGVjaWZpYyBzb3VyY2Uvc2luayBkYXRhIHBhdHRlcm5zICAqLworCitzdGF0aWMgaW50CitjaGVja19yZWFkX2RhdGEgKAorCXN0cnVjdCB6ZXJvX2RldgkJKmRldiwKKwlzdHJ1Y3QgdXNiX2VwCQkqZXAsCisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEKKykKK3sKKwl1bnNpZ25lZAlpOworCXU4CQkqYnVmID0gcmVxLT5idWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5hY3R1YWw7IGkrKywgYnVmKyspIHsKKwkJc3dpdGNoIChwYXR0ZXJuKSB7CisJCS8qIGFsbC16ZXJvZXMgaGFzIG5vIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKi8KKwkJY2FzZSAwOgorCQkJaWYgKCpidWYgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQkvKiBtb2Q2MyBzdGF5cyBpbiBzeW5jIHdpdGggc2hvcnQtdGVybWluYXRlZCB0cmFuc2ZlcnMsCisJCSAqIG9yIG90aGVyd2lzZSB3aGVuIGhvc3QgYW5kIGdhZGdldCBhZ3JlZSBvbiBob3cgbGFyZ2UKKwkJICogZWFjaCB1c2IgdHJhbnNmZXIgcmVxdWVzdCBzaG91bGQgYmUuICByZXN5bmMgaXMgZG9uZQorCQkgKiB3aXRoIHNldF9pbnRlcmZhY2Ugb3Igc2V0X2NvbmZpZy4KKwkJICovCisJCWNhc2UgMToKKwkJCWlmICgqYnVmID09ICh1OCkoaSAlIDYzKSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQl9CisJCUVSUk9SIChkZXYsICJiYWQgT1VUIGJ5dGUsIGJ1ZiBbJWRdID0gJWRcbiIsIGksICpidWYpOworCQl1c2JfZXBfc2V0X2hhbHQgKGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVpbml0X3dyaXRlX2RhdGEgKAorCXN0cnVjdCB6ZXJvX2RldgkJKmRldiwKKwlzdHJ1Y3QgdXNiX2VwCQkqZXAsCisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEKKykKK3sKKwl1bnNpZ25lZAlpOworCXU4CQkqYnVmID0gcmVxLT5idWY7CisKKwlzd2l0Y2ggKHBhdHRlcm4pIHsKKwljYXNlIDA6CisJCW1lbXNldCAocmVxLT5idWYsIDAsIHJlcS0+bGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmb3IgIChpID0gMDsgaSA8IHJlcS0+bGVuZ3RoOyBpKyspCisJCQkqYnVmKysgPSAodTgpIChpICUgNjMpOworCQlicmVhazsKKwl9Cit9CisKKy8qIGlmIHRoZXJlIGlzIG9ubHkgb25lIHJlcXVlc3QgaW4gdGhlIHF1ZXVlLCB0aGVyZSdsbCBhbHdheXMgYmUgYW4KKyAqIGlycSBkZWxheSBiZXR3ZWVuIGVuZCBvZiBvbmUgcmVxdWVzdCBhbmQgc3RhcnQgb2YgdGhlIG5leHQuCisgKiB0aGF0IHByZXZlbnRzIHVzaW5nIGhhcmR3YXJlIGRtYSBxdWV1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNvdXJjZV9zaW5rX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHplcm9fZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisJaW50CQlzdGF0dXMgPSByZXEtPnN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisKKwljYXNlIDA6IAkJCS8qIG5vcm1hbCBjb21wbGV0aW9uPyAqLworCQlpZiAoZXAgPT0gZGV2LT5vdXRfZXApCisJCQljaGVja19yZWFkX2RhdGEgKGRldiwgZXAsIHJlcSk7CisJCWVsc2UKKwkJCXJlaW5pdF93cml0ZV9kYXRhIChkZXYsIGVwLCByZXEpOworCQlicmVhazsKKworCS8qIHRoaXMgZW5kcG9pbnQgaXMgbm9ybWFsbHkgYWN0aXZlIHdoaWxlIHdlJ3JlIGNvbmZpZ3VyZWQgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6IAkJLyogaGFyZHdhcmUgZm9yY2VkIGVwIHJlc2V0ICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIHJlcXVlc3QgZGVxdWV1ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0IGZyb20gaG9zdCAqLworCQlWREJHIChkZXYsICIlcyBnb25lICglZCksICVkLyVkXG4iLCBlcC0+bmFtZSwgc3RhdHVzLAorCQkJCXJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkKKwkJCWNoZWNrX3JlYWRfZGF0YSAoZGV2LCBlcCwgcmVxKTsKKwkJZnJlZV9lcF9yZXEgKGVwLCByZXEpOworCQlyZXR1cm47CisKKwljYXNlIC1FT1ZFUkZMT1c6CQkvKiBidWZmZXIgb3ZlcnJ1biBvbiByZWFkIG1lYW5zIHRoYXQKKwkJCQkJICogd2UgZGlkbid0IHByb3ZpZGUgYSBiaWcgZW5vdWdoCisJCQkJCSAqIGJ1ZmZlci4KKwkJCQkJICovCisJZGVmYXVsdDoKKyNpZiAxCisJCURCRyAoZGV2LCAiJXMgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwgZXAtPm5hbWUsCisJCQkJc3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworI2VuZGlmCisJY2FzZSAtRVJFTU9URUlPOgkJLyogc2hvcnQgcmVhZCAqLworCQlicmVhazsKKwl9CisKKwlzdGF0dXMgPSB1c2JfZXBfcXVldWUgKGVwLCByZXEsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJRVJST1IgKGRldiwgImtpbGwgJXM6ICByZXN1Ym1pdCAlZCBieXRlcyAtLT4gJWRcbiIsCisJCQkJZXAtPm5hbWUsIHJlcS0+bGVuZ3RoLCBzdGF0dXMpOworCQl1c2JfZXBfc2V0X2hhbHQgKGVwKTsKKwkJLyogRklYTUUgcmVjb3ZlciBsYXRlciAuLi4gc29tZWhvdyAqLworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCitzb3VyY2Vfc2lua19zdGFydF9lcCAoc3RydWN0IHVzYl9lcCAqZXAsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJaW50CQkJc3RhdHVzOworCisJcmVxID0gYWxsb2NfZXBfcmVxIChlcCwgYnVmbGVuKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQgKHJlcS0+YnVmLCAwLCByZXEtPmxlbmd0aCk7CisJcmVxLT5jb21wbGV0ZSA9IHNvdXJjZV9zaW5rX2NvbXBsZXRlOworCisJaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApCisJCXJlaW5pdF93cml0ZV9kYXRhIChlcC0+ZHJpdmVyX2RhdGEsIGVwLCByZXEpOworCisJc3RhdHVzID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBnZnBfZmxhZ3MpOworCWlmIChzdGF0dXMpIHsKKwkJc3RydWN0IHplcm9fZGV2CSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwkJRVJST1IgKGRldiwgInN0YXJ0ICVzIC0tPiAlZFxuIiwgZXAtPm5hbWUsIHN0YXR1cyk7CisJCWZyZWVfZXBfcmVxIChlcCwgcmVxKTsKKwkJcmVxID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmVxOworfQorCitzdGF0aWMgaW50CitzZXRfc291cmNlX3NpbmtfY29uZmlnIChzdHJ1Y3QgemVyb19kZXYgKmRldiwgaW50IGdmcF9mbGFncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlnYWRnZXRfZm9yX2VhY2hfZXAgKGVwLCBnYWRnZXQpIHsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJCS8qIG9uZSBlbmRwb2ludCB3cml0ZXMgKHNvdXJjZXMpIHplcm9lcyBpbiAodG8gdGhlIGhvc3QpICovCisJCWlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9JTl9OQU1FKSA9PSAwKSB7CisJCQlkID0gZXBfZGVzYyAoZ2FkZ2V0LCAmaHNfc291cmNlX2Rlc2MsICZmc19zb3VyY2VfZGVzYyk7CisJCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJaWYgKHNvdXJjZV9zaW5rX3N0YXJ0X2VwIChlcCwgZ2ZwX2ZsYWdzKSAhPSAwKSB7CisJCQkJCWRldi0+aW5fZXAgPSBlcDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXVzYl9lcF9kaXNhYmxlIChlcCk7CisJCQkJcmVzdWx0ID0gLUVJTzsKKwkJCX0KKworCQkvKiBvbmUgZW5kcG9pbnQgcmVhZHMgKHNpbmtzKSBhbnl0aGluZyBvdXQgKGZyb20gdGhlIGhvc3QpICovCisJCX0gZWxzZSBpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfT1VUX05BTUUpID09IDApIHsKKwkJCWQgPSBlcF9kZXNjIChnYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOworCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQkJCWlmIChzb3VyY2Vfc2lua19zdGFydF9lcCAoZXAsIGdmcF9mbGFncykgIT0gMCkgeworCQkJCQlkZXYtPm91dF9lcCA9IGVwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJdXNiX2VwX2Rpc2FibGUgKGVwKTsKKwkJCQlyZXN1bHQgPSAtRUlPOworCQkJfQorCisJCS8qIGlnbm9yZSBhbnkgb3RoZXIgZW5kcG9pbnRzICovCisJCX0gZWxzZQorCQkJY29udGludWU7CisKKwkJLyogc3RvcCBvbiBlcnJvciAqLworCQlFUlJPUiAoZGV2LCAiY2FuJ3Qgc3RhcnQgJXMsIHJlc3VsdCAlZFxuIiwgZXAtPm5hbWUsIHJlc3VsdCk7CisJCWJyZWFrOworCX0KKwlpZiAocmVzdWx0ID09IDApCisJCURCRyAoZGV2LCAiYnVmbGVuICVkXG4iLCBidWZsZW4pOworCisJLyogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbnVwIG9uIGVycm9yICovCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgbG9vcGJhY2tfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOworCisJc3dpdGNoIChzdGF0dXMpIHsKKworCWNhc2UgMDogCQkJLyogbm9ybWFsIGNvbXBsZXRpb24/ICovCisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkgeworCQkJLyogbG9vcCB0aGlzIE9VVCBwYWNrZXQgYmFjayBJTiB0byB0aGUgaG9zdCAqLworCQkJcmVxLT56ZXJvID0gKHJlcS0+YWN0dWFsIDwgcmVxLT5sZW5ndGgpOworCQkJcmVxLT5sZW5ndGggPSByZXEtPmFjdHVhbDsKKwkJCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZSAoZGV2LT5pbl9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChzdGF0dXMgPT0gMCkKKwkJCQlyZXR1cm47CisKKwkJCS8qICJzaG91bGQgbmV2ZXIgZ2V0IGhlcmUiICovCisJCQlFUlJPUiAoZGV2LCAiY2FuJ3QgbG9vcCAlcyB0byAlczogJWRcbiIsCisJCQkJZXAtPm5hbWUsIGRldi0+aW5fZXAtPm5hbWUsCisJCQkJc3RhdHVzKTsKKwkJfQorCisJCS8qIHF1ZXVlIHRoZSBidWZmZXIgZm9yIHNvbWUgbGF0ZXIgT1VUIHBhY2tldCAqLworCQlyZXEtPmxlbmd0aCA9IGJ1ZmxlbjsKKwkJc3RhdHVzID0gdXNiX2VwX3F1ZXVlIChkZXYtPm91dF9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJcmV0dXJuOworCisJCS8qICJzaG91bGQgbmV2ZXIgZ2V0IGhlcmUiICovCisJCS8qIEZBTExUSFJPVUdIICovCisKKwlkZWZhdWx0OgorCQlFUlJPUiAoZGV2LCAiJXMgbG9vcCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLCBlcC0+bmFtZSwKKwkJCQlzdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJCS8qIEZBTExUSFJPVUdIICovCisKKwkvKiBOT1RFOiAgc2luY2UgdGhpcyBkcml2ZXIgZG9lc24ndCBtYWludGFpbiBhbiBleHBsaWNpdCByZWNvcmQKKwkgKiBvZiByZXF1ZXN0cyBpdCBzdWJtaXR0ZWQgKGp1c3QgbWFpbnRhaW5zIHFsZW4gY291bnQpLCB3ZQorCSAqIHJlbHkgb24gdGhlIGhhcmR3YXJlIGRyaXZlciB0byBjbGVhbiB1cCBvbiBkaXNjb25uZWN0IG9yCisJICogZW5kcG9pbnQgZGlzYWJsZS4KKwkgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6IAkJLyogaGFyZHdhcmUgZm9yY2VkIGVwIHJlc2V0ICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIHJlcXVlc3QgZGVxdWV1ZWQgKi8KKwljYXNlIC1FU0hVVERPV046CQkvKiBkaXNjb25uZWN0IGZyb20gaG9zdCAqLworCQlmcmVlX2VwX3JlcSAoZXAsIHJlcSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NldF9sb29wYmFja19jb25maWcgKHN0cnVjdCB6ZXJvX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWdhZGdldF9mb3JfZWFjaF9lcCAoZXAsIGdhZGdldCkgeworCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwkJLyogb25lIGVuZHBvaW50IHdyaXRlcyBkYXRhIGJhY2sgSU4gdG8gdGhlIGhvc3QgKi8KKwkJaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApIHsKKwkJCWQgPSBlcF9kZXNjIChnYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwkJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPmluX2VwID0gZXA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJLyogb25lIGVuZHBvaW50IGp1c3QgcmVhZHMgT1VUIHBhY2tldHMgKi8KKwkJfSBlbHNlIGlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9PVVRfTkFNRSkgPT0gMCkgeworCQkJZCA9IGVwX2Rlc2MgKGdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJZGV2LT5vdXRfZXAgPSBlcDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkvKiBpZ25vcmUgYW55IG90aGVyIGVuZHBvaW50cyAqLworCQl9IGVsc2UKKwkJCWNvbnRpbnVlOworCisJCS8qIHN0b3Agb24gZXJyb3IgKi8KKwkJRVJST1IgKGRldiwgImNhbid0IGVuYWJsZSAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmVzdWx0KTsKKwkJYnJlYWs7CisJfQorCisJLyogYWxsb2NhdGUgYSBidW5jaCBvZiByZWFkIGJ1ZmZlcnMgYW5kIHF1ZXVlIHRoZW0gYWxsIGF0IG9uY2UuCisJICogd2UgYnVmZmVyIGF0IG1vc3QgJ3FsZW4nIHRyYW5zZmVyczsgZmV3ZXIgaWYgYW55IG5lZWQgbW9yZQorCSAqIHRoYW4gJ2J1ZmxlbicgYnl0ZXMgZWFjaC4KKwkgKi8KKwlpZiAocmVzdWx0ID09IDApIHsKKwkJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJCXVuc2lnbmVkCQlpOworCisJCWVwID0gZGV2LT5vdXRfZXA7CisJCWZvciAoaSA9IDA7IGkgPCBxbGVuICYmIHJlc3VsdCA9PSAwOyBpKyspIHsKKwkJCXJlcSA9IGFsbG9jX2VwX3JlcSAoZXAsIGJ1Zmxlbik7CisJCQlpZiAocmVxKSB7CisJCQkJcmVxLT5jb21wbGV0ZSA9IGxvb3BiYWNrX2NvbXBsZXRlOworCQkJCXJlc3VsdCA9IHVzYl9lcF9xdWV1ZSAoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKHJlc3VsdCkKKwkJCQkJREJHIChkZXYsICIlcyBxdWV1ZSByZXEgLS0+ICVkXG4iLAorCQkJCQkJCWVwLT5uYW1lLCByZXN1bHQpOworCQkJfSBlbHNlCisJCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAocmVzdWx0ID09IDApCisJCURCRyAoZGV2LCAicWxlbiAlZCwgYnVmbGVuICVkXG4iLCBxbGVuLCBidWZsZW4pOworCisJLyogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbnVwIG9uIGVycm9yICovCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgemVyb19yZXNldF9jb25maWcgKHN0cnVjdCB6ZXJvX2RldiAqZGV2KQoreworCWlmIChkZXYtPmNvbmZpZyA9PSAwKQorCQlyZXR1cm47CisKKwlEQkcgKGRldiwgInJlc2V0IGNvbmZpZ1xuIik7CisKKwkvKiBqdXN0IGRpc2FibGUgZW5kcG9pbnRzLCBmb3JjaW5nIGNvbXBsZXRpb24gb2YgcGVuZGluZyBpL28uCisJICogYWxsIG91ciBjb21wbGV0aW9uIGhhbmRsZXJzIGZyZWUgdGhlaXIgcmVxdWVzdHMgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmIChkZXYtPmluX2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPmluX2VwKTsKKwkJZGV2LT5pbl9lcCA9IE5VTEw7CisJfQorCWlmIChkZXYtPm91dF9lcCkgeworCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCQlkZXYtPm91dF9lcCA9IE5VTEw7CisJfQorCWRldi0+Y29uZmlnID0gMDsKKwlkZWxfdGltZXIgKCZkZXYtPnJlc3VtZSk7Cit9CisKKy8qIGNoYW5nZSBvdXIgb3BlcmF0aW9uYWwgY29uZmlnLiAgdGhpcyBjb2RlIG11c3QgYWdyZWUgd2l0aCB0aGUgY29kZQorICogdGhhdCByZXR1cm5zIGNvbmZpZyBkZXNjcmlwdG9ycywgYW5kIGFsdHNldHRpbmcgY29kZS4KKyAqCisgKiBpdCdzIGFsc28gcmVzcG9uc2libGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgaW50ZXJhY3Rpb25zLiBzb21lCisgKiBjb25maWd1cmF0aW9ucyBtaWdodCBub3Qgd29yayB3aXRoIG91ciBjdXJyZW50IHBvd2VyIHNvdXJjZXMuCisgKgorICogbm90ZSB0aGF0IHNvbWUgZGV2aWNlIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2lsbCBjb25zdHJhaW4gd2hhdCB0aGlzCisgKiBjb2RlIGNhbiBkbywgcGVyaGFwcyBieSBkaXNhbGxvd2luZyBtb3JlIHRoYW4gb25lIGNvbmZpZ3VyYXRpb24gb3IKKyAqIGJ5IGxpbWl0aW5nIGNvbmZpZ3VyYXRpb24gY2hvaWNlcyAobGlrZSB0aGUgcHhhMnh4KS4KKyAqLworc3RhdGljIGludAoremVyb19zZXRfY29uZmlnIChzdHJ1Y3QgemVyb19kZXYgKmRldiwgdW5zaWduZWQgbnVtYmVyLCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OworCisJaWYgKG51bWJlciA9PSBkZXYtPmNvbmZpZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2FkZ2V0X2lzX3NhMTEwMCAoZ2FkZ2V0KSAmJiBkZXYtPmNvbmZpZykgeworCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCisJCUlORk8gKGRldiwgImNhbid0IGNoYW5nZSBjb25maWd1cmF0aW9uc1xuIik7CisJCXJldHVybiAtRVNQSVBFOworCX0KKwl6ZXJvX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKworCXN3aXRjaCAobnVtYmVyKSB7CisJY2FzZSBDT05GSUdfU09VUkNFX1NJTks6CisJCXJlc3VsdCA9IHNldF9zb3VyY2Vfc2lua19jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfTE9PUEJBQ0s6CisJCXJlc3VsdCA9IHNldF9sb29wYmFja19jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSAwOgorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWlmICghcmVzdWx0ICYmICghZGV2LT5pbl9lcCB8fCAhZGV2LT5vdXRfZXApKQorCQlyZXN1bHQgPSAtRU5PREVWOworCWlmIChyZXN1bHQpCisJCXplcm9fcmVzZXRfY29uZmlnIChkZXYpOworCWVsc2UgeworCQljaGFyICpzcGVlZDsKKworCQlzd2l0Y2ggKGdhZGdldC0+c3BlZWQpIHsKKwkJY2FzZSBVU0JfU1BFRURfTE9XOglzcGVlZCA9ICJsb3ciOyBicmVhazsKKwkJY2FzZSBVU0JfU1BFRURfRlVMTDoJc3BlZWQgPSAiZnVsbCI7IGJyZWFrOworCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsgYnJlYWs7CisJCWRlZmF1bHQ6IAkJc3BlZWQgPSAiPyI7IGJyZWFrOworCQl9CisKKwkJZGV2LT5jb25maWcgPSBudW1iZXI7CisJCUlORk8gKGRldiwgIiVzIHNwZWVkIGNvbmZpZyAjJWQ6ICVzXG4iLCBzcGVlZCwgbnVtYmVyLAorCQkJCShudW1iZXIgPT0gQ09ORklHX1NPVVJDRV9TSU5LKQorCQkJCQk/IHNvdXJjZV9zaW5rIDogbG9vcGJhY2spOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB6ZXJvX3NldHVwX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcgKChzdHJ1Y3QgemVyb19kZXYgKikgZXAtPmRyaXZlcl9kYXRhLAorCQkJCSJzZXR1cCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworfQorCisvKgorICogVGhlIHNldHVwKCkgY2FsbGJhY2sgaW1wbGVtZW50cyBhbGwgdGhlIGVwMCBmdW5jdGlvbmFsaXR5IHRoYXQncworICogbm90IGhhbmRsZWQgbG93ZXIgZG93biwgaW4gaGFyZHdhcmUgb3IgdGhlIGhhcmR3YXJlIGRyaXZlciAobGlrZQorICogZGV2aWNlIGFuZCBlbmRwb2ludCBmZWF0dXJlIGZsYWdzLCBhbmQgdGhlaXIgc3RhdHVzKS4gIEl0J3MgYWxsCisgKiBob3VzZWtlZXBpbmcgZm9yIHRoZSBnYWRnZXQgZnVuY3Rpb24gd2UncmUgaW1wbGVtZW50aW5nLiAgTW9zdCBvZgorICogdGhlIHdvcmsgaXMgaW4gY29uZmlnLXNwZWNpZmljIHNldHVwLgorICovCitzdGF0aWMgaW50Cit6ZXJvX3NldHVwIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCB6ZXJvX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGRldi0+cmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3X3ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNgkJCXdfbGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCS8qIHVzdWFsbHkgdGhpcyBzdG9yZXMgcmVwbHkgZGF0YSBpbiB0aGUgcHJlLWFsbG9jYXRlZCBlcDAgYnVmZmVyLAorCSAqIGJ1dCBjb25maWcgY2hhbmdlIGV2ZW50cyB3aWxsIHJlY29uZmlndXJlIGhhcmR3YXJlLgorCSAqLworCXJlcS0+emVybyA9IDA7CisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCisJY2FzZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlnb3RvIHVua25vd247CisJCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgZGV2aWNlX2Rlc2MpOworCQkJbWVtY3B5IChyZXEtPmJ1ZiwgJmRldmljZV9kZXNjLCB2YWx1ZSk7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZfcXVhbGlmaWVyKTsKKwkJCW1lbWNweSAocmVxLT5idWYsICZkZXZfcXVhbGlmaWVyLCB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJLy8gRkFMTFRIUk9VR0gKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJdmFsdWUgPSBjb25maWdfYnVmIChnYWRnZXQsIHJlcS0+YnVmLAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfU1RSSU5HOgorCQkJLyogd0luZGV4ID09IGxhbmd1YWdlIGNvZGUuCisJCQkgKiB0aGlzIGRyaXZlciBvbmx5IGhhbmRsZXMgb25lIGxhbmd1YWdlLCB5b3UgY2FuCisJCQkgKiBhZGQgc3RyaW5nIHRhYmxlcyBmb3Igb3RoZXIgbGFuZ3VhZ2VzLCB1c2luZworCQkJICogYW55IFVURi04IGNoYXJhY3RlcnMKKwkJCSAqLworCQkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgKCZzdHJpbmd0YWIsCisJCQkJCXdfdmFsdWUgJiAweGZmLCByZXEtPmJ1Zik7CisJCQlpZiAodmFsdWUgPj0gMCkKKwkJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJLyogY3VycmVudGx5IHR3byBjb25maWdzLCB0d28gc3BlZWRzICovCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCisJCQlnb3RvIHVua25vd247CisJCWlmIChnYWRnZXQtPmFfaG5wX3N1cHBvcnQpCisJCQlEQkcgKGRldiwgIkhOUCBhdmFpbGFibGVcbiIpOworCQllbHNlIGlmIChnYWRnZXQtPmFfYWx0X2hucF9zdXBwb3J0KQorCQkJREJHIChkZXYsICJITlAgbmVlZHMgYSBkaWZmZXJlbnQgcm9vdCBwb3J0XG4iKTsKKwkJZWxzZQorCQkJVkRCRyAoZGV2LCAiSE5QIGluYWN0aXZlXG4iKTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJdmFsdWUgPSB6ZXJvX3NldF9jb25maWcgKGRldiwgd192YWx1ZSwgR0ZQX0FUT01JQyk7CisJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCisJCQlnb3RvIHVua25vd247CisJCSoodTggKilyZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOworCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIDEpOworCQlicmVhazsKKworCS8qIHVudGlsIHdlIGFkZCBhbHRzZXR0aW5nIHN1cHBvcnQsIG9yIG90aGVyIGludGVyZmFjZXMsCisJICogb25seSAwLzAgYXJlIHBvc3NpYmxlLiAgcHhhMnh4IG9ubHkgc3VwcG9ydHMgMC8wIChwb29ybHkpCisJICogYW5kIGFscmVhZHkga2lsbGVkIHBlbmRpbmcgZW5kcG9pbnQgSS9PLgorCSAqLworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisJCQlnb3RvIHVua25vd247CisJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCWlmIChkZXYtPmNvbmZpZyAmJiB3X2luZGV4ID09IDAgJiYgd192YWx1ZSA9PSAwKSB7CisJCQl1OAkJY29uZmlnID0gZGV2LT5jb25maWc7CisKKwkJCS8qIHJlc2V0cyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgZm9yZ2V0cyBhYm91dAorCQkJICogcHJldmlvdXMgdHJhbnNhY3Rpb24gc3RhdGUgKHF1ZXVlZCBidWZzLCBldGMpCisJCQkgKiBhbmQgcmUtaW5pdHMgZW5kcG9pbnQgc3RhdGUgKHRvZ2dsZSBldGMpCisJCQkgKiBubyByZXNwb25zZSBxdWV1ZWQsIGp1c3QgemVybyBzdGF0dXMgPT0gc3VjY2Vzcy4KKwkJCSAqIGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lIGludGVyZmFjZSB3ZSBjb3VsZG4ndAorCQkJICogdXNlIHRoaXMgInJlc2V0IHRoZSBjb25maWciIHNob3J0Y3V0LgorCQkJICovCisJCQl6ZXJvX3Jlc2V0X2NvbmZpZyAoZGV2KTsKKwkJCXplcm9fc2V0X2NvbmZpZyAoZGV2LCBjb25maWcsIEdGUF9BVE9NSUMpOworCQkJdmFsdWUgPSAwOworCQl9CisJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlnb3RvIHVua25vd247CisJCWlmICghZGV2LT5jb25maWcpCisJCQlicmVhazsKKwkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJdmFsdWUgPSAtRURPTTsKKwkJCWJyZWFrOworCQl9CisJCSoodTggKilyZXEtPmJ1ZiA9IDA7CisJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIHNhbWUgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3RzIHN1cHBvcnRlZCBieQorCSAqIEludGVsJ3MgVVNCIDIuMCBjb21wbGlhbmNlIHRlc3QgZGV2aWNlcy4gIFdlIGV4Y2VlZCB0aGF0CisJICogZGV2aWNlIHNwZWMgYnkgYWxsb3dpbmcgbXVsdGlwbGUtcGFja2V0IHJlcXVlc3RzLgorCSAqLworCWNhc2UgMHg1YjoJLyogY29udHJvbCBXUklURSB0ZXN0IC0tIGZpbGwgdGhlIGJ1ZmZlciAqLworCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX09VVHxVU0JfVFlQRV9WRU5ET1IpKQorCQkJZ290byB1bmtub3duOworCQlpZiAod192YWx1ZSB8fCB3X2luZGV4KQorCQkJYnJlYWs7CisJCS8qIGp1c3QgcmVhZCB0aGF0IG1hbnkgYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCisJCWlmICh3X2xlbmd0aCA+IFVTQl9CVUZTSVopCisJCQlicmVhazsKKwkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJYnJlYWs7CisJY2FzZSAweDVjOgkvKiBjb250cm9sIFJFQUQgdGVzdCAtLSByZXR1cm4gdGhlIGJ1ZmZlciAqLworCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9UWVBFX1ZFTkRPUikpCisJCQlnb3RvIHVua25vd247CisJCWlmICh3X3ZhbHVlIHx8IHdfaW5kZXgpCisJCQlicmVhazsKKwkJLyogZXhwZWN0IHRob3NlIGJ5dGVzIGFyZSBzdGlsbCBpbiB0aGUgYnVmZmVyOyBzZW5kIGJhY2sgKi8KKwkJaWYgKHdfbGVuZ3RoID4gVVNCX0JVRlNJWgorCQkJCXx8IHdfbGVuZ3RoICE9IHJlcS0+bGVuZ3RoKQorCQkJYnJlYWs7CisJCXZhbHVlID0gd19sZW5ndGg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKK3Vua25vd246CisJCVZEQkcgKGRldiwKKwkJCSJ1bmtub3duIGNvbnRyb2wgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJfQorCisJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KKwlpZiAodmFsdWUgPj0gMCkgeworCQlyZXEtPmxlbmd0aCA9IHZhbHVlOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdfbGVuZ3RoOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCURCRyAoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQlyZXEtPnN0YXR1cyA9IDA7CisJCQl6ZXJvX3NldHVwX2NvbXBsZXRlIChnYWRnZXQtPmVwMCwgcmVxKTsKKwkJfQorCX0KKworCS8qIGRldmljZSBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQKK3plcm9fZGlzY29ubmVjdCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXplcm9fcmVzZXRfY29uZmlnIChkZXYpOworCisJLyogYSBtb3JlIHNpZ25pZmljYW50IGFwcGxpY2F0aW9uIG1pZ2h0IGhhdmUgc29tZSBub24tdXNiCisJICogYWN0aXZpdGllcyB0byBxdWllc2NlIGhlcmUsIHNhdmluZyByZXNvdXJjZXMgbGlrZSBwb3dlcgorCSAqIG9yIHB1c2hpbmcgdGhlIG5vdGlmaWNhdGlvbiB1cCBhIG5ldHdvcmsgc3RhY2suCisJICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbmV4dCB3ZSBtYXkgZ2V0IHNldHVwKCkgY2FsbHMgdG8gZW51bWVyYXRlIG5ldyBjb25uZWN0aW9uczsKKwkgKiBvciBhbiB1bmJpbmQoKSBkdXJpbmcgc2h1dGRvd24gKGluY2x1ZGluZyByZW1vdmluZyBtb2R1bGUpLgorCSAqLworfQorCitzdGF0aWMgdm9pZAoremVyb19hdXRvcmVzdW1lICh1bnNpZ25lZCBsb25nIF9kZXYpCit7CisJc3RydWN0IHplcm9fZGV2CSpkZXYgPSAoc3RydWN0IHplcm9fZGV2ICopIF9kZXY7CisJaW50CQlzdGF0dXM7CisKKwkvKiBub3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCisJICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmcuLi4KKwkgKi8KKwlpZiAoZGV2LT5nYWRnZXQtPnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCXN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwIChkZXYtPmdhZGdldCk7CisJCURCRyAoZGV2LCAid2FrZXVwIC0tPiAlZFxuIiwgc3RhdHVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit6ZXJvX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlEQkcgKGRldiwgInVuYmluZFxuIik7CisKKwkvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCisJaWYgKGRldi0+cmVxKQorCQlmcmVlX2VwX3JlcSAoZ2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwlkZWxfdGltZXJfc3luYyAoJmRldi0+cmVzdW1lKTsKKwlrZnJlZSAoZGV2KTsKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3plcm9fYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXY7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogQnVsay1vbmx5IGRyaXZlcnMgbGlrZSB0aGlzIG9uZSBTSE9VTEQgYmUgYWJsZSB0bworCSAqIGF1dG9jb25maWd1cmUgb24gYW55IHNhbmUgdXNiIGNvbnRyb2xsZXIgZHJpdmVyLAorCSAqIGJ1dCB0aGVyZSBtYXkgYWxzbyBiZSBpbXBvcnRhbnQgcXVpcmtzIHRvIGFkZHJlc3MuCisJICovCisJdXNiX2VwX2F1dG9jb25maWdfcmVzZXQgKGdhZGdldCk7CisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyAoZ2FkZ2V0LCAmZnNfc291cmNlX2Rlc2MpOworCWlmICghZXApIHsKK2F1dG9jb25mX2ZhaWw6CisJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBjYW4ndCBhdXRvY29uZmlndXJlIG9uICVzXG4iLAorCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJRVBfSU5fTkFNRSA9IGVwLT5uYW1lOworCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSAqLworCQorCWVwID0gdXNiX2VwX2F1dG9jb25maWcgKGdhZGdldCwgJmZzX3NpbmtfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRvY29uZl9mYWlsOworCUVQX09VVF9OQU1FID0gZXAtPm5hbWU7CisJZXAtPmRyaXZlcl9kYXRhID0gZXA7CS8qIGNsYWltICovCisKKworCS8qCisJICogRFJJVkVSIFBPTElDWSBDSE9JQ0U6ICB5b3UgbWF5IHdhbnQgdG8gZG8gdGhpcyBkaWZmZXJlbnRseS4KKwkgKiBPbmUgdGhpbmcgdG8gYXZvaWQgaXMgcmV1c2luZyBhIGJjZERldmljZSByZXZpc2lvbiBjb2RlCisJICogd2l0aCBkaWZmZXJlbnQgaG9zdC12aXNpYmxlIGNvbmZpZ3VyYXRpb25zIG9yIGJlaGF2aW9yCisJICogcmVzdHJpY3Rpb25zIC0tIHVzaW5nIGVwMWluL2VwMm91dCB2cyBlcDFvdXQvZXAzaW4sIGV0YworCSAqLworCWlmIChnYWRnZXRfaXNfbmV0MjI4MCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YSAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDMpOworI2lmIDAKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zaChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNCk7CisJCS8qIFNIIGhhcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uOyBzZWUgImxvb3BkZWZhdWx0IiAqLworCQlkZXZpY2VfZGVzYy5iTnVtQ29uZmlndXJhdGlvbnMgPSAxOworCQkvKiBGSVhNRSBtYWtlIDEgPT0gZGVmYXVsdC5iQ29uZmlndXJhdGlvblZhbHVlICovCisjZW5kaWYKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19zYTExMDAgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA1KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19nb2t1IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4IChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNyk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfb21hcCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDgpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2xoN2E0MHgoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDkpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX245NjA0KGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEwKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEyN3goZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzYzI0MTAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTIpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2F0OTEoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTMpOworCX0gZWxzZSB7CisJCS8qIGdhZGdldCB6ZXJvIGlzIHNvIHNpbXBsZSAoZm9yIG5vdywgbm8gYWx0c2V0dGluZ3MpIHRoYXQKKwkJICogaXQgU0hPVUxEIE5PVCBoYXZlIHByb2JsZW1zIHdpdGggYnVsay1jYXBhYmxlIGhhcmR3YXJlLgorCQkgKiBzbyB3YXJuIGFib3V0IHVucmNvZ25pemVkIGNvbnRyb2xsZXJzLCBkb24ndCBwYW5pYy4KKwkJICoKKwkJICogdGhpbmdzIGxpa2UgY29uZmlndXJhdGlvbiBhbmQgYWx0c2V0dGluZyBudW1iZXJpbmcKKwkJICogY2FuIG5lZWQgaGFyZHdhcmUtc3BlY2lmaWMgYXR0ZW50aW9uIHRob3VnaC4KKwkJICovCisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAorCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDk5OTkpOworCX0KKworCisJLyogb2ssIHdlIG1hZGUgc2Vuc2Ugb2YgdGhlIGhhcmR3YXJlIC4uLiAqLworCWRldiA9IGttYWxsb2MgKHNpemVvZiAqZGV2LCBTTEFCX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOworCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOworCisJLyogcHJlYWxsb2NhdGUgY29udHJvbCByZXNwb25zZSBhbmQgYnVmZmVyICovCisJZGV2LT5yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZ2FkZ2V0LT5lcDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yZXEpCisJCWdvdG8gZW5vbWVtOworCWRldi0+cmVxLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyIChnYWRnZXQtPmVwMCwgVVNCX0JVRlNJWiwKKwkJCQkmZGV2LT5yZXEtPmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJlcS0+YnVmKQorCQlnb3RvIGVub21lbTsKKworCWRldi0+cmVxLT5jb21wbGV0ZSA9IHplcm9fc2V0dXBfY29tcGxldGU7CisKKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJLyogYXNzdW1lIGVwMCB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciBib3RoIHNwZWVkcyAuLi4gKi8KKwlkZXZfcXVhbGlmaWVyLmJNYXhQYWNrZXRTaXplMCA9IGRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMDsKKworCS8qIGFuZCB0aGF0IGFsbCBlbmRwb2ludHMgYXJlIGR1YWwtc3BlZWQgKi8KKwloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0gZnNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworI2VuZGlmCisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQlzb3VyY2Vfc2lua19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJbG9vcGJhY2tfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJfQorCisJaWYgKGdhZGdldC0+aXNfb3RnKSB7CisJCW90Z19kZXNjcmlwdG9yLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKKwkJc291cmNlX3NpbmtfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJCWxvb3BiYWNrX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkIChnYWRnZXQpOworCisJaW5pdF90aW1lciAoJmRldi0+cmVzdW1lKTsKKwlkZXYtPnJlc3VtZS5mdW5jdGlvbiA9IHplcm9fYXV0b3Jlc3VtZTsKKwlkZXYtPnJlc3VtZS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwlpZiAoYXV0b3Jlc3VtZSkgeworCQlzb3VyY2Vfc2lua19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJbG9vcGJhY2tfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJfQorCisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZGV2OworCisJSU5GTyAoZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgbG9uZ25hbWUpOworCUlORk8gKGRldiwgInVzaW5nICVzLCBPVVQgJXMgSU4gJXNcbiIsIGdhZGdldC0+bmFtZSwKKwkJRVBfT1VUX05BTUUsIEVQX0lOX05BTUUpOworCisJc25wcmludGYgKG1hbnVmYWN0dXJlciwgc2l6ZW9mIG1hbnVmYWN0dXJlciwgIiVzICVzIHdpdGggJXMiLAorCQlzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lLCBzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLAorCQlnYWRnZXQtPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2Vub21lbToKKwl6ZXJvX3VuYmluZCAoZ2FkZ2V0KTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3plcm9fc3VzcGVuZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuOworCisJaWYgKGF1dG9yZXN1bWUpIHsKKwkJbW9kX3RpbWVyICgmZGV2LT5yZXN1bWUsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7CisJCURCRyAoZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOworCX0gZWxzZQorCQlEQkcgKGRldiwgInN1c3BlbmRcbiIpOworfQorCitzdGF0aWMgdm9pZAoremVyb19yZXN1bWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHplcm9fZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJREJHIChkZXYsICJyZXN1bWVcbiIpOworCWRlbF90aW1lciAoJmRldi0+cmVzdW1lKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIHplcm9fZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorI2VuZGlmCisJLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCisJLmJpbmQJCT0gemVyb19iaW5kLAorCS51bmJpbmQJCT0gemVyb191bmJpbmQsCisKKwkuc2V0dXAJCT0gemVyb19zZXR1cCwKKwkuZGlzY29ubmVjdAk9IHplcm9fZGlzY29ubmVjdCwKKworCS5zdXNwZW5kCT0gemVyb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gemVyb19yZXN1bWUsCisKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAuc2h1dGRvd24gPSAuLi4KKwkJLy8gLnN1c3BlbmQgPSAuLi4KKwkJLy8gLnJlc3VtZSA9IC4uLgorCX0sCit9OworCitNT0RVTEVfQVVUSE9SICgiRGF2aWQgQnJvd25lbGwiKTsKK01PRFVMRV9MSUNFTlNFICgiRHVhbCBCU0QvR1BMIik7CisKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwkvKiBhIHJlYWwgdmFsdWUgd291bGQgbGlrZWx5IGNvbWUgdGhyb3VnaCBzb21lIGlkIHByb20KKwkgKiBvciBtb2R1bGUgb3B0aW9uLiAgdGhpcyBvbmUgdGFrZXMgYXQgbGVhc3QgdHdvIHBhY2tldHMuCisJICovCisJc3RybGNweSAoc2VyaWFsLCAiMDEyMzQ1Njc4OS4wMTIzNDU2Nzg5LjAxMjM0NTY3ODkiLCBzaXplb2Ygc2VyaWFsKTsKKworCXJldHVybiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoJnplcm9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpCit7CisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoJnplcm9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0IChjbGVhbnVwKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTZjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTAsMCArMSwxMjYgQEAKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitjb21tZW50ICJVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9FSENJX0hDRAorCXRyaXN0YXRlICJFSENJIEhDRCAoVVNCIDIuMCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBQQ0kKKwktLS1oZWxwLS0tCisJICBUaGUgRW5oYW5jZWQgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoRUhDSSkgaXMgc3RhbmRhcmQgZm9yIFVTQiAyLjAKKwkgICJoaWdoIHNwZWVkIiAoNDgwIE1iaXQvc2VjLCA2MCBNYnl0ZS9zZWMpIGhvc3QgY29udHJvbGxlciBoYXJkd2FyZS4KKwkgIElmIHlvdXIgVVNCIGhvc3QgY29udHJvbGxlciBzdXBwb3J0cyBVU0IgMi4wLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworCSAgY29uZmlndXJlIHRoaXMgSG9zdCBDb250cm9sbGVyIERyaXZlci4gIEF0IHRoaXMgd3JpdGluZywgdGhlIHByaW1hcnkKKwkgIGltcGxlbWVudGF0aW9uIG9mIEVIQ0kgaXMgYSBjaGlwIGZyb20gTkVDLCB3aWRlbHkgYXZhaWxhYmxlIGluIGFkZC1vbgorCSAgUENJIGNhcmRzLCBidXQgaW1wbGVtZW50YXRpb25zIGFyZSBpbiB0aGUgd29ya3MgZnJvbSBvdGhlciB2ZW5kb3JzCisJICBpbmNsdWRpbmcgSW50ZWwgYW5kIFBoaWxpcHMuICBNb3RoZXJib2FyZCBzdXBwb3J0IGlzIGFwcGVhcmluZy4KKworCSAgRUhDSSBjb250cm9sbGVycyBhcmUgcGFja2FnZWQgd2l0aCAiY29tcGFuaW9uIiBob3N0IGNvbnRyb2xsZXJzIChPSENJCisJICBvciBVSENJKSB0byBoYW5kbGUgVVNCIDEuMSBkZXZpY2VzIGNvbm5lY3RlZCB0byByb290IGh1YiBwb3J0cy4gIFBvcnRzCisJICB3aWxsIGNvbm5lY3QgdG8gRUhDSSBpZiBpdCB0aGUgZGV2aWNlIGlzIGhpZ2ggc3BlZWQsIG90aGVyd2lzZSB0aGV5CisJICBjb25uZWN0IHRvIGEgY29tcGFuaW9uIGNvbnRyb2xsZXIuICBJZiB5b3UgY29uZmlndXJlIEVIQ0ksIHlvdSBzaG91bGQKKwkgIHByb2JhYmx5IGNvbmZpZ3VyZSB0aGUgT0hDSSAoZm9yIE5FQyBhbmQgc29tZSBvdGhlciB2ZW5kb3JzKSBVU0IgSG9zdAorCSAgQ29udHJvbGxlciBEcml2ZXIgb3IgVUhDSSAoZm9yIFZpYSBtb3RoZXJib2FyZHMpIEhvc3QgQ29udHJvbGxlcgorCSAgRHJpdmVyIHRvby4KKworCSAgWW91IG1heSB3YW50IHRvIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvZWhjaS50eHQ+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlaGNpLWhjZC4KKworY29uZmlnIFVTQl9FSENJX1NQTElUX0lTTworCWJvb2wgIkZ1bGwgc3BlZWQgSVNPIHRyYW5zYWN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGNvZGUgaXMgbmV3IGFuZCBoYXNuJ3QgYmVlbiB1c2VkIHdpdGggbWFueSBkaWZmZXJlbnQKKwkgIEVIQ0kgb3IgVVNCIDIuMCB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yIGltcGxlbWVudGF0aW9ucy4KKwkgIEl0IHNob3VsZCB3b3JrIGZvciBJU08tT1VUIHRyYW5zZmVycywgbGlrZSBhdWRpby4KKworY29uZmlnIFVTQl9FSENJX1JPT1RfSFVCX1RUCisJYm9vbCAiUm9vdCBIdWIgVHJhbnNhY3Rpb24gVHJhbnNsYXRvcnMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU29tZSBFSENJIGNoaXBzIGhhdmUgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMgdG8gaW50ZWdyYXRlCisJICB0cmFuc2FjdGlvbiB0cmFuc2xhdG9ycywgc28gdGhhdCBubyBPSENJIG9yIFVIQ0kgY29tcGFuaW9uCisJICBjb250cm9sbGVyIGlzIG5lZWRlZC4gIEl0J3Mgc2FmZSB0byBzYXkgInkiIGV2ZW4gaWYgeW91cgorCSAgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgorCisJICBUaGlzIHN1cHBvcnRzIHRoZSBFSENJIGltcGxlbWVudGF0aW9uIGZyb20gVHJhbnNEaW1lbnNpb24gSW5jLgorCitjb25maWcgVVNCX09IQ0lfSENECisJdHJpc3RhdGUgIk9IQ0kgSENEIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0FSQ0hfSEFTX09IQ0kKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKKwktLS1oZWxwLS0tCisJICBUaGUgT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChPSENJKSBpcyBhIHN0YW5kYXJkIGZvciBhY2Nlc3NpbmcKKwkgIFVTQiAxLjEgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLiAgSXQgZG9lcyBtb3JlIGluIGhhcmR3YXJlIHRoYW4gSW50ZWwncworCSAgVUhDSSBzcGVjaWZpY2F0aW9uLiAgSWYgeW91ciBVU0IgaG9zdCBjb250cm9sbGVyIGZvbGxvd3MgdGhlIE9IQ0kgc3BlYywKKwkgIHNheSBZLiAgT24gbW9zdCBub24teDg2IHN5c3RlbXMsIGFuZCBvbiB4ODYgaGFyZHdhcmUgdGhhdCdzIG5vdCB1c2luZyBhCisJICBVU0IgY29udHJvbGxlciBmcm9tIEludGVsIG9yIFZJQSwgdGhpcyBpcyBhcHByb3ByaWF0ZS4gIElmIHlvdXIgaG9zdAorCSAgY29udHJvbGxlciBkb2Vzbid0IHVzZSBQQ0ksIHRoaXMgaXMgcHJvYmFibHkgYXBwcm9wcmlhdGUuICBGb3IgYSBQQ0kKKwkgIGJhc2VkIHN5c3RlbSB3aGVyZSB5b3UncmUgbm90IHN1cmUsIHRoZSAibHNwY2kgLXYiIGVudHJ5IHdpbGwgbGlzdCB0aGUKKwkgIHJpZ2h0ICJwcm9nLWlmIiBmb3IgeW91ciBVU0IgY29udHJvbGxlcihzKTogIEVIQ0ksIE9IQ0ksIG9yIFVIQ0kuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9oY2ktaGNkLgorCitjb25maWcgVVNCX09IQ0lfSENEX1BQQ19TT0MKKwlib29sICJPSENJIHN1cHBvcnQgZm9yIG9uLWNoaXAgUFBDIFVTQiBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gVVNCX09IQ0lfSENEICYmIChTVEIwM3h4eCB8fCBQUENfTVBDNTJ4eCkKKwlkZWZhdWx0IHkKKwlzZWxlY3QgVVNCX09IQ0lfQklHX0VORElBTgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFVTQiBjb250cm9sbGVyIG9uIHRoZSBNUEM1Mnh4IG9yCisJICBTVEIwM3h4eCBwcm9jZXNzb3IgY2hpcC4gIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBVU0JfT0hDSV9IQ0RfUENJCisJYm9vbCAiT0hDSSBzdXBwb3J0IGZvciBQQ0ktYnVzIFVTQiBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRCAmJiBQQ0kgJiYgKFNUQjAzeHh4IHx8IFBQQ19NUEM1Mnh4KQorCWRlZmF1bHQgeQorCXNlbGVjdCBVU0JfT0hDSV9MSVRUTEVfRU5ESUFOCisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBQQ0ktYnVzIHBsdWctaW4gVVNCIGNvbnRyb2xsZXIgY2FyZHMuCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgVVNCX09IQ0lfQklHX0VORElBTgorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRAorCWRlZmF1bHQgbgorCitjb25maWcgVVNCX09IQ0lfTElUVExFX0VORElBTgorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRAorCWRlZmF1bHQgbiBpZiBTVEIwM3h4eCB8fCBQUENfTVBDNTJ4eAorCWRlZmF1bHQgeQorCitjb25maWcgVVNCX1VIQ0lfSENECisJdHJpc3RhdGUgIlVIQ0kgSENEIChtb3N0IEludGVsIGFuZCBWSUEpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgUENJCisJLS0taGVscC0tLQorCSAgVGhlIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgYnkgSW50ZWwgZm9yCisJICBhY2Nlc3NpbmcgdGhlIFVTQiBoYXJkd2FyZSBpbiB0aGUgUEMgKHdoaWNoIGlzIGFsc28gY2FsbGVkIHRoZSBVU0IKKwkgIGhvc3QgY29udHJvbGxlcikuIElmIHlvdXIgVVNCIGhvc3QgY29udHJvbGxlciBjb25mb3JtcyB0byB0aGlzCisJICBzdGFuZGFyZCwgeW91IG1heSB3YW50IHRvIHNheSBZLCBidXQgc2VlIGJlbG93LiBBbGwgcmVjZW50IGJvYXJkcworCSAgd2l0aCBJbnRlbCBQQ0kgY2hpcHNldHMgKGxpa2UgaW50ZWwgNDMwVFgsIDQ0MEZYLCA0NDBMWCwgNDQwQlgsCisJICBpODEwLCBpODIwKSBjb25mb3JtIHRvIHRoaXMgc3RhbmRhcmQuIEFsc28gYWxsIFZJQSBQQ0kgY2hpcHNldHMKKwkgIChsaWtlIFZJQSBWUDIsIFZQMywgTVZQMywgQXBvbGxvIFBybywgQXBvbGxvIFBybyBJSSBvciBBcG9sbG8gUHJvCisJICAxMzMpLiBJZiB1bnN1cmUsIHNheSBZLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1aGNpLWhjZC4KKworY29uZmlnIFVTQl9TTDgxMV9IQ0QKKwl0cmlzdGF0ZSAiU0w4MTFIUyBIQ0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgTgorCWhlbHAKKwkgIFRoZSBTTDgxMUhTIGlzIGEgc2luZ2xlLXBvcnQgVVNCIGNvbnRyb2xsZXIgdGhhdCBzdXBwb3J0cyBlaXRoZXIKKwkgIGhvc3Qgc2lkZSBvciBwZXJpcGhlcmFsIHNpZGUgcm9sZXMuICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91cgorCSAgYm9hcmQgaGFzIHRoaXMgY2hpcCwgYW5kIHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIGhvc3QgY29udHJvbGxlci4gCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbDgxMS1oY2QuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzRjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyCisjIGZyYW1ld29yayBhbmQgZHJpdmVycworIworCitvYmotJChDT05GSUdfVVNCX0VIQ0lfSENEKQkrPSBlaGNpLWhjZC5vCitvYmotJChDT05GSUdfVVNCX09IQ0lfSENEKQkrPSBvaGNpLWhjZC5vCitvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSB1aGNpLWhjZC5vCitvYmotJChDT05GSUdfVVNCX1NMODExX0hDRCkJKz0gc2w4MTEtaGNkLm8KK29iai0kKENPTkZJR19FVFJBWF9BUkNIX1YxMCkJKz0gaGNfY3Jpc3YxMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1ZTJhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpAQCAtMCwwICsxLDc1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworI2RlZmluZSBlaGNpX2RiZyhlaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfZGJnIChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIGVoY2lfZXJyKGVoY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9lcnIgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgZWhjaV9pbmZvKGVoY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9pbmZvIChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIGVoY2lfd2FybihlaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfd2FybiAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciAsIGZtdCAsICMjIGFyZ3MgKQorCisjaWZkZWYgRUhDSV9WRVJCT1NFX0RFQlVHCisjCWRlZmluZSB2ZGJnIGRiZworIwlkZWZpbmUgZWhjaV92ZGJnIGVoY2lfZGJnCisjZWxzZQorIwlkZWZpbmUgdmRiZyhmbXQsYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorIwlkZWZpbmUgZWhjaV92ZGJnKGVoY2ksIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZglERUJVRworCisvKiBjaGVjayB0aGUgdmFsdWVzIGluIHRoZSBIQ1NQQVJBTVMgcmVnaXN0ZXIKKyAqIChob3N0IGNvbnRyb2xsZXIgX1N0cnVjdHVyYWxfIHBhcmFtZXRlcnMpCisgKiBzZWUgRUhDSSBzcGVjLCBUYWJsZSAyLTQgZm9yIGVhY2ggdmFsdWUKKyAqLworc3RhdGljIHZvaWQgZGJnX2hjc19wYXJhbXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgY2hhciAqbGFiZWwpCit7CisJdTMyCXBhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwllaGNpX2RiZyAoZWhjaSwKKwkJIiVzIGhjc19wYXJhbXMgMHgleCBkYmc9JWQlcyBjYz0lZCBwY2M9JWQlcyVzIHBvcnRzPSVkXG4iLAorCQlsYWJlbCwgcGFyYW1zLAorCQlIQ1NfREVCVUdfUE9SVCAocGFyYW1zKSwKKwkJSENTX0lORElDQVRPUiAocGFyYW1zKSA/ICIgaW5kIiA6ICIiLAorCQlIQ1NfTl9DQyAocGFyYW1zKSwKKwkJSENTX05fUENDIChwYXJhbXMpLAorCSAgICAgICAgSENTX1BPUlRST1VURUQgKHBhcmFtcykgPyAiIiA6ICIgb3JkZXJlZCIsCisJCUhDU19QUEMgKHBhcmFtcykgPyAiIiA6ICIgIXBwYyIsCisJCUhDU19OX1BPUlRTIChwYXJhbXMpCisJCSk7CisJLyogUG9ydCByb3V0aW5nLCBwZXIgRUhDSSAwLjk1IFNwZWMsIFNlY3Rpb24gMi4yLjUgKi8KKwlpZiAoSENTX1BPUlRST1VURUQgKHBhcmFtcykpIHsKKwkJaW50IGk7CisJCWNoYXIgYnVmIFs0Nl0sIHRtcCBbN10sIGJ5dGU7CisKKwkJYnVmWzBdID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEhDU19OX1BPUlRTIChwYXJhbXMpOyBpKyspIHsKKwkJCS8vIEZJWE1FIE1JUFMgd29uJ3QgcmVhZGIoKSAuLi4KKwkJCWJ5dGUgPSByZWFkYiAoJmVoY2ktPmNhcHMtPnBvcnRyb3V0ZVsoaT4+MSldKTsKKwkJCXNwcmludGYodG1wLCAiJWQgIiwgCisJCQkJKChpICYgMHgxKSA/ICgoYnl0ZSkmMHhmKSA6ICgoYnl0ZT4+NCkmMHhmKSkpOworCQkJc3RyY2F0KGJ1ZiwgdG1wKTsKKwkJfQorCQllaGNpX2RiZyAoZWhjaSwgIiVzIHBvcnRyb3V0ZSAlc1xuIiwKKwkJCQlsYWJlbCwgYnVmKTsKKwl9Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2hjc19wYXJhbXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgY2hhciAqbGFiZWwpIHt9CisKKyNlbmRpZgorCisjaWZkZWYJREVCVUcKKworLyogY2hlY2sgdGhlIHZhbHVlcyBpbiB0aGUgSENDUEFSQU1TIHJlZ2lzdGVyCisgKiAoaG9zdCBjb250cm9sbGVyIF9DYXBhYmlsaXR5XyBwYXJhbWV0ZXJzKQorICogc2VlIEVIQ0kgU3BlYywgVGFibGUgMi01IGZvciBlYWNoIHZhbHVlCisgKiAqLworc3RhdGljIHZvaWQgZGJnX2hjY19wYXJhbXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgY2hhciAqbGFiZWwpCit7CisJdTMyCXBhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CisKKwlpZiAoSENDX0lTT0NfQ0FDSEUgKHBhcmFtcykpIHsKKwkJZWhjaV9kYmcgKGVoY2ksCisJCSAgICAgIiVzIGhjY19wYXJhbXMgJTA0eCBjYWNoaW5nIGZyYW1lICVzJXMlc1xuIiwKKwkJICAgICBsYWJlbCwgcGFyYW1zLAorCQkgICAgIEhDQ19QR01fRlJBTUVMSVNUTEVOIChwYXJhbXMpID8gIjI1Ni81MTIvMTAyNCIgOiAiMTAyNCIsCisJCSAgICAgSENDX0NBTlBBUksgKHBhcmFtcykgPyAiIHBhcmsiIDogIiIsCisJCSAgICAgSENDXzY0QklUX0FERFIgKHBhcmFtcykgPyAiIDY0IGJpdCBhZGRyIiA6ICIiKTsKKwl9IGVsc2UgeworCQllaGNpX2RiZyAoZWhjaSwKKwkJICAgICAiJXMgaGNjX3BhcmFtcyAlMDR4IHRocmVzaCAlZCB1ZnJhbWVzICVzJXMlc1xuIiwKKwkJICAgICBsYWJlbCwKKwkJICAgICBwYXJhbXMsCisJCSAgICAgSENDX0lTT0NfVEhSRVMgKHBhcmFtcyksCisJCSAgICAgSENDX1BHTV9GUkFNRUxJU1RMRU4gKHBhcmFtcykgPyAiMjU2LzUxMi8xMDI0IiA6ICIxMDI0IiwKKwkJICAgICBIQ0NfQ0FOUEFSSyAocGFyYW1zKSA/ICIgcGFyayIgOiAiIiwKKwkJICAgICBIQ0NfNjRCSVRfQUREUiAocGFyYW1zKSA/ICIgNjQgYml0IGFkZHIiIDogIiIpOworCX0KK30KKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfaGNjX3BhcmFtcyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBjaGFyICpsYWJlbCkge30KKworI2VuZGlmCisKKyNpZmRlZglERUJVRworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19xdGQgKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3F0ZCAqcXRkKQoreworCWVoY2lfZGJnIChlaGNpLCAiJXMgdGQgJXAgbiUwOHggJTA4eCB0JTA4eCBwMD0lMDh4XG4iLCBsYWJlbCwgcXRkLAorCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X25leHQpLAorCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X2FsdF9uZXh0KSwKKwkJbGUzMl90b19jcHVwICgmcXRkLT5od190b2tlbiksCisJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfYnVmIFswXSkpOworCWlmIChxdGQtPmh3X2J1ZiBbMV0pCisJCWVoY2lfZGJnIChlaGNpLCAiICBwMT0lMDh4IHAyPSUwOHggcDM9JTA4eCBwND0lMDh4XG4iLAorCQkJbGUzMl90b19jcHVwICgmcXRkLT5od19idWYgWzFdKSwKKwkJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfYnVmIFsyXSksCisJCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X2J1ZiBbM10pLAorCQkJbGUzMl90b19jcHVwICgmcXRkLT5od19idWYgWzRdKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3FoIChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJZWhjaV9kYmcgKGVoY2ksICIlcyBxaCAlcCBuJTA4eCBpbmZvICV4ICV4IHF0ZCAleFxuIiwgbGFiZWwsCisJCXFoLCBxaC0+aHdfbmV4dCwgcWgtPmh3X2luZm8xLCBxaC0+aHdfaW5mbzIsCisJCXFoLT5od19jdXJyZW50KTsKKwlkYmdfcXRkICgib3ZlcmxheSIsIGVoY2ksIChzdHJ1Y3QgZWhjaV9xdGQgKikgJnFoLT5od19xdGRfbmV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX2l0ZCAoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfaXRkICppdGQpIAoreworCWVoY2lfZGJnIChlaGNpLCAiJXMgWyVkXSBpdGQgJXAsIG5leHQgJTA4eCwgdXJiICVwXG4iLAorCQlsYWJlbCwgaXRkLT5mcmFtZSwgaXRkLCBsZTMyX3RvX2NwdShpdGQtPmh3X25leHQpLCBpdGQtPnVyYik7CisJZWhjaV9kYmcgKGVoY2ksCisJCSIgIHRyYW5zOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzBdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvblsxXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bMl0pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzNdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvbls0XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bNV0pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzZdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvbls3XSkpOworCWVoY2lfZGJnIChlaGNpLAorCQkiICBidWY6ICAgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFswXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFsxXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFsyXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFszXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFs0XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFs1XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfYnVmcFs2XSkpOworCWVoY2lfZGJnIChlaGNpLCAiICBpbmRleDogJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJCWl0ZC0+aW5kZXhbMF0sIGl0ZC0+aW5kZXhbMV0sIGl0ZC0+aW5kZXhbMl0sCisJCWl0ZC0+aW5kZXhbM10sIGl0ZC0+aW5kZXhbNF0sIGl0ZC0+aW5kZXhbNV0sCisJCWl0ZC0+aW5kZXhbNl0sIGl0ZC0+aW5kZXhbN10pOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19zaXRkIChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9zaXRkICpzaXRkKSAKK3sKKwllaGNpX2RiZyAoZWhjaSwgIiVzIFslZF0gc2l0ZCAlcCwgbmV4dCAlMDh4LCB1cmIgJXBcbiIsCisJCWxhYmVsLCBzaXRkLT5mcmFtZSwgc2l0ZCwgbGUzMl90b19jcHUoc2l0ZC0+aHdfbmV4dCksIHNpdGQtPnVyYik7CisJZWhjaV9kYmcgKGVoY2ksCisJCSIgIGFkZHIgJTA4eCBzY2hlZCAlMDR4IHJlc3VsdCAlMDh4IGJ1ZiAlMDh4ICUwOHhcbiIsIAorCQlsZTMyX3RvX2NwdShzaXRkLT5od19mdWxsc3BlZWRfZXApLAorCQlsZTMyX3RvX2NwdShzaXRkLT5od191ZnJhbWUpLAorCQlsZTMyX3RvX2NwdShzaXRkLT5od19yZXN1bHRzKSwKKwkJbGUzMl90b19jcHUoc2l0ZC0+aHdfYnVmIFswXSksCisJCWxlMzJfdG9fY3B1KHNpdGQtPmh3X2J1ZiBbMV0pKTsKK30KKworc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19zdGF0dXNfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBzdGF0dXMpCit7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzc3RhdHVzICUwNHglcyVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgc3RhdHVzLAorCQkoc3RhdHVzICYgU1RTX0FTUykgPyAiIEFzeW5jIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX1BTUykgPyAiIFBlcmlvZGljIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX1JFQ0wpID8gIiBSZWNsIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0hBTFQpID8gIiBIYWx0IiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0lBQSkgPyAiIElBQSIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUU19GQVRBTCkgPyAiIEZBVEFMIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0ZMUikgPyAiIEZMUiIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUU19QQ0QpID8gIiBQQ0QiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfRVJSKSA/ICIgRVJSIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0lOVCkgPyAiIElOVCIgOiAiIgorCQkpOworfQorCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX2ludHJfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBlbmFibGUpCit7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzaW50cmVuYWJsZSAlMDJ4JXMlcyVzJXMlcyVzIiwKKwkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBlbmFibGUsCisJCShlbmFibGUgJiBTVFNfSUFBKSA/ICIgSUFBIiA6ICIiLAorCQkoZW5hYmxlICYgU1RTX0ZBVEFMKSA/ICIgRkFUQUwiIDogIiIsCisJCShlbmFibGUgJiBTVFNfRkxSKSA/ICIgRkxSIiA6ICIiLAorCQkoZW5hYmxlICYgU1RTX1BDRCkgPyAiIFBDRCIgOiAiIiwKKwkJKGVuYWJsZSAmIFNUU19FUlIpID8gIiBFUlIiIDogIiIsCisJCShlbmFibGUgJiBTVFNfSU5UKSA/ICIgSU5UIiA6ICIiCisJCSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBmbHNfc3RyaW5ncyBbXSA9CisgICAgeyAiMTAyNCIsICI1MTIiLCAiMjU2IiwgIj8/IiB9OworCitzdGF0aWMgaW50CitkYmdfY29tbWFuZF9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIGNvbW1hbmQpCit7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzY29tbWFuZCAlMDZ4ICVzPSVkIGl0aHJlc2g9JWQlcyVzJXMlcyBwZXJpb2Q9JXMlcyAlcyIsCisJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgY29tbWFuZCwKKwkJKGNvbW1hbmQgJiBDTURfUEFSSykgPyAicGFyayIgOiAiKHBhcmspIiwKKwkJQ01EX1BBUktfQ05UIChjb21tYW5kKSwKKwkJKGNvbW1hbmQgPj4gMTYpICYgMHgzZiwKKwkJKGNvbW1hbmQgJiBDTURfTFJFU0VUKSA/ICIgTFJlc2V0IiA6ICIiLAorCQkoY29tbWFuZCAmIENNRF9JQUFEKSA/ICIgSUFBRCIgOiAiIiwKKwkJKGNvbW1hbmQgJiBDTURfQVNFKSA/ICIgQXN5bmMiIDogIiIsCisJCShjb21tYW5kICYgQ01EX1BTRSkgPyAiIFBlcmlvZGljIiA6ICIiLAorCQlmbHNfc3RyaW5ncyBbKGNvbW1hbmQgPj4gMikgJiAweDNdLAorCQkoY29tbWFuZCAmIENNRF9SRVNFVCkgPyAiIFJlc2V0IiA6ICIiLAorCQkoY29tbWFuZCAmIENNRF9SVU4pID8gIlJVTiIgOiAiSEFMVCIKKwkJKTsKK30KKworc3RhdGljIGludAorZGJnX3BvcnRfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCBwb3J0LCB1MzIgc3RhdHVzKQoreworCWNoYXIJKnNpZzsKKworCS8qIHNpZ25hbGluZyBzdGF0ZSAqLworCXN3aXRjaCAoc3RhdHVzICYgKDMgPDwgMTApKSB7CisJY2FzZSAwIDw8IDEwOiBzaWcgPSAic2UwIjsgYnJlYWs7CisJY2FzZSAxIDw8IDEwOiBzaWcgPSAiayI7IGJyZWFrOwkJLyogbG93IHNwZWVkICovCisJY2FzZSAyIDw8IDEwOiBzaWcgPSAiaiI7IGJyZWFrOworCWRlZmF1bHQ6IHNpZyA9ICI/IjsgYnJlYWs7CisJfQorCisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCisJCSIlcyVzcG9ydCAlZCBzdGF0dXMgJTA2eCVzJXMgc2lnPSVzICVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgcG9ydCwgc3RhdHVzLAorCQkoc3RhdHVzICYgUE9SVF9QT1dFUikgPyAiIFBPV0VSIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9PV05FUikgPyAiIE9XTkVSIiA6ICIiLAorCQlzaWcsCisJCShzdGF0dXMgJiBQT1JUX1JFU0VUKSA/ICIgUkVTRVQiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX1NVU1BFTkQpID8gIiBTVVNQRU5EIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9SRVNVTUUpID8gIiBSRVNVTUUiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX09DQykgPyAiIE9DQyIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfT0MpID8gIiBPQyIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfUEVDKSA/ICIgUEVDIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9QRSkgPyAiIFBFIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9DU0MpID8gIiBDU0MiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX0NPTk5FQ1QpID8gIiBDT05ORUNUIiA6ICIiCisJICAgICk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfcWggKGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3t9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3N0YXR1c19idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIHN0YXR1cykKK3sgcmV0dXJuIDA7IH0KKworc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfY29tbWFuZF9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIGNvbW1hbmQpCit7IHJldHVybiAwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX2ludHJfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBlbmFibGUpCit7IHJldHVybiAwOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3BvcnRfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCBwb3J0LCB1MzIgc3RhdHVzKQoreyByZXR1cm4gMDsgfQorCisjZW5kaWYJLyogREVCVUcgKi8KKworLyogZnVuY3Rpb25zIGhhdmUgdGhlICJ3cm9uZyIgZmlsZW5hbWUgd2hlbiB0aGV5J3JlIG91dHB1dC4uLiAqLworI2RlZmluZSBkYmdfc3RhdHVzKGVoY2ksIGxhYmVsLCBzdGF0dXMpIHsgXAorCWNoYXIgX2J1ZiBbODBdOyBcCisJZGJnX3N0YXR1c19idWYgKF9idWYsIHNpemVvZiBfYnVmLCBsYWJlbCwgc3RhdHVzKTsgXAorCWVoY2lfZGJnIChlaGNpLCAiJXNcbiIsIF9idWYpOyBcCit9CisKKyNkZWZpbmUgZGJnX2NtZChlaGNpLCBsYWJlbCwgY29tbWFuZCkgeyBcCisJY2hhciBfYnVmIFs4MF07IFwKKwlkYmdfY29tbWFuZF9idWYgKF9idWYsIHNpemVvZiBfYnVmLCBsYWJlbCwgY29tbWFuZCk7IFwKKwllaGNpX2RiZyAoZWhjaSwgIiVzXG4iLCBfYnVmKTsgXAorfQorCisjZGVmaW5lIGRiZ19wb3J0KGVoY2ksIGxhYmVsLCBwb3J0LCBzdGF0dXMpIHsgXAorCWNoYXIgX2J1ZiBbODBdOyBcCisJZGJnX3BvcnRfYnVmIChfYnVmLCBzaXplb2YgX2J1ZiwgbGFiZWwsIHBvcnQsIHN0YXR1cyk7IFwKKwllaGNpX2RiZyAoZWhjaSwgIiVzXG4iLCBfYnVmKTsgXAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgU1RVQl9ERUJVR19GSUxFUworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmJ1cykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmJ1cykgeyB9CisKKyNlbHNlCisKKy8qIHRyb3VibGVzaG9vdGluZyBoZWxwOiBleHBvc2Ugc3RhdGUgaW4gZHJpdmVyZnMgKi8KKworI2RlZmluZSBzcGVlZF9jaGFyKGluZm8xKSAoeyBjaGFyIHRtcDsgXAorCQlzd2l0Y2ggKGluZm8xICYgKDMgPDwgMTIpKSB7IFwKKwkJY2FzZSAwIDw8IDEyOiB0bXAgPSAnZic7IGJyZWFrOyBcCisJCWNhc2UgMSA8PCAxMjogdG1wID0gJ2wnOyBicmVhazsgXAorCQljYXNlIDIgPDwgMTI6IHRtcCA9ICdoJzsgYnJlYWs7IFwKKwkJZGVmYXVsdDogdG1wID0gJz8nOyBicmVhazsgXAorCQl9OyB0bXA7IH0pCisKK3N0YXRpYyBpbmxpbmUgY2hhciB0b2tlbl9tYXJrIChfX2xlMzIgdG9rZW4pCit7CisJX191MzIgdiA9IGxlMzJfdG9fY3B1ICh0b2tlbik7CisJaWYgKHYgJiBRVERfU1RTX0FDVElWRSkKKwkJcmV0dXJuICcqJzsKKwlpZiAodiAmIFFURF9TVFNfSEFMVCkKKwkJcmV0dXJuICctJzsKKwlpZiAoIUlTX1NIT1JUX1JFQUQgKHYpKQorCQlyZXR1cm4gJyAnOworCS8qIHRyaWVzIHRvIGFkdmFuY2UgdGhyb3VnaCBod19hbHRfbmV4dCAqLworCXJldHVybiAnLyc7Cit9CisKK3N0YXRpYyB2b2lkIHFoX2xpbmVzICgKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksCisJc3RydWN0IGVoY2lfcWggKnFoLAorCWNoYXIgKipuZXh0cCwKKwl1bnNpZ25lZCAqc2l6ZXAKKykKK3sKKwl1MzIJCQlzY3JhdGNoOworCXUzMgkJCWh3X2N1cnI7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnk7CisJc3RydWN0IGVoY2lfcXRkCQkqdGQ7CisJdW5zaWduZWQJCXRlbXA7CisJdW5zaWduZWQJCXNpemUgPSAqc2l6ZXA7CisJY2hhcgkJCSpuZXh0ID0gKm5leHRwOworCWNoYXIJCQltYXJrOworCisJaWYgKHFoLT5od19xdGRfbmV4dCA9PSBFSENJX0xJU1RfRU5EKQkvKiBORUMgZG9lcyB0aGlzICovCisJCW1hcmsgPSAnQCc7CisJZWxzZQorCQltYXJrID0gdG9rZW5fbWFyayAocWgtPmh3X3Rva2VuKTsKKwlpZiAobWFyayA9PSAnLycpIHsJLyogcWhfYWx0X25leHQgY29udHJvbHMgcWggYWR2YW5jZT8gKi8KKwkJaWYgKChxaC0+aHdfYWx0X25leHQgJiBRVERfTUFTSykgPT0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0KQorCQkJbWFyayA9ICcjJzsJLyogYmxvY2tlZCAqLworCQllbHNlIGlmIChxaC0+aHdfYWx0X25leHQgPT0gRUhDSV9MSVNUX0VORCkKKwkJCW1hcmsgPSAnLic7CS8qIHVzZSBod19xdGRfbmV4dCAqLworCQkvKiBlbHNlIGFsdF9uZXh0IHBvaW50cyB0byBzb21lIG90aGVyIHF0ZCAqLworCX0KKwlzY3JhdGNoID0gbGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8xKTsKKwlod19jdXJyID0gKG1hcmsgPT0gJyonKSA/IGxlMzJfdG9fY3B1cCAoJnFoLT5od19jdXJyZW50KSA6IDA7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCSJxaC8lcCBkZXYlZCAlY3MgZXAlZCAlMDh4ICUwOHggKCUwOHglYyAlcyBuYWslZCkiLAorCQkJcWgsIHNjcmF0Y2ggJiAweDAwN2YsCisJCQlzcGVlZF9jaGFyIChzY3JhdGNoKSwKKwkJCShzY3JhdGNoID4+IDgpICYgMHgwMDBmLAorCQkJc2NyYXRjaCwgbGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8yKSwKKwkJCWxlMzJfdG9fY3B1cCAoJnFoLT5od190b2tlbiksIG1hcmssCisJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUVREX1RPR0dMRSkgJiBxaC0+aHdfdG9rZW4pCisJCQkJPyAiZGF0YTEiIDogImRhdGEwIiwKKwkJCShsZTMyX3RvX2NwdXAgKCZxaC0+aHdfYWx0X25leHQpID4+IDEpICYgMHgwZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCS8qIGhjIG1heSBiZSBtb2RpZnlpbmcgdGhlIGxpc3QgYXMgd2UgcmVhZCBpdCAuLi4gKi8KKwlsaXN0X2Zvcl9lYWNoIChlbnRyeSwgJnFoLT5xdGRfbGlzdCkgeworCQl0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJc2NyYXRjaCA9IGxlMzJfdG9fY3B1cCAoJnRkLT5od190b2tlbik7CisJCW1hcmsgPSAnICc7CisJCWlmIChod19jdXJyID09IHRkLT5xdGRfZG1hKQorCQkJbWFyayA9ICcqJzsKKwkJZWxzZSBpZiAocWgtPmh3X3F0ZF9uZXh0ID09IHRkLT5xdGRfZG1hKQorCQkJbWFyayA9ICcrJzsKKwkJZWxzZSBpZiAoUVREX0xFTkdUSCAoc2NyYXRjaCkpIHsKKwkJCWlmICh0ZC0+aHdfYWx0X25leHQgPT0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0KQorCQkJCW1hcmsgPSAnIyc7CisJCQllbHNlIGlmICh0ZC0+aHdfYWx0X25leHQgIT0gRUhDSV9MSVNUX0VORCkKKwkJCQltYXJrID0gJy8nOworCQl9CisJCXRlbXAgPSBzbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkiXG5cdCVwJWMlcyBsZW49JWQgJTA4eCB1cmIgJXAiLAorCQkJCXRkLCBtYXJrLCAoeyBjaGFyICp0bXA7CisJCQkJIHN3aXRjaCAoKHNjcmF0Y2g+PjgpJjB4MDMpIHsKKwkJCQkgY2FzZSAwOiB0bXAgPSAib3V0IjsgYnJlYWs7CisJCQkJIGNhc2UgMTogdG1wID0gImluIjsgYnJlYWs7CisJCQkJIGNhc2UgMjogdG1wID0gInNldHVwIjsgYnJlYWs7CisJCQkJIGRlZmF1bHQ6IHRtcCA9ICI/IjsgYnJlYWs7CisJCQkJIH0gdG1wO30pLAorCQkJCShzY3JhdGNoID4+IDE2KSAmIDB4N2ZmZiwKKwkJCQlzY3JhdGNoLAorCQkJCXRkLT51cmIpOworCQlpZiAodGVtcCA8IDApCisJCQl0ZW1wID0gMDsKKwkJZWxzZSBpZiAoc2l6ZSA8IHRlbXApCisJCQl0ZW1wID0gc2l6ZTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJCWlmICh0ZW1wID09IHNpemUpCisJCQlnb3RvIGRvbmU7CisJfQorCisJdGVtcCA9IHNucHJpbnRmIChuZXh0LCBzaXplLCAiXG4iKTsKKwlpZiAodGVtcCA8IDApCisJCXRlbXAgPSAwOworCWVsc2UgaWYgKHNpemUgPCB0ZW1wKQorCQl0ZW1wID0gc2l6ZTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCitkb25lOgorCSpzaXplcCA9IHNpemU7CisJKm5leHRwID0gbmV4dDsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfYXN5bmMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQJCXRlbXAsIHNpemU7CisJY2hhcgkJCSpuZXh0OworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisKKwkqYnVmID0gMDsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwllaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCisJLyogZHVtcHMgYSBzbmFwc2hvdCBvZiB0aGUgYXN5bmMgc2NoZWR1bGUuCisJICogdXN1YWxseSBlbXB0eSBleGNlcHQgZm9yIGxvbmctdGVybSBidWxrIHJlYWRzLCBvciBoZWFkLgorCSAqIG9uZSBRSCBwZXIgbGluZSwgYW5kIFREcyB3ZSBrbm93IGFib3V0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJZm9yIChxaCA9IGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoOyBzaXplID4gMCAmJiBxaDsgcWggPSBxaC0+cWhfbmV4dC5xaCkKKwkJcWhfbGluZXMgKGVoY2ksIHFoLCAmbmV4dCwgJnNpemUpOworCWlmIChlaGNpLT5yZWNsYWltICYmIHNpemUgPiAwKSB7CisJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcbnJlY2xhaW0gPVxuIik7CisJCXNpemUgLT0gdGVtcDsKKwkJbmV4dCArPSB0ZW1wOworCisJCWZvciAocWggPSBlaGNpLT5yZWNsYWltOyBzaXplID4gMCAmJiBxaDsgcWggPSBxaC0+cmVjbGFpbSkKKwkJCXFoX2xpbmVzIChlaGNpLCBxaCwgJm5leHQsICZzaXplKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdHJsZW4gKGJ1Zik7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIgKGFzeW5jLCBTX0lSVUdPLCBzaG93X2FzeW5jLCBOVUxMKTsKKworI2RlZmluZSBEQkdfU0NIRURfTElNSVQgNjQKKworc3RhdGljIHNzaXplX3QKK3Nob3dfcGVyaW9kaWMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5pb24gZWhjaV9zaGFkb3cJcCwgKnNlZW47CisJdW5zaWduZWQJCXRlbXAsIHNpemUsIHNlZW5fY291bnQ7CisJY2hhcgkJCSpuZXh0OworCXVuc2lnbmVkCQlpOworCV9fbGUzMgkJCXRhZzsKKworCWlmICghKHNlZW4gPSBrbWFsbG9jIChEQkdfU0NIRURfTElNSVQgKiBzaXplb2YgKnNlZW4sIFNMQUJfQVRPTUlDKSkpCisJCXJldHVybiAwOworCXNlZW5fY291bnQgPSAwOworCisJYnVzID0gdG9fdXNiX2J1cyhjbGFzc19kZXYpOworCWhjZCA9IGJ1cy0+aGNwcml2OworCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic2l6ZSA9ICVkXG4iLCBlaGNpLT5wZXJpb2RpY19zaXplKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJLyogZHVtcCBhIHNuYXBzaG90IG9mIHRoZSBwZXJpb2RpYyBzY2hlZHVsZS4KKwkgKiBpc28gY2hhbmdlcywgaW50ZXJydXB0IHVzdWFsbHkgZG9lc24ndC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZTsgaSsrKSB7CisJCXAgPSBlaGNpLT5wc2hhZG93IFtpXTsKKwkJaWYgKGxpa2VseSAoIXAucHRyKSkKKwkJCWNvbnRpbnVlOworCQl0YWcgPSBRX05FWFRfVFlQRSAoZWhjaS0+cGVyaW9kaWMgW2ldKTsKKworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiJTRkOiAiLCBpKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisKKwkJZG8geworCQkJc3dpdGNoICh0YWcpIHsKKwkJCWNhc2UgUV9UWVBFX1FIOgorCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIgcWglZC0lMDR4LyVwIiwKKwkJCQkJCXAucWgtPnBlcmlvZCwKKwkJCQkJCWxlMzJfdG9fY3B1cCAoJnAucWgtPmh3X2luZm8yKQorCQkJCQkJCS8qIHVmcmFtZSBtYXNrcyAqLworCQkJCQkJCSYgMHhmZmZmLAorCQkJCQkJcC5xaCk7CisJCQkJc2l6ZSAtPSB0ZW1wOworCQkJCW5leHQgKz0gdGVtcDsKKwkJCQkvKiBkb24ndCByZXBlYXQgd2hhdCBmb2xsb3dzIHRoaXMgcWggKi8KKwkJCQlmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgc2Vlbl9jb3VudDsgdGVtcCsrKSB7CisJCQkJCWlmIChzZWVuIFt0ZW1wXS5wdHIgIT0gcC5wdHIpCisJCQkJCQljb250aW51ZTsKKwkJCQkJaWYgKHAucWgtPnFoX25leHQucHRyKQorCQkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJCQkiIC4uLiIpOworCQkJCQlwLnB0ciA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBzaG93IG1vcmUgaW5mbyB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KKwkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50ICYmIHAucHRyKSB7CisJCQkJCXUzMglzY3JhdGNoID0gbGUzMl90b19jcHVwICgKKwkJCQkJCQkmcC5xaC0+aHdfaW5mbzEpOworCQkJCQlzdHJ1Y3QgZWhjaV9xdGQJKnF0ZDsKKwkJCQkJY2hhcgkJKnR5cGUgPSAiIjsKKworCQkJCQkvKiBjb3VudCB0ZHMsIGdldCBlcCBkaXJlY3Rpb24gKi8KKwkJCQkJdGVtcCA9IDA7CisJCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHF0ZCwKKwkJCQkJCQkmcC5xaC0+cXRkX2xpc3QsCisJCQkJCQkJcXRkX2xpc3QpIHsKKwkJCQkJCXRlbXArKzsKKwkJCQkJCXN3aXRjaCAoMHgwMyAmIChsZTMyX3RvX2NwdSAoCisJCQkJCQkJcXRkLT5od190b2tlbikgPj4gOCkpIHsKKwkJCQkJCWNhc2UgMDogdHlwZSA9ICJvdXQiOyBjb250aW51ZTsKKwkJCQkJCWNhc2UgMTogdHlwZSA9ICJpbiI7IGNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJCSIgKCVjJWQgZXAlZCVzICIKKwkJCQkJCSJbJWQvJWRdIHElZCBwJWQpIiwKKwkJCQkJCXNwZWVkX2NoYXIgKHNjcmF0Y2gpLAorCQkJCQkJc2NyYXRjaCAmIDB4MDA3ZiwKKwkJCQkJCShzY3JhdGNoID4+IDgpICYgMHgwMDBmLCB0eXBlLAorCQkJCQkJcC5xaC0+dXNlY3MsIHAucWgtPmNfdXNlY3MsCisJCQkJCQl0ZW1wLAorCQkJCQkJMHg3ZmYgJiAoc2NyYXRjaCA+PiAxNikpOworCisJCQkJCWlmIChzZWVuX2NvdW50IDwgREJHX1NDSEVEX0xJTUlUKQorCQkJCQkJc2VlbiBbc2Vlbl9jb3VudCsrXS5xaCA9IHAucWg7CisJCQkJfSBlbHNlCisJCQkJCXRlbXAgPSAwOworCQkJCWlmIChwLnFoKSB7CisJCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLnFoLT5od19uZXh0KTsKKwkJCQkJcCA9IHAucWgtPnFoX25leHQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBRX1RZUEVfRlNUTjoKKwkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkiIGZzdG4tJTh4LyVwIiwgcC5mc3RuLT5od19wcmV2LAorCQkJCQlwLmZzdG4pOworCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLmZzdG4tPmh3X25leHQpOworCQkJCXAgPSBwLmZzdG4tPmZzdG5fbmV4dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUV9UWVBFX0lURDoKKwkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkiIGl0ZC8lcCIsIHAuaXRkKTsKKwkJCQl0YWcgPSBRX05FWFRfVFlQRSAocC5pdGQtPmh3X25leHQpOworCQkJCXAgPSBwLml0ZC0+aXRkX25leHQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFFfVFlQRV9TSVREOgorCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSIgc2l0ZCVkLSUwNHgvJXAiLAorCQkJCQlwLnNpdGQtPnN0cmVhbS0+aW50ZXJ2YWwsCisJCQkJCWxlMzJfdG9fY3B1cCAoJnAuc2l0ZC0+aHdfdWZyYW1lKQorCQkJCQkJJiAweDAwMDBmZmZmLAorCQkJCQlwLnNpdGQpOworCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLnNpdGQtPmh3X25leHQpOworCQkJCXAgPSBwLnNpdGQtPnNpdGRfbmV4dDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNpemUgLT0gdGVtcDsKKwkJCW5leHQgKz0gdGVtcDsKKwkJfSB3aGlsZSAocC5wdHIpOworCisJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcbiIpOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlrZnJlZSAoc2Vlbik7CisKKwlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUiAocGVyaW9kaWMsIFNfSVJVR08sIHNob3dfcGVyaW9kaWMsIE5VTEwpOworCisjdW5kZWYgREJHX1NDSEVEX0xJTUlUCisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3JlZ2lzdGVycyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZSwgaTsKKwljaGFyCQkJKm5leHQsIHNjcmF0Y2ggWzgwXTsKKwlzdGF0aWMgY2hhcgkJZm10IFtdID0gIiUqc1xuIjsKKwlzdGF0aWMgY2hhcgkJbGFiZWwgW10gPSAiIjsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwllaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYnVzLT5jb250cm9sbGVyLT5wb3dlci5wb3dlcl9zdGF0ZSkgeworCQlzaXplID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkJIlNVU1BFTkRFRCAobm8gcmVnaXN0ZXIgYWNjZXNzKVxuIiwKKwkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCisJCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzX2lkKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIENhcGFiaWxpdHkgUmVnaXN0ZXJzICovCisJaSA9IEhDX1ZFUlNJT04ocmVhZGwgKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJImJ1cyAlcywgZGV2aWNlICVzIChkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiKVxuIgorCQkiRUhDSSAleC4lMDJ4LCBoY2Qgc3RhdGUgJWRcbiIsCisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXNfaWQsCisJCWkgPj4gOCwgaSAmIDB4MGZmLCBoY2QtPnN0YXRlKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJLy8gRklYTUUgaW50ZXJwcmV0IGJvdGggdHlwZXMgb2YgcGFyYW1zCisJaSA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInN0cnVjdHVyYWwgcGFyYW1zIDB4JTA4eFxuIiwgaSk7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCWkgPSByZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJjYXBhYmlsaXR5IHBhcmFtcyAweCUwOHhcbiIsIGkpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwkvKiBPcGVyYXRpb25hbCBSZWdpc3RlcnMgKi8KKwl0ZW1wID0gZGJnX3N0YXR1c19idWYgKHNjcmF0Y2gsIHNpemVvZiBzY3JhdGNoLCBsYWJlbCwKKwkJCXJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IGRiZ19jb21tYW5kX2J1ZiAoc2NyYXRjaCwgc2l6ZW9mIHNjcmF0Y2gsIGxhYmVsLAorCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IGRiZ19pbnRyX2J1ZiAoc2NyYXRjaCwgc2l6ZW9mIHNjcmF0Y2gsIGxhYmVsLAorCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSkpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsIGZtdCwgdGVtcCwgc2NyYXRjaCk7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJ1ZnJhbWUgJTA0eFxuIiwKKwkJCXJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJZm9yIChpID0gMDsgaSA8IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsgaSsrKSB7CisJCXRlbXAgPSBkYmdfcG9ydF9idWYgKHNjcmF0Y2gsIHNpemVvZiBzY3JhdGNoLCBsYWJlbCwgaSArIDEsCisJCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pKTsKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJfQorCisJaWYgKGVoY2ktPnJlY2xhaW0pIHsKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInJlY2xhaW0gcWggJXAlc1xuIiwKKwkJCQllaGNpLT5yZWNsYWltLAorCQkJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPyAiIHJlYWR5IiA6ICIiKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJfQorCisjaWZkZWYgRUhDSV9TVEFUUworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCSJpcnEgbm9ybWFsICVsZCBlcnIgJWxkIHJlY2xhaW0gJWxkIChsb3N0ICVsZClcbiIsCisJCWVoY2ktPnN0YXRzLm5vcm1hbCwgZWhjaS0+c3RhdHMuZXJyb3IsIGVoY2ktPnN0YXRzLnJlY2xhaW0sCisJCWVoY2ktPnN0YXRzLmxvc3RfaWFhKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImNvbXBsZXRlICVsZCB1bmxpbmsgJWxkXG4iLAorCQllaGNpLT5zdGF0cy5jb21wbGV0ZSwgZWhjaS0+c3RhdHMudW5saW5rKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworI2VuZGlmCisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChyZWdpc3RlcnMsIFNfSVJVR08sIHNob3dfcmVnaXN0ZXJzLCBOVUxMKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsZGV2ID0gJmVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNsYXNzX2RldjsKKworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7CisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsZGV2ID0gJmVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNsYXNzX2RldjsKKworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKK30KKworI2VuZGlmIC8qIFNUVUJfREVCVUdfRklMRVMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2JiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTAsMCArMSwxMjYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgYnkgRGF2aWQgQnJvd25lbGwKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRUhDSSBoY19kcml2ZXIgaW1wbGVtZW50YXRpb24gLi4uIGV4cGVyaW1lbnRhbCwgaW5jb21wbGV0ZS4KKyAqIEJhc2VkIG9uIHRoZSBmaW5hbCAxLjAgcmVnaXN0ZXIgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24uCisgKgorICogVVNCIDIuMCBzaG93cyB1cCBpbiB1cGNvbWluZyB3d3cucGNtY2lhLm9yZyB0ZWNobm9sb2d5LgorICogRmlyc3Qgd2FzIFBDTUNJQSwgbGlrZSBJU0E7IHRoZW4gQ2FyZEJ1cywgd2hpY2ggaXMgUENJLgorICogTmV4dCBjb21lcyAiQ2FyZEJheSIsIHVzaW5nIFVTQiAyLjAgc2lnbmFscy4KKyAqCisgKiBDb250YWlucyBhZGRpdGlvbmFsIGNvbnRyaWJ1dGlvbnMgYnkgQnJhZCBIYXJkcywgUm9yeSBCb2x0LCBhbmQgb3RoZXJzLgorICogU3BlY2lhbCB0aGFua3MgdG8gSW50ZWwgYW5kIFZJQSBmb3IgcHJvdmlkaW5nIGhvc3QgY29udHJvbGxlcnMgdG8KKyAqIHRlc3QgdGhpcyBkcml2ZXIgb24sIGFuZCBDeXByZXNzIChpbmNsdWRpbmcgSW4tU3lzdGVtIERlc2lnbikgZm9yCisgKiBwcm92aWRpbmcgZWFybHkgZGV2aWNlcyBmb3IgdGhvc2UgaG9zdCBjb250cm9sbGVycyB0byB0YWxrIHRvIQorICoKKyAqIEhJU1RPUlk6CisgKgorICogMjAwNC0wNS0xMCBSb290IGh1YiBhbmQgUENJIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ7IHJlbW90ZSB3YWtldXAuIChkYikKKyAqIDIwMDQtMDItMjQgUmVwbGFjZSBwY2lfKiB3aXRoIGdlbmVyaWMgZG1hXyogQVBJIGNhbGxzIChkc2F4ZW5hQHBsZXhpdHkubmV0KQorICogMjAwMy0xMi0yOSBSZXdyaXR0ZW4gaGlnaCBzcGVlZCBpc28gdHJhbnNmZXIgc3VwcG9ydCAoYnkgTWljaGFsIFNvamthLAorICoJPHNvamthbUBjZW50cnVtLmN6PiwgdXBkYXRlcyBieSBEQikuCisgKgorICogMjAwMi0xMS0yOQlDb3JyZWN0IGhhbmRsaW5nIGZvciBodyBhc3luY19uZXh0IHJlZ2lzdGVyLgorICogMjAwMi0wOC0wNglIYW5kbGluZyBmb3IgYnVsayBhbmQgaW50ZXJydXB0IHRyYW5zZmVycyBpcyBtb3N0bHkgc2hhcmVkOworICoJb25seSBzY2hlZHVsaW5nIGlzIGRpZmZlcmVudCwgbm8gYXJiaXRyYXJ5IGxpbWl0YXRpb25zLgorICogMjAwMi0wNy0yNQlTYW5pdHkgY2hlY2sgUENJIHJlYWRzLCBtb3N0bHkgZm9yIGJldHRlciBjYXJkYnVzIHN1cHBvcnQsCisgKiAJY2xlYW4gdXAgSEMgcnVuIHN0YXRlIGhhbmRzaGFraW5nLgorICogMjAwMi0wNS0yNAlQcmVsaW1pbmFyeSBGUy9MUyBpbnRlcnJ1cHRzLCB1c2luZyBzY2hlZHVsaW5nIHNob3J0Y3V0cworICogMjAwMi0wNS0xMQlDbGVhciBUVCBlcnJvcnMgZm9yIEZTL0xTIGN0cmwvYnVsay4gIEZpbGwgaW4gc29tZSBvdGhlcgorICoJbWlzc2luZyBwaWVjZXM6ICBlbmFibGluZyA2NGJpdCBkbWEsIGhhbmRvZmYgZnJvbSBCSU9TL1NNTS4KKyAqIDIwMDItMDUtMDcJU29tZSBlcnJvciBwYXRoIGNsZWFudXBzIHRvIHJlcG9ydCBiZXR0ZXIgZXJyb3JzOyB3bWIoKTsKKyAqCXVzZSBub24tQ1ZTIHZlcnNpb24gaWQ7IGJldHRlciBpc28gYmFuZHdpZHRoIGNsYWltLgorICogMjAwMi0wNC0xOQlDb250cm9sL2J1bGsvaW50ZXJydXB0IHN1Ym1pdCBubyBsb25nZXIgdXNlcyBnaXZlYmFjaygpIG9uCisgKgllcnJvcnMgaW4gc3VibWl0IHBhdGguICBCdWdmaXhlcyB0byBpbnRlcnJ1cHQgc2NoZWR1bGluZy9wcm9jZXNzaW5nLgorICogMjAwMi0wMy0wNQlJbml0aWFsIGhpZ2gtc3BlZWQgSVNPIHN1cHBvcnQ7IHJlZHVjZSBJVEQgbWVtb3J5OyBzaGlmdAorICoJbW9yZSBjaGVja2luZyB0byBnZW5lcmljIGhjZCBmcmFtZXdvcmsgKGRiKS4gIE1ha2UgaXQgd29yayB3aXRoCisgKglQaGlsaXBzIEVIQ0k7IHJlZHVjZSBQQ0kgdHJhZmZpYzsgc2hvcnRlbiBJUlEgcGF0aCAoUm9yeSBCb2x0KS4KKyAqIDIwMDItMDEtMTQJTWlub3IgY2xlYW51cDsgdmVyc2lvbiBzeW5jaC4KKyAqIDIwMDItMDEtMDgJRml4IHJvb3RodWIgaGFuZG9mZiBvZiBGUy9MUyB0byBjb21wYW5pb24gY29udHJvbGxlcnMuCisgKiAyMDAyLTAxLTA0CUNvbnRyb2wvQnVsayBxdWV1aW5nIGJlaGF2ZXMuCisgKgorICogMjAwMS0xMi0xMglJbml0aWFsIHBhdGNoIHZlcnNpb24gZm9yIExpbnV4IDIuNS4xIGtlcm5lbC4KKyAqIDIwMDEtSnVuZQlXb3JrcyB3aXRoIHVzYi1zdG9yYWdlIGFuZCBORUMgRUhDSSBvbiAyLjQKKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxMCBEZWMgMjAwNCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRGF2aWQgQnJvd25lbGwiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMi4wICdFbmhhbmNlZCcgSG9zdCBDb250cm9sbGVyIChFSENJKSBEcml2ZXIiCisKK3N0YXRpYyBjb25zdCBjaGFyCWhjZF9uYW1lIFtdID0gImVoY2lfaGNkIjsKKworCisjdW5kZWYgRUhDSV9WRVJCT1NFX0RFQlVHCisjdW5kZWYgRUhDSV9VUkJfVFJBQ0UKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIEVIQ0lfU1RBVFMKKyNlbmRpZgorCisvKiBtYWdpYyBudW1iZXJzIHRoYXQgY2FuIGFmZmVjdCBzeXN0ZW0gcGVyZm9ybWFuY2UgKi8KKyNkZWZpbmUJRUhDSV9UVU5FX0NFUlIJCTMJLyogMC0zIHF0ZCByZXRyaWVzOyAwID09IGRvbid0IHN0b3AgKi8KKyNkZWZpbmUJRUhDSV9UVU5FX1JMX0hTCQk0CS8qIG5hayB0aHJvdHRsZTsgc2VlIDQuOSAqLworI2RlZmluZQlFSENJX1RVTkVfUkxfVFQJCTAKKyNkZWZpbmUJRUhDSV9UVU5FX01VTFRfSFMJMQkvKiAxLTMgdHJhbnNhY3Rpb25zL3VmcmFtZTsgNC4xMC4zICovCisjZGVmaW5lCUVIQ0lfVFVORV9NVUxUX1RUCTEKKyNkZWZpbmUJRUhDSV9UVU5FX0ZMUwkJMgkvKiAoc21hbGwpIDI1NiBmcmFtZSBzY2hlZHVsZSAqLworCisjZGVmaW5lIEVIQ0lfSUFBX0pJRkZJRVMJKEhaLzEwMCkJLyogYXJiaXRyYXJ5OyB+MTAgbXNlYyAqLworI2RlZmluZSBFSENJX0lPX0pJRkZJRVMJCShIWi8xMCkJCS8qIGlvIHdhdGNoZG9nID4gaXJxX3RocmVzaCAqLworI2RlZmluZSBFSENJX0FTWU5DX0pJRkZJRVMJKEhaLzIwKQkJLyogYXN5bmMgaWRsZSB0aW1lb3V0ICovCisjZGVmaW5lIEVIQ0lfU0hSSU5LX0pJRkZJRVMJKEhaLzIwMCkJLyogYXN5bmMgcWggdW5saW5rIGRlbGF5ICovCisKKy8qIEluaXRpYWwgSVJRIGxhdGVuY3k6ICBmYXN0ZXIgdGhhbiBodyBkZWZhdWx0ICovCitzdGF0aWMgaW50IGxvZzJfaXJxX3RocmVzaCA9IDA7CQkvLyAwIHRvIDYKK21vZHVsZV9wYXJhbSAobG9nMl9pcnFfdGhyZXNoLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyAobG9nMl9pcnFfdGhyZXNoLCAibG9nMiBJUlEgbGF0ZW5jeSwgMS02NCBtaWNyb2ZyYW1lcyIpOworCisvKiBpbml0aWFsIHBhcmsgc2V0dGluZzogIHNsb3dlciB0aGFuIGh3IGRlZmF1bHQgKi8KK3N0YXRpYyB1bnNpZ25lZCBwYXJrID0gMDsKK21vZHVsZV9wYXJhbSAocGFyaywgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDIChwYXJrLCAicGFyayBzZXR0aW5nOyAxLTMgYmFjay10by1iYWNrIGFzeW5jIHBhY2tldHMiKTsKKworI2RlZmluZQlJTlRSX01BU0sgKFNUU19JQUEgfCBTVFNfRkFUQUwgfCBTVFNfUENEIHwgU1RTX0VSUiB8IFNUU19JTlQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlICJlaGNpLmgiCisjaW5jbHVkZSAiZWhjaS1kYmcuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGhhbmRzaGFrZSAtIHNwaW4gcmVhZGluZyBoYyB1bnRpbCBoYW5kc2hha2UgY29tcGxldGVzIG9yIGZhaWxzCisgKiBAcHRyOiBhZGRyZXNzIG9mIGhjIHJlZ2lzdGVyIHRvIGJlIHJlYWQKKyAqIEBtYXNrOiBiaXRzIHRvIGxvb2sgYXQgaW4gcmVzdWx0IG9mIHJlYWQKKyAqIEBkb25lOiB2YWx1ZSBvZiB0aG9zZSBiaXRzIHdoZW4gaGFuZHNoYWtlIHN1Y2NlZWRzCisgKiBAdXNlYzogdGltZW91dCBpbiBtaWNyb3NlY29uZHMKKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciB6ZXJvIG9uIHN1Y2Nlc3MKKyAqCisgKiBTdWNjZXNzIGhhcHBlbnMgd2hlbiB0aGUgIm1hc2siIGJpdHMgaGF2ZSB0aGUgc3BlY2lmaWVkIHZhbHVlIChoYXJkd2FyZQorICogaGFuZHNoYWtlIGRvbmUpLiAgVGhlcmUgYXJlIHR3byBmYWlsdXJlIG1vZGVzOiAgInVzZWMiIGhhdmUgcGFzc2VkIChtYWpvcgorICogaGFyZHdhcmUgZmxha2VvdXQpLCBvciB0aGUgcmVnaXN0ZXIgcmVhZHMgYXMgYWxsLW9uZXMgKGhhcmR3YXJlIHJlbW92ZWQpLgorICoKKyAqIFRoYXQgbGFzdCBmYWlsdXJlIHNob3VsZF9vbmx5IGhhcHBlbiBpbiBjYXNlcyBsaWtlIHBoeXNpY2FsIGNhcmRidXMgZWplY3QKKyAqIGJlZm9yZSBkcml2ZXIgc2h1dGRvd24uIEJ1dCBpdCBhbHNvIHNlZW1zIHRvIGJlIGNhdXNlZCBieSBidWdzIGluIGNhcmRidXMKKyAqIGJyaWRnZSBzaHV0ZG93bjogIHNodXR0aW5nIGRvd24gdGhlIGJyaWRnZSBiZWZvcmUgdGhlIGRldmljZXMgdXNpbmcgaXQuCisgKi8KK3N0YXRpYyBpbnQgaGFuZHNoYWtlICh2b2lkIF9faW9tZW0gKnB0ciwgdTMyIG1hc2ssIHUzMiBkb25lLCBpbnQgdXNlYykKK3sKKwl1MzIJcmVzdWx0OworCisJZG8geworCQlyZXN1bHQgPSByZWFkbCAocHRyKTsKKwkJaWYgKHJlc3VsdCA9PSB+KHUzMikwKQkJLyogY2FyZCByZW1vdmVkICovCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmVzdWx0ICY9IG1hc2s7CisJCWlmIChyZXN1bHQgPT0gZG9uZSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkgKDEpOworCQl1c2VjLS07CisJfSB3aGlsZSAodXNlYyA+IDApOworCXJldHVybiAtRVRJTUVET1VUOworfQorCisvKiBmb3JjZSBIQyB0byBoYWx0IHN0YXRlIGZyb20gdW5rbm93biAoRUhDSSBzcGVjIHNlY3Rpb24gMi4zKSAqLworc3RhdGljIGludCBlaGNpX2hhbHQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwl1MzIJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKTsKKworCWlmICgodGVtcCAmIFNUU19IQUxUKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCXRlbXAgJj0gfkNNRF9SVU47CisJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJcmV0dXJuIGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0hBTFQsIFNUU19IQUxULCAxNiAqIDEyNSk7Cit9CisKKy8qIHB1dCBUREkvQVJDIHNpbGljb24gaW50byBFSENJIG1vZGUgKi8KK3N0YXRpYyB2b2lkIHRkaV9yZXNldCAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXUzMiBfX2lvbWVtCSpyZWdfcHRyOworCXUzMgkJdG1wOworCisJcmVnX3B0ciA9ICh1MzIgX19pb21lbSAqKSgoKHU4IF9faW9tZW0gKillaGNpLT5yZWdzKSArIDB4NjgpOworCXRtcCA9IHJlYWRsIChyZWdfcHRyKTsKKwl0bXAgfD0gMHgzOworCXdyaXRlbCAodG1wLCByZWdfcHRyKTsKK30KKworLyogcmVzZXQgYSBub24tcnVubmluZyAoU1RTX0hBTFQgPT0gMSkgY29udHJvbGxlciAqLworc3RhdGljIGludCBlaGNpX3Jlc2V0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJaW50CXJldHZhbDsKKwl1MzIJY29tbWFuZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwljb21tYW5kIHw9IENNRF9SRVNFVDsKKwlkYmdfY21kIChlaGNpLCAicmVzZXQiLCBjb21tYW5kKTsKKwl3cml0ZWwgKGNvbW1hbmQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCWVoY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCXJldHZhbCA9IGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQsIENNRF9SRVNFVCwgMCwgMjUwICogMTAwMCk7CisKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGVoY2lfaXNfVERJKGVoY2kpKQorCQl0ZGlfcmVzZXQgKGVoY2kpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogaWRsZSB0aGUgY29udHJvbGxlciAoZnJvbSBydW5uaW5nKSAqLworc3RhdGljIHZvaWQgZWhjaV9xdWllc2NlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJdTMyCXRlbXA7CisKKyNpZmRlZiBERUJVRworCWlmICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkKKwkJQlVHICgpOworI2VuZGlmCisKKwkvKiB3YWl0IGZvciBhbnkgc2NoZWR1bGUgZW5hYmxlcy9kaXNhYmxlcyB0byB0YWtlIGVmZmVjdCAqLworCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpIDw8IDEwOworCXRlbXAgJj0gU1RTX0FTUyB8IFNUU19QU1M7CisJaWYgKGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0FTUyB8IFNUU19QU1MsCisJCQkJdGVtcCwgMTYgKiAxMjUpICE9IDApIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJcmV0dXJuOworCX0KKworCS8qIHRoZW4gZGlzYWJsZSBhbnl0aGluZyB0aGF0J3Mgc3RpbGwgYWN0aXZlICovCisJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJdGVtcCAmPSB+KENNRF9BU0UgfCBDTURfSUFBRCB8IENNRF9QU0UpOworCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCisJLyogaGFyZHdhcmUgY2FuIHRha2UgMTYgbWljcm9mcmFtZXMgdG8gdHVybiBvZmYgLi4uICovCisJaWYgKGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0FTUyB8IFNUU19QU1MsCisJCQkJMCwgMTYgKiAxMjUpICE9IDApIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJcmV0dXJuOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZWhjaV93b3JrKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjaW5jbHVkZSAiZWhjaS1odWIuYyIKKyNpbmNsdWRlICJlaGNpLW1lbS5jIgorI2luY2x1ZGUgImVoY2ktcS5jIgorI2luY2x1ZGUgImVoY2ktc2NoZWQuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZWhjaV93YXRjaGRvZyAodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gKHN0cnVjdCBlaGNpX2hjZCAqKSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJLyogbG9zdCBJQUEgaXJxcyB3ZWRnZSB0aGluZ3MgYmFkbHk7IHNlZW4gd2l0aCBhIHZ0ODIzNSAqLworCWlmIChlaGNpLT5yZWNsYWltKSB7CisJCXUzMgkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOworCisJCWlmIChzdGF0dXMgJiBTVFNfSUFBKSB7CisJCQllaGNpX3ZkYmcgKGVoY2ksICJsb3N0IElBQVxuIik7CisJCQlDT1VOVCAoZWhjaS0+c3RhdHMubG9zdF9pYWEpOworCQkJd3JpdGVsIChTVFNfSUFBLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwkJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQl9CisJfQorCisgCS8qIHN0b3AgYXN5bmMgcHJvY2Vzc2luZyBhZnRlciBpdCdzIGlkbGVkIGEgYml0ICovCisJaWYgKHRlc3RfYml0IChUSU1FUl9BU1lOQ19PRkYsICZlaGNpLT5hY3Rpb25zKSkKKyAJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgZWhjaS0+YXN5bmMpOworCisJLyogZWhjaSBjb3VsZCBydW4gYnkgdGltZXIsIHdpdGhvdXQgSVJRcyAuLi4gKi8KKwllaGNpX3dvcmsgKGVoY2ksIE5VTEwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmCUNPTkZJR19QQ0kKKworLyogRUhDSSAwLjk2IChhbmQgbGF0ZXIpIHNlY3Rpb24gNS4xIHNheXMgaG93IHRvIGtpY2sgQklPUy9TTU0vLi4uCisgKiBvZmYgdGhlIGNvbnRyb2xsZXIgKG1heWJlIGl0IGNhbiBib290IGZyb20gaGlnaHNwZWVkIFVTQiBkaXNrcykuCisgKi8KK3N0YXRpYyBpbnQgYmlvc19oYW5kb2ZmIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCB3aGVyZSwgdTMyIGNhcCkKK3sKKwlpZiAoY2FwICYgKDEgPDwgMTYpKSB7CisJCWludCBtc2VjID0gNTAwMDsKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPQorCQkJCXRvX3BjaV9kZXYoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlcik7CisKKwkJLyogcmVxdWVzdCBoYW5kb2ZmIHRvIE9TICovCisJCWNhcCB8PSAxIDw8IDI0OworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHdoZXJlLCBjYXApOworCisJCS8qIGFuZCB3YWl0IGEgd2hpbGUgZm9yIGl0IHRvIGhhcHBlbiAqLworCQlkbyB7CisJCQltc2xlZXAoMTApOworCQkJbXNlYyAtPSAxMDsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCB3aGVyZSwgJmNhcCk7CisJCX0gd2hpbGUgKChjYXAgJiAoMSA8PCAxNikpICYmIG1zZWMpOworCQlpZiAoY2FwICYgKDEgPDwgMTYpKSB7CisJCQllaGNpX2VyciAoZWhjaSwgIkJJT1MgaGFuZG9mZiBmYWlsZWQgKCVkLCAlMDR4KVxuIiwKKwkJCQl3aGVyZSwgY2FwKTsKKwkJCS8vIHNvbWUgQklPUyB2ZXJzaW9ucyBzZWVtIGJ1Z2d5Li4uCisJCQkvLyByZXR1cm4gMTsKKwkJCWVoY2lfd2FybiAoZWhjaSwgImNvbnRpbnVpbmcgYWZ0ZXIgQklPUyBidWcuLi5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0gCisJCWVoY2lfZGJnIChlaGNpLCAiQklPUyBoYW5kb2ZmIHN1Y2NlZWRlZFxuIik7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGludAorZWhjaV9yZWJvb3QgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICpudWxsKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisKKwllaGNpID0gY29udGFpbmVyX29mIChzZWxmLCBzdHJ1Y3QgZWhjaV9oY2QsIHJlYm9vdF9ub3RpZmllcik7CisKKwkvKiBtYWtlIEJJT1MvZXRjIHVzZSBjb21wYW5pb24gY29udHJvbGxlciBkdXJpbmcgcmVib290ICovCisJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBjYWxsZWQgYnkga2h1YmQgb3Igcm9vdCBodWIgaW5pdCB0aHJlYWRzICovCisKK3N0YXRpYyBpbnQgZWhjaV9oY19yZXNldCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTMyCQkJdGVtcDsKKwl1bnNpZ25lZAkJY291bnQgPSAyNTYvNDsKKworCXNwaW5fbG9ja19pbml0ICgmZWhjaS0+bG9jayk7CisKKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEggKHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCWRiZ19oY3NfcGFyYW1zIChlaGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyAoZWhjaSwgInJlc2V0Iik7CisKKyNpZmRlZglDT05GSUdfUENJCisJLyogRUhDSSAwLjk2IGFuZCBsYXRlciBtYXkgaGF2ZSAiZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIiAqLworCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkJc3RydWN0IHBjaV9kZXYJKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCQlzd2l0Y2ggKHBkZXYtPnZlbmRvcikgeworCQljYXNlIFBDSV9WRU5ET1JfSURfVERJOgorCQkJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RESV9FSENJKSB7CisJCQkJZWhjaS0+aXNfdGRpX3JoX3R0ID0gMTsKKwkJCQl0ZGlfcmVzZXQgKGVoY2kpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUENJX1ZFTkRPUl9JRF9BTUQ6CisJCQkvKiBBTUQ4MTExIEVIQ0kgZG9lc24ndCB3b3JrLCBhY2NvcmRpbmcgdG8gQU1EIGVycmF0YSAqLworCQkJaWYgKHBkZXYtPmRldmljZSA9PSAweDc0NjMpIHsKKwkJCQllaGNpX2luZm8gKGVoY2ksICJpZ25vcmluZyBBTUQ4MTExIChlcnJhdGEpXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJdGVtcCA9IEhDQ19FWFRfQ0FQUyAocmVhZGwgKCZlaGNpLT5jYXBzLT5oY2NfcGFyYW1zKSk7CisJfSBlbHNlCisJCXRlbXAgPSAwOworCXdoaWxlICh0ZW1wICYmIGNvdW50LS0pIHsKKwkJdTMyCQljYXA7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkICh0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKSwKKwkJCQl0ZW1wLCAmY2FwKTsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYXBhYmlsaXR5ICUwNHggYXQgJTAyeFxuIiwgY2FwLCB0ZW1wKTsKKwkJc3dpdGNoIChjYXAgJiAweGZmKSB7CisJCWNhc2UgMToJCQkvKiBCSU9TL1NNTS8uLi4gaGFuZG9mZiAqLworCQkJaWYgKGJpb3NfaGFuZG9mZiAoZWhjaSwgdGVtcCwgY2FwKSAhPSAwKQorCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQljYXNlIDA6CQkJLyogaWxsZWdhbCByZXNlcnZlZCBjYXBhYmlsaXR5ICovCisJCQllaGNpX3dhcm4gKGVoY2ksICJpbGxlZ2FsIGNhcGFiaWxpdHkhXG4iKTsKKwkJCWNhcCA9IDA7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgkJLyogdW5rbm93biAqLworCQkJYnJlYWs7CisJCX0KKwkJdGVtcCA9IChjYXAgPj4gOCkgJiAweGZmOworCX0KKwlpZiAoIWNvdW50KSB7CisJCWVoY2lfZXJyIChlaGNpLCAiYm9ndXMgY2FwYWJpbGl0aWVzIC4uLiBQQ0kgcHJvYmxlbXMhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChlaGNpX2lzX1RESShlaGNpKSkKKwkJZWhjaV9yZXNldCAoZWhjaSk7CisjZW5kaWYKKworCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgUENJIHJlYWRzICovCisJZWhjaS0+aGNzX3BhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwkvKiBhdCBsZWFzdCB0aGUgR2VuZXN5cyBHTDg4MFMgbmVlZHMgZml4dXAgaGVyZSAqLworCXRlbXAgPSBIQ1NfTl9DQyhlaGNpLT5oY3NfcGFyYW1zKSAqIEhDU19OX1BDQyhlaGNpLT5oY3NfcGFyYW1zKTsKKwl0ZW1wICY9IDB4MGY7CisJaWYgKHRlbXAgJiYgSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcykgPiB0ZW1wKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiYm9ndXMgcG9ydCBjb25maWd1cmF0aW9uOiAiCisJCQkiY2M9JWQgeCBwY2M9JWQgPCBwb3J0cz0lZFxuIiwKKwkJCUhDU19OX0NDKGVoY2ktPmhjc19wYXJhbXMpLAorCQkJSENTX05fUENDKGVoY2ktPmhjc19wYXJhbXMpLAorCQkJSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcykpOworCisjaWZkZWYJQ09ORklHX1BDSQorCQlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7CisJCQlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKKworCQkJcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCQkJc3dpdGNoIChwZGV2LT52ZW5kb3IpIHsKKwkJCWNhc2UgMHgxN2EwOgkJLyogR0VORVNZUyAqLworCQkJCS8qIEdMODgwUzogc2hvdWxkIGJlIFBPUlRTPTIgKi8KKwkJCQl0ZW1wIHw9IChlaGNpLT5oY3NfcGFyYW1zICYgfjB4Zik7CisJCQkJZWhjaS0+aGNzX3BhcmFtcyA9IHRlbXA7CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9WRU5ET1JfSURfTlZJRElBOgorCQkJCS8qIE5GNDogc2hvdWxkIGJlIFBDQz0xMCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisKKwkvKiBmb3JjZSBIQyB0byBoYWx0IHN0YXRlICovCisJcmV0dXJuIGVoY2lfaGFsdCAoZWhjaSk7Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTMyCQkJdGVtcDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlpbnQJCQlyZXR2YWw7CisJdTMyCQkJaGNjX3BhcmFtczsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBzYnJuID0gMDsKKwlpbnQJCQlmaXJzdDsKKworCS8qIHNraXAgc29tZSB0aGluZ3Mgb24gcmVzdGFydCBwYXRocyAqLworCWZpcnN0ID0gKGVoY2ktPndhdGNoZG9nLmRhdGEgPT0gMCk7CisJaWYgKGZpcnN0KSB7CisJCWluaXRfdGltZXIgKCZlaGNpLT53YXRjaGRvZyk7CisJCWVoY2ktPndhdGNoZG9nLmZ1bmN0aW9uID0gZWhjaV93YXRjaGRvZzsKKwkJZWhjaS0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOworCX0KKworCS8qCisJICogaHcgZGVmYXVsdDogMUsgcGVyaW9kaWMgbGlzdCBoZWFkcywgb25lIHBlciBmcmFtZS4KKwkgKiBwZXJpb2RpY19zaXplIGNhbiBzaHJpbmsgYnkgVVNCQ01EIHVwZGF0ZSBpZiBoY2NfcGFyYW1zIGFsbG93cy4KKwkgKi8KKwllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CisJaWYgKGZpcnN0ICYmIChyZXR2YWwgPSBlaGNpX21lbV9pbml0IChlaGNpLCBHRlBfS0VSTkVMKSkgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogY29udHJvbGxlcnMgbWF5IGNhY2hlIHNvbWUgb2YgdGhlIHBlcmlvZGljIHNjaGVkdWxlIC4uLiAqLworCWhjY19wYXJhbXMgPSByZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCWlmIChIQ0NfSVNPQ19DQUNIRSAoaGNjX3BhcmFtcykpIAkvLyBmdWxsIGZyYW1lIGNhY2hlCisJCWVoY2ktPmlfdGhyZXNoID0gODsKKwllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZAorCQllaGNpLT5pX3RocmVzaCA9IDIgKyBIQ0NfSVNPQ19USFJFUyAoaGNjX3BhcmFtcyk7CisKKwllaGNpLT5yZWNsYWltID0gTlVMTDsKKwllaGNpLT5yZWNsYWltX3JlYWR5ID0gMDsKKwllaGNpLT5uZXh0X3VmcmFtZSA9IC0xOworCisJLyogY29udHJvbGxlciBzdGF0ZTogIHVua25vd24gLS0+IHJlc2V0ICovCisKKwkvKiBFSENJIHNwZWMgc2VjdGlvbiA0LjEgKi8KKwlpZiAoKHJldHZhbCA9IGVoY2lfcmVzZXQgKGVoY2kpKSAhPSAwKSB7CisJCWVoY2lfbWVtX2NsZWFudXAgKGVoY2kpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwl3cml0ZWwgKGVoY2ktPnBlcmlvZGljX2RtYSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2xpc3QpOworCisjaWZkZWYJQ09ORklHX1BDSQorCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCQl1MTYJCQlwb3J0X3dha2U7CisKKwkJcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJCS8qIFNlcmlhbCBCdXMgUmVsZWFzZSBOdW1iZXIgaXMgYXQgUENJIDB4NjAgb2Zmc2V0ICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NjAsICZzYnJuKTsKKworCQkvKiBwb3J0IHdha2UgY2FwYWJpbGl0eSwgcmVwb3J0ZWQgYnkgYm9vdCBmaXJtd2FyZSAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDYyLCAmcG9ydF93YWtlKTsKKwkJaGNkLT5jYW5fd2FrZXVwID0gKHBvcnRfd2FrZSAmIDEpICE9IDA7CisKKwkJLyogaGVscCBoYyBkbWEgd29yayB3ZWxsIHdpdGggY2FjaGVsaW5lcyAqLworCQlwY2lfc2V0X213aSAocGRldik7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIGRlZGljYXRlIGEgcWggZm9yIHRoZSBhc3luYyByaW5nIGhlYWQsIHNpbmNlIHdlIGNvdWxkbid0IHVubGluaworCSAqIGEgJ3JlYWwnIHFoIHdpdGhvdXQgc3RvcHBpbmcgdGhlIGFzeW5jIHNjaGVkdWxlIFs0LjhdLiAgdXNlIGl0CisJICogYXMgdGhlICdyZWNsYW1hdGlvbiBsaXN0IGhlYWQnIHRvby4KKwkgKiBpdHMgZHVtbXkgaXMgdXNlZCBpbiBod19hbHRfbmV4dCBvZiBtYW55IHRkcywgdG8gcHJldmVudCB0aGUgcWgKKwkgKiBmcm9tIGF1dG9tYXRpY2FsbHkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IHRkIGFmdGVyIHNob3J0IHJlYWRzLgorCSAqLworCWlmIChmaXJzdCkgeworCQllaGNpLT5hc3luYy0+cWhfbmV4dC5xaCA9IE5VTEw7CisJCWVoY2ktPmFzeW5jLT5od19uZXh0ID0gUUhfTkVYVCAoZWhjaS0+YXN5bmMtPnFoX2RtYSk7CisJCWVoY2ktPmFzeW5jLT5od19pbmZvMSA9IGNwdV90b19sZTMyIChRSF9IRUFEKTsKKwkJZWhjaS0+YXN5bmMtPmh3X3Rva2VuID0gY3B1X3RvX2xlMzIgKFFURF9TVFNfSEFMVCk7CisJCWVoY2ktPmFzeW5jLT5od19xdGRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJCWVoY2ktPmFzeW5jLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0xJTktFRDsKKwkJZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0ID0gUVREX05FWFQgKGVoY2ktPmFzeW5jLT5kdW1teS0+cXRkX2RtYSk7CisJfQorCXdyaXRlbCAoKHUzMillaGNpLT5hc3luYy0+cWhfZG1hLCAmZWhjaS0+cmVncy0+YXN5bmNfbmV4dCk7CisKKwkvKgorCSAqIGhjY19wYXJhbXMgY29udHJvbHMgd2hldGhlciBlaGNpLT5yZWdzLT5zZWdtZW50IG11c3QgKCEhISkKKwkgKiBiZSB1c2VkOyBpdCBjb25zdHJhaW5zIFFIL0lURC9TSVREIGFuZCBRVEQgbG9jYXRpb25zLgorCSAqIHBjaV9wb29sIGNvbnNpc3RlbnQgbWVtb3J5IGFsd2F5cyB1c2VzIHNlZ21lbnQgemVyby4KKwkgKiBzdHJlYW1pbmcgbWFwcGluZ3MgZm9yIEkvTyBidWZmZXJzLCBsaWtlIHBjaV9tYXBfc2luZ2xlKCksCisJICogY2FuIHJldHVybiBzZWdtZW50cyBhYm92ZSA0R0IsIGlmIHRoZSBkZXZpY2UgYWxsb3dzLgorCSAqCisJICogTk9URTogIHRoZSBkbWEgbWFzayBpcyB2aXNpYmxlIHRocm91Z2ggZG1hX3N1cHBvcnRlZCgpLCBzbworCSAqIGRyaXZlcnMgY2FuIHBhc3MgdGhpcyBpbmZvIGFsb25nIC4uLiBsaWtlIE5FVElGX0ZfSElHSERNQSwKKwkgKiBTY3NpX0hvc3QuaGlnaG1lbV9pbywgYW5kIHNvIGZvcnRoLiAgSXQncyByZWFkb25seSB0byBhbGwKKwkgKiBob3N0IHNpZGUgZHJpdmVycyB0aG91Z2guCisJICovCisJaWYgKEhDQ182NEJJVF9BRERSIChoY2NfcGFyYW1zKSkgeworCQl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5zZWdtZW50KTsKKyNpZiAwCisvLyB0aGlzIGlzIGRlZXBseSBicm9rZW4gb24gYWxtb3N0IGFsbCBhcmNoaXRlY3R1cmVzCisJCWlmICghcGNpX3NldF9kbWFfbWFzayAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlciksIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkpCisJCQllaGNpX2luZm8gKGVoY2ksICJlbmFibGVkIDY0Yml0IFBDSSBETUFcbiIpOworI2VuZGlmCisJfQorCisJLyogY2xlYXIgaW50ZXJydXB0IGVuYWJsZXMsIHNldCBpcnEgbGF0ZW5jeSAqLworCWlmIChsb2cyX2lycV90aHJlc2ggPCAwIHx8IGxvZzJfaXJxX3RocmVzaCA+IDYpCisJCWxvZzJfaXJxX3RocmVzaCA9IDA7CisJdGVtcCA9IDEgPDwgKDE2ICsgbG9nMl9pcnFfdGhyZXNoKTsKKwlpZiAoSENDX0NBTlBBUksoaGNjX3BhcmFtcykpIHsKKwkJLyogSFcgZGVmYXVsdCBwYXJrID09IDMsIG9uIGhhcmR3YXJlIHRoYXQgc3VwcG9ydHMgaXQgKGxpa2UKKwkJICogTlZpZGlhIGFuZCBBTEkgc2lsaWNvbiksIG1heGltaXplcyB0aHJvdWdocHV0IG9uIHRoZSBhc3luYworCQkgKiBzY2hlZHVsZSBieSBhdm9pZGluZyBRSCBmZXRjaGVzIGJldHdlZW4gdHJhbnNmZXJzLgorCQkgKgorCQkgKiBXaXRoIGZhc3QgdXNiIHN0b3JhZ2UgZGV2aWNlcyBhbmQgTkZvcmNlMiwgInBhcmsiIHNlZW1zIHRvCisJCSAqIG1ha2UgcHJvYmxlbXM6ICB0aHJvdWdocHV0IHJlZHVjdGlvbiAoISksIGRhdGEgZXJyb3JzLi4uCisJCSAqLworCQlpZiAocGFyaykgeworCQkJcGFyayA9IG1pbiAocGFyaywgKHVuc2lnbmVkKSAzKTsKKwkJCXRlbXAgfD0gQ01EX1BBUks7CisJCQl0ZW1wIHw9IHBhcmsgPDwgODsKKwkJfQorCQllaGNpX2luZm8gKGVoY2ksICJwYXJrICVkXG4iLCBwYXJrKTsKKwl9CisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOIChoY2NfcGFyYW1zKSkgeworCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLworCQl0ZW1wICY9IH4oMyA8PCAyKTsKKwkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKKwkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7CisJCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOworCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOworCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOworCQlkZWZhdWx0OglCVUcgKCk7CisJCX0KKwl9CisJLy8gUGhpbGlwcywgSW50ZWwsIGFuZCBtYXliZSBvdGhlcnMgbmVlZCBDTURfUlVOIGJlZm9yZSB0aGUKKwkvLyByb290IGh1YiB3aWxsIGRldGVjdCBuZXcgZGV2aWNlcyAod2h5Pyk7IE5FQyBkb2Vzbid0CisJdGVtcCB8PSBDTURfUlVOOworCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCWRiZ19jbWQgKGVoY2ksICJpbml0IiwgdGVtcCk7CisKKwkvKiBzZXQgYXN5bmMgc2xlZXAgdGltZSA9IDEwIHVzIC4uLiA/ICovCisKKwkvKiB3aXJlIHVwIHRoZSByb290IGh1YiAqLworCWJ1cyA9IGhjZF90b19idXMgKGhjZCk7CisJdWRldiA9IGZpcnN0ID8gdXNiX2FsbG9jX2RldiAoTlVMTCwgYnVzLCAwKSA6IGJ1cy0+cm9vdF9odWI7CisJaWYgKCF1ZGV2KSB7Citkb25lMjoKKwkJZWhjaV9tZW1fY2xlYW51cCAoZWhjaSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCXVkZXYtPnN0YXRlID0gZmlyc3QgPyBVU0JfU1RBVEVfQVRUQUNIRUQgOiBVU0JfU1RBVEVfQ09ORklHVVJFRDsKKworCS8qCisJICogU3RhcnQsIGVuYWJsaW5nIGZ1bGwgVVNCIDIuMCBmdW5jdGlvbmFsaXR5IC4uLiB1c2IgMS4xIGRldmljZXMKKwkgKiBhcmUgZXhwbGljaXRseSBoYW5kZWQgdG8gY29tcGFuaW9uIGNvbnRyb2xsZXIocyksIHNvIG5vIFRUIGlzCisJICogaW52b2x2ZWQgd2l0aCB0aGUgcm9vdCBodWIuICAoRXhjZXB0IHdoZXJlIG9uZSBpcyBpbnRlZ3JhdGVkLAorCSAqIGFuZCB0aGVyZSdzIG5vIGNvbXBhbmlvbiBjb250cm9sbGVyIHVubGVzcyBtYXliZSBmb3IgVVNCIE9URy4pCisJICovCisJaWYgKGZpcnN0KSB7CisJCWVoY2ktPnJlYm9vdF9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gZWhjaV9yZWJvb3Q7CisJCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllciAoJmVoY2ktPnJlYm9vdF9ub3RpZmllcik7CisJfQorCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJd3JpdGVsIChGTEFHX0NGLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZSAqLworCisJdGVtcCA9IEhDX1ZFUlNJT04ocmVhZGwgKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJZWhjaV9pbmZvIChlaGNpLAorCQkiVVNCICV4LiV4ICVzLCBFSENJICV4LiUwMngsIGRyaXZlciAlc1xuIiwKKwkJKChzYnJuICYgMHhmMCk+PjQpLCAoc2JybiAmIDB4MGYpLAorCQlmaXJzdCA/ICJpbml0aWFsaXplZCIgOiAicmVzdGFydGVkIiwKKwkJdGVtcCA+PiA4LCB0ZW1wICYgMHhmZiwgRFJJVkVSX1ZFUlNJT04pOworCisJLyoKKwkgKiBGcm9tIGhlcmUgb24sIGtodWJkIGNvbmN1cnJlbnRseSBhY2Nlc3NlcyB0aGUgcm9vdAorCSAqIGh1YjsgZHJpdmVycyB3aWxsIGJlIHRhbGtpbmcgdG8gZW51bWVyYXRlZCBkZXZpY2VzLgorCSAqIChPbiByZXN0YXJ0IHBhdGhzLCBraHViZCBhbHJlYWR5IGtub3dzIGFib3V0IHRoZSByb290CisJICogaHViIGFuZCBjb3VsZCBmaW5kIHdvcmsgYXMgc29vbiBhcyB3ZSB3cm90ZSBGTEFHX0NGLikKKwkgKgorCSAqIEJlZm9yZSB0aGlzIHBvaW50IHRoZSBIQyB3YXMgaWRsZS9yZWFkeS4gIEFmdGVyLCBraHViZAorCSAqIGFuZCBkZXZpY2UgZHJpdmVycyBtYXkgc3RhcnQgaXQgcnVubmluZy4KKwkgKi8KKwlpZiAoZmlyc3QgJiYgdXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1YiAodWRldiwgaGNkKSAhPSAwKSB7CisJCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1JVTk5JTkcpCisJCQllaGNpX3F1aWVzY2UgKGVoY2kpOworCQllaGNpX3Jlc2V0IChlaGNpKTsKKwkJdXNiX3B1dF9kZXYgKHVkZXYpOyAKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkb25lMjsKKwl9CisKKwl3cml0ZWwgKElOVFJfTUFTSywgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsgLyogVHVybiBPbiBJbnRlcnJ1cHRzICovCisKKwlpZiAoZmlyc3QpCisJCWNyZWF0ZV9kZWJ1Z19maWxlcyAoZWhjaSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogYWx3YXlzIGNhbGxlZCBieSB0aHJlYWQ7IG5vcm1hbGx5IHJtbW9kICovCisKK3N0YXRpYyB2b2lkIGVoY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTgJCQlyaF9wb3J0cywgcG9ydDsKKworCWVoY2lfZGJnIChlaGNpLCAic3RvcFxuIik7CisKKwkvKiBUdXJuIG9mZiBwb3J0IHBvd2VyIG9uIGFsbCByb290IGh1YiBwb3J0cy4gKi8KKwlyaF9wb3J0cyA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKKwlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IHJoX3BvcnRzOyBwb3J0KyspCisJCSh2b2lkKSBlaGNpX2h1Yl9jb250cm9sKGhjZCwKKwkJCUNsZWFyUG9ydEZlYXR1cmUsIFVTQl9QT1JUX0ZFQVRfUE9XRVIsCisJCQlwb3J0LCBOVUxMLCAwKTsKKworCS8qIG5vIG1vcmUgaW50ZXJydXB0cyAuLi4gKi8KKwlkZWxfdGltZXJfc3luYyAoJmVoY2ktPndhdGNoZG9nKTsKKworCXNwaW5fbG9ja19pcnEoJmVoY2ktPmxvY2spOworCWlmIChIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKKwkJZWhjaV9xdWllc2NlIChlaGNpKTsKKworCWVoY2lfcmVzZXQgKGVoY2kpOworCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKKwlzcGluX3VubG9ja19pcnEoJmVoY2ktPmxvY2spOworCisJLyogbGV0IGNvbXBhbmlvbiBjb250cm9sbGVycyB3b3JrIHdoZW4gd2UgYXJlbid0ICovCisJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllciAoJmVoY2ktPnJlYm9vdF9ub3RpZmllcik7CisKKwlyZW1vdmVfZGVidWdfZmlsZXMgKGVoY2kpOworCisJLyogcm9vdCBodWIgaXMgc2h1dCBkb3duIHNlcGFyYXRlbHkgKGZpcnN0LCB3aGVuIHBvc3NpYmxlKSAqLworCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwlpZiAoZWhjaS0+YXN5bmMpCisJCWVoY2lfd29yayAoZWhjaSwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJZWhjaV9tZW1fY2xlYW51cCAoZWhjaSk7CisKKyNpZmRlZglFSENJX1NUQVRTCisJZWhjaV9kYmcgKGVoY2ksICJpcnEgbm9ybWFsICVsZCBlcnIgJWxkIHJlY2xhaW0gJWxkIChsb3N0ICVsZClcbiIsCisJCWVoY2ktPnN0YXRzLm5vcm1hbCwgZWhjaS0+c3RhdHMuZXJyb3IsIGVoY2ktPnN0YXRzLnJlY2xhaW0sCisJCWVoY2ktPnN0YXRzLmxvc3RfaWFhKTsKKwllaGNpX2RiZyAoZWhjaSwgImNvbXBsZXRlICVsZCB1bmxpbmsgJWxkXG4iLAorCQllaGNpLT5zdGF0cy5jb21wbGV0ZSwgZWhjaS0+c3RhdHMudW5saW5rKTsKKyNlbmRpZgorCisJZGJnX3N0YXR1cyAoZWhjaSwgImVoY2lfc3RvcCBjb21wbGV0ZWQiLCByZWFkbCAoJmVoY2ktPnJlZ3MtPnN0YXR1cykpOworfQorCitzdGF0aWMgaW50IGVoY2lfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwlyZXR1cm4gKHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBzdXNwZW5kL3Jlc3VtZSwgc2VjdGlvbiA0LjMgKi8KKworLyogVGhlc2Ugcm91dGluZXMgcmVseSBvbiB0aGUgYnVzIChwY2ksIHBsYXRmb3JtLCBldGMpCisgKiB0byBoYW5kbGUgcG93ZXJkb3duIGFuZCB3YWtldXAsIGFuZCBjdXJyZW50bHkgYWxzbyBvbgorICogdHJhbnNjZWl2ZXJzIHRoYXQgZG9uJ3QgbmVlZCBhbnkgc29mdHdhcmUgYXR0ZW50aW9uIHRvIHNldCB1cAorICogdGhlIHJpZ2h0IHNvcnQgb2Ygd2FrZXVwLiAgCisgKi8KKworc3RhdGljIGludCBlaGNpX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisKKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAgKDEwMCk7CisKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkodm9pZCkgdXNiX3N1c3BlbmRfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIsIHN0YXRlKTsKKyNlbHNlCisJdXNiX2xvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworCSh2b2lkKSBlaGNpX2h1Yl9zdXNwZW5kIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2VuZGlmCisKKwkvLyBzYXZlIChQQ0kpIEZMQURKIGluIGNhc2Ugb2YgVmF1eCBwb3dlciBsb3NzCisJLy8gLi4uIHdlJ2Qgb25seSB1c2UgaXQgdG8gaGFuZGxlIGNsb2NrIHNrZXcKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfcmVzdW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1bnNpZ25lZAkJcG9ydDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdCA9IGhjZC0+c2VsZi5yb290X2h1YjsKKwlpbnQJCQlyZXR2YWwgPSAtRUlOVkFMOworCWludAkJCXBvd2VydXAgPSAwOworCisJLy8gbWF5YmUgcmVzdG9yZSAoUENJKSBGTEFESgorCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwICgxMDApOworCisJLyogSWYgYW55IHBvcnQgaXMgc3VzcGVuZGVkLCB3ZSBrbm93IHdlIGNhbi9tdXN0IHJlc3VtZSB0aGUgSEMuICovCisJZm9yIChwb3J0ID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOyBwb3J0ID4gMDsgKSB7CisJCXUzMglzdGF0dXM7CisJCXBvcnQtLTsKKwkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbcG9ydF0pOworCQlpZiAoc3RhdHVzICYgUE9SVF9TVVNQRU5EKSB7CisJCQlkb3duICgmaGNkLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCQkJcmV0dmFsID0gZWhjaV9odWJfcmVzdW1lIChoY2QpOworCQkJdXAgKCZoY2QtPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHN0YXR1cyAmIFBPUlRfUE9XRVIpID09IDApCisJCQlwb3dlcnVwID0gMTsKKwkJaWYgKCFyb290LT5jaGlsZHJlbiBbcG9ydF0pCisJCQljb250aW51ZTsKKwkJZGJnX3BvcnQgKGVoY2ksIF9fRlVOQ1RJT05fXywgcG9ydCArIDEsIHN0YXR1cyk7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlIChyb290LT5jaGlsZHJlbltwb3J0XSwKKwkJCQkJVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKKwl9CisKKwkvKiBFbHNlIHJlc2V0LCB0byBjb3BlIHdpdGggcG93ZXIgbG9zcyBvciBmbHVzaC10by1zdG9yYWdlCisJICogc3R5bGUgInJlc3VtZSIgaGF2aW5nIGFjdGl2YXRlZCBCSU9TIGR1cmluZyByZWJvb3QuCisJICovCisJaWYgKHBvcnQgPT0gMCkgeworCQkodm9pZCkgZWhjaV9oYWx0IChlaGNpKTsKKwkJKHZvaWQpIGVoY2lfcmVzZXQgKGVoY2kpOworCQkodm9pZCkgZWhjaV9oY19yZXNldCAoaGNkKTsKKworCQkvKiBlbXB0eWluZyB0aGUgc2NoZWR1bGUgYWJvcnRzIGFueSB1cmJzICovCisJCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwkJaWYgKGVoY2ktPnJlY2xhaW0pCisJCQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMTsKKwkJZWhjaV93b3JrIChlaGNpLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkJLyogcmVzdGFydDsga2h1YmQgd2lsbCBkaXNjb25uZWN0IGRldmljZXMgKi8KKwkJcmV0dmFsID0gZWhjaV9zdGFydCAoaGNkKTsKKworCQkvKiBoZXJlIHdlICJrbm93IiByb290IHBvcnRzIHNob3VsZCBhbHdheXMgc3RheSBwb3dlcmVkOworCQkgKiBidXQgc29tZSBjb250cm9sbGVycyBtYXkgbG9zdCBhbGwgcG93ZXIuCisJCSAqLworCQlpZiAocG93ZXJ1cCkgeworCQkJZWhjaV9kYmcgKGVoY2ksICIuLi5wb3dlcnVwIHBvcnRzLi4uXG4iKTsKKwkJCWZvciAocG9ydCA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsgcG9ydCA+IDA7ICkKKwkJCQkodm9pZCkgZWhjaV9odWJfY29udHJvbChoY2QsCisJCQkJCVNldFBvcnRGZWF0dXJlLCBVU0JfUE9SVF9GRUFUX1BPV0VSLAorCQkJCQkJcG9ydC0tLCBOVUxMLCAwKTsKKwkJCW1zbGVlcCgyMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGVoY2lfd29yayBpcyBjYWxsZWQgZnJvbSBzb21lIGludGVycnVwdHMsIHRpbWVycywgYW5kIHNvIG9uLgorICogaXQgY2FsbHMgZHJpdmVyIGNvbXBsZXRpb24gZnVuY3Rpb25zLCBhZnRlciBkcm9wcGluZyBlaGNpLT5sb2NrLgorICovCitzdGF0aWMgdm9pZCBlaGNpX3dvcmsgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdGltZXJfYWN0aW9uX2RvbmUgKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKKwlpZiAoZWhjaS0+cmVjbGFpbV9yZWFkeSkKKwkJZW5kX3VubGlua19hc3luYyAoZWhjaSwgcmVncyk7CisKKwkvKiBhbm90aGVyIENQVSBtYXkgZHJvcCBlaGNpLT5sb2NrIGR1cmluZyBhIHNjaGVkdWxlIHNjYW4gd2hpbGUKKwkgKiBpdCByZXBvcnRzIHVyYiBjb21wbGV0aW9ucy4gIHRoaXMgZmxhZyBndWFyZHMgYWdhaW5zdCBib2d1cworCSAqIGF0dGVtcHRzIGF0IHJlLWVudHJhbnQgc2NoZWR1bGUgc2Nhbm5pbmcuCisJICovCisJaWYgKGVoY2ktPnNjYW5uaW5nKQorCQlyZXR1cm47CisJZWhjaS0+c2Nhbm5pbmcgPSAxOworCXNjYW5fYXN5bmMgKGVoY2ksIHJlZ3MpOworCWlmIChlaGNpLT5uZXh0X3VmcmFtZSAhPSAtMSkKKwkJc2Nhbl9wZXJpb2RpYyAoZWhjaSwgcmVncyk7CisJZWhjaS0+c2Nhbm5pbmcgPSAwOworCisJLyogdGhlIElPIHdhdGNoZG9nIGd1YXJkcyBhZ2FpbnN0IGhhcmR3YXJlIG9yIGRyaXZlciBidWdzIHRoYXQKKwkgKiBtaXNwbGFjZSBJUlFzLCBhbmQgc2hvdWxkIGxldCB1cyBydW4gY29tcGxldGVseSB3aXRob3V0IElSUXMuCisJICogc3VjaCBsb3NzYWdlIGhhcyBiZWVuIG9ic2VydmVkIG9uIGJvdGggVlQ2MjAyIGFuZCBWVDgyMzUuIAorCSAqLworCWlmIChIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpICYmCisJCQkoZWhjaS0+YXN5bmMtPnFoX25leHQucHRyICE9IE5VTEwgfHwKKwkJCSBlaGNpLT5wZXJpb2RpY19zY2hlZCAhPSAwKSkKKwkJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlaGNpX2lycSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXUzMgkJCXN0YXR1czsKKwlpbnQJCQliaDsKKworCXNwaW5fbG9jayAoJmVoY2ktPmxvY2spOworCisJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOworCisJLyogZS5nLiBjYXJkYnVzIHBoeXNpY2FsIGVqZWN0ICovCisJaWYgKHN0YXR1cyA9PSB+KHUzMikgMCkgeworCQllaGNpX2RiZyAoZWhjaSwgImRldmljZSByZW1vdmVkXG4iKTsKKwkJZ290byBkZWFkOworCX0KKworCXN0YXR1cyAmPSBJTlRSX01BU0s7CisJaWYgKCFzdGF0dXMpIHsJCQkvKiBpcnEgc2hhcmluZz8gKi8KKwkJc3Bpbl91bmxvY2soJmVoY2ktPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogY2xlYXIgKGp1c3QpIGludGVycnVwdHMgKi8KKwl3cml0ZWwgKHN0YXR1cywgJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CisJcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGUgKi8KKwliaCA9IDA7CisKKyNpZmRlZglFSENJX1ZFUkJPU0VfREVCVUcKKwkvKiB1bnJlcXVlc3RlZC9pZ25vcmVkOiBGcmFtZSBMaXN0IFJvbGxvdmVyICovCisJZGJnX3N0YXR1cyAoZWhjaSwgImlycSIsIHN0YXR1cyk7CisjZW5kaWYKKworCS8qIElOVCwgRVJSLCBhbmQgSUFBIGludGVycnVwdCByYXRlcyBjYW4gYmUgdGhyb3R0bGVkICovCisKKwkvKiBub3JtYWwgWzQuMTUuMS4yXSBvciBlcnJvciBbNC4xNS4xLjFdIGNvbXBsZXRpb24gKi8KKwlpZiAobGlrZWx5ICgoc3RhdHVzICYgKFNUU19JTlR8U1RTX0VSUikpICE9IDApKSB7CisJCWlmIChsaWtlbHkgKChzdGF0dXMgJiBTVFNfRVJSKSA9PSAwKSkKKwkJCUNPVU5UIChlaGNpLT5zdGF0cy5ub3JtYWwpOworCQllbHNlCisJCQlDT1VOVCAoZWhjaS0+c3RhdHMuZXJyb3IpOworCQliaCA9IDE7CisJfQorCisJLyogY29tcGxldGUgdGhlIHVubGlua2luZyBvZiBzb21lIHFoIFs0LjE1LjIuM10gKi8KKwlpZiAoc3RhdHVzICYgU1RTX0lBQSkgeworCQlDT1VOVCAoZWhjaS0+c3RhdHMucmVjbGFpbSk7CisJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQliaCA9IDE7CisJfQorCisJLyogcmVtb3RlIHdha2V1cCBbNC4zLjFdICovCisJaWYgKChzdGF0dXMgJiBTVFNfUENEKSAmJiBoY2QtPnJlbW90ZV93YWtldXApIHsKKwkJdW5zaWduZWQJaSA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKKworCQkvKiByZXN1bWUgcm9vdCBodWI/ICovCisJCXN0YXR1cyA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJCWlmICghKHN0YXR1cyAmIENNRF9SVU4pKQorCQkJd3JpdGVsIChzdGF0dXMgfCBDTURfUlVOLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwkJd2hpbGUgKGktLSkgeworCQkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQkJaWYgKHN0YXR1cyAmIFBPUlRfT1dORVIpCisJCQkJY29udGludWU7CisJCQlpZiAoIShzdGF0dXMgJiBQT1JUX1JFU1VNRSkKKwkJCQkJfHwgZWhjaS0+cmVzZXRfZG9uZSBbaV0gIT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJLyogc3RhcnQgMjAgbXNlYyByZXN1bWUgc2lnbmFsaW5nIGZyb20gdGhpcyBwb3J0LAorCQkJICogYW5kIG1ha2Uga2h1YmQgY29sbGVjdCBQT1JUX1NUQVRfQ19TVVNQRU5EIHRvCisJCQkgKiBzdG9wIHRoYXQgc2lnbmFsaW5nLgorCQkJICovCisJCQllaGNpLT5yZXNldF9kb25lIFtpXSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICgyMCk7CisJCQltb2RfdGltZXIgKCZoY2QtPnJoX3RpbWVyLAorCQkJCQllaGNpLT5yZXNldF9kb25lIFtpXSArIDEpOworCQkJZWhjaV9kYmcgKGVoY2ksICJwb3J0ICVkIHJlbW90ZSB3YWtldXBcbiIsIGkgKyAxKTsKKwkJfQorCX0KKworCS8qIFBDSSBlcnJvcnMgWzQuMTUuMi40XSAqLworCWlmICh1bmxpa2VseSAoKHN0YXR1cyAmIFNUU19GQVRBTCkgIT0gMCkpIHsKKwkJLyogYm9ndXMgImZhdGFsIiBJUlFzIGFwcGVhciBvbiBzb21lIGNoaXBzLi4uIHdoeT8gICovCisJCXN0YXR1cyA9IHJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwkJZGJnX2NtZCAoZWhjaSwgImZhdGFsIiwgcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKSk7CisJCWRiZ19zdGF0dXMgKGVoY2ksICJmYXRhbCIsIHN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBTVFNfSEFMVCkgeworCQkJZWhjaV9lcnIgKGVoY2ksICJmYXRhbCBlcnJvclxuIik7CitkZWFkOgorCQkJZWhjaV9yZXNldCAoZWhjaSk7CisJCQl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCQkJLyogZ2VuZXJpYyBsYXllciBraWxscy91bmxpbmtzIGFsbCB1cmJzLCB0aGVuCisJCQkgKiB1c2VzIGVoY2lfc3RvcCB0byBjbGVhbiB1cCB0aGUgcmVzdAorCQkJICovCisJCQliaCA9IDE7CisJCX0KKwl9CisKKwlpZiAoYmgpCisJCWVoY2lfd29yayAoZWhjaSwgcmVncyk7CisJc3Bpbl91bmxvY2sgKCZlaGNpLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBub24tZXJyb3IgcmV0dXJucyBhcmUgYSBwcm9taXNlIHRvIGdpdmViYWNrKCkgdGhlIHVyYiBsYXRlcgorICogd2UgZHJvcCBvd25lcnNoaXAgc28gbmV4dCBvd25lciAob3IgdXJiIHVubGluaykgY2FuIGdldCBpdAorICoKKyAqIHVyYiArIGRldiBpcyBpbiBoY2Quc2VsZi5jb250cm9sbGVyLnVyYl9saXN0CisgKiB3ZSdyZSBxdWV1ZWluZyBURHMgb250byBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgbGlzdHMKKyAqCisgKiBoY2Qtc3BlY2lmaWMgaW5pdCBmb3IgaGNwcml2IGhhc24ndCBiZWVuIGRvbmUgeWV0CisgKgorICogTk9URTogIGNvbnRyb2wsIGJ1bGssIGFuZCBpbnRlcnJ1cHQgc2hhcmUgdGhlIHNhbWUgY29kZSB0byBhcHBlbmQgVERzCisgKiB0byBhIChwb3NzaWJseSBhY3RpdmUpIFFILCBhbmQgdGhlIHNhbWUgUUggc2Nhbm5pbmcgY29kZS4KKyAqLworc3RhdGljIGludCBlaGNpX3VyYl9lbnF1ZXVlICgKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCisJc3RydWN0IHVyYgkqdXJiLAorCWludAkJbWVtX2ZsYWdzCispIHsKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJc3RydWN0IGxpc3RfaGVhZAlxdGRfbGlzdDsKKworCUlOSVRfTElTVF9IRUFEICgmcXRkX2xpc3QpOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSkpIHsKKwkvLyBjYXNlIFBJUEVfQ09OVFJPTDoKKwkvLyBjYXNlIFBJUEVfQlVMSzoKKwlkZWZhdWx0OgorCQlpZiAoIXFoX3VyYl90cmFuc2FjdGlvbiAoZWhjaSwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncykpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIHN1Ym1pdF9hc3luYyAoZWhjaSwgZXAsIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MpOworCisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJaWYgKCFxaF91cmJfdHJhbnNhY3Rpb24gKGVoY2ksIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBpbnRyX3N1Ym1pdCAoZWhjaSwgZXAsIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MpOworCisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJcmV0dXJuIGl0ZF9zdWJtaXQgKGVoY2ksIHVyYiwgbWVtX2ZsYWdzKTsKKwkJZWxzZQorCQkJcmV0dXJuIHNpdGRfc3VibWl0IChlaGNpLCB1cmIsIG1lbV9mbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCS8qIGlmIHdlIG5lZWQgdG8gdXNlIElBQSBhbmQgaXQncyBidXN5LCBkZWZlciAqLworCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfTElOS0VECisJCQkmJiBlaGNpLT5yZWNsYWltCisJCQkmJiBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKSB7CisJCXN0cnVjdCBlaGNpX3FoCQkqbGFzdDsKKworCQlmb3IgKGxhc3QgPSBlaGNpLT5yZWNsYWltOworCQkJCWxhc3QtPnJlY2xhaW07CisJCQkJbGFzdCA9IGxhc3QtPnJlY2xhaW0pCisJCQljb250aW51ZTsKKwkJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfVU5MSU5LX1dBSVQ7CisJCWxhc3QtPnJlY2xhaW0gPSBxaDsKKworCS8qIGJ5cGFzcyBJQUEgaWYgdGhlIGhjIGNhbid0IGNhcmUgKi8KKwl9IGVsc2UgaWYgKCFIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpICYmIGVoY2ktPnJlY2xhaW0pCisJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIE5VTEwpOworCisJLyogc29tZXRoaW5nIGVsc2UgbWlnaHQgaGF2ZSB1bmxpbmtlZCB0aGUgcWggYnkgbm93ICovCisJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpCisJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgcWgpOworfQorCisvKiByZW1vdmUgZnJvbSBoYXJkd2FyZSBsaXN0cworICogY29tcGxldGlvbnMgbm9ybWFsbHkgaGFwcGVuIGFzeW5jaHJvbm91c2x5CisgKi8KKworc3RhdGljIGludCBlaGNpX3VyYl9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgeworCS8vIGNhc2UgUElQRV9DT05UUk9MOgorCS8vIGNhc2UgUElQRV9CVUxLOgorCWRlZmF1bHQ6CisJCXFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OworCQlpZiAoIXFoKQorCQkJYnJlYWs7CisJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQlicmVhazsKKworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OworCQlpZiAoIXFoKQorCQkJYnJlYWs7CisJCXN3aXRjaCAocWgtPnFoX3N0YXRlKSB7CisJCWNhc2UgUUhfU1RBVEVfTElOS0VEOgorCQkJaW50cl9kZXNjaGVkdWxlIChlaGNpLCBxaCk7CisJCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwkJY2FzZSBRSF9TVEFURV9JRExFOgorCQkJcWhfY29tcGxldGlvbnMgKGVoY2ksIHFoLCBOVUxMKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWhjaV9kYmcgKGVoY2ksICJib2d1cyBxaCAlcCBzdGF0ZSAlZFxuIiwKKwkJCQkJcWgsIHFoLT5xaF9zdGF0ZSk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiByZXNjaGVkdWxlIFFIIGlmZiBhbm90aGVyIHJlcXVlc3QgaXMgcXVldWVkICovCisJCWlmICghbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKKwkJCQkmJiBIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkgeworCQkJaW50IHN0YXR1czsKKworCQkJc3RhdHVzID0gcWhfc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKKwkJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJCS8vIHNob3VsZG4ndCBoYXBwZW4gb2Z0ZW4sIGJ1dCAuLi4KKwkJCQkvLyBGSVhNRSBraWxsIHRob3NlIHRkcycgdXJicworCQkJCWVyciAoImNhbid0IHJlc2NoZWR1bGUgcWggJXAsIGVyciAlZCIsCisJCQkJCXFoLCBzdGF0dXMpOworCQkJfQorCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJLy8gaXRkIG9yIHNpdGQgLi4uCisKKwkJLy8gd2FpdCB0aWxsIG5leHQgY29tcGxldGlvbiwgZG8gaXQgdGhlbi4KKwkJLy8gY29tcGxldGlvbiBpcnFzIGNhbiB3YWl0IHVwIHRvIDEwMjQgbXNlYywKKwkJYnJlYWs7CisJfQorZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBidWxrIHFoIGhvbGRzIHRoZSBkYXRhIHRvZ2dsZQorCitzdGF0aWMgdm9pZAorZWhjaV9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoLCAqdG1wOworCisJLyogQVNTRVJUOiAgYW55IHJlcXVlc3RzL3VyYnMgYXJlIGJlaW5nIHVubGlua2VkICovCisJLyogQVNTRVJUOiAgbm9ib2R5IGNhbiBiZSBzdWJtaXR0aW5nIHVyYnMgZm9yIHRoaXMgYW55IG1vcmUgKi8KKworcmVzY2FuOgorCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXFoID0gZXAtPmhjcHJpdjsKKwlpZiAoIXFoKQorCQlnb3RvIGRvbmU7CisKKwkvKiBlbmRwb2ludHMgY2FuIGJlIGlzbyBzdHJlYW1zLiAgZm9yIG5vdywgd2UgZG9uJ3QKKwkgKiBhY2NlbGVyYXRlIGlzbyBjb21wbGV0aW9ucyAuLi4gc28gc3BpbiBhIHdoaWxlLgorCSAqLworCWlmIChxaC0+aHdfaW5mbzEgPT0gMCkgeworCQllaGNpX3ZkYmcgKGVoY2ksICJpc28gZGVsYXlcbiIpOworCQlnb3RvIGlkbGVfdGltZW91dDsKKwl9CisKKwlpZiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKQorCQlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOworCXN3aXRjaCAocWgtPnFoX3N0YXRlKSB7CisJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJCWZvciAodG1wID0gZWhjaS0+YXN5bmMtPnFoX25leHQucWg7CisJCQkJdG1wICYmIHRtcCAhPSBxaDsKKwkJCQl0bXAgPSB0bXAtPnFoX25leHQucWgpCisJCQljb250aW51ZTsKKwkJLyogcGVyaW9kaWMgcWggc2VsZi11bmxpbmtzIG9uIGVtcHR5ICovCisJCWlmICghdG1wKQorCQkJZ290byBub2dvb2Q7CisJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIFFIX1NUQVRFX1VOTElOSzoJCS8qIHdhaXQgZm9yIGh3IHRvIGZpbmlzaD8gKi8KK2lkbGVfdGltZW91dDoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCAoMSk7CisJCWdvdG8gcmVzY2FuOworCWNhc2UgUUhfU1RBVEVfSURMRToJCS8qIGZ1bGx5IHVubGlua2VkICovCisJCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSkgeworCQkJcWhfcHV0IChxaCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBlbHNlIEZBTEwgVEhST1VHSCAqLworCWRlZmF1bHQ6Citub2dvb2Q6CisJCS8qIGNhbGxlciB3YXMgc3VwcG9zZWQgdG8gaGF2ZSB1bmxpbmtlZCBhbnkgcmVxdWVzdHM7CisJCSAqIHRoYXQncyBub3Qgb3VyIGpvYi4gIGp1c3QgbGVhayB0aGlzIG1lbW9yeS4KKwkJICovCisJCWVoY2lfZXJyIChlaGNpLCAicWggJXAgKCMlMDJ4KSBzdGF0ZSAlZCVzXG4iLAorCQkJcWgsIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsIHFoLT5xaF9zdGF0ZSwKKwkJCWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpID8gIiIgOiAiKGhhcyB0ZHMpIik7CisJCWJyZWFrOworCX0KKwllcC0+aGNwcml2ID0gTlVMTDsKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJFSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJZWhjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9NRU1PUlkgfCBIQ0RfVVNCMiwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkucmVzZXQgPQkJZWhjaV9oY19yZXNldCwKKwkuc3RhcnQgPQkJZWhjaV9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CQllaGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CQllaGNpX3Jlc3VtZSwKKyNlbmRpZgorCS5zdG9wID0JCQllaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCWVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCWVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQllaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0JZWhjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0JZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCWVoY2lfaHViX2NvbnRyb2wsCisJLmh1Yl9zdXNwZW5kID0JCWVoY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJZWhjaV9odWJfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRUhDSSAxLjAgZG9lc24ndCByZXF1aXJlIFBDSSAqLworCisjaWZkZWYJQ09ORklHX1BDSQorCisvKiBQQ0kgZHJpdmVyIHNlbGVjdGlvbiBtZXRhZGF0YTsgUENJIGhvdHBsdWdnaW5nIHVzZXMgdGhpcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkvKiBoYW5kbGUgYW55IFVTQiAyLjAgRUhDSSBjb250cm9sbGVyICovCisJUENJX0RFVklDRV9DTEFTUygoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgyMCksIH4wKSwKKwkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJmVoY2lfZHJpdmVyLAorCX0sCisJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcGNpX2lkcyk7CisKKy8qIHBjaSBkcml2ZXIgZ2x1ZTsgdGhpcyBpcyBhICJuZXcgc3R5bGUiIFBDSSBkcml2ZXIgbW9kdWxlICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZWhjaV9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCShjaGFyICopIGhjZF9uYW1lLAorCS5pZF90YWJsZSA9CXBjaV9pZHMsCisKKwkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLAorCisjaWZkZWYJQ09ORklHX1BNCisJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2JfaGNkX3BjaV9yZXN1bWUsCisjZW5kaWYKK307CisKKyNlbmRpZgkvKiBQQ0kgKi8KKworCisjZGVmaW5lIERSSVZFUl9JTkZPIERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9BVVRIT1IgKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkgCit7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByX2RlYnVnICgiJXM6IGJsb2NrIHNpemVzOiBxaCAlWmQgcXRkICVaZCBpdGQgJVpkIHNpdGQgJVpkXG4iLAorCQloY2RfbmFtZSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9xaCksIHNpemVvZiAoc3RydWN0IGVoY2lfcXRkKSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9pdGQpLCBzaXplb2YgKHN0cnVjdCBlaGNpX3NpdGQpKTsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyICgmZWhjaV9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpIAorewkKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZlaGNpX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzM1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTAsMCArMSw1NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFJvb3QgSHViIC4uLiB0aGUgbm9uc2hhcmFibGUgc3R1ZmYKKyAqCisgKiBSZWdpc3RlcnMgZG9uJ3QgbmVlZCBjcHVfdG9fbGUzMiwgdGhhdCBoYXBwZW5zIHRyYW5zcGFyZW50bHkKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgZWhjaV9odWJfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJaW50CQkJcG9ydDsKKworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKworCXBvcnQgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJc3Bpbl9sb2NrX2lycSAoJmVoY2ktPmxvY2spOworCisJLyogc3RvcCBzY2hlZHVsZXMsIGNsZWFuIGFueSBjb21wbGV0ZWQgd29yayAqLworCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCWVoY2lfcXVpZXNjZSAoZWhjaSk7CisJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7CisJfQorCWVoY2ktPmNvbW1hbmQgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCWlmIChlaGNpLT5yZWNsYWltKQorCQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMTsKKwllaGNpX3dvcmsoZWhjaSwgTlVMTCk7CisKKwkvKiBzdXNwZW5kIGFueSBhY3RpdmUvdW5zdXNwZW5kZWQgcG9ydHMsIG1heWJlIGFsbG93IHdha2V1cCAqLworCXdoaWxlIChwb3J0LS0pIHsKKwkJdTMyIF9faW9tZW0JKnJlZyA9ICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbcG9ydF07CisJCXUzMgkJdDEgPSByZWFkbCAocmVnKTsKKwkJdTMyCQl0MiA9IHQxOworCisJCWlmICgodDEgJiBQT1JUX1BFKSAmJiAhKHQxICYgUE9SVF9PV05FUikpCisJCQl0MiB8PSBQT1JUX1NVU1BFTkQ7CisJCWlmIChoY2QtPnJlbW90ZV93YWtldXApCisJCQl0MiB8PSBQT1JUX1dLT0NfRXxQT1JUX1dLRElTQ19FfFBPUlRfV0tDT05OX0U7CisJCWVsc2UKKwkJCXQyICY9IH4oUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKTsKKworCQlpZiAodDEgIT0gdDIpIHsKKwkJCWVoY2lfdmRiZyAoZWhjaSwgInBvcnQgJWQsICUwOHggLT4gJTA4eFxuIiwKKwkJCQlwb3J0ICsgMSwgdDEsIHQyKTsKKwkJCXdyaXRlbCAodDIsIHJlZyk7CisJCX0KKwl9CisKKwkvKiB0dXJuIG9mZiBub3ctaWRsZSBIQyAqLworCWVoY2lfaGFsdCAoZWhjaSk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKworCWVoY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCk7CisJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIHJvb3QgaHViLCBhbmQgc2hvdWxkIHJlc2V0L3JlaW5pdCBvbiBlcnJvciAqLworc3RhdGljIGludCBlaGNpX2h1Yl9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXUzMgkJCXRlbXA7CisJaW50CQkJaTsKKwlpbnQJCQlpbnRyX2VuYWJsZTsKKworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCg1KTsKKwlzcGluX2xvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkvKiByZS1pbml0IG9wZXJhdGlvbmFsIHJlZ2lzdGVycyBpbiBjYXNlIHdlIGxvc3QgcG93ZXIgKi8KKwlpZiAocmVhZGwgKCZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSkgPT0gMCkgeworIAkJLyogYXQgbGVhc3Qgc29tZSBBUE0gaW1wbGVtZW50YXRpb25zIHdpbGwgdHJ5IHRvIGRlbGl2ZXIKKwkJICogSVJRcyByaWdodCBhd2F5LCBzbyBkZWxheSB0aGVtIHVudGlsIHdlJ3JlIHJlYWR5LgorIAkJICovCisgCQlpbnRyX2VuYWJsZSA9IDE7CisJCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPnNlZ21lbnQpOworCQl3cml0ZWwgKGVoY2ktPnBlcmlvZGljX2RtYSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2xpc3QpOworCQl3cml0ZWwgKCh1MzIpZWhjaS0+YXN5bmMtPnFoX2RtYSwgJmVoY2ktPnJlZ3MtPmFzeW5jX25leHQpOworCX0gZWxzZQorCQlpbnRyX2VuYWJsZSA9IDA7CisJZWhjaV9kYmcoZWhjaSwgInJlc3VtZSByb290IGh1YiVzXG4iLAorCQkJaW50cl9lbmFibGUgPyAiIGFmdGVyIHBvd2VyIGxvc3MiIDogIiIpOworCisJLyogcmVzdG9yZSBDTURfUlVOLCBmcmFtZWxpc3Qgc2l6ZSwgYW5kIGlycSB0aHJlc2hvbGQgKi8KKwl3cml0ZWwgKGVoY2ktPmNvbW1hbmQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCS8qIHRha2UgcG9ydHMgb3V0IG9mIHN1c3BlbmQgKi8KKwlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCXdoaWxlIChpLS0pIHsKKwkJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKKwkJdGVtcCAmPSB+KFBPUlRfV0tPQ19FfFBPUlRfV0tESVNDX0V8UE9SVF9XS0NPTk5fRSk7CisJCWlmICh0ZW1wICYgUE9SVF9TVVNQRU5EKSB7CisJCQllaGNpLT5yZXNldF9kb25lIFtpXSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICgyMCk7CisJCQl0ZW1wIHw9IFBPUlRfUkVTVU1FOworCQl9CisJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJfQorCWkgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJbWRlbGF5ICgyMCk7CisJd2hpbGUgKGktLSkgeworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQlpZiAoKHRlbXAgJiBQT1JUX1NVU1BFTkQpID09IDApCisJCQljb250aW51ZTsKKwkJdGVtcCAmPSB+UE9SVF9SRVNVTUU7CisJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJCWVoY2lfdmRiZyAoZWhjaSwgInJlc3VtZWQgcG9ydCAlZFxuIiwgaSArIDEpOworCX0KKwkodm9pZCkgcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCS8qIG1heWJlIHJlLWFjdGl2YXRlIHRoZSBzY2hlZHVsZShzKSAqLworCXRlbXAgPSAwOworCWlmIChlaGNpLT5hc3luYy0+cWhfbmV4dC5xaCkKKwkJdGVtcCB8PSBDTURfQVNFOworCWlmIChlaGNpLT5wZXJpb2RpY19zY2hlZCkKKwkJdGVtcCB8PSBDTURfUFNFOworCWlmICh0ZW1wKSB7CisJCWVoY2ktPmNvbW1hbmQgfD0gdGVtcDsKKwkJd3JpdGVsIChlaGNpLT5jb21tYW5kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJfQorCisJZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUpOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJLyogTm93IHdlIGNhbiBzYWZlbHkgcmUtZW5hYmxlIGlycXMgKi8KKwlpZiAoaW50cl9lbmFibGUpCisJCXdyaXRlbCAoSU5UUl9NQVNLLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOworCisJc3Bpbl91bmxvY2tfaXJxICgmZWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgZWhjaV9odWJfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGVoY2lfaHViX3Jlc3VtZQkJTlVMTAorCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgY2hlY2tfcmVzZXRfY29tcGxldGUgKAorCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSwKKwlpbnQJCWluZGV4LAorCWludAkJcG9ydF9zdGF0dXMKKykgeworCWlmICghKHBvcnRfc3RhdHVzICYgUE9SVF9DT05ORUNUKSkgeworCQllaGNpLT5yZXNldF9kb25lIFtpbmRleF0gPSAwOworCQlyZXR1cm4gcG9ydF9zdGF0dXM7CisJfQorCisJLyogaWYgcmVzZXQgZmluaXNoZWQgYW5kIGl0J3Mgc3RpbGwgbm90IGVuYWJsZWQgLS0gaGFuZG9mZiAqLworCWlmICghKHBvcnRfc3RhdHVzICYgUE9SVF9QRSkpIHsKKworCQkvKiB3aXRoIGludGVncmF0ZWQgVFQsIHRoZXJlJ3Mgbm9ib2R5IHRvIGhhbmQgaXQgdG8hICovCisJCWlmIChlaGNpX2lzX1RESShlaGNpKSkgeworCQkJZWhjaV9kYmcgKGVoY2ksCisJCQkJIkZhaWxlZCB0byBlbmFibGUgcG9ydCAlZCBvbiByb290IGh1YiBUVFxuIiwKKwkJCQlpbmRleCsxKTsKKwkJCXJldHVybiBwb3J0X3N0YXR1czsKKwkJfQorCisJCWVoY2lfZGJnIChlaGNpLCAicG9ydCAlZCBmdWxsIHNwZWVkIC0tPiBjb21wYW5pb25cbiIsCisJCQlpbmRleCArIDEpOworCisJCS8vIHdoYXQgaGFwcGVucyBpZiBIQ1NfTl9DQyhwYXJhbXMpID09IDAgPworCQlwb3J0X3N0YXR1cyB8PSBQT1JUX09XTkVSOworCQl3cml0ZWwgKHBvcnRfc3RhdHVzLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2luZGV4XSk7CisKKwl9IGVsc2UKKwkJZWhjaV9kYmcgKGVoY2ksICJwb3J0ICVkIGhpZ2ggc3BlZWRcbiIsIGluZGV4ICsgMSk7CisKKwlyZXR1cm4gcG9ydF9zdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyogYnVpbGQgInN0YXR1cyBjaGFuZ2UiIHBhY2tldCAob25lIG9yIHR3byBieXRlcykgZnJvbSBIQyByZWdpc3RlcnMgKi8KKworc3RhdGljIGludAorZWhjaV9odWJfc3RhdHVzX2RhdGEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1MzIJCXRlbXAsIHN0YXR1cyA9IDA7CisJaW50CQlwb3J0cywgaSwgcmV0dmFsID0gMTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJLyogaWYgIVVTQl9TVVNQRU5ELCByb290IGh1YiB0aW1lcnMgd29uJ3QgZ2V0IHNodXQgZG93biAuLi4gKi8KKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisJLyogaW5pdCBzdGF0dXMgdG8gbm8tY2hhbmdlcyAqLworCWJ1ZiBbMF0gPSAwOworCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCWlmIChwb3J0cyA+IDcpIHsKKwkJYnVmIFsxXSA9IDA7CisJCXJldHZhbCsrOworCX0KKwkKKwkvKiBubyBodWIgY2hhbmdlIHJlcG9ydHMgKGJpdCAwKSBmb3Igbm93IChwb3dlciwgLi4uKSAqLworCisJLyogcG9ydCBOIGNoYW5nZXMgKGJpdCBOKT8gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgeworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQlpZiAodGVtcCAmIFBPUlRfT1dORVIpIHsKKwkJCS8qIGRvbid0IHJlcG9ydCB0aGlzIGluIEdldFBvcnRTdGF0dXMgKi8KKwkJCWlmICh0ZW1wICYgUE9SVF9DU0MpIHsKKwkJCQl0ZW1wICY9IH5QT1JUX0NTQzsKKwkJCQl3cml0ZWwgKHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKCEodGVtcCAmIFBPUlRfQ09OTkVDVCkpCisJCQllaGNpLT5yZXNldF9kb25lIFtpXSA9IDA7CisJCWlmICgodGVtcCAmIChQT1JUX0NTQyB8IFBPUlRfUEVDIHwgUE9SVF9PQ0MpKSAhPSAwCisJCQkJLy8gUE9SVF9TVEFUX0NfU1VTUEVORD8KKwkJCQl8fCAoKHRlbXAgJiBQT1JUX1JFU1VNRSkgIT0gMAorCQkJCQkmJiB0aW1lX2FmdGVyIChqaWZmaWVzLAorCQkJCQkJZWhjaS0+cmVzZXRfZG9uZSBbaV0pKSkgeworCQkJaWYgKGkgPCA3KQorCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOworCQkJZWxzZQorCQkJICAgIGJ1ZiBbMV0gfD0gMSA8PCAoaSAtIDcpOworCQkJc3RhdHVzID0gU1RTX1BDRDsKKwkJfQorCX0KKwkvKiBGSVhNRSBhdXRvc3VzcGVuZCBpZGxlIHJvb3QgaHVicyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1cyA/IHJldHZhbCA6IDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitlaGNpX2h1Yl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCQkqZWhjaSwKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yCSpkZXNjCispIHsKKwlpbnQJCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCXUxNgkJdGVtcDsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAxMDsJLyogZWhjaSAxLjAsIDIuMy45IHNheXMgMjBtcyBtYXggKi8KKwlkZXNjLT5iSHViQ29udHJDdXJyZW50ID0gMDsKKworCWRlc2MtPmJOYnJQb3J0cyA9IHBvcnRzOworCXRlbXAgPSAxICsgKHBvcnRzIC8gOCk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA3ICsgMiAqIHRlbXA7CisKKwkvKiB0d28gYml0bWFwczogIHBvcnRzIHJlbW92YWJsZSwgYW5kIHVzYiAxLjAgbGVnYWN5IFBvcnRQd3JDdHJsTWFzayAqLworCW1lbXNldCAoJmRlc2MtPmJpdG1hcCBbMF0sIDAsIHRlbXApOworCW1lbXNldCAoJmRlc2MtPmJpdG1hcCBbdGVtcF0sIDB4ZmYsIHRlbXApOworCisJdGVtcCA9IDB4MDAwODsJCQkvKiBwZXItcG9ydCBvdmVyY3VycmVudCByZXBvcnRpbmcgKi8KKwlpZiAoSENTX1BQQyAoZWhjaS0+aGNzX3BhcmFtcykpCisJCXRlbXAgfD0gMHgwMDAxOwkJLyogcGVyLXBvcnQgcG93ZXIgY29udHJvbCAqLworI2lmIDAKKy8vIHJlLWVuYWJsZSB3aGVuIHdlIHN1cHBvcnQgVVNCX1BPUlRfRkVBVF9JTkRJQ0FUT1IgYmVsb3cuCisJaWYgKEhDU19JTkRJQ0FUT1IgKGVoY2ktPmhjc19wYXJhbXMpKQorCQl0ZW1wIHw9IDB4MDA4MDsJCS8qIHBlci1wb3J0IGluZGljYXRvcnMgKExFRHMpICovCisjZW5kaWYKKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gKF9fZm9yY2UgX191MTYpY3B1X3RvX2xlMTYgKHRlbXApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCVBPUlRfV0FLRV9CSVRTIAkoUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKQorCitzdGF0aWMgaW50IGVoY2lfaHViX2NvbnRyb2wgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJdTE2CQl0eXBlUmVxLAorCXUxNgkJd1ZhbHVlLAorCXUxNgkJd0luZGV4LAorCWNoYXIJCSpidWYsCisJdTE2CQl3TGVuZ3RoCispIHsKKwlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwlpbnQJCXBvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCXUzMgkJdGVtcCwgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAwOworCisJLyoKKwkgKiBGSVhNRTogIHN1cHBvcnQgU2V0UG9ydEZlYXR1cmVzIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SLgorCSAqIEhDU19JTkRJQ0FUT1IgbWF5IHNheSB3ZSBjYW4gY2hhbmdlIExFRHMgdG8gb2ZmL2FtYmVyL2dyZWVuLgorCSAqICh0cmFjayBjdXJyZW50IHN0YXRlIG91cnNlbHZlcykgLi4uIGJsaW5rIGZvciBkaWFnbm9zdGljcywKKwkgKiBwb3dlciwgInRoaXMgaXMgdGhlIG9uZSIsIGV0Yy4gIEVIQ0kgc3BlYyBzdXBwb3J0cyB0aGlzLgorCSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQkJLyogbm8gaHViLXdpZGUgZmVhdHVyZS9zdGF0dXMgZmxhZ3MgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJaWYgKHRlbXAgJiBQT1JUX09XTkVSKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXdyaXRlbCAodGVtcCAmIH5QT1JUX1BFLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9QRUMsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKHRlbXAgJiBQT1JUX1NVU1BFTkQpIHsKKwkJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwKQorCQkJCQlnb3RvIGVycm9yOworCQkJCS8qIHJlc3VtZSBzaWduYWxpbmcgZm9yIDIwIG1zZWMgKi8KKwkJCQl3cml0ZWwgKCh0ZW1wICYgflBPUlRfV0FLRV9CSVRTKSB8IFBPUlRfUkVTVU1FLAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0gPSBqaWZmaWVzCisJCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOgorCQkJLyogd2UgYXV0by1jbGVhciB0aGlzIGZlYXR1cmUgKi8KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlpZiAoSENTX1BQQyAoZWhjaS0+aGNzX3BhcmFtcykpCisJCQkJd3JpdGVsICh0ZW1wICYgflBPUlRfUE9XRVIsCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJCXdyaXRlbCAodGVtcCB8IFBPUlRfQ1NDLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9PQ0MsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCS8qIEdldFBvcnRTdGF0dXMgY2xlYXJzIHJlc2V0ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGUgKi8KKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQllaGNpX2h1Yl9kZXNjcmlwdG9yIChlaGNpLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKQorCQkJYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCS8qIG5vIGh1Yi13aWRlIGZlYXR1cmUvc3RhdHVzIGZsYWdzICovCisJCW1lbXNldCAoYnVmLCAwLCA0KTsKKwkJLy9jcHVfdG9fbGUzMnMgKCh1MzIgKikgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJCWdvdG8gZXJyb3I7CisJCXdJbmRleC0tOworCQlzdGF0dXMgPSAwOworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisKKwkJLy8gd1BvcnRDaGFuZ2UgYml0cworCQlpZiAodGVtcCAmIFBPUlRfQ1NDKQorCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT047CisJCWlmICh0ZW1wICYgUE9SVF9QRUMpCisJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOworCQlpZiAodGVtcCAmIFBPUlRfT0NDKQorCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDsKKworCQkvKiB3aG9ldmVyIHJlc3VtZXMgbXVzdCBHZXRQb3J0U3RhdHVzIHRvIGNvbXBsZXRlIGl0ISEgKi8KKwkJaWYgKCh0ZW1wICYgUE9SVF9SRVNVTUUpCisJCQkJJiYgdGltZV9hZnRlciAoamlmZmllcywKKwkJCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSkpIHsKKwkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOworCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSA9IDA7CisKKwkJCS8qIHN0b3AgcmVzdW1lIHNpZ25hbGluZyAqLworCQkJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJd3JpdGVsICh0ZW1wICYgflBPUlRfUkVTVU1FLAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlyZXR2YWwgPSBoYW5kc2hha2UgKAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0sCisJCQkJCVBPUlRfUkVTVU1FLCAwLCAyMDAwIC8qIDJtc2VjICovKTsKKwkJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJCWVoY2lfZXJyIChlaGNpLCAicG9ydCAlZCByZXN1bWUgZXJyb3IgJWRcbiIsCisJCQkJCXdJbmRleCArIDEsIHJldHZhbCk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCXRlbXAgJj0gfihQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUV8KDM8PDEwKSk7CisJCX0KKworCQkvKiB3aG9ldmVyIHJlc2V0cyBtdXN0IEdldFBvcnRTdGF0dXMgdG8gY29tcGxldGUgaXQhISAqLworCQlpZiAoKHRlbXAgJiBQT1JUX1JFU0VUKQorCQkJCSYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsCisJCQkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0pKSB7CisJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ7CisJCQllaGNpLT5yZXNldF9kb25lIFt3SW5kZXhdID0gMDsKKworCQkJLyogZm9yY2UgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJCXdyaXRlbCAodGVtcCAmIH5QT1JUX1JFU0VULAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJcmV0dmFsID0gaGFuZHNoYWtlICgKKwkJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdLAorCQkJCQlQT1JUX1JFU0VULCAwLCA1MDApOworCQkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQkJZWhjaV9lcnIgKGVoY2ksICJwb3J0ICVkIHJlc2V0IGVycm9yICVkXG4iLAorCQkJCQl3SW5kZXggKyAxLCByZXR2YWwpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisKKwkJCS8qIHNlZSB3aGF0IHdlIGZvdW5kIG91dCAqLworCQkJdGVtcCA9IGNoZWNrX3Jlc2V0X2NvbXBsZXRlIChlaGNpLCB3SW5kZXgsCisJCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSkpOworCQl9CisKKwkJLy8gZG9uJ3Qgc2hvdyB3UG9ydFN0YXR1cyBpZiBpdCdzIG93bmVkIGJ5IGEgY29tcGFuaW9uIGhjCisJCWlmICghKHRlbXAgJiBQT1JUX09XTkVSKSkgeworCQkJaWYgKHRlbXAgJiBQT1JUX0NPTk5FQ1QpIHsKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT047CisJCQkJLy8gc3RhdHVzIG1heSBiZSBmcm9tIGludGVncmF0ZWQgVFQKKwkJCQlzdGF0dXMgfD0gZWhjaV9wb3J0X3NwZWVkKGVoY2ksIHRlbXApOworCQkJfQorCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFOworCQkJaWYgKHRlbXAgJiAoUE9SVF9TVVNQRU5EfFBPUlRfUkVTVU1FKSkKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisJCQlpZiAodGVtcCAmIFBPUlRfT0MpCisJCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQ7CisJCQlpZiAodGVtcCAmIFBPUlRfUkVTRVQpCisJCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVDsKKwkJCWlmICh0ZW1wICYgUE9SVF9QT1dFUikKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSOworCQl9CisKKyNpZm5kZWYJRUhDSV9WRVJCT1NFX0RFQlVHCisJaWYgKHN0YXR1cyAmIH4weGZmZmYpCS8qIG9ubHkgaWYgd1BvcnRDaGFuZ2UgaXMgaW50ZXJlc3RpbmcgKi8KKyNlbmRpZgorCQlkYmdfcG9ydCAoZWhjaSwgIkdldFN0YXR1cyIsIHdJbmRleCArIDEsIHRlbXApOworCQkvLyB3ZSAia25vdyIgdGhpcyBhbGlnbm1lbnQgaXMgZ29vZCwgY2FsbGVyIHVzZWQga21hbGxvYygpLi4uCisJCSooKF9fbGUzMiAqKSBidWYpID0gY3B1X3RvX2xlMzIgKHN0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQkvKiBubyBodWItd2lkZSBmZWF0dXJlL3N0YXR1cyBmbGFncyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJaWYgKHRlbXAgJiBQT1JUX09XTkVSKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwCisJCQkJCXx8ICh0ZW1wICYgUE9SVF9SRVNFVCkgIT0gMCkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKGhjZC0+cmVtb3RlX3dha2V1cCkKKwkJCQl0ZW1wIHw9IFBPUlRfV0FLRV9CSVRTOworCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9TVVNQRU5ELAorCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJaWYgKEhDU19QUEMgKGVoY2ktPmhjc19wYXJhbXMpKQorCQkJCXdyaXRlbCAodGVtcCB8IFBPUlRfUE9XRVIsCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJaWYgKHRlbXAgJiBQT1JUX1JFU1VNRSkKKwkJCQlnb3RvIGVycm9yOworCQkJLyogbGluZSBzdGF0dXMgYml0cyBtYXkgcmVwb3J0IHRoaXMgYXMgbG93IHNwZWVkLAorCQkJICogd2hpY2ggY2FuIGJlIGZpbmUgaWYgdGhpcyByb290IGh1YiBoYXMgYQorCQkJICogdHJhbnNhY3Rpb24gdHJhbnNsYXRvciBidWlsdCBpbi4KKwkJCSAqLworCQkJaWYgKCh0ZW1wICYgKFBPUlRfUEV8UE9SVF9DT05ORUNUKSkgPT0gUE9SVF9DT05ORUNUCisJCQkJCSYmICFlaGNpX2lzX1RESShlaGNpKQorCQkJCQkmJiBQT1JUX1VTQjExICh0ZW1wKSkgeworCQkJCWVoY2lfZGJnIChlaGNpLAorCQkJCQkicG9ydCAlZCBsb3cgc3BlZWQgLS0+IGNvbXBhbmlvblxuIiwKKwkJCQkJd0luZGV4ICsgMSk7CisJCQkJdGVtcCB8PSBQT1JUX09XTkVSOworCQkJfSBlbHNlIHsKKwkJCQllaGNpX3ZkYmcgKGVoY2ksICJwb3J0ICVkIHJlc2V0XG4iLCB3SW5kZXggKyAxKTsKKwkJCQl0ZW1wIHw9IFBPUlRfUkVTRVQ7CisJCQkJdGVtcCAmPSB+UE9SVF9QRTsKKworCQkJCS8qCisJCQkJICogY2FsbGVyIG11c3Qgd2FpdCwgdGhlbiBjYWxsIEdldFBvcnRTdGF0dXMKKwkJCQkgKiB1c2IgMi4wIHNwZWMgc2F5cyA1MCBtcyByZXNldHMgb24gcm9vdAorCQkJCSAqLworCQkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0gPSBqaWZmaWVzCisJCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMgKDUwKTsKKwkJCX0KKwkJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZXMgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorZXJyb3I6CisJCS8qICJzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzODY5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVyZSdzIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBtZW1vcnk6CisgKgktIGRhdGEgdXNlZCBvbmx5IGJ5IHRoZSBIQ0QgLi4uIGttYWxsb2MgaXMgZmluZQorICoJLSBhc3luYyBhbmQgcGVyaW9kaWMgc2NoZWR1bGVzLCBzaGFyZWQgYnkgSEMgYW5kIEhDRCAuLi4gdGhlc2UKKyAqCSAgbmVlZCB0byB1c2UgZG1hX3Bvb2wgb3IgZG1hX2FsbG9jX2NvaGVyZW50CisgKgktIGRyaXZlciBidWZmZXJzLCByZWFkL3dyaXR0ZW4gYnkgSEMgLi4uIHNpbmdsZSBzaG90IERNQSBtYXBwZWQgCisgKgorICogVGhlcmUncyBhbHNvIFBDSSAicmVnaXN0ZXIiIGRhdGEsIHdoaWNoIGlzIG1lbW9yeSBtYXBwZWQuCisgKiBObyBtZW1vcnkgc2VlbiBieSB0aGlzIGRyaXZlciBpcyBwYWdlYWJsZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBbGxvY2F0ZSB0aGUga2V5IHRyYW5zZmVyIHN0cnVjdHVyZXMgZnJvbSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcG9vbCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZWhjaV9xdGRfaW5pdCAoc3RydWN0IGVoY2lfcXRkICpxdGQsIGRtYV9hZGRyX3QgZG1hKQoreworCW1lbXNldCAocXRkLCAwLCBzaXplb2YgKnF0ZCk7CisJcXRkLT5xdGRfZG1hID0gZG1hOworCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9fbGUzMiAoUVREX1NUU19IQUxUKTsKKwlxdGQtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EOworCXF0ZC0+aHdfYWx0X25leHQgPSBFSENJX0xJU1RfRU5EOworCUlOSVRfTElTVF9IRUFEICgmcXRkLT5xdGRfbGlzdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9xdGQgKmVoY2lfcXRkX2FsbG9jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZWhjaV9xdGQJCSpxdGQ7CisJZG1hX2FkZHJfdAkJZG1hOworCisJcXRkID0gZG1hX3Bvb2xfYWxsb2MgKGVoY2ktPnF0ZF9wb29sLCBmbGFncywgJmRtYSk7CisJaWYgKHF0ZCAhPSBOVUxMKSB7CisJCWVoY2lfcXRkX2luaXQgKHF0ZCwgZG1hKTsKKwl9CisJcmV0dXJuIHF0ZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVoY2lfcXRkX2ZyZWUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcXRkICpxdGQpCit7CisJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cXRkX3Bvb2wsIHF0ZCwgcXRkLT5xdGRfZG1hKTsKK30KKworCitzdGF0aWMgdm9pZCBxaF9kZXN0cm95IChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZWhjaV9xaCAqcWggPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGVoY2lfcWgsIGtyZWYpOworCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSA9IHFoLT5laGNpOworCisJLyogY2xlYW4gcXRkcyBmaXJzdCwgYW5kIGtub3cgdGhpcyBpcyBub3QgbGlua2VkICovCisJaWYgKCFsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSB8fCBxaC0+cWhfbmV4dC5wdHIpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJ1bnVzZWQgcWggbm90IGVtcHR5IVxuIik7CisJCUJVRyAoKTsKKwl9CisJaWYgKHFoLT5kdW1teSkKKwkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgcWgtPmR1bW15KTsKKwl1c2JfcHV0X2RldiAocWgtPmRldik7CisJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5xaF9kbWEpOworfQorCitzdGF0aWMgc3RydWN0IGVoY2lfcWggKmVoY2lfcWhfYWxsb2MgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisJZG1hX2FkZHJfdAkJZG1hOworCisJcWggPSAoc3RydWN0IGVoY2lfcWggKikKKwkJZG1hX3Bvb2xfYWxsb2MgKGVoY2ktPnFoX3Bvb2wsIGZsYWdzLCAmZG1hKTsKKwlpZiAoIXFoKQorCQlyZXR1cm4gcWg7CisKKwltZW1zZXQgKHFoLCAwLCBzaXplb2YgKnFoKTsKKwlrcmVmX2luaXQoJnFoLT5rcmVmKTsKKwlxaC0+ZWhjaSA9IGVoY2k7CisJcWgtPnFoX2RtYSA9IGRtYTsKKwkvLyBJTklUX0xJU1RfSEVBRCAoJnFoLT5xaF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCAoJnFoLT5xdGRfbGlzdCk7CisKKwkvKiBkdW1teSB0ZCBlbmFibGVzIHNhZmUgdXJiIHF1ZXVpbmcgKi8KKwlxaC0+ZHVtbXkgPSBlaGNpX3F0ZF9hbGxvYyAoZWhjaSwgZmxhZ3MpOworCWlmIChxaC0+ZHVtbXkgPT0gTlVMTCkgeworCQllaGNpX2RiZyAoZWhjaSwgIm5vIGR1bW15IHRkXG4iKTsKKwkJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5xaF9kbWEpOworCQlxaCA9IE5VTEw7CisJfQorCXJldHVybiBxaDsKK30KKworLyogdG8gc2hhcmUgYSBxaCAoY3B1IHRocmVhZHMsIG9yIGhjKSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWhjaV9xaCAqcWhfZ2V0IChzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJa3JlZl9nZXQoJnFoLT5rcmVmKTsKKwlyZXR1cm4gcWg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxaF9wdXQgKHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwlrcmVmX3B1dCgmcWgtPmtyZWYsIHFoX2Rlc3Ryb3kpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgcXVldWUgaGVhZHMgYW5kIHRyYW5zZmVyIGRlc2NyaXB0b3JzIGFyZSBtYW5hZ2VkIGZyb20gcG9vbHMgdGllZCAKKyAqIHRvIGVhY2ggb2YgdGhlICJwZXIgZGV2aWNlIiBzdHJ1Y3R1cmVzLgorICogVGhpcyBpcyB0aGUgaW5pdGlhbGlzYXRpb24gYW5kIGNsZWFudXAgY29kZS4KKyAqLworCitzdGF0aWMgdm9pZCBlaGNpX21lbV9jbGVhbnVwIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJaWYgKGVoY2ktPmFzeW5jKQorCQlxaF9wdXQgKGVoY2ktPmFzeW5jKTsKKwllaGNpLT5hc3luYyA9IE5VTEw7CisKKwkvKiBETUEgY29uc2lzdGVudCBtZW1vcnkgYW5kIHBvb2xzICovCisJaWYgKGVoY2ktPnF0ZF9wb29sKQorCQlkbWFfcG9vbF9kZXN0cm95IChlaGNpLT5xdGRfcG9vbCk7CisJZWhjaS0+cXRkX3Bvb2wgPSBOVUxMOworCisJaWYgKGVoY2ktPnFoX3Bvb2wpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSAoZWhjaS0+cWhfcG9vbCk7CisJCWVoY2ktPnFoX3Bvb2wgPSBOVUxMOworCX0KKworCWlmIChlaGNpLT5pdGRfcG9vbCkKKwkJZG1hX3Bvb2xfZGVzdHJveSAoZWhjaS0+aXRkX3Bvb2wpOworCWVoY2ktPml0ZF9wb29sID0gTlVMTDsKKworCWlmIChlaGNpLT5zaXRkX3Bvb2wpCisJCWRtYV9wb29sX2Rlc3Ryb3kgKGVoY2ktPnNpdGRfcG9vbCk7CisJZWhjaS0+c2l0ZF9wb29sID0gTlVMTDsKKworCWlmIChlaGNpLT5wZXJpb2RpYykKKwkJZG1hX2ZyZWVfY29oZXJlbnQgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQllaGNpLT5wZXJpb2RpY19zaXplICogc2l6ZW9mICh1MzIpLAorCQkJZWhjaS0+cGVyaW9kaWMsIGVoY2ktPnBlcmlvZGljX2RtYSk7CisJZWhjaS0+cGVyaW9kaWMgPSBOVUxMOworCisJLyogc2hhZG93IHBlcmlvZGljIHRhYmxlICovCisJaWYgKGVoY2ktPnBzaGFkb3cpCisJCWtmcmVlIChlaGNpLT5wc2hhZG93KTsKKwllaGNpLT5wc2hhZG93ID0gTlVMTDsKK30KKworLyogcmVtZW1iZXIgdG8gYWRkIGNsZWFudXAgY29kZSAoYWJvdmUpIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworc3RhdGljIGludCBlaGNpX21lbV9pbml0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBmbGFncykKK3sKKwlpbnQgaTsKKworCS8qIFFURHMgZm9yIGNvbnRyb2wvYnVsay9pbnRyIHRyYW5zZmVycyAqLworCWVoY2ktPnF0ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9xdGQiLCAKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKHN0cnVjdCBlaGNpX3F0ZCksCisJCQkzMiAvKiBieXRlIGFsaWdubWVudCAoZm9yIGh3IHBhcnRzKSAqLywKKwkJCTQwOTYgLyogY2FuJ3QgY3Jvc3MgNEsgKi8pOworCWlmICghZWhjaS0+cXRkX3Bvb2wpIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFFIcyBmb3IgY29udHJvbC9idWxrL2ludHIgdHJhbnNmZXJzICovCisJZWhjaS0+cWhfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfcWgiLCAKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKHN0cnVjdCBlaGNpX3FoKSwKKwkJCTMyIC8qIGJ5dGUgYWxpZ25tZW50IChmb3IgaHcgcGFydHMpICovLAorCQkJNDA5NiAvKiBjYW4ndCBjcm9zcyA0SyAqLyk7CisJaWYgKCFlaGNpLT5xaF9wb29sKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJZWhjaS0+YXN5bmMgPSBlaGNpX3FoX2FsbG9jIChlaGNpLCBmbGFncyk7CisJaWYgKCFlaGNpLT5hc3luYykgeworCQlnb3RvIGZhaWw7CisJfQorCisJLyogSVREIGZvciBoaWdoIHNwZWVkIElTTyB0cmFuc2ZlcnMgKi8KKwllaGNpLT5pdGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfaXRkIiwgCisJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9pdGQpLAorCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCisJCQk0MDk2IC8qIGNhbid0IGNyb3NzIDRLICovKTsKKwlpZiAoIWVoY2ktPml0ZF9wb29sKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBTSVREIGZvciBmdWxsL2xvdyBzcGVlZCBzcGxpdCBJU08gdHJhbnNmZXJzICovCisJZWhjaS0+c2l0ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9zaXRkIiwgCisJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9zaXRkKSwKKwkJCTMyIC8qIGJ5dGUgYWxpZ25tZW50IChmb3IgaHcgcGFydHMpICovLAorCQkJNDA5NiAvKiBjYW4ndCBjcm9zcyA0SyAqLyk7CisJaWYgKCFlaGNpLT5zaXRkX3Bvb2wpIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEhhcmR3YXJlIHBlcmlvZGljIHRhYmxlICovCisJZWhjaS0+cGVyaW9kaWMgPSAoX19sZTMyICopCisJCWRtYV9hbGxvY19jb2hlcmVudCAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKKwkJCWVoY2ktPnBlcmlvZGljX3NpemUgKiBzaXplb2YoX19sZTMyKSwKKwkJCSZlaGNpLT5wZXJpb2RpY19kbWEsIDApOworCWlmIChlaGNpLT5wZXJpb2RpYyA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGkrKykKKwkJZWhjaS0+cGVyaW9kaWMgW2ldID0gRUhDSV9MSVNUX0VORDsKKworCS8qIHNvZnR3YXJlIHNoYWRvdyBvZiBoYXJkd2FyZSB0YWJsZSAqLworCWVoY2ktPnBzaGFkb3cgPSBrbWFsbG9jIChlaGNpLT5wZXJpb2RpY19zaXplICogc2l6ZW9mICh2b2lkICopLCBmbGFncyk7CisJaWYgKGVoY2ktPnBzaGFkb3cgPT0gTlVMTCkgeworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldCAoZWhjaS0+cHNoYWRvdywgMCwgZWhjaS0+cGVyaW9kaWNfc2l6ZSAqIHNpemVvZiAodm9pZCAqKSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwllaGNpX2RiZyAoZWhjaSwgImNvdWxkbid0IGluaXQgbWVtb3J5XG4iKTsKKwllaGNpX21lbV9jbGVhbnVwIChlaGNpKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjliOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0wLDAgKzEsMTA5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgaGFyZHdhcmUgcXVldWUgbWFuaXB1bGF0aW9uIC4uLiB0aGUgY29yZS4gIFFIL1FURCBtYW5pcHVsYXRpb24uCisgKgorICogQ29udHJvbCwgYnVsaywgYW5kIGludGVycnVwdCB0cmFmZmljIGFsbCB1c2UgInFoIiBsaXN0cy4gIFRoZXkgbGlzdCAicXRkIgorICogZW50cmllcyBkZXNjcmliaW5nIFVTQiB0cmFuc2FjdGlvbnMsIG1heCAxNi0yMGtCL2VudHJ5ICh3aXRoIDRrQi1hbGlnbmVkCisgKiBidWZmZXJzIG5lZWRlZCBmb3IgdGhlIGxhcmdlciBudW1iZXIpLiAgV2UgdXNlIG9uZSBRSCBwZXIgZW5kcG9pbnQsIHF1ZXVlCisgKiBtdWx0aXBsZSB1cmJzIChhbGwgdGhyZWUgdHlwZXMpIHBlciBlbmRwb2ludC4gIFVSQnMgbWF5IG5lZWQgc2V2ZXJhbCBxdGRzLgorICoKKyAqIElTTyB0cmFmZmljIHVzZXMgIklTTyBURCIgKGl0ZCwgYW5kIHNpdGQpIHJlY29yZHMsIGFuZCAoYWxvbmcgd2l0aAorICogaW50ZXJydXB0cykgbmVlZHMgY2FyZWZ1bCBzY2hlZHVsaW5nLiAgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGNhbiBiZQorICogYW4gb25nb2luZyBjaGFsbGVuZ2UuICBUaGF0J3MgaW4gImVoY2ktc2NoZWQuYyIuCisgKiAKKyAqIFVTQiAxLjEgZGV2aWNlcyBhcmUgaGFuZGxlZCAoYSkgYnkgImNvbXBhbmlvbiIgT0hDSSBvciBVSENJIHJvb3QgaHVicywKKyAqIG9yIG90aGVyd2lzZSB0aHJvdWdoIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3JzIChUVHMpIGluIFVTQiAyLjAgaHVicyB1c2luZworICogKGIpIHNwZWNpYWwgZmllbGRzIGluIHFoIGVudHJpZXMgb3IgKGMpIHNwbGl0IGlzbyBlbnRyaWVzLiAgVFRzIHdpbGwKKyAqIGJ1ZmZlciBsb3cvZnVsbCBzcGVlZCBkYXRhIHNvIHRoZSBob3N0IGNvbGxlY3RzIGl0IGF0IGhpZ2ggc3BlZWQuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZmlsbCBhIHF0ZCwgcmV0dXJuaW5nIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgd2Ugd2VyZSBhYmxlIHRvIHF1ZXVlIHVwICovCisKK3N0YXRpYyBpbnQKK3F0ZF9maWxsIChzdHJ1Y3QgZWhjaV9xdGQgKnF0ZCwgZG1hX2FkZHJfdCBidWYsIHNpemVfdCBsZW4sCisJCWludCB0b2tlbiwgaW50IG1heHBhY2tldCkKK3sKKwlpbnQJaSwgY291bnQ7CisJdTY0CWFkZHIgPSBidWY7CisKKwkvKiBvbmUgYnVmZmVyIGVudHJ5IHBlciA0SyAuLi4gZmlyc3QgbWlnaHQgYmUgc2hvcnQgb3IgdW5hbGlnbmVkICovCisJcXRkLT5od19idWYgWzBdID0gY3B1X3RvX2xlMzIgKCh1MzIpYWRkcik7CisJcXRkLT5od19idWZfaGkgWzBdID0gY3B1X3RvX2xlMzIgKCh1MzIpKGFkZHIgPj4gMzIpKTsKKwljb3VudCA9IDB4MTAwMCAtIChidWYgJiAweDBmZmYpOwkvKiByZXN0IG9mIHRoYXQgcGFnZSAqLworCWlmIChsaWtlbHkgKGxlbiA8IGNvdW50KSkJCS8qIC4uLiBpZmYgbmVlZGVkICovCisJCWNvdW50ID0gbGVuOworCWVsc2UgeworCQlidWYgKz0gIDB4MTAwMDsKKwkJYnVmICY9IH4weDBmZmY7CisKKwkJLyogcGVyLXF0ZCBsaW1pdDogZnJvbSAxNksgdG8gMjBLIChiZXN0IGFsaWdubWVudCkgKi8KKwkJZm9yIChpID0gMTsgY291bnQgPCBsZW4gJiYgaSA8IDU7IGkrKykgeworCQkJYWRkciA9IGJ1ZjsKKwkJCXF0ZC0+aHdfYnVmIFtpXSA9IGNwdV90b19sZTMyICgodTMyKWFkZHIpOworCQkJcXRkLT5od19idWZfaGkgW2ldID0gY3B1X3RvX2xlMzIgKCh1MzIpKGFkZHIgPj4gMzIpKTsKKwkJCWJ1ZiArPSAweDEwMDA7CisJCQlpZiAoKGNvdW50ICsgMHgxMDAwKSA8IGxlbikKKwkJCQljb3VudCArPSAweDEwMDA7CisJCQllbHNlCisJCQkJY291bnQgPSBsZW47CisJCX0KKworCQkvKiBzaG9ydCBwYWNrZXRzIG1heSBvbmx5IHRlcm1pbmF0ZSB0cmFuc2ZlcnMgKi8KKwkJaWYgKGNvdW50ICE9IGxlbikKKwkJCWNvdW50IC09IChjb3VudCAlIG1heHBhY2tldCk7CisJfQorCXF0ZC0+aHdfdG9rZW4gPSBjcHVfdG9fbGUzMiAoKGNvdW50IDw8IDE2KSB8IHRva2VuKTsKKwlxdGQtPmxlbmd0aCA9IGNvdW50OworCisJcmV0dXJuIGNvdW50OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3FoX3VwZGF0ZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgsIHN0cnVjdCBlaGNpX3F0ZCAqcXRkKQoreworCS8qIHdyaXRlcyB0byBhbiBhY3RpdmUgb3ZlcmxheSBhcmUgdW5zYWZlICovCisJQlVHX09OKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9JRExFKTsKKworCXFoLT5od19xdGRfbmV4dCA9IFFURF9ORVhUIChxdGQtPnF0ZF9kbWEpOworCXFoLT5od19hbHRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisKKwkvKiBFeGNlcHQgZm9yIGNvbnRyb2wgZW5kcG9pbnRzLCB3ZSBtYWtlIGhhcmR3YXJlIG1haW50YWluIGRhdGEKKwkgKiB0b2dnbGUgKGxpa2UgT0hDSSkgLi4uIGhlcmUgKHJlKWluaXRpYWxpemUgdGhlIHRvZ2dsZSBpbiB0aGUgUUgsCisJICogYW5kIHNldCB0aGUgcHNldWRvLXRvZ2dsZSBpbiB1ZGV2LiBPbmx5IHVzYl9jbGVhcl9oYWx0KCkgd2lsbAorCSAqIGV2ZXIgY2xlYXIgaXQuCisJICovCisJaWYgKCEocWgtPmh3X2luZm8xICYgY3B1X3RvX2xlMzIoMSA8PCAxNCkpKSB7CisJCXVuc2lnbmVkCWlzX291dCwgZXBudW07CisKKwkJaXNfb3V0ID0gIShxdGQtPmh3X3Rva2VuICYgY3B1X3RvX2xlMzIoMSA8PCA4KSk7CisJCWVwbnVtID0gKGxlMzJfdG9fY3B1cCgmcWgtPmh3X2luZm8xKSA+PiA4KSAmIDB4MGY7CisJCWlmICh1bmxpa2VseSAoIXVzYl9nZXR0b2dnbGUgKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQpKSkgeworCQkJcWgtPmh3X3Rva2VuICY9IH5fX2NvbnN0YW50X2NwdV90b19sZTMyIChRVERfVE9HR0xFKTsKKwkJCXVzYl9zZXR0b2dnbGUgKHFoLT5kZXYsIGVwbnVtLCBpc19vdXQsIDEpOworCQl9CisJfQorCisJLyogSEMgbXVzdCBzZWUgbGF0ZXN0IHF0ZCBhbmQgcWggZGF0YSBiZWZvcmUgd2UgY2xlYXIgQUNUSVZFK0hBTFQgKi8KKwl3bWIgKCk7CisJcWgtPmh3X3Rva2VuICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFFURF9UT0dHTEUgfCBRVERfU1RTX1BJTkcpOworfQorCisvKiBpZiBpdCB3ZXJlbid0IGZvciBhIGNvbW1vbiBzaWxpY29uIHF1aXJrICh3cml0aW5nIHRoZSBkdW1teSBpbnRvIHRoZSBxaAorICogb3ZlcmxheSwgc28gcWgtPmh3X3Rva2VuIHdyb25nbHkgYmVjb21lcyBpbmFjdGl2ZS9oYWx0ZWQpLCBvbmx5IGZhdWx0CisgKiByZWNvdmVyeSAoaW5jbHVkaW5nIHVyYiBkZXF1ZXVlKSB3b3VsZCBuZWVkIHNvZnR3YXJlIGNoYW5nZXMgdG8gYSBRSC4uLgorICovCitzdGF0aWMgdm9pZAorcWhfcmVmcmVzaCAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJc3RydWN0IGVoY2lfcXRkICpxdGQ7CisKKwlpZiAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpCisJCXF0ZCA9IHFoLT5kdW1teTsKKwllbHNlIHsKKwkJcXRkID0gbGlzdF9lbnRyeSAocWgtPnF0ZF9saXN0Lm5leHQsCisJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCS8qIGZpcnN0IHF0ZCBtYXkgYWxyZWFkeSBiZSBwYXJ0aWFsbHkgcHJvY2Vzc2VkICovCisJCWlmIChjcHVfdG9fbGUzMiAocXRkLT5xdGRfZG1hKSA9PSBxaC0+aHdfY3VycmVudCkKKwkJCXF0ZCA9IE5VTEw7CisJfQorCisJaWYgKHF0ZCkKKwkJcWhfdXBkYXRlIChlaGNpLCBxaCwgcXRkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcXRkX2NvcHlfc3RhdHVzICgKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksCisJc3RydWN0IHVyYiAqdXJiLAorCXNpemVfdCBsZW5ndGgsCisJdTMyIHRva2VuCispCit7CisJLyogY291bnQgSU4vT1VUIGJ5dGVzLCBub3QgU0VUVVAgKGV2ZW4gc2hvcnQgcGFja2V0cykgKi8KKwlpZiAobGlrZWx5IChRVERfUElEICh0b2tlbikgIT0gMikpCisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW5ndGggLSBRVERfTEVOR1RIICh0b2tlbik7CisKKwkvKiBkb24ndCBtb2RpZnkgZXJyb3IgY29kZXMgKi8KKwlpZiAodW5saWtlbHkgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykpCisJCXJldHVybjsKKworCS8qIGZvcmNlIGNsZWFudXAgYWZ0ZXIgc2hvcnQgcmVhZDsgbm90IGFsd2F5cyBhbiBlcnJvciAqLworCWlmICh1bmxpa2VseSAoSVNfU0hPUlRfUkVBRCAodG9rZW4pKSkKKwkJdXJiLT5zdGF0dXMgPSAtRVJFTU9URUlPOworCisJLyogc2VyaW91cyAiY2FuJ3QgcHJvY2VlZCIgZmF1bHRzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqLworCWlmICh0b2tlbiAmIFFURF9TVFNfSEFMVCkgeworCQlpZiAodG9rZW4gJiBRVERfU1RTX0JBQkJMRSkgeworCQkJLyogRklYTUUgIm11c3QiIGRpc2FibGUgYmFiYmxpbmcgZGV2aWNlJ3MgcG9ydCB0b28gKi8KKwkJCXVyYi0+c3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIGlmICh0b2tlbiAmIFFURF9TVFNfTU1GKSB7CisJCQkvKiBmcy9scyBpbnRlcnJ1cHQgeGZlciBtaXNzZWQgdGhlIGNvbXBsZXRlLXNwbGl0ICovCisJCQl1cmItPnN0YXR1cyA9IC1FUFJPVE87CisJCX0gZWxzZSBpZiAodG9rZW4gJiBRVERfU1RTX0RCRSkgeworCQkJdXJiLT5zdGF0dXMgPSAoUVREX1BJRCAodG9rZW4pID09IDEpIC8qIElOID8gKi8KKwkJCQk/IC1FTk9TUiAgLyogaGMgY291bGRuJ3QgcmVhZCBkYXRhICovCisJCQkJOiAtRUNPTU07IC8qIGhjIGNvdWxkbid0IHdyaXRlIGRhdGEgKi8KKwkJfSBlbHNlIGlmICh0b2tlbiAmIFFURF9TVFNfWEFDVCkgeworCQkJLyogdGltZW91dCwgYmFkIGNyYywgd3JvbmcgUElELCBldGM7IHJldHJpZWQgKi8KKwkJCWlmIChRVERfQ0VSUiAodG9rZW4pKQorCQkJCXVyYi0+c3RhdHVzID0gLUVQSVBFOworCQkJZWxzZSB7CisJCQkJZWhjaV9kYmcgKGVoY2ksICJkZXZwYXRoICVzIGVwJWQlcyAzc3RyaWtlc1xuIiwKKwkJCQkJdXJiLT5kZXYtPmRldnBhdGgsCisJCQkJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCQkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIpOworCQkJCXVyYi0+c3RhdHVzID0gLUVQUk9UTzsKKwkJCX0KKwkJLyogQ0VSUiBub256ZXJvICsgbm8gZXJyb3JzICsgaGFsdCAtLT4gc3RhbGwgKi8KKwkJfSBlbHNlIGlmIChRVERfQ0VSUiAodG9rZW4pKQorCQkJdXJiLT5zdGF0dXMgPSAtRVBJUEU7CisJCWVsc2UJLyogdW5rbm93biAqLworCQkJdXJiLT5zdGF0dXMgPSAtRVBST1RPOworCisJCWVoY2lfdmRiZyAoZWhjaSwKKwkJCSJkZXYlZCBlcCVkJXMgcXRkIHRva2VuICUwOHggLS0+IHN0YXR1cyAlZFxuIiwKKwkJCXVzYl9waXBlZGV2aWNlICh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl0b2tlbiwgdXJiLT5zdGF0dXMpOworCisJCS8qIGlmIGFzeW5jIENTUExJVCBmYWlsZWQsIHRyeSBjbGVhbmluZyBvdXQgdGhlIFRUIGJ1ZmZlciAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVQSVBFCisJCQkJJiYgdXJiLT5kZXYtPnR0ICYmICF1c2JfcGlwZWludCAodXJiLT5waXBlKQorCQkJCSYmICgodG9rZW4gJiBRVERfU1RTX01NRikgIT0gMAorCQkJCQl8fCBRVERfQ0VSUih0b2tlbikgPT0gMCkKKwkJCQkmJiAoIWVoY2lfaXNfVERJKGVoY2kpCisgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICB8fCB1cmItPmRldi0+dHQtPmh1YiAhPQorCQkJCQkgICBlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1YikpIHsKKyNpZmRlZiBERUJVRworCQkJc3RydWN0IHVzYl9kZXZpY2UgKnR0ID0gdXJiLT5kZXYtPnR0LT5odWI7CisJCQlkZXZfZGJnICgmdHQtPmRldiwKKwkJCQkiY2xlYXIgdHQgYnVmZmVyIHBvcnQgJWQsIGElZCBlcCVkIHQlMDh4XG4iLAorCQkJCXVyYi0+ZGV2LT50dHBvcnQsIHVyYi0+ZGV2LT5kZXZudW0sCisJCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgdG9rZW4pOworI2VuZGlmIC8qIERFQlVHICovCisJCQl1c2JfaHViX3R0X2NsZWFyX2J1ZmZlciAodXJiLT5kZXYsIHVyYi0+cGlwZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitlaGNpX3VyYl9kb25lIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitfX3JlbGVhc2VzKGVoY2ktPmxvY2spCitfX2FjcXVpcmVzKGVoY2ktPmxvY2spCit7CisJaWYgKGxpa2VseSAodXJiLT5oY3ByaXYgIT0gTlVMTCkpIHsKKwkJc3RydWN0IGVoY2lfcWgJKnFoID0gKHN0cnVjdCBlaGNpX3FoICopIHVyYi0+aGNwcml2OworCisJCS8qIFMtbWFzayBpbiBhIFFIIG1lYW5zIGl0J3MgYW4gaW50ZXJydXB0IHVyYiAqLworCQlpZiAoKHFoLT5od19pbmZvMiAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4MDBmZikpICE9IDApIHsKKworCQkJLyogLi4uIHVwZGF0ZSBoYy13aWRlIHBlcmlvZGljIHN0YXRzIChmb3IgdXNiZnMpICovCisJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMtLTsKKwkJfQorCQlxaF9wdXQgKHFoKTsKKwl9CisKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRUlOUFJPR1JFU1M6CQkvKiBzdWNjZXNzICovCisJCXVyYi0+c3RhdHVzID0gMDsKKwlkZWZhdWx0OgkJCS8qIGZhdWx0ICovCisJCUNPVU5UIChlaGNpLT5zdGF0cy5jb21wbGV0ZSk7CisJCWJyZWFrOworCWNhc2UgLUVSRU1PVEVJTzoJCS8qIGZhdWx0IG9yIG5vcm1hbCAqLworCQlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykpCisJCQl1cmItPnN0YXR1cyA9IDA7CisJCUNPVU5UIChlaGNpLT5zdGF0cy5jb21wbGV0ZSk7CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBjYW5jZWxlZCAqLworCWNhc2UgLUVOT0VOVDoKKwkJQ09VTlQgKGVoY2ktPnN0YXRzLnVubGluayk7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisKKyNpZmRlZiBFSENJX1VSQl9UUkFDRQorCWVoY2lfZGJnIChlaGNpLAorCQkiJXMgJXMgdXJiICVwIGVwJWQlcyBzdGF0dXMgJWQgbGVuICVkLyVkXG4iLAorCQlfX0ZVTkNUSU9OX18sIHVyYi0+ZGV2LT5kZXZwYXRoLCB1cmIsCisJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCXVyYi0+c3RhdHVzLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisjZW5kaWYKKworCS8qIGNvbXBsZXRlKCkgY2FuIHJlZW50ZXIgdGhpcyBIQ0QgKi8KKwlzcGluX3VubG9jayAoJmVoY2ktPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChlaGNpX3RvX2hjZChlaGNpKSwgdXJiLCByZWdzKTsKKwlzcGluX2xvY2sgKCZlaGNpLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CitzdGF0aWMgdm9pZCB1bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKTsKKworc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CitzdGF0aWMgaW50IHFoX3NjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCk7CisKKy8qCisgKiBQcm9jZXNzIGFuZCBmcmVlIGNvbXBsZXRlZCBxdGRzIGZvciBhIHFoLCByZXR1cm5pbmcgVVJCcyB0byBkcml2ZXJzLgorICogQ2hhc2VzIHVwIHRvIHFoLT5od19jdXJyZW50LiAgUmV0dXJucyBudW1iZXIgb2YgY29tcGxldGlvbnMgY2FsbGVkLAorICogaW5kaWNhdGluZyBob3cgbXVjaCAicmVhbCIgd29yayB3ZSBkaWQuCisgKi8KKyNkZWZpbmUgSEFMVF9CSVQgX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfU1RTX0hBTFQpCitzdGF0aWMgdW5zaWduZWQKK3FoX2NvbXBsZXRpb25zIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVoY2lfcXRkCQkqbGFzdCA9IE5VTEwsICplbmQgPSBxaC0+ZHVtbXk7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7CisJaW50CQkJc3RvcHBlZDsKKwl1bnNpZ25lZAkJY291bnQgPSAwOworCWludAkJCWRvX3N0YXR1cyA9IDA7CisJdTgJCQlzdGF0ZTsKKworCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpKQorCQlyZXR1cm4gY291bnQ7CisKKwkvKiBjb21wbGV0aW9ucyAob3IgdGFza3Mgb24gb3RoZXIgY3B1cykgbXVzdCBuZXZlciBjbG9iYmVyIEhBTFQKKwkgKiB0aWxsIHdlJ3ZlIGdvbmUgdGhyb3VnaCBhbmQgY2xlYW5lZCBldmVyeXRoaW5nIHVwLCBldmVuIHdoZW4KKwkgKiB0aGV5IGFkZCB1cmJzIHRvIHRoaXMgcWgncyBxdWV1ZSBvciBtYXJrIHRoZW0gZm9yIHVubGlua2luZy4KKwkgKgorCSAqIE5PVEU6ICB1bmxpbmtpbmcgZXhwZWN0cyB0byBiZSBkb25lIGluIHF1ZXVlIG9yZGVyLgorCSAqLworCXN0YXRlID0gcWgtPnFoX3N0YXRlOworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0NPTVBMRVRJTkc7CisJc3RvcHBlZCA9IChzdGF0ZSA9PSBRSF9TVEFURV9JRExFKTsKKworCS8qIHJlbW92ZSBkZS1hY3RpdmF0ZWQgUVREcyBmcm9tIGZyb250IG9mIHF1ZXVlLgorCSAqIGFmdGVyIGZhdWx0cyAoaW5jbHVkaW5nIHNob3J0IHJlYWRzKSwgY2xlYW51cCB0aGlzIHVyYgorCSAqIHRoZW4gbGV0IHRoZSBxdWV1ZSBhZHZhbmNlLgorCSAqIGlmIHF1ZXVlIGlzIHN0b3BwZWQsIGhhbmRsZXMgdW5saW5rcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUgKGVudHJ5LCB0bXAsICZxaC0+cXRkX2xpc3QpIHsKKwkJc3RydWN0IGVoY2lfcXRkCSpxdGQ7CisJCXN0cnVjdCB1cmIJKnVyYjsKKwkJdTMyCQl0b2tlbiA9IDA7CisKKwkJcXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCBlaGNpX3F0ZCwgcXRkX2xpc3QpOworCQl1cmIgPSBxdGQtPnVyYjsKKworCQkvKiBjbGVhbiB1cCBhbnkgc3RhdGUgZnJvbSBwcmV2aW91cyBRVEQgLi4uKi8KKwkJaWYgKGxhc3QpIHsKKwkJCWlmIChsaWtlbHkgKGxhc3QtPnVyYiAhPSB1cmIpKSB7CisJCQkJZWhjaV91cmJfZG9uZSAoZWhjaSwgbGFzdC0+dXJiLCByZWdzKTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgbGFzdCk7CisJCQlsYXN0ID0gTlVMTDsKKwkJfQorCisJCS8qIGlnbm9yZSB1cmJzIHN1Ym1pdHRlZCBkdXJpbmcgY29tcGxldGlvbnMgd2UgcmVwb3J0ZWQgKi8KKwkJaWYgKHF0ZCA9PSBlbmQpCisJCQlicmVhazsKKworCQkvKiBoYXJkd2FyZSBjb3BpZXMgcXRkIG91dCBvZiBxaCBvdmVybGF5ICovCisJCXJtYiAoKTsKKwkJdG9rZW4gPSBsZTMyX3RvX2NwdSAocXRkLT5od190b2tlbik7CisKKwkJLyogYWx3YXlzIGNsZWFuIHVwIHF0ZHMgdGhlIGhjIGRlLWFjdGl2YXRlZCAqLworCQlpZiAoKHRva2VuICYgUVREX1NUU19BQ1RJVkUpID09IDApIHsKKworCQkJaWYgKCh0b2tlbiAmIFFURF9TVFNfSEFMVCkgIT0gMCkgeworCQkJCXN0b3BwZWQgPSAxOworCisJCQkvKiBtYWdpYyBkdW1teSBmb3Igc29tZSBzaG9ydCByZWFkczsgcWggd29uJ3QgYWR2YW5jZS4KKwkJCSAqIHRoYXQgc2lsaWNvbiBxdWlyayBjYW4ga2ljayBpbiB3aXRoIHRoaXMgZHVtbXkgdG9vLgorCQkJICovCisJCQl9IGVsc2UgaWYgKElTX1NIT1JUX1JFQUQgKHRva2VuKQorCQkJCQkmJiAhKHF0ZC0+aHdfYWx0X25leHQgJiBFSENJX0xJU1RfRU5EKSkgeworCQkJCXN0b3BwZWQgPSAxOworCQkJCWdvdG8gaGFsdDsKKwkJCX0KKworCQkvKiBzdG9wIHNjYW5uaW5nIHdoZW4gd2UgcmVhY2ggcXRkcyB0aGUgaGMgaXMgdXNpbmcgKi8KKwkJfSBlbHNlIGlmIChsaWtlbHkgKCFzdG9wcGVkCisJCQkJJiYgSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkpIHsKKwkJCWJyZWFrOworCisJCX0gZWxzZSB7CisJCQlzdG9wcGVkID0gMTsKKworCQkJaWYgKHVubGlrZWx5ICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkpCisJCQkJdXJiLT5zdGF0dXMgPSAtRVNIVVRET1dOOworCisJCQkvKiBpZ25vcmUgYWN0aXZlIHVyYnMgdW5sZXNzIHNvbWUgcHJldmlvdXMgcXRkCisJCQkgKiBmb3IgdGhlIHVyYiBmYXVsdGVkIChpbmNsdWRpbmcgc2hvcnQgcmVhZCkgb3IKKwkJCSAqIGl0cyB1cmIgd2FzIGNhbmNlbGVkLiAgd2UgbWF5IHBhdGNoIHFoIG9yIHF0ZHMuCisJCQkgKi8KKwkJCWlmIChsaWtlbHkgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpCisJCQkJY29udGludWU7CisJCQkKKwkJCS8qIGlzc3VlIHN0YXR1cyBhZnRlciBzaG9ydCBjb250cm9sIHJlYWRzICovCisJCQlpZiAodW5saWtlbHkgKGRvX3N0YXR1cyAhPSAwKQorCQkJCQkmJiBRVERfUElEICh0b2tlbikgPT0gMCAvKiBPVVQgKi8pIHsKKwkJCQlkb19zdGF0dXMgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiB0b2tlbiBpbiBvdmVybGF5IG1heSBiZSBtb3N0IGN1cnJlbnQgKi8KKwkJCWlmIChzdGF0ZSA9PSBRSF9TVEFURV9JRExFCisJCQkJCSYmIGNwdV90b19sZTMyIChxdGQtPnF0ZF9kbWEpCisJCQkJCQk9PSBxaC0+aHdfY3VycmVudCkKKwkJCQl0b2tlbiA9IGxlMzJfdG9fY3B1IChxaC0+aHdfdG9rZW4pOworCisJCQkvKiBmb3JjZSBoYWx0IGZvciB1bmxpbmtlZCBvciBibG9ja2VkIHFoLCBzbyB3ZSdsbAorCQkJICogcGF0Y2ggdGhlIHFoIGxhdGVyIGFuZCBzbyB0aGF0IGNvbXBsZXRpb25zIGNhbid0CisJCQkgKiBhY3RpdmF0ZSBpdCB3aGlsZSB3ZSAia25vdyIgaXQncyBzdG9wcGVkLgorCQkJICovCisJCQlpZiAoKEhBTFRfQklUICYgcWgtPmh3X3Rva2VuKSA9PSAwKSB7CitoYWx0OgorCQkJCXFoLT5od190b2tlbiB8PSBIQUxUX0JJVDsKKwkJCQl3bWIgKCk7CisJCQl9CisJCX0KKyAKKwkJLyogcmVtb3ZlIGl0IGZyb20gdGhlIHF1ZXVlICovCisJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCXF0ZF9jb3B5X3N0YXR1cyAoZWhjaSwgdXJiLCBxdGQtPmxlbmd0aCwgdG9rZW4pOworCQlkb19zdGF0dXMgPSAodXJiLT5zdGF0dXMgPT0gLUVSRU1PVEVJTykKKwkJCQkmJiB1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSk7CisJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKworCQlpZiAoc3RvcHBlZCAmJiBxdGQtPnF0ZF9saXN0LnByZXYgIT0gJnFoLT5xdGRfbGlzdCkgeworCQkJbGFzdCA9IGxpc3RfZW50cnkgKHF0ZC0+cXRkX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCQlsYXN0LT5od19uZXh0ID0gcXRkLT5od19uZXh0OworCQl9CisJCWxpc3RfZGVsICgmcXRkLT5xdGRfbGlzdCk7CisJCWxhc3QgPSBxdGQ7CisJfQorCisJLyogbGFzdCB1cmIncyBjb21wbGV0aW9uIG1pZ2h0IHN0aWxsIG5lZWQgY2FsbGluZyAqLworCWlmIChsaWtlbHkgKGxhc3QgIT0gTlVMTCkpIHsKKwkJZWhjaV91cmJfZG9uZSAoZWhjaSwgbGFzdC0+dXJiLCByZWdzKTsKKwkJY291bnQrKzsKKwkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgbGFzdCk7CisJfQorCisJLyogcmVzdG9yZSBvcmlnaW5hbCBzdGF0ZTsgY2FsbGVyIG11c3QgdW5saW5rIG9yIHJlbGluayAqLworCXFoLT5xaF9zdGF0ZSA9IHN0YXRlOworCisJLyogYmUgc3VyZSB0aGUgaGFyZHdhcmUncyBkb25lIHdpdGggdGhlIHFoIGJlZm9yZSByZWZyZXNoaW5nCisJICogaXQgYWZ0ZXIgZmF1bHQgY2xlYW51cCwgb3IgcmVjb3ZlcmluZyBmcm9tIHNpbGljb24gd3JvbmdseQorCSAqIG92ZXJsYXlpbmcgdGhlIGR1bW15IHF0ZCAod2hpY2ggcmVkdWNlcyBETUEgY2hhdHRlcikuCisJICovCisJaWYgKHN0b3BwZWQgIT0gMCB8fCBxaC0+aHdfcXRkX25leHQgPT0gRUhDSV9MSVNUX0VORCkgeworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgUUhfU1RBVEVfSURMRToKKwkJCXFoX3JlZnJlc2goZWhjaSwgcWgpOworCQkJYnJlYWs7CisJCWNhc2UgUUhfU1RBVEVfTElOS0VEOgorCQkJLyogc2hvdWxkIGJlIHJhcmUgZm9yIHBlcmlvZGljIHRyYW5zZmVycywKKwkJCSAqIGV4Y2VwdCBtYXliZSBoaWdoIGJhbmR3aWR0aCAuLi4KKwkJCSAqLworCQkJaWYgKHFoLT5wZXJpb2QpIHsKKwkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCQkodm9pZCkgcWhfc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCX0gZWxzZQorCQkJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkJYnJlYWs7CisJCS8qIG90aGVyd2lzZSwgdW5saW5rIGFscmVhZHkgc3RhcnRlZCAqLworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBoaWdoIGJhbmR3aWR0aCBtdWx0aXBsaWVyLCBhcyBlbmNvZGVkIGluIGhpZ2hzcGVlZCBlbmRwb2ludCBkZXNjcmlwdG9ycworI2RlZmluZSBoYl9tdWx0KHdNYXhQYWNrZXRTaXplKSAoMSArICgoKHdNYXhQYWNrZXRTaXplKSA+PiAxMSkgJiAweDAzKSkKKy8vIC4uLiBhbmQgcGFja2V0IHNpemUsIGZvciBhbnkga2luZCBvZiBlbmRwb2ludCBkZXNjcmlwdG9yCisjZGVmaW5lIG1heF9wYWNrZXQod01heFBhY2tldFNpemUpICgod01heFBhY2tldFNpemUpICYgMHgwN2ZmKQorCisvKgorICogcmV2ZXJzZSBvZiBxaF91cmJfdHJhbnNhY3Rpb246ICBmcmVlIGEgbGlzdCBvZiBURHMuCisgKiB1c2VkIGZvciBjbGVhbnVwIGFmdGVyIGVycm9ycywgYmVmb3JlIEhDIHNlZXMgYW4gVVJCJ3MgVERzLgorICovCitzdGF0aWMgdm9pZCBxdGRfbGlzdF9mcmVlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QKKykgeworCXN0cnVjdCBsaXN0X2hlYWQJKmVudHJ5LCAqdGVtcDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZSAoZW50cnksIHRlbXAsIHF0ZF9saXN0KSB7CisJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOworCisJCXF0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJbGlzdF9kZWwgKCZxdGQtPnF0ZF9saXN0KTsKKwkJZWhjaV9xdGRfZnJlZSAoZWhjaSwgcXRkKTsKKwl9Cit9CisKKy8qCisgKiBjcmVhdGUgYSBsaXN0IG9mIGZpbGxlZCBxdGRzIGZvciB0aGlzIFVSQjsgd29uJ3QgbGluayBpbnRvIHFoLgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqCitxaF91cmJfdHJhbnNhY3Rpb24gKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpoZWFkLAorCWludAkJCWZsYWdzCispIHsKKwlzdHJ1Y3QgZWhjaV9xdGQJCSpxdGQsICpxdGRfcHJldjsKKwlkbWFfYWRkcl90CQlidWY7CisJaW50CQkJbGVuLCBtYXhwYWNrZXQ7CisJaW50CQkJaXNfaW5wdXQ7CisJdTMyCQkJdG9rZW47CisKKwkvKgorCSAqIFVSQnMgbWFwIHRvIHNlcXVlbmNlcyBvZiBRVERzOiAgb25lIGxvZ2ljYWwgdHJhbnNhY3Rpb24KKwkgKi8KKwlxdGQgPSBlaGNpX3F0ZF9hbGxvYyAoZWhjaSwgZmxhZ3MpOworCWlmICh1bmxpa2VseSAoIXF0ZCkpCisJCXJldHVybiBOVUxMOworCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKwlxdGQtPnVyYiA9IHVyYjsKKworCXRva2VuID0gUVREX1NUU19BQ1RJVkU7CisJdG9rZW4gfD0gKEVIQ0lfVFVORV9DRVJSIDw8IDEwKTsKKwkvKiBmb3Igc3BsaXQgdHJhbnNhY3Rpb25zLCBTcGxpdFhTdGF0ZSBpbml0aWFsaXplZCB0byB6ZXJvICovCisKKwlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJaXNfaW5wdXQgPSB1c2JfcGlwZWluICh1cmItPnBpcGUpOworCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpIHsKKwkJLyogU0VUVVAgcGlkICovCisJCXF0ZF9maWxsIChxdGQsIHVyYi0+c2V0dXBfZG1hLCBzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJdG9rZW4gfCAoMiAvKiAic2V0dXAiICovIDw8IDgpLCA4KTsKKworCQkvKiAuLi4gYW5kIGFsd2F5cyBhdCBsZWFzdCBvbmUgbW9yZSBwaWQgKi8KKwkJdG9rZW4gXj0gUVREX1RPR0dMRTsKKwkJcXRkX3ByZXYgPSBxdGQ7CisJCXF0ZCA9IGVoY2lfcXRkX2FsbG9jIChlaGNpLCBmbGFncyk7CisJCWlmICh1bmxpa2VseSAoIXF0ZCkpCisJCQlnb3RvIGNsZWFudXA7CisJCXF0ZC0+dXJiID0gdXJiOworCQlxdGRfcHJldi0+aHdfbmV4dCA9IFFURF9ORVhUIChxdGQtPnF0ZF9kbWEpOworCQlsaXN0X2FkZF90YWlsICgmcXRkLT5xdGRfbGlzdCwgaGVhZCk7CisJfSAKKworCS8qCisJICogZGF0YSB0cmFuc2ZlciBzdGFnZTogIGJ1ZmZlciBzZXR1cAorCSAqLworCWlmIChsaWtlbHkgKGxlbiA+IDApKQorCQlidWYgPSB1cmItPnRyYW5zZmVyX2RtYTsKKwllbHNlCisJCWJ1ZiA9IDA7CisKKwkvKiBmb3IgemVybyBsZW5ndGggREFUQSBzdGFnZXMsIFNUQVRVUyBpcyBhbHdheXMgSU4gKi8KKwlpZiAoIWJ1ZiB8fCBpc19pbnB1dCkKKwkJdG9rZW4gfD0gKDEgLyogImluIiAqLyA8PCA4KTsKKwkvKiBlbHNlIGl0J3MgYWxyZWFkeSBpbml0dGVkIHRvICJvdXQiIHBpZCAoMCA8PCA4KSAqLworCisJbWF4cGFja2V0ID0gbWF4X3BhY2tldCh1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsICFpc19pbnB1dCkpOworCisJLyoKKwkgKiBidWZmZXIgZ2V0cyB3cmFwcGVkIGluIG9uZSBvciBtb3JlIHF0ZHM7CisJICogbGFzdCBvbmUgbWF5IGJlICJzaG9ydCIgKGluY2x1ZGluZyB6ZXJvIGxlbikKKwkgKiBhbmQgbWF5IHNlcnZlIGFzIGEgY29udHJvbCBzdGF0dXMgYWNrCisJICovCisJZm9yICg7OykgeworCQlpbnQgdGhpc19xdGRfbGVuOworCisJCXRoaXNfcXRkX2xlbiA9IHF0ZF9maWxsIChxdGQsIGJ1ZiwgbGVuLCB0b2tlbiwgbWF4cGFja2V0KTsKKwkJbGVuIC09IHRoaXNfcXRkX2xlbjsKKwkJYnVmICs9IHRoaXNfcXRkX2xlbjsKKwkJaWYgKGlzX2lucHV0KQorCQkJcXRkLT5od19hbHRfbmV4dCA9IGVoY2ktPmFzeW5jLT5od19hbHRfbmV4dDsKKworCQkvKiBxaCBtYWtlcyBjb250cm9sIHBhY2tldHMgdXNlIHF0ZCB0b2dnbGU7IG1heWJlIHN3aXRjaCBpdCAqLworCQlpZiAoKG1heHBhY2tldCAmICh0aGlzX3F0ZF9sZW4gKyAobWF4cGFja2V0IC0gMSkpKSA9PSAwKQorCQkJdG9rZW4gXj0gUVREX1RPR0dMRTsKKworCQlpZiAobGlrZWx5IChsZW4gPD0gMCkpCisJCQlicmVhazsKKworCQlxdGRfcHJldiA9IHF0ZDsKKwkJcXRkID0gZWhjaV9xdGRfYWxsb2MgKGVoY2ksIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5ICghcXRkKSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcXRkLT51cmIgPSB1cmI7CisJCXF0ZF9wcmV2LT5od19uZXh0ID0gUVREX05FWFQgKHF0ZC0+cXRkX2RtYSk7CisJCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKwl9CisKKwkvKiB1bmxlc3MgdGhlIGJ1bGsvaW50ZXJydXB0IGNhbGxlciB3YW50cyBhIGNoYW5jZSB0byBjbGVhbgorCSAqIHVwIGFmdGVyIHNob3J0IHJlYWRzLCBoYyBzaG91bGQgYWR2YW5jZSBxaCBwYXN0IHRoaXMgdXJiCisJICovCisJaWYgKGxpa2VseSAoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSA9PSAwCisJCQkJfHwgdXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKSkKKwkJcXRkLT5od19hbHRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisKKwkvKgorCSAqIGNvbnRyb2wgcmVxdWVzdHMgbWF5IG5lZWQgYSB0ZXJtaW5hdGluZyBkYXRhICJzdGF0dXMiIGFjazsKKwkgKiBidWxrIG9uZXMgbWF5IG5lZWQgYSB0ZXJtaW5hdGluZyBzaG9ydCBwYWNrZXQgKHplcm8gbGVuZ3RoKS4KKwkgKi8KKwlpZiAobGlrZWx5IChidWYgIT0gMCkpIHsKKwkJaW50CW9uZV9tb3JlID0gMDsKKworCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKSB7CisJCQlvbmVfbW9yZSA9IDE7CisJCQl0b2tlbiBePSAweDAxMDA7CS8qICJpbiIgPC0tPiAib3V0IiAgKi8KKwkJCXRva2VuIHw9IFFURF9UT0dHTEU7CS8qIGZvcmNlIERBVEExICovCisJCX0gZWxzZSBpZiAodXNiX3BpcGVidWxrICh1cmItPnBpcGUpCisJCQkJJiYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpCisJCQkJJiYgISh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBtYXhwYWNrZXQpKSB7CisJCQlvbmVfbW9yZSA9IDE7CisJCX0KKwkJaWYgKG9uZV9tb3JlKSB7CisJCQlxdGRfcHJldiA9IHF0ZDsKKwkJCXF0ZCA9IGVoY2lfcXRkX2FsbG9jIChlaGNpLCBmbGFncyk7CisJCQlpZiAodW5saWtlbHkgKCFxdGQpKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCXF0ZC0+dXJiID0gdXJiOworCQkJcXRkX3ByZXYtPmh3X25leHQgPSBRVERfTkVYVCAocXRkLT5xdGRfZG1hKTsKKwkJCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKworCQkJLyogbmV2ZXIgYW55IGRhdGEgaW4gc3VjaCBwYWNrZXRzICovCisJCQlxdGRfZmlsbCAocXRkLCAwLCAwLCB0b2tlbiwgMCk7CisJCX0KKwl9CisKKwkvKiBieSBkZWZhdWx0LCBlbmFibGUgaW50ZXJydXB0IG9uIHVyYiBjb21wbGV0aW9uICovCisJaWYgKGxpa2VseSAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0lOVEVSUlVQVCkpKQorCQlxdGQtPmh3X3Rva2VuIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFFURF9JT0MpOworCXJldHVybiBoZWFkOworCitjbGVhbnVwOgorCXF0ZF9saXN0X2ZyZWUgKGVoY2ksIHVyYiwgaGVhZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIFdvdWxkIGJlIGJlc3QgdG8gY3JlYXRlIGFsbCBxaCdzIGZyb20gY29uZmlnIGRlc2NyaXB0b3JzLAorLy8gd2hlbiBlYWNoIGludGVyZmFjZS9hbHRzZXR0aW5nIGlzIGVzdGFibGlzaGVkLiAgVW5saW5rCisvLyBhbnkgcHJldmlvdXMgcWggYW5kIGNhbmNlbCBpdHMgdXJicyBmaXJzdDsgZW5kcG9pbnRzIGFyZQorLy8gaW1wbGljaXRseSByZXNldCB0aGVuIChkYXRhIHRvZ2dsZSB0b28pLgorLy8gVGhhdCdkIG1lYW4gdXBkYXRpbmcgaG93IHVzYmNvcmUgdGFsa3MgdG8gSENEcy4gKDIuNz8pCisKKworLyoKKyAqIEVhY2ggUUggaG9sZHMgYSBxdGQgbGlzdDsgYSBRSCBpcyB1c2VkIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBpc28uCisgKgorICogRm9yIGludGVycnVwdCB1cmJzLCB0aGUgc2NoZWR1bGVyIG11c3Qgc2V0IHRoZSBtaWNyb2ZyYW1lIHNjaGVkdWxpbmcKKyAqIG1hc2socykgZWFjaCB0aW1lIHRoZSBRSCBnZXRzIHNjaGVkdWxlZC4gIEZvciBoaWdoc3BlZWQsIHRoYXQncworICoganVzdCBvbmUgbWljcm9mcmFtZSBpbiB0aGUgcy1tYXNrLiAgRm9yIHNwbGl0IGludGVycnVwdCB0cmFuc2FjdGlvbnMKKyAqIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbnM6IGMtbWFzaywgbWF5YmUgRlNUTnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZWhjaV9xaCAqCitxaF9tYWtlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJZmxhZ3MKKykgeworCXN0cnVjdCBlaGNpX3FoCQkqcWggPSBlaGNpX3FoX2FsbG9jIChlaGNpLCBmbGFncyk7CisJdTMyCQkJaW5mbzEgPSAwLCBpbmZvMiA9IDA7CisJaW50CQkJaXNfaW5wdXQsIHR5cGU7CisJaW50CQkJbWF4cCA9IDA7CisKKwlpZiAoIXFoKQorCQlyZXR1cm4gcWg7CisKKwkvKgorCSAqIGluaXQgZW5kcG9pbnQvZGV2aWNlIGRhdGEgZm9yIHRoaXMgUUgKKwkgKi8KKwlpbmZvMSB8PSB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpIDw8IDg7CisJaW5mbzEgfD0gdXNiX3BpcGVkZXZpY2UgKHVyYi0+cGlwZSkgPDwgMDsKKworCWlzX2lucHV0ID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKTsKKwl0eXBlID0gdXNiX3BpcGV0eXBlICh1cmItPnBpcGUpOworCW1heHAgPSB1c2JfbWF4cGFja2V0ICh1cmItPmRldiwgdXJiLT5waXBlLCAhaXNfaW5wdXQpOworCisJLyogQ29tcHV0ZSBpbnRlcnJ1cHQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGp1c3Qgb25jZSwgYW5kIHNhdmUuCisJICogLSBhbGxvd2luZyBmb3IgaGlnaCBiYW5kd2lkdGgsIGhvdyBtYW55IG5zZWMvdWZyYW1lIGFyZSB1c2VkPworCSAqIC0gc3BsaXQgdHJhbnNhY3Rpb25zIG5lZWQgYSBzZWNvbmQgQ1NQTElUIHVmcmFtZTsgc2FtZSBxdWVzdGlvbgorCSAqIC0gc3BsaXRzIGFsc28gbmVlZCBhIHNjaGVkdWxlIGdhcCAoZm9yIGZ1bGwvbG93IHNwZWVkIEkvTykKKwkgKiAtIHFoIGhhcyBhIHBvbGxpbmcgaW50ZXJ2YWwKKwkgKgorCSAqIEZvciBjb250cm9sL2J1bGsgcmVxdWVzdHMsIHRoZSBIQyBvciBUVCBoYW5kbGVzIHRoZXNlLgorCSAqLworCWlmICh0eXBlID09IFBJUEVfSU5URVJSVVBUKSB7CisJCXFoLT51c2VjcyA9IHVzYl9jYWxjX2J1c190aW1lIChVU0JfU1BFRURfSElHSCwgaXNfaW5wdXQsIDAsCisJCQkJaGJfbXVsdCAobWF4cCkgKiBtYXhfcGFja2V0IChtYXhwKSk7CisJCXFoLT5zdGFydCA9IE5PX0ZSQU1FOworCisJCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCXFoLT5jX3VzZWNzID0gMDsKKwkJCXFoLT5nYXBfdWYgPSAwOworCisJCQlxaC0+cGVyaW9kID0gdXJiLT5pbnRlcnZhbCA+PiAzOworCQkJaWYgKHFoLT5wZXJpb2QgPT0gMCAmJiB1cmItPmludGVydmFsICE9IDEpIHsKKwkJCQkvKiBOT1RFIGludGVydmFsIDIgb3IgNCB1ZnJhbWVzIGNvdWxkIHdvcmsuCisJCQkJICogQnV0IGludGVydmFsIDEgc2NoZWR1bGluZyBpcyBzaW1wbGVyLCBhbmQKKwkJCQkgKiBpbmNsdWRlcyBoaWdoIGJhbmR3aWR0aC4KKwkJCQkgKi8KKwkJCQlkYmcgKCJpbnRyIHBlcmlvZCAlZCB1ZnJhbWVzLCBOWUVUISIsCisJCQkJCQl1cmItPmludGVydmFsKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBnYXAgaXMgZihGUy9MUyB0cmFuc2ZlciB0aW1lcykgKi8KKwkJCXFoLT5nYXBfdWYgPSAxICsgdXNiX2NhbGNfYnVzX3RpbWUgKHVyYi0+ZGV2LT5zcGVlZCwKKwkJCQkJaXNfaW5wdXQsIDAsIG1heHApIC8gKDEyNSAqIDEwMDApOworCisJCQkvKiBGSVhNRSB0aGlzIGp1c3QgYXBwcm94aW1hdGVzIFNQTElUL0NTUExJVCB0aW1lcyAqLworCQkJaWYgKGlzX2lucHV0KSB7CQkvLyBTUExJVCwgZ2FwLCBDU1BMSVQrREFUQQorCQkJCXFoLT5jX3VzZWNzID0gcWgtPnVzZWNzICsgSFNfVVNFQ1MgKDApOworCQkJCXFoLT51c2VjcyA9IEhTX1VTRUNTICgxKTsKKwkJCX0gZWxzZSB7CQkvLyBTUExJVCtEQVRBLCBnYXAsIENTUExJVAorCQkJCXFoLT51c2VjcyArPSBIU19VU0VDUyAoMSk7CisJCQkJcWgtPmNfdXNlY3MgPSBIU19VU0VDUyAoMCk7CisJCQl9CisKKwkJCXFoLT5wZXJpb2QgPSB1cmItPmludGVydmFsOworCQl9CisJfQorCisJLyogc3VwcG9ydCBmb3IgdHQgc2NoZWR1bGluZywgYW5kIGFjY2VzcyB0byB0b2dnbGVzICovCisJcWgtPmRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisKKwkvKiB1c2luZyBUVD8gKi8KKwlzd2l0Y2ggKHVyYi0+ZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJaW5mbzEgfD0gKDEgPDwgMTIpOwkvKiBFUFMgImxvdyIgKi8KKwkJLyogRkFMTCBUSFJPVUdIICovCisKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkvKiBFUFMgMCBtZWFucyAiZnVsbCIgKi8KKwkJaWYgKHR5cGUgIT0gUElQRV9JTlRFUlJVUFQpCisJCQlpbmZvMSB8PSAoRUhDSV9UVU5FX1JMX1RUIDw8IDI4KTsKKwkJaWYgKHR5cGUgPT0gUElQRV9DT05UUk9MKSB7CisJCQlpbmZvMSB8PSAoMSA8PCAyNyk7CS8qIGZvciBUVCAqLworCQkJaW5mbzEgfD0gMSA8PCAxNDsJLyogdG9nZ2xlIGZyb20gcXRkICovCisJCX0KKwkJaW5mbzEgfD0gbWF4cCA8PCAxNjsKKworCQlpbmZvMiB8PSAoRUhDSV9UVU5FX01VTFRfVFQgPDwgMzApOworCQlpbmZvMiB8PSB1cmItPmRldi0+dHRwb3J0IDw8IDIzOworCisJCS8qIHNldCB0aGUgYWRkcmVzcyBvZiB0aGUgVFQ7IGZvciBUREkncyBpbnRlZ3JhdGVkCisJCSAqIHJvb3QgaHViIHR0LCBsZWF2ZSBpdCB6ZXJvZWQuCisJCSAqLworCQlpZiAoIWVoY2lfaXNfVERJKGVoY2kpCisJCQkJfHwgdXJiLT5kZXYtPnR0LT5odWIgIT0KKwkJCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYucm9vdF9odWIpCisJCQlpbmZvMiB8PSB1cmItPmRldi0+dHQtPmh1Yi0+ZGV2bnVtIDw8IDE2OworCisJCS8qIE5PVEU6ICBpZiAoUElQRV9JTlRFUlJVUFQpIHsgc2NoZWR1bGVyIHNldHMgYy1tYXNrIH0gKi8KKworCQlicmVhazsKKworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CQkvKiBubyBUVCBpbnZvbHZlZCAqLworCQlpbmZvMSB8PSAoMiA8PCAxMik7CS8qIEVQUyAiaGlnaCIgKi8KKwkJaWYgKHR5cGUgPT0gUElQRV9DT05UUk9MKSB7CisJCQlpbmZvMSB8PSAoRUhDSV9UVU5FX1JMX0hTIDw8IDI4KTsKKwkJCWluZm8xIHw9IDY0IDw8IDE2OwkvKiB1c2IyIGZpeGVkIG1heHBhY2tldCAqLworCQkJaW5mbzEgfD0gMSA8PCAxNDsJLyogdG9nZ2xlIGZyb20gcXRkICovCisJCQlpbmZvMiB8PSAoRUhDSV9UVU5FX01VTFRfSFMgPDwgMzApOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gUElQRV9CVUxLKSB7CisJCQlpbmZvMSB8PSAoRUhDSV9UVU5FX1JMX0hTIDw8IDI4KTsKKwkJCWluZm8xIHw9IDUxMiA8PCAxNjsJLyogdXNiMiBmaXhlZCBtYXhwYWNrZXQgKi8KKwkJCWluZm8yIHw9IChFSENJX1RVTkVfTVVMVF9IUyA8PCAzMCk7CisJCX0gZWxzZSB7CQkvKiBQSVBFX0lOVEVSUlVQVCAqLworCQkJaW5mbzEgfD0gbWF4X3BhY2tldCAobWF4cCkgPDwgMTY7CisJCQlpbmZvMiB8PSBoYl9tdWx0IChtYXhwKSA8PCAzMDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorIAkJZGJnICgiYm9ndXMgZGV2ICVwIHNwZWVkICVkIiwgdXJiLT5kZXYsIHVyYi0+ZGV2LT5zcGVlZCk7Citkb25lOgorCQlxaF9wdXQgKHFoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogTk9URTogIGlmIChQSVBFX0lOVEVSUlVQVCkgeyBzY2hlZHVsZXIgc2V0cyBzLW1hc2sgfSAqLworCisJLyogaW5pdCBhcyBsaXZlLCB0b2dnbGUgY2xlYXIsIGFkdmFuY2UgdG8gZHVtbXkgKi8KKwlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOworCXFoLT5od19pbmZvMSA9IGNwdV90b19sZTMyIChpbmZvMSk7CisJcWgtPmh3X2luZm8yID0gY3B1X3RvX2xlMzIgKGluZm8yKTsKKwl1c2Jfc2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgIWlzX2lucHV0LCAxKTsKKwlxaF9yZWZyZXNoIChlaGNpLCBxaCk7CisJcmV0dXJuIHFoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtb3ZlIHFoIChhbmQgaXRzIHF0ZHMpIG9udG8gYXN5bmMgcXVldWU7IG1heWJlIGVuYWJsZSBxdWV1ZS4gICovCisKK3N0YXRpYyB2b2lkIHFoX2xpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCV9fbGUzMgkJZG1hID0gUUhfTkVYVCAocWgtPnFoX2RtYSk7CisJc3RydWN0IGVoY2lfcWgJKmhlYWQ7CisKKwkvKiAocmUpc3RhcnQgdGhlIGFzeW5jIHNjaGVkdWxlPyAqLworCWhlYWQgPSBlaGNpLT5hc3luYzsKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfT0ZGKTsKKwlpZiAoIWhlYWQtPnFoX25leHQucWgpIHsKKwkJdTMyCWNtZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwkJaWYgKCEoY21kICYgQ01EX0FTRSkpIHsKKwkJCS8qIGluIGNhc2UgYSBjbGVhciBvZiBDTURfQVNFIGRpZG4ndCB0YWtlIHlldCAqLworCQkJKHZvaWQpIGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX0FTUywgMCwgMTUwKTsKKwkJCWNtZCB8PSBDTURfQVNFIHwgQ01EX1JVTjsKKwkJCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCQkJLyogcG9zdGVkIHdyaXRlIG5lZWQgbm90IGJlIGtub3duIHRvIEhDIHlldCAuLi4gKi8KKwkJfQorCX0KKworCS8qIGNsZWFyIGhhbHQgYW5kL29yIHRvZ2dsZTsgYW5kIG1heWJlIHJlY292ZXIgZnJvbSBzaWxpY29uIHF1aXJrICovCisJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9JRExFKQorCQlxaF9yZWZyZXNoIChlaGNpLCBxaCk7CisKKwkvKiBzcGxpY2UgcmlnaHQgYWZ0ZXIgc3RhcnQgKi8KKwlxaC0+cWhfbmV4dCA9IGhlYWQtPnFoX25leHQ7CisJcWgtPmh3X25leHQgPSBoZWFkLT5od19uZXh0OworCXdtYiAoKTsKKworCWhlYWQtPnFoX25leHQucWggPSBxaDsKKwloZWFkLT5od19uZXh0ID0gZG1hOworCisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfTElOS0VEOworCS8qIHF0ZCBjb21wbGV0aW9ucyByZXBvcnRlZCBsYXRlciBieSBpbnRlcnJ1cHQgKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlRSF9BRERSX01BU0sJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDdmKQorCisvKgorICogRm9yIGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQsIHJldHVybiBRSCB3aXRoIHRoZXNlIFREcyBhcHBlbmRlZC4KKyAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIFFIIGlmIG5lY2Vzc2FyeS4KKyAqIFJldHVybnMgbnVsbCBpZiBpdCBjYW4ndCBhbGxvY2F0ZSBhIFFIIGl0IG5lZWRzIHRvLgorICogSWYgdGhlIFFIIGhhcyBURHMgKHVyYnMpIGFscmVhZHksIHRoYXQncyBncmVhdC4KKyAqLworc3RhdGljIHN0cnVjdCBlaGNpX3FoICpxaF9hcHBlbmRfdGRzICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QsCisJaW50CQkJZXBudW0sCisJdm9pZAkJCSoqcHRyCispCit7CisJc3RydWN0IGVoY2lfcWgJCSpxaCA9IE5VTEw7CisKKwlxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKSAqcHRyOworCWlmICh1bmxpa2VseSAocWggPT0gTlVMTCkpIHsKKwkJLyogY2FuJ3Qgc2xlZXAgaGVyZSwgd2UgaGF2ZSBlaGNpLT5sb2NrLi4uICovCisJCXFoID0gcWhfbWFrZSAoZWhjaSwgdXJiLCBHRlBfQVRPTUlDKTsKKwkJKnB0ciA9IHFoOworCX0KKwlpZiAobGlrZWx5IChxaCAhPSBOVUxMKSkgeworCQlzdHJ1Y3QgZWhjaV9xdGQJKnF0ZDsKKworCQlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKHF0ZF9saXN0KSkpCisJCQlxdGQgPSBOVUxMOworCQllbHNlCisJCQlxdGQgPSBsaXN0X2VudHJ5IChxdGRfbGlzdC0+bmV4dCwgc3RydWN0IGVoY2lfcXRkLAorCQkJCQlxdGRfbGlzdCk7CisKKwkJLyogY29udHJvbCBxaCBtYXkgbmVlZCBwYXRjaGluZyAuLi4gKi8KKwkJaWYgKHVubGlrZWx5IChlcG51bSA9PSAwKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2JfcmVzZXRfZGV2aWNlKCkgYnJpZWZseSByZXZlcnRzIHRvIGFkZHJlc3MgMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYl9waXBlZGV2aWNlICh1cmItPnBpcGUpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFoLT5od19pbmZvMSAmPSB+UUhfQUREUl9NQVNLOworCQl9CisKKwkJLyoganVzdCBvbmUgd2F5IHRvIHF1ZXVlIHJlcXVlc3RzOiBzd2FwIHdpdGggdGhlIGR1bW15IHF0ZC4KKwkJICogb25seSBoYyBvciBxaF9yZWZyZXNoKCkgZXZlciBtb2RpZnkgdGhlIG92ZXJsYXkuCisJCSAqLworCQlpZiAobGlrZWx5IChxdGQgIT0gTlVMTCkpIHsKKwkJCXN0cnVjdCBlaGNpX3F0ZAkJKmR1bW15OworCQkJZG1hX2FkZHJfdAkJZG1hOworCQkJX19sZTMyCQkJdG9rZW47CisKKwkJCS8qIHRvIGF2b2lkIHJhY2luZyB0aGUgSEMsIHVzZSB0aGUgZHVtbXkgdGQgaW5zdGVhZCBvZgorCQkJICogdGhlIGZpcnN0IHRkIG9mIG91ciBsaXN0IChiZWNvbWVzIG5ldyBkdW1teSkuICBib3RoCisJCQkgKiB0ZHMgc3RheSBkZWFjdGl2YXRlZCB1bnRpbCB3ZSdyZSBkb25lLCB3aGVuIHRoZQorCQkJICogSEMgaXMgYWxsb3dlZCB0byBmZXRjaCB0aGUgb2xkIGR1bW15ICg0LjEwLjIpLgorCQkJICovCisJCQl0b2tlbiA9IHF0ZC0+aHdfdG9rZW47CisJCQlxdGQtPmh3X3Rva2VuID0gSEFMVF9CSVQ7CisJCQl3bWIgKCk7CisJCQlkdW1teSA9IHFoLT5kdW1teTsKKworCQkJZG1hID0gZHVtbXktPnF0ZF9kbWE7CisJCQkqZHVtbXkgPSAqcXRkOworCQkJZHVtbXktPnF0ZF9kbWEgPSBkbWE7CisKKwkJCWxpc3RfZGVsICgmcXRkLT5xdGRfbGlzdCk7CisJCQlsaXN0X2FkZCAoJmR1bW15LT5xdGRfbGlzdCwgcXRkX2xpc3QpOworCQkJX19saXN0X3NwbGljZSAocXRkX2xpc3QsIHFoLT5xdGRfbGlzdC5wcmV2KTsKKworCQkJZWhjaV9xdGRfaW5pdCAocXRkLCBxdGQtPnF0ZF9kbWEpOworCQkJcWgtPmR1bW15ID0gcXRkOworCisJCQkvKiBoYyBtdXN0IHNlZSB0aGUgbmV3IGR1bW15IGF0IGxpc3QgZW5kICovCisJCQlkbWEgPSBxdGQtPnF0ZF9kbWE7CisJCQlxdGQgPSBsaXN0X2VudHJ5IChxaC0+cXRkX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCQlxdGQtPmh3X25leHQgPSBRVERfTkVYVCAoZG1hKTsKKworCQkJLyogbGV0IHRoZSBoYyBwcm9jZXNzIHRoZXNlIG5leHQgcXRkcyAqLworCQkJd21iICgpOworCQkJZHVtbXktPmh3X3Rva2VuID0gdG9rZW47CisKKwkJCXVyYi0+aGNwcml2ID0gcWhfZ2V0IChxaCk7CisJCX0KKwl9CisJcmV0dXJuIHFoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50CitzdWJtaXRfYXN5bmMgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXN0cnVjdCBsaXN0X2hlYWQJKnF0ZF9saXN0LAorCWludAkJCW1lbV9mbGFncworKSB7CisJc3RydWN0IGVoY2lfcXRkCQkqcXRkOworCWludAkJCWVwbnVtOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBlaGNpX3FoCQkqcWggPSBOVUxMOworCisJcXRkID0gbGlzdF9lbnRyeSAocXRkX2xpc3QtPm5leHQsIHN0cnVjdCBlaGNpX3F0ZCwgcXRkX2xpc3QpOworCWVwbnVtID0gZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKworI2lmZGVmIEVIQ0lfVVJCX1RSQUNFCisJZWhjaV9kYmcgKGVoY2ksCisJCSIlcyAlcyB1cmIgJXAgZXAlZCVzIGxlbiAlZCwgcXRkICVwIFtxaCAlcF1cbiIsCisJCV9fRlVOQ1RJT05fXywgdXJiLT5kZXYtPmRldnBhdGgsIHVyYiwKKwkJZXBudW0gJiAweDBmLCAoZXBudW0gJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQlxdGQsIGVwLT5oY3ByaXYpOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlxaCA9IHFoX2FwcGVuZF90ZHMgKGVoY2ksIHVyYiwgcXRkX2xpc3QsIGVwbnVtLCAmZXAtPmhjcHJpdik7CisKKwkvKiBDb250cm9sL2J1bGsgb3BlcmF0aW9ucyB0aHJvdWdoIFRUcyBkb24ndCBuZWVkIHNjaGVkdWxpbmcsCisJICogdGhlIEhDIGFuZCBUVCBoYW5kbGUgaXQgd2hlbiB0aGUgVFQgaGFzIGEgYnVmZmVyIHJlYWR5LgorCSAqLworCWlmIChsaWtlbHkgKHFoICE9IE5VTEwpKSB7CisJCWlmIChsaWtlbHkgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9JRExFKSkKKwkJCXFoX2xpbmtfYXN5bmMgKGVoY2ksIHFoX2dldCAocWgpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkgKHFoID09IE5VTEwpKSB7CisJCXF0ZF9saXN0X2ZyZWUgKGVoY2ksIHVyYiwgcXRkX2xpc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZSBhc3luYyBxaCBmb3IgdGhlIHF0ZHMgYmVpbmcgcmVjbGFpbWVkIGFyZSBub3cgdW5saW5rZWQgZnJvbSB0aGUgSEMgKi8KKworc3RhdGljIHZvaWQgZW5kX3VubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoID0gZWhjaS0+cmVjbGFpbTsKKwlzdHJ1Y3QgZWhjaV9xaAkJKm5leHQ7CisKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfSUFBX1dBVENIRE9HKTsKKworCS8vIHFoLT5od19uZXh0ID0gY3B1X3RvX2xlMzIgKHFoLT5xaF9kbWEpOworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0lETEU7CisJcWgtPnFoX25leHQucWggPSBOVUxMOworCXFoX3B1dCAocWgpOwkJCS8vIHJlZmNvdW50IGZyb20gcmVjbGFpbSAKKworCS8qIG90aGVyIHVubGluayhzKSBtYXkgYmUgcGVuZGluZyAoaW4gUUhfU1RBVEVfVU5MSU5LX1dBSVQpICovCisJbmV4dCA9IHFoLT5yZWNsYWltOworCWVoY2ktPnJlY2xhaW0gPSBuZXh0OworCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAwOworCXFoLT5yZWNsYWltID0gTlVMTDsKKworCXFoX2NvbXBsZXRpb25zIChlaGNpLCBxaCwgcmVncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpCisJCQkmJiBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCQlxaF9saW5rX2FzeW5jIChlaGNpLCBxaCk7CisJZWxzZSB7CisJCXFoX3B1dCAocWgpOwkJLy8gcmVmY291bnQgZnJvbSBhc3luYyBsaXN0CisKKwkJLyogaXQncyBub3QgZnJlZSB0byB0dXJuIHRoZSBhc3luYyBzY2hlZHVsZSBvbi9vZmY7IGxlYXZlIGl0CisJCSAqIGFjdGl2ZSBidXQgaWRsZSBmb3IgYSB3aGlsZSBvbmNlIGl0IGVtcHRpZXMuCisJCSAqLworCQlpZiAoSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKQorCQkJCSYmIGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoID09IE5VTEwpCisJCQl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0FTWU5DX09GRik7CisJfQorCisJaWYgKG5leHQpIHsKKwkJZWhjaS0+cmVjbGFpbSA9IE5VTEw7CisJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgbmV4dCk7CisJfQorfQorCisvKiBtYWtlcyBzdXJlIHRoZSBhc3luYyBxaCB3aWxsIGJlY29tZSBpZGxlICovCisvKiBjYWxsZXIgbXVzdCBvd24gZWhjaS0+bG9jayAqLworCitzdGF0aWMgdm9pZCBzdGFydF91bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCWludAkJY21kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwlzdHJ1Y3QgZWhjaV9xaAkqcHJldjsKKworI2lmZGVmIERFQlVHCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZlaGNpLT5sb2NrKTsKKwlpZiAoZWhjaS0+cmVjbGFpbQorCQkJfHwgKHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9MSU5LRUQKKwkJCQkmJiBxaC0+cWhfc3RhdGUgIT0gUUhfU1RBVEVfVU5MSU5LX1dBSVQpCisJCQkpCisJCUJVRyAoKTsKKyNlbmRpZgorCisJLyogc3RvcCBhc3luYyBzY2hlZHVsZSByaWdodCBub3c/ICovCisJaWYgKHVubGlrZWx5IChxaCA9PSBlaGNpLT5hc3luYykpIHsKKwkJLyogY2FuJ3QgZ2V0IGhlcmUgd2l0aG91dCBTVFNfQVNTIHNldCAqLworCQlpZiAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlICE9IEhDX1NUQVRFX0hBTFQpIHsKKwkJCXdyaXRlbCAoY21kICYgfkNNRF9BU0UsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwkJCXdtYiAoKTsKKwkJCS8vIGhhbmRzaGFrZSBsYXRlciwgaWYgd2UgbmVlZCB0bworCQl9CisJCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19PRkYpOworCQlyZXR1cm47CisJfSAKKworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX1VOTElOSzsKKwllaGNpLT5yZWNsYWltID0gcWggPSBxaF9nZXQgKHFoKTsKKworCXByZXYgPSBlaGNpLT5hc3luYzsKKwl3aGlsZSAocHJldi0+cWhfbmV4dC5xaCAhPSBxaCkKKwkJcHJldiA9IHByZXYtPnFoX25leHQucWg7CisKKwlwcmV2LT5od19uZXh0ID0gcWgtPmh3X25leHQ7CisJcHJldi0+cWhfbmV4dCA9IHFoLT5xaF9uZXh0OworCXdtYiAoKTsKKworCWlmICh1bmxpa2VseSAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKSB7CisJCS8qIGlmICh1bmxpa2VseSAocWgtPnJlY2xhaW0gIT0gMCkpCisJCSAqIAl0aGlzIHdpbGwgcmVjdXJzZSwgcHJvYmFibHkgbm90IG11Y2gKKwkJICovCisJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJZWhjaS0+cmVjbGFpbV9yZWFkeSA9IDA7CisJY21kIHw9IENNRF9JQUFEOworCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJKHZvaWQpIHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JQUFfV0FUQ0hET0cpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorc2Nhbl9hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoOworCWVudW0gZWhjaV90aW1lcl9hY3Rpb24JYWN0aW9uID0gVElNRVJfSU9fV0FUQ0hET0c7CisKKwlpZiAoISsrKGVoY2ktPnN0YW1wKSkKKwkJZWhjaS0+c3RhbXArKzsKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfU0hSSU5LKTsKK3Jlc2NhbjoKKwlxaCA9IGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoOworCWlmIChsaWtlbHkgKHFoICE9IE5VTEwpKSB7CisJCWRvIHsKKwkJCS8qIGNsZWFuIGFueSBmaW5pc2hlZCB3b3JrIGZvciB0aGlzIHFoICovCisJCQlpZiAoIWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpCisJCQkJCSYmIHFoLT5zdGFtcCAhPSBlaGNpLT5zdGFtcCkgeworCQkJCWludCB0ZW1wOworCisJCQkJLyogdW5saW5rcyBjb3VsZCBoYXBwZW4gaGVyZTsgY29tcGxldGlvbgorCQkJCSAqIHJlcG9ydGluZyBkcm9wcyB0aGUgbG9jay4gIHJlc2NhbiB1c2luZworCQkJCSAqIHRoZSBsYXRlc3Qgc2NoZWR1bGUsIGJ1dCBkb24ndCByZXNjYW4KKwkJCQkgKiBxaHMgd2UgYWxyZWFkeSBmaW5pc2hlZCAobm8gbG9vcGluZykuCisJCQkJICovCisJCQkJcWggPSBxaF9nZXQgKHFoKTsKKwkJCQlxaC0+c3RhbXAgPSBlaGNpLT5zdGFtcDsKKwkJCQl0ZW1wID0gcWhfY29tcGxldGlvbnMgKGVoY2ksIHFoLCByZWdzKTsKKwkJCQlxaF9wdXQgKHFoKTsKKwkJCQlpZiAodGVtcCAhPSAwKSB7CisJCQkJCWdvdG8gcmVzY2FuOworCQkJCX0KKwkJCX0KKworCQkJLyogdW5saW5rIGlkbGUgZW50cmllcywgcmVkdWNpbmcgSEMgUENJIHVzYWdlIGFzIHdlbGwKKwkJCSAqIGFzIEhDRCBzY2hlZHVsZS1zY2FubmluZyBjb3N0cy4gIGRlbGF5IGZvciBhbnkgcWgKKwkJCSAqIHdlIGp1c3Qgc2Nhbm5lZCwgdGhlcmUncyBhIG5vdC11bnVzdWFsIGNhc2UgdGhhdCBpdAorCQkJICogZG9lc24ndCBzdGF5IGlkbGUgZm9yIGxvbmcuCisJCQkgKiAocGx1cywgYXZvaWRzIHNvbWUga2luZCBvZiByZS1hY3RpdmF0aW9uIHJhY2UuKQorCQkJICovCisJCQlpZiAobGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkpIHsKKwkJCQlpZiAocWgtPnN0YW1wID09IGVoY2ktPnN0YW1wKQorCQkJCQlhY3Rpb24gPSBUSU1FUl9BU1lOQ19TSFJJTks7CisJCQkJZWxzZSBpZiAoIWVoY2ktPnJlY2xhaW0KKwkJCQkJICAgICYmIHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpCisJCQkJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkJfQorCisJCQlxaCA9IHFoLT5xaF9uZXh0LnFoOworCQl9IHdoaWxlIChxaCk7CisJfQorCWlmIChhY3Rpb24gPT0gVElNRVJfQVNZTkNfU0hSSU5LKQorCQl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0FTWU5DX1NIUklOSyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Yzg2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMCwwICsxLDE5OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBieSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChjKSAyMDAzIE1pY2hhbCBTb2prYSwgZm9yIGhpZ2gtc3BlZWQgaXNvIHRyYW5zZmVycworICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIHNjaGVkdWxlZCB0cmFuc2FjdGlvbiBzdXBwb3J0OiAgaW50ZXJydXB0LCBpc28sIHNwbGl0IGlzbworICogVGhlc2UgYXJlIGNhbGxlZCAicGVyaW9kaWMiIHRyYW5zYWN0aW9ucyBpbiB0aGUgRUhDSSBzcGVjLgorICoKKyAqIE5vdGUgdGhhdCBmb3IgaW50ZXJydXB0IHRyYW5zZmVycywgdGhlIFFIL1FURCBtYW5pcHVsYXRpb24gaXMgc2hhcmVkCisgKiB3aXRoIHRoZSAiYXN5bmNocm9ub3VzIiB0cmFuc2FjdGlvbiBzdXBwb3J0IChjb250cm9sL2J1bGsgdHJhbnNmZXJzKS4KKyAqIFRoZSBvbmx5IHJlYWwgZGlmZmVyZW5jZSBpcyBpbiBob3cgaW50ZXJydXB0IHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkLgorICoKKyAqIEZvciBJU08sIHdlIG1ha2UgYW4gImlzb19zdHJlYW0iIGhlYWQgdG8gc2VydmUgdGhlIHNhbWUgcm9sZSBhcyBhIFFILgorICogSXQga2VlcHMgdHJhY2sgb2YgZXZlcnkgSVREIChvciBTSVREKSB0aGF0J3MgbGlua2VkLCBhbmQgaG9sZHMgZW5vdWdoCisgKiBwcmUtY2FsY3VsYXRlZCBzY2hlZHVsZSBkYXRhIHRvIG1ha2UgYXBwZW5kaW5nIHRvIHRoZSBxdWV1ZSBiZSBxdWljay4KKyAqLworCitzdGF0aWMgaW50IGVoY2lfZ2V0X2ZyYW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHBlcmlvZGljX25leHRfc2hhZG93IC0gcmV0dXJuICJuZXh0IiBwb2ludGVyIG9uIHNoYWRvdyBsaXN0CisgKiBAcGVyaW9kaWM6IGhvc3QgcG9pbnRlciB0byBxaC9pdGQvc2l0ZAorICogQHRhZzogaGFyZHdhcmUgdGFnIGZvciB0eXBlIG9mIHRoaXMgcmVjb3JkCisgKi8KK3N0YXRpYyB1bmlvbiBlaGNpX3NoYWRvdyAqCitwZXJpb2RpY19uZXh0X3NoYWRvdyAodW5pb24gZWhjaV9zaGFkb3cgKnBlcmlvZGljLCBfX2xlMzIgdGFnKQoreworCXN3aXRjaCAodGFnKSB7CisJY2FzZSBRX1RZUEVfUUg6CisJCXJldHVybiAmcGVyaW9kaWMtPnFoLT5xaF9uZXh0OworCWNhc2UgUV9UWVBFX0ZTVE46CisJCXJldHVybiAmcGVyaW9kaWMtPmZzdG4tPmZzdG5fbmV4dDsKKwljYXNlIFFfVFlQRV9JVEQ6CisJCXJldHVybiAmcGVyaW9kaWMtPml0ZC0+aXRkX25leHQ7CisJLy8gY2FzZSBRX1RZUEVfU0lURDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gJnBlcmlvZGljLT5zaXRkLT5zaXRkX25leHQ7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIGVoY2ktPmxvY2sgKi8KK3N0YXRpYyB2b2lkIHBlcmlvZGljX3VubGluayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBmcmFtZSwgdm9pZCAqcHRyKQoreworCXVuaW9uIGVoY2lfc2hhZG93CSpwcmV2X3AgPSAmZWhjaS0+cHNoYWRvdyBbZnJhbWVdOworCV9fbGUzMgkJCSpod19wID0gJmVoY2ktPnBlcmlvZGljIFtmcmFtZV07CisJdW5pb24gZWhjaV9zaGFkb3cJaGVyZSA9ICpwcmV2X3A7CisKKwkvKiBmaW5kIHByZWRlY2Vzc29yIG9mICJwdHIiOyBodyBhbmQgc2hhZG93IGxpc3RzIGFyZSBpbiBzeW5jICovCisJd2hpbGUgKGhlcmUucHRyICYmIGhlcmUucHRyICE9IHB0cikgeworCQlwcmV2X3AgPSBwZXJpb2RpY19uZXh0X3NoYWRvdyAocHJldl9wLCBRX05FWFRfVFlQRSAoKmh3X3ApKTsKKwkJaHdfcCA9IGhlcmUuaHdfbmV4dDsKKwkJaGVyZSA9ICpwcmV2X3A7CisJfQorCS8qIGFuIGludGVycnVwdCBlbnRyeSAoYXQgbGlzdCBlbmQpIGNvdWxkIGhhdmUgYmVlbiBzaGFyZWQgKi8KKwlpZiAoIWhlcmUucHRyKQorCQlyZXR1cm47CisKKwkvKiB1cGRhdGUgc2hhZG93IGFuZCBoYXJkd2FyZSBsaXN0cyAuLi4gdGhlIG9sZCAibmV4dCIgcG9pbnRlcnMKKwkgKiBmcm9tIHB0ciBtYXkgc3RpbGwgYmUgaW4gdXNlLCB0aGUgY2FsbGVyIHVwZGF0ZXMgdGhlbS4KKwkgKi8KKwkqcHJldl9wID0gKnBlcmlvZGljX25leHRfc2hhZG93ICgmaGVyZSwgUV9ORVhUX1RZUEUgKCpod19wKSk7CisJKmh3X3AgPSAqaGVyZS5od19uZXh0OworfQorCisvKiBob3cgbWFueSBvZiB0aGUgdWZyYW1lJ3MgMTI1IHVzZWNzIGFyZSBhbGxvY2F0ZWQ/ICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQKK3BlcmlvZGljX3VzZWNzIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGZyYW1lLCB1bnNpZ25lZCB1ZnJhbWUpCit7CisJX19sZTMyCQkJKmh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwl1bmlvbiBlaGNpX3NoYWRvdwkqcSA9ICZlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJdW5zaWduZWQJCXVzZWNzID0gMDsKKworCXdoaWxlIChxLT5wdHIpIHsKKwkJc3dpdGNoIChRX05FWFRfVFlQRSAoKmh3X3ApKSB7CisJCWNhc2UgUV9UWVBFX1FIOgorCQkJLyogaXMgaXQgaW4gdGhlIFMtbWFzaz8gKi8KKwkJCWlmIChxLT5xaC0+aHdfaW5mbzIgJiBjcHVfdG9fbGUzMiAoMSA8PCB1ZnJhbWUpKQorCQkJCXVzZWNzICs9IHEtPnFoLT51c2VjczsKKwkJCS8qIC4uLiBvciBDLW1hc2s/ICovCisJCQlpZiAocS0+cWgtPmh3X2luZm8yICYgY3B1X3RvX2xlMzIgKDEgPDwgKDggKyB1ZnJhbWUpKSkKKwkJCQl1c2VjcyArPSBxLT5xaC0+Y191c2VjczsKKwkJCWh3X3AgPSAmcS0+cWgtPmh3X25leHQ7CisJCQlxID0gJnEtPnFoLT5xaF9uZXh0OworCQkJYnJlYWs7CisJCS8vIGNhc2UgUV9UWVBFX0ZTVE46CisJCWRlZmF1bHQ6CisJCQkvKiBmb3IgInNhdmUgcGxhY2UiIEZTVE5zLCBjb3VudCB0aGUgcmVsZXZhbnQgSU5UUgorCQkJICogYmFuZHdpZHRoIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lCisJCQkgKi8KKwkJCWlmIChxLT5mc3RuLT5od19wcmV2ICE9IEVIQ0lfTElTVF9FTkQpIHsKKwkJCQllaGNpX2RiZyAoZWhjaSwgImlnbm9yaW5nIEZTVE4gY29zdCAuLi5cbiIpOworCQkJfQorCQkJaHdfcCA9ICZxLT5mc3RuLT5od19uZXh0OworCQkJcSA9ICZxLT5mc3RuLT5mc3RuX25leHQ7CisJCQlicmVhazsKKwkJY2FzZSBRX1RZUEVfSVREOgorCQkJdXNlY3MgKz0gcS0+aXRkLT51c2VjcyBbdWZyYW1lXTsKKwkJCWh3X3AgPSAmcS0+aXRkLT5od19uZXh0OworCQkJcSA9ICZxLT5pdGQtPml0ZF9uZXh0OworCQkJYnJlYWs7CisJCWNhc2UgUV9UWVBFX1NJVEQ6CisJCQkvKiBpcyBpdCBpbiB0aGUgUy1tYXNrPyAgKGNvdW50IFNQTElULCBEQVRBKSAqLworCQkJaWYgKHEtPnNpdGQtPmh3X3VmcmFtZSAmIGNwdV90b19sZTMyICgxIDw8IHVmcmFtZSkpIHsKKwkJCQlpZiAocS0+c2l0ZC0+aHdfZnVsbHNwZWVkX2VwICYKKwkJCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE8PDMxKSkKKwkJCQkJdXNlY3MgKz0gcS0+c2l0ZC0+c3RyZWFtLT51c2VjczsKKwkJCQllbHNlCS8qIHdvcnN0IGNhc2UgZm9yIE9VVCBzdGFydC1zcGxpdCAqLworCQkJCQl1c2VjcyArPSBIU19VU0VDU19JU08gKDE4OCk7CisJCQl9CisKKwkJCS8qIC4uLiBDLW1hc2s/ICAoY291bnQgQ1NQTElULCBEQVRBKSAqLworCQkJaWYgKHEtPnNpdGQtPmh3X3VmcmFtZSAmCisJCQkJCWNwdV90b19sZTMyICgxIDw8ICg4ICsgdWZyYW1lKSkpIHsKKwkJCQkvKiB3b3JzdCBjYXNlIGZvciBJTiBjb21wbGV0ZS1zcGxpdCAqLworCQkJCXVzZWNzICs9IHEtPnNpdGQtPnN0cmVhbS0+Y191c2VjczsKKwkJCX0KKworCQkJaHdfcCA9ICZxLT5zaXRkLT5od19uZXh0OworCQkJcSA9ICZxLT5zaXRkLT5zaXRkX25leHQ7CisJCQlicmVhazsKKwkJfQorCX0KKyNpZmRlZglERUJVRworCWlmICh1c2VjcyA+IDEwMCkKKwkJZWhjaV9lcnIgKGVoY2ksICJ1ZnJhbWUgJWQgc2NoZWQgb3ZlcnJ1bjogJWQgdXNlY3NcbiIsCisJCQlmcmFtZSAqIDggKyB1ZnJhbWUsIHVzZWNzKTsKKyNlbmRpZgorCXJldHVybiB1c2VjczsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBzYW1lX3R0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2MSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldjIpCit7CisJaWYgKCFkZXYxLT50dCB8fCAhZGV2Mi0+dHQpCisJCXJldHVybiAwOworCWlmIChkZXYxLT50dCAhPSBkZXYyLT50dCkKKwkJcmV0dXJuIDA7CisJaWYgKGRldjEtPnR0LT5tdWx0aSkKKwkJcmV0dXJuIGRldjEtPnR0cG9ydCA9PSBkZXYyLT50dHBvcnQ7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworLyogcmV0dXJuIHRydWUgaWZmIHRoZSBkZXZpY2UncyB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yIGlzIGF2YWlsYWJsZQorICogZm9yIGEgcGVyaW9kaWMgdHJhbnNmZXIgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBmcmFtZSwgdXNpbmcKKyAqIGFsbCB0aGUgdWZyYW1lcyBpbiB0aGUgbWFzay4KKyAqLworc3RhdGljIGludCB0dF9ub19jb2xsaXNpb24gKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJdW5zaWduZWQJCXBlcmlvZCwKKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2LAorCXVuc2lnbmVkCQlmcmFtZSwKKwl1MzIJCQl1Zl9tYXNrCispCit7CisJaWYgKHBlcmlvZCA9PSAwKQkvKiBlcnJvciAqLworCQlyZXR1cm4gMDsKKworCS8qIG5vdGUgYmFuZHdpZHRoIHdhc3RhZ2U6ICBzcGxpdCBuZXZlciBmb2xsb3dzIGNzcGxpdAorCSAqIChkaWZmZXJlbnQgZGV2IG9yIGVuZHBvaW50KSB1bnRpbCB0aGUgbmV4dCB1ZnJhbWUuCisJICogY2FsbGluZyBjb252ZW50aW9uIGRvZXNuJ3QgbWFrZSB0aGF0IGRpc3RpbmN0aW9uLgorCSAqLworCWZvciAoOyBmcmFtZSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGZyYW1lICs9IHBlcmlvZCkgeworCQl1bmlvbiBlaGNpX3NoYWRvdwloZXJlOworCQlfX2xlMzIJCQl0eXBlOworCisJCWhlcmUgPSBlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJCXR5cGUgPSBRX05FWFRfVFlQRSAoZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXSk7CisJCXdoaWxlIChoZXJlLnB0cikgeworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFFfVFlQRV9JVEQ6CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChoZXJlLml0ZC0+aHdfbmV4dCk7CisJCQkJaGVyZSA9IGhlcmUuaXRkLT5pdGRfbmV4dDsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgUV9UWVBFX1FIOgorCQkJCWlmIChzYW1lX3R0IChkZXYsIGhlcmUucWgtPmRldikpIHsKKwkJCQkJdTMyCQltYXNrOworCisJCQkJCW1hc2sgPSBsZTMyX3RvX2NwdSAoaGVyZS5xaC0+aHdfaW5mbzIpOworCQkJCQkvKiAia25vd3MiIG5vIGdhcCBpcyBuZWVkZWQgKi8KKwkJCQkJbWFzayB8PSBtYXNrID4+IDg7CisJCQkJCWlmIChtYXNrICYgdWZfbWFzaykKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKGhlcmUucWgtPmh3X25leHQpOworCQkJCWhlcmUgPSBoZXJlLnFoLT5xaF9uZXh0OworCQkJCWNvbnRpbnVlOworCQkJY2FzZSBRX1RZUEVfU0lURDoKKwkJCQlpZiAoc2FtZV90dCAoZGV2LCBoZXJlLnNpdGQtPnVyYi0+ZGV2KSkgeworCQkJCQl1MTYJCW1hc2s7CisKKwkJCQkJbWFzayA9IGxlMzJfdG9fY3B1IChoZXJlLnNpdGQKKwkJCQkJCQkJLT5od191ZnJhbWUpOworCQkJCQkvKiBGSVhNRSBhc3N1bWVzIG5vIGdhcCBmb3IgSU4hICovCisJCQkJCW1hc2sgfD0gbWFzayA+PiA4OworCQkJCQlpZiAobWFzayAmIHVmX21hc2spCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChoZXJlLnNpdGQtPmh3X25leHQpOworCQkJCWhlcmUgPSBoZXJlLnNpdGQtPnNpdGRfbmV4dDsKKwkJCQljb250aW51ZTsKKwkJCS8vIGNhc2UgUV9UWVBFX0ZTVE46CisJCQlkZWZhdWx0OgorCQkJCWVoY2lfZGJnIChlaGNpLAorCQkJCQkicGVyaW9kaWMgZnJhbWUgJWQgYm9ndXMgdHlwZSAlZFxuIiwKKwkJCQkJZnJhbWUsIHR5cGUpOworCQkJfQorCisJCQkvKiBjb2xsaXNpb24gb3IgZXJyb3IgKi8KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogbm8gY29sbGlzaW9uICovCisJcmV0dXJuIDE7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZW5hYmxlX3BlcmlvZGljIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJdTMyCWNtZDsKKwlpbnQJc3RhdHVzOworCisJLyogZGlkIGNsZWFyaW5nIFBTRSBkaWQgdGFrZSBlZmZlY3QgeWV0PworCSAqIHRha2VzIGVmZmVjdCBvbmx5IGF0IGZyYW1lIGJvdW5kYXJpZXMuLi4KKwkgKi8KKwlzdGF0dXMgPSBoYW5kc2hha2UgKCZlaGNpLT5yZWdzLT5zdGF0dXMsIFNUU19QU1MsIDAsIDkgKiAxMjUpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWNtZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCkgfCBDTURfUFNFOworCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJLyogcG9zdGVkIHdyaXRlIC4uLiBQU1MgaGFwcGVucyBsYXRlciAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwkvKiBtYWtlIHN1cmUgZWhjaV93b3JrIHNjYW5zIHRoZXNlICovCisJZWhjaS0+bmV4dF91ZnJhbWUgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KQorCQkJCSUgKGVoY2ktPnBlcmlvZGljX3NpemUgPDwgMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZV9wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXUzMgljbWQ7CisJaW50CXN0YXR1czsKKworCS8qIGRpZCBzZXR0aW5nIFBTRSBub3QgdGFrZSBlZmZlY3QgeWV0PworCSAqIHRha2VzIGVmZmVjdCBvbmx5IGF0IGZyYW1lIGJvdW5kYXJpZXMuLi4KKwkgKi8KKwlzdGF0dXMgPSBoYW5kc2hha2UgKCZlaGNpLT5yZWdzLT5zdGF0dXMsIFNUU19QU1MsIFNUU19QU1MsIDkgKiAxMjUpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWNtZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCkgJiB+Q01EX1BTRTsKKwl3cml0ZWwgKGNtZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCS8qIHBvc3RlZCB3cml0ZSAuLi4gKi8KKworCWVoY2ktPm5leHRfdWZyYW1lID0gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHBlcmlvZGljIHNjaGVkdWxlIHNsb3RzIGhhdmUgaXNvIHRkcyAobm9ybWFsIG9yIHNwbGl0KSBmaXJzdCwgdGhlbiBhCisgKiBzcGFyc2UgdHJlZSBmb3IgYWN0aXZlIGludGVycnVwdCB0cmFuc2ZlcnMuCisgKgorICogdGhpcyBqdXN0IGxpbmtzIGluIGEgcWg7IGNhbGxlciBndWFyYW50ZWVzIHVmcmFtZSBtYXNrcyBhcmUgc2V0IHJpZ2h0LgorICogbm8gRlNUTiBzdXBwb3J0ICh5ZXQ7IGVoY2kgMC45NispCisgKi8KK3N0YXRpYyBpbnQgcWhfbGlua19wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJdW5zaWduZWQJaTsKKwl1bnNpZ25lZAlwZXJpb2QgPSBxaC0+cGVyaW9kOworCisJZGV2X2RiZyAoJnFoLT5kZXYtPmRldiwKKwkJImxpbmsgcWglZC0lMDR4LyVwIHN0YXJ0ICVkIFslZC8lZCB1c11cbiIsCisJCXBlcmlvZCwgbGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8yKSAmIDB4ZmZmZiwKKwkJcWgsIHFoLT5zdGFydCwgcWgtPnVzZWNzLCBxaC0+Y191c2Vjcyk7CisKKwkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KKwlpZiAocGVyaW9kID09IDApCisJCXBlcmlvZCA9IDE7CisKKwlmb3IgKGkgPSBxaC0+c3RhcnQ7IGkgPCBlaGNpLT5wZXJpb2RpY19zaXplOyBpICs9IHBlcmlvZCkgeworCQl1bmlvbiBlaGNpX3NoYWRvdwkqcHJldiA9ICZlaGNpLT5wc2hhZG93IFtpXTsKKwkJdTMyCQkJKmh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ldOworCQl1bmlvbiBlaGNpX3NoYWRvdwloZXJlID0gKnByZXY7CisJCXUzMgkJCXR5cGUgPSAwOworCisJCS8qIHNraXAgdGhlIGlzbyBub2RlcyBhdCBsaXN0IGhlYWQgKi8KKwkJd2hpbGUgKGhlcmUucHRyKSB7CisJCQl0eXBlID0gUV9ORVhUX1RZUEUgKCpod19wKTsKKwkJCWlmICh0eXBlID09IFFfVFlQRV9RSCkKKwkJCQlicmVhazsKKwkJCXByZXYgPSBwZXJpb2RpY19uZXh0X3NoYWRvdyAocHJldiwgdHlwZSk7CisJCQlod19wID0gJmhlcmUucWgtPmh3X25leHQ7CisJCQloZXJlID0gKnByZXY7CisJCX0KKworCQkvKiBzb3J0aW5nIGVhY2ggYnJhbmNoIGJ5IHBlcmlvZCAoc2xvdy0tPmZhc3QpCisJCSAqIGVuYWJsZXMgc2hhcmluZyBpbnRlcmlvciB0cmVlIG5vZGVzCisJCSAqLworCQl3aGlsZSAoaGVyZS5wdHIgJiYgcWggIT0gaGVyZS5xaCkgeworCQkJaWYgKHFoLT5wZXJpb2QgPiBoZXJlLnFoLT5wZXJpb2QpCisJCQkJYnJlYWs7CisJCQlwcmV2ID0gJmhlcmUucWgtPnFoX25leHQ7CisJCQlod19wID0gJmhlcmUucWgtPmh3X25leHQ7CisJCQloZXJlID0gKnByZXY7CisJCX0KKwkJLyogbGluayBpbiB0aGlzIHFoLCB1bmxlc3Mgc29tZSBlYXJsaWVyIHBhc3MgZGlkIHRoYXQgKi8KKwkJaWYgKHFoICE9IGhlcmUucWgpIHsKKwkJCXFoLT5xaF9uZXh0ID0gaGVyZTsKKwkJCWlmIChoZXJlLnFoKQorCQkJCXFoLT5od19uZXh0ID0gKmh3X3A7CisJCQl3bWIgKCk7CisJCQlwcmV2LT5xaCA9IHFoOworCQkJKmh3X3AgPSBRSF9ORVhUIChxaC0+cWhfZG1hKTsKKwkJfQorCX0KKwlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9MSU5LRUQ7CisJcWhfZ2V0IChxaCk7CisKKwkvKiB1cGRhdGUgcGVyLXFoIGJhbmR3aWR0aCBmb3IgdXNiZnMgKi8KKwllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkICs9IHFoLT5wZXJpb2QKKwkJPyAoKHFoLT51c2VjcyArIHFoLT5jX3VzZWNzKSAvIHFoLT5wZXJpb2QpCisJCTogKHFoLT51c2VjcyAqIDgpOworCisJLyogbWF5YmUgZW5hYmxlIHBlcmlvZGljIHNjaGVkdWxlIHByb2Nlc3NpbmcgKi8KKwlpZiAoIWVoY2ktPnBlcmlvZGljX3NjaGVkKyspCisJCXJldHVybiBlbmFibGVfcGVyaW9kaWMgKGVoY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFoX3VubGlua19wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJdW5zaWduZWQJaTsKKwl1bnNpZ25lZAlwZXJpb2Q7CisKKwkvLyBGSVhNRToKKwkvLyBJRiB0aGlzIGlzbid0IGhpZ2ggc3BlZWQKKwkvLyAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKKwkvLyAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCisJLy8gVEhFTgorCS8vICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgNyAvKiAiaWdub3JlIiAqLyk7CisKKwkvKiBoaWdoIGJhbmR3aWR0aCwgb3Igb3RoZXJ3aXNlIHBhcnQgb2YgZXZlcnkgbWljcm9mcmFtZSAqLworCWlmICgocGVyaW9kID0gcWgtPnBlcmlvZCkgPT0gMCkKKwkJcGVyaW9kID0gMTsKKworCWZvciAoaSA9IHFoLT5zdGFydDsgaSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGkgKz0gcGVyaW9kKQorCQlwZXJpb2RpY191bmxpbmsgKGVoY2ksIGksIHFoKTsKKworCS8qIHVwZGF0ZSBwZXItcWggYmFuZHdpZHRoIGZvciB1c2JmcyAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQgLT0gcWgtPnBlcmlvZAorCQk/ICgocWgtPnVzZWNzICsgcWgtPmNfdXNlY3MpIC8gcWgtPnBlcmlvZCkKKwkJOiAocWgtPnVzZWNzICogOCk7CisKKwlkZXZfZGJnICgmcWgtPmRldi0+ZGV2LAorCQkidW5saW5rIHFoJWQtJTA0eC8lcCBzdGFydCAlZCBbJWQvJWQgdXNdXG4iLAorCQlxaC0+cGVyaW9kLCBsZTMyX3RvX2NwdXAgKCZxaC0+aHdfaW5mbzIpICYgMHhmZmZmLAorCQlxaCwgcWgtPnN0YXJ0LCBxaC0+dXNlY3MsIHFoLT5jX3VzZWNzKTsKKworCS8qIHFoLT5xaF9uZXh0IHN0aWxsICJsaXZlIiB0byBIQyAqLworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX1VOTElOSzsKKwlxaC0+cWhfbmV4dC5wdHIgPSBOVUxMOworCXFoX3B1dCAocWgpOworCisJLyogbWF5YmUgdHVybiBvZmYgcGVyaW9kaWMgc2NoZWR1bGUgKi8KKwllaGNpLT5wZXJpb2RpY19zY2hlZC0tOworCWlmICghZWhjaS0+cGVyaW9kaWNfc2NoZWQpCisJCSh2b2lkKSBkaXNhYmxlX3BlcmlvZGljIChlaGNpKTsKK30KKworc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwl1bnNpZ25lZAl3YWl0OworCisJcWhfdW5saW5rX3BlcmlvZGljIChlaGNpLCBxaCk7CisKKwkvKiBzaW1wbGUvcGFyYW5vaWQ6ICBhbHdheXMgZGVsYXksIGV4cGVjdGluZyB0aGUgSEMgbmVlZHMgdG8gcmVhZAorCSAqIHFoLT5od19uZXh0IG9yIGZpbmlzaCBhIHdyaXRlYmFjayBhZnRlciBTUExJVC9DU1BMSVQgLi4uIGFuZAorCSAqIGV4cGVjdCBraHViZCB0byBjbGVhbiB1cCBhZnRlciBhbnkgQ1NQTElUcyB3ZSB3b24ndCBpc3N1ZS4KKwkgKiBhY3RpdmUgaGlnaCBzcGVlZCBxdWV1ZXMgbWF5IG5lZWQgYmlnZ2VyIGRlbGF5cy4uLgorCSAqLworCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQorCQkJfHwgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4MGZmIDw8IDgpCisJCQkJCSYgcWgtPmh3X2luZm8yKSAhPSAwKQorCQl3YWl0ID0gMjsKKwllbHNlCisJCXdhaXQgPSA1NTsJLyogd29yc3QgY2FzZTogMyAqIDEwMjQgKi8KKworCXVkZWxheSAod2FpdCk7CisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfSURMRTsKKwlxaC0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJd21iICgpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGNoZWNrX3BlcmlvZCAoCisJc3RydWN0IGVoY2lfaGNkICplaGNpLCAKKwl1bnNpZ25lZAlmcmFtZSwKKwl1bnNpZ25lZAl1ZnJhbWUsCisJdW5zaWduZWQJcGVyaW9kLAorCXVuc2lnbmVkCXVzZWNzCispIHsKKwlpbnQJCWNsYWltZWQ7CisKKwkvKiBjb21wbGV0ZSBzcGxpdCBydW5uaW5nIGludG8gbmV4dCBmcmFtZT8KKwkgKiBnaXZlbiBGU1ROIHN1cHBvcnQsIHdlIGNvdWxkIHNvbWV0aW1lcyBjaGVjay4uLgorCSAqLworCWlmICh1ZnJhbWUgPj0gOCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIDgwJSBwZXJpb2RpYyA9PSAxMDAgdXNlYy91ZnJhbWUgYXZhaWxhYmxlCisJICogY29udmVydCAidXNlY3Mgd2UgbmVlZCIgdG8gIm1heCBhbHJlYWR5IGNsYWltZWQiIAorCSAqLworCXVzZWNzID0gMTAwIC0gdXNlY3M7CisKKwkvKiB3ZSAia25vdyIgMiBhbmQgNCB1ZnJhbWUgaW50ZXJ2YWxzIHdlcmUgcmVqZWN0ZWQ7IHNvCisJICogZm9yIHBlcmlvZCAwLCBjaGVjayBfZXZlcnlfIG1pY3JvZnJhbWUgaW4gdGhlIHNjaGVkdWxlLgorCSAqLworCWlmICh1bmxpa2VseSAocGVyaW9kID09IDApKSB7CisJCWRvIHsKKwkJCWZvciAodWZyYW1lID0gMDsgdWZyYW1lIDwgNzsgdWZyYW1lKyspIHsKKwkJCQljbGFpbWVkID0gcGVyaW9kaWNfdXNlY3MgKGVoY2ksIGZyYW1lLCB1ZnJhbWUpOworCQkJCWlmIChjbGFpbWVkID4gdXNlY3MpCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9IHdoaWxlICgoZnJhbWUgKz0gMSkgPCBlaGNpLT5wZXJpb2RpY19zaXplKTsKKworCS8qIGp1c3QgY2hlY2sgdGhlIHNwZWNpZmllZCB1ZnJhbWUsIGF0IHRoYXQgcGVyaW9kICovCisJfSBlbHNlIHsKKwkJZG8geworCQkJY2xhaW1lZCA9IHBlcmlvZGljX3VzZWNzIChlaGNpLCBmcmFtZSwgdWZyYW1lKTsKKwkJCWlmIChjbGFpbWVkID4gdXNlY3MpCisJCQkJcmV0dXJuIDA7CisJCX0gd2hpbGUgKChmcmFtZSArPSBwZXJpb2QpIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZSk7CisJfQorCisJLy8gc3VjY2VzcyEKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja19pbnRyX3NjaGVkdWxlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLCAKKwl1bnNpZ25lZAkJZnJhbWUsCisJdW5zaWduZWQJCXVmcmFtZSwKKwljb25zdCBzdHJ1Y3QgZWhjaV9xaAkqcWgsCisJX19sZTMyCQkJKmNfbWFza3AKKykKK3sKKyAgICAJaW50CQlyZXR2YWwgPSAtRU5PU1BDOworCXU4CQltYXNrOworCisJaWYgKHFoLT5jX3VzZWNzICYmIHVmcmFtZSA+PSA2KQkJLyogRlNUTiB0ZXJyaXRvcnk/ICovCisJCWdvdG8gZG9uZTsKKworCWlmICghY2hlY2tfcGVyaW9kIChlaGNpLCBmcmFtZSwgdWZyYW1lLCBxaC0+cGVyaW9kLCBxaC0+dXNlY3MpKQorCQlnb3RvIGRvbmU7CisJaWYgKCFxaC0+Y191c2VjcykgeworCQlyZXR2YWwgPSAwOworCQkqY19tYXNrcCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhpcyB0dCdzIGJ1ZmZlciBpcyBhbHNvIGF2YWlsYWJsZSBmb3IgQ1NQTElUcy4KKwkgKiBXZSBwZXNzaW1pemUgYSBiaXQ7IHByb2JhYmx5IHRoZSB0eXBpY2FsIGZ1bGwgc3BlZWQgY2FzZQorCSAqIGRvZXNuJ3QgbmVlZCB0aGUgc2Vjb25kIENTUExJVC4KKwkgKiAKKwkgKiBOT1RFOiAgYm90aCBTUExJVCBhbmQgQ1NQTElUIGNvdWxkIGJlIGNoZWNrZWQgaW4ganVzdAorCSAqIG9uZSBzbWFydCBwYXNzLi4uCisJICovCisJbWFzayA9IDB4MDMgPDwgKHVmcmFtZSArIHFoLT5nYXBfdWYpOworCSpjX21hc2twID0gY3B1X3RvX2xlMzIgKG1hc2sgPDwgOCk7CisKKwltYXNrIHw9IDEgPDwgdWZyYW1lOworCWlmICh0dF9ub19jb2xsaXNpb24gKGVoY2ksIHFoLT5wZXJpb2QsIHFoLT5kZXYsIGZyYW1lLCBtYXNrKSkgeworCQlpZiAoIWNoZWNrX3BlcmlvZCAoZWhjaSwgZnJhbWUsIHVmcmFtZSArIHFoLT5nYXBfdWYgKyAxLAorCQkJCQlxaC0+cGVyaW9kLCBxaC0+Y191c2VjcykpCisJCQlnb3RvIGRvbmU7CisJCWlmICghY2hlY2tfcGVyaW9kIChlaGNpLCBmcmFtZSwgdWZyYW1lICsgcWgtPmdhcF91ZiwKKwkJCQkJcWgtPnBlcmlvZCwgcWgtPmNfdXNlY3MpKQorCQkJZ290byBkb25lOworCQlyZXR2YWwgPSAwOworCX0KK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogImZpcnN0IGZpdCIgc2NoZWR1bGluZyBwb2xpY3kgdXNlZCB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAorICogb3Igd2hlbiB0aGUgcHJldmlvdXMgc2NoZWR1bGUgc2xvdCBjYW4ndCBiZSByZS11c2VkLgorICovCitzdGF0aWMgaW50IHFoX3NjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwlpbnQgCQlzdGF0dXM7CisJdW5zaWduZWQJdWZyYW1lOworCV9fbGUzMgkJY19tYXNrOworCXVuc2lnbmVkCWZyYW1lOwkJLyogMC4uKHFoLT5wZXJpb2QgLSAxKSwgb3IgTk9fRlJBTUUgKi8KKworCXFoX3JlZnJlc2goZWhjaSwgcWgpOworCXFoLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORDsKKwlmcmFtZSA9IHFoLT5zdGFydDsKKworCS8qIHJldXNlIHRoZSBwcmV2aW91cyBzY2hlZHVsZSBzbG90cywgaWYgd2UgY2FuICovCisJaWYgKGZyYW1lIDwgcWgtPnBlcmlvZCkgeworCQl1ZnJhbWUgPSBmZnMgKGxlMzJfdG9fY3B1cCAoJnFoLT5od19pbmZvMikgJiAweDAwZmYpOworCQlzdGF0dXMgPSBjaGVja19pbnRyX3NjaGVkdWxlIChlaGNpLCBmcmFtZSwgLS11ZnJhbWUsCisJCQkJcWgsICZjX21hc2spOworCX0gZWxzZSB7CisJCXVmcmFtZSA9IDA7CisJCWNfbWFzayA9IDA7CisJCXN0YXR1cyA9IC1FTk9TUEM7CisJfQorCisJLyogZWxzZSBzY2FuIHRoZSBzY2hlZHVsZSB0byBmaW5kIGEgZ3JvdXAgb2Ygc2xvdHMgc3VjaCB0aGF0IGFsbAorCSAqIHVmcmFtZXMgaGF2ZSBlbm91Z2ggcGVyaW9kaWMgYmFuZHdpZHRoIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoc3RhdHVzKSB7CisJCS8qICJub3JtYWwiIGNhc2UsIHVmcmFtaW5nIGZsZXhpYmxlIGV4Y2VwdCB3aXRoIHNwbGl0cyAqLworCQlpZiAocWgtPnBlcmlvZCkgeworCQkJZnJhbWUgPSBxaC0+cGVyaW9kIC0gMTsKKwkJCWRvIHsKKwkJCQlmb3IgKHVmcmFtZSA9IDA7IHVmcmFtZSA8IDg7IHVmcmFtZSsrKSB7CisJCQkJCXN0YXR1cyA9IGNoZWNrX2ludHJfc2NoZWR1bGUgKGVoY2ksCisJCQkJCQkJZnJhbWUsIHVmcmFtZSwgcWgsCisJCQkJCQkJJmNfbWFzayk7CisJCQkJCWlmIChzdGF0dXMgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gd2hpbGUgKHN0YXR1cyAmJiBmcmFtZS0tKTsKKworCQkvKiBxaC0+cGVyaW9kID09IDAgbWVhbnMgZXZlcnkgdWZyYW1lICovCisJCX0gZWxzZSB7CisJCQlmcmFtZSA9IDA7CisJCQlzdGF0dXMgPSBjaGVja19pbnRyX3NjaGVkdWxlIChlaGNpLCAwLCAwLCBxaCwgJmNfbWFzayk7CisJCX0KKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZG9uZTsKKwkJcWgtPnN0YXJ0ID0gZnJhbWU7CisKKwkJLyogcmVzZXQgUy1mcmFtZSBhbmQgKG1heWJlKSBDLWZyYW1lIG1hc2tzICovCisJCXFoLT5od19pbmZvMiAmPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHhmZmZmKTsKKwkJcWgtPmh3X2luZm8yIHw9IHFoLT5wZXJpb2QKKwkJCT8gY3B1X3RvX2xlMzIgKDEgPDwgdWZyYW1lKQorCQkJOiBfX2NvbnN0YW50X2NwdV90b19sZTMyICgweGZmKTsKKwkJcWgtPmh3X2luZm8yIHw9IGNfbWFzazsKKwl9IGVsc2UKKwkJZWhjaV9kYmcgKGVoY2ksICJyZXVzZWQgcWggJXAgc2NoZWR1bGVcbiIsIHFoKTsKKworCS8qIHN0dWZmIGludG8gdGhlIHBlcmlvZGljIHNjaGVkdWxlICovCisgCXN0YXR1cyA9IHFoX2xpbmtfcGVyaW9kaWMgKGVoY2ksIHFoKTsKK2RvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBpbnRyX3N1Ym1pdCAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QsCisJaW50CQkJbWVtX2ZsYWdzCispIHsKKwl1bnNpZ25lZAkJZXBudW07CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IGVoY2lfcWgJCSpxaDsKKwlpbnQJCQlzdGF0dXMgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQJZW1wdHk7CisKKwkvKiBnZXQgZW5kcG9pbnQgYW5kIHRyYW5zZmVyL3NjaGVkdWxlIGRhdGEgKi8KKwllcG51bSA9IGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGdldCBxaCBhbmQgZm9yY2UgYW55IHNjaGVkdWxpbmcgZXJyb3JzICovCisJSU5JVF9MSVNUX0hFQUQgKCZlbXB0eSk7CisJcWggPSBxaF9hcHBlbmRfdGRzIChlaGNpLCB1cmIsICZlbXB0eSwgZXBudW0sICZlcC0+aGNwcml2KTsKKwlpZiAocWggPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfSURMRSkgeworCQlpZiAoKHN0YXR1cyA9IHFoX3NjaGVkdWxlIChlaGNpLCBxaCkpICE9IDApCisJCQlnb3RvIGRvbmU7CisJfQorCisJLyogdGhlbiBxdWV1ZSB0aGUgdXJiJ3MgdGRzIHRvIHRoZSBxaCAqLworCXFoID0gcWhfYXBwZW5kX3RkcyAoZWhjaSwgdXJiLCBxdGRfbGlzdCwgZXBudW0sICZlcC0+aGNwcml2KTsKKwlCVUdfT04gKHFoID09IE5VTEwpOworCisJLyogLi4uIHVwZGF0ZSB1c2JmcyBwZXJpb2RpYyBzdGF0cyAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcysrOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJaWYgKHN0YXR1cykKKwkJcXRkX2xpc3RfZnJlZSAoZWhjaSwgdXJiLCBxdGRfbGlzdCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBlaGNpX2lzb19zdHJlYW0gb3BzIHdvcmsgd2l0aCBib3RoIElURCBhbmQgU0lURCAqLworCitzdGF0aWMgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqCitpc29fc3RyZWFtX2FsbG9jIChpbnQgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKnN0cmVhbTsKKworCXN0cmVhbSA9IGttYWxsb2Moc2l6ZW9mICpzdHJlYW0sIG1lbV9mbGFncyk7CisJaWYgKGxpa2VseSAoc3RyZWFtICE9IE5VTEwpKSB7CisJCW1lbXNldCAoc3RyZWFtLCAwLCBzaXplb2YoKnN0cmVhbSkpOworCQlJTklUX0xJU1RfSEVBRCgmc3RyZWFtLT50ZF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJnN0cmVhbS0+ZnJlZV9saXN0KTsKKwkJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IC0xOworCQlzdHJlYW0tPnJlZmNvdW50ID0gMTsKKwl9CisJcmV0dXJuIHN0cmVhbTsKK30KKworc3RhdGljIHZvaWQKK2lzb19zdHJlYW1faW5pdCAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0sCisJc3RydWN0IHVzYl9kZXZpY2UJKmRldiwKKwlpbnQJCQlwaXBlLAorCXVuc2lnbmVkCQlpbnRlcnZhbAorKQoreworCXN0YXRpYyBjb25zdCB1OCBzbWFza19vdXQgW10gPSB7IDB4MDEsIDB4MDMsIDB4MDcsIDB4MGYsIDB4MWYsIDB4M2YgfTsKKworCXUzMgkJCWJ1ZjE7CisJdW5zaWduZWQJCWVwbnVtLCBtYXhwOworCWludAkJCWlzX2lucHV0OworCWxvbmcJCQliYW5kd2lkdGg7CisKKwkvKgorCSAqIHRoaXMgbWlnaHQgYmUgYSAiaGlnaCBiYW5kd2lkdGgiIGhpZ2hzcGVlZCBlbmRwb2ludCwKKwkgKiBhcyBlbmNvZGVkIGluIHRoZSBlcCBkZXNjcmlwdG9yJ3Mgd01heFBhY2tldCBmaWVsZAorCSAqLworCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludCAocGlwZSk7CisJaXNfaW5wdXQgPSB1c2JfcGlwZWluIChwaXBlKSA/IFVTQl9ESVJfSU4gOiAwOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgIWlzX2lucHV0KTsKKwlpZiAoaXNfaW5wdXQpIHsKKwkJYnVmMSA9ICgxIDw8IDExKTsKKwl9IGVsc2UgeworCQlidWYxID0gMDsKKwl9CisKKwkvKiBrbm93cyBhYm91dCBJVEQgdnMgU0lURCAqLworCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCXVuc2lnbmVkIG11bHRpID0gaGJfbXVsdChtYXhwKTsKKworCQlzdHJlYW0tPmhpZ2hzcGVlZCA9IDE7CisKKwkJbWF4cCA9IG1heF9wYWNrZXQobWF4cCk7CisJCWJ1ZjEgfD0gbWF4cDsKKwkJbWF4cCAqPSBtdWx0aTsKKworCQlzdHJlYW0tPmJ1ZjAgPSBjcHVfdG9fbGUzMiAoKGVwbnVtIDw8IDgpIHwgZGV2LT5kZXZudW0pOworCQlzdHJlYW0tPmJ1ZjEgPSBjcHVfdG9fbGUzMiAoYnVmMSk7CisJCXN0cmVhbS0+YnVmMiA9IGNwdV90b19sZTMyIChtdWx0aSk7CisKKwkJLyogdXNiZnMgd2FudHMgdG8gcmVwb3J0IHRoZSBhdmVyYWdlIHVzZWNzIHBlciBmcmFtZSB0aWVkIHVwCisJCSAqIHdoZW4gdHJhbnNmZXJzIG9uIHRoaXMgZW5kcG9pbnQgYXJlIHNjaGVkdWxlZCAuLi4KKwkJICovCisJCXN0cmVhbS0+dXNlY3MgPSBIU19VU0VDU19JU08gKG1heHApOworCQliYW5kd2lkdGggPSBzdHJlYW0tPnVzZWNzICogODsKKwkJYmFuZHdpZHRoIC89IDEgPDwgKGludGVydmFsIC0gMSk7CisKKwl9IGVsc2UgeworCQl1MzIJCWFkZHI7CisKKwkJYWRkciA9IGRldi0+dHRwb3J0IDw8IDI0OworCQlpZiAoIWVoY2lfaXNfVERJKGVoY2kpCisJCQkJfHwgKGRldi0+dHQtPmh1YiAhPQorCQkJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1YikpCisJCQlhZGRyIHw9IGRldi0+dHQtPmh1Yi0+ZGV2bnVtIDw8IDE2OworCQlhZGRyIHw9IGVwbnVtIDw8IDg7CisJCWFkZHIgfD0gZGV2LT5kZXZudW07CisJCXN0cmVhbS0+dXNlY3MgPSBIU19VU0VDU19JU08gKG1heHApOworCQlpZiAoaXNfaW5wdXQpIHsKKwkJCXUzMgl0bXA7CisKKwkJCWFkZHIgfD0gMSA8PCAzMTsKKwkJCXN0cmVhbS0+Y191c2VjcyA9IHN0cmVhbS0+dXNlY3M7CisJCQlzdHJlYW0tPnVzZWNzID0gSFNfVVNFQ1NfSVNPICgxKTsKKwkJCXN0cmVhbS0+cmF3X21hc2sgPSAxOworCisJCQkvKiBwZXNzaW1pc3RpYyBjLW1hc2sgKi8KKwkJCXRtcCA9IHVzYl9jYWxjX2J1c190aW1lIChVU0JfU1BFRURfRlVMTCwgMSwgMCwgbWF4cCkKKwkJCQkJLyAoMTI1ICogMTAwMCk7CisJCQlzdHJlYW0tPnJhd19tYXNrIHw9IDMgPDwgKHRtcCArIDkpOworCQl9IGVsc2UKKwkJCXN0cmVhbS0+cmF3X21hc2sgPSBzbWFza19vdXQgW21heHAgLyAxODhdOworCQliYW5kd2lkdGggPSBzdHJlYW0tPnVzZWNzICsgc3RyZWFtLT5jX3VzZWNzOworCQliYW5kd2lkdGggLz0gMSA8PCAoaW50ZXJ2YWwgKyAyKTsKKworCQkvKiBzdHJlYW0tPnNwbGl0cyBnZXRzIGNyZWF0ZWQgZnJvbSByYXdfbWFzayBsYXRlciAqLworCQlzdHJlYW0tPmFkZHJlc3MgPSBjcHVfdG9fbGUzMiAoYWRkcik7CisJfQorCXN0cmVhbS0+YmFuZHdpZHRoID0gYmFuZHdpZHRoOworCisJc3RyZWFtLT51ZGV2ID0gZGV2OworCisJc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzID0gaXNfaW5wdXQgfCBlcG51bTsKKwlzdHJlYW0tPmludGVydmFsID0gaW50ZXJ2YWw7CisJc3RyZWFtLT5tYXhwID0gbWF4cDsKK30KKworc3RhdGljIHZvaWQKK2lzb19zdHJlYW1fcHV0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqc3RyZWFtKQoreworCXN0cmVhbS0+cmVmY291bnQtLTsKKworCS8qIGZyZWUgd2hlbmV2ZXIganVzdCBhIGRldi0+ZXAgcmVmZXJlbmNlIHJlbWFpbnMuCisJICogbm90IGxpa2UgYSBRSCAtLSBubyBwZXJzaXN0ZW50IHN0YXRlICh0b2dnbGUsIGhhbHQpCisJICovCisJaWYgKHN0cmVhbS0+cmVmY291bnQgPT0gMSkgeworCQlpbnQJCWlzX2luOworCisJCS8vIEJVR19PTiAoIWxpc3RfZW1wdHkoJnN0cmVhbS0+dGRfbGlzdCkpOworCisJCXdoaWxlICghbGlzdF9lbXB0eSAoJnN0cmVhbS0+ZnJlZV9saXN0KSkgeworCQkJc3RydWN0IGxpc3RfaGVhZAkqZW50cnk7CisKKwkJCWVudHJ5ID0gc3RyZWFtLT5mcmVlX2xpc3QubmV4dDsKKwkJCWxpc3RfZGVsIChlbnRyeSk7CisKKwkJCS8qIGtub3dzIGFib3V0IElURCB2cyBTSVREICovCisJCQlpZiAoc3RyZWFtLT5oaWdoc3BlZWQpIHsKKwkJCQlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CisKKwkJCQlpdGQgPSBsaXN0X2VudHJ5IChlbnRyeSwgc3RydWN0IGVoY2lfaXRkLAorCQkJCQkJaXRkX2xpc3QpOworCQkJCWRtYV9wb29sX2ZyZWUgKGVoY2ktPml0ZF9wb29sLCBpdGQsCisJCQkJCQlpdGQtPml0ZF9kbWEpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkOworCisJCQkJc2l0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9zaXRkLAorCQkJCQkJc2l0ZF9saXN0KTsKKwkJCQlkbWFfcG9vbF9mcmVlIChlaGNpLT5zaXRkX3Bvb2wsIHNpdGQsCisJCQkJCQlzaXRkLT5zaXRkX2RtYSk7CisJCQl9CisJCX0KKworCQlpc19pbiA9IChzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/IDB4MTAgOiAwOworCQlzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJj0gMHgwZjsKKwkJc3RyZWFtLT5lcC0+aGNwcml2ID0gTlVMTDsKKworCQlpZiAoc3RyZWFtLT5yZXNjaGVkdWxlZCkgeworCQkJZWhjaV9pbmZvIChlaGNpLCAiZXAlZCVzLWlzbyByZXNjaGVkdWxlZCAiCisJCQkJIiVsdSB0aW1lcyBpbiAlbHUgc2Vjb25kc1xuIiwKKwkJCQlzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MsIGlzX2luID8gImluIiA6ICJvdXQiLAorCQkJCXN0cmVhbS0+cmVzY2hlZHVsZWQsCisJCQkJKChqaWZmaWVzIC0gc3RyZWFtLT5zdGFydCkvSFopCisJCQkJKTsKKwkJfQorCisJCWtmcmVlKHN0cmVhbSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKgoraXNvX3N0cmVhbV9nZXQgKHN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKnN0cmVhbSkKK3sKKwlpZiAobGlrZWx5IChzdHJlYW0gIT0gTlVMTCkpCisJCXN0cmVhbS0+cmVmY291bnQrKzsKKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqCitpc29fc3RyZWFtX2ZpbmQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkCQllcG51bTsKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW07CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKTsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQllcCA9IHVyYi0+ZGV2LT5lcF9pbltlcG51bV07CisJZWxzZQorCQllcCA9IHVyYi0+ZGV2LT5lcF9vdXRbZXBudW1dOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJc3RyZWFtID0gZXAtPmhjcHJpdjsKKworCWlmICh1bmxpa2VseSAoc3RyZWFtID09IE5VTEwpKSB7CisJCXN0cmVhbSA9IGlzb19zdHJlYW1fYWxsb2MoR0ZQX0FUT01JQyk7CisJCWlmIChsaWtlbHkgKHN0cmVhbSAhPSBOVUxMKSkgeworCQkJLyogZGV2LT5lcCBvd25zIHRoZSBpbml0aWFsIHJlZmNvdW50ICovCisJCQllcC0+aGNwcml2ID0gc3RyZWFtOworCQkJc3RyZWFtLT5lcCA9IGVwOworCQkJaXNvX3N0cmVhbV9pbml0KGVoY2ksIHN0cmVhbSwgdXJiLT5kZXYsIHVyYi0+cGlwZSwKKwkJCQkJdXJiLT5pbnRlcnZhbCk7CisJCX0KKworCS8qIGlmIGRldi0+ZXAgW2VwbnVtXSBpcyBhIFFILCBpbmZvMS5tYXhwYWNrZXQgaXMgbm9uemVybyAqLworCX0gZWxzZSBpZiAodW5saWtlbHkgKHN0cmVhbS0+aHdfaW5mbzEgIT0gMCkpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJkZXYgJXMgZXAlZCVzLCBub3QgaXNvPz9cbiIsCisJCQl1cmItPmRldi0+ZGV2cGF0aCwgZXBudW0sCisJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIpOworCQlzdHJlYW0gPSBOVUxMOworCX0KKworCS8qIGNhbGxlciBndWFyYW50ZWVzIGFuIGV2ZW50dWFsIG1hdGNoaW5nIGlzb19zdHJlYW1fcHV0ICovCisJc3RyZWFtID0gaXNvX3N0cmVhbV9nZXQgKHN0cmVhbSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzdHJlYW07Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGVoY2lfaXNvX3NjaGVkIG9wcyBjYW4gYmUgSVRELW9ubHkgb3IgU0lURC1vbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9pc29fc2NoZWQgKgoraXNvX3NjaGVkX2FsbG9jICh1bnNpZ25lZCBwYWNrZXRzLCBpbnQgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkOworCWludAkJCXNpemUgPSBzaXplb2YgKmlzb19zY2hlZDsKKworCXNpemUgKz0gcGFja2V0cyAqIHNpemVvZiAoc3RydWN0IGVoY2lfaXNvX3BhY2tldCk7CisJaXNvX3NjaGVkID0ga21hbGxvYyAoc2l6ZSwgbWVtX2ZsYWdzKTsKKwlpZiAobGlrZWx5IChpc29fc2NoZWQgIT0gTlVMTCkpIHsKKwkJbWVtc2V0KGlzb19zY2hlZCwgMCwgc2l6ZSk7CisJCUlOSVRfTElTVF9IRUFEICgmaXNvX3NjaGVkLT50ZF9saXN0KTsKKwl9CisJcmV0dXJuIGlzb19zY2hlZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpdGRfc2NoZWRfaW5pdCAoCisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQsCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCB1cmIJCSp1cmIKKykKK3sKKwl1bnNpZ25lZAlpOworCWRtYV9hZGRyX3QJZG1hID0gdXJiLT50cmFuc2Zlcl9kbWE7CisKKwkvKiBob3cgbWFueSB1ZnJhbWVzIGFyZSBuZWVkZWQgZm9yIHRoZXNlIHRyYW5zZmVycyAqLworCWlzb19zY2hlZC0+c3BhbiA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMgKiBzdHJlYW0tPmludGVydmFsOworCisJLyogZmlndXJlIG91dCBwZXItdWZyYW1lIGl0ZCBmaWVsZHMgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyCisJICogd2hlbiB3ZSBmaXQgbmV3IGl0ZHMgaW50byB0aGUgc2NoZWR1bGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CSp1ZnJhbWUgPSAmaXNvX3NjaGVkLT5wYWNrZXQgW2ldOworCQl1bnNpZ25lZAkJbGVuZ3RoOworCQlkbWFfYWRkcl90CQlidWY7CisJCXUzMgkJCXRyYW5zOworCisJCWxlbmd0aCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2ldLmxlbmd0aDsKKwkJYnVmID0gZG1hICsgdXJiLT5pc29fZnJhbWVfZGVzYyBbaV0ub2Zmc2V0OworCisJCXRyYW5zID0gRUhDSV9JU09DX0FDVElWRTsKKwkJdHJhbnMgfD0gYnVmICYgMHgwZmZmOworCQlpZiAodW5saWtlbHkgKCgoaSArIDEpID09IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpKQorCQkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19JTlRFUlJVUFQpKQorCQkJdHJhbnMgfD0gRUhDSV9JVERfSU9DOworCQl0cmFucyB8PSBsZW5ndGggPDwgMTY7CisJCXVmcmFtZS0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUzMiAodHJhbnMpOworCisJCS8qIG1pZ2h0IG5lZWQgdG8gY3Jvc3MgYSBidWZmZXIgcGFnZSB3aXRoaW4gYSB0ZCAqLworCQl1ZnJhbWUtPmJ1ZnAgPSAoYnVmICYgfih1NjQpMHgwZmZmKTsKKwkJYnVmICs9IGxlbmd0aDsKKwkJaWYgKHVubGlrZWx5ICgodWZyYW1lLT5idWZwICE9IChidWYgJiB+KHU2NCkweDBmZmYpKSkpCisJCQl1ZnJhbWUtPmNyb3NzID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc29fc2NoZWRfZnJlZSAoCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkCispCit7CisJaWYgKCFpc29fc2NoZWQpCisJCXJldHVybjsKKwkvLyBjYWxsZXIgbXVzdCBob2xkIGVoY2ktPmxvY2shCisJbGlzdF9zcGxpY2UgKCZpc29fc2NoZWQtPnRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7CisJa2ZyZWUgKGlzb19zY2hlZCk7Cit9CisKK3N0YXRpYyBpbnQKK2l0ZF91cmJfdHJhbnNhY3Rpb24gKAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJbWVtX2ZsYWdzCispCit7CisJc3RydWN0IGVoY2lfaXRkCQkqaXRkOworCWRtYV9hZGRyX3QJCWl0ZF9kbWE7CisJaW50CQkJaTsKKwl1bnNpZ25lZAkJbnVtX2l0ZHM7CisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSpzY2hlZDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNjaGVkID0gaXNvX3NjaGVkX2FsbG9jICh1cmItPm51bWJlcl9vZl9wYWNrZXRzLCBtZW1fZmxhZ3MpOworCWlmICh1bmxpa2VseSAoc2NoZWQgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaXRkX3NjaGVkX2luaXQgKHNjaGVkLCBzdHJlYW0sIHVyYik7CisKKwlpZiAodXJiLT5pbnRlcnZhbCA8IDgpCisJCW51bV9pdGRzID0gMSArIChzY2hlZC0+c3BhbiArIDcpIC8gODsKKwllbHNlCisJCW51bV9pdGRzID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKworCS8qIGFsbG9jYXRlL2luaXQgSVREcyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBudW1faXRkczsgaSsrKSB7CisKKwkJLyogZnJlZV9saXN0Lm5leHQgbWlnaHQgYmUgY2FjaGUtaG90IC4uLiBidXQgbWF5YmUKKwkJICogdGhlIEhDIGNhY2hlcyBpdCB0b28uIGF2b2lkIHRoYXQgaXNzdWUgZm9yIG5vdy4KKwkJICovCisKKwkJLyogcHJlZmVyIHByZXZpb3VzbHktYWxsb2NhdGVkIGl0ZHMgKi8KKwkJaWYgKGxpa2VseSAoIWxpc3RfZW1wdHkoJnN0cmVhbS0+ZnJlZV9saXN0KSkpIHsKKwkJCWl0ZCA9IGxpc3RfZW50cnkgKHN0cmVhbS0+ZnJlZV9saXN0LnByZXYsCisJCQkJCSBzdHJ1Y3QgZWhjaV9pdGQsIGl0ZF9saXN0KTsKKwkJCWxpc3RfZGVsICgmaXRkLT5pdGRfbGlzdCk7CisJCQlpdGRfZG1hID0gaXRkLT5pdGRfZG1hOworCQl9IGVsc2UKKwkJCWl0ZCA9IE5VTEw7CisKKwkJaWYgKCFpdGQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJCQlpdGQgPSBkbWFfcG9vbF9hbGxvYyAoZWhjaS0+aXRkX3Bvb2wsIG1lbV9mbGFncywKKwkJCQkJJml0ZF9kbWEpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJCX0KKworCQlpZiAodW5saWtlbHkgKE5VTEwgPT0gaXRkKSkgeworCQkJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgc2NoZWQpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldCAoaXRkLCAwLCBzaXplb2YgKml0ZCk7CisJCWl0ZC0+aXRkX2RtYSA9IGl0ZF9kbWE7CisJCWxpc3RfYWRkICgmaXRkLT5pdGRfbGlzdCwgJnNjaGVkLT50ZF9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIHRlbXBvcmFyaWx5IHN0b3JlIHNjaGVkdWxlIGluZm8gaW4gaGNwcml2ICovCisJdXJiLT5oY3ByaXYgPSBzY2hlZDsKKwl1cmItPmVycm9yX2NvdW50ID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBpbnQKK2l0ZF9zbG90X29rICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXUzMgkJCW1vZCwKKwl1MzIJCQl1ZnJhbWUsCisJdTgJCQl1c2VjcywKKwl1MzIJCQlwZXJpb2QKKykKK3sKKwl1ZnJhbWUgJT0gcGVyaW9kOworCWRvIHsKKwkJLyogY2FuJ3QgY29tbWl0IG1vcmUgdGhhbiA4MCUgcGVyaW9kaWMgPT0gMTAwIHVzZWMgKi8KKwkJaWYgKHBlcmlvZGljX3VzZWNzIChlaGNpLCB1ZnJhbWUgPj4gMywgdWZyYW1lICYgMHg3KQorCQkJCT4gKDEwMCAtIHVzZWNzKSkKKwkJCXJldHVybiAwOworCisJCS8qIHdlIGtub3cgdXJiLT5pbnRlcnZhbCBpcyAyXk4gdWZyYW1lcyAqLworCQl1ZnJhbWUgKz0gcGVyaW9kOworCX0gd2hpbGUgKHVmcmFtZSA8IG1vZCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzaXRkX3Nsb3Rfb2sgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJdTMyCQkJbW9kLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwl1MzIJCQl1ZnJhbWUsCisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSpzY2hlZCwKKwl1MzIJCQlwZXJpb2RfdWZyYW1lcworKQoreworCXUzMgkJCW1hc2ssIHRtcDsKKwl1MzIJCQlmcmFtZSwgdWY7CisKKwltYXNrID0gc3RyZWFtLT5yYXdfbWFzayA8PCAodWZyYW1lICYgNyk7CisKKwkvKiBmb3IgSU4sIGRvbid0IHdyYXAgQ1NQTElUIGludG8gdGhlIG5leHQgZnJhbWUgKi8KKwlpZiAobWFzayAmIH4weGZmZmYpCisJCXJldHVybiAwOworCisJLyogdGhpcyBtdWx0aS1wYXNzIGxvZ2ljIGlzIHNpbXBsZSwgYnV0IHBlcmZvcm1hbmNlIG1heQorCSAqIHN1ZmZlciB3aGVuIHRoZSBzY2hlZHVsZSBkYXRhIGlzbid0IGNhY2hlZC4KKwkgKi8KKworCS8qIGNoZWNrIGJhbmR3aWR0aCAqLworCXVmcmFtZSAlPSBwZXJpb2RfdWZyYW1lczsKKwlkbyB7CisJCXUzMgkJbWF4X3VzZWQ7CisKKwkJZnJhbWUgPSB1ZnJhbWUgPj4gMzsKKwkJdWYgPSB1ZnJhbWUgJiA3OworCisJCS8qIHR0IG11c3QgYmUgaWRsZSBmb3Igc3RhcnQocyksIGFueSBnYXAsIGFuZCBjc3BsaXQuCisJCSAqIGFzc3VtZSBzY2hlZHVsaW5nIHNsb3AgbGVhdmVzIDEwKyUgZm9yIGNvbnRyb2wvYnVsay4KKwkJICovCisJCWlmICghdHRfbm9fY29sbGlzaW9uIChlaGNpLCBwZXJpb2RfdWZyYW1lcyA8PCAzLAorCQkJCXN0cmVhbS0+dWRldiwgZnJhbWUsIG1hc2spKQorCQkJcmV0dXJuIDA7CisKKwkJLyogY2hlY2sgc3RhcnRzIChPVVQgdXNlcyBtb3JlIHRoYW4gb25lKSAqLworCQltYXhfdXNlZCA9IDEwMCAtIHN0cmVhbS0+dXNlY3M7CisJCWZvciAodG1wID0gc3RyZWFtLT5yYXdfbWFzayAmIDB4ZmY7IHRtcDsgdG1wID4+PSAxLCB1ZisrKSB7CisJCQlpZiAocGVyaW9kaWNfdXNlY3MgKGVoY2ksIGZyYW1lLCB1ZikgPiBtYXhfdXNlZCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIGZvciBJTiwgY2hlY2sgQ1NQTElUICovCisJCWlmIChzdHJlYW0tPmNfdXNlY3MpIHsKKwkJCW1heF91c2VkID0gMTAwIC0gc3RyZWFtLT5jX3VzZWNzOworCQkJZG8geworCQkJCXRtcCA9IDEgPDwgdWY7CisJCQkJdG1wIDw8PSA4OworCQkJCWlmICgoc3RyZWFtLT5yYXdfbWFzayAmIHRtcCkgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHBlcmlvZGljX3VzZWNzIChlaGNpLCBmcmFtZSwgdWYpCisJCQkJCQk+IG1heF91c2VkKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0gd2hpbGUgKCsrdWYgPCA4KTsKKwkJfQorCisJCS8qIHdlIGtub3cgdXJiLT5pbnRlcnZhbCBpcyAyXk4gdWZyYW1lcyAqLworCQl1ZnJhbWUgKz0gcGVyaW9kX3VmcmFtZXM7CisJfSB3aGlsZSAodWZyYW1lIDwgbW9kKTsKKworCXN0cmVhbS0+c3BsaXRzID0gY3B1X3RvX2xlMzIoc3RyZWFtLT5yYXdfbWFzayA8PCAodWZyYW1lICYgNykpOworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBzY2hlZHVsZXIgcGxhbnMgYWxtb3N0IGFzIGZhciBpbnRvIHRoZSBmdXR1cmUgYXMgaXQgaGFzIGFjdHVhbAorICogcGVyaW9kaWMgc2NoZWR1bGUgc2xvdHMuICAoQWZmZWN0ZWQgYnkgVFVORV9GTFMsIHdoaWNoIGRlZmF1bHRzIHRvCisgKiAiYXMgc21hbGwgYXMgcG9zc2libGUiIHRvIGJlIGNhY2hlLWZyaWVuZGxpZXIuKSAgVGhhdCBsaW1pdHMgdGhlIHNpemUKKyAqIHRyYW5zZmVycyB5b3UgY2FuIHN0cmVhbSByZWxpYWJseTsgYXZvaWQgbW9yZSB0aGFuIDY0IG1zZWMgcGVyIHVyYi4KKyAqIEFsc28gYXZvaWQgcXVldWUgZGVwdGhzIG9mIGxlc3MgdGhhbiBlaGNpJ3Mgd29yc3QgaXJxIGxhdGVuY3kgKGFmZmVjdGVkCisgKiBieSB0aGUgcGVyLXVyYiBVUkJfTk9fSU5URVJSVVBUIGhpbnQsIHRoZSBsb2cyX2lycV90aHJlc2ggbW9kdWxlIHBhcmFtZXRlciwKKyAqIGFuZCBvdGhlciBmYWN0b3JzKTsgb3IgbW9yZSB0aGFuIGFib3V0IDIzMCBtc2VjIHRvdGFsIChmb3IgcG9ydGFiaWxpdHksCisgKiBnaXZlbiBFSENJX1RVTkVfRkxTIGFuZCB0aGUgc2xvcCkuICBPciwgd3JpdGUgYSBzbWFydGVyIHNjaGVkdWxlciEKKyAqLworCisjZGVmaW5lIFNDSEVEVUxFX1NMT1AJMTAJLyogZnJhbWVzICovCisKK3N0YXRpYyBpbnQKK2lzb19zdHJlYW1fc2NoZWR1bGUgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0KKykKK3sKKwl1MzIJCQlub3csIHN0YXJ0LCBtYXgsIHBlcmlvZDsKKwlpbnQJCQlzdGF0dXM7CisJdW5zaWduZWQJCW1vZCA9IGVoY2ktPnBlcmlvZGljX3NpemUgPDwgMzsKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKnNjaGVkID0gdXJiLT5oY3ByaXY7CisKKwlpZiAoc2NoZWQtPnNwYW4gPiAobW9kIC0gOCAqIFNDSEVEVUxFX1NMT1ApKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiaXNvIHJlcXVlc3QgJXAgdG9vIGxvbmdcbiIsIHVyYik7CisJCXN0YXR1cyA9IC1FRkJJRzsKKwkJZ290byBmYWlsOworCX0KKworCWlmICgoc3RyZWFtLT5kZXB0aCArIHNjaGVkLT5zcGFuKSA+IG1vZCkgeworCQllaGNpX2RiZyAoZWhjaSwgInJlcXVlc3QgJXAgd291bGQgb3ZlcmZsb3cgKCVkKyVkPiVkKVxuIiwKKwkJCXVyYiwgc3RyZWFtLT5kZXB0aCwgc2NoZWQtPnNwYW4sIG1vZCk7CisJCXN0YXR1cyA9IC1FRkJJRzsKKwkJZ290byBmYWlsOworCX0KKworCW5vdyA9IHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpICUgbW9kOworCisJLyogd2hlbidzIHRoZSBsYXN0IHVmcmFtZSB0aGlzIHVyYiBjb3VsZCBzdGFydD8gKi8KKwltYXggPSBub3cgKyBtb2Q7CisKKwkvKiB0eXBpY2FsIGNhc2U6IHJldXNlIGN1cnJlbnQgc2NoZWR1bGUuIHN0cmVhbSBpcyBzdGlsbCBhY3RpdmUsCisJICogYW5kIG5vIGdhcHMgZnJvbSBob3N0IGZhbGxpbmcgYmVoaW5kIChpcnEgZGVsYXlzIGV0YykKKwkgKi8KKwlpZiAobGlrZWx5ICghbGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CisJCXN0YXJ0ID0gc3RyZWFtLT5uZXh0X3VmcmFtZTsKKwkJaWYgKHN0YXJ0IDwgbm93KQorCQkJc3RhcnQgKz0gbW9kOworCQlpZiAobGlrZWx5ICgoc3RhcnQgKyBzY2hlZC0+c3BhbikgPCBtYXgpKQorCQkJZ290byByZWFkeTsKKwkJLyogZWxzZSBmZWxsIGJlaGluZDsgc29tZWRheSwgdHJ5IHRvIHJlc2NoZWR1bGUgKi8KKwkJc3RhdHVzID0gLUVMMk5TWU5DOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogbmVlZCB0byBzY2hlZHVsZTsgd2hlbidzIHRoZSBuZXh0ICh1KWZyYW1lIHdlIGNvdWxkIHN0YXJ0PworCSAqIHRoaXMgaXMgYmlnZ2VyIHRoYW4gZWhjaS0+aV90aHJlc2ggYWxsb3dzOyBzY2hlZHVsaW5nIGl0c2VsZgorCSAqIGlzbid0IGZyZWUsIHRoZSBzbG9wIHNob3VsZCBoYW5kbGUgcmVhc29uYWJseSBzbG93IGNwdXMuICBpdAorCSAqIGNhbiBhbHNvIGhlbHAgaGlnaCBiYW5kd2lkdGggaWYgdGhlIGRtYSBhbmQgaXJxIGxvYWRzIGRvbid0CisJICoganVtcCB1bnRpbCBhZnRlciB0aGUgcXVldWUgaXMgcHJpbWVkLgorCSAqLworCXN0YXJ0ID0gU0NIRURVTEVfU0xPUCAqIDggKyAobm93ICYgfjB4MDcpOworCXN0YXJ0ICU9IG1vZDsKKwlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQ7CisKKwkvKiBOT1RFOiAgYXNzdW1lcyBVUkJfSVNPX0FTQVAsIHRvIGxpbWl0IGNvbXBsZXhpdHkvYnVncyAqLworCisJcGVyaW9kID0gdXJiLT5pbnRlcnZhbDsKKwlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQorCQlwZXJpb2QgPDw9IDM7CisKKwkvKiBmaW5kIGEgdWZyYW1lIHNsb3Qgd2l0aCBlbm91Z2ggYmFuZHdpZHRoICovCisJZm9yICg7IHN0YXJ0IDwgKHN0cmVhbS0+bmV4dF91ZnJhbWUgKyBwZXJpb2QpOyBzdGFydCsrKSB7CisJCWludAkJZW5vdWdoX3NwYWNlOworCisJCS8qIGNoZWNrIHNjaGVkdWxlOiBlbm91Z2ggc3BhY2U/ICovCisJCWlmIChzdHJlYW0tPmhpZ2hzcGVlZCkKKwkJCWVub3VnaF9zcGFjZSA9IGl0ZF9zbG90X29rIChlaGNpLCBtb2QsIHN0YXJ0LAorCQkJCQlzdHJlYW0tPnVzZWNzLCBwZXJpb2QpOworCQllbHNlIHsKKwkJCWlmICgoc3RhcnQgJSA4KSA+PSA2KQorCQkJCWNvbnRpbnVlOworCQkJZW5vdWdoX3NwYWNlID0gc2l0ZF9zbG90X29rIChlaGNpLCBtb2QsIHN0cmVhbSwKKwkJCQkJc3RhcnQsIHNjaGVkLCBwZXJpb2QpOworCQl9CisKKwkJLyogc2NoZWR1bGUgaXQgaGVyZSBpZiB0aGVyZSdzIGVub3VnaCBiYW5kd2lkdGggKi8KKwkJaWYgKGVub3VnaF9zcGFjZSkgeworCQkJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IHN0YXJ0ICUgbW9kOworCQkJZ290byByZWFkeTsKKwkJfQorCX0KKworCS8qIG5vIHJvb20gaW4gdGhlIHNjaGVkdWxlICovCisJZWhjaV9kYmcgKGVoY2ksICJpc28gJXNzY2hlZCBmdWxsICVwIChub3cgJWQgbWF4ICVkKVxuIiwKKwkJbGlzdF9lbXB0eSAoJnN0cmVhbS0+dGRfbGlzdCkgPyAiIiA6ICJyZSIsCisJCXVyYiwgbm93LCBtYXgpOworCXN0YXR1cyA9IC1FTk9TUEM7CisKK2ZhaWw6CisJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgc2NoZWQpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlyZXR1cm4gc3RhdHVzOworCityZWFkeToKKwkvKiByZXBvcnQgaGlnaCBzcGVlZCBzdGFydCBpbiB1ZnJhbWVzOyBmdWxsIHNwZWVkLCBpbiBmcmFtZXMgKi8KKwl1cmItPnN0YXJ0X2ZyYW1lID0gc3RyZWFtLT5uZXh0X3VmcmFtZTsKKwlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQorCQl1cmItPnN0YXJ0X2ZyYW1lID4+PSAzOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2l0ZF9pbml0IChzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtICpzdHJlYW0sIHN0cnVjdCBlaGNpX2l0ZCAqaXRkKQoreworCWludCBpOworCisJaXRkLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORDsKKwlpdGQtPmh3X2J1ZnAgWzBdID0gc3RyZWFtLT5idWYwOworCWl0ZC0+aHdfYnVmcCBbMV0gPSBzdHJlYW0tPmJ1ZjE7CisJaXRkLT5od19idWZwIFsyXSA9IHN0cmVhbS0+YnVmMjsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWl0ZC0+aW5kZXhbaV0gPSAtMTsKKworCS8qIEFsbCBvdGhlciBmaWVsZHMgYXJlIGZpbGxlZCB3aGVuIHNjaGVkdWxpbmcgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitpdGRfcGF0Y2ggKAorCXN0cnVjdCBlaGNpX2l0ZAkJKml0ZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCwKKwl1bnNpZ25lZAkJaW5kZXgsCisJdTE2CQkJdWZyYW1lLAorCWludAkJCWZpcnN0CispCit7CisJc3RydWN0IGVoY2lfaXNvX3BhY2tldAkqdWYgPSAmaXNvX3NjaGVkLT5wYWNrZXQgW2luZGV4XTsKKwl1bnNpZ25lZAkJcGcgPSBpdGQtPnBnOworCisJLy8gQlVHX09OIChwZyA9PSA2ICYmIHVmLT5jcm9zcyk7CisKKwl1ZnJhbWUgJj0gMHgwNzsKKwlpdGQtPmluZGV4IFt1ZnJhbWVdID0gaW5kZXg7CisKKwlpdGQtPmh3X3RyYW5zYWN0aW9uIFt1ZnJhbWVdID0gdWYtPnRyYW5zYWN0aW9uOworCWl0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0gfD0gY3B1X3RvX2xlMzIgKHBnIDw8IDEyKTsKKwlpdGQtPmh3X2J1ZnAgW3BnXSB8PSBjcHVfdG9fbGUzMiAodWYtPmJ1ZnAgJiB+KHUzMikwKTsKKwlpdGQtPmh3X2J1ZnBfaGkgW3BnXSB8PSBjcHVfdG9fbGUzMiAoKHUzMikodWYtPmJ1ZnAgPj4gMzIpKTsKKworCS8qIGlzb19mcmFtZV9kZXNjW10ub2Zmc2V0IG11c3QgYmUgc3RyaWN0bHkgaW5jcmVhc2luZyAqLworCWlmICh1bmxpa2VseSAoIWZpcnN0ICYmIHVmLT5jcm9zcykpIHsKKwkJdTY0CWJ1ZnAgPSB1Zi0+YnVmcCArIDQwOTY7CisJCWl0ZC0+cGcgPSArK3BnOworCQlpdGQtPmh3X2J1ZnAgW3BnXSB8PSBjcHVfdG9fbGUzMiAoYnVmcCAmIH4odTMyKTApOworCQlpdGQtPmh3X2J1ZnBfaGkgW3BnXSB8PSBjcHVfdG9fbGUzMiAoKHUzMikoYnVmcCA+PiAzMikpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitpdGRfbGluayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBmcmFtZSwgc3RydWN0IGVoY2lfaXRkICppdGQpCit7CisJLyogYWx3YXlzIHByZXBlbmQgSVREL1NJVEQgLi4uIG9ubHkgUUggdHJlZSBpcyBvcmRlci1zZW5zaXRpdmUgKi8KKwlpdGQtPml0ZF9uZXh0ID0gZWhjaS0+cHNoYWRvdyBbZnJhbWVdOworCWl0ZC0+aHdfbmV4dCA9IGVoY2ktPnBlcmlvZGljIFtmcmFtZV07CisJZWhjaS0+cHNoYWRvdyBbZnJhbWVdLml0ZCA9IGl0ZDsKKwlpdGQtPmZyYW1lID0gZnJhbWU7CisJd21iICgpOworCWVoY2ktPnBlcmlvZGljIFtmcmFtZV0gPSBjcHVfdG9fbGUzMiAoaXRkLT5pdGRfZG1hKSB8IFFfVFlQRV9JVEQ7Cit9CisKKy8qIGZpdCB1cmIncyBpdGRzIGludG8gdGhlIHNlbGVjdGVkIHNjaGVkdWxlIHNsb3Q7IGFjdGl2YXRlIGFzIG5lZWRlZCAqLworc3RhdGljIGludAoraXRkX2xpbmtfdXJiICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdW5zaWduZWQJCW1vZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0KKykKK3sKKwlpbnQJCQlwYWNrZXQsIGZpcnN0ID0gMTsKKwl1bnNpZ25lZAkJbmV4dF91ZnJhbWUsIHVmcmFtZSwgZnJhbWU7CisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CisKKwluZXh0X3VmcmFtZSA9IHN0cmVhbS0+bmV4dF91ZnJhbWUgJSBtb2Q7CisKKwlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CisJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJCQkrPSBzdHJlYW0tPmJhbmR3aWR0aDsKKwkJZWhjaV92ZGJnIChlaGNpLAorCQkJInNjaGVkdWxlIGRldnAgJXMgZXAlZCVzLWlzbyBwZXJpb2QgJWQgc3RhcnQgJWQuJWRcbiIsCisJCQl1cmItPmRldi0+ZGV2cGF0aCwgc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiwKKwkJCShzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJCXVyYi0+aW50ZXJ2YWwsCisJCQluZXh0X3VmcmFtZSA+PiAzLCBuZXh0X3VmcmFtZSAmIDB4Nyk7CisJCXN0cmVhbS0+c3RhcnQgPSBqaWZmaWVzOworCX0KKwllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKys7CisKKwkvKiBmaWxsIGlURHMgdWZyYW1lIGJ5IHVmcmFtZSAqLworCWZvciAocGFja2V0ID0gMCwgaXRkID0gTlVMTDsgcGFja2V0IDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgKSB7CisJCWlmIChpdGQgPT0gTlVMTCkgeworCQkJLyogQVNTRVJUOiAgd2UgaGF2ZSBhbGwgbmVjZXNzYXJ5IGl0ZHMgKi8KKwkJCS8vIEJVR19PTiAobGlzdF9lbXB0eSAoJmlzb19zY2hlZC0+dGRfbGlzdCkpOworCisJCQkvKiBBU1NFUlQ6ICBubyBpdGRzIGZvciB0aGlzIGVuZHBvaW50IGluIHRoaXMgdWZyYW1lICovCisKKwkJCWl0ZCA9IGxpc3RfZW50cnkgKGlzb19zY2hlZC0+dGRfbGlzdC5uZXh0LAorCQkJCQlzdHJ1Y3QgZWhjaV9pdGQsIGl0ZF9saXN0KTsKKwkJCWxpc3RfbW92ZV90YWlsICgmaXRkLT5pdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CisJCQlpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOworCQkJaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwkJCWZpcnN0ID0gMTsKKwkJCWl0ZF9pbml0IChzdHJlYW0sIGl0ZCk7CisJCX0KKworCQl1ZnJhbWUgPSBuZXh0X3VmcmFtZSAmIDB4MDc7CisJCWZyYW1lID0gbmV4dF91ZnJhbWUgPj4gMzsKKworCQlpdGQtPnVzZWNzIFt1ZnJhbWVdID0gc3RyZWFtLT51c2VjczsKKwkJaXRkX3BhdGNoIChpdGQsIGlzb19zY2hlZCwgcGFja2V0LCB1ZnJhbWUsIGZpcnN0KTsKKwkJZmlyc3QgPSAwOworCisJCW5leHRfdWZyYW1lICs9IHN0cmVhbS0+aW50ZXJ2YWw7CisJCXN0cmVhbS0+ZGVwdGggKz0gc3RyZWFtLT5pbnRlcnZhbDsKKwkJbmV4dF91ZnJhbWUgJT0gbW9kOworCQlwYWNrZXQrKzsKKworCQkvKiBsaW5rIGNvbXBsZXRlZCBpdGRzIGludG8gdGhlIHNjaGVkdWxlICovCisJCWlmICgoKG5leHRfdWZyYW1lID4+IDMpICE9IGZyYW1lKQorCQkJCXx8IHBhY2tldCA9PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB7CisJCQlpdGRfbGluayAoZWhjaSwgZnJhbWUgJSBlaGNpLT5wZXJpb2RpY19zaXplLCBpdGQpOworCQkJaXRkID0gTlVMTDsKKwkJfQorCX0KKwlzdHJlYW0tPm5leHRfdWZyYW1lID0gbmV4dF91ZnJhbWU7CisKKwkvKiBkb24ndCBuZWVkIHRoYXQgc2NoZWR1bGUgZGF0YSBhbnkgbW9yZSAqLworCWlzb19zY2hlZF9mcmVlIChzdHJlYW0sIGlzb19zY2hlZCk7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7CisJaWYgKHVubGlrZWx5ICghZWhjaS0+cGVyaW9kaWNfc2NoZWQrKykpCisJCXJldHVybiBlbmFibGVfcGVyaW9kaWMgKGVoY2kpOworCXJldHVybiAwOworfQorCisjZGVmaW5lCUlTT19FUlJTIChFSENJX0lTT0NfQlVGX0VSUiB8IEVIQ0lfSVNPQ19CQUJCTEUgfCBFSENJX0lTT0NfWEFDVEVSUikKKworc3RhdGljIHVuc2lnbmVkCitpdGRfY29tcGxldGUgKAorCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9pdGQJKml0ZCwKKwlzdHJ1Y3QgcHRfcmVncwkqcmVncworKSB7CisJc3RydWN0IHVyYgkJCQkqdXJiID0gaXRkLT51cmI7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IJKmRlc2M7CisJdTMyCQkJCQl0OworCXVuc2lnbmVkCQkJCXVmcmFtZTsKKwlpbnQJCQkJCXVyYl9pbmRleCA9IC0xOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JCQkqc3RyZWFtID0gaXRkLT5zdHJlYW07CisJc3RydWN0IHVzYl9kZXZpY2UJCQkqZGV2OworCisJLyogZm9yIGVhY2ggdWZyYW1lIHdpdGggYSBwYWNrZXQgKi8KKwlmb3IgKHVmcmFtZSA9IDA7IHVmcmFtZSA8IDg7IHVmcmFtZSsrKSB7CisJCWlmIChsaWtlbHkgKGl0ZC0+aW5kZXhbdWZyYW1lXSA9PSAtMSkpCisJCQljb250aW51ZTsKKwkJdXJiX2luZGV4ID0gaXRkLT5pbmRleFt1ZnJhbWVdOworCQlkZXNjID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2MgW3VyYl9pbmRleF07CisKKwkJdCA9IGxlMzJfdG9fY3B1cCAoJml0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0pOworCQlpdGQtPmh3X3RyYW5zYWN0aW9uIFt1ZnJhbWVdID0gMDsKKwkJc3RyZWFtLT5kZXB0aCAtPSBzdHJlYW0tPmludGVydmFsOworCisJCS8qIHJlcG9ydCB0cmFuc2ZlciBzdGF0dXMgKi8KKwkJaWYgKHVubGlrZWx5ICh0ICYgSVNPX0VSUlMpKSB7CisJCQl1cmItPmVycm9yX2NvdW50Kys7CisJCQlpZiAodCAmIEVIQ0lfSVNPQ19CVUZfRVJSKQorCQkJCWRlc2MtPnN0YXR1cyA9IHVzYl9waXBlaW4gKHVyYi0+cGlwZSkKKwkJCQkJPyAtRU5PU1IgIC8qIGhjIGNvdWxkbid0IHJlYWQgKi8KKwkJCQkJOiAtRUNPTU07IC8qIGhjIGNvdWxkbid0IHdyaXRlICovCisJCQllbHNlIGlmICh0ICYgRUhDSV9JU09DX0JBQkJMRSkKKwkJCQlkZXNjLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJZWxzZSAvKiAodCAmIEVIQ0lfSVNPQ19YQUNURVJSKSAqLworCQkJCWRlc2MtPnN0YXR1cyA9IC1FUFJPVE87CisKKwkJCS8qIEhDIG5lZWQgbm90IHVwZGF0ZSBsZW5ndGggd2l0aCB0aGlzIGVycm9yICovCisJCQlpZiAoISh0ICYgRUhDSV9JU09DX0JBQkJMRSkpCisJCQkJZGVzYy0+YWN0dWFsX2xlbmd0aCA9IEVIQ0lfSVREX0xFTkdUSCAodCk7CisJCX0gZWxzZSBpZiAobGlrZWx5ICgodCAmIEVIQ0lfSVNPQ19BQ1RJVkUpID09IDApKSB7CisJCQlkZXNjLT5zdGF0dXMgPSAwOworCQkJZGVzYy0+YWN0dWFsX2xlbmd0aCA9IEVIQ0lfSVREX0xFTkdUSCAodCk7CisJCX0KKwl9CisKKwl1c2JfcHV0X3VyYiAodXJiKTsKKwlpdGQtPnVyYiA9IE5VTEw7CisJaXRkLT5zdHJlYW0gPSBOVUxMOworCWxpc3RfbW92ZSAoJml0ZC0+aXRkX2xpc3QsICZzdHJlYW0tPmZyZWVfbGlzdCk7CisJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisKKwkvKiBoYW5kbGUgY29tcGxldGlvbiBub3c/ICovCisJaWYgKGxpa2VseSAoKHVyYl9pbmRleCArIDEpICE9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpKQorCQlyZXR1cm4gMDsKKworCS8qIEFTU0VSVDogaXQncyByZWFsbHkgdGhlIGxhc3QgaXRkIGZvciB0aGlzIHVyYgorCWxpc3RfZm9yX2VhY2hfZW50cnkgKGl0ZCwgJnN0cmVhbS0+dGRfbGlzdCwgaXRkX2xpc3QpCisJCUJVR19PTiAoaXRkLT51cmIgPT0gdXJiKTsKKwkgKi8KKworCS8qIGdpdmUgdXJiIGJhY2sgdG8gdGhlIGRyaXZlciAuLi4gY2FuIGJlIG91dC1vZi1vcmRlciAqLworCWRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisJZWhjaV91cmJfZG9uZSAoZWhjaSwgdXJiLCByZWdzKTsKKwl1cmIgPSBOVUxMOworCisJLyogZGVmZXIgc3RvcHBpbmcgc2NoZWR1bGU7IGNvbXBsZXRpb24gY2FuIHN1Ym1pdCAqLworCWVoY2ktPnBlcmlvZGljX3NjaGVkLS07CisJaWYgKHVubGlrZWx5ICghZWhjaS0+cGVyaW9kaWNfc2NoZWQpKQorCQkodm9pZCkgZGlzYWJsZV9wZXJpb2RpYyAoZWhjaSk7CisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOworCisJaWYgKHVubGlrZWx5IChsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSkpIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZAorCQkJCS09IHN0cmVhbS0+YmFuZHdpZHRoOworCQllaGNpX3ZkYmcgKGVoY2ksCisJCQkiZGVzY2hlZHVsZSBkZXZwICVzIGVwJWQlcy1pc29cbiIsCisJCQlkZXYtPmRldnBhdGgsIHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYsCisJCQkoc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIpOworCX0KKwlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKwl1c2JfcHV0X2RldiAoZGV2KTsKKworCXJldHVybiAxOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGl0ZF9zdWJtaXQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtOworCisJLyogR2V0IGlzb19zdHJlYW0gaGVhZCAqLworCXN0cmVhbSA9IGlzb19zdHJlYW1fZmluZCAoZWhjaSwgdXJiKTsKKwlpZiAodW5saWtlbHkgKHN0cmVhbSA9PSBOVUxMKSkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGdldCBpc28gc3RyZWFtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICh1bmxpa2VseSAodXJiLT5pbnRlcnZhbCAhPSBzdHJlYW0tPmludGVydmFsKSkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGNoYW5nZSBpc28gaW50ZXJ2YWwgJWQgLS0+ICVkXG4iLAorCQkJc3RyZWFtLT5pbnRlcnZhbCwgdXJiLT5pbnRlcnZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKyNpZmRlZiBFSENJX1VSQl9UUkFDRQorCWVoY2lfZGJnIChlaGNpLAorCQkiJXMgJXMgdXJiICVwIGVwJWQlcyBsZW4gJWQsICVkIHBrdHMgJWQgdWZyYW1lcyBbJXBdXG4iLAorCQlfX0ZVTkNUSU9OX18sIHVyYi0+ZGV2LT5kZXZwYXRoLCB1cmIsCisJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgdXJiLT5pbnRlcnZhbCwKKwkJc3RyZWFtKTsKKyNlbmRpZgorCisJLyogYWxsb2NhdGUgSVREcyB3L28gbG9ja2luZyBhbnl0aGluZyAqLworCXN0YXR1cyA9IGl0ZF91cmJfdHJhbnNhY3Rpb24gKHN0cmVhbSwgZWhjaSwgdXJiLCBtZW1fZmxhZ3MpOworCWlmICh1bmxpa2VseSAoc3RhdHVzIDwgMCkpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYW4ndCBpbml0IGl0ZHNcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc2NoZWR1bGUgLi4uIG5lZWQgdG8gbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGlzb19zdHJlYW1fc2NoZWR1bGUgKGVoY2ksIHVyYiwgc3RyZWFtKTsKKyAJaWYgKGxpa2VseSAoc3RhdHVzID09IDApKQorCQlpdGRfbGlua191cmIgKGVoY2ksIHVyYiwgZWhjaS0+cGVyaW9kaWNfc2l6ZSA8PCAzLCBzdHJlYW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKK2RvbmU6CisJaWYgKHVubGlrZWx5IChzdGF0dXMgPCAwKSkKKwkJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2lmZGVmIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqICJTcGxpdCBJU08gVERzIiAuLi4gdXNlZCBmb3IgVVNCIDEuMSBkZXZpY2VzIGdvaW5nIHRocm91Z2ggdGhlCisgKiBUVHMgaW4gVVNCIDIuMCBodWJzLiAgVGhlc2UgbmVlZCBtaWNyb2ZyYW1lIHNjaGVkdWxpbmcuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzaXRkX3NjaGVkX2luaXQgKAorCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgdXJiCQkqdXJiCispCit7CisJdW5zaWduZWQJaTsKKwlkbWFfYWRkcl90CWRtYSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCisJLyogaG93IG1hbnkgZnJhbWVzIGFyZSBuZWVkZWQgZm9yIHRoZXNlIHRyYW5zZmVycyAqLworCWlzb19zY2hlZC0+c3BhbiA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMgKiBzdHJlYW0tPmludGVydmFsOworCisJLyogZmlndXJlIG91dCBwZXItZnJhbWUgc2l0ZCBmaWVsZHMgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyCisJICogd2hlbiB3ZSBmaXQgbmV3IHNpdGRzIGludG8gdGhlIHNjaGVkdWxlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJc3RydWN0IGVoY2lfaXNvX3BhY2tldAkqcGFja2V0ID0gJmlzb19zY2hlZC0+cGFja2V0IFtpXTsKKwkJdW5zaWduZWQJCWxlbmd0aDsKKwkJZG1hX2FkZHJfdAkJYnVmOworCQl1MzIJCQl0cmFuczsKKworCQlsZW5ndGggPSB1cmItPmlzb19mcmFtZV9kZXNjIFtpXS5sZW5ndGggJiAweDAzZmY7CisJCWJ1ZiA9IGRtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2ldLm9mZnNldDsKKworCQl0cmFucyA9IFNJVERfU1RTX0FDVElWRTsKKwkJaWYgKCgoaSArIDEpID09IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpCisJCQkJJiYgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0lOVEVSUlVQVCkpCisJCQl0cmFucyB8PSBTSVREX0lPQzsKKwkJdHJhbnMgfD0gbGVuZ3RoIDw8IDE2OworCQlwYWNrZXQtPnRyYW5zYWN0aW9uID0gY3B1X3RvX2xlMzIgKHRyYW5zKTsKKworCQkvKiBtaWdodCBuZWVkIHRvIGNyb3NzIGEgYnVmZmVyIHBhZ2Ugd2l0aGluIGEgdGQgKi8KKwkJcGFja2V0LT5idWZwID0gYnVmOworCQlwYWNrZXQtPmJ1ZjEgPSAoYnVmICsgbGVuZ3RoKSAmIH4weDBmZmY7CisJCWlmIChwYWNrZXQtPmJ1ZjEgIT0gKGJ1ZiAmIH4odTY0KTB4MGZmZikpCisJCQlwYWNrZXQtPmNyb3NzID0gMTsKKworCQkvKiBPVVQgdXNlcyBtdWx0aXBsZSBzdGFydC1zcGxpdHMgKi8gCisJCWlmIChzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJY29udGludWU7CisJCWxlbmd0aCA9IChsZW5ndGggKyAxODcpIC8gMTg4OworCQlpZiAobGVuZ3RoID4gMSkgLyogQkVHSU4gdnMgQUxMICovCisJCQlsZW5ndGggfD0gMSA8PCAzOworCQlwYWNrZXQtPmJ1ZjEgfD0gbGVuZ3RoOworCX0KK30KKworc3RhdGljIGludAorc2l0ZF91cmJfdHJhbnNhY3Rpb24gKAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJbWVtX2ZsYWdzCispCit7CisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZDsKKwlkbWFfYWRkcl90CQlzaXRkX2RtYTsKKwlpbnQJCQlpOworCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaXNvX3NjaGVkID0gaXNvX3NjaGVkX2FsbG9jICh1cmItPm51bWJlcl9vZl9wYWNrZXRzLCBtZW1fZmxhZ3MpOworCWlmIChpc29fc2NoZWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaXRkX3NjaGVkX2luaXQgKGlzb19zY2hlZCwgc3RyZWFtLCB1cmIpOworCisJLyogYWxsb2NhdGUvaW5pdCBzSVREcyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKworCQkvKiBOT1RFOiAgZm9yIG5vdywgd2UgZG9uJ3QgdHJ5IHRvIGhhbmRsZSB3cmFwYXJvdW5kIGNhc2VzCisJCSAqIGZvciBJTiAodXNpbmcgc2l0ZC0+aHdfYmFja3BvaW50ZXIsIGxpa2UgYSBGU1ROKSwgd2hpY2gKKwkJICogbWVhbnMgd2UgbmV2ZXIgbmVlZCB0d28gc2l0ZHMgZm9yIGZ1bGwgc3BlZWQgcGFja2V0cy4KKwkJICovCisKKwkJLyogZnJlZV9saXN0Lm5leHQgbWlnaHQgYmUgY2FjaGUtaG90IC4uLiBidXQgbWF5YmUKKwkJICogdGhlIEhDIGNhY2hlcyBpdCB0b28uIGF2b2lkIHRoYXQgaXNzdWUgZm9yIG5vdy4KKwkJICovCisKKwkJLyogcHJlZmVyIHByZXZpb3VzbHktYWxsb2NhdGVkIHNpdGRzICovCisJCWlmICghbGlzdF9lbXB0eSgmc3RyZWFtLT5mcmVlX2xpc3QpKSB7CisJCQlzaXRkID0gbGlzdF9lbnRyeSAoc3RyZWFtLT5mcmVlX2xpc3QucHJldiwKKwkJCQkJIHN0cnVjdCBlaGNpX3NpdGQsIHNpdGRfbGlzdCk7CisJCQlsaXN0X2RlbCAoJnNpdGQtPnNpdGRfbGlzdCk7CisJCQlzaXRkX2RtYSA9IHNpdGQtPnNpdGRfZG1hOworCQl9IGVsc2UKKwkJCXNpdGQgPSBOVUxMOworCisJCWlmICghc2l0ZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCXNpdGQgPSBkbWFfcG9vbF9hbGxvYyAoZWhjaS0+c2l0ZF9wb29sLCBtZW1fZmxhZ3MsCisJCQkJCSZzaXRkX2RtYSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJfQorCisJCWlmICghc2l0ZCkgeworCQkJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgaXNvX3NjaGVkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQgKHNpdGQsIDAsIHNpemVvZiAqc2l0ZCk7CisJCXNpdGQtPnNpdGRfZG1hID0gc2l0ZF9kbWE7CisJCWxpc3RfYWRkICgmc2l0ZC0+c2l0ZF9saXN0LCAmaXNvX3NjaGVkLT50ZF9saXN0KTsKKwl9CisKKwkvKiB0ZW1wb3JhcmlseSBzdG9yZSBzY2hlZHVsZSBpbmZvIGluIGhjcHJpdiAqLworCXVyYi0+aGNwcml2ID0gaXNvX3NjaGVkOworCXVyYi0+ZXJyb3JfY291bnQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzaXRkX3BhdGNoICgKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0sCisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCwKKwl1bnNpZ25lZAkJaW5kZXgKKykKK3sKKwlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CSp1ZiA9ICZpc29fc2NoZWQtPnBhY2tldCBbaW5kZXhdOworCXU2NAkJCWJ1ZnAgPSB1Zi0+YnVmcDsKKworCXNpdGQtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EOworCXNpdGQtPmh3X2Z1bGxzcGVlZF9lcCA9IHN0cmVhbS0+YWRkcmVzczsKKwlzaXRkLT5od191ZnJhbWUgPSBzdHJlYW0tPnNwbGl0czsKKwlzaXRkLT5od19yZXN1bHRzID0gdWYtPnRyYW5zYWN0aW9uOworCXNpdGQtPmh3X2JhY2twb2ludGVyID0gRUhDSV9MSVNUX0VORDsKKworCWJ1ZnAgPSB1Zi0+YnVmcDsKKwlzaXRkLT5od19idWYgWzBdID0gY3B1X3RvX2xlMzIgKGJ1ZnApOworCXNpdGQtPmh3X2J1Zl9oaSBbMF0gPSBjcHVfdG9fbGUzMiAoYnVmcCA+PiAzMik7CisKKwlzaXRkLT5od19idWYgWzFdID0gY3B1X3RvX2xlMzIgKHVmLT5idWYxKTsKKwlpZiAodWYtPmNyb3NzKQorCQlidWZwICs9IDQwOTY7CisJc2l0ZC0+aHdfYnVmX2hpIFsxXSA9IGNwdV90b19sZTMyIChidWZwID4+IDMyKTsKKwlzaXRkLT5pbmRleCA9IGluZGV4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NpdGRfbGluayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBmcmFtZSwgc3RydWN0IGVoY2lfc2l0ZCAqc2l0ZCkKK3sKKwkvKiBub3RlOiBzaXRkIG9yZGVyaW5nIGNvdWxkIG1hdHRlciAoQ1NQTElUIHRoZW4gU1NQTElUKSAqLworCXNpdGQtPnNpdGRfbmV4dCA9IGVoY2ktPnBzaGFkb3cgW2ZyYW1lXTsKKwlzaXRkLT5od19uZXh0ID0gZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwllaGNpLT5wc2hhZG93IFtmcmFtZV0uc2l0ZCA9IHNpdGQ7CisJc2l0ZC0+ZnJhbWUgPSBmcmFtZTsKKwl3bWIgKCk7CisJZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXSA9IGNwdV90b19sZTMyIChzaXRkLT5zaXRkX2RtYSkgfCBRX1RZUEVfU0lURDsKK30KKworLyogZml0IHVyYidzIHNpdGRzIGludG8gdGhlIHNlbGVjdGVkIHNjaGVkdWxlIHNsb3Q7IGFjdGl2YXRlIGFzIG5lZWRlZCAqLworc3RhdGljIGludAorc2l0ZF9saW5rX3VyYiAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXVuc2lnbmVkCQltb2QsCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtCispCit7CisJaW50CQkJcGFja2V0OworCXVuc2lnbmVkCQluZXh0X3VmcmFtZTsKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKnNjaGVkID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZDsKKworCW5leHRfdWZyYW1lID0gc3RyZWFtLT5uZXh0X3VmcmFtZTsKKworCWlmIChsaXN0X2VtcHR5KCZzdHJlYW0tPnRkX2xpc3QpKSB7CisJCS8qIHVzYmZzIGlnbm9yZXMgVFQgYmFuZHdpZHRoICovCisJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJCQkrPSBzdHJlYW0tPmJhbmR3aWR0aDsKKwkJZWhjaV92ZGJnIChlaGNpLAorCQkJInNjaGVkIGRldnAgJXMgZXAlZCVzLWlzbyBbJWRdICVkbXMvJTA0eFxuIiwKKwkJCXVyYi0+ZGV2LT5kZXZwYXRoLCBzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmLAorCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAorCQkJKG5leHRfdWZyYW1lID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZSwKKwkJCXN0cmVhbS0+aW50ZXJ2YWwsIGxlMzJfdG9fY3B1IChzdHJlYW0tPnNwbGl0cykpOworCQlzdHJlYW0tPnN0YXJ0ID0gamlmZmllczsKKwl9CisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrOworCisJLyogZmlsbCBzSVREcyBmcmFtZSBieSBmcmFtZSAqLworCWZvciAocGFja2V0ID0gMCwgc2l0ZCA9IE5VTEw7CisJCQlwYWNrZXQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQkJcGFja2V0KyspIHsKKworCQkvKiBBU1NFUlQ6ICB3ZSBoYXZlIGFsbCBuZWNlc3Nhcnkgc2l0ZHMgKi8KKwkJQlVHX09OIChsaXN0X2VtcHR5ICgmc2NoZWQtPnRkX2xpc3QpKTsKKworCQkvKiBBU1NFUlQ6ICBubyBpdGRzIGZvciB0aGlzIGVuZHBvaW50IGluIHRoaXMgZnJhbWUgKi8KKworCQlzaXRkID0gbGlzdF9lbnRyeSAoc2NoZWQtPnRkX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZWhjaV9zaXRkLCBzaXRkX2xpc3QpOworCQlsaXN0X21vdmVfdGFpbCAoJnNpdGQtPnNpdGRfbGlzdCwgJnN0cmVhbS0+dGRfbGlzdCk7CisJCXNpdGQtPnN0cmVhbSA9IGlzb19zdHJlYW1fZ2V0IChzdHJlYW0pOworCQlzaXRkLT51cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKworCQlzaXRkX3BhdGNoIChzdHJlYW0sIHNpdGQsIHNjaGVkLCBwYWNrZXQpOworCQlzaXRkX2xpbmsgKGVoY2ksIChuZXh0X3VmcmFtZSA+PiAzKSAlIGVoY2ktPnBlcmlvZGljX3NpemUsCisJCQkJc2l0ZCk7CisKKwkJbmV4dF91ZnJhbWUgKz0gc3RyZWFtLT5pbnRlcnZhbCA8PCAzOworCQlzdHJlYW0tPmRlcHRoICs9IHN0cmVhbS0+aW50ZXJ2YWwgPDwgMzsKKwl9CisJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IG5leHRfdWZyYW1lICUgbW9kOworCisJLyogZG9uJ3QgbmVlZCB0aGF0IHNjaGVkdWxlIGRhdGEgYW55IG1vcmUgKi8KKwlpc29fc2NoZWRfZnJlZSAoc3RyZWFtLCBzY2hlZCk7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJdGltZXJfYWN0aW9uIChlaGNpLCBUSU1FUl9JT19XQVRDSERPRyk7CisJaWYgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCsrKQorCQlyZXR1cm4gZW5hYmxlX3BlcmlvZGljIChlaGNpKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlTSVREX0VSUlMgKFNJVERfU1RTX0VSUiB8IFNJVERfU1RTX0RCRSB8IFNJVERfU1RTX0JBQkJMRSBcCisJICAgICAgIAkJCXwgU0lURF9TVFNfWEFDVCB8IFNJVERfU1RTX01NRikKKworc3RhdGljIHVuc2lnbmVkCitzaXRkX2NvbXBsZXRlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCBlaGNpX3NpdGQJKnNpdGQsCisJc3RydWN0IHB0X3JlZ3MJCSpyZWdzCispIHsKKwlzdHJ1Y3QgdXJiCQkJCSp1cmIgPSBzaXRkLT51cmI7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IJKmRlc2M7CisJdTMyCQkJCQl0OworCWludAkJCQkJdXJiX2luZGV4ID0gLTE7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkJCSpzdHJlYW0gPSBzaXRkLT5zdHJlYW07CisJc3RydWN0IHVzYl9kZXZpY2UJCQkqZGV2OworCisJdXJiX2luZGV4ID0gc2l0ZC0+aW5kZXg7CisJZGVzYyA9ICZ1cmItPmlzb19mcmFtZV9kZXNjIFt1cmJfaW5kZXhdOworCXQgPSBsZTMyX3RvX2NwdXAgKCZzaXRkLT5od19yZXN1bHRzKTsKKworCS8qIHJlcG9ydCB0cmFuc2ZlciBzdGF0dXMgKi8KKwlpZiAodCAmIFNJVERfRVJSUykgeworCQl1cmItPmVycm9yX2NvdW50Kys7CisJCWlmICh0ICYgU0lURF9TVFNfREJFKQorCQkJZGVzYy0+c3RhdHVzID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCT8gLUVOT1NSICAvKiBoYyBjb3VsZG4ndCByZWFkICovCisJCQkJOiAtRUNPTU07IC8qIGhjIGNvdWxkbid0IHdyaXRlICovCisJCWVsc2UgaWYgKHQgJiBTSVREX1NUU19CQUJCTEUpCisJCQlkZXNjLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQllbHNlIC8qIFhBQ1QsIE1NRiwgZXRjICovCisJCQlkZXNjLT5zdGF0dXMgPSAtRVBST1RPOworCX0gZWxzZSB7CisJCWRlc2MtPnN0YXR1cyA9IDA7CisJCWRlc2MtPmFjdHVhbF9sZW5ndGggPSBkZXNjLT5sZW5ndGggLSBTSVREX0xFTkdUSCAodCk7CisJfQorCisJdXNiX3B1dF91cmIgKHVyYik7CisJc2l0ZC0+dXJiID0gTlVMTDsKKwlzaXRkLT5zdHJlYW0gPSBOVUxMOworCWxpc3RfbW92ZSAoJnNpdGQtPnNpdGRfbGlzdCwgJnN0cmVhbS0+ZnJlZV9saXN0KTsKKwlzdHJlYW0tPmRlcHRoIC09IHN0cmVhbS0+aW50ZXJ2YWwgPDwgMzsKKwlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKworCS8qIGhhbmRsZSBjb21wbGV0aW9uIG5vdz8gKi8KKwlpZiAoKHVyYl9pbmRleCArIDEpICE9IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpCisJCXJldHVybiAwOworCisJLyogQVNTRVJUOiBpdCdzIHJlYWxseSB0aGUgbGFzdCBzaXRkIGZvciB0aGlzIHVyYgorCWxpc3RfZm9yX2VhY2hfZW50cnkgKHNpdGQsICZzdHJlYW0tPnRkX2xpc3QsIHNpdGRfbGlzdCkKKwkJQlVHX09OIChzaXRkLT51cmIgPT0gdXJiKTsKKwkgKi8KKworCS8qIGdpdmUgdXJiIGJhY2sgdG8gdGhlIGRyaXZlciAqLworCWRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisJZWhjaV91cmJfZG9uZSAoZWhjaSwgdXJiLCByZWdzKTsKKwl1cmIgPSBOVUxMOworCisJLyogZGVmZXIgc3RvcHBpbmcgc2NoZWR1bGU7IGNvbXBsZXRpb24gY2FuIHN1Ym1pdCAqLworCWVoY2ktPnBlcmlvZGljX3NjaGVkLS07CisJaWYgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCkKKwkJKHZvaWQpIGRpc2FibGVfcGVyaW9kaWMgKGVoY2kpOworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKworCWlmIChsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkCisJCQkJLT0gc3RyZWFtLT5iYW5kd2lkdGg7CisJCWVoY2lfdmRiZyAoZWhjaSwKKwkJCSJkZXNjaGVkdWxlIGRldnAgJXMgZXAlZCVzLWlzb1xuIiwKKwkJCWRldi0+ZGV2cGF0aCwgc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiwKKwkJCShzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0Iik7CisJfQorCWlzb19zdHJlYW1fcHV0IChlaGNpLCBzdHJlYW0pOworCXVzYl9wdXRfZGV2IChkZXYpOworCisJcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGludCBzaXRkX3N1Ym1pdCAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW07CisKKwkvKiBHZXQgaXNvX3N0cmVhbSBoZWFkICovCisJc3RyZWFtID0gaXNvX3N0cmVhbV9maW5kIChlaGNpLCB1cmIpOworCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGdldCBpc28gc3RyZWFtXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICh1cmItPmludGVydmFsICE9IHN0cmVhbS0+aW50ZXJ2YWwpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYW4ndCBjaGFuZ2UgaXNvIGludGVydmFsICVkIC0tPiAlZFxuIiwKKwkJCXN0cmVhbS0+aW50ZXJ2YWwsIHVyYi0+aW50ZXJ2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCisjaWZkZWYgRUhDSV9VUkJfVFJBQ0UKKwllaGNpX2RiZyAoZWhjaSwKKwkJInN1Ym1pdCAlcCBkZXYlcyBlcCVkJXMtaXNvIGxlbiAlZFxuIiwKKwkJdXJiLCB1cmItPmRldi0+ZGV2cGF0aCwKKwkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKyNlbmRpZgorCisJLyogYWxsb2NhdGUgU0lURHMgKi8KKwlzdGF0dXMgPSBzaXRkX3VyYl90cmFuc2FjdGlvbiAoc3RyZWFtLCBlaGNpLCB1cmIsIG1lbV9mbGFncyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJjYW4ndCBpbml0IHNpdGRzXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIHNjaGVkdWxlIC4uLiBuZWVkIHRvIGxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBpc29fc3RyZWFtX3NjaGVkdWxlIChlaGNpLCB1cmIsIHN0cmVhbSk7CisgCWlmIChzdGF0dXMgPT0gMCkKKwkJc2l0ZF9saW5rX3VyYiAoZWhjaSwgdXJiLCBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDMsIHN0cmVhbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworZG9uZToKKwlpZiAoc3RhdHVzIDwgMCkKKwkJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQKK3NpdGRfc3VibWl0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwllaGNpX2RiZyAoZWhjaSwgInNwbGl0IGlzbyBzdXBwb3J0IGlzIGRpc2FibGVkXG4iKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorc2l0ZF9jb21wbGV0ZSAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkLAorCXN0cnVjdCBwdF9yZWdzCQkqcmVncworKSB7CisJZWhjaV9lcnIgKGVoY2ksICJzaXRkX2NvbXBsZXRlICVwP1xuIiwgc2l0ZCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBVU0JfRUhDSV9TUExJVF9JU08gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3NjYW5fcGVyaW9kaWMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQJZnJhbWUsIGNsb2NrLCBub3dfdWZyYW1lLCBtb2Q7CisJdW5zaWduZWQJbW9kaWZpZWQ7CisKKwltb2QgPSBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDM7CisKKwkvKgorCSAqIFdoZW4gcnVubmluZywgc2NhbiBmcm9tIGxhc3Qgc2NhbiBwb2ludCB1cCB0byAibm93IgorCSAqIGVsc2UgY2xlYW4gdXAgYnkgc2Nhbm5pbmcgZXZlcnl0aGluZyB0aGF0J3MgbGVmdC4KKwkgKiBUb3VjaGVzIGFzIGZldyBwYWdlcyBhcyBwb3NzaWJsZTogIGNhY2hlLWZyaWVuZGx5LgorCSAqLworCW5vd191ZnJhbWUgPSBlaGNpLT5uZXh0X3VmcmFtZTsKKwlpZiAoSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkKKwkJY2xvY2sgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KTsKKwllbHNlCisJCWNsb2NrID0gbm93X3VmcmFtZSArIG1vZCAtIDE7CisJY2xvY2sgJT0gbW9kOworCisJZm9yICg7OykgeworCQl1bmlvbiBlaGNpX3NoYWRvdwlxLCAqcV9wOworCQlfX2xlMzIJCQl0eXBlLCAqaHdfcDsKKwkJdW5zaWduZWQJCXVmcmFtZXM7CisKKwkJLyogZG9uJ3Qgc2NhbiBwYXN0IHRoZSBsaXZlIHVmcmFtZSAqLworCQlmcmFtZSA9IG5vd191ZnJhbWUgPj4gMzsKKwkJaWYgKGZyYW1lID09IChjbG9jayA+PiAzKSkKKwkJCXVmcmFtZXMgPSBub3dfdWZyYW1lICYgMHgwNzsKKwkJZWxzZSB7CisJCQkvKiBzYWZlIHRvIHNjYW4gdGhlIHdob2xlIGZyYW1lIGF0IG9uY2UgKi8KKwkJCW5vd191ZnJhbWUgfD0gMHgwNzsKKwkJCXVmcmFtZXMgPSA4OworCQl9CisKK3Jlc3RhcnQ6CisJCS8qIHNjYW4gZWFjaCBlbGVtZW50IGluIGZyYW1lJ3MgcXVldWUgZm9yIGNvbXBsZXRpb25zICovCisJCXFfcCA9ICZlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJCWh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwkJcS5wdHIgPSBxX3AtPnB0cjsKKwkJdHlwZSA9IFFfTkVYVF9UWVBFICgqaHdfcCk7CisJCW1vZGlmaWVkID0gMDsKKworCQl3aGlsZSAocS5wdHIgIT0gTlVMTCkgeworCQkJdW5zaWduZWQJCXVmOworCQkJdW5pb24gZWhjaV9zaGFkb3cJdGVtcDsKKwkJCWludAkJCWxpdmU7CisKKwkJCWxpdmUgPSBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpOworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFFfVFlQRV9RSDoKKwkJCQkvKiBoYW5kbGUgYW55IGNvbXBsZXRpb25zICovCisJCQkJdGVtcC5xaCA9IHFoX2dldCAocS5xaCk7CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChxLnFoLT5od19uZXh0KTsKKwkJCQlxID0gcS5xaC0+cWhfbmV4dDsKKwkJCQltb2RpZmllZCA9IHFoX2NvbXBsZXRpb25zIChlaGNpLCB0ZW1wLnFoLCByZWdzKTsKKwkJCQlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKCZ0ZW1wLnFoLT5xdGRfbGlzdCkpKQorCQkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHRlbXAucWgpOworCQkJCXFoX3B1dCAodGVtcC5xaCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFFfVFlQRV9GU1ROOgorCQkJCS8qIGZvciAic2F2ZSBwbGFjZSIgRlNUTnMsIGxvb2sgYXQgUUggZW50cmllcworCQkJCSAqIGluIHRoZSBwcmV2aW91cyBmcmFtZSBmb3IgY29tcGxldGlvbnMuCisJCQkJICovCisJCQkJaWYgKHEuZnN0bi0+aHdfcHJldiAhPSBFSENJX0xJU1RfRU5EKSB7CisJCQkJCWRiZyAoImlnbm9yaW5nIGNvbXBsZXRpb25zIGZyb20gRlNUTnMiKTsKKwkJCQl9CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChxLmZzdG4tPmh3X25leHQpOworCQkJCXEgPSBxLmZzdG4tPmZzdG5fbmV4dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUV9UWVBFX0lURDoKKwkJCQkvKiBza2lwIGl0ZHMgZm9yIGxhdGVyIGluIHRoZSBmcmFtZSAqLworCQkJCXJtYiAoKTsKKwkJCQlmb3IgKHVmID0gbGl2ZSA/IHVmcmFtZXMgOiA4OyB1ZiA8IDg7IHVmKyspIHsKKwkJCQkJaWYgKDAgPT0gKHEuaXRkLT5od190cmFuc2FjdGlvbiBbdWZdCisJCQkJCQkJJiBJVERfQUNUSVZFKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlxX3AgPSAmcS5pdGQtPml0ZF9uZXh0OworCQkJCQlod19wID0gJnEuaXRkLT5od19uZXh0OworCQkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuaXRkLT5od19uZXh0KTsKKwkJCQkJcSA9ICpxX3A7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodWYgIT0gOCkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiB0aGlzIG9uZSdzIHJlYWR5IC4uLiBIQyB3b24ndCBjYWNoZSB0aGUKKwkJCQkgKiBwb2ludGVyIGZvciBtdWNoIGxvbmdlciwgaWYgYXQgYWxsLgorCQkJCSAqLworCQkJCSpxX3AgPSBxLml0ZC0+aXRkX25leHQ7CisJCQkJKmh3X3AgPSBxLml0ZC0+aHdfbmV4dDsKKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuaXRkLT5od19uZXh0KTsKKwkJCQl3bWIoKTsKKwkJCQltb2RpZmllZCA9IGl0ZF9jb21wbGV0ZSAoZWhjaSwgcS5pdGQsIHJlZ3MpOworCQkJCXEgPSAqcV9wOworCQkJCWJyZWFrOworCQkJY2FzZSBRX1RZUEVfU0lURDoKKwkJCQlpZiAoKHEuc2l0ZC0+aHdfcmVzdWx0cyAmIFNJVERfQUNUSVZFKQorCQkJCQkJJiYgbGl2ZSkgeworCQkJCQlxX3AgPSAmcS5zaXRkLT5zaXRkX25leHQ7CisJCQkJCWh3X3AgPSAmcS5zaXRkLT5od19uZXh0OworCQkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuc2l0ZC0+aHdfbmV4dCk7CisJCQkJCXEgPSAqcV9wOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnFfcCA9IHEuc2l0ZC0+c2l0ZF9uZXh0OworCQkJCSpod19wID0gcS5zaXRkLT5od19uZXh0OworCQkJCXR5cGUgPSBRX05FWFRfVFlQRSAocS5zaXRkLT5od19uZXh0KTsKKwkJCQl3bWIoKTsKKwkJCQltb2RpZmllZCA9IHNpdGRfY29tcGxldGUgKGVoY2ksIHEuc2l0ZCwgcmVncyk7CisJCQkJcSA9ICpxX3A7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRiZyAoImNvcnJ1cHQgdHlwZSAlZCBmcmFtZSAlZCBzaGFkb3cgJXAiLAorCQkJCQl0eXBlLCBmcmFtZSwgcS5wdHIpOworCQkJCS8vIEJVRyAoKTsKKwkJCQlxLnB0ciA9IE5VTEw7CisJCQl9CisKKwkJCS8qIGFzc3VtZSBjb21wbGV0aW9uIGNhbGxiYWNrcyBtb2RpZnkgdGhlIHF1ZXVlICovCisJCQlpZiAodW5saWtlbHkgKG1vZGlmaWVkKSkKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKworCQkvKiBzdG9wIHdoZW4gd2UgY2F0Y2ggdXAgdG8gdGhlIEhDICovCisKKwkJLy8gRklYTUU6ICB0aGlzIGFzc3VtZXMgd2Ugd29uJ3QgZ2V0IGxhcHBlZCB3aGVuCisJCS8vIGxhdGVuY2llcyBjbGltYjsgdGhhdCBzaG91bGQgYmUgcmFyZSwgYnV0Li4uCisJCS8vIGRldGVjdCBpdCwgYW5kIGp1c3QgZ28gYWxsIHRoZSB3YXkgYXJvdW5kLgorCQkvLyBGTFIgbWlnaHQgaGVscCBkZXRlY3QgdGhpcyBjYXNlLCBzbyBsb25nIGFzIGxhdGVuY2llcworCQkvLyBkb24ndCBleGNlZWQgcGVyaW9kaWNfc2l6ZSBtc2VjIChkZWZhdWx0IDEuMDI0IHNlYykuCisKKwkJLy8gRklYTUU6ICBsaWtld2lzZSBhc3N1bWVzIEhDIGRvZXNuJ3QgaGFsdCBtaWQtc2NhbgorCisJCWlmIChub3dfdWZyYW1lID09IGNsb2NrKSB7CisJCQl1bnNpZ25lZAlub3c7CisKKwkJCWlmICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkKKwkJCQlicmVhazsKKwkJCWVoY2ktPm5leHRfdWZyYW1lID0gbm93X3VmcmFtZTsKKwkJCW5vdyA9IHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpICUgbW9kOworCQkJaWYgKG5vd191ZnJhbWUgPT0gbm93KQorCQkJCWJyZWFrOworCisJCQkvKiByZXNjYW4gdGhlIHJlc3Qgb2YgdGhpcyBmcmFtZSwgdGhlbiAuLi4gKi8KKwkJCWNsb2NrID0gbm93OworCQl9IGVsc2UgeworCQkJbm93X3VmcmFtZSsrOworCQkJbm93X3VmcmFtZSAlPSBtb2Q7CisJCX0KKwl9IAorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk4OGRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTAsMCArMSw2MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfRUhDSV9IQ0RfSAorI2RlZmluZSBfX0xJTlVYX0VIQ0lfSENEX0gKKworLyogZGVmaW5pdGlvbnMgdXNlZCBmb3IgdGhlIEVIQ0kgZHJpdmVyICovCisKKy8qIHN0YXRpc3RpY3MgY2FuIGJlIGtlcHQgZm9yIGZvciB0dW5pbmcvbW9uaXRvcmluZyAqLworc3RydWN0IGVoY2lfc3RhdHMgeworCS8qIGlycSB1c2FnZSAqLworCXVuc2lnbmVkIGxvbmcJCW5vcm1hbDsKKwl1bnNpZ25lZCBsb25nCQllcnJvcjsKKwl1bnNpZ25lZCBsb25nCQlyZWNsYWltOworCXVuc2lnbmVkIGxvbmcJCWxvc3RfaWFhOworCisJLyogdGVybWluYXRpb24gb2YgdXJicyBmcm9tIGNvcmUgKi8KKwl1bnNpZ25lZCBsb25nCQljb21wbGV0ZTsKKwl1bnNpZ25lZCBsb25nCQl1bmxpbms7Cit9OworCisvKiBlaGNpX2hjZC0+bG9jayBndWFyZHMgc2hhcmVkIGRhdGEgYWdhaW5zdCBvdGhlciBDUFVzOgorICogICBlaGNpX2hjZDoJYXN5bmMsIHJlY2xhaW0sIHBlcmlvZGljIChhbmQgc2hhZG93KSwgLi4uCisgKiAgIHVzYl9ob3N0X2VuZHBvaW50OiBoY3ByaXYKKyAqICAgZWhjaV9xaDoJcWhfbmV4dCwgcXRkX2xpc3QKKyAqICAgZWhjaV9xdGQ6CXF0ZF9saXN0CisgKgorICogQWxzbywgaG9sZCB0aGlzIGxvY2sgd2hlbiB0YWxraW5nIHRvIEhDIHJlZ2lzdGVycyBvcgorICogd2hlbiB1cGRhdGluZyBod18qIGZpZWxkcyBpbiBzaGFyZWQgcWgvcXRkLy4uLiBzdHJ1Y3R1cmVzLgorICovCisKKyNkZWZpbmUJRUhDSV9NQVhfUk9PVF9QT1JUUwkxNQkJLyogc2VlIEhDU19OX1BPUlRTICovCisKK3N0cnVjdCBlaGNpX2hjZCB7CQkJLyogb25lIHBlciBjb250cm9sbGVyICovCisJc3BpbmxvY2tfdAkJbG9jazsKKworCS8qIGFzeW5jIHNjaGVkdWxlIHN1cHBvcnQgKi8KKwlzdHJ1Y3QgZWhjaV9xaAkJKmFzeW5jOworCXN0cnVjdCBlaGNpX3FoCQkqcmVjbGFpbTsKKwl1bnNpZ25lZAkJcmVjbGFpbV9yZWFkeSA6IDE7CisJdW5zaWduZWQJCXNjYW5uaW5nIDogMTsKKworCS8qIHBlcmlvZGljIHNjaGVkdWxlIHN1cHBvcnQgKi8KKyNkZWZpbmUJREVGQVVMVF9JX1REUFMJCTEwMjQJCS8qIHNvbWUgSENzIGNhbiBkbyBsZXNzICovCisJdW5zaWduZWQJCXBlcmlvZGljX3NpemU7CisJX19sZTMyCQkJKnBlcmlvZGljOwkvKiBodyBwZXJpb2RpYyB0YWJsZSAqLworCWRtYV9hZGRyX3QJCXBlcmlvZGljX2RtYTsKKwl1bnNpZ25lZAkJaV90aHJlc2g7CS8qIHVmcmFtZXMgSEMgbWlnaHQgY2FjaGUgKi8KKworCXVuaW9uIGVoY2lfc2hhZG93CSpwc2hhZG93OwkvKiBtaXJyb3IgaHcgcGVyaW9kaWMgdGFibGUgKi8KKwlpbnQJCQluZXh0X3VmcmFtZTsJLyogc2NhbiBwZXJpb2RpYywgc3RhcnQgaGVyZSAqLworCXVuc2lnbmVkCQlwZXJpb2RpY19zY2hlZDsJLyogcGVyaW9kaWMgYWN0aXZpdHkgY291bnQgKi8KKworCS8qIHBlciByb290IGh1YiBwb3J0ICovCisJdW5zaWduZWQgbG9uZwkJcmVzZXRfZG9uZSBbRUhDSV9NQVhfUk9PVF9QT1JUU107CisKKwkvKiBwZXItSEMgbWVtb3J5IHBvb2xzIChjb3VsZCBiZSBwZXItYnVzLCBidXQgLi4uKSAqLworCXN0cnVjdCBkbWFfcG9vbAkJKnFoX3Bvb2w7CS8qIHFoIHBlciBhY3RpdmUgdXJiICovCisJc3RydWN0IGRtYV9wb29sCQkqcXRkX3Bvb2w7CS8qIG9uZSBvciBtb3JlIHBlciBxaCAqLworCXN0cnVjdCBkbWFfcG9vbAkJKml0ZF9wb29sOwkvKiBpdGQgcGVyIGlzbyB1cmIgKi8KKwlzdHJ1Y3QgZG1hX3Bvb2wJCSpzaXRkX3Bvb2w7CS8qIHNpdGQgcGVyIHNwbGl0IGlzbyB1cmIgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0CXdhdGNoZG9nOworCXN0cnVjdCBub3RpZmllcl9ibG9jawlyZWJvb3Rfbm90aWZpZXI7CisJdW5zaWduZWQgbG9uZwkJYWN0aW9uczsKKwl1bnNpZ25lZAkJc3RhbXA7CisJdW5zaWduZWQgbG9uZwkJbmV4dF9zdGF0ZWNoYW5nZTsKKwl1MzIJCQljb21tYW5kOworCisJdW5zaWduZWQJCWlzX3RkaV9yaF90dDoxOwkvKiBUREkgcm9vdGh1YiB3aXRoIFRUICovCisKKwkvKiBnbHVlIHRvIFBDSSBhbmQgSENEIGZyYW1ld29yayAqLworCXN0cnVjdCBlaGNpX2NhcHMgX19pb21lbSAqY2FwczsKKwlzdHJ1Y3QgZWhjaV9yZWdzIF9faW9tZW0gKnJlZ3M7CisJX191MzIJCQloY3NfcGFyYW1zOwkvKiBjYWNoZWQgcmVnaXN0ZXIgY29weSAqLworCisJLyogaXJxIHN0YXRpc3RpY3MgKi8KKyNpZmRlZiBFSENJX1NUQVRTCisJc3RydWN0IGVoY2lfc3RhdHMJc3RhdHM7CisjCWRlZmluZSBDT1VOVCh4KSBkbyB7ICh4KSsrOyB9IHdoaWxlICgwKQorI2Vsc2UKKyMJZGVmaW5lIENPVU5UKHgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCit9OworCisvKiBjb252ZXJ0IGJldHdlZW4gYW4gSENEIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIEVIQ0lfSENEICovIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZWhjaV9oY2QgKmhjZF90b19laGNpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IGVoY2lfaGNkICopIChoY2QtPmhjZF9wcml2KTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKmVoY2lfdG9faGNkIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoKHZvaWQgKikgZWhjaSwgc3RydWN0IHVzYl9oY2QsIGhjZF9wcml2KTsKK30KKworCitlbnVtIGVoY2lfdGltZXJfYWN0aW9uIHsKKwlUSU1FUl9JT19XQVRDSERPRywKKwlUSU1FUl9JQUFfV0FUQ0hET0csCisJVElNRVJfQVNZTkNfU0hSSU5LLAorCVRJTUVSX0FTWU5DX09GRiwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGltZXJfYWN0aW9uX2RvbmUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCit7CisJY2xlYXJfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aW1lcl9hY3Rpb24gKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgeworCQl1bnNpZ25lZCBsb25nIHQ7CisKKwkJc3dpdGNoIChhY3Rpb24pIHsKKwkJY2FzZSBUSU1FUl9JQUFfV0FUQ0hET0c6CisJCQl0ID0gRUhDSV9JQUFfSklGRklFUzsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVSX0lPX1dBVENIRE9HOgorCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVSX0FTWU5DX09GRjoKKwkJCXQgPSBFSENJX0FTWU5DX0pJRkZJRVM7CisJCQlicmVhazsKKwkJLy8gY2FzZSBUSU1FUl9BU1lOQ19TSFJJTks6CisJCWRlZmF1bHQ6CisJCQl0ID0gRUhDSV9TSFJJTktfSklGRklFUzsKKwkJCWJyZWFrOworCQl9CisJCXQgKz0gamlmZmllczsKKwkJLy8gYWxsIHRpbWluZ3MgZXhjZXB0IElBQSB3YXRjaGRvZyBjYW4gYmUgb3ZlcnJpZGRlbi4KKwkJLy8gYXN5bmMgcXVldWUgU0hSSU5LIG9mdGVuIHByZWNlZGVzIElBQS4gIHdoaWxlIGl0J3MgcmVhZHkKKwkJLy8gdG8gZ28gT0ZGIG5laXRoZXIgY2FuIG1hdHRlciwgYW5kIGFmdGVyd2FyZHMgdGhlIElPCisJCS8vIHdhdGNoZG9nIHN0b3BzIHVubGVzcyB0aGVyZSdzIHN0aWxsIHBlcmlvZGljIHRyYWZmaWMuCisJCWlmIChhY3Rpb24gIT0gVElNRVJfSUFBX1dBVENIRE9HCisJCQkJJiYgdCA+IGVoY2ktPndhdGNoZG9nLmV4cGlyZXMKKwkJCQkmJiB0aW1lcl9wZW5kaW5nICgmZWhjaS0+d2F0Y2hkb2cpKQorCQkJcmV0dXJuOworCQltb2RfdGltZXIgKCZlaGNpLT53YXRjaGRvZywgdCk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFSENJIHJlZ2lzdGVyIGludGVyZmFjZSwgY29ycmVzcG9uZHMgdG8gRUhDSSBSZXZpc2lvbiAwLjk1IHNwZWNpZmljYXRpb24gKi8KKworLyogU2VjdGlvbiAyLjIgSG9zdCBDb250cm9sbGVyIENhcGFiaWxpdHkgUmVnaXN0ZXJzICovCitzdHJ1Y3QgZWhjaV9jYXBzIHsKKwkvKiB0aGVzZSBmaWVsZHMgYXJlIHNwZWNpZmllZCBhcyA4IGFuZCAxNiBiaXQgcmVnaXN0ZXJzLAorCSAqIGJ1dCBzb21lIGhvc3RzIGNhbid0IHBlcmZvcm0gOCBvciAxNiBiaXQgUENJIGFjY2Vzc2VzLgorCSAqLworCXUzMgloY19jYXBiYXNlOworI2RlZmluZSBIQ19MRU5HVEgocCkJCSgoKHApPj4wMCkmMHgwMGZmKQkvKiBiaXRzIDc6MCAqLworI2RlZmluZSBIQ19WRVJTSU9OKHApCQkoKChwKT4+MTYpJjB4ZmZmZikJLyogYml0cyAzMToxNiAqLworCXUzMgkJaGNzX3BhcmFtczsgICAgIC8qIEhDU1BBUkFNUyAtIG9mZnNldCAweDQgKi8KKyNkZWZpbmUgSENTX0RFQlVHX1BPUlQocCkJKCgocCk+PjIwKSYweGYpCS8qIGJpdHMgMjM6MjAsIGRlYnVnIHBvcnQ/ICovCisjZGVmaW5lIEhDU19JTkRJQ0FUT1IocCkJKChwKSYoMSA8PCAxNikpCS8qIHRydWU6IGhhcyBwb3J0IGluZGljYXRvcnMgKi8KKyNkZWZpbmUgSENTX05fQ0MocCkJCSgoKHApPj4xMikmMHhmKQkvKiBiaXRzIDE1OjEyLCAjY29tcGFuaW9uIEhDcyAqLworI2RlZmluZSBIQ1NfTl9QQ0MocCkJCSgoKHApPj44KSYweGYpCS8qIGJpdHMgMTE6OCwgcG9ydHMgcGVyIENDICovCisjZGVmaW5lIEhDU19QT1JUUk9VVEVEKHApCSgocCkmKDEgPDwgNykpCS8qIHRydWU6IHBvcnQgcm91dGluZyAqLyAKKyNkZWZpbmUgSENTX1BQQyhwKQkJKChwKSYoMSA8PCA0KSkJLyogdHJ1ZTogcG9ydCBwb3dlciBjb250cm9sICovIAorI2RlZmluZSBIQ1NfTl9QT1JUUyhwKQkJKCgocCk+PjApJjB4ZikJLyogYml0cyAzOjAsIHBvcnRzIG9uIEhDICovCisKKwl1MzIJCWhjY19wYXJhbXM7ICAgICAgLyogSENDUEFSQU1TIC0gb2Zmc2V0IDB4OCAqLworI2RlZmluZSBIQ0NfRVhUX0NBUFMocCkJCSgoKHApPj44KSYweGZmKQkvKiBmb3IgcGNpIGV4dGVuZGVkIGNhcHMgKi8KKyNkZWZpbmUgSENDX0lTT0NfQ0FDSEUocCkgICAgICAgKChwKSYoMSA8PCA3KSkgIC8qIHRydWU6IGNhbiBjYWNoZSBpc29jIGZyYW1lICovCisjZGVmaW5lIEhDQ19JU09DX1RIUkVTKHApICAgICAgICgoKHApPj40KSYweDcpICAvKiBiaXRzIDY6NCwgdWZyYW1lcyBjYWNoZWQgKi8KKyNkZWZpbmUgSENDX0NBTlBBUksocCkJCSgocCkmKDEgPDwgMikpICAvKiB0cnVlOiBjYW4gcGFyayBvbiBhc3luYyBxaCAqLworI2RlZmluZSBIQ0NfUEdNX0ZSQU1FTElTVExFTihwKSAoKHApJigxIDw8IDEpKSAgLyogdHJ1ZTogcGVyaW9kaWNfc2l6ZSBjaGFuZ2VzKi8KKyNkZWZpbmUgSENDXzY0QklUX0FERFIocCkgICAgICAgKChwKSYoMSkpICAgICAgIC8qIHRydWU6IGNhbiB1c2UgNjQtYml0IGFkZHIgKi8KKwl1OAkJcG9ydHJvdXRlIFs4XTsJIC8qIG5pYmJsZXMgZm9yIHJvdXRpbmcgLSBvZmZzZXQgMHhDICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiBTZWN0aW9uIDIuMyBIb3N0IENvbnRyb2xsZXIgT3BlcmF0aW9uYWwgUmVnaXN0ZXJzICovCitzdHJ1Y3QgZWhjaV9yZWdzIHsKKworCS8qIFVTQkNNRDogb2Zmc2V0IDB4MDAgKi8KKwl1MzIJCWNvbW1hbmQ7CisvKiAyMzoxNiBpcyByL3cgaW50ciByYXRlLCBpbiBtaWNyb2ZyYW1lczsgZGVmYXVsdCAiOCIgPT0gMS9tc2VjICovCisjZGVmaW5lIENNRF9QQVJLCSgxPDwxMSkJCS8qIGVuYWJsZSAicGFyayIgb24gYXN5bmMgcWggKi8KKyNkZWZpbmUgQ01EX1BBUktfQ05UKGMpCSgoKGMpPj44KSYzKQkvKiBob3cgbWFueSB0cmFuc2ZlcnMgdG8gcGFyayBmb3IgKi8KKyNkZWZpbmUgQ01EX0xSRVNFVAkoMTw8NykJCS8qIHBhcnRpYWwgcmVzZXQgKG5vIHBvcnRzLCBldGMpICovCisjZGVmaW5lIENNRF9JQUFECSgxPDw2KQkJLyogImRvb3JiZWxsIiBpbnRlcnJ1cHQgYXN5bmMgYWR2YW5jZSAqLworI2RlZmluZSBDTURfQVNFCQkoMTw8NSkJCS8qIGFzeW5jIHNjaGVkdWxlIGVuYWJsZSAqLworI2RlZmluZSBDTURfUFNFICAJKDE8PDQpCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBlbmFibGUgKi8KKy8qIDM6MiBpcyBwZXJpb2RpYyBmcmFtZSBsaXN0IHNpemUgKi8KKyNkZWZpbmUgQ01EX1JFU0VUCSgxPDwxKQkJLyogcmVzZXQgSEMgbm90IGJ1cyAqLworI2RlZmluZSBDTURfUlVOCQkoMTw8MCkJCS8qIHN0YXJ0L3N0b3AgSEMgKi8KKworCS8qIFVTQlNUUzogb2Zmc2V0IDB4MDQgKi8KKwl1MzIJCXN0YXR1czsKKyNkZWZpbmUgU1RTX0FTUwkJKDE8PDE1KQkJLyogQXN5bmMgU2NoZWR1bGUgU3RhdHVzICovCisjZGVmaW5lIFNUU19QU1MJCSgxPDwxNCkJCS8qIFBlcmlvZGljIFNjaGVkdWxlIFN0YXR1cyAqLworI2RlZmluZSBTVFNfUkVDTAkoMTw8MTMpCQkvKiBSZWNsYW1hdGlvbiAqLworI2RlZmluZSBTVFNfSEFMVAkoMTw8MTIpCQkvKiBOb3QgcnVubmluZyAoYW55IHJlYXNvbikgKi8KKy8qIHNvbWUgYml0cyByZXNlcnZlZCAqLworCS8qIHRoZXNlIFNUU18qIGZsYWdzIGFyZSBhbHNvIGludHJfZW5hYmxlIGJpdHMgKFVTQklOVFIpICovCisjZGVmaW5lIFNUU19JQUEJCSgxPDw1KQkJLyogSW50ZXJydXB0ZWQgb24gYXN5bmMgYWR2YW5jZSAqLworI2RlZmluZSBTVFNfRkFUQUwJKDE8PDQpCQkvKiBzdWNoIGFzIHNvbWUgUENJIGFjY2VzcyBlcnJvcnMgKi8KKyNkZWZpbmUgU1RTX0ZMUgkJKDE8PDMpCQkvKiBmcmFtZSBsaXN0IHJvbGxlZCBvdmVyICovCisjZGVmaW5lIFNUU19QQ0QJCSgxPDwyKQkJLyogcG9ydCBjaGFuZ2UgZGV0ZWN0ICovCisjZGVmaW5lIFNUU19FUlIJCSgxPDwxKQkJLyogImVycm9yIiBjb21wbGV0aW9uIChvdmVyZmxvdywgLi4uKSAqLworI2RlZmluZSBTVFNfSU5UCQkoMTw8MCkJCS8qICJub3JtYWwiIGNvbXBsZXRpb24gKHNob3J0LCAuLi4pICovCisKKwkvKiBVU0JJTlRSOiBvZmZzZXQgMHgwOCAqLworCXUzMgkJaW50cl9lbmFibGU7CisKKwkvKiBGUklOREVYOiBvZmZzZXQgMHgwQyAqLworCXUzMgkJZnJhbWVfaW5kZXg7CS8qIGN1cnJlbnQgbWljcm9mcmFtZSBudW1iZXIgKi8KKwkvKiBDVFJMRFNTRUdNRU5UOiBvZmZzZXQgMHgxMCAqLworCXUzMgkJc2VnbWVudDsgCS8qIGFkZHJlc3MgYml0cyA2MzozMiBpZiBuZWVkZWQgKi8KKwkvKiBQRVJJT0RJQ0xJU1RCQVNFOiBvZmZzZXQgMHgxNCAqLworCXUzMgkJZnJhbWVfbGlzdDsgCS8qIHBvaW50cyB0byBwZXJpb2RpYyBsaXN0ICovCisJLyogQVNZTkNMSVNUQUREUjogb2Zmc2V0IDB4MTggKi8KKwl1MzIJCWFzeW5jX25leHQ7CS8qIGFkZHJlc3Mgb2YgbmV4dCBhc3luYyBxdWV1ZSBoZWFkICovCisKKwl1MzIJCXJlc2VydmVkIFs5XTsKKworCS8qIENPTkZJR0ZMQUc6IG9mZnNldCAweDQwICovCisJdTMyCQljb25maWd1cmVkX2ZsYWc7CisjZGVmaW5lIEZMQUdfQ0YJCSgxPDwwKQkJLyogdHJ1ZTogd2UnbGwgc3VwcG9ydCAiaGlnaCBzcGVlZCIgKi8KKworCS8qIFBPUlRTQzogb2Zmc2V0IDB4NDQgKi8KKwl1MzIJCXBvcnRfc3RhdHVzIFswXTsJLyogdXAgdG8gTl9QT1JUUyAqLworLyogMzE6MjMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUE9SVF9XS09DX0UJKDE8PDIyKQkJLyogd2FrZSBvbiBvdmVyY3VycmVudCAoZW5hYmxlKSAqLworI2RlZmluZSBQT1JUX1dLRElTQ19FCSgxPDwyMSkJCS8qIHdha2Ugb24gZGlzY29ubmVjdCAoZW5hYmxlKSAqLworI2RlZmluZSBQT1JUX1dLQ09OTl9FCSgxPDwyMCkJCS8qIHdha2Ugb24gY29ubmVjdCAoZW5hYmxlKSAqLworLyogMTk6MTYgZm9yIHBvcnQgdGVzdGluZyAqLworI2RlZmluZSBQT1JUX0xFRF9PRkYJKDA8PDE0KQorI2RlZmluZSBQT1JUX0xFRF9BTUJFUgkoMTw8MTQpCisjZGVmaW5lIFBPUlRfTEVEX0dSRUVOCSgyPDwxNCkKKyNkZWZpbmUgUE9SVF9MRURfTUFTSwkoMzw8MTQpCisjZGVmaW5lIFBPUlRfT1dORVIJKDE8PDEzKQkJLyogdHJ1ZTogY29tcGFuaW9uIGhjIG93bnMgdGhpcyBwb3J0ICovCisjZGVmaW5lIFBPUlRfUE9XRVIJKDE8PDEyKQkJLyogdHJ1ZTogaGFzIHBvd2VyIChzZWUgUFBDKSAqLworI2RlZmluZSBQT1JUX1VTQjExKHgpICgoKHgpJigzPDwxMCkpPT0oMTw8MTApKQkvKiBVU0IgMS4xIGRldmljZSAqLworLyogMTE6MTAgZm9yIGRldGVjdGluZyBsb3dzcGVlZCBkZXZpY2VzIChyZXNldCB2cyByZWxlYXNlIG93bmVyc2hpcCkgKi8KKy8qIDkgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgUE9SVF9SRVNFVAkoMTw8OCkJCS8qIHJlc2V0IHBvcnQgKi8KKyNkZWZpbmUgUE9SVF9TVVNQRU5ECSgxPDw3KQkJLyogc3VzcGVuZCBwb3J0ICovCisjZGVmaW5lIFBPUlRfUkVTVU1FCSgxPDw2KQkJLyogcmVzdW1lIGl0ICovCisjZGVmaW5lIFBPUlRfT0NDCSgxPDw1KQkJLyogb3ZlciBjdXJyZW50IGNoYW5nZSAqLworI2RlZmluZSBQT1JUX09DCQkoMTw8NCkJCS8qIG92ZXIgY3VycmVudCBhY3RpdmUgKi8KKyNkZWZpbmUgUE9SVF9QRUMJKDE8PDMpCQkvKiBwb3J0IGVuYWJsZSBjaGFuZ2UgKi8KKyNkZWZpbmUgUE9SVF9QRQkJKDE8PDIpCQkvKiBwb3J0IGVuYWJsZSAqLworI2RlZmluZSBQT1JUX0NTQwkoMTw8MSkJCS8qIGNvbm5lY3Qgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBQT1JUX0NPTk5FQ1QJKDE8PDApCQkvKiBkZXZpY2UgY29ubmVjdGVkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQXBwZW5kaXggQywgRGVidWcgcG9ydCAuLi4gaW50ZW5kZWQgZm9yIHVzZSB3aXRoIHNwZWNpYWwgImRlYnVnIGRldmljZXMiCisgKiB0aGF0IGNhbiBoZWxwIGlmIHRoZXJlJ3Mgbm8gc2VyaWFsIGNvbnNvbGUuICAobm9uc3RhbmRhcmQgZW51bWVyYXRpb24uKQorICovCitzdHJ1Y3QgZWhjaV9kYmdfcG9ydCB7CisJdTMyCWNvbnRyb2w7CisjZGVmaW5lIERCR1BfT1dORVIJKDE8PDMwKQorI2RlZmluZSBEQkdQX0VOQUJMRUQJKDE8PDI4KQorI2RlZmluZSBEQkdQX0RPTkUJKDE8PDE2KQorI2RlZmluZSBEQkdQX0lOVVNFCSgxPDwxMCkKKyNkZWZpbmUgREJHUF9FUlJDT0RFKHgpCSgoKHgpPj43KSYweDBmKQorIwlkZWZpbmUgREJHUF9FUlJfQkFECTEKKyMJZGVmaW5lIERCR1BfRVJSX1NJR05BTAkyCisjZGVmaW5lIERCR1BfRVJST1IJKDE8PDYpCisjZGVmaW5lIERCR1BfR08JCSgxPDw1KQorI2RlZmluZSBEQkdQX09VVAkoMTw8NCkKKyNkZWZpbmUgREJHUF9MRU4oeCkJKCgoeCk+PjApJjB4MGYpCisJdTMyCXBpZHM7CisjZGVmaW5lIERCR1BfUElEX0dFVCh4KQkJKCgoeCk+PjE2KSYweGZmKQorI2RlZmluZSBEQkdQX1BJRF9TRVQoZGF0YSx0b2spCSgoKGRhdGEpPDw4KXwodG9rKSk7CisJdTMyCWRhdGEwMzsKKwl1MzIJZGF0YTQ3OworCXUzMglhZGRyZXNzOworI2RlZmluZSBEQkdQX0VQQUREUihkZXYsZXApCSgoKGRldik8PDgpfChlcCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJUVREX05FWFQoZG1hKQljcHVfdG9fbGUzMigodTMyKWRtYSkKKworLyoKKyAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy41CisgKiBRVEQ6IGRlc2NyaWJlIGRhdGEgdHJhbnNmZXIgY29tcG9uZW50cyAoYnVmZmVyLCBkaXJlY3Rpb24sIC4uLikgCisgKiBTZWUgRmlnIDMtNiAiUXVldWUgRWxlbWVudCBUcmFuc2ZlciBEZXNjcmlwdG9yIEJsb2NrIERpYWdyYW0iLgorICoKKyAqIFRoZXNlIGFyZSBhc3NvY2lhdGVkIG9ubHkgd2l0aCAiUUgiIChRdWV1ZSBIZWFkKSBzdHJ1Y3R1cmVzLAorICogdXNlZCB3aXRoIGNvbnRyb2wsIGJ1bGssIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLgorICovCitzdHJ1Y3QgZWhjaV9xdGQgeworCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlfX2xlMzIJCQlod19uZXh0OwkgIC8qIHNlZSBFSENJIDMuNS4xICovCisJX19sZTMyCQkJaHdfYWx0X25leHQ7ICAgICAgLyogc2VlIEVIQ0kgMy41LjIgKi8KKwlfX2xlMzIJCQlod190b2tlbjsgICAgICAgICAvKiBzZWUgRUhDSSAzLjUuMyAqLyAgICAgICAKKyNkZWZpbmUJUVREX1RPR0dMRQkoMSA8PCAzMSkJLyogZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUJUVREX0xFTkdUSCh0b2spCSgoKHRvayk+PjE2KSAmIDB4N2ZmZikKKyNkZWZpbmUJUVREX0lPQwkJKDEgPDwgMTUpCS8qIGludGVycnVwdCBvbiBjb21wbGV0ZSAqLworI2RlZmluZQlRVERfQ0VSUih0b2spCSgoKHRvayk+PjEwKSAmIDB4MykKKyNkZWZpbmUJUVREX1BJRCh0b2spCSgoKHRvayk+PjgpICYgMHgzKQorI2RlZmluZQlRVERfU1RTX0FDVElWRQkoMSA8PCA3KQkvKiBIQyBtYXkgZXhlY3V0ZSB0aGlzICovCisjZGVmaW5lCVFURF9TVFNfSEFMVAkoMSA8PCA2KQkvKiBoYWx0ZWQgb24gZXJyb3IgKi8KKyNkZWZpbmUJUVREX1NUU19EQkUJKDEgPDwgNSkJLyogZGF0YSBidWZmZXIgZXJyb3IgKGluIEhDKSAqLworI2RlZmluZQlRVERfU1RTX0JBQkJMRQkoMSA8PCA0KQkvKiBkZXZpY2Ugd2FzIGJhYmJsaW5nIChxdGQgaGFsdGVkKSAqLworI2RlZmluZQlRVERfU1RTX1hBQ1QJKDEgPDwgMykJLyogZGV2aWNlIGdhdmUgaWxsZWdhbCByZXNwb25zZSAqLworI2RlZmluZQlRVERfU1RTX01NRgkoMSA8PCAyKQkvKiBpbmNvbXBsZXRlIHNwbGl0IHRyYW5zYWN0aW9uICovCisjZGVmaW5lCVFURF9TVFNfU1RTCSgxIDw8IDEpCS8qIHNwbGl0IHRyYW5zYWN0aW9uIHN0YXRlICovCisjZGVmaW5lCVFURF9TVFNfUElORwkoMSA8PCAwKQkvKiBpc3N1ZSBQSU5HPyAqLworCV9fbGUzMgkJCWh3X2J1ZiBbNV07ICAgICAgICAvKiBzZWUgRUhDSSAzLjUuNCAqLworCV9fbGUzMgkJCWh3X2J1Zl9oaSBbNV07ICAgICAgICAvKiBBcHBlbmRpeCBCICovCisKKwkvKiB0aGUgcmVzdCBpcyBIQ0QtcHJpdmF0ZSAqLworCWRtYV9hZGRyX3QJCXF0ZF9kbWE7CQkvKiBxdGQgYWRkcmVzcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcXRkX2xpc3Q7CQkvKiBzdyBxdGQgbGlzdCAqLworCXN0cnVjdCB1cmIJCSp1cmI7CQkJLyogcXRkJ3MgdXJiICovCisJc2l6ZV90CQkJbGVuZ3RoOwkJCS8qIGxlbmd0aCBvZiBidWZmZXIgKi8KK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworCisvKiBtYXNrIE5ha0NudCtUIGluIHFoLT5od19hbHRfbmV4dCAqLworI2RlZmluZSBRVERfTUFTSyBfX2NvbnN0YW50X2NwdV90b19sZTMyICh+MHgxZikKKworI2RlZmluZSBJU19TSE9SVF9SRUFEKHRva2VuKSAoUVREX0xFTkdUSCAodG9rZW4pICE9IDAgJiYgUVREX1BJRCAodG9rZW4pID09IDEpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHR5cGUgdGFnIGZyb20ge3FoLGl0ZCxzaXRkLGZzdG59LT5od19uZXh0ICovCisjZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKSkKKworLyogdmFsdWVzIGZvciB0aGF0IHR5cGUgdGFnICovCisjZGVmaW5lIFFfVFlQRV9JVEQJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCA8PCAxKQorI2RlZmluZSBRX1RZUEVfUUgJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCAxKQorI2RlZmluZSBRX1RZUEVfU0lURCAJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMiA8PCAxKQorI2RlZmluZSBRX1RZUEVfRlNUTiAJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKQorCisvKiBuZXh0IGFzeW5jIHF1ZXVlIGVudHJ5LCBvciBwb2ludGVyIHRvIGludGVycnVwdC9wZXJpb2RpYyBRSCAqLworI2RlZmluZQlRSF9ORVhUKGRtYSkJKGNwdV90b19sZTMyKCgodTMyKWRtYSkmfjB4MDFmKXxRX1RZUEVfUUgpCisKKy8qIGZvciBwZXJpb2RpYy9hc3luYyBzY2hlZHVsZXMgYW5kIHF0ZCBsaXN0cywgbWFyayBlbmQgb2YgbGlzdCAqLworI2RlZmluZQlFSENJX0xJU1RfRU5ECV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KKworLyoKKyAqIEVudHJpZXMgaW4gcGVyaW9kaWMgc2hhZG93IHRhYmxlIGFyZSBwb2ludGVycyB0byBvbmUgb2YgZm91ciBraW5kcworICogb2YgZGF0YSBzdHJ1Y3R1cmUuICBUaGF0J3MgZGljdGF0ZWQgYnkgdGhlIGhhcmR3YXJlOyBhIHR5cGUgdGFnIGlzCisgKiBlbmNvZGVkIGluIHRoZSBsb3cgYml0cyBvZiB0aGUgaGFyZHdhcmUncyBwZXJpb2RpYyBzY2hlZHVsZS4gIFVzZQorICogUV9ORVhUX1RZUEUgdG8gZ2V0IHRoZSB0YWcuCisgKgorICogRm9yIGVudHJpZXMgaW4gdGhlIGFzeW5jIHNjaGVkdWxlLCB0aGUgdHlwZSB0YWcgYWx3YXlzIHNheXMgInFoIi4KKyAqLwordW5pb24gZWhjaV9zaGFkb3cgeworCXN0cnVjdCBlaGNpX3FoIAkJKnFoOwkJLyogUV9UWVBFX1FIICovCisJc3RydWN0IGVoY2lfaXRkCQkqaXRkOwkJLyogUV9UWVBFX0lURCAqLworCXN0cnVjdCBlaGNpX3NpdGQJKnNpdGQ7CQkvKiBRX1RZUEVfU0lURCAqLworCXN0cnVjdCBlaGNpX2ZzdG4JKmZzdG47CQkvKiBRX1RZUEVfRlNUTiAqLworCXUzMgkJCSpod19uZXh0OwkvKiAoYWxsIHR5cGVzKSAqLworCXZvaWQJCQkqcHRyOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy42CisgKiBRSDogZGVzY3JpYmVzIGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQgZW5kcG9pbnRzCisgKiBTZWUgRmlnIDMtNyAiUXVldWUgSGVhZCBTdHJ1Y3R1cmUgTGF5b3V0Ii4KKyAqCisgKiBUaGVzZSBhcHBlYXIgaW4gYm90aCB0aGUgYXN5bmMgYW5kIChmb3IgaW50ZXJydXB0KSBwZXJpb2RpYyBzY2hlZHVsZXMuCisgKi8KKworc3RydWN0IGVoY2lfcWggeworCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlfX2xlMzIJCQlod19uZXh0OwkgLyogc2VlIEVIQ0kgMy42LjEgKi8KKwlfX2xlMzIJCQlod19pbmZvMTsgICAgICAgIC8qIHNlZSBFSENJIDMuNi4yICovCisjZGVmaW5lCVFIX0hFQUQJCTB4MDAwMDgwMDAKKwlfX2xlMzIJCQlod19pbmZvMjsgICAgICAgIC8qIHNlZSBFSENJIDMuNi4yICovCisJX19sZTMyCQkJaHdfY3VycmVudDsJIC8qIHF0ZCBsaXN0IC0gc2VlIEVIQ0kgMy42LjQgKi8KKwkKKwkvKiBxdGQgb3ZlcmxheSAoaGFyZHdhcmUgcGFydHMgb2YgYSBzdHJ1Y3QgZWhjaV9xdGQpICovCisJX19sZTMyCQkJaHdfcXRkX25leHQ7CisJX19sZTMyCQkJaHdfYWx0X25leHQ7CisJX19sZTMyCQkJaHdfdG9rZW47CisJX19sZTMyCQkJaHdfYnVmIFs1XTsKKwlfX2xlMzIJCQlod19idWZfaGkgWzVdOworCisJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KKwlkbWFfYWRkcl90CQlxaF9kbWE7CQkvKiBhZGRyZXNzIG9mIHFoICovCisJdW5pb24gZWhjaV9zaGFkb3cJcWhfbmV4dDsJLyogcHRyIHRvIHFoOyBvciBwZXJpb2RpYyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcXRkX2xpc3Q7CS8qIHN3IHF0ZCBsaXN0ICovCisJc3RydWN0IGVoY2lfcXRkCQkqZHVtbXk7CisJc3RydWN0IGVoY2lfcWgJCSpyZWNsYWltOwkvKiBuZXh0IHRvIHJlY2xhaW0gKi8KKworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJc3RydWN0IGtyZWYJCWtyZWY7CisJdW5zaWduZWQJCXN0YW1wOworCisJdTgJCQlxaF9zdGF0ZTsKKyNkZWZpbmUJUUhfU1RBVEVfTElOS0VECQkxCQkvKiBIQyBzZWVzIHRoaXMgKi8KKyNkZWZpbmUJUUhfU1RBVEVfVU5MSU5LCQkyCQkvKiBIQyBtYXkgc3RpbGwgc2VlIHRoaXMgKi8KKyNkZWZpbmUJUUhfU1RBVEVfSURMRQkJMwkJLyogSEMgZG9lc24ndCBzZWUgdGhpcyAqLworI2RlZmluZQlRSF9TVEFURV9VTkxJTktfV0FJVAk0CQkvKiBMSU5LRUQgYW5kIG9uIHJlY2xhaW0gcSAqLworI2RlZmluZQlRSF9TVEFURV9DT01QTEVUSU5HCTUJCS8qIGRvbid0IHRvdWNoIHRva2VuLkhBTFQgKi8KKworCS8qIHBlcmlvZGljIHNjaGVkdWxlIGluZm8gKi8KKwl1OAkJCXVzZWNzOwkJLyogaW50ciBiYW5kd2lkdGggKi8KKwl1OAkJCWdhcF91ZjsJCS8qIHVmcmFtZXMgc3BsaXQvY3NwbGl0IGdhcCAqLworCXU4CQkJY191c2VjczsJLyogLi4uIHNwbGl0IGNvbXBsZXRpb24gYncgKi8KKwl1bnNpZ25lZCBzaG9ydAkJcGVyaW9kOwkJLyogcG9sbGluZyBpbnRlcnZhbCAqLworCXVuc2lnbmVkIHNob3J0CQlzdGFydDsJCS8qIHdoZXJlIHBvbGxpbmcgc3RhcnRzICovCisjZGVmaW5lIE5PX0ZSQU1FICgodW5zaWduZWQgc2hvcnQpfjApCQkJLyogcGljayBuZXcgc3RhcnQgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2OwkJLyogYWNjZXNzIHRvIFRUICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgzMikpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZGVzY3JpcHRpb24gb2Ygb25lIGlzbyB0cmFuc2FjdGlvbiAodXAgdG8gMyBLQiBkYXRhIGlmIGhpZ2hzcGVlZCkgKi8KK3N0cnVjdCBlaGNpX2lzb19wYWNrZXQgeworCS8qIFRoZXNlIHdpbGwgYmUgY29waWVkIHRvIGlURCB3aGVuIHNjaGVkdWxpbmcgKi8KKwl1NjQJCQlidWZwOwkJLyogaXRkLT5od19idWZweyxfaGl9W3BnXSB8PSAqLworCV9fbGUzMgkJCXRyYW5zYWN0aW9uOwkvKiBpdGQtPmh3X3RyYW5zYWN0aW9uW2ldIHw9ICovCisJdTgJCQljcm9zczsJCS8qIGJ1ZiBjcm9zc2VzIHBhZ2VzICovCisJLyogZm9yIGZ1bGwgc3BlZWQgT1VUIHNwbGl0cyAqLworCXUzMgkJCWJ1ZjE7Cit9OworCisvKiB0ZW1wb3Jhcnkgc2NoZWR1bGUgZGF0YSBmb3IgcGFja2V0cyBmcm9tIGlzbyB1cmJzIChib3RoIHNwZWVkcykKKyAqIGVhY2ggcGFja2V0IGlzIG9uZSBsb2dpY2FsIHVzYiB0cmFuc2FjdGlvbiB0byB0aGUgZGV2aWNlIChub3QgVFQpLAorICogYmVnaW5uaW5nIGF0IHN0cmVhbS0+bmV4dF91ZnJhbWUKKyAqLworc3RydWN0IGVoY2lfaXNvX3NjaGVkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRkX2xpc3Q7CisJdW5zaWduZWQJCXNwYW47CisJc3RydWN0IGVoY2lfaXNvX3BhY2tldAlwYWNrZXQgWzBdOworfTsKKworLyoKKyAqIGVoY2lfaXNvX3N0cmVhbSAtIGdyb3VwcyBhbGwgKHMpaXRkcyBmb3IgdGhpcyBlbmRwb2ludC4KKyAqIGFjdHMgbGlrZSBhIHFoIHdvdWxkLCBpZiBFSENJIGhhZCB0aGVtIGZvciBJU08uCisgKi8KK3N0cnVjdCBlaGNpX2lzb19zdHJlYW0geworCS8qIGZpcnN0IHR3byBmaWVsZHMgbWF0Y2ggUUgsIGJ1dCBpbmZvMSA9PSAwICovCisJX19sZTMyCQkJaHdfbmV4dDsKKwlfX2xlMzIJCQlod19pbmZvMTsKKworCXUzMgkJCXJlZmNvdW50OworCXU4CQkJYkVuZHBvaW50QWRkcmVzczsKKwl1OAkJCWhpZ2hzcGVlZDsKKwl1MTYJCQlkZXB0aDsJCS8qIGRlcHRoIGluIHVmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRkX2xpc3Q7CS8qIHF1ZXVlZCBpdGRzL3NpdGRzICovCisJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CS8qIGxpc3Qgb2YgdW51c2VkIGl0ZHMvc2l0ZHMgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKyAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKworCS8qIG91dHB1dCBvZiAocmUpc2NoZWR1bGluZyAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwkJLyogamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcJCXJlc2NoZWR1bGVkOworCWludAkJCW5leHRfdWZyYW1lOworCV9fbGUzMgkJCXNwbGl0czsKKworCS8qIHRoZSByZXN0IGlzIGRlcml2ZWQgZnJvbSB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvciwKKwkgKiB0cnVzdGluZyB1cmItPmludGVydmFsID09IGYoZXBkZXNjLT5iSW50ZXJ2YWwpIGFuZAorCSAqIGluY2x1ZGluZyB0aGUgZXh0cmEgaW5mbyBmb3IgaHdfYnVmcFswLi4yXQorCSAqLworCXU4CQkJaW50ZXJ2YWw7CisJdTgJCQl1c2VjcywgY191c2VjczsKKwl1MTYJCQltYXhwOworCXUxNgkJCXJhd19tYXNrOworCXVuc2lnbmVkCQliYW5kd2lkdGg7CisKKwkvKiBUaGlzIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBpVEQncyBod19idWZwIGZpZWxkcyAqLworCV9fbGUzMgkJCWJ1ZjA7CQkKKwlfX2xlMzIJCQlidWYxOwkJCisJX19sZTMyCQkJYnVmMjsKKworCS8qIHRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHNJVEQncyB0dCBpbmZvICovCisJX19sZTMyCQkJYWRkcmVzczsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFNwZWNpZmljYXRpb24gMC45NSBTZWN0aW9uIDMuMworICogRmlnIDMtNCAiSXNvY2hyb25vdXMgVHJhbnNhY3Rpb24gRGVzY3JpcHRvciAoaVREKSIKKyAqCisgKiBTY2hlZHVsZSByZWNvcmRzIGZvciBoaWdoIHNwZWVkIGlzbyB4ZmVycworICovCitzdHJ1Y3QgZWhjaV9pdGQgeworCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlfX2xlMzIJCQlod19uZXh0OyAgICAgICAgICAgLyogc2VlIEVIQ0kgMy4zLjEgKi8KKwlfX2xlMzIJCQlod190cmFuc2FjdGlvbiBbOF07IC8qIHNlZSBFSENJIDMuMy4yICovCisjZGVmaW5lIEVIQ0lfSVNPQ19BQ1RJVkUgICAgICAgICgxPDwzMSkgICAgICAgIC8qIGFjdGl2YXRlIHRyYW5zZmVyIHRoaXMgc2xvdCAqLworI2RlZmluZSBFSENJX0lTT0NfQlVGX0VSUiAgICAgICAoMTw8MzApICAgICAgICAvKiBEYXRhIGJ1ZmZlciBlcnJvciAqLworI2RlZmluZSBFSENJX0lTT0NfQkFCQkxFICAgICAgICAoMTw8MjkpICAgICAgICAvKiBiYWJibGUgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRUhDSV9JU09DX1hBQ1RFUlIgICAgICAgKDE8PDI4KSAgICAgICAgLyogWGFjdEVyciAtIHRyYW5zYWN0aW9uIGVycm9yICovCisjZGVmaW5lCUVIQ0lfSVREX0xFTkdUSCh0b2spCSgoKHRvayk+PjE2KSAmIDB4MGZmZikKKyNkZWZpbmUJRUhDSV9JVERfSU9DCQkoMSA8PCAxNSkJLyogaW50ZXJydXB0IG9uIGNvbXBsZXRlICovCisKKyNkZWZpbmUgSVREX0FDVElWRQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEVIQ0lfSVNPQ19BQ1RJVkUpCisKKwlfX2xlMzIJCQlod19idWZwIFs3XTsJLyogc2VlIEVIQ0kgMy4zLjMgKi8gCisJX19sZTMyCQkJaHdfYnVmcF9oaSBbN107CS8qIEFwcGVuZGl4IEIgKi8KKworCS8qIHRoZSByZXN0IGlzIEhDRC1wcml2YXRlICovCisJZG1hX2FkZHJfdAkJaXRkX2RtYTsJLyogZm9yIHRoaXMgaXRkICovCisJdW5pb24gZWhjaV9zaGFkb3cJaXRkX25leHQ7CS8qIHB0ciB0byBwZXJpb2RpYyBxIGVudHJ5ICovCisKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbTsJLyogZW5kcG9pbnQncyBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJaXRkX2xpc3Q7CS8qIGxpc3Qgb2Ygc3RyZWFtJ3MgaXRkcyAqLworCisJLyogYW55L2FsbCBod190cmFuc2FjdGlvbnMgaGVyZSBtYXkgYmUgdXNlZCBieSB0aGF0IHVyYiAqLworCXVuc2lnbmVkCQlmcmFtZTsJCS8qIHdoZXJlIHNjaGVkdWxlZCAqLworCXVuc2lnbmVkCQlwZzsKKwl1bnNpZ25lZAkJaW5kZXhbOF07CS8qIGluIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgKi8KKwl1OAkJCXVzZWNzWzhdOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFNwZWNpZmljYXRpb24gMC45NSBTZWN0aW9uIDMuNCAKKyAqIHNpVEQsIGFrYSBzcGxpdC10cmFuc2FjdGlvbiBpc29jaHJvbm91cyBUcmFuc2ZlciBEZXNjcmlwdG9yCisgKiAgICAgICAuLi4gZGVzY3JpYmUgZnVsbCBzcGVlZCBpc28geGZlcnMgdGhyb3VnaCBUVCBpbiBodWJzCisgKiBzZWUgRmlndXJlIDMtNSAiU3BsaXQtdHJhbnNhY3Rpb24gSXNvY2hyb25vdXMgVHJhbnNhY3Rpb24gRGVzY3JpcHRvciAoc2lURCkKKyAqLworc3RydWN0IGVoY2lfc2l0ZCB7CisJLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworCV9fbGUzMgkJCWh3X25leHQ7CisvKiB1c2VzIGJpdCBmaWVsZCBtYWNyb3MgYWJvdmUgLSBzZWUgRUhDSSAwLjk1IFRhYmxlIDMtOCAqLworCV9fbGUzMgkJCWh3X2Z1bGxzcGVlZF9lcDsJLyogRUhDSSB0YWJsZSAzLTkgKi8KKwlfX2xlMzIJCQlod191ZnJhbWU7CQkvKiBFSENJIHRhYmxlIDMtMTAgKi8KKwlfX2xlMzIJCQlod19yZXN1bHRzOwkJLyogRUhDSSB0YWJsZSAzLTExICovCisjZGVmaW5lCVNJVERfSU9DCSgxIDw8IDMxKQkvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLworI2RlZmluZQlTSVREX1BBR0UJKDEgPDwgMzApCS8qIGJ1ZmZlciAwLzEgKi8KKyNkZWZpbmUJU0lURF9MRU5HVEgoeCkJKDB4M2ZmICYgKCh4KT4+MTYpKQorI2RlZmluZQlTSVREX1NUU19BQ1RJVkUJKDEgPDwgNykJLyogSEMgbWF5IGV4ZWN1dGUgdGhpcyAqLworI2RlZmluZQlTSVREX1NUU19FUlIJKDEgPDwgNikJLyogZXJyb3IgZnJvbSBUVCAqLworI2RlZmluZQlTSVREX1NUU19EQkUJKDEgPDwgNSkJLyogZGF0YSBidWZmZXIgZXJyb3IgKGluIEhDKSAqLworI2RlZmluZQlTSVREX1NUU19CQUJCTEUJKDEgPDwgNCkJLyogZGV2aWNlIHdhcyBiYWJibGluZyAqLworI2RlZmluZQlTSVREX1NUU19YQUNUCSgxIDw8IDMpCS8qIGlsbGVnYWwgSU4gcmVzcG9uc2UgKi8KKyNkZWZpbmUJU0lURF9TVFNfTU1GCSgxIDw8IDIpCS8qIGluY29tcGxldGUgc3BsaXQgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUJU0lURF9TVFNfU1RTCSgxIDw8IDEpCS8qIHNwbGl0IHRyYW5zYWN0aW9uIHN0YXRlICovCisKKyNkZWZpbmUgU0lURF9BQ1RJVkUJX19jb25zdGFudF9jcHVfdG9fbGUzMihTSVREX1NUU19BQ1RJVkUpCisKKwlfX2xlMzIJCQlod19idWYgWzJdOwkJLyogRUhDSSB0YWJsZSAzLTEyICovCisJX19sZTMyCQkJaHdfYmFja3BvaW50ZXI7CQkvKiBFSENJIHRhYmxlIDMtMTMgKi8KKwlfX2xlMzIJCQlod19idWZfaGkgWzJdOwkJLyogQXBwZW5kaXggQiAqLworCisJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KKwlkbWFfYWRkcl90CQlzaXRkX2RtYTsKKwl1bmlvbiBlaGNpX3NoYWRvdwlzaXRkX25leHQ7CS8qIHB0ciB0byBwZXJpb2RpYyBxIGVudHJ5ICovCisKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbTsJLyogZW5kcG9pbnQncyBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJc2l0ZF9saXN0OwkvKiBsaXN0IG9mIHN0cmVhbSdzIHNpdGRzICovCisJdW5zaWduZWQJCWZyYW1lOworCXVuc2lnbmVkCQlpbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRUhDSSBTcGVjaWZpY2F0aW9uIDAuOTYgU2VjdGlvbiAzLjcKKyAqIFBlcmlvZGljIEZyYW1lIFNwYW4gVHJhdmVyc2FsIE5vZGUgKEZTVE4pCisgKgorICogTWFuYWdlcyBzcGxpdCBpbnRlcnJ1cHQgdHJhbnNhY3Rpb25zICh1c2luZyBUVCkgdGhhdCBzcGFuIGZyYW1lIGJvdW5kYXJpZXMKKyAqIGludG8gdWZyYW1lcyAwLzE7IHNlZSA0LjEyLjIuMi4gIEluIHRob3NlIHVmcmFtZXMsIGEgInNhdmUgcGxhY2UiIEZTVE4KKyAqIG1ha2VzIHRoZSBIQyBqdW1wIChiYWNrKSB0byBhIFFIIHRvIHNjYW4gZm9yIGZzL2xzIFFIIGNvbXBsZXRpb25zIHVudGlsCisgKiBpdCBoaXRzIGEgInJlc3RvcmUiIEZTVE47IHRoZW4gaXQgcmV0dXJucyB0byBmaW5pc2ggb3RoZXIgdWZyYW1lIDAvMSB3b3JrLgorICovCitzdHJ1Y3QgZWhjaV9mc3RuIHsKKwlfX2xlMzIJCQlod19uZXh0OwkvKiBhbnkgcGVyaW9kaWMgcSBlbnRyeSAqLworCV9fbGUzMgkJCWh3X3ByZXY7CS8qIHFoIG9yIEVIQ0lfTElTVF9FTkQgKi8KKworCS8qIHRoZSByZXN0IGlzIEhDRC1wcml2YXRlICovCisJZG1hX2FkZHJfdAkJZnN0bl9kbWE7CisJdW5pb24gZWhjaV9zaGFkb3cJZnN0bl9uZXh0OwkvKiBwdHIgdG8gcGVyaW9kaWMgcSBlbnRyeSAqLworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQKKworLyoKKyAqIFNvbWUgRUhDSSBjb250cm9sbGVycyBoYXZlIGEgVHJhbnNhY3Rpb24gVHJhbnNsYXRvciBidWlsdCBpbnRvIHRoZQorICogcm9vdCBodWIuIFRoaXMgaXMgYSBub24tc3RhbmRhcmQgZmVhdHVyZS4gIEVhY2ggY29udHJvbGxlciB3aWxsIG5lZWQKKyAqIHRvIGFkZCBjb2RlIHRvIHRoZSBmb2xsb3dpbmcgaW5saW5lIGZ1bmN0aW9ucywgYW5kIGNhbGwgdGhlbSBhcworICogbmVlZGVkIChtb3N0bHkgaW4gcm9vdCBodWIgY29kZSkuCisgKi8KKworI2RlZmluZQllaGNpX2lzX1RESShlKQkJCSgoZSktPmlzX3RkaV9yaF90dCkKKworLyogUmV0dXJucyB0aGUgc3BlZWQgb2YgYSBkZXZpY2UgYXR0YWNoZWQgdG8gYSBwb3J0IG9uIHRoZSByb290IGh1Yi4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitlaGNpX3BvcnRfc3BlZWQoc3RydWN0IGVoY2lfaGNkICplaGNpLCB1bnNpZ25lZCBpbnQgcG9ydHNjKQoreworCWlmIChlaGNpX2lzX1RESShlaGNpKSkgeworCQlzd2l0Y2ggKChwb3J0c2M+PjI2KSYzKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiAwOworCQljYXNlIDE6CisJCQlyZXR1cm4gKDE8PFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpOworCQljYXNlIDI6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gKDE8PFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKKwkJfQorCX0KKwlyZXR1cm4gKDE8PFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKK30KKworI2Vsc2UKKworI2RlZmluZQllaGNpX2lzX1RESShlKQkJCSgwKQorCisjZGVmaW5lCWVoY2lfcG9ydF9zcGVlZChlaGNpLCBwb3J0c2MpCSgxPDxVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRCkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIFNUVUJfREVCVUdfRklMRVMKKyNlbmRpZgkvKiBERUJVRyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYgLyogX19MSU5VWF9FSENJX0hDRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTJiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYwpAQCAtMCwwICsxLDQ1NTYgQEAKKy8qCisgKiB1c2ItaG9zdC5jOiBFVFJBWCAxMDBMWCBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciAoSENEKQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBBeGlzIENvbW11bmljYXRpb25zIEFCLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3ZpbnRvLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKy8qIFVnbHkgaW5jbHVkZSBiZWNhdXNlIHdlIGRvbid0IGxpdmUgd2l0aCB0aGUgb3RoZXIgaG9zdCBkcml2ZXJzLiAqLworI2luY2x1ZGUgPC4uL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmg+CisjaW5jbHVkZSA8Li4vZHJpdmVycy91c2IvY29yZS91c2IuaD4KKworI2luY2x1ZGUgImhjX2NyaXN2MTAuaCIKKworI2RlZmluZSBFVFJBWF9VU0JfSENfSVJRIFVTQl9IQ19JUlFfTkJSCisjZGVmaW5lIEVUUkFYX1VTQl9SWF9JUlEgVVNCX0RNQV9SWF9JUlFfTkJSCisjZGVmaW5lIEVUUkFYX1VTQl9UWF9JUlEgVVNCX0RNQV9UWF9JUlFfTkJSCisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2JfaGNkX3ZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7CisKKyN1bmRlZiBLRVJOX0RFQlVHCisjZGVmaW5lIEtFUk5fREVCVUcgIiIKKworCisjdW5kZWYgVVNCX0RFQlVHX1JICisjdW5kZWYgVVNCX0RFQlVHX0VQSUQKKyN1bmRlZiBVU0JfREVCVUdfU0IKKyN1bmRlZiBVU0JfREVCVUdfREVTQworI3VuZGVmIFVTQl9ERUJVR19VUkIKKyN1bmRlZiBVU0JfREVCVUdfVFJBQ0UKKyN1bmRlZiBVU0JfREVCVUdfQlVMSworI3VuZGVmIFVTQl9ERUJVR19DVFJMCisjdW5kZWYgVVNCX0RFQlVHX0lOVFIKKyN1bmRlZiBVU0JfREVCVUdfSVNPQworCisjaWZkZWYgVVNCX0RFQlVHX1JICisjZGVmaW5lIGRiZ19yaChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKFJIKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX3JoKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVNCX0RFQlVHX0VQSUQKKyNkZWZpbmUgZGJnX2VwaWQoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IChFUElEKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX2VwaWQoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfU0IKKyNkZWZpbmUgZGJnX3NiKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoU0IpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfc2IoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfQ1RSTAorI2RlZmluZSBkYmdfY3RybChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKENUUkwpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfY3RybChmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19CVUxLCisjZGVmaW5lIGRiZ19idWxrKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoQlVMSykgIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZ19idWxrKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVNCX0RFQlVHX0lOVFIKKyNkZWZpbmUgZGJnX2ludHIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IChJTlRSKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX2ludHIoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfSVNPQworI2RlZmluZSBkYmdfaXNvYyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKElTT0MpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfaXNvYyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19UUkFDRQorI2RlZmluZSBEQkZFTlRFUiAocHJpbnRrKCI6IEVudGVyaW5nOiAlc1xuIiwgX19GVU5DVElPTl9fKSkKKyNkZWZpbmUgREJGRVhJVCAgKHByaW50aygiOiBFeGl0aW5nOiAgJXNcbiIsIF9fRlVOQ1RJT05fXykpCisjZWxzZQorI2RlZmluZSBEQkZFTlRFUiBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgREJGRVhJVCAgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSB1c2JfcGlwZXNsb3cocGlwZSkJKCgocGlwZSkgPj4gMjYpICYgMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVmlydHVhbCBSb290IEh1YgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX191OCByb290X2h1Yl9kZXZfZGVzW10gPQoreworCTB4MTIsICAvKiAgX191OCAgYkxlbmd0aDsgKi8KKwkweDAxLCAgLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgRGV2aWNlICovCisJMHgwMCwgIC8qICBfX2xlMTYgYmNkVVNCOyB2MS4wICovCisJMHgwMSwKKwkweDA5LCAgLyogIF9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAvKiAgX191OCAgYkRldmljZVN1YkNsYXNzOyAqLworCTB4MDAsICAvKiAgX191OCAgYkRldmljZVByb3RvY29sOyAqLworCTB4MDgsICAvKiAgX191OCAgYk1heFBhY2tldFNpemUwOyA4IEJ5dGVzICovCisJMHgwMCwgIC8qICBfX2xlMTYgaWRWZW5kb3I7ICovCisJMHgwMCwKKwkweDAwLCAgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCisJMHgwMCwKKwkweDAwLCAgLyogIF9fbGUxNiBiY2REZXZpY2U7ICovCisJMHgwMCwKKwkweDAwLCAgLyogIF9fdTggIGlNYW51ZmFjdHVyZXI7ICovCisJMHgwMiwgIC8qICBfX3U4ICBpUHJvZHVjdDsgKi8KKwkweDAxLCAgLyogIF9fdTggIGlTZXJpYWxOdW1iZXI7ICovCisJMHgwMSAgIC8qICBfX3U4ICBiTnVtQ29uZmlndXJhdGlvbnM7ICovCit9OworCisvKiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBfX3U4IHJvb3RfaHViX2NvbmZpZ19kZXNbXSA9Cit7CisJMHgwOSwgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDIsICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBDb25maWd1cmF0aW9uICovCisJMHgxOSwgIC8qICBfX2xlMTYgd1RvdGFsTGVuZ3RoOyAqLworCTB4MDAsCisJMHgwMSwgIC8qICBfX3U4ICBiTnVtSW50ZXJmYWNlczsgKi8KKwkweDAxLCAgLyogIF9fdTggIGJDb25maWd1cmF0aW9uVmFsdWU7ICovCisJMHgwMCwgIC8qICBfX3U4ICBpQ29uZmlndXJhdGlvbjsgKi8KKwkweDQwLCAgLyogIF9fdTggIGJtQXR0cmlidXRlczsgQml0IDc6IEJ1cy1wb3dlcmVkICovCisJMHgwMCwgIC8qICBfX3U4ICBNYXhQb3dlcjsgKi8KKworICAgICAvKiBpbnRlcmZhY2UgKi8KKwkweDA5LCAgLyogIF9fdTggIGlmX2JMZW5ndGg7ICovCisJMHgwNCwgIC8qICBfX3U4ICBpZl9iRGVzY3JpcHRvclR5cGU7IEludGVyZmFjZSAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkludGVyZmFjZU51bWJlcjsgKi8KKwkweDAwLCAgLyogIF9fdTggIGlmX2JBbHRlcm5hdGVTZXR0aW5nOyAqLworCTB4MDEsICAvKiAgX191OCAgaWZfYk51bUVuZHBvaW50czsgKi8KKwkweDA5LCAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkludGVyZmFjZVN1YkNsYXNzOyAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkludGVyZmFjZVByb3RvY29sOyAqLworCTB4MDAsICAvKiAgX191OCAgaWZfaUludGVyZmFjZTsgKi8KKworICAgICAvKiBlbmRwb2ludCAqLworCTB4MDcsICAvKiAgX191OCAgZXBfYkxlbmd0aDsgKi8KKwkweDA1LCAgLyogIF9fdTggIGVwX2JEZXNjcmlwdG9yVHlwZTsgRW5kcG9pbnQgKi8KKwkweDgxLCAgLyogIF9fdTggIGVwX2JFbmRwb2ludEFkZHJlc3M7IElOIEVuZHBvaW50IDEgKi8KKwkweDAzLCAgLyogIF9fdTggIGVwX2JtQXR0cmlidXRlczsgSW50ZXJydXB0ICovCisJMHgwOCwgIC8qICBfX2xlMTYgZXBfd01heFBhY2tldFNpemU7IDggQnl0ZXMgKi8KKwkweDAwLAorCTB4ZmYgICAvKiAgX191OCAgZXBfYkludGVydmFsOyAyNTUgbXMgKi8KK307CisKK3N0YXRpYyBfX3U4IHJvb3RfaHViX2h1Yl9kZXNbXSA9Cit7CisJMHgwOSwgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MjksICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBIdWItZGVzY3JpcHRvciAqLworCTB4MDIsICAvKiAgX191OCAgYk5iclBvcnRzOyAqLworCTB4MDAsICAvKiBfX3UxNiAgd0h1YkNoYXJhY3RlcmlzdGljczsgKi8KKwkweDAwLAorCTB4MDEsICAvKiAgX191OCAgYlB3ck9uMnB3ckdvb2Q7IDJtcyAqLworCTB4MDAsICAvKiAgX191OCAgYkh1YkNvbnRyQ3VycmVudDsgMCBtQSAqLworCTB4MDAsICAvKiAgX191OCAgRGV2aWNlUmVtb3ZhYmxlOyAqKiogNyBQb3J0cyBtYXggKioqICovCisJMHhmZiAgIC8qICBfX3U4ICBQb3J0UHdyQ3RybE1hc2s7ICoqKiA3IHBvcnRzIG1heCAqKiogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBidWxrX3N0YXJ0X3RpbWVyID0gVElNRVJfSU5JVElBTElaRVIoTlVMTCwgMCwgMCk7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgYnVsa19lb3RfdGltZXIgPSBUSU1FUl9JTklUSUFMSVpFUihOVUxMLCAwLCAwKTsKKworLyogV2Ugd2FudCB0aGUgc3RhcnQgdGltZXIgdG8gZXhwaXJlIGJlZm9yZSB0aGUgZW90IHRpbWVyLCBiZWNhdXNlIHRoZSBmb3JtZXIgbWlnaHQgc3RhcnQKKyAgIHRyYWZmaWMsIHRodXMgbWFraW5nIGl0IHVubmVjZXNzYXJ5IGZvciB0aGUgbGF0dGVyIHRvIHRpbWUgb3V0LiAqLworI2RlZmluZSBCVUxLX1NUQVJUX1RJTUVSX0lOVEVSVkFMIChIWi8xMCkgLyogMTAwIG1zICovCisjZGVmaW5lIEJVTEtfRU9UX1RJTUVSX0lOVEVSVkFMIChIWi8xMCsyKSAvKiAxMjAgbXMgKi8KKworI2RlZmluZSBPSyh4KSBsZW4gPSAoeCk7IGRiZ19yaCgiT0soJWQpOiBsaW5lOiAlZCIsIHgsIF9fTElORV9fKTsgYnJlYWsKKyNkZWZpbmUgQ0hFQ0tfQUxJR04oeCkgaWYgKCgoX191MzIpKHgpKSAmIDB4MDAwMDAwMDMpIFwKK3twYW5pYygiQWxpZ25tZW50IGNoZWNrIChEV09SRCkgZmFpbGVkIGF0ICVzOiVzOiVkXG4iLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7fQorCisjZGVmaW5lIFNMQUJfRkxBRyAgICAgKGluX2ludGVycnVwdCgpID8gU0xBQl9BVE9NSUMgOiBTTEFCX0tFUk5FTCkKKyNkZWZpbmUgS01BTExPQ19GTEFHICAoaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCkKKworLyogTW9zdCBoZWxwZnVsIGRlYnVnZ2luZyBhaWQgKi8KKyNkZWZpbmUgYXNzZXJ0KGV4cHIpICgodm9pZCkgKChleHByKSA/IDAgOiAoZXJyKCJhc3NlcnQgZmFpbGVkIGF0IGxpbmUgJWQiLF9fTElORV9fKSkpKQorCisvKiBBbHRlcm5hdGl2ZSBhc3NlcnQgZGVmaW5lIHdoaWNoIHN0b3BzIGFmdGVyIGEgZmFpbGVkIGFzc2VydC4gKi8KKy8qCisjZGVmaW5lIGFzc2VydChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoZXhwcikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZXJyKCJhc3NlcnQgZmFpbGVkIGF0IGxpbmUgJWQiLF9fTElORV9fKTsgXAorICAgICAgICAgICAgICAgIHdoaWxlICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisqLworCisKKy8qIEZJWE1FOiBTaG91bGQgUlhfQlVGX1NJWkUgYmUgYSBjb25maWcgb3B0aW9uLCBvciBtYXliZSB3ZSBzaG91bGQgYWRqdXN0IGl0IGR5bmFtaWNhbGx5PworICAgVG8gYWRqdXN0IGl0IGR5bmFtaWNhbGx5IHdlIHdvdWxkIGhhdmUgdG8gZ2V0IGFuIGludGVycnVwdCB3aGVuIHdlIHJlYWNoIHRoZSBlbmQKKyAgIG9mIHRoZSByeCBkZXNjcmlwdG9yIGxpc3QsIG9yIHdoZW4gd2UgZ2V0IGNsb3NlIHRvIHRoZSBlbmQsIGFuZCB0aGVuIGFsbG9jYXRlIG1vcmUKKyAgIGRlc2NyaXB0b3JzLiAqLworCisjZGVmaW5lIE5CUl9PRl9SWF9ERVNDICAgICA1MTIKKyNkZWZpbmUgUlhfREVTQ19CVUZfU0laRSAgIDEwMjQKKyNkZWZpbmUgUlhfQlVGX1NJWkUgICAgICAgIChOQlJfT0ZfUlhfREVTQyAqIFJYX0RFU0NfQlVGX1NJWkUpCisKKy8qIFRoZSBudW1iZXIgb2YgZXBpZHMgaXMsIGFtb25nIG90aGVyIHRoaW5ncywgdXNlZCBmb3IgcHJlLWFsbG9jYXRpbmcKKyAgIGN0cmwsIGJ1bGsgYW5kIGlzb2MgRVAgZGVzY3JpcHRvcnMgKG9uZSBmb3IgZWFjaCBlcGlkKS4KKyAgIEFzc3VtZWQgdG8gYmUgPiAxIHdoZW4gaW5pdGlhdGluZyB0aGUgRE1BIGxpc3RzLiAqLworI2RlZmluZSBOQlJfT0ZfRVBJRFMgICAgICAgMzIKKworLyogU3VwcG9ydCBpbnRlcnJ1cHQgdHJhZmZpYyBpbnRlcnZhbHMgdXAgdG8gMTI4IG1zLiAqLworI2RlZmluZSBNQVhfSU5UUl9JTlRFUlZBTCAxMjgKKworLyogSWYgcGVyaW9kaWMgdHJhZmZpYyAoaW50ciBvciBpc29jKSBpcyB0byBiZSB1c2VkLCB0aGVuIG9uZSBlbnRyeSBpbiB0aGUgRVAgdGFibGUKKyAgIG11c3QgYmUgImludmFsaWQiLiBCeSB0aGlzIHdlIG1lYW4gdGhhdCB3ZSBzaG91bGRuJ3QgY2FyZSBhYm91dCBlcGlkIGF0dGVudGlvbnMKKyAgIGZvciB0aGlzIGVwaWQsIG9yIGF0IGxlYXN0IGhhbmRsZSB0aGVtIGRpZmZlcmVudGx5IGZyb20gZXBpZCBhdHRlbnRpb25zIGZvciAidmFsaWQiCisgICBlcGlkcy4gVGhpcyBkZWZpbmUgZGV0ZXJtaW5lcyB3aGljaCBvbmUgdG8gdXNlIChkb24ndCBjaGFuZ2UgaXQpLiAqLworI2RlZmluZSBJTlZBTElEX0VQSUQgICAgIDMxCisvKiBBIHNwZWNpYWwgZXBpZCBmb3IgdGhlIGJ1bGsgZHVtbXlzLiAqLworI2RlZmluZSBEVU1NWV9FUElEICAgICAgIDMwCisKKy8qIFRoaXMgaXMganVzdCBhIHNvZnR3YXJlIGNhY2hlIGZvciB0aGUgdmFsaWQgZW50cmllcyBpbiBSX1VTQl9FUFRfREFUQS4gKi8KK3N0YXRpYyBfX3UzMiBlcGlkX3VzYWdlX2JpdG1hc2s7CisKKy8qIEEgYml0ZmllbGQgdG8ga2VlcCBpbmZvcm1hdGlvbiBvbiBpbi9vdXQgdHJhZmZpYyBpcyBuZWVkZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkKKyAgIGFuIGVuZHBvaW50IG9uIGEgZGV2aWNlLCBzaW5jZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgd2hpY2ggaW5kaWNhdGVzIHRyYWZmaWMKKyAgIGRpcmVjdGlvbiBpcyBsYWNraW5nIGluIHRoZSBlcF9pZCBmaWVsZCAoRVRSQVggZXBpZHMgY2FuIGhhbmRsZSBib3RoIGluIGFuZAorICAgb3V0IHRyYWZmaWMgb24gZW5kcG9pbnRzIHRoYXQgYXJlIG90aGVyd2lzZSBpZGVudGljYWwpLiBUaGUgVVNCIGZyYW1ld29yaywgaG93ZXZlciwKKyAgIHJlbGllcyBvbiB0aGVtIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4gIEZvciBleGFtcGxlLCBidWxrIElOIGFuZCBPVVQgdXJicyBjYW5ub3QKKyAgIGJlIHF1ZXVlZCBpbiB0aGUgc2FtZSBsaXN0LCBzaW5jZSB0aGV5IHdvdWxkIGJsb2NrIGVhY2ggb3RoZXIuICovCitzdGF0aWMgX191MzIgZXBpZF9vdXRfdHJhZmZpYzsKKworLyogRE1BIElOIGNhY2hlIGJ1Zy4gQWxpZ24gdGhlIERNQSBJTiBidWZmZXJzIHRvIDMyIGJ5dGVzLCBpLmUuIGEgY2FjaGUgbGluZS4KKyAgIFNpbmNlIFJYX0RFU0NfQlVGX1NJWkUgaXMgMTAyNCBpcyBhIG11bHRpcGxlIG9mIDMyLCBhbGwgcnggYnVmZmVycyB3aWxsIGJlIGNhY2hlIGFsaWduZWQuICovCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBSeEJ1ZltSWF9CVUZfU0laRV0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9JTl9EZXNjX3QgUnhEZXNjTGlzdFtOQlJfT0ZfUlhfREVTQ10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKKy8qIFBvaW50ZXJzIGludG8gUnhEZXNjTGlzdC4gKi8KK3N0YXRpYyB2b2xhdGlsZSBVU0JfSU5fRGVzY190ICpteU5leHRSeERlc2M7CitzdGF0aWMgdm9sYXRpbGUgVVNCX0lOX0Rlc2NfdCAqbXlMYXN0UnhEZXNjOworc3RhdGljIHZvbGF0aWxlIFVTQl9JTl9EZXNjX3QgKm15UHJldlJ4RGVzYzsKKworLyogRVAgZGVzY3JpcHRvcnMgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4gKi8KK3N0YXRpYyB2b2xhdGlsZSBVU0JfRVBfRGVzY190IFR4Q3RybEVQTGlzdFtOQlJfT0ZfRVBJRFNdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhCdWxrRVBMaXN0W05CUl9PRl9FUElEU10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisvKiBBZnRlciBlYWNoIGVuYWJsZWQgYnVsayBFUCAoSU4gb3IgT1VUKSB3ZSBwdXQgdHdvIGRpc2FibGVkIEVQIGRlc2NyaXB0b3JzIHdpdGggdGhlIGVvbCBmbGFnIHNldCwKKyAgIGNhdXNpbmcgdGhlIERNQSB0byBzdG9wIHRoZSBETUEgY2hhbm5lbC4gVGhlIGZpcnN0IG9mIHRoZXNlIHR3byBoYXMgdGhlIGludHIgZmxhZyBzZXQsIHdoaWNoCisgICBnaXZlcyB1cyBhIGRtYThfc3ViMF9kZXNjciBpbnRlcnJ1cHQuIFdoZW4gd2UgcmVjZWl2ZSB0aGlzLCB3ZSBhZHZhbmNlIHRoZSBETUEgb25lIHN0ZXAgaW4gdGhlCisgICBFUCBsaXN0IGFuZCB0aGVuIHJlc3RhcnQgdGhlIGJ1bGsgY2hhbm5lbCwgdGh1cyBmb3JjaW5nIGEgc3dpdGNoIGJldHdlZW4gYnVsayBFUCBkZXNjcmlwdG9ycworICAgaW4gZWFjaCBmcmFtZS4gKi8KK3N0YXRpYyB2b2xhdGlsZSBVU0JfRVBfRGVzY190IFR4QnVsa0R1bW15RVBMaXN0W05CUl9PRl9FUElEU11bMl0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKK3N0YXRpYyB2b2xhdGlsZSBVU0JfRVBfRGVzY190IFR4SXNvY0VQTGlzdFtOQlJfT0ZfRVBJRFNdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgVHhJc29jU0Jfem91dCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKKworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhJbnRyRVBMaXN0W01BWF9JTlRSX0lOVEVSVkFMXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKK3N0YXRpYyB2b2xhdGlsZSBVU0JfU0JfRGVzY190IFR4SW50clNCX3pvdXQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKKy8qIEEgem91dCB0cmFuc2ZlciBtYWtlcyBhIG1lbW9yeSBhY2Nlc3MgYXQgdGhlIGFkZHJlc3Mgb2YgaXRzIGJ1ZiBwb2ludGVyLCB3aGljaCBtZWFucyB0aGF0IHNldHRpbmcKKyAgIHRoaXMgYnVmIHBvaW50ZXIgdG8gMCB3aWxsIGNhdXNlIGFuIGFjY2VzcyB0byB0aGUgZmxhc2guIEluIGFkZGl0aW9uIHRvIHRoaXMsIHNldHRpbmcgc3dfbGVuIHRvIDAKKyAgIHJlc3VsdHMgaW4gYSAxNi8zMiBieXRlcyAoZGVwZW5kaW5nIG9uIERNQSBidXJzdCBzaXplKSB0cmFuc2Zlci4gSW5zdGVhZCwgd2Ugc2V0IGl0IHRvIDEsIGFuZCBwb2ludAorICAgaXQgdG8gdGhpcyBidWZmZXIuICovCitzdGF0aWMgaW50IHpvdXRfYnVmZmVyWzRdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworCisvKiBDYWNoZSBmb3IgYWxsb2NhdGluZyBuZXcgRVAgYW5kIFNCIGRlc2NyaXB0b3JzLiAqLworc3RhdGljIGttZW1fY2FjaGVfdCAqdXNiX2Rlc2NfY2FjaGU7CisKKy8qIENhY2hlIGZvciB0aGUgcmVnaXN0ZXJzIGFsbG9jYXRlZCBpbiB0aGUgdG9wIGhhbGYuICovCitzdGF0aWMga21lbV9jYWNoZV90ICp0b3BfaGFsZl9yZWdfY2FjaGU7CisKKy8qIENhY2hlIGZvciB0aGUgZGF0YSBhbGxvY2F0ZWQgaW4gdGhlIGlzb2MgZGVzY3IgdG9wIGhhbGYuICovCitzdGF0aWMga21lbV9jYWNoZV90ICppc29jX2NvbXBsX2NhY2hlOworCitzdGF0aWMgc3RydWN0IHVzYl9idXMgKmV0cmF4X3VzYl9idXM7CisKKy8qIFRoaXMgaXMgYSBjaXJjdWxhciAoZG91YmxlLWxpbmtlZCkgbGlzdCBvZiB0aGUgYWN0aXZlIHVyYnMgZm9yIGVhY2ggZXBpZC4KKyAgIFRoZSBoZWFkIGlzIG5ldmVyIHJlbW92ZWQsIGFuZCBuZXcgdXJicyBhcmUgbGlua2VkIG9udG8gdGhlIGxpc3QgYXMKKyAgIHVyYl9lbnRyeV90IGVsZW1lbnRzLiBEb24ndCByZWZlcmVuY2UgdXJiX2xpc3QgZGlyZWN0bHk7IHVzZSB0aGUgd3JhcHBlcgorICAgZnVuY3Rpb25zIGluc3RlYWQuIE5vdGUgdGhhdCB3b3JraW5nIHdpdGggdGhlc2UgbGlzdHMgbWlnaHQgcmVxdWlyZSBzcGlubG9jaworICAgcHJvdGVjdGlvbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0W05CUl9PRl9FUElEU107CisKKy8qIFJlYWQgYWJvdXQgdGhlIG5lZWQgYW5kIHVzYWdlIG9mIHRoaXMgbG9jayBpbiBzdWJtaXRfY3RybF91cmIuICovCitzdGF0aWMgc3BpbmxvY2tfdCB1cmJfbGlzdF9sb2NrOworCisvKiBVc2VkIHdoZW4gdW5saW5raW5nIGFzeW5jaHJvbm91c2x5LiAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdXJiX3VubGlua19saXN0OworCisvKiBmb3IgcmV0dXJuaW5nIHN0cmluZyBkZXNjcmlwdG9ycyBpbiBVVEYtMTZMRSAqLworc3RhdGljIGludCBhc2NpaTJ1dGYgKGNoYXIgKmFzY2lpLCBfX3U4ICp1dGYsIGludCB1dGZtYXgpCit7CisJaW50IHJldHZhbDsKKworCWZvciAocmV0dmFsID0gMDsgKmFzY2lpICYmIHV0Zm1heCA+IDE7IHV0Zm1heCAtPSAyLCByZXR2YWwgKz0gMikgeworCQkqdXRmKysgPSAqYXNjaWkrKyAmIDB4N2Y7CisJCSp1dGYrKyA9IDA7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3Jvb3RfaHViX3N0cmluZyAoaW50IGlkLCBpbnQgc2VyaWFsLCBjaGFyICp0eXBlLCBfX3U4ICpkYXRhLCBpbnQgbGVuKQoreworCWNoYXIgYnVmIFszMF07CisKKwkvLyBhc3NlcnQgKGxlbiA+ICgyICogKHNpemVvZiAoYnVmKSArIDEpKSk7CisJLy8gYXNzZXJ0IChzdHJsZW4gKHR5cGUpIDw9IDgpOworCisJLy8gbGFuZ3VhZ2UgaWRzCisJaWYgKGlkID09IDApIHsKKwkJKmRhdGErKyA9IDQ7ICpkYXRhKysgPSAzOwkvKiA0IGJ5dGVzIGRhdGEgKi8KKwkJKmRhdGErKyA9IDA7ICpkYXRhKysgPSAwOwkvKiBzb21lIGxhbmd1YWdlIGlkICovCisJCXJldHVybiA0OworCisJLy8gc2VyaWFsIG51bWJlcgorCX0gZWxzZSBpZiAoaWQgPT0gMSkgeworCQlzcHJpbnRmIChidWYsICIleCIsIHNlcmlhbCk7CisKKwkvLyBwcm9kdWN0IGRlc2NyaXB0aW9uCisJfSBlbHNlIGlmIChpZCA9PSAyKSB7CisJCXNwcmludGYgKGJ1ZiwgIlVTQiAlcyBSb290IEh1YiIsIHR5cGUpOworCisJLy8gaWQgMyA9PSB2ZW5kb3IgZGVzY3JpcHRpb24KKworCS8vIHVuc3VwcG9ydGVkIElEcyAtLT4gInN0YWxsIgorCX0gZWxzZQorCSAgICByZXR1cm4gMDsKKworCWRhdGEgWzBdID0gMiArIGFzY2lpMnV0ZiAoYnVmLCBkYXRhICsgMiwgbGVuIC0gMik7CisJZGF0YSBbMV0gPSAzOworCXJldHVybiBkYXRhIFswXTsKK30KKworLyogV3JhcHBlcnMgYXJvdW5kIHRoZSBsaXN0IGZ1bmN0aW9ucyAoaW5jbHVkZS9saW51eC9saXN0LmgpLiAqLworCitzdGF0aWMgaW5saW5lIGludCB1cmJfbGlzdF9lbXB0eShpbnQgZXBpZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmdXJiX2xpc3RbZXBpZF0pOworfQorCisvKiBSZXR1cm5zIGZpcnN0IHVyYiBmb3IgdGhpcyBlcGlkLCBvciBOVUxMIGlmIGxpc3QgaXMgZW1wdHkuICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1cmIgKnVyYl9saXN0X2ZpcnN0KGludCBlcGlkKQoreworCXN0cnVjdCB1cmIgKmZpcnN0X3VyYiA9IDA7CisKKwlpZiAoIXVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCS8qIEdldCB0aGUgZmlyc3QgdXJiIChpLmUuIGhlYWQtPm5leHQpLiAqLworCQl1cmJfZW50cnlfdCAqdXJiX2VudHJ5ID0gbGlzdF9lbnRyeSgoJnVyYl9saXN0W2VwaWRdKS0+bmV4dCwgdXJiX2VudHJ5X3QsIGxpc3QpOworCQlmaXJzdF91cmIgPSB1cmJfZW50cnktPnVyYjsKKwl9CisJcmV0dXJuIGZpcnN0X3VyYjsKK30KKworLyogQWRkcyBhbiB1cmJfZW50cnkgbGFzdCBpbiB0aGUgbGlzdCBmb3IgdGhpcyBlcGlkLiAqLworc3RhdGljIGlubGluZSB2b2lkIHVyYl9saXN0X2FkZChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSAodXJiX2VudHJ5X3QgKilrbWFsbG9jKHNpemVvZih1cmJfZW50cnlfdCksIEtNQUxMT0NfRkxBRyk7CisJYXNzZXJ0KHVyYl9lbnRyeSk7CisKKwl1cmJfZW50cnktPnVyYiA9IHVyYjsKKwlsaXN0X2FkZF90YWlsKCZ1cmJfZW50cnktPmxpc3QsICZ1cmJfbGlzdFtlcGlkXSk7Cit9CisKKy8qIFNlYXJjaCB0aHJvdWdoIHRoZSBsaXN0IGZvciBhbiBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhpcyB1cmIuIChUaGUgbGlzdAorICAgaXMgZXhwZWN0ZWQgdG8gYmUgc2hvcnQgYW5kIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIGRlbGV0ZSB3aWxsIG9mdGVuIGJlCisgICB0aGUgZmlyc3QgaW4gdGhlIGxpc3QuKSAqLworc3RhdGljIGlubGluZSB1cmJfZW50cnlfdCAqX191cmJfbGlzdF9lbnRyeShzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwl1cmJfZW50cnlfdCAqdXJiX2VudHJ5OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0bXAsICZ1cmJfbGlzdFtlcGlkXSkgeworCQl1cmJfZW50cnkgPSBsaXN0X2VudHJ5KGVudHJ5LCB1cmJfZW50cnlfdCwgbGlzdCk7CisJCWFzc2VydCh1cmJfZW50cnkpOworCQlhc3NlcnQodXJiX2VudHJ5LT51cmIpOworCisJCWlmICh1cmJfZW50cnktPnVyYiA9PSB1cmIpIHsKKwkJCXJldHVybiB1cmJfZW50cnk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIERlbGV0ZSBhbiB1cmIgZnJvbSB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cmJfbGlzdF9kZWwoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCkKK3sKKwl1cmJfZW50cnlfdCAqdXJiX2VudHJ5ID0gX191cmJfbGlzdF9lbnRyeSh1cmIsIGVwaWQpOworCWFzc2VydCh1cmJfZW50cnkpOworCisJLyogRGVsZXRlIGVudHJ5IGFuZCBmcmVlLiAqLworCWxpc3RfZGVsKCZ1cmJfZW50cnktPmxpc3QpOworCWtmcmVlKHVyYl9lbnRyeSk7Cit9CisKKy8qIE1vdmUgYW4gdXJiIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXJiX2xpc3RfbW92ZV9sYXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJdXJiX2VudHJ5X3QgKnVyYl9lbnRyeSA9IF9fdXJiX2xpc3RfZW50cnkodXJiLCBlcGlkKTsKKwlhc3NlcnQodXJiX2VudHJ5KTsKKworCWxpc3RfZGVsKCZ1cmJfZW50cnktPmxpc3QpOworCWxpc3RfYWRkX3RhaWwoJnVyYl9lbnRyeS0+bGlzdCwgJnVyYl9saXN0W2VwaWRdKTsKK30KKworLyogR2V0IHRoZSBuZXh0IHVyYiBpbiB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVyYiAqdXJiX2xpc3RfbmV4dChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSBfX3VyYl9saXN0X2VudHJ5KHVyYiwgZXBpZCk7CisKKwlhc3NlcnQodXJiX2VudHJ5KTsKKworCWlmICh1cmJfZW50cnktPmxpc3QubmV4dCAhPSAmdXJiX2xpc3RbZXBpZF0pIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqZWxlbSA9IHVyYl9lbnRyeS0+bGlzdC5uZXh0OworCQl1cmJfZW50cnkgPSBsaXN0X2VudHJ5KGVsZW0sIHVyYl9lbnRyeV90LCBsaXN0KTsKKwkJcmV0dXJuIHVyYl9lbnRyeS0+dXJiOworCX0gZWxzZSB7CisJCXJldHVybiBOVUxMOworCX0KK30KKworCisKKy8qIEZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LiAqLworc3RhdGljIGlubGluZSB2b2lkIHVyYl9saXN0X2R1bXAoaW50IGVwaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVyYl9lbnRyeV90ICp1cmJfZW50cnk7CisJaW50IGkgPSAwOworCisJaW5mbygiRHVtcGluZyB1cmIgbGlzdCBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0bXAsICZ1cmJfbGlzdFtlcGlkXSkgeworCQl1cmJfZW50cnkgPSBsaXN0X2VudHJ5KGVudHJ5LCB1cmJfZW50cnlfdCwgbGlzdCk7CisJCWluZm8oIiAgIGVudHJ5ICVkLCB1cmIgPSAweCVseCIsIGksICh1bnNpZ25lZCBsb25nKXVyYl9lbnRyeS0+dXJiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcnhfYnVmZmVycyh2b2lkKTsKK3N0YXRpYyBpbnQgZXRyYXhfcmhfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgZXRyYXhfcmhfc2VuZF9pcnEoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBldHJheF9yaF9pbnRfdGltZXJfZG8odW5zaWduZWQgbG9uZyBwdHIpOworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9sb29rdXBfZXBpZChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBldHJheF91c2JfYWxsb2NhdGVfZXBpZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9mcmVlX2VwaWQoaW50IGVwaWQpOworCitzdGF0aWMgaW50IGV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiKTsKKworc3RhdGljIHZvaWQqIGV0cmF4X3VzYl9idWZmZXJfYWxsb2Moc3RydWN0IHVzYl9idXMqIGJ1cywgc2l6ZV90IHNpemUsIGludCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmRtYSk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfYnVmZmVyX2ZyZWUoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsIHZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgZG1hKTsKKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2FkZF90b19idWxrX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2N0cmxfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9faW50cl9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2FkZF90b19pc29jX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCk7CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9idWxrX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncyk7CitzdGF0aWMgaW50IGV0cmF4X3VzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9nZXRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KTsKKworc3RhdGljIGlycXJldHVybl90IGV0cmF4X3VzYl90eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqdmhjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZXRyYXhfdXNiX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICp2aGMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfaGNfaW50ZXJydXB0X3RvcF9oYWxmKGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2ludGVycnVwdF9ib3R0b21faGFsZih2b2lkICpkYXRhKTsKKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2lzb2NfZGVzY3JfaW50ZXJydXB0X2JvdHRvbV9oYWxmKHZvaWQgKmRhdGEpOworCisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGludGVycnVwdCBoYW5kbGVycyBmb3IgdGhlIGhvc3QgY29udHJvbGxlciBpbnRlcnJ1cHRzIHdlIHVzZS4KKyAgIFRoZXkgYXJlIGNhbGxlZCBmcm9tIGV0cmF4X3VzYl9oY19pbnRlcnJ1cHRfYm90dG9tX2hhbGYuICovCitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfaXNvY19lb2ZfaW50ZXJydXB0KHZvaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdChpbnQgdGltZXJfaW5kdWNlZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfZXBpZF9hdHRuX2ludGVycnVwdCh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX3BvcnRfc3RhdHVzX2ludGVycnVwdCh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2N0bF9zdGF0dXNfaW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZyk7CisKK3N0YXRpYyBpbnQgZXRyYXhfcmhfc3VibWl0X3VyYiAoc3RydWN0IHVyYiAqdXJiKTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBuZWVkZWQgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGluIHRoZSByeCBpbnRlcnJ1cHQgcm91dGluZS4gKi8KK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV9idWxrX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9oY19pbml0KHZvaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2NsZWFudXAodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgZXRyYXhfdXNiX2RldmljZV9vcGVyYXRpb25zID0KK3sKKwkuZ2V0X2ZyYW1lX251bWJlciA9IGV0cmF4X3VzYl9nZXRfZnJhbWVfbnVtYmVyLAorCS5zdWJtaXRfdXJiID0gZXRyYXhfdXNiX3N1Ym1pdF91cmIsCisJLnVubGlua191cmIgPSBldHJheF91c2JfdW5saW5rX3VyYiwKKyAgICAgICAgLmJ1ZmZlcl9hbGxvYyA9IGV0cmF4X3VzYl9idWZmZXJfYWxsb2MsCisgICAgICAgIC5idWZmZXJfZnJlZSA9IGV0cmF4X3VzYl9idWZmZXJfZnJlZQorfTsKKworLyogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBpbiB0aGVpciAiX18iIHZhcmlhbnRzLCBmb3IgdXNlIGluCisgICBlcnJvciBzaXR1YXRpb25zLiBUaGUgIl9fIiBtaXNzaW5nIHZhcmlhbnRzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBVU0JfREVCVUdfREVTQy8KKyAgIFVTQl9ERUJVR19VUkIgbWFjcm9zLiAqLworc3RhdGljIHZvaWQgX19kdW1wX3VyYihzdHJ1Y3QgdXJiKiBwdXJiKQoreworCXByaW50aygiXG51cmIgICAgICAgICAgICAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYik7CisJcHJpbnRrKCJkZXYgICAgICAgICAgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPmRldik7CisJcHJpbnRrKCJwaXBlICAgICAgICAgICAgICAgICAgOjB4JTA4eFxuIiwgcHVyYi0+cGlwZSk7CisJcHJpbnRrKCJzdGF0dXMgICAgICAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5zdGF0dXMpOworCXByaW50aygidHJhbnNmZXJfZmxhZ3MgICAgICAgIDoweCUwOHhcbiIsIHB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwlwcmludGsoInRyYW5zZmVyX2J1ZmZlciAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlwcmludGsoInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg6JWRcbiIsIHB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCXByaW50aygiYWN0dWFsX2xlbmd0aCAgICAgICAgIDolZFxuIiwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJcHJpbnRrKCJzZXR1cF9wYWNrZXQgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPnNldHVwX3BhY2tldCk7CisJcHJpbnRrKCJzdGFydF9mcmFtZSAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5zdGFydF9mcmFtZSk7CisJcHJpbnRrKCJudW1iZXJfb2ZfcGFja2V0cyAgICAgOiVkXG4iLCBwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJcHJpbnRrKCJpbnRlcnZhbCAgICAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5pbnRlcnZhbCk7CisJcHJpbnRrKCJlcnJvcl9jb3VudCAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5lcnJvcl9jb3VudCk7CisJcHJpbnRrKCJjb250ZXh0ICAgICAgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPmNvbnRleHQpOworCXByaW50aygiY29tcGxldGUgICAgICAgICAgICAgIDoweCUwOGx4XG5cbiIsICh1bnNpZ25lZCBsb25nKXB1cmItPmNvbXBsZXRlKTsKK30KKworc3RhdGljIHZvaWQgX19kdW1wX2luX2Rlc2Modm9sYXRpbGUgVVNCX0lOX0Rlc2NfdCAqaW4pCit7CisJcHJpbnRrKCJcblVTQl9JTl9EZXNjIGF0IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKWluKTsKKwlwcmludGsoIiAgc3dfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBpbi0+c3dfbGVuLCBpbi0+c3dfbGVuKTsKKwlwcmludGsoIiAgY29tbWFuZCA6IDB4JTA0eFxuIiwgaW4tPmNvbW1hbmQpOworCXByaW50aygiICBuZXh0ICAgIDogMHglMDhseFxuIiwgaW4tPm5leHQpOworCXByaW50aygiICBidWYgICAgIDogMHglMDhseFxuIiwgaW4tPmJ1Zik7CisJcHJpbnRrKCIgIGh3X2xlbiAgOiAweCUwNHggKCVkKVxuIiwgaW4tPmh3X2xlbiwgaW4tPmh3X2xlbik7CisJcHJpbnRrKCIgIHN0YXR1cyAgOiAweCUwNHhcblxuIiwgaW4tPnN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZHVtcF9zYl9kZXNjKHZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgKnNiKQoreworCWNoYXIgdHQgPSAoc2ItPmNvbW1hbmQgJiAweDMwKSA+PiA0OworCWNoYXIgKnR0X3N0cmluZzsKKworCXN3aXRjaCAodHQpIHsKKwljYXNlIDA6CisJCXR0X3N0cmluZyA9ICJ6b3V0IjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0dF9zdHJpbmcgPSAiaW4iOworCQlicmVhazsKKwljYXNlIDI6CisJCXR0X3N0cmluZyA9ICJvdXQiOworCQlicmVhazsKKwljYXNlIDM6CisJCXR0X3N0cmluZyA9ICJzZXR1cCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXR0X3N0cmluZyA9ICJ1bmtub3duICh3ZWlyZCkiOworCX0KKworCXByaW50aygiXG4gICBVU0JfU0JfRGVzYyBhdCAweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZylzYik7CisJcHJpbnRrKCIgICAgIGNvbW1hbmQgOiAweCUwNHhcbiIsIHNiLT5jb21tYW5kKTsKKwlwcmludGsoIiAgICAgICAgcmVtICAgICA6ICVkXG4iLCAoc2ItPmNvbW1hbmQgJiAweDNmMDApID4+IDgpOworCXByaW50aygiICAgICAgICBmdWxsICAgIDogJWRcbiIsIChzYi0+Y29tbWFuZCAmIDB4NDApID4+IDYpOworCXByaW50aygiICAgICAgICB0dCAgICAgIDogJWQgKCVzKVxuIiwgdHQsIHR0X3N0cmluZyk7CisJcHJpbnRrKCIgICAgICAgIGludHIgICAgOiAlZFxuIiwgKHNiLT5jb21tYW5kICYgMHg4KSA+PiAzKTsKKwlwcmludGsoIiAgICAgICAgZW90ICAgICA6ICVkXG4iLCAoc2ItPmNvbW1hbmQgJiAweDIpID4+IDEpOworCXByaW50aygiICAgICAgICBlb2wgICAgIDogJWRcbiIsIHNiLT5jb21tYW5kICYgMHgxKTsKKwlwcmludGsoIiAgICAgc3dfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBzYi0+c3dfbGVuLCBzYi0+c3dfbGVuKTsKKwlwcmludGsoIiAgICAgbmV4dCAgICA6IDB4JTA4bHhcbiIsIHNiLT5uZXh0KTsKKwlwcmludGsoIiAgICAgYnVmICAgICA6IDB4JTA4bHhcblxuIiwgc2ItPmJ1Zik7Cit9CisKKworc3RhdGljIHZvaWQgX19kdW1wX2VwX2Rlc2Modm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZXApCit7CisJcHJpbnRrKCJcblVTQl9FUF9EZXNjIGF0IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKWVwKTsKKwlwcmludGsoIiAgY29tbWFuZCA6IDB4JTA0eFxuIiwgZXAtPmNvbW1hbmQpOworCXByaW50aygiICAgICBlcF9pZCAgIDogJWRcbiIsIChlcC0+Y29tbWFuZCAmIDB4MWYwMCkgPj4gOCk7CisJcHJpbnRrKCIgICAgIGVuYWJsZSAgOiAlZFxuIiwgKGVwLT5jb21tYW5kICYgMHgxMCkgPj4gNCk7CisJcHJpbnRrKCIgICAgIGludHIgICAgOiAlZFxuIiwgKGVwLT5jb21tYW5kICYgMHg4KSA+PiAzKTsKKwlwcmludGsoIiAgICAgZW9mICAgICA6ICVkXG4iLCAoZXAtPmNvbW1hbmQgJiAweDIpID4+IDEpOworCXByaW50aygiICAgICBlb2wgICAgIDogJWRcbiIsIGVwLT5jb21tYW5kICYgMHgxKTsKKwlwcmludGsoIiAgaHdfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBlcC0+aHdfbGVuLCBlcC0+aHdfbGVuKTsKKwlwcmludGsoIiAgbmV4dCAgICA6IDB4JTA4bHhcbiIsIGVwLT5uZXh0KTsKKwlwcmludGsoIiAgc3ViICAgICA6IDB4JTA4bHhcblxuIiwgZXAtPnN1Yik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2R1bXBfZXBfbGlzdChpbnQgcGlwZV90eXBlKQoreworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKmVwOworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKmZpcnN0X2VwOworCXZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgKnNiOworCisJc3dpdGNoIChwaXBlX3R5cGUpCisJeworCWNhc2UgUElQRV9CVUxLOgorCQlmaXJzdF9lcCA9ICZUeEJ1bGtFUExpc3RbMF07CisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCQlmaXJzdF9lcCA9ICZUeEN0cmxFUExpc3RbMF07CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCWZpcnN0X2VwID0gJlR4SW50ckVQTGlzdFswXTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlmaXJzdF9lcCA9ICZUeElzb2NFUExpc3RbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdhcm4oIkNhbm5vdCBkdW1wIHVua25vd24gdHJhZmZpYyB0eXBlIik7CisJCXJldHVybjsKKwl9CisJZXAgPSBmaXJzdF9lcDsKKworCXByaW50aygiXG5cbkR1bXBpbmcgRVAgbGlzdC4uLlxuXG4iKTsKKworCWRvIHsKKwkJX19kdW1wX2VwX2Rlc2MoZXApOworCQkvKiBDYW5ub3QgcGh5c190b192aXJ0IG9uIDAgYXMgaXQgdHVybnMgaW50byA4MDAwMDAwMCwgd2hpY2ggaXMgIT0gMC4gKi8KKwkJc2IgPSBlcC0+c3ViID8gcGh5c190b192aXJ0KGVwLT5zdWIpIDogMDsKKwkJd2hpbGUgKHNiKSB7CisJCQlfX2R1bXBfc2JfZGVzYyhzYik7CisJCQlzYiA9IHNiLT5uZXh0ID8gcGh5c190b192aXJ0KHNiLT5uZXh0KSA6IDA7CisJCX0KKwkJZXAgPSAodm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqKShwaHlzX3RvX3ZpcnQoZXAtPm5leHQpKTsKKworCX0gd2hpbGUgKGVwICE9IGZpcnN0X2VwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZHVtcF9lcHRfZGF0YShpbnQgZXBpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTMyIHJfdXNiX2VwdF9kYXRhOworCisJaWYgKGVwaWQgPCAwIHx8IGVwaWQgPiAzMSkgeworCQlwcmludGsoIkNhbm5vdCBkdW1wIGVwdCBkYXRhIGZvciBpbnZhbGlkIGVwaWQgJWRcbiIsIGVwaWQpOworCQlyZXR1cm47CisJfQorCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBOworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJcHJpbnRrKCJcblJfVVNCX0VQVF9EQVRBID0gMHgleCBmb3IgZXBpZCAlZCA6XG4iLCByX3VzYl9lcHRfZGF0YSwgZXBpZCk7CisJaWYgKHJfdXNiX2VwdF9kYXRhID09IDApIHsKKwkJLyogTm8gbmVlZCBmb3IgbW9yZSBkZXRhaWxlZCBwcmludGluZy4gKi8KKwkJcmV0dXJuOworCX0KKwlwcmludGsoIiAgdmFsaWQgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4ODAwMDAwMDApID4+IDMxKTsKKwlwcmludGsoIiAgaG9sZCAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4NDAwMDAwMDApID4+IDMwKTsKKwlwcmludGsoIiAgZXJyb3JfY291bnRfaW4gIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MzAwMDAwMDApID4+IDI4KTsKKwlwcmludGsoIiAgdF9pbiAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDgwMDAwMDApID4+IDI3KTsKKwlwcmludGsoIiAgbG93X3NwZWVkICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDQwMDAwMDApID4+IDI2KTsKKwlwcmludGsoIiAgcG9ydCAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDMwMDAwMDApID4+IDI0KTsKKwlwcmludGsoIiAgZXJyb3JfY29kZSAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDBjMDAwMDApID4+IDIyKTsKKwlwcmludGsoIiAgdF9vdXQgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAyMDAwMDApID4+IDIxKTsKKwlwcmludGsoIiAgZXJyb3JfY291bnRfb3V0IDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAxODAwMDApID4+IDE5KTsKKwlwcmludGsoIiAgbWF4X2xlbiAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAwM2Y4MDApID4+IDExKTsKKwlwcmludGsoIiAgZXAgICAgICAgICAgICAgIDogJWRcbiIsIChyX3VzYl9lcHRfZGF0YSAmIDB4MDAwMDA3ODApID4+IDcpOworCXByaW50aygiICBkZXYgICAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMDAwMDAzZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kdW1wX2VwdF9kYXRhX2xpc3Qodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50aygiRHVtcGluZyB0aGUgd2hvbGUgUl9VU0JfRVBUX0RBVEEgbGlzdFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlfX2R1bXBfZXB0X2RhdGEoaSk7CisJfQorfQorI2lmZGVmIFVTQl9ERUJVR19ERVNDCisjZGVmaW5lIGR1bXBfaW5fZGVzYyguLi4pIF9fZHVtcF9pbl9kZXNjKC4uLikKKyNkZWZpbmUgZHVtcF9zYl9kZXNjKC4uLikgX19kdW1wX3NiX2Rlc2MoLi4uKQorI2RlZmluZSBkdW1wX2VwX2Rlc2MoLi4uKSBfX2R1bXBfZXBfZGVzYyguLi4pCisjZWxzZQorI2RlZmluZSBkdW1wX2luX2Rlc2MoLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVtcF9zYl9kZXNjKC4uLikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGR1bXBfZXBfZGVzYyguLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfVVJCCisjZGVmaW5lIGR1bXBfdXJiKHgpICAgICBfX2R1bXBfdXJiKHgpCisjZWxzZQorI2RlZmluZSBkdW1wX3VyYih4KSAgICAgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgaW5pdF9yeF9idWZmZXJzKHZvaWQpCit7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCWZvciAoaSA9IDA7IGkgPCAoTkJSX09GX1JYX0RFU0MgLSAxKTsgaSsrKSB7CisJCVJ4RGVzY0xpc3RbaV0uc3dfbGVuID0gUlhfREVTQ19CVUZfU0laRTsKKwkJUnhEZXNjTGlzdFtpXS5jb21tYW5kID0gMDsKKwkJUnhEZXNjTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZSeERlc2NMaXN0W2kgKyAxXSk7CisJCVJ4RGVzY0xpc3RbaV0uYnVmID0gdmlydF90b19waHlzKFJ4QnVmICsgKGkgKiBSWF9ERVNDX0JVRl9TSVpFKSk7CisJCVJ4RGVzY0xpc3RbaV0uaHdfbGVuID0gMDsKKwkJUnhEZXNjTGlzdFtpXS5zdGF0dXMgPSAwOworCisJCS8qIERNQSBJTiBjYWNoZSBidWcuIChzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyIGhhcyB0aGUgc2FtZSBsYXlvdXQgYXMgVVNCX0lOX0Rlc2MKKwkJICAgZm9yIHRoZSByZWxldmFudCBmaWVsZHMuKSAqLworCQlwcmVwYXJlX3J4X2Rlc2NyaXB0b3IoKHN0cnVjdCBldHJheF9kbWFfZGVzY3IqKSZSeERlc2NMaXN0W2ldKTsKKworCX0KKworCVJ4RGVzY0xpc3RbaV0uc3dfbGVuID0gUlhfREVTQ19CVUZfU0laRTsKKwlSeERlc2NMaXN0W2ldLmNvbW1hbmQgPSBJT19TVEFURShVU0JfSU5fY29tbWFuZCwgZW9sLCB5ZXMpOworCVJ4RGVzY0xpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmUnhEZXNjTGlzdFswXSk7CisJUnhEZXNjTGlzdFtpXS5idWYgPSB2aXJ0X3RvX3BoeXMoUnhCdWYgKyAoaSAqIFJYX0RFU0NfQlVGX1NJWkUpKTsKKwlSeERlc2NMaXN0W2ldLmh3X2xlbiA9IDA7CisJUnhEZXNjTGlzdFtpXS5zdGF0dXMgPSAwOworCisJbXlOZXh0UnhEZXNjID0gJlJ4RGVzY0xpc3RbMF07CisJbXlMYXN0UnhEZXNjID0gJlJ4RGVzY0xpc3RbTkJSX09GX1JYX0RFU0MgLSAxXTsKKwlteVByZXZSeERlc2MgPSAmUnhEZXNjTGlzdFtOQlJfT0ZfUlhfREVTQyAtIDFdOworCisJKlJfRE1BX0NIOV9GSVJTVCA9IHZpcnRfdG9fcGh5cyhteU5leHRSeERlc2MpOworCSpSX0RNQV9DSDlfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g5X0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBpbml0X3R4X2J1bGtfZXAodm9pZCkKK3sKKwlpbnQgaTsKKworCURCRkVOVEVSOworCisJZm9yIChpID0gMDsgaSA8IChOQlJfT0ZfRVBJRFMgLSAxKTsgaSsrKSB7CisJCUNIRUNLX0FMSUdOKCZUeEJ1bGtFUExpc3RbaV0pOworCQlUeEJ1bGtFUExpc3RbaV0uaHdfbGVuID0gMDsKKwkJVHhCdWxrRVBMaXN0W2ldLmNvbW1hbmQgPSBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgaSk7CisJCVR4QnVsa0VQTGlzdFtpXS5zdWIgPSAwOworCQlUeEJ1bGtFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0W2kgKyAxXSk7CisKKwkJLyogSW5pdGlhdGUgdHdvIEVQcywgZGlzYWJsZWQgYW5kIHdpdGggdGhlIGVvbCBmbGFnIHNldC4gTm8gbmVlZCBmb3IgYW55CisJCSAgIHByZXNlcnZlZCBlcGlkLiAqLworCisJCS8qIFRoZSBmaXJzdCBvbmUgaGFzIHRoZSBpbnRyIGZsYWcgc2V0IHNvIHdlIGdldCBhbiBpbnRlcnJ1cHQgd2hlbiB0aGUgRE1BCisJCSAgIGNoYW5uZWwgaXMgYWJvdXQgdG8gYmVjb21lIGRpc2FibGVkLiAqLworCQlDSEVDS19BTElHTigmVHhCdWxrRHVtbXlFUExpc3RbaV1bMF0pOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVswXS5od19sZW4gPSAwOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVswXS5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBEVU1NWV9FUElEKSB8CisJCQkJCQkgICBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBpbnRyLCB5ZXMpKTsKKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMF0uc3ViID0gMDsKKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMF0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0pOworCisJCS8qIFRoZSBzZWNvbmQgb25lLiAqLworCQlDSEVDS19BTElHTigmVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0pOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXS5od19sZW4gPSAwOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXS5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBEVU1NWV9FUElEKSB8CisJCQkJCQkgICBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0uc3ViID0gMDsKKwkJLyogVGhlIGxhc3QgZHVtbXkncyBuZXh0IHBvaW50ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgRVAncyBuZXh0IHBvaW50ZXIuICovCisJCVR4QnVsa0R1bW15RVBMaXN0W2ldWzFdLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtpICsgMV0pOworCX0KKworCS8qIENvbmZpZ3VyZSB0aGUgbGFzdCBvbmUuICovCisJQ0hFQ0tfQUxJR04oJlR4QnVsa0VQTGlzdFtpXSk7CisJVHhCdWxrRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJVHhCdWxrRVBMaXN0W2ldLmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVvbCwgeWVzKSB8CisJCQkJICAgSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIGkpKTsKKwlUeEJ1bGtFUExpc3RbaV0uc3ViID0gMDsKKwlUeEJ1bGtFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0WzBdKTsKKworCS8qIE5vIG5lZWQgY29uZmlndXJpbmcgZHVtbXkgRVBzIGZvciB0aGUgbGFzdCBvbmUgYXMgaXQgd2lsbCBuZXZlciBiZSB1c2VkIGZvcgorCSAgIGJ1bGsgdHJhZmZpYyAoaSA9PSBJTlZBTERfRVBJRCBhdCB0aGlzIHBvaW50KS4gKi8KKworCS8qIFNldCB1cCB0byBzdGFydCBvbiB0aGUgbGFzdCBFUCBzbyB3ZSB3aWxsIGVuYWJsZSBpdCB3aGVuIGluc2VydGluZyB0cmFmZmljCisJICAgZm9yIHRoZSBmaXJzdCB0aW1lIChpbWl0YXRpbmcgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgRE1BIGhhcyBzdG9wcGVkCisJICAgYmVjYXVzZSB0aGVyZSB3YXMgbm8gbW9yZSB0cmFmZmljKS4gKi8KKwkqUl9ETUFfQ0g4X1NVQjBfRVAgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtpXSk7CisJLyogTm8gcG9pbnQgaW4gc3RhcnRpbmcgdGhlIGJ1bGsgY2hhbm5lbCB5ZXQuCisJICpSX0RNQV9DSDhfU1VCMF9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCwgc3RhcnQpOyAqLworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHhfY3RybF9lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwlmb3IgKGkgPSAwOyBpIDwgKE5CUl9PRl9FUElEUyAtIDEpOyBpKyspIHsKKwkJQ0hFQ0tfQUxJR04oJlR4Q3RybEVQTGlzdFtpXSk7CisJCVR4Q3RybEVQTGlzdFtpXS5od19sZW4gPSAwOworCQlUeEN0cmxFUExpc3RbaV0uY29tbWFuZCA9IElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBpKTsKKwkJVHhDdHJsRVBMaXN0W2ldLnN1YiA9IDA7CisJCVR4Q3RybEVQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEN0cmxFUExpc3RbaSArIDFdKTsKKwl9CisKKwlDSEVDS19BTElHTigmVHhDdHJsRVBMaXN0W2ldKTsKKwlUeEN0cmxFUExpc3RbaV0uaHdfbGVuID0gMDsKKwlUeEN0cmxFUExpc3RbaV0uY29tbWFuZCA9IChJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJCQkgICBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgaSkpOworCisJVHhDdHJsRVBMaXN0W2ldLnN1YiA9IDA7CisJVHhDdHJsRVBMaXN0W2ldLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4Q3RybEVQTGlzdFswXSk7CisKKwkqUl9ETUFfQ0g4X1NVQjFfRVAgPSB2aXJ0X3RvX3BoeXMoJlR4Q3RybEVQTGlzdFswXSk7CisJKlJfRE1BX0NIOF9TVUIxX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIxX0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCisKK3N0YXRpYyB2b2lkIGluaXRfdHhfaW50cl9lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIGNvbW1lbnQgYXQgem91dF9idWZmZXIgZGVjbGFyYXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIHRvIHRoaXMuICovCisJVHhJbnRyU0Jfem91dC5zd19sZW4gPSAxOworCVR4SW50clNCX3pvdXQubmV4dCA9IDA7CisJVHhJbnRyU0Jfem91dC5idWYgPSB2aXJ0X3RvX3BoeXMoJnpvdXRfYnVmZmVyWzBdKTsKKwlUeEludHJTQl96b3V0LmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKE1BWF9JTlRSX0lOVEVSVkFMIC0gMSk7IGkrKykgeworCQlDSEVDS19BTElHTigmVHhJbnRyRVBMaXN0W2ldKTsKKwkJVHhJbnRyRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJCVR4SW50ckVQTGlzdFtpXS5jb21tYW5kID0KKwkJCShJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9mLCB5ZXMpIHwKKwkJCSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpIHwKKwkJCSBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgSU5WQUxJRF9FUElEKSk7CisJCVR4SW50ckVQTGlzdFtpXS5zdWIgPSB2aXJ0X3RvX3BoeXMoJlR4SW50clNCX3pvdXQpOworCQlUeEludHJFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhJbnRyRVBMaXN0W2kgKyAxXSk7CisJfQorCisJQ0hFQ0tfQUxJR04oJlR4SW50ckVQTGlzdFtpXSk7CisJVHhJbnRyRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJVHhJbnRyRVBMaXN0W2ldLmNvbW1hbmQgPQorCQkoSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVvZiwgeWVzKSB8CisJCSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykgfAorCQkgSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIElOVkFMSURfRVBJRCkpOworCVR4SW50ckVQTGlzdFtpXS5zdWIgPSB2aXJ0X3RvX3BoeXMoJlR4SW50clNCX3pvdXQpOworCVR4SW50ckVQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEludHJFUExpc3RbMF0pOworCisJKlJfRE1BX0NIOF9TVUIyX0VQID0gdmlydF90b19waHlzKCZUeEludHJFUExpc3RbMF0pOworCSpSX0RNQV9DSDhfU1VCMl9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMl9DTUQsIGNtZCwgc3RhcnQpOworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHhfaXNvY19lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIGNvbW1lbnQgYXQgem91dF9idWZmZXIgZGVjbGFyYXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIHRvIHRoaXMuICovCisJVHhJc29jU0Jfem91dC5zd19sZW4gPSAxOworCVR4SXNvY1NCX3pvdXQubmV4dCA9IDA7CisJVHhJc29jU0Jfem91dC5idWYgPSB2aXJ0X3RvX3BoeXMoJnpvdXRfYnVmZmVyWzBdKTsKKwlUeElzb2NTQl96b3V0LmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkvKiBUaGUgbGFzdCBpc29jaHJvbm91cyBFUCBkZXNjcmlwdG9yIGlzIGEgZHVtbXkuICovCisKKwlmb3IgKGkgPSAwOyBpIDwgKE5CUl9PRl9FUElEUyAtIDEpOyBpKyspIHsKKwkJQ0hFQ0tfQUxJR04oJlR4SXNvY0VQTGlzdFtpXSk7CisJCVR4SXNvY0VQTGlzdFtpXS5od19sZW4gPSAwOworCQlUeElzb2NFUExpc3RbaV0uY29tbWFuZCA9IElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBpKTsKKwkJVHhJc29jRVBMaXN0W2ldLnN1YiA9IDA7CisJCVR4SXNvY0VQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbaSArIDFdKTsKKwl9CisKKwlDSEVDS19BTElHTigmVHhJc29jRVBMaXN0W2ldKTsKKwlUeElzb2NFUExpc3RbaV0uaHdfbGVuID0gMDsKKworCS8qIE11c3QgZW5hYmxlIHRoZSBsYXN0IEVQIGRlc2NyIHRvIGdldCBlb2YgaW50ZXJydXB0LiAqLworCVR4SXNvY0VQTGlzdFtpXS5jb21tYW5kID0gKElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykgfAorCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2YsIHllcykgfAorCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2wsIHllcykgfAorCQkJCSAgIElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBJTlZBTElEX0VQSUQpKTsKKwlUeElzb2NFUExpc3RbaV0uc3ViID0gdmlydF90b19waHlzKCZUeElzb2NTQl96b3V0KTsKKwlUeElzb2NFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhJc29jRVBMaXN0WzBdKTsKKworCSpSX0RNQV9DSDhfU1VCM19FUCA9IHZpcnRfdG9fcGh5cygmVHhJc29jRVBMaXN0WzBdKTsKKwkqUl9ETUFfQ0g4X1NVQjNfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjNfQ01ELCBjbWQsIHN0YXJ0KTsKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl91bmxpbmtfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKmZpcnN0X2VwOyAgLyogRmlyc3QgRVAgaW4gdGhlIGxpc3QuICovCisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqY3Vycl9lcDsgICAvKiBDdXJyZW50IEVQLCB0aGUgaXRlcmF0b3IuICovCisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqbmV4dF9lcDsgICAvKiBUaGUgRVAgYWZ0ZXIgY3VycmVudC4gKi8KKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICp1bmxpbmtfZXA7IC8qIFRoZSBvbmUgd2Ugc2hvdWxkIHJlbW92ZSBmcm9tIHRoZSBsaXN0LiAqLworCisJaW50IGVwaWQ7CisKKwkvKiBSZWFkIDguOC40IGluIERlc2lnbmVyJ3MgUmVmZXJlbmNlLCAiUmVtb3ZpbmcgYW4gRVAgRGVzY3JpcHRvciBmcm9tIHRoZSBMaXN0Ii4gKi8KKworCURCRkVOVEVSOworCisJZXBpZCA9ICgoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2KS0+ZXBpZDsKKworCWZpcnN0X2VwID0gJlR4SW50ckVQTGlzdFswXTsKKwljdXJyX2VwID0gZmlyc3RfZXA7CisKKworCS8qIE5vdGUgdGhhdCB0aGlzIGxvb3AgcmVtb3ZlcyBhbGwgRVAgZGVzY3JpcHRvcnMgd2l0aCB0aGlzIGVwaWQuIFRoaXMgYXNzdW1lcworCSAgIHRoYXQgYWxsIEVQIGRlc2NyaXB0b3JzIGJlbG9uZyB0byB0aGUgb25lIGFuZCBvbmx5IHVyYiBmb3IgdGhpcyBlcGlkLiAqLworCisJZG8geworCQluZXh0X2VwID0gKFVTQl9FUF9EZXNjX3QgKilwaHlzX3RvX3ZpcnQoY3Vycl9lcC0+bmV4dCk7CisKKwkJaWYgKElPX0VYVFJBQ1QoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIG5leHRfZXAtPmNvbW1hbmQpID09IGVwaWQpIHsKKworCQkJZGJnX2ludHIoIkZvdW5kIEVQIHRvIHVubGluayBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCQkvKiBUaGlzIGlzIHRoZSBvbmUgd2Ugc2hvdWxkIHVubGluay4gKi8KKwkJCXVubGlua19lcCA9IG5leHRfZXA7CisKKwkJCS8qIEFjdHVhbGx5IHVubGluayB0aGUgRVAgZnJvbSB0aGUgRE1BIGxpc3QuICovCisJCQljdXJyX2VwLT5uZXh0ID0gdW5saW5rX2VwLT5uZXh0OworCisJCQkvKiBXYWl0IHVudGlsIHRoZSBETUEgaXMgbm8gbG9uZ2VyIGF0IHRoaXMgZGVzY3JpcHRvci4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjJfRVAgPT0gdmlydF90b19waHlzKHVubGlua19lcCkpOworCisJCQkvKiBOb3cgd2UgYXJlIGZyZWUgdG8gcmVtb3ZlIGl0IGFuZCBpdHMgU0IgZGVzY3JpcHRvci4KKwkJCSAgIE5vdGUgdGhhdCBpdCBpcyBhc3N1bWVkIGhlcmUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBzYiBpbiB0aGUKKwkJCSAgIHNiIGxpc3QgZm9yIHRoaXMgZXAuICovCisJCQlrbWVtX2NhY2hlX2ZyZWUodXNiX2Rlc2NfY2FjaGUsIHBoeXNfdG9fdmlydCh1bmxpbmtfZXAtPnN1YikpOworCQkJa21lbV9jYWNoZV9mcmVlKHVzYl9kZXNjX2NhY2hlLCAoVVNCX0VQX0Rlc2NfdCAqKXVubGlua19lcCk7CisJCX0KKworCQljdXJyX2VwID0gcGh5c190b192aXJ0KGN1cnJfZXAtPm5leHQpOworCisJfSB3aGlsZSAoY3Vycl9lcCAhPSBmaXJzdF9lcCk7CisgICAgICAgIHVyYi0+aGNwcml2ID0gTlVMTDsKK30KKwordm9pZCBldHJheF91c2JfZG9faW50cl9yZWNvdmVyKGludCBlcGlkKQoreworCVVTQl9FUF9EZXNjX3QgKmZpcnN0X2VwLCAqdG1wX2VwOworCisJREJGRU5URVI7CisKKwlmaXJzdF9lcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KCpSX0RNQV9DSDhfU1VCMl9FUCk7CisJdG1wX2VwID0gZmlyc3RfZXA7CisKKwkvKiBXaGF0IHRoaXMgZG9lcyBpcyBzaW1wbHkgdG8gd2FsayB0aGUgbGlzdCBvZiBpbnRlcnJ1cHQKKwkgICBlcCBkZXNjcmlwdG9ycyBhbmQgZW5hYmxlIHRob3NlIHRoYXQgYXJlIGRpc2FibGVkLiAqLworCisJZG8geworCQlpZiAoSU9fRVhUUkFDVChVU0JfRVBfY29tbWFuZCwgZXBpZCwgdG1wX2VwLT5jb21tYW5kKSA9PSBlcGlkICYmCisJCSAgICAhKHRtcF9lcC0+Y29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKSB7CisJCQl0bXBfZXAtPmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKwkJfQorCisJCXRtcF9lcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KHRtcF9lcC0+bmV4dCk7CisKKwl9IHdoaWxlICh0bXBfZXAgIT0gZmlyc3RfZXApOworCisKKwlEQkZFWElUOworfQorCitzdGF0aWMgaW50IGV0cmF4X3JoX3VubGlua191cmIgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlldHJheF9oY190ICpoYzsKKworCURCRkVOVEVSOworCisJaGMgPSB1cmItPmRldi0+YnVzLT5oY3ByaXY7CisKKwlpZiAoaGMtPnJoLnVyYiA9PSB1cmIpIHsKKwkJaGMtPnJoLnNlbmQgPSAwOworCQlkZWxfdGltZXIoJmhjLT5yaC5yaF9pbnRfdGltZXIpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX3NlbmRfaXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlfX3UxNiBkYXRhID0gMDsKKwlldHJheF9oY190ICpoYyA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKwlEQkZFTlRFUjsKKworLyoKKyAgZGJnX3JoKCJSX1VTQl9GTV9OVU1CRVIgICA6IDB4JTA4WCIsICpSX1VTQl9GTV9OVU1CRVIpOworICBkYmdfcmgoIlJfVVNCX0ZNX1JFTUFJTklORzogMHglMDhYIiwgKlJfVVNCX0ZNX1JFTUFJTklORyk7CisqLworCisJZGF0YSB8PSAoaGMtPnJoLndQb3J0Q2hhbmdlXzEpID8gKDEgPDwgMSkgOiAwOworCWRhdGEgfD0gKGhjLT5yaC53UG9ydENoYW5nZV8yKSA/ICgxIDw8IDIpIDogMDsKKworCSooKF9fdTE2ICopdXJiLT50cmFuc2Zlcl9idWZmZXIpID0gY3B1X3RvX2xlMTYoZGF0YSk7CisJLyogRklYTUU6IFdoeSBpcyBhY3R1YWxfbGVuZ3RoIHNldCB0byAxIHdoZW4gZGF0YSBpcyAyIGJ5dGVzPworCSAgIFNpbmNlIG9ubHkgMSBieXRlIGlzIHVzZWQsIHdoeSBub3QgZGVjbGFyZSBkYXRhIGFzIF9fdTg/ICovCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMTsKKwl1cmItPnN0YXR1cyA9IDA7CisKKwlpZiAoaGMtPnJoLnNlbmQgJiYgdXJiLT5jb21wbGV0ZSkgeworCQlkYmdfcmgoIndQb3J0Q2hhbmdlXzE6IDB4JTA0WCIsIGhjLT5yaC53UG9ydENoYW5nZV8xKTsKKwkJZGJnX3JoKCJ3UG9ydENoYW5nZV8yOiAweCUwNFgiLCBoYy0+cmgud1BvcnRDaGFuZ2VfMik7CisKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlldHJheF9oY190ICpoYzsKKworCURCRkVOVEVSOworCisJaGMgPSB1cmItPmRldi0+YnVzLT5oY3ByaXY7CisJaGMtPnJoLmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwlpbml0X3RpbWVyKCZoYy0+cmgucmhfaW50X3RpbWVyKTsKKwloYy0+cmgucmhfaW50X3RpbWVyLmZ1bmN0aW9uID0gZXRyYXhfcmhfaW50X3RpbWVyX2RvOworCWhjLT5yaC5yaF9pbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwkvKiBGSVhNRTogSXMgdGhlIGppZmZpZXMgcmVzb2x1dGlvbiBlbm91Z2g/IEFsbCBpbnRlcnZhbHMgPCAxMCBtcyB3aWxsIGJlIG1hcHBlZAorCSAgIHRvIDAsIGFuZCB0aGUgcmVzdCB0byB0aGUgbmVhcmVzdCBsb3dlciAxMCBtcy4gKi8KKwloYy0+cmgucmhfaW50X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKChIWiAqIGhjLT5yaC5pbnRlcnZhbCkgLyAxMDAwKTsKKwlhZGRfdGltZXIoJmhjLT5yaC5yaF9pbnRfdGltZXIpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfcmhfaW50X3RpbWVyX2RvKHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlldHJheF9oY190ICpoYzsKKworCURCRkVOVEVSOworCisJdXJiID0gKHN0cnVjdCB1cmIqKXB0cjsKKwloYyA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKworCWlmIChoYy0+cmguc2VuZCkgeworCQlldHJheF9yaF9zZW5kX2lycSh1cmIpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3NldHVwX2VwaWQoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcGlkOworCWNoYXIgZGV2bnVtLCBlbmRwb2ludCwgb3V0X3RyYWZmaWMsIHNsb3c7CisJaW50IG1heGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJGRU5URVI7CisKKwllcGlkID0gZXRyYXhfdXNiX2xvb2t1cF9lcGlkKHVyYik7CisJaWYgKChlcGlkICE9IC0xKSl7CisJCS8qIEFuIGVwaWQgdGhhdCBmaXRzIHRoaXMgdXJiIGhhcyBiZWVuIGZvdW5kLiAqLworCQlEQkZFWElUOworCQlyZXR1cm4gZXBpZDsKKwl9CisKKwkvKiBXZSBtdXN0IGZpbmQgYW5kIGluaXRpYXRlIGEgbmV3IGVwaWQgZm9yIHRoaXMgdXJiLiAqLworCWVwaWQgPSBldHJheF91c2JfYWxsb2NhdGVfZXBpZCgpOworCisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJLyogRmFpbGVkIHRvIGFsbG9jYXRlIGEgbmV3IGVwaWQuICovCisJCURCRkVYSVQ7CisJCXJldHVybiBlcGlkOworCX0KKworCS8qIFdlIG5vdyBoYXZlIGEgbmV3IGVwaWQgdG8gdXNlLiBJbml0aWF0ZSBpdC4gKi8KKwlzZXRfYml0KGVwaWQsICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzayk7CisKKwlkZXZudW0gPSB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpOworCWVuZHBvaW50ID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOworCXNsb3cgPSB1c2JfcGlwZXNsb3codXJiLT5waXBlKTsKKwltYXhsZW4gPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpIHsKKwkJLyogV2Ugd2FudCBib3RoIElOIGFuZCBPVVQgY29udHJvbCB0cmFmZmljIHRvIGJlIHB1dCBvbiB0aGUgc2FtZSBFUC9TQiBsaXN0LiAqLworCQlvdXRfdHJhZmZpYyA9IDE7CisJfSBlbHNlIHsKKwkJb3V0X3RyYWZmaWMgPSB1c2JfcGlwZW91dCh1cmItPnBpcGUpOworCX0KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJKlJfVVNCX0VQVF9EQVRBX0lTTyA9IElPX1NUQVRFKFJfVVNCX0VQVF9EQVRBX0lTTywgdmFsaWQsIHllcykgfAorCQkJLyogRklYTUU6IENoYW5nZSBhbnkgdG8gdGhlIGFjdHVhbCBwb3J0PyAqLworCQkJSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEFfSVNPLCBwb3J0LCBhbnkpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBX0lTTywgbWF4X2xlbiwgbWF4bGVuKSB8CisJCQlJT19GSUVMRChSX1VTQl9FUFRfREFUQV9JU08sIGVwLCBlbmRwb2ludCkgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEFfSVNPLCBkZXYsIGRldm51bSk7CisJfSBlbHNlIHsKKwkJKlJfVVNCX0VQVF9EQVRBID0gSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEEsIHZhbGlkLCB5ZXMpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBsb3dfc3BlZWQsIHNsb3cpIHwKKwkJCS8qIEZJWE1FOiBDaGFuZ2UgYW55IHRvIHRoZSBhY3R1YWwgcG9ydD8gKi8KKwkJCUlPX1NUQVRFKFJfVVNCX0VQVF9EQVRBLCBwb3J0LCBhbnkpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBtYXhfbGVuLCBtYXhsZW4pIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBlcCwgZW5kcG9pbnQpIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBkZXYsIGRldm51bSk7CisJfQorCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwlpZiAob3V0X3RyYWZmaWMpIHsKKwkJc2V0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX291dF90cmFmZmljKTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoZXBpZCwgKHZvaWQgKikmZXBpZF9vdXRfdHJhZmZpYyk7CisJfQorCisJZGJnX2VwaWQoIlNldHRpbmcgdXAgZXBpZCAlZCB3aXRoIGRldm51bSAlZCwgZW5kcG9pbnQgJWQgYW5kIG1heF9sZW4gJWQgKCVzKSIsCisJCSBlcGlkLCBkZXZudW0sIGVuZHBvaW50LCBtYXhsZW4sIG91dF90cmFmZmljID8gIk9VVCIgOiAiSU4iKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIGVwaWQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9mcmVlX2VwaWQoaW50IGVwaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJaWYgKCF0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spKSB7CisJCXdhcm4oIlRyeWluZyB0byBmcmVlIHVudXNlZCBlcGlkICVkIiwgZXBpZCk7CisJCURCRkVYSVQ7CisJCXJldHVybjsKKwl9CisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBlcGlkKTsKKwlub3AoKTsKKwl3aGlsZSAoKlJfVVNCX0VQVF9EQVRBICYgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgaG9sZCkpOworCS8qIFRoaXMgd2lsbCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBzZXQgdGhlIHZhbGlkIGZpZWxkIHRvIDAuICovCisJKlJfVVNCX0VQVF9EQVRBID0gMDsKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCWNsZWFyX2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spOworCisKKwlkYmdfZXBpZCgiRnJlZWQgZXBpZCAlZCIsIGVwaWQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIGludCBldHJheF91c2JfbG9va3VwX2VwaWQoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBpOworCV9fdTMyIGRhdGE7CisJY2hhciBkZXZudW0sIGVuZHBvaW50LCBzbG93LCBvdXRfdHJhZmZpYzsKKwlpbnQgbWF4bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWRldm51bSA9IHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSk7CisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisJc2xvdyA9IHVzYl9waXBlc2xvdyh1cmItPnBpcGUpOworCW1heGxlbiA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCQkvKiBXZSB3YW50IGJvdGggSU4gYW5kIE9VVCBjb250cm9sIHRyYWZmaWMgdG8gYmUgcHV0IG9uIHRoZSBzYW1lIEVQL1NCIGxpc3QuICovCisJCW91dF90cmFmZmljID0gMTsKKwl9IGVsc2UgeworCQlvdXRfdHJhZmZpYyA9IHVzYl9waXBlb3V0KHVyYi0+cGlwZSk7CisJfQorCisJLyogU3RlcCB0aHJvdWdoIGF0dCBlcGlkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTkJSX09GX0VQSURTOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzaykgJiYKKwkJICAgIHRlc3RfYml0KGksICh2b2lkICopJmVwaWRfb3V0X3RyYWZmaWMpID09IG91dF90cmFmZmljKSB7CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgaSk7CisJCQlub3AoKTsKKworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQlkYXRhID0gKlJfVVNCX0VQVF9EQVRBX0lTTzsKKwkJCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCQkJCWlmICgoSU9fTUFTSyhSX1VTQl9FUFRfREFUQV9JU08sIHZhbGlkKSAmIGRhdGEpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgZGV2LCBkYXRhKSA9PSBkZXZudW0pICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgZXAsIGRhdGEpID09IGVuZHBvaW50KSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIG1heF9sZW4sIGRhdGEpID09IG1heGxlbikpIHsKKwkJCQkJZGJnX2VwaWQoIkZvdW5kIGVwaWQgJWQgZm9yIGRldm51bSAlZCwgZW5kcG9pbnQgJWQgKCVzKSIsCisJCQkJCQkgaSwgZGV2bnVtLCBlbmRwb2ludCwgb3V0X3RyYWZmaWMgPyAiT1VUIiA6ICJJTiIpOworCQkJCQlEQkZFWElUOworCQkJCQlyZXR1cm4gaTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRhdGEgPSAqUl9VU0JfRVBUX0RBVEE7CisJCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkJCQlpZiAoKElPX01BU0soUl9VU0JfRVBUX0RBVEEsIHZhbGlkKSAmIGRhdGEpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBkZXYsIGRhdGEpID09IGRldm51bSkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGVwLCBkYXRhKSA9PSBlbmRwb2ludCkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGxvd19zcGVlZCwgZGF0YSkgPT0gc2xvdykgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIG1heF9sZW4sIGRhdGEpID09IG1heGxlbikpIHsKKwkJCQkJZGJnX2VwaWQoIkZvdW5kIGVwaWQgJWQgZm9yIGRldm51bSAlZCwgZW5kcG9pbnQgJWQgKCVzKSIsCisJCQkJCQkgaSwgZGV2bnVtLCBlbmRwb2ludCwgb3V0X3RyYWZmaWMgPyAiT1VUIiA6ICJJTiIpOworCQkJCQlEQkZFWElUOworCQkJCQlyZXR1cm4gaTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBldHJheF91c2JfYWxsb2NhdGVfZXBpZCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkJSX09GX0VQSURTOyBpKyspIHsKKwkJaWYgKCF0ZXN0X2JpdChpLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spKSB7CisJCQlkYmdfZXBpZCgiRm91bmQgZnJlZSBlcGlkICVkIiwgaSk7CisJCQlEQkZFWElUOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlkYmdfZXBpZCgiRm91bmQgbm8gZnJlZSBlcGlkcyIpOworCURCRkVYSVQ7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwlldHJheF9oY190ICpoYzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCURCRkVOVEVSOworCisJaWYgKCF1cmItPmRldiB8fCAhdXJiLT5kZXYtPmJ1cykgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgPD0gMCkgeworCQlpbmZvKCJTdWJtaXQgdXJiIHRvIHBpcGUgd2l0aCBtYXhwYWNrZXRsZW4gMCwgcGlwZSAweCVYXG4iLCB1cmItPnBpcGUpOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCWlmICh1cmItPnRpbWVvdXQpIHsKKwkJLyogRklYTUUuICovCisJCXdhcm4oInVyYi0+dGltZW91dCBzcGVjaWZpZWQsIGlnbm9yaW5nLiIpOworCX0KKworCWhjID0gKGV0cmF4X2hjX3QqKXVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKworCWlmICh1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpID09IGhjLT5yaC5kZXZudW0pIHsKKwkJLyogVGhpcyByZXF1ZXN0IGlzIGZvciB0aGUgVmlydHVhbCBSb290IEh1Yi4gKi8KKwkJcmV0ID0gZXRyYXhfcmhfc3VibWl0X3VyYih1cmIpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0JVTEspIHsKKworCQlyZXQgPSBldHJheF91c2Jfc3VibWl0X2J1bGtfdXJiKHVyYik7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCisJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfY3RybF91cmIodXJiKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJaW50IGJ1c3RpbWU7CisKKwkJaWYgKHVyYi0+YmFuZHdpZHRoID09IDApIHsKKwkJCWJ1c3RpbWUgPSB1c2JfY2hlY2tfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIpOworCQkJaWYgKGJ1c3RpbWUgPCAwKSB7CisJCQkJcmV0ID0gYnVzdGltZTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0ID0gZXRyYXhfdXNiX3N1Ym1pdF9pbnRyX3VyYih1cmIpOworCQkJCWlmIChyZXQgPT0gMCkKKwkJCQkJdXNiX2NsYWltX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCBidXN0aW1lLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEJhbmR3aWR0aCBhbHJlYWR5IHNldC4gKi8KKwkJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfaW50cl91cmIodXJiKTsKKwkJfQorCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCWludCBidXN0aW1lOworCisJCWlmICh1cmItPmJhbmR3aWR0aCA9PSAwKSB7CisJCQlidXN0aW1lID0gdXNiX2NoZWNrX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiKTsKKwkJCWlmIChidXN0aW1lIDwgMCkgeworCQkJCXJldCA9IGJ1c3RpbWU7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfaXNvY191cmIodXJiKTsKKwkJCQlpZiAocmV0ID09IDApCisJCQkJCXVzYl9jbGFpbV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgYnVzdGltZSwgMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBCYW5kd2lkdGggYWxyZWFkeSBzZXQuICovCisJCQlyZXQgPSBldHJheF91c2Jfc3VibWl0X2lzb2NfdXJiKHVyYik7CisJCX0KKwl9CisKKwlEQkZFWElUOworCisgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICBwcmludGsoIlN1Ym1pdCBVUkIgZXJyb3IgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF9oY190ICpoYzsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwlpbnQgZXBpZDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWlmICghdXJiKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIGEgZGVzY3JpcHRvciBpbnRlcnJ1cHQgZm9yIHRoZSBpc29jIGVwaWQKKwkgICB3aWxsIG1vZGlmeSB0aGUgc2IgbGlzdC4gIFRoaXMgY291bGQgcG9zc2libHkgYmUgZG9uZSBtb3JlIGdyYW51bGFyLCBidXQKKwkgICB1bmxpbmtfdXJiIHNob3VsZCBub3QgYmUgdXNlZCBmcmVxdWVudGx5IGFueXdheS4KKwkqLworCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisKKwlpZiAoIXVyYi0+ZGV2IHx8ICF1cmItPmRldi0+YnVzKSB7CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKCF1cmItPmhjcHJpdikgeworCQkvKiBUaGlzIGhhcHBlbnMgaWYgYSBkZXZpY2UgZHJpdmVyIGNhbGxzIHVubGluayBvbiBhbiB1cmIgdGhhdAorCQkgICB3YXMgbmV2ZXIgc3VibWl0dGVkIChsYXp5IGRyaXZlcikgb3IgaWYgdGhlIHVyYiB3YXMgY29tcGxldGVkCisJCSAgIHdoaWxlIHVubGluayB3YXMgYmVpbmcgY2FsbGVkLiAqLworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0FTWU5DX1VOTElOSykgeworCQkvKiBGSVhNRS4gKi8KKwkJLyogSWYgVVJCX0FTWU5DX1VOTElOSyBpcyBzZXQ6CisJCSAgIHVubGluaworCQkgICBtb3ZlIHRvIGEgc2VwYXJhdGUgdXJiIGxpc3QKKwkJICAgY2FsbCBjb21wbGV0ZSBhdCBuZXh0IHNvZiB3aXRoIEVDT05OUkVTRVQKKworCQkgICBJZiBub3Q6CisJCSAgIHdhaXQgMSBtcworCQkgICB1bmxpbmsKKwkJICAgY2FsbCBjb21wbGV0ZSB3aXRoIEVOT0VOVAorCQkqLworCQl3YXJuKCJVUkJfQVNZTkNfVU5MSU5LIHNldCwgaWdub3JpbmcuIik7CisJfQorCisJLyogT25lIG1pZ2h0IHRoaW5rIHRoYXQgdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1Mgd291bGQgYmUgYSByZXF1aXJlbWVudCBmb3IgdW5saW5raW5nLAorCSAgIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBmb3IgaW50ZXJydXB0IGFuZCBpc29jaHJvbm91cyB0cmFmZmljIHNpbmNlIHRoZXkgYXJlIGNvbXBsZXRlZAorCSAgIHJlcGVhdGVkbHksIGFuZCB1cmItPnN0YXR1cyBpcyBzZXQgdGhlbi4gVGhhdCBtYXkgaW4gaXRzZWxmIGJlIGEgYnVnIHRob3VnaC4gKi8KKworCWhjID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwllcGlkID0gdXJiX3ByaXYtPmVwaWQ7CisKKwkvKiBTZXQgdGhlIHVyYiBzdGF0dXMgKHN5bmNocm9ub3VzIHVubGluaykuICovCisJdXJiLT5zdGF0dXMgPSAtRU5PRU5UOworCXVyYl9wcml2LT51cmJfc3RhdGUgPSBVTkxJTks7CisKKwlpZiAodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSA9PSBoYy0+cmguZGV2bnVtKSB7CisJCWludCByZXQ7CisJCXJldCA9IGV0cmF4X3JoX3VubGlua191cmIodXJiKTsKKwkJREJGRVhJVDsKKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCXJldHVybiByZXQ7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgeworCisJCWRiZ19idWxrKCJVbmxpbmsgb2YgYnVsayB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKFR4QnVsa0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJVHhCdWxrRVBMaXN0W2VwaWRdLmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSk7CisKKwkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjBfRVAgPT0gdmlydF90b19waHlzKCZUeEJ1bGtFUExpc3RbZXBpZF0pKTsKKwkJfQorCQkvKiBLaWNraW5nIGR1bW15IGxpc3Qgb3V0IG9mIHRoZSBwYXJ0eS4gKi8KKwkJVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFsoZXBpZCArIDEpICUgTkJSX09GX0VQSURTXSk7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCisJCWRiZ19jdHJsKCJVbmxpbmsgb2YgY3RybCB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKFR4Q3RybEVQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJVHhDdHJsRVBMaXN0W2VwaWRdLmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSk7CisKKwkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjFfRVAgPT0gdmlydF90b19waHlzKCZUeEN0cmxFUExpc3RbZXBpZF0pKTsKKwkJfQorCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkgeworCisJCWRiZ19pbnRyKCJVbmxpbmsgb2YgaW50ciB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJLyogU2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSBpdCdzIGEgdGFkIG1vcmUgY29tcGxpY2F0ZWQuICovCisJCWV0cmF4X3VzYl91bmxpbmtfaW50cl91cmIodXJiKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCisJCWRiZ19pc29jKCJVbmxpbmsgb2YgaXNvYyB1cmIgKDB4JWx4KSIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSk7CisKKwkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjNfRVAgPT0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbZXBpZF0pKTsKKwkJfQorCX0KKworCS8qIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgdXJiIGZyb20gdGhlIHVyYiBsaXN0ICpiZWZvcmUqIHJlbW92aW5nIGl0cyBTQgorCSAgIGRlc2NyaXB0b3JzLiAoVGhpcyBtZWFucyB0aGF0IHRoZSBpc29jIGVvZiBoYW5kbGVyIG1pZ2h0IGdldCBhIG51bGwgdXJiIHdoZW4gd2UKKwkgICBhcmUgdW5saW5raW5nIHRoZSBsYXN0IHVyYi4pICovCisKKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9CVUxLKSB7CisKKwkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisJCVR4QnVsa0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCisJCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCQlUeEN0cmxFUExpc3RbZXBpZF0uc3ViID0gMDsKKwkJZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdCh1cmIpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkgeworCisJCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCQkvKiBTYW5pdHkgY2hlY2sgKHNob3VsZCBuZXZlciBoYXBwZW4pLiAqLworCQlhc3NlcnQodXJiX2xpc3RfZW1wdHkoZXBpZCkpOworCisJCS8qIFJlbGVhc2UgYWxsb2NhdGVkIGJhbmR3aWR0aC4gKi8KKwkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisKKwkJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKworCQkJVVNCX1NCX0Rlc2NfdCAqaXRlcl9zYiwgKnByZXZfc2IsICpuZXh0X3NiOworCisJCQlpZiAoX191cmJfbGlzdF9lbnRyeSh1cmIsIGVwaWQpKSB7CisKKwkJCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKwkJCQlpdGVyX3NiID0gVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA/IHBoeXNfdG9fdmlydChUeElzb2NFUExpc3RbZXBpZF0uc3ViKSA6IDA7CisJCQkJcHJldl9zYiA9IDA7CisJCQkJd2hpbGUgKGl0ZXJfc2IgJiYgKGl0ZXJfc2IgIT0gdXJiX3ByaXYtPmZpcnN0X3NiKSkgeworCQkJCQlwcmV2X3NiID0gaXRlcl9zYjsKKwkJCQkJaXRlcl9zYiA9IGl0ZXJfc2ItPm5leHQgPyBwaHlzX3RvX3ZpcnQoaXRlcl9zYi0+bmV4dCkgOiAwOworCQkJCX0KKworCQkJCWlmIChpdGVyX3NiID09IDApIHsKKwkJCQkJLyogVW5saW5rIG9mIHRoZSBVUkIgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLiAqLworCQkJCQlwcmV2X3NiID0gMDsKKwkJCQkJaXRlcl9zYiA9IFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPyBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1YikgOiAwOworCQkJCX0KKworCQkJCXdoaWxlIChpdGVyX3NiICYmIChpdGVyX3NiICE9IHVyYl9wcml2LT5sYXN0X3NiKSkgeworCQkJCQlpdGVyX3NiID0gaXRlcl9zYi0+bmV4dCA/IHBoeXNfdG9fdmlydChpdGVyX3NiLT5uZXh0KSA6IDA7CisJCQkJfQorCQkJCWlmIChpdGVyX3NiKSB7CisJCQkJCW5leHRfc2IgPSBpdGVyX3NiLT5uZXh0ID8gcGh5c190b192aXJ0KGl0ZXJfc2ItPm5leHQpIDogMDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgRE1BIGhhcyBjb21wbGV0ZWQKKwkJCQkJICAgcHJvY2Vzc2luZyB0aGUgU0IgbGlzdCBmb3IgdGhpcyBFUCB3aGlsZSBpbnRlcnJ1cHRzCisJCQkJCSAgIGFyZSBkaXNhYmxlZC4gKi8KKwkJCQkJZGJnX2lzb2MoIklzb2MgdXJiIG5vdCBmb3VuZCwgYWxyZWFkeSBzZW50PyIpOworCQkJCQluZXh0X3NiID0gMDsKKwkJCQl9CisJCQkJaWYgKHByZXZfc2IpIHsKKwkJCQkJcHJldl9zYi0+bmV4dCA9IG5leHRfc2IgPyB2aXJ0X3RvX3BoeXMobmV4dF9zYikgOiAwOworCQkJCX0gZWxzZSB7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSBuZXh0X3NiID8gdmlydF90b19waHlzKG5leHRfc2IpIDogMDsKKwkJCQl9CisKKwkJCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisJCQkJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJCQlkYmdfaXNvYygiTGFzdCBpc29jIG91dCB1cmIgZXBpZCAlZCIsIGVwaWQpOworCQkJCX0gZWxzZSBpZiAobmV4dF9zYiB8fCBwcmV2X3NiKSB7CisJCQkJCWRiZ19pc29jKCJSZS1lbmFibGUgaXNvYyBvdXQgZXBpZCAlZCIsIGVwaWQpOworCisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQkJCQlUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCB8PSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpOworCQkJCX0gZWxzZSB7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJCQlkYmdfaXNvYygiVVJCIGxpc3Qgbm9uLWVtcHR5IGFuZCBubyBTQiBsaXN0LCBFUCBkaXNhYmxlZCIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZGJnX2lzb2MoIlVyYiAweCVwIG5vdCBmb3VuZCwgY29tcGxldGVkIGFscmVhZHk/IiwgdXJiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKworCQkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkJCS8qIEZvciBpbiB0cmFmZmljIHRoZXJlIGlzIG9ubHkgb25lIFNCIGRlc2NyaXB0b3IgZm9yIGVhY2ggRVAgZXZlbgorCQkJICAgdGhvdWdoIHRoZXJlIG1heSBiZSBzZXZlcmFsIHVyYnMgKGFsbCB1cmJzIHBvaW50IGF0IHRoZSBzYW1lIFNCKS4gKi8KKwkJCWlmICh1cmJfbGlzdF9lbXB0eShlcGlkKSkgeworCQkJCS8qIE5vIG1vcmUgdXJicywgcmVtb3ZlIHRoZSBTQi4gKi8KKwkJCQlUeElzb2NFUExpc3RbZXBpZF0uc3ViID0gMDsKKwkJCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisJCQl9IGVsc2UgeworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisJCQl9CisJCX0KKwkJLyogUmVsZWFzZSBhbGxvY2F0ZWQgYmFuZHdpZHRoLiAqLworCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMSk7CisJfQorCS8qIEZyZWUgdGhlIGVwaWQgaWYgdXJiIGxpc3QgaXMgZW1wdHkuICovCisJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJfQorCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJLyogTXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIGNvbXBsZXRpb24gaGFuZGxlci4gKi8KKwlrZnJlZSh1cmJfcHJpdik7CisJdXJiLT5oY3ByaXYgPSAwOworCisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpCit7CisJREJGRU5URVI7CisJREJGRVhJVDsKKwlyZXR1cm4gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfdHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJREJGRU5URVI7CisKKwkvKiBUaGlzIGludGVycnVwdCBoYW5kbGVyIGNvdWxkIGJlIHVzZWQgd2hlbiB1bmxpbmtpbmcgRVAgZGVzY3JpcHRvcnMuICovCisKKwlpZiAoKlJfSVJRX1JFQUQyICYgSU9fTUFTSyhSX0lSUV9SRUFEMiwgZG1hOF9zdWIwX2Rlc2NyKSkgeworCQlVU0JfRVBfRGVzY190ICplcDsKKworCQkvL2RiZ19idWxrKCJkbWE4X3N1YjBfZGVzY3IgKEJVTEspIGludHIuIik7CisKKwkJLyogSXQgc2hvdWxkIGJlIHNhZmUgY2xlYXJpbmcgdGhlIGludGVycnVwdCBoZXJlLCBzaW5jZSB3ZSBkb24ndCBleHBlY3QgdG8gZ2V0IGEgbmV3CisJCSAgIG9uZSB1bnRpbCB3ZSByZXN0YXJ0IHRoZSBidWxrIGNoYW5uZWwuICovCisJCSpSX0RNQV9DSDhfU1VCMF9DTFJfSU5UUiA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIwX0NMUl9JTlRSLCBjbHJfZGVzY3IsIGRvKTsKKworCQkvKiBXYWl0IHdoaWxlIHRoZSBETUEgaXMgcnVubmluZyAodGhvdWdoIHdlIGRvbid0IGV4cGVjdCBpdCB0byBiZSkuICovCisJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjBfQ01EICYgSU9fTUFTSyhSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCkpOworCisJCS8qIEFkdmFuY2UgdGhlIERNQSB0byB0aGUgbmV4dCBFUCBkZXNjcmlwdG9yLiAqLworCQllcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KCpSX0RNQV9DSDhfU1VCMF9FUCk7CisKKwkJLy9kYmdfYnVsaygiZGVzY3IgaW50cjogRE1BIGlzIGF0IDB4JWx4IiwgKHVuc2lnbmVkIGxvbmcpZXApOworCisJCS8qIGVwLT5uZXh0IGlzIGFscmVhZHkgYSBwaHlzaWNhbCBhZGRyZXNzOyBubyBuZWVkIGZvciBhIHZpcnRfdG9fcGh5cy4gKi8KKwkJKlJfRE1BX0NIOF9TVUIwX0VQID0gZXAtPm5leHQ7CisKKwkJLyogU3RhcnQgdGhlIERNQSBidWxrIGNoYW5uZWwgYWdhaW4uICovCisJCSpSX0RNQV9DSDhfU1VCMF9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCwgc3RhcnQpOworCX0KKwlpZiAoKlJfSVJRX1JFQUQyICYgSU9fTUFTSyhSX0lSUV9SRUFEMiwgZG1hOF9zdWIxX2Rlc2NyKSkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCWludCBlcGlkOworCQlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwkJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisKKwkJZGJnX2N0cmwoImRtYThfc3ViMV9kZXNjciAoQ1RSTCkgaW50ci4iKTsKKwkJKlJfRE1BX0NIOF9TVUIxX0NMUl9JTlRSID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjFfQ0xSX0lOVFIsIGNscl9kZXNjciwgZG8pOworCisJCS8qIFRoZSBjb21wbGV0ZSBjYWxsYmFjayBnZXRzIGNhbGxlZCBzbyB3ZSBjbGkuICovCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQljbGkoKTsKKworCQlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTIC0gMTsgZXBpZCsrKSB7CisJCQlpZiAoKFR4Q3RybEVQTGlzdFtlcGlkXS5zdWIgPT0gMCkgfHwKKwkJCSAgICAoZXBpZCA9PSBEVU1NWV9FUElEKSB8fAorCQkJICAgIChlcGlkID09IElOVkFMSURfRVBJRCkpIHsKKwkJCQkvKiBOb3RoaW5nIGhlcmUgdG8gc2VlLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCisJCQlpZiAodXJiKSB7CisKKwkJCQkvKiBTYW5pdHkgY2hlY2suICovCisJCQkJYXNzZXJ0KHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCk7CisKKwkJCQl1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJCQkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IFdBSVRJTkdfRk9SX0RFU0NSX0lOVFIpIHsKKwkJCQkJYXNzZXJ0KCEoVHhDdHJsRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCisJCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJfQorCWlmICgqUl9JUlFfUkVBRDIgJiBJT19NQVNLKFJfSVJRX1JFQUQyLCBkbWE4X3N1YjJfZGVzY3IpKSB7CisJCWRiZ19pbnRyKCJkbWE4X3N1YjJfZGVzY3IgKElOVFIpIGludHIuIik7CisJCSpSX0RNQV9DSDhfU1VCMl9DTFJfSU5UUiA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIyX0NMUl9JTlRSLCBjbHJfZGVzY3IsIGRvKTsKKwl9CisJaWYgKCpSX0lSUV9SRUFEMiAmIElPX01BU0soUl9JUlFfUkVBRDIsIGRtYThfc3ViM19kZXNjcikpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCQlpbnQgZXBpZDsKKwkJaW50IGVwaWRfZG9uZTsKKwkJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisJCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2M7CisKKwkJdXNiX2lzb2NfY29tcGxldGVfZGF0YV90ICpjb21wX2RhdGEgPSBOVUxMOworCisJCS8qIE9uZSBvciBtb3JlIGlzb2Mgb3V0IHRyYW5zZmVycyBhcmUgZG9uZS4gKi8KKwkJZGJnX2lzb2MoImRtYThfc3ViM19kZXNjciAoSVNPQykgaW50ci4iKTsKKworCQkvKiBGb3IgZWFjaCBpc29jIG91dCBFUCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBzYl9kZXNjIHdpdGggdGhlIGludHIgZmxhZworCQkgICBzZXQuICBUaGlzIGRlc2NyaXB0b3IgbXVzdCBiZSB0aGUgbGFzdCBwYWNrZXQgZnJvbSBhbiBVUkIuICBUaGVuCisJCSAgIHRyYXZlcnNlIHRoZSBVUkIgbGlzdCBmb3IgdGhlIEVQIHVudGlsIHRoZSBVUkIgd2l0aCB1cmJfcHJpdi0+bGFzdF9zYgorCQkgICBtYXRjaGluZyB0aGUgaW50ci1tYXJrZWQgc2JfZGVzYyBpcyBmb3VuZC4gIEFsbCBVUkJzIGJlZm9yZSB0aGlzIGhhdmUKKwkJICAgYmVlbiBzZW50LgorCQkqLworCisJCWZvciAoZXBpZCA9IDA7IGVwaWQgPCBOQlJfT0ZfRVBJRFMgLSAxOyBlcGlkKyspIHsKKwkJCS8qIFNraXAgcGFzdCBlcGlkcyB3aXRoIG5vIFNCIGxpc3RzLCBlcGlkcyB1c2VkIGZvciBpbiB0cmFmZmljLAorCQkJICAgYW5kIHNwZWNpYWwgKGR1bW15LCBpbnZhbGlkKSBlcGlkcy4gKi8KKwkJCWlmICgoVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9PSAwKSB8fAorCQkJICAgICh0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX291dF90cmFmZmljKSA9PSAwKSB8fAorCQkJICAgIChlcGlkID09IERVTU1ZX0VQSUQpIHx8CisJCQkgICAgKGVwaWQgPT0gSU5WQUxJRF9FUElEKSkgeworCQkJCS8qIE5vdGhpbmcgaGVyZSB0byBzZWUuICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlzYl9kZXNjID0gcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpOworCisJCQkvKiBGaW5kIHRoZSBsYXN0IGRlc2NyaXB0b3Igb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgVVJCIGZvciB0aGlzIGVwLgorCQkJICAgVGhpcyBpcyB0aGUgZmlyc3QgZGVzY3JpcHRvciBpbiB0aGUgc3ViIGxpc3QgbWFya2VkIGZvciBhIGRlc2NyaXB0b3IKKwkJCSAgIGludGVycnVwdC4gKi8KKwkJCXdoaWxlIChzYl9kZXNjICYmICFJT19FWFRSQUNUKFVTQl9TQl9jb21tYW5kLCBpbnRyLCBzYl9kZXNjLT5jb21tYW5kKSkgeworCQkJCXNiX2Rlc2MgPSBzYl9kZXNjLT5uZXh0ID8gcGh5c190b192aXJ0KHNiX2Rlc2MtPm5leHQpIDogMDsKKwkJCX0KKwkJCWFzc2VydChzYl9kZXNjKTsKKworCQkJZGJnX2lzb2MoIkNoZWNrIGVwaWQgJWQsIHN1YiAweCVwLCBTQiAweCVwIiwKKwkJCQkgZXBpZCwKKwkJCQkgcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpLAorCQkJCSBzYl9kZXNjKTsKKworCQkJZXBpZF9kb25lID0gMDsKKworCQkJLyogR2V0IHRoZSBmaXJzdCB1cmIgKGlmIGFueSkuICovCisJCQl1cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKwkJCWFzc2VydCh1cmIpOworCisJCQl3aGlsZSAodXJiICYmICFlcGlkX2RvbmUpIHsKKworCQkJCS8qIFNhbml0eSBjaGVjay4gKi8KKwkJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUyk7CisKKwkJCQlpZiAoIXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJCQkJLyogZGVzY3IgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkIG9ubHkgZm9yIG91dCBwaXBlcy4gKi8KKwkJCQkJZXBpZF9kb25lID0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCQkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCQlpZiAoc2JfZGVzYyAhPSB1cmJfcHJpdi0+bGFzdF9zYikgeworCisJCQkJCS8qIFRoaXMgdXJiIGhhcyBiZWVuIHNlbnQuICovCisJCQkJCWRiZ19pc29jKCJvdXQgVVJCIDB4JXAgc2VudCIsIHVyYik7CisKKwkJCQkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFRSQU5TRkVSX0RPTkU7CisKKwkJCQl9IGVsc2UgaWYgKChzYl9kZXNjID09IHVyYl9wcml2LT5sYXN0X3NiKSAmJgorCQkJCQkgICAhKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpIHsKKworCQkJCQlhc3NlcnQoKHNiX2Rlc2MtPmNvbW1hbmQgJiBJT19NQVNLKFVTQl9TQl9jb21tYW5kLCBlb2wpKSA9PSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKwkJCQkJYXNzZXJ0KHNiX2Rlc2MtPm5leHQgPT0gMCk7CisKKwkJCQkJZGJnX2lzb2MoIm91dCBVUkIgMHglcCBsYXN0IGluIGxpc3QsIGVwaWQgZGlzYWJsZWQiLCB1cmIpOworCQkJCQlUeElzb2NFUExpc3RbZXBpZF0uc3ViID0gMDsKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJCQkJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBUUkFOU0ZFUl9ET05FOworCisJCQkJCWVwaWRfZG9uZSA9IDE7CisKKwkJCQl9IGVsc2UgeworCQkJCQllcGlkX2RvbmUgPSAxOworCQkJCX0KKwkJCQlpZiAoIWVwaWRfZG9uZSkgeworCQkJCQl1cmIgPSB1cmJfbGlzdF9uZXh0KHVyYiwgZXBpZCk7CisJCQkJfQorCQkJfQorCisJCX0KKworCQkqUl9ETUFfQ0g4X1NVQjNfQ0xSX0lOVFIgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCM19DTFJfSU5UUiwgY2xyX2Rlc2NyLCBkbyk7CisKKwkJY29tcF9kYXRhID0gKHVzYl9pc29jX2NvbXBsZXRlX2RhdGFfdCopa21lbV9jYWNoZV9hbGxvYyhpc29jX2NvbXBsX2NhY2hlLCBTTEFCX0FUT01JQyk7CisJCWFzc2VydChjb21wX2RhdGEgIT0gTlVMTCk7CisKKyAgICAgICAgICAgICAgICBJTklUX1dPUksoJmNvbXBfZGF0YS0+dXNiX2JoLCBldHJheF91c2JfaXNvY19kZXNjcl9pbnRlcnJ1cHRfYm90dG9tX2hhbGYsIGNvbXBfZGF0YSk7CisgICAgICAgICAgICAgICAgc2NoZWR1bGVfd29yaygmY29tcF9kYXRhLT51c2JfYmgpOworCX0KKworCURCRkVYSVQ7CisgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2lzb2NfZGVzY3JfaW50ZXJydXB0X2JvdHRvbV9oYWxmKHZvaWQgKmRhdGEpCit7CisJdXNiX2lzb2NfY29tcGxldGVfZGF0YV90ICpjb21wX2RhdGEgPSAodXNiX2lzb2NfY29tcGxldGVfZGF0YV90KilkYXRhOworCisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcGlkOworCWludCBlcGlkX2RvbmU7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisKKwlEQkZFTlRFUjsKKworCWRiZ19pc29jKCJkbWE4X3N1YjNfZGVzY3IgKElTT0MpIGJvdHRvbSBoYWxmLiIpOworCisJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUyAtIDE7IGVwaWQrKykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQljbGkoKTsKKworCQllcGlkX2RvbmUgPSAwOworCisJCS8qIFRoZSBkZXNjcmlwdG9yIGludGVycnVwdCBoYW5kbGVyIGhhcyBtYXJrZWQgYWxsIHRyYW5zbWl0dGVkIGlzb2NoLiBvdXQKKwkJICAgVVJCcyB3aXRoIFRSQU5TRkVSX0RPTkUuICBOb3cgd2UgdHJhdmVyc2UgYWxsIGVwaWRzIGFuZCBmb3IgYWxsIHRoYXQKKyAJCSAgIGhhdmUgaXNvY2guIG91dCB0cmFmZmljIHRyYXZlcnNlIGl0cyBVUkIgbGlzdCBhbmQgY29tcGxldGUgdGhlCisJCSAgIHRyYW5zbWl0dGVkIFVSQi4KKwkJKi8KKworCQl3aGlsZSAoIWVwaWRfZG9uZSkgeworCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCQkJaWYgKHVyYiA9PSAwKSB7CisJCQkJZXBpZF9kb25lID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQkJZXBpZF9kb25lID0gMTsKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICghdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkJCS8qIGRlc2NyIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZCBvbmx5IGZvciBvdXQgcGlwZXMuICovCisJCQkJZXBpZF9kb25lID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZGJnX2lzb2MoIkNoZWNrIGVwaWQgJWQsIFNCIDB4JXAiLCBlcGlkLCAoY2hhciopVHhJc29jRVBMaXN0W2VwaWRdLnN1Yik7CisKKwkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IFRSQU5TRkVSX0RPTkUpIHsKKwkJCQlpbnQgaTsKKwkJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGFja2V0OworCisJCQkJLyogVGhpcyB1cmIgaGFzIGJlZW4gc2VudC4gKi8KKwkJCQlkYmdfaXNvYygiQ29tcGxldGluZyBpc29jIG91dCBVUkIgMHglcCIsIHVyYik7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCQkJCXBhY2tldCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOworCQkJCQlwYWNrZXQtPnN0YXR1cyA9IDA7CisJCQkJCXBhY2tldC0+YWN0dWFsX2xlbmd0aCA9IHBhY2tldC0+bGVuZ3RoOworCQkJCX0KKworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV9pc29jX3VyYih1cmIsIDApOworCisJCQkJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCQkJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJCQkJCWVwaWRfZG9uZSA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcGlkX2RvbmUgPSAxOworCQkJfQorCQl9CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJfQorCWttZW1fY2FjaGVfZnJlZShpc29jX2NvbXBsX2NhY2hlLCBjb21wX2RhdGEpOworCisJREJGRVhJVDsKK30KKworCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCWludCBlcGlkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSXNvYyBkaWFnbm9zdGljcy4gKi8KKwlzdGF0aWMgaW50IGN1cnJfZm0gPSAwOworCXN0YXRpYyBpbnQgcHJldl9mbSA9IDA7CisKKwlEQkZFTlRFUjsKKworCS8qIENsZWFyIHRoaXMgaW50ZXJydXB0LiAqLworCSpSX0RNQV9DSDlfQ0xSX0lOVFIgPSBJT19TVEFURShSX0RNQV9DSDlfQ0xSX0lOVFIsIGNscl9lb3AsIGRvKTsKKworCS8qIE5vdGUgdGhhdCB0aGlzIHdoaWxlIGxvb3AgYXNzdW1lcyB0aGF0IGFsbCBwYWNrZXRzIHNwYW4gb25seQorCSAgIG9uZSByeCBkZXNjcmlwdG9yLiAqLworCisJLyogVGhlIHJlYXNvbiB3ZSBjbGkgaGVyZSBpcyB0aGF0IHdlIGNhbGwgdGhlIGRyaXZlcidzIGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCXdoaWxlIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgZW9wKSkgeworCisJCWVwaWQgPSBJT19FWFRSQUNUKFVTQl9JTl9zdGF0dXMsIGVwaWQsIG15TmV4dFJ4RGVzYy0+c3RhdHVzKTsKKwkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisKKwkJLy9wcmludGsoImVvcCBmb3IgZXBpZCAlZCwgZmlyc3QgdXJiIDB4JWx4XG4iLCBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJCWlmICghdXJiKSB7CisJCQllcnIoIk5vIHVyYiBmb3IgZXBpZCAlZCBpbiByeCBpbnRlcnJ1cHQiLCBlcGlkKTsKKwkJCV9fZHVtcF9lcHRfZGF0YShlcGlkKTsKKwkJCWdvdG8gc2tpcF9vdXQ7CisJCX0KKworCQkvKiBOb3RlIHRoYXQgd2UgY2Fubm90IGluZGVzY3JpbWluYXRlbHkgYXNzZXJ0KHVzYl9waXBlaW4odXJiLT5waXBlKSkgc2luY2UKKwkJICAgY3RybCBwaXBlcyBhcmUgbm90LiAqLworCisJCWlmIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgZXJyb3IpKSB7CisJCQlfX3UzMiByX3VzYl9lcHRfZGF0YTsKKwkJCWludCBub19lcnJvciA9IDA7CisKKwkJCWFzc2VydCh0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spKTsKKworCQkJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCQkJbm9wKCk7CisJCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBX0lTTzsKKworCQkJCWlmICgocl91c2JfZXB0X2RhdGEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBX0lTTywgdmFsaWQpKSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIHJfdXNiX2VwdF9kYXRhKSA9PSAwKSAmJgorCQkJCSAgICAobXlOZXh0UnhEZXNjLT5zdGF0dXMgJiBJT19NQVNLKFVTQl9JTl9zdGF0dXMsIG5vZGF0YSkpKSB7CisJCQkJCS8qIE5vdCBhbiBlcnJvciwganVzdCBhIGZhaWx1cmUgdG8gcmVjZWl2ZSBhbiBleHBlY3RlZCBpc28KKwkJCQkJICAgaW4gcGFja2V0IGluIHRoaXMgZnJhbWUuICBUaGlzIGlzIG5vdCBkb2N1bWVudGVkCisJCQkJCSAgIGluIHRoZSBkZXNpZ25lcnMgcmVmZXJlbmNlLgorCQkJCQkqLworCQkJCQlub19lcnJvcisrOworCQkJCX0gZWxzZSB7CisJCQkJCXdhcm4oIlJfVVNCX0VQVF9EQVRBX0lTTyBmb3IgZXBpZCAlZCA9IDB4JXgiLCBlcGlkLCByX3VzYl9lcHRfZGF0YSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyX3VzYl9lcHRfZGF0YSA9ICpSX1VTQl9FUFRfREFUQTsKKwkJCQl3YXJuKCJSX1VTQl9FUFRfREFUQSBmb3IgZXBpZCAlZCA9IDB4JXgiLCBlcGlkLCByX3VzYl9lcHRfZGF0YSk7CisJCQl9CisKKwkJCWlmICghbm9fZXJyb3IpeworCQkJCXdhcm4oImVycm9yIGluIHJ4IGRlc2MtPnN0YXR1cywgZXBpZCAlZCwgZmlyc3QgdXJiID0gMHglbHgiLAorCQkJCSAgICAgZXBpZCwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKwkJCQlfX2R1bXBfaW5fZGVzYyhteU5leHRSeERlc2MpOworCisJCQkJd2FybigiUl9VU0JfU1RBVFVTID0gMHgleCIsICpSX1VTQl9TVEFUVVMpOworCisJCQkJLyogQ2hlY2sgdGhhdCBlcHQgd2FzIGRpc2FibGVkIHdoZW4gZXJyb3Igb2NjdXJyZWQuICovCisJCQkJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCQkJCWNhc2UgUElQRV9CVUxLOgorCQkJCQlhc3NlcnQoIShUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQSVBFX0NPTlRST0w6CisJCQkJCWFzc2VydCghKFR4Q3RybEVQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkJCQlhc3NlcnQoIShUeEludHJFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkJCQlhc3NlcnQoIShUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJd2FybigiZXRyYXhfdXNiX3J4X2ludGVycnVwdDogYmFkIHBpcGV0eXBlICVkIGluIHVyYiAweCVwIiwKKwkJCQkJICAgICB1c2JfcGlwZXR5cGUodXJiLT5waXBlKSwKKwkJCQkJICAgICB1cmIpOworCQkJCX0KKwkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgLUVQUk9UTyk7CisJCQkJZ290byBza2lwX291dDsKKwkJCX0KKwkJfQorCisJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQlpZiAoKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgfHwKKwkJICAgICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpIHx8CisJCSAgICAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpKSB7CisKKwkJCWlmIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgbm9kYXRhKSkgeworCQkJCS8qIFdlIGdldCBub2RhdGEgZm9yIGVtcHR5IGRhdGEgdHJhbnNhY3Rpb25zLCBhbmQgdGhlIHJ4IGRlc2NyaXB0b3IncworCQkJCSAgIGh3X2xlbiBmaWVsZCBpcyBub3QgdmFsaWQgaW4gdGhhdCBjYXNlLiBObyBkYXRhIHRvIGNvcHkgaW4gb3RoZXIKKwkJCQkgICB3b3Jkcy4gKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogTWFrZSBzdXJlIHRoZSBkYXRhIGZpdHMgaW4gdGhlIGJ1ZmZlci4gKi8KKwkJCQlhc3NlcnQodXJiX3ByaXYtPnJ4X29mZnNldCArIG15TmV4dFJ4RGVzYy0+aHdfbGVuCisJCQkJICAgICAgIDw9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisKKwkJCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmJfcHJpdi0+cnhfb2Zmc2V0LAorCQkJCSAgICAgICBwaHlzX3RvX3ZpcnQobXlOZXh0UnhEZXNjLT5idWYpLCBteU5leHRSeERlc2MtPmh3X2xlbik7CisJCQkJdXJiX3ByaXYtPnJ4X29mZnNldCArPSBteU5leHRSeERlc2MtPmh3X2xlbjsKKwkJCX0KKworCQkJaWYgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBlb3QpKSB7CisJCQkJaWYgKCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpICYmCisJCQkJICAgICgoVHhDdHJsRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgPT0KKwkJCQkgICAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykpKSB7CisJCQkJCS8qIFRoZSBFUCBpcyBzdGlsbCBlbmFibGVkLCBzbyB0aGUgT1VUIHBhY2tldCB1c2VkIHRvIGFjaworCQkJCQkgICB0aGUgaW4gZGF0YSBpcyBwcm9iYWJseSBub3QgcHJvY2Vzc2VkIHlldC4gIElmIHRoZSBFUAorCQkJCQkgICBzdWIgcG9pbnRlciBoYXMgbm90IG1vdmVkIGJleW9uZCB1cmJfcHJpdi0+bGFzdF9zYiBtYXJrCisJCQkJCSAgIGl0IGZvciBhIGRlc2NyaXB0b3IgaW50ZXJydXB0IGFuZCBjb21wbGV0ZSB0aGUgdXJiIGluCisJCQkJCSAgIHRoZSBkZXNjcmlwdG9yIGludGVycnVwdCBoYW5kbGVyLgorCQkJCQkqLworCQkJCQlVU0JfU0JfRGVzY190ICpzdWIgPSBUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLnN1YiA/IHBoeXNfdG9fdmlydChUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLnN1YikgOiAwOworCisJCQkJCXdoaWxlICgoc3ViICE9IE5VTEwpICYmIChzdWIgIT0gdXJiX3ByaXYtPmxhc3Rfc2IpKSB7CisJCQkJCQlzdWIgPSBzdWItPm5leHQgPyBwaHlzX3RvX3ZpcnQoc3ViLT5uZXh0KSA6IDA7CisJCQkJCX0KKwkJCQkJaWYgKHN1YiAhPSBOVUxMKSB7CisJCQkJCQkvKiBUaGUgdXJiIGhhcyBub3QgYmVlbiBmdWxseSBwcm9jZXNzZWQuICovCisJCQkJCQl1cmJfcHJpdi0+dXJiX3N0YXRlID0gV0FJVElOR19GT1JfREVTQ1JfSU5UUjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXdhcm4oIihDVFJMKSBlcGlkIGVuYWJsZWQgYW5kIHVyYiAoMHglcCkgcHJvY2Vzc2VkLCBlcC0+c3ViPTB4JXAiLCB1cmIsIChjaGFyKilUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLnN1Yik7CisJCQkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgMCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgMCk7CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCisJCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqcGFja2V0OworCisJCQlpZiAodXJiX3ByaXYtPnVyYl9zdGF0ZSA9PSBVTkxJTkspIHsKKwkJCQlpbmZvKCJJZ25vcmluZyByeCBkYXRhIGZvciB1cmIgYmVpbmcgdW5saW5rZWQuIik7CisJCQkJZ290byBza2lwX291dDsKKwkJCX0gZWxzZSBpZiAodXJiX3ByaXYtPnVyYl9zdGF0ZSA9PSBOT1RfU1RBUlRFRCkgeworCQkJCWluZm8oIldoYXQ/IEdvdCByeCBkYXRhIGZvciB1cmIgdGhhdCBpc24ndCBzdGFydGVkPyIpOworCQkJCWdvdG8gc2tpcF9vdXQ7CisJCQl9CisKKwkJCXBhY2tldCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW3VyYl9wcml2LT5pc29jX3BhY2tldF9jb3VudGVyXTsKKwkJCXBhY2tldC0+c3RhdHVzID0gMDsKKworCQkJaWYgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBub2RhdGEpKSB7CisJCQkJLyogV2UgZ2V0IG5vZGF0YSBmb3IgZW1wdHkgZGF0YSB0cmFuc2FjdGlvbnMsIGFuZCB0aGUgcnggZGVzY3JpcHRvcidzCisJCQkJICAgaHdfbGVuIGZpZWxkIGlzIG5vdCB2YWxpZCBpbiB0aGF0IGNhc2UuIFdlIGNvcHkgMCBieXRlcyBob3dldmVyIHRvCisJCQkJICAgc3RheSBpbiBzeW5jaC4gKi8KKwkJCQlwYWNrZXQtPmFjdHVhbF9sZW5ndGggPSAwOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrZXQtPmFjdHVhbF9sZW5ndGggPSBteU5leHRSeERlc2MtPmh3X2xlbjsKKwkJCQkvKiBNYWtlIHN1cmUgdGhlIGRhdGEgZml0cyBpbiB0aGUgYnVmZmVyLiAqLworCQkJCWFzc2VydChwYWNrZXQtPmFjdHVhbF9sZW5ndGggPD0gcGFja2V0LT5sZW5ndGgpOworCQkJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIHBhY2tldC0+b2Zmc2V0LAorCQkJCSAgICAgICBwaHlzX3RvX3ZpcnQobXlOZXh0UnhEZXNjLT5idWYpLCBwYWNrZXQtPmFjdHVhbF9sZW5ndGgpOworCQkJfQorCisJCQkvKiBJbmNyZW1lbnQgdGhlIHBhY2tldCBjb3VudGVyLiAqLworCQkJdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXIrKzsKKworCQkJLyogTm90ZSB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGVvdCBmaWVsZCBpbiB0aGUgcnggZGVzY3JpcHRvcidzIHN0YXR1cy4KKwkJCSAgIEl0IHdpbGwgYWx3YXlzIGJlIHNldCBmb3IgaXNvYyB0cmFmZmljLiAqLworCQkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPT0gdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXIpIHsKKworCQkJCS8qIE91dC1vZi1zeW5jaCBkaWFnbm9zdGljcy4gKi8KKwkJCQljdXJyX2ZtID0gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZik7CisJCQkJaWYgKCgocHJldl9mbSArIHVyYl9wcml2LT5pc29jX3BhY2tldF9jb3VudGVyKSAlICgweDdmZiArIDEpKSAhPSBjdXJyX2ZtKSB7CisJCQkJCS8qIFRoaXMgdGVzdCBpcyB3cm9uZywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBpc29jCisJCQkJCSAgIGluIGVuZHBvaW50IGFjdGl2ZSBpdCB3aWxsIGFsd2F5cyBjYWxjdWxhdGUgd3JvbmcKKwkJCQkJICAgc2luY2UgcHJldl9mbSBpcyBzaGFyZWQgYnkgYWxsIGVuZHBvaW50cy4KKworCQkJCQkgICBGSVhNRSBNYWtlIHRoaXMgY2hlY2sgcGVyIFVSQiB1c2luZyB1cmItPnN0YXJ0X2ZyYW1lLgorCQkJCQkqLworCQkJCQlkYmdfaXNvYygiT3V0IG9mIHN5bmNoPyBQcmV2aW91cyBmcmFtZSA9ICVkLCBjdXJyZW50IGZyYW1lID0gJWQiLAorCQkJCQkJIHByZXZfZm0sIGN1cnJfZm0pOworCisJCQkJfQorCQkJCXByZXZfZm0gPSBjdXJyX2ZtOworCisJCQkJLyogQ29tcGxldGUgdGhlIHVyYiB3aXRoIHN0YXR1cyBPSy4gKi8KKwkJCQlldHJheF91c2JfY29tcGxldGVfaXNvY191cmIodXJiLCAwKTsKKwkJCX0KKwkJfQorCisJc2tpcF9vdXQ6CisKKwkJLyogRE1BIElOIGNhY2hlIGJ1Zy4gRmx1c2ggdGhlIERNQSBJTiBidWZmZXIgZnJvbSB0aGUgY2FjaGUuIChzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyCisJCSAgIGhhcyB0aGUgc2FtZSBsYXlvdXQgYXMgVVNCX0lOX0Rlc2MgZm9yIHRoZSByZWxldmFudCBmaWVsZHMuKSAqLworCQlwcmVwYXJlX3J4X2Rlc2NyaXB0b3IoKHN0cnVjdCBldHJheF9kbWFfZGVzY3IqKW15TmV4dFJ4RGVzYyk7CisKKwkJbXlQcmV2UnhEZXNjID0gbXlOZXh0UnhEZXNjOworCQlteVByZXZSeERlc2MtPmNvbW1hbmQgfD0gSU9fTUFTSyhVU0JfSU5fY29tbWFuZCwgZW9sKTsKKwkJbXlMYXN0UnhEZXNjLT5jb21tYW5kICY9IH5JT19NQVNLKFVTQl9JTl9jb21tYW5kLCBlb2wpOworCQlteUxhc3RSeERlc2MgPSBteVByZXZSeERlc2M7CisKKwkJbXlOZXh0UnhEZXNjLT5zdGF0dXMgPSAwOworCQlteU5leHRSeERlc2MgPSBwaHlzX3RvX3ZpcnQobXlOZXh0UnhEZXNjLT5uZXh0KTsKKwl9CisKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCURCRkVYSVQ7CisKKyAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCB1bmxpbmsgdGhlIFNCIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHVyYi4gKi8KK3N0YXRpYyBpbnQgZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIpCit7CisJVVNCX1NCX0Rlc2NfdCAqbmV4dF9zYiwgKmZpcnN0X3NiLCAqbGFzdF9zYjsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwlpbnQgaSA9IDA7CisKKwlEQkZFTlRFUjsKKworCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwlhc3NlcnQodXJiX3ByaXYpOworCisJLyogSnVzdCBhIHNhbml0eSBjaGVjay4gU2luY2Ugd2UgZG9uJ3QgZmlkZGxlIHdpdGggdGhlIERNQSBsaXN0IHRoZSBFUCBkZXNjcmlwdG9yCisJICAgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZSBkaXNhYmxlZCwgaXQncyBqdXN0IHRoYXQgd2UgZXhwZWN0IGl0IHRvIGJlLiAqLworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0JVTEspIHsKKwkJYXNzZXJ0KCEoVHhCdWxrRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKSB7CisJCWFzc2VydCghKFR4Q3RybEVQTGlzdFt1cmJfcHJpdi0+ZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKwl9CisKKwlmaXJzdF9zYiA9IHVyYl9wcml2LT5maXJzdF9zYjsKKwlsYXN0X3NiID0gdXJiX3ByaXYtPmxhc3Rfc2I7CisKKwlhc3NlcnQoZmlyc3Rfc2IpOworCWFzc2VydChsYXN0X3NiKTsKKworCXdoaWxlIChmaXJzdF9zYiAhPSBsYXN0X3NiKSB7CisJCW5leHRfc2IgPSAoVVNCX1NCX0Rlc2NfdCAqKXBoeXNfdG9fdmlydChmaXJzdF9zYi0+bmV4dCk7CisJCWttZW1fY2FjaGVfZnJlZSh1c2JfZGVzY19jYWNoZSwgZmlyc3Rfc2IpOworCQlmaXJzdF9zYiA9IG5leHRfc2I7CisJCWkrKzsKKwl9CisJa21lbV9jYWNoZV9mcmVlKHVzYl9kZXNjX2NhY2hlLCBsYXN0X3NiKTsKKwlpKys7CisJZGJnX3NiKCIlZCBTQiBkZXNjcmlwdG9ycyBmcmVlZCIsIGkpOworCS8qIENvbXBhcmUgaSB3aXRoIHVyYi0+bnVtYmVyX29mX3BhY2tldHMgZm9yIElzb2MgdHJhZmZpYy4KKwkgICBTaG91bGQgYmUgc2FtZSB3aGVuIGNhbGxpbmcgdW5saW5rX3VyYiAqLworCisJREJGRVhJVDsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfYnVsa191cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcGlkOworCWludCBlbXB0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCisJREJGRU5URVI7CisKKwkvKiBFcGlkIGFsbG9jYXRpb24sIGVtcHR5IGNoZWNrIGFuZCBsaXN0IGFkZCBtdXN0IGJlIHByb3RlY3RlZC4KKwkgICBSZWFkIGFib3V0IHRoaXMgaW4gZXRyYXhfdXNiX3N1Ym1pdF9jdHJsX3VyYi4gKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJZXBpZCA9IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHVyYik7CisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJREJGRVhJVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZW1wdHkgPSB1cmJfbGlzdF9lbXB0eShlcGlkKTsKKwl1cmJfbGlzdF9hZGQodXJiLCBlcGlkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlkYmdfYnVsaygiQWRkaW5nIGJ1bGsgJXMgdXJiIDB4JWx4IHRvICVzIGxpc3QsIGVwaWQgJWQiLAorCQkgdXNiX3BpcGVpbih1cmItPnBpcGUpID8gIklOIiA6ICJPVVQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVtcHR5ID8gImVtcHR5IiA6ICIiLCBlcGlkKTsKKworCS8qIE1hcmsgdGhlIHVyYiBhcyBiZWluZyBpbiBwcm9ncmVzcy4gKi8KKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCS8qIFNldHVwIHRoZSBoY3ByaXYgZGF0YS4gKi8KKwl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwkvKiBUaGlzIHNldHMgcnhfb2Zmc2V0IHRvIDAuICovCisJbWVtc2V0KHVyYl9wcml2LCAwLCBzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCkpOworCXVyYl9wcml2LT51cmJfc3RhdGUgPSBOT1RfU1RBUlRFRDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJaWYgKGVtcHR5KSB7CisJCWV0cmF4X3VzYl9hZGRfdG9fYnVsa19zYl9saXN0KHVyYiwgZXBpZCk7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2J1bGtfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2M7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciBtYXhsZW47CisKKwlEQkZFTlRFUjsKKworCWRiZ19idWxrKCJldHJheF91c2JfYWRkX3RvX2J1bGtfc2JfbGlzdCwgdXJiIDB4JWx4IiwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKworCW1heGxlbiA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisKKwlzYl9kZXNjID0gKFVTQl9TQl9EZXNjX3QqKWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfRkxBRyk7CisJYXNzZXJ0KHNiX2Rlc2MgIT0gTlVMTCk7CisJbWVtc2V0KHNiX2Rlc2MsIDAsIHNpemVvZihVU0JfU0JfRGVzY190KSk7CisKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisKKwkJZGJnX2J1bGsoIkdyYWJiaW5nIGJ1bGsgT1VULCB1cmIgMHglbHgsIGVwaWQgJWQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJCS8qIFRoaXMgaXMgcHJvYmFibHkgYSBzYW5pdHkgY2hlY2sgb2YgdGhlIGJ1bGsgdHJhbnNhY3Rpb24gbGVuZ3RoCisJCSAgIG5vdCBiZWluZyBsYXJnZXIgdGhhbiA2NCBrQi4gKi8KKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDB4ZmZmZikgeworCQkJcGFuaWMoInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDB4ZmZmZiIpOworCQl9CisKKwkJc2JfZGVzYy0+c3dfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJCS8qIFRoZSByZW0gZmllbGQgaXMgZG9uJ3QgY2FyZSBpZiBpdCdzIG5vdCBhIGZ1bGwtbGVuZ3RoIHRyYW5zZmVyLCBzbyBzZXR0aW5nCisJCSAgIGl0IHNob3VsZG4ndCBodXJ0LiBBbHNvLCByZW0gaXNuJ3QgdXNlZCBmb3IgT1VUIHRyYWZmaWMuICovCisJCXNiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSAgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIG91dCkgfAorCQkJCSAgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkgICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkJLyogVGhlIGZ1bGwgZmllbGQgaXMgc2V0IHRvIHllcywgZXZlbiBpZiB3ZSBkb24ndCBhY3R1YWxseSBjaGVjayB0aGF0IHRoaXMgaXMKKwkJICAgYSBmdWxsLWxlbmd0aCB0cmFuc2ZlciAoaS5lLiwgdGhhdCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgbWF4bGVuID0gMCkuCisJCSAgIFNldHRpbmcgZnVsbCBwcmV2ZW50cyB0aGUgVVNCIGNvbnRyb2xsZXIgZnJvbSBzZW5kaW5nIGFuIGVtcHR5IHBhY2tldCBpbgorCQkgICB0aGF0IGNhc2UuICBIb3dldmVyLCBpZiBVUkJfWkVST19QQUNLRVQgd2FzIHNldCB3ZSB3YW50IHRoYXQuICovCisJCWlmICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpKSB7CisJCQlzYl9kZXNjLT5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpOworCQl9CisKKwkJc2JfZGVzYy0+YnVmID0gdmlydF90b19waHlzKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJc2JfZGVzYy0+bmV4dCA9IDA7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCisJCWRiZ19idWxrKCJHcmFiYmluZyBidWxrIElOLCB1cmIgMHglbHgsIGVwaWQgJWQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJCXNiX2Rlc2MtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA/CisJCQkodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gMSkgLyBtYXhsZW4gKyAxIDogMDsKKworCQkvKiBUaGUgcmVtIGZpZWxkIGlzIGRvbid0IGNhcmUgaWYgaXQncyBub3QgYSBmdWxsLWxlbmd0aCB0cmFuc2Zlciwgc28gc2V0dGluZworCQkgICBpdCBzaG91bGRuJ3QgaHVydC4gKi8KKwkJc2JfZGVzYy0+Y29tbWFuZCA9CisJCQkoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heGxlbikgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCQlzYl9kZXNjLT5idWYgPSAwOworCQlzYl9kZXNjLT5uZXh0ID0gMDsKKwl9CisKKwl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBzYl9kZXNjOworCXVyYl9wcml2LT5sYXN0X3NiID0gc2JfZGVzYzsKKwl1cmJfcHJpdi0+ZXBpZCA9IGVwaWQ7CisKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJLyogUmVzZXQgdG9nZ2xlIGJpdHMgYW5kIHJlc2V0IGVycm9yIGNvdW50LiAqLworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCisJLyogRklYTUU6IElzIHRoaXMgYSBzcGVjaWFsIGNhc2Ugc2luY2UgdGhlIGhvbGQgZmllbGQgaXMgY2hlY2tlZCwKKwkgICBvciBzaG91bGQgd2UgY2hlY2sgaG9sZCBpbiBhIGxvdCBvZiBvdGhlciBjYXNlcyBhcyB3ZWxsPyAqLworCWlmICgqUl9VU0JfRVBUX0RBVEEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBob2xkKSkgeworCQlwYW5pYygiSG9sZCB3YXMgc2V0IGluICVzIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwkvKiBSZXNldCBlcnJvciBjb3VudGVycyAocmVnYXJkbGVzcyBvZiB3aGljaCBkaXJlY3Rpb24gdGhpcyB0cmFmZmljIGlzKS4gKi8KKwkqUl9VU0JfRVBUX0RBVEEgJj0KKwkJfihJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9pbikgfAorCQkgIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvdW50X291dCkpOworCisJLyogU29mdHdhcmUgbXVzdCBwcmVzZXQgdGhlIHRvZ2dsZSBiaXRzLiAqLworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJCSpSX1VTQl9FUFRfREFUQSAmPSB+SU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdF9vdXQpOworCQkqUl9VU0JfRVBUX0RBVEEgfD0gSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIHRfb3V0LCB0b2dnbGUpOworCX0gZWxzZSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJCSpSX1VTQl9FUFRfREFUQSAmPSB+SU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdF9pbik7CisJCSpSX1VTQl9FUFRfREFUQSB8PSBJT19GSUVMRChSX1VTQl9FUFRfREFUQSwgdF9pbiwgdG9nZ2xlKTsKKwl9CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgRVAgZGVzY3JpcHRvciBpcyBkaXNhYmxlZC4gKi8KKwlhc3NlcnQoIShUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKworCS8qIFRoZSByZWFzb24gd2Ugc2V0IHRoZSBFUCdzIHN1YiBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YKKwkgICB3YWxraW5nIHRoZSBTQiBsaXN0IGFuZCBsaW5raW5nIGl0IGxhc3QgaW4gdGhlIGxpc3QgaXMgdGhhdCB3ZSBvbmx5CisJICAgaGF2ZSBvbmUgYWN0aXZlIHVyYiBhdCBhIHRpbWUgKHRoZSByZXN0IGFyZSBxdWV1ZWQpLiAqLworCisJLyogTm90ZSB0aGF0IHdlIGNhbm5vdCBoYXZlIGludGVycnVwdHMgcnVubmluZyB3aGVuIHdlIGhhdmUgc2V0IHRoZSBTQiBkZXNjcmlwdG9yCisJICAgYnV0IHRoZSBFUCBpcyBub3QgeWV0IGVuYWJsZWQuICBJZiBhIGJ1bGsgZW90IGhhcHBlbnMgZm9yIGFub3RoZXIgRVAsIHdlIHdpbGwKKwkgICBmaW5kIHRoaXMgRVAgZGlzYWJsZWQgYW5kIHdpdGggYSBTQiAhPSAwLCB3aGljaCB3aWxsIG1ha2UgdXMgdGhpbmsgdGhhdCBpdCdzIGRvbmUuICovCisJVHhCdWxrRVBMaXN0W2VwaWRdLnN1YiA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjKTsKKwlUeEJ1bGtFUExpc3RbZXBpZF0uaHdfbGVuID0gMDsKKwkvKiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBmaWxsIGluIHRoZSBlcF9pZCBmaWVsZCBzaW5jZSB0aGlzCisJICAgd2FzIGRvbmUgd2hlbiB3ZSBhbGxvY2F0ZWQgdGhlIEVQIGRlc2NyaXB0b3JzIGluIGluaXRfdHhfYnVsa19lcC4gKi8KKworCS8qIENoZWNrIGlmIHRoZSBkdW1teSBsaXN0IGlzIGFscmVhZHkgd2l0aCB1cyAoaWYgc2V2ZXJhbCB1cmJzIHdlcmUgcXVldWVkKS4gKi8KKwlpZiAoVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgIT0gdmlydF90b19waHlzKCZUeEJ1bGtEdW1teUVQTGlzdFtlcGlkXVswXSkpIHsKKworCQlkYmdfYnVsaygiSW52aXRpbmcgZHVtbXkgbGlzdCB0byB0aGUgcGFydHkgZm9yIHVyYiAweCVseCwgZXBpZCAlZCIsCisJCQkgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCQkvKiBUaGUgbGFzdCBFUCBpbiB0aGUgZHVtbXkgbGlzdCBhbHJlYWR5IGhhcyBpdHMgbmV4dCBwb2ludGVyIHNldCB0bworCQkgICBUeEJ1bGtFUExpc3RbZXBpZF0ubmV4dC4gKi8KKworCQkvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBETUEgaXMgYXQgdGhpcyBFUCBvciBub3QgYmVmb3JlIGNoYW5naW5nIHRoZQorCQkgICBuZXh0IHBvaW50ZXIsIHNpbmNlIHdlIHdpbGwgZG8gaXQgaW4gb25lIDMyLWJpdCB3cml0ZSAoRVAgZGVzY3JpcHRvcnMgYXJlCisJCSAgIDMyLWJpdCBhbGlnbmVkKS4gKi8KKwkJVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0R1bW15RVBMaXN0W2VwaWRdWzBdKTsKKwl9CisJLyogRW5hYmxlIHRoZSBFUCBkZXNjci4gKi8KKwlkYmdfYnVsaygiRW5hYmxpbmcgYnVsayBFUCBmb3IgdXJiIDB4JWx4LCBlcGlkICVkIiwgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKwlUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCB8PSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpOworCisJLyogRXZlcnl0aGluZyBpcyBzZXQgdXAsIHNhZmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWdhaW4uICovCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkvKiBJZiB0aGUgRE1BIGJ1bGsgY2hhbm5lbCBpc24ndCBydW5uaW5nLCB3ZSBuZWVkIHRvIHJlc3RhcnQgaXQgaWYgaXQKKwkgICBoYXMgc3RvcHBlZCBhdCB0aGUgbGFzdCBFUCBkZXNjcmlwdG9yIChETUEgc3RvcHBlZCBiZWNhdXNlIHRoZXJlIHdhcworCSAgIG5vIG1vcmUgdHJhZmZpYykgb3IgaWYgaXQgaGFzIHN0b3BwZWQgYXQgYSBkdW1teSBFUCB3aXRoIHRoZSBpbnRyIGZsYWcKKwkgICBzZXQgKERNQSBzdG9wcGVkIGJlY2F1c2Ugd2Ugd2VyZSB0b28gc2xvdyBpbiBpbnNlcnRpbmcgbmV3IHRyYWZmaWMpLiAqLworCWlmICghKCpSX0RNQV9DSDhfU1VCMF9DTUQgJiBJT19NQVNLKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kKSkpIHsKKworCQlVU0JfRVBfRGVzY190ICplcDsKKwkJZXAgPSAoVVNCX0VQX0Rlc2NfdCAqKXBoeXNfdG9fdmlydCgqUl9ETUFfQ0g4X1NVQjBfRVApOworCQlkYmdfYnVsaygiRE1BIGNoYW5uZWwgbm90IHJ1bm5pbmcgaW4gYWRkIik7CisJCWRiZ19idWxrKCJETUEgaXMgYXQgMHglbHgiLCAodW5zaWduZWQgbG9uZyllcCk7CisKKwkJaWYgKCpSX0RNQV9DSDhfU1VCMF9FUCA9PSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtOQlJfT0ZfRVBJRFMgLSAxXSkgfHwKKwkJICAgIChlcC0+Y29tbWFuZCAmIDB4OCkgPj4gMykgeworCQkJKlJfRE1BX0NIOF9TVUIwX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kLCBzdGFydCk7CisJCQkvKiBVcGRhdGUvcmVzdGFydCB0aGUgYnVsayBzdGFydCB0aW1lciBzaW5jZSB3ZSBqdXN0IHN0YXJ0ZWQgdGhlIGNoYW5uZWwuICovCisJCQltb2RfdGltZXIoJmJ1bGtfc3RhcnRfdGltZXIsIGppZmZpZXMgKyBCVUxLX1NUQVJUX1RJTUVSX0lOVEVSVkFMKTsKKwkJCS8qIFVwZGF0ZS9yZXN0YXJ0IHRoZSBidWxrIGVvdCB0aW1lciBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIHRyYWZmaWMuICovCisJCQltb2RfdGltZXIoJmJ1bGtfZW90X3RpbWVyLCBqaWZmaWVzICsgQlVMS19FT1RfVElNRVJfSU5URVJWQUwpOworCQl9CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2J1bGtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJGRU5URVI7CisKKwlpZiAoc3RhdHVzKQorCQl3YXJuKCJDb21wbGV0aW5nIGJ1bGsgdXJiIHdpdGggc3RhdHVzICVkLiIsIHN0YXR1cyk7CisKKwlkYmdfYnVsaygiQ29tcGxldGluZyBidWxrIHVyYiAweCVseCBmb3IgZXBpZCAlZCIsICh1bnNpZ25lZCBsb25nKXVyYiwgZXBpZCk7CisKKwkvKiBVcGRhdGUgdGhlIHVyYiBsaXN0LiAqLworCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCisJLyogRm9yIGFuIElOIHBpcGUsIHdlIGFsd2F5cyBzZXQgdGhlIGFjdHVhbCBsZW5ndGgsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSB3YXMKKwkgICBhbiBlcnJvciBvciBub3QgKHdoaWNoIG1lYW5zIHRoZSBkZXZpY2UgZHJpdmVyIGNhbiB1c2UgdGhlIGRhdGEgaWYgaXQgd2FudHMgdG8pLiAqLworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpIHsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gdXJiX3ByaXYtPnJ4X29mZnNldDsKKwl9IGVsc2UgeworCQkvKiBTZXQgYWN0dWFsX2xlbmd0aCBmb3IgT1VUIHVyYnMgYWxzbzsgdGhlIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyIHNlZW1zCisJCSAgIHRvIHdhbnQgdGhhdC4gV2Ugd291bGRuJ3Qga25vdyBvZiBhbnkgcGFydGlhbCB3cml0ZXMgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJfSBlbHNlIHsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCX0KKwl9CisKKwkvKiBGSVhNRTogSXMgdGhlcmUgc29tZXRoaW5nIG9mIHRoZSB0aGluZ3MgYmVsb3cgd2Ugc2hvdWxkbid0IGRvIGlmIHRoZXJlIHdhcyBhbiBlcnJvcj8KKwkgICBMaWtlLCBtYXliZSB3ZSBzaG91bGRuJ3QgdG9nZ2xlIHRoZSB0b2dnbGUgYml0cywgb3IgbWF5YmUgd2Ugc2hvdWxkbid0IGluc2VydCBtb3JlIHRyYWZmaWMuICovCisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBlcGlkKTsKKwlub3AoKTsKKworCS8qIFdlIG5lZWQgdG8gZmlkZGxlIHdpdGggdGhlIHRvZ2dsZSBiaXRzIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLiAqLworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCUlPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIHRfb3V0LCAqUl9VU0JfRVBUX0RBVEEpOworCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpLCB0b2dnbGUpOworCX0gZWxzZSB7CisJCWNoYXIgdG9nZ2xlID0KKwkJCUlPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIHRfaW4sICpSX1VTQl9FUFRfREFUQSk7CisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCSAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSksIHRvZ2dsZSk7CisJfQorCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJLyogUmVtZW1iZXIgdG8gZnJlZSB0aGUgU0JzLiAqLworCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwlrZnJlZSh1cmJfcHJpdik7CisJdXJiLT5oY3ByaXYgPSAwOworCisJLyogSWYgdGhlcmUgYXJlIGFueSBtb3JlIHVyYidzIGluIHRoZSBsaXN0IHdlJ2QgYmV0dGVyIHN0YXJ0IHNlbmRpbmcgKi8KKwlpZiAoIXVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisKKwkJc3RydWN0IHVyYiAqbmV3X3VyYjsKKworCQkvKiBHZXQgdGhlIGZpcnN0IHVyYi4gKi8KKwkJbmV3X3VyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCQlhc3NlcnQobmV3X3VyYik7CisKKwkJZGJnX2J1bGsoIk1vcmUgYnVsayBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCWV0cmF4X3VzYl9hZGRfdG9fYnVsa19zYl9saXN0KG5ld191cmIsIGVwaWQpOworCX0KKworCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCisJLyogV2UgbGV0IGFueSBub24temVybyBzdGF0dXMgZnJvbSB0aGUgbGF5ZXIgYWJvdmUgaGF2ZSBwcmVjZWRlbmNlLiAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBVUkJfU0hPUlRfTk9UX09LIG1lYW5zIHRoYXQgc2hvcnQgcmVhZHMgKHNob3J0ZXIgdGhhbiB0aGUgZW5kcG9pbnQncyBtYXggbGVuZ3RoKQorCQkgICBpcyB0byBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLworCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spIHsKKwkJCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgJiYKKwkJCSAgICAodXJiLT5hY3R1YWxfbGVuZ3RoICE9CisJCQkgICAgIHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkpKSB7CisJCQkJdXJiLT5zdGF0dXMgPSAtRVJFTU9URUlPOworCQkJfQorCQl9CisJfQorCisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCWlmICh1cmJfbGlzdF9lbXB0eShlcGlkKSkgeworCQkvKiBUaGlzIG1lYW5zIHRoYXQgdGhpcyBFUCBpcyBub3cgZnJlZSwgZGVjb25maWd1cmUgaXQuICovCisJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisKKwkJLyogTm8gbW9yZSB0cmFmZmljOyB0aW1lIHRvIGNsZWFuIHVwLgorCQkgICBNdXN0IHNldCBzdWIgcG9pbnRlciB0byAwLCBzaW5jZSB3ZSBsb29rIGF0IHRoZSBzdWIgcG9pbnRlciB3aGVuIGhhbmRsaW5nCisJCSAgIHRoZSBidWxrIGVvdCBpbnRlcnJ1cHQuICovCisKKwkJZGJnX2J1bGsoIk5vIGJ1bGsgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKworCQlUeEJ1bGtFUExpc3RbZXBpZF0uc3ViID0gMDsKKworCQkvKiBVbmxpbmsgdGhlIGR1bW15IGxpc3QuICovCisKKwkJZGJnX2J1bGsoIktpY2tpbmcgZHVtbXkgbGlzdCBvdXQgb2YgcGFydHkgZm9yIHVyYiAweCVseCwgZXBpZCAlZCIsCisJCQkgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCQkvKiBObyBuZWVkIHRvIHdhaXQgZm9yIHRoZSBETUEgYmVmb3JlIGNoYW5naW5nIHRoZSBuZXh0IHBvaW50ZXIuCisJCSAgIFRoZSBtb2R1bG8gTkJSX09GX0VQSURTIGlzbid0IGFjdHVhbGx5IG5lY2Vzc2FyeSwgc2luY2Ugd2Ugd2lsbCBuZXZlciB1c2UKKwkJICAgdGhlIGxhc3Qgb25lIChJTlZBTElEX0VQSUQpIGZvciBhY3R1YWwgdHJhZmZpYy4gKi8KKwkJVHhCdWxrRVBMaXN0W2VwaWRdLm5leHQgPQorCQkJdmlydF90b19waHlzKCZUeEJ1bGtFUExpc3RbKGVwaWQgKyAxKSAlIE5CUl9PRl9FUElEU10pOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9jdHJsX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwaWQ7CisJaW50IGVtcHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisKKwlEQkZFTlRFUjsKKworCS8qIEZJWE1FOiBSZXR1cm4gLUVOWElPIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBxdWV1ZWQgdXJiIGZvciB0aGlzIGVuZHBvaW50PyAqLworCisJLyogRXBpZCBhbGxvY2F0aW9uLCBlbXB0eSBjaGVjayBhbmQgbGlzdCBhZGQgbXVzdCBiZSBwcm90ZWN0ZWQuCisKKwkgICBFcGlkIGFsbG9jYXRpb24gYmVjYXVzZSBpZiB3ZSBmaW5kIGFuIGV4aXN0aW5nIGVwaWQgZm9yIHRoaXMgZW5kcG9pbnQgYW4gdXJiIG1pZ2h0IGJlCisJICAgY29tcGxldGVkIChlbXB0eWluZyB0aGUgbGlzdCkgYmVmb3JlIHdlIGFkZCB0aGUgbmV3IHVyYiB0byB0aGUgbGlzdCwgY2F1c2luZyB0aGUgZXBpZAorCSAgIHRvIGJlIGRlLWFsbG9jYXRlZC4gV2Ugd291bGQgdGhlbiBzdGFydCB0aGUgdHJhbnNmZXIgd2l0aCBhbiBpbnZhbGlkIGVwaWQgLT4gZXBpZCBhdHRuLgorCisJICAgRW1wdHkgY2hlY2sgYW5kIGFkZCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBtaWdodCBjb25jbHVkZSB0aGF0IHRoZSBsaXN0IGlzIG5vdCBlbXB0eSwKKwkgICBhZnRlciB3aGljaCBpdCBiZWNvbWVzIGVtcHR5IGJlZm9yZSB3ZSBhZGQgdGhlIG5ldyB1cmIgdG8gdGhlIGxpc3QsIGNhdXNpbmcgdXMgbm90IHRvCisJICAgaW5zZXJ0IHRoZSBuZXcgdHJhZmZpYyBpbnRvIHRoZSBTQiBsaXN0LiAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKwllcGlkID0gZXRyYXhfdXNiX3NldHVwX2VwaWQodXJiKTsKKwlpZiAoZXBpZCA9PSAtMSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJCURCRkVYSVQ7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwllbXB0eSA9IHVyYl9saXN0X2VtcHR5KGVwaWQpOworCXVyYl9saXN0X2FkZCh1cmIsIGVwaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKworCWRiZ19jdHJsKCJBZGRpbmcgY3RybCB1cmIgMHglbHggdG8gJXMgbGlzdCwgZXBpZCAlZCIsCisJCSAodW5zaWduZWQgbG9uZyl1cmIsIGVtcHR5ID8gImVtcHR5IiA6ICIiLCBlcGlkKTsKKworCS8qIE1hcmsgdGhlIHVyYiBhcyBiZWluZyBpbiBwcm9ncmVzcy4gKi8KKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCS8qIFNldHVwIHRoZSBoY3ByaXYgZGF0YS4gKi8KKwl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwkvKiBUaGlzIHNldHMgcnhfb2Zmc2V0IHRvIDAuICovCisJbWVtc2V0KHVyYl9wcml2LCAwLCBzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCkpOworCXVyYl9wcml2LT51cmJfc3RhdGUgPSBOT1RfU1RBUlRFRDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJaWYgKGVtcHR5KSB7CisJCWV0cmF4X3VzYl9hZGRfdG9fY3RybF9zYl9saXN0KHVyYiwgZXBpZCk7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2N0cmxfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2Nfc2V0dXA7CisJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzY19kYXRhOworCVVTQl9TQl9EZXNjX3QgKnNiX2Rlc2Nfc3RhdHVzOworCisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyIG1heGxlbjsKKworCURCRkVOVEVSOworCisJbWF4bGVuID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKworCXNiX2Rlc2Nfc2V0dXAgPSAoVVNCX1NCX0Rlc2NfdCopa21lbV9jYWNoZV9hbGxvYyh1c2JfZGVzY19jYWNoZSwgU0xBQl9GTEFHKTsKKwlhc3NlcnQoc2JfZGVzY19zZXR1cCAhPSBOVUxMKTsKKwlzYl9kZXNjX3N0YXR1cyA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCWFzc2VydChzYl9kZXNjX3N0YXR1cyAhPSBOVUxMKTsKKworCS8qIEluaXRpYWxpemUgdGhlIG1hbmRhdG9yeSBzZXR1cCBTQiBkZXNjcmlwdG9yICh1c2VkIG9ubHkgaW4gY29udHJvbCB0cmFuc2ZlcnMpICovCisJc2JfZGVzY19zZXR1cC0+c3dfbGVuID0gODsKKwlzYl9kZXNjX3NldHVwLT5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9TQl9jb21tYW5kLCByZW0sIDApIHwKKwkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgc2V0dXApIHwKKwkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpIHwKKwkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykpOworCisJc2JfZGVzY19zZXR1cC0+YnVmID0gdmlydF90b19waHlzKHVyYi0+c2V0dXBfcGFja2V0KTsKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCWRiZ19jdHJsKCJUcmFuc2ZlciBmb3IgZXBpZCAlZCBpcyBPVVQiLCBlcGlkKTsKKworCQkvKiBJZiB0aGlzIENvbnRyb2wgT1VUIHRyYW5zZmVyIGhhcyBhbiBvcHRpb25hbCBkYXRhIHN0YWdlIHdlIGFkZCBhbiBPVVQgdG9rZW4KKwkJICAgYmVmb3JlIHRoZSBtYW5kYXRvcnkgSU4gKHN0YXR1cykgdG9rZW4sIGhlbmNlIHRoZSByZW9yZGVyZWQgU0IgbGlzdCAqLworCisJCXNiX2Rlc2Nfc2V0dXAtPm5leHQgPSB2aXJ0X3RvX3BoeXMoc2JfZGVzY19zdGF0dXMpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKworCQkJZGJnX2N0cmwoIlRoaXMgT1VUIHRyYW5zZmVyIGhhcyBhbiBleHRyYSBkYXRhIHN0YWdlIik7CisKKwkJCXNiX2Rlc2NfZGF0YSA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQkJYXNzZXJ0KHNiX2Rlc2NfZGF0YSAhPSBOVUxMKTsKKworCQkJc2JfZGVzY19zZXR1cC0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX2RhdGEpOworCisJCQlzYl9kZXNjX2RhdGEtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXNiX2Rlc2NfZGF0YS0+Y29tbWFuZCA9IChJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIG91dCkgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpIHwKKwkJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpKTsKKwkJCXNiX2Rlc2NfZGF0YS0+YnVmID0gdmlydF90b19waHlzKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXNiX2Rlc2NfZGF0YS0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX3N0YXR1cyk7CisJCX0KKworCQlzYl9kZXNjX3N0YXR1cy0+c3dfbGVuID0gMTsKKwkJc2JfZGVzY19zdGF0dXMtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIGluKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgaW50ciwgeWVzKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCisJCXNiX2Rlc2Nfc3RhdHVzLT5idWYgPSAwOworCQlzYl9kZXNjX3N0YXR1cy0+bmV4dCA9IDA7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCisJCWRiZ19jdHJsKCJUcmFuc2ZlciBmb3IgZXBpZCAlZCBpcyBJTiIsIGVwaWQpOworCQlkYmdfY3RybCgidHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9ICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJZGJnX2N0cmwoInJlbSBpcyBjYWxjdWxhdGVkIHRvICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgbWF4bGVuKTsKKworCQlzYl9kZXNjX2RhdGEgPSAoVVNCX1NCX0Rlc2NfdCopa21lbV9jYWNoZV9hbGxvYyh1c2JfZGVzY19jYWNoZSwgU0xBQl9GTEFHKTsKKwkJYXNzZXJ0KHNiX2Rlc2NfZGF0YSAhPSBOVUxMKTsKKworCQlzYl9kZXNjX3NldHVwLT5uZXh0ID0gdmlydF90b19waHlzKHNiX2Rlc2NfZGF0YSk7CisKKwkJc2JfZGVzY19kYXRhLT5zd19sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPworCQkJKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIDEpIC8gbWF4bGVuICsgMSA6IDA7CisJCWRiZ19jdHJsKCJzd19sZW4gZ290ICVkIiwgc2JfZGVzY19kYXRhLT5zd19sZW4pOworCisJCXNiX2Rlc2NfZGF0YS0+Y29tbWFuZCA9CisJCQkoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heGxlbikgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpKTsKKworCQlzYl9kZXNjX2RhdGEtPmJ1ZiA9IDA7CisJCXNiX2Rlc2NfZGF0YS0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX3N0YXR1cyk7CisKKwkJLyogUmVhZCBjb21tZW50IGF0IHpvdXRfYnVmZmVyIGRlY2xhcmF0aW9uIGZvciBhbiBleHBsYW5hdGlvbiB0byB0aGlzLiAqLworCQlzYl9kZXNjX3N0YXR1cy0+c3dfbGVuID0gMTsKKwkJc2JfZGVzY19zdGF0dXMtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkJICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkJICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGludHIsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCQlzYl9kZXNjX3N0YXR1cy0+YnVmID0gdmlydF90b19waHlzKCZ6b3V0X2J1ZmZlclswXSk7CisJCXNiX2Rlc2Nfc3RhdHVzLT5uZXh0ID0gMDsKKwl9CisKKwl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBzYl9kZXNjX3NldHVwOworCXVyYl9wcml2LT5sYXN0X3NiID0gc2JfZGVzY19zdGF0dXM7CisJdXJiX3ByaXYtPmVwaWQgPSBlcGlkOworCisJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFNUQVJURUQ7CisKKwkvKiBSZXNldCB0b2dnbGUgYml0cyBhbmQgcmVzZXQgZXJyb3IgY291bnQsIHJlbWVtYmVyIHRvIGRpIGFuZCBlaSAqLworCS8qIFdhcm5pbmc6IGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBsb2NraW5nIGRvZXNuJ3Qgd29yayB3aXRoIGJvdHRvbS1oYWx2ZXMgKi8KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCWlmICgqUl9VU0JfRVBUX0RBVEEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBob2xkKSkgeworCQlwYW5pYygiSG9sZCB3YXMgc2V0IGluICVzIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKworCS8qIEZJWE1FOiBDb21wYXJlIHdpdGggZXRyYXhfdXNiX2FkZF90b19idWxrX3NiX2xpc3Qgd2hlcmUgdGhlIHRvZ2dsZSBiaXRzCisJICAgYXJlIHNldCB0byBhIHNwZWNpZmljIHZhbHVlLiBXaHkgdGhlIGRpZmZlcmVuY2U/IFJlYWQgIlRyYW5zZmVyIGFuZCBUb2dnbGUgQml0cworCSAgIGluIERlc2lnbmVyJ3MgUmVmZXJlbmNlLCBwLiA4IC0gMTEuICovCisJKlJfVVNCX0VQVF9EQVRBICY9CisJCX4oSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgZXJyb3JfY291bnRfaW4pIHwKKwkJICBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9vdXQpIHwKKwkJICBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCB0X2luKSB8CisJCSAgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdF9vdXQpKTsKKworCS8qIFNpbmNlIHdlIHVzZSB0aGUgcnggaW50ZXJydXB0IHRvIGNvbXBsZXRlIGN0cmwgdXJicywgd2UgY2FuIGVuYWJsZSBpbnRlcnJ1cHRzIG5vdworCSAgIChpLmUuIHdlIGRvbid0IGNoZWNrIHRoZSBzdWIgcG9pbnRlciBvbiBhbiBlb3QgaW50ZXJydXB0IGxpa2Ugd2UgZG8gZm9yIGJ1bGsgdHJhZmZpYykuICovCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgRVAgZGVzY3JpcHRvciBpcyBkaXNhYmxlZC4gKi8KKwlhc3NlcnQoIShUeEN0cmxFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKTsKKworCS8qIFNldCB1cCBhbmQgZW5hYmxlIHRoZSBFUCBkZXNjcmlwdG9yLiAqLworCVR4Q3RybEVQTGlzdFtlcGlkXS5zdWIgPSB2aXJ0X3RvX3BoeXMoc2JfZGVzY19zZXR1cCk7CisJVHhDdHJsRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJVHhDdHJsRVBMaXN0W2VwaWRdLmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKworCS8qIFdlIHN0YXJ0IHRoZSBETUEgc3ViIGNoYW5uZWwgd2l0aG91dCBjaGVja2luZyBpZiBpdCdzIHJ1bm5pbmcgb3Igbm90LCBiZWNhdXNlOgorCSAgIDEpIElmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBpc3N1aW5nIHRoZSBzdGFydCBjb21tYW5kIGlzIGEgbm9wLgorCSAgIDIpIFdlIGF2b2lkIGEgdGVzdC1hbmQtc2V0IHJhY2UgY29uZGl0aW9uLiAqLworCSpSX0RNQV9DSDhfU1VCMV9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMV9DTUQsIGNtZCwgc3RhcnQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKworCURCRkVOVEVSOworCisJaWYgKHN0YXR1cykKKwkJd2FybigiQ29tcGxldGluZyBjdHJsIHVyYiB3aXRoIHN0YXR1cyAlZC4iLCBzdGF0dXMpOworCisJZGJnX2N0cmwoIkNvbXBsZXRpbmcgY3RybCBlcGlkICVkLCB1cmIgMHglbHgiLCBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJLyogUmVtb3ZlIHRoaXMgdXJiIGZyb20gdGhlIGxpc3QuICovCisJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkvKiBGb3IgYW4gSU4gcGlwZSwgd2UgYWx3YXlzIHNldCB0aGUgYWN0dWFsIGxlbmd0aCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdhcworCSAgIGFuIGVycm9yIG9yIG5vdCAod2hpY2ggbWVhbnMgdGhlIGRldmljZSBkcml2ZXIgY2FuIHVzZSB0aGUgZGF0YSBpZiBpdCB3YW50cyB0bykuICovCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCQl1cmItPmFjdHVhbF9sZW5ndGggPSB1cmJfcHJpdi0+cnhfb2Zmc2V0OworCX0KKworCS8qIEZJWE1FOiBJcyB0aGVyZSBzb21ldGhpbmcgb2YgdGhlIHRoaW5ncyBiZWxvdyB3ZSBzaG91bGRuJ3QgZG8gaWYgdGhlcmUgd2FzIGFuIGVycm9yPworCSAgIExpa2UsIG1heWJlIHdlIHNob3VsZG4ndCBpbnNlcnQgbW9yZSB0cmFmZmljLiAqLworCisJLyogUmVtZW1iZXIgdG8gZnJlZSB0aGUgU0JzLiAqLworCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwlrZnJlZSh1cmJfcHJpdik7CisJdXJiLT5oY3ByaXYgPSAwOworCisJLyogSWYgdGhlcmUgYXJlIGFueSBtb3JlIHVyYnMgaW4gdGhlIGxpc3Qgd2UnZCBiZXR0ZXIgc3RhcnQgc2VuZGluZy4gKi8KKwlpZiAoIXVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCXN0cnVjdCB1cmIgKm5ld191cmI7CisKKwkJLyogR2V0IHRoZSBmaXJzdCB1cmIuICovCisJCW5ld191cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKwkJYXNzZXJ0KG5ld191cmIpOworCisJCWRiZ19jdHJsKCJNb3JlIGN0cmwgZm9yIGVwaWQgJWQsIGZpcnN0IHVyYiA9IDB4JWx4IiwgZXBpZCwgKHVuc2lnbmVkIGxvbmcpbmV3X3VyYik7CisKKwkJZXRyYXhfdXNiX2FkZF90b19jdHJsX3NiX2xpc3QobmV3X3VyYiwgZXBpZCk7CisJfQorCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisKKwkvKiBXZSBsZXQgYW55IG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoZSBsYXllciBhYm92ZSBoYXZlIHByZWNlZGVuY2UuICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8qIFVSQl9TSE9SVF9OT1RfT0sgbWVhbnMgdGhhdCBzaG9ydCByZWFkcyAoc2hvcnRlciB0aGFuIHRoZSBlbmRwb2ludCdzIG1heCBsZW5ndGgpCisJCSAgIGlzIHRvIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuICovCisJCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgeworCQkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgorCQkJICAgICh1cmItPmFjdHVhbF9sZW5ndGggIT0KKwkJCSAgICAgdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSkpIHsKKwkJCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQl9CisJCX0KKwl9CisKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCS8qIE5vIG1vcmUgdHJhZmZpYy4gVGltZSB0byBjbGVhbiB1cC4gKi8KKwkJZXRyYXhfdXNiX2ZyZWVfZXBpZChlcGlkKTsKKwkJLyogTXVzdCBzZXQgc3ViIHBvaW50ZXIgdG8gMC4gKi8KKwkJZGJnX2N0cmwoIk5vIGN0cmwgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKwkJVHhDdHJsRVBMaXN0W2VwaWRdLnN1YiA9IDA7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2ludHJfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKworCWludCBlcGlkOworCisJREJGRU5URVI7CisKKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkvKiBVbnN1cHBvcnRlZCB0cmFuc2ZlciB0eXBlLgorCQkgICBXZSBkb24ndCBzdXBwb3J0IGludGVycnVwdCBvdXQgdHJhZmZpYy4gKElmIHdlIGRvLCB3ZSBjYW4ndCBzdXBwb3J0CisJCSAgIGludGVydmFscyBmb3IgbmVpdGhlciBpbiBvciBvdXQgdHJhZmZpYywgYnV0IGFyZSBmb3JjZWQgdG8gc2NoZWR1bGUgYWxsCisJCSAgIGludGVycnVwdCB0cmFmZmljIGluIG9uZSBmcmFtZS4pICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwaWQgPSBldHJheF91c2Jfc2V0dXBfZXBpZCh1cmIpOworCWlmIChlcGlkID09IC0xKSB7CisJCURCRkVYSVQ7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghdXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJLyogVGhlcmUgaXMgYWxyZWFkeSBhIHF1ZXVlZCB1cmIgZm9yIHRoaXMgZW5kcG9pbnQuICovCisJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwlkYmdfaW50cigiQWRkIGludHIgdXJiIDB4JWx4LCB0byBsaXN0LCBlcGlkICVkIiwgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCXVyYl9saXN0X2FkZCh1cmIsIGVwaWQpOworCWV0cmF4X3VzYl9hZGRfdG9faW50cl9zYl9saXN0KHVyYiwgZXBpZCk7CisKKwlyZXR1cm4gMDsKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9faW50cl9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisKKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICp0bXBfZXA7CisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZmlyc3RfZXA7CisKKwljaGFyIG1heGxlbjsKKwlpbnQgaW50ZXJ2YWw7CisJaW50IGk7CisKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKworCURCRkVOVEVSOworCisJbWF4bGVuID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwlpbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisKKwl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CisJdXJiLT5oY3ByaXYgPSB1cmJfcHJpdjsKKworCWZpcnN0X2VwID0gJlR4SW50ckVQTGlzdFswXTsKKworCS8qIFJvdW5kIG9mIHRoZSBpbnRlcnZhbCB0byAyXm4sIGl0IGlzIG9idmlvdXMgdGhhdCB0aGlzIGNvZGUgZmF2b3VycworCSAgIHNtYWxsZXIgbnVtYmVycywgYnV0IHRoYXQgaXMgYWN0dWFsbHkgYSBnb29kIHRoaW5nICovCisJLyogRklYTUU6IFRoZSAicm91bmRpbmcgZXJyb3IiIGZvciBsYXJnZXIgaW50ZXJ2YWxzIHdpbGwgYmUgcXVpdGUKKwkgICBsYXJnZS4gRm9yIGluIHRyYWZmaWMgdGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIHNpbmNlIGl0IHdpbGwgb25seQorCSAgIG1lYW4gdGhhdCB3ZSAicG9sbCIgbW9yZSBvZnRlbi4gKi8KKwlmb3IgKGkgPSAwOyBpbnRlcnZhbDsgaSsrKSB7CisJCWludGVydmFsID0gaW50ZXJ2YWwgPj4gMTsKKwl9CisJaW50ZXJ2YWwgPSAxIDw8IChpIC0gMSk7CisKKwlkYmdfaW50cigiSW50ZXJ2YWwgcm91bmRlZCB0byAlZCIsIGludGVydmFsKTsKKworCXRtcF9lcCA9IGZpcnN0X2VwOworCWkgPSAwOworCWRvIHsKKwkJaWYgKHRtcF9lcC0+Y29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVvZikpIHsKKwkJCWlmICgoaSAlIGludGVydmFsKSA9PSAwKSB7CisJCQkJLyogSW5zZXJ0IHRoZSB0cmFmZmljIGVwIGFmdGVyIHRtcF9lcCAqLworCQkJCVVTQl9FUF9EZXNjX3QgKmVwX2Rlc2M7CisJCQkJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzYzsKKworCQkJCWRiZ19pbnRyKCJJbnNlcnRpbmcgRVAgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKworCQkJCWVwX2Rlc2MgPSAoVVNCX0VQX0Rlc2NfdCAqKQorCQkJCQlrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQkJCXNiX2Rlc2MgPSAoVVNCX1NCX0Rlc2NfdCAqKQorCQkJCQlrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQkJCWFzc2VydChlcF9kZXNjICE9IE5VTEwpOworCQkJCUNIRUNLX0FMSUdOKGVwX2Rlc2MpOworCQkJCWFzc2VydChzYl9kZXNjICE9IE5VTEwpOworCisJCQkJZXBfZGVzYy0+c3ViID0gdmlydF90b19waHlzKHNiX2Rlc2MpOworCQkJCWVwX2Rlc2MtPmh3X2xlbiA9IDA7CisJCQkJZXBfZGVzYy0+Y29tbWFuZCA9IChJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgZXBpZCkgfAorCQkJCQkJICAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykpOworCisKKwkJCQkvKiBSb3VuZCB1cHdhcmRzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBvZiBzaXplIG1heGxlbgorCQkJCSAgIHRoYXQgdGhpcyBTQiBkZXNjcmlwdG9yIHNob3VsZCByZWNlaXZlLiAqLworCQkJCXNiX2Rlc2MtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA/CisJCQkJCSh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSAxKSAvIG1heGxlbiArIDEgOiAwOworCQkJCXNiX2Rlc2MtPm5leHQgPSAwOworCQkJCXNiX2Rlc2MtPmJ1ZiA9IDA7CisJCQkJc2JfZGVzYy0+Y29tbWFuZCA9CisJCQkJCShJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBtYXhsZW4pIHwKKwkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkJCQllcF9kZXNjLT5uZXh0ID0gdG1wX2VwLT5uZXh0OworCQkJCXRtcF9lcC0+bmV4dCA9IHZpcnRfdG9fcGh5cyhlcF9kZXNjKTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCQl0bXBfZXAgPSAoVVNCX0VQX0Rlc2NfdCAqKXBoeXNfdG9fdmlydCh0bXBfZXAtPm5leHQpOworCX0gd2hpbGUgKHRtcF9lcCAhPSBmaXJzdF9lcCk7CisKKworCS8qIE5vdGUgdGhhdCBmaXJzdF9zYi9sYXN0X3NiIGRvZXNuJ3QgYXBwbHkgdG8gaW50ZXJydXB0IHRyYWZmaWMuICovCisJdXJiX3ByaXYtPmVwaWQgPSBlcGlkOworCisJLyogV2Ugc3RhcnQgdGhlIERNQSBzdWIgY2hhbm5lbCB3aXRob3V0IGNoZWNraW5nIGlmIGl0J3MgcnVubmluZyBvciBub3QsIGJlY2F1c2U6CisJICAgMSkgSWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIGlzc3VpbmcgdGhlIHN0YXJ0IGNvbW1hbmQgaXMgYSBub3AuCisJICAgMikgV2UgYXZvaWQgYSB0ZXN0LWFuZC1zZXQgcmFjZSBjb25kaXRpb24uICovCisJKlJfRE1BX0NIOF9TVUIyX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIyX0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCisKKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2ludHJfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKworCURCRkVOVEVSOworCisJaWYgKHN0YXR1cykKKwkJd2FybigiQ29tcGxldGluZyBpbnRyIHVyYiB3aXRoIHN0YXR1cyAlZC4iLCBzdGF0dXMpOworCisJZGJnX2ludHIoIkNvbXBsZXRpbmcgaW50ciBlcGlkICVkLCB1cmIgMHglbHgiLCBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gdXJiX3ByaXYtPnJ4X29mZnNldDsKKworCWRiZ19pbnRyKCJpbnRlcnJ1cHQgdXJiLT5hY3R1YWxfbGVuZ3RoID0gJWQiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJLyogV2UgbGV0IGFueSBub24temVybyBzdGF0dXMgZnJvbSB0aGUgbGF5ZXIgYWJvdmUgaGF2ZSBwcmVjZWRlbmNlLiAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBVUkJfU0hPUlRfTk9UX09LIG1lYW5zIHRoYXQgc2hvcnQgcmVhZHMgKHNob3J0ZXIgdGhhbiB0aGUgZW5kcG9pbnQncyBtYXggbGVuZ3RoKQorCQkgICBpcyB0byBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLworCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spIHsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0KKwkJCSAgICB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKSB7CisJCQkJdXJiLT5zdGF0dXMgPSAtRVJFTU9URUlPOworCQkJfQorCQl9CisJfQorCisJLyogVGhlIGRyaXZlciB3aWxsIHJlc3VibWl0IHRoZSBVUkIgc28gd2UgbmVlZCB0byByZW1vdmUgaXQgZmlyc3QgKi8KKyAgICAgICAgZXRyYXhfdXNiX3VubGlua191cmIodXJiLCAwKTsKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJREJGRVhJVDsKK30KKworCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfaXNvY191cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWludCBlcGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWRiZ19pc29jKCJTdWJtaXR0aW5nIGlzb2MgdXJiID0gMHglbHgiLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJLyogRXBpZCBhbGxvY2F0aW9uLCBlbXB0eSBjaGVjayBhbmQgbGlzdCBhZGQgbXVzdCBiZSBwcm90ZWN0ZWQuCisJICAgUmVhZCBhYm91dCB0aGlzIGluIGV0cmF4X3VzYl9zdWJtaXRfY3RybF91cmIuICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBlcGlkIGZvciB0aGlzIHVyYiA/ICovCisJZXBpZCA9IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHVyYik7CisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJREJGRVhJVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBPaywgbm93IHdlIGdvdCB2YWxpZCBlbmRwb2ludCwgbGV0cyBpbnNlcnQgc29tZSB0cmFmZmljICovCisKKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCS8qIEZpbmQgdGhlIGxhc3QgdXJiIGluIHRoZSBVUkJfTGlzdCBhbmQgYWRkIHRoaXMgdXJiIGFmdGVyIHRoYXQgb25lLgorCSAgIEFsc28gYWRkIHRoZSB0cmFmZmljLCB0aGF0IGlzIGRvIGFuIGV0cmF4X3VzYl9hZGRfdG9faXNvY19zYl9saXN0LiAgVGhpcworCSAgIGlzIGltcG9ydGFudCB0byBtYWtlIHRoaXMgaW4gInJlYWwgdGltZSIgc2luY2UgaXNvY2hyb25vdXMgdHJhZmZpYyBpcworCSAgIHRpbWUgc2Vuc2l0aXZlLiAqLworCisJZGJnX2lzb2MoIkFkZGluZyBpc29jIHVyYiB0byAocG9zc2libHkgZW1wdHkpIGxpc3QiKTsKKwl1cmJfbGlzdF9hZGQodXJiLCBlcGlkKTsKKwlldHJheF91c2JfYWRkX3RvX2lzb2Nfc2JfbGlzdCh1cmIsIGVwaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NoZWNrX2Vycm9yX2lzb2NfZXAoY29uc3QgaW50IGVwaWQpCit7CisJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisJaW50IGVycm9yX2NvZGU7CisJX191MzIgcl91c2JfZXB0X2RhdGE7CisKKwkvKiBXZSBjYW4ndCByZWFkIFJfVVNCX0VQSURfQVRUTiBoZXJlIHNpbmNlIGl0IHdvdWxkIGNsZWFyIHRoZSBpc29fZW9mLAorCSAgIGJ1bGtfZW90IGFuZCBlcGlkX2F0dG4gaW50ZXJydXB0cy4gIFNvIHdlIGp1c3QgY2hlY2sgdGhlIHN0YXR1cyBvZgorCSAgIHRoZSBlcGlkIHdpdGhvdXQgdGVzdGluZyBpZiBmb3IgaXQgaW4gUl9VU0JfRVBJRF9BVFROLiAqLworCisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJbm9wKCk7CisJLyogTm90ZSB0aGF0IGFsdGhvdWdoIHRoZXJlIGFyZSBzZXBhcmF0ZSBSX1VTQl9FUFRfREFUQSBhbmQgUl9VU0JfRVBUX0RBVEFfSVNPCisJICAgcmVnaXN0ZXJzLCB0aGV5IGFyZSBsb2NhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MgYW5kIGFyZSBvZiB0aGUgc2FtZSBzaXplLgorCSAgIEluIG90aGVyIHdvcmRzLCB0aGlzIHJlYWQgc2hvdWxkIGJlIG9rIGZvciBpc29jIGFsc28uICovCisJcl91c2JfZXB0X2RhdGEgPSAqUl9VU0JfRVBUX0RBVEE7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwllcnJvcl9jb2RlID0gSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIHJfdXNiX2VwdF9kYXRhKTsKKworCWlmIChyX3VzYl9lcHRfZGF0YSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGhvbGQpKSB7CisJCXdhcm4oIkhvbGQgd2FzIHNldCBmb3IgZXBpZCAlZC4iLCBlcGlkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlcnJvcl9jb2RlID09IElPX1NUQVRFX1ZBTFVFKFJfVVNCX0VQVF9EQVRBX0lTTywgZXJyb3JfY29kZSwgbm9fZXJyb3IpKSB7CisKKwkJLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgU0IgbGlzdCBvZiB0aGUgZXB0IHdhcyBjb21wbGV0ZWQgYmVmb3JlCisJCSAgIG5ldyBkYXRhIHdhcyBhcHBlbmRlZCB0byBpdC4gIFRoaXMgaXMgbm90IGFuIGVycm9yLCBidXQgaW5kaWNhdGVzCisJCSAgIGxhcmdlIHN5c3RlbSBvciBVU0IgbG9hZCBhbmQgY291bGQgcG9zc2libHkgY2F1c2UgdHJvdWJsZSBmb3IKKwkJICAgdmVyeSB0aW1pbmcgc2Vuc2l0aXZlIFVTQiBkZXZpY2UgZHJpdmVycyBzbyB3ZSBsb2cgaXQuCisJCSovCisJCWluZm8oIklzb2MuIGVwaWQgJWQgZGlzYWJsZWQgd2l0aCBubyBlcnJvciIsIGVwaWQpOworCQlyZXR1cm47CisKKwl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCBzdGFsbCkpIHsKKwkJLyogTm90IHJlYWxseSBhIHByb3RvY29sIGVycm9yLCBqdXN0IHNheXMgdGhhdCB0aGUgZW5kcG9pbnQgZ2F2ZQorCQkgICBhIHN0YWxsIHJlc3BvbnNlLiBOb3RlIHRoYXQgZXJyb3JfY29kZSBjYW5ub3QgYmUgc3RhbGwgZm9yIGlzb2MuICovCisJCXBhbmljKCJJc29jIHRyYWZmaWMgY2Fubm90IHN0YWxsIik7CisKKwl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCBidXNfZXJyb3IpKSB7CisJCS8qIFR3byBkZXZpY2VzIHJlc3BvbmRlZCB0byBhIHRyYW5zYWN0aW9uIHJlcXVlc3QuIE11c3QgYmUgcmVzb2x2ZWQKKwkJICAgYnkgc29mdHdhcmUuIEZJWE1FOiBSZXNldCBwb3J0cz8gKi8KKwkJcGFuaWMoIkJ1cyBlcnJvciBmb3IgZXBpZCAlZC4iCisJCSAgICAgICIgVHdvIGRldmljZXMgcmVzcG9uZGVkIHRvIHRyYW5zYWN0aW9uIHJlcXVlc3QiLAorCQkgICAgICBlcGlkKTsKKworCX0gZWxzZSBpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgYnVmZmVyX2Vycm9yKSkgeworCQkvKiBETUEgb3ZlcnJ1biBvciB1bmRlcnJ1bi4gKi8KKwkJd2FybigiQnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZm9yIGVwaWQgJWQuIERNQSB0b28gYnVzeT8iLCBlcGlkKTsKKworCQkvKiBJdCBzZWVtcyB0aGF0IGVycm9yX2NvZGUgPSBidWZmZXJfZXJyb3IgaW4KKwkJICAgUl9VU0JfRVBUX0RBVEEvUl9VU0JfRVBUX0RBVEFfSVNPIGFuZCBvdXJ1biA9IHllcyBpbiBSX1VTQl9TVEFUVVMKKwkJICAgYXJlIHRoZSBzYW1lIGVycm9yLiAqLworCX0KK30KKworCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2lzb2Nfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCisJaW50IGkgPSAwOworCisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisJVVNCX1NCX0Rlc2NfdCAqcHJldl9zYl9kZXNjLCAgKm5leHRfc2JfZGVzYywgKnRlbXBfc2JfZGVzYzsKKworCURCRkVOVEVSOworCisJcHJldl9zYl9kZXNjID0gbmV4dF9zYl9kZXNjID0gdGVtcF9zYl9kZXNjID0gTlVMTDsKKworCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEdGUF9BVE9NSUMpOworCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKKwltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CisKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCXVyYl9wcml2LT5lcGlkID0gZXBpZDsKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisKKwkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPT0gMCkgcGFuaWMoImV0cmF4X3VzYl9hZGRfdG9faXNvY19zYl9saXN0IDAgcGFja2V0c1xuIik7CisKKwkJZGJnX2lzb2MoIlRyYW5zZmVyIGZvciBlcGlkICVkIGlzIE9VVCIsIGVwaWQpOworCQlkYmdfaXNvYygiJWQgcGFja2V0cyBpbiBVUkIiLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKworCQkvKiBDcmVhdGUgb25lIFNCIGRlc2NyaXB0b3IgZm9yIGVhY2ggcGFja2V0IGFuZCBsaW5rIHRoZW0gdG9nZXRoZXIuICovCisJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCWlmICghdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgpCisJCQkJY29udGludWU7CisKKwkJCW5leHRfc2JfZGVzYyA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0FUT01JQyk7CisJCQlhc3NlcnQobmV4dF9zYl9kZXNjICE9IE5VTEwpOworCisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPiAwKSB7CisKKwkJCQluZXh0X3NiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBvdXQpIHwKKwkJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSk7CisKKwkJCQluZXh0X3NiX2Rlc2MtPnN3X2xlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworCQkJCW5leHRfc2JfZGVzYy0+YnVmID0gdmlydF90b19waHlzKChjaGFyKil1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKworCQkJCS8qIENoZWNrIGlmIGZ1bGwgbGVuZ3RoIHRyYW5zZmVyLiAqLworCQkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9PQorCQkJCSAgICB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKSB7CisJCQkJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCB8PSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZnVsbCwgeWVzKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRiZ19pc29jKCJ6ZXJvIGxlbiBwYWNrZXQiKTsKKwkJCQluZXh0X3NiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIHpvdXQpIHwKKwkJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSB8CisJCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpKTsKKworCQkJCW5leHRfc2JfZGVzYy0+c3dfbGVuID0gMTsKKwkJCQluZXh0X3NiX2Rlc2MtPmJ1ZiA9IHZpcnRfdG9fcGh5cygmem91dF9idWZmZXJbMF0pOworCQkJfQorCisJCQkvKiBGaXJzdCBTQiBkZXNjcmlwdG9yIHRoYXQgYmVsb25ncyB0byB0aGlzIHVyYiAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBuZXh0X3NiX2Rlc2M7CisJCQllbHNlCisJCQkJcHJldl9zYl9kZXNjLT5uZXh0ID0gdmlydF90b19waHlzKG5leHRfc2JfZGVzYyk7CisKKwkJCXByZXZfc2JfZGVzYyA9IG5leHRfc2JfZGVzYzsKKwkJfQorCisJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCB8PSAoSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGludHIsIHllcykgfAorCQkJCQkgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCQluZXh0X3NiX2Rlc2MtPm5leHQgPSAwOworCQl1cmJfcHJpdi0+bGFzdF9zYiA9IG5leHRfc2JfZGVzYzsKKworCX0gZWxzZSBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisKKwkJZGJnX2lzb2MoIlRyYW5zZmVyIGZvciBlcGlkICVkIGlzIElOIiwgZXBpZCk7CisJCWRiZ19pc29jKCJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWQiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQlkYmdfaXNvYygicmVtIGlzIGNhbGN1bGF0ZWQgdG8gJWQiLCB1cmItPmlzb19mcmFtZV9kZXNjW3VyYi0+bnVtYmVyX29mX3BhY2tldHMgLSAxXS5sZW5ndGgpOworCisJCS8qIE5vdGUgdGhhdCBpbiBkZXNjcmlwdG9ycyBmb3IgcGVyaW9kaWMgdHJhZmZpYyBhcmUgbm90IGNvbnN1bWVkLiBUaGlzIG1lYW5zIHRoYXQKKwkJICAgdGhlIFVTQiBjb250cm9sbGVyIG5ldmVyIHByb3BhZ2F0ZXMgaW4gdGhlIFNCIGxpc3QuIEluIG90aGVyIHdvcmRzLCBpZiB0aGVyZSBhbHJlYWR5CisJCSAgIGlzIGFuIFNCIGRlc2NyaXB0b3IgaW4gdGhlIGxpc3QgZm9yIHRoaXMgRVAgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4gKi8KKwkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPT0gMCkgeworCQkJZGJnX2lzb2MoIklzb2MgdHJhZmZpYyBub3QgYWxyZWFkeSBydW5uaW5nLCBhbGxvY2F0aW5nIFNCIik7CisKKwkJCW5leHRfc2JfZGVzYyA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0FUT01JQyk7CisJCQlhc3NlcnQobmV4dF9zYl9kZXNjICE9IE5VTEwpOworCisJCQluZXh0X3NiX2Rlc2MtPmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBpbikgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCisJCQluZXh0X3NiX2Rlc2MtPm5leHQgPSAwOworCQkJbmV4dF9zYl9kZXNjLT5zd19sZW4gPSAxOyAvKiBBY3R1YWwgbnVtYmVyIG9mIHBhY2tldHMgaXMgbm90IHJlbGV2YW50CisJCQkJCQkgICAgIGZvciBwZXJpb2RpYyBpbiB0cmFmZmljIGFzIGxvbmcgYXMgaXQgaXMgbW9yZQorCQkJCQkJICAgICB0aGFuIHplcm8uICBTZXQgdG8gMSBhbHdheXMuICovCisJCQluZXh0X3NiX2Rlc2MtPmJ1ZiA9IDA7CisKKwkJCS8qIFRoZSByZW0gZmllbGQgaXMgZG9uJ3QgY2FyZSBmb3IgaXNvYyB0cmFmZmljLCBzbyB3ZSBkb24ndCBzZXQgaXQuICovCisKKwkJCS8qIE9ubHkgb25lIFNCIGRlc2NyaXB0b3IgdGhhdCBiZWxvbmdzIHRvIHRoaXMgdXJiLiAqLworCQkJdXJiX3ByaXYtPmZpcnN0X3NiID0gbmV4dF9zYl9kZXNjOworCQkJdXJiX3ByaXYtPmxhc3Rfc2IgPSBuZXh0X3NiX2Rlc2M7CisKKwkJfSBlbHNlIHsKKworCQkJZGJnX2lzb2MoIklzb2MgdHJhZmZpYyBhbHJlYWR5IHJ1bm5pbmcsIGp1c3Qgc2V0dGluZyBmaXJzdC9sYXN0X3NiIik7CisKKwkJCS8qIEVhY2ggRVAgZm9yIGlzb2MgaW4gd2lsbCBoYXZlIG9ubHkgb25lIFNCIGRlc2NyaXB0b3IsIHNldHVwIHdoZW4gc3VibWl0dGluZyB0aGUKKwkJCSAgIGFscmVhZHkgYWN0aXZlIHVyYi4gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHdlIG1heSBoYXZlIHNldmVyYWwgZmlyc3Rfc2IvbGFzdF9zYgorCQkJICAgcG9pbnRpbmcgYXQgdGhlIHNhbWUgU0IgZGVzY3JpcHRvciwgdGhleSBhcmUgZnJlZWQgb25seSBvbmNlICh3aGVuIHRoZSBsaXN0IGhhcworCQkJICAgYmVjb21lIGVtcHR5KS4gKi8KKwkJCXVyYl9wcml2LT5maXJzdF9zYiA9IHBoeXNfdG9fdmlydChUeElzb2NFUExpc3RbZXBpZF0uc3ViKTsKKwkJCXVyYl9wcml2LT5sYXN0X3NiID0gcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpOworCQkJcmV0dXJuOworCQl9CisKKwl9CisKKwkvKiBGaW5kIHRoZSBzcG90IHRvIGluc2VydCB0aGlzIHVyYiBhbmQgYWRkIGl0LiAqLworCWlmIChUeElzb2NFUExpc3RbZXBpZF0uc3ViID09IDApIHsKKwkJLyogRmlyc3QgU0IgZGVzY3JpcHRvciBpbnNlcnRlZCBpbiB0aGlzIGxpc3QgKGluIG9yIG91dCkuICovCisJCWRiZ19pc29jKCJJbnNlcnRpbmcgU0IgZGVzYyBmaXJzdCBpbiBsaXN0Iik7CisJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQlUeElzb2NFUExpc3RbZXBpZF0uc3ViID0gdmlydF90b19waHlzKHVyYl9wcml2LT5maXJzdF9zYik7CisKKwl9IGVsc2UgeworCQkvKiBJc29jaHJvbm91cyB0cmFmZmljIGlzIGFscmVhZHkgcnVubmluZywgaW5zZXJ0IG5ldyB0cmFmZmljIGxhc3QgKG9ubHkgb3V0KS4gKi8KKwkJZGJnX2lzb2MoIkluc2VydGluZyBTQiBkZXNjIGxhc3QgaW4gbGlzdCIpOworCQl0ZW1wX3NiX2Rlc2MgPSBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1Yik7CisJCXdoaWxlICgodGVtcF9zYl9kZXNjLT5jb21tYW5kICYgSU9fTUFTSyhVU0JfU0JfY29tbWFuZCwgZW9sKSkgIT0KKwkJICAgICAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpIHsKKwkJCWFzc2VydCh0ZW1wX3NiX2Rlc2MtPm5leHQpOworCQkJdGVtcF9zYl9kZXNjID0gcGh5c190b192aXJ0KHRlbXBfc2JfZGVzYy0+bmV4dCk7CisJCX0KKwkJZGJnX2lzb2MoIkFwcGVuZGluZyBsaXN0IG9uIGRlc2MgMHglcCIsIHRlbXBfc2JfZGVzYyk7CisKKwkJLyogTmV4dCBwb2ludGVyIG11c3QgYmUgc2V0IGJlZm9yZSBlb2wgaXMgcmVtb3ZlZC4gKi8KKwkJdGVtcF9zYl9kZXNjLT5uZXh0ID0gdmlydF90b19waHlzKHVyYl9wcml2LT5maXJzdF9zYik7CisJCS8qIENsZWFyIHRoZSBwcmV2aW91cyBlbmQgb2YgbGlzdCBmbGFnIHNpbmNlIHRoZXJlIGlzIGEgbmV3IGluIHRoZQorCQkgICBhZGRlZCBTQiBkZXNjcmlwdG9yIGxpc3QuICovCisJCXRlbXBfc2JfZGVzYy0+Y29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfU0JfY29tbWFuZCwgZW9sKTsKKworCQlpZiAoIShUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpKSB7CisJCQkvKiA4LjguNSBpbiBEZXNpZ25lcidzIFJlZmVyZW5jZSBzYXlzIHdlIHNob3VsZCBjaGVjayBmb3IgYW5kIGNvcnJlY3QKKwkJCSAgIGFueSBlcnJvcnMgaW4gdGhlIEVQIGhlcmUuICBUaGF0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGlmIGVwaWRfYXR0bgorCQkJICAgaXMgaGFuZGxlZCBjb3JyZWN0bHksIHNvIHdlIGFzc3VtZSBhbGwgaXMgb2suICovCisJCQlkYmdfaXNvYygiRVAgZGlzYWJsZWQiKTsKKwkJCWV0cmF4X3VzYl9jaGVja19lcnJvcl9pc29jX2VwKGVwaWQpOworCisJCQkvKiBUaGUgU0IgbGlzdCB3YXMgZXhoYXVzdGVkLiAqLworCQkJaWYgKHZpcnRfdG9fcGh5cyh1cmJfcHJpdi0+bGFzdF9zYikgIT0gVHhJc29jRVBMaXN0W2VwaWRdLnN1YikgeworCQkJCS8qIFRoZSBuZXcgc3VibGlzdCBkaWQgbm90IGdldCBwcm9jZXNzZWQgYmVmb3JlIHRoZSBFUCB3YXMKKwkJCQkgICBkaXNhYmxlZC4gIFNldHVwIHRoZSBFUCBhZ2Fpbi4gKi8KKwkJCQlkYmdfaXNvYygiU2V0IEVQIHN1YiB0byBuZXcgbGlzdCIpOworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSB2aXJ0X3RvX3BoeXModXJiX3ByaXYtPmZpcnN0X3NiKTsKKwkJCX0KKwkJfQorCX0KKworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0lTT19BU0FQKSB7CisJCS8qIFRoZSBpc29jIHRyYW5zZmVyIHNob3VsZCBiZSBzdGFydGVkIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBzdGFydF9mcmFtZQorCQkgICBmaWVsZCBpcyBhIHJldHVybiB2YWx1ZSBpZiBVUkJfSVNPX0FTQVAgd2FzIHNldC4gQ29tcGFyaW5nIFJfVVNCX0ZNX05VTUJFUgorCQkgICB3aXRoIGEgVVNCIENoaWVmIHRyYWNlIHNob3dzIHRoYXQgdGhlIGZpcnN0IGlzb2MgSU4gdG9rZW4gaXMgc2VudCAyIGZyYW1lcworCQkgICBsYXRlci4gSSdtIG5vdCBzdXJlIGhvdyB0aGlzIGFmZmVjdHMgdXNhZ2Ugb2YgdGhlIHN0YXJ0X2ZyYW1lIGZpZWxkIGJ5IHRoZQorCQkgICBkZXZpY2UgZHJpdmVyLCBvciBob3cgaXQgYWZmZWN0cyB0aGluZ3Mgd2hlbiBVU0JfSVNPX0FTQVAgaXMgbm90IHNldCwgc28KKwkJICAgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8gY29tcGVuc2F0aW9uIGZvciB0aGUgMiBmcmFtZSAibGFnIiBoZXJlLiAqLworCQl1cmItPnN0YXJ0X2ZyYW1lID0gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZik7CisJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBTVEFSVEVEOworCQlkYmdfaXNvYygiVVJCX0lTT19BU0FQIHNldCwgdXJiLT5zdGFydF9mcmFtZSBzZXQgdG8gJWQiLCB1cmItPnN0YXJ0X2ZyYW1lKTsKKwl9IGVsc2UgeworCQkvKiBOb3Qgc3RhcnRlZCB5ZXQuICovCisJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBOT1RfU1RBUlRFRDsKKwkJZGJnX2lzb2MoInVyYl9wcml2LT51cmJfc3RhdGUgc2V0IHRvIE5PVF9TVEFSVEVEIik7CisJfQorCisgICAgICAgLyogV2Ugc3RhcnQgdGhlIERNQSBzdWIgY2hhbm5lbCB3aXRob3V0IGNoZWNraW5nIGlmIGl0J3MgcnVubmluZyBvciBub3QsIGJlY2F1c2U6CisJICAxKSBJZiBpdCdzIGFscmVhZHkgcnVubmluZywgaXNzdWluZyB0aGUgc3RhcnQgY29tbWFuZCBpcyBhIG5vcC4KKwkgIDIpIFdlIGF2b2lkIGEgdGVzdC1hbmQtc2V0IHJhY2UgY29uZGl0aW9uLiAqLworCSpSX0RNQV9DSDhfU1VCM19DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCM19DTUQsIGNtZCwgc3RhcnQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2lzb2NfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJaW50IGVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKwlpbnQgYXV0b19yZXN1Ym1pdCA9IDA7CisKKwlEQkZFTlRFUjsKKwlkYmdfaXNvYygiY29tcGxldGUgdXJiIDB4JXAsIHN0YXR1cyAlZCIsIHVyYiwgc3RhdHVzKTsKKworCWlmIChzdGF0dXMpCisJCXdhcm4oIkNvbXBsZXRpbmcgaXNvYyB1cmIgd2l0aCBzdGF0dXMgJWQuIiwgc3RhdHVzKTsKKworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpIHsKKwkJaW50IGk7CisKKwkJLyogTWFrZSB0aGF0IGFsbCBpc29jIHBhY2tldHMgaGF2ZSBzdGF0dXMgYW5kIGxlbmd0aCBzZXQgYmVmb3JlCisJCSAgIGNvbXBsZXRpbmcgdGhlIHVyYi4gKi8KKwkJZm9yIChpID0gdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXI7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IC1FUFJPVE87CisJCX0KKworCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJnVyYl9saXN0W2VwaWRdKSkgeworCQkJKChldHJheF91cmJfcHJpdl90ICopKHVyYl9saXN0X2ZpcnN0KGVwaWQpLT5oY3ByaXYpKS0+dXJiX3N0YXRlID0gU1RBUlRFRDsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOworCQkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgeworCQkJCS8qIFRoZSBFUCB3YXMgZW5hYmxlZCwgZGlzYWJsZSBpdCBhbmQgd2FpdC4gKi8KKwkJCQlUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKTsKKworCQkJCS8qIEFoLCB0aGUgbHV4dXJ5IG9mIGJ1c3ktd2FpdC4gKi8KKwkJCQl3aGlsZSAoKlJfRE1BX0NIOF9TVUIzX0VQID09IHZpcnRfdG9fcGh5cygmVHhJc29jRVBMaXN0W2VwaWRdKSk7CisJCQl9CisKKwkJCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQlldHJheF91c2JfZnJlZV9lcGlkKGVwaWQpOworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCX0KKworCQl1cmItPmhjcHJpdiA9IDA7CisJCWtmcmVlKHVyYl9wcml2KTsKKworCQkvKiBSZWxlYXNlIGFsbG9jYXRlZCBiYW5kd2lkdGguICovCisJCXVzYl9yZWxlYXNlX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCAwKTsKKwl9IGVsc2UgaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJaW50IGZyZWVkX2Rlc2NyOworCisJCWRiZ19pc29jKCJJc29jIG91dCB1cmIgY29tcGxldGUgMHglcCIsIHVyYik7CisKKwkJLyogVXBkYXRlIHRoZSB1cmIgbGlzdC4gKi8KKwkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkJZnJlZWRfZGVzY3IgPSBldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisJCWRiZ19pc29jKCJmcmVlZCAlZCBkZXNjcmlwdG9ycyBvZiAlZCBwYWNrZXRzIiwgZnJlZWRfZGVzY3IsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCQlhc3NlcnQoZnJlZWRfZGVzY3IgPT0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCXVyYi0+aGNwcml2ID0gMDsKKwkJa2ZyZWUodXJiX3ByaXYpOworCisJCS8qIFJlbGVhc2UgYWxsb2NhdGVkIGJhbmR3aWR0aC4gKi8KKwkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCX0KKworCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCWlmICh1cmItPmNvbXBsZXRlKSB7CisJCXVyYi0+Y29tcGxldGUodXJiLCBOVUxMKTsKKwl9CisKKwlpZiAoYXV0b19yZXN1Ym1pdCkgeworCQkvKiBDaGVjayB0aGF0IHVyYiB3YXMgbm90IHVubGlua2VkIGJ5IHRoZSBjb21wbGV0ZSBjYWxsYmFjay4gKi8KKwkJaWYgKF9fdXJiX2xpc3RfZW50cnkodXJiLCBlcGlkKSkgeworCQkJLyogTW92ZSB0aGlzIG9uZSBkb3duIHRoZSBsaXN0LiAqLworCQkJdXJiX2xpc3RfbW92ZV9sYXN0KHVyYiwgZXBpZCk7CisKKwkJCS8qIE1hcmsgdGhlIG5vdyBmaXJzdCB1cmIgYXMgc3RhcnRlZCAobWF5IGFscmVhZHkgYmUpLiAqLworCQkJKChldHJheF91cmJfcHJpdl90ICopKHVyYl9saXN0X2ZpcnN0KGVwaWQpLT5oY3ByaXYpKS0+dXJiX3N0YXRlID0gU1RBUlRFRDsKKworCQkJLyogTXVzdCBzZXQgdGhpcyB0byAwIHNpbmNlIHRoaXMgdXJiIGlzIHN0aWxsIGFjdGl2ZSBhZnRlcgorCQkJICAgY29tcGxldGlvbi4gKi8KKwkJCXVyYl9wcml2LT5pc29jX3BhY2tldF9jb3VudGVyID0gMDsKKwkJfSBlbHNlIHsKKwkJCXdhcm4oIihJU09DKSBhdXRvbWF0aWMgcmVzdWJtaXQgdXJiIDB4JXAgcmVtb3ZlZCBieSBjb21wbGV0ZS4iLCB1cmIpOworCQl9CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9CVUxLOgorCQlldHJheF91c2JfY29tcGxldGVfYnVsa191cmIodXJiLCBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJZXRyYXhfdXNiX2NvbXBsZXRlX2N0cmxfdXJiKHVyYiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJZXRyYXhfdXNiX2NvbXBsZXRlX2ludHJfdXJiKHVyYiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlldHJheF91c2JfY29tcGxldGVfaXNvY191cmIodXJiLCBzdGF0dXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIlVua25vd24gcGlwZXR5cGUiKTsKKwl9Cit9CisKKworCitzdGF0aWMgaXJxcmV0dXJuX3QgZXRyYXhfdXNiX2hjX2ludGVycnVwdF90b3BfaGFsZihpbnQgaXJxLCB2b2lkICp2aGMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTMyIGlycV9tYXNrOworCV9fdTggc3RhdHVzOworCV9fdTMyIGVwaWRfYXR0bjsKKwlfX3UxNiBwb3J0X3N0YXR1c18xOworCV9fdTE2IHBvcnRfc3RhdHVzXzI7CisJX191MzIgZm1fbnVtYmVyOworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIGNyaXRpY2FsIHJlZ2lzdGVycyBpbnRvIGxvY2FsIHZhcmlhYmxlcywgZG8ga21hbGxvYyBhZnRlcndhcmRzLiAqLworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJaXJxX21hc2sgPSAqUl9VU0JfSVJRX01BU0tfUkVBRDsKKwkvKiBSZWFkaW5nIFJfVVNCX1NUQVRVUyBjbGVhcnMgdGhlIGN0bF9zdGF0dXMgaW50ZXJydXB0LiBOb3RlIHRoYXQgUl9VU0JfU1RBVFVTCisJICAgbXVzdCBiZSByZWFkIGJlZm9yZSBSX1VTQl9FUElEX0FUVE4gc2luY2UgcmVhZGluZyB0aGUgbGF0dGVyIGNsZWFycyB0aGUKKwkgICBvdXJ1biBhbmQgcGVycm9yIGZpZWxkcyBvZiBSX1VTQl9TVEFUVVMuICovCisJc3RhdHVzID0gKlJfVVNCX1NUQVRVUzsKKworCS8qIFJlYWRpbmcgUl9VU0JfRVBJRF9BVFROIGNsZWFycyB0aGUgaXNvX2VvZiwgYnVsa19lb3QgYW5kIGVwaWRfYXR0biBpbnRlcnJ1cHRzLiAqLworCWVwaWRfYXR0biA9ICpSX1VTQl9FUElEX0FUVE47CisKKwkvKiBSZWFkaW5nIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEgYW5kIFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIgY2xlYXJzIHRoZQorCSAgIHBvcnRfc3RhdHVzIGludGVycnVwdC4gKi8KKwlwb3J0X3N0YXR1c18xID0gKlJfVVNCX1JIX1BPUlRfU1RBVFVTXzE7CisJcG9ydF9zdGF0dXNfMiA9ICpSX1VTQl9SSF9QT1JUX1NUQVRVU18yOworCisJLyogUmVhZGluZyBSX1VTQl9GTV9OVU1CRVIgY2xlYXJzIHRoZSBzb2YgaW50ZXJydXB0LiAqLworCS8qIE5vdGU6IHRoZSBsb3dlciAxMSBiaXRzIGNvbnRhaW4gdGhlIGFjdHVhbCBmcmFtZSBudW1iZXIsIHNlbnQgd2l0aCBlYWNoIHNvZi4gKi8KKwlmbV9udW1iZXIgPSAqUl9VU0JfRk1fTlVNQkVSOworCisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwlyZWcgPSAodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqKWttZW1fY2FjaGVfYWxsb2ModG9wX2hhbGZfcmVnX2NhY2hlLCBTTEFCX0FUT01JQyk7CisKKwlhc3NlcnQocmVnICE9IE5VTEwpOworCisJcmVnLT5oYyA9IChldHJheF9oY190ICopdmhjOworCisJLyogTm93IHB1dCByZWdpc3RlciB2YWx1ZXMgaW50byBrbWFsbG9jJ2QgYXJlYS4gKi8KKwlyZWctPnJfdXNiX2lycV9tYXNrX3JlYWQgPSBpcnFfbWFzazsKKwlyZWctPnJfdXNiX3N0YXR1cyA9IHN0YXR1czsKKwlyZWctPnJfdXNiX2VwaWRfYXR0biA9IGVwaWRfYXR0bjsKKwlyZWctPnJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgPSBwb3J0X3N0YXR1c18xOworCXJlZy0+cl91c2JfcmhfcG9ydF9zdGF0dXNfMiA9IHBvcnRfc3RhdHVzXzI7CisJcmVnLT5yX3VzYl9mbV9udW1iZXIgPSBmbV9udW1iZXI7CisKKyAgICAgICAgSU5JVF9XT1JLKCZyZWctPnVzYl9iaCwgZXRyYXhfdXNiX2hjX2ludGVycnVwdF9ib3R0b21faGFsZiwgcmVnKTsKKyAgICAgICAgc2NoZWR1bGVfd29yaygmcmVnLT51c2JfYmgpOworCisJREJGRVhJVDsKKworICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9oY19pbnRlcnJ1cHRfYm90dG9tX2hhbGYodm9pZCAqZGF0YSkKK3sKKwl1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcgPSAodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqKWRhdGE7CisJX191MzIgaXJxX21hc2sgPSByZWctPnJfdXNiX2lycV9tYXNrX3JlYWQ7CisKKwlEQkZFTlRFUjsKKworCS8qIEludGVycnVwdHMgYXJlIGhhbmRsZWQgaW4gb3JkZXIgb2YgcHJpb3JpdHkuICovCisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBlcGlkX2F0dG4pKSB7CisJCWV0cmF4X3VzYl9oY19lcGlkX2F0dG5faW50ZXJydXB0KHJlZyk7CisJfQorCWlmIChpcnFfbWFzayAmIElPX01BU0soUl9VU0JfSVJRX01BU0tfUkVBRCwgcG9ydF9zdGF0dXMpKSB7CisJCWV0cmF4X3VzYl9oY19wb3J0X3N0YXR1c19pbnRlcnJ1cHQocmVnKTsKKwl9CisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBjdGxfc3RhdHVzKSkgeworCQlldHJheF91c2JfaGNfY3RsX3N0YXR1c19pbnRlcnJ1cHQocmVnKTsKKwl9CisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBpc29fZW9mKSkgeworCQlldHJheF91c2JfaGNfaXNvY19lb2ZfaW50ZXJydXB0KCk7CisJfQorCWlmIChpcnFfbWFzayAmIElPX01BU0soUl9VU0JfSVJRX01BU0tfUkVBRCwgYnVsa19lb3QpKSB7CisJCS8qIFVwZGF0ZS9yZXN0YXJ0IHRoZSBidWxrIHN0YXJ0IHRpbWVyIHNpbmNlIG9idmlvdXNseSB0aGUgY2hhbm5lbCBpcyBydW5uaW5nLiAqLworCQltb2RfdGltZXIoJmJ1bGtfc3RhcnRfdGltZXIsIGppZmZpZXMgKyBCVUxLX1NUQVJUX1RJTUVSX0lOVEVSVkFMKTsKKwkJLyogVXBkYXRlL3Jlc3RhcnQgdGhlIGJ1bGsgZW90IHRpbWVyIHNpbmNlIHdlIGp1c3QgcmVjZWl2ZWQgYW4gYnVsayBlb3QgaW50ZXJydXB0LiAqLworCQltb2RfdGltZXIoJmJ1bGtfZW90X3RpbWVyLCBqaWZmaWVzICsgQlVMS19FT1RfVElNRVJfSU5URVJWQUwpOworCisJCWV0cmF4X3VzYl9oY19idWxrX2VvdF9pbnRlcnJ1cHQoMCk7CisJfQorCisJa21lbV9jYWNoZV9mcmVlKHRvcF9oYWxmX3JlZ19jYWNoZSwgcmVnKTsKKworCURCRkVYSVQ7Cit9CisKKwordm9pZCBldHJheF91c2JfaGNfaXNvY19lb2ZfaW50ZXJydXB0KHZvaWQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCWludCBlcGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCS8qIERvIG5vdCBjaGVjayB0aGUgaW52YWxpZCBlcGlkIChpdCBoYXMgYSB2YWxpZCBzdWIgcG9pbnRlcikuICovCisJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUyAtIDE7IGVwaWQrKykgeworCisJCS8qIERvIG5vdCBjaGVjayB0aGUgaW52YWxpZCBlcGlkIChpdCBoYXMgYSB2YWxpZCBzdWIgcG9pbnRlcikuICovCisJCWlmICgoZXBpZCA9PSBEVU1NWV9FUElEKSB8fCAoZXBpZCA9PSBJTlZBTElEX0VQSUQpKQorCQkJY29udGludWU7CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHRvIGJsb2NrIHRoZSBpc29jIG91dCBkZXNjcmlwdG9yIGludGVycnVwdCBoYW5kbGVyCisJCSAgIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIHRoZSBpc29jIEVQSUQgbGlzdCBpcyBiZWluZyBjaGVja2VkLgorCQkqLworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJY2xpKCk7CisKKwkJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPT0gMCkgeworCQkJLyogTm90aGluZyBoZXJlIHRvIHNlZS4gKi8KKwkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisJCWlmICh1cmIgPT0gMCkgeworCQkJd2FybigiSWdub3JpbmcgTlVMTCB1cmIiKTsKKwkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCisJCQkvKiBTYW5pdHkgY2hlY2suICovCisJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUyk7CisKKwkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IE5PVF9TVEFSVEVEKSB7CisKKwkJCQkvKiBJZiBBU0FQIGlzIG5vdCBzZXQgYW5kIHVyYi0+c3RhcnRfZnJhbWUgaXMgdGhlIGN1cnJlbnQgZnJhbWUsCisJCQkJICAgc3RhcnQgdGhlIHRyYW5zZmVyLiAqLworCQkJCWlmICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfSVNPX0FTQVApICYmCisJCQkJICAgICh1cmItPnN0YXJ0X2ZyYW1lID09ICgqUl9VU0JfRk1fTlVNQkVSICYgMHg3ZmYpKSkgeworCisJCQkJCWRiZ19pc29jKCJFbmFibGluZyBpc29jIElOIEVQIGRlc2NyIGZvciBlcGlkICVkIiwgZXBpZCk7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisKKwkJCQkJLyogVGhpcyB1cmIgaXMgbm93IGFjdGl2ZS4gKi8KKwkJCQkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFNUQVJURUQ7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwl9CisKKwlEQkZFWElUOworCit9CisKK3ZvaWQgZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdChpbnQgdGltZXJfaW5kdWNlZCkKK3sKKyAJaW50IGVwaWQ7CisKKwkvKiBUaGUgdGVjaG5pcXVlIGlzIHRvIHJ1biBvbmUgdXJiIGF0IGEgdGltZSwgd2FpdCBmb3IgdGhlIGVvdCBpbnRlcnJ1cHQgYXQgd2hpY2gKKwkgICBwb2ludCB0aGUgRVAgZGVzY3JpcHRvciBoYXMgYmVlbiBkaXNhYmxlZC4gKi8KKworCURCRkVOVEVSOworCWRiZ19idWxrKCJidWxrIGVvdCVzIiwgdGltZXJfaW5kdWNlZCA/ICIsIGNhbGxlZCBieSB0aW1lciIgOiAiIik7CisKKwlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTOyBlcGlkKyspIHsKKworCQlpZiAoIShUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpICYmCisJCSAgICAoVHhCdWxrRVBMaXN0W2VwaWRdLnN1YiAhPSAwKSkgeworCisJCQlzdHJ1Y3QgdXJiICp1cmI7CisJCQlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQlfX3UzMiByX3VzYl9lcHRfZGF0YTsKKworCQkJLyogRm91bmQgYSBkaXNhYmxlZCBFUCBkZXNjcmlwdG9yIHdoaWNoIGhhcyBhIG5vbi1udWxsIHN1YiBwb2ludGVyLgorCQkJICAgVmVyaWZ5IHRoYXQgdGhpcyBjdHJsIEVQIGRlc2NyaXB0b3IgZ290IGRpc2FibGVkIG5vIGVycm9ycy4KKwkJCSAgIEZJWE1FOiBOZWNlc3NhcnkgdG8gY2hlY2sgZXJyb3JfY29kZT8gKi8KKwkJCWRiZ19idWxrKCJmb3IgZXBpZCAlZD8iLCBlcGlkKTsKKworCQkJLyogR2V0IHRoZSBmaXJzdCB1cmIuICovCisJCQl1cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKworCQkJLyogRklYTUU6IENvdWxkIHRoaXMgaGFwcGVuIGZvciB2YWxpZCByZWFzb25zPyBXaHkgZGlkIGl0IGRpc2FwcGVhcj8gQmVjYXVzZSBvZgorCQkJICAgd3JvbmcgdW5saW5raW5nPyAqLworCQkJaWYgKCF1cmIpIHsKKwkJCQl3YXJuKCJOVUxMIHVyYiBmb3IgZXBpZCAlZCIsIGVwaWQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlhc3NlcnQodXJiKTsKKwkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCWFzc2VydCh1cmJfcHJpdik7CisKKwkJCS8qIFNhbml0eSBjaGVja3MuICovCisJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9CVUxLKTsKKwkJCWlmIChwaHlzX3RvX3ZpcnQoVHhCdWxrRVBMaXN0W2VwaWRdLnN1YikgIT0gdXJiX3ByaXYtPmxhc3Rfc2IpIHsKKwkJCQllcnIoImJ1bGsgZW5kcG9pbnQgZ290IGRpc2FibGVkIGJlZm9yZSByZWFjaGluZyBsYXN0IHNiIik7CisJCQl9CisKKwkJCS8qIEZvciBidWxrIElOIHRyYWZmaWMsIHRoZXJlIHNlZW1zIHRvIGJlIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbgorCQkJICAgYmV0d2VlbiB0aGUgYnVsayBlb3QgYW5kIGVvcCBpbnRlcnJ1cHRzLCBvciByYXRoZXIgYW4gdW5jZXJ0YWludHkgcmVnYXJkaW5nCisJCQkgICB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBoYXBwZW4uIE5vcm1hbGx5IHdlIGV4cGVjdCB0aGUgZW9wIGludGVycnVwdCBmcm9tCisJCQkgICBETUEgY2hhbm5lbCA5IHRvIGhhcHBlbiBiZWZvcmUgdGhlIGVvdCBpbnRlcnJ1cHQuCisKKwkJCSAgIFRoZXJlZm9yZSwgd2UgY29tcGxldGUgdGhlIGJ1bGsgSU4gdXJiIGluIHRoZSByeCBpbnRlcnJ1cHQgaGFuZGxlciBpbnN0ZWFkLiAqLworCisJCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisJCQkJZGJnX2J1bGsoImluIHVyYiwgY29udGludWluZyIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJCWNsaSgpOworCQkJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCQkJbm9wKCk7CisJCQlyX3VzYl9lcHRfZGF0YSA9ICpSX1VTQl9FUFRfREFUQTsKKwkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJCQlpZiAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgcl91c2JfZXB0X2RhdGEpID09CisJCQkgICAgSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIG5vX2Vycm9yKSkgeworCQkJCS8qIFRoaXMgbWVhbnMgdGhhdCB0aGUgZW5kcG9pbnQgaGFzIG5vIGVycm9yLCBpcyBkaXNhYmxlZAorCQkJCSAgIGFuZCBoYWQgaW5zZXJ0ZWQgdHJhZmZpYywgaS5lLiB0cmFuc2ZlciBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiAqLworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV9idWxrX3VyYih1cmIsIDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLiBXZSBleHBlY3QgZXJyb3JzIHRvIGJlIGNhdWdodCBieSBlcGlkIGF0dGVudGlvbi4gKi8KKwkJCQllcnIoIkZvdW5kIGRpc2FibGVkIGJ1bGsgRVAgZGVzYywgZXJyb3JfY29kZSAhPSBub19lcnJvciIpOworCQkJfQorCQl9CisJfQorCisJLyogTm9ybWFsbHksIHdlIHNob3VsZCBmaW5kIChhdCBsZWFzdCkgb25lIGRpc2FibGVkIEVQIGRlc2NyaXB0b3Igd2l0aCBhIHZhbGlkIHN1YiBwb2ludGVyLgorCSAgIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgdGhlIHVuY2VydGFpbnR5IGluIHRoZSBkZWxpdmVyYW5jZSBvZiB0aGUgZW9wL2VvdCBpbnRlcnJ1cHRzLCB3ZSBtYXkKKwkgICBub3QuICBBbHNvLCB3ZSBtaWdodCBmaW5kIHR3byBkaXNhYmxlZCBFUHMgd2hlbiBoYW5kbGluZyBhbiBlb3QgaW50ZXJydXB0LCBhbmQgdGhlbiBmaW5kCisJICAgbm9uZSB0aGUgbmV4dCB0aW1lLiAqLworCisJREJGRVhJVDsKKworfQorCit2b2lkIGV0cmF4X3VzYl9oY19lcGlkX2F0dG5faW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZykKK3sKKwkvKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGVwaWQgYXR0ZW50aW9uIGludGVycnVwdC4gIFRoZXJlIGFyZSBhIHZhcmlldHkgb2YgcmVhc29ucworCSAgIGZvciB0aGlzIGludGVycnVwdCB0byBoYXBwZW4gKERlc2lnbmVyJ3MgUmVmZXJlbmNlLCBwLiA4IC0gMjIgZm9yIHRoZSBkZXRhaWxzKToKKworCSAgIGludmFsaWQgZXBfaWQgIC0gSW52YWxpZCBlcGlkIGluIGFuIEVQIChFUCBkaXNhYmxlZCkuCisJICAgc3RhbGwJICAtIE5vdCBzdHJpY3RseSBhbiBlcnJvciBjb25kaXRpb24gKEVQIGRpc2FibGVkKS4KKwkgICAzcmQgZXJyb3IgICAgICAtIFRocmVlIHN1Y2Nlc3NpdmUgdHJhbnNhY3Rpb24gZXJyb3JzICAoRVAgZGlzYWJsZWQpLgorCSAgIGJ1ZmZlciBvdXJ1biAgIC0gQnVmZmVyIG92ZXJydW4gb3IgdW5kZXJydW4gKEVQIGRpc2FibGVkKS4KKwkgICBwYXN0IGVvZjEgICAgICAtIEludHIgb3IgaXNvYyB0cmFuc2FjdGlvbiBwcm9jZWVkcyBwYXN0IEVPRjEuCisJICAgbmVhciBlb2YgICAgICAgLSBJbnRyIG9yIGlzb2MgdHJhbnNhY3Rpb24gd291bGQgbm90IGZpdCBpbnNpZGUgdGhlIGZyYW1lLgorCSAgIHpvdXQgdHJhbnNmZXIgIC0gSWYgem91dCB0cmFuc2ZlciBmb3IgYSBidWxrIGVuZHBvaW50IChFUCBkaXNhYmxlZCkuCisJICAgc2V0dXAgdHJhbnNmZXIgLSBJZiBzZXR1cCB0cmFuc2ZlciBmb3IgYSBub24tY3RybCBlbmRwb2ludCAoRVAgZGlzYWJsZWQpLiAqLworCisJaW50IGVwaWQ7CisKKworCURCRkVOVEVSOworCisJYXNzZXJ0KHJlZyAhPSBOVUxMKTsKKworCS8qIE5vdGUgdGhhdCB3ZSBsb29wIHRocm91Z2ggYWxsIGVwaWRzLiBXZSBzdGlsbCB3YW50IHRvIGNhdGNoIGVycm9ycyBmb3IKKwkgICB0aGUgaW52YWxpZCBvbmUsIGV2ZW4gdGhvdWdoIHdlIG1pZ2h0IGhhbmRsZSB0aGVtIGRpZmZlcmVudGx5LiAqLworCWZvciAoZXBpZCA9IDA7IGVwaWQgPCBOQlJfT0ZfRVBJRFM7IGVwaWQrKykgeworCisJCWlmICh0ZXN0X2JpdChlcGlkLCAodm9pZCAqKSZyZWctPnJfdXNiX2VwaWRfYXR0bikpIHsKKworCQkJc3RydWN0IHVyYiAqdXJiOworCQkJX191MzIgcl91c2JfZXB0X2RhdGE7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJaW50IGVycm9yX2NvZGU7CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJCQlub3AoKTsKKwkJCS8qIE5vdGUgdGhhdCBhbHRob3VnaCB0aGVyZSBhcmUgc2VwYXJhdGUgUl9VU0JfRVBUX0RBVEEgYW5kIFJfVVNCX0VQVF9EQVRBX0lTTworCQkJICAgcmVnaXN0ZXJzLCB0aGV5IGFyZSBsb2NhdGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MgYW5kIGFyZSBvZiB0aGUgc2FtZSBzaXplLgorCQkJICAgSW4gb3RoZXIgd29yZHMsIHRoaXMgcmVhZCBzaG91bGQgYmUgb2sgZm9yIGlzb2MgYWxzby4gKi8KKwkJCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBOworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkJCS8qIEZpcnN0IHNvbWUgc2FuaXR5IGNoZWNrcy4gKi8KKwkJCWlmIChlcGlkID09IElOVkFMSURfRVBJRCkgeworCQkJCS8qIEZJWE1FOiBXaGF0IGlmIGl0IGJlY2FtZSBkaXNhYmxlZD8gQ291bGQgc2VyaW91c2x5IGh1cnQgaW50ZXJydXB0CisJCQkJICAgdHJhZmZpYy4gKFVzZSBkb19pbnRyX3JlY292ZXIuKSAqLworCQkJCXdhcm4oIkdvdCBlcGlkX2F0dG4gZm9yIElOVkFMSURfRVBJRCAoJWQpLiIsIGVwaWQpOworCQkJCWVycigiUl9VU0JfRVBUX0RBVEEgPSAweCV4Iiwgcl91c2JfZXB0X2RhdGEpOworCQkJCWVycigiUl9VU0JfU1RBVFVTID0gMHgleCIsIHJlZy0+cl91c2Jfc3RhdHVzKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSAJaWYgKGVwaWQgPT0gRFVNTVlfRVBJRCkgeworCQkJCS8qIFdlIGRlZmluaXRlbHkgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBvbmVzLiBCZXNpZGVzLCB0aGV5IGFyZQorCQkJCSAgIGFsd2F5cyBkaXNhYmxlZCwgc28gYW55IHBvc3NpYmxlIGRpc2FibGluZyBjYXVzZWQgYnkgdGhlCisJCQkJICAgZXBpZCBhdHRlbnRpb24gaW50ZXJydXB0IGlzIGlycmVsZXZhbnQuICovCisJCQkJd2FybigiR290IGVwaWRfYXR0biBmb3IgRFVNTVlfRVBJRCAoJWQpLiIsIGVwaWQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiBpbiB0aGUgdXJiIGxpc3QgZm9yIHRoaXMgZXBpZC4gV2UgYmxhdGFudGx5IGFzc3VtZQorCQkJICAgdGhhdCBvbmx5IHRoZSBmaXJzdCB1cmIgY291bGQgaGF2ZSBjYXVzZWQgdGhlIGVwaWQgYXR0ZW50aW9uLgorCQkJICAgKEZvciBidWxrIGFuZCBjdHJsLCBvbmx5IG9uZSB1cmIgaXMgYWN0aXZlIGF0IGFueSBvbmUgdGltZS4gRm9yIGludHIKKwkJCSAgIGFuZCBpc29jIHdlIHJlbW92ZSB0aGVtIG9uY2UgdGhleSBhcmUgY29tcGxldGVkLikgKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCisJCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCQllcnIoIkdvdCBlcGlkX2F0dG4gZm9yIGVwaWQgJWkgd2l0aCBubyB1cmIuIiwgZXBpZCk7CisJCQkJZXJyKCJSX1VTQl9FUFRfREFUQSA9IDB4JXgiLCByX3VzYl9lcHRfZGF0YSk7CisJCQkJZXJyKCJSX1VTQl9TVEFUVVMgPSAweCV4IiwgcmVnLT5yX3VzYl9zdGF0dXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJCQljYXNlIFBJUEVfQlVMSzoKKwkJCQl3YXJuKCJHb3QgZXBpZCBhdHRuIGZvciBidWxrIGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCQl3YXJuKCJHb3QgZXBpZCBhdHRuIGZvciBjb250cm9sIGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkJCXdhcm4oIkdvdCBlcGlkIGF0dG4gZm9yIGludGVycnVwdCBlbmRwb2ludCwgZXBpZCAlZCIsIGVwaWQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkJCXdhcm4oIkdvdCBlcGlkIGF0dG4gZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQkJaWYgKHJfdXNiX2VwdF9kYXRhICYgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgaG9sZCkpIHsKKwkJCQkJd2FybigiSG9sZCB3YXMgc2V0IGZvciBlcGlkICVkLiIsIGVwaWQpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEV2ZW4gdGhvdWdoIGVycm9yX2NvZGUgb2NjdXBpZXMgYml0cyAyMiAtIDIzIGluIGJvdGggUl9VU0JfRVBUX0RBVEEgYW5kCisJCQkgICBSX1VTQl9FUFRfREFUQV9JU09DLCB3ZSBzZXBhcmF0ZSB0aGVtIGhlcmUgc28gd2UgZG9uJ3QgZm9yZ2V0IGluIG90aGVyIHBsYWNlcy4gKi8KKwkJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQkJZXJyb3JfY29kZSA9IElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCByX3VzYl9lcHRfZGF0YSk7CisJCQl9IGVsc2UgeworCQkJCWVycm9yX2NvZGUgPSBJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb2RlLCByX3VzYl9lcHRfZGF0YSk7CisJCQl9CisKKwkJCS8qIFVzaW5nIElPX1NUQVRFX1ZBTFVFIG9uIFJfVVNCX0VQVF9EQVRBIHNob3VsZCBiZSBvayBmb3IgaXNvYyBhbHNvLiAqLworCQkJaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIG5vX2Vycm9yKSkgeworCisJCQkJLyogSXNvYyB0cmFmZmljIGRvZXNuJ3QgaGF2ZSBlcnJvcl9jb3VudF9pbi9lcnJvcl9jb3VudF9vdXQuICovCisJCQkJaWYgKCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0lTT0NIUk9OT1VTKSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgZXJyb3JfY291bnRfaW4sIHJfdXNiX2VwdF9kYXRhKSA9PSAzIHx8CisJCQkJICAgICBJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9vdXQsIHJfdXNiX2VwdF9kYXRhKSA9PSAzKSkgeworCQkJCQkvKiAzcmQgZXJyb3IuICovCisJCQkJCXdhcm4oIjNyZCBlcnJvciBmb3IgZXBpZCAlaSIsIGVwaWQpOworCQkJCQlldHJheF91c2JfY29tcGxldGVfdXJiKHVyYiwgLUVQUk9UTyk7CisKKwkJCQl9IGVsc2UgaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHBlcnJvcikpIHsKKworCQkJCQl3YXJuKCJQZXJyb3IgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKworCQkJCQlpZiAoIShyX3VzYl9lcHRfZGF0YSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIHZhbGlkKSkpIHsKKwkJCQkJCS8qIGludmFsaWQgZXBfaWQgKi8KKwkJCQkJCXBhbmljKCJQZXJyb3IgYmVjYXVzZSBvZiBpbnZhbGlkIGVwaWQuIgorCQkJCQkJICAgICAgIiBEZWNvbmZpZ3VyZWQgdG9vIGVhcmx5PyIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLyogcGFzdCBlb2YxLCBuZWFyIGVvZiwgem91dCB0cmFuc2Zlciwgc2V0dXAgdHJhbnNmZXIgKi8KKworCQkJCQkJLyogRHVtcCB0aGUgdXJiIGFuZCB0aGUgcmVsZXZhbnQgRVAgZGVzY3JpcHRvciBsaXN0LiAqLworCisJCQkJCQlfX2R1bXBfdXJiKHVyYik7CisJCQkJCQlfX2R1bXBfZXB0X2RhdGEoZXBpZCk7CisJCQkJCQlfX2R1bXBfZXBfbGlzdCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSk7CisKKwkJCQkJCXBhbmljKCJTb21ldGhpbmcgd3Jvbmcgd2l0aCBETUEgZGVzY3JpcHRvciBjb250ZW50cy4iCisJCQkJCQkgICAgICAiIFRvbyBtdWNoIHRyYWZmaWMgaW5zZXJ0ZWQ/Iik7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIG91cnVuKSkgeworCQkJCQkvKiBidWZmZXIgb3VydW4gKi8KKwkJCQkJcGFuaWMoIkJ1ZmZlciBvdmVycnVuL3VuZGVycnVuIGZvciBlcGlkICVkLiBETUEgdG9vIGJ1c3k/IiwgZXBpZCk7CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIHN0YWxsKSkgeworCQkJCS8qIE5vdCByZWFsbHkgYSBwcm90b2NvbCBlcnJvciwganVzdCBzYXlzIHRoYXQgdGhlIGVuZHBvaW50IGdhdmUKKwkJCQkgICBhIHN0YWxsIHJlc3BvbnNlLiBOb3RlIHRoYXQgZXJyb3JfY29kZSBjYW5ub3QgYmUgc3RhbGwgZm9yIGlzb2MuICovCisJCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQkJcGFuaWMoIklzb2MgdHJhZmZpYyBjYW5ub3Qgc3RhbGwiKTsKKwkJCQl9CisKKwkJCQl3YXJuKCJTdGFsbCBmb3IgZXBpZCAlZCIsIGVwaWQpOworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAtRVBJUEUpOworCisJCQl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIGJ1c19lcnJvcikpIHsKKwkJCQkvKiBUd28gZGV2aWNlcyByZXNwb25kZWQgdG8gYSB0cmFuc2FjdGlvbiByZXF1ZXN0LiBNdXN0IGJlIHJlc29sdmVkCisJCQkJICAgYnkgc29mdHdhcmUuIEZJWE1FOiBSZXNldCBwb3J0cz8gKi8KKwkJCQlwYW5pYygiQnVzIGVycm9yIGZvciBlcGlkICVkLiIKKwkJCQkgICAgICAiIFR3byBkZXZpY2VzIHJlc3BvbmRlZCB0byB0cmFuc2FjdGlvbiByZXF1ZXN0IiwKKwkJCQkgICAgICBlcGlkKTsKKworCQkJfSBlbHNlIGlmIChlcnJvcl9jb2RlID09IElPX1NUQVRFX1ZBTFVFKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb2RlLCBidWZmZXJfZXJyb3IpKSB7CisJCQkJLyogRE1BIG92ZXJydW4gb3IgdW5kZXJydW4uICovCisJCQkJd2FybigiQnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZm9yIGVwaWQgJWQuIERNQSB0b28gYnVzeT8iLCBlcGlkKTsKKworCQkJCS8qIEl0IHNlZW1zIHRoYXQgZXJyb3JfY29kZSA9IGJ1ZmZlcl9lcnJvciBpbgorCQkJCSAgIFJfVVNCX0VQVF9EQVRBL1JfVVNCX0VQVF9EQVRBX0lTTyBhbmQgb3VydW4gPSB5ZXMgaW4gUl9VU0JfU1RBVFVTCisJCQkJICAgYXJlIHRoZSBzYW1lIGVycm9yLiAqLworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAtRVBST1RPKTsKKwkJCX0KKwkJfQorCX0KKworCURCRkVYSVQ7CisKK30KKwordm9pZCBldHJheF91c2JfYnVsa19zdGFydF90aW1lcl9mdW5jKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisKKwkvKiBXZSBtaWdodCBlbmFibGUgYW4gRVAgZGVzY3JpcHRvciBiZWhpbmQgdGhlIGN1cnJlbnQgRE1BIHBvc2l0aW9uIHdoZW4gaXQncyBhYm91dAorCSAgIHRvIGRlY2lkZSB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIGJ1bGsgdHJhZmZpYyBhbmQgaXQgc2hvdWxkIHN0b3AgdGhlIGJ1bGsgY2hhbm5lbC4KKwkgICBUaGVyZWZvcmUgd2UgcGVyaW9kaWNhbGx5IGNoZWNrIGlmIHRoZSBidWxrIGNoYW5uZWwgaXMgc3RvcHBlZCBhbmQgdGhlcmUgaXMgYW4KKwkgICBlbmFibGVkIGJ1bGsgRVAgZGVzY3JpcHRvciwgaW4gd2hpY2ggY2FzZSB3ZSBzdGFydCB0aGUgYnVsayBjaGFubmVsLiAqLworCWRiZ19idWxrKCJidWxrX3N0YXJ0X3RpbWVyIHRpbWVkIG91dC4iKTsKKworCWlmICghKCpSX0RNQV9DSDhfU1VCMF9DTUQgJiBJT19NQVNLKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kKSkpIHsKKwkJaW50IGVwaWQ7CisKKwkJZGJnX2J1bGsoIkJ1bGsgRE1BIGNoYW5uZWwgbm90IHJ1bm5pbmcuIik7CisKKwkJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUzsgZXBpZCsrKSB7CisJCQlpZiAoVHhCdWxrRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSB7CisJCQkJZGJnX2J1bGsoIkZvdW5kIGVuYWJsZWQgRVAgZm9yIGVwaWQgJWQsIHN0YXJ0aW5nIGJ1bGsgY2hhbm5lbC5cbiIsCisJCQkJCSBlcGlkKTsKKwkJCQkqUl9ETUFfQ0g4X1NVQjBfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjBfQ01ELCBjbWQsIHN0YXJ0KTsKKworCQkJCS8qIFJlc3RhcnQgdGhlIGJ1bGsgZW90IHRpbWVyIHNpbmNlIHdlIGp1c3Qgc3RhcnRlZCB0aGUgYnVsayBjaGFubmVsLiAqLworCQkJCW1vZF90aW1lcigmYnVsa19lb3RfdGltZXIsIGppZmZpZXMgKyBCVUxLX0VPVF9USU1FUl9JTlRFUlZBTCk7CisKKwkJCQkvKiBObyBuZWVkIHRvIHNlYXJjaCBhbnkgZnVydGhlci4gKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWRiZ19idWxrKCJCdWxrIERNQSBjaGFubmVsIHJ1bm5pbmcuIik7CisJfQorfQorCit2b2lkIGV0cmF4X3VzYl9oY19wb3J0X3N0YXR1c19pbnRlcnJ1cHQodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqcmVnKQoreworCWV0cmF4X2hjX3QgKmhjID0gcmVnLT5oYzsKKwlfX3UxNiByX3VzYl9yaF9wb3J0X3N0YXR1c18xID0gcmVnLT5yX3VzYl9yaF9wb3J0X3N0YXR1c18xOworCV9fdTE2IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgPSByZWctPnJfdXNiX3JoX3BvcnRfc3RhdHVzXzI7CisKKwlEQkZFTlRFUjsKKworCS8qIFRoZSBFdHJheCBSSCBkb2VzIG5vdCBpbmNsdWRlIGEgd1BvcnRDaGFuZ2UgcmVnaXN0ZXIsIHNvIHRoaXMgaGFzIHRvIGJlIGhhbmRsZWQgaW4gc29mdHdhcmUKKwkgICAoYnkgc2F2aW5nIHRoZSBvbGQgcG9ydCBzdGF0dXMgdmFsdWUgZm9yIGNvbXBhcmlzb24gd2hlbiB0aGUgcG9ydCBzdGF0dXMgaW50ZXJydXB0IGhhcHBlbnMpLgorCSAgIFNlZSBzZWN0aW9uIDExLjE2LjIuNi4yIGluIHRoZSBVU0IgMS4xIHNwZWMgZm9yIGRldGFpbHMuICovCisKKwlkYmdfcmgoImhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgPSAweCV4IiwgaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSk7CisJZGJnX3JoKCJoYy0+cmgucHJldl93UG9ydFN0YXR1c18yID0gMHgleCIsIGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIpOworCWRiZ19yaCgicl91c2JfcmhfcG9ydF9zdGF0dXNfMSA9IDB4JXgiLCByX3VzYl9yaF9wb3J0X3N0YXR1c18xKTsKKwlkYmdfcmgoInJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgPSAweCV4Iiwgcl91c2JfcmhfcG9ydF9zdGF0dXNfMik7CisKKwkvKiBDX1BPUlRfQ09OTkVDVElPTiBpcyBzZXQgb24gYW55IHRyYW5zaXRpb24uICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChyX3VzYl9yaF9wb3J0X3N0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKSkgIT0KKwkJIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKSA6IDA7CisKKwloYy0+cmgud1BvcnRDaGFuZ2VfMiB8PQorCQkoKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pKSAhPQorCQkgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pKSkgPworCQkoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pIDogMDsKKworCS8qIENfUE9SVF9FTkFCTEUgaXMgX29ubHlfIHNldCBvbiBhIG9uZSB0byB6ZXJvIHRyYW5zaXRpb24sIGkuZS4gd2hlbgorCSAgIHRoZSBwb3J0IGlzIGRpc2FibGVkLCBub3Qgd2hlbiBpdCdzIGVuYWJsZWQuICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKQorCQkgJiYgIShyX3VzYl9yaF9wb3J0X3N0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKSkgPworCQkoMSA8PCBSSF9QT1JUX0VOQUJMRSkgOiAwOworCisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKQorCQkgJiYgIShyX3VzYl9yaF9wb3J0X3N0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9FTkFCTEUpKSkgPworCQkoMSA8PCBSSF9QT1JUX0VOQUJMRSkgOiAwOworCisJLyogQ19QT1JUX1NVU1BFTkQgaXMgc2V0IHRvIG9uZSB3aGVuIHRoZSBkZXZpY2UgaGFzIHRyYW5zaXRpb25lZCBvdXQKKwkgICBvZiB0aGUgc3VzcGVuZGVkIHN0YXRlLCBpLmUuIHdoZW4gc3VzcGVuZCBnb2VzIGZyb20gb25lIHRvIHplcm8uICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSkKKwkJICYmICEocl91c2JfcmhfcG9ydF9zdGF0dXNfMSAmICgxIDw8IFJIX1BPUlRfU1VTUEVORCkpKSA/CisJCSgxIDw8IFJIX1BPUlRfU1VTUEVORCkgOiAwOworCisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSkKKwkJICYmICEocl91c2JfcmhfcG9ydF9zdGF0dXNfMiAmICgxIDw8IFJIX1BPUlRfU1VTUEVORCkpKSA/CisJCSgxIDw8IFJIX1BPUlRfU1VTUEVORCkgOiAwOworCisKKwkvKiBDX1BPUlRfUkVTRVQgaXMgc2V0IHdoZW4gcmVzZXQgcHJvY2Vzc2luZyBvbiB0aGlzIHBvcnQgaXMgY29tcGxldGUuICovCisJaGMtPnJoLndQb3J0Q2hhbmdlXzEgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9SRVNFVCkpCisJCSAmJiAhKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX1JFU0VUKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9SRVNFVCkgOiAwOworCisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgfD0KKwkJKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9SRVNFVCkpCisJCSAmJiAhKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX1JFU0VUKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9SRVNFVCkgOiAwOworCisJLyogU2F2ZSB0aGUgbmV3IHZhbHVlcyBmb3IgbmV4dCBwb3J0IHN0YXR1cyBjaGFuZ2UuICovCisJaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSA9IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzE7CisJaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiA9IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzI7CisKKwlkYmdfcmgoImhjLT5yaC53UG9ydENoYW5nZV8xIHNldCB0byAweCV4IiwgaGMtPnJoLndQb3J0Q2hhbmdlXzEpOworCWRiZ19yaCgiaGMtPnJoLndQb3J0Q2hhbmdlXzIgc2V0IHRvIDB4JXgiLCBoYy0+cmgud1BvcnRDaGFuZ2VfMik7CisKKwlEQkZFWElUOworCit9CisKK3ZvaWQgZXRyYXhfdXNiX2hjX2N0bF9zdGF0dXNfaW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZykKK3sKKwlEQkZFTlRFUjsKKworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgb3VydW4gb3IgcGVycm9yPyBEdW1wIHRoZSBFUCBhbmQgU0IKKwkgICBsaXN0IGZvciB0aGUgY29ycmVzcG9uZGluZyBlcGlkPyAqLworCWlmIChyZWctPnJfdXNiX3N0YXR1cyAmIElPX01BU0soUl9VU0JfU1RBVFVTLCBvdXJ1bikpIHsKKwkJcGFuaWMoIlVTQiBjb250cm9sbGVyIGdvdCBvdXJ1bi4iKTsKKwl9CisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHBlcnJvcikpIHsKKworCQkvKiBCZWZvcmUsIGV0cmF4X3VzYl9kb19pbnRyX3JlY292ZXIgd2FzIGNhbGxlZCBvbiB0aGlzIGVwaWQgaWYgaXQgd2FzCisJCSAgIGFuIGludGVycnVwdCBwaXBlLiBJIGRvbid0IHNlZSBob3cgcmUtZW5hYmxpbmcgYWxsIEVQIGRlc2NyaXB0b3JzCisJCSAgIHdpbGwgaGVscCBpZiB0aGVyZSB3YXMgYSBwcm9ncmFtbWluZyBlcnJvci4gKi8KKwkJcGFuaWMoIlVTQiBjb250cm9sbGVyIGdvdCBwZXJyb3IuIik7CisJfQorCisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIGRldmljZV9tb2RlKSkgeworCQkvKiBXZSBzaG91bGQgbmV2ZXIgb3BlcmF0ZSBpbiBkZXZpY2UgbW9kZS4gKi8KKwkJcGFuaWMoIlVTQiBjb250cm9sbGVyIGluIGRldmljZSBtb2RlLiIpOworCX0KKworCS8qIFRoZXNlIGlmLXN0YXRlbWVudHMgY291bGQgcHJvYmFibHkgYmUgbmVzdGVkLiAqLworCWlmIChyZWctPnJfdXNiX3N0YXR1cyAmIElPX01BU0soUl9VU0JfU1RBVFVTLCBob3N0X21vZGUpKSB7CisJCWluZm8oIlVTQiBjb250cm9sbGVyIGluIGhvc3QgbW9kZS4iKTsKKwl9CisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHN0YXJ0ZWQpKSB7CisJCWluZm8oIlVTQiBjb250cm9sbGVyIHN0YXJ0ZWQuIik7CisJfQorCWlmIChyZWctPnJfdXNiX3N0YXR1cyAmIElPX01BU0soUl9VU0JfU1RBVFVTLCBydW5uaW5nKSkgeworCQlpbmZvKCJVU0IgY29udHJvbGxlciBydW5uaW5nLiIpOworCX0KKworCURCRkVYSVQ7CisKK30KKworCitzdGF0aWMgaW50IGV0cmF4X3JoX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdXJiLT5kZXY7CisJZXRyYXhfaGNfdCAqaGMgPSB1c2JfZGV2LT5idXMtPmhjcHJpdjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVyYi0+cGlwZTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwl2b2lkICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGxlbmkgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJaW50IGxlbiA9IDA7CisJaW50IHN0YXQgPSAwOworCisJX191MTYgYm1SVHlwZV9iUmVxOworCV9fdTE2IHdWYWx1ZTsKKwlfX3UxNiB3SW5kZXg7CisJX191MTYgd0xlbmd0aDsKKworCURCRkVOVEVSOworCisJLyogRklYTUU6IFdoYXQgaXMgdGhpcyBpbnRlcnJ1cHQgdXJiIHRoYXQgaXMgc2VudCB0byB0aGUgcm9vdCBodWI/ICovCisJaWYgKHVzYl9waXBldHlwZSAocGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJZGJnX3JoKCJSb290LUh1YiBzdWJtaXQgSVJROiBldmVyeSAlZCBtcyIsIHVyYi0+aW50ZXJ2YWwpOworCQloYy0+cmgudXJiID0gdXJiOworCQloYy0+cmguc2VuZCA9IDE7CisJCS8qIEZJWE1FOiBXZSBjb3VsZCBwcm9iYWJseSByZW1vdmUgdGhpcyBsaW5lIHNpbmNlIGl0J3MgZG9uZQorCQkgICBpbiBldHJheF9yaF9pbml0X2ludF90aW1lci4gKERvbid0IHJlbW92ZSBpdCBmcm9tCisJCSAgIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyIHRob3VnaC4pICovCisJCWhjLT5yaC5pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJCWV0cmF4X3JoX2luaXRfaW50X3RpbWVyKHVyYik7CisJCURCRkVYSVQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJYm1SVHlwZV9iUmVxID0gY21kLT5iUmVxdWVzdFR5cGUgfCAoY21kLT5iUmVxdWVzdCA8PCA4KTsKKwl3VmFsdWUgPSBsZTE2X3RvX2NwdShjbWQtPndWYWx1ZSk7CisJd0luZGV4ID0gbGUxNl90b19jcHUoY21kLT53SW5kZXgpOworCXdMZW5ndGggPSBsZTE2X3RvX2NwdShjbWQtPndMZW5ndGgpOworCisJZGJnX3JoKCJibVJUeXBlX2JSZXEgOiAweCUwNHggKCVkKSIsIGJtUlR5cGVfYlJlcSwgYm1SVHlwZV9iUmVxKTsKKwlkYmdfcmgoIndWYWx1ZSAgICAgICA6IDB4JTA0eCAoJWQpIiwgd1ZhbHVlLCB3VmFsdWUpOworCWRiZ19yaCgid0luZGV4ICAgICAgIDogMHglMDR4ICglZCkiLCB3SW5kZXgsIHdJbmRleCk7CisJZGJnX3JoKCJ3TGVuZ3RoICAgICAgOiAweCUwNHggKCVkKSIsIHdMZW5ndGgsIHdMZW5ndGgpOworCisJc3dpdGNoIChibVJUeXBlX2JSZXEpIHsKKworCQkvKiBSZXF1ZXN0IERlc3RpbmF0aW9uOgorCQkgICB3aXRob3V0IGZsYWdzOiBEZXZpY2UsCisJCSAgIFJIX0lOVEVSRkFDRTogaW50ZXJmYWNlLAorCQkgICBSSF9FTkRQT0lOVDogZW5kcG9pbnQsCisJCSAgIFJIX0NMQVNTIG1lYW5zIEhVQiBoZXJlLAorCQkgICBSSF9PVEhFUiB8IFJIX0NMQVNTICBhbG1vc3QgZXZlciBtZWFucyBIVUJfUE9SVCBoZXJlCisJCSAqLworCisJY2FzZSBSSF9HRVRfU1RBVFVTOgorCQkqKF9fdTE2ICopIGRhdGEgPSBjcHVfdG9fbGUxNiAoMSk7CisJCU9LICgyKTsKKworCWNhc2UgUkhfR0VUX1NUQVRVUyB8IFJIX0lOVEVSRkFDRToKKwkJKihfX3UxNiAqKSBkYXRhID0gY3B1X3RvX2xlMTYgKDApOworCQlPSyAoMik7CisKKwljYXNlIFJIX0dFVF9TVEFUVVMgfCBSSF9FTkRQT0lOVDoKKwkJKihfX3UxNiAqKSBkYXRhID0gY3B1X3RvX2xlMTYgKDApOworCQlPSyAoMik7CisKKwljYXNlIFJIX0dFVF9TVEFUVVMgfCBSSF9DTEFTUzoKKwkJKihfX3UzMiAqKSBkYXRhID0gY3B1X3RvX2xlMzIgKDApOworCQlPSyAoNCk7CQkvKiBodWIgcG93ZXIgKiogKi8KKworCWNhc2UgUkhfR0VUX1NUQVRVUyB8IFJIX09USEVSIHwgUkhfQ0xBU1M6CisJCWlmICh3SW5kZXggPT0gMSkgeworCQkJKigoX191MTYqKWRhdGEpID0gY3B1X3RvX2xlMTYoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSk7CisJCQkqKChfX3UxNiopZGF0YSArIDEpID0gY3B1X3RvX2xlMTYoaGMtPnJoLndQb3J0Q2hhbmdlXzEpOworCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkqKChfX3UxNiopZGF0YSkgPSBjcHVfdG9fbGUxNihoYy0+cmgucHJldl93UG9ydFN0YXR1c18yKTsKKwkJCSooKF9fdTE2KilkYXRhICsgMSkgPSBjcHVfdG9fbGUxNihoYy0+cmgud1BvcnRDaGFuZ2VfMik7CisJCX0gZWxzZSB7CisJCQlkYmdfcmgoIlJIX0dFVF9TVEFUVVMgd2hpdGggaW52YWxpZCB3SW5kZXghIik7CisJCQlPSygwKTsKKwkJfQorCisJCU9LKDQpOworCisJY2FzZSBSSF9DTEVBUl9GRUFUVVJFIHwgUkhfRU5EUE9JTlQ6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgKFJIX0VORFBPSU5UX1NUQUxMKToKKwkJCU9LICgwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkhfQ0xFQVJfRkVBVFVSRSB8IFJIX0NMQVNTOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIChSSF9DX0hVQl9PVkVSX0NVUlJFTlQpOgorCQkJT0sgKDApOwkvKiBodWIgcG93ZXIgb3ZlciBjdXJyZW50ICoqICovCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX0NMRUFSX0ZFQVRVUkUgfCBSSF9PVEhFUiB8IFJIX0NMQVNTOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIChSSF9QT1JUX0VOQUJMRSk6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKworCQkJCWRiZ19yaCgidHJ5aW5nIHRvIGRvIGRpc2FibGUgcG9ydCAxIik7CisKKwkJCQkqUl9VU0JfUE9SVDFfRElTQUJMRSA9IElPX1NUQVRFKFJfVVNCX1BPUlQxX0RJU0FCTEUsIGRpc2FibGUsIHllcyk7CisKKwkJCQl3aGlsZSAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIHllcykpOworCQkJCSpSX1VTQl9QT1JUMV9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDFfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworCQkJCWRiZ19yaCgiUG9ydCAxIGlzIGRpc2FibGVkIik7CisKKwkJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKworCQkJCWRiZ19yaCgidHJ5aW5nIHRvIGRvIGRpc2FibGUgcG9ydCAyIik7CisKKwkJCQkqUl9VU0JfUE9SVDJfRElTQUJMRSA9IElPX1NUQVRFKFJfVVNCX1BPUlQyX0RJU0FCTEUsIGRpc2FibGUsIHllcyk7CisKKwkJCQl3aGlsZSAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIHllcykpOworCQkJCSpSX1VTQl9QT1JUMl9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDJfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworCQkJCWRiZ19yaCgiUG9ydCAyIGlzIGRpc2FibGVkIik7CisKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9QT1JUX0VOQUJMRSAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfUE9SVF9TVVNQRU5EKToKKwkJCS8qIE9wcG9zaXRlIHRvIHN1c3BlbmQgc2hvdWxkIGJlIHJlc3VtZSwgc28gd2UnbGwgZG8gYSByZXN1bWUuICovCisJCQkvKiBGSVhNRTogVVNCIDEuMSwgMTEuMTYuMi4yIHNheXM6CisJCQkgICAiQ2xlYXJpbmcgdGhlIFBPUlRfU1VTUEVORCBmZWF0dXJlIGNhdXNlcyBhIGhvc3QtaW5pdGlhdGVkIHJlc3VtZQorCQkJICAgb24gdGhlIHNwZWNpZmllZCBwb3J0LiBJZiB0aGUgcG9ydCBpcyBub3QgaW4gdGhlIFN1c3BlbmRlZCBzdGF0ZSwKKwkJCSAgIHRoZSBodWIgc2hvdWxkIHRyZWF0IHRoaXMgcmVxdWVzdCBhcyBhIGZ1bmN0aW9uYWwgbm8tb3BlcmF0aW9uLiIKKwkJCSAgIFNob3VsZG4ndCB3ZSBjaGVjayBpZiB0aGUgcG9ydCBpcyBpbiBhIHN1c3BlbmRlZCBzdGF0ZSBiZWZvcmUKKwkJCSAgIHJlc3VtaW5nPyAqLworCisJCQkvKiBNYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgYnVzeS4gKi8KKwkJCXdoaWxlICgqUl9VU0JfQ09NTUFORCAmIElPX01BU0soUl9VU0JfQ09NTUFORCwgYnVzeSkpOworCisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBwb3J0MSkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzdW1lKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBub3ApOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQyKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXN1bWUpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfQ0xFQVJfRkVBVFVSRS0+UkhfUE9SVF9TVVNQRU5EICIKKwkJCQkgICAgICAgIndpdGggaW52YWxpZCB3SW5kZXggPT0gJWQhIiwgd0luZGV4KTsKKwkJCX0KKworCQkJT0sgKDApOworCQljYXNlIChSSF9QT1JUX1BPV0VSKToKKwkJCU9LICgwKTsJLyogcG9ydCBwb3dlciAqKiAqLworCQljYXNlIChSSF9DX1BPUlRfQ09OTkVDVElPTik6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMSAmPSB+KDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKTsKKwkJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMiAmPSB+KDEgPDwgUkhfUE9SVF9DT05ORUNUSU9OKTsKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9DX1BPUlRfQ09OTkVDVElPTiAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfQ19QT1JUX0VOQUJMRSk6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMSAmPSB+KDEgPDwgUkhfUE9SVF9FTkFCTEUpOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8yICY9IH4oMSA8PCBSSF9QT1JUX0VOQUJMRSk7CisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfQ0xFQVJfRkVBVFVSRS0+UkhfQ19QT1JUX0VOQUJMRSAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX0NfUE9SVF9TVVNQRU5EKToKKy8qKiogV1JfUkhfUE9SVFNUQVQoUkhfUFNfUFNTQyk7ICovCisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX0NfUE9SVF9PVkVSX0NVUlJFTlQpOgorCQkJT0sgKDApOwkvKiBwb3J0IHBvd2VyIG92ZXIgY3VycmVudCAqKiAqLworCQljYXNlIChSSF9DX1BPUlRfUkVTRVQpOgorCQkJaWYgKHdJbmRleCA9PSAxKSB7CisJCQkJaGMtPnJoLndQb3J0Q2hhbmdlXzEgJj0gfigxIDw8IFJIX1BPUlRfUkVTRVQpOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8yICY9IH4oMSA8PCBSSF9QT1JUX1JFU0VUKTsKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9DX1BPUlRfUkVTRVQgIgorCQkJCSAgICAgICAid2l0aCBpbnZhbGlkIGluZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKworCQl9CisJCWJyZWFrOworCisJY2FzZSBSSF9TRVRfRkVBVFVSRSB8IFJIX09USEVSIHwgUkhfQ0xBU1M6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgKFJIX1BPUlRfU1VTUEVORCk6CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpc24ndCBidXN5LiAqLworCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQxKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCBzdXNwZW5kKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBub3ApOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQyKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCBzdXNwZW5kKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBub3ApOworCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX1NFVF9GRUFUVVJFLT5SSF9QT1JUX1NVU1BFTkQgIgorCQkJCSAgICAgICAid2l0aCBpbnZhbGlkIHdJbmRleCA9PSAlZCEiLCB3SW5kZXgpOworCQkJfQorCisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX1BPUlRfUkVTRVQpOgorCQkJaWYgKHdJbmRleCA9PSAxKSB7CisKKwkJCXBvcnRfMV9yZXNldDoKKwkJCQlkYmdfcmgoIkRvaW5nIHJlc2V0IG9mIHBvcnQgMSIpOworCisJCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBwb3J0MSkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzZXQpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisKKwkJCQkvKiBXZSBtdXN0IHdhaXQgYXQgbGVhc3QgMTAgbXMgZm9yIHRoZSBkZXZpY2UgdG8gcmVjb3Zlci4KKwkJCQkgICAxNSBtcyBzaG91bGQgYmUgZW5vdWdoLiAqLworCQkJCXVkZWxheSgxNTAwMCk7CisKKwkJCQkvKiBXYWl0IGZvciByZXNldCBiaXQgdG8gZ28gbG93IChzaG91bGQgYmUgZG9uZSBieSBub3cpLiAqLworCQkJCXdoaWxlIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgcmVzZXQsIHllcykpOworCisJCQkJLyogSWYgdGhlIHBvcnQgc3RhdHVzIGlzCisJCQkJICAgMSkgY29ubmVjdGVkIGFuZCBlbmFibGVkIHRoZW4gdGhlcmUgaXMgYSBkZXZpY2UgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluZQorCQkJCSAgIDIpIG5laXRoZXIgY29ubmVjdGVkIG5vciBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gZGV2aWNlLCBhbHNvIGZpbmUKKwkJCQkgICAzKSBjb25uZWN0ZWQgYW5kIG5vdCBlbmFibGVkIHRoZW4gd2UgdHJ5IGFnYWluCisJCQkJICAgKFllcywgdGhlcmUgYXJlIG90aGVyIHBvcnQgc3RhdHVzIGNvbWJpbmF0aW9ucyBiZXNpZGVzIHRoZXNlLikgKi8KKworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJICAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIG5vKSkpIHsKKwkJCQkJZGJnX3JoKCJDb25uZWN0ZWQgZGV2aWNlIG9uIHBvcnQgMSwgYnV0IHBvcnQgbm90IGVuYWJsZWQ/IgorCQkJCQkgICAgICAgIiBUcnlpbmcgcmVzZXQgYWdhaW4uIik7CisJCQkJCWdvdG8gcG9ydF8yX3Jlc2V0OworCQkJCX0KKworCQkJCS8qIERpYWdub3N0aWMgcHJpbnRvdXRzLiAqLworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBjb25uZWN0ZWQsIG5vKSkgJiYKKwkJCQkgICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJgorCQkJCSAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgZW5hYmxlZCwgbm8pKSkgeworCQkJCQlkYmdfcmgoIk5vIGNvbm5lY3RlZCBkZXZpY2Ugb24gcG9ydCAxIik7CisJCQkJfSBlbHNlIGlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJCSAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJCSAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIHllcykpKSB7CisJCQkJCWRiZ19yaCgiQ29ubmVjdGVkIGRldmljZSBvbiBwb3J0IDEsIHBvcnQgMSBlbmFibGVkIik7CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisKKwkJCXBvcnRfMl9yZXNldDoKKwkJCQlkYmdfcmgoIkRvaW5nIHJlc2V0IG9mIHBvcnQgMiIpOworCisJCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCQkvKiBJc3N1ZSB0aGUgcmVzZXQgY29tbWFuZC4gKi8KKwkJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBwb3J0MikgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzZXQpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisKKwkJCQkvKiBXZSBtdXN0IHdhaXQgYXQgbGVhc3QgMTAgbXMgZm9yIHRoZSBkZXZpY2UgdG8gcmVjb3Zlci4KKwkJCQkgICAxNSBtcyBzaG91bGQgYmUgZW5vdWdoLiAqLworCQkJCXVkZWxheSgxNTAwMCk7CisKKwkJCQkvKiBXYWl0IGZvciByZXNldCBiaXQgdG8gZ28gbG93IChzaG91bGQgYmUgZG9uZSBieSBub3cpLiAqLworCQkJCXdoaWxlIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgcmVzZXQsIHllcykpOworCisJCQkJLyogSWYgdGhlIHBvcnQgc3RhdHVzIGlzCisJCQkJICAgMSkgY29ubmVjdGVkIGFuZCBlbmFibGVkIHRoZW4gdGhlcmUgaXMgYSBkZXZpY2UgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluZQorCQkJCSAgIDIpIG5laXRoZXIgY29ubmVjdGVkIG5vciBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gZGV2aWNlLCBhbHNvIGZpbmUKKwkJCQkgICAzKSBjb25uZWN0ZWQgYW5kIG5vdCBlbmFibGVkIHRoZW4gd2UgdHJ5IGFnYWluCisJCQkJICAgKFllcywgdGhlcmUgYXJlIG90aGVyIHBvcnQgc3RhdHVzIGNvbWJpbmF0aW9ucyBiZXNpZGVzIHRoZXNlLikgKi8KKworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJICAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIG5vKSkpIHsKKwkJCQkJZGJnX3JoKCJDb25uZWN0ZWQgZGV2aWNlIG9uIHBvcnQgMiwgYnV0IHBvcnQgbm90IGVuYWJsZWQ/IgorCQkJCQkgICAgICAgIiBUcnlpbmcgcmVzZXQgYWdhaW4uIik7CisJCQkJCWdvdG8gcG9ydF8yX3Jlc2V0OworCQkJCX0KKworCQkJCS8qIERpYWdub3N0aWMgcHJpbnRvdXRzLiAqLworCQkJCWlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBjb25uZWN0ZWQsIG5vKSkgJiYKKwkJCQkgICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCSAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgZW5hYmxlZCwgbm8pKSkgeworCQkJCQlkYmdfcmgoIk5vIGNvbm5lY3RlZCBkZXZpY2Ugb24gcG9ydCAyIik7CisJCQkJfSBlbHNlIGlmICgoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJCSAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBjb25uZWN0ZWQsIHllcykpICYmCisJCQkJCSAgIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIHllcykpKSB7CisJCQkJCWRiZ19yaCgiQ29ubmVjdGVkIGRldmljZSBvbiBwb3J0IDIsIHBvcnQgMiBlbmFibGVkIik7CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfU0VUX0ZFQVRVUkUtPlJIX1BPUlRfUkVTRVQgd2l0aCBpbnZhbGlkIHdJbmRleCA9ICVkIiwgd0luZGV4KTsKKwkJCX0KKworCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCQkJLyogSWYgYWxsIGVuYWJsZWQgcG9ydHMgd2VyZSBkaXNhYmxlZCB0aGUgaG9zdCBjb250cm9sbGVyIGdvZXMgZG93biBpbnRvCisJCQkgICBzdGFydGVkIG1vZGUsIHNvIHdlIG5lZWQgdG8gYnJpbmcgaXQgYmFjayBpbnRvIHRoZSBydW5uaW5nIHN0YXRlLgorCQkJICAgKFRoaXMgaXMgc2FmZSBldmVuIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgcnVubmluZyBzdGF0ZS4pICovCisJCQkqUl9VU0JfQ09NTUFORCA9CisJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIG5vcCkgfAorCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXNldCkgfAorCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBob3N0X3J1bik7CisKKwkJCWRiZ19yaCgiLi4uRG9uZSIpOworCQkJT0soMCk7CisKKwkJY2FzZSAoUkhfUE9SVF9QT1dFUik6CisJCQlPSyAoMCk7CS8qIHBvcnQgcG93ZXIgKiogKi8KKwkJY2FzZSAoUkhfUE9SVF9FTkFCTEUpOgorCQkJLyogVGhlcmUgaXMgbm8gcG9ydCBlbmFibGUgY29tbWFuZCBpbiB0aGUgaG9zdCBjb250cm9sbGVyLCBzbyBpZiB0aGUKKwkJCSAgIHBvcnQgaXMgYWxyZWFkeSBlbmFibGVkLCB3ZSBkbyBub3RoaW5nLiBJZiBub3QsIHdlIHJlc2V0IHRoZSBwb3J0CisJCQkgICAod2l0aCBhbiB1Z2x5IGdvdG8pLiAqLworCisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQlpZiAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGVuYWJsZWQsIG5vKSkgeworCQkJCQlnb3RvIHBvcnRfMV9yZXNldDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkJaWYgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCSAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBlbmFibGVkLCBubykpIHsKKwkJCQkJZ290byBwb3J0XzJfcmVzZXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX1NFVF9GRUFUVVJFLT5SSF9HRVRfU1RBVFVTIHdpdGggaW52YWxpZCB3SW5kZXggPSAlZCIsIHdJbmRleCk7CisJCQl9CisJCQlPSyAoMCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX1NFVF9BRERSRVNTOgorCQloYy0+cmguZGV2bnVtID0gd1ZhbHVlOworCQlkYmdfcmgoIlJIIGFkZHJlc3Mgc2V0IHRvOiAlZCIsIGhjLT5yaC5kZXZudW0pOworCQlPSyAoMCk7CisKKwljYXNlIFJIX0dFVF9ERVNDUklQVE9SOgorCQlzd2l0Y2ggKCh3VmFsdWUgJiAweGZmMDApID4+IDgpIHsKKwkJY2FzZSAoMHgwMSk6CS8qIGRldmljZSBkZXNjcmlwdG9yICovCisJCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbmksIG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mIChyb290X2h1Yl9kZXZfZGVzKSwgd0xlbmd0aCkpOworCQkJbWVtY3B5IChkYXRhLCByb290X2h1Yl9kZXZfZGVzLCBsZW4pOworCQkJT0sgKGxlbik7CisJCWNhc2UgKDB4MDIpOgkvKiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgKi8KKwkJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuaSwgbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YgKHJvb3RfaHViX2NvbmZpZ19kZXMpLCB3TGVuZ3RoKSk7CisJCQltZW1jcHkgKGRhdGEsIHJvb3RfaHViX2NvbmZpZ19kZXMsIGxlbik7CisJCQlPSyAobGVuKTsKKwkJY2FzZSAoMHgwMyk6CS8qIHN0cmluZyBkZXNjcmlwdG9ycyAqLworCQkJbGVuID0gdXNiX3Jvb3RfaHViX3N0cmluZyAod1ZhbHVlICYgMHhmZiwKKwkJCQkJCSAgIDB4ZmYsICJFVFJBWCAxMDBMWCIsCisJCQkJCQkgICBkYXRhLCB3TGVuZ3RoKTsKKwkJCWlmIChsZW4gPiAwKSB7CisJCQkJT0sobWluKGxlbmksIGxlbikpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0ID0gLUVQSVBFOworCQkJfQorCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX0dFVF9ERVNDUklQVE9SIHwgUkhfQ0xBU1M6CisJCXJvb3RfaHViX2h1Yl9kZXNbMl0gPSBoYy0+cmgubnVtcG9ydHM7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuaSwgbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YgKHJvb3RfaHViX2h1Yl9kZXMpLCB3TGVuZ3RoKSk7CisJCW1lbWNweSAoZGF0YSwgcm9vdF9odWJfaHViX2RlcywgbGVuKTsKKwkJT0sgKGxlbik7CisKKwljYXNlIFJIX0dFVF9DT05GSUdVUkFUSU9OOgorCQkqKF9fdTggKikgZGF0YSA9IDB4MDE7CisJCU9LICgxKTsKKworCWNhc2UgUkhfU0VUX0NPTkZJR1VSQVRJT046CisJCU9LICgwKTsKKworCWRlZmF1bHQ6CisJCXN0YXQgPSAtRVBJUEU7CisJfQorCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbGVuOworCXVyYi0+c3RhdHVzID0gc3RhdDsKKwl1cmItPmRldiA9IE5VTEw7CisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitldHJheF91c2JfYnVsa19lb3RfdGltZXJfZnVuYyh1bnNpZ25lZCBsb25nIGR1bW15KQoreworCS8qIEJlY2F1c2Ugb2YgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdG9wIGhhbGYsIHdlIG1pZ2h0IG1pc3MgYSBidWxrIGVvdC4KKwkgICBUaGlzIHRpbWVyICJzaW11bGF0ZXMiIGEgYnVsayBlb3QgaWYgd2UgZG9uJ3QgZ2V0IG9uZSBmb3IgYSB3aGlsZSwgaG9wZWZ1bGx5CisJICAgY29ycmVjdGluZyB0aGUgc2l0dWF0aW9uLiAqLworCWRiZ19idWxrKCJidWxrX2VvdF90aW1lciB0aW1lZCBvdXQuIik7CisJZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdCgxKTsKK30KKworc3RhdGljIHZvaWQqCitldHJheF91c2JfYnVmZmVyX2FsbG9jKHN0cnVjdCB1c2JfYnVzKiBidXMsIHNpemVfdCBzaXplLCBpbnQgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpkbWEpCit7CisgIHJldHVybiBrbWFsbG9jKHNpemUsIG1lbV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitldHJheF91c2JfYnVmZmVyX2ZyZWUoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsIHZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgZG1hKQoreworICBrZnJlZShhZGRyKTsKK30KKworCitzdGF0aWMgc3RydWN0IGRldmljZSBmYWtlX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZXRyYXhfdXNiX2hjX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgZXRyYXhfaGNfdCAqaGM7CisJc3RydWN0IHVzYl9idXMgKmJ1czsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX3JoOworCWludCBpOworCisJREJGRU5URVI7CisKKwlpbmZvKCJFVFJBWCAxMDBMWCBVU0ItSENEICVzIChjKSAyMDAxLTIwMDMgQXhpcyBDb21tdW5pY2F0aW9ucyBBQlxuIiwgdXNiX2hjZF92ZXJzaW9uKTsKKworIAloYyA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X2hjX3QpLCBHRlBfS0VSTkVMKTsKKwlhc3NlcnQoaGMgIT0gTlVMTCk7CisKKwkvKiBXZSB1c2Uga21lbV9jYWNoZV8qIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBETUEgZGVzYy4gYXJlIGR3b3JkIGFsaWduZWQgKi8KKwkvKiBOb3RlIHRoYXQgd2Ugc3BlY2lmeSBzaXplb2YoVVNCX0VQX0Rlc2NfdCkgYXMgdGhlIHNpemUsIGJ1dCBhbHNvIGFsbG9jYXRlCisJICAgU0IgZGVzY3JpcHRvcnMgZnJvbSB0aGlzIGNhY2hlLiBUaGlzIGlzIG9rIHNpbmNlIHNpemVvZihVU0JfRVBfRGVzY190KSA9PQorCSAgIHNpemVvZihVU0JfU0JfRGVzY190KS4gKi8KKworCXVzYl9kZXNjX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInVzYl9kZXNjX2NhY2hlIiwgc2l6ZW9mKFVTQl9FUF9EZXNjX3QpLCAwLAorCQkJCQkgICBTTEFCX0hXQ0FDSEVfQUxJR04sIDAsIDApOworCWFzc2VydCh1c2JfZGVzY19jYWNoZSAhPSBOVUxMKTsKKworCXRvcF9oYWxmX3JlZ19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ0b3BfaGFsZl9yZWdfY2FjaGUiLAorCQkJCQkgICAgICAgc2l6ZW9mKHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QpLAorCQkJCQkgICAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCAwLCAwKTsKKwlhc3NlcnQodG9wX2hhbGZfcmVnX2NhY2hlICE9IE5VTEwpOworCisJaXNvY19jb21wbF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJpc29jX2NvbXBsX2NhY2hlIiwKKwkJCQkJCXNpemVvZih1c2JfaXNvY19jb21wbGV0ZV9kYXRhX3QpLAorCQkJCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCAwLCAwKTsKKwlhc3NlcnQoaXNvY19jb21wbF9jYWNoZSAhPSBOVUxMKTsKKworCWV0cmF4X3VzYl9idXMgPSBidXMgPSB1c2JfYWxsb2NfYnVzKCZldHJheF91c2JfZGV2aWNlX29wZXJhdGlvbnMpOworCWhjLT5idXMgPSBidXM7CisJYnVzLT5idXNfbmFtZT0iRVRSQVggMTAwTFgiOworCWJ1cy0+aGNwcml2ID0gaGM7CisKKwkvKiBJbml0YWxpemUgUkggdG8gdGhlIGRlZmF1bHQgYWRkcmVzcy4KKwkgICBBbmQgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBubyBzdGF0dXMgY2hhbmdlIGluZGljYXRpb24gKi8KKwloYy0+cmgubnVtcG9ydHMgPSAyOyAgLyogVGhlIFJIIGhhcyB0d28gcG9ydHMgKi8KKwloYy0+cmguZGV2bnVtID0gMTsKKwloYy0+cmgud1BvcnRDaGFuZ2VfMSA9IDA7CisJaGMtPnJoLndQb3J0Q2hhbmdlXzIgPSAwOworCisJLyogQWxzbyBpbml0YXRlIHRoZSBwcmV2aW91cyB2YWx1ZXMgdG8gemVybyAqLworCWhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgPSAwOworCWhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgPSAwOworCisJLyogSW5pdGlhbGl6ZSB0aGUgaW50ci10cmFmZmljIGZsYWdzICovCisJLyogRklYTUU6IFRoaXMgaXNuJ3QgdXNlZC4gKEJlc2lkZXMsIHRoZSBlcnJvciBmaWVsZCBpc24ndCBpbml0aWFsaXplZC4pICovCisJaGMtPmludHIuc2xlZXBpbmcgPSAwOworCWhjLT5pbnRyLndxID0gTlVMTDsKKworCWVwaWRfdXNhZ2VfYml0bWFzayA9IDA7CisJZXBpZF9vdXRfdHJhZmZpYyA9IDA7CisKKwkvKiBNYXJrIHRoZSBpbnZhbGlkIGVwaWQgYXMgYmVpbmcgdXNlZC4gKi8KKwlzZXRfYml0KElOVkFMSURfRVBJRCwgKHZvaWQgKikmZXBpZF91c2FnZV9iaXRtYXNrKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgSU5WQUxJRF9FUElEKTsKKwlub3AoKTsKKwkvKiBUaGUgdmFsaWQgYml0IHNob3VsZCBzdGlsbCBiZSBzZXQgKCdpbnZhbGlkJyBpcyBpbiBvdXIgd29ybGQ7IG5vdCB0aGUgaGFyZHdhcmUncykuICovCisJKlJfVVNCX0VQVF9EQVRBID0gKElPX1NUQVRFKFJfVVNCX0VQVF9EQVRBLCB2YWxpZCwgeWVzKSB8CisJCQkgICBJT19GSUVMRChSX1VTQl9FUFRfREFUQSwgbWF4X2xlbiwgMSkpOworCisJLyogTWFyayB0aGUgZHVtbXkgZXBpZCBhcyBiZWluZyB1c2VkLiAqLworCXNldF9iaXQoRFVNTVlfRVBJRCwgKHZvaWQgKikmZXBpZF91c2FnZV9iaXRtYXNrKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgRFVNTVlfRVBJRCk7CisJbm9wKCk7CisJKlJfVVNCX0VQVF9EQVRBID0gKElPX1NUQVRFKFJfVVNCX0VQVF9EQVRBLCB2YWxpZCwgbm8pIHwKKwkJCSAgIElPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBtYXhfbGVuLCAxKSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSB1cmIgbGlzdCBieSBpbml0aWF0aW5nIGEgaGVhZCBmb3IgZWFjaCBsaXN0LiAqLworCWZvciAoaSA9IDA7IGkgPCBOQlJfT0ZfRVBJRFM7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmdXJiX2xpc3RbaV0pOworCX0KKwlzcGluX2xvY2tfaW5pdCgmdXJiX2xpc3RfbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmdXJiX3VubGlua19saXN0KTsKKworCisJLyogSW5pdGlhdGUgdGhlIGJ1bGsgc3RhcnQgdGltZXIuICovCisJaW5pdF90aW1lcigmYnVsa19zdGFydF90aW1lcik7CisJYnVsa19zdGFydF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEJVTEtfU1RBUlRfVElNRVJfSU5URVJWQUw7CisJYnVsa19zdGFydF90aW1lci5mdW5jdGlvbiA9IGV0cmF4X3VzYl9idWxrX3N0YXJ0X3RpbWVyX2Z1bmM7CisJYWRkX3RpbWVyKCZidWxrX3N0YXJ0X3RpbWVyKTsKKworCisJLyogSW5pdGlhdGUgdGhlIGJ1bGsgZW90IHRpbWVyLiAqLworCWluaXRfdGltZXIoJmJ1bGtfZW90X3RpbWVyKTsKKwlidWxrX2VvdF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEJVTEtfRU9UX1RJTUVSX0lOVEVSVkFMOworCWJ1bGtfZW90X3RpbWVyLmZ1bmN0aW9uID0gZXRyYXhfdXNiX2J1bGtfZW90X3RpbWVyX2Z1bmM7CisJYWRkX3RpbWVyKCZidWxrX2VvdF90aW1lcik7CisKKwkvKiBTZXQgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyBmb3IgVVNCIHRyYWZmaWMuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUKKwkgICBhbnkgaW50ZXJydXB0IHRoYXQgcmVsaWVzIG9uIHNhbmUgRE1BIGxpc3Qgb2NjdXJycy4gKi8KKwlpbml0X3J4X2J1ZmZlcnMoKTsKKwlpbml0X3R4X2J1bGtfZXAoKTsKKwlpbml0X3R4X2N0cmxfZXAoKTsKKwlpbml0X3R4X2ludHJfZXAoKTsKKwlpbml0X3R4X2lzb2NfZXAoKTsKKworICAgICAgICBkZXZpY2VfaW5pdGlhbGl6ZSgmZmFrZV9kZXZpY2UpOworICAgICAgICBrb2JqZWN0X3NldF9uYW1lKCZmYWtlX2RldmljZS5rb2JqLCAiZXRyYXhfdXNiIik7CisgICAgICAgIGtvYmplY3RfYWRkKCZmYWtlX2RldmljZS5rb2JqKTsKKyAgICAgICAgaGMtPmJ1cy0+Y29udHJvbGxlciA9ICZmYWtlX2RldmljZTsKKwl1c2JfcmVnaXN0ZXJfYnVzKGhjLT5idXMpOworCisJKlJfSVJRX01BU0syX1NFVCA9CisJCS8qIE5vdGUgdGhhdCB0aGVzZSBpbnRlcnJ1cHRzIGFyZSBub3QgdXNlZC4gKi8KKwkJSU9fU1RBVEUoUl9JUlFfTUFTSzJfU0VULCBkbWE4X3N1YjBfZGVzY3IsIHNldCkgfAorCQkvKiBTdWIgY2hhbm5lbCAxIChjdHJsKSBkZXNjci4gaW50ZXJydXB0cyBhcmUgdXNlZC4gKi8KKwkJSU9fU1RBVEUoUl9JUlFfTUFTSzJfU0VULCBkbWE4X3N1YjFfZGVzY3IsIHNldCkgfAorCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYThfc3ViMl9kZXNjciwgc2V0KSB8CisJCS8qIFN1YiBjaGFubmVsIDMgKGlzb2MpIGRlc2NyLiBpbnRlcnJ1cHRzIGFyZSB1c2VkLiAqLworCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYThfc3ViM19kZXNjciwgc2V0KTsKKworCS8qIE5vdGUgdGhhdCB0aGUgZG1hOV9kZXNjciBpbnRlcnJ1cHQgaXMgbm90IHVzZWQuICovCisJKlJfSVJRX01BU0syX1NFVCA9CisJCUlPX1NUQVRFKFJfSVJRX01BU0syX1NFVCwgZG1hOV9lb3AsIHNldCkgfAorCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYTlfZGVzY3IsIHNldCk7CisKKwkvKiBGSVhNRTogRW5hYmxlIGlzb19lb2Ygb25seSB3aGVuIGlzb2MgdHJhZmZpYyBpcyBydW5uaW5nLiAqLworCSpSX1VTQl9JUlFfTUFTS19TRVQgPQorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIGlzb19lb2YsIHNldCkgfAorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIGJ1bGtfZW90LCBzZXQpIHwKKwkJSU9fU1RBVEUoUl9VU0JfSVJRX01BU0tfU0VULCBlcGlkX2F0dG4sIHNldCkgfAorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIHBvcnRfc3RhdHVzLCBzZXQpIHwKKwkJSU9fU1RBVEUoUl9VU0JfSVJRX01BU0tfU0VULCBjdGxfc3RhdHVzLCBzZXQpOworCisKKwlpZiAocmVxdWVzdF9pcnEoRVRSQVhfVVNCX0hDX0lSUSwgZXRyYXhfdXNiX2hjX2ludGVycnVwdF90b3BfaGFsZiwgMCwKKwkJCSJFVFJBWCAxMDBMWCBidWlsdC1pbiBVU0IgKEhDKSIsIGhjKSkgeworCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBJUlEgJWQgZm9yIFVTQiIsIEVUUkFYX1VTQl9IQ19JUlEpOworCQlldHJheF91c2JfaGNfY2xlYW51cCgpOworCQlEQkZFWElUOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJlcXVlc3RfaXJxKEVUUkFYX1VTQl9SWF9JUlEsIGV0cmF4X3VzYl9yeF9pbnRlcnJ1cHQsIDAsCisJCQkiRVRSQVggMTAwTFggYnVpbHQtaW4gVVNCIChSeCkiLCBoYykpIHsKKwkJZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgSVJRICVkIGZvciBVU0IiLCBFVFJBWF9VU0JfUlhfSVJRKTsKKwkJZXRyYXhfdXNiX2hjX2NsZWFudXAoKTsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChyZXF1ZXN0X2lycShFVFJBWF9VU0JfVFhfSVJRLCBldHJheF91c2JfdHhfaW50ZXJydXB0LCAwLAorCQkJIkVUUkFYIDEwMExYIGJ1aWx0LWluIFVTQiAoVHgpIiwgaGMpKSB7CisJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIElSUSAlZCBmb3IgVVNCIiwgRVRSQVhfVVNCX1RYX0lSUSk7CisJCWV0cmF4X3VzYl9oY19jbGVhbnVwKCk7CisJCURCRkVYSVQ7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBSX1VTQl9DT01NQU5EOgorCSAgIFVTQiBjb21tYW5kcyBpbiBob3N0IG1vZGUuIFRoZSBmaWVsZHMgaW4gdGhpcyByZWdpc3RlciBzaG91bGQgYWxsIGJlCisJICAgd3JpdHRlbiB0byBpbiBvbmUgd3JpdGUuIERvIG5vdCByZWFkLW1vZGlmeS13cml0ZSBvbmUgZmllbGQgYXQgYSB0aW1lLiBBCisJICAgd3JpdGUgdG8gdGhpcyByZWdpc3RlciB3aWxsIHRyaWdnZXIgZXZlbnRzIGluIHRoZSBVU0IgY29udHJvbGxlciBhbmQgYW4KKwkgICBpbmNvbXBsZXRlIGNvbW1hbmQgbWF5IGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzLCBhbmQgaW4gd29yc3QgY2FzZQorCSAgIGV2ZW4gdG8gYSBkZWFkbG9jayBpbiB0aGUgY29udHJvbGxlci4KKwkgICAoTm90ZSBob3dldmVyIHRoYXQgdGhlIGJ1c3kgZmllbGQgaXMgcmVhZC1vbmx5LCBzbyBubyBuZWVkIHRvIHdyaXRlIHRvIGl0LikgKi8KKworCS8qIENoZWNrIHRoZSBidXN5IGJpdCBiZWZvcmUgd3JpdGluZyB0byBSX1VTQl9DT01NQU5ELiAqLworCisJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkvKiBSZXNldCB0aGUgVVNCIGludGVyZmFjZS4gKi8KKwkqUl9VU0JfQ09NTUFORCA9CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBub3ApIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCByZXNldCk7CisKKwkvKiBEZXNpZ25lcidzIFJlZmVyZW5jZSwgcC4gOCAtIDEwIHNheXMgd2Ugc2hvdWxkIEluaXRhdGUgUl9VU0JfRk1fUFNUQVJUIHRvIDB4MkEzMCAoMTA4MDApLAorCSAgIHRvIGd1YXJhbnRlZSB0aGF0IGNvbnRyb2wgdHJhZmZpYyBnZXRzIDEwJSBvZiB0aGUgYmFuZHdpZHRoLCBhbmQgcGVyaW9kaWMgdHJhbnNmZXIgbWF5CisJICAgYWxsb2NhdGUgdGhlIHJlc3QgKDkwJSkuIFRoaXMgZG9lc24ndCB3b3JrIHRob3VnaC4gUmVhZCBvbiBmb3IgYSBsZW5naHR5IGV4cGxhbmF0aW9uLgorCisJICAgV2hpbGUgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gcmV2LiAyIGFuZCByZXYuIDMgb2YgdGhlIEVUUkFYIDEwMExYIHJlZ2FyZGluZyB0aGUgTkFLCisJICAgYmVoYXZpb3VyLCBpdCBkb2Vzbid0IHNvbHZlIHRoaXMgcHJvYmxlbS4gV2hhdCBoYXBwZW5zIGlzIHRoYXQgYSBjb250cm9sIHRyYW5zZmVyIHdpbGwgbm90CisJICAgYmUgaW50ZXJydXB0ZWQgaW4gaXRzIGRhdGEgc3RhZ2Ugd2hlbiBQU1RBUlQgaGFwcGVucyAodGhlIHBvaW50IGF0IHdoaWNoIHBlcmlvZGljIHRyYWZmaWMKKwkgICBpcyBzdGFydGVkKS4gVGh1cywgaWYgUFNUQVJUIGlzIHNldCB0byAxMDgwMCBhbmQgaXRzIElOIG9yIE9VVCB0b2tlbiBpcyBOQUtlZCB1bnRpbCBqdXN0IGJlZm9yZQorCSAgIFBTVEFSVCBoYXBwZW5zLCBpdCB3aWxsIGNvbnRpbnVlIHRoZSBJTi9PVVQgdHJhbnNmZXIgYXMgbG9uZyBhcyBpdCdzIEFDS2VkLiBBZnRlciBpdCdzIGRvbmUsCisJICAgdGhlcmUgbWF5IGJlIHRvbyBsaXR0bGUgdGltZSBsZWZ0IGZvciBhbiBpc29jaHJvbm91cyB0cmFuc2ZlciwgY2F1c2luZyBhbiBlcGlkIGF0dGVudGlvbgorCSAgIGludGVycnVwdCBkdWUgdG8gcGVycm9yLiBUaGUgd29yay1hcm91bmQgZm9yIHRoaXMgaXMgdG8gbGV0IHRoZSBjb250cm9sIHRyYW5zZmVycyBydW4gYXQgdGhlCisJICAgZW5kIG9mIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIGF0IHRoZSBiZWdpbm5pbmcsIGFuZCB3aWxsIGJlIGludGVycnVwdGVkIGp1c3QgZmluZSBpZiBpdCBkb2Vzbid0CisJICAgZml0IGludG8gdGhlIGZyYW1lLiBIb3dldmVyLCBzaW5jZSB0aGVyZSB3aWxsICphbHdheXMqIGJlIGEgY29udHJvbCB0cmFuc2ZlciBhdCB0aGUgYmVnaW5uaW5nCisJICAgb2YgdGhlIGZyYW1lLCByZWdhcmRsZXNzIG9mIHdoYXQgd2Ugc2V0IFBTVEFSVCB0bywgdGhhdCB0cmFuc2ZlciBtaWdodCBiZSBhIDY0LWJ5dGUgdHJhbnNmZXIKKwkgICB3aGljaCBjb25zdW1lcyB1cCB0byAxNSUgb2YgdGhlIGZyYW1lLCBsZWF2aW5nIG9ubHkgODUlIGZvciBwZXJpb2RpYyB0cmFmZmljLiBUaGUgc29sdXRpb24gdG8KKwkgICB0aGlzIHdvdWxkIGJlIHRvICdkdW1teSBhbGxvY2F0ZScgNSUgb2YgdGhlIGZyYW1lIHdpdGggdGhlIHVzYl9jbGFpbV9iYW5kd2lkdGggZnVuY3Rpb24gdG8gbWFrZQorCSAgIHN1cmUgdGhhdCB0aGUgcGVyaW9kaWMgdHJhbnNmZXJzIHRoYXQgYXJlIGluc2VydGVkIHdpbGwgYWx3YXlzIGZpdCBpbiB0aGUgZnJhbWUuCisKKwkgICBUaGUgaWRlYSB3YXMgc3VnZ2VzdGVkIHRoYXQgYSBjb250cm9sIHRyYW5zZmVyIGNvdWxkIGJlIHNwbGl0IHVwIGludG8gc2V2ZXJhbCA4IGJ5dGUgdHJhbnNmZXJzLAorCSAgIHNvIHRoYXQgaXQgd291bGQgYmUgaW50ZXJydXB0ZWQgYnkgUFNUQVJULCBidXQgc2luY2UgdGhpcyBjYW4ndCBiZSBkb25lIGZvciBhbiBJTiB0cmFuc2ZlciB0aGlzCisJICAgaGFzbid0IGJlZW4gaW1wbGVtZW50ZWQuCisKKwkgICBUaGUgdmFsdWUgMTE5NjAgaXMgY2hvc2VuIHRvIGJlIGp1c3QgYWZ0ZXIgdGhlIFNPRiB0b2tlbiwgd2l0aCBhIGNvdXBsZSBvZiBiaXQgdGltZXMgZXh0cmEKKwkgICBmb3IgcG9zc2libGUgYml0IHN0dWZmaW5nLiAqLworCisJKlJfVVNCX0ZNX1BTVEFSVCA9IElPX0ZJRUxEKFJfVVNCX0ZNX1BTVEFSVCwgdmFsdWUsIDExOTYwKTsKKworI2lmZGVmIENPTkZJR19FVFJBWF9VU0JfSE9TVF9QT1JUMQorCSpSX1VTQl9QT1JUMV9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDFfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRVRSQVhfVVNCX0hPU1RfUE9SVDIKKwkqUl9VU0JfUE9SVDJfRElTQUJMRSA9IElPX1NUQVRFKFJfVVNCX1BPUlQyX0RJU0FCTEUsIGRpc2FibGUsIG5vKTsKKyNlbmRpZgorCisJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkvKiBDb25maWd1cmUgdGhlIFVTQiBpbnRlcmZhY2UgYXMgYSBob3N0IGNvbnRyb2xsZXIuICovCisJKlJfVVNCX0NPTU1BTkQgPQorCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X3NlbCwgbm9wKSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXNldCkgfAorCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBjdHJsX2NtZCwgaG9zdF9jb25maWcpOworCisJLyogTm90ZTogRG8gbm90IHJlc2V0IGFueSBwb3J0cyBoZXJlLiBBd2FpdCB0aGUgcG9ydCBzdGF0dXMgaW50ZXJydXB0cywgdG8gaGF2ZSBhIGNvbnRyb2xsZWQKKwkgICBzZXF1ZW5jZSBvZiByZXNldHRpbmcgdGhlIHBvcnRzLiBJZiB3ZSByZXNldCBib3RoIHBvcnRzIG5vdywgYW5kIHRoZXJlIGFyZSBkZXZpY2VzCisJICAgb24gYm90aCBwb3J0cywgd2Ugd2lsbCBnZXQgYSBidXMgZXJyb3IgYmVjYXVzZSBib3RoIGRldmljZXMgd2lsbCBhbnN3ZXIgdGhlIHNldCBhZGRyZXNzCisJICAgcmVxdWVzdC4gKi8KKworCXdoaWxlICgqUl9VU0JfQ09NTUFORCAmIElPX01BU0soUl9VU0JfQ09NTUFORCwgYnVzeSkpOworCisJLyogU3RhcnQgcHJvY2Vzc2luZyBvZiBVU0IgdHJhZmZpYy4gKi8KKwkqUl9VU0JfQ09NTUFORCA9CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBub3ApIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBob3N0X3J1bik7CisKKwl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCXVzYl9yaCA9IHVzYl9hbGxvY19kZXYoTlVMTCwgaGMtPmJ1cywgMCk7CisJaGMtPmJ1cy0+cm9vdF9odWIgPSB1c2Jfcmg7CisgICAgICAgIHVzYl9yaC0+c3RhdGUgPSBVU0JfU1RBVEVfQUREUkVTUzsKKyAgICAgICAgdXNiX3JoLT5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworICAgICAgICB1c2JfcmgtPmRldm51bSA9IDE7CisgICAgICAgIGhjLT5idXMtPmRldm51bV9uZXh0ID0gMjsKKyAgICAgICAgdXNiX3JoLT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RfY3B1X3RvX2xlMTYoNjQpOworICAgICAgICB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVzYl9yaCwgVVNCX0RUX0RFVklDRV9TSVpFKTsKKwl1c2JfbmV3X2RldmljZSh1c2JfcmgpOworCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfY2xlYW51cCh2b2lkKQoreworCURCRkVOVEVSOworCisJZnJlZV9pcnEoRVRSQVhfVVNCX0hDX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoRVRSQVhfVVNCX1JYX0lSUSwgTlVMTCk7CisJZnJlZV9pcnEoRVRSQVhfVVNCX1RYX0lSUSwgTlVMTCk7CisKKwl1c2JfZGVyZWdpc3Rlcl9idXMoZXRyYXhfdXNiX2J1cyk7CisKKwkvKiBGSVhNRTogY2FsbCBrbWVtX2NhY2hlX2Rlc3Ryb3kgaGVyZT8gKi8KKworCURCRkVYSVQ7Cit9CisKK21vZHVsZV9pbml0KGV0cmF4X3VzYl9oY19pbml0KTsKK21vZHVsZV9leGl0KGV0cmF4X3VzYl9oY19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5oIGIvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNzcxMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5oCkBAIC0wLDAgKzEsMjg5IEBACisjaWZuZGVmIF9fTElOVVhfRVRSQVhfVVNCX0gKKyNkZWZpbmUgX19MSU5VWF9FVFJBWF9VU0JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3R5cGVkZWYgc3RydWN0IFVTQl9JTl9EZXNjIHsKKwl2b2xhdGlsZSBfX3UxNiBzd19sZW47CisJdm9sYXRpbGUgX191MTYgY29tbWFuZDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG5leHQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBidWY7CisJdm9sYXRpbGUgX191MTYgaHdfbGVuOworCXZvbGF0aWxlIF9fdTE2IHN0YXR1czsKK30gVVNCX0lOX0Rlc2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgVVNCX1NCX0Rlc2MgeworCXZvbGF0aWxlIF9fdTE2IHN3X2xlbjsKKwl2b2xhdGlsZSBfX3UxNiBjb21tYW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbmV4dDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJ1ZjsKKwlfX3UzMiBkdW1teTsKK30gVVNCX1NCX0Rlc2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgVVNCX0VQX0Rlc2MgeworCXZvbGF0aWxlIF9fdTE2IGh3X2xlbjsKKwl2b2xhdGlsZSBfX3UxNiBjb21tYW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgc3ViOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbmV4dDsKKwlfX3UzMiBkdW1teTsKK30gVVNCX0VQX0Rlc2NfdDsKKworc3RydWN0IHZpcnRfcm9vdF9odWIgeworCWludCBkZXZudW07CisJdm9pZCAqdXJiOworCXZvaWQgKmludF9hZGRyOworCWludCBzZW5kOworCWludCBpbnRlcnZhbDsKKwlpbnQgbnVtcG9ydHM7CisJc3RydWN0IHRpbWVyX2xpc3QgcmhfaW50X3RpbWVyOworCXZvbGF0aWxlIF9fdTE2IHdQb3J0Q2hhbmdlXzE7CisJdm9sYXRpbGUgX191MTYgd1BvcnRDaGFuZ2VfMjsKKwl2b2xhdGlsZSBfX3UxNiBwcmV2X3dQb3J0U3RhdHVzXzE7CisJdm9sYXRpbGUgX191MTYgcHJldl93UG9ydFN0YXR1c18yOworfTsKKworc3RydWN0IGV0cmF4X3VzYl9pbnRyX3RyYWZmaWMgeworCWludCBzbGVlcGluZzsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHdhaXRfcXVldWUgKndxOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXRyYXhfdXNiX2hjIHsKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXN0cnVjdCB2aXJ0X3Jvb3RfaHViIHJoOworCXN0cnVjdCBldHJheF91c2JfaW50cl90cmFmZmljIGludHI7Cit9IGV0cmF4X2hjX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJU1RBUlRFRCwKKwlOT1RfU1RBUlRFRCwKKwlVTkxJTkssCisJVFJBTlNGRVJfRE9ORSwKKwlXQUlUSU5HX0ZPUl9ERVNDUl9JTlRSCit9IGV0cmF4X3VzYl91cmJfc3RhdGVfdDsKKworCisKK3R5cGVkZWYgc3RydWN0IGV0cmF4X3VzYl91cmJfcHJpdiB7CisJLyogVGhlIGZpcnN0X3NiIGZpZWxkIGlzIHVzZWQgZm9yIGZyZWVpbmcgYWxsIFNCIGRlc2NyaXB0b3JzIGJlbG9uZ2luZworCSAgIHRvIGFuIHVyYi4gVGhlIGNvcnJlc3BvbmRpbmcgZXAgZGVzY3JpcHRvcidzIHN1YiBwb2ludGVyIGNhbm5vdCBiZQorCSAgIHVzZWQgZm9yIHRoaXMgc2luY2UgdGhlIERNQSBhZHZhbmNlcyB0aGUgc3ViIHBvaW50ZXIgYXMgaXQgcHJvY2Vzc2VzCisJICAgdGhlIHNiIGxpc3QuICovCisJVVNCX1NCX0Rlc2NfdCAqZmlyc3Rfc2I7CisJLyogVGhlIGxhc3Rfc2IgZmllbGQgcmVmZXJlcyB0byB0aGUgbGFzdCBTQiBkZXNjcmlwdG9yIHRoYXQgYmVsb25ncyB0bworCSAgIHRoaXMgdXJiLiBUaGlzIGlzIGltcG9ydGFudCB0byBrbm93IHNvIHdlIGNhbiBmcmVlIHRoZSBTQiBkZXNjcmlwdG9ycworCSAgIHRoYXQgcmFuZ2VzIGJldHdlZW4gZmlyc3Rfc2IgYW5kIGxhc3Rfc2IuICovCisJVVNCX1NCX0Rlc2NfdCAqbGFzdF9zYjsKKworCS8qIFRoZSByeF9vZmZzZXQgZmllbGQgaXMgdXNlZCBpbiBjdHJsIGFuZCBidWxrIHRyYWZmaWMgdG8ga2VlcCB0cmFjaworCSAgIG9mIHRoZSBvZmZzZXQgaW4gdGhlIHVyYidzIHRyYW5zZmVyX2J1ZmZlciB3aGVyZSBpbmNvbWluZyBkYXRhIHNob3VsZCBiZQorCSAgIGNvcGllZCB0by4gKi8KKwlfX3UzMiByeF9vZmZzZXQ7CisKKwkvKiBDb3VudGVyIHVzZWQgaW4gaXNvY2hyb25vdXMgdHJhbnNmZXJzIHRvIGtlZXAgdHJhY2sgb2YgdGhlCisJICAgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQvdHJhbnNtaXR0ZWQuICAqLworCV9fdTMyIGlzb2NfcGFja2V0X2NvdW50ZXI7CisKKwkvKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXJiJ3MgY3VycmVudCBzdGF0ZSBiZXR3ZWVuCisJICAgdGhlIHZhcmlvdXMgaW50ZXJydXB0IGhhbmRsZXJzICh0aHVzIG1hcmtlZCB2b2xhdGlsZSkuICovCisJdm9sYXRpbGUgZXRyYXhfdXNiX3VyYl9zdGF0ZV90IHVyYl9zdGF0ZTsKKworCS8qIENvbm5lY3Rpb24gYmV0d2VlbiB0aGUgc3VibWl0dGVkIHVyYiBhbmQgRVRSQVggZXBpZCBudW1iZXIgKi8KKwlfX3U4IGVwaWQ7CisKKwkvKiBUaGUgcnhfZGF0YV9saXN0IGZpZWxkIGlzIHVzZWQgZm9yIHBlcmlvZGljIHRyYWZmaWMsIHRvIGhvbGQKKwkgICByZWNlaXZlZCBkYXRhIGZvciBsYXRlciBwcm9jZXNzaW5nIGluIHRoZSB0aGUgY29tcGxldGVfdXJiIGZ1bmN0aW9ucywKKwkgICB3aGVyZSB0aGUgZGF0YSB1cyBjb3BpZWQgdG8gdGhlIHVyYidzIHRyYW5zZmVyX2J1ZmZlci4gQmFzaWNhbGx5LCB3ZQorCSAgIHVzZSB0aGlzIGludGVybWVkaWF0ZSBzdG9yYWdlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVuIGl0J3Mgc2FmZSB0bworCSAgIHJldXNlIHRoZSB0cmFuc2Zlcl9idWZmZXIgKEZJWE1FPykuICovCisJc3RydWN0IGxpc3RfaGVhZCByeF9kYXRhX2xpc3Q7Cit9IGV0cmF4X3VyYl9wcml2X3Q7CisKKy8qIFRoaXMgc3RydWN0IGlzIGZvciBwYXNzaW5nIGRhdGEgZnJvbSB0aGUgdG9wIGhhbGYgdG8gdGhlIGJvdHRvbSBoYWxmLiAqLwordHlwZWRlZiBzdHJ1Y3QgdXNiX2ludGVycnVwdF9yZWdpc3RlcnMKK3sKKwlldHJheF9oY190ICpoYzsKKwlfX3UzMiByX3VzYl9lcGlkX2F0dG47CisJX191OCByX3VzYl9zdGF0dXM7CisJX191MTYgcl91c2JfcmhfcG9ydF9zdGF0dXNfMTsKKwlfX3UxNiByX3VzYl9yaF9wb3J0X3N0YXR1c18yOworCV9fdTMyIHJfdXNiX2lycV9tYXNrX3JlYWQ7CisJX191MzIgcl91c2JfZm1fbnVtYmVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCB1c2JfYmg7Cit9IHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3Q7CisKKy8qIFRoaXMgc3RydWN0IGlzIGZvciBwYXNzaW5nIGRhdGEgZnJvbSB0aGUgaXNvYyB0b3AgaGFsZiB0byB0aGUgaXNvYyBib3R0b20gaGFsZi4gKi8KK3R5cGVkZWYgc3RydWN0IHVzYl9pc29jX2NvbXBsZXRlX2RhdGEKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHdvcmtfc3RydWN0IHVzYl9iaDsKK30gdXNiX2lzb2NfY29tcGxldGVfZGF0YV90OworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBkYXRhIHdlIGdldCBmcm9tIHRoZSByeCBkZXNjcmlwdG9ycyBmb3IgRE1BIGNoYW5uZWwgOQorICAgZm9yIHBlcmlvZGljIHRyYWZmaWMgKGludHIgYW5kIGlzb2MpLiAqLwordHlwZWRlZiBzdHJ1Y3QgcnhfZGF0YQoreworCXZvaWQgKmRhdGE7CisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9IHJ4X2RhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdXJiX2VudHJ5Cit7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK30gdXJiX2VudHJ5X3Q7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVmlydHVhbCBSb290IEhVQgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZGVzdGluYXRpb24gb2YgcmVxdWVzdCAqLworI2RlZmluZSBSSF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJIX0VORFBPSU5UICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUkhfT1RIRVIgICAgICAgICAgICAgICAgICAgMHgwMworCisjZGVmaW5lIFJIX0NMQVNTICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUkhfVkVORE9SICAgICAgICAgICAgICAgICAgMHg0MAorCisvKiBSZXF1ZXN0czogYlJlcXVlc3QgPDwgOCB8IGJtUmVxdWVzdFR5cGUgKi8KKyNkZWZpbmUgUkhfR0VUX1NUQVRVUyAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFJIX0NMRUFSX0ZFQVRVUkUgICAgICAgIDB4MDEwMAorI2RlZmluZSBSSF9TRVRfRkVBVFVSRSAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgUkhfU0VUX0FERFJFU1MJCTB4MDUwMAorI2RlZmluZSBSSF9HRVRfREVTQ1JJUFRPUgkweDA2ODAKKyNkZWZpbmUgUkhfU0VUX0RFU0NSSVBUT1IgICAgICAgMHgwNzAwCisjZGVmaW5lIFJIX0dFVF9DT05GSUdVUkFUSU9OCTB4MDg4MAorI2RlZmluZSBSSF9TRVRfQ09ORklHVVJBVElPTgkweDA5MDAKKyNkZWZpbmUgUkhfR0VUX1NUQVRFICAgICAgICAgICAgMHgwMjgwCisjZGVmaW5lIFJIX0dFVF9JTlRFUkZBQ0UgICAgICAgIDB4MEE4MAorI2RlZmluZSBSSF9TRVRfSU5URVJGQUNFICAgICAgICAweDBCMDAKKyNkZWZpbmUgUkhfU1lOQ19GUkFNRSAgICAgICAgICAgMHgwQzgwCisvKiBPdXIgVmVuZG9yIFNwZWNpZmljIFJlcXVlc3QgKi8KKyNkZWZpbmUgUkhfU0VUX0VQICAgICAgICAgICAgICAgMHgyMDAwCisKKworLyogSHViIHBvcnQgZmVhdHVyZXMgKi8KKyNkZWZpbmUgUkhfUE9SVF9DT05ORUNUSU9OICAgICAgICAgMHgwMAorI2RlZmluZSBSSF9QT1JUX0VOQUJMRSAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJIX1BPUlRfU1VTUEVORCAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUkhfUE9SVF9PVkVSX0NVUlJFTlQgICAgICAgMHgwMworI2RlZmluZSBSSF9QT1JUX1JFU0VUICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFJIX1BPUlRfUE9XRVIgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgUkhfUE9SVF9MT1dfU1BFRUQgICAgICAgICAgMHgwOQorI2RlZmluZSBSSF9DX1BPUlRfQ09OTkVDVElPTiAgICAgICAweDEwCisjZGVmaW5lIFJIX0NfUE9SVF9FTkFCTEUgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgUkhfQ19QT1JUX1NVU1BFTkQgICAgICAgICAgMHgxMgorI2RlZmluZSBSSF9DX1BPUlRfT1ZFUl9DVVJSRU5UICAgICAweDEzCisjZGVmaW5lIFJIX0NfUE9SVF9SRVNFVCAgICAgICAgICAgIDB4MTQKKworLyogSHViIGZlYXR1cmVzICovCisjZGVmaW5lIFJIX0NfSFVCX0xPQ0FMX1BPV0VSICAgICAgIDB4MDAKKyNkZWZpbmUgUkhfQ19IVUJfT1ZFUl9DVVJSRU5UICAgICAgMHgwMQorCisjZGVmaW5lIFJIX0RFVklDRV9SRU1PVEVfV0FLRVVQICAgIDB4MDAKKyNkZWZpbmUgUkhfRU5EUE9JTlRfU1RBTEwgICAgICAgICAgMHgwMQorCisvKiBPdXIgVmVuZG9yIFNwZWNpZmljIGZlYXR1cmUgKi8KKyNkZWZpbmUgUkhfUkVNT1ZFX0VQICAgICAgICAgICAgICAgMHgwMAorCisKKyNkZWZpbmUgUkhfQUNLICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSSF9SRVFfRVJSICAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBSSF9OQUNLICAgICAgICAgICAgICAgICAgICAweDAwCisKKy8qIEZpZWxkIGRlZmluaXRpb25zIGZvciAqLworCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19lb2xfX0JJVE5SICAgICAgMCAvKiBjb21tYW5kIG1hY3JvcyAqLworI2RlZmluZSBVU0JfSU5fY29tbWFuZF9fZW9sX19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2VvbF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19lb2xfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19pbnRyX19CSVROUiAgICAgMworI2RlZmluZSBVU0JfSU5fY29tbWFuZF9faW50cl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2ludHJfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19pbnRyX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvcF9fQklUTlIgICAgICAgMSAvKiBzdGF0dXMgbWFjcm9zLiAqLworI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lb3BfX1dJRFRIICAgICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW9wX19ubyAgICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvcF9feWVzICAgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvdF9fQklUTlIgICAgICAgNQorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lb3RfX1dJRFRIICAgICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW90X19ubyAgICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvdF9feWVzICAgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2Vycm9yX19CSVROUiAgICAgNgorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lcnJvcl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZXJyb3JfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2Vycm9yX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX25vZGF0YV9fQklUTlIgICAgNworI2RlZmluZSBVU0JfSU5fc3RhdHVzX19ub2RhdGFfX1dJRFRIICAgIDEKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fbm9kYXRhX19ubyAgICAgICAwCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX25vZGF0YV9feWVzICAgICAgMQorCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VwaWRfX0JJVE5SICAgICAgOAorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lcGlkX19XSURUSCAgICAgIDUKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9sX19CSVROUiAgICAgIDAKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VvbF9fV0lEVEggICAgICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2xfX25vICAgICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9sX195ZXMgICAgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9mX19CSVROUiAgICAgIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VvZl9fV0lEVEggICAgICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2ZfX25vICAgICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9mX195ZXMgICAgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faW50cl9fQklUTlIgICAgIDMKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2ludHJfX1dJRFRIICAgICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19pbnRyX19ubyAgICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faW50cl9feWVzICAgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW5hYmxlX19CSVROUiAgIDQKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VuYWJsZV9fV0lEVEggICAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lbmFibGVfX25vICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW5hYmxlX195ZXMgICAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faHdfdmFsaWRfX0JJVE5SIDUKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2h3X3ZhbGlkX19XSURUSCAxCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19od192YWxpZF9fbm8gICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faHdfdmFsaWRfX3llcyAgIDEKKworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZXBpZF9fQklUTlIgICAgIDgKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VwaWRfX1dJRFRIICAgICA1CisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvbF9fQklUTlIgICAgICAwIC8qIGNvbW1hbmQgbWFjcm9zLiAqLworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW9sX19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvbF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb2xfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb3RfX0JJVE5SICAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW90X19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvdF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb3RfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19pbnRyX19CSVROUiAgICAgMworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9faW50cl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2ludHJfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19pbnRyX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX190dF9fQklUTlIgICAgICAgNAorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fdHRfX1dJRFRIICAgICAgIDIKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3R0X196b3V0ICAgICAgICAwCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX190dF9faW4gICAgICAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fdHRfX291dCAgICAgICAgIDIKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3R0X19zZXR1cCAgICAgICAzCisKKworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fcmVtX19CSVROUiAgICAgIDgKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3JlbV9fV0lEVEggICAgICA2CisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2Z1bGxfX0JJVE5SICAgICA2CisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19mdWxsX19XSURUSCAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZnVsbF9fbm8gICAgICAgIDAKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2Z1bGxfX3llcyAgICAgICAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODFiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBCdXMgR2x1ZSBmb3IgQU1EIEFsY2hlbXkgQXUxeHh4CisgKgorICogV3JpdHRlbiBieSBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKiBCYXNlZCBvbiBmcmFnbWVudHMgb2YgcHJldmlvdXMgZHJpdmVyIGJ5IFJ1c2VsbCBLaW5nIGV0IGFsLgorICoKKyAqIE1vZGlmaWVkIGZvciBMSDdBNDA0IGZyb20gb2hjaS1zYTExMTEuYworICogIGJ5IER1cmdlc2ggUGF0dGFtYXR0YSA8cGF0dGFtYXR0YWRAc2hhcnBzZWMuY29tPgorICogTW9kaWZpZWQgZm9yIEFNRCBBbGNoZW15IEF1MXh4eAorICogIGJ5IE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKworI2RlZmluZSBVU0JIX0VOQUJMRV9CRSAoMTw8MCkKKyNkZWZpbmUgVVNCSF9FTkFCTEVfQyAgKDE8PDEpCisjZGVmaW5lIFVTQkhfRU5BQkxFX0UgICgxPDwyKQorI2RlZmluZSBVU0JIX0VOQUJMRV9DRSAoMTw8MykKKyNkZWZpbmUgVVNCSF9FTkFCTEVfUkQgKDE8PDQpCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAoVVNCSF9FTkFCTEVfQ0UgfCBVU0JIX0VOQUJMRV9FIHwgVVNCSF9FTkFCTEVfQykKKyNlbGlmIF9fQklHX0VORElBTgorI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUIChVU0JIX0VOQUJMRV9DRSB8IFVTQkhfRU5BQkxFX0UgfCBVU0JIX0VOQUJMRV9DIHwgVVNCSF9FTkFCTEVfQkUpCisjZWxzZQorI2Vycm9yIG5vdCBieXRlIG9yZGVyIGRlZmluZWQKKyNlbmRpZgorCitleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgYXUxeHh4X3N0YXJ0X2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCQkiOiBzdGFydGluZyBBdTF4eHggT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiBlbmFibGUgaG9zdCBjb250cm9sbGVyICovCisJYXVfd3JpdGVsKFVTQkhfRU5BQkxFX0NFLCBVU0JfSE9TVF9DT05GSUcpOworCXVkZWxheSgxMDAwKTsKKwlhdV93cml0ZWwoVVNCSF9FTkFCTEVfSU5JVCwgVVNCX0hPU1RfQ09ORklHKTsKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiB3YWl0IGZvciByZXNldCBjb21wbGV0ZSAocmVhZCByZWdpc3RlciB0d2ljZTsgc2VlIGF1MTUwMCBlcnJhdGEpICovCisJd2hpbGUgKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksCisJCSEoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSAmIFVTQkhfRU5BQkxFX1JEKSkKKwkJdWRlbGF5KDEwMDApOworCisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkiOiBDbG9jayB0byBVU0IgaG9zdCBoYXMgYmVlbiBlbmFibGVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGF1MXh4eF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCSAgICAgICAiOiBzdG9wcGluZyBBdTF4eHggT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiBEaXNhYmxlIGNsb2NrICovCisJYXVfd3JpdGVsKHJlYWRsKCh2b2lkICopVVNCX0hPU1RfQ09ORklHKSAmIH5VU0JIX0VOQUJMRV9DRSwgVVNCX0hPU1RfQ09ORklHKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9hdTF4eHhfcHJvYmUgLSBpbml0aWFsaXplIEF1MXh4eC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKi8KK2ludCB1c2JfaGNkX2F1MXh4eF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaWYoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcl9kZWJ1ZyAoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZkZXYtPmRldiwgImF1MXh4eCIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJYXUxeHh4X3N0YXJ0X2hjKGRldik7CisJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlhdTF4eHhfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX2F1MXh4eF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBBdTF4eHgtYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfYXUxeHh4X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9hdTF4eHhfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlhdTF4eHhfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9hdTF4eHhfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlvaGNpX2RiZyAob2hjaSwgIm9oY2lfYXUxeHh4X3N0YXJ0LCBvaGNpOiVwIiwgb2hjaSk7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdCAob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfYXUxeHh4X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiQXUxeHh4IE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX2F1MXh4eF9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkvKiBzdXNwZW5kOgkJb2hjaV9hdTF4eHhfc3VzcGVuZCwgIC0tIHRiZCAqLworCS8qIHJlc3VtZToJCW9oY2lfYXUxeHh4X3Jlc3VtZSwgICAtLSB0YmQgKi8KKyNlbmRpZiAvKkNPTkZJR19QTSovCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCByZXQ7CisKKwlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUiKTsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX2F1MXh4eF9wcm9iZSgmb2hjaV9hdTF4eHhfaGNfZHJpdmVyLCBwZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9hdTF4eHhfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisJLypUQkQqLworLypzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiAwOworfQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiAwOworfQorKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImF1MXh4eC1vaGNpIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAorCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsICovCisJLyoucmVzdW1lCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsICovCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9hdTF4eHhfaW5pdCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoRFJJVkVSX0lORk8gIiAoQXUxeHh4KSIpOworCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX2F1MXh4eF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKG9oY2lfaGNkX2F1MXh4eF9pbml0KTsKK21vZHVsZV9leGl0IChvaGNpX2hjZF9hdTF4eHhfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmNTNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwpAQCAtMCwwICsxLDcwNyBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgREVCVUcKKworI2RlZmluZSBlZHN0cmluZyhlZF90eXBlKSAoeyBjaGFyICp0ZW1wOyBcCisJc3dpdGNoIChlZF90eXBlKSB7IFwKKwljYXNlIFBJUEVfQ09OVFJPTDoJdGVtcCA9ICJjdHJsIjsgYnJlYWs7IFwKKwljYXNlIFBJUEVfQlVMSzoJCXRlbXAgPSAiYnVsayI7IGJyZWFrOyBcCisJY2FzZSBQSVBFX0lOVEVSUlVQVDoJdGVtcCA9ICJpbnRyIjsgYnJlYWs7IFwKKwlkZWZhdWx0OiAJCXRlbXAgPSAiaXNvYyI7IGJyZWFrOyBcCisJfTsgdGVtcDt9KQorI2RlZmluZSBwaXBlc3RyaW5nKHBpcGUpIGVkc3RyaW5nKHVzYl9waXBldHlwZShwaXBlKSkKKworLyogZGVidWd8IHByaW50IHRoZSBtYWluIGNvbXBvbmVudHMgb2YgYW4gVVJCCisgKiBzbWFsbDogMCkgaGVhZGVyICsgZGF0YSBwYWNrZXRzIDEpIGp1c3QgaGVhZGVyCisgKi8KK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCit1cmJfcHJpbnQgKHN0cnVjdCB1cmIgKiB1cmIsIGNoYXIgKiBzdHIsIGludCBzbWFsbCkKK3sKKwl1bnNpZ25lZCBpbnQgcGlwZT0gdXJiLT5waXBlOworCisJaWYgKCF1cmItPmRldiB8fCAhdXJiLT5kZXYtPmJ1cykgeworCQlkYmcoIiVzIFVSQjogbm8gZGV2Iiwgc3RyKTsKKwkJcmV0dXJuOworCX0KKworI2lmbmRlZglPSENJX1ZFUkJPU0VfREVCVUcKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkKKyNlbmRpZgorCWRiZygiJXMgJXAgZGV2PSVkIGVwPSVkJXMtJXMgZmxhZ3M9JXggbGVuPSVkLyVkIHN0YXQ9JWQiLAorCQkgICAgc3RyLAorCQkgICAgdXJiLAorCQkgICAgdXNiX3BpcGVkZXZpY2UgKHBpcGUpLAorCQkgICAgdXNiX3BpcGVlbmRwb2ludCAocGlwZSksCisJCSAgICB1c2JfcGlwZW91dCAocGlwZSk/ICJvdXQiIDogImluIiwKKwkJICAgIHBpcGVzdHJpbmcgKHBpcGUpLAorCQkgICAgdXJiLT50cmFuc2Zlcl9mbGFncywKKwkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgIHVyYi0+c3RhdHVzKTsKKworI2lmZGVmCU9IQ0lfVkVSQk9TRV9ERUJVRworCWlmICghc21hbGwpIHsKKwkJaW50IGksIGxlbjsKKworCQlpZiAodXNiX3BpcGVjb250cm9sIChwaXBlKSkgeworCQkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6IHNldHVwKDgpOiIpOworCQkJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCQkJcHJpbnRrICgiICUwMngiLCAoKF9fdTggKikgdXJiLT5zZXR1cF9wYWNrZXQpIFtpXSk7CisJCQlwcmludGsgKCJcbiIpOworCQl9CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogZGF0YSglZC8lZCk6IiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCWxlbiA9IHVzYl9waXBlb3V0IChwaXBlKT8KKwkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDogdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJZm9yIChpID0gMDsgaSA8IDE2ICYmIGkgPCBsZW47IGkrKykKKwkJCQlwcmludGsgKCIgJTAyeCIsICgoX191OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgW2ldKTsKKwkJCXByaW50ayAoIiVzIHN0YXQ6JWRcbiIsIGkgPCBsZW4/ICIuLi4iOiAiIiwgdXJiLT5zdGF0dXMpOworCQl9CisJfQorI2VuZGlmCit9CisKKyNkZWZpbmUgb2hjaV9kYmdfc3cob2hjaSwgbmV4dCwgc2l6ZSwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwlpZiAobmV4dCkgeyBcCisJCXVuc2lnbmVkIHNfbGVuOyBcCisJCXNfbGVuID0gc2NucHJpbnRmICgqbmV4dCwgKnNpemUsIGZvcm1hdCwgIyMgYXJnICk7IFwKKwkJKnNpemUgLT0gc19sZW47ICpuZXh0ICs9IHNfbGVuOyBcCisJfSBlbHNlIFwKKwkJb2hjaV9kYmcob2hjaSxmb3JtYXQsICMjIGFyZyApOyBcCisJfSB3aGlsZSAoMCk7CisKKworc3RhdGljIHZvaWQgb2hjaV9kdW1wX2ludHJfbWFzayAoCisJc3RydWN0IG9oY2lfaGNkICpvaGNpLAorCWNoYXIgKmxhYmVsLAorCXUzMiBtYXNrLAorCWNoYXIgKipuZXh0LAorCXVuc2lnbmVkICpzaXplKQoreworCW9oY2lfZGJnX3N3IChvaGNpLCBuZXh0LCBzaXplLCAiJXMgMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzXG4iLAorCQlsYWJlbCwKKwkJbWFzaywKKwkJKG1hc2sgJiBPSENJX0lOVFJfTUlFKSA/ICIgTUlFIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9PQykgPyAiIE9DIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9SSFNDKSA/ICIgUkhTQyIgOiAiIiwKKwkJKG1hc2sgJiBPSENJX0lOVFJfRk5PKSA/ICIgRk5PIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9VRSkgPyAiIFVFIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9SRCkgPyAiIFJEIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9TRikgPyAiIFNGIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9XREgpID8gIiBXREgiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1NPKSA/ICIgU08iIDogIiIKKwkJKTsKK30KKworc3RhdGljIHZvaWQgbWF5YmVfcHJpbnRfZWRzICgKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJY2hhciAqbGFiZWwsCisJdTMyIHZhbHVlLAorCWNoYXIgKipuZXh0LAorCXVuc2lnbmVkICpzaXplKQoreworCWlmICh2YWx1ZSkKKwkJb2hjaV9kYmdfc3cgKG9oY2ksIG5leHQsIHNpemUsICIlcyAlMDh4XG4iLCBsYWJlbCwgdmFsdWUpOworfQorCitzdGF0aWMgY2hhciAqaGNmczJzdHJpbmcgKGludCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgT0hDSV9VU0JfUkVTRVQ6CXJldHVybiAicmVzZXQiOworCQljYXNlIE9IQ0lfVVNCX1JFU1VNRToJcmV0dXJuICJyZXN1bWUiOworCQljYXNlIE9IQ0lfVVNCX09QRVI6CXJldHVybiAib3BlcmF0aW9uYWwiOworCQljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CXJldHVybiAic3VzcGVuZCI7CisJfQorCXJldHVybiAiPyI7Cit9CisKKy8vIGR1bXAgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycworc3RhdGljIHZvaWQKK29oY2lfZHVtcF9zdGF0dXMgKHN0cnVjdCBvaGNpX2hjZCAqY29udHJvbGxlciwgY2hhciAqKm5leHQsIHVuc2lnbmVkICpzaXplKQoreworCXN0cnVjdCBvaGNpX3JlZ3MgX19pb21lbSAqcmVncyA9IGNvbnRyb2xsZXItPnJlZ3M7CisJdTMyCQkJdGVtcDsKKworCXRlbXAgPSBvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+cmV2aXNpb24pICYgMHhmZjsKKwlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJIk9IQ0kgJWQuJWQsICVzIGxlZ2FjeSBzdXBwb3J0IHJlZ2lzdGVyc1xuIiwKKwkJMHgwMyAmICh0ZW1wID4+IDQpLCAodGVtcCAmIDB4MGYpLAorCQkodGVtcCAmIDB4MDEwMCkgPyAid2l0aCIgOiAiTk8iKTsKKworCXRlbXAgPSBvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+Y29udHJvbCk7CisJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCSJjb250cm9sIDB4JTAzeCVzJXMlcyBIQ0ZTPSVzJXMlcyVzJXMgQ0JTUj0lZFxuIiwKKwkJdGVtcCwKKwkJKHRlbXAgJiBPSENJX0NUUkxfUldFKSA/ICIgUldFIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9SV0MpID8gIiBSV0MiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX0lSKSA/ICIgSVIiIDogIiIsCisJCWhjZnMyc3RyaW5nICh0ZW1wICYgT0hDSV9DVFJMX0hDRlMpLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9CTEUpID8gIiBCTEUiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX0NMRSkgPyAiIENMRSIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfSUUpID8gIiBJRSIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfUExFKSA/ICIgUExFIiA6ICIiLAorCQl0ZW1wICYgT0hDSV9DVFJMX0NCU1IKKwkJKTsKKworCXRlbXAgPSBvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+Y21kc3RhdHVzKTsKKwlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJImNtZHN0YXR1cyAweCUwNXggU09DPSVkJXMlcyVzJXNcbiIsIHRlbXAsCisJCSh0ZW1wICYgT0hDSV9TT0MpID4+IDE2LAorCQkodGVtcCAmIE9IQ0lfT0NSKSA/ICIgT0NSIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQkxGKSA/ICIgQkxGIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ0xGKSA/ICIgQ0xGIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfSENSKSA/ICIgSENSIiA6ICIiCisJCSk7CisKKwlvaGNpX2R1bXBfaW50cl9tYXNrIChjb250cm9sbGVyLCAiaW50cnN0YXR1cyIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+aW50cnN0YXR1cyksCisJCQluZXh0LCBzaXplKTsKKwlvaGNpX2R1bXBfaW50cl9tYXNrIChjb250cm9sbGVyLCAiaW50cmVuYWJsZSIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+aW50cmVuYWJsZSksCisJCQluZXh0LCBzaXplKTsKKwkvLyBpbnRyZGlzYWJsZSBhbHdheXMgc2FtZSBhcyBpbnRyZW5hYmxlCisKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJlZF9wZXJpb2RjdXJyZW50IiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9wZXJpb2RjdXJyZW50KSwKKwkJCW5leHQsIHNpemUpOworCisJbWF5YmVfcHJpbnRfZWRzIChjb250cm9sbGVyLCAiZWRfY29udHJvbGhlYWQiLAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmVkX2NvbnRyb2xoZWFkKSwKKwkJCW5leHQsIHNpemUpOworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImVkX2NvbnRyb2xjdXJyZW50IiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9jb250cm9sY3VycmVudCksCisJCQluZXh0LCBzaXplKTsKKworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImVkX2J1bGtoZWFkIiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9idWxraGVhZCksCisJCQluZXh0LCBzaXplKTsKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJlZF9idWxrY3VycmVudCIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+ZWRfYnVsa2N1cnJlbnQpLAorCQkJbmV4dCwgc2l6ZSk7CisKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJkb25laGVhZCIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+ZG9uZWhlYWQpLCBuZXh0LCBzaXplKTsKKworCS8qIGJyb2tlbiBmbWludGVydmFsIG1lYW5zIHRyYWZmaWMgd29uJ3QgZmxvdyEgKi8gCisJb2hjaV9kYmcgKGNvbnRyb2xsZXIsICJmbWludGVydmFsICUwOHhcbiIsIAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmZtaW50ZXJ2YWwpKTsKK30KKworI2RlZmluZSBkYmdfcG9ydF9zdyhoYyxudW0sdmFsdWUsbmV4dCxzaXplKSBcCisJb2hjaV9kYmdfc3cgKGhjLCBuZXh0LCBzaXplLCBcCisJCSJyb290aHViLnBvcnRzdGF0dXMgWyVkXSAiIFwKKwkJIjB4JTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwgXAorCQludW0sIHRlbXAsIFwKKwkJKHRlbXAgJiBSSF9QU19QUlNDKSA/ICIgUFJTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX09DSUMpID8gIiBPQ0lDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QRVNDKSA/ICIgUEVTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX0NTQykgPyAiIENTQyIgOiAiIiwgXAorIAkJXAorCQkodGVtcCAmIFJIX1BTX0xTREEpID8gIiBMU0RBIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFBTKSA/ICIgUFBTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFJTKSA/ICIgUFJTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUE9DSSkgPyAiIFBPQ0kiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QU1MpID8gIiBQU1MiIDogIiIsIFwKKyAJCVwKKwkJKHRlbXAgJiBSSF9QU19QRVMpID8gIiBQRVMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19DQ1MpID8gIiBDQ1MiIDogIiIgXAorCQkpOworCisKK3N0YXRpYyB2b2lkCitvaGNpX2R1bXBfcm9vdGh1YiAoCisJc3RydWN0IG9oY2lfaGNkICpjb250cm9sbGVyLAorCWludCB2ZXJib3NlLAorCWNoYXIgKipuZXh0LAorCXVuc2lnbmVkICpzaXplKQoreworCXUzMgkJCXRlbXAsIG5kcCwgaTsKKworCXRlbXAgPSByb290aHViX2EgKGNvbnRyb2xsZXIpOworCWlmICh0ZW1wID09IH4odTMyKTApCisJCXJldHVybjsKKwluZHAgPSAodGVtcCAmIFJIX0FfTkRQKTsKKworCWlmICh2ZXJib3NlKSB7CisJCW9oY2lfZGJnX3N3IChjb250cm9sbGVyLCBuZXh0LCBzaXplLAorCQkJInJvb3RodWIuYSAlMDh4IFBPVFBHVD0lZCVzJXMlcyVzJXMgTkRQPSVkXG4iLCB0ZW1wLAorCQkJKCh0ZW1wICYgUkhfQV9QT1RQR1QpID4+IDI0KSAmIDB4ZmYsCisJCQkodGVtcCAmIFJIX0FfTk9DUCkgPyAiIE5PQ1AiIDogIiIsCisJCQkodGVtcCAmIFJIX0FfT0NQTSkgPyAiIE9DUE0iIDogIiIsCisJCQkodGVtcCAmIFJIX0FfRFQpID8gIiBEVCIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfQV9OUFMpID8gIiBOUFMiIDogIiIsCisJCQkodGVtcCAmIFJIX0FfUFNNKSA/ICIgUFNNIiA6ICIiLAorCQkJbmRwCisJCQkpOworCQl0ZW1wID0gcm9vdGh1Yl9iIChjb250cm9sbGVyKTsKKwkJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCQkicm9vdGh1Yi5iICUwOHggUFBDTT0lMDR4IERSPSUwNHhcbiIsCisJCQl0ZW1wLAorCQkJKHRlbXAgJiBSSF9CX1BQQ00pID4+IDE2LAorCQkJKHRlbXAgJiBSSF9CX0RSKQorCQkJKTsKKwkJdGVtcCA9IHJvb3RodWJfc3RhdHVzIChjb250cm9sbGVyKTsKKwkJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCQkicm9vdGh1Yi5zdGF0dXMgJTA4eCVzJXMlcyVzJXMlc1xuIiwKKwkJCXRlbXAsCisJCQkodGVtcCAmIFJIX0hTX0NSV0UpID8gIiBDUldFIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9IU19PQ0lDKSA/ICIgT0NJQyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfSFNfTFBTQykgPyAiIExQU0MiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX0RSV0UpID8gIiBEUldFIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9IU19PQ0kpID8gIiBPQ0kiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX0xQUykgPyAiIExQUyIgOiAiIgorCQkJKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmRwOyBpKyspIHsKKwkJdGVtcCA9IHJvb3RodWJfcG9ydHN0YXR1cyAoY29udHJvbGxlciwgaSk7CisJCWRiZ19wb3J0X3N3IChjb250cm9sbGVyLCBpLCB0ZW1wLCBuZXh0LCBzaXplKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfZHVtcCAoc3RydWN0IG9oY2lfaGNkICpjb250cm9sbGVyLCBpbnQgdmVyYm9zZSkKK3sKKwlvaGNpX2RiZyAoY29udHJvbGxlciwgIk9IQ0kgY29udHJvbGxlciBzdGF0ZVxuIik7CisKKwkvLyBkdW1wcyBzb21lIG9mIHRoZSBzdGF0ZSB3ZSBrbm93IGFib3V0CisJb2hjaV9kdW1wX3N0YXR1cyAoY29udHJvbGxlciwgTlVMTCwgTlVMTCk7CisJaWYgKGNvbnRyb2xsZXItPmhjY2EpCisJCW9oY2lfZGJnIChjb250cm9sbGVyLAorCQkJImhjY2EgZnJhbWUgIyUwNHhcbiIsIG9oY2lfZnJhbWVfbm8oY29udHJvbGxlcikpOworCW9oY2lfZHVtcF9yb290aHViIChjb250cm9sbGVyLCAxLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZGF0YTAgW10gPSAiREFUQTAiOworc3RhdGljIGNvbnN0IGNoYXIgZGF0YTEgW10gPSAiREFUQTEiOworCitzdGF0aWMgdm9pZCBvaGNpX2R1bXBfdGQgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgY2hhciAqbGFiZWwsCisJCWNvbnN0IHN0cnVjdCB0ZCAqdGQpCit7CisJdTMyCXRtcCA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pOworCisJb2hjaV9kYmcgKG9oY2ksICIlcyB0ZCAlcCVzOyB1cmIgJXAgaW5kZXggJWQ7IGh3IG5leHQgdGQgJTA4eFxuIiwKKwkJbGFiZWwsIHRkLAorCQkodG1wICYgVERfRE9ORSkgPyAiIChET05FKSIgOiAiIiwKKwkJdGQtPnVyYiwgdGQtPmluZGV4LAorCQloYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdOZXh0VEQpKTsKKwlpZiAoKHRtcCAmIFREX0lTTykgPT0gMCkgeworCQljb25zdCBjaGFyCSp0b2dnbGUsICpwaWQ7CisJCXUzMgljYnAsIGJlOworCisJCXN3aXRjaCAodG1wICYgVERfVCkgeworCQljYXNlIFREX1RfREFUQTA6IHRvZ2dsZSA9IGRhdGEwOyBicmVhazsKKwkJY2FzZSBURF9UX0RBVEExOiB0b2dnbGUgPSBkYXRhMTsgYnJlYWs7CisJCWNhc2UgVERfVF9UT0dHTEU6IHRvZ2dsZSA9ICIoQ0FSUlkpIjsgYnJlYWs7CisJCWRlZmF1bHQ6IHRvZ2dsZSA9ICIoPykiOyBicmVhazsKKwkJfQorCQlzd2l0Y2ggKHRtcCAmIFREX0RQKSB7CisJCWNhc2UgVERfRFBfU0VUVVA6IHBpZCA9ICJTRVRVUCI7IGJyZWFrOworCQljYXNlIFREX0RQX0lOOiBwaWQgPSAiSU4iOyBicmVhazsKKwkJY2FzZSBURF9EUF9PVVQ6IHBpZCA9ICJPVVQiOyBicmVhazsKKwkJZGVmYXVsdDogcGlkID0gIihiYWQgcGlkKSI7IGJyZWFrOworCQl9CisJCW9oY2lfZGJnIChvaGNpLCAiICAgICBpbmZvICUwOHggQ0M9JXggJXMgREk9JWQgJXMgJXNcbiIsIHRtcCwKKwkJCVREX0NDX0dFVCh0bXApLCAvKiBFQywgKi8gdG9nZ2xlLAorCQkJKHRtcCAmIFREX0RJKSA+PiAyMSwgcGlkLAorCQkJKHRtcCAmIFREX1IpID8gIlIiIDogIiIpOworCQljYnAgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdDQlApOworCQliZSA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0JFKTsKKwkJb2hjaV9kYmcgKG9oY2ksICIgICAgIGNicCAlMDh4IGJlICUwOHggKGxlbiAlZClcbiIsIGNicCwgYmUsCisJCQljYnAgPyAoYmUgKyAxIC0gY2JwKSA6IDApOworCX0gZWxzZSB7CisJCXVuc2lnbmVkCWk7CisJCW9oY2lfZGJnIChvaGNpLCAiICBpbmZvICUwOHggQ0M9JXggRkM9JWQgREk9JWQgU0Y9JTA0eFxuIiwgdG1wLAorCQkJVERfQ0NfR0VUKHRtcCksCisJCQkodG1wID4+IDI0KSAmIDB4MDcsCisJCQkodG1wICYgVERfREkpID4+IDIxLAorCQkJdG1wICYgMHgwMDAwZmZmZik7CisJCW9oY2lfZGJnIChvaGNpLCAiICBicDAgJTA4eCBiZSAlMDh4XG4iLAorCQkJaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3Q0JQKSAmIH4weDBmZmYsCisJCQloYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdCRSkpOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYUFNXOyBpKyspIHsKKwkJCXUxNglwc3cgPSBvaGNpX2h3UFNXIChvaGNpLCB0ZCwgaSk7CisJCQlpbnQJY2MgPSAocHN3ID4+IDEyKSAmIDB4MGY7CisJCQlvaGNpX2RiZyAob2hjaSwgIiAgICBwc3cgWyVkXSA9ICUyeCwgQ0M9JXggJXM9JWRcbiIsIGksCisJCQkJcHN3LCBjYywKKwkJCQkoY2MgPj0gMHgwZSkgPyAiT0ZGU0VUIiA6ICJTSVpFIiwKKwkJCQlwc3cgJiAweDBmZmYpOworCQl9CisJfQorfQorCisvKiBjYWxsZXIgTVVTVCBvd24gaGNkIHNwaW5sb2NrIGlmIHZlcmJvc2UgaXMgc2V0ISAqLworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK29oY2lfZHVtcF9lZCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBjaGFyICpsYWJlbCwKKwkJY29uc3Qgc3RydWN0IGVkICplZCwgaW50IHZlcmJvc2UpCit7CisJdTMyCXRtcCA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdJTkZPKTsKKwljaGFyCSp0eXBlID0gIiI7CisKKwlvaGNpX2RiZyAob2hjaSwgIiVzLCBlZCAlcCBzdGF0ZSAweCV4IHR5cGUgJXM7IG5leHQgZWQgJTA4eFxuIiwKKwkJbGFiZWwsCisJCWVkLCBlZC0+c3RhdGUsIGVkc3RyaW5nIChlZC0+dHlwZSksCisJCWhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od05leHRFRCkpOworCXN3aXRjaCAodG1wICYgKEVEX0lOfEVEX09VVCkpIHsKKwljYXNlIEVEX09VVDogdHlwZSA9ICItT1VUIjsgYnJlYWs7CisJY2FzZSBFRF9JTjogdHlwZSA9ICItSU4iOyBicmVhazsKKwkvKiBlbHNlIGZyb20gVERzIC4uLiBjb250cm9sICovCisJfQorCW9oY2lfZGJnIChvaGNpLAorCQkiICBpbmZvICUwOHggTUFYPSVkJXMlcyVzJXMgRVA9JWQlcyBERVY9JWRcbiIsIHRtcCwKKwkJMHgwM2ZmICYgKHRtcCA+PiAxNiksCisJCSh0bXAgJiBFRF9ERVFVRVVFKSA/ICIgRFEiIDogIiIsCisJCSh0bXAgJiBFRF9JU08pID8gIiBJU08iIDogIiIsCisJCSh0bXAgJiBFRF9TS0lQKSA/ICIgU0tJUCIgOiAiIiwKKwkJKHRtcCAmIEVEX0xPV1NQRUVEKSA/ICIgTE9XIiA6ICIiLAorCQkweDAwMGYgJiAodG1wID4+IDcpLAorCQl0eXBlLAorCQkweDAwN2YgJiB0bXApOworCXRtcCA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od0hlYWRQKTsKKwlvaGNpX2RiZyAob2hjaSwgIiAgdGRzOiBoZWFkICUwOHggJXMlcyB0YWlsICUwOHglc1xuIiwKKwkJdG1wLAorCQkodG1wICYgRURfQykgPyBkYXRhMSA6IGRhdGEwLAorCQkodG1wICYgRURfSCkgPyAiIEhBTFQiIDogIiIsCisJCWhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od1RhaWxQKSwKKwkJdmVyYm9zZSA/ICIiIDogIiAobm90IGxpc3RpbmcpIik7CisJaWYgKHZlcmJvc2UpIHsKKwkJc3RydWN0IGxpc3RfaGVhZAkqdG1wOworCisJCS8qIHVzZSBlZC0+dGRfbGlzdCBiZWNhdXNlIEhDIGNvbmN1cnJlbnRseSBtb2RpZmllcworCQkgKiBod05leHRURCBhcyBpdCBhY2N1bXVsYXRlcyBlZF9kb25lbGlzdC4KKwkJICovCisJCWxpc3RfZm9yX2VhY2ggKHRtcCwgJmVkLT50ZF9saXN0KSB7CisJCQlzdHJ1Y3QgdGQJCSp0ZDsKKwkJCXRkID0gbGlzdF9lbnRyeSAodG1wLCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworCQkJb2hjaV9kdW1wX3RkIChvaGNpLCAiICAtPiIsIHRkKTsKKwkJfQorCX0KK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaGNpX2R1bXAgKHN0cnVjdCBvaGNpX2hjZCAqY29udHJvbGxlciwgaW50IHZlcmJvc2UpIHt9CisKKyN1bmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKworI2VuZGlmIC8qIERFQlVHICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBTVFVCX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqYnVzKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqYnVzKSB7IH0KKworI2Vsc2UKKworc3RhdGljIHNzaXplX3QKK3Nob3dfbGlzdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgc3RydWN0IGVkICplZCkKK3sKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZSA9IGNvdW50OworCisJaWYgKCFlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBwcmludCBmaXJzdCAtLT4gbGFzdCAqLworCXdoaWxlIChlZC0+ZWRfcHJldikKKwkJZWQgPSBlZC0+ZWRfcHJldjsKKworCS8qIGR1bXAgYSBzbmFwc2hvdCBvZiB0aGUgYnVsayBvciBjb250cm9sIHNjaGVkdWxlICovCisJd2hpbGUgKGVkKSB7CisJCXUzMgkJaW5mbyA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdJTkZPKTsKKwkJdTMyCQloZWFkcCA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdIZWFkUCk7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCQlzdHJ1Y3QgdGQJKnRkOworCisJCXRlbXAgPSBzY25wcmludGYgKGJ1Ziwgc2l6ZSwKKwkJCSJlZC8lcCAlY3MgZGV2JWQgZXAlZCVzIG1heCAlZCAlMDh4JXMlcyAlcyIsCisJCQllZCwKKwkJCShpbmZvICYgRURfTE9XU1BFRUQpID8gJ2wnIDogJ2YnLAorCQkJaW5mbyAmIDB4N2YsCisJCQkoaW5mbyA+PiA3KSAmIDB4ZiwKKwkJCShpbmZvICYgRURfSU4pID8gImluIiA6ICJvdXQiLAorCQkJMHgwM2ZmICYgKGluZm8gPj4gMTYpLAorCQkJaW5mbywKKwkJCShpbmZvICYgRURfU0tJUCkgPyAiIHMiIDogIiIsCisJCQkoaGVhZHAgJiBFRF9IKSA/ICIgSCIgOiAiIiwKKwkJCShoZWFkcCAmIEVEX0MpID8gZGF0YTEgOiBkYXRhMCk7CisJCXNpemUgLT0gdGVtcDsKKwkJYnVmICs9IHRlbXA7CisKKwkJbGlzdF9mb3JfZWFjaCAoZW50cnksICZlZC0+dGRfbGlzdCkgeworCQkJdTMyCQljYnAsIGJlOworCisJCQl0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworCQkJaW5mbyA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pOworCQkJY2JwID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3Q0JQKTsKKwkJCWJlID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3QkUpOworCQkJdGVtcCA9IHNjbnByaW50ZiAoYnVmLCBzaXplLAorCQkJCQkiXG5cdHRkICVwICVzICVkIGNjPSV4IHVyYiAlcCAoJTA4eCkiLAorCQkJCQl0ZCwKKwkJCQkJKHsgY2hhciAqcGlkOworCQkJCQlzd2l0Y2ggKGluZm8gJiBURF9EUCkgeworCQkJCQljYXNlIFREX0RQX1NFVFVQOiBwaWQgPSAic2V0dXAiOyBicmVhazsKKwkJCQkJY2FzZSBURF9EUF9JTjogcGlkID0gImluIjsgYnJlYWs7CisJCQkJCWNhc2UgVERfRFBfT1VUOiBwaWQgPSAib3V0IjsgYnJlYWs7CisJCQkJCWRlZmF1bHQ6IHBpZCA9ICIoPykiOyBicmVhazsKKwkJCQkJIH0gcGlkO30pLAorCQkJCQljYnAgPyAoYmUgKyAxIC0gY2JwKSA6IDAsCisJCQkJCVREX0NDX0dFVCAoaW5mbyksIHRkLT51cmIsIGluZm8pOworCQkJc2l6ZSAtPSB0ZW1wOworCQkJYnVmICs9IHRlbXA7CisJCX0KKworCQl0ZW1wID0gc2NucHJpbnRmIChidWYsIHNpemUsICJcbiIpOworCQlzaXplIC09IHRlbXA7CisJCWJ1ZiArPSB0ZW1wOworCisJCWVkID0gZWQtPmVkX25leHQ7CisJfQorCXJldHVybiBjb3VudCAtIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X2FzeW5jIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpOworCXNpemVfdAkJCXRlbXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisJaGNkID0gYnVzLT5oY3ByaXY7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisKKwkvKiBkaXNwbGF5IGNvbnRyb2wgYW5kIGJ1bGsgbGlzdHMgdG9nZXRoZXIsIGZvciBzaW1wbGljaXR5ICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJdGVtcCA9IHNob3dfbGlzdCAob2hjaSwgYnVmLCBQQUdFX1NJWkUsIG9oY2ktPmVkX2NvbnRyb2x0YWlsKTsKKwl0ZW1wICs9IHNob3dfbGlzdCAob2hjaSwgYnVmICsgdGVtcCwgUEFHRV9TSVpFIC0gdGVtcCwgb2hjaS0+ZWRfYnVsa3RhaWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGVtcDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUiAoYXN5bmMsIFNfSVJVR08sIHNob3dfYXN5bmMsIE5VTEwpOworCisKKyNkZWZpbmUgREJHX1NDSEVEX0xJTUlUIDY0CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3BlcmlvZGljIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpOworCXN0cnVjdCBlZAkJKipzZWVuLCAqZWQ7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQJCXRlbXAsIHNpemUsIHNlZW5fY291bnQ7CisJY2hhcgkJCSpuZXh0OworCXVuc2lnbmVkCQlpOworCisJaWYgKCEoc2VlbiA9IGttYWxsb2MgKERCR19TQ0hFRF9MSU1JVCAqIHNpemVvZiAqc2VlbiwgU0xBQl9BVE9NSUMpKSkKKwkJcmV0dXJuIDA7CisJc2Vlbl9jb3VudCA9IDA7CisKKwlidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisJaGNkID0gYnVzLT5oY3ByaXY7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJbmV4dCA9IGJ1ZjsKKwlzaXplID0gUEFHRV9TSVpFOworCisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInNpemUgPSAlZFxuIiwgTlVNX0lOVFMpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwkvKiBkdW1wIGEgc25hcHNob3Qgb2YgdGhlIHBlcmlvZGljIHNjaGVkdWxlIChhbmQgbG9hZCkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVFM7IGkrKykgeworCQlpZiAoIShlZCA9IG9oY2ktPnBlcmlvZGljIFtpXSkpCisJCQljb250aW51ZTsKKworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiJTJkIFslM2RdOiIsIGksIG9oY2ktPmxvYWQgW2ldKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisKKwkJZG8geworCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIiBlZCVkLyVwIiwKKwkJCQllZC0+aW50ZXJ2YWwsIGVkKTsKKwkJCXNpemUgLT0gdGVtcDsKKwkJCW5leHQgKz0gdGVtcDsKKwkJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBzZWVuX2NvdW50OyB0ZW1wKyspIHsKKwkJCQlpZiAoc2VlbiBbdGVtcF0gPT0gZWQpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBzaG93IG1vcmUgaW5mbyB0aGUgZmlyc3QgdGltZSBhcm91bmQgKi8KKwkJCWlmICh0ZW1wID09IHNlZW5fY291bnQpIHsKKwkJCQl1MzIJaW5mbyA9IGhjMzJfdG9fY3B1IChvaGNpLCBlZC0+aHdJTkZPKTsKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKKwkJCQl1bnNpZ25lZAkJcWxlbiA9IDA7CisKKwkJCQkvKiBxbGVuIG1lYXN1cmVkIGhlcmUgaW4gVERzLCBub3QgdXJicyAqLworCQkJCWxpc3RfZm9yX2VhY2ggKGVudHJ5LCAmZWQtPnRkX2xpc3QpCisJCQkJCXFsZW4rKzsKKworCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSIgKCVjcyBkZXYlZCBlcCVkJXMtJXMgcWxlbiAldSIKKwkJCQkJIiBtYXggJWQgJTA4eCVzJXMpIiwKKwkJCQkJKGluZm8gJiBFRF9MT1dTUEVFRCkgPyAnbCcgOiAnZicsCisJCQkJCWluZm8gJiAweDdmLAorCQkJCQkoaW5mbyA+PiA3KSAmIDB4ZiwKKwkJCQkJKGluZm8gJiBFRF9JTikgPyAiaW4iIDogIm91dCIsCisJCQkJCShpbmZvICYgRURfSVNPKSA/ICJpc28iIDogImludCIsCisJCQkJCXFsZW4sCisJCQkJCTB4MDNmZiAmIChpbmZvID4+IDE2KSwKKwkJCQkJaW5mbywKKwkJCQkJKGluZm8gJiBFRF9TS0lQKSA/ICIgSyIgOiAiIiwKKwkJCQkJKGVkLT5od0hlYWRQICYKKwkJCQkJCWNwdV90b19oYzMyKG9oY2ksIEVEX0gpKSA/CisgCQkJCQkJCSIgSCIgOiAiIik7CisJCQkJc2l6ZSAtPSB0ZW1wOworCQkJCW5leHQgKz0gdGVtcDsKKworCQkJCWlmIChzZWVuX2NvdW50IDwgREJHX1NDSEVEX0xJTUlUKQorCQkJCQlzZWVuIFtzZWVuX2NvdW50KytdID0gZWQ7CisKKwkJCQllZCA9IGVkLT5lZF9uZXh0OworCisJCQl9IGVsc2UgeworCQkJCS8qIHdlJ3ZlIHNlZW4gaXQgYW5kIHdoYXQncyBhZnRlciAqLworCQkJCXRlbXAgPSAwOworCQkJCWVkID0gTlVMTDsKKwkJCX0KKworCQl9IHdoaWxlIChlZCk7CisKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlxuIik7CisJCXNpemUgLT0gdGVtcDsKKwkJbmV4dCArPSB0ZW1wOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCWtmcmVlIChzZWVuKTsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChwZXJpb2RpYywgU19JUlVHTywgc2hvd19wZXJpb2RpYywgTlVMTCk7CisKKworI3VuZGVmIERCR19TQ0hFRF9MSU1JVAorCitzdGF0aWMgc3NpemVfdAorc2hvd19yZWdpc3RlcnMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2k7CisJc3RydWN0IG9oY2lfcmVncyBfX2lvbWVtICpyZWdzOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXVuc2lnbmVkCQl0ZW1wLCBzaXplOworCWNoYXIJCQkqbmV4dDsKKwl1MzIJCQlyZGF0YTsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlyZWdzID0gb2hjaS0+cmVnczsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGR1bXAgZHJpdmVyIGluZm8sIHRoZW4gcmVnaXN0ZXJzIGluIHNwZWMgb3JkZXIgKi8KKworCW9oY2lfZGJnX3N3IChvaGNpLCAmbmV4dCwgJnNpemUsCisJCSJidXMgJXMsIGRldmljZSAlc1xuIgorCQkiJXNcbiIKKwkJIiVzIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iLAorCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLAorCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzX2lkLAorCQloY2QtPnByb2R1Y3RfZGVzYywKKwkJaGNkX25hbWUpOworCisJaWYgKGJ1cy0+Y29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUpIHsKKwkJc2l6ZSAtPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkiU1VTUEVOREVEIChubyByZWdpc3RlciBhY2Nlc3MpXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCW9oY2lfZHVtcF9zdGF0dXMob2hjaSwgJm5leHQsICZzaXplKTsKKworCS8qIGhjY2EgKi8KKwlpZiAob2hjaS0+aGNjYSkKKwkJb2hjaV9kYmdfc3cgKG9oY2ksICZuZXh0LCAmc2l6ZSwKKwkJCSJoY2NhIGZyYW1lIDB4JTA0eFxuIiwgb2hjaV9mcmFtZV9ubyhvaGNpKSk7CisKKwkvKiBvdGhlciByZWdpc3RlcnMgbW9zdGx5IGFmZmVjdCBmcmFtZSB0aW1pbmdzICovCisJcmRhdGEgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+Zm1pbnRlcnZhbCk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCSJmbWludHZsIDB4JTA4eCAlc0ZTTVBTPTB4JTA0eCBGST0weCUwNHhcbiIsCisJCQlyZGF0YSwgKHJkYXRhID4+IDMxKSA/ICJGSVQgIiA6ICIiLAorCQkJKHJkYXRhID4+IDE2KSAmIDB4ZWZmZiwgcmRhdGEgJiAweGZmZmYpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwlyZGF0YSA9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5mbXJlbWFpbmluZyk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImZtcmVtYWluaW5nIDB4JTA4eCAlc0ZSPTB4JTA0eFxuIiwKKwkJCXJkYXRhLCAocmRhdGEgPj4gMzEpID8gIkZSVCAiIDogIiIsCisJCQlyZGF0YSAmIDB4M2ZmZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCXJkYXRhID0gb2hjaV9yZWFkbCAob2hjaSwgJnJlZ3MtPnBlcmlvZGljc3RhcnQpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJwZXJpb2RpY3N0YXJ0IDB4JTA0eFxuIiwKKwkJCXJkYXRhICYgMHgzZmZmKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJcmRhdGEgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+bHN0aHJlc2gpOworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJsc3RocmVzaCAweCUwNHhcbiIsCisJCQlyZGF0YSAmIDB4M2ZmZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCS8qIHJvb3RodWIgKi8KKwlvaGNpX2R1bXBfcm9vdGh1YiAob2hjaSwgMSwgJm5leHQsICZzaXplKTsKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChyZWdpc3RlcnMsIFNfSVJVR08sIHNob3dfcmVnaXN0ZXJzLCBOVUxMKTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xkZXYgPSAmb2hjaV90b19oY2Qob2hjaSktPnNlbGYuY2xhc3NfZGV2OworCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYXN5bmMpOworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3BlcmlvZGljKTsKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWdpc3RlcnMpOworCW9oY2lfZGJnIChvaGNpLCAiY3JlYXRlZCBkZWJ1ZyBmaWxlc1xuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGRldiA9ICZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jbGFzc19kZXY7CisKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9hc3luYyk7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGVyaW9kaWMpOworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZ2lzdGVycyk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyN2YxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtMCwwICsxLDkyNSBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNCBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogWyBJbml0aWFsaXNhdGlvbiBpcyBiYXNlZCBvbiBMaW51cycgIF0KKyAqIFsgdWhjaSBjb2RlIGFuZCBncmVncyBvaGNpIGZyYWdtZW50cyBdCisgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcyAgXQorICogWyAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aF0KKyAqIAorICogCisgKiBPSENJIGlzIHRoZSBtYWluICJub24tSW50ZWwvVklBIiBzdGFuZGFyZCBmb3IgVVNCIDEuMSBob3N0IGNvbnRyb2xsZXIKKyAqIGludGVyZmFjZXMgKHRob3VnaCBzb21lIG5vbi14ODYgSW50ZWwgY2hpcHMgdXNlIGl0KS4gIEl0IHN1cHBvcnRzCisgKiBzbWFydGVyIGhhcmR3YXJlIHRoYW4gVUhDSS4gIEEgZG93bmxvYWQgbGluayBmb3IgdGhlIHNwZWMgYXZhaWxhYmxlCisgKiB0aHJvdWdoIHRoZSBodHRwOi8vd3d3LnVzYi5vcmcgd2Vic2l0ZS4KKyAqCisgKiBIaXN0b3J5OgorICogCisgKiAyMDA0LzAzLzI0IExIN0E0MDQgc3VwcG9ydCAoRHVyZ2VzaCBQYXR0YW1hdHRhICYgTWFyYyBTaW5nZXIpCisgKiAyMDA0LzAyLzA0IHVzZSBnZW5lcmljIGRtYV8qIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHBjaV8qIChkc2F4ZW5hQHBsZXhpdHkubmV0KQorICogMjAwMy8wMi8yNCBzaG93IHJlZ2lzdGVycyBpbiBzeXNmcyAoS2V2aW4gQnJvc2l1cykKKyAqCisgKiAyMDAyLzA5LzAzIGdldCByaWQgb2YgZWQgaGFzaHRhYmxlcywgcmV3b3JrIHBlcmlvZGljIHNjaGVkdWxpbmcgYW5kCisgKiAJYmFuZHdpZHRoIGFjY291bnRpbmc7IGlmIGRlYnVnZ2luZywgc2hvdyBzY2hlZHVsZXMgaW4gZHJpdmVyZnMKKyAqIDIwMDIvMDcvMTkgZml4ZXMgdG8gbWFuYWdlbWVudCBvZiBFRCBhbmQgc2NoZWR1bGUgc3RhdGUuCisgKiAyMDAyLzA2LzA5IFNBLTExMTEgc3VwcG9ydCAoQ2hyaXN0b3BoZXIgSG9vdmVyKQorICogMjAwMi8wNi8wMSByZW1lbWJlciBmcmFtZSB3aGVuIEhDIHdvbid0IHNlZSBFRHMgYW55IG1vcmU7IHVzZSB0aGF0IGluZm8KKyAqCXRvIGZpeCB1cmIgdW5saW5rIHJhY2VzIGNhdXNlZCBieSBpbnRlcnJ1cHQgbGF0ZW5jeSBhc3N1bXB0aW9uczsKKyAqCW1pbm9yIEVEIGZpZWxkIGFuZCBmdW5jdGlvbiBuYW1pbmcgdXBkYXRlcworICogMjAwMi8wMS8xOCBwYWNrYWdlIGFzIGEgcGF0Y2ggZm9yIDIuNS4zOyB0aGlzIHNob3VsZCBtYXRjaCB0aGUKKyAqCTIuNC4xNyBrZXJuZWwgbW9kdWxvIHNvbWUgYnVncyBiZWluZyBmaXhlZC4KKyAqCisgKiAyMDAxLzEwLzE4IG1lcmdlIHBtYWMgY2xlYW51cCAoQmVuamFtaW4gSGVycmVuc2NobWlkdCkgYW5kIGJ1Z2ZpeGVzCisgKglmcm9tIHBvc3QtMi40LjUgcGF0Y2hlcy4KKyAqIDIwMDEvMDkvMjAgVVJCX1pFUk9fUEFDS0VUIHN1cHBvcnQ7IGhjY2FfZG1hIHBvcnRhYmlsaXR5LCBPUFRpIHdhcm5pbmcKKyAqIDIwMDEvMDkvMDcgbWF0Y2ggUENJIFBNIGNoYW5nZXMsIGVycm5vcyBmcm9tIExpbnVzJyB0cmVlCisgKiAyMDAxLzA1LzA1IGZvcmsgMi40LjUgdmVyc2lvbiBpbnRvICJoY2QiIGZyYW1ld29yaywgY2xlYW51cCwgc2ltcGxpZnk7CisgKglwYm9vayBwY2kgcXVpcmtzIGdvbmUgKHBsZWFzZSBmaXggcGJvb2sgcGNpIHN3ISkgKGRiKQorICoKKyAqIDIwMDEvMDQvMDggSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZCAoZ2IpCisgKiAyMDAxLzAzLzI0IHRkL2VkIGhhc2hpbmcgdG8gcmVtb3ZlIGJ1c190b192aXJ0IChTdGV2ZSBMb25nZXJiZWFtKTsKKyAJcGNpX21hcF9zaW5nbGUgKGRiKQorICogMjAwMS8wMy8yMSB0ZCBhbmQgZGV2L2VkIGFsbG9jYXRpb24gdXNlcyBuZXcgcGNpX3Bvb2wgQVBJIChkYikKKyAqIDIwMDEvMDMvMDcgaGNjYSBhbGxvY2F0aW9uIHVzZXMgcGNpX2FsbG9jX2NvbnNpc3RlbnQgKFN0ZXZlIExvbmdlcmJlYW0pCisgKgorICogMjAwMC8wOS8yNiBmaXhlZCByYWNlcyBpbiByZW1vdmluZyB0aGUgcHJpdmF0ZSBwb3J0aW9uIG9mIHRoZSB1cmIKKyAqIDIwMDAvMDkvMDcgZGlzYWJsZSBidWxrIGFuZCBjb250cm9sIGxpc3RzIHdoZW4gdW5saW5raW5nIHRoZSBsYXN0CisgKgllbmRwb2ludCBkZXNjcmlwdG9yIGluIG9yZGVyIHRvIGF2b2lkIHVucmVjb3ZlcmFibGUgZXJyb3JzIG9uCisgKgl0aGUgTHVjZW50IGNoaXBzLiAocndjQHNnaSkKKyAqIDIwMDAvMDgvMjkgdXNlIGJhbmR3aWR0aCBjbGFpbWluZyBob29rcyAodGhhbmtzIFJhbmR5ISksIGZpeCBzb21lCisgKgl1cmIgdW5saW5rIHByb2JzLCBpbmRlbnRhdGlvbiBmaXhlcworICogMjAwMC8wOC8xMSB2YXJpb3VzIG9vcHMgZml4ZXMgbW9zdGx5IGFmZmVjdGluZyBpc28gYW5kIGNsZWFudXAgZnJvbQorICoJZGV2aWNlIHVucGx1Z3MuCisgKiAyMDAwLzA2LzI4IHVzZSBQQ0kgaG90cGx1ZyBmcmFtZXdvcmssIGZvciBiZXR0ZXIgcG93ZXIgbWFuYWdlbWVudAorICoJYW5kIGZvciBDYXJkYnVzIHN1cHBvcnQgKERhdmlkIEJyb3duZWxsKQorICogMjAwMC9lYXJsaWVyOiAgZml4ZXMgZm9yIE5FQy9MdWNlbnQgY2hpcHM7IHN1c3BlbmQvcmVzdW1lIGhhbmRsaW5nCisgKgl3aGVuIHRoZSBjb250cm9sbGVyIGxvc2VzIHBvd2VyOyBoYW5kbGUgVUU7IGNsZWFudXA7IC4uLgorICoKKyAqIHY1LjIgMTk5OS8xMi8wNyBVUkIgM3JkIHByZXZpZXcsIAorICogdjUuMSAxOTk5LzExLzMwIFVSQiAybmQgcHJldmlldywgY3BpYSwgKHVzYi1zY3NpKQorICogdjUuMCAxOTk5LzExLzIyIFVSQiBUZWNobmljYWwgcHJldmlldywgUGF1bCBNYWNrZXJyYXMgcG93ZXJib29rIHN1c3AvcmVzdW1lIAorICogCWkzODY6IEhVQiwgS2V5Ym9hcmQsIE1vdXNlLCBQcmludGVyIAorICoKKyAqIHY0LjMgMTk5OS8xMC8yNyBtdWx0aXBsZSBIQ3MsIGJ1bGtfcmVxdWVzdAorICogdjQuMiAxOTk5LzA5LzA1IElTTyBBUEkgYWxwaGEsIG5ldyBkZXYgYWxsb2MsIG5lZyBFcnJvci1jb2RlcworICogdjQuMSAxOTk5LzA4LzI3IFJhbmR5IER1bmxhcCdzIC0gSVNPIEFQSSBmaXJzdCBpbXBsLgorICogdjQuMCAxOTk5LzA4LzE4IAorICogdjMuMCAxOTk5LzA2LzI1IAorICogdjIuMSAxOTk5LzA1LzA5ICBjb2RlIGNsZWFuIHVwCisgKiB2Mi4wIDE5OTkvMDUvMDQgCisgKiB2MS4wIDE5OTkvMDQvMjcgaW5pdGlhbCByZWxlYXNlCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKyAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyMJZGVmaW5lIERFQlVHCisjZWxzZQorIwl1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4gIC8qIGZvciBpbl9pbnRlcnJ1cHQgKCkgKi8KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Jfb3RnLmg+CisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPiAKKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+ICAgIC8qIG5lZWRlZCBieSBvaGNpLW1lbS5jIHdoZW4gbm8gUENJICovCisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjAwNCBOb3YgMDgiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlJvbWFuIFdlaXNzZ2FlcmJlciwgRGF2aWQgQnJvd25lbGwiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMS4xICdPcGVuJyBIb3N0IENvbnRyb2xsZXIgKE9IQ0kpIERyaXZlciIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gI2RlZmluZSBPSENJX1ZFUkJPU0VfREVCVUcJLyogbm90IGFsd2F5cyBoZWxwZnVsICovCisKKy8qIEZvciBpbml0aWFsaXppbmcgY29udHJvbGxlciAobWFzayBpbiBhbiBIQ0ZTIG1vZGUgdG9vKSAqLworI2RlZmluZQlPSENJX0NPTlRST0xfSU5JVCAJT0hDSV9DVFJMX0NCU1IKKyNkZWZpbmUJT0hDSV9JTlRSX0lOSVQgXAorCShPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX1VFIHwgT0hDSV9JTlRSX1JEIHwgT0hDSV9JTlRSX1dESCkKKworI2lmZGVmIF9faHBwYV9fCisvKiBPbiBQQS1SSVNDLCBQREMgY2FuIGxlYXZlIElSIHNldCBpbmNvcnJlY3RseTsgaWdub3JlIGl0IHRoZXJlLiAqLworI2RlZmluZQlJUl9ESVNBQkxFCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAKKy8qIE9NQVAgZG9lc24ndCBzdXBwb3J0IElSIChubyBTTU07IG5vdCBuZWVkZWQpICovCisjZGVmaW5lCUlSX0RJU0FCTEUKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3QgY2hhcgloY2RfbmFtZSBbXSA9ICJvaGNpX2hjZCI7CisKKyNpbmNsdWRlICJvaGNpLmgiCisKK3N0YXRpYyB2b2lkIG9oY2lfZHVtcCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgdmVyYm9zZSk7CitzdGF0aWMgaW50IG9oY2lfaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKK3N0YXRpYyB2b2lkIG9oY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKKyNpbmNsdWRlICJvaGNpLWh1Yi5jIgorI2luY2x1ZGUgIm9oY2ktZGJnLmMiCisjaW5jbHVkZSAib2hjaS1tZW0uYyIKKyNpbmNsdWRlICJvaGNpLXEuYyIKKworCisvKgorICogT24gYXJjaGl0ZWN0dXJlcyB3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgd2UgbXVzdCBuZXZlciByZXR1cm4KKyAqIElSUV9OT05FLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU0ExMTExKSAgLyogLi4uIG9yIG90aGVyIGVkZ2UtdHJpZ2dlcmVkIHN5c3RlbXMgKi8KKyNkZWZpbmUgSVJRX05PVE1JTkUJSVJRX0hBTkRMRUQKKyNlbHNlCisjZGVmaW5lIElSUV9OT1RNSU5FCUlSUV9OT05FCisjZW5kaWYKKworCisvKiBTb21lIGJvYXJkcyBtaXNyZXBvcnQgcG93ZXIgc3dpdGNoaW5nL292ZXJjdXJyZW50ICovCitzdGF0aWMgaW50IGRpc3RydXN0X2Zpcm13YXJlID0gMTsKK21vZHVsZV9wYXJhbSAoZGlzdHJ1c3RfZmlybXdhcmUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyAoZGlzdHJ1c3RfZmlybXdhcmUsCisJInRydWUgdG8gZGlzdHJ1c3QgZmlybXdhcmUgcG93ZXIvb3ZlcmN1cnJlbnQgc2V0dXAiKTsKKworLyogU29tZSBib2FyZHMgbGVhdmUgSVIgc2V0IHdyb25nbHksIHNpbmNlIHRoZXkgZmFpbCBCSU9TL1NNTSBoYW5kc2hha2VzICovCitzdGF0aWMgaW50IG5vX2hhbmRzaGFrZSA9IDA7Cittb2R1bGVfcGFyYW0gKG5vX2hhbmRzaGFrZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChub19oYW5kc2hha2UsICJ0cnVlIChub3QgZGVmYXVsdCkgZGlzYWJsZXMgQklPUyBoYW5kc2hha2UiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHF1ZXVlIHVwIGFuIHVyYiBmb3IgYW55dGhpbmcgZXhjZXB0IHRoZSByb290IGh1YgorICovCitzdGF0aWMgaW50IG9oY2lfdXJiX2VucXVldWUgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXJiCSp1cmIsCisJaW50CQltZW1fZmxhZ3MKKykgeworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXN0cnVjdCBlZAkqZWQ7CisJdXJiX3ByaXZfdAkqdXJiX3ByaXY7CisJdW5zaWduZWQgaW50CXBpcGUgPSB1cmItPnBpcGU7CisJaW50CQlpLCBzaXplID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKwkKKyNpZmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKwl1cmJfcHJpbnQgKHVyYiwgIlNVQiIsIHVzYl9waXBlaW4gKHBpcGUpKTsKKyNlbmRpZgorCQorCS8qIGV2ZXJ5IGVuZHBvaW50IGhhcyBhIGVkLCBsb2NhdGUgYW5kIG1heWJlIChyZSlpbml0aWFsaXplIGl0ICovCisJaWYgKCEgKGVkID0gZWRfZ2V0IChvaGNpLCBlcCwgdXJiLT5kZXYsIHBpcGUsIHVyYi0+aW50ZXJ2YWwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBmb3IgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgVVJCIHdlIG5lZWQgdGhlIG51bWJlciBvZiBURHMgKHNpemUpICovCisJc3dpdGNoIChlZC0+dHlwZSkgeworCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCS8qIHRkX3N1Ym1pdF91cmIoKSBkb2Vzbid0IHlldCBoYW5kbGUgdGhlc2UgKi8KKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiA0MDk2KQorCQkJCXJldHVybiAtRU1TR1NJWkU7CisKKwkJCS8qIDEgVEQgZm9yIHNldHVwLCAxIGZvciBBQ0ssIHBsdXMgLi4uICovCisJCQlzaXplID0gMjsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCS8vIGNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCS8vIGNhc2UgUElQRV9CVUxLOgorCQlkZWZhdWx0OgorCQkJLyogb25lIFREIGZvciBldmVyeSA0MDk2IEJ5dGVzIChjYW4gYmUgdXB0byA4SykgKi8KKwkJCXNpemUgKz0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC8gNDA5NjsKKwkJCS8qIC4uLiBhbmQgZm9yIGFueSByZW1haW5pbmcgYnl0ZXMgLi4uICovCisJCQlpZiAoKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIDQwOTYpICE9IDApCisJCQkJc2l6ZSsrOworCQkJLyogLi4uIGFuZCBtYXliZSBhIHplcm8gbGVuZ3RoIHBhY2tldCB0byB3cmFwIGl0IHVwICovCisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCXNpemUrKzsKKwkJCWVsc2UgaWYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKSAhPSAwCisJCQkJJiYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJCQklIHVzYl9tYXhwYWNrZXQgKHVyYi0+ZGV2LCBwaXBlLAorCQkJCQkJdXNiX3BpcGVvdXQgKHBpcGUpKSkgPT0gMCkKKwkJCQlzaXplKys7CisJCQlicmVhazsKKwkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOiAvKiBudW1iZXIgb2YgcGFja2V0cyBmcm9tIFVSQiAqLworCQkJc2l6ZSA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCQlicmVhazsKKwl9CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBVUkIgKi8KKwl1cmJfcHJpdiA9IGttYWxsb2MgKHNpemVvZiAodXJiX3ByaXZfdCkgKyBzaXplICogc2l6ZW9mIChzdHJ1Y3QgdGQgKiksCisJCQltZW1fZmxhZ3MpOworCWlmICghdXJiX3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCAodXJiX3ByaXYsIDAsIHNpemVvZiAodXJiX3ByaXZfdCkgKyBzaXplICogc2l6ZW9mIChzdHJ1Y3QgdGQgKikpOworCUlOSVRfTElTVF9IRUFEICgmdXJiX3ByaXYtPnBlbmRpbmcpOworCXVyYl9wcml2LT5sZW5ndGggPSBzaXplOworCXVyYl9wcml2LT5lZCA9IGVkOwkKKworCS8qIGFsbG9jYXRlIHRoZSBURHMgKGRlZmVycmluZyBoYXNoIGNoYWluIHVwZGF0ZXMpICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQl1cmJfcHJpdi0+dGQgW2ldID0gdGRfYWxsb2MgKG9oY2ksIG1lbV9mbGFncyk7CisJCWlmICghdXJiX3ByaXYtPnRkIFtpXSkgeworCQkJdXJiX3ByaXYtPmxlbmd0aCA9IGk7CisJCQl1cmJfZnJlZV9wcml2IChvaGNpLCB1cmJfcHJpdik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0JCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGRvbid0IHN1Ym1pdCB0byBhIGRlYWQgSEMgKi8KKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGluIGNhc2Ugb2YgdW5saW5rLWR1cmluZy1zdWJtaXQgKi8KKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCQl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIsIE5VTEwpOworCQlyZXR2YWwgPSAwOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogc2NoZWR1bGUgdGhlIGVkIGlmIG5lZWRlZCAqLworCWlmIChlZC0+c3RhdGUgPT0gRURfSURMRSkgeworCQlyZXR2YWwgPSBlZF9zY2hlZHVsZSAob2hjaSwgZWQpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZmFpbDA7CisJCWlmIChlZC0+dHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQl1MTYJZnJhbWUgPSBvaGNpX2ZyYW1lX25vKG9oY2kpOworCisJCQkvKiBkZWxheSBhIGZldyBmcmFtZXMgYmVmb3JlIHRoZSBmaXJzdCBURCAqLworCQkJZnJhbWUgKz0gbWF4X3QgKHUxNiwgOCwgZWQtPmludGVydmFsKTsKKwkJCWZyYW1lICY9IH4oZWQtPmludGVydmFsIC0gMSk7CisJCQlmcmFtZSB8PSBlZC0+YnJhbmNoOworCQkJdXJiLT5zdGFydF9mcmFtZSA9IGZyYW1lOworCisJCQkvKiB5ZXMsIG9ubHkgVVJCX0lTT19BU0FQIGlzIHN1cHBvcnRlZCwgYW5kCisJCQkgKiB1cmItPnN0YXJ0X2ZyYW1lIGlzIG5ldmVyIHVzZWQgYXMgaW5wdXQuCisJCQkgKi8KKwkJfQorCX0gZWxzZSBpZiAoZWQtPnR5cGUgPT0gUElQRV9JU09DSFJPTk9VUykKKwkJdXJiLT5zdGFydF9mcmFtZSA9IGVkLT5sYXN0X2lzbyArIGVkLT5pbnRlcnZhbDsKKworCS8qIGZpbGwgdGhlIFREcyBhbmQgbGluayB0aGVtIHRvIHRoZSBlZDsgYW5kCisJICogZW5hYmxlIHRoYXQgcGFydCBvZiB0aGUgc2NoZWR1bGUsIGlmIG5lZWRlZAorCSAqIGFuZCB1cGRhdGUgY291bnQgb2YgcXVldWVkIHBlcmlvZGljIHVyYnMKKwkgKi8KKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCXRkX3N1Ym1pdF91cmIgKG9oY2ksIHVyYik7CisKK2ZhaWwwOgorCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKK2ZhaWw6CisJaWYgKHJldHZhbCkKKwkJdXJiX2ZyZWVfcHJpdiAob2hjaSwgdXJiX3ByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIGRlY291cGxlIHRoZSBVUkIgZnJvbSB0aGUgSEMgcXVldWVzIChURHMsIHVyYl9wcml2KTsgaXQncworICogYWxyZWFkeSBtYXJrZWQgdXNpbmcgdXJiLT5zdGF0dXMuICByZXBvcnRpbmcgaXMgYWx3YXlzIGRvbmUKKyAqIGFzeW5jaHJvbm91c2x5LCBhbmQgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIHVyYiB0aGF0J3MKKyAqIHBhcnRpYWxseSB0cmFuc2ZlcnJlZCwgb3IgYW4gRUQgd2l0aCBvdGhlciB1cmJzIGJlaW5nIHVubGlua2VkLgorICovCitzdGF0aWMgaW50IG9oY2lfdXJiX2RlcXVldWUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCisjaWZkZWYgT0hDSV9WRVJCT1NFX0RFQlVHCisJdXJiX3ByaW50ICh1cmIsICJVTkxJTksiLCAxKTsKKyNlbmRpZgkJICAKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworIAlpZiAoSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQl1cmJfcHJpdl90ICAqdXJiX3ByaXY7CisKKwkJLyogVW5sZXNzIGFuIElSUSBjb21wbGV0ZWQgdGhlIHVubGluayB3aGlsZSBpdCB3YXMgYmVpbmcKKwkJICogaGFuZGVkIHRvIHVzLCBmbGFnIGl0IGZvciB1bmxpbmsgYW5kIGdpdmViYWNrLCBhbmQgZm9yY2UKKwkJICogc29tZSB1cGNvbWluZyBJTlRSX1NGIHRvIGNhbGwgZmluaXNoX3VubGlua3MoKQorCQkgKi8KKwkJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwkJaWYgKHVyYl9wcml2KSB7CisJCQlpZiAodXJiX3ByaXYtPmVkLT5zdGF0ZSA9PSBFRF9PUEVSKQorCQkJCXN0YXJ0X2VkX3VubGluayAob2hjaSwgdXJiX3ByaXYtPmVkKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIHdpdGggSEMgZGVhZCwgd2Ugd29uJ3QgcmVzcGVjdCBoYyBxdWV1ZSBwb2ludGVycworCQkgKiBhbnkgbW9yZSAuLi4ganVzdCBjbGVhbiB1cCBldmVyeSB1cmIncyBtZW1vcnkuCisJCSAqLworCQlpZiAodXJiLT5oY3ByaXYpCisJCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIsIE5VTEwpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmcmVlcyBjb25maWcvYWx0c2V0dGluZyBzdGF0ZSBmb3IgZW5kcG9pbnRzLAorICogaW5jbHVkaW5nIEVEIG1lbW9yeSwgZHVtbXkgVEQsIGFuZCBidWxrL2ludHIgZGF0YSB0b2dnbGUKKyAqLworCitzdGF0aWMgdm9pZAorb2hjaV9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWQJCSplZCA9IGVwLT5oY3ByaXY7CisJdW5zaWduZWQJCWxpbWl0ID0gMTAwMDsKKworCS8qIEFTU0VSVDogIGFueSByZXF1ZXN0cy91cmJzIGFyZSBiZWluZyB1bmxpbmtlZCAqLworCS8qIEFTU0VSVDogIG5vYm9keSBjYW4gYmUgc3VibWl0dGluZyB1cmJzIGZvciB0aGlzIGFueSBtb3JlICovCisKKwlpZiAoIWVkKQorCQlyZXR1cm47CisKK3Jlc2NhbjoKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCWlmICghSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkpIHsKK3Nhbml0aXplOgorCQllZC0+c3RhdGUgPSBFRF9JRExFOworCQlmaW5pc2hfdW5saW5rcyAob2hjaSwgMCwgTlVMTCk7CisJfQorCisJc3dpdGNoIChlZC0+c3RhdGUpIHsKKwljYXNlIEVEX1VOTElOSzoJCS8qIHdhaXQgZm9yIGh3IHRvIGZpbmlzaD8gKi8KKwkJLyogbWFqb3IgSVJRIGRlbGl2ZXJ5IHRyb3VibGUgbG9zZXMgSU5UUl9TRiB0b28uLi4gKi8KKwkJaWYgKGxpbWl0LS0gPT0gMCkgeworCQkJb2hjaV93YXJuIChvaGNpLCAiSVJRIElOVFJfU0YgbG9zc2FnZVxuIik7CisJCQlnb3RvIHNhbml0aXplOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQgKDEpOworCQlnb3RvIHJlc2NhbjsKKwljYXNlIEVEX0lETEU6CQkvKiBmdWxseSB1bmxpbmtlZCAqLworCQlpZiAobGlzdF9lbXB0eSAoJmVkLT50ZF9saXN0KSkgeworCQkJdGRfZnJlZSAob2hjaSwgZWQtPmR1bW15KTsKKwkJCWVkX2ZyZWUgKG9oY2ksIGVkKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGVsc2UgRkFMTCBUSFJPVUdIICovCisJZGVmYXVsdDoKKwkJLyogY2FsbGVyIHdhcyBzdXBwb3NlZCB0byBoYXZlIHVubGlua2VkIGFueSByZXF1ZXN0czsKKwkJICogdGhhdCdzIG5vdCBvdXIgam9iLiAgY2FuJ3QgcmVjb3ZlcjsgbXVzdCBsZWFrIGVkLgorCQkgKi8KKwkJb2hjaV9lcnIgKG9oY2ksICJsZWFrIGVkICVwICgjJTAyeCkgc3RhdGUgJWQlc1xuIiwKKwkJCWVkLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCBlZC0+c3RhdGUsCisJCQlsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpID8gIiIgOiAiIChoYXMgdGRzKSIpOworCQl0ZF9mcmVlIChvaGNpLCBlZC0+ZHVtbXkpOworCQlicmVhazsKKwl9CisJZXAtPmhjcHJpdiA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJcmV0dXJuIG9oY2lfZnJhbWVfbm8ob2hjaSk7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfdXNiX3Jlc2V0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlvaGNpLT5oY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogSEMgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBpbml0IG1lbW9yeSwgYW5kIGtpY2sgQklPUy9TTU0gb2ZmICovCisKK3N0YXRpYyBpbnQgb2hjaV9pbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJaW50IHJldDsKKworCWRpc2FibGUgKG9oY2kpOworCW9oY2ktPnJlZ3MgPSBvaGNpX3RvX2hjZChvaGNpKS0+cmVnczsKKwlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKKworI2lmbmRlZiBJUl9ESVNBQkxFCisJLyogU01NIG93bnMgdGhlIEhDPyAgbm90IGZvciBsb25nISAqLworCWlmICghbm9faGFuZHNoYWtlICYmIG9oY2lfcmVhZGwgKG9oY2ksCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKSAmIE9IQ0lfQ1RSTF9JUikgeworCQl1MzIgdGVtcDsKKworCQlvaGNpX2RiZyAob2hjaSwgIlVTQiBIQyBUYWtlT3ZlciBmcm9tIEJJT1MvU01NXG4iKTsKKworCQkvKiB0aGlzIHRpbWVvdXQgaXMgYXJiaXRyYXJ5LiAgd2UgbWFrZSBpdCBsb25nLCBzbyBzeXN0ZW1zCisJCSAqIGRlcGVuZGluZyBvbiB1c2Iga2V5Ym9hcmRzIG1heSBiZSB1c2FibGUgZXZlbiBpZiB0aGUKKwkJICogQklPUy9TTU0gY29kZSBzZWVtcyBwcmV0dHkgYnJva2VuLgorCQkgKi8KKwkJdGVtcCA9IDUwMDsJLyogYXJiaXRyYXJ5OiBmaXZlIHNlY29uZHMgKi8KKworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX09DLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX09DUiwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CisJCXdoaWxlIChvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCkgJiBPSENJX0NUUkxfSVIpIHsKKwkJCW1zbGVlcCAoMTApOworCQkJaWYgKC0tdGVtcCA9PSAwKSB7CisJCQkJb2hjaV9lcnIgKG9oY2ksICJVU0IgSEMgdGFrZW92ZXIgZmFpbGVkISIKKwkJCQkJIiAgKEJJT1MvU01NIGJ1ZylcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCX0KKwkJb2hjaV91c2JfcmVzZXQgKG9oY2kpOworCX0KKyNlbmRpZgorCisJLyogRGlzYWJsZSBIQyBpbnRlcnJ1cHRzICovCisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJLy8gZmx1c2ggdGhlIHdyaXRlcworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwlpZiAob2hjaS0+aGNjYSkKKwkJcmV0dXJuIDA7CisKKwlvaGNpLT5oY2NhID0gZG1hX2FsbG9jX2NvaGVyZW50IChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJc2l6ZW9mICpvaGNpLT5oY2NhLCAmb2hjaS0+aGNjYV9kbWEsIDApOworCWlmICghb2hjaS0+aGNjYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoKHJldCA9IG9oY2lfbWVtX2luaXQgKG9oY2kpKSA8IDApCisJCW9oY2lfc3RvcCAob2hjaV90b19oY2Qob2hjaSkpOworCisJcmV0dXJuIHJldDsKKworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTdGFydCBhbiBPSENJIGNvbnRyb2xsZXIsIHNldCB0aGUgQlVTIG9wZXJhdGlvbmFsCisgKiByZXNldHMgVVNCIGFuZCBjb250cm9sbGVyCisgKiBlbmFibGUgaW50ZXJydXB0cyAKKyAqIGNvbm5lY3QgdGhlIHZpcnR1YWwgcm9vdCBodWIKKyAqLworc3RhdGljIGludCBvaGNpX3J1biAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworICAJdTMyCQkJbWFzaywgdGVtcDsKKyAgCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworICAJc3RydWN0IHVzYl9idXMJCSpidXM7CisJaW50CQkJZmlyc3QgPSBvaGNpLT5mbWludGVydmFsID09IDA7CisKKwlkaXNhYmxlIChvaGNpKTsKKworCS8qIGJvb3QgZmlybXdhcmUgc2hvdWxkIGhhdmUgc2V0IHRoaXMgdXAgKDUuMS4xLjMuMSkgKi8KKwlpZiAoZmlyc3QpIHsKKworCQl0ZW1wID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmZtaW50ZXJ2YWwpOworCQlvaGNpLT5mbWludGVydmFsID0gdGVtcCAmIDB4M2ZmZjsKKwkJaWYgKG9oY2ktPmZtaW50ZXJ2YWwgIT0gRkkpCisJCQlvaGNpX2RiZyAob2hjaSwgImZtaW50ZXJ2YWwgZGVsdGEgJWRcbiIsCisJCQkJb2hjaS0+Zm1pbnRlcnZhbCAtIEZJKTsKKwkJb2hjaS0+Zm1pbnRlcnZhbCB8PSBGU01QIChvaGNpLT5mbWludGVydmFsKSA8PCAxNjsKKwkJLyogYWxzbzogcG93ZXIvb3ZlcmN1cnJlbnQgZmxhZ3MgaW4gcm9vdGh1Yi5hICovCisJfQorCisgIAkvKiBSZXNldCBVU0IgbmVhcmx5ICJieSB0aGUgYm9vayIuICBSZW1vdGVXYWtldXBDb25uZWN0ZWQKKwkgKiBzYXZlZCBpZiBib290IGZpcm13YXJlIChCSU9TL1NNTS8uLi4pIHRvbGQgdXMgaXQncyBjb25uZWN0ZWQKKwkgKiAoZm9yIE9IQ0kgaW50ZWdyYXRlZCBvbiBtYWluYm9hcmQsIGl0IG5vcm1hbGx5IGlzKQorCSAqLworCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJb2hjaV9kYmcgKG9oY2ksICJyZXNldHRpbmcgZnJvbSBzdGF0ZSAnJXMnLCBjb250cm9sID0gMHgleFxuIiwKKwkJCWhjZnMyc3RyaW5nIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpLAorCQkJb2hjaS0+aGNfY29udHJvbCk7CisKKwlpZiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9SV0MKKwkJCSYmICEob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRDc1NikpCisJCW9oY2lfdG9faGNkKG9oY2kpLT5jYW5fd2FrZXVwID0gMTsKKworCXN3aXRjaCAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9PUEVSOgorCQl0ZW1wID0gMDsKKwkJYnJlYWs7CisJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCWNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQlvaGNpLT5oY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTVU1FOworCQl0ZW1wID0gMTAgLyogbXNlYyB3YWl0ICovOworCQlicmVhazsKKwkvLyBjYXNlIE9IQ0lfVVNCX1JFU0VUOgorCWRlZmF1bHQ6CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNFVDsKKwkJdGVtcCA9IDUwIC8qIG1zZWMgd2FpdCAqLzsKKwkJYnJlYWs7CisJfQorCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJLy8gZmx1c2ggdGhlIHdyaXRlcworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJbXNsZWVwKHRlbXApOworCXRlbXAgPSByb290aHViX2EgKG9oY2kpOworCWlmICghKHRlbXAgJiBSSF9BX05QUykpIHsKKwkJdW5zaWduZWQgcG9ydHMgPSB0ZW1wICYgUkhfQV9ORFA7IAorCisJCS8qIHBvd2VyIGRvd24gZWFjaCBwb3J0ICovCisJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBwb3J0czsgdGVtcCsrKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX0xTREEsCisJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbdGVtcF0pOworCX0KKwkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCW1lbXNldCAob2hjaS0+aGNjYSwgMCwgc2l6ZW9mIChzdHJ1Y3Qgb2hjaV9oY2NhKSk7CisKKwkvKiAybXNlYyB0aW1lbGltaXQgaGVyZSBtZWFucyBubyBpcnFzL3ByZWVtcHQgKi8KKwlzcGluX2xvY2tfaXJxICgmb2hjaS0+bG9jayk7CisKK3JldHJ5OgorCS8qIEhDIFJlc2V0IHJlcXVpcmVzIG1heCAxMCB1cyBkZWxheSAqLworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0hDUiwgICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOworCXRlbXAgPSAzMDsJLyogLi4uIGFsbG93IGV4dHJhIHRpbWUgKi8KKwl3aGlsZSAoKG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpICYgT0hDSV9IQ1IpICE9IDApIHsKKwkJaWYgKC0tdGVtcCA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwkJCW9oY2lfZXJyIChvaGNpLCAiVVNCIEhDIHJlc2V0IHRpbWVkIG91dCFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXVkZWxheSAoMSk7CisJfQorCisJLyogbm93IHdlJ3JlIGluIHRoZSBTVVNQRU5EIHN0YXRlIC4uLiBtdXN0IGdvIE9QRVJBVElPTkFMCisJICogd2l0aGluIDJtc2VjIGVsc2UgSEMgZW50ZXJzIFJFU1VNRQorCSAqCisJICogLi4uIGJ1dCBzb21lIGhhcmR3YXJlIHdvbid0IGluaXQgZm1JbnRlcnZhbCAiYnkgdGhlIGJvb2siCisJICogKFNpUywgT1BUaSAuLi4pLCBzbyByZXNldCBhZ2FpbiBpbnN0ZWFkLiAgU2lTIGRvZXNuJ3QgbmVlZAorCSAqIHRoaXMgaWYgd2Ugd3JpdGUgZm1JbnRlcnZhbCBhZnRlciB3ZSdyZSBPUEVSQVRJT05BTC4KKwkgKiBVbmNsZWFyIGFib3V0IEFMaSwgU2VydmVyV29ya3MsIGFuZCBvdGhlcnMgLi4uIHRoaXMgY291bGQKKwkgKiBlYXNpbHkgYmUgYSBsb25nc3RhbmRpbmcgYnVnIGluIGNoaXAgaW5pdCBvbiBMaW51eC4KKwkgKi8KKwlpZiAob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0lOSVRSRVNFVCkgeworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKKwkJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjb250cm9sbGVyIHdoZXJlIHRoZSBjb250cm9sIGFuZCBidWxrIGxpc3RzIGFyZQorCSAqIFRoZSBsaXN0cyBhcmUgZW1wdHkgbm93LiAqLworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCisJLyogYSByZXNldCBjbGVhcnMgdGhpcyAqLworCW9oY2lfd3JpdGVsIChvaGNpLCAodTMyKSBvaGNpLT5oY2NhX2RtYSwgJm9oY2ktPnJlZ3MtPmhjY2EpOworCisJcGVyaW9kaWNfcmVpbml0IChvaGNpKTsKKworCS8qIHNvbWUgT0hDSSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZpbmlja3kgYWJvdXQgaG93IHRoZXkgaW5pdC4KKwkgKiBib2d1cyB2YWx1ZXMgaGVyZSBtZWFuIG5vdCBldmVuIGVudW1lcmF0aW9uIGNvdWxkIHdvcmsuCisJICovCisJaWYgKChvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCkgJiAweDNmZmYwMDAwKSA9PSAwCisJCQl8fCAhb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPnBlcmlvZGljc3RhcnQpKSB7CisJCWlmICghKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19JTklUUkVTRVQpKSB7CisJCQlvaGNpLT5mbGFncyB8PSBPSENJX1FVSVJLX0lOSVRSRVNFVDsKKwkJCW9oY2lfZGJnIChvaGNpLCAiZW5hYmxpbmcgaW5pdHJlc2V0IHF1aXJrXG4iKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJCW9oY2lfZXJyIChvaGNpLCAiaW5pdCBlcnIgKCUwOHggJTA0eClcbiIsCisJCQlvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCksCisJCQlvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cGVyaW9kaWNzdGFydCkpOworCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwl9CisKKyAJLyogc3RhcnQgY29udHJvbGxlciBvcGVyYXRpb25zICovCisJb2hjaS0+aGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOworIAlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9VU0JfT1BFUjsKKyAJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJLyogd2FrZSBvbiBDb25uZWN0U3RhdHVzQ2hhbmdlLCBtYXRjaGluZyBleHRlcm5hbCBodWJzICovCisJb2hjaV93cml0ZWwgKG9oY2ksIFJIX0hTX0RSV0UsICZvaGNpLT5yZWdzLT5yb290aHViLnN0YXR1cyk7CisKKwkvKiBDaG9vc2UgdGhlIGludGVycnVwdHMgd2UgY2FyZSBhYm91dCBub3csIG90aGVycyBsYXRlciBvbiBkZW1hbmQgKi8KKwltYXNrID0gT0hDSV9JTlRSX0lOSVQ7CisJb2hjaV93cml0ZWwgKG9oY2ksIG1hc2ssICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgbWFzaywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCisJLyogaGFuZGxlIHJvb3QgaHViIGluaXQgcXVpcmtzIC4uLiAqLworCXRlbXAgPSByb290aHViX2EgKG9oY2kpOworCXRlbXAgJj0gfihSSF9BX1BTTSB8IFJIX0FfT0NQTSk7CisJaWYgKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19TVVBFUklPKSB7CisJCS8qIE5TQyA4NzU2MCBhbmQgbWF5YmUgb3RoZXJzICovCisJCXRlbXAgfD0gUkhfQV9OT0NQOworCQl0ZW1wICY9IH4oUkhfQV9QT1RQR1QgfCBSSF9BX05QUyk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCB0ZW1wLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5hKTsKKwl9IGVsc2UgaWYgKChvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1ENzU2KSB8fCBkaXN0cnVzdF9maXJtd2FyZSkgeworCQkvKiBodWIgcG93ZXIgYWx3YXlzIG9uOyByZXF1aXJlZCBmb3IgQU1ELTc1NiBhbmQgc29tZQorCQkgKiBNYWMgcGxhdGZvcm1zLiAgZ2FuZ2VkIG92ZXJjdXJyZW50IHJlcG9ydGluZywgaWYgYW55LgorCQkgKi8KKwkJdGVtcCB8PSBSSF9BX05QUzsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOworCX0KKwlvaGNpX3dyaXRlbCAob2hjaSwgUkhfSFNfTFBTQywgJm9oY2ktPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgKHRlbXAgJiBSSF9BX05QUykgPyAwIDogUkhfQl9QUENNLAorCQkJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIuYik7CisJLy8gZmx1c2ggdGhvc2Ugd3JpdGVzCisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCXNwaW5fdW5sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCisJLy8gUE9UUEdUIGRlbGF5IGlzIGJpdHMgMjQtMzEsIGluIDIgbXMgdW5pdHMuCisJbWRlbGF5ICgodGVtcCA+PiAyMykgJiAweDFmZSk7CisJYnVzID0gJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmOworCW9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlvaGNpX2R1bXAgKG9oY2ksIDEpOworCisJdWRldiA9IGJ1cy0+cm9vdF9odWI7CisJaWYgKHVkZXYpIHsKKwkJcmV0dXJuIDA7CisJfQorIAorCS8qIGNvbm5lY3QgdGhlIHZpcnR1YWwgcm9vdCBodWIgKi8KKwl1ZGV2ID0gdXNiX2FsbG9jX2RldiAoTlVMTCwgYnVzLCAwKTsKKwlpZiAoIXVkZXYpIHsKKwkJZGlzYWJsZSAob2hjaSk7CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCWlmICh1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViICh1ZGV2LCBvaGNpX3RvX2hjZChvaGNpKSkgIT0gMCkgeworCQl1c2JfcHV0X2RldiAodWRldik7CisJCWRpc2FibGUgKG9oY2kpOworCQlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfSENGUzsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChvaGNpLT5wb3dlcl9idWRnZXQpCisJCWh1Yl9zZXRfcG93ZXJfYnVkZ2V0KHVkZXYsIG9oY2ktPnBvd2VyX2J1ZGdldCk7CisKKwljcmVhdGVfZGVidWdfZmlsZXMgKG9oY2kpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhbiBpbnRlcnJ1cHQgaGFwcGVucyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3Qgb2hjaV9pcnEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXN0cnVjdCBvaGNpX3JlZ3MgX19pb21lbSAqcmVncyA9IG9oY2ktPnJlZ3M7CisgCWludAkJCWludHM7IAorCisJLyogd2UgY2FuIGVsaW1pbmF0ZSBhIChzbG93KSBvaGNpX3JlYWRsKCkKKwkgICBpZiBfb25seV8gV0RIIGNhdXNlZCB0aGlzIGlycSAqLworCWlmICgob2hjaS0+aGNjYS0+ZG9uZV9oZWFkICE9IDApCisJCQkmJiAhIChoYzMyX3RvX2NwdXAgKG9oY2ksICZvaGNpLT5oY2NhLT5kb25lX2hlYWQpCisJCQkJJiAweDAxKSkgeworCQlpbnRzID0gIE9IQ0lfSU5UUl9XREg7CisKKwkvKiBjYXJkYnVzLy4uLiBoYXJkd2FyZSBnb25lIGJlZm9yZSByZW1vdmUoKSAqLworCX0gZWxzZSBpZiAoKGludHMgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+aW50cnN0YXR1cykpID09IH4odTMyKTApIHsKKwkJZGlzYWJsZSAob2hjaSk7CisJCW9oY2lfZGJnIChvaGNpLCAiZGV2aWNlIHJlbW92ZWQhXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJLyogaW50ZXJydXB0IGZvciBzb21lIG90aGVyIGRldmljZT8gKi8KKwl9IGVsc2UgaWYgKChpbnRzICY9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5pbnRyZW5hYmxlKSkgPT0gMCkgeworCQlyZXR1cm4gSVJRX05PVE1JTkU7CisJfSAKKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1VFKSB7CisJCWRpc2FibGUgKG9oY2kpOworCQlvaGNpX2VyciAob2hjaSwgIk9IQ0kgVW5yZWNvdmVyYWJsZSBFcnJvciwgZGlzYWJsZWRcbiIpOworCQkvLyBlLmcuIGR1ZSB0byBQQ0kgTWFzdGVyL1RhcmdldCBBYm9ydAorCisJCW9oY2lfZHVtcCAob2hjaSwgMSk7CisJCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKKwl9CisKKwlpZiAoaW50cyAmIE9IQ0lfSU5UUl9SRCkgeworCQlvaGNpX3ZkYmcgKG9oY2ksICJyZXN1bWUgZGV0ZWN0XG4iKTsKKwkJaWYgKGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfUVVJRVNDSU5HKQorCQkJc2NoZWR1bGVfd29yaygmb2hjaS0+cmhfcmVzdW1lKTsKKwl9CisKKwlpZiAoaW50cyAmIE9IQ0lfSU5UUl9XREgpIHsKKwkJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJkaXNhYmxlKTsJCisJCXNwaW5fbG9jayAoJm9oY2ktPmxvY2spOworCQlkbF9kb25lX2xpc3QgKG9oY2ksIHB0cmVncyk7CisJCXNwaW5fdW5sb2NrICgmb2hjaS0+bG9jayk7CisJCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9XREgsICZyZWdzLT5pbnRyZW5hYmxlKTsgCisJfQorICAKKwkvKiBjb3VsZCB0cmFjayBJTlRSX1NPIHRvIHJlZHVjZSBhdmFpbGFibGUgUENJLy4uLiBiYW5kd2lkdGggKi8KKworCS8qIGhhbmRsZSBhbnkgcGVuZGluZyBVUkIvRUQgdW5saW5rcywgbGVhdmluZyBJTlRSX1NGIGVuYWJsZWQKKwkgKiB3aGVuIHRoZXJlJ3Mgc3RpbGwgdW5saW5raW5nIHRvIGJlIGRvbmUgKG5leHQgZnJhbWUpLgorCSAqLworCXNwaW5fbG9jayAoJm9oY2ktPmxvY2spOworCWlmIChvaGNpLT5lZF9ybV9saXN0KQorCQlmaW5pc2hfdW5saW5rcyAob2hjaSwgb2hjaV9mcmFtZV9ubyhvaGNpKSwgcHRyZWdzKTsKKwlpZiAoKGludHMgJiBPSENJX0lOVFJfU0YpICE9IDAgJiYgIW9oY2ktPmVkX3JtX2xpc3QKKwkJCSYmIEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfU0YsICZyZWdzLT5pbnRyZGlzYWJsZSk7CQorCXNwaW5fdW5sb2NrICgmb2hjaS0+bG9jayk7CisKKwlpZiAoSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlvaGNpX3dyaXRlbCAob2hjaSwgaW50cywgJnJlZ3MtPmludHJzdGF0dXMpOworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJnJlZ3MtPmludHJlbmFibGUpOwkKKwkJLy8gZmx1c2ggdGhvc2Ugd3JpdGVzCisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBvaGNpX3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CQorCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCW9oY2lfZGJnIChvaGNpLCAic3RvcCAlcyBjb250cm9sbGVyIChzdGF0ZSAweCUwMngpXG4iLAorCQloY2ZzMnN0cmluZyAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSwKKwkJaGNkLT5zdGF0ZSk7CisJb2hjaV9kdW1wIChvaGNpLCAxKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlvaGNpX3VzYl9yZXNldCAob2hjaSk7CisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJCisJcmVtb3ZlX2RlYnVnX2ZpbGVzIChvaGNpKTsKKwlvaGNpX21lbV9jbGVhbnVwIChvaGNpKTsKKwlpZiAob2hjaS0+aGNjYSkgeworCQlkbWFfZnJlZV9jb2hlcmVudCAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIAorCQkJCXNpemVvZiAqb2hjaS0+aGNjYSwgCisJCQkJb2hjaS0+aGNjYSwgb2hjaS0+aGNjYV9kbWEpOworCQlvaGNpLT5oY2NhID0gTlVMTDsKKwkJb2hjaS0+aGNjYV9kbWEgPSAwOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9TVVNQRU5EKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKKworc3RhdGljIGludCBvaGNpX3Jlc3RhcnQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlpbnQgdGVtcDsKKwlpbnQgaTsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnByaXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnJvb3QgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1YjsKKworCS8qIG1hcmsgYW55IGRldmljZXMgZ29uZSwgc28gdGhleSBkbyBub3RoaW5nIHRpbGwga2h1YmQgZGlzY29ubmVjdHMuCisJICogcmVjeWNsZSBhbnkgImxpdmUiIGVkcy90ZHMgKGFuZCB1cmJzKSByaWdodCBhd2F5LgorCSAqIGxhdGVyLCBraHViZCBkaXNjb25uZWN0IHByb2Nlc3Npbmcgd2lsbCByZWN5Y2xlIHRoZSBvdGhlciBzdGF0ZSwKKwkgKiAoZWl0aGVyIGFzIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBvciBtYXliZSBzb21lZGF5IGFzIGEgcmVzZXQpLgorCSAqLyAKKwlzcGluX2xvY2tfaXJxKCZvaGNpLT5sb2NrKTsKKwlkaXNhYmxlIChvaGNpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcm9vdC0+bWF4Y2hpbGQ7IGkrKykgeworCQlpZiAocm9vdC0+Y2hpbGRyZW4gW2ldKQorCQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUgKHJvb3QtPmNoaWxkcmVuW2ldLAorCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJfQorCWlmICghbGlzdF9lbXB0eSAoJm9oY2ktPnBlbmRpbmcpKQorCQlvaGNpX2RiZyhvaGNpLCAiYWJvcnQgc2NoZWR1bGUuLi5cbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHByaXYsICZvaGNpLT5wZW5kaW5nLCBwZW5kaW5nKSB7CisJCXN0cnVjdCB1cmIJKnVyYiA9IHByaXYtPnRkWzBdLT51cmI7CisJCXN0cnVjdCBlZAkqZWQgPSBwcml2LT5lZDsKKworCQlzd2l0Y2ggKGVkLT5zdGF0ZSkgeworCQljYXNlIEVEX09QRVI6CisJCQllZC0+c3RhdGUgPSBFRF9VTkxJTks7CisJCQllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyKG9oY2ksIEVEX0RFUVVFVUUpOworCQkJZWRfZGVzY2hlZHVsZSAob2hjaSwgZWQpOworCisJCQllZC0+ZWRfbmV4dCA9IG9oY2ktPmVkX3JtX2xpc3Q7CisJCQllZC0+ZWRfcHJldiA9IE5VTEw7CisJCQlvaGNpLT5lZF9ybV9saXN0ID0gZWQ7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlIEVEX1VOTElOSzoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb2hjaV9kYmcob2hjaSwgImJvZ3VzIGVkICVwIHN0YXRlICVkXG4iLAorCQkJCQllZCwgZWQtPnN0YXRlKTsKKwkJfQorCisJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCXVyYi0+c3RhdHVzID0gLUVTSFVURE9XTjsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCX0KKwlmaW5pc2hfdW5saW5rcyAob2hjaSwgMCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZvaGNpLT5sb2NrKTsKKworCS8qIHBhcmFub2lhLCBpbiBjYXNlIHRoYXQgZGlkbid0IHdvcms6ICovCisKKwkvKiBlbXB0eSB0aGUgaW50ZXJydXB0IGJyYW5jaGVzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9JTlRTOyBpKyspIG9oY2ktPmxvYWQgW2ldID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVFM7IGkrKykgb2hjaS0+aGNjYS0+aW50X3RhYmxlIFtpXSA9IDA7CisJCisJLyogbm8gRURzIHRvIHJlbW92ZSAqLworCW9oY2ktPmVkX3JtX2xpc3QgPSBOVUxMOworCisJLyogZW1wdHkgY29udHJvbCBhbmQgYnVsayBsaXN0cyAqLwkgCisJb2hjaS0+ZWRfY29udHJvbHRhaWwgPSBOVUxMOworCW9oY2ktPmVkX2J1bGt0YWlsICAgID0gTlVMTDsKKworCWlmICgodGVtcCA9IG9oY2lfcnVuIChvaGNpKSkgPCAwKSB7CisJCW9oY2lfZXJyIChvaGNpLCAiY2FuJ3QgcmVzdGFydCwgJWRcbiIsIHRlbXApOworCQlyZXR1cm4gdGVtcDsKKwl9IGVsc2UgeworCQkvKiBoZXJlIHdlICJrbm93IiByb290IHBvcnRzIHNob3VsZCBhbHdheXMgc3RheSBwb3dlcmVkLAorCQkgKiBhbmQgdGhhdCBpZiB3ZSB0cnkgdG8gdHVybiB0aGVtIGJhY2sgb24gdGhlIHJvb3QgaHViCisJCSAqIHdpbGwgcmVzcG9uZCB0byBDU0MgcHJvY2Vzc2luZy4KKwkJICovCisJCWkgPSByb290aHViX2EgKG9oY2kpICYgUkhfQV9ORFA7CisJCXdoaWxlIChpLS0pCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFNTLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKKwkJb2hjaV9kYmcgKG9oY2ksICJyZXN0YXJ0IGNvbXBsZXRlXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSAib2hjaS1wY2kuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NBMTExMQorI2luY2x1ZGUgIm9oY2ktc2ExMTExLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAKKyNpbmNsdWRlICJvaGNpLW9tYXAuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTEg3QTQwNAorI2luY2x1ZGUgIm9oY2ktbGg3YTQwNC5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFhBMjd4CisjaW5jbHVkZSAib2hjaS1weGEyN3guYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NPQ19BVTFYMDAKKyNpbmNsdWRlICJvaGNpLWF1MXh4eC5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MKKyNpbmNsdWRlICJvaGNpLXBwYy1zb2MuYyIKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKENPTkZJR19QQ0kpIFwKKyAgICAgIHx8IGRlZmluZWQoQ09ORklHX1NBMTExMSkgXAorICAgICAgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQKSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfUFhBMjd4KSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfU09DX0FVMVgwMCkgXAorICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DKSBcCisJKQorI2Vycm9yICJtaXNzaW5nIGJ1cyBnbHVlIGZvciBvaGNpLWhjZCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZmM0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKQEAgLTAsMCArMSw2NDMgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqIAorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0IERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgR1BMCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE9IQ0kgUm9vdCBIdWIgLi4uIHRoZSBub25zaGFyYWJsZSBzdHVmZgorICovCisKKyNkZWZpbmUgZGJnX3BvcnQoaGMsbGFiZWwsbnVtLHZhbHVlKSBcCisJb2hjaV9kYmcgKGhjLCBcCisJCSIlcyByb290aHViLnBvcnRzdGF0dXMgWyVkXSAiIFwKKwkJIj0gMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBcCisJCWxhYmVsLCBudW0sIHRlbXAsIFwKKwkJKHRlbXAgJiBSSF9QU19QUlNDKSA/ICIgUFJTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX09DSUMpID8gIiBPQ0lDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QRVNDKSA/ICIgUEVTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX0NTQykgPyAiIENTQyIgOiAiIiwgXAorIAkJXAorCQkodGVtcCAmIFJIX1BTX0xTREEpID8gIiBMU0RBIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFBTKSA/ICIgUFBTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUFJTKSA/ICIgUFJTIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfUE9DSSkgPyAiIFBPQ0kiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QU1MpID8gIiBQU1MiIDogIiIsIFwKKyAJCVwKKwkJKHRlbXAgJiBSSF9QU19QRVMpID8gIiBQRVMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19DQ1MpID8gIiBDQ1MiIDogIiIgXAorCQkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1NVU1BFTkQpIHx8IGRlZmluZWQoQ09ORklHX1BNKQorCisjZGVmaW5lIE9IQ0lfU0NIRURfRU5BQkxFUyBcCisJKE9IQ0lfQ1RSTF9DTEV8T0hDSV9DVFJMX0JMRXxPSENJX0NUUkxfUExFfE9IQ0lfQ1RSTF9JRSkKKworc3RhdGljIHZvaWQgZGxfZG9uZV9saXN0IChzdHJ1Y3Qgb2hjaV9oY2QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitzdGF0aWMgdm9pZCBmaW5pc2hfdW5saW5rcyAoc3RydWN0IG9oY2lfaGNkICosIHUxNiAsIHN0cnVjdCBwdF9yZWdzICopOworc3RhdGljIGludCBvaGNpX3Jlc3RhcnQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSk7CisKK3N0YXRpYyBpbnQgb2hjaV9odWJfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQkJc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgeworCWNhc2UgT0hDSV9VU0JfUkVTVU1FOgorCQlvaGNpX2RiZyAob2hjaSwgInJlc3VtZS9zdXNwZW5kP1xuIik7CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU0VUOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIE9IQ0lfVVNCX1JFU0VUOgorCQlzdGF0dXMgPSAtRUJVU1k7CisJCW9oY2lfZGJnIChvaGNpLCAibmVlZHMgcmVpbml0IVxuIik7CisJCWdvdG8gZG9uZTsKKwljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CisJCW9oY2lfZGJnIChvaGNpLCAiYWxyZWFkeSBzdXNwZW5kZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCW9oY2lfZGJnIChvaGNpLCAic3VzcGVuZCByb290IGh1YlxuIik7CisKKwkvKiBGaXJzdCBzdG9wIGFueSBwcm9jZXNzaW5nICovCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKKwlpZiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfU0NIRURfRU5BQkxFUykgeworCQlpbnQJCWxpbWl0OworCisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfU0NIRURfRU5BQkxFUzsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCisJCS8qIHNjaGVkIGRpc2FibGVzIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IGZyYW1lLAorCQkgKiB0aGVuIHRoZSBsYXN0IFdESCBjb3VsZCB0YWtlIDYrIG1zZWMKKwkJICovCisJCW9oY2lfZGJnIChvaGNpLCAic3RvcHBpbmcgc2NoZWR1bGVzIC4uLlxuIik7CisJCWxpbWl0ID0gMjAwMDsKKwkJd2hpbGUgKGxpbWl0ID4gMCkgeworCQkJdWRlbGF5ICgyNTApOworCQkJbGltaXQgPS0gMjUwOworCQkJaWYgKG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKQorCQkJCQkmIE9IQ0lfSU5UUl9TRikKKwkJCQlicmVhazsKKwkJfQorCQlkbF9kb25lX2xpc3QgKG9oY2ksIE5VTEwpOworCQltZGVsYXkgKDcpOworCX0KKwlkbF9kb25lX2xpc3QgKG9oY2ksIE5VTEwpOworCWZpbmlzaF91bmxpbmtzIChvaGNpLCBvaGNpX2ZyYW1lX25vKG9oY2kpLCBOVUxMKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpLAorCQkJJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCisJLyogbWF5YmUgcmVzdW1lIGNhbiB3YWtlIHJvb3QgaHViICovCisJaWYgKGhjZC0+cmVtb3RlX3dha2V1cCkKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NUUkxfUldFOworCWVsc2UKKwkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX1JXRTsKKworCS8qIFN1c3BlbmQgaHViICovCisJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0hDRlM7CisJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9TVVNQRU5EOworCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCS8qIG5vIHJlc3VtZXMgdW50aWwgZGV2aWNlcyBmaW5pc2ggc3VzcGVuZGluZyAqLworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyAoNSk7CisKK2RvbmU6CisJaWYgKHN0YXR1cyA9PSAwKQorCQloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWQgKmZpbmRfaGVhZCAoc3RydWN0IGVkICplZCkKK3sKKwkvKiBmb3IgYnVsayBhbmQgY29udHJvbCBsaXN0cyAqLworCXdoaWxlIChlZC0+ZWRfcHJldikKKwkJZWQgPSBlZC0+ZWRfcHJldjsKKwlyZXR1cm4gZWQ7Cit9CisKKy8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSByb290IGh1YiAqLworc3RhdGljIGludCBvaGNpX2h1Yl9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXUzMgkJCXRlbXAsIGVuYWJsZXM7CisJaW50CQkJc3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCisJc3Bpbl9sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwlpZiAob2hjaS0+aGNfY29udHJvbCAmIChPSENJX0NUUkxfSVIgfCBPSENJX1NDSEVEX0VOQUJMRVMpKSB7CisJCS8qIHRoaXMgY2FuIGhhcHBlbiBhZnRlciBzdXNwZW5kLXRvLWRpc2sgKi8KKwkJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUkVTVU1JTkcpIHsKKwkJCW9oY2lfZGJnIChvaGNpLCAiQklPUy9TTU0gYWN0aXZlLCBjb250cm9sICUwM3hcbiIsCisJCQkJCW9oY2ktPmhjX2NvbnRyb2wpOworCQkJc3RhdHVzID0gLUVCVVNZOworCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiBwbWNvcmUgcmVzdW1lcyBIQyB0aGVuIHJvb3QgKi8KKwkJfSBlbHNlIHsKKwkJCW9oY2lfZGJnIChvaGNpLCAiZHVwbGljYXRlIHJlc3VtZVxuIik7CisJCQlzdGF0dXMgPSAwOworCQl9CisJfSBlbHNlIHN3aXRjaCAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorCQlvaGNpLT5oY19jb250cm9sICY9IH4oT0hDSV9DVFJMX0hDRlN8T0hDSV9TQ0hFRF9FTkFCTEVTKTsKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNVTUU7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCW9oY2lfZGJnIChvaGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBPSENJX1VTQl9SRVNVTUU6CisJCS8qIEhDRlMgY2hhbmdlcyBzb21ldGltZSBhZnRlciBJTlRSX1JEICovCisJCW9oY2lfaW5mbyAob2hjaSwgIndha2V1cFxuIik7CisJCWJyZWFrOworCWNhc2UgT0hDSV9VU0JfT1BFUjoKKwkJb2hjaV9kYmcgKG9oY2ksICJhbHJlYWR5IHJlc3VtZWRcbiIpOworCQlzdGF0dXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogUkVTRVQsIHdlIGxvc3QgcG93ZXIgKi8KKwkJb2hjaV9kYmcgKG9oY2ksICJyb290IGh1YiBoYXJkd2FyZSByZXNldFxuIik7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJaWYgKHN0YXR1cyA9PSAtRUJVU1kpIHsKKwkJKHZvaWQpIG9oY2lfaW5pdCAob2hjaSk7CisJCXJldHVybiBvaGNpX3Jlc3RhcnQgKG9oY2kpOworCX0KKwlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCXRlbXAgPSByb290aHViX2EgKG9oY2kpICYgUkhfQV9ORFA7CisJZW5hYmxlcyA9IDA7CisJd2hpbGUgKHRlbXAtLSkgeworCQl1MzIgc3RhdCA9IG9oY2lfcmVhZGwgKG9oY2ksCisJCQkJICAgICAgICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKKworCQkvKiBmb3JjZSBnbG9iYWwsIG5vdCBzZWxlY3RpdmUsIHJlc3VtZSAqLworCQlpZiAoIShzdGF0ICYgUkhfUFNfUFNTKSkKKwkJCWNvbnRpbnVlOworCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUE9DSSwKKwkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt0ZW1wXSk7CisJfQorCisJLyogU29tZSBjb250cm9sbGVycyAobHVjZW50IGVycmF0dW0pIG5lZWQgZXh0cmEtbG9uZyBkZWxheXMgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CisJbWRlbGF5ICgyMCAvKiB1c2IgMTEuNS4xLjEwICovICsgMTUpOworCisJdGVtcCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwl0ZW1wICY9IE9IQ0lfQ1RSTF9IQ0ZTOworCWlmICh0ZW1wICE9IE9IQ0lfVVNCX1JFU1VNRSkgeworCQlvaGNpX2VyciAob2hjaSwgImNvbnRyb2xsZXIgd29uJ3QgcmVzdW1lXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBkaXNhYmxlIG9sZCBzY2hlZHVsZSBzdGF0ZSwgcmVpbml0IGZyb20gc2NyYXRjaCAqLworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGN1cnJlbnQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2N1cnJlbnQpOworCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfcGVyaW9kY3VycmVudCk7CisJb2hjaV93cml0ZWwgKG9oY2ksICh1MzIpIG9oY2ktPmhjY2FfZG1hLCAmb2hjaS0+cmVncy0+aGNjYSk7CisKKwkvKiBTb21ldGltZXMgUENJIEQzIHN1c3BlbmQgdHJhc2hlcyBmcmFtZSB0aW1pbmdzIC4uLiAqLworCXBlcmlvZGljX3JlaW5pdCAob2hjaSk7CisKKwkvKiBpbnRlcnJ1cHRzIG1pZ2h0IGhhdmUgYmVlbiBkaXNhYmxlZCAqLworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfSU5JVCwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCWlmIChvaGNpLT5lZF9ybV9saXN0KQorCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1NGLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKSwKKwkJCSZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKworCS8qIFRoZW4gcmUtZW5hYmxlIG9wZXJhdGlvbnMgKi8KKwlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9VU0JfT1BFUiwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJbXNsZWVwICgzKTsKKworCXRlbXAgPSBPSENJX0NPTlRST0xfSU5JVCB8IE9IQ0lfVVNCX09QRVI7CisJaWYgKGhjZC0+Y2FuX3dha2V1cCkKKwkJdGVtcCB8PSBPSENJX0NUUkxfUldDOworCW9oY2ktPmhjX2NvbnRyb2wgPSB0ZW1wOworCW9oY2lfd3JpdGVsIChvaGNpLCB0ZW1wLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCS8qIFRSU01SQ1kgKi8KKwltc2xlZXAgKDEwKTsKKworCS8qIGtlZXAgaXQgYWxpdmUgZm9yIH41eCBzdXNwZW5kICsgcmVzdW1lIGNvc3RzICovCisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICgyNTApOworCisJLyogbWF5YmUgdHVybiBzY2hlZHVsZXMgYmFjayBvbiAqLworCWVuYWJsZXMgPSAwOworCXRlbXAgPSAwOworCWlmICghb2hjaS0+ZWRfcm1fbGlzdCkgeworCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwpIHsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLAorCQkJCQlmaW5kX2hlYWQgKG9oY2ktPmVkX2NvbnRyb2x0YWlsKS0+ZG1hLAorCQkJCQkmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCQkJZW5hYmxlcyB8PSBPSENJX0NUUkxfQ0xFOworCQkJdGVtcCB8PSBPSENJX0NMRjsKKwkJfQorCQlpZiAob2hjaS0+ZWRfYnVsa3RhaWwpIHsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBmaW5kX2hlYWQgKG9oY2ktPmVkX2J1bGt0YWlsKS0+ZG1hLAorCQkJCSZvaGNpLT5yZWdzLT5lZF9idWxraGVhZCk7CisJCQllbmFibGVzIHw9IE9IQ0lfQ1RSTF9CTEU7CisJCQl0ZW1wIHw9IE9IQ0lfQkxGOworCQl9CisJfQorCWlmIChoY2QtPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyB8fCBoY2QtPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzKQorCQllbmFibGVzIHw9IE9IQ0lfQ1RSTF9QTEV8T0hDSV9DVFJMX0lFOworCWlmIChlbmFibGVzKSB7CisJCW9oY2lfZGJnIChvaGNpLCAicmVzdGFydGluZyBzY2hlZHVsZXMgLi4uICUwOHhcbiIsIGVuYWJsZXMpOworCQlvaGNpLT5oY19jb250cm9sIHw9IGVuYWJsZXM7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCWlmICh0ZW1wKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOworCQkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KKworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvaGNpX3JoX3Jlc3VtZSAodm9pZCAqX2hjZCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gX2hjZDsKKworCXVzYl9sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwkodm9pZCkgb2hjaV9odWJfcmVzdW1lIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBvaGNpX3JoX3Jlc3VtZSAodm9pZCAqX2hjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoX2hjZCk7CisJb2hjaV9kYmcob2hjaSwgInJoX3Jlc3VtZSA/P1xuIik7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX1NVU1BFTkQgfHwgQ09ORklHX1BNICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGJ1aWxkICJzdGF0dXMgY2hhbmdlIiBwYWNrZXQgKG9uZSBvciB0d28gYnl0ZXMpIGZyb20gSEMgcmVnaXN0ZXJzICovCisKK3N0YXRpYyBpbnQKK29oY2lfaHViX3N0YXR1c19kYXRhIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlwb3J0cywgaSwgY2hhbmdlZCA9IDAsIGxlbmd0aCA9IDE7CisJaW50CQljYW5fc3VzcGVuZCA9IGhjZC0+Y2FuX3dha2V1cDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwkvKiBoYW5kbGUgYXV0b3N1c3BlbmRlZCByb290OiAgZmluaXNoIHJlc3VtaW5nIGJlZm9yZQorCSAqIGxldHRpbmcga2h1YmQgb3Igcm9vdCBodWIgdGltZXIgc2VlIHN0YXRlIGNoYW5nZXMuCisJICovCisJaWYgKChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpICE9IE9IQ0lfVVNCX09QRVIKKwkJCXx8ICFIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCWNhbl9zdXNwZW5kID0gMDsKKwkJZ290byBkb25lOworCX0KKworCXBvcnRzID0gcm9vdGh1Yl9hIChvaGNpKSAmIFJIX0FfTkRQOyAKKwlpZiAocG9ydHMgPiBNQVhfUk9PVF9QT1JUUykgeworCQlvaGNpX2VyciAob2hjaSwgImJvZ3VzIE5EUD0lZCwgcmVyZWFkcyBhcyBORFA9JWRcbiIsIHBvcnRzLAorCQkJICBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5hKSAmIFJIX0FfTkRQKTsKKwkJLyogcmV0cnkgbGF0ZXI7ICJzaG91bGQgbm90IGhhcHBlbiIgKi8KKwkJZ290byBkb25lOworCX0KKworCS8qIGluaXQgc3RhdHVzICovCisJaWYgKHJvb3RodWJfc3RhdHVzIChvaGNpKSAmIChSSF9IU19MUFNDIHwgUkhfSFNfT0NJQykpCisJCWJ1ZiBbMF0gPSBjaGFuZ2VkID0gMTsKKwllbHNlCisJCWJ1ZiBbMF0gPSAwOworCWlmIChwb3J0cyA+IDcpIHsKKwkJYnVmIFsxXSA9IDA7CisJCWxlbmd0aCsrOworCX0KKworCS8qIGxvb2sgYXQgZWFjaCBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsKKwkJdTMyCXN0YXR1cyA9IHJvb3RodWJfcG9ydHN0YXR1cyAob2hjaSwgaSk7CisKKwkJaWYgKHN0YXR1cyAmIChSSF9QU19DU0MgfCBSSF9QU19QRVNDIHwgUkhfUFNfUFNTQworCQkJCXwgUkhfUFNfT0NJQyB8IFJIX1BTX1BSU0MpKSB7CisJCQljaGFuZ2VkID0gMTsKKwkJCWlmIChpIDwgNykKKwkJCSAgICBidWYgWzBdIHw9IDEgPDwgKGkgKyAxKTsKKwkJCWVsc2UKKwkJCSAgICBidWYgWzFdIHw9IDEgPDwgKGkgLSA3KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY2FuIHN1c3BlbmQgaWYgbm8gcG9ydHMgYXJlIGVuYWJsZWQ7IG9yIGlmIGFsbCBhbGwKKwkJICogZW5hYmxlZCBwb3J0cyBhcmUgc3VzcGVuZGVkIEFORCByZW1vdGUgd2FrZXVwIGlzIG9uLgorCQkgKi8KKwkJaWYgKCEoc3RhdHVzICYgUkhfUFNfQ0NTKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKHN0YXR1cyAmIFJIX1BTX1BTUykgJiYgaGNkLT5yZW1vdGVfd2FrZXVwKQorCQkJY29udGludWU7CisJCWNhbl9zdXNwZW5kID0gMDsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiBzYXZlIHBvd2VyIGJ5IHN1c3BlbmRpbmcgaWRsZSByb290IGh1YnM7CisJICogSU5UUl9SRCB3YWtlcyB1cyB3aGVuIHRoZXJlJ3Mgd29yaworCSAqIE5PVEU6IGlmIHdlIGNhbiBkbyB0aGlzLCB3ZSBkb24ndCBuZWVkIGEgcm9vdCBodWIgdGltZXIhCisJICovCisJaWYgKGNhbl9zdXNwZW5kCisJCQkmJiAhY2hhbmdlZAorCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QKKwkJCSYmICgoT0hDSV9DVFJMX0hDRlMgfCBPSENJX1NDSEVEX0VOQUJMRVMpCisJCQkJCSYgb2hjaS0+aGNfY29udHJvbCkKKwkJCQk9PSBPSENJX1VTQl9PUEVSCisJCQkmJiB0aW1lX2FmdGVyIChqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKQorCQkJJiYgdXNiX3RyeWxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpCisJCQkpIHsKKwkJb2hjaV92ZGJnIChvaGNpLCAiYXV0b3N1c3BlbmRcbiIpOworCQkodm9pZCkgb2hjaV9odWJfc3VzcGVuZCAoaGNkKTsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIGNoYW5nZWQgPyBsZW5ndGggOiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorb2hjaV9odWJfZGVzY3JpcHRvciAoCisJc3RydWN0IG9oY2lfaGNkCQkJKm9oY2ksCisJc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcgkqZGVzYworKSB7CisJdTMyCQlyaCA9IHJvb3RodWJfYSAob2hjaSk7CisJaW50CQlwb3J0cyA9IHJoICYgUkhfQV9ORFA7IAorCXUxNgkJdGVtcDsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAocmggJiBSSF9BX1BPVFBHVCkgPj4gMjQ7CisJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisKKwlkZXNjLT5iTmJyUG9ydHMgPSBwb3J0czsKKwl0ZW1wID0gMSArIChwb3J0cyAvIDgpOworCWRlc2MtPmJEZXNjTGVuZ3RoID0gNyArIDIgKiB0ZW1wOworCisJdGVtcCA9IDA7CisJaWYgKHJoICYgUkhfQV9OUFMpCQkvKiBubyBwb3dlciBzd2l0Y2hpbmc/ICovCisJICAgIHRlbXAgfD0gMHgwMDAyOworCWlmIChyaCAmIFJIX0FfUFNNKSAJCS8qIHBlci1wb3J0IHBvd2VyIHN3aXRjaGluZz8gKi8KKwkgICAgdGVtcCB8PSAweDAwMDE7CisJaWYgKHJoICYgUkhfQV9OT0NQKQkJLyogbm8gb3ZlcmN1cnJlbnQgcmVwb3J0aW5nPyAqLworCSAgICB0ZW1wIHw9IDB4MDAxMDsKKwllbHNlIGlmIChyaCAmIFJIX0FfT0NQTSkJLyogcGVyLXBvcnQgb3ZlcmN1cnJlbnQgcmVwb3J0aW5nPyAqLworCSAgICB0ZW1wIHw9IDB4MDAwODsKKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gKF9fZm9yY2UgX191MTYpY3B1X3RvX2hjMTYob2hjaSwgdGVtcCk7CisKKwkvKiB0d28gYml0bWFwczogIHBvcnRzIHJlbW92YWJsZSwgYW5kIHVzYiAxLjAgbGVnYWN5IFBvcnRQd3JDdHJsTWFzayAqLworCXJoID0gcm9vdGh1Yl9iIChvaGNpKTsKKwlkZXNjLT5iaXRtYXAgWzBdID0gcmggJiBSSF9CX0RSOworCWlmIChwb3J0cyA+IDcpIHsKKwkJZGVzYy0+Yml0bWFwIFsxXSA9IChyaCAmIFJIX0JfRFIpID4+IDg7CisJCWRlc2MtPmJpdG1hcCBbMl0gPSBkZXNjLT5iaXRtYXAgWzNdID0gMHhmZjsKKwl9IGVsc2UKKwkJZGVzYy0+Yml0bWFwIFsxXSA9IDB4ZmY7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfVVNCX09URworCitzdGF0aWMgaW50IG9oY2lfc3RhcnRfcG9ydF9yZXNldCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdW5zaWduZWQgcG9ydCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwl1MzIJCQlzdGF0dXM7CisKKwlpZiAoIXBvcnQpCisJCXJldHVybiAtRUlOVkFMOworCXBvcnQtLTsKKworCS8qIHN0YXJ0IHBvcnQgcmVzZXQgYmVmb3JlIEhOUCBwcm90b2NvbCB0aW1lcyBvdXQgKi8KKwlzdGF0dXMgPSBvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3BvcnRdKTsKKwlpZiAoIShzdGF0dXMgJiBSSF9QU19DQ1MpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGtodWJkIHdpbGwgZmluaXNoIHRoZSByZXNldCBsYXRlciAqLworCW9oY2lfd3JpdGVsKG9oY2ksIFJIX1BTX1BSUywgJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbcG9ydF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9obnAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKKworI2Vsc2UKKworI2RlZmluZQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQJCU5VTEwKKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyogU2VlIHVzYiA3LjEuNy41OiAgcm9vdCBodWJzIG11c3QgaXNzdWUgYXQgbGVhc3QgNTAgbXNlYyByZXNldCBzaWduYWxpbmcsCisgKiBub3QgbmVjZXNzYXJpbHkgY29udGludW91cyAuLi4gdG8gZ3VhcmQgYWdhaW5zdCByZXN1bWUgc2lnbmFsaW5nLgorICogVGhlIHNob3J0IHRpbWVvdXQgaXMgc2FmZSBmb3Igbm9uLXJvb3QgaHVicywgYW5kIGlzIGJhY2t3YXJkLWNvbXBhdGlibGUKKyAqIHdpdGggZWFybGllciBMaW51eCBob3N0cy4KKyAqLworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorI2RlZmluZQlQT1JUX1JFU0VUX01TRUMJCTUwCisjZWxzZQorI2RlZmluZQlQT1JUX1JFU0VUX01TRUMJCTEwCisjZW5kaWYKKworLyogdGhpcyB0aW1lciB2YWx1ZSBtaWdodCBiZSB2ZW5kb3Itc3BlY2lmaWMgLi4uICovCisjZGVmaW5lCVBPUlRfUkVTRVRfSFdfTVNFQwkxMAorCisvKiB3cmFwLWF3YXJlIGxvZ2ljIG1vcnBoZWQgZnJvbSA8bGludXgvamlmZmllcy5oPiAqLworI2RlZmluZSB0aWNrX2JlZm9yZSh0MSx0MikgKChzMTYpKCgoczE2KSh0MSkpLSgoczE2KSh0MikpKSA8IDApCisKKy8qIGNhbGxlZCBmcm9tIHNvbWUgdGFzaywgbm9ybWFsbHkga2h1YmQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByb290X3BvcnRfcmVzZXQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgdW5zaWduZWQgcG9ydCkKK3sKKwlfX2hjMzIgX19pb21lbSAqcG9ydHN0YXQgPSAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFtwb3J0XTsKKwl1MzIJdGVtcDsKKwl1MTYJbm93ID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+Zm1udW1iZXIpOworCXUxNglyZXNldF9kb25lID0gbm93ICsgUE9SVF9SRVNFVF9NU0VDOworCisJLyogYnVpbGQgYSAiY29udGludW91cyBlbm91Z2giIHJlc2V0IHNpZ25hbCwgd2l0aCB1cCB0bworCSAqIDNtc2VjIGdhcCBiZXR3ZWVuIHB1bHNlcy4gIHNjaGVkdWxlciBIWj09MTAwIG11c3Qgd29yazsKKwkgKiB0aGlzIG1pZ2h0IG5lZWQgdG8gYmUgZGVhZGxpbmUtc2NoZWR1bGVkLgorCSAqLworCWRvIHsKKwkJLyogc3BpbiB1bnRpbCBhbnkgY3VycmVudCByZXNldCBmaW5pc2hlcyAqLworCQlmb3IgKDs7KSB7CisJCQl0ZW1wID0gb2hjaV9yZWFkbCAob2hjaSwgcG9ydHN0YXQpOworCQkJaWYgKCEodGVtcCAmIFJIX1BTX1BSUykpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkgKDUwMCk7CisJCX0gCisKKwkJaWYgKCEodGVtcCAmIFJIX1BTX0NDUykpCisJCQlicmVhazsKKwkJaWYgKHRlbXAgJiBSSF9QU19QUlNDKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BSU0MsIHBvcnRzdGF0KTsKKworCQkvKiBzdGFydCB0aGUgbmV4dCByZXNldCwgc2xlZXAgdGlsbCBpdCdzIHByb2JhYmx5IGRvbmUgKi8KKwkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BSUywgcG9ydHN0YXQpOworCQltc2xlZXAoUE9SVF9SRVNFVF9IV19NU0VDKTsKKwkJbm93ID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+Zm1udW1iZXIpOworCX0gd2hpbGUgKHRpY2tfYmVmb3JlKG5vdywgcmVzZXRfZG9uZSkpOworCS8qIGNhbGxlciBzeW5jaHJvbml6ZXMgdXNpbmcgUFJTQyAqLworfQorCitzdGF0aWMgaW50IG9oY2lfaHViX2NvbnRyb2wgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJdTE2CQl0eXBlUmVxLAorCXUxNgkJd1ZhbHVlLAorCXUxNgkJd0luZGV4LAorCWNoYXIJCSpidWYsCisJdTE2CQl3TGVuZ3RoCispIHsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXBvcnRzID0gaGNkX3RvX2J1cyAoaGNkKS0+cm9vdF9odWItPm1heGNoaWxkOworCXUzMgkJdGVtcDsKKwlpbnQJCXJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfSFNfT0NJQywKKwkJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXRlbXAgPSBSSF9QU19DQ1M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJdGVtcCA9IFJIX1BTX1BFU0M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQl0ZW1wID0gUkhfUFNfUE9DSTsKKwkJCWlmICgob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKQorCQkJCQkhPSBPSENJX1VTQl9PUEVSKQorCQkJCXNjaGVkdWxlX3dvcmsgKCZvaGNpLT5yaF9yZXN1bWUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQl0ZW1wID0gUkhfUFNfUFNTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQl0ZW1wID0gUkhfUFNfTFNEQTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCQkJdGVtcCA9IFJIX1BTX0NTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisJCQl0ZW1wID0gUkhfUFNfT0NJQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCXRlbXAgPSBSSF9QU19QUlNDOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCW9oY2lfd3JpdGVsIChvaGNpLCB0ZW1wLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3dJbmRleF0pOworCQkvLyBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt3SW5kZXhdKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlvaGNpX2h1Yl9kZXNjcmlwdG9yIChvaGNpLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJdGVtcCA9IHJvb3RodWJfc3RhdHVzIChvaGNpKSAmIH4oUkhfSFNfQ1JXRSB8IFJIX0hTX0RSV0UpOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMiAodGVtcCk7CisJCWJyZWFrOworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKwkJdGVtcCA9IHJvb3RodWJfcG9ydHN0YXR1cyAob2hjaSwgd0luZGV4KTsKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIgKHRlbXApOworCisjaWZuZGVmCU9IQ0lfVkVSQk9TRV9ERUJVRworCWlmICgqKHUxNiopKGJ1ZisyKSkJLyogb25seSBpZiB3UG9ydENoYW5nZSBpcyBpbnRlcmVzdGluZyAqLworI2VuZGlmCisJCWRiZ19wb3J0IChvaGNpLCAiR2V0U3RhdHVzIiwgd0luZGV4LCB0ZW1wKTsKKwkJYnJlYWs7CisJY2FzZSBTZXRIdWJGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJCS8vIEZJWE1FOiAgdGhpcyBjYW4gYmUgY2xlYXJlZCwgeWVzPworCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorI2lmZGVmCUNPTkZJR19VU0JfT1RHCisJCQlpZiAoaGNkLT5zZWxmLm90Z19wb3J0ID09ICh3SW5kZXggKyAxKQorCQkJCQkmJiBoY2QtPnNlbGYuYl9obnBfZW5hYmxlKQorCQkJCXN0YXJ0X2hucChvaGNpKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJb2hjaV93cml0ZWwgKG9oY2ksIFJIX1BTX1BTUywKKwkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFBTLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3dJbmRleF0pOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCXJvb3RfcG9ydF9yZXNldCAob2hjaSwgd0luZGV4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CitlcnJvcjoKKwkJLyogInByb3RvY29sIHN0YWxsIiBvbiBlcnJvciAqLworCQlyZXR2YWwgPSAtRVBJUEU7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzYyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogQnVzIEdsdWUgZm9yIFNoYXJwIExIN0E0MDQKKyAqCisgKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiBwcmV2aW91cyBkcml2ZXIgYnkgUnVzZWxsIEtpbmcgZXQgYWwuCisgKgorICogTW9kaWZpZWQgZm9yIExIN0E0MDQgZnJvbSBvaGNpLXNhMTExMS5jCisgKiAgYnkgRHVyZ2VzaCBQYXR0YW1hdHRhIDxwYXR0YW1hdHRhZEBzaGFycHNlYy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworCitleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgbGg3YTQwNF9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkgICAgICAgIjogc3RhcnRpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCS8qCisJICogTm93LCBjYXJlZnVsbHkgZW5hYmxlIHRoZSBVU0IgY2xvY2ssIGFuZCB0YWtlCisJICogdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgb3V0IG9mIHJlc2V0LgorCSAqLworCUNTQ19QV1JDTlQgfD0gQ1NDX1BXUkNOVF9VU0JIX0VOOyAvKiBFbmFibGUgY2xvY2sgKi8KKwl1ZGVsYXkoMTAwMCk7CisJVVNCSF9DTURTVEFUVVMgPSBPSENJX0hDUjsKKwkKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCQkgICAiOiBDbG9jayB0byBVU0IgaG9zdCBoYXMgYmVlbiBlbmFibGVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MDRfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KKwkgICAgICAgIjogc3RvcHBpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCUNTQ19QV1JDTlQgJj0gfkNTQ19QV1JDTlRfVVNCSF9FTjsgLyogRGlzYWJsZSBjbG9jayAqLworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKworLyoqCisgKiB1c2JfaGNkX2xoN2E0MDRfcHJvYmUgLSBpbml0aWFsaXplIExIN0E0MDQtYmFzZWQgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKgorICovCitpbnQgdXNiX2hjZF9saDdhNDA0X3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwlpZiAoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcl9kZWJ1ZygicmVzb3VyY2VbMV0gaXMgbm90IElPUkVTT1VSQ0VfSVJRIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJmRldi0+ZGV2LCAibGg3YTQwNCIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCQorCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlwcl9kZWJ1ZygiaW9yZW1hcCBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWxoN2E0MDRfc3RhcnRfaGMoZGV2KTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWxoN2E0MDRfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX2xoN2E0MDRfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgTEg3QTQwNC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9saDdhNDA0X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9saDdhNDA0X3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJbGg3YTQwNF9zdG9wX2hjKGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX2xoN2E0MDRfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlvaGNpX2RiZyAob2hjaSwgIm9oY2lfbGg3YTQwNF9zdGFydCwgb2hjaTolcCIsIG9oY2kpOworCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfcnVuIChvaGNpKSkgPCAwKSB7CisJCWVyciAoImNhbid0IHN0YXJ0ICVzIiwgaGNkLT5zZWxmLmJ1c19uYW1lKTsKKwkJb2hjaV9zdG9wIChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9saDdhNDA0X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiTEg3QTQwNCBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9saDdhNDA0X3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS8qIHN1c3BlbmQ6CQlvaGNpX2xoN2E0MDRfc3VzcGVuZCwgIC0tIHRiZCAqLworCS8qIHJlc3VtZToJCW9oY2lfbGg3YTQwNF9yZXN1bWUsICAgLS0gdGJkICovCisjZW5kaWYgLypDT05GSUdfUE0qLworCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUiKTsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX2xoN2E0MDRfcHJvYmUoJm9oY2lfbGg3YTQwNF9oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9saDdhNDA0X3JlbW92ZShoY2QsIHBkZXYpOworCXJldHVybiAwOworfQorCS8qVEJEKi8KKy8qc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCisJcmV0dXJuIDA7Cit9CisqLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImxoN2E0MDQtb2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlLAorCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kLCAqLworCS8qLnJlc3VtZQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZSwgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2xoN2E0MDRfaW5pdCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoRFJJVkVSX0lORk8gIiAoTEg3QTQwNCkiKTsKKwlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfbGg3YTQwNF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9saDdhNDA0X2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX2xoN2E0MDRfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1NjgyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICogCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVyZSdzIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBtZW1vcnk6CisgKgktIGRhdGEgdXNlZCBvbmx5IGJ5IHRoZSBIQ0QgLi4uIGttYWxsb2MgaXMgZmluZQorICoJLSBhc3luYyBhbmQgcGVyaW9kaWMgc2NoZWR1bGVzLCBzaGFyZWQgYnkgSEMgYW5kIEhDRCAuLi4gdGhlc2UKKyAqCSAgbmVlZCB0byB1c2UgZG1hX3Bvb2wgb3IgZG1hX2FsbG9jX2NvaGVyZW50CisgKgktIGRyaXZlciBidWZmZXJzLCByZWFkL3dyaXR0ZW4gYnkgSEMgLi4uIHRoZSBoY2QgZ2x1ZSBvciB0aGUKKyAqCSAgZGV2aWNlIGRyaXZlciBwcm92aWRlcyB1cyB3aXRoIGRtYSBhZGRyZXNzZXMKKyAqCisgKiBUaGVyZSdzIGFsc28gUENJICJyZWdpc3RlciIgZGF0YSwgd2hpY2ggaXMgbWVtb3J5IG1hcHBlZC4KKyAqIE5vIG1lbW9yeSBzZWVuIGJ5IHRoaXMgZHJpdmVyIGlzIHBhZ2FibGUuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgb2hjaV9oY2RfaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCXNwaW5fbG9ja19pbml0ICgmb2hjaS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQgKCZvaGNpLT5wZW5kaW5nKTsKKwlJTklUX1dPUksgKCZvaGNpLT5yaF9yZXN1bWUsIG9oY2lfcmhfcmVzdW1lLCBvaGNpX3RvX2hjZChvaGNpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9tZW1faW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCW9oY2ktPnRkX2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlICgib2hjaV90ZCIsCisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCXNpemVvZiAoc3RydWN0IHRkKSwKKwkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKi8sCisJCTAgLyogbm8gcGFnZS1jcm9zc2luZyBpc3N1ZXMgKi8pOworCWlmICghb2hjaS0+dGRfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCW9oY2ktPmVkX2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlICgib2hjaV9lZCIsCisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCXNpemVvZiAoc3RydWN0IGVkKSwKKwkJMTYgLyogYnl0ZSBhbGlnbm1lbnQgKi8sCisJCTAgLyogbm8gcGFnZS1jcm9zc2luZyBpc3N1ZXMgKi8pOworCWlmICghb2hjaS0+ZWRfY2FjaGUpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSAob2hjaS0+dGRfY2FjaGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfbWVtX2NsZWFudXAgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlpZiAob2hjaS0+dGRfY2FjaGUpIHsKKwkJZG1hX3Bvb2xfZGVzdHJveSAob2hjaS0+dGRfY2FjaGUpOworCQlvaGNpLT50ZF9jYWNoZSA9IE5VTEw7CisJfQorCWlmIChvaGNpLT5lZF9jYWNoZSkgeworCQlkbWFfcG9vbF9kZXN0cm95IChvaGNpLT5lZF9jYWNoZSk7CisJCW9oY2ktPmVkX2NhY2hlID0gTlVMTDsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIG9oY2kgImRvbmUgbGlzdCIgcHJvY2Vzc2luZyBuZWVkcyB0aGlzIG1hcHBpbmcgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRkICoKK2RtYV90b190ZCAoc3RydWN0IG9oY2lfaGNkICpoYywgZG1hX2FkZHJfdCB0ZF9kbWEpCit7CisJc3RydWN0IHRkICp0ZDsKKworCXRkX2RtYSAmPSBURF9NQVNLOworCXRkID0gaGMtPnRkX2hhc2ggW1REX0hBU0hfRlVOQyh0ZF9kbWEpXTsKKwl3aGlsZSAodGQgJiYgdGQtPnRkX2RtYSAhPSB0ZF9kbWEpCisJCXRkID0gdGQtPnRkX2hhc2g7CisJcmV0dXJuIHRkOworfQorCisvKiBURHMgLi4uICovCitzdGF0aWMgc3RydWN0IHRkICoKK3RkX2FsbG9jIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBpbnQgbWVtX2ZsYWdzKQoreworCWRtYV9hZGRyX3QJZG1hOworCXN0cnVjdCB0ZAkqdGQ7CisKKwl0ZCA9IGRtYV9wb29sX2FsbG9jIChoYy0+dGRfY2FjaGUsIG1lbV9mbGFncywgJmRtYSk7CisJaWYgKHRkKSB7CisJCS8qIGluIGNhc2UgaGMgZmV0Y2hlcyBpdCwgbWFrZSBpdCBsb29rIGRlYWQgKi8KKwkJbWVtc2V0ICh0ZCwgMCwgc2l6ZW9mICp0ZCk7CisJCXRkLT5od05leHRURCA9IGNwdV90b19oYzMyIChoYywgZG1hKTsKKwkJdGQtPnRkX2RtYSA9IGRtYTsKKwkJLyogaGFzaGVkIGluIHRkX2ZpbGwgKi8KKwl9CisJcmV0dXJuIHRkOworfQorCitzdGF0aWMgdm9pZAordGRfZnJlZSAoc3RydWN0IG9oY2lfaGNkICpoYywgc3RydWN0IHRkICp0ZCkKK3sKKwlzdHJ1Y3QgdGQJKipwcmV2ID0gJmhjLT50ZF9oYXNoIFtURF9IQVNIX0ZVTkMgKHRkLT50ZF9kbWEpXTsKKworCXdoaWxlICgqcHJldiAmJiAqcHJldiAhPSB0ZCkKKwkJcHJldiA9ICYoKnByZXYpLT50ZF9oYXNoOworCWlmICgqcHJldikKKwkJKnByZXYgPSB0ZC0+dGRfaGFzaDsKKwllbHNlIGlmICgodGQtPmh3SU5GTyAmIGNwdV90b19oYzMyKGhjLCBURF9ET05FKSkgIT0gMCkKKwkJb2hjaV9kYmcgKGhjLCAibm8gaGFzaCBmb3IgdGQgJXBcbiIsIHRkKTsKKwlkbWFfcG9vbF9mcmVlIChoYy0+dGRfY2FjaGUsIHRkLCB0ZC0+dGRfZG1hKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRURzIC4uLiAqLworc3RhdGljIHN0cnVjdCBlZCAqCitlZF9hbGxvYyAoc3RydWN0IG9oY2lfaGNkICpoYywgaW50IG1lbV9mbGFncykKK3sKKwlkbWFfYWRkcl90CWRtYTsKKwlzdHJ1Y3QgZWQJKmVkOworCisJZWQgPSBkbWFfcG9vbF9hbGxvYyAoaGMtPmVkX2NhY2hlLCBtZW1fZmxhZ3MsICZkbWEpOworCWlmIChlZCkgeworCQltZW1zZXQgKGVkLCAwLCBzaXplb2YgKCplZCkpOworCQlJTklUX0xJU1RfSEVBRCAoJmVkLT50ZF9saXN0KTsKKwkJZWQtPmRtYSA9IGRtYTsKKwl9CisJcmV0dXJuIGVkOworfQorCitzdGF0aWMgdm9pZAorZWRfZnJlZSAoc3RydWN0IG9oY2lfaGNkICpoYywgc3RydWN0IGVkICplZCkKK3sKKwlkbWFfcG9vbF9mcmVlIChoYy0+ZWRfY2FjaGUsIGVkLCBlZC0+ZG1hKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyODVmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTAsMCArMSw1NjAgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDUgRGF2aWQgQnJvd25lbGwKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICogCisgKiBPTUFQIEJ1cyBHbHVlCisgKgorICogTW9kaWZpZWQgZm9yIE9NQVAgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqIEJhc2VkIG9uIHRoZSAyLjQgT01BUCBPSENJIGRyaXZlciBvcmlnaW5hbGx5IGRvbmUgYnkgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBhbmQgb24gb2hjaS1zYTExMTEuYyBieSBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorCisKKy8qIE9NQVAtMTUxMCBPSENJIGhhcyBpdHMgb3duIE1NVSBmb3IgRE1BICovCisjZGVmaW5lIE9NQVAxNTEwX0xCX01FTVNJWkUJMzIJLyogU2hvdWxkIGJlIHNhbWUgYXMgU0RSQU0gc2l6ZSAqLworI2RlZmluZSBPTUFQMTUxMF9MQl9DTE9DS19ESVYJMHhmZmZlYzEwYworI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfQ1RMCTB4ZmZmZWMyMDgKKyNkZWZpbmUgT01BUDE1MTBfTEJfTU1VX0xDSwkweGZmZmVjMjI0CisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9MRF9UTEIJMHhmZmZlYzIyOAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfQ0FNX0gJMHhmZmZlYzIyYworI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfQ0FNX0wJMHhmZmZlYzIzMAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfUkFNX0gJMHhmZmZlYzIzNAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfUkFNX0wJMHhmZmZlYzIzOAorCisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUAorI2Vycm9yICJUaGlzIGZpbGUgaXMgT01BUCBidXMgZ2x1ZS4gIENPTkZJR19PTUFQIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UUFM2NTAxMAorI2luY2x1ZGUgPGFzbS9hcmNoL3RwczY1MDEwLmg+CisjZWxzZQorCisjZGVmaW5lIExPVwkwCisjZGVmaW5lIEhJR0gJMQorCisjZGVmaW5lIEdQSU8xCTEKKworc3RhdGljIGlubGluZSBpbnQgdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIHZhbHVlKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7CitleHRlcm4gaW50IG9jcGlfZW5hYmxlKHZvaWQpOworCitzdGF0aWMgc3RydWN0IGNsayAqdXNiX2hvc3RfY2s7CisKK3N0YXRpYyB2b2lkIG9tYXBfb2hjaV9jbG9ja19wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCWNsa19lbmFibGUodXNiX2hvc3RfY2spOworCQkvKiBndWVzc3RpbWF0ZSBmb3IgVDUgPT0gMXggMzJLIGNsb2NrICsgQVBMTCBsb2NrIHRpbWUgKi8KKwkJdWRlbGF5KDEwMCk7CisJfSBlbHNlIHsKKwkJY2xrX2Rpc2FibGUodXNiX2hvc3RfY2spOworCX0KK30KKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGdhbmctc3dpdGNoZWQgdHJhbnNjZWl2ZXIgcG93ZXIgb24vb2ZmLgorICogTk9URTogIE9TSyBzdXBwbGllcyBwb3dlciBmcm9tIERDLCBub3QgYmF0dGVyeS4KKyAqLworc3RhdGljIGludCBvbWFwX29oY2lfdHJhbnNjZWl2ZXJfcG93ZXIoaW50IG9uKQoreworCWlmIChvbikgeworCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpICYmIGNwdV9pc19vbWFwMTUxMCgpKQorCQkJZnBnYV93cml0ZShmcGdhX3JlYWQoSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKQorCQkJCXwgKCgxIDw8IDUvKnVzYjEqLykgfCAoMSA8PCAzLyp1c2IyKi8pKSwgCisJCQkgICAgICAgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKTsKKwkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQorCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8xLCBMT1cpOworCX0gZWxzZSB7CisJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpCisJCQlmcGdhX3dyaXRlKGZwZ2FfcmVhZChJTk5PVkFUT1JfRlBHQV9DQU1fVVNCX0NPTlRST0wpCisJCQkJJiB+KCgxIDw8IDUvKnVzYjEqLykgfCAoMSA8PCAzLyp1c2IyKi8pKSwgCisJCQkgICAgICAgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKTsKKwkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQorCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8xLCBISUdIKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9NQVAtMTUxMCBzcGVjaWZpYyBMb2NhbCBCdXMgY2xvY2sgb24vb2ZmCisgKi8KK3N0YXRpYyBpbnQgb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCW9tYXBfd3JpdGVsKCgxIDw8IDEpIHwgKDEgPDwgMCksIE9NQVAxNTEwX0xCX01NVV9DVEwpOworCQl1ZGVsYXkoMjAwKTsKKwl9IGVsc2UgeworCQlvbWFwX3dyaXRlbCgwLCBPTUFQMTUxMF9MQl9NTVVfQ1RMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9NQVAtMTUxMCBzcGVjaWZpYyBMb2NhbCBCdXMgaW5pdGlhbGl6YXRpb24KKyAqIE5PVEU6IFRoaXMgYXNzdW1lcyAzMk1CIG1lbW9yeSBzaXplIGluIE9NQVAxNTEwTEJfTUVNU0laRS4KKyAqICAgICAgIFNlZSBhbHNvIGFyY2gvbWFjaC1vbWFwL21lbW9yeS5oIGZvciBfX3ZpcnRfdG9fZG1hKCkgYW5kIAorICogICAgICAgX19kbWFfdG9fdmlydCgpIHdoaWNoIG5lZWQgdG8gbWF0Y2ggd2l0aCB0aGUgcGh5c2ljYWwgCisgKiAgICAgICBMb2NhbCBCdXMgYWRkcmVzcyBiZWxvdy4KKyAqLworc3RhdGljIGludCBvbWFwXzE1MTBfbG9jYWxfYnVzX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGxiOworCXVuc2lnbmVkIGxvbmcgbGJhZGRyLCBwaHlzYWRkcjsKKworCW9tYXBfd3JpdGVsKChvbWFwX3JlYWRsKE9NQVAxNTEwX0xCX0NMT0NLX0RJVikgJiAweGZmZmZmZmY4KSB8IDB4NCwgCisJICAgICAgIE9NQVAxNTEwX0xCX0NMT0NLX0RJVik7CisKKwkvKiBDb25maWd1cmUgdGhlIExvY2FsIEJ1cyBNTVUgdGFibGUgKi8KKwlmb3IgKHRsYiA9IDA7IHRsYiA8IE9NQVAxNTEwX0xCX01FTVNJWkU7IHRsYisrKSB7CisJCWxiYWRkciA9IHRsYiAqIDB4MDAxMDAwMDAgKyBPTUFQMTUxMF9MQl9PRkZTRVQ7CisJCXBoeXNhZGRyID0gdGxiICogMHgwMDEwMDAwMCArIFBIWVNfT0ZGU0VUOworCQlvbWFwX3dyaXRlbCgobGJhZGRyICYgMHgwZmZmZmZmZikgPj4gMjIsIE9NQVAxNTEwX0xCX01NVV9DQU1fSCk7CisJCW9tYXBfd3JpdGVsKCgobGJhZGRyICYgMHgwMDNmZmMwMCkgPj4gNikgfCAweGMsIAorCQkgICAgICAgT01BUDE1MTBfTEJfTU1VX0NBTV9MKTsKKwkJb21hcF93cml0ZWwocGh5c2FkZHIgPj4gMTYsIE9NQVAxNTEwX0xCX01NVV9SQU1fSCk7CisJCW9tYXBfd3JpdGVsKChwaHlzYWRkciAmIDB4MDAwMGZjMDApIHwgMHgzMDAsIE9NQVAxNTEwX0xCX01NVV9SQU1fTCk7CisJCW9tYXBfd3JpdGVsKHRsYiA8PCA0LCBPTUFQMTUxMF9MQl9NTVVfTENLKTsKKwkJb21hcF93cml0ZWwoMHgxLCBPTUFQMTUxMF9MQl9NTVVfTERfVExCKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIHdhbGtpbmcgdGFibGUgKi8KKwlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE9NQVAxNTEwX0xCX01NVV9DVEwpIHwgKDEgPDwgMyksIE9NQVAxNTEwX0xCX01NVV9DVEwpOworCXVkZWxheSgyMDApOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglDT05GSUdfVVNCX09URworCitzdGF0aWMgdm9pZCBzdGFydF9obnAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCWNvbnN0IHVuc2lnbmVkCXBvcnQgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5vdGdfcG9ydCAtIDE7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCW90Z19zdGFydF9obnAob2hjaS0+dHJhbnNjZWl2ZXIpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW9oY2ktPnRyYW5zY2VpdmVyLT5zdGF0ZSA9IE9UR19TVEFURV9BX1NVU1BFTkQ7CisJd3JpdGVsIChSSF9QU19QU1MsICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3BvcnRdKTsKKwlPVEdfQ1RSTF9SRUcgJj0gfk9UR19BX0JVU1JFUTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfc3RhcnRfaGMoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludAkJCW5lZWRfdHJhbnNjZWl2ZXIgPSAoY29uZmlnLT5vdGcgIT0gMCk7CisJaW50CQkJcmV0OworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAic3RhcnRpbmcgVVNCIENvbnRyb2xsZXJcbiIpOworCisJaWYgKGNvbmZpZy0+b3RnKSB7CisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLm90Z19wb3J0ID0gY29uZmlnLT5vdGc7CisJCS8qIGRlZmF1bHQvbWluaW11bSBPVEcgcG93ZXIgYnVkZ2V0OiAgOCBtQSAqLworCQlvaGNpLT5wb3dlcl9idWRnZXQgPSA4OworCX0KKworCS8qIGJvYXJkcyBjYW4gdXNlIE9URyB0cmFuc2NlaXZlcnMgaW4gbm9uLU9URyBtb2RlcyAqLworCW5lZWRfdHJhbnNjZWl2ZXIgPSBuZWVkX3RyYW5zY2VpdmVyCisJCQl8fCBtYWNoaW5lX2lzX29tYXBfaDIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDMoKTsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJb2NwaV9lbmFibGUoKTsKKworI2lmZGVmCUNPTkZJR19BUkNIX09NQVBfT1RHCisJaWYgKG5lZWRfdHJhbnNjZWl2ZXIpIHsKKwkJb2hjaS0+dHJhbnNjZWl2ZXIgPSBvdGdfZ2V0X3RyYW5zY2VpdmVyKCk7CisJCWlmIChvaGNpLT50cmFuc2NlaXZlcikgeworCQkJaW50CXN0YXR1cyA9IG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwKKwkJCQkJCSZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZik7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0ICVzIHRyYW5zY2VpdmVyLCBzdGF0dXMgJWRcbiIsCisJCQkJCW9oY2ktPnRyYW5zY2VpdmVyLT5sYWJlbCwgc3RhdHVzKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlpZiAob2hjaS0+dHJhbnNjZWl2ZXIpCisJCQkJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGZpbmQgdHJhbnNjZWl2ZXJcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisjZW5kaWYKKworCW9tYXBfb2hjaV9jbG9ja19wb3dlcigxKTsKKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCQlvbWFwXzE1MTBfbG9jYWxfYnVzX3Bvd2VyKDEpOworCQlvbWFwXzE1MTBfbG9jYWxfYnVzX2luaXQoKTsKKwl9CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogYm9hcmQtc3BlY2lmaWMgcG93ZXIgc3dpdGNoaW5nIGFuZCBvdmVyY3VycmVudCBzdXBwb3J0ICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSB8fCBtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKKwkJdTMyCXJoID0gcm9vdGh1Yl9hIChvaGNpKTsKKworCQkvKiBwb3dlciBzd2l0Y2hpbmcgKGdhbmdlZCBieSBkZWZhdWx0KSAqLworCQlyaCAmPSB+UkhfQV9OUFM7CisKKwkJLyogVFBTMjA0NSBzd2l0Y2ggZm9yIGludGVybmFsIHRyYW5zY2VpdmVyIChwb3J0IDEpICovCisJCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKKwkJCW9oY2ktPnBvd2VyX2J1ZGdldCA9IDI1MDsKKworCQkJcmggJj0gflJIX0FfTk9DUDsKKworCQkJLyogZ3BpbzkgZm9yIG92ZXJjdXJyZW50IGRldGN0aW9uICovCisJCQlvbWFwX2NmZ19yZWcoVzhfMTYxMF9HUElPOSk7CisJCQlvbWFwX3JlcXVlc3RfZ3Bpbyg5KTsKKwkJCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDksIDEgLyogSU4gKi8pOworCisJCQkvKiBmb3IgcGFyYW5vaWEncyBzYWtlOiAgZGlzYWJsZSBVU0IuUFVFTiAqLworCQkJb21hcF9jZmdfcmVnKFc0X1VTQl9ISUdIWik7CisJCX0KKwkJb2hjaV93cml0ZWwob2hjaSwgcmgsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOworCQlkaXN0cnVzdF9maXJtd2FyZSA9IDA7CisJfQorCisJLyogRklYTUUga2h1YmQgaHViIHJlcXVlc3RzIHNob3VsZCBtYW5hZ2UgcG93ZXIgc3dpdGNoaW5nICovCisJb21hcF9vaGNpX3RyYW5zY2VpdmVyX3Bvd2VyKDEpOworCisJLyogYm9hcmQgaW5pdCB3aWxsIGhhdmUgYWxyZWFkeSBoYW5kbGVkIEhNQyBhbmQgbXV4IHNldHVwLgorCSAqIGFueSBleHRlcm5hbCB0cmFuc2NlaXZlciBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZAorCSAqIHRvbywgc28gYWxsIGNvbmZpZ3VyZWQgcG9ydHMgdXNlIHRoZSByaWdodCBzaWduYWxpbmcgbm93LgorCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRldl9kYmcoJnBkZXYtPmRldiwgInN0b3BwaW5nIFVTQiBDb250cm9sbGVyXG4iKTsKKwlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMCk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCB1c2JfaGNkX29tYXBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9vbWFwX3Byb2JlIC0gaW5pdGlhbGl6ZSBPTUFQLWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICovCitpbnQgdXNiX2hjZF9vbWFwX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gMDsKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2k7CisKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGNkIHByb2JlOiBpbnZhbGlkIG51bV9yZXNvdXJjZXM6ICVpXG4iLCAKKwkJICAgICAgIHBkZXYtPm51bV9yZXNvdXJjZXMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0gCisJCQl8fCBwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgImhjZCBwcm9iZTogaW52YWxpZCByZXNvdXJjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdXNiX2hvc3RfY2sgPSBjbGtfZ2V0KDAsICJ1c2JfaGhjX2NrIik7CisJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCisJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMDsKKwl9CisJaGNkLT5yc3JjX3N0YXJ0ID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSAodm9pZCBfX2lvbWVtICopIChpbnQpIElPX0FERFJFU1MoaGNkLT5yc3JjX3N0YXJ0KTsKKworCW9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCW9oY2lfaGNkX2luaXQob2hjaSk7CisKKwlyZXR2YWwgPSBvbWFwX3N0YXJ0X2hjKG9oY2ksIHBkZXYpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycjI7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJb21hcF9zdG9wX2hjKHBkZXYpOworZXJyMjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKK2VycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2VycjA6CisJY2xrX3B1dCh1c2JfaG9zdF9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX29tYXBfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgT01BUC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9vbWFwX3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9vbWFwX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCW9tYXBfZnJlZV9ncGlvKDkpOworCW9tYXBfc3RvcF9oYyhwZGV2KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCWNsa19wdXQodXNiX2hvc3RfY2spOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9vbWFwX3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvbWFwX3VzYl9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXJldDsKKworCWNvbmZpZyA9IGhjZC0+c2VsZi5jb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhOworCWlmIChjb25maWctPm90ZyB8fCBjb25maWctPnJ3YykKKwkJd3JpdGVsKE9IQ0lfQ1RSTF9SV0MsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgImNhbid0IHN0YXJ0XG4iKTsKKwkJb2hjaV9zdG9wIChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9vbWFwX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiT01BUCBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9vbWFwX3N0YXJ0LAorCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdXNiX2hjZF9vbWFwX3Byb2JlKCZvaGNpX29tYXBfaGNfZHJpdmVyLAorCQkJCXRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCXVzYl9oY2Rfb21hcF9yZW1vdmUoaGNkLCBwZGV2KTsKKwlpZiAob2hjaS0+dHJhbnNjZWl2ZXIpIHsKKwkJKHZvaWQpIG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwgMCk7CisJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfUE0KKworLyogc3RhdGVzIG1hdGNoIFBDSSB1c2FnZSwgYWx3YXlzIHN1c3BlbmRpbmcgdGhlIHJvb3QgaHViIGV4Y2VwdCB0aGF0CisgKiA0IH49IEQzY29sZCAoQUNQSSBEMykgd2l0aCBjbG9jayBvZmYgKHJlc3VtZSBzZWVzIHJlc2V0KS4KKyAqLworCitzdGF0aWMgaW50IG9oY2lfb21hcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOworCWludAkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmIChsZXZlbCAhPSBTVVNQRU5EX1BPV0VSX0RPV04pCisJCXJldHVybiAwOworCWlmIChzdGF0ZSA8PSBkZXYtPnBvd2VyLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gMDsKKworCWRldl9kYmcoZGV2LCAic3VzcGVuZCB0byAlZFxuIiwgc3RhdGUpOworCWRvd24oJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCXN0YXR1cyA9IG9oY2lfaHViX3N1c3BlbmQob2hjaV90b19oY2Qob2hjaSkpOworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoc3RhdGUgPj0gNCkgeworCQkJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDApOworCQkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnN0YXRlID0KKwkJCQkJVVNCX1NUQVRFX1NVU1BFTkRFRDsKKwkJCXN0YXRlID0gNDsKKwkJfQorCQlvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwl9CisJdXAoJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJaW50CQlzdGF0dXMgPSAwOworCisJaWYgKGxldmVsICE9IFJFU1VNRV9QT1dFUl9PTikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGRldi0+cG93ZXIucG93ZXJfc3RhdGUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQkJbXNsZWVwKDUpOworCQlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKKwkJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDEpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAicmVzdW1lIGZyb20gJWRcbiIsIGRldi0+cG93ZXIucG93ZXJfc3RhdGUpOworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCQkvKiBnZXQgZXh0cmEgY2xlYW51cCBldmVuIGlmIHJlbW90ZSB3YWtldXAgaXNuJ3QgaW4gdXNlICovCisJCXN0YXR1cyA9IHVzYl9yZXN1bWVfZGV2aWNlKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViKTsKKyNlbHNlCisJCWRvd24oJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViLT5zZXJpYWxpemUpOworCQlzdGF0dXMgPSBvaGNpX2h1Yl9yZXN1bWUob2hjaV90b19oY2Qob2hjaSkpOworCQl1cCgmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisjZW5kaWYKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIERyaXZlciBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyIHdpdGggdGhlIE9NQVAgYnVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKKwkubmFtZQkJPSAib2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcmVtb3ZlLAorI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kCT0gb2hjaV9vbWFwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX29tYXBfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9vbWFwX2luaXQgKHZvaWQpCit7CisJcHJpbnRrIChLRVJOX0RFQlVHICIlczogIiBEUklWRVJfSU5GTyAiIChPTUFQKVxuIiwgaGNkX25hbWUpOworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBlZCAlWmQgdGQgJVpkXG4iLCBoY2RfbmFtZSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2Rfb21hcF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9vbWFwX2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX29tYXBfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxMTU4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogWyBJbml0aWFsaXNhdGlvbiBpcyBiYXNlZCBvbiBMaW51cycgIF0KKyAqIFsgdWhjaSBjb2RlIGFuZCBncmVncyBvaGNpIGZyYWdtZW50cyBdCisgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcyAgXQorICogWyAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aF0KKyAqIAorICogUENJIEJ1cyBHbHVlCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKyAKKyNpZmRlZiBDT05GSUdfUE1BQ19QQk9PSworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpZm5kZWYgQ09ORklHX1BNCisjCWRlZmluZSBDT05GSUdfUE0KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1BDSQorI2Vycm9yICJUaGlzIGZpbGUgaXMgUENJIGJ1cyBnbHVlLiAgQ09ORklHX1BDSSBtdXN0IGJlIGRlZmluZWQuIgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK29oY2lfcGNpX3Jlc2V0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJb2hjaV9oY2RfaW5pdCAob2hjaSk7CisJcmV0dXJuIG9oY2lfaW5pdCAob2hjaSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX3BjaV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXJldDsKKworCWlmKGhjZC0+c2VsZi5jb250cm9sbGVyICYmIGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJCS8qIEFNRCA3NTYsIGZvciBtb3N0IGNoaXBzIChlYXJseSByZXZzKSwgY29ycnVwdHMgcmVnaXN0ZXIKKwkJICogdmFsdWVzIG9uIHJlYWQgLi4uIHNvIGVuYWJsZSB0aGUgdmVuZG9yIHdvcmthcm91bmQuCisJCSAqLworCQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1ECisJCQkJJiYgcGRldi0+ZGV2aWNlID09IDB4NzQwYykgeworCQkJb2hjaS0+ZmxhZ3MgPSBPSENJX1FVSVJLX0FNRDc1NjsKKwkJCW9oY2lfaW5mbyAob2hjaSwgIkFNRDc1NiBlcnJhdHVtIDQgd29ya2Fyb3VuZFxuIik7CisJCQkvLyBhbHNvIHNvbWV3aGF0IGVycmF0dW0gMTAgKHN1c3BlbmQvcmVzdW1lIGlzc3VlcykKKwkJfQorCisJCS8qIEZJWE1FIGZvciBzb21lIG9mIHRoZSBlYXJseSBBTUQgNzYwIHNvdXRoYnJpZGdlcywgT0hDSQorCQkgKiB3b24ndCB3b3JrIGF0IGFsbC4gIGJsYWNrbGlzdCB0aGVtLgorCQkgKi8KKworCQkvKiBBcHBsZSdzIE9IQ0kgZHJpdmVyIGhhcyBhIGxvdCBvZiBiaXphcnJlIHdvcmthcm91bmRzCisJCSAqIGZvciB0aGlzIGNoaXAuICBFdmlkZW50bHkgY29udHJvbCBhbmQgYnVsayBsaXN0cworCQkgKiBjYW4gZ2V0IGNvbmZ1c2VkLiAgKEImVyBHMyBtb2RlbHMsIGFuZCAuLi4pCisJCSAqLworCQllbHNlIGlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9PUFRJCisJCQkJJiYgcGRldi0+ZGV2aWNlID09IDB4Yzg2MSkgeworCQkJb2hjaV9pbmZvIChvaGNpLAorCQkJCSJXQVJOSU5HOiBPUFRpIHdvcmthcm91bmRzIHVuYXZhaWxhYmxlXG4iKTsKKwkJfQorCisJCS8qIENoZWNrIGZvciBOU0M4NzU2MC4gV2UgaGF2ZSB0byBsb29rIGF0IHRoZSBicmlkZ2UgKGZuMSkgdG8KKwkJICogaWRlbnRpZnkgdGhlIFVTQiAoZm4yKS4gVGhpcyBxdWlyayBtaWdodCBhcHBseSB0byBtb3JlIG9yCisJCSAqIGV2ZW4gYWxsIE5TQyBzdHVmZi4KKwkJICovCisJCWVsc2UgaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05TKSB7CisJCQlzdHJ1Y3QgcGNpX2RldgkqYjsKKworCQkJYiAgPSBwY2lfZmluZF9zbG90IChwZGV2LT5idXMtPm51bWJlciwKKwkJCQkJUENJX0RFVkZOIChQQ0lfU0xPVCAocGRldi0+ZGV2Zm4pLCAxKSk7CisJCQlpZiAoYiAmJiBiLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OU184NzU2MF9MSU8KKwkJCQkJJiYgYi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlMpIHsKKwkJCQlvaGNpLT5mbGFncyB8PSBPSENJX1FVSVJLX1NVUEVSSU87CisJCQkJb2hjaV9pbmZvIChvaGNpLCAiVXNpbmcgTlNDIFN1cGVySU8gc2V0dXBcbiIpOworCQkJfQorCQl9CisJfQorCisJLyogTk9URTogdGhlcmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGEgZmlyc3QgcmVzZXQsIHRvCisJICoga2VlcCBiaW9zL3NtbSBpcnFzIGZyb20gbWFraW5nIHRyb3VibGUKKwkgKi8KKwlpZiAoKHJldCA9IG9oY2lfcnVuIChvaGNpKSkgPCAwKSB7CisJCW9oY2lfZXJyIChvaGNpLCAiY2FuJ3Qgc3RhcnRcbiIpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYJQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgb2hjaV9wY2lfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIHN0YXRlKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCS8qIHN1c3BlbmQgcm9vdCBodWIsIGhvcGluZyBpdCBrZWVwcyBwb3dlciBkdXJpbmcgc3VzcGVuZCAqLworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCAoMTAwKTsKKworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCSh2b2lkKSB1c2Jfc3VzcGVuZF9kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yiwgc3RhdGUpOworI2Vsc2UKKwl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJKHZvaWQpIG9oY2lfaHViX3N1c3BlbmQgKGhjZCk7CisJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisjZW5kaWYKKworCS8qIGxldCB0aGluZ3Mgc2V0dGxlIGRvd24gYSBiaXQgKi8KKwltc2xlZXAgKDEwMCk7CisJCisjaWZkZWYgQ09ORklHX1BNQUNfUEJPT0sKKwlpZiAoX21hY2hpbmUgPT0gX01BQ0hfUG1hYykgeworCSAgIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CisgCisJCS8qIERpc2FibGUgVVNCIFBBRCAmIGNlbGwgY2xvY2sgKi8KKwkJb2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZSAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcikpOworCQlpZiAob2Zfbm9kZSkKKwkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1VTQl9FTkFCTEUsIG9mX25vZGUsIDAsIDApOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUE1BQ19QQk9PSyAqLworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgb2hjaV9wY2lfcmVzdW1lIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisjaWZkZWYgQ09ORklHX1BNQUNfUEJPT0sKKwlpZiAoX21hY2hpbmUgPT0gX01BQ0hfUG1hYykgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CisKKwkJLyogUmUtZW5hYmxlIFVTQiBQQUQgJiBjZWxsIGNsb2NrICovCisJCW9mX25vZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUgKHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpKTsKKwkJaWYgKG9mX25vZGUpCisJCQlwbWFjX2NhbGxfZmVhdHVyZSAoUE1BQ19GVFJfVVNCX0VOQUJMRSwgb2Zfbm9kZSwgMCwgMSk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QTUFDX1BCT09LICovCisKKwkvKiByZXN1bWUgcm9vdCBodWIgKi8KKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAgKDEwMCk7CisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLyogZ2V0IGV4dHJhIGNsZWFudXAgZXZlbiBpZiByZW1vdGUgd2FrZXVwIGlzbid0IGluIHVzZSAqLworCXJldHZhbCA9IHVzYl9yZXN1bWVfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2Vsc2UKKwl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJcmV0dmFsID0gb2hjaV9odWJfcmVzdW1lIChoY2QpOworCXVzYl91bmxvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworI2VuZGlmCisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYJLyogQ09ORklHX1BNICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9wY2lfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJPSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9NRU1PUlkgfCBIQ0RfVVNCMTEsCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0ID0JCW9oY2lfcGNpX3Jlc2V0LAorCS5zdGFydCA9CQlvaGNpX3BjaV9zdGFydCwKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CQlvaGNpX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQkJb2hjaV9wY2lfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkvKiBoYW5kbGUgYW55IFVTQiBPSENJIGNvbnRyb2xsZXIgKi8KKwlQQ0lfREVWSUNFX0NMQVNTKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MTAsIH4wKSwKKwkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJm9oY2lfcGNpX2hjX2RyaXZlciwKKwl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY2lfaWRzKTsKKworLyogcGNpIGRyaXZlciBnbHVlOyB0aGlzIGlzIGEgIm5ldyBzdHlsZSIgUENJIGRyaXZlciBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvaGNpX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKworCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCisKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworIAorc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfcGNpX2luaXQgKHZvaWQpIAoreworCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIiAoUENJKVxuIiwgaGNkX25hbWUpOworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogZWQgJVpkIHRkICVaZFxuIiwgaGNkX25hbWUsCisJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJm9oY2lfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAob2hjaV9oY2RfcGNpX2luaXQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcGNpX2NsZWFudXAgKHZvaWQpIAorewkKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZvaGNpX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKG9oY2lfaGNkX3BjaV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTY0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIAorICogQnVzIEdsdWUgZm9yIFBQQyBPbi1DaGlwIE9IQ0kgZHJpdmVyCisgKiBUZXN0ZWQgb24gRnJlZXNjYWxlIE1QQzUyMDAgYW5kIElCTSBTVEIwNHh4eAorICoKKyAqIE1vZGlmaWVkIGJ5IERhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4gZnJvbSBvaGNpLXNhMTExMS5jCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGFzbS91c2IuaD4KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworLyoqCisgKiB1c2JfaGNkX3BwY19zb2NfcHJvYmUgLSBpbml0aWFsaXplIE9uLUNoaXAgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKgorICogU3RvcmUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgSENEJ3Mgc3RydWN0IHBjaV9kcml2ZXIgYXMgcHJvYmUoKS4KKyAqLworc3RhdGljIGludCB1c2JfaGNkX3BwY19zb2NfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXR2YWw7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlzdHJ1Y3QgdXNiX2hjZF9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJcHJfZGVidWcoImluaXRpYWxpemluZyBQUEMtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcHJfZGVidWcoX19GSUxFX18gIjogbm8gaXJxXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlycSA9IHJlcy0+c3RhcnQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXByX2RlYnVnKF9fRklMRV9fICI6IG5vIHJlZyBhZGRyXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCAiUFBDLVNPQyBVU0IiKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCXByX2RlYnVnKF9fRklMRV9fICI6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoX19GSUxFX18gIjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKHBkLT5zdGFydCAmJiAocmV0dmFsID0gcGQtPnN0YXJ0KHBkZXYpKSkKKwkJZ290byBlcnIzOworCisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJb2hjaS0+ZmxhZ3MgfD0gT0hDSV9CSUdfRU5ESUFOOworCW9oY2lfaGNkX2luaXQob2hjaSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlwcl9kZWJ1ZygiUmVtb3ZpbmcgUFBDLVNPQyBVU0IgQ29udHJvbGxlclxuIik7CisJaWYgKHBkICYmIHBkLT5zdG9wKQorCQlwZC0+c3RvcChwZGV2KTsKKyBlcnIzOgorCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisgCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9wcGNfc29jX3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIE9uLUNoaXAgSENEcworICogQHBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3BwY19zb2NfcHJvYmUoKSwgZmlyc3QgaW52b2tpbmcKKyAqIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLiAgSXQgaXMgYWx3YXlzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCisgKiBjb250ZXh0LCBub3JtYWxseSAicm1tb2QiLCAiYXBtZCIsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICoKKyAqLworc3RhdGljIHZvaWQgdXNiX2hjZF9wcGNfc29jX3JlbW92ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkX3BsYXRmb3JtX2RhdGEgKnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJcHJfZGVidWcoInN0b3BwaW5nIFBQQy1TT0MgVVNCIENvbnRyb2xsZXJcbiIpOworCWlmIChwZCAmJiBwZC0+c3RvcCkKKwkJcGQtPnN0b3AocGRldik7CisKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX2hjZF9wdXQoaGNkKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfcHBjX3NvY19zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJaW50CQlyZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBvaGNpX3J1bihvaGNpKSkgPCAwKSB7CisJCWVycigiY2FuJ3Qgc3RhcnQgJXMiLCBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX3BwY19zb2NfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9wcGNfc29jX3N0YXJ0LAorCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCitzdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX3BwY19zb2NfcHJvYmUoJm9oY2lfcHBjX3NvY19oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9wcGNfc29jX3JlbW92ZShoY2QsIHBkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBwYy1zb2Mtb2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlLAorI2lmCWRlZmluZWQoQ09ORklHX1VTQl9TVVNQRU5EKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKKwkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfc3VzcGVuZCwqLworCS8qLnJlc3VtZQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Jlc3VtZSwqLworI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9wcGNfc29jX2luaXQodm9pZCkKK3sKKwlwcl9kZWJ1ZyhEUklWRVJfSU5GTyAiIChQUEMgU09DKVxuIik7CisJcHJfZGVidWcoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwgc2l6ZW9mKHN0cnVjdCBlZCksCisJCQkJCQkJc2l6ZW9mKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcHBjX3NvY19jbGVhbnVwKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob2hjaV9oY2RfcHBjX3NvY19pbml0KTsKK21vZHVsZV9leGl0KG9oY2lfaGNkX3BwY19zb2NfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzNDY0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIEJ1cyBHbHVlIGZvciBweGEyN3gKKyAqCisgKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiBwcmV2aW91cyBkcml2ZXIgYnkgUnVzc2VsbCBLaW5nIGV0IGFsLgorICoKKyAqIE1vZGlmaWVkIGZvciBMSDdBNDA0IGZyb20gb2hjaS1zYTExMTEuYworICogIGJ5IER1cmdlc2ggUGF0dGFtYXR0YSA8cGF0dGFtYXR0YWRAc2hhcnBzZWMuY29tPgorICoKKyAqIE1vZGlmaWVkIGZvciBweGEyN3ggZnJvbSBvaGNpLWxoN2E0MDQuYworICogIGJ5IE5pY2sgQmFuZSA8bmlja0BjZWNvbXB1dGluZy5jby51az4gMjYtOC0yMDA0CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworCisjZGVmaW5lIFBNTV9OUFNfTU9ERSAgICAgICAgICAgMQorI2RlZmluZSBQTU1fR0xPQkFMX01PREUgICAgICAgIDIKKyNkZWZpbmUgUE1NX1BFUlBPUlRfTU9ERSAgICAgICAzCisKKyNkZWZpbmUgUFhBX1VIQ19NQVhfUE9SVE5VTSAgICAzCisKKyNkZWZpbmUgVUhDUkhQUyh4KSAgICAgICAgICAgICAgX19SRUcyKCAweDRDMDAwMDUwLCAoeCk8PDIgKQorCitzdGF0aWMgaW50IHB4YTI3eF9vaGNpX3BtbV9zdGF0ZTsKKworLyoKKyAgUE1NX05QU19NT0RFIC0tIFBNTSBOb24tcG93ZXIgc3dpdGNoaW5nIG1vZGUKKyAgICAgIFBvcnRzIGFyZSBwb3dlcmVkIGNvbnRpbnVvdXNseS4KKworICBQTU1fR0xPQkFMX01PREUgLS0gUE1NIGdsb2JhbCBzd2l0Y2hpbmcgbW9kZQorICAgICAgQWxsIHBvcnRzIGFyZSBwb3dlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisKKyAgUE1NX1BFUlBPUlRfTU9ERSAtLSBQTU0gcGVyIHBvcnQgc3dpdGNoaW5nIG1vZGUKKyAgICAgIFBvcnRzIGFyZSBwb3dlcmVkIGluZGl2aWR1YWxseS4KKyAqLworc3RhdGljIGludCBweGEyN3hfb2hjaV9zZWxlY3RfcG1tKCBpbnQgbW9kZSApCit7CisJcHhhMjd4X29oY2lfcG1tX3N0YXRlID0gbW9kZTsKKworCXN3aXRjaCAoIG1vZGUgKSB7CisJY2FzZSBQTU1fTlBTX01PREU6CisJCVVIQ1JIREEgfD0gUkhfQV9OUFM7CisJCWJyZWFrOyAKKwljYXNlIFBNTV9HTE9CQUxfTU9ERToKKwkJVUhDUkhEQSAmPSB+KFJIX0FfTlBTICYgUkhfQV9QU00pOworCQlicmVhazsKKwljYXNlIFBNTV9QRVJQT1JUX01PREU6CisJCVVIQ1JIREEgJj0gfihSSF9BX05QUyk7CisJCVVIQ1JIREEgfD0gUkhfQV9QU007CisKKwkJLyogU2V0IHBvcnQgcG93ZXIgY29udHJvbCBtYXNrIGJpdHMsIG9ubHkgMyBwb3J0cy4gKi8KKwkJVUhDUkhEQiB8PSAoMHg3PDwxNyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayggS0VSTl9FUlIKKwkJCSJJbnZhbGlkIG1vZGUgJWQsIHNldCB0byBub24tcG93ZXIgc3dpdGNoIG1vZGUuXG4iLCAKKwkJCW1vZGUgKTsKKworCQlweGEyN3hfb2hjaV9wbW1fc3RhdGUgPSBQTU1fTlBTX01PREU7CisJCVVIQ1JIREEgfD0gUkhfQV9OUFM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgIElmIHlvdSBzZWxlY3QgUE1NX1BFUlBPUlRfTU9ERSwgeW91IHNob3VsZCBzZXQgdGhlIHBvcnQgcG93ZXIKKyAqLworc3RhdGljIGludCBweGEyN3hfb2hjaV9zZXRfcG9ydF9wb3dlciggaW50IHBvcnQgKQoreworCWlmICggKHB4YTI3eF9vaGNpX3BtbV9zdGF0ZT09UE1NX1BFUlBPUlRfTU9ERSkKKwkgICAgICYmIChwb3J0PjApICYmIChwb3J0PFBYQV9VSENfTUFYX1BPUlROVU0pICkgeworCQlVSENSSFBTKHBvcnQpIHw9IDB4MTAwOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICBJZiB5b3Ugc2VsZWN0IFBNTV9QRVJQT1JUX01PREUsIHlvdSBzaG91bGQgc2V0IHRoZSBwb3J0IHBvd2VyCisgKi8KK3N0YXRpYyBpbnQgcHhhMjd4X29oY2lfY2xlYXJfcG9ydF9wb3dlciggaW50IHBvcnQgKQoreworCWlmICggKHB4YTI3eF9vaGNpX3BtbV9zdGF0ZT09UE1NX1BFUlBPUlRfTU9ERSkgCisJICAgICAmJiAocG9ydD4wKSAmJiAocG9ydDxQWEFfVUhDX01BWF9QT1JUTlVNKSApIHsKKwkJVUhDUkhQUyhwb3J0KSB8PSAweDIwMDsKKwkJcmV0dXJuIDA7CisJfQorCSAKKwlyZXR1cm4gLTE7Cit9CisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBweGEyN3hfc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXB4YV9zZXRfY2tlbihDS0VOMTBfVVNCSE9TVCwgMSk7CisKKwlVSENIUiB8PSBVSENIUl9GSFI7CisJdWRlbGF5KDExKTsKKwlVSENIUiAmPSB+VUhDSFJfRkhSOworCisJVUhDSFIgfD0gVUhDSFJfRlNCSVI7CisJd2hpbGUgKFVIQ0hSICYgVUhDSFJfRlNCSVIpCisJCWNwdV9yZWxheCgpOworCisJLyogVGhpcyBjb3VsZCBiZSBwcm9wZXJseSBhYnN0cmFjdGVkIGF3YXkgdGhyb3VnaCB0aGUKKwkgICBkZXZpY2UgZGF0YSB0aGUgZGF5IG1vcmUgbWFjaGluZXMgYXJlIHN1cHBvcnRlZCBhbmQKKwkgICB0aGVpciBkaWZmZXJlbmNlcyBjYW4gYmUgZmlndXJlZCBvdXQgY29ycmVjdGx5LiAqLworCWlmIChtYWNoaW5lX2lzX21haW5zdG9uZSgpKSB7CisJCS8qIHNldHVwIFBvcnQxIEdQSU8gcGluLiAqLworCQlweGFfZ3Bpb19tb2RlKCA4OCB8IEdQSU9fQUxUX0ZOXzFfSU4pOwkvKiBVU0JIUFdSMSAqLworCQlweGFfZ3Bpb19tb2RlKCA4OSB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsJLyogVVNCSFBFTjEgKi8KKworCQkvKiBTZXQgdGhlIFBvd2VyIENvbnRyb2wgUG9sYXJpdHkgTG93IGFuZCBQb3dlciBTZW5zZQorCQkgICBQb2xhcml0eSBMb3cgdG8gYWN0aXZlIGxvdy4gU3VwcGx5IHBvd2VyIHRvIFVTQiBwb3J0cy4gKi8KKwkJVUhDSFIgPSAoVUhDSFIgfCBVSENIUl9QQ1BMIHwgVUhDSFJfUFNQTCkgJgorCQkJfihVSENIUl9TU0VQMSB8IFVIQ0hSX1NTRVAyIHwgVUhDSFJfU1NFUDMgfCBVSENIUl9TU0UpOworCX0KKworCVVIQ0hSICY9IH5VSENIUl9TU0U7CisKKwlVSENISUUgPSAoVUhDSElFX1VQUklFIHwgVUhDSElFX1JXSUUpOworfQorCitzdGF0aWMgdm9pZCBweGEyN3hfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJVUhDSFIgfD0gVUhDSFJfRkhSOworCXVkZWxheSgxMSk7CisJVUhDSFIgJj0gflVIQ0hSX0ZIUjsKKworCVVIQ0NPTVMgfD0gMTsKKwl1ZGVsYXkoMTApOworCisJcHhhX3NldF9ja2VuKENLRU4xMF9VU0JIT1NULCAwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9weGEyN3hfcHJvYmUgLSBpbml0aWFsaXplIHB4YTI3eC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKi8KK2ludCB1c2JfaGNkX3B4YTI3eF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwkJcHJfZGVidWcgKCJyZXNvdXJjZVsxXSBpcyBub3QgSU9SRVNPVVJDRV9JUlEiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJmRldi0+ZGV2LCAicHhhMjd4Iik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlweGEyN3hfc3RhcnRfaGMoZGV2KTsKKworCS8qIFNlbGVjdCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgKi8KKwlweGEyN3hfb2hjaV9zZWxlY3RfcG1tKCBQTU1fUEVSUE9SVF9NT0RFICk7CisKKwkvKiBJZiBjaG9vc2luZyBQTU1fUEVSUE9SVF9NT0RFLCB3ZSBzaG91bGQgc2V0IHRoZSBwb3J0IHBvd2VyIGJlZm9yZSB3ZSB1c2UgaXQuICovCisJaWYgKHB4YTI3eF9vaGNpX3NldF9wb3J0X3Bvd2VyKDEpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJTZXR0aW5nIHBvcnQgMSBwb3dlciBmYWlsZWQuXG4iKTsKKworCWlmIChweGEyN3hfb2hjaV9jbGVhcl9wb3J0X3Bvd2VyKDIpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJTZXR0aW5nIHBvcnQgMiBwb3dlciBmYWlsZWQuXG4iKTsKKworCWlmIChweGEyN3hfb2hjaV9jbGVhcl9wb3J0X3Bvd2VyKDMpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJTZXR0aW5nIHBvcnQgMyBwb3dlciBmYWlsZWQuXG4iKTsKKworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcHhhMjd4X3N0b3BfaGMoZGV2KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisgZXJyMjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKyBlcnIxOgorCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9weGEyN3hfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgcHhhMjd4LWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3B4YTI3eF9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICovCit2b2lkIHVzYl9oY2RfcHhhMjd4X3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJcHhhMjd4X3N0b3BfaGMoZGV2KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfcHhhMjd4X3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcmV0OworCisJb2hjaV9kYmcgKG9oY2ksICJvaGNpX3B4YTI3eF9zdGFydCwgb2hjaTolcCIsIG9oY2kpOworCisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfcHhhMjd4X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiUFhBMjd4IE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX3B4YTI3eF9zdGFydCwKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmICBDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCByZXQ7CisKKwlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUiKTsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX3B4YTI3eF9wcm9iZSgmb2hjaV9weGEyN3hfaGNfZHJpdmVyLCBwZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9weGEyN3hfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisvLwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisvLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcHJpbnRrKCIlczogbm90IGltcGxlbWVudGVkIHlldFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlKQoreworLy8Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXByaW50aygiJXM6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKKwkubmFtZQkJPSAicHhhMjd4LW9oY2kiLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUsCisJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsIAorCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUsIAorfTsKKworc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfcHhhMjd4X2luaXQgKHZvaWQpCit7CisJcHJfZGVidWcgKERSSVZFUl9JTkZPICIgKHB4YTI3eCkiKTsKKwlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9weGEyN3hfY2xlYW51cCAodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9weGEyN3hfaW5pdCk7Cittb2R1bGVfZXhpdCAob2hjaV9oY2RfcHhhMjd4X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwMTE0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKQEAgLTAsMCArMSwxMTA3IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKiAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworc3RhdGljIHZvaWQgdXJiX2ZyZWVfcHJpdiAoc3RydWN0IG9oY2lfaGNkICpoYywgdXJiX3ByaXZfdCAqdXJiX3ByaXYpCit7CisJaW50CQlsYXN0ID0gdXJiX3ByaXYtPmxlbmd0aCAtIDE7CisKKwlpZiAobGFzdCA+PSAwKSB7CisJCWludAkJaTsKKwkJc3RydWN0IHRkCSp0ZDsKKworCQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgeworCQkJdGQgPSB1cmJfcHJpdi0+dGQgW2ldOworCQkJaWYgKHRkKQorCQkJCXRkX2ZyZWUgKGhjLCB0ZCk7CisJCX0KKwl9CisKKwlsaXN0X2RlbCAoJnVyYl9wcml2LT5wZW5kaW5nKTsKKwlrZnJlZSAodXJiX3ByaXYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVJCIGdvZXMgYmFjayB0byBkcml2ZXIsIGFuZCBpc24ndCByZWlzc3VlZC4KKyAqIEl0J3MgY29tcGxldGVseSBnb25lIGZyb20gSEMgZGF0YSBzdHJ1Y3R1cmVzLgorICogUFJFQ09ORElUSU9OOiAgb2hjaSBsb2NrIGhlbGQsIGlycXMgYmxvY2tlZC4KKyAqLworc3RhdGljIHZvaWQKK2ZpbmlzaF91cmIgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK19fcmVsZWFzZXMob2hjaS0+bG9jaykKK19fYWNxdWlyZXMob2hjaS0+bG9jaykKK3sKKwkvLyBBU1NFUlQgKHVyYi0+aGNwcml2ICE9IDApOworCisJdXJiX2ZyZWVfcHJpdiAob2hjaSwgdXJiLT5oY3ByaXYpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKworCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJaWYgKGxpa2VseSAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJdXJiLT5zdGF0dXMgPSAwOworCS8qIHJlcG9ydCBzaG9ydCBjb250cm9sIHJlYWRzIHJpZ2h0IGV2ZW4gdGhvdWdoIHRoZSBkYXRhIFREIGFsd2F5cworCSAqIGhhcyBURF9SIHNldC4gIChtdWNoIHNpbXBsZXIsIGJ1dCBjcmVhdGVzIHRoZSAxLXRkIGxpbWl0LikKKwkgKi8KKwlpZiAodW5saWtlbHkgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJJiYgdW5saWtlbHkgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJCSYmIHVyYi0+YWN0dWFsX2xlbmd0aCA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJJiYgdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJJiYgdXJiLT5zdGF0dXMgPT0gMCkgeworCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJfQorCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlICh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzLS07CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKwl1cmJfcHJpbnQgKHVyYiwgIlJFVCIsIHVzYl9waXBlb3V0ICh1cmItPnBpcGUpKTsKKyNlbmRpZgorCisJLyogdXJiLT5jb21wbGV0ZSgpIGNhbiByZWVudGVyIHRoaXMgSENEICovCisJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYiAob2hjaV90b19oY2Qob2hjaSksIHVyYiwgcmVncyk7CisJc3Bpbl9sb2NrICgmb2hjaS0+bG9jayk7CisKKwkvKiBzdG9wIHBlcmlvZGljIGRtYSBpZiBpdCdzIG5vdCBuZWVkZWQgKi8KKwlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwCisJCQkmJiBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMgPT0gMCkgeworCQlvaGNpLT5oY19jb250cm9sICY9IH4oT0hDSV9DVFJMX1BMRXxPSENJX0NUUkxfSUUpOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFRCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovICAKKworLyogc2VhcmNoIGZvciB0aGUgcmlnaHQgc2NoZWR1bGUgYnJhbmNoIHRvIHVzZSBmb3IgYSBwZXJpb2RpYyBlZC4KKyAqIGRvZXMgc29tZSBsb2FkIGJhbGFuY2luZzsgcmV0dXJucyB0aGUgYnJhbmNoLCBvciBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBiYWxhbmNlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBpbnRlcnZhbCwgaW50IGxvYWQpCit7CisJaW50CWksIGJyYW5jaCA9IC1FTk9TUEM7CisKKwkvKiBpc28gcGVyaW9kcyBjYW4gYmUgaHVnZTsgaXNvIHRkcyBzcGVjaWZ5IGZyYW1lIG51bWJlcnMgKi8KKwlpZiAoaW50ZXJ2YWwgPiBOVU1fSU5UUykKKwkJaW50ZXJ2YWwgPSBOVU1fSU5UUzsKKworCS8qIHNlYXJjaCBmb3IgdGhlIGxlYXN0IGxvYWRlZCBzY2hlZHVsZSBicmFuY2ggb2YgdGhhdCBwZXJpb2QKKwkgKiB0aGF0IGhhcyBlbm91Z2ggYmFuZHdpZHRoIGxlZnQgdW5yZXNlcnZlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJ2YWwgOyBpKyspIHsKKwkJaWYgKGJyYW5jaCA8IDAgfHwgb2hjaS0+bG9hZCBbYnJhbmNoXSA+IG9oY2ktPmxvYWQgW2ldKSB7CisjaWYgMQkvKiBDT05GSUdfVVNCX0JBTkRXSURUSCAqLworCQkJaW50CWo7CisKKwkJCS8qIHVzYiAxLjEgc2F5cyA5MCUgb2Ygb25lIGZyYW1lICovCisJCQlmb3IgKGogPSBpOyBqIDwgTlVNX0lOVFM7IGogKz0gaW50ZXJ2YWwpIHsKKwkJCQlpZiAoKG9oY2ktPmxvYWQgW2pdICsgbG9hZCkgPiA5MDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGogPCBOVU1fSU5UUykKKwkJCQljb250aW51ZTsKKyNlbmRpZgorCQkJYnJhbmNoID0gaTsgCisJCX0KKwl9CisJcmV0dXJuIGJyYW5jaDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogYm90aCBpc28gYW5kIGludGVycnVwdCByZXF1ZXN0cyBoYXZlIHBlcmlvZHM7IHRoaXMgcm91dGluZSBwdXRzIHRoZW0KKyAqIGludG8gdGhlIHNjaGVkdWxlIHRyZWUgaW4gdGhlIGFwcHByb3ByaWF0ZSBwbGFjZS4gIG1vc3QgaXNvIGRldmljZXMgdXNlCisgKiAxbXNlYyBwZXJpb2RzLCBidXQgdGhhdCdzIG5vdCByZXF1aXJlZC4KKyAqLworc3RhdGljIHZvaWQgcGVyaW9kaWNfbGluayAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKQoreworCXVuc2lnbmVkCWk7CisKKwlvaGNpX3ZkYmcgKG9oY2ksICJsaW5rICVzZWQgJXAgYnJhbmNoICVkIFslZHVzLl0sIGludGVydmFsICVkXG4iLAorCQkoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9JU08pKSA/ICJpc28gIiA6ICIiLAorCQllZCwgZWQtPmJyYW5jaCwgZWQtPmxvYWQsIGVkLT5pbnRlcnZhbCk7CisKKwlmb3IgKGkgPSBlZC0+YnJhbmNoOyBpIDwgTlVNX0lOVFM7IGkgKz0gZWQtPmludGVydmFsKSB7CisJCXN0cnVjdCBlZAkqKnByZXYgPSAmb2hjaS0+cGVyaW9kaWMgW2ldOworCQlfX2hjMzIJCSpwcmV2X3AgPSAmb2hjaS0+aGNjYS0+aW50X3RhYmxlIFtpXTsKKwkJc3RydWN0IGVkCSpoZXJlID0gKnByZXY7CisKKwkJLyogc29ydGluZyBlYWNoIGJyYW5jaCBieSBwZXJpb2QgKHNsb3cgYmVmb3JlIGZhc3QpCisJCSAqIGxldHMgdXMgc2hhcmUgdGhlIGZhc3RlciBwYXJ0cyBvZiB0aGUgdHJlZS4KKwkJICogKHBsdXMgbWF5YmU6IHB1dCBpbnRlcnJ1cHQgZWRzIGJlZm9yZSBpc28pCisJCSAqLworCQl3aGlsZSAoaGVyZSAmJiBlZCAhPSBoZXJlKSB7CisJCQlpZiAoZWQtPmludGVydmFsID4gaGVyZS0+aW50ZXJ2YWwpCisJCQkJYnJlYWs7CisJCQlwcmV2ID0gJmhlcmUtPmVkX25leHQ7CisJCQlwcmV2X3AgPSAmaGVyZS0+aHdOZXh0RUQ7CisJCQloZXJlID0gKnByZXY7CisJCX0KKwkJaWYgKGVkICE9IGhlcmUpIHsKKwkJCWVkLT5lZF9uZXh0ID0gaGVyZTsKKwkJCWlmIChoZXJlKQorCQkJCWVkLT5od05leHRFRCA9ICpwcmV2X3A7CisJCQl3bWIgKCk7CisJCQkqcHJldiA9IGVkOworCQkJKnByZXZfcCA9IGNwdV90b19oYzMyKG9oY2ksIGVkLT5kbWEpOworCQkJd21iKCk7CisJCX0KKwkJb2hjaS0+bG9hZCBbaV0gKz0gZWQtPmxvYWQ7CisJfQorCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQgKz0gZWQtPmxvYWQgLyBlZC0+aW50ZXJ2YWw7Cit9CisKKy8qIGxpbmsgYW4gZWQgaW50byBvbmUgb2YgdGhlIEhDIGNoYWlucyAqLworCitzdGF0aWMgaW50IGVkX3NjaGVkdWxlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCit7CSAKKwlpbnQJYnJhbmNoOworCisJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9PSBIQ19TVEFURV9RVUlFU0NJTkcpCisJCXJldHVybiAtRUFHQUlOOworCisJZWQtPnN0YXRlID0gRURfT1BFUjsKKwllZC0+ZWRfcHJldiA9IE5VTEw7CisJZWQtPmVkX25leHQgPSBOVUxMOworCWVkLT5od05leHRFRCA9IDA7CisJd21iICgpOworCisJLyogd2UgY2FyZSBhYm91dCBybV9saXN0IHdoZW4gc2V0dGluZyBDTEUvQkxFIGluIGNhc2UgdGhlIEhDIHdhcyBhdAorCSAqIHdvcmsgb24gc29tZSBURCB3aGVuIENMRS9CTEUgd2FzIHR1cm5lZCBvZmYsIGFuZCBpc24ndCBxdWllc2NlZAorCSAqIHlldC4gIGZpbmlzaF91bmxpbmtzKCkgcmVzdGFydHMgYXMgbmVlZGVkLCBzb21lIHVwY29taW5nIElOVFJfU0YuCisJICoKKwkgKiBjb250cm9sIGFuZCBidWxrIEVEcyBhcmUgZG91Ymx5IGxpbmtlZCAoZWRfbmV4dCwgZWRfcHJldiksIGJ1dAorCSAqIHBlcmlvZGljIG9uZXMgYXJlIHNpbmdseSBsaW5rZWQgKGVkX25leHQpLiB0aGF0J3MgYmVjYXVzZSB0aGUKKwkgKiBwZXJpb2RpYyBzY2hlZHVsZSBlbmNvZGVzIGEgdHJlZSBsaWtlIGZpZ3VyZSAzLTUgaW4gdGhlIG9oY2kKKwkgKiBzcGVjOiAgZWFjaCBxaCBjYW4gaGF2ZSBzZXZlcmFsICJwcmV2aW91cyIgbm9kZXMsIGFuZCB0aGUgdHJlZQorCSAqIGRvZXNuJ3QgaGF2ZSB1bnVzZWQvaWRsZSBkZXNjcmlwdG9ycy4KKwkgKi8KKwlzd2l0Y2ggKGVkLT50eXBlKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJCWlmIChvaGNpLT5lZF9jb250cm9sdGFpbCA9PSBOVUxMKSB7CisJCQlXQVJOX09OIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0NMRSk7CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgZWQtPmRtYSwKKwkJCQkJJm9oY2ktPnJlZ3MtPmVkX2NvbnRyb2xoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCW9oY2ktPmVkX2NvbnRyb2x0YWlsLT5lZF9uZXh0ID0gZWQ7CisJCQlvaGNpLT5lZF9jb250cm9sdGFpbC0+aHdOZXh0RUQgPSBjcHVfdG9faGMzMiAob2hjaSwKKwkJCQkJCQkJZWQtPmRtYSk7CisJCX0KKwkJZWQtPmVkX3ByZXYgPSBvaGNpLT5lZF9jb250cm9sdGFpbDsKKwkJaWYgKCFvaGNpLT5lZF9jb250cm9sdGFpbCAmJiAhb2hjaS0+ZWRfcm1fbGlzdCkgeworCQkJd21iKCk7CisJCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ1RSTF9DTEU7CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgMCwgJm9oY2ktPnJlZ3MtPmVkX2NvbnRyb2xjdXJyZW50KTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLAorCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCX0KKwkJb2hjaS0+ZWRfY29udHJvbHRhaWwgPSBlZDsKKwkJYnJlYWs7CisKKwljYXNlIFBJUEVfQlVMSzoKKwkJaWYgKG9oY2ktPmVkX2J1bGt0YWlsID09IE5VTEwpIHsKKwkJCVdBUk5fT04gKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfQkxFKTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBlZC0+ZG1hLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCQl9IGVsc2UgeworCQkJb2hjaS0+ZWRfYnVsa3RhaWwtPmVkX25leHQgPSBlZDsKKwkJCW9oY2ktPmVkX2J1bGt0YWlsLT5od05leHRFRCA9IGNwdV90b19oYzMyIChvaGNpLAorCQkJCQkJCQllZC0+ZG1hKTsKKwkJfQorCQllZC0+ZWRfcHJldiA9IG9oY2ktPmVkX2J1bGt0YWlsOworCQlpZiAoIW9oY2ktPmVkX2J1bGt0YWlsICYmICFvaGNpLT5lZF9ybV9saXN0KSB7CisJCQl3bWIoKTsKKwkJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DVFJMX0JMRTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2N1cnJlbnQpOworCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJfQorCQlvaGNpLT5lZF9idWxrdGFpbCA9IGVkOworCQlicmVhazsKKworCS8vIGNhc2UgUElQRV9JTlRFUlJVUFQ6CisJLy8gY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCWRlZmF1bHQ6CisJCWJyYW5jaCA9IGJhbGFuY2UgKG9oY2ksIGVkLT5pbnRlcnZhbCwgZWQtPmxvYWQpOworCQlpZiAoYnJhbmNoIDwgMCkgeworCQkJb2hjaV9kYmcgKG9oY2ksCisJCQkJIkVSUiAlZCwgaW50ZXJ2YWwgJWQgbXNlY3MsIGxvYWQgJWRcbiIsCisJCQkJYnJhbmNoLCBlZC0+aW50ZXJ2YWwsIGVkLT5sb2FkKTsKKwkJCS8vIEZJWE1FIGlmIHRoZXJlIGFyZSBURHMgcXVldWVkLCBmYWlsIHRoZW0hCisJCQlyZXR1cm4gYnJhbmNoOworCQl9CisJCWVkLT5icmFuY2ggPSBicmFuY2g7CisJCXBlcmlvZGljX2xpbmsgKG9oY2ksIGVkKTsKKwl9CSAJCisKKwkvKiB0aGUgSEMgbWF5IG5vdCBzZWUgdGhlIHNjaGVkdWxlIHVwZGF0ZXMgeWV0LCBidXQgaWYgaXQgZG9lcworCSAqIHRoZW4gdGhleSdsbCBiZSBwcm9wZXJseSBvcmRlcmVkLgorCSAqLworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBzY2FuIHRoZSBwZXJpb2RpYyB0YWJsZSB0byBmaW5kIGFuZCB1bmxpbmsgdGhpcyBFRCAqLworc3RhdGljIHZvaWQgcGVyaW9kaWNfdW5saW5rIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCit7CisJaW50CWk7CisKKwlmb3IgKGkgPSBlZC0+YnJhbmNoOyBpIDwgTlVNX0lOVFM7IGkgKz0gZWQtPmludGVydmFsKSB7CisJCXN0cnVjdCBlZAkqdGVtcDsKKwkJc3RydWN0IGVkCSoqcHJldiA9ICZvaGNpLT5wZXJpb2RpYyBbaV07CisJCV9faGMzMgkJKnByZXZfcCA9ICZvaGNpLT5oY2NhLT5pbnRfdGFibGUgW2ldOworCisJCXdoaWxlICgqcHJldiAmJiAodGVtcCA9ICpwcmV2KSAhPSBlZCkgeworCQkJcHJldl9wID0gJnRlbXAtPmh3TmV4dEVEOworCQkJcHJldiA9ICZ0ZW1wLT5lZF9uZXh0OworCQl9CisJCWlmICgqcHJldikgeworCQkJKnByZXZfcCA9IGVkLT5od05leHRFRDsKKwkJCSpwcmV2ID0gZWQtPmVkX25leHQ7CisJCX0KKwkJb2hjaS0+bG9hZCBbaV0gLT0gZWQtPmxvYWQ7CisJfQkKKwlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkIC09IGVkLT5sb2FkIC8gZWQtPmludGVydmFsOworCisJb2hjaV92ZGJnIChvaGNpLCAidW5saW5rICVzZWQgJXAgYnJhbmNoICVkIFslZHVzLl0sIGludGVydmFsICVkXG4iLAorCQkoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9JU08pKSA/ICJpc28gIiA6ICIiLAorCQllZCwgZWQtPmJyYW5jaCwgZWQtPmxvYWQsIGVkLT5pbnRlcnZhbCk7Cit9CisKKy8qIHVubGluayBhbiBlZCBmcm9tIG9uZSBvZiB0aGUgSEMgY2hhaW5zLiAKKyAqIGp1c3QgdGhlIGxpbmsgdG8gdGhlIGVkIGlzIHVubGlua2VkLgorICogdGhlIGxpbmsgZnJvbSB0aGUgZWQgc3RpbGwgcG9pbnRzIHRvIGFub3RoZXIgb3BlcmF0aW9uYWwgZWQgb3IgMAorICogc28gdGhlIEhDIGNhbiBldmVudHVhbGx5IGZpbmlzaCB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgdW5saW5rZWQgZWQKKyAqIChhc3N1bWluZyBpdCBhbHJlYWR5IHN0YXJ0ZWQgdGhhdCwgd2hpY2ggbmVlZG4ndCBiZSB0cnVlKS4KKyAqCisgKiBFRF9VTkxJTksgaXMgYSB0cmFuc2llbnQgc3RhdGU6IHRoZSBIQyBtYXkgc3RpbGwgc2VlIHRoaXMgRUQsIGJ1dCBzb29uCisgKiBpdCB3b24ndC4gIEVEX1NLSVAgbWVhbnMgdGhlIEhDIHdpbGwgZmluaXNoIGl0cyBjdXJyZW50IHRyYW5zYWN0aW9uLAorICogYnV0IHdvbid0IHN0YXJ0IGFueXRoaW5nIG5ldy4gIFRoZSBURCBxdWV1ZSBtYXkgc3RpbGwgZ3JvdzsgZGV2aWNlCisgKiBkcml2ZXJzIGRvbid0IGtub3cgYWJvdXQgdGhpcyBIQ0QtaW50ZXJuYWwgc3RhdGUuCisgKgorICogV2hlbiB0aGUgSEMgY2FuJ3Qgc2VlIHRoZSBFRCwgc29tZXRoaW5nIGNoYW5nZXMgRURfVU5MSU5LIHRvIG9uZSBvZjoKKyAqCisgKiAgLSBFRF9PUEVSOiB3aGVuIHRoZXJlJ3MgYW55IHJlcXVlc3QgcXVldWVkLCB0aGUgRUQgZ2V0cyByZXNjaGVkdWxlZAorICogICAgaW1tZWRpYXRlbHkuICBIQyBzaG91bGQgYmUgd29ya2luZyBvbiB0aGVtLgorICoKKyAqICAtIEVEX0lETEU6ICB3aGVuIHRoZXJlJ3Mgbm8gVEQgcXVldWUuIHRoZXJlJ3Mgbm8gcmVhc29uIGZvciB0aGUgSEMKKyAqICAgIHRvIGNhcmUgYWJvdXQgdGhpcyBFRDsgc2FmZSB0byBkaXNhYmxlIHRoZSBlbmRwb2ludC4KKyAqCisgKiBXaGVuIGZpbmlzaF91bmxpbmtzKCkgcnVucyBsYXRlciwgYWZ0ZXIgU09GIGludGVycnVwdCwgaXQgd2lsbCBvZnRlbgorICogY29tcGxldGUgb25lIG9yIG1vcmUgVVJCIHVubGlua3MgYmVmb3JlIG1ha2luZyB0aGF0IHN0YXRlIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgZWRfZGVzY2hlZHVsZSAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKSAKK3sKKwllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQKTsKKwl3bWIgKCk7CisJZWQtPnN0YXRlID0gRURfVU5MSU5LOworCisJLyogVG8gZGVzY2hlZHVsZSBzb21ldGhpbmcgZnJvbSB0aGUgY29udHJvbCBvciBidWxrIGxpc3QsIGp1c3QKKwkgKiBjbGVhciBDTEUvQkxFIGFuZCB3YWl0LiAgVGhlcmUncyBubyBzYWZlIHdheSB0byBzY3J1YiBvdXQgbGlzdAorCSAqIGhlYWQvY3VycmVudCByZWdpc3RlcnMgdW50aWwgbGF0ZXIsIGFuZCAibGF0ZXIiIGlzbid0IHZlcnkKKwkgKiB0aWdodGx5IHNwZWNpZmllZC4gIEZpZ3VyZSA2LTUgYW5kIFNlY3Rpb24gNi40LjIuMiBzaG93IGhvdworCSAqIHRoZSBIQyBpcyByZWFkaW5nIHRoZSBFRCBxdWV1ZXMgKHdoaWxlIHdlIG1vZGlmeSB0aGVtKS4KKwkgKgorCSAqIEZvciBub3csIGVkX3NjaGVkdWxlKCkgaXMgImxhdGVyIi4gIEl0IG1pZ2h0IGJlIGdvb2QgcGFyYW5vaWEKKwkgKiB0byBzY3J1YiB0aG9zZSByZWdpc3RlcnMgaW4gZmluaXNoX3VubGlua3MoKSwgaW4gY2FzZSBvZiBidWdzCisJICogdGhhdCBtYWtlIHRoZSBIQyB0cnkgdG8gdXNlIHRoZW0uCisJICovCisJc3dpdGNoIChlZC0+dHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQkvKiByZW1vdmUgRUQgZnJvbSB0aGUgSEMncyBsaXN0OiAqLworCQlpZiAoZWQtPmVkX3ByZXYgPT0gTlVMTCkgeworCQkJaWYgKCFlZC0+aHdOZXh0RUQpIHsKKwkJCQlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfQ0xFOworCQkJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkJCS8vIGEgb2hjaV9yZWFkbCgpIGxhdGVyIHN5bmNzIENMRSB3aXRoIHRoZSBIQworCQkJfSBlbHNlCisJCQkJb2hjaV93cml0ZWwgKG9oY2ksCisJCQkJCWhjMzJfdG9fY3B1cCAob2hjaSwgJmVkLT5od05leHRFRCksCisJCQkJCSZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJCX0gZWxzZSB7CisJCQllZC0+ZWRfcHJldi0+ZWRfbmV4dCA9IGVkLT5lZF9uZXh0OworCQkJZWQtPmVkX3ByZXYtPmh3TmV4dEVEID0gZWQtPmh3TmV4dEVEOworCQl9CisJCS8qIHJlbW92ZSBFRCBmcm9tIHRoZSBIQ0QncyBsaXN0OiAqLworCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwgPT0gZWQpIHsKKwkJCW9oY2ktPmVkX2NvbnRyb2x0YWlsID0gZWQtPmVkX3ByZXY7CisJCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwpCisJCQkJb2hjaS0+ZWRfY29udHJvbHRhaWwtPmVkX25leHQgPSBOVUxMOworCQl9IGVsc2UgaWYgKGVkLT5lZF9uZXh0KSB7CisJCQllZC0+ZWRfbmV4dC0+ZWRfcHJldiA9IGVkLT5lZF9wcmV2OworCQl9CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0JVTEs6CisJCS8qIHJlbW92ZSBFRCBmcm9tIHRoZSBIQydzIGxpc3Q6ICovCisJCWlmIChlZC0+ZWRfcHJldiA9PSBOVUxMKSB7CisJCQlpZiAoIWVkLT5od05leHRFRCkgeworCQkJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9CTEU7CisJCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCQkJLy8gYSBvaGNpX3JlYWRsKCkgbGF0ZXIgc3luY3MgQkxFIHdpdGggdGhlIEhDCisJCQl9IGVsc2UKKwkJCQlvaGNpX3dyaXRlbCAob2hjaSwKKwkJCQkJaGMzMl90b19jcHVwIChvaGNpLCAmZWQtPmh3TmV4dEVEKSwKKwkJCQkJJm9oY2ktPnJlZ3MtPmVkX2J1bGtoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCWVkLT5lZF9wcmV2LT5lZF9uZXh0ID0gZWQtPmVkX25leHQ7CisJCQllZC0+ZWRfcHJldi0+aHdOZXh0RUQgPSBlZC0+aHdOZXh0RUQ7CisJCX0KKwkJLyogcmVtb3ZlIEVEIGZyb20gdGhlIEhDRCdzIGxpc3Q6ICovCisJCWlmIChvaGNpLT5lZF9idWxrdGFpbCA9PSBlZCkgeworCQkJb2hjaS0+ZWRfYnVsa3RhaWwgPSBlZC0+ZWRfcHJldjsKKwkJCWlmIChvaGNpLT5lZF9idWxrdGFpbCkKKwkJCQlvaGNpLT5lZF9idWxrdGFpbC0+ZWRfbmV4dCA9IE5VTEw7CisJCX0gZWxzZSBpZiAoZWQtPmVkX25leHQpIHsKKwkJCWVkLT5lZF9uZXh0LT5lZF9wcmV2ID0gZWQtPmVkX3ByZXY7CisJCX0KKwkJYnJlYWs7CisKKwkvLyBjYXNlIFBJUEVfSU5URVJSVVBUOgorCS8vIGNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwlkZWZhdWx0OgorCQlwZXJpb2RpY191bmxpbmsgKG9oY2ksIGVkKTsKKwkJYnJlYWs7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGdldCBhbmQgbWF5YmUgKHJlKWluaXQgYW4gZW5kcG9pbnQuIGluaXQgX3Nob3VsZF8gYmUgZG9uZSBvbmx5IGFzIHBhcnQKKyAqIG9mIGVudW1lcmF0aW9uLCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oKSBvciB1c2Jfc2V0X2ludGVyZmFjZSgpLgorICovCitzdGF0aWMgc3RydWN0IGVkICplZF9nZXQgKAorCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2ksCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiwKKwl1bnNpZ25lZCBpbnQJCXBpcGUsCisJaW50CQkJaW50ZXJ2YWwKKykgeworCXN0cnVjdCBlZAkJKmVkOyAKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJaWYgKCEoZWQgPSBlcC0+aGNwcml2KSkgeworCQlzdHJ1Y3QgdGQJKnRkOworCQlpbnQJCWlzX291dDsKKwkJdTMyCQlpbmZvOworCisJCWVkID0gZWRfYWxsb2MgKG9oY2ksIEdGUF9BVE9NSUMpOworCQlpZiAoIWVkKSB7CisJCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCQlnb3RvIGRvbmU7CisJCX0KKworICAJCS8qIGR1bW15IHRkOyBlbmQgb2YgdGQgbGlzdCBmb3IgZWQgKi8KKwkJdGQgPSB0ZF9hbGxvYyAob2hjaSwgR0ZQX0FUT01JQyk7CisgCQlpZiAoIXRkKSB7CisJCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCQllZF9mcmVlIChvaGNpLCBlZCk7CisJCQllZCA9IE5VTEw7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZWQtPmR1bW15ID0gdGQ7CisJCWVkLT5od1RhaWxQID0gY3B1X3RvX2hjMzIgKG9oY2ksIHRkLT50ZF9kbWEpOworCQllZC0+aHdIZWFkUCA9IGVkLT5od1RhaWxQOwkvKiBFRF9DLCBFRF9IIHplcm9lZCAqLworCQllZC0+c3RhdGUgPSBFRF9JRExFOworCisJCWlzX291dCA9ICEoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pOworCisJCS8qIEZJWE1FIHVzYmNvcmUgY2hhbmdlcyBkZXYtPmRldm51bSBiZWZvcmUgU0VUX0FERFJFU1MKKwkJICogc3VjZWVkcyAuLi4gb3RoZXJ3aXNlIHdlIHdvdWxkbid0IG5lZWQgInBpcGUiLgorCQkgKi8KKwkJaW5mbyA9IHVzYl9waXBlZGV2aWNlIChwaXBlKTsKKwkJZWQtPnR5cGUgPSB1c2JfcGlwZXR5cGUocGlwZSk7CisKKwkJaW5mbyB8PSAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIH5VU0JfRElSX0lOKSA8PCA3OworCQlpbmZvIHw9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSA8PCAxNjsKKwkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCisJCQlpbmZvIHw9IEVEX0xPV1NQRUVEOworCQkvKiBvbmx5IGNvbnRyb2wgdHJhbnNmZXJzIHN0b3JlIHBpZHMgaW4gdGRzICovCisJCWlmIChlZC0+dHlwZSAhPSBQSVBFX0NPTlRST0wpIHsKKwkJCWluZm8gfD0gaXNfb3V0ID8gRURfT1VUIDogRURfSU47CisJCQlpZiAoZWQtPnR5cGUgIT0gUElQRV9CVUxLKSB7CisJCQkJLyogcGVyaW9kaWMgdHJhbnNmZXJzLi4uICovCisJCQkJaWYgKGVkLT50eXBlID09IFBJUEVfSVNPQ0hST05PVVMpCisJCQkJCWluZm8gfD0gRURfSVNPOworCQkJCWVsc2UgaWYgKGludGVydmFsID4gMzIpCS8qIGlzbyBjYW4gYmUgYmlnZ2VyICovCisJCQkJCWludGVydmFsID0gMzI7CisJCQkJZWQtPmludGVydmFsID0gaW50ZXJ2YWw7CisJCQkJZWQtPmxvYWQgPSB1c2JfY2FsY19idXNfdGltZSAoCisJCQkJCXVkZXYtPnNwZWVkLCAhaXNfb3V0LAorCQkJCQllZC0+dHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTLAorCQkJCQlsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpCisJCQkJCQkvIDEwMDA7CisJCQl9CisJCX0KKwkJZWQtPmh3SU5GTyA9IGNwdV90b19oYzMyKG9oY2ksIGluZm8pOworCisJCWVwLT5oY3ByaXYgPSBlZDsKKwl9CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZWQ7IAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiByZXF1ZXN0IHVubGlua2luZyBvZiBhbiBlbmRwb2ludCBmcm9tIGFuIG9wZXJhdGlvbmFsIEhDLgorICogcHV0IHRoZSBlcCBvbiB0aGUgcm1fbGlzdAorICogcmVhbCB3b3JrIGlzIGRvbmUgYXQgdGhlIG5leHQgc3RhcnQgZnJhbWUgKFNGKSBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqIGNhbGxlciBndWFyYW50ZWVzIEhDRCBpcyBydW5uaW5nLCBzbyBoYXJkd2FyZSBhY2Nlc3MgaXMgc2FmZSwKKyAqIGFuZCB0aGF0IGVkLT5zdGF0ZSBpcyBFRF9PUEVSCisgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X2VkX3VubGluayAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKQoreyAgICAKKwllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBFRF9ERVFVRVVFKTsKKwllZF9kZXNjaGVkdWxlIChvaGNpLCBlZCk7CisKKwkvKiBybV9saXN0IGlzIGp1c3Qgc2luZ2x5IGxpbmtlZCwgZm9yIHNpbXBsaWNpdHkgKi8KKwllZC0+ZWRfbmV4dCA9IG9oY2ktPmVkX3JtX2xpc3Q7CisJZWQtPmVkX3ByZXYgPSBOVUxMOworCW9oY2ktPmVkX3JtX2xpc3QgPSBlZDsKKworCS8qIGVuYWJsZSBTT0YgaW50ZXJydXB0ICovCisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfU0YsICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKKwkvLyBmbHVzaCB0aG9zZSB3cml0ZXMsIGFuZCBnZXQgbGF0ZXN0IEhDQ0EgY29udGVudHMKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJLyogU0YgaW50ZXJydXB0IG1pZ2h0IGdldCBkZWxheWVkOyByZWNvcmQgdGhlIGZyYW1lIGNvdW50ZXIgdmFsdWUgdGhhdAorCSAqIGluZGljYXRlcyB3aGVuIHRoZSBIQyBpc24ndCBsb29raW5nIGF0IGl0LCBzbyBjb25jdXJyZW50IHVubGlua3MKKwkgKiBiZWhhdmUuICBmcmFtZV9ubyB3cmFwcyBldmVyeSAyXjE2IG1zZWMsIGFuZCBjaGFuZ2VzIHJpZ2h0IGJlZm9yZQorCSAqIFNGIGlzIHRyaWdnZXJlZC4KKwkgKi8KKwllZC0+dGljayA9IG9oY2lfZnJhbWVfbm8ob2hjaSkgKyAxOworCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIFREIGhhbmRsaW5nIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZW5xdWV1ZSBuZXh0IFREIGZvciB0aGlzIFVSQiAoT0hDSSBzcGVjIDUuMi44LjIpICovCisKK3N0YXRpYyB2b2lkCit0ZF9maWxsIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHUzMiBpbmZvLAorCWRtYV9hZGRyX3QgZGF0YSwgaW50IGxlbiwKKwlzdHJ1Y3QgdXJiICp1cmIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgdGQJCSp0ZCwgKnRkX3B0OworCXN0cnVjdCB1cmJfcHJpdgkJKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJaW50CQkJaXNfaXNvID0gaW5mbyAmIFREX0lTTzsKKwlpbnQJCQloYXNoOworCisJLy8gQVNTRVJUIChpbmRleCA8IHVyYl9wcml2LT5sZW5ndGgpOworCisJLyogYWltIGZvciBvbmx5IG9uZSBpbnRlcnJ1cHQgcGVyIHVyYi4gIG1vc3RseSBhcHBsaWVzIHRvIGNvbnRyb2wKKwkgKiBhbmQgaXNvOyBvdGhlciB1cmJzIHJhcmVseSBuZWVkIG1vcmUgdGhhbiBvbmUgVEQgcGVyIHVyYi4KKwkgKiB0aGlzIHdheSwgb25seSBmaW5hbCB0ZHMgKG9yIG9uZXMgd2l0aCBhbiBlcnJvcikgY2F1c2UgSVJRcy4KKwkgKiBhdCBsZWFzdCBpbW1lZGlhdGVseTsgdXNlIERJPTYgaW4gY2FzZSBhbnkgY29udHJvbCByZXF1ZXN0IGlzCisJICogdGVtcHRlZCB0byBkaWUgcGFydCB3YXkgdGhyb3VnaC4gIChhbmQgdG8gZm9yY2UgdGhlIGhjIHRvIGZsdXNoCisJICogaXRzIGRvbmVsaXN0IHNvb25pc2gsIGV2ZW4gb24gdW5saW5rIHBhdGhzLikKKwkgKgorCSAqIE5PVEU6IGNvdWxkIGRlbGF5IGludGVycnVwdHMgZXZlbiBmb3IgdGhlIGxhc3QgVEQsIGFuZCBnZXQgZmV3ZXIKKwkgKiBpbnRlcnJ1cHRzIC4uLiBpbmNyZWFzaW5nIHBlci11cmIgbGF0ZW5jeSBieSBzaGFyaW5nIGludGVycnVwdHMuCisJICogRHJpdmVycyB0aGF0IHF1ZXVlIGJ1bGsgdXJicyBtYXkgcmVxdWVzdCB0aGF0IGJlaGF2aW9yLgorCSAqLworCWlmIChpbmRleCAhPSAodXJiX3ByaXYtPmxlbmd0aCAtIDEpCisJCQl8fCAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19JTlRFUlJVUFQpKQorCQlpbmZvIHw9IFREX0RJX1NFVCAoNik7CisKKwkvKiB1c2UgdGhpcyB0ZCBhcyB0aGUgbmV4dCBkdW1teSAqLworCXRkX3B0ID0gdXJiX3ByaXYtPnRkIFtpbmRleF07CisKKwkvKiBmaWxsIHRoZSBvbGQgZHVtbXkgVEQgKi8KKwl0ZCA9IHVyYl9wcml2LT50ZCBbaW5kZXhdID0gdXJiX3ByaXYtPmVkLT5kdW1teTsKKwl1cmJfcHJpdi0+ZWQtPmR1bW15ID0gdGRfcHQ7CisKKwl0ZC0+ZWQgPSB1cmJfcHJpdi0+ZWQ7CisJdGQtPm5leHRfZGxfdGQgPSBOVUxMOworCXRkLT5pbmRleCA9IGluZGV4OworCXRkLT51cmIgPSB1cmI7IAorCXRkLT5kYXRhX2RtYSA9IGRhdGE7CisJaWYgKCFsZW4pCisJCWRhdGEgPSAwOworCisJdGQtPmh3SU5GTyA9IGNwdV90b19oYzMyIChvaGNpLCBpbmZvKTsKKwlpZiAoaXNfaXNvKSB7CisJCXRkLT5od0NCUCA9IGNwdV90b19oYzMyIChvaGNpLCBkYXRhICYgMHhGRkZGRjAwMCk7CisJCSpvaGNpX2h3UFNXcChvaGNpLCB0ZCwgMCkgPSBjcHVfdG9faGMxNiAob2hjaSwKKwkJCQkJCShkYXRhICYgMHgwRkZGKSB8IDB4RTAwMCk7CisJCXRkLT5lZC0+bGFzdF9pc28gPSBpbmZvICYgMHhmZmZmOworCX0gZWxzZSB7CisJCXRkLT5od0NCUCA9IGNwdV90b19oYzMyIChvaGNpLCBkYXRhKTsgCisJfQkJCQorCWlmIChkYXRhKQorCQl0ZC0+aHdCRSA9IGNwdV90b19oYzMyIChvaGNpLCBkYXRhICsgbGVuIC0gMSk7CisJZWxzZQorCQl0ZC0+aHdCRSA9IDA7CisJdGQtPmh3TmV4dFREID0gY3B1X3RvX2hjMzIgKG9oY2ksIHRkX3B0LT50ZF9kbWEpOworCisJLyogYXBwZW5kIHRvIHF1ZXVlICovCisJbGlzdF9hZGRfdGFpbCAoJnRkLT50ZF9saXN0LCAmdGQtPmVkLT50ZF9saXN0KTsKKworCS8qIGhhc2ggaXQgZm9yIGxhdGVyIHJldmVyc2UgbWFwcGluZyAqLworCWhhc2ggPSBURF9IQVNIX0ZVTkMgKHRkLT50ZF9kbWEpOworCXRkLT50ZF9oYXNoID0gb2hjaS0+dGRfaGFzaCBbaGFzaF07CisJb2hjaS0+dGRfaGFzaCBbaGFzaF0gPSB0ZDsKKworCS8qIEhDIG1pZ2h0IHJlYWQgdGhlIFREIChvciBjYWNoZWxpbmVzKSByaWdodCBhd2F5IC4uLiAqLworCXdtYiAoKTsKKwl0ZC0+ZWQtPmh3VGFpbFAgPSB0ZC0+aHdOZXh0VEQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFByZXBhcmUgYWxsIFREcyBvZiBhIHRyYW5zZmVyLCBhbmQgcXVldWUgdGhlbSBvbnRvIHRoZSBFRC4KKyAqIENhbGxlciBndWFyYW50ZWVzIEhDIGlzIGFjdGl2ZS4KKyAqIFVzdWFsbHkgdGhlIEVEIGlzIGFscmVhZHkgb24gdGhlIHNjaGVkdWxlLCBzbyBURHMgbWlnaHQgYmUKKyAqIHByb2Nlc3NlZCBhcyBzb29uIGFzIHRoZXkncmUgcXVldWVkLgorICovCitzdGF0aWMgdm9pZCB0ZF9zdWJtaXRfdXJiICgKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2ksCisJc3RydWN0IHVyYgkqdXJiCispIHsKKwlzdHJ1Y3QgdXJiX3ByaXYJKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJZG1hX2FkZHJfdAlkYXRhOworCWludAkJZGF0YV9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJaW50CQljbnQgPSAwOworCXUzMgkJaW5mbyA9IDA7CisJaW50CQlpc19vdXQgPSB1c2JfcGlwZW91dCAodXJiLT5waXBlKTsKKwlpbnQJCXBlcmlvZGljID0gMDsKKworCS8qIE9IQ0kgaGFuZGxlcyB0aGUgYnVsay9pbnRlcnJ1cHQgZGF0YSB0b2dnbGVzIGl0c2VsZi4gIFdlIGp1c3QKKwkgKiB1c2UgdGhlIGRldmljZSB0b2dnbGUgYml0cyBmb3IgcmVzZXR0aW5nLCBhbmQgcmVseSBvbiB0aGUgZmFjdAorCSAqIHRoYXQgcmVzZXR0aW5nIHRvZ2dsZSBpcyBtZWFuaW5nbGVzcyBpZiB0aGUgZW5kcG9pbnQgaXMgYWN0aXZlLgorCSAqLworICAJaWYgKCF1c2JfZ2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgaXNfb3V0KSkgeworCQl1c2Jfc2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCWlzX291dCwgMSk7CisJCXVyYl9wcml2LT5lZC0+aHdIZWFkUCAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX0MpOworCX0KKworCXVyYl9wcml2LT50ZF9jbnQgPSAwOworCWxpc3RfYWRkICgmdXJiX3ByaXYtPnBlbmRpbmcsICZvaGNpLT5wZW5kaW5nKTsKKworCWlmIChkYXRhX2xlbikKKwkJZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCWVsc2UKKwkJZGF0YSA9IDA7CisKKwkvKiBOT1RFOiAgVERfQ0MgaXMgc2V0IHNvIHdlIGNhbiB0ZWxsIHdoaWNoIFREcyB0aGUgSEMgcHJvY2Vzc2VkIGJ5CisJICogdXNpbmcgVERfQ0NfR0VULCBhcyB3ZWxsIGFzIGJ5IHNlZWluZyB0aGVtIG9uIHRoZSBkb25lIGxpc3QuCisJICogKENDID0gTm90QWNjZXNzZWQgLi4uIDB4MEYsIG9yIDB4MEUgaW4gUFNXcyBmb3IgSVNPLikKKwkgKi8KKwlzd2l0Y2ggKHVyYl9wcml2LT5lZC0+dHlwZSkgeworCisJLyogQnVsayBhbmQgaW50ZXJydXB0IGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB3aGVyZSBpbiB0aGUgc2NoZWR1bGUKKwkgKiB0aGVpciBFRHMgbGl2ZS4KKwkgKi8KKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkvKiAuLi4gYW5kIHBlcmlvZGljIHVyYnMgaGF2ZSBleHRyYSBhY2NvdW50aW5nICovCisJCXBlcmlvZGljID0gb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzKysgPT0gMAorCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgUElQRV9CVUxLOgorCQlpbmZvID0gaXNfb3V0CisJCQk/IFREX1RfVE9HR0xFIHwgVERfQ0MgfCBURF9EUF9PVVQKKwkJCTogVERfVF9UT0dHTEUgfCBURF9DQyB8IFREX0RQX0lOOworCQkvKiBURHMgX2NvdWxkXyB0cmFuc2ZlciB1cCB0byA4SyBlYWNoICovCisJCXdoaWxlIChkYXRhX2xlbiA+IDQwOTYpIHsKKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIDQwOTYsIHVyYiwgY250KTsKKwkJCWRhdGEgKz0gNDA5NjsKKwkJCWRhdGFfbGVuIC09IDQwOTY7CisJCQljbnQrKzsKKwkJfQorCQkvKiBtYXliZSBhdm9pZCBFRCBoYWx0IG9uIGZpbmFsIFREIHNob3J0IHJlYWQgKi8KKwkJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spKQorCQkJaW5mbyB8PSBURF9SOworCQl0ZF9maWxsIChvaGNpLCBpbmZvLCBkYXRhLCBkYXRhX2xlbiwgdXJiLCBjbnQpOworCQljbnQrKzsKKwkJaWYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKQorCQkJCSYmIGNudCA8IHVyYl9wcml2LT5sZW5ndGgpIHsKKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIDAsIDAsIHVyYiwgY250KTsKKwkJCWNudCsrOworCQl9CisJCS8qIG1heWJlIGtpY2tzdGFydCBidWxrIGxpc3QgKi8KKwkJaWYgKHVyYl9wcml2LT5lZC0+dHlwZSA9PSBQSVBFX0JVTEspIHsKKwkJCXdtYiAoKTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0JMRiwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBjb250cm9sIG1hbmFnZXMgREFUQTAvREFUQTEgdG9nZ2xlIHBlci1yZXF1ZXN0OyBTRVRVUCByZXNldHMgaXQsCisJICogYW55IERBVEEgcGhhc2Ugd29ya3Mgbm9ybWFsbHksIGFuZCB0aGUgU1RBVFVTIGFjayBpcyBzcGVjaWFsLgorCSAqLworCWNhc2UgUElQRV9DT05UUk9MOgorCQlpbmZvID0gVERfQ0MgfCBURF9EUF9TRVRVUCB8IFREX1RfREFUQTA7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIHVyYi0+c2V0dXBfZG1hLCA4LCB1cmIsIGNudCsrKTsKKwkJaWYgKGRhdGFfbGVuID4gMCkgeworCQkJaW5mbyA9IFREX0NDIHwgVERfUiB8IFREX1RfREFUQTE7CisJCQlpbmZvIHw9IGlzX291dCA/IFREX0RQX09VVCA6IFREX0RQX0lOOworCQkJLyogTk9URTogIG1pc2hhbmRsZXMgdHJhbnNmZXJzID44Sywgc29tZSA+NEsgKi8KKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIGRhdGFfbGVuLCB1cmIsIGNudCsrKTsKKwkJfQorCQlpbmZvID0gKGlzX291dCB8fCBkYXRhX2xlbiA9PSAwKQorCQkJPyBURF9DQyB8IFREX0RQX0lOIHwgVERfVF9EQVRBMQorCQkJOiBURF9DQyB8IFREX0RQX09VVCB8IFREX1RfREFUQTE7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIDAsIHVyYiwgY250KyspOworCQkvKiBtYXliZSBraWNrc3RhcnQgY29udHJvbCBsaXN0ICovCisJCXdtYiAoKTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQ0xGLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsKKwkJYnJlYWs7CisKKwkvKiBJU08gaGFzIG5vIHJldHJhbnNtaXQsIHNvIG5vIHRvZ2dsZTsgYW5kIGl0IHVzZXMgc3BlY2lhbCBURHMuCisJICogRWFjaCBURCBjb3VsZCBoYW5kbGUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZnJhbWVzIChpbnRlcnZhbCAxKTsKKwkgKiB3ZSBjb3VsZCBvZnRlbiByZWR1Y2UgdGhlIG51bWJlciBvZiBURHMgaGVyZS4KKwkgKi8KKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWZvciAoY250ID0gMDsgY250IDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgY250KyspIHsKKwkJCWludAlmcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CisKKwkJCS8vIEZJWE1FIHNjaGVkdWxpbmcgc2hvdWxkIGhhbmRsZSBmcmFtZSBjb3VudGVyCisJCQkvLyByb2xsLWFyb3VuZCAuLi4gZXhvdGljIGNhc2UgKGFuZCBPSENJIGhhcworCQkJLy8gYSAyXjE2IGlzbyByYW5nZSwgdnMgb3RoZXIgSENzIG1heCBvZiAyXjEwKQorCQkJZnJhbWUgKz0gY250ICogdXJiLT5pbnRlcnZhbDsKKwkJCWZyYW1lICY9IDB4ZmZmZjsKKwkJCXRkX2ZpbGwgKG9oY2ksIFREX0NDIHwgVERfSVNPIHwgZnJhbWUsCisJCQkJZGF0YSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2NudF0ub2Zmc2V0LAorCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2NudF0ubGVuZ3RoLCB1cmIsIGNudCk7CisJCX0KKwkJcGVyaW9kaWMgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKysgPT0gMAorCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzID09IDA7CisJCWJyZWFrOworCX0KKworCS8qIHN0YXJ0IHBlcmlvZGljIGRtYSBpZiBuZWVkZWQgKi8KKwlpZiAocGVyaW9kaWMpIHsKKwkJd21iICgpOworCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ1RSTF9QTEV8T0hDSV9DVFJMX0lFOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KKworCS8vIEFTU0VSVCAodXJiX3ByaXYtPmxlbmd0aCA9PSBjbnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBEb25lIExpc3QgaGFuZGxpbmcgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjYWxjdWxhdGUgdHJhbnNmZXIgbGVuZ3RoL3N0YXR1cyBhbmQgdXBkYXRlIHRoZSB1cmIKKyAqIFBSRUNPTkRJVElPTjogIGlycXNhZmUgKG9ubHkgZm9yIHVyYi0+c3RhdHVzIGxvY2tpbmcpCisgKi8KK3N0YXRpYyB2b2lkIHRkX2RvbmUgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdGQgKnRkKQoreworCXUzMgl0ZElORk8gPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdJTkZPKTsKKwlpbnQJY2MgPSAwOworCisJbGlzdF9kZWwgKCZ0ZC0+dGRfbGlzdCk7CisKKwkvKiBJU08gLi4uIGRyaXZlcnMgc2VlIHBlci1URCBsZW5ndGgvc3RhdHVzICovCisgIAlpZiAodGRJTkZPICYgVERfSVNPKSB7CisgCQl1MTYJdGRQU1cgPSBvaGNpX2h3UFNXIChvaGNpLCB0ZCwgMCk7CisJCWludAlkbGVuID0gMDsKKworCQkvKiBOT1RFOiAgYXNzdW1lcyBGQyBpbiB0ZElORk8gPT0gMCwgYW5kIHRoYXQKKwkJICogb25seSB0aGUgZmlyc3Qgb2YgMC4uTUFYUFNXIHBzd3MgaXMgdXNlZC4KKwkJICovCisKKyAJCWNjID0gKHRkUFNXID4+IDEyKSAmIDB4RjsKKyAgCQlpZiAodGRJTkZPICYgVERfQ0MpCS8qIGhjIGRpZG4ndCB0b3VjaD8gKi8KKwkJCXJldHVybjsKKworCQlpZiAodXNiX3BpcGVvdXQgKHVyYi0+cGlwZSkpCisJCQlkbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzYyBbdGQtPmluZGV4XS5sZW5ndGg7CisJCWVsc2UgeworCQkJLyogc2hvcnQgcmVhZHMgYXJlIGFsd2F5cyBPSyBmb3IgSVNPICovCisJCQlpZiAoY2MgPT0gVERfREFUQVVOREVSUlVOKQorCQkJCWNjID0gVERfQ0NfTk9FUlJPUjsKKwkJCWRsZW4gPSB0ZFBTVyAmIDB4M2ZmOworCQl9CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBkbGVuOworCQl1cmItPmlzb19mcmFtZV9kZXNjIFt0ZC0+aW5kZXhdLmFjdHVhbF9sZW5ndGggPSBkbGVuOworCQl1cmItPmlzb19mcmFtZV9kZXNjIFt0ZC0+aW5kZXhdLnN0YXR1cyA9IGNjX3RvX2Vycm9yIFtjY107CisKKwkJaWYgKGNjICE9IFREX0NDX05PRVJST1IpCisJCQlvaGNpX3ZkYmcgKG9oY2ksCisJCQkJInVyYiAlcCBpc28gdGQgJXAgKCVkKSBsZW4gJWQgY2MgJWRcbiIsCisJCQkJdXJiLCB0ZCwgMSArIHRkLT5pbmRleCwgZGxlbiwgY2MpOworCisJLyogQlVMSywgSU5ULCBDT05UUk9MIC4uLiBkcml2ZXJzIHNlZSBhZ2dyZWdhdGUgbGVuZ3RoL3N0YXR1cywKKwkgKiBleGNlcHQgdGhhdCAic2V0dXAiIGJ5dGVzIGFyZW4ndCBjb3VudGVkIGFuZCAic2hvcnQiIHRyYW5zZmVycworCSAqIG1pZ2h0IG5vdCBiZSByZXBvcnRlZCBhcyBlcnJvcnMuCisJICovCisJfSBlbHNlIHsKKwkJaW50CXR5cGUgPSB1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSk7CisJCXUzMgl0ZEJFID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3QkUpOworCisgIAkJY2MgPSBURF9DQ19HRVQgKHRkSU5GTyk7CisKKwkJLyogdXBkYXRlIHBhY2tldCBzdGF0dXMgaWYgbmVlZGVkIChzaG9ydCBpcyBub3JtYWxseSBvaykgKi8KKwkJaWYgKGNjID09IFREX0RBVEFVTkRFUlJVTgorCQkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spKQorCQkJY2MgPSBURF9DQ19OT0VSUk9SOworCQlpZiAoY2MgIT0gVERfQ0NfTk9FUlJPUiAmJiBjYyA8IDB4MEUpIHsKKwkJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJCXVyYi0+c3RhdHVzID0gY2NfdG9fZXJyb3IgW2NjXTsKKwkJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKwkJfQorCisJCS8qIGNvdW50IGFsbCBub24tZW1wdHkgcGFja2V0cyBleGNlcHQgY29udHJvbCBTRVRVUCBwYWNrZXQgKi8KKwkJaWYgKCh0eXBlICE9IFBJUEVfQ09OVFJPTCB8fCB0ZC0+aW5kZXggIT0gMCkgJiYgdGRCRSAhPSAwKSB7CisJCQlpZiAodGQtPmh3Q0JQID09IDApCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IHRkQkUgLSB0ZC0+ZGF0YV9kbWEgKyAxOworCQkJZWxzZQorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPQorCQkJCQkgIGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0NCUCkKKwkJCQkJLSB0ZC0+ZGF0YV9kbWE7CisJCX0KKworCQlpZiAoY2MgIT0gVERfQ0NfTk9FUlJPUiAmJiBjYyA8IDB4MEUpCisJCQlvaGNpX3ZkYmcgKG9oY2ksCisJCQkJInVyYiAlcCB0ZCAlcCAoJWQpIGNjICVkLCBsZW49JWQvJWRcbiIsCisJCQkJdXJiLCB0ZCwgMSArIHRkLT5pbmRleCwgY2MsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisgIAl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRkICoKK2VkX2hhbHRlZCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgdGQgKnRkLCBpbnQgY2MsIHN0cnVjdCB0ZCAqcmV2KQoreworICAJc3RydWN0IHVyYgkJKnVyYiA9IHRkLT51cmI7CisJc3RydWN0IGVkCQkqZWQgPSB0ZC0+ZWQ7CisJc3RydWN0IGxpc3RfaGVhZAkqdG1wID0gdGQtPnRkX2xpc3QubmV4dDsKKwlfX2hjMzIJCQl0b2dnbGUgPSBlZC0+aHdIZWFkUCAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9DKTsKKworCS8qIGNsZWFyIGVkIGhhbHQ7IHRoaXMgaXMgdGhlIHRkIHRoYXQgY2F1c2VkIGl0LCBidXQga2VlcCBpdCBpbmFjdGl2ZQorCSAqIHVudGlsIGl0cyB1cmItPmNvbXBsZXRlKCkgaGFzIGEgY2hhbmNlIHRvIGNsZWFuIHVwLgorCSAqLworCWVkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVApOworCXdtYiAoKTsKKwllZC0+aHdIZWFkUCAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX0gpOyAKKworCS8qIHB1dCBhbnkgbGF0ZXIgdGRzIGZyb20gdGhpcyB1cmIgb250byB0aGUgZG9uZWxpc3QsIGFmdGVyICd0ZCcsCisJICogb3JkZXIgd29uJ3QgbWF0dGVyIGhlcmU6IG5vIGVycm9ycywgYW5kIG5vdGhpbmcgd2FzIHRyYW5zZmVycmVkLgorCSAqIGFsc28gcGF0Y2ggdGhlIGVkIHNvIGl0IGxvb2tzIGFzIGlmIHRob3NlIHRkcyBjb21wbGV0ZWQgbm9ybWFsbHkuCisJICovCisJd2hpbGUgKHRtcCAhPSAmZWQtPnRkX2xpc3QpIHsKKwkJc3RydWN0IHRkCSpuZXh0OworCQlfX2hjMzIJCWluZm87CisKKwkJbmV4dCA9IGxpc3RfZW50cnkgKHRtcCwgc3RydWN0IHRkLCB0ZF9saXN0KTsKKwkJdG1wID0gbmV4dC0+dGRfbGlzdC5uZXh0OworCisJCWlmIChuZXh0LT51cmIgIT0gdXJiKQorCQkJYnJlYWs7CisKKwkJLyogTk9URTogaWYgbXVsdGktdGQgY29udHJvbCBEQVRBIHNlZ21lbnRzIGdldCBzdXBwb3J0ZWQsCisJCSAqIHRoaXMgdXJiIGhhZCBvbmUgb2YgdGhlbSwgdGhpcyB0ZCB3YXNuJ3QgdGhlIGxhc3QgdGQKKwkJICogaW4gdGhhdCBzZWdtZW50IChURF9SIGNsZWFyKSwgdGhpcyBlZCBoYWx0ZWQgYmVjYXVzZQorCQkgKiBvZiBhIHNob3J0IHJlYWQsIF9hbmRfIFVSQl9TSE9SVF9OT1RfT0sgaXMgY2xlYXIgLi4uCisJCSAqIHRoZW4gd2UgbmVlZCB0byBsZWF2ZSB0aGUgY29udHJvbCBTVEFUVVMgcGFja2V0IHF1ZXVlZAorCQkgKiBhbmQgY2xlYXIgRURfU0tJUC4KKwkJICovCisJCWluZm8gPSBuZXh0LT5od0lORk87CisJCWluZm8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIFREX0RPTkUpOworCQlpbmZvICY9IH5jcHVfdG9faGMzMiAob2hjaSwgVERfQ0MpOworCQluZXh0LT5od0lORk8gPSBpbmZvOworCisJCW5leHQtPm5leHRfZGxfdGQgPSByZXY7CQorCQlyZXYgPSBuZXh0OworCisJCWVkLT5od0hlYWRQID0gbmV4dC0+aHdOZXh0VEQgfCB0b2dnbGU7CisJfQorCisJLyogaGVscCBmb3IgdHJvdWJsZXNob290aW5nOiAgcmVwb3J0IGFueXRoaW5nIHRoYXQKKwkgKiBsb29rcyBvZGQgLi4uIHRoYXQgZG9lc24ndCBpbmNsdWRlIHByb3RvY29sIHN0YWxscworCSAqIChvciBtYXliZSBzb21lIG90aGVyIHRoaW5ncykKKwkgKi8KKwlzd2l0Y2ggKGNjKSB7CisJY2FzZSBURF9EQVRBVU5ERVJSVU46CisJCWlmICgodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spID09IDApCisJCQlicmVhazsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFREX0NDX1NUQUxMOgorCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKQorCQkJYnJlYWs7CisJCS8qIGZhbGx0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJb2hjaV9kYmcgKG9oY2ksCisJCQkidXJiICVwIHBhdGggJXMgZXAlZCVzICUwOHggY2MgJWQgLS0+IHN0YXR1cyAlZFxuIiwKKwkJCXVyYiwgdXJiLT5kZXYtPmRldnBhdGgsCisJCQl1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCWhjMzJfdG9fY3B1IChvaGNpLCB0ZC0+aHdJTkZPKSwKKwkJCWNjLCBjY190b19lcnJvciBbY2NdKTsKKwl9CisKKwlyZXR1cm4gcmV2OworfQorCisvKiByZXBsaWVzIHRvIHRoZSByZXF1ZXN0IGhhdmUgdG8gYmUgb24gYSBGSUZPIGJhc2lzIHNvCisgKiB3ZSB1bnJldmVyc2UgdGhlIGhjLXJldmVyc2VkIGRvbmUtbGlzdAorICovCitzdGF0aWMgc3RydWN0IHRkICpkbF9yZXZlcnNlX2RvbmVfbGlzdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXUzMgkJdGRfZG1hOworCXN0cnVjdCB0ZAkqdGRfcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgdGQJKnRkID0gTlVMTDsKKworCXRkX2RtYSA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJm9oY2ktPmhjY2EtPmRvbmVfaGVhZCk7CisJb2hjaS0+aGNjYS0+ZG9uZV9oZWFkID0gMDsKKwl3bWIoKTsKKworCS8qIGdldCBURCBmcm9tIGhjJ3Mgc2luZ2x5IGxpbmtlZCBsaXN0LCBhbmQKKwkgKiBwcmVwZW5kIHRvIG91cnMuICBlZC0+dGRfbGlzdCBjaGFuZ2VzIGxhdGVyLgorCSAqLworCXdoaWxlICh0ZF9kbWEpIHsJCQorCSAgICAJaW50CQljYzsKKworCQl0ZCA9IGRtYV90b190ZCAob2hjaSwgdGRfZG1hKTsKKwkJaWYgKCF0ZCkgeworCQkJb2hjaV9lcnIgKG9oY2ksICJiYWQgZW50cnkgJTh4XG4iLCB0ZF9kbWEpOworCQkJYnJlYWs7CisJCX0KKworCQl0ZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBURF9ET05FKTsKKwkJY2MgPSBURF9DQ19HRVQgKGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pKTsKKworCQkvKiBOb24taXNvIGVuZHBvaW50cyBjYW4gaGFsdCBvbiBlcnJvcjsgdW4taGFsdCwKKwkJICogYW5kIGRlcXVldWUgYW55IG90aGVyIFREcyBmcm9tIHRoaXMgdXJiLgorCQkgKiBObyBvdGhlciBURCBjb3VsZCBoYXZlIGNhdXNlZCB0aGUgaGFsdC4KKwkJICovCisJCWlmIChjYyAhPSBURF9DQ19OT0VSUk9SCisJCQkJJiYgKHRkLT5lZC0+aHdIZWFkUCAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9IKSkpCisJCQl0ZF9yZXYgPSBlZF9oYWx0ZWQgKG9oY2ksIHRkLCBjYywgdGRfcmV2KTsKKworCQl0ZC0+bmV4dF9kbF90ZCA9IHRkX3JldjsJCisJCXRkX3JldiA9IHRkOworCQl0ZF9kbWEgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdOZXh0VEQpOworCX0JCisJcmV0dXJuIHRkX3JldjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlcmUgYXJlIHNvbWUgdXJicy9lZHMgdG8gdW5saW5rOyBjYWxsZWQgaW5faXJxKCksIHdpdGggSENEIGxvY2tlZCAqLworc3RhdGljIHZvaWQKK2ZpbmlzaF91bmxpbmtzIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHUxNiB0aWNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWQJKmVkLCAqKmxhc3Q7CisKK3Jlc2Nhbl9hbGw6CisJZm9yIChsYXN0ID0gJm9oY2ktPmVkX3JtX2xpc3QsIGVkID0gKmxhc3Q7IGVkICE9IE5VTEw7IGVkID0gKmxhc3QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7CisJCWludAkJCWNvbXBsZXRlZCwgbW9kaWZpZWQ7CisJCV9faGMzMgkJCSpwcmV2OworCisJCS8qIG9ubHkgdGFrZSBvZmYgRURzIHRoYXQgdGhlIEhDIGlzbid0IHVzaW5nLCBhY2NvdW50aW5nIGZvcgorCQkgKiBmcmFtZSBjb3VudGVyIHdyYXBzIGFuZCBFRHMgd2l0aCBwYXJ0aWFsbHkgcmV0aXJlZCBURHMKKwkJICovCisJCWlmIChsaWtlbHkgKHJlZ3MgJiYgSENfSVNfUlVOTklORyhvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUpKSkgeworCQkJaWYgKHRpY2tfYmVmb3JlICh0aWNrLCBlZC0+dGljaykpIHsKK3NraXBfZWQ6CisJCQkJbGFzdCA9ICZlZC0+ZWRfbmV4dDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpKSB7CisJCQkJc3RydWN0IHRkCSp0ZDsKKwkJCQl1MzIJCWhlYWQ7CisKKwkJCQl0ZCA9IGxpc3RfZW50cnkgKGVkLT50ZF9saXN0Lm5leHQsIHN0cnVjdCB0ZCwKKwkJCQkJCQl0ZF9saXN0KTsKKwkJCQloZWFkID0gaGMzMl90b19jcHUgKG9oY2ksIGVkLT5od0hlYWRQKSAmCisJCQkJCQkJCVREX01BU0s7CisKKwkJCQkvKiBJTlRSX1dESCBtYXkgbmVlZCB0byBjbGVhbiB1cCBmaXJzdCAqLworCQkJCWlmICh0ZC0+dGRfZG1hICE9IGhlYWQpCisJCQkJCWdvdG8gc2tpcF9lZDsKKwkJCX0KKwkJfQorCisJCS8qIHJlZW50cmFuY3k6ICBpZiB3ZSBkcm9wIHRoZSBzY2hlZHVsZSBsb2NrLCBzb21lb25lIG1pZ2h0CisJCSAqIGhhdmUgbW9kaWZpZWQgdGhpcyBsaXN0LiAgbm9ybWFsbHkgaXQncyBqdXN0IHByZXBlbmRpbmcKKwkJICogZW50cmllcyAod2hpY2ggd2UnZCBpZ25vcmUpLCBidXQgcGFyYW5vaWEgd29uJ3QgaHVydC4KKwkJICovCisJCSpsYXN0ID0gZWQtPmVkX25leHQ7CisJCWVkLT5lZF9uZXh0ID0gTlVMTDsKKwkJbW9kaWZpZWQgPSAwOworCisJCS8qIHVubGluayB1cmJzIGFzIHJlcXVlc3RlZCwgYnV0IHJlc2NhbiB0aGUgbGlzdCBhZnRlcgorCQkgKiB3ZSBjYWxsIGEgY29tcGxldGlvbiBzaW5jZSBpdCBtaWdodCBoYXZlIHVubGlua2VkCisJCSAqIGFub3RoZXIgKGVhcmxpZXIpIHVyYgorCQkgKgorCQkgKiBXaGVuIHdlIGdldCBoZXJlLCB0aGUgSEMgZG9lc24ndCBzZWUgdGhpcyBlZC4gIEJ1dCBpdAorCQkgKiBtdXN0IG5vdCBiZSByZXNjaGVkdWxlZCB1bnRpbCBhbGwgY29tcGxldGVkIFVSQnMgaGF2ZQorCQkgKiBiZWVuIGdpdmVuIGJhY2sgdG8gdGhlIGRyaXZlci4KKwkJICovCityZXNjYW5fdGhpczoKKwkJY29tcGxldGVkID0gMDsKKwkJcHJldiA9ICZlZC0+aHdIZWFkUDsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlIChlbnRyeSwgdG1wLCAmZWQtPnRkX2xpc3QpIHsKKwkJCXN0cnVjdCB0ZAkqdGQ7CisJCQlzdHJ1Y3QgdXJiCSp1cmI7CisJCQl1cmJfcHJpdl90CSp1cmJfcHJpdjsKKwkJCV9faGMzMgkJc2F2ZWJpdHM7CisKKwkJCXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCB0ZCwgdGRfbGlzdCk7CisJCQl1cmIgPSB0ZC0+dXJiOworCQkJdXJiX3ByaXYgPSB0ZC0+dXJiLT5oY3ByaXY7CisKKwkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCQlwcmV2ID0gJnRkLT5od05leHRURDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogcGF0Y2ggcG9pbnRlciBoYyB1c2VzICovCisJCQlzYXZlYml0cyA9ICpwcmV2ICYgfmNwdV90b19oYzMyIChvaGNpLCBURF9NQVNLKTsKKwkJCSpwcmV2ID0gdGQtPmh3TmV4dFREIHwgc2F2ZWJpdHM7CisKKwkJCS8qIEhDIG1heSBoYXZlIHBhcnRseSBwcm9jZXNzZWQgdGhpcyBURCAqLworCQkJdGRfZG9uZSAob2hjaSwgdXJiLCB0ZCk7CisJCQl1cmJfcHJpdi0+dGRfY250Kys7CisKKwkJCS8qIGlmIFVSQiBpcyBkb25lLCBjbGVhbiB1cCAqLworCQkJaWYgKHVyYl9wcml2LT50ZF9jbnQgPT0gdXJiX3ByaXYtPmxlbmd0aCkgeworCQkJCW1vZGlmaWVkID0gY29tcGxldGVkID0gMTsKKwkJCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIsIHJlZ3MpOworCQkJfQorCQl9CisJCWlmIChjb21wbGV0ZWQgJiYgIWxpc3RfZW1wdHkgKCZlZC0+dGRfbGlzdCkpCisJCQlnb3RvIHJlc2Nhbl90aGlzOworCisJCS8qIEVEJ3Mgbm93IG9mZmljaWFsbHkgdW5saW5rZWQsIGhjIGRvZXNuJ3Qgc2VlICovCisJCWVkLT5zdGF0ZSA9IEVEX0lETEU7CisJCWVkLT5od0hlYWRQICY9IH5jcHVfdG9faGMzMihvaGNpLCBFRF9IKTsKKwkJZWQtPmh3TmV4dEVEID0gMDsKKwkJd21iICgpOworCQllZC0+aHdJTkZPICY9IH5jcHVfdG9faGMzMiAob2hjaSwgRURfU0tJUCB8IEVEX0RFUVVFVUUpOworCisJCS8qIGJ1dCBpZiB0aGVyZSdzIHdvcmsgcXVldWVkLCByZXNjaGVkdWxlICovCisJCWlmICghbGlzdF9lbXB0eSAoJmVkLT50ZF9saXN0KSkgeworCQkJaWYgKEhDX0lTX1JVTk5JTkcob2hjaV90b19oY2Qob2hjaSktPnN0YXRlKSkKKwkJCQllZF9zY2hlZHVsZSAob2hjaSwgZWQpOworCQl9CisKKwkJaWYgKG1vZGlmaWVkKQorCQkJZ290byByZXNjYW5fYWxsOworICAgCX0KKworCS8qIG1heWJlIHJlZW5hYmxlIGNvbnRyb2wgYW5kIGJ1bGsgbGlzdHMgKi8gCisJaWYgKEhDX0lTX1JVTk5JTkcob2hjaV90b19oY2Qob2hjaSktPnN0YXRlKQorCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnN0YXRlICE9IEhDX1NUQVRFX1FVSUVTQ0lORworCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QpIHsKKwkJdTMyCWNvbW1hbmQgPSAwLCBjb250cm9sID0gMDsKKworCQlpZiAob2hjaS0+ZWRfY29udHJvbHRhaWwpIHsKKwkJCWNvbW1hbmQgfD0gT0hDSV9DTEY7CisJCQlpZiAoIShvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0NMRSkpIHsKKwkJCQljb250cm9sIHw9IE9IQ0lfQ1RSTF9DTEU7CisJCQkJb2hjaV93cml0ZWwgKG9oY2ksIDAsCisJCQkJCSZvaGNpLT5yZWdzLT5lZF9jb250cm9sY3VycmVudCk7CisJCQl9CisJCX0KKwkJaWYgKG9oY2ktPmVkX2J1bGt0YWlsKSB7CisJCQljb21tYW5kIHw9IE9IQ0lfQkxGOworCQkJaWYgKCEob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9CTEUpKSB7CisJCQkJY29udHJvbCB8PSBPSENJX0NUUkxfQkxFOworCQkJCW9oY2lfd3JpdGVsIChvaGNpLCAwLAorCQkJCQkmb2hjaS0+cmVncy0+ZWRfYnVsa2N1cnJlbnQpOworCQkJfQorCQl9CisJCQorCQkvKiBDTEUvQkxFIHRvIGVuYWJsZSwgQ0xGL0JMRiB0byAobWF5YmUpIGtpY2tzdGFydCAqLworCQlpZiAoY29udHJvbCkgeworCQkJb2hjaS0+aGNfY29udHJvbCB8PSBjb250cm9sOworIAkJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLAorCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7ICAgCisgCQl9CisJCWlmIChjb21tYW5kKQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIGNvbW1hbmQsICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOyAgIAorIAl9Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogUHJvY2VzcyBub3JtYWwgY29tcGxldGlvbnMgKGVycm9yIG9yIHN1Y2Nlc3MpIGFuZCBjbGVhbiB0aGUgc2NoZWR1bGVzLgorICoKKyAqIFRoaXMgaXMgdGhlIG1haW4gcGF0aCBmb3IgaGFuZGluZyB1cmJzIGJhY2sgdG8gZHJpdmVycy4gIFRoZSBvbmx5IG90aGVyCisgKiBwYXRoIGlzIGZpbmlzaF91bmxpbmtzKCksIHdoaWNoIHVubGlua3MgVVJCcyB1c2luZyBlZF9ybV9saXN0LCBpbnN0ZWFkIG9mCisgKiBzY2FubmluZyB0aGUgKHJlLXJldmVyc2VkKSBkb25lbGlzdCBhcyB0aGlzIGRvZXMuCisgKi8KK3N0YXRpYyB2b2lkCitkbF9kb25lX2xpc3QgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRkCSp0ZCA9IGRsX3JldmVyc2VfZG9uZV9saXN0IChvaGNpKTsKKworICAJd2hpbGUgKHRkKSB7CisJCXN0cnVjdCB0ZAkqdGRfbmV4dCA9IHRkLT5uZXh0X2RsX3RkOworCQlzdHJ1Y3QgdXJiCSp1cmIgPSB0ZC0+dXJiOworCQl1cmJfcHJpdl90CSp1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCQlzdHJ1Y3QgZWQJKmVkID0gdGQtPmVkOworCisJCS8qIHVwZGF0ZSBVUkIncyBsZW5ndGggYW5kIHN0YXR1cyBmcm9tIFREICovCisgICAJCXRkX2RvbmUgKG9oY2ksIHVyYiwgdGQpOworICAJCXVyYl9wcml2LT50ZF9jbnQrKzsKKworCQkvKiBJZiBhbGwgdGhpcyB1cmIncyBURHMgYXJlIGRvbmUsIGNhbGwgY29tcGxldGUoKSAqLworICAJCWlmICh1cmJfcHJpdi0+dGRfY250ID09IHVyYl9wcml2LT5sZW5ndGgpCisgIAkJCWZpbmlzaF91cmIgKG9oY2ksIHVyYiwgcmVncyk7CisKKwkJLyogY2xlYW4gc2NoZWR1bGU6ICB1bmxpbmsgRURzIHRoYXQgYXJlIG5vIGxvbmdlciBidXN5ICovCisJCWlmIChsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpKSB7CisJCQlpZiAoZWQtPnN0YXRlID09IEVEX09QRVIpCisJCQkJc3RhcnRfZWRfdW5saW5rIChvaGNpLCBlZCk7CisKKwkJLyogLi4uIHJlZW5hYmxpbmcgaGFsdGVkIEVEcyBvbmx5IGFmdGVyIGZhdWx0IGNsZWFudXAgKi8KKwkJfSBlbHNlIGlmICgoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQIHwgRURfREVRVUVVRSkpCisJCQkJCT09IGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQKSkgeworCQkJdGQgPSBsaXN0X2VudHJ5IChlZC0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworIAkJCWlmICghKHRkLT5od0lORk8gJiBjcHVfdG9faGMzMiAob2hjaSwgVERfRE9ORSkpKSB7CisJCQkJZWQtPmh3SU5GTyAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVApOworCQkJCS8qIC4uLiBoYyBtYXkgbmVlZCB3YWtpbmctdXAgKi8KKwkJCQlzd2l0Y2ggKGVkLT50eXBlKSB7CisJCQkJY2FzZSBQSVBFX0NPTlRST0w6CisJCQkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0NMRiwKKwkJCQkJCSZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOyAgIAorCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfQlVMSzoKKwkJCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQkxGLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7ICAgCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisgICAgCQl0ZCA9IHRkX25leHQ7CisgIAl9ICAKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRkMmJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiAKKyAqIFNBMTExMSBCdXMgR2x1ZQorICoKKyAqIFdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgSG9vdmVyIDxjaEBocGwuaHAuY29tPgorICogQmFzZWQgb24gZnJhZ21lbnRzIG9mIHByZXZpb3VzIGRyaXZlciBieSBSdXNlbGwgS2luZyBldCBhbC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworIAorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXNzYWJldC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JhZGdlNC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KKworI2lmbmRlZiBDT05GSUdfU0ExMTExCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBTQS0xMTExIGJ1cyBnbHVlLiAgQ09ORklHX1NBMTExMSBtdXN0IGJlIGRlZmluZWQuIgorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBzYTExMTFfc3RhcnRfaGMoc3RydWN0IHNhMTExMV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgdXNiX3JzdCA9IDA7CisKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAKKwkgICAgICAgIjogc3RhcnRpbmcgU0EtMTExMSBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworI2lmZGVmIENPTkZJR19TQTExMDBfQkFER0U0CisJaWYgKG1hY2hpbmVfaXNfYmFkZ2U0KCkpIHsKKwkJYmFkZ2U0X3NldF81VihCQURHRTRfNVZfVVNCLCAxKTsKKwl9CisjZW5kaWYKKworCWlmIChtYWNoaW5lX2lzX3hwODYwKCkgfHwKKwkgICAgbWFjaGluZV9oYXNfbmVwb25zZXQoKSB8fAorCSAgICBtYWNoaW5lX2lzX3BmczE2OCgpIHx8CisJICAgIG1hY2hpbmVfaXNfYmFkZ2U0KCkpCisJCXVzYl9yc3QgPSBVU0JfUkVTRVRfUFdSU0VOU0VMT1cgfCBVU0JfUkVTRVRfUFdSQ1RSTExPVzsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSBwb3dlciBzZW5zZSBhbmQgY29udHJvbCBsaW5lcy4gIFBsYWNlIHRoZSBVU0IKKwkgKiBob3N0IGNvbnRyb2xsZXIgaW4gcmVzZXQuCisJICovCisJc2ExMTExX3dyaXRlbCh1c2JfcnN0IHwgVVNCX1JFU0VUX0ZPUkNFSUZSRVNFVCB8IFVTQl9SRVNFVF9GT1JDRUhDUkVTRVQsCisJCSAgICAgIGRldi0+bWFwYmFzZSArIFNBMTExMV9VU0JfUkVTRVQpOworCisJLyoKKwkgKiBOb3csIGNhcmVmdWxseSBlbmFibGUgdGhlIFVTQiBjbG9jaywgYW5kIHRha2UKKwkgKiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBvdXQgb2YgcmVzZXQuCisJICovCisJc2ExMTExX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwl1ZGVsYXkoMTEpOworCXNhMTExMV93cml0ZWwodXNiX3JzdCwgZGV2LT5tYXBiYXNlICsgU0ExMTExX1VTQl9SRVNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTExMV9zdG9wX2hjKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgaW50IHVzYl9yc3Q7CisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gCisJICAgICAgICI6IHN0b3BwaW5nIFNBLTExMTEgT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKgorCSAqIFB1dCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBpbnRvIHJlc2V0LgorCSAqLworCXVzYl9yc3QgPSBzYTExMTFfcmVhZGwoZGV2LT5tYXBiYXNlICsgU0ExMTExX1VTQl9SRVNFVCk7CisJc2ExMTExX3dyaXRlbCh1c2JfcnN0IHwgVVNCX1JFU0VUX0ZPUkNFSUZSRVNFVCB8IFVTQl9SRVNFVF9GT1JDRUhDUkVTRVQsCisJCSAgICAgIGRldi0+bWFwYmFzZSArIFNBMTExMV9VU0JfUkVTRVQpOworCisJLyoKKwkgKiBTdG9wIHRoZSBVU0IgY2xvY2suCisJICovCisJc2ExMTExX2Rpc2FibGVfZGV2aWNlKGRldik7CisKKyNpZmRlZiBDT05GSUdfU0ExMTAwX0JBREdFNAorCWlmIChtYWNoaW5lX2lzX2JhZGdlNCgpKSB7CisJCS8qIERpc2FibGUgcG93ZXIgdG8gdGhlIFVTQiBidXMgKi8KKwkJYmFkZ2U0X3NldF81VihCQURHRTRfNVZfVVNCLCAwKTsKKwl9CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgMAorc3RhdGljIHZvaWQgZHVtcF9oY2lfc3RhdHVzKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gc2ExMTExX3JlYWRsKGhjZC0+cmVncyArIFNBMTExMV9VU0JfU1RBVFVTKTsKKworCWRiZyAoIiVzIFVTQl9TVEFUVVMgPSB7ICVzJXMlcyVzJXN9IiwgbGFiZWwsCisJICAgICAoKHN0YXR1cyAmIFVTQl9TVEFUVVNfSVJRSENJUk1UV0tVUCkgPyAiSVJRSENJUk1UV0tVUCAiIDogIiIpLAorCSAgICAgKChzdGF0dXMgJiBVU0JfU1RBVFVTX0lSUUhDSUJVRkZBQ0MpID8gIklSUUhDSUJVRkZBQ0MgIiA6ICIiKSwKKwkgICAgICgoc3RhdHVzICYgVVNCX1NUQVRVU19OSVJRSENJTSkgPyAiIiA6ICJJUlFIQ0lNICIpLAorCSAgICAgKChzdGF0dXMgJiBVU0JfU1RBVFVTX05IQ0lNRkNMUikgPyAiIiA6ICJIQ0lNRkNMUiAiKSwKKwkgICAgICgoc3RhdHVzICYgVVNCX1NUQVRVU19VU0JQV1JTRU5TRSkgPyAiVVNCUFdSU0VOU0UgIiA6ICIiKSk7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworCisvKioKKyAqIHVzYl9oY2Rfc2ExMTExX3Byb2JlIC0gaW5pdGlhbGl6ZSBTQS0xMTExLWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHByb2JlKCkuCisgKi8KK2ludCB1c2JfaGNkX3NhMTExMV9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJaW50IHJldHZhbDsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZkZXYtPmRldiwgInNhMTExMSIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlcy5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gZGV2LT5yZXMuZW5kIC0gZGV2LT5yZXMuc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGJnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKwloY2QtPnJlZ3MgPSBkZXYtPm1hcGJhc2U7CisKKwlzYTExMTFfc3RhcnRfaGMoZGV2KTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPmlycVsxXSwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlzYTExMTFfc3RvcF9oYyhkZXYpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3NhMTExMV9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBTQS0xMTExLWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX3NhMTExMV9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICovCit2b2lkIHVzYl9oY2Rfc2ExMTExX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHNhMTExMV9kZXYgKmRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCXNhMTExMV9zdG9wX2hjKGRldik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfc2ExMTExX3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcmV0OworCisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX3NhMTExMV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIlNBLTExMTEgT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnN0YXJ0ID0JCW9oY2lfc2ExMTExX3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS8qIHN1c3BlbmQ6CQlvaGNpX3NhMTExMV9zdXNwZW5kLCAgLS0gdGJkICovCisJLyogcmVzdW1lOgkJb2hjaV9zYTExMTFfcmVzdW1lLCAgIC0tIHRiZCAqLworI2VuZGlmCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2Rfc2ExMTExX2Rydl9wcm9iZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQoreworCWludCByZXQ7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gdXNiX2hjZF9zYTExMTFfcHJvYmUoJm9oY2lfc2ExMTExX2hjX2RyaXZlciwgZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX3NhMTExMV9kcnZfcmVtb3ZlKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHNhMTExMV9nZXRfZHJ2ZGF0YShkZXYpOworCisJdXNiX2hjZF9zYTExMTFfcmVtb3ZlKGhjZCwgZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzYTExMTFfZHJpdmVyIG9oY2lfaGNkX3NhMTExMV9kcml2ZXIgPSB7CisJLmRydiA9IHsKKwkJLm5hbWUJPSAic2ExMTExLW9oY2kiLAorCX0sCisJLmRldmlkCQk9IFNBMTExMV9ERVZJRF9VU0IsCisJLnByb2JlCQk9IG9oY2lfaGNkX3NhMTExMV9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9zYTExMTFfZHJ2X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3NhMTExMV9pbml0ICh2b2lkKQoreworCWRiZyAoRFJJVkVSX0lORk8gIiAoU0EtMTExMSkiKTsKKwlkYmcgKCJibG9jayBzaXplczogZWQgJWQgdGQgJWQiLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gc2ExMTExX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfc2ExMTExX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9zYTExMTFfY2xlYW51cCAodm9pZCkKK3sKKwlzYTExMTFfZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3NhMTExMV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAob2hjaV9oY2Rfc2ExMTExX2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX3NhMTExMV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhNmUyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCkBAIC0wLDAgKzEsNjM2IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKiAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworLyoKKyAqIF9faGMzMiBhbmQgX19oYzE2IGFyZSAiSG9zdCBDb250cm9sbGVyIiB0eXBlcywgdGhleSBtYXkgYmUgZXF1aXZhbGVudCB0bworICogX19sZVhYIChub3JtYWxseSkgb3IgX19iZVhYIChnaXZlbiBPSENJX0JJR19FTkRJQU4pLCBkZXBlbmRpbmcgb24gdGhlCisgKiBob3N0IGNvbnRyb2xsZXIgaW1wbGVtZW50YXRpb24uCisgKi8KK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9faGMzMjsKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9faGMxNjsKKyAKKy8qCisgKiBPSENJIEVuZHBvaW50IERlc2NyaXB0b3IgKEVEKSAuLi4gaG9sZHMgVEQgcXVldWUKKyAqIFNlZSBPSENJIHNwZWMsIHNlY3Rpb24gNC4yCisgKgorICogVGhpcyBpcyBhICJRdWV1ZSBIZWFkIiBmb3IgdGhvc2UgdHJhbnNmZXJzLCB3aGljaCBpcyB3aHkKKyAqIGJvdGggRUhDSSBhbmQgVUhDSSBjYWxsIHNpbWlsYXIgc3RydWN0dXJlcyBhICJRSCIuCisgKi8KK3N0cnVjdCBlZCB7CisJLyogZmlyc3QgZmllbGRzIGFyZSBoYXJkd2FyZS1zcGVjaWZpZWQgKi8KKwlfX2hjMzIJCQlod0lORk87ICAgICAgIAkvKiBlbmRwb2ludCBjb25maWcgYml0bWFwICovCisJLyogaW5mbyBiaXRzIGRlZmluZWQgYnkgaGNkICovCisjZGVmaW5lIEVEX0RFUVVFVUUJKDEgPDwgMjcpCisJLyogaW5mbyBiaXRzIGRlZmluZWQgYnkgdGhlIGhhcmR3YXJlICovCisjZGVmaW5lIEVEX0lTTwkJKDEgPDwgMTUpCisjZGVmaW5lIEVEX1NLSVAJCSgxIDw8IDE0KQorI2RlZmluZSBFRF9MT1dTUEVFRAkoMSA8PCAxMykKKyNkZWZpbmUgRURfT1VUCQkoMHgwMSA8PCAxMSkKKyNkZWZpbmUgRURfSU4JCSgweDAyIDw8IDExKQorCV9faGMzMgkJCWh3VGFpbFA7CS8qIHRhaWwgb2YgVEQgbGlzdCAqLworCV9faGMzMgkJCWh3SGVhZFA7CS8qIGhlYWQgb2YgVEQgbGlzdCAoaGMgci93KSAqLworI2RlZmluZSBFRF9DCQkoMHgwMikJCQkvKiB0b2dnbGUgY2FycnkgKi8KKyNkZWZpbmUgRURfSAkJKDB4MDEpCQkJLyogaGFsdGVkICovCisJX19oYzMyCQkJaHdOZXh0RUQ7CS8qIG5leHQgRUQgaW4gbGlzdCAqLworCisJLyogcmVzdCBhcmUgcHVyZWx5IGZvciB0aGUgZHJpdmVyJ3MgdXNlICovCisJZG1hX2FkZHJfdAkJZG1hOwkJLyogYWRkciBvZiBFRCAqLworCXN0cnVjdCB0ZAkJKmR1bW15OwkJLyogbmV4dCBURCB0byBhY3RpdmF0ZSAqLworCisJLyogaG9zdCdzIHZpZXcgb2Ygc2NoZWR1bGUgKi8KKwlzdHJ1Y3QgZWQJCSplZF9uZXh0OwkvKiBvbiBzY2hlZHVsZSBvciBybV9saXN0ICovCisJc3RydWN0IGVkCQkqZWRfcHJldjsJLyogZm9yIG5vbi1pbnRlcnJ1cHQgRURzICovCisJc3RydWN0IGxpc3RfaGVhZAl0ZF9saXN0OwkvKiAic2hhZG93IGxpc3QiIG9mIG91ciBURHMgKi8KKworCS8qIGNyZWF0ZSAtLT4gSURMRSAtLT4gT1BFUiAtLT4gLi4uIC0tPiBJRExFIC0tPiBkZXN0cm95CisJICogdXN1YWxseTogIE9QRVIgLS0+IFVOTElOSyAtLT4gKElETEUgfCBPUEVSKSAtLT4gLi4uCisJICovCisJdTgJCQlzdGF0ZTsJCS8qIEVEX3tJRExFLFVOTElOSyxPUEVSfSAqLworI2RlZmluZSBFRF9JRExFIAkweDAwCQkvKiBOT1QgbGlua2VkIHRvIEhDICovCisjZGVmaW5lIEVEX1VOTElOSyAJMHgwMQkJLyogYmVpbmcgdW5saW5rZWQgZnJvbSBoYyAqLworI2RlZmluZSBFRF9PUEVSCQkweDAyCQkvKiBJUyBsaW5rZWQgdG8gaGMgKi8KKworCXU4CQkJdHlwZTsgCQkvKiBQSVBFX3tCVUxLLC4uLn0gKi8KKworCS8qIHBlcmlvZGljIHNjaGVkdWxpbmcgcGFyYW1zIChmb3IgaW50ciBhbmQgaXNvKSAqLworCXU4CQkJYnJhbmNoOworCXUxNgkJCWludGVydmFsOworCXUxNgkJCWxvYWQ7CisJdTE2CQkJbGFzdF9pc287CS8qIGlzbyBvbmx5ICovCisKKwkvKiBIQyBtYXkgc2VlIEVEcyBvbiBybV9saXN0IHVudGlsIG5leHQgZnJhbWUgKGZyYW1lX25vID09IHRpY2spICovCisJdTE2CQkJdGljazsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CisKKyNkZWZpbmUgRURfTUFTSwkoKHUzMil+MHgwZikJCS8qIHN0cmlwIGh3IHN0YXR1cyBpbiBsb3cgYWRkciBiaXRzICovCisKKyAKKy8qCisgKiBPSENJIFRyYW5zZmVyIERlc2NyaXB0b3IgKFREKSAuLi4gb25lIHBlciB0cmFuc2ZlciBzZWdtZW50CisgKiBTZWUgT0hDSSBzcGVjLCBzZWN0aW9ucyA0LjMuMSAoZ2VuZXJhbCA9IGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQpCisgKiBhbmQgNC4zLjIgKGlzbykKKyAqLworc3RydWN0IHRkIHsKKwkvKiBmaXJzdCBmaWVsZHMgYXJlIGhhcmR3YXJlLXNwZWNpZmllZCAqLworCV9faGMzMgkJaHdJTkZPOwkJLyogdHJhbnNmZXIgaW5mbyBiaXRtYXNrICovCisKKwkvKiBod0lORk8gYml0cyBmb3IgYm90aCBnZW5lcmFsIGFuZCBpc28gdGRzOiAqLworI2RlZmluZSBURF9DQyAgICAgICAweGYwMDAwMDAwCQkJLyogY29uZGl0aW9uIGNvZGUgKi8KKyNkZWZpbmUgVERfQ0NfR0VUKHRkX3ApICgodGRfcCA+PjI4KSAmIDB4MGYpCisvLyNkZWZpbmUgVERfQ0NfU0VUKHRkX3AsIGNjKSAodGRfcCkgPSAoKHRkX3ApICYgMHgwZmZmZmZmZikgfCAoKChjYykgJiAweDBmKSA8PCAyOCkKKyNkZWZpbmUgVERfREkgICAgICAgMHgwMEUwMDAwMAkJCS8qIGZyYW1lcyBiZWZvcmUgaW50ZXJydXB0ICovCisjZGVmaW5lIFREX0RJX1NFVChYKSAoKChYKSAmIDB4MDcpPDwgMjEpCisJLyogdGhlc2UgdHdvIGJpdHMgYXJlIGF2YWlsYWJsZSBmb3IgZGVmaW5pdGlvbi91c2UgYnkgSENEcyBpbiBib3RoCisJICogZ2VuZXJhbCBhbmQgaXNvIHRkcyAuLi4gb3RoZXJzIGFyZSBhdmFpbGFibGUgZm9yIG9ubHkgb25lIHR5cGUKKwkgKi8KKyNkZWZpbmUgVERfRE9ORSAgICAgMHgwMDAyMDAwMAkJCS8qIHJldGlyZWQgdG8gZG9uZWxpc3QgKi8KKyNkZWZpbmUgVERfSVNPICAgICAgMHgwMDAxMDAwMAkJCS8qIGNvcHkgb2YgRURfSVNPICovCisKKwkvKiBod0lORk8gYml0cyBmb3IgZ2VuZXJhbCB0ZHM6ICovCisjZGVmaW5lIFREX0VDICAgICAgIDB4MEMwMDAwMDAJCQkvKiBlcnJvciBjb3VudCAqLworI2RlZmluZSBURF9UICAgICAgICAweDAzMDAwMDAwCQkJLyogZGF0YSB0b2dnbGUgc3RhdGUgKi8KKyNkZWZpbmUgVERfVF9EQVRBMCAgMHgwMjAwMDAwMAkJCQkvKiBEQVRBMCAqLworI2RlZmluZSBURF9UX0RBVEExICAweDAzMDAwMDAwCQkJCS8qIERBVEExICovCisjZGVmaW5lIFREX1RfVE9HR0xFIDB4MDAwMDAwMDAJCQkJLyogdXNlcyBFRF9DICovCisjZGVmaW5lIFREX0RQICAgICAgIDB4MDAxODAwMDAJCQkvKiBkaXJlY3Rpb24vcGlkICovCisjZGVmaW5lIFREX0RQX1NFVFVQIDB4MDAwMDAwMDAJCQkvKiBTRVRVUCBwaWQgKi8KKyNkZWZpbmUgVERfRFBfSU4gICAgMHgwMDEwMDAwMAkJCQkvKiBJTiBwaWQgKi8KKyNkZWZpbmUgVERfRFBfT1VUICAgMHgwMDA4MDAwMAkJCQkvKiBPVVQgcGlkICovCisJCQkJCQkJLyogMHgwMDE4MDAwMCByc3ZkICovCisjZGVmaW5lIFREX1IgICAgICAgIDB4MDAwNDAwMDAJCQkvKiByb3VuZDogc2hvcnQgcGFja2V0cyBPSz8gKi8KKworCS8qIChubyBod0lORk8gI2RlZmluZXMgeWV0IGZvciBpc28gdGRzKSAqLworCisgIAlfX2hjMzIJCWh3Q0JQOwkJLyogQ3VycmVudCBCdWZmZXIgUG9pbnRlciAob3IgMCkgKi8KKyAgCV9faGMzMgkJaHdOZXh0VEQ7CS8qIE5leHQgVEQgUG9pbnRlciAqLworICAJX19oYzMyCQlod0JFOwkJLyogTWVtb3J5IEJ1ZmZlciBFbmQgUG9pbnRlciAqLworCisJLyogUFNXIGlzIG9ubHkgZm9yIElTTy4gIE9ubHkgMSBQU1cgZW50cnkgaXMgdXNlZCwgYnV0IG9uCisJICogYmlnLWVuZGlhbiBQUEMgaGFyZHdhcmUgdGhhdCdzIHRoZSBzZWNvbmQgZW50cnkuCisJICovCisjZGVmaW5lIE1BWFBTVwkyCisgIAlfX2hjMTYJCWh3UFNXIFtNQVhQU1ddOworCisJLyogcmVzdCBhcmUgcHVyZWx5IGZvciB0aGUgZHJpdmVyJ3MgdXNlICovCisgIAlfX3U4CQlpbmRleDsKKyAgCXN0cnVjdCBlZAkqZWQ7CisgIAlzdHJ1Y3QgdGQJKnRkX2hhc2g7CS8qIGRtYS0tPnRkIGhhc2h0YWJsZSAqLworICAJc3RydWN0IHRkCSpuZXh0X2RsX3RkOworICAJc3RydWN0IHVyYgkqdXJiOworCisJZG1hX2FkZHJfdAl0ZF9kbWE7CQkvKiBhZGRyIG9mIHRoaXMgVEQgKi8KKwlkbWFfYWRkcl90CWRhdGFfZG1hOwkvKiBhZGRyIG9mIGRhdGEgaXQgcG9pbnRzIHRvICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX2xpc3Q7CS8qICJzaGFkb3cgbGlzdCIsIFREcyBvbiBzYW1lIEVEICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOwkvKiBjL2IvaSBuZWVkIDE2OyBvbmx5IGlzbyBuZWVkcyAzMiAqLworCisjZGVmaW5lIFREX01BU0sJKCh1MzIpfjB4MWYpCQkvKiBzdHJpcCBodyBzdGF0dXMgaW4gbG93IGFkZHIgYml0cyAqLworCisvKgorICogSGFyZHdhcmUgdHJhbnNmZXIgc3RhdHVzIGNvZGVzIC0tIENDIGZyb20gdGQtPmh3SU5GTyBvciB0ZC0+aHdQU1cKKyAqLworI2RlZmluZSBURF9DQ19OT0VSUk9SICAgICAgMHgwMAorI2RlZmluZSBURF9DQ19DUkMgICAgICAgICAgMHgwMQorI2RlZmluZSBURF9DQ19CSVRTVFVGRklORyAgMHgwMgorI2RlZmluZSBURF9DQ19EQVRBVE9HR0xFTSAgMHgwMworI2RlZmluZSBURF9DQ19TVEFMTCAgICAgICAgMHgwNAorI2RlZmluZSBURF9ERVZOT1RSRVNQICAgICAgMHgwNQorI2RlZmluZSBURF9QSURDSEVDS0ZBSUwgICAgMHgwNgorI2RlZmluZSBURF9VTkVYUEVDVEVEUElEICAgMHgwNworI2RlZmluZSBURF9EQVRBT1ZFUlJVTiAgICAgMHgwOAorI2RlZmluZSBURF9EQVRBVU5ERVJSVU4gICAgMHgwOQorICAgIC8qIDB4MEEsIDB4MEIgcmVzZXJ2ZWQgZm9yIGhhcmR3YXJlICovCisjZGVmaW5lIFREX0JVRkZFUk9WRVJSVU4gICAweDBDCisjZGVmaW5lIFREX0JVRkZFUlVOREVSUlVOICAweDBECisgICAgLyogMHgwRSwgMHgwRiByZXNlcnZlZCBmb3IgSENEICovCisjZGVmaW5lIFREX05PVEFDQ0VTU0VEICAgICAweDBGCisKKworLyogbWFwIE9IQ0kgVEQgc3RhdHVzIGNvZGVzIChDQykgdG8gZXJybm8gdmFsdWVzICovIAorc3RhdGljIGNvbnN0IGludCBjY190b19lcnJvciBbMTZdID0geyAKKwkvKiBObyAgRXJyb3IgICovICAgICAgICAgICAgICAgMCwKKwkvKiBDUkMgRXJyb3IgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKKwkvKiBCaXQgU3R1ZmYgICovICAgICAgICAgICAgICAgLUVQUk9UTywKKwkvKiBEYXRhIFRvZ2cgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKKwkvKiBTdGFsbCAgICAgICovICAgICAgICAgICAgICAgLUVQSVBFLAorCS8qIERldk5vdFJlc3AgKi8gICAgICAgICAgICAgICAtRVRJTUVET1VULAorCS8qIFBJRENoZWNrICAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIFVuRXhwUElEICAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIERhdGFPdmVyICAgKi8gICAgICAgICAgICAgICAtRU9WRVJGTE9XLAorCS8qIERhdGFVbmRlciAgKi8gICAgICAgICAgICAgICAtRVJFTU9URUlPLAorCS8qIChmb3IgaHcpICAgKi8gICAgICAgICAgICAgICAtRUlPLAorCS8qIChmb3IgaHcpICAgKi8gICAgICAgICAgICAgICAtRUlPLAorCS8qIEJ1ZmZlck92ZXIgKi8gICAgICAgICAgICAgICAtRUNPTU0sCisJLyogQnVmZlVuZGVyICAqLyAgICAgICAgICAgICAgIC1FTk9TUiwKKwkvKiAoZm9yIEhDRCkgICovICAgICAgICAgICAgICAgLUVBTFJFQURZLAorCS8qIChmb3IgSENEKSAgKi8gICAgICAgICAgICAgICAtRUFMUkVBRFkgCit9OworCisKKy8qCisgKiBUaGUgSENDQSAoSG9zdCBDb250cm9sbGVyIENvbW11bmljYXRpb25zIEFyZWEpIGlzIGEgMjU2IGJ5dGUKKyAqIHN0cnVjdHVyZSBkZWZpbmVkIHNlY3Rpb24gNC40LjEgb2YgdGhlIE9IQ0kgc3BlYy4gVGhlIEhDIGlzCisgKiB0b2xkIHRoZSBiYXNlIGFkZHJlc3Mgb2YgaXQuICBJdCBtdXN0IGJlIDI1Ni1ieXRlIGFsaWduZWQuCisgKi8KK3N0cnVjdCBvaGNpX2hjY2EgeworI2RlZmluZSBOVU1fSU5UUyAzMgorCV9faGMzMglpbnRfdGFibGUgW05VTV9JTlRTXTsJLyogcGVyaW9kaWMgc2NoZWR1bGUgKi8KKworCS8qIAorCSAqIE9IQ0kgZGVmaW5lcyB1MTYgZnJhbWVfbm8sIGZvbGxvd2VkIGJ5IHUxNiB6ZXJvIHBhZC4KKwkgKiBTaW5jZSBzb21lIHByb2Nlc3NvcnMgY2FuJ3QgZG8gMTYgYml0IGJ1cyBhY2Nlc3NlcywKKwkgKiBwb3J0YWJsZSBhY2Nlc3MgbXVzdCBiZSBhIDMyIGJpdHMgd2lkZS4KKwkgKi8KKwlfX2hjMzIJZnJhbWVfbm87CQkvKiBjdXJyZW50IGZyYW1lIG51bWJlciAqLworCV9faGMzMglkb25lX2hlYWQ7CQkvKiBpbmZvIHJldHVybmVkIGZvciBhbiBpbnRlcnJ1cHQgKi8KKwl1OAlyZXNlcnZlZF9mb3JfaGMgWzExNl07CisJdTgJd2hhdCBbNF07CQkvKiBzcGVjIG9ubHkgaWRlbnRpZmllcyAyNTIgYnl0ZXMgOikgKi8KK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMjU2KSkpOworCisvKgorICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBPSENJIGNvbnRyb2xsZXIncyBtZW1vcnkgbWFwcGVkIEkvTyByZWdpb24uCisgKiBZb3UgbXVzdCB1c2UgcmVhZGwoKSBhbmQgd3JpdGVsKCkgKGluIDxhc20vaW8uaD4pIHRvIGFjY2VzcyB0aGVzZSBmaWVsZHMhIQorICogTGF5b3V0IGlzIGluIHNlY3Rpb24gNyAoYW5kIGFwcGVuZGl4IEIpIG9mIHRoZSBzcGVjLgorICovCitzdHJ1Y3Qgb2hjaV9yZWdzIHsKKwkvKiBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIChzZWN0aW9uIDcuMSkgKi8KKwlfX2hjMzIJcmV2aXNpb247CisJX19oYzMyCWNvbnRyb2w7CisJX19oYzMyCWNtZHN0YXR1czsKKwlfX2hjMzIJaW50cnN0YXR1czsKKwlfX2hjMzIJaW50cmVuYWJsZTsKKwlfX2hjMzIJaW50cmRpc2FibGU7CisKKwkvKiBtZW1vcnkgcG9pbnRlcnMgKHNlY3Rpb24gNy4yKSAqLworCV9faGMzMgloY2NhOworCV9faGMzMgllZF9wZXJpb2RjdXJyZW50OworCV9faGMzMgllZF9jb250cm9saGVhZDsKKwlfX2hjMzIJZWRfY29udHJvbGN1cnJlbnQ7CisJX19oYzMyCWVkX2J1bGtoZWFkOworCV9faGMzMgllZF9idWxrY3VycmVudDsKKwlfX2hjMzIJZG9uZWhlYWQ7CisKKwkvKiBmcmFtZSBjb3VudGVycyAoc2VjdGlvbiA3LjMpICovCisJX19oYzMyCWZtaW50ZXJ2YWw7CisJX19oYzMyCWZtcmVtYWluaW5nOworCV9faGMzMglmbW51bWJlcjsKKwlfX2hjMzIJcGVyaW9kaWNzdGFydDsKKwlfX2hjMzIJbHN0aHJlc2g7CisKKwkvKiBSb290IGh1YiBwb3J0cyAoc2VjdGlvbiA3LjQpICovCisJc3RydWN0CW9oY2lfcm9vdGh1Yl9yZWdzIHsKKwkJX19oYzMyCWE7CisJCV9faGMzMgliOworCQlfX2hjMzIJc3RhdHVzOworI2RlZmluZSBNQVhfUk9PVF9QT1JUUwkxNQkvKiBtYXhpbXVtIE9IQ0kgcm9vdCBodWIgcG9ydHMgKFJIX0FfTkRQKSAqLworCQlfX2hjMzIJcG9ydHN0YXR1cyBbTUFYX1JPT1RfUE9SVFNdOworCX0gcm9vdGh1YjsKKworCS8qIGFuZCBvcHRpb25hbCAibGVnYWN5IHN1cHBvcnQiIHJlZ2lzdGVycyAoYXBwZW5kaXggQikgYXQgMHgwMTAwICovCisKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CisKKworLyogT0hDSSBDT05UUk9MIEFORCBTVEFUVVMgUkVHSVNURVIgTUFTS1MgKi8KKworLyoKKyAqIEhjQ29udHJvbCAoY29udHJvbCkgcmVnaXN0ZXIgbWFza3MKKyAqLworI2RlZmluZSBPSENJX0NUUkxfQ0JTUgkoMyA8PCAwKQkvKiBjb250cm9sL2J1bGsgc2VydmljZSByYXRpbyAqLworI2RlZmluZSBPSENJX0NUUkxfUExFCSgxIDw8IDIpCS8qIHBlcmlvZGljIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9JRQkoMSA8PCAzKQkvKiBpc29jaHJvbm91cyBlbmFibGUgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX0NMRQkoMSA8PCA0KQkvKiBjb250cm9sIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9CTEUJKDEgPDwgNSkJLyogYnVsayBsaXN0IGVuYWJsZSAqLworI2RlZmluZSBPSENJX0NUUkxfSENGUwkoMyA8PCA2KQkvKiBob3N0IGNvbnRyb2xsZXIgZnVuY3Rpb25hbCBzdGF0ZSAqLworI2RlZmluZSBPSENJX0NUUkxfSVIJKDEgPDwgOCkJLyogaW50ZXJydXB0IHJvdXRpbmcgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX1JXQwkoMSA8PCA5KQkvKiByZW1vdGUgd2FrZXVwIGNvbm5lY3RlZCAqLworI2RlZmluZSBPSENJX0NUUkxfUldFCSgxIDw8IDEwKQkvKiByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworCisvKiBwcmUtc2hpZnRlZCB2YWx1ZXMgZm9yIEhDRlMgKi8KKyMJZGVmaW5lIE9IQ0lfVVNCX1JFU0VUCSgwIDw8IDYpCisjCWRlZmluZSBPSENJX1VTQl9SRVNVTUUJKDEgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX09QRVIJKDIgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX1NVU1BFTkQJKDMgPDwgNikKKworLyoKKyAqIEhjQ29tbWFuZFN0YXR1cyAoY21kc3RhdHVzKSByZWdpc3RlciBtYXNrcworICovCisjZGVmaW5lIE9IQ0lfSENSCSgxIDw8IDApCS8qIGhvc3QgY29udHJvbGxlciByZXNldCAqLworI2RlZmluZSBPSENJX0NMRiAgCSgxIDw8IDEpCS8qIGNvbnRyb2wgbGlzdCBmaWxsZWQgKi8KKyNkZWZpbmUgT0hDSV9CTEYgIAkoMSA8PCAyKQkvKiBidWxrIGxpc3QgZmlsbGVkICovCisjZGVmaW5lIE9IQ0lfT0NSICAJKDEgPDwgMykJLyogb3duZXJzaGlwIGNoYW5nZSByZXF1ZXN0ICovCisjZGVmaW5lIE9IQ0lfU09DICAJKDMgPDwgMTYpCS8qIHNjaGVkdWxpbmcgb3ZlcnJ1biBjb3VudCAqLworCisvKgorICogbWFza3MgdXNlZCB3aXRoIGludGVycnVwdCByZWdpc3RlcnM6CisgKiBIY0ludGVycnVwdFN0YXR1cyAoaW50cnN0YXR1cykKKyAqIEhjSW50ZXJydXB0RW5hYmxlIChpbnRyZW5hYmxlKQorICogSGNJbnRlcnJ1cHREaXNhYmxlIChpbnRyZGlzYWJsZSkKKyAqLworI2RlZmluZSBPSENJX0lOVFJfU08JKDEgPDwgMCkJLyogc2NoZWR1bGluZyBvdmVycnVuICovCisjZGVmaW5lIE9IQ0lfSU5UUl9XREgJKDEgPDwgMSkJLyogd3JpdGViYWNrIG9mIGRvbmVfaGVhZCAqLworI2RlZmluZSBPSENJX0lOVFJfU0YJKDEgPDwgMikJLyogc3RhcnQgZnJhbWUgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1JECSgxIDw8IDMpCS8qIHJlc3VtZSBkZXRlY3QgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1VFCSgxIDw8IDQpCS8qIHVucmVjb3ZlcmFibGUgZXJyb3IgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX0ZOTwkoMSA8PCA1KQkvKiBmcmFtZSBudW1iZXIgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1JIU0MJKDEgPDwgNikJLyogcm9vdCBodWIgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBPSENJX0lOVFJfT0MJKDEgPDwgMzApCS8qIG93bmVyc2hpcCBjaGFuZ2UgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX01JRQkoMSA8PCAzMSkJLyogbWFzdGVyIGludGVycnVwdCBlbmFibGUgKi8KKworCisvKiBPSENJIFJPT1QgSFVCIFJFR0lTVEVSIE1BU0tTICovCisgCisvKiByb290aHViLnBvcnRzdGF0dXMgW2ldIGJpdHMgKi8KKyNkZWZpbmUgUkhfUFNfQ0NTICAgICAgICAgICAgMHgwMDAwMDAwMSAgIAkvKiBjdXJyZW50IGNvbm5lY3Qgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BFUyAgICAgICAgICAgIDB4MDAwMDAwMDIgICAJLyogcG9ydCBlbmFibGUgc3RhdHVzKi8KKyNkZWZpbmUgUkhfUFNfUFNTICAgICAgICAgICAgMHgwMDAwMDAwNCAgIAkvKiBwb3J0IHN1c3BlbmQgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BPQ0kgICAgICAgICAgIDB4MDAwMDAwMDggICAJLyogcG9ydCBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFJIX1BTX1BSUyAgICAgICAgICAgIDB4MDAwMDAwMTAgIAkvKiBwb3J0IHJlc2V0IHN0YXR1cyAqLworI2RlZmluZSBSSF9QU19QUFMgICAgICAgICAgICAweDAwMDAwMTAwICAgCS8qIHBvcnQgcG93ZXIgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX0xTREEgICAgICAgICAgIDB4MDAwMDAyMDAgICAgCS8qIGxvdyBzcGVlZCBkZXZpY2UgYXR0YWNoZWQgKi8KKyNkZWZpbmUgUkhfUFNfQ1NDICAgICAgICAgICAgMHgwMDAxMDAwMCAJLyogY29ubmVjdCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BFU0MgICAgICAgICAgIDB4MDAwMjAwMDAgICAJLyogcG9ydCBlbmFibGUgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QU1NDICAgICAgICAgICAweDAwMDQwMDAwICAgIAkvKiBwb3J0IHN1c3BlbmQgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19PQ0lDICAgICAgICAgICAweDAwMDgwMDAwICAgIAkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QUlNDICAgICAgICAgICAweDAwMTAwMDAwICAgCS8qIHBvcnQgcmVzZXQgc3RhdHVzIGNoYW5nZSAqLworCisvKiByb290aHViLnN0YXR1cyBiaXRzICovCisjZGVmaW5lIFJIX0hTX0xQUwkgICAgIDB4MDAwMDAwMDEJCS8qIGxvY2FsIHBvd2VyIHN0YXR1cyAqLworI2RlZmluZSBSSF9IU19PQ0kJICAgICAweDAwMDAwMDAyCQkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFJIX0hTX0RSV0UJICAgICAweDAwMDA4MDAwCQkvKiBkZXZpY2UgcmVtb3RlIHdha2V1cCBlbmFibGUgKi8KKyNkZWZpbmUgUkhfSFNfTFBTQwkgICAgIDB4MDAwMTAwMDAJCS8qIGxvY2FsIHBvd2VyIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfSFNfT0NJQwkgICAgIDB4MDAwMjAwMDAJCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlICovCisjZGVmaW5lIFJIX0hTX0NSV0UJICAgICAweDgwMDAwMDAwCQkvKiBjbGVhciByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworCisvKiByb290aHViLmIgbWFza3MgKi8KKyNkZWZpbmUgUkhfQl9EUgkJMHgwMDAwZmZmZgkJLyogZGV2aWNlIHJlbW92YWJsZSBmbGFncyAqLworI2RlZmluZSBSSF9CX1BQQ00JMHhmZmZmMDAwMAkJLyogcG9ydCBwb3dlciBjb250cm9sIG1hc2sgKi8KKworLyogcm9vdGh1Yi5hIG1hc2tzICovCisjZGVmaW5lCVJIX0FfTkRQCSgweGZmIDw8IDApCQkvKiBudW1iZXIgb2YgZG93bnN0cmVhbSBwb3J0cyAqLworI2RlZmluZQlSSF9BX1BTTQkoMSA8PCA4KQkJLyogcG93ZXIgc3dpdGNoaW5nIG1vZGUgKi8KKyNkZWZpbmUJUkhfQV9OUFMJKDEgPDwgOSkJCS8qIG5vIHBvd2VyIHN3aXRjaGluZyAqLworI2RlZmluZQlSSF9BX0RUCQkoMSA8PCAxMCkJCS8qIGRldmljZSB0eXBlIChtYnopICovCisjZGVmaW5lCVJIX0FfT0NQTQkoMSA8PCAxMSkJCS8qIG92ZXIgY3VycmVudCBwcm90ZWN0aW9uIG1vZGUgKi8KKyNkZWZpbmUJUkhfQV9OT0NQCSgxIDw8IDEyKQkJLyogbm8gb3ZlciBjdXJyZW50IHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJUkhfQV9QT1RQR1QJKDB4ZmYgPDwgMjQpCQkvKiBwb3dlciBvbiB0byBwb3dlciBnb29kIHRpbWUgKi8KKworCisvKiBoY2QtcHJpdmF0ZSBwZXItdXJiIHN0YXRlICovCit0eXBlZGVmIHN0cnVjdCB1cmJfcHJpdiB7CisJc3RydWN0IGVkCQkqZWQ7CisJdTE2CQkJbGVuZ3RoOwkJLy8gIyB0ZHMgaW4gdGhpcyByZXF1ZXN0CisJdTE2CQkJdGRfY250OwkJLy8gdGRzIGFscmVhZHkgc2VydmljZWQKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmc7CisJc3RydWN0IHRkCQkqdGQgWzBdOwkvLyBhbGwgVERzIGluIHRoaXMgcmVxdWVzdAorCit9IHVyYl9wcml2X3Q7CisKKyNkZWZpbmUgVERfSEFTSF9TSVpFICAgIDY0ICAgIC8qIHBvd2VyJ28ndHdvICovCisvLyBzaXplb2YgKHN0cnVjdCB0ZCkgfj0gNjQgPT0gMl42IC4uLiAKKyNkZWZpbmUgVERfSEFTSF9GVU5DKHRkX2RtYSkgKCh0ZF9kbWEgXiAodGRfZG1hID4+IDYpKSAlIFREX0hBU0hfU0laRSkKKworCisvKgorICogVGhpcyBpcyB0aGUgZnVsbCBvaGNpIGNvbnRyb2xsZXIgZGVzY3JpcHRpb24KKyAqCisgKiBOb3RlIGhvdyB0aGUgInByb3BlciIgVVNCIGluZm9ybWF0aW9uIGlzIGp1c3QKKyAqIGEgc3Vic2V0IG9mIHdoYXQgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gbmVlZHMuIChMaW51cykKKyAqLworCitzdHJ1Y3Qgb2hjaV9oY2QgeworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwkvKgorCSAqIEkvTyBtZW1vcnkgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBIQyAoZG1hLWNvbnNpc3RlbnQpCisJICovCisJc3RydWN0IG9oY2lfcmVncyBfX2lvbWVtICpyZWdzOworCisJLyoKKwkgKiBtYWluIG1lbW9yeSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEhDIChkbWEtY29uc2lzdGVudCkuCisJICogaGNkIGFkZHMgdG8gc2NoZWR1bGUgZm9yIGEgbGl2ZSBoYyBhbnkgdGltZSwgYnV0IHJlbW92YWxzIGZpbmlzaAorCSAqIG9ubHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZyYW1lLgorCSAqLworCXN0cnVjdCBvaGNpX2hjY2EJKmhjY2E7CisJZG1hX2FkZHJfdAkJaGNjYV9kbWE7CisKKwlzdHJ1Y3QgZWQJCSplZF9ybV9saXN0OwkJLyogdG8gYmUgcmVtb3ZlZCAqLworCisJc3RydWN0IGVkCQkqZWRfYnVsa3RhaWw7CQkvKiBsYXN0IGluIGJ1bGsgbGlzdCAqLworCXN0cnVjdCBlZAkJKmVkX2NvbnRyb2x0YWlsOwkvKiBsYXN0IGluIGN0cmwgbGlzdCAqLworIAlzdHJ1Y3QgZWQJCSpwZXJpb2RpYyBbTlVNX0lOVFNdOwkvKiBzaGFkb3cgaW50X3RhYmxlICovCisKKwkvKgorCSAqIE9URyBjb250cm9sbGVycyBhbmQgdHJhbnNjZWl2ZXJzIG5lZWQgc29mdHdhcmUgaW50ZXJhY3Rpb247CisJICogb3RoZXIgZXh0ZXJuYWwgdHJhbnNjZWl2ZXJzIHNob3VsZCBiZSBzb2Z0d2FyZS10cmFuc3BhcmVudCAKKwkgKi8KKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCSp0cmFuc2NlaXZlcjsKKwl1bnNpZ25lZAkJcG93ZXJfYnVkZ2V0OworCisJLyoKKwkgKiBtZW1vcnkgbWFuYWdlbWVudCBmb3IgcXVldWUgZGF0YSBzdHJ1Y3R1cmVzCisJICovCisJc3RydWN0IGRtYV9wb29sCQkqdGRfY2FjaGU7CisJc3RydWN0IGRtYV9wb29sCQkqZWRfY2FjaGU7CisJc3RydWN0IHRkCQkqdGRfaGFzaCBbVERfSEFTSF9TSVpFXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmc7CisKKwkvKgorCSAqIGRyaXZlciBzdGF0ZQorCSAqLworCWludAkJCWxvYWQgW05VTV9JTlRTXTsKKwl1MzIgCQkJaGNfY29udHJvbDsJLyogY29weSBvZiBoYyBjb250cm9sIHJlZyAqLworCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CS8qIHN1c3BlbmQvcmVzdW1lICovCisJdTMyCQkJZm1pbnRlcnZhbDsJCS8qIHNhdmVkIHJlZ2lzdGVyICovCisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmhfcmVzdW1lOworCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBmb3IgSEMgYnVncyAqLworI2RlZmluZQlPSENJX1FVSVJLX0FNRDc1NgkweDAxCQkJLyogZXJyYXR1bSAjNCAqLworI2RlZmluZQlPSENJX1FVSVJLX1NVUEVSSU8JMHgwMgkJCS8qIG5hdHNlbWkgKi8KKyNkZWZpbmUJT0hDSV9RVUlSS19JTklUUkVTRVQJMHgwNAkJCS8qIFNpUywgT1BUaSwgLi4uICovCisjZGVmaW5lCU9IQ0lfQklHX0VORElBTgkJMHgwOAkJCS8qIGJpZyBlbmRpYW4gSEMgKi8KKwkvLyB0aGVyZSBhcmUgYWxzbyBjaGlwIHF1aXJrcy9idWdzIGluIGluaXQgbG9naWMKKworfTsKKworLyogY29udmVydCBiZXR3ZWVuIGFuIGhjZCBwb2ludGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBvaGNpX2hjZCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2hjaV9oY2QgKmhjZF90b19vaGNpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IG9oY2lfaGNkICopIChoY2QtPmhjZF9wcml2KTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKm9oY2lfdG9faGNkIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoKHZvaWQgKikgb2hjaSwgc3RydWN0IHVzYl9oY2QsIGhjZF9wcml2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZiBERUJVRworI2RlZmluZSBTVFVCX0RFQlVHX0ZJTEVTCisjZW5kaWYJLyogREVCVUcgKi8KKworI2RlZmluZSBvaGNpX2RiZyhvaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfZGJnIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIG9oY2lfZXJyKG9oY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9lcnIgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgb2hjaV9pbmZvKG9oY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9pbmZvIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisjZGVmaW5lIG9oY2lfd2FybihvaGNpLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfd2FybiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuY29udHJvbGxlciAsIGZtdCAsICMjIGFyZ3MgKQorCisjaWZkZWYgT0hDSV9WRVJCT1NFX0RFQlVHCisjCWRlZmluZSBvaGNpX3ZkYmcgb2hjaV9kYmcKKyNlbHNlCisjCWRlZmluZSBvaGNpX3ZkYmcob2hjaSwgZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFdoaWxlIG1vc3QgVVNCIGhvc3QgY29udHJvbGxlcnMgaW1wbGVtZW50IHRoZWlyIHJlZ2lzdGVycyBhbmQKKyAqIGluLW1lbW9yeSBjb21tdW5pY2F0aW9uIGRlc2NyaXB0b3JzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0LAorICogYSBtaW5vcml0eSAobm90YWJseSB0aGUgSUJNIFNUQjA0WFhYIGFuZCB0aGUgTW90b3JvbGEgTVBDNTIwMAorICogcHJvY2Vzc29ycykgaW1wbGVtZW50IHRoZW0gaW4gYmlnIGVuZGlhbiBmb3JtYXQuCisgKgorICogVGhpcyBhdHRlbXB0cyB0byBzdXBwb3J0IGVpdGhlciBmb3JtYXQgYXQgY29tcGlsZSB0aW1lIHdpdGhvdXQgYQorICogcnVudGltZSBwZW5hbHR5LCBvciBib3RoIGZvcm1hdHMgd2l0aCB0aGUgYWRkaXRpb25hbCBvdmVyaGVhZAorICogb2YgY2hlY2tpbmcgYSBmbGFnIGJpdC4KKyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4KKworI2lmZGVmIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIGJpZ19lbmRpYW4ob2hjaSkJKG9oY2ktPmZsYWdzICYgT0hDSV9CSUdfRU5ESUFOKSAvKiBlaXRoZXIgKi8KKyNlbHNlCisjZGVmaW5lIGJpZ19lbmRpYW4ob2hjaSkJMQkJLyogb25seSBiaWcgZW5kaWFuICovCisjZW5kaWYKKworLyoKKyAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCisgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QUEMpCisjZGVmaW5lIHJlYWRsX2JlKGFkZHIpCQlpbl9iZTMyKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKKyNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJb3V0X2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyLCB2YWwpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2hjaV9yZWFkbCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLAorCQkJCQkJCV9faGMzMiBfX2lvbWVtICogcmVncykKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IHJlYWRsX2JlIChyZWdzKSA6IHJlYWRsICgoX19mb3JjZSB1MzIgKilyZWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9oY2lfd3JpdGVsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbCwgX19oYzMyIF9faW9tZW0gKnJlZ3MpCit7CisJYmlnX2VuZGlhbihvaGNpKSA/IHdyaXRlbF9iZSAodmFsLCByZWdzKSA6CisJCQkgICB3cml0ZWwgKHZhbCwgKF9fZm9yY2UgdTMyICopcmVncyk7Cit9CisKKyNlbHNlCS8qICFDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiAqLworCisjZGVmaW5lIGJpZ19lbmRpYW4ob2hjaSkJMAkJLyogb25seSBsaXR0bGUgZW5kaWFuICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisJLyogTWFyYyBTaW5nZXI6IGF0IHRoZSB0aW1lIHRoaXMgY29kZSB3YXMgd3JpdHRlbiwgdGhlIExIN0E0MDQKKwkgKiBoYWQgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIFVTQiBob3N0IHJlZ2lzdGVycy4gIFRoaXMKKwkgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb2hjaV9yZWFkbCBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgcmVhZAorCSAqIHR3aWNlIGFzIGEgd29yay1hcm91bmQuCisJICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorb2hjaV9yZWFkbCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMzIgKnJlZ3MpCit7CisJKih2b2xhdGlsZSBfX2ZvcmNlIHVuc2lnbmVkIGludCopIHJlZ3M7CisJcmV0dXJuICoodm9sYXRpbGUgX19mb3JjZSB1bnNpZ25lZCBpbnQqKSByZWdzOworfQorI2Vsc2UKKwkvKiBTdGFuZGFyZCB2ZXJzaW9uIG9mIG9oY2lfcmVhZGwgdXNlcyBzdGFuZGFyZCwgcGxhdGZvcm0KKwkgKiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitvaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIF9faGMzMiBfX2lvbWVtICogcmVncykKK3sKKwlyZXR1cm4gcmVhZGwocmVncyk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIG9oY2lfd3JpdGVsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJCQkJY29uc3QgdW5zaWduZWQgaW50IHZhbCwgX19oYzMyIF9faW9tZW0gKnJlZ3MpCit7CisJd3JpdGVsICh2YWwsIHJlZ3MpOworfQorCisjZW5kaWYJLyogIUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNwdSB0byBvaGNpICovCitzdGF0aWMgaW5saW5lIF9faGMxNiBjcHVfdG9faGMxNiAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCB1MTYgeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IChfX2ZvcmNlIF9faGMxNiljcHVfdG9fYmUxNih4KSA6IChfX2ZvcmNlIF9faGMxNiljcHVfdG9fbGUxNih4KTsKK30KKworc3RhdGljIGlubGluZSBfX2hjMTYgY3B1X3RvX2hjMTZwIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IHUxNiAqeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGNwdV90b19iZTE2cCh4KSA6IGNwdV90b19sZTE2cCh4KTsKK30KKworc3RhdGljIGlubGluZSBfX2hjMzIgY3B1X3RvX2hjMzIgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgdTMyIHgpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyAoX19mb3JjZSBfX2hjMzIpY3B1X3RvX2JlMzIoeCkgOiAoX19mb3JjZSBfX2hjMzIpY3B1X3RvX2xlMzIoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19oYzMyIGNwdV90b19oYzMycCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCB1MzIgKngpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyBjcHVfdG9fYmUzMnAoeCkgOiBjcHVfdG9fbGUzMnAoeCk7Cit9CisKKy8qIG9oY2kgdG8gY3B1ICovCitzdGF0aWMgaW5saW5lIHUxNiBoYzE2X3RvX2NwdSAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMTYgeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGJlMTZfdG9fY3B1KChfX2ZvcmNlIF9fYmUxNil4KSA6IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNil4KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaGMxNl90b19jcHVwIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IF9faGMxNiAqeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGJlMTZfdG9fY3B1cCgoX19mb3JjZSBfX2JlMTYgKil4KSA6IGxlMTZfdG9fY3B1cCgoX19mb3JjZSBfX2xlMTYgKil4KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaGMzMl90b19jcHUgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgX19oYzMyIHgpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpeCkgOiBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhjMzJfdG9fY3B1cCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMzIgKngpCit7CisJcmV0dXJuIGJpZ19lbmRpYW4ob2hjaSkgPyBiZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19iZTMyICopeCkgOiBsZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19sZTMyICopeCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhDQ0EgZnJhbWUgbnVtYmVyIGlzIDE2IGJpdHMsIGJ1dCBpcyBhY2Nlc3NlZCBhcyAzMiBiaXRzIHNpbmNlIG5vdCBhbGwKKyAqIGhhcmR3YXJlIGhhbmRsZXMgMTYgYml0IHJlYWRzLiAgVGhhdCBjcmVhdGVzIGEgZGlmZmVyZW50IGNvbmZ1c2lvbiBvbgorICogc29tZSBiaWctZW5kaWFuIFNPQyBpbXBsZW1lbnRhdGlvbnMuICBTYW1lIHRoaW5nIGhhcHBlbnMgd2l0aCBQU1cgYWNjZXNzLgorICovCisKKyNpZmRlZiBDT05GSUdfU1RCMDN4eHgKKyNkZWZpbmUgT0hDSV9CRV9GUkFNRV9OT19TSElGVAkxNgorI2Vsc2UKKyNkZWZpbmUgT0hDSV9CRV9GUkFNRV9OT19TSElGVAkwCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1MTYgb2hjaV9mcmFtZV9ubyhjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJdTMyIHRtcDsKKwlpZiAoYmlnX2VuZGlhbihvaGNpKSkgeworCQl0bXAgPSBiZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19iZTMyICopJm9oY2ktPmhjY2EtPmZyYW1lX25vKTsKKwkJdG1wID4+PSBPSENJX0JFX0ZSQU1FX05PX1NISUZUOworCX0gZWxzZQorCQl0bXAgPSBsZTMyX3RvX2NwdXAoKF9fZm9yY2UgX19sZTMyICopJm9oY2ktPmhjY2EtPmZyYW1lX25vKTsKKworCXJldHVybiAodTE2KXRtcDsKK30KKworc3RhdGljIGlubGluZSBfX2hjMTYgKm9oY2lfaHdQU1dwKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0ZCAqdGQsIGludCBpbmRleCkKK3sKKwlyZXR1cm4gKF9faGMxNiAqKShiaWdfZW5kaWFuKG9oY2kpID8KKwkJCSZ0ZC0+aHdQU1dbaW5kZXggXiAxXSA6ICZ0ZC0+aHdQU1dbaW5kZXhdKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgb2hjaV9od1BTVyhjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRkICp0ZCwgaW50IGluZGV4KQoreworCXJldHVybiBoYzE2X3RvX2NwdXAob2hjaSwgb2hjaV9od1BTV3Aob2hjaSwgdGQsIGluZGV4KSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKK30KKworI2RlZmluZQlGSQkJCTB4MmVkZgkJLyogMTIwMDAgYml0cyBwZXIgZnJhbWUgKC0xKSAqLworI2RlZmluZQlGU01QKGZpKSAJCSgweDdmZmYgJiAoKDYgKiAoKGZpKSAtIDIxMCkpIC8gNykpCisjZGVmaW5lCUZJVAkJCSgxIDw8IDMxKQorI2RlZmluZSBMU1RIUkVTSAkJMHg2MjgJCS8qIGxvd3NwZWVkIGJpdCB0aHJlc2hvbGQgKi8KKworc3RhdGljIHZvaWQgcGVyaW9kaWNfcmVpbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJdTMyCWZpID0gb2hjaS0+Zm1pbnRlcnZhbCAmIDB4MDNmZmY7CisJdTMyCWZpdCA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmZtaW50ZXJ2YWwpICYgRklUOworCisJb2hjaV93cml0ZWwgKG9oY2ksIChmaXQgXiBGSVQpIHwgb2hjaS0+Zm1pbnRlcnZhbCwKKwkJCQkJCSZvaGNpLT5yZWdzLT5mbWludGVydmFsKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgKCg5ICogZmkpIC8gMTApICYgMHgzZmZmLAorCQkJCQkJJm9oY2ktPnJlZ3MtPnBlcmlvZGljc3RhcnQpOworfQorCisvKiBBTUQtNzU2IChEMiByZXYpIHJlcG9ydHMgY29ycnVwdCByZWdpc3RlciBjb250ZW50cyBpbiBzb21lIGNhc2VzLgorICogVGhlIGVycmF0dW0gKCM0KSBkZXNjcmlwdGlvbiBpcyBpbmNvcnJlY3QuICBBTUQncyB3b3JrYXJvdW5kIHdhaXRzCisgKiB0aWxsIHNvbWUgYml0cyAobW9zdGx5IHJlc2VydmVkKSBhcmUgY2xlYXI7IG9rIGZvciBhbGwgcmV2cy4KKyAqLworI2RlZmluZSByZWFkX3Jvb3RodWIoaGMsIHJlZ2lzdGVyLCBtYXNrKSAoeyBcCisJdTMyIHRlbXAgPSBvaGNpX3JlYWRsIChoYywgJmhjLT5yZWdzLT5yb290aHViLnJlZ2lzdGVyKTsgXAorCWlmICh0ZW1wID09IC0xKSBcCisJCWRpc2FibGUgKGhjKTsgXAorCWVsc2UgaWYgKGhjLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1ENzU2KSBcCisJCXdoaWxlICh0ZW1wICYgbWFzaykgXAorCQkJdGVtcCA9IG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIucmVnaXN0ZXIpOyBcCisJdGVtcDsgfSkKKworc3RhdGljIHUzMiByb290aHViX2EgKHN0cnVjdCBvaGNpX2hjZCAqaGMpCisJeyByZXR1cm4gcmVhZF9yb290aHViIChoYywgYSwgMHhmYzBmZTAwMCk7IH0KK3N0YXRpYyBpbmxpbmUgdTMyIHJvb3RodWJfYiAoc3RydWN0IG9oY2lfaGNkICpoYykKKwl7IHJldHVybiBvaGNpX3JlYWRsIChoYywgJmhjLT5yZWdzLT5yb290aHViLmIpOyB9CitzdGF0aWMgaW5saW5lIHUzMiByb290aHViX3N0YXR1cyAoc3RydWN0IG9oY2lfaGNkICpoYykKKwl7IHJldHVybiBvaGNpX3JlYWRsIChoYywgJmhjLT5yZWdzLT5yb290aHViLnN0YXR1cyk7IH0KK3N0YXRpYyB1MzIgcm9vdGh1Yl9wb3J0c3RhdHVzIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBpbnQgaSkKKwl7IHJldHVybiByZWFkX3Jvb3RodWIgKGhjLCBwb3J0c3RhdHVzIFtpXSwgMHhmZmUwZmNlMCk7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMDllMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0wLDAgKzEsMTg1MSBAQAorLyoKKyAqIFNMODExSFMgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBQc2lvbiBUZWtsb2dpeCAoZm9yIE5ldEJvb2sgUFJPKQorICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFBlcmlvZGljIHNjaGVkdWxpbmcgaXMgYmFzZWQgb24gUm9tYW4ncyBPSENJIGNvZGUKKyAqIAlDb3B5cmlnaHQgKEMpIDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyCisgKgorICogVGhlIFNMODExSFMgY29udHJvbGxlciBoYW5kbGVzIGhvc3Qgc2lkZSBVU0IgKGxpa2UgdGhlIFNMMTFILCBidXQgd2l0aAorICogYW5vdGhlciByZWdpc3RlciBzZXQgYW5kIFNPRiBnZW5lcmF0aW9uKSBhcyB3ZWxsIGFzIHBlcmlwaGVyYWwgc2lkZSBVU0IKKyAqIChsaWtlIHRoZSBTTDgxMVMpLiAgVGhpcyBkcml2ZXIgdmVyc2lvbiBkb2Vzbid0IGltcGxlbWVudCB0aGUgR2FkZ2V0IEFQSQorICogZm9yIHRoZSBwZXJpcGhlcmFsIHJvbGU7IG9yIE9URyAodGhhdCdkIG5lZWQgbXVjaCBleHRlcm5hbCBjaXJjdWl0cnkpLgorICoKKyAqIEZvciBkb2N1bWVudGF0aW9uLCBzZWUgdGhlIFNMODExSFMgc3BlYyBhbmQgdGhlICJTTDgxMUhTIEVtYmVkZGVkIEhvc3QiCisgKiBkb2N1bWVudCAocHJvdmlkaW5nIHNpZ25pZmljYW50IHBpZWNlcyBtaXNzaW5nIGZyb20gdGhhdCBzcGVjKTsgcGx1cworICogdGhlIFNMODExUyBzcGVjIGlmIHlvdSB3YW50IHBlcmlwaGVyYWwgc2lkZSBpbmZvLgorICovIAorCisvKgorICogU3RhdHVzOiAgUGFzc2VkIGJhc2ljIHN0cmVzcyB0ZXN0aW5nLCB3b3JrcyB3aXRoIGh1YnMsIG1pY2UsIGtleWJvYXJkcywKKyAqIGFuZCB1c2Itc3RvcmFnZS4KKyAqCisgKiBUT0RPOgorICogLSB1c2Igc3VzcGVuZC9yZXN1bWUgdHJpZ2dlcmVkIGJ5IHNsODExICh3aXRoIFVTQl9TVVNQRU5EKQorICogLSB2YXJpb3VzIGlzc3VlcyBub3RlZCBpbiB0aGUgY29kZQorICogLSBwZXJmb3JtYW5jZSB3b3JrOyB1c2UgYm90aCByZWdpc3RlciBiYW5rczsgLi4uCisgKiAtIHVzZSB1cmItPmlzb19mcmFtZV9kZXNjW10gd2l0aCBJU08gdHJhbnNmZXJzCisgKi8KKworI3VuZGVmCVZFUkJPU0UKKyN1bmRlZglQQUNLRVRfVFJBQ0UKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworIwlkZWZpbmUgREVCVUcKKyNlbHNlCisjCXVuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9zbDgxMS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorI2luY2x1ZGUgInNsODExLmgiCisKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTDgxMUhTIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjE1IERlYyAyMDA0IgorCisKKyNpZm5kZWYgREVCVUcKKyMJZGVmaW5lCVNUVUJfREVCVUdfRklMRQorI2VuZGlmCisKKy8qIGZvciBub3csIHVzZSBvbmx5IG9uZSB0cmFuc2ZlciByZWdpc3RlciBiYW5rICovCisjdW5kZWYJVVNFX0IKKworLyogdGhpcyBkb2Vzbid0IHVuZGVyc3RhbmQgdXJiLT5pc29fZnJhbWVfZGVzY1tdLCBidXQgaWYgeW91IGhhZCBhIGRyaXZlcgorICogdGhhdCBqdXN0IHF1ZXVlZCBvbmUgSVNPIGZyYW1lIHBlciBVUkIgdGhlbiBpc28gdHJhbnNmZXJzICJzaG91bGQiIHdvcmsKKyAqIHVzaW5nIHRoZSBub3JtYWwgdXJiIHN0YXR1cyBmaWVsZHMuCisgKi8KKyNkZWZpbmUJRElTQUJMRV9JU08KKworLy8gI2RlZmluZQlRVUlSSzIKKyNkZWZpbmUJUVVJUkszCisKK3N0YXRpYyBjb25zdCBjaGFyIGhjZF9uYW1lW10gPSAic2w4MTEtaGNkIjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcG9ydF9wb3dlcihzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgaXNfb24pCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHNsODExX3RvX2hjZChzbDgxMSk7CisKKwkvKiBodWIgaXMgaW5hY3RpdmUgdW5sZXNzIHRoZSBwb3J0IGlzIHBvd2VyZWQgKi8KKwlpZiAoaXNfb24pIHsKKwkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpKQorCQkJcmV0dXJuOworCisJCXNsODExLT5wb3J0MSA9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WOworCQloY2QtPnNlbGYuY29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCX0gZWxzZSB7CisJCXNsODExLT5wb3J0MSA9IDA7CisJCXNsODExLT5pcnFfZW5hYmxlID0gMDsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfU1VTUEVORDsKKwl9CisJc2w4MTEtPmN0cmwxID0gMDsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgMCk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMsIH4wKTsKKworCWlmIChzbDgxMS0+Ym9hcmQgJiYgc2w4MTEtPmJvYXJkLT5wb3J0X3Bvd2VyKSB7CisJCS8qIHN3aXRjaCBWQlVTLCBhdCA1MDBtQSB1bmxlc3MgaHViIHBvd2VyIGJ1ZGdldCBnZXRzIHNldCAqLworCQlEQkcoInBvd2VyICVzXG4iLCBpc19vbiA/ICJvbiIgOiAib2ZmIik7CisJCXNsODExLT5ib2FyZC0+cG9ydF9wb3dlcihoY2QtPnNlbGYuY29udHJvbGxlciwgaXNfb24pOworCX0KKworCS8qIHJlc2V0IGFzIHRob3JvdWdobHkgYXMgd2UgY2FuICovCisJaWYgKHNsODExLT5ib2FyZCAmJiBzbDgxMS0+Ym9hcmQtPnJlc2V0KQorCQlzbDgxMS0+Ym9hcmQtPnJlc2V0KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLCAwKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFIU19DVExSRUcyLCBTTDgxMUhTX0NUTDJfSU5JVCk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKKworCS8vIGlmICFpc19vbiwgcHV0IGludG8gbG93cG93ZXIgbW9kZSBub3cKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhpcyBpcyBhIFBJTy1vbmx5IEhDRC4gIFF1ZXVlaW5nIGFwcGVuZHMgVVJCcyB0byB0aGUgZW5kcG9pbnQncyBxdWV1ZSwKKyAqIGFuZCBtYXkgc3RhcnQgSS9PLiAgRW5kcG9pbnQgcXVldWVzIGFyZSBzY2FubmVkIGR1cmluZyBjb21wbGV0aW9uIGlycQorICogaGFuZGxlcnMgKG9uZSBwZXIgcGFja2V0OiBBQ0ssIE5BSywgZmF1bHRzLCBldGMpIGFuZCB1cmIgY2FuY2VsYXRpb24uCisgKgorICogVXNpbmcgYW4gZXh0ZXJuYWwgRE1BIGVuZ2luZSB0byBjb3B5IGEgcGFja2V0IGF0IGEgdGltZSBjb3VsZCB3b3JrLAorICogdGhvdWdoIHNldHVwL3RlYXJkb3duIGNvc3RzIG1heSBiZSB0b28gYmlnIHRvIG1ha2UgaXQgd29ydGh3aGlsZS4KKyAqLworCisvKiBTRVRVUCBzdGFydHMgYSBuZXcgY29udHJvbCByZXF1ZXN0LiAgRGV2aWNlcyBhcmUgbm90IGFsbG93ZWQgdG8KKyAqIFNUQUxMIG9yIE5BSyB0aGVzZTsgdGhleSBtdXN0IGNhbmNlbCBhbnkgcGVuZGluZyBjb250cm9sIHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZCBzZXR1cF9wYWNrZXQoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1OAkJCWJhbmssCisJdTgJCQljb250cm9sCispCit7CisJdTgJCQlhZGRyOworCXU4CQkJbGVuOworCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOworCisJYWRkciA9IFNMODExSFNfUEFDS0VUX0JVRihiYW5rID09IDApOworCWxlbiA9IHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKwlzbDgxMV93cml0ZV9idWYoc2w4MTEsIGFkZHIsIHVyYi0+c2V0dXBfcGFja2V0LCBsZW4pOworCisJLyogYXV0b2luY3JlbWVudGluZyAqLworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfQlVGQUREUlJFRywgYWRkcik7CisJd3JpdGViKGxlbiwgZGF0YV9yZWcpOworCXdyaXRlYihTTF9TRVRVUCAvKiB8IGVwLT5lcG51bSAqLywgZGF0YV9yZWcpOworCXdyaXRlYih1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCBkYXRhX3JlZyk7CisKKwkvKiBhbHdheXMgT1VUL2RhdGEwICovIDsKKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0hPU1RDVExSRUcsCisJCQljb250cm9sIHwgU0wxMUhfSENUTE1BU0tfT1VUKTsKKwllcC0+bGVuZ3RoID0gMDsKKwlQQUNLRVQoIlNFVFVQIHFoJXBcbiIsIGVwKTsKK30KKworLyogU1RBVFVTIGZpbmlzaGVzIGNvbnRyb2wgcmVxdWVzdHMsIG9mdGVuIGFmdGVyIElOIG9yIE9VVCBkYXRhIHBhY2tldHMgKi8KK3N0YXRpYyB2b2lkIHN0YXR1c19wYWNrZXQoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1OAkJCWJhbmssCisJdTgJCQljb250cm9sCispCit7CisJaW50CQkJZG9fb3V0OworCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOworCisJZG9fb3V0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICYmIHVzYl9waXBlaW4odXJiLT5waXBlKTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKworCS8qIGF1dG9pbmNyZW1lbnRpbmcgKi8KKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0JVRkFERFJSRUcsIDApOworCXdyaXRlYigwLCBkYXRhX3JlZyk7CisJd3JpdGViKChkb19vdXQgPyBTTF9PVVQgOiBTTF9JTikgLyogfCBlcC0+ZXBudW0gKi8sIGRhdGFfcmVnKTsKKwl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOworCisJLyogYWx3YXlzIGRhdGExOyBzb21ldGltZXMgSU4gKi8KKwljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX1RPR0dMRTsKKwlpZiAoZG9fb3V0KQorCQljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX09VVDsKKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0hPU1RDVExSRUcsIGNvbnRyb2wpOworCWVwLT5sZW5ndGggPSAwOworCVBBQ0tFVCgiU1RBVFVTJXMvJXMgcWglcFxuIiwgZXAtPm5ha19jb3VudCA/ICIvcmV0cnkiIDogIiIsCisJCQlkb19vdXQgPyAib3V0IiA6ICJpbiIsIGVwKTsKK30KKworLyogSU4gcGFja2V0cyBjYW4gYmUgdXNlZCB3aXRoIGFueSB0eXBlIG9mIGVuZHBvaW50LiBoZXJlIHdlIGp1c3QKKyAqIHN0YXJ0IHRoZSB0cmFuc2ZlciwgZGF0YSBmcm9tIHRoZSBwZXJpcGhlcmFsIG1heSBhcnJpdmUgbGF0ZXIuCisgKiB1cmItPmlzb19mcmFtZV9kZXNjIGlzIGN1cnJlbnRseSBpZ25vcmVkIGhlcmUuLi4KKyAqLworc3RhdGljIHZvaWQgaW5fcGFja2V0KAorCXN0cnVjdCBzbDgxMQkJKnNsODExLAorCXN0cnVjdCBzbDgxMWhfZXAJKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdTgJCQliYW5rLAorCXU4CQkJY29udHJvbAorKQoreworCXU4CQkJYWRkcjsKKwl1OAkJCWxlbjsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKworCS8qIGF2b2lkIGxvc2luZyBkYXRhIG9uIG92ZXJmbG93ICovCisJbGVuID0gZXAtPm1heHBhY2tldDsKKwlhZGRyID0gU0w4MTFIU19QQUNLRVRfQlVGKGJhbmsgPT0gMCk7CisJaWYgKCEoY29udHJvbCAmIFNMMTFIX0hDVExNQVNLX0lTT0NIKQorCQkJJiYgdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAwKSkKKwkJY29udHJvbCB8PSBTTDExSF9IQ1RMTUFTS19UT0dHTEU7CisJZGF0YV9yZWcgPSBzbDgxMS0+ZGF0YV9yZWc7CisKKwkvKiBhdXRvaW5jcmVtZW50aW5nICovCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9CVUZBRERSUkVHLCBhZGRyKTsKKwl3cml0ZWIobGVuLCBkYXRhX3JlZyk7CisJd3JpdGViKFNMX0lOIHwgZXAtPmVwbnVtLCBkYXRhX3JlZyk7CisJd3JpdGViKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksIGRhdGFfcmVnKTsKKworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfSE9TVENUTFJFRywgY29udHJvbCk7CisJZXAtPmxlbmd0aCA9IG1pbigoaW50KWxlbiwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJUEFDS0VUKCJJTiVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAorCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApLCBlcCwgbGVuKTsKK30KKworLyogT1VUIHBhY2tldHMgY2FuIGJlIHVzZWQgd2l0aCBhbnkgdHlwZSBvZiBlbmRwb2ludC4KKyAqIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgaXMgY3VycmVudGx5IGlnbm9yZWQgaGVyZS4uLgorICovCitzdGF0aWMgdm9pZCBvdXRfcGFja2V0KAorCXN0cnVjdCBzbDgxMQkJKnNsODExLAorCXN0cnVjdCBzbDgxMWhfZXAJKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdTgJCQliYW5rLAorCXU4CQkJY29udHJvbAorKQoreworCXZvaWQJCQkqYnVmOworCXU4CQkJYWRkcjsKKwl1OAkJCWxlbjsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKworCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworCXByZWZldGNoKGJ1Zik7CisKKwlsZW4gPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWlmICghKGNvbnRyb2wgJiBTTDExSF9IQ1RMTUFTS19JU09DSCkKKwkJCSYmIHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIGVwLT5lcG51bSwgMSkpCisJCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfVE9HR0xFOworCWFkZHIgPSBTTDgxMUhTX1BBQ0tFVF9CVUYoYmFuayA9PSAwKTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKworCXNsODExX3dyaXRlX2J1ZihzbDgxMSwgYWRkciwgYnVmLCBsZW4pOworCisJLyogYXV0b2luY3JlbWVudGluZyAqLworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfQlVGQUREUlJFRywgYWRkcik7CisJd3JpdGViKGxlbiwgZGF0YV9yZWcpOworCXdyaXRlYihTTF9PVVQgfCBlcC0+ZXBudW0sIGRhdGFfcmVnKTsKKwl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOworCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9IT1NUQ1RMUkVHLAorCQkJY29udHJvbCB8IFNMMTFIX0hDVExNQVNLX09VVCk7CisJZXAtPmxlbmd0aCA9IGxlbjsKKwlQQUNLRVQoIk9VVCVzLyVkIHFoJXAgbGVuJWRcbiIsIGVwLT5uYWtfY291bnQgPyAiL3JldHJ5IiA6ICIiLAorCQkJISF1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDEpLCBlcCwgbGVuKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY2FsbGVyIHVwZGF0ZXMgb24tY2hpcCBlbmFibGVzIGxhdGVyICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2ZpcnFfb24oc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlpZiAoc2w4MTEtPmlycV9lbmFibGUgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpCisJCXJldHVybjsKKwlWREJHKCJzb2YgaXJxIG9uXG4iKTsKKwlzbDgxMS0+aXJxX2VuYWJsZSB8PSBTTDExSF9JTlRNQVNLX1NPRklOVFI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2ZpcnFfb2ZmKHN0cnVjdCBzbDgxMSAqc2w4MTEpCit7CisJaWYgKCEoc2w4MTEtPmlycV9lbmFibGUgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpKQorCQlyZXR1cm47CisJVkRCRygic29mIGlycSBvZmZcbiIpOworCXNsODExLT5pcnFfZW5hYmxlICY9IH5TTDExSF9JTlRNQVNLX1NPRklOVFI7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHBpY2sgdGhlIG5leHQgZW5kcG9pbnQgZm9yIGEgdHJhbnNhY3Rpb24sIGFuZCBpc3N1ZSBpdC4KKyAqIGZyYW1lcyBzdGFydCB3aXRoIHBlcmlvZGljIHRyYW5zZmVycyAoYWZ0ZXIgd2hhdGV2ZXIgaXMgcGVuZGluZworICogZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUpLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHRpbWUgaXMgYXN5bmMKKyAqIHRyYW5zZmVycywgc2NoZWR1bGVkIHJvdW5kLXJvYmluLgorICovCitzdGF0aWMgc3RydWN0IHNsODExaF9lcAkqc3RhcnQoc3RydWN0IHNsODExICpzbDgxMSwgdTggYmFuaykKK3sKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcDsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCWludAkJCWZjbG9jazsKKwl1OAkJCWNvbnRyb2w7CisKKwkvKiB1c2UgZW5kcG9pbnQgYXQgc2NoZWR1bGUgaGVhZCAqLworCWlmIChzbDgxMS0+bmV4dF9wZXJpb2RpYykgeworCQllcCA9IHNsODExLT5uZXh0X3BlcmlvZGljOworCQlzbDgxMS0+bmV4dF9wZXJpb2RpYyA9IGVwLT5uZXh0OworCX0gZWxzZSB7CisJCWlmIChzbDgxMS0+bmV4dF9hc3luYykKKwkJCWVwID0gc2w4MTEtPm5leHRfYXN5bmM7CisJCWVsc2UgaWYgKCFsaXN0X2VtcHR5KCZzbDgxMS0+YXN5bmMpKQorCQkJZXAgPSBjb250YWluZXJfb2Yoc2w4MTEtPmFzeW5jLm5leHQsCisJCQkJCXN0cnVjdCBzbDgxMWhfZXAsIHNjaGVkdWxlKTsKKwkJZWxzZSB7CisJCQkvKiBjb3VsZCBzZXQgdXAgdGhlIGZpcnN0IGZ1bGxzcGVlZCBwZXJpb2RpYworCQkJICogdHJhbnNmZXIgZm9yIHRoZSBuZXh0IGZyYW1lIC4uLgorCQkJICovCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisjaWZkZWYgVVNFX0IKKwkJaWYgKChiYW5rICYmIHNsODExLT5hY3RpdmVfYiA9PSBlcCkgfHwgc2w4MTEtPmFjdGl2ZV9hID09IGVwKQorCQkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKworCQlpZiAoZXAtPnNjaGVkdWxlLm5leHQgPT0gJnNsODExLT5hc3luYykKKwkJCXNsODExLT5uZXh0X2FzeW5jID0gTlVMTDsKKwkJZWxzZQorCQkJc2w4MTEtPm5leHRfYXN5bmMgPSBjb250YWluZXJfb2YoZXAtPnNjaGVkdWxlLm5leHQsCisJCQkJCXN0cnVjdCBzbDgxMWhfZXAsIHNjaGVkdWxlKTsKKwl9CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZXAtPmhlcC0+dXJiX2xpc3QpKSkgeworCQlEQkcoImVtcHR5ICVwIHF1ZXVlP1xuIiwgZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl1cmIgPSBjb250YWluZXJfb2YoZXAtPmhlcC0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwgdXJiX2xpc3QpOworCWNvbnRyb2wgPSBlcC0+ZGVmY3RybDsKKworCS8qIGlmIHRoaXMgZnJhbWUgZG9lc24ndCBoYXZlIGVub3VnaCB0aW1lIGxlZnQgdG8gdHJhbnNmZXIgdGhpcworCSAqIHBhY2tldCwgd2FpdCB0aWxsIHRoZSBuZXh0IGZyYW1lLiAgdG9vLXNpbXBsZSBhbGdvcml0aG0uLi4KKwkgKi8KKwlmY2xvY2sgPSBzbDgxMV9yZWFkKHNsODExLCBTTDExSF9TT0ZUTVJSRUcpIDw8IDY7CisJZmNsb2NrIC09IDEwMDsJCS8qIHNldHVwIHRha2VzIG5vdCBtdWNoIHRpbWUgKi8KKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpIHsKKwkJaWYgKGNvbnRyb2wgJiBTTDExSF9IQ1RMTUFTS19QUkVBTUJMRSkgeworCQkJLyogYWxzbyBub3RlIGVycmF0dW0gMTogc29tZSBodWJzIHdvbid0IHdvcmsgKi8KKwkJCWZjbG9jayAtPSA4MDA7CisJCX0KKwkJZmNsb2NrIC09IGVwLT5tYXhwYWNrZXQgPDwgODsKKworCQkvKiBlcnJhdHVtIDI6IEFGVEVSU09GIG9ubHkgd29ya3MgZm9yIGZ1bGxzcGVlZCAqLworCQlpZiAoZmNsb2NrIDwgMCkgeworCQkJaWYgKGVwLT5wZXJpb2QpCisJCQkJc2w4MTEtPnN0YXRfb3ZlcnJ1bisrOworCQkJc29maXJxX29uKHNsODExKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJZmNsb2NrIC09IDEyMDAwIC8gMTk7CS8qIDE5IDY0Ynl0ZSBwYWNrZXRzL21zZWMgKi8KKwkJaWYgKGZjbG9jayA8IDApIHsKKwkJCWlmIChlcC0+cGVyaW9kKQorCQkJCXNsODExLT5zdGF0X292ZXJydW4rKzsKKwkJCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfQUZURVJTT0Y7CisKKwkJLyogdGhyb3R0bGUgYnVsay9jb250cm9sIGlycSBub2lzZSAqLworCQl9IGVsc2UgaWYgKGVwLT5uYWtfY291bnQpCisJCQljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX0FGVEVSU09GOworCX0KKworCisJc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCWNhc2UgVVNCX1BJRF9JTjoKKwkJaW5fcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX09VVDoKKwkJb3V0X3BhY2tldChzbDgxMSwgZXAsIHVyYiwgYmFuaywgY29udHJvbCk7CisJCWJyZWFrOworCWNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJc2V0dXBfcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX0FDSzoJCS8qIGZvciBjb250cm9sIHN0YXR1cyAqLworCQlzdGF0dXNfcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJHKCJiYWQgZXAlcCBwaWQgJTAyeFxuIiwgZXAsIGVwLT5uZXh0cGlkKTsKKwkJZXAgPSBOVUxMOworCX0KKwlyZXR1cm4gZXA7Cit9CisKKyNkZWZpbmUgTUlOX0pJRkZJRVMJKChtc2Vjc190b19qaWZmaWVzKDIpID4gMSkgPyBtc2Vjc190b19qaWZmaWVzKDIpIDogMikKKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X3RyYW5zZmVyKHN0cnVjdCBzbDgxMSAqc2w4MTEpCit7CisJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpCisJCXJldHVybjsKKwlpZiAoc2w4MTEtPmFjdGl2ZV9hID09IE5VTEwpIHsKKwkJc2w4MTEtPmFjdGl2ZV9hID0gc3RhcnQoc2w4MTEsIFNMODExX0VQX0EoU0w4MTFfSE9TVF9CVUYpKTsKKwkJaWYgKHNsODExLT5hY3RpdmVfYSAhPSBOVUxMKQorCQkJc2w4MTEtPmppZmZpZXNfYSA9IGppZmZpZXMgKyBNSU5fSklGRklFUzsKKwl9CisjaWZkZWYgVVNFX0IKKwlpZiAoc2w4MTEtPmFjdGl2ZV9iID09IE5VTEwpIHsKKwkJc2w4MTEtPmFjdGl2ZV9iID0gc3RhcnQoc2w4MTEsIFNMODExX0VQX0IoU0w4MTFfSE9TVF9CVUYpKTsKKwkJaWYgKHNsODExLT5hY3RpdmVfYiAhPSBOVUxMKQorCQkJc2w4MTEtPmppZmZpZXNfYiA9IGppZmZpZXMgKyBNSU5fSklGRklFUzsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZmluaXNoX3JlcXVlc3QoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgcHRfcmVncwkJKnJlZ3MsCisJaW50CQkJc3RhdHVzCispIF9fcmVsZWFzZXMoc2w4MTEtPmxvY2spIF9fYWNxdWlyZXMoc2w4MTEtPmxvY2spCit7CisJdW5zaWduZWQJCWk7CisKKwlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpCisJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9TRVRVUDsKKworCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwlzcGluX3VubG9jaygmdXJiLT5sb2NrKTsKKworCXNwaW5fdW5sb2NrKCZzbDgxMS0+bG9jayk7CisJdXNiX2hjZF9naXZlYmFja191cmIoc2w4MTFfdG9faGNkKHNsODExKSwgdXJiLCByZWdzKTsKKwlzcGluX2xvY2soJnNsODExLT5sb2NrKTsKKworCS8qIGxlYXZlIGFjdGl2ZSBlbmRwb2ludHMgaW4gdGhlIHNjaGVkdWxlICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+aGVwLT51cmJfbGlzdCkpCisJCXJldHVybjsKKworCS8qIGFzeW5jIGRlc2NoZWR1bGU/ICovCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+c2NoZWR1bGUpKSB7CisJCWxpc3RfZGVsX2luaXQoJmVwLT5zY2hlZHVsZSk7CisJCWlmIChlcCA9PSBzbDgxMS0+bmV4dF9hc3luYykKKwkJCXNsODExLT5uZXh0X2FzeW5jID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qIHBlcmlvZGljIGRlc2NoZWR1bGUgKi8KKwlEQkcoImRlc2NoZWR1bGUgcWglZC8lcCBicmFuY2ggJWRcbiIsIGVwLT5wZXJpb2QsIGVwLCBlcC0+YnJhbmNoKTsKKwlmb3IgKGkgPSBlcC0+YnJhbmNoOyBpIDwgUEVSSU9ESUNfU0laRTsgaSArPSBlcC0+cGVyaW9kKSB7CisJCXN0cnVjdCBzbDgxMWhfZXAJKnRlbXA7CisJCXN0cnVjdCBzbDgxMWhfZXAJKipwcmV2ID0gJnNsODExLT5wZXJpb2RpY1tpXTsKKworCQl3aGlsZSAoKnByZXYgJiYgKCh0ZW1wID0gKnByZXYpICE9IGVwKSkKKwkJCXByZXYgPSAmdGVtcC0+bmV4dDsKKwkJaWYgKCpwcmV2KQorCQkJKnByZXYgPSBlcC0+bmV4dDsKKwkJc2w4MTEtPmxvYWRbaV0gLT0gZXAtPmxvYWQ7CisJfQkKKwllcC0+YnJhbmNoID0gUEVSSU9ESUNfU0laRTsKKwlzbDgxMS0+cGVyaW9kaWNfY291bnQtLTsKKwlzbDgxMV90b19oY2Qoc2w4MTEpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJLT0gZXAtPmxvYWQgLyBlcC0+cGVyaW9kOworCWlmIChlcCA9PSBzbDgxMS0+bmV4dF9wZXJpb2RpYykKKwkJc2w4MTEtPm5leHRfcGVyaW9kaWMgPSBlcC0+bmV4dDsKKworCS8qIHdlIG1pZ2h0IHR1cm4gU09GcyBiYWNrIG9uIGFnYWluIGZvciB0aGUgYXN5bmMgc2NoZWR1bGUgKi8KKwlpZiAoc2w4MTEtPnBlcmlvZGljX2NvdW50ID09IDApCisJCXNvZmlycV9vZmYoc2w4MTEpOworfQorCitzdGF0aWMgdm9pZAorZG9uZShzdHJ1Y3Qgc2w4MTEgKnNsODExLCBzdHJ1Y3Qgc2w4MTFoX2VwICplcCwgdTggYmFuaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTgJCQlzdGF0dXM7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlpbnQJCQl1cmJzdGF0ID0gLUVJTlBST0dSRVNTOworCisJaWYgKHVubGlrZWx5KCFlcCkpCisJCXJldHVybjsKKworCXN0YXR1cyA9IHNsODExX3JlYWQoc2w4MTEsIGJhbmsgKyBTTDExSF9QS1RTVEFUUkVHKTsKKworCXVyYiA9IGNvbnRhaW5lcl9vZihlcC0+aGVwLT51cmJfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiLCB1cmJfbGlzdCk7CisKKwkvKiB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBOQUtzICovCisJaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX05BSykgeworCQkvLyBQQUNLRVQoIi4uLk5BS18lMDJ4IHFoJXBcbiIsIGJhbmssIGVwKTsKKwkJaWYgKCFlcC0+cGVyaW9kKQorCQkJZXAtPm5ha19jb3VudCsrOworCQllcC0+ZXJyb3JfY291bnQgPSAwOworCisJLyogQUNLIGFkdmFuY2VzIHRyYW5zZmVyLCB0b2dnbGUsIGFuZCBtYXliZSBxdWV1ZSAqLworCX0gZWxzZSBpZiAoc3RhdHVzICYgU0wxMUhfU1RBVE1BU0tfQUNLKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdXJiLT5kZXY7CisJCWludAkJCWxlbjsKKwkJdW5zaWduZWQgY2hhcgkJKmJ1ZjsKKworCQkvKiB1cmItPmlzb19mcmFtZV9kZXNjIGlzIGN1cnJlbnRseSBpZ25vcmVkIGhlcmUuLi4gKi8KKworCQllcC0+bmFrX2NvdW50ID0gZXAtPmVycm9yX2NvdW50ID0gMDsKKwkJc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCQljYXNlIFVTQl9QSURfT1VUOgorCQkJLy8gUEFDS0VUKCIuLi5BQ0svb3V0XyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGVwLT5sZW5ndGg7CisJCQl1c2JfZG90b2dnbGUodWRldiwgZXAtPmVwbnVtLCAxKTsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgKKwkJCQkJPT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKQorCQkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCisJCQkJLyogc29tZSBidWxrIHByb3RvY29scyB0ZXJtaW5hdGUgT1VUIHRyYW5zZmVycworCQkJCSAqIGJ5IGEgc2hvcnQgcGFja2V0LCB1c2luZyBaTFBzIG5vdCBwYWRkaW5nLgorCQkJCSAqLworCQkJCWVsc2UgaWYgKGVwLT5sZW5ndGggPCBlcC0+bWF4cGFja2V0CisJCQkJCQl8fCAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MKKwkJCQkJCQkmIFVSQl9aRVJPX1BBQ0tFVCkpCisJCQkJCXVyYnN0YXQgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9JTjoKKwkJCS8vIFBBQ0tFVCgiLi4uQUNLL2luXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQkJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlwcmVmZXRjaHcoYnVmKTsKKwkJCWxlbiA9IGVwLT5tYXhwYWNrZXQgLSBzbDgxMV9yZWFkKHNsODExLAorCQkJCQkJYmFuayArIFNMMTFIX1hGRVJDTlRSRUcpOworCQkJaWYgKGxlbiA+IGVwLT5sZW5ndGgpIHsKKwkJCQlsZW4gPSBlcC0+bGVuZ3RoOworCQkJCXVyYi0+c3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCX0KKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW47CisJCQlzbDgxMV9yZWFkX2J1ZihzbDgxMSwgU0w4MTFIU19QQUNLRVRfQlVGKGJhbmsgPT0gMCksCisJCQkJCWJ1ZiwgbGVuKTsKKwkJCXVzYl9kb3RvZ2dsZSh1ZGV2LCBlcC0+ZXBudW0sIDApOworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCQkJdXJic3RhdCA9IDA7CisJCQllbHNlIGlmIChsZW4gPCBlcC0+bWF4cGFja2V0KSB7CisJCQkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJCQl1cmJzdGF0ID0gLUVSRU1PVEVJTzsKKwkJCQllbHNlCisJCQkJCXVyYnN0YXQgPSAwOworCQkJfQorCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpCisJCQkJCSYmICh1cmJzdGF0ID09IC1FUkVNT1RFSU8KKwkJCQkJCXx8IHVyYnN0YXQgPT0gMCkpIHsKKworCQkJCS8qIE5PVEUgaWYgdGhlIHN0YXR1cyBzdGFnZSBTVEFMTHMgKHdoeT8pLAorCQkJCSAqIHRoaXMgcmVwb3J0cyB0aGUgd3JvbmcgdXJiIHN0YXR1cy4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2soJnVyYi0+bG9jayk7CisJCQkJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCQkJdXJiLT5zdGF0dXMgPSB1cmJzdGF0OworCQkJCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworCisJCQkJdXJiID0gTlVMTDsKKwkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9TRVRVUDoKKwkJCS8vIFBBQ0tFVCgiLi4uQUNLL3NldHVwXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9PSB1cmItPmFjdHVhbF9sZW5ndGgpCisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0FDSzsKKwkJCWVsc2UgaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIDAsIDEsIDEpOworCQkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9PVVQ7CisJCQl9IGVsc2UgeworCQkJCXVzYl9zZXR0b2dnbGUodWRldiwgMCwgMCwgMSk7CisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0lOOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9BQ0s6CisJCQkvLyBQQUNLRVQoIi4uLkFDSy9zdGF0dXNfJTAyeCBxaCVwXG4iLCBiYW5rLCBlcCk7CisJCQl1cmJzdGF0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkvKiBTVEFMTCBzdG9wcyBhbGwgdHJhbnNmZXJzICovCisJfSBlbHNlIGlmIChzdGF0dXMgJiBTTDExSF9TVEFUTUFTS19TVEFMTCkgeworCQlQQUNLRVQoIi4uLlNUQUxMXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQllcC0+bmFrX2NvdW50ID0gZXAtPmVycm9yX2NvdW50ID0gMDsKKwkJdXJic3RhdCA9IC1FUElQRTsKKworCS8qIGVycm9yPyByZXRyeSwgdW50aWwgIjMgc3RyaWtlcyIgKi8KKwl9IGVsc2UgaWYgKCsrZXAtPmVycm9yX2NvdW50ID49IDMpIHsKKwkJaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX1RNT1VUKQorCQkJdXJic3RhdCA9IC1FVElNRURPVVQ7CisJCWVsc2UgaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX09WRikKKwkJCXVyYnN0YXQgPSAtRU9WRVJGTE9XOworCQllbHNlCisJCQl1cmJzdGF0ID0gLUVQUk9UTzsKKwkJZXAtPmVycm9yX2NvdW50ID0gMDsKKwkJUEFDS0VUKCIuLi4zU1RSSUtFU18lMDJ4ICUwMnggcWglcCBzdGF0ICVkXG4iLAorCQkJCWJhbmssIHN0YXR1cywgZXAsIHVyYnN0YXQpOworCX0KKworCWlmICh1cmIgJiYgKHVyYnN0YXQgIT0gLUVJTlBST0dSRVNTIHx8IHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykpCisJCWZpbmlzaF9yZXF1ZXN0KHNsODExLCBlcCwgdXJiLCByZWdzLCB1cmJzdGF0KTsKK30KKworc3RhdGljIGlubGluZSB1OCBjaGVja2RvbmUoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwl1OAljdGw7CisJdTgJaXJxc3RhdCA9IDA7CisKKwlpZiAoc2w4MTEtPmFjdGl2ZV9hICYmIHRpbWVfYmVmb3JlX2VxKHNsODExLT5qaWZmaWVzX2EsIGppZmZpZXMpKSB7CisJCWN0bCA9IHNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRykpOworCQlpZiAoY3RsICYgU0wxMUhfSENUTE1BU0tfQVJNKQorCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRyksIDApOworCQlEQkcoIiVzIERPTkVfQTogY3RybCAlMDJ4IHN0cyAlMDJ4XG4iLAorCQkJKGN0bCAmIFNMMTFIX0hDVExNQVNLX0FSTSkgPyAidGltZW91dCIgOiAibG9zdCIsCisJCQljdGwsCisJCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX1BLVFNUQVRSRUcpKSk7CisJCWlycXN0YXQgfD0gU0wxMUhfSU5UTUFTS19ET05FX0E7CisJfQorI2lmZGVmCVVTRV9CCisJaWYgKHNsODExLT5hY3RpdmVfYiAmJiB0aW1lX2JlZm9yZV9lcShzbDgxMS0+amlmZmllc19iLCBqaWZmaWVzKSkgeworCQljdGwgPSBzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpKTsKKwkJaWYgKGN0bCAmIFNMMTFIX0hDVExNQVNLX0FSTSkKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpLCAwKTsKKwkJREJHKCIlcyBET05FX0I6IGN0cmwgJTAyeCBzdHMgJTAyeFxuIiwKKwkJCShjdGwgJiBTTDExSF9IQ1RMTUFTS19BUk0pID8gInRpbWVvdXQiIDogImxvc3QiLAorCQkJY3RsLAorCQkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9QS1RTVEFUUkVHKSkpOworCQlpcnFzdGF0IHw9IFNMMTFIX0lOVE1BU0tfRE9ORV9BOworCX0KKyNlbmRpZgorCXJldHVybiBpcnFzdGF0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2w4MTFoX2lycShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJdTgJCWlycXN0YXQ7CisJaXJxcmV0dXJuX3QJcmV0ID0gSVJRX05PTkU7CisJdW5zaWduZWQJcmV0cmllcyA9IDU7CisKKwlzcGluX2xvY2soJnNsODExLT5sb2NrKTsKKworcmV0cnk6CisJaXJxc3RhdCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMpICYgflNMMTFIX0lOVE1BU0tfRFA7CisJaWYgKGlycXN0YXQpIHsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMsIGlycXN0YXQpOworCQlpcnFzdGF0ICY9IHNsODExLT5pcnFfZW5hYmxlOworCX0KKworI2lmZGVmCVFVSVJLMgorCS8qIHRoaXMgbWF5IG5vIGxvbmdlciBiZSBuZWNlc3NhcnkgLi4uICovCisJaWYgKGlycXN0YXQgPT0gMCAmJiByZXQgPT0gSVJRX05PTkUpIHsKKwkJaXJxc3RhdCA9IGNoZWNrZG9uZShzbDgxMSk7CisJCWlmIChpcnFzdGF0IC8qICYmIGlycSAhPSB+MCAqLyApCisJCQlzbDgxMS0+c3RhdF9sb3N0Kys7CisJfQorI2VuZGlmCisKKwkvKiBVU0IgcGFja2V0cywgbm90IG5lY2Vzc2FyaWx5IGhhbmRsZWQgaW4gdGhlIG9yZGVyIHRoZXkncmUKKwkgKiBpc3N1ZWQgLi4uIHRoYXQncyBmaW5lIGlmIHRoZXkncmUgZGlmZmVyZW50IGVuZHBvaW50cy4KKwkgKi8KKwlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfRE9ORV9BKSB7CisJCWRvbmUoc2w4MTEsIHNsODExLT5hY3RpdmVfYSwgU0w4MTFfRVBfQShTTDgxMV9IT1NUX0JVRiksIHJlZ3MpOworCQlzbDgxMS0+YWN0aXZlX2EgPSBOVUxMOworCQlzbDgxMS0+c3RhdF9hKys7CisJfQorI2lmZGVmIFVTRV9CCisJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX0RPTkVfQikgeworCQlkb25lKHNsODExLCBzbDgxMS0+YWN0aXZlX2IsIFNMODExX0VQX0IoU0w4MTFfSE9TVF9CVUYpLCByZWdzKTsKKwkJc2w4MTEtPmFjdGl2ZV9iID0gTlVMTDsKKwkJc2w4MTEtPnN0YXRfYisrOworCX0KKyNlbmRpZgorCWlmIChpcnFzdGF0ICYgU0wxMUhfSU5UTUFTS19TT0ZJTlRSKSB7CisJCXVuc2lnbmVkIGluZGV4OworCisJCWluZGV4ID0gc2w4MTEtPmZyYW1lKysgJSAoUEVSSU9ESUNfU0laRSAtIDEpOworCQlzbDgxMS0+c3RhdF9zb2YrKzsKKworCQkvKiBiZSBncmFjZWZ1bCBhYm91dCBhbG1vc3QtaW5ldml0YWJsZSBwZXJpb2RpYyBzY2hlZHVsZQorCQkgKiBvdmVycnVuczogIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBmcmFtZSdzIHRyYW5zZmVycyBpZmYKKwkJICogdGhpcyBvbmUgaGFzIG5vdGhpbmcgc2NoZWR1bGVkLgorCQkgKi8KKwkJaWYgKHNsODExLT5uZXh0X3BlcmlvZGljKSB7CisJCQkvLyBFUlIoIm92ZXJydW4gdG8gc2xvdCAlZFxuIiwgaW5kZXgpOworCQkJc2w4MTEtPnN0YXRfb3ZlcnJ1bisrOworCQl9CisJCWlmIChzbDgxMS0+cGVyaW9kaWNbaW5kZXhdKQorCQkJc2w4MTEtPm5leHRfcGVyaW9kaWMgPSBzbDgxMS0+cGVyaW9kaWNbaW5kZXhdOworCX0KKworCS8qIGtodWJkIG1hbmFnZXMgZGVib3VuY2luZyBhbmQgd2FrZXVwICovCisJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX0lOU1JNVikgeworCQlzbDgxMS0+c3RhdF9pbnNybXYrKzsKKworCQkvKiBtb3N0IHN0YXRzIGFyZSByZXNldCBmb3IgZWFjaCBWQlVTIHNlc3Npb24gKi8KKwkJc2w4MTEtPnN0YXRfd2FrZSA9IDA7CisJCXNsODExLT5zdGF0X3NvZiA9IDA7CisJCXNsODExLT5zdGF0X2EgPSAwOworCQlzbDgxMS0+c3RhdF9iID0gMDsKKwkJc2w4MTEtPnN0YXRfbG9zdCA9IDA7CisKKwkJc2w4MTEtPmN0cmwxID0gMDsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisKKwkJc2w4MTEtPmlycV9lbmFibGUgPSBTTDExSF9JTlRNQVNLX0lOU1JNVjsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKKworCQkvKiB1c2Jjb3JlIG51a2VzIG90aGVyIHBlbmRpbmcgdHJhbnNhY3Rpb25zIG9uIGRpc2Nvbm5lY3QgKi8KKwkJaWYgKHNsODExLT5hY3RpdmVfYSkgeworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRyksIDApOworCQkJZmluaXNoX3JlcXVlc3Qoc2w4MTEsIHNsODExLT5hY3RpdmVfYSwKKwkJCQljb250YWluZXJfb2Yoc2w4MTEtPmFjdGl2ZV9hLT5oZXAtPnVyYl9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCB1cmIsIHVyYl9saXN0KSwKKwkJCQlOVUxMLCAtRVNIVVRET1dOKTsKKwkJCXNsODExLT5hY3RpdmVfYSA9IE5VTEw7CisJCX0KKyNpZmRlZglVU0VfQgorCQlpZiAoc2w4MTEtPmFjdGl2ZV9iKSB7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSwgMCk7CisJCQlmaW5pc2hfcmVxdWVzdChzbDgxMSwgc2w4MTEtPmFjdGl2ZV9iLAorCQkJCWNvbnRhaW5lcl9vZihzbDgxMS0+YWN0aXZlX2ItPmhlcC0+dXJiX2xpc3QubmV4dCwKKwkJCQkJc3RydWN0IHVyYiwgdXJiX2xpc3QpLAorCQkJCU5VTEwsIC1FU0hVVERPV04pOworCQkJc2w4MTEtPmFjdGl2ZV9iID0gTlVMTDsKKwkJfQorI2VuZGlmCisKKwkJLyogcG9ydCBzdGF0dXMgc2VlbXMgd2llcmQgdW50aWwgYWZ0ZXIgcmVzZXQsIHNvCisJCSAqIGZvcmNlIHRoZSByZXNldCBhbmQgbWFrZSBraHViZCBjbGVhbiB1cCBsYXRlci4KKwkJICovCisJCXNsODExLT5wb3J0MSB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTikKKwkJCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTik7CisKKwl9IGVsc2UgaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX1JEKSB7CisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKSB7CisJCQlEQkcoIndha2V1cFxuIik7CisJCQlzbDgxMS0+cG9ydDEgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDsKKwkJCXNsODExLT5zdGF0X3dha2UrKzsKKwkJfSBlbHNlCisJCQlpcnFzdGF0ICY9IH5TTDExSF9JTlRNQVNLX1JEOworCX0KKworCWlmIChpcnFzdGF0KSB7CisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpCisJCQlzdGFydF90cmFuc2ZlcihzbDgxMSk7CisJCXJldCA9IElSUV9IQU5ETEVEOworCQlpZiAocmV0cmllcy0tKQorCQkJZ290byByZXRyeTsKKwl9CisKKwlpZiAoc2w4MTEtPnBlcmlvZGljX2NvdW50ID09IDAgJiYgbGlzdF9lbXB0eSgmc2w4MTEtPmFzeW5jKSkgCisJCXNvZmlycV9vZmYoc2w4MTEpOworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLCBzbDgxMS0+aXJxX2VuYWJsZSk7CisKKwlzcGluX3VubG9jaygmc2w4MTEtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdXNiIDEuMSBzYXlzIG1heCA5MCUgb2YgYSBmcmFtZSBpcyBhdmFpbGFibGUgZm9yIHBlcmlvZGljIHRyYW5zZmVycy4KKyAqIHRoaXMgZHJpdmVyIGRvZXNuJ3QgcHJvbWlzZSB0aGF0IG11Y2ggc2luY2UgaXQncyBnb3QgdG8gaGFuZGxlIGFuCisgKiBJUlEgcGVyIHBhY2tldDsgaXJxIGhhbmRsaW5nIGxhdGVuY2llcyBhbHNvIHVzZSB1cCB0aGF0IHRpbWUuCisgKi8KKyNkZWZpbmUJTUFYX1BFUklPRElDX0xPQUQJNTAwCS8qIG91dCBvZiAxMDAwIHVzZWMgKi8KKworc3RhdGljIGludCBiYWxhbmNlKHN0cnVjdCBzbDgxMSAqc2w4MTEsIHUxNiBwZXJpb2QsIHUxNiBsb2FkKQoreworCWludAlpLCBicmFuY2ggPSAtRU5PU1BDOworCisJLyogc2VhcmNoIGZvciB0aGUgbGVhc3QgbG9hZGVkIHNjaGVkdWxlIGJyYW5jaCBvZiB0aGF0IHBlcmlvZAorCSAqIHdoaWNoIGhhcyBlbm91Z2ggYmFuZHdpZHRoIGxlZnQgdW5yZXNlcnZlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGVyaW9kIDsgaSsrKSB7CisJCWlmIChicmFuY2ggPCAwIHx8IHNsODExLT5sb2FkW2JyYW5jaF0gPiBzbDgxMS0+bG9hZFtpXSkgeworCQkJaW50CWo7CisKKwkJCWZvciAoaiA9IGk7IGogPCBQRVJJT0RJQ19TSVpFOyBqICs9IHBlcmlvZCkgeworCQkJCWlmICgoc2w4MTEtPmxvYWRbal0gKyBsb2FkKQorCQkJCQkJPiBNQVhfUEVSSU9ESUNfTE9BRCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA8IFBFUklPRElDX1NJWkUpCisJCQkJY29udGludWU7CisJCQlicmFuY2ggPSBpOyAKKwkJfQorCX0KKwlyZXR1cm4gYnJhbmNoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHNsODExaF91cmJfZW5xdWV1ZSgKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCWludAkJCW1lbV9mbGFncworKSB7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHVyYi0+ZGV2OworCXVuc2lnbmVkIGludAkJcGlwZSA9IHVyYi0+cGlwZTsKKwlpbnQJCQlpc19vdXQgPSAhdXNiX3BpcGVpbihwaXBlKTsKKwlpbnQJCQl0eXBlID0gdXNiX3BpcGV0eXBlKHBpcGUpOworCWludAkJCWVwbnVtID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJaTsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisjaWZkZWYJRElTQUJMRV9JU08KKwlpZiAodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKQorCQlyZXR1cm4gLUVOT1NQQzsKKyNlbmRpZgorCisJLyogYXZvaWQgYWxsIGFsbG9jYXRpb25zIHdpdGhpbiBzcGlubG9ja3MgKi8KKwlpZiAoIWhlcC0+aGNwcml2KQorCQllcCA9IGtjYWxsb2MoMSwgc2l6ZW9mICplcCwgbWVtX2ZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCisJLyogZG9uJ3Qgc3VibWl0IHRvIGEgZGVhZCBvciBkaXNhYmxlZCBwb3J0ICovCisJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpKQorCQkJfHwgIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChoZXAtPmhjcHJpdikgeworCQlrZnJlZShlcCk7CisJCWVwID0gaGVwLT5oY3ByaXY7CisJfSBlbHNlIGlmICghZXApIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCisJfSBlbHNlIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5zY2hlZHVsZSk7CisJCWVwLT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJCWVwLT5lcG51bSA9IGVwbnVtOworCQllcC0+bWF4cGFja2V0ID0gdXNiX21heHBhY2tldCh1ZGV2LCB1cmItPnBpcGUsIGlzX291dCk7CisJCWVwLT5kZWZjdHJsID0gU0wxMUhfSENUTE1BU0tfQVJNIHwgU0wxMUhfSENUTE1BU0tfRU5BQkxFOworCQl1c2Jfc2V0dG9nZ2xlKHVkZXYsIGVwbnVtLCBpc19vdXQsIDApOworCisJCWlmICh0eXBlID09IFBJUEVfQ09OVFJPTCkKKwkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9TRVRVUDsKKwkJZWxzZSBpZiAoaXNfb3V0KQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX09VVDsKKwkJZWxzZQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0lOOworCisJCWlmIChlcC0+bWF4cGFja2V0ID4gSF9NQVhQQUNLRVQpIHsKKwkJCS8qIGlzbyBwYWNrZXRzIHVwIHRvIDI0MCBieXRlcyBjb3VsZCB3b3JrLi4uICovCisJCQlEQkcoImRldiAlZCBlcCVkIG1heHBhY2tldCAlZFxuIiwKKwkJCQl1ZGV2LT5kZXZudW0sIGVwbnVtLCBlcC0+bWF4cGFja2V0KTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykgeworCQkJLyogc2VuZCBwcmVhbWJsZSBmb3IgZXh0ZXJuYWwgaHViPyAqLworCQkJaWYgKCEoc2w4MTEtPmN0cmwxICYgU0wxMUhfQ1RMMU1BU0tfTFNQRCkpCisJCQkJZXAtPmRlZmN0cmwgfD0gU0wxMUhfSENUTE1BU0tfUFJFQU1CTEU7CisJCX0KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJCWlmICh1cmItPmludGVydmFsID4gUEVSSU9ESUNfU0laRSkKKwkJCQl1cmItPmludGVydmFsID0gUEVSSU9ESUNfU0laRTsKKwkJCWVwLT5wZXJpb2QgPSB1cmItPmludGVydmFsOworCQkJZXAtPmJyYW5jaCA9IFBFUklPRElDX1NJWkU7CisJCQlpZiAodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKQorCQkJCWVwLT5kZWZjdHJsIHw9IFNMMTFIX0hDVExNQVNLX0lTT0NIOworCQkJZXAtPmxvYWQgPSB1c2JfY2FsY19idXNfdGltZSh1ZGV2LT5zcGVlZCwgIWlzX291dCwKKwkJCQkodHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKSwKKwkJCQl1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIGlzX291dCkpCisJCQkJCS8gMTAwMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaGVwLT5oY3ByaXYgPSBlcDsKKwl9CisKKwkvKiBtYXliZSBwdXQgZW5kcG9pbnQgaW50byBzY2hlZHVsZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCWNhc2UgUElQRV9CVUxLOgorCQlpZiAobGlzdF9lbXB0eSgmZXAtPnNjaGVkdWxlKSkKKwkJCWxpc3RfYWRkX3RhaWwoJmVwLT5zY2hlZHVsZSwgJnNsODExLT5hc3luYyk7CisJCWJyZWFrOworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQl1cmItPmludGVydmFsID0gZXAtPnBlcmlvZDsKKwkJaWYgKGVwLT5icmFuY2ggPCBQRVJJT0RJQ19TSVpFKQorCQkJYnJlYWs7CisKKwkJcmV0dmFsID0gYmFsYW5jZShzbDgxMSwgZXAtPnBlcmlvZCwgZXAtPmxvYWQpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwkJZXAtPmJyYW5jaCA9IHJldHZhbDsKKwkJcmV0dmFsID0gMDsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IChzbDgxMS0+ZnJhbWUgJiAoUEVSSU9ESUNfU0laRSAtIDEpKQorCQkJCQkrIGVwLT5icmFuY2g7CisKKwkJLyogc29ydCBlYWNoIHNjaGVkdWxlIGJyYW5jaCBieSBwZXJpb2QgKHNsb3cgYmVmb3JlIGZhc3QpCisJCSAqIHRvIHNoYXJlIHRoZSBmYXN0ZXIgcGFydHMgb2YgdGhlIHRyZWUgd2l0aG91dCBuZWVkaW5nCisJCSAqIGR1bW15L3BsYWNlaG9sZGVyIG5vZGVzCisJCSAqLworCQlEQkcoInNjaGVkdWxlIHFoJWQvJXAgYnJhbmNoICVkXG4iLCBlcC0+cGVyaW9kLCBlcCwgZXAtPmJyYW5jaCk7CisJCWZvciAoaSA9IGVwLT5icmFuY2g7IGkgPCBQRVJJT0RJQ19TSVpFOyBpICs9IGVwLT5wZXJpb2QpIHsKKwkJCXN0cnVjdCBzbDgxMWhfZXAJKipwcmV2ID0gJnNsODExLT5wZXJpb2RpY1tpXTsKKwkJCXN0cnVjdCBzbDgxMWhfZXAJKmhlcmUgPSAqcHJldjsKKworCQkJd2hpbGUgKGhlcmUgJiYgZXAgIT0gaGVyZSkgeworCQkJCWlmIChlcC0+cGVyaW9kID4gaGVyZS0+cGVyaW9kKQorCQkJCQlicmVhazsKKwkJCQlwcmV2ID0gJmhlcmUtPm5leHQ7CisJCQkJaGVyZSA9ICpwcmV2OworCQkJfQorCQkJaWYgKGVwICE9IGhlcmUpIHsKKwkJCQllcC0+bmV4dCA9IGhlcmU7CisJCQkJKnByZXYgPSBlcDsKKwkJCX0KKwkJCXNsODExLT5sb2FkW2ldICs9IGVwLT5sb2FkOworCQl9CisJCXNsODExLT5wZXJpb2RpY19jb3VudCsrOworCQloY2QtPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZCArPSBlcC0+bG9hZCAvIGVwLT5wZXJpb2Q7CisJCXNvZmlycV9vbihzbDgxMSk7CisJfQorCisJLyogaW4gY2FzZSBvZiB1bmxpbmstZHVyaW5nLXN1Ym1pdCAqLworCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworCQlmaW5pc2hfcmVxdWVzdChzbDgxMSwgZXAsIHVyYiwgTlVMTCwgMCk7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisJdXJiLT5oY3ByaXYgPSBoZXA7CisJc3Bpbl91bmxvY2soJnVyYi0+bG9jayk7CisKKwlzdGFydF90cmFuc2ZlcihzbDgxMSk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKK2ZhaWw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNsODExaF91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCA9IHVyYi0+aGNwcml2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBzbDgxMWhfZXAJKmVwOworCWludAkJCXJldHZhbCA9IDA7CisKKwlpZiAoIWhlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKKwllcCA9IGhlcC0+aGNwcml2OworCWlmIChlcCkgeworCQkvKiBmaW5pc2ggcmlnaHQgYXdheSBpZiB0aGlzIHVyYiBjYW4ndCBiZSBhY3RpdmUgLi4uCisJCSAqIG5vdGUgdGhhdCBzb21lIGRyaXZlcnMgd3JvbmdseSBleHBlY3QgZGVsYXlzCisJCSAqLworCQlpZiAoZXAtPmhlcC0+dXJiX2xpc3QubmV4dCAhPSAmdXJiLT51cmJfbGlzdCkgeworCQkJLyogbm90IGZyb250IG9mIHF1ZXVlPyAgbmV2ZXIgYWN0aXZlICovCisKKwkJLyogZm9yIGFjdGl2ZSB0cmFuc2ZlcnMsIHdlIGV4cGVjdCBhbiBJUlEgKi8KKwkJfSBlbHNlIGlmIChzbDgxMS0+YWN0aXZlX2EgPT0gZXApIHsKKwkJCWlmICh0aW1lX2JlZm9yZV9lcShzbDgxMS0+amlmZmllc19hLCBqaWZmaWVzKSkgeworCQkJCS8qIGhhcHBlbnMgYSBsb3Qgd2l0aCBsb3dzcGVlZD8/ICovCisJCQkJREJHKCJnaXZldXAgb24gRE9ORV9BOiBjdHJsICUwMnggc3RzICUwMnhcbiIsCisJCQkJCXNsODExX3JlYWQoc2w4MTEsCisJCQkJCQlTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpKSwKKwkJCQkJc2w4MTFfcmVhZChzbDgxMSwKKwkJCQkJCVNMODExX0VQX0EoU0wxMUhfUEtUU1RBVFJFRykpKTsKKwkJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9IT1NUQ1RMUkVHKSwKKwkJCQkJCTApOworCQkJCXNsODExLT5hY3RpdmVfYSA9IE5VTEw7CisJCQl9IGVsc2UKKwkJCQl1cmIgPSBOVUxMOworI2lmZGVmCVVTRV9CCisJCX0gZWxzZSBpZiAoc2w4MTEtPmFjdGl2ZV9iID09IGVwKSB7CisJCQlpZiAodGltZV9iZWZvcmVfZXEoc2w4MTEtPmppZmZpZXNfYSwgamlmZmllcykpIHsKKwkJCQkvKiBoYXBwZW5zIGEgbG90IHdpdGggbG93c3BlZWQ/PyAqLworCQkJCURCRygiZ2l2ZXVwIG9uIERPTkVfQjogY3RybCAlMDJ4IHN0cyAlMDJ4XG4iLAorCQkJCQlzbDgxMV9yZWFkKHNsODExLAorCQkJCQkJU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSksCisJCQkJCXNsODExX3JlYWQoc2w4MTEsCisJCQkJCQlTTDgxMV9FUF9CKFNMMTFIX1BLVFNUQVRSRUcpKSk7CisJCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0IoU0wxMUhfSE9TVENUTFJFRyksCisJCQkJCQkwKTsKKwkJCQlzbDgxMS0+YWN0aXZlX2IgPSBOVUxMOworCQkJfSBlbHNlCisJCQkJdXJiID0gTlVMTDsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogZnJvbnQgb2YgcXVldWUgZm9yIGluYWN0aXZlIGVuZHBvaW50ICovCisJCX0KKworCQlpZiAodXJiKQorCQkJZmluaXNoX3JlcXVlc3Qoc2w4MTEsIGVwLCB1cmIsIE5VTEwsIDApOworCQllbHNlCisJCQlWREJHKCJkZXF1ZXVlLCB1cmIgJXAgYWN0aXZlICVzOyB3YWl0NGlycVxuIiwgdXJiLAorCQkJCShzbDgxMS0+YWN0aXZlX2EgPT0gZXApID8gIkEiIDogIkIiKTsKKwl9IGVsc2UKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitzbDgxMWhfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCkKK3sKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCA9IGhlcC0+aGNwcml2OworCisJaWYgKCFlcCkKKwkJcmV0dXJuOworCisJLyogYXNzdW1lIHdlJ2QganVzdCB3YWl0IGZvciB0aGUgaXJxICovCisJaWYgKCFsaXN0X2VtcHR5KCZoZXAtPnVyYl9saXN0KSkKKwkJbXNsZWVwKDMpOworCWlmICghbGlzdF9lbXB0eSgmaGVwLT51cmJfbGlzdCkpCisJCVdBUk4oImVwICVwIG5vdCBlbXB0eT9cbiIsIGVwKTsKKworCXVzYl9wdXRfZGV2KGVwLT51ZGV2KTsKKwlrZnJlZShlcCk7CisJaGVwLT5oY3ByaXYgPSBOVUxMOworfQorCitzdGF0aWMgaW50CitzbDgxMWhfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHNsODExICpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCisJLyogd3JvbmcgZXhjZXB0IHdoaWxlIHBlcmlvZGljIHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkOworCSAqIG5ldmVyIG1hdGNoZXMgdGhlIG9uLXRoZS13aXJlIGZyYW1lOworCSAqIHN1YmplY3QgdG8gb3ZlcnJ1bnMuCisJICovCisJcmV0dXJuIHNsODExLT5mcmFtZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGUgdmlydHVhbCByb290IGh1YiB0aW1lciBJUlEgY2hlY2tzIGZvciBodWIgc3RhdHVzICovCitzdGF0aWMgaW50CitzbDgxMWhfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2w4MTEgKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisjaWZkZWYJUVVJUkszCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIG5vbi1TTVAgSEFDSzogdXNlIHJvb3QgaHViIHRpbWVyIGFzIGkvbyB3YXRjaGRvZworCSAqIHRoaXMgc2VlbXMgZXNzZW50aWFsIHdoZW4gU09GIElSUXMgYXJlbid0IGluIHVzZS4uLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJnNsODExLT50aW1lcikpIHsKKwkJaWYgKHNsODExaF9pcnEoIC8qIH4wLCAqLyBoY2QsIE5VTEwpICE9IElSUV9OT05FKQorCQkJc2w4MTEtPnN0YXRfbG9zdCsrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKKworCWlmICghKHNsODExLT5wb3J0MSAmICgweGZmZmYgPDwgMTYpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiB0ZWxsIGtodWJkIHBvcnQgMSBjaGFuZ2VkICovCisJKmJ1ZiA9ICgxIDw8IDEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2w4MTFoX2h1Yl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3Qgc2w4MTEJCQkqc2w4MTEsCisJc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcgkqZGVzYworKSB7CisJdTE2CQl0ZW1wID0gMDsKKworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisKKwlkZXNjLT5iTmJyUG9ydHMgPSAxOworCWRlc2MtPmJEZXNjTGVuZ3RoID0gOTsKKworCS8qIHBlci1wb3J0IHBvd2VyIHN3aXRjaGluZyAoZ2FuZyBvZiBvbmUhKSwgb3Igbm9uZSAqLworCWRlc2MtPmJQd3JPbjJQd3JHb29kID0gMDsKKwlpZiAoc2w4MTEtPmJvYXJkICYmIHNsODExLT5ib2FyZC0+cG9ydF9wb3dlcikgeworCQlkZXNjLT5iUHdyT24yUHdyR29vZCA9IHNsODExLT5ib2FyZC0+cG90cGc7CisJCWlmICghZGVzYy0+YlB3ck9uMlB3ckdvb2QpCisJCQlkZXNjLT5iUHdyT24yUHdyR29vZCA9IDEwOworCQl0ZW1wID0gMHgwMDAxOworCX0gZWxzZQorCQl0ZW1wID0gMHgwMDAyOworCisJLyogbm8gb3ZlcmN1cnJlbnQgZXJyb3JzIGRldGVjdGlvbi9oYW5kbGluZyAqLworCXRlbXAgfD0gMHgwMDEwOworCisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IChfX2ZvcmNlIF9fdTE2KWNwdV90b19sZTE2KHRlbXApOworCisJLyogdHdvIGJpdG1hcHM6ICBwb3J0cyByZW1vdmFibGUsIGFuZCBsZWdhY3kgUG9ydFB3ckN0cmxNYXNrICovCisJZGVzYy0+Yml0bWFwWzBdID0gMSA8PCAxOworCWRlc2MtPmJpdG1hcFsxXSA9IH4wOworfQorCitzdGF0aWMgdm9pZAorc2w4MTFoX3RpbWVyKHVuc2lnbmVkIGxvbmcgX3NsODExKQoreworCXN0cnVjdCBzbDgxMSAJKnNsODExID0gKHZvaWQgKikgX3NsODExOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdTgJCWlycXN0YXQ7CisJdTgJCXNpZ25hbGluZyA9IHNsODExLT5jdHJsMSAmIFNMMTFIX0NUTDFNQVNLX0ZPUkNFOworCWNvbnN0IHUzMgltYXNrID0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKQorCQkJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpCisJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCisJLyogc3RvcCBzcGVjaWFsIHNpZ25hbGluZyAqLworCXNsODExLT5jdHJsMSAmPSB+U0wxMUhfQ1RMMU1BU0tfRk9SQ0U7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisJdWRlbGF5KDMpOworCisJaXJxc3RhdCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMpOworCisJc3dpdGNoIChzaWduYWxpbmcpIHsKKwljYXNlIFNMMTFIX0NUTDFNQVNLX1NFMDoKKwkJREJHKCJlbmQgcmVzZXRcbiIpOworCQlzbDgxMS0+cG9ydDEgPSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQpCisJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwkJc2w4MTEtPmN0cmwxID0gMDsKKwkJLyogZG9uJ3Qgd3JvbmdseSBhY2sgUkQgKi8KKwkJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX0lOU1JNVikKKwkJCWlycXN0YXQgJj0gflNMMTFIX0lOVE1BU0tfUkQ7CisJCWJyZWFrOworCWNhc2UgU0wxMUhfQ1RMMU1BU0tfSzoKKwkJREJHKCJlbmQgcmVzdW1lXG4iKTsKKwkJc2w4MTEtPnBvcnQxICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkcoIm9kZCB0aW1lciBzaWduYWxpbmc6ICUwMnhcbiIsIHNpZ25hbGluZyk7CisJCWJyZWFrOworCX0KKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUywgaXJxc3RhdCk7CisKKwlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfUkQpIHsKKwkJLyogdXNiY29yZSBudWtlcyBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgb24gZGlzY29ubmVjdCAqLworCQlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKSkKKwkJCXNsODExLT5wb3J0MSB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTikKKwkJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFKTsKKwkJc2w4MTEtPnBvcnQxICY9IH5tYXNrOworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WOworCX0gZWxzZSB7CisJCXNsODExLT5wb3J0MSB8PSBtYXNrOworCQlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfRFApCisJCQlzbDgxMS0+cG9ydDEgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpOworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WIHwgU0wxMUhfSU5UTUFTS19SRDsKKwl9CisKKwlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKSkgeworCQl1OAljdHJsMiA9IFNMODExSFNfQ1RMMl9JTklUOworCisJCXNsODExLT5pcnFfZW5hYmxlIHw9IFNMMTFIX0lOVE1BU0tfRE9ORV9BOworI2lmZGVmIFVTRV9CCisJCXNsODExLT5pcnFfZW5hYmxlIHw9IFNMMTFIX0lOVE1BU0tfRE9ORV9COworI2VuZGlmCisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKSkgeworCQkJc2w4MTEtPmN0cmwxIHw9IFNMMTFIX0NUTDFNQVNLX0xTUEQ7CisJCQljdHJsMiB8PSBTTDgxMUhTX0NUTDJNQVNLX0RTV0FQOworCQl9CisKKwkJLyogc3RhcnQgU09GcyBmbG93aW5nLCBraWNrc3RhcnRpbmcgd2l0aCBBIHJlZ2lzdGVycyAqLworCQlzbDgxMS0+Y3RybDEgfD0gU0wxMUhfQ1RMMU1BU0tfU09GX0VOQTsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX1NPRkxPV1JFRywgMHhlMCk7CisJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMUhTX0NUTFJFRzIsIGN0cmwyKTsKKworCQkvKiBhdXRvaW5jcmVtZW50aW5nICovCisJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0JVRkxOVEhSRUcpLCAwKTsKKwkJd3JpdGViKFNMX1NPRiwgc2w4MTEtPmRhdGFfcmVnKTsKKwkJd3JpdGViKDAsIHNsODExLT5kYXRhX3JlZyk7CisJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpLAorCQkJCVNMMTFIX0hDVExNQVNLX0FSTSk7CisKKwkJLyoga2h1YmQgcHJvdmlkZXMgZGVib3VuY2UgZGVsYXkgKi8KKwl9IGVsc2UgeworCQlzbDgxMS0+Y3RybDEgPSAwOworCX0KKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKworCS8qIHJlZW5hYmxlIGlycXMgKi8KKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgc2w4MTEtPmlycV9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsODExLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9odWJfY29udHJvbCgKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAorCXUxNgkJdHlwZVJlcSwKKwl1MTYJCXdWYWx1ZSwKKwl1MTYJCXdJbmRleCwKKwljaGFyCQkqYnVmLAorCXUxNgkJd0xlbmd0aAorKSB7CisJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCWludAkJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJaWYgKHdJbmRleCAhPSAxIHx8IHdMZW5ndGggIT0gMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXNsODExLT5wb3J0MSAmPSAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwkJCXNsODExLT5jdHJsMSA9IDA7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwkJCXNsODExLT5pcnFfZW5hYmxlID0gU0wxMUhfSU5UTUFTS19JTlNSTVY7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwKKwkJCQkJCXNsODExLT5pcnFfZW5hYmxlKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmICghKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpKQorCQkJCWJyZWFrOworCisJCQkvKiAyMCBtc2VjIG9mIHJlc3VtZS9LIHNpZ25hbGluZywgb3RoZXIgaXJxcyBibG9ja2VkICovCisJCQlEQkcoInN0YXJ0IHJlc3VtZS4uLlxuIik7CisJCQlzbDgxMS0+aXJxX2VuYWJsZSA9IDA7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwKKwkJCQkJCXNsODExLT5pcnFfZW5hYmxlKTsKKwkJCXNsODExLT5jdHJsMSB8PSBTTDExSF9DVEwxTUFTS19LOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisKKwkJCW1vZF90aW1lcigmc2w4MTEtPnRpbWVyLCBqaWZmaWVzCisJCQkJCSsgbXNlY3NfdG9famlmZmllcygyMCkpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCXBvcnRfcG93ZXIoc2w4MTEsIDApOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRToKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlzbDgxMS0+cG9ydDEgJj0gfigxIDw8IHdWYWx1ZSk7CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJc2w4MTFoX2h1Yl9kZXNjcmlwdG9yKHNsODExLCAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIoMCk7CisJCWJyZWFrOworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKHdJbmRleCAhPSAxKQorCQkJZ290byBlcnJvcjsKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIoc2w4MTEtPnBvcnQxKTsKKworI2lmbmRlZglWRVJCT1NFCisJaWYgKCoodTE2KikoYnVmKzIpKQkvKiBvbmx5IGlmIHdQb3J0Q2hhbmdlIGlzIGludGVyZXN0aW5nICovCisjZW5kaWYKKwkJREJHKCJHZXRQb3J0U3RhdHVzICUwOHhcbiIsIHNsODExLT5wb3J0MSk7CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICh3SW5kZXggIT0gMSB8fCB3TGVuZ3RoICE9IDApCisJCQlnb3RvIGVycm9yOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKSkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpKSkKKwkJCQlnb3RvIGVycm9yOworCisJCQlEQkcoInN1c3BlbmQuLi5cbiIpOworCQkJc2w4MTEtPmN0cmwxICY9IH5TTDExSF9DVEwxTUFTS19TT0ZfRU5BOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJcG9ydF9wb3dlcihzbDgxMSwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpCisJCQkJZ290byBlcnJvcjsKKwkJCWlmICghKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpKSkKKwkJCQlicmVhazsKKworCQkJLyogNTAgbXNlYyBvZiByZXNldC9TRTAgc2lnbmFsaW5nLCBpcnFzIGJsb2NrZWQgKi8KKwkJCXNsODExLT5pcnFfZW5hYmxlID0gMDsKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLAorCQkJCQkJc2w4MTEtPmlycV9lbmFibGUpOworCQkJc2w4MTEtPmN0cmwxID0gU0wxMUhfQ1RMMU1BU0tfU0UwOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0NUTFJFRzEsIHNsODExLT5jdHJsMSk7CisJCQlzbDgxMS0+cG9ydDEgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CisJCQltb2RfdGltZXIoJnNsODExLT50aW1lciwgamlmZmllcworCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMoNTApKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlzbDgxMS0+cG9ydDEgfD0gMSA8PCB3VmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKK2Vycm9yOgorCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZglDT05GSUdfUE0KKworc3RhdGljIGludAorc2w4MTFoX2h1Yl9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJLy8gU09GcyBvZmYKKwlEQkcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzbDgxMWhfaHViX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCS8vIFNPRnMgb24KKwlEQkcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAwOworfQorCisjZWxzZQorCisjZGVmaW5lCXNsODExaF9odWJfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXNsODExaF9odWJfcmVzdW1lCU5VTEwKKworI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIFNUVUJfREVCVUdfRklMRQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkgeyB9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHZvaWQgZHVtcF9pcnEoc3RydWN0IHNlcV9maWxlICpzLCBjaGFyICpsYWJlbCwgdTggbWFzaykKK3sKKwlzZXFfcHJpbnRmKHMsICIlcyAlMDJ4JXMlcyVzJXMlcyVzXG4iLCBsYWJlbCwgbWFzaywKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0RPTkVfQSkgPyAiIGRvbmVfYSIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0RPTkVfQikgPyAiIGRvbmVfYiIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpID8gIiBzb2YiIDogIiIsCisJCShtYXNrICYgU0wxMUhfSU5UTUFTS19JTlNSTVYpID8gIiBpbnMvcm12IiA6ICIiLAorCQkobWFzayAmIFNMMTFIX0lOVE1BU0tfUkQpID8gIiByZCIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0RQKSA/ICIgZHAiIDogIiIpOworfQorCitzdGF0aWMgaW50IHByb2Nfc2w4MTFoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBzLT5wcml2YXRlOworCXN0cnVjdCBzbDgxMWhfZXAJKmVwOworCXVuc2lnbmVkCQlpOworCisJc2VxX3ByaW50ZihzLCAiJXNcbiVzIHZlcnNpb24gJXNcbnBvcnRzdGF0dXNbMV0gPSAlMDh4XG4iLAorCQlzbDgxMV90b19oY2Qoc2w4MTEpLT5wcm9kdWN0X2Rlc2MsCisJCWhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTiwKKwkJc2w4MTEtPnBvcnQxKTsKKworCXNlcV9wcmludGYocywgImluc2VydC9yZW1vdmU6ICVsZFxuIiwgc2w4MTEtPnN0YXRfaW5zcm12KTsKKwlzZXFfcHJpbnRmKHMsICJjdXJyZW50IHNlc3Npb246ICBkb25lX2EgJWxkIGRvbmVfYiAlbGQgIgorCQkJIndha2UgJWxkIHNvZiAlbGQgb3ZlcnJ1biAlbGQgbG9zdCAlbGRcblxuIiwKKwkJc2w4MTEtPnN0YXRfYSwgc2w4MTEtPnN0YXRfYiwKKwkJc2w4MTEtPnN0YXRfd2FrZSwgc2w4MTEtPnN0YXRfc29mLAorCQlzbDgxMS0+c3RhdF9vdmVycnVuLCBzbDgxMS0+c3RhdF9sb3N0KTsKKworCXNwaW5fbG9ja19pcnEoJnNsODExLT5sb2NrKTsKKworCWlmIChzbDgxMS0+Y3RybDEgJiBTTDExSF9DVEwxTUFTS19TVVNQRU5EKQorCQlzZXFfcHJpbnRmKHMsICIoc3VzcGVuZGVkKVxuXG4iKTsKKwllbHNlIHsKKwkJdTgJdCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0NUTFJFRzEpOworCisJCXNlcV9wcmludGYocywgImN0cmwxICUwMnglcyVzJXMlc1xuIiwgdCwKKwkJCSh0ICYgU0wxMUhfQ1RMMU1BU0tfU09GX0VOQSkgPyAiIHNvZmdlbiIgOiAiIiwKKwkJCSh7Y2hhciAqczsgc3dpdGNoICh0ICYgU0wxMUhfQ1RMMU1BU0tfRk9SQ0UpIHsKKwkJCWNhc2UgU0wxMUhfQ1RMMU1BU0tfTk9STUFMOiBzID0gIiI7IGJyZWFrOworCQkJY2FzZSBTTDExSF9DVEwxTUFTS19TRTA6IHMgPSAiIHNlMC9yZXNldCI7IGJyZWFrOworCQkJY2FzZSBTTDExSF9DVEwxTUFTS19LOiBzID0gIiBrL3Jlc3VtZSI7IGJyZWFrOworCQkJZGVmYXVsdDogcyA9ICJqIjsgYnJlYWs7CisJCQl9OyBzOyB9KSwKKwkJCSh0ICYgU0wxMUhfQ1RMMU1BU0tfTFNQRCkgPyAiIGxvd3NwZWVkIiA6ICIiLAorCQkJKHQgJiBTTDExSF9DVEwxTUFTS19TVVNQRU5EKSA/ICIgc3VzcGVuZCIgOiAiIik7CisKKwkJZHVtcF9pcnEocywgImlycV9lbmFibGUiLAorCQkJCXNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUpKTsKKwkJZHVtcF9pcnEocywgImlycV9zdGF0dXMiLAorCQkJCXNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0lSUV9TVEFUVVMpKTsKKwkJc2VxX3ByaW50ZihzLCAiZnJhbWUgY2xvY2tzIHJlbWFpbmluZzogICVkXG4iLAorCQkJCXNsODExX3JlYWQoc2w4MTEsIFNMMTFIX1NPRlRNUlJFRykgPDwgNik7CisJfQorCisJc2VxX3ByaW50ZihzLCAiQTogcWglcCBjdGwgJTAyeCBzdHMgJTAyeFxuIiwgc2w4MTEtPmFjdGl2ZV9hLAorCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpKSwKKwkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9QS1RTVEFUUkVHKSkpOworCXNlcV9wcmludGYocywgIkI6IHFoJXAgY3RsICUwMnggc3RzICUwMnhcbiIsIHNsODExLT5hY3RpdmVfYiwKKwkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSksCisJCXNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0IoU0wxMUhfUEtUU1RBVFJFRykpKTsKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmc2w4MTEtPmFzeW5jLCBzY2hlZHVsZSkgeworCQlzdHJ1Y3QgdXJiCQkqdXJiOworCisJCXNlcV9wcmludGYocywgIiVzJXNxaCVwLCBlcCVkJXMsIG1heHBhY2tldCAlZCIKKwkJCQkJIiBuYWsgJWQgZXJyICVkXG4iLAorCQkJKGVwID09IHNsODExLT5hY3RpdmVfYSkgPyAiKEEpICIgOiAiIiwKKwkJCShlcCA9PSBzbDgxMS0+YWN0aXZlX2IpID8gIihCKSAiIDogIiIsCisJCQllcCwgZXAtPmVwbnVtLAorCQkJKHsgY2hhciAqczsgc3dpdGNoIChlcC0+bmV4dHBpZCkgeworCQkJY2FzZSBVU0JfUElEX0lOOiBzID0gImluIjsgYnJlYWs7CisJCQljYXNlIFVTQl9QSURfT1VUOiBzID0gIm91dCI7IGJyZWFrOworCQkJY2FzZSBVU0JfUElEX1NFVFVQOiBzID0gInNldHVwIjsgYnJlYWs7CisJCQljYXNlIFVTQl9QSURfQUNLOiBzID0gInN0YXR1cyI7IGJyZWFrOworCQkJZGVmYXVsdDogcyA9ICI/IjsgYnJlYWs7CisJCQl9OyBzO30pLAorCQkJZXAtPm1heHBhY2tldCwKKwkJCWVwLT5uYWtfY291bnQsIGVwLT5lcnJvcl9jb3VudCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHVyYiwgJmVwLT5oZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQkJc2VxX3ByaW50ZihzLCAiICB1cmIlcCwgJWQvJWRcbiIsIHVyYiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJfQorCX0KKwlpZiAoIWxpc3RfZW1wdHkoJnNsODExLT5hc3luYykpCisJCXNlcV9wcmludGYocywgIlxuIik7CisKKwlzZXFfcHJpbnRmKHMsICJwZXJpb2RpYyBzaXplPSAlZFxuIiwgUEVSSU9ESUNfU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEVSSU9ESUNfU0laRTsgaSsrKSB7CisJCWVwID0gc2w4MTEtPnBlcmlvZGljW2ldOworCQlpZiAoIWVwKQorCQkJY29udGludWU7CisJCXNlcV9wcmludGYocywgIiUyZCBbJTNkXTpcbiIsIGksIHNsODExLT5sb2FkW2ldKTsKKworCQkvKiBEVU1COiBwcmludHMgc2hhcmVkIGVudHJpZXMgbXVsdGlwbGUgdGltZXMgKi8KKwkJZG8geworCQkJc2VxX3ByaW50ZihzLAorCQkJCSIgICAlcyVzcWglZC8lcCAoJXNkZXYlZCBlcCVkJXMgbWF4ICVkKSAiCisJCQkJCSJlcnIgJWRcbiIsCisJCQkJKGVwID09IHNsODExLT5hY3RpdmVfYSkgPyAiKEEpICIgOiAiIiwKKwkJCQkoZXAgPT0gc2w4MTEtPmFjdGl2ZV9iKSA/ICIoQikgIiA6ICIiLAorCQkJCWVwLT5wZXJpb2QsIGVwLAorCQkJCShlcC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpCisJCQkJCT8gIiIgOiAibHMgIiwKKwkJCQllcC0+dWRldi0+ZGV2bnVtLCBlcC0+ZXBudW0sCisJCQkJKGVwLT5lcG51bSA9PSAwKSA/ICIiCisJCQkJCTogKChlcC0+bmV4dHBpZCA9PSBVU0JfUElEX0lOKQorCQkJCQkJPyAiaW4iCisJCQkJCQk6ICJvdXQiKSwKKwkJCQllcC0+bWF4cGFja2V0LCBlcC0+ZXJyb3JfY291bnQpOworCQkJZXAgPSBlcC0+bmV4dDsKKwkJfSB3aGlsZSAoZXApOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmc2w4MTEtPmxvY2spOworCXNlcV9wcmludGYocywgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3NsODExaF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3NsODExaF9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7CisJLm9wZW4JCT0gcHJvY19zbDgxMWhfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworLyogZXhwZWN0IGp1c3Qgb25lIHNsODExIHBlciBzeXN0ZW0gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHByb2NfZmlsZW5hbWVbXSA9ICJkcml2ZXIvc2w4MTFoIjsKKworc3RhdGljIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKworCXBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KHByb2NfZmlsZW5hbWUsIDAsIE5VTEwpOworCWlmIChwZGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcGRlLT5wcm9jX2ZvcHMgPSAmcHJvY19vcHM7CisJcGRlLT5kYXRhID0gc2w4MTE7CisJc2w4MTEtPnBkZSA9IHBkZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlpZiAoc2w4MTEtPnBkZSkKKwkJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19maWxlbmFtZSwgTlVMTCk7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorc2w4MTFoX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXBvcnRfcG93ZXIoc2w4MTEsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsODExLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBzbDgxMQkJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisKKwkvKiBjaGlwIGhhcyBiZWVuIHJlc2V0LCBWQlVTIHBvd2VyIGlzIG9mZiAqLworCisJdWRldiA9IHVzYl9hbGxvY19kZXYoTlVMTCwgJmhjZC0+c2VsZiwgMCk7CisJaWYgKCF1ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlpZiAoc2w4MTEtPmJvYXJkKQorCQloY2QtPmNhbl93YWtldXAgPSBzbDgxMS0+Ym9hcmQtPmNhbl93YWtldXA7CisKKwlpZiAodXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1Yih1ZGV2LCBoY2QpICE9IDApIHsKKwkJdXNiX3B1dF9kZXYodWRldik7CisJCXNsODExaF9zdG9wKGhjZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzbDgxMS0+Ym9hcmQgJiYgc2w4MTEtPmJvYXJkLT5wb3dlcikKKwkJaHViX3NldF9wb3dlcl9idWRnZXQodWRldiwgc2w4MTEtPmJvYXJkLT5wb3dlciAqIDIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIHNsODExaF9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBzbDgxMSksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCXNsODExaF9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKiBCYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucyAqLworCS5zdGFydCA9CQlzbDgxMWhfc3RhcnQsCisJLnN0b3AgPQkJCXNsODExaF9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlzbDgxMWhfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCXNsODExaF91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CXNsODExaF9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBwZXJpb2RpYyBzY2hlZHVsZSBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlzbDgxMWhfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CXNsODExaF9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCXNsODExaF9odWJfY29udHJvbCwKKwkuaHViX3N1c3BlbmQgPQkJc2w4MTFoX2h1Yl9zdXNwZW5kLAorCS5odWJfcmVzdW1lID0JCXNsODExaF9odWJfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlCitzbDgxMWhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbDgxMQkJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisKKwlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKworCXJlbW92ZV9kZWJ1Z19maWxlKHNsODExKTsKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCisJaW91bm1hcChzbDgxMS0+ZGF0YV9yZWcpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIDEpOworCisJaW91bm1hcChzbDgxMS0+YWRkcl9yZWcpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIDEpOworCisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSByZXNvdXJjZV9sZW4ocikgKCgociktPmVuZCAtIChyKS0+c3RhcnQpICsgMSkKKworc3RhdGljIGludCBfX2luaXQKK3NsODExaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IHNsODExCQkqc2w4MTE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSphZGRyLCAqZGF0YTsKKwlpbnQJCQlpcnE7CisJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisJaW50CQkJcmV0dmFsOworCXU4CQkJdG1wOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdC4gIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgc2hvdWxkCisJICogaGF2ZSBpbml0aWFsaXplZCB0aGVzZSB0aHJlZSByZXNvdXJjZXMgYW5kIHByb2JhYmx5IGJvYXJkCisJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQorCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgorCSAqLworCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghYWRkciB8fCAhZGF0YSB8fCBpcnEgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHJlZnVzZSB0byBjb25mdXNlIHVzYmNvcmUgKi8KKwlpZiAoZGV2LT5kbWFfbWFzaykgeworCQlEQkcoIm5vIHdlIHdvbid0IGRtYVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGFkZHItPnN0YXJ0LCAxLCBoY2RfbmFtZSkpIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCWFkZHJfcmVnID0gaW9yZW1hcChhZGRyLT5zdGFydCwgcmVzb3VyY2VfbGVuKGFkZHIpKTsKKwlpZiAoYWRkcl9yZWcgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIDEsIGhjZF9uYW1lKSkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMzsKKwl9CisJZGF0YV9yZWcgPSBpb3JlbWFwKGRhdGEtPnN0YXJ0LCByZXNvdXJjZV9sZW4oYWRkcikpOworCWlmIChkYXRhX3JlZyA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyNDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmc2w4MTFoX2hjX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaWYgKCFoY2QpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnI1OworCX0KKwloY2QtPnJzcmNfc3RhcnQgPSBhZGRyLT5zdGFydDsKKwlzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCisJc3Bpbl9sb2NrX2luaXQoJnNsODExLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc2w4MTEtPmFzeW5jKTsKKwlzbDgxMS0+Ym9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW5pdF90aW1lcigmc2w4MTEtPnRpbWVyKTsKKwlzbDgxMS0+dGltZXIuZnVuY3Rpb24gPSBzbDgxMWhfdGltZXI7CisJc2w4MTEtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgc2w4MTE7CisJc2w4MTEtPmFkZHJfcmVnID0gYWRkcl9yZWc7CisJc2w4MTEtPmRhdGFfcmVnID0gZGF0YV9yZWc7CisKKwlzcGluX2xvY2tfaXJxKCZzbDgxMS0+bG9jayk7CisJcG9ydF9wb3dlcihzbDgxMSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxKCZzbDgxMS0+bG9jayk7CisJbXNsZWVwKDIwMCk7CisKKwl0bXAgPSBzbDgxMV9yZWFkKHNsODExLCBTTDExSF9IV1JFVlJFRyk7CisJc3dpdGNoICh0bXAgPj4gNCkgeworCWNhc2UgMToKKwkJaGNkLT5wcm9kdWN0X2Rlc2MgPSAiU0w4MTFIUyB2MS4yIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQloY2QtPnByb2R1Y3RfZGVzYyA9ICJTTDgxMUhTIHYxLjUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiByZWplY3QgY2FzZSAwLCBTTDExUyBpcyBsZXNzIGZ1bmN0aW9uYWwgKi8KKwkJREJHKCJjaGlwcmV2ICUwMnhcbiIsIHRtcCk7CisJCXJldHZhbCA9IC1FTlhJTzsKKwkJZ290byBlcnI2OworCX0KKworCS8qIHNsODExcyB3b3VsZCBuZWVkIGEgZGlmZmVyZW50IGhhbmRsZXIgZm9yIHRoaXMgaXJxICovCisjaWZkZWYJQ09ORklHX0FSTQorCS8qIEN5cHJlc3MgZG9jcyBzYXkgdGhlIElSUSBpcyBJUlFUX0hJR0ggLi4uICovCisJc2V0X2lycV90eXBlKGlycSwgSVJRVF9SSVNJTkcpOworI2VuZGlmCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCAhPSAwKQorCQlnb3RvIGVycjY7CisKKwljcmVhdGVfZGVidWdfZmlsZShzbDgxMSk7CisJcmV0dXJuIHJldHZhbDsKKworIGVycjY6CisJdXNiX3B1dF9oY2QoaGNkKTsKKyBlcnI1OgorCWlvdW5tYXAoZGF0YV9yZWcpOworIGVycjQ6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdGEtPnN0YXJ0LCAxKTsKKyBlcnIzOgorCWlvdW5tYXAoYWRkcl9yZWcpOworIGVycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGFkZHItPnN0YXJ0LCAxKTsKKyBlcnIxOgorCURCRygiaW5pdCBlcnJvciwgJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBmb3IgdGhpcyBkZXZpY2UgdGhlcmUncyBubyB1c2VmdWwgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY29udHJvbGxlcgorICogYW5kIGl0cyByb290IGh1YiwgZXhjZXB0IHRoYXQgdGhlIHJvb3QgaHViIG9ubHkgZ2V0cyBkaXJlY3QgUE0gY2FsbHMgCisgKiB3aGVuIENPTkZJR19VU0JfU1VTUEVORCBpcyBlbmFibGVkLgorICovCisKK3N0YXRpYyBpbnQKK3NsODExaF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgcGhhc2UpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlpbnQJCXJldHZhbCA9IDA7CisKKwlpZiAocGhhc2UgIT0gU1VTUEVORF9QT1dFUl9ET1dOKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHN0YXRlIDw9IFBNX1NVU1BFTkRfTUVNKQorCQlyZXR2YWwgPSBzbDgxMWhfaHViX3N1c3BlbmQoaGNkKTsKKwllbHNlCisJCXBvcnRfcG93ZXIoc2w4MTEsIDApOworCWlmIChyZXR2YWwgPT0gMCkKKwkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgcGhhc2UpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKworCWlmIChwaGFzZSAhPSBSRVNVTUVfUE9XRVJfT04pCisJCXJldHVybiAwOworCisJLyogd2l0aCBubyAiY2hlY2sgdG8gc2VlIGlmIFZCVVMgaXMgc3RpbGwgcG93ZXJlZCIgYm9hcmQgaG9vaywKKwkgKiBsZXQncyBhc3N1bWUgaXQnZCBvbmx5IGJlIHBvd2VyZWQgdG8gZW5hYmxlIHJlbW90ZSB3YWtldXAuCisJICovCisJaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUgPiBQTV9TVVNQRU5EX01FTQorCQkJfHwgIWhjZC0+Y2FuX3dha2V1cCkgeworCQlzbDgxMS0+cG9ydDEgPSAwOworCQlwb3J0X3Bvd2VyKHNsODExLCAxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJcmV0dXJuIHNsODExaF9odWJfcmVzdW1lKGhjZCk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUJc2w4MTFoX3N1c3BlbmQJTlVMTAorI2RlZmluZQlzbDgxMWhfcmVzdW1lCU5VTEwKKworI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNsODExaF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCisJLmJ1cyA9CQkmcGxhdGZvcm1fYnVzX3R5cGUsCisKKwkucHJvYmUgPQlzbDgxMWhfcHJvYmUsCisJLnJlbW92ZSA9CXNsODExaF9yZW1vdmUsCisKKwkuc3VzcGVuZCA9CXNsODExaF9zdXNwZW5kLAorCS5yZXN1bWUgPQlzbDgxMWhfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKK3N0YXRpYyBpbnQgX19pbml0IHNsODExaF9pbml0KHZvaWQpIAoreworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlJTkZPKCJkcml2ZXIgJXMsICVzXG4iLCBoY2RfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc2w4MTFoX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc2w4MTFoX2NsZWFudXAodm9pZCkgCit7CQorCWRyaXZlcl91bnJlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNsODExaF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkwZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS5oCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogU0w4MTFIUyByZWdpc3RlciBkZWNsYXJhdGlvbnMgYW5kIEhDRCBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUHNpb24gVGVrbG9naXgKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAxIEN5cHJlc3MgU2VtaWNvbmR1Y3RvciBJbmMuIAorICovCisKKy8qCisgKiBTTDgxMUhTIGhhcyB0cmFuc2ZlciByZWdpc3RlcnMsIGFuZCBjb250cm9sIHJlZ2lzdGVycy4gIEluIGhvc3QvbWFzdGVyCisgKiBtb2RlIG9uZSBzZXQgb2YgcmVnaXN0ZXJzIGlzIHVzZWQ7IGluIHBlcmlwaGVyYWwvc2xhdmUgbW9kZSwgYW5vdGhlci4KKyAqICAtIFNMMTFIIG9ubHkgaGFzIHNvbWUgIkEiIHRyYW5zZmVyIHJlZ2lzdGVycyBmcm9tIDB4MDAtMHgwNAorICogIC0gU0w4MTFIUyBhbHNvIGhhcyAiQiIgcmVnaXN0ZXJzIGZyb20gMHgwOC0weDBjCisgKiAgLSBTTDgxMVMgKG9yIEhTIGluIHNsYXZlIG1vZGUpIGhhcyBmb3VyIEErQiBzZXRzLCBhdCAwMCwgMTAsIDIwLCAzMAorICovCisKKyNkZWZpbmUgU0w4MTFfRVBfQShiYXNlKQkoKGJhc2UpICsgMCkKKyNkZWZpbmUgU0w4MTFfRVBfQihiYXNlKQkoKGJhc2UpICsgOCkKKworI2RlZmluZSBTTDgxMV9IT1NUX0JVRgkJMHgwMAorI2RlZmluZSBTTDgxMV9QRVJJUEhfRVAwCTB4MDAKKyNkZWZpbmUgU0w4MTFfUEVSSVBIX0VQMQkweDEwCisjZGVmaW5lIFNMODExX1BFUklQSF9FUDIJMHgyMAorI2RlZmluZSBTTDgxMV9QRVJJUEhfRVAzCTB4MzAKKworCisvKiBUUkFOU0ZFUiBSRUdJU1RFUlM6ICBob3N0IGFuZCBwZXJpcGhlcmFsIHNpZGVzIGFyZSBzaW1pbGFyCisgKiBleGNlcHQgZm9yIHRoZSBjb250cm9sIG1vZGVscyAobWFzdGVyIHZzIHNsYXZlKS4KKyAqLworI2RlZmluZSBTTDExSF9IT1NUQ1RMUkVHCTAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0FSTQkweDAxCisjCWRlZmluZSBTTDExSF9IQ1RMTUFTS19FTkFCTEUJMHgwMgorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfSU4JMHgwMAorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfT1VUCTB4MDQKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0lTT0NICTB4MTAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0FGVEVSU09GCTB4MjAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX1RPR0dMRQkweDQwCisjCWRlZmluZSBTTDExSF9IQ1RMTUFTS19QUkVBTUJMRQkweDgwCisjZGVmaW5lIFNMMTFIX0JVRkFERFJSRUcJMQorI2RlZmluZSBTTDExSF9CVUZMTlRIUkVHCTIKKyNkZWZpbmUgU0wxMUhfUEtUU1RBVFJFRwkzCS8qIHJlYWQgKi8KKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX0FDSwkweDAxCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19FUlJPUgkweDAyCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19UTU9VVAkweDA0CisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19TRVEJMHgwOAorIwlkZWZpbmUgU0wxMUhfU1RBVE1BU0tfU0VUVVAJMHgxMAorIwlkZWZpbmUgU0wxMUhfU1RBVE1BU0tfT1ZGCTB4MjAKKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX05BSwkweDQwCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19TVEFMTAkweDgwCisjZGVmaW5lIFNMMTFIX1BJREVQUkVHCQkzCS8qIHdyaXRlICovCisjCWRlZmluZQlTTF9TRVRVUAkweGQwCisjCWRlZmluZQlTTF9JTgkJMHg5MAorIwlkZWZpbmUJU0xfT1VUCQkweDEwCisjCWRlZmluZQlTTF9TT0YJCTB4NTAKKyMJZGVmaW5lCVNMX1BSRUFNQkxFCTB4YzAKKyMJZGVmaW5lCVNMX05BSwkJMHhhMAorIwlkZWZpbmUJU0xfU1RBTEwJMHhlMAorIwlkZWZpbmUJU0xfREFUQTAJMHgzMAorIwlkZWZpbmUJU0xfREFUQTEJMHhiMAorI2RlZmluZSBTTDExSF9YRkVSQ05UUkVHCTQJLyogcmVhZCAqLworI2RlZmluZSBTTDExSF9ERVZBRERSUkVHCTQJLyogd3JpdGUgKi8KKworCisvKiBDT05UUk9MIFJFR0lTVEVSUzogIGhvc3QgYW5kIHBlcmlwaGVyYWwgYXJlIHZlcnkgZGlmZmVyZW50LgorICovCisjZGVmaW5lIFNMMTFIX0NUTFJFRzEJCTUKKyMJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX1NPRl9FTkEJMHgwMQorIwlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfRk9SQ0UJMHgxOAorIwkJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX05PUk1BTAkweDAwCisjCQlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfU0UwCTB4MDgJLyogcmVzZXQgKi8KKyMJCWRlZmluZSBTTDExSF9DVEwxTUFTS19KCQkweDEwCisjCQlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfSwkJMHgxOAkvKiByZXN1bWUgKi8KKyMJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX0xTUEQJMHgyMAorIwlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfU1VTUEVORAkweDQwCisjZGVmaW5lIFNMMTFIX0lSUV9FTkFCTEUJNgorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19ET05FX0EJMHgwMQorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19ET05FX0IJMHgwMgorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19TT0ZJTlRSCTB4MTAKKyMJZGVmaW5lIFNMMTFIX0lOVE1BU0tfSU5TUk1WCTB4MjAJLyogdG8vZnJvbSBTRTAgKi8KKyMJZGVmaW5lIFNMMTFIX0lOVE1BU0tfUkQJCTB4NDAKKyMJZGVmaW5lIFNMMTFIX0lOVE1BU0tfRFAJCTB4ODAJLyogb25seSBpbiBJTlRTVEFUUkVHICovCisjZGVmaW5lIFNMMTFTX0FERFJFU1MJCTcKKworLyogMHgwOC0weDBjIGFyZSBmb3IgdGhlIEIgYnVmZmVyIChub3QgaW4gU0wxMSkgKi8KKworI2RlZmluZSBTTDExSF9JUlFfU1RBVFVTCTB4MEQJLyogd3JpdGUgdG8gYWNrICovCisjZGVmaW5lIFNMMTFIX0hXUkVWUkVHCQkweDBFCS8qIHJlYWQgKi8KKyMJZGVmaW5lIFNMMTFIX0hXUk1BU0tfSFdSRVYJMHhGMAorI2RlZmluZSBTTDExSF9TT0ZMT1dSRUcJCTB4MEUJLyogd3JpdGUgKi8KKyNkZWZpbmUgU0wxMUhfU09GVE1SUkVHCQkweDBGCS8qIHJlYWQgKi8KKworLyogYSB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIGVuYWJsZXMgU0w4MTFIUyBmZWF0dXJlcy4KKyAqIEhPU1QgZmxhZyBwcmVzdW1hYmx5IG92ZXJyaWRlcyB0aGUgY2hpcCBpbnB1dCBzaWduYWw/CisgKi8KKyNkZWZpbmUgU0w4MTFIU19DVExSRUcyCQkweDBGCisjCWRlZmluZSBTTDgxMUhTX0NUTDJNQVNLX1NPRl9NQVNLCTB4M0YKKyMJZGVmaW5lIFNMODExSFNfQ1RMMk1BU0tfRFNXQVAJCTB4NDAKKyMJZGVmaW5lIFNMODExSFNfQ1RMMk1BU0tfSE9TVAkJMHg4MAorCisjZGVmaW5lIFNMODExSFNfQ1RMMl9JTklUCShTTDgxMUhTX0NUTDJNQVNLX0hPU1QgfCAweDJlKQorCisKKy8qIERBVEEgQlVGRkVSUzogcmVnaXN0ZXJzIGZyb20gMHgxMC4uMHhmZiBhcmUgZm9yIGRhdGEgYnVmZmVyczsKKyAqIHRoYXQncyAyNDAgYnl0ZXMsIHdoaWNoIHdlJ2xsIHNwbGl0IGV2ZW5seSBiZXR3ZWVuIEEgYW5kIEIgc2lkZXMuCisgKiBPbmx5IElTTyBjYW4gdXNlIG1vcmUgdGhhbiA2NCBieXRlcyBwZXIgcGFja2V0LgorICogKFRoZSBTTDExUyBoYXMgMHg0MC4uMHhmZiBmb3IgYnVmZmVycy4pCisgKi8KKyNkZWZpbmUgSF9NQVhQQUNLRVQJMTIwCQkvKiBieXRlcyBpbiBBIG9yIEIgZmlmb3MgKi8KKworI2RlZmluZSBTTDExSF9EQVRBX1NUQVJUCTB4MTAKKyNkZWZpbmUJU0w4MTFIU19QQUNLRVRfQlVGKGlzX2EpCSgoaXNfYSkgXAorCQk/IFNMMTFIX0RBVEFfU1RBUlQgXAorCQk6IChTTDExSF9EQVRBX1NUQVJUICsgSF9NQVhQQUNLRVQpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCUxPRzJfUEVSSU9ESUNfU0laRQk1CS8qIGFyYml0cmFyeTsgdGhpcyBtYXRjaGVzIE9IQ0kgKi8KKyNkZWZpbmUJUEVSSU9ESUNfU0laRQkJKDEgPDwgTE9HMl9QRVJJT0RJQ19TSVpFKQorCitzdHJ1Y3Qgc2w4MTEgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisJc3RydWN0IHNsODExX3BsYXRmb3JtX2RhdGEJKmJvYXJkOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcGRlOworCisJdW5zaWduZWQgbG9uZwkJc3RhdF9pbnNybXY7CisJdW5zaWduZWQgbG9uZwkJc3RhdF93YWtlOworCXVuc2lnbmVkIGxvbmcJCXN0YXRfc29mOworCXVuc2lnbmVkIGxvbmcJCXN0YXRfYTsKKwl1bnNpZ25lZCBsb25nCQlzdGF0X2I7CisJdW5zaWduZWQgbG9uZwkJc3RhdF9sb3N0OworCXVuc2lnbmVkIGxvbmcJCXN0YXRfb3ZlcnJ1bjsKKworCS8qIHN3IG1vZGVsICovCisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJc3RydWN0IHNsODExaF9lcAkqbmV4dF9wZXJpb2RpYzsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSpuZXh0X2FzeW5jOworCisJc3RydWN0IHNsODExaF9lcAkqYWN0aXZlX2E7CisJdW5zaWduZWQgbG9uZwkJamlmZmllc19hOworCXN0cnVjdCBzbDgxMWhfZXAJKmFjdGl2ZV9iOworCXVuc2lnbmVkIGxvbmcJCWppZmZpZXNfYjsKKworCXUzMgkJCXBvcnQxOworCXU4CQkJY3RybDEsIGN0cmwyLCBpcnFfZW5hYmxlOworCXUxNgkJCWZyYW1lOworCisJLyogYXN5bmMgc2NoZWR1bGU6IGNvbnRyb2wsIGJ1bGsgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWFzeW5jOworCisJLyogcGVyaW9kaWMgc2NoZWR1bGU6IGludGVycnVwdCwgaXNvICovCisJdTE2CQkJbG9hZFtQRVJJT0RJQ19TSVpFXTsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSpwZXJpb2RpY1tQRVJJT0RJQ19TSVpFXTsKKwl1bnNpZ25lZAkJcGVyaW9kaWNfY291bnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbDgxMSAqaGNkX3RvX3NsODExKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc2w4MTEgKikgKGhjZC0+aGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICpzbDgxMV90b19oY2Qoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHNsODExLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdHJ1Y3Qgc2w4MTFoX2VwIHsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKworCXU4CQkJZGVmY3RybDsKKwl1OAkJCW1heHBhY2tldDsKKwl1OAkJCWVwbnVtOworCXU4CQkJbmV4dHBpZDsKKworCXUxNgkJCWVycm9yX2NvdW50OworCXUxNgkJCW5ha19jb3VudDsKKwl1MTYJCQlsZW5ndGg7CQkvKiBvZiBjdXJyZW50IHBhY2tldCAqLworCisJLyogcGVyaW9kaWMgc2NoZWR1bGUgKi8KKwl1MTYJCQlwZXJpb2Q7CisJdTE2CQkJYnJhbmNoOworCXUxNgkJCWxvYWQ7CisJc3RydWN0IHNsODExaF9lcAkqbmV4dDsKKworCS8qIGFzeW5jIHNjaGVkdWxlICovCisJc3RydWN0IGxpc3RfaGVhZAlzY2hlZHVsZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZXNlIHJlZ2lzdGVyIHV0aWxpdGllcyBzaG91bGQgd29yayBmb3IgdGhlIFNMODExUyByZWdpc3RlciBBUEkgdG9vCisgKiBOT1RFOiAgY2FsbGVyIG11c3QgaG9sZCBzbDgxMS0+bG9jay4KKyAqLworCitzdGF0aWMgaW5saW5lIHU4IHNsODExX3JlYWQoc3RydWN0IHNsODExICpzbDgxMSwgaW50IHJlZykKK3sKKwl3cml0ZWIocmVnLCBzbDgxMS0+YWRkcl9yZWcpOworCXJldHVybiByZWFkYihzbDgxMS0+ZGF0YV9yZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2w4MTFfd3JpdGUoc3RydWN0IHNsODExICpzbDgxMSwgaW50IHJlZywgdTggdmFsKQoreworCXdyaXRlYihyZWcsIHNsODExLT5hZGRyX3JlZyk7CisJd3JpdGViKHZhbCwgc2w4MTEtPmRhdGFfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbDgxMV93cml0ZV9idWYoc3RydWN0IHNsODExICpzbDgxMSwgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNvbnN0IHU4CSpkYXRhOworCXZvaWQgX19pb21lbQkqZGF0YV9yZWc7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm47CisJd3JpdGViKGFkZHIsIHNsODExLT5hZGRyX3JlZyk7CisKKwlkYXRhID0gYnVmOworCWRhdGFfcmVnID0gc2w4MTEtPmRhdGFfcmVnOworCWRvIHsKKwkJd3JpdGViKCpkYXRhKyssIGRhdGFfcmVnKTsKKwl9IHdoaWxlICgtLWNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbDgxMV9yZWFkX2J1ZihzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdTggCQkqZGF0YTsKKwl2b2lkIF9faW9tZW0JKmRhdGFfcmVnOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuOworCXdyaXRlYihhZGRyLCBzbDgxMS0+YWRkcl9yZWcpOworCisJZGF0YSA9IGJ1ZjsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKwlkbyB7CisJCSpkYXRhKysgPSByZWFkYihkYXRhX3JlZyk7CisJfSB3aGlsZSAoLS1jb3VudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9ERUJVRyAic2w4MTE6ICIgc3R1ZmYpCisjZWxzZQorI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWZkZWYgVkVSQk9TRQorIyAgICBkZWZpbmUgVkRCRwkJREJHCisjZWxzZQorIyAgICBkZWZpbmUgVkRCRyhzdHVmZi4uLikJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIFBBQ0tFVF9UUkFDRQorIyAgICBkZWZpbmUgUEFDS0VUCQlWREJHCisjZWxzZQorIyAgICBkZWZpbmUgUEFDS0VUKHN0dWZmLi4uKQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIEVSUihzdHVmZi4uLikJCXByaW50ayhLRVJOX0VSUiAic2w4MTE6ICIgc3R1ZmYpCisjZGVmaW5lIFdBUk4oc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9XQVJOSU5HICJzbDgxMTogIiBzdHVmZikKKyNkZWZpbmUgSU5GTyhzdHVmZi4uLikJCXByaW50ayhLRVJOX0lORk8gInNsODExOiAiIHN0dWZmKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzczYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwpAQCAtMCwwICsxLDU4NyBAQAorLyoKKyAqIFVIQ0ktc3BlY2lmaWMgZGVidWdnaW5nIGNvZGUuIEludmFsdWFibGUgd2hlbiBzb21ldGhpbmcKKyAqIGdvZXMgd3JvbmcsIGJ1dCBkb24ndCBnZXQgaW4gbXkgZmFjZS4KKyAqCisgKiBLZXJuZWwgdmlzaWJsZSBwb2ludGVycyBhcmUgc3Vycm91bmRlZCBpbiBbXSdzIGFuZCBidXMKKyAqIHZpc2libGUgcG9pbnRlcnMgYXJlIHN1cnJvdW5kZWQgaW4gKCkncworICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDEgSm9oYW5uZXMgRXJkZmVsdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInVoY2ktaGNkLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1aGNpX2RlYnVnZnNfcm9vdCA9IE5VTEw7CisKKy8qIEhhbmRsZSBSRUFMTFkgbGFyZ2UgcHJpbnRrJ3Mgc28gd2UgZG9uJ3Qgb3ZlcmZsb3cgYnVmZmVycyAqLworc3RhdGljIGlubGluZSB2b2lkIGxwcmludGsoY2hhciAqYnVmKQoreworCWNoYXIgKnA7CisKKwkvKiBKdXN0IHdyaXRlIG9uZSBsaW5lIGF0IGEgdGltZSAqLworCXdoaWxlIChidWYpIHsKKwkJcCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAocCkKKwkJCSpwID0gMDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBidWYpOworCQlidWYgPSBwOworCQlpZiAoYnVmKQorCQkJYnVmKys7CisJfQorfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd190ZChzdHJ1Y3QgdWhjaV90ZCAqdGQsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHNwYWNlKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwljaGFyICpzcGlkOworCXUzMiBzdGF0dXMsIHRva2VuOworCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KKwlpZiAobGVuIDwgMTYwKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IHRkX3N0YXR1cyh0ZCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzWyVwXSBsaW5rICglMDh4KSAiLCBzcGFjZSwgIiIsIHRkLCBsZTMyX3RvX2NwdSh0ZC0+bGluaykpOworCW91dCArPSBzcHJpbnRmKG91dCwgImUlZCAlcyVzJXMlcyVzJXMlcyVzJXMlc0xlbmd0aD0leCAiLAorCQkoKHN0YXR1cyA+PiAyNykgJiAzKSwKKwkJKHN0YXR1cyAmIFREX0NUUkxfU1BEKSA/ICAgICAgIlNQRCAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0xTKSA/ICAgICAgICJMUyAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0lPQykgPyAgICAgICJJT0MgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpID8gICAiQWN0aXZlICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfU1RBTExFRCkgPyAgIlN0YWxsZWQgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9EQlVGRVJSKSA/ICAiRGF0YUJ1ZkVyciAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0JBQkJMRSkgPyAgICJCYWJibGUgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9OQUspID8gICAgICAiTkFLICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfQ1JDVElNRU8pID8gIkNSQy9UaW1lbyAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0JJVFNUVUZGKSA/ICJCaXRTdHVmZiAiIDogIiIsCisJCXN0YXR1cyAmIDB4N2ZmKTsKKworCXRva2VuID0gdGRfdG9rZW4odGQpOworCXN3aXRjaCAodWhjaV9wYWNrZXRpZCh0b2tlbikpIHsKKwkJY2FzZSBVU0JfUElEX1NFVFVQOgorCQkJc3BpZCA9ICJTRVRVUCI7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUElEX09VVDoKKwkJCXNwaWQgPSAiT1VUIjsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QSURfSU46CisJCQlzcGlkID0gIklOIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3BpZCA9ICI/IjsKKwkJCWJyZWFrOworCX0KKworCW91dCArPSBzcHJpbnRmKG91dCwgIk1heExlbj0leCBEVCVkIEVuZFB0PSV4IERldj0leCwgUElEPSV4KCVzKSAiLAorCQl0b2tlbiA+PiAyMSwKKwkJKCh0b2tlbiA+PiAxOSkgJiAxKSwKKwkJKHRva2VuID4+IDE1KSAmIDE1LAorCQkodG9rZW4gPj4gOCkgJiAxMjcsCisJCSh0b2tlbiAmIDB4ZmYpLAorCQlzcGlkKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIoYnVmPSUwOHgpXG4iLCBsZTMyX3RvX2NwdSh0ZC0+YnVmZmVyKSk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd19xaChzdHJ1Y3QgdWhjaV9xaCAqcWgsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHNwYWNlKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgKnRtcDsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJaW50IGkgPSAwLCBjaGVja2VkID0gMCwgcHJldmFjdGl2ZSA9IDA7CisJX19sZTMyIGVsZW1lbnQgPSBxaF9lbGVtZW50KHFoKTsKKworCS8qIFRyeSB0byBtYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggbWVtb3J5ICovCisJaWYgKGxlbiA8IDgwICogNikKKwkJcmV0dXJuIDA7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnNbJXBdIGxpbmsgKCUwOHgpIGVsZW1lbnQgKCUwOHgpXG4iLCBzcGFjZSwgIiIsCisJCQlxaCwgbGUzMl90b19jcHUocWgtPmxpbmspLCBsZTMyX3RvX2NwdShlbGVtZW50KSk7CisKKwlpZiAoZWxlbWVudCAmIFVIQ0lfUFRSX1FIKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEVsZW1lbnQgcG9pbnRzIHRvIFFIIChidWc/KVxuIiwgc3BhY2UsICIiKTsKKworCWlmIChlbGVtZW50ICYgVUhDSV9QVFJfREVQVEgpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgRGVwdGggdHJhdmVyc2VcbiIsIHNwYWNlLCAiIik7CisKKwlpZiAoZWxlbWVudCAmIGNwdV90b19sZTMyKDgpKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEJpdCAzIHNldCAoYnVnPylcbiIsIHNwYWNlLCAiIik7CisKKwlpZiAoIShlbGVtZW50ICYgfihVSENJX1BUUl9RSCB8IFVIQ0lfUFRSX0RFUFRIKSkpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgRWxlbWVudCBpcyBOVUxMIChidWc/KVxuIiwgc3BhY2UsICIiKTsKKworCWlmICghcWgtPnVyYnApIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzICB1cmJwID09IE5VTExcbiIsIHNwYWNlLCAiIik7CisJCWdvdG8gb3V0OworCX0KKworCXVyYnAgPSBxaC0+dXJicDsKKworCWhlYWQgPSAmdXJicC0+dGRfbGlzdDsKKwl0bXAgPSBoZWFkLT5uZXh0OworCisJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJaWYgKGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKSAhPSAoZWxlbWVudCAmIH5VSENJX1BUUl9CSVRTKSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzIEVsZW1lbnQgIT0gRmlyc3QgVERcbiIsIHNwYWNlLCAiIik7CisKKwl3aGlsZSAodG1wICE9IGhlYWQpIHsKKwkJc3RydWN0IHVoY2lfdGQgKnRkID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKworCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzJWQ6ICIsIHNwYWNlICsgMiwgIiIsIGkrKyk7CisJCW91dCArPSB1aGNpX3Nob3dfdGQodGQsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDApOworCisJCWlmIChpID4gMTAgJiYgIWNoZWNrZWQgJiYgcHJldmFjdGl2ZSAmJiB0bXAgIT0gaGVhZCAmJgorCQkgICAgZGVidWcgPD0gMikgeworCQkJc3RydWN0IGxpc3RfaGVhZCAqbnRtcCA9IHRtcDsKKwkJCXN0cnVjdCB1aGNpX3RkICpudGQgPSB0ZDsKKwkJCWludCBhY3RpdmUgPSAxLCBuaSA9IGk7CisKKwkJCWNoZWNrZWQgPSAxOworCisJCQl3aGlsZSAobnRtcCAhPSBoZWFkICYmIG50bXAtPm5leHQgIT0gaGVhZCAmJiBhY3RpdmUpIHsKKwkJCQludGQgPSBsaXN0X2VudHJ5KG50bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKworCQkJCW50bXAgPSBudG1wLT5uZXh0OworCisJCQkJYWN0aXZlID0gdGRfc3RhdHVzKG50ZCkgJiBURF9DVFJMX0FDVElWRTsKKworCQkJCW5pKys7CisJCQl9CisKKwkJCWlmIChhY3RpdmUgJiYgbmkgPiBpKSB7CisJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzW3NraXBwZWQgJWQgYWN0aXZlIFREJ3NdXG4iLCBzcGFjZSwgIiIsIG5pIC0gaSk7CisJCQkJdG1wID0gbnRtcDsKKwkJCQl0ZCA9IG50ZDsKKwkJCQlpID0gbmk7CisJCQl9CisJCX0KKworCQlwcmV2YWN0aXZlID0gdGRfc3RhdHVzKHRkKSAmIFREX0NUUkxfQUNUSVZFOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZ1cmJwLT5xdWV1ZV9saXN0KSB8fCB1cmJwLT5xdWV1ZWQpCisJCWdvdG8gb3V0OworCisJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzUXVldWVkIFFIJ3M6XG4iLCAtc3BhY2UsICItLSIpOworCisJaGVhZCA9ICZ1cmJwLT5xdWV1ZV9saXN0OworCXRtcCA9IGhlYWQtPm5leHQ7CisKKwl3aGlsZSAodG1wICE9IGhlYWQpIHsKKwkJc3RydWN0IHVyYl9wcml2ICpudXJicCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdXJiX3ByaXYsCisJCQkJCQlxdWV1ZV9saXN0KTsKKwkJdG1wID0gdG1wLT5uZXh0OworCisJCW91dCArPSB1aGNpX3Nob3dfcWgobnVyYnAtPnFoLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpLCBzcGFjZSk7CisJfQorCitvdXQ6CisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworI2RlZmluZSBzaG93X2ZyYW1lX251bSgpCVwKKwlpZiAoIXNob3duKSB7CQlcCisJICBzaG93biA9IDE7CQlcCisJICBvdXQgKz0gc3ByaW50ZihvdXQsICItIEZyYW1lICVkXG4iLCBpKTsgXAorCX0KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgY29uc3QgY2hhciAqcWhfbmFtZXNbXSA9IHsKKyAgInNrZWxfaW50MTI4X3FoIiwgInNrZWxfaW50NjRfcWgiLAorICAic2tlbF9pbnQzMl9xaCIsICJza2VsX2ludDE2X3FoIiwKKyAgInNrZWxfaW50OF9xaCIsICJza2VsX2ludDRfcWgiLAorICAic2tlbF9pbnQyX3FoIiwgInNrZWxfaW50MV9xaCIsCisgICJza2VsX2xzX2NvbnRyb2xfcWgiLCAic2tlbF9mc19jb250cm9sX3FoIiwKKyAgInNrZWxfYnVsa19xaCIsICJza2VsX3Rlcm1fcWgiCit9OworCisjZGVmaW5lIHNob3dfcWhfbmFtZSgpCQlcCisJaWYgKCFzaG93bikgewkJXAorCSAgc2hvd24gPSAxOwkJXAorCSAgb3V0ICs9IHNwcmludGYob3V0LCAiLSAlc1xuIiwgcWhfbmFtZXNbaV0pOyBcCisJfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd19zYyhpbnQgcG9ydCwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJY2hhciAqb3V0ID0gYnVmOworCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KKwlpZiAobGVuIDwgMTYwKQorCQlyZXR1cm4gMDsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgc3RhdCVkICAgICA9ICAgICAlMDR4ICAlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJcG9ydCwKKwkJc3RhdHVzLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX1NVU1ApID8JIiBTdXNwZW5kIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX09DQykgPwkiIE92ZXJDdXJyZW50Q2hhbmdlIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX09DKSA/CSIgT3ZlckN1cnJlbnQiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUFIpID8JIiBSZXNldCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19MU0RBKSA/CSIgTG93U3BlZWQiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUkQpID8JIiBSZXN1bWVEZXRlY3QiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUEVDKSA/CSIgRW5hYmxlQ2hhbmdlIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX1BFKSA/CSIgRW5hYmxlZCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19DU0MpID8JIiBDb25uZWN0Q2hhbmdlIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX0NDUykgPwkiIENvbm5lY3RlZCIgOiAiIik7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd19zdGF0dXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJY2hhciAqb3V0ID0gYnVmOworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJdW5zaWduZWQgc2hvcnQgdXNiY21kLCB1c2JzdGF0LCB1c2JpbnQsIHVzYmZybnVtOworCXVuc2lnbmVkIGludCBmbGJhc2VhZGQ7CisJdW5zaWduZWQgY2hhciBzb2Y7CisJdW5zaWduZWQgc2hvcnQgcG9ydHNjMSwgcG9ydHNjMjsKKworCS8qIFRyeSB0byBtYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggbWVtb3J5ICovCisJaWYgKGxlbiA8IDgwICogNikKKwkJcmV0dXJuIDA7CisKKwl1c2JjbWQgICAgPSBpbncoaW9fYWRkciArIDApOworCXVzYnN0YXQgICA9IGludyhpb19hZGRyICsgMik7CisJdXNiaW50ICAgID0gaW53KGlvX2FkZHIgKyA0KTsKKwl1c2Jmcm51bSAgPSBpbncoaW9fYWRkciArIDYpOworCWZsYmFzZWFkZCA9IGlubChpb19hZGRyICsgOCk7CisJc29mICAgICAgID0gaW5iKGlvX2FkZHIgKyAxMik7CisJcG9ydHNjMSAgID0gaW53KGlvX2FkZHIgKyAxNik7CisJcG9ydHNjMiAgID0gaW53KGlvX2FkZHIgKyAxOCk7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgIHVzYmNtZCAgICA9ICAgICAlMDR4ICAgJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJdXNiY21kLAorCQkodXNiY21kICYgVVNCQ01EX01BWFApID8gICAgIk1heHA2NCAiIDogIk1heHAzMiAiLAorCQkodXNiY21kICYgVVNCQ01EX0NGKSA/ICAgICAgIkNGICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9TV0RCRykgPyAgICJTV0RCRyAiIDogIiIsCisJCSh1c2JjbWQgJiBVU0JDTURfRkdSKSA/ICAgICAiRkdSICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9FR1NNKSA/ICAgICJFR1NNICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9HUkVTRVQpID8gICJHUkVTRVQgIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX0hDUkVTRVQpID8gIkhDUkVTRVQgIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX1JTKSA/ICAgICAgIlJTICIgOiAiIik7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgIHVzYnN0YXQgICA9ICAgICAlMDR4ICAgJXMlcyVzJXMlcyVzXG4iLAorCQl1c2JzdGF0LAorCQkodXNic3RhdCAmIFVTQlNUU19IQ0gpID8gICAgIkhDSGFsdGVkICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfSENQRSkgPyAgICJIb3N0Q29udHJvbGxlclByb2Nlc3NFcnJvciAiIDogIiIsCisJCSh1c2JzdGF0ICYgVVNCU1RTX0hTRSkgPyAgICAiSG9zdFN5c3RlbUVycm9yICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfUkQpID8gICAgICJSZXN1bWVEZXRlY3QgIiA6ICIiLAorCQkodXNic3RhdCAmIFVTQlNUU19FUlJPUikgPyAgIlVTQkVycm9yICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfVVNCSU5UKSA/ICJVU0JJTlQgIiA6ICIiKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgdXNiaW50ICAgID0gICAgICUwNHhcbiIsIHVzYmludCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiICB1c2Jmcm51bSAgPSAgICglZCklMDN4XG4iLCAodXNiZnJudW0gPj4gMTApICYgMSwKKwkJMHhmZmYgJiAoNCoodW5zaWduZWQgaW50KXVzYmZybnVtKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiICBmbGJhc2VhZGQgPSAlMDh4XG4iLCBmbGJhc2VhZGQpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgc29mICAgICAgID0gICAgICAgJTAyeFxuIiwgc29mKTsKKwlvdXQgKz0gdWhjaV9zaG93X3NjKDEsIHBvcnRzYzEsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCW91dCArPSB1aGNpX3Nob3dfc2MoMiwgcG9ydHNjMiwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IHVoY2lfc2hvd191cmJwKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYl9wcml2ICp1cmJwLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWNoYXIgKm91dCA9IGJ1ZjsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKGxlbiA8IDIwMCkKKwkJcmV0dXJuIDA7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJ1cmJfcHJpdiBbJXBdICIsIHVyYnApOworCW91dCArPSBzcHJpbnRmKG91dCwgInVyYiBbJXBdICIsIHVyYnAtPnVyYik7CisJb3V0ICs9IHNwcmludGYob3V0LCAicWggWyVwXSAiLCB1cmJwLT5xaCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiRGV2PSVkICIsIHVzYl9waXBlZGV2aWNlKHVyYnAtPnVyYi0+cGlwZSkpOworCW91dCArPSBzcHJpbnRmKG91dCwgIkVQPSV4KCVzKSAiLCB1c2JfcGlwZWVuZHBvaW50KHVyYnAtPnVyYi0+cGlwZSksICh1c2JfcGlwZWluKHVyYnAtPnVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIpKTsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYnAtPnVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6IG91dCArPSBzcHJpbnRmKG91dCwgIklTTyAiKTsgYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDogb3V0ICs9IHNwcmludGYob3V0LCAiSU5UICIpOyBicmVhazsKKwljYXNlIFBJUEVfQlVMSzogb3V0ICs9IHNwcmludGYob3V0LCAiQkxLICIpOyBicmVhazsKKwljYXNlIFBJUEVfQ09OVFJPTDogb3V0ICs9IHNwcmludGYob3V0LCAiQ1RMICIpOyBicmVhazsKKwl9CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyIsICh1cmJwLT5mc2JyID8gIkZTQlIgIiA6ICIiKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiJXMiLCAodXJicC0+ZnNicl90aW1lb3V0ID8gIkZTQlJfVE8gIiA6ICIiKSk7CisKKwlpZiAodXJicC0+dXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICJTdGF0dXM9JWQgIiwgdXJicC0+dXJiLT5zdGF0dXMpOworCS8vb3V0ICs9IHNwcmludGYob3V0LCAiSW5zZXJ0dGltZT0lbHggIix1cmJwLT5pbnNlcnR0aW1lKTsKKwkvL291dCArPSBzcHJpbnRmKG91dCwgIkZTQlJ0aW1lPSVseCAiLHVyYnAtPmZzYnJ0aW1lKTsKKworCWNvdW50ID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJnVyYnAtPnRkX2xpc3QpCisJCWNvdW50Kys7CisJb3V0ICs9IHNwcmludGYob3V0LCAiVERzPSVkICIsY291bnQpOworCisJaWYgKHVyYnAtPnF1ZXVlZCkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAicXVldWVkXG4iKTsKKwllbHNlIHsKKwkJY291bnQgPSAwOworCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnVyYnAtPnF1ZXVlX2xpc3QpCisJCQljb3VudCsrOworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJxdWV1ZWQgVVJCcz0lZFxuIiwgY291bnQpOworCX0KKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X2xpc3RzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqdG1wOworCWludCBjb3VudDsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIk1haW4gbGlzdCBVUkJzOiIpOworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfbGlzdCkpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiBFbXB0eVxuIik7CisJZWxzZSB7CisJCW91dCArPSBzcHJpbnRmKG91dCwgIlxuIik7CisJCWNvdW50ID0gMDsKKwkJaGVhZCA9ICZ1aGNpLT51cmJfbGlzdDsKKwkJdG1wID0gaGVhZC0+bmV4dDsKKwkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7CisKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOworCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCQkJdG1wID0gdG1wLT5uZXh0OworCQl9CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiUmVtb3ZlIGxpc3QgVVJCczoiKTsKKwlpZiAobGlzdF9lbXB0eSgmdWhjaS0+dXJiX3JlbW92ZV9saXN0KSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKKwllbHNlIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwkJY291bnQgPSAwOworCQloZWFkID0gJnVoY2ktPnVyYl9yZW1vdmVfbGlzdDsKKwkJdG1wID0gaGVhZC0+bmV4dDsKKwkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7CisKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOworCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCQkJdG1wID0gdG1wLT5uZXh0OworCQl9CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiQ29tcGxldGUgbGlzdCBVUkJzOiIpOworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT5jb21wbGV0ZV9saXN0KSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKKwllbHNlIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwkJY291bnQgPSAwOworCQloZWFkID0gJnVoY2ktPmNvbXBsZXRlX2xpc3Q7CisJCXRtcCA9IGhlYWQtPm5leHQ7CisJCXdoaWxlICh0bXAgIT0gaGVhZCkgeworCQkJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1cmJfcHJpdiwgdXJiX2xpc3QpOworCisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICVkOiAiLCArK2NvdW50KTsKKwkJCW91dCArPSB1aGNpX3Nob3dfdXJicCh1aGNpLCB1cmJwLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKKwkJCXRtcCA9IHRtcC0+bmV4dDsKKwkJfQorCX0KKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zcHJpbnRfc2NoZWR1bGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICpvdXQgPSBidWY7CisJaW50IGksIGo7CisJc3RydWN0IHVoY2lfcWggKnFoOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpoZWFkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIkhDIHN0YXR1c1xuIik7CisJb3V0ICs9IHVoY2lfc2hvd19zdGF0dXModWhjaSwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJGcmFtZSBMaXN0XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1GUkFNRVM7ICsraSkgeworCQlpbnQgc2hvd24gPSAwOworCQl0ZCA9IHVoY2ktPmZsLT5mcmFtZV9jcHVbaV07CisJCWlmICghdGQpCisJCQljb250aW51ZTsKKworCQlpZiAodGQtPmRtYV9oYW5kbGUgIT0gKGRtYV9hZGRyX3QpdWhjaS0+ZmwtPmZyYW1lW2ldKSB7CisJCQlzaG93X2ZyYW1lX251bSgpOworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIGZyYW1lIGxpc3QgZG9lcyBub3QgbWF0Y2ggdGQtPmRtYV9oYW5kbGUhXG4iKTsKKwkJfQorCQlzaG93X2ZyYW1lX251bSgpOworCisJCWhlYWQgPSAmdGQtPmZsX2xpc3Q7CisJCXRtcCA9IGhlYWQ7CisJCWRvIHsKKwkJCXRkID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1aGNpX3RkLCBmbF9saXN0KTsKKwkJCXRtcCA9IHRtcC0+bmV4dDsKKwkJCW91dCArPSB1aGNpX3Nob3dfdGQodGQsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQl9IHdoaWxlICh0bXAgIT0gaGVhZCk7CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiU2tlbGV0b24gUUgnc1xuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyArK2kpIHsKKwkJaW50IHNob3duID0gMDsKKworCQlxaCA9IHVoY2ktPnNrZWxxaFtpXTsKKworCQlpZiAoZGVidWcgPiAxKSB7CisJCQlzaG93X3FoX25hbWUoKTsKKwkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQl9CisKKwkJLyogTGFzdCBRSCBpcyB0aGUgVGVybWluYXRpbmcgUUgsIGl0J3MgZGlmZmVyZW50ICovCisJCWlmIChpID09IFVIQ0lfTlVNX1NLRUxRSCAtIDEpIHsKKwkJCWlmIChxaC0+bGluayAhPSBVSENJX1BUUl9URVJNKQorCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBiYW5kd2lkdGggcmVjbGFtYXRpb24gb24hXG4iKTsKKworCQkJaWYgKHFoX2VsZW1lbnQocWgpICE9IGNwdV90b19sZTMyKHVoY2ktPnRlcm1fdGQtPmRtYV9oYW5kbGUpKQorCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBza2VsX3Rlcm1fcWggZWxlbWVudCBpcyBub3Qgc2V0IHRvIHRlcm1fdGQhXG4iKTsKKworCQkJY29udGludWU7CisJCX0KKworCQlqID0gKGkgPCA3KSA/IDcgOiBpKzE7CQkvKiBOZXh0IHNrZWxldG9uICovCisJCWlmIChsaXN0X2VtcHR5KCZxaC0+bGlzdCkpIHsKKwkJCWlmIChpIDwgVUhDSV9OVU1fU0tFTFFIIC0gMSkgeworCQkJCWlmIChxaC0+bGluayAhPQorCQkJCSAgICAoY3B1X3RvX2xlMzIodWhjaS0+c2tlbHFoW2pdLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIKSkgeworCQkJCQlzaG93X3FoX25hbWUoKTsKKwkJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIHNrZWxldG9uIFFIIG5vdCBsaW5rZWQgdG8gbmV4dCBza2VsZXRvbiBRSCFcbiIpOworCQkJCX0KKwkJCX0KKworCQkJY29udGludWU7CisJCX0KKworCQlzaG93X3FoX25hbWUoKTsKKworCQloZWFkID0gJnFoLT5saXN0OworCQl0bXAgPSBoZWFkLT5uZXh0OworCisJCXdoaWxlICh0bXAgIT0gaGVhZCkgeworCQkJcWggPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfcWgsIGxpc3QpOworCisJCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQl9CisKKwkJaWYgKGkgPCBVSENJX05VTV9TS0VMUUggLSAxKSB7CisJCQlpZiAocWgtPmxpbmsgIT0KKwkJCSAgICAoY3B1X3RvX2xlMzIodWhjaS0+c2tlbHFoW2pdLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIKSkKKwkJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgbGFzdCBRSCBub3QgbGlua2VkIHRvIG5leHQgc2tlbGV0b24hXG4iKTsKKwkJfQorCX0KKworCWlmIChkZWJ1ZyA+IDIpCisJCW91dCArPSB1aGNpX3Nob3dfbGlzdHModWhjaSwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCisjZGVmaW5lIE1BWF9PVVRQVVQJKDY0ICogMTAyNCkKKworc3RydWN0IHVoY2lfZGVidWcgeworCWludCBzaXplOworCWNoYXIgKmRhdGE7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpOworfTsKKworc3RhdGljIGludCB1aGNpX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzdHJ1Y3QgdWhjaV9kZWJ1ZyAqdXA7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlsb2NrX2tlcm5lbCgpOworCXVwID0ga21hbGxvYyhzaXplb2YoKnVwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cCkKKwkJZ290byBvdXQ7CisKKwl1cC0+ZGF0YSA9IGttYWxsb2MoTUFYX09VVFBVVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cC0+ZGF0YSkgeworCQlrZnJlZSh1cCk7CisJCWdvdG8gb3V0OworCX0KKworCXVwLT5zaXplID0gdWhjaV9zcHJpbnRfc2NoZWR1bGUodWhjaSwgdXAtPmRhdGEsIE1BWF9PVVRQVVQpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdXA7CisKKwlyZXQgPSAwOworb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9mZl90IHVoY2lfZGVidWdfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpCit7CisJc3RydWN0IHVoY2lfZGVidWcgKnVwOworCWxvZmZfdCBuZXcgPSAtMTsKKworCWxvY2tfa2VybmVsKCk7CisJdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKHdoZW5jZSkgeworCWNhc2UgMDoKKwkJbmV3ID0gb2ZmOworCQlicmVhazsKKwljYXNlIDE6CisJCW5ldyA9IGZpbGUtPmZfcG9zICsgb2ZmOworCQlicmVhazsKKwl9CisJaWYgKG5ldyA8IDAgfHwgbmV3ID4gdXAtPnNpemUpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAoZmlsZS0+Zl9wb3MgPSBuZXcpOworfQorCitzdGF0aWMgc3NpemVfdCB1aGNpX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1aGNpX2RlYnVnICp1cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIHVwLT5kYXRhLCB1cC0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9kZWJ1Z19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1aGNpX2RlYnVnICp1cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWtmcmVlKHVwLT5kYXRhKTsKKwlrZnJlZSh1cCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWhjaV9kZWJ1Z19vcGVyYXRpb25zID0geworCS5vcGVuID0JCXVoY2lfZGVidWdfb3BlbiwKKwkubGxzZWVrID0JdWhjaV9kZWJ1Z19sc2VlaywKKwkucmVhZCA9CQl1aGNpX2RlYnVnX3JlYWQsCisJLnJlbGVhc2UgPQl1aGNpX2RlYnVnX3JlbGVhc2UsCit9OworCisjZWxzZQkvKiBDT05GSUdfREVCVUdfRlMgKi8KKworI2RlZmluZSB1aGNpX2RlYnVnX29wZXJhdGlvbnMgKCogKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKikgTlVMTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0YTFhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtMCwwICsxLDkxOSBAQAorLyoKKyAqIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciBmb3IgVVNCLgorICoKKyAqIE1haW50YWluZXI6IEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+CisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMiBKb2hhbm5lcyBFcmRmZWx0LCBqb2hhbm5lc0BlcmRmZWx0LmNvbQorICogKEMpIENvcHlyaWdodCAxOTk5IFJhbmR5IER1bmxhcAorICogKEMpIENvcHlyaWdodCAxOTk5IEdlb3JnIEFjaGVyLCBhY2hlckBpbi50dW0uZGUKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBEZXRpIEZsaWVnbCwgZGV0aUBmbGllZ2wuZGUKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIsIHdlaXNzZ0B2aWVubmEuYXQKKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIChwb3J0IG9mIG5ldyBQQ0kgaW50ZXJmYWNlCisgKiAgICAgICAgICAgICAgIHN1cHBvcnQgZnJvbSB1c2Itb2hjaS5jIGJ5IEFkYW0gUmljaHRlciwgYWRhbUB5Z2dkcmFzaWwuY29tKS4KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoIChmcm9tIHVzYi1vaGNpLmMpCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQorICoKKyAqIEludGVsIGRvY3VtZW50cyB0aGlzIGZhaXJseSB3ZWxsLCBhbmQgYXMgZmFyIGFzIEkga25vdyB0aGVyZQorICogYXJlIG5vIHJveWFsdGllcyBvciBhbnl0aGluZyBsaWtlIHRoYXQsIGJ1dCBldmVuIHNvIHRoZXJlIGFyZQorICogcGVvcGxlIHdobyBkZWNpZGVkIHRoYXQgdGhleSB3YW50IHRvIGRvIHRoZSBzYW1lIHRoaW5nIGluIGEKKyAqIGNvbXBsZXRlbHkgZGlmZmVyZW50IHdheS4KKyAqCisgKiBXQVJOSU5HISBUaGUgVVNCIGRvY3VtZW50YXRpb24gaXMgZG93bnJpZ2h0IGV2aWwuIE1vc3Qgb2YgaXQKKyAqIGlzIGp1c3QgY3JhcCwgd3JpdHRlbiBieSBhIGNvbW1pdHRlZS4gWW91J3JlIGJldHRlciBvZmYgaWdub3JpbmcKKyAqIG1vc3Qgb2YgaXQsIHRoZSBpbXBvcnRhbnQgc3R1ZmYgaXM6CisgKiAgLSB0aGUgbG93LWxldmVsIHByb3RvY29sIChmYWlybHkgc2ltcGxlIGJ1dCBsb3RzIG9mIHNtYWxsIGRldGFpbHMpCisgKiAgLSB3b3JraW5nIGFyb3VuZCB0aGUgaG9ycmlkbmVzcyBvZiB0aGUgcmVzdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZWxzZQorI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisjaW5jbHVkZSAidWhjaS1oY2QuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTGludXMgJ0Zyb2RvIFJhYmJpdCcgVG9ydmFsZHMsIEpvaGFubmVzIEVyZGZlbHQsIFwKK1JhbmR5IER1bmxhcCwgR2VvcmcgQWNoZXIsIERldGkgRmxpZWdsLCBUaG9tYXMgU2FpbGVyLCBSb21hbiBXZWlzc2dhZXJiZXIsIFwKK0FsYW4gU3Rlcm4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIgorCisvKgorICogZGVidWcgPSAwLCBubyBkZWJ1Z2dpbmcgbWVzc2FnZXMKKyAqIGRlYnVnID0gMSwgZHVtcCBmYWlsZWQgVVJCJ3MgZXhjZXB0IGZvciBzdGFsbHMKKyAqIGRlYnVnID0gMiwgZHVtcCBhbGwgZmFpbGVkIFVSQidzIChpbmNsdWRpbmcgc3RhbGxzKQorICogICAgICAgICAgICBzaG93IGFsbCBxdWV1ZXMgaW4gL2RlYnVnL3VoY2kvW3BjaV9hZGRyXQorICogZGVidWcgPSAzLCBzaG93IGFsbCBURCdzIGluIFVSQidzIHdoZW4gZHVtcGluZworICovCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworI2VuZGlmCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIik7CitzdGF0aWMgY2hhciAqZXJyYnVmOworI2RlZmluZSBFUlJCVUZfTEVOICAgICgzMiAqIDEwMjQpCisKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKnVoY2lfdXBfY2FjaGVwOwkvKiB1cmJfcHJpdiAqLworCitzdGF0aWMgdm9pZCB1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworc3RhdGljIHZvaWQgaGNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IHVoY2lfaGNkICp1aGNpKTsKKworLyogSWYgYSB0cmFuc2ZlciBpcyBzdGlsbCBhY3RpdmUgYWZ0ZXIgdGhpcyBtdWNoIHRpbWUsIHR1cm4gb2ZmIEZTQlIgKi8KKyNkZWZpbmUgSURMRV9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoNTApCisjZGVmaW5lIEZTQlJfREVMQVkJbXNlY3NfdG9famlmZmllcyg1MCkKKworLyogV2hlbiB3ZSB0aW1lb3V0IGFuIGlkbGUgdHJhbnNmZXIgZm9yIEZTQlIsIHdlJ2xsIHN3aXRjaCBpdCBvdmVyIHRvICovCisvKiBkZXB0aCBmaXJzdCB0cmF2ZXJzYWwuIFdlJ2xsIGRvIGl0IGluIGdyb3VwcyBvZiB0aGlzIG51bWJlciBvZiBURCdzICovCisvKiB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBob2cgYWxsIG9mIHRoZSBiYW5kd2lkdGggKi8KKyNkZWZpbmUgREVQVEhfSU5URVJWQUwgNQorCisjaW5jbHVkZSAidWhjaS1odWIuYyIKKyNpbmNsdWRlICJ1aGNpLWRlYnVnLmMiCisjaW5jbHVkZSAidWhjaS1xLmMiCisKK3N0YXRpYyBpbnQgaW5pdF9zdGFsbF90aW1lcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworc3RhdGljIHZvaWQgc3RhbGxfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IChzdHJ1Y3QgdXNiX2hjZCAqKXB0cjsKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXN0cnVjdCB1cmJfcHJpdiAqdXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh1cCwgJnVoY2ktPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1ID0gdXAtPnVyYjsKKworCQlzcGluX2xvY2soJnUtPmxvY2spOworCisJCS8qIENoZWNrIGlmIHRoZSBGU0JSIHRpbWVkIG91dCAqLworCQlpZiAodXAtPmZzYnIgJiYgIXVwLT5mc2JyX3RpbWVvdXQgJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB1cC0+ZnNicnRpbWUgKyBJRExFX1RJTUVPVVQpKQorCQkJdWhjaV9mc2JyX3RpbWVvdXQodWhjaSwgdSk7CisKKwkJc3Bpbl91bmxvY2soJnUtPmxvY2spOworCX0KKworCS8qIFJlYWxseSBkaXNhYmxlIEZTQlIgKi8KKwlpZiAoIXVoY2ktPmZzYnIgJiYgdWhjaS0+ZnNicnRpbWVvdXQgJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5mc2JydGltZW91dCkpIHsKKwkJdWhjaS0+ZnNicnRpbWVvdXQgPSAwOworCQl1aGNpLT5za2VsX3Rlcm1fcWgtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCX0KKworCS8qIFBvbGwgZm9yIGFuZCBwZXJmb3JtIHN0YXRlIHRyYW5zaXRpb25zICovCisJaGNfc3RhdGVfdHJhbnNpdGlvbnModWhjaSk7CisJaWYgKHVubGlrZWx5KHVoY2ktPnN1c3BlbmRlZF9wb3J0cyAmJiB1aGNpLT5zdGF0ZSAhPSBVSENJX1NVU1BFTkRFRCkpCisJCXVoY2lfY2hlY2tfcG9ydHModWhjaSk7CisKKwlpbml0X3N0YWxsX3RpbWVyKGhjZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGluaXRfc3RhbGxfdGltZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJaW5pdF90aW1lcigmdWhjaS0+c3RhbGxfdGltZXIpOworCXVoY2ktPnN0YWxsX3RpbWVyLmZ1bmN0aW9uID0gc3RhbGxfY2FsbGJhY2s7CisJdWhjaS0+c3RhbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhjZDsKKwl1aGNpLT5zdGFsbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKTsKKwlhZGRfdGltZXIoJnVoY2ktPnN0YWxsX3RpbWVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdWhjaV9pcnEoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwl1bnNpZ25lZCBsb25nIGlvX2FkZHIgPSB1aGNpLT5pb19hZGRyOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKworCS8qCisJICogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cywgYW5kIHdyaXRlIGl0IGJhY2sgdG8gY2xlYXIgdGhlCisJICogaW50ZXJydXB0IGNhdXNlLiAgQ29udHJhcnkgdG8gdGhlIFVIQ0kgc3BlY2lmaWNhdGlvbiwgdGhlCisJICogIkhDIEhhbHRlZCIgc3RhdHVzIGJpdCBpcyBwZXJzaXN0ZW50OiBpdCBpcyBSTywgbm90IFIvV0MuCisJICovCisJc3RhdHVzID0gaW53KGlvX2FkZHIgKyBVU0JTVFMpOworCWlmICghKHN0YXR1cyAmIH5VU0JTVFNfSENIKSkJLyogc2hhcmVkIGludGVycnVwdCwgbm90IG1pbmUgKi8KKwkJcmV0dXJuIElSUV9OT05FOworCW91dHcoc3RhdHVzLCBpb19hZGRyICsgVVNCU1RTKTsJCS8qIENsZWFyIGl0ICovCisKKwlpZiAoc3RhdHVzICYgfihVU0JTVFNfVVNCSU5UIHwgVVNCU1RTX0VSUk9SIHwgVVNCU1RTX1JEKSkgeworCQlpZiAoc3RhdHVzICYgVVNCU1RTX0hTRSkKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJob3N0IHN5c3RlbSBlcnJvciwgIgorCQkJCQkiUENJIHByb2JsZW1zP1xuIik7CisJCWlmIChzdGF0dXMgJiBVU0JTVFNfSENQRSkKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJob3N0IGNvbnRyb2xsZXIgcHJvY2VzcyAiCisJCQkJCSJlcnJvciwgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCFcbiIpOworCQlpZiAoKHN0YXR1cyAmIFVTQlNUU19IQ0gpICYmIHVoY2ktPnN0YXRlID4gMCkgeworCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImhvc3QgY29udHJvbGxlciBoYWx0ZWQsICIKKwkJCQkJInZlcnkgYmFkIVxuIik7CisJCQkvKiBGSVhNRTogUmVzZXQgdGhlIGNvbnRyb2xsZXIsIGZpeCB0aGUgb2ZmZW5kaW5nIFREICovCisJCX0KKwl9CisKKwlpZiAoc3RhdHVzICYgVVNCU1RTX1JEKQorCQl1aGNpLT5yZXN1bWVfZGV0ZWN0ID0gMTsKKworCXNwaW5fbG9jaygmdWhjaS0+bG9jayk7CisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIHJlZ3MpOworCXNwaW5fdW5sb2NrKCZ1aGNpLT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisKKwkvKiBUdXJuIG9mZiBQSVJRLCBTTUksIGFuZCBhbGwgaW50ZXJydXB0cy4gIFRoaXMgYWxzbyB0dXJucyBvZmYKKwkgKiB0aGUgQklPUydzIFVTQiBMZWdhY3kgU3VwcG9ydC4KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwgMCk7CisJb3V0dygwLCB1aGNpLT5pb19hZGRyICsgVVNCSU5UUik7CisKKwkvKiBHbG9iYWwgcmVzZXQgZm9yIDUwbXMgKi8KKwl1aGNpLT5zdGF0ZSA9IFVIQ0lfUkVTRVQ7CisJb3V0dyhVU0JDTURfR1JFU0VULCBpb19hZGRyICsgVVNCQ01EKTsKKwltc2xlZXAoNTApOworCW91dHcoMCwgaW9fYWRkciArIFVTQkNNRCk7CisKKwkvKiBBbm90aGVyIDEwbXMgZGVsYXkgKi8KKwltc2xlZXAoMTApOworCXVoY2ktPnJlc3VtZV9kZXRlY3QgPSAwOworCXVoY2ktPmlzX3N0b3BwZWQgPSBVSENJX0lTX1NUT1BQRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHN1c3BlbmRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisKKwlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJdWhjaS0+c3RhdGUgPSBVSENJX1NVU1BFTkRFRDsKKwl1aGNpLT5yZXN1bWVfZGV0ZWN0ID0gMDsKKwlvdXR3KFVTQkNNRF9FR1NNLCBpb19hZGRyICsgVVNCQ01EKTsKKworCS8qIEZJWE1FOiBXYWl0IGZvciB0aGUgY29udHJvbGxlciB0byBhY3R1YWxseSBzdG9wICovCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJdWhjaS0+aXNfc3RvcHBlZCA9IFVIQ0lfSVNfU1RPUFBFRDsKKworCXVoY2lfc2Nhbl9zY2hlZHVsZSh1aGNpLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgd2FrZXVwX2hjKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2FkZHIgPSB1aGNpLT5pb19hZGRyOworCisJc3dpdGNoICh1aGNpLT5zdGF0ZSkgeworCQljYXNlIFVIQ0lfU1VTUEVOREVEOgkJLyogU3RhcnQgdGhlIHJlc3VtZSAqLworCQkJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCQkvKiBHbG9iYWwgcmVzdW1lIGZvciA+PSAyMG1zICovCisJCQlvdXR3KFVTQkNNRF9GR1IgfCBVU0JDTURfRUdTTSwgaW9fYWRkciArIFVTQkNNRCk7CisJCQl1aGNpLT5zdGF0ZSA9IFVIQ0lfUkVTVU1JTkdfMTsKKwkJCXVoY2ktPnN0YXRlX2VuZCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCXVoY2ktPmlzX3N0b3BwZWQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBVSENJX1JFU1VNSU5HXzE6CQkvKiBFbmQgZ2xvYmFsIHJlc3VtZSAqLworCQkJdWhjaS0+c3RhdGUgPSBVSENJX1JFU1VNSU5HXzI7CisJCQlvdXR3KDAsIGlvX2FkZHIgKyBVU0JDTUQpOworCQkJLyogRmFsbHMgdGhyb3VnaCAqLworCisJCWNhc2UgVUhDSV9SRVNVTUlOR18yOgkJLyogV2FpdCBmb3IgRU9QIHRvIGJlIHNlbnQgKi8KKwkJCWlmIChpbncoaW9fYWRkciArIFVTQkNNRCkgJiBVU0JDTURfRkdSKQorCQkJCWJyZWFrOworCisJCQkvKiBSdW4gZm9yIGF0IGxlYXN0IDEgc2Vjb25kLCBhbmQKKwkJCSAqIG1hcmsgaXQgY29uZmlndXJlZCB3aXRoIGEgNjQtYnl0ZSBtYXggcGFja2V0ICovCisJCQl1aGNpLT5zdGF0ZSA9IFVIQ0lfUlVOTklOR19HUkFDRTsKKwkJCXVoY2ktPnN0YXRlX2VuZCA9IGppZmZpZXMgKyBIWjsKKwkJCW91dHcoVVNCQ01EX1JTIHwgVVNCQ01EX0NGIHwgVVNCQ01EX01BWFAsCisJCQkJCWlvX2FkZHIgKyBVU0JDTUQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVSENJX1JVTk5JTkdfR1JBQ0U6CS8qIE5vdyBhbGxvd2VkIHRvIHN1c3BlbmQgKi8KKwkJCXVoY2ktPnN0YXRlID0gVUhDSV9SVU5OSU5HOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBwb3J0c19hY3RpdmUoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJaW50IGNvbm5lY3Rpb24gPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHVoY2ktPnJoX251bXBvcnRzOyBpKyspCisJCWNvbm5lY3Rpb24gfD0gKGludyhpb19hZGRyICsgVVNCUE9SVFNDMSArIGkgKiAyKSAmIFVTQlBPUlRTQ19DQ1MpOworCisJcmV0dXJuIGNvbm5lY3Rpb247Cit9CisKK3N0YXRpYyBpbnQgc3VzcGVuZF9hbGxvd2VkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2FkZHIgPSB1aGNpLT5pb19hZGRyOworCWludCBpOworCisJaWYgKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkKKwkJcmV0dXJuIDE7CisKKwkvKiBTb21lIG9mIEludGVsJ3MgVVNCIGNvbnRyb2xsZXJzIGhhdmUgYSBidWcgdGhhdCBjYXVzZXMgZmFsc2UKKwkgKiByZXN1bWUgaW5kaWNhdGlvbnMgaWYgYW55IHBvcnQgaGFzIGFuIG92ZXIgY3VycmVudCBjb25kaXRpb24uCisJICogVG8gcHJldmVudCBwcm9ibGVtcywgd2Ugd2lsbCBub3QgYWxsb3cgYSBnbG9iYWwgc3VzcGVuZCBpZgorCSAqIGFueSBwb3J0cyBhcmUgT0MuCisJICoKKwkgKiBTb21lIG1vdGhlcmJvYXJkcyB1c2luZyBJbnRlbCdzIGNoaXBzZXRzIChidXQgbm90IHVzaW5nIGFsbAorCSAqIHRoZSBVU0IgcG9ydHMpIGFwcGVhciB0byBoYXJkd2lyZSB0aGUgb3ZlciBjdXJyZW50IGlucHV0cyBhY3RpdmUKKwkgKiB0byBkaXNhYmxlIHRoZSBVU0IgcG9ydHMuCisJICovCisKKwkvKiBjaGVjayBmb3Igb3ZlciBjdXJyZW50IGNvbmRpdGlvbiBvbiBhbnkgcG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCB1aGNpLT5yaF9udW1wb3J0czsgaSsrKSB7CisJCWlmIChpbncoaW9fYWRkciArIFVTQlBPUlRTQzEgKyBpICogMikgJiBVU0JQT1JUU0NfT0MpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaGNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXN3aXRjaCAodWhjaS0+c3RhdGUpIHsKKwkJY2FzZSBVSENJX1JVTk5JTkc6CisKKwkJCS8qIGdsb2JhbCBzdXNwZW5kIGlmIG5vdGhpbmcgY29ubmVjdGVkIGZvciAxIHNlY29uZCAqLworCQkJaWYgKCFwb3J0c19hY3RpdmUodWhjaSkgJiYgc3VzcGVuZF9hbGxvd2VkKHVoY2kpKSB7CisJCQkJdWhjaS0+c3RhdGUgPSBVSENJX1NVU1BFTkRJTkdfR1JBQ0U7CisJCQkJdWhjaS0+c3RhdGVfZW5kID0gamlmZmllcyArIEhaOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBVSENJX1NVU1BFTkRJTkdfR1JBQ0U6CisJCQlpZiAocG9ydHNfYWN0aXZlKHVoY2kpKQorCQkJCXVoY2ktPnN0YXRlID0gVUhDSV9SVU5OSU5HOworCQkJZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5zdGF0ZV9lbmQpKQorCQkJCXN1c3BlbmRfaGModWhjaSk7CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfU1VTUEVOREVEOgorCisJCQkvKiB3YWtldXAgaWYgcmVxdWVzdGVkIGJ5IGEgZGV2aWNlICovCisJCQlpZiAodWhjaS0+cmVzdW1lX2RldGVjdCkKKwkJCQl3YWtldXBfaGModWhjaSk7CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfUkVTVU1JTkdfMToKKwkJY2FzZSBVSENJX1JFU1VNSU5HXzI6CisJCWNhc2UgVUhDSV9SVU5OSU5HX0dSQUNFOgorCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdWhjaS0+c3RhdGVfZW5kKSkKKwkJCQl3YWtldXBfaGModWhjaSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogU3RvcmUgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyIGluIHVoY2ktPmZyYW1lX251bWJlciBpZiB0aGUgY29udHJvbGxlcgorICogaXMgcnVubm5pbmcKKyAqLworc3RhdGljIHZvaWQgdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCWlmICghdWhjaS0+aXNfc3RvcHBlZCkKKwkJdWhjaS0+ZnJhbWVfbnVtYmVyID0gaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JGUk5VTSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJaW50IHRpbWVvdXQgPSAxMDsKKworCS8qCisJICogUmVzZXQgdGhlIEhDIC0gdGhpcyB3aWxsIGZvcmNlIHVzIHRvIGdldCBhCisJICogbmV3IG5vdGlmaWNhdGlvbiBvZiBhbnkgYWxyZWFkeSBjb25uZWN0ZWQKKwkgKiBwb3J0cyBkdWUgdG8gdGhlIHZpcnR1YWwgZGlzY29ubmVjdCB0aGF0IGl0CisJICogaW1wbGllcy4KKwkgKi8KKwlvdXR3KFVTQkNNRF9IQ1JFU0VULCBpb19hZGRyICsgVVNCQ01EKTsKKwl3aGlsZSAoaW53KGlvX2FkZHIgKyBVU0JDTUQpICYgVVNCQ01EX0hDUkVTRVQpIHsKKwkJaWYgKC0tdGltZW91dCA8IDApIHsKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJVU0JDTURfSENSRVNFVCB0aW1lZCBvdXQhXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCW1zbGVlcCgxKTsKKwl9CisKKwkvKiBNYXJrIGNvbnRyb2xsZXIgYXMgcnVubmluZyBiZWZvcmUgd2UgZW5hYmxlIGludGVycnVwdHMgKi8KKwl1aGNpX3RvX2hjZCh1aGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCisJLyogVHVybiBvbiBQSVJRIGFuZCBhbGwgaW50ZXJydXB0cyAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgVVNCTEVHU1VQLAorCQkJVVNCTEVHU1VQX0RFRkFVTFQpOworCW91dHcoVVNCSU5UUl9USU1FT1VUIHwgVVNCSU5UUl9SRVNVTUUgfCBVU0JJTlRSX0lPQyB8IFVTQklOVFJfU1AsCisJCWlvX2FkZHIgKyBVU0JJTlRSKTsKKworCS8qIFN0YXJ0IGF0IGZyYW1lIDAgKi8KKwlvdXR3KDAsIGlvX2FkZHIgKyBVU0JGUk5VTSk7CisJb3V0bCh1aGNpLT5mbC0+ZG1hX2hhbmRsZSwgaW9fYWRkciArIFVTQkZMQkFTRUFERCk7CisKKwkvKiBSdW4gYW5kIG1hcmsgaXQgY29uZmlndXJlZCB3aXRoIGEgNjQtYnl0ZSBtYXggcGFja2V0ICovCisJdWhjaS0+c3RhdGUgPSBVSENJX1JVTk5JTkdfR1JBQ0U7CisJdWhjaS0+c3RhdGVfZW5kID0gamlmZmllcyArIEhaOworCW91dHcoVVNCQ01EX1JTIHwgVVNCQ01EX0NGIHwgVVNCQ01EX01BWFAsIGlvX2FkZHIgKyBVU0JDTUQpOworCXVoY2ktPmlzX3N0b3BwZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZS1hbGxvY2F0ZSBhbGwgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfdWhjaShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyBpKyspCisJCWlmICh1aGNpLT5za2VscWhbaV0pIHsKKwkJCXVoY2lfZnJlZV9xaCh1aGNpLCB1aGNpLT5za2VscWhbaV0pOworCQkJdWhjaS0+c2tlbHFoW2ldID0gTlVMTDsKKwkJfQorCisJaWYgKHVoY2ktPnRlcm1fdGQpIHsKKwkJdWhjaV9mcmVlX3RkKHVoY2ksIHVoY2ktPnRlcm1fdGQpOworCQl1aGNpLT50ZXJtX3RkID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+cWhfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnFoX3Bvb2wpOworCQl1aGNpLT5xaF9wb29sID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+dGRfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnRkX3Bvb2wpOworCQl1aGNpLT50ZF9wb29sID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+ZmwpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQodWhjaV9kZXYodWhjaSksIHNpemVvZigqdWhjaS0+ZmwpLAorCQkJCXVoY2ktPmZsLCB1aGNpLT5mbC0+ZG1hX2hhbmRsZSk7CisJCXVoY2ktPmZsID0gTlVMTDsKKwl9CisKKwlpZiAodWhjaS0+ZGVudHJ5KSB7CisJCWRlYnVnZnNfcmVtb3ZlKHVoY2ktPmRlbnRyeSk7CisJCXVoY2ktPmRlbnRyeSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IHVoY2lfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJdWhjaS0+aW9fYWRkciA9ICh1bnNpZ25lZCBsb25nKSBoY2QtPnJzcmNfc3RhcnQ7CisKKwkvKiBLaWNrIEJJT1Mgb2ZmIHRoaXMgaGFyZHdhcmUgYW5kIHJlc2V0LCBzbyB3ZSB3b24ndCBnZXQKKwkgKiBpbnRlcnJ1cHRzIGZyb20gYW55IHByZXZpb3VzIHNldHVwLgorCSAqLworCXJlc2V0X2hjKHVoY2kpOworCXJldHVybiAwOworfQorCisvKgorICogQWxsb2NhdGUgYSBmcmFtZSBsaXN0LCBhbmQgdGhlbiBzZXR1cCB0aGUgc2tlbGV0b24KKyAqCisgKiBUaGUgaGFyZHdhcmUgZG9lc24ndCByZWFsbHkga25vdyBhbnkgZGlmZmVyZW5jZQorICogaW4gdGhlIHF1ZXVlcywgYnV0IHRoZSBvcmRlciBkb2VzIG1hdHRlciBmb3IgdGhlCisgKiBwcm90b2NvbHMgaGlnaGVyIHVwLiBUaGUgb3JkZXIgaXM6CisgKgorICogIC0gYW55IGlzb2Nocm9ub3VzIGV2ZW50cyBoYW5kbGVkIGJlZm9yZSBhbnkKKyAqICAgIG9mIHRoZSBxdWV1ZXMuIFdlIGRvbid0IGRvIHRoYXQgaGVyZSwgYmVjYXVzZQorICogICAgd2UnbGwgY3JlYXRlIHRoZSBhY3R1YWwgVEQgZW50cmllcyBvbiBkZW1hbmQuCisgKiAgLSBUaGUgZmlyc3QgcXVldWUgaXMgdGhlIGludGVycnVwdCBxdWV1ZS4KKyAqICAtIFRoZSBzZWNvbmQgcXVldWUgaXMgdGhlIGNvbnRyb2wgcXVldWUsIHNwbGl0IGludG8gbG93LSBhbmQgZnVsbC1zcGVlZAorICogIC0gVGhlIHRoaXJkIHF1ZXVlIGlzIGJ1bGsgcXVldWUuCisgKiAgLSBUaGUgZm91cnRoIHF1ZXVlIGlzIHRoZSBiYW5kd2lkdGggcmVjbGFtYXRpb24gcXVldWUsIHdoaWNoIGxvb3BzIGJhY2sKKyAqICAgIHRvIHRoZSBmdWxsLXNwZWVkIGNvbnRyb2wgcXVldWUuCisgKi8KK3N0YXRpYyBpbnQgdWhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHJldHZhbCA9IC1FQlVTWTsKKwlpbnQgaSwgcG9ydDsKKwl1bnNpZ25lZCBpb19zaXplOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlpb19zaXplID0gKHVuc2lnbmVkKSBoY2QtPnJzcmNfbGVuOworCisJZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShoY2QtPnNlbGYuYnVzX25hbWUsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCB1aGNpX2RlYnVnZnNfcm9vdCwgdWhjaSwgJnVoY2lfZGVidWdfb3BlcmF0aW9ucyk7CisJaWYgKCFkZW50cnkpIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImNvdWxkbid0IGNyZWF0ZSB1aGNpIGRlYnVnZnMgZW50cnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jcmVhdGVfZGVidWdfZW50cnk7CisJfQorCXVoY2ktPmRlbnRyeSA9IGRlbnRyeTsKKworCXVoY2ktPmZzYnIgPSAwOworCXVoY2ktPmZzYnJ0aW1lb3V0ID0gMDsKKworCXNwaW5fbG9ja19pbml0KCZ1aGNpLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnVoY2ktPnRkX3JlbW92ZV9saXN0KTsKKworCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnVoY2ktPnVyYl9saXN0KTsKKworCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT5jb21wbGV0ZV9saXN0KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVoY2ktPndhaXRxaCk7CisKKwl1aGNpLT5mbCA9IGRtYV9hbGxvY19jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwgc2l6ZW9mKCp1aGNpLT5mbCksCisJCQkmZG1hX2hhbmRsZSwgMCk7CisJaWYgKCF1aGNpLT5mbCkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGFsbG9jYXRlICIKKwkJCQkiY29uc2lzdGVudCBtZW1vcnkgZm9yIGZyYW1lIGxpc3RcbiIpOworCQlnb3RvIGVycl9hbGxvY19mbDsKKwl9CisKKwltZW1zZXQoKHZvaWQgKil1aGNpLT5mbCwgMCwgc2l6ZW9mKCp1aGNpLT5mbCkpOworCisJdWhjaS0+ZmwtPmRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlOworCisJdWhjaS0+dGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgidWhjaV90ZCIsIHVoY2lfZGV2KHVoY2kpLAorCQkJc2l6ZW9mKHN0cnVjdCB1aGNpX3RkKSwgMTYsIDApOworCWlmICghdWhjaS0+dGRfcG9vbCkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGNyZWF0ZSB0ZCBkbWFfcG9vbFxuIik7CisJCWdvdG8gZXJyX2NyZWF0ZV90ZF9wb29sOworCX0KKworCXVoY2ktPnFoX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInVoY2lfcWgiLCB1aGNpX2Rldih1aGNpKSwKKwkJCXNpemVvZihzdHJ1Y3QgdWhjaV9xaCksIDE2LCAwKTsKKwlpZiAoIXVoY2ktPnFoX3Bvb2wpIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBjcmVhdGUgcWggZG1hX3Bvb2xcbiIpOworCQlnb3RvIGVycl9jcmVhdGVfcWhfcG9vbDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSByb290IGh1YiAqLworCisJLyogVUhDSSBzcGVjcyBzYXlzIGRldmljZXMgbXVzdCBoYXZlIDIgcG9ydHMsIGJ1dCBnb2VzIG9uIHRvIHNheSAqLworCS8qICB0aGV5IG1heSBoYXZlIG1vcmUgYnV0IGdpdmUgbm8gd2F5IHRvIGRldGVybWluZSBob3cgbWFueSB0aGV5ICovCisJLyogIGhhdmUuIEhvd2V2ZXIsIGFjY29yZGluZyB0byB0aGUgVUhDSSBzcGVjLCBCaXQgNyBpcyBhbHdheXMgc2V0ICovCisJLyogIHRvIDEuIFNvIHdlIHRyeSB0byB1c2UgdGhpcyB0byBvdXIgYWR2YW50YWdlICovCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IChpb19zaXplIC0gMHgxMCkgLyAyOyBwb3J0KyspIHsKKwkJdW5zaWduZWQgaW50IHBvcnRzdGF0dXM7CisKKwkJcG9ydHN0YXR1cyA9IGludyh1aGNpLT5pb19hZGRyICsgMHgxMCArIChwb3J0ICogMikpOworCQlpZiAoIShwb3J0c3RhdHVzICYgMHgwMDgwKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoZGVidWcpCisJCWRldl9pbmZvKHVoY2lfZGV2KHVoY2kpLCAiZGV0ZWN0ZWQgJWQgcG9ydHNcbiIsIHBvcnQpOworCisJLyogVGhpcyBpcyBleHBlcmltZW50YWwgc28gYW55dGhpbmcgbGVzcyB0aGFuIDIgb3IgZ3JlYXRlciB0aGFuIDggaXMgKi8KKwkvKiAgc29tZXRoaW5nIHdlaXJkIGFuZCB3ZSdsbCBpZ25vcmUgaXQgKi8KKwlpZiAocG9ydCA8IDIgfHwgcG9ydCA+IFVIQ0lfUkhfTUFYQ0hJTEQpIHsKKwkJZGV2X2luZm8odWhjaV9kZXYodWhjaSksICJwb3J0IGNvdW50IG1pc2RldGVjdGVkPyAiCisJCQkJImZvcmNpbmcgdG8gMiBwb3J0c1xuIik7CisJCXBvcnQgPSAyOworCX0KKworCXVoY2ktPnJoX251bXBvcnRzID0gcG9ydDsKKworCXVkZXYgPSB1c2JfYWxsb2NfZGV2KE5VTEwsICZoY2QtPnNlbGYsIDApOworCWlmICghdWRldikgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGFsbG9jYXRlIHJvb3QgaHViXG4iKTsKKwkJZ290byBlcnJfYWxsb2Nfcm9vdF9odWI7CisJfQorCisJdWhjaS0+dGVybV90ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdWRldik7CisJaWYgKCF1aGNpLT50ZXJtX3RkKSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJ1bmFibGUgdG8gYWxsb2NhdGUgdGVybWluYXRpbmcgVERcbiIpOworCQlnb3RvIGVycl9hbGxvY190ZXJtX3RkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7IGkrKykgeworCQl1aGNpLT5za2VscWhbaV0gPSB1aGNpX2FsbG9jX3FoKHVoY2ksIHVkZXYpOworCQlpZiAoIXVoY2ktPnNrZWxxaFtpXSkgeworCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBhbGxvY2F0ZSBRSFxuIik7CisJCQlnb3RvIGVycl9hbGxvY19za2VscWg7CisJCX0KKwl9CisKKwkvKgorCSAqIDggSW50ZXJydXB0IHF1ZXVlczsgbGluayBhbGwgaGlnaGVyIGludCBxdWV1ZXMgdG8gaW50MSwKKwkgKiB0aGVuIGxpbmsgaW50MSB0byBjb250cm9sIGFuZCBjb250cm9sIHRvIGJ1bGsKKwkgKi8KKwl1aGNpLT5za2VsX2ludDEyOF9xaC0+bGluayA9CisJCQl1aGNpLT5za2VsX2ludDY0X3FoLT5saW5rID0KKwkJCXVoY2ktPnNrZWxfaW50MzJfcWgtPmxpbmsgPQorCQkJdWhjaS0+c2tlbF9pbnQxNl9xaC0+bGluayA9CisJCQl1aGNpLT5za2VsX2ludDhfcWgtPmxpbmsgPQorCQkJdWhjaS0+c2tlbF9pbnQ0X3FoLT5saW5rID0KKwkJCXVoY2ktPnNrZWxfaW50Ml9xaC0+bGluayA9CisJCQljcHVfdG9fbGUzMih1aGNpLT5za2VsX2ludDFfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisJdWhjaS0+c2tlbF9pbnQxX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9sc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCisJdWhjaS0+c2tlbF9sc19jb250cm9sX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9mc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCXVoY2ktPnNrZWxfZnNfY29udHJvbF9xaC0+bGluayA9IGNwdV90b19sZTMyKHVoY2ktPnNrZWxfYnVsa19xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwl1aGNpLT5za2VsX2J1bGtfcWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT5za2VsX3Rlcm1fcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisKKwkvKiBUaGlzIGR1bW15IFREIGlzIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIEludGVsIFBJSVggY29udHJvbGxlcnMgKi8KKwl1aGNpX2ZpbGxfdGQodWhjaS0+dGVybV90ZCwgMCwgKFVIQ0lfTlVMTF9EQVRBX1NJWkUgPDwgMjEpIHwKKwkJKDB4N2YgPDwgVERfVE9LRU5fREVWQUREUl9TSElGVCkgfCBVU0JfUElEX0lOLCAwKTsKKwl1aGNpLT50ZXJtX3RkLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+dGVybV90ZC0+ZG1hX2hhbmRsZSk7CisKKwl1aGNpLT5za2VsX3Rlcm1fcWgtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCXVoY2ktPnNrZWxfdGVybV9xaC0+ZWxlbWVudCA9IGNwdV90b19sZTMyKHVoY2ktPnRlcm1fdGQtPmRtYV9oYW5kbGUpOworCisJLyoKKwkgKiBGaWxsIHRoZSBmcmFtZSBsaXN0OiBtYWtlIGFsbCBlbnRyaWVzIHBvaW50IHRvIHRoZSBwcm9wZXIKKwkgKiBpbnRlcnJ1cHQgcXVldWUuCisJICoKKwkgKiBUaGUgaW50ZXJydXB0IHF1ZXVlcyB3aWxsIGJlIGludGVybGVhdmVkIGFzIGV2ZW5seSBhcyBwb3NzaWJsZS4KKwkgKiBUaGVyZSdzIG5vdCBtdWNoIHRvIGJlIGRvbmUgYWJvdXQgcGVyaW9kLTEgaW50ZXJydXB0czsgdGhleSBoYXZlCisJICogdG8gb2NjdXIgaW4gZXZlcnkgZnJhbWUuICBCdXQgd2UgY2FuIHNjaGVkdWxlIHBlcmlvZC0yIGludGVycnVwdHMKKwkgKiBpbiBvZGQtbnVtYmVyZWQgZnJhbWVzLCBwZXJpb2QtNCBpbnRlcnJ1cHRzIGluIGZyYW1lcyBjb25ncnVlbnQKKwkgKiB0byAyIChtb2QgNCksIGFuZCBzbyBvbi4gIFRoaXMgd2F5IGVhY2ggZnJhbWUgb25seSBoYXMgdHdvCisJICogaW50ZXJydXB0IFFIcywgd2hpY2ggd2lsbCBoZWxwIHNwcmVhZCBvdXQgYmFuZHdpZHRoIHV0aWxpemF0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTUZSQU1FUzsgaSsrKSB7CisJCWludCBpcnE7CisKKwkJLyoKKwkJICogZmZzIChGaW5kIEZpcnN0IGJpdCBTZXQpIGRvZXMgZXhhY3RseSB3aGF0IHdlIG5lZWQ6CisJCSAqIDEsMyw1LC4uLiAgPT4gZmZzID0gMCA9PiB1c2Ugc2tlbF9pbnQyX3FoID0gc2tlbHFoWzZdLAorCQkgKiAyLDYsMTAsLi4uID0+IGZmcyA9IDEgPT4gdXNlIHNrZWxfaW50NF9xaCA9IHNrZWxxaFs1XSwgZXRjLgorCQkgKiBmZnMgPiA2ID0+IG5vdCBvbiBhbnkgaGlnaC1wZXJpb2QgcXVldWUsIHNvIHVzZQorCQkgKglza2VsX2ludDFfcWggPSBza2VscWhbN10uCisJCSAqIEFkZCBVSENJX05VTUZSQU1FUyB0byBpbnN1cmUgYXQgbGVhc3Qgb25lIGJpdCBpcyBzZXQuCisJCSAqLworCQlpcnEgPSA2IC0gKGludCkgX19mZnMoaSArIFVIQ0lfTlVNRlJBTUVTKTsKKwkJaWYgKGlycSA8IDApCisJCQlpcnEgPSA3OworCisJCS8qIE9ubHkgcGxhY2Ugd2UgZG9uJ3QgdXNlIHRoZSBmcmFtZSBsaXN0IHJvdXRpbmVzICovCisJCXVoY2ktPmZsLT5mcmFtZVtpXSA9IFVIQ0lfUFRSX1FIIHwKKwkJCQljcHVfdG9fbGUzMih1aGNpLT5za2VscWhbaXJxXS0+ZG1hX2hhbmRsZSk7CisJfQorCisJLyoKKwkgKiBTb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhIGZ1bGwgbWIoKSB0byBlbmZvcmNlIGNvbXBsZXRpb24gb2YKKwkgKiB0aGUgbWVtb3J5IHdyaXRlcyBhYm92ZSBiZWZvcmUgdGhlIEkvTyB0cmFuc2ZlcnMgaW4gc3RhcnRfaGMoKS4KKwkgKi8KKwltYigpOworCWlmICgocmV0dmFsID0gc3RhcnRfaGModWhjaSkpICE9IDApCisJCWdvdG8gZXJyX2FsbG9jX3NrZWxxaDsKKworCWluaXRfc3RhbGxfdGltZXIoaGNkKTsKKworCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisKKwlpZiAodXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1Yih1ZGV2LCBoY2QpICE9IDApIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBzdGFydCByb290IGh1YlxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3N0YXJ0X3Jvb3RfaHViOworCX0KKworCXJldHVybiAwOworCisvKgorICogZXJyb3IgZXhpdHM6CisgKi8KK2Vycl9zdGFydF9yb290X2h1YjoKKwlyZXNldF9oYyh1aGNpKTsKKworCWRlbF90aW1lcl9zeW5jKCZ1aGNpLT5zdGFsbF90aW1lcik7CisKK2Vycl9hbGxvY19za2VscWg6CisJZm9yIChpID0gMDsgaSA8IFVIQ0lfTlVNX1NLRUxRSDsgaSsrKQorCQlpZiAodWhjaS0+c2tlbHFoW2ldKSB7CisJCQl1aGNpX2ZyZWVfcWgodWhjaSwgdWhjaS0+c2tlbHFoW2ldKTsKKwkJCXVoY2ktPnNrZWxxaFtpXSA9IE5VTEw7CisJCX0KKworCXVoY2lfZnJlZV90ZCh1aGNpLCB1aGNpLT50ZXJtX3RkKTsKKwl1aGNpLT50ZXJtX3RkID0gTlVMTDsKKworZXJyX2FsbG9jX3Rlcm1fdGQ6CisJdXNiX3B1dF9kZXYodWRldik7CisKK2Vycl9hbGxvY19yb290X2h1YjoKKwlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnFoX3Bvb2wpOworCXVoY2ktPnFoX3Bvb2wgPSBOVUxMOworCitlcnJfY3JlYXRlX3FoX3Bvb2w6CisJZG1hX3Bvb2xfZGVzdHJveSh1aGNpLT50ZF9wb29sKTsKKwl1aGNpLT50ZF9wb29sID0gTlVMTDsKKworZXJyX2NyZWF0ZV90ZF9wb29sOgorCWRtYV9mcmVlX2NvaGVyZW50KHVoY2lfZGV2KHVoY2kpLCBzaXplb2YoKnVoY2ktPmZsKSwKKwkJCXVoY2ktPmZsLCB1aGNpLT5mbC0+ZG1hX2hhbmRsZSk7CisJdWhjaS0+ZmwgPSBOVUxMOworCitlcnJfYWxsb2NfZmw6CisJZGVidWdmc19yZW1vdmUodWhjaS0+ZGVudHJ5KTsKKwl1aGNpLT5kZW50cnkgPSBOVUxMOworCitlcnJfY3JlYXRlX2RlYnVnX2VudHJ5OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwlkZWxfdGltZXJfc3luYygmdWhjaS0+c3RhbGxfdGltZXIpOworCXJlc2V0X2hjKHVoY2kpOworCisJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJCisJcmVsZWFzZV91aGNpKHVoY2kpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHVoY2lfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCisJLyogRG9uJ3QgdHJ5IHRvIHN1c3BlbmQgYnJva2VuIG1vdGhlcmJvYXJkcywgcmVzZXQgaW5zdGVhZCAqLworCWlmIChzdXNwZW5kX2FsbG93ZWQodWhjaSkpCisJCXN1c3BlbmRfaGModWhjaSk7CisJZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJCXJlc2V0X2hjKHVoY2kpOworCQlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwkJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCWludCByYzsKKworCXBjaV9zZXRfbWFzdGVyKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpKTsKKworCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCisJaWYgKHVoY2ktPnN0YXRlID09IFVIQ0lfU1VTUEVOREVEKSB7CisKKwkJLyoKKwkJICogU29tZSBzeXN0ZW1zIGRvbid0IG1haW50YWluIHRoZSBVSENJIHJlZ2lzdGVyIHZhbHVlcworCQkgKiBkdXJpbmcgYSBQTSBzdXNwZW5kL3Jlc3VtZSBjeWNsZSwgc28gcmVpbml0aWFsaXplCisJCSAqIHRoZSBGcmFtZSBOdW1iZXIsIEZyYW1lbGlzdCBCYXNlIEFkZHJlc3MsIEludGVycnVwdAorCQkgKiBFbmFibGUsIGFuZCBMZWdhY3kgU3VwcG9ydCByZWdpc3RlcnMuCisJCSAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwKKwkJCQkwKTsKKwkJb3V0dyh1aGNpLT5mcmFtZV9udW1iZXIsIHVoY2ktPmlvX2FkZHIgKyBVU0JGUk5VTSk7CisJCW91dGwodWhjaS0+ZmwtPmRtYV9oYW5kbGUsIHVoY2ktPmlvX2FkZHIgKyBVU0JGTEJBU0VBREQpOworCQlvdXR3KFVTQklOVFJfVElNRU9VVCB8IFVTQklOVFJfUkVTVU1FIHwgVVNCSU5UUl9JT0MgfAorCQkJCVVTQklOVFJfU1AsIHVoY2ktPmlvX2FkZHIgKyBVU0JJTlRSKTsKKwkJdWhjaS0+cmVzdW1lX2RldGVjdCA9IDE7CisJCXBjaV93cml0ZV9jb25maWdfd29yZCh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgVVNCTEVHU1VQLAorCQkJCVVTQkxFR1NVUF9ERUZBVUxUKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCQlyZXNldF9oYyh1aGNpKTsKKwkJaWYgKChyYyA9IHN0YXJ0X2hjKHVoY2kpKSAhPSAwKQorCQkJcmV0dXJuIHJjOworCQlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwl9CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIFdhaXQgdW50aWwgYWxsIHRoZSBVUkJzIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlL2VuZHBvaW50IGFyZSBnb25lICovCitzdGF0aWMgdm9pZCB1aGNpX2hjZF9lbmRwb2ludF9kaXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1aGNpLT53YWl0cWgsIGxpc3RfZW1wdHkoJmVwLT51cmJfbGlzdCkpOworfQorCitzdGF0aWMgaW50IHVoY2lfaGNkX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCWludCBmcmFtZV9udW1iZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE1pbmltaXplIGxhdGVuY3kgYnkgYXZvaWRpbmcgdGhlIHNwaW5sb2NrICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJtYigpOworCWZyYW1lX251bWJlciA9ICh1aGNpLT5pc19zdG9wcGVkID8gdWhjaS0+ZnJhbWVfbnVtYmVyIDoKKwkJCWludyh1aGNpLT5pb19hZGRyICsgVVNCRlJOVU0pKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGZyYW1lX251bWJlcjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaGNkX25hbWVbXSA9ICJ1aGNpX2hjZCI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIHVoY2lfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJVSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IHVoY2lfaGNkKSwKKworCS8qIEdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZSAqLworCS5pcnEgPQkJCXVoY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEsCisKKwkvKiBCYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucyAqLworCS5yZXNldCA9CQl1aGNpX3Jlc2V0LAorCS5zdGFydCA9CQl1aGNpX3N0YXJ0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0JCXVoY2lfc3VzcGVuZCwKKwkucmVzdW1lID0JCXVoY2lfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCXVoY2lfc3RvcCwKKworCS51cmJfZW5xdWV1ZSA9CQl1aGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQl1aGNpX3VyYl9kZXF1ZXVlLAorCisJLmVuZHBvaW50X2Rpc2FibGUgPQl1aGNpX2hjZF9lbmRwb2ludF9kaXNhYmxlLAorCS5nZXRfZnJhbWVfbnVtYmVyID0JdWhjaV9oY2RfZ2V0X2ZyYW1lX251bWJlciwKKworCS5odWJfc3RhdHVzX2RhdGEgPQl1aGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJdWhjaV9odWJfY29udHJvbCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1aGNpX3BjaV9pZHNbXSA9IHsgeworCS8qIGhhbmRsZSBhbnkgVVNCIFVIQ0kgY29udHJvbGxlciAqLworCVBDSV9ERVZJQ0VfQ0xBU1MoKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4MDApLCB+MCksCisJLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZ1aGNpX2RyaXZlciwKKwl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdWhjaV9wY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHVoY2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9CQkoY2hhciAqKWhjZF9uYW1lLAorCS5pZF90YWJsZSA9CXVoY2lfcGNpX2lkcywKKworCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCisKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKKyNlbmRpZgkvKiBQTSAqLworfTsKKyAKK3N0YXRpYyBpbnQgX19pbml0IHVoY2lfaGNkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChkZWJ1ZykgeworCQllcnJidWYgPSBrbWFsbG9jKEVSUkJVRl9MRU4sIEdGUF9LRVJORUwpOworCQlpZiAoIWVycmJ1ZikKKwkJCWdvdG8gZXJyYnVmX2ZhaWxlZDsKKwl9CisKKwl1aGNpX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigidWhjaSIsIE5VTEwpOworCWlmICghdWhjaV9kZWJ1Z2ZzX3Jvb3QpCisJCWdvdG8gZGVidWdfZmFpbGVkOworCisJdWhjaV91cF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidWhjaV91cmJfcHJpdiIsCisJCXNpemVvZihzdHJ1Y3QgdXJiX3ByaXYpLCAwLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIXVoY2lfdXBfY2FjaGVwKQorCQlnb3RvIHVwX2ZhaWxlZDsKKworCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnVoY2lfcGNpX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBpbml0X2ZhaWxlZDsKKworCXJldHVybiAwOworCitpbml0X2ZhaWxlZDoKKwlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKSkKKwkJd2Fybigibm90IGFsbCB1cmJfcHJpdidzIHdlcmUgZnJlZWQhIik7CisKK3VwX2ZhaWxlZDoKKwlkZWJ1Z2ZzX3JlbW92ZSh1aGNpX2RlYnVnZnNfcm9vdCk7CisKK2RlYnVnX2ZhaWxlZDoKKwlpZiAoZXJyYnVmKQorCQlrZnJlZShlcnJidWYpOworCitlcnJidWZfZmFpbGVkOgorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVoY2lfaGNkX2NsZWFudXAodm9pZCkgCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ1aGNpX3BjaV9kcml2ZXIpOworCQorCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3kodWhjaV91cF9jYWNoZXApKQorCQl3YXJuKCJub3QgYWxsIHVyYl9wcml2J3Mgd2VyZSBmcmVlZCEiKTsKKworCWRlYnVnZnNfcmVtb3ZlKHVoY2lfZGVidWdmc19yb290KTsKKworCWlmIChlcnJidWYpCisJCWtmcmVlKGVycmJ1Zik7Cit9CisKK21vZHVsZV9pbml0KHVoY2lfaGNkX2luaXQpOworbW9kdWxlX2V4aXQodWhjaV9oY2RfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjU1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTAsMCArMSw0NTQgQEAKKyNpZm5kZWYgX19MSU5VWF9VSENJX0hDRF9ICisjZGVmaW5lIF9fTElOVVhfVUhDSV9IQ0RfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIHVzYl9wYWNrZXRpZChwaXBlKQkodXNiX3BpcGVpbihwaXBlKSA/IFVTQl9QSURfSU4gOiBVU0JfUElEX09VVCkKKyNkZWZpbmUgUElQRV9ERVZFUF9NQVNLCQkweDAwMDdmZjAwCisKKy8qCisgKiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMKKyAqLworCisvKiBDb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQkNNRAkJMAorI2RlZmluZSAgIFVTQkNNRF9SUwkJMHgwMDAxCS8qIFJ1bi9TdG9wICovCisjZGVmaW5lICAgVVNCQ01EX0hDUkVTRVQJMHgwMDAyCS8qIEhvc3QgcmVzZXQgKi8KKyNkZWZpbmUgICBVU0JDTURfR1JFU0VUCQkweDAwMDQJLyogR2xvYmFsIHJlc2V0ICovCisjZGVmaW5lICAgVVNCQ01EX0VHU00JCTB4MDAwOAkvKiBHbG9iYWwgU3VzcGVuZCBNb2RlICovCisjZGVmaW5lICAgVVNCQ01EX0ZHUgkJMHgwMDEwCS8qIEZvcmNlIEdsb2JhbCBSZXN1bWUgKi8KKyNkZWZpbmUgICBVU0JDTURfU1dEQkcJCTB4MDAyMAkvKiBTVyBEZWJ1ZyBtb2RlICovCisjZGVmaW5lICAgVVNCQ01EX0NGCQkweDAwNDAJLyogQ29uZmlnIEZsYWcgKHN3IG9ubHkpICovCisjZGVmaW5lICAgVVNCQ01EX01BWFAJCTB4MDA4MAkvKiBNYXggUGFja2V0ICgwID0gMzIsIDEgPSA2NCkgKi8KKworLyogU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQlNUUwkJMgorI2RlZmluZSAgIFVTQlNUU19VU0JJTlQJCTB4MDAwMQkvKiBJbnRlcnJ1cHQgZHVlIHRvIElPQyAqLworI2RlZmluZSAgIFVTQlNUU19FUlJPUgkJMHgwMDAyCS8qIEludGVycnVwdCBkdWUgdG8gZXJyb3IgKi8KKyNkZWZpbmUgICBVU0JTVFNfUkQJCTB4MDAwNAkvKiBSZXN1bWUgRGV0ZWN0ICovCisjZGVmaW5lICAgVVNCU1RTX0hTRQkJMHgwMDA4CS8qIEhvc3QgU3lzdGVtIEVycm9yIC0gYmFzaWNhbGx5IFBDSSBwcm9ibGVtcyAqLworI2RlZmluZSAgIFVTQlNUU19IQ1BFCQkweDAwMTAJLyogSG9zdCBDb250cm9sbGVyIFByb2Nlc3MgRXJyb3IgLSB0aGUgc2NyaXB0cyB3ZXJlIGJ1Z2d5ICovCisjZGVmaW5lICAgVVNCU1RTX0hDSAkJMHgwMDIwCS8qIEhDIEhhbHRlZCAqLworCisvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQklOVFIJCTQKKyNkZWZpbmUgICBVU0JJTlRSX1RJTUVPVVQJMHgwMDAxCS8qIFRpbWVvdXQvQ1JDIGVycm9yIGVuYWJsZSAqLworI2RlZmluZSAgIFVTQklOVFJfUkVTVU1FCTB4MDAwMgkvKiBSZXN1bWUgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgIFVTQklOVFJfSU9DCQkweDAwMDQJLyogSW50ZXJydXB0IE9uIENvbXBsZXRlIGVuYWJsZSAqLworI2RlZmluZSAgIFVTQklOVFJfU1AJCTB4MDAwOAkvKiBTaG9ydCBwYWNrZXQgaW50ZXJydXB0IGVuYWJsZSAqLworCisjZGVmaW5lIFVTQkZSTlVNCTYKKyNkZWZpbmUgVVNCRkxCQVNFQURECTgKKyNkZWZpbmUgVVNCU09GCQkxMgorCisvKiBVU0IgcG9ydCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQlBPUlRTQzEJMTYKKyNkZWZpbmUgVVNCUE9SVFNDMgkxOAorI2RlZmluZSAgIFVTQlBPUlRTQ19DQ1MJCTB4MDAwMQkvKiBDdXJyZW50IENvbm5lY3QgU3RhdHVzICgiZGV2aWNlIHByZXNlbnQiKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19DU0MJCTB4MDAwMgkvKiBDb25uZWN0IFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUEUJCTB4MDAwNAkvKiBQb3J0IEVuYWJsZSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19QRUMJCTB4MDAwOAkvKiBQb3J0IEVuYWJsZSBDaGFuZ2UgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfRFBMVVMJMHgwMDEwCS8qIEQrIGhpZ2ggKGxpbmUgc3RhdHVzKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19ETUlOVVMJMHgwMDIwCS8qIEQtIGhpZ2ggKGxpbmUgc3RhdHVzKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19SRAkJMHgwMDQwCS8qIFJlc3VtZSBEZXRlY3QgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUkVTMQkweDAwODAJLyogcmVzZXJ2ZWQsIGFsd2F5cyAxICovCisjZGVmaW5lICAgVVNCUE9SVFNDX0xTREEJMHgwMTAwCS8qIExvdyBTcGVlZCBEZXZpY2UgQXR0YWNoZWQgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUFIJCTB4MDIwMAkvKiBQb3J0IFJlc2V0ICovCisvKiBPQyBhbmQgT0NDIGZyb20gSW50ZWwgNDMwVFggYW5kIGxhdGVyIChub3QgVUhDSSAxLjFkIHNwZWMpICovCisjZGVmaW5lICAgVVNCUE9SVFNDX09DCQkweDA0MDAJLyogT3ZlciBDdXJyZW50IGNvbmRpdGlvbiAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19PQ0MJCTB4MDgwMAkvKiBPdmVyIEN1cnJlbnQgQ2hhbmdlIFIvV0MgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfU1VTUAkweDEwMDAJLyogU3VzcGVuZCAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19SRVMyCTB4MjAwMAkvKiByZXNlcnZlZCwgd3JpdGUgemVyb2VzICovCisjZGVmaW5lICAgVVNCUE9SVFNDX1JFUzMJMHg0MDAwCS8qIHJlc2VydmVkLCB3cml0ZSB6ZXJvZXMgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUkVTNAkweDgwMDAJLyogcmVzZXJ2ZWQsIHdyaXRlIHplcm9lcyAqLworCisvKiBMZWdhY3kgc3VwcG9ydCByZWdpc3RlciAqLworI2RlZmluZSBVU0JMRUdTVVAJCTB4YzAKKyNkZWZpbmUgICBVU0JMRUdTVVBfREVGQVVMVAkweDIwMDAJLyogb25seSBQSVJRIGVuYWJsZSBzZXQgKi8KKworI2RlZmluZSBVSENJX05VTExfREFUQV9TSVpFCTB4N0ZGCS8qIGZvciBVSENJIGNvbnRyb2xsZXIgVEQgKi8KKworI2RlZmluZSBVSENJX1BUUl9CSVRTCQljcHVfdG9fbGUzMigweDAwMEYpCisjZGVmaW5lIFVIQ0lfUFRSX1RFUk0JCWNwdV90b19sZTMyKDB4MDAwMSkKKyNkZWZpbmUgVUhDSV9QVFJfUUgJCWNwdV90b19sZTMyKDB4MDAwMikKKyNkZWZpbmUgVUhDSV9QVFJfREVQVEgJCWNwdV90b19sZTMyKDB4MDAwNCkKKyNkZWZpbmUgVUhDSV9QVFJfQlJFQURUSAljcHVfdG9fbGUzMigweDAwMDApCisKKyNkZWZpbmUgVUhDSV9OVU1GUkFNRVMJCTEwMjQJLyogaW4gdGhlIGZyYW1lIGxpc3QgW2FycmF5XSAqLworI2RlZmluZSBVSENJX01BWF9TT0ZfTlVNQkVSCTIwNDcJLyogaW4gYW4gU09GIHBhY2tldCAqLworI2RlZmluZSBDQU5fU0NIRURVTEVfRlJBTUVTCTEwMDAJLyogaG93IGZhciBmdXR1cmUgZnJhbWVzIGNhbiBiZSBzY2hlZHVsZWQgKi8KKworc3RydWN0IHVoY2lfZnJhbWVfbGlzdCB7CisJX19sZTMyIGZyYW1lW1VIQ0lfTlVNRlJBTUVTXTsKKworCXZvaWQgKmZyYW1lX2NwdVtVSENJX05VTUZSQU1FU107CisKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Cit9OworCitzdHJ1Y3QgdXJiX3ByaXY7CisKKy8qCisgKiBPbmUgcm9sZSBvZiBhIFFIIGlzIHRvIGhvbGQgYSBxdWV1ZSBvZiBURHMgZm9yIHNvbWUgZW5kcG9pbnQuICBFYWNoIFFIIGlzCisgKiB1c2VkIHdpdGggb25lIFVSQiwgYW5kIHFoLT5lbGVtZW50ICh1cGRhdGVkIGJ5IHRoZSBIQykgaXMgZWl0aGVyOgorICogICAtIHRoZSBuZXh0IHVucHJvY2Vzc2VkIFREIGZvciB0aGUgVVJCLCBvcgorICogICAtIFVIQ0lfUFRSX1RFUk0gKHdoZW4gdGhlcmUncyBubyBtb3JlIHRyYWZmaWMgZm9yIHRoaXMgZW5kcG9pbnQpLCBvcgorICogICAtIHRoZSBRSCBmb3IgdGhlIG5leHQgVVJCIHF1ZXVlZCB0byB0aGUgc2FtZSBlbmRwb2ludC4KKyAqCisgKiBUaGUgb3RoZXIgcm9sZSBvZiBhIFFIIGlzIHRvIHNlcnZlIGFzIGEgInNrZWxldG9uIiBmcmFtZWxpc3QgZW50cnksIHNvIHdlCisgKiBjYW4gZWFzaWx5IHNwbGljZSBhIFFIIGZvciBzb21lIGVuZHBvaW50IGludG8gdGhlIHNjaGVkdWxlIGF0IHRoZSByaWdodAorICogcGxhY2UuICBUaGVuIHFoLT5lbGVtZW50IGlzIFVIQ0lfUFRSX1RFUk0uCisgKgorICogSW4gdGhlIGZyYW1lIGxpc3QsIHFoLT5saW5rIG1haW50YWlucyBhIGxpc3Qgb2YgUUhzIHNlZW4gYnkgdGhlIEhDOgorICogICAgIHNrZWwxIC0tPiBlcDEtcWggLS0+IGVwMi1xaCAtLT4gLi4uIC0tPiBza2VsMiAtLT4gLi4uCisgKi8KK3N0cnVjdCB1aGNpX3FoIHsKKwkvKiBIYXJkd2FyZSBmaWVsZHMgKi8KKwlfX2xlMzIgbGluazsJCQkvKiBOZXh0IHF1ZXVlICovCisJX19sZTMyIGVsZW1lbnQ7CQkJLyogUXVldWUgZWxlbWVudCBwb2ludGVyICovCisKKwkvKiBTb2Z0d2FyZSBmaWVsZHMgKi8KKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlX2xpc3Q7CS8qIFA6IHVoY2ktPnJlbW92ZV9saXN0X2xvY2sgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKworLyoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIGFjY2Vzc29yIGZvciB0aGUgZWxlbWVudCBwb2ludGVyIGJlY2F1c2UgaXQgaXMKKyAqIHN1YmplY3QgdG8gYXN5bmNocm9ub3VzIHVwZGF0ZXMgYnkgdGhlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIF9fbGUzMiBpbmxpbmUgcWhfZWxlbWVudChzdHJ1Y3QgdWhjaV9xaCAqcWgpIHsKKwlfX2xlMzIgZWxlbWVudCA9IHFoLT5lbGVtZW50OworCisJYmFycmllcigpOworCXJldHVybiBlbGVtZW50OworfQorCisvKgorICogZm9yIFREIDxzdGF0dXM+OgorICovCisjZGVmaW5lIFREX0NUUkxfU1BECQkoMSA8PCAyOSkJLyogU2hvcnQgUGFja2V0IERldGVjdCAqLworI2RlZmluZSBURF9DVFJMX0NfRVJSX01BU0sJKDMgPDwgMjcpCS8qIEVycm9yIENvdW50ZXIgYml0cyAqLworI2RlZmluZSBURF9DVFJMX0NfRVJSX1NISUZUCTI3CisjZGVmaW5lIFREX0NUUkxfTFMJCSgxIDw8IDI2KQkvKiBMb3cgU3BlZWQgRGV2aWNlICovCisjZGVmaW5lIFREX0NUUkxfSU9TCQkoMSA8PCAyNSkJLyogSXNvY2hyb25vdXMgU2VsZWN0ICovCisjZGVmaW5lIFREX0NUUkxfSU9DCQkoMSA8PCAyNCkJLyogSW50ZXJydXB0IG9uIENvbXBsZXRlICovCisjZGVmaW5lIFREX0NUUkxfQUNUSVZFCQkoMSA8PCAyMykJLyogVEQgQWN0aXZlICovCisjZGVmaW5lIFREX0NUUkxfU1RBTExFRAkJKDEgPDwgMjIpCS8qIFREIFN0YWxsZWQgKi8KKyNkZWZpbmUgVERfQ1RSTF9EQlVGRVJSCQkoMSA8PCAyMSkJLyogRGF0YSBCdWZmZXIgRXJyb3IgKi8KKyNkZWZpbmUgVERfQ1RSTF9CQUJCTEUJCSgxIDw8IDIwKQkvKiBCYWJibGUgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgVERfQ1RSTF9OQUsJCSgxIDw8IDE5KQkvKiBOQUsgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgVERfQ1RSTF9DUkNUSU1FTwkoMSA8PCAxOCkJLyogQ1JDL1RpbWUgT3V0IEVycm9yICovCisjZGVmaW5lIFREX0NUUkxfQklUU1RVRkYJKDEgPDwgMTcpCS8qIEJpdCBTdHVmZiBFcnJvciAqLworI2RlZmluZSBURF9DVFJMX0FDVExFTl9NQVNLCTB4N0ZGCS8qIGFjdHVhbCBsZW5ndGgsIGVuY29kZWQgYXMgbiAtIDEgKi8KKworI2RlZmluZSBURF9DVFJMX0FOWV9FUlJPUgkoVERfQ1RSTF9TVEFMTEVEIHwgVERfQ1RSTF9EQlVGRVJSIHwgXAorCQkJCSBURF9DVFJMX0JBQkJMRSB8IFREX0NUUkxfQ1JDVElNRSB8IFREX0NUUkxfQklUU1RVRkYpCisKKyNkZWZpbmUgdWhjaV9tYXhlcnIoZXJyKQkJKChlcnIpIDw8IFREX0NUUkxfQ19FUlJfU0hJRlQpCisjZGVmaW5lIHVoY2lfc3RhdHVzX2JpdHMoY3RybF9zdHMpCSgoY3RybF9zdHMpICYgMHhGNjAwMDApCisjZGVmaW5lIHVoY2lfYWN0dWFsX2xlbmd0aChjdHJsX3N0cykJKCgoY3RybF9zdHMpICsgMSkgJiBURF9DVFJMX0FDVExFTl9NQVNLKSAvKiAxLWJhc2VkICovCisKKy8qCisgKiBmb3IgVEQgPGluZm8+OiAoYS5rLmEuIFRva2VuKQorICovCisjZGVmaW5lIHRkX3Rva2VuKHRkKQkJbGUzMl90b19jcHUoKHRkKS0+dG9rZW4pCisjZGVmaW5lIFREX1RPS0VOX0RFVkFERFJfU0hJRlQJOAorI2RlZmluZSBURF9UT0tFTl9UT0dHTEVfU0hJRlQJMTkKKyNkZWZpbmUgVERfVE9LRU5fVE9HR0xFCQkoMSA8PCAxOSkKKyNkZWZpbmUgVERfVE9LRU5fRVhQTEVOX1NISUZUCTIxCisjZGVmaW5lIFREX1RPS0VOX0VYUExFTl9NQVNLCTB4N0ZGCQkvKiBleHBlY3RlZCBsZW5ndGgsIGVuY29kZWQgYXMgbiAtIDEgKi8KKyNkZWZpbmUgVERfVE9LRU5fUElEX01BU0sJMHhGRgorCisjZGVmaW5lIHVoY2lfZXhwbGVuKGxlbikJKChsZW4pIDw8IFREX1RPS0VOX0VYUExFTl9TSElGVCkKKworI2RlZmluZSB1aGNpX2V4cGVjdGVkX2xlbmd0aCh0b2tlbikgKCgoKHRva2VuKSA+PiAyMSkgKyAxKSAmIFREX1RPS0VOX0VYUExFTl9NQVNLKQorI2RlZmluZSB1aGNpX3RvZ2dsZSh0b2tlbikJKCgodG9rZW4pID4+IFREX1RPS0VOX1RPR0dMRV9TSElGVCkgJiAxKQorI2RlZmluZSB1aGNpX2VuZHBvaW50KHRva2VuKQkoKCh0b2tlbikgPj4gMTUpICYgMHhmKQorI2RlZmluZSB1aGNpX2RldmFkZHIodG9rZW4pCSgoKHRva2VuKSA+PiBURF9UT0tFTl9ERVZBRERSX1NISUZUKSAmIDB4N2YpCisjZGVmaW5lIHVoY2lfZGV2ZXAodG9rZW4pCSgoKHRva2VuKSA+PiBURF9UT0tFTl9ERVZBRERSX1NISUZUKSAmIDB4N2ZmKQorI2RlZmluZSB1aGNpX3BhY2tldGlkKHRva2VuKQkoKHRva2VuKSAmIFREX1RPS0VOX1BJRF9NQVNLKQorI2RlZmluZSB1aGNpX3BhY2tldG91dCh0b2tlbikJKHVoY2lfcGFja2V0aWQodG9rZW4pICE9IFVTQl9QSURfSU4pCisjZGVmaW5lIHVoY2lfcGFja2V0aW4odG9rZW4pCSh1aGNpX3BhY2tldGlkKHRva2VuKSA9PSBVU0JfUElEX0lOKQorCisvKgorICogVGhlIGRvY3VtZW50YXRpb24gc2F5cyAiNCB3b3JkcyBmb3IgaGFyZHdhcmUsIDQgd29yZHMgZm9yIHNvZnR3YXJlIi4KKyAqCisgKiBUaGF0J3Mgc2lsbHksIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGNhcmUuIFRoZSBoYXJkd2FyZSBvbmx5IGNhcmVzIHRoYXQKKyAqIHRoZSBoYXJkd2FyZSB3b3JkcyBhcmUgMTYtYnl0ZSBhbGlnbmVkLCBhbmQgd2UgY2FuIGhhdmUgYW55IGFtb3VudCBvZgorICogc3cgc3BhY2UgYWZ0ZXIgdGhlIFREIGVudHJ5IGFzIGZhciBhcyBJIGNhbiB0ZWxsLgorICoKKyAqIEJ1dCBsZXQncyBqdXN0IGdvIHdpdGggdGhlIGRvY3VtZW50YXRpb24sIGF0IGxlYXN0IGZvciAzMi1iaXQgbWFjaGluZXMuCisgKiBPbiA2NC1iaXQgbWFjaGluZXMgd2UgcHJvYmFibHkgd2FudCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0CisgKiBodyBkb2Vzbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSBzaXplIG9mIHRoZSBzdy1vbmx5IGFyZWEuCisgKgorICogQWxhcywgbm90IGFueW1vcmUsIHdlIGhhdmUgbW9yZSB0aGFuIDQgd29yZHMgZm9yIHNvZnR3YXJlLCB3b29wcy4KKyAqIEV2ZXJ5dGhpbmcgc3RpbGwgd29ya3MgdGhvLCBzdXJwcmlzZSEgLWplcmRmZWx0CisgKgorICogdGQtPmxpbmsgcG9pbnRzIHRvIGVpdGhlciBhbm90aGVyIFREIChub3QgbmVjZXNzYXJpbHkgZm9yIHRoZSBzYW1lIHVyYiBvcgorICogZXZlbiB0aGUgc2FtZSBlbmRwb2ludCksIG9yIG5vdGhpbmcgKFBUUl9URVJNKSwgb3IgYSBRSCAoZm9yIHF1ZXVlZCB1cmJzKQorICovCitzdHJ1Y3QgdWhjaV90ZCB7CisJLyogSGFyZHdhcmUgZmllbGRzICovCisJX19sZTMyIGxpbms7CisJX19sZTMyIHN0YXR1czsKKwlfX2xlMzIgdG9rZW47CisJX19sZTMyIGJ1ZmZlcjsKKworCS8qIFNvZnR3YXJlIGZpZWxkcyAqLworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogUDogdXJiLT5sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+dGRfcmVtb3ZlX2xpc3RfbG9jayAqLworCisJaW50IGZyYW1lOwkJCS8qIGZvciBpc286IHdoYXQgZnJhbWU/ICovCisJc3RydWN0IGxpc3RfaGVhZCBmbF9saXN0OwkvKiBQOiB1aGNpLT5mcmFtZV9saXN0X2xvY2sgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKworLyoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIGFjY2Vzc29yIGZvciB0aGUgY29udHJvbC9zdGF0dXMgd29yZCBiZWNhdXNlIGl0IGlzCisgKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB1MzIgaW5saW5lIHRkX3N0YXR1cyhzdHJ1Y3QgdWhjaV90ZCAqdGQpIHsKKwlfX2xlMzIgc3RhdHVzID0gdGQtPnN0YXR1czsKKworCWJhcnJpZXIoKTsKKwlyZXR1cm4gbGUzMl90b19jcHUoc3RhdHVzKTsKK30KKworCisvKgorICogVGhlIFVIQ0kgZHJpdmVyIHBsYWNlcyBJbnRlcnJ1cHQsIENvbnRyb2wgYW5kIEJ1bGsgaW50byBRSCdzIGJvdGgKKyAqIHRvIGdyb3VwIHRvZ2V0aGVyIFREJ3MgZm9yIG9uZSB0cmFuc2ZlciwgYW5kIGFsc28gdG8gZmFjaWxpYXRlIHF1ZXVpbmcKKyAqIG9mIFVSQidzLiBUbyBtYWtlIGl0IGVhc3kgdG8gaW5zZXJ0IGVudHJpZXMgaW50byB0aGUgc2NoZWR1bGUsIHdlIGhhdmUKKyAqIGEgc2tlbGV0b24gb2YgUUgncyBmb3IgZWFjaCBwcmVkZWZpbmVkIEludGVycnVwdCBsYXRlbmN5LCBsb3ctc3BlZWQKKyAqIGNvbnRyb2wsIGZ1bGwtc3BlZWQgY29udHJvbCBhbmQgdGVybWluYXRpbmcgUUggKHNlZSBleHBsYW5hdGlvbiBmb3IKKyAqIHRoZSB0ZXJtaW5hdGluZyBRSCBiZWxvdykuCisgKgorICogV2hlbiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBRSCwgd2UgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgZm9yIHRoZQorICogc2tlbGV0b24gUUguCisgKgorICogRm9yIGluc3RhbmNlLCB0aGUgcXVldWUgY2FuIGxvb2sgbGlrZSB0aGlzOgorICoKKyAqIHNrZWwgaW50MTI4IFFICisgKiBkZXYgMSBpbnRlcnJ1cHQgUUgKKyAqIGRldiA1IGludGVycnVwdCBRSAorICogc2tlbCBpbnQ2NCBRSAorICogc2tlbCBpbnQzMiBRSAorICogLi4uCisgKiBza2VsIGludDEgUUgKKyAqIHNrZWwgbG93LXNwZWVkIGNvbnRyb2wgUUgKKyAqIGRldiA1IGNvbnRyb2wgUUgKKyAqIHNrZWwgZnVsbC1zcGVlZCBjb250cm9sIFFICisgKiBza2VsIGJ1bGsgUUgKKyAqIGRldiAxIGJ1bGsgUUgKKyAqIGRldiAyIGJ1bGsgUUgKKyAqIHNrZWwgdGVybWluYXRpbmcgUUgKKyAqCisgKiBUaGUgdGVybWluYXRpbmcgUUggaXMgdXNlZCBmb3IgMiByZWFzb25zOgorICogLSBUbyBwbGFjZSBhIHRlcm1pbmF0aW5nIFREIHdoaWNoIGlzIHVzZWQgdG8gd29ya2Fyb3VuZCBhIFBJSVggYnVnCisgKiAgIChzZWUgSW50ZWwgZXJyYXRhIGZvciBleHBsYW5hdGlvbikKKyAqIC0gVG8gbG9vcCBiYWNrIHRvIHRoZSBmdWxsLXNwZWVkIGNvbnRyb2wgcXVldWUgZm9yIGZ1bGwtc3BlZWQgYmFuZHdpZHRoCisgKiAgIHJlY2xhbWF0aW9uCisgKgorICogSXNvY2hyb25vdXMgdHJhbnNmZXJzIGFyZSBzdG9yZWQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc2tlbGV0b24KKyAqIHNjaGVkdWxlIGFuZCBkb24ndCB1c2UgUUgncy4gV2hpbGUgdGhlIFVIQ0kgc3BlYyBkb2Vzbid0IGZvcmJpZCB0aGUKKyAqIHVzZSBvZiBRSCdzIGZvciBJc29jaHJvbm91cywgaXQgZG9lc24ndCB1c2UgdGhlbSBlaXRoZXIuIFNpbmNlIHdlIGRvbid0CisgKiBuZWVkIHRvIHVzZSB0aGVtIGVpdGhlciwgd2UgZm9sbG93IHRoZSBzcGVjIGRpYWdyYW1zIGluIGhvcGUgdGhhdCBpdCdsbAorICogYmUgbW9yZSBjb21wYXRpYmxlIHdpdGggZnV0dXJlIFVIQ0kgaW1wbGVtZW50YXRpb25zLgorICovCisKKyNkZWZpbmUgVUhDSV9OVU1fU0tFTFFICQkxMgorI2RlZmluZSBza2VsX2ludDEyOF9xaAkJc2tlbHFoWzBdCisjZGVmaW5lIHNrZWxfaW50NjRfcWgJCXNrZWxxaFsxXQorI2RlZmluZSBza2VsX2ludDMyX3FoCQlza2VscWhbMl0KKyNkZWZpbmUgc2tlbF9pbnQxNl9xaAkJc2tlbHFoWzNdCisjZGVmaW5lIHNrZWxfaW50OF9xaAkJc2tlbHFoWzRdCisjZGVmaW5lIHNrZWxfaW50NF9xaAkJc2tlbHFoWzVdCisjZGVmaW5lIHNrZWxfaW50Ml9xaAkJc2tlbHFoWzZdCisjZGVmaW5lIHNrZWxfaW50MV9xaAkJc2tlbHFoWzddCisjZGVmaW5lIHNrZWxfbHNfY29udHJvbF9xaAlza2VscWhbOF0KKyNkZWZpbmUgc2tlbF9mc19jb250cm9sX3FoCXNrZWxxaFs5XQorI2RlZmluZSBza2VsX2J1bGtfcWgJCXNrZWxxaFsxMF0KKyNkZWZpbmUgc2tlbF90ZXJtX3FoCQlza2VscWhbMTFdCisKKy8qCisgKiBTZWFyY2ggdHJlZSBmb3IgZGV0ZXJtaW5pbmcgd2hlcmUgPGludGVydmFsPiBmaXRzIGluIHRoZSBza2VscWhbXQorICogc2tlbGV0b24uCisgKgorICogQW4gaW50ZXJydXB0IHJlcXVlc3Qgc2hvdWxkIGJlIHBsYWNlZCBpbnRvIHRoZSBzbG93ZXN0IHNrZWxxaFtdCisgKiB3aGljaCBtZWV0cyB0aGUgaW50ZXJ2YWwvcGVyaW9kL2ZyZXF1ZW5jeSByZXF1aXJlbWVudC4KKyAqIEFuIGludGVycnVwdCByZXF1ZXN0IGlzIGFsbG93ZWQgdG8gYmUgZmFzdGVyIHRoYW4gPGludGVydmFsPiBidXQgbm90IHNsb3dlci4KKyAqCisgKiBGb3IgYSBnaXZlbiA8aW50ZXJ2YWw+LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlL21hdGNoaW5nCisgKiBza2VscWhbXSBpbmRleCB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19pbnRlcnZhbF90b19za2VsKGludCBpbnRlcnZhbCkKK3sKKwlpZiAoaW50ZXJ2YWwgPCAxNikgeworCQlpZiAoaW50ZXJ2YWwgPCA0KSB7CisJCQlpZiAoaW50ZXJ2YWwgPCAyKQorCQkJCXJldHVybiA3OwkvKiBpbnQxIGZvciAwLTEgbXMgKi8KKwkJCXJldHVybiA2OwkJLyogaW50MiBmb3IgMi0zIG1zICovCisJCX0KKwkJaWYgKGludGVydmFsIDwgOCkKKwkJCXJldHVybiA1OwkJLyogaW50NCBmb3IgNC03IG1zICovCisJCXJldHVybiA0OwkJCS8qIGludDggZm9yIDgtMTUgbXMgKi8KKwl9CisJaWYgKGludGVydmFsIDwgNjQpIHsKKwkJaWYgKGludGVydmFsIDwgMzIpCisJCQlyZXR1cm4gMzsJCS8qIGludDE2IGZvciAxNi0zMSBtcyAqLworCQlyZXR1cm4gMjsJCQkvKiBpbnQzMiBmb3IgMzItNjMgbXMgKi8KKwl9CisJaWYgKGludGVydmFsIDwgMTI4KQorCQlyZXR1cm4gMTsJCQkvKiBpbnQ2NCBmb3IgNjQtMTI3IG1zICovCisJcmV0dXJuIDA7CQkJCS8qIGludDEyOCBmb3IgMTI4LTI1NSBtcyAoTWF4LikgKi8KK30KKworLyoKKyAqIERldmljZSBzdGF0ZXMgZm9yIHRoZSBob3N0IGNvbnRyb2xsZXIuCisgKgorICogVG8gcHJldmVudCAiYm91bmNpbmciIGluIHRoZSBwcmVzZW5jZSBvZiBlbGVjdHJpY2FsIG5vaXNlLAorICogd2UgaW5zaXN0IG9uIGEgMS1zZWNvbmQgImdyYWNlIiBwZXJpb2QsIGJlZm9yZSBzd2l0Y2hpbmcgdG8KKyAqIHRoZSBSVU5OSU5HIG9yIFNVU1BFTkRFRCBzdGF0ZXMsIGR1cmluZyB3aGljaCB0aGUgc3RhdGUgaXMKKyAqIG5vdCBhbGxvd2VkIHRvIGNoYW5nZS4KKyAqCisgKiBUaGUgcmVzdW1lIHByb2Nlc3MgaXMgZGl2aWRlZCBpbnRvIHN1YnN0YXRlcyBpbiBvcmRlciB0byBhdm9pZAorICogcG90ZW50aWFsbHkgbGVuZ3RoIGRlbGF5cyBkdXJpbmcgdGhlIHRpbWVyIGhhbmRsZXIuCisgKgorICogU3RhdGVzIGluIHdoaWNoIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgaGFsdGVkIG11c3QgaGF2ZSB2YWx1ZXMgPD0gMC4KKyAqLworZW51bSB1aGNpX3N0YXRlIHsKKwlVSENJX1JFU0VULAorCVVIQ0lfUlVOTklOR19HUkFDRSwJCS8qIEJlZm9yZSBSVU5OSU5HICovCisJVUhDSV9SVU5OSU5HLAkJCS8qIFRoZSBub3JtYWwgc3RhdGUgKi8KKwlVSENJX1NVU1BFTkRJTkdfR1JBQ0UsCQkvKiBCZWZvcmUgU1VTUEVOREVEICovCisJVUhDSV9TVVNQRU5ERUQgPSAtMTAsCQkvKiBXaGVuIG5vIGRldmljZXMgYXJlIGF0dGFjaGVkICovCisJVUhDSV9SRVNVTUlOR18xLAorCVVIQ0lfUkVTVU1JTkdfMgorfTsKKworLyoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBmdWxsIHVoY2kgaW5mb3JtYXRpb24uCisgKgorICogTm90ZSBob3cgdGhlICJwcm9wZXIiIFVTQiBpbmZvcm1hdGlvbiBpcyBqdXN0CisgKiBhIHN1YnNldCBvZiB3aGF0IHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG5lZWRzLgorICovCitzdHJ1Y3QgdWhjaV9oY2QgeworCisJLyogZGVidWdmcyAqLworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCS8qIEdyYWJiZWQgZnJvbSBQQ0kgKi8KKwl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CisKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnFoX3Bvb2w7CisJc3RydWN0IGRtYV9wb29sICp0ZF9wb29sOworCisJc3RydWN0IHVzYl9idXMgKmJ1czsKKworCXN0cnVjdCB1aGNpX3RkICp0ZXJtX3RkOwkvKiBUZXJtaW5hdGluZyBURCwgc2VlIFVIQ0kgYnVnICovCisJc3RydWN0IHVoY2lfcWggKnNrZWxxaFtVSENJX05VTV9TS0VMUUhdOwkvKiBTa2VsZXRvbiBRSCdzICovCisKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHVoY2lfZnJhbWVfbGlzdCAqZmw7CQkvKiBQOiB1aGNpLT5sb2NrICovCisJaW50IGZzYnI7CQkJCS8qIEZ1bGwtc3BlZWQgYmFuZHdpZHRoIHJlY2xhbWF0aW9uICovCisJdW5zaWduZWQgbG9uZyBmc2JydGltZW91dDsJCS8qIEZTQlIgZGVsYXkgKi8KKworCWVudW0gdWhjaV9zdGF0ZSBzdGF0ZTsJCQkvKiBGSVhNRTogbmVlZHMgYSBzcGlubG9jayAqLworCXVuc2lnbmVkIGxvbmcgc3RhdGVfZW5kOwkJLyogVGltZSBvZiBuZXh0IHRyYW5zaXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgZnJhbWVfbnVtYmVyOwkJLyogQXMgb2YgbGFzdCBjaGVjayAqLworCXVuc2lnbmVkIGludCBpc19zdG9wcGVkOworI2RlZmluZSBVSENJX0lTX1NUT1BQRUQJCTk5OTkJCS8qIExhcmdlciB0aGFuIGEgZnJhbWUgIyAqLworCisJdW5zaWduZWQgaW50IHNjYW5faW5fcHJvZ3Jlc3M6MTsJLyogU2NoZWR1bGUgc2NhbiBpcyBydW5uaW5nICovCisJdW5zaWduZWQgaW50IG5lZWRfcmVzY2FuOjE7CQkvKiBSZWRvIHRoZSBzY2hlZHVsZSBzY2FuICovCisJdW5zaWduZWQgaW50IHJlc3VtZV9kZXRlY3Q6MTsJCS8qIE5lZWQgYSBHbG9iYWwgUmVzdW1lICovCisKKwkvKiBTdXBwb3J0IGZvciBwb3J0IHN1c3BlbmQvcmVzdW1lL3Jlc2V0ICovCisJdW5zaWduZWQgbG9uZyBwb3J0X2Nfc3VzcGVuZDsJCS8qIEJpdC1hcnJheXMgb2YgcG9ydHMgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRlZF9wb3J0czsKKwl1bnNpZ25lZCBsb25nIHJlc3VtaW5nX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgcG9ydHNfdGltZW91dDsJCS8qIFRpbWUgdG8gc3RvcCBzaWduYWxsaW5nICovCisKKwkvKiBNYWluIGxpc3Qgb2YgVVJCJ3MgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhpcyBIQyAqLworCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CQkvKiBQOiB1aGNpLT5sb2NrICovCisKKwkvKiBMaXN0IG9mIFFIJ3MgdGhhdCBhcmUgZG9uZSwgYnV0IHdhaXRpbmcgdG8gYmUgdW5saW5rZWQgKHJhY2UpICovCisJc3RydWN0IGxpc3RfaGVhZCBxaF9yZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+bG9jayAqLworCXVuc2lnbmVkIGludCBxaF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLworCisJLyogTGlzdCBvZiBURCdzIHRoYXQgYXJlIGRvbmUsIGJ1dCB3YWl0aW5nIHRvIGJlIGZyZWVkIChyYWNlKSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGRfcmVtb3ZlX2xpc3Q7CS8qIFA6IHVoY2ktPmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgdGRfcmVtb3ZlX2FnZTsJCS8qIEFnZSBpbiBmcmFtZXMgKi8KKworCS8qIExpc3Qgb2YgYXN5bmNocm9ub3VzbHkgdW5saW5rZWQgVVJCJ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9yZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+bG9jayAqLworCXVuc2lnbmVkIGludCB1cmJfcmVtb3ZlX2FnZTsJCS8qIEFnZSBpbiBmcmFtZXMgKi8KKworCS8qIExpc3Qgb2YgVVJCJ3MgYXdhaXRpbmcgY29tcGxldGlvbiBjYWxsYmFjayAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29tcGxldGVfbGlzdDsJCS8qIFA6IHVoY2ktPmxvY2sgKi8KKworCWludCByaF9udW1wb3J0czsKKworCXN0cnVjdCB0aW1lcl9saXN0IHN0YWxsX3RpbWVyOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHFoOwkJLyogZW5kcG9pbnRfZGlzYWJsZSB3YWl0ZXJzICovCit9OworCisvKiBDb252ZXJ0IGJldHdlZW4gYSB1c2JfaGNkIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHVoY2lfaGNkICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1aGNpX2hjZCAqaGNkX3RvX3VoY2koc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCB1aGNpX2hjZCAqKSAoaGNkLT5oY2RfcHJpdik7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICp1aGNpX3RvX2hjZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKSB1aGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCisjZGVmaW5lIHVoY2lfZGV2KHUpCSh1aGNpX3RvX2hjZCh1KS0+c2VsZi5jb250cm9sbGVyKQorCitzdHJ1Y3QgdXJiX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3Q7CisKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlzdHJ1Y3QgdWhjaV9xaCAqcWg7CQkvKiBRSCBmb3IgdGhpcyBVUkIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRkX2xpc3Q7CS8qIFA6IHVyYi0+bG9jayAqLworCisJdW5zaWduZWQgZnNiciA6IDE7CQkvKiBVUkIgdHVybmVkIG9uIEZTQlIgKi8KKwl1bnNpZ25lZCBmc2JyX3RpbWVvdXQgOiAxOwkvKiBVUkIgdGltZWQgb3V0IG9uIEZTQlIgKi8KKwl1bnNpZ25lZCBxdWV1ZWQgOiAxOwkJLyogUUggd2FzIHF1ZXVlZCAobm90IGxpbmtlZCBpbikgKi8KKwl1bnNpZ25lZCBzaG9ydF9jb250cm9sX3BhY2tldCA6IDE7CS8qIElmIHdlIGdldCBhIHNob3J0IHBhY2tldCBkdXJpbmcgKi8KKwkJCQkJCS8qICBhIGNvbnRyb2wgdHJhbnNmZXIsIHJldHJpZ2dlciAqLworCQkJCQkJLyogIHRoZSBzdGF0dXMgcGhhc2UgKi8KKworCXVuc2lnbmVkIGxvbmcgaW5zZXJ0dGltZTsJLyogSW4gamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgZnNicnRpbWU7CQkvKiBJbiBqaWZmaWVzICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworfTsKKworLyoKKyAqIExvY2tpbmcgaW4gdWhjaS5jCisgKgorICogQWxtb3N0IGV2ZXJ5dGhpbmcgcmVsYXRpbmcgdG8gdGhlIGhhcmR3YXJlIHNjaGVkdWxlIGFuZCBwcm9jZXNzaW5nCisgKiBvZiBVUkJzIGlzIHByb3RlY3RlZCBieSB1aGNpLT5sb2NrLiAgdXJiLT5zdGF0dXMgaXMgcHJvdGVjdGVkIGJ5CisgKiB1cmItPmxvY2s7IHRoYXQncyB0aGUgb25lIGV4Y2VwdGlvbi4KKyAqCisgKiBUbyBwcmV2ZW50IGRlYWRsb2NrcywgbmV2ZXIgbG9jayB1aGNpLT5sb2NrIHdoaWxlIGhvbGRpbmcgdXJiLT5sb2NrLgorICogVGhlIHNhZmUgb3JkZXIgb2YgbG9ja2luZyBpczoKKyAqCisgKiAjMSB1aGNpLT5sb2NrCisgKiAjMiB1cmItPmxvY2sKKyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQ1YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IuCisgKgorICogTWFpbnRhaW5lcjogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAyIEpvaGFubmVzIEVyZGZlbHQsIGpvaGFubmVzQGVyZGZlbHQuY29tCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUmFuZHkgRHVubGFwCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR2VvcmcgQWNoZXIsIGFjaGVyQGluLnR1bS5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IERldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IFRob21hcyBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaAorICogKEMpIENvcHlyaWdodCAyMDA0IEFsYW4gU3Rlcm4sIHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUKKyAqLworCitzdGF0aWMgX191OCByb290X2h1Yl9odWJfZGVzW10gPQoreworCTB4MDksCQkJLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgyOSwJCQkvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBIdWItZGVzY3JpcHRvciAqLworCTB4MDIsCQkJLyogIF9fdTggIGJOYnJQb3J0czsgKi8KKwkweDBhLAkJCS8qIF9fdTE2ICB3SHViQ2hhcmFjdGVyaXN0aWNzOyAqLworCTB4MDAsCQkJLyogICAocGVyLXBvcnQgT0MsIG5vIHBvd2VyIHN3aXRjaGluZykgKi8KKwkweDAxLAkJCS8qICBfX3U4ICBiUHdyT24ycHdyR29vZDsgMm1zICovCisJMHgwMCwJCQkvKiAgX191OCAgYkh1YkNvbnRyQ3VycmVudDsgMCBtQSAqLworCTB4MDAsCQkJLyogIF9fdTggIERldmljZVJlbW92YWJsZTsgKioqIDcgUG9ydHMgbWF4ICoqKiAqLworCTB4ZmYJCQkvKiAgX191OCAgUG9ydFB3ckN0cmxNYXNrOyAqKiogNyBwb3J0cyBtYXggKioqICovCit9OworCisjZGVmaW5lCVVIQ0lfUkhfTUFYQ0hJTEQJNworCisvKiBtdXN0IHdyaXRlIGFzIHplcm9lcyAqLworI2RlZmluZSBXWl9CSVRTCQkoVVNCUE9SVFNDX1JFUzIgfCBVU0JQT1JUU0NfUkVTMyB8IFVTQlBPUlRTQ19SRVM0KQorCisvKiBzdGF0dXMgY2hhbmdlIGJpdHM6ICBub256ZXJvIHdyaXRlcyB3aWxsIGNsZWFyICovCisjZGVmaW5lIFJXQ19CSVRTCShVU0JQT1JUU0NfT0NDIHwgVVNCUE9SVFNDX1BFQyB8IFVTQlBPUlRTQ19DU0MpCisKK3N0YXRpYyBpbnQgdWhjaV9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHBvcnQ7CisKKwkqYnVmID0gMDsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkgeworCQlpZiAoKGludyh1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIHBvcnQgKiAyKSAmIFJXQ19CSVRTKSB8fAorCQkJCXRlc3RfYml0KHBvcnQsICZ1aGNpLT5wb3J0X2Nfc3VzcGVuZCkpCisJCQkqYnVmIHw9ICgxIDw8IChwb3J0ICsgMSkpOworCX0KKwlpZiAoKmJ1ZiAmJiB1aGNpLT5zdGF0ZSA9PSBVSENJX1NVU1BFTkRFRCkKKwkJdWhjaS0+cmVzdW1lX2RldGVjdCA9IDE7CisJcmV0dXJuICEhKmJ1ZjsKK30KKworI2RlZmluZSBPSyh4KQkJCWxlbiA9ICh4KTsgYnJlYWsKKworI2RlZmluZSBDTFJfUkhfUE9SVFNUQVQoeCkgXAorCXN0YXR1cyA9IGludyhwb3J0X2FkZHIpOyBcCisJc3RhdHVzICY9IH4oUldDX0JJVFN8V1pfQklUUyk7IFwKKwlzdGF0dXMgJj0gfih4KTsgXAorCXN0YXR1cyB8PSBSV0NfQklUUyAmICh4KTsgXAorCW91dHcoc3RhdHVzLCBwb3J0X2FkZHIpCisKKyNkZWZpbmUgU0VUX1JIX1BPUlRTVEFUKHgpIFwKKwlzdGF0dXMgPSBpbncocG9ydF9hZGRyKTsgXAorCXN0YXR1cyB8PSAoeCk7IFwKKwlzdGF0dXMgJj0gfihSV0NfQklUU3xXWl9CSVRTKTsgXAorCW91dHcoc3RhdHVzLCBwb3J0X2FkZHIpCisKKy8qIFVIQ0kgY29udHJvbGxlcnMgZG9uJ3QgYXV0b21hdGljYWxseSBzdG9wIHJlc3VtZSBzaWduYWxsaW5nIGFmdGVyIDIwIG1zZWMsCisgKiBzbyB3ZSBoYXZlIHRvIHBvbGwgYW5kIGNoZWNrIHRpbWVvdXRzIGluIG9yZGVyIHRvIHRha2UgY2FyZSBvZiBpdC4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9maW5pc2hfc3VzcGVuZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCBwb3J0LAorCQl1bnNpZ25lZCBsb25nIHBvcnRfYWRkcikKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpKSB7CisJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfU1VTUCB8IFVTQlBPUlRTQ19SRCk7CisJCWNsZWFyX2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKTsKKwkJY2xlYXJfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cyk7CisJCXNldF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKKworCQkvKiBUaGUgY29udHJvbGxlciB3b24ndCBhY3R1YWxseSB0dXJuIG9mZiB0aGUgUkQgYml0IHVudGlsCisJCSAqIGl0IGhhcyBoYWQgYSBjaGFuY2UgdG8gc2VuZCBhIGxvdy1zcGVlZCBFT1Agc2VxdWVuY2UsCisJCSAqIHdoaWNoIHRha2VzIDMgYml0IHRpbWVzICg9IDIgbWljcm9zZWNvbmRzKS4gIFdlJ2xsIGRlbGF5CisJCSAqIHNsaWdodGx5IGxvbmdlciBmb3IgZ29vZCBsdWNrLiAqLworCQl1ZGVsYXkoNCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX2NoZWNrX3BvcnRzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBpbnQgcG9ydDsKKwl1bnNpZ25lZCBsb25nIHBvcnRfYWRkcjsKKwlpbnQgc3RhdHVzOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHVoY2ktPnJoX251bXBvcnRzOyArK3BvcnQpIHsKKwkJcG9ydF9hZGRyID0gdWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyAyICogcG9ydDsKKwkJc3RhdHVzID0gaW53KHBvcnRfYWRkcik7CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBVU0JQT1JUU0NfUFIpKSB7CisJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5wb3J0c190aW1lb3V0KSkgeworCQkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUFIpOworCQkJCXVkZWxheSgxMCk7CisKKwkJCQkvKiBJZiB0aGUgcG9ydCB3YXMgZW5hYmxlZCBiZWZvcmUsIHR1cm5pbmcKKwkJCQkgKiByZXNldCBvbiBjYXVzZWQgYSBwb3J0IGVuYWJsZSBjaGFuZ2UuCisJCQkJICogVHVybmluZyByZXNldCBvZmYgY2F1c2VzIGEgcG9ydCBjb25uZWN0CisJCQkJICogc3RhdHVzIGNoYW5nZS4gIENsZWFyIHRoZXNlIGNoYW5nZXMuICovCisJCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19DU0MgfCBVU0JQT1JUU0NfUEVDKTsKKwkJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BFKTsKKwkJCX0KKwkJfQorCQlpZiAodW5saWtlbHkoc3RhdHVzICYgVVNCUE9SVFNDX1JEKSkgeworCQkJaWYgKCF0ZXN0X2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpKSB7CisKKwkJCQkvKiBQb3J0IHJlY2VpdmVkIGEgd2FrZXVwIHJlcXVlc3QgKi8KKwkJCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cyk7CisJCQkJdWhjaS0+cG9ydHNfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJbXNlY3NfdG9famlmZmllcygyMCk7CisJCQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKKwkJCQkJCXVoY2ktPnBvcnRzX3RpbWVvdXQpKSB7CisJCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LCBwb3J0X2FkZHIpOworCQkJfQorCQl9CisJfQorfQorCisvKiBzaXplIG9mIHJldHVybmVkIGJ1ZmZlciBpcyBwYXJ0IG9mIFVTQiBzcGVjICovCitzdGF0aWMgaW50IHVoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCQl1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHN0YXR1cywgbHN0YXR1cywgcmV0dmFsID0gMCwgbGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgcG9ydCA9IHdJbmRleCAtIDE7CisJdW5zaWduZWQgbG9uZyBwb3J0X2FkZHIgPSB1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIDIgKiBwb3J0OworCXUxNiB3UG9ydENoYW5nZSwgd1BvcnRTdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisJc3dpdGNoICh0eXBlUmVxKSB7CisKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJKihfX2xlMzIgKilidWYgPSBjcHVfdG9fbGUzMigwKTsKKwkJT0soNCk7CQkvKiBodWIgcG93ZXIgKi8KKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCWlmIChwb3J0ID49IHVoY2ktPnJoX251bXBvcnRzKQorCQkJZ290byBlcnI7CisKKwkJdWhjaV9jaGVja19wb3J0cyh1aGNpKTsKKwkJc3RhdHVzID0gaW53KHBvcnRfYWRkcik7CisKKwkJLyogSW50ZWwgY29udHJvbGxlcnMgcmVwb3J0IHRoZSBPdmVyQ3VycmVudCBiaXQgYWN0aXZlIG9uLgorCQkgKiBWSUEgY29udHJvbGxlcnMgcmVwb3J0IGl0IGFjdGl2ZSBvZmYsIHNvIHdlJ2xsIGFkanVzdCB0aGUKKwkJICogYml0IHZhbHVlLiAgKEl0J3Mgbm90IHN0YW5kYXJkaXplZCBpbiB0aGUgVUhDSSBzcGVjLikKKwkJICovCisJCWlmICh0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKS0+dmVuZG9yID09CisJCQkJUENJX1ZFTkRPUl9JRF9WSUEpCisJCQlzdGF0dXMgXj0gVVNCUE9SVFNDX09DOworCisJCS8qIFVIQ0kgZG9lc24ndCBzdXBwb3J0IENfUkVTRVQgKGFsd2F5cyBmYWxzZSkgKi8KKwkJd1BvcnRDaGFuZ2UgPSBsc3RhdHVzID0gMDsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19DU0MpCisJCQl3UG9ydENoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTjsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19QRUMpCisJCQl3UG9ydENoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX09DQykKKwkJCXdQb3J0Q2hhbmdlIHw9IFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVDsKKworCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKSkgeworCQkJd1BvcnRDaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQ7CisJCQlsc3RhdHVzIHw9IDE7CisJCX0KKwkJaWYgKHRlc3RfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpKQorCQkJbHN0YXR1cyB8PSAyOworCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkKKwkJCWxzdGF0dXMgfD0gNDsKKworCQkvKiBVSENJIGhhcyBubyBwb3dlciBzd2l0Y2hpbmcgKGFsd2F5cyBvbikgKi8KKwkJd1BvcnRTdGF0dXMgPSBVU0JfUE9SVF9TVEFUX1BPV0VSOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX0NDUykKKwkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19QRSkgeworCQkJd1BvcnRTdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQlpZiAoc3RhdHVzICYgKFVTQlBPUlRTQ19TVVNQIHwgVVNCUE9SVFNDX1JEKSkKKwkJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7CisJCX0KKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19PQykKKwkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfT1ZFUkNVUlJFTlQ7CisJCWlmIChzdGF0dXMgJiBVU0JQT1JUU0NfUFIpCisJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1JFU0VUOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX0xTREEpCisJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKworCQlpZiAod1BvcnRDaGFuZ2UpCisJCQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAicG9ydCAlZCBwb3J0c2MgJTA0eCwlMDJ4XG4iLAorCQkJCQl3SW5kZXgsIHN0YXR1cywgbHN0YXR1cyk7CisKKwkJKihfX2xlMTYgKilidWYgPSBjcHVfdG9fbGUxNih3UG9ydFN0YXR1cyk7CisJCSooX19sZTE2ICopKGJ1ZiArIDIpID0gY3B1X3RvX2xlMTYod1BvcnRDaGFuZ2UpOworCQlPSyg0KTsKKwljYXNlIFNldEh1YkZlYXR1cmU6CQkvKiBXZSBkb24ndCBpbXBsZW1lbnQgdGhlc2UgKi8KKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlPSygwKTsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyOworCQl9CisJCWJyZWFrOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmIChwb3J0ID49IHVoY2ktPnJoX251bXBvcnRzKQorCQkJZ290byBlcnI7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlzZXRfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpOworCQkJU0VUX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19TVVNQKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BSKTsKKworCQkJLyogUmVzZXQgdGVybWluYXRlcyBSZXN1bWUgc2lnbmFsbGluZyAqLworCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LCBwb3J0X2FkZHIpOworCisJCQkvKiBVU0IgdjIuMCA3LjEuNy41ICovCisJCQl1aGNpLT5wb3J0c190aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCS8qIFVIQ0kgaGFzIG5vIHBvd2VyIHN3aXRjaGluZyAqLworCQkJT0soMCk7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycjsKKwkJfQorCQlicmVhazsKKwljYXNlIENsZWFyUG9ydEZlYXR1cmU6CisJCWlmIChwb3J0ID49IHVoY2ktPnJoX251bXBvcnRzKQorCQkJZ290byBlcnI7CisKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUEUpOworCisJCQkvKiBEaXNhYmxlIHRlcm1pbmF0ZXMgUmVzdW1lIHNpZ25hbGxpbmcgKi8KKwkJCXVoY2lfZmluaXNoX3N1c3BlbmQodWhjaSwgcG9ydCwgcG9ydF9hZGRyKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1BFQyk7CisJCQlPSygwKTsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykgJiYKKwkJCQkJIXRlc3RfYW5kX3NldF9iaXQocG9ydCwKKwkJCQkJCSZ1aGNpLT5yZXN1bWluZ19wb3J0cykpIHsKKwkJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1JEKTsKKworCQkJCS8qIFRoZSBjb250cm9sbGVyIHdvbid0IGFsbG93IFJEIHRvIGJlIHNldAorCQkJCSAqIGlmIHRoZSBwb3J0IGlzIGRpc2FibGVkLiAgV2hlbiB0aGlzIGhhcHBlbnMKKwkJCQkgKiBqdXN0IHNraXAgdGhlIFJlc3VtZSBzaWduYWxsaW5nLgorCQkJCSAqLworCQkJCWlmICghKGludyhwb3J0X2FkZHIpICYgVVNCUE9SVFNDX1JEKSkKKwkJCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LAorCQkJCQkJCXBvcnRfYWRkcik7CisJCQkJZWxzZQorCQkJCQkvKiBVU0IgdjIuMCA3LjEuNy43ICovCisJCQkJCXVoY2ktPnBvcnRzX3RpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJfQorCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQkvKiBVSENJIGhhcyBubyBwb3dlciBzd2l0Y2hpbmcgKi8KKwkJCWdvdG8gZXJyOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19DU0MpOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfT0NDKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCS8qIHRoaXMgZHJpdmVyIHdvbid0IHJlcG9ydCB0aGVzZSAqLworCQkJT0soMCk7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycjsKKwkJfQorCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKHJvb3RfaHViX2h1Yl9kZXMpLCB3TGVuZ3RoKTsKKwkJbWVtY3B5KGJ1Ziwgcm9vdF9odWJfaHViX2RlcywgbGVuKTsKKwkJaWYgKGxlbiA+IDIpCisJCQlidWZbMl0gPSB1aGNpLT5yaF9udW1wb3J0czsKKwkJT0sobGVuKTsKKwlkZWZhdWx0OgorZXJyOgorCQlyZXR2YWwgPSAtRVBJUEU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTdjMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtMCwwICsxLDE1MzkgQEAKKy8qCisgKiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQi4KKyAqCisgKiBNYWludGFpbmVyOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDIgSm9oYW5uZXMgRXJkZmVsdCwgam9oYW5uZXNAZXJkZmVsdC5jb20KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHZW9yZyBBY2hlciwgYWNoZXJAaW4udHVtLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgRGV0aSBGbGllZ2wsIGRldGlAZmxpZWdsLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgVGhvbWFzIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyLCB3ZWlzc2dAdmllbm5hLmF0CisgKiAoQykgQ29weXJpZ2h0IDIwMDAgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLiAocG9ydCBvZiBuZXcgUENJIGludGVyZmFjZQorICogICAgICAgICAgICAgICBzdXBwb3J0IGZyb20gdXNiLW9oY2kuYyBieSBBZGFtIFJpY2h0ZXIsIGFkYW1AeWdnZHJhc2lsLmNvbSkuCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aCAoZnJvbSB1c2Itb2hjaS5jKQorICogKEMpIENvcHlyaWdodCAyMDA0IEFsYW4gU3Rlcm4sIHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUKKyAqLworCitzdGF0aWMgaW50IHVoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIHVoY2lfdW5saW5rX2dlbmVyaWMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgdWhjaV9yZW1vdmVfcGVuZGluZ191cmJwcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworc3RhdGljIHZvaWQgdWhjaV9mcmVlX3BlbmRpbmdfcWhzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7CitzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ190ZHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKTsKKworLyoKKyAqIFRlY2huaWNhbGx5LCB1cGRhdGluZyB0ZC0+c3RhdHVzIGhlcmUgaXMgYSByYWNlLCBidXQgaXQncyBub3QgcmVhbGx5IGEKKyAqIHByb2JsZW0uIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB3ZSBzZXQgdGhlIElPQyBiaXQgYWdhaW4KKyAqIGdlbmVyYXRpbmcgYSBzcHVyaW91cyBpbnRlcnJ1cHQuIFdlIGNvdWxkIGZpeCB0aGlzIGJ5IGNyZWF0aW5nIGFub3RoZXIKKyAqIFFIIGFuZCBsZWF2aW5nIHRoZSBJT0MgYml0IGFsd2F5cyBzZXQsIGJ1dCB0aGVuIHdlIHdvdWxkIGhhdmUgdG8gcGxheQorICogZ2FtZXMgd2l0aCB0aGUgRlNCUiBjb2RlIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIGNvcnJlY3Qgb3JkZXIgaW4gYWxsCisgKiB0aGUgY2FzZXMuIEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX3NldF9uZXh0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJdWhjaS0+dGVybV90ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsgCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX2NsZWFyX25leHRfaW50ZXJydXB0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1aGNpLT50ZXJtX3RkLT5zdGF0dXMgJj0gfmNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfbW92ZXRvX2NvbXBsZXRlKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgCisJCQkJCXN0cnVjdCB1cmJfcHJpdiAqdXJicCkKK3sKKwlsaXN0X21vdmVfdGFpbCgmdXJicC0+dXJiX2xpc3QsICZ1aGNpLT5jb21wbGV0ZV9saXN0KTsKK30KKworc3RhdGljIHN0cnVjdCB1aGNpX3RkICp1aGNpX2FsbG9jX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCisJdGQgPSBkbWFfcG9vbF9hbGxvYyh1aGNpLT50ZF9wb29sLCBHRlBfQVRPTUlDLCAmZG1hX2hhbmRsZSk7CisJaWYgKCF0ZCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ZC0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7CisKKwl0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisJdGQtPmJ1ZmZlciA9IDA7CisKKwl0ZC0+ZnJhbWUgPSAtMTsKKwl0ZC0+ZGV2ID0gZGV2OworCisJSU5JVF9MSVNUX0hFQUQoJnRkLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdGQtPnJlbW92ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdGQtPmZsX2xpc3QpOworCisJdXNiX2dldF9kZXYoZGV2KTsKKworCXJldHVybiB0ZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfZmlsbF90ZChzdHJ1Y3QgdWhjaV90ZCAqdGQsIHUzMiBzdGF0dXMsCisJCXUzMiB0b2tlbiwgdTMyIGJ1ZmZlcikKK3sKKwl0ZC0+c3RhdHVzID0gY3B1X3RvX2xlMzIoc3RhdHVzKTsKKwl0ZC0+dG9rZW4gPSBjcHVfdG9fbGUzMih0b2tlbik7CisJdGQtPmJ1ZmZlciA9IGNwdV90b19sZTMyKGJ1ZmZlcik7Cit9CisKKy8qCisgKiBXZSBpbnNlcnQgSXNvY2hyb25vdXMgVVJCJ3MgZGlyZWN0bHkgaW50byB0aGUgZnJhbWUgbGlzdCBhdCB0aGUgYmVnaW5uaW5nCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfaW5zZXJ0X3RkX2ZyYW1lX2xpc3Qoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQsIHVuc2lnbmVkIGZyYW1lbnVtKQoreworCWZyYW1lbnVtICY9IChVSENJX05VTUZSQU1FUyAtIDEpOworCisJdGQtPmZyYW1lID0gZnJhbWVudW07CisKKwkvKiBJcyB0aGVyZSBhIFREIGFscmVhZHkgbWFwcGVkIHRoZXJlPyAqLworCWlmICh1aGNpLT5mbC0+ZnJhbWVfY3B1W2ZyYW1lbnVtXSkgeworCQlzdHJ1Y3QgdWhjaV90ZCAqZnRkLCAqbHRkOworCisJCWZ0ZCA9IHVoY2ktPmZsLT5mcmFtZV9jcHVbZnJhbWVudW1dOworCQlsdGQgPSBsaXN0X2VudHJ5KGZ0ZC0+ZmxfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmdGQtPmZsX2xpc3QsICZmdGQtPmZsX2xpc3QpOworCisJCXRkLT5saW5rID0gbHRkLT5saW5rOworCQl3bWIoKTsKKwkJbHRkLT5saW5rID0gY3B1X3RvX2xlMzIodGQtPmRtYV9oYW5kbGUpOworCX0gZWxzZSB7CisJCXRkLT5saW5rID0gdWhjaS0+ZmwtPmZyYW1lW2ZyYW1lbnVtXTsKKwkJd21iKCk7CisJCXVoY2ktPmZsLT5mcmFtZVtmcmFtZW51bV0gPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSk7CisJCXVoY2ktPmZsLT5mcmFtZV9jcHVbZnJhbWVudW1dID0gdGQ7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV90ZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3RkICp0ZCkKK3sKKwkvKiBJZiBpdCdzIG5vdCBpbnNlcnRlZCwgZG9uJ3QgcmVtb3ZlIGl0ICovCisJaWYgKHRkLT5mcmFtZSA9PSAtMSAmJiBsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpCisJCXJldHVybjsKKworCWlmICh0ZC0+ZnJhbWUgIT0gLTEgJiYgdWhjaS0+ZmwtPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID09IHRkKSB7CisJCWlmIChsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpIHsKKwkJCXVoY2ktPmZsLT5mcmFtZVt0ZC0+ZnJhbWVdID0gdGQtPmxpbms7CisJCQl1aGNpLT5mbC0+ZnJhbWVfY3B1W3RkLT5mcmFtZV0gPSBOVUxMOworCQl9IGVsc2UgeworCQkJc3RydWN0IHVoY2lfdGQgKm50ZDsKKworCQkJbnRkID0gbGlzdF9lbnRyeSh0ZC0+ZmxfbGlzdC5uZXh0LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CisJCQl1aGNpLT5mbC0+ZnJhbWVbdGQtPmZyYW1lXSA9IGNwdV90b19sZTMyKG50ZC0+ZG1hX2hhbmRsZSk7CisJCQl1aGNpLT5mbC0+ZnJhbWVfY3B1W3RkLT5mcmFtZV0gPSBudGQ7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgdWhjaV90ZCAqcHRkOworCisJCXB0ZCA9IGxpc3RfZW50cnkodGQtPmZsX2xpc3QucHJldiwgc3RydWN0IHVoY2lfdGQsIGZsX2xpc3QpOworCQlwdGQtPmxpbmsgPSB0ZC0+bGluazsKKwl9CisKKwl3bWIoKTsKKwl0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisKKwlsaXN0X2RlbF9pbml0KCZ0ZC0+ZmxfbGlzdCk7CisJdGQtPmZyYW1lID0gLTE7Cit9CisKKy8qCisgKiBJbnNlcnRzIGEgdGQgbGlzdCBpbnRvIHFoLgorICovCitzdGF0aWMgdm9pZCB1aGNpX2luc2VydF90ZHNfaW5fcWgoc3RydWN0IHVoY2lfcWggKnFoLCBzdHJ1Y3QgdXJiICp1cmIsIF9fbGUzMiBicmVhZHRoKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJX19sZTMyICpwbGluazsKKworCS8qIE9yZGVyaW5nIGlzbid0IGltcG9ydGFudCBoZXJlIHlldCBzaW5jZSB0aGUgUUggaGFzbid0IGJlZW4gKi8KKwkvKiBpbnNlcnRlZCBpbnRvIHRoZSBzY2hlZHVsZSB5ZXQgKi8KKwlwbGluayA9ICZxaC0+ZWxlbWVudDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgeworCQkqcGxpbmsgPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSkgfCBicmVhZHRoOworCQlwbGluayA9ICZ0ZC0+bGluazsKKwl9CisJKnBsaW5rID0gVUhDSV9QVFJfVEVSTTsKK30KKworc3RhdGljIHZvaWQgdWhjaV9mcmVlX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfdGQgKnRkKQoreworCWlmICghbGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGxpc3QhXG4iLCB0ZCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+cmVtb3ZlX2xpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIHJlbW92ZV9saXN0IVxuIiwgdGQpOworCWlmICghbGlzdF9lbXB0eSgmdGQtPmZsX2xpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGZsX2xpc3QhXG4iLCB0ZCk7CisKKwlpZiAodGQtPmRldikKKwkJdXNiX3B1dF9kZXYodGQtPmRldik7CisKKwlkbWFfcG9vbF9mcmVlKHVoY2ktPnRkX3Bvb2wsIHRkLCB0ZC0+ZG1hX2hhbmRsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWhjaV9xaCAqdWhjaV9hbGxvY19xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCXN0cnVjdCB1aGNpX3FoICpxaDsKKworCXFoID0gZG1hX3Bvb2xfYWxsb2ModWhjaS0+cWhfcG9vbCwgR0ZQX0FUT01JQywgJmRtYV9oYW5kbGUpOworCWlmICghcWgpCisJCXJldHVybiBOVUxMOworCisJcWgtPmRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlOworCisJcWgtPmVsZW1lbnQgPSBVSENJX1BUUl9URVJNOworCXFoLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKworCXFoLT5kZXYgPSBkZXY7CisJcWgtPnVyYnAgPSBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnFoLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcWgtPnJlbW92ZV9saXN0KTsKKworCXVzYl9nZXRfZGV2KGRldik7CisKKwlyZXR1cm4gcWg7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfZnJlZV9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5saXN0KSkKKwkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJxaCAlcCBsaXN0IG5vdCBlbXB0eSFcbiIsIHFoKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5yZW1vdmVfbGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAicWggJXAgc3RpbGwgaW4gcmVtb3ZlX2xpc3QhXG4iLCBxaCk7CisKKwlpZiAocWgtPmRldikKKwkJdXNiX3B1dF9kZXYocWgtPmRldik7CisKKwlkbWFfcG9vbF9mcmVlKHVoY2ktPnFoX3Bvb2wsIHFoLCBxaC0+ZG1hX2hhbmRsZSk7Cit9CisKKy8qCisgKiBBcHBlbmQgdGhpcyB1cmIncyBxaCBhZnRlciB0aGUgbGFzdCBxaCBpbiBza2VscWgtPmxpc3QKKyAqCisgKiBOb3RlIHRoYXQgdXJiX3ByaXYucXVldWVfbGlzdCBkb2Vzbid0IGhhdmUgYSBzZXBhcmF0ZSBxdWV1ZSBoZWFkOworICogaXQncyBhIHJpbmcgd2l0aCBldmVyeSBlbGVtZW50ICJsaXZlIi4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9pbnNlcnRfcWgoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1cmJfcHJpdiAqdHVyYnA7CisJc3RydWN0IHVoY2lfcWggKmxxaDsKKworCS8qIEdyYWIgdGhlIGxhc3QgUUggKi8KKwlscWggPSBsaXN0X2VudHJ5KHNrZWxxaC0+bGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV9xaCwgbGlzdCk7CisKKwkvKiBQb2ludCB0byB0aGUgbmV4dCBza2VscWggKi8KKwl1cmJwLT5xaC0+bGluayA9IGxxaC0+bGluazsKKwl3bWIoKTsJCQkJLyogT3JkZXJpbmcgaXMgaW1wb3J0YW50ICovCisKKwkvKgorCSAqIFBhdGNoIFFIcyBmb3IgcHJldmlvdXMgZW5kcG9pbnQncyBxdWV1ZWQgVVJCcz8gIEhDIGdvZXMKKwkgKiBoZXJlIG5leHQsIG5vdCB0byB0aGUgbmV4dCBza2VscWggaXQgbm93IHBvaW50cyB0by4KKwkgKgorCSAqICAgIGxxaCAtLT4gdGQgLi4uIC0tPiBxaCAuLi4gLS0+IHRkIC0tPiBxaCAuLi4gLS0+IHRkCisJICogICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgdiAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgdgorCSAqICAgICArPC0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisJICogICAgIHYKKwkgKiAgICBuZXdxaCAtLT4gdGQgLi4uIC0tPiB0ZAorCSAqICAgICB8CisJICogICAgIHYKKwkgKiAgICAuLi4KKwkgKgorCSAqIFRoZSBIQyBjb3VsZCBzZWUgKGFuZCB1c2UhKSBhbnkgb2YgdGhlc2UgYXMgd2Ugd3JpdGUgdGhlbS4KKwkgKi8KKwlscWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwlpZiAobHFoLT51cmJwKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHVyYnAsICZscWgtPnVyYnAtPnF1ZXVlX2xpc3QsIHF1ZXVlX2xpc3QpCisJCQl0dXJicC0+cWgtPmxpbmsgPSBscWgtPmxpbms7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmdXJicC0+cWgtPmxpc3QsICZza2VscWgtPmxpc3QpOworfQorCisvKgorICogU3RhcnQgcmVtb3ZhbCBvZiBRSCBmcm9tIHNjaGVkdWxlOyBpdCBmaW5pc2hlcyBuZXh0IGZyYW1lLgorICogVERzIHNob3VsZCBiZSB1bmxpbmtlZCBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfcWggKnFoKQoreworCXN0cnVjdCB1aGNpX3FoICpwcWg7CisJX19sZTMyIG5ld2xpbms7CisKKwlpZiAoIXFoKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE9ubHkgZ28gdGhyb3VnaCB0aGUgaG9vcHMgaWYgaXQncyBhY3R1YWxseSBsaW5rZWQgaW4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5saXN0KSkgeworCisJCS8qIElmIG91ciBxdWV1ZSBpcyBub25lbXB0eSwgbWFrZSB0aGUgbmV4dCBVUkIgdGhlIGhlYWQgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZxaC0+dXJicC0+cXVldWVfbGlzdCkpIHsKKwkJCXN0cnVjdCB1cmJfcHJpdiAqbnVyYnA7CisKKwkJCW51cmJwID0gbGlzdF9lbnRyeShxaC0+dXJicC0+cXVldWVfbGlzdC5uZXh0LAorCQkJCQlzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOworCQkJbnVyYnAtPnF1ZXVlZCA9IDA7CisJCQlsaXN0X2FkZCgmbnVyYnAtPnFoLT5saXN0LCAmcWgtPmxpc3QpOworCQkJbmV3bGluayA9IGNwdV90b19sZTMyKG51cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwkJfSBlbHNlCisJCQluZXdsaW5rID0gcWgtPmxpbms7CisKKwkJLyogRml4IHVwIHRoZSBwcmV2aW91cyBRSCdzIHF1ZXVlIHRvIGxpbmsgdG8gZWl0aGVyCisJCSAqIHRoZSBuZXcgaGVhZCBvZiB0aGlzIHF1ZXVlIG9yIHRoZSBzdGFydCBvZiB0aGUKKwkJICogbmV4dCBlbmRwb2ludCdzIHF1ZXVlLiAqLworCQlwcWggPSBsaXN0X2VudHJ5KHFoLT5saXN0LnByZXYsIHN0cnVjdCB1aGNpX3FoLCBsaXN0KTsKKwkJcHFoLT5saW5rID0gbmV3bGluazsKKwkJaWYgKHBxaC0+dXJicCkgeworCQkJc3RydWN0IHVyYl9wcml2ICp0dXJicDsKKworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dXJicCwgJnBxaC0+dXJicC0+cXVldWVfbGlzdCwKKwkJCQkJcXVldWVfbGlzdCkKKwkJCQl0dXJicC0+cWgtPmxpbmsgPSBuZXdsaW5rOworCQl9CisJCXdtYigpOworCisJCS8qIExlYXZlIHFoLT5saW5rIGluIGNhc2UgdGhlIEhDIGlzIG9uIHRoZSBRSCBub3csIGl0IHdpbGwgKi8KKwkJLyogY29udGludWUgdGhlIHJlc3Qgb2YgdGhlIHNjaGVkdWxlICovCisJCXFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKKworCQlsaXN0X2RlbF9pbml0KCZxaC0+bGlzdCk7CisJfQorCisJbGlzdF9kZWxfaW5pdCgmcWgtPnVyYnAtPnF1ZXVlX2xpc3QpOworCXFoLT51cmJwID0gTlVMTDsKKworCXVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHVoY2kpOworCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnFoX3JlbW92ZV9hZ2UpIHsKKwkJdWhjaV9mcmVlX3BlbmRpbmdfcWhzKHVoY2kpOworCQl1aGNpLT5xaF9yZW1vdmVfYWdlID0gdWhjaS0+ZnJhbWVfbnVtYmVyOworCX0KKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVtb3ZlIGxpc3QgaXMgZW1wdHkuIFNldCB0aGUgSU9DIGJpdCAqLworCS8qIHRvIGZvcmNlIGFuIGludGVycnVwdCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBRSCAqLworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT5xaF9yZW1vdmVfbGlzdCkpCisJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOworCisJbGlzdF9hZGQoJnFoLT5yZW1vdmVfbGlzdCwgJnVoY2ktPnFoX3JlbW92ZV9saXN0KTsKK30KKworc3RhdGljIGludCB1aGNpX2ZpeHVwX3RvZ2dsZShzdHJ1Y3QgdXJiICp1cmIsIHVuc2lnbmVkIGludCB0b2dnbGUpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCWlmICh0b2dnbGUpCisJCQl0ZC0+dG9rZW4gfD0gY3B1X3RvX2xlMzIoVERfVE9LRU5fVE9HR0xFKTsKKwkJZWxzZQorCQkJdGQtPnRva2VuICY9IH5jcHVfdG9fbGUzMihURF9UT0tFTl9UT0dHTEUpOworCisJCXRvZ2dsZSBePSAxOworCX0KKworCXJldHVybiB0b2dnbGU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gd2lsbCBhcHBlbmQgb25lIFVSQidzIFFIIHRvIGFub3RoZXIgVVJCJ3MgUUguIFRoaXMgaXMgZm9yICovCisvKiBxdWV1aW5nIGludGVycnVwdCwgY29udHJvbCBvciBidWxrIHRyYW5zZmVycyAqLworc3RhdGljIHZvaWQgdWhjaV9hcHBlbmRfcXVldWVkX3VyYihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKmV1cmIsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKmV1cmJwLCAqdXJicCwgKmZ1cmJwLCAqbHVyYnA7CisJc3RydWN0IHVoY2lfdGQgKmxsdGQ7CisKKwlldXJicCA9IGV1cmItPmhjcHJpdjsKKwl1cmJwID0gdXJiLT5oY3ByaXY7CisKKwkvKiBGaW5kIHRoZSBmaXJzdCBVUkIgaW4gdGhlIHF1ZXVlICovCisJZnVyYnAgPSBldXJicDsKKwlpZiAoZXVyYnAtPnF1ZXVlZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ1cmJwLCAmZXVyYnAtPnF1ZXVlX2xpc3QsIHF1ZXVlX2xpc3QpCisJCQlpZiAoIWZ1cmJwLT5xdWV1ZWQpCisJCQkJYnJlYWs7CisJfQorCisJbHVyYnAgPSBsaXN0X2VudHJ5KGZ1cmJwLT5xdWV1ZV9saXN0LnByZXYsIHN0cnVjdCB1cmJfcHJpdiwgcXVldWVfbGlzdCk7CisKKwlsbHRkID0gbGlzdF9lbnRyeShsdXJicC0+dGRfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisKKwkvKiBDb250cm9sIHRyYW5zZmVycyBhbHdheXMgc3RhcnQgd2l0aCB0b2dnbGUgMCAqLworCWlmICghdXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpCisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpLAorCQkJCXVoY2lfZml4dXBfdG9nZ2xlKHVyYiwKKwkJCQkJdWhjaV90b2dnbGUodGRfdG9rZW4obGx0ZCkpIF4gMSkpOworCisJLyogQWxsIHFoJ3MgaW4gdGhlIHF1ZXVlIG5lZWQgdG8gbGluayB0byB0aGUgbmV4dCBxdWV1ZSAqLworCXVyYnAtPnFoLT5saW5rID0gZXVyYnAtPnFoLT5saW5rOworCisJd21iKCk7CQkJLyogTWFrZSBzdXJlIHdlIGZsdXNoIGV2ZXJ5dGhpbmcgKi8KKworCWxsdGQtPmxpbmsgPSBjcHVfdG9fbGUzMih1cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKworCWxpc3RfYWRkX3RhaWwoJnVyYnAtPnF1ZXVlX2xpc3QsICZmdXJicC0+cXVldWVfbGlzdCk7CisKKwl1cmJwLT5xdWV1ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2RlbGV0ZV9xdWV1ZWRfdXJiKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCwgKm51cmJwLCAqcHVyYnAsICp0dXJicDsKKwlzdHJ1Y3QgdWhjaV90ZCAqcGx0ZDsKKwl1bnNpZ25lZCBpbnQgdG9nZ2xlOworCisJdXJicCA9IHVyYi0+aGNwcml2OworCisJaWYgKGxpc3RfZW1wdHkoJnVyYnAtPnF1ZXVlX2xpc3QpKQorCQlyZXR1cm47CisKKwludXJicCA9IGxpc3RfZW50cnkodXJicC0+cXVldWVfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOworCisJLyoKKwkgKiBGaXggdXAgdGhlIHRvZ2dsZSBmb3IgdGhlIGZvbGxvd2luZyBVUkJzIGluIHRoZSBxdWV1ZS4KKwkgKiBPbmx5IG5lZWRlZCBmb3IgYnVsayBhbmQgaW50ZXJydXB0OiBjb250cm9sIGFuZCBpc29jaHJvbm91cworCSAqIGVuZHBvaW50cyBkb24ndCBwcm9wYWdhdGUgdG9nZ2xlcyBiZXR3ZWVuIG1lc3NhZ2VzLgorCSAqLworCWlmICh1c2JfcGlwZWJ1bGsodXJiLT5waXBlKSB8fCB1c2JfcGlwZWludCh1cmItPnBpcGUpKSB7CisJCWlmICghdXJicC0+cXVldWVkKQorCQkJLyogV2UganVzdCBzZXQgdGhlIHRvZ2dsZSBpbiB1aGNpX3VubGlua19nZW5lcmljICovCisJCQl0b2dnbGUgPSB1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LAorCQkJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQllbHNlIHsKKwkJCS8qIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHF1ZXVlLCBncmFiIHRoZSAqLworCQkJLyogdG9nZ2xlIGZyb20gdGhlIFREIHByZXZpb3VzIHRvIHVzICovCisJCQlwdXJicCA9IGxpc3RfZW50cnkodXJicC0+cXVldWVfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOworCQkJcGx0ZCA9IGxpc3RfZW50cnkocHVyYnAtPnRkX2xpc3QucHJldiwKKwkJCQkJc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCQkJdG9nZ2xlID0gdWhjaV90b2dnbGUodGRfdG9rZW4ocGx0ZCkpIF4gMTsKKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHVyYnAsICZ1cmJwLT5xdWV1ZV9saXN0LCBxdWV1ZV9saXN0KSB7CisJCQlpZiAoIXR1cmJwLT5xdWV1ZWQpCisJCQkJYnJlYWs7CisJCQl0b2dnbGUgPSB1aGNpX2ZpeHVwX3RvZ2dsZSh0dXJicC0+dXJiLCB0b2dnbGUpOworCQl9CisKKwkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSksIHRvZ2dsZSk7CisJfQorCisJaWYgKHVyYnAtPnF1ZXVlZCkgeworCQkvKiBXZSdyZSBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSAob3IgZW5kKS4gIFRoZSBjYXNlIHdoZXJlCisJCSAqIHdlJ3JlIGF0IHRoZSBoZWFkIGlzIGhhbmRsZWQgaW4gdWhjaV9yZW1vdmVfcWgoKS4gKi8KKwkJcHVyYnAgPSBsaXN0X2VudHJ5KHVyYnAtPnF1ZXVlX2xpc3QucHJldiwgc3RydWN0IHVyYl9wcml2LAorCQkJCXF1ZXVlX2xpc3QpOworCisJCXBsdGQgPSBsaXN0X2VudHJ5KHB1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKwkJaWYgKG51cmJwLT5xdWV1ZWQpCisJCQlwbHRkLT5saW5rID0gY3B1X3RvX2xlMzIobnVyYnAtPnFoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCQllbHNlCisJCQkvKiBUaGUgbmV4dCBVUkIgaGFwcGVucyB0byBiZSB0aGUgYmVnaW5uaW5nLCBzbyAqLworCQkJLyogIHdlJ3JlIHRoZSBsYXN0LCBlbmQgdGhlIGNoYWluICovCisJCQlwbHRkLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKwl9CisKKwkvKiB1cmJwLT5xdWV1ZV9saXN0IGlzIGhhbmRsZWQgaW4gdWhjaV9yZW1vdmVfcWgoKSAqLworfQorCitzdGF0aWMgc3RydWN0IHVyYl9wcml2ICp1aGNpX2FsbG9jX3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXVyYnAgPSBrbWVtX2NhY2hlX2FsbG9jKHVoY2lfdXBfY2FjaGVwLCBTTEFCX0FUT01JQyk7CisJaWYgKCF1cmJwKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCgodm9pZCAqKXVyYnAsIDAsIHNpemVvZigqdXJicCkpOworCisJdXJicC0+aW5zZXJ0dGltZSA9IGppZmZpZXM7CisJdXJicC0+ZnNicnRpbWUgPSBqaWZmaWVzOworCXVyYnAtPnVyYiA9IHVyYjsKKwkKKwlJTklUX0xJU1RfSEVBRCgmdXJicC0+dGRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVyYnAtPnF1ZXVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ1cmJwLT51cmJfbGlzdCk7CisKKwlsaXN0X2FkZF90YWlsKCZ1cmJwLT51cmJfbGlzdCwgJnVoY2ktPnVyYl9saXN0KTsKKworCXVyYi0+aGNwcml2ID0gdXJicDsKKworCXJldHVybiB1cmJwOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2FkZF90ZF90b191cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdWhjaV90ZCAqdGQpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCisJdGQtPnVyYiA9IHVyYjsKKworCWxpc3RfYWRkX3RhaWwoJnRkLT5saXN0LCAmdXJicC0+dGRfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3RkX2Zyb21fdXJiKHN0cnVjdCB1aGNpX3RkICp0ZCkKK3sKKwlpZiAobGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2RlbF9pbml0KCZ0ZC0+bGlzdCk7CisKKwl0ZC0+dXJiID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdWhjaV9kZXN0cm95X3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZCwgKnRtcDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CisKKwl1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCWlmICghdXJicCkKKwkJcmV0dXJuOworCisJaWYgKCFsaXN0X2VtcHR5KCZ1cmJwLT51cmJfbGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidXJiICVwIHN0aWxsIG9uIHVoY2ktPnVyYl9saXN0ICIKKwkJCQkib3IgdWhjaS0+cmVtb3ZlX2xpc3QhXG4iLCB1cmIpOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dGRfcmVtb3ZlX2FnZSkgeworCQl1aGNpX2ZyZWVfcGVuZGluZ190ZHModWhjaSk7CisJCXVoY2ktPnRkX3JlbW92ZV9hZ2UgPSB1aGNpLT5mcmFtZV9udW1iZXI7CisJfQorCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZW1vdmUgbGlzdCBpcyBlbXB0eS4gU2V0IHRoZSBJT0MgYml0ICovCisJLyogdG8gZm9yY2UgYW4gaW50ZXJydXB0IHNvIHdlIGNhbiByZW1vdmUgdGhlIFREJ3MqLworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT50ZF9yZW1vdmVfbGlzdCkpCisJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCXVoY2lfcmVtb3ZlX3RkX2Zyb21fdXJiKHRkKTsKKwkJdWhjaV9yZW1vdmVfdGQodWhjaSwgdGQpOworCQlsaXN0X2FkZCgmdGQtPnJlbW92ZV9saXN0LCAmdWhjaS0+dGRfcmVtb3ZlX2xpc3QpOworCX0KKworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlrbWVtX2NhY2hlX2ZyZWUodWhjaV91cF9jYWNoZXAsIHVyYnApOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2luY19mc2JyKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKworCWlmICgoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0ZTQlIpKSAmJiAhdXJicC0+ZnNicikgeworCQl1cmJwLT5mc2JyID0gMTsKKwkJaWYgKCF1aGNpLT5mc2JyKysgJiYgIXVoY2ktPmZzYnJ0aW1lb3V0KQorCQkJdWhjaS0+c2tlbF90ZXJtX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9mc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCX0KK30KKworc3RhdGljIHZvaWQgdWhjaV9kZWNfZnNicihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisKKwlpZiAoKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19GU0JSKSkgJiYgdXJicC0+ZnNicikgeworCQl1cmJwLT5mc2JyID0gMDsKKwkJaWYgKCEtLXVoY2ktPmZzYnIpCisJCQl1aGNpLT5mc2JydGltZW91dCA9IGppZmZpZXMgKyBGU0JSX0RFTEFZOworCX0KK30KKworLyoKKyAqIE1hcCBzdGF0dXMgdG8gc3RhbmRhcmQgcmVzdWx0IGNvZGVzCisgKgorICogPHN0YXR1cz4gaXMgKHRkX3N0YXR1cyh0ZCkgJiAweEY2MDAwMCksIGEuay5hLgorICogdWhjaV9zdGF0dXNfYml0cyh0ZF9zdGF0dXModGQpKS4KKyAqIE5vdGU6IDxzdGF0dXM+IGRvZXMgbm90IGluY2x1ZGUgdGhlIFREX0NUUkxfTkFLIGJpdC4KKyAqIDxkaXJfb3V0PiBpcyBUcnVlIGZvciBvdXRwdXQgVERzIGFuZCBGYWxzZSBmb3IgaW5wdXQgVERzLgorICovCitzdGF0aWMgaW50IHVoY2lfbWFwX3N0YXR1cyhpbnQgc3RhdHVzLCBpbnQgZGlyX291dCkKK3sKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfQklUU1RVRkYpCQkJLyogQml0c3R1ZmYgZXJyb3IgKi8KKwkJcmV0dXJuIC1FUFJPVE87CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfQ1JDVElNRU8pIHsJCS8qIENSQy9UaW1lb3V0ICovCisJCWlmIChkaXJfb3V0KQorCQkJcmV0dXJuIC1FUFJPVE87CisJCWVsc2UKKwkJCXJldHVybiAtRUlMU0VROworCX0KKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9CQUJCTEUpCQkJLyogQmFiYmxlICovCisJCXJldHVybiAtRU9WRVJGTE9XOworCWlmIChzdGF0dXMgJiBURF9DVFJMX0RCVUZFUlIpCQkJLyogQnVmZmVyIGVycm9yICovCisJCXJldHVybiAtRU5PU1I7CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfU1RBTExFRCkJCQkvKiBTdGFsbGVkICovCisJCXJldHVybiAtRVBJUEU7CisJV0FSTl9PTihzdGF0dXMgJiBURF9DVFJMX0FDVElWRSk7CQkvKiBBY3RpdmUgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnRyb2wgdHJhbnNmZXJzCisgKi8KK3N0YXRpYyBpbnQgdWhjaV9zdWJtaXRfY29udHJvbChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVyYiAqZXVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXN0cnVjdCB1aGNpX3FoICpxaCwgKnNrZWxxaDsKKwl1bnNpZ25lZCBsb25nIGRlc3RpbmF0aW9uLCBzdGF0dXM7CisJaW50IG1heHN6ZSA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaW50IGxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlkbWFfYWRkcl90IGRhdGEgPSB1cmItPnRyYW5zZmVyX2RtYTsKKworCS8qIFRoZSAicGlwZSIgdGhpbmcgY29udGFpbnMgdGhlIGRlc3RpbmF0aW9uIGluIGJpdHMgOC0tMTggKi8KKwlkZXN0aW5hdGlvbiA9ICh1cmItPnBpcGUgJiBQSVBFX0RFVkVQX01BU0spIHwgVVNCX1BJRF9TRVRVUDsKKworCS8qIDMgZXJyb3JzICovCisJc3RhdHVzID0gVERfQ1RSTF9BQ1RJVkUgfCB1aGNpX21heGVycigzKTsKKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCisJCXN0YXR1cyB8PSBURF9DVFJMX0xTOworCisJLyoKKwkgKiBCdWlsZCB0aGUgVEQgZm9yIHRoZSBjb250cm9sIHJlcXVlc3Qgc2V0dXAgcGFja2V0CisJICovCisJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwlpZiAoIXRkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbig3KSwKKwkJdXJiLT5zZXR1cF9kbWEpOworCisJLyoKKwkgKiBJZiBkaXJlY3Rpb24gaXMgInNlbmQiLCBjaGFuZ2UgdGhlIHBhY2tldCBJRCBmcm9tIFNFVFVQICgweDJEKQorCSAqIHRvIE9VVCAoMHhFMSkuICBFbHNlIGNoYW5nZSBpdCBmcm9tIFNFVFVQIHRvIElOICgweDY5KSBhbmQKKwkgKiBzZXQgU2hvcnQgUGFja2V0IERldGVjdCAoU1BEKSBmb3IgYWxsIGRhdGEgcGFja2V0cy4KKwkgKi8KKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkKKwkJZGVzdGluYXRpb24gXj0gKFVTQl9QSURfU0VUVVAgXiBVU0JfUElEX09VVCk7CisJZWxzZSB7CisJCWRlc3RpbmF0aW9uIF49IChVU0JfUElEX1NFVFVQIF4gVVNCX1BJRF9JTik7CisJCXN0YXR1cyB8PSBURF9DVFJMX1NQRDsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBEQVRBIFREJ3MKKwkgKi8KKwl3aGlsZSAobGVuID4gMCkgeworCQlpbnQgcGt0c3plID0gbGVuOworCisJCWlmIChwa3RzemUgPiBtYXhzemUpCisJCQlwa3RzemUgPSBtYXhzemU7CisKKwkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwkJaWYgKCF0ZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIEFsdGVybmF0ZSBEYXRhMC8xIChzdGFydCB3aXRoIERhdGExKSAqLworCQlkZXN0aW5hdGlvbiBePSBURF9UT0tFTl9UT0dHTEU7CisJCisJCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4ocGt0c3plIC0gMSksCisJCQlkYXRhKTsKKworCQlkYXRhICs9IHBrdHN6ZTsKKwkJbGVuIC09IHBrdHN6ZTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBmaW5hbCBURCBmb3IgY29udHJvbCBzdGF0dXMgCisJICovCisJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwlpZiAoIXRkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogSXQncyBJTiBpZiB0aGUgcGlwZSBpcyBhbiBvdXRwdXQgcGlwZSBvciB3ZSdyZSBub3QgZXhwZWN0aW5nCisJICogZGF0YSBiYWNrLgorCSAqLworCWRlc3RpbmF0aW9uICY9IH5URF9UT0tFTl9QSURfTUFTSzsKKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSB8fCAhdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlkZXN0aW5hdGlvbiB8PSBVU0JfUElEX0lOOworCWVsc2UKKwkJZGVzdGluYXRpb24gfD0gVVNCX1BJRF9PVVQ7CisKKwlkZXN0aW5hdGlvbiB8PSBURF9UT0tFTl9UT0dHTEU7CQkvKiBFbmQgaW4gRGF0YTEgKi8KKworCXN0YXR1cyAmPSB+VERfQ1RSTF9TUEQ7CisKKwl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7CisJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMgfCBURF9DVFJMX0lPQywKKwkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihVSENJX05VTExfREFUQV9TSVpFKSwgMCk7CisKKwlxaCA9IHVoY2lfYWxsb2NfcWgodWhjaSwgdXJiLT5kZXYpOworCWlmICghcWgpCisJCXJldHVybiAtRU5PTUVNOworCisJdXJicC0+cWggPSBxaDsKKwlxaC0+dXJicCA9IHVyYnA7CisKKwl1aGNpX2luc2VydF90ZHNfaW5fcWgocWgsIHVyYiwgVUhDSV9QVFJfQlJFQURUSCk7CisKKwkvKiBMb3ctc3BlZWQgdHJhbnNmZXJzIGdldCBhIGRpZmZlcmVudCBxdWV1ZSwgYW5kIHdvbid0IGhvZyB0aGUgYnVzLgorCSAqIEFsc28sIHNvbWUgZGV2aWNlcyBlbnVtZXJhdGUgYmV0dGVyIHdpdGhvdXQgRlNCUjsgdGhlIGVhc2llc3Qgd2F5CisJICogdG8gZG8gdGhhdCBpcyB0byBwdXQgVVJCcyBvbiB0aGUgbG93LXNwZWVkIHF1ZXVlIHdoaWxlIHRoZSBkZXZpY2UKKwkgKiBpcyBpbiB0aGUgREVGQVVMVCBzdGF0ZS4gKi8KKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cgfHwKKwkJCXVyYi0+ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfREVGQVVMVCkKKwkJc2tlbHFoID0gdWhjaS0+c2tlbF9sc19jb250cm9sX3FoOworCWVsc2UgeworCQlza2VscWggPSB1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWg7CisJCXVoY2lfaW5jX2ZzYnIodWhjaSwgdXJiKTsKKwl9CisKKwlpZiAoZXVyYikKKwkJdWhjaV9hcHBlbmRfcXVldWVkX3VyYih1aGNpLCBldXJiLCB1cmIpOworCWVsc2UKKwkJdWhjaV9pbnNlcnRfcWgodWhjaSwgc2tlbHFoLCB1cmIpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworLyoKKyAqIElmIGNvbnRyb2wtSU4gdHJhbnNmZXIgd2FzIHNob3J0LCB0aGUgc3RhdHVzIHBhY2tldCB3YXNuJ3Qgc2VudC4KKyAqIFRoaXMgcm91dGluZSBjaGFuZ2VzIHRoZSBlbGVtZW50IHBvaW50ZXIgaW4gdGhlIFFIIHRvIHBvaW50IGF0IHRoZQorICogc3RhdHVzIFRELiAgSXQncyBzYWZlIHRvIGRvIHRoaXMgZXZlbiB3aGlsZSB0aGUgUUggaXMgbGl2ZSwgYmVjYXVzZQorICogdGhlIGhhcmR3YXJlIG9ubHkgdXBkYXRlcyB0aGUgZWxlbWVudCBwb2ludGVyIGZvbGxvd2luZyBhIHN1Y2Nlc3NmdWwKKyAqIHRyYW5zZmVyLiAgVGhlIGluYWN0aXZlIFREIGZvciB0aGUgc2hvcnQgcGFja2V0IHdvbid0IGNhdXNlIGFuIHVwZGF0ZSwKKyAqIHNvIHRoZSBwb2ludGVyIHdvbid0IGdldCBvdmVyd3JpdHRlbi4gIFRoZSBuZXh0IHRpbWUgdGhlIGNvbnRyb2xsZXIKKyAqIHNlZXMgdGhpcyBRSCwgaXQgd2lsbCBzZW5kIHRoZSBzdGF0dXMgcGFja2V0LgorICovCitzdGF0aWMgaW50IHVzYl9jb250cm9sX3JldHJpZ2dlcl9zdGF0dXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKworCXVyYnAtPnNob3J0X2NvbnRyb2xfcGFja2V0ID0gMTsKKworCXRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKwl1cmJwLT5xaC0+ZWxlbWVudCA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKKworc3RhdGljIGludCB1aGNpX3Jlc3VsdF9jb250cm9sKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCwgKmhlYWQ7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IHJldCA9IDA7CisKKwlpZiAobGlzdF9lbXB0eSgmdXJicC0+dGRfbGlzdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaGVhZCA9ICZ1cmJwLT50ZF9saXN0OworCisJaWYgKHVyYnAtPnNob3J0X2NvbnRyb2xfcGFja2V0KSB7CisJCXRtcCA9IGhlYWQtPnByZXY7CisJCWdvdG8gc3RhdHVzX3N0YWdlOworCX0KKworCXRtcCA9IGhlYWQtPm5leHQ7CisJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJLyogVGhlIGZpcnN0IFREIGlzIHRoZSBTRVRVUCBzdGFnZSwgY2hlY2sgdGhlIHN0YXR1cywgYnV0IHNraXAgKi8KKwkvKiAgdGhlIGNvdW50ICovCisJc3RhdHVzID0gdWhjaV9zdGF0dXNfYml0cyh0ZF9zdGF0dXModGQpKTsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHRkX2Vycm9yOworCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCS8qIFRoZSByZXN0IG9mIHRoZSBURCdzIChidXQgdGhlIGxhc3QpIGFyZSBkYXRhICovCisJdG1wID0gdG1wLT5uZXh0OworCXdoaWxlICh0bXAgIT0gaGVhZCAmJiB0bXAtPm5leHQgIT0gaGVhZCkgeworCQl1bnNpZ25lZCBpbnQgY3RybHN0YXQ7CisKKwkJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJY3RybHN0YXQgPSB0ZF9zdGF0dXModGQpOworCQlzdGF0dXMgPSB1aGNpX3N0YXR1c19iaXRzKGN0cmxzdGF0KTsKKwkJaWYgKHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KTsKKworCQlpZiAoc3RhdHVzKQorCQkJZ290byB0ZF9lcnJvcjsKKworCQkvKiBDaGVjayB0byBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBzaG9ydCBwYWNrZXQgKi8KKwkJaWYgKHVoY2lfYWN0dWFsX2xlbmd0aChjdHJsc3RhdCkgPAorCQkJCXVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRkX3Rva2VuKHRkKSkpIHsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgeworCQkJCXJldCA9IC1FUkVNT1RFSU87CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCWlmICh1aGNpX3BhY2tldGlkKHRkX3Rva2VuKHRkKSkgPT0gVVNCX1BJRF9JTikKKwkJCQlyZXR1cm4gdXNiX2NvbnRyb2xfcmV0cmlnZ2VyX3N0YXR1cyh1aGNpLCB1cmIpOworCQkJZWxzZQorCQkJCXJldHVybiAwOworCQl9CisJfQorCitzdGF0dXNfc3RhZ2U6CisJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJLyogQ29udHJvbCBzdGF0dXMgc3RhZ2UgKi8KKwlzdGF0dXMgPSB0ZF9zdGF0dXModGQpOworCisjaWZkZWYgSV9IQVZFX0JVR0dZX0FQQ19CQUNLVVBTCisJLyogQVBDIEJhY2tVUFMgUHJvIGtsdWRnZSAqLworCS8qIEl0IHRyaWVzIHRvIHNlbmQgYWxsIG9mIHRoZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgdGhlIGFtb3VudCAqLworCS8qICB3ZSByZXF1ZXN0ZWQgKi8KKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9JT0MgJiYJLyogSU9DIGlzIG1hc2tlZCBvdXQgYnkgdWhjaV9zdGF0dXNfYml0cyAqLworCSAgICBzdGF0dXMgJiBURF9DVFJMX0FDVElWRSAmJgorCSAgICBzdGF0dXMgJiBURF9DVFJMX05BSykKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCXN0YXR1cyA9IHVoY2lfc3RhdHVzX2JpdHMoc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHRkX2Vycm9yOworCisJcmV0dXJuIDA7CisKK3RkX2Vycm9yOgorCXJldCA9IHVoY2lfbWFwX3N0YXR1cyhzdGF0dXMsIHVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSkpOworCitlcnI6CisJaWYgKChkZWJ1ZyA9PSAxICYmIHJldCAhPSAtRVBJUEUpIHx8IGRlYnVnID4gMSkgeworCQkvKiBTb21lIGRlYnVnZ2luZyBjb2RlICovCisJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlczogZmFpbGVkIHdpdGggc3RhdHVzICV4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCQlpZiAoZXJyYnVmKSB7CisJCQkvKiBQcmludCB0aGUgY2hhaW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCQkJdWhjaV9zaG93X3FoKHVyYnAtPnFoLCBlcnJidWYsIEVSUkJVRl9MRU4sIDApOworCisJCQlscHJpbnRrKGVycmJ1Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ29tbW9uIHN1Ym1pdCBmb3IgYnVsayBhbmQgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbnQgdWhjaV9zdWJtaXRfY29tbW9uKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXJiICpldXJiLCBzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgdWhjaV9xaCAqcWg7CisJdW5zaWduZWQgbG9uZyBkZXN0aW5hdGlvbiwgc3RhdHVzOworCWludCBtYXhzemUgPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCWludCBsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCWRtYV9hZGRyX3QgZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlICJwaXBlIiB0aGluZyBjb250YWlucyB0aGUgZGVzdGluYXRpb24gaW4gYml0cyA4LS0xOCAqLworCWRlc3RpbmF0aW9uID0gKHVyYi0+cGlwZSAmIFBJUEVfREVWRVBfTUFTSykgfCB1c2JfcGFja2V0aWQodXJiLT5waXBlKTsKKworCXN0YXR1cyA9IHVoY2lfbWF4ZXJyKDMpIHwgVERfQ1RSTF9BQ1RJVkU7CisJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKQorCQlzdGF0dXMgfD0gVERfQ1RSTF9MUzsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQlzdGF0dXMgfD0gVERfQ1RSTF9TUEQ7CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBEQVRBIFREJ3MKKwkgKi8KKwlkbyB7CS8qIEFsbG93IHplcm8gbGVuZ3RoIHBhY2tldHMgKi8KKwkJaW50IHBrdHN6ZSA9IG1heHN6ZTsKKworCQlpZiAocGt0c3plID49IGxlbikgeworCQkJcGt0c3plID0gbGVuOworCQkJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spKQorCQkJCXN0YXR1cyAmPSB+VERfQ1RSTF9TUEQ7CisJCX0KKworCQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdXJiLT5kZXYpOworCQlpZiAoIXRkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOworCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUgLSAxKSB8CisJCQkodXNiX2dldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIDw8IFREX1RPS0VOX1RPR0dMRV9TSElGVCksCisJCQlkYXRhKTsKKworCQlkYXRhICs9IHBrdHN6ZTsKKwkJbGVuIC09IG1heHN6ZTsKKworCQl1c2JfZG90b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCX0gd2hpbGUgKGxlbiA+IDApOworCisJLyoKKwkgKiBVUkJfWkVST19QQUNLRVQgbWVhbnMgYWRkaW5nIGEgMC1sZW5ndGggcGFja2V0LCBpZiBkaXJlY3Rpb24KKwkgKiBpcyBPVVQgYW5kIHRoZSB0cmFuc2Zlcl9sZW5ndGggd2FzIGFuIGV4YWN0IG11bHRpcGxlIG9mIG1heHN6ZSwKKwkgKiBoZW5jZSAobGVuID0gdHJhbnNmZXJfbGVuZ3RoIC0gTiAqIG1heHN6ZSkgPT0gMAorCSAqIGhvd2V2ZXIsIGlmIHRyYW5zZmVyX2xlbmd0aCA9PSAwLCB0aGUgemVybyBwYWNrZXQgd2FzIGFscmVhZHkKKwkgKiBwcmVwYXJlZCBhYm92ZS4KKwkgKi8KKwlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSAmJiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkgJiYKKwkgICAgIWxlbiAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwkJaWYgKCF0ZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4oVUhDSV9OVUxMX0RBVEFfU0laRSkgfAorCQkJKHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCSB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSA8PCBURF9UT0tFTl9UT0dHTEVfU0hJRlQpLAorCQkJZGF0YSk7CisKKwkJdXNiX2RvdG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwl9CisKKwkvKiBTZXQgdGhlIGludGVycnVwdC1vbi1jb21wbGV0aW9uIGZsYWcgb24gdGhlIGxhc3QgcGFja2V0LgorCSAqIEEgbW9yZS1vci1sZXNzIHR5cGljYWwgNCBLQiBVUkIgKD0gc2l6ZSBvZiBvbmUgbWVtb3J5IHBhZ2UpCisJICogd2lsbCByZXF1aXJlIGFib3V0IDMgbXMgdG8gdHJhbnNmZXI7IHRoYXQncyBhIGxpdHRsZSBvbiB0aGUKKwkgKiBmYXN0IHNpZGUgYnV0IG5vdCBlbm91Z2ggdG8ganVzdGlmeSBkZWxheWluZyBhbiBpbnRlcnJ1cHQKKwkgKiBtb3JlIHRoYW4gMiBvciAzIFVSQnMsIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBVUkJfTk9fSU5URVJSVVBUCisJICogZmxhZyBzZXR0aW5nLiAqLworCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCisJcWggPSB1aGNpX2FsbG9jX3FoKHVoY2ksIHVyYi0+ZGV2KTsKKwlpZiAoIXFoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVyYnAtPnFoID0gcWg7CisJcWgtPnVyYnAgPSB1cmJwOworCisJLyogQWx3YXlzIGJyZWFkdGggZmlyc3QgKi8KKwl1aGNpX2luc2VydF90ZHNfaW5fcWgocWgsIHVyYiwgVUhDSV9QVFJfQlJFQURUSCk7CisKKwlpZiAoZXVyYikKKwkJdWhjaV9hcHBlbmRfcXVldWVkX3VyYih1aGNpLCBldXJiLCB1cmIpOworCWVsc2UKKwkJdWhjaV9pbnNlcnRfcWgodWhjaSwgc2tlbHFoLCB1cmIpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworLyoKKyAqIENvbW1vbiByZXN1bHQgZm9yIGJ1bGsgYW5kIGludGVycnVwdAorICovCitzdGF0aWMgaW50IHVoY2lfcmVzdWx0X2NvbW1vbihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJaW50IHJldCA9IDA7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKKwkJdW5zaWduZWQgaW50IGN0cmxzdGF0ID0gdGRfc3RhdHVzKHRkKTsKKworCQlzdGF0dXMgPSB1aGNpX3N0YXR1c19iaXRzKGN0cmxzdGF0KTsKKwkJaWYgKHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KTsKKworCQlpZiAoc3RhdHVzKQorCQkJZ290byB0ZF9lcnJvcjsKKworCQlpZiAodWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KSA8CisJCQkJdWhjaV9leHBlY3RlZF9sZW5ndGgodGRfdG9rZW4odGQpKSkgeworCQkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSB7CisJCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK3RkX2Vycm9yOgorCXJldCA9IHVoY2lfbWFwX3N0YXR1cyhzdGF0dXMsIHVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSkpOworCitlcnI6CisJLyogCisJICogRW5hYmxlIHRoaXMgY2h1bmsgb2YgY29kZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBtb3JlIGRlYnVnZ2luZy4KKwkgKiBCdXQgYmUgY2FyZWZ1bCwgaXQgaGFzIHRoZSB0ZW5kYW5jeSB0byBzdGFydmUgb3V0IGtodWJkIGFuZCBwcmV2ZW50CisJICogZGlzY29ubmVjdHMgZnJvbSBoYXBwZW5pbmcgc3VjY2Vzc2Z1bGx5IGlmIHlvdSBoYXZlIGEgc2xvdyBkZWJ1ZworCSAqIGxvZyBpbnRlcmZhY2UgKGxpa2UgYSBzZXJpYWwgY29uc29sZS4KKwkgKi8KKyNpZiAwCisJaWYgKChkZWJ1ZyA9PSAxICYmIHJldCAhPSAtRVBJUEUpIHx8IGRlYnVnID4gMSkgeworCQkvKiBTb21lIGRlYnVnZ2luZyBjb2RlICovCisJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlczogZmFpbGVkIHdpdGggc3RhdHVzICV4XG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCQlpZiAoZXJyYnVmKSB7CisJCQkvKiBQcmludCB0aGUgY2hhaW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCQkJdWhjaV9zaG93X3FoKHVyYnAtPnFoLCBlcnJidWYsIEVSUkJVRl9MRU4sIDApOworCisJCQlscHJpbnRrKGVycmJ1Zik7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1aGNpX3N1Ym1pdF9idWxrKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXJiICpldXJiKQoreworCWludCByZXQ7CisKKwkvKiBDYW4ndCBoYXZlIGxvdy1zcGVlZCBidWxrIHRyYW5zZmVycyAqLworCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB1aGNpX3N1Ym1pdF9jb21tb24odWhjaSwgdXJiLCBldXJiLCB1aGNpLT5za2VsX2J1bGtfcWgpOworCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQl1aGNpX2luY19mc2JyKHVoY2ksIHVyYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1aGNpX3N1Ym1pdF9pbnRlcnJ1cHQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1cmIgKmV1cmIpCit7CisJLyogVVNCIDEuMSBpbnRlcnJ1cHQgdHJhbnNmZXJzIG9ubHkgaW52b2x2ZSBvbmUgcGFja2V0IHBlciBpbnRlcnZhbDsKKwkgKiB0aGF0J3MgdGhlIHVoY2lfc3VibWl0X2NvbW1vbigpICJicmVhZHRoIGZpcnN0IiBwb2xpY3kuICBEcml2ZXJzCisJICogY2FuIHN1Ym1pdCB1cmJzIG9mIGFueSBsZW5ndGgsIGJ1dCBsb25nZXIgb25lcyBtaWdodCBuZWVkIG1hbnkKKwkgKiBpbnRlcnZhbHMgdG8gY29tcGxldGUuCisJICovCisJcmV0dXJuIHVoY2lfc3VibWl0X2NvbW1vbih1aGNpLCB1cmIsIGV1cmIsIHVoY2ktPnNrZWxxaFtfX2ludGVydmFsX3RvX3NrZWwodXJiLT5pbnRlcnZhbCldKTsKK30KKworLyoKKyAqIElzb2Nocm9ub3VzIHRyYW5zZmVycworICovCitzdGF0aWMgaW50IGlzb2Nocm9ub3VzX2ZpbmRfbGltaXRzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCB1bnNpZ25lZCBpbnQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmVuZCkKK3sKKwlzdHJ1Y3QgdXJiICpsYXN0X3VyYiA9IE5VTEw7CisJc3RydWN0IHVyYl9wcml2ICp1cDsKKwlpbnQgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodXAsICZ1aGNpLT51cmJfbGlzdCwgdXJiX2xpc3QpIHsKKwkJc3RydWN0IHVyYiAqdSA9IHVwLT51cmI7CisKKwkJLyogbG9vayBmb3IgcGVuZGluZyBVUkIncyB3aXRoIGlkZW50aWNhbCBwaXBlIGhhbmRsZSAqLworCQlpZiAoKHVyYi0+cGlwZSA9PSB1LT5waXBlKSAmJiAodXJiLT5kZXYgPT0gdS0+ZGV2KSAmJgorCQkgICAgKHUtPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpICYmICh1ICE9IHVyYikpIHsKKwkJCWlmICghbGFzdF91cmIpCisJCQkJKnN0YXJ0ID0gdS0+c3RhcnRfZnJhbWU7CisJCQlsYXN0X3VyYiA9IHU7CisJCX0KKwl9CisKKwlpZiAobGFzdF91cmIpIHsKKwkJKmVuZCA9IChsYXN0X3VyYi0+c3RhcnRfZnJhbWUgKyBsYXN0X3VyYi0+bnVtYmVyX29mX3BhY2tldHMgKgorCQkJCWxhc3RfdXJiLT5pbnRlcnZhbCkgJiAoVUhDSV9OVU1GUkFNRVMtMSk7CisJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IC0xOwkvKiBubyBwcmV2aW91cyB1cmIgZm91bmQgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNvY2hyb25vdXNfZmluZF9zdGFydChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgbGltaXRzOworCXVuc2lnbmVkIGludCBzdGFydCA9IDAsIGVuZCA9IDA7CisKKwlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA+IDkwMCkJLyogOTAwPyBXaHk/ICovCisJCXJldHVybiAtRUZCSUc7CisKKwlsaW1pdHMgPSBpc29jaHJvbm91c19maW5kX2xpbWl0cyh1aGNpLCB1cmIsICZzdGFydCwgJmVuZCk7CisKKwlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9JU09fQVNBUCkgeworCQlpZiAobGltaXRzKSB7CisJCQl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKKwkJCXVyYi0+c3RhcnRfZnJhbWUgPSAodWhjaS0+ZnJhbWVfbnVtYmVyICsgMTApCisJCQkJCSYgKFVIQ0lfTlVNRlJBTUVTIC0gMSk7CisJCX0gZWxzZQorCQkJdXJiLT5zdGFydF9mcmFtZSA9IGVuZDsKKwl9IGVsc2UgeworCQl1cmItPnN0YXJ0X2ZyYW1lICY9IChVSENJX05VTUZSQU1FUyAtIDEpOworCQkvKiBGSVhNRTogU2FuaXR5IGNoZWNrICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJc29jaHJvbm91cyB0cmFuc2ZlcnMKKyAqLworc3RhdGljIGludCB1aGNpX3N1Ym1pdF9pc29jaHJvbm91cyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJaW50IGksIHJldCwgZnJhbWU7CisJaW50IHN0YXR1cywgZGVzdGluYXRpb247CisKKwlzdGF0dXMgPSBURF9DVFJMX0FDVElWRSB8IFREX0NUUkxfSU9TOworCWRlc3RpbmF0aW9uID0gKHVyYi0+cGlwZSAmIFBJUEVfREVWRVBfTUFTSykgfCB1c2JfcGFja2V0aWQodXJiLT5waXBlKTsKKworCXJldCA9IGlzb2Nocm9ub3VzX2ZpbmRfc3RhcnQodWhjaSwgdXJiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyssIGZyYW1lICs9IHVyYi0+aW50ZXJ2YWwpIHsKKwkJaWYgKCF1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCkKKwkJCWNvbnRpbnVlOworCisJCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpLCB1cmItPmRldik7CisJCWlmICghdGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7CisJCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoIC0gMSksCisJCQl1cmItPnRyYW5zZmVyX2RtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKworCQlpZiAoaSArIDEgPj0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykKKwkJCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCisJCXVoY2lfaW5zZXJ0X3RkX2ZyYW1lX2xpc3QodWhjaSwgdGQsIGZyYW1lKTsKKwl9CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCitzdGF0aWMgaW50IHVoY2lfcmVzdWx0X2lzb2Nocm9ub3VzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJaW50IHN0YXR1czsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgeworCQlpbnQgYWN0bGVuZ3RoOworCQl1bnNpZ25lZCBpbnQgY3RybHN0YXQgPSB0ZF9zdGF0dXModGQpOworCisJCWlmIChjdHJsc3RhdCAmIFREX0NUUkxfQUNUSVZFKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQlhY3RsZW5ndGggPSB1aGNpX2FjdHVhbF9sZW5ndGgoY3RybHN0YXQpOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSBhY3RsZW5ndGg7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBhY3RsZW5ndGg7CisKKwkJc3RhdHVzID0gdWhjaV9tYXBfc3RhdHVzKHVoY2lfc3RhdHVzX2JpdHMoY3RybHN0YXQpLAorCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IHN0YXR1czsKKwkJaWYgKHN0YXR1cykgeworCQkJdXJiLT5lcnJvcl9jb3VudCsrOworCQkJcmV0ID0gc3RhdHVzOworCQl9CisKKwkJaSsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXJiICp1aGNpX2ZpbmRfdXJiX2VwKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXA7CisKKwkvKiBXZSBkb24ndCBtYXRjaCBJc29jIHRyYW5zZmVycyBzaW5jZSB0aGV5IGFyZSBzcGVjaWFsICovCisJaWYgKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodXAsICZ1aGNpLT51cmJfbGlzdCwgdXJiX2xpc3QpIHsKKwkJc3RydWN0IHVyYiAqdSA9IHVwLT51cmI7CisKKwkJaWYgKHUtPmRldiA9PSB1cmItPmRldiAmJiB1LT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQkvKiBGb3IgY29udHJvbCwgaWdub3JlIHRoZSBkaXJlY3Rpb24gKi8KKwkJCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSAmJgorCQkJICAgICh1LT5waXBlICYgflVTQl9ESVJfSU4pID09ICh1cmItPnBpcGUgJiB+VVNCX0RJUl9JTikpCisJCQkJcmV0dXJuIHU7CisJCQllbHNlIGlmICh1LT5waXBlID09IHVyYi0+cGlwZSkKKwkJCQlyZXR1cm4gdTsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHVoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwkJc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWludCByZXQ7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1cmIgKmV1cmI7CisJaW50IGJ1c3RpbWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gdXJiLT5zdGF0dXM7CisJaWYgKHJldCAhPSAtRUlOUFJPR1JFU1MpCQkvKiBVUkIgYWxyZWFkeSB1bmxpbmtlZCEgKi8KKwkJZ290byBvdXQ7CisKKwlldXJiID0gdWhjaV9maW5kX3VyYl9lcCh1aGNpLCB1cmIpOworCisJaWYgKCF1aGNpX2FsbG9jX3VyYl9wcml2KHVoY2ksIHVyYikpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQlyZXQgPSB1aGNpX3N1Ym1pdF9jb250cm9sKHVoY2ksIHVyYiwgZXVyYik7CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCWlmICghZXVyYikgeworCQkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7CisJCQlpZiAoYnVzdGltZSA8IDApCisJCQkJcmV0ID0gYnVzdGltZTsKKwkJCWVsc2UgeworCQkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIGV1cmIpOworCQkJCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQkJCQl1c2JfY2xhaW1fYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIGJ1c3RpbWUsIDApOworCQkJfQorCQl9IGVsc2UgewkvKiBpbmhlcml0IGZyb20gcGFyZW50ICovCisJCQl1cmItPmJhbmR3aWR0aCA9IGV1cmItPmJhbmR3aWR0aDsKKwkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIGV1cmIpOworCQl9CisJCWJyZWFrOworCWNhc2UgUElQRV9CVUxLOgorCQlyZXQgPSB1aGNpX3N1Ym1pdF9idWxrKHVoY2ksIHVyYiwgZXVyYik7CisJCWJyZWFrOworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7CisJCWlmIChidXN0aW1lIDwgMCkgeworCQkJcmV0ID0gYnVzdGltZTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gdWhjaV9zdWJtaXRfaXNvY2hyb25vdXModWhjaSwgdXJiKTsKKwkJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCisJCQl1c2JfY2xhaW1fYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIGJ1c3RpbWUsIDEpOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0ICE9IC1FSU5QUk9HUkVTUykgeworCQkvKiBTdWJtaXQgZmFpbGVkLCBzbyBkZWxldGUgaXQgZnJvbSB0aGUgdXJiX2xpc3QgKi8KKwkJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gdXJiLT5oY3ByaXY7CisKKwkJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOworCQl1aGNpX2Rlc3Ryb3lfdXJiX3ByaXYodWhjaSwgdXJiKTsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSByZXN1bHQgb2YgYSB0cmFuc2ZlcgorICovCitzdGF0aWMgdm9pZCB1aGNpX3RyYW5zZmVyX3Jlc3VsdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcmV0ID0gLUVJTlBST0dSRVNTOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKworCXVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQkvKiBVUkIgYWxyZWFkeSBkZXF1ZXVlZCAqLworCQlnb3RvIG91dDsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJcmV0ID0gdWhjaV9yZXN1bHRfY29udHJvbCh1aGNpLCB1cmIpOworCQlicmVhazsKKwljYXNlIFBJUEVfQlVMSzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQlyZXQgPSB1aGNpX3Jlc3VsdF9jb21tb24odWhjaSwgdXJiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlyZXQgPSB1aGNpX3Jlc3VsdF9pc29jaHJvbm91cyh1aGNpLCB1cmIpOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0ID09IC1FSU5QUk9HUkVTUykKKwkJZ290byBvdXQ7CisJdXJiLT5zdGF0dXMgPSByZXQ7CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJY2FzZSBQSVBFX0JVTEs6CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkvKiBSZWxlYXNlIGJhbmR3aWR0aCBmb3IgSW50ZXJydXB0IG9yIElzb2MuIHRyYW5zZmVycyAqLworCQlpZiAodXJiLT5iYW5kd2lkdGgpCisJCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMSk7CisJCXVoY2lfdW5saW5rX2dlbmVyaWModWhjaSwgdXJiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJLyogUmVsZWFzZSBiYW5kd2lkdGggZm9yIEludGVycnVwdCBvciBJc29jLiB0cmFuc2ZlcnMgKi8KKwkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlbGVhc2UgaWYgd2UgaGF2ZSBhIHF1ZXVlZCBVUkIgKi8KKwkJaWYgKGxpc3RfZW1wdHkoJnVyYnAtPnF1ZXVlX2xpc3QpICYmIHVyYi0+YmFuZHdpZHRoKQorCQkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCQllbHNlCisJCQkvKiBiYW5kd2lkdGggd2FzIHBhc3NlZCBvbiB0byBxdWV1ZWQgVVJCLCAqLworCQkJLyogc28gZG9uJ3QgbGV0IHVzYl91bmxpbmtfdXJiKCkgcmVsZWFzZSBpdCAqLworCQkJdXJiLT5iYW5kd2lkdGggPSAwOworCQl1aGNpX3VubGlua19nZW5lcmljKHVoY2ksIHVyYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKHVoY2lfZGV2KHVoY2kpLCAiJXM6IHVua25vd24gcGlwZSB0eXBlICVkICIKKwkJCQkiZm9yIHVyYiAlcFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHVzYl9waXBldHlwZSh1cmItPnBpcGUpLCB1cmIpOworCX0KKworCS8qIE1vdmUgaXQgZnJvbSB1aGNpLT51cmJfbGlzdCB0byB1aGNpLT5jb21wbGV0ZV9saXN0ICovCisJdWhjaV9tb3ZldG9fY29tcGxldGUodWhjaSwgdXJicCk7CisKK291dDoKKwlzcGluX3VubG9jaygmdXJiLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdWhjaV91bmxpbmtfZ2VuZXJpYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJaW50IHByZXZhY3RpdmUgPSAwOworCisJdWhjaV9kZWNfZnNicih1aGNpLCB1cmIpOwkvKiBTYWZlIHNpbmNlIGl0IGNoZWNrcyAqLworCisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBmaW5kIG91dCB3aGF0IHRoZSBsYXN0IHN1Y2Nlc3NmdWwgdG9nZ2xlIHdhcworCSAqIHNvIHdlIGNhbiB1cGRhdGUgdGhlIGxvY2FsIGRhdGEgdG9nZ2xlIGZvciB0aGUgbmV4dCB0cmFuc2ZlcgorCSAqCisJICogVGhlcmUgYXJlIDIgd2F5cyB0aGUgbGFzdCBzdWNjZXNzZnVsIGNvbXBsZXRlZCBURCBpcyBmb3VuZDoKKwkgKgorCSAqIDEpIFRoZSBURCBpcyBOT1QgYWN0aXZlIGFuZCB0aGUgYWN0dWFsIGxlbmd0aCA8IGV4cGVjdGVkIGxlbmd0aAorCSAqIDIpIFRoZSBURCBpcyBOT1QgYWN0aXZlIGFuZCBpdCdzIHRoZSBsYXN0IFREIGluIHRoZSBjaGFpbgorCSAqCisJICogYW5kIGEgdGhpcmQgd2F5IHRoZSBmaXJzdCB1bmNvbXBsZXRlZCBURCBpcyBmb3VuZDoKKwkgKgorCSAqIDMpIFRoZSBURCBpcyBhY3RpdmUgYW5kIHRoZSBwcmV2aW91cyBURCBpcyBOT1QgYWN0aXZlCisJICoKKwkgKiBDb250cm9sIGFuZCBJc29jaHJvbm91cyBpZ25vcmUgdGhlIHRvZ2dsZSwgc28gdGhpcyBpcyBzYWZlCisJICogZm9yIGFsbCB0eXBlcworCSAqCisJICogRklYTUU6IFRoZSB0b2dnbGUgZml4dXBzIHdvbid0IGJlIDEwMCUgcmVsaWFibGUgdW50aWwgd2UKKwkgKiBjaGFuZ2Ugb3ZlciB0byB1c2luZyBhIHNpbmdsZSBxdWV1ZSBmb3IgZWFjaCBlbmRwb2ludCBhbmQKKwkgKiBzdG9wIHRoZSBxdWV1ZSBiZWZvcmUgdW5saW5raW5nLgorCSAqLworCWhlYWQgPSAmdXJicC0+dGRfbGlzdDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCBoZWFkLCBsaXN0KSB7CisJCXVuc2lnbmVkIGludCBjdHJsc3RhdCA9IHRkX3N0YXR1cyh0ZCk7CisKKwkJaWYgKCEoY3RybHN0YXQgJiBURF9DVFJMX0FDVElWRSkgJiYKKwkJCQkodWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KSA8CisJCQkJIHVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRkX3Rva2VuKHRkKSkgfHwKKwkJCQl0ZC0+bGlzdC5uZXh0ID09IGhlYWQpKQorCQkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdWhjaV9lbmRwb2ludCh0ZF90b2tlbih0ZCkpLAorCQkJCXVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSksCisJCQkJdWhjaV90b2dnbGUodGRfdG9rZW4odGQpKSBeIDEpOworCQllbHNlIGlmICgoY3RybHN0YXQgJiBURF9DVFJMX0FDVElWRSkgJiYgIXByZXZhY3RpdmUpCisJCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1aGNpX2VuZHBvaW50KHRkX3Rva2VuKHRkKSksCisJCQkJdWhjaV9wYWNrZXRvdXQodGRfdG9rZW4odGQpKSwKKwkJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpKTsKKworCQlwcmV2YWN0aXZlID0gY3RybHN0YXQgJiBURF9DVFJMX0FDVElWRTsKKwl9CisKKwl1aGNpX2RlbGV0ZV9xdWV1ZWRfdXJiKHVoY2ksIHVyYik7CisKKwkvKiBUaGUgaW50ZXJydXB0IGxvb3Agd2lsbCByZWNsYWltIHRoZSBRSCdzICovCisJdWhjaV9yZW1vdmVfcWgodWhjaSwgdXJicC0+cWgpOworCXVyYnAtPnFoID0gTlVMTDsKK30KKworc3RhdGljIGludCB1aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKwl1cmJwID0gdXJiLT5oY3ByaXY7CisJaWYgKCF1cmJwKQkJCS8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISAqLworCQlnb3RvIGRvbmU7CisJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOworCisJdWhjaV91bmxpbmtfZ2VuZXJpYyh1aGNpLCB1cmIpOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dXJiX3JlbW92ZV9hZ2UpIHsKKwkJdWhjaV9yZW1vdmVfcGVuZGluZ191cmJwcyh1aGNpKTsKKwkJdWhjaS0+dXJiX3JlbW92ZV9hZ2UgPSB1aGNpLT5mcmFtZV9udW1iZXI7CisJfQorCisJLyogSWYgd2UncmUgdGhlIGZpcnN0LCBzZXQgdGhlIG5leHQgaW50ZXJydXB0IGJpdCAqLworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpKQorCQl1aGNpX3NldF9uZXh0X2ludGVycnVwdCh1aGNpKTsKKwlsaXN0X2FkZF90YWlsKCZ1cmJwLT51cmJfbGlzdCwgJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCk7CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVoY2lfZnNicl90aW1lb3V0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlpbnQgY291bnQgPSAwOworCisJdWhjaV9kZWNfZnNicih1aGNpLCB1cmIpOworCisJdXJicC0+ZnNicl90aW1lb3V0ID0gMTsKKworCS8qCisJICogSWRlYWxseSB3ZSB3b3VsZCB3YW50IHRvIGZpeCBxaC0+ZWxlbWVudCBhcyB3ZWxsLCBidXQgaXQncworCSAqIHJlYWQvd3JpdGUgYnkgdGhlIEhDLCBzbyB0aGF0IGNhbiBpbnRyb2R1Y2UgYSByYWNlLiBJdCdzIG5vdAorCSAqIHJlYWxseSB3b3J0aCB0aGUgaGFzc2xlCisJICovCisKKwloZWFkID0gJnVyYnAtPnRkX2xpc3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgaGVhZCwgbGlzdCkgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gdGhlIGxhc3Qgb25lIChzaW5jZSBpdCdsbCBoYXZlIHRoZQorCQkgKiBURVJNIGJpdCBzZXQpIGFzIHdlbGwgYXMgd2Ugc2tpcCBldmVyeSBzbyBtYW55IFREJ3MgdG8KKwkJICogbWFrZSBzdXJlIGl0IGRvZXNuJ3QgaG9nIHRoZSBiYW5kd2lkdGgKKwkJICovCisJCWlmICh0ZC0+bGlzdC5uZXh0ICE9IGhlYWQgJiYgKGNvdW50ICUgREVQVEhfSU5URVJWQUwpID09CisJCQkJKERFUFRIX0lOVEVSVkFMIC0gMSkpCisJCQl0ZC0+bGluayB8PSBVSENJX1BUUl9ERVBUSDsKKworCQljb3VudCsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ19xaHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXN0cnVjdCB1aGNpX3FoICpxaCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxaCwgdG1wLCAmdWhjaS0+cWhfcmVtb3ZlX2xpc3QsIHJlbW92ZV9saXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJnFoLT5yZW1vdmVfbGlzdCk7CisKKwkJdWhjaV9mcmVlX3FoKHVoY2ksIHFoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfZnJlZV9wZW5kaW5nX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJc3RydWN0IHVoY2lfdGQgKnRkLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRkLCB0bXAsICZ1aGNpLT50ZF9yZW1vdmVfbGlzdCwgcmVtb3ZlX2xpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmdGQtPnJlbW92ZV9saXN0KTsKKworCQl1aGNpX2ZyZWVfdGQodWhjaSwgdGQpOworCX0KK30KKworc3RhdGljIHZvaWQKK3VoY2lfZmluaXNoX3VyYihzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorX19yZWxlYXNlcyh1aGNpLT5sb2NrKQorX19hY3F1aXJlcyh1aGNpLT5sb2NrKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwl1aGNpX2Rlc3Ryb3lfdXJiX3ByaXYodWhjaSwgdXJiKTsKKworCXNwaW5fdW5sb2NrKCZ1aGNpLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgcmVncyk7CisJc3Bpbl9sb2NrKCZ1aGNpLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdWhjaV9maW5pc2hfY29tcGxldGlvbihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1cmJwLCB0bXAsICZ1aGNpLT5jb21wbGV0ZV9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1cmJwLT51cmI7CisKKwkJbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOworCQl1aGNpX2ZpbmlzaF91cmIodWhjaV90b19oY2QodWhjaSksIHVyYiwgcmVncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKworCS8qIFNwbGljZSB0aGUgdXJiX3JlbW92ZV9saXN0IG9udG8gdGhlIGVuZCBvZiB0aGUgY29tcGxldGVfbGlzdCAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCwgdWhjaS0+Y29tcGxldGVfbGlzdC5wcmV2KTsKK30KKworLyogUHJvY2VzcyBldmVudHMgaW4gdGhlIHNjaGVkdWxlLCBidXQgb25seSBpbiBvbmUgdGhyZWFkIGF0IGEgdGltZSAqLworc3RhdGljIHZvaWQgdWhjaV9zY2FuX3NjaGVkdWxlKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwLCAqdG1wOworCisJLyogRG9uJ3QgYWxsb3cgcmUtZW50cmFudCBjYWxscyAqLworCWlmICh1aGNpLT5zY2FuX2luX3Byb2dyZXNzKSB7CisJCXVoY2ktPm5lZWRfcmVzY2FuID0gMTsKKwkJcmV0dXJuOworCX0KKwl1aGNpLT5zY2FuX2luX3Byb2dyZXNzID0gMTsKKyByZXNjYW46CisJdWhjaS0+bmVlZF9yZXNjYW4gPSAwOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisKKwlpZiAodWhjaS0+ZnJhbWVfbnVtYmVyICsgdWhjaS0+aXNfc3RvcHBlZCAhPSB1aGNpLT5xaF9yZW1vdmVfYWdlKQorCQl1aGNpX2ZyZWVfcGVuZGluZ19xaHModWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dGRfcmVtb3ZlX2FnZSkKKwkJdWhjaV9mcmVlX3BlbmRpbmdfdGRzKHVoY2kpOworCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnVyYl9yZW1vdmVfYWdlKQorCQl1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHVoY2kpOworCisJLyogV2FsayB0aGUgbGlzdCBvZiBwZW5kaW5nIFVSQnMgdG8gc2VlIHdoaWNoIG9uZXMgY29tcGxldGVkCisJICogKG11c3QgYmUgX3NhZmUgYmVjYXVzZSB1aGNpX3RyYW5zZmVyX3Jlc3VsdCgpIGRlcXVldWVzIFVSQnMpICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVyYnAsIHRtcCwgJnVoY2ktPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1cmJwLT51cmI7CisKKwkJLyogQ2hlY2tzIHRoZSBzdGF0dXMgYW5kIGRvZXMgYWxsIG9mIHRoZSBtYWdpYyBuZWNlc3NhcnkgKi8KKwkJdWhjaV90cmFuc2Zlcl9yZXN1bHQodWhjaSwgdXJiKTsKKwl9CisJdWhjaV9maW5pc2hfY29tcGxldGlvbih1aGNpLCByZWdzKTsKKworCS8qIElmIHRoZSBjb250cm9sbGVyIGlzIHN0b3BwZWQsIHdlIGNhbiBmaW5pc2ggdGhlc2Ugb2ZmIHJpZ2h0IG5vdyAqLworCWlmICh1aGNpLT5pc19zdG9wcGVkKSB7CisJCXVoY2lfZnJlZV9wZW5kaW5nX3Focyh1aGNpKTsKKwkJdWhjaV9mcmVlX3BlbmRpbmdfdGRzKHVoY2kpOworCQl1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHVoY2kpOworCX0KKworCWlmICh1aGNpLT5uZWVkX3Jlc2NhbikKKwkJZ290byByZXNjYW47CisJdWhjaS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7CisKKwlpZiAobGlzdF9lbXB0eSgmdWhjaS0+dXJiX3JlbW92ZV9saXN0KSAmJgorCSAgICBsaXN0X2VtcHR5KCZ1aGNpLT50ZF9yZW1vdmVfbGlzdCkgJiYKKwkgICAgbGlzdF9lbXB0eSgmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpKQorCQl1aGNpX2NsZWFyX25leHRfaW50ZXJydXB0KHVoY2kpOworCWVsc2UKKwkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CisKKwkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIGZvciBhbiBVUkIgdG8gY29tcGxldGUgKi8KKwl3YWtlX3VwX2FsbCgmdWhjaS0+d2FpdHFoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2U3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgVVNCIEltYWdlaW5nIGRldmljZXMgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIEltYWdpbmcgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX01EQzgwMAorCXRyaXN0YXRlICJVU0IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2Ygc3RpbGwgY2FtZXJhIHRvCisJICB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggZ3Bob3RvIDAuNC4zCisJICBhbmQgaGlnaGVyIChsb29rIGF0IDxodHRwOi8vd3d3LmdwaG90by5vcmcvPikuCisJICBUbyB1c2UgaXQgY3JlYXRlIGEgZGV2aWNlIG5vZGUgd2l0aCAibWtub2QgL2Rldi9tdXN0ZWsgYyAxODAgMzIiIGFuZAorCSAgY29uZmlndXJlIGl0IGluIHlvdXIgc29mdHdhcmUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1kYzgwMC4KKworY29uZmlnIFVTQl9NSUNST1RFSworCXRyaXN0YXRlICJNaWNyb3RlayBYNlVTQiBzY2FubmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgU0NTSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdGVrIFg2VVNCIGFuZAorCSAgcG9zc2libHkgdGhlIFBoYW50b20gMzM2Q1gsIFBoYW50b20gQzYgYW5kIFNjYW5NYWtlciBWNlUoUylMLgorCSAgU3VwcG9ydCBmb3IgYW55dGhpbmcgYnV0IHRoZSBYNiBpcyBleHBlcmltZW50YWwuCisJICBQbGVhc2UgcmVwb3J0IGZhaWx1cmVzIGFuZCBzdWNjZXNzZXMuCisJICBUaGUgc2Nhbm5lciB3aWxsIGFwcGVhciBhcyBhIHNjc2kgZ2VuZXJpYyBkZXZpY2UgdG8gdGhlIHJlc3QKKwkgIG9mIHRoZSBzeXN0ZW0uIFNjc2kgc3VwcG9ydCBpcyByZXF1aXJlZC4KKwkgIFRoaXMgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgY2FsbGVkIG1pY3JvdGVrLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQ4YWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgSW1hZ2UgZHJpdmVycworIworCitvYmotJChDT05GSUdfVVNCX01EQzgwMCkJKz0gbWRjODAwLm8KK29iai0kKENPTkZJR19VU0JfTUlDUk9URUspCSs9IG1pY3JvdGVrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MTcyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0wLDAgKzEsMTA2MyBAQAorLyoKKyAqIGNvcHlyaWdodCAoQykgMTk5OS8yMDAwIGJ5IEhlbm5pbmcgWmFiZWwgPGhlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKy8qCisgKglVU0ItS2VybmVsIERyaXZlciBmb3IgdGhlIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEKKyAqCShjKSAxOTk5LzIwMDAgSGVubmluZyBaYWJlbCA8aGVubmluZ0B1bmktcGFkZXJib3JuLmRlPgorICoKKyAqCisgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LgorICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sbCBvZiB0aGUgY2FtZXJhCisgKiB0byB0aGUgS2VybmVsIE5vZGUuCisgKiBUaGUgRHJpdmVyIHVzZXMgYSBtaXNjIGRldmljZSBOb2RlLiBDcmVhdGUgaXQgd2l0aCA6CisgKiBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMgorICoKKyAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgb25seSBvbmUgY2FtZXJhLgorICogCisgKiBGaXg6IG1kYzgwMCB1c2VkIHNsZWVwX29uIGFuZCBzbGVwdCB3aXRoIGlvX2xvY2sgaGVsZC4KKyAqIENvbnZlcnRlZCBzbGVlcF9vbiB0byB3YWl0cXVldWVzIHdpdGggc2NoZWR1bGVfdGltZW91dCBhbmQgbWFkZSBpb19sb2NrCisgKiBhIHNlbWFwaG9yZSBmcm9tIGEgc3BpbmxvY2suCisgKiBieSBPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm5hbWU+CisgKiAoMDIvMTIvMjAwMSkKKyAqIAorICogSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqICgwOC8wNC8yMDAxKSBnYgorICoKKyAqIHZlcnNpb24gMC43LjUKKyAqIEZpeGVkIHBvdGVudGlhbCBTTVAgcmFjZXMgd2l0aCBTcGlubG9ja3MuCisgKiBUaGFua3MgdG8gT2xpdmVyIE5ldWt1bSA8b2xpdmVyQG5ldWt1bS5uYW1lPiB3aG8gCisgKiBub3RpY2VkIHRoZSByYWNlIGNvbmRpdGlvbnMuCisgKiAoMzAvMTAvMjAwMCkKKyAqCisgKiBGaXhlZDogU2V0dGluZyB1cmItPmRldiBiZWZvcmUgc3VibWl0dGluZyB1cmIuCisgKiBieSBHcmVnIEtIIDxncmVnQGtyb2FoLmNvbT4KKyAqICgxMy8xMC8yMDAwKQorICoKKyAqIHZlcnNpb24gMC43LjMKKyAqIGJ1Z2ZpeCA6IFRoZSBtZGM4MDAtPnN0YXRlIGZpZWxkIGdldHMgc2V0IHRvIFJFQURZIGFmdGVyIHRoZQorICogdGhlIGRpY29ubmVjdCBmdW5jdGlvbiBzZXRzIGl0IHRvIE5PVF9DT05ORUNURUQuIFRoaXMgbWFrZXMgdGhlCisgKiBkcml2ZXIgcnVubmluZyBsaWtlIHRoZSBjYW1lcmEgaXMgY29ubmVjdGVkIGFuZCBjYXVzZXMgc29tZQorICogaGFuZyB1cHMuCisgKgorICogdmVyc2lvbiAwLjcuMQorICogTU9EX0lOQyBhbmQgTU9EX0RFQyBhcmUgY2hhbmdlZCBpbiB1c2JfcHJvYmUgdG8gcHJldmVudCBsb2FkL3VubG9hZAorICogcHJvYmxlbXMgd2hlbiBjb21waWxlZCBhcyBNb2R1bGUuCisgKiAoMDQvMDQvMjAwMCkKKyAqCisgKiBUaGUgbWRjODAwIGRyaXZlciBnZXRzIGFzc2lnbmVkIHRoZSBVU0IgTWlub3IgMzItNDcuIFRoZSBSZWdpc3RyYXRpb24KKyAqIHdhcyB1cGRhdGVkIHRvIHVzZSB0aGVzZSB2YWx1ZXMuCisgKiAoMjYvMDMvMjAwMCkKKyAqCisgKiBUaGUgSW5pdCB1bmQgRXhpdCBNb2R1bGUgRnVuY3Rpb24gYXJlIHVwZGF0ZWQuCisgKiAoMDEvMDMvMjAwMCkKKyAqCisgKiB2ZXJzaW9uIDAuNy4wCisgKiBSZXdyaXRlIG9mIHRoZSBkcml2ZXIgOiBUaGUgZHJpdmVyIG5vdyB1c2VzIFVSQidzLiBUaGUgb2xkIHN0dWZmCisgKiBoYXMgYmVlbiByZW1vdmVkLgorICoKKyAqIHZlcnNpb24gMC42LjAKKyAqIFJld3JpdGUgb2YgdGhpcyBkcml2ZXI6IFRoZSBFbXVsYXRpb24gb2YgdGhlIHJzMjMyIHByb3RvY29sbAorICogaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkcml2ZXIuIEEgc3BlY2lhbCBleGVjdXRlQ29tbWFuZCBmdW5jdGlvbgorICogZm9yIHRoaXMgZHJpdmVyIGlzIGluY2x1ZGVkIHRvIGdwaG90by4KKyAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgdHdvIGtpbmQgb2YgY29tbXVuaWNhdGlvbiB0byBidWxrIGVuZHBvaW50cy4KKyAqIEVpdGhlciB3aXRoIHRoZSBkZXYtPmJ1cy0+b3BzLT5idWxrLi4uIG9yIHdpdGggY2FsbGJhY2sgZnVuY3Rpb24uCisgKiAoMDkvMTEvMTk5OSkKKyAqCisgKiB2ZXJzaW9uIDAuNS4wOgorICogZmlyc3QgVmVyc2lvbiB0aGF0IGdldHMgYSB2ZXJzaW9uIG51bWJlci4gTW9zdCBvZiB0aGUgbmVlZGVkCisgKiBmdW5jdGlvbnMgd29yay4KKyAqICgyMC8xMC8xOTk5KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjcuNSAoMzAvMTAvMjAwMCkiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhlbm5pbmcgWmFiZWwgPGhlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhIgorCisvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCAJMHgwNTVmCisjZGVmaW5lIE1EQzgwMF9QUk9EVUNUX0lECTB4YTgwMAorCisvKiBUaW1lb3V0cyAobXNlYykgKi8KKyNkZWZpbmUgVE9fRE9XTkxPQURfR0VUX1JFQURZCQkxNTAwCisjZGVmaW5lIFRPX0RPV05MT0FEX0dFVF9CVVNZCQkxNTAwCisjZGVmaW5lIFRPX1dSSVRFX0dFVF9SRUFEWQkJMTAwMAorI2RlZmluZSBUT19ERUZBVUxUX0NPTU1BTkQJCTUwMDAKKyNkZWZpbmUgVE9fUkVBRF9GUk9NX0lSUSAJCVRPX0RFRkFVTFRfQ09NTUFORAorI2RlZmluZSBUT19HRVRfUkVBRFkJCQlUT19ERUZBVUxUX0NPTU1BTkQKKworLyogTWlub3IgTnVtYmVyIG9mIHRoZSBkZXZpY2UgKGNyZWF0ZSB3aXRoIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyKSAqLworI2RlZmluZSBNREM4MDBfREVWSUNFX01JTk9SX0JBU0UgMzIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlEYXRhIGFuZCBzdHJ1Y3RzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwordHlwZWRlZiBlbnVtIHsKKwlOT1RfQ09OTkVDVEVELCBSRUFEWSwgV09SS0lORywgRE9XTkxPQUQKK30gbWRjODAwX3N0YXRlOworCisKKy8qIERhdGEgZm9yIHRoZSBkcml2ZXIgKi8KK3N0cnVjdCBtZGM4MDBfZGF0YQoreworCXN0cnVjdCB1c2JfZGV2aWNlICoJZGV2OwkJCS8vIERldmljZSBEYXRhCisJbWRjODAwX3N0YXRlIAkJc3RhdGU7CisKKwl1bnNpZ25lZCBpbnQJCWVuZHBvaW50IFs0XTsKKworCXN0cnVjdCB1cmIgKgkJaXJxX3VyYjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlpcnFfd2FpdDsKKwlpbnQJCQlpcnFfd29rZW47CisJY2hhcioJCQlpcnFfdXJiX2J1ZmZlcjsKKworCWludAkJCWNhbWVyYV9idXN5OyAgICAgICAgICAvLyBpcyBjYW1lcmEgYnVzeSA/CisJaW50IAkJCWNhbWVyYV9yZXF1ZXN0X3JlYWR5OyAvLyBTdGF0dXMgdG8gc3luY2hyb25pemUgd2l0aCBpcnEKKwljaGFyIAkJCWNhbWVyYV9yZXNwb25zZSBbOF07ICAvLyBsYXN0IEJ5dGVzIHNlbmQgYWZ0ZXIgYnVzeQorCisJc3RydWN0IHVyYiAqICAgCQl3cml0ZV91cmI7CisJY2hhcioJCQl3cml0ZV91cmJfYnVmZmVyOworCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7CisJaW50CQkJd3JpdHRlbjsKKworCisJc3RydWN0IHVyYiAqICAgCQlkb3dubG9hZF91cmI7CisJY2hhcioJCQlkb3dubG9hZF91cmJfYnVmZmVyOworCXdhaXRfcXVldWVfaGVhZF90CWRvd25sb2FkX3dhaXQ7CisJaW50CQkJZG93bmxvYWRlZDsKKwlpbnQJCQlkb3dubG9hZF9sZWZ0OwkJLy8gQnl0ZXMgbGVmdCB0byBkb3dubG9hZCA/CisKKworCS8qIERldmljZSBEYXRhICovCisJY2hhcgkJCW91dCBbNjRdOwkvLyBBbnN3ZXIgQnVmZmVyCisJaW50IAkJCW91dF9wdHI7CS8vIEluZGV4IHRvIHRoZSBmaXJzdCBub3QgcmVhZGVuIGJ5dGUKKwlpbnQJCQlvdXRfY291bnQ7CS8vIEJ5dGVzIGluIHRoZSBidWZmZXIKKworCWludAkJCW9wZW47CQkvLyBDYW1lcmEgZGV2aWNlIG9wZW4gPworCXN0cnVjdCBzZW1hcGhvcmUJaW9fbG9jazsJLy8gSU8gLWxvY2sKKworCWNoYXIgCQkJaW4gWzhdOwkJLy8gQ29tbWFuZCBJbnB1dCBCdWZmZXIKKwlpbnQgIAkJCWluX2NvdW50OworCisJaW50CQkJcGljX2luZGV4OwkvLyBDYWNoZSBmb3IgdGhlIEltYWdlc2l6ZSAoLTEgZm9yIG5vdGhpbmcgY2FjaGVkICkKKwlpbnQJCQlwaWNfbGVuOworCWludAkJCW1pbm9yOworfTsKKworCisvKiBTcGVjaWZpY2F0aW9uIG9mIHRoZSBFbmRwb2ludHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgbWRjODAwX2VkIFs0XSA9Cit7CisJeyAKKwkJLmJMZW5ndGggPSAJCTAsCisJCS5iRGVzY3JpcHRvclR5cGUgPQkwLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9CTB4MDEsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKKwkJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLmJJbnRlcnZhbCA9IAkJMCwKKwkJLmJSZWZyZXNoID0gCQkwLAorCQkuYlN5bmNoQWRkcmVzcyA9IAkwLAorCX0sCisJeworCQkuYkxlbmd0aCA9IAkJMCwKKwkJLmJEZXNjcmlwdG9yVHlwZSA9IAkwLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IAkweDgyLAorCQkuYm1BdHRyaWJ1dGVzID0gCTB4MDMsCisJCS53TWF4UGFja2V0U2l6ZSA9IAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKKwl7CisJCS5iTGVuZ3RoID0gCQkwLAorCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4MDMsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKKwkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKKwl7CisJCS5iTGVuZ3RoID0gCQkwLAorCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODQsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKKwkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKK307CisKKy8qIFRoZSBWYXJpYWJsZSB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJVGhlIFVTQiBQYXJ0IG9mIHRoZSBkcml2ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbWRjODAwX2VuZHBvaW50X2VxdWFscyAoc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICphLHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYikKK3sKKwlyZXR1cm4gKAorCQkgICAoIGEtPmJFbmRwb2ludEFkZHJlc3MgPT0gYi0+YkVuZHBvaW50QWRkcmVzcyApCisJCSYmICggYS0+Ym1BdHRyaWJ1dGVzICAgICA9PSBiLT5ibUF0dHJpYnV0ZXMgICAgICkKKwkJJiYgKCBhLT53TWF4UGFja2V0U2l6ZSAgID09IGItPndNYXhQYWNrZXRTaXplICAgKQorCSk7Cit9CisKKworLyoKKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBjYW1lcmEgcmVzcG9uZHMgYnVzeQorICovCitzdGF0aWMgaW50IG1kYzgwMF9pc0J1c3kgKGNoYXIqIGNoKQoreworCWludCBpPTA7CisJd2hpbGUgKGk8OCkKKwl7CisJCWlmIChjaCBbaV0gIT0gKGNoYXIpMHg5OSkKKwkJCXJldHVybiAwOworCQlpKys7CisJfQorCXJldHVybiAxOworfQorCisKKy8qCisgKiBDaGVja3Mgd2hldGhlciB0aGUgQ2FtZXJhIGlzIHJlYWR5CisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2lzUmVhZHkgKGNoYXIgKmNoKQoreworCWludCBpPTA7CisJd2hpbGUgKGk8OCkKKwl7CisJCWlmIChjaCBbaV0gIT0gKGNoYXIpMHhiYikKKwkJCXJldHVybiAwOworCQlpKys7CisJfQorCXJldHVybiAxOworfQorCisKKworLyoKKyAqIFVTQiBJUlEgSGFuZGxlciBmb3IgSW5wdXRMaW5lCisgKi8KK3N0YXRpYyB2b2lkIG1kYzgwMF91c2JfaXJxIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZXMpCit7CisJaW50IGRhdGFfcmVjZWl2ZWQ9MCwgd2FrZV91cDsKKwl1bnNpZ25lZCBjaGFyKiBiPXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwPXVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cyA+PSAwKQorCXsKKworCQkvL2RiZyAoIiVpICVpICVpICVpICVpICVpICVpICVpIFxuIixiWzBdLGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10pOworCisJCWlmIChtZGM4MDBfaXNCdXN5IChiKSkKKwkJeworCQkJaWYgKCFtZGM4MDAtPmNhbWVyYV9idXN5KQorCQkJeworCQkJCW1kYzgwMC0+Y2FtZXJhX2J1c3k9MTsKKwkJCQlkYmcgKCJnZXRzIGJ1c3kiKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChtZGM4MDAtPmNhbWVyYV9idXN5ICYmIG1kYzgwMF9pc1JlYWR5IChiKSkKKwkJCXsKKwkJCQltZGM4MDAtPmNhbWVyYV9idXN5PTA7CisJCQkJZGJnICgiZ2V0cyByZWFkeSIpOworCQkJfQorCQl9CisJCWlmICghKG1kYzgwMF9pc0J1c3kgKGIpIHx8IG1kYzgwMF9pc1JlYWR5IChiKSkpCisJCXsKKwkJCS8qIFN0b3JlIERhdGEgaW4gY2FtZXJhX2Fuc3dlciBmaWVsZCAqLworCQkJZGJnICgiJWkgJWkgJWkgJWkgJWkgJWkgJWkgJWkgIixiWzBdLGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10pOworCisJCQltZW1jcHkgKG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlLGIsOCk7CisJCQlkYXRhX3JlY2VpdmVkPTE7CisJCX0KKwl9CisJd2FrZV91cD0gKCBtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5ID4gMCApCisJCSYmCisJCSgKKwkJCSgobWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeSA9PSAxKSAmJiAoIW1kYzgwMC0+Y2FtZXJhX2J1c3kpKQorCQl8fAorCQkJKChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5ID09IDIpICYmIGRhdGFfcmVjZWl2ZWQpCisJCXx8CisJCQkoKG1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHkgPT0gMykgJiYgKG1kYzgwMC0+Y2FtZXJhX2J1c3kpKQorCQl8fAorCQkJKHVyYi0+c3RhdHVzIDwgMCkKKwkJKTsKKworCWlmICh3YWtlX3VwKQorCXsKKwkJbWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT0wOworCQltZGM4MDAtPmlycV93b2tlbj0xOworCQl3YWtlX3VwICgmbWRjODAwLT5pcnFfd2FpdCk7CisJfQorfQorCisKKy8qCisgKiBXYWl0cyBhIHdoaWxlIHVudGlsIHRoZSBpcnEgcmVzcG9uZHMgdGhhdCBjYW1lcmEgaXMgcmVhZHkKKyAqCisgKiAgbW9kZSA6IDA6IFdhaXQgZm9yIGNhbWVyYSBnZXRzIHJlYWR5CisgKiAgICAgICAgIDE6IFdhaXQgZm9yIHJlY2VpdmluZyBkYXRhCisgKiAgICAgICAgIDI6IFdhaXQgZm9yIGNhbWVyYSBnZXRzIGJ1c3kKKyAqCisgKiBtc2VjOiBUaW1lIHRvIHdhaXQKKyAqLworc3RhdGljIGludCBtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKGludCBtb2RlLCBpbnQgbXNlYykKK3sKKwltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTErbW9kZTsKKworCXdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtPmlycV93YWl0LCBtZGM4MDAtPmlycV93b2tlbiwgbXNlYypIWi8xMDAwKTsKKwltZGM4MDAtPmlycV93b2tlbiA9IDA7CisKKwlpZiAobWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT4wKQorCXsKKwkJbWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT0wOworCQllcnIgKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIGNhbWVyYS4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwkKKwlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCXsKKwkJd2FybiAoIkNhbWVyYSBnZXRzIGRpc2Nvbm5lY3RlZCBkdXJpbmcgd2FpdGluZyBmb3IgaXJxLiIpOworCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7CisJCXJldHVybiAtMjsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFRoZSB3cml0ZV91cmIgY2FsbGJhY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbWRjODAwX3VzYl93cml0ZV9ub3RpZnkgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlcykKK3sKKwlzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMD11cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkKKwl7CisJCWVyciAoIndyaXRpbmcgY29tbWFuZCBmYWlscyAoc3RhdHVzPSVpKSIsIHVyYi0+c3RhdHVzKTsKKwl9CisJZWxzZQorCXsJCisJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CisJfQorCW1kYzgwMC0+d3JpdHRlbiA9IDE7CisJd2FrZV91cCAoJm1kYzgwMC0+d3JpdGVfd2FpdCk7Cit9CisKKworLyoKKyAqIFRoZSBkb3dubG9hZF91cmIgY2FsbGJhY2sgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbWRjODAwX3VzYl9kb3dubG9hZF9ub3RpZnkgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlcykKK3sKKwlzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMD11cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gMCkKKwl7CisJCS8qIEZpbGwgb3V0cHV0IGJ1ZmZlciB3aXRoIHRoZXNlIGRhdGEgKi8KKwkJbWVtY3B5IChtZGM4MDAtPm91dCwgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCA2NCk7CisJCW1kYzgwMC0+b3V0X2NvdW50PTY0OworCQltZGM4MDAtPm91dF9wdHI9MDsKKwkJbWRjODAwLT5kb3dubG9hZF9sZWZ0LT02NDsKKwkJaWYgKG1kYzgwMC0+ZG93bmxvYWRfbGVmdCA9PSAwKQorCQl7CisJCQltZGM4MDAtPnN0YXRlPVJFQURZOworCQl9CisJfQorCWVsc2UKKwl7CisJCWVyciAoInJlcXVlc3QgYnl0ZXMgZmFpbHMgKHN0YXR1czolaSkiLCB1cmItPnN0YXR1cyk7CisJfQorCW1kYzgwMC0+ZG93bmxvYWRlZCA9IDE7CisJd2FrZV91cCAoJm1kYzgwMC0+ZG93bmxvYWRfd2FpdCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCVByb2JpbmcgZm9yIHRoZSBDYW1lcmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzOworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIG1kYzgwMF9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL21kYzgwMCVkIiwKKwkuZm9wcyA9CQkmbWRjODAwX2RldmljZV9vcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlNREM4MDBfREVWSUNFX01JTk9SX0JBU0UsCit9OworCisKKy8qCisgKiBDYWxsYmFjayB0byBzZWFyY2ggdGhlIE11c3RlayBNREM4MDAgb24gdGhlIFVTQiBCdXMKKyAqLworc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGksajsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmX2Rlc2M7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCWludCBpcnFfaW50ZXJ2YWw9MDsKKwlpbnQgcmV0dmFsOworCisJZGJnICgiKG1kYzgwMF91c2JfcHJvYmUpIGNhbGxlZC4iKTsKKworCisJaWYgKG1kYzgwMC0+ZGV2ICE9IE5VTEwpCisJeworCQl3YXJuICgib25seSBvbmUgTXVzdGVrIE1EQzgwMCBpcyBzdXBwb3J0ZWQuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJeworCQllcnIgKCJwcm9iZSBmYWlscyAtPiB3cm9uZyBOdW1iZXIgb2YgQ29uZmlndXJhdGlvbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaW50Zl9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoCisJCQkoIGludGZfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhmZiApCisJCXx8CSggaW50Zl9kZXNjLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAwICkKKwkJfHwgKCBpbnRmX2Rlc2MtPmRlc2MuYkludGVyZmFjZVByb3RvY29sICE9IDAgKQorCQl8fCAoIGludGZfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDQpCisJKQorCXsKKwkJZXJyICgicHJvYmUgZmFpbHMgLT4gd3JvbmcgSW50ZXJmYWNlIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIHRoZSBFbmRwb2ludHMgKi8KKwlmb3IgKGk9MDsgaTw0OyBpKyspCisJeworCQltZGM4MDAtPmVuZHBvaW50W2ldPS0xOworCQlmb3IgKGo9MDsgajw0OyBqKyspCisJCXsKKwkJCWlmIChtZGM4MDBfZW5kcG9pbnRfZXF1YWxzICgmaW50Zl9kZXNjLT5lbmRwb2ludCBbal0uZGVzYywmbWRjODAwX2VkIFtpXSkpCisJCQl7CisJCQkJbWRjODAwLT5lbmRwb2ludFtpXT1pbnRmX2Rlc2MtPmVuZHBvaW50IFtqXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgOworCQkJCWlmIChpPT0xKQorCQkJCXsKKwkJCQkJaXJxX2ludGVydmFsPWludGZfZGVzYy0+ZW5kcG9pbnQgW2pdLmRlc2MuYkludGVydmFsOworCQkJCX0KKworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmIChtZGM4MDAtPmVuZHBvaW50W2ldID09IC0xKQorCQl7CisJCQllcnIgKCJwcm9iZSBmYWlscyAtPiBXcm9uZyBFbmRwb2ludHMuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCisJaW5mbyAoIkZvdW5kIE11c3RlayBNREM4MDAgb24gVVNCLiIpOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZtZGM4MDBfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltZGM4MDAtPmRldj1kZXY7CisJbWRjODAwLT5vcGVuPTA7CisKKwkvKiBTZXR1cCBVUkIgU3RydWN0cyAqLworCXVzYl9maWxsX2ludF91cmIgKAorCQltZGM4MDAtPmlycV91cmIsCisJCW1kYzgwMC0+ZGV2LAorCQl1c2JfcmN2aW50cGlwZSAobWRjODAwLT5kZXYsbWRjODAwLT5lbmRwb2ludCBbMV0pLAorCQltZGM4MDAtPmlycV91cmJfYnVmZmVyLAorCQk4LAorCQltZGM4MDBfdXNiX2lycSwKKwkJbWRjODAwLAorCQlpcnFfaW50ZXJ2YWwKKwkpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKAorCQltZGM4MDAtPndyaXRlX3VyYiwKKwkJbWRjODAwLT5kZXYsCisJCXVzYl9zbmRidWxrcGlwZSAobWRjODAwLT5kZXYsIG1kYzgwMC0+ZW5kcG9pbnRbMF0pLAorCQltZGM4MDAtPndyaXRlX3VyYl9idWZmZXIsCisJCTgsCisJCW1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5LAorCQltZGM4MDAKKwkpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKAorCQltZGM4MDAtPmRvd25sb2FkX3VyYiwKKwkJbWRjODAwLT5kZXYsCisJCXVzYl9yY3ZidWxrcGlwZSAobWRjODAwLT5kZXYsIG1kYzgwMC0+ZW5kcG9pbnQgWzNdKSwKKwkJbWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyLAorCQk2NCwKKwkJbWRjODAwX3VzYl9kb3dubG9hZF9ub3RpZnksCisJCW1kYzgwMAorCSk7CisKKwltZGM4MDAtPnN0YXRlPVJFQURZOworCisJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWRjODAwKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRGlzY29ubmVjdCBVU0IgZGV2aWNlIChtYXliZSB0aGUgTURDODAwKQorICovCitzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZyAoIihtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QpIGNhbGxlZCIpOworCisJaWYgKG1kYzgwMCkgeworCQlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCQkJcmV0dXJuOworCisJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmbWRjODAwX2NsYXNzKTsKKworCQltZGM4MDAtPnN0YXRlPU5PVF9DT05ORUNURUQ7CisKKwkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+aXJxX3VyYik7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPmRvd25sb2FkX3VyYik7CisKKwkJbWRjODAwLT5kZXYgPSBOVUxMOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCX0KKwlpbmZvICgiTXVzdGVrIE1EQzgwMCBkaXNjb25uZWN0ZWQgZnJvbSBVU0IuIik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCVRoZSBNaXNjIGRldmljZSBQYXJ0IChmaWxlX29wZXJhdGlvbnMpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBGdW5jdGlvbiBjYWxjIHRoZSBBbnN3ZXJzaXplIGZvciBhIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2dldEFuc3dlclNpemUgKGNoYXIgY29tbWFuZCkKK3sKKwlzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSBjb21tYW5kKQorCXsKKwkJY2FzZSAweDJhOgorCQljYXNlIDB4NDk6CisJCWNhc2UgMHg1MToKKwkJY2FzZSAweDBkOgorCQljYXNlIDB4MjA6CisJCWNhc2UgMHgwNzoKKwkJY2FzZSAweDAxOgorCQljYXNlIDB4MjU6CisJCWNhc2UgMHgwMDoKKwkJCXJldHVybiA4OworCisJCWNhc2UgMHgwNToKKwkJY2FzZSAweDNlOgorCQkJcmV0dXJuIG1kYzgwMC0+cGljX2xlbjsKKworCQljYXNlIDB4MDk6CisJCQlyZXR1cm4gNDA5NjsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisKKy8qCisgKiBJbml0IHRoZSBkZXZpY2U6ICgxKSBhbGxvYyBtZW0gKDIpIEluY3JlYXNlIE1PRCBDb3VudCAuLgorICovCitzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldHZhbD0wOworCWludCBlcnJuPTA7CisKKwlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKwkKKwlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCXsKKwkJZXJybj0tRUJVU1k7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwlpZiAobWRjODAwLT5vcGVuKQorCXsKKwkJZXJybj0tRUJVU1k7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCW1kYzgwMC0+aW5fY291bnQ9MDsKKwltZGM4MDAtPm91dF9jb3VudD0wOworCW1kYzgwMC0+b3V0X3B0cj0wOworCW1kYzgwMC0+cGljX2luZGV4PTA7CisJbWRjODAwLT5waWNfbGVuPS0xOworCW1kYzgwMC0+ZG93bmxvYWRfbGVmdD0wOworCisJbWRjODAwLT5jYW1lcmFfYnVzeT0wOworCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKKworCXJldHZhbD0wOworCW1kYzgwMC0+aXJxX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPmlycV91cmIsIEdGUF9LRVJORUwpKQorCXsKKwkJZXJyICgicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpIHVyYl9zdGF0dXM9JWkpLiIscmV0dmFsLCBtZGM4MDAtPmlycV91cmItPnN0YXR1cyk7CisJCWVycm4gPSAtRUlPOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwltZGM4MDAtPm9wZW49MTsKKwlkYmcgKCJNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuIik7CisKK2Vycm9yX291dDoKKwl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJcmV0dXJuIGVycm47Cit9CisKKworLyoKKyAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5CisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2RldmljZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0dmFsPTA7CisJZGJnICgiTXVzdGVrIE1EQzgwMCBkZXZpY2UgY2xvc2VkLiIpOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJaWYgKG1kYzgwMC0+b3BlbiAmJiAobWRjODAwLT5zdGF0ZSAhPSBOT1RfQ09OTkVDVEVEKSkKKwl7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPmlycV91cmIpOworCQl1c2Jfa2lsbF91cmIobWRjODAwLT53cml0ZV91cmIpOworCQl1c2Jfa2lsbF91cmIobWRjODAwLT5kb3dubG9hZF91cmIpOworCQltZGM4MDAtPm9wZW49MDsKKwl9CisJZWxzZQorCXsKKwkJcmV0dmFsPS1FSU87CisJfQorCisJdXAoJm1kYzgwMC0+aW9fbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogVGhlIERldmljZSByZWFkIGNhbGxiYWNrIEZ1bmN0aW9uCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQoreworCXNpemVfdCBsZWZ0PWxlbiwgc3RzPWxlbjsgLyogc2luZ2xlIHRyYW5zZmVyIHNpemUgKi8KKwljaGFyIF9fdXNlciAqcHRyID0gYnVmOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJaWYgKG1kYzgwMC0+c3RhdGUgPT0gTk9UX0NPTk5FQ1RFRCkKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKG1kYzgwMC0+c3RhdGUgPT0gV09SS0lORykKKwl7CisJCXdhcm4gKCJJbGxlZ2FsIFN0YXRlIFwid29ya2luZ1wiIHJlYWNoZWQgZHVyaW5nIHJlYWQgPyEiKTsKKwkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoIW1kYzgwMC0+b3BlbikKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl3aGlsZSAobGVmdCkKKwl7CisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIAorCQl7CisJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisKKwkJc3RzPWxlZnQgPiAobWRjODAwLT5vdXRfY291bnQtbWRjODAwLT5vdXRfcHRyKT9tZGM4MDAtPm91dF9jb3VudC1tZGM4MDAtPm91dF9wdHI6bGVmdDsKKworCQlpZiAoc3RzIDw9IDApCisJCXsKKwkJCS8qIFRvbyBsZXNzIERhdGEgaW4gYnVmZmVyICovCisJCQlpZiAobWRjODAwLT5zdGF0ZSA9PSBET1dOTE9BRCkKKwkJCXsKKwkJCQltZGM4MDAtPm91dF9jb3VudD0wOworCQkJCW1kYzgwMC0+b3V0X3B0cj0wOworCisJCQkJLyogRG93bmxvYWQgLT4gUmVxdWVzdCBuZXcgYnl0ZXMgKi8KKwkJCQltZGM4MDAtPmRvd25sb2FkX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CisJCQkJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPmRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCkpCisJCQkJeworCQkJCQllcnIgKCJDYW4ndCBzdWJtaXQgZG93bmxvYWQgdXJiIChzdGF0dXM9JWkpIixtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzKTsKKwkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQlyZXR1cm4gbGVuLWxlZnQ7CisJCQkJfQorCQkJCXdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtPmRvd25sb2FkX3dhaXQsIG1kYzgwMC0+ZG93bmxvYWRlZCwKKwkJCQkJCQkJCQlUT19ET1dOTE9BRF9HRVRfUkVBRFkqSFovMTAwMCk7CisJCQkJbWRjODAwLT5kb3dubG9hZGVkID0gMDsKKwkJCQlpZiAobWRjODAwLT5kb3dubG9hZF91cmItPnN0YXR1cyAhPSAwKQorCQkJCXsKKwkJCQkJZXJyICgicmVxdWVzdCBkb3dubG9hZC1ieXRlcyBmYWlscyAoc3RhdHVzPSVpKSIsbWRjODAwLT5kb3dubG9hZF91cmItPnN0YXR1cyk7CisJCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQkJcmV0dXJuIGxlbi1sZWZ0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBObyBtb3JlIGJ5dGVzIC0+IHRoYXQncyBhbiBlcnJvciovCisJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogQ29weSBCeXRlcyAqLworCQkJaWYgKGNvcHlfdG9fdXNlcihwdHIsICZtZGM4MDAtPm91dCBbbWRjODAwLT5vdXRfcHRyXSwKKwkJCQkJCXN0cykpIHsKKwkJCQl1cCgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCXB0cis9c3RzOworCQkJbGVmdC09c3RzOworCQkJbWRjODAwLT5vdXRfcHRyKz1zdHM7CisJCX0KKwl9CisKKwl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJcmV0dXJuIGxlbi1sZWZ0OworfQorCisKKy8qCisgKiBUaGUgRGV2aWNlIHdyaXRlIGNhbGxiYWNrIEZ1bmN0aW9uCisgKiBJZiBhIDhCeXRlIENvbW1hbmQgaXMgcmVjZWl2ZWQsIGl0IHdpbGwgYmUgc2VuZCB0byB0aGUgY2FtZXJhLgorICogQWZ0ZXIgdGhpcyB0aGUgZHJpdmVyIGluaXRpYXRlcyB0aGUgcmVxdWVzdCBmb3IgdGhlIGFuc3dlciBvcgorICoganVzdCB3YWl0cyB1bnRpbCB0aGUgY2FtZXJhIGJlY29tZXMgcmVhZHkuCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2Vfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKK3sKKwlzaXplX3QgaT0wOworCisJZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJaWYgKG1kYzgwMC0+c3RhdGUgIT0gUkVBRFkpCisJeworCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghbWRjODAwLT5vcGVuICkKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl3aGlsZSAoaTxsZW4pCisJeworCQl1bnNpZ25lZCBjaGFyIGM7CisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIAorCQl7CisJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJCQorCQlpZihnZXRfdXNlcihjLCBidWYraSkpCisJCXsKKwkJCXVwKCZtZGM4MDAtPmlvX2xvY2spOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQkvKiBjaGVjayBmb3IgY29tbWFuZCBzdGFydCAqLworCQlpZiAoYyA9PSAweDU1KQorCQl7CisJCQltZGM4MDAtPmluX2NvdW50PTA7CisJCQltZGM4MDAtPm91dF9jb3VudD0wOworCQkJbWRjODAwLT5vdXRfcHRyPTA7CisJCQltZGM4MDAtPmRvd25sb2FkX2xlZnQ9MDsKKwkJfQorCisJCS8qIHNhdmUgY29tbWFuZCBieXRlICovCisJCWlmIChtZGM4MDAtPmluX2NvdW50IDwgOCkKKwkJeworCQkJbWRjODAwLT5pblttZGM4MDAtPmluX2NvdW50XSA9IGM7CisJCQltZGM4MDAtPmluX2NvdW50Kys7CisJCX0KKwkJZWxzZQorCQl7CisJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCS8qIENvbW1hbmQgQnVmZmVyIGZ1bGwgPyAtPiBzZW5kIGl0IHRvIGNhbWVyYSAqLworCQlpZiAobWRjODAwLT5pbl9jb3VudCA9PSA4KQorCQl7CisJCQlpbnQgYW5zd2Vyc2l6ZTsKKworCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKQorCQkJeworCQkJCWVyciAoIkNhbWVyYSBkaWRuJ3QgZ2V0IHJlYWR5LlxuIik7CisJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlhbnN3ZXJzaXplPW1kYzgwMF9nZXRBbnN3ZXJTaXplIChtZGM4MDAtPmluWzFdKTsKKworCQkJbWRjODAwLT5zdGF0ZT1XT1JLSU5HOworCQkJbWVtY3B5IChtZGM4MDAtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBtZGM4MDAtPmluLDgpOworCQkJbWRjODAwLT53cml0ZV91cmItPmRldiA9IG1kYzgwMC0+ZGV2OworCQkJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCkpCisJCQl7CisJCQkJZXJyICgic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgKHN0YXR1cz0laSkiLCBtZGM4MDAtPndyaXRlX3VyYi0+c3RhdHVzKTsKKwkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQl3YWl0X2V2ZW50X3RpbWVvdXQobWRjODAwLT53cml0ZV93YWl0LCBtZGM4MDAtPndyaXR0ZW4sIFRPX1dSSVRFX0dFVF9SRUFEWSpIWi8xMDAwKTsKKwkJCW1kYzgwMC0+d3JpdHRlbiA9IDA7CisJCQlpZiAobWRjODAwLT5zdGF0ZSA9PSBXT1JLSU5HKQorCQkJeworCQkJCXVzYl9raWxsX3VyYihtZGM4MDAtPndyaXRlX3VyYik7CisJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSBtZGM4MDAtPmluWzFdKQorCQkJeworCQkJCWNhc2UgMHgwNTogLyogRG93bmxvYWQgSW1hZ2UgKi8KKwkJCQljYXNlIDB4M2U6IC8qIFRha2Ugc2hvdCBpbiBGaW5lIE1vZGUgKFdDYW0gTW9kZSkgKi8KKwkJCQkJaWYgKG1kYzgwMC0+cGljX2xlbiA8IDApCisJCQkJCXsKKwkJCQkJCWVyciAoImNhbGwgMHgwNyBiZWZvcmUgMHgwNSwweDNlIik7CisJCQkJCQltZGM4MDAtPnN0YXRlPVJFQURZOworCQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQkJcmV0dXJuIC1FSU87CisJCQkJCX0KKwkJCQkJbWRjODAwLT5waWNfbGVuPS0xOworCisJCQkJY2FzZSAweDA5OiAvKiBEb3dubG9hZCBUaHVtYm5haWwgKi8KKwkJCQkJbWRjODAwLT5kb3dubG9hZF9sZWZ0PWFuc3dlcnNpemUrNjQ7CisJCQkJCW1kYzgwMC0+c3RhdGU9RE9XTkxPQUQ7CisJCQkJCW1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19ET1dOTE9BRF9HRVRfQlVTWSk7CisJCQkJCWJyZWFrOworCisKKwkJCQlkZWZhdWx0OgorCQkJCQlpZiAoYW5zd2Vyc2l6ZSkKKwkJCQkJeworCisJCQkJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgxLFRPX1JFQURfRlJPTV9JUlEpKQorCQkJCQkJeworCQkJCQkJCWVyciAoInJlcXVlc3RpbmcgYW5zd2VyIGZyb20gaXJxIGZhaWxzIik7CisJCQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQkJCXJldHVybiAtRUlPOworCQkJCQkJfQorCisJCQkJCQkvKiBXcml0ZSBkdW1teSBkYXRhLCAodGhpcyBpcyB1Z2x5IGJ1dCBwYXJ0IG9mIHRoZSBVU0IgUHJvdG9jb2wgKi8KKwkJCQkJCS8qIGlmIHlvdSB1c2UgZW5kcG9pbnQgMSBhcyBidWxrIGFuZCBub3QgYXMgaXJxKSAqLworCQkJCQkJbWVtY3B5IChtZGM4MDAtPm91dCwgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2UsOCk7CisKKwkJCQkJCS8qIFRoaXMgaXMgdGhlIGludGVycHJldGVkIGFuc3dlciAqLworCQkJCQkJbWVtY3B5ICgmbWRjODAwLT5vdXRbOF0sIG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlLDgpOworCisJCQkJCQltZGM4MDAtPm91dF9wdHI9MDsKKwkJCQkJCW1kYzgwMC0+b3V0X2NvdW50PTE2OworCisJCQkJCQkvKiBDYWNoZSB0aGUgSW1hZ2VzaXplLCBpZiBjb21tYW5kIHdhcyBnZXRJbWFnZVNpemUgKi8KKwkJCQkJCWlmIChtZGM4MDAtPmluIFsxXSA9PSAoY2hhcikgMHgwNykKKwkJCQkJCXsKKwkJCQkJCQltZGM4MDAtPnBpY19sZW49KGludCkgNjU1MzYqKHVuc2lnbmVkIGNoYXIpIG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlWzBdKzI1NioodW5zaWduZWQgY2hhcikgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2VbMV0rKHVuc2lnbmVkIGNoYXIpIG1kYzgwMC0+Y2FtZXJhX3Jlc3BvbnNlWzJdOworCisJCQkJCQkJZGJnICgiY2FjaGVkIGltYWdlc2l6ZSA9ICVpIixtZGM4MDAtPnBpY19sZW4pOworCQkJCQkJfQorCisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0RFRkFVTFRfQ09NTUFORCkpCisJCQkJCQl7CisJCQkJCQkJZXJyICgiQ29tbWFuZCBUaW1lb3V0LiIpOworCQkJCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQltZGM4MDAtPnN0YXRlPVJFQURZOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpKys7CisJfQorCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwlyZXR1cm4gaTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW5pdCBhbmQgQ2xlYW51cCB0aGlzIGRyaXZlciAoU3RydWN0cyBhbmQgdHlwZXMpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGaWxlIE9wZXJhdGlvbnMgb2YgdGhpcyBkcml2ZXJzICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wcyA9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJbWRjODAwX2RldmljZV9yZWFkLAorCS53cml0ZSA9CW1kYzgwMF9kZXZpY2Vfd3JpdGUsCisJLm9wZW4gPQkJbWRjODAwX2RldmljZV9vcGVuLAorCS5yZWxlYXNlID0JbWRjODAwX2RldmljZV9yZWxlYXNlLAorfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtZGM4MDBfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKE1EQzgwMF9WRU5ET1JfSUQsIE1EQzgwMF9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIG1kYzgwMF90YWJsZSk7CisvKgorICogVVNCIERyaXZlciBTdHJ1Y3QgZm9yIHRoaXMgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlciA9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm1kYzgwMCIsCisJLnByb2JlID0JbWRjODAwX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CW1kYzgwMF91c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQltZGM4MDBfdGFibGUKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW5pdCBhbmQgQ2xlYW51cCB0aGlzIGRyaXZlciAoTWFpbiBGdW5jdGlvbnMpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIHRyeShBKSAgICAgICAgICAgaWYgKCEoQSkpIGdvdG8gY2xlYW51cF9vbl9mYWlsOworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfbWRjODAwX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJLyogQWxsb2NhdGUgTWVtb3J5ICovCisJdHJ5IChtZGM4MDA9a21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbWRjODAwX2RhdGEpLCBHRlBfS0VSTkVMKSk7CisKKwltZW1zZXQobWRjODAwLCAwLCBzaXplb2Yoc3RydWN0IG1kYzgwMF9kYXRhKSk7CisJbWRjODAwLT5kZXYgPSBOVUxMOworCW1kYzgwMC0+b3Blbj0wOworCW1kYzgwMC0+c3RhdGU9Tk9UX0NPTk5FQ1RFRDsKKwlpbml0X01VVEVYICgmbWRjODAwLT5pb19sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZtZGM4MDAtPmlycV93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmbWRjODAwLT53cml0ZV93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmbWRjODAwLT5kb3dubG9hZF93YWl0KTsKKworCW1kYzgwMC0+aXJxX3dva2VuID0gMDsKKwltZGM4MDAtPmRvd25sb2FkZWQgPSAwOworCW1kYzgwMC0+d3JpdHRlbiA9IDA7CisKKwl0cnkgKG1kYzgwMC0+aXJxX3VyYl9idWZmZXI9a21hbGxvYyAoOCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT53cml0ZV91cmJfYnVmZmVyPWttYWxsb2MgKDgsIEdGUF9LRVJORUwpKTsKKwl0cnkgKG1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcj1rbWFsbG9jICg2NCwgR0ZQX0tFUk5FTCkpOworCisJdHJ5IChtZGM4MDAtPmlycV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT5kb3dubG9hZF91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT53cml0ZV91cmI9dXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpOworCisJLyogUmVnaXN0ZXIgdGhlIGRyaXZlciAqLworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbWRjODAwX3VzYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cF9vbl9mYWlsOworCisJaW5mbyAoRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworCisJLyogQ2xlYW4gZHJpdmVyIHVwLCB3aGVuIHNvbWV0aGluZyBmYWlscyAqLworCitjbGVhbnVwX29uX2ZhaWw6CisKKwlpZiAobWRjODAwICE9IE5VTEwpCisJeworCQllcnIgKCJjYW4ndCBhbGxvYyBtZW1vcnkhIik7CisKKwkJa2ZyZWUobWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyKTsKKwkJa2ZyZWUobWRjODAwLT53cml0ZV91cmJfYnVmZmVyKTsKKwkJa2ZyZWUobWRjODAwLT5pcnFfdXJiX2J1ZmZlcik7CisKKwkJdXNiX2ZyZWVfdXJiKG1kYzgwMC0+d3JpdGVfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKG1kYzgwMC0+ZG93bmxvYWRfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKG1kYzgwMC0+aXJxX3VyYik7CisKKwkJa2ZyZWUgKG1kYzgwMCk7CisJfQorCW1kYzgwMCA9IE5VTEw7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX21kYzgwMF9jbGVhbnVwICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmbWRjODAwX3VzYl9kcml2ZXIpOworCisJdXNiX2ZyZWVfdXJiIChtZGM4MDAtPmlycV91cmIpOworCXVzYl9mcmVlX3VyYiAobWRjODAwLT5kb3dubG9hZF91cmIpOworCXVzYl9mcmVlX3VyYiAobWRjODAwLT53cml0ZV91cmIpOworCisJa2ZyZWUgKG1kYzgwMC0+aXJxX3VyYl9idWZmZXIpOworCWtmcmVlIChtZGM4MDAtPndyaXRlX3VyYl9idWZmZXIpOworCWtmcmVlIChtZGM4MDAtPmRvd25sb2FkX3VyYl9idWZmZXIpOworCisJa2ZyZWUgKG1kYzgwMCk7CisJbWRjODAwID0gTlVMTDsKK30KKworbW9kdWxlX2luaXQgKHVzYl9tZGM4MDBfaW5pdCk7Cittb2R1bGVfZXhpdCAodXNiX21kYzgwMF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTBkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpAQCAtMCwwICsxLDg2MiBAQAorLyogRHJpdmVyIGZvciBNaWNyb3RlayBTY2FubWFrZXIgWDYgVVNCIHNjYW5uZXIsIGFuZCBwb3NzaWJseSBvdGhlcnMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwIEpvaG4gRnJlbWxpbiA8dmlpQHBlbmd1aW5wb3dlcmVkLmNvbT4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBPbGl2ZXIgTmV1a3VtIDxPbGl2ZXIuTmV1a3VtQGxyei51bmktbXVlbmNoZW4uZGU+CisgKgorICogUGFydHMgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdXNiLXN0b3JhZ2UgYW5kIGNvcHlyaWdodCBieSB0aGVpcgorICogYXV0aG9ycy4gVGhhbmtzIHRvIE1hdHQgRGhhcm0gZm9yIGdpdmluZyB1cyBwZXJtaXNzaW9uIQorICoKKyAqIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBTQ1NJIGhvc3QgY29udHJvbGxlciBkcml2ZXIgYW5kIGEgVVNCCisgKiBkZXZpY2UgZHJpdmVyLiBUbyBhdm9pZCBjb25mdXNpb24sIGFsbCB0aGUgVVNCIHJlbGF0ZWQgc3R1ZmYgaXMKKyAqIHByZWZpeGVkIGJ5IG10c191c2JfIGFuZCBhbGwgdGhlIFNDU0kgc3R1ZmYgYnkgbXRzX3Njc2lfLgorICoKKyAqIE1pY3JvdGVrICh3d3cubWljcm90ZWsuY29tKSBkaWQgbm90IHJlbGVhc2UgdGhlIHNwZWNpZmljYXRpb25zIGZvcgorICogdGhlaXIgVVNCIHByb3RvY29sIHRvIHVzLCBzbyB3ZSBoYWQgdG8gcmV2ZXJzZSBlbmdpbmVlciB0aGVtLiBXZQorICogZG9uJ3Qga25vdyBmb3Igd2hpY2ggbW9kZWxzIHRoZXkgYXJlIHZhbGlkLgorICoKKyAqIFRoZSBYNiBVU0IgaGFzIHRocmVlIGJ1bGsgZW5kcG9pbnRzLCBvbmUgb3V0cHV0ICgweDEpIGRvd24gd2hpY2gKKyAqIGNvbW1hbmRzIGFuZCBvdXRnb2luZyBkYXRhIGFyZSBzZW50LCBhbmQgdHdvIGlucHV0OiAweDgyIGZyb20gd2hpY2gKKyAqIG5vcm1hbCBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciAoaW4gcGFja2V0cyBvZiBtYXhpbXVtIDMyCisgKiBieXRlcykgYW5kIGZyb20gd2hpY2ggdGhlIHN0YXR1cyBieXRlIGlzIHJlYWQsIGFuZCAweDgzIGZyb20gd2hpY2gKKyAqIHRoZSByZXN1bHRzIG9mIGEgc2NhbiAob3IgcHJldmlldykgYXJlIHJlYWQgaW4gdXAgdG8gNjQgKiAxMDI0IGJ5dGUKKyAqIGNodW5rcyBieSB0aGUgV2luZG93cyBkcml2ZXIuIFdlIGRvbid0IGtub3cgaG93IG11Y2ggaXQgaXMgcG9zc2libGUKKyAqIHRvIHJlYWQgYXQgYSB0aW1lIGZyb20gMHg4My4KKyAqCisgKiBJdCBzZWVtcyBwb3NzaWJsZSB0byByZWFkICh3aXRoIFVSQiB0cmFuc2ZlcnMpIGV2ZXJ5dGhpbmcgZnJvbSAweDgyCisgKiBpbiBvbmUgZ28sIHdpdGhvdXQgYm90aGVyaW5nIHRvIHJlYWQgaW4gMzIgYnl0ZSBjaHVua3MuCisgKgorICogVGhlcmUgc2VlbXMgdG8gYmUgYW4gb3B0aW1pc2F0aW9uIG9mIGEgZnVydGhlciBSRUFEIGltcGxpY2l0IGlmCisgKiB5b3Ugc2ltcGx5IHJlYWQgZnJvbSAweDgzLgorICoKKyAqIEd1ZXNzZWQgcHJvdG9jb2w6CisgKgorICoJU2VuZCByYXcgU0NTSSBjb21tYW5kIHRvIEVQIDB4MQorICoKKyAqCUlmIHRoZXJlIGlzIGRhdGEgdG8gcmVjZWl2ZToKKyAqCQlJZiB0aGUgY29tbWFuZCB3YXMgUkVBRCBkYXRhdHlwZT1pbWFnZToKKyAqCQkJUmVhZCBhIGxvdCBvZiBkYXRhIGZyb20gRVAgMHg4MworICoJCUVsc2U6CisgKgkJCVJlYWQgZGF0YSBmcm9tIEVQIDB4ODIKKyAqCUVsc2U6CisgKgkJSWYgdGhlcmUgaXMgZGF0YSB0byB0cmFuc21pdDoKKyAqCQkJV3JpdGUgaXQgdG8gRVAgMHgxCisgKgorICoJUmVhZCBzdGF0dXMgYnl0ZSBmcm9tIEVQIDB4ODIKKyAqCisgKiBSZWZlcmVuY2VzOgorICoKKyAqIFRoZSBTQ1NJIGNvbW1hbmQgc2V0IGZvciB0aGUgc2Nhbm5lciBpcyBhdmFpbGFibGUgZnJvbQorICoJZnRwOi8vZnRwLm1pY3JvdGVrLmNvbS9taWNyb3Rlay9kZXZwYWNrLworICoKKyAqIE1pY3JvdGVrIE5WIHNlbnQgdXMgYSBtb3JlIHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuIElmCisgKiB5b3Ugd2FudCBpdCwganVzdCBzZW5kIG1haWwuCisgKgorICogU3RhdHVzOgorICoKKyAqCVVudGVzdGVkIHdpdGggbXVsdGlwbGUgc2Nhbm5lcnMuCisgKglVbnRlc3RlZCBvbiBTTVAuCisgKglVbnRlc3RlZCBvbiBhIGJpZ2VuZGlhbiBtYWNoaW5lLgorICoKKyAqIEhpc3Rvcnk6CisgKgorICoJMjAwMDA0MTcgc3RhcnRpbmcgaGlzdG9yeQorICoJMjAwMDA0MTcgZml4ZWQgbG9hZCBvb3BzCisgKgkyMDAwMDQxNyBmaXhlZCB1bmxvYWQgb29wcworICoJMjAwMDA0MTkgZml4ZWQgUkVBRCBJTUFHRSBkZXRlY3Rpb24KKyAqCTIwMDAwNDI0IHN0YXJ0ZWQgY29udmVyc2lvbiB0byB1c2UgVVJCcworICoJMjAwMDA1MDIgaGFuZGxlZCBzaG9ydCB0cmFuc2ZlcnMgYXMgZXJyb3JzCisgKgkyMDAwMDUxMyByZW5hbWUgYW5kIG9yZ2FuaXNhdGlvbiBvZiBmdW5jdGlvbnMgKGpvaG4pCisgKgkyMDAwMDUxMyBhZGRlZCBJRHMgZm9yIGFsbCBwcm9kdWN0cyBzdXBwb3J0ZWQgYnkgV2luZG93cyBkcml2ZXIgKGpvaG4pCisgKgkyMDAwMDUxNCBSZXdyb3RlIG10c19zY3NpX3F1ZXVlY29tbWFuZCB0byB1c2UgVVJCcyAoam9obikKKyAqCTIwMDAwNTE0IFZlcnNpb24gMC4wLjhqCisgKiAgICAgIDIwMDAwNTE0IEZpeCByZXBvcnRpbmcgb2Ygbm9uLWV4aXN0YW50IGRldmljZXMgdG8gU0NTSSBsYXllciAoam9obikKKyAqCTIwMDAwNTE0IEFkZGVkIE1UU19ERUJVR19JTlQgKGpvaG4pCisgKgkyMDAwMDUxNCBDaGFuZ2VkICJ1c2ItbWljcm90ZWsiIHRvICJtaWNyb3RlayIgZm9yIGNvbnNpc3RlbmN5IChqb2huKQorICoJMjAwMDA1MTQgU3R1cGlkIGJ1ZyBmaXhlcyAoam9obikKKyAqCTIwMDAwNTE0IFZlcnNpb24gMC4wLjlqCisgKgkyMDAwMDUxNSBQdXQgdHJhbnNmZXIgY29udGV4dCBhbmQgVVJCIGluIG10c19kZXNjIChqb2huKQorICoJMjAwMDA1MTUgQWRkZWQgcHJlbGltIHR1cm4gb2ZmIGRlYnVnZ2luZyBzdXBwb3J0IChqb2huKQorICoJMjAwMDA1MTUgVmVyc2lvbiAwLjAuMTBqCisgKiAgICAgIDIwMDAwNTE1IEZpeGVkIHVwIFVSQiBhbGxvY2F0aW9uIChjbGVhciBVUkIgb24gYWxsb2MpIChqb2huKQorICogICAgICAyMDAwMDUxNSBWZXJzaW9uIDAuMC4xMWoKKyAqCTIwMDAwNTE2IFJlbW92ZWQgdW5uZWNlc3Nhcnkgc3BpbmxvY2sgaW4gbXRzX3RyYW5zZmVyX2NvbnRleHQgKGpvaG4pCisgKgkyMDAwMDUxNiBSZW1vdmVkIHVubmVjZXNzYXJ5IHVwIG9uIGluc3RhbmNlIGxvY2sgaW4gbXRzX3JlbW92ZV9ub2xvY2sgKGpvaG4pCisgKgkyMDAwMDUxNiBJbXBsZW1lbnRlZCAoYmFkbHkpIHNjc2lfYWJvcnQgKGpvaG4pCisgKgkyMDAwMDUxNiBWZXJzaW9uIDAuMC4xMmoKKyAqICAgICAgMjAwMDA1MTcgSG9wZWZ1bGx5IHJlbW92ZWQgbXRzX3JlbW92ZV9ub2xvY2sgcXVhc2lkZWFkbG9jayAoam9obikKKyAqICAgICAgMjAwMDA1MTcgQWRkZWQgbXRzX2RlYnVnX2R1bXAgdG8gcHJpbnQgbGwgVVNCIGluZm8gKGpvaG4pCisgKgkyMDAwMDUxOCBUd2Vha3MgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcyAoam9obikKKyAqCTIwMDAwNTE4IFZlcnNpb24gMC4wLjEzagorICoJMjAwMDA1MTggQ2xlYW5lZCB1cCBhYm9ydCBoYW5kbGluZyAoam9obikKKyAqCTIwMDAwNTIzIFJlbW92ZWQgc2NzaV9jb21tYW5kIGFuZCB2YXJpb3VzIHNjc2lfLi4uX3Jlc2V0cyAoam9obikKKyAqCTIwMDAwNTIzIEFkZGVkIHVubGluayBVUkIgb24gc2NzaV9hYm9ydCwgbm93IE9IQ0kgc3VwcG9ydHMgaXQgKGpvaG4pCisgKgkyMDAwMDUyMyBGaXhlZCBsYXN0IHRpcmVzb21lIGNvbXBpbGUgd2FybmluZyAoam9obikKKyAqCTIwMDAwNTIzIFZlcnNpb24gMC4wLjE0aiAodGhvdWdoIHZlcnNpb24gMC4xIGhhcyBjb21lIG91dD8pCisgKgkyMDAwMDYwMiBBZGRlZCBwcmltaXRpdmUgcmVzZXQKKyAqCTIwMDAwNjAyIFZlcnNpb24gMC4yLjAKKyAqCTIwMDAwNjAzIHZhcmlvdXMgY29zbWV0aWMgY2hhbmdlcworICoJMjAwMDA2MDMgVmVyc2lvbiAwLjIuMQorICoJMjAwMDA2MjAgbWlub3IgY29zbWV0aWMgY2hhbmdlcworICoJMjAwMDA2MjAgVmVyc2lvbiAwLjIuMgorICoJMjAwMDA4MjIgSG9wZWZ1bGx5IGZpeGVkIGRlYWRsb2NrIGluIG10c19yZW1vdmVfbm9sb2NrKCkKKyAqCTIwMDAwODIyIEZpeGVkIG1pbm9yIHJhY2UgaW4gbXRzX3RyYW5zZmVyX2NsZWFudXAoKQorICoJMjAwMDA4MjIgRml4ZWQgZGVhZGxvY2sgb24gc3VibWlzc2lvbiBlcnJvciBpbiBxdWV1ZWNvbW1hbmQKKyAqCTIwMDAwODIyIFZlcnNpb24gMC4yLjMKKyAqCTIwMDAwOTEzIFJlZHVjZWQgbW9kdWxlIHNpemUgaWYgZGVidWdnaW5nIGlzIG9mZgorICoJMjAwMDA5MTMgVmVyc2lvbiAwLjIuNAorICogICAgICAyMDAxMDIxMCBOZXcgYWJvcnQgbG9naWMKKyAqICAgICAgMjAwMTAyMTAgVmVyc2lvbiAwLjMuMAorICoJMjAwMTAyMTcgTWVyZ2VkIHNjYXR0ZXIvZ2F0aGVyCisgKgkyMDAxMDIxOCBWZXJzaW9uIDAuNC4wCisgKgkyMDAxMDIxOCBDb3NtZXRpYyBmaXhlcworICoJMjAwMTAyMTggVmVyc2lvbiAwLjQuMQorICogICAgICAyMDAxMDMwNiBBYm9ydCB3aGlsZSB1c2luZyBzY2F0dGVyL2dhdGhlcgorICogICAgICAyMDAxMDMwNiBWZXJzaW9uIDAuNC4yCisgKiAgICAgIDIwMDEwMzExIFJlbW92ZSBhbGwgdGltZW91dHMgYW5kIHRpZHkgdXAgZ2VuZXJhbGx5IChqb2huKQorICoJMjAwMTAzMjAgY2hlY2sgcmV0dXJuIHZhbHVlIG9mIHNjc2lfcmVnaXN0ZXIoKQorICoJMjAwMTAzMjAgVmVyc2lvbiAwLjQuMworICoJMjAwMTA0MDggSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCTIwMDExMDAzIEZpeCBtdWx0aXBsZSByZXF1ZXN0cworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlICIuLi8uLi9zY3NpL3Njc2kuaCIKKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaW5jbHVkZSAibWljcm90ZWsuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNC4zIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb2huIEZyZW1saW4gPHZpaUBwZW5ndWlucG93ZXJlZC5jb20+LCBPbGl2ZXIgTmV1a3VtIDxPbGl2ZXIuTmV1a3VtQGxyei51bmktbXVlbmNoZW4uZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiTWljcm90ZWsgU2Nhbm1ha2VyIFg2IFVTQiBzY2FubmVyIGRyaXZlciIKKworLyogU2hvdWxkIHdlIGRvIGRlYnVnZ2luZz8gKi8KKworLy8jZGVmaW5lIE1UU19ET19ERUJVRworCisvKiBVU0IgbGF5ZXIgZHJpdmVyIGludGVyZmFjZSAqLworCitzdGF0aWMgaW50IG10c191c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIG10c191c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkcyBbXTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG10c191c2JfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJtaWNyb3Rla1g2IiwKKwkucHJvYmUgPQltdHNfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JbXRzX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CW10c191c2JfaWRzLAorfTsKKworCisvKiBJbnRlcm5hbCBkcml2ZXIgc3R1ZmYgKi8KKworI2RlZmluZSBNVFNfVkVSU0lPTgkiMC40LjMiCisjZGVmaW5lIE1UU19OQU1FCSJtaWNyb3RlayB1c2IgKHJldiAiIE1UU19WRVJTSU9OICIpOiAiCisKKyNkZWZpbmUgTVRTX1dBUk5JTkcoeC4uLikgXAorCXByaW50ayggS0VSTl9XQVJOSU5HIE1UU19OQU1FIHggKQorI2RlZmluZSBNVFNfRVJST1IoeC4uLikgXAorCXByaW50ayggS0VSTl9FUlIgTVRTX05BTUUgeCApCisjZGVmaW5lIE1UU19JTlRfRVJST1IoeC4uLikgXAorCU1UU19FUlJPUih4KQorI2RlZmluZSBNVFNfTUVTU0FHRSh4Li4uKSBcCisJcHJpbnRrKCBLRVJOX0lORk8gTVRTX05BTUUgeCApCisKKyNpZiBkZWZpbmVkIE1UU19ET19ERUJVRworCisjZGVmaW5lIE1UU19ERUJVRyh4Li4uKSBcCisJcHJpbnRrKCBLRVJOX0RFQlVHIE1UU19OQU1FIHggKQorCisjZGVmaW5lIE1UU19ERUJVR19HT1RfSEVSRSgpIFwKKwlNVFNfREVCVUcoImdvdCB0byAlczolZCAoJXMpXG4iLCBfX0ZJTEVfXywgKGludClfX0xJTkVfXywgX19QUkVUVFlfRlVOQ1RJT05fXyApCisjZGVmaW5lIE1UU19ERUJVR19JTlQoKSBcCisJZG8geyBNVFNfREVCVUdfR09UX0hFUkUoKTsgXAorCSAgICAgTVRTX0RFQlVHKCJ0cmFuc2ZlciA9IDB4JXggY29udGV4dCA9IDB4JXhcbiIsKGludCl0cmFuc2ZlciwoaW50KWNvbnRleHQgKTsgXAorCSAgICAgTVRTX0RFQlVHKCJzdGF0dXMgPSAweCV4IGRhdGEtbGVuZ3RoID0gMHgleCBzZW50ID0gMHgleFxuIiwoaW50KXRyYW5zZmVyLT5zdGF0dXMsKGludCljb250ZXh0LT5kYXRhX2xlbmd0aCwgKGludCl0cmFuc2Zlci0+YWN0dWFsX2xlbmd0aCApOyBcCisgICAgICAgICAgICAgbXRzX2RlYnVnX2R1bXAoY29udGV4dC0+aW5zdGFuY2UpO1wKKwkgICB9IHdoaWxlKDApCisjZWxzZQorCisjZGVmaW5lIE1UU19OVUxfU1RBVEVNRU5UIGRvIHsgfSB3aGlsZSgwKQorCisjZGVmaW5lIE1UU19ERUJVRyh4Li4uKQlNVFNfTlVMX1NUQVRFTUVOVAorI2RlZmluZSBNVFNfREVCVUdfR09UX0hFUkUoKSBNVFNfTlVMX1NUQVRFTUVOVAorI2RlZmluZSBNVFNfREVCVUdfSU5UKCkgTVRTX05VTF9TVEFURU1FTlQKKworI2VuZGlmCisKKworCisjZGVmaW5lIE1UU19JTlRfSU5JVCgpXAorCXN0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dCogY29udGV4dCA9IChzdHJ1Y3QgbXRzX3RyYW5zZmVyX2NvbnRleHQqKXRyYW5zZmVyLT5jb250ZXh0OyBcCisJTVRTX0RFQlVHX0lOVCgpO1wKKworI2lmZGVmIE1UU19ET19ERUJVRworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRzX2RlYnVnX2R1bXAoc3RydWN0IG10c19kZXNjKiBkZXNjKSB7CisJTVRTX0RFQlVHKCJkZXNjIGF0IDB4JXg6IHRvZ2dsZSA9ICUwMnglMDJ4XG4iLAorCQkgIChpbnQpZGVzYywKKwkJICAoaW50KWRlc2MtPnVzYl9kZXYtPnRvZ2dsZVsxXSwoaW50KWRlc2MtPnVzYl9kZXYtPnRvZ2dsZVswXQorCQkpOworCU1UU19ERUJVRygiZXBfb3V0PSV4IGVwX3Jlc3BvbnNlPSV4IGVwX2ltYWdlPSV4XG4iLAorCQkgIHVzYl9zbmRidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX291dCksCisJCSAgdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfcmVzcG9uc2UpLAorCQkgIHVzYl9yY3ZidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX2ltYWdlKQorCQkpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqc3JiKQoreworCWNoYXIgKndoYXQgPSBOVUxMOworCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKwljYXNlIFRFU1RfVU5JVF9SRUFEWTogd2hhdCA9ICJURVNUX1VOSVRfUkVBRFkiOyBicmVhazsKKwljYXNlIFJFWkVST19VTklUOiB3aGF0ID0gIlJFWkVST19VTklUIjsgYnJlYWs7CisJY2FzZSBSRVFVRVNUX1NFTlNFOiB3aGF0ID0gIlJFUVVFU1RfU0VOU0UiOyBicmVhazsKKwljYXNlIEZPUk1BVF9VTklUOiB3aGF0ID0gIkZPUk1BVF9VTklUIjsgYnJlYWs7CisJY2FzZSBSRUFEX0JMT0NLX0xJTUlUUzogd2hhdCA9ICJSRUFEX0JMT0NLX0xJTUlUUyI7IGJyZWFrOworCWNhc2UgUkVBU1NJR05fQkxPQ0tTOiB3aGF0ID0gIlJFQVNTSUdOX0JMT0NLUyI7IGJyZWFrOworCWNhc2UgUkVBRF82OiB3aGF0ID0gIlJFQURfNiI7IGJyZWFrOworCWNhc2UgV1JJVEVfNjogd2hhdCA9ICJXUklURV82IjsgYnJlYWs7CisJY2FzZSBTRUVLXzY6IHdoYXQgPSAiU0VFS182IjsgYnJlYWs7CisJY2FzZSBSRUFEX1JFVkVSU0U6IHdoYXQgPSAiUkVBRF9SRVZFUlNFIjsgYnJlYWs7CisJY2FzZSBXUklURV9GSUxFTUFSS1M6IHdoYXQgPSAiV1JJVEVfRklMRU1BUktTIjsgYnJlYWs7CisJY2FzZSBTUEFDRTogd2hhdCA9ICJTUEFDRSI7IGJyZWFrOworCWNhc2UgSU5RVUlSWTogd2hhdCA9ICJJTlFVSVJZIjsgYnJlYWs7CisJY2FzZSBSRUNPVkVSX0JVRkZFUkVEX0RBVEE6IHdoYXQgPSAiUkVDT1ZFUl9CVUZGRVJFRF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVDogd2hhdCA9ICJNT0RFX1NFTEVDVCI7IGJyZWFrOworCWNhc2UgUkVTRVJWRTogd2hhdCA9ICJSRVNFUlZFIjsgYnJlYWs7CisJY2FzZSBSRUxFQVNFOiB3aGF0ID0gIlJFTEVBU0UiOyBicmVhazsKKwljYXNlIENPUFk6IHdoYXQgPSAiQ09QWSI7IGJyZWFrOworCWNhc2UgRVJBU0U6IHdoYXQgPSAiRVJBU0UiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0U6IHdoYXQgPSAiTU9ERV9TRU5TRSI7IGJyZWFrOworCWNhc2UgU1RBUlRfU1RPUDogd2hhdCA9ICJTVEFSVF9TVE9QIjsgYnJlYWs7CisJY2FzZSBSRUNFSVZFX0RJQUdOT1NUSUM6IHdoYXQgPSAiUkVDRUlWRV9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBTRU5EX0RJQUdOT1NUSUM6IHdoYXQgPSAiU0VORF9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDogd2hhdCA9ICJBTExPV19NRURJVU1fUkVNT1ZBTCI7IGJyZWFrOworCWNhc2UgU0VUX1dJTkRPVzogd2hhdCA9ICJTRVRfV0lORE9XIjsgYnJlYWs7CisJY2FzZSBSRUFEX0NBUEFDSVRZOiB3aGF0ID0gIlJFQURfQ0FQQUNJVFkiOyBicmVhazsKKwljYXNlIFJFQURfMTA6IHdoYXQgPSAiUkVBRF8xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTA6IHdoYXQgPSAiV1JJVEVfMTAiOyBicmVhazsKKwljYXNlIFNFRUtfMTA6IHdoYXQgPSAiU0VFS18xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZOiB3aGF0ID0gIldSSVRFX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgVkVSSUZZOiB3aGF0ID0gIlZFUklGWSI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0g6IHdoYXQgPSAiU0VBUkNIX0hJR0giOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTDogd2hhdCA9ICJTRUFSQ0hfRVFVQUwiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1c6IHdoYXQgPSAiU0VBUkNIX0xPVyI7IGJyZWFrOworCWNhc2UgU0VUX0xJTUlUUzogd2hhdCA9ICJTRVRfTElNSVRTIjsgYnJlYWs7CisJY2FzZSBSRUFEX1BPU0lUSU9OOiB3aGF0ID0gIlJFQURfUE9TSVRJT04iOyBicmVhazsKKwljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOiB3aGF0ID0gIlNZTkNIUk9OSVpFX0NBQ0hFIjsgYnJlYWs7CisJY2FzZSBMT0NLX1VOTE9DS19DQUNIRTogd2hhdCA9ICJMT0NLX1VOTE9DS19DQUNIRSI7IGJyZWFrOworCWNhc2UgUkVBRF9ERUZFQ1RfREFUQTogd2hhdCA9ICJSRUFEX0RFRkVDVF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNRURJVU1fU0NBTjogd2hhdCA9ICJNRURJVU1fU0NBTiI7IGJyZWFrOworCWNhc2UgQ09NUEFSRTogd2hhdCA9ICJDT01QQVJFIjsgYnJlYWs7CisJY2FzZSBDT1BZX1ZFUklGWTogd2hhdCA9ICJDT1BZX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgV1JJVEVfQlVGRkVSOiB3aGF0ID0gIldSSVRFX0JVRkZFUiI7IGJyZWFrOworCWNhc2UgUkVBRF9CVUZGRVI6IHdoYXQgPSAiUkVBRF9CVUZGRVIiOyBicmVhazsKKwljYXNlIFVQREFURV9CTE9DSzogd2hhdCA9ICJVUERBVEVfQkxPQ0siOyBicmVhazsKKwljYXNlIFJFQURfTE9ORzogd2hhdCA9ICJSRUFEX0xPTkciOyBicmVhazsKKwljYXNlIFdSSVRFX0xPTkc6IHdoYXQgPSAiV1JJVEVfTE9ORyI7IGJyZWFrOworCWNhc2UgQ0hBTkdFX0RFRklOSVRJT046IHdoYXQgPSAiQ0hBTkdFX0RFRklOSVRJT04iOyBicmVhazsKKwljYXNlIFdSSVRFX1NBTUU6IHdoYXQgPSAiV1JJVEVfU0FNRSI7IGJyZWFrOworCWNhc2UgUkVBRF9UT0M6IHdoYXQgPSAiUkVBRF9UT0MiOyBicmVhazsKKwljYXNlIExPR19TRUxFQ1Q6IHdoYXQgPSAiTE9HX1NFTEVDVCI7IGJyZWFrOworCWNhc2UgTE9HX1NFTlNFOiB3aGF0ID0gIkxPR19TRU5TRSI7IGJyZWFrOworCWNhc2UgTU9ERV9TRUxFQ1RfMTA6IHdoYXQgPSAiTU9ERV9TRUxFQ1RfMTAiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0VfMTA6IHdoYXQgPSAiTU9ERV9TRU5TRV8xMCI7IGJyZWFrOworCWNhc2UgTU9WRV9NRURJVU06IHdoYXQgPSAiTU9WRV9NRURJVU0iOyBicmVhazsKKwljYXNlIFJFQURfMTI6IHdoYXQgPSAiUkVBRF8xMiI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTI6IHdoYXQgPSAiV1JJVEVfMTIiOyBicmVhazsKKwljYXNlIFdSSVRFX1ZFUklGWV8xMjogd2hhdCA9ICJXUklURV9WRVJJRllfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9ISUdIXzEyOiB3aGF0ID0gIlNFQVJDSF9ISUdIXzEyIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfRVFVQUxfMTI6IHdoYXQgPSAiU0VBUkNIX0VRVUFMXzEyIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfTE9XXzEyOiB3aGF0ID0gIlNFQVJDSF9MT1dfMTIiOyBicmVhazsKKwljYXNlIFJFQURfRUxFTUVOVF9TVEFUVVM6IHdoYXQgPSAiUkVBRF9FTEVNRU5UX1NUQVRVUyI7IGJyZWFrOworCWNhc2UgU0VORF9WT0xVTUVfVEFHOiB3aGF0ID0gIlNFTkRfVk9MVU1FX1RBRyI7IGJyZWFrOworCWNhc2UgV1JJVEVfTE9OR18yOiB3aGF0ID0gIldSSVRFX0xPTkdfMiI7IGJyZWFrOworCWRlZmF1bHQ6CisJCU1UU19ERUJVRygiY2FuJ3QgZGVjb2RlIGNvbW1hbmRcbiIpOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCU1UU19ERUJVRyggIkNvbW1hbmQgJXMgKCVkIGJ5dGVzKVxuIiwgd2hhdCwgc3JiLT5jbWRfbGVuKTsKKworIG91dDoKKwlNVFNfREVCVUcoICIgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJICAgICAgIHNyYi0+Y21uZFswXSwgc3JiLT5jbW5kWzFdLCBzcmItPmNtbmRbMl0sIHNyYi0+Y21uZFszXSwgc3JiLT5jbW5kWzRdLCBzcmItPmNtbmRbNV0sCisJICAgICAgIHNyYi0+Y21uZFs2XSwgc3JiLT5jbW5kWzddLCBzcmItPmNtbmRbOF0sIHNyYi0+Y21uZFs5XSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqIGR1bW15KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRzX2RlYnVnX2R1bXAoc3RydWN0IG10c19kZXNjKiBkdW1teSkKK3sKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfdXJiX2Fib3J0KHN0cnVjdCBtdHNfZGVzYyogZGVzYykgeworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCW10c19kZWJ1Z19kdW1wKGRlc2MpOworCisJdXNiX2tpbGxfdXJiKCBkZXNjLT51cmIgKTsKK30KKworc3RhdGljIGludCBtdHNfc2NzaV9hYm9ydCAoU2NzaV9DbW5kICpzcmIpCit7CisJc3RydWN0IG10c19kZXNjKiBkZXNjID0gKHN0cnVjdCBtdHNfZGVzYyopKHNyYi0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSk7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKworCW10c191cmJfYWJvcnQoZGVzYyk7CisKKwlyZXR1cm4gU0NTSV9BQk9SVF9QRU5ESU5HOworfQorCitzdGF0aWMgaW50IG10c19zY3NpX2hvc3RfcmVzZXQgKFNjc2lfQ21uZCAqc3JiKQoreworCXN0cnVjdCBtdHNfZGVzYyogZGVzYyA9IChzdHJ1Y3QgbXRzX2Rlc2MqKShzcmItPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0pOworCWludCByZXN1bHQsIHJjOworCisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisJbXRzX2RlYnVnX2R1bXAoZGVzYyk7CisKKwlyYyA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoZGVzYy0+dXNiX2RldiwgZGVzYy0+dXNiX2ludGYpOworCWlmIChyYyA8IDApCisJCXJldHVybiBGQUlMRUQ7CisJcmVzdWx0ID0gdXNiX3Jlc2V0X2RldmljZShkZXNjLT51c2JfZGV2KTs7CisJaWYgKHJjKQorCQl1c2JfdW5sb2NrX2RldmljZShkZXNjLT51c2JfZGV2KTsKKwlyZXR1cm4gcmVzdWx0ID8gRkFJTEVEIDogU1VDQ0VTUzsKK30KKworc3RhdGljCitpbnQgbXRzX3Njc2lfcXVldWVjb21tYW5kIChTY3NpX0NtbmQgKnNyYiwgbXRzX3Njc2lfY21uZF9jYWxsYmFjayBjYWxsYmFjayApOworCitzdGF0aWMgdm9pZCBtdHNfdHJhbnNmZXJfY2xlYW51cCggc3RydWN0IHVyYiAqdHJhbnNmZXIgKTsKK3N0YXRpYyB2b2lkIG10c19kb19zZyhzdHJ1Y3QgdXJiICogdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworCitpbmxpbmUgc3RhdGljCit2b2lkIG10c19pbnRfc3VibWl0X3VyYiAoc3RydWN0IHVyYiogdHJhbnNmZXIsCisJCQlpbnQgcGlwZSwKKwkJCXZvaWQqIGRhdGEsCisJCQl1bnNpZ25lZCBsZW5ndGgsCisJCQl1c2JfY29tcGxldGVfdCBjYWxsYmFjayApCisvKiBJbnRlcnJ1cHQgY29udGV4dCEgKi8KKworLyogSG9sZGluZyB0cmFuc2Zlci0+Y29udGV4dC0+bG9jayEgKi8KK3sKKwlpbnQgcmVzOworCisJTVRTX0lOVF9JTklUKCk7CisKKwl1c2JfZmlsbF9idWxrX3VyYih0cmFuc2ZlciwKKwkJICAgICAgY29udGV4dC0+aW5zdGFuY2UtPnVzYl9kZXYsCisJCSAgICAgIHBpcGUsCisJCSAgICAgIGRhdGEsCisJCSAgICAgIGxlbmd0aCwKKwkJICAgICAgY2FsbGJhY2ssCisJCSAgICAgIGNvbnRleHQKKwkJKTsKKworCXRyYW5zZmVyLT5zdGF0dXMgPSAwOworCisJcmVzID0gdXNiX3N1Ym1pdF91cmIoIHRyYW5zZmVyLCBHRlBfQVRPTUlDICk7CisJaWYgKCB1bmxpa2VseShyZXMpICkgeworCQlNVFNfSU5UX0VSUk9SKCAiY291bGQgbm90IHN1Ym1pdCBVUkIhIEVycm9yIHdhcyAlZFxuIiwoaW50KXJlcyApOworCQljb250ZXh0LT5zcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgbXRzX3RyYW5zZmVyX2NsZWFudXAoIHN0cnVjdCB1cmIgKnRyYW5zZmVyICkKKy8qIEludGVycnVwdCBjb250ZXh0ISAqLworeworCU1UU19JTlRfSU5JVCgpOworCisJaWYgKCBsaWtlbHkoY29udGV4dC0+ZmluYWxfY2FsbGJhY2sgIT0gTlVMTCkgKQorCQljb250ZXh0LT5maW5hbF9jYWxsYmFjayhjb250ZXh0LT5zcmIpOworCit9CisKK3N0YXRpYyB2b2lkIG10c190cmFuc2Zlcl9kb25lKCBzdHJ1Y3QgdXJiICp0cmFuc2Zlciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKQoreworCU1UU19JTlRfSU5JVCgpOworCisJY29udGV4dC0+c3JiLT5yZXN1bHQgJj0gTVRTX1NDU0lfRVJSX01BU0s7CisJY29udGV4dC0+c3JiLT5yZXN1bHQgfD0gKHVuc2lnbmVkKWNvbnRleHQtPnN0YXR1czw8MTsKKworCW10c190cmFuc2Zlcl9jbGVhbnVwKHRyYW5zZmVyKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBtdHNfZ2V0X3N0YXR1cyggc3RydWN0IHVyYiAqdHJhbnNmZXIgKQorLyogSW50ZXJydXB0IGNvbnRleHQhICovCit7CisJTVRTX0lOVF9JTklUKCk7CisKKwltdHNfaW50X3N1Ym1pdF91cmIodHJhbnNmZXIsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoY29udGV4dC0+aW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJCSAgIGNvbnRleHQtPmluc3RhbmNlLT5lcF9yZXNwb25zZSksCisJCQkgICAmY29udGV4dC0+c3RhdHVzLAorCQkJICAgMSwKKwkJCSAgIG10c190cmFuc2Zlcl9kb25lICk7Cit9CisKK3N0YXRpYyB2b2lkIG10c19kYXRhX2RvbmUoIHN0cnVjdCB1cmIqIHRyYW5zZmVyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCisvKiBJbnRlcnJ1cHQgY29udGV4dCEgKi8KK3sKKwlNVFNfSU5UX0lOSVQoKTsKKworCWlmICggY29udGV4dC0+ZGF0YV9sZW5ndGggIT0gdHJhbnNmZXItPmFjdHVhbF9sZW5ndGggKSB7CisJCWNvbnRleHQtPnNyYi0+cmVzaWQgPSBjb250ZXh0LT5kYXRhX2xlbmd0aCAtIHRyYW5zZmVyLT5hY3R1YWxfbGVuZ3RoOworCX0gZWxzZSBpZiAoIHVubGlrZWx5KHRyYW5zZmVyLT5zdGF0dXMpICkgeworCQljb250ZXh0LT5zcmItPnJlc3VsdCA9ICh0cmFuc2Zlci0+c3RhdHVzID09IC1FTk9FTlQgPyBESURfQUJPUlQgOiBESURfRVJST1IpPDwxNjsKKwl9CisKKwltdHNfZ2V0X3N0YXR1cyh0cmFuc2Zlcik7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgbXRzX2NvbW1hbmRfZG9uZSggc3RydWN0IHVyYiAqdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKKy8qIEludGVycnVwdCBjb250ZXh0ISAqLworeworCU1UU19JTlRfSU5JVCgpOworCisJaWYgKCB1bmxpa2VseSh0cmFuc2Zlci0+c3RhdHVzKSApIHsKKwkgICAgICAgIGlmICh0cmFuc2Zlci0+c3RhdHVzID09IC1FTk9FTlQpIHsKKwkJICAgICAgICAvKiBXZSBhcmUgYmVpbmcga2lsbGVkICovCisJCQlNVFNfREVCVUdfR09UX0hFUkUoKTsKKwkJCWNvbnRleHQtPnNyYi0+cmVzdWx0ID0gRElEX0FCT1JUPDwxNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgICAgIC8qIEEgZ2VudWluZSBlcnJvciBoYXMgb2NjdXJyZWQgKi8KKwkJCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJCSAgICAgICAgY29udGV4dC0+c3JiLT5yZXN1bHQgPSBESURfRVJST1I8PDE2OworICAgICAgICAgICAgICAgIH0KKwkJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoY29udGV4dC0+c3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwkJbXRzX2ludF9zdWJtaXRfdXJiKHRyYW5zZmVyLAorCQkJCSAgIGNvbnRleHQtPmRhdGFfcGlwZSwKKwkJCQkgICBjb250ZXh0LT5zcmItPnNlbnNlX2J1ZmZlciwKKwkJCQkgICBjb250ZXh0LT5kYXRhX2xlbmd0aCwKKwkJCQkgICBtdHNfZGF0YV9kb25lKTsKKwl9IGVsc2UgeyBpZiAoIGNvbnRleHQtPmRhdGEgKSB7CisJCQltdHNfaW50X3N1Ym1pdF91cmIodHJhbnNmZXIsCisJCQkJCSAgIGNvbnRleHQtPmRhdGFfcGlwZSwKKwkJCQkJICAgY29udGV4dC0+ZGF0YSwKKwkJCQkJICAgY29udGV4dC0+ZGF0YV9sZW5ndGgsCisJCQkJCSAgIGNvbnRleHQtPnNyYi0+dXNlX3NnID8gbXRzX2RvX3NnIDogbXRzX2RhdGFfZG9uZSk7CisJCX0gZWxzZSB7CisJCQltdHNfZ2V0X3N0YXR1cyh0cmFuc2Zlcik7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG10c19kb19zZyAoc3RydWN0IHVyYiogdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqIHNnOworCU1UU19JTlRfSU5JVCgpOworCisJTVRTX0RFQlVHKCJQcm9jZXNzaW5nIGZyYWdtZW50ICVkIG9mICVkXG4iLCBjb250ZXh0LT5mcmFnbWVudCxjb250ZXh0LT5zcmItPnVzZV9zZyk7CisKKwlpZiAodW5saWtlbHkodHJhbnNmZXItPnN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zcmItPnJlc3VsdCA9ICh0cmFuc2Zlci0+c3RhdHVzID09IC1FTk9FTlQgPyBESURfQUJPUlQgOiBESURfRVJST1IpPDwxNjsKKwkJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworICAgICAgICB9CisKKwlzZyA9IGNvbnRleHQtPnNyYi0+YnVmZmVyOworCWNvbnRleHQtPmZyYWdtZW50Kys7CisJbXRzX2ludF9zdWJtaXRfdXJiKHRyYW5zZmVyLAorCQkJICAgY29udGV4dC0+ZGF0YV9waXBlLAorCQkJICAgcGFnZV9hZGRyZXNzKHNnW2NvbnRleHQtPmZyYWdtZW50XS5wYWdlKSArCisJCQkgICBzZ1tjb250ZXh0LT5mcmFnbWVudF0ub2Zmc2V0LAorCQkJICAgc2dbY29udGV4dC0+ZnJhZ21lbnRdLmxlbmd0aCwKKwkJCSAgIGNvbnRleHQtPmZyYWdtZW50ICsgMSA9PSBjb250ZXh0LT5zcmItPnVzZV9zZyA/IG10c19kYXRhX2RvbmUgOiBtdHNfZG9fc2cpOworCXJldHVybjsKK30KKworc3RhdGljIGNvbnN0IHU4IG10c19yZWFkX2ltYWdlX3NpZ1tdID0geyAweDI4LCAwMCwgMDAsIDAwIH07CitzdGF0aWMgY29uc3QgdTggbXRzX3JlYWRfaW1hZ2Vfc2lnX2xlbiA9IDQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtdHNfZGlyZWN0aW9uWzI1Ni84XSA9IHsKKwkweDI4LCAweDgxLCAweDE0LCAweDE0LCAweDIwLCAweDAxLCAweDkwLCAweDc3LAorCTB4MEMsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCisKKyNkZWZpbmUgTVRTX0RJUkVDVElPTl9JU19JTih4KSAoKG10c19kaXJlY3Rpb25beD4+M10gPj4gKHggJiA3KSkgJiAxKQorCitzdGF0aWMgdm9pZAorbXRzX2J1aWxkX3RyYW5zZmVyX2NvbnRleHQoIFNjc2lfQ21uZCAqc3JiLCBzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MgKQoreworCWludCBwaXBlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqIHNnOworCQorCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJZGVzYy0+Y29udGV4dC5pbnN0YW5jZSA9IGRlc2M7CisJZGVzYy0+Y29udGV4dC5zcmIgPSBzcmI7CisJZGVzYy0+Y29udGV4dC5mcmFnbWVudCA9IDA7CisKKwlpZiAoIXNyYi0+dXNlX3NnKSB7CisJCWlmICggIXNyYi0+YnVmZmxlbiApeworCQkJZGVzYy0+Y29udGV4dC5kYXRhID0gTlVMTDsKKwkJCWRlc2MtPmNvbnRleHQuZGF0YV9sZW5ndGggPSAwOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZGVzYy0+Y29udGV4dC5kYXRhID0gc3JiLT5idWZmZXI7CisJCQlkZXNjLT5jb250ZXh0LmRhdGFfbGVuZ3RoID0gc3JiLT5idWZmbGVuOworCQkJTVRTX0RFQlVHKCJsZW5ndGggPSAlZCBvciAlZFxuIiwKKwkJCQkgIHNyYi0+cmVxdWVzdF9idWZmbGVuLCBzcmItPmJ1ZmZsZW4pOworCQl9CisJfSBlbHNlIHsKKwkJTVRTX0RFQlVHKCJVc2luZyBzY2F0dGVyL2dhdGhlclxuIik7CisJCXNnID0gc3JiLT5idWZmZXI7CisJCWRlc2MtPmNvbnRleHQuZGF0YSA9IHBhZ2VfYWRkcmVzcyhzZ1swXS5wYWdlKSArIHNnWzBdLm9mZnNldDsKKwkJZGVzYy0+Y29udGV4dC5kYXRhX2xlbmd0aCA9IHNnWzBdLmxlbmd0aDsKKwl9CisKKworCS8qIGNhbid0IHJlbHkgb24gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiAqLworCisJLyogQnJ1dGFsbHkgcmlwcGVkIGZyb20gdXNiLXN0b3JhZ2UgKi8KKworCWlmICggIW1lbWNtcCggc3JiLT5jbW5kLCBtdHNfcmVhZF9pbWFnZV9zaWcsIG10c19yZWFkX2ltYWdlX3NpZ19sZW4gKQorKSB7IAkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX2ltYWdlKTsKKwkJTVRTX0RFQlVHKCAidHJhbnNmZXJpbmcgZnJvbSBkZXNjLT5lcF9pbWFnZSA9PSAlZFxuIiwKKwkJCSAgIChpbnQpZGVzYy0+ZXBfaW1hZ2UgKTsKKwl9IGVsc2UgaWYgKCBNVFNfRElSRUNUSU9OX0lTX0lOKHNyYi0+Y21uZFswXSkgKSB7CisJCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfcmVzcG9uc2UpOworCQkJTVRTX0RFQlVHKCAidHJhbnNmZXJpbmcgZnJvbSBkZXNjLT5lcF9yZXNwb25zZSA9PSAlZFxuIiwKKwkJCQkgICAoaW50KWRlc2MtPmVwX3Jlc3BvbnNlKTsKKwl9IGVsc2UgeworCQlNVFNfREVCVUcoInRyYW5zZmVyaW5nIHRvIGRlc2MtPmVwX291dCA9PSAlZFxuIiwKKwkJCSAgKGludClkZXNjLT5lcF9vdXQpOworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfb3V0KTsKKwl9CisJZGVzYy0+Y29udGV4dC5kYXRhX3BpcGUgPSBwaXBlOworfQorCisKK3N0YXRpYworaW50IG10c19zY3NpX3F1ZXVlY29tbWFuZCggU2NzaV9DbW5kICpzcmIsIG10c19zY3NpX2NtbmRfY2FsbGJhY2sgY2FsbGJhY2sgKQoreworCXN0cnVjdCBtdHNfZGVzYyogZGVzYyA9IChzdHJ1Y3QgbXRzX2Rlc2MqKShzcmItPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0pOworCWludCBlcnIgPSAwOworCWludCByZXM7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKwltdHNfc2hvd19jb21tYW5kKHNyYik7CisJbXRzX2RlYnVnX2R1bXAoZGVzYyk7CisKKwlpZiAoIHNyYi0+ZGV2aWNlLT5sdW4gfHwgc3JiLT5kZXZpY2UtPmlkIHx8IHNyYi0+ZGV2aWNlLT5jaGFubmVsICkgeworCisJCU1UU19ERUJVRygiQ29tbWFuZCB0byBMVU49JWQgSUQ9JWQgQ0hBTk5FTD0lZCBmcm9tIFNDU0kgbGF5ZXJcbiIsKGludClzcmItPmRldmljZS0+bHVuLChpbnQpc3JiLT5kZXZpY2UtPmlkLCAoaW50KXNyYi0+ZGV2aWNlLT5jaGFubmVsICk7CisKKwkJTVRTX0RFQlVHKCJ0aGlzIGRldmljZSBkb2Vzbid0IGV4aXN0XG4iKTsKKworCQlzcmItPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCisJCWlmKGxpa2VseShjYWxsYmFjayAhPSBOVUxMKSkKKwkJCWNhbGxiYWNrKHNyYik7CisKKwkJZ290byBvdXQ7CisJfQorCisJCisJdXNiX2ZpbGxfYnVsa191cmIoZGVzYy0+dXJiLAorCQkgICAgICBkZXNjLT51c2JfZGV2LAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoZGVzYy0+dXNiX2RldixkZXNjLT5lcF9vdXQpLAorCQkgICAgICBzcmItPmNtbmQsCisJCSAgICAgIHNyYi0+Y21kX2xlbiwKKwkJICAgICAgbXRzX2NvbW1hbmRfZG9uZSwKKwkJICAgICAgJmRlc2MtPmNvbnRleHQKKwkJICAgICAgKTsKKworCisJbXRzX2J1aWxkX3RyYW5zZmVyX2NvbnRleHQoIHNyYiwgZGVzYyApOworCWRlc2MtPmNvbnRleHQuZmluYWxfY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkKKwkvKiBoZXJlIHdlIG5lZWQgQVRPTUlDIGFzIHdlIGFyZSBjYWxsZWQgd2l0aCB0aGUgaW9sb2NrICovCisJcmVzPXVzYl9zdWJtaXRfdXJiKGRlc2MtPnVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZih1bmxpa2VseShyZXMpKXsKKwkJTVRTX0VSUk9SKCJlcnJvciAlZCBzdWJtaXR0aW5nIFVSQlxuIiwoaW50KXJlcyk7CisJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCisJCWlmKGxpa2VseShjYWxsYmFjayAhPSBOVUxMKSkKKwkJCWNhbGxiYWNrKHNyYik7CisKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIG10c19zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJtaWNyb3Rla1g2IiwKKwkucHJvY19uYW1lCQk9ICJtaWNyb3Rla1g2IiwKKwkucXVldWVjb21tYW5kCQk9IG10c19zY3NpX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlcgk9IG10c19zY3NpX2Fib3J0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBtdHNfc2NzaV9ob3N0X3Jlc2V0LAorCS5zZ190YWJsZXNpemUgPQkJU0dfQUxMLAorCS5jYW5fcXVldWUgPQkJMSwKKwkudGhpc19pZCA9CQktMSwKKwkuY21kX3Blcl9sdW4gPQkJMSwKKwkudXNlX2NsdXN0ZXJpbmcgPQkxLAorCS5lbXVsYXRlZCA9CQkxLAorfTsKKworc3RydWN0IHZlbmRvcl9wcm9kdWN0Cit7CisJY2hhciogbmFtZTsKKwllbnVtCisJeworCQltdHNfc3VwX3Vua25vd249MCwKKwkJbXRzX3N1cF9hbHBoYSwKKwkJbXRzX3N1cF9mdWxsCisJfQorCXN1cHBvcnRfc3RhdHVzOworfSA7CisKKworLyogVGhlc2UgYXJlIHRha2VuIGZyb20gdGhlIG1zbVVTQi5pbmYgZmlsZSBvbiB0aGUgV2luZG93cyBkcml2ZXIgQ0QgKi8KK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QgbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tdID0KK3sKKwl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FubWFrZXIgWDYiLAltdHNfc3VwX2FscGhhfSwKKwl7ICJQaGFudG9tIEM2IiwJCW10c19zdXBfdW5rbm93bn0sCisJeyAiUGhhbnRvbSAzMzZDWCIsCW10c19zdXBfdW5rbm93bn0sCisJeyAiU2Nhbk1ha2VyIFY2VVNMIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FuTWFrZXIgVjZVU0wiLAltdHNfc3VwX3Vua25vd259LAorCXsgIlNjYW5tYWtlciBWNlVMIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FubWFrZXIgVjZVUEwiLAltdHNfc3VwX2FscGhhfSwKK307CisKKy8qIFRoZSBlbnRyaWVzIG9mIG1pY3JvdGVrX3RhYmxlIG11c3QgY29ycmVzcG9uZCwgbGluZS1ieS1saW5lIHRvCisgICB0aGUgZW50cmllcyBvZiBtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW10uICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkcyBbXSA9Cit7CisJeyBVU0JfREVWSUNFKDB4NGNlLCAweDAzMDApIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOTQpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOTkpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOWEpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwYTApIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwYTMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDgwYTMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDgwYWMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwYjYpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbXRzX3VzYl9pZHMpOworCisKK3N0YXRpYyBpbnQgbXRzX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGk7CisJaW50IGVwX291dCA9IC0xOworCWludCBlcF9pbl9zZXRbM107IC8qIHRoaXMgd2lsbCBicmVhayBpZiB3ZSBoYXZlIG1vcmUgdGhhbiB0aHJlZSBlbmRwb2ludHMKKwkJCSAgIHdoaWNoIGlzIHdoeSB3ZSBjaGVjayAqLworCWludCAqZXBfaW5fY3VycmVudCA9IGVwX2luX3NldDsKKwlpbnQgZXJyX3JldHZhbCA9IC1FTk9NRU07CisKKwlzdHJ1Y3QgbXRzX2Rlc2MgKiBuZXdfZGVzYzsKKwlzdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QgY29uc3QqIHA7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCisJLyogdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBvbiB0aGUgaW50ZXJmYWNlIHdlJ3JlIHByb2JpbmcgKi8KKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nOworCisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisJTVRTX0RFQlVHKCAidXNiLWRldmljZSBkZXNjcmlwdG9yIGF0ICV4XG4iLCAoaW50KWRldiApOworCisJTVRTX0RFQlVHKCAicHJvZHVjdCBpZCA9IDB4JXgsIHZlbmRvciBpZCA9IDB4JXhcbiIsCisJCSAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICk7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKworCXAgPSAmbXRzX3N1cHBvcnRlZF9wcm9kdWN0c1tpZCAtIG10c191c2JfaWRzXTsKKworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJTVRTX0RFQlVHKCAiZm91bmQgbW9kZWwgJXNcbiIsIHAtPm5hbWUgKTsKKwlpZiAoIHAtPnN1cHBvcnRfc3RhdHVzICE9IG10c19zdXBfZnVsbCApCisJCU1UU19NRVNTQUdFKCAibW9kZWwgJXMgaXMgbm90IGtub3duIHRvIGJlIGZ1bGx5IHN1cHBvcnRlZCwgcmVwb3J0cyB3ZWxjb21lIVxuIiwKKwkJCSAgICAgcC0+bmFtZSApOworCisJLyogdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBvbiB0aGUgaW50ZXJmYWNlIHdlJ3JlIHByb2JpbmcgKi8KKwlhbHRzZXR0aW5nID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKworCS8qIENoZWNrIGlmIHRoZSBjb25maWcgaXMgc2FuZSAqLworCisJaWYgKCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gTVRTX0VQX1RPVEFMICkgeworCQlNVFNfV0FSTklORyggImV4cGVjdGluZyAlZCBnb3QgJWQgZW5kcG9pbnRzISBCYWlsaW5nIG91dC5cbiIsCisJCQkgICAgIChpbnQpTVRTX0VQX1RPVEFMLCAoaW50KWFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmb3IoIGkgPSAwOyBpIDwgYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKysgKSB7CisJCWlmICgoYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5ibUF0dHJpYnV0ZXMgJgorCQkgICAgIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7CisKKwkJCU1UU19XQVJOSU5HKCAiY2FuIG9ubHkgZGVhbCB3aXRoIGJ1bGsgZW5kcG9pbnRzOyBlbmRwb2ludCAlZCBpcyBub3QgYnVsay5cbiIsCisJCQkgICAgIChpbnQpYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICk7CisJCX0gZWxzZSB7CisJCQlpZiAoYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKKwkJCSAgICBVU0JfRElSX0lOKQorCQkJCSplcF9pbl9jdXJyZW50KysKKwkJCQkJPSBhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQlVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCQllbHNlIHsKKwkJCQlpZiAoIGVwX291dCAhPSAtMSApIHsKKwkJCQkJTVRTX1dBUk5JTkcoICJjYW4gb25seSBkZWFsIHdpdGggb25lIG91dHB1dCBlbmRwb2ludHMuIEJhaWxpbmcgb3V0LiIgKTsKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQkJfQorCisJCQkJZXBfb3V0ID0gYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKKwkJCQkJVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQkJfQorCQl9CisKKwl9CisKKworCWlmICggZXBfb3V0ID09IC0xICkgeworCQlNVFNfV0FSTklORyggImNvdWxkbid0IGZpbmQgYW4gb3V0cHV0IGJ1bGsgZW5kcG9pbnQuIEJhaWxpbmcgb3V0LlxuIiApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJCisJCisJbmV3X2Rlc2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRzX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19kZXNjKQorCQlnb3RvIG91dDsKKworCW1lbXNldChuZXdfZGVzYywgMCwgc2l6ZW9mKCpuZXdfZGVzYykpOworCW5ld19kZXNjLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghbmV3X2Rlc2MtPnVyYikKKwkJZ290byBvdXRfa2ZyZWU7CisKKwluZXdfZGVzYy0+dXNiX2RldiA9IGRldjsKKwluZXdfZGVzYy0+dXNiX2ludGYgPSBpbnRmOworCWluaXRfTVVURVgoJm5ld19kZXNjLT5sb2NrKTsKKworCS8qIGVuZHBvaW50cyAqLworCW5ld19kZXNjLT5lcF9vdXQgPSBlcF9vdXQ7CisJbmV3X2Rlc2MtPmVwX3Jlc3BvbnNlID0gZXBfaW5fc2V0WzBdOworCW5ld19kZXNjLT5lcF9pbWFnZSA9IGVwX2luX3NldFsxXTsKKworCWlmICggbmV3X2Rlc2MtPmVwX291dCAhPSBNVFNfRVBfT1VUICkKKwkJTVRTX1dBUk5JTkcoICJ3aWxsIHRoaXMgd29yaz8gQ29tbWFuZCBFUCBpcyBub3QgdXN1YWxseSAlZFxuIiwKKwkJCSAgICAgKGludCluZXdfZGVzYy0+ZXBfb3V0ICk7CisKKwlpZiAoIG5ld19kZXNjLT5lcF9yZXNwb25zZSAhPSBNVFNfRVBfUkVTUE9OU0UgKQorCQlNVFNfV0FSTklORyggIndpbGwgdGhpcyB3b3JrPyBSZXNwb25zZSBFUCBpcyBub3QgdXN1YWxseSAlZFxuIiwKKwkJCSAgICAgKGludCluZXdfZGVzYy0+ZXBfcmVzcG9uc2UgKTsKKworCWlmICggbmV3X2Rlc2MtPmVwX2ltYWdlICE9IE1UU19FUF9JTUFHRSApCisJCU1UU19XQVJOSU5HKCAid2lsbCB0aGlzIHdvcms/IEltYWdlIGRhdGEgRVAgaXMgbm90IHVzdWFsbHkgJWRcbiIsCisJCQkgICAgIChpbnQpbmV3X2Rlc2MtPmVwX2ltYWdlICk7CisKKwluZXdfZGVzYy0+aG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmbXRzX3Njc2lfaG9zdF90ZW1wbGF0ZSwKKwkJCXNpemVvZihuZXdfZGVzYykpOworCWlmICghbmV3X2Rlc2MtPmhvc3QpCisJCWdvdG8gb3V0X2ZyZWVfdXJiOworCisJbmV3X2Rlc2MtPmhvc3QtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpbmV3X2Rlc2M7CisJaWYgKHNjc2lfYWRkX2hvc3QobmV3X2Rlc2MtPmhvc3QsIE5VTEwpKSB7CisJCWVycl9yZXR2YWwgPSAtRUlPOworCQlnb3RvIG91dF9mcmVlX3VyYjsKKwl9CisJc2NzaV9zY2FuX2hvc3QobmV3X2Rlc2MtPmhvc3QpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBuZXdfZGVzYyk7CisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV91cmI6CisJdXNiX2ZyZWVfdXJiKG5ld19kZXNjLT51cmIpOworIG91dF9rZnJlZToKKwlrZnJlZShuZXdfZGVzYyk7Cisgb3V0OgorCXJldHVybiBlcnJfcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBtdHNfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBtdHNfZGVzYyAqZGVzYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCisJdXNiX2tpbGxfdXJiKGRlc2MtPnVyYik7CisJc2NzaV9yZW1vdmVfaG9zdChkZXNjLT5ob3N0KTsKKworCXNjc2lfaG9zdF9wdXQoZGVzYy0+aG9zdCk7CisJdXNiX2ZyZWVfdXJiKGRlc2MtPnVyYik7CisJa2ZyZWUoZGVzYyk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgbWljcm90ZWtfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZtdHNfdXNiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtaWNyb3Rla19kcnZfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZtdHNfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1pY3JvdGVrX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KG1pY3JvdGVrX2Rydl9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmggYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzFkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5oCkBAIC0wLDAgKzEsNTUgQEAKKyAvKgorICogRHJpdmVyIGZvciBNaWNyb3RlayBTY2FubWFrZXIgWDYgVVNCIHNjYW5uZXIgYW5kIHBvc3NpYmx5IG90aGVycy4KKyAqIAorICogKEMpIENvcHlyaWdodCAyMDAwIEpvaG4gRnJlbWxpbiA8dmlpQHBlbmd1aW5wb3dlcmVkLmNvbT4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBPbGl2ZXIgTmV1a3VtIDxPbGl2ZXIuTmV1a3VtQGxyei51bmktbXVlbmNoZW4uZGU+CisgKgorICogU2VlIG1pY3JvdGVrLmMgZm9yIGhpc3RvcnkKKyAqCisgKi8KKwordHlwZWRlZiB2b2lkICgqbXRzX3Njc2lfY21uZF9jYWxsYmFjaykoU2NzaV9DbW5kICopOworCisKK3N0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dAoreworCXN0cnVjdCBtdHNfZGVzYyogaW5zdGFuY2U7CisJbXRzX3Njc2lfY21uZF9jYWxsYmFjayBmaW5hbF9jYWxsYmFjazsKKwlTY3NpX0NtbmQgKnNyYjsKKwkKKwl2b2lkKiBkYXRhOworCXVuc2lnbmVkIGRhdGFfbGVuZ3RoOworCWludCBkYXRhX3BpcGU7CisJaW50IGZyYWdtZW50OworCisJdTggc3RhdHVzOyAvKiBzdGF0dXMgcmV0dXJuZWQgZnJvbSBlcF9yZXNwb25zZSBhZnRlciBjb21tYW5kIGNvbXBsZXRpb24gKi8KK307CisKKworc3RydWN0IG10c19kZXNjIHsKKwlzdHJ1Y3QgbXRzX2Rlc2MgKm5leHQ7CisJc3RydWN0IG10c19kZXNjICpwcmV2OworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmOworCisJLyogRW5kcG9pbnQgYWRkcmVzc2VzICovCisJdTggZXBfb3V0OworCXU4IGVwX3Jlc3BvbnNlOworCXU4IGVwX2ltYWdlOworCisJc3RydWN0IFNjc2lfSG9zdCAqIGhvc3Q7CisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dCBjb250ZXh0OworfTsKKworCisjZGVmaW5lIE1UU19FUF9PVVQJMHgxCisjZGVmaW5lIE1UU19FUF9SRVNQT05TRQkweDIKKyNkZWZpbmUgTVRTX0VQX0lNQUdFCTB4MworI2RlZmluZSBNVFNfRVBfVE9UQUwJMHgzCisKKyNkZWZpbmUgTVRTX1NDU0lfRVJSX01BU0sgfjB4M2Z1CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOGU3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCkBAIC0wLDAgKzEsMjM3IEBACisjCisjIFVTQiBJbnB1dCBkcml2ZXIgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIElucHV0IERldmljZXMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9ISUQKKwl0cmlzdGF0ZSAiVVNCIEh1bWFuIEludGVyZmFjZSBEZXZpY2UgKGZ1bGwgSElEKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBmdWxsIEhJRCBzdXBwb3J0IHRvIGNvbm5lY3Qga2V5Ym9hcmRzLAorCSAgbWljZSwgam95c3RpY2tzLCBncmFwaGljIHRhYmxldHMsIG9yIGFueSBvdGhlciBISUQgYmFzZWQgZGV2aWNlcworCSAgdG8geW91ciBjb21wdXRlciB2aWEgVVNCLiBZb3UgYWxzbyBuZWVkIHRvIHNlbGVjdCBISUQgSW5wdXQgbGF5ZXIKKwkgIHN1cHBvcnQgKGJlbG93KSBpZiB5b3Ugd2FudCB0byB1c2Uga2V5Ym9hcmRzLCBtaWNlLCBqb3lzdGlja3MgYW5kCisJICB0aGUgbGlrZSAuLi4gYXMgd2VsbCBhcyBVbmludGVycnVwdGlibGUgUG93ZXIgU3VwcGx5IChVUFMpIGFuZAorCSAgbW9uaXRvciBjb250cm9sIGRldmljZXMuCisKKwkgIFlvdSBjYW4ndCB1c2UgdGhpcyBkcml2ZXIgYW5kIHRoZSBISURCUCAoQm9vdCBQcm90b2NvbCkga2V5Ym9hcmQKKwkgIGFuZCBtb3VzZSBkcml2ZXJzIGF0IHRoZSBzYW1lIHRpbWUuIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlOgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQ+LgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JoaWQuCisKK2NvbW1lbnQgIklucHV0IGNvcmUgc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBISUQgaW5wdXQgbGF5ZXIgb3IgSElEQlAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQgJiYgSU5QVVQ9bgorCitjb25maWcgVVNCX0hJRElOUFVUCisJYm9vbCAiSElEIGlucHV0IGxheWVyIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBJTlBVVCAmJiBVU0JfSElECisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBVU0Iga2V5Ym9hcmQsIG1vdXNlIG9yIGpveXN0aWNrLAorCSAgb3IgYW55IG90aGVyIEhJRCBpbnB1dCBkZXZpY2UuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBISURfRkYKKwlib29sICJGb3JjZSBmZWVkYmFjayBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX0hJRElOUFVUICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaXMgeW91IHdhbnQgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgYSBmZXcgSElEIGRldmljZXMuCisJICBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0PiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9yY2UKKwkgIGZlZWRiYWNrIEFQSS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEhJRF9QSUQKKwlib29sICJQSUQgRGV2aWNlcyAoTWljcm9zb2Z0IFNpZGV3aW5kZXIgRm9yY2UgRmVlZGJhY2sgMikiCisJZGVwZW5kcyBvbiBISURfRkYKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUElELWNvbXBsaWFudCBqb3lzdGljayBhbmQgd2lzaCB0byBlbmFibGUgZm9yY2UKKwkgIGZlZWRiYWNrIGZvciBpdC4gVGhlIE1pY3Jvc29mdCBTaWRld2luZGVyIEZvcmNlIEZlZWRiYWNrIDIgaXMgb25lIHN1Y2gKKwkgIGRldmljZS4KKworY29uZmlnIExPR0lURUNIX0ZGCisJYm9vbCAiTG9naXRlY2ggV2luZ01hbiAqM0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9GRgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGRldmljZXM6CisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gQ29yZGxlc3MgUnVtYmxlUGFkCisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gRm9yY2UgM0QKKwkgIGFuZCBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgZm9yIHRoZW0uCisJICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0CisJICBmb3JjZSBmZWVkYmFjay4KKworY29uZmlnIFRIUlVTVE1BU1RFUl9GRgorCWJvb2wgIlRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBISURfRkYgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRIUlVTVE1BU1RFUiBGaXJlU3RvcmUgRHVhbCBQb3dlciAyLAorCSAgYW5kIHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGl0LgorCSAgTm90ZTogaWYgeW91IHNheSBOIGhlcmUsIHRoaXMgZGV2aWNlIHdpbGwgc3RpbGwgYmUgc3VwcG9ydGVkLCBidXQgd2l0aG91dAorCSAgZm9yY2UgZmVlZGJhY2suCisKK2NvbmZpZyBVU0JfSElEREVWCisJYm9vbCAiL2Rldi9oaWRkZXYgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgSElEIGRldmljZXMgKGZyb20gdGhlIFVTQgorCSAgc3BlY2lmaWNhdGlvbiBzdGFuZHBvaW50KSB0aGF0IGFyZW4ndCBzdHJpY3RseSB1c2VyIGludGVyZmFjZQorCSAgZGV2aWNlcywgbGlrZSBtb25pdG9yIGNvbnRyb2xzIGFuZCBVbmludGVycnVwdGFibGUgUG93ZXIgU3VwcGxpZXMuCisKKwkgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZXNlIGRldmljZXMgc2VwYXJhdGVseSB1c2luZyBhIHNlcGFyYXRlCisJICBldmVudCBpbnRlcmZhY2Ugb24gL2Rldi91c2IvaGlkZGV2WCAoY2hhciAxODA6OTYgdG8gMTgwOjExMSkuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK21lbnUgIlVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzIgorCWRlcGVuZHMgb24gVVNCIT1uICYmIFVTQl9ISUQhPXkKKworY29uZmlnIFVTQl9LQkQKKwl0cmlzdGF0ZSAiVVNCIEhJREJQIEtleWJvYXJkIChzaW1wbGUgQm9vdCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgb25seSBpZiB5b3UgYXJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHlvdSBkb24ndCB3YW50CisJICB0byB1c2UgdGhlIGdlbmVyaWMgSElEIGRyaXZlciBmb3IgeW91ciBVU0Iga2V5Ym9hcmQgYW5kIHByZWZlcgorCSAgdG8gdXNlIHRoZSBrZXlib2FyZCBpbiBpdHMgbGltaXRlZCBCb290IFByb3RvY29sIG1vZGUgaW5zdGVhZC4KKworCSAgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3aGF0IHlvdSB3YW50LiAgVGhpcyBpcyBtb3N0bHkKKwkgIHVzZWZ1bCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIG9yIHNpbXBsZSBrZXlib2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmtiZC4KKworCSAgSWYgZXZlbiByZW1vdGVseSB1bnN1cmUsIHNheSBOLgorCitjb25maWcgVVNCX01PVVNFCisJdHJpc3RhdGUgIlVTQiBISURCUCBNb3VzZSAoc2ltcGxlIEJvb3QpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIG9ubHkgaWYgeW91IGFyZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB5b3UgZG9uJ3Qgd2FudAorCSAgdG8gdXNlIHRoZSBnZW5lcmljIEhJRCBkcml2ZXIgZm9yIHlvdXIgVVNCIG1vdXNlIGFuZCBwcmVmZXIKKwkgIHRvIHVzZSB0aGUgbW91c2UgaW4gaXRzIGxpbWl0ZWQgQm9vdCBQcm90b2NvbCBtb2RlIGluc3RlYWQuCisKKwkgIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBub3Qgd2hhdCB5b3Ugd2FudC4gIFRoaXMgaXMgbW9zdGx5CisJICB1c2VmdWwgZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucyBvciBzaW1wbGUgbWljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibW91c2UuCisKKwkgIElmIGV2ZW4gcmVtb3RlbHkgdW5zdXJlLCBzYXkgTi4KKworZW5kbWVudQorCitjb25maWcgVVNCX0FJUFRFSworCXRyaXN0YXRlICJBaXB0ZWsgNjAwMFUvODAwMFUgdGFibGV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVVNCIHZlcnNpb24gb2YgdGhlIEFpcHRlayA2MDAwVQorCSAgb3IgQWlwdGVrIDgwMDBVIHRhYmxldC4gIE1ha2Ugc3VyZSB0byBzYXkgWSB0byAiTW91c2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfTU9VU0VERVYpIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiCisJICAoQ09ORklHX0lOUFVUX0VWREVWKSBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhaXB0ZWsuCisKK2NvbmZpZyBVU0JfV0FDT00KKwl0cmlzdGF0ZSAiV2Fjb20gSW50dW9zL0dyYXBoaXJlIHRhYmxldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiB2ZXJzaW9uIG9mIHRoZSBXYWNvbSBJbnR1b3MKKwkgIG9yIEdyYXBoaXJlIHRhYmxldC4gIE1ha2Ugc3VyZSB0byBzYXkgWSB0byAiTW91c2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfTU9VU0VERVYpIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiCisJICAoQ09ORklHX0lOUFVUX0VWREVWKSBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3YWNvbS4KKworY29uZmlnIFVTQl9LQlRBQgorCXRyaXN0YXRlICJLQiBHZWFyIEphbVN0dWRpbyB0YWJsZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgdmVyc2lvbiBvZiB0aGUgS0IgR2VhcgorCSAgSmFtU3R1ZGlvIHRhYmxldC4gIE1ha2Ugc3VyZSB0byBzYXkgWSB0byAiTW91c2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfTU9VU0VERVYpIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiCisJICAoQ09ORklHX0lOUFVUX0VWREVWKSBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrYnRhYi4KKworY29uZmlnIFVTQl9QT1dFUk1BVEUKKwl0cmlzdGF0ZSAiR3JpZmZpbiBQb3dlck1hdGUgYW5kIENvbnRvdXIgSm9nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBHcmlmZmluIFBvd2VyTWF0ZSBvciBDb250b3VyIEpvZyBkZXZpY2VzLgorCSAgVGhlc2UgYXJlIGFsdW1pbnVtIGRpYWxzIHdoaWNoIGNhbiBtZWFzdXJlIGNsb2Nrd2lzZSBhbmQgYW50aWNsb2Nrd2lzZQorCSAgcm90YXRpb24uICBUaGUgZGlhbCBhbHNvIGFjdHMgYXMgYSBwdXNoYnV0dG9uLiAgVGhlIGJhc2UgY29udGFpbnMgYW4gTEVECisJICB3aGljaCBjYW4gYmUgaW5zdHJ1Y3RlZCB0byBwdWxzZSBvciB0byBzd2l0Y2ggdG8gYSBwYXJ0aWN1bGFyIGludGVuc2l0eS4KKworCSAgWW91IGNhbiBkb3dubG9hZCB1c2Vyc3BhY2UgdG9vbHMgZnJvbQorCSAgPGh0dHA6Ly9zb3dlcmJ1dHRzLmNvbS9wb3dlcm1hdGUvPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG93ZXJtYXRlLgorCitjb25maWcgVVNCX01UT1VDSAorCXRyaXN0YXRlICJNaWNyb1RvdWNoIFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIE1pY3JvVG91Y2ggKE5vdyAzTSkgVVNCIAorCSAgVG91Y2hzY3JlZW4gY29udHJvbGxlci4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL210b3VjaC50eHQ+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtdG91Y2h1c2IuCisKK2NvbmZpZyBVU0JfRUdBTEFYCisJdHJpc3RhdGUgImVHYWxheCBUb3VjaEtpdCBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBlR2FsYXggVG91Y2hLaXQgVVNCCisJICBUb3VjaHNjcmVlbiBjb250cm9sbGVyLgorCisJICBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIFhlbmFyYyA3MDBUU1YgbW9uaXRvcgorCSAgd2l0aCBlR2FsYXggdG91Y2hzY3JlZW4uCisKKwkgIEhhdmUgYSBsb29rIGF0IDxodHRwOi8vbGludXguY2hhcHRlcjcuY2gvdG91Y2hraXQvPiBmb3IKKwkgIGEgdXNhZ2UgZGVzY3JpcHRpb24gYW5kIHRoZSByZXF1aXJlZCB1c2VyLXNwYWNlIHN0dWZmLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0b3VjaGtpdHVzYi4KKworY29uZmlnIFVTQl9YUEFECisJdHJpc3RhdGUgIlgtQm94IGdhbWVwYWQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBYLUJveCBwYWQgd2l0aCB5b3VyIGNvbXB1dGVyLgorCSAgTWFrZSBzdXJlIHRvIHNheSBZIHRvICJKb3lzdGljayBzdXBwb3J0IiAoQ09ORklHX0lOUFVUX0pPWURFVikKKwkgIGFuZC9vciAiRXZlbnQgaW50ZXJmYWNlIHN1cHBvcnQiIChDT05GSUdfSU5QVVRfRVZERVYpIGFzIHdlbGwuCisKKwkgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gY29ubmVjdCB0aGUgWC1Cb3ggcGFkIHRvIFVTQiwgc2VlCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeHBhZC4KKwkgIAorY29uZmlnIFVTQl9BVElfUkVNT1RFCisJdHJpc3RhdGUgIkFUSSAvIFgxMCBVU0IgUkYgcmVtb3RlIGNvbnRyb2wiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBBVEkgb3IgWDEwICJMb2xhIiBVU0IgcmVtb3RlIGNvbnRyb2wuCisJICBUaGVzZSBhcmUgUkYgcmVtb3RlcyB3aXRoIFVTQiByZWNlaXZlcnMuIAorCSAgVGhlIEFUSSByZW1vdGUgY29tZXMgd2l0aCBtYW55IG9mIEFUSSdzIEFsbC1Jbi1Xb25kZXIgdmlkZW8gY2FyZHMuCisJICBUaGUgWDEwICJMb2xhIiByZW1vdGUgaXMgYXZhaWxhYmxlIGF0OgorCSAgICAgPGh0dHA6Ly93d3cueDEwLmNvbS9wcm9kdWN0cy9sb2xhX3NnMS5odG0+CisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBtb3VzZSBwb2ludGVyLCBsZWZ0IGFuZCByaWdodCBtb3VzZSBidXR0b25zLCAKKwkgIGFuZCBtYXBzIGFsbCB0aGUgb3RoZXIgcmVtb3RlIGJ1dHRvbnMgdG8ga2V5cHJlc3MgZXZlbnRzLgorCSAgCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBhdGlfcmVtb3RlLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiY2VkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZQpAQCAtMCwwICsxLDM5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVVNCIGlucHV0IGRyaXZlcnMKKyMKKworIyBNdWx0aXBhcnQgb2JqZWN0cy4KK3VzYmhpZC1vYmpzCTo9IGhpZC1jb3JlLm8KKworIyBPcHRpb25hbCBwYXJ0cyBvZiBtdWx0aXBhcnQgb2JqZWN0cy4KKworaWZlcSAoJChDT05GSUdfVVNCX0hJRERFVikseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWRkZXYubworZW5kaWYKK2lmZXEgKCQoQ09ORklHX1VTQl9ISURJTlBVVCkseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWQtaW5wdXQubworZW5kaWYKK2lmZXEgKCQoQ09ORklHX0hJRF9QSUQpLHkpCisJdXNiaGlkLW9ianMJKz0gcGlkLm8KK2VuZGlmCitpZmVxICgkKENPTkZJR19MT0dJVEVDSF9GRikseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWQtbGdmZi5vCitlbmRpZgoraWZlcSAoJChDT05GSUdfVEhSVVNUTUFTVEVSX0ZGKSx5KQorCXVzYmhpZC1vYmpzCSs9IGhpZC10bWZmLm8KK2VuZGlmCitpZmVxICgkKENPTkZJR19ISURfRkYpLHkpCisJdXNiaGlkLW9ianMJKz0gaGlkLWZmLm8KK2VuZGlmCisKK29iai0kKENPTkZJR19VU0JfQUlQVEVLKQkrPSBhaXB0ZWsubworb2JqLSQoQ09ORklHX1VTQl9BVElfUkVNT1RFKQkrPSBhdGlfcmVtb3RlLm8KK29iai0kKENPTkZJR19VU0JfSElEKQkJKz0gdXNiaGlkLm8KK29iai0kKENPTkZJR19VU0JfS0JEKQkJKz0gdXNia2JkLm8KK29iai0kKENPTkZJR19VU0JfS0JUQUIpCQkrPSBrYnRhYi5vCitvYmotJChDT05GSUdfVVNCX01PVVNFKQkJKz0gdXNibW91c2Uubworb2JqLSQoQ09ORklHX1VTQl9NVE9VQ0gpCSs9IG10b3VjaHVzYi5vCitvYmotJChDT05GSUdfVVNCX0VHQUxBWCkJKz0gdG91Y2hraXR1c2Iubworb2JqLSQoQ09ORklHX1VTQl9QT1dFUk1BVEUpCSs9IHBvd2VybWF0ZS5vCitvYmotJChDT05GSUdfVVNCX1dBQ09NKQkJKz0gd2Fjb20ubworb2JqLSQoQ09ORklHX1VTQl9YUEFEKQkJKz0geHBhZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmVhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9haXB0ZWsuYwpAQCAtMCwwICsxLDIyODMgQEAKKy8qCisgKiAgTmF0aXZlIHN1cHBvcnQgZm9yIHRoZSBBaXB0ZWsgSHlwZXJQZW4gVVNCIFRhYmxldHMKKyAqICAoNDAwMFUvNTAwMFUvNjAwMFUvODAwMFUvMTIwMDBVKQorICogIAorICogIENvcHlyaWdodCAoYykgMjAwMSAgICAgIENocmlzIEF0ZW5hc2lvICAgPGNocmlzQGNydWQubmV0PgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEJyeWFuIFcuIEhlYWRsZXkgPGJ3aGVhZGxleUBlYXJ0aGxpbmsubmV0PgorICoKKyAqICBiYXNlZCBvbiB3YWNvbS5jIGJ5CisgKiAgICAgVm9qdGVjaCBQYXZsaWsgICAgICA8dm9qdGVjaEBzdXNlLmN6PgorICogICAgIEFuZHJlYXMgQmFjaCBBYWVuICAgPGFiYWNoQHN0b2ZhbmV0LmRrPgorICogICAgIENsaWZmb3JkIFdvbGYgICAgICAgPGNsaWZmb3JkQGNsaWZmb3JkLmF0PgorICogICAgIFNhbSBNb3NlbCAgICAgICAgICAgPHNhbS5tb3NlbEBjb21wdXRlci5vcmc+CisgKiAgICAgSmFtZXMgRS4gQmxhaXIgICAgICA8Y29ydnVzQGdudS5vcmc+CisgKiAgICAgRGFuaWVsIEVnZ2VyICAgICAgICA8ZWdnZXJAc3VzZS5kZT4KKyAqCisgKiAgTWFueSB0aGFua3MgdG8gT2xpdmVyIEt1ZWNoZW1hbm4gZm9yIGhpcyBzdXBwb3J0LgorICoKKyAqICBDaGFuZ2VMb2c6CisgKiAgICAgIHYwLjEgLSBJbml0aWFsIHJlbGVhc2UKKyAqICAgICAgdjAuMiAtIEhhY2sgdG8gZ2V0IGFyb3VuZCBmYWtlIGV2ZW50IDI4J3MuIChCcnlhbiBXLiBIZWFkbGV5KQorICogICAgICB2MC4zIC0gTWFrZSBVUkIgZHluYW1pYyAoQnJ5YW4gVy4gSGVhZGxleSwgSnVuLTgtMjAwMikKKyAqICAgICAgICAgICAgIFJlbGVhc2VkIHRvIExpbnV4IDIuNC4xOSBhbmQgMi41LngKKyAqICAgICAgdjAuNCAtIFJld3JvdGUgc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIGNvZGUgdG8gZGVhbCB3aXRoCisgKiAgICAgICAgICAgICBjb3JyZWN0ZWQgY29udHJvbCBzZXF1ZW5jZXMsIHRpbWluZywgZHluYW1pYyBjb25maWd1cmF0aW9uLAorICogICAgICAgICAgICAgc3VwcG9ydCBvZiA2MDAwVSAtIDEyMDAwVSwgcHJvY2ZzLCBhbmQgbWFjcm8ga2V5IHN1cHBvcnQKKyAqICAgICAgICAgICAgIChKYW4tMS0yMDAzIC0gRmViLTUtMjAwMywgQnJ5YW4gVy4gSGVhZGxleSkKKyAqICAgICAgdjEuMCAtIEFkZGVkIHN1cHBvcnQgZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMsIGNvdW50IG9mIG1lc3NhZ2VzCisgKiAgICAgICAgICAgICByZWNlaXZlZCBmcm9tIFVSQiAtIE1hci04LTIwMDMsIEJyeWFuIFcuIEhlYWRsZXkKKyAqICAgICAgdjEuMSAtIGFkZGVkIHN1cHBvcnQgZm9yIHRhYmxldCByZXNvbHV0aW9uLCBjaGFuZ2VkIERWIGFuZCBwcm94aW1pdHkKKyAqICAgICAgICAgICAgIHNvbWUgY29ycmVjdGlvbnMgLSBKdW4tMjItMjAwMywgbWFydGluIHNjaG5lZWJhY2hlcgorICogICAgICAgICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSwgZGVwcmVjYXRpbmcgdGhlCisgKiAgICAgICAgICAgICBwcm9jZnMgaW50ZXJmYWNlIGZvciAyLjUueCBrZXJuZWwuIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IKKyAqICAgICAgICAgICAgIFdoZWVsIGNvbW1hbmQuIEJyeWFuIFcuIEhlYWRsZXkgSnVseS0xNS0yMDAzLgorICogICAgICB2MS4yIC0gUmV3b3JrZWQgaml0dGVyIHRpbWVyIGFzIGEga2VybmVsIHRocmVhZC4gCisgKiAgICAgICAgICAgICBCcnlhbiBXLiBIZWFkbGV5IE5vdmVtYmVyLTI4LTIwMDMvSmFuLTEwLTIwMDQuCisgKiAgICAgIHYxLjMgLSBSZXBhaXJlZCBpc3N1ZSBvZiBrZXJuZWwgdGhyZWFkIGdvaW5nIG51dHMgb24gc2luZ2xlLXByb2Nlc3NvcgorICogICAgICAgICAgICAgbWFjaGluZXMsIGludHJvZHVjZWQgcHJvZ3JhbW1hYmxlRGVsYXkgYXMgYSBjb21tYW5kIGxpbmUKKyAqICAgICAgICAgICAgIHBhcmFtZXRlci4gRmViIDcgMjAwNCwgQnJ5YW4gVy4gSGVhZGxleS4KKyAqICAgICAgdjEuNCAtIFJlLXdpcmUgaml0dGVyIHNvIGl0IGRvZXMgbm90IHJlcXVpcmUgYSB0aHJlYWQuIENvdXJ0ZXN5IG9mCisgKiAgICAgICAgICAgICBSZW5lIHZhbiBQYWFzc2VuLiBBZGRlZCByZXBvcnRpbmcgb2YgcGh5c2ljYWwgcG9pbnRlciBkZXZpY2UKKyAqICAgICAgICAgICAgIChlLmcuLCBzdHlsdXMsIG1vdXNlIGluIHJlcG9ydHMgMiwgMywgNCwgNS4gV2UgZG9uJ3Qga25vdworICogICAgICAgICAgICAgZm9yIHJlcG9ydHMgMSwgNi4pCisgKiAgICAgICAgICAgICB3aGF0IHBoeXNpY2FsIGRldmljZSByZXBvcnRzIGZvciByZXBvcnRzIDEsIDYuKSBBbHNvIGVuYWJsZWQKKyAqICAgICAgICAgICAgIE1PVVNFIGFuZCBMRU5TIHRvb2wgYnV0dG9uIG1vZGVzLiBSZW5hbWVkICJydWJiZXIiIHRvICJlcmFzZXIiLgorICogICAgICAgICAgICAgRmViIDIwLCAyMDA0LCBCcnlhbiBXLiBIZWFkbGV5LgorICogICAgICB2MS41IC0gQWRkZWQgcHJldmlvdXNKaXR0ZXJhYmxlLCBzbyB3ZSBkb24ndCBkbyBqaXR0ZXIgZGVsYXkgd2hlbiB0aGUKKyAqICAgICAgICAgICAgIHVzZXIgaXMgaG9sZGluZyBhIGJ1dHRvbiBkb3duIGZvciBwZXJpb2RzIG9mIHRpbWUuCisgKgorICogTk9URToKKyAqICAgICAgVGhpcyBrZXJuZWwgZHJpdmVyIGlzIGF1Z21lbnRlZCBieSB0aGUgIkFpcHRlayIgWEZyZWU4NiBpbnB1dAorICogICAgICBkcml2ZXIgZm9yIHlvdXIgWCBzZXJ2ZXIsIGFzIHdlbGwgYXMgdGhlIEdhaXB0ZWsgR1VJIEZyb250LWVuZAorICogICAgICAiVGFibGV0IE1hbmFnZXIiLiAKKyAqICAgICAgVGhlc2UgdGhyZWUgcHJvZHVjdHMgYXJlIGhpZ2hseSBpbnRlcmFjdGl2ZSB3aXRoIG9uZSBhbm90aGVyLCAKKyAqICAgICAgc28gdGhlcmVmb3JlIGl0J3MgZWFzaWVyIHRvIGRvY3VtZW50IHRoZW0gYWxsIGFzIG9uZSBzdWJzeXN0ZW0uCisgKiAgICAgIFBsZWFzZSB2aXNpdCB0aGUgcHJvamVjdCdzICJob21lIHBhZ2UiLCBsb2NhdGVkIGF0LCAKKyAqICAgICAgaHR0cDovL2FpcHRla3RhYmxldC5zb3VyY2Vmb3JnZS5uZXQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS41IChNYXktMTUtMjAwNCkiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICJCcnlhbiBXLiBIZWFkbGV5L0NocmlzIEF0ZW5hc2lvIgorI2RlZmluZSBEUklWRVJfREVTQyAgICAiQWlwdGVrIEh5cGVyUGVuIFVTQiBUYWJsZXQgRHJpdmVyIChMaW51eCAyLjYueCkiCisKKy8qCisgKiBBaXB0ZWsgc3RhdHVzIHBhY2tldDoKKyAqCisgKiAocmV0dXJuZWQgYXMgUmVwb3J0IDEgLSByZWxhdGl2ZSBjb29yZGluYXRlcyBmcm9tIG1vdXNlIGFuZCBzdHlsdXMpCisgKgorICogICAgICAgIGJpdDcgIGJpdDYgIGJpdDUgIGJpdDQgIGJpdDMgIGJpdDIgIGJpdDEgIGJpdDAKKyAqIGJ5dGUwICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMQorICogYnl0ZTEgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgIEJTMiAgIEJTICAgIFRpcAorICogYnl0ZTIgIFg3ICAgIFg2ICAgIFg1ICAgIFg0ICAgIFgzICAgIFgyICAgIFgxICAgIFgwCisgKiBieXRlMyAgWTcgICAgWTYgICAgWTUgICAgWTQgICAgWTMgICAgWTIgICAgWTEgICAgWTAKKyAqCisgKiAocmV0dXJuZWQgYXMgUmVwb3J0IDIgLSBhYnNvbHV0ZSBjb29yZGluYXRlcyBmcm9tIHRoZSBzdHlsdXMpCisgKgorICogICAgICAgIGJpdDcgIGJpdDYgIGJpdDUgIGJpdDQgIGJpdDMgIGJpdDIgIGJpdDEgIGJpdDAKKyAqIGJ5dGUwICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTEgIFg3ICAgIFg2ICAgIFg1ICAgIFg0ICAgIFgzICAgIFgyICAgIFgxICAgIFgwCisgKiBieXRlMiAgWDE1ICAgWDE0ICAgWDEzICAgWDEyICAgWDExICAgWDEwICAgWDkgICAgWDgKKyAqIGJ5dGUzICBZNyAgICBZNiAgICBZNSAgICBZNCAgICBZMyAgICBZMiAgICBZMSAgICBZMAorICogYnl0ZTQgIFkxNSAgIFkxNCAgIFkxMyAgIFkxMiAgIFkxMSAgIFkxMCAgIFk5ICAgIFk4CisgKiBieXRlNSAgICogICAgICogICAgICogICAgQlMyICAgQlMxICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGU2ICBQNyAgICBQNiAgICBQNSAgICBQNCAgICBQMyAgICBQMiAgICBQMSAgICBQMAorICogYnl0ZTcgIFAxNSAgIFAxNCAgIFAxMyAgIFAxMiAgIFAxMSAgIFAxMCAgIFA5ICAgIFA4CisgKgorICogKHJldHVybmVkIGFzIFJlcG9ydCAzIC0gYWJzb2x1dGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgbW91c2UpCisgKgorICogICAgICAgIGJpdDcgIGJpdDYgIGJpdDUgIGJpdDQgIGJpdDMgIGJpdDIgIGJpdDEgIGJpdDAKKyAqIGJ5dGUwICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTEgIFg3ICAgIFg2ICAgIFg1ICAgIFg0ICAgIFgzICAgIFgyICAgIFgxICAgIFgwCisgKiBieXRlMiAgWDE1ICAgWDE0ICAgWDEzICAgWDEyICAgWDExICAgWDEwICAgWDkgICAgWDgKKyAqIGJ5dGUzICBZNyAgICBZNiAgICBZNSAgICBZNCAgICBZMyAgICBZMiAgICBZMSAgICBZMAorICogYnl0ZTQgIFkxNSAgIFkxNCAgIFkxMyAgIFkxMiAgIFkxMSAgIFkxMCAgIFk5ICAgIFk4CisgKiBieXRlNSAgICogICAgICogICAgICogICAgQlMyICAgQlMxICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGU2ICBQNyAgICBQNiAgICBQNSAgICBQNCAgICBQMyAgICBQMiAgICBQMSAgICBQMAorICogYnl0ZTcgIFAxNSAgIFAxNCAgIFAxMyAgIFAxMiAgIFAxMSAgIFAxMCAgIFA5ICAgIFA4CisgKgorICogKHJldHVybmVkIGFzIFJlcG9ydCA0IC0gbWFjcm9rZXlzIGZyb20gdGhlIHN0eWx1cykKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwICAgICAwCisgKiBieXRlMSAgIDAgICAgIDAgICAgIDAgICAgQlMyICAgQlMgICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGUyICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTMgICAwICAgICAwICAgICAwICAgIEs0ICAgIEszICAgIEsyICAgIEsxICAgIEswCisgKiBieXRlNCAgUDcgICAgUDYgICAgUDUgICAgUDQgICAgUDMgICAgUDIgICAgUDEgICAgUDAKKyAqIGJ5dGU1ICBQMTUgICBQMTQgICBQMTMgICBQMTIgICBQMTEgICBQMTAgICBQOSAgICBQOAorICoKKyAqIChyZXR1cm5lZCBhcyBSZXBvcnQgNSAtIG1hY3Jva2V5cyBmcm9tIHRoZSBtb3VzZSkKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwICAgICAwCisgKiBieXRlMSAgIDAgICAgIDAgICAgIDAgICAgQlMyICAgQlMgICAgVGlwICAgSVIgICAgRFYKKyAqIGJ5dGUyICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMCAgICAgMSAgICAgMAorICogYnl0ZTMgICAwICAgICAwICAgICAwICAgIEs0ICAgIEszICAgIEsyICAgIEsxICAgIEswCisgKiBieXRlNCAgUDcgICAgUDYgICAgUDUgICAgUDQgICAgUDMgICAgUDIgICAgUDEgICAgUDAKKyAqIGJ5dGU1ICBQMTUgICBQMTQgICBQMTMgICBQMTIgICBQMTEgICBQMTAgICBQOSAgICBQOAorICoKKyAqIElSOiBJbiBSYW5nZSA9IFByb3hpbWl0eSBvbgorICogRFYgPSBEYXRhIFZhbGlkCisgKiBCUyA9IEJhcnJlbCBTd2l0Y2ggKGFzIGluLCBtYWNybyBrZXlzKQorICogQlMyIGFsc28gcmVmZXJyZWQgdG8gYXMgVGFibGV0IFBpY2sKKyAqCisgKiBDb21tYW5kIFN1bW1hcnk6CisgKgorICogVXNlIHJlcG9ydF90eXBlIENPTlRST0wgKDMpCisgKiBVc2UgcmVwb3J0X2lkICAgMgorICoKKyAqIENvbW1hbmQvRGF0YSAgICBEZXNjcmlwdGlvbiAgICAgUmV0dXJuIEJ5dGVzICAgIFJldHVybiBWYWx1ZQorICogMHgxMC8weDAwICAgICAgIFN3aXRjaFRvTW91c2UgICAgICAgMAorICogMHgxMC8weDAxICAgICAgIFN3aXRjaFRvVGFibGV0ICAgICAgMAorICogMHgxOC8weDA0ICAgICAgIFNldFJlc29sdXRpb24gICAgICAgMCAKKyAqIDB4MTIvMHhGRiAgICAgICBBdXRvR2Fpbk9uICAgICAgICAgIDAKKyAqIDB4MTcvMHgwMCAgICAgICBGaWx0ZXJPbiAgICAgICAgICAgIDAKKyAqIDB4MDEvMHgwMCAgICAgICBHZXRYRXh0ZW5zaW9uICAgICAgIDIgICAgICAgICAgIE1heFgKKyAqIDB4MDEvMHgwMSAgICAgICBHZXRZRXh0ZW5zaW9uICAgICAgIDIgICAgICAgICAgIE1heFkKKyAqIDB4MDIvMHgwMCAgICAgICBHZXRNb2RlbENvZGUgICAgICAgIDIgICAgICAgICAgIE1vZGVsQ29kZSA9IExPQllURQorICogMHgwMy8weDAwICAgICAgIEdldE9ETUNvZGUgICAgICAgICAgMiAgICAgICAgICAgT0RNQ29kZQorICogMHgwOC8weDAwICAgICAgIEdldFByZXNzdXJlTGV2ZWxzICAgMiAgICAgICAgICAgPTUxMgorICogMHgwNC8weDAwICAgICAgIEdldEZpcm13YXJlVmVyc2lvbiAgMiAgICAgICAgICAgRmlybXdhcmUgVmVyc2lvbgorICogMHgxMS8weDAyICAgICAgIEVuYWJsZU1hY3JvS2V5cyAgICAgMAorICoKKyAqIFRvIGluaXRpYWxpemUgdGhlIHRhYmxldDoKKyAqCisgKiAoMSkgU2VuZCBSZXNvbHV0aW9uNTAwTFBJIChDb21tYW5kKQorICogKDIpIFF1ZXJ5IGZvciBNb2RlbCBjb2RlIChPcHRpb24gUmVwb3J0KQorICogKDMpIFF1ZXJ5IGZvciBPRE0gY29kZSAoT3B0aW9uIFJlcG9ydCkKKyAqICg0KSBRdWVyeSBmb3IgZmlybXdhcmUgKE9wdGlvbiBSZXBvcnQpCisgKiAoNSkgUXVlcnkgZm9yIEdldFhFeHRlbnNpb24gKE9wdGlvbiBSZXBvcnQpCisgKiAoNikgUXVlcnkgZm9yIEdldFlFeHRlbnNpb24gKE9wdGlvbiBSZXBvcnQpCisgKiAoNykgUXVlcnkgZm9yIEdldFByZXNzdXJlTGV2ZWxzIChPcHRpb24gUmVwb3J0KQorICogKDgpIFN3aXRjaFRvVGFibGV0IGZvciBBYnNvbHV0ZSBjb29yZGluYXRlcywgb3IKKyAqICAgICBTd2l0Y2hUb01vdXNlIGZvciBSZWxhdGl2ZSBjb29yZGluYXRlcyAoQ29tbWFuZCkKKyAqICg5KSBFbmFibGVNYWNyb0tleXMgKENvbW1hbmQpCisgKiAoMTApIEZpbHRlck9uIChDb21tYW5kKQorICogKDExKSBBdXRvR2Fpbk9uIChDb21tYW5kKQorICoKKyAqIChTdGVwIDkgY2FuIGJlIG9taXR0ZWQsIGJ1dCB5b3UnbGwgdGhlbiBoYXZlIG5vIGZ1bmN0aW9uIGtleXMuKQorICovCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BSVBURUsJCQkJMHgwOGNhCisjZGVmaW5lIFVTQl9SRVFfR0VUX1JFUE9SVAkJCQkweDAxCisjZGVmaW5lIFVTQl9SRVFfU0VUX1JFUE9SVAkJCQkweDA5CisKKwkvKiBQb2ludGVyTW9kZSBjb2RlcworCSAqLworI2RlZmluZSBBSVBURUtfUE9JTlRFUl9PTkxZX01PVVNFX01PREUJCQkwCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREUJCQkxCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFCQkJMgorCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX0FMTE9XX01PVVNFX01PREUoYSkJCVwKKwkoYSA9PSBBSVBURUtfUE9JTlRFUl9PTkxZX01PVVNFX01PREUgfHwJCVwKKwkgYSA9PSBBSVBURUtfUE9JTlRFUl9FSVRIRVJfTU9ERSkKKyNkZWZpbmUgQUlQVEVLX1BPSU5URVJfQUxMT1dfU1RZTFVTX01PREUoYSkJCVwKKwkoYSA9PSBBSVBURUtfUE9JTlRFUl9PTkxZX1NUWUxVU19NT0RFIHx8CVwKKwkgYSA9PSBBSVBURUtfUE9JTlRFUl9FSVRIRVJfTU9ERSkKKworCS8qIENvb3JkaW5hdGVNb2RlIGNvZGUKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX0NPT1JESU5BVEVfUkVMQVRJVkVfTU9ERQkJCTAKKyNkZWZpbmUgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERQkJCTEKKworICAgICAgIC8qIFhUaWx0IGFuZCBZVGlsdCB2YWx1ZXMKKyAgICAgICAgKi8KKyNkZWZpbmUgQUlQVEVLX1RJTFRfTUlOCQkJCQkoLTEyOCkKKyNkZWZpbmUgQUlQVEVLX1RJTFRfTUFYCQkJCQkxMjcKKyNkZWZpbmUgQUlQVEVLX1RJTFRfRElTQUJMRQkJCQkoLTEwMTAxKQorCisJLyogV2hlZWwgdmFsdWVzCisJICovCisjZGVmaW5lIEFJUFRFS19XSEVFTF9NSU4JCQkJMAorI2RlZmluZSBBSVBURUtfV0hFRUxfTUFYCQkJCTEwMjQKKyNkZWZpbmUgQUlQVEVLX1dIRUVMX0RJU0FCTEUJCQkJKC0xMDEwMSkKKworCS8qIFRvb2xDb2RlIHZhbHVlcywgd2hpY2ggQlRXIGFyZSAweDE0MCAuLiAweDE0ZgorCSAqIFdlIGhhdmUgdGhpbmdzIHNldCB1cCBzdWNoIHRoYXQgaWYgVE9PTF9CVVRUT05fRklSRURfQklUIGlzCisJICogbm90IHNldCwgd2UnbGwgc2VuZCBvbmUgaW5zdGFuY2Ugb2YgQUlQVEVLX1RPT0xfQlVUVE9OX3h4eC4KKwkgKgorCSAqIFdoZW5ldmVyIHRoZSB1c2VyIHJlc2V0cyB0aGUgdmFsdWUsIFRPT0xfQlVUVE9OX0ZJUkVEX0JJVCB3aWxsCisJICogZ2V0IHJlc2V0LgorCSAqLworI2RlZmluZSBUT09MX0JVVFRPTih4KQkJCQkJKCh4KSAmIDB4MTRmKQorI2RlZmluZSBUT09MX0JVVFRPTl9GSVJFRCh4KQkJCQkoKHgpICYgMHgyMDApCisjZGVmaW5lIFRPT0xfQlVUVE9OX0ZJUkVEX0JJVAkJCQkweDIwMAorCS8qIHRvb2xNb2RlIGNvZGVzCisJICovCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9QRU5fTU9ERQkJCUJUTl9UT09MX1BFTgorI2RlZmluZSBBSVBURUtfVE9PTF9CVVRUT05fUEVOX01PREUJCQlCVE5fVE9PTF9QRU4KKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX1BFTkNJTF9NT0RFCQkJQlROX1RPT0xfUEVOQ0lMCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9CUlVTSF9NT0RFCQkJQlROX1RPT0xfQlJVU0gKKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX0FJUkJSVVNIX01PREUJCUJUTl9UT09MX0FJUkJSVVNICisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9FUkFTRVJfTU9ERQkJCUJUTl9UT09MX1JVQkJFUgorI2RlZmluZSBBSVBURUtfVE9PTF9CVVRUT05fTU9VU0VfTU9ERQkJCUJUTl9UT09MX01PVVNFCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9MRU5TX01PREUJCQlCVE5fVE9PTF9MRU5TCisKKwkvKiBEaWFnbm9zdGljIG1lc3NhZ2UgY29kZXMKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX0RJQUdOT1NUSUNfTkEJCQkJMAorI2RlZmluZSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX1JFTEFUSVZFX0lOX0FCU09MVVRFCTEKKyNkZWZpbmUgQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19BQlNPTFVURV9JTl9SRUxBVElWRQkyCisjZGVmaW5lIEFJUFRFS19ESUFHTk9TVElDX1RPT0xfRElTQUxMT1dFRAkJMworCisJLyogVGltZSB0byB3YWl0IChpbiBtcykgdG8gaGVscCBtYXNrIGhhbmQgaml0dGVyaW5nIAorCSAqIHdoZW4gcHJlc3NpbmcgdGhlIHN0eWx1cyBidXR0b25zLgorCSAqLworI2RlZmluZSBBSVBURUtfSklUVEVSX0RFTEFZX0RFRkFVTFQJCQk1MAorCisJLyogVGltZSB0byB3YWl0IChpbiBtcykgaW4tYmV0d2VlbiBzZW5kaW5nIHRoZSB0YWJsZXQKKwkgKiBhIGNvbW1hbmQgYW5kIGJlZ2lubmluZyB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIHRoZSByZXR1cm4KKwkgKiBzZXF1ZW5jZSBmcm9tIHRoZSB0YWJsZXQuCisJICovCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMjUJCTI1CisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfNTAJCTUwCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMTAwCQkxMDAKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8yMDAJCTIwMAorI2RlZmluZSBBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzMwMAkJMzAwCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfNDAwCQk0MDAKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV9ERUZBVUxUCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfNDAwCisKKwkvKiBNb3VzZSBidXR0b24gcHJvZ3JhbW1pbmcKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OCQkweDAxCisjZGVmaW5lIEFJUFRFS19NT1VTRV9SSUdIVF9CVVRUT04JCTB4MDIKKyNkZWZpbmUgQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT04JCTB4MDQKKworCS8qIFN0eWx1cyBidXR0b24gcHJvZ3JhbW1pbmcKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX1NUWUxVU19MT1dFUl9CVVRUT04JCTB4MDgKKyNkZWZpbmUgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT04JCTB4MTAKKworCS8qIExlbmd0aCBvZiBpbmNvbWluZyBwYWNrZXQgZnJvbSB0aGUgdGFibGV0CisJICovCisjZGVmaW5lIEFJUFRFS19QQUNLRVRfTEVOR1RICQkJOAorCisJLyogV2UgcmVwb3J0IGluIEVWX01JU0MgYm90aCB0aGUgcHJveGltaXR5IGFuZAorCSAqIHdoZXRoZXIgdGhlIHJlcG9ydCBjYW1lIGZyb20gdGhlIHN0eWx1cywgdGFibGV0IG1vdXNlCisJICogb3IgInVua25vd24iIC0tIFVua25vd24gd2hlbiB0aGUgdGFibGV0IGlzIGluIHJlbGF0aXZlCisJICogbW9kZSwgYmVjYXVzZSB3ZSBvbmx5IGdldCByZXBvcnQgMSdzLgorCSAqLworI2RlZmluZSBBSVBURUtfUkVQT1JUX1RPT0xfVU5LTk9XTgkJMHgxMAorI2RlZmluZSBBSVBURUtfUkVQT1JUX1RPT0xfU1RZTFVTCQkweDIwCisjZGVmaW5lIEFJUFRFS19SRVBPUlRfVE9PTF9NT1VTRQkJMHg0MAorCitzdGF0aWMgaW50IHByb2dyYW1tYWJsZURlbGF5ID0gQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV9ERUZBVUxUOworc3RhdGljIGludCBqaXR0ZXJEZWxheSA9IEFJUFRFS19KSVRURVJfREVMQVlfREVGQVVMVDsKKworc3RydWN0IGFpcHRla19mZWF0dXJlcyB7CisJaW50IG9kbUNvZGU7CQkvKiBUYWJsZXQgbWFudWZhY3R1cmVyIGNvZGUgICAgICAgKi8KKwlpbnQgbW9kZWxDb2RlOwkJLyogVGFibGV0IG1vZGVsIGNvZGUgKG5vdCB1bmlxdWUpICovCisJaW50IGZpcm13YXJlQ29kZTsJLyogcHJvbS9lZXByb20gdmVyc2lvbiAgICAgICAgICAgICovCisJY2hhciB1c2JQYXRoWzY0ICsgMV07CS8qIGRldmljZSdzIHBoeXNpY2FsIHVzYiBwYXRoICAgICAqLworCWNoYXIgaW5wdXRQYXRoWzY0ICsgMV07CS8qIGlucHV0IGRldmljZSBwYXRoICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IGFpcHRla19zZXR0aW5ncyB7CisJaW50IHBvaW50ZXJNb2RlOwkvKiBzdHlsdXMtLCBtb3VzZS1vbmx5IG9yIGVpdGhlciAqLworCWludCBjb29yZGluYXRlTW9kZTsJLyogYWJzb2x1dGUvcmVsYXRpdmUgY29vcmRzICAgICAgKi8KKwlpbnQgdG9vbE1vZGU7CQkvKiBwZW4sIHBlbmNpbCwgYnJ1c2gsIGV0Yy4gdG9vbCAqLworCWludCB4VGlsdDsJCS8qIHN5bnRoZXRpYyB4VGlsdCBhbW91bnQgICAgICAgICovCisJaW50IHlUaWx0OwkJLyogc3ludGhldGljIHlUaWx0IGFtb3VudCAgICAgICAgKi8KKwlpbnQgd2hlZWw7CQkvKiBzeW50aGV0aWMgd2hlZWwgYW1vdW50ICAgICAgICAqLworCWludCBzdHlsdXNCdXR0b25VcHBlcjsJLyogc3R5bHVzIHVwcGVyIGJ0biBkZWxpdmVycy4uLiAgKi8KKwlpbnQgc3R5bHVzQnV0dG9uTG93ZXI7CS8qIHN0eWx1cyBsb3dlciBidG4gZGVsaXZlcnMuLi4gICovCisJaW50IG1vdXNlQnV0dG9uTGVmdDsJLyogbW91c2UgbGVmdCBidG4gZGVsaXZlcnMuLi4gICAgKi8KKwlpbnQgbW91c2VCdXR0b25NaWRkbGU7CS8qIG1vdXNlIG1pZGRsZSBidG4gZGVsaXZlcnMuLi4gICovCisJaW50IG1vdXNlQnV0dG9uUmlnaHQ7CS8qIG1vdXNlIHJpZ2h0IGJ0biBkZWxpdmVycy4uLiAgICovCisJaW50IHByb2dyYW1tYWJsZURlbGF5OwkvKiBkZWxheSBmb3IgdGFibGV0IHByb2dyYW1taW5nICAqLworCWludCBqaXR0ZXJEZWxheTsJLyogZGVsYXkgZm9yIGhhbmQgaml0dGVyaW5nICAgICAgKi8KK307CisKK3N0cnVjdCBhaXB0ZWsgeworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXRkZXY7CQkvKiBpbnB1dCBkZXZpY2Ugc3RydWN0ICAgICAgICAgICAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CQkvKiB1c2IgZGV2aWNlIHN0cnVjdCAgICAgICAgICAgICAqLworCXN0cnVjdCB1cmIgKnVyYjsJCQkvKiB1cmIgZm9yIGluY29taW5nIHJlcG9ydHMgICAgICAqLworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CQkJLyogb3VyIGRtYSBzdHVmZmFnZSAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYWlwdGVrX2ZlYXR1cmVzIGZlYXR1cmVzOwkvKiB0YWJsZXQncyBhcnJheSBvZiBmZWF0dXJlcyAgICAqLworCXN0cnVjdCBhaXB0ZWtfc2V0dGluZ3MgY3VyU2V0dGluZzsJLyogdGFibGV0J3MgY3VycmVudCBwcm9ncmFtbWFibGUgKi8KKwlzdHJ1Y3QgYWlwdGVrX3NldHRpbmdzIG5ld1NldHRpbmc7CS8qIC4uLiBhbmQgbmV3IHBhcmFtIHNldHRpbmdzICAgICovCisJdW5zaWduZWQgaW50IGlmbnVtOwkJCS8qIGludGVyZmFjZSBudW1iZXIgZm9yIElPICAgICAgICovCisJaW50IG9wZW5Db3VudDsJCQkJLyogbW9kdWxlIHVzZSBjb3VudGVyICAgICAgICAgICAgKi8KKwlpbnQgZGlhZ25vc3RpYzsJCQkJLyogdGFibGV0IGRpYWdub3N0aWMgY29kZXMgICAgICAgKi8KKwl1bnNpZ25lZCBsb25nIGV2ZW50Q291bnQ7CQkvKiBldmVudCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworCWludCBpbkRlbGF5OwkJCQkvKiBqaXR0ZXI6IGluIGppdHRlciBkZWxheT8gICAgICAqLworCXVuc2lnbmVkIGxvbmcgZW5kRGVsYXk7CQkJLyogaml0dGVyOiB0aW1lIHdoZW4gZGVsYXkgZW5kcyAgKi8KKwlpbnQgcHJldmlvdXNKaXR0ZXJhYmxlOwkJCS8qIGppdHRlcmFibGUgcHJldiB2YWx1ZSAgICAgKi8KKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkJCS8qIGluY29taW5nIHBhY2tldCBkYXRhICAgICAgICAgICovCit9OworCisvKgorICogUGVybWl0IGVhc3kgbG9va3VwIG9mIGtleWJvYXJkIGV2ZW50cyB0byBzZW5kLCB2ZXJzdXMKKyAqIHRoZSBiaXRtYXAgd2hpY2ggY29tZXMgZnJvbSB0aGUgdGFibGV0LiBUaGlzIGhpZGVzIHRoZQorICogaXNzdWUgdGhhdCB0aGUgRl9rZXlzIGFyZSBub3Qgc2VxdWVudGlhbGx5IG51bWJlcmVkLgorICovCitzdGF0aWMgaW50IG1hY3JvS2V5RXZlbnRzW10gPSB7CisJS0VZX0VTQywgS0VZX0YxLCBLRVlfRjIsIEtFWV9GMywgS0VZX0Y0LCBLRVlfRjUsCisJS0VZX0Y2LCBLRVlfRjcsIEtFWV9GOCwgS0VZX0Y5LCBLRVlfRjEwLCBLRVlfRjExLAorCUtFWV9GMTIsIEtFWV9GMTMsIEtFWV9GMTQsIEtFWV9GMTUsIEtFWV9GMTYsIEtFWV9GMTcsCisJS0VZX0YxOCwgS0VZX0YxOSwgS0VZX0YyMCwgS0VZX0YyMSwgS0VZX0YyMiwgS0VZX0YyMywKKwlLRVlfRjI0LCBLRVlfU1RPUCwgS0VZX0FHQUlOLCBLRVlfUFJPUFMsIEtFWV9VTkRPLAorCUtFWV9GUk9OVCwgS0VZX0NPUFksIEtFWV9PUEVOLCBLRVlfUEFTVEUsIDAKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVsYXRpdmUgcmVwb3J0cyBkZWxpdmVyIHZhbHVlcyBpbiAyJ3MgY29tcGxlbWVudCBmb3JtYXQgdG8KKyAqIGRlYWwgd2l0aCBuZWdhdGl2ZSBvZmZzZXRzLgorICovCitzdGF0aWMgaW50IGFpcHRla19jb252ZXJ0X2Zyb21fMnNfY29tcGxlbWVudCh1bnNpZ25lZCBjaGFyIGMpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGIgPSBjOworCWludCBuZWdhdGUgPSAwOworCisJaWYgKChiICYgMHg4MCkgIT0gMCkgeworCQliID0gfmI7CisJCWItLTsKKwkJbmVnYXRlID0gMTsKKwl9CisJcmV0ID0gYjsKKwlyZXQgPSAobmVnYXRlID09IDEpID8gLXJldCA6IHJldDsKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFpcHRla19pcnEgY2FuIHJlY2VpdmUgb25lIG9mIHNpeCBwb3RlbnRpYWwgcmVwb3J0cy4KKyAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIGlzIGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbi4KKyAqCisgKiBUaGUgdGFibGV0IHJlcG9ydHMgb24gc2V2ZXJhbCBhdHRyaWJ1dGVzIHBlciBpbnZvY2F0aW9uIG9mCisgKiBhaXB0ZWtfaXJxLiBCZWNhdXNlIHRoZSBMaW51eCBJbnB1dCBFdmVudCBzeXN0ZW0gYWxsb3dzIHRoZQorICogdHJhbnNtaXNzaW9uIG9mIE9ORSBhdHRyaWJ1dGUgcGVyIGlucHV0X3JlcG9ydF94eHgoKSBjYWxsLAorICogY29sbGF0aW9uIGhhcyB0byBiZSBkb25lIG9uIHRoZSBvdGhlciBlbmQgdG8gcmVjb25zdGl0dXRlCisgKiBhIGNvbXBsZXRlIHRhYmxldCByZXBvcnQuIEZ1cnRoZXIsIHRoZSBudW1iZXIgb2YgSW5wdXQgRXZlbnQgcmVwb3J0cworICogc3VibWl0dGVkIHZhcmllcywgZGVwZW5kaW5nIG9uIHdoYXQgVVNCIHJlcG9ydCB0eXBlLCBhbmQgY2lyY3Vtc3RhbmNlLgorICogVG8gZGVhbCB3aXRoIHRoaXMsIEVWX01TQyBpcyB1c2VkIHRvIGluZGljYXRlIGFuICdlbmQtb2YtcmVwb3J0JworICogbWVzc2FnZS4gVGhpcyBoYXMgYmVlbiBhbiB1bmRvY3VtZW50ZWQgY29udmVudGlvbiB1bmRlcnN0b29kIGJ5IHRoZSBrZXJuZWwKKyAqIHRhYmxldCBkcml2ZXIgYW5kIGNsaWVudHMgc3VjaCBhcyBncG0gYW5kIFhGcmVlODYncyB0YWJsZXQgZHJpdmVycy4KKyAqCisgKiBPZiB0aGUgaW5mb3JtYXRpb24gcmVjZWl2ZWQgZnJvbSB0aGUgdGFibGV0LCB0aGUgb25lIHBpZWNlIEkKKyAqIGNhbm5vdCB0cmFuc21pdCBpcyB0aGUgcHJveGltaXR5IGJpdCAod2l0aG91dCByZXNvcnRpbmcgdG8gYW4gRVZfTVNDCisgKiBjb252ZW50aW9uIGFib3ZlLikgSSB0aGVyZWZvcmUgaGF2ZSB0YWtlbiBvdmVyIFJFTF9NSVNDIGFuZCBBQlNfTUlTQworICogKGZvciByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcmVwb3J0cywgcmVzcGVjdGl2ZWx5KSBmb3IgY29tbXVuaWNhdGluZworICogUHJveGltaXR5LiBXaHkgdHdvIGV2ZW50cz8gSSB0aG91Z2h0IGl0IGludGVyZXN0aW5nIHRvIGtub3cgaWYgdGhlCisgKiBQcm94aW1pdHkgZXZlbnQgb2NjdXJlZCB3aGlsZSB0aGUgdGFibGV0IHdhcyBpbiBhYnNvbHV0ZSBvciByZWxhdGl2ZQorICogbW9kZS4KKyAqCisgKiBPdGhlciB0YWJsZXRzIHVzZSB0aGUgbm90aW9uIG9mIGEgY2VydGFpbiBtaW5pbXVtIHN0eWx1cyBwcmVzc3VyZQorICogdG8gaW5mZXIgcHJveGltaXR5LiBXaGlsZSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBkb25lLCB0aGF0IGlzIHlldAorICogYW5vdGhlciAnYnkgY29udmVudGlvbicgYmVoYXZpb3IsIHRoZSBkb2N1bWVudGF0aW9uIGZvciB3aGljaAorICogd291bGQgYmUgc3ByZWFkIGJldHdlZW4gdHdvIChvciBtb3JlKSBwaWVjZXMgb2Ygc29mdHdhcmUuCisgKgorICogRVZfTVNDIHVzYWdlIHdhcyB0ZXJtaW5hdGVkIGZvciB0aGlzIHB1cnBvc2UgaW4gTGludXggMi41LngsIGFuZAorICogcmVwbGFjZWQgd2l0aCB0aGUgaW5wdXRfc3luYygpIG1ldGhvZCAod2hpY2ggZW1pdHMgRVZfU1lOLikKKyAqLworCitzdGF0aWMgdm9pZCBhaXB0ZWtfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBhaXB0ZWstPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYgPSAmYWlwdGVrLT5pbnB1dGRldjsKKwlpbnQgaml0dGVyYWJsZSA9IDA7CisJaW50IHJldHZhbCwgbWFjcm8sIHgsIHksIHosIGxlZnQsIHJpZ2h0LCBtaWRkbGUsIHAsIGR2LCB0aXAsIGJzLCBwY2s7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBTdWNjZXNzICovCisJCWJyZWFrOworCisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiBUaGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIFNlZSBpZiB3ZSBhcmUgaW4gYSBkZWxheSBsb29wIC0tIHRocm93IG91dCByZXBvcnQgaWYgdHJ1ZS4KKwkgKi8KKwlpZiAoYWlwdGVrLT5pbkRlbGF5ID09IDEgJiYgdGltZV9hZnRlcihhaXB0ZWstPmVuZERlbGF5LCBqaWZmaWVzKSkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJYWlwdGVrLT5pbkRlbGF5ID0gMDsKKwlhaXB0ZWstPmV2ZW50Q291bnQrKzsKKworCS8qIFJlcG9ydCAxIGRlbGl2ZXJzIHJlbGF0aXZlIGNvb3JkaW5hdGVzIHdpdGggZWl0aGVyIGEgc3R5bHVzCisJICogb3IgdGhlIG1vdXNlLiBZb3UgZG8gbm90IGtub3csIGhvd2V2ZXIsIHdoaWNoIGlucHV0CisJICogdG9vbCBnZW5lcmF0ZWQgdGhlIGV2ZW50LgorCSAqLworCWlmIChkYXRhWzBdID09IDEpIHsKKwkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9PQorCQkgICAgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERSkgeworCQkJYWlwdGVrLT5kaWFnbm9zdGljID0KKwkJCSAgICBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX1JFTEFUSVZFX0lOX0FCU09MVVRFOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJCXggPSBhaXB0ZWtfY29udmVydF9mcm9tXzJzX2NvbXBsZW1lbnQoZGF0YVsyXSk7CisJCQl5ID0gYWlwdGVrX2NvbnZlcnRfZnJvbV8yc19jb21wbGVtZW50KGRhdGFbM10pOworCisJCQkvKiBqaXR0ZXJhYmxlIGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgYW55IGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLgorCQkJICogV2UncmUgYWxzbyB1c2luZyBpdCB0byByZW1hcCB0aGUgcGh5c2ljYWwgbW91c2UgYnV0dG9uIG1hc2sKKwkJCSAqIHRvIHBzZXVkby1zZXR0aW5ncy4gKFdlIGRvbid0IHNwZWNpZmljYWxseSBjYXJlIGFib3V0IGl0J3MKKwkJCSAqIHZhbHVlIGFmdGVyIG1vdmluZy90cmFuc3Bvc2luZyBtb3VzZSBidXR0b24gYml0bWFza3MsIGV4Y2VwdAorCQkJICogdGhhdCBhIG5vbi16ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IG9uZSBvciBtb3JlCisJCQkgKiBtb3VzZSBidXR0b24gd2FzIHByZXNzZWQuKQorCQkJICovCisJCQlqaXR0ZXJhYmxlID0gZGF0YVs1XSAmIDB4MDc7CisKKwkJCWxlZnQgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpICE9IDAgPyAxIDogMDsKKwkJCXJpZ2h0ID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25SaWdodCkgIT0gMCA/IDEgOiAwOworCQkJbWlkZGxlID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25NaWRkbGUpICE9IDAgPyAxIDogMDsKKworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX0xFRlQsIGxlZnQpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX01JRERMRSwgbWlkZGxlKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9SSUdIVCwgcmlnaHQpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX1gsIHgpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX1ksIHkpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX01JU0MsIDEgfCBBSVBURUtfUkVQT1JUX1RPT0xfVU5LTk9XTik7CisKKwkJCS8qIFdoZWVsIHN1cHBvcnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUtZXZlbnQKKwkJCSAqIGZpcmluZy4KKwkJCSAqLworCQkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCAhPSBBSVBURUtfV0hFRUxfRElTQUJMRSkgeworCQkJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXRkZXYsIFJFTF9XSEVFTCwKKwkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCQkJCWFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCA9IEFJUFRFS19XSEVFTF9ESVNBQkxFOworCQkJfQorCQkJaW5wdXRfc3luYyhpbnB1dGRldik7CisJCX0KKwl9CisJLyogUmVwb3J0IDIgaXMgZGVsaXZlcmVkIG9ubHkgYnkgdGhlIHN0eWx1cywgYW5kIGRlbGl2ZXJzCisJICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisJICovCisJZWxzZSBpZiAoZGF0YVswXSA9PSAyKSB7CisJCWlmIChhaXB0ZWstPmN1clNldHRpbmcuY29vcmRpbmF0ZU1vZGUgPT0gQUlQVEVLX0NPT1JESU5BVEVfUkVMQVRJVkVfTU9ERSkgeworCQkJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19BQlNPTFVURV9JTl9SRUxBVElWRTsKKwkJfSBlbHNlIGlmICghQUlQVEVLX1BPSU5URVJfQUxMT1dfU1RZTFVTX01PREUKKwkJCSAgICAoYWlwdGVrLT5jdXJTZXR0aW5nLnBvaW50ZXJNb2RlKSkgeworCQkJCWFpcHRlay0+ZGlhZ25vc3RpYyA9IEFJUFRFS19ESUFHTk9TVElDX1RPT0xfRElTQUxMT1dFRDsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X3JlZ3MoaW5wdXRkZXYsIHJlZ3MpOworCisJCQl4ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgMSkpKTsKKwkJCXkgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAzKSkpOworCQkJeiA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoZGF0YSArIDYpKSk7CisKKwkJCXAgPSAoZGF0YVs1XSAmIDB4MDEpICE9IDAgPyAxIDogMDsKKwkJCWR2ID0gKGRhdGFbNV0gJiAweDAyKSAhPSAwID8gMSA6IDA7CisJCQl0aXAgPSAoZGF0YVs1XSAmIDB4MDQpICE9IDAgPyAxIDogMDsKKworCQkJLyogVXNlIGppdHRlcmFibGUgdG8gcmUtYXJyYW5nZSBidXR0b24gbWFza3MKKwkJCSAqLworCQkJaml0dGVyYWJsZSA9IGRhdGFbNV0gJiAweDE4OworCisJCQlicyA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLnN0eWx1c0J1dHRvbkxvd2VyKSAhPSAwID8gMSA6IDA7CisJCQlwY2sgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25VcHBlcikgIT0gMCA/IDEgOiAwOworCisJCQkvKiBkdiBpbmRpY2F0ZXMgJ2RhdGEgdmFsaWQnIChlLmcuLCB0aGUgdGFibGV0IGlzIGluIHN5bmMKKwkJCSAqIGFuZCBoYXMgZGVsaXZlcmVkIGEgImNvcnJlY3QiIHJlcG9ydCkgV2Ugd2lsbCBpZ25vcmUKKwkJCSAqIGFsbCAnYmFkJyByZXBvcnRzLi4uCisJCQkgKi8KKwkJCWlmIChkdiAhPSAwKSB7CisJCQkJLyogSWYgd2UndmUgbm90IGFscmVhZHkgc2VudCBhIHRvb2xfYnV0dG9uXz8/IGNvZGUsIGRvCisJCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkJCSAqLworCQkJCWlmIChUT09MX0JVVFRPTl9GSVJFRAorCQkJCSAgICAoYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSA9PSAwKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkJIDEpOworCQkJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQkJCX0KKworCQkJCWlmIChwICE9IDApIHsKKwkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1gsIHgpOworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWSwgeSk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19QUkVTU1VSRSwgeik7CisKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1RPVUNILCB0aXApOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fU1RZTFVTLCBicyk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9TVFlMVVMyLCBwY2spOworCisJCQkJCWlmIChhaXB0ZWstPmN1clNldHRpbmcueFRpbHQgIT0KKwkJCQkJICAgIEFJUFRFS19USUxUX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfVElMVF9YLAorCQkJCQkJCQkgYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0KTsKKwkJCQkJfQorCQkJCQlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLnlUaWx0ICE9IEFJUFRFS19USUxUX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfVElMVF9ZLAorCQkJCQkJCQkgYWlwdGVrLT5jdXJTZXR0aW5nLnlUaWx0KTsKKwkJCQkJfQorCisJCQkJCS8qIFdoZWVsIHN1cHBvcnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUtZXZlbnQKKwkJCQkJICogZmlyaW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCAhPQorCQkJCQkgICAgQUlQVEVLX1dIRUVMX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfV0hFRUwsCisJCQkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCQkJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsID0gQUlQVEVLX1dIRUVMX0RJU0FCTEU7CisJCQkJCX0KKwkJCQl9CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX01JU0MsIHAgfCBBSVBURUtfUkVQT1JUX1RPT0xfU1RZTFVTKTsKKwkJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJCX0KKwkJfQorCX0KKwkvKiBSZXBvcnQgMydzIGNvbWUgZnJvbSB0aGUgbW91c2UgaW4gYWJzb2x1dGUgbW9kZS4KKwkgKi8KKwllbHNlIGlmIChkYXRhWzBdID09IDMpIHsKKwkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9PSBBSVBURUtfQ09PUkRJTkFURV9SRUxBVElWRV9NT0RFKSB7CisJCQlhaXB0ZWstPmRpYWdub3N0aWMgPSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX0FCU09MVVRFX0lOX1JFTEFUSVZFOworCQl9IGVsc2UgaWYgKCFBSVBURUtfUE9JTlRFUl9BTExPV19NT1VTRV9NT0RFCisJCQkoYWlwdGVrLT5jdXJTZXR0aW5nLnBvaW50ZXJNb2RlKSkgeworCQkJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfVE9PTF9ESVNBTExPV0VEOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisJCQl4ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgMSkpKTsKKwkJCXkgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAzKSkpOworCisJCQlqaXR0ZXJhYmxlID0gZGF0YVs1XSAmIDB4MWM7CisKKwkJCXAgPSAoZGF0YVs1XSAmIDB4MDEpICE9IDAgPyAxIDogMDsKKwkJCWR2ID0gKGRhdGFbNV0gJiAweDAyKSAhPSAwID8gMSA6IDA7CisJCQlsZWZ0ID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25MZWZ0KSAhPSAwID8gMSA6IDA7CisJCQlyaWdodCA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQpICE9IDAgPyAxIDogMDsKKwkJCW1pZGRsZSA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlKSAhPSAwID8gMSA6IDA7CisKKwkJCWlmIChkdiAhPSAwKSB7CisJCQkJLyogSWYgd2UndmUgbm90IGFscmVhZHkgc2VudCBhIHRvb2xfYnV0dG9uXz8/IGNvZGUsIGRvCisJCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkJCSAqLworCQkJCWlmIChUT09MX0JVVFRPTl9GSVJFRAorCQkJCSAgICAoYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSA9PSAwKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkJIDEpOworCQkJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQkJCX0KKworCQkJCWlmIChwICE9IDApIHsKKwkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1gsIHgpOworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWSwgeSk7CisKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX0xFRlQsIGxlZnQpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTUlERExFLCBtaWRkbGUpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fUklHSFQsIHJpZ2h0KTsKKworCQkJCQkvKiBXaGVlbCBzdXBwb3J0IGlzIGluIHRoZSBmb3JtIG9mIGEgc2luZ2xlLWV2ZW50CisJCQkJCSAqIGZpcmluZy4KKwkJCQkJICovCisJCQkJCWlmIChhaXB0ZWstPmN1clNldHRpbmcud2hlZWwgIT0gQUlQVEVLX1dIRUVMX0RJU0FCTEUpIHsKKwkJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsCisJCQkJCQkJCSBBQlNfV0hFRUwsCisJCQkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCQkJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsID0gQUlQVEVLX1dIRUVMX0RJU0FCTEU7CisJCQkJCX0KKwkJCQl9CisJCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX01JU0MsIHAgfCBBSVBURUtfUkVQT1JUX1RPT0xfTU9VU0UpOworCQkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQkJfQorCQl9CisJfQorCS8qIFJlcG9ydCA0cyBjb21lIGZyb20gdGhlIG1hY3JvIGtleXMgd2hlbiBwcmVzc2VkIGJ5IHN0eWx1cworCSAqLworCWVsc2UgaWYgKGRhdGFbMF0gPT0gNCkgeworCQlqaXR0ZXJhYmxlID0gZGF0YVsxXSAmIDB4MTg7CisKKwkJcCA9IChkYXRhWzFdICYgMHgwMSkgIT0gMCA/IDEgOiAwOworCQlkdiA9IChkYXRhWzFdICYgMHgwMikgIT0gMCA/IDEgOiAwOworCQl0aXAgPSAoZGF0YVsxXSAmIDB4MDQpICE9IDAgPyAxIDogMDsKKwkJYnMgPSAoZGF0YVsxXSAmIGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlcikgIT0gMCA/IDEgOiAwOworCQlwY2sgPSAoZGF0YVsxXSAmIGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25VcHBlcikgIT0gMCA/IDEgOiAwOworCisJCW1hY3JvID0gZGF0YVszXTsKKwkJeiA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoZGF0YSArIDQpKSk7CisKKwkJaWYgKGR2ICE9IDApIHsKKwkJCWlucHV0X3JlZ3MoaW5wdXRkZXYsIHJlZ3MpOworCisJCQkvKiBJZiB3ZSd2ZSBub3QgYWxyZWFkeSBzZW50IGEgdG9vbF9idXR0b25fPz8gY29kZSwgZG8KKwkJCSAqIHNvIG5vdy4gVGhlbiBzZXQgRklSRURfQklUIHNvIGl0IHdvbid0IGJlIHJlc2VudCB1bmxlc3MKKwkJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkJICovCisJCQlpZiAoVE9PTF9CVVRUT05fRklSRUQoYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSA9PSAwKSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJCSBUT09MX0JVVFRPTihhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpLAorCQkJCQkJIDEpOworCQkJCWFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSB8PSBUT09MX0JVVFRPTl9GSVJFRF9CSVQ7CisJCQl9CisKKwkJCWlmIChwICE9IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fVE9VQ0gsIHRpcCk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1NUWUxVUywgYnMpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9TVFlMVVMyLCBwY2spOworCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19QUkVTU1VSRSwgeik7CisJCQl9CisKKwkJCS8qIEZvciBzYWZldHksIHdlJ3JlIHNlbmRpbmcga2V5ICdicmVhaycgY29kZXMgZm9yIHRoZQorCQkJICogbmVpZ2hib3JpbmcgbWFjcm8ga2V5cy4KKwkJCSAqLworCQkJaWYgKG1hY3JvID4gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgbWFjcm9LZXlFdmVudHNbbWFjcm8gLSAxXSwgMCk7CisJCQl9CisJCQlpZiAobWFjcm8gPCAyNSkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgbWFjcm9LZXlFdmVudHNbbWFjcm8gKyAxXSwgMCk7CisJCQl9CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNyb10sIHApOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX01JU0MsCisJCQkJCSBwIHwgQUlQVEVLX1JFUE9SVF9UT09MX1NUWUxVUyk7CisJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJfQorCX0KKwkvKiBSZXBvcnQgNXMgY29tZSBmcm9tIHRoZSBtYWNybyBrZXlzIHdoZW4gcHJlc3NlZCBieSBtb3VzZQorCSAqLworCWVsc2UgaWYgKGRhdGFbMF0gPT0gNSkgeworCQlqaXR0ZXJhYmxlID0gZGF0YVsxXSAmIDB4MWM7CisKKwkJcCA9IChkYXRhWzFdICYgMHgwMSkgIT0gMCA/IDEgOiAwOworCQlkdiA9IChkYXRhWzFdICYgMHgwMikgIT0gMCA/IDEgOiAwOworCQlsZWZ0ID0gKGRhdGFbMV0mIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpICE9IDAgPyAxIDogMDsKKwkJcmlnaHQgPSAoZGF0YVsxXSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0KSAhPSAwID8gMSA6IDA7CisJCW1pZGRsZSA9IChkYXRhWzFdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlKSAhPSAwID8gMSA6IDA7CisJCW1hY3JvID0gZGF0YVszXTsKKworCQlpZiAoZHYgIT0gMCkgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJCS8qIElmIHdlJ3ZlIG5vdCBhbHJlYWR5IHNlbnQgYSB0b29sX2J1dHRvbl8/PyBjb2RlLCBkbworCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJICogdGhlIHVzZXIgZm9yY2VzIEZJUkVEX0JJVCBvZmYuCisJCQkgKi8KKwkJCWlmIChUT09MX0JVVFRPTl9GSVJFRChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkgMSk7CisJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlIHw9IFRPT0xfQlVUVE9OX0ZJUkVEX0JJVDsKKwkJCX0KKworCQkJaWYgKHAgIT0gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9MRUZULCBsZWZ0KTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTUlERExFLCBtaWRkbGUpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9SSUdIVCwgcmlnaHQpOworCQkJfQorCisJCQkvKiBGb3Igc2FmZXR5LCB3ZSdyZSBzZW5kaW5nIGtleSAnYnJlYWsnIGNvZGVzIGZvciB0aGUKKwkJCSAqIG5laWdoYm9yaW5nIG1hY3JvIGtleXMuCisJCQkgKi8KKwkJCWlmIChtYWNybyA+IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIG1hY3JvS2V5RXZlbnRzW21hY3JvIC0gMV0sIDApOworCQkJfQorCQkJaWYgKG1hY3JvIDwgMjUpIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIG1hY3JvS2V5RXZlbnRzW21hY3JvICsgMV0sIDApOworCQkJfQorCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNyb10sIDEpOworCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgQUJTX01JU0MsCisJCQkJCSBwIHwgQUlQVEVLX1JFUE9SVF9UT09MX01PVVNFKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQl9CisJfQorCS8qIFdlIGhhdmUgbm8gaWRlYSB3aGljaCB0b29sIGNhbiBnZW5lcmF0ZSBhIHJlcG9ydCA2LiBUaGVvcmV0aWNhbGx5LAorCSAqIG5laXRoZXIgbmVlZCB0bywgaGF2aW5nIGJlZW4gZ2l2ZW4gcmVwb3J0cyA0ICYgNSBmb3Igc3VjaCB1c2UuCisJICogSG93ZXZlciwgcmVwb3J0IDYgaXMgdGhlICdvZmZpY2lhbC1sb29raW5nJyByZXBvcnQgZm9yIG1hY3JvS2V5czsKKwkgKiByZXBvcnRzIDQgJiA1IHN1cHBvc2l2ZWx5IGFyZSB1c2VkIHRvIHN1cHBvcnQgdW5uYW1lZCwgdW5rbm93bgorCSAqIGhhdCBzd2l0Y2hlcyAod2hpY2gganVzdCBzbyBoYXBwZW4gdG8gYmUgdGhlIG1hY3JvS2V5cy4pCisJICovCisJZWxzZSBpZiAoZGF0YVswXSA9PSA2KSB7CisJCW1hY3JvID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgMSkpKTsKKwkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJaWYgKG1hY3JvID4gMCkgeworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgbWFjcm9LZXlFdmVudHNbbWFjcm8gLSAxXSwKKwkJCQkJIDApOworCQl9CisJCWlmIChtYWNybyA8IDI1KSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNybyArIDFdLAorCQkJCQkgMCk7CisJCX0KKworCQkvKiBJZiB3ZSd2ZSBub3QgYWxyZWFkeSBzZW50IGEgdG9vbF9idXR0b25fPz8gY29kZSwgZG8KKwkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkgKiB0aGUgdXNlciBmb3JjZXMgRklSRURfQklUIG9mZi4KKwkJICovCisJCWlmIChUT09MX0JVVFRPTl9GSVJFRChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCSBUT09MX0JVVFRPTihhaXB0ZWstPmN1clNldHRpbmcuCisJCQkJCQkgICAgIHRvb2xNb2RlKSwgMSk7CisJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQl9CisKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgbWFjcm9LZXlFdmVudHNbbWFjcm9dLCAxKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX01JU0MsCisJCQkJIDEgfCBBSVBURUtfUkVQT1JUX1RPT0xfVU5LTk9XTik7CisJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCX0gZWxzZSB7CisJCWRiZygiVW5rbm93biByZXBvcnQgJWQiLCBkYXRhWzBdKTsKKwl9CisKKwkvKiBKaXR0ZXIgbWF5IG9jY3VyIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGJ1dHRvbiBvbiB0aGUgc3RseXVzCisJICogb3IgdGhlIG1vdXNlLiBXaGF0IHdlIGRvIHRvIHByZXZlbnQgdGhhdCBpcyB3YWl0ICd4JyBtaWxsaXNlY29uZHMKKwkgKiBmb2xsb3dpbmcgYSAnaml0dGVyYWJsZScgZXZlbnQsIHdoaWNoIHNob3VsZCBnaXZlIHRoZSBoYW5kIHNvbWUgdGltZQorCSAqIHN0YWJpbGl6ZSBpdHNlbGYuCisJICoKKwkgKiBXZSBqdXN0IGludHJvZHVjZWQgYWlwdGVrLT5wcmV2aW91c0ppdHRlcmFibGUgdG8gY2FycnkgZm9ydGggdGhlCisJICogbm90aW9uIHRoYXQgaml0dGVyIG9jY3VycyB3aGVuIHRoZSBidXR0b24gc3RhdGUgY2hhbmdlcyBmcm9tIG9uIHRvIG9mZjoKKwkgKiBhIHBlcnNvbiBkcmF3aW5nLCBob2xkaW5nIGEgYnV0dG9uIGRvd24gaXMgbm90IHN1YmplY3QgdG8gaml0dGVyaW5nLgorCSAqIFdpdGggdGhhdCBpbiBtaW5kLCBjaGFuZ2luZyBmcm9tIHVwcGVyIGJ1dHRvbiBkZXByZXNzZWQgdG8gbG93ZXIgYnV0dG9uCisJICogV0lMTCB0cmFuc2l0aW9uIHRocm91Z2ggYSBqaXR0ZXIgZGVsYXkuCisJICovCisKKwlpZiAoYWlwdGVrLT5wcmV2aW91c0ppdHRlcmFibGUgIT0gaml0dGVyYWJsZSAmJgorCSAgICBhaXB0ZWstPmN1clNldHRpbmcuaml0dGVyRGVsYXkgIT0gMCAmJiBhaXB0ZWstPmluRGVsYXkgIT0gMSkgeworCQlhaXB0ZWstPmVuZERlbGF5ID0gamlmZmllcyArCisJCSAgICAoKGFpcHRlay0+Y3VyU2V0dGluZy5qaXR0ZXJEZWxheSAqIEhaKSAvIDEwMDApOworCQlhaXB0ZWstPmluRGVsYXkgPSAxOworCX0KKwlhaXB0ZWstPnByZXZpb3VzSml0dGVyYWJsZSA9IGppdHRlcmFibGU7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoZXNlIGFyZSB0aGUgVVNCIGlkJ3Mga25vd24gc28gZmFyLiBXZSBkbyBub3QgaWRlbnRpZnkgdGhlbSB0bworICogc3BlY2lmaWMgQWlwdGVrIG1vZGVsIG51bWJlcnMsIGJlY2F1c2UgdGhlcmUgaGFzIGJlZW4gb3ZlcmxhcHMsCisgKiB1c2UsIGFuZCByZXVzZSBvZiBpZCdzIGluIGV4aXN0aW5nIG1vZGVscy4gQ2VydGFpbiBtb2RlbHMgaGF2ZQorICogYmVlbiBrbm93biB0byB1c2UgbW9yZSB0aGFuIG9uZSBJRCwgaW5kaWNhdGl2ZSBwZXJoYXBzIG9mCisgKiBtYW51ZmFjdHVyaW5nIHJldmlzaW9ucy4gSW4gYW55IGV2ZW50LCB3ZSBjb25zaWRlciB0aGVzZSAKKyAqIElEcyB0byBub3QgYmUgbW9kZWwtc3BlY2lmaWMgbm9yIHVuaXF1ZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFpcHRla19pZHNbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgwMSl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDEwKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIDB4MjApfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgyMSl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDIyKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIDB4MjMpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgyNCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWlwdGVrX2lkcyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT3BlbiBhbiBpbnN0YW5jZSBvZiB0aGUgdGFibGV0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBhaXB0ZWtfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKworCWlmIChhaXB0ZWstPm9wZW5Db3VudCsrID4gMCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlhaXB0ZWstPnVyYi0+ZGV2ID0gYWlwdGVrLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGFpcHRlay0+dXJiLCBHRlBfS0VSTkVMKSAhPSAwKSB7CisJCWFpcHRlay0+b3BlbkNvdW50LS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENsb3NlIGFuIGluc3RhbmNlIG9mIHRoZSB0YWJsZXQgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZCBhaXB0ZWtfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gaW5wdXRkZXYtPnByaXZhdGU7CisKKwlpZiAoLS1haXB0ZWstPm9wZW5Db3VudCA9PSAwKSB7CisJCXVzYl9raWxsX3VyYihhaXB0ZWstPnVyYik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFpcHRla19zZXRfcmVwb3J0IGFuZCBhaXB0ZWtfZ2V0X3JlcG9ydCgpIGFyZSBib3Jyb3dlZCBmcm9tIExpbnV4IDIuNC54LCAKKyAqIHdoZXJlIHRoZXkgd2VyZSBrbm93biBhcyB1c2Jfc2V0X3JlcG9ydCBhbmQgdXNiX2dldF9yZXBvcnQuCisgKi8KK3N0YXRpYyBpbnQKK2FpcHRla19zZXRfcmVwb3J0KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywKKwkJICB1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlLAorCQkgIHVuc2lnbmVkIGNoYXIgcmVwb3J0X2lkLCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coYWlwdGVrLT51c2JkZXYsCisJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlKGFpcHRlay0+dXNiZGV2LCAwKSwKKwkJCSAgICAgICBVU0JfUkVRX1NFVF9SRVBPUlQsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwKKwkJCSAgICAgICBVU0JfRElSX09VVCwgKHJlcG9ydF90eXBlIDw8IDgpICsgcmVwb3J0X2lkLAorCQkJICAgICAgIGFpcHRlay0+aWZudW0sIGJ1ZmZlciwgc2l6ZSwgNTAwMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FpcHRla19nZXRfcmVwb3J0KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywKKwkJICB1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlLAorCQkgIHVuc2lnbmVkIGNoYXIgcmVwb3J0X2lkLCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coYWlwdGVrLT51c2JkZXYsCisJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlKGFpcHRlay0+dXNiZGV2LCAwKSwKKwkJCSAgICAgICBVU0JfUkVRX0dFVF9SRVBPUlQsCisJCQkgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwKKwkJCSAgICAgICBVU0JfRElSX0lOLCAocmVwb3J0X3R5cGUgPDwgOCkgKyByZXBvcnRfaWQsCisJCQkgICAgICAgYWlwdGVrLT5pZm51bSwgYnVmZmVyLCBzaXplLCA1MDAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgdGFibGV0LgorICovCitzdGF0aWMgaW50CithaXB0ZWtfY29tbWFuZChzdHJ1Y3QgYWlwdGVrICphaXB0ZWssIHVuc2lnbmVkIGNoYXIgY29tbWFuZCwgdW5zaWduZWQgY2hhciBkYXRhKQoreworCWNvbnN0IGludCBzaXplb2ZfYnVmID0gMyAqIHNpemVvZih1OCk7CisJaW50IHJldDsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhzaXplb2ZfYnVmLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWZbMF0gPSAyOworCWJ1ZlsxXSA9IGNvbW1hbmQ7CisJYnVmWzJdID0gZGF0YTsKKworCWlmICgocmV0ID0KKwkgICAgIGFpcHRla19zZXRfcmVwb3J0KGFpcHRlaywgMywgMiwgYnVmLCBzaXplb2ZfYnVmKSkgIT0gc2l6ZW9mX2J1ZikgeworCQlkYmcoImFpcHRla19wcm9ncmFtOiBmYWlsZWQsIHRyaWVkIHRvIHNlbmQ6IDB4JTAyeCAweCUwMngiLAorCQkgICAgY29tbWFuZCwgZGF0YSk7CisJfQorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGZyb20gdGhlIHRhYmxldC4gUXVlcnlpbmcgaW5mbyBpcyBkZWZpbmVkIGFzIGZpcnN0CisgKiBzZW5kaW5nIHRoZSB7Y29tbWFuZCxkYXRhfSBzZXF1ZW5jZSBhcyBhIGNvbW1hbmQsIGZvbGxvd2VkIGJ5IGEgd2FpdAorICogKGFrYSwgInByb2dyYW1tYXRpY0RlbGF5IikgYW5kIHRoZW4gYSAicmVhZCIgcmVxdWVzdC4KKyAqLworc3RhdGljIGludAorYWlwdGVrX3F1ZXJ5KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywgdW5zaWduZWQgY2hhciBjb21tYW5kLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJY29uc3QgaW50IHNpemVvZl9idWYgPSAzICogc2l6ZW9mKHU4KTsKKwlpbnQgcmV0OworCXU4ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKHNpemVvZl9idWYsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1ZlswXSA9IDI7CisJYnVmWzFdID0gY29tbWFuZDsKKwlidWZbMl0gPSBkYXRhOworCisJaWYgKGFpcHRla19jb21tYW5kKGFpcHRlaywgY29tbWFuZCwgZGF0YSkgIT0gMCkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXNsZWVwKGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CisKKwlpZiAoKHJldCA9CisJICAgICBhaXB0ZWtfZ2V0X3JlcG9ydChhaXB0ZWssIDMsIDIsIGJ1Ziwgc2l6ZW9mX2J1ZikpICE9IHNpemVvZl9idWYpIHsKKwkJZGJnKCJhaXB0ZWtfcXVlcnkgZmFpbGVkOiByZXR1cm5lZCAweCUwMnggMHglMDJ4IDB4JTAyeCIsCisJCSAgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UgeworCQlyZXQgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGJ1ZiArIDEpKSk7CisJfQorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9ncmFtIHRoZSB0YWJsZXQgaW50byBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgbW9kZS4KKyAqIFdlIGFsc28gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZXQncyBzaXplLgorICovCitzdGF0aWMgaW50IGFpcHRla19wcm9ncmFtX3RhYmxldChzdHJ1Y3QgYWlwdGVrICphaXB0ZWspCit7CisJaW50IHJldDsKKwkvKiBFeGVjdXRlIFJlc29sdXRpb241MDBMUEkgKi8KKwlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxOCwgMHgwNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFF1ZXJ5IGdldE1vZGVsQ29kZSAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwMiwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmZlYXR1cmVzLm1vZGVsQ29kZSA9IHJldCAmIDB4ZmY7CisKKwkvKiBRdWVyeSBnZXRPRE1Db2RlICovCisJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDAzLCAweDAwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWFpcHRlay0+ZmVhdHVyZXMub2RtQ29kZSA9IHJldDsKKworCS8qIFF1ZXJ5IGdldEZpcm13YXJlQ29kZSAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwNCwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmZlYXR1cmVzLmZpcm13YXJlQ29kZSA9IHJldDsKKworCS8qIFF1ZXJ5IGdldFhleHRlbnNpb24gKi8KKwlpZiAoKHJldCA9IGFpcHRla19xdWVyeShhaXB0ZWssIDB4MDEsIDB4MDApKSA8IDApCisJCXJldHVybiByZXQ7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtaW5bQUJTX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWF0gPSByZXQgLSAxOworCisJLyogUXVlcnkgZ2V0WWV4dGVuc2lvbiAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwMSwgMHgwMSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfWV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19ZXSA9IHJldCAtIDE7CisKKwkvKiBRdWVyeSBnZXRQcmVzc3VyZUxldmVscyAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwOCwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfUFJFU1NVUkVdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfUFJFU1NVUkVdID0gcmV0IC0gMTsKKworCS8qIERlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSBpbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBtb2RlLCB3ZSB3aWxsCisJICogZG8gYSBzd2l0Y2hUb1RhYmxldChhYnNvbHV0ZSkgb3Igc3dpdGNoVG9Nb3VzZShyZWxhdGl2ZSkgY29tbWFuZC4KKwkgKi8KKwlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlID09CisJICAgIEFJUFRFS19DT09SRElOQVRFX0FCU09MVVRFX01PREUpIHsKKwkJLyogRXhlY3V0ZSBzd2l0Y2hUb1RhYmxldCAqLworCQlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxMCwgMHgwMSkpIDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEV4ZWN1dGUgc3dpdGNoVG9Nb3VzZSAqLworCQlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxMCwgMHgwMCkpIDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIEVuYWJsZSB0aGUgbWFjcm8ga2V5cyAqLworCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDExLCAweDAyKSkgPCAwKQorCQlyZXR1cm4gcmV0OworI2lmIDAKKwkvKiBFeGVjdXRlIEZpbHRlck9uICovCisJaWYgKChyZXQgPSBhaXB0ZWtfY29tbWFuZChhaXB0ZWssIDB4MTcsIDB4MDApKSA8IDApCisJCXJldHVybiByZXQ7CisjZW5kaWYKKworCS8qIEV4ZWN1dGUgQXV0b0dhaW5PbiAqLworCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDEyLCAweGZmKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUmVzZXQgdGhlIGV2ZW50Q291bnQsIHNvIHdlIHRyYWNrIGV2ZW50cyBmcm9tIGxhc3QgKHJlKXByb2dyYW1taW5nCisJICovCisJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfTkE7CisJYWlwdGVrLT5ldmVudENvdW50ID0gMDsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5c2ZzIGZ1bmN0aW9ucy4gU3lzZnMgcHJlZmVycyB0aGF0IGluZGl2aWR1YWxseS10dW5hYmxlIHBhcmFtZXRlcnMKKyAqIGV4aXN0IGluIHRoZWlyIHNlcGFyYXRlIHBzZXVkby1maWxlcy4gU3VtbWFyeSBkYXRhIHRoYXQgaXMgaW1tdXRhYmxlCisgKiBtYXkgZXhpc3QgaW4gYSBzaW5ndWxhciBmaWxlIHNvIGxvbmcgYXMgeW91IGRvbid0IGRlZmluZSBhIHdyaXRlYWJsZQorICogaW50ZXJmYWNlLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCB0aGUgJ3NpemUnIGZpbGUgLS0gZGlzcGxheSBzdXBwb3J0CisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0U2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZHglZFxuIiwKKwkJCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19YXSArIDEsCisJCQlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWV0gKyAxKTsKK30KKworLyogVGhlc2Ugc3RydWN0cyBkZWZpbmUgdGhlIHN5c2ZzIGZpbGVzLCBwYXJhbSAjMSBpcyB0aGUgbmFtZSBvZiB0aGUKKyAqIGZpbGUsIHBhcmFtIDIgaXMgdGhlIGZpbGUgcGVybWlzc2lvbnMsIHBhcmFtIDMgJiA0IGFyZSB0byB0aGUKKyAqIG91dHB1dCBnZW5lcmF0b3IgYW5kIGlucHV0IHBhcnNlciByb3V0aW5lcy4gQWJzZW5jZSBvZiBhIHJvdXRpbmUgaXMKKyAqIHBlcm1pdHRlZCAtLSBpdCBvbmx5IG1lYW5zIGNhbid0IGVpdGhlciAnY2F0JyB0aGUgZmlsZSwgb3Igc2VuZCBkYXRhCisgKiB0byBpdC4KKyAqLworc3RhdGljIERFVklDRV9BVFRSKHNpemUsIFNfSVJVR08sIHNob3dfdGFibGV0U2l6ZSwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdwcm9kdWN0X2lkJyBmaWxlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0UHJvZHVjdElkKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA0eFxuIiwKKwkJCWFpcHRlay0+aW5wdXRkZXYuaWQucHJvZHVjdCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm9kdWN0X2lkLCBTX0lSVUdPLCBzaG93X3RhYmxldFByb2R1Y3RJZCwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd2ZW5kb3JfaWQnIGZpbGUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRWZW5kb3JJZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGFpcHRlay0+aW5wdXRkZXYuaWQudmVuZG9yKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHZlbmRvcl9pZCwgU19JUlVHTywgc2hvd190YWJsZXRWZW5kb3JJZCwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd2ZW5kb3InIGZpbGUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRNYW51ZmFjdHVyZXIoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldHZhbDsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBhaXB0ZWstPnVzYmRldi0+bWFudWZhY3R1cmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodmVuZG9yLCBTX0lSVUdPLCBzaG93X3RhYmxldE1hbnVmYWN0dXJlciwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdwcm9kdWN0JyBmaWxlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0UHJvZHVjdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0dmFsOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGFpcHRlay0+dXNiZGV2LT5wcm9kdWN0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocHJvZHVjdCwgU19JUlVHTywgc2hvd190YWJsZXRQcm9kdWN0LCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3BvaW50ZXJfbW9kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFBvaW50ZXJNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcucG9pbnRlck1vZGUpIHsKKwljYXNlIEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREU6CisJCXMgPSAic3R5bHVzIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERToKKwkJcyA9ICJtb3VzZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfUE9JTlRFUl9FSVRIRVJfTU9ERToKKwkJcyA9ICJlaXRoZXIiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRQb2ludGVyTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgInN0eWx1cyIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnBvaW50ZXJNb2RlID0KKwkJICAgIEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREU7CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibW91c2UiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5wb2ludGVyTW9kZSA9IEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJlaXRoZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5wb2ludGVyTW9kZSA9IEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwb2ludGVyX21vZGUsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldFBvaW50ZXJNb2RlLCBzdG9yZV90YWJsZXRQb2ludGVyTW9kZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdjb29yZGluYXRlX21vZGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgcmVwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRDb29yZGluYXRlTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpzOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlKSB7CisJY2FzZSBBSVBURUtfQ09PUkRJTkFURV9BQlNPTFVURV9NT0RFOgorCQlzID0gImFic29sdXRlIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19DT09SRElOQVRFX1JFTEFUSVZFX01PREU6CisJCXMgPSAicmVsYXRpdmUiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRDb29yZGluYXRlTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImFic29sdXRlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcucG9pbnRlck1vZGUgPQorCQkgICAgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJyZWxhdGl2ZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnBvaW50ZXJNb2RlID0KKwkJICAgIEFJUFRFS19DT09SRElOQVRFX1JFTEFUSVZFX01PREU7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNvb3JkaW5hdGVfbW9kZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0Q29vcmRpbmF0ZU1vZGUsIHN0b3JlX3RhYmxldENvb3JkaW5hdGVNb2RlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3Rvb2xfbW9kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFRvb2xNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChUT09MX0JVVFRPTihhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpKSB7CisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fTU9VU0VfTU9ERToKKwkJcyA9ICJtb3VzZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fRVJBU0VSX01PREU6CisJCXMgPSAiZXJhc2VyIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9QRU5DSUxfTU9ERToKKwkJcyA9ICJwZW5jaWwiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX1RPT0xfQlVUVE9OX1BFTl9NT0RFOgorCQlzID0gInBlbiI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fQlJVU0hfTU9ERToKKwkJcyA9ICJicnVzaCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fQUlSQlJVU0hfTU9ERToKKwkJcyA9ICJhaXJicnVzaCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fTEVOU19NT0RFOgorCQlzID0gImxlbnMiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRUb29sTW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgIm1vdXNlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcudG9vbE1vZGUgPSBBSVBURUtfVE9PTF9CVVRUT05fTU9VU0VfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJlcmFzZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9FUkFTRVJfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJwZW5jaWwiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9QRU5DSUxfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJwZW4iKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9QRU5fTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJicnVzaCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX0JSVVNIX01PREU7CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAiYWlyYnJ1c2giKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9BSVJCUlVTSF9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImxlbnMiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9MRU5TX01PREU7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodG9vbF9tb2RlLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRUb29sTW9kZSwgc3RvcmVfdGFibGV0VG9vbE1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAneHRpbHQnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgcmVwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRYdGlsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0ID09IEFJUFRFS19USUxUX0RJU0FCTEUpIHsKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiZGlzYWJsZVxuIik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0KTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRYdGlsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCB4OworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAiZGlzYWJsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnhUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKKwl9IGVsc2UgeworCQl4ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCQlpZiAoeCA+PSBBSVBURUtfVElMVF9NSU4gJiYgeCA8PSBBSVBURUtfVElMVF9NQVgpIHsKKwkJCWFpcHRlay0+bmV3U2V0dGluZy54VGlsdCA9IHg7CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoeHRpbHQsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLCBzaG93X3RhYmxldFh0aWx0LCBzdG9yZV90YWJsZXRYdGlsdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd5dGlsdCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFl0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChhaXB0ZWstPmN1clNldHRpbmcueVRpbHQgPT0gQUlQVEVLX1RJTFRfRElTQUJMRSkgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJkaXNhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCQlhaXB0ZWstPmN1clNldHRpbmcueVRpbHQpOworCX0KK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFl0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHk7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHN0cmNtcChidWYsICJkaXNhYmxlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcueVRpbHQgPSBBSVBURUtfVElMVF9ESVNBQkxFOworCX0gZWxzZSB7CisJCXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJCWlmICh5ID49IEFJUFRFS19USUxUX01JTiAmJiB5IDw9IEFJUFRFS19USUxUX01BWCkgeworCQkJYWlwdGVrLT5uZXdTZXR0aW5nLnlUaWx0ID0geTsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih5dGlsdCwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfdGFibGV0WXRpbHQsIHN0b3JlX3RhYmxldFl0aWx0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2ppdHRlcicgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldEppdHRlckRlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBhaXB0ZWstPmN1clNldHRpbmcuaml0dGVyRGVsYXkpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0Sml0dGVyRGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlhaXB0ZWstPm5ld1NldHRpbmcuaml0dGVyRGVsYXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaml0dGVyLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRKaXR0ZXJEZWxheSwgc3RvcmVfdGFibGV0Sml0dGVyRGVsYXkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnZGVsYXknIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgcmVwcm9ncmFtbWluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRQcm9ncmFtbWFibGVEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCWFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRQcm9ncmFtbWFibGVEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWFpcHRlay0+bmV3U2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0UHJvZ3JhbW1hYmxlRGVsYXksIHN0b3JlX3RhYmxldFByb2dyYW1tYWJsZURlbGF5KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2lucHV0X3BhdGgnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldElucHV0RGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIi9kZXYvaW5wdXQvJXNcbiIsCisJCQlhaXB0ZWstPmZlYXR1cmVzLmlucHV0UGF0aCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihpbnB1dF9wYXRoLCBTX0lSVUdPLCBzaG93X3RhYmxldElucHV0RGV2aWNlLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2V2ZW50X2NvdW50JyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBvbmx5IGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRFdmVudHNSZWNlaXZlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIGFpcHRlay0+ZXZlbnRDb3VudCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihldmVudF9jb3VudCwgU19JUlVHTywgc2hvd190YWJsZXRFdmVudHNSZWNlaXZlZCwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdkaWFnbm9zdGljJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBvbmx5IGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXREaWFnbm9zdGljTWVzc2FnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpyZXRNc2c7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmRpYWdub3N0aWMpIHsKKwljYXNlIEFJUFRFS19ESUFHTk9TVElDX05BOgorCQlyZXRNc2cgPSAibm8gZXJyb3JzXG4iOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19SRUxBVElWRV9JTl9BQlNPTFVURToKKwkJcmV0TXNnID0gIkVycm9yOiByZWNlaXZpbmcgcmVsYXRpdmUgcmVwb3J0c1xuIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19ESUFHTk9TVElDX1NFTkRJTkdfQUJTT0xVVEVfSU5fUkVMQVRJVkU6CisJCXJldE1zZyA9ICJFcnJvcjogcmVjZWl2aW5nIGFic29sdXRlIHJlcG9ydHNcbiI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfRElBR05PU1RJQ19UT09MX0RJU0FMTE9XRUQ6CisJCWlmIChhaXB0ZWstPmN1clNldHRpbmcucG9pbnRlck1vZGUgPT0KKwkJICAgIEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERSkgeworCQkJcmV0TXNnID0gIkVycm9yOiByZWNlaXZpbmcgc3R5bHVzIHJlcG9ydHNcbiI7CisJCX0gZWxzZSB7CisJCQlyZXRNc2cgPSAiRXJyb3I6IHJlY2VpdmluZyBtb3VzZSByZXBvcnRzXG4iOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgcmV0TXNnKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGRpYWdub3N0aWMsIFNfSVJVR08sIHNob3dfdGFibGV0RGlhZ25vc3RpY01lc3NhZ2UsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnc3R5bHVzX3VwcGVyJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFN0eWx1c1VwcGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uVXBwZXIpIHsKKwljYXNlIEFJUFRFS19TVFlMVVNfVVBQRVJfQlVUVE9OOgorCQlzID0gInVwcGVyIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOgorCQlzID0gImxvd2VyIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0U3R5bHVzVXBwZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgInVwcGVyIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcuc3R5bHVzQnV0dG9uVXBwZXIgPQorCQkgICAgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibG93ZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5zdHlsdXNCdXR0b25VcHBlciA9CisJCSAgICBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3R5bHVzX3VwcGVyLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRTdHlsdXNVcHBlciwgc3RvcmVfdGFibGV0U3R5bHVzVXBwZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnc3R5bHVzX2xvd2VyJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFN0eWx1c0xvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIpIHsKKwljYXNlIEFJUFRFS19TVFlMVVNfVVBQRVJfQlVUVE9OOgorCQlzID0gInVwcGVyIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOgorCQlzID0gImxvd2VyIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0U3R5bHVzTG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgInVwcGVyIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIgPQorCQkgICAgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibG93ZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlciA9CisJCSAgICBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3R5bHVzX2xvd2VyLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRTdHlsdXNMb3dlciwgc3RvcmVfdGFibGV0U3R5bHVzTG93ZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnbW91c2VfbGVmdCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyBmb3Igc2V0dGluZyBjaGFuZ2luZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRNb3VzZUxlZnQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpIHsKKwljYXNlIEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjoKKwkJcyA9ICJsZWZ0IjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOgorCQlzID0gIm1pZGRsZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOgorCQlzID0gInJpZ2h0IjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0TW91c2VMZWZ0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHN0cmNtcChidWYsICJsZWZ0IikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgIm1pZGRsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uTGVmdCA9IEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInJpZ2h0IikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobW91c2VfbGVmdCwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0TW91c2VMZWZ0LCBzdG9yZV90YWJsZXRNb3VzZUxlZnQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnbW91c2VfbWlkZGxlJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vdXNlTWlkZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25NaWRkbGUpIHsKKwljYXNlIEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjoKKwkJcyA9ICJsZWZ0IjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOgorCQlzID0gIm1pZGRsZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOgorCQlzID0gInJpZ2h0IjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0TW91c2VNaWRkbGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImxlZnQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSA9IEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJtaWRkbGUiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSA9CisJCSAgICBBSVBURUtfTU9VU0VfTUlERExFX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJyaWdodCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlID0KKwkJICAgIEFJUFRFS19NT1VTRV9SSUdIVF9CVVRUT047CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1vdXNlX21pZGRsZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0TW91c2VNaWRkbGUsIHN0b3JlX3RhYmxldE1vdXNlTWlkZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ21vdXNlX3JpZ2h0JyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vdXNlUmlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0KSB7CisJY2FzZSBBSVBURUtfTU9VU0VfTEVGVF9CVVRUT046CisJCXMgPSAibGVmdCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfTUlERExFX0JVVFRPTjoKKwkJcyA9ICJtaWRkbGUiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjoKKwkJcyA9ICJyaWdodCI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcyA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldE1vdXNlUmlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImxlZnQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0ID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgIm1pZGRsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQgPQorCQkgICAgQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAicmlnaHQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0ID0gQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobW91c2VfcmlnaHQsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldE1vdXNlUmlnaHQsIHN0b3JlX3RhYmxldE1vdXNlUmlnaHQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnd2hlZWwnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgZm9yIHNldHRpbmcgY2hhbmdpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0V2hlZWwoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCA9PSBBSVBURUtfV0hFRUxfRElTQUJMRSkgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJkaXNhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCQlhaXB0ZWstPmN1clNldHRpbmcud2hlZWwpOworCX0KK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFdoZWVsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJYWlwdGVrLT5uZXdTZXR0aW5nLndoZWVsID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHdoZWVsLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywgc2hvd190YWJsZXRXaGVlbCwgc3RvcmVfdGFibGV0V2hlZWwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnZXhlY3V0ZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyBmb3Igc2V0dGluZyBjaGFuZ2luZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRFeGVjdXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFRoZXJlIGlzIG5vdGhpbmcgdXNlZnVsIHRvIGRpc3BsYXksIHNvIGEgb25lLWxpbmUgbWFudWFsCisJICogaXMgaW4gb3JkZXIuLi4KKwkgKi8KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCQkiV3JpdGUgYW55dGhpbmcgdG8gdGhpcyBmaWxlIHRvIHByb2dyYW0geW91ciB0YWJsZXQuXG4iKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldEV4ZWN1dGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBkbyBub3QgY2FyZSB3aGF0IHlvdSB3cml0ZSB0byB0aGlzIGZpbGUuIE1lcmVseSB0aGUgYWN0aW9uCisJICogb2Ygd3JpdGluZyB0byB0aGlzIGZpbGUgdHJpZ2dlcnMgYSB0YWJsZXQgcmVwcm9ncmFtbWluZy4KKwkgKi8KKwltZW1jcHkoJmFpcHRlay0+Y3VyU2V0dGluZywgJmFpcHRlay0+bmV3U2V0dGluZywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBhaXB0ZWtfc2V0dGluZ3MpKTsKKworCWlmIChhaXB0ZWtfcHJvZ3JhbV90YWJsZXQoYWlwdGVrKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZXhlY3V0ZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfdGFibGV0RXhlY3V0ZSwgc3RvcmVfdGFibGV0RXhlY3V0ZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdvZG1fY29kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogb25seSBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0T0RNQ29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGFpcHRlay0+ZmVhdHVyZXMub2RtQ29kZSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihvZG1fY29kZSwgU19JUlVHTywgc2hvd190YWJsZXRPRE1Db2RlLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ21vZGVsX2NvZGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vZGVsQ29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwNHhcbiIsIGFpcHRlay0+ZmVhdHVyZXMubW9kZWxDb2RlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1vZGVsX2NvZGUsIFNfSVJVR08sIHNob3dfdGFibGV0TW9kZWxDb2RlLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2Zpcm13YXJlX2NvZGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X2Zpcm13YXJlQ29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDR4XG4iLAorCQkJYWlwdGVrLT5mZWF0dXJlcy5maXJtd2FyZUNvZGUpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZmlybXdhcmVfY29kZSwgU19JUlVHTywgc2hvd19maXJtd2FyZUNvZGUsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgcm91dGluZSByZW1vdmVzIGFsbCBleGlzdGluZyBzeXNmcyBmaWxlcyBtYW5hZ2VkIGJ5IHRoaXMgZGV2aWNlCisgKiBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGFpcHRla19kZWxldGVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zaXplKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdF9pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcl9pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wb2ludGVyX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jb29yZGluYXRlX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90b29sX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl94dGlsdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3l0aWx0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaml0dGVyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXkpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnB1dF9wYXRoKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXZlbnRfY291bnQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaWFnbm9zdGljKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb2RtX2NvZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlbF9jb2RlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmlybXdhcmVfY29kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c19sb3dlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c191cHBlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vdXNlX2xlZnQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9taWRkbGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9yaWdodCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3doZWVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXhlY3V0ZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyByb3V0aW5lIGNyZWF0ZXMgdGhlIHN5c2ZzIGZpbGVzIG1hbmFnZWQgYnkgdGhpcyBkZXZpY2UKKyAqIGRyaXZlci4KKyAqLworc3RhdGljIGludCBhaXB0ZWtfYWRkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2l6ZSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdF9pZCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdmVuZG9yX2lkKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92ZW5kb3IpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BvaW50ZXJfbW9kZSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29vcmRpbmF0ZV9tb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90b29sX21vZGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3h0aWx0KSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl95dGlsdCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaml0dGVyKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW5wdXRfcGF0aCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXZlbnRfY291bnQpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpYWdub3N0aWMpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX29kbV9jb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlbF9jb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9maXJtd2FyZV9jb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdHlsdXNfbG93ZXIpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c191cHBlcikpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW91c2VfbGVmdCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW91c2VfbWlkZGxlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9yaWdodCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2hlZWwpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2V4ZWN1dGUpKSkgeworCQllcnIoImFpcHRlazoga2lsbGluZyBvd24gc3lzZnMgZGV2aWNlIGZpbGVzXG4iKTsKKwkJYWlwdGVrX2RlbGV0ZV9maWxlcyhkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHRhYmxldCBoYXMgYmVlbiBpZGVudGlmaWVkLiBJdCBiYXNpY2FsbHkKKyAqIHNldHMgdXAgdGhlIHRhYmxldCBhbmQgdGhlIGRyaXZlcidzIGludGVybmFsIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQKK2FpcHRla19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmlucHV0aGFuZGxlOworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OworCWNoYXIgcGF0aFs2NCArIDFdOworCWludCBpOworCWludCBzcGVlZHNbXSA9IHsgMCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV81MCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV80MDAsCisJCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMjUsCisJCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMTAwLAorCQlBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzIwMCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8zMDAKKwl9OworCisJLyogcHJvZ3JhbW1hYmxlRGVsYXkgaXMgd2hlcmUgdGhlIGNvbW1hbmQtbGluZSBzcGVjaWZpZWQKKwkgKiBkZWxheSBpcyBrZXB0LiBXZSBtYWtlIGl0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHNwZWVkc1tdLAorCSAqIHNvIHRoZXJlZm9yZSwgeW91ciBvdmVycmlkZSBzcGVlZCBpcyB0cmllZCBmaXJzdCwgdGhlbiB0aGUKKwkgKiByZW1haW5kZXIuIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA0MDBtcyB3aWxsIGJlIHRyaWVkCisJICogaWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLgorCSAqLworCXNwZWVkc1swXSA9IHByb2dyYW1tYWJsZURlbGF5OworCisJaWYgKChhaXB0ZWsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWlwdGVrKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChhaXB0ZWssIDAsIHNpemVvZihzdHJ1Y3QgYWlwdGVrKSk7CisKKwlhaXB0ZWstPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVzYmRldiwgQUlQVEVLX1BBQ0tFVF9MRU5HVEgsCisJCQkJCVNMQUJfQVRPTUlDLCAmYWlwdGVrLT5kYXRhX2RtYSk7CisJaWYgKGFpcHRlay0+ZGF0YSA9PSBOVUxMKSB7CisJCWtmcmVlKGFpcHRlayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWFpcHRlay0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYWlwdGVrLT51cmIgPT0gTlVMTCkgeworCQl1c2JfYnVmZmVyX2ZyZWUodXNiZGV2LCBBSVBURUtfUEFDS0VUX0xFTkdUSCwgYWlwdGVrLT5kYXRhLAorCQkJCWFpcHRlay0+ZGF0YV9kbWEpOworCQlrZnJlZShhaXB0ZWspOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGN1clNldHRpbmdzIHN0cnVjdC4gU2FpZCBzdHJ1Y3QgY29udGFpbnMgdGhlIGN1cnJlbnQKKwkgKiBwcm9ncmFtbWFibGUgcGFyYW1ldGVycy4gVGhlIG5ld1NldHRpbmcgc3RydWN0IGNvbnRhaW5zIGNoYW5nZXMKKwkgKiB0aGUgdXNlciBtYWtlcyB0byB0aGUgc2V0dGluZ3MgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRob3NlCisJICogY2hhbmdlcyBhcmUgbm90ICJjb21taXR0ZWQiIHRvIGN1clNldHRpbmdzIHVudGlsIHRoZSB1c2VyCisJICogd3JpdGVzIHRvIHRoZSBzeXNmcy8uLi4vZXhlY3V0ZSBmaWxlLgorCSAqLworCWFpcHRlay0+Y3VyU2V0dGluZy5wb2ludGVyTW9kZSA9IEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFOworCWFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9IEFJUFRFS19DT09SRElOQVRFX0FCU09MVVRFX01PREU7CisJYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX1BFTl9NT0RFOworCWFpcHRlay0+Y3VyU2V0dGluZy54VGlsdCA9IEFJUFRFS19USUxUX0RJU0FCTEU7CisJYWlwdGVrLT5jdXJTZXR0aW5nLnlUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKKwlhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSA9IEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0ID0gQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwlhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uVXBwZXIgPSBBSVBURUtfU1RZTFVTX1VQUEVSX0JVVFRPTjsKKwlhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIgPSBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTjsKKwlhaXB0ZWstPmN1clNldHRpbmcuaml0dGVyRGVsYXkgPSBqaXR0ZXJEZWxheTsKKwlhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSBwcm9ncmFtbWFibGVEZWxheTsKKworCS8qIEJvdGggc3RydWN0cyBzaG91bGQgaGF2ZSBlcXVpdmFsZW50IHNldHRpbmdzCisJICovCisJbWVtY3B5KCZhaXB0ZWstPm5ld1NldHRpbmcsICZhaXB0ZWstPmN1clNldHRpbmcsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgYWlwdGVrX3NldHRpbmdzKSk7CisKKwkvKiBOb3cgcHJvZ3JhbSB0aGUgY2FwYWNpdGllcyBvZiB0aGUgdGFibGV0LCBpbiB0ZXJtcyBvZiBiZWluZworCSAqIGFuIGlucHV0IGRldmljZS4KKwkgKi8KKwlhaXB0ZWstPmlucHV0ZGV2LmV2Yml0WzBdIHw9IEJJVChFVl9LRVkpCisJICAgIHwgQklUKEVWX0FCUykKKwkgICAgfCBCSVQoRVZfUkVMKQorCSAgICB8IEJJVChFVl9NU0MpOworCisJYWlwdGVrLT5pbnB1dGRldi5hYnNiaXRbMF0gfD0KKwkgICAgKEJJVChBQlNfWCkgfAorCSAgICAgQklUKEFCU19ZKSB8CisJICAgICBCSVQoQUJTX1BSRVNTVVJFKSB8CisJICAgICBCSVQoQUJTX1RJTFRfWCkgfAorCSAgICAgQklUKEFCU19USUxUX1kpIHwgQklUKEFCU19XSEVFTCkgfCBCSVQoQUJTX01JU0MpKTsKKworCWFpcHRlay0+aW5wdXRkZXYucmVsYml0WzBdIHw9CisJICAgIChCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKSB8IEJJVChSRUxfV0hFRUwpIHwgQklUKFJFTF9NSVNDKSk7CisKKwlhaXB0ZWstPmlucHV0ZGV2LmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0KKwkgICAgKEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKSk7CisKKwlhaXB0ZWstPmlucHV0ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0KKwkgICAgKEJJVChCVE5fVE9PTF9QRU4pIHwKKwkgICAgIEJJVChCVE5fVE9PTF9SVUJCRVIpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9QRU5DSUwpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9BSVJCUlVTSCkgfAorCSAgICAgQklUKEJUTl9UT09MX0JSVVNIKSB8CisJICAgICBCSVQoQlROX1RPT0xfTU9VU0UpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9MRU5TKSB8CisJICAgICBCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKSB8IEJJVChCVE5fU1RZTFVTMikpOworCisJYWlwdGVrLT5pbnB1dGRldi5tc2NiaXRbMF0gPSBCSVQoTVNDX1NFUklBTCk7CisKKwkvKiBQcm9ncmFtbWluZyB0aGUgdGFibGV0IG1hY3JvIGtleXMgbmVlZHMgdG8gYmUgZG9uZSB3aXRoIGEgZm9yIGxvb3AKKwkgKiBhcyB0aGUga2V5Y29kZXMgYXJlIGRpc2NvbnRpZ3VvdXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihtYWNyb0tleUV2ZW50cykgLyBzaXplb2YobWFjcm9LZXlFdmVudHNbMF0pOyArK2kpCisJCXNldF9iaXQobWFjcm9LZXlFdmVudHNbaV0sIGFpcHRlay0+aW5wdXRkZXYua2V5Yml0KTsKKworCS8qIFNldCB1cCBjbGllbnQgZGF0YSwgcG9pbnRlcnMgdG8gb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMKKwkgKiBmb3IgdGhlIGlucHV0IGRldmljZS4KKwkgKi8KKwlhaXB0ZWstPmlucHV0ZGV2LnByaXZhdGUgPSBhaXB0ZWs7CisJYWlwdGVrLT5pbnB1dGRldi5vcGVuID0gYWlwdGVrX29wZW47CisJYWlwdGVrLT5pbnB1dGRldi5jbG9zZSA9IGFpcHRla19jbG9zZTsKKworCS8qIERldGVybWluZSB0aGUgdXNiIGRldmljZXMnIHBoeXNpY2FsIHBhdGguCisJICogQXNrZXRoIG5vdCB3aHkgd2UgYWx3YXlzIHByZXRlbmQgd2UncmUgdXNpbmcgIi4uL2lucHV0MCIsCisJICogYnV0IEkgc3VzcGVjdCB0aGlzIHdpbGwgaGF2ZSB0byBiZSByZWZhY3RvcmVkIG9uZQorCSAqIGRheSBpZiBhIHNpbmdsZSBVU0IgZGV2aWNlIGNhbiBiZSBhIGtleWJvYXJkICYgYSBtb3VzZQorCSAqICYgYSB0YWJsZXQsIGFuZCB0aGUgaW5wdXRYIG51bWJlciBhY3R1YWxseSB3aWxsIHRlbGwKKwkgKiB1cyBzb21ldGhpbmcuLi4KKwkgKi8KKwlpZiAodXNiX21ha2VfcGF0aCh1c2JkZXYsIHBhdGgsIDY0KSA+IDApCisJCXNwcmludGYoYWlwdGVrLT5mZWF0dXJlcy51c2JQYXRoLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwkvKiBQcm9ncmFtIHRoZSBpbnB1dCBkZXZpY2UgY29vcmRpbmF0ZSBjYXBhY2l0aWVzLiBXZSBkbyBub3QgeWV0CisJICoga25vdyB3aGF0IG1heGltdW0gWCwgWSwgYW5kIFogdmFsdWVzIGFyZSwgc28gd2UncmUgcHV0dGluZyBmYWtlCisJICogdmFsdWVzIGluLiBMYXRlciwgd2UnbGwgYXNrIHRoZSB0YWJsZXQgdG8gcHV0IGluIHRoZSBjb3JyZWN0CisJICogdmFsdWVzLgorCSAqLworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1hdID0gMjk5OTsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfWV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19ZXSA9IDIyNDk7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtaW5bQUJTX1BSRVNTVVJFXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1BSRVNTVVJFXSA9IDUxMTsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfVElMVF9YXSA9IEFJUFRFS19USUxUX01JTjsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfVElMVF9YXSA9IEFJUFRFS19USUxUX01BWDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfVElMVF9ZXSA9IEFJUFRFS19USUxUX01JTjsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfVElMVF9ZXSA9IEFJUFRFS19USUxUX01BWDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfV0hFRUxdID0gQUlQVEVLX1dIRUVMX01JTjsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfV0hFRUxdID0gQUlQVEVLX1dIRUVMX01BWCAtIDE7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19ZXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19QUkVTU1VSRV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzZnV6eltBQlNfVElMVF9YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19USUxUX1ldID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2Z1enpbQUJTX1dIRUVMXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19ZXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19QUkVTU1VSRV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzZmxhdFtBQlNfVElMVF9YXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19USUxUX1ldID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2ZsYXRbQUJTX1dIRUVMXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5uYW1lID0gIkFpcHRlayI7CisJYWlwdGVrLT5pbnB1dGRldi5waHlzID0gYWlwdGVrLT5mZWF0dXJlcy51c2JQYXRoOworCWFpcHRlay0+aW5wdXRkZXYuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisJYWlwdGVrLT5pbnB1dGRldi5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWFpcHRlay0+aW5wdXRkZXYuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWFpcHRlay0+aW5wdXRkZXYuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCisJYWlwdGVrLT51c2JkZXYgPSB1c2JkZXY7CisJYWlwdGVrLT5pZm51bSA9IGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWFpcHRlay0+aW5EZWxheSA9IDA7CisJYWlwdGVrLT5lbmREZWxheSA9IDA7CisJYWlwdGVrLT5wcmV2aW91c0ppdHRlcmFibGUgPSAwOworCisJZW5kcG9pbnQgPSAmaW50Zi0+YWx0c2V0dGluZ1swXS5lbmRwb2ludFswXS5kZXNjOworCisJLyogR28gc2V0IHVwIG91ciBVUkIsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSB0YWJsZXQgcmVjZWl2ZXMKKwkgKiBpbnB1dC4KKwkgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKGFpcHRlay0+dXJiLAorCQkJIGFpcHRlay0+dXNiZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGFpcHRlay0+dXNiZGV2LAorCQkJCQllbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgYWlwdGVrLT5kYXRhLCA4LCBhaXB0ZWtfaXJxLCBhaXB0ZWssCisJCQkgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisKKwlhaXB0ZWstPnVyYi0+dHJhbnNmZXJfZG1hID0gYWlwdGVrLT5kYXRhX2RtYTsKKwlhaXB0ZWstPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBSZWdpc3RlciB0aGUgdGFibGV0IGFzIGFuIElucHV0IERldmljZQorCSAqLworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmYWlwdGVrLT5pbnB1dGRldik7CisKKwkvKiBXZSBub3cgd2lsbCBsb29rIGZvciB0aGUgZXZkZXYgZGV2aWNlIHdoaWNoIGlzIG1hcHBlZCB0bworCSAqIHRoZSB0YWJsZXQuIFRoZSBwYXJ0aWFsIG5hbWUgaXMga2VwdCBpbiB0aGUgbGluayBsaXN0IG9mCisJICogaW5wdXRfaGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnB1dCBkZXZpY2UuCisJICogV2hhdCBpZGVudGlmaWVzIGFuIGV2ZGV2IGlucHV0X2hhbmRsZXIgaXMgdGhhdCBpdCBiZWdpbnMKKwkgKiB3aXRoICdldmVudCcsIGNvbnRpbnVlcyB3aXRoIGEgZGlnaXQsIGFuZCB0aGF0IGluIHR1cm4KKwkgKiBpcyBtYXBwZWQgdG8gL3tkZXZmc30vaW5wdXQvZXZlbnROLgorCSAqLworCWlucHV0ZGV2ID0gJmFpcHRlay0+aW5wdXRkZXY7CisJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZpbnB1dGRldi0+aF9saXN0KSB7CisJCWlucHV0aGFuZGxlID0gdG9faGFuZGxlKG5vZGUpOworCQlpZiAoc3RybmNtcChpbnB1dGhhbmRsZS0+bmFtZSwgImV2ZW50IiwgNSkgPT0gMCkgeworCQkJc3RyY3B5KGFpcHRlay0+ZmVhdHVyZXMuaW5wdXRQYXRoLCBpbnB1dGhhbmRsZS0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWluZm8oImlucHV0OiBBaXB0ZWsgb24gJXMgKCVzKVxuIiwgcGF0aCwgYWlwdGVrLT5mZWF0dXJlcy5pbnB1dFBhdGgpOworCisJLyogUHJvZ3JhbSB0aGUgdGFibGV0LiBUaGlzIHNldHMgdGhlIHRhYmxldCB1cCBpbiB0aGUgbW9kZQorCSAqIHNwZWNpZmllZCBpbiBuZXdTZXR0aW5nLCBhbmQgYWxzbyBxdWVyaWVzIHRoZSB0YWJsZXQncworCSAqIHBoeXNpY2FsIGNhcGFjaXRpZXMuCisJICoKKwkgKiBTYW5pdHkgY2hlY2s6IGlmIGEgdGFibGV0IGRvZXNuJ3QgbGlrZSB0aGUgc2xvdyBwcm9ncmFtbWF0aWMKKwkgKiBkZWxheSwgd2Ugb2Z0ZW4gZ2V0IHNpemVzIG9mIDB4MC4gTGV0J3MgdXNlIHRoYXQgYXMgYW4gaW5kaWNhdG9yCisJICogdG8gdHJ5IGZhc3RlciBkZWxheXMsIHVwIHRvIDI1IG1zLiBJZiB0aGF0IGxvZ2ljIGZhaWxzLCB3ZWxsLCB5b3UnbGwKKwkgKiBoYXZlIHRvIGV4cGxhaW4gdG8gdXMgaG93IHlvdXIgdGFibGV0IHRoaW5rcyBpdCdzIDB4MCwgYW5kIHlldCB0aGF0J3MKKwkgKiBub3QgYW4gZXJyb3IgOi0pCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNwZWVkcykgLyBzaXplb2Yoc3BlZWRzWzBdKTsgKytpKSB7CisJCWFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IHNwZWVkc1tpXTsKKwkJKHZvaWQpYWlwdGVrX3Byb2dyYW1fdGFibGV0KGFpcHRlayk7CisJCWlmIChhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWF0gPiAwKSB7CisJCQlpbmZvKCJpbnB1dDogQWlwdGVrIHVzaW5nICVkIG1zIHByb2dyYW1taW5nIHNwZWVkXG4iLAorCQkJICAgICBhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBBc3NvY2lhdGUgdGhpcyBkcml2ZXIncyBzdHJ1Y3Qgd2l0aCB0aGUgdXNiIGludGVyZmFjZS4KKwkgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGFpcHRlayk7CisKKwkvKiBTZXQgdXAgdGhlIHN5c2ZzIGZpbGVzCisJICovCisJYWlwdGVrX2FkZF9maWxlcygmaW50Zi0+ZGV2KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgZXZkZXYgbW9kdWxlIGlzIGxvYWRlZC4gQXNzdW1pbmcgZXZkZXYgSVMgYSBtb2R1bGUgOi0pCisJICovCisJaWYgKHJlcXVlc3RfbW9kdWxlKCJldmRldiIpICE9IDApCisJCWluZm8oImFpcHRlazogZXJyb3IgbG9hZGluZyAnZXZkZXYnIG1vZHVsZSIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkIGFpcHRla19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFpcHRla19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiYWlwdGVrIiwKKwkucHJvYmUgPSBhaXB0ZWtfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhaXB0ZWtfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBhaXB0ZWtfaWRzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWFsIHdpdGggdGFibGV0IGRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgc3lzdGVtLgorICovCitzdGF0aWMgdm9pZCBhaXB0ZWtfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJLyogRGlzYXNzb2NpYXRlIGRyaXZlcidzIHN0cnVjdCB3aXRoIHVzYiBpbnRlcmZhY2UKKwkgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChhaXB0ZWsgIT0gTlVMTCkgeworCQkvKiBGcmVlICYgdW5ob29rIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc3lzdGVtLgorCQkgKi8KKwkJdXNiX2tpbGxfdXJiKGFpcHRlay0+dXJiKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmFpcHRlay0+aW5wdXRkZXYpOworCQlhaXB0ZWtfZGVsZXRlX2ZpbGVzKCZpbnRmLT5kZXYpOworCQl1c2JfZnJlZV91cmIoYWlwdGVrLT51cmIpOworCQl1c2JfYnVmZmVyX2ZyZWUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJCQlBSVBURUtfUEFDS0VUX0xFTkdUSCwKKwkJCQlhaXB0ZWstPmRhdGEsIGFpcHRlay0+ZGF0YV9kbWEpOworCQlrZnJlZShhaXB0ZWspOworCQlhaXB0ZWsgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgYWlwdGVrX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhaXB0ZWtfZHJpdmVyKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiAiIERSSVZFUl9BVVRIT1IpOworCQlpbmZvKERSSVZFUl9ERVNDKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFpcHRla19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFpcHRla19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKHByb2dyYW1tYWJsZURlbGF5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwcm9ncmFtbWFibGVEZWxheSwgImRlbGF5IHVzZWQgZHVyaW5nIHRhYmxldCBwcm9ncmFtbWluZyIpOworbW9kdWxlX3BhcmFtKGppdHRlckRlbGF5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhqaXR0ZXJEZWxheSwgInN0eWx1cy9tb3VzZSBzZXR0bGVtZW50IGRlbGF5Iik7CisKK21vZHVsZV9pbml0KGFpcHRla19pbml0KTsKK21vZHVsZV9leGl0KGFpcHRla19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTVhZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCkBAIC0wLDAgKzEsODUwIEBACisvKiAKKyAqICBVU0IgQVRJIFJlbW90ZSBzdXBwb3J0CisgKgorICogIFZlcnNpb24gMi4yLjAgQ29weXJpZ2h0IChjKSAyMDA0IFRvcnJleSBIb2ZmbWFuIDx0aG9mZm1hbkBhcm5vci5uZXQ+CisgKiAgVmVyc2lvbiAyLjEuMSBDb3B5cmlnaHQgKGMpIDIwMDIgVmxhZGltaXIgRGVyZ2FjaGV2CisgKgorICogIFRoaXMgMi4yLjAgdmVyc2lvbiBpcyBhIHJld3JpdGUgLyBjbGVhbnVwIG9mIHRoZSAyLjEuMSBkcml2ZXIsIGluY2x1ZGluZworICogIHBvcnRpbmcgdG8gdGhlIDIuNiBrZXJuZWwgaW50ZXJmYWNlcywgYWxvbmcgd2l0aCBvdGhlciBtb2RpZmljYXRpb24gCisgKiAgdG8gYmV0dGVyIG1hdGNoIHRoZSBzdHlsZSBvZiB0aGUgZXhpc3RpbmcgdXNiL2lucHV0IGRyaXZlcnMuICBIb3dldmVyLCB0aGUKKyAqICBwcm90b2NvbCBhbmQgaGFyZHdhcmUgaGFuZGxpbmcgaXMgZXNzZW50aWFsbHkgdW5jaGFuZ2VkIGZyb20gMi4xLjEuCisgKiAgCisgKiAgVGhlIDIuMS4xIGRyaXZlciB3YXMgZGVyaXZlZCBmcm9tIHRoZSB1c2JhdGlfcmVtb3RlIGFuZCB1c2JrYmQgZHJpdmVycyBieSAKKyAqICBWb2p0ZWNoIFBhdmxpay4KKyAqCisgKiAgQ2hhbmdlczoKKyAqCisgKiAgRmViIDIwMDQ6IFRvcnJleSBIb2ZmbWFuIDx0aG9mZm1hbkBhcm5vci5uZXQ+CisgKiAgICAgICAgICAgIFZlcnNpb24gMi4yLjAKKyAqICBKdW4gMjAwNDogVG9ycmV5IEhvZmZtYW4gPHRob2ZmbWFuQGFybm9yLm5ldD4KKyAqICAgICAgICAgICAgVmVyc2lvbiAyLjIuMQorICogICAgICAgICAgICBBZGRlZCBrZXkgcmVwZWF0IHN1cHBvcnQgY29udHJpYnV0ZWQgYnk6CisgKiAgICAgICAgICAgICAgICBWaW5jZW50IFZhbmFja2VyZSA8dmFuYWNrZXJlQGxpZi51bml2LW1ycy5mcj4KKyAqICAgICAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlICJMb2xhIiByZW1vdGUgY29udHJpYnV0ZWQgYnk6CisgKiAgICAgICAgICAgICAgICBTZXRoIENvaG4gPHNldGhjb2huQHlhaG9vLmNvbT4KKyAqCisgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqIAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAKKyAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisgKgorICogSGFyZHdhcmUgJiBzb2Z0d2FyZSBub3RlcworICoKKyAqIFRoZXNlIHJlbW90ZSBjb250cm9scyBhcmUgZGlzdHJpYnV0ZWQgYnkgQVRJIGFzIHBhcnQgb2YgdGhlaXIgCisgKiAiQWxsLUluLVdvbmRlciIgdmlkZW8gY2FyZCBwYWNrYWdlcy4gIFRoZSByZWNlaXZlciBzZWxmLWlkZW50aWZpZXMgYXMgYSAKKyAqICJVU0IgUmVjZWl2ZXIiIHdpdGggbWFudWZhY3R1cmVyICJYMTAgV2lyZWxlc3MgVGVjaG5vbG9neSBJbmMiLgorICoKKyAqIFRoZSAiTG9sYSIgcmVtb3RlIGlzIGF2YWlsYWJsZSBmcm9tIFgxMC4gIFNlZTogCisgKiAgICBodHRwOi8vd3d3LngxMC5jb20vcHJvZHVjdHMvbG9sYV9zZzEuaHRtCisgKiBUaGUgTG9sYSBpcyBzaW1pbGFyIHRvIHRoZSBBVEkgcmVtb3RlIGJ1dCBoYXMgbm8gbW91c2Ugc3VwcG9ydCwgYW5kIHNsaWdodGx5CisgKiBkaWZmZXJlbnQga2V5cy4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgbXVsdGlwbGUgcmVjZWl2ZXJzIGFuZCByZW1vdGVzIG9uIG11bHRpcGxlIGNvbXB1dGVycyAKKyAqIHNpbXVsdGFuZW91c2x5IGJ5IGNvbmZpZ3VyaW5nIHRoZW0gdG8gdXNlIHNwZWNpZmljIGNoYW5uZWxzLgorICogCisgKiBUaGUgUkYgcHJvdG9jb2wgdXNlZCBieSB0aGUgcmVtb3RlIHN1cHBvcnRzIDE2IGRpc3RpbmN0IGNoYW5uZWxzLCAxIHRvIDE2LiAgCisgKiBBY3R1YWxseSwgaXQgbWF5IGV2ZW4gc3VwcG9ydCBtb3JlLCBhdCBsZWFzdCBpbiBzb21lIHJldmlzaW9ucyBvZiB0aGUgCisgKiBoYXJkd2FyZS4KKyAqCisgKiBFYWNoIHJlbW90ZSBjYW4gYmUgY29uZmlndXJlZCB0byB0cmFuc21pdCBvbiBvbmUgY2hhbm5lbCBhcyBmb2xsb3dzOgorICogICAtIFByZXNzIGFuZCBob2xkIHRoZSAiaGFuZCBpY29uIiBidXR0b24uICAKKyAqICAgLSBXaGVuIHRoZSByZWQgTEVEIHN0YXJ0cyB0byBibGluaywgbGV0IGdvIG9mIHRoZSAiaGFuZCBpY29uIiBidXR0b24uIAorICogICAtIFdoZW4gaXQgc3RvcHMgYmxpbmtpbmcsIGlucHV0IHRoZSBjaGFubmVsIGNvZGUgYXMgdHdvIGRpZ2l0cywgZnJvbSAwMSAKKyAqICAgICB0byAxNiwgYW5kIHByZXNzIHRoZSBoYW5kIGljb24gYWdhaW4uCisgKiAKKyAqIFRoZSB0aW1pbmcgY2FuIGJlIGEgbGl0dGxlIHRyaWNreS4gIFRyeSBsb2FkaW5nIHRoZSBtb2R1bGUgd2l0aCBkZWJ1Zz0xCisgKiB0byBoYXZlIHRoZSBrZXJuZWwgcHJpbnQgb3V0IG1lc3NhZ2VzIGFib3V0IHRoZSByZW1vdGUgY29udHJvbCBudW1iZXIKKyAqIGFuZCBtYXNrLiAgTm90ZTogZGVidWdnaW5nIHByaW50cyByZW1vdGUgbnVtYmVycyBhcyB6ZXJvLWJhc2VkIGhleGFkZWNpbWFsLgorICoKKyAqIFRoZSBkcml2ZXIgaGFzIGEgImNoYW5uZWxfbWFzayIgcGFyYW1ldGVyLiBUaGlzIGJpdG1hc2sgc3BlY2lmaWVzIHdoaWNoCisgKiBjaGFubmVscyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIG1vZHVsZS4gIFRvIG1hc2sgb3V0IGNoYW5uZWxzLCBqdXN0IGFkZCAKKyAqIGFsbCB0aGUgMl5jaGFubmVsX251bWJlciB2YWx1ZXMgdG9nZXRoZXIuCisgKgorICogRm9yIGluc3RhbmNlLCBzZXQgY2hhbm5lbF9tYXNrID0gMl40ID0gMTYgKGJpbmFyeSAxMDAwMCkgdG8gbWFrZSBhdGlfcmVtb3RlCisgKiBpZ25vcmUgc2lnbmFscyBjb21pbmcgZnJvbSByZW1vdGUgY29udHJvbHMgdHJhbnNtaXR0aW5nIG9uIGNoYW5uZWwgNCwgYnV0IAorICogYWNjZXB0IGFsbCBvdGhlciBjaGFubmVscy4KKyAqCisgKiBPciwgc2V0IGNoYW5uZWxfbWFzayA9IDY1NTMzLCAoMHhGRkZEKSwgYW5kIGFsbCBjaGFubmVscyBleGNlcHQgMSB3aWxsIGJlIAorICogaWdub3JlZC4KKyAqCisgKiBUaGUgZGVmYXVsdCBpcyAwIChyZXNwb25kIHRvIGFsbCBjaGFubmVscykuIEJpdCAwIGFuZCBiaXRzIDE3LTMyIG9mIHRoaXMgCisgKiBwYXJhbWV0ZXIgYXJlIHVudXNlZC4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisvKgorICogTW9kdWxlIGFuZCBWZXJzaW9uIEluZm9ybWF0aW9uLCBNb2R1bGUgUGFyYW1ldGVycworICovCisgCisjZGVmaW5lIEFUSV9SRU1PVEVfVkVORE9SX0lEIAkweDBiYzcKKyNkZWZpbmUgQVRJX1JFTU9URV9QUk9EVUNUX0lEIAkweDAwNAorI2RlZmluZSBMT0xBX1JFTU9URV9QUk9EVUNUX0lEIAkweDAwMgorI2RlZmluZSBNRURJT05fUkVNT1RFX1BST0RVQ1RfSUQgMHgwMDYKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAJICAgICAgICAiMi4yLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAgICAgICAgICJUb3JyZXkgSG9mZm1hbiA8dGhvZmZtYW5AYXJub3IubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAgICAgIkFUSS9YMTAgUkYgVVNCIFJlbW90ZSBDb250cm9sIgorCisjZGVmaW5lIE5BTUVfQlVGU0laRSAgICAgIDgwICAgIC8qIHNpemUgb2YgcHJvZHVjdCBuYW1lLCBwYXRoIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgREFUQV9CVUZTSVpFICAgICAgNjMgICAgLyogc2l6ZSBvZiBVUkIgZGF0YSBidWZmZXJzICovCisjZGVmaW5lIEFUSV9JTlBVVE5VTSAgICAgIDEgICAgIC8qIFdoaWNoIGlucHV0IGRldmljZSB0byByZWdpc3RlciBhcyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjaGFubmVsX21hc2sgPSAwOworbW9kdWxlX3BhcmFtKGNoYW5uZWxfbWFzaywgdWxvbmcsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaGFubmVsX21hc2ssICJCaXRtYXNrIG9mIHJlbW90ZSBjb250cm9sIGNoYW5uZWxzIHRvIGlnbm9yZSIpOworCitzdGF0aWMgaW50IGRlYnVnID0gMDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZXh0cmEgZGVidWcgbWVzc2FnZXMgYW5kIGluZm9ybWF0aW9uIik7CisKKyNkZWZpbmUgZGJnaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKyN1bmRlZiBlcnIKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0ICwgIyMgYXJnKQorIAorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF0aV9yZW1vdGVfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQVRJX1JFTU9URV9WRU5ET1JfSUQsIEFUSV9SRU1PVEVfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQVRJX1JFTU9URV9WRU5ET1JfSUQsIExPTEFfUkVNT1RFX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFUSV9SRU1PVEVfVkVORE9SX0lELCBNRURJT05fUkVNT1RFX1BST0RVQ1RfSUQpIH0sCisJe30JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhdGlfcmVtb3RlX3RhYmxlKTsKKworLyogR2V0IGhpIGFuZCBsb3cgYnl0ZXMgb2YgYSAxNi1iaXRzIGludCAqLworI2RlZmluZSBISShhKQkoKHVuc2lnbmVkIGNoYXIpKChhKSA+PiA4KSkKKyNkZWZpbmUgTE8oYSkJKCh1bnNpZ25lZCBjaGFyKSgoYSkgJiAweGZmKSkKKworI2RlZmluZSBTRU5EX0ZMQUdfSU5fUFJPR1JFU1MJMQorI2RlZmluZSBTRU5EX0ZMQUdfQ09NUExFVEUJMgorCisvKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyAqLworc3RhdGljIGNoYXIgaW5pdDFbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCB9Oworc3RhdGljIGNoYXIgaW5pdDJbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCwgMHgyMCwgMHgyMCwgMHgyMCB9OworCisvKiBBY2NlbGVyYXRpb24gY3VydmUgZm9yIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkICovCitzdGF0aWMgY2hhciBhY2NlbFtdID0geyAxLCAyLCA0LCA2LCA5LCAxMywgMjAgfTsKKworLyogRHVwbGljYXRlIGV2ZW50IGZpbHRlcmluZyB0aW1lLiAKKyAqIFNlcXVlbnRpYWwsIGlkZW50aWNhbCBLSU5EX0ZJTFRFUkVEIGlucHV0cyB3aXRoIGxlc3MgdGhhbgorICogRklMVEVSX1RJTUUgamlmZmllcyBiZXR3ZWVuIHRoZW0gYXJlIGNvbnNpZGVyZWQgYXMgcmVwZWF0CisgKiBldmVudHMuIFRoZSBoYXJkd2FyZSBnZW5lcmF0ZXMgNSBldmVudHMgZm9yIHRoZSBmaXJzdCBrZXlwcmVzcworICogYW5kIHdlIGhhdmUgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCBmb3IgYW4gYWNjdXJhdGUgcmVwZWF0CisgKiBiZWhhdmlvdXIuCisgKiAoSFogLyAyMCkgPT0gNTAgbXMgYW5kIHdvcmtzIHdlbGwgZm9yIG1lLgorICovCisjZGVmaW5lIEZJTFRFUl9USU1FIChIWiAvIDIwKQorCitzdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7CisKK3N0cnVjdCBhdGlfcmVtb3RlIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGlkZXY7CQkKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCQkKKwlzdHJ1Y3QgdXJiICppcnFfdXJiOworCXN0cnVjdCB1cmIgKm91dF91cmI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50X291dDsKKwl1bnNpZ25lZCBjaGFyICppbmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpvdXRidWY7CisJZG1hX2FkZHJfdCBpbmJ1Zl9kbWE7CisJZG1hX2FkZHJfdCBvdXRidWZfZG1hOworCisJaW50IG9wZW47ICAgICAgICAgICAgICAgICAgIC8qIG9wZW4gY291bnRlciAqLworCQorCXVuc2lnbmVkIGNoYXIgb2xkX2RhdGFbMl07ICAvKiBEZXRlY3QgZHVwbGljYXRlIGV2ZW50cyAqLworCXVuc2lnbmVkIGxvbmcgb2xkX2ppZmZpZXM7CisJdW5zaWduZWQgbG9uZyBhY2NfamlmZmllczsgIC8qIGhhbmRsZSBhY2NlbGVyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgcmVwZWF0X2NvdW50OworCQorCWNoYXIgbmFtZVtOQU1FX0JVRlNJWkVdOworCWNoYXIgcGh5c1tOQU1FX0JVRlNJWkVdOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlpbnQgc2VuZF9mbGFnczsKK307CisKKy8qICJLaW5kcyIgb2YgbWVzc2FnZXMgc2VudCBmcm9tIHRoZSBoYXJkd2FyZSB0byB0aGUgZHJpdmVyLiAqLworI2RlZmluZSBLSU5EX0VORCAgICAgICAgMAorI2RlZmluZSBLSU5EX0xJVEVSQUwgICAgMSAgIC8qIFNpbXBseSBwYXNzIHRvIGlucHV0IHN5c3RlbSAqLworI2RlZmluZSBLSU5EX0ZJTFRFUkVEICAgMiAgIC8qIEFkZCBhcnRpZmljaWFsIGtleS11cCBldmVudHMsIGRyb3Aga2V5cmVwZWF0cyAqLworI2RlZmluZSBLSU5EX0xVICAgICAgICAgMyAgIC8qIERpcmVjdGlvbmFsIGtleXBhZCBkaWFnb25hbHMgLSBsZWZ0IHVwLCAqLworI2RlZmluZSBLSU5EX1JVICAgICAgICAgNCAgIC8qICAgcmlnaHQgdXAsICAqLworI2RlZmluZSBLSU5EX0xEICAgICAgICAgNSAgIC8qICAgbGVmdCBkb3duLCAqLworI2RlZmluZSBLSU5EX1JEICAgICAgICAgNiAgIC8qICAgcmlnaHQgZG93biAqLworI2RlZmluZSBLSU5EX0FDQ0VMICAgICAgNyAgIC8qIERpcmVjdGlvbmFsIGtleXBhZCAtIGxlZnQsIHJpZ2h0LCB1cCwgZG93bi4qLworCisvKiBUcmFuc2xhdGlvbiB0YWJsZSBmcm9tIGhhcmR3YXJlIG1lc3NhZ2VzIHRvIGlucHV0IGV2ZW50cy4gKi8KK3N0YXRpYyBzdHJ1Y3QKK3sKKwlzaG9ydCBraW5kOworCXVuc2lnbmVkIGNoYXIgZGF0YTEsIGRhdGEyOworCWludCB0eXBlOworCXVuc2lnbmVkIGludCBjb2RlOworCWludCB2YWx1ZTsKK30gIGF0aV9yZW1vdGVfdGJsW10gPSAKK3sKKwkvKiBEaXJlY3Rpb25hbCBjb250cm9sIHBhZCBheGVzICovCisJe0tJTkRfQUNDRUwsICAgMHgzNSwgMHg3MCwgRVZfUkVMLCBSRUxfWCwgLTF9LAkgLyogbGVmdCAqLworCXtLSU5EX0FDQ0VMLCAgIDB4MzYsIDB4NzEsIEVWX1JFTCwgUkVMX1gsIDF9LCAgICAvKiByaWdodCAqLworCXtLSU5EX0FDQ0VMLCAgIDB4MzcsIDB4NzIsIEVWX1JFTCwgUkVMX1ksIC0xfSwJIC8qIHVwICovCisJe0tJTkRfQUNDRUwsICAgMHgzOCwgMHg3MywgRVZfUkVMLCBSRUxfWSwgMX0sICAgIC8qIGRvd24gKi8KKwkvKiBEaXJlY3Rpb25hbCBjb250cm9sIHBhZCBkaWFnb25hbHMgKi8JCisJe0tJTkRfTFUsICAgICAgMHgzOSwgMHg3NCwgRVZfUkVMLCAwLCAwfSwgICAgICAgIC8qIGxlZnQgdXAgKi8KKwl7S0lORF9SVSwgICAgICAweDNhLCAweDc1LCBFVl9SRUwsIDAsIDB9LCAgICAgICAgLyogcmlnaHQgdXAgKi8KKwl7S0lORF9MRCwgICAgICAweDNjLCAweDc3LCBFVl9SRUwsIDAsIDB9LCAgICAgICAgLyogbGVmdCBkb3duICovCisJe0tJTkRfUkQsICAgICAgMHgzYiwgMHg3NiwgRVZfUkVMLCAwLCAwfSwgICAgICAgIC8qIHJpZ2h0IGRvd24gKi8KKworCS8qICJNb3VzZSBidXR0b24iIGJ1dHRvbnMgKi8KKwl7S0lORF9MSVRFUkFMLCAweDNkLCAweDc4LCBFVl9LRVksIEJUTl9MRUZULCAxfSwgLyogbGVmdCBidG4gZG93biAqLworCXtLSU5EX0xJVEVSQUwsIDB4M2UsIDB4NzksIEVWX0tFWSwgQlROX0xFRlQsIDB9LCAvKiBsZWZ0IGJ0biB1cCAqLworCXtLSU5EX0xJVEVSQUwsIDB4NDEsIDB4N2MsIEVWX0tFWSwgQlROX1JJR0hULCAxfSwvKiByaWdodCBidG4gZG93biAqLworCXtLSU5EX0xJVEVSQUwsIDB4NDIsIDB4N2QsIEVWX0tFWSwgQlROX1JJR0hULCAwfSwvKiByaWdodCBidG4gdXAgKi8KKworCS8qIEFydGlmaWNpYWwgImRvdWJsZWNsaWNrIiBldmVudHMgYXJlIGdlbmVyYXRlZCBieSB0aGUgaGFyZHdhcmUuIAorCSAqIFRoZXkgYXJlIG1hcHBlZCB0byB0aGUgInNpZGUiIGFuZCAiZXh0cmEiIG1vdXNlIGJ1dHRvbnMgaGVyZS4gKi8KKwl7S0lORF9GSUxURVJFRCwgMHgzZiwgMHg3YSwgRVZfS0VZLCBCVE5fU0lERSwgMX0sIC8qIGxlZnQgZGJsY2xpY2sgKi8KKwl7S0lORF9GSUxURVJFRCwgMHg0MywgMHg3ZSwgRVZfS0VZLCBCVE5fRVhUUkEsIDF9LC8qIHJpZ2h0IGRibGNsaWNrICovCisKKwkvKiBrZXlib2FyZC4gKi8KKwl7S0lORF9GSUxURVJFRCwgMHhkMiwgMHgwZCwgRVZfS0VZLCBLRVlfMSwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDMsIDB4MGUsIEVWX0tFWSwgS0VZXzIsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGQ0LCAweDBmLCBFVl9LRVksIEtFWV8zLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkNSwgMHgxMCwgRVZfS0VZLCBLRVlfNCwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDYsIDB4MTEsIEVWX0tFWSwgS0VZXzUsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGQ3LCAweDEyLCBFVl9LRVksIEtFWV82LCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkOCwgMHgxMywgRVZfS0VZLCBLRVlfNywgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDksIDB4MTQsIEVWX0tFWSwgS0VZXzgsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGRhLCAweDE1LCBFVl9LRVksIEtFWV85LCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkYywgMHgxNywgRVZfS0VZLCBLRVlfMCwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4YzUsIDB4MDAsIEVWX0tFWSwgS0VZX0EsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGM2LCAweDAxLCBFVl9LRVksIEtFWV9CLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkZSwgMHgxOSwgRVZfS0VZLCBLRVlfQywgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZTAsIDB4MWIsIEVWX0tFWSwgS0VZX0QsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGU2LCAweDIxLCBFVl9LRVksIEtFWV9FLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhlOCwgMHgyMywgRVZfS0VZLCBLRVlfRiwgMX0sCisKKwkvKiAic3BlY2lhbCIga2V5cyAqLworCXtLSU5EX0ZJTFRFUkVELCAweGRkLCAweDE4LCBFVl9LRVksIEtFWV9LUEVOVEVSLCAxfSwgICAgLyogImNoZWNrIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGRiLCAweDE2LCBFVl9LRVksIEtFWV9NRU5VLCAxfSwgICAgICAgLyogIm1lbnUiICovCisJe0tJTkRfRklMVEVSRUQsIDB4YzcsIDB4MDIsIEVWX0tFWSwgS0VZX1BPV0VSLCAxfSwgICAgICAvKiBQb3dlciAqLworCXtLSU5EX0ZJTFRFUkVELCAweGM4LCAweDAzLCBFVl9LRVksIEtFWV9UViwgMX0sICAgICAgICAgLyogVFYgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjOSwgMHgwNCwgRVZfS0VZLCBLRVlfRFZELCAxfSwgICAgICAgIC8qIERWRCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGNhLCAweDA1LCBFVl9LRVksIEtFWV9XV1csIDF9LCAgICAgICAgLyogV0VCICovCisJe0tJTkRfRklMVEVSRUQsIDB4Y2IsIDB4MDYsIEVWX0tFWSwgS0VZX0JPT0tNQVJLUywgMX0sICAvKiAiYm9vayIgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjYywgMHgwNywgRVZfS0VZLCBLRVlfRURJVCwgMX0sICAgICAgIC8qICJoYW5kIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGUxLCAweDFjLCBFVl9LRVksIEtFWV9DT0ZGRUUsIDF9LCAgICAgLyogInRpbWVyIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGU1LCAweDIwLCBFVl9LRVksIEtFWV9GUk9OVCwgMX0sICAgICAgLyogIm1heCIgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlMiwgMHgxZCwgRVZfS0VZLCBLRVlfTEVGVCwgMX0sICAgICAgIC8qIGxlZnQgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlNCwgMHgxZiwgRVZfS0VZLCBLRVlfUklHSFQsIDF9LCAgICAgIC8qIHJpZ2h0ICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZTcsIDB4MjIsIEVWX0tFWSwgS0VZX0RPV04sIDF9LCAgICAgICAvKiBkb3duICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZGYsIDB4MWEsIEVWX0tFWSwgS0VZX1VQLCAxfSwgICAgICAgICAvKiB1cCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGUzLCAweDFlLCBFVl9LRVksIEtFWV9PSywgMX0sICAgICAgICAgLyogIk9LIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGNlLCAweDA5LCBFVl9LRVksIEtFWV9WT0xVTUVET1dOLCAxfSwgLyogVk9MICsgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjZCwgMHgwOCwgRVZfS0VZLCBLRVlfVk9MVU1FVVAsIDF9LCAgIC8qIFZPTCAtICovCisJe0tJTkRfRklMVEVSRUQsIDB4Y2YsIDB4MGEsIEVWX0tFWSwgS0VZX01VVEUsIDF9LCAgICAgICAvKiBNVVRFICAqLworCXtLSU5EX0ZJTFRFUkVELCAweGQwLCAweDBiLCBFVl9LRVksIEtFWV9DSEFOTkVMVVAsIDF9LCAgLyogQ0ggKyAqLworCXtLSU5EX0ZJTFRFUkVELCAweGQxLCAweDBjLCBFVl9LRVksIEtFWV9DSEFOTkVMRE9XTiwgMX0sLyogQ0ggLSAqLworCXtLSU5EX0ZJTFRFUkVELCAweGVjLCAweDI3LCBFVl9LRVksIEtFWV9SRUNPUkQsIDF9LCAgICAgLyogKCBvKSByZWQgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlYSwgMHgyNSwgRVZfS0VZLCBLRVlfUExBWSwgMX0sICAgICAgIC8qICggPikgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlOSwgMHgyNCwgRVZfS0VZLCBLRVlfUkVXSU5ELCAxfSwgICAgIC8qICg8PCkgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlYiwgMHgyNiwgRVZfS0VZLCBLRVlfRk9SV0FSRCwgMX0sICAgIC8qICg+PikgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlZCwgMHgyOCwgRVZfS0VZLCBLRVlfU1RPUCwgMX0sICAgICAgIC8qIChbXSkgKi8gCisJe0tJTkRfRklMVEVSRUQsIDB4ZWUsIDB4MjksIEVWX0tFWSwgS0VZX1BBVVNFLCAxfSwgICAgICAvKiAoJycpICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjAsIDB4MmIsIEVWX0tFWSwgS0VZX1BSRVZJT1VTLCAxfSwgICAvKiAoPC0pICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZWYsIDB4MmEsIEVWX0tFWSwgS0VZX05FWFQsIDF9LCAgICAgICAvKiAoPispICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjIsIDB4MkQsIEVWX0tFWSwgS0VZX0lORk8sIDF9LCAgICAgICAvKiBQTEFZSU5HICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjMsIDB4MkUsIEVWX0tFWSwgS0VZX0hPTUUsIDF9LCAgICAgICAvKiBUT1AgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhmNCwgMHgyRiwgRVZfS0VZLCBLRVlfRU5ELCAxfSwgICAgICAgIC8qIEVORCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGY1LCAweDMwLCBFVl9LRVksIEtFWV9TRUxFQ1QsIDF9LCAgICAgLyogU0VMRUNUICovCQorCQorCXtLSU5EX0VORCwgMHgwMCwgMHgwMCwgRVZfTUFYICsgMSwgMCwgMH0KK307CisKKy8qIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcAkJKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZGVsZXRlCQkoc3RydWN0IGF0aV9yZW1vdGUgKmRldik7CitzdGF0aWMgaW50IGF0aV9yZW1vdGVfb3BlbgkJKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfY2xvc2UJCShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldik7CitzdGF0aWMgaW50IGF0aV9yZW1vdGVfc2VuZHBhY2tldAkoc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUsIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pcnFfb3V0CQkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2lycV9pbgkJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pbnB1dF9yZXBvcnQJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCBhdGlfcmVtb3RlX2luaXRpYWxpemUJKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKTsKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9wcm9iZQkJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2Rpc2Nvbm5lY3QJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGlfcmVtb3RlX2RyaXZlciA9IHsKKwkub3duZXIgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm5hbWUgICAgICAgICA9ICJhdGlfcmVtb3RlIiwKKwkucHJvYmUgICAgICAgID0gYXRpX3JlbW90ZV9wcm9iZSwKKwkuZGlzY29ubmVjdCAgID0gYXRpX3JlbW90ZV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSAgICAgPSBhdGlfcmVtb3RlX3RhYmxlLAorfTsKKworLyoKKyAqCWF0aV9yZW1vdGVfZHVtcF9pbnB1dAorICovCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2R1bXAodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAoKGxlbiA9PSAxKSAmJiAoZGF0YVswXSAhPSAodW5zaWduZWQgY2hhcikweGZmKSAmJiAoZGF0YVswXSAhPSAweDAwKSkKKwkJd2FybigiV2VpcmQgYnl0ZSAweCUwMngiLCBkYXRhWzBdKTsKKwllbHNlIGlmIChsZW4gPT0gNCkKKwkJd2FybigiV2VpcmQga2V5ICUwMnggJTAyeCAlMDJ4ICUwMngiLCAKKwkJICAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKwllbHNlCisJCXdhcm4oIldlaXJkIGRhdGEsIGxlbj0lZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAuLi4iLAorCQkgICAgIGxlbiwgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSk7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX29wZW4KKyAqLworc3RhdGljIGludCBhdGlfcmVtb3RlX29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWlmIChhdGlfcmVtb3RlLT5vcGVuKyspCisJCWdvdG8gZXhpdDsKKworCS8qIE9uIGZpcnN0IG9wZW4sIHN1Ym1pdCB0aGUgcmVhZCB1cmIgd2hpY2ggd2FzIHNldCB1cCBwcmV2aW91c2x5LiAqLworCWF0aV9yZW1vdGUtPmlycV91cmItPmRldiA9IGF0aV9yZW1vdGUtPnVkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGF0aV9yZW1vdGUtPmlycV91cmIsIEdGUF9LRVJORUwpKSB7CisJCWRldl9lcnIoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJYXRpX3JlbW90ZS0+b3Blbi0tOworCQlyZXR2YWwgPSAtRUlPOworCX0KKworZXhpdDoKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX2Nsb3NlCisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKwkKKwlpZiAoIS0tYXRpX3JlbW90ZS0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKGF0aV9yZW1vdGUtPmlycV91cmIpOworfQorCisvKgorICoJCWF0aV9yZW1vdGVfaXJxX291dAorICovCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2lycV9vdXQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSA9IHVyYi0+Y29udGV4dDsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogc3RhdHVzICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJCisJYXRpX3JlbW90ZS0+c2VuZF9mbGFncyB8PSBTRU5EX0ZMQUdfQ09NUExFVEU7CisJd21iKCk7CisJd2FrZV91cCgmYXRpX3JlbW90ZS0+d2FpdCk7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX3NlbmRwYWNrZXQKKyAqCQkKKyAqCVVzZWQgdG8gc2VuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc3RyaW5ncworICovCitzdGF0aWMgaW50IGF0aV9yZW1vdGVfc2VuZHBhY2tldChzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwkKKwkvKiBTZXQgdXAgb3V0X3VyYiAqLworCW1lbWNweShhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyAxLCBkYXRhLCBMTyhjbWQpKTsKKwkoKGNoYXIgKikgYXRpX3JlbW90ZS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IEhJKGNtZCk7CQorCisJYXRpX3JlbW90ZS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IExPKGNtZCkgKyAxOworCWF0aV9yZW1vdGUtPm91dF91cmItPmRldiA9IGF0aV9yZW1vdGUtPnVkZXY7CisJYXRpX3JlbW90ZS0+c2VuZF9mbGFncyA9IFNFTkRfRkxBR19JTl9QUk9HUkVTUzsKKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsIAorCQkJICJzZW5kcGFja2V0OiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6ICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXdhaXRfZXZlbnRfdGltZW91dChhdGlfcmVtb3RlLT53YWl0LAorCQkoKGF0aV9yZW1vdGUtPm91dF91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHx8CisJCSAJKGF0aV9yZW1vdGUtPnNlbmRfZmxhZ3MgJiBTRU5EX0ZMQUdfQ09NUExFVEUpKSwKKwkJSFopOworCXVzYl9raWxsX3VyYihhdGlfcmVtb3RlLT5vdXRfdXJiKTsKKwkKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICoJYXRpX3JlbW90ZV9ldmVudF9sb29rdXAKKyAqLworc3RhdGljIGludCBhdGlfcmVtb3RlX2V2ZW50X2xvb2t1cChpbnQgcmVtLCB1bnNpZ25lZCBjaGFyIGQxLCB1bnNpZ25lZCBjaGFyIGQyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgYXRpX3JlbW90ZV90YmxbaV0ua2luZCAhPSBLSU5EX0VORDsgaSsrKSB7CisJCS8qIAorCQkgKiBEZWNpZGUgaWYgdGhlIHRhYmxlIGVudHJ5IG1hdGNoZXMgdGhlIHJlbW90ZSBpbnB1dC4gCisJCSAqLworCQlpZiAoKCgoYXRpX3JlbW90ZV90YmxbaV0uZGF0YTEgJiAweDBmKSA9PSAoZDEgJiAweDBmKSkpICYmCisJCSAgICAoKCgoYXRpX3JlbW90ZV90YmxbaV0uZGF0YTEgPj4gNCkgLSAKKwkJICAgICAgIChkMSA+PiA0KSArIHJlbSkgJiAweDBmKSA9PSAweDBmKSAmJiAKKwkJICAgIChhdGlfcmVtb3RlX3RibFtpXS5kYXRhMiA9PSBkMikpCisJCQlyZXR1cm4gaTsKKwkJCisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfcmVwb3J0X2lucHV0CisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaW5wdXRfcmVwb3J0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCQoreworCXN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGE9IGF0aV9yZW1vdGUtPmluYnVmOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZhdGlfcmVtb3RlLT5pZGV2OyAKKwlpbnQgaW5kZXgsIGFjYzsKKwlpbnQgcmVtb3RlX251bTsKKwkKKwkvKiBEZWFsIHdpdGggc3RyYW5nZSBsb29raW5nIGlucHV0cyAqLworCWlmICggKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSA0KSB8fCAoZGF0YVswXSAhPSAweDE0KSB8fCAKKwkJKChkYXRhWzNdICYgMHgwZikgIT0gMHgwMCkgKSB7CisJCWF0aV9yZW1vdGVfZHVtcChkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlyZXR1cm47CisJfQorCisJLyogTWFzayB1bndhbnRlZCByZW1vdGUgY2hhbm5lbHMuICAqLworCS8qIG5vdGU6IHJlbW90ZV9udW0gaXMgMC1iYXNlZCwgY2hhbm5lbCAxIG9uIHJlbW90ZSA9PSAwIGhlcmUgKi8KKwlyZW1vdGVfbnVtID0gKGRhdGFbM10gPj4gNCkgJiAweDBmOworICAgICAgICBpZiAoY2hhbm5lbF9tYXNrICYgKDEgPDwgKHJlbW90ZV9udW0gKyAxKSkpIHsgCisJCWRiZ2luZm8oJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LAorCQkJIk1hc2tlZCBpbnB1dCBmcm9tIGNoYW5uZWwgMHglMDJ4OiBkYXRhICUwMngsJTAyeCwgbWFzaz0gMHglMDJseFxuIiwKKwkJCXJlbW90ZV9udW0sIGRhdGFbMV0sIGRhdGFbMl0sIGNoYW5uZWxfbWFzayk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMb29rIHVwIGV2ZW50IGNvZGUgaW5kZXggaW4gdHJhbnNsYXRpb24gdGFibGUgKi8KKwlpbmRleCA9IGF0aV9yZW1vdGVfZXZlbnRfbG9va3VwKHJlbW90ZV9udW0sIGRhdGFbMV0sIGRhdGFbMl0pOworCWlmIChpbmRleCA8IDApIHsKKwkJZGV2X3dhcm4oJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJCSAiVW5rbm93biBpbnB1dCBmcm9tIGNoYW5uZWwgMHglMDJ4OiBkYXRhICUwMngsJTAyeFxuIiwgCisJCQkgcmVtb3RlX251bSwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCXJldHVybjsKKwl9IAorCWRiZ2luZm8oJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJImNoYW5uZWwgMHglMDJ4OyBkYXRhICUwMngsJTAyeDsgaW5kZXggJWQ7IGtleWNvZGUgJWRcbiIsCisJCXJlbW90ZV9udW0sIGRhdGFbMV0sIGRhdGFbMl0sIGluZGV4LCBhdGlfcmVtb3RlX3RibFtpbmRleF0uY29kZSk7CisJCisJaWYgKGF0aV9yZW1vdGVfdGJsW2luZGV4XS5raW5kID09IEtJTkRfTElURVJBTCkgeworCQlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJCWlucHV0X2V2ZW50KGRldiwgYXRpX3JlbW90ZV90YmxbaW5kZXhdLnR5cGUsCisJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0uY29kZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS52YWx1ZSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJCisJCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKKwkJcmV0dXJuOworCX0KKwkKKwlpZiAoYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQgPT0gS0lORF9GSUxURVJFRCkgeworCQkvKiBGaWx0ZXIgZHVwbGljYXRlIGV2ZW50cyB3aGljaCBoYXBwZW4gInRvbyBjbG9zZSIgdG9nZXRoZXIuICovCisJCWlmICgoYXRpX3JlbW90ZS0+b2xkX2RhdGFbMF0gPT0gZGF0YVsxXSkgJiYgCisJIAkJKGF0aV9yZW1vdGUtPm9sZF9kYXRhWzFdID09IGRhdGFbMl0pICYmIAorCSAJCSgoYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMgKyBGSUxURVJfVElNRSkgPiBqaWZmaWVzKSkgeworCQkJYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50Kys7CisJCX0gCisJCWVsc2UgeworCQkJYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50ID0gMDsKKwkJfQorCQkKKwkJYXRpX3JlbW90ZS0+b2xkX2RhdGFbMF0gPSBkYXRhWzFdOworCQlhdGlfcmVtb3RlLT5vbGRfZGF0YVsxXSA9IGRhdGFbMl07CisJCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKKworCQlpZiAoKGF0aV9yZW1vdGUtPnJlcGVhdF9jb3VudCA+IDApCisJCSAgICAmJiAoYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50IDwgNSkpCisJCQlyZXR1cm47CisJCQorCisJCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBhdGlfcmVtb3RlX3RibFtpbmRleF0udHlwZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLCAxKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBhdGlfcmVtb3RlX3RibFtpbmRleF0udHlwZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLCAwKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCisJCXJldHVybjsKKwl9CQkJCisJCisJLyogCisJICogT3RoZXIgZXZlbnQga2luZHMgYXJlIGZyb20gdGhlIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkLCBhbmQgaGF2ZSBhbgorCSAqIGFjY2VsZXJhdGlvbiBmYWN0b3IgYXBwbGllZCB0byB0aGVtLiAgV2l0aG91dCB0aGlzIGFjY2VsZXJhdGlvbiwgdGhlCisJICogY29udHJvbCBwYWQgaXMgbW9zdGx5IHVudXNhYmxlLgorCSAqIAorCSAqIElmIGVsYXBzZWQgdGltZSBzaW5jZSBsYXN0IGV2ZW50IGlzID4gMS80IHNlY29uZCwgdXNlciAic3RvcHBlZCIsCisJICogc28gcmVzZXQgYWNjZWxlcmF0aW9uLiBPdGhlcndpc2UsIHVzZXIgaXMgcHJvYmFibHkgaG9sZGluZyB0aGUgY29udHJvbAorCSAqIHBhZCBkb3duLCBzbyB3ZSBpbmNyZWFzZSBhY2NlbGVyYXRpb24sIHJhbXBpbmcgdXAgb3ZlciB0d28gc2Vjb25kcyB0bworCSAqIGEgbWF4aW11bSBzcGVlZC4gIFRoZSBhY2NlbGVyYXRpb24gY3VydmUgaXMgI2RlZmluZWQgYWJvdmUuCisJICovCisJaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMpID4gKEhaID4+IDIpKSB7CisJCWFjYyA9IDE7CisJCWF0aV9yZW1vdGUtPmFjY19qaWZmaWVzID0gamlmZmllczsKKwl9CisJZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCAoSFogPj4gMykpICBhY2MgPSBhY2NlbFswXTsKKwllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IChIWiA+PiAyKSkgIGFjYyA9IGFjY2VsWzFdOworCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaID4+IDEpKSAgYWNjID0gYWNjZWxbMl07CisJZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCBIWiApICAgICAgICBhY2MgPSBhY2NlbFszXTsKKwllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IEhaKyhIWj4+MSkpIGFjYyA9IGFjY2VsWzRdOworCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaIDw8IDEpKSAgYWNjID0gYWNjZWxbNV07CisJZWxzZSBhY2MgPSBhY2NlbFs2XTsKKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwlzd2l0Y2ggKGF0aV9yZW1vdGVfdGJsW2luZGV4XS5raW5kKSB7CisJY2FzZSBLSU5EX0FDQ0VMOgorCQlpbnB1dF9ldmVudChkZXYsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS50eXBlLAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmNvZGUsCisJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0udmFsdWUgKiBhY2MpOworCQlicmVhazsKKwljYXNlIEtJTkRfTFU6CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgLWFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgLWFjYyk7CisJCWJyZWFrOworCWNhc2UgS0lORF9SVToKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCBhY2MpOworCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIC1hY2MpOworCQlicmVhazsKKwljYXNlIEtJTkRfTEQ6CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgLWFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgYWNjKTsKKwkJYnJlYWs7CisJY2FzZSBLSU5EX1JEOgorCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIGFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgYWNjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICJhdGlfcmVtb3RlIGtpbmQ9JWRcbiIsIAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQpOworCX0KKwlpbnB1dF9zeW5jKGRldik7CisKKwlhdGlfcmVtb3RlLT5vbGRfamlmZmllcyA9IGppZmZpZXM7CisJYXRpX3JlbW90ZS0+b2xkX2RhdGFbMF0gPSBkYXRhWzFdOworCWF0aV9yZW1vdGUtPm9sZF9kYXRhWzFdID0gZGF0YVsyXTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfaXJxX2luCisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaXJxX2luKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSB1cmItPmNvbnRleHQ7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlhdGlfcmVtb3RlX2lucHV0X3JlcG9ydCh1cmIsIHJlZ3MpOworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlkZXZfZGJnKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgIiVzOiB1cmIgZXJyb3Igc3RhdHVzLCB1bmxpbms/IFxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsJCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRldl9kYmcoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAiJXM6IE5vbnplcm8gdXJiIHN0YXR1cyAlZFxuIiwgCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisJCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2VycigmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIoKT0lZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfZGVsZXRlCisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZGVsZXRlKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQoreworCWlmICghYXRpX3JlbW90ZSkgcmV0dXJuOworCisJaWYgKGF0aV9yZW1vdGUtPmlycV91cmIpCisJCXVzYl9raWxsX3VyYihhdGlfcmVtb3RlLT5pcnFfdXJiKTsKKworCWlmIChhdGlfcmVtb3RlLT5vdXRfdXJiKQorCQl1c2Jfa2lsbF91cmIoYXRpX3JlbW90ZS0+b3V0X3VyYik7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmYXRpX3JlbW90ZS0+aWRldik7CisKKwlpZiAoYXRpX3JlbW90ZS0+aW5idWYpCisJCXVzYl9idWZmZXJfZnJlZShhdGlfcmVtb3RlLT51ZGV2LCBEQVRBX0JVRlNJWkUsIAorCQkJCWF0aV9yZW1vdGUtPmluYnVmLCBhdGlfcmVtb3RlLT5pbmJ1Zl9kbWEpOworCQkKKwlpZiAoYXRpX3JlbW90ZS0+b3V0YnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoYXRpX3JlbW90ZS0+dWRldiwgREFUQV9CVUZTSVpFLCAKKwkJCQlhdGlfcmVtb3RlLT5pbmJ1ZiwgYXRpX3JlbW90ZS0+b3V0YnVmX2RtYSk7CisJCisJaWYgKGF0aV9yZW1vdGUtPmlycV91cmIpCisJCXVzYl9mcmVlX3VyYihhdGlfcmVtb3RlLT5pcnFfdXJiKTsKKwkKKwlpZiAoYXRpX3JlbW90ZS0+b3V0X3VyYikKKwkJdXNiX2ZyZWVfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIpOworCisJa2ZyZWUoYXRpX3JlbW90ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaW5wdXRfaW5pdChzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2ID0gJihhdGlfcmVtb3RlLT5pZGV2KTsKKwlpbnQgaTsKKworCWlkZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKKwlpZGV2LT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9ICggQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgCisJCQkJCSAgQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpICk7CisJaWRldi0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7CisJZm9yIChpID0gMDsgYXRpX3JlbW90ZV90YmxbaV0ua2luZCAhPSBLSU5EX0VORDsgaSsrKQorCQlpZiAoYXRpX3JlbW90ZV90YmxbaV0udHlwZSA9PSBFVl9LRVkpCisJCQlzZXRfYml0KGF0aV9yZW1vdGVfdGJsW2ldLmNvZGUsIGlkZXYtPmtleWJpdCk7CisJCisJaWRldi0+cHJpdmF0ZSA9IGF0aV9yZW1vdGU7CisJaWRldi0+b3BlbiA9IGF0aV9yZW1vdGVfb3BlbjsKKwlpZGV2LT5jbG9zZSA9IGF0aV9yZW1vdGVfY2xvc2U7CisJCisJaWRldi0+bmFtZSA9IGF0aV9yZW1vdGUtPm5hbWU7CisJaWRldi0+cGh5cyA9IGF0aV9yZW1vdGUtPnBoeXM7CisJCisJaWRldi0+aWQuYnVzdHlwZSA9IEJVU19VU0I7CQkKKwlpZGV2LT5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShhdGlfcmVtb3RlLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlpZGV2LT5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoYXRpX3JlbW90ZS0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWlkZXYtPmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShhdGlfcmVtb3RlLT51ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7Cit9CisKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9pbml0aWFsaXplKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gYXRpX3JlbW90ZS0+dWRldjsKKwlpbnQgcGlwZSwgbWF4cDsKKwkJCisJaW5pdF93YWl0cXVldWVfaGVhZCgmYXRpX3JlbW90ZS0+d2FpdCk7CisKKwkvKiBTZXQgdXAgaXJxX3VyYiAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBhdGlfcmVtb3RlLT5lbmRwb2ludF9pbi0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCW1heHAgPSAobWF4cCA+IERBVEFfQlVGU0laRSkgPyBEQVRBX0JVRlNJWkUgOiBtYXhwOworCQorCXVzYl9maWxsX2ludF91cmIoYXRpX3JlbW90ZS0+aXJxX3VyYiwgdWRldiwgcGlwZSwgYXRpX3JlbW90ZS0+aW5idWYsIAorCQkJIG1heHAsIGF0aV9yZW1vdGVfaXJxX2luLCBhdGlfcmVtb3RlLCAKKwkJCSBhdGlfcmVtb3RlLT5lbmRwb2ludF9pbi0+YkludGVydmFsKTsKKwlhdGlfcmVtb3RlLT5pcnFfdXJiLT50cmFuc2Zlcl9kbWEgPSBhdGlfcmVtb3RlLT5pbmJ1Zl9kbWE7CisJYXRpX3JlbW90ZS0+aXJxX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCisJLyogU2V0IHVwIG91dF91cmIgKi8KKwlwaXBlID0gdXNiX3NuZGludHBpcGUodWRldiwgYXRpX3JlbW90ZS0+ZW5kcG9pbnRfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJbWF4cCA9IChtYXhwID4gREFUQV9CVUZTSVpFKSA/IERBVEFfQlVGU0laRSA6IG1heHA7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIsIHVkZXYsIHBpcGUsIGF0aV9yZW1vdGUtPm91dGJ1ZiwgCisJCQkgbWF4cCwgYXRpX3JlbW90ZV9pcnFfb3V0LCBhdGlfcmVtb3RlLCAKKwkJCSBhdGlfcmVtb3RlLT5lbmRwb2ludF9vdXQtPmJJbnRlcnZhbCk7CisJYXRpX3JlbW90ZS0+b3V0X3VyYi0+dHJhbnNmZXJfZG1hID0gYXRpX3JlbW90ZS0+b3V0YnVmX2RtYTsKKwlhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIHNlbmQgaW5pdGlhbGl6YXRpb24gc3RyaW5ncyAqLworCWlmICgoYXRpX3JlbW90ZV9zZW5kcGFja2V0KGF0aV9yZW1vdGUsIDB4ODAwNCwgaW5pdDEpKSB8fAorCSAgICAoYXRpX3JlbW90ZV9zZW5kcGFja2V0KGF0aV9yZW1vdGUsIDB4ODAwNywgaW5pdDIpKSkgeworCQlkZXZfZXJyKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgCisJCQkgIkluaXRpYWxpemluZyBhdGlfcmVtb3RlIGhhcmR3YXJlIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX3Byb2JlCisgKi8KK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2hvc3Q7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJY2hhciBwYXRoWzY0XTsKKworCS8qIEFsbG9jYXRlIGFuZCBjbGVhciBhbiBhdGlfcmVtb3RlIHN0cnVjdCAqLworCWlmICghKGF0aV9yZW1vdGUgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGF0aV9yZW1vdGUpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChhdGlfcmVtb3RlLCAweDAwLCBzaXplb2YgKHN0cnVjdCBhdGlfcmVtb3RlKSk7CisKKwlpZmFjZV9ob3N0ID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDIpIHsKKwkJZXJyKCIlczogVW5leHBlY3RlZCBkZXNjLmJOdW1FbmRwb2ludHNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJYXRpX3JlbW90ZS0+ZW5kcG9pbnRfaW4gPSAmKGlmYWNlX2hvc3QtPmVuZHBvaW50WzBdLmRlc2MpOworCWF0aV9yZW1vdGUtPmVuZHBvaW50X291dCA9ICYoaWZhY2VfaG9zdC0+ZW5kcG9pbnRbMV0uZGVzYyk7CisJYXRpX3JlbW90ZS0+dWRldiA9IHVkZXY7CisJYXRpX3JlbW90ZS0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJaWYgKCEoYXRpX3JlbW90ZS0+ZW5kcG9pbnRfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgeworCQllcnIoIiVzOiBVbmV4cGVjdGVkIGVuZHBvaW50X2luLT5iRW5kcG9pbnRBZGRyZXNzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoKGF0aV9yZW1vdGUtPmVuZHBvaW50X2luLT5ibUF0dHJpYnV0ZXMgJiAzKSAhPSAzKSB7CisJCWVycigiJXM6IFVuZXhwZWN0ZWQgZW5kcG9pbnRfaW4tPmJtQXR0cmlidXRlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPmVuZHBvaW50X2luLT53TWF4UGFja2V0U2l6ZSkgPT0gMCkgeworCQllcnIoIiVzOiBlbmRwb2ludF9pbiBtZXNzYWdlIHNpemU9PTA/IFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBVUkIgYnVmZmVycywgVVJCcyAqLworCWF0aV9yZW1vdGUtPmluYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBEQVRBX0JVRlNJWkUsIFNMQUJfQVRPTUlDLAorCQkJCQkgICAgICZhdGlfcmVtb3RlLT5pbmJ1Zl9kbWEpOworCWlmICghYXRpX3JlbW90ZS0+aW5idWYpCisJCWdvdG8gZXJyb3I7CisKKwlhdGlfcmVtb3RlLT5vdXRidWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIERBVEFfQlVGU0laRSwgU0xBQl9BVE9NSUMsCisJCQkJCSAgICAgICZhdGlfcmVtb3RlLT5vdXRidWZfZG1hKTsKKwlpZiAoIWF0aV9yZW1vdGUtPm91dGJ1ZikKKwkJZ290byBlcnJvcjsKKworCWF0aV9yZW1vdGUtPmlycV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghYXRpX3JlbW90ZS0+aXJxX3VyYikKKwkJZ290byBlcnJvcjsKKworCWF0aV9yZW1vdGUtPm91dF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghYXRpX3JlbW90ZS0+b3V0X3VyYikKKwkJZ290byBlcnJvcjsKKworCXVzYl9tYWtlX3BhdGgodWRldiwgcGF0aCwgTkFNRV9CVUZTSVpFKTsKKwlzcHJpbnRmKGF0aV9yZW1vdGUtPnBoeXMsICIlcy9pbnB1dCVkIiwgcGF0aCwgQVRJX0lOUFVUTlVNKTsKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJjYXQoYXRpX3JlbW90ZS0+bmFtZSwgdWRldi0+bWFudWZhY3R1cmVyKTsKKworCWlmICh1ZGV2LT5wcm9kdWN0KQorCQlzcHJpbnRmKGF0aV9yZW1vdGUtPm5hbWUsICIlcyAlcyIsIGF0aV9yZW1vdGUtPm5hbWUsIHVkZXYtPnByb2R1Y3QpOworCisJaWYgKCFzdHJsZW4oYXRpX3JlbW90ZS0+bmFtZSkpCisJCXNwcmludGYoYXRpX3JlbW90ZS0+bmFtZSwgRFJJVkVSX0RFU0MgIiglMDR4LCUwNHgpIiwKKwkJCWxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLCAKKwkJCWxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBEZXZpY2UgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gLSBmaWxscyBpbiBhdGlfcmVtb3RlLT5pZGV2IGZyb20gdWRldi4gKi8KKwlyZXR2YWwgPSBhdGlfcmVtb3RlX2luaXRpYWxpemUoYXRpX3JlbW90ZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKworCS8qIFNldCB1cCBhbmQgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlICovCisJYXRpX3JlbW90ZV9pbnB1dF9pbml0KGF0aV9yZW1vdGUpOworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmYXRpX3JlbW90ZS0+aWRldik7CisKKwlkZXZfaW5mbygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICJJbnB1dCByZWdpc3RlcmVkOiAlcyBvbiAlc1xuIiwgCisJCSBhdGlfcmVtb3RlLT5uYW1lLCBwYXRoKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBhdGlfcmVtb3RlKTsKKwkKK2Vycm9yOgorCWlmIChyZXR2YWwpCisJCWF0aV9yZW1vdGVfZGVsZXRlKGF0aV9yZW1vdGUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfZGlzY29ubmVjdAorICovCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZTsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWF0aV9yZW1vdGUgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWlmICghYXRpX3JlbW90ZSkgeworCQl3YXJuKCIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwkKKwlhdGlfcmVtb3RlX2RlbGV0ZShhdGlfcmVtb3RlKTsKKworCXVwKCZkaXNjb25uZWN0X3NlbSk7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX2luaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgYXRpX3JlbW90ZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwkKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBlcnJvciAjJWRcbiIsIHJlc3VsdCk7CisJZWxzZQorCQlpbmZvKCJSZWdpc3RlcmVkIFVTQiBkcml2ZXIgIiBEUklWRVJfREVTQyAiIHYuICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfZXhpdAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRpX3JlbW90ZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKK30KKworLyogCisgKgltb2R1bGUgc3BlY2lmaWNhdGlvbiAKKyAqLworCittb2R1bGVfaW5pdChhdGlfcmVtb3RlX2luaXQpOworbW9kdWxlX2V4aXQoYXRpX3JlbW90ZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9maXhwLWFyaXRoLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9maXhwLWFyaXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYTViOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2ZpeHAtYXJpdGguaApAQCAtMCwwICsxLDkwIEBACisjaWZuZGVmIF9GSVhQX0FSSVRIX0gKKyNkZWZpbmUgX0ZJWFBfQVJJVEhfSAorCisvKgorICogJCQKKyAqCisgKiBTaW1wbGlzdGljIGZpeGVkLXBvaW50IGFyaXRobWV0aWNzLgorICogSG1tLCBJJ20gcHJvYmFibHkgZHVwbGljYXRpbmcgc29tZSBjb2RlIDooCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGRlbmV1eEBpZnJhbmNlLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLy8gVGhlIHR5cGUgcmVwcmVzZW50aW5nIGZpeGVkLXBvaW50IHZhbHVlcwordHlwZWRlZiBzMTYgZml4cF90OworCisjZGVmaW5lIEZSQUNfTiA4CisjZGVmaW5lIEZSQUNfTUFTSyAoKDE8PEZSQUNfTiktMSkKKworLy8gTm90IHRvIGJlIHVzZWQgZGlyZWN0bHkuIFVzZSBmaXhwX3tjb3Msc2lufQorc3RhdGljIGZpeHBfdCBjb3NfdGFibGVbNDVdID0geworCTB4MDEwMCwJMHgwMEZGLAkweDAwRkYsCTB4MDBGRSwJMHgwMEZELAkweDAwRkMsCTB4MDBGQSwJMHgwMEY4LAorCTB4MDBGNiwJMHgwMEYzLAkweDAwRjAsCTB4MDBFRCwJMHgwMEU5LAkweDAwRTYsCTB4MDBFMiwJMHgwMERELAorCTB4MDBEOSwJMHgwMEQ0LAkweDAwQ0YsCTB4MDBDOSwJMHgwMEM0LAkweDAwQkUsCTB4MDBCOCwJMHgwMEIxLAorCTB4MDBBQiwJMHgwMEE0LAkweDAwOUQsCTB4MDA5NiwJMHgwMDhGLAkweDAwODcsCTB4MDA4MCwJMHgwMDc4LAorCTB4MDA3MCwJMHgwMDY4LAkweDAwNUYsCTB4MDA1NywJMHgwMDRGLAkweDAwNDYsCTB4MDAzRCwJMHgwMDM1LAorCTB4MDAyQywJMHgwMDIzLAkweDAwMUEsCTB4MDAxMSwJMHgwMDA4Cit9OworCisKKy8qIGE6IDEyMyAtPiAxMjMuMCAqLworc3RhdGljIGlubGluZSBmaXhwX3QgZml4cF9uZXcoczE2IGEpCit7CisJcmV0dXJuIGE8PEZSQUNfTjsKK30KKworLyogYTogMHhGRkZGIC0+IC0xLjAKKyAgICAgIDB4ODAwMCAtPiAxLjAKKyAgICAgIDB4MDAwMCAtPiAwLjAKKyovCitzdGF0aWMgaW5saW5lIGZpeHBfdCBmaXhwX25ldzE2KHMxNiBhKQoreworCXJldHVybiAoKHMzMilhKT4+KDE2LUZSQUNfTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZml4cF90IGZpeHBfY29zKHVuc2lnbmVkIGludCBkZWdyZWVzKQoreworCWludCBxdWFkcmFudCA9IChkZWdyZWVzIC8gOTApICYgMzsKKwl1bnNpZ25lZCBpbnQgaSA9IGRlZ3JlZXMgJSA5MDsKKworCWlmIChxdWFkcmFudCA9PSAxIHx8IHF1YWRyYW50ID09IDMpIHsKKwkJaSA9IDg5IC0gaTsKKwl9CisKKwlpID4+PSAxOworCisJcmV0dXJuIChxdWFkcmFudCA9PSAxIHx8IHF1YWRyYW50ID09IDIpPyAtY29zX3RhYmxlW2ldIDogY29zX3RhYmxlW2ldOworfQorCitzdGF0aWMgaW5saW5lIGZpeHBfdCBmaXhwX3Npbih1bnNpZ25lZCBpbnQgZGVncmVlcykKK3sKKwlyZXR1cm4gLWZpeHBfY29zKGRlZ3JlZXMgKyA5MCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZml4cF90IGZpeHBfbXVsdChmaXhwX3QgYSwgZml4cF90IGIpCit7CisJcmV0dXJuICgoczMyKShhKmIpKT4+RlJBQ19OOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjJjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCkBAIC0wLDAgKzEsMTg2NCBAQAorLyoKKyAqICBVU0IgSElEIHN1cHBvcnQgZm9yIExpbnV4CisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI3VuZGVmIERFQlVHCisjdW5kZWYgREVCVUdfREFUQQorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlIDxsaW51eC9oaWRkZXYuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4wMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQW5kcmVhcyBHYWwsIFZvanRlY2ggUGF2bGlrIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhJRCBjb3JlIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKworc3RhdGljIGNoYXIgKmhpZF90eXBlc1tdID0geyJEZXZpY2UiLCAiUG9pbnRlciIsICJNb3VzZSIsICJEZXZpY2UiLCAiSm95c3RpY2siLAorCQkJCSJHYW1lcGFkIiwgIktleWJvYXJkIiwgIktleXBhZCIsICJNdWx0aS1BeGlzIENvbnRyb2xsZXIifTsKKy8qCisgKiBNb2R1bGUgcGFyYW1ldGVycy4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWw7Cittb2R1bGVfcGFyYW1fbmFtZWQobW91c2Vwb2xsLCBoaWRfbW91c2Vwb2xsX2ludGVydmFsLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobW91c2Vwb2xsLCAiUG9sbGluZyBpbnRlcnZhbCBvZiBtaWNlIik7CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyByZXBvcnQgZm9yIGEgZGV2aWNlLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyB0eXBlOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisKKwlpZiAocmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXSkKKwkJcmV0dXJuIHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtpZF07CisKKwlpZiAoIShyZXBvcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3JlcG9ydCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHJlcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfcmVwb3J0KSk7CisKKwlpZiAoaWQgIT0gMCkKKwkJcmVwb3J0X2VudW0tPm51bWJlcmVkID0gMTsKKworCXJlcG9ydC0+aWQgPSBpZDsKKwlyZXBvcnQtPnR5cGUgPSB0eXBlOworCXJlcG9ydC0+c2l6ZSA9IDA7CisJcmVwb3J0LT5kZXZpY2UgPSBkZXZpY2U7CisJcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXSA9IHJlcG9ydDsKKworCWxpc3RfYWRkX3RhaWwoJnJlcG9ydC0+bGlzdCwgJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCk7CisKKwlyZXR1cm4gcmVwb3J0OworfQorCisvKgorICogUmVnaXN0ZXIgYSBuZXcgZmllbGQgZm9yIHRoaXMgcmVwb3J0LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZpZWxkICpoaWRfcmVnaXN0ZXJfZmllbGQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgdXNhZ2VzLCB1bnNpZ25lZCB2YWx1ZXMpCit7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisKKwlpZiAocmVwb3J0LT5tYXhmaWVsZCA9PSBISURfTUFYX0ZJRUxEUykgeworCQlkYmcoInRvbyBtYW55IGZpZWxkcyBpbiByZXBvcnQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCEoZmllbGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArIHVzYWdlcyAqIHNpemVvZihzdHJ1Y3QgaGlkX3VzYWdlKQorCQkrIHZhbHVlcyAqIHNpemVvZih1bnNpZ25lZCksIEdGUF9LRVJORUwpKSkgcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoZmllbGQsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArIHVzYWdlcyAqIHNpemVvZihzdHJ1Y3QgaGlkX3VzYWdlKQorCQkrIHZhbHVlcyAqIHNpemVvZih1bnNpZ25lZCkpOworCisJZmllbGQtPmluZGV4ID0gcmVwb3J0LT5tYXhmaWVsZCsrOworCXJlcG9ydC0+ZmllbGRbZmllbGQtPmluZGV4XSA9IGZpZWxkOworCWZpZWxkLT51c2FnZSA9IChzdHJ1Y3QgaGlkX3VzYWdlICopKGZpZWxkICsgMSk7CisJZmllbGQtPnZhbHVlID0gKHVuc2lnbmVkICopKGZpZWxkLT51c2FnZSArIHVzYWdlcyk7CisJZmllbGQtPnJlcG9ydCA9IHJlcG9ydDsKKworCXJldHVybiBmaWVsZDsKK30KKworLyoKKyAqIE9wZW4gYSBjb2xsZWN0aW9uLiBUaGUgdHlwZS91c2FnZSBpcyBwdXNoZWQgb24gdGhlIHN0YWNrLgorICovCisKK3N0YXRpYyBpbnQgb3Blbl9jb2xsZWN0aW9uKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHR5cGUpCit7CisJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2xsZWN0aW9uOworCXVuc2lnbmVkIHVzYWdlOworCisJdXNhZ2UgPSBwYXJzZXItPmxvY2FsLnVzYWdlWzBdOworCisJaWYgKHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgPT0gSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRSkgeworCQlkYmcoImNvbGxlY3Rpb24gc3RhY2sgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwYXJzZXItPmRldmljZS0+bWF4Y29sbGVjdGlvbiA9PSBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKSB7CisJCWNvbGxlY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplICogMiwgR0ZQX0tFUk5FTCk7CisJCWlmIChjb2xsZWN0aW9uID09IE5VTEwpIHsKKwkJCWRiZygiZmFpbGVkIHRvIHJlYWxsb2NhdGUgY29sbGVjdGlvbiBhcnJheSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW1lbWNweShjb2xsZWN0aW9uLCBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiwKKwkJCXNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUpOworCQltZW1zZXQoY29sbGVjdGlvbiArIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUsIDAsCisJCQlzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCisJCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKTsKKwkJa2ZyZWUocGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb24pOworCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgKj0gMjsKKwl9CisKKwlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cisrXSA9CisJCXBhcnNlci0+ZGV2aWNlLT5tYXhjb2xsZWN0aW9uOworCisJY29sbGVjdGlvbiA9IHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uICsKKwkJcGFyc2VyLT5kZXZpY2UtPm1heGNvbGxlY3Rpb24rKzsKKwljb2xsZWN0aW9uLT50eXBlID0gdHlwZTsKKwljb2xsZWN0aW9uLT51c2FnZSA9IHVzYWdlOworCWNvbGxlY3Rpb24tPmxldmVsID0gcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDE7CisKKwlpZiAodHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTikKKwkJcGFyc2VyLT5kZXZpY2UtPm1heGFwcGxpY2F0aW9uKys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsb3NlIGEgY29sbGVjdGlvbi4KKyAqLworCitzdGF0aWMgaW50IGNsb3NlX2NvbGxlY3Rpb24oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpZiAoIXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIpIHsKKwkJZGJnKCJjb2xsZWN0aW9uIHN0YWNrIHVuZGVyZmxvdyIpOworCQlyZXR1cm4gLTE7CisJfQorCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHItLTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsaW1iIHVwIHRoZSBzdGFjaywgc2VhcmNoIGZvciB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gdHlwZQorICogYW5kIHJldHVybiB0aGUgdXNhZ2UuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGhpZF9sb29rdXBfY29sbGVjdGlvbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB0eXBlKQoreworCWludCBuOworCWZvciAobiA9IHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgLSAxOyBuID49IDA7IG4tLSkKKwkJaWYgKHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXV0udHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXV0udXNhZ2U7CisJcmV0dXJuIDA7IC8qIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIHVzYWdlIHR5cGUgKi8KK30KKworLyoKKyAqIEFkZCBhIHVzYWdlIHRvIHRoZSB0ZW1wb3JhcnkgcGFyc2VyIHRhYmxlLgorICovCisKK3N0YXRpYyBpbnQgaGlkX2FkZF91c2FnZShzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB1c2FnZSkKK3sKKwlpZiAocGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCA+PSBISURfTUFYX1VTQUdFUykgeworCQlkYmcoInVzYWdlIGluZGV4IGV4Y2VlZGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJcGFyc2VyLT5sb2NhbC51c2FnZVtwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4XSA9IHVzYWdlOworCXBhcnNlci0+bG9jYWwuY29sbGVjdGlvbl9pbmRleFtwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4XSA9CisJCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgPworCQlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDFdIDogMDsKKwlwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4Kys7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCisgKi8KKworc3RhdGljIGludCBoaWRfYWRkX2ZpZWxkKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHJlcG9ydF90eXBlLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWludCB1c2FnZXM7CisJdW5zaWduZWQgb2Zmc2V0OworCWludCBpOworCisJaWYgKCEocmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChwYXJzZXItPmRldmljZSwgcmVwb3J0X3R5cGUsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCkpKSB7CisJCWRiZygiaGlkX3JlZ2lzdGVyX3JlcG9ydCBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0pIHsKKwkJZGJnKCJsb2dpY2FsIHJhbmdlIGludmFsaWQgJWQgJWQiLCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0sIHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvZmZzZXQgPSByZXBvcnQtPnNpemU7CisJcmVwb3J0LT5zaXplICs9IHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplICogcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50OworCisJaWYgKCFwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4KSAvKiBJZ25vcmUgcGFkZGluZyBmaWVsZHMgKi8KKwkJcmV0dXJuIDA7IAorCisJdXNhZ2VzID0gbWF4X3QoaW50LCBwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4LCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpOworCisJaWYgKChmaWVsZCA9IGhpZF9yZWdpc3Rlcl9maWVsZChyZXBvcnQsIHVzYWdlcywgcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50KSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlmaWVsZC0+cGh5c2ljYWwgPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9QSFlTSUNBTCk7CisJZmllbGQtPmxvZ2ljYWwgPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9MT0dJQ0FMKTsKKwlmaWVsZC0+YXBwbGljYXRpb24gPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNhZ2VzOyBpKyspIHsKKwkJaW50IGogPSBpOworCQkvKiBEdXBsaWNhdGUgdGhlIGxhc3QgdXNhZ2Ugd2UgcGFyc2VkIGlmIHdlIGhhdmUgZXhjZXNzIHZhbHVlcyAqLworCQlpZiAoaSA+PSBwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4KQorCQkJaiA9IHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXggLSAxOworCQlmaWVsZC0+dXNhZ2VbaV0uaGlkID0gcGFyc2VyLT5sb2NhbC51c2FnZVtqXTsKKwkJZmllbGQtPnVzYWdlW2ldLmNvbGxlY3Rpb25faW5kZXggPQorCQkJcGFyc2VyLT5sb2NhbC5jb2xsZWN0aW9uX2luZGV4W2pdOworCX0KKworCWZpZWxkLT5tYXh1c2FnZSA9IHVzYWdlczsKKwlmaWVsZC0+ZmxhZ3MgPSBmbGFnczsKKwlmaWVsZC0+cmVwb3J0X29mZnNldCA9IG9mZnNldDsKKwlmaWVsZC0+cmVwb3J0X3R5cGUgPSByZXBvcnRfdHlwZTsKKwlmaWVsZC0+cmVwb3J0X3NpemUgPSBwYXJzZXItPmdsb2JhbC5yZXBvcnRfc2l6ZTsKKwlmaWVsZC0+cmVwb3J0X2NvdW50ID0gcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50OworCWZpZWxkLT5sb2dpY2FsX21pbmltdW0gPSBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW07CisJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bTsKKwlmaWVsZC0+cGh5c2ljYWxfbWluaW11bSA9IHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW07CisJZmllbGQtPnBoeXNpY2FsX21heGltdW0gPSBwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtOworCWZpZWxkLT51bml0X2V4cG9uZW50ID0gcGFyc2VyLT5nbG9iYWwudW5pdF9leHBvbmVudDsKKwlmaWVsZC0+dW5pdCA9IHBhcnNlci0+Z2xvYmFsLnVuaXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgZGF0YSB2YWx1ZSBmcm9tIGl0ZW0uCisgKi8KKworc3RhdGljIF9faW5saW5lX18gX191MzIgaXRlbV91ZGF0YShzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJc3dpdGNoIChpdGVtLT5zaXplKSB7CisJCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEudTg7CisJCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEudTE2OworCQljYXNlIDQ6IHJldHVybiBpdGVtLT5kYXRhLnUzMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fczMyIGl0ZW1fc2RhdGEoc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCQljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnM4OworCQljYXNlIDI6IHJldHVybiBpdGVtLT5kYXRhLnMxNjsKKwkJY2FzZSA0OiByZXR1cm4gaXRlbS0+ZGF0YS5zMzI7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyBhIGdsb2JhbCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9nbG9iYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6CisKKwkJCWlmIChwYXJzZXItPmdsb2JhbF9zdGFja19wdHIgPT0gSElEX0dMT0JBTF9TVEFDS19TSVpFKSB7CisJCQkJZGJnKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayBvdmVyZmxvdyIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJbWVtY3B5KHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKyssCisJCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QT1A6CisKKwkJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7CisJCQkJZGJnKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayB1bmRlcmZsb3ciKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCW1lbWNweSgmcGFyc2VyLT5nbG9iYWwsIHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsCisJCQkJc2l6ZW9mKHN0cnVjdCBoaWRfZ2xvYmFsKSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVVNBR0VfUEFHRToKKwkJCXBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUlOSU1VTToKKwkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NQVhJTVVNOgorCQkJaWYgKHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA8IDApCisJCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCWVsc2UKKwkJCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU06CisJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QSFlTSUNBTF9NQVhJTVVNOgorCQkJaWYgKHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW0gPCAwKQorCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQkJZWxzZQorCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQ6CisJCQlwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50ID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VTklUOgorCQkJcGFyc2VyLT5nbG9iYWwudW5pdCA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX1NJWkU6CisJCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplID0gaXRlbV91ZGF0YShpdGVtKSkgPiAzMikgeworCQkJCWRiZygiaW52YWxpZCByZXBvcnRfc2l6ZSAlZCIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0NPVU5UOgorCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQgPSBpdGVtX3VkYXRhKGl0ZW0pKSA+IEhJRF9NQVhfVVNBR0VTKSB7CisJCQkJZGJnKCJpbnZhbGlkIHJlcG9ydF9jb3VudCAlZCIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRDoKKwkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X2lkID0gaXRlbV91ZGF0YShpdGVtKSkgPT0gMCkgeworCQkJCWRiZygicmVwb3J0X2lkIDAgaXMgaW52YWxpZCIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJldHVybiAwOworCisJCWRlZmF1bHQ6CisJCQlkYmcoInVua25vd24gZ2xvYmFsIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwkJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgbG9jYWwgaXRlbS4KKyAqLworCitzdGF0aWMgaW50IGhpZF9wYXJzZXJfbG9jYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCV9fdTMyIGRhdGE7CisJdW5zaWduZWQgbjsKKworCWlmIChpdGVtLT5zaXplID09IDApIHsKKwkJZGJnKCJpdGVtIGRhdGEgZXhwZWN0ZWQgZm9yIGxvY2FsIGl0ZW0iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSBpdGVtX3VkYXRhKGl0ZW0pOworCisJc3dpdGNoIChpdGVtLT50YWcpIHsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVI6CisKKwkJCWlmIChkYXRhKSB7CisJCQkJLyoKKwkJCQkgKiBXZSB0cmVhdCBpdGVtcyBiZWZvcmUgdGhlIGZpcnN0IGRlbGltaXRlcgorCQkJCSAqIGFzIGdsb2JhbCB0byBhbGwgdXNhZ2Ugc2V0cyAoYnJhbmNoIDApLgorCQkJCSAqIEluIHRoZSBtb21lbnQgd2UgcHJvY2VzcyBvbmx5IHRoZXNlIGdsb2JhbAorCQkJCSAqIGl0ZW1zIGFuZCB0aGUgZmlyc3QgZGVsaW1pdGVyIHNldC4KKwkJCQkgKi8KKwkJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggIT0gMCkgeworCQkJCQlkYmcoIm5lc3RlZCBkZWxpbWl0ZXJzIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgrKzsKKwkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2grKzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoIDwgMSkgeworCQkJCQlkYmcoImJvZ3VzIGNsb3NlIGRlbGltaXRlciIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoLS07CisJCQl9CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRToKKworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQkJcmV0dXJuIGhpZF9hZGRfdXNhZ2UocGFyc2VyLCBkYXRhKTsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRV9NSU5JTVVNOgorCisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJCWRiZygiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZCIpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCisJCQlwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW0gPSBkYXRhOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUFYSU1VTToKKworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQkJZm9yIChuID0gcGFyc2VyLT5sb2NhbC51c2FnZV9taW5pbXVtOyBuIDw9IGRhdGE7IG4rKykKKwkJCQlpZiAoaGlkX2FkZF91c2FnZShwYXJzZXIsIG4pKSB7CisJCQkJCWRiZygiaGlkX2FkZF91c2FnZSBmYWlsZWRcbiIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJZGVmYXVsdDoKKworCQkJZGJnKCJ1bmtub3duIGxvY2FsIGl0ZW0gdGFnIDB4JXgiLCBpdGVtLT50YWcpOworCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyBhIG1haW4gaXRlbS4KKyAqLworCitzdGF0aWMgaW50IGhpZF9wYXJzZXJfbWFpbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJX191MzIgZGF0YTsKKwlpbnQgcmV0OworCisJZGF0YSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisKKwlzd2l0Y2ggKGl0ZW0tPnRhZykgeworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0JFR0lOX0NPTExFQ1RJT046CisJCQlyZXQgPSBvcGVuX2NvbGxlY3Rpb24ocGFyc2VyLCBkYXRhICYgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19FTkRfQ09MTEVDVElPTjoKKwkJCXJldCA9IGNsb3NlX2NvbGxlY3Rpb24ocGFyc2VyKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0lOUFVUOgorCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9JTlBVVF9SRVBPUlQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfT1VUUFVUOgorCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9PVVRQVVRfUkVQT1JULCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0ZFQVRVUkU6CisJCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0ZFQVRVUkVfUkVQT1JULCBkYXRhKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCJ1bmtub3duIG1haW4gaXRlbSB0YWcgMHgleCIsIGl0ZW0tPnRhZyk7CisJCQlyZXQgPSAwOworCX0KKworCW1lbXNldCgmcGFyc2VyLT5sb2NhbCwgMCwgc2l6ZW9mKHBhcnNlci0+bG9jYWwpKTsJLyogUmVzZXQgdGhlIGxvY2FsIHBhcnNlciBlbnZpcm9ubWVudCAqLworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2Nlc3MgYSByZXNlcnZlZCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9yZXNlcnZlZChzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJZGJnKCJyZXNlcnZlZCBpdGVtIHR5cGUsIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgYSByZXBvcnQgYW5kIGFsbCByZWdpc3RlcmVkIGZpZWxkcy4gVGhlIGZpZWxkLT51c2FnZSBhbmQKKyAqIGZpZWxkLT52YWx1ZSB0YWJsZSdzIGFyZSBhbGxvY2F0ZWQgYmVoaW5kIHRoZSBmaWVsZCwgc28gd2UgbmVlZAorICogb25seSB0byBmcmVlKGZpZWxkKSBpdHNlbGYuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2ZyZWVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpCit7CisJdW5zaWduZWQgbjsKKworCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCisJCWtmcmVlKHJlcG9ydC0+ZmllbGRbbl0pOworCWtmcmVlKHJlcG9ydCk7Cit9CisKKy8qCisgKiBGcmVlIGEgZGV2aWNlIHN0cnVjdHVyZSwgYWxsIHJlcG9ydHMsIGFuZCBhbGwgZmllbGRzLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9mcmVlX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlKQoreworCXVuc2lnbmVkIGksajsKKworCWhpZF9mZl9leGl0KGRldmljZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKSB7CisJCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IDI1NjsgaisrKSB7CisJCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2pdOworCQkJaWYgKHJlcG9ydCkKKwkJCQloaWRfZnJlZV9yZXBvcnQocmVwb3J0KTsKKwkJfQorCX0KKworCWlmIChkZXZpY2UtPnJkZXNjKQorCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKKwlrZnJlZShkZXZpY2UpOworfQorCisvKgorICogRmV0Y2ggYSByZXBvcnQgZGVzY3JpcHRpb24gaXRlbSBmcm9tIHRoZSBkYXRhIHN0cmVhbS4gV2Ugc3VwcG9ydCBsb25nCisgKiBpdGVtcywgdGhvdWdoIHRoZXkgYXJlIG5vdCB1c2VkIHlldC4KKyAqLworCitzdGF0aWMgdTggKmZldGNoX2l0ZW0oX191OCAqc3RhcnQsIF9fdTggKmVuZCwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXU4IGI7CisKKwlpZiAoKGVuZCAtIHN0YXJ0KSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWIgPSAqc3RhcnQrKzsKKworCWl0ZW0tPnR5cGUgPSAoYiA+PiAyKSAmIDM7CisJaXRlbS0+dGFnICA9IChiID4+IDQpICYgMTU7CisKKwlpZiAoaXRlbS0+dGFnID09IEhJRF9JVEVNX1RBR19MT05HKSB7CisKKwkJaXRlbS0+Zm9ybWF0ID0gSElEX0lURU1fRk9STUFUX0xPTkc7CisKKwkJaWYgKChlbmQgLSBzdGFydCkgPCAyKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaXRlbS0+c2l6ZSA9ICpzdGFydCsrOworCQlpdGVtLT50YWcgID0gKnN0YXJ0Kys7CisKKwkJaWYgKChlbmQgLSBzdGFydCkgPCBpdGVtLT5zaXplKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaXRlbS0+ZGF0YS5sb25nZGF0YSA9IHN0YXJ0OworCQlzdGFydCArPSBpdGVtLT5zaXplOworCQlyZXR1cm4gc3RhcnQ7CisJfQorCisJaXRlbS0+Zm9ybWF0ID0gSElEX0lURU1fRk9STUFUX1NIT1JUOworCWl0ZW0tPnNpemUgPSBiICYgMzsKKworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCisJCWNhc2UgMDoKKwkJCXJldHVybiBzdGFydDsKKworCQljYXNlIDE6CisJCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDEpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpdGVtLT5kYXRhLnU4ID0gKnN0YXJ0Kys7CisJCQlyZXR1cm4gc3RhcnQ7CisKKwkJY2FzZSAyOgorCQkJaWYgKChlbmQgLSBzdGFydCkgPCAyKQorCQkJCXJldHVybiBOVUxMOworCQkJaXRlbS0+ZGF0YS51MTYgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYqKXN0YXJ0KSk7CisJCQlzdGFydCA9IChfX3U4ICopKChfX2xlMTYgKilzdGFydCArIDEpOworCQkJcmV0dXJuIHN0YXJ0OworCisJCWNhc2UgMzoKKwkJCWl0ZW0tPnNpemUrKzsKKwkJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWl0ZW0tPmRhdGEudTMyID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyKilzdGFydCkpOworCQkJc3RhcnQgPSAoX191OCAqKSgoX19sZTMyICopc3RhcnQgKyAxKTsKKwkJCXJldHVybiBzdGFydDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFBhcnNlIGEgcmVwb3J0IGRlc2NyaXB0aW9uIGludG8gYSBoaWRfZGV2aWNlIHN0cnVjdHVyZS4gUmVwb3J0cyBhcmUKKyAqIGVudW1lcmF0ZWQsIGZpZWxkcyBhcmUgYXR0YWNoZWQgdG8gdGhlc2UgcmVwb3J0cy4KKyAqLworCitzdGF0aWMgc3RydWN0IGhpZF9kZXZpY2UgKmhpZF9wYXJzZV9yZXBvcnQoX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyOworCXN0cnVjdCBoaWRfaXRlbSBpdGVtOworCV9fdTggKmVuZDsKKwl1bnNpZ25lZCBpOworCXN0YXRpYyBpbnQgKCpkaXNwYXRjaF90eXBlW10pKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsCisJCQkJICAgICAgc3RydWN0IGhpZF9pdGVtICppdGVtKSA9IHsKKwkJaGlkX3BhcnNlcl9tYWluLAorCQloaWRfcGFyc2VyX2dsb2JhbCwKKwkJaGlkX3BhcnNlcl9sb2NhbCwKKwkJaGlkX3BhcnNlcl9yZXNlcnZlZAorCX07CisKKwlpZiAoIShkZXZpY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2RldmljZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSk7CisKKwlpZiAoIShkZXZpY2UtPmNvbGxlY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCQkgICBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlMsIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0KGRldmljZS0+Y29sbGVjdGlvbiwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCQlISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlMpOworCWRldmljZS0+Y29sbGVjdGlvbl9zaXplID0gSElEX0RFRkFVTFRfTlVNX0NPTExFQ1RJT05TOworCisJZm9yIChpID0gMDsgaSA8IEhJRF9SRVBPUlRfVFlQRVM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJmRldmljZS0+cmVwb3J0X2VudW1baV0ucmVwb3J0X2xpc3QpOworCisJaWYgKCEoZGV2aWNlLT5yZGVzYyA9IChfX3U4ICopa21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpIHsKKwkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbWNweShkZXZpY2UtPnJkZXNjLCBzdGFydCwgc2l6ZSk7CisJZGV2aWNlLT5yc2l6ZSA9IHNpemU7CisKKwlpZiAoIShwYXJzZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlciksIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKKwkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKKwkJa2ZyZWUoZGV2aWNlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldChwYXJzZXIsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlcikpOworCXBhcnNlci0+ZGV2aWNlID0gZGV2aWNlOworCisJZW5kID0gc3RhcnQgKyBzaXplOworCXdoaWxlICgoc3RhcnQgPSBmZXRjaF9pdGVtKHN0YXJ0LCBlbmQsICZpdGVtKSkgIT0gTlVMTCkgeworCisJCWlmIChpdGVtLmZvcm1hdCAhPSBISURfSVRFTV9GT1JNQVRfU0hPUlQpIHsKKwkJCWRiZygidW5leHBlY3RlZCBsb25nIGdsb2JhbCBpdGVtIik7CisJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQlrZnJlZShwYXJzZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoZGlzcGF0Y2hfdHlwZVtpdGVtLnR5cGVdKHBhcnNlciwgJml0ZW0pKSB7CisJCQlkYmcoIml0ZW0gJXUgJXUgJXUgJXUgcGFyc2luZyBmYWlsZWRcbiIsCisJCQkJaXRlbS5mb3JtYXQsICh1bnNpZ25lZClpdGVtLnNpemUsICh1bnNpZ25lZClpdGVtLnR5cGUsICh1bnNpZ25lZClpdGVtLnRhZyk7CisJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQlrZnJlZShwYXJzZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoc3RhcnQgPT0gZW5kKSB7CisJCQlpZiAocGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cikgeworCQkJCWRiZygidW5iYWxhbmNlZCBjb2xsZWN0aW9uIGF0IGVuZCBvZiByZXBvcnQgZGVzY3JpcHRpb24iKTsKKwkJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOworCQkJCWtmcmVlKHBhcnNlcik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgpIHsKKwkJCQlkYmcoInVuYmFsYW5jZWQgZGVsaW1pdGVyIGF0IGVuZCBvZiByZXBvcnQgZGVzY3JpcHRpb24iKTsKKwkJCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOworCQkJCWtmcmVlKHBhcnNlcik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlrZnJlZShwYXJzZXIpOworCQkJcmV0dXJuIGRldmljZTsKKwkJfQorCX0KKworCWRiZygiaXRlbSBmZXRjaGluZyBmYWlsZWQgYXQgb2Zmc2V0ICVkXG4iLCAoaW50KShlbmQgLSBzdGFydCkpOworCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJa2ZyZWUocGFyc2VyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIENvbnZlcnQgYSBzaWduZWQgbi1iaXQgaW50ZWdlciB0byBzaWduZWQgMzItYml0IGludGVnZXIuIENvbW1vbgorICogY2FzZXMgYXJlIGRvbmUgdGhyb3VnaCB0aGUgY29tcGlsZXIsIHRoZSBzY3Jld2VkIHRoaW5ncyBoYXMgdG8gYmUKKyAqIGRvbmUgYnkgaGFuZC4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3MzMiBzbnRvMzIoX191MzIgdmFsdWUsIHVuc2lnbmVkIG4pCit7CisJc3dpdGNoIChuKSB7CisJCWNhc2UgODogIHJldHVybiAoKF9fczgpdmFsdWUpOworCQljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7CisJCWNhc2UgMzI6IHJldHVybiAoKF9fczMyKXZhbHVlKTsKKwl9CisJcmV0dXJuIHZhbHVlICYgKDEgPDwgKG4gLSAxKSkgPyB2YWx1ZSB8ICgtMSA8PCBuKSA6IHZhbHVlOworfQorCisvKgorICogQ29udmVydCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB0byBhIHNpZ25lZCBuLWJpdCBpbnRlZ2VyLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIHMzMnRvbihfX3MzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3sKKwlfX3MzMiBhID0gdmFsdWUgPj4gKG4gLSAxKTsKKwlpZiAoYSAmJiBhICE9IC0xKQorCQlyZXR1cm4gdmFsdWUgPCAwID8gMSA8PCAobiAtIDEpIDogKDEgPDwgKG4gLSAxKSkgLSAxOworCXJldHVybiB2YWx1ZSAmICgoMSA8PCBuKSAtIDEpOworfQorCisvKgorICogRXh0cmFjdC9pbXBsZW1lbnQgYSBkYXRhIGZpZWxkIGZyb20vdG8gYSByZXBvcnQuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gX191MzIgZXh0cmFjdChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbikKK3sKKwlyZXBvcnQgKz0gKG9mZnNldCA+PiA1KSA8PCAyOyBvZmZzZXQgJj0gMzE7CisJcmV0dXJuIChsZTY0X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlNjQqKXJlcG9ydCkpID4+IG9mZnNldCkgJiAoKDEgPDwgbikgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpbXBsZW1lbnQoX191OCAqcmVwb3J0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4sIF9fdTMyIHZhbHVlKQoreworCXJlcG9ydCArPSAob2Zmc2V0ID4+IDUpIDw8IDI7IG9mZnNldCAmPSAzMTsKKwlwdXRfdW5hbGlnbmVkKChnZXRfdW5hbGlnbmVkKChfX2xlNjQqKXJlcG9ydCkKKwkJJiBjcHVfdG9fbGU2NCh+KCgoKF9fdTY0KSAxIDw8IG4pIC0gMSkgPDwgb2Zmc2V0KSkpCisJCXwgY3B1X3RvX2xlNjQoKF9fdTY0KXZhbHVlIDw8IG9mZnNldCksIChfX2xlNjQqKXJlcG9ydCk7Cit9CisKKy8qCisgKiBTZWFyY2ggYW4gYXJyYXkgZm9yIGEgdmFsdWUuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IHNlYXJjaChfX3MzMiAqYXJyYXksIF9fczMyIHZhbHVlLCB1bnNpZ25lZCBuKQoreworCXdoaWxlIChuLS0pIHsKKwkJaWYgKCphcnJheSsrID09IHZhbHVlKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgaGlkX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaGlkX2R1bXBfaW5wdXQodXNhZ2UsIHZhbHVlKTsKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCWhpZGlucHV0X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUsIHJlZ3MpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlLCByZWdzKTsKK30KKworLyoKKyAqIEFuYWx5c2UgYSByZWNlaXZlZCBmaWVsZCwgYW5kIGZldGNoIHRoZSBkYXRhIGZyb20gaXQuIFRoZSBmaWVsZAorICogY29udGVudCBpcyBzdG9yZWQgZm9yIG5leHQgcmVwb3J0IHByb2Nlc3NpbmcgKHdlIGRvIGRpZmZlcmVudGlhbAorICogcmVwb3J0aW5nIHRvIHRoZSBsYXllcikuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2lucHV0X2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBuOworCXVuc2lnbmVkIGNvdW50ID0gZmllbGQtPnJlcG9ydF9jb3VudDsKKwl1bnNpZ25lZCBvZmZzZXQgPSBmaWVsZC0+cmVwb3J0X29mZnNldDsKKwl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOworCV9fczMyIG1pbiA9IGZpZWxkLT5sb2dpY2FsX21pbmltdW07CisJX19zMzIgbWF4ID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwlfX3MzMiAqdmFsdWU7CisKKwlpZiAoISh2YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKF9fczMyKSAqIGNvdW50LCBHRlBfQVRPTUlDKSkpCisJCXJldHVybjsKKworCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7CisKKwkJCXZhbHVlW25dID0gbWluIDwgMCA/IHNudG8zMihleHRyYWN0KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplKSwgc2l6ZSkgOgorCQkJCQkJICAgIGV4dHJhY3QoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUpOworCisJCQlpZiAoIShmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1ZBUklBQkxFKSAvKiBJZ25vcmUgcmVwb3J0IGlmIEVycm9yUm9sbE92ZXIgKi8KKwkJCSAgICAmJiB2YWx1ZVtuXSA+PSBtaW4gJiYgdmFsdWVbbl0gPD0gbWF4CisJCQkgICAgJiYgZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXS5oaWQgPT0gSElEX1VQX0tFWUJPQVJEICsgMSkKKwkJCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKworCQlpZiAoSElEX01BSU5fSVRFTV9WQVJJQUJMRSAmIGZpZWxkLT5mbGFncykgeworCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVtuXSwgdmFsdWVbbl0sIHJlZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZmllbGQtPnZhbHVlW25dID49IG1pbiAmJiBmaWVsZC0+dmFsdWVbbl0gPD0gbWF4CisJCQkmJiBmaWVsZC0+dXNhZ2VbZmllbGQtPnZhbHVlW25dIC0gbWluXS5oaWQKKwkJCSYmIHNlYXJjaCh2YWx1ZSwgZmllbGQtPnZhbHVlW25dLCBjb3VudCkpCisJCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVtmaWVsZC0+dmFsdWVbbl0gLSBtaW5dLCAwLCByZWdzKTsKKworCQlpZiAodmFsdWVbbl0gPj0gbWluICYmIHZhbHVlW25dIDw9IG1heAorCQkJJiYgZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXS5oaWQKKwkJCSYmIHNlYXJjaChmaWVsZC0+dmFsdWUsIHZhbHVlW25dLCBjb3VudCkpCisJCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVt2YWx1ZVtuXSAtIG1pbl0sIDEsIHJlZ3MpOworCX0KKworCW1lbWNweShmaWVsZC0+dmFsdWUsIHZhbHVlLCBjb3VudCAqIHNpemVvZihfX3MzMikpOworZXhpdDoKKwlrZnJlZSh2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgaGlkX2lucHV0X3JlcG9ydChpbnQgdHlwZSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gaGlkLT5yZXBvcnRfZW51bSArIHR5cGU7CisJdTggKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJaW50IG4sIHNpemU7CisKKwlpZiAoIWxlbikgeworCQlkYmcoImVtcHR5IHJlcG9ydCIpOworCQlyZXR1cm4gLTE7CisJfQorCisjaWZkZWYgREVCVUdfREFUQQorCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBsZW4sIHJlcG9ydF9lbnVtLT5udW1iZXJlZCA/ICIiIDogInVuIik7CisjZW5kaWYKKworCW4gPSAwOwkJCQkvKiBOb3JtYWxseSByZXBvcnQgbnVtYmVyIGlzIDAgKi8KKwlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKSB7CS8qIERldmljZSB1c2VzIG51bWJlcmVkIHJlcG9ydHMsIGRhdGFbMF0gaXMgcmVwb3J0IG51bWJlciAqLworCQluID0gKmRhdGErKzsKKwkJbGVuLS07CisJfQorCisjaWZkZWYgREVCVUdfREFUQQorCXsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCAlZCAoc2l6ZSAldSkgPSAiLCBuLCBsZW4pOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgZGF0YVtpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWlmICghKHJlcG9ydCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtuXSkpIHsKKwkJZGJnKCJ1bmRlZmluZWQgcmVwb3J0X2lkICVkIHJlY2VpdmVkIiwgbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzaXplID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDE7CisKKwlpZiAobGVuIDwgc2l6ZSkKKwkJZGJnKCJyZXBvcnQgJWQgaXMgdG9vIHNob3J0LCAoJWQgPCAlZCkiLCByZXBvcnQtPmlkLCBsZW4sIHNpemUpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikKKwkJaGlkZGV2X3JlcG9ydF9ldmVudChoaWQsIHJlcG9ydCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQorCQloaWRfaW5wdXRfZmllbGQoaGlkLCByZXBvcnQtPmZpZWxkW25dLCBkYXRhLCByZWdzKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfcmVwb3J0X2V2ZW50KGhpZCwgcmVwb3J0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5wdXQgaW50ZXJydXB0IGNvbXBsZXRpb24gaGFuZGxlci4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfaXJxX2luKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGhpZF9kZXZpY2UJKmhpZCA9IHVyYi0+Y29udGV4dDsKKwlpbnQJCQlzdGF0dXM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCQloaWRfaW5wdXRfcmVwb3J0KEhJRF9JTlBVVF9SRVBPUlQsIHVyYiwgcmVncyk7CisJCQlicmVhazsKKwkJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVBFUk06CisJCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCisJCWNhc2UgLUVJTFNFUToJCS8qIHVucGx1ZyB0aW1lb3V0IG9uIHVoY2kgKi8KKwkJCXJldHVybjsKKwkJY2FzZSAtRVRJTUVET1VUOgkvKiBOQUsgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KKwkJCXdhcm4oImlucHV0IGlycSBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJfQorCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dCVkLCBzdGF0dXMgJWQiLAorCQkJCWhpZC0+ZGV2LT5idXMtPmJ1c19uYW1lLCBoaWQtPmRldi0+ZGV2cGF0aCwKKwkJCQloaWQtPmlmbnVtLCBzdGF0dXMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBmaWVsZCBpbnRvIHRoZSByZXBvcnQuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX291dHB1dF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgX191OCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBjb3VudCA9IGZpZWxkLT5yZXBvcnRfY291bnQ7CisJdW5zaWduZWQgb2Zmc2V0ID0gZmllbGQtPnJlcG9ydF9vZmZzZXQ7CisJdW5zaWduZWQgc2l6ZSA9IGZpZWxkLT5yZXBvcnRfc2l6ZTsKKwl1bnNpZ25lZCBuOworCisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKwkJaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gPCAwKQkvKiBzaWduZWQgdmFsdWVzICovCisJCQlpbXBsZW1lbnQoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUsIHMzMnRvbihmaWVsZC0+dmFsdWVbbl0sIHNpemUpKTsKKwkJZWxzZQkJCQkvKiB1bnNpZ25lZCB2YWx1ZXMgKi8KKwkJCWltcGxlbWVudChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSwgZmllbGQtPnZhbHVlW25dKTsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYSByZXBvcnQuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX291dHB1dF9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgX191OCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBuOworCisJaWYgKHJlcG9ydC0+aWQgPiAwKQorCQkqZGF0YSsrID0gcmVwb3J0LT5pZDsKKworCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCisJCWhpZF9vdXRwdXRfZmllbGQocmVwb3J0LT5maWVsZFtuXSwgZGF0YSk7Cit9CisKKy8qCisgKiBTZXQgYSBmaWVsZCB2YWx1ZS4gVGhlIHJlcG9ydCB0aGlzIGZpZWxkIGJlbG9uZ3MgdG8gaGFzIHRvIGJlCisgKiBjcmVhdGVkIGFuZCB0cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlLCB0byBzZXQgdGhpcyB2YWx1ZSBpbiB0aGUKKyAqIGRldmljZS4KKyAqLworCitpbnQgaGlkX3NldF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgdW5zaWduZWQgb2Zmc2V0LCBfX3MzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOworCisJaGlkX2R1bXBfaW5wdXQoZmllbGQtPnVzYWdlICsgb2Zmc2V0LCB2YWx1ZSk7CisKKwlpZiAob2Zmc2V0ID49IGZpZWxkLT5yZXBvcnRfY291bnQpIHsKKwkJZGJnKCJvZmZzZXQgKCVkKSBleGNlZWRzIHJlcG9ydF9jb3VudCAoJWQpIiwgb2Zmc2V0LCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKKwkJaGlkX2R1bXBfZmllbGQoZmllbGQsIDgpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmaWVsZC0+bG9naWNhbF9taW5pbXVtIDwgMCkgeworCQlpZiAodmFsdWUgIT0gc250bzMyKHMzMnRvbih2YWx1ZSwgc2l6ZSksIHNpemUpKSB7CisJCQlkYmcoInZhbHVlICVkIGlzIG91dCBvZiByYW5nZSIsIHZhbHVlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlmaWVsZC0+dmFsdWVbb2Zmc2V0XSA9IHZhbHVlOworCXJldHVybiAwOworfQorCisvKgorICogRmluZCBhIHJlcG9ydCBmaWVsZCB3aXRoIGEgc3BlY2lmaWVkIEhJRCB1c2FnZS4KKyAqLworCitzdHJ1Y3QgaGlkX2ZpZWxkICpoaWRfZmluZF9maWVsZF9ieV91c2FnZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3UzMiB3YW50ZWRfdXNhZ2UsIGludCB0eXBlKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bdHlwZV0ucmVwb3J0X2xpc3QsIGxpc3QpCisJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspCisJCQlpZiAocmVwb3J0LT5maWVsZFtpXS0+bG9naWNhbCA9PSB3YW50ZWRfdXNhZ2UpCisJCQkJcmV0dXJuIHJlcG9ydC0+ZmllbGRbaV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3N1Ym1pdF9vdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCisJcmVwb3J0ID0gaGlkLT5vdXRbaGlkLT5vdXR0YWlsXTsKKworCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgaGlkLT5vdXRidWYpOworCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCWhpZC0+dXJib3V0LT5kZXYgPSBoaWQtPmRldjsKKworCWRiZygic3VibWl0dGluZyBvdXQgdXJiIik7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIoaGlkLT51cmJvdXQsIEdGUF9BVE9NSUMpKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIob3V0KSBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9zdWJtaXRfY3RybChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJdW5zaWduZWQgY2hhciBkaXI7CisJaW50IGxlbjsKKworCXJlcG9ydCA9IGhpZC0+Y3RybFtoaWQtPmN0cmx0YWlsXS5yZXBvcnQ7CisJZGlyID0gaGlkLT5jdHJsW2hpZC0+Y3RybHRhaWxdLmRpcjsKKworCWxlbiA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxICsgKHJlcG9ydC0+aWQgPiAwKTsKKwlpZiAoZGlyID09IFVTQl9ESVJfT1VUKSB7CisJCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgaGlkLT5jdHJsYnVmKTsKKwkJaGlkLT51cmJjdHJsLT5waXBlID0gdXNiX3NuZGN0cmxwaXBlKGhpZC0+ZGV2LCAwKTsKKwkJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOworCX0gZWxzZSB7CisJCWludCBtYXhwYWNrZXQsIHBhZGxlbjsKKworCQloaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoaGlkLT5kZXYsIDApOworCQltYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KGhpZC0+ZGV2LCBoaWQtPnVyYmN0cmwtPnBpcGUsIDApOworCQlpZiAobWF4cGFja2V0ID4gMCkgeworCQkJcGFkbGVuID0gKGxlbiArIG1heHBhY2tldCAtIDEpIC8gbWF4cGFja2V0OworCQkJcGFkbGVuICo9IG1heHBhY2tldDsKKwkJCWlmIChwYWRsZW4gPiBISURfQlVGRkVSX1NJWkUpCisJCQkJcGFkbGVuID0gSElEX0JVRkZFUl9TSVpFOworCQl9IGVsc2UKKwkJCXBhZGxlbiA9IDA7CisJCWhpZC0+dXJiY3RybC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBhZGxlbjsKKwl9CisJaGlkLT51cmJjdHJsLT5kZXYgPSBoaWQtPmRldjsKKworCWhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKKwloaWQtPmNyLT5iUmVxdWVzdCA9IChkaXIgPT0gVVNCX0RJUl9PVVQpID8gSElEX1JFUV9TRVRfUkVQT1JUIDogSElEX1JFUV9HRVRfUkVQT1JUOworCWhpZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCgocmVwb3J0LT50eXBlICsgMSkgPDwgOCkgfCByZXBvcnQtPmlkKTsKKwloaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNihoaWQtPmlmbnVtKTsKKwloaWQtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKKworCWRiZygic3VibWl0dGluZyBjdHJsIHVyYjogJXMgd1ZhbHVlPTB4JTA0eCB3SW5kZXg9MHglMDR4IHdMZW5ndGg9JXUiLAorCQloaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCisJCWhpZC0+Y3ItPndWYWx1ZSwgaGlkLT5jci0+d0luZGV4LCBoaWQtPmNyLT53TGVuZ3RoKTsKKworCWlmICh1c2Jfc3VibWl0X3VyYihoaWQtPnVyYmN0cmwsIEdGUF9BVE9NSUMpKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIoY3RybCkgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE91dHB1dCBpbnRlcnJ1cHQgY29tcGxldGlvbiBoYW5kbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9pcnFfb3V0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB1bnBsdWcgPSAwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQljYXNlIC1FSUxTRVE6CQkvKiB1bnBsdWcgdGltZW91dCBvbiB1aGNpICovCisJCQl1bnBsdWcgPSAxOworCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwkJY2FzZSAtRU5PRU5UOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQkJd2Fybigib3V0cHV0IGlycSBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCisJaWYgKHVucGx1ZykKKwkJaGlkLT5vdXR0YWlsID0gaGlkLT5vdXRoZWFkOworCWVsc2UKKwkJaGlkLT5vdXR0YWlsID0gKGhpZC0+b3V0dGFpbCArIDEpICYgKEhJRF9PVVRQVVRfRklGT19TSVpFIC0gMSk7CisKKwlpZiAoaGlkLT5vdXRoZWFkICE9IGhpZC0+b3V0dGFpbCkgeworCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkgeworCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7OworCQkJd2FrZV91cCgmaGlkLT53YWl0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCXdha2VfdXAoJmhpZC0+d2FpdCk7Cit9CisKKy8qCisgKiBDb250cm9sIHBpcGUgY29tcGxldGlvbiBoYW5kbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9jdHJsKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB1bnBsdWcgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJCWlmIChoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCisJCQkJaGlkX2lucHV0X3JlcG9ydChoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0ucmVwb3J0LT50eXBlLCB1cmIsIHJlZ3MpOworCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQljYXNlIC1FSUxTRVE6CQkvKiB1bnBsdWcgdGltZWN0cmwgb24gdWhjaSAqLworCQkJdW5wbHVnID0gMTsKKwkJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVBJUEU6CQkvKiByZXBvcnQgbm90IGF2YWlsYWJsZSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQkJd2FybigiY3RybCB1cmIgc3RhdHVzICVkIHJlY2VpdmVkIiwgdXJiLT5zdGF0dXMpOworCX0KKworCWlmICh1bnBsdWcpCisJCWhpZC0+Y3RybHRhaWwgPSBoaWQtPmN0cmxoZWFkOworCWVsc2UKKwkJaGlkLT5jdHJsdGFpbCA9IChoaWQtPmN0cmx0YWlsICsgMSkgJiAoSElEX0NPTlRST0xfRklGT19TSVpFIC0gMSk7CisKKwlpZiAoaGlkLT5jdHJsaGVhZCAhPSBoaWQtPmN0cmx0YWlsKSB7CisJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkgeworCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCQkJd2FrZV91cCgmaGlkLT53YWl0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCXdha2VfdXAoJmhpZC0+d2FpdCk7Cit9CisKK3ZvaWQgaGlkX3N1Ym1pdF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgY2hhciBkaXIpCit7CisJaW50IGhlYWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfTk9HRVQpICYmIGRpciA9PSBVU0JfRElSX0lOKQorCQlyZXR1cm47CisKKwlpZiAoaGlkLT51cmJvdXQgJiYgZGlyID09IFVTQl9ESVJfT1VUICYmIHJlcG9ydC0+dHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgeworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKworCQlpZiAoKGhlYWQgPSAoaGlkLT5vdXRoZWFkICsgMSkgJiAoSElEX09VVFBVVF9GSUZPX1NJWkUgLSAxKSkgPT0gaGlkLT5vdXR0YWlsKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJCXdhcm4oIm91dHB1dCBxdWV1ZSBmdWxsIik7CisJCQlyZXR1cm47CisJCX0KKworCQloaWQtPm91dFtoaWQtPm91dGhlYWRdID0gcmVwb3J0OworCQloaWQtPm91dGhlYWQgPSBoZWFkOworCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpKQorCQkJaWYgKGhpZF9zdWJtaXRfb3V0KGhpZCkpCisJCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCisJaWYgKChoZWFkID0gKGhpZC0+Y3RybGhlYWQgKyAxKSAmIChISURfQ09OVFJPTF9GSUZPX1NJWkUgLSAxKSkgPT0gaGlkLT5jdHJsdGFpbCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJCXdhcm4oImNvbnRyb2wgcXVldWUgZnVsbCIpOworCQlyZXR1cm47CisJfQorCisJaGlkLT5jdHJsW2hpZC0+Y3RybGhlYWRdLnJlcG9ydCA9IHJlcG9ydDsKKwloaWQtPmN0cmxbaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOworCWhpZC0+Y3RybGhlYWQgPSBoZWFkOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpKQorCQlpZiAoaGlkX3N1Ym1pdF9jdHJsKGhpZCkpCisJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7Cit9CisKK2ludCBoaWRfd2FpdF9pbyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGhpZC0+d2FpdCwgKCF0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSAmJgorCQkJCQkhdGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSksCisJCQkJCTEwKkhaKSkgeworCQlkYmcoInRpbWVvdXQgd2FpdGluZyBmb3IgY3RybCBvciBvdXQgcXVldWUgdG8gY2xlYXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9nZXRfY2xhc3NfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaWZudW0sCisJCXVuc2lnbmVkIGNoYXIgdHlwZSwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmVzdWx0LCByZXRyaWVzID0gNDsKKworCW1lbXNldChidWYsMCxzaXplKTsJLy8gTWFrZSBzdXJlIHdlIHBhcnNlIHJlYWxseSByZWNlaXZlZCBkYXRhCisKKwlkbyB7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJCSh0eXBlIDw8IDgpLCBpZm51bSwgYnVmLCBzaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCXJldHJpZXMtLTsKKwl9IHdoaWxlIChyZXN1bHQgPCBzaXplICYmIHJldHJpZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBoaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmIChoaWQtPm9wZW4rKykKKwkJcmV0dXJuIDA7CisKKwloaWQtPnVyYmluLT5kZXYgPSBoaWQtPmRldjsKKworCWlmICh1c2Jfc3VibWl0X3VyYihoaWQtPnVyYmluLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBoaWRfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlpZiAoIS0taGlkLT5vcGVuKQorCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFsbCByZXBvcnRzCisgKi8KKwordm9pZCBoaWRfaW5pdF9yZXBvcnRzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgZXJyLCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bSElEX0lOUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QsIGxpc3QpIHsKKwkJaW50IHNpemUgPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIGhpZC0+cmVwb3J0X2VudW1bSElEX0lOUFVUX1JFUE9SVF0ubnVtYmVyZWQ7CisJCWlmIChzaXplID4gSElEX0JVRkZFUl9TSVpFKSBzaXplID0gSElEX0JVRkZFUl9TSVpFOworCQlpZiAoc2l6ZSA+IGhpZC0+dXJiaW4tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCQloaWQtPnVyYmluLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZTsKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfSU4pOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfRkVBVFVSRV9SRVBPUlRdLnJlcG9ydF9saXN0LCBsaXN0KQorCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7CisKKwllcnIgPSAwOworCXJldCA9IGhpZF93YWl0X2lvKGhpZCk7CisJd2hpbGUgKHJldCkgeworCQllcnIgfD0gcmV0OworCQlpZiAodGVzdF9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCkpCisJCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJjdHJsKTsKKwkJaWYgKHRlc3RfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCkpCisJCQl1c2Jfa2lsbF91cmIoaGlkLT51cmJvdXQpOworCQlyZXQgPSBoaWRfd2FpdF9pbyhoaWQpOworCX0KKworCWlmIChlcnIpCisJCXdhcm4oInRpbWVvdXQgaW5pdGlhbGl6aW5nIHJlcG9ydHNcbiIpOworCisJdXNiX2NvbnRyb2xfbXNnKGhpZC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoaGlkLT5kZXYsIDApLAorCQlISURfUkVRX1NFVF9JRExFLCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsCisJCWhpZC0+aWZudW0sIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKK30KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QRU5QQVJUTkVSCTB4MDAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUwkweDAwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QTAkJMHgwMDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMgkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9WT0xJVE8JMHgwMDYwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fUFRVCQkweDAwMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0tCR0VBUgkJMHgwODRlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS0JHRUFSX0pBTVNUVURJTwkweDEwMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJMHgwOGNhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxCQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAJCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMAkJMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxCQkweDAwMjEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIJCTB4MDAyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMwkJMHgwMDIzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0CQkweDAwMjQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dSSUZGSU4JCTB4MDc3ZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BPV0VSTUFURQkJMHgwNDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CCQkweDA0QUEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU4JCTB4MDU1NworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTQkweDIwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VQkweDIyMDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzJQT1JUS1ZNCTB4MjIwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fNFBPUlRLVk0JMHgyMjA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMJMHgyMjA4CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0hBUFAJCTB4MDc4YgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRFJJVklORwkweDAwMTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORwkweDAwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HCTB4MDAzMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUdFCQkweDA0NjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTCQkweGZmZmYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTMQkJMHgwMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9PTlRSQUsJCTB4MGEwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAJMHgwMDY0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UQU5HVE9QCQkweDBkM2QKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UQU5HVE9QX1VTQlBTMgkweDAwMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0VTU0VOVElBTF9SRUFMSVRZCTB4MGQ3ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0VTU0VOVElBTF9SRUFMSVRZX1A1IDB4MDEwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQTRURUNICQkweDA5ZGEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVQkweDAwMDYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZUFJFU1MJCTB4MDRiNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UJMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00JMHg1NTAwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUJCTB4MGM5OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dECTB4MTE0MAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxQUwkJMHgwNDMzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQJMHgxMTAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQUlURUsJCTB4MDZhMworI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBSVRFS19SVU1CTEVQQUQJMHhmZjE3CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ORUMJCTB4MDczZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX05FQ19VU0JfR0FNRV9QQUQJMHgwMzAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSElDCQkweDA1ZmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSElDX0dBTUVQQUQJMHgwMDE0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HTEFCCQkweDA2YzIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMAkweDAwMzgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18zMAkweDAwMzkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lUCTB4MDA0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MJCTB4MDdjMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MAkweDE1MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XMjQJMHgxNTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzQ4CTB4MTUwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1cyOAkweDE1MDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0RFTE9STUUJCTB4MTE2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFIDB4MDEwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUNDCQkweDA5ZGIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTAyNExTCTB4MDA3NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01DQ19QTUQxMjA4TFMJMHgwMDdhCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSElDT05ZCQkweDA0ZjIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSElDT05ZX1VTQkhVQl9LQgkweDAxMDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JUQwkJMHgwNDZlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDX0tFWUJPQVJECTB4NTMwMworCisKKy8qCisgKiBBbHBoYWJldGljYWxseSBzb3J0ZWQgYmxhY2tsaXN0IGJ5IHF1aXJrIHR5cGUuCisgKi8KKworc3RhdGljIHN0cnVjdCBoaWRfYmxhY2tsaXN0IHsKKwlfX3UxNiBpZFZlbmRvcjsKKwlfX3UxNiBpZFByb2R1Y3Q7CisJdW5zaWduZWQgcXVpcmtzOworfSBoaWRfYmxhY2tsaXN0W10gPSB7CisKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18wMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzEwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUsIFVTQl9ERVZJQ0VfSURfQkVSS1NISVJFX1BDV0QsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzI0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0NPREVNRVJDUywgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XNDgsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1cyOCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfSElEQ09NLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0RFTE9STUUsIFVTQl9ERVZJQ0VfSURfREVMT1JNRV9FQVJUSE1BVEUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFksIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfOF84XzhfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF84XzhfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0tCR0VBUiwgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01DQywgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTAyNExTLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01DQywgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QRU5QQVJUTkVSLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9HUkFQSElSRSArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUyArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDEsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA3LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1ZPTElUTywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QVFUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl8yUE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9CVEMsIFVTQl9ERVZJQ0VfSURfQlRDX0tFWUJPQVJELCBISURfUVVJUktfTk9HRVR9LAorCXsgVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfVVNCSFVCX0tCLCBISURfUVVJUktfTk9HRVR9LAorCXsgVVNCX1ZFTkRPUl9JRF9UQU5HVE9QLCBVU0JfREVWSUNFX0lEX1RBTkdUT1BfVVNCUFMyLCBISURfUVVJUktfTk9HRVQgfSwKKworCXsgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUsIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183IH0sCisJeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRSwgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUgfSwKKworCXsgVVNCX1ZFTkRPUl9JRF9BTFBTLCBVU0JfREVWSUNFX0lEX0lCTV9HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX0NISUMsIFVTQl9ERVZJQ0VfSURfQ0hJQ19HQU1FUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9EUklWSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX05FQywgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX1NBSVRFSywgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFELCBISURfUVVJUktfQkFEUEFEIH0sCisJeyBVU0JfVkVORE9SX0lEX1RPUE1BWCwgVVNCX0RFVklDRV9JRF9UT1BNQVhfQ09CUkFQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKKworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgaW50IGhpZF9hbGxvY19idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJaWYgKCEoaGlkLT5pbmJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBISURfQlVGRkVSX1NJWkUsIFNMQUJfQVRPTUlDLCAmaGlkLT5pbmJ1Zl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGhpZC0+b3V0YnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIEhJRF9CVUZGRVJfU0laRSwgU0xBQl9BVE9NSUMsICZoaWQtPm91dGJ1Zl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGhpZC0+Y3IgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgc2l6ZW9mKCooaGlkLT5jcikpLCBTTEFCX0FUT01JQywgJmhpZC0+Y3JfZG1hKSkpCisJCXJldHVybiAtMTsKKwlpZiAoIShoaWQtPmN0cmxidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgSElEX0JVRkZFUl9TSVpFLCBTTEFCX0FUT01JQywgJmhpZC0+Y3RybGJ1Zl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlpZiAoaGlkLT5pbmJ1ZikKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgSElEX0JVRkZFUl9TSVpFLCBoaWQtPmluYnVmLCBoaWQtPmluYnVmX2RtYSk7CisJaWYgKGhpZC0+b3V0YnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBISURfQlVGRkVSX1NJWkUsIGhpZC0+b3V0YnVmLCBoaWQtPm91dGJ1Zl9kbWEpOworCWlmIChoaWQtPmNyKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBzaXplb2YoKihoaWQtPmNyKSksIGhpZC0+Y3IsIGhpZC0+Y3JfZG1hKTsKKwlpZiAoaGlkLT5jdHJsYnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBISURfQlVGRkVSX1NJWkUsIGhpZC0+Y3RybGJ1ZiwgaGlkLT5jdHJsYnVmX2RtYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RldmljZSAqdXNiX2hpZF9jb25maWd1cmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCBoaWRfZGVzY3JpcHRvciAqaGRlc2M7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKKwl1bnNpZ25lZCBxdWlya3MgPSAwLCByc2l6ZSA9IDA7CisJY2hhciAqYnVmLCAqcmRlc2M7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBoaWRfYmxhY2tsaXN0W25dLmlkVmVuZG9yOyBuKyspCisJCWlmICgoaGlkX2JsYWNrbGlzdFtuXS5pZFZlbmRvciA9PSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSAmJgorCQkJKGhpZF9ibGFja2xpc3Rbbl0uaWRQcm9kdWN0ID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSkKKwkJCQlxdWlya3MgPSBoaWRfYmxhY2tsaXN0W25dLnF1aXJrczsKKworCWlmIChxdWlya3MgJiBISURfUVVJUktfSUdOT1JFKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoaW50ZXJmYWNlLCBISURfRFRfSElELCAmaGRlc2MpICYmICgoIWludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSB8fAorCQl1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0sIEhJRF9EVF9ISUQsICZoZGVzYykpKSB7CisJCQlkYmcoImNsYXNzIGRlc2NyaXB0b3Igbm90IHByZXNlbnRcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGhkZXNjLT5iTnVtRGVzY3JpcHRvcnM7IG4rKykKKwkJaWYgKGhkZXNjLT5kZXNjW25dLmJEZXNjcmlwdG9yVHlwZSA9PSBISURfRFRfUkVQT1JUKQorCQkJcnNpemUgPSBsZTE2X3RvX2NwdShoZGVzYy0+ZGVzY1tuXS53RGVzY3JpcHRvckxlbmd0aCk7CisKKwlpZiAoIXJzaXplIHx8IHJzaXplID4gSElEX01BWF9ERVNDUklQVE9SX1NJWkUpIHsKKwkJZGJnKCJ3ZWlyZCBzaXplIG9mIHJlcG9ydCBkZXNjcmlwdG9yICgldSkiLCByc2l6ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghKHJkZXNjID0ga21hbGxvYyhyc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7CisJCWRiZygiY291bGRuJ3QgYWxsb2NhdGUgcmRlc2MgbWVtb3J5Iik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICgobiA9IGhpZF9nZXRfY2xhc3NfZGVzY3JpcHRvcihkZXYsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBISURfRFRfUkVQT1JULCByZGVzYywgcnNpemUpKSA8IDApIHsKKwkJZGJnKCJyZWFkaW5nIHJlcG9ydCBkZXNjcmlwdG9yIGZhaWxlZCIpOworCQlrZnJlZShyZGVzYyk7CisJCXJldHVybiBOVUxMOworCX0KKworI2lmZGVmIERFQlVHX0RBVEEKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiByZXBvcnQgZGVzY3JpcHRvciAoc2l6ZSAldSwgcmVhZCAlZCkgPSAiLCByc2l6ZSwgbik7CisJZm9yIChuID0gMDsgbiA8IHJzaXplOyBuKyspCisJCXByaW50aygiICUwMngiLCAodW5zaWduZWQgY2hhcikgcmRlc2Nbbl0pOworCXByaW50aygiXG4iKTsKKyNlbmRpZgorCisJaWYgKCEoaGlkID0gaGlkX3BhcnNlX3JlcG9ydChyZGVzYywgbikpKSB7CisJCWRiZygicGFyc2luZyByZXBvcnQgZGVzY3JpcHRvciBmYWlsZWQiKTsKKwkJa2ZyZWUocmRlc2MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlrZnJlZShyZGVzYyk7CisJaGlkLT5xdWlya3MgPSBxdWlya3M7CisKKwlpZiAoaGlkX2FsbG9jX2J1ZmZlcnMoZGV2LCBoaWQpKSB7CisJCWhpZF9mcmVlX2J1ZmZlcnMoZGV2LCBoaWQpOworCQlnb3RvIGZhaWw7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspIHsKKworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCQlpbnQgcGlwZTsKKwkJaW50IGludGVydmFsOworCisJCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbbl0uZGVzYzsKKwkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgIT0gMykJCS8qIE5vdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwkJCWNvbnRpbnVlOworCisJCS8qIGhhbmRsZSBwb3RlbnRpYWwgaGlnaHNwZWVkIEhJRCBjb3JyZWN0bHkgKi8KKwkJaW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOworCQlpZiAoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWludGVydmFsID0gMSA8PCAoaW50ZXJ2YWwgLSAxKTsKKworCQkvKiBDaGFuZ2UgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgb2YgbWljZS4gKi8KKwkJaWYgKGhpZC0+Y29sbGVjdGlvbi0+dXNhZ2UgPT0gSElEX0dEX01PVVNFICYmIGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWwgPiAwKQorCQkJaW50ZXJ2YWwgPSBoaWRfbW91c2Vwb2xsX2ludGVydmFsOworCQkKKwkJaWYgKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJaWYgKGhpZC0+dXJiaW4pCisJCQkJY29udGludWU7CisJCQlpZiAoIShoaWQtPnVyYmluID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpCisJCQkJZ290byBmYWlsOworCQkJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJdXNiX2ZpbGxfaW50X3VyYihoaWQtPnVyYmluLCBkZXYsIHBpcGUsIGhpZC0+aW5idWYsIDAsCisJCQkJCSBoaWRfaXJxX2luLCBoaWQsIGludGVydmFsKTsKKwkJCWhpZC0+dXJiaW4tPnRyYW5zZmVyX2RtYSA9IGhpZC0+aW5idWZfZG1hOworCQkJaGlkLT51cmJpbi0+dHJhbnNmZXJfZmxhZ3MgfD0oVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChoaWQtPnVyYm91dCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghKGhpZC0+dXJib3V0ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpCisJCQkJZ290byBmYWlsOworCQkJcGlwZSA9IHVzYl9zbmRpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQkJdXNiX2ZpbGxfaW50X3VyYihoaWQtPnVyYm91dCwgZGV2LCBwaXBlLCBoaWQtPm91dGJ1ZiwgMCwKKwkJCQkJIGhpZF9pcnFfb3V0LCBoaWQsIGludGVydmFsKTsKKwkJCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9kbWEgPSBoaWQtPm91dGJ1Zl9kbWE7CisJCQloaWQtPnVyYm91dC0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX0FTWU5DX1VOTElOSyk7CisJCX0KKwl9CisKKwlpZiAoIWhpZC0+dXJiaW4pIHsKKwkJZXJyKCJjb3VsZG4ndCBmaW5kIGFuIGlucHV0IGludGVycnVwdCBlbmRwb2ludCIpOworCQlnb3RvIGZhaWw7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaGlkLT53YWl0KTsKKworCXNwaW5fbG9ja19pbml0KCZoaWQtPm91dGxvY2spOworCXNwaW5fbG9ja19pbml0KCZoaWQtPmN0cmxsb2NrKTsKKworCWhpZC0+dmVyc2lvbiA9IGxlMTZfdG9fY3B1KGhkZXNjLT5iY2RISUQpOworCWhpZC0+Y291bnRyeSA9IGhkZXNjLT5iQ291bnRyeUNvZGU7CisJaGlkLT5kZXYgPSBkZXY7CisJaGlkLT5pbnRmID0gaW50ZjsKKwloaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwloaWQtPm5hbWVbMF0gPSAwOworCisJaWYgKCEoYnVmID0ga21hbGxvYyg2NCwgR0ZQX0tFUk5FTCkpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpIHsKKwkJc3RyY2F0KGhpZC0+bmFtZSwgZGV2LT5tYW51ZmFjdHVyZXIpOworCQlpZiAoZGV2LT5wcm9kdWN0KQorCQkJc25wcmludGYoaGlkLT5uYW1lLCA2NCwgIiVzICVzIiwgaGlkLT5uYW1lLCBkZXYtPnByb2R1Y3QpOworCX0gZWxzZSBpZiAoZGV2LT5wcm9kdWN0KSB7CisJCQlzbnByaW50ZihoaWQtPm5hbWUsIDEyOCwgIiVzIiwgZGV2LT5wcm9kdWN0KTsKKwl9IGVsc2UKKwkJc25wcmludGYoaGlkLT5uYW1lLCAxMjgsICIlMDR4OiUwNHgiLAorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCXVzYl9tYWtlX3BhdGgoZGV2LCBidWYsIDY0KTsKKwlzbnByaW50ZihoaWQtPnBoeXMsIDY0LCAiJXMvaW5wdXQlZCIsIGJ1ZiwKKwkJCWludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCWlmICh1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIGhpZC0+dW5pcSwgNjQpIDw9IDApCisJCWhpZC0+dW5pcVswXSA9IDA7CisKKwlrZnJlZShidWYpOworCisJaGlkLT51cmJjdHJsID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhpZC0+dXJiY3RybCkKKwkJZ290byBmYWlsOworCXVzYl9maWxsX2NvbnRyb2xfdXJiKGhpZC0+dXJiY3RybCwgZGV2LCAwLCAodm9pZCAqKSBoaWQtPmNyLAorCQkJICAgICBoaWQtPmN0cmxidWYsIDEsIGhpZF9jdHJsLCBoaWQpOworCWhpZC0+dXJiY3RybC0+c2V0dXBfZG1hID0gaGlkLT5jcl9kbWE7CisJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9kbWEgPSBoaWQtPmN0cmxidWZfZG1hOworCWhpZC0+dXJiY3RybC0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX1NFVFVQX0RNQV9NQVAgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKworCXJldHVybiBoaWQ7CisKK2ZhaWw6CisKKwlpZiAoaGlkLT51cmJpbikKKwkJdXNiX2ZyZWVfdXJiKGhpZC0+dXJiaW4pOworCWlmIChoaWQtPnVyYm91dCkKKwkJdXNiX2ZyZWVfdXJiKGhpZC0+dXJib3V0KTsKKwlpZiAoaGlkLT51cmJjdHJsKQorCQl1c2JfZnJlZV91cmIoaGlkLT51cmJjdHJsKTsKKwloaWRfZnJlZV9idWZmZXJzKGRldiwgaGlkKTsKKwloaWRfZnJlZV9kZXZpY2UoaGlkKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoaWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwlpZiAoIWhpZCkKKwkJcmV0dXJuOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7CisJdXNiX2tpbGxfdXJiKGhpZC0+dXJib3V0KTsKKwl1c2Jfa2lsbF91cmIoaGlkLT51cmJjdHJsKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWhpZGRldl9kaXNjb25uZWN0KGhpZCk7CisKKwl1c2JfZnJlZV91cmIoaGlkLT51cmJpbik7CisJdXNiX2ZyZWVfdXJiKGhpZC0+dXJiY3RybCk7CisJaWYgKGhpZC0+dXJib3V0KQorCQl1c2JfZnJlZV91cmIoaGlkLT51cmJvdXQpOworCisJaGlkX2ZyZWVfYnVmZmVycyhoaWQtPmRldiwgaGlkKTsKKwloaWRfZnJlZV9kZXZpY2UoaGlkKTsKK30KKworc3RhdGljIGludCBoaWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCWNoYXIgcGF0aFs2NF07CisJaW50IGk7CisJY2hhciAqYzsKKworCWRiZygiSElEIHByb2JlIGNhbGxlZCBmb3IgaWZudW0gJWQiLAorCQkJaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCWlmICghKGhpZCA9IHVzYl9oaWRfY29uZmlndXJlKGludGYpKSkKKwkJcmV0dXJuIC1FSU87CisKKwloaWRfaW5pdF9yZXBvcnRzKGhpZCk7CisJaGlkX2R1bXBfZGV2aWNlKGhpZCk7CisKKwlpZiAoIWhpZGlucHV0X2Nvbm5lY3QoaGlkKSkKKwkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0lOUFVUOworCWlmICghaGlkZGV2X2Nvbm5lY3QoaGlkKSkKKwkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0hJRERFVjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgaGlkKTsKKworCWlmICghaGlkLT5jbGFpbWVkKSB7CisJCXByaW50ayAoIkhJRCBkZXZpY2Ugbm90IGNsYWltZWQgYnkgaW5wdXQgb3IgaGlkZGV2XG4iKTsKKwkJaGlkX2Rpc2Nvbm5lY3QoaW50Zik7CisJCXJldHVybiAtRUlPOworCX0KKworCXByaW50ayhLRVJOX0lORk8pOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQorCQlwcmludGsoImlucHV0Iik7CisJaWYgKGhpZC0+Y2xhaW1lZCA9PSAoSElEX0NMQUlNRURfSU5QVVQgfCBISURfQ0xBSU1FRF9ISURERVYpKQorCQlwcmludGsoIiwiKTsKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKQorCQlwcmludGsoImhpZGRldiVkIiwgaGlkLT5taW5vcik7CisKKwljID0gIkRldmljZSI7CisJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKSB7CisJCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiAmJgorCQkgICAgKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfR0VOREVTSyAmJgorCQkgICAgKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSAmIDB4ZmZmZikgPCBBUlJBWV9TSVpFKGhpZF90eXBlcykpIHsKKwkJCWMgPSBoaWRfdHlwZXNbaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlICYgMHhmZmZmXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdXNiX21ha2VfcGF0aChpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBwYXRoLCA2Myk7CisKKwlwcmludGsoIjogVVNCIEhJRCB2JXguJTAyeCAlcyBbJXNdIG9uICVzXG4iLAorCQloaWQtPnZlcnNpb24gPj4gOCwgaGlkLT52ZXJzaW9uICYgMHhmZiwgYywgaGlkLT5uYW1lLCBwYXRoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX2tpbGxfdXJiKGhpZC0+dXJiaW4pOworCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCWRldl9kYmcoJmludGYtPmRldiwgInN1c3BlbmRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWludCBzdGF0dXM7CisKKwlpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTV9TVVNQRU5EX09OOworCWlmIChoaWQtPm9wZW4pCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGhpZC0+dXJiaW4sIEdGUF9OT0lPKTsKKwllbHNlCisJCXN0YXR1cyA9IDA7CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaGlkX3VzYl9pZHMgW10gPSB7CisJeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUywKKwkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9JTlRFUkZBQ0VfQ0xBU1NfSElEIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaGlkX3VzYl9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGlkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNiaGlkIiwKKwkucHJvYmUgPQloaWRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQloaWRfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CWhpZF9zdXNwZW5kLAorCS5yZXN1bWUgPQloaWRfcmVzdW1lLAorCS5pZF90YWJsZSA9CWhpZF91c2JfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGlkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IGhpZGRldl9pbml0KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBoaWRkZXZfaW5pdF9mYWlsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaGlkX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byB1c2JfcmVnaXN0ZXJfZmFpbDsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK3VzYl9yZWdpc3Rlcl9mYWlsOgorCWhpZGRldl9leGl0KCk7CitoaWRkZXZfaW5pdF9mYWlsOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoaWRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZoaWRfZHJpdmVyKTsKKwloaWRkZXZfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChoaWRfaW5pdCk7Cittb2R1bGVfZXhpdChoaWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWRlYnVnLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjkxNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWRlYnVnLmgKQEAgLTAsMCArMSw3MjAgQEAKKy8qCisgKiAkSWQ6IGhpZC1kZWJ1Zy5oLHYgMS44IDIwMDEvMDkvMjUgMDk6Mzc6NTcgdm9qdGVjaCBFeHAgJAorICoKKyAqICAoYykgMTk5OSBBbmRyZWFzIEdhbAkJPGdhbEBjcy51bmktbWFnZGVidXJnLmRlPgorICogIChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAdWN3LmN6PgorICoKKyAqICBTb21lIGRlYnVnIHN0dWZmIGZvciB0aGUgSElEIHBhcnNlci4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworc3RydWN0IGhpZF91c2FnZV9lbnRyeSB7CisJdW5zaWduZWQgIHBhZ2U7CisJdW5zaWduZWQgIHVzYWdlOworCWNoYXIgICAgICpkZXNjcmlwdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5IGhpZF91c2FnZV90YWJsZVtdID0geworICB7ICAwLCAgICAgIDAsICJVbmRlZmluZWQiIH0sCisgIHsgIDEsICAgICAgMCwgIkdlbmVyaWNEZXNrdG9wIiB9LAorICAgIHswLCAweDAxLCAiUG9pbnRlciJ9LAorICAgIHswLCAweDAyLCAiTW91c2UifSwKKyAgICB7MCwgMHgwNCwgIkpveXN0aWNrIn0sCisgICAgezAsIDB4MDUsICJHYW1lUGFkIn0sCisgICAgezAsIDB4MDYsICJLZXlib2FyZCJ9LAorICAgIHswLCAweDA3LCAiS2V5cGFkIn0sCisgICAgezAsIDB4MDgsICJNdWx0aUF4aXMifSwKKyAgICAgIHswLCAweDMwLCAiWCJ9LAorICAgICAgezAsIDB4MzEsICJZIn0sCisgICAgICB7MCwgMHgzMiwgIloifSwKKyAgICAgIHswLCAweDMzLCAiUngifSwKKyAgICAgIHswLCAweDM0LCAiUnkifSwKKyAgICAgIHswLCAweDM1LCAiUnoifSwKKyAgICAgIHswLCAweDM2LCAiU2xpZGVyIn0sCisgICAgICB7MCwgMHgzNywgIkRpYWwifSwKKyAgICAgIHswLCAweDM4LCAiV2hlZWwifSwKKyAgICAgIHswLCAweDM5LCAiSGF0U3dpdGNoIn0sCisgICAgezAsIDB4M2EsICJDb3VudGVkQnVmZmVyIn0sCisgICAgICB7MCwgMHgzYiwgIkJ5dGVDb3VudCJ9LAorICAgICAgezAsIDB4M2MsICJNb3Rpb25XYWtldXAifSwKKyAgICAgIHswLCAweDNkLCAiU3RhcnQifSwKKyAgICAgIHswLCAweDNlLCAiU2VsZWN0In0sCisgICAgICB7MCwgMHg0MCwgIlZ4In0sCisgICAgICB7MCwgMHg0MSwgIlZ5In0sCisgICAgICB7MCwgMHg0MiwgIlZ6In0sCisgICAgICB7MCwgMHg0MywgIlZicngifSwKKyAgICAgIHswLCAweDQ0LCAiVmJyeSJ9LAorICAgICAgezAsIDB4NDUsICJWYnJ6In0sCisgICAgICB7MCwgMHg0NiwgIlZubyJ9LAorICAgIHswLCAweDgwLCAiU3lzdGVtQ29udHJvbCJ9LCAKKyAgICAgIHswLCAweDgxLCAiU3lzdGVtUG93ZXJEb3duIn0sCisgICAgICB7MCwgMHg4MiwgIlN5c3RlbVNsZWVwIn0sCisgICAgICB7MCwgMHg4MywgIlN5c3RlbVdha2VVcCJ9LAorICAgICAgezAsIDB4ODQsICJTeXN0ZW1Db250ZXh0TWVudSJ9LAorICAgICAgezAsIDB4ODUsICJTeXN0ZW1NYWluTWVudSJ9LAorICAgICAgezAsIDB4ODYsICJTeXN0ZW1BcHBNZW51In0sCisgICAgICB7MCwgMHg4NywgIlN5c3RlbU1lbnVIZWxwIn0sCisgICAgICB7MCwgMHg4OCwgIlN5c3RlbU1lbnVFeGl0In0sCisgICAgICB7MCwgMHg4OSwgIlN5c3RlbU1lbnVTZWxlY3QifSwKKyAgICAgIHswLCAweDhhLCAiU3lzdGVtTWVudVJpZ2h0In0sCisgICAgICB7MCwgMHg4YiwgIlN5c3RlbU1lbnVMZWZ0In0sCisgICAgICB7MCwgMHg4YywgIlN5c3RlbU1lbnVVcCJ9LAorICAgICAgezAsIDB4OGQsICJTeXN0ZW1NZW51RG93biJ9LAorICAgICAgezAsIDB4OTAsICJELVBhZFVwIn0sCisgICAgICB7MCwgMHg5MSwgIkQtUGFkRG93biJ9LAorICAgICAgezAsIDB4OTIsICJELVBhZFJpZ2h0In0sCisgICAgICB7MCwgMHg5MywgIkQtUGFkTGVmdCJ9LAorICB7ICA3LCAwLCAiS2V5Ym9hcmQiIH0sCisgIHsgIDgsIDAsICJMRUQiIH0sCisgICAgICB7MCwgMHgwMSwgIk51bUxvY2sifSwKKyAgICAgIHswLCAweDAyLCAiQ2Fwc0xvY2sifSwKKyAgICAgIHswLCAweDAzLCAiU2Nyb2xsTG9jayJ9LAorICAgICAgezAsIDB4MDQsICJDb21wb3NlIn0sCisgICAgICB7MCwgMHgwNSwgIkthbmEifSwKKyAgeyAgOSwgMCwgIkJ1dHRvbiIgfSwKKyAgeyAxMCwgMCwgIk9yZGluYWwiIH0sCisgIHsgMTIsIDAsICJDb25zdW1lciIgfSwKKyAgICAgIHswLCAweDIzOCwgIkhvcml6b250YWxXaGVlbCJ9LAorICB7IDEzLCAwLCAiRGlnaXRpemVycyIgfSwKKyAgICB7MCwgMHgwMSwgIkRpZ2l0aXplciJ9LAorICAgIHswLCAweDAyLCAiUGVuIn0sCisgICAgezAsIDB4MDMsICJMaWdodFBlbiJ9LAorICAgIHswLCAweDA0LCAiVG91Y2hTY3JlZW4ifSwKKyAgICB7MCwgMHgwNSwgIlRvdWNoUGFkIn0sCisgICAgezAsIDB4MjAsICJTdHlsdXMifSwKKyAgICB7MCwgMHgyMSwgIlB1Y2sifSwKKyAgICB7MCwgMHgyMiwgIkZpbmdlciJ9LAorICAgIHswLCAweDMwLCAiVGlwUHJlc3N1cmUifSwKKyAgICB7MCwgMHgzMSwgIkJhcnJlbFByZXNzdXJlIn0sCisgICAgezAsIDB4MzIsICJJblJhbmdlIn0sCisgICAgezAsIDB4MzMsICJUb3VjaCJ9LAorICAgIHswLCAweDM0LCAiVW5Ub3VjaCJ9LAorICAgIHswLCAweDM1LCAiVGFwIn0sCisgICAgezAsIDB4MzksICJUYWJsZXRGdW5jdGlvbktleSJ9LAorICAgIHswLCAweDNhLCAiUHJvZ3JhbUNoYW5nZUtleSJ9LAorICAgIHswLCAweDNjLCAiSW52ZXJ0In0sCisgICAgezAsIDB4NDIsICJUaXBTd2l0Y2gifSwKKyAgICB7MCwgMHg0MywgIlNlY29uZGFyeVRpcFN3aXRjaCJ9LAorICAgIHswLCAweDQ0LCAiQmFycmVsU3dpdGNoIn0sCisgICAgezAsIDB4NDUsICJFcmFzZXIifSwKKyAgICB7MCwgMHg0NiwgIlRhYmxldFBpY2sifSwKKyAgeyAxNSwgMCwgIlBoeXNpY2FsSW50ZXJmYWNlRGV2aWNlIiB9LAorICAgIHswLCAweDAwLCAiVW5kZWZpbmVkIn0sCisgICAgezAsIDB4MDEsICJQaHlzaWNhbF9JbnRlcmZhY2VfRGV2aWNlIn0sCisgICAgICB7MCwgMHgyMCwgIk5vcm1hbCJ9LAorICAgIHswLCAweDIxLCAiU2V0X0VmZmVjdF9SZXBvcnQifSwKKyAgICAgIHswLCAweDIyLCAiRWZmZWN0X0Jsb2NrX0luZGV4In0sCisgICAgICB7MCwgMHgyMywgIlBhcmFtZXRlcl9CbG9ja19PZmZzZXQifSwKKyAgICAgIHswLCAweDI0LCAiUk9NX0ZsYWcifSwKKyAgICAgIHswLCAweDI1LCAiRWZmZWN0X1R5cGUifSwKKyAgICAgICAgezAsIDB4MjYsICJFVF9Db25zdGFudF9Gb3JjZSJ9LAorICAgICAgICB7MCwgMHgyNywgIkVUX1JhbXAifSwKKyAgICAgICAgezAsIDB4MjgsICJFVF9DdXN0b21fRm9yY2VfRGF0YSJ9LAorICAgICAgICB7MCwgMHgzMCwgIkVUX1NxdWFyZSJ9LAorICAgICAgICB7MCwgMHgzMSwgIkVUX1NpbmUifSwKKyAgICAgICAgezAsIDB4MzIsICJFVF9UcmlhbmdsZSJ9LAorICAgICAgICB7MCwgMHgzMywgIkVUX1Nhd3Rvb3RoX1VwIn0sCisgICAgICAgIHswLCAweDM0LCAiRVRfU2F3dG9vdGhfRG93biJ9LAorICAgICAgICB7MCwgMHg0MCwgIkVUX1NwcmluZyJ9LAorICAgICAgICB7MCwgMHg0MSwgIkVUX0RhbXBlciJ9LAorICAgICAgICB7MCwgMHg0MiwgIkVUX0luZXJ0aWEifSwKKyAgICAgICAgezAsIDB4NDMsICJFVF9GcmljdGlvbiJ9LAorICAgICAgezAsIDB4NTAsICJEdXJhdGlvbiJ9LAorICAgICAgezAsIDB4NTEsICJTYW1wbGVfUGVyaW9kIn0sCisgICAgICB7MCwgMHg1MiwgIkdhaW4ifSwKKyAgICAgIHswLCAweDUzLCAiVHJpZ2dlcl9CdXR0b24ifSwKKyAgICAgIHswLCAweDU0LCAiVHJpZ2dlcl9SZXBlYXRfSW50ZXJ2YWwifSwKKyAgICAgIHswLCAweDU1LCAiQXhlc19FbmFibGUifSwKKyAgICAgICAgezAsIDB4NTYsICJEaXJlY3Rpb25fRW5hYmxlIn0sCisgICAgICB7MCwgMHg1NywgIkRpcmVjdGlvbiJ9LAorICAgICAgezAsIDB4NTgsICJUeXBlX1NwZWNpZmljX0Jsb2NrX09mZnNldCJ9LAorICAgICAgICB7MCwgMHg1OSwgIkJsb2NrX1R5cGUifSwKKyAgICAgICAgezAsIDB4NUEsICJTZXRfRW52ZWxvcGVfUmVwb3J0In0sCisgICAgICAgICAgezAsIDB4NUIsICJBdHRhY2tfTGV2ZWwifSwKKyAgICAgICAgICB7MCwgMHg1QywgIkF0dGFja19UaW1lIn0sCisgICAgICAgICAgezAsIDB4NUQsICJGYWRlX0xldmVsIn0sCisgICAgICAgICAgezAsIDB4NUUsICJGYWRlX1RpbWUifSwKKyAgICAgICAgezAsIDB4NUYsICJTZXRfQ29uZGl0aW9uX1JlcG9ydCJ9LAorICAgICAgICB7MCwgMHg2MCwgIkNQX09mZnNldCJ9LAorICAgICAgICB7MCwgMHg2MSwgIlBvc2l0aXZlX0NvZWZmaWNpZW50In0sCisgICAgICAgIHswLCAweDYyLCAiTmVnYXRpdmVfQ29lZmZpY2llbnQifSwKKyAgICAgICAgezAsIDB4NjMsICJQb3NpdGl2ZV9TYXR1cmF0aW9uIn0sCisgICAgICAgIHswLCAweDY0LCAiTmVnYXRpdmVfU2F0dXJhdGlvbiJ9LAorICAgICAgICB7MCwgMHg2NSwgIkRlYWRfQmFuZCJ9LAorICAgICAgezAsIDB4NjYsICJEb3dubG9hZF9Gb3JjZV9TYW1wbGUifSwKKyAgICAgIHswLCAweDY3LCAiSXNvY2hfQ3VzdG9tX0ZvcmNlX0VuYWJsZSJ9LAorICAgICAgezAsIDB4NjgsICJDdXN0b21fRm9yY2VfRGF0YV9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NjksICJDdXN0b21fRm9yY2VfRGF0YSJ9LAorICAgICAgICB7MCwgMHg2QSwgIkN1c3RvbV9Gb3JjZV9WZW5kb3JfRGVmaW5lZF9EYXRhIn0sCisgICAgICB7MCwgMHg2QiwgIlNldF9DdXN0b21fRm9yY2VfUmVwb3J0In0sCisgICAgICAgIHswLCAweDZDLCAiQ3VzdG9tX0ZvcmNlX0RhdGFfT2Zmc2V0In0sCisgICAgICAgIHswLCAweDZELCAiU2FtcGxlX0NvdW50In0sCisgICAgICB7MCwgMHg2RSwgIlNldF9QZXJpb2RpY19SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NkYsICJPZmZzZXQifSwKKyAgICAgICAgezAsIDB4NzAsICJNYWduaXR1ZGUifSwKKyAgICAgICAgezAsIDB4NzEsICJQaGFzZSJ9LAorICAgICAgICB7MCwgMHg3MiwgIlBlcmlvZCJ9LAorICAgICAgezAsIDB4NzMsICJTZXRfQ29uc3RhbnRfRm9yY2VfUmVwb3J0In0sCisgICAgICAgIHswLCAweDc0LCAiU2V0X1JhbXBfRm9yY2VfUmVwb3J0In0sCisgICAgICAgIHswLCAweDc1LCAiUmFtcF9TdGFydCJ9LAorICAgICAgICB7MCwgMHg3NiwgIlJhbXBfRW5kIn0sCisgICAgICB7MCwgMHg3NywgIkVmZmVjdF9PcGVyYXRpb25fUmVwb3J0In0sCisgICAgICAgIHswLCAweDc4LCAiRWZmZWN0X09wZXJhdGlvbiJ9LAorICAgICAgICAgIHswLCAweDc5LCAiT3BfRWZmZWN0X1N0YXJ0In0sCisgICAgICAgICAgezAsIDB4N0EsICJPcF9FZmZlY3RfU3RhcnRfU29sbyJ9LAorICAgICAgICAgIHswLCAweDdCLCAiT3BfRWZmZWN0X1N0b3AifSwKKyAgICAgICAgICB7MCwgMHg3QywgIkxvb3BfQ291bnQifSwKKyAgICAgIHswLCAweDdELCAiRGV2aWNlX0dhaW5fUmVwb3J0In0sCisgICAgICAgIHswLCAweDdFLCAiRGV2aWNlX0dhaW4ifSwKKyAgICB7MCwgMHg3RiwgIlBJRF9Qb29sX1JlcG9ydCJ9LAorICAgICAgezAsIDB4ODAsICJSQU1fUG9vbF9TaXplIn0sCisgICAgICB7MCwgMHg4MSwgIlJPTV9Qb29sX1NpemUifSwKKyAgICAgIHswLCAweDgyLCAiUk9NX0VmZmVjdF9CbG9ja19Db3VudCJ9LAorICAgICAgezAsIDB4ODMsICJTaW11bHRhbmVvdXNfRWZmZWN0c19NYXgifSwKKyAgICAgIHswLCAweDg0LCAiUG9vbF9BbGlnbm1lbnQifSwKKyAgICB7MCwgMHg4NSwgIlBJRF9Qb29sX01vdmVfUmVwb3J0In0sCisgICAgICB7MCwgMHg4NiwgIk1vdmVfU291cmNlIn0sCisgICAgICB7MCwgMHg4NywgIk1vdmVfRGVzdGluYXRpb24ifSwKKyAgICAgIHswLCAweDg4LCAiTW92ZV9MZW5ndGgifSwKKyAgICB7MCwgMHg4OSwgIlBJRF9CbG9ja19Mb2FkX1JlcG9ydCJ9LAorICAgICAgezAsIDB4OEIsICJCbG9ja19Mb2FkX1N0YXR1cyJ9LAorICAgICAgezAsIDB4OEMsICJCbG9ja19Mb2FkX1N1Y2Nlc3MifSwKKyAgICAgIHswLCAweDhELCAiQmxvY2tfTG9hZF9GdWxsIn0sCisgICAgICB7MCwgMHg4RSwgIkJsb2NrX0xvYWRfRXJyb3IifSwKKyAgICAgIHswLCAweDhGLCAiQmxvY2tfSGFuZGxlIn0sCisgICAgICB7MCwgMHg5MCwgIlBJRF9CbG9ja19GcmVlX1JlcG9ydCJ9LAorICAgICAgezAsIDB4OTEsICJUeXBlX1NwZWNpZmljX0Jsb2NrX0hhbmRsZSJ9LAorICAgIHswLCAweDkyLCAiUElEX1N0YXRlX1JlcG9ydCJ9LAorICAgICAgezAsIDB4OTQsICJFZmZlY3RfUGxheWluZyJ9LAorICAgICAgezAsIDB4OTUsICJQSURfRGV2aWNlX0NvbnRyb2xfUmVwb3J0In0sCisgICAgICAgIHswLCAweDk2LCAiUElEX0RldmljZV9Db250cm9sIn0sCisgICAgICAgIHswLCAweDk3LCAiRENfRW5hYmxlX0FjdHVhdG9ycyJ9LAorICAgICAgICB7MCwgMHg5OCwgIkRDX0Rpc2FibGVfQWN0dWF0b3JzIn0sCisgICAgICAgIHswLCAweDk5LCAiRENfU3RvcF9BbGxfRWZmZWN0cyJ9LAorICAgICAgICB7MCwgMHg5QSwgIkRDX0RldmljZV9SZXNldCJ9LAorICAgICAgICB7MCwgMHg5QiwgIkRDX0RldmljZV9QYXVzZSJ9LAorICAgICAgICB7MCwgMHg5QywgIkRDX0RldmljZV9Db250aW51ZSJ9LAorICAgICAgezAsIDB4OUYsICJEZXZpY2VfUGF1c2VkIn0sCisgICAgICB7MCwgMHhBMCwgIkFjdHVhdG9yc19FbmFibGVkIn0sCisgICAgICB7MCwgMHhBNCwgIlNhZmV0eV9Td2l0Y2gifSwKKyAgICAgIHswLCAweEE1LCAiQWN0dWF0b3JfT3ZlcnJpZGVfU3dpdGNoIn0sCisgICAgICB7MCwgMHhBNiwgIkFjdHVhdG9yX1Bvd2VyIn0sCisgICAgezAsIDB4QTcsICJTdGFydF9EZWxheSJ9LAorICAgIHswLCAweEE4LCAiUGFyYW1ldGVyX0Jsb2NrX1NpemUifSwKKyAgICB7MCwgMHhBOSwgIkRldmljZV9NYW5hZ2VkX1Bvb2wifSwKKyAgICB7MCwgMHhBQSwgIlNoYXJlZF9QYXJhbWV0ZXJfQmxvY2tzIn0sCisgICAgezAsIDB4QUIsICJDcmVhdGVfTmV3X0VmZmVjdF9SZXBvcnQifSwKKyAgICB7MCwgMHhBQywgIlJBTV9Qb29sX0F2YWlsYWJsZSJ9LAorICB7IDB4ODQsIDAsICJQb3dlciBEZXZpY2UiIH0sCisgICAgeyAweDg0LCAweDAyLCAiUHJlc2VudFN0YXR1cyIgfSwKKyAgICB7IDB4ODQsIDB4MDMsICJDaGFuZ2VTdGF0dXMiIH0sCisgICAgeyAweDg0LCAweDA0LCAiVVBTIiB9LAorICAgIHsgMHg4NCwgMHgwNSwgIlBvd2VyU3VwcGx5IiB9LAorICAgIHsgMHg4NCwgMHgxMCwgIkJhdHRlcnlTeXN0ZW0iIH0sCisgICAgeyAweDg0LCAweDExLCAiQmF0dGVyeVN5c3RlbUlEIiB9LAorICAgIHsgMHg4NCwgMHgxMiwgIkJhdHRlcnkiIH0sCisgICAgeyAweDg0LCAweDEzLCAiQmF0dGVyeUlEIiB9LAorICAgIHsgMHg4NCwgMHgxNCwgIkNoYXJnZXIiIH0sCisgICAgeyAweDg0LCAweDE1LCAiQ2hhcmdlcklEIiB9LAorICAgIHsgMHg4NCwgMHgxNiwgIlBvd2VyQ29udmVydGVyIiB9LAorICAgIHsgMHg4NCwgMHgxNywgIlBvd2VyQ29udmVydGVySUQiIH0sCisgICAgeyAweDg0LCAweDE4LCAiT3V0bGV0U3lzdGVtIiB9LAorICAgIHsgMHg4NCwgMHgxOSwgIk91dGxldFN5c3RlbUlEIiB9LAorICAgIHsgMHg4NCwgMHgxYSwgIklucHV0IiB9LAorICAgIHsgMHg4NCwgMHgxYiwgIklucHV0SUQiIH0sCisgICAgeyAweDg0LCAweDFjLCAiT3V0cHV0IiB9LAorICAgIHsgMHg4NCwgMHgxZCwgIk91dHB1dElEIiB9LAorICAgIHsgMHg4NCwgMHgxZSwgIkZsb3ciIH0sCisgICAgeyAweDg0LCAweDFmLCAiRmxvd0lEIiB9LAorICAgIHsgMHg4NCwgMHgyMCwgIk91dGxldCIgfSwKKyAgICB7IDB4ODQsIDB4MjEsICJPdXRsZXRJRCIgfSwKKyAgICB7IDB4ODQsIDB4MjIsICJHYW5nIiB9LAorICAgIHsgMHg4NCwgMHgyNCwgIlBvd2VyU3VtbWFyeSIgfSwKKyAgICB7IDB4ODQsIDB4MjUsICJQb3dlclN1bW1hcnlJRCIgfSwKKyAgICB7IDB4ODQsIDB4MzAsICJWb2x0YWdlIiB9LAorICAgIHsgMHg4NCwgMHgzMSwgIkN1cnJlbnQiIH0sCisgICAgeyAweDg0LCAweDMyLCAiRnJlcXVlbmN5IiB9LAorICAgIHsgMHg4NCwgMHgzMywgIkFwcGFyZW50UG93ZXIiIH0sCisgICAgeyAweDg0LCAweDM1LCAiUGVyY2VudExvYWQiIH0sCisgICAgeyAweDg0LCAweDQwLCAiQ29uZmlnVm9sdGFnZSIgfSwKKyAgICB7IDB4ODQsIDB4NDEsICJDb25maWdDdXJyZW50IiB9LAorICAgIHsgMHg4NCwgMHg0MywgIkNvbmZpZ0FwcGFyZW50UG93ZXIiIH0sCisgICAgeyAweDg0LCAweDUzLCAiTG93Vm9sdGFnZVRyYW5zZmVyIiB9LAorICAgIHsgMHg4NCwgMHg1NCwgIkhpZ2hWb2x0YWdlVHJhbnNmZXIiIH0sCisgICAgeyAweDg0LCAweDU2LCAiRGVsYXlCZWZvcmVTdGFydHVwIiB9LAorICAgIHsgMHg4NCwgMHg1NywgIkRlbGF5QmVmb3JlU2h1dGRvd24iIH0sCisgICAgeyAweDg0LCAweDU4LCAiVGVzdCIgfSwKKyAgICB7IDB4ODQsIDB4NWEsICJBdWRpYmxlQWxhcm1Db250cm9sIiB9LAorICAgIHsgMHg4NCwgMHg2MCwgIlByZXNlbnQiIH0sCisgICAgeyAweDg0LCAweDYxLCAiR29vZCIgfSwKKyAgICB7IDB4ODQsIDB4NjIsICJJbnRlcm5hbEZhaWx1cmUiIH0sCisgICAgeyAweDg0LCAweDY1LCAiT3ZlcmxvYWQiIH0sCisgICAgeyAweDg0LCAweDY2LCAiT3ZlckNoYXJnZWQiIH0sCisgICAgeyAweDg0LCAweDY3LCAiT3ZlclRlbXBlcmF0dXJlIiB9LAorICAgIHsgMHg4NCwgMHg2OCwgIlNodXRkb3duUmVxdWVzdGVkIiB9LAorICAgIHsgMHg4NCwgMHg2OSwgIlNodXRkb3duSW1taW5lbnQiIH0sCisgICAgeyAweDg0LCAweDZiLCAiU3dpdGNoT24vT2ZmIiB9LAorICAgIHsgMHg4NCwgMHg2YywgIlN3aXRjaGFibGUiIH0sCisgICAgeyAweDg0LCAweDZkLCAiVXNlZCIgfSwKKyAgICB7IDB4ODQsIDB4NmUsICJCb29zdCIgfSwKKyAgICB7IDB4ODQsIDB4NzMsICJDb21tdW5pY2F0aW9uTG9zdCIgfSwKKyAgICB7IDB4ODQsIDB4ZmQsICJpTWFudWZhY3R1cmVyIiB9LAorICAgIHsgMHg4NCwgMHhmZSwgImlQcm9kdWN0IiB9LAorICAgIHsgMHg4NCwgMHhmZiwgImlTZXJpYWxOdW1iZXIiIH0sCisgIHsgMHg4NSwgMCwgIkJhdHRlcnkgU3lzdGVtIiB9LAorICAgIHsgMHg4NSwgMHgwMSwgIlNNQkJhdHRlcnlNb2RlIiB9LAorICAgIHsgMHg4NSwgMHgwMiwgIlNNQkJhdHRlcnlTdGF0dXMiIH0sCisgICAgeyAweDg1LCAweDAzLCAiU01CQWxhcm1XYXJuaW5nIiB9LAorICAgIHsgMHg4NSwgMHgwNCwgIlNNQkNoYXJnZXJNb2RlIiB9LAorICAgIHsgMHg4NSwgMHgwNSwgIlNNQkNoYXJnZXJTdGF0dXMiIH0sCisgICAgeyAweDg1LCAweDA2LCAiU01CQ2hhcmdlclNwZWNJbmZvIiB9LAorICAgIHsgMHg4NSwgMHgwNywgIlNNQlNlbGVjdG9yU3RhdGUiIH0sCisgICAgeyAweDg1LCAweDA4LCAiU01CU2VsZWN0b3JQcmVzZXRzIiB9LAorICAgIHsgMHg4NSwgMHgwOSwgIlNNQlNlbGVjdG9ySW5mbyIgfSwKKyAgICB7IDB4ODUsIDB4MjksICJSZW1haW5pbmdDYXBhY2l0eUxpbWl0IiB9LAorICAgIHsgMHg4NSwgMHgyYywgIkNhcGFjaXR5TW9kZSIgfSwKKyAgICB7IDB4ODUsIDB4NDIsICJCZWxvd1JlbWFpbmluZ0NhcGFjaXR5TGltaXQiIH0sCisgICAgeyAweDg1LCAweDQ0LCAiQ2hhcmdpbmciIH0sCisgICAgeyAweDg1LCAweDQ1LCAiRGlzY2hhcmdpbmciIH0sCisgICAgeyAweDg1LCAweDRiLCAiTmVlZFJlcGxhY2VtZW50IiB9LAorICAgIHsgMHg4NSwgMHg2NiwgIlJlbWFpbmluZ0NhcGFjaXR5IiB9LAorICAgIHsgMHg4NSwgMHg2OCwgIlJ1blRpbWVUb0VtcHR5IiB9LAorICAgIHsgMHg4NSwgMHg2YSwgIkF2ZXJhZ2VUaW1lVG9GdWxsIiB9LAorICAgIHsgMHg4NSwgMHg4MywgIkRlc2lnbkNhcGFjaXR5IiB9LAorICAgIHsgMHg4NSwgMHg4NSwgIk1hbnVmYWN0dXJlckRhdGUiIH0sCisgICAgeyAweDg1LCAweDg5LCAiaURldmljZUNoZW1pc3RyeSIgfSwKKyAgICB7IDB4ODUsIDB4OGIsICJSZWNoYXJnYWJsZSIgfSwKKyAgICB7IDB4ODUsIDB4OGYsICJpT0VNSW5mb3JtYXRpb24iIH0sCisgICAgeyAweDg1LCAweDhkLCAiQ2FwYWNpdHlHcmFudWxhcml0eTEiIH0sCisgICAgeyAweDg1LCAweGQwLCAiQUNQcmVzZW50IiB9LAorICAvKiBwYWdlcyAweGZmMDAgdG8gMHhmZmZmIGFyZSB2ZW5kb3Itc3BlY2lmaWMgKi8KKyAgeyAweGZmZmYsIDAsICJWZW5kb3Itc3BlY2lmaWMtRkYiIH0sCisgIHsgMCwgMCwgTlVMTCB9Cit9OworCitzdGF0aWMgdm9pZCByZXNvbHZfdXNhZ2VfcGFnZSh1bnNpZ25lZCBwYWdlKSB7CisJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9lbnRyeSAqcDsKKworCWZvciAocCA9IGhpZF91c2FnZV90YWJsZTsgcC0+ZGVzY3JpcHRpb247IHArKykKKwkJaWYgKHAtPnBhZ2UgPT0gcGFnZSkgeworCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKKwkJCXJldHVybjsKKwkJfQorCXByaW50aygiJTA0eCIsIHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCByZXNvbHZfdXNhZ2UodW5zaWduZWQgdXNhZ2UpIHsKKwljb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5ICpwOworCisJcmVzb2x2X3VzYWdlX3BhZ2UodXNhZ2UgPj4gMTYpOworCXByaW50aygiLiIpOworCWZvciAocCA9IGhpZF91c2FnZV90YWJsZTsgcC0+ZGVzY3JpcHRpb247IHArKykKKwkJaWYgKHAtPnBhZ2UgPT0gKHVzYWdlID4+IDE2KSkgeworCQkJZm9yKCsrcDsgcC0+ZGVzY3JpcHRpb24gJiYgcC0+dXNhZ2UgIT0gMDsgcCsrKQorCQkJCWlmIChwLT51c2FnZSA9PSAodXNhZ2UgJiAweGZmZmYpKSB7CisJCQkJCXByaW50aygiJXMiLCBwLT5kZXNjcmlwdGlvbik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQlicmVhazsKKwkJfQorCXByaW50aygiJTA0eCIsIHVzYWdlICYgMHhmZmZmKTsKK30KKworX19pbmxpbmVfXyBzdGF0aWMgdm9pZCB0YWIoaW50IG4pIHsKKwl3aGlsZSAobi0tKSBwcmludGsoIiAiKTsKK30KKworc3RhdGljIHZvaWQgaGlkX2R1bXBfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIGludCBuKSB7CisJaW50IGo7CisJCisJaWYgKGZpZWxkLT5waHlzaWNhbCkgeworCQl0YWIobik7CisJCXByaW50aygiUGh5c2ljYWwoIik7CisJCXJlc29sdl91c2FnZShmaWVsZC0+cGh5c2ljYWwpOyBwcmludGsoIilcbiIpOworCX0KKwlpZiAoZmllbGQtPmxvZ2ljYWwpIHsKKwkJdGFiKG4pOworCQlwcmludGsoIkxvZ2ljYWwoIik7CisJCXJlc29sdl91c2FnZShmaWVsZC0+bG9naWNhbCk7IHByaW50aygiKVxuIik7CisJfQorCXRhYihuKTsgcHJpbnRrKCJVc2FnZSglZClcbiIsIGZpZWxkLT5tYXh1c2FnZSk7CisJZm9yIChqID0gMDsgaiA8IGZpZWxkLT5tYXh1c2FnZTsgaisrKSB7CisJCXRhYihuKzIpO3Jlc29sdl91c2FnZShmaWVsZC0+dXNhZ2Vbal0uaGlkKTsgcHJpbnRrKCJcbiIpOworCX0KKwlpZiAoZmllbGQtPmxvZ2ljYWxfbWluaW11bSAhPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtKSB7CisJCXRhYihuKTsgcHJpbnRrKCJMb2dpY2FsIE1pbmltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9taW5pbXVtKTsKKwkJdGFiKG4pOyBwcmludGsoIkxvZ2ljYWwgTWF4aW11bSglZClcbiIsIGZpZWxkLT5sb2dpY2FsX21heGltdW0pOworCX0KKwlpZiAoZmllbGQtPnBoeXNpY2FsX21pbmltdW0gIT0gZmllbGQtPnBoeXNpY2FsX21heGltdW0pIHsKKwkJdGFiKG4pOyBwcmludGsoIlBoeXNpY2FsIE1pbmltdW0oJWQpXG4iLCBmaWVsZC0+cGh5c2ljYWxfbWluaW11bSk7CisJCXRhYihuKTsgcHJpbnRrKCJQaHlzaWNhbCBNYXhpbXVtKCVkKVxuIiwgZmllbGQtPnBoeXNpY2FsX21heGltdW0pOworCX0KKwlpZiAoZmllbGQtPnVuaXRfZXhwb25lbnQpIHsKKwkJdGFiKG4pOyBwcmludGsoIlVuaXQgRXhwb25lbnQoJWQpXG4iLCBmaWVsZC0+dW5pdF9leHBvbmVudCk7CisJfQorCWlmIChmaWVsZC0+dW5pdCkgeworCQljaGFyICpzeXN0ZW1zWzVdID0geyAiTm9uZSIsICJTSSBMaW5lYXIiLCAiU0kgUm90YXRpb24iLCAiRW5nbGlzaCBMaW5lYXIiLCAiRW5nbGlzaCBSb3RhdGlvbiIgfTsKKwkJY2hhciAqdW5pdHNbNV1bOF0gPSB7CisJCQl7ICJOb25lIiwgIk5vbmUiLCAiTm9uZSIsICJOb25lIiwgIk5vbmUiLCAiTm9uZSIsICJOb25lIiwgIk5vbmUiIH0sCisJCQl7ICJOb25lIiwgIkNlbnRpbWV0ZXIiLCAiR3JhbSIsICJTZWNvbmRzIiwgIktlbHZpbiIsICAgICAiQW1wZXJlIiwgIkNhbmRlbGEiLCAiTm9uZSIgfSwKKwkJCXsgIk5vbmUiLCAiUmFkaWFucyIsICAgICJHcmFtIiwgIlNlY29uZHMiLCAiS2VsdmluIiwgICAgICJBbXBlcmUiLCAiQ2FuZGVsYSIsICJOb25lIiB9LAorCQkJeyAiTm9uZSIsICJJbmNoIiwgICAgICAgIlNsdWciLCAiU2Vjb25kcyIsICJGYWhyZW5oZWl0IiwgIkFtcGVyZSIsICJDYW5kZWxhIiwgIk5vbmUiIH0sCisJCQl7ICJOb25lIiwgIkRlZ3JlZXMiLCAgICAiU2x1ZyIsICJTZWNvbmRzIiwgIkZhaHJlbmhlaXQiLCAiQW1wZXJlIiwgIkNhbmRlbGEiLCAiTm9uZSIgfQorCQl9OworCisJCWludCBpOworCQlpbnQgc3lzOworICAgICAgICAgICAgICAgIF9fdTMyIGRhdGEgPSBmaWVsZC0+dW5pdDsKKworCQkvKiBGaXJzdCBuaWJibGUgdGVsbHMgdXMgd2hpY2ggc3lzdGVtIHdlJ3JlIGluLiAqLworCQlzeXMgPSBkYXRhICYgMHhmOworCQlkYXRhID4+PSA0OworCisJCWlmKHN5cyA+IDQpIHsKKwkJCXRhYihuKTsgcHJpbnRrKCJVbml0KEludmFsaWQpXG4iKTsKKwkJfQorCQllbHNlIHsKKwkJCWludCBlYXJsaWVyX3VuaXQgPSAwOworCisJCQl0YWIobik7IHByaW50aygiVW5pdCglcyA6ICIsIHN5c3RlbXNbc3lzXSk7CisKKwkJCWZvciAoaT0xIDsgaTxzaXplb2YoX191MzIpKjIgOyBpKyspIHsKKwkJCQljaGFyIG5pYmJsZSA9IGRhdGEgJiAweGY7CisJCQkJZGF0YSA+Pj0gNDsKKwkJCQlpZiAobmliYmxlICE9IDApIHsKKwkJCQkJaWYoZWFybGllcl91bml0KysgPiAwKQorCQkJCQkJcHJpbnRrKCIqIik7CisJCQkJCXByaW50aygiJXMiLCB1bml0c1tzeXNdW2ldKTsKKwkJCQkJaWYobmliYmxlICE9IDEpIHsKKwkJCQkJCS8qIFRoaXMgaXMgYSBfc2lnbmVkXyBuaWJibGUoISkgKi8KKwkKKwkJCQkJCWludCB2YWwgPSBuaWJibGUgJiAweDc7CisJCQkJCQlpZihuaWJibGUgJiAweDA4KQorCQkJCQkJCXZhbCA9IC0oKDB4NyAmIH52YWwpICsxKTsKKwkJCQkJCXByaW50aygiXiVkIiwgdmFsKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXByaW50aygiKVxuIik7CisJCX0KKwl9CisJdGFiKG4pOyBwcmludGsoIlJlcG9ydCBTaXplKCV1KVxuIiwgZmllbGQtPnJlcG9ydF9zaXplKTsKKwl0YWIobik7IHByaW50aygiUmVwb3J0IENvdW50KCV1KVxuIiwgZmllbGQtPnJlcG9ydF9jb3VudCk7CisJdGFiKG4pOyBwcmludGsoIlJlcG9ydCBPZmZzZXQoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X29mZnNldCk7CisKKwl0YWIobik7IHByaW50aygiRmxhZ3MoICIpOworCWogPSBmaWVsZC0+ZmxhZ3M7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQgJiBqID8gIkNvbnN0YW50ICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUgJiBqID8gIlZhcmlhYmxlICIgOiAiQXJyYXkgIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUgJiBqID8gIlJlbGF0aXZlICIgOiAiQWJzb2x1dGUgIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fV1JBUCAmIGogPyAiV3JhcCAiIDogIiIpOworCXByaW50aygiJXMiLCBISURfTUFJTl9JVEVNX05PTkxJTkVBUiAmIGogPyAiTm9uTGluZWFyICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTk9fUFJFRkVSUkVEICYgaiA/ICJOb1ByZWZmZXJlZFN0YXRlICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTlVMTF9TVEFURSAmIGogPyAiTnVsbFN0YXRlICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fVk9MQVRJTEUgJiBqID8gIlZvbGF0aWxlICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fQlVGRkVSRURfQllURSAmIGogPyAiQnVmZmVyZWRCeXRlICIgOiAiIik7CisJcHJpbnRrKCIpXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaGlkX2R1bXBfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJdW5zaWduZWQgaSxrOworCXN0YXRpYyBjaGFyICp0YWJsZVtdID0geyJJTlBVVCIsICJPVVRQVVQiLCAiRkVBVFVSRSJ9OworCQorCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspIHsKKwkJcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgaTsKKwkJbGlzdCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdC5uZXh0OworCQl3aGlsZSAobGlzdCAhPSAmcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0KSB7CisJCQlyZXBvcnQgPSAoc3RydWN0IGhpZF9yZXBvcnQgKikgbGlzdDsKKwkJCXRhYigyKTsKKwkJCXByaW50aygiJXMiLCB0YWJsZVtpXSk7CisJCQlpZiAocmVwb3J0LT5pZCkKKwkJCQlwcmludGsoIiglZCkiLCByZXBvcnQtPmlkKTsKKwkJCXByaW50aygiWyVzXSIsIHRhYmxlW3JlcG9ydC0+dHlwZV0pOworCQkJcHJpbnRrKCJcbiIpOworCQkJZm9yIChrID0gMDsgayA8IHJlcG9ydC0+bWF4ZmllbGQ7IGsrKykgeworCQkJCXRhYig0KTsKKwkJCQlwcmludGsoIkZpZWxkKCVkKVxuIiwgayk7CisJCQkJaGlkX2R1bXBfZmllbGQocmVwb3J0LT5maWVsZFtrXSwgNik7CisJCQl9CisJCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaGlkX2R1bXBfaW5wdXQoc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKSB7CisJcHJpbnRrKCJoaWQtZGVidWc6IGlucHV0ICIpOworCXJlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKKwlwcmludGsoIiA9ICVkXG4iLCB2YWx1ZSk7Cit9CisKKworc3RhdGljIGNoYXIgKmV2ZW50c1tFVl9NQVggKyAxXSA9IHsKKwlbRVZfU1lOXSA9ICJTeW5jIiwJCQlbRVZfS0VZXSA9ICJLZXkiLAorCVtFVl9SRUxdID0gIlJlbGF0aXZlIiwJCQlbRVZfQUJTXSA9ICJBYnNvbHV0ZSIsCisJW0VWX01TQ10gPSAiTWlzYyIsCQkJW0VWX0xFRF0gPSAiTEVEIiwKKwlbRVZfU05EXSA9ICJTb3VuZCIsCQkJW0VWX1JFUF0gPSAiUmVwZWF0IiwKKwlbRVZfRkZdID0gIkZvcmNlRmVlZGJhY2siLAkJW0VWX1BXUl0gPSAiUG93ZXIiLAorCVtFVl9GRl9TVEFUVVNdID0gIkZvcmNlRmVlZGJhY2tTdGF0dXMiLAorfTsKKworc3RhdGljIGNoYXIgKnN5bmNzWzJdID0geworCVtTWU5fUkVQT1JUXSA9ICJSZXBvcnQiLAkJW1NZTl9DT05GSUddID0gIkNvbmZpZyIsCit9Oworc3RhdGljIGNoYXIgKmtleXNbS0VZX01BWCArIDFdID0geworCVtLRVlfUkVTRVJWRURdID0gIlJlc2VydmVkIiwJCVtLRVlfRVNDXSA9ICJFc2MiLAorCVtLRVlfMV0gPSAiMSIsCQkJCVtLRVlfMl0gPSAiMiIsCisJW0tFWV8zXSA9ICIzIiwJCQkJW0tFWV80XSA9ICI0IiwKKwlbS0VZXzVdID0gIjUiLAkJCQlbS0VZXzZdID0gIjYiLAorCVtLRVlfN10gPSAiNyIsCQkJCVtLRVlfOF0gPSAiOCIsCisJW0tFWV85XSA9ICI5IiwJCQkJW0tFWV8wXSA9ICIwIiwKKwlbS0VZX01JTlVTXSA9ICJNaW51cyIsCQkJW0tFWV9FUVVBTF0gPSAiRXF1YWwiLAorCVtLRVlfQkFDS1NQQUNFXSA9ICJCYWNrc3BhY2UiLAkJW0tFWV9UQUJdID0gIlRhYiIsCisJW0tFWV9RXSA9ICJRIiwJCQkJW0tFWV9XXSA9ICJXIiwKKwlbS0VZX0VdID0gIkUiLAkJCQlbS0VZX1JdID0gIlIiLAorCVtLRVlfVF0gPSAiVCIsCQkJCVtLRVlfWV0gPSAiWSIsCisJW0tFWV9VXSA9ICJVIiwJCQkJW0tFWV9JXSA9ICJJIiwKKwlbS0VZX09dID0gIk8iLAkJCQlbS0VZX1BdID0gIlAiLAorCVtLRVlfTEVGVEJSQUNFXSA9ICJMZWZ0QnJhY2UiLAkJW0tFWV9SSUdIVEJSQUNFXSA9ICJSaWdodEJyYWNlIiwKKwlbS0VZX0VOVEVSXSA9ICJFbnRlciIsCQkJW0tFWV9MRUZUQ1RSTF0gPSAiTGVmdENvbnRyb2wiLAorCVtLRVlfQV0gPSAiQSIsCQkJCVtLRVlfU10gPSAiUyIsCisJW0tFWV9EXSA9ICJEIiwJCQkJW0tFWV9GXSA9ICJGIiwKKwlbS0VZX0ddID0gIkciLAkJCQlbS0VZX0hdID0gIkgiLAorCVtLRVlfSl0gPSAiSiIsCQkJCVtLRVlfS10gPSAiSyIsCisJW0tFWV9MXSA9ICJMIiwJCQkJW0tFWV9TRU1JQ09MT05dID0gIlNlbWljb2xvbiIsCisJW0tFWV9BUE9TVFJPUEhFXSA9ICJBcG9zdHJvcGhlIiwJW0tFWV9HUkFWRV0gPSAiR3JhdmUiLAorCVtLRVlfTEVGVFNISUZUXSA9ICJMZWZ0U2hpZnQiLAkJW0tFWV9CQUNLU0xBU0hdID0gIkJhY2tTbGFzaCIsCisJW0tFWV9aXSA9ICJaIiwJCQkJW0tFWV9YXSA9ICJYIiwKKwlbS0VZX0NdID0gIkMiLAkJCQlbS0VZX1ZdID0gIlYiLAorCVtLRVlfQl0gPSAiQiIsCQkJCVtLRVlfTl0gPSAiTiIsCisJW0tFWV9NXSA9ICJNIiwJCQkJW0tFWV9DT01NQV0gPSAiQ29tbWEiLAorCVtLRVlfRE9UXSA9ICJEb3QiLAkJCVtLRVlfU0xBU0hdID0gIlNsYXNoIiwKKwlbS0VZX1JJR0hUU0hJRlRdID0gIlJpZ2h0U2hpZnQiLAlbS0VZX0tQQVNURVJJU0tdID0gIktQQXN0ZXJpc2siLAorCVtLRVlfTEVGVEFMVF0gPSAiTGVmdEFsdCIsCQlbS0VZX1NQQUNFXSA9ICJTcGFjZSIsCisJW0tFWV9DQVBTTE9DS10gPSAiQ2Fwc0xvY2siLAkJW0tFWV9GMV0gPSAiRjEiLAorCVtLRVlfRjJdID0gIkYyIiwJCQlbS0VZX0YzXSA9ICJGMyIsCisJW0tFWV9GNF0gPSAiRjQiLAkJCVtLRVlfRjVdID0gIkY1IiwKKwlbS0VZX0Y2XSA9ICJGNiIsCQkJW0tFWV9GN10gPSAiRjciLAorCVtLRVlfRjhdID0gIkY4IiwJCQlbS0VZX0Y5XSA9ICJGOSIsCisJW0tFWV9GMTBdID0gIkYxMCIsCQkJW0tFWV9OVU1MT0NLXSA9ICJOdW1Mb2NrIiwKKwlbS0VZX1NDUk9MTExPQ0tdID0gIlNjcm9sbExvY2siLAlbS0VZX0tQN10gPSAiS1A3IiwKKwlbS0VZX0tQOF0gPSAiS1A4IiwJCQlbS0VZX0tQOV0gPSAiS1A5IiwKKwlbS0VZX0tQTUlOVVNdID0gIktQTWludXMiLAkJW0tFWV9LUDRdID0gIktQNCIsCisJW0tFWV9LUDVdID0gIktQNSIsCQkJW0tFWV9LUDZdID0gIktQNiIsCisJW0tFWV9LUFBMVVNdID0gIktQUGx1cyIsCQlbS0VZX0tQMV0gPSAiS1AxIiwKKwlbS0VZX0tQMl0gPSAiS1AyIiwJCQlbS0VZX0tQM10gPSAiS1AzIiwKKwlbS0VZX0tQMF0gPSAiS1AwIiwJCQlbS0VZX0tQRE9UXSA9ICJLUERvdCIsCisJW0tFWV9aRU5LQUtVSEFOS0FLVV0gPSAiWmVua2FrdS9IYW5rYWt1IiwgW0tFWV8xMDJORF0gPSAiMTAybmQiLAorCVtLRVlfRjExXSA9ICJGMTEiLAkJCVtLRVlfRjEyXSA9ICJGMTIiLAorCVtLRVlfUk9dID0gIlJPIiwJCQlbS0VZX0tBVEFLQU5BXSA9ICJLYXRha2FuYSIsCisJW0tFWV9ISVJBR0FOQV0gPSAiSElSQUdBTkEiLAkJW0tFWV9IRU5LQU5dID0gIkhlbmthbiIsCisJW0tFWV9LQVRBS0FOQUhJUkFHQU5BXSA9ICJLYXRha2FuYS9IaXJhZ2FuYSIsIFtLRVlfTVVIRU5LQU5dID0gIk11aGVua2FuIiwKKwlbS0VZX0tQSlBDT01NQV0gPSAiS1BKcENvbW1hIiwJCVtLRVlfS1BFTlRFUl0gPSAiS1BFbnRlciIsCisJW0tFWV9SSUdIVENUUkxdID0gIlJpZ2h0Q3RybCIsCQlbS0VZX0tQU0xBU0hdID0gIktQU2xhc2giLAorCVtLRVlfU1lTUlFdID0gIlN5c1JxIiwJCQlbS0VZX1JJR0hUQUxUXSA9ICJSaWdodEFsdCIsCisJW0tFWV9MSU5FRkVFRF0gPSAiTGluZUZlZWQiLAkJW0tFWV9IT01FXSA9ICJIb21lIiwKKwlbS0VZX1VQXSA9ICJVcCIsCQkJW0tFWV9QQUdFVVBdID0gIlBhZ2VVcCIsCisJW0tFWV9MRUZUXSA9ICJMZWZ0IiwJCQlbS0VZX1JJR0hUXSA9ICJSaWdodCIsCisJW0tFWV9FTkRdID0gIkVuZCIsCQkJW0tFWV9ET1dOXSA9ICJEb3duIiwKKwlbS0VZX1BBR0VET1dOXSA9ICJQYWdlRG93biIsCQlbS0VZX0lOU0VSVF0gPSAiSW5zZXJ0IiwKKwlbS0VZX0RFTEVURV0gPSAiRGVsZXRlIiwJCVtLRVlfTUFDUk9dID0gIk1hY3JvIiwKKwlbS0VZX01VVEVdID0gIk11dGUiLAkJCVtLRVlfVk9MVU1FRE9XTl0gPSAiVm9sdW1lRG93biIsCisJW0tFWV9WT0xVTUVVUF0gPSAiVm9sdW1lVXAiLAkJW0tFWV9QT1dFUl0gPSAiUG93ZXIiLAorCVtLRVlfS1BFUVVBTF0gPSAiS1BFcXVhbCIsCQlbS0VZX0tQUExVU01JTlVTXSA9ICJLUFBsdXNNaW51cyIsCisJW0tFWV9QQVVTRV0gPSAiUGF1c2UiLAkJCVtLRVlfS1BDT01NQV0gPSAiS1BDb21tYSIsCisJW0tFWV9IQU5HVUVMXSA9ICJIYW5ndWVsIiwJCVtLRVlfSEFOSkFdID0gIkhhbmphIiwKKwlbS0VZX1lFTl0gPSAiWWVuIiwJCQlbS0VZX0xFRlRNRVRBXSA9ICJMZWZ0TWV0YSIsCisJW0tFWV9SSUdIVE1FVEFdID0gIlJpZ2h0TWV0YSIsCQlbS0VZX0NPTVBPU0VdID0gIkNvbXBvc2UiLAorCVtLRVlfU1RPUF0gPSAiU3RvcCIsCQkJW0tFWV9BR0FJTl0gPSAiQWdhaW4iLAorCVtLRVlfUFJPUFNdID0gIlByb3BzIiwJCQlbS0VZX1VORE9dID0gIlVuZG8iLAorCVtLRVlfRlJPTlRdID0gIkZyb250IiwJCQlbS0VZX0NPUFldID0gIkNvcHkiLAorCVtLRVlfT1BFTl0gPSAiT3BlbiIsCQkJW0tFWV9QQVNURV0gPSAiUGFzdGUiLAorCVtLRVlfRklORF0gPSAiRmluZCIsCQkJW0tFWV9DVVRdID0gIkN1dCIsCisJW0tFWV9IRUxQXSA9ICJIZWxwIiwJCQlbS0VZX01FTlVdID0gIk1lbnUiLAorCVtLRVlfQ0FMQ10gPSAiQ2FsYyIsCQkJW0tFWV9TRVRVUF0gPSAiU2V0dXAiLAorCVtLRVlfU0xFRVBdID0gIlNsZWVwIiwJCQlbS0VZX1dBS0VVUF0gPSAiV2FrZVVwIiwKKwlbS0VZX0ZJTEVdID0gIkZpbGUiLAkJCVtLRVlfU0VOREZJTEVdID0gIlNlbmRGaWxlIiwKKwlbS0VZX0RFTEVURUZJTEVdID0gIkRlbGV0ZUZpbGUiLAlbS0VZX1hGRVJdID0gIlgtZmVyIiwKKwlbS0VZX1BST0cxXSA9ICJQcm9nMSIsCQkJW0tFWV9QUk9HMl0gPSAiUHJvZzIiLAorCVtLRVlfV1dXXSA9ICJXV1ciLAkJCVtLRVlfTVNET1NdID0gIk1TRE9TIiwKKwlbS0VZX0NPRkZFRV0gPSAiQ29mZmVlIiwJCVtLRVlfRElSRUNUSU9OXSA9ICJEaXJlY3Rpb24iLAorCVtLRVlfQ1lDTEVXSU5ET1dTXSA9ICJDeWNsZVdpbmRvd3MiLAlbS0VZX01BSUxdID0gIk1haWwiLAorCVtLRVlfQk9PS01BUktTXSA9ICJCb29rbWFya3MiLAkJW0tFWV9DT01QVVRFUl0gPSAiQ29tcHV0ZXIiLAorCVtLRVlfQkFDS10gPSAiQmFjayIsCQkJW0tFWV9GT1JXQVJEXSA9ICJGb3J3YXJkIiwKKwlbS0VZX0NMT1NFQ0RdID0gIkNsb3NlQ0QiLAkJW0tFWV9FSkVDVENEXSA9ICJFamVjdENEIiwKKwlbS0VZX0VKRUNUQ0xPU0VDRF0gPSAiRWplY3RDbG9zZUNEIiwJW0tFWV9ORVhUU09OR10gPSAiTmV4dFNvbmciLAorCVtLRVlfUExBWVBBVVNFXSA9ICJQbGF5UGF1c2UiLAkJW0tFWV9QUkVWSU9VU1NPTkddID0gIlByZXZpb3VzU29uZyIsCisJW0tFWV9TVE9QQ0RdID0gIlN0b3BDRCIsCQlbS0VZX1JFQ09SRF0gPSAiUmVjb3JkIiwKKwlbS0VZX1JFV0lORF0gPSAiUmV3aW5kIiwJCVtLRVlfUEhPTkVdID0gIlBob25lIiwKKwlbS0VZX0lTT10gPSAiSVNPS2V5IiwJCQlbS0VZX0NPTkZJR10gPSAiQ29uZmlnIiwKKwlbS0VZX0hPTUVQQUdFXSA9ICJIb21lUGFnZSIsCQlbS0VZX1JFRlJFU0hdID0gIlJlZnJlc2giLAorCVtLRVlfRVhJVF0gPSAiRXhpdCIsCQkJW0tFWV9NT1ZFXSA9ICJNb3ZlIiwKKwlbS0VZX0VESVRdID0gIkVkaXQiLAkJCVtLRVlfU0NST0xMVVBdID0gIlNjcm9sbFVwIiwKKwlbS0VZX1NDUk9MTERPV05dID0gIlNjcm9sbERvd24iLAlbS0VZX0tQTEVGVFBBUkVOXSA9ICJLUExlZnRQYXJlbnRoZXNpcyIsCisJW0tFWV9LUFJJR0hUUEFSRU5dID0gIktQUmlnaHRQYXJlbnRoZXNpcyIsIFtLRVlfRjEzXSA9ICJGMTMiLAorCVtLRVlfRjE0XSA9ICJGMTQiLAkJCVtLRVlfRjE1XSA9ICJGMTUiLAorCVtLRVlfRjE2XSA9ICJGMTYiLAkJCVtLRVlfRjE3XSA9ICJGMTciLAorCVtLRVlfRjE4XSA9ICJGMTgiLAkJCVtLRVlfRjE5XSA9ICJGMTkiLAorCVtLRVlfRjIwXSA9ICJGMjAiLAkJCVtLRVlfRjIxXSA9ICJGMjEiLAorCVtLRVlfRjIyXSA9ICJGMjIiLAkJCVtLRVlfRjIzXSA9ICJGMjMiLAorCVtLRVlfRjI0XSA9ICJGMjQiLAkJCVtLRVlfUExBWUNEXSA9ICJQbGF5Q0QiLAorCVtLRVlfUEFVU0VDRF0gPSAiUGF1c2VDRCIsCQlbS0VZX1BST0czXSA9ICJQcm9nMyIsCisJW0tFWV9QUk9HNF0gPSAiUHJvZzQiLAkJCVtLRVlfU1VTUEVORF0gPSAiU3VzcGVuZCIsCisJW0tFWV9DTE9TRV0gPSAiQ2xvc2UiLAkJCVtLRVlfUExBWV0gPSAiUGxheSIsCisJW0tFWV9GQVNURk9SV0FSRF0gPSAiRmFzdCBGb3J3YXJkIiwJW0tFWV9CQVNTQk9PU1RdID0gIkJhc3MgQm9vc3QiLAorCVtLRVlfUFJJTlRdID0gIlByaW50IiwJCQlbS0VZX0hQXSA9ICJIUCIsCisJW0tFWV9DQU1FUkFdID0gIkNhbWVyYSIsCQlbS0VZX1NPVU5EXSA9ICJTb3VuZCIsCisJW0tFWV9RVUVTVElPTl0gPSAiUXVlc3Rpb24iLAkJW0tFWV9FTUFJTF0gPSAiRW1haWwiLAorCVtLRVlfQ0hBVF0gPSAiQ2hhdCIsCQkJW0tFWV9TRUFSQ0hdID0gIlNlYXJjaCIsCisJW0tFWV9DT05ORUNUXSA9ICJDb25uZWN0IiwJCVtLRVlfRklOQU5DRV0gPSAiRmluYW5jZSIsCisJW0tFWV9TUE9SVF0gPSAiU3BvcnQiLAkJCVtLRVlfU0hPUF0gPSAiU2hvcCIsCisJW0tFWV9BTFRFUkFTRV0gPSAiQWx0ZXJuYXRlIEVyYXNlIiwJW0tFWV9DQU5DRUxdID0gIkNhbmNlbCIsCisJW0tFWV9CUklHSFRORVNTRE9XTl0gPSAiQnJpZ2h0bmVzcyBkb3duIiwgW0tFWV9CUklHSFRORVNTVVBdID0gIkJyaWdodG5lc3MgdXAiLAorCVtLRVlfTUVESUFdID0gIk1lZGlhIiwJCQlbS0VZX1VOS05PV05dID0gIlVua25vd24iLAorCVtCVE5fMF0gPSAiQnRuMCIsCQkJW0JUTl8xXSA9ICJCdG4xIiwKKwlbQlROXzJdID0gIkJ0bjIiLAkJCVtCVE5fM10gPSAiQnRuMyIsCisJW0JUTl80XSA9ICJCdG40IiwJCQlbQlROXzVdID0gIkJ0bjUiLAorCVtCVE5fNl0gPSAiQnRuNiIsCQkJW0JUTl83XSA9ICJCdG43IiwKKwlbQlROXzhdID0gIkJ0bjgiLAkJCVtCVE5fOV0gPSAiQnRuOSIsCisJW0JUTl9MRUZUXSA9ICJMZWZ0QnRuIiwJCQlbQlROX1JJR0hUXSA9ICJSaWdodEJ0biIsCisJW0JUTl9NSURETEVdID0gIk1pZGRsZUJ0biIsCQlbQlROX1NJREVdID0gIlNpZGVCdG4iLAorCVtCVE5fRVhUUkFdID0gIkV4dHJhQnRuIiwJCVtCVE5fRk9SV0FSRF0gPSAiRm9yd2FyZEJ0biIsCisJW0JUTl9CQUNLXSA9ICJCYWNrQnRuIiwJCQlbQlROX1RBU0tdID0gIlRhc2tCdG4iLAorCVtCVE5fVFJJR0dFUl0gPSAiVHJpZ2dlciIsCQlbQlROX1RIVU1CXSA9ICJUaHVtYkJ0biIsCisJW0JUTl9USFVNQjJdID0gIlRodW1iQnRuMiIsCQlbQlROX1RPUF0gPSAiVG9wQnRuIiwKKwlbQlROX1RPUDJdID0gIlRvcEJ0bjIiLAkJCVtCVE5fUElOS0lFXSA9ICJQaW5raWVCdG4iLAorCVtCVE5fQkFTRV0gPSAiQmFzZUJ0biIsCQkJW0JUTl9CQVNFMl0gPSAiQmFzZUJ0bjIiLAorCVtCVE5fQkFTRTNdID0gIkJhc2VCdG4zIiwJCVtCVE5fQkFTRTRdID0gIkJhc2VCdG40IiwKKwlbQlROX0JBU0U1XSA9ICJCYXNlQnRuNSIsCQlbQlROX0JBU0U2XSA9ICJCYXNlQnRuNiIsCisJW0JUTl9ERUFEXSA9ICJCdG5EZWFkIiwJCQlbQlROX0FdID0gIkJ0bkEiLAorCVtCVE5fQl0gPSAiQnRuQiIsCQkJW0JUTl9DXSA9ICJCdG5DIiwKKwlbQlROX1hdID0gIkJ0blgiLAkJCVtCVE5fWV0gPSAiQnRuWSIsCisJW0JUTl9aXSA9ICJCdG5aIiwJCQlbQlROX1RMXSA9ICJCdG5UTCIsCisJW0JUTl9UUl0gPSAiQnRuVFIiLAkJCVtCVE5fVEwyXSA9ICJCdG5UTDIiLAorCVtCVE5fVFIyXSA9ICJCdG5UUjIiLAkJCVtCVE5fU0VMRUNUXSA9ICJCdG5TZWxlY3QiLAorCVtCVE5fU1RBUlRdID0gIkJ0blN0YXJ0IiwJCVtCVE5fTU9ERV0gPSAiQnRuTW9kZSIsCisJW0JUTl9USFVNQkxdID0gIkJ0blRodW1iTCIsCQlbQlROX1RIVU1CUl0gPSAiQnRuVGh1bWJSIiwKKwlbQlROX1RPT0xfUEVOXSA9ICJUb29sUGVuIiwJCVtCVE5fVE9PTF9SVUJCRVJdID0gIlRvb2xSdWJiZXIiLAorCVtCVE5fVE9PTF9CUlVTSF0gPSAiVG9vbEJydXNoIiwJCVtCVE5fVE9PTF9QRU5DSUxdID0gIlRvb2xQZW5jaWwiLAorCVtCVE5fVE9PTF9BSVJCUlVTSF0gPSAiVG9vbEFpcmJydXNoIiwJW0JUTl9UT09MX0ZJTkdFUl0gPSAiVG9vbEZpbmdlciIsCisJW0JUTl9UT09MX01PVVNFXSA9ICJUb29sTW91c2UiLAkJW0JUTl9UT09MX0xFTlNdID0gIlRvb2xMZW5zIiwKKwlbQlROX1RPVUNIXSA9ICJUb3VjaCIsCQkJW0JUTl9TVFlMVVNdID0gIlN0eWx1cyIsCisJW0JUTl9TVFlMVVMyXSA9ICJTdHlsdXMyIiwJCVtCVE5fVE9PTF9ET1VCTEVUQVBdID0gIlRvb2wgRG91YmxldGFwIiwKKwlbQlROX1RPT0xfVFJJUExFVEFQXSA9ICJUb29sIFRyaXBsZXRhcCIsIFtCVE5fR0VBUl9ET1dOXSA9ICJXaGVlbEJ0biIsCisJW0JUTl9HRUFSX1VQXSA9ICJHZWFyIHVwIiwJCVtLRVlfT0tdID0gIk9rIiwKKwlbS0VZX1NFTEVDVF0gPSAiU2VsZWN0IiwJCVtLRVlfR09UT10gPSAiR290byIsCisJW0tFWV9DTEVBUl0gPSAiQ2xlYXIiLAkJCVtLRVlfUE9XRVIyXSA9ICJQb3dlcjIiLAorCVtLRVlfT1BUSU9OXSA9ICJPcHRpb24iLAkJW0tFWV9JTkZPXSA9ICJJbmZvIiwKKwlbS0VZX1RJTUVdID0gIlRpbWUiLAkJCVtLRVlfVkVORE9SXSA9ICJWZW5kb3IiLAorCVtLRVlfQVJDSElWRV0gPSAiQXJjaGl2ZSIsCQlbS0VZX1BST0dSQU1dID0gIlByb2dyYW0iLAorCVtLRVlfQ0hBTk5FTF0gPSAiQ2hhbm5lbCIsCQlbS0VZX0ZBVk9SSVRFU10gPSAiRmF2b3JpdGVzIiwKKwlbS0VZX0VQR10gPSAiRVBHIiwJCQlbS0VZX1BWUl0gPSAiUFZSIiwKKwlbS0VZX01IUF0gPSAiTUhQIiwJCQlbS0VZX0xBTkdVQUdFXSA9ICJMYW5ndWFnZSIsCisJW0tFWV9USVRMRV0gPSAiVGl0bGUiLAkJCVtLRVlfU1VCVElUTEVdID0gIlN1YnRpdGxlIiwKKwlbS0VZX0FOR0xFXSA9ICJBbmdsZSIsCQkJW0tFWV9aT09NXSA9ICJab29tIiwKKwlbS0VZX01PREVdID0gIk1vZGUiLAkJCVtLRVlfS0VZQk9BUkRdID0gIktleWJvYXJkIiwKKwlbS0VZX1NDUkVFTl0gPSAiU2NyZWVuIiwJCVtLRVlfUENdID0gIlBDIiwKKwlbS0VZX1RWXSA9ICJUViIsCQkJW0tFWV9UVjJdID0gIlRWMiIsCisJW0tFWV9WQ1JdID0gIlZDUiIsCQkJW0tFWV9WQ1IyXSA9ICJWQ1IyIiwKKwlbS0VZX1NBVF0gPSAiU2F0IiwJCQlbS0VZX1NBVDJdID0gIlNhdDIiLAorCVtLRVlfQ0RdID0gIkNEIiwJCQlbS0VZX1RBUEVdID0gIlRhcGUiLAorCVtLRVlfUkFESU9dID0gIlJhZGlvIiwJCQlbS0VZX1RVTkVSXSA9ICJUdW5lciIsCisJW0tFWV9QTEFZRVJdID0gIlBsYXllciIsCQlbS0VZX1RFWFRdID0gIlRleHQiLAorCVtLRVlfRFZEXSA9ICJEVkQiLAkJCVtLRVlfQVVYXSA9ICJBdXgiLAorCVtLRVlfTVAzXSA9ICJNUDMiLAkJCVtLRVlfQVVESU9dID0gIkF1ZGlvIiwKKwlbS0VZX1ZJREVPXSA9ICJWaWRlbyIsCQkJW0tFWV9ESVJFQ1RPUlldID0gIkRpcmVjdG9yeSIsCisJW0tFWV9MSVNUXSA9ICJMaXN0IiwJCQlbS0VZX01FTU9dID0gIk1lbW8iLAorCVtLRVlfQ0FMRU5EQVJdID0gIkNhbGVuZGFyIiwJCVtLRVlfUkVEXSA9ICJSZWQiLAorCVtLRVlfR1JFRU5dID0gIkdyZWVuIiwJCQlbS0VZX1lFTExPV10gPSAiWWVsbG93IiwKKwlbS0VZX0JMVUVdID0gIkJsdWUiLAkJCVtLRVlfQ0hBTk5FTFVQXSA9ICJDaGFubmVsVXAiLAorCVtLRVlfQ0hBTk5FTERPV05dID0gIkNoYW5uZWxEb3duIiwJW0tFWV9GSVJTVF0gPSAiRmlyc3QiLAorCVtLRVlfTEFTVF0gPSAiTGFzdCIsCQkJW0tFWV9BQl0gPSAiQUIiLAorCVtLRVlfTkVYVF0gPSAiTmV4dCIsCQkJW0tFWV9SRVNUQVJUXSA9ICJSZXN0YXJ0IiwKKwlbS0VZX1NMT1ddID0gIlNsb3ciLAkJCVtLRVlfU0hVRkZMRV0gPSAiU2h1ZmZsZSIsCisJW0tFWV9CUkVBS10gPSAiQnJlYWsiLAkJCVtLRVlfUFJFVklPVVNdID0gIlByZXZpb3VzIiwKKwlbS0VZX0RJR0lUU10gPSAiRGlnaXRzIiwJCVtLRVlfVEVFTl0gPSAiVEVFTiIsCisJW0tFWV9UV0VOXSA9ICJUV0VOIiwJCQlbS0VZX0RFTF9FT0xdID0gIkRlbGV0ZUVPTCIsCisJW0tFWV9ERUxfRU9TXSA9ICJEZWxldGVFT1MiLAkJW0tFWV9JTlNfTElORV0gPSAiSW5zZXJ0TGluZSIsCisJW0tFWV9ERUxfTElORV0gPSAiRGVsZXRlTGluZSIsCit9OworCitzdGF0aWMgY2hhciAqcmVsYXRpdmVzW1JFTF9NQVggKyAxXSA9IHsKKwlbUkVMX1hdID0gIlgiLAkJCVtSRUxfWV0gPSAiWSIsCisJW1JFTF9aXSA9ICJaIiwJCQlbUkVMX0hXSEVFTF0gPSAiSFdoZWVsIiwKKwlbUkVMX0RJQUxdID0gIkRpYWwiLAkJW1JFTF9XSEVFTF0gPSAiV2hlZWwiLCAKKwlbUkVMX01JU0NdID0gIk1pc2MiLAkKK307CisKK3N0YXRpYyBjaGFyICphYnNvbHV0ZXNbQUJTX01BWCArIDFdID0geworCVtBQlNfWF0gPSAiWCIsCQkJW0FCU19ZXSA9ICJZIiwKKwlbQUJTX1pdID0gIloiLAkJCVtBQlNfUlhdID0gIlJ4IiwKKwlbQUJTX1JZXSA9ICJSeSIsCQlbQUJTX1JaXSA9ICJSeiIsCisJW0FCU19USFJPVFRMRV0gPSAiVGhyb3R0bGUiLAlbQUJTX1JVRERFUl0gPSAiUnVkZGVyIiwKKwlbQUJTX1dIRUVMXSA9ICJXaGVlbCIsCQlbQUJTX0dBU10gPSAiR2FzIiwKKwlbQUJTX0JSQUtFXSA9ICJCcmFrZSIsCQlbQUJTX0hBVDBYXSA9ICJIYXQwWCIsCisJW0FCU19IQVQwWV0gPSAiSGF0MFkiLAkJW0FCU19IQVQxWF0gPSAiSGF0MVgiLAorCVtBQlNfSEFUMVldID0gIkhhdDFZIiwJCVtBQlNfSEFUMlhdID0gIkhhdDJYIiwKKwlbQUJTX0hBVDJZXSA9ICJIYXQyWSIsCQlbQUJTX0hBVDNYXSA9ICJIYXQzWCIsCisJW0FCU19IQVQzWV0gPSAiSGF0IDNZIiwJCVtBQlNfUFJFU1NVUkVdID0gIlByZXNzdXJlIiwKKwlbQUJTX0RJU1RBTkNFXSA9ICJEaXN0YW5jZSIsCVtBQlNfVElMVF9YXSA9ICJYVGlsdCIsCisJW0FCU19USUxUX1ldID0gIllUaWx0IiwJCVtBQlNfVE9PTF9XSURUSF0gPSAiVG9vbCBXaWR0aCIsCisJW0FCU19WT0xVTUVdID0gIlZvbHVtZSIsCVtBQlNfTUlTQ10gPSAiTWlzYyIsCit9OworCitzdGF0aWMgY2hhciAqbWlzY1tNU0NfTUFYICsgMV0gPSB7CisJW01TQ19TRVJJQUxdID0gIlNlcmlhbCIsCVtNU0NfUFVMU0VMRURdID0gIlB1bHNlbGVkIiwKKwlbTVNDX0dFU1RVUkVdID0gIkdlc3R1cmUiLAlbTVNDX1JBV10gPSAiUmF3RGF0YSIKK307CisKK3N0YXRpYyBjaGFyICpsZWRzW0xFRF9NQVggKyAxXSA9IHsKKwlbTEVEX05VTUxdID0gIk51bUxvY2siLAkJW0xFRF9DQVBTTF0gPSAiQ2Fwc0xvY2siLCAKKwlbTEVEX1NDUk9MTExdID0gIlNjcm9sbExvY2siLAlbTEVEX0NPTVBPU0VdID0gIkNvbXBvc2UiLAorCVtMRURfS0FOQV0gPSAiS2FuYSIsCQlbTEVEX1NMRUVQXSA9ICJTbGVlcCIsIAorCVtMRURfU1VTUEVORF0gPSAiU3VzcGVuZCIsCVtMRURfTVVURV0gPSAiTXV0ZSIsCisJW0xFRF9NSVNDXSA9ICJNaXNjIiwKK307CisKK3N0YXRpYyBjaGFyICpyZXBlYXRzW1JFUF9NQVggKyAxXSA9IHsKKwlbUkVQX0RFTEFZXSA9ICJEZWxheSIsCQlbUkVQX1BFUklPRF0gPSAiUGVyaW9kIgorfTsKKworc3RhdGljIGNoYXIgKnNvdW5kc1tTTkRfTUFYICsgMV0gPSB7CisJW1NORF9DTElDS10gPSAiQ2xpY2siLAkJW1NORF9CRUxMXSA9ICJCZWxsIiwKKwlbU05EX1RPTkVdID0gIlRvbmUiCit9OworCitzdGF0aWMgY2hhciAqKm5hbWVzW0VWX01BWCArIDFdID0geworCVtFVl9TWU5dID0gc3luY3MsCQkJW0VWX0tFWV0gPSBrZXlzLAorCVtFVl9SRUxdID0gcmVsYXRpdmVzLAkJCVtFVl9BQlNdID0gYWJzb2x1dGVzLAorCVtFVl9NU0NdID0gbWlzYywJCQlbRVZfTEVEXSA9IGxlZHMsCisJW0VWX1NORF0gPSBzb3VuZHMsCQkJW0VWX1JFUF0gPSByZXBlYXRzLAorfTsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgcmVzb2x2X2V2ZW50KF9fdTggdHlwZSwgX191MTYgY29kZSkgeworCisJcHJpbnRrKCIlcy4lcyIsIGV2ZW50c1t0eXBlXSA/IGV2ZW50c1t0eXBlXSA6ICI/IiwKKwkJbmFtZXNbdHlwZV0gPyAobmFtZXNbdHlwZV1bY29kZV0gPyBuYW1lc1t0eXBlXVtjb2RlXSA6ICI/IikgOiAiPyIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU2OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICRJZDogaGlkLWZmLmMsdiAxLjIgMjAwMi8wNC8xOCAyMjowMjo0NyBqZGVuZXV4IEV4cCAkCisgKgorICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZCBkZXZpY2VzLgorICogIE5vdCBhbGwgaGlkIGRldmljZXMgdXNlIHRoZSBzYW1lIHByb3RvY29sLiBGb3IgZXhhbXBsZSwgc29tZSB1c2UgUElELAorICogIG90aGVyIHVzZSB0aGVpciBvd24gcHJvcHJpZXRhcnkgcHJvY290b2wuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyN1bmRlZiBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiaGlkLmgiCisKKy8qIERyaXZlcnMnIGluaXRpYWxpemluZyBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgaGlkX2xnZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK2V4dGVybiBpbnQgaGlkX2xnM2RfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK2V4dGVybiBpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworZXh0ZXJuIGludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworCisvKgorICogVGhpcyB0YWJsZSBjb250YWlucyBwb2ludGVycyB0byBpbml0aWFsaXplcnMuIFRvIGFkZCBzdXBwb3J0IGZvciBuZXcKKyAqIGRldmljZXMsIHlvdSBuZWVkIHRvIGFkZCB0aGUgVVNCIHZlbmRvciBhbmQgcHJvZHVjdCBpZHMgaGVyZS4KKyAqLworc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJaW50ICgqaW5pdCkoc3RydWN0IGhpZF9kZXZpY2UqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyIGluaXRzW10gPSB7CisjaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCisJezB4NDZkLCAweGMyMTEsIGhpZF9sZ2ZmX2luaXR9LCAvLyBMb2dpdGVjaCBDb3JkbGVzcyBydW1ibGUgcGFkCisJezB4NDZkLCAweGMyODMsIGhpZF9sZ2ZmX2luaXR9LCAvLyBMb2dpdGVjaCBXaW5nbWFuIEZvcmNlIDNkCisJezB4NDZkLCAweGMyOTUsIGhpZF9sZ2ZmX2luaXR9LAkvLyBMb2dpdGVjaCBNT01PIGZvcmNlIHdoZWVsCisJezB4NDZkLCAweGMyMTksIGhpZF9sZ2ZmX2luaXR9LCAvLyBMb2dpdGVjaCBDb3JkbGVzcyBydW1ibGUgcGFkIDIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfUElECisJezB4NDVlLCAweDAwMWIsIGhpZF9waWRfaW5pdH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGCisJezB4NDRmLCAweGIzMDQsIGhpZF90bWZmX2luaXR9LAorI2VuZGlmCisJezAsIDAsIE5VTEx9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciAqaGlkX2dldF9mZl9pbml0KF9fdTE2IGlkVmVuZG9yLAorCQkJCQkJICBfX3UxNiBpZFByb2R1Y3QpCit7CisJc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciAqaW5pdDsKKwlmb3IgKGluaXQgPSBpbml0czsKKwkgICAgIGluaXQtPmlkVmVuZG9yCisJICAgICAmJiAhKGluaXQtPmlkVmVuZG9yID09IGlkVmVuZG9yCisJCSAgJiYgaW5pdC0+aWRQcm9kdWN0ID09IGlkUHJvZHVjdCk7CisJICAgICBpbml0KyspOworCisJcmV0dXJuIGluaXQtPmlkVmVuZG9yPyBpbml0IDogTlVMTDsKK30KKworaW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGhpZF9mZl9pbml0aWFsaXplciAqaW5pdDsKKworCWluaXQgPSBoaWRfZ2V0X2ZmX2luaXQobGUxNl90b19jcHUoaGlkLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGhpZC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJaWYgKCFpbml0KSB7CisJCWRiZygiaGlkX2ZmX2luaXQgY291bGQgbm90IGZpbmQgaW5pdGlhbGl6ZXIiKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiBpbml0LT5pbml0KGhpZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NTNjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqICRJZDogaGlkLWlucHV0LmMsdiAxLjIgMjAwMi8wNC8yMyAwMDo1OToyNSByZGFtYXppbyBFeHAgJAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpaworICoKKyAqICBVU0IgSElEIHRvIExpbnV4IElucHV0IG1hcHBpbmcKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSAiaGlkLmgiCisKKyNkZWZpbmUgdW5rCUtFWV9VTktOT1dOCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGhpZF9rZXlib2FyZFsyNTZdID0geworCSAgMCwgIDAsICAwLCAgMCwgMzAsIDQ4LCA0NiwgMzIsIDE4LCAzMywgMzQsIDM1LCAyMywgMzYsIDM3LCAzOCwKKwkgNTAsIDQ5LCAyNCwgMjUsIDE2LCAxOSwgMzEsIDIwLCAyMiwgNDcsIDE3LCA0NSwgMjEsIDQ0LCAgMiwgIDMsCisJICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMjgsICAxLCAxNCwgMTUsIDU3LCAxMiwgMTMsIDI2LAorCSAyNywgNDMsIDQzLCAzOSwgNDAsIDQxLCA1MSwgNTIsIDUzLCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwKKwkgNjUsIDY2LCA2NywgNjgsIDg3LCA4OCwgOTksIDcwLDExOSwxMTAsMTAyLDEwNCwxMTEsMTA3LDEwOSwxMDYsCisJMTA1LDEwOCwxMDMsIDY5LCA5OCwgNTUsIDc0LCA3OCwgOTYsIDc5LCA4MCwgODEsIDc1LCA3NiwgNzcsIDcxLAorCSA3MiwgNzMsIDgyLCA4MywgODYsMTI3LDExNiwxMTcsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwKKwkxOTEsMTkyLDE5MywxOTQsMTM0LDEzOCwxMzAsMTMyLDEyOCwxMjksMTMxLDEzNywxMzMsMTM1LDEzNiwxMTMsCisJMTE1LDExNCx1bmssdW5rLHVuaywxMjEsdW5rLCA4OSwgOTMsMTI0LCA5MiwgOTQsIDk1LHVuayx1bmssdW5rLAorCTEyMiwxMjMsIDkwLCA5MSwgODUsdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwl1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCisJdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLAorCXVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwl1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCisJIDI5LCA0MiwgNTYsMTI1LCA5NywgNTQsMTAwLDEyNiwxNjQsMTY2LDE2NSwxNjMsMTYxLDExNSwxMTQsMTEzLAorCTE1MCwxNTgsMTU5LDEyOCwxMzYsMTc3LDE3OCwxNzYsMTQyLDE1MiwxNzMsMTQwLHVuayx1bmssdW5rLHVuaworfTsKKworc3RhdGljIHN0cnVjdCB7CisJX19zMzIgeDsKKwlfX3MzMiB5OworfSAgaGlkX2hhdF90b19heGlzW10gPSB7eyAwLCAwfSwgeyAwLC0xfSwgeyAxLC0xfSwgeyAxLCAwfSwgeyAxLCAxfSwgeyAwLCAxfSwgey0xLCAxfSwgey0xLCAwfSwgey0xLC0xfX07CisKKyNkZWZpbmUgbWFwX2FicyhjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9BQlM7IGJpdCA9IGlucHV0LT5hYnNiaXQ7IG1heCA9IEFCU19NQVg7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9yZWwoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfUkVMOyBiaXQgPSBpbnB1dC0+cmVsYml0OyBtYXggPSBSRUxfTUFYOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfa2V5KGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0tFWTsgYml0ID0gaW5wdXQtPmtleWJpdDsgbWF4ID0gS0VZX01BWDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX2xlZChjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9MRUQ7IGJpdCA9IGlucHV0LT5sZWRiaXQ7IG1heCA9IExFRF9NQVg7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9mZihjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9GRjsgIGJpdCA9IGlucHV0LT5mZmJpdDsgIG1heCA9ICBGRl9NQVg7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbWFwX2Fic19jbGVhcihjKQlkbyB7IG1hcF9hYnMoYyk7IGNsZWFyX2JpdChjLCBiaXQpOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpCWRvIHsgbWFwX2tleShjKTsgY2xlYXJfYml0KGMsIGJpdCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9mZl9lZmZlY3QoYykJZG8geyBzZXRfYml0KGMsIGlucHV0LT5mZmJpdCk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIGhpZGlucHV0X2NvbmZpZ3VyZV91c2FnZShzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9ICZoaWRpbnB1dC0+aW5wdXQ7CisJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSA9IGhpZGlucHV0LT5pbnB1dC5wcml2YXRlOworCWludCBtYXgsIGNvZGU7CisJdW5zaWduZWQgbG9uZyAqYml0OworCisJZmllbGQtPmhpZGlucHV0ID0gaGlkaW5wdXQ7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJNYXBwaW5nOiAiKTsKKwlyZXNvbHZfdXNhZ2UodXNhZ2UtPmhpZCk7CisJcHJpbnRrKCIgLS0tPiAiKTsKKyNlbmRpZgorCisJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQpCisJCWdvdG8gaWdub3JlOworCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCQljYXNlIEhJRF9VUF9VTkRFRklORUQ6CisJCQlnb3RvIGlnbm9yZTsKKworCQljYXNlIEhJRF9VUF9LRVlCT0FSRDoKKworCQkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisKKwkJCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgPCAyNTYpIHsKKwkJCQlpZiAoIWhpZF9rZXlib2FyZFt1c2FnZS0+aGlkICYgSElEX1VTQUdFXSkgZ290byBpZ25vcmU7CisJCQkJbWFwX2tleV9jbGVhcihoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pOworCQkJfSBlbHNlCisJCQkJbWFwX2tleShLRVlfVU5LTk9XTik7CisKKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0JVVFRPTjoKKworCQkJY29kZSA9ICgodXNhZ2UtPmhpZCAtIDEpICYgMHhmKTsKKworCQkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKKwkJCQljYXNlIEhJRF9HRF9NT1VTRToKKwkJCQljYXNlIEhJRF9HRF9QT0lOVEVSOiAgY29kZSArPSAweDExMDsgYnJlYWs7CisJCQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQkJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IDB4MTMwOyBicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlzd2l0Y2ggKGZpZWxkLT5waHlzaWNhbCkgeworCQkJCQkJY2FzZSBISURfR0RfTU9VU0U6CisJCQkJCQljYXNlIEhJRF9HRF9QT0lOVEVSOiAgY29kZSArPSAweDExMDsgYnJlYWs7CisJCQkJCQljYXNlIEhJRF9HRF9KT1lTVElDSzogY29kZSArPSAweDEyMDsgYnJlYWs7CisJCQkJCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7CisJCQkJCQlkZWZhdWx0OiAgICAgICAgICAgICAgY29kZSArPSAweDEwMDsKKwkJCQkJfQorCQkJfQorCisJCQltYXBfa2V5KGNvZGUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfR0VOREVTSzoKKworCQkJaWYgKCh1c2FnZS0+aGlkICYgMHhmMCkgPT0gMHg4MCkgewkvKiBTeXN0ZW1Db250cm9sICovCisJCQkJc3dpdGNoICh1c2FnZS0+aGlkICYgMHhmKSB7CisJCQkJCWNhc2UgMHgxOiBtYXBfa2V5X2NsZWFyKEtFWV9QT1dFUik7ICBicmVhazsKKwkJCQkJY2FzZSAweDI6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsgIGJyZWFrOworCQkJCQljYXNlIDB4MzogbWFwX2tleV9jbGVhcihLRVlfV0FLRVVQKTsgYnJlYWs7CisJCQkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICgodXNhZ2UtPmhpZCAmIDB4ZjApID09IDB4OTApIHsJLyogRC1wYWQgKi8KKwkJCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJCQkJY2FzZSBISURfR0RfVVA6CSAgIHVzYWdlLT5oYXRfZGlyID0gMTsgYnJlYWs7CisJCQkJCWNhc2UgSElEX0dEX0RPV046ICB1c2FnZS0+aGF0X2RpciA9IDU7IGJyZWFrOworCQkJCQljYXNlIEhJRF9HRF9SSUdIVDogdXNhZ2UtPmhhdF9kaXIgPSAzOyBicmVhazsKKwkJCQkJY2FzZSBISURfR0RfTEVGVDogIHVzYWdlLT5oYXRfZGlyID0gNzsgYnJlYWs7CisJCQkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKKwkJCQl9CisJCQkJaWYgKGZpZWxkLT5kcGFkKSB7CisJCQkJCW1hcF9hYnMoZmllbGQtPmRwYWQpOworCQkJCQlnb3RvIGlnbm9yZTsKKwkJCQl9CisJCQkJbWFwX2FicyhBQlNfSEFUMFgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKworCQkJCS8qIFRoZXNlIHVzYWdlIElEcyBtYXAgZGlyZWN0bHkgdG8gdGhlIHVzYWdlIGNvZGVzLiAqLworCQkJCWNhc2UgSElEX0dEX1g6IGNhc2UgSElEX0dEX1k6IGNhc2UgSElEX0dEX1o6CisJCQkJY2FzZSBISURfR0RfUlg6IGNhc2UgSElEX0dEX1JZOiBjYXNlIEhJRF9HRF9SWjoKKwkJCQljYXNlIEhJRF9HRF9TTElERVI6IGNhc2UgSElEX0dEX0RJQUw6IGNhc2UgSElEX0dEX1dIRUVMOgorCQkJCQlpZiAoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9SRUxBVElWRSkgCisJCQkJCQltYXBfcmVsKHVzYWdlLT5oaWQgJiAweGYpOworCQkJCQllbHNlCisJCQkJCQltYXBfYWJzKHVzYWdlLT5oaWQgJiAweGYpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSElEX0dEX0hBVFNXSVRDSDoKKwkJCQkJdXNhZ2UtPmhhdF9taW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQkJCQl1c2FnZS0+aGF0X21heCA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07CisJCQkJCW1hcF9hYnMoQUJTX0hBVDBYKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEhJRF9HRF9TVEFSVDoJbWFwX2tleV9jbGVhcihCVE5fU1RBUlQpOwlicmVhazsKKwkJCQljYXNlIEhJRF9HRF9TRUxFQ1Q6CW1hcF9rZXlfY2xlYXIoQlROX1NFTEVDVCk7CWJyZWFrOworCisJCQkJZGVmYXVsdDogZ290byB1bmtub3duOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIEhJRF9VUF9MRUQ6CisJCQlpZiAoKCh1c2FnZS0+aGlkIC0gMSkgJiAweGZmZmYpID49IExFRF9NQVgpCisJCQkJZ290byBpZ25vcmU7CisJCQltYXBfbGVkKCh1c2FnZS0+aGlkIC0gMSkgJiAweGZmZmYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmKSB7CisKKwkJCQljYXNlIDB4MzA6IC8qIFRpcFByZXNzdXJlICovCisJCQkJCWlmICghdGVzdF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KSkgeworCQkJCQkJZGV2aWNlLT5xdWlya3MgfD0gSElEX1FVSVJLX05PVE9VQ0g7CisJCQkJCQlzZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKwkJCQkJCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKKwkJCQkJfQorCisJCQkJCW1hcF9hYnNfY2xlYXIoQUJTX1BSRVNTVVJFKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4MzI6IC8qIEluUmFuZ2UgKi8KKwkJCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwgJiAweGZmKSB7CisJCQkJCQljYXNlIDB4MjE6IG1hcF9rZXkoQlROX1RPT0xfTU9VU0UpOyBicmVhazsKKwkJCQkJCWNhc2UgMHgyMjogbWFwX2tleShCVE5fVE9PTF9GSU5HRVIpOyBicmVhazsKKwkJCQkJCWRlZmF1bHQ6IG1hcF9rZXkoQlROX1RPT0xfUEVOKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4M2M6IC8qIEludmVydCAqLworCQkJCQltYXBfa2V5X2NsZWFyKEJUTl9UT09MX1JVQkJFUik7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAweDMzOiAvKiBUb3VjaCAqLworCQkJCWNhc2UgMHg0MjogLyogVGlwU3dpdGNoICovCisJCQkJY2FzZSAweDQzOiAvKiBUaXBTd2l0Y2gyICovCisJCQkJCWRldmljZS0+cXVpcmtzICY9IH5ISURfUVVJUktfTk9UT1VDSDsKKwkJCQkJbWFwX2tleV9jbGVhcihCVE5fVE9VQ0gpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHg0NDogLyogQmFycmVsU3dpdGNoICovCisJCQkJCW1hcF9rZXlfY2xlYXIoQlROX1NUWUxVUyk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDogIGdvdG8gdW5rbm93bjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0NPTlNVTUVSOgkvKiBVU0IgSFVUIHYxLjEsIHBhZ2VzIDU2LTYyICovCisKKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQkJCWNhc2UgMHgwMDA6IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgwMzQ6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwMzY6IG1hcF9rZXlfY2xlYXIoQlROX01JU0MpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4YTogbWFwX2tleV9jbGVhcihLRVlfV1dXKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOTU6IG1hcF9rZXlfY2xlYXIoS0VZX0hFTFApOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiMDogbWFwX2tleV9jbGVhcihLRVlfUExBWSk7CQlicmVhazsKKwkJCQljYXNlIDB4MGIxOiBtYXBfa2V5X2NsZWFyKEtFWV9QQVVTRSk7CQlicmVhazsKKwkJCQljYXNlIDB4MGIyOiBtYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiMzogbWFwX2tleV9jbGVhcihLRVlfRkFTVEZPUldBUkQpOwlicmVhazsKKwkJCQljYXNlIDB4MGI0OiBtYXBfa2V5X2NsZWFyKEtFWV9SRVdJTkQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiNTogbWFwX2tleV9jbGVhcihLRVlfTkVYVFNPTkcpOwlicmVhazsKKwkJCQljYXNlIDB4MGI2OiBtYXBfa2V5X2NsZWFyKEtFWV9QUkVWSU9VU1NPTkcpOwlicmVhazsKKwkJCQljYXNlIDB4MGI3OiBtYXBfa2V5X2NsZWFyKEtFWV9TVE9QQ0QpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBiODogbWFwX2tleV9jbGVhcihLRVlfRUpFQ1RDRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MGNkOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZUEFVU0UpOwlicmVhazsKKwkJCSAgICAgICAgY2FzZSAweDBlMDogbWFwX2Fic19jbGVhcihBQlNfVk9MVU1FKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwZTI6IG1hcF9rZXlfY2xlYXIoS0VZX01VVEUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBlNTogbWFwX2tleV9jbGVhcihLRVlfQkFTU0JPT1NUKTsJYnJlYWs7CisJCQkJY2FzZSAweDBlOTogbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FVVApOwlicmVhazsKKwkJCQljYXNlIDB4MGVhOiBtYXBfa2V5X2NsZWFyKEtFWV9WT0xVTUVET1dOKTsJYnJlYWs7CisJCQkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOworCQkJCWNhc2UgMHgxOGE6IG1hcF9rZXlfY2xlYXIoS0VZX01BSUwpOwkJYnJlYWs7CisJCQkJY2FzZSAweDE5MjogbWFwX2tleV9jbGVhcihLRVlfQ0FMQyk7CQlicmVhazsKKwkJCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMWE6IG1hcF9rZXlfY2xlYXIoS0VZX1VORE8pOwkJYnJlYWs7CisJCQkJY2FzZSAweDIxYjogbWFwX2tleV9jbGVhcihLRVlfQ09QWSk7CQlicmVhazsKKwkJCQljYXNlIDB4MjFjOiBtYXBfa2V5X2NsZWFyKEtFWV9DVVQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIxZDogbWFwX2tleV9jbGVhcihLRVlfUEFTVEUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyMTogbWFwX2tleV9jbGVhcihLRVlfRklORCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjIzOiBtYXBfa2V5X2NsZWFyKEtFWV9IT01FUEFHRSk7CWJyZWFrOworCQkJCWNhc2UgMHgyMjQ6IG1hcF9rZXlfY2xlYXIoS0VZX0JBQ0spOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyNTogbWFwX2tleV9jbGVhcihLRVlfRk9SV0FSRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjI2OiBtYXBfa2V5X2NsZWFyKEtFWV9TVE9QKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMjc6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRlJFU0gpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyYTogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7CisJCQkJY2FzZSAweDIzODogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOworCQkJCWRlZmF1bHQ6ICAgIGdvdG8gdW5rbm93bjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0hQVkVORE9SOgkvKiBSZXBvcnRlZCBvbiBhIER1dGNoIGxheW91dCBIUDUzMDggKi8KKworCQkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkJCSAgICAgICAgY2FzZSAweDAyMTogbWFwX2tleV9jbGVhcihLRVlfUFJJTlQpOyAgICAgICAgICAgYnJlYWs7CisJCQkJY2FzZSAweDA3MDogbWFwX2tleV9jbGVhcihLRVlfSFApOwkJYnJlYWs7CisJCQkJY2FzZSAweDA3MTogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwNzI6IG1hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwNzM6IG1hcF9rZXlfY2xlYXIoS0VZX1FVRVNUSU9OKTsJYnJlYWs7CisJCQkJY2FzZSAweDA4MDogbWFwX2tleV9jbGVhcihLRVlfRU1BSUwpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4MTogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDgyOiBtYXBfa2V5X2NsZWFyKEtFWV9TRUFSQ0gpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4MzogbWFwX2tleV9jbGVhcihLRVlfQ09OTkVDVCk7CSAgICAgICAgYnJlYWs7CisJCQkJY2FzZSAweDA4NDogbWFwX2tleV9jbGVhcihLRVlfRklOQU5DRSk7CQlicmVhazsKKwkJCQljYXNlIDB4MDg1OiBtYXBfa2V5X2NsZWFyKEtFWV9TUE9SVCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDg2OiBtYXBfa2V5X2NsZWFyKEtFWV9TSE9QKTsJICAgICAgICBicmVhazsKKwkJCQlkZWZhdWx0OiAgICBnb3RvIGlnbm9yZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX01TVkVORE9SOgorCisJCQlnb3RvIGlnbm9yZTsKKwkJCQorCQljYXNlIEhJRF9VUF9QSUQ6CisKKwkJCXNldF9iaXQoRVZfRkYsIGlucHV0LT5ldmJpdCk7CisJCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQkJCWNhc2UgMHgyNjogbWFwX2ZmX2VmZmVjdChGRl9DT05TVEFOVCk7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgyNzogbWFwX2ZmX2VmZmVjdChGRl9SQU1QKTsJZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDI4OiBtYXBfZmZfZWZmZWN0KEZGX0NVU1RPTSk7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgzMDogbWFwX2ZmX2VmZmVjdChGRl9TUVVBUkUpOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDMxOiBtYXBfZmZfZWZmZWN0KEZGX1NJTkUpOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDMyOiBtYXBfZmZfZWZmZWN0KEZGX1RSSUFOR0xFKTsJbWFwX2ZmX2VmZmVjdChGRl9QRVJJT0RJQyk7IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHgzMzogbWFwX2ZmX2VmZmVjdChGRl9TQVdfVVApOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDM0OiBtYXBfZmZfZWZmZWN0KEZGX1NBV19ET1dOKTsJbWFwX2ZmX2VmZmVjdChGRl9QRVJJT0RJQyk7IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHg0MDogbWFwX2ZmX2VmZmVjdChGRl9TUFJJTkcpOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4NDE6IG1hcF9mZl9lZmZlY3QoRkZfREFNUEVSKTsJZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDQyOiBtYXBfZmZfZWZmZWN0KEZGX0lORVJUSUEpOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4NDM6IG1hcF9mZl9lZmZlY3QoRkZfRlJJQ1RJT04pOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4N2U6IG1hcF9mZihGRl9HQUlOKTsJCWJyZWFrOworCQkJCWNhc2UgMHg4MzogaW5wdXQtPmZmX2VmZmVjdHNfbWF4ID0gZmllbGQtPnZhbHVlWzBdOyBnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4OTg6IG1hcF9mZihGRl9BVVRPQ0VOVEVSKTsJYnJlYWs7CisJCQkJY2FzZSAweGE0OiBtYXBfa2V5X2NsZWFyKEJUTl9ERUFEKTsJYnJlYWs7CisJCQkJZGVmYXVsdDogZ290byBpZ25vcmU7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQl1bmtub3duOgorCQkJaWYgKGZpZWxkLT5yZXBvcnRfc2l6ZSA9PSAxKSB7CisJCQkJaWYgKGZpZWxkLT5yZXBvcnQtPnR5cGUgPT0gSElEX09VVFBVVF9SRVBPUlQpIHsKKwkJCQkJbWFwX2xlZChMRURfTUlTQyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQltYXBfa2V5KEJUTl9NSVNDKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSB7CisJCQkJbWFwX3JlbChSRUxfTUlTQyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltYXBfYWJzKEFCU19NSVNDKTsKKwkJCWJyZWFrOworCX0KKworCXNldF9iaXQodXNhZ2UtPnR5cGUsIGlucHV0LT5ldmJpdCk7CisKKwl3aGlsZSAodXNhZ2UtPmNvZGUgPD0gbWF4ICYmIHRlc3RfYW5kX3NldF9iaXQodXNhZ2UtPmNvZGUsIGJpdCkpCisJCXVzYWdlLT5jb2RlID0gZmluZF9uZXh0X3plcm9fYml0KGJpdCwgbWF4ICsgMSwgdXNhZ2UtPmNvZGUpOworCisJaWYgKHVzYWdlLT5jb2RlID4gbWF4KQorCQlnb3RvIGlnbm9yZTsKKworCWlmICgoZGV2aWNlLT5xdWlya3MgJiAoSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSkpICYmCisJCSAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMKSAmJiAodXNhZ2UtPmNvZGUgPT0gUkVMX1dIRUVMKSkgCisJCQlzZXRfYml0KFJFTF9IV0hFRUwsIGJpdCk7CisKKwlpZiAoKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KSkKKwkJfHwgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpCisJCWdvdG8gaWdub3JlOworCisJaWYgKHVzYWdlLT50eXBlID09IEVWX0FCUykgeworCisJCWludCBhID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKKwkJaW50IGIgPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCisJCWlmICgoZGV2aWNlLT5xdWlya3MgJiBISURfUVVJUktfQkFEUEFEKSAmJiAodXNhZ2UtPmNvZGUgPT0gQUJTX1ggfHwgdXNhZ2UtPmNvZGUgPT0gQUJTX1kpKSB7CisJCQlhID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bSA9IDA7CisJCQliID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IDI1NTsKKwkJfQorCQkKKwkJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiA9PSBISURfR0RfR0FNRVBBRCB8fCBmaWVsZC0+YXBwbGljYXRpb24gPT0gSElEX0dEX0pPWVNUSUNLKQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIHVzYWdlLT5jb2RlLCBhLCBiLCAoYiAtIGEpID4+IDgsIChiIC0gYSkgPj4gNCk7CisJCWVsc2UJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIHVzYWdlLT5jb2RlLCBhLCBiLCAwLCAwKTsKKwkJCisJfQorCisJaWYgKHVzYWdlLT5oYXRfbWluIDwgdXNhZ2UtPmhhdF9tYXggfHwgdXNhZ2UtPmhhdF9kaXIpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IHVzYWdlLT5jb2RlOyBpIDwgdXNhZ2UtPmNvZGUgKyAyICYmIGkgPD0gbWF4OyBpKyspIHsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBpLCAtMSwgMSwgMCwgMCk7CisJCQlzZXRfYml0KGksIGlucHV0LT5hYnNiaXQpOworCQl9CisJCWlmICh1c2FnZS0+aGF0X2RpciAmJiAhZmllbGQtPmRwYWQpCisJCQlmaWVsZC0+ZHBhZCA9IHVzYWdlLT5jb2RlOworCX0KKworI2lmZGVmIERFQlVHCisJcmVzb2x2X2V2ZW50KHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSk7CisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJcmV0dXJuOworCitpZ25vcmU6CisjaWZkZWYgREVCVUcKKwlwcmludGsoIklHTk9SRURcbiIpOworI2VuZGlmCisJcmV0dXJuOworfQorCit2b2lkIGhpZGlucHV0X2hpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9ICZmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCWludCAqcXVpcmtzID0gJmhpZC0+cXVpcmtzOworCisJaWYgKCFpbnB1dCkKKwkJcmV0dXJuOworCisJaW5wdXRfcmVncyhpbnB1dCwgcmVncyk7CisKKwlpZiAoIXVzYWdlLT50eXBlKQorCQlyZXR1cm47CisKKwlpZiAoKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KSkKKwkJfHwgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpIHsKKwkJaWYgKHZhbHVlKSBoaWQtPnF1aXJrcyB8PSAgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OOworCQllbHNlICAgICAgIGhpZC0+cXVpcmtzICY9IH5ISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT047CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OKSAmJiAodXNhZ2UtPmNvZGUgPT0gUkVMX1dIRUVMKSkgeworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIFJFTF9IV0hFRUwsIHZhbHVlKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2FnZS0+aGF0X21pbiA8IHVzYWdlLT5oYXRfbWF4IHx8IHVzYWdlLT5oYXRfZGlyKSB7IAorCQlpbnQgaGF0X2RpciA9IHVzYWdlLT5oYXRfZGlyOworCQlpZiAoIWhhdF9kaXIpCisJCQloYXRfZGlyID0gKHZhbHVlIC0gdXNhZ2UtPmhhdF9taW4pICogOCAvICh1c2FnZS0+aGF0X21heCAtIHVzYWdlLT5oYXRfbWluICsgMSkgKyAxOworCQlpZiAoaGF0X2RpciA8IDAgfHwgaGF0X2RpciA+IDgpIGhhdF9kaXIgPSAwOworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlICAgICwgaGlkX2hhdF90b19heGlzW2hhdF9kaXJdLngpOworICAgICAgICAgICAgICAgIGlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUgKyAxLCBoaWRfaGF0X3RvX2F4aXNbaGF0X2Rpcl0ueSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0RJR0lUSVpFUiB8IDB4MDAzYykpIHsgLyogSW52ZXJ0ICovCisJCSpxdWlya3MgPSB2YWx1ZSA/ICgqcXVpcmtzIHwgSElEX1FVSVJLX0lOVkVSVCkgOiAoKnF1aXJrcyAmIH5ISURfUVVJUktfSU5WRVJUKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfRElHSVRJWkVSIHwgMHgwMDMyKSkgeyAvKiBJblJhbmdlICovCisJCWlmICh2YWx1ZSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCAoKnF1aXJrcyAmIEhJRF9RVUlSS19JTlZFUlQpID8gQlROX1RPT0xfUlVCQkVSIDogdXNhZ2UtPmNvZGUsIDEpOworCQkJcmV0dXJuOworCQl9CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDApOworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIEJUTl9UT09MX1JVQkJFUiwgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0RJR0lUSVpFUiB8IDB4MDAzMCkgJiYgKCpxdWlya3MgJiBISURfUVVJUktfTk9UT1VDSCkpIHsgLyogUHJlc3N1cmUgKi8KKwkJaW50IGEgPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQlpbnQgYiA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgdmFsdWUgPiBhICsgKChiIC0gYSkgPj4gMykpOworCX0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfUElEIHwgMHg4M1VMKSkgeyAvKiBTaW11bHRhbmVvdXMgRWZmZWN0cyBNYXggKi8KKwkJaW5wdXQtPmZmX2VmZmVjdHNfbWF4ID0gdmFsdWU7CisJCWRiZygiTWF4aW11bSBFZmZlY3RzIC0gJWQiLGlucHV0LT5mZl9lZmZlY3RzX21heCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX1BJRCB8IDB4N2ZVTCkpIHsKKwkJZGJnKCJQSUQgUG9vbCBSZXBvcnRcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYoKHVzYWdlLT50eXBlID09IEVWX0tFWSkgJiYgKHVzYWdlLT5jb2RlID09IDApKSAvKiBLZXkgMCBpcyAidW5hc3NpZ25lZCIsIG5vdCBLRVlfVU5LTk9XTiAqLworCQlyZXR1cm47CisKKwlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCB2YWx1ZSk7CisKKwlpZiAoKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpICYmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkpKQorCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCAwKTsKK30KKwordm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKKworCWxpc3RfZm9yX2VhY2ggKGxoLCAmaGlkLT5pbnB1dHMpIHsKKwkJaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwkJaW5wdXRfc3luYygmaGlkaW5wdXQtPmlucHV0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGlkaW5wdXRfZmluZF9maWVsZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIHN0cnVjdCBoaWRfZmllbGQgKipmaWVsZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWludCBpLCBqOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0LT5tYXhmaWVsZDsgaSsrKSB7CisJCQkqZmllbGQgPSByZXBvcnQtPmZpZWxkW2ldOworCQkJZm9yIChqID0gMDsgaiA8ICgqZmllbGQpLT5tYXh1c2FnZTsgaisrKQorCQkJCWlmICgoKmZpZWxkKS0+dXNhZ2Vbal0udHlwZSA9PSB0eXBlICYmICgqZmllbGQpLT51c2FnZVtqXS5jb2RlID09IGNvZGUpCisJCQkJCXJldHVybiBqOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBoaWRpbnB1dF9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJaW50IG9mZnNldDsKKworCWlmICh0eXBlID09IEVWX0ZGKQorCQlyZXR1cm4gaGlkX2ZmX2V2ZW50KGhpZCwgZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisKKwlpZiAodHlwZSAhPSBFVl9MRUQpCisJCXJldHVybiAtMTsKKworCWlmICgob2Zmc2V0ID0gaGlkaW5wdXRfZmluZF9maWVsZChoaWQsIHR5cGUsIGNvZGUsICZmaWVsZCkpID09IC0xKSB7CisJCXdhcm4oImV2ZW50IGZpZWxkIG5vdCBmb3VuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaGlkX3NldF9maWVsZChmaWVsZCwgb2Zmc2V0LCB2YWx1ZSk7CisJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBmaWVsZC0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRpbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXJldHVybiBoaWRfb3BlbihoaWQpOworfQorCitzdGF0aWMgdm9pZCBoaWRpbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwloaWRfY2xvc2UoaGlkKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBpbnB1dCBkZXZpY2U7IHByaW50IGEgbWVzc2FnZS4KKyAqIENvbmZpZ3VyZSB0aGUgaW5wdXQgbGF5ZXIgaW50ZXJmYWNlCisgKiBSZWFkIGFsbCByZXBvcnRzIGFuZCBpbml0aWFsaXplIHRoZSBhYnNvbHV0ZSBmaWVsZCB2YWx1ZXMuCisgKi8KKworaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkLT5kZXY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IE5VTEw7CisJaW50IGksIGosIGs7CisKKwlJTklUX0xJU1RfSEVBRCgmaGlkLT5pbnB1dHMpOworCisJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gfHwKKwkJICAgIGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09IEhJRF9DT0xMRUNUSU9OX1BIWVNJQ0FMKQorCQkgICAgCWlmIChJU19JTlBVVF9BUFBMSUNBVElPTihoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UpKQorCQkJCWJyZWFrOworCisJaWYgKGkgPT0gaGlkLT5tYXhjb2xsZWN0aW9uKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGsgPSBISURfSU5QVVRfUkVQT1JUOyBrIDw9IEhJRF9PVVRQVVRfUkVQT1JUOyBrKyspCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtrXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCisJCQlpZiAoIXJlcG9ydC0+bWF4ZmllbGQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghaGlkaW5wdXQpIHsKKwkJCQloaWRpbnB1dCA9IGttYWxsb2Moc2l6ZW9mKCpoaWRpbnB1dCksIEdGUF9LRVJORUwpOworCQkJCWlmICghaGlkaW5wdXQpIHsKKwkJCQkJZXJyKCJPdXQgb2YgbWVtb3J5IGR1cmluZyBoaWQgaW5wdXQgcHJvYmUiKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQltZW1zZXQoaGlkaW5wdXQsIDAsIHNpemVvZigqaGlkaW5wdXQpKTsKKworCQkJCWxpc3RfYWRkX3RhaWwoJmhpZGlucHV0LT5saXN0LCAmaGlkLT5pbnB1dHMpOworCisJCQkJaGlkaW5wdXQtPmlucHV0LnByaXZhdGUgPSBoaWQ7CisJCQkJaGlkaW5wdXQtPmlucHV0LmV2ZW50ID0gaGlkaW5wdXRfaW5wdXRfZXZlbnQ7CisJCQkJaGlkaW5wdXQtPmlucHV0Lm9wZW4gPSBoaWRpbnB1dF9vcGVuOworCQkJCWhpZGlucHV0LT5pbnB1dC5jbG9zZSA9IGhpZGlucHV0X2Nsb3NlOworCisJCQkJaGlkaW5wdXQtPmlucHV0Lm5hbWUgPSBoaWQtPm5hbWU7CisJCQkJaGlkaW5wdXQtPmlucHV0LnBoeXMgPSBoaWQtPnBoeXM7CisJCQkJaGlkaW5wdXQtPmlucHV0LnVuaXEgPSBoaWQtPnVuaXE7CisJCQkJaGlkaW5wdXQtPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCQkJCWhpZGlucHV0LT5pbnB1dC5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCQkJCWhpZGlucHV0LT5pbnB1dC5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJCQkJaGlkaW5wdXQtPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJCQloaWRpbnB1dC0+aW5wdXQuZGV2ID0gJmhpZC0+aW50Zi0+ZGV2OworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0LT5tYXhmaWVsZDsgaSsrKQorCQkJCWZvciAoaiA9IDA7IGogPCByZXBvcnQtPmZpZWxkW2ldLT5tYXh1c2FnZTsgaisrKQorCQkJCQloaWRpbnB1dF9jb25maWd1cmVfdXNhZ2UoaGlkaW5wdXQsIHJlcG9ydC0+ZmllbGRbaV0sCisJCQkJCQkJCSByZXBvcnQtPmZpZWxkW2ldLT51c2FnZSArIGopOworCQkJCisJCQlpZiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfTVVMVElfSU5QVVQpIHsKKwkJCQkvKiBUaGlzIHdpbGwgbGVhdmUgaGlkaW5wdXQgTlVMTCwgc28gdGhhdCBpdAorCQkJCSAqIGFsbG9jYXRlcyBhbm90aGVyIG9uZSBpZiB3ZSBoYXZlIG1vcmUgaW5wdXRzIG9uCisJCQkJICogdGhlIHNhbWUgaW50ZXJmYWNlLiBTb21lIGRldmljZXMgKGUuZy4gSGFwcCdzCisJCQkJICogVUdDSSkgY3JhbSBhIGxvdCBvZiB1bnJlbGF0ZWQgaW5wdXRzIGludG8gdGhlCisJCQkJICogc2FtZSBpbnRlcmZhY2UuICovCisJCQkJaGlkaW5wdXQtPnJlcG9ydCA9IHJlcG9ydDsKKwkJCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmhpZGlucHV0LT5pbnB1dCk7CisJCQkJaGlkaW5wdXQgPSBOVUxMOworCQkJfQorCQl9CisKKwkvKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB3ZSBhcmUgYSBzaW5nbGUtaW5wdXQgKG1vc3Qgb2YgdGhlCisJICogdGltZSkuIElPVywgbm90IGEgSElEX1FVSVJLX01VTFRJX0lOUFVULiBUaGUgaGlkX2ZmX2luaXQoKSBpcworCSAqIG9ubHkgdXNlZnVsIGluIHRoaXMgY2FzZSwgYW5kIG5vdCBmb3IgbXVsdGktaW5wdXQgcXVpcmtzLiAqLworCWlmIChoaWRpbnB1dCkgeworCQloaWRfZmZfaW5pdChoaWQpOworCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmhpZGlucHV0LT5pbnB1dCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaGlkaW5wdXRfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxoLCAqbmV4dDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaCwgbmV4dCwgJmhpZC0+aW5wdXRzKSB7CisJCWhpZGlucHV0ID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZoaWRpbnB1dC0+aW5wdXQpOworCQlsaXN0X2RlbCgmaGlkaW5wdXQtPmxpc3QpOworCQlrZnJlZShoaWRpbnB1dCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NDA0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiAkJAorICoKKyAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZC1jb21wbGlhbnQgZm9yIHNvbWUgb2YgdGhlIGRldmljZXMgZnJvbQorICogTG9naXRlY2gsIG5hbWVseToKKyAqIC0gV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKKyAqIC0gV2luZ01hbiBGb3JjZSAzRAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBKb2hhbm4gRGVuZXV4CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDxqb2hhbm4uZGVuZXV4QGl0LnV1LnNlPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKy8vI2RlZmluZSBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKworI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgImZpeHAtYXJpdGguaCIKKworCisvKiBQZXJpb2RpY2l0eSBvZiB0aGUgdXBkYXRlICovCisjZGVmaW5lIFBFUklPRCAoSFovMTApCisKKyNkZWZpbmUgUlVOX0FUKHQpIChqaWZmaWVzICsgKHQpKQorCisvKiBFZmZlY3Qgc3RhdHVzICovCisjZGVmaW5lIEVGRkVDVF9TVEFSVEVEIDAgICAgIC8qIEVmZmVjdCBpcyBnb2luZyB0byBwbGF5IGFmdGVyIHNvbWUgdGltZQorCQkJCShmZl9yZXBsYXkuZGVsYXkpICovCisjZGVmaW5lIEVGRkVDVF9QTEFZSU5HIDEgICAgIC8qIEVmZmVjdCBpcyBiZWluZyBwbGF5ZWQgKi8KKyNkZWZpbmUgRUZGRUNUX1VTRUQgICAgMgorCisvLyBGb3IgbGdmZl9kZXZpY2U6OmZsYWdzCisjZGVmaW5lIERFVklDRV9DTE9TSU5HIDAgICAgIC8qIFRoZSBkcml2ZXIgaXMgYmVpbmcgdW5pdGlhbGlzZWQgKi8KKworLyogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCBwcm9jZXNzIGNhbiBhY2Nlc3MgYW4gZWZmZWN0ICovCisjZGVmaW5lIENIRUNLX09XTkVSU0hJUChlZmZlY3QpIChjdXJyZW50LT5waWQgPT0gMCBcCisgICAgICAgIHx8IGVmZmVjdC5vd25lciA9PSBjdXJyZW50LT5waWQpCisKKyNkZWZpbmUgTEdGRl9DSEVDS19PV05FUlNISVAoaSwgbCkgXAorICAgICAgICAoaT49MCAmJiBpPExHRkZfRUZGRUNUUyBcCisgICAgICAgICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCBsLT5lZmZlY3RzW2ldLmZsYWdzKSBcCisgICAgICAgICYmIENIRUNLX09XTkVSU0hJUChsLT5lZmZlY3RzW2ldKSkKKworI2RlZmluZSBMR0ZGX0VGRkVDVFMgOAorCitzdHJ1Y3QgZGV2aWNlX3R5cGUgeworCXUxNiBpZFZlbmRvcjsKKwl1MTYgaWRQcm9kdWN0OworCXNpZ25lZCBzaG9ydCAqZmY7Cit9OworCitzdHJ1Y3QgbGdmZl9lZmZlY3QgeworCXBpZF90IG93bmVyOworCisJc3RydWN0IGZmX2VmZmVjdCBlZmZlY3Q7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOworCXVuc2lnbmVkIGludCBjb3VudDsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGxlZnQgdG8gcGxheSAqLworCXVuc2lnbmVkIGxvbmcgc3RhcnRlZF9hdDsgICAgLyogV2hlbiB0aGUgZWZmZWN0IHN0YXJ0ZWQgdG8gcGxheSAqLworfTsKKworc3RydWN0IGxnZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX2RldmljZSogaGlkOworCisJc3RydWN0IGhpZF9yZXBvcnQqIGNvbnN0YW50OworCXN0cnVjdCBoaWRfcmVwb3J0KiBydW1ibGU7CisJc3RydWN0IGhpZF9yZXBvcnQqIGNvbmRpdGlvbjsKKworCXN0cnVjdCBsZ2ZmX2VmZmVjdCBlZmZlY3RzW0xHRkZfRUZGRUNUU107CisJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgICAvKiBkZXZpY2UtbGV2ZWwgbG9jay4gSGF2aW5nIGxvY2tzIG9uCisJCQkJCWEgcGVyLWVmZmVjdCBiYXNpcyBjb3VsZCBiZSBuaWNlLCBidXQKKwkJCQkJaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSAqLworCisJdW5zaWduZWQgbG9uZyBmbGFnc1sxXTsgICAgICAvKiBDb250YWlucyB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorCQkJCSAgICAgICAgc3RhdGUgb2YgdGhlIGRyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8JCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKy8qIENhbGxiYWNrcyAqLworc3RhdGljIHZvaWQgaGlkX2xnZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCk7CitzdGF0aWMgaW50IGhpZF9sZ2ZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBpbnQgaWQpOworCisvKiBMb2NhbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGhpZF9sZ2ZmX2lucHV0X2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CitzdGF0aWMgdm9pZCBoaWRfbGdmZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpOworc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0KiBoaWRfbGdmZl9kdXBsaWNhdGVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0Kik7CitzdGF0aWMgdm9pZCBoaWRfbGdmZl9kZWxldGVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0Kik7CisKK3N0YXRpYyBzaWduZWQgc2hvcnQgZmZfcnVtYmxlW10gPSB7CisJRkZfUlVNQkxFLAorCS0xCit9OworCitzdGF0aWMgc2lnbmVkIHNob3J0IGZmX2pveXN0aWNrW10gPSB7CisJRkZfQ09OU1RBTlQsCisJLTEKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgZGV2aWNlc1tdID0geworCXsweDA0NmQsIDB4YzIxMSwgZmZfcnVtYmxlfSwKKwl7MHgwNDZkLCAweGMyMTksIGZmX3J1bWJsZX0sCisJezB4MDQ2ZCwgMHhjMjgzLCBmZl9qb3lzdGlja30sCisJezB4MDAwMCwgMHgwMDAwLCBmZl9qb3lzdGlja30KK307CisKK2ludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGxnZmZfZGV2aWNlICpwcml2YXRlOworCXN0cnVjdCBoaWRfcmVwb3J0KiByZXBvcnQ7CisJc3RydWN0IGhpZF9maWVsZCogZmllbGQ7CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJaWYgKGxpc3RfZW1wdHkoJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0KSkgeworCQllcnIoIk5vIG91dHB1dCByZXBvcnQgZm91bmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBDaGVjayB0aGF0IHRoZSByZXBvcnQgbG9va3Mgb2sgKi8KKwlyZXBvcnQgPSAoc3RydWN0IGhpZF9yZXBvcnQqKWhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0Lm5leHQ7CisJaWYgKCFyZXBvcnQpIHsKKwkJZXJyKCJOVUxMIG91dHB1dCByZXBvcnQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CisJaWYgKCFmaWVsZCkgeworCQllcnIoIk5VTEwgZmllbGQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXZhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGdmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtMTsKKwltZW1zZXQocHJpdmF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBsZ2ZmX2RldmljZSkpOworCWhpZC0+ZmZfcHJpdmF0ZSA9IHByaXZhdGU7CisKKwkvKiBJbnB1dCBpbml0ICovCisJaGlkX2xnZmZfaW5wdXRfaW5pdChoaWQpOworCisKKwlwcml2YXRlLT5jb25zdGFudCA9IGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQocmVwb3J0KTsKKwlpZiAoIXByaXZhdGUtPmNvbnN0YW50KSB7CisJCWtmcmVlKHByaXZhdGUpOworCQlyZXR1cm4gLTE7CisJfQorCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDA4OworCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDdmOworCXByaXZhdGUtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbM10gPSAweDdmOworCisJcHJpdmF0ZS0+cnVtYmxlID0gaGlkX2xnZmZfZHVwbGljYXRlX3JlcG9ydChyZXBvcnQpOworCWlmICghcHJpdmF0ZS0+cnVtYmxlKSB7CisJCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQocHJpdmF0ZS0+Y29uc3RhbnQpOworCQlrZnJlZShwcml2YXRlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwcml2YXRlLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NDI7CisKKworCXByaXZhdGUtPmNvbmRpdGlvbiA9IGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQocmVwb3J0KTsKKwlpZiAoIXByaXZhdGUtPmNvbmRpdGlvbikgeworCQloaWRfbGdmZl9kZWxldGVfcmVwb3J0KHByaXZhdGUtPnJ1bWJsZSk7CisJCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQocHJpdmF0ZS0+Y29uc3RhbnQpOworCQlrZnJlZShwcml2YXRlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByaXZhdGUtPmhpZCA9IGhpZDsKKworCXNwaW5fbG9ja19pbml0KCZwcml2YXRlLT5sb2NrKTsKKwlpbml0X3RpbWVyKCZwcml2YXRlLT50aW1lcik7CisJcHJpdmF0ZS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXZhdGU7CisJcHJpdmF0ZS0+dGltZXIuZnVuY3Rpb24gPSBoaWRfbGdmZl90aW1lcjsKKworCS8qIEV2ZW50IGFuZCBleGl0IGNhbGxiYWNrcyAqLworCWhpZC0+ZmZfZXhpdCA9IGhpZF9sZ2ZmX2V4aXQ7CisJaGlkLT5mZl9ldmVudCA9IGhpZF9sZ2ZmX2V2ZW50OworCisJLyogU3RhcnQgdGhlIHVwZGF0ZSB0YXNrICovCisJcHJpdmF0ZS0+dGltZXIuZXhwaXJlcyA9IFJVTl9BVChQRVJJT0QpOworCWFkZF90aW1lcigmcHJpdmF0ZS0+dGltZXIpOyAgLypUT0RPOiBvbmx5IHJ1biB0aGUgdGltZXIgd2hlbiBhdCBsZWFzdAorCQkJCSAgICAgICBvbmUgZWZmZWN0IGlzIHBsYXlpbmcgKi8KKworCXByaW50ayhLRVJOX0lORk8gIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkZXZpY2VzIGJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQqIGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQqIHJlcG9ydCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCogcmV0OworCisJcmV0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxnZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXQpCisJCXJldHVybiBOVUxMOworCSpyZXQgPSAqcmVwb3J0OworCisJcmV0LT5maWVsZFswXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJldC0+ZmllbGRbMF0pIHsKKwkJa2ZyZWUocmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCSpyZXQtPmZpZWxkWzBdID0gKnJlcG9ydC0+ZmllbGRbMF07CisKKwlyZXQtPmZpZWxkWzBdLT52YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHMzMls4XSksIEdGUF9LRVJORUwpOworCWlmICghcmV0LT5maWVsZFswXS0+dmFsdWUpIHsKKwkJa2ZyZWUocmV0LT5maWVsZFswXSk7CisJCWtmcmVlKHJldCk7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQocmV0LT5maWVsZFswXS0+dmFsdWUsIDAsIHNpemVvZihzMzJbOF0pKTsJCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoaWRfbGdmZl9kZWxldGVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0KiByZXBvcnQpCit7CisJaWYgKHJlcG9ydCkgeworCQlrZnJlZShyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZSk7CisJCWtmcmVlKHJlcG9ydC0+ZmllbGRbMF0pOworCQlrZnJlZShyZXBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQgaGlkX2xnZmZfaW5wdXRfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKQoreworCXN0cnVjdCBkZXZpY2VfdHlwZSogZGV2ID0gZGV2aWNlczsKKwlzaWduZWQgc2hvcnQqIGZmOworCXUxNiBpZFZlbmRvciA9IGxlMTZfdG9fY3B1KGhpZC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwl1MTYgaWRQcm9kdWN0ID0gbGUxNl90b19jcHUoaGlkLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisKKwl3aGlsZSAoZGV2LT5pZFZlbmRvciAmJiAoaWRWZW5kb3IgIT0gZGV2LT5pZFZlbmRvciB8fCBpZFByb2R1Y3QgIT0gZGV2LT5pZFByb2R1Y3QpKQorCQlkZXYrKzsKKworCWZmID0gZGV2LT5mZjsKKworCXdoaWxlICgqZmYgPj0gMCkgeworCQlzZXRfYml0KCpmZiwgaGlkaW5wdXQtPmlucHV0LmZmYml0KTsKKwkJKytmZjsKKwl9CisKKwloaWRpbnB1dC0+aW5wdXQudXBsb2FkX2VmZmVjdCA9IGhpZF9sZ2ZmX3VwbG9hZF9lZmZlY3Q7CisJaGlkaW5wdXQtPmlucHV0LmZsdXNoID0gaGlkX2xnZmZfZmx1c2g7CisKKwlzZXRfYml0KEVWX0ZGLCBoaWRpbnB1dC0+aW5wdXQuZXZiaXQpOworCWhpZGlucHV0LT5pbnB1dC5mZl9lZmZlY3RzX21heCA9IExHRkZfRUZGRUNUUzsKK30KKworc3RhdGljIHZvaWQgaGlkX2xnZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKQoreworCXN0cnVjdCBsZ2ZmX2RldmljZSAqbGdmZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKworCXNldF9iaXQoREVWSUNFX0NMT1NJTkcsIGxnZmYtPmZsYWdzKTsKKwlkZWxfdGltZXJfc3luYygmbGdmZi0+dGltZXIpOworCisJaGlkX2xnZmZfZGVsZXRlX3JlcG9ydChsZ2ZmLT5jb25kaXRpb24pOworCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQobGdmZi0+cnVtYmxlKTsKKwloaWRfbGdmZl9kZWxldGVfcmVwb3J0KGxnZmYtPmNvbnN0YW50KTsKKworCWtmcmVlKGxnZmYpOworfQorCitzdGF0aWMgaW50IGhpZF9sZ2ZmX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYqIGlucHV0LAorCQkJICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKmxnZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IGxnZmZfZWZmZWN0ICplZmZlY3QgPSBsZ2ZmLT5lZmZlY3RzICsgY29kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHR5cGUgIT0gRVZfRkYpICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgCWlmICghTEdGRl9DSEVDS19PV05FUlNISVAoY29kZSwgbGdmZikpIHJldHVybiAtRUFDQ0VTOworCWlmICh2YWx1ZSA8IDApICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKwkKKwlpZiAodmFsdWUgPiAwKSB7CisJCWlmICh0ZXN0X2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncykpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJaWYgKHRlc3RfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWVmZmVjdC0+Y291bnQgPSB2YWx1ZTsKKworCQlpZiAoZWZmZWN0LT5lZmZlY3QucmVwbGF5LmRlbGF5KSB7CisJCQlzZXRfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpOworCQl9CisJCWVmZmVjdC0+c3RhcnRlZF9hdCA9IGppZmZpZXM7CisJfQorCWVsc2UgeyAvKiB2YWx1ZSA9PSAwICovCisJCWNsZWFyX2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncyk7CisJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK30KKworLyogRXJhc2UgYWxsIGVmZmVjdHMgdGhpcyBwcm9jZXNzIG93bnMgKi8KK3N0YXRpYyBpbnQgaGlkX2xnZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBsZ2ZmX2RldmljZSAqbGdmZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGRldi0+ZmZfZWZmZWN0c19tYXg7ICsraSkgeworCisJCS8qTk9URTogbm8gbmVlZCB0byBsb2NrIGhlcmUuIFRoZSBvbmx5IHRpbWVzIEVGRkVDVF9VU0VEIGlzCisJCSAgbW9kaWZpZWQgaXMgd2hlbiBlZmZlY3RzIGFyZSB1cGxvYWRlZCBvciB3aGVuIGFuIGVmZmVjdCBpcworCQkgIGVyYXNlZC4gQnV0IGEgcHJvY2VzcyBjYW5ub3QgY2xvc2UgaXRzIGRldi9pbnB1dC9ldmVudFggZmQKKwkJICBhbmQgcGVyZm9ybSBpb2N0bHMgb24gdGhlIHNhbWUgZmQgYWxsIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkJaWYgKCBjdXJyZW50LT5waWQgPT0gbGdmZi0+ZWZmZWN0c1tpXS5vd25lcgorCQkgICAgICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKSkgeworCQkJCisJCQlpZiAoaGlkX2xnZmZfZXJhc2UoZGV2LCBpKSkKKwkJCQl3YXJuKCJlcmFzZSBlZmZlY3QgJWQgZmFpbGVkIiwgaSk7CisJCX0KKworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9sZ2ZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGxnZmZfZGV2aWNlICpsZ2ZmID0gaGlkLT5mZl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIUxHRkZfQ0hFQ0tfT1dORVJTSElQKGlkLCBsZ2ZmKSkgcmV0dXJuIC1FQUNDRVM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCWxnZmYtPmVmZmVjdHNbaWRdLmZsYWdzWzBdID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfbGdmZl91cGxvYWRfZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYqIGlucHV0LAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCogZWZmZWN0KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dC0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKmxnZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IGxnZmZfZWZmZWN0IG5ldzsKKwlpbnQgaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoImlvY3RsIHJ1bWJsZSIpOworCisJaWYgKCF0ZXN0X2JpdChlZmZlY3QtPnR5cGUsIGlucHV0LT5mZmJpdCkpIHJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlZmZlY3QtPmlkID09IC0xKSB7CisJCWludCBpOworCisJCWZvciAoaT0wOyBpPExHRkZfRUZGRUNUUyAmJiB0ZXN0X2JpdChFRkZFQ1RfVVNFRCwgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7ICsraSk7CisJCWlmIChpID49IExHRkZfRUZGRUNUUykgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKworCQllZmZlY3QtPmlkID0gaTsKKwkJbGdmZi0+ZWZmZWN0c1tpXS5vd25lciA9IGN1cnJlbnQtPnBpZDsKKwkJbGdmZi0+ZWZmZWN0c1tpXS5mbGFnc1swXSA9IDA7CisJCXNldF9iaXQoRUZGRUNUX1VTRUQsIGxnZmYtPmVmZmVjdHNbaV0uZmxhZ3MpOworCX0KKwllbHNlIGlmICghTEdGRl9DSEVDS19PV05FUlNISVAoZWZmZWN0LT5pZCwgbGdmZikpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwlpZCA9IGVmZmVjdC0+aWQ7CisJbmV3ID0gbGdmZi0+ZWZmZWN0c1tpZF07CisKKwluZXcuZWZmZWN0ID0gKmVmZmVjdDsKKworCWlmICh0ZXN0X2JpdChFRkZFQ1RfU1RBUlRFRCwgbGdmZi0+ZWZmZWN0c1tpZF0uZmxhZ3MpCisJICAgIHx8IHRlc3RfYml0KEVGRkVDVF9TVEFSVEVELCBsZ2ZmLT5lZmZlY3RzW2lkXS5mbGFncykpIHsKKworCQkvKiBDaGFuZ2luZyByZXBsYXkgcGFyYW1ldGVycyBpcyBub3QgYWxsb3dlZCAoZm9yIHRoZSB0aW1lCisJCSAgIGJlaW5nKSAqLworCQlpZiAobmV3LmVmZmVjdC5yZXBsYXkuZGVsYXkgIT0gbGdmZi0+ZWZmZWN0c1tpZF0uZWZmZWN0LnJlcGxheS5kZWxheQorCQkgICAgfHwgbmV3LmVmZmVjdC5yZXBsYXkubGVuZ3RoICE9IGxnZmYtPmVmZmVjdHNbaWRdLmVmZmVjdC5yZXBsYXkubGVuZ3RoKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisJCWxnZmYtPmVmZmVjdHNbaWRdID0gbmV3OworCisJfSBlbHNlIHsKKwkJbGdmZi0+ZWZmZWN0c1tpZF0gPSBuZXc7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoaWRfbGdmZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpCit7CisJc3RydWN0IGxnZmZfZGV2aWNlICpsZ2ZmID0gKHN0cnVjdCBsZ2ZmX2RldmljZSopdGltZXJfZGF0YTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gbGdmZi0+aGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHggPSAweDdmLCB5ID0gMHg3ZjsgICAvLyBDb29yZGluYXRlcyBvZiBjb25zdGFudCBlZmZlY3RzCisJdW5zaWduZWQgaW50IGxlZnQgPSAwLCByaWdodCA9IDA7ICAgLy8gUnVtYmxpbmcKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisKKyAJZm9yIChpPTA7IGk8TEdGRl9FRkZFQ1RTOyArK2kpIHsKKwkJc3RydWN0IGxnZmZfZWZmZWN0KiBlZmZlY3QgPSBsZ2ZmLT5lZmZlY3RzICtpOworCisJCWlmICh0ZXN0X2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncykpIHsKKworCQkJc3dpdGNoIChlZmZlY3QtPmVmZmVjdC50eXBlKSB7CisJCQljYXNlIEZGX0NPTlNUQU5UOiB7CisJCQkJLy9UT0RPOiBoYW5kbGUgZW52ZWxvcGVzCisJCQkJaW50IGRlZ3JlZXMgPSBlZmZlY3QtPmVmZmVjdC5kaXJlY3Rpb24gKiAzNjAgPj4gMTY7CisJCQkJeCArPSBmaXhwX211bHQoZml4cF9zaW4oZGVncmVlcyksCisJCQkJCSAgICAgICBmaXhwX25ldzE2KGVmZmVjdC0+ZWZmZWN0LnUuY29uc3RhbnQubGV2ZWwpKTsKKwkJCQl5ICs9IGZpeHBfbXVsdCgtZml4cF9jb3MoZGVncmVlcyksCisJCQkJCSAgICAgICBmaXhwX25ldzE2KGVmZmVjdC0+ZWZmZWN0LnUuY29uc3RhbnQubGV2ZWwpKTsKKwkJCX0gICAgICAgYnJlYWs7CisJCQljYXNlIEZGX1JVTUJMRToKKwkJCQlyaWdodCArPSBlZmZlY3QtPmVmZmVjdC51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCQkJCWxlZnQgKz0gZWZmZWN0LT5lZmZlY3QudS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisJCQkJYnJlYWs7CisJCQl9OworCisJCQkvKiBPbmUgcnVuIG9mIHRoZSBlZmZlY3QgaXMgZmluaXNoZWQgcGxheWluZyAqLworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQkJZWZmZWN0LT5zdGFydGVkX2F0CisJCQkJCSsgZWZmZWN0LT5lZmZlY3QucmVwbGF5LmRlbGF5KkhaLzEwMDAKKwkJCQkJKyBlZmZlY3QtPmVmZmVjdC5yZXBsYXkubGVuZ3RoKkhaLzEwMDApKSB7CisJCQkJZGJnKCJGaW5pc2hlZCBwbGF5aW5nIG9uY2UgJWQiLCBpKTsKKwkJCQlpZiAoLS1lZmZlY3QtPmNvdW50IDw9IDApIHsKKwkJCQkJZGJnKCJTdG9wcGVkICVkIiwgaSk7CisJCQkJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlkYmcoIlN0YXJ0IGFnYWluICVkIiwgaSk7CisJCQkJCWlmIChlZmZlY3QtPmVmZmVjdC5yZXBsYXkubGVuZ3RoICE9IDApIHsKKwkJCQkJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJCQkJCQlzZXRfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJCQkJfQorCQkJCQllZmZlY3QtPnN0YXJ0ZWRfYXQgPSBqaWZmaWVzOworCQkJCX0KKwkJCX0KKworCQl9IGVsc2UgaWYgKHRlc3RfYml0KEVGRkVDVF9TVEFSVEVELCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKSkgeworCQkJLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIHN0YXJ0IHBsYXlpbmcgdGhlIGVmZmVjdCAqLworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQkJbGdmZi0+ZWZmZWN0c1tpXS5zdGFydGVkX2F0CisJCQkJCSsgbGdmZi0+ZWZmZWN0c1tpXS5lZmZlY3QucmVwbGF5LmRlbGF5KkhaLzEwMDApKSB7CisJCQkJZGJnKCJOb3cgcGxheWluZyAlZCIsIGkpOworCQkJCWNsZWFyX2JpdChFRkZFQ1RfU1RBUlRFRCwgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7CisJCQkJc2V0X2JpdChFRkZFQ1RfUExBWUlORywgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7CisJCQl9CisJCX0KKyAJfQorCisjZGVmaW5lIENMQU1QKHgpIGlmICh4IDwgMCkgeCA9IDA7IGlmICh4ID4gMHhmZikgeCA9IDB4ZmYKKworCS8vIENsYW1wIHZhbHVlcworCUNMQU1QKHgpOworCUNMQU1QKHkpOworCUNMQU1QKGxlZnQpOworCUNMQU1QKHJpZ2h0KTsKKworI3VuZGVmIENMQU1QCisKKwlpZiAoeCAhPSBsZ2ZmLT5jb25zdGFudC0+ZmllbGRbMF0tPnZhbHVlWzJdCisJICAgIHx8IHkgIT0gbGdmZi0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVszXSkgeworCQlsZ2ZmLT5jb25zdGFudC0+ZmllbGRbMF0tPnZhbHVlWzJdID0geDsKKwkJbGdmZi0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHk7CisJCWRiZygiKHgseSk9KCUwNHgsICUwNHgpIiwgeCwgeSk7CisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgbGdmZi0+Y29uc3RhbnQsIFVTQl9ESVJfT1VUKTsKKwl9CisKKwlpZiAobGVmdCAhPSBsZ2ZmLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVsyXQorCSAgICB8fCByaWdodCAhPSBsZ2ZmLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVszXSkgeworCQlsZ2ZmLT5ydW1ibGUtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IGxlZnQ7CisJCWxnZmYtPnJ1bWJsZS0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7CisJCWRiZygiKGxlZnQscmlnaHQpPSglMDR4LCAlMDR4KSIsIGxlZnQsIHJpZ2h0KTsKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZ2ZmLT5ydW1ibGUsIFVTQl9ESVJfT1VUKTsKKwl9CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9DTE9TSU5HLCBsZ2ZmLT5mbGFncykpIHsKKwkJbGdmZi0+dGltZXIuZXhwaXJlcyA9IFJVTl9BVChQRVJJT0QpOworCQlhZGRfdGltZXIoJmxnZmYtPnRpbWVyKTsKKwl9CisKKyAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLXRtZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2YTBhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciB2YXJpb3VzIEhJRCBjb21wbGlhbnQgZGV2aWNlcyBieSBUaHJ1c3RNYXN0ZXI6CisgKiAgICBUaHJ1c3RNYXN0ZXIgRmlyZVN0b3JtIER1YWwgUG93ZXIgMgorICogYW5kIHBvc3NpYmx5IG90aGVycyB3aG9zZSBkZXZpY2UgaWRzIGhhdmVuJ3QgYmVlbiBhZGRlZC4KKyAqCisgKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBieSBaaW54IFZlcml0dXNlCisgKiAgb24gMjAwMy0wMS0yNSBmcm9tIHRoZSBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkcml2ZXIsCisgKiAgd2hpY2ggaXMgYnkgSm9oYW5uIERlbmV1eC4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzIFppbnggVmVyaXR1c2UgPHppbnhAZXBpY3NvbC5vcmc+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjdW5kZWYgREVCVUcKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisKKyNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlICJmaXhwLWFyaXRoLmgiCisKKy8qIFVzYWdlcyBmb3IgdGhydXN0bWFzdGVyIGRldmljZXMgSSBrbm93IGFib3V0ICovCisjZGVmaW5lIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKKyNkZWZpbmUgREVMQVlfQ0FMQyh0LGRlbGF5KQkJKCh0KSArIChkZWxheSkqSFovMTAwMCkKKworLyogRWZmZWN0IHN0YXR1cyAqLworI2RlZmluZSBFRkZFQ1RfU1RBUlRFRCAwCS8qIEVmZmVjdCBpcyBnb2luZyB0byBwbGF5IGFmdGVyIHNvbWUgdGltZSAqLworI2RlZmluZSBFRkZFQ1RfUExBWUlORyAxCS8qIEVmZmVjdCBpcyBwbGF5aW5nICovCisjZGVmaW5lIEVGRkVDVF9VU0VEICAgIDIKKworLyogRm9yIHRtZmZfZGV2aWNlOjpmbGFncyAqLworI2RlZmluZSBERVZJQ0VfQ0xPU0lORyAwCS8qIFRoZSBkcml2ZXIgaXMgYmVpbmcgdW5pdGlhbGlzZWQgKi8KKworLyogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCBwcm9jZXNzIGNhbiBhY2Nlc3MgYW4gZWZmZWN0ICovCisjZGVmaW5lIENIRUNLX09XTkVSU0hJUChlZmZlY3QpIChjdXJyZW50LT5waWQgPT0gMCBcCisgICAgICAgIHx8IGVmZmVjdC5vd25lciA9PSBjdXJyZW50LT5waWQpCisKKyNkZWZpbmUgVE1GRl9DSEVDS19JRChpZCkJKChpZCkgPj0gMCAmJiAoaWQpIDwgVE1GRl9FRkZFQ1RTKQorCisjZGVmaW5lIFRNRkZfQ0hFQ0tfT1dORVJTSElQKGksIGwpIFwKKyAgICAgICAgKHRlc3RfYml0KEVGRkVDVF9VU0VELCBsLT5lZmZlY3RzW2ldLmZsYWdzKSBcCisgICAgICAgICYmIENIRUNLX09XTkVSU0hJUChsLT5lZmZlY3RzW2ldKSkKKworI2RlZmluZSBUTUZGX0VGRkVDVFMgOAorCitzdHJ1Y3QgdG1mZl9lZmZlY3QgeworCXBpZF90IG93bmVyOworCisJc3RydWN0IGZmX2VmZmVjdCBlZmZlY3Q7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOworCXVuc2lnbmVkIGludCBjb3VudDsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGxlZnQgdG8gcGxheSAqLworCisJdW5zaWduZWQgbG9uZyBwbGF5X2F0OyAgICAgICAgICAvKiBXaGVuIHRoZSBlZmZlY3Qgc3RhcnRzIHRvIHBsYXkgKi8KKwl1bnNpZ25lZCBsb25nIHN0b3BfYXQ7CQkvKiBXaGVuIHRoZSBlZmZlY3QgZW5kcyAqLworfTsKKworc3RydWN0IHRtZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKworCXN0cnVjdCBoaWRfZmllbGQgKnJ1bWJsZTsKKworCXVuc2lnbmVkIGludCBlZmZlY3RzX3BsYXlpbmc7CisJc3RydWN0IHRtZmZfZWZmZWN0IGVmZmVjdHNbVE1GRl9FRkZFQ1RTXTsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgIC8qIGRldmljZS1sZXZlbCBsb2NrLiBIYXZpbmcgbG9ja3Mgb24KKwkJCQkJYSBwZXItZWZmZWN0IGJhc2lzIGNvdWxkIGJlIG5pY2UsIGJ1dAorCQkJCQlpc24ndCByZWFsbHkgbmVjZXNzYXJ5ICovCisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOyAgICAgIC8qIENvbnRhaW5zIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJCQkJCXN0YXRlIG9mIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKy8qIENhbGxiYWNrcyAqLworc3RhdGljIHZvaWQgaGlkX3RtZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCk7CitzdGF0aWMgaW50IGhpZF90bWZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBpbnQgaWQpOworCisvKiBMb2NhbCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHN0cnVjdCB0bWZmX2RldmljZSAqdG1mZik7CitzdGF0aWMgdm9pZCBoaWRfdG1mZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpOworCitpbnQgaGlkX3RtZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCB0bWZmX2RldmljZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCisJcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocHJpdmF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSkpOworCWhpZC0+ZmZfcHJpdmF0ZSA9IHByaXZhdGU7CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJX19saXN0X2Zvcl9lYWNoKHBvcywgJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0KSB7CisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSAoc3RydWN0IGhpZF9yZXBvcnQgKilwb3M7CisJCWludCBmaWVsZG51bTsKKworCQlmb3IgKGZpZWxkbnVtID0gMDsgZmllbGRudW0gPCByZXBvcnQtPm1heGZpZWxkOyArK2ZpZWxkbnVtKSB7CisJCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCA9IHJlcG9ydC0+ZmllbGRbZmllbGRudW1dOworCisJCQlpZiAoZmllbGQtPm1heHVzYWdlIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCXN3aXRjaCAoZmllbGQtPnVzYWdlWzBdLmhpZCkgeworCQkJCWNhc2UgVEhSVVNUTUFTVEVSX1VTQUdFX1JVTUJMRV9MUjoKKwkJCQkJaWYgKGZpZWxkLT5yZXBvcnRfY291bnQgPCAyKSB7CisJCQkJCQl3YXJuKCJpZ25vcmluZyBUSFJVU1RNQVNURVJfVVNBR0VfUlVNQkxFX0xSIHdpdGggcmVwb3J0X2NvdW50IDwgMiIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9PSBmaWVsZC0+bG9naWNhbF9taW5pbXVtKSB7CisJCQkJCQl3YXJuKCJpZ25vcmluZyBUSFJVU1RNQVNURVJfVVNBR0VfUlVNQkxFX0xSIHdpdGggbG9naWNhbF9tYXhpbXVtID09IGxvZ2ljYWxfbWluaW11bSIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlpZiAocHJpdmF0ZS0+cmVwb3J0ICYmIHByaXZhdGUtPnJlcG9ydCAhPSByZXBvcnQpIHsKKwkJCQkJCXdhcm4oImlnbm9yaW5nIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIgaW4gb3RoZXIgcmVwb3J0Iik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCWlmIChwcml2YXRlLT5ydW1ibGUgJiYgcHJpdmF0ZS0+cnVtYmxlICE9IGZpZWxkKSB7CisJCQkJCQl3YXJuKCJpZ25vcmluZyBkdXBsaWNhdGUgVEhSVVNUTUFTVEVSX1VTQUdFX1JVTUJMRV9MUiIpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlwcml2YXRlLT5yZXBvcnQgPSByZXBvcnQ7CisJCQkJCXByaXZhdGUtPnJ1bWJsZSA9IGZpZWxkOworCisJCQkJCXNldF9iaXQoRkZfUlVNQkxFLCBoaWRpbnB1dC0+aW5wdXQuZmZiaXQpOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCXdhcm4oImlnbm9yaW5nIHVua25vd24gb3V0cHV0IHVzYWdlICUwOHgiLCBmaWVsZC0+dXNhZ2VbMF0uaGlkKTsKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEZhbGx0aHJvdWdoIHRvIGhlcmUgb25seSB3aGVuIGEgdmFsaWQgdXNhZ2UgaXMgZm91bmQgKi8KKwkJCWhpZGlucHV0LT5pbnB1dC51cGxvYWRfZWZmZWN0ID0gaGlkX3RtZmZfdXBsb2FkX2VmZmVjdDsKKwkJCWhpZGlucHV0LT5pbnB1dC5mbHVzaCA9IGhpZF90bWZmX2ZsdXNoOworCisJCQlzZXRfYml0KEVWX0ZGLCBoaWRpbnB1dC0+aW5wdXQuZXZiaXQpOworCQkJaGlkaW5wdXQtPmlucHV0LmZmX2VmZmVjdHNfbWF4ID0gVE1GRl9FRkZFQ1RTOworCQl9CisJfQorCisJcHJpdmF0ZS0+aGlkID0gaGlkOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUtPmxvY2spOworCWluaXRfdGltZXIoJnByaXZhdGUtPnRpbWVyKTsKKwlwcml2YXRlLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdmF0ZTsKKwlwcml2YXRlLT50aW1lci5mdW5jdGlvbiA9IGhpZF90bWZmX3RpbWVyOworCisJLyogRXZlbnQgYW5kIGV4aXQgY2FsbGJhY2tzICovCisJaGlkLT5mZl9leGl0ID0gaGlkX3RtZmZfZXhpdDsKKwloaWQtPmZmX2V2ZW50ID0gaGlkX3RtZmZfZXZlbnQ7CisKKwlpbmZvKCJGb3JjZSBmZWVkYmFjayBmb3IgVGhydXN0TWFzdGVyIHJ1bWJsZSBwYWQgZGV2aWNlcyBieSBaaW54IFZlcml0dXNlIDx6aW54QGVwaWNzb2wub3JnPiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF90bWZmX2V4aXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwlzZXRfYml0KERFVklDRV9DTE9TSU5HLCB0bWZmLT5mbGFncyk7CisJZGVsX3RpbWVyX3N5bmMoJnRtZmYtPnRpbWVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKworCWtmcmVlKHRtZmYpOworfQorCitzdGF0aWMgaW50IGhpZF90bWZmX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IHRtZmZfZWZmZWN0ICplZmZlY3QgPSAmdG1mZi0+ZWZmZWN0c1tjb2RlXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHR5cGUgIT0gRVZfRkYpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghVE1GRl9DSEVDS19JRChjb2RlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFUTUZGX0NIRUNLX09XTkVSU0hJUChjb2RlLCB0bWZmKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJaWYgKHZhbHVlIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHZhbHVlID4gMCkgeworCQlzZXRfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwkJZWZmZWN0LT5jb3VudCA9IHZhbHVlOworCQllZmZlY3QtPnBsYXlfYXQgPSBERUxBWV9DQUxDKGppZmZpZXMsIGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5kZWxheSk7CisJfSBlbHNlIHsKKwkJY2xlYXJfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwl9CisKKwloaWRfdG1mZl9yZWNhbGN1bGF0ZV90aW1lcih0bWZmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworCit9CisKKy8qIEVyYXNlIGFsbCBlZmZlY3RzIHRoaXMgcHJvY2VzcyBvd25zICovCisKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZmx1c2goc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCB0bWZmX2RldmljZSAqdG1mZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGRldi0+ZmZfZWZmZWN0c19tYXg7ICsraSkKKworCSAgICAgLyogTk9URTogbm8gbmVlZCB0byBsb2NrIGhlcmUuIFRoZSBvbmx5IHRpbWVzIEVGRkVDVF9VU0VEIGlzCisJCW1vZGlmaWVkIGlzIHdoZW4gZWZmZWN0cyBhcmUgdXBsb2FkZWQgb3Igd2hlbiBhbiBlZmZlY3QgaXMKKwkJZXJhc2VkLiBCdXQgYSBwcm9jZXNzIGNhbm5vdCBjbG9zZSBpdHMgZGV2L2lucHV0L2V2ZW50WCBmZAorCQlhbmQgcGVyZm9ybSBpb2N0bHMgb24gdGhlIHNhbWUgZmQgYWxsIGF0IHRoZSBzYW1lIHRpbWUgKi8KKworCQlpZiAoY3VycmVudC0+cGlkID09IHRtZmYtPmVmZmVjdHNbaV0ub3duZXIKKwkJICAgICAmJiB0ZXN0X2JpdChFRkZFQ1RfVVNFRCwgdG1mZi0+ZWZmZWN0c1tpXS5mbGFncykpCisJCQlpZiAoaGlkX3RtZmZfZXJhc2UoZGV2LCBpKSkKKwkJCQl3YXJuKCJlcmFzZSBlZmZlY3QgJWQgZmFpbGVkIiwgaSk7CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF90bWZmX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gaGlkLT5mZl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIVRNRkZfQ0hFQ0tfSUQoaWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIVRNRkZfQ0hFQ0tfT1dORVJTSElQKGlkLCB0bWZmKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJdG1mZi0+ZWZmZWN0c1tpZF0uZmxhZ3NbMF0gPSAwOworCWhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHRtZmYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3RtZmZfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXQtPnByaXZhdGU7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gaGlkLT5mZl9wcml2YXRlOworCWludCBpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF0ZXN0X2JpdChlZmZlY3QtPnR5cGUsIGlucHV0LT5mZmJpdCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChlZmZlY3QtPmlkICE9IC0xICYmICFUTUZGX0NIRUNLX0lEKGVmZmVjdC0+aWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZWZmZWN0LT5pZCA9PSAtMSkgeworCQkvKiBGaW5kIGEgZnJlZSBlZmZlY3QgKi8KKwkJZm9yIChpZCA9IDA7IGlkIDwgVE1GRl9FRkZFQ1RTICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCB0bWZmLT5lZmZlY3RzW2lkXS5mbGFncyk7ICsraWQpOworCisJCWlmIChpZCA+PSBUTUZGX0VGRkVDVFMpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PU1BDOworCQl9CisKKwkJZWZmZWN0LT5pZCA9IGlkOworCQl0bWZmLT5lZmZlY3RzW2lkXS5vd25lciA9IGN1cnJlbnQtPnBpZDsKKwkJdG1mZi0+ZWZmZWN0c1tpZF0uZmxhZ3NbMF0gPSAwOworCQlzZXRfYml0KEVGRkVDVF9VU0VELCB0bWZmLT5lZmZlY3RzW2lkXS5mbGFncyk7CisKKwl9IGVsc2UgeworCQkvKiBSZS11cGxvYWRpbmcgYW4gb3duZWQgZWZmZWN0LCB0byBjaGFuZ2UgcGFyYW1ldGVycyAqLworCQlpZCA9IGVmZmVjdC0+aWQ7CisJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgdG1mZi0+ZWZmZWN0c1tpZF0uZmxhZ3MpOworCX0KKworCXRtZmYtPmVmZmVjdHNbaWRdLmVmZmVjdCA9ICplZmZlY3Q7CisKKwloaWRfdG1mZl9yZWNhbGN1bGF0ZV90aW1lcih0bWZmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogU3RhcnQgdGhlIHRpbWVyIGZvciB0aGUgbmV4dCBzdGFydC9zdG9wL2RlbGF5ICovCisvKiBBbHdheXMgY2FsbCB0aGlzIHdoaWxlIHRtZmYtPmxvY2sgaXMgbG9ja2VkICovCisKK3N0YXRpYyB2b2lkIGhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHN0cnVjdCB0bWZmX2RldmljZSAqdG1mZikKK3sKKwlpbnQgaTsKKwlpbnQgZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5leHRfdGltZTsKKworCW5leHRfdGltZSA9IDA7CS8qIFNodXQgdXAgY29tcGlsZXIncyBpbmNvcnJlY3Qgd2FybmluZyAqLworCisJLyogRmluZCB0aGUgbmV4dCBjaGFuZ2UgaW4gYW4gZWZmZWN0J3Mgc3RhdHVzICovCisJZm9yIChpID0gMDsgaSA8IFRNRkZfRUZGRUNUUzsgKytpKSB7CisJCXN0cnVjdCB0bWZmX2VmZmVjdCAqZWZmZWN0ID0gJnRtZmYtPmVmZmVjdHNbaV07CisJCXVuc2lnbmVkIGxvbmcgcGxheV90aW1lOworCisJCWlmICghdGVzdF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJZWZmZWN0LT5zdG9wX2F0ID0gREVMQVlfQ0FMQyhlZmZlY3QtPnBsYXlfYXQsIGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5sZW5ndGgpOworCisJCWlmICghdGVzdF9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpKQorCQkJcGxheV90aW1lID0gZWZmZWN0LT5wbGF5X2F0OworCQllbHNlCisJCQlwbGF5X3RpbWUgPSBlZmZlY3QtPnN0b3BfYXQ7CisKKwkJZXZlbnRzKys7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcGxheV90aW1lKSkKKwkJCXBsYXlfdGltZSA9IGppZmZpZXM7CisKKwkJaWYgKGV2ZW50cyA9PSAxKQorCQkJbmV4dF90aW1lID0gcGxheV90aW1lOworCQllbHNlIHsKKwkJCWlmICh0aW1lX2FmdGVyKG5leHRfdGltZSwgcGxheV90aW1lKSkKKwkJCQluZXh0X3RpbWUgPSBwbGF5X3RpbWU7CisJCX0KKwl9CisKKwlpZiAoIWV2ZW50cyAmJiB0bWZmLT5lZmZlY3RzX3BsYXlpbmcpIHsKKwkJLyogVHJlYXQgYWxsIGVmZmVjdHMgdHVybmluZyBvZmYgYXMgYW4gZXZlbnQgKi8KKwkJZXZlbnRzID0gMTsKKwkJbmV4dF90aW1lID0gamlmZmllczsKKwl9CisKKwlpZiAoIWV2ZW50cykgeworCQkvKiBObyBldmVudHMsIG5vIHRpbWUsIG5vIG5lZWQgZm9yIGEgdGltZXIuICovCisJCWRlbF90aW1lcl9zeW5jKCZ0bWZmLT50aW1lcik7CisJCXJldHVybjsKKwl9CisKKwltb2RfdGltZXIoJnRtZmYtPnRpbWVyLCBuZXh0X3RpbWUpOworfQorCisvKiBDaGFuZ2VzIHZhbHVlcyBmcm9tIDAgdG8gMHhmZmZmIGludG8gdmFsdWVzIGZyb20gbWluaW11bSB0byBtYXhpbXVtICovCitzdGF0aWMgaW5saW5lIGludCBoaWRfdG1mZl9zY2FsZSh1bnNpZ25lZCBpbnQgaW4sIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gKGluICogKG1heGltdW0gLSBtaW5pbXVtKSAvIDB4ZmZmZikgKyBtaW5pbXVtOworCWlmIChyZXQgPCBtaW5pbXVtKQorCQlyZXR1cm4gbWluaW11bTsKKwlpZiAocmV0ID4gbWF4aW11bSkKKwkJcmV0dXJuIG1heGltdW07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaGlkX3RtZmZfdGltZXIodW5zaWduZWQgbG9uZyB0aW1lcl9kYXRhKQoreworCXN0cnVjdCB0bWZmX2RldmljZSAqdG1mZiA9IChzdHJ1Y3QgdG1mZl9kZXZpY2UgKikgdGltZXJfZGF0YTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdG1mZi0+aGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxlZnQgPSAwLCByaWdodCA9IDA7CS8qIFJ1bWJsaW5nICovCisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJdG1mZi0+ZWZmZWN0c19wbGF5aW5nID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBUTUZGX0VGRkVDVFM7ICsraSkgeworCQlzdHJ1Y3QgdG1mZl9lZmZlY3QgKmVmZmVjdCA9ICZ0bWZmLT5lZmZlY3RzW2ldOworCisJCWlmICghdGVzdF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGVmZmVjdC0+cGxheV9hdCkpCisJCQljb250aW51ZTsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlZmZlY3QtPnN0b3BfYXQpKSB7CisKKwkJCWRiZygiRmluaXNoZWQgcGxheWluZyBvbmNlICVkIiwgaSk7CisJCQljbGVhcl9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpOworCisJCQlpZiAoLS1lZmZlY3QtPmNvdW50IDw9IDApIHsKKwkJCQlkYmcoIlN0b3BwZWQgJWQiLCBpKTsKKwkJCQljbGVhcl9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlkYmcoIlN0YXJ0IGFnYWluICVkIiwgaSk7CisJCQkJZWZmZWN0LT5wbGF5X2F0ID0gREVMQVlfQ0FMQyhqaWZmaWVzLCBlZmZlY3QtPmVmZmVjdC5yZXBsYXkuZGVsYXkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJKyt0bWZmLT5lZmZlY3RzX3BsYXlpbmc7CisKKwkJc2V0X2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisKKwkJc3dpdGNoIChlZmZlY3QtPmVmZmVjdC50eXBlKSB7CisJCQljYXNlIEZGX1JVTUJMRToKKwkJCQlyaWdodCArPSBlZmZlY3QtPmVmZmVjdC51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCQkJCWxlZnQgKz0gZWZmZWN0LT5lZmZlY3QudS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCUJVRygpOworCQkJCWJyZWFrOworCQl9CisJfQorCisJbGVmdCA9IGhpZF90bWZmX3NjYWxlKGxlZnQsIHRtZmYtPnJ1bWJsZS0+bG9naWNhbF9taW5pbXVtLCB0bWZmLT5ydW1ibGUtPmxvZ2ljYWxfbWF4aW11bSk7CisJcmlnaHQgPSBoaWRfdG1mZl9zY2FsZShyaWdodCwgdG1mZi0+cnVtYmxlLT5sb2dpY2FsX21pbmltdW0sIHRtZmYtPnJ1bWJsZS0+bG9naWNhbF9tYXhpbXVtKTsKKworCWlmIChsZWZ0ICE9IHRtZmYtPnJ1bWJsZS0+dmFsdWVbMF0gfHwgcmlnaHQgIT0gdG1mZi0+cnVtYmxlLT52YWx1ZVsxXSkgeworCQl0bWZmLT5ydW1ibGUtPnZhbHVlWzBdID0gbGVmdDsKKwkJdG1mZi0+cnVtYmxlLT52YWx1ZVsxXSA9IHJpZ2h0OworCQlkYmcoIihsZWZ0LHJpZ2h0KT0oJTA4eCwgJTA4eCkiLCBsZWZ0LCByaWdodCk7CisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgdG1mZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfQ0xPU0lORywgdG1mZi0+ZmxhZ3MpKQorCQloaWRfdG1mZl9yZWNhbGN1bGF0ZV90aW1lcih0bWZmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5MzI5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oCkBAIC0wLDAgKzEsNTEwIEBACisjaWZuZGVmIF9fSElEX0gKKyNkZWZpbmUgX19ISURfSAorCisvKgorICogJElkOiBoaWQuaCx2IDEuMjQgMjAwMS8xMi8yNyAxMDozNzo0MSB2b2p0ZWNoIEV4cCAkCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyoKKyAqIFVTQiBISUQgKEh1bWFuIEludGVyZmFjZSBEZXZpY2UpIGludGVyZmFjZSBjbGFzcyBjb2RlCisgKi8KKworI2RlZmluZSBVU0JfSU5URVJGQUNFX0NMQVNTX0hJRAkJMworCisvKgorICogSElEIGNsYXNzIHJlcXVlc3RzCisgKi8KKworI2RlZmluZSBISURfUkVRX0dFVF9SRVBPUlQJCTB4MDEKKyNkZWZpbmUgSElEX1JFUV9HRVRfSURMRQkJMHgwMgorI2RlZmluZSBISURfUkVRX0dFVF9QUk9UT0NPTAkJMHgwMworI2RlZmluZSBISURfUkVRX1NFVF9SRVBPUlQJCTB4MDkKKyNkZWZpbmUgSElEX1JFUV9TRVRfSURMRQkJMHgwQQorI2RlZmluZSBISURfUkVRX1NFVF9QUk9UT0NPTAkJMHgwQgorCisvKgorICogSElEIGNsYXNzIGRlc2NyaXB0b3IgdHlwZXMKKyAqLworCisjZGVmaW5lIEhJRF9EVF9ISUQJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDAxKQorI2RlZmluZSBISURfRFRfUkVQT1JUCQkJKFVTQl9UWVBFX0NMQVNTIHwgMHgwMikKKyNkZWZpbmUgSElEX0RUX1BIWVNJQ0FMCQkJKFVTQl9UWVBFX0NMQVNTIHwgMHgwMykKKworLyoKKyAqIFdlIHBhcnNlIGVhY2ggZGVzY3JpcHRpb24gaXRlbSBpbnRvIHRoaXMgc3RydWN0dXJlLiBTaG9ydCBpdGVtcyBkYXRhCisgKiB2YWx1ZXMgYXJlIGV4cGFuZGVkIHRvIDMyLWJpdCBzaWduZWQgaW50LCBsb25nIGl0ZW1zIGNvbnRhaW4gYSBwb2ludGVyCisgKiBpbnRvIHRoZSBkYXRhIGFyZWEuCisgKi8KKworc3RydWN0IGhpZF9pdGVtIHsKKwl1bnNpZ25lZCAgZm9ybWF0OworCV9fdTggICAgICBzaXplOworCV9fdTggICAgICB0eXBlOworCV9fdTggICAgICB0YWc7CisJdW5pb24geworCSAgICBfX3U4ICAgdTg7CisJICAgIF9fczggICBzODsKKwkgICAgX191MTYgIHUxNjsKKwkgICAgX19zMTYgIHMxNjsKKwkgICAgX191MzIgIHUzMjsKKwkgICAgX19zMzIgIHMzMjsKKwkgICAgX191OCAgKmxvbmdkYXRhOworCX0gZGF0YTsKK307CisKKy8qCisgKiBISUQgcmVwb3J0IGl0ZW0gZm9ybWF0CisgKi8KKworI2RlZmluZSBISURfSVRFTV9GT1JNQVRfU0hPUlQJMAorI2RlZmluZSBISURfSVRFTV9GT1JNQVRfTE9ORwkxCisKKy8qCisgKiBTcGVjaWFsIHRhZyBpbmRpY2F0aW5nIGxvbmcgaXRlbXMKKyAqLworCisjZGVmaW5lIEhJRF9JVEVNX1RBR19MT05HCTE1CisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgaXRlbSB0eXBlIChwcmVmaXggYml0IDIsMykKKyAqLworCisjZGVmaW5lIEhJRF9JVEVNX1RZUEVfTUFJTgkJMAorI2RlZmluZSBISURfSVRFTV9UWVBFX0dMT0JBTAkJMQorI2RlZmluZSBISURfSVRFTV9UWVBFX0xPQ0FMCQkyCisjZGVmaW5lIEhJRF9JVEVNX1RZUEVfUkVTRVJWRUQJCTMKKworLyoKKyAqIEhJRCByZXBvcnQgZGVzY3JpcHRvciBtYWluIGl0ZW0gdGFncworICovCisKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9UQUdfSU5QVVQJCQk4CisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVEFHX09VVFBVVAkJOQorI2RlZmluZSBISURfTUFJTl9JVEVNX1RBR19GRUFUVVJFCQkxMQorI2RlZmluZSBISURfTUFJTl9JVEVNX1RBR19CRUdJTl9DT0xMRUNUSU9OCTEwCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVEFHX0VORF9DT0xMRUNUSU9OCTEyCisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgbWFpbiBpdGVtIGNvbnRlbnRzCisgKi8KKworI2RlZmluZSBISURfTUFJTl9JVEVNX0NPTlNUQU5UCQkweDAwMQorI2RlZmluZSBISURfTUFJTl9JVEVNX1ZBUklBQkxFCQkweDAwMgorI2RlZmluZSBISURfTUFJTl9JVEVNX1JFTEFUSVZFCQkweDAwNAorI2RlZmluZSBISURfTUFJTl9JVEVNX1dSQVAJCTB4MDA4CQorI2RlZmluZSBISURfTUFJTl9JVEVNX05PTkxJTkVBUgkJMHgwMTAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9OT19QUkVGRVJSRUQJMHgwMjAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFCTB4MDQwCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVk9MQVRJTEUJCTB4MDgwCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fQlVGRkVSRURfQllURQkweDEwMAorCisvKgorICogSElEIHJlcG9ydCBkZXNjcmlwdG9yIGNvbGxlY3Rpb24gaXRlbSB0eXBlcworICovCisKKyNkZWZpbmUgSElEX0NPTExFQ1RJT05fUEhZU0lDQUwJCTAKKyNkZWZpbmUgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04JMQorI2RlZmluZSBISURfQ09MTEVDVElPTl9MT0dJQ0FMCQkyCisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgZ2xvYmFsIGl0ZW0gdGFncworICovCisKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19VU0FHRV9QQUdFCQkwCisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NSU5JTVVNCTEKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01BWElNVU0JMgorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU0JMworI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01BWElNVU0JNAorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQJNQorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVQJCTYKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfU0laRQkJNworI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRAkJOAorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9DT1VOVAk5CisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfUFVTSAkJMTAKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19QT1AJCQkxMQorCisvKgorICogSElEIHJlcG9ydCBkZXNjcmlwdG9yIGxvY2FsIGl0ZW0gdGFncworICovCisKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFCQkwCisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRV9NSU5JTVVNCTEKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01BWElNVU0JMgorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVTSUdOQVRPUl9JTkRFWAkzCisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19ERVNJR05BVE9SX01JTklNVU0JNAorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVTSUdOQVRPUl9NQVhJTVVNCTUKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1NUUklOR19JTkRFWAkJNworI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfU1RSSU5HX01JTklNVU0JOAorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfU1RSSU5HX01BWElNVU0JOQorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSCQkxMAorCisvKgorICogSElEIHVzYWdlIHRhYmxlcworICovCisKKyNkZWZpbmUgSElEX1VTQUdFX1BBR0UJCTB4ZmZmZjAwMDAKKworI2RlZmluZSBISURfVVBfVU5ERUZJTkVECTB4MDAwMDAwMDAKKyNkZWZpbmUgSElEX1VQX0dFTkRFU0sgCQkweDAwMDEwMDAwCisjZGVmaW5lIEhJRF9VUF9LRVlCT0FSRCAJMHgwMDA3MDAwMAorI2RlZmluZSBISURfVVBfTEVEIAkJMHgwMDA4MDAwMAorI2RlZmluZSBISURfVVBfQlVUVE9OIAkJMHgwMDA5MDAwMAorI2RlZmluZSBISURfVVBfT1JESU5BTCAJCTB4MDAwYTAwMDAKKyNkZWZpbmUgSElEX1VQX0NPTlNVTUVSCQkweDAwMGMwMDAwCisjZGVmaW5lIEhJRF9VUF9ESUdJVElaRVIgCTB4MDAwZDAwMDAKKyNkZWZpbmUgSElEX1VQX1BJRCAJCTB4MDAwZjAwMDAKKyNkZWZpbmUgSElEX1VQX0hQVkVORE9SICAgICAgICAgMHhmZjdmMDAwMAorI2RlZmluZSBISURfVVBfTVNWRU5ET1IJCTB4ZmYwMDAwMDAKKworI2RlZmluZSBISURfVVNBR0UJCTB4MDAwMGZmZmYKKworI2RlZmluZSBISURfR0RfUE9JTlRFUgkJMHgwMDAxMDAwMQorI2RlZmluZSBISURfR0RfTU9VU0UJCTB4MDAwMTAwMDIKKyNkZWZpbmUgSElEX0dEX0pPWVNUSUNLCQkweDAwMDEwMDA0CisjZGVmaW5lIEhJRF9HRF9HQU1FUEFECQkweDAwMDEwMDA1CisjZGVmaW5lIEhJRF9HRF9LRVlCT0FSRAkJMHgwMDAxMDAwNgorI2RlZmluZSBISURfR0RfS0VZUEFECQkweDAwMDEwMDA3CisjZGVmaW5lIEhJRF9HRF9NVUxUSUFYSVMJMHgwMDAxMDAwOAorI2RlZmluZSBISURfR0RfWAkJMHgwMDAxMDAzMAorI2RlZmluZSBISURfR0RfWQkJMHgwMDAxMDAzMQorI2RlZmluZSBISURfR0RfWgkJMHgwMDAxMDAzMgorI2RlZmluZSBISURfR0RfUlgJCTB4MDAwMTAwMzMKKyNkZWZpbmUgSElEX0dEX1JZCQkweDAwMDEwMDM0CisjZGVmaW5lIEhJRF9HRF9SWgkJMHgwMDAxMDAzNQorI2RlZmluZSBISURfR0RfU0xJREVSCQkweDAwMDEwMDM2CisjZGVmaW5lIEhJRF9HRF9ESUFMCQkweDAwMDEwMDM3CisjZGVmaW5lIEhJRF9HRF9XSEVFTAkJMHgwMDAxMDAzOAorI2RlZmluZSBISURfR0RfSEFUU1dJVENICTB4MDAwMTAwMzkKKyNkZWZpbmUgSElEX0dEX0JVRkZFUgkJMHgwMDAxMDAzYQorI2RlZmluZSBISURfR0RfQllURUNPVU5UCTB4MDAwMTAwM2IKKyNkZWZpbmUgSElEX0dEX01PVElPTgkJMHgwMDAxMDAzYworI2RlZmluZSBISURfR0RfU1RBUlQJCTB4MDAwMTAwM2QKKyNkZWZpbmUgSElEX0dEX1NFTEVDVAkJMHgwMDAxMDAzZQorI2RlZmluZSBISURfR0RfVlgJCTB4MDAwMTAwNDAKKyNkZWZpbmUgSElEX0dEX1ZZCQkweDAwMDEwMDQxCisjZGVmaW5lIEhJRF9HRF9WWgkJMHgwMDAxMDA0MgorI2RlZmluZSBISURfR0RfVkJSWAkJMHgwMDAxMDA0MworI2RlZmluZSBISURfR0RfVkJSWQkJMHgwMDAxMDA0NAorI2RlZmluZSBISURfR0RfVkJSWgkJMHgwMDAxMDA0NQorI2RlZmluZSBISURfR0RfVk5PCQkweDAwMDEwMDQ2CisjZGVmaW5lIEhJRF9HRF9GRUFUVVJFCQkweDAwMDEwMDQ3CisjZGVmaW5lIEhJRF9HRF9VUAkJMHgwMDAxMDA5MAorI2RlZmluZSBISURfR0RfRE9XTgkJMHgwMDAxMDA5MQorI2RlZmluZSBISURfR0RfUklHSFQJCTB4MDAwMTAwOTIKKyNkZWZpbmUgSElEX0dEX0xFRlQJCTB4MDAwMTAwOTMKKworLyoKKyAqIEhJRCByZXBvcnQgdHlwZXMgLS0tIE91Y2ghIEhJRCBzcGVjIHNheXMgMSAyIDMhCisgKi8KKworI2RlZmluZSBISURfSU5QVVRfUkVQT1JUCTAKKyNkZWZpbmUgSElEX09VVFBVVF9SRVBPUlQJMQorI2RlZmluZSBISURfRkVBVFVSRV9SRVBPUlQJMgorCisvKgorICogSElEIGRldmljZSBxdWlya3MuCisgKi8KKworI2RlZmluZSBISURfUVVJUktfSU5WRVJUCQkJMHgwMDEKKyNkZWZpbmUgSElEX1FVSVJLX05PVE9VQ0gJCQkweDAwMgorI2RlZmluZSBISURfUVVJUktfSUdOT1JFCQkJMHgwMDQKKyNkZWZpbmUgSElEX1FVSVJLX05PR0VUCQkJCTB4MDA4CisjZGVmaW5lIEhJRF9RVUlSS19ISURERVYJCQkweDAxMAorI2RlZmluZSBISURfUVVJUktfQkFEUEFECQkJMHgwMjAKKyNkZWZpbmUgSElEX1FVSVJLX01VTFRJX0lOUFVUCQkJMHgwNDAKKyNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcJCTB4MDgwCisjZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181CQkweDEwMAorI2RlZmluZSBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT04JCTB4MjAwCisKKy8qCisgKiBUaGlzIGlzIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgb2YgdGhlIHBhcnNlci4gVGhpcyBpbmZvcm1hdGlvbiBpcworICogcGVyc2lzdGVudCBmb3IgbWFpbi1pdGVtcy4gVGhlIGdsb2JhbCBlbnZpcm9ubWVudCBjYW4gYmUgc2F2ZWQgYW5kCisgKiByZXN0b3JlZCB3aXRoIFBVU0gvUE9QIHN0YXRlbWVudHMuCisgKi8KKworc3RydWN0IGhpZF9nbG9iYWwgeworCXVuc2lnbmVkIHVzYWdlX3BhZ2U7CisJX19zMzIgICAgbG9naWNhbF9taW5pbXVtOworCV9fczMyICAgIGxvZ2ljYWxfbWF4aW11bTsKKwlfX3MzMiAgICBwaHlzaWNhbF9taW5pbXVtOworCV9fczMyICAgIHBoeXNpY2FsX21heGltdW07CisJX19zMzIgICAgdW5pdF9leHBvbmVudDsKKwl1bnNpZ25lZCB1bml0OworCXVuc2lnbmVkIHJlcG9ydF9pZDsKKwl1bnNpZ25lZCByZXBvcnRfc2l6ZTsKKwl1bnNpZ25lZCByZXBvcnRfY291bnQ7Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgbG9jYWwgZW52aXJvbm1lbnQuIEl0IGlzIHBlcnNpc3RlbnQgdXAgdGhlIG5leHQgbWFpbi1pdGVtLgorICovCisKKyNkZWZpbmUgSElEX01BWF9ERVNDUklQVE9SX1NJWkUJCTQwOTYKKyNkZWZpbmUgSElEX01BWF9VU0FHRVMJCQkxMDI0CisjZGVmaW5lIEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUwkxNgorCitzdHJ1Y3QgaGlkX2xvY2FsIHsKKwl1bnNpZ25lZCB1c2FnZVtISURfTUFYX1VTQUdFU107IC8qIHVzYWdlIGFycmF5ICovCisJdW5zaWduZWQgY29sbGVjdGlvbl9pbmRleFtISURfTUFYX1VTQUdFU107IC8qIGNvbGxlY3Rpb24gaW5kZXggYXJyYXkgKi8KKwl1bnNpZ25lZCB1c2FnZV9pbmRleDsKKwl1bnNpZ25lZCB1c2FnZV9taW5pbXVtOworCXVuc2lnbmVkIGRlbGltaXRlcl9kZXB0aDsKKwl1bnNpZ25lZCBkZWxpbWl0ZXJfYnJhbmNoOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gc3RhY2suIFdlIGNsaW1iIHVwIHRoZSBzdGFjayB0byBkZXRlcm1pbmUKKyAqIGFwcGxpY2F0aW9uIGFuZCBmdW5jdGlvbiBvZiBlYWNoIGZpZWxkLgorICovCisKK3N0cnVjdCBoaWRfY29sbGVjdGlvbiB7CisJdW5zaWduZWQgdHlwZTsKKwl1bnNpZ25lZCB1c2FnZTsKKwl1bnNpZ25lZCBsZXZlbDsKK307CisKK3N0cnVjdCBoaWRfdXNhZ2UgeworCXVuc2lnbmVkICBoaWQ7CQkJLyogaGlkIHVzYWdlIGNvZGUgKi8KKwl1bnNpZ25lZCAgY29sbGVjdGlvbl9pbmRleDsJLyogaW5kZXggaW50byBjb2xsZWN0aW9uIGFycmF5ICovCisJLyogaGlkaW5wdXQgZGF0YSAqLworCV9fdTE2ICAgICBjb2RlOwkJCS8qIGlucHV0IGRyaXZlciBjb2RlICovCisJX191OCAgICAgIHR5cGU7CQkJLyogaW5wdXQgZHJpdmVyIHR5cGUgKi8KKwlfX3M4CSAgaGF0X21pbjsJCS8qIGhhdCBzd2l0Y2ggZnVuICovCisJX19zOAkgIGhhdF9tYXg7CQkvKiBkaXR0byAqLworCV9fczgJICBoYXRfZGlyOwkJLyogZGl0dG8gKi8KK307CisKK3N0cnVjdCBoaWRfaW5wdXQ7CisKK3N0cnVjdCBoaWRfZmllbGQgeworCXVuc2lnbmVkICBwaHlzaWNhbDsJCS8qIHBoeXNpY2FsIHVzYWdlIGZvciB0aGlzIGZpZWxkICovCisJdW5zaWduZWQgIGxvZ2ljYWw7CQkvKiBsb2dpY2FsIHVzYWdlIGZvciB0aGlzIGZpZWxkICovCisJdW5zaWduZWQgIGFwcGxpY2F0aW9uOwkJLyogYXBwbGljYXRpb24gdXNhZ2UgZm9yIHRoaXMgZmllbGQgKi8KKwlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZTsJLyogdXNhZ2UgdGFibGUgZm9yIHRoaXMgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCAgbWF4dXNhZ2U7CQkvKiBtYXhpbXVtIHVzYWdlIGluZGV4ICovCisJdW5zaWduZWQgIGZsYWdzOwkJLyogbWFpbi1pdGVtIGZsYWdzIChpLmUuIHZvbGF0aWxlLGFycmF5LGNvbnN0YW50KSAqLworCXVuc2lnbmVkICByZXBvcnRfb2Zmc2V0OwkvKiBiaXQgb2Zmc2V0IGluIHRoZSByZXBvcnQgKi8KKwl1bnNpZ25lZCAgcmVwb3J0X3NpemU7CQkvKiBzaXplIG9mIHRoaXMgZmllbGQgaW4gdGhlIHJlcG9ydCAqLworCXVuc2lnbmVkICByZXBvcnRfY291bnQ7CQkvKiBudW1iZXIgb2YgdGhpcyBmaWVsZCBpbiB0aGUgcmVwb3J0ICovCisJdW5zaWduZWQgIHJlcG9ydF90eXBlOwkJLyogKGlucHV0LG91dHB1dCxmZWF0dXJlKSAqLworCV9fczMyICAgICp2YWx1ZTsJCS8qIGxhc3Qga25vd24gdmFsdWUocykgKi8KKwlfX3MzMiAgICAgbG9naWNhbF9taW5pbXVtOworCV9fczMyICAgICBsb2dpY2FsX21heGltdW07CisJX19zMzIgICAgIHBoeXNpY2FsX21pbmltdW07CisJX19zMzIgICAgIHBoeXNpY2FsX21heGltdW07CisJX19zMzIgICAgIHVuaXRfZXhwb25lbnQ7CisJdW5zaWduZWQgIHVuaXQ7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsJLyogYXNzb2NpYXRlZCByZXBvcnQgKi8KKwl1bnNpZ25lZCBpbmRleDsJCQkvKiBpbmRleCBpbnRvIHJlcG9ydC0+ZmllbGRbXSAqLworCS8qIGhpZGlucHV0IGRhdGEgKi8KKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsJLyogYXNzb2NpYXRlZCBpbnB1dCBzdHJ1Y3R1cmUgKi8KKwlfX3UxNiBkcGFkOwkJCS8qIGRwYWQgaW5wdXQgY29kZSAqLworfTsKKworI2RlZmluZSBISURfTUFYX0ZJRUxEUyA2NAorCitzdHJ1Y3QgaGlkX3JlcG9ydCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGlkOwkJCQkJLyogaWQgb2YgdGhpcyByZXBvcnQgKi8KKwl1bnNpZ25lZCB0eXBlOwkJCQkJLyogcmVwb3J0IHR5cGUgKi8KKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZFtISURfTUFYX0ZJRUxEU107CS8qIGZpZWxkcyBvZiB0aGUgcmVwb3J0ICovCisJdW5zaWduZWQgbWF4ZmllbGQ7CQkJCS8qIG1heGltdW0gdmFsaWQgZmllbGQgaW5kZXggKi8KKwl1bnNpZ25lZCBzaXplOwkJCQkJLyogc2l6ZSBvZiB0aGUgcmVwb3J0IChiaXRzKSAqLworCXN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2U7CQkJLyogYXNzb2NpYXRlZCBkZXZpY2UgKi8KK307CisKK3N0cnVjdCBoaWRfcmVwb3J0X2VudW0geworCXVuc2lnbmVkIG51bWJlcmVkOworCXN0cnVjdCBsaXN0X2hlYWQgcmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydF9pZF9oYXNoWzI1Nl07Cit9OworCisjZGVmaW5lIEhJRF9SRVBPUlRfVFlQRVMgMworCisjZGVmaW5lIEhJRF9CVUZGRVJfU0laRQkJNjQJCS8qIHVzZSA2NCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFsbCBwb3NzaWJsZSBwYWNrZXRsZW4gKi8KKyNkZWZpbmUgSElEX0NPTlRST0xfRklGT19TSVpFCTI1NgkJLyogdG8gaW5pdCBkZXZpY2VzIHdpdGggPjEwMCByZXBvcnRzICovCisjZGVmaW5lIEhJRF9PVVRQVVRfRklGT19TSVpFCTY0CisKK3N0cnVjdCBoaWRfY29udHJvbF9maWZvIHsKKwl1bnNpZ25lZCBjaGFyIGRpcjsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworfTsKKworI2RlZmluZSBISURfQ0xBSU1FRF9JTlBVVAkxCisjZGVmaW5lIEhJRF9DTEFJTUVEX0hJRERFVgkyCisKKyNkZWZpbmUgSElEX0NUUkxfUlVOTklORwkxCisjZGVmaW5lIEhJRF9PVVRfUlVOTklORwkJMgorCitzdHJ1Y3QgaGlkX2lucHV0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGlucHV0OworfTsKKworc3RydWN0IGhpZF9kZXZpY2UgewkJCQkJCQkvKiBkZXZpY2UgcmVwb3J0IGRlc2NyaXB0b3IgKi8KKwkgX191OCAqcmRlc2M7CisJdW5zaWduZWQgcnNpemU7CisJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2xsZWN0aW9uOwkJCQkvKiBMaXN0IG9mIEhJRCBjb2xsZWN0aW9ucyAqLworCXVuc2lnbmVkIGNvbGxlY3Rpb25fc2l6ZTsJCQkJCS8qIE51bWJlciBvZiBhbGxvY2F0ZWQgaGlkX2NvbGxlY3Rpb25zICovCisJdW5zaWduZWQgbWF4Y29sbGVjdGlvbjsJCQkJCQkvKiBOdW1iZXIgb2YgcGFyc2VkIGNvbGxlY3Rpb25zICovCisJdW5zaWduZWQgbWF4YXBwbGljYXRpb247CQkJCQkvKiBOdW1iZXIgb2YgYXBwbGljYXRpb25zICovCisJdW5zaWduZWQgdmVyc2lvbjsJCQkJCQkvKiBISUQgdmVyc2lvbiAqLworCXVuc2lnbmVkIGNvdW50cnk7CQkJCQkJLyogSElEIGNvdW50cnkgKi8KKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtIHJlcG9ydF9lbnVtW0hJRF9SRVBPUlRfVFlQRVNdOworCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsJCQkJCQkvKiBVU0IgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CQkJCQkvKiBVU0IgaW50ZXJmYWNlICovCisJaW50IGlmbnVtOwkJCQkJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLworCisJdW5zaWduZWQgbG9uZyBpb2ZsOwkJCQkJCS8qIEkvTyBmbGFncyAoQ1RSTF9SVU5OSU5HLCBPVVRfUlVOTklORykgKi8KKworCXN0cnVjdCB1cmIgKnVyYmluOwkJCQkJCS8qIElucHV0IFVSQiAqLworCWNoYXIgKmluYnVmOwkJCQkJCQkvKiBJbnB1dCBidWZmZXIgKi8KKwlkbWFfYWRkcl90IGluYnVmX2RtYTsJCQkJCQkvKiBJbnB1dCBidWZmZXIgZG1hICovCisKKwlzdHJ1Y3QgdXJiICp1cmJjdHJsOwkJCQkJCS8qIENvbnRyb2wgVVJCICovCisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3I7CQkJCQkvKiBDb250cm9sIHJlcXVlc3Qgc3RydWN0ICovCisJZG1hX2FkZHJfdCBjcl9kbWE7CQkJCQkJLyogQ29udHJvbCByZXF1ZXN0IHN0cnVjdCBkbWEgKi8KKwlzdHJ1Y3QgaGlkX2NvbnRyb2xfZmlmbyBjdHJsW0hJRF9DT05UUk9MX0ZJRk9fU0laRV07CQkvKiBDb250cm9sIGZpZm8gKi8KKwl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsJCQkJLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCisJY2hhciAqY3RybGJ1ZjsJCQkJCQkJLyogQ29udHJvbCBidWZmZXIgKi8KKwlkbWFfYWRkcl90IGN0cmxidWZfZG1hOwkJCQkJCS8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLworCXNwaW5sb2NrX3QgY3RybGxvY2s7CQkJCQkJLyogQ29udHJvbCBmaWZvIHNwaW5sb2NrICovCisKKwlzdHJ1Y3QgdXJiICp1cmJvdXQ7CQkJCQkJLyogT3V0cHV0IFVSQiAqLworCXN0cnVjdCBoaWRfcmVwb3J0ICpvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsJCQkvKiBPdXRwdXQgcGlwZSBmaWZvICovCisJdW5zaWduZWQgY2hhciBvdXRoZWFkLCBvdXR0YWlsOwkJCQkJLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLworCWNoYXIgKm91dGJ1ZjsJCQkJCQkJLyogT3V0cHV0IGJ1ZmZlciAqLworCWRtYV9hZGRyX3Qgb3V0YnVmX2RtYTsJCQkJCQkvKiBPdXRwdXQgYnVmZmVyIGRtYSAqLworCXNwaW5sb2NrX3Qgb3V0bG9jazsJCQkJCQkvKiBPdXRwdXQgZmlmbyBzcGlubG9jayAqLworCisJdW5zaWduZWQgY2xhaW1lZDsJCQkJCQkvKiBDbGFpbWVkIGJ5IGhpZGlucHV0LCBoaWRkZXY/ICovCQorCXVuc2lnbmVkIHF1aXJrczsJCQkJCQkvKiBWYXJpb3VzIHF1aXJrcyB0aGUgZGV2aWNlIGNhbiBwdWxsIG9uIHVzICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlucHV0czsJCQkJCS8qIFRoZSBsaXN0IG9mIGlucHV0cyAqLworCXZvaWQgKmhpZGRldjsJCQkJCQkJLyogVGhlIGhpZGRldiBzdHJ1Y3R1cmUgKi8KKwlpbnQgbWlub3I7CQkJCQkJCS8qIEhpZGRldiBtaW5vciBudW1iZXIgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CQkJCQkJLyogRm9yIHNsZWVwaW5nICovCisKKwlpbnQgb3BlbjsJCQkJCQkJLyogaXMgdGhlIGRldmljZSBvcGVuIGJ5IGFueW9uZT8gKi8KKwljaGFyIG5hbWVbMTI4XTsJCQkJCQkJLyogRGV2aWNlIG5hbWUgKi8KKwljaGFyIHBoeXNbNjRdOwkJCQkJCQkvKiBEZXZpY2UgcGh5c2ljYWwgbG9jYXRpb24gKi8KKwljaGFyIHVuaXFbNjRdOwkJCQkJCQkvKiBEZXZpY2UgdW5pcXVlIGlkZW50aWZpZXIgKHNlcmlhbCAjKSAqLworCisJdm9pZCAqZmZfcHJpdmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIGZvcmNlLWZlZWRiYWNrIGRyaXZlciAqLworCXZvaWQgKCpmZl9leGl0KShzdHJ1Y3QgaGlkX2RldmljZSopOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsZWQgYnkgaGlkX2V4aXRfZmYoaGlkKSAqLworCWludCAoKmZmX2V2ZW50KShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCXVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK307CisKKyNkZWZpbmUgSElEX0dMT0JBTF9TVEFDS19TSVpFIDQKKyNkZWZpbmUgSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRSA0CisKK3N0cnVjdCBoaWRfcGFyc2VyIHsKKwlzdHJ1Y3QgaGlkX2dsb2JhbCAgICAgZ2xvYmFsOworCXN0cnVjdCBoaWRfZ2xvYmFsICAgICBnbG9iYWxfc3RhY2tbSElEX0dMT0JBTF9TVEFDS19TSVpFXTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgZ2xvYmFsX3N0YWNrX3B0cjsKKwlzdHJ1Y3QgaGlkX2xvY2FsICAgICAgbG9jYWw7CisJdW5zaWduZWQgICAgICAgICAgICAgIGNvbGxlY3Rpb25fc3RhY2tbSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRV07CisJdW5zaWduZWQgICAgICAgICAgICAgIGNvbGxlY3Rpb25fc3RhY2tfcHRyOworCXN0cnVjdCBoaWRfZGV2aWNlICAgICpkZXZpY2U7Cit9OworCitzdHJ1Y3QgaGlkX2NsYXNzX2Rlc2NyaXB0b3IgeworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3UxNiB3RGVzY3JpcHRvckxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaGlkX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTE2IGJjZEhJRDsKKwlfX3U4ICBiQ291bnRyeUNvZGU7CisJX191OCAgYk51bURlc2NyaXB0b3JzOworCisJc3RydWN0IGhpZF9jbGFzc19kZXNjcmlwdG9yIGRlc2NbMV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSAiaGlkLWRlYnVnLmgiCisjZWxzZQorI2RlZmluZSBoaWRfZHVtcF9pbnB1dChhLGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2R1bXBfZGV2aWNlKGMpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2R1bXBfZmllbGQoYSxiKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlc29sdl91c2FnZShhKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZXNvbHZfZXZlbnQoYSxiKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0hJRElOUFVUCisvKiBBcHBsaWNhdGlvbnMgZnJvbSBISUQgVXNhZ2UgVGFibGVzIDQvOC85OSBWZXJzaW9uIDEuMSAqLworLyogV2UgaWdub3JlIGEgZmV3IGlucHV0IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3Qgd2lkZWx5IHVzZWQgKi8KKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkpCitleHRlcm4gdm9pZCBoaWRpbnB1dF9oaWRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqLCBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCk7CitleHRlcm4gaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBoaWRpbnB1dF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICopOworI2Vsc2UKKyNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBoaWRpbnB1dF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgfQorI2VuZGlmCisKK2ludCBoaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK3ZvaWQgaGlkX2Nsb3NlKHN0cnVjdCBoaWRfZGV2aWNlICopOworaW50IGhpZF9zZXRfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqLCB1bnNpZ25lZCwgX19zMzIpOwordm9pZCBoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqLCB1bnNpZ25lZCBjaGFyIGRpcik7Cit2b2lkIGhpZF9pbml0X3JlcG9ydHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CitzdHJ1Y3QgaGlkX2ZpZWxkICpoaWRfZmluZF9maWVsZF9ieV91c2FnZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3UzMiB3YW50ZWRfdXNhZ2UsIGludCB0eXBlKTsKK2ludCBoaWRfd2FpdF9pbyhzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKKworCisjaWZkZWYgQ09ORklHX0hJRF9GRgoraW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRfZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmIChoaWQtPmZmX2V4aXQpCisJCWhpZC0+ZmZfZXhpdChoaWQpOworfQorc3RhdGljIGlubGluZSBpbnQgaGlkX2ZmX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCit7CisJaWYgKGhpZC0+ZmZfZXZlbnQpCisJCXJldHVybiBoaWQtPmZmX2V2ZW50KGhpZCwgaW5wdXQsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiN2M5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCkBAIC0wLDAgKzEsODQ0IEBACisvKgorICogIENvcHlyaWdodCAoYykgMjAwMSBQYXVsIFN0ZXdhcnQKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgSElEIGNoYXIgZGV2aWNlcywgZ2l2aW5nIGFjY2VzcyB0byByYXcgSElEIGRldmljZSBldmVudHMuCisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gUGF1bCBTdGV3YXJ0IDxzdGV3YXJ0QHdldGxvZ2ljLm5ldD4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgPGxpbnV4L2hpZGRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworI2RlZmluZSBISURERVZfTUlOT1JfQkFTRQkwCisjZGVmaW5lIEhJRERFVl9NSU5PUlMJCTI1NgorI2Vsc2UKKyNkZWZpbmUgSElEREVWX01JTk9SX0JBU0UJOTYKKyNkZWZpbmUgSElEREVWX01JTk9SUwkJMTYKKyNlbmRpZgorI2RlZmluZSBISURERVZfQlVGRkVSX1NJWkUJNjQKKworc3RydWN0IGhpZGRldiB7CisJaW50IGV4aXN0OworCWludCBvcGVuOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3Q7Cit9OworCitzdHJ1Y3QgaGlkZGV2X2xpc3QgeworCXN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIGJ1ZmZlcltISURERVZfQlVGRkVSX1NJWkVdOworCWludCBoZWFkOworCWludCB0YWlsOworCXVuc2lnbmVkIGZsYWdzOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2OworCXN0cnVjdCBoaWRkZXZfbGlzdCAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkZGV2ICpoaWRkZXZfdGFibGVbSElEREVWX01JTk9SU107CisKKy8qCisgKiBGaW5kIGEgcmVwb3J0LCBnaXZlbiB0aGUgcmVwb3J0J3MgdHlwZSBhbmQgSUQuICBUaGUgSUQgY2FuIGJlIHNwZWNpZmllZAorICogaW5kaXJlY3RseSBieSBSRVBPUlRfSURfRklSU1QgKHdoaWNoIHJldHVybnMgdGhlIGZpcnN0IHJlcG9ydCBvZiB0aGUgZ2l2ZW4KKyAqIHR5cGUpIG9yIGJ5IChSRVBPUlRfSURfTkVYVCB8IG9sZF9pZCksIHdoaWNoIHJldHVybnMgdGhlIG5leHQgcmVwb3J0IG9mIHRoZQorICogZ2l2ZW4gdHlwZSB3aGljaCBmb2xsb3dzIG9sZF9pZC4KKyAqLworc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0ICoKK2hpZGRldl9sb29rdXBfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8gKnJpbmZvKQoreworCXVuc2lnbmVkIGZsYWdzID0gcmluZm8tPnJlcG9ydF9pZCAmIH5ISURfUkVQT1JUX0lEX01BU0s7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW07CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWlmIChyaW5mby0+cmVwb3J0X3R5cGUgPCBISURfUkVQT1JUX1RZUEVfTUlOIHx8CisJICAgIHJpbmZvLT5yZXBvcnRfdHlwZSA+IEhJRF9SRVBPUlRfVFlQRV9NQVgpIHJldHVybiBOVUxMOworCisJcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsKKwkJKHJpbmZvLT5yZXBvcnRfdHlwZSAtIEhJRF9SRVBPUlRfVFlQRV9NSU4pOworCisJc3dpdGNoIChmbGFncykgeworCWNhc2UgMDogLyogTm90aGluZyB0byBkbyAtLSByZXBvcnRfaWQgaXMgYWxyZWFkeSBzZXQgY29ycmVjdGx5ICovCisJCWJyZWFrOworCisJY2FzZSBISURfUkVQT1JUX0lEX0ZJUlNUOgorCQlsaXN0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0Lm5leHQ7CisJCWlmIChsaXN0ID09ICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QpCisJCQlyZXR1cm4gTlVMTDsKKwkJcmluZm8tPnJlcG9ydF9pZCA9ICgoc3RydWN0IGhpZF9yZXBvcnQgKikgbGlzdCktPmlkOworCQlicmVhazsKKwkJCisJY2FzZSBISURfUkVQT1JUX0lEX05FWFQ6CisJCWxpc3QgPSAoc3RydWN0IGxpc3RfaGVhZCAqKQorCQkJcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW3JpbmZvLT5yZXBvcnRfaWQgJiBISURfUkVQT1JUX0lEX01BU0tdOworCQlpZiAobGlzdCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAobGlzdCA9PSAmcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0KQorCQkJcmV0dXJuIE5VTEw7CisJCXJpbmZvLT5yZXBvcnRfaWQgPSAoKHN0cnVjdCBoaWRfcmVwb3J0ICopIGxpc3QpLT5pZDsKKwkJYnJlYWs7CisJCQorCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbcmluZm8tPnJlcG9ydF9pZF07Cit9CisKKy8qCisgKiBQZXJmb3JtIGFuIGV4aGF1c3RpdmUgc2VhcmNoIG9mIHRoZSByZXBvcnQgdGFibGUgZm9yIGEgdXNhZ2UsIGdpdmVuIGl0cworICogdHlwZSBhbmQgdXNhZ2UgaWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZpZWxkICoKK2hpZGRldl9sb29rdXBfdXNhZ2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKnVyZWYpCit7CisJaW50IGksIGo7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKworCWlmICh1cmVmLT5yZXBvcnRfdHlwZSA8IEhJRF9SRVBPUlRfVFlQRV9NSU4gfHwKKwkgICAgdXJlZi0+cmVwb3J0X3R5cGUgPiBISURfUkVQT1JUX1RZUEVfTUFYKSByZXR1cm4gTlVMTDsKKworCXJlcG9ydF9lbnVtID0gaGlkLT5yZXBvcnRfZW51bSArCisJCSh1cmVmLT5yZXBvcnRfdHlwZSAtIEhJRF9SRVBPUlRfVFlQRV9NSU4pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QsIGxpc3QpCisJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspIHsKKwkJCWZpZWxkID0gcmVwb3J0LT5maWVsZFtpXTsKKwkJCWZvciAoaiA9IDA7IGogPCBmaWVsZC0+bWF4dXNhZ2U7IGorKykgeworCQkJCWlmIChmaWVsZC0+dXNhZ2Vbal0uaGlkID09IHVyZWYtPnVzYWdlX2NvZGUpIHsKKwkJCQkJdXJlZi0+cmVwb3J0X2lkID0gcmVwb3J0LT5pZDsKKwkJCQkJdXJlZi0+ZmllbGRfaW5kZXggPSBpOworCQkJCQl1cmVmLT51c2FnZV9pbmRleCA9IGo7CisJCQkJCXJldHVybiBmaWVsZDsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoaWRkZXZfc2VuZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLAorCQkJICAgICAgc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKnVyZWYpCit7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gaGlkLT5oaWRkZXY7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gaGlkZGV2LT5saXN0OworCisJd2hpbGUgKGxpc3QpIHsKKwkJaWYgKHVyZWYtPmZpZWxkX2luZGV4ICE9IEhJRF9GSUVMRF9JTkRFWF9OT05FIHx8CisJCSAgICAobGlzdC0+ZmxhZ3MgJiBISURERVZfRkxBR19SRVBPUlQpICE9IDApIHsKKwkJCWxpc3QtPmJ1ZmZlcltsaXN0LT5oZWFkXSA9ICp1cmVmOworCQkJbGlzdC0+aGVhZCA9IChsaXN0LT5oZWFkICsgMSkgJiAKKwkJCQkoSElEREVWX0JVRkZFUl9TSVpFIC0gMSk7CisJCQlraWxsX2Zhc3luYygmbGlzdC0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CisJCX0KKworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmhpZGRldi0+d2FpdCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHdoZXJlIGhpZC5jIGNhbGxzIGludG8gaGlkZGV2IHRvIHBhc3MgYW4gZXZlbnQgdGhhdCBvY2N1cnJlZCBvdmVyCisgKiB0aGUgaW50ZXJydXB0IHBpcGUKKyAqLwordm9pZCBoaWRkZXZfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIHR5cGUgPSBmaWVsZC0+cmVwb3J0X3R5cGU7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgdXJlZjsKKworCXVyZWYucmVwb3J0X3R5cGUgPSAKKwkgICh0eXBlID09IEhJRF9JTlBVVF9SRVBPUlQpID8gSElEX1JFUE9SVF9UWVBFX0lOUFVUIDoKKwkgICgodHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfT1VUUFVUIDogCisJICAgKCh0eXBlID09IEhJRF9GRUFUVVJFX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfRkVBVFVSRTowKSk7CisJdXJlZi5yZXBvcnRfaWQgPSBmaWVsZC0+cmVwb3J0LT5pZDsKKwl1cmVmLmZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCXVyZWYudXNhZ2VfaW5kZXggPSAodXNhZ2UgLSBmaWVsZC0+dXNhZ2UpOworCXVyZWYudXNhZ2VfY29kZSA9IHVzYWdlLT5oaWQ7CisJdXJlZi52YWx1ZSA9IHZhbHVlOworCisJaGlkZGV2X3NlbmRfZXZlbnQoaGlkLCAmdXJlZik7Cit9CisKKwordm9pZCBoaWRkZXZfcmVwb3J0X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpCit7CisJdW5zaWduZWQgdHlwZSA9IHJlcG9ydC0+dHlwZTsKKwlzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiB1cmVmOworCisJbWVtc2V0KCZ1cmVmLCAwLCBzaXplb2YodXJlZikpOworCXVyZWYucmVwb3J0X3R5cGUgPSAKKwkgICh0eXBlID09IEhJRF9JTlBVVF9SRVBPUlQpID8gSElEX1JFUE9SVF9UWVBFX0lOUFVUIDoKKwkgICgodHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfT1VUUFVUIDogCisJICAgKCh0eXBlID09IEhJRF9GRUFUVVJFX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfRkVBVFVSRTowKSk7CisJdXJlZi5yZXBvcnRfaWQgPSByZXBvcnQtPmlkOworCXVyZWYuZmllbGRfaW5kZXggPSBISURfRklFTERfSU5ERVhfTk9ORTsKKworCWhpZGRldl9zZW5kX2V2ZW50KGhpZCwgJnVyZWYpOworfQorLyoKKyAqIGZhc3luYyBmaWxlIG9wCisgKi8KK3N0YXRpYyBpbnQgaGlkZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOworCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKK30KKworCisvKgorICogcmVsZWFzZSBmaWxlIG9wCisgKi8KK3N0YXRpYyBpbnQgaGlkZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKK3sKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhpZGRldl9saXN0ICoqbGlzdHB0cjsKKworCWxpc3RwdHIgPSAmbGlzdC0+aGlkZGV2LT5saXN0OworCWhpZGRldl9mYXN5bmMoLTEsIGZpbGUsIDApOworCisJd2hpbGUgKCpsaXN0cHRyICYmICgqbGlzdHB0ciAhPSBsaXN0KSkKKwkJbGlzdHB0ciA9ICYoKCpsaXN0cHRyKS0+bmV4dCk7CisJKmxpc3RwdHIgPSAoKmxpc3RwdHIpLT5uZXh0OworCisJaWYgKCEtLWxpc3QtPmhpZGRldi0+b3BlbikgeworCQlpZiAobGlzdC0+aGlkZGV2LT5leGlzdCkgCisJCQloaWRfY2xvc2UobGlzdC0+aGlkZGV2LT5oaWQpOworCQllbHNlCisJCQlrZnJlZShsaXN0LT5oaWRkZXYpOworCX0KKworCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBvcGVuIGZpbGUgb3AKKyAqLworc3RhdGljIGludCBoaWRkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKSB7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0OworCisJaW50IGkgPSBpbWlub3IoaW5vZGUpIC0gSElEREVWX01JTk9SX0JBU0U7CisKKwlpZiAoaSA+PSBISURERVZfTUlOT1JTIHx8ICFoaWRkZXZfdGFibGVbaV0pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCEobGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRkZXZfbGlzdCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgaGlkZGV2X2xpc3QpKTsKKworCWxpc3QtPmhpZGRldiA9IGhpZGRldl90YWJsZVtpXTsKKwlsaXN0LT5uZXh0ID0gaGlkZGV2X3RhYmxlW2ldLT5saXN0OworCWhpZGRldl90YWJsZVtpXS0+bGlzdCA9IGxpc3Q7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBsaXN0OworCisJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKKwkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpCisJCQloaWRfb3BlbihoaWRkZXZfdGFibGVbaV0tPmhpZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJ3cml0ZSIgZmlsZSBvcAorICovCitzdGF0aWMgc3NpemVfdCBoaWRkZXZfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiAicmVhZCIgZmlsZSBvcAorICovCitzdGF0aWMgc3NpemVfdCBoaWRkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGV2ZW50X3NpemU7CisJaW50IHJldHZhbCA9IDA7CisKKwlldmVudF9zaXplID0gKChsaXN0LT5mbGFncyAmIEhJRERFVl9GTEFHX1VSRUYpICE9IDApID8KKwkJc2l6ZW9mKHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmKSA6IHNpemVvZihzdHJ1Y3QgaGlkZGV2X2V2ZW50KTsKKworCWlmIChjb3VudCA8IGV2ZW50X3NpemUpCisJCXJldHVybiAwOworCisJd2hpbGUgKHJldHZhbCA9PSAwKSB7CisJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKKwkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRkZXYtPndhaXQsICZ3YWl0KTsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkKKwkJCXdoaWxlIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKKwkJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoIWxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKKwkJCQkJcmV0dmFsID0gLUVJTzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCQorCQkJCXNjaGVkdWxlKCk7CisJCQl9CisKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmbGlzdC0+aGlkZGV2LT53YWl0LCAmd2FpdCk7CisJCX0KKworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCisJCXdoaWxlIChsaXN0LT5oZWFkICE9IGxpc3QtPnRhaWwgJiYgCisJCSAgICAgICByZXR2YWwgKyBldmVudF9zaXplIDw9IGNvdW50KSB7CisJCQlpZiAoKGxpc3QtPmZsYWdzICYgSElEREVWX0ZMQUdfVVJFRikgPT0gMCkgeworCQkJCWlmIChsaXN0LT5idWZmZXJbbGlzdC0+dGFpbF0uZmllbGRfaW5kZXggIT0KKwkJCQkgICAgSElEX0ZJRUxEX0lOREVYX05PTkUpIHsKKwkJCQkJc3RydWN0IGhpZGRldl9ldmVudCBldmVudDsKKwkJCQkJZXZlbnQuaGlkID0gbGlzdC0+YnVmZmVyW2xpc3QtPnRhaWxdLnVzYWdlX2NvZGU7CisJCQkJCWV2ZW50LnZhbHVlID0gbGlzdC0+YnVmZmVyW2xpc3QtPnRhaWxdLnZhbHVlOworCQkJCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciArIHJldHZhbCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IGhpZGRldl9ldmVudCkpKQorCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCXJldHZhbCArPSBzaXplb2Yoc3RydWN0IGhpZGRldl9ldmVudCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAobGlzdC0+YnVmZmVyW2xpc3QtPnRhaWxdLmZpZWxkX2luZGV4ICE9IEhJRF9GSUVMRF9JTkRFWF9OT05FIHx8CisJCQkJICAgIChsaXN0LT5mbGFncyAmIEhJRERFVl9GTEFHX1JFUE9SVCkgIT0gMCkgeworCQkJCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciArIHJldHZhbCwgbGlzdC0+YnVmZmVyICsgbGlzdC0+dGFpbCwgc2l6ZW9mKHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmKSkpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJcmV0dmFsICs9IHNpemVvZihzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZik7CisJCQkJfQorCQkJfQorCQkJbGlzdC0+dGFpbCA9IChsaXN0LT50YWlsICsgMSkgJiAoSElEREVWX0JVRkZFUl9TSVpFIC0gMSk7CisJCX0KKworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiAicG9sbCIgZmlsZSBvcAorICogTm8ga2VybmVsIGxvY2sgLSBmaW5lCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGlkZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxlLCAmbGlzdC0+aGlkZGV2LT53YWl0LCB3YWl0KTsKKwlpZiAobGlzdC0+aGVhZCAhPSBsaXN0LT50YWlsKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAoIWxpc3QtPmhpZGRldi0+ZXhpc3QpCisJCXJldHVybiBQT0xMRVJSIHwgUE9MTEhVUDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJpb2N0bCIgZmlsZSBvcAorICovCitzdGF0aWMgaW50IGhpZGRldl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoaWRkZXYgKmhpZGRldiA9IGxpc3QtPmhpZGRldjsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaGlkZGV2LT5oaWQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGhpZC0+ZGV2OworCXN0cnVjdCBoaWRkZXZfY29sbGVjdGlvbl9pbmZvIGNpbmZvOworCXN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8gcmluZm87CisJc3RydWN0IGhpZGRldl9maWVsZF9pbmZvIGZpbmZvOworCXN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmX211bHRpICp1cmVmX211bHRpPU5VTEw7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKnVyZWY7CisJc3RydWN0IGhpZGRldl9kZXZpbmZvIGRpbmZvOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBpOworCisJaWYgKCFoaWRkZXYtPmV4aXN0KQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIEhJRElPQ0dWRVJTSU9OOgorCQlyZXR1cm4gcHV0X3VzZXIoSElEX1ZFUlNJT04sIChpbnQgX191c2VyICopYXJnKTsKKworCWNhc2UgSElESU9DQVBQTElDQVRJT046CisJCWlmIChhcmcgPCAwIHx8IGFyZyA+PSBoaWQtPm1heGFwcGxpY2F0aW9uKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQkJaWYgKGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09IAorCQkJICAgIEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OICYmIGFyZy0tID09IDApCisJCQkJYnJlYWs7CisJCQorCQlpZiAoaSA9PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlOworCisJY2FzZSBISURJT0NHREVWSU5GTzoKKwkJZGluZm8uYnVzdHlwZSA9IEJVU19VU0I7CisJCWRpbmZvLmJ1c251bSA9IGRldi0+YnVzLT5idXNudW07CisJCWRpbmZvLmRldm51bSA9IGRldi0+ZGV2bnVtOworCQlkaW5mby5pZm51bSA9IGhpZC0+aWZudW07CisJCWRpbmZvLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJCWRpbmZvLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwkJZGluZm8udmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQlkaW5mby5udW1fYXBwbGljYXRpb25zID0gaGlkLT5tYXhhcHBsaWNhdGlvbjsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmRpbmZvLCBzaXplb2YoZGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHRkxBRzoKKwkJaWYgKHB1dF91c2VyKGxpc3QtPmZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DU0ZMQUc6CisJCXsKKwkJCWludCBuZXdmbGFnczsKKwkJCWlmIChnZXRfdXNlcihuZXdmbGFncywgKGludCBfX3VzZXIgKilhcmcpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoKG5ld2ZsYWdzICYgfkhJRERFVl9GTEFHUykgIT0gMCB8fAorCQkJICAgICgobmV3ZmxhZ3MgJiBISURERVZfRkxBR19SRVBPUlQpICE9IDAgJiYKKwkJCSAgICAgKG5ld2ZsYWdzICYgSElEREVWX0ZMQUdfVVJFRikgPT0gMCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWxpc3QtPmZsYWdzID0gbmV3ZmxhZ3M7CisKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIEhJRElPQ0dTVFJJTkc6CisJCXsKKwkJCWludCBpZHgsIGxlbjsKKwkJCWNoYXIgKmJ1ZjsKKworCQkJaWYgKGdldF91c2VyKGlkeCwgKGludCBfX3VzZXIgKilhcmcpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoKGJ1ZiA9IGttYWxsb2MoSElEX1NUUklOR19TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJaWYgKChsZW4gPSB1c2Jfc3RyaW5nKGRldiwgaWR4LCBidWYsIEhJRF9TVFJJTkdfU0laRS0xKSkgPCAwKSB7CisJCQkJa2ZyZWUoYnVmKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZytzaXplb2YoaW50KSwgYnVmLCBsZW4rMSkpIHsKKwkJCQlrZnJlZShidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCisJCQlrZnJlZShidWYpOworCisJCQlyZXR1cm4gbGVuOworCQl9CisKKwljYXNlIEhJRElPQ0lOSVRSRVBPUlQ6CisJCWhpZF9pbml0X3JlcG9ydHMoaGlkKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1JFUE9SVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHJpbmZvLnJlcG9ydF90eXBlID09IEhJRF9SRVBPUlRfVFlQRV9PVVRQVVQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKHJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX0lOKTsKKwkJaGlkX3dhaXRfaW8oaGlkKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DU1JFUE9SVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHJpbmZvLnJlcG9ydF90eXBlID09IEhJRF9SRVBPUlRfVFlQRV9JTlBVVCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1JFUE9SVElORk86CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmluZm8sIHVzZXJfYXJnLCBzaXplb2YocmluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmluZm8ubnVtX2ZpZWxkcyA9IHJlcG9ydC0+bWF4ZmllbGQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnJpbmZvLCBzaXplb2YocmluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHRklFTERJTkZPOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmZpbmZvLCB1c2VyX2FyZywgc2l6ZW9mKGZpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmluZm8ucmVwb3J0X3R5cGUgPSBmaW5mby5yZXBvcnRfdHlwZTsKKwkJcmluZm8ucmVwb3J0X2lkID0gZmluZm8ucmVwb3J0X2lkOworCQlpZiAoKHJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChmaW5mby5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZmllbGQgPSByZXBvcnQtPmZpZWxkW2ZpbmZvLmZpZWxkX2luZGV4XTsKKwkJbWVtc2V0KCZmaW5mbywgMCwgc2l6ZW9mKGZpbmZvKSk7CisJCWZpbmZvLnJlcG9ydF90eXBlID0gcmluZm8ucmVwb3J0X3R5cGU7CisJCWZpbmZvLnJlcG9ydF9pZCA9IHJpbmZvLnJlcG9ydF9pZDsKKwkJZmluZm8uZmllbGRfaW5kZXggPSBmaWVsZC0+cmVwb3J0X2NvdW50IC0gMTsKKwkJZmluZm8ubWF4dXNhZ2UgPSBmaWVsZC0+bWF4dXNhZ2U7CisJCWZpbmZvLmZsYWdzID0gZmllbGQtPmZsYWdzOworCQlmaW5mby5waHlzaWNhbCA9IGZpZWxkLT5waHlzaWNhbDsKKwkJZmluZm8ubG9naWNhbCA9IGZpZWxkLT5sb2dpY2FsOworCQlmaW5mby5hcHBsaWNhdGlvbiA9IGZpZWxkLT5hcHBsaWNhdGlvbjsKKwkJZmluZm8ubG9naWNhbF9taW5pbXVtID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKKwkJZmluZm8ubG9naWNhbF9tYXhpbXVtID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwkJZmluZm8ucGh5c2ljYWxfbWluaW11bSA9IGZpZWxkLT5waHlzaWNhbF9taW5pbXVtOworCQlmaW5mby5waHlzaWNhbF9tYXhpbXVtID0gZmllbGQtPnBoeXNpY2FsX21heGltdW07CisJCWZpbmZvLnVuaXRfZXhwb25lbnQgPSBmaWVsZC0+dW5pdF9leHBvbmVudDsKKwkJZmluZm8udW5pdCA9IGZpZWxkLT51bml0OworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZmaW5mbywgc2l6ZW9mKGZpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1VDT0RFOgorCQl1cmVmX211bHRpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmVmX211bHRpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVyZWYgPSAmdXJlZl9tdWx0aS0+dXJlZjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHVyZWYsIHVzZXJfYXJnLCBzaXplb2YoKnVyZWYpKSkgCisJCQlnb3RvIGZhdWx0OworCisJCXJpbmZvLnJlcG9ydF90eXBlID0gdXJlZi0+cmVwb3J0X3R5cGU7CisJCXJpbmZvLnJlcG9ydF9pZCA9IHVyZWYtPnJlcG9ydF9pZDsKKwkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCisJCQlnb3RvIGludmFsOworCisJCWlmICh1cmVmLT5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQorCQkJZ290byBpbnZhbDsKKworCQlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbdXJlZi0+ZmllbGRfaW5kZXhdOworCQlpZiAodXJlZi0+dXNhZ2VfaW5kZXggPj0gZmllbGQtPm1heHVzYWdlKQorCQkJZ290byBpbnZhbDsKKworCQl1cmVmLT51c2FnZV9jb2RlID0gZmllbGQtPnVzYWdlW3VyZWYtPnVzYWdlX2luZGV4XS5oaWQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgdXJlZiwgc2l6ZW9mKCp1cmVmKSkpCisJCQlnb3RvIGZhdWx0OworCisJCWtmcmVlKHVyZWZfbXVsdGkpOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElESU9DR1VTQUdFOgorCWNhc2UgSElESU9DU1VTQUdFOgorCWNhc2UgSElESU9DR1VTQUdFUzoKKwljYXNlIEhJRElPQ1NVU0FHRVM6CisJY2FzZSBISURJT0NHQ09MTEVDVElPTklOREVYOgorCQl1cmVmX211bHRpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmVmX211bHRpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVyZWYgPSAmdXJlZl9tdWx0aS0+dXJlZjsKKwkJaWYgKGNtZCA9PSBISURJT0NHVVNBR0VTIHx8IGNtZCA9PSBISURJT0NTVVNBR0VTKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodXJlZl9tdWx0aSwgdXNlcl9hcmcsIAorCQkJCQkgICBzaXplb2YoKnVyZWZfbXVsdGkpKSkKKwkJCQlnb3RvIGZhdWx0OworCQl9IGVsc2UgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKHVyZWYsIHVzZXJfYXJnLCBzaXplb2YoKnVyZWYpKSkKKwkJCQlnb3RvIGZhdWx0OworCQl9CisKKwkJaWYgKGNtZCAhPSBISURJT0NHVVNBR0UgJiYgCisJCSAgICBjbWQgIT0gSElESU9DR1VTQUdFUyAmJgorCQkgICAgdXJlZi0+cmVwb3J0X3R5cGUgPT0gSElEX1JFUE9SVF9UWVBFX0lOUFVUKQorCQkJZ290byBpbnZhbDsKKworCQlpZiAodXJlZi0+cmVwb3J0X2lkID09IEhJRF9SRVBPUlRfSURfVU5LTk9XTikgeworCQkJZmllbGQgPSBoaWRkZXZfbG9va3VwX3VzYWdlKGhpZCwgdXJlZik7CisJCQlpZiAoZmllbGQgPT0gTlVMTCkKKwkJCQlnb3RvIGludmFsOworCQl9IGVsc2UgeworCQkJcmluZm8ucmVwb3J0X3R5cGUgPSB1cmVmLT5yZXBvcnRfdHlwZTsKKwkJCXJpbmZvLnJlcG9ydF9pZCA9IHVyZWYtPnJlcG9ydF9pZDsKKwkJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJCWdvdG8gaW52YWw7CisKKwkJCWlmICh1cmVmLT5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQorCQkJCWdvdG8gaW52YWw7CisKKwkJCWZpZWxkID0gcmVwb3J0LT5maWVsZFt1cmVmLT5maWVsZF9pbmRleF07CisKKwkJCWlmIChjbWQgPT0gSElESU9DR0NPTExFQ1RJT05JTkRFWCkgeworCQkJCWlmICh1cmVmLT51c2FnZV9pbmRleCA+PSBmaWVsZC0+bWF4dXNhZ2UpCisJCQkJCWdvdG8gaW52YWw7CisJCQl9IGVsc2UgaWYgKHVyZWYtPnVzYWdlX2luZGV4ID49IGZpZWxkLT5yZXBvcnRfY291bnQpCisJCQkJZ290byBpbnZhbDsKKworCQkJZWxzZSBpZiAoKGNtZCA9PSBISURJT0NHVVNBR0VTIHx8IGNtZCA9PSBISURJT0NTVVNBR0VTKSAmJgorCQkJCSAodXJlZl9tdWx0aS0+bnVtX3ZhbHVlcyA+IEhJRF9NQVhfTVVMVElfVVNBR0VTIHx8CisJCQkJICB1cmVmLT51c2FnZV9pbmRleCArIHVyZWZfbXVsdGktPm51bV92YWx1ZXMgPj0gZmllbGQtPnJlcG9ydF9jb3VudCkpCisJCQkJZ290byBpbnZhbDsKKwkJCX0KKworCQlzd2l0Y2ggKGNtZCkgeworCQkJY2FzZSBISURJT0NHVVNBR0U6CisJCQkJdXJlZi0+dmFsdWUgPSBmaWVsZC0+dmFsdWVbdXJlZi0+dXNhZ2VfaW5kZXhdOworCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsIHVyZWYsIHNpemVvZigqdXJlZikpKQorCQkJCQlnb3RvIGZhdWx0OworCQkJCWdvdG8gZ29vZHJldHVybjsKKworCQkJY2FzZSBISURJT0NTVVNBR0U6CisJCQkJZmllbGQtPnZhbHVlW3VyZWYtPnVzYWdlX2luZGV4XSA9IHVyZWYtPnZhbHVlOworCQkJCWdvdG8gZ29vZHJldHVybjsKKworCQkJY2FzZSBISURJT0NHQ09MTEVDVElPTklOREVYOgorCQkJCWtmcmVlKHVyZWZfbXVsdGkpOworCQkJCXJldHVybiBmaWVsZC0+dXNhZ2VbdXJlZi0+dXNhZ2VfaW5kZXhdLmNvbGxlY3Rpb25faW5kZXg7CisJCQljYXNlIEhJRElPQ0dVU0FHRVM6CisJCQkJZm9yIChpID0gMDsgaSA8IHVyZWZfbXVsdGktPm51bV92YWx1ZXM7IGkrKykKKwkJCQkJdXJlZl9tdWx0aS0+dmFsdWVzW2ldID0gCisJCQkJCSAgICBmaWVsZC0+dmFsdWVbdXJlZi0+dXNhZ2VfaW5kZXggKyBpXTsKKwkJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCB1cmVmX211bHRpLCAKKwkJCQkJCSBzaXplb2YoKnVyZWZfbXVsdGkpKSkKKwkJCQkJZ290byBmYXVsdDsKKwkJCQlnb3RvIGdvb2RyZXR1cm47CisJCQljYXNlIEhJRElPQ1NVU0FHRVM6CisJCQkJZm9yIChpID0gMDsgaSA8IHVyZWZfbXVsdGktPm51bV92YWx1ZXM7IGkrKykKKwkJCQkJZmllbGQtPnZhbHVlW3VyZWYtPnVzYWdlX2luZGV4ICsgaV0gPSAKKwkJCQkgIAkgICAgdXJlZl9tdWx0aS0+dmFsdWVzW2ldOworCQkJCWdvdG8gZ29vZHJldHVybjsKKwkJfQorCitnb29kcmV0dXJuOgorCQlrZnJlZSh1cmVmX211bHRpKTsKKwkJcmV0dXJuIDA7CitmYXVsdDoKKwkJa2ZyZWUodXJlZl9tdWx0aSk7CisJCXJldHVybiAtRUZBVUxUOworaW52YWw6CQkKKwkJa2ZyZWUodXJlZl9tdWx0aSk7CisJCXJldHVybiAtRUlOVkFMOworCisJY2FzZSBISURJT0NHQ09MTEVDVElPTklORk86CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2luZm8sIHVzZXJfYXJnLCBzaXplb2YoY2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChjaW5mby5pbmRleCA+PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljaW5mby50eXBlID0gaGlkLT5jb2xsZWN0aW9uW2NpbmZvLmluZGV4XS50eXBlOworCQljaW5mby51c2FnZSA9IGhpZC0+Y29sbGVjdGlvbltjaW5mby5pbmRleF0udXNhZ2U7CisJCWNpbmZvLmxldmVsID0gaGlkLT5jb2xsZWN0aW9uW2NpbmZvLmluZGV4XS5sZXZlbDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKworCQlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gJ0gnIHx8IF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKEhJRElPQ0dOQU1FKDApKSkgeworCQkJaW50IGxlbjsKKwkJCWlmICghaGlkLT5uYW1lKQorCQkJCXJldHVybiAwOworCQkJbGVuID0gc3RybGVuKGhpZC0+bmFtZSkgKyAxOworCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQorCQkJCSBsZW4gPSBfSU9DX1NJWkUoY21kKTsKKwkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+bmFtZSwgbGVuKSA/CisJCQkJLUVGQVVMVCA6IGxlbjsKKwkJfQorCisJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHUEhZUygwKSkpIHsKKwkJCWludCBsZW47CisJCQlpZiAoIWhpZC0+cGh5cykKKwkJCQlyZXR1cm4gMDsKKwkJCWxlbiA9IHN0cmxlbihoaWQtPnBoeXMpICsgMTsKKwkJCWlmIChsZW4gPiBfSU9DX1NJWkUoY21kKSkKKwkJCQlsZW4gPSBfSU9DX1NJWkUoY21kKTsKKwkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+cGh5cywgbGVuKSA/CisJCQkJLUVGQVVMVCA6IGxlbjsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGlkZGV2X2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJaGlkZGV2X3JlYWQsCisJLndyaXRlID0JaGlkZGV2X3dyaXRlLAorCS5wb2xsID0JCWhpZGRldl9wb2xsLAorCS5vcGVuID0JCWhpZGRldl9vcGVuLAorCS5yZWxlYXNlID0JaGlkZGV2X3JlbGVhc2UsCisJLmlvY3RsID0JaGlkZGV2X2lvY3RsLAorCS5mYXN5bmMgPQloaWRkZXZfZmFzeW5jLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGhpZGRldl9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL2hpZC9oaWRkZXYlZCIsCisJLmZvcHMgPQkJJmhpZGRldl9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICAgICAJLm1pbm9yX2Jhc2UgPQlISURERVZfTUlOT1JfQkFTRSwKK307CisKKy8qCisgKiBUaGlzIGlzIHdoZXJlIGhpZC5jIGNhbGxzIHVzIHRvIGNvbm5lY3QgYSBoaWQgZGV2aWNlIHRvIHRoZSBoaWRkZXYgZHJpdmVyCisgKi8KK2ludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRkZXYgKmhpZGRldjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsOworCisJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gCisJCSAgICBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiAmJgorCQkgICAgIUlTX0lOUFVUX0FQUExJQ0FUSU9OKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSkpCisJCQlicmVhazsKKworCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbiAmJiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSElEREVWKSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKyAJaWYgKCEoaGlkZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldiksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC0xOworCW1lbXNldChoaWRkZXYsIDAsIHNpemVvZihzdHJ1Y3QgaGlkZGV2KSk7CisKKyAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihoaWQtPmludGYsICZoaWRkZXZfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCWtmcmVlKGhpZGRldik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoaWRkZXYtPndhaXQpOworCisgCWhpZGRldl90YWJsZVtoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OworCisJaGlkZGV2LT5oaWQgPSBoaWQ7CisJaGlkZGV2LT5leGlzdCA9IDE7CisKKyAJaGlkLT5taW5vciA9IGhpZC0+aW50Zi0+bWlub3I7CisJaGlkLT5oaWRkZXYgPSBoaWRkZXY7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgd2hlcmUgaGlkLmMgY2FsbHMgdXMgdG8gZGlzY29ubmVjdCBhIGhpZGRldiBkZXZpY2UgZnJvbSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgaGlkIGRldmljZSAodXN1YWxseSBiZWNhdXNlIHRoZSB1c2IgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBoaWRkZXZfY2xhc3M7Cit2b2lkIGhpZGRldl9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gaGlkLT5oaWRkZXY7CisKKwloaWRkZXYtPmV4aXN0ID0gMDsKKworCWhpZGRldl90YWJsZVtoaWRkZXYtPmhpZC0+bWlub3IgLSBISURERVZfTUlOT1JfQkFTRV0gPSBOVUxMOworCXVzYl9kZXJlZ2lzdGVyX2RldihoaWRkZXYtPmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CisKKwlpZiAoaGlkZGV2LT5vcGVuKSB7CisJCWhpZF9jbG9zZShoaWRkZXYtPmhpZCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkZGV2LT53YWl0KTsKKwl9IGVsc2UgeworCQlrZnJlZShoaWRkZXYpOworCX0KK30KKworLyogQ3VycmVudGx5IHRoaXMgZHJpdmVyIGlzIGEgVVNCIGRyaXZlci4gIEl0J3Mgbm90IGEgY29udmVudGlvbmFsIG9uZSBpbgorICogdGhlIHNlbnNlIHRoYXQgaXQgZG9lc24ndCBwcm9iZSBhdCB0aGUgVVNCIGxldmVsLiAgSW5zdGVhZCBpdCB3YWl0cyB0bworICogYmUgY29ubmVjdGVkIGJ5IEhJRCB0aHJvdWdoIHRoZSBoaWRkZXZfY29ubmVjdCAvIGhpZGRldl9kaXNjb25uZWN0CisgKiByb3V0aW5lcy4gIFRoZSByZWFzb24gdG8gcmVnaXN0ZXIgYXMgYSBVU0IgZGV2aWNlIGlzIHRvIGdhaW4gcGFydCBvZiB0aGUKKyAqIG1pbm9yIG51bWJlciBzcGFjZSBmcm9tIHRoZSBVU0IgbWFqb3IuCisgKgorICogSW4gdGhlb3J5LCBzaG91bGQgdGhlIEhJRCBjb2RlIGJlIGdlbmVyYWxpemVkIHRvIG1vcmUgdGhhbiBvbmUgcGh5c2ljYWwKKyAqIG1lZGl1bSAoc2F5LCBJRUVFIDEzODQpLCB0aGlzIGRyaXZlciB3aWxsIHByb2JhYmx5IG5lZWQgdG8gcmVnaXN0ZXIgaXRzCisgKiBvd24gbWFqb3IgbnVtYmVyLCBhbmQgaW4gZG9pbmcgc28sIG5vIGxvbmdlciBuZWVkIHRvIHJlZ2lzdGVyIHdpdGggVVNCLgorICogQXQgdGhhdCBwb2ludCB0aGUgcHJvYmUgcm91dGluZSBhbmQgaGlkZGV2X2RyaXZlciBzdHJ1Y3QgYmVsb3cgd2lsbCBubworICogbG9uZ2VyIGJlIHVzZWZ1bC4KKyAqLworCisKKy8qIFdlIG5ldmVyIGF0dGFjaCBpbiB0aGlzIG1hbm5lciwgYW5kIHJlbHkgb24gSElEIHRvIGNvbm5lY3QgdXMuICBUaGlzCisgKiBpcyB3aHkgdGhlcmUgaXMgbm8gZGlzY29ubmVjdCByb3V0aW5lIGRlZmluZWQgaW4gdGhlIHVzYl9kcml2ZXIgZWl0aGVyLgorICovCitzdGF0aWMgaW50IGhpZGRldl91c2JkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmhpZGRldl9pbmZvKQoreworCXJldHVybiAtRU5PREVWOworfQorCisKK3N0YXRpYyAvKiBjb25zdCAqLyBzdHJ1Y3QgdXNiX2RyaXZlciBoaWRkZXZfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJoaWRkZXYiLAorCS5wcm9iZSA9CWhpZGRldl91c2JkX3Byb2JlLAorfTsKKworaW50IF9faW5pdCBoaWRkZXZfaW5pdCh2b2lkKQoreworCWRldmZzX21rX2RpcigidXNiL2hpZCIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmhpZGRldl9kcml2ZXIpOworfQorCit2b2lkIGhpZGRldl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmhpZGRldl9kcml2ZXIpOworCWRldmZzX3JlbW92ZSgidXNiL2hpZCIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQva2J0YWIuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2tidGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4YzViNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2tidGFiLmMKQEAgLTAsMCArMSwyNDEgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqIHYwLjAuMSAtIE9yaWdpbmFsLCBleHRyZW1lbHkgYmFzaWMgdmVyc2lvbiwgMi40Lnh4IG9ubHkKKyAqIHYwLjAuMiAtIFVwZGF0ZWQsIHdvcmtzIHdpdGggMi41LjYyIGFuZCAyLjQuMjA7CisgKiAgICAgICAgICAgLSBhZGRlZCBwcmVzc3VyZS10aHJlc2hvbGQgbW9kdWxlcyBwYXJhbSBjb2RlIGZyb20KKyAqICAgICAgICAgICAgICBBbGV4IFBlcnJ5IDxhbGV4LnBlcnJ5QGllZWUub3JnPgorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjAuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSm9zaCBNeWVyIDxqb3NoQGpvc2hpc2FuZXJkLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgS0IgR2VhciBKYW1TdHVkaW8gVGFibGV0IGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LQkdFQVIJMHgwODRlCisKK3N0YXRpYyBpbnQga2JfcHJlc3N1cmVfY2xpY2sgPSAweDEwOworbW9kdWxlX3BhcmFtKGtiX3ByZXNzdXJlX2NsaWNrLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhrYl9wcmVzc3VyZV9jbGljaywgInByZXNzdXJlIHRocmVzaG9sZCBmb3IgY2xpY2tzIik7CisKK3N0cnVjdCBrYnRhYiB7CisJc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1cmIgKmlycTsKKwlpbnQgb3BlbjsKKwlpbnQgeCwgeTsKKwlpbnQgYnV0dG9uOworCWludCBwcmVzc3VyZTsKKwlfX3UzMiBzZXJpYWxbMl07CisJY2hhciBwaHlzWzMyXTsKK307CisKK3N0YXRpYyB2b2lkIGtidGFiX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IGtidGFiLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZrYnRhYi0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWtidGFiLT54ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopICZkYXRhWzFdKSk7CisJa2J0YWItPnkgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgJmRhdGFbM10pKTsKKworCWtidGFiLT5wcmVzc3VyZSA9IChkYXRhWzVdKTsKKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIDEpOworCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBrYnRhYi0+eCk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBrYnRhYi0+eSk7CisKKwkvKmlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0ggLCBkYXRhWzBdICYgMHgwMSk7Ki8KKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCBkYXRhWzBdICYgMHgwMik7CisKKwlpZiggLTEgPT0ga2JfcHJlc3N1cmVfY2xpY2speyAKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwga2J0YWItPnByZXNzdXJlKTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIChrYnRhYi0+cHJlc3N1cmUgPiBrYl9wcmVzc3VyZV9jbGljaykgPyAxIDogMCk7CisJfTsKKwkKKwlpbnB1dF9zeW5jKGRldik7CisKKyBleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrYnRhYl9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LQkdFQVIsIDB4MTAwMSksIC5kcml2ZXJfaW5mbyA9IDAgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBrYnRhYl9pZHMpOworCitzdGF0aWMgaW50IGtidGFiX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoa2J0YWItPm9wZW4rKykKKwkJcmV0dXJuIDA7CisKKwlrYnRhYi0+aXJxLT5kZXYgPSBrYnRhYi0+dXNiZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihrYnRhYi0+aXJxLCBHRlBfS0VSTkVMKSkgeworCQlrYnRhYi0+b3Blbi0tOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2J0YWJfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoIS0ta2J0YWItPm9wZW4pCisJCXVzYl9raWxsX3VyYihrYnRhYi0+aXJxKTsKK30KKworc3RhdGljIGludCBrYnRhYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGtidGFiICprYnRhYjsKKwljaGFyIHBhdGhbNjRdOworCisJaWYgKCEoa2J0YWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2J0YWIpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChrYnRhYiwgMCwgc2l6ZW9mKHN0cnVjdCBrYnRhYikpOworCisJa2J0YWItPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgOCwgR0ZQX0tFUk5FTCwgJmtidGFiLT5kYXRhX2RtYSk7CisJaWYgKCFrYnRhYi0+ZGF0YSkgeworCQlrZnJlZShrYnRhYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtidGFiLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgha2J0YWItPmlycSkgeworCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCAxMCwga2J0YWItPmRhdGEsIGtidGFiLT5kYXRhX2RtYSk7CisJCWtmcmVlKGtidGFiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2J0YWItPmRldi5ldmJpdFswXSB8PSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpIHwgQklUKEVWX01TQyk7CisJa2J0YWItPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1BSRVNTVVJFKTsKKworCWtidGFiLT5kZXYua2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9SSUdIVCkgfCBCSVQoQlROX01JRERMRSk7CisKKwlrYnRhYi0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1BFTikgfCBCSVQoQlROX1RPVUNIKTsKKworCWtidGFiLT5kZXYubXNjYml0WzBdIHw9IEJJVChNU0NfU0VSSUFMKTsKKworCWtidGFiLT5kZXYuYWJzbWF4W0FCU19YXSA9IDB4MjAwMDsKKwlrYnRhYi0+ZGV2LmFic21heFtBQlNfWV0gPSAweDE3NTA7CisJa2J0YWItPmRldi5hYnNtYXhbQUJTX1BSRVNTVVJFXSA9IDB4ZmY7CisJCisJa2J0YWItPmRldi5hYnNmdXp6W0FCU19YXSA9IDQ7CisJa2J0YWItPmRldi5hYnNmdXp6W0FCU19ZXSA9IDQ7CisKKwlrYnRhYi0+ZGV2LnByaXZhdGUgPSBrYnRhYjsKKwlrYnRhYi0+ZGV2Lm9wZW4gPSBrYnRhYl9vcGVuOworCWtidGFiLT5kZXYuY2xvc2UgPSBrYnRhYl9jbG9zZTsKKworCXVzYl9tYWtlX3BhdGgoZGV2LCBwYXRoLCA2NCk7CisJc3ByaW50ZihrYnRhYi0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJa2J0YWItPmRldi5uYW1lID0gIktCIEdlYXIgVGFibGV0IjsKKwlrYnRhYi0+ZGV2LnBoeXMgPSBrYnRhYi0+cGh5czsKKwlrYnRhYi0+ZGV2LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCWtidGFiLT5kZXYuaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlrYnRhYi0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlrYnRhYi0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwlrYnRhYi0+ZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJa2J0YWItPnVzYmRldiA9IGRldjsKKworCWVuZHBvaW50ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCisJdXNiX2ZpbGxfaW50X3VyYihrYnRhYi0+aXJxLCBkZXYsCisJCQkgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkga2J0YWItPmRhdGEsIDgsCisJCQkga2J0YWJfaXJxLCBrYnRhYiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJa2J0YWItPmlycS0+dHJhbnNmZXJfZG1hID0ga2J0YWItPmRhdGFfZG1hOworCWtidGFiLT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZrYnRhYi0+ZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiBLQiBHZWFyIFRhYmxldCBvbiAlc1xuIiwgIHBhdGgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBrYnRhYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2J0YWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qga2J0YWIgKmtidGFiID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChrYnRhYikgeworCQl1c2Jfa2lsbF91cmIoa2J0YWItPmlycSk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZrYnRhYi0+ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKGtidGFiLT5pcnEpOworCQl1c2JfYnVmZmVyX2ZyZWUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgMTAsIGtidGFiLT5kYXRhLCBrYnRhYi0+ZGF0YV9kbWEpOworCQlrZnJlZShrYnRhYik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2J0YWJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJrYnRhYiIsCisJLnByb2JlID0Ja2J0YWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlrYnRhYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWtidGFiX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGtidGFiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2J0YWJfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGtidGFiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigma2J0YWJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa2J0YWJfaW5pdCk7Cittb2R1bGVfZXhpdChrYnRhYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0NWE2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jCkBAIC0wLDAgKzEsMzY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtdG91Y2h1c2IuYyAgLS0gIERyaXZlciBmb3IgTWljcm90b3VjaCAoTm93IDNNKSBVU0IgVG91Y2hzY3JlZW5zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogQmFzZWQgdXBvbiBvcmlnaW5hbCB3b3JrIGJ5IFJhZG9zbGF3IEdhcmJhY3ogKHVzYi1zdXBwb3J0QGl0ZS5wbCkKKyAqICAoaHR0cDovL2ZyZXNobWVhdC5uZXQvcHJvamVjdHMvM210b3VjaHNjcmVlbmRyaXZlcikKKyAqCisgKiBIaXN0b3J5CisgKgorICogIDAuMyAmIDAuNCAgMjAwMiAoVEVKKSB0ZWpvaG5zb25AeWFob28uY29tCisgKiAgICBVcGRhdGVkIHRvIDIuNC4xOCwgdGhlbiAyLjQuMTkKKyAqICAgIE9sZCB2ZXJzaW9uIHN0aWxsIHJlbGllZCBvbiBzdGVhbGluZyBhIG1pbm9yCisgKgorICogIDAuNSAgMDIvMjYvMjAwNCAoVEVKKSB0ZWpvaG5zb25AeWFob28uY29tCisgKiAgICBDb21wbGV0ZSByZXdyaXRlIHVzaW5nIExpbnV4IElucHV0IGluIDIuNi4zCisgKiAgICBVbmZvcnR1bmF0ZWx5IG5vIGNhbGlicmF0aW9uIHN1cHBvcnQgYXQgdGhpcyB0aW1lCisgKgorICogIDEuNCAwNC8yNS8yMDA0IChURUopIHRlam9obnNvbkB5YWhvby5jb20KKyAqICAgIENoYW5nZWQgcmVzZXQgZnJvbSBzdGFuZGFyZCBVU0IgZGV2IHJlc2V0IHRvIHZlbmRvciByZXNldAorICogICAgQ2hhbmdlZCBkYXRhIHNlbnQgdG8gaG9zdCBmcm9tIGNvbXBlbnNhdGVkIHRvIHJhdyBjb29yZGluYXRlcworICogICAgRWxpbWluYXRlZCB2ZW5kb3IvcHJvZHVjdCBtb2R1bGUgcGFyYW1zCisgKiAgICBQZXJmb3JtZWQgbXVsdGlwbGUgc3VjY2Vzc2Z1bGwgdGVzdHMgd2l0aCBhbiBFWElJLTUwMTBVQworICoKKyAqICAxLjUgMDIvMjcvMjAwNSBkZHN0cmVldEBpZWVlLm9yZworICogICAgQWRkZWQgbW9kdWxlIHBhcmFtZXRlciB0byBzZWxlY3QgcmF3IG9yIGh3LWNhbGlicmF0ZWQgY29vcmRpbmF0ZSByZXBvcnRpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyAgICAgICAgI2RlZmluZSBERUJVRworI2Vsc2UKKyAgICAgICAgI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBNVE9VQ0hVU0JfTUlOX1hDICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX1JBV19YQyAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX0NBTElCX1hDICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNVE9VQ0hVU0JfWENfRlVaWiAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfWENfRkxBVCAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfTUlOX1lDICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX1JBV19ZQyAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBNVE9VQ0hVU0JfTUFYX0NBTElCX1lDICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNVE9VQ0hVU0JfWUNfRlVaWiAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBNVE9VQ0hVU0JfWUNfRkxBVCAgICAgICAgICAgICAgIDB4MAorCisjZGVmaW5lIE1UT1VDSFVTQl9BU1lOQ19SRVBPUlQgICAgICAgICAgMQorI2RlZmluZSBNVE9VQ0hVU0JfUkVTRVQgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgTVRPVUNIVVNCX1JFUE9SVF9EQVRBX1NJWkUgICAgICAxMQorI2RlZmluZSBNVE9VQ0hVU0JfUkVRX0NUUkxMUl9JRCAgICAgICAgIDEwCisKKyNkZWZpbmUgTVRPVUNIVVNCX0dFVF9SQVdfWEMoZGF0YSkgICAgICAoZGF0YVs4XTw8OCB8IGRhdGFbN10pCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfQ0FMSUJfWEMoZGF0YSkgICAgKGRhdGFbNF08PDggfCBkYXRhWzNdKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1JBV19ZQyhkYXRhKSAgICAgIChkYXRhWzEwXTw8OCB8IGRhdGFbOV0pCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfQ0FMSUJfWUMoZGF0YSkgICAgKGRhdGFbNl08PDggfCBkYXRhWzVdKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1hDKGRhdGEpICAgICAgICAgIChyYXdfY29vcmRpbmF0ZXMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfUkFXX1hDKGRhdGEpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX0NBTElCX1hDKGRhdGEpKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1lDKGRhdGEpICAgICAgICAgIChyYXdfY29vcmRpbmF0ZXMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfUkFXX1lDKGRhdGEpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX0NBTElCX1lDKGRhdGEpKQorI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1RPVUNIRUQoZGF0YSkgICAgICgoZGF0YVsyXSAmIDB4NDApID8gMTowKQorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS41IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2RkIEUuIEpvaG5zb24sIHRlam9obnNvbkB5YWhvby5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDICIzTSBVU0IgVG91Y2hzY3JlZW4gRHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCitzdGF0aWMgaW50IHJhd19jb29yZGluYXRlcyA9IDE7CisKK21vZHVsZV9wYXJhbShyYXdfY29vcmRpbmF0ZXMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocmF3X2Nvb3JkaW5hdGVzLCAicmVwb3J0IHJhdyBjb29yZGluYXRlIHZhbHVlcyAoeSwgZGVmYXVsdCkgb3IgaGFyZHdhcmUtY2FsaWJyYXRlZCBjb29yZGluYXRlIHZhbHVlcyAobikiKTsKKworc3RydWN0IG10b3VjaF91c2IgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgICAgICBkbWFfYWRkcl90IGRhdGFfZG1hOworICAgICAgICBzdHJ1Y3QgdXJiICppcnE7CisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworICAgICAgICBzdHJ1Y3QgaW5wdXRfZGV2IGlucHV0OworICAgICAgICBpbnQgb3BlbjsKKyAgICAgICAgY2hhciBuYW1lWzEyOF07CisgICAgICAgIGNoYXIgcGh5c1s2NF07Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXRvdWNodXNiX2RldmljZXMgW10gPSB7CisgICAgICAgIHsgVVNCX0RFVklDRSgweDA1OTYsIDB4MDAwMSkgfSwKKyAgICAgICAgeyB9Cit9OworCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHN0cnVjdCBtdG91Y2hfdXNiICptdG91Y2ggPSB1cmItPmNvbnRleHQ7CisgICAgICAgIGludCByZXR2YWw7CisKKyAgICAgICAgc3dpdGNoICh1cmItPnN0YXR1cykgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLUVUSU1FRE9VVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZygiJXMgLSB1cmIgdGltZWQgb3V0IC0gd2FzIHRoZSBkZXZpY2UgdW5wbHVnZ2VkPyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIC1FQ09OTlJFU0VUOgorICAgICAgICAgICAgICAgIGNhc2UgLUVOT0VOVDoKKyAgICAgICAgICAgICAgICBjYXNlIC1FU0hVVERPV046CisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlucHV0X3JlZ3MoJm10b3VjaC0+aW5wdXQsIHJlZ3MpOworICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KCZtdG91Y2gtPmlucHV0LCBCVE5fVE9VQ0gsCisgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0dFVF9UT1VDSEVEKG10b3VjaC0+ZGF0YSkpOworICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKCZtdG91Y2gtPmlucHV0LCBBQlNfWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX1hDKG10b3VjaC0+ZGF0YSkpOworICAgICAgICBpbnB1dF9yZXBvcnRfYWJzKCZtdG91Y2gtPmlucHV0LCBBQlNfWSwKKwkJCSAocmF3X2Nvb3JkaW5hdGVzID8gTVRPVUNIVVNCX01BWF9SQVdfWUMgOiBNVE9VQ0hVU0JfTUFYX0NBTElCX1lDKQorICAgICAgICAgICAgICAgICAgICAgICAgIC0gTVRPVUNIVVNCX0dFVF9ZQyhtdG91Y2gtPmRhdGEpKTsKKyAgICAgICAgaW5wdXRfc3luYygmbXRvdWNoLT5pbnB1dCk7CisKK2V4aXQ6CisgICAgICAgIHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIGVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsCisgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRvdWNodXNiX29wZW4gKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworICAgICAgICBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKyAgICAgICAgaWYgKG10b3VjaC0+b3BlbisrKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIG10b3VjaC0+aXJxLT5kZXYgPSBtdG91Y2gtPnVkZXY7CisKKyAgICAgICAgaWYgKHVzYl9zdWJtaXRfdXJiIChtdG91Y2gtPmlycSwgR0ZQX0FUT01JQykpIHsKKyAgICAgICAgICAgICAgICBtdG91Y2gtPm9wZW4tLTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfY2xvc2UgKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworICAgICAgICBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoID0gaW5wdXQtPnByaXZhdGU7CisKKyAgICAgICAgaWYgKCEtLW10b3VjaC0+b3BlbikKKyAgICAgICAgICAgICAgICB1c2Jfa2lsbF91cmIgKG10b3VjaC0+aXJxKTsKK30KKworc3RhdGljIGludCBtdG91Y2h1c2JfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCkKK3sKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgbXRvdWNoLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBNVE9VQ0hVU0JfUkVQT1JUX0RBVEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0FUT01JQywgJm10b3VjaC0+ZGF0YV9kbWEpOworCisgICAgICAgIGlmICghbXRvdWNoLT5kYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRvdWNodXNiX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCkKK3sKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgaWYgKG10b3VjaC0+ZGF0YSkKKyAgICAgICAgICAgICAgICB1c2JfYnVmZmVyX2ZyZWUodWRldiwgTVRPVUNIVVNCX1JFUE9SVF9EQVRBX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+ZGF0YSwgbXRvdWNoLT5kYXRhX2RtYSk7Cit9CisKK3N0YXRpYyBpbnQgbXRvdWNodXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisgICAgICAgIHN0cnVjdCBtdG91Y2hfdXNiICptdG91Y2g7CisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKyAgICAgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKyAgICAgICAgY2hhciBwYXRoWzY0XTsKKyAgICAgICAgaW50IG5SZXQ7CisKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgZGJnKCIlcyAtIHNldHRpbmcgaW50ZXJmYWNlIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKyAgICAgICAgZGJnKCIlcyAtIHNldHRpbmcgZW5kcG9pbnQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBlbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKyAgICAgICAgaWYgKCEobXRvdWNoID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbXRvdWNoX3VzYiksIEdGUF9LRVJORUwpKSkgeworICAgICAgICAgICAgICAgIGVycigiJXMgLSBPdXQgb2YgbWVtb3J5LiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQobXRvdWNoLCAwLCBzaXplb2Yoc3RydWN0IG10b3VjaF91c2IpKTsKKyAgICAgICAgbXRvdWNoLT51ZGV2ID0gdWRldjsKKworICAgICAgICBkYmcoIiVzIC0gYWxsb2NhdGluZyBidWZmZXJzIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgaWYgKG10b3VjaHVzYl9hbGxvY19idWZmZXJzKHVkZXYsIG10b3VjaCkpIHsKKyAgICAgICAgICAgICAgICBtdG91Y2h1c2JfZnJlZV9idWZmZXJzKHVkZXYsIG10b3VjaCk7CisgICAgICAgICAgICAgICAga2ZyZWUobXRvdWNoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCisgICAgICAgIG10b3VjaC0+aW5wdXQucHJpdmF0ZSA9IG10b3VjaDsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5vcGVuID0gbXRvdWNodXNiX29wZW47CisgICAgICAgIG10b3VjaC0+aW5wdXQuY2xvc2UgPSBtdG91Y2h1c2JfY2xvc2U7CisKKyAgICAgICAgdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCA2NCk7CisgICAgICAgIHNwcmludGYobXRvdWNoLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5uYW1lID0gbXRvdWNoLT5uYW1lOworICAgICAgICBtdG91Y2gtPmlucHV0LnBoeXMgPSBtdG91Y2gtPnBoeXM7CisgICAgICAgIG10b3VjaC0+aW5wdXQuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisgICAgICAgIG10b3VjaC0+aW5wdXQuaWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisgICAgICAgIG10b3VjaC0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworICAgICAgICBtdG91Y2gtPmlucHV0LmRldiA9ICZpbnRmLT5kZXY7CisKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzYml0WzBdID0gQklUKEFCU19YKSB8IEJJVChBQlNfWSk7CisgICAgICAgIG10b3VjaC0+aW5wdXQua2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKworICAgICAgICAvKiBVc2VkIHRvIFNjYWxlIENvbXBlbnNhdGVkIERhdGEgYW5kIEZsaXAgWSAqLworICAgICAgICBtdG91Y2gtPmlucHV0LmFic21pbltBQlNfWF0gPSAgTVRPVUNIVVNCX01JTl9YQzsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNtYXhbQUJTX1hdID0gIHJhd19jb29yZGluYXRlcyA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9NQVhfUkFXX1hDIDogTVRPVUNIVVNCX01BWF9DQUxJQl9YQzsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNmdXp6W0FCU19YXSA9IE1UT1VDSFVTQl9YQ19GVVpaOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic2ZsYXRbQUJTX1hdID0gTVRPVUNIVVNCX1hDX0ZMQVQ7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzbWluW0FCU19ZXSA9ICBNVE9VQ0hVU0JfTUlOX1lDOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic21heFtBQlNfWV0gPSAgcmF3X2Nvb3JkaW5hdGVzID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX01BWF9SQVdfWUMgOiBNVE9VQ0hVU0JfTUFYX0NBTElCX1lDOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic2Z1enpbQUJTX1ldID0gTVRPVUNIVVNCX1lDX0ZVWlo7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzZmxhdFtBQlNfWV0gPSBNVE9VQ0hVU0JfWUNfRkxBVDsKKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdChtdG91Y2gtPm5hbWUsIHVkZXYtPm1hbnVmYWN0dXJlcik7CisJaWYgKHVkZXYtPnByb2R1Y3QpCisJCXNwcmludGYobXRvdWNoLT5uYW1lLCAiJXMgJXMiLCBtdG91Y2gtPm5hbWUsIHVkZXYtPnByb2R1Y3QpOworCisgICAgICAgIGlmICghc3RybGVuKG10b3VjaC0+bmFtZSkpCisgICAgICAgICAgICAgICAgc3ByaW50ZihtdG91Y2gtPm5hbWUsICJVU0IgVG91Y2hzY3JlZW4gJTA0eDolMDR4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+aW5wdXQuaWQudmVuZG9yLCBtdG91Y2gtPmlucHV0LmlkLnByb2R1Y3QpOworCisgICAgICAgIG5SZXQgPSB1c2JfY29udHJvbF9tc2cobXRvdWNoLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfUkVTRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworICAgICAgICBkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX1JFU0VUIC0gYnl0ZXN8ZXJyOiAlZCIsCisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG5SZXQpOworCisgICAgICAgIGRiZygiJXMgLSB1c2JfYWxsb2NfdXJiOiBtdG91Y2gtPmlycSIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIG10b3VjaC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKCFtdG91Y2gtPmlycSkgeworICAgICAgICAgICAgICAgIGRiZygiJXMgLSB1c2JfYWxsb2NfdXJiIGZhaWxlZDogbXRvdWNoLT5pcnEiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIG10b3VjaHVzYl9mcmVlX2J1ZmZlcnModWRldiwgbXRvdWNoKTsKKyAgICAgICAgICAgICAgICBrZnJlZShtdG91Y2gpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgZGJnKCIlcyAtIHVzYl9maWxsX2ludF91cmIiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB1c2JfZmlsbF9pbnRfdXJiKG10b3VjaC0+aXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+dWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2aW50cGlwZShtdG91Y2gtPnVkZXYsIDB4ODEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfUkVQT1JUX0RBVEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtdG91Y2h1c2JfaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC0+YkludGVydmFsKTsKKworICAgICAgICBkYmcoIiVzIC0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZtdG91Y2gtPmlucHV0KTsKKworICAgICAgICBuUmV0ID0gdXNiX2NvbnRyb2xfbXNnKG10b3VjaC0+dWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisgICAgICAgIGRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JUIC0gYnl0ZXN8ZXJyOiAlZCIsCisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIG5SZXQpOworCisgICAgICAgIHByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgbXRvdWNoLT5uYW1lLCBwYXRoKTsKKyAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtdG91Y2gpOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKyAgICAgICAgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisgICAgICAgIGRiZygiJXMgLSBjYWxsZWQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworICAgICAgICBpZiAobXRvdWNoKSB7CisgICAgICAgICAgICAgICAgZGJnKCIlcyAtIG10b3VjaCBpcyBpbml0aWFsaXplZCwgY2xlYW5pbmcgdXAiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHVzYl9raWxsX3VyYihtdG91Y2gtPmlycSk7CisgICAgICAgICAgICAgICAgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJm10b3VjaC0+aW5wdXQpOworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYihtdG91Y2gtPmlycSk7CisgICAgICAgICAgICAgICAgbXRvdWNodXNiX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBtdG91Y2gpOworICAgICAgICAgICAgICAgIGtmcmVlKG10b3VjaCk7CisgICAgICAgIH0KK30KKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtdG91Y2h1c2JfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtdG91Y2h1c2JfZHJpdmVyID0geworICAgICAgICAub3duZXIgPSAgICAgIFRISVNfTU9EVUxFLAorICAgICAgICAubmFtZSA9ICAgICAgICJtdG91Y2h1c2IiLAorICAgICAgICAucHJvYmUgPSAgICAgIG10b3VjaHVzYl9wcm9iZSwKKyAgICAgICAgLmRpc2Nvbm5lY3QgPSBtdG91Y2h1c2JfZGlzY29ubmVjdCwKKyAgICAgICAgLmlkX3RhYmxlID0gICBtdG91Y2h1c2JfZGV2aWNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10b3VjaHVzYl9pbml0KHZvaWQpIHsKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiB1c2JfcmVnaXN0ZXIoJm10b3VjaHVzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXRvdWNodXNiX2NsZWFudXAodm9pZCkgeworICAgICAgICBkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgdXNiX2RlcmVnaXN0ZXIoJm10b3VjaHVzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtdG91Y2h1c2JfaW5pdCk7Cittb2R1bGVfZXhpdChtdG91Y2h1c2JfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3BpZC5jIGIvZHJpdmVycy91c2IvaW5wdXQvcGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2OTYzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3BpZC5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogIFBJRCBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBoaWQgZGV2aWNlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFJvZHJpZ28gRGFtYXppby4KKyAqICBQb3J0aW9ucyBieSBKb2hhbm4gRGVuZXV4IGFuZCBCam9ybiBBdWd1c3Rzb24KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHJkYW1hemlvQGxzaS51c3AuYnI+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlICJwaWQuaCIKKworI2RlZmluZSBERUJVRworCisjZGVmaW5lIENIRUNLX09XTkVSU0hJUChpLCBoaWRfcGlkKQlcCisJKChpKSA8IEZGX0VGRkVDVFNfTUFYICYmIGkgPj0gMCAmJiBcCisJdGVzdF9iaXQoRkZfUElEX0ZMQUdTX1VTRUQsICZoaWRfcGlkLT5lZmZlY3RzWyhpKV0uZmxhZ3MpICYmIFwKKwkoY3VycmVudC0+cGlkID09IDAgfHwgXAorCShoaWRfcGlkKS0+ZWZmZWN0c1soaSldLm93bmVyID09IGN1cnJlbnQtPnBpZCkpCisKKy8qIENhbGxlZCB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkICovCitzdGF0aWMgdm9pZCBoaWRfcGlkX2N0cmxfb3V0KHN0cnVjdCB1cmIgKnUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRldl9kYmcoJnUtPmRldi0+ZGV2LCAiaGlkX3BpZF9jdHJsX291dCAtIFRyYW5zZmVyIENvbXBsZXRlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9waWRfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfZmZfcGlkICpwcml2YXRlID0gaGlkLT5mZl9wcml2YXRlOworCisJaWYgKHByaXZhdGUtPnVyYmZmb3V0KSB7CisJCXVzYl9raWxsX3VyYihwcml2YXRlLT51cmJmZm91dCk7CisJCXVzYl9mcmVlX3VyYihwcml2YXRlLT51cmJmZm91dCk7CisJfQorfQorCitzdGF0aWMgaW50IHBpZF91cGxvYWRfcGVyaW9kaWMoc3RydWN0IGhpZF9mZl9waWQgKnBpZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LCBpbnQgaXNfdXBkYXRlKQoreworCWRldl9pbmZvKCZwaWQtPmhpZC0+ZGV2LT5kZXYsICJyZXF1ZXN0ZWQgcGVyaW9kaWMgZm9yY2UgdXBsb2FkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaWRfdXBsb2FkX2NvbnN0YW50KHN0cnVjdCBoaWRfZmZfcGlkICpwaWQsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCwgaW50IGlzX3VwZGF0ZSkKK3sKKwlkZXZfaW5mbygmcGlkLT5oaWQtPmRldi0+ZGV2LCAicmVxdWVzdGVkIGNvbnN0YW50IGZvcmNlIHVwbG9hZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlkX3VwbG9hZF9jb25kaXRpb24oc3RydWN0IGhpZF9mZl9waWQgKnBpZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LCBpbnQgaXNfdXBkYXRlKQoreworCWRldl9pbmZvKCZwaWQtPmhpZC0+ZGV2LT5kZXYsICJyZXF1ZXN0ZWQgQ29uZGl0aW9uIGZvcmNlIHVwbG9hZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlkX3VwbG9hZF9yYW1wKHN0cnVjdCBoaWRfZmZfcGlkICpwaWQsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCwgaW50IGlzX3VwZGF0ZSkKK3sKKwlkZXZfaW5mbygmcGlkLT5oaWQtPmRldi0+ZGV2LCAicmVxdWVzdCByYW1wIGZvcmNlIHVwbG9hZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3BpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCSB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlkZXZfZGJnKCZoaWQtPmRldi0+ZGV2LCAiUElEIGV2ZW50IHJlY2VpdmVkOiB0eXBlPSVkLGNvZGU9JWQsdmFsdWU9JWQuXG4iLCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisKKwlpZiAodHlwZSAhPSBFVl9GRikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIExvY2sgbXVzdCBiZSBoZWxkIGJ5IGNhbGxlciAqLworc3RhdGljIHZvaWQgaGlkX3BpZF9jdHJsX3BsYXliYWNrKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcGlkX2VmZmVjdCAqZWZmZWN0LCBpbnQgcGxheSkKK3sKKwlpZiAocGxheSkKKwkJc2V0X2JpdChGRl9QSURfRkxBR1NfUExBWUlORywgJmVmZmVjdC0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KEZGX1BJRF9GTEFHU19QTEFZSU5HLCAmZWZmZWN0LT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3BpZF9lcmFzZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBoaWRfZmZfcGlkICpwaWQgPSBoaWQtPmZmX3ByaXZhdGU7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCFDSEVDS19PV05FUlNISVAoaWQsIHBpZCkpCisJCXJldHVybiAtRUFDQ0VTOworCisJLyogRmluZCByZXBvcnQgKi8KKwlmaWVsZCA9IGhpZF9maW5kX2ZpZWxkX2J5X3VzYWdlKGhpZCwgSElEX1VQX1BJRCB8IEZGX1BJRF9VU0FHRV9CTE9DS19GUkVFLAorCQkJCQlISURfT1VUUFVUX1JFUE9SVCk7CisJaWYgKCFmaWVsZCkgeworCQlkZXZfZXJyKCZoaWQtPmRldi0+ZGV2LCAiY291bGRuJ3QgZmluZCByZXBvcnRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXQgPSBoaWRfc2V0X2ZpZWxkKGZpZWxkLCAwLCBwaWQtPmVmZmVjdHNbaWRdLmRldmljZV9pZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoaWQtPmRldi0+ZGV2LCAiY291bGRuJ3Qgc2V0IGZpZWxkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaWQtPmxvY2ssIGZsYWdzKTsKKwloaWRfcGlkX2N0cmxfcGxheWJhY2soaGlkLCBwaWQtPmVmZmVjdHMgKyBpZCwgMCk7CisJcGlkLT5lZmZlY3RzW2lkXS5mbGFncyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXJhc2UgYWxsIGVmZmVjdHMgdGhpcyBwcm9jZXNzIG93bnMgKi8KK3N0YXRpYyBpbnQgaGlkX3BpZF9mbHVzaChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9mZl9waWQgKnBpZCA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlpbnQgaTsKKworCS8qTk9URTogbm8gbmVlZCB0byBsb2NrIGhlcmUuIFRoZSBvbmx5IHRpbWVzIEVGRkVDVF9VU0VEIGlzCisJICAgbW9kaWZpZWQgaXMgd2hlbiBlZmZlY3RzIGFyZSB1cGxvYWRlZCBvciB3aGVuIGFuIGVmZmVjdCBpcworCSAgIGVyYXNlZC4gQnV0IGEgcHJvY2VzcyBjYW5ub3QgY2xvc2UgaXRzIGRldi9pbnB1dC9ldmVudFggZmQKKwkgICBhbmQgcGVyZm9ybSBpb2N0bHMgb24gdGhlIHNhbWUgZmQgYWxsIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkvKkZJWE1FOiBtdWx0aXBsZSB0aHJlYWRzLCBhbnlvbmU/ICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+ZmZfZWZmZWN0c19tYXg7ICsraSkKKwkJaWYgKGN1cnJlbnQtPnBpZCA9PSBwaWQtPmVmZmVjdHNbaV0ub3duZXIKKwkJICAgICYmIHRlc3RfYml0KEZGX1BJRF9GTEFHU19VU0VELCAmcGlkLT5lZmZlY3RzW2ldLmZsYWdzKSkKKwkJCWlmIChoaWRfcGlkX2VyYXNlKGRldiwgaSkpCisJCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LT5kZXYsICJlcmFzZSBlZmZlY3QgJWQgZmFpbGVkIiwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfcGlkX3VwbG9hZF9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9mZl9waWQgKnBpZF9wcml2YXRlID0gKHN0cnVjdCBoaWRfZmZfcGlkICopKGRldi0+cHJpdmF0ZSk7CisJaW50IHJldDsKKwlpbnQgaXNfdXBkYXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwgInVwbG9hZCBlZmZlY3QgY2FsbGVkOiBlZmZlY3RfdHlwZT0leFxuIiwgZWZmZWN0LT50eXBlKTsKKwkvKiBDaGVjayB0aGlzIGVmZmVjdCB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLworCWlmICghdGVzdF9iaXQoZWZmZWN0LT50eXBlLCBkZXYtPmZmYml0KSkgeworCQlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwKKwkJCSJpbnZhbGlkIGtpbmQgb2YgZWZmZWN0IHJlcXVlc3RlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIElmIHdlIHdhbnQgdG8gY3JlYXRlIGEgbmV3IGVmZmVjdCwgZ2V0IGEgZnJlZSBpZAorCSAqLworCWlmIChlZmZlY3QtPmlkID09IC0xKSB7CisJCWludCBpZCA9IDA7CisKKwkJLy8gU3BpbmxvY2sgc28gd2UgZG9uYHQgZ2V0IGEgcmFjZSBjb25kaXRpb24gd2hlbiBjaG9vc2luZyBJRHMKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBpZF9wcml2YXRlLT5sb2NrLCBmbGFncyk7CisKKwkJd2hpbGUgKGlkIDwgRkZfRUZGRUNUU19NQVgpCisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRkZfUElEX0ZMQUdTX1VTRUQsICZwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tpZCsrXS5mbGFncykpCisJCQkJYnJlYWs7CisKKwkJaWYgKGlkID09IEZGX0VGRkVDVFNfTUFYKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaWRfcHJpdmF0ZS0+bG9jaywgZmxhZ3MpOworLy8gVEVNUCAtIFdlIG5lZWQgdG8gZ2V0IGZmX2VmZmVjdHNfbWF4IGNvcnJlY3RseSBmaXJzdDogIHx8IGlkID49IGRldi0+ZmZfZWZmZWN0c19tYXgpIHsKKwkJCWRldl9kYmcoJnBpZF9wcml2YXRlLT5oaWQtPmRldi0+ZGV2LCAiTm90IGVub3VnaCBkZXZpY2UgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJZWZmZWN0LT5pZCA9IGlkOworCQlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwgImVmZmVjdCBJRCBpcyAlZFxuLiIsIGlkKTsKKwkJcGlkX3ByaXZhdGUtPmVmZmVjdHNbaWRdLm93bmVyID0gY3VycmVudC0+cGlkOworCQlwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tpZF0uZmxhZ3MgPSAoMSA8PCBGRl9QSURfRkxBR1NfVVNFRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpZF9wcml2YXRlLT5sb2NrLCBmbGFncyk7CisKKwkJaXNfdXBkYXRlID0gRkZfUElEX0ZBTFNFOworCX0gZWxzZSB7CisJCS8qIFdlIHdhbnQgdG8gdXBkYXRlIGFuIGVmZmVjdCAqLworCQlpZiAoIUNIRUNLX09XTkVSU0hJUChlZmZlY3QtPmlkLCBwaWRfcHJpdmF0ZSkpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQkvKiBQYXJhbWV0ZXIgdHlwZSBjYW5ub3QgYmUgdXBkYXRlZCAqLworCQlpZiAoZWZmZWN0LT50eXBlICE9IHBpZF9wcml2YXRlLT5lZmZlY3RzW2VmZmVjdC0+aWRdLmVmZmVjdC50eXBlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogQ2hlY2sgdGhlIGVmZmVjdCBpcyBub3QgYWxyZWFkeSBiZWluZyB1cGRhdGVkICovCisJCWlmICh0ZXN0X2JpdChGRl9QSURfRkxBR1NfVVBEQVRJTkcsICZwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tlZmZlY3QtPmlkXS5mbGFncykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlpc191cGRhdGUgPSBGRl9QSURfVFJVRTsKKwl9CisKKwkvKgorCSAqIFVwbG9hZCB0aGUgZWZmZWN0CisJICovCisJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKKwljYXNlIEZGX1BFUklPRElDOgorCQlyZXQgPSBwaWRfdXBsb2FkX3BlcmlvZGljKHBpZF9wcml2YXRlLCBlZmZlY3QsIGlzX3VwZGF0ZSk7CisJCWJyZWFrOworCisJY2FzZSBGRl9DT05TVEFOVDoKKwkJcmV0ID0gcGlkX3VwbG9hZF9jb25zdGFudChwaWRfcHJpdmF0ZSwgZWZmZWN0LCBpc191cGRhdGUpOworCQlicmVhazsKKworCWNhc2UgRkZfU1BSSU5HOgorCWNhc2UgRkZfRlJJQ1RJT046CisJY2FzZSBGRl9EQU1QRVI6CisJY2FzZSBGRl9JTkVSVElBOgorCQlyZXQgPSBwaWRfdXBsb2FkX2NvbmRpdGlvbihwaWRfcHJpdmF0ZSwgZWZmZWN0LCBpc191cGRhdGUpOworCQlicmVhazsKKworCWNhc2UgRkZfUkFNUDoKKwkJcmV0ID0gcGlkX3VwbG9hZF9yYW1wKHBpZF9wcml2YXRlLCBlZmZlY3QsIGlzX3VwZGF0ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2RiZygmcGlkX3ByaXZhdGUtPmhpZC0+ZGV2LT5kZXYsCisJCQkiaW52YWxpZCB0eXBlIG9mIGVmZmVjdCByZXF1ZXN0ZWQgLSAleC5cbiIsCisJCQllZmZlY3QtPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogSWYgYSBwYWNrZXQgd2FzIHNlbnQsIGZvcmJpZCBuZXcgdXBkYXRlcyB1bnRpbCB3ZSBhcmUgbm90aWZpZWQKKwkgKiB0aGF0IHRoZSBwYWNrZXQgd2FzIHVwZGF0ZWQKKwkgKi8KKwlpZiAocmV0ID09IDApCisJCXNldF9iaXQoRkZfUElEX0ZMQUdTX1VQREFUSU5HLCAmcGlkX3ByaXZhdGUtPmVmZmVjdHNbZWZmZWN0LT5pZF0uZmxhZ3MpOworCXBpZF9wcml2YXRlLT5lZmZlY3RzW2VmZmVjdC0+aWRdLmVmZmVjdCA9ICplZmZlY3Q7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZF9waWRfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfZmZfcGlkICpwcml2YXRlOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9lbnRyeSgmaGlkLT5pbnB1dHMsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCisJcHJpdmF0ZSA9IGhpZC0+ZmZfcHJpdmF0ZSA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBoaWRfZmZfcGlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXZhdGUtPmhpZCA9IGhpZDsKKworCWhpZC0+ZmZfZXhpdCA9IGhpZF9waWRfZXhpdDsKKwloaWQtPmZmX2V2ZW50ID0gaGlkX3BpZF9ldmVudDsKKworCS8qIE9wZW4gb3V0cHV0IFVSQiAqLworCWlmICghKHByaXZhdGUtPnVyYmZmb3V0ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpIHsKKwkJa2ZyZWUocHJpdmF0ZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwcml2YXRlLT51cmJmZm91dCwgaGlkLT5kZXYsIDAsCisJCQkgICAgICh2b2lkICopJnByaXZhdGUtPmZmY3IsIHByaXZhdGUtPmN0cmxfYnVmZmVyLCA4LAorCQkJICAgICBoaWRfcGlkX2N0cmxfb3V0LCBoaWQpOworCWhpZGlucHV0LT5pbnB1dC51cGxvYWRfZWZmZWN0ID0gaGlkX3BpZF91cGxvYWRfZWZmZWN0OworCWhpZGlucHV0LT5pbnB1dC5mbHVzaCA9IGhpZF9waWRfZmx1c2g7CisJaGlkaW5wdXQtPmlucHV0LmZmX2VmZmVjdHNfbWF4ID0gODsJLy8gQSByYW5kb20gZGVmYXVsdAorCXNldF9iaXQoRVZfRkYsIGhpZGlucHV0LT5pbnB1dC5ldmJpdCk7CisJc2V0X2JpdChFVl9GRl9TVEFUVVMsIGhpZGlucHV0LT5pbnB1dC5ldmJpdCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdmF0ZS0+bG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3JjZSBmZWVkYmFjayBkcml2ZXIgZm9yIFBJRCBkZXZpY2VzIGJ5IFJvZHJpZ28gRGFtYXppbyA8cmRhbWF6aW9AbHNpLnVzcC5icj4uXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvcGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9waWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmNiOTYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvcGlkLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqICBQSUQgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaGlkIGRldmljZXMuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMiBSb2RyaWdvIERhbWF6aW8uCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDxyZGFtYXppb0Bsc2kudXNwLmJyPgorICovCisKKyNkZWZpbmUgRkZfRUZGRUNUU19NQVggNjQKKworI2RlZmluZSBGRl9QSURfRkxBR1NfVVNFRAkxCS8qIElmIHRoZSBlZmZlY3QgZXhpc3RzICovCisjZGVmaW5lIEZGX1BJRF9GTEFHU19VUERBVElORwkyCS8qIElmIHRoZSBlZmZlY3QgaXMgYmVpbmcgdXBkYXRlZCAqLworI2RlZmluZSBGRl9QSURfRkxBR1NfUExBWUlORwkzCS8qIElmIHRoZSBlZmZlY3QgaXMgY3VycmVudGx5IGJlaW5nIHBsYXllZCAqLworCisjZGVmaW5lIEZGX1BJRF9GQUxTRQkwCisjZGVmaW5lIEZGX1BJRF9UUlVFCTEKKworc3RydWN0IGhpZF9waWRfZWZmZWN0IHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXBpZF90IG93bmVyOworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CS8qIFRoZSBkZXZpY2UtYXNzaWduZWQgSUQgKi8KKwlzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKK307CisKK3N0cnVjdCBoaWRfZmZfcGlkIHsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCXVuc2lnbmVkIGxvbmcgZ2FpbjsKKworCXN0cnVjdCB1cmIgKnVyYmZmb3V0OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgZmZjcjsKKwlzcGlubG9ja190IGxvY2s7CisKKwl1bnNpZ25lZCBjaGFyIGN0cmxfYnVmZmVyWzhdOworCisJc3RydWN0IGhpZF9waWRfZWZmZWN0IGVmZmVjdHNbRkZfRUZGRUNUU19NQVhdOworfTsKKworLyoKKyAqIENvbnN0YW50cyBmcm9tIHRoZSBQSUQgdXNhZ2UgdGFibGUgKHN0aWxsIGZhciBmcm9tIGNvbXBsZXRlKQorICovCisKKyNkZWZpbmUgRkZfUElEX1VTQUdFX0JMT0NLX0xPQUQgCTB4ODlVTAorI2RlZmluZSBGRl9QSURfVVNBR0VfQkxPQ0tfRlJFRQkJMHg5MFVMCisjZGVmaW5lIEZGX1BJRF9VU0FHRV9ORVdfRUZGRUNUIAkweEFCVUwKKyNkZWZpbmUgRkZfUElEX1VTQUdFX1BPT0xfUkVQT1JUCTB4N0ZVTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvcG93ZXJtYXRlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmEyZjliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvcG93ZXJtYXRlLmMKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBBIGRyaXZlciBmb3IgdGhlIEdyaWZmaW4gVGVjaG5vbG9neSwgSW5jLiAiUG93ZXJNYXRlIiBVU0IgY29udHJvbGxlciBkaWFsLgorICoKKyAqIHYxLjEsIChjKTIwMDIgV2lsbGlhbSBSIFNvd2VyYnV0dHMgPHdpbGxAc293ZXJidXR0cy5jb20+CisgKgorICogVGhpcyBkZXZpY2UgaXMgYSBhbm9kaXNlZCBhbHVtaW5pdW0ga25vYiB3aGljaCBjb25uZWN0cyBvdmVyIFVTQi4gSXQgY2FuIG1lYXN1cmUKKyAqIGNsb2Nrd2lzZSBhbmQgYW50aWNsb2Nrd2lzZSByb3RhdGlvbi4gVGhlIGRpYWwgYWxzbyBhY3RzIGFzIGEgcHVzaGJ1dHRvbiB3aXRoCisgKiBhIHNwcmluZyBmb3IgYXV0b21hdGljIHJlbGVhc2UuIFRoZSBiYXNlIGNvbnRhaW5zIGEgcGFpciBvZiBMRURzIHdoaWNoIGlsbHVtaW5hdGUKKyAqIHRoZSB0cmFuc2x1Y2VudCBiYXNlLiBJdCByb3RhdGVzIHdpdGhvdXQgbGltaXQgYW5kIHJlcG9ydHMgaXRzIHJlbGF0aXZlIHJvdGF0aW9uCisgKiBiYWNrIHRvIHRoZSBob3N0IHdoZW4gcG9sbGVkIGJ5IHRoZSBVU0IgY29udHJvbGxlci4KKyAqCisgKiBUZXN0aW5nIHdpdGggdGhlIGtub2IgSSBoYXZlIGhhcyBzaG93biB0aGF0IGl0IG1lYXN1cmVzIGFwcHJveGltYXRlbHkgOTQgImNsaWNrcyIKKyAqIGZvciBvbmUgZnVsbCByb3RhdGlvbi4gVGVzdGluZyB3aXRoIG15IEhpZ2ggU3BlZWQgUm90YXRpb24gQWN0dWF0b3IgKG9rLCBpdCB3YXMgCisgKiBhIHZhcmlhYmxlIHNwZWVkIGNvcmRsZXNzIGVsZWN0cmljIGRyaWxsKSBoYXMgc2hvd24gdGhhdCB0aGUgZGV2aWNlIGNhbiBtZWFzdXJlCisgKiBzcGVlZHMgb2YgdXAgdG8gNyBjbGlja3MgZWl0aGVyIGNsb2Nrd2lzZSBvciBhbnRpY2xvY2t3aXNlIGJldHdlZW4gcG9sbGluZ3MgZnJvbQorICogdGhlIGhvc3QuIElmIGl0IGNvdW50cyBtb3JlIHRoYW4gNyBjbGlja3MgYmVmb3JlIGl0IGlzIHBvbGxlZCwgaXQgd2lsbCB3cmFwIGJhY2sKKyAqIHRvIHplcm8gYW5kIHN0YXJ0IGNvdW50aW5nIGFnYWluLiBUaGlzIHdhcyBhdCBxdWl0ZSBoaWdoIHNwZWVkLCBob3dldmVyLCBhbG1vc3QKKyAqIGNlcnRhaW5seSBmYXN0ZXIgdGhhbiB0aGUgaHVtYW4gaGFuZCBjb3VsZCB0dXJuIGl0LiBHcmlmZmluIHNheSB0aGF0IGl0IGxvc2VzIGEKKyAqIHB1bHNlIG9yIHR3byBvbiBhIGRpcmVjdGlvbiBjaGFuZ2U7IHRoZSBncmFudWxhcml0eSBpcyBzbyBmaW5lIHRoYXQgSSBuZXZlcgorICogbm90aWNlZCB0aGlzIGluIHByYWN0aWNlLgorICoKKyAqIFRoZSBkZXZpY2UncyBtaWNyb2NvbnRyb2xsZXIgY2FuIGJlIHByb2dyYW1tZWQgdG8gc2V0IHRoZSBMRUQgdG8gZWl0aGVyIGEgY29uc3RhbnQKKyAqIGludGVuc2l0eSwgb3IgdG8gYSByaHl0aG1pYyBwdWxzaW5nLiBTZXZlcmFsIHBhdHRlcm5zIGFuZCBzcGVlZHMgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBHcmlmZmluIHdlcmUgdmVyeSBoYXBweSB0byBwcm92aWRlIGRvY3VtZW50YXRpb24gYW5kIGZyZWUgaGFyZHdhcmUgZm9yIGRldmVsb3BtZW50LgorICoKKyAqIFNvbWUgdXNlcnNwYWNlIHRvb2xzIGFyZSBhdmFpbGFibGUgb24gdGhlIHdlYjogaHR0cDovL3Nvd2VyYnV0dHMuY29tL3Bvd2VybWF0ZS8KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIFBPV0VSTUFURV9WRU5ET1IJMHgwNzdkCS8qIEdyaWZmaW4gVGVjaG5vbG9neSwgSW5jLiAqLworI2RlZmluZSBQT1dFUk1BVEVfUFJPRFVDVF9ORVcJMHgwNDEwCS8qIEdyaWZmaW4gUG93ZXJNYXRlICovCisjZGVmaW5lIFBPV0VSTUFURV9QUk9EVUNUX09MRAkweDA0QUEJLyogR3JpZmZpbiBzb3VuZEtub2IgKi8KKworI2RlZmluZSBDT05UT1VSX1ZFTkRPUgkJMHgwNWYzCS8qIENvbnRvdXIgRGVzaWduLCBJbmMuICovCisjZGVmaW5lIENPTlRPVVJfSk9HCQkweDAyNDAJLyogSm9nIGFuZCBTaHV0dGxlICovCisKKy8qIHRoZXNlIGFyZSB0aGUgY29tbWFuZCBjb2RlcyB3ZSBzZW5kIHRvIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUgU0VUX1NUQVRJQ19CUklHSFRORVNTICAweDAxCisjZGVmaW5lIFNFVF9QVUxTRV9BU0xFRVAgICAgICAgMHgwMgorI2RlZmluZSBTRVRfUFVMU0VfQVdBS0UgICAgICAgIDB4MDMKKyNkZWZpbmUgU0VUX1BVTFNFX01PREUgICAgICAgICAweDA0CisKKy8qIHRoZXNlIHJlZmVyIHRvIGJpdHMgaW4gdGhlIHBvd2VybWF0ZV9kZXZpY2UncyByZXF1aXJlc191cGRhdGUgZmllbGQuICovCisjZGVmaW5lIFVQREFURV9TVEFUSUNfQlJJR0hUTkVTUyAoMTw8MCkKKyNkZWZpbmUgVVBEQVRFX1BVTFNFX0FTTEVFUCAgICAgICgxPDwxKQorI2RlZmluZSBVUERBVEVfUFVMU0VfQVdBS0UgICAgICAgKDE8PDIpCisjZGVmaW5lIFVQREFURV9QVUxTRV9NT0RFICAgICAgICAoMTw8MykKKworLyogYXQgbGVhc3QgdHdvIHZlcnNpb25zIG9mIHRoZSBoYXJkd2FyZSBleGlzdCwgd2l0aCBkaWZmZXJpbmcgcGF5bG9hZAorICAgc2l6ZXMuIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBhbHdheXMgY29udGFpbiB0aGUgImludGVyZXN0aW5nIiBkYXRhIGluCisgICB0aGUgcmVsZXZhbnQgZm9ybWF0LiAqLworI2RlZmluZSBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCA2CisjZGVmaW5lIFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUlOIDMKK3N0cnVjdCBwb3dlcm1hdGVfZGV2aWNlIHsKKwlzaWduZWQgY2hhciAqZGF0YTsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworCXN0cnVjdCB1cmIgKmlycSwgKmNvbmZpZzsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjb25maWdjcjsKKwlkbWFfYWRkcl90IGNvbmZpZ2NyX2RtYTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGlucHV0OworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgc3RhdGljX2JyaWdodG5lc3M7CisJaW50IHB1bHNlX3NwZWVkOworCWludCBwdWxzZV90YWJsZTsKKwlpbnQgcHVsc2VfYXNsZWVwOworCWludCBwdWxzZV9hd2FrZTsKKwlpbnQgcmVxdWlyZXNfdXBkYXRlOyAvLyBwaHlzaWNhbCBzZXR0aW5ncyB3aGljaCBhcmUgb3V0IG9mIHN5bmMKKwljaGFyIHBoeXNbNjRdOworfTsKKworc3RhdGljIGNoYXIgcG1fbmFtZV9wb3dlcm1hdGVbXSA9ICJHcmlmZmluIFBvd2VyTWF0ZSI7CitzdGF0aWMgY2hhciBwbV9uYW1lX3NvdW5ka25vYltdID0gIkdyaWZmaW4gU291bmRLbm9iIjsKKworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2NvbmZpZ19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogQ2FsbGJhY2sgZm9yIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgUG93ZXJNYXRlIG92ZXIgdGhlIFVTQiBpbnRlcnJ1cHQgcGlwZSAqLworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBoYW5kbGUgdXBkYXRlcyB0byBkZXZpY2Ugc3RhdGUgKi8KKwlpbnB1dF9yZWdzKCZwbS0+aW5wdXQsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoJnBtLT5pbnB1dCwgQlROXzAsIHBtLT5kYXRhWzBdICYgMHgwMSk7CisJaW5wdXRfcmVwb3J0X3JlbCgmcG0tPmlucHV0LCBSRUxfRElBTCwgcG0tPmRhdGFbMV0pOworCWlucHV0X3N5bmMoJnBtLT5pbnB1dCk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworLyogRGVjaWRlIGlmIHdlIG5lZWQgdG8gaXNzdWUgYSBjb250cm9sIG1lc3NhZ2UgYW5kIGRvIHNvLiBNdXN0IGJlIGNhbGxlZCB3aXRoIHBtLT5sb2NrIHRha2VuICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfc3luY19zdGF0ZShzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSAqcG0pCit7CisJaWYgKHBtLT5yZXF1aXJlc191cGRhdGUgPT0gMCkgCisJCXJldHVybjsgLyogbm8gdXBkYXRlcyBhcmUgcmVxdWlyZWQgKi8KKwlpZiAocG0tPmNvbmZpZy0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgCisJCXJldHVybjsgLyogYW4gdXBkYXRlIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3M7IGl0J2xsIGlzc3VlIHRoaXMgdXBkYXRlIHdoZW4gaXQgY29tcGxldGVzICovCisKKwlpZiAocG0tPnJlcXVpcmVzX3VwZGF0ZSAmIFVQREFURV9QVUxTRV9BU0xFRVApeworCQlwbS0+Y29uZmlnY3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCBTRVRfUFVMU0VfQVNMRUVQICk7CisJCXBtLT5jb25maWdjci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIHBtLT5wdWxzZV9hc2xlZXAgPyAxIDogMCApOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlICY9IH5VUERBVEVfUFVMU0VfQVNMRUVQOworCX1lbHNlIGlmIChwbS0+cmVxdWlyZXNfdXBkYXRlICYgVVBEQVRFX1BVTFNFX0FXQUtFKXsKKwkJcG0tPmNvbmZpZ2NyLT53VmFsdWUgPSBjcHVfdG9fbGUxNiggU0VUX1BVTFNFX0FXQUtFICk7CisJCXBtLT5jb25maWdjci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIHBtLT5wdWxzZV9hd2FrZSA/IDEgOiAwICk7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgJj0gflVQREFURV9QVUxTRV9BV0FLRTsKKwl9ZWxzZSBpZiAocG0tPnJlcXVpcmVzX3VwZGF0ZSAmIFVQREFURV9QVUxTRV9NT0RFKXsKKwkJaW50IG9wLCBhcmc7CisJCS8qIHRoZSBwb3dlcm1hdGUgdGFrZXMgYW4gb3BlcmF0aW9uIGFuZCBhbiBhcmd1bWVudCBmb3IgaXRzIHB1bHNlIGFsZ29yaXRobS4KKwkJICAgdGhlIG9wZXJhdGlvbiBjYW4gYmU6CisJCSAgIDA6IGRpdmlkZSB0aGUgc3BlZWQKKwkJICAgMTogcHVsc2UgYXQgbm9ybWFsIHNwZWVkCisJCSAgIDI6IG11bHRpcGx5IHRoZSBzcGVlZAorCQkgICB0aGUgYXJndW1lbnQgb25seSBoYXMgYW4gZWZmZWN0IGZvciBvcGVyYXRpb25zIDAgYW5kIDIsIGFuZCByYW5nZXMgYmV0d2VlbgorCQkgICAxIChsZWFzdCBlZmZlY3QpIHRvIDI1NSAobWF4aW11bSBlZmZlY3QpLgorICAgICAgIAorCQkgICB0aHVzLCBzZXZlcmFsIHN0YXRlcyBhcmUgZXF1aXZhbGVudCBhbmQgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSBzdGF0ZS4KKworCQkgICB3ZSBtYXAgdGhpcyBvbnRvIGEgcmFuZ2UgZnJvbSAwIHRvIDUxMCwgd2l0aDoKKwkJICAgMCAtLSAyNTQgICAgLS0gdXNlIGRpdmlkZSAoMCA9IHNsb3dlc3QpCisJCSAgIDI1NSAgICAgICAgIC0tIHVzZSBub3JtYWwgc3BlZWQKKwkJICAgMjU2IC0tIDUxMCAgLS0gdXNlIG11bHRpcGxlICg1MTAgPSBmYXN0ZXN0KS4KKworCQkgICBPbmx5IHZhbHVlcyBvZiAnYXJnJyBxdWl0ZSBjbG9zZSB0byAyNTUgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwvc3BlY3RhY3VsYXIuCisJCSovICAgIAorCQlpZiAocG0tPnB1bHNlX3NwZWVkIDwgMjU1KXsKKwkJCW9wID0gMDsgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlCisJCQlhcmcgPSAyNTUgLSBwbS0+cHVsc2Vfc3BlZWQ7CisJCX0gZWxzZSBpZiAocG0tPnB1bHNlX3NwZWVkID4gMjU1KXsKKwkJCW9wID0gMjsgICAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbHkKKwkJCWFyZyA9IHBtLT5wdWxzZV9zcGVlZCAtIDI1NTsKKwkJfSBlbHNlIHsKKwkJCW9wID0gMTsgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIHNwZWVkCisJCQlhcmcgPSAwOyAgICAgICAgICAgICAgICAgIC8vIGNhbiBiZSBhbnkgdmFsdWUKKwkJfQorCQlwbS0+Y29uZmlnY3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCAocG0tPnB1bHNlX3RhYmxlIDw8IDgpIHwgU0VUX1BVTFNFX01PREUgKTsKKwkJcG0tPmNvbmZpZ2NyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggKGFyZyA8PCA4KSB8IG9wICk7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgJj0gflVQREFURV9QVUxTRV9NT0RFOworCX1lbHNlIGlmIChwbS0+cmVxdWlyZXNfdXBkYXRlICYgVVBEQVRFX1NUQVRJQ19CUklHSFRORVNTKXsKKwkJcG0tPmNvbmZpZ2NyLT53VmFsdWUgPSBjcHVfdG9fbGUxNiggU0VUX1NUQVRJQ19CUklHSFRORVNTICk7CisJCXBtLT5jb25maWdjci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIHBtLT5zdGF0aWNfYnJpZ2h0bmVzcyApOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlICY9IH5VUERBVEVfU1RBVElDX0JSSUdIVE5FU1M7CisJfWVsc2V7CisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJtYXRlOiB1bmtub3duIHVwZGF0ZSByZXF1aXJlZCIpOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlID0gMDsgLyogZnVkZ2UgdGhlIGJ1ZyAqLworCQlyZXR1cm47CisJfQorCisvKglwcmludGsoInBvd2VybWF0ZTogJTA0eCAlMDR4XG4iLCBwbS0+Y29uZmlnY3ItPndWYWx1ZSwgcG0tPmNvbmZpZ2NyLT53SW5kZXgpOyAqLworCisJcG0tPmNvbmZpZ2NyLT5iUmVxdWVzdFR5cGUgPSAweDQxOyAvKiB2ZW5kb3IgcmVxdWVzdCAqLworCXBtLT5jb25maWdjci0+YlJlcXVlc3QgPSAweDAxOworCXBtLT5jb25maWdjci0+d0xlbmd0aCA9IDA7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwbS0+Y29uZmlnLCBwbS0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHBtLT51ZGV2LCAwKSwKKwkJCSAgICAgKHZvaWQgKikgcG0tPmNvbmZpZ2NyLCBOVUxMLCAwLAorCQkJICAgICBwb3dlcm1hdGVfY29uZmlnX2NvbXBsZXRlLCBwbSk7CisJcG0tPmNvbmZpZy0+c2V0dXBfZG1hID0gcG0tPmNvbmZpZ2NyX2RtYTsKKwlwbS0+Y29uZmlnLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fU0VUVVBfRE1BX01BUDsKKworCWlmICh1c2Jfc3VibWl0X3VyYihwbS0+Y29uZmlnLCBHRlBfQVRPTUlDKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJwb3dlcm1hdGU6IHVzYl9zdWJtaXRfdXJiKGNvbmZpZykgZmFpbGVkIik7Cit9CisKKy8qIENhbGxlZCB3aGVuIG91ciBhc3luY2hyb25vdXMgY29udHJvbCBtZXNzYWdlIGNvbXBsZXRlcy4gV2UgbWF5IG5lZWQgdG8gaXNzdWUgYW5vdGhlciBpbW1lZGlhdGVseSAqLworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2NvbmZpZ19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlwcmludGsoS0VSTl9FUlIgInBvd2VybWF0ZTogY29uZmlnIHVyYiByZXR1cm5lZCAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZwbS0+bG9jaywgZmxhZ3MpOworCXBvd2VybWF0ZV9zeW5jX3N0YXRlKHBtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbS0+bG9jaywgZmxhZ3MpOworfQorCisvKiBTZXQgdGhlIExFRCB1cCBhcyBkZXNjcmliZWQgYW5kIGJlZ2luIHRoZSBzeW5jIHdpdGggdGhlIGhhcmR3YXJlIGlmIHJlcXVpcmVkICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfcHVsc2VfbGVkKHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSwgaW50IHN0YXRpY19icmlnaHRuZXNzLCBpbnQgcHVsc2Vfc3BlZWQsIAorCQkJCWludCBwdWxzZV90YWJsZSwgaW50IHB1bHNlX2FzbGVlcCwgaW50IHB1bHNlX2F3YWtlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocHVsc2Vfc3BlZWQgPCAwKQorCQlwdWxzZV9zcGVlZCA9IDA7CisJaWYgKHB1bHNlX3RhYmxlIDwgMCkKKwkJcHVsc2VfdGFibGUgPSAwOworCWlmIChwdWxzZV9zcGVlZCA+IDUxMCkKKwkJcHVsc2Vfc3BlZWQgPSA1MTA7CisJaWYgKHB1bHNlX3RhYmxlID4gMikKKwkJcHVsc2VfdGFibGUgPSAyOworCisJcHVsc2VfYXNsZWVwID0gISFwdWxzZV9hc2xlZXA7CisJcHVsc2VfYXdha2UgPSAhIXB1bHNlX2F3YWtlOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG0tPmxvY2ssIGZsYWdzKTsKKworCS8qIG1hcmsgc3RhdGUgdXBkYXRlcyB3aGljaCBhcmUgcmVxdWlyZWQgKi8KKwlpZiAoc3RhdGljX2JyaWdodG5lc3MgIT0gcG0tPnN0YXRpY19icmlnaHRuZXNzKXsKKwkJcG0tPnN0YXRpY19icmlnaHRuZXNzID0gc3RhdGljX2JyaWdodG5lc3M7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gVVBEQVRFX1NUQVRJQ19CUklHSFRORVNTOwkJCisJfQorCWlmIChwdWxzZV9hc2xlZXAgIT0gcG0tPnB1bHNlX2FzbGVlcCl7CisJCXBtLT5wdWxzZV9hc2xlZXAgPSBwdWxzZV9hc2xlZXA7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gKFVQREFURV9QVUxTRV9BU0xFRVAgfCBVUERBVEVfU1RBVElDX0JSSUdIVE5FU1MpOworCX0KKwlpZiAocHVsc2VfYXdha2UgIT0gcG0tPnB1bHNlX2F3YWtlKXsKKwkJcG0tPnB1bHNlX2F3YWtlID0gcHVsc2VfYXdha2U7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gKFVQREFURV9QVUxTRV9BV0FLRSB8IFVQREFURV9TVEFUSUNfQlJJR0hUTkVTUyk7CisJfQorCWlmIChwdWxzZV9zcGVlZCAhPSBwbS0+cHVsc2Vfc3BlZWQgfHwgcHVsc2VfdGFibGUgIT0gcG0tPnB1bHNlX3RhYmxlKXsKKwkJcG0tPnB1bHNlX3NwZWVkID0gcHVsc2Vfc3BlZWQ7CisJCXBtLT5wdWxzZV90YWJsZSA9IHB1bHNlX3RhYmxlOworCQlwbS0+cmVxdWlyZXNfdXBkYXRlIHw9IFVQREFURV9QVUxTRV9NT0RFOworCX0KKworCXBvd2VybWF0ZV9zeW5jX3N0YXRlKHBtKTsKKyAgIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIENhbGxiYWNrIGZyb20gdGhlIElucHV0IGxheWVyIHdoZW4gYW4gZXZlbnQgYXJyaXZlcyBmcm9tIHVzZXJzcGFjZSB0byBjb25maWd1cmUgdGhlIExFRCAqLworc3RhdGljIGludCBwb3dlcm1hdGVfaW5wdXRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCBfdmFsdWUpCit7CisJdW5zaWduZWQgaW50IGNvbW1hbmQgPSAodW5zaWduZWQgaW50KV92YWx1ZTsKKwlzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSAqcG0gPSBkZXYtPnByaXZhdGU7CisKKwlpZiAodHlwZSA9PSBFVl9NU0MgJiYgY29kZSA9PSBNU0NfUFVMU0VMRUQpeworCQkvKiAgCisJCSAgICBiaXRzICAwLSA3OiA4IGJpdHM6IExFRCBicmlnaHRuZXNzCisJCSAgICBiaXRzICA4LTE2OiA5IGJpdHM6IHB1bHNpbmcgc3BlZWQgbW9kaWZpZXIgKDAgLi4uIDUxMCk7IDAtMjU0ID0gc2xvd2VyLCAyNTUgPSBzdGFuZGFyZCwgMjU2LTUxMCA9IGZhc3Rlci4KKwkJICAgIGJpdHMgMTctMTg6IDIgYml0czogcHVsc2UgdGFibGUgKDAsIDEsIDIgdmFsaWQpCisJCSAgICBiaXQgICAgIDE5OiAxIGJpdCA6IHB1bHNlIHdoaWxzdCBhc2xlZXA/CisJCSAgICBiaXQgICAgIDIwOiAxIGJpdCA6IHB1bHNlIGNvbnN0YW50bHk/CisJCSovICAKKwkJaW50IHN0YXRpY19icmlnaHRuZXNzID0gY29tbWFuZCAmIDB4RkY7ICAgLy8gYml0cyAwLTcKKwkJaW50IHB1bHNlX3NwZWVkID0gKGNvbW1hbmQgPj4gOCkgJiAweDFGRjsgLy8gYml0cyA4LTE2CisJCWludCBwdWxzZV90YWJsZSA9IChjb21tYW5kID4+IDE3KSAmIDB4MzsgIC8vIGJpdHMgMTctMTgKKwkJaW50IHB1bHNlX2FzbGVlcCA9IChjb21tYW5kID4+IDE5KSAmIDB4MTsgLy8gYml0IDE5CisJCWludCBwdWxzZV9hd2FrZSAgPSAoY29tbWFuZCA+PiAyMCkgJiAweDE7IC8vIGJpdCAyMAorICAKKwkJcG93ZXJtYXRlX3B1bHNlX2xlZChwbSwgc3RhdGljX2JyaWdodG5lc3MsIHB1bHNlX3NwZWVkLCBwdWxzZV90YWJsZSwgcHVsc2VfYXNsZWVwLCBwdWxzZV9hd2FrZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG93ZXJtYXRlX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSkKK3sKKwlwbS0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgUE9XRVJNQVRFX1BBWUxPQURfU0laRV9NQVgsCisJCQkJICAgIFNMQUJfQVRPTUlDLCAmcG0tPmRhdGFfZG1hKTsKKwlpZiAoIXBtLT5kYXRhKQorCQlyZXR1cm4gLTE7CisJcG0tPmNvbmZpZ2NyID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBzaXplb2YoKihwbS0+Y29uZmlnY3IpKSwKKwkJCQkJU0xBQl9BVE9NSUMsICZwbS0+Y29uZmlnY3JfZG1hKTsKKwlpZiAoIXBtLT5jb25maWdjcikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VybWF0ZV9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSkKK3sKKwlpZiAocG0tPmRhdGEpCisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCwKKwkJCQlwbS0+ZGF0YSwgcG0tPmRhdGFfZG1hKTsKKwlpZiAocG0tPmNvbmZpZ2NyKQorCQl1c2JfYnVmZmVyX2ZyZWUodWRldiwgc2l6ZW9mKCoocG0tPmNvbmZpZ2NyKSksCisJCQkJcG0tPmNvbmZpZ2NyLCBwbS0+Y29uZmlnY3JfZG1hKTsKK30KKworLyogQ2FsbGVkIHdoZW5ldmVyIGEgVVNCIGRldmljZSBtYXRjaGluZyBvbmUgaW4gb3VyIHN1cHBvcnRlZCBkZXZpY2VzIHRhYmxlIGlzIGNvbm5lY3RlZCAqLworc3RhdGljIGludCBwb3dlcm1hdGVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbTsKKwlpbnQgcGlwZSwgbWF4cDsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpCisJCXJldHVybiAtRUlPOworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpCisJCXJldHVybiAtRUlPOworCisJdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJMHgwYSwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkwLCBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgTlVMTCwgMCwKKwkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJaWYgKCEocG0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocG0sIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSkpOworCXBtLT51ZGV2ID0gdWRldjsKKworCWlmIChwb3dlcm1hdGVfYWxsb2NfYnVmZmVycyh1ZGV2LCBwbSkpIHsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyh1ZGV2LCBwbSk7CisJCWtmcmVlKHBtKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG0tPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbS0+aXJxKSB7CisJCXBvd2VybWF0ZV9mcmVlX2J1ZmZlcnModWRldiwgcG0pOworCQlrZnJlZShwbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBtLT5jb25maWcgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcG0tPmNvbmZpZykgeworCQl1c2JfZnJlZV91cmIocG0tPmlycSk7CisJCXBvd2VybWF0ZV9mcmVlX2J1ZmZlcnModWRldiwgcG0pOworCQlrZnJlZShwbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZwbS0+bG9jayk7CisJaW5pdF9pbnB1dF9kZXYoJnBtLT5pbnB1dCk7CisKKwkvKiBnZXQgYSBoYW5kbGUgdG8gdGhlIGludGVycnVwdCBkYXRhIHBpcGUgKi8KKwlwaXBlID0gdXNiX3JjdmludHBpcGUodWRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCWlmKG1heHAgPCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01JTiB8fCBtYXhwID4gUE9XRVJNQVRFX1BBWUxPQURfU0laRV9NQVgpeworCQlwcmludGsoInBvd2VybWF0ZTogRXhwZWN0ZWQgcGF5bG9hZCBvZiAlZC0tJWQgYnl0ZXMsIGZvdW5kICVkIGJ5dGVzIVxuIiwKKwkJCVBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUlOLCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCwgbWF4cCk7CisJCW1heHAgPSBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWDsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKHBtLT5pcnEsIHVkZXYsIHBpcGUsIHBtLT5kYXRhLAorCQkJIG1heHAsIHBvd2VybWF0ZV9pcnEsCisJCQkgcG0sIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCXBtLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHBtLT5kYXRhX2RtYTsKKwlwbS0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIHJlZ2lzdGVyIG91ciBpbnRlcnJ1cHQgVVJCIHdpdGggdGhlIFVTQiBzeXN0ZW0gKi8KKwlpZiAodXNiX3N1Ym1pdF91cmIocG0tPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyh1ZGV2LCBwbSk7CisJCWtmcmVlKHBtKTsKKwkJcmV0dXJuIC1FSU87IC8qIGZhaWx1cmUgKi8KKwl9CisKKwlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkgeworCWNhc2UgUE9XRVJNQVRFX1BST0RVQ1RfTkVXOiBwbS0+aW5wdXQubmFtZSA9IHBtX25hbWVfcG93ZXJtYXRlOyBicmVhazsKKwljYXNlIFBPV0VSTUFURV9QUk9EVUNUX09MRDogcG0tPmlucHV0Lm5hbWUgPSBwbV9uYW1lX3NvdW5ka25vYjsgYnJlYWs7CisJZGVmYXVsdDogCisJCXBtLT5pbnB1dC5uYW1lID0gcG1fbmFtZV9zb3VuZGtub2I7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBvd2VybWF0ZTogdW5rbm93biBwcm9kdWN0IGlkICUwNHhcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCX0KKworCXBtLT5pbnB1dC5wcml2YXRlID0gcG07CisJcG0tPmlucHV0LmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKSB8IEJJVChFVl9NU0MpOworCXBtLT5pbnB1dC5rZXliaXRbTE9ORyhCVE5fMCldID0gQklUKEJUTl8wKTsKKwlwbS0+aW5wdXQucmVsYml0W0xPTkcoUkVMX0RJQUwpXSA9IEJJVChSRUxfRElBTCk7CisJcG0tPmlucHV0Lm1zY2JpdFtMT05HKE1TQ19QVUxTRUxFRCldID0gQklUKE1TQ19QVUxTRUxFRCk7CisJcG0tPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCXBtLT5pbnB1dC5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwbS0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlwbS0+aW5wdXQuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwlwbS0+aW5wdXQuZXZlbnQgPSBwb3dlcm1hdGVfaW5wdXRfZXZlbnQ7CisJcG0tPmlucHV0LmRldiA9ICZpbnRmLT5kZXY7CisJcG0tPmlucHV0LnBoeXMgPSBwbS0+cGh5czsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmcG0tPmlucHV0KTsKKworCXVzYl9tYWtlX3BhdGgodWRldiwgcGF0aCwgNjQpOworCXNucHJpbnRmKHBtLT5waHlzLCA2NCwgIiVzL2lucHV0MCIsIHBhdGgpOworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgcG0tPmlucHV0Lm5hbWUsIHBtLT5pbnB1dC5waHlzKTsKKwkKKwkvKiBmb3JjZSBhbiB1cGRhdGUgb2YgZXZlcnl0aGluZyAqLworCXBtLT5yZXF1aXJlc191cGRhdGUgPSBVUERBVEVfUFVMU0VfQVNMRUVQIHwgVVBEQVRFX1BVTFNFX0FXQUtFIHwgVVBEQVRFX1BVTFNFX01PREUgfCBVUERBVEVfU1RBVElDX0JSSUdIVE5FU1M7CisJcG93ZXJtYXRlX3B1bHNlX2xlZChwbSwgMHg4MCwgMjU1LCAwLCAxLCAwKTsgLy8gc2V0IGRlZmF1bHQgcHVsc2UgcGFyYW1ldGVycworICAKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHBtKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBVU0IgZGV2aWNlIHdlJ3ZlIGFjY2VwdGVkIG93bmVyc2hpcCBvZiBpcyByZW1vdmVkICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcG93ZXJtYXRlX2RldmljZSAqcG0gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKHBtKSB7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgPSAwOworCQl1c2Jfa2lsbF91cmIocG0tPmlycSk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZwbS0+aW5wdXQpOworCQl1c2JfZnJlZV91cmIocG0tPmlycSk7CisJCXVzYl9mcmVlX3VyYihwbS0+Y29uZmlnKTsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBwbSk7CisKKwkJa2ZyZWUocG0pOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBvd2VybWF0ZV9kZXZpY2VzIFtdID0geworCXsgVVNCX0RFVklDRShQT1dFUk1BVEVfVkVORE9SLCBQT1dFUk1BVEVfUFJPRFVDVF9ORVcpIH0sCisJeyBVU0JfREVWSUNFKFBPV0VSTUFURV9WRU5ET1IsIFBPV0VSTUFURV9QUk9EVUNUX09MRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQ09OVE9VUl9WRU5ET1IsIENPTlRPVVJfSk9HKSB9LAorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBwb3dlcm1hdGVfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwb3dlcm1hdGVfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorICAgICAgICAubmFtZSA9ICAgICAgICAgInBvd2VybWF0ZSIsCisgICAgICAgIC5wcm9iZSA9ICAgICAgICBwb3dlcm1hdGVfcHJvYmUsCisgICAgICAgIC5kaXNjb25uZWN0ID0gICBwb3dlcm1hdGVfZGlzY29ubmVjdCwKKyAgICAgICAgLmlkX3RhYmxlID0gICAgIHBvd2VybWF0ZV9kZXZpY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG93ZXJtYXRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwb3dlcm1hdGVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBvd2VybWF0ZV9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnBvd2VybWF0ZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwb3dlcm1hdGVfaW5pdCk7Cittb2R1bGVfZXhpdChwb3dlcm1hdGVfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoICJXaWxsaWFtIFIgU293ZXJidXR0cyIgKTsKK01PRFVMRV9ERVNDUklQVElPTiggIkdyaWZmaW4gVGVjaG5vbG9neSwgSW5jIFBvd2VyTWF0ZSBkcml2ZXIiICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzFmMWJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdG91Y2hraXR1c2IuYyAgLS0gIERyaXZlciBmb3IgZUdhbGF4IFRvdWNoS2l0IFVTQiBUb3VjaHNjcmVlbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRGFuaWVsIFJpdHoKKyAqIENvcHlyaWdodCAoQykgYnkgVG9kZCBFLiBKb2huc29uIChtdG91Y2h1c2IuYykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBCYXNlZCB1cG9uIG10b3VjaHVzYi5jCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2lmICFkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19VU0JfREVCVUcpCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisjZGVmaW5lIFRPVUNIS0lUX01JTl9YQwkJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9NQVhfWEMJCQkweDA3ZmYKKyNkZWZpbmUgVE9VQ0hLSVRfWENfRlVaWgkJMHgwCisjZGVmaW5lIFRPVUNIS0lUX1hDX0ZMQVQJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9NSU5fWUMJCQkweDAKKyNkZWZpbmUgVE9VQ0hLSVRfTUFYX1lDCQkJMHgwN2ZmCisjZGVmaW5lIFRPVUNIS0lUX1lDX0ZVWloJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9ZQ19GTEFUCQkweDAKKyNkZWZpbmUgVE9VQ0hLSVRfUkVQT1JUX0RBVEFfU0laRQk4CisKKyNkZWZpbmUgVE9VQ0hLSVRfRE9XTgkJCTB4MDEKKyNkZWZpbmUgVE9VQ0hLSVRfUE9JTlRfVE9VQ0gJCTB4ODEKKyNkZWZpbmUgVE9VQ0hLSVRfUE9JTlRfTk9UT1VDSAkJMHg4MAorCisjZGVmaW5lIFRPVUNIS0lUX0dFVF9UT1VDSEVEKGRhdCkJKCgoKGRhdClbMF0pICYgVE9VQ0hLSVRfRE9XTikgPyAxIDogMCkKKyNkZWZpbmUgVE9VQ0hLSVRfR0VUX1goZGF0KQkJKCgoZGF0KVszXSA8PCA3KSB8IChkYXQpWzRdKQorI2RlZmluZSBUT1VDSEtJVF9HRVRfWShkYXQpCQkoKChkYXQpWzFdIDw8IDcpIHwgKGRhdClbMl0pCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCQkidjAuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJCSJEYW5pZWwgUml0eiA8ZGFuaWVsLnJpdHpAZ214LmNoPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCQkiZUdhbGF4IFRvdWNoS2l0IFVTQiBISUQgVG91Y2hzY3JlZW4gRHJpdmVyIgorCitzdGF0aWMgaW50IHN3YXBfeHk7Cittb2R1bGVfcGFyYW0oc3dhcF94eSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN3YXBfeHksICJJZiBzZXQgWCBhbmQgWSBheGVzIGFyZSBzd2FwcGVkLiIpOworCitzdHJ1Y3QgdG91Y2hraXRfdXNiIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJc3RydWN0IHVyYiAqaXJxOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisJaW50IG9wZW47CisJY2hhciBuYW1lWzEyOF07CisJY2hhciBwaHlzWzY0XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0b3VjaGtpdF9kZXZpY2VzW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgzODIzLCAweDAwMDEpfSwKKwl7VVNCX0RFVklDRSgweDBlZWYsIDB4MDAwMSl9LAorCXt9Cit9OworCitzdGF0aWMgdm9pZCB0b3VjaGtpdF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCWludCB4LCB5OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FVElNRURPVVQ6CisJCS8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KKwkJZGJnKCIlcyAtIHVyYiB0aW1lZCBvdXQgLSB3YXMgdGhlIGRldmljZSB1bnBsdWdnZWQ/IiwKKwkJICAgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChzd2FwX3h5KSB7CisJCXkgPSBUT1VDSEtJVF9HRVRfWCh0b3VjaGtpdC0+ZGF0YSk7CisJCXggPSBUT1VDSEtJVF9HRVRfWSh0b3VjaGtpdC0+ZGF0YSk7CisJfSBlbHNlIHsKKwkJeCA9IFRPVUNIS0lUX0dFVF9YKHRvdWNoa2l0LT5kYXRhKTsKKwkJeSA9IFRPVUNIS0lUX0dFVF9ZKHRvdWNoa2l0LT5kYXRhKTsKKwl9CisKKwlpbnB1dF9yZWdzKCZ0b3VjaGtpdC0+aW5wdXQsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoJnRvdWNoa2l0LT5pbnB1dCwgQlROX1RPVUNILAorCSAgICAgICAgICAgICAgICAgVE9VQ0hLSVRfR0VUX1RPVUNIRUQodG91Y2hraXQtPmRhdGEpKTsKKwlpbnB1dF9yZXBvcnRfYWJzKCZ0b3VjaGtpdC0+aW5wdXQsIEFCU19YLCB4KTsKKwlpbnB1dF9yZXBvcnRfYWJzKCZ0b3VjaGtpdC0+aW5wdXQsIEFCU19ZLCB5KTsKKwlpbnB1dF9zeW5jKCZ0b3VjaGtpdC0+aW5wdXQpOworCitleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgaW50IHRvdWNoa2l0X29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IHRvdWNoa2l0X3VzYiAqdG91Y2hraXQgPSBpbnB1dC0+cHJpdmF0ZTsKKworCWlmICh0b3VjaGtpdC0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCXRvdWNoa2l0LT5pcnEtPmRldiA9IHRvdWNoa2l0LT51ZGV2OworCisJaWYgKHVzYl9zdWJtaXRfdXJiKHRvdWNoa2l0LT5pcnEsIEdGUF9BVE9NSUMpKSB7CisJCXRvdWNoa2l0LT5vcGVuLS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0b3VjaGtpdF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IGlucHV0LT5wcml2YXRlOworCisJaWYgKCEtLXRvdWNoa2l0LT5vcGVuKQorCQl1c2Jfa2lsbF91cmIodG91Y2hraXQtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgdG91Y2hraXRfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkgIHN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0KQoreworCXRvdWNoa2l0LT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0FUT01JQywgJnRvdWNoa2l0LT5kYXRhX2RtYSk7CisKKwlpZiAoIXRvdWNoa2l0LT5kYXRhKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG91Y2hraXRfZnJlZV9idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgc3RydWN0IHRvdWNoa2l0X3VzYiAqdG91Y2hraXQpCit7CisJaWYgKHRvdWNoa2l0LT5kYXRhKQorCQl1c2JfYnVmZmVyX2ZyZWUodWRldiwgVE9VQ0hLSVRfUkVQT1JUX0RBVEFfU0laRSwKKwkJICAgICAgICAgICAgICAgIHRvdWNoa2l0LT5kYXRhLCB0b3VjaGtpdC0+ZGF0YV9kbWEpOworfQorCitzdGF0aWMgaW50IHRvdWNoa2l0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJY2hhciBwYXRoWzY0XTsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKKworCXRvdWNoa2l0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRvdWNoa2l0X3VzYiksIEdGUF9LRVJORUwpOworCWlmICghdG91Y2hraXQpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KHRvdWNoa2l0LCAwLCBzaXplb2Yoc3RydWN0IHRvdWNoa2l0X3VzYikpOworCXRvdWNoa2l0LT51ZGV2ID0gdWRldjsKKworCWlmICh0b3VjaGtpdF9hbGxvY19idWZmZXJzKHVkZXYsIHRvdWNoa2l0KSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXRvdWNoa2l0LT5pbnB1dC5wcml2YXRlID0gdG91Y2hraXQ7CisJdG91Y2hraXQtPmlucHV0Lm9wZW4gPSB0b3VjaGtpdF9vcGVuOworCXRvdWNoa2l0LT5pbnB1dC5jbG9zZSA9IHRvdWNoa2l0X2Nsb3NlOworCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCA2NCk7CisJc3ByaW50Zih0b3VjaGtpdC0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJdG91Y2hraXQtPmlucHV0Lm5hbWUgPSB0b3VjaGtpdC0+bmFtZTsKKwl0b3VjaGtpdC0+aW5wdXQucGh5cyA9IHRvdWNoa2l0LT5waHlzOworCXRvdWNoa2l0LT5pbnB1dC5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwl0b3VjaGtpdC0+aW5wdXQuaWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJdG91Y2hraXQtPmlucHV0LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJdG91Y2hraXQtPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJdG91Y2hraXQtPmlucHV0LmRldiA9ICZpbnRmLT5kZXY7CisKKwl0b3VjaGtpdC0+aW5wdXQuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCXRvdWNoa2l0LT5pbnB1dC5hYnNiaXRbMF0gPSBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKTsKKwl0b3VjaGtpdC0+aW5wdXQua2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKworCS8qIFVzZWQgdG8gU2NhbGUgQ29tcGVuc2F0ZWQgRGF0YSAqLworCXRvdWNoa2l0LT5pbnB1dC5hYnNtaW5bQUJTX1hdID0gVE9VQ0hLSVRfTUlOX1hDOworCXRvdWNoa2l0LT5pbnB1dC5hYnNtYXhbQUJTX1hdID0gVE9VQ0hLSVRfTUFYX1hDOworCXRvdWNoa2l0LT5pbnB1dC5hYnNmdXp6W0FCU19YXSA9IFRPVUNIS0lUX1hDX0ZVWlo7CisJdG91Y2hraXQtPmlucHV0LmFic2ZsYXRbQUJTX1hdID0gVE9VQ0hLSVRfWENfRkxBVDsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzbWluW0FCU19ZXSA9IFRPVUNIS0lUX01JTl9ZQzsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzbWF4W0FCU19ZXSA9IFRPVUNIS0lUX01BWF9ZQzsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzZnV6eltBQlNfWV0gPSBUT1VDSEtJVF9ZQ19GVVpaOworCXRvdWNoa2l0LT5pbnB1dC5hYnNmbGF0W0FCU19ZXSA9IFRPVUNIS0lUX1lDX0ZMQVQ7CisKKwlpZiAodWRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJjYXQodG91Y2hraXQtPm5hbWUsIHVkZXYtPm1hbnVmYWN0dXJlcik7CisJaWYgKHVkZXYtPnByb2R1Y3QpCisJCXNwcmludGYodG91Y2hraXQtPm5hbWUsICIlcyAlcyIsIHRvdWNoa2l0LT5uYW1lLCB1ZGV2LT5wcm9kdWN0KTsKKworCWlmICghc3RybGVuKHRvdWNoa2l0LT5uYW1lKSkKKwkJc3ByaW50Zih0b3VjaGtpdC0+bmFtZSwgIlVTQiBUb3VjaHNjcmVlbiAlMDR4OiUwNHgiLAorCQkgICAgICAgIHRvdWNoa2l0LT5pbnB1dC5pZC52ZW5kb3IsIHRvdWNoa2l0LT5pbnB1dC5pZC5wcm9kdWN0KTsKKworCXRvdWNoa2l0LT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdG91Y2hraXQtPmlycSkgeworCQlkYmcoIiVzIC0gdXNiX2FsbG9jX3VyYiBmYWlsZWQ6IHRvdWNoa2l0LT5pcnEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2J1ZmZlcnM7CisJfQorCisJdXNiX2ZpbGxfaW50X3VyYih0b3VjaGtpdC0+aXJxLCB0b3VjaGtpdC0+dWRldiwKKwkgICAgICAgICAgICAgICAgIHVzYl9yY3ZpbnRwaXBlKHRvdWNoa2l0LT51ZGV2LCAweDgxKSwKKwkgICAgICAgICAgICAgICAgIHRvdWNoa2l0LT5kYXRhLCBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFLAorCSAgICAgICAgICAgICAgICAgdG91Y2hraXRfaXJxLCB0b3VjaGtpdCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJnRvdWNoa2l0LT5pbnB1dCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXNcbiIsIHRvdWNoa2l0LT5uYW1lLCBwYXRoKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHRvdWNoa2l0KTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9idWZmZXJzOgorCXRvdWNoa2l0X2ZyZWVfYnVmZmVycyh1ZGV2LCB0b3VjaGtpdCk7CitvdXRfZnJlZToKKwlrZnJlZSh0b3VjaGtpdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdG91Y2hraXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghdG91Y2hraXQpCisJCXJldHVybjsKKworCWRiZygiJXMgLSB0b3VjaGtpdCBpcyBpbml0aWFsaXplZCwgY2xlYW5pbmcgdXAiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJnRvdWNoa2l0LT5pbnB1dCk7CisJdXNiX2tpbGxfdXJiKHRvdWNoa2l0LT5pcnEpOworCXVzYl9mcmVlX3VyYih0b3VjaGtpdC0+aXJxKTsKKwl0b3VjaGtpdF9mcmVlX2J1ZmZlcnMoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgdG91Y2hraXQpOworCWtmcmVlKHRvdWNoa2l0KTsKK30KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHRvdWNoa2l0X2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdG91Y2hraXRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAidG91Y2hraXR1c2IiLAorCS5wcm9iZQkJPSB0b3VjaGtpdF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHRvdWNoa2l0X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gdG91Y2hraXRfZGV2aWNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvdWNoa2l0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ0b3VjaGtpdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG91Y2hraXRfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ0b3VjaGtpdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0b3VjaGtpdF9pbml0KTsKK21vZHVsZV9leGl0KHRvdWNoa2l0X2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jIGIvZHJpdmVycy91c2IvaW5wdXQvdXNia2JkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MTRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYmtiZC5jCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogJElkOiB1c2JrYmQuYyx2IDEuMjcgMjAwMS8xMi8yNyAxMDozNzo0MSB2b2p0ZWNoIEV4cCAkCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIFZvanRlY2ggUGF2bGlrCisgKgorICogIFVTQiBISURCUCBLZXlib2FyZCBzdXBwb3J0CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAdWN3LmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBISUQgQm9vdCBQcm90b2NvbCBrZXlib2FyZCBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciB1c2Jfa2JkX2tleWNvZGVbMjU2XSA9IHsKKwkgIDAsICAwLCAgMCwgIDAsIDMwLCA0OCwgNDYsIDMyLCAxOCwgMzMsIDM0LCAzNSwgMjMsIDM2LCAzNywgMzgsCisJIDUwLCA0OSwgMjQsIDI1LCAxNiwgMTksIDMxLCAyMCwgMjIsIDQ3LCAxNywgNDUsIDIxLCA0NCwgIDIsICAzLAorCSAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDI4LCAgMSwgMTQsIDE1LCA1NywgMTIsIDEzLCAyNiwKKwkgMjcsIDQzLCA0MywgMzksIDQwLCA0MSwgNTEsIDUyLCA1MywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsCisJIDY1LCA2NiwgNjcsIDY4LCA4NywgODgsIDk5LCA3MCwxMTksMTEwLDEwMiwxMDQsMTExLDEwNywxMDksMTA2LAorCTEwNSwxMDgsMTAzLCA2OSwgOTgsIDU1LCA3NCwgNzgsIDk2LCA3OSwgODAsIDgxLCA3NSwgNzYsIDc3LCA3MSwKKwkgNzIsIDczLCA4MiwgODMsIDg2LDEyNywxMTYsMTE3LDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsCisJMTkxLDE5MiwxOTMsMTk0LDEzNCwxMzgsMTMwLDEzMiwxMjgsMTI5LDEzMSwxMzcsMTMzLDEzNSwxMzYsMTEzLAorCTExNSwxMTQsICAwLCAgMCwgIDAsMTIxLCAgMCwgODksIDkzLDEyNCwgOTIsIDk0LCA5NSwgIDAsICAwLCAgMCwKKwkxMjIsMTIzLCA5MCwgOTEsIDg1LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKwkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCSAyOSwgNDIsIDU2LDEyNSwgOTcsIDU0LDEwMCwxMjYsMTY0LDE2NiwxNjUsMTYzLDE2MSwxMTUsMTE0LDExMywKKwkxNTAsMTU4LDE1OSwxMjgsMTM2LDE3NywxNzgsMTc2LDE0MiwxNTIsMTczLDE0MAorfTsKKworc3RydWN0IHVzYl9rYmQgeworCXN0cnVjdCBpbnB1dF9kZXYgZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJdW5zaWduZWQgY2hhciBvbGRbOF07CisJc3RydWN0IHVyYiAqaXJxLCAqbGVkOworCXVuc2lnbmVkIGNoYXIgbmV3bGVkczsKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworCWludCBvcGVuOworCisJdW5zaWduZWQgY2hhciAqbmV3OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNyOworCXVuc2lnbmVkIGNoYXIgKmxlZHM7CisJZG1hX2FkZHJfdCBjcl9kbWE7CisJZG1hX2FkZHJfdCBuZXdfZG1hOworCWRtYV9hZGRyX3QgbGVkc19kbWE7Cit9OworCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfa2JkICprYmQgPSB1cmItPmNvbnRleHQ7CisJaW50IGk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWlucHV0X3JlZ3MoJmtiZC0+ZGV2LCByZWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWlucHV0X3JlcG9ydF9rZXkoJmtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVbaSArIDIyNF0sIChrYmQtPm5ld1swXSA+PiBpKSAmIDEpOworCisJZm9yIChpID0gMjsgaSA8IDg7IGkrKykgeworCisJCWlmIChrYmQtPm9sZFtpXSA+IDMgJiYgbWVtc2NhbihrYmQtPm5ldyArIDIsIGtiZC0+b2xkW2ldLCA2KSA9PSBrYmQtPm5ldyArIDgpIHsKKwkJCWlmICh1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dKQorCQkJCWlucHV0X3JlcG9ydF9rZXkoJmtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dLCAwKTsKKwkJCWVsc2UKKwkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLCBrYmQtPm9sZFtpXSk7CisJCX0KKworCQlpZiAoa2JkLT5uZXdbaV0gPiAzICYmIG1lbXNjYW4oa2JkLT5vbGQgKyAyLCBrYmQtPm5ld1tpXSwgNikgPT0ga2JkLT5vbGQgKyA4KSB7CisJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSkKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KCZrYmQtPmRldiwgdXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSwgMSk7CisJCQllbHNlCisJCQkJaW5mbygiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcHJlc3NlZC4iLCBrYmQtPm5ld1tpXSk7CisJCX0KKwl9CisKKwlpbnB1dF9zeW5jKCZrYmQtPmRldik7CisKKwltZW1jcHkoa2JkLT5vbGQsIGtiZC0+bmV3LCA4KTsKKworcmVzdWJtaXQ6CisJaSA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoaSkKKwkJZXJyICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQwLCBzdGF0dXMgJWQiLAorCQkJCWtiZC0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCWtiZC0+dXNiZGV2LT5kZXZwYXRoLCBpKTsKK30KKworaW50IHVzYl9rYmRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gZGV2LT5wcml2YXRlOworCisJaWYgKHR5cGUgIT0gRVZfTEVEKQorCQlyZXR1cm4gLTE7CisKKworCWtiZC0+bmV3bGVkcyA9ICghIXRlc3RfYml0KExFRF9LQU5BLCAgICBkZXYtPmxlZCkgPDwgMykgfCAoISF0ZXN0X2JpdChMRURfQ09NUE9TRSwgZGV2LT5sZWQpIDw8IDMpIHwKKwkJICAgICAgICghIXRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPDwgMikgfCAoISF0ZXN0X2JpdChMRURfQ0FQU0wsICAgZGV2LT5sZWQpIDw8IDEpIHwKKwkJICAgICAgICghIXRlc3RfYml0KExFRF9OVU1MLCAgICBkZXYtPmxlZCkpOworCisJaWYgKGtiZC0+bGVkLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm4gMDsKKworCWlmICgqKGtiZC0+bGVkcykgPT0ga2JkLT5uZXdsZWRzKQorCQlyZXR1cm4gMDsKKworCSooa2JkLT5sZWRzKSA9IGtiZC0+bmV3bGVkczsKKwlrYmQtPmxlZC0+ZGV2ID0ga2JkLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGtiZC0+bGVkLCBHRlBfQVRPTUlDKSkKKwkJZXJyKCJ1c2Jfc3VibWl0X3VyYihsZWRzKSBmYWlsZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2xlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfa2JkICprYmQgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCXdhcm4oImxlZCB1cmIgc3RhdHVzICVkIHJlY2VpdmVkIiwgdXJiLT5zdGF0dXMpOworCQorCWlmICgqKGtiZC0+bGVkcykgPT0ga2JkLT5uZXdsZWRzKQorCQlyZXR1cm47CisKKwkqKGtiZC0+bGVkcykgPSBrYmQtPm5ld2xlZHM7CisJa2JkLT5sZWQtPmRldiA9IGtiZC0+dXNiZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihrYmQtPmxlZCwgR0ZQX0FUT01JQykpCisJCWVycigidXNiX3N1Ym1pdF91cmIobGVkcykgZmFpbGVkIik7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2tiZF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gZGV2LT5wcml2YXRlOworCisJaWYgKGtiZC0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCWtiZC0+aXJxLT5kZXYgPSBrYmQtPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoa2JkLT5pcnEsIEdGUF9LRVJORUwpKSB7CisJCWtiZC0+b3Blbi0tOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2tiZF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghLS1rYmQtPm9wZW4pCisJCXVzYl9raWxsX3VyYihrYmQtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2tiZF9hbGxvY19tZW0oc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9rYmQgKmtiZCkKK3sKKwlpZiAoIShrYmQtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoa2JkLT5sZWQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGtiZC0+bmV3ID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDgsIFNMQUJfQVRPTUlDLCAma2JkLT5uZXdfZG1hKSkpCisJCXJldHVybiAtMTsKKwlpZiAoIShrYmQtPmNyID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgU0xBQl9BVE9NSUMsICZrYmQtPmNyX2RtYSkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoa2JkLT5sZWRzID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDEsIFNMQUJfQVRPTUlDLCAma2JkLT5sZWRzX2RtYSkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2tiZF9mcmVlX21lbShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2tiZCAqa2JkKQoreworCWlmIChrYmQtPmlycSkKKwkJdXNiX2ZyZWVfdXJiKGtiZC0+aXJxKTsKKwlpZiAoa2JkLT5sZWQpCisJCXVzYl9mcmVlX3VyYihrYmQtPmxlZCk7CisJaWYgKGtiZC0+bmV3KQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCA4LCBrYmQtPm5ldywga2JkLT5uZXdfZG1hKTsKKwlpZiAoa2JkLT5jcikKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBrYmQtPmNyLCBrYmQtPmNyX2RtYSk7CisJaWYgKGtiZC0+bGVkcykKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgMSwga2JkLT5sZWRzLCBrYmQtPmxlZHNfZG1hKTsKK30KKworc3RhdGljIGludCB1c2Jfa2JkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICogZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpZmFjZSk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9rYmQgKmtiZDsKKwlpbnQgaSwgcGlwZSwgbWF4cDsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaWZhY2UtPmN1cl9hbHRzZXR0aW5nOworCisJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpCisJCXJldHVybiAtRU5PREVWOworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpCisJCXJldHVybiAtRU5PREVWOworCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaWYgKCEoa2JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9rYmQpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChrYmQsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2tiZCkpOworCisJaWYgKHVzYl9rYmRfYWxsb2NfbWVtKGRldiwga2JkKSkgeworCQl1c2Jfa2JkX2ZyZWVfbWVtKGRldiwga2JkKTsKKwkJa2ZyZWUoa2JkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2JkLT51c2JkZXYgPSBkZXY7CisKKwlrYmQtPmRldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0xFRCkgfCBCSVQoRVZfUkVQKTsKKwlrYmQtPmRldi5sZWRiaXRbMF0gPSBCSVQoTEVEX05VTUwpIHwgQklUKExFRF9DQVBTTCkgfCBCSVQoTEVEX1NDUk9MTEwpIHwgQklUKExFRF9DT01QT1NFKSB8IEJJVChMRURfS0FOQSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspCisJCXNldF9iaXQodXNiX2tiZF9rZXljb2RlW2ldLCBrYmQtPmRldi5rZXliaXQpOworCWNsZWFyX2JpdCgwLCBrYmQtPmRldi5rZXliaXQpOworCQorCWtiZC0+ZGV2LnByaXZhdGUgPSBrYmQ7CisJa2JkLT5kZXYuZXZlbnQgPSB1c2Jfa2JkX2V2ZW50OworCWtiZC0+ZGV2Lm9wZW4gPSB1c2Jfa2JkX29wZW47CisJa2JkLT5kZXYuY2xvc2UgPSB1c2Jfa2JkX2Nsb3NlOworCisJdXNiX2ZpbGxfaW50X3VyYihrYmQtPmlycSwgZGV2LCBwaXBlLAorCQkJIGtiZC0+bmV3LCAobWF4cCA+IDggPyA4IDogbWF4cCksCisJCQkgdXNiX2tiZF9pcnEsIGtiZCwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJa2JkLT5pcnEtPnRyYW5zZmVyX2RtYSA9IGtiZC0+bmV3X2RtYTsKKwlrYmQtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlrYmQtPmNyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJa2JkLT5jci0+YlJlcXVlc3QgPSAweDA5OworCWtiZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MjAwKTsKKwlrYmQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNihpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJa2JkLT5jci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDEpOworCisJdXNiX21ha2VfcGF0aChkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKGtiZC0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJa2JkLT5kZXYubmFtZSA9IGtiZC0+bmFtZTsKKwlrYmQtPmRldi5waHlzID0ga2JkLT5waHlzOwkKKwlrYmQtPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlrYmQtPmRldi5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWtiZC0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlrYmQtPmRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJa2JkLT5kZXYuZGV2ID0gJmlmYWNlLT5kZXY7CisKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdChrYmQtPm5hbWUsIGRldi0+bWFudWZhY3R1cmVyKTsKKwlpZiAoZGV2LT5wcm9kdWN0KQorCQlzcHJpbnRmKGtiZC0+bmFtZSwgIiVzICVzIiwga2JkLT5uYW1lLCBkZXYtPnByb2R1Y3QpOworCisJaWYgKCFzdHJsZW4oa2JkLT5uYW1lKSkKKwkJc3ByaW50ZihrYmQtPm5hbWUsICJVU0IgSElEQlAgS2V5Ym9hcmQgJTA0eDolMDR4IiwKKwkJCWtiZC0+ZGV2LmlkLnZlbmRvciwga2JkLT5kZXYuaWQucHJvZHVjdCk7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihrYmQtPmxlZCwgZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgKHZvaWQgKikga2JkLT5jciwga2JkLT5sZWRzLCAxLAorCQkJICAgICB1c2Jfa2JkX2xlZCwga2JkKTsKKwlrYmQtPmxlZC0+c2V0dXBfZG1hID0ga2JkLT5jcl9kbWE7CisJa2JkLT5sZWQtPnRyYW5zZmVyX2RtYSA9IGtiZC0+bGVkc19kbWE7CisJa2JkLT5sZWQtPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUAorCQkJCXwgVVJCX05PX1NFVFVQX0RNQV9NQVApOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZrYmQtPmRldik7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXNcbiIsIGtiZC0+bmFtZSwgcGF0aCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBrYmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKGtiZCkgeworCQl1c2Jfa2lsbF91cmIoa2JkLT5pcnEpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgma2JkLT5kZXYpOworCQl1c2Jfa2JkX2ZyZWVfbWVtKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGtiZCk7CisJCWtmcmVlKGtiZCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2tiZF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygzLCAxLCAxKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9rYmRfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2tiZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYmtiZCIsCisJLnByb2JlID0JdXNiX2tiZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9rYmRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl1c2Jfa2JkX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX2tiZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2tiZF9kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfa2JkX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX2tiZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2Jfa2JkX2luaXQpOworbW9kdWxlX2V4aXQodXNiX2tiZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMTU1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogJElkOiB1c2Jtb3VzZS5jLHYgMS4xNSAyMDAxLzEyLzI3IDEwOjM3OjQxIHZvanRlY2ggRXhwICQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgVVNCIEhJREJQIE1vdXNlIHN1cHBvcnQKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBISUQgQm9vdCBQcm90b2NvbCBtb3VzZSBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCitzdHJ1Y3QgdXNiX21vdXNlIHsKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CisJc3RydWN0IHVyYiAqaXJxOworCWludCBvcGVuOworCisJc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKK307CisKK3N0YXRpYyB2b2lkIHVzYl9tb3VzZV9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZSA9IHVyYi0+Y29udGV4dDsKKwlzaWduZWQgY2hhciAqZGF0YSA9IG1vdXNlLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZtb3VzZS0+ZGV2OworCWludCBzdGF0dXM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzBdICYgMHgwMSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbMF0gJiAweDAyKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVswXSAmIDB4MDQpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzBdICYgMHgwOCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9FWFRSQSwgIGRhdGFbMF0gJiAweDEwKTsKKworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgICAgIGRhdGFbMV0pOworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgICAgIGRhdGFbMl0pOworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIGRhdGFbM10pOworCisJaW5wdXRfc3luYyhkZXYpOworcmVzdWJtaXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgc3RhdHVzICVkIiwKKwkJCQltb3VzZS0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCW1vdXNlLT51c2JkZXYtPmRldnBhdGgsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX21vdXNlX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfbW91c2UgKm1vdXNlID0gZGV2LT5wcml2YXRlOworCisJaWYgKG1vdXNlLT5vcGVuKyspCisJCXJldHVybiAwOworCisJbW91c2UtPmlycS0+ZGV2ID0gbW91c2UtPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIobW91c2UtPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJbW91c2UtPm9wZW4tLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9tb3VzZV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9tb3VzZSAqbW91c2UgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoIS0tbW91c2UtPm9wZW4pCisJCXVzYl9raWxsX3VyYihtb3VzZS0+aXJxKTsKK30KKworc3RhdGljIGludCB1c2JfbW91c2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqIGlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICogZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZTsKKwlpbnQgcGlwZSwgbWF4cDsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkgCisJCXJldHVybiAtRU5PREVWOworCisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpIAorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSAhPSAzKSAKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisKKwlpZiAoIShtb3VzZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbW91c2UpLCBHRlBfS0VSTkVMKSkpIAorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobW91c2UsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX21vdXNlKSk7CisKKwltb3VzZS0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCA4LCBTTEFCX0FUT01JQywgJm1vdXNlLT5kYXRhX2RtYSk7CisJaWYgKCFtb3VzZS0+ZGF0YSkgeworCQlrZnJlZShtb3VzZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1vdXNlLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghbW91c2UtPmlycSkgeworCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCA4LCBtb3VzZS0+ZGF0YSwgbW91c2UtPmRhdGFfZG1hKTsKKwkJa2ZyZWUobW91c2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltb3VzZS0+dXNiZGV2ID0gZGV2OworCisJbW91c2UtPmRldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7CisJbW91c2UtPmRldi5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKwltb3VzZS0+ZGV2LnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCW1vdXNlLT5kZXYua2V5Yml0W0xPTkcoQlROX01PVVNFKV0gfD0gQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpOworCW1vdXNlLT5kZXYucmVsYml0WzBdIHw9IEJJVChSRUxfV0hFRUwpOworCisJbW91c2UtPmRldi5wcml2YXRlID0gbW91c2U7CisJbW91c2UtPmRldi5vcGVuID0gdXNiX21vdXNlX29wZW47CisJbW91c2UtPmRldi5jbG9zZSA9IHVzYl9tb3VzZV9jbG9zZTsKKworCXVzYl9tYWtlX3BhdGgoZGV2LCBwYXRoLCA2NCk7CisJc3ByaW50Zihtb3VzZS0+cGh5cywgIiVzL2lucHV0MCIsIHBhdGgpOworCisJbW91c2UtPmRldi5uYW1lID0gbW91c2UtPm5hbWU7CisJbW91c2UtPmRldi5waHlzID0gbW91c2UtPnBoeXM7CisJbW91c2UtPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwltb3VzZS0+ZGV2LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJbW91c2UtPmRldi5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJbW91c2UtPmRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJbW91c2UtPmRldi5kZXYgPSAmaW50Zi0+ZGV2OworCisJaWYgKGRldi0+bWFudWZhY3R1cmVyKQorCQlzdHJjYXQobW91c2UtPm5hbWUsIGRldi0+bWFudWZhY3R1cmVyKTsKKwlpZiAoZGV2LT5wcm9kdWN0KQorCQlzcHJpbnRmKG1vdXNlLT5uYW1lLCAiJXMgJXMiLCBtb3VzZS0+bmFtZSwgZGV2LT5wcm9kdWN0KTsKKworCWlmICghc3RybGVuKG1vdXNlLT5uYW1lKSkKKwkJc3ByaW50Zihtb3VzZS0+bmFtZSwgIlVTQiBISURCUCBNb3VzZSAlMDR4OiUwNHgiLAorCQkJbW91c2UtPmRldi5pZC52ZW5kb3IsIG1vdXNlLT5kZXYuaWQucHJvZHVjdCk7CisKKwl1c2JfZmlsbF9pbnRfdXJiKG1vdXNlLT5pcnEsIGRldiwgcGlwZSwgbW91c2UtPmRhdGEsCisJCQkgKG1heHAgPiA4ID8gOCA6IG1heHApLAorCQkJIHVzYl9tb3VzZV9pcnEsIG1vdXNlLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwltb3VzZS0+aXJxLT50cmFuc2Zlcl9kbWEgPSBtb3VzZS0+ZGF0YV9kbWE7CisJbW91c2UtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJm1vdXNlLT5kZXYpOworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgbW91c2UtPm5hbWUsIHBhdGgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtb3VzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9tb3VzZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfbW91c2UgKm1vdXNlID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAobW91c2UpIHsKKwkJdXNiX2tpbGxfdXJiKG1vdXNlLT5pcnEpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmbW91c2UtPmRldik7CisJCXVzYl9mcmVlX3VyYihtb3VzZS0+aXJxKTsKKwkJdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDgsIG1vdXNlLT5kYXRhLCBtb3VzZS0+ZGF0YV9kbWEpOworCQlrZnJlZShtb3VzZSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX21vdXNlX2lkX3RhYmxlIFtdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDMsIDEsIDIpIH0sCisgICAgeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX21vdXNlX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9tb3VzZV9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ1c2Jtb3VzZSIsCisJLnByb2JlCQk9IHVzYl9tb3VzZV9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYl9tb3VzZV9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHVzYl9tb3VzZV9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9tb3VzZV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX21vdXNlX2RyaXZlcik7CisJaWYgKHJldHZhbCA9PSAwKSAKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfbW91c2VfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfbW91c2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX21vdXNlX2luaXQpOworbW9kdWxlX2V4aXQodXNiX21vdXNlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjMDRkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKQEAgLTAsMCArMSw5NTEgQEAKKy8qCisgKiAgVVNCIFdhY29tIEdyYXBoaXJlIGFuZCBXYWNvbSBJbnR1b3MgdGFibGV0IHN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAdWN3LmN6PgorICogIENvcHlyaWdodCAoYykgMjAwMCBBbmRyZWFzIEJhY2ggQWFlbgk8YWJhY2hAc3RvZmFuZXQuZGs+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIENsaWZmb3JkIFdvbGYJCTxjbGlmZm9yZEBjbGlmZm9yZC5hdD4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU2FtIE1vc2VsCQk8c2FtLm1vc2VsQGNvbXB1dGVyLm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgSmFtZXMgRS4gQmxhaXIJCTxjb3J2dXNAZ251Lm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIEVnZ2VyCQk8ZWdnZXJAc3VzZS5kZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEgRnJlZGVyaWMgTGVwaWVkCQk8ZmxlcGllZEBtYW5kcmFrZXNvZnQuY29tPgorICogIENvcHlyaWdodCAoYykgMjAwNCBQYW5hZ2lvdGlzIElzc2FyaXMJPHBhbmFnaW90aXMuaXNzYXJpc0BtZWNoLmt1bGV1dmVuLmFjLmJlPgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFBpbmcgQ2hlbmcJCTxwaW5nY0B3YWNvbS5jb20+CisgKgorICogIENoYW5nZUxvZzoKKyAqICAgICAgdjAuMSAodnApICAtIEluaXRpYWwgcmVsZWFzZQorICogICAgICB2MC4yIChhYmEpIC0gU3VwcG9ydCBmb3IgYWxsIGJ1dHRvbnMgLyBjb21iaW5hdGlvbnMKKyAqICAgICAgdjAuMyAodnApICAtIFN1cHBvcnQgZm9yIEludHVvcyBhZGRlZAorICoJdjAuNCAoc20pICAtIFN1cHBvcnQgZm9yIG1vcmUgSW50dW9zIG1vZGVscywgbWVudXN0cmlwCisgKgkJCXJlbGF0aXZlIG1vZGUsIHByb3hpbWl0eS4KKyAqCXYwLjUgKHZwKSAgLSBCaWcgY2xlYW51cCwgbmlmdHkgZmVhdHVyZXMgcmVtb3ZlZCwKKyAqIAkJCXRoZXkgYmVsb25nIGluIHVzZXJzcGFjZQorICoJdjEuOCAodnApICAtIFN1Ym1pdCBVUkIgb25seSB3aGVuIG9wZXJhdGluZywgbW92ZWQgdG8gQ1ZTLAorICoJCQl1c2UgaW5wdXRfcmVwb3J0X2tleSBpbnN0ZWFkIG9mIHJlcG9ydF9idG4gYW5kCisgKgkJCW90aGVyIGNsZWFudXBzCisgKgl2MS4xMSAodnApIC0gQWRkIFVSQiAtPmRldiBzZXR0aW5nIGZvciBuZXcga2VybmVscworICoJdjEuMTEgKGpiKSAtIEFkZCBzdXBwb3J0IGZvciB0aGUgNEQgTW91c2UgJiBMZW5zCisgKgl2MS4xMiAoZGUpIC0gQWRkIHN1cHBvcnQgZm9yIHR3byBtb3JlIGlua2luZyBwZW4gSURzCisgKgl2MS4xNCAodnApIC0gVXNlIG5ldyBVU0IgZGV2aWNlIGlkIHByb2Jpbmcgc2NoZW1lLgorICoJCSAgICAgRml4IFdhY29tIEdyYXBoaXJlIG1vdXNlIHdoZWVsCisgKgl2MS4xOCAodnApIC0gRml4IG1vdXNlIHdoZWVsIGRpcmVjdGlvbgorICoJCSAgICAgTWFrZSBtb3VzZSByZWxhdGl2ZQorICogICAgICB2MS4yMCAoZmwpIC0gUmVwb3J0IHRvb2wgaWQgZm9yIEludHVvcyBkZXZpY2VzCisgKiAgICAgICAgICAgICAgICAgLSBNdWx0aSB0b29scyBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgLSBDb3JyZWN0ZWQgSW50dW9zIHByb3RvY29sIGRlY29kaW5nIChhaXJicnVzaCwgNEQgbW91c2UsIGxlbnMgY3Vyc29yLi4uKQorICogICAgICAgICAgICAgICAgIC0gQWRkIFBMIG1vZGVscyBzdXBwb3J0CisgKgkJICAgLSBGaXggV2Fjb20gR3JhcGhpcmUgbW91c2Ugd2hlZWwgYWdhaW4KKyAqCXYxLjIxICh2cCkgLSBSZW1vdmVkIHByb3RvY29sIGRlc2NyaXB0aW9ucworICoJCSAgIC0gQWRkZWQgTUlTQ19TRVJJQUwgZm9yIHRvb2wgc2VyaWFsIG51bWJlcnMKKyAqCSAgICAgIChnYikgLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogICAgdjEuMjEuMSAoZmwpIC0gYWRkZWQgR3JhcGhpcmUyIHN1cHBvcnQKKyAqICAgIHYxLjIxLjIgKGZsKSAtIGFkZGVkIEludHVvczIgc3VwcG9ydAorICogICAgICAgICAgICAgICAgIC0gYWRkZWQgYWxsIHRoZSBQTCBpZHMKKyAqICAgIHYxLjIxLjMgKGZsKSAtIGFkZGVkIGFub3RoZXIgZXJhc2VyIGlkIGZyb20gTmVpbCBPa2Ftb3RvCisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBzbW9vdGggZmlsdGVyIGZvciBHcmFwaGlyZSBmcm9tIFBlcmkgSGFua2V5CisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBQZW5QYXJ0bmVyIHN1cHBvcnQgZnJvbSBPbGFmIHZhbiBFcworICogICAgICAgICAgICAgICAgIC0gbmV3IHRvb2wgaWRzIGZyb20gT2xlIE1hcnRpbiBCam9lcm5kYWxlbgorICoJdjEuMjkgKHBjKSAtIEFkZCBzdXBwb3J0IGZvciBtb3JlIHRhYmxldHMKKyAqCQkgICAtIEZpeCBwcmVzc3VyZSByZXBvcnRpbmcKKyAqCXYxLjMwICh2cCkgLSBNZXJnZSAyLjQgYW5kIDIuNSBkcml2ZXJzCisgKgkJICAgLSBTaW5jZSAyLjUgbm93IGhhcyBpbnB1dF9zeW5jKCksIHJlbW92ZSBNU0NfU0VSSUFMIGFidXNlCisgKgkJICAgLSBDbGVhbnVwcyBoZXJlIGFuZCB0aGVyZQorICogICAgdjEuMzAuMSAocGkpIC0gQWRkZWQgR3JhcGhpcmUzIHN1cHBvcnQKKyAqCXYxLjQwIChwYykgLSBBZGQgc3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXcgZGV2aWNlcywgZml4IGVyYXNlciByZXBvcnRpbmcsIC4uLgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNDAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCTB4MDU2YQorCitzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgeworCWNoYXIgKm5hbWU7CisJaW50IHBrdGxlbjsKKwlpbnQgeF9tYXg7CisJaW50IHlfbWF4OworCWludCBwcmVzc3VyZV9tYXg7CisJaW50IGRpc3RhbmNlX21heDsKKwlpbnQgdHlwZTsKKwl1c2JfY29tcGxldGVfdCBpcnE7Cit9OworCitzdHJ1Y3Qgd2Fjb20geworCXNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgdXJiICppcnE7CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlczsKKwlpbnQgdG9vbFsyXTsKKwlpbnQgb3BlbjsKKwlfX3UzMiBzZXJpYWxbMl07CisJY2hhciBwaHlzWzMyXTsKK307CisKKyNkZWZpbmUgVVNCX1JFUV9TRVRfUkVQT1JUCTB4MDkKK3N0YXRpYyBpbnQgdXNiX3NldF9yZXBvcnQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQl1bnNpZ25lZCBjaGFyIGlkLCB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJdXNiX3NuZGN0cmxwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDApLAorICAgICAgICAgICAgICAgIFVTQl9SRVFfU0VUX1JFUE9SVCwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICh0eXBlIDw8IDgpICsgaWQsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQlidWYsIHNpemUsIDEwMDApOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9wbF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwlpbnQgcHJveCwgcHJlc3N1cmU7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMikgeworCQlkYmcoIndhY29tX3BsX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcm94ID0gZGF0YVsxXSAmIDB4NDA7CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJCisJaWYgKHByb3gpIHsKKworCQlwcmVzc3VyZSA9IChzaWduZWQgY2hhcikoKGRhdGFbN10gPDwgMSkgfCAoKGRhdGFbNF0gPj4gMikgJiAxKSk7CisJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCA+IDI1NSkKKwkJCXByZXNzdXJlID0gKHByZXNzdXJlIDw8IDEpIHwgKChkYXRhWzRdID4+IDYpICYgMSk7CisJCXByZXNzdXJlICs9ICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCArIDEpIC8gMjsKKworCQkvKgorCQkgKiBpZiBnb2luZyBmcm9tIG91dCBvZiBwcm94aW1pdHkgaW50byBwcm94aW1pdHkgc2VsZWN0IGJldHdlZW4gdGhlIGVyYXNlcgorCQkgKiBhbmQgdGhlIHBlbiBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIHN0eWx1czIgYnV0dG9uLCBjaG9vc2UgZXJhc2VyIGlmCisJCSAqIHByZXNzZWQgZWxzZSBjaG9vc2UgcGVuLiBpZiBub3QgYSBwcm94aW1pdHkgY2hhbmdlIGZyb20gb3V0IHRvIGluLCBzZW5kCisJCSAqIGFuIG91dCBvZiBwcm94aW1pdHkgZm9yIHByZXZpb3VzIHRvb2wgdGhlbiBhIGluIGZvciBuZXcgdG9vbC4KKwkJICovCisJCWlmICghd2Fjb20tPnRvb2xbMF0pIHsKKwkJCS8qIEdvaW5nIGludG8gcHJveGltaXR5IHNlbGVjdCB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IChkYXRhWzRdICYgMHgyMCk/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKKwkJfQorCQllbHNlIHsKKwkJCS8qIHdhcyBlbnRlcmVkIHdpdGggc3R5bHVzMiBwcmVzc2VkICovCisJCQlpZiAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUlVCQkVSICYmICEoZGF0YVs0XSAmIDB4MjApICkgeworCQkJCS8qIHJlcG9ydCBvdXQgcHJveGltaXR5IGZvciBwcmV2aW91cyB0b29sICovCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sWzFdLCAwKTsKKwkJCQlpbnB1dF9zeW5jKGRldik7CisJCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9QRU47CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKKwkJCS8qIFVua25vd24gdG9vbCBzZWxlY3RlZCBkZWZhdWx0IHRvIHBlbiB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKKwkJfQorCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIHByb3gpOyAvKiByZXBvcnQgaW4gcHJveGltaXR5IGZvciB0b29sICovCisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgZGF0YVszXSB8ICgoX191MzIpZGF0YVsyXSA8PCA3KSB8ICgoX191MzIpKGRhdGFbMV0gJiAweDAzKSA8PCAxNCkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGRhdGFbNl0gfCAoKF9fdTMyKWRhdGFbNV0gPDwgNykgfCAoKF9fdTMyKShkYXRhWzRdICYgMHgwMykgPDwgMTQpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgcHJlc3N1cmUpOworCisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbNF0gJiAweDA4KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbNF0gJiAweDEwKTsKKwkJLyogT25seSBhbGxvdyB0aGUgc3R5bHVzMiBidXR0b24gdG8gYmUgcmVwb3J0ZWQgZm9yIHRoZSBwZW4gdG9vbC4gKi8KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUEVOKSAmJiAoZGF0YVs0XSAmIDB4MjApKTsKKwl9CisJZWxzZSB7CisJCS8qIHJlcG9ydCBwcm94aW1pdHktb3V0IG9mIGEgKHZhbGlkKSB0b29sICovCisJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKKwkJCS8qIFVua25vd24gdG9vbCBzZWxlY3RlZCBkZWZhdWx0IHRvIHBlbiB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKKwkJfQorCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIHByb3gpOworCX0KKworCXdhY29tLT50b29sWzBdID0gcHJveDsgLyogU2F2ZSBwcm94aW1pdHkgc3RhdGUgKi8KKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fcHR1X2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzBdICE9IDIpCisJeworCQlwcmludGsoS0VSTl9JTkZPICJ3YWNvbV9wdHVfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWRcbiIsIGRhdGFbMF0pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCWlmIChkYXRhWzFdICYgMHgwNCkKKwl7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9SVUJCRVIsIGRhdGFbMV0gJiAweDIwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDgpOworCX0KKwllbHNlCisJeworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHgyMCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDAxKTsKKwl9CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVsyXSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbNF0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs2XSkpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMHgwMik7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgMHgxMCk7CisKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fcGVucGFydG5lcl9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGF0YVswXSAhPSAyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIndhY29tX3BlbnBhcnRuZXJfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWRcbiIsIGRhdGFbMF0pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIDEpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbMV0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzNdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgKHNpZ25lZCBjaGFyKWRhdGFbNl0gKyAxMjcpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsICgoc2lnbmVkIGNoYXIpZGF0YVs2XSA+IC04MCkgJiYgIShkYXRhWzVdICYgMHgyMCkpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCAoZGF0YVs1XSAmIDB4NDApKTsKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21fZ3JhcGhpcmVfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJndhY29tLT5kZXY7CisJaW50IHgsIHk7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMikgeworCQlkYmcoIndhY29tX2dyYXBoaXJlX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl4ID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbMl0pOworCXkgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs0XSk7CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisKKwlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgeworCisJCWNhc2UgMDoJLyogUGVuICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHg4MCk7CisJCQlicmVhazsKKworCQljYXNlIDE6IC8qIFJ1YmJlciAqLworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgZGF0YVsxXSAmIDB4ODApOworCQkJYnJlYWs7CisKKwkJY2FzZSAyOiAvKiBNb3VzZSB3aXRoIHdoZWVsICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVsxXSAmIDB4MDQpOworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgKHNpZ25lZCBjaGFyKSBkYXRhWzZdKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICAgICAgY2FzZSAzOiAvKiBNb3VzZSB3aXRob3V0IHdoZWVsICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfTU9VU0UsIGRhdGFbN10gPiAyNCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIGRhdGFbMV0gJiAweDAxKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIGRhdGFbMV0gJiAweDAyKTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfRElTVEFOQ0UsIGRhdGFbN10pOworCisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIHgpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCB5KTsKKworCQkJaW5wdXRfc3luYyhkZXYpOworCQkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzFdICYgMHg4MCkgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIHkpOworCX0KKworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzZdKSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMHgwMik7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgMHgwNCk7CisKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIGludCB3YWNvbV9pbnR1b3NfaW5vdXQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCWludCBpZHg7CisKKwkvKiB0b29sIG51bWJlciAqLworCWlkeCA9IGRhdGFbMV0gJiAweDAxOworCisJLyogRW50ZXIgcmVwb3J0ICovCisJaWYgKChkYXRhWzFdICYgMHhmYykgPT0gMHhjMCkKKwl7CisJCS8qIHNlcmlhbCBudW1iZXIgb2YgdGhlIHRvb2wgKi8KKwkJd2Fjb20tPnNlcmlhbFtpZHhdID0gKChfX3UzMikoZGF0YVszXSAmIDB4MGYpIDw8IDI4KSArCisJCQkoKF9fdTMyKWRhdGFbNF0gPDwgMjApICsgKChfX3UzMilkYXRhWzVdIDw8IDEyKSArCisJCQkoKF9fdTMyKWRhdGFbNl0gPDwgNCkgKyAoZGF0YVs3XSA+PiA0KTsKKworCQlzd2l0Y2ggKCgoX191MzIpZGF0YVsyXSA8PCA0KSB8IChkYXRhWzNdID4+IDQpKSB7CisJCQljYXNlIDB4ODEyOiAvKiBJbmtpbmcgcGVuICovCisJCQljYXNlIDB4ODAxOiAvKiBJbnR1b3MzIElua2luZyBwZW4gKi8KKwkJCWNhc2UgMHgwMTI6CisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTkNJTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg4MjI6IC8qIFBlbiAqLworCQkJY2FzZSAweDg0MjoKKwkJCWNhc2UgMHg4NTI6CisJCQljYXNlIDB4ODIzOiAvKiBJbnR1b3MzIEdyaXAgUGVuICovCisJCQljYXNlIDB4ODEzOiAvKiBJbnR1b3MzIENsYXNzaWMgUGVuICovCisJCQljYXNlIDB4ODg1OiAvKiBJbnR1b3MzIE1hcmtlciBQZW4gKi8KKwkJCWNhc2UgMHgwMjI6CisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg4MzI6IC8qIFN0cm9rZSBwZW4gKi8KKwkJCWNhc2UgMHgwMzI6CisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX0JSVVNIOworCQkJCWJyZWFrOworCQkJY2FzZSAweDAwNzogLyogTW91c2UgNEQgYW5kIDJEICovCisJCSAgICAgICAgY2FzZSAweDA5YzoKKwkJCWNhc2UgMHgwOTQ6CisJCQljYXNlIDB4MDE3OiAvKiBJbnR1b3MzIDJEIE1vdXNlICovCisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX01PVVNFOworCQkJCWJyZWFrOworCQkJY2FzZSAweDA5NjogLyogTGVucyBjdXJzb3IgKi8KKwkJCWNhc2UgMHgwOTc6IC8qIEludHVvczMgTGVucyBjdXJzb3IgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfTEVOUzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg4MmE6IC8qIEVyYXNlciAqLworCQkJY2FzZSAweDg1YToKKwkJICAgICAgICBjYXNlIDB4OTFhOgorCQkJY2FzZSAweGQxYToKKwkJCWNhc2UgMHgwZmE6CisJCQljYXNlIDB4ODJiOiAvKiBJbnR1b3MzIEdyaXAgUGVuIEVyYXNlciAqLworCQkJY2FzZSAweDgxYjogLyogSW50dW9zMyBDbGFzc2ljIFBlbiBFcmFzZXIgKi8KKwkJCWNhc2UgMHg5MWI6IC8qIEludHVvczMgQWlyYnJ1c2ggRXJhc2VyICovCisJCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1JVQkJFUjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhkMTI6CisJCQljYXNlIDB4OTEyOgorCQkJY2FzZSAweDExMjoKKwkJCWNhc2UgMHg5MTM6IC8qIEludHVvczMgQWlyYnJ1c2ggKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfQUlSQlJVU0g7CisJCQkJYnJlYWs7CS8qIEFpcmJydXNoICovCisJCQlkZWZhdWx0OiAvKiBVbmtub3duIHRvb2wgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOOworCQl9CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogRXhpdCByZXBvcnQgKi8KKwlpZiAoKGRhdGFbMV0gJiAweGZlKSA9PSAweDgwKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAwKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX2ludHVvc19nZW5lcmFsKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwl1bnNpZ25lZCBpbnQgdDsKKworCS8qIGdlbmVyYWwgcGVuIHBhY2tldCAqLworCWlmICgoZGF0YVsxXSAmIDB4YjgpID09IDB4YTApCisJeworCQl0ID0gKChfX3UzMilkYXRhWzZdIDw8IDIpIHwgKChkYXRhWzddID4+IDYpICYgMyk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIHQpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RJTFRfWCwKKwkJCQkoKGRhdGFbN10gPDwgMSkgJiAweDdlKSB8IChkYXRhWzhdID4+IDcpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19USUxUX1ksIGRhdGFbOF0gJiAweDdmKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAyKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgNCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIHQgPiAxMCk7CisJfQorCisJLyogYWlyYnJ1c2ggc2Vjb25kIHBhY2tldCAqLworCWlmICgoZGF0YVsxXSAmIDB4YmMpID09IDB4YjQpCisJeworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1dIRUVMLAorCQkJCSgoX191MzIpZGF0YVs2XSA8PCAyKSB8ICgoZGF0YVs3XSA+PiA2KSAmIDMpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19USUxUX1gsCisJCQkJKChkYXRhWzddIDw8IDEpICYgMHg3ZSkgfCAoZGF0YVs4XSA+PiA3KSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfVElMVF9ZLCBkYXRhWzhdICYgMHg3Zik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgd2Fjb21faW50dW9zX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCXVuc2lnbmVkIGludCB0OworCWludCBpZHg7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMiAmJiBkYXRhWzBdICE9IDUgJiYgZGF0YVswXSAhPSA2KSB7CisJCWRiZygid2Fjb21faW50dW9zX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisKKwkvKiB0b29sIG51bWJlciAqLworCWlkeCA9IGRhdGFbMV0gJiAweDAxOworCisJLyogcHJvY2VzcyBpbi9vdXQgcHJveCBldmVudHMgKi8KKwlpZiAod2Fjb21faW50dW9zX2lub3V0KHVyYikpIGdvdG8gZXhpdDsKKworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgYmUxNl90b19jcHUoKihfX2JlMTYgKikgJmRhdGFbMl0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGJlMTZfdG9fY3B1KCooX19iZTE2ICopICZkYXRhWzRdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ESVNUQU5DRSwgZGF0YVs5XSk7CisKKwkvKiBwcm9jZXNzIGdlbmVyYWwgcGFja2V0cyAqLworCXdhY29tX2ludHVvc19nZW5lcmFsKHVyYik7CisJCisJaWYgKChkYXRhWzFdICYgMHhiYykgPT0gMHhhOCB8fCAoZGF0YVsxXSAmIDB4YmUpID09IDB4YjApIHsJCS8qIDREIG1vdXNlIG9yIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KKworCQlpZiAoZGF0YVsxXSAmIDB4MDIpIHsJCQkJCQkvKiBSb3RhdGlvbiBwYWNrZXQgKi8KKworCQkJdCA9ICgoX191MzIpZGF0YVs2XSA8PCAzKSB8ICgoZGF0YVs3XSA+PiA1KSAmIDcpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgKGRhdGFbN10gJiAweDIwKSA/ICgodCAtIDEpIC8gMikgOiAtdCAvIDIpOworCisJCX0gZWxzZSB7CisKKwkgCQlpZiAoKGRhdGFbMV0gJiAweDEwKSA9PSAwKSB7CQkJCS8qIDREIG1vdXNlIHBhY2tldHMgKi8KKworCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDAyKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MDQpOworCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TSURFLCAgIGRhdGFbOF0gJiAweDIwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MTApOworCQkJCXQgPSAoKF9fdTMyKWRhdGFbNl0gPDwgMikgfCAoKGRhdGFbN10gPj4gNikgJiAzKTsKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RIUk9UVExFLCAoZGF0YVs4XSAmIDB4MDgpID8gLXQgOiB0KTsKKworCQkJfSBlbHNlIHsKKwkJCQlpZiAod2Fjb20tPnRvb2xbaWR4XSA9PSBCVE5fVE9PTF9NT1VTRSkgewkvKiAyRCBtb3VzZSBwYWNrZXRzICovCQorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDQpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDgpOworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MTApOworCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAKKwkJCQkJICAgICgtKF9fdTMyKShkYXRhWzhdICYgMHgwMSkgKyAoX191MzIpKChkYXRhWzhdICYgMHgwMikgPj4gMSkpKTsKKwkJCQl9CisJCQkJZWxzZSB7ICAgICAvKiBMZW5zIGN1cnNvciBwYWNrZXRzICovCisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwMik7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgwNCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHgxMCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fRVhUUkEsICBkYXRhWzhdICYgMHgwOCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgd2Fjb21faW50dW9zM19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwl1bnNpZ25lZCBpbnQgdDsKKwlpbnQgaWR4LCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNoZWNrIGZvciB2YWxpZCByZXBvcnQgKi8KKwlpZiAoZGF0YVswXSAhPSAyICYmIGRhdGFbMF0gIT0gNSAmJiBkYXRhWzBdICE9IDEyKQorCXsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2Fjb21faW50dW9zM19pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisKKwkvKiB0b29sIGluZGV4IGlzIGFsd2F5cyAwIGhlcmUgc2luY2UgdGhlcmUgaXMgbm8gZHVhbCBpbnB1dCB0b29sICovCisJaWR4ID0gZGF0YVsxXSAmIDB4MDE7CisKKwkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KKwlpZiAoZGF0YVswXSA9PSAxMikKKwl7CisJCS8qIGluaXRpYXRlIHRoZSBwYWQgYXMgYSBkZXZpY2UgKi8KKwkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX0ZJTkdFUikKKwkJeworCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9GSU5HRVI7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDEpOworCQl9CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMCwgKGRhdGFbNV0gJiAweDAxKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMSwgKGRhdGFbNV0gJiAweDAyKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMiwgKGRhdGFbNV0gJiAweDA0KSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fMywgKGRhdGFbNV0gJiAweDA4KSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNCwgKGRhdGFbNl0gJiAweDAxKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNSwgKGRhdGFbNl0gJiAweDAyKSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNiwgKGRhdGFbNl0gJiAweDA0KSk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fNywgKGRhdGFbNl0gJiAweDA4KSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsICgoZGF0YVsxXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVsyXSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksICgoZGF0YVszXSAmIDB4MWYpIDw8IDgpIHwgZGF0YVs0XSk7CisJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCAweGZmZmZmZmZmKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcHJvY2VzcyBpbi9vdXQgcHJveCBldmVudHMgKi8KKwlpZiAod2Fjb21faW50dW9zX2lub3V0KHVyYikpIGdvdG8gZXhpdDsKKworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKChfX3UzMilkYXRhWzJdIDw8IDkpIHwgKChfX3UzMilkYXRhWzNdIDw8IDEpIHwgKChkYXRhWzldID4+IDEpICYgMSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgKChfX3UzMilkYXRhWzRdIDw8IDkpIHwgKChfX3UzMilkYXRhWzVdIDw8IDEpIHwgKGRhdGFbOV0gJiAxKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ESVNUQU5DRSwgKChkYXRhWzldID4+IDIpICYgMHgzZikpOworCisJLyogcHJvY2VzcyBnZW5lcmFsIHBhY2tldHMgKi8KKwl3YWNvbV9pbnR1b3NfZ2VuZXJhbCh1cmIpOworCisJaWYgKChkYXRhWzFdICYgMHhiYykgPT0gMHhhOCB8fCAoZGF0YVsxXSAmIDB4YmUpID09IDB4YjApCisJeworCQkvKiBNYXJrZXIgcGVuIHJvdGF0aW9uIHBhY2tldC4gUmVwb3J0ZWQgYXMgd2hlZWwgZHVlIHRvIHZhbHVhdG9yIGxpbWl0YXRpb24gKi8KKwkJaWYgKGRhdGFbMV0gJiAweDAyKQorCQl7CisJCQl0ID0gKChfX3UzMilkYXRhWzZdIDw8IDMpIHwgKChkYXRhWzddID4+IDUpICYgNyk7CisJCQl0ID0gKGRhdGFbN10gJiAweDIwKSA/ICgodCA+IDkwMCkgPyAoKHQtMSkgLyAyIC0gMTM1MCkgOgorCQkJCSgodC0xKSAvIDIgKyA0NTApKSA6ICg0NTAgLSB0IC8gMikgOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19XSEVFTCwgdCk7CisJCX0KKworCQkvKiAyRCBtb3VzZSBwYWNrZXRzICovCisJCWlmICh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX01PVVNFKQorCQl7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDQpOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDA4KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgxMCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NJREUsICAgZGF0YVs4XSAmIDB4NDApOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9FWFRSQSwgIGRhdGFbOF0gJiAweDIwKTsKKwkJCS8qIG1vdXNlIHdoZWVsIGlzIHBvc2l0aXZlIHdoZW4gcm9sbGVkIGJhY2t3YXJkcyAqLworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgICgoX191MzIpKChkYXRhWzhdICYgMHgwMikgPj4gMSkKKwkJCQkJIC0gKF9fdTMyKShkYXRhWzhdICYgMHgwMSkpKTsKKwkJfQorCX0KKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKKwlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwlpbnB1dF9zeW5jKGRldik7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzW10gPSB7CisJeyAiV2Fjb20gUGVucGFydG5lciIsICAgIDcsICAgNTA0MCwgIDM3ODAsICAyNTUsIDMyLCAwLCB3YWNvbV9wZW5wYXJ0bmVyX2lycSB9LAorICAgICAgICB7ICJXYWNvbSBHcmFwaGlyZSIsICAgICAgOCwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgMzIsIDEsIHdhY29tX2dyYXBoaXJlX2lycSB9LAorCXsgIldhY29tIEdyYXBoaXJlMiA0eDUiLCA4LCAgMTAyMDYsICA3NDIyLCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisgCXsgIldhY29tIEdyYXBoaXJlMiA1eDciLCA4LCAgMTM5MTgsIDEwMjA2LCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisJeyAiV2Fjb20gR3JhcGhpcmUzIiwgICAgIDgsICAxMDIwOCwgIDc0MjQsICA1MTEsIDMyLCAxLCB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgOCwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgMzIsIDEsIHdhY29tX2dyYXBoaXJlX2lycSB9LAorICAJeyAiV2Fjb20gSW50dW9zIDR4NSIsICAgMTAsICAxMjcwMCwgMTA2MDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgIldhY29tIEludHVvcyA2eDgiLCAgIDEwLCAgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorIAl7ICJXYWNvbSBJbnR1b3MgOXgxMiIsICAxMCwgIDMwNDgwLCAyNDA2MCwgMTAyMywgMTUsIDIsIHdhY29tX2ludHVvc19pcnEgfSwKKyAJeyAiV2Fjb20gSW50dW9zIDEyeDEyIiwgMTAsICAzMDQ4MCwgMzE2ODAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgIldhY29tIEludHVvcyAxMngxOCIsIDEwLCAgNDU3MjAsIDMxNjgwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorIAl7ICJXYWNvbSBQTDQwMCIsICAgICAgICAgOCwgICA1NDA4LCAgNDA1NiwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDUwMCIsICAgICAgICAgOCwgICA2MTQ0LCAgNDYwOCwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDYwMCIsICAgICAgICAgOCwgICA2MTI2LCAgNDYwNCwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDYwMFNYIiwgICAgICAgOCwgICA2MjYwLCAgNTAxNiwgIDI1NSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDU1MCIsICAgICAgICAgOCwgICA2MTQ0LCAgNDYwOCwgIDUxMSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorIAl7ICJXYWNvbSBQTDgwMCIsICAgICAgICAgOCwgICA3MjIwLCAgNTc4MCwgIDUxMSwgMzIsIDMsIHdhY29tX3BsX2lycSB9LAorCXsgIldhY29tIEludHVvczIgNHg1IiwgICAxMCwgMTI3MDAsIDEwNjAwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgOXgxMiIsICAxMCwgMzA0ODAsIDI0MDYwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgMTJ4MTIiLCAxMCwgMzA0ODAsIDMxNjgwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAxMCwgNDU3MjAsIDMxNjgwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorCXsgIldhY29tIFZvbGl0byIsICAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisJeyAiV2Fjb20gQ2ludGlxIFBhcnRuZXIiLDgsICAyMDQ4MCwgMTUzNjAsICA1MTEsIDMyLCAzLCB3YWNvbV9wdHVfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgIDEwLCAyNTQwMCwgMjAzMjAsIDEwMjMsIDE1LCA0LCB3YWNvbV9pbnR1b3MzX2lycSB9LAorCXsgIldhY29tIEludHVvczMgNng4IiwgICAxMCwgNDA2NDAsIDMwNDgwLCAxMDIzLCAxNSwgNCwgd2Fjb21faW50dW9zM19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDl4MTIiLCAgMTAsIDYwOTYwLCA0NTcyMCwgMTAyMywgMTUsIDQsIHdhY29tX2ludHVvczNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgIDEwLCAyMDMyMCwgMTYyNDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHdhY29tX2lkc1tdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDEwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDExKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDEyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDEzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDE0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDIzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDI0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDMzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDM0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDM1KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ0KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ1KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDYwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDAzKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweEIyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dBQ09NLCAweDQ3KSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHdhY29tX2lkcyk7CisKK3N0YXRpYyBpbnQgd2Fjb21fb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IGRldi0+cHJpdmF0ZTsKKworCWlmICh3YWNvbS0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCXdhY29tLT5pcnEtPmRldiA9IHdhY29tLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHdhY29tLT5pcnEsIEdGUF9LRVJORUwpKSB7CisJCXdhY29tLT5vcGVuLS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghLS13YWNvbS0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKHdhY29tLT5pcnEpOworfQorCitzdGF0aWMgaW50IHdhY29tX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwljaGFyIHJlcF9kYXRhWzJdID0gezB4MDIsIDB4MDJ9OworCXN0cnVjdCB3YWNvbSAqd2Fjb207CisJY2hhciBwYXRoWzY0XTsKKworCWlmICghKHdhY29tID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdhY29tKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQod2Fjb20sIDAsIHNpemVvZihzdHJ1Y3Qgd2Fjb20pKTsKKworCXdhY29tLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDEwLCBHRlBfS0VSTkVMLCAmd2Fjb20tPmRhdGFfZG1hKTsKKwlpZiAoIXdhY29tLT5kYXRhKSB7CisJCWtmcmVlKHdhY29tKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd2Fjb20tPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWNvbS0+aXJxKSB7CisJCXVzYl9idWZmZXJfZnJlZShkZXYsIDEwLCB3YWNvbS0+ZGF0YSwgd2Fjb20tPmRhdGFfZG1hKTsKKwkJa2ZyZWUod2Fjb20pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3YWNvbS0+ZmVhdHVyZXMgPSB3YWNvbV9mZWF0dXJlcyArIChpZCAtIHdhY29tX2lkcyk7CisKKwl3YWNvbS0+ZGV2LmV2Yml0WzBdIHw9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1BSRVNTVVJFKTsKKwl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1BFTikgfCBCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKTsKKworCXN3aXRjaCAod2Fjb20tPmZlYXR1cmVzLT50eXBlKSB7CisJCWNhc2UgMToKKwkJCXdhY29tLT5kZXYuZXZiaXRbMF0gfD0gQklUKEVWX1JFTCk7CisJCQl3YWNvbS0+ZGV2LnJlbGJpdFswXSB8PSBCSVQoUkVMX1dIRUVMKTsKKwkJCXdhY29tLT5kZXYuYWJzYml0WzBdIHw9IEJJVChBQlNfRElTVEFOQ0UpOworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKyAJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpIHwgQklUKEJUTl9TVFlMVVMyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgNDogLyogbmV3IGZ1bmN0aW9ucyBmb3IgSW50dW9zMyAqLworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9GSU5HRVIpOworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fMCkgfCBCSVQoQlROXzEpIHwgQklUKEJUTl8yKSB8IEJJVChCVE5fMykgfCBCSVQoQlROXzQpIHwgQklUKEJUTl81KSB8IEJJVChCVE5fNikgfCBCSVQoQlROXzcpOworCQkJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19SWCkgfCBCSVQoQUJTX1JZKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCWNhc2UgMjoKKwkJCXdhY29tLT5kZXYuZXZiaXRbMF0gfD0gQklUKEVWX01TQykgfCBCSVQoRVZfUkVMKTsKKwkJCXdhY29tLT5kZXYubXNjYml0WzBdIHw9IEJJVChNU0NfU0VSSUFMKTsKKwkJCXdhY29tLT5kZXYucmVsYml0WzBdIHw9IEJJVChSRUxfV0hFRUwpOworCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fU0lERSkgfCBCSVQoQlROX0VYVFJBKTsKKyAJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpCXwgQklUKEJUTl9UT09MX0JSVVNIKQorCQkJCQkJCSAgfCBCSVQoQlROX1RPT0xfUEVOQ0lMKSB8IEJJVChCVE5fVE9PTF9BSVJCUlVTSCkgfCBCSVQoQlROX1RPT0xfTEVOUykgfCBCSVQoQlROX1NUWUxVUzIpOworCQkJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19ESVNUQU5DRSkgfCBCSVQoQUJTX1dIRUVMKSB8IEJJVChBQlNfVElMVF9YKSB8IEJJVChBQlNfVElMVF9ZKSB8IEJJVChBQlNfUlopIHwgQklUKEFCU19USFJPVFRMRSk7CisJCQlicmVhazsKKworCQljYXNlIDM6CisgCQkJd2Fjb20tPmRldi5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fU1RZTFVTMikgfCBCSVQoQlROX1RPT0xfUlVCQkVSKTsKKwkJCWJyZWFrOworCX0KKworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19YXSA9IHdhY29tLT5mZWF0dXJlcy0+eF9tYXg7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1ldID0gd2Fjb20tPmZlYXR1cmVzLT55X21heDsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfUFJFU1NVUkVdID0gd2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXg7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX0RJU1RBTkNFXSA9IHdhY29tLT5mZWF0dXJlcy0+ZGlzdGFuY2VfbWF4OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19USUxUX1hdID0gMTI3OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19USUxUX1ldID0gMTI3OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19XSEVFTF0gPSAxMDIzOworCisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1JYXSA9IDQwOTc7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1JZXSA9IDQwOTc7CisJd2Fjb20tPmRldi5hYnNtaW5bQUJTX1JaXSA9IC05MDA7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1JaXSA9IDg5OTsKKwl3YWNvbS0+ZGV2LmFic21pbltBQlNfVEhST1RUTEVdID0gLTEwMjM7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1RIUk9UVExFXSA9IDEwMjM7CisKKwl3YWNvbS0+ZGV2LmFic2Z1enpbQUJTX1hdID0gNDsKKwl3YWNvbS0+ZGV2LmFic2Z1enpbQUJTX1ldID0gNDsKKworCXdhY29tLT5kZXYucHJpdmF0ZSA9IHdhY29tOworCXdhY29tLT5kZXYub3BlbiA9IHdhY29tX29wZW47CisJd2Fjb20tPmRldi5jbG9zZSA9IHdhY29tX2Nsb3NlOworCisJdXNiX21ha2VfcGF0aChkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKHdhY29tLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwl3YWNvbS0+ZGV2Lm5hbWUgPSB3YWNvbS0+ZmVhdHVyZXMtPm5hbWU7CisJd2Fjb20tPmRldi5waHlzID0gd2Fjb20tPnBoeXM7CisJd2Fjb20tPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwl3YWNvbS0+ZGV2LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJd2Fjb20tPmRldi5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJd2Fjb20tPmRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJd2Fjb20tPmRldi5kZXYgPSAmaW50Zi0+ZGV2OworCXdhY29tLT51c2JkZXYgPSBkZXY7CisKKwllbmRwb2ludCA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKworCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnBrdGxlbiA+IDEwKQorCQlCVUcoKTsKKworCXVzYl9maWxsX2ludF91cmIod2Fjb20tPmlycSwgZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIHdhY29tLT5kYXRhLCB3YWNvbS0+ZmVhdHVyZXMtPnBrdGxlbiwKKwkJCSB3YWNvbS0+ZmVhdHVyZXMtPmlycSwgd2Fjb20sIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCXdhY29tLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHdhY29tLT5kYXRhX2RtYTsKKwl3YWNvbS0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmd2Fjb20tPmRldik7CisKKwkvKiBhc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEgKi8KKwl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisJLyogcmVwZWF0IG9uY2UgKG5vdCBzdXJlIHdoeSB0aGUgZmlyc3QgY2FsbCBvZnRlbiBmYWlscykgKi8KKwl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXNcbiIsIHdhY29tLT5mZWF0dXJlcy0+bmFtZSwgcGF0aCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHdhY29tKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKHdhY29tKSB7CisJCXVzYl9raWxsX3VyYih3YWNvbS0+aXJxKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJndhY29tLT5kZXYpOworCQl1c2JfZnJlZV91cmIod2Fjb20tPmlycSk7CisJCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCAxMCwgd2Fjb20tPmRhdGEsIHdhY29tLT5kYXRhX2RtYSk7CisJCWtmcmVlKHdhY29tKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3YWNvbV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIndhY29tIiwKKwkucHJvYmUgPQl3YWNvbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXdhY29tX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Jd2Fjb21faWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2Fjb21faW5pdCh2b2lkKQoreworCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJndhY29tX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdhY29tX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2Fjb21faW5pdCk7Cittb2R1bGVfZXhpdCh3YWNvbV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3hwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjVlZGIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogWC1Cb3ggZ2FtZXBhZCAtIHYwLjAuNQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBNYXJrbyBGcmllZGVtYW5uIDxtZnJAYm14LWNoZW1uaXR6LmRlPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbjoKKyAqICAtIGluZm9ybWF0aW9uIGZyb20gICAgIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRtbAorICogIC0gdGhlIGlGb3JjZSBkcml2ZXIgICAgZHJpdmVycy9jaGFyL2pveXN0aWNrL2lmb3JjZS5jCisgKiAgLSB0aGUgc2tlbGV0b24tZHJpdmVyICBkcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworICoKKyAqIFRoYW5rcyB0bzoKKyAqICAtIElUTyBUYWtheXVraSBmb3IgcHJvdmlkaW5nIGVzc2VudGlhbCB4cGFkIGluZm9ybWF0aW9uIG9uIGhpcyB3ZWJzaXRlCisgKiAgLSBWb2p0ZWNoIFBhdmxpayAgICAgLSBpZm9yY2UgZHJpdmVyIC8gaW5wdXQgc3Vic3lzdGVtCisgKiAgLSBHcmVnIEtyb2FoLUhhcnRtYW4gLSB1c2Itc2tlbGV0b24gZHJpdmVyCisgKgorICogVE9ETzoKKyAqICAtIGZpbmUgdHVuZSBheGVzCisgKiAgLSBmaXggImFuYWxvZyIgYnV0dG9ucyAocmVwb3J0ZWQgYXMgZGlnaXRhbCBub3cpCisgKiAgLSBnZXQgcnVtYmxlIHdvcmtpbmcKKyAqCisgKiBIaXN0b3J5OgorICoKKyAqIDIwMDItMDYtMjcgLSAwLjAuMSA6IGZpcnN0IHZlcnNpb24sIGp1c3Qgc2FpZCAiWEJPWCBISUQgY29udHJvbGxlciIKKyAqCisgKiAyMDAyLTA3LTAyIC0gMC4wLjIgOiBiYXNpYyB3b3JraW5nIHZlcnNpb24KKyAqICAtIGFsbCBheGVzIGFuZCA5IG9mIHRoZSAxMCBidXR0b25zIHdvcmsgKGdlcm1hbiBJbnRlckFjdCBkZXZpY2UpCisgKiAgLSB0aGUgYmxhY2sgYnV0dG9uIGRvZXMgbm90IHdvcmsKKyAqCisgKiAyMDAyLTA3LTE0IC0gMC4wLjMgOiByZXdvcmsgYnkgVm9qdGVjaCBQYXZsaWsKKyAqICAtIGluZGVudGF0aW9uIGZpeGVzCisgKiAgLSB1c2IgKyBpbnB1dCBpbml0IHNlcXVlbmNlIGZpeGVzCisgKgorICogMjAwMi0wNy0xNiAtIDAuMC40IDogbWlub3IgY2hhbmdlcywgbWVyZ2Ugd2l0aCBWb2p0ZWNoJ3MgdjAuMC4zCisgKiAgLSB2ZXJpZmllZCB0aGUgbGFjayBvZiBISUQgYW5kIHJlcG9ydCBkZXNjcmlwdG9ycworICogIC0gdmVyaWZpZWQgdGhhdCBBTEwgYnV0dG9ucyBXT1JLCisgKiAgLSBmaXhlZCBkLXBhZCB0byBheGVzIG1hcHBpbmcKKyAqCisgKiAyMDAyLTA3LTE3IC0gMC4wLjUgOiBzaW1wbGlmaWVkIGQtcGFkIGhhbmRsaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wLjUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmtvIEZyaWVkZW1hbm4gPG1mckBibXgtY2hlbW5pdHouZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiWC1Cb3ggcGFkIGRyaXZlciIKKworI2RlZmluZSBYUEFEX1BLVF9MRU4gMzIKKworc3RhdGljIHN0cnVjdCB4cGFkX2RldmljZSB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJY2hhciAqbmFtZTsKK30geHBhZF9kZXZpY2VbXSA9IHsKKwl7IDB4MDQ1ZSwgMHgwMjAyLCAiTWljcm9zb2Z0IFgtQm94IHBhZCAoVVMpIiB9LAorCXsgMHgwNDVlLCAweDAyODUsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIChKYXBhbikiIH0sCisJeyAweDA1ZmQsIDB4MTA3YSwgIkludGVyQWN0ICdQb3dlclBhZCBQcm8nIFgtQm94IHBhZCAoR2VybWFueSkiIH0sCisJeyAweDAwMDAsIDB4MDAwMCwgIlgtQm94IHBhZCIgfQorfTsKKworc3RhdGljIHNpZ25lZCBzaG9ydCB4cGFkX2J0bltdID0geworCUJUTl9BLCBCVE5fQiwgQlROX0MsIEJUTl9YLCBCVE5fWSwgQlROX1osCS8qICJhbmFsb2ciIGJ1dHRvbnMgKi8KKwlCVE5fU1RBUlQsIEJUTl9CQUNLLCBCVE5fVEhVTUJMLCBCVE5fVEhVTUJSLAkvKiBzdGFydC9iYWNrL3N0aWNrcyAqLworCS0xCQkJCQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzaWduZWQgc2hvcnQgeHBhZF9hYnNbXSA9IHsKKwlBQlNfWCwgQUJTX1ksCQkvKiBsZWZ0IHN0aWNrICovCisJQUJTX1JYLCBBQlNfUlksCQkvKiByaWdodCBzdGljayAqLworCUFCU19aLCBBQlNfUlosCQkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCisJQUJTX0hBVDBYLCBBQlNfSEFUMFksCS8qIGRpZ2l0YWwgcGFkICovCisJLTEJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhwYWRfdGFibGUgW10gPSB7CisJeyBVU0JfSU5URVJGQUNFX0lORk8oJ1gnLCAnQicsIDApIH0sCS8qIFgtQm94IFVTQi1JRiBub3QgYXBwcm92ZWQgY2xhc3MgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgeHBhZF90YWJsZSk7CisKK3N0cnVjdCB1c2JfeHBhZCB7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CQkJLyogaW5wdXQgZGV2aWNlIGludGVyZmFjZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkJLyogdXNiIGRldmljZSAqLworCQorCXN0cnVjdCB1cmIgKmlycV9pbjsJCQkvKiB1cmIgZm9yIGludGVycnVwdCBpbiByZXBvcnQgKi8KKwl1bnNpZ25lZCBjaGFyICppZGF0YTsJCQkvKiBpbnB1dCBkYXRhICovCisJZG1hX2FkZHJfdCBpZGF0YV9kbWE7CisJCisJY2hhciBwaHlzWzY1XTsJCQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8KKwlpbnQgb3Blbl9jb3VudDsJCQkJLyogcmVmZXJlbmNlIGNvdW50ICovCit9OworCisvKgorICoJeHBhZF9wcm9jZXNzX3BhY2tldAorICoKKyAqCUNvbXBsZXRlcyBhIHJlcXVlc3QgYnkgY29udmVydGluZyB0aGUgZGF0YSBpbnRvIGV2ZW50cyBmb3IgdGhlCisgKglpbnB1dCBzdWJzeXN0ZW0uCisgKgorICoJVGhlIHVzZWQgcmVwb3J0IGRlc2NyaXB0b3Igd2FzIHRha2VuIGZyb20gSVRPIFRha2F5dWtpcyB3ZWJzaXRlOgorICoJIGh0dHA6Ly9ldWMuanAvcGVyaXBocy94Ym94LWNvbnRyb2xsZXIuamEuaHRtbAorICovCisKK3N0YXRpYyB2b2lkIHhwYWRfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHVzYl94cGFkICp4cGFkLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmeHBhZC0+ZGV2OworCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCQorCS8qIGxlZnQgc3RpY2sgKi8KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIChfX3MxNikgKCgoX19zMTYpZGF0YVsxM10gPDwgOCkgfCBkYXRhWzEyXSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgKF9fczE2KSAoKChfX3MxNilkYXRhWzE1XSA8PCA4KSB8IGRhdGFbMTRdKSk7CisJCisJLyogcmlnaHQgc3RpY2sgKi8KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JYLCAoX19zMTYpICgoKF9fczE2KWRhdGFbMTddIDw8IDgpIHwgZGF0YVsxNl0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLCAoX19zMTYpICgoKF9fczE2KWRhdGFbMTldIDw8IDgpIHwgZGF0YVsxOF0pKTsKKwkKKwkvKiB0cmlnZ2VycyBsZWZ0L3JpZ2h0ICovCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19aLCBkYXRhWzEwXSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgZGF0YVsxMV0pOworCQorCS8qIGRpZ2l0YWwgcGFkICovCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19IQVQwWCwgISEoZGF0YVsyXSAmIDB4MDgpIC0gISEoZGF0YVsyXSAmIDB4MDQpKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBZLCAhIShkYXRhWzJdICYgMHgwMikgLSAhIShkYXRhWzJdICYgMHgwMSkpOworCQorCS8qIHN0YXJ0L2JhY2sgYnV0dG9ucyBhbmQgc3RpY2sgcHJlc3MgbGVmdC9yaWdodCAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RBUlQsIChkYXRhWzJdICYgMHgxMCkgPj4gNCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9CQUNLLCAoZGF0YVsyXSAmIDB4MjApID4+IDUpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJMLCAoZGF0YVsyXSAmIDB4NDApID4+IDYpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVEhVTUJSLCBkYXRhWzJdID4+IDcpOworCQorCS8qICJhbmFsb2ciIGJ1dHRvbnMgQSwgQiwgWCwgWSAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fQSwgZGF0YVs0XSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9CLCBkYXRhWzVdKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1gsIGRhdGFbNl0pOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fWSwgZGF0YVs3XSk7CisJCisJLyogImFuYWxvZyIgYnV0dG9ucyBibGFjaywgd2hpdGUgKi8KKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0MsIGRhdGFbOF0pOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fWiwgZGF0YVs5XSk7CisKKwlpbnB1dF9zeW5jKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHhwYWRfaXJxX2luKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gdXJiLT5jb250ZXh0OworCWludCByZXR2YWw7CisJCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisJCisJeHBhZF9wcm9jZXNzX3BhY2tldCh4cGFkLCAwLCB4cGFkLT5pZGF0YSwgcmVncyk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIGludCB4cGFkX29wZW4gKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBkZXYtPnByaXZhdGU7CisJCisJaWYgKHhwYWQtPm9wZW5fY291bnQrKykKKwkJcmV0dXJuIDA7CisJCisJeHBhZC0+aXJxX2luLT5kZXYgPSB4cGFkLT51ZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfaW4sIEdGUF9LRVJORUwpKSB7CisJCXhwYWQtPm9wZW5fY291bnQtLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB4cGFkX2Nsb3NlIChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl94cGFkICp4cGFkID0gZGV2LT5wcml2YXRlOworCQorCWlmICghLS14cGFkLT5vcGVuX2NvdW50KQorCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX2luKTsKK30KKworc3RhdGljIGludCB4cGFkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBOVUxMOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaXJxX2luOworCWNoYXIgcGF0aFs2NF07CisJaW50IGk7CisJCisJZm9yIChpID0gMDsgeHBhZF9kZXZpY2VbaV0uaWRWZW5kb3I7IGkrKykgeworCQlpZiAoKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IHhwYWRfZGV2aWNlW2ldLmlkVmVuZG9yKSAmJgorCQkgICAgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB4cGFkX2RldmljZVtpXS5pZFByb2R1Y3QpKQorCQkJYnJlYWs7CisJfQorCQorCWlmICgoeHBhZCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgdXNiX3hwYWQpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQllcnIoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBwYWQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh4cGFkLCAwLCBzaXplb2Yoc3RydWN0IHVzYl94cGFkKSk7CisJCisJeHBhZC0+aWRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIFhQQURfUEtUX0xFTiwKKwkJCQkgICAgICAgU0xBQl9BVE9NSUMsICZ4cGFkLT5pZGF0YV9kbWEpOworCWlmICgheHBhZC0+aWRhdGEpIHsKKwkJa2ZyZWUoeHBhZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXhwYWQtPmlycV9pbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICgheHBhZC0+aXJxX2luKSB7CisJCWVycigiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IHBhZCBpcnEgdXJiIik7CisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCBYUEFEX1BLVF9MRU4sIHhwYWQtPmlkYXRhLCB4cGFkLT5pZGF0YV9kbWEpOworICAgICAgICAgICAgICAgIGtmcmVlKHhwYWQpOworCQlyZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCQorCWVwX2lycV9pbiA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKwkKKwl1c2JfZmlsbF9pbnRfdXJiKHhwYWQtPmlycV9pbiwgdWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlcF9pcnFfaW4tPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJIHhwYWQtPmlkYXRhLCBYUEFEX1BLVF9MRU4sIHhwYWRfaXJxX2luLAorCQkJIHhwYWQsIGVwX2lycV9pbi0+YkludGVydmFsKTsKKwl4cGFkLT5pcnFfaW4tPnRyYW5zZmVyX2RtYSA9IHhwYWQtPmlkYXRhX2RtYTsKKwl4cGFkLT5pcnFfaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQorCXhwYWQtPnVkZXYgPSB1ZGV2OworCQorCXhwYWQtPmRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwl4cGFkLT5kZXYuaWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJeHBhZC0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJeHBhZC0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJeHBhZC0+ZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJeHBhZC0+ZGV2LnByaXZhdGUgPSB4cGFkOworCXhwYWQtPmRldi5uYW1lID0geHBhZF9kZXZpY2VbaV0ubmFtZTsKKwl4cGFkLT5kZXYucGh5cyA9IHhwYWQtPnBoeXM7CisJeHBhZC0+ZGV2Lm9wZW4gPSB4cGFkX29wZW47CisJeHBhZC0+ZGV2LmNsb3NlID0geHBhZF9jbG9zZTsKKwkKKwl1c2JfbWFrZV9wYXRoKHVkZXYsIHBhdGgsIDY0KTsKKwlzbnByaW50Zih4cGFkLT5waHlzLCA2NCwgICIlcy9pbnB1dDAiLCBwYXRoKTsKKwkKKwl4cGFkLT5kZXYuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCQorCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKKwkJc2V0X2JpdCh4cGFkX2J0bltpXSwgeHBhZC0+ZGV2LmtleWJpdCk7CisJCisJZm9yIChpID0gMDsgeHBhZF9hYnNbaV0gPj0gMDsgaSsrKSB7CisJCQorCQlzaWduZWQgc2hvcnQgdCA9IHhwYWRfYWJzW2ldOworCQkKKwkJc2V0X2JpdCh0LCB4cGFkLT5kZXYuYWJzYml0KTsKKwkJCisJCXN3aXRjaCAodCkgeworCQkJY2FzZSBBQlNfWDoKKwkJCWNhc2UgQUJTX1k6CisJCQljYXNlIEFCU19SWDoKKwkJCWNhc2UgQUJTX1JZOgkvKiB0aGUgdHdvIHN0aWNrcyAqLworCQkJCXhwYWQtPmRldi5hYnNtYXhbdF0gPSAgMzI3Njc7CisJCQkJeHBhZC0+ZGV2LmFic21pblt0XSA9IC0zMjc2ODsKKwkJCQl4cGFkLT5kZXYuYWJzZmxhdFt0XSA9IDEyODsKKwkJCQl4cGFkLT5kZXYuYWJzZnV6elt0XSA9IDE2OworCQkJCWJyZWFrOworCQkJY2FzZSBBQlNfWjoKKwkJCWNhc2UgQUJTX1JaOgkvKiB0aGUgdHJpZ2dlcnMgKi8KKwkJCQl4cGFkLT5kZXYuYWJzbWF4W3RdID0gMjU1OworCQkJCXhwYWQtPmRldi5hYnNtaW5bdF0gPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBBQlNfSEFUMFg6CisJCQljYXNlIEFCU19IQVQwWToJLyogdGhlIGQtcGFkICovCisJCQkJeHBhZC0+ZGV2LmFic21heFt0XSA9ICAxOworCQkJCXhwYWQtPmRldi5hYnNtaW5bdF0gPSAtMTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwkKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJnhwYWQtPmRldik7CisJCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzIG9uICVzIiwgeHBhZC0+ZGV2Lm5hbWUsIHBhdGgpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgeHBhZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHhwYWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmICh4cGFkKSB7CisJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4pOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmeHBhZC0+ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKHhwYWQtPmlycV9pbik7CisJCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBYUEFEX1BLVF9MRU4sIHhwYWQtPmlkYXRhLCB4cGFkLT5pZGF0YV9kbWEpOworCQlrZnJlZSh4cGFkKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4cGFkX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInhwYWQiLAorCS5wcm9iZQkJPSB4cGFkX3Byb2JlLAorCS5kaXNjb25uZWN0CT0geHBhZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHhwYWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfeHBhZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkKKwkJaW5mbyhEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfeHBhZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnhwYWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3hwYWRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfeHBhZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIzMmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZwpAQCAtMCwwICsxLDIxMyBAQAorIworIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIE11bHRpbWVkaWEgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0RBQlVTQgorCXRyaXN0YXRlICJEQUJVU0IgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgQSBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKSBSZWNlaXZlciBmb3IgVVNCIGFuZCBMaW51eAorCSAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCisJICA8aHR0cDovL3d3d2JvZGUuY3MudHVtLmVkdS9QYXIvYXJjaC9kYWIvPi4gIFRoaXMgZHJpdmVyIGNhbiBiZSB0YWtlbgorCSAgYXMgYW4gZXhhbXBsZSBmb3IgVVJCLWJhc2VkIGJ1bGssIGNvbnRyb2wsIGFuZCBpc29jaHJvbm91cworCSAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgorCitjb21tZW50ICJWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWPW4KKworY29uZmlnIFVTQl9WSUNBTQorCXRyaXN0YXRlICJVU0IgM2NvbSBIb21lQ29ubmVjdCAoYWthIHZpY2FtKSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIDNjb20gaG9tZWNvbm5lY3QgY2FtZXJhICh2aWNhbSkuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWNhbS4KKworY29uZmlnIFVTQl9EU0JSCisJdHJpc3RhdGUgIkQtTGluayBVU0IgRk0gcmFkaW8gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiByYWRpbyB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBOb3RlIHRoYXQgdGhlIGF1ZGlvIGlzIG5vdCBkaWdpdGFsLCBhbmQKKwkgIHlvdSBtdXN0IGNvbm5lY3QgdGhlIGxpbmUgb3V0IGNvbm5lY3RvciB0byBhIHNvdW5kIGNhcmQgb3IgYQorCSAgc2V0IG9mIHNwZWFrZXJzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCisJICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKKwkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bworCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHNicjEwMC4KKworY29uZmlnIFVTQl9JQk1DQU0KKwl0cmlzdGF0ZSAiVVNCIElCTSAoWGlybGluaykgQy1pdCBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBJQk0gIkMtSXQiIGNhbWVyYSwgYWxzbyBrbm93biBhcworCSAgIlhpcmxpbmsgUEMgQ2FtZXJhIiB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuICBGb3IgbW9yZQorCSAgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dD4uCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuICBZb3UgbXVzdCBlbmFibGUKKwkgIChZIG9yIE0gaW4gY29uZmlnKSBWaWRlbyBGb3IgTGludXggKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKQorCSAgdG8gdXNlIHRoaXMgZHJpdmVyLiAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvCisJICAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpYm1jYW0uCisKKwkgIFRoaXMgY2FtZXJhIGhhcyBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaAorCSAgY2FuIGJlIHNwZWNpZmllZCB3aGVuIHlvdSBsb2FkIHRoZSBtb2R1bGUuIFJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQ+IHRvIGxlYXJuIG1vcmUuCisKK2NvbmZpZyBVU0JfS09OSUNBV0MKKwl0cmlzdGF0ZSAiVVNCIEtvbmljYSBXZWJjYW0gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHdlYmNhbXMgYmFzZWQgb24gYSBLb25pY2EKKwkgIGNoaXBzZXQuIFRoaXMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBJbnRlbCBZQzc2IHdlYmNhbS4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQorCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCisJICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KKwkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtvbmljYXdjLgorCitjb25maWcgVVNCX09WNTExCisJdHJpc3RhdGUgIlVTQiBPVjUxMSBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivb3Y1MTEudHh0PiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24gYW5kIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG92NTExLgorCitjb25maWcgVVNCX1NFNDAxCisJdHJpc3RhdGUgIlVTQiBTRTQwMSBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc2U0MDEudHh0PiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24gYW5kIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZTQwMS4KKworY29uZmlnIFVTQl9TTjlDMTAyCisJdHJpc3RhdGUgIlVTQiBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIFNPTmlYIFNOOUMxMDEsCisJICBTTjlDMTAyIG9yIFNOOUMxMDMgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgdG8gdXNlIHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbjljMTAyLgorCitjb25maWcgVVNCX1NUVjY4MAorCXRyaXN0YXRlICJVU0IgU1RWNjgwIChQZW5jYW0pIENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaW5jbHVkZXMgdGhlIFBlbmNhbSBsaW5lIG9mIGNhbWVyYXMuCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGZvcgorCSAgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgTXVsdGltZWRpYSBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCisJICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCisJICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3R2NjgwLgorCitjb25maWcgVVNCX1c5OTY4Q0YKKwl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gT1Y2ODEgb3IKKwkgIFdpbmJvbmQgVzk5NjdDRi9XOTk2OENGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcHMuCisJCisJICBUaGlzIGRyaXZlciBoYXMgYW4gb3B0aW9uYWwgcGx1Z2luLCB3aGljaCBpcyBkaXN0cmlidXRlZCBhcyBhCisJICBzZXBhcmF0ZSBtb2R1bGUgb25seSAocmVsZWFzZWQgdW5kZXIgR1BMKS4gSXQgYWxsb3dzIHRvIHVzZSBoaWdoZXIgCisJICByZXNvbHV0aW9ucyBhbmQgZnJhbWVyYXRlcywgYnV0IGNhbm5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgb2ZmaWNpYWwgCisJICBMaW51eCBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2VzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IGFuZCB0aGUgSTJDIEFQSXMuIEl0IG5lZWRzIHRoZQorCSAgT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCBzdXBwb3J0IGFzIHdlbGwuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiLCAiSTJDIFN1cHBvcnQiIGFuZCAiT21uaVZpc2lvbiBDYW1lcmEgQ2hpcCAKKwkgIHN1cHBvcnQiIHRvIHVzZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdzk5NjhjZi4KKworY29uZmlnIFVTQl9QV0MKKwl0cmlzdGF0ZSAiVVNCIFBoaWxpcHMgQ2FtZXJhcyIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGVzZSBQaGlsaXBzICYgT0VNCisgICAgICAgICAgd2ViY2FtczoKKyAgICAgICAgICAgKiBQaGlsaXBzIFBDQTY0NSwgUENBNjQ2CisgICAgICAgICAgICogUGhpbGlwcyBQQ1ZDNjc1LCBQQ1ZDNjgwLCBQQ1ZDNjkwCisgICAgICAgICAgICogUGhpbGlwcyBQQ1ZDNzIwLzQwLCBQQ1ZDNzMwLCBQQ1ZDNzQwLCBQQ1ZDNzUwCisJICAgKiBBc2tleSBWQzAxMAorCSAgICogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAsIDQwMDAsICdab29tJywgJ05vdGVib29rIFBybycgCisgICAgICAgICAgICAgYW5kICdPcmJpdCcvJ1NwaGVyZScKKyAgICAgICAgICAgKiBTYW1zdW5nIE1QQy1DMTAsIE1QQy1DMzAKKwkgICAqIENyZWF0aXZlIFdlYmNhbSA1LCBQcm8gRXgKKwkgICAqIFNPVEVDIEFmaW5hIEV5ZQorCSAgICogVmlzaW9uaXRlIFZDUy1VQzMwMCwgVkNTLVVNMTAwCisJICAgCisJICBUaGUgUENBNjM1LCBQQ1ZDNjY1IGFuZCBQQ1ZDNzIwLzIwIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJICBhbmQgbmV2ZXIgd2lsbCBiZSwgYnV0IHRoZSA2NjUgYW5kIDcyMC8yMCBhcmUgc3VwcG9ydGVkIGJ5IG90aGVyIAorCSAgZHJpdmVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3BoaWxpcHMudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQKKwkgIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCisKKwkgIFRoZSBidWlsdC1pbiBtaWNyb3Bob25lIGlzIGVuYWJsZWQgYnkgc2VsZWN0aW5nIFVTQiBBdWRpbyBzdXBwb3J0LgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwd2MuCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tZWRpYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjc2ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIworIyBNYWtlZmlsZSBmb3IgVVNCIE1lZGlhIGRyaXZlcnMKKyMKKworc245YzEwMi1vYmpzCTo9IHNuOWMxMDJfY29yZS5vIHNuOWMxMDJfaHY3MTMxZC5vIHNuOWMxMDJfbWkwMzQzLm8gc245YzEwMl9wYXMxMDZiLm8gc245YzEwMl9wYXMyMDJiY2IubyBzbjljMTAyX3RhczUxMTBjMWIubyBzbjljMTAyX3RhczUxMzBkMWIubworCitvYmotJChDT05GSUdfVVNCX0RBQlVTQikJKz0gZGFidXNiLm8KK29iai0kKENPTkZJR19VU0JfRFNCUikJCSs9IGRzYnIxMDAubworb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pCSs9IGlibWNhbS5vIHVzYnZpZGVvLm8gdWx0cmFjYW0ubworb2JqLSQoQ09ORklHX1VTQl9LT05JQ0FXQykJKz0ga29uaWNhd2MubyB1c2J2aWRlby5vCitvYmotJChDT05GSUdfVVNCX09WNTExKQkJKz0gb3Y1MTEubworb2JqLSQoQ09ORklHX1VTQl9TRTQwMSkJCSs9IHNlNDAxLm8KK29iai0kKENPTkZJR19VU0JfU045QzEwMikJKz0gc245YzEwMi5vCitvYmotJChDT05GSUdfVVNCX1NUVjY4MCkJKz0gc3R2NjgwLm8KK29iai0kKENPTkZJR19VU0JfVklDQU0pCQkrPSB2aWNhbS5vIHVzYnZpZGVvLm8KK29iai0kKENPTkZJR19VU0JfVzk5NjhDRikJKz0gdzk5NjhjZi5vCitvYmotJChDT05GSUdfVVNCX1BXQykgICAgICAgICAgICs9IHB3Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYmZpcm13YXJlLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJmaXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNGQ4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJmaXJtd2FyZS5oCkBAIC0wLDAgKzEsMTQwOCBAQAorLyoKKyAqIGRhYmRhdGEuaCAtIGRhYiB1c2IgZmlybXdhcmUgYW5kIGJpdHN0cmVhbSBkYXRhCisgKi8KKworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZmlybXdhcmVbXSA9IHsKKworeyAgMiwgMHgwMDAwLCAwLCB7MHgyMSwweDU3fSB9LAoreyAgMywgMHgwMDAzLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwMGIsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDAxMywgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDFiLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwMjMsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDAyYiwgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDMzLCAwLCB7MHgwMiwweDAzLDB4MGZ9IH0sCit7ICAzLCAweDAwM2IsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDA0MywgMCwgezB4MDIsMHgwMSwweDAwfSB9LAoreyAgMywgMHgwMDRiLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwNTMsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDA1YiwgMCwgezB4MDIsMHgwNCwweGJkfSB9LAoreyAgMywgMHgwMDYzLCAwLCB7MHgwMiwweDAxLDB4Njd9IH0sCit7ICAzLCAweDAxMDAsIDAsIHsweDAyLDB4MGMsMHg1YX0gfSwKK3sgIDMsIDB4MDEwNCwgMCwgezB4MDIsMHgwMSwweGVkfSB9LAoreyAgMywgMHgwMTA4LCAwLCB7MHgwMiwweDAyLDB4NTF9IH0sCit7ICAzLCAweDAxMGMsIDAsIHsweDAyLDB4MDIsMHg3Y30gfSwKK3sgIDMsIDB4MDExMCwgMCwgezB4MDIsMHgwMiwweGU0fSB9LAoreyAgMSwgMHgwMTE0LCAwLCB7MHgzMn0gfSwKK3sgIDEsIDB4MDExOCwgMCwgezB4MzJ9IH0sCit7ICAzLCAweDAxMWMsIDAsIHsweDAyLDB4MDUsMHhmZH0gfSwKK3sgIDMsIDB4MDEyMCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTI0LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxMjgsIDAsIHsweDAyLDB4MDQsMHgzY30gfSwKK3sgIDMsIDB4MDEyYywgMCwgezB4MDIsMHgwNCwweDZhfSB9LAoreyAgMywgMHgwMTMwLCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxMzQsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDEzOCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTNjLCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxNDAsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDE0NCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTQ4LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxNGMsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDE1MCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTU0LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7IDEwLCAweDAxNTcsIDAsIHsweDc1LDB4ODEsMHg3ZiwweGU1LDB4ODIsMHg2MCwweDAzLDB4MDIsMHgwMSwweDYxfSB9LAoreyAgNSwgMHgwMTYxLCAwLCB7MHgxMiwweDA3LDB4NmYsMHgyMSwweDY0fSB9LAoreyAgMSwgMHgwMTY2LCAwLCB7MHgzMn0gfSwKK3sgMTQsIDB4MDE2NywgMCwgezB4YzAsMHhkMCwweGMwLDB4ODYsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHg5MCwweDdmLDB4OTcsMHhlMH0gfSwKK3sgMTQsIDB4MDE3NSwgMCwgezB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDY5LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0gfSwKK3sgMTQsIDB4MDE4MywgMCwgezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0gfSwKK3sgMTQsIDB4MDE5MSwgMCwgezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMH0gfSwKK3sgIDMsIDB4MDE5ZiwgMCwgezB4NTUsMHg3ZiwweGYwfSB9LAoreyAxNCwgMHgwMWEyLCAwLCB7MHg5MCwweDdmLDB4OWEsMHhlMCwweDMwLDB4ZTQsMHgyMywweDkwLDB4N2YsMHg2OCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMWIwLCAwLCB7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMWJlLCAwLCB7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMWNjLCAwLCB7MHhlNSwweGQ4LDB4YzIsMHhlMywweGY1LDB4ZDgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweDg2fSB9LAoreyAgMywgMHgwMWRhLCAwLCB7MHhkMCwweGQwLDB4MzJ9IH0sCit7ICA4LCAweDAxZGQsIDAsIHsweDc1LDB4ODYsMHgwMCwweDkwLDB4ZmYsMHhjMywweDdjLDB4MDV9IH0sCit7ICA3LCAweDAxZTUsIDAsIHsweGEzLDB4ZTUsMHg4MiwweDQ1LDB4ODMsMHg3MCwweGY5fSB9LAoreyAgMSwgMHgwMWVjLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDFlZCwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHhkMH0gfSwKK3sgMTQsIDB4MDFmYiwgMCwgezB4NzUsMHhkMCwweDAwLDB4YzAsMHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MX0gfSwKK3sgMTMsIDB4MDIwOSwgMCwgezB4OTAsMHg4OCwweDAwLDB4ZTAsMHhmNSwweDQxLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4OTB9IH0sCit7ICA5LCAweDAyMTYsIDAsIHsweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhlNSwweDMyLDB4NjAsMHgyMX0gfSwKK3sgIDQsIDB4MDIxZiwgMCwgezB4N2EsMHgwMCwweDdiLDB4MDB9IH0sCit7IDExLCAweDAyMjMsIDAsIHsweGMzLDB4ZWEsMHg5NCwweDE4LDB4ZWIsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MTJ9IH0sCit7IDE0LCAweDAyMmUsIDAsIHsweDkwLDB4N2YsMHg2OSwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwYSwweGJhLDB4MDB9IH0sCit7ICAyLCAweDAyM2MsIDAsIHsweDAxLDB4MGJ9IH0sCit7ICAyLCAweDAyM2UsIDAsIHsweDgwLDB4ZTN9IH0sCit7ICAyLCAweDAyNDAsIDAsIHsweGQwLDB4ODZ9IH0sCit7IDE0LCAweDAyNDIsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAzLDB4ZDAsMHgwMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTB9IH0sCit7ICAxLCAweDAyNTAsIDAsIHsweDMyfSB9LAoreyAxNCwgMHgwMjUxLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxNCwgMHgwMjVmLCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwLDB4N2YsMHhhYiwweDc0fSB9LAoreyAgNCwgMHgwMjZkLCAwLCB7MHgwNCwweGYwLDB4ZDAsMHg4Nn0gfSwKK3sgMTEsIDB4MDI3MSwgMCwgezB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTQsIDB4MDI3YywgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNH0gfSwKK3sgMTQsIDB4MDI4YSwgMCwgezB4YzAsMHgwNSwweGMwLDB4MDYsMHhjMCwweDA3LDB4YzAsMHgwMCwweGMwLDB4MDEsMHhjMCwweGQwLDB4NzUsMHhkMH0gfSwKK3sgMTMsIDB4MDI5OCwgMCwgezB4MDAsMHhjMCwweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTB9IH0sCit7IDEyLCAweDAyYTUsIDAsIHsweDdmLDB4YWIsMHg3NCwweDA4LDB4ZjAsMHg3NSwweDZlLDB4MDAsMHg3NSwweDZmLDB4MDIsMHgxMn0gfSwKK3sgIDYsIDB4MDJiMSwgMCwgezB4MTEsMHg0NCwweDc1LDB4NzAsMHgzOSwweDc1fSB9LAoreyAgNiwgMHgwMmI3LCAwLCB7MHg3MSwweDBjLDB4NzUsMHg3MiwweDAyLDB4MTJ9IH0sCit7IDEyLCAweDAyYmQsIDAsIHsweDExLDB4NzUsMHg5MCwweDdmLDB4ZDYsMHhlNCwweGYwLDB4NzUsMHhkOCwweDIwLDB4ZDAsMHg4Nn0gfSwKK3sgMTQsIDB4MDJjOSwgMCwgezB4ZDAsMHhkMCwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDA1LDB4ZDAsMHgwNH0gfSwKK3sgMTMsIDB4MDJkNywgMCwgezB4ZDAsMHgwMywweGQwLDB4MDIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDAyZTQsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDE0LCAweDAyZjIsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTAsMHg3ZiwweGFiLDB4NzR9IH0sCit7ICA0LCAweDAzMDAsIDAsIHsweDEwLDB4ZjAsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwMzA0LCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwMzBmLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwMzFkLCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMiwgMHgwMzJiLCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHg3NSwweDZlLDB4MDAsMHg3NSwweDZmLDB4MDJ9IH0sCit7ICA3LCAweDAzMzcsIDAsIHsweDEyLDB4MTEsMHg0NCwweDc1LDB4NzAsMHg0MCwweDc1fSB9LAoreyAgNiwgMHgwMzNlLCAwLCB7MHg3MSwweDBjLDB4NzUsMHg3MiwweDAyLDB4MTJ9IH0sCit7IDE0LCAweDAzNDQsIDAsIHsweDExLDB4NzUsMHg5MCwweDdmLDB4ZDYsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDdmLDB4ZDYsMHg3NCwweDA2LDB4ZjB9IH0sCit7ICA1LCAweDAzNTIsIDAsIHsweDc1LDB4ZDgsMHgxMCwweGQwLDB4ODZ9IH0sCit7IDE0LCAweDAzNTcsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDEzLCAweDAzNjUsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxMywgMHgwMzcyLCAwLCB7MHg5MCwweDdmLDB4YTUsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4YTYsMHg3NCwweDlhLDB4ZjAsMHgxMn0gfSwKK3sgMTIsIDB4MDM3ZiwgMCwgezB4MTAsMHgxYiwweDkwLDB4N2YsMHhhNiwweGU1LDB4NDIsMHhmMCwweDEyLDB4MTAsMHgxYiwweDkwfSB9LAoreyAxMywgMHgwMzhiLCAwLCB7MHg3ZiwweGE2LDB4ZTUsMHg0MywweGYwLDB4MTIsMHgxMCwweDFiLDB4OTAsMHg3ZiwweGE1LDB4NzQsMHg0MH0gfSwKK3sgIDEsIDB4MDM5OCwgMCwgezB4ZjB9IH0sCit7ICAxLCAweDAzOTksIDAsIHsweDIyfSB9LAoreyAxMywgMHgwMzlhLCAwLCB7MHg5MCwweDdmLDB4YTUsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4YTYsMHg3NCwweDlhLDB4ZjAsMHgxMn0gfSwKK3sgMTIsIDB4MDNhNywgMCwgezB4MTAsMHgxYiwweDkwLDB4N2YsMHhhNiwweGU1LDB4NDQsMHhmMCwweDEyLDB4MTAsMHgxYiwweDkwfSB9LAoreyAxMiwgMHgwM2IzLCAwLCB7MHg3ZiwweGE2LDB4ZTUsMHg0NSwweGYwLDB4MTIsMHgxMCwweDFiLDB4OTAsMHg3ZiwweGE2LDB4ZTV9IH0sCit7IDExLCAweDAzYmYsIDAsIHsweDQ2LDB4ZjAsMHgxMiwweDEwLDB4MWIsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwLDB4ZjB9IH0sCit7ICAxLCAweDAzY2EsIDAsIHsweDIyfSB9LAoreyAxMCwgMHgwM2NiLCAwLCB7MHg3NSwweDQ0LDB4MDIsMHg3NSwweDQ1LDB4MDAsMHg3NSwweDQ2LDB4MDAsMHgxMn0gfSwKK3sgIDksIDB4MDNkNSwgMCwgezB4MDMsMHg5YSwweDc1LDB4NDIsMHgwMywweDc1LDB4NDMsMHgwMCwweDEyfSB9LAoreyAgMiwgMHgwM2RlLCAwLCB7MHgwMywweDcyfSB9LAoreyAgMSwgMHgwM2UwLCAwLCB7MHgyMn0gfSwKK3sgMTIsIDB4MDNlMSwgMCwgezB4OTAsMHg4OCwweDAwLDB4ZTUsMHgzNiwweGYwLDB4OTAsMHg4OCwweDAwLDB4NzQsMHgxMCwweDI1fSB9LAoreyAgOSwgMHgwM2VkLCAwLCB7MHgzNiwweGYwLDB4MTIsMHgwMSwweGRkLDB4NzUsMHg0MiwweDAxLDB4NzV9IH0sCit7ICA5LCAweDAzZjYsIDAsIHsweDQzLDB4MTgsMHgxMiwweDAzLDB4NzIsMHg3NSwweDQ0LDB4MDIsMHg3NX0gfSwKK3sgIDksIDB4MDNmZiwgMCx7MHg0NSwweDAwLDB4NzUsMHg0NiwweDAwLDB4MTIsMHgwMywweDlhLDB4NzV9IH0sCit7ICA4LCAweDA0MDgsIDAsezB4NDIsMHgwMywweDc1LDB4NDMsMHg0NCwweDEyLDB4MDMsMHg3Mn0gfSwKK3sgIDEsIDB4MDQxMCwgMCx7MHgyMn0gfSwKK3sgMTQsIDB4MDQxMSwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHg3NSwweGQwLDB4MDAsMHhjMH0gfSwKK3sgMTQsIDB4MDQxZiwgMCwgezB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MCwweDdmLDB4YWEsMHg3NH0gfSwKK3sgIDQsIDB4MDQyZCwgMCwgezB4MDIsMHhmMCwweGQwLDB4ODZ9IH0sCit7IDExLCAweDA0MzEsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDA0M2MsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDE0LCAweDA0NGEsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTAsMHg3ZiwweGE5LDB4NzR9IH0sCit7ICA3LCAweDA0NTgsIDAsIHsweDA0LDB4ZjAsMHg3NSwweDMwLDB4MDEsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwNDVmLCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNDZhLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxNCwgMHgwNDc4LCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwLDB4N2YsMHhhYSwweDc0fSB9LAoreyAgNywgMHgwNDg2LCAwLCB7MHgwNCwweGYwLDB4NzUsMHgzMSwweDAxLDB4ZDAsMHg4Nn0gfSwKK3sgMTEsIDB4MDQ4ZCwgMCwgezB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTQsIDB4MDQ5OCwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHg3NSwweGQwLDB4MDAsMHhjMH0gfSwKK3sgMTIsIDB4MDRhNiwgMCwgezB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNSwweGY1LDB4OTEsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwNGIyLCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNGJkLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxMiwgMHgwNGNiLCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU3LDB4ZjUsMHg5MSwweGQwLDB4ODZ9IH0sCit7IDExLCAweDA0ZDcsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDEyLCAweDA0ZTIsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg4YSwweDIwLDB4OTAsMHg3ZiwweDk2LDB4ZTQsMHhmMH0gfSwKK3sgIDEsIDB4MDRlZSwgMCwgezB4MjJ9IH0sCit7ICA3LCAweDA0ZWYsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg4YSwweDIxfSB9LAoreyAgMSwgMHgwNGY2LCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDRmNywgMCwgezB4OTAsMHgxNywweDEzLDB4ZTAsMHhmYSwweDkwLDB4MTcsMHgxNSwweGUwLDB4ZmIsMHg3NCwweDgwLDB4MmEsMHhmYX0gfSwKK3sgMTQsIDB4MDUwNSwgMCwgezB4NzQsMHg4MCwweDJiLDB4ZmIsMHhlYSwweDAzLDB4MDMsMHg1NCwweDNmLDB4ZmMsMHhlYSwweGM0LDB4MjMsMHg1NH0gfSwKK3sgMTQsIDB4MDUxMywgMCwgezB4MWYsMHhmYSwweDJjLDB4ZmEsMHhlYiwweDAzLDB4MDMsMHg1NCwweDNmLDB4ZmMsMHhlYiwweGM0LDB4MjMsMHg1NH0gfSwKK3sgMTEsIDB4MDUyMSwgMCwgezB4MWYsMHhmYiwweDJjLDB4ZmIsMHg5MCwweDE3LDB4MGEsMHhlMCwweGZjLDB4NjAsMHgwMn0gfSwKK3sgIDIsIDB4MDUyYywgMCwgezB4N2EsMHgwMH0gfSwKK3sgIDcsIDB4MDUyZSwgMCwgezB4OTAsMHgxNywweDBjLDB4ZTAsMHhmYywweDYwLDB4MDJ9IH0sCit7ICAyLCAweDA1MzUsIDAsIHsweDdiLDB4MDB9IH0sCit7IDExLCAweDA1MzcsIDAsIHsweGVhLDB4MmIsMHhmYywweGMzLDB4MTMsMHhmNSwweDNhLDB4NzUsMHg0NCwweDAyLDB4OGJ9IH0sCit7ICA3LCAweDA1NDIsIDAsIHsweDQ1LDB4OGEsMHg0NiwweDEyLDB4MDMsMHg5YSwweDc1fSB9LAoreyAgOSwgMHgwNTQ5LCAwLCB7MHg2ZSwweDA4LDB4NzUsMHg2ZiwweDAwLDB4MTIsMHgxMSwweDQ0LDB4NzV9IH0sCit7ICA0LCAweDA1NTIsIDAsIHsweDcwLDB4NDcsMHg3NSwweDcxfSB9LAoreyAgOCwgMHgwNTU2LCAwLCB7MHgwYywweDc1LDB4NzIsMHgwMiwweDEyLDB4MTEsMHg3NSwweDg1fSB9LAoreyAgNSwgMHgwNTVlLCAwLCB7MHgzYSwweDczLDB4MTIsMHgxMSwweGEwfSB9LAoreyAgMSwgMHgwNTYzLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDU2NCwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5NiwweDc0LDB4ODAsMHg2NSwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDU3MiwgMCwgezB4N2YsMHhlYiwweGUwLDB4ZmEsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZiLDB4OTAsMHg3ZiwweGVmLDB4ZTAsMHhmY30gfSwKK3sgMTQsIDB4MDU4MCwgMCwgezB4MzMsMHg5NSwweGUwLDB4ZmQsMHg4YywweDA1LDB4N2MsMHgwMCwweDkwLDB4N2YsMHhlZSwweGUwLDB4ZmUsMHgzM30gfSwKK3sgMTQsIDB4MDU4ZSwgMCwgezB4OTUsMHhlMCwweGZmLDB4ZWMsMHgyZSwweGZjLDB4ZWQsMHgzZiwweGZkLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHhmZX0gfSwKK3sgIDUsIDB4MDU5YywgMCwgezB4YmUsMHgwMSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MDVhMSwgMCwgezB4MDIsMHgwNSwweGY5fSB9LAoreyAgNiwgMHgwNWE0LCAwLCB7MHhiYywweDAxLDB4MjEsMHhiZCwweDAwLDB4MWV9IH0sCit7IDE0LCAweDA1YWEsIDAsIHsweGVhLDB4YzQsMHgwMywweDU0LDB4ZjgsMHhmYywweGViLDB4MjUsMHhlMCwweGZkLDB4MmMsMHgyNCwweDAwLDB4ZmN9IH0sCit7IDE0LCAweDA1YjgsIDAsIHsweGU0LDB4MzQsMHgxNywweGZkLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZSwweDhjLDB4ODIsMHg4ZCwweDgzLDB4ZjB9IH0sCit7ICAyLCAweDA1YzYsIDAsIHsweDgwLDB4MzF9IH0sCit7IDE0LCAweDA1YzgsIDAsIHsweGVhLDB4YzQsMHgwMywweDU0LDB4ZjgsMHhmYSwweGViLDB4MjUsMHhlMCwweGZiLDB4MmEsMHhmYSwweDI0LDB4MDB9IH0sCit7IDE0LCAweDA1ZDYsIDAsIHsweGZiLDB4ZTQsMHgzNCwweDE3LDB4ZmMsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZkLDB4OGIsMHg4MiwweDhjLDB4ODN9IH0sCit7IDE0LCAweDA1ZTQsIDAsIHsweGYwLDB4NzQsMHgwMSwweDJhLDB4MjQsMHgwMCwweGZhLDB4ZTQsMHgzNCwweDE3LDB4ZmIsMHg5MCwweDdlLDB4YzF9IH0sCit7ICA3LCAweDA1ZjIsIDAsIHsweGUwLDB4ZmMsMHg4YSwweDgyLDB4OGIsMHg4MywweGYwfSB9LAoreyAgMywgMHgwNWY5LCAwLCB7MHg3NSwweDM4LDB4MDF9IH0sCit7ICAxLCAweDA1ZmMsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwNWZkLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwNjBiLCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMywgMHgwNjE5LCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MH0gfSwKK3sgMTMsIDB4MDYyNiwgMCwgezB4N2YsMHhhYSwweDc0LDB4MDEsMHhmMCwweDEyLDB4MDUsMHg2NCwweDc1LDB4MzcsMHgwMCwweGQwLDB4ODZ9IH0sCit7IDE0LCAweDA2MzMsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDEzLCAweDA2NDEsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNjRlLCAwLCB7MHg5MCwweDdmLDB4ZWIsMHhlMCwweGZhLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYiwweDkwLDB4N2YsMHhlZSwweGUwfSB9LAoreyAxNCwgMHgwNjVjLCAwLCB7MHhmYywweDMzLDB4OTUsMHhlMCwweGZkLDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmZSwweDkwLDB4N2YsMHg5NiwweDc0fSB9LAoreyAxNCwgMHgwNjZhLCAwLCB7MHg4MCwweDY1LDB4MDYsMHhmMCwweDkwLDB4N2YsMHgwMCwweDc0LDB4MDEsMHhmMCwweGVhLDB4YzQsMHgwMywweDU0fSB9LAoreyAxNCwgMHgwNjc4LCAwLCB7MHhmOCwweGZlLDB4ZWIsMHgyNSwweGUwLDB4ZmIsMHgyZSwweGZlLDB4MjQsMHgwMCwweGZiLDB4ZTQsMHgzNCwweDE3fSB9LAoreyAxNCwgMHgwNjg2LCAwLCB7MHhmZiwweDhiLDB4ODIsMHg4ZiwweDgzLDB4ZTAsMHhmYiwweDc0LDB4MDEsMHgyZSwweDI0LDB4MDAsMHhmZSwweGU0fSB9LAoreyAxNCwgMHgwNjk0LCAwLCB7MHgzNCwweDE3LDB4ZmYsMHg4ZSwweDgyLDB4OGYsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZTksMHhlMCwweGZmfSB9LAoreyAgMywgMHgwNmEyLCAwLCB7MHhiZiwweDgxLDB4MGF9IH0sCit7IDEwLCAweDA2YTUsIDAsIHsweDkwLDB4N2YsMHgwMCwweGViLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlZSwweGYwfSB9LAoreyAgOCwgMHgwNmFmLCAwLCB7MHg5MCwweDdmLDB4ZTksMHhlMCwweGZiLDB4YmIsMHg4MiwweDFhfSB9LAoreyAgMywgMHgwNmI3LCAwLCB7MHhiYSwweDAxLDB4MGN9IH0sCit7IDEyLCAweDA2YmEsIDAsIHsweDkwLDB4N2YsMHgwMCwweGU0LDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4ODAsMHgwYn0gfSwKK3sgMTEsIDB4MDZjNiwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHgwMSwweDc0LDB4YjUsMHhmMH0gfSwKK3sgIDgsIDB4MDZkMSwgMCwgezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHhmYiwweGJiLDB4ODMsMHgxYn0gfSwKK3sgIDMsIDB4MDZkOSwgMCwgezB4YmEsMHgwMSwweDBkfSB9LAoreyAxMywgMHgwNmRjLCAwLCB7MHg5MCwweDdmLDB4MDAsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4ODAsMHgwYn0gfSwKK3sgMTEsIDB4MDZlOSwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHgwMSwweDc0LDB4MTIsMHhmMH0gfSwKK3sgIDgsIDB4MDZmNCwgMCwgezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHhmYiwweGJiLDB4ODQsMHgxY30gfSwKK3sgIDMsIDB4MDZmYywgMCwgezB4YmEsMHgwMSwweDBkfSB9LAoreyAxMywgMHgwNmZmLCAwLCB7MHg5MCwweDdmLDB4MDAsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4ODAsMHgwY30gfSwKK3sgMTIsIDB4MDcwYywgMCwgezB4OTAsMHg3ZiwweDAwLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDAxLDB4NzQsMHgwMSwweGYwfSB9LAoreyAgNSwgMHgwNzE4LCAwLCB7MHg5MCwweDdmLDB4YjUsMHhlYywweGYwfSB9LAoreyAgMSwgMHgwNzFkLCAwLCB7MHgyMn0gfSwKK3sgMTIsIDB4MDcxZSwgMCwgezB4NzUsMHgzNiwweDBkLDB4OTAsMHg4OCwweDAwLDB4NzQsMHgxZCwweGYwLDB4NzUsMHg2YiwweDgwfSB9LAoreyAxMCwgMHgwNzJhLCAwLCB7MHg3NSwweDZjLDB4M2MsMHgxMiwweDEwLDB4ZTIsMHg3NSwweDZiLDB4ODAsMHg3NX0gfSwKK3sgIDksIDB4MDczNCwgMCwgezB4NmMsMHgwZiwweDEyLDB4MTAsMHhlMiwweDc1LDB4NmIsMHg4MCwweDc1fSB9LAoreyAgOSwgMHgwNzNkLCAwLCB7MHg2YywweDA2LDB4MTIsMHgxMCwweGUyLDB4NzUsMHg2YiwweDgwLDB4NzV9IH0sCit7ICA3LCAweDA3NDYsIDAsIHsweDZjLDB4MDEsMHgxMiwweDEwLDB4ZTIsMHg3YSwweDAwfSB9LAoreyAgMywgMHgwNzRkLCAwLCB7MHhiYSwweGZmLDB4MDB9IH0sCit7ICAyLCAweDA3NTAsIDAsIHsweDUwLDB4MGF9IH0sCit7IDEwLCAweDA3NTIsIDAsIHsweGMwLDB4MDIsMHgxMiwweDAxLDB4ZGQsMHhkMCwweDAyLDB4MGEsMHg4MCwweGYxfSB9LAoreyAxMCwgMHgwNzVjLCAwLCB7MHg3NSwweDZiLDB4ODAsMHg3NSwweDZjLDB4M2MsMHgxMiwweDEwLDB4ZTIsMHg3NX0gfSwKK3sgIDgsIDB4MDc2NiwgMCwgezB4NmIsMHg4MCwweDc1LDB4NmMsMHgwZiwweDEyLDB4MTAsMHhlMn0gfSwKK3sgIDEsIDB4MDc2ZSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDA3NmYsIDAsIHsweDkwLDB4N2YsMHhhMSwweGU0LDB4ZjAsMHg5MCwweDdmLDB4YWYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OTJ9IH0sCit7IDE0LCAweDA3N2QsIDAsIHsweDc0LDB4MDIsMHhmMCwweDc1LDB4OGUsMHgzMSwweDc1LDB4ODksMHgyMSwweDc1LDB4ODgsMHgwMCwweDc1LDB4Yzh9IH0sCit7IDE0LCAweDA3OGIsIDAsIHsweDAwLDB4NzUsMHg4ZCwweDQwLDB4NzUsMHg5OCwweDQwLDB4NzUsMHhjMCwweDQwLDB4NzUsMHg4NywweDAwLDB4NzV9IH0sCit7ICA5LCAweDA3OTksIDAsIHsweDIwLDB4MDAsMHg3NSwweDIxLDB4MDAsMHg3NSwweDIyLDB4MDAsMHg3NX0gfSwKK3sgIDUsIDB4MDdhMiwgMCwgezB4MjMsMHgwMCwweDc1LDB4NDcsMHgwMH0gfSwKK3sgIDcsIDB4MDdhNywgMCwgezB4YzMsMHhlNSwweDQ3LDB4OTQsMHgyMCwweDUwLDB4MTF9IH0sCit7IDEzLCAweDA3YWUsIDAsIHsweGU1LDB4NDcsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHgxNywweGY1LDB4ODMsMHhlNCwweGYwfSB9LAoreyAgNCwgMHgwN2JiLCAwLCB7MHgwNSwweDQ3LDB4ODAsMHhlOH0gfSwKK3sgIDksIDB4MDdiZiwgMCwgezB4ZTQsMHhmNSwweDQwLDB4ZjUsMHgzZiwweGU0LDB4ZjUsMHgzYywweGY1fSB9LAoreyAgNywgMHgwN2M4LCAwLCB7MHgzYiwweGU0LDB4ZjUsMHgzZSwweGY1LDB4M2QsMHg3NX0gfSwKK3sgMTEsIDB4MDdjZiwgMCwgezB4MzIsMHgwMCwweDc1LDB4MzcsMHgwMCwweDc1LDB4MzksMHgwMCwweDkwLDB4N2YsMHg5M30gfSwKK3sgMTQsIDB4MDdkYSwgMCwgezB4NzQsMHgzYywweGYwLDB4OTAsMHg3ZiwweDljLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg4MH0gfSwKK3sgMTQsIDB4MDdlOCwgMCwgezB4ZjAsMHg5MCwweDdmLDB4OTQsMHg3NCwweDcwLDB4ZjAsMHg5MCwweDdmLDB4OWQsMHg3NCwweDhmLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDdmNiwgMCwgezB4N2YsMHg5NywweGU0LDB4ZjAsMHg5MCwweDdmLDB4OTUsMHg3NCwweGMyLDB4ZjAsMHg5MCwweDdmLDB4OTgsMHg3NH0gfSwKK3sgMTQsIDB4MDgwNCwgMCwgezB4MjgsMHhmMCwweDkwLDB4N2YsMHg5ZSwweDc0LDB4MjgsMHhmMCwweDkwLDB4N2YsMHhmMCwweGU0LDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDgxMiwgMCwgezB4N2YsMHhmMSwweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZjIsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGYzLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MDgyMCwgMCwgezB4OTAsMHg3ZiwweGY0LDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhmNSwweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZjYsMHhlNH0gfSwKK3sgMTQsIDB4MDgyZSwgMCwgezB4ZjAsMHg5MCwweDdmLDB4ZjcsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGY4LDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhmOX0gfSwKK3sgMTQsIDB4MDgzYywgMCwgezB4NzQsMHgzOCwweGYwLDB4OTAsMHg3ZiwweGZhLDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweGZiLDB4NzQsMHhhMH0gfSwKK3sgMTQsIDB4MDg0YSwgMCwgezB4ZjAsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4ZmQsMHg3NCwweGEwLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDg1OCwgMCwgezB4N2YsMHhmZSwweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHhlMH0gfSwKK3sgMTQsIDB4MDg2NiwgMCwgezB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweGUxLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGRkLDB4NzQsMHg4MH0gfSwKK3sgMTEsIDB4MDg3NCwgMCwgezB4ZjAsMHgxMiwweDEyLDB4NDMsMHgxMiwweDA3LDB4MWUsMHg3YSwweDAwLDB4N2IsMHgwMH0gfSwKK3sgIDksIDB4MDg3ZiwgMCwgezB4YzMsMHhlYSwweDk0LDB4MWUsMHhlYiwweDk0LDB4MDAsMHg1MCwweDE3fSB9LAoreyAxMiwgMHgwODg4LCAwLCB7MHg5MCwweDg4LDB4MDAsMHhlMCwweGY1LDB4NDcsMHg5MCwweDg4LDB4MGIsMHhlMCwweGY1LDB4NDd9IH0sCit7ICA5LCAweDA4OTQsIDAsIHsweDkwLDB4N2YsMHg2OCwweGYwLDB4MGEsMHhiYSwweDAwLDB4MDEsMHgwYn0gfSwKK3sgIDIsIDB4MDg5ZCwgMCwgezB4ODAsMHhlMH0gfSwKK3sgMTIsIDB4MDg5ZiwgMCwgezB4MTIsMHgwMywweGUxLDB4OTAsMHg3ZiwweGQ2LDB4ZTQsMHhmMCwweDdhLDB4MDAsMHg3YiwweDAwfSB9LAoreyAxMywgMHgwOGFiLCAwLCB7MHg4YSwweDA0LDB4OGIsMHgwNSwweGMzLDB4ZWEsMHg5NCwweGUwLDB4ZWIsMHg5NCwweDJlLDB4NTAsMHgxYX0gfSwKK3sgMTQsIDB4MDhiOCwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMH0gfSwKK3sgMTAsIDB4MDhjNiwgMCwgezB4MDQsMHhkMCwweDAzLDB4ZDAsMHgwMiwweDBhLDB4YmEsMHgwMCwweDAxLDB4MGJ9IH0sCit7ICAyLCAweDA4ZDAsIDAsIHsweDgwLDB4ZDl9IH0sCit7IDEzLCAweDA4ZDIsIDAsIHsweDkwLDB4N2YsMHhkNiwweDc0LDB4MDIsMHhmMCwweDkwLDB4N2YsMHhkNiwweDc0LDB4MDYsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwOGRmLCAwLCB7MHg3ZiwweGRlLDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3ZiwweGRmLDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3ZiwweGFjfSB9LAoreyAxNCwgMHgwOGVkLCAwLCB7MHhlNCwweGYwLDB4OTAsMHg3ZiwweGFkLDB4NzQsMHgwNSwweGYwLDB4NzUsMHhhOCwweDgwLDB4NzUsMHhmOCwweDEwfSB9LAoreyAxMywgMHgwOGZiLCAwLCB7MHg5MCwweDdmLDB4YWUsMHg3NCwweDBiLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDg4LDB4ZjAsMHg5MH0gfSwKK3sgMTIsIDB4MDkwOCwgMCwgezB4N2YsMHhhYiwweDc0LDB4MDgsMHhmMCwweDc1LDB4ZTgsMHgxMSwweDc1LDB4MzIsMHgwMSwweDc1fSB9LAoreyAxMiwgMHgwOTE0LCAwLCB7MHgzMSwweDAwLDB4NzUsMHgzMCwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDA0LDB4Zjd9IH0sCit7IDEwLCAweDA5MjAsIDAsIHsweGQwLDB4MDUsMHhkMCwweDA0LDB4NzUsMHgzNCwweDAwLDB4NzUsMHgzNSwweDAxfSB9LAoreyAxMywgMHgwOTJhLCAwLCB7MHg5MCwweDdmLDB4YWUsMHg3NCwweDAzLDB4ZjAsMHg4YywweDAyLDB4YmEsMHgwMCwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MDkzNywgMCwgezB4MDIsMHgwYSwweDNmfSB9LAoreyAxMiwgMHgwOTNhLCAwLCB7MHg4NSwweDMzLDB4MzQsMHg5MCwweDdmLDB4OWQsMHg3NCwweDhmLDB4ZjAsMHg5MCwweDdmLDB4OTd9IH0sCit7IDE0LCAweDA5NDYsIDAsIHsweDc0LDB4MDgsMHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4ODgsMHhmMCwweDkwLDB4N2YsMHg5YSwweGUwLDB4ZmF9IH0sCit7IDEyLCAweDA5NTQsIDAsIHsweDc0LDB4MDUsMHg1YSwweGY1LDB4MzMsMHg5MCwweDdmLDB4OWQsMHg3NCwweDhmLDB4ZjAsMHg5MH0gfSwKK3sgMTMsIDB4MDk2MCwgMCwgezB4N2YsMHg5NywweDc0LDB4MDIsMHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4ODIsMHhmMCwweGU1LDB4MzN9IH0sCit7IDEzLCAweDA5NmQsIDAsIHsweDI1LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5YSwweGUwLDB4NTQsMHgwNSwweGZiLDB4NGEsMHhmNSwweDMzfSB9LAoreyAgMiwgMHgwOTdhLCAwLCB7MHg2MCwweDBjfSB9LAoreyAxMiwgMHgwOTdjLCAwLCB7MHg5MCwweDdmLDB4OTYsMHhlMCwweGZhLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg4MCwweDRhLDB4ZjB9IH0sCit7IDExLCAweDA5ODgsIDAsIHsweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMCwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTJ9IH0sCit7IDE0LCAweDA5OTMsIDAsIHsweDExLDB4NDQsMHhkMCwweDA1LDB4ZDAsMHgwNCwweDkwLDB4MTcsMHgxMywweGUwLDB4ZmEsMHg3NCwweDgwLDB4MmF9IH0sCit7ICA2LCAweDA5YTEsIDAsIHsweGZhLDB4ZTUsMHgzMywweGI0LDB4MDQsMHgyOX0gfSwKK3sgIDMsIDB4MDlhNywgMCwgezB4YmEsMHhhMCwweDAwfSB9LAoreyAgMiwgMHgwOWFhLCAwLCB7MHg1MCwweDI0fSB9LAoreyAxMywgMHgwOWFjLCAwLCB7MHg5MCwweDE3LDB4MTMsMHhlMCwweDA0LDB4ZmIsMHgwYiwweDkwLDB4MTcsMHgxMywweGViLDB4ZjAsMHg5MH0gfSwKK3sgMTQsIDB4MDliOSwgMCwgezB4MTcsMHgxMywweGUwLDB4ZmIsMHg5MCwweDE3LDB4MTUsMHhmMCwweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNX0gfSwKK3sgIDksIDB4MDljNywgMCwgezB4MTIsMHgwNCwweGY3LDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMCwweDAyfSB9LAoreyAgNSwgMHgwOWQwLCAwLCB7MHhlNSwweDMzLDB4YjQsMHgwMiwweDI2fSB9LAoreyAgNiwgMHgwOWQ1LCAwLCB7MHhjMywweDc0LDB4MDQsMHg5YSwweDUwLDB4MjB9IH0sCit7IDEzLCAweDA5ZGIsIDAsIHsweDkwLDB4MTcsMHgxMywweGUwLDB4ZmEsMHgxYSwweDFhLDB4OTAsMHgxNywweDEzLDB4ZWEsMHhmMCwweDkwfSB9LAoreyAxMywgMHgwOWU4LCAwLCB7MHgxNywweDEzLDB4ZTAsMHhmYSwweDkwLDB4MTcsMHgxNSwweGYwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgIDYsIDB4MDlmNSwgMCwgezB4MDQsMHhmNywweGQwLDB4MDUsMHhkMCwweDA0fSB9LAoreyAgNSwgMHgwOWZiLCAwLCB7MHhlNSwweDMzLDB4YjQsMHgwOCwweDFkfSB9LAoreyAgNCwgMHgwYTAwLCAwLCB7MHhlNSwweDM0LDB4NzAsMHgxOX0gfSwKK3sgMTAsIDB4MGEwNCwgMCwgezB4NzQsMHgwMSwweDI1LDB4MzUsMHg1NCwweDBmLDB4ZjUsMHgzNSwweDg1LDB4MzV9IH0sCit7IDEyLCAweDBhMGUsIDAsIHsweDc1LDB4NzUsMHg3NiwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEzLDB4ZmUsMHhkMH0gfSwKK3sgIDMsIDB4MGExYSwgMCwgezB4MDUsMHhkMCwweDA0fSB9LAoreyAgNSwgMHgwYTFkLCAwLCB7MHhlNSwweDMzLDB4YjQsMHgwMSwweDFkfSB9LAoreyAgNCwgMHgwYTIyLCAwLCB7MHhlNSwweDM0LDB4NzAsMHgxOX0gfSwKK3sgMTAsIDB4MGEyNiwgMCwgezB4ZTUsMHgzNSwweDI0LDB4ZmYsMHg1NCwweDBmLDB4ZjUsMHgzNSwweDg1LDB4MzV9IH0sCit7IDEyLCAweDBhMzAsIDAsIHsweDc1LDB4NzUsMHg3NiwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEzLDB4ZmUsMHhkMH0gfSwKK3sgIDMsIDB4MGEzYywgMCwgezB4MDUsMHhkMCwweDA0fSB9LAoreyAxNCwgMHgwYTNmLCAwLCB7MHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4OTAsMHg3ZiwweDk2fSB9LAoreyAxNCwgMHgwYTRkLCAwLCB7MHhlMCwweGZhLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg3ZiwweDVhLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHg3NCwweDA4fSB9LAoreyAxMCwgMHgwYTViLCAwLCB7MHhmMCwweGMzLDB4ZWMsMHg5NCwweDAwLDB4ZWQsMHg5NCwweDAyLDB4NDAsMHgwOH0gfSwKK3sgIDgsIDB4MGE2NSwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDIwLDB4ZTYsMHgwOH0gfSwKK3sgIDgsIDB4MGE2ZCwgMCwgezB4YzMsMHhlNCwweDljLDB4NzQsMHgwOCwweDlkLDB4NTAsMHgxM30gfSwKK3sgMTQsIDB4MGE3NSwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5NiwweDc0LDB4NDAsMHg2NSwweDAyLDB4ZjAsMHg3Y30gfSwKK3sgIDUsIDB4MGE4MywgMCwgezB4MDAsMHg3ZCwweDAwLDB4ODAsMHgwNX0gfSwKK3sgIDUsIDB4MGE4OCwgMCwgezB4MGMsMHhiYywweDAwLDB4MDEsMHgwZH0gfSwKK3sgIDUsIDB4MGE4ZCwgMCwgezB4ZTUsMHgzOCwweGI0LDB4MDEsMHgwZX0gfSwKK3sgMTMsIDB4MGE5MiwgMCwgezB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDA0LDB4ZjcsMHhkMCwweDA1LDB4ZDAsMHgwNCwweDc1LDB4Mzh9IH0sCit7ICAxLCAweDBhOWYsIDAsIHsweDAwfSB9LAoreyAgNywgMHgwYWEwLCAwLCB7MHhlNSwweDMxLDB4NzAsMHgwMywweDAyLDB4MDksMHgyYX0gfSwKK3sgMTAsIDB4MGFhNywgMCwgezB4OTAsMHg3ZiwweGM5LDB4ZTAsMHhmYSwweDcwLDB4MDMsMHgwMiwweDBjLDB4MmR9IH0sCit7IDE0LCAweDBhYjEsIDAsIHsweDkwLDB4N2YsMHg5NiwweGUwLDB4ZmEsMHg5MCwweDdmLDB4OTYsMHg3NCwweDgwLDB4NjUsMHgwMiwweGYwLDB4OTB9IH0sCit7ICA5LCAweDBhYmYsIDAsIHsweDdkLDB4YzAsMHhlMCwweGZhLDB4YmEsMHgyYywweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGFjOCwgMCwgezB4MDIsMHgwYiwweDM2fSB9LAoreyAgNSwgMHgwYWNiLCAwLCB7MHg3NSwweDMyLDB4MDAsMHg3YiwweDAwfSB9LAoreyAgMywgMHgwYWQwLCAwLCB7MHhiYiwweDY0LDB4MDB9IH0sCit7ICAyLCAweDBhZDMsIDAsIHsweDUwLDB4MWN9IH0sCit7IDE0LCAweDBhZDUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDAxLDB4ZGQsMHhkMCwweDA1LDB4ZDB9IH0sCit7IDEzLCAweDBhZTMsIDAsIHsweDA0LDB4ZDAsMHgwMywweGQwLDB4MDIsMHg5MCwweDg4LDB4MGYsMHhlMCwweGY1LDB4NDcsMHgwYiwweDgwfSB9LAoreyAgMSwgMHgwYWYwLCAwLCB7MHhkZn0gfSwKK3sgMTMsIDB4MGFmMSwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgwNywweDFlLDB4MTIsMHgwMywweGUxLDB4MTJ9IH0sCit7IDEyLCAweDBhZmUsIDAsIHsweDA0LDB4ZjcsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwLDB4MDIsMHg3NSwweDZlLDB4MDAsMHg3NX0gfSwKK3sgMTMsIDB4MGIwYSwgMCwgezB4NmYsMHgwMSwweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTEsMHg0NCwweGQwLDB4MDV9IH0sCit7ICA5LCAweDBiMTcsIDAsIHsweGQwLDB4MDQsMHhkMCwweDAyLDB4NzUsMHg3MCwweDRkLDB4NzUsMHg3MX0gfSwKK3sgMTEsIDB4MGIyMCwgMCwgezB4MGMsMHg3NSwweDcyLDB4MDIsMHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgMTEsIDB4MGIyYiwgMCwgezB4MTEsMHg3NSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMiwweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGIzNiwgMCwgezB4YmEsMHgyYSwweDNifSB9LAoreyAxMywgMHgwYjM5LCAwLCB7MHg5MCwweDdmLDB4OTgsMHg3NCwweDIwLDB4ZjAsMHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgMTQsIDB4MGI0NiwgMCwgezB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMiwweDkwLDB4N2YsMHg5OCwweDc0LDB4MjgsMHhmMH0gfSwKK3sgIDIsIDB4MGI1NCwgMCwgezB4N2IsMHgwMH0gfSwKK3sgIDMsIDB4MGI1NiwgMCwgezB4YmIsMHgwYSwweDAwfSB9LAoreyAgNSwgMHgwYjU5LCAwLCB7MHg0MCwweDAzLDB4MDIsMHgwYywweDJkfSB9LAoreyAxNCwgMHgwYjVlLCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgwMSwweGRkLDB4ZDAsMHgwNSwweGQwfSB9LAoreyAgOCwgMHgwYjZjLCAwLCB7MHgwNCwweGQwLDB4MDMsMHhkMCwweDAyLDB4MGIsMHg4MCwweGUyfSB9LAoreyAgMywgMHgwYjc0LCAwLCB7MHhiYSwweDJiLDB4MWF9IH0sCit7ICA4LCAweDBiNzcsIDAsIHsweDkwLDB4N2YsMHhjOSwweGUwLDB4ZmIsMHhiYiwweDQwLDB4MTJ9IH0sCit7IDE0LCAweDBiN2YsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTIsMHgwNSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICA0LCAweDBiOGQsIDAsIHsweDAyLDB4MDIsMHgwYywweDJkfSB9LAoreyAgMywgMHgwYjkxLCAwLCB7MHhiYSwweDEwLDB4MWZ9IH0sCit7IDE0LCAweDBiOTQsIDAsIHsweDkwLDB4N2YsMHg5NiwweGUwLDB4ZmIsMHg5MCwweDdmLDB4OTYsMHg3NCwweDgwLDB4NjUsMHgwMywweGYwLDB4YzB9IH0sCit7IDE0LCAweDBiYTIsIDAsIHsweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEwLDB4M2QsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwLDB4MDJ9IH0sCit7ICAzLCAweDBiYjAsIDAsIHsweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGJiMywgMCwgezB4YmEsMHgxMSwweDEyfSB9LAoreyAxNCwgMHgwYmI2LCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEwLDB4NmEsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwfSB9LAoreyAgNCwgMHgwYmM0LCAwLCB7MHgwMiwweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGJjOCwgMCwgezB4YmEsMHgxMiwweDEyfSB9LAoreyAxNCwgMHgwYmNiLCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDEwLDB4OGYsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwfSB9LAoreyAgNCwgMHgwYmQ5LCAwLCB7MHgwMiwweDAyLDB4MGMsMHgyZH0gfSwKK3sgIDMsIDB4MGJkZCwgMCwgezB4YmEsMHgxMywweDBifSB9LAoreyAxMSwgMHgwYmUwLCAwLCB7MHg5MCwweDdkLDB4YzEsMHhlMCwweGZiLDB4OTAsMHg4OCwweDAwLDB4ZjAsMHg4MCwweDQyfSB9LAoreyAgMywgMHgwYmViLCAwLCB7MHhiYSwweDE0LDB4MTF9IH0sCit7IDE0LCAweDBiZWUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTEsMHhkZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICAzLCAweDBiZmMsIDAsIHsweDAyLDB4ODAsMHgyZX0gfSwKK3sgIDMsIDB4MGJmZiwgMCwgezB4YmEsMHgxNSwweDFkfSB9LAoreyAxMiwgMHgwYzAyLCAwLCB7MHg5MCwweDdkLDB4YzEsMHhlMCwweGY1LDB4NzUsMHg5MCwweDdkLDB4YzIsMHhlMCwweGY1LDB4NzZ9IH0sCit7IDE0LCAweDBjMGUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTMsMHhmZSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICAzLCAweDBjMWMsIDAsIHsweDAyLDB4ODAsMHgwZX0gfSwKK3sgIDMsIDB4MGMxZiwgMCwgezB4YmEsMHgxNiwweDBifSB9LAoreyAxMSwgMHgwYzIyLCAwLCB7MHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTMsMHhhMywweGQwLDB4MDUsMHhkMCwweDA0fSB9LAoreyAxMSwgMHgwYzJkLCAwLCB7MHg5MCwweDdmLDB4YzksMHhlNCwweGYwLDB4NzUsMHgzMSwweDAwLDB4MDIsMHgwOSwweDJhfSB9LAoreyAgMSwgMHgwYzM4LCAwLCB7MHgyMn0gfSwKK3sgIDcsIDB4MGMzOSwgMCwgezB4NTMsMHg1NSwweDUwLDB4NDUsMHg0ZSwweDQ0LDB4MDB9IH0sCit7ICA3LCAweDBjNDAsIDAsIHsweDUyLDB4NDUsMHg1MywweDU1LDB4NGQsMHg0NSwweDAwfSB9LAoreyAgNiwgMHgwYzQ3LCAwLCB7MHgyMCwweDU2LDB4NmYsMHg2YywweDIwLDB4MDB9IH0sCit7IDEzLCAweDBjNGQsIDAsIHsweDQ0LDB4NDEsMHg0MiwweDU1LDB4NTMsMHg0MiwweDIwLDB4NzYsMHgzMSwweDJlLDB4MzAsMHgzMCwweDAwfSB9LAoreyAxNCwgMHgwYzVhLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwYzY4LCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMywgMHgwYzc2LCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MH0gfSwKK3sgMTQsIDB4MGM4MywgMCwgezB4N2YsMHhhYiwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhlOCwweGUwLDB4ZmEsMHg5MCwweDdmLDB4ZTksMHhlMH0gfSwKK3sgIDYsIDB4MGM5MSwgMCwgezB4ZmIsMHhiYiwweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwYzk3LCAwLCB7MHgwMiwweDBkLDB4Mzh9IH0sCit7ICAzLCAweDBjOWEsIDAsIHsweGJhLDB4ODAsMHgxNH0gfSwKK3sgMTQsIDB4MGM5ZCwgMCwgezB4OTAsMHg3ZiwweDAwLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDAxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhiNX0gfSwKK3sgIDYsIDB4MGNhYiwgMCwgezB4NzQsMHgwMiwweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgNSwgMHgwY2IxLCAwLCB7MHhiYSwweDgyLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwY2I2LCAwLCB7MHgwMiwweDBkLDB4MWR9IH0sCit7ICA4LCAweDBjYjksIDAsIHsweDkwLDB4N2YsMHhlYywweGUwLDB4ZmMsMHhiYywweDAxLDB4MDB9IH0sCit7ICAyLCAweDBjYzEsIDAsIHsweDQwLDB4MjF9IH0sCit7ICA2LCAweDBjYzMsIDAsIHsweGMzLDB4NzQsMHgwNywweDljLDB4NDAsMHgxYn0gfSwKK3sgMTQsIDB4MGNjOSwgMCwgezB4ZWMsMHgyNCwweGZmLDB4MjUsMHhlMCwweGZkLDB4MjQsMHhjNiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNX0gfSwKK3sgMTMsIDB4MGNkNywgMCwgezB4ODMsMHhlMCwweGZkLDB4NTMsMHgwNSwweDAxLDB4OTAsMHg3ZiwweDAwLDB4ZWQsMHhmMCwweDgwLDB4MmJ9IH0sCit7ICAzLCAweDBjZTQsIDAsIHsweGJjLDB4ODEsMHgwMH0gfSwKK3sgIDIsIDB4MGNlNywgMCwgezB4NDAsMHgyMX0gfSwKK3sgIDYsIDB4MGNlOSwgMCwgezB4YzMsMHg3NCwweDg3LDB4OWMsMHg0MCwweDFifSB9LAoreyAxNCwgMHgwY2VmLCAwLCB7MHhlYywweDI0LDB4N2YsMHgyNSwweGUwLDB4ZmMsMHgyNCwweGI2LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSB9LAoreyAxMywgMHgwY2ZkLCAwLCB7MHg4MywweGUwLDB4ZmMsMHg1MywweDA0LDB4MDEsMHg5MCwweDdmLDB4MDAsMHhlYywweGYwLDB4ODAsMHgwNX0gfSwKK3sgIDUsIDB4MGQwYSwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MGQwZiwgMCwgezB4OTAsMHg3ZiwweDAxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDUsIDB4MGQxZCwgMCwgezB4YmEsMHg4MSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGQyMiwgMCwgezB4MDIsMHgwZSwweGM1fSB9LAoreyAxNCwgMHgwZDI1LCAwLCB7MHg5MCwweDdmLDB4MDAsMHhlNCwweGYwLDB4OTAsMHg3ZiwweDAxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fSB9LAoreyAgNSwgMHgwZDMzLCAwLCB7MHgwMiwweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZDM4LCAwLCB7MHhiYiwweDAxLDB4MmR9IH0sCit7ICA2LCAweDBkM2IsIDAsIHsweGJhLDB4MDAsMHgwMywweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGQ0MSwgMCwgezB4YmEsMHgwMiwweDExfSB9LAoreyAxMywgMHgwZDQ0LCAwLCB7MHg3NSwweDU5LDB4MDAsMHhjMCwweDAyLDB4YzAsMHgwMywweDEyLDB4MGUsMHhmMCwweGQwLDB4MDMsMHhkMH0gfSwKK3sgIDQsIDB4MGQ1MSwgMCwgezB4MDIsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBkNTUsIDAsIHsweGJhLDB4MjEsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkNWEsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgMTEsIDB4MGQ1ZCwgMCwgezB4NzUsMHgzNywweDAxLDB4OTAsMHg3ZiwweGM1LDB4ZTQsMHhmMCwweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGQ2OCwgMCwgezB4YmIsMHgwMywweDFmfSB9LAoreyAgNiwgMHgwZDZiLCAwLCB7MHhiYSwweDAwLDB4MDMsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBkNzEsIDAsIHsweGJhLDB4MDIsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkNzYsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgMTMsIDB4MGQ3OSwgMCwgezB4NzUsMHg1OSwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDMsMHgxMiwweDBlLDB4ZjAsMHhkMCwweDAzLDB4ZDB9IH0sCit7ICA0LCAweDBkODYsIDAsIHsweDAyLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZDhhLCAwLCB7MHhiYiwweDA2LDB4NTR9IH0sCit7ICA1LCAweDBkOGQsIDAsIHsweGJhLDB4ODAsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkOTIsIDAsIHsweDAyLDB4MGUsMHhjNX0gfSwKK3sgIDgsIDB4MGQ5NSwgMCwgezB4OTAsMHg3ZiwweGViLDB4ZTAsMHhmYywweGJjLDB4MDEsMHgxNX0gfSwKK3sgMTIsIDB4MGQ5ZCwgMCwgezB4N2MsMHhmYiwweDdkLDB4MGYsMHg4ZCwweDA2LDB4N2YsMHgwMCwweDkwLDB4N2YsMHhkNCwweGVlfSB9LAoreyAgOSwgMHgwZGE5LCAwLCB7MHhmMCwweDkwLDB4N2YsMHhkNSwweGVjLDB4ZjAsMHgwMiwweDBlLDB4Y2R9IH0sCit7IDEwLCAweDBkYjIsIDAsIHsweDkwLDB4N2YsMHhlYiwweGUwLDB4ZmMsMHhiYywweDAyLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZGJjLCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDEwLCAweDBkYmYsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmMsMHhiYywweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZGM5LCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDEyLCAweDBkY2MsIDAsIHsweDdjLDB4M2IsMHg3ZCwweDBmLDB4OGQsMHgwNiwweDdmLDB4MDAsMHg5MCwweDdmLDB4ZDQsMHhlZX0gfSwKK3sgIDksIDB4MGRkOCwgMCwgezB4ZjAsMHg5MCwweDdmLDB4ZDUsMHhlYywweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgNiwgMHgwZGUxLCAwLCB7MHhiYiwweDA3LDB4MDMsMHgwMiwweDBlLDB4YzV9IH0sCit7ICAzLCAweDBkZTcsIDAsIHsweGJiLDB4MDgsMHgxMH0gfSwKK3sgMTMsIDB4MGRlYSwgMCwgezB4YWMsMHg0OCwweDkwLDB4N2YsMHgwMCwweGVjLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAzLCAweDBkZjcsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGRmYSwgMCwgezB4YmIsMHgwOSwweDMxfSB9LAoreyAgNSwgMHgwZGZkLCAwLCB7MHhiYSwweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZTAyLCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDE0LCAweDBlMDUsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmMsMHhjMywweDc0LDB4MDEsMHg5YywweDUwLDB4MDMsMHgwMiwweDBlLDB4YzV9IH0sCit7ICA4LCAweDBlMTMsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmMsMHhiYywweDAwLDB4MGF9IH0sCit7IDEwLCAweDBlMWIsIDAsIHsweDkwLDB4MTcsMHgyMSwweGU0LDB4ZjAsMHg5MCwweDE3LDB4MjIsMHhlNCwweGYwfSB9LAoreyAgOSwgMHgwZTI1LCAwLCB7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY1LDB4NDgsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICAzLCAweDBlMmUsIDAsIHsweGJiLDB4MGEsMHgyN30gfSwKK3sgIDUsIDB4MGUzMSwgMCwgezB4YmEsMHg4MSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGUzNiwgMCwgezB4MDIsMHgwZSwweGM1fSB9LAoreyAxNCwgMHgwZTM5LCAwLCB7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGZhLDB4MjQsMHgyMCwweGZhLDB4ZTQsMHgzNCwweDE3LDB4ZmMsMHg4YSwweDgyfSB9LAoreyAxNCwgMHgwZTQ3LCAwLCB7MHg4YywweDgzLDB4ZTAsMHhmYSwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMywgMHgwZTU1LCAwLCB7MHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBlNTgsIDAsIHsweGJiLDB4MGIsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBlNWQsIDAsIHsweDAyLDB4MGUsMHhhOX0gfSwKK3sgMTMsIDB4MGU2MCwgMCwgezB4OTAsMHgxNywweDIwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmEsMHhiYSwweDAxLDB4MWF9IH0sCit7ICA4LCAweDBlNmQsIDAsIHsweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmEsMHhiYSwweDAwLDB4MTJ9IH0sCit7IDE0LCAweDBlNzUsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg5MCwweDE3LDB4MjEsMHhmMCwweGMwLDB4MDMsMHgxMiwweDA0LDB4ZTJ9IH0sCit7ICA0LCAweDBlODMsIDAsIHsweGQwLDB4MDMsMHg4MCwweDQ2fSB9LAoreyAgOCwgMHgwZTg3LCAwLCB7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGZhLDB4YmEsMHgwMiwweDNlfSB9LAoreyAgOCwgMHgwZThmLCAwLCB7MHg5MCwweDdmLDB4ZWQsMHhlMCwweGZhLDB4YmEsMHgwMCwweDM2fSB9LAoreyAxMywgMHgwZTk3LCAwLCB7MHhjMCwweDAzLDB4MTIsMHgwNCwweGVmLDB4ZDAsMHgwMywweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmEsMHg5MH0gfSwKK3sgIDUsIDB4MGVhNCwgMCwgezB4MTcsMHgyMiwweGYwLDB4ODAsMHgyNH0gfSwKK3sgIDUsIDB4MGVhOSwgMCwgezB4YmIsMHgxMiwweDAyLDB4ODAsMHgxN30gfSwKK3sgIDUsIDB4MGVhZSwgMCwgezB4YmIsMHg4MSwweDAyLDB4ODAsMHgwZH0gfSwKK3sgIDUsIDB4MGViMywgMCwgezB4YmIsMHg4MywweDAyLDB4ODAsMHgwOH0gfSwKK3sgIDUsIDB4MGViOCwgMCwgezB4YmIsMHg4MiwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGViZCwgMCwgezB4YmIsMHg4NCwweDA1fSB9LAoreyAgNSwgMHgwZWMwLCAwLCB7MHgxMiwweDA2LDB4NGUsMHg4MCwweDA4fSB9LAoreyAgOCwgMHgwZWM1LCAwLCB7MHg5MCwweDdmLDB4YjQsMHg3NCwweDAzLDB4ZjAsMHg4MCwweDA2fSB9LAoreyAgNiwgMHgwZWNkLCAwLCB7MHg5MCwweDdmLDB4YjQsMHg3NCwweDAyLDB4ZjB9IH0sCit7ICAyLCAweDBlZDMsIDAsIHsweGQwLDB4ODZ9IH0sCit7IDE0LCAweDBlZDUsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDAxLDB4ZDAsMHgwMCwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDEzLCAweDBlZTMsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxMSwgMHgwZWYwLCAwLCB7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGY1LDB4NWEsMHhjMywweDk0LDB4MDEsMHg0MCwweDFkfSB9LAoreyAgNywgMHgwZWZiLCAwLCB7MHhjMywweDc0LDB4MDcsMHg5NSwweDVhLDB4NDAsMHgxNn0gfSwKK3sgMTMsIDB4MGYwMiwgMCwgezB4ZTUsMHg1YSwweDI0LDB4ZmYsMHgyNSwweGUwLDB4ZmEsMHgyNCwweGM2LDB4ZjUsMHg4MiwweGU0LDB4MzR9IH0sCit7ICA5LCAweDBmMGYsIDAsIHsweDdmLDB4ZjUsMHg4MywweGFhLDB4NTksMHhlYSwweGYwLDB4ODAsMHgyMn0gfSwKK3sgIDcsIDB4MGYxOCwgMCwgezB4YzMsMHhlNSwweDVhLDB4OTQsMHg4MSwweDQwLDB4MWJ9IH0sCit7ICA3LCAweDBmMWYsIDAsIHsweGMzLDB4NzQsMHg4NywweDk1LDB4NWEsMHg0MCwweDE0fSB9LAoreyAxMywgMHgwZjI2LCAwLCB7MHhlNSwweDVhLDB4MjQsMHhmZiwweDI1LDB4ZTAsMHhmYSwweDI0LDB4YjYsMHhmNSwweDgyLDB4ZTQsMHgzNH0gfSwKK3sgIDcsIDB4MGYzMywgMCwgezB4N2YsMHhmNSwweDgzLDB4YWEsMHg1OSwweGVhLDB4ZjB9IH0sCit7ICAxLCAweDBmM2EsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwZjNiLCAwLCB7MHgwOSwweDAyLDB4YmEsMHgwMCwweDAzLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZjQ5LCAwLCB7MHgwMSwweDAxLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMSwweDAwLDB4MDEsMHgzZCwweDAwLDB4MDEsMHgwMSwweDBjfSB9LAoreyAxNCwgMHgwZjU3LCAwLCB7MHgyNCwweDAyLDB4MDEsMHgxMCwweDA3LDB4MDAsMHgwMiwweDAzLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgyNCwweDA2fSB9LAoreyAxNCwgMHgwZjY1LCAwLCB7MHgwMywweDAxLDB4MDIsMHgxNSwweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMywweDAyfSB9LAoreyAxNCwgMHgwZjczLCAwLCB7MHgwMSwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDksMHgyNCwweDAzLDB4MDQsMHgwMiwweDAzLDB4MDAsMHgwMywweDAwfSB9LAoreyAxNCwgMHgwZjgxLCAwLCB7MHgwOSwweDI0LDB4MDMsMHgwNSwweDAzLDB4MDYsMHgwMCwweDAxLDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZjhmLCAwLCB7MHgwMSwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3fSB9LAoreyAxNCwgMHgwZjlkLCAwLCB7MHgyNCwweDAxLDB4MDIsMHgwMSwweDAxLDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAxfSB9LAoreyAxNCwgMHgwZmFiLCAwLCB7MHg4MCwweGJiLDB4MDAsMHgwOSwweDA1LDB4ODgsMHgwNSwweDAwLDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1fSB9LAoreyAxNCwgMHgwZmI5LCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZmM3LCAwLCB7MHgwNywweDA1LDB4ODIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHgwMiwweDAyLDB4NDAsMHgwMCwweDAwfSB9LAoreyAxNCwgMHgwZmQ1LCAwLCB7MHgwOSwweDA0LDB4MDIsMHgwMSwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDA1LDB4ODIsMHgwMiwweDQwfSB9LAoreyAxNCwgMHgwZmUzLCAwLCB7MHgwMCwweDAwLDB4MDcsMHgwNSwweDAyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwOSwweDA1LDB4ODksMHgwNSwweGEwfSB9LAoreyAxMCwgMHgwZmYxLCAwLCB7MHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMH0gfSwKK3sgMTQsIDB4MGZmYiwgMCwgezB4MTIsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ3LDB4MDUsMHg5OSwweDk5LDB4MDAsMHgwMX0gfSwKK3sgMTQsIDB4MTAwOSwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDIsMHhiYX0gfSwKK3sgIDQsIDB4MTAxNywgMCwgezB4MDAsMHgwMywweDAxLDB4MDB9IH0sCit7ICAyLCAweDEwMWIsIDAsIHsweDdhLDB4MDB9IH0sCit7ICAzLCAweDEwMWQsIDAsIHsweGJhLDB4MDUsMHgwMH0gfSwKK3sgIDIsIDB4MTAyMCwgMCwgezB4NTAsMHgxN30gfSwKK3sgIDgsIDB4MTAyMiwgMCwgezB4OTAsMHg3ZiwweGE1LDB4ZTAsMHhmYiwweDMwLDB4ZTAsMHgwNX0gfSwKK3sgIDUsIDB4MTAyYSwgMCwgezB4OTAsMHgwMCwweDAxLDB4ODAsMHgwZH0gfSwKK3sgMTAsIDB4MTAyZiwgMCwgezB4YzAsMHgwMiwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDIsMHgwYSwweDgwLDB4ZTR9IH0sCit7ICAzLCAweDEwMzksIDAsIHsweDkwLDB4MDAsMHgwMX0gfSwKK3sgIDEsIDB4MTAzYywgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEwM2QsIDAsIHsweDkwLDB4N2QsMHhjMSwweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZmIsMHg3YywweDAwLDB4N2R9IH0sCit7ICA0LCAweDEwNGIsIDAsIHsweDdlLDB4ZWIsMHg2MCwweDEyfSB9LAoreyAxNCwgMHgxMDRmLCAwLCB7MHg4OSwweDgyLDB4OGEsMHg4MywweGUwLDB4YTMsMHhhOSwweDgyLDB4YWEsMHg4MywweDhjLDB4ODIsMHg4ZCwweDgzfSB9LAoreyAgNCwgMHgxMDVkLCAwLCB7MHhmMCwweDBjLDB4ZGIsMHhlZX0gfSwKK3sgIDgsIDB4MTA2MSwgMCwgezB4OTAsMHg3ZCwweGMzLDB4ZTAsMHg5MCwweDdmLDB4YjksMHhmMH0gfSwKK3sgIDEsIDB4MTA2OSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEwNmEsIDAsIHsweDkwLDB4N2QsMHhjMSwweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZmIsMHg3YywweGM0LDB4N2R9IH0sCit7ICA0LCAweDEwNzgsIDAsIHsweDdkLDB4ZWIsMHg2MCwweGU1fSB9LAoreyAxNCwgMHgxMDdjLCAwLCB7MHg4YywweDgyLDB4OGQsMHg4MywweGUwLDB4MGMsMHg4OSwweDgyLDB4OGEsMHg4MywweGYwLDB4YTMsMHhhOSwweDgyfSB9LAoreyAgNCwgMHgxMDhhLCAwLCB7MHhhYSwweDgzLDB4ZGIsMHhlZX0gfSwKK3sgIDEsIDB4MTA4ZSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEwOGYsIDAsIHsweDkwLDB4N2YsMHhhNSwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHg5MCwweDdkLDB4YzEsMHhlMCwweDA1LDB4ODZ9IH0sCit7IDE0LCAweDEwOWQsIDAsIHsweGEzLDB4ZjAsMHgxMiwweDEwLDB4MWIsMHg5MCwweDdmLDB4YTYsMHgwNSwweDg2LDB4YTMsMHhhMywweGUwLDB4Zjl9IH0sCit7ICA1LCAweDEwYWIsIDAsIHsweDYwLDB4MTYsMHhhMywweDA1LDB4ODZ9IH0sCit7IDEzLCAweDEwYjAsIDAsIHsweDkwLDB4N2YsMHhhNiwweDA1LDB4ODYsMHhlMCwweGEzLDB4MDUsMHg4NiwweGYwLDB4YzAsMHgwMSwweDEyfSB9LAoreyAgNiwgMHgxMGJkLCAwLCB7MHgxMCwweDFiLDB4ZDAsMHgwMSwweGQ5LDB4ZWR9IH0sCit7ICA2LCAweDEwYzMsIDAsIHsweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMH0gfSwKK3sgIDEsIDB4MTBjOSwgMCwgezB4MjJ9IH0sCit7ICA4LCAweDEwY2EsIDAsIHsweDkwLDB4ODgsMHgwMiwweDc0LDB4MDEsMHhmMCwweDdhLDB4MDB9IH0sCit7ICAzLCAweDEwZDIsIDAsIHsweGJhLDB4ZmYsMHgwMH0gfSwKK3sgIDIsIDB4MTBkNSwgMCwgezB4NTAsMHgwYX0gfSwKK3sgMTAsIDB4MTBkNywgMCwgezB4YzAsMHgwMiwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDIsMHgwYSwweDgwLDB4ZjF9IH0sCit7ICAxLCAweDEwZTEsIDAsIHsweDIyfSB9LAoreyAgNSwgMHgxMGUyLCAwLCB7MHhlNSwweDZiLDB4YjQsMHhjMCwweDA4fSB9LAoreyAgOCwgMHgxMGU3LCAwLCB7MHg5MCwweDg4LDB4MDMsMHhlNSwweDZjLDB4ZjAsMHg4MCwweDA2fSB9LAoreyAgNiwgMHgxMGVmLCAwLCB7MHg5MCwweDg4LDB4MDIsMHhlNSwweDZjLDB4ZjB9IH0sCit7ICA0LCAweDEwZjUsIDAsIHsweDdhLDB4MDAsMHg3YiwweDAwfSB9LAoreyAxMSwgMHgxMGY5LCAwLCB7MHhjMywweGVhLDB4OTQsMHgzMiwweGViLDB4NjQsMHg4MCwweDk0LDB4ODAsMHg1MCwweDA3fSB9LAoreyAgNSwgMHgxMTA0LCAwLCB7MHgwYSwweGJhLDB4MDAsMHgwMSwweDBifSB9LAoreyAgMiwgMHgxMTA5LCAwLCB7MHg4MCwweGVlfSB9LAoreyAgMSwgMHgxMTBiLCAwLCB7MHgyMn0gfSwKK3sgMTAsIDB4MTEwYywgMCwgezB4OTAsMHg4OCwweDAzLDB4ZTUsMHg2ZCwweGYwLDB4MDUsMHgzOSwweDdhLDB4MDB9IH0sCit7ICAzLCAweDExMTYsIDAsIHsweGJhLDB4MjgsMHgwMH0gfSwKK3sgIDIsIDB4MTExOSwgMCwgezB4NTAsMHgwM30gfSwKK3sgIDMsIDB4MTExYiwgMCwgezB4MGEsMHg4MCwweGY4fSB9LAoreyAgNSwgMHgxMTFlLCAwLCB7MHhlNSwweDM5LDB4YjQsMHgxMCwweDA4fSB9LAoreyAgOCwgMHgxMTIzLCAwLCB7MHg5MCwweDg4LDB4MDIsMHg3NCwweGMwLDB4ZjAsMHg4MCwweDBlfSB9LAoreyAgNSwgMHgxMTJiLCAwLCB7MHhlNSwweDM5LDB4YjQsMHgyMCwweDA5fSB9LAoreyAgOSwgMHgxMTMwLCAwLCB7MHg5MCwweDg4LDB4MDIsMHg3NCwweDgwLDB4ZjAsMHg3NSwweDM5LDB4MDB9IH0sCit7ICAyLCAweDExMzksIDAsIHsweDdhLDB4MDB9IH0sCit7ICAzLCAweDExM2IsIDAsIHsweGJhLDB4MjgsMHgwMH0gfSwKK3sgIDIsIDB4MTEzZSwgMCwgezB4NTAsMHgwM30gfSwKK3sgIDMsIDB4MTE0MCwgMCwgezB4MGEsMHg4MCwweGY4fSB9LAoreyAgMSwgMHgxMTQzLCAwLCB7MHgyMn0gfSwKK3sgIDQsIDB4MTE0NCwgMCwgezB4ZTUsMHg2ZiwweDYwLDB4MDJ9IH0sCit7ICAyLCAweDExNDgsIDAsIHsweDgwLDB4MDd9IH0sCit7ICA3LCAweDExNGEsIDAsIHsweDdhLDB4MDAsMHg3NSwweDM5LDB4MDAsMHg4MCwweDA1fSB9LAoreyAgNSwgMHgxMTUxLCAwLCB7MHg3YSwweDQwLDB4NzUsMHgzOSwweDEwfSB9LAoreyAgOSwgMHgxMTU2LCAwLCB7MHhlNSwweDZlLDB4MmEsMHhmYSwweGU1LDB4NmUsMHgyNSwweDM5LDB4ZjV9IH0sCit7IDEwLCAweDExNWYsIDAsIHsweDM5LDB4OTAsMHg4OCwweDAyLDB4NzQsMHg4MCwweDJhLDB4ZjAsMHg3YSwweDAwfSB9LAoreyAgOCwgMHgxMTY5LCAwLCB7MHhjMywweGVhLDB4NjQsMHg4MCwweDk0LDB4YTgsMHg1MCwweDAzfSB9LAoreyAgMywgMHgxMTcxLCAwLCB7MHgwYSwweDgwLDB4ZjV9IH0sCit7ICAxLCAweDExNzQsIDAsIHsweDIyfSB9LAoreyAgNiwgMHgxMTc1LCAwLCB7MHhhYSwweDcwLDB4YWIsMHg3MSwweGFjLDB4NzJ9IH0sCit7IDEyLCAweDExN2IsIDAsIHsweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDEyLDB4MTQsMHhlZSwweGZkLDB4NjAsMHgxOH0gfSwKK3sgMTMsIDB4MTE4NywgMCwgezB4OGQsMHg2ZCwweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNCwweDEyLDB4MTEsMHgwYywweGQwLDB4MDR9IH0sCit7ICA5LCAweDExOTQsIDAsIHsweGQwLDB4MDMsMHhkMCwweDAyLDB4MGEsMHhiYSwweDAwLDB4MDEsMHgwYn0gfSwKK3sgIDIsIDB4MTE5ZCwgMCwgezB4ODAsMHhkY30gfSwKK3sgIDEsIDB4MTE5ZiwgMCwgezB4MjJ9IH0sCit7IDEzLCAweDExYTAsIDAsIHsweGU1LDB4NzMsMHhjNCwweDU0LDB4MGYsMHhmYSwweDUzLDB4MDIsMHgwZiwweGMzLDB4NzQsMHgwOSwweDlhfSB9LAoreyAgMiwgMHgxMWFkLCAwLCB7MHg1MCwweDA2fSB9LAoreyAgNiwgMHgxMWFmLCAwLCB7MHg3NCwweDM3LDB4MmEsMHhmYiwweDgwLDB4MDR9IH0sCit7ICA0LCAweDExYjUsIDAsIHsweDc0LDB4MzAsMHgyYSwweGZifSB9LAoreyAxMiwgMHgxMWI5LCAwLCB7MHg4YiwweDZkLDB4YzAsMHgwMywweDEyLDB4MTEsMHgwYywweGQwLDB4MDMsMHhhYSwweDczLDB4NTN9IH0sCit7ICA4LCAweDExYzUsIDAsIHsweDAyLDB4MGYsMHhjMywweDc0LDB4MDksMHg5YSwweDUwLDB4MDZ9IH0sCit7ICA2LCAweDExY2QsIDAsIHsweDc0LDB4MzcsMHgyYSwweGZiLDB4ODAsMHgwNH0gfSwKK3sgIDQsIDB4MTFkMywgMCwgezB4NzQsMHgzMCwweDJhLDB4ZmJ9IH0sCit7ICA1LCAweDExZDcsIDAsIHsweDhiLDB4NmQsMHgxMiwweDExLDB4MGN9IH0sCit7ICAxLCAweDExZGMsIDAsIHsweDIyfSB9LAoreyAgNywgMHgxMWRkLCAwLCB7MHg5MCwweDdkLDB4YzMsMHhlMCwweGZhLDB4NjAsMHgwZn0gfSwKK3sgMTIsIDB4MTFlNCwgMCwgezB4OTAsMHg3ZCwweGMxLDB4ZTAsMHhmNSwweDZlLDB4OTAsMHg3ZCwweGMyLDB4ZTAsMHhmNSwweDZmfSB9LAoreyAgMywgMHgxMWYwLCAwLCB7MHgxMiwweDExLDB4NDR9IH0sCit7IDEyLCAweDExZjMsIDAsIHsweDkwLDB4N2QsMHhmZiwweGU0LDB4ZjAsMHg3NSwweDcwLDB4YzQsMHg3NSwweDcxLDB4N2QsMHg3NX0gfSwKK3sgIDUsIDB4MTFmZiwgMCwgezB4NzIsMHgwMSwweDEyLDB4MTEsMHg3NX0gfSwKK3sgIDEsIDB4MTIwNCwgMCwgezB4MjJ9IH0sCit7ICAyLCAweDEyMDUsIDAsIHsweDdhLDB4MDR9IH0sCit7ICAzLCAweDEyMDcsIDAsIHsweGJhLDB4NDAsMHgwMH0gfSwKK3sgIDIsIDB4MTIwYSwgMCwgezB4NTAsMHgzNn0gfSwKK3sgMTQsIDB4MTIwYywgMCwgezB4ZWEsMHgyNCwweGMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZCwweGY1LDB4ODMsMHhlMCwweGZiLDB4N2MsMHgwMH0gfSwKK3sgIDMsIDB4MTIxYSwgMCwgezB4YmMsMHgwOCwweDAwfSB9LAoreyAgMiwgMHgxMjFkLCAwLCB7MHg1MCwweDIwfSB9LAoreyAgNiwgMHgxMjFmLCAwLCB7MHg4YiwweDA1LDB4ZWQsMHgzMCwweGU3LDB4MGJ9IH0sCit7IDExLCAweDEyMjUsIDAsIHsweDkwLDB4N2YsMHg5NiwweDc0LDB4NDIsMHhmMCwweDc0LDB4YzMsMHhmMCwweDgwLDB4MDh9IH0sCit7ICA4LCAweDEyMzAsIDAsIHsweDkwLDB4N2YsMHg5NiwweGU0LDB4ZjAsMHg3NCwweDgxLDB4ZjB9IH0sCit7ICA3LCAweDEyMzgsIDAsIHsweGViLDB4MjUsMHhlMCwweGZiLDB4MGMsMHg4MCwweGRifSB9LAoreyAgMywgMHgxMjNmLCAwLCB7MHgwYSwweDgwLDB4YzV9IH0sCit7ICAxLCAweDEyNDIsIDAsIHsweDIyfSB9LAoreyAgNCwgMHgxMjQzLCAwLCB7MHg3YSwweDAwLDB4N2IsMHhlZn0gfSwKK3sgIDMsIDB4MTI0NywgMCwgezB4YmEsMHgxMCwweDAwfSB9LAoreyAgMiwgMHgxMjRhLCAwLCB7MHg1MCwweDIwfSB9LAoreyAxNCwgMHgxMjRjLCAwLCB7MHg3NCwweDExLDB4MmIsMHhmYiwweDI0LDB4MDAsMHhmYywweGU0LDB4MzQsMHgxOCwweGZkLDB4OGMsMHg4MiwweDhkfSB9LAoreyAxNCwgMHgxMjVhLCAwLCB7MHg4MywweGU0LDB4ZjAsMHhlYSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDE5LDB4ZjUsMHg4MywweGU0fSB9LAoreyAgNCwgMHgxMjY4LCAwLCB7MHhmMCwweDBhLDB4ODAsMHhkYn0gfSwKK3sgIDEsIDB4MTI2YywgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEyNmQsIDAsIHsweDc0LDB4ZjgsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyN2IsIDAsIHsweDc0LDB4ZjksMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyODksIDAsIHsweDc0LDB4ZmEsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyOTcsIDAsIHsweDc0LDB4ZmIsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7IDE0LCAweDEyYTUsIDAsIHsweDc0LDB4ZmYsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7ICAxLCAweDEyYjMsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgxMmI0LCAwLCB7MHgxMiwweDAzLDB4Y2IsMHgxMiwweDEyLDB4NmQsMHg3YSwweGMwLDB4N2IsMHg4NywweDdjLDB4MDEsMHg3NCwweDAxfSB9LAoreyAxNCwgMHgxMmMyLCAwLCB7MHgyYSwweGZkLDB4ZTQsMHgzYiwweGZlLDB4OGMsMHgwNywweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDc0fSB9LAoreyAxNCwgMHgxMmQwLCAwLCB7MHgwMSwweDEyLDB4MTQsMHhiZiwweDJkLDB4ZmEsMHhlNCwweDNlLDB4ZmIsMHg4ZiwweDA0LDB4OGQsMHg4MiwweDhlfSB9LAoreyAxNCwgMHgxMmRlLCAwLCB7MHg4MywweDhmLDB4ZjAsMHg3NCwweDA2LDB4MTIsMHgxNCwweGJmLDB4NzQsMHgwMSwweDJhLDB4ZmQsMHhlNCwweDNifSB9LAoreyAxNCwgMHgxMmVjLCAwLCB7MHhmZSwweDhjLDB4MDcsMHg4YSwweDgyLDB4OGIsMHg4MywweDhjLDB4ZjAsMHhlNCwweDEyLDB4MTQsMHhiZiwweDc0fSB9LAoreyAxNCwgMHgxMmZhLCAwLCB7MHgwMSwweDJkLDB4ZmEsMHhlNCwweDNlLDB4ZmIsMHg4ZiwweDA0LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg4ZiwweGYwfSB9LAoreyAxNCwgMHgxMzA4LCAwLCB7MHg3NCwweDBiLDB4MTIsMHgxNCwweGJmLDB4NzQsMHgwMSwweDJhLDB4ZmQsMHhlNCwweDNiLDB4ZmUsMHg4YywweDA3fSB9LAoreyAxNCwgMHgxMzE2LCAwLCB7MHg4YSwweDgyLDB4OGIsMHg4MywweDhjLDB4ZjAsMHg3NCwweDA4LDB4MTIsMHgxNCwweGJmLDB4NzQsMHgwMSwweDJkfSB9LAoreyAxNCwgMHgxMzI0LCAwLCB7MHhmYSwweGU0LDB4M2UsMHhmYiwweDhmLDB4MDQsMHg4ZCwweDgyLDB4OGUsMHg4MywweDhmLDB4ZjAsMHg3NCwweDAxfSB9LAoreyAxNCwgMHgxMzMyLCAwLCB7MHgxMiwweDE0LDB4YmYsMHgyYSwweGZkLDB4ZTQsMHgzYiwweGZlLDB4OGMsMHgwNywweDhhLDB4ODIsMHg4YiwweDgzfSB9LAoreyAxNCwgMHgxMzQwLCAwLCB7MHg4YywweGYwLDB4ZTQsMHgxMiwweDE0LDB4YmYsMHg3NCwweDAxLDB4MmQsMHhmYSwweGU0LDB4M2UsMHhmYiwweDhmfSB9LAoreyAxNCwgMHgxMzRlLCAwLCB7MHgwNCwweDhkLDB4ODIsMHg4ZSwweDgzLDB4OGYsMHhmMCwweDc0LDB4MDMsMHgxMiwweDE0LDB4YmYsMHg3ZCwweDAwfSB9LAoreyAgMywgMHgxMzVjLCAwLCB7MHhiZCwweDA2LDB4MDB9IH0sCit7ICAyLCAweDEzNWYsIDAsIHsweDUwLDB4MTJ9IH0sCit7IDExLCAweDEzNjEsIDAsIHsweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDBhLDB4YmEsMHgwMCwweDAxLDB4MGJ9IH0sCit7ICA3LCAweDEzNmMsIDAsIHsweGU0LDB4MTIsMHgxNCwweGJmLDB4MGQsMHg4MCwweGU5fSB9LAoreyAxMywgMHgxMzczLCAwLCB7MHg4YSwweDgyLDB4OGIsMHg4MywweDhjLDB4ZjAsMHhlNSwweDc0LDB4MTIsMHgxNCwweGJmLDB4NzQsMHhmOX0gfSwKK3sgMTQsIDB4MTM4MCwgMCwgezB4MjQsMHgwMCwweGY1LDB4ODIsMHg3NCwweDAzLDB4MzQsMHg4NCwweGY1LDB4ODMsMHg3NCwweDBmLDB4ZjAsMHg3NH0gfSwKK3sgMTQsIDB4MTM4ZSwgMCwgezB4ZmUsMHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDYsIDB4MTM5YywgMCwgezB4MTIsMHgwMywweGUxLDB4MTIsMHgwNCwweGY3fSB9LAoreyAgMSwgMHgxM2EyLCAwLCB7MHgyMn0gfSwKK3sgMTMsIDB4MTNhMywgMCwgezB4OTAsMHg3ZCwweGMxLDB4ZTAsMHhmYSwweDI0LDB4MDAsMHhmYiwweGU0LDB4MzQsMHgxOSwweGZjLDB4OTB9IH0sCit7IDE0LCAweDEzYjAsIDAsIHsweDdkLDB4YzIsMHhlMCwweGZkLDB4OGIsMHg4MiwweDhjLDB4ODMsMHhmMCwweDc1LDB4ZjAsMHgxMSwweGVhLDB4YTR9IH0sCit7ICAzLCAweDEzYmUsIDAsIHsweGZhLDB4N2IsMHgwMH0gfSwKK3sgIDMsIDB4MTNjMSwgMCwgezB4YmIsMHgxMCwweDAwfSB9LAoreyAgMiwgMHgxM2M0LCAwLCB7MHg1MCwweDI0fSB9LAoreyAxNCwgMHgxM2M2LCAwLCB7MHhlYSwweDI0LDB4MDAsMHhmYywweGU0LDB4MzQsMHgxOCwweGZkLDB4ZWIsMHgyYywweGZjLDB4ZTQsMHgzZCwweGZkfSB9LAoreyAxNCwgMHgxM2Q0LCAwLCB7MHg3NCwweDA0LDB4MmIsMHgyNCwweGMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZCwweGY1LDB4ODMsMHhlMCwweGZlfSB9LAoreyAgOCwgMHgxM2UyLCAwLCB7MHg4YywweDgyLDB4OGQsMHg4MywweGYwLDB4MGIsMHg4MCwweGQ3fSB9LAoreyAxNCwgMHgxM2VhLCAwLCB7MHhlYSwweDI0LDB4MDAsMHhmYSwweGU0LDB4MzQsMHgxOCwweGZiLDB4NzQsMHgxMCwweDJhLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAgNSwgMHgxM2Y4LCAwLCB7MHgzYiwweGY1LDB4ODMsMHhlNCwweGYwfSB9LAoreyAgMSwgMHgxM2ZkLCAwLCB7MHgyMn0gfSwKK3sgIDQsIDB4MTNmZSwgMCwgezB4ZTUsMHg3NiwweDYwLDB4MDJ9IH0sCit7ICAyLCAweDE0MDIsIDAsIHsweDgwLDB4MTZ9IH0sCit7IDEyLCAweDE0MDQsIDAsIHsweDc0LDB4MGYsMHg1NSwweDc1LDB4ZmEsMHg4YSwweDc1LDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNH0gfSwKK3sgMTAsIDB4MTQxMCwgMCwgezB4MzQsMHgxOSwweGY1LDB4ODMsMHhlMCwweGY1LDB4NzQsMHgxMiwweDEyLDB4YjR9IH0sCit7IDEwLCAweDE0MWEsIDAsIHsweDEyLDB4MTAsMHhjYSwweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMCwweDEyfSB9LAoreyAgNiwgMHgxNDI0LCAwLCB7MHgxMSwweDQ0LDB4NzUsMHg3MCwweGI5LDB4NzV9IH0sCit7ICA2LCAweDE0MmEsIDAsIHsweDcxLDB4MTQsMHg3NSwweDcyLDB4MDIsMHgxMn0gfSwKK3sgMTEsIDB4MTQzMCwgMCwgezB4MTEsMHg3NSwweGU1LDB4NzYsMHhiNCwweDAyLDB4MDQsMHg3NCwweDAxLDB4ODAsMHgwMX0gfSwKK3sgIDEsIDB4MTQzYiwgMCwgezB4ZTR9IH0sCit7ICAzLCAweDE0M2MsIDAsIHsweGZhLDB4NzAsMHgwZn0gfSwKK3sgMTIsIDB4MTQzZiwgMCwgezB4NzQsMHgwMSwweDI1LDB4NzUsMHhmNSwweDczLDB4YzAsMHgwMiwweDEyLDB4MTEsMHhhMCwweGQwfSB9LAoreyAgMywgMHgxNDRiLCAwLCB7MHgwMiwweDgwLDB4MGF9IH0sCit7IDEwLCAweDE0NGUsIDAsIHsweDg1LDB4NzUsMHg3MywweGMwLDB4MDIsMHgxMiwweDExLDB4YTAsMHhkMCwweDAyfSB9LAoreyAxMiwgMHgxNDU4LCAwLCB7MHg3NSwweDZlLDB4MDAsMHg3NSwweDZmLDB4MDEsMHhjMCwweDAyLDB4MTIsMHgxMSwweDQ0LDB4ZDB9IH0sCit7ICA0LCAweDE0NjQsIDAsIHsweDAyLDB4ZWEsMHg3MCwweDFhfSB9LAoreyAxMywgMHgxNDY4LCAwLCB7MHg3NSwweGYwLDB4MTEsMHhlNSwweDc1LDB4YTQsMHhmYSwweDI0LDB4MDAsMHhmYSwweGU0LDB4MzQsMHgxOH0gfSwKK3sgIDksIDB4MTQ3NSwgMCwgezB4ZmIsMHg4YSwweDcwLDB4OGIsMHg3MSwweDc1LDB4NzIsMHgwMSwweDEyfSB9LAoreyAgNCwgMHgxNDdlLCAwLCB7MHgxMSwweDc1LDB4ODAsMHgzNn0gfSwKK3sgIDIsIDB4MTQ4MiwgMCwgezB4N2EsMHgwMH0gfSwKK3sgIDMsIDB4MTQ4NCwgMCwgezB4YmEsMHgxMCwweDAwfSB9LAoreyAgMiwgMHgxNDg3LCAwLCB7MHg1MCwweDJmfSB9LAoreyAxMywgMHgxNDg5LCAwLCB7MHhlYSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDE5LDB4ZjUsMHg4MywweGUwLDB4ZmIsMHhlNX0gfSwKK3sgIDQsIDB4MTQ5NiwgMCwgezB4NzUsMHhiNSwweDAzLDB4MWJ9IH0sCit7IDE0LCAweDE0OWEsIDAsIHsweDc1LDB4ZjAsMHgxMSwweGVhLDB4YTQsMHhmYiwweDI0LDB4MDAsMHhmYiwweGU0LDB4MzQsMHgxOCwweGZjLDB4OGJ9IH0sCit7ICA5LCAweDE0YTgsIDAsIHsweDcwLDB4OGMsMHg3MSwweDc1LDB4NzIsMHgwMSwweGMwLDB4MDIsMHgxMn0gfSwKK3sgIDQsIDB4MTRiMSwgMCwgezB4MTEsMHg3NSwweGQwLDB4MDJ9IH0sCit7ICAzLCAweDE0YjUsIDAsIHsweDBhLDB4ODAsMHhjY30gfSwKK3sgIDEsIDB4MTRiOCwgMCwgezB4MjJ9IH0sCit7ICA2LCAweDE0YjksIDAsIHsweDUwLDB4NzIsMHg2ZiwweDY3LDB4MjAsMHgwMH0gfSwKK3sgMTQsIDB4MTRiZiwgMCwgezB4YzgsMHhjMCwweGUwLDB4YzgsMHhjMCwweGUwLDB4ZTUsMHhmMCwweDYwLDB4MGIsMHgxNCwweDYwLDB4MGYsMHgxNH0gfSwKK3sgIDcsIDB4MTRjZCwgMCwgezB4NjAsMHgxMSwweDE0LDB4NjAsMHgxMiwweDgwLDB4MTV9IH0sCit7ICA3LCAweDE0ZDQsIDAsIHsweGQwLDB4ZTAsMHhhOCwweDgyLDB4ZjYsMHg4MCwweDBlfSB9LAoreyAgNSwgMHgxNGRiLCAwLCB7MHhkMCwweGUwLDB4ZjAsMHg4MCwweDA5fSB9LAoreyAgNCwgMHgxNGUwLCAwLCB7MHhkMCwweGUwLDB4ODAsMHgwNX0gfSwKK3sgIDUsIDB4MTRlNCwgMCwgezB4ZDAsMHhlMCwweGE4LDB4ODIsMHhmMn0gfSwKK3sgIDQsIDB4MTRlOSwgMCwgezB4YzgsMHhkMCwweGUwLDB4Yzh9IH0sCit7ICAxLCAweDE0ZWQsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgxNGVlLCAwLCB7MHhjOCwweGMwLDB4ZTAsMHhlNSwweGYwLDB4NjAsMHgwZCwweDE0LDB4NjAsMHgwZiwweDE0LDB4NjAsMHgwZiwweDE0fSB9LAoreyAgNiwgMHgxNGZjLCAwLCB7MHg2MCwweDEwLDB4NzQsMHhmZiwweDgwLDB4MGZ9IH0sCit7ICA1LCAweDE1MDIsIDAsIHsweGE4LDB4ODIsMHhlNiwweDgwLDB4MGF9IH0sCit7ICAzLCAweDE1MDcsIDAsIHsweGUwLDB4ODAsMHgwN30gfSwKK3sgIDQsIDB4MTUwYSwgMCwgezB4ZTQsMHg5MywweDgwLDB4MDN9IH0sCit7ICAzLCAweDE1MGUsIDAsIHsweGE4LDB4ODIsMHhlMn0gfSwKK3sgIDQsIDB4MTUxMSwgMCwgezB4ZjgsMHhkMCwweGUwLDB4Yzh9IH0sCit7ICAxLCAweDE1MTUsIDAsIHsweDIyfSB9LAoreyAgMCwgMHgwMDAwLCAxLCB7MH0gfQorCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBiaXRzdHJlYW1bXSA9IHsKKworMHgwMCwweDA5LDB4MEYsMHhGMCwweDBGLDB4RjAsMHgwRiwweEYwLCAweDBGLDB4RjAsMHgwMCwweDAwLDB4MDEsMHg2MSwweDAwLDB4MEQsCisweDY0LDB4NjEsMHg2MiwweDc1LDB4NzMsMHg2MiwweDc0LDB4NzIsIDB4MkUsMHg2RSwweDYzLDB4NjQsMHgwMCwweDYyLDB4MDAsMHgwQiwKKzB4NzMsMHgzMSwweDMwLDB4NzgsMHg2QywweDc2LDB4NzEsMHgzMSwgMHgzMCwweDMwLDB4MDAsMHg2MywweDAwLDB4MEIsMHgzMSwweDM5LAorMHgzOSwweDM5LDB4MkYsMHgzMCwweDM5LDB4MkYsMHgzMiwweDM0LCAweDAwLDB4NjQsMHgwMCwweDA5LDB4MzEsMHgzMCwweDNBLDB4MzQsCisweDMyLDB4M0EsMHgzNCwweDM2LDB4MDAsMHg2NSwweDAwLDB4MDAsIDB4MkUsMHhDMCwweEZGLDB4MjAsMHgxNywweDVGLDB4OUYsMHg1QiwKKzB4RkUsMHhGQiwweEJCLDB4QjcsMHhCQiwweEJCLDB4RkIsMHhCRiwgMHhBRiwweEVGLDB4RkIsMHhERiwweEI3LDB4RkIsMHhGQiwweDdGLAorMHhCRiwweEI3LDB4RUYsMHhGMiwweEZGLDB4RkIsMHhGRSwweEZGLCAweEZGLDB4RUYsMHhGRiwweEZFLDB4RkYsMHhCRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhBRiwweEZGLDB4RkEsMHhGRiwweEZGLDB4RkYsIDB4QzksMHhGRiwweEZGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4QTMsMHhGRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFRiwweEUzLDB4RkUsMHhGRiwweEJGLCAweEUzLDB4RkUsMHhGRiwweEJGLDB4NkYsMHhGQiwweEY2LDB4RkYsCisweEJGLDB4RkYsMHg0NywweEZGLDB4RkYsMHg5RiwweEVFLDB4RjksIDB4RkUsMHhDRiwweDlGLDB4RUYsMHhGQiwweENGLDB4OUIsMHhFRSwKKzB4RjgsMHhGRSwweEVGLDB4OEYsMHhFRSwweEZCLDB4RkUsMHgwQiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkIsMHhGRiwweEZGLCAweEJGLDB4RkYsMHhGRiwweEZDLDB4MTcsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4N0YsIDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwKKzB4RkMsMHgzRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHg1RiwweEZGLCAweEZGLDB4RkQsMHhGRiwweEZGLDB4REIsMHhGRiwweEZELDB4RkYsCisweDc3LDB4RkYsMHhGRCwweEZGLDB4RkYsMHhERiwweEZFLDB4RkQsIDB4RkYsMHhGRiwweEYyLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEUxLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgzRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RTMsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhCRiwKKzB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweDY3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwweDJGLDB4RkYsCisweEYzLDB4RkQsMHhGRiwweDdGLDB4REUsMHhGNywweEZELDB4RkYsIDB4N0YsMHhGNywweDdELDB4RkYsMHg3RiwweERGLDB4RjcsMHhCRCwKKzB4RkYsMHg3RiwweEZGLDB4MUYsMHhGRiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhFRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEZGLCAweDNGLDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGOSwweEZFLDB4N0YsCisweDlGLDB4RTcsMHhGQSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsIDB4N0YsMHg5RiwweEU3LDB4RkYsMHhGQywweDdGLDB4QkYsMHhCRiwKKzB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhCNywgMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLAorMHhGRiwweEUwLDB4RkQsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LCAweEY5LDB4RkUsMHg3RiwweDlELDB4RjksMHhGRSwweDdELDB4OUQsCisweEU3LDB4RjksMHhGRSwweDdGLDB4OUYsMHhFRCwweEVELDB4RkYsIDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwKKzB4REYsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwgMHg3RiwweERGLDB4RkYsMHg5QiwweEZGLDB4RUYsMHhGQiwweEZFLAorMHhGQiwweEJGLDB4RUYsMHhCQiwweEZFLDB4RkYsMHhBRiwweEJCLCAweEJFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RkYsCisweEI3LDB4QkYsMHhEQiwweEY2LDB4QkQsMHhCRiwweDZCLDB4REIsIDB4RjYsMHhGOSwweEJGLDB4NUIsMHhENiwweEY5LDB4QkYsMHg2RiwKKzB4REIsMHhGNiwweEZELDB4QkYsMHhGRiwweDBFLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4NUYsMHhGRiwweEY3LDB4RkYsMHhGRiwweDdGLAorMHhGNywweEJELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4REYsMHg5RiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsCisweEZGLDB4RUYsMHhGRSwweEZFLDB4RkYsMHhGRiwweDc3LDB4RkYsIDB4RkIsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjgsMHgzRiwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGNCwweDdGLDB4RkYsMHhGRSwweEZELCAweEJFLDB4RkYsMHhERiwweEZFLDB4RkYsMHhGRiwweEVGLDB4N0YsCisweEZGLDB4Q0YsMHhGRiwweENGLDB4RkYsMHhGRiwweEZGLDB4REYsIDB4RTYsMHhGRiwweEZGLDB4N0YsMHhERiwweEY3LDB4REQsMHg3RiwKKzB4N0YsMHhERiwweEY3LDB4RkYsMHg3RiwweERGLDB4RDcsMHhGRCwgMHhGRiwweDdGLDB4REYsMHhGNywweEZGLDB4Q0QsMHhGRiwweEYyLAorMHhGRiwweEZGLDB4NEYsMHg3RiwweEY0LDB4RkYsMHhGRiwweEZGLCAweEU3LDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhCQiwweEZGLDB4RUYsMHhGRiwweEZFLDB4RkYsIDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGQiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg2NSwgMHhFRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkQsMHhFRiwweEZGLAorMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZFLDB4Q0YsMHhERiwweEZFLDB4RkYsCisweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYzLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkUsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhCRiwweEZGLCAweEZGLDB4RkYsMHhFMywweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhFRiwweEVCLDB4RkYsMHhGRSwweEJGLDB4RkYsIDB4RUIsMHhGRiwweEZDLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhFRSwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REQsMHhGRiwgMHhENiwweEZGLDB4RkQsMHhCRiwweEZGLDB4RkIsMHhGRiwweEZFLAorMHhGRCwweEZGLDB4RkYsMHhGRCwweEVGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweERFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhCRiwweEZGLDB4RkQsMHhGRiwweDdGLDB4QkYsIDB4RkYsMHg1RiwweERGLDB4RkYsMHhGRiwweEJGLDB4NzcsMHhGRiwKKzB4RkYsMHhGRiwweDdGLDB4RDcsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEMzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERiwweEVGLAorMHhGRiwweEZGLDB4RkUsMHhGQiwweEZGLDB4RkYsMHhERiwweEJGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RUQsMHhGRiwweEI3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4QUYsMHg3RiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweERGLDB4QkYsMHhERiwweEYzLDB4RkQsMHhGQiwweEZGLDB4NUIsCisweEZELDB4RkYsMHhCRiwweEVGLDB4RjcsMHhGRiwweEZGLDB4N0QsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGOCwweDNCLDB4RkYsMHhCRiwKKzB4NkYsMHhGRiwweEZFLDB4RkYsMHhCRiwweEZGLDB4RUIsMHg3RCwgMHhGRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEYyLDB4N0YsMHhGQywweEZGLDB4M0YsMHhERiwweEVELCAweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRiwweDVGLDB4RjcsCisweEI1LDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweEUwLDB4M0YsIDB4OUYsMHg5RSwweEZGLDB4RkYsMHhFRiwweEZGLDB4REYsMHhGRiwKKzB4QkYsMHg1RiwweEJGLDB4Q0YsMHhGMywweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHg2OSwweEFGLDB4MzMsMHhGRCwweEZGLAorMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHhGRiwweDdGLCAweEQ5LDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjUsCisweEEzLDB4REYsMHg2RSwweERFLDB4RkYsMHhGRiwweEJELDB4RkYsIDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZFLDB4RTcsMHhGRCwKKzB4RkYsMHhGRiwweEZGLDB4RjksMHhFRiwweEM2LDB4RkUsMHhCNywgMHhBRCwweEU1LDB4RjksMHhGRiwweEZGLDB4RkYsMHhDRiwweEZGLAorMHhGRiwweEZGLDB4Q0QsMHhGQiwweDdGLDB4RkYsMHhGRiwweEZGLCAweEY5LDB4RjYsMHgwRiwweERGLDB4RUMsMHhDRiwweDdGLDB4RkYsCisweEZCLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkUsIDB4RjksMHhGRCwweDdGLDB4RkYsMHg3RiwweEZGLDB4RjksMHg1QiwKKzB4RkYsMHg3MywweERDLDB4RkQsMHg3QiwweERGLDB4RkYsMHhGRiwgMHhGRiwweDdCLDB4RkYsMHhGRiwweEY3LDB4NTMsMHhENiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhEOCwweDlGLDB4RkUsMHhGRiwweEVGLCAweDdGLDB4RUUsMHhGRiwweEZGLDB4RkYsMHhGQiwweEVELDB4RUQsCisweEZELDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGQiwweDdGLDB4RkYsIDB4RTIsMHg3RiwweEZGLDB4NkYsMHhEOCwweDU3LDB4RjcsMHhGRiwKKzB4RkYsMHhGRiwweERGLDB4RkYsMHhFOCwweEZGLDB4RkYsMHhGRCwgMHhGRiwweEZGLDB4RkMsMHg3RiwweEZGLDB4RTQsMHhGRiwweEZCLAorMHhFRiwweEZCLDB4RkUsMHhERiwweEI3LDB4RUQsMHhGRiwweEZFLCAweERGLDB4N0YsMHhGRiwweEZFLDB4N0YsMHhCNywweEZGLDB4RkYsCisweEZGLDB4RkYsMHg4OSwweEZGLDB4RkYsMHhDRiwweEYzLDB4RkUsIDB4N0YsMHhGRiwweEVGLDB4RkYsMHhGRSwweDdFLDB4N0YsMHhGQiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMSwgMHhGRiwweEVCLDB4N0EsMHhENSwweEJGLDB4NkYsMHhEQiwweEJFLAorMHhGRCwweEI3LDB4RDgsMHhGNiwweEU1LDB4QkYsMHg2RiwweEZCLCAweEZFLDB4RjUsMHhCRCwweDdFLDB4MDYsMHhGRiwweERGLDB4RjcsCisweEZCLDB4RjYsMHhGRiwweDNGLDB4RkYsMHhEQiwweEZGLDB4RkYsIDB4NkYsMHhGQiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGRSwKKzB4RjcsMHhBRiwweEZGLDB4QjcsMHhFRCwweEVGLDB4RjcsMHhGRSwgMHhGRiwweEZGLDB4REYsMHhGRiwweEZFLDB4RkYsMHhFRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhCRiwweEY3LDB4RkMsMHgxRiwweEVFLCAweEZCLDB4RkUsMHhCRCwweEZGLDB4N0YsMHg1RiwweEQ3LDB4RkQsCisweEZCLDB4NDMsMHhGRiwweEZGLDB4RkQsMHhGRiwweDVGLDB4RkYsIDB4RjcsMHhGRiwweEY5LDB4M0YsMHhGRiwweENGLDB4RjMsMHhGRCwKKzB4RjcsMHg3RSwweEVGLDB4QTcsMHhGOSwweEZFLDB4OEYsMHhBNywgMHhFOSwweEYzLDB4N0UsMHg5RiwweEZCLDB4RjgsMHhGRiwweEZGLAorMHgzRiwweEZELDB4N0YsMHg1RiwweERGLDB4RkQsMHhGRiwweEZGLCAweDVGLDB4RkYsMHhGRCwweDVGLDB4RkYsMHhGRiwweDdGLDB4RkQsCisweDdGLDB4RkQsMHg5RiwweEZGLDB4RTAsMHhGRiwweEZBLDB4RjgsIDB4QkUsMHg2RiwweDlGLDB4RTYsMHhGOCwweEJFLDB4M0YsMHg5QSwKKzB4RjksMHhCRSwweDZGLDB4OUYsMHhFMiwweEY5LDB4RkUsMHg2RiwgMHg5RiwweEY5LDB4RkYsMHhGNSwweEZELDB4N0YsMHhDRiwweERGLAorMHhGRCwweEZELDB4N0YsMHhGRiwweEY1LDB4RkYsMHhGRiwweEZGLCAweEY3LDB4RjUsMHhGRCwweDBGLDB4REIsMHhGRiwweEQzLDB4RkYsCisweEVCLDB4RkEsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZBLDB4RkYsIDB4RkYsMHhDQiwweEZCLDB4RkUsMHhGRiwweEZGLDB4RUIsMHhGQSwKKzB4RkUsMHhGRiwweEZGLDB4QjcsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhCRiwweEZGLDB4REYsMHhGNSwweEZGLDB4RkYsMHhENywweEZGLAorMHhGRiwweEZGLDB4REYsMHhENywweEY1LDB4RkYsMHg3RiwweEZFLCAweDRGLDB4RkYsMHhGRCwweEZGLDB4N0YsMHg3RiwweEZGLDB4QUQsCisweEVCLDB4RkIsMHhGRiwweEFELDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4QUYsMHhFQiwweEZCLDB4RkYsMHhGQywweDBELDB4RkYsMHhGRiwKKzB4REYsMHhEMiwweEZELDB4RkYsMHhGRiwweEZELDB4RjYsMHhGRiwgMHhGRiwweDdGLDB4RkYsMHhGRiwweDFGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZCLDB4M0YsMHg3RCwweEVCLDB4MzIsMHhGRSwweEJGLCAweDJGLDB4RUIsMHhGQSwweEFFLDB4QkQsMHhFMCwweEZBLDB4N0UsCisweEJGLDB4QUQsMHhFQiwweEZBLDB4RkUsMHhCRiwweEY1LDB4N0YsIDB4RkYsMHhERSwweEZFLDB4RTMsMHhGQiwweEZGLDB4RkYsMHhGRiwKKzB4REYsMHhFRiwweDRGLDB4REYsMHhGRiwweDdGLDB4REYsMHhGRiwgMHhGNywweEZGLDB4RkYsMHhGOCwweDdGLDB4RkYsMHhGRiwweEVGLAorMHhGQiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweERGLCAweEVELDB4RkIsMHhERiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsCisweDgxLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgzRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZFLDB4REQsMHhGRSwweEVGLDB4RkQsMHhGRiwKKzB4RkYsMHhGQiwweEZFLDB4RjcsMHhGRiwweDkzLDB4RkQsMHhGQiwgMHg3RSwweEZGLDB4RkUsMHg4NywweEU5LDB4RkYsMHg3RiwweEIzLAorMHg5RiwweEZFLDB4RkUsMHhGRiwweEFGLDB4RkQsMHhGRSwweDdFLCAweDNGLDB4RkUsMHg2NywweEZGLDB4RkYsMHhGNywweEZGLDB4RkYsCisweEZDLDB4RjcsMHhERiwweEZELDB4RkYsMHg3RiwweEZGLDB4RkYsIDB4N0YsMHg2RCwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHgyRiwKKzB4RkYsMHhCRiwweEZGLDB4RkYsMHhFRSwweEZGLDB4QkUsMHhGRiwgMHhGRiwweEZFLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRSwweEZGLAorMHhFRiwweEZGLDB4RkYsMHhGQSwweDVGLDB4RkYsMHhGRiwweEZCLCAweEZGLDB4RkYsMHhFRiwweEZGLDB4RkIsMHhGRSwweEZELDB4RkYsCisweEZFLDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsIDB4RkUsMHhCRiwweERGLDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGNywKKzB4RkMsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjIsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEYzLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGQiwweEZGLDB4RkYsCisweEZGLDB4REYsMHhFMiwweEZGLDB4RkYsMHhGQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEU3LDB4RkYsMHhGRCwKKzB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhFRCwgMHhFRiwweEZELDB4RkYsMHhGRiwweERGLDB4RDcsMHhGNSwweEZELAorMHg3RiwweDVELDB4RkQsMHhGRiwweDdGLDB4REYsMHg5NywweEY0LCAweEZELDB4N0IsMHg1RiwweEZGLDB4QzksMHhGRiwweEZCLDB4RkUsCisweEZGLDB4QkYsMHhGRiwweDVGLDB4RkYsMHhGRiwweEY3LDB4RkYsIDB4RUYsMHhGRCwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGNywweEZGLDB4RDcsMHhGRCwweDdELDB4N0YsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhFRiwweERGLDB4RjcsMHhGRCwweEZGLAorMHhCQiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkUsMHhFMywweEZGLCAweEY5LDB4RkUsMHg3RiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsCisweEJGLDB4RjksMHhGRSwweEZGLDB4OUYsMHhFRiwweEY5LDB4RkUsIDB4RkYsMHhCRiwweEYzLDB4REEsMHhGRiwweDM3LDB4Q0QsMHhGMywKKzB4N0MsMHhERiwweDM3LDB4Q0QsMHhGMywweDdGLDB4MzcsMHhDRCwgMHhGMywweDdDLDB4REYsMHgzNywweENDLDB4RjMsMHg3RiwweDVBLAorMHhCRCwweEY2LDB4RkQsMHhCRiwweDZGLDB4REIsMHhGNiwweEZELCAweEJGLDB4NkYsMHhERSwweEZELDB4QkYsMHg2RiwweERCLDB4RjYsCisweEZELDB4QkYsMHg2RiwweEZFLDB4RjEsMHg2RiwweEVCLDB4N0EsIDB4REUsMHhCNywweEFELDB4RUIsMHg3QSwweERFLDB4QjcsMHhBRiwKKzB4N0EsMHhERSwweEI3LDB4QUQsMHhFQiwweDdBLDB4REUsMHhCNywgMHhGRiwweDdFLDB4RkYsMHhGRSwweENELDB4QjMsMHg2QywweERCLAorMHgzNiwweENELDB4QjMsMHg2QywweERFLDB4Q0QsMHhCMywweDZDLCAweERCLDB4MzYsMHhDRCwweEIzLDB4NkMsMHhERiwweEM5LDB4QkYsCisweEY3LDB4QkQsMHhFRiwweDdBLDB4OUUsMHhBNywweEE5LDB4RUEsIDB4N0EsMHhCNywweEJELDB4RUEsMHg3QiwweERFLDB4QTcsMHhCRCwKKzB4Q0EsMHg3MiwweDhELDB4OTEsMHhGRiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RjcsMHhFRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEZFLCAweDg3LDB4RkYsMHhGNiwweEZELDB4QkYsMHg2RiwweERCLDB4RjYsCisweEZELDB4QkYsMHg2RiwweEY2LDB4RkQsMHhCRiwweDZGLDB4REIsIDB4RjYsMHhGRCwweEJGLDB4NkYsMHhGRSwweDRGLDB4RkYsMHhCRiwKKzB4RUYsMHhCQiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsMHhFRiwgMHhCRSwweEVGLDB4QkIsMHhFRSwweEZCLDB4QkUsMHhFRiwweEJCLAorMHhFRiwweEZDLDB4NUYsMHhGRiwweEZGLDB4RkYsMHgzRiwweENGLCAweEYzLDB4RkMsMHhGRiwweDNGLDB4Q0YsMHhGQywweEZGLDB4M0YsCisweENGLDB4RjMsMHhGQywweEZGLDB4M0YsMHhDRiwweEZELDB4OUYsIDB4RkUsMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwKKzB4RUIsMHhGRSwweEJGLDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwgMHhBRiwweEVCLDB4RkYsMHhFMSwweDZGLDB4RkQsMHhGRiwweDdGLAorMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRCwweEZGLCAweDdGLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLDB4RkYsCisweDdBLDB4QkYsMHhGQiwweEZFLDB4REYsMHhCNywweEVELDB4RkIsIDB4N0UsMHhERiwweEI3LDB4RkIsMHg3RSwweERGLDB4QjcsMHhFRCwKKzB4RkIsMHg3RSwweERGLDB4QjcsMHhGRiwweEM5LDB4RkYsMHhGRiwgMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVFLCAweEZCLDB4RkUsMHhCQiwweEZGLDB4RkUsMHhGRiwweEJGLDB4RUYsCisweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGRSwweEZGLDB4QkYsIDB4RUYsMHhGQiwweEZFLDB4RkYsMHgzRiwweENGLDB4RkYsMHhFNywKKzB4RkUsMHhGRiwweEY1LDB4RkQsMHg3NywweDVELDB4RDcsMHgzNSwgMHhERCwweDc3LDB4RDcsMHhGNSwweENELDB4N0IsMHg1RCwweEQ3LAorMHhGNSwweERELDB4NzcsMHhGRSwweDI3LDB4RkYsMHhGRiwweDhCLCAweEUyLDB4RjgsMHhCRSwweDJGLDB4OEIsMHhFMiwweEY5LDB4QUYsCisweDhCLDB4RTIsMHhGOCwweEJFLDB4MkYsMHg4QiwweEUyLDB4RjksIDB4RkUsMHgxRiwweEZGLDB4NUYsMHhENywweEY1LDB4RkQsMHg3RiwKKzB4NUYsMHhENywweEY1LDB4RkYsMHg1RiwweEQ3LDB4RjUsMHhGRCwgMHg3RiwweDVGLDB4RDcsMHhGNSwweEZGLDB4RkEsMHgzRiwweEZFLAorMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwweEVCLCAweEVDLDB4QkYsMHhBRiwweEVCLDB4RkEsMHhGRSwweEJGLDB4QUYsCisweEVCLDB4RkYsMHhGRSwweDdGLDB4RkQsMHg3RiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFNiwgMHhGRiwweEZBLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLAorMHhGNywweEZDLDB4RkYsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLCAweERGLDB4RjcsMHhGRCwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHgwMiwweEZGLDB4RkUsMHhCRiwweEFCLDB4RUIsMHhGQSwgMHhCRSwweEJGLDB4MjMsMHhFQiwweERFLDB4MUYsMHhBRiwweEVBLAorMHhGQSwweEZFLDB4QUYsMHhBRiwweEVCLDB4RkQsMHg5NywweEZGLCAweEYzLDB4RkMsMHg3QiwweDFGLDB4Q0YsMHhGMSwweEZDLDB4N0YsCisweDFGLDB4RjEsMHhGQywweDc3LDB4MUYsMHhDRCwweEYxLDB4RkMsIDB4RkYsMHgxRiwweEZFLDB4ODcsMHhGRiwweEFGLDB4RUYsMHhGQSwKKzB4RkUsMHhGRiwweEFGLDB4RUYsMHhGQSwweEZELDB4QkYsMHgyQiwgMHhGQiwweDdFLDB4QkYsMHhCRiwweEVCLDB4RkIsMHhGQiwweEZCLAorMHhERiwweEZGLDB4RkIsMHhGNywweEZGLDB4RkYsMHg3RiwweEY3LCAweEY3LDB4RkYsMHhGRCwweERGLDB4RkUsMHhGQywweERGLDB4RkYsCisweERGLDB4RkYsMHhGRCwweEZGLDB4REEsMHhCRiwweEZGLDB4QkIsIDB4RUYsMHhGQiwweEY5LDB4RkYsMHhCRSwweEVGLDB4RkIsMHhGQiwKKzB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwgMHhGRiwweEY3LDB4N0YsMHhGRCwweEQ3LDB4RkYsMHhGRiwweDdGLAorMHhGRiwweEZGLDB4RkYsMHhGRSwweEY3LDB4RkYsMHhGRSwweEZGLCAweEY3LDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEVDLDB4RkYsCisweEZGLDB4RkUsMHhERiwweEJGLDB4RkYsMHhGQiwweEZFLDB4RkYsIDB4QkIsMHg2OCwweEFFLDB4MUYsMHhBRSwweEZCLDB4RkIsMHhGRiwKKzB4RkYsMHhCRiwweEZGLDB4RDUsMHhGRiwweDdGLDB4RkYsMHhGRiwgMHhGNywweEZFLDB4RkUsMHhGRiwweEJGLDB4RUYsMHg5RiwweEZELAorMHg3RiwweEZGLDB4Q0IsMHhGRiwweEZGLDB4REYsMHhGRiwweEZGLCAweEJCLDB4RjcsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REYsCisweEZGLDB4QkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweERFLDB4M0YsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEE3LDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEVGLDB4RkYsMHg3RiwweEZCLDB4RkQsMHhGQiwgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4Q0YsMHhGMywweDdDLAorMHhGRiwweDdGLDB4OEQsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZCLDB4RkYsMHhGNywweEZCLDB4RkUsMHhGRCwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGNywweEZELDB4RkYsMHg3RiwweEZELDB4MUYsIDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEJGLDB4REYsMHhGRiwKKzB4RkYsMHhGRSwweDVDLDB4RkYsMHg2RCwweEZGLDB4N0YsMHhBQiwgMHhFNywweEYxLDB4RkYsMHhGRCwweDlGLDB4RkYsMHhGRiwweEFELAorMHhFQiwweDdBLDB4M0YsMHgxRiwweEZGLDB4RkYsMHhGRSwweEJGLCAweEFGLDB4RjMsMHhERSwweEY1LDB4RkYsMHg4RiwweEZCLDB4REYsCisweEU2LDB4N0YsMHhGRiwweERGLDB4RjMsMHhGRCwweEZGLDB4N0UsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4RjcsMHhGMywKKzB4N0YsMHhERiwweEY3LDB4RUYsMHhGRiwweEY2LDB4M0YsMHg5RiwgMHhERiwweEZGLDB4RkYsMHhFRSwweEZGLDB4RkYsMHhFRiwweEZCLAorMHhGRiwweEZGLDB4RjksMHhGQiwweEZFLDB4NEYsMHhCRiwweEVGLCAweEJCLDB4RkYsMHg2OSwweEFGLDB4QUYsMHhGQywweEZGLDB4M0YsCisweERELDB4RkYsMHhGQywweEJGLDB4OEYsMHhGRiwweEZELDB4RjMsIDB4QkYsMHhFRCwweDlFLDB4RkMsMHhCRiwweDZGLDB4RjUsMHhEMywKKzB4REYsMHhGRiwweERCLDB4RDYsMHhGNSwweEVGLDB4RkQsMHhGRSwgMHhGRiwweEI5LDB4RkYsMHgxRiwweEQyLDB4QTksMHhBRiwweEZGLAorMHhEQiwweEY3LDB4QkYsMHhFRiwweDQ2LDB4RkYsMHhGRiwweEFELCAweEVCLDB4N0EsMHhERiwweEVGLDB4RjcsMHhGRiwweDdGLDB4RjcsCisweDlGLDB4RUQsMHhGRiwweDdGLDB4RkYsMHhBRCwweEVCLDB4N0YsIDB4RjUsMHg2RiwweEZGLDB4RkQsMHhGQiwweEQ2LDB4RjQsMHhGNywKKzB4RkIsMHhGOSwweDdFLDB4N0YsMHhGRiwweDVGLDB4QzIsMHhGRSwgMHhCRiwweEZELDB4RkIsMHgzMywweERGLDB4RjksMHg1QiwweEZGLAorMHhGRiwweERELDB4NjcsMHg3RCwweENGLDB4RUYsMHhEQiwweEVDLCAweEZGLDB4NzcsMHhERCwweEY3LDB4RkQsMHhGRiwweEZGLDB4REUsCisweEE3LDB4QkYsMHhENCwweDlGLDB4RkYsMHhGRiwweEJGLDB4RUYsIDB4RkUsMHhGRiwweERGLDB4RUYsMHhCQiwweEZGLDB4RkYsMHhFRiwKKzB4RUIsMHhGQSwweEZGLDB4RUYsMHhCRCwweEZCLDB4RkYsMHhFMiwgMHg3RiwweEZGLDB4REYsMHhERiwweEY3LDB4RkQsMHhCRiwweEJCLAorMHg3MywweEY3LDB4RkQsMHg3RiwweERGLDB4REUsMHhGNywweEJGLCAweEVBLDB4REIsMHhGNiwweEZGLDB4RDYsMHhGRiwweEZGLDB4NjYsCisweEZGLDB4QkUsMHhGRiwweEJGLDB4NkIsMHhEOSwweEY2LDB4REYsIDB4RkYsMHhGQiwweDdFLDB4N0YsMHhCNywweDdFLDB4RkYsMHhGRSwKKzB4RkYsMHhDRCwweEZGLDB4RkUsMHg3RiwweEZGLDB4RkMsMHhGRCwgMHgzRiwweEZCLDB4RkIsMHhGNywweEZGLDB4RkYsMHhGQiwweEY2LAorMHg3RCwweEZFLDB4N0YsMHhGRiwweEZDLDB4RkYsMHhCOSwweEZGLCAweEY5LDB4RkEsMHhGRSwweEJGLDB4QUYsMHg1QiwweEQ2LDB4RUQsCisweEFELDB4N0IsMHhGNiwweEY5LDB4QkYsMHhFRiwweEY4LDB4RkEsIDB4RkUsMHhCRiwweEZFLDB4RTYsMHhGRiwweEZGLDB4RjcsMHhGRCwKKzB4RkYsMHg3RiwweEJGLDB4RUYsMHhGMywweEZGLDB4RkYsMHg2RiwgMHhGNywweEZFLDB4RkYsMHhGRiwweEY3LDB4RkQsMHhGRSwweEY3LAorMHhFRiwweEZGLDB4RkIsMHhFRiwweEZCLDB4N0UsMHhERSwweEZFLCAweEZGLDB4QkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZCLDB4RkYsCisweEZGLDB4RUYsMHhGQiwweDZGLDB4RkMsMHgxRiwweEZFLDB4RTcsIDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEQzLDB4QjQsMHhCQiwKKzB4RkYsMHhGRiwweEZELDB4QkYsMHg2RiwweEUzLDB4RkUsMHhGRiwgMHhCRiwweEZDLDB4QkYsMHhGNywweENGLDB4RjcsMHhGRCwweEZGLAorMHgyRiwweERGLDB4QUIsMHhFQSwweEZGLDB4REYsMHhFNywweEVBLCAweDlBLDB4QUYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEY1LDB4M0YsCisweEZELDB4N0UsMHhGRiwweEQ3LDB4RjUsMHhGQiwweEZGLDB4RkQsIDB4RjcsMHhGRiwweDdGLDB4RkUsMHhGNywweEZELDB4RkYsMHhENywKKzB4RkYsMHhENywweDdGLDB4RUUsMHg3RiwweEZBLDB4NzksMHhGRSwgMHgyRiwweDhCLDB4RTYsMHhGOSwweEZFLDB4M0YsMHg5RSwweEY5LAorMHhCRSwweDJGLDB4MEIsMHhFNywweEY5LDB4RkUsMHgyRiwweDlGLCAweEZELDB4RkYsMHhGRSwweDdELDB4N0YsMHg1RiwweEQ3LDB4RkYsCisweEZGLDB4N0YsMHhGRiwweEZELDB4RkYsMHg3RiwweDVGLDB4OTcsIDB4RkYsMHhGRCwweDdGLDB4NUYsMHhGRiwweEUzLDB4RkYsMHhGRiwKKzB4RkEsMHhGRSwweEJGLDB4QUYsMHhGQiwweEZCLDB4RkYsMHhGRiwgMHhDRiwweEVCLDB4RkUsMHhCRiwweEFGLDB4RkYsMHhGQSwweEZFLAorMHhCRiwweEZGLDB4ODcsMHhGRiwweEZGLDB4RjUsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRCwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsCisweEZCLDB4RkYsMHhGRiwweEY1LDB4RkYsMHhGRiwweEZFLDB4MEYsIDB4RkYsMHhGRCwweEVCLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhFRiwKKzB4N0IsMHhERiwweEZFLDB4RkYsMHhGRiwweERGLDB4RjcsMHhGRCwgMHhFQiwweDdGLDB4REYsMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZELDB4QkYsMHhGRiwweDdFLDB4RkEsMHhCRiwweEM3LCAweERCLDB4RjcsMHhCRCwweDNGLDB4RkIsMHhGRiwweEY2LDB4RkYsCisweEZBLDB4QUYsMHhGRiwweEVCLDB4RkEsMHhGRSwweDNGLDB4MkYsIDB4RUEsMHhGQSwweDNFLDB4QUQsMHhDOSwweEJBLDB4RjYsMHhBRCwKKzB4QUYsMHhFQiwweEZBLDB4RjYsMHhCRiwweEZFLDB4N0YsMHhGRiwgMHhGRiwweEZELDB4RkYsMHhGMSwweDdGLDB4M0YsMHhDRiwweEYxLAorMHhFRiwweEZGLDB4N0YsMHhGRiwweEJDLDB4REYsMHhERiwweEY3LCAweERELDB4RkYsMHhFMCwweDdGLDB4RkYsMHhGRiwweEZFLDB4RkYsCisweEZBLDB4RUMsMHhCQiwweDdGLDB4NUYsMHhGRiwweEZCLDB4RUMsIDB4RkYsMHhFRiwweEI3LDB4RkYsMHhGNywweEZGLDB4RkYsMHhCNSwKKzB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RUUsMHhERiwgMHg1RiwweERGLDB4REUsMHhGRiwweEFFLDB4RTcsMHg3NywweEZGLAorMHhGRiwweERGLDB4RjcsMHhGRiwweEUzLDB4RkYsMHhGQSwweEJCLCAweEZFLDB4RkYsMHhBRiwweEZELDB4RkIsMHhGRSwweEJGLDB4QUIsCisweEY5LDB4RkUsMHhGRiwweEJGLDB4N0YsMHhCRiwweEZFLDB4QkQsIDB4RkUsMHhENywweEZGLDB4OUYsMHhGRCwweEZGLDB4QkUsMHhFRiwKKzB4RkYsMHhFRSwweEZELDB4QkIsMHg1QiwweEVGLDB4RkYsMHg3RiwgMHhFRiwweEZGLDB4RUYsMHhGRiwweDdGLDB4RkYsMHg0RiwweEZGLAorMHhFRiwweEZCLDB4QkMsMHhGQywweEZGLDB4RkYsMHhGRiwweEZFLCAweEZFLDB4RkQsMHhGQSwweEZFLDB4RkIsMHhGRiwweEZELDB4RjMsCisweEZCLDB4RkYsMHhGOCwweDVGLDB4RkYsMHhGRiwweEQ3LDB4RjUsIDB4RkQsMHhERiwweEVGLDB4RkYsMHhGMywweERDLDB4NUYsMHhDRSwKKzB4RjUsMHhCRCwweEZGLDB4RkYsMHhENywweEZGLDB4RkYsMHhGOSwgMHgzRiwweEZGLDB4REYsMHhGNywweEZGLDB4RkUsMHhGRiwweEZELAorMHhGRiwweEZCLDB4RkYsMHhGNywweEI5LDB4N0QsMHhGRSwweERGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjksMHg3RiwweEZGLDB4RkUsCisweEZGLDB4RkYsMHg3RiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RjcsIDB4RjYsMHhGRiwweEJGLDB4RjEsMHhGOCwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhFMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjksMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RUYsMHhGRiwweEZGLAorMHg5QiwweEZCLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhDMSwweEZGLCAweERGLDB4RkYsMHgzRiwweDVGLDB4RDcsMHhCRiwweEVGLDB4QkIsCisweERFLDB4RUUsMHhGRiwweDdGLDB4REYsMHhGRiwweEZFLDB4RjUsIDB4N0YsMHhERiwweEZGLDB4OTksMHhGRiwweEZGLDB4RkEsMHhGRiwKKzB4QkYsMHhGRCwweEVCLDB4N0EsMHhGRiwweEI3LDB4RkUsMHhGRSwgMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkQsMHhCRiwweEZGLAorMHg5NywweEZGLDB4RkQsMHhGNywweEZGLDB4N0YsMHhGNywweEZGLCAweEZGLDB4RkQsMHg1RiwweEZFLDB4RjMsMHhGOSwweERGLDB4REYsCisweEZGLDB4RkYsMHhGQywweEZGLDB4RkYsMHg4MywweEZGLDB4RkYsIDB4RkUsMHhGRiwweDlFLDB4RUMsMHhGQiwweEVFLDB4RkYsMHg5RiwKKzB4QkYsMHhFRiwweEZGLDB4RkUsMHhFRCwweDdCLDB4RkYsMHhGRiwgMHhGRiwweEYxLDB4NUEsMHhGRiwweEZGLDB4RkQsMHhGRiwweDdDLAorMHg2OSwweDNCLDB4REYsMHhGRiwweDdGLDB4MUYsMHhERiwweEZGLCAweEZELDB4QkEsMHhGRiwweEZGLDB4RkIsMHhGRiwweDVCLDB4QkQsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RDcsMHhCNiwweEVELDB4RTksIDB4RkYsMHhENiwweEJELDB4NkYsMHg1RiwweEZCLDB4RkYsMHhFRiwKKzB4RkYsMHg1RiwweEZFLDB4RjYsMHg2RiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEY3LDB4RUIsMHg3QSwweERGLDB4RkYsMHg5RiwweDdGLAorMHg3RiwweEZGLDB4QjcsMHhGRiwweEZGLDB4RkUsMHhERiwweEZGLCAweDZDLDB4RkYsMHhGQiwweEZGLDB4QkIsMHg2RiwweEVCLDB4RkUsCisweENDLDB4RjcsMHhBNSwweEZBLDB4NUMsMHhGNSwweDc1LDB4QkIsIDB4QjcsMHhERiwweEZFLDB4NkYsMHg1RiwweEM1LDB4QkYsMHhGRCwKKzB4N0IsMHhGRSwweEZGLDB4OTUsMHhFNywweDI5LDB4Q0YsMHg0RiwgMHhGNSwweDkxLDB4RUUsMHg2QiwweERGLDB4RUYsMHhGRCwweDU0LAorMHhGNSwweEJELDB4QjEsMHhGRiwweEVGLDB4RUUsMHhGQiwweEJFLCAweEJGLDB4QUYsMHhGRSwweERFLDB4QkQsMHg2RiwweERBLDB4RjIsCisweEZGLDB4QUYsMHhCRSwweEZGLDB4RkYsMHhGRCwweDdFLDB4QTcsIDB4RkYsMHhGNywweEZGLDB4QkYsMHhFRiwweDdCLDB4RjYsMHhGRCwKKzB4QkQsMHg0QSwweEYyLDB4ODUsMHg4NSwweEJGLDB4NUIsMHhGRSwgMHhCNSwweEZELDB4RkEsMHhGRiwweDRGLDB4RkYsMHhGRSwweERGLAorMHhGRiwweEVELDB4RkYsMHhCRiwweEZGLDB4QkYsMHg3RiwweEZFLCAweEZGLDB4QjcsMHg2RCwweEZGLDB4RjcsMHhCRiwweEJGLDB4RUYsCisweEZELDB4MUYsMHhGRiwweEZFLDB4N0QsMHhGRiwweDY3LDB4RkYsIDB4RkYsMHhGRiwweDNGLDB4N0YsMHhGRSwweEJGLDB4RkYsMHhFNywKKzB4REYsMHhFNywweEZGLDB4RUYsMHg2QiwweEZDLDB4MUYsMHhGRiwgMHhCRiwweEVGLDB4RkIsMHhGRSwweERFLDB4QkYsMHhBRiwweEZBLAorMHhGRiwweEI2LDB4RUYsMHhGOSwweEZFLDB4RkYsMHg4RiwweEVGLCAweERCLDB4RUYsMHhBQiwweDZGLDB4RkIsMHhGRSwweEZGLDB4RkYsCisweEVGLDB4RkQsMHhGRiwweDdGLDB4RkYsMHhGRiwweERFLDB4RkYsIDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweDNGLDB4RkYsMHg2QywKKzB4RkYsMHhCRiwweEZCLDB4RkYsMHhGRSwweEZGLDB4RkIsMHhGRSwgMHhERiwweEZGLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhCRiwweEZGLAorMHhGRiwweEZFLDB4RkIsMHhGRiwweEQ1LDB4N0YsMHhGRiwweEZGLCAweEVGLDB4RkIsMHhGRiwweEZGLDB4QkYsMHhFRiwweDQzLDB4QjUsCisweEZELDB4NkYsMHhDRiwweEQ2LDB4QkUsMHgzRiwweDdGLDB4REIsIDB4RkUsMHhDMywweEZGLDB4RkQsMHhGRiwweEFGLDB4RUIsMHhGQiwKKzB4RkMsMHhGRiwweDNFLDB4RUYsMHhFOCwweEZBLDB4QkQsMHhDRCwgMHhBQSwweEZFLDB4RkUsMHg3RCwweENGLDB4RkYsMHhCNywweEZGLAorMHhGNywweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHg3NSwweENELCAweDUyLDB4RDcsMHhGRCwweEZCLDB4RjcsMHhERCwweEZCLDB4RUYsCisweEVCLDB4RkYsMHhGRiwweDRGLDB4RkYsMHhCRiwweDlGLDB4RTcsIDB4RjksMHhGQywweDdGLDB4OEIsMHhDMywweEY5LDB4QUYsMHg4RiwKKzB4RTcsMHhFOSwweEJFLDB4N0YsMHg5RiwweEU2LDB4RjksMHhGQywgMHg1RiwweEZGLDB4RkYsMHhGNywweEZELDB4RkYsMHg3QSwweDVGLAorMHhENywweEVELDB4RkYsMHhGRiwweEQ3LDB4RkYsMHhERCwweDdGLCAweEU3LDB4RkYsMHhGQywweEZGLDB4RkMsMHgzRiwweEZGLDB4RkYsCisweEZGLDB4RkIsMHhGRiwweEZFLDB4QkYsMHhBRiwweEZGLDB4RkQsIDB4RkYsMHhFRiwweEZGLDB4RUIsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGNywweDdGLDB4RkYsMHg3RiwweERGLDB4RkYsMHhGRCwgMHhGRCwweDdGLDB4RkUsMHhGNywweEZELDB4N0YsMHhERiwweEZGLAorMHhGRCwweEZGLDB4RkYsMHhERiwweEZCLDB4RkYsMHhFRSwweEZGLCAweEZCLDB4RkYsMHhGNywweEZELDB4RkYsMHg3QSwweERGLDB4RjUsCisweEZELDB4RkEsMHhERiwweEY3LDB4RkMsMHhGRiwweDdGLDB4REYsIDB4QkYsMHhFRCwweEZGLDB4QzksMHhGRiwweERGLDB4RkYsMHhCRiwKKzB4MkYsMHhGQiwweEZGLDB4QkMsMHhBRCwweEZGLDB4RjcsMHhGRiwgMHhGRiwweEVGLDB4RDMsMHhGRiwweDdELDB4QkYsMHg2RiwweEZGLAorMHhGQSwweEZGLDB4RkUsMHhCRiwweEFFLDB4RUEsMHhGQSwweEJFLCAweEFELDB4QTUsMHhFQiwweENFLDB4QkYsMHhBNywweEVCLDB4NUEsCisweERFLDB4QkQsMHhBRiwweDZCLDB4RkQsMHg1NywweEZGLDB4RkYsIDB4RjQsMHg3RiwweDFGLDB4N0YsMHhGRCwweEZGLDB4N0YsMHgzNiwKKzB4RjAsMHhERiwweDc5LDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRCwgMHhCRiwweEZGLDB4ODcsMHhGRiwweEZCLDB4RjMsMHhGQywweEZGLAorMHhGRiwweEZGLDB4RkYsMHg3RSwweEZGLDB4QkYsMHhERiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhCRiwweEY4LDB4OUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkQsIDB4RjcsMHhGQywweEJELDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZCLDB4RjksMHhCRiwweEZGLDB4RkYsMHhFQiwgMHhFMiwweEZFLDB4RkYsMHhCRiwweEVGLDB4QTksMHhCQSwweDJGLAorMHhFQiwweEY5LDB4RkUsMHg3NywweERGLDB4RjcsMHhGRiwweEZGLCAweEY5LDB4N0YsMHhGRiwweEZGLDB4N0YsMHhFRiwweEQ3LDB4RkYsCisweEZELDB4RkYsMHhGQiwweEY1LDB4RkYsMHhCRiwweDZGLDB4REYsIDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwweEYwLDB4RkYsMHhGRiwKKzB4RkYsMHgzRiwweENGLDB4RkYsMHhCQSwweEVFLDB4OUIsMHhCRiwgMHhFRSwweEQ3LDB4RkUsMHhDRCwweEVGLDB4RkYsMHhERiwweEJGLAorMHhGRiwweEZGLDB4QzUsMHhGRiwweEZGLDB4RkQsMHg3RiwweDRGLCAweEZELDB4RjYsMHhEOSwweEZGLDB4NEYsMHhENiwweEZELDB4QkYsCisweDZFLDB4RkYsMHhGRiwweEY0LDB4N0YsMHhGRiwweDdGLDB4OEIsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZGLDB4RjksMHhGRSwKKzB4MzcsMHhGRiwweEQ5LDB4RkIsMHhGNSwweEFGLDB4RkQsMHhGRiwgMHhGRiwweEZCLDB4RkYsMHhGRiwweDA3LDB4RkYsMHhGRiwweEZGLAorMHhGQiwweEY3LDB4RkYsMHhGRCwweEZGLDB4N0MsMHhGQSwweDdFLCAweDRGLDB4RkMsMHhERiwweDFELDB4QzcsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4QUUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4RkIsIDB4RkYsMHhGRiwweEZFLDB4RkUsMHhGQywweEZGLDB4N0YsMHg3RiwKKzB4QkYsMHhFRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4NUYsMHhGRCwgMHhGRiwweEZGLDB4RkYsMHhGRCwweDZGLDB4NUEsMHhENywweDdCLAorMHhCRSwweDVGLDB4RkUsMHgzOSwweEZGLDB4RjcsMHhGRiwweEY3LCAweEZELDB4RkUsMHhBQSwweDFGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZFLDB4RkUsMHhBQiwweEFGLDB4RkQsMHhGRSwweEJGLDB4RkYsIDB4RjcsMHhGRiwweDdGLDB4RkUsMHg4RiwweEUzLDB4RkIsMHhFRSwKKzB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVCLDB4RkIsMHhGRiwgMHhGRCwweEJGLDB4RUYsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGQiwweEU0LDB4M0YsMHhGRiwweERGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjMsMHhFRiwweEJCLDB4RkIsCisweEJGLDB4RUYsMHhCQiwweEZGLDB4RDcsMHhCRiwweEZGLDB4RkYsIDB4RkYsMHgyOSwweEFGLDB4RjcsMHhGRiwweEZGLDB4RkIsMHhGRiwKKzB4RkIsMHhFNiwweEZGLDB4MEYsMHhGQiwweDNGLDB4REYsMHgwRiwgMHhGRiwweEFGLDB4RkYsMHhGRiwweEZGLDB4RjUsMHhDMywweERGLAorMHg1RiwweEZGLDB4RkYsMHhGRiwweEZFLDB4NkIsMHhDQSwweEJFLCAweEJDLDB4RkYsMHg5RiwweEYyLDB4QkYsMHhGRiwweEZFLDB4RkEsCisweEZGLDB4RkYsMHhFRiwweDE2LDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGQywweERGLDB4OTcsMHhGRCwweDc5LDB4RkYsMHgzNywKKzB4RTcsMHg3RiwweEZGLDB4RkYsMHhCNSwweEZGLDB4RkYsMHhGNiwgMHgyRiwweEZGLDB4RkQsMHhGQiwweEZFLDB4RkYsMHhGRiwweEZELAorMHg1RiwweDU3LDB4NUYsMHhGRiwweERCLDB4NTIsMHhERiwweEZGLCAweEZELDB4QkYsMHhGRiwweEZGLDB4RkMsMHhEQiwweEZGLDB4N0IsCisweEI1LDB4RkQsMHg3RiwweEZGLDB4NzEsMHg5QywweDZFLDB4RkYsIDB4RjYsMHgzNSwweEE1LDB4OUIsMHhGRiwweEZGLDB4RkQsMHhGRiwKKzB4RkYsMHhEQiwweDlFLDB4N0YsMHhGRSwweEVGLDB4RkIsMHhGRiwgMHhGRiwweEJELDB4RUYsMHhGRiwweERFLDB4QjcsMHhGOSwweDRCLAorMHhGRiwweEY1LDB4RUYsMHhGRiwweEZGLDB4RkYsMHhFOCwweDdFLCAweEZGLDB4RUEsMHhERiwweEY3LDB4RkYsMHhGRCwweDY5LDB4NUIsCisweEZDLDB4OUYsMHhFRiwweDc4LDB4RDYsMHhGRiwweEVCLDB4RUYsIDB4RkYsMHhGRiwweEZGLDB4RTgsMHhGRiwweEZGLDB4RUQsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RTMsMHhGOSwweEY2LDB4QkYsMHhGRiwgMHhGRiwweEZFLDB4REYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLAorMHhEMSwweEZGLDB4RkYsMHhFNywweEZGLDB4RkYsMHhGRiwweEZGLCAweEU3LDB4RjksMHhGRiwweEJGLDB4N0YsMHhEOSwweEZGLDB4RkQsCisweEZFLDB4N0YsMHhGRiwweEZFLDB4RkYsMHhGOSwweEZGLDB4RkIsIDB4RDYsMHhERiwweEJGLDB4RUYsMHg1QiwweEQ2LDB4RkYsMHhCRiwKKzB4RkIsMHhGNiwweEZGLDB4QkYsMHhFRiwweEY4LDB4RjYsMHhERCwgMHhCRSwweEZFLDB4MTYsMHhGRiwweEJGLDB4RUYsMHhGRiwweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHg2RiwweEZCLCAweEZGLDB4RkYsMHhGRiwweDZGLDB4RjMsMHhGRiwweEY3LDB4RUYsCisweEZCLDB4RkYsMHhCRiwweEZGLDB4RUYsMHhGRSwweEZGLDB4QkYsIDB4RkYsMHhGRiwweEZGLDB4QkUsMHhCRiwweEZGLDB4RUYsMHhGRiwKKzB4N0YsMHhFRiwweEZGLDB4RkQsMHgxNywweEZCLDB4N0IsMHhGRiwgMHhGRiwweEZELDB4N0YsMHhEQiwweEY2LDB4RjQsMHg3RiwweEZBLAorMHhGRSwweEY1LDB4QkYsMHhFQiwweEUzLDB4RjcsMHhGRiwweEZGLCAweEU5LDB4QkYsMHhGRiwweEFGLDB4RjcsMHhGRCwweEYzLDB4N0UsCisweDhGLDB4QTMsMHhFQSwweEZGLDB4Q0IsMHhGMywweEVFLDB4RkYsIDB4QkYsMHhFRiwweEY3LDB4RjksMHhGRiwweEZFLDB4N0YsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RjUsMHhGQiwweEY2LDB4RkYsMHhGNSwgMHgyRiwweEZFLDB4RkIsMHhENywweEJGLDB4RkYsMHhCRSwweERGLAorMHg5RiwweEZGLDB4RjAsMHhGRiwweEZGLDB4RjksMHhGRSwweDdGLCAweDhGLDB4QTMsMHhGOCwweEZFLDB4NkYsMHg5RiwweEY5LDB4RjYsCisweDJGLDB4OUYsMHhFNywweEY5LDB4RkUsMHgyRiwweDlGLDB4RTEsIDB4RkYsMHhGRiwweEZGLDB4N0YsMHhERiwweEY3LDB4RjUsMHhGRCwKKzB4N0YsMHg3RiwweEY1LDB4RkYsMHg5RiwweDVGLDB4RkIsMHhGRSwgMHhGRiwweDdGLDB4RkYsMHhGRiwweENCLDB4RkYsMHhGRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhBRiwweEZCLDB4RkUsMHhGRiwweERGLCAweEZFLDB4RkUsMHhCRiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4QzcsMHhGRiwweEZGLDB4RkQsMHhGRiwweDdGLDB4REQsIDB4RjcsMHhGRCwweEZGLDB4RkYsMHhENywweEZGLDB4RkQsMHg3RiwKKzB4RkYsMHhGQiwweEZELDB4RkYsMHhGRiwweEZFLDB4RUYsMHg3RiwgMHhGRCwweEVGLDB4RkIsMHhGRSwweEZCLDB4RkQsMHhGRiwweDdGLAorMHhERiwweEZELDB4RkYsMHg3QSwweERGLDB4RjcsMHhGRCwweEZGLCAweEZGLDB4RkYsMHhGRiwweDFGLDB4RkYsMHhGRiwweEQzLDB4RjcsCisweEZGLDB4RkYsMHg2RiwweERCLDB4RkYsMHhGRiwweEVGLDB4Q0IsIDB4RjQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwKKzB4MjksMHhGRiwweEU4LDB4REEsMHg3NiwweDlGLDB4QUYsMHg2QSwgMHhEQSwweEZFLDB4MzUsMHhFQiwweERBLDB4RDYsMHhCRiwweEFCLAorMHhFQiwweDdBLDB4REUsMHhCRiwweEQ3LDB4N0YsMHhGRiwweEZFLCAweEZGLDB4QkYsMHhFRiwweEZELDB4REYsMHg3NywweEJGLDB4RkQsCisweDM3LDB4RUYsMHhGRiwweEVGLDB4RkYsMHgzRiwweEZGLDB4RkYsIDB4RkYsMHhGRSwweDdGLDB4RkYsMHhGRiwweEZGLDB4RjcsMHg3RSwKKzB4REYsMHhGRiwweEZGLDB4RkYsMHhGQSwweEI3LDB4N0YsMHhGRiwgMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg4OSwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4OUYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEU3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEFBLDB4RkYsMHhBQiwweEZCLDB4RkEsIDB4RUYsMHhCRiwweEZGLDB4REYsMHhGQSwweDdCLDB4QjksMHhGRSwKKzB4RkUsMHhGRiwweEZELDB4RkYsMHhGNywweEZFLDB4M0YsMHhGRiwgMHhCNywweEZGLDB4RjcsMHhFRSwweEZGLDB4N0YsMHhFRiwweEZGLAorMHhGRiwweDdGLDB4RkYsMHgxRiwweEZCLDB4RkYsMHhCRiwweEZCLCAweEZFLDB4RkYsMHhCRCwweEZGLDB4RkYsMHgyRiwweEZGLDB4QkYsCisweEZGLDB4N0YsMHhERiwweEZBLDB4RkYsMHhGRiwweEZDLDB4RUUsIDB4RjUsMHhGMywweEJFLDB4RkIsMHgwRiwweEVGLDB4RjMsMHhCRSwKKzB4RUYsMHhGQywweDVGLDB4RkYsMHg1QSwweEZGLDB4RjcsMHhERiwgMHhGRiwweEZGLDB4RkUsMHhENSwweEZDLDB4NUYsMHhGQiwweEYyLAorMHhGRiwweEZGLDB4MkYsMHhCQiwweEYzLDB4RkYsMHhGRiwweEJGLCAweEZGLDB4RUYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEJGLDB4RkYsMHhGRiwweEZELDB4N0IsMHhGRiwweERGLDB4QjksIDB4RkYsMHhGQiwweEZGLDB4RDgsMHg3RiwweEZGLDB4RkYsMHhGRiwKKzB4RkIsMHhGRiwweEZDLDB4N0YsMHgxRiwweEJGLDB4RTAsMHhERiwgMHhGNywweEVGLDB4RkYsMHhGRCwweDdGLDB4RkUsMHhERiwweEZGLAorMHhFMCwweEZGLDB4RkYsMHhGRCwweEVGLDB4RkIsMHhGRiwweEZFLCAweEY3LDB4REYsMHhGRiwweEVCLDB4NUYsMHhGRiwweEY3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGRCwweEZGLDB4RkQsIDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRCwweEZGLDB4M0IsMHhEQywKKzB4RkQsMHg2RCwweDdCLDB4NUYsMHg1NywweEY1LDB4RkQsMHg3RiwgMHg1RiwweEZGLDB4QjEsMHhGRiwweEVCLDB4RkYsMHhGRiwweEZGLAorMHhGQiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RkIsMHhCRSwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhBRiwweEZFLDB4RjcsCisweERGLDB4REYsMHhGRiwweEZGLDB4RkYsMHg3RiwweENGLDB4RjMsIDB4RjgsMHhGRiwweEQ3LDB4RkIsMHhGRiwweDVGLDB4QkYsMHhGNywKKzB4RkIsMHhGRiwweDdGLDB4RkUsMHgyMywweEZGLDB4RkYsMHhGRSwgMHg3RiwweEYzLDB4RkYsMHhGQiwweEZFLDB4RkYsMHhGRiwweEYzLAorMHhGRiwweEZGLDB4RjUsMHhGOSwweEZGLDB4M0YsMHhGRiwweEZGLCAweEYwLDB4OUEsMHhGRiwweEJFLDB4N0YsMHhGRiwweEZDLDB4RjksCisweEZGLDB4RkQsMHhBRiwweEVCLDB4RkUsMHhCRiwweEZGLDB4Q0YsIDB4RjMsMHhGRSwweDdGLDB4RkYsMHhGRiwweDVCLDB4QkQsMHhGRiwKKzB4QkMsMHhFQiwweEZGLDB4RDcsMHhENCwweEFGLDB4QUYsMHhGRCwgMHhGRiwweENGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LAorMHhGRCwweEZFLDB4RkYsMHg2RiwweEZGLDB4RkIsMHhGRiwweEZGLCAweEZGLDB4RkQsMHg3RiwweDVFLDB4RkQsMHhCRiwweERCLDB4RjYsCisweEZELDB4QkYsMHg2RiwweEZCLDB4RUUsMHhGRCwweEZGLDB4N0EsIDB4RkYsMHhGQSwweEZCLDB4RkYsMHgzRiwweEZCLDB4QjcsMHg1RiwKKzB4RDYsMHhGNywweDFGLDB4NzEsMHhEQywweDc3LDB4MUQsMHhDNywgMHgzMSwweERDLDB4NzcsMHhERiwweEY5LDB4QkYsMHhGNSwweDVCLAorMHhGNCwweEQ3LDB4OUQsMHhBRSwweEZGLDB4QkYsMHhGRCwweEJGLCAweERCLDB4RjYsMHhGRCwweEJGLDB4NkYsMHhEQiwweEY2LDB4RkUsCisweDNELDB4ODEsMHhGRiwweEVCLDB4RkUsMHhGRSwweEZFLDB4RkYsIDB4RUIsMHg3QSwweERGLDB4N0QsMHg3NywweDdELDB4RjUsMHg3OSwKKzB4REYsMHg1NywweERELDB4RjUsMHg3RCwweDdFLDB4RTYsMHhGRiwgMHhENiwweDNGLDB4QkYsMHg3RiwweEZGLDB4RDQsMHhGNSwweDNGLAorMHhCRiwweEZCLDB4QkUsMHhFRiwweEIzLDB4RUUsMHhGQiwweDlFLCAweEVGLDB4QkIsMHhGRSwweDhCLDB4RkYsMHhGRSwweERGLDB4QjcsCisweEVELDB4RkYsMHhGNywweEZELDB4RkUsMHhGRiwweEVGLDB4QkIsIDB4RUUsMHhGRiwweEJFLDB4RUYsMHhCQiwweEVFLDB4RUIsMHhGQywKKzB4MUYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEU3LDB4RkYsMHhGNywgMHhGRCwweEZGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLAorMHhGRSwweEZGLDB4QkYsMHhFQiwweEZBLDB4MUYsMHhGRiwweEI3LCAweEVGLDB4NUIsMHhGRSwweEZGLDB4QUYsMHhFQiwweERELDB4RTcsCisweERFLDB4NzcsMHg5RCwweEU3LDB4NzksMHhERSwweDc3LDB4OUQsIDB4QkYsMHhFNiwweDZGLDB4RkYsMHhGRSwweEZGLDB4QkYsMHhFRiwKKzB4RkIsMHhGRSwweEZELDB4QkYsMHg2RiwweEY2LDB4RkQsMHhCRiwgMHg2RiwweERCLDB4RjYsMHhGRCwweEJGLDB4RkYsMHg3RSwweEZGLAorMHhGRiwweEZCLDB4RkUsMHhGRSwweEZGLDB4RUYsMHhGQiwweEZELCAweEVGLDB4N0UsMHhGNywweEJELDB4RUYsMHg3QiwweERFLDB4RjcsCisweEJELDB4RUYsMHhGRiwweEQ1LDB4RkYsMHhCRiwweEZGLDB4RUYsIDB4RkUsMHhGRiwweEZDLDB4M0YsMHgwRiwweEU3LDB4RkUsMHg3RiwKKzB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGRSwgMHhGMywweEZGLDB4RkUsMHhERiwweEFELDB4REYsMHg2NywweEVFLAorMHhGQiwweEJGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLCAweEZFLDB4RkYsMHhCRiwweEVGLDB4RkYsMHgyMywweEZGLDB4RkYsCisweEZGLDB4RkYsMHg3RiwweEZGLDB4RjMsMHhCQywweERCLDB4RkUsIDB4RkIsMHhGRiwweEZCLDB4QkUsMHhGNywweEZCLDB4RkYsMHg3RiwKKzB4REYsMHhGRiwweENGLDB4RkIsMHhGRiwweDlGLDB4RTMsMHhGOSwgMHhCRSwweDNGLDB4OEYsMHhFNywweDc5LDB4RkYsMHg5RCwweEU3LAorMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDVGLCAweEZGLDB4Q0YsMHhGNywweEZGLDB4RkYsMHhGRiwweERGLDB4RjcsCisweEZFLDB4N0YsMHhFNywweEY5LDB4RkUsMHg3RiwweEZGLDB4RkYsIDB4RkIsMHhGRSwweEZGLDB4RkYsMHhCRiwweEZGLDB4QkYsMHhCRiwKKzB4RkYsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZGLDB4RkQsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRCwweEZGLAorMHhGRiwweDNGLDB4RkYsMHhCRiwweEZGLDB4RjcsMHhGRiwweEZGLCAweDdGLDB4REYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFOCwweEVGLDB4RkYsIDB4NUYsMHhGNywweEJGLDB4RjksMHhGRSwweERGLDB4QjcsMHhGRCwKKzB4RkYsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywgMHhGRCwweEZGLDB4REQsMHhGRiwweEYyLDB4RkYsMHhCRiwweEZGLAorMHhGRiwweEJGLDB4RkYsMHhGRiwweDJGLDB4RjIsMHhGRiwweEJGLCAweDJGLDB4N0IsMHhEMiwweEY3LDB4QkYsMHgyRiwweEZGLDB4QkIsCisweEZGLDB4RUUsMHg4RiwweEFGLDB4RUIsMHhGQSwweEZFLDB4M0YsIDB4QTcsMHg2OSwweENFLDB4OEYsMHhBNCwweEVBLDB4RkEsMHhFRSwKKzB4QjcsMHhBRSwweEVCLDB4RkQsMHhDNywweEZGLDB4RjcsMHhGNywgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4N0YsMHgzRSwweEYzLAorMHg3NCwweEZGLDB4M0YsMHg0RiwweEZGLDB4RTcsMHhGRiwweDNGLCAweEZFLDB4QTcsMHhGRiwweEZGLDB4REYsMHhGNywweEI3LDB4RkYsCisweEY3LDB4RkYsMHhCQSwweEVGLDB4MzcsMHhFQiwweEZCLDB4RkUsIDB4QkYsMHhGQiwweEZFLDB4RjMsMHhGRiwweEY5LDB4REYsMHhGRiwKKzB4QkYsMHhGRiwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwgMHhGRCwweERGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGQiwweEZFLAorMHhGRCwweEZGLDB4RkIsMHhCRiwweEZFLDB4M0YsMHhFRCwweEZGLCAweERGLDB4QkUsMHgzRCwweEE3LDB4RkIsMHhGQSwweDNGLDB4RTYsCisweEUxLDB4RkUsMHhGRSwweDNGLDB4RUYsMHhFMywweERGLDB4RjUsIDB4N0YsMHhGRSwweEZGLDB4N0UsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RUYsMHg2RiwweEY2LDB4RkYsMHg3RCwweEVGLDB4RDcsMHhERSwgMHhGRiwweDdELDB4RUYsMHhGRiwweEYyLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHg3QiwweERFLDB4RkIsMHhFNiwweEVFLCAweEVGLDB4MzcsMHg2RSwweEYzLDB4N0UsMHhFQiwweDM3LDB4RUYsCisweEZGLDB4QzEsMHhGRiwweEZFLDB4RkYsMHhGNywweEVGLDB4RkYsIDB4RkYsMHhGRiwweEJGLDB4M0YsMHhEMiwweERGLDB4QkYsMHgyRiwKKzB4N0IsMHhFMiwweEZGLDB4RkUsMHgzQiwweEJELDB4REIsMHhGRiwgMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRiwweEZFLAorMHhGRiwweEZCLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGQiwweERGLCAweEZGLDB4QkYsMHhGRiwweEI3LDB4RkYsMHhGRiwweEJGLDB4RUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDBGLDB4RkYsIDB4N0YsMHhGRiwweDFGLDB4RUYsMHhGMSwweEZELDB4RkYsMHhGNiwKKzB4QUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwgMHhGRiwweEZGLDB4RkUsMHg5RiwweEZGLDB4RkYsMHhGRiwweDc3LAorMHhFRiwweEY3LDB4RkIsMHhGRiwweEZFLDB4NUYsMHhGRiwweEZGLCAweEJGLDB4Q0YsMHhGQiwweEY3LDB4REQsMHhGNywweEY1LDB4RkYsCisweDVGLDB4RDUsMHhGNSwweEZELDB4N0YsMHg1RiwweEQ3LDB4RjUsIDB4RkYsMHhGQiwweDBGLDB4RkYsMHhGRiwweEE5LDB4RUEsMHg3QSwKKzB4RkYsMHhBRiwweDhGLDB4RkUsMHhERiwweEFGLDB4RUYsMHhGQiwgMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4REYsMHhFNSwweDVGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4QkQsMHg1NywweEZGLCAweEZGLDB4NkYsMHg3NywweEJGLDB4RjcsMHhGQiwweEZGLDB4N0YsCisweEJGLDB4RjcsMHhGRiwweEZDLDB4QkYsMHhGRiwweDlGLDB4RkYsIDB4RkYsMHhFRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHgxRiwKKzB4Q0YsMHhGRiwweEZDLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwgMHg2NSwweEFGLDB4RjMsMHg3QywweEZGLDB4M0YsMHhERiwweEZGLAorMHhGRCwweEU5LDB4RkUsMHg3RiwweEU3LDB4RkYsMHhGRSwweDdGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhFMywweERGLDB4RkIsCisweERCLDB4RjYsMHhGRCwweEVGLDB4NUIsMHhGQiwweEZGLDB4REYsIDB4RkMsMHhGRiwweDNGLDB4REYsMHhGMywweEZELDB4RkYsMHg3RiwKKzB4REYsMHhFRiwweDY2LDB4RkYsMHhERiwweEFELDB4RUIsMHg3QSwgMHhERSwweEY3LDB4RjcsMHhFNywweEQ5LDB4RkQsMHg5RiwweDY3LAorMHhEOSwweEY2LDB4N0QsMHg5RiwweEU3LDB4REYsMHhGNSwweDQ3LCAweEZELDB4NjUsMHg1QiwweEQ2LDB4RjQsMHhGRSwweEZGLDB4RUYsCisweEZGLDB4NkQsMHhGNiwweERELDB4QjcsMHg2RCwweERCLDB4NzYsIDB4REMsMHhCNywweDdELDB4RkEsMHg5QiwweEY2LDB4NkQsMHg5RCwKKzB4NjcsMHg1OSwweERGLDB4RjcsMHhERCwweEZGLDB4RUIsMHhGRSwgMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwweEUzLAorMHhEMSwweDlGLDB4RkYsMHhCRCwweEJGLDB4RUYsMHhGRSwweEY3LCAweEJGLDB4QkYsMHhGNywweEQ3LDB4N0YsMHhERCwweEY3LDB4OUQsCisweERGLDB4N0YsMHhERiwweEY3LDB4RkYsMHhFMCwweDdGLDB4RkQsIDB4QzEsMHhERiwweEY3LDB4RkQsMHhDNywweDdGLDB4N0YsMHhGQiwKKzB4RkYsMHhCQiwweEVDLDB4RkIsMHgzRSwweEZGLDB4QkYsMHhFQywgMHhGQiwweEZGLDB4RDgsMHg3RiwweEJGLDB4NkMsMHhGRiwweEJFLAorMHhGRiwweEJGLDB4RUQsMHhGRiwweEVGLDB4RkUsMHhGQiwweEJGLCAweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRSwweEZGLDB4QzUsCisweEZGLDB4QUYsMHg2RiwweEZGLDB4RkMsMHhGRCwweDNGLDB4RTcsIDB4RkYsMHhGRSwweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwKKzB4RUYsMHhGQiwweEZFLDB4QkYsMHg4OSwweEZFLDB4RkEsMHhCQSwgMHhGRSwweEJGLDB4QUYsMHhGQiwweEY2LDB4RjUsMHhEOSwweDdELAorMHg5NywweDY1LDB4RDksMHg3NCwweDVELDB4OTcsMHg2NSwweEQzLCAweEZFLDB4RDYsMHhGRiwweEJGLDB4RjcsMHhGRCwweEZGLDB4N0YsCisweEJGLDB4Q0YsMHhGQiwweEZFLDB4RkYsMHhFRiwweEZCLDB4RkUsIDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwweEY2LDB4OEYsMHhGQiwKKzB4RkYsMHhFRiwweEZCLDB4N0UsMHhEQiwweEZFLDB4RkYsMHhCRSwgMHhFRiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsMHhFRSwweEZCLAorMHhCRSwweEZGLDB4RkYsMHhERiwweEZGLDB4NDMsMHhGRiwweEZGLCAweEZCLDB4RUYsMHg1RiwweEI3LDB4RkUsMHg3RiwweEU3LDB4RjksCisweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4RjksIDB4QkYsMHhGRSwweEFGLDB4NzcsMHhGRCwweEZGLDB4MkYsMHhBRiwKKzB4QTcsMHhGRSwweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwgMHhFRiwweEZCLDB4RkUsMHhGRiwweEYxLDB4N0YsMHhFRiwweERGLAorMHhGRiwweDk3LDB4RjUsMHhFRiwweEZGLDB4REYsMHhGRiwweEZGLCAweEJGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsCisweEZGLDB4RTAsMHhGRiwweEZGLDB4RjksMHhGRSwweDJGLDB4OEIsIDB4RTMsMHhGOCwweEJFLDB4NzcsMHg5RiwweEY5LDB4REEsMHg3NywKKzB4OUQsMHhFNywweDc5LDB4REUsMHg3NywweDlGLDB4REQsMHhGRiwgMHhGRCwweEZELDB4N0YsMHg1RiwweEQ3LDB4RkQsMHhGRiwweDdGLAorMHhFNywweEZFLDB4N0YsMHg5NywweEU3LDB4RkIsMHhGRSwweEZGLCAweEJGLDB4RUYsMHhGRiwweEFCLDB4RkYsMHhFRiwweEZBLDB4RkUsCisweEJGLDB4QUYsMHhGRiwweEZBLDB4RkYsMHhGRiwweERGLDB4RkYsIDB4RkIsMHhGRiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRiwKKzB4NjcsMHhGRiwweEY3LDB4RjUsMHhGRiwweEZGLDB4RkYsMHhERiwgMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEJELCAweEVCLDB4RkYsMHhGRiwweEY3LDB4QUQsMHhFQiwweEZGLDB4REYsCisweEZELDB4RkYsMHgzRiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsIDB4REYsMHhGRiwweDVGLDB4RkYsMHhGNywweEZGLDB4RkYsMHhGRCwKKzB4QkYsMHhGRiwweENCLDB4RjQsMHhGRiwweDdGLDB4RDMsMHhGNywgMHhGRCwweDNGLDB4N0YsMHhEMywweEY3LDB4RkYsMHhGQywweDNGLAorMHhGRiwweEVBLDB4RkEsMHhCRSwweEFGLDB4QUIsMHhFQiwweEJBLCAweEY0LDB4OTUsMHg2QiwweDUyLDB4RDQsMHhBRCwweDJGLDB4NEEsCisweEQyLDB4RjYsMHhCRiwweEQyLDB4N0YsMHhGNywweDNGLDB4RkYsIDB4RkYsMHhGMywweDdGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhCQSwKKzB4REYsMHhGQiwweEZELDB4RkYsMHhCRiwweEZGLDB4RkIsMHhGRiwgMHhGOCwweDdGLDB4RUEsMHhGRiwweEZFLDB4RkUsMHhERiwweEZGLAorMHhGNywweEZGLDB4N0YsMHhCQiwweEZGLDB4RkYsMHhCRiwweERGLCAweEZCLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhCMSwweDdGLDB4RkYsCisweEZCLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsIDB4Q0YsMHhGRSwweEZGLDB4RkYsMHhFRiwweEZGLDB4RjcsMHhGRiwKKzB4RkYsMHhGRiwweEYxLDB4RkYsMHg2OSwweEJFLDB4RkEsMHhCRiwgMHhBRiwweEUyLDB4RkYsMHhGRSwweEZELDB4QUYsMHhGMywweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZDLDB4RkYsMHhGRiwweDA3LCAweEZELDB4OTUsMHhEQiwweERGLDB4N0YsMHhERiwweEFGLDB4RkYsCisweEY3LDB4QUYsMHgzNiwweEZFLDB4QkYsMHg2NSwweEVCLDB4RjYsIDB4RkUsMHg5RiwweDZGLDB4RkUsMHgwNywweEZGLDB4Q0YsMHhGRiwKKzB4RjgsMHhGRSwweEZGLDB4Q0YsMHhGRiwweEY2LDB4RkEsMHhFNywgMHhGQiwweEZFLDB4RkYsMHhCQiwweEVELDB4RjksMHhGRiwweEZGLAorMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLDB4NzUsMHhGRiwweEVGLCAweDdFLDB4RkQsMHhFMCwweEU4LDB4NUUsMHhEMywweEU1LDB4RjksCisweDNFLDB4NUYsMHhENywweEY3LDB4RkYsMHhGQSwweDJGLDB4RkIsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHg3RiwKKzB4N0YsMHhENywweEY1LDB4N0QsMHg1RiwweDU3LDB4RDUsMHhGNSwgMHhFRiwweEZGLDB4RjMsMHg3RiwweEZDLDB4N0YsMHhGRiwweEM3LAorMHhGMSwweEZGLDB4RkYsMHgxRiwweENGLDB4QjAsMHhGRiwweDNGLCAweENGLDB4RjMsMHhGQywweEZGLDB4M0YsMHhDRSwweEZGLDB4RTQsCisweEZGLDB4REYsMHg3RiwweEZFLDB4RjcsMHhCQiwweEZGLDB4RkYsIDB4REYsMHhFRiwweEVFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwKKzB4QkYsMHhCRiwweEVGLDB4RkYsMHhEMSwweEZGLDB4RkYsMHhGRiwgMHhGRCwweEZCLDB4RkYsMHhGRCwweEZGLDB4RkIsMHg5RiwweEU5LAorMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweEJGLCAweEZGLDB4QjMsMHhGRiwweEZGLDB4RjcsMHhGRiwweEZGLDB4QUYsCisweEY3LDB4RkYsMHhCNiwweDNGLDB4RUIsMHhGQSwweEZFLDB4QkYsIDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwweEZFLDB4QTcsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZGLDB4RkYsMHhGRiwgMHhGRSwweDlGLDB4RjcsMHhGOSwweEZGLDB4N0YsMHg5RiwweEU3LAorMHhGRiwweEZGLDB4RkUsMHhBRiwweDZGLDB4RkYsMHhGRiwweEZGLCAweDlGLDB4RkYsMHhERiwweEZGLDB4N0QsMHg1RiwweERELDB4RkYsCisweEZCLDB4QkYsMHhFNywweEJCLDB4RkYsMHhGQiwweERGLDB4NkQsIDB4NUYsMHg3RSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RUIsMHhGNywweEZGLDB4RTcsMHhFRiwweEY3LDB4RkYsMHhGRiwgMHg3RiwweEZGLDB4RjcsMHhGRiwweEZDLDB4OEYsMHhGRiwweEVGLAorMHhGRCwweEZFLDB4RkYsMHhCRSwweEY0LDB4RjIsMHg3RCwweEQ3LCAweENGLDB4RkYsMHgzRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4Q0YsMHg2QiwweEZGLDB4QkYsMHgzRiwweEZCLDB4RjIsIDB4RkMsMHg3RiwweEVCLDB4RkYsMHg5RiwweEZBLDB4RkYsMHhGRiwKKzB4M0YsMHhGRiwweEYzLDB4RkYsMHhGRiwweEZELDB4NzAsMHhGNywgMHhGRiwweEZGLDB4QkYsMHhGRiwweEZCLDB4RDcsMHhGRSwweEY1LAorMHg3NywweEZGLDB4MTUsMHhERCwweDc3LDB4RkQsMHhGRiwweDdGLCAweERGLDB4RjcsMHhGQiwweENELDB4QkYsMHhGRiwweEZELDB4RkYsCisweEZGLDB4REYsMHgzNywweENELDB4RjksMHhFQywweEZFLDB4RUYsIDB4QkIsMHhGNCwweEZCLDB4M0YsMHg0RiwweEIzLDB4RkYsMHhGRCwKKzB4Q0IsMHhGRiwweEU5LDB4N0UsMHg1NCwweDlGLDB4RTUsMHg0QiwgMHhCNywweEZGLDB4REQsMHg3RCwweEM3LDB4NzEsMHhERCwweDc3LAorMHg1RCwweEQ3LDB4NzUsMHhDRCwweDdGLDB4RDYsMHhGRiwweEQzLCAweEY2LDB4RjksMHgzRiwweDZELDB4OTUsMHhBRiwweDdGLDB4RkUsCisweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsIDB4RkUsMHhGNiwweEM3LDB4RkYsMHhBRCwweDdCLDB4Q0EsMHhGRiwKKzB4QkYsMHhCRiwweEVGLDB4RkQsMHhFMywweERGLDB4QjcsMHhFRCwgMHhGQiwweDdFLDB4REYsMHgzNywweEVELDB4RTMsMHhGQiwweERGLAorMHhGRiwweDUyLDB4NUMsMHgxNSwweEZELDB4Q0YsMHg3RiwweERGLCAweEZFLDB4RUYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUMsCisweDdCLDB4RkUsMHhGRiwweEZFLDB4M0UsMHg3RiwweERBLDB4RjcsIDB4RkQsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZCLDB4RUYsMHhCQiwKKzB4NkYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwgMHhGNywweDdELDB4RkYsMHhEOCwweEZGLDB4RkQsMHhCRiwweDdGLAorMHhGQiwweEZGLDB4RkYsMHg5RiwweEZCLDB4RkUsMHg3RiwweDlGLCAweEU3LDB4RjksMHhGRSwweDdGLDB4OUYsMHhFQSwweDdGLDB4RjYsCisweEJGLDB4QkQsMHg2QSwweDVBLDB4RjYsMHhFNSwweEJGLDB4NzcsIDB4NUYsMHg2RCwweERELDB4NzcsMHg1RCwweEQ3LDB4NzUsMHhERCwKKzB4NzcsMHhGRiwweEE1LDB4QkYsMHhDRiwweEZCLDB4RkYsMHhGRiwgMHhCRiwweENGLDB4RkIsMHhGRCwweEZGLDB4QkYsMHhGMywweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhGRCwweEFCLCAweEZGLDB4QkYsMHhCRiwweEZGLDB4RkIsMHhGRiwweDdGLDB4RUYsCisweEZGLDB4QkUsMHhGQiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsIDB4RUUsMHhGQiwweEJGLDB4RkYsMHhCNSwweEZGLDB4RDAsMHhCQywKKzB4RkQsMHgyRiwweDRCLDB4RjcsMHhGRiwweEZGLDB4OUYsMHhGOSwgMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDlGLAorMHhGQSwweDhGLDB4RkQsMHhBQiwweEZBLDB4REEsMHhCRiwweEFGLCAweEIzLDB4RkQsMHhGRiwweEJGLDB4RkIsMHhGRSwweEZGLDB4QkYsCisweEVGLDB4RkIsMHhGRSwweEY3LDB4QkYsMHhGRiwweDlGLDB4RkYsIDB4NzcsMHhGNywweEJELDB4RkQsMHg3NywweERGLDB4RkYsMHg3RSwKKzB4REYsMHhFRCwweEJCLDB4RkUsMHhGRiwweEJFLDB4RUYsMHhGQiwgMHhGRSwweEZGLDB4RkEsMHgzRiwweEZGLDB4QkUsMHg2RiwweDhGLAorMHhFNiwweEY5LDB4RkUsMHg3RiwweDlGLDB4QzcsMHhGRSwweDdGLCAweDlGLDB4RTcsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LDB4RkIsCisweDdGLDB4RkYsMHg3RiwweENGLDB4RkYsMHhGRCwweEZGLDB4RkYsIDB4REYsMHhGQiwweEFGLDB4QkYsMHhFRiwweEZGLDB4RkUsMHhGRiwKKzB4OUYsMHhFRiwweEZCLDB4RkYsMHhGQywweEZGLDB4RkIsMHhGRSwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEY3LAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsMHgzRiwweERGLDB4RjcsCisweEZGLDB4RkYsMHg3RiwweEVGLDB4RkUsMHhGRiwweEJGLDB4RkYsIDB4RkIsMHhGRiwweEZGLDB4QkYsMHhFRiwweEZGLDB4QjMsMHg3RiwKKzB4RkYsMHg3QiwweDVFLDB4RjcsMHhGRCwweEZGLDB4N0IsMHg3RiwgMHhGNywweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLAorMHhERiwweEY3LDB4RkYsMHgxNywweEZGLDB4RkYsMHhGRiwweDdGLCAweEZGLDB4RkYsMHhERCwweEY2LDB4RkMsMHhCRiwweENCLDB4RjIsCisweEJDLDB4QkYsMHgyRiwweENCLDB4RjIsMHhGQywweEJGLDB4RkUsIDB4OEYsMHhGRiwweEZBLDB4N0UsMHhCRiwweEE3LDB4RUIsMHhEQSwKKzB4RkMsMHhCRiwweEFGLDB4N0EsMHhGRSwweEJGLDB4QUYsMHhFQSwgMHhGQSwweEZFLDB4QkYsMHhBRiwweEY0LDB4REYsMHhGRSwweEZGLAorMHhGMywweDNDLDB4N0YsMHgzRSwweEZGLDB4Q0YsMHhGOCwweEJGLCAweDhGLDB4RTMsMHhGOCwweEZFLDB4M0YsMHg4RiwweEU3LDB4RTgsCisweEZGLDB4RkMsMHg5RiwweEZGLDB4RkYsMHhDRiwweEVCLDB4QjMsIDB4RTcsMHhGQiwweDdCLDB4RjMsMHhGRSwweEZGLDB4Q0YsMHhEQiwKKzB4RkIsMHhGQiwweEJGLDB4NkYsMHg2RiwweERGLDB4RUMsMHg3RiwgMHhGRiwweEZGLDB4RjcsMHhGRCwweEZELDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEIyLDB4QkYsMHhGRiwweERFLDB4RkQsMHhCRCwweEVGLCAweEZCLDB4RjYsMHhERiwweEVBLDB4RTcsMHhEQiwweEZFLDB4QkIsCisweEZGLDB4RUIsMHhGQiwweEJGLDB4OUYsMHg4RiwweEU4LDB4RkUsIDB4M0YsMHg4RiwweEEzLDB4RjgsMHhGRSwweDNGLDB4OEYsMHhGRiwKKzB4RjgsMHg3RSwweEZELDB4RkQsMHg3RiwweEZGLDB4RkIsMHhDRCwgMHhGRiwweEZELDB4RkYsMHg1RiwweEVGLDB4RkQsMHhGRiwweEZGLAorMHhERiwweEY3LDB4RkQsMHhGRiwweEJFLDB4OTAsMHhGRiwweEZGLCAweEVFLDB4RkYsMHgzRiwweEJGLDB4RjMsMHhCQiwweEZFLDB4QjcsCisweEFCLDB4RkEsMHhGRSwweEFGLDB4QUQsMHhFQSwweEZBLDB4REUsIDB4QUIsMHhGRiwweDYzLDB4RkYsMHhGRSwweEYyLDB4RkYsMHhCMywKKzB4RkYsMHhERiwweEVFLDB4N0QsMHhGRiwweDAzLDB4RjEsMHhGNCwgMHgzRiwweDFGLDB4QzMsMHhGMSwweEVDLDB4N0YsMHhGRSwweDZGLAorMHhGRiwweEZCLDB4RkIsMHhGRiwweDlGLDB4RkYsMHhCRiwweEZGLCAweDdCLDB4NUYsMHhGRCwweEZGLDB4REYsMHhGNywweEZELDB4RkQsCisweDdGLDB4N0YsMHhERiwweEZFLDB4Q0YsMHhGQiwweEZGLDB4RkYsIDB4QUYsMHhGQiwweEZGLDB4MUYsMHhFRiwweEE1LDB4RkQsMHhCRiwKKzB4REYsMHhGQiwweDdELDB4RkYsMHhCRiwweERGLDB4RkIsMHhGRiwgMHhGRCwweDNCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELAorMHhBRiwweEYzLDB4RkYsMHhGQiwweDdGLDB4QkYsMHhENywweEZCLCAweEJGLDB4N0YsMHhCQiwweEY3LDB4RkYsMHhGOCwweDdGLDB4RkYsCisweEZBLDB4NUYsMHhENywweEZGLDB4REYsMHg3RiwweEVGLDB4RkYsIDB4RkYsMHg3RiwweERCLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwKKzB4QjcsMHhGQiwweEVDLDB4RkYsMHhGRiwweEY3LDB4QkYsMHhFRiwgMHhGRCwweEZDLDB4RkIsMHhGRiwweEVGLDB4RjAsMHhGRSwweDNGLAorMHg4RiwweEUzLDB4RjgsMHhGRSwweDNGLDB4OEYsMHhFRiwweDhELCAweEZGLDB4RkYsMHhFRiwweDdGLDB4QkYsMHhGRiwweEZCLDB4RkYsCisweERCLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RUYsMHhEOCwweEZGLDB4MkUsMHg3RiwKKzB4QkUsMHhFRiwweEZFLDB4NkUsMHhGRiwweEJGLDB4RjksMHhGRiwgMHhGRiwweEYzLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGQywweDY2LDB4QkUsMHg0NywweEYzLDB4N0YsMHhERiwweEZFLCAweDg3LDB4OUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU3LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhENiwweDZGLDB4N0MsIDB4RkIsMHg0RiwweEQyLDB4RkYsMHhGRCwweDJCLDB4RkUsMHhGRiwKKzB4RkYsMHhGRCwweDVGLDB4RDcsMHhENSwweEY1LDB4N0QsMHhGRiwgMHhGRiwweEZGLDB4QkYsMHg5QiwweEZGLDB4RkYsMHhERiwweEI3LAorMHhGRiwweEZGLDB4REYsMHhGRiwweDNGLDB4Q0YsMHhGRSwweDdGLCAweEJGLDB4RUYsMHhGQiwweEZDLDB4RkYsMHgzRiwweEZGLDB4RDksCisweEJGLDB4RkUsMHg5NywweEVDLDB4OEYsMHhCNywweEZFLDB4OUIsIDB4N0QsMHhGRCwweEI3LDB4REQsMHg3NywweDFELDB4QzcsMHg3MSwKKzB4REQsMHg3NywweDVELDB4RDcsMHhGMywweDZGLDB4RkQsMHgzRiwgMHg3MywweERELDB4QUYsMHhGRCwweDdBLDB4RkYsMHhGRiwweEFGLAorMHhGRSwweEZELDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLCAweEVGLDB4NjYsMHg3RiwweEZGLDB4RkYsMHhCRiwweEJGLDB4RkYsCisweEZCLDB4RkYsMHhGNywweERGLDB4RkQsMHhGQiwweDdELDB4REYsIDB4QjcsMHhDRCwweEYzLDB4N0MsMHg1RiwweDNGLDB4OTEsMHgzRiwKKzB4RkYsMHgzRCwweEVGLDB4N0IsMHhGRiwweEZDLDB4RkYsMHhDQSwgMHhFRiwweEZFLDB4RkYsMHhCRCwweEVGLDB4RkIsMHgxRSwweEU3LAorMHhCQiwweEVDLDB4N0YsMHhCMywweEZGLDB4RkQsMHg5RiwweEZGLCAweEZGLDB4RkUsMHhGRiwweEZGLDB4N0YsMHhCRiwweEZCLDB4RkUsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4RUUsMHhGQiwweEJGLDB4REYsIDB4NjcsMHhGRiwweEZGLDB4QkYsMHhFRiwweERCLDB4RkYsMHhCQywKKzB4RkUsMHg3RiwweEZCLDB4RkYsMHg5RiwweEVGLDB4RjksMHhGRSwgMHg3RiwweDlGLDB4RTcsMHhGOSwweEZFLDB4ODcsMHhGRiwweEVFLAorMHhGQiwweEJFLDB4RTUsMHhCRiwweEVGLDB4RjksMHhENywweDY1LCAweEY3LDB4REQsMHhFNywweDdELDB4REYsMHg3NywweDVELDB4RDcsCisweDdGLDB4RjgsMHg5QiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsIDB4RkYsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLDB4N0YsMHhDRiwKKzB4RjMsMHhGQywweEZGLDB4QkYsMHhFRiwweEZGLDB4REIsMHgzRiwgMHhFRiwweEZCLDB4RkUsMHhGRiwweERGLDB4RkYsMHhGRSwweEZCLAorMHhCQiwweEVGLDB4QkYsMHhFRiwweEJCLDB4RUUsMHhGQiwweEJFLCAweEVGLDB4QkIsMHhGRiwweEZDLDB4N0YsMHhGRCwweDNCLDB4NUIsCisweEQ2LDB4RTUsMHhGRCwweDRGLDB4QzMsMHhGQiwweEZGLDB4QkYsIDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwKKzB4QjQsMHhGRiwweEZBLDB4QkMsMHg4RiwweEIyLDB4RTksMHhEMiwgMHgyRSwweENGLDB4RkIsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLDB4RUMsMHhGRiwweEZELCAweEZELDB4N0YsMHhERiwweEY3LDB4RTQsMHhERiwweDVGLDB4RkYsCisweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEMzLDB4RkYsMHhFRiwweEU2LDB4RjgsMHhGRSwKKzB4M0YsMHg4QiwweDgzLDB4RjksMHhGRSwweDdGLDB4RTcsMHhGOSwgMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDE3LAorMHhGRCwweEZGLDB4RkYsMHhGRiwweDdGLDB4NUYsMHhGNywweDJDLCAweEZGLDB4RkYsMHhGRiwweEZFLDB4N0YsMHhGRiwweEU3LDB4RjksCisweEZFLDB4N0YsMHg5RiwweEZFLDB4MkYsMHhGRiwweEZGLDB4RUYsIDB4RkYsMHhGRSwweEJGLDB4RUYsMHhBRCwweEZGLDB4RkYsMHg3RiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRSwweERGLDB4RkYsMHhERiwweEZGLDB4RkQsMHhGRCwweDdGLAorMHhERiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQSwweDNGLDB4RkUsCisweEY3LDB4RkQsMHhFRiwweDdBLDB4RkYsMHhCMSwweEJELDB4RkYsIDB4N0YsMHhGNywweEZELDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwKKzB4RkYsMHg3RiwweEYzLDB4MjcsMHhGRiwweERGLDB4RkYsMHhERCwgMHhGRiwweEZDLDB4OUIsMHhGRiwweENCLDB4RkMsMHhCRiwweDJGLAorMHhDQiwweEYyLDB4RkMsMHhCRiwweDJGLDB4QzksMHhGRiwweERFLCAweEZGLDB4REYsMHhBRiwweEVCLDB4REEsMHhGRSwweEJCLDB4QUYsCisweEVCLDB4RjgsMHhGNywweEFGLDB4RTgsMHhGQSwweEZFLDB4QkYsIDB4QUYsMHhFQiwweEYyLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhFRiwKKzB4QkQsMHhENywweEJGLDB4RkYsMHhGRiwweERFLDB4OEYsMHhCOCwgMHhERSwweDM3LDB4OEQsMHhBMywweDc4LDB4REEsMHgzRiwweDhGLAorMHhGRiwweEExLDB4RkYsMHhGRiwweEZCLDB4RkIsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhBNywweEJELDB4RkIsMHg3NiwweEZELDB4QkYsCisweEVGLDB4REIsMHhGRSwweEJCLDB4QkYsMHhGRSwweDI3LDB4N0YsIDB4RkYsMHhGRSwweEZFLDB4RkQsMHhGNSwweEZGLDB4RUYsMHhGNSwKKzB4REYsMHgxRiwweEU3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywgMHhGRCwweEZGLDB4RkYsMHhDRCwweEZELDB4QUUsMHhGRiwweEZBLAorMHgzRSwweDNGLDB4QUIsMHhGRCwweEY4LDB4N0UsMHg4RiwweEUzLCAweEY4LDB4RkUsMHgzRSwweDhGLDB4RTMsMHhGOCwweEZGLDB4RkUsCisweDFGLDB4RUYsMHhERiwweEJGLDB4RkUsMHhERSwweERGLDB4RDksIDB4RkYsMHhERiwweEJDLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhFRiwKKzB4RkQsMHg3RiwweERGLDB4RjcsMHhGOSwweDNGLDB4RkUsMHhGRiwgMHhGRiwweDZGLDB4RkUsMHhERSwweEJGLDB4RjcsMHhFRCwweEVBLAorMHhGRCwweDhGLDB4ODMsMHhGOCwweEVBLDB4M0YsMHg4RiwweEVGLCAweEZGLDB4RjQsMHg3RiwweEZGLDB4RUYsMHhFRiwweDdCLDB4RjMsCisweEYxLDB4NUYsMHhGRiwweEZGLDB4RjEsMHgzQiwweDdGLDB4REYsIDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RTAsMHhGRiwKKzB4RkYsMHhGRiwweEY3LDB4RkYsMHg2RiwweEZGLDB4N0YsMHhGRiwgMHhGRiwweEY3LDB4REUsMHhGNywweEJGLDB4RUYsMHhGQiwweEY3LAorMHhGRCwweEZGLDB4RkYsMHhGNSwweEZBLDB4RkYsMHhGRiwweEZCLCAweEU3LDB4RkYsMHhGMywweEY4LDB4N0YsMHhGMywweERGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDFGLDB4RUYsIDB4QkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwKKzB4RkYsMHg3RiwweEZGLDB4OUYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhDRiwweEZGLDB4MzcsMHhGRiwweEZGLAorMHg3RiwweERGLDB4NzcsMHg1RCwweEU3LDB4RkMsMHhGRiwweEJGLCAweEY3LDB4RjUsMHhGQiwweEZGLDB4RkYsMHhENywweEY1LDB4RkIsCisweEZGLDB4RkYsMHg0NSwweEZELDB4N0YsMHhFQSwweEZELDB4QkUsIDB4QkYsMHhERiwweEY3LDB4RkYsMHhGRiwweERCLDB4RkIsMHhGRSwKKzB4RkYsMHhCRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHg1RiwgMHg3RiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZFLDB4RkYsMHhFRiwweEZELDB4RkYsMHg3RiwweERGLCAweEZGLDB4RUYsMHhGQiwweEY4LDB4MEYsMHhGMywweEZGLDB4RjksCisweDJFLDB4RkIsMHhGRSwweEZDLDB4RjMsMHhFRiwweEZGLDB4RkYsIDB4QkYsMHhGRiwweEZCLDB4RTcsMHhGRiwweEZFLDB4N0UsMHhGRiwKKzB4QzAsMHg2QiwweENGLDB4RkYsMHgzNCwweERGLDB4RjEsMHhGRCwgMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4REYsMHhGNywweEZELAorMHhDRiwweDdGLDB4OUMsMHhGRCwweEZELDB4NkMsMHhGNywweEZGLCAweEY2LDB4RkQsMHhFQiwweDJCLDB4OUYsMHhGRiwweEZDLDB4RkUsCisweDdFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhENywweEYzLDB4RjcsIDB4RkYsMHhGQiwweEUxLDB4QkYsMHhGRiwweEVCLDB4N0EsMHhERSwKKzB4RDcsMHhGQiwweEZGLDB4RjksMHhGRSwweEZGLDB4RkYsMHhGMywgMHhERSwweDdGLDB4RkQsMHhFNywweDdGLDB4RkYsMHhGRCwweEJCLAorMHhGRiwweEZGLDB4N0UsMHhDQywweEY2LDB4QUYsMHg1RiwweDdGLCAweEZFLDB4RjQsMHg3RCwweEY3LDB4RkQsMHhCQiwweDZFLDB4REIsCisweEI3LDB4RkYsMHhGNywweERGLDB4NjYsMHhGRiwweEZGLDB4RjcsIDB4M0QsMHhDRiwweERFLDB4QkQsMHhGRiwweEZGLDB4REUsMHhEQiwKKzB4OEQsMHhGNywweDdFLDB4REYsMHhCNywweEVGLDB4N0YsMHhGRiwgMHhGNiwweDg3LDB4RkYsMHhGRiwweEVGLDB4RkUsMHhERSwweEJGLAorMHhGRiwweEZGLDB4RkYsMHhCQiwweEVGLDB4RkQsMHhGRiwweDdCLCAweERFLDB4RjcsMHgzRiwweEZGLDB4QkYsMHhGQiwweERCLDB4RkYsCisweEYyLDB4QjYsMHhGRCwweEJELDB4N0YsMHhFNywweEZGLDB4RkYsIDB4RkYsMHg2RiwweEY3LDB4RkYsMHhGRiwweEZGLDB4RkUsMHg3NywKKzB4RkYsMHhCRiwweEY4LDB4QUYsMHhGRiwweERGLDB4QkYsMHhGRiwgMHhCRiwweDdGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhEQiwweEZFLAorMHhGRiwweEJGLDB4RkYsMHhGQSwweEZGLDB4RkQsMHhGRiwweEY2LCAweDdGLDB4RkYsMHg5RiwweEZGLDB4RkYsMHgzRiwweEVGLDB4RjgsCisweEVFLDB4N0UsMHg5RiwweEJBLDB4RkUsMHhCRiwweDhGLDB4RUYsIDB4RkUsMHhGRSwweEY5LDB4RkYsMHhGQSwweDdGLDB4RkUsMHg3RSwKKzB4QkYsMHhBRiwweEZCLDB4OTYsMHhGRCwweDlGLDB4RUYsMHg1RSwgMHg2NSwweEJFLDB4RUYsMHg1QiwweEI2LDB4RkYsMHhCRSwweEUzLAorMHhGRiwweEI1LDB4QkYsMHhGRiwweEZELDB4RkYsMHg3RiwweEZGLCAweEVGLDB4REYsMHhGRSwweEZGLDB4QkYsMHhGQiwweEZFLDB4RkYsCisweEJGLDB4Q0YsMHhGRiwweEZGLDB4RkYsMHhGRCwweDlCLDB4RkYsIDB4RkUsMHhGQiwweEZFLDB4REYsMHhGRiwweDdGLDB4RkYsMHhGNywKKzB4RkUsMHhGRiwweERGLDB4RkIsMHhGQiwweEZFLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhCNywweEZFLDB4RkEsMHhGRiwweEFCLAorMHhFRiwweEZGLDB4RkQsMHhCNSwweDdCLDB4N0YsMHhGQiwweEY3LCAweEZELDB4RkYsMHhGRiwweERELDB4RkYsMHhFRiwweDhGLDB4RkYsCisweDJGLDB4RkYsMHhGQiwweDdDLDB4RkYsMHgzRiwweERGLDB4NzMsIDB4RUIsMHhGRSwweDNGLDB4RkYsMHhFRiwweEZCLDB4RkUsMHhGRiwKKzB4RUYsMHhGRCwweEZGLDB4QkYsMHhGRCwweDBGLDB4RkYsMHhGRiwgMHhGRiwweEY1LDB4RjksMHhGRiwweDdGLDB4RDcsMHhGRCwweEZGLAorMHhERiwweEZGLDB4RjcsMHhGQiwweEZGLDB4N0YsMHhCRiwweEZGLCAweEZGLDB4RjAsMHg5RiwweEZGLDB4RkUsMHg3RiwweDhCLDB4RTMsCisweEY5LDB4REUsMHgyNywweDlCLDB4RTYsMHhCRSwweDdGLDB4OUIsIDB4QzMsMHhGOCwweERFLDB4N0YsMHg5RCwweEU3LDB4RkUsMHg3RiwKKzB4RkYsMHhGRiwweDVGLDB4RDcsMHhGRiwweEZGLDB4RkYsMHg0RiwgMHhGQiwweEZGLDB4RkYsMHg3RiwweEZGLDB4QUYsMHhGRiwweDlGLAorMHg3RiwweEZCLDB4RkYsMHhFOCwweEZGLDB4RkYsMHhGRSwweEJGLCAweEFGLDB4RkYsMHhGRiwweEZFLDB4QkYsMHhFRiwweEY3LDB4RkYsCisweEJGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsIDB4RkMsMHhGRiwweEZGLDB4RkQsMHg3RiwweEZGLDB4RkYsMHhGRiwKKzB4RkQsMHgzRiwweENGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywgMHhGRiwweEZELDB4N0YsMHhGRiwweEZGLDB4OTMsMHhGRiwweEZGLAorMHg3QSwweERGLDB4RjcsMHhGRiwweEZGLDB4N0IsMHg3RiwweEI3LCAweEVGLDB4RkYsMHhGRiwweEZELDB4QkYsMHhGRCwweEZCLDB4RkYsCisweEY3LDB4RkYsMHhENywweEZGLDB4RkYsMHhGRiwweEZDLDB4OUYsIDB4NkYsMHhDQiwweEZGLDB4RjQsMHhCQiwweERGLDB4RDYsMHhGRCwKKzB4QkYsMHgyRiwweEQzLDB4RjcsMHhGRiwweERGLDB4RkYsMHhDRiwgMHhGRiwweEZBLDB4QkUsMHhCRCwweEFGLDB4NkEsMHhEQSwweEJFLAorMHhCQiwweEFCLDB4M0EsMHhCRSwweDJELDB4QUUsMHhFQiwweERBLCAweEY2LDB4M0YsMHhBRCwweEY1LDB4REQsMHhGRiwweENGLDB4RjEsCisweEZGLDB4RjksMHg3RiwweEZGLDB4NzMsMHhGRSwweEZGLDB4Q0YsIDB4QzMsMHhGNCwweEY3LDB4MkYsMHhGMywweEZGLDB4RkMsMHhGRiwKKzB4N0MsMHgxRiwweEZGLDB4M0YsMHg0RiwweEZGLDB4N0UsMHhGRiwgMHhFRiwweEJELDB4RjYsMHhGRSwweEZGLDB4MkIsMHhFRiwweERDLAorMHhGQiwweEZELDB4RkYsMHhGQiwweEZGLDB4RUEsMHg3QiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGNywweERGLDB4RkYsCisweEUzLDB4N0QsMHhGRiwweEI3LDB4RkYsMHhCRiwweEZGLDB4RkYsIDB4REYsMHhGRiwweEY4LDB4RkYsMHhCRiwweEZGLDB4QkYsMHhFQiwKKzB4RTcsMHhGQSwweEZFLDB4M0QsMHhCRiwweEU5LDB4RkMsMHhCRiwgMHhGRiwweEZBLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEQ5LAorMHhGRiwweEZGLDB4RkYsMHhGNiwweDdGLDB4RkYsMHhGNiwweDdELCAweEZGLDB4REYsMHhDRiwweEZELDB4QkYsMHhGQiwweEVGLDB4N0UsCisweEZGLDB4N0YsMHhGRiwweEZGLDB4RDMsMHhGRiwweEZELDB4RkIsIDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhCRiwKKzB4RkUsMHhGRiwweEY3LDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGQiwgMHhGRiwweDg3LDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLAorMHg3QiwweEZFLDB4RkYsMHhGRSwweDNCLDB4RjcsMHhGNywweEZGLCAweDNGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDBGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RjcsIDB4RkYsMHhGRiwweEFELDB4RkYsMHhGRSwweEY3LDB4RkYsMHhGRiwKKzB4NUYsMHhGRiwweEZGLDB4REYsMHhGRiwweEZELDB4RkYsMHhGNSwgMHhGRiwweERGLDB4RkYsMHhCRCwweEZGLDB4RTksMHhGRiwweEM3LAorMHhGMywweEZGLDB4RkYsMHhGNywweEZGLDB4RjMsMHhGRiwweEY4LCAweDNCLDB4RkYsMHhGRiwweDdCLDB4REYsMHhCRiwweEZCLDB4RUYsCisweEZCLDB4RkYsMHhGQiwweEY3LDB4RjcsMHhCQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRSwweDdGLDB4RjMsMHg3RiwKKzB4NUUsMHhCNywweEJGLDB4RkQsMHg3RiwweEZGLDB4RjksMHg3RiwgMHhGQiwweEZGLDB4RUIsMHhGRCwweDdGLDB4N0YsMHhGRiwweEVGLAorMHhGQiwweEUwLDB4M0YsMHhGRSwweEJGLDB4QkYsMHhERiwweEZGLCAweDdFLDB4RkYsMHhGNywweEZGLDB4RkYsMHhGRSwweEJGLDB4RkYsCisweERCLDB4NzgsMHhGRiwweEZGLDB4RkYsMHhFRSwweEExLDB4QkYsIDB4RjUsMHhERSwweEZCLDB4RjcsMHhGRiwweEZCLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweEQ3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RUYsMHhGMCwweEZGLDB4RkYsMHhGRiwweEYzLAorMHhGNywweEZGLDB4RUYsMHhGRiwweEU3LDB4Q0YsMHhGRiwweEZCLCAweEZGLDB4RUYsMHhGRiwweEZGLDB4OUYsMHg5RiwweEVGLDB4RkMsCisweDE2LDB4QkYsMHhGRSwweEYzLDB4RTQsMHhGRiwweEZGLDB4QzYsIDB4RkYsMHhFNywweEZGLDB4RkYsMHhGRCwweEZGLDB4QkYsMHhGRiwKKzB4RkYsMHgzRiwweEZGLDB4QkYsMHhENiwweEFGLDB4N0YsMHhGRSwgMHg2QiwweDdFLDB4N0YsMHhGRiwweEFGLDB4RkYsMHhGRiwweEJGLAorMHhGRiwweDVGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRSwweEZGLCAweEZGLDB4QkQsMHhEQiwweEZGLDB4RkUsMHg1RiwweEYyLDB4RkYsCisweEZGLDB4NUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RUYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REUsMHhCRiwKKzB4RkYsMHhGRiwweEVGLDB4RkIsMHg3NywweEZFLDB4QkQsMHg3RiwgMHg1RiwweEZGLDB4RkYsMHhGRiwweERGLDB4NkYsMHhFRCwweEZGLAorMHhGRCwweEZGLDB4N0YsMHhGRCwweDZGLDB4RkYsMHhGRiwweDc3LCAweERBLDB4Q0YsMHhGRCwweDVGLDB4RkYsMHhCRiwweEZGLDB4RkYsCisweERGLDB4N0YsMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4NjYsMHg3RiwweEZGLDB4RkUsMHhCRiwweEU3LDB4QkYsMHhGQSwKKzB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHg1OSwgMHhFRiwweEZGLDB4RUYsMHhGQiwweDdGLDB4ODksMHhGRiwweEZGLAorMHhFOSwweEZGLDB4NkYsMHhGRiwweEY1LDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHg3RiwweEYyLDB4RjcsMHhGRiwweEZGLDB4RUYsCisweEY4LDB4N0YsMHhGQiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RDksIDB4RkYsMHhFRiwweEJCLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhFRiwKKzB4REUsMHhGRiwweEZGLDB4OUYsMHg3RiwweERGLDB4RkYsMHhGNywgMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHhGRiwweEFGLAorMHhGRiwweEZGLDB4RjcsMHgzRiwweEVCLDB4OUYsMHhGRSwweDdGLCAweDlFLDB4N0YsMHg5RiwweEZFLDB4ODcsMHhGRiwweEVELDB4REIsCisweDU2LDB4RkYsMHhCRiwweEFGLDB4MEIsMHhEMiwweEZGLDB4RUYsIDB4REIsMHg2RSwweDdELDB4QkQsMHg2RiwweEY4LDB4RkUsMHgzRiwKKzB4RkEsMHg1QiwweEZGLDB4RkQsMHhCRiwweEVGLDB4RkYsMHhCRiwgMHg2RiwweERCLDB4RTYsMHhGRiwweEZGLDB4M0YsMHhGRiwweERGLAorMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4REEsMHgzRiwweEZGLCAweEZCLDB4RkUsMHhGRSwweEZGLDB4RkYsMHhERiwweEY3LDB4QkQsCisweEZGLDB4RkQsMHhGRiwweEZFLDB4RkYsMHhGQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEYxLDB4NUYsMHhGRCwweDlGLDB4REYsMHhGRCwKKzB4RkYsMHhGRCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3NiwgMHhGQSwweEZGLDB4RkYsMHg3RiwweEUzLDB4RjgsMHhGRiwweEFFLAorMHhGRiwweEZCLDB4N0UsMHg5RCwweDczLDB4RkYsMHhGQSwweDdGLCAweERGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGQiwweENELDB4RkYsCisweDdGLDB4RUYsMHhGQiwweEZGLDB4RkQsMHhGRiwweEY3LDB4N0YsIDB4N0YsMHhFRiwweEZGLDB4RUQsMHhGRiwweEZGLDB4RkYsMHhCNSwKKzB4RkYsMHhCRiwweEZGLDB4QkYsMHhGRCwweEVGLDB4REIsMHhGNywgMHhGRiwweDkzLDB4RkYsMHhFRiwweEUyLDB4RjksMHhCRSwweDdGLAorMHg4QiwweEU3LDB4RjksMHhGRSwweDZCLDB4RTcsMHhGOSwweEZFLCAweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDQ3LDB4RkYsCisweEZGLDB4RkQsMHhGRiwweDlGLDB4RkYsMHhENywweEZGLDB4RkYsIDB4RkYsMHhGRiwweEY1LDB4RkYsMHg5RiwweEZGLDB4RjcsMHhGRSwKKzB4RkYsMHhCRiwweEZFLDB4NkYsMHhGRiwweEZGLDB4RkIsMHhGRiwgMHhGRiwweEZGLDB4QUYsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZCLAorMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELCAweERGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGRiwweEZGLDB4REYsCisweEZGLDB4RkYsMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4NUYsMHhGQiwweEZFLDB4RkYsMHhGOCwweDM3LDB4RkYsMHhGRiwKKzB4RUYsMHhGRiwweDdGLDB4RkUsMHhCRiwweEZGLDB4RkYsMHhGRSwgMHhCRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4QkYsMHhGRCwweEZGLAorMHg3RiwweEZBLDB4N0YsMHhGRiwweEZGLDB4NkYsMHhGRiwweEZGLCAweDdELDB4RkYsMHhDRiwweEZGLDB4RkYsMHhGRiwweDRGLDB4RkYsCisweEYyLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZBLDB4QkYsIDB4RkYsMHhBRSwweEVCLDB4RkEsMHhGRSwweEJCLDB4QUQsMHhFQiwKKzB4RkEsMHhGNywweEFGLDB4NkIsMHhGQSwweEY2LDB4QkYsMHgyNSwgMHhFOSwweEYyLDB4N0YsMHg0NSwweEZGLDB4RkYsMHhGRCwweEY3LAorMHhGNywweEJGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhCRiwweEZCLCAweEZGLDB4REYsMHhGMywweEZGLDB4RjcsMHgzRiwweENGLDB4RkYsCisweEExLDB4RkYsMHhGRiwweEJGLDB4RTcsMHhGRiwweEZGLDB4N0YsIDB4RkYsMHgzRCwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHgyRiwKKzB4RkYsMHhGQiwweEY1LDB4N0YsMHhGRSwweDU3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LAorMHgzRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRCwweEZFLCAweEY3LDB4RUUsMHhBRiwweEZFLDB4RUUsMHhFNywweEZBLDB4RkYsCisweEZFLDB4OUQsMHhGOSwweDVFLDB4RkUsMHhGRiwweEVCLDB4RkYsIDB4RkYsMHhERiwweEE3LDB4RkYsMHhGRiwweEZGLDB4RkMsMHhEQiwKKzB4RkYsMHhGRiwweEZGLDB4N0UsMHhGQiwweEZGLDB4RkYsMHhFRiwgMHhGQiwweEZELDB4RkYsMHhEQiwweEZGLDB4RkYsMHhGRiwweEVGLAorMHhGRiwweEZGLDB4RkYsMHhGRCwweEJGLDB4RkUsMHhCRiwweEZGLCAweDZGLDB4N0YsMHhGRiwweEY3LDB4RkYsMHhGRiwweEY5LDB4RkYsCisweEY3LDB4RkYsMHhCRiwweERFLDB4RjcsMHhGRiwweEZGLDB4RkYsIDB4RkEsMHg3RiwweEZELDB4QkYsMHg1RiwweEZGLDB4RkYsMHhCRiwKKzB4RkYsMHhFRCwweEZGLDB4RjcsMHhCRiwweEZGLDB4RkYsMHhFRiwgMHhGRiwweERGLDB4RkYsMHhGRiwweEZGLDB4RTYsMHhGRiwweEZCLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVCLDB4RkYsCisweEZELDB4RkYsMHhGNSwweEZGLDB4RjYsMHg3RiwweERGLDB4QkQsIDB4Q0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHhGRiwKKzB4RkYsMHhGOSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFMywgMHhGRiwweEVFLDB4QkYsMHhGRiwweDdELDB4RUYsMHhGRSwweEZGLAorMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RTcsMHhGRiwweEI1LDB4QUUsCisweEZGLDB4RkYsMHhCNiwweEZFLDB4QkYsMHhGRiwweEZGLDB4QkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHgyNywweEZGLDB4RUYsMHhGRSwweDdGLDB4REYsMHhGRiwgMHg3RSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkQsMHhGRiwweEY3LDB4RjksMHg5RiwweEZGLCAweDVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4N0YsCisweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4MEYsMHhGRiwweEU3LDB4QkYsMHhGRSwKKzB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHhCRiwgMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEM0LAorMHg2QiwweEZGLDB4MjksMHgxRiwweEZCLDB4QUYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEVGLDB4MUIsMHhGRSwweEZGLDB4RkMsCisweDZGLDB4RkYsMHhGRiwweEZELDB4NkEsMHhGNywweEQ3LDB4RjUsIDB4QkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkUsMHhCRiwweEZGLDB4RkYsMHhGQSwweEZGLDB4RkYsMHhGNywgMHhGQiwweERELDB4QkYsMHhGRiwweEU3LDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHg3RiwweEZGLCAweEZGLDB4RjUsMHhGRiwweEZGLDB4RjcsMHhGRCwweEIzLDB4RUYsCisweEZELDB4N0UsMHg1RCwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsIDB4RkQsMHg3RiwweEQyLDB4RjUsMHhGQiwweDdFLDB4Q0IsMHhCNywKKzB4RkYsMHhGRiwweEZGLDB4QzYsMHhGRiwweEZELDB4RUUsMHg2MywgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjYsMHhGRCwweDY1LAorMHg1QiwweERGLDB4RkYsMHhENSwweEZGLDB4RkYsMHhGRiwweEY2LCAweEU3LDB4QkYsMHhGNywweEE5LDB4RkYsMHhGRiwweEVELDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RUIsMHhGRiwweEZGLDB4RkYsIDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGOCwweDFCLDB4RkYsMHhFMywKKzB4RDAsMHhCRiwweEZGLDB4RTEsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEQ3LDB4RkYsMHhGRiwweEZGLDB4NUYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4QUYsMHhGRiwweERCLDB4NzYsMHhCRiwweEZGLCAweDdGLDB4RkYsMHhCRiwweEVGLDB4RkUsMHhGRiwweEJGLDB4RUYsCisweEZCLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhCRiwweEYyLDB4N0YsIDB4RkYsMHg5RiwweEZFLDB4QkQsMHhGRSwweDdGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEY3LDB4M0YsMHhFQywweDdGLDB4RjYsMHg5NSwweEJCLAorMHhFRiwweEY4LDB4RkUsMHhGQywweEJGLDB4MkYsMHhEQSwweEZDLCAweEJGLDB4MkYsMHhDQiwweEYyLDB4RkMsMHhCRiwweEVGLDB4RkYsCisweEE5LDB4QkYsMHhDRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkUsIDB4REQsMHhCNywweDZELDB4RjYsMHhEOSwweEI2LDB4NkQsMHg5QiwKKzB4NzYsMHhEOSwweEJGLDB4RkIsMHhGRCwweEEzLDB4RkYsMHhCRiwgMHhFRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHg3RiwweERGLAorMHhGRCwweEVGLDB4N0IsMHhERSwweEY3LDB4RkQsMHhFRiwweDdGLCAweEZGLDB4RkYsMHgwNSwweEZGLDB4RkEsMHhGRSwweDdGLDB4RUYsCisweEUzLDB4RkYsMHhGRiwweEZELDB4N0YsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHg1RiwweEZGLDB4RkYsMHhGRCwweDdGLDB4RkIsMHhBRiwKKzB4RkYsMHg2MywweEM4LDB4RkYsMHhCRiwweEVGLDB4RkYsMHhGRiwgMHhGQSwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHg5RiwweEY3LAorMHhGRiwweEZBLDB4QkYsMHhGRSwweDlGLDB4RkIsMHg3RiwweEZGLCAweEZGLDB4RUYsMHhENywweEZGLDB4RkYsMHhGNSwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRCwweDdGLDB4RkYsMHhGRiwweEJGLDB4RkYsIDB4RjksMHhCRiwweEZGLDB4QkUsMHgyNywweDlGLDB4RTcsMHhGOSwKKzB4RkUsMHg3RiwweDhCLDB4RTcsMHhGRSwweDdGLDB4OUYsMHhFMiwgMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LDB4RjEsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEQ3LCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsCisweEQ3LDB4RkYsMHhGQSwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsIDB4RkQsMHhGRiwweEZGLDB4RkYsMHhBRiwweEY3LDB4RkYsMHhGRiwKKzB4RkYsMHhFQiwweEZGLDB4RkYsMHhGRiwweEFGLDB4RkYsMHhDNCwgMHhGRiwweEY3LDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweDVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhENywweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RUIsMHhGRiwweEZCLDB4N0EsCisweERGLDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGRSwweEJGLDB4RkYsIDB4RkYsMHg3RiwweEZGLDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGNywKKzB4RUYsMHhFMywweEZGLDB4REQsMHhEMiwweEZGLDB4REYsMHhGRiwgMHhGRiwweEYyLDB4RkMsMHhCRiwweENCLDB4RjYsMHhGRCwweEJGLAorMHgyRiwweENCLDB4RkYsMHg3RiwweERGLDB4REUsMHhBRiwweEZGLCAweERBLDB4RUUsMHhCRiwweEFGLDB4RTksMHhGQSwweEY0LDB4QkQsCisweEFGLDB4NUEsMHhBRSwweEJCLDB4QUIsMHg2QiwweERBLDB4REUsIDB4QkYsMHhBRCwweEQ3LDB4NUUsMHhGRiwweEZGLDB4QkYsMHhGQywKKzB4RkYsMHhERiwweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERiwgMHhGNywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZBLAorMHgxRiwweEZGLDB4RkUsMHhGQiwweEVGLDB4QkYsMHhGRCwweEZGLCAweEZELDB4QkQsMHg3NywweEZGLDB4RkYsMHhGRiwweEZGLDB4OUQsCisweEVGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHg3RCwweEZGLDB4RkIsIDB4RkUsMHhFRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRSwgMHhCRiwweEU0LDB4RkIsMHhGRiwweEZFLDB4M0YsMHhGRSwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhBRiwweEVBLDB4RkUsMHhCRiwweEFGLCAweEVCLDB4RkEsMHhGRSwweEZGLDB4RkYsMHhGRiwweDU1LDB4RjYsCisweEZGLDB4RkUsMHhGNywweEZGLDB4N0YsMHhGRiwweEVCLDB4RjcsIDB4NUYsMHhDNSwweEZELDB4N0YsMHg1RiwweEQ3LDB4RjUsMHhGRiwKKzB4NkYsMHhGQiwweEZGLDB4OEEsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhFQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhCRiwweEJGLAorMHhFRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLCAweDc3LDB4REYsMHhGQiwweEZGLDB4RkQsMHg3RiwweEVGLDB4RkYsCisweEZGLDB4RkYsMHhCRiwweDdGLDB4RkYsMHhERiwweEJGLDB4RkYsIDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRSwweEVGLDB4REYsMHhGRiwKKzB4RkUsMHhGRiwweDlGLDB4RUYsMHg3RCwweEZGLDB4RjcsMHhGRiwgMHg3RiwweEZGLDB4RkYsMHhERiwweEY3LDB4RkQsMHhGRiwweEVGLAorMHhERiwweEZGLDB4REYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkIsCisweEZELDB4RkYsMHhCRiwweERGLDB4RDEsMHhGRiwweEY4LDB4M0IsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4N0UsMHhEQiwweEZELDB4RkYsMHg3NywweERCLDB4QjcsMHg3RCwgMHhCRiwweEZCLDB4RkYsMHhGOCwweDdGLDB4RUQsMHg3QiwweDVFLAorMHhGRiwweEZFLDB4RkYsMHhGRiwweDRGLDB4RDcsMHhGRCwweDdGLCAweERGLDB4RDcsMHhGNSwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsCisweEYyLDB4M0YsMHhGRSwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhCRiwweEVGLDB4RkUsMHhGRiwweDNCLDB4RUUsMHhGRiwKKzB4RkMsMHhFRiwweEZGLDB4RkYsMHhGRiwweDg1LDB4RkYsMHhGRCwgMHhGRSwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkUsMHhGRiwweERGLAorMHhGQiwweEZGLDB4NUYsMHhCRiwweEZGLDB4RkQsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhBOCwweEZGLDB4RkYsMHg5RiwweDlFLDB4RkYsCisweEZGLDB4RkYsMHg3RiwweEYzLDB4RkYsMHhGRiwweENGLDB4RkYsIDB4RjcsMHhGRCwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkMsMHgxNiwKKzB4QkYsMHhDRiwweEEzLDB4RTUsMHhFRiwweDdGLDB4RkYsMHhGMywgMHhFNCwweEZGLDB4Q0YsMHg5MywweEZDLDB4RkYsMHgzRiwweENGLAorMHhGRiwweEZGLDB4RkYsMHhENiwweDBGLDB4N0QsMHhCRiwweDZFLCAweEZCLDB4RjQsMHhGQywweEFGLDB4NkQsMHhEQiwweDc3LDB4QjcsCisweDZELDB4REIsMHhGNiwweEZELDB4QkYsMHhGRiwweEZGLDB4RkYsIDB4QkYsMHg5QiwweEZBLDB4REUsMHhCNywweEI3LDB4RUQsMHhGOSwKKzB4N0UsMHhCNywweEFDLDB4RUIsMHhENiwweEIzLDB4QUQsMHhFQiwgMHg3QSwweERGLDB4RkYsMHhGRiwweEZGLDB4RDgsMHhCRiwweEZGLAorMHhCNywweEVELDB4OUYsMHg2RiwweERELDB4RjcsMHg2OCwweERCLCAweDM3LDB4QjMsMHg2QywweERCLDB4MzYsMHhDRCwweEIzLDB4N0YsCisweEZGLDB4N0YsMHhGNSwweDZGLDB4RkQsMHhFRiwweDc5LDB4M0QsIDB4RjcsMHg5MywweEU0LDB4N0EsMHg5RSwweEFELDB4RUEsMHg3QSwKKzB4OUUsMHhGNywweEJELDB4RUYsMHhGRiwweEZGLDB4RkYsMHg3NiwgMHg3RiwweEZCLDB4QzYsMHhGRiwweEJCLDB4RUYsMHhEQSwweEZFLAorMHhGRCwweEJGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLCAweEZGLDB4RkYsMHhGQiwweEZGLDB4QTUsMHhGRiwweEZELDB4QUIsCisweDZGLDB4NzgsMHhERSwweDE3LDB4OEYsMHg3OSwweERGLDB4RkQsIDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGQiwKKzB4RkYsMHhGQiwweEZGLDB4RUYsMHhGQiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJCLDB4REEsMHhGMywweEVGLDB4M0IsMHhDRSwweEYzLAorMHhCQywweEVGLDB4M0YsMHhDRiwweERGLDB4RkYsMHhCNywweEZGLCAweEZGLDB4RkYsMHhDRiwweDczLDB4RkYsMHhCRiwweEVGLDB4RkYsCisweEYzLDB4RkYsMHgzRiwweENGLDB4RjMsMHhGQywweEZGLDB4M0QsIDB4Q0YsMHg5RiwweEZFLDB4MDcsMHhGRiwweEFGLDB4RUIsMHhGRSwKKzB4RkQsMHhCRiwweEVGLDB4RUIsMHhGQSwweEZGLDB4QUYsMHhFQiwgMHhGQSwweEZFLDB4QkYsMHhBRiwweEZCLDB4RkUsMHgzRiwweEZCLAorMHg5QiwweEZGLDB4N0YsMHhERiwweEZGLDB4RjMsMHhGRSwweEZGLCAweERFLDB4RjcsMHhCRiwweDdCLDB4REUsMHhGNywweEJELDB4RUYsCisweDdCLDB4RkUsMHhGRiwweEZGLDB4REYsMHgzRiwweEZFLDB4RkYsIDB4QjcsMHhGRiwweEVGLDB4RjcsMHhGRiwweEJGLDB4RUQsMHhGRSwKKzB4REYsMHhCNywweEVELDB4RkIsMHg3RSwweERGLDB4RkYsMHhGRiwgMHhGRiwweEZELDB4NUYsMHhFRiwweEVCLDB4RkEsMHhGRSwweEY1LAorMHhCRiwweDZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZFLDB4RjgsMHhGRiwweEE4LDB4RkYsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4NkEsMHhGQiwweEI3LDB4RUYsIDB4RkIsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwKKzB4RUYsMHhGQiwweEZGLDB4RTAsMHhGRiwweEZGLDB4RkQsMHg3RiwgMHg1QywweEQ3LDB4N0QsMHhERiwweEYzLDB4NUMsMHhGNSwweENELAorMHg3MywweDVFLDB4RDcsMHhCNSwweEZELDB4N0YsMHhFRiwweEZGLCAweERCLDB4RkYsMHhGRiwweEUyLDB4RjgsMHhCRSwweDJGLDB4OEYsCisweEU3LDB4RjgsMHhCRSwweDZCLDB4RTIsMHhGOCwweEJFLDB4MkYsIDB4OEIsMHhFMiwweEY5LDB4RkUsMHg3RiwweEU3LDB4RkYsMHhENywKKzB4RjUsMHhGRCwweDdGLDB4RkYsMHhGNywweEY1LDB4RkQsMHg3RiwgMHhENywweEY1LDB4RkQsMHg3RiwweDVGLDB4RDcsMHhGNSwweEZGLAorMHhGRiwweEZGLDB4OEYsMHhGRiwweEFGLDB4RUIsMHhGQSwweEZGLCAweEZGLDB4QkYsMHhFQiwweEZBLDB4RkYsMHgyRiwweEVCLDB4RkEsCisweEZFLDB4QkYsMHhBRiwweEVCLDB4RkYsMHhGRiwweEZFLDB4NUYsIDB4RkYsMHg1RiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhENywKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEJGLDB4RkUsMHhCNywweEZELAorMHhGRiwweDdFLDB4REYsMHhGNywweEFELDB4RkYsMHg3RiwweEY3LCAweEZELDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsCisweEY2LDB4N0YsMHhGRiwweEZGLDB4RkYsMHhEQiwweEY2LDB4RkMsIDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVDLDB4QkYsMHhGRiwgMHhBRiwweEVCLDB4RkEsMHhGNiwweEFCLDB4OEYsMHhFQiwweEZBLAorMHhGNywweEE1LDB4RUIsMHhGQSwweEJFLDB4QkYsMHhBRiwweEVCLCAweEZBLDB4RkYsMHg2RCwweEZGLDB4RkYsMHg3RiwweERGLDB4MzMsCisweERELDB4RkYsMHg3RiwweEZFLDB4RjcsMHhGQywweDdGLDB4RkIsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhBOSwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhERiwgMHhGRiwweEZGLDB4RUYsMHhFRiwweEZELDB4RkYsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRSwweEE3LDB4RkYsMHhGRiwweEZGLCAweDc3LDB4REYsMHhGNywweEZELDB4OUYsMHg3RiwweEZFLDB4NzcsCisweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhBRiwweEJGLDB4QUYsMHhGRiwweEY5LDB4QkUsMHhCRiwKKzB4OEYsMHhGQiwweEZFLDB4RkUsMHhFRiwweEZCLDB4RkUsMHhGRiwgMHhCRiwweEVGLDB4RkIsMHhGRiwweEZGLDB4RkQsMHhERiwweDZGLAorMHhFRiwweEZGLDB4N0YsMHhGRiwweEJGLDB4QkYsMHhERiwweEZGLCAweEZDLDB4RkYsMHhERiwweEY3LDB4RkQsMHhFRiwweDdGLDB4REYsCisweEZGLDB4RkYsMHhGRiwweDNGLDB4RjYsMHhGRiwweENGLDB4RkYsIDB4REIsMHhGQiwweEY3LDB4RkYsMHhFQiwweDdBLDB4RkYsMHhGRiwKKzB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRSwgMHg2RCwweEZELDB4RkYsMHg1RiwweEZCLDB4RkYsMHhGRiwweEY3LAorMHhGRiwweDVGLDB4RjUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RjgsMHhGRiwweEZCLDB4RkYsCisweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU3LDB4RjYsIDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwKKzB4RkYsMHhDOSwweEZGLDB4RkYsMHhGRiwweEJELDB4RkYsMHhCRiwgMHhBRiwweEVGLDB4RUYsMHgzRiwweEQxLDB4RkMsMHg3RiwweEZCLAorMHhDNywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFMywweEZGLCAweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwweDc3LDB4RkYsCisweERGLDB4QjcsMHhGRCwweEY3LDB4RkQsMHhGNywweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4NTcsMHhGRiwweEY3LDB4QTUsMHhGRCwKKzB4M0YsMHhERiwweEJGLDB4QkYsMHhGRSwweDdGLDB4RkYsMHhGRiwgMHhGRiwweERGLDB4RkEsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZFLAorMHg4NywweEZGLDB4RTksMHhGRiwweEZFLDB4RUYsMHhCRiwweEVGLCAweEZFLDB4RkUsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkEsMHg5RiwweEZGLDB4M0YsIDB4RkYsMHhGRCwweEZELDB4NTcsMHhERiwweEZELDB4RjMsMHhGRiwKKzB4REYsMHhGRCwweEZGLDB4NUYsMHhERiwweEY1LDB4RkQsMHhGRiwgMHhGRiwweEY5LDB4OEYsMHhGRiwweEZGLDB4RkYsMHhFRSwweDdGLAorMHhGRiwweEZGLDB4QkYsMHg1RSwweEZFLDB4RUMsMHhGQiwweDNGLCAweDdGLDB4OUYsMHhFRiwweEY5LDB4RkYsMHhGRiwweENELDB4NkIsCisweEZGLDB4RkYsMHhGRiwweEM1LDB4RjMsMHhGQywweEZBLDB4MzgsIDB4RkYsMHhBRiwweDNGLDB4RUUsMHg3RiwweDlGLDB4RkYsMHhEOSwKKzB4RkYsMHhGRiwweEZELDB4N0EsMHhGNywweEZGLDB4RjMsMHhGRiwgMHhBRiwweDZGLDB4REIsMHhGMiwweEI5LDB4RTksMHhGQiwweEZGLAorMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZCLCAweEM1LDB4QkYsMHhGRiwweEVGLDB4RkYsMHg1RSwweEI3LDB4QUQsCisweENELDB4NzksMHg3QywweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweDkzLDB4RkYsMHhFRiwKKzB4RUEsMHhGRSwweEJGLDB4RUYsMHg1QiwweEQyLDB4Q0QsMHhGNSwgMHg2RCwweDc3LDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLAorMHhGRiwweEZGLDB4NjYsMHhGRiwweEQ1LDB4NjUsMHg3RCwweDVGLCAweDc1LDB4OUQsMHg2NSwweDdGLDB4RDYsMHhGQiwweDRGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY2LDB4QzcsIDB4RkYsMHhCRiwweEVGLDB4RkEsMHhGRSwweEZGLDB4QkYsMHhFQiwKKzB4RkYsMHhERiwweEZGLDB4N0UsMHhGRiwweEZGLDB4RUYsMHhGRCwgMHg3RSwweEQ3LDB4RkYsMHg3OCwweERGLDB4RkYsMHg1RiwweERGLAorMHhGNSwweEJGLDB4N0YsMHhERiwweEM1LDB4RkYsMHgzRiwweEY2LCAweDdFLDB4RkYsMHgwRiwweEVGLDB4RjIsMHgzRSwweEJGLDB4RkYsCisweEZCLDB4M0YsMHhGRiwweEZCLDB4N0YsMHhGRiwweEIzLDB4RkUsIDB4RkIsMHhGNiwweEZELDB4RkYsMHhEQSwweEY3LDB4RkQsMHhGRiwKKzB4N0YsMHhERiwweEY3LDB4QkYsMHhGRiwweEZBLDB4N0YsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHg5RiwweEZGLDB4RjMsMHhEQywweEY5LAorMHhCRiwweENFLDB4RTcsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LCAweEZGLDB4RkYsMHhFMiwweDdGLDB4RkUsMHhGRiwweEJGLDB4RUYsCisweEVCLDB4RkEsMHhGRiwweDlGLDB4NjcsMHgxRSwweEZGLDB4OEYsIDB4RTcsMHhGOCwweEZFLDB4N0YsMHg4RiwweEVGLDB4RkYsMHhCRCwKKzB4QkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweERGLDB4RjcsMHhGRiwgMHhGQywweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRCwweEIzLDB4RkYsMHhGRiwweEVGLCAweEZGLDB4RkYsMHhCRiwweEVELDB4RkYsMHhGQiwweEVFLDB4RkUsCisweEZGLDB4RkYsMHhFRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhCNSwweEZGLDB4QjcsMHhGRCwweEZELDB4NkUsMHhGRiwKKzB4RkYsMHhGRSwweEZELDB4MkYsMHhEOCwweEZFLDB4QkYsMHg4RiwgMHhFQiwweEY5LDB4RkUsMHgzRiwweEZGLDB4RkEsMHhDRiwweEZGLAorMHhFNywweEQ5LDB4RkEsMHhCRiwweERGLDB4NzcsMHhGQywweEZCLCAweDNGLDB4QUIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsCisweEZGLDB4RkYsMHhFRSwweDFGLDB4RkYsMHhERiwweEY3LDB4RkYsIDB4RkYsMHhGRiwweDVGLDB4OTcsMHgzNSwweEJGLDB4NUUsMHhGRSwKKzB4QkYsMHhFRiwweEZGLDB4RjcsMHhGRCwweEZGLDB4RkYsMHhGQSwgMHhCRiwweEZGLDB4QkUsMHg2RiwweDlGLDB4RTcsMHhGOCwweEJFLAorMHgyRiwweDhCLDB4NjYsMHg5NCwweDdELDB4OUQsMHhFNywweEY5LCAweEZFLDB4N0YsMHg5RiwweEU3LDB4RjEsMHg3RiwweEZGLDB4RkYsCisweEZGLDB4RjcsMHhGNSwweEZELDB4N0YsMHg1RiwweEZCLDB4RkQsIDB4OUUsMHhGRiwweEZCLDB4RkUsMHhGRiwweEZGLDB4RUYsMHhGRiwKKzB4RkYsMHhBMCwweEZGLDB4RkYsMHhGRiwweEJGLDB4RUYsMHhFQiwgMHhGQSwweEZFLDB4QkYsMHhCNywweEY3LDB4RjcsMHhGRiwweEZGLAorMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERCwweEZGLCAweEZELDB4RkYsMHhGRiwweEZGLDB4RDcsMHhGRiwweEZGLDB4RkYsCisweDdGLDB4RjUsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsIDB4QkYsMHhGRiwweEZGLDB4QUIsMHhGRSwweEZCLDB4RkUsMHhGRiwKKzB4RjcsMHhBRiwweEZGLDB4RkYsMHhERSwweEY3LDB4RUIsMHg1RiwgMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRiwweEZGLAorMHhCMywweEZGLDB4QzksMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLCAweEQ2LDB4RkYsMHhGRiwweENCLDB4RkYsMHhGRiwweERGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHg4RiwweEZGLDB4QkEsIDB4QkUsMHhCRiwweEFGLDB4RUIsMHg3OCwweEZFLDB4QjcsMHhBRCwKKzB4M0EsMHhGRSwweEI3LDB4QUYsMHhFQiwweDdBLDB4RkUsMHhCRiwgMHhBRiwweEZGLDB4OUYsMHhGRiwweEZGLDB4REYsMHhGQywweEZGLAorMHhGRiwweEZFLDB4QzMsMHhGRSwweEZGLDB4RkYsMHgzMywweEZDLCAweEZGLDB4QkYsMHhERiwweEYzLDB4RkYsMHhGRiwweEJCLDB4OUYsCisweEZGLDB4RkYsMHhGRiwweEVCLDB4REYsMHhGRiwweEZGLDB4QUYsIDB4RjcsMHg2RiwweEY5LDB4QkYsMHhFRiwweEZELDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RTMsMHg3RiwweEZGLDB4RkYsMHhGRiwgMHhGQiwweEZGLDB4RkYsMHhCRiwweEZELDB4RkIsMHhGNywweEZGLAorMHhERiwweEY3LDB4RkYsMHhGRSwweEVGLDB4NUYsMHhCRCwweEZGLCAweEZBLDB4RkYsMHhGOCwweEZGLDB4QkYsMHhBRiwweEZCLDB4RkUsCisweEZFLDB4M0YsMHhFRiwweEU4LDB4RkYsMHhERiwweEYzLDB4RkQsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVELDB4RkYsMHhGQiwKKzB4RkQsMHhGRiwweEFGLDB4RkYsMHhGRiwweEZFLDB4RkUsMHhCRiwgMHhEQiwweEZGLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhERiwweEZGLAorMHhGRCwweEZGLDB4Q0IsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEJGLDB4NkYsMHhGRiwweDdGLDB4QjcsMHhCMywweEZGLDB4RkYsCisweERGLDB4RkYsMHhGQiwweEVGLDB4RkYsMHhGRiwweEZGLDB4MDcsIDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEVELDB4RkYsMHhGNSwKKzB4N0MsMHhGRiwweDdGLDB4RkUsMHhGRiwweEZGLDB4RUYsMHhDRiwgMHhGRiwweEZCLDB4RkYsMHhGRiwweDJGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEYzLDB4RkYsMHhGQiwweEZGLDB4RkUsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsCisweEZELDB4MUIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZFLDB4N0MsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4QkYsMHg3RiwgMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhEQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELCAweEZGLDB4RkYsMHhGMCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4REYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4QkYsMHhGRSwKKzB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEVGLDB4RkUsMHhGRiwweEJGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RUYsMHhGQSwweEI1LDB4RkYsMHhGRiwweEZGLCAweEY3LDB4RjcsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RkIsCisweEZDLDB4RkYsMHhGRiwweEZFLDB4RkYsMHg3RiwweERGLDB4QkYsIDB4RkYsMHhDQiwweEJGLDB4RjksMHhGRSwweDdGLDB4OUYsMHhFNywKKzB4RjksMHhGRSwweDdGLDB4OTcsMHhFMSwweEZFLDB4NzksMHg5RiwgMHhFNywweEZELDB4RkUsMHg3RiwweERGLDB4RkUsMHgzNywweEZGLAorMHhGQiwweERFLDB4REUsMHhCRCwweEVGLDB4RjMsMHhGRSwweEZCLCAweEFGLDB4RUIsMHhGRSwweEZGLDB4RkYsMHhDRiwweEZGLDB4RkUsCisweEZGLDB4QkYsMHhGRiwweDhGLDB4RkYsMHhFRiwweEZCLDB4RkUsIDB4RkYsMHhCRiwweEU3LDB4RjksMHg1RSwweDdGLDB4RUYsMHhGQiwKKzB4REEsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhGRCwgMHgxRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLAorMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RjcsMHhGQiwweDdGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHgzRiwweEZGLDB4QkYsCisweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweDdCLDB4N0YsIDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEI1LDB4RUYsMHhGQiwKKzB4QkYsMHhGQSwweDdGLDB4RkMsMHhGRiwweDNGLDB4Q0YsMHhGMywgMHhGQywweEZGLDB4M0YsMHhDRiwweEJDLDB4RkYsMHgzRiwweEVGLAorMHhGMywweEZDLDB4RkUsMHgzRiwweENGLDB4RkYsMHhFRSwweEVGLCAweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwweDZBLDB4RDcsCisweEI3LDB4RkIsMHhGOCwweEZGLDB4QjcsMHhFRiwweEJBLDB4RkUsIDB4RkYsMHhCRiwweDdGLDB4RTksMHhGRiwweEY5LDB4N0UsMHg1RiwKKzB4OTcsMHhFNSwweEY5LDB4RkUsMHg3RiwweEJGLDB4RjksMHg3RSwgMHg1RiwweDlGLDB4RTUsMHhGQiwweEZFLDB4NUYsMHhCNywweEZGLAorMHhBMywweEZGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LCAweEZELDB4RkYsMHg1RSwweEY3LDB4N0QsMHhGRiwweDc3LDB4REYsCisweEY3LDB4RkQsMHhGRiwweDdGLDB4RkYsMHhENywweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweERGLDB4RkIsMHg3RiwKKzB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRSwweEZCLDB4RkYsMHhGRiwgMHhCRiwweEZFLDB4OEYsMHhGRiwweERGLDB4RjcsMHhGRCwweEZELAorMHg3RiwweERGLDB4RjcsMHhGRCwweDNFLDB4REYsMHhGNSwweEJELCAweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGNywweEZGLDB4OUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRCwweEZGLDB4QkUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkQsMHgzRiwweEZGLDB4REYsMHhGNywgMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwweENGLAorMHg3NywweEZDLDB4RkYsMHg1RiwweERGLDB4RjcsMHhGRCwweEZGLCAweEY0LDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEVFLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhFRCwweEZCLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RTksMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhEMywweEZGLDB4RkYsCisweEJGLDB4M0YsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RjMsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGNywgMHhGRiwweEZGLDB4RkYsMHhGRiwweDE3LDB4RkYsMHhGRiwweEZGLAorMHhERiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweERGLDB4REYsMHhGRiwweEZELDB4RkYsMHhGRiwweERGLDB4RjcsCisweEZGLDB4NEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRCwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4OUYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLCAweEZGLDB4RkYsMHg3QSwweDNGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMiwKKzB4N0YsMHhGRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGOCwgMHhGRSwweEZGLDB4QkYsMHhGQiwweEZFLDB4RkYsMHg4RiwweEVDLAorMHhGQiwweEZFLDB4RkYsMHhCRiwweEY4LDB4RjcsMHhGRSwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZFLDB4RkQsMHhCRiwweENGLDB4RUMsCisweEZGLDB4M0YsMHhFRiwweERCLDB4RjgsMHhGRiwweEJGLDB4Q0YsIDB4RkYsMHhGOSwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkIsMHhGRiwKKzB4RkYsMHhGRiwweEVGLDB4RkIsMHhERiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsMHhCQiwweEZGLAorMHhFRiwweEZCLDB4RkUsMHhFRiwweEJGLDB4RUUsMHhFQiwweEZCLCAweEZFLDB4RkYsMHhFRiwweEZFLDB4RUUsMHhCRiwweEZFLDB4RUIsCisweEZGLDB4RUYsMHhGRiwweDE3LDB4RkYsMHg3RSwweEVCLDB4QkIsIDB4RkUsMHhCRiwweEJFLDB4RkIsMHhFRiwweDVCLDB4RjcsMHhCRCwKKzB4RkIsMHhDRiwweEJGLDB4QkYsMHhCQiwweEZCLDB4N0UsMHhDQywgMHhFRiwweEZGCisKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYyBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYwpAQCAtMCwwICsxLDg3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogICAgICBkYWJ1c2IuYyAgLS0gIGRhYiB1c2IgZHJpdmVyLgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5ICBEZXRpIEZsaWVnbCAoZGV0aUBmbGllZ2wuZGUpCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKgorICogICRJZDogZGFidXNiLmMsdiAxLjU0IDIwMDAvMDcvMjQgMjE6Mzk6MzkgZGV0aSBFeHAgJAorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSAiZGFidXNiLmgiCisjaW5jbHVkZSAiZGFiZmlybXdhcmUuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNTQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkRldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkRBQi1VU0IgSW50ZXJmYWNlIERyaXZlciBmb3IgTGludXggKGMpMTk5OSIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCisjZGVmaW5lIE5SREFCVVNCIDI1NgorI2Vsc2UKKyNkZWZpbmUgTlJEQUJVU0IgNAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBkYWJ1c2JfdCBkYWJ1c2JbTlJEQUJVU0JdOworc3RhdGljIGludCBidWZmZXJzID0gMjU2Oworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRhYnVzYl9kcml2ZXI7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZGFidXNiX2FkZF9idWZfdGFpbCAocGRhYnVzYl90IHMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwgc3RydWN0IGxpc3RfaGVhZCAqc3JjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZzLT5sb2NrLCBmbGFncyk7CisKKwlpZiAobGlzdF9lbXB0eSAoc3JjKSkgeworCQkvLyBubyBlbGVtZW50cyBpbiBzb3VyY2UgYnVmZmVyCisJCXJldCA9IC0xOworCQlnb3RvIGVycjsKKwl9CisJdG1wID0gc3JjLT5uZXh0OworCWxpc3RfbW92ZV90YWlsICh0bXAsIGRzdCk7CisKKyAgZXJyOglzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIERFQlVHIAorc3RhdGljIHZvaWQgZHVtcF91cmIgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlkYmcoInVyYiAgICAgICAgICAgICAgICAgICA6JXAiLCB1cmIpOworCWRiZygiZGV2ICAgICAgICAgICAgICAgICAgIDolcCIsIHVyYi0+ZGV2KTsKKwlkYmcoInBpcGUgICAgICAgICAgICAgICAgICA6JTA4WCIsIHVyYi0+cGlwZSk7CisJZGJnKCJzdGF0dXMgICAgICAgICAgICAgICAgOiVkIiwgdXJiLT5zdGF0dXMpOworCWRiZygidHJhbnNmZXJfZmxhZ3MgICAgICAgIDolMDhYIiwgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJZGJnKCJ0cmFuc2Zlcl9idWZmZXIgICAgICAgOiVwIiwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWRiZygidHJhbnNmZXJfYnVmZmVyX2xlbmd0aDolZCIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJZGJnKCJhY3R1YWxfbGVuZ3RoICAgICAgICAgOiVkIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkYmcoInNldHVwX3BhY2tldCAgICAgICAgICA6JXAiLCB1cmItPnNldHVwX3BhY2tldCk7CisJZGJnKCJzdGFydF9mcmFtZSAgICAgICAgICAgOiVkIiwgdXJiLT5zdGFydF9mcmFtZSk7CisJZGJnKCJudW1iZXJfb2ZfcGFja2V0cyAgICAgOiVkIiwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJZGJnKCJpbnRlcnZhbCAgICAgICAgICAgICAgOiVkIiwgdXJiLT5pbnRlcnZhbCk7CisJZGJnKCJlcnJvcl9jb3VudCAgICAgICAgICAgOiVkIiwgdXJiLT5lcnJvcl9jb3VudCk7CisJZGJnKCJjb250ZXh0ICAgICAgICAgICAgICAgOiVwIiwgdXJiLT5jb250ZXh0KTsKKwlkYmcoImNvbXBsZXRlICAgICAgICAgICAgICA6JXAiLCB1cmItPmNvbXBsZXRlKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgZGFidXNiX2NhbmNlbF9xdWV1ZSAocGRhYnVzYl90IHMsIHN0cnVjdCBsaXN0X2hlYWQgKnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlwYnVmZl90IGI7CisKKwlkYmcoImRhYnVzYl9jYW5jZWxfcXVldWUiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcy0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShiLCBxLCBidWZmX2xpc3QpIHsKKyNpZmRlZiBERUJVRworCQlkdW1wX3VyYihiLT5wdXJiKTsKKyNlbmRpZgorCQl1c2JfdW5saW5rX3VyYiAoYi0+cHVyYik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfZnJlZV9xdWV1ZSAoc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlwYnVmZl90IGI7CisKKwlkYmcoImRhYnVzYl9mcmVlX3F1ZXVlIik7CisJZm9yIChwID0gcS0+bmV4dDsgcCAhPSBxOykgeworCQliID0gbGlzdF9lbnRyeSAocCwgYnVmZl90LCBidWZmX2xpc3QpOworCisjaWZkZWYgREVCVUcgCisJCWR1bXBfdXJiKGItPnB1cmIpOworI2VuZGlmCisJCWlmIChiLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQlrZnJlZSAoYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX2ZyZWVfdXJiKGItPnB1cmIpOworCQl0bXAgPSBwLT5uZXh0OworCQlsaXN0X2RlbCAocCk7CisJCWtmcmVlIChiKTsKKwkJcCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGRhYnVzYl9mcmVlX2J1ZmZlcnMgKHBkYWJ1c2JfdCBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZGJnKCJkYWJ1c2JfZnJlZV9idWZmZXJzIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOworCisJZGFidXNiX2ZyZWVfcXVldWUgKCZzLT5mcmVlX2J1ZmZfbGlzdCk7CisJZGFidXNiX2ZyZWVfcXVldWUgKCZzLT5yZWNfYnVmZl9saXN0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKworCXMtPmdvdF9tZW0gPSAwOworCXJldHVybiAwOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGRhYnVzYl9pc29fY29tcGxldGUgKHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBidWZmX3QgYiA9IHB1cmItPmNvbnRleHQ7CisJcGRhYnVzYl90IHMgPSBiLT5zOworCWludCBpOworCWludCBsZW47CisJaW50IGRzdCA9IDA7CisJdm9pZCAqYnVmID0gcHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJZGJnKCJkYWJ1c2JfaXNvX2NvbXBsZXRlIik7CisKKwkvLyBwcm9jZXNzIGlmIFVSQiB3YXMgbm90IGtpbGxlZAorCWlmIChwdXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgeworCQl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSAocHVyYi0+ZGV2LCBfREFCVVNCX0lTT1BJUEUpOworCQlpbnQgcGlwZXNpemUgPSB1c2JfbWF4cGFja2V0IChwdXJiLT5kZXYsIHBpcGUsIHVzYl9waXBlb3V0IChwaXBlKSk7CisJCWZvciAoaSA9IDA7IGkgPCBwdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKQorCQkJaWYgKCFwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJCQlsZW4gPSBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQkJCWlmIChsZW4gPD0gcGlwZXNpemUpIHsKKwkJCQkJbWVtY3B5IChidWYgKyBkc3QsIGJ1ZiArIHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwgbGVuKTsKKwkJCQkJZHN0ICs9IGxlbjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3YXJuKCJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBjb3JydXB0ZWQgcGFja2V0IHN0YXR1czogJWQiLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCisJCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0ICgmcy0+cGVuZGluZ19pbykgJiYgIXMtPnJlbW92ZV9wZW5kaW5nICYmIHMtPnN0YXRlICE9IF9zdG9wcGVkKSB7CisJCXMtPm92ZXJydW5zKys7CisJCWVycigib3ZlcnJ1biAoJWQpIiwgcy0+b3ZlcnJ1bnMpOworCX0KKwl3YWtlX3VwICgmcy0+d2FpdCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfYWxsb2NfYnVmZmVycyAocGRhYnVzYl90IHMpCit7CisJaW50IGJ1ZmZlcnMgPSAwOworCXBidWZmX3QgYjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSAocy0+dXNiZGV2LCBfREFCVVNCX0lTT1BJUEUpOworCWludCBwaXBlc2l6ZSA9IHVzYl9tYXhwYWNrZXQgKHMtPnVzYmRldiwgcGlwZSwgdXNiX3BpcGVvdXQgKHBpcGUpKTsKKwlpbnQgcGFja2V0cyA9IF9JU09QSVBFU0laRSAvIHBpcGVzaXplOworCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcGFja2V0cyAqIHBpcGVzaXplOworCWludCBpOworCisJZGJnKCJkYWJ1c2JfYWxsb2NfYnVmZmVycyBwaXBlc2l6ZTolZCBwYWNrZXRzOiVkIHRyYW5zZmVyX2J1ZmZlcl9sZW46JWQiLAorCQkgcGlwZXNpemUsIHBhY2tldHMsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJd2hpbGUgKGJ1ZmZlcnMgPCAocy0+dG90YWxfYnVmZmVyX3NpemUgPDwgMTApKSB7CisJCWIgPSAocGJ1ZmZfdCkga21hbGxvYyAoc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiKSB7CisJCQllcnIoImttYWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CisJCQlnb3RvIGVycjsKKwkJfQorCQltZW1zZXQgKGIsIDAsIHNpemVvZiAoYnVmZl90KSk7CisJCWItPnMgPSBzOworCQliLT5wdXJiID0gdXNiX2FsbG9jX3VyYihwYWNrZXRzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiLT5wdXJiKSB7CisJCQllcnIoInVzYl9hbGxvY191cmIgPT0gTlVMTCIpOworCQkJa2ZyZWUgKGIpOworCQkJZ290byBlcnI7CisJCX0KKworCQliLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jICh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWtmcmVlIChiLT5wdXJiKTsKKwkJCWtmcmVlIChiKTsKKwkJCWVycigia21hbGxvYyglZCk9PU5VTEwiLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCWItPnB1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gcGFja2V0czsKKwkJYi0+cHVyYi0+Y29tcGxldGUgPSBkYWJ1c2JfaXNvX2NvbXBsZXRlOworCQliLT5wdXJiLT5jb250ZXh0ID0gYjsKKwkJYi0+cHVyYi0+ZGV2ID0gcy0+dXNiZGV2OworCQliLT5wdXJiLT5waXBlID0gcGlwZTsKKwkJYi0+cHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhY2tldHM7IGkrKykgeworCQkJYi0+cHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gaSAqIHBpcGVzaXplOworCQkJYi0+cHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gcGlwZXNpemU7CisJCX0KKworCQlidWZmZXJzICs9IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCWxpc3RfYWRkX3RhaWwgKCZiLT5idWZmX2xpc3QsICZzLT5mcmVlX2J1ZmZfbGlzdCk7CisJfQorCXMtPmdvdF9tZW0gPSBidWZmZXJzOworCisJcmV0dXJuIDA7CisKKwllcnI6CisJZGFidXNiX2ZyZWVfYnVmZmVycyAocyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfYnVsayAocGRhYnVzYl90IHMsIHBidWxrX3RyYW5zZmVyX3QgcGIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlpbnQgYWN0dWFsX2xlbmd0aDsKKworCWRiZygiZGFidXNiX2J1bGsiKTsKKworCWlmICghcGItPnBpcGUpCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHMtPnVzYmRldiwgMik7CisJZWxzZQorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlIChzLT51c2JkZXYsIDIpOworCisJcmV0PXVzYl9idWxrX21zZyhzLT51c2JkZXYsIHBpcGUsIHBiLT5kYXRhLCBwYi0+c2l6ZSwgJmFjdHVhbF9sZW5ndGgsIDEwMCk7CisJaWYocmV0PDApIHsKKwkJZXJyKCJkYWJ1c2I6IHVzYl9idWxrX21zZyBmYWlsZWQoJWQpIixyZXQpOworCisJCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKKwkJCWVycigic2V0X2ludGVyZmFjZSBmYWlsZWQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwl9CisJCisJaWYoIHJldCA9PSAtRVBJUEUgKSB7CisJCXdhcm4oIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLiIpOworCQlpZih1c2JfY2xlYXJfaGFsdChzLT51c2JkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSkpKQorCQkJZXJyKCJyZXF1ZXN0IGZhaWxlZCIpOworCX0KKworCXBiLT5zaXplID0gYWN0dWFsX2xlbmd0aDsKKwlyZXR1cm4gcmV0OworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl93cml0ZW1lbSAocGRhYnVzYl90IHMsIGludCBwb3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWVycigiZGFidXNiX3dyaXRlbWVtOiBrbWFsbG9jKCVkKSBmYWlsZWQuIiwgbGVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGxlbik7CisKKwlyZXQ9dXNiX2NvbnRyb2xfbXNnKHMtPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKCBzLT51c2JkZXYsIDAgKSwgMHhhMCwgMHg0MCwgcG9zLCAwLCB0cmFuc2Zlcl9idWZmZXIsIGxlbiwgMzAwKTsKKworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiByZXQ7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgZGFidXNiXzgwNTFfcmVzZXQgKHBkYWJ1c2JfdCBzLCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKK3sKKwlkYmcoImRhYnVzYl84MDUxX3Jlc2V0OiAlZCIscmVzZXRfYml0KTsKKwlyZXR1cm4gZGFidXNiX3dyaXRlbWVtIChzLCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEpOworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl9sb2FkbWVtIChwZGFidXNiX3QgcywgY29uc3QgY2hhciAqZm5hbWUpCit7CisJaW50IHJldDsKKwlQSU5URUxfSEVYX1JFQ09SRCBwdHIgPSBmaXJtd2FyZTsKKworCWRiZygiRW50ZXIgZGFidXNiX2xvYWRtZW0gKGludGVybmFsKSIpOworCQorCXJldCA9IGRhYnVzYl84MDUxX3Jlc2V0IChzLCAxKTsKKwl3aGlsZSAocHRyLT5UeXBlID09IDApIHsKKworCQlkYmcoImRhYnVzYl93cml0ZW1lbTogJTA0WCAlcCAlZCkiLCBwdHItPkFkZHJlc3MsIHB0ci0+RGF0YSwgcHRyLT5MZW5ndGgpOworCisJCXJldCA9IGRhYnVzYl93cml0ZW1lbSAocywgcHRyLT5BZGRyZXNzLCBwdHItPkRhdGEsIHB0ci0+TGVuZ3RoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycigiZGFidXNiX3dyaXRlbWVtIGZhaWxlZCAoJWQgJTA0WCAlcCAlZCkiLCByZXQsIHB0ci0+QWRkcmVzcywgcHRyLT5EYXRhLCBwdHItPkxlbmd0aCk7CisJCQlicmVhazsKKwkJfQorCQlwdHIrKzsKKwl9CisJcmV0ID0gZGFidXNiXzgwNTFfcmVzZXQgKHMsIDApOworCisJZGJnKCJkYWJ1c2JfbG9hZG1lbTogZXhpdCIpOworCisJcmV0dXJuIHJldDsKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfZnBnYV9jbGVhciAocGRhYnVzYl90IHMsIHBidWxrX3RyYW5zZmVyX3QgYikKK3sKKwliLT5zaXplID0gNDsKKwliLT5kYXRhWzBdID0gMHgyYTsKKwliLT5kYXRhWzFdID0gMDsKKwliLT5kYXRhWzJdID0gMDsKKwliLT5kYXRhWzNdID0gMDsKKworCWRiZygiZGFidXNiX2ZwZ2FfY2xlYXIiKTsKKworCXJldHVybiBkYWJ1c2JfYnVsayAocywgYik7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgZGFidXNiX2ZwZ2FfaW5pdCAocGRhYnVzYl90IHMsIHBidWxrX3RyYW5zZmVyX3QgYikKK3sKKwliLT5zaXplID0gNDsKKwliLT5kYXRhWzBdID0gMHgyYzsKKwliLT5kYXRhWzFdID0gMDsKKwliLT5kYXRhWzJdID0gMDsKKwliLT5kYXRhWzNdID0gMDsKKworCWRiZygiZGFidXNiX2ZwZ2FfaW5pdCIpOworCisJcmV0dXJuIGRhYnVzYl9idWxrIChzLCBiKTsKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfZnBnYV9kb3dubG9hZCAocGRhYnVzYl90IHMsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworCXBidWxrX3RyYW5zZmVyX3QgYiA9IGttYWxsb2MgKHNpemVvZiAoYnVsa190cmFuc2Zlcl90KSwgR0ZQX0tFUk5FTCk7CisJdW5zaWduZWQgaW50IGJsZW4sIG47CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBiaXRzdHJlYW07CisKKwlkYmcoIkVudGVyIGRhYnVzYl9mcGdhX2Rvd25sb2FkIChpbnRlcm5hbCkiKTsKKworCWlmICghYikgeworCQllcnIoImttYWxsb2Moc2l6ZW9mKGJ1bGtfdHJhbnNmZXJfdCkpPT1OVUxMIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWItPnBpcGUgPSAxOworCXJldCA9IGRhYnVzYl9mcGdhX2NsZWFyIChzLCBiKTsKKwltZGVsYXkgKDEwKTsKKwlibGVuID0gYnVmWzczXSArIChidWZbNzJdIDw8IDgpOworCisJZGJnKCJCaXRzdHJlYW0gbGVuOiAlaSIsIGJsZW4pOworCisJYi0+ZGF0YVswXSA9IDB4MmI7CisJYi0+ZGF0YVsxXSA9IDA7CisJYi0+ZGF0YVsyXSA9IDA7CisJYi0+ZGF0YVszXSA9IDYwOworCisJZm9yIChuID0gMDsgbiA8PSBibGVuICsgNjA7IG4gKz0gNjApIHsKKwkJLy8gc29tZSBjY2xrcyBmb3Igc3RhcnR1cAorCQliLT5zaXplID0gNjQ7CisJCW1lbWNweSAoYi0+ZGF0YSArIDQsIGJ1ZiArIDc0ICsgbiwgNjApOworCQlyZXQgPSBkYWJ1c2JfYnVsayAocywgYik7CisJCWlmIChyZXQgPCAwKSB7CisJCQllcnIoImRhYnVzYl9idWxrIGZhaWxlZC4iKTsKKwkJCWJyZWFrOworCQl9CisJCW1kZWxheSAoMSk7CisJfQorCisJcmV0ID0gZGFidXNiX2ZwZ2FfaW5pdCAocywgYik7CisJa2ZyZWUgKGIpOworCisJZGJnKCJleGl0IGRhYnVzYl9mcGdhX2Rvd25sb2FkIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhYnVzYl9zdG9wIChwZGFidXNiX3QgcykKK3sKKwlkYmcoImRhYnVzYl9zdG9wIik7CisKKwlzLT5zdGF0ZSA9IF9zdG9wcGVkOworCWRhYnVzYl9jYW5jZWxfcXVldWUgKHMsICZzLT5yZWNfYnVmZl9saXN0KTsKKworCWRiZygicGVuZGluZ19pbzogJWQiLCBzLT5wZW5kaW5nX2lvLmNvdW50ZXIpOworCisJcy0+cGVuZGluZ19pby5jb3VudGVyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWJ1c2Jfc3RhcnRyZWsgKHBkYWJ1c2JfdCBzKQoreworCWlmICghcy0+Z290X21lbSAmJiBzLT5zdGF0ZSAhPSBfc3RhcnRlZCkgeworCisJCWRiZygiZGFidXNiX3N0YXJ0cmVrIik7CisKKwkJaWYgKGRhYnVzYl9hbGxvY19idWZmZXJzIChzKSA8IDApCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZGFidXNiX3N0b3AgKHMpOworCQlzLT5zdGF0ZSA9IF9zdGFydGVkOworCQlzLT5yZWFkcHRyID0gMDsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkgKCZzLT5mcmVlX2J1ZmZfbGlzdCkpIHsKKwkJcGJ1ZmZfdCBlbmQ7CisJCWludCByZXQ7CisJCQorCXdoaWxlICghZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPnJlY19idWZmX2xpc3QsICZzLT5mcmVlX2J1ZmZfbGlzdCkpIHsKKworCQkJZGJnKCJzdWJtaXR0aW5nOiBlbmQ6JXAgcy0+cmVjX2J1ZmZfbGlzdDolcCIsIHMtPnJlY19idWZmX2xpc3QucHJldiwgJnMtPnJlY19idWZmX2xpc3QpOworCisJCQllbmQgPSBsaXN0X2VudHJ5IChzLT5yZWNfYnVmZl9saXN0LnByZXYsIGJ1ZmZfdCwgYnVmZl9saXN0KTsKKworCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKGVuZC0+cHVyYiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmV0KSB7CisJCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZCIsIHJldCk7CisJCQkJaWYgKGRhYnVzYl9hZGRfYnVmX3RhaWwgKHMsICZzLT5mcmVlX2J1ZmZfbGlzdCwgJnMtPnJlY19idWZmX2xpc3QpKQorCQkJCQllcnIoInN0YXJ0cmVrOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZCIpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJCWF0b21pY19pbmMgKCZzLT5wZW5kaW5nX2lvKTsKKwkJfQorCQlkYmcoInBlbmRpbmdfaW86ICVkIixzLT5wZW5kaW5nX2lvLmNvdW50ZXIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkYWJ1c2JfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIHJldCA9IDA7CisJaW50IHJlbTsKKwlpbnQgY250OworCXBidWZmX3QgYjsKKwlzdHJ1Y3QgdXJiICpwdXJiID0gTlVMTDsKKworCWRiZygiZGFidXNiX3JlYWQiKTsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpCisJCXJldHVybiAtRUlPOworCisKKwlpZiAoIXMtPnVzYmRldikKKwkJcmV0dXJuIC1FSU87CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWRhYnVzYl9zdGFydHJlayAocyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZzLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKGxpc3RfZW1wdHkgKCZzLT5yZWNfYnVmZl9saXN0KSkgeworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisKKwkJCWVycigiZXJyb3I6IHJlY19idWZfbGlzdCBpcyBlbXB0eSIpOworCQkJZ290byBlcnI7CisJCX0KKwkJCisJCWIgPSBsaXN0X2VudHJ5IChzLT5yZWNfYnVmZl9saXN0Lm5leHQsIGJ1ZmZfdCwgYnVmZl9saXN0KTsKKwkJcHVyYiA9IGItPnB1cmI7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCisJCWlmIChwdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCQkvLyByZXR1cm4gbm9uYmxvY2tpbmcKKwkJCSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24gKCZzLT53YWl0KTsKKworCQkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlICgmcy0+bG9jaywgZmxhZ3MpOworCisJCQlpZiAobGlzdF9lbXB0eSAoJnMtPnJlY19idWZmX2xpc3QpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCQkJCWVycigiZXJyb3I6IHN0aWxsIG5vIGJ1ZmZlciBhdmFpbGFibGUuIik7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisJCQlzLT5yZWFkcHRyID0gMDsKKwkJfQorCQlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJlbSA9IHB1cmItPmFjdHVhbF9sZW5ndGggLSBzLT5yZWFkcHRyOwkJLy8gc2V0IHJlbWFpbmluZyBieXRlcyB0byBjb3B5CisKKwkJaWYgKGNvdW50ID49IHJlbSkKKwkJCWNudCA9IHJlbTsKKwkJZWxzZQorCQkJY250ID0gY291bnQ7CisKKwkJZGJnKCJjb3B5X3RvX3VzZXI6JXAgJXAgJWQiLGJ1ZiwgcHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgcy0+cmVhZHB0ciwgY250KTsKKworCQlpZiAoY29weV90b191c2VyIChidWYsIHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHMtPnJlYWRwdHIsIGNudCkpIHsKKwkJCWVycigicmVhZDogY29weV90b191c2VyIGZhaWxlZCIpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcy0+cmVhZHB0ciArPSBjbnQ7CisJCWNvdW50IC09IGNudDsKKwkJYnVmICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKworCQlpZiAocy0+cmVhZHB0ciA9PSBwdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkvLyBmaW5pc2hlZCwgdGFrZSBuZXh0IGJ1ZmZlcgorCQkJaWYgKGRhYnVzYl9hZGRfYnVmX3RhaWwgKHMsICZzLT5mcmVlX2J1ZmZfbGlzdCwgJnMtPnJlY19idWZmX2xpc3QpKQorCQkJCWVycigicmVhZDogZGFidXNiX2FkZF9idWZfdGFpbCBmYWlsZWQiKTsKKwkJCXMtPnJlYWRwdHIgPSAwOworCQl9CisJfQorICAgICAgZXJyOgkJCS8vdXAoJnMtPm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhYnVzYl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgZGV2bnVtID0gaW1pbm9yKGlub2RlKTsKKwlwZGFidXNiX3QgczsKKworCWlmIChkZXZudW0gPCBEQUJVU0JfTUlOT1IgfHwgZGV2bnVtID49IChEQUJVU0JfTUlOT1IgKyBOUkRBQlVTQikpCisJCXJldHVybiAtRUlPOworCisJcyA9ICZkYWJ1c2JbZGV2bnVtIC0gREFCVVNCX01JTk9SXTsKKworCWRiZygiZGFidXNiX29wZW4iKTsKKwlkb3duICgmcy0+bXV0ZXgpOworCisJd2hpbGUgKCFzLT51c2JkZXYgfHwgcy0+b3BlbmVkKSB7CisJCXVwICgmcy0+bXV0ZXgpOworCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApOworCisJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIHsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWRvd24gKCZzLT5tdXRleCk7CisJfQorCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKKwkJdXAoJnMtPm11dGV4KTsKKwkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcy0+b3BlbmVkID0gMTsKKwl1cCAoJnMtPm11dGV4KTsKKworCWZpbGUtPmZfcG9zID0gMDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGRhYnVzYl9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWRiZygiZGFidXNiX3JlbGVhc2UiKTsKKworCWRvd24gKCZzLT5tdXRleCk7CisJZGFidXNiX3N0b3AgKHMpOworCWRhYnVzYl9mcmVlX2J1ZmZlcnMgKHMpOworCXVwICgmcy0+bXV0ZXgpOworCisJaWYgKCFzLT5yZW1vdmVfcGVuZGluZykgeworCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKQorCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCX0KKwllbHNlCisJCXdha2VfdXAgKCZzLT5yZW1vdmVfb2spOworCisJcy0+b3BlbmVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWJ1c2JfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlwYnVsa190cmFuc2Zlcl90IHBidWxrOworCWludCByZXQgPSAwOworCWludCB2ZXJzaW9uID0gREFCVVNCX1ZFUlNJT047CisKKwlkYmcoImRhYnVzYl9pb2N0bCIpOworCisJaWYgKHMtPnJlbW92ZV9wZW5kaW5nKQorCQlyZXR1cm4gLUVJTzsKKworCWRvd24gKCZzLT5tdXRleCk7CisKKwlpZiAoIXMtPnVzYmRldikgeworCQl1cCAoJnMtPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgSU9DVExfREFCX0JVTEs6CisJCXBidWxrID0gKHBidWxrX3RyYW5zZmVyX3QpIGttYWxsb2MgKHNpemVvZiAoYnVsa190cmFuc2Zlcl90KSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFwYnVsaykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyIChwYnVsaywgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mIChidWxrX3RyYW5zZmVyX3QpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWtmcmVlIChwYnVsayk7CisJCQlicmVhazsKKwkJfQorCisJCXJldD1kYWJ1c2JfYnVsayAocywgcGJ1bGspOworCQlpZihyZXQ9PTApCisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgcGJ1bGssCisJCQkJCSBzaXplb2YoYnVsa190cmFuc2Zlcl90KSkpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJa2ZyZWUgKHBidWxrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RMX0RBQl9PVkVSUlVOUzoKKwkJcmV0ID0gcHV0X3VzZXIgKHMtPm92ZXJydW5zLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfREFCX1ZFUlNJT046CisJCXJldCA9IHB1dF91c2VyICh2ZXJzaW9uLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCXVwICgmcy0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhYnVzYl9mb3BzID0KK3sKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCS5yZWFkID0JCWRhYnVzYl9yZWFkLAorCS5pb2N0bCA9CWRhYnVzYl9pb2N0bCwKKwkub3BlbiA9CQlkYWJ1c2Jfb3BlbiwKKwkucmVsZWFzZSA9CWRhYnVzYl9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGRhYnVzYl9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL2RhYnVzYiVkIiwKKwkuZm9wcyA9CQkmZGFidXNiX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlEQUJVU0JfTUlOT1IsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgcmV0dmFsOworCXBkYWJ1c2JfdCBzOworCisJZGJnKCJkYWJ1c2I6IHByb2JlOiB2ZW5kb3IgaWQgMHgleCwgZGV2aWNlIGlkIDB4JXggaWZudW06JWQiLAorCSAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkgICAgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyAqLworCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSBfREFCVVNCX0lGICYmCisJICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4OTk5OSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKworCisJcyA9ICZkYWJ1c2JbaW50Zi0+bWlub3JdOworCisJZG93biAoJnMtPm11dGV4KTsKKwlzLT5yZW1vdmVfcGVuZGluZyA9IDA7CisJcy0+dXNiZGV2ID0gdXNiZGV2OworCXMtPmRldm51bSA9IGludGYtPm1pbm9yOworCisJaWYgKHVzYl9yZXNldF9jb25maWd1cmF0aW9uICh1c2JkZXYpIDwgMCkgeworCQllcnIoInJlc2V0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIik7CisJCWdvdG8gcmVqZWN0OworCX0KKwlpZiAobGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHgyMTMxKSB7CisJCWRhYnVzYl9sb2FkbWVtIChzLCBOVUxMKTsKKwkJZ290byByZWplY3Q7CisJfQorCWVsc2UgeworCQlkYWJ1c2JfZnBnYV9kb3dubG9hZCAocywgTlVMTCk7CisKKwkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDApIDwgMCkgeworCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZ290byByZWplY3Q7CisJCX0KKwl9CisJZGJnKCJib3VuZCB0byBpbnRlcmZhY2U6ICVkIiwgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzKTsKKwl1cCAoJnMtPm11dGV4KTsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmRhYnVzYl9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7CisKKyAgICAgIHJlamVjdDoKKwl1cCAoJnMtPm11dGV4KTsKKwlzLT51c2JkZXYgPSBOVUxMOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBkYWJ1c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJd2FpdF9xdWV1ZV90IF9fd2FpdDsKKwlwZGFidXNiX3QgcyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJZGJnKCJkYWJ1c2JfZGlzY29ubmVjdCIpOworCQorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOworCQorCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChzKSB7CisJCXVzYl9kZXJlZ2lzdGVyX2RldiAoaW50ZiwgJmRhYnVzYl9jbGFzcyk7CisJCXMtPnJlbW92ZV9wZW5kaW5nID0gMTsKKwkJd2FrZV91cCAoJnMtPndhaXQpOworCQlhZGRfd2FpdF9xdWV1ZSgmcy0+cmVtb3ZlX29rLCAmX193YWl0KTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAocy0+c3RhdGUgPT0gX3N0YXJ0ZWQpCisJCQlzY2hlZHVsZSgpOworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPnJlbW92ZV9vaywgJl9fd2FpdCk7CisJCQorCQlzLT51c2JkZXYgPSBOVUxMOworCQlzLT5vdmVycnVucyA9IDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGFidXNiX2lkcyBbXSA9IHsKKwkvLyB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDIxMzEpIH0sCS8qIEFuMjEzMSBjaGlwLCBubyBib290IFJPTSAqLworCXsgVVNCX0RFVklDRSgweDA1NDcsIDB4OTk5OSkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkYWJ1c2JfaWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRhYnVzYl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImRhYnVzYiIsCisJLnByb2JlID0JZGFidXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JZGFidXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JZGFidXNiX2lkcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IF9faW5pdCBkYWJ1c2JfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIHU7CisKKwkvKiBpbml0aWFsaXplIHN0cnVjdCAqLworCWZvciAodSA9IDA7IHUgPCBOUkRBQlVTQjsgdSsrKSB7CisJCXBkYWJ1c2JfdCBzID0gJmRhYnVzYlt1XTsKKwkJbWVtc2V0IChzLCAwLCBzaXplb2YgKGRhYnVzYl90KSk7CisJCWluaXRfTVVURVggKCZzLT5tdXRleCk7CisJCXMtPnVzYmRldiA9IE5VTEw7CisJCXMtPnRvdGFsX2J1ZmZlcl9zaXplID0gYnVmZmVyczsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCAoJnMtPndhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmcy0+cmVtb3ZlX29rKTsKKwkJc3Bpbl9sb2NrX2luaXQgKCZzLT5sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQgKCZzLT5mcmVlX2J1ZmZfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEICgmcy0+cmVjX2J1ZmZfbGlzdCk7CisJfQorCisJLyogcmVnaXN0ZXIgbWlzYyBkZXZpY2UgKi8KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRhYnVzYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJZGJnKCJkYWJ1c2JfaW5pdDogZHJpdmVyIHJlZ2lzdGVyZWQiKTsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYWJ1c2JfY2xlYW51cCAodm9pZCkKK3sKKwlkYmcoImRhYnVzYl9jbGVhbnVwIik7CisKKwl1c2JfZGVyZWdpc3RlciAoJmRhYnVzYl9kcml2ZXIpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oYnVmZmVycywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKGJ1ZmZlcnMsICJOdW1iZXIgb2YgYnVmZmVycyAoZGVmYXVsdD0yNTYpIik7CisKK21vZHVsZV9pbml0IChkYWJ1c2JfaW5pdCk7Cittb2R1bGVfZXhpdCAoZGFidXNiX2NsZWFudXApOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5oIGIvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiNjY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5oCkBAIC0wLDAgKzEsODUgQEAKKyNkZWZpbmUgX0JVTEtfREFUQV9MRU4gNjQKK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgY2hhciBkYXRhW19CVUxLX0RBVEFfTEVOXTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKK31idWxrX3RyYW5zZmVyX3QsKnBidWxrX3RyYW5zZmVyX3Q7CisKKyNkZWZpbmUgREFCVVNCX01JTk9SIDI0MAkJLyogc29tZSB1bmFzc2lnbmVkIFVTQiBtaW5vciAqLworI2RlZmluZSBEQUJVU0JfVkVSU0lPTiAweDEwMDAKKyNkZWZpbmUgSU9DVExfREFCX0JVTEsgICAgICAgICAgICAgIF9JT1dSKCdkJywgMHgzMCwgYnVsa190cmFuc2Zlcl90KQorI2RlZmluZSBJT0NUTF9EQUJfT1ZFUlJVTlMJICAgIF9JT1IoJ2QnLCAgMHgxNSwgaW50KQorI2RlZmluZSBJT0NUTF9EQUJfVkVSU0lPTiAgICAgICAgICAgX0lPUignZCcsIDB4M2YsIGludCkgCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3R5cGVkZWYgZW51bSB7IF9zdG9wcGVkPTAsIF9zdGFydGVkIH0gZHJpdmVyX3N0YXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJc3RydWN0IHNlbWFwaG9yZSBtdXRleDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVtb3ZlX29rOworCXNwaW5sb2NrX3QgbG9jazsKKwlhdG9taWNfdCBwZW5kaW5nX2lvOworCWRyaXZlcl9zdGF0ZV90IHN0YXRlOworCWludCByZW1vdmVfcGVuZGluZzsKKwlpbnQgZ290X21lbTsKKwlpbnQgdG90YWxfYnVmZmVyX3NpemU7CisJdW5zaWduZWQgaW50IG92ZXJydW5zOworCWludCByZWFkcHRyOworCWludCBvcGVuZWQ7CisJaW50IGRldm51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfYnVmZl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcmVjX2J1ZmZfbGlzdDsKK30gZGFidXNiX3QsKnBkYWJ1c2JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisJcGRhYnVzYl90IHM7CisJc3RydWN0IHVyYiAqcHVyYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZfbGlzdDsKK30gYnVmZl90LCpwYnVmZl90OworCit0eXBlZGVmIHN0cnVjdAoreworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9IGJ1bGtfY29tcGxldGlvbl9jb250ZXh0X3QsICpwYnVsa19jb21wbGV0aW9uX2NvbnRleHRfdDsKKworCisjZGVmaW5lIF9EQUJVU0JfSUYgMgorI2RlZmluZSBfREFCVVNCX0lTT1BJUEUgMHgwOQorI2RlZmluZSBfSVNPUElQRVNJWkUJMTYzODQKKworI2RlZmluZSBfQlVMS19EQVRBX0xFTiA2NAorLy8gVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZSBmb3IgQW5jaG9yIFVwbG9hZC9Eb3dubG9hZAorLy8gVGhpcyBvbmUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUKKyNkZWZpbmUgQU5DSE9SX0xPQURfSU5URVJOQUwgIDB4QTAKKworLy8gRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQKKyNkZWZpbmUgQ1BVQ1NfUkVHICAgIDB4N0Y5MgorI2RlZmluZSBfVE9UQUxfQlVGRkVSUyAzODQKKworI2RlZmluZSBNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEggMTYKKworI2lmbmRlZiBfQllURV9ERUZJTkVECisjZGVmaW5lIF9CWVRFX0RFRklORUQKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBCWVRFOworI2VuZGlmIC8vICFfQllURV9ERUZJTkVECisKKyNpZm5kZWYgX1dPUkRfREVGSU5FRAorI2RlZmluZSBfV09SRF9ERUZJTkVECit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdPUkQ7CisjZW5kaWYgLy8gIV9XT1JEX0RFRklORUQKKwordHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKK3sKKyAgIEJZVEUgIExlbmd0aDsKKyAgIFdPUkQgIEFkZHJlc3M7CisgICBCWVRFICBUeXBlOworICAgQllURSAgRGF0YVtNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEhdOworfSBJTlRFTF9IRVhfUkVDT1JELCAqUElOVEVMX0hFWF9SRUNPUkQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jIGIvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDNmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMKQEAgLTAsMCArMSw0MjkgQEAKKy8qIEEgZHJpdmVyIGZvciB0aGUgRC1MaW5rIERTQi1SMTAwIFVTQiByYWRpby4gIFRoZSBSMTAwIHBsdWdzCisgaW50byBib3RoIHRoZSBVU0IgYW5kIGFuIGFuYWxvZyBhdWRpbyBpbnB1dCwgc28gdGhpcyB0aGluZworIG9ubHkgZGVhbHMgd2l0aCBpbml0aWFsaXNhdGlvbiBhbmQgZnJlcXVlbmN5IHNldHRpbmcsIHRoZQorIGF1ZGlvIGRhdGEgaGFzIHRvIGJlIGhhbmRsZWQgYnkgYSBzb3VuZCBkcml2ZXIuCisKKyBNYWpvciBpc3N1ZTogSSBjYW4ndCBmaW5kIG91dCB3aGVyZSB0aGUgZGV2aWNlIHJlcG9ydHMgdGhlIHNpZ25hbAorIHN0cmVuZ3RoLCBhbmQgaW5kZWVkIHRoZSB3aW5kb3dzIHNvZnR3YXJlIGFwcGVhcmFudGx5IGp1c3QgbG9va3MKKyBhdCB0aGUgc3RlcmVvIGluZGljYXRvciBhcyB3ZWxsLiAgU28sIHNjYW5uaW5nIHdpbGwgb25seSBmaW5kCisgc3RlcmVvIHN0YXRpb25zLiAgU2FkLCBidXQgSSBjYW4ndCBoZWxwIGl0LgorCisgQWxzbywgdGhlIHdpbmRvd3MgcHJvZ3JhbSBzZW5kcyBvb2RsZXMgb2YgbWVzc2FnZXMgb3ZlciB0byB0aGUKKyBkZXZpY2UsIGFuZCBJIGNvdWxkbid0IGZpZ3VyZSBvdXQgdGhlaXIgbWVhbmluZy4gIE15IHN1c3BpY2lvbgorIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlIGFueTotKQorCisgWW91IG1pZ2h0IGZpbmQgc29tZSBpbnRlcmVzdGluZyBzdHVmZiBhYm91dCB0aGlzIG1vZHVsZSBhdAorIGh0dHA6Ly91bmltdXQuZnNrLnVuaS1oZWlkZWxiZXJnLmRlL3VuaW11dC9kZW1pL2RzYnIKKworIENvcHlyaWdodCAoYykgMjAwMCBNYXJrdXMgRGVtbGVpdG5lciA8bXNkZW1sZWlAY2wudW5pLWhlaWRlbGJlcmcuZGU+CisKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisgSGlzdG9yeToKKworIFZlcnNpb24gMC40MDoKKyAgTWFya3VzOiBVcGRhdGVzIGZvciAyLjYueCBrZXJuZWxzLCBjb2RlIGxheW91dCBjaGFuZ2VzLCBuYW1lIHNhbml0aXppbmcKKworIFZlcnNpb24gMC4zMDoKKyAJTWFya3VzOiBVcGRhdGVzIGZvciAyLjUueCBrZXJuZWwgYW5kIG1vcmUgSVNPIGNvbXBsaWFudCBzb3VyY2UKKworIFZlcnNpb24gMC4yNToKKyAgICAgICAgUFNMIGFuZCBNYXJrdXM6IENsZWFudXAsIHJhZGlvIG5vdyBkb2Vzbid0IHN0b3Agb24gZGV2aWNlIGNsb3NlCisKKyBWZXJzaW9uIDAuMjQ6CisgCU1hcmt1czogSG9wZSBJIGdvdCB0aGVzZSBzaWxseSBWSURFT19UVU5FUl9MT1cgaXNzdWVzIGZpbmFsbHkKKwlyaWdodC4gIFNvbWUgbWlub3IgY2xlYW51cCwgaW1wcm92ZWQgc3RhbmRhbG9uZSBjb21waWxhdGlvbgorCisgVmVyc2lvbiAwLjIzOgorIAlNYXJrdXM6IFNpZ24gZXh0ZW5zaW9uIGJ1ZyBmaXhlZCBieSBkZWNsYXJpbmcgdHJhbnNmZXJfYnVmZmVyIHVuc2lnbmVkCisKKyBWZXJzaW9uIDAuMjI6CisgCU1hcmt1czogU29tZSAoYnJvd24gYmFnKSBjbGVhbnVwIGluIHdoYXQgVklESU9DU1RVTkVSIHJldHVybnMsIAorCXRoYW5rcyB0byBNaWtlIENveCBmb3IgcG9pbnRpbmcgdGhlIHByb2JsZW0gb3V0LgorCisgVmVyc2lvbiAwLjIxOgorIAlNYXJrdXM6IE1pbm9yIGNsZWFudXAsIHdhcm5pbmdzIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBsYW1lIGF0dGVtcHQKKwl0byBhZGhlcmUgdG8gRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorCisgVmVyc2lvbiAwLjI6IAorIAlCcmFkIEhhcmRzIDxicmFkaEBkeW5hbWl0ZS5jb20uYXU+OiBGaXhlcyB0byBtYWtlIGl0IHdvcmsgYXMgbm9uLW1vZHVsZQorCU1hcmt1czogQ29weXJpZ2h0IGNsYXJpZmljYXRpb24KKworIFZlcnNpb24gMC4wMTogTWFya3VzOiBpbml0aWFsIHJlbGVhc2UKKworKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNDAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmt1cyBEZW1sZWl0bmVyIDxtc2RlbWxlaUB0dWNhbmEuaGFydmFyZC5lZHU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiRC1MaW5rIERTQi1SMTAwIFVTQiBGTSByYWRpbyBkcml2ZXIiCisKKyNkZWZpbmUgRFNCMTAwX1ZFTkRPUiAweDA0YjQKKyNkZWZpbmUgRFNCMTAwX1BST0RVQ1QgMHgxMDAyCisKKy8qIENvbW1hbmRzIHRoZSBkZXZpY2UgYXBwZWFycyB0byB1bmRlcnN0YW5kICovCisjZGVmaW5lIERTQjEwMF9UVU5FIDEKKyNkZWZpbmUgRFNCMTAwX09OT0ZGIDIKKworI2RlZmluZSBUQl9MRU4gMTYKKworLyogRnJlcXVlbmN5IGxpbWl0cyBpbiBNSHogLS0gdGhlc2UgYXJlIEV1cm9wZWFuIHZhbHVlcy4gIEZvciBKYXBhbmVzZQorZGV2aWNlcywgdGhhdCB3b3VsZCBiZSA3NiBhbmQgOTEuICAqLworI2RlZmluZSBGUkVRX01JTiAgODcuNQorI2RlZmluZSBGUkVRX01BWCAxMDguMAorI2RlZmluZSBGUkVRX01VTCAxNjAwMAorCisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB1c2JfZHNicjEwMF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKworc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisvKiBEYXRhIGZvciBvbmUgKHBoeXNpY2FsKSBkZXZpY2UgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2OworCXVuc2lnbmVkIGNoYXIgdHJhbnNmZXJfYnVmZmVyW1RCX0xFTl07CisJaW50IGN1cmZyZXE7CisJaW50IHN0ZXJlbzsKKwlpbnQgdXNlcnM7CisJaW50IHJlbW92ZWQ7Cit9IGRzYnIxMDBfZGV2aWNlOworCisKKy8qIEZpbGUgc3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2RzYnIxMDBfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQl1c2JfZHNicjEwMF9vcGVuLAorCS5yZWxlYXNlID0gICAgIAl1c2JfZHNicjEwMF9jbG9zZSwKKwkuaW9jdGwgPSAgICAgICAgdXNiX2RzYnIxMDBfaW9jdGwsCisJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKK307CisKKy8qIFY0TCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGU9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIkQtTGluayBEU0ItUiAxMDAiLAorCS50eXBlID0JCVZJRF9UWVBFX1RVTkVSLAorCS5oYXJkd2FyZSA9CVZJRF9IQVJEV0FSRV9BWlRFQ0gsCisJLmZvcHMgPSAgICAgICAgICZ1c2JfZHNicjEwMF9mb3BzLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2RzYnIxMDBfZGV2aWNlX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShEU0IxMDBfVkVORE9SLCBEU0IxMDBfUFJPRFVDVCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfZHNicjEwMF9kZXZpY2VfdGFibGUpOworCisvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9kc2JyMTAwX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZHNicjEwMCIsCisJLnByb2JlID0JdXNiX2RzYnIxMDBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfZHNicjEwMF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9kc2JyMTAwX2RldmljZV90YWJsZSwKK307CisKKy8qIExvdy1sZXZlbCBkZXZpY2UgaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCisKKy8qIHN3aXRjaCBvbiByYWRpbyAqLworc3RhdGljIGludCBkc2JyMTAwX3N0YXJ0KGRzYnIxMDBfZGV2aWNlICpyYWRpbykKK3sKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4MDAsIDB4QzcsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAorCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCQlEU0IxMDBfT05PRkYsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkweDAxLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworfQorCisKKy8qIHN3aXRjaCBvZmYgcmFkaW8gKi8KK3N0YXRpYyBpbnQgZHNicjEwMF9zdG9wKGRzYnIxMDBfZGV2aWNlICpyYWRpbykKK3sKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4MTYsIDB4MUMsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAorCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCQlEU0IxMDBfT05PRkYsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkweDAwLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworfQorCisvKiBzZXQgYSBmcmVxdWVuY3ksIGZyZXEgaXMgZGVmaW5lZCBieSB2NGwncyBUVU5FUl9MT1csIGkuZS4gMS8xNnRoIGtIeiAqLworc3RhdGljIGludCBkc2JyMTAwX3NldGZyZXEoZHNicjEwMF9kZXZpY2UgKnJhZGlvLCBpbnQgZnJlcSkKK3sKKwlmcmVxID0gKGZyZXEvMTYqODApLzEwMDArODU2OworCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkJRFNCMTAwX1RVTkUsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkoZnJlcT4+OCkmMHgwMGZmLCBmcmVxJjB4ZmYsIAorCQkJcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwIHx8CisJICAgdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJIAlVU0JfUkVRX0dFVF9TVEFUVVMsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkweDk2LCAweEI3LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDAgfHwKKwl1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCAKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCAgVVNCX0RJUl9JTiwKKwkJCTB4MDAsIDB4MjQsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCkgeworCQlyYWRpby0+c3RlcmVvID0gLTE7CisJCXJldHVybiAtMTsKKwl9CisJcmFkaW8tPnN0ZXJlbyA9ICEgKChyYWRpby0+dHJhbnNmZXJfYnVmZmVyKVswXSYweDAxKTsKKwlyZXR1cm4gKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdOworfQorCisvKiByZXR1cm4gdGhlIGRldmljZSBzdGF0dXMuICBUaGlzIGlzLCBpbiBlZmZlY3QsIGp1c3Qgd2hldGhlciBpdAorc2VlcyBhIHN0ZXJlbyBzaWduYWwgb3Igbm90LiAgUGl0eS4gKi8KK3N0YXRpYyB2b2lkIGRzYnIxMDBfZ2V0c3RhdChkc2JyMTAwX2RldmljZSAqcmFkaW8pCit7CisJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkweDAwICwgMHgyNCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwKQorCQlyYWRpby0+c3RlcmVvID0gLTE7CisJZWxzZQorCQlyYWRpby0+c3RlcmVvID0gISAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlclswXSYweDAxKTsKK30KKworCisvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSBiZWdpbnMgaGVyZSAqLworCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAordXNiIGlmIGl0IGlzICovCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJZHNicjEwMF9kZXZpY2UgKnJhZGlvOworCisJaWYgKCEocmFkaW8gPSBrbWFsbG9jKHNpemVvZihkc2JyMTAwX2RldmljZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCEocmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCkpKSB7CisJCWtmcmVlKHJhZGlvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlLCAKKwkJc2l6ZW9mKGRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUpKTsKKwlyYWRpby0+cmVtb3ZlZCA9IDA7CisJcmFkaW8tPnVzZXJzID0gMDsKKwlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlyYWRpby0+Y3VyZnJlcSA9IEZSRVFfTUlOKkZSRVFfTVVMOworCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywKKwkJcmFkaW9fbnIpKSB7CisJCXdhcm4oIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKKwkJa2ZyZWUocmFkaW8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCByYWRpbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGhhbmRsZSB1bnBsdWdnaW5nIG9mIHRoZSBkZXZpY2UsIHJlbGVhc2UgZGF0YSBzdHJ1Y3R1cmVzCitpZiBub3RoaW5nIGtlZXBzIHVzIGZyb20gZG9pbmcgaXQuICBJZiBzb21ldGhpbmcgaXMgc3RpbGwKK2tlZXBpbmcgdXMgYnVzeSwgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgdjRsIHdpbGwgdGFrZSBjYXJlCitvZiByZWxlYXNpbmcgaXQuICBzdHY2ODAuYyBkb2VzIG5vdCByZWxhc2UgaXRzIHByaXZhdGUKK2RhdGEsIHNvIEkgZG9uJ3QgZG8gdGhpcyBoZXJlIGVpdGhlci4gIENoZWNraW5nIG91dCB0aGUKK2NvZGUgSSdkIGV4cGVjdCBJIGJldHRlciBkaWQgdGhhdCwgYnV0IGlmIHRoZXJlJ3MgYSBtZW1vcnkKK2xlYWsgaGVyZSBpdCdzIHRpbnkgKH41MCBieXRlcyBwZXIgZGlzY29ubmVjdCkgKi8KK3N0YXRpYyB2b2lkIHVzYl9kc2JyMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChyYWRpbykgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOworCQlyYWRpby0+dmlkZW9kZXYgPSBOVUxMOworCQlpZiAocmFkaW8tPnVzZXJzKSB7CisJCQlrZnJlZShyYWRpbyk7CisJCX0gZWxzZSB7CisJCQlyYWRpby0+cmVtb3ZlZCA9IDE7CisJCX0KKwl9Cit9CisKKworLyogVmlkZW8gZm9yIExpbnV4IGludGVyZmFjZSAqLworCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlpZiAoIXJhZGlvKQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaChjbWQpIHsKKwkJY2FzZSBWSURJT0NHQ0FQOiB7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdiA9IGFyZzsKKworCQkJbWVtc2V0KHYsIDAsIHNpemVvZigqdikpOworCQkJdi0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSOworCQkJdi0+Y2hhbm5lbHMgPSAxOworCQkJdi0+YXVkaW9zID0gMTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHVFVORVI6IHsKKwkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKKworCQkJZHNicjEwMF9nZXRzdGF0KHJhZGlvKTsKKwkJCWlmKHYtPnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8gCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2LT5yYW5nZWxvdyA9IEZSRVFfTUlOKkZSRVFfTVVMOworCQkJdi0+cmFuZ2VoaWdoID0gRlJFUV9NQVgqRlJFUV9NVUw7CisJCQl2LT5mbGFncyA9IFZJREVPX1RVTkVSX0xPVzsKKwkJCXYtPm1vZGUgPSBWSURFT19NT0RFX0FVVE87CisJCQl2LT5zaWduYWwgPSByYWRpby0+c3RlcmVvKjB4NzAwMDsKKwkJCQkvKiBEb24ndCBrbm93IGhvdyB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoICovCisJCQl2LT5mbGFncyB8PSBWSURFT19UVU5FUl9TVEVSRU9fT04qcmFkaW8tPnN0ZXJlbzsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRFNCIFItMTAwIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NUVU5FUjogeworCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCisJCQlpZih2LT50dW5lciE9MCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCS8qIE9ubHkgMSB0dW5lciBzbyBubyBzZXR0aW5nIG5lZWRlZCAhICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ0dGUkVROiB7CisJCQlpbnQgKmZyZXEgPSBhcmc7CisKKwkJCWlmIChyYWRpby0+Y3VyZnJlcT09LTEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkqZnJlcSA9IHJhZGlvLT5jdXJmcmVxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NTRlJFUTogeworCQkJaW50ICpmcmVxID0gYXJnOworCisJCQlyYWRpby0+Y3VyZnJlcSA9ICpmcmVxOworCQkJaWYgKGRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpPT0tMSkKKwkJCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHQVVESU86IHsKKwkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKKworCQkJbWVtc2V0KHYsIDAsIHNpemVvZigqdikpOworCQkJdi0+ZmxhZ3MgfD0gVklERU9fQVVESU9fTVVUQUJMRTsKKwkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU87CisJCQl2LT52b2x1bWUgPSAxOworCQkJdi0+c3RlcCA9IDE7CisJCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7CisJCQlyZXR1cm4gMDsJCQkKKwkJfQorCQljYXNlIFZJRElPQ1NBVURJTzogeworCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOworCisJCQlpZiAodi0+YXVkaW8pIAorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHYtPmZsYWdzJlZJREVPX0FVRElPX01VVEUpIHsKKwkJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKT09LTEpCisJCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJfQorCQkJZWxzZQorCQkJCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKT09LTEpCisJCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB1c2JfZHNicjEwMF9kb19pb2N0bCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlyYWRpby0+dXNlcnMgPSAxOworCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKTwwKSB7CisJCXdhcm4oIlJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHkiKTsKKwkJcmFkaW8tPnVzZXJzID0gMDsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCWlmICghcmFkaW8pCisJCXJldHVybiAtRU5PREVWOworCXJhZGlvLT51c2VycyA9IDA7CisJaWYgKHJhZGlvLT5yZW1vdmVkKSB7CisJCWtmcmVlKHJhZGlvKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRzYnIxMDBfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl9kc2JyMTAwX2RyaXZlcik7CisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkc2JyMTAwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX2RzYnIxMDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKGRzYnIxMDBfaW5pdCk7Cittb2R1bGVfZXhpdCAoZHNicjEwMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9pYm1jYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQxZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMKQEAgLTAsMCArMSwzOTMyIEBACisvKgorICogVVNCIElCTSBDLUl0IFZpZGVvIENhbWVyYSBkcml2ZXIKKyAqCisgKiBTdXBwb3J0cyBYaXJsaW5rIEMtSXQgVmlkZW8gQ2FtZXJhLCBJQk0gUEMgQ2FtZXJhLAorICogSUJNIE5ldENhbWVyYSBhbmQgVmVvIFN0aW5ncmF5LgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIGVhcmxpZXIgd29yayBvZjoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgSm9oYW5uZXMgRXJkZmVsdAorICogKEMpIENvcHlyaWdodCAxOTk5IFJhbmR5IER1bmxhcAorICoKKyAqIDUvMjQvMDAgUmVtb3ZlZCBvcHRpb25hbCAoYW5kIHVubmVjZXNzYXJ5KSBsb2NraW5nIG9mIHRoZSBkcml2ZXIgd2hpbGUKKyAqIHRoZSBkZXZpY2UgcmVtYWlucyBwbHVnZ2VkIGluLiBDb3JyZWN0ZWQgcmFjZSBjb25kaXRpb25zIGluIGlibWNhbV9vcGVuCisgKiBhbmQgaWJtY2FtX3Byb2JlKCkgcm91dGluZXMgdXNpbmcgdGhpcyBhcyBhIGd1aWRlbGluZToKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJ1c2J2aWRlby5oIgorCisjZGVmaW5lIElCTUNBTV9WRU5ET1JfSUQJMHgwNTQ1CisjZGVmaW5lIElCTUNBTV9QUk9EVUNUX0lECTB4ODA4MAorI2RlZmluZSBORVRDQU1fUFJPRFVDVF9JRAkweDgwMDIJLyogSUJNIE5ldENhbWVyYSwgY2xvc2UgdG8gbW9kZWwgMiAqLworI2RlZmluZSBWRU9fODAwQ19QUk9EVUNUX0lECTB4ODAwQwkvKiBWZW8gU3RpbmdyYXksIHJlcGFja2FnZWQgTW9kZWwgMiAqLworI2RlZmluZSBWRU9fODAwRF9QUk9EVUNUX0lECTB4ODAwRAkvKiBWZW8gU3RpbmdyYXksIHJlcGFja2FnZWQgTW9kZWwgNCAqLworCisjZGVmaW5lIE1BWF9JQk1DQU0JCTQJLyogSG93IG1hbnkgZGV2aWNlcyB3ZSBhbGxvdyB0byBjb25uZWN0ICovCisjZGVmaW5lIFVTRVNfSUJNQ0FNX1BVVFBJWEVMICAgIDAgICAgICAgLyogMD1GYXN0L29vcHMgMT1TbG93L3NlY3VyZSAqLworCisvKiBIZWFkZXIgc2lnbmF0dXJlcyAqLworCisvKiBNb2RlbCAxIGhlYWRlcjogMDAgRkYgMDAgeHggKi8KKyNkZWZpbmUgSERSU0lHX01PREVMMV8xMjh4OTYJMHgwNgkvKiBVIFkgViBZIC4uLiAqLworI2RlZmluZSBIRFJTSUdfTU9ERUwxXzE3NngxNDQJMHgwZQkvKiBVIFkgViBZIC4uLiAqLworI2RlZmluZSBIRFJTSUdfTU9ERUwxXzM1MngyODgJMHgwMAkvKiBWIFkgVSBZIC4uLiAqLworCisjZGVmaW5lCUlCTUNBTV9NT0RFTF8xCTEJLyogWFZQLTUwMSwgMyBpbnRlcmZhY2VzLCByZXYuIDAuMDIgKi8KKyNkZWZpbmUgSUJNQ0FNX01PREVMXzIJMgkvKiBLU1gtWDk5MDMsIDIgaW50ZXJmYWNlcywgcmV2LiAzLjBhICovCisjZGVmaW5lIElCTUNBTV9NT0RFTF8zCTMJLyogS1NYLVg5OTAyLCAyIGludGVyZmFjZXMsIHJldi4gMy4wMSAqLworI2RlZmluZQlJQk1DQU1fTU9ERUxfNAk0CS8qIElCTSBOZXRDYW1lcmEsIDA1NDUvODAwMi8zLjBhICovCisKKy8qIFZpZGVvIHNpemVzIHN1cHBvcnRlZCAqLworI2RlZmluZQlWSURFT1NJWkVfMTI4eDk2CVZJREVPU0laRSgxMjgsIDk2KQorI2RlZmluZQlWSURFT1NJWkVfMTc2eDE0NAlWSURFT1NJWkUoMTc2LDE0NCkKKyNkZWZpbmUJVklERU9TSVpFXzM1MngyODgJVklERU9TSVpFKDM1MiwyODgpCisjZGVmaW5lCVZJREVPU0laRV8zMjB4MjQwCVZJREVPU0laRSgzMjAsMjQwKQorI2RlZmluZQlWSURFT1NJWkVfMzUyeDI0MAlWSURFT1NJWkUoMzUyLDI0MCkKKyNkZWZpbmUJVklERU9TSVpFXzY0MHg0ODAJVklERU9TSVpFKDY0MCw0ODApCisjZGVmaW5lCVZJREVPU0laRV8xNjB4MTIwCVZJREVPU0laRSgxNjAsMTIwKQorCisvKiBWaWRlbyBzaXplcyBzdXBwb3J0ZWQgKi8KK2VudW0geworCVNJWkVfMTI4eDk2ID0gMCwKKwlTSVpFXzE2MHgxMjAsCisJU0laRV8xNzZ4MTQ0LAorCVNJWkVfMzIweDI0MCwKKwlTSVpFXzM1MngyNDAsCisJU0laRV8zNTJ4Mjg4LAorCVNJWkVfNjQweDQ4MCwKKwkvKiBBZGQvcmVtb3ZlL3JlYXJyYW5nZSBpdGVtcyBiZWZvcmUgdGhpcyBsaW5lICovCisJU0laRV9MYXN0SXRlbQorfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGxpdmVzIGluIHV2ZC0+dXNlciBmaWVsZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBpbml0aWFsaXplZDsJLyogSGFkIHdlIGFscmVhZHkgc2VudCBpbml0IHNlcXVlbmNlPyAqLworCWludCBjYW1lcmFfbW9kZWw7CS8qIFdoYXQgdHlwZSBvZiBJQk0gY2FtZXJhIHdlIGdvdD8gKi8KKwlpbnQgaGFzX2hkcjsKK30gaWJtY2FtX3Q7CisjZGVmaW5lCUlCTUNBTV9UKHV2ZCkJKChpYm1jYW1fdCAqKSgodXZkKS0+dXNlcl9kYXRhKSkKKworc3RhdGljIHN0cnVjdCB1c2J2aWRlbyAqY2FtczsKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIGludCBmbGFnczsgLyogPSBGTEFHU19ESVNQTEFZX0hJTlRTIHwgRkxBR1NfT1ZFUkxBWV9TVEFUUzsgKi8KKworc3RhdGljIGNvbnN0IGludCBtaW5fY2FudmFzV2lkdGggID0gODsKK3N0YXRpYyBjb25zdCBpbnQgbWluX2NhbnZhc0hlaWdodCA9IDQ7CisKK3N0YXRpYyBpbnQgbGlnaHRpbmcgPSAxOyAvKiBNZWRpdW0gKi8KKworI2RlZmluZSBTSEFSUE5FU1NfTUlOCTAKKyNkZWZpbmUgU0hBUlBORVNTX01BWAk2CitzdGF0aWMgaW50IHNoYXJwbmVzcyA9IDQ7IC8qIExvdyBub2lzZSwgZ29vZCBkZXRhaWxzICovCisKKyNkZWZpbmUgRlJBTUVSQVRFX01JTgkwCisjZGVmaW5lIEZSQU1FUkFURV9NQVgJNgorc3RhdGljIGludCBmcmFtZXJhdGUgPSAtMTsKKworc3RhdGljIGludCBzaXplID0gU0laRV8zNTJ4Mjg4OworCisvKgorICogSGVyZSB3ZSBkZWZpbmUgc2V2ZXJhbCBpbml0aWFsaXphdGlvbiB2YXJpYWJsZXMuIFRoZXkgbWF5CisgKiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yLCBodWUsIGJyaWdodG5lc3MgYW5kCisgKiBjb250cmFzdCB0byBkZXNpcmVkIHZhbHVlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluCisgKiBjYXNlIG9mIHdlYmNhbXMgKHdoaWNoIGhhdmUgbm8gY29udHJvbHMgYW5kIG5vIG9uLXNjcmVlbgorICogb3V0cHV0KSBhbmQgYWxzbyB3aGVuIGEgY2xpZW50IFY0TCBzb2Z0d2FyZSBpcyB1c2VkIHRoYXQKKyAqIGRvZXMgbm90IGhhdmUgc29tZSBvZiB0aG9zZSBjb250cm9scy4gSW4gYW55IGNhc2UgaXQncworICogZ29vZCB0byBoYXZlIHN0YXJ0dXAgdmFsdWVzIGFzIG9wdGlvbnMuCisgKgorICogVGhlc2UgdmFsdWVzIGFyZSBhbGwgaW4gWzAuLjI1NV0gcmFuZ2UuIFRoaXMgc2ltcGxpZmllcworICogb3BlcmF0aW9uLiBOb3RlIHRoYXQgYWN0dWFsIHZhbHVlcyBvZiBWNEwgdmFyaWFibGVzIG1heQorICogYmUgc2NhbGVkIHVwIChhcyBtdWNoIGFzIDw8IDgpLiBVc2VyIGNhbiBzZWUgdGhhdCBvbmx5CisgKiBvbiBvdmVybGF5IG91dHB1dCwgaG93ZXZlciwgb3IgdGhyb3VnaCBhIFY0TCBjbGllbnQuCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9icmlnaHRuZXNzID0gMTI4Oworc3RhdGljIGludCBpbml0X2NvbnRyYXN0ID0gMTkyOworc3RhdGljIGludCBpbml0X2NvbG9yID0gMTI4Oworc3RhdGljIGludCBpbml0X2h1ZSA9IDEyODsKK3N0YXRpYyBpbnQgaHVlX2NvcnJlY3Rpb24gPSAxMjg7CisKKy8qIFNldHRpbmdzIGZvciBjYW1lcmEgbW9kZWwgMiAqLworc3RhdGljIGludCBpbml0X21vZGVsMl9yZzIgPSAtMTsKK3N0YXRpYyBpbnQgaW5pdF9tb2RlbDJfc2F0ID0gLTE7CitzdGF0aWMgaW50IGluaXRfbW9kZWwyX3liID0gLTE7CisKKy8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLworLyogU2V0dGluZ3MgZm9yIGNhbWVyYSBtb2RlbCAzICovCitzdGF0aWMgaW50IGluaXRfbW9kZWwzX2lucHV0ID0gMDsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwLTkgKGRlZmF1bHQ9MCkiKTsKK21vZHVsZV9wYXJhbShmbGFncywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZmxhZ3MsICJCaXRmaWVsZDogMD1WSURJT0NTWU5DLCAxPUIvVywgMj1zaG93IGhpbnRzLCAzPXNob3cgc3RhdHMsIDQ9dGVzdCBwYXR0ZXJuLCA1PXNlcGFyYXRlIGZyYW1lcywgNj1jbGVhbiBmcmFtZXMiKTsKK21vZHVsZV9wYXJhbShmcmFtZXJhdGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZyYW1lcmF0ZSwgIkZyYW1lcmF0ZSBzZXR0aW5nOiAwPXNsb3dlc3QsIDY9ZmFzdGVzdCAoZGVmYXVsdD0yKSIpOworbW9kdWxlX3BhcmFtKGxpZ2h0aW5nLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhsaWdodGluZywgIlBob3Rvc2Vuc2l0aXZpdHk6IDA9YnJpZ2h0LCAxPW1lZGl1bSAoZGVmYXVsdCksIDI9bG93IGxpZ2h0Iik7Cittb2R1bGVfcGFyYW0oc2hhcnBuZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzaGFycG5lc3MsICJNb2RlbDEgbm9pc2UgcmVkdWN0aW9uOiAwPXNtb290aCwgNj1zaGFycCAoZGVmYXVsdD00KSIpOworbW9kdWxlX3BhcmFtKHNpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbWFnZSBzaXplOiAwPTEyOHg5NiAxPTE2MHgxMjAgMj0xNzZ4MTQ0IDM9MzIweDI0MCA0PTM1MngyNDAgNT0zNTJ4Mjg4IDY9NjQweDQ4MCAgKGRlZmF1bHQ9NSkiKTsKK21vZHVsZV9wYXJhbShpbml0X2JyaWdodG5lc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfYnJpZ2h0bmVzcywgIkJyaWdodG5lc3MgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGluaXRfY29udHJhc3QsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfY29udHJhc3QsICJDb250cmFzdCBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xOTIpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9jb2xvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9jb2xvciwgIkNvbG9yIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKK21vZHVsZV9wYXJhbShpbml0X2h1ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9odWUsICJIdWUgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGh1ZV9jb3JyZWN0aW9uLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhodWVfY29ycmVjdGlvbiwgIllVViBjb2xvcnNwYWNlIHJlZ3VsYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKKworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwyX3JnMiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9tb2RlbDJfcmcyLCAiTW9kZWwyIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTQ3KSIpOworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwyX3NhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9tb2RlbDJfc2F0LCAiTW9kZWwyIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTUyKSIpOworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwyX3liLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X21vZGVsMl95YiwgIk1vZGVsMiBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xNjApIik7CisKKy8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLworbW9kdWxlX3BhcmFtKGluaXRfbW9kZWwzX2lucHV0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X21vZGVsM19pbnB1dCwgIk1vZGVsMyBpbnB1dDogMD1DQ0QgMT1SQ0EiKTsKKworTU9EVUxFX0FVVEhPUiAoIkRtaXRyaSIpOworTU9EVUxFX0RFU0NSSVBUSU9OICgiSUJNL1hpcmxpbmsgQy1pdCBVU0IgQ2FtZXJhIERyaXZlciBmb3IgTGludXggKGMpIDIwMDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogU3RpbGwgbXlzdGVyaW91cyBpMmMgY29tbWFuZHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB1bmtub3duXzg4ID0gMHgwMDg4Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHVua25vd25fODkgPSAweDAwODk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYnJpZ2h0XzN4WzNdID0geyAweDAwMzEsIDB4MDAzMiwgMHgwMDMzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgY29udHJhc3RfMTQgPSAweDAwMTQ7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGlnaHRfMjcgPSAweDAwMjc7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2hhcnBfMTMgPSAweDAwMTM7CisKKy8qIGkyYyBjb21tYW5kcyBmb3IgTW9kZWwgMiBjYW1lcmFzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9icmlnaHRuZXNzID0gMHgwMDFhOwkJLyogJDViIC4uICRlZTsgZGVmYXVsdD0kNWEgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX3NldF9mcmFtZXJhdGUgPSAweDAwMWM7CS8qIDAgKGZhc3QpLi4gJDFGIChzbG93KSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfY29sb3JfYmFsYW5jZV9yZzIgPSAweDAwMWU7CS8qIDAgKHJlZCkgLi4gJDdGIChncmVlbikgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX3NhdHVyYXRpb24gPSAweDAwMjA7CQkvKiAwIChiL3cpIC0gJDdGIChmdWxsIGNvbG9yKSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfY29sb3JfYmFsYW5jZV95YiA9IDB4MDAyMjsJLyogMC4uJDdGLCAkNTAgaXMgYWJvdXQgcmlnaHQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX2h1ZSA9IDB4MDAyNDsJCQkvKiAwLi4kN0YsICQ3MCBpcyBhYm91dCByaWdodCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfc2Vuc2l0aXZpdHkgPSAweDAwMjg7CQkvKiAwIChtaW4pIC4uICQxRiAobWF4KSAqLworCitzdHJ1Y3Qgc3RydWN0X2luaXREYXRhIHsKKwl1bnNpZ25lZCBjaGFyIHJlcTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCBpbmRleDsKK307CisKKy8qCisgKiBpYm1jYW1fc2l6ZV90b192aWRlb3NpemUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGNvbnZlcnRzIG1vZHVsZSBvcHRpb24gJ3NpemUnIGludG8gdGhlIGFjdHVhbAorICogdmlkZW9zaXplX3QgdGhhdCBkZWZpbmVzIHRoZSBpbWFnZSBzaXplIGluIHBpeGVscy4gV2UgbmVlZAorICogc2ltcGxpZmllZCAnc2l6ZScgYmVjYXVzZSB1c2VyIHdhbnRzIGEgc2ltcGxlIGVudW1lcmF0ZWQgbGlzdAorICogb2YgY2hvaWNlcywgbm90IGFuIGluZmluaXRlIHNldCBvZiBwb3NzaWJpbGl0aWVzLgorICovCitzdGF0aWMgdmlkZW9zaXplX3QgaWJtY2FtX3NpemVfdG9fdmlkZW9zaXplKGludCBzaXplKQoreworCXZpZGVvc2l6ZV90IHZzID0gVklERU9TSVpFXzM1MngyODg7CisJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgMCwgKFNJWkVfTGFzdEl0ZW0tMSkpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgU0laRV8xMjh4OTY6CisJCXZzID0gVklERU9TSVpFXzEyOHg5NjsKKwkJYnJlYWs7CisJY2FzZSBTSVpFXzE2MHgxMjA6CisJCXZzID0gVklERU9TSVpFXzE2MHgxMjA7CisJCWJyZWFrOworCWNhc2UgU0laRV8xNzZ4MTQ0OgorCQl2cyA9IFZJREVPU0laRV8xNzZ4MTQ0OworCQlicmVhazsKKwljYXNlIFNJWkVfMzIweDI0MDoKKwkJdnMgPSBWSURFT1NJWkVfMzIweDI0MDsKKwkJYnJlYWs7CisJY2FzZSBTSVpFXzM1MngyNDA6CisJCXZzID0gVklERU9TSVpFXzM1MngyNDA7CisJCWJyZWFrOworCWNhc2UgU0laRV8zNTJ4Mjg4OgorCQl2cyA9IFZJREVPU0laRV8zNTJ4Mjg4OworCQlicmVhazsKKwljYXNlIFNJWkVfNjQweDQ4MDoKKwkJdnMgPSBWSURFT1NJWkVfNjQweDQ4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJzaXplPSVkLiBpcyBub3QgdmFsaWQiLCBzaXplKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB2czsKK30KKworLyoKKyAqIGlibWNhbV9maW5kX2hlYWRlcigpCisgKgorICogTG9jYXRlIG9uZSBvZiBzdXBwb3J0ZWQgaGVhZGVyIG1hcmtlcnMgaW4gdGhlIHF1ZXVlLgorICogT25jZSBmb3VuZCwgcmVtb3ZlIGFsbCBwcmVjZWRpbmcgYnl0ZXMgQU5EIHRoZSBtYXJrZXIgKDQgYnl0ZXMpCisgKiBmcm9tIHRoZSBkYXRhIHB1bXAgcXVldWUuIFdoYXRldmVyIGZvbGxvd3MgbXVzdCBiZSB2aWRlbyBsaW5lcy4KKyAqCisgKiBIaXN0b3J5OgorICogMS8yMS8wMCAgQ3JlYXRlZC4KKyAqLworc3RhdGljIGVudW0gUGFyc2VTdGF0ZSBpYm1jYW1fZmluZF9oZWFkZXIoc3RydWN0IHV2ZCAqdXZkKSAvKiBGSVhNRTogQWRkIGZyYW1lIGhlcmUgKi8KK3sKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lOworCWlibWNhbV90ICppY2FtOworCisJaWYgKCh1dmQtPmN1cmZyYW1lKSA8IDAgfHwgKHV2ZC0+Y3VyZnJhbWUgPj0gVVNCVklERU9fTlVNRlJBTUVTKSkgeworCQllcnIoImlibWNhbV9maW5kX2hlYWRlcjogSWxsZWdhbCBmcmFtZSAlZC4iLCB1dmQtPmN1cmZyYW1lKTsKKwkJcmV0dXJuIHNjYW5fRW5kUGFyc2U7CisJfQorCWljYW0gPSBJQk1DQU1fVCh1dmQpOworCWFzc2VydChpY2FtICE9IE5VTEwpOworCWZyYW1lID0gJnV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV07CisJaWNhbS0+aGFzX2hkciA9IDA7CisJc3dpdGNoIChpY2FtLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCXsKKwkJY29uc3QgaW50IG1hcmtlcl9sZW4gPSA0OworCQl3aGlsZSAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gbWFya2VyX2xlbikgeworCQkJaWYgKChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDApID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhGRikgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAyKSA9PSAweDAwKSkKKwkJCXsKKyNpZiAwCQkJCS8qIFRoaXMgY29kZSBoZWxwcyB0byBkZXRlY3QgbmV3IGZyYW1lIG1hcmtlcnMgKi8KKwkJCQlpbmZvKCJIZWFkZXIgc2lnOiAwMCBGRiAwMCAlMDJYIiwgUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKSk7CisjZW5kaWYKKwkJCQlmcmFtZS0+aGVhZGVyID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKKwkJCQlpZiAoKGZyYW1lLT5oZWFkZXIgPT0gSERSU0lHX01PREVMMV8xMjh4OTYpIHx8CisJCQkJICAgIChmcmFtZS0+aGVhZGVyID09IEhEUlNJR19NT0RFTDFfMTc2eDE0NCkgfHwKKwkJCQkgICAgKGZyYW1lLT5oZWFkZXIgPT0gSERSU0lHX01PREVMMV8zNTJ4Mjg4KSkKKwkJCQl7CisjaWYgMAorCQkJCQlpbmZvKCJIZWFkZXIgZm91bmQuIik7CisjZW5kaWYKKwkJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKKwkJCQkJaWNhbS0+aGFzX2hkciA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qIElmIHdlIGFyZSBzdGlsbCBoZXJlIHRoZW4gdGhpcyBkb2Vzbid0IGxvb2sgbGlrZSBhIGhlYWRlciAqLworCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCAxKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKK2Nhc2UgSUJNQ0FNX01PREVMXzQ6CisJeworCQlpbnQgbWFya2VyX2xlbiA9IDA7CisJCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwkJY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKKwkJCW1hcmtlcl9sZW4gPSAxMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbWFya2VyX2xlbiA9IDI7CisJCQlicmVhazsKKwkJfQorCQl3aGlsZSAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gbWFya2VyX2xlbikgeworCQkJaWYgKChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDApID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhGRikpCisJCQl7CisjaWYgMAorCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKyNlbmRpZgorCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7CisJCQkJaWNhbS0+aGFzX2hkciA9IDE7CisJCQkJZnJhbWUtPmhlYWRlciA9IEhEUlNJR19NT0RFTDFfMTc2eDE0NDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIElmIHdlIGFyZSBzdGlsbCBoZXJlIHRoZW4gdGhpcyBkb2Vzbid0IGxvb2sgbGlrZSBhIGhlYWRlciAqLworCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCAxKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwl7CS8qCisJCSAqIEhlYWRlcnM6IChvbmUgcHJlY2VkZXMgZXZlcnkgZnJhbWUpLiBuYz1ubyBjb21wcmVzc2lvbiwKKwkJICogYnE9YmVzdCBxdWFsaXR5IGJmPWJlc3QgZnJhbWUgcmF0ZS4KKwkJICoKKwkJICogMTc2eDE0NDogMDAgRkYgMDIgeyAwQT1uYyBDQT1icSBFQT1iZiB9CisJCSAqIDMyMHgyNDA6IDAwIEZGIDAyIHsgMDg9bmMgMjg9YnEgNjg9YmYgfQorCQkgKiA2NDB4NDgwOiAwMCBGRiAwMyB7IDA4PW5jIDI4PWJxIDY4PWJmIH0KKwkJICoKKwkJICogQnl0ZXMgJzAwIEZGJyBzZWVtIHRvIGluZGljYXRlIGhlYWRlci4gT3RoZXIgdHdvIGJ5dGVzCisJCSAqIGVuY29kZSB0aGUgZnJhbWUgdHlwZS4gVGhpcyBpcyBhIHNldCBvZiBiaXQgZmllbGRzIHRoYXQKKwkJICogZW5jb2RlIGltYWdlIHNpemUsIGNvbXByZXNzaW9uIHR5cGUgZXRjLiBUaGVzZSBmaWVsZHMKKwkJICogZG8gTk9UIGNvbnRhaW4gZnJhbWUgbnVtYmVyIGJlY2F1c2UgYWxsIGZyYW1lcyBjYXJyeQorCQkgKiB0aGUgc2FtZSBoZWFkZXIuCisJCSAqLworCQljb25zdCBpbnQgbWFya2VyX2xlbiA9IDQ7CisJCXdoaWxlIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSBtYXJrZXJfbGVuKSB7CisJCQlpZiAoKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMCkgPT0gMHgwMCkgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweEZGKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpICE9IDB4RkYpKQorCQkJeworCQkJCS8qCisJCQkJICogQ29tYmluZSAyIGJ5dGVzIG9mIGZyYW1lIHR5cGUgaW50byBvbmUKKwkJCQkgKiBlYXN5IHRvIHVzZSB2YWx1ZQorCQkJCSAqLworCQkJCXVuc2lnbmVkIGxvbmcgYnl0ZTMsIGJ5dGU0OworCisJCQkJYnl0ZTMgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpOworCQkJCWJ5dGU0ID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKKwkJCQlmcmFtZS0+aGVhZGVyID0gKGJ5dGUzIDw8IDgpIHwgYnl0ZTQ7CisjaWYgMAorCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKyNlbmRpZgorCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7CisJCQkJaWNhbS0+aGFzX2hkciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBJZiB3ZSBhcmUgc3RpbGwgaGVyZSB0aGVuIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBoZWFkZXIgKi8KKwkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgMSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAoIWljYW0tPmhhc19oZHIpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPiAyKQorCQkJaW5mbygiU2tpcHBpbmcgZnJhbWUsIG5vIGhlYWRlciIpOworCQlyZXR1cm4gc2Nhbl9FbmRQYXJzZTsKKwl9CisKKwkvKiBIZWFkZXIgZm91bmQgKi8KKwlpY2FtLT5oYXNfaGRyID0gMTsKKwl1dmQtPnN0YXRzLmhlYWRlcl9jb3VudCsrOworCWZyYW1lLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfTGluZXM7CisJZnJhbWUtPmN1cmxpbmUgPSAwOworCisJaWYgKGZsYWdzICYgRkxBR1NfRk9SQ0VfVEVTVFBBVFRFUk4pIHsKKwkJdXNidmlkZW9fVGVzdFBhdHRlcm4odXZkLCAxLCAxKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKwlyZXR1cm4gc2Nhbl9Db250aW51ZTsKK30KKworLyoKKyAqIGlibWNhbV9wYXJzZV9saW5lcygpCisgKgorICogUGFyc2Ugb25lIGxpbmUgKGludGVybGFjZWQpIGZyb20gdGhlIGJ1ZmZlciwgcHV0CisgKiBkZWNvZGVkIFJHQiB2YWx1ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lIGJ1ZmZlcgorICogYW5kIGFkZCB0aGUgd3JpdHRlbiBudW1iZXIgb2YgYnl0ZXMgKFJHQikgdG8KKyAqIHRoZSAqcGNvcHlsZW4uCisgKgorICogSGlzdG9yeToKKyAqIDIxLUphbi0yMDAwIENyZWF0ZWQuCisgKiAxMi1PY3QtMjAwMCBSZXdvcmtlZCB0byByZWZsZWN0IGludGVybGFjZWQgbmF0dXJlIG9mIHRoZSBkYXRhLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9wYXJzZV9saW5lcygKKwlzdHJ1Y3QgdXZkICp1dmQsCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSwKKwlsb25nICpwY29weWxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmOworCWlibWNhbV90ICppY2FtOworCXVuc2lnbmVkIGludCBsZW4sIHNjYW5MZW5ndGgsIHNjYW5IZWlnaHQsIG9yZGVyX3V2LCBvcmRlcl95YzsKKwlpbnQgdjRsX2xpbmVzaXplOyAvKiBWNEwgbGluZSBvZmZzZXQgKi8KKwljb25zdCBpbnQgaHVlX2NvcnIgID0gKHV2ZC0+dnBpYy5odWUgLSAweDgwMDApID4+IDEwOwkvKiAtMzIuLiszMSAqLworCWNvbnN0IGludCBodWUyX2NvcnIgPSAoaHVlX2NvcnJlY3Rpb24gLSAxMjgpIC8gNDsJCS8qIC0zMi4uKzMxICovCisJY29uc3QgaW50IGNjbSA9IDEyODsgLyogQ29sb3IgY29ycmVjdGlvbiBtZWRpYW4gLSBzZWUgYmVsb3cgKi8KKwlpbnQgeSwgdSwgdiwgaSwgZnJhbWVfZG9uZT0wLCBjb2xvcl9jb3JyOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpbmVCdWZmZXJbNjQwKjNdOworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKmNocm9tYUxpbmUsICpsdW1hTGluZTsKKworCWFzc2VydCh1dmQgIT0gTlVMTCk7CisJYXNzZXJ0KGZyYW1lICE9IE5VTEwpOworCWljYW0gPSBJQk1DQU1fVCh1dmQpOworCWFzc2VydChpY2FtICE9IE5VTEwpOworCWNvbG9yX2NvcnIgPSAodXZkLT52cGljLmNvbG91ciAtIDB4ODAwMCkgPj4gODsgLyogLTEyOC4uKzEyNyA9IC1jY20uLisoY2NtLTEpKi8KKwlSRVNUUklDVF9UT19SQU5HRShjb2xvcl9jb3JyLCAtY2NtLCBjY20rMSk7CisKKwl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOworCisJaWYgKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCA9PSBJQk1DQU1fTU9ERUxfNCkgeworCQkvKiBNb2RlbCA0IGZyYW1lIG1hcmtlcnMgZG8gbm90IGNhcnJ5IGltYWdlIHNpemUgaWRlbnRpZmljYXRpb24gKi8KKwkJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCQljYXNlIFZJREVPU0laRV8xMjh4OTY6CisJCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCQlzY2FuTGVuZ3RoID0gVklERU9TSVpFX1godXZkLT52aWRlb3NpemUpOworCQkJc2NhbkhlaWdodCA9IFZJREVPU0laRV9ZKHV2ZC0+dmlkZW9zaXplKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJpYm1jYW1fcGFyc2VfbGluZXM6IFdyb25nIG1vZGUuIik7CisJCQlyZXR1cm4gc2Nhbl9PdXQ7CisJCX0KKwkJb3JkZXJfeWMgPSAxOwkvKiBvcmRlcl95YzogdHJ1ZT1ZYyBmYWxzZT1jWSAoJ2MnPWVpdGhlciBVIG9yIFYpICovCisJCW9yZGVyX3V2ID0gMTsJLyogQWx3YXlzIHRydWUgaW4gdGhpcyBhbGdvcml0aG0gKi8KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGZyYW1lLT5oZWFkZXIpIHsKKwkJY2FzZSBIRFJTSUdfTU9ERUwxXzEyOHg5NjoKKwkJCXNjYW5MZW5ndGggPSAxMjg7CisJCQlzY2FuSGVpZ2h0ID0gOTY7CisJCQlvcmRlcl91diA9IDE7CS8qIFUgWSBWIFkgLi4uICovCisJCQlicmVhazsKKwkJY2FzZSBIRFJTSUdfTU9ERUwxXzE3NngxNDQ6CisJCQlzY2FuTGVuZ3RoID0gMTc2OworCQkJc2NhbkhlaWdodCA9IDE0NDsKKwkJCW9yZGVyX3V2ID0gMTsJLyogVSBZIFYgWSAuLi4gKi8KKwkJCWJyZWFrOworCQljYXNlIEhEUlNJR19NT0RFTDFfMzUyeDI4ODoKKwkJCXNjYW5MZW5ndGggPSAzNTI7CisJCQlzY2FuSGVpZ2h0ID0gMjg4OworCQkJb3JkZXJfdXYgPSAwOwkvKiBZIFYgWSBWIC4uLiAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoIlVua25vd24gaGVhZGVyIHNpZ25hdHVyZSAwMCBGRiAwMCAlMDJsWCIsIGZyYW1lLT5oZWFkZXIpOworCQkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCQl9CisJCS8qIG9yZGVyX3ljOiB0cnVlPVljIGZhbHNlPWNZICgnYyc9ZWl0aGVyIFUgb3IgVikgKi8KKwkJb3JkZXJfeWMgPSAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsID09IElCTUNBTV9NT0RFTF8yKTsKKwl9CisKKwlsZW4gPSBzY2FuTGVuZ3RoICogMzsKKwlhc3NlcnQobGVuIDw9IHNpemVvZihsaW5lQnVmZmVyKSk7CisKKwkvKgorCSAqIExpbmVzIGFyZSBvcmdhbml6ZWQgdGhpcyB3YXk6CisJICoKKwkgKiBJNDIwOgorCSAqIH5+fn4KKwkgKiA8c2Nhbkxlbmd0aC0+CisJICogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKwkgKiB8LS0tLS1ZLS0tLS18LS0tVVZVVlVWLi4uVVZVVi0tLS0tfCBcCisJICogfC0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIFwKKwkgKiB8PC0tIDE3NiAtLT58PC0tLS0tLSAxNzYqMiAtLS0tLS0+fCAgVG90YWwgNzIuIGxpbmVzIChpbnRlcmxhY2VkKQorCSAqIHwuLi4JICAgLi4uIHwgICAgICAgIC4uLiAgICAgICAgICB8ICAvCisJICogfDwtLSAzNTIgLS0+fDwtLS0tLS0gMzUyKjIgLS0tLS0tPnwgIFRvdGFsIDE0NC4gbGluZXMgKGludGVybGFjZWQpCisJICogfF9fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19fX3wgLworCSAqICBcICAgICAgICAgICBcCisJICogICBsdW1hTGluZSAgICBjaHJvbWFMaW5lCisJICovCisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJaWYgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApIDwgbGVuKQorCQlyZXR1cm4gc2Nhbl9PdXQ7CisKKwkvKiBTdWNrIG9uZSBsaW5lIG91dCBvZiB0aGUgcmluZyBxdWV1ZSAqLworCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBsaW5lQnVmZmVyLCBsZW4pOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTWluZCB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisKKwkvKgorCSAqIE5vdyB3ZSBhcmUgc3VyZSB0aGF0IGVudGlyZSBsaW5lIChyZXByZXNlbnRpbmcgYWxsICdzY2FuTGVuZ3RoJworCSAqIHBpeGVscyBmcm9tIHRoZSBjYW1lcmEpIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLiBXZQorCSAqIHN0YXJ0IGNvcHlpbmcgdGhlIGxpbmUgbGVmdC1hbGlnbmVkIHRvIHRoZSBWNEwgYnVmZmVyLgorCSAqIElmIHRoZSBjYW1lcmEgbGluZSBpcyBzaG9ydGVyIHRoZW4gd2Ugc2hvdWxkIHBhZCB0aGUgVjRMCisJICogYnVmZmVyIHdpdGggc29tZXRoaW5nIChibGFjaykgdG8gY29tcGxldGUgdGhlIGxpbmUuCisJICovCisJYXNzZXJ0KGZyYW1lLT5kYXRhICE9IE5VTEwpOworCWYgPSBmcmFtZS0+ZGF0YSArICh2NGxfbGluZXNpemUgKiBmcmFtZS0+Y3VybGluZSk7CisKKwkvKgorCSAqIFRvIG9idGFpbiBjaHJvbWluYW5jZSBkYXRhIGZyb20gdGhlICdjaHJvbWFMaW5lJyB1c2UgdGhpczoKKwkgKiAgIHYgPSBjaHJvbWFMaW5lWzBdOyAvLyAwLTE6WzBdLCAyLTM6WzRdLCA0LTU6WzhdLi4uCisJICogICB1ID0gY2hyb21hTGluZVsyXTsgLy8gMC0xOlsyXSwgMi0zOls2XSwgNC01OlsxMF0uLi4KKwkgKgorCSAqIEluZGljZXMgbXVzdCBiZSBjYWxjdWxhdGVkIHRoaXMgd2F5OgorCSAqIHZfaW5kZXggPSAoaSA+PiAxKSA8PCAyOworCSAqIHVfaW5kZXggPSAoaSA+PiAxKSA8PCAyICsgMjsKKwkgKgorCSAqIHdoZXJlICdpJyBpcyB0aGUgY29sdW1uIG51bWJlciBbMC4uVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpLTFdCisJICovCisJbHVtYUxpbmUgPSBsaW5lQnVmZmVyOworCWNocm9tYUxpbmUgPSBsaW5lQnVmZmVyICsgc2Nhbkxlbmd0aDsKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspCisJeworCQl1bnNpZ25lZCBjaGFyIHJ2LCBndiwgYnY7CS8qIFJHQiBjb21wb25lbnRzICovCisKKwkJLyogQ2hlY2sgZm9yIHZhcmlvdXMgdmlzdWFsIGRlYnVnZ2luZyBoaW50cyAoY29sb3JpemVkIHBpeGVscykgKi8KKwkJaWYgKChmbGFncyAmIEZMQUdTX0RJU1BMQVlfSElOVFMpICYmIChpY2FtLT5oYXNfaGRyKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYmFkIGFuZCBzaG91bGQgbm90IGhhcHBlbi4gVGhpcyBtZWFucyB0aGF0CisJCQkgKiB3ZSBzb21laG93IG92ZXJzaG9vdCB0aGUgbGluZSBhbmQgZW5jb3VudGVyZWQgbmV3CisJCQkgKiBmcmFtZSEgT2J2aW91c2x5IG91ciBjYW1lcmEvVjRMIGZyYW1lIHNpemUgaXMgb3V0CisJCQkgKiBvZiB3aGFjay4gVGhpcyBjeWFuIGRvdCB3aWxsIGhlbHAgeW91IHRvIGZpZ3VyZQorCQkJICogb3V0IHdoZXJlIGV4YWN0bHkgdGhlIG5ldyBmcmFtZSBhcnJpdmVkLgorCQkJICovCisJCQlpZiAoaWNhbS0+aGFzX2hkciA9PSAxKSB7CisJCQkJYnYgPSAwOyAvKiBZZWxsb3cgbWFya2VyICovCisJCQkJZ3YgPSAweEZGOworCQkJCXJ2ID0gMHhGRjsKKwkJCX0gZWxzZSB7CisJCQkJYnYgPSAweEZGOyAvKiBDeWFuIG1hcmtlciAqLworCQkJCWd2ID0gMHhGRjsKKwkJCQlydiA9IDA7CisJCQl9CisJCQlpY2FtLT5oYXNfaGRyID0gMDsKKwkJCWdvdG8gbWFrZV9waXhlbDsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGlmIHdlIGFyZSBzdGlsbCBpbiByYW5nZS4gV2UgbWF5IGJlIG91dCBvZiByYW5nZSBpZiBvdXIKKwkJICogVjRMIGNhbnZhcyBpcyB3aWRlciBvciB0YWxsZXIgdGhhbiB0aGUgY2FtZXJhICJuYXRpdmUiIGltYWdlLgorCQkgKiBUaGVuIHdlIHF1aWNrbHkgZmlsbCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHdpdGggemVyb3MgdG8KKwkJICogbWFrZSBibGFjayBjb2xvciBhbmQgcXVpdCB0aGUgaG9yaXpvbnRhbCBzY2FubmluZyBsb29wLgorCQkgKi8KKwkJaWYgKCgoZnJhbWUtPmN1cmxpbmUgKyAyKSA+PSBzY2FuSGVpZ2h0KSB8fCAoaSA+PSBzY2FuTGVuZ3RoKSkgeworCQkJY29uc3QgaW50IGogPSBpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKyNpZiBVU0VTX0lCTUNBTV9QVVRQSVhFTAorCQkJLyogUmVmcmVzaCAnZicgYmVjYXVzZSB3ZSBkb24ndCB1c2UgaXQgbXVjaCB3aXRoIFBVVFBJWEVMICovCisJCQlmID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpICsgajsKKyNlbmRpZgorCQkJbWVtc2V0KGYsIDAsIHY0bF9saW5lc2l6ZSAtIGopOworCQkJYnJlYWs7CisJCX0KKworCQl5ID0gbHVtYUxpbmVbaV07CisJCWlmIChmbGFncyAmIEZMQUdTX01PTk9DSFJPTUUpIC8qIFVzZSBtb25vY2hyb21lIGZvciBkZWJ1Z2dpbmcgKi8KKwkJCXJ2ID0gZ3YgPSBidiA9IHk7CisJCWVsc2UgeworCQkJaW50IG9mZl8wLCBvZmZfMjsKKworCQkJb2ZmXzAgPSAoaSA+PiAxKSA8PCAyOworCQkJb2ZmXzIgPSBvZmZfMCArIDI7CisKKwkJCWlmIChvcmRlcl95YykgeworCQkJCW9mZl8wKys7CisJCQkJb2ZmXzIrKzsKKwkJCX0KKwkJCWlmICghb3JkZXJfdXYpIHsKKwkJCQlvZmZfMCArPSAyOworCQkJCW9mZl8yIC09IDI7CisJCQl9CisJCQl1ID0gY2hyb21hTGluZVtvZmZfMF0gKyBodWVfY29ycjsKKwkJCXYgPSBjaHJvbWFMaW5lW29mZl8yXSArIGh1ZTJfY29ycjsKKworCQkJLyogQXBwbHkgY29sb3IgY29ycmVjdGlvbiAqLworCQkJaWYgKGNvbG9yX2NvcnIgIT0gMCkgeworCQkJCS8qIE1hZ25pZnkgdXAgdG8gMiB0aW1lcywgcmVkdWNlIGRvd24gdG8gemVybyBzYXR1cmF0aW9uICovCisJCQkJdSA9IDEyOCArICgoY2NtICsgY29sb3JfY29ycikgKiAodSAtIDEyOCkpIC8gY2NtOworCQkJCXYgPSAxMjggKyAoKGNjbSArIGNvbG9yX2NvcnIpICogKHYgLSAxMjgpKSAvIGNjbTsKKwkJCX0KKwkJCVlVVl9UT19SR0JfQllfVEhFX0JPT0soeSwgdSwgdiwgcnYsIGd2LCBidik7CisJCX0KKworCW1ha2VfcGl4ZWw6CisJCS8qCisJCSAqIFRoZSBwdXJwb3NlIG9mIGNyZWF0aW5nIHRoZSBwaXhlbCBoZXJlLCBpbiBvbmUsCisJCSAqIGRlZGljYXRlZCBwbGFjZSBpcyB0aGF0IHdlIG1heSBuZWVkIHRvIG1ha2UgdGhlCisJCSAqIHBpeGVsIHdpZGVyIGFuZCB0YWxsZXIgdGhhbiBpdCBhY3R1YWxseSBpcy4gVGhpcworCQkgKiBtYXkgYmUgdXNlZCBpZiBjYW1lcmEgZ2VuZXJhdGVzIHNtYWxsIGZyYW1lcyBmb3IKKwkJICogc2FrZSBvZiBmcmFtZSByYXRlIChvciBhbnkgb3RoZXIgcmVhc29uLikKKwkJICoKKwkJICogVGhlIG91dHB1dCBkYXRhIGNvbnNpc3RzIG9mIEIsIEcsIFIgYnl0ZXMKKwkJICogKGluIHRoaXMgb3JkZXIpLgorCQkgKi8KKyNpZiBVU0VTX0lCTUNBTV9QVVRQSVhFTAorCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgaSwgZnJhbWUtPmN1cmxpbmUsIHJ2LCBndiwgYnYpOworI2Vsc2UKKwkJKmYrKyA9IGJ2OworCQkqZisrID0gZ3Y7CisJCSpmKysgPSBydjsKKyNlbmRpZgorCQkvKgorCQkgKiBUeXBpY2FsbHkgd2UgZG8gbm90IGRlY2lkZSB3aXRoaW4gYSBsZWdpdGltYXRlIGZyYW1lCisJCSAqIHRoYXQgd2Ugd2FudCB0byBlbmQgdGhlIGZyYW1lLiBIb3dldmVyIGRlYnVnZ2luZyBjb2RlCisJCSAqIG1heSBkZXRlY3QgbWFya2VyIG9mIG5ldyBmcmFtZSB3aXRoaW4gdGhlIGRhdGEuIFRoZW4KKwkJICogdGhpcyBjb25kaXRpb24gYWN0aXZhdGVzLiBUaGUgJ2RhdGEnIHBvaW50ZXIgaXMgYWxyZWFkeQorCQkgKiBwb2ludGluZyBhdCB0aGUgbmV3IG1hcmtlciwgc28gd2UnZCBiZXR0ZXIgbGVhdmUgaXQgYXMgaXMuCisJCSAqLworCQlpZiAoZnJhbWVfZG9uZSkKKwkJCWJyZWFrOwkvKiBFbmQgc2Nhbm5pbmcgb2YgbGluZXMgKi8KKwl9CisJLyoKKwkgKiBBY2NvdW50IGZvciBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZSB3cm90ZSBpbnRvIG91dHB1dCBWNEwgZnJhbWUuCisJICogV2UgZG8gaXQgaGVyZSwgYWZ0ZXIgd2UgYXJlIGRvbmUgd2l0aCB0aGUgc2NhbmxpbmUsIGJlY2F1c2Ugd2UKKwkgKiBtYXkgZmlsbCBtb3JlIHRoYW4gb25lIG91dHB1dCBzY2FubGluZSBpZiB3ZSBkbyB2ZXJ0aWNhbAorCSAqIGVubGFyZ2VtZW50LgorCSAqLworCWZyYW1lLT5jdXJsaW5lICs9IDI7CisJaWYgKHBjb3B5bGVuICE9IE5VTEwpCisJCSpwY29weWxlbiArPSAyICogdjRsX2xpbmVzaXplOworCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX0ZpbGxPZGRMaW5lczsKKworCWlmIChmcmFtZV9kb25lIHx8IChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpKQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJZWxzZQorCQlyZXR1cm4gc2Nhbl9Db250aW51ZTsKK30KKworLyoKKyAqIGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgZGVhbHMgd2l0aCBhIHdlaXJkIFJHQiBmb3JtYXQgdGhhdCBpcyBwcm9kdWNlZCBieSBJQk0KKyAqIGNhbWVyYSBtb2RlbCAyIGluIG1vZGVzIDMyMHgyNDAgYW5kIGFib3ZlOyAneCcgYmVsb3cgaXMgMTU5IG9yIDE3NSwKKyAqIGRlcGVuZGluZyBvbiBob3Jpem9udGFsIHNpemUgb2YgdGhlIHBpY3R1cmU6CisgKgorICogPC0tLSAxNjAgb3IgMTc2IHBhaXJzIG9mIFJBLFJCIGJ5dGVzIC0tLS0tPgorICogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiBcCisgKiB8IFJBMCB8IFJCMCB8IFJBMSB8IFJCMSB8IC4uLiB8IFJBeCB8IFJCeCB8ICBcICAgVGhpcyBpcyBwYWlyIG9mIGhvcml6b250YWwgbGluZXMsCisgKiB8LS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rIC4uLiArLS0tLS0rLS0tLS18ICAgKi0gb3Igb25lIGludGVybGFjZWQgbGluZSwgdG90YWwKKyAqIHwgQjAgIHwgRzAgIHwgQjEgIHwgRzEgIHwgLi4uIHwgQnggIHwgR3ggIHwgIC8gICAxMjAgb3IgMTQ0IHN1Y2ggcGFpcnMgd2hpY2ggeWllbGQKKyAqIHw9PT09PSs9PT09PSs9PT09PSs9PT09PSsgLi4uICs9PT09PSs9PT09PXwgLyAgICAyNDAgb3IgMjg4IGxpbmVzIGFmdGVyIGRlaW50ZXJsYWNpbmcuCisgKgorICogRWFjaCBncm91cCBvZiBGT1VSIGJ5dGVzIChSQWksIFJCaSwgQmksIEdpKSB3aGVyZSBpPTAuLmZyYW1lX3dpZHRoLzItMQorICogZGVmaW5lcyBPTkUgcGl4ZWwuIFRoZXJlZm9yZSB0aGlzIGZvcm1hdCB5aWVsZHMgMTc2eDE0NCAiZGVjb2RlZCIKKyAqIHJlc29sdXRpb24gYXQgYmVzdC4gSSBkbyBub3Qga25vdyB3aHkgY2FtZXJhIHNlbmRzIHN1Y2ggZm9ybWF0IC0gdGhlCisgKiBwcmV2aW91cyBtb2RlbCAoMSkganVzdCB1c2VkIGludGVybGFjZWQgSTQyMCBhbmQgZXZlcnlvbmUgd2FzIGhhcHB5LgorICoKKyAqIEkgZG8gbm90IGtub3cgd2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFJBaSBhbmQgUkJpIGJ5dGVzLiBCb3RoCisgKiBzZWVtaW5nbHkgcmVwcmVzZW50IFIgY29tcG9uZW50LCBidXQgc2xpZ2h0bHkgdmFyeSBpbiB2YWx1ZSAoc28gdGhhdAorICogdGhlIHBpY3R1cmUgbG9va3MgYSBiaXQgY29sb3JlZCBpZiBvbmUgb3IgYW5vdGhlciBpcyB1c2VkKS4gSSB1c2UKKyAqIHRoZW0gYm90aCBhcyBSIGNvbXBvbmVudCBpbiBhdHRlbXB0IHRvIGF0IGxlYXN0IHBhcnRpYWxseSByZWNvdmVyIHRoZQorICogbG9zdCByZXNvbHV0aW9uLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcygKKwlzdHJ1Y3QgdXZkICp1dmQsCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSwKKwlsb25nICpwY29weWxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmLCAqbGEsICpsYjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWludCBpLCBqLCBmcmFtZV9kb25lPTAsIGNvbG9yX2NvcnI7CisJaW50IHNjYW5MZW5ndGgsIHNjYW5IZWlnaHQ7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlclszNTIqMl07CisKKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCXNjYW5MZW5ndGggPSBWSURFT1NJWkVfWCh1dmQtPnZpZGVvc2l6ZSk7CisJCXNjYW5IZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPnZpZGVvc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzOiBXcm9uZyBtb2RlLiIpOworCQlyZXR1cm4gc2Nhbl9PdXQ7CisJfQorCisJY29sb3JfY29yciA9ICh1dmQtPnZwaWMuY29sb3VyKSA+PiA4OyAvKiAwLi4rMjU1ICovCisJdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKworCWxlbiA9IHNjYW5MZW5ndGggKiAyOyAvKiBTZWUgZXhwbGFuYXRpb24gYWJvdmUgKi8KKwlhc3NlcnQobGVuIDw9IHNpemVvZihsaW5lQnVmZmVyKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJaWYgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApIDwgbGVuKQorCQlyZXR1cm4gc2Nhbl9PdXQ7CisKKwkvKiBTdWNrIG9uZSBsaW5lIG91dCBvZiB0aGUgcmluZyBxdWV1ZSAqLworCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBsaW5lQnVmZmVyLCBsZW4pOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTWluZCB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisKKwlsYSA9IGxpbmVCdWZmZXI7CisJbGIgPSBsaW5lQnVmZmVyICsgc2Nhbkxlbmd0aDsKKworCS8qCisJICogTm93IHdlIGFyZSBzdXJlIHRoYXQgZW50aXJlIGxpbmUgKHJlcHJlc2VudGluZyBhbGwKKwkgKiAgICAgICAgIFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KQorCSAqIHBpeGVscyBmcm9tIHRoZSBjYW1lcmEpIGlzIGF2YWlsYWJsZSBpbiB0aGUgc2NyYXRjaCBidWZmZXIuIFdlCisJICogc3RhcnQgY29weWluZyB0aGUgbGluZSBsZWZ0LWFsaWduZWQgdG8gdGhlIFY0TCBidWZmZXIgKHdoaWNoCisJICogbWlnaHQgYmUgbGFyZ2VyIC0gbm90IHNtYWxsZXIsIGhvcGVmdWxseSkuIElmIHRoZSBjYW1lcmEKKwkgKiBsaW5lIGlzIHNob3J0ZXIgdGhlbiB3ZSBzaG91bGQgcGFkIHRoZSBWNEwgYnVmZmVyIHdpdGggc29tZXRoaW5nCisJICogKGJsYWNrIGluIHRoaXMgY2FzZSkgdG8gY29tcGxldGUgdGhlIGxpbmUuCisJICovCisJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKTsKKworCS8qIEZpbGwgdGhlIDItbGluZSBzdHJpcCAqLworCWZvciAoaSA9IDA7IGkgPCBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCk7IGkrKykgeworCQlpbnQgeSwgcnYsIGd2LCBidjsJLyogUkdCIGNvbXBvbmVudHMgKi8KKworCQlqID0gaSAmICh+MSk7CisKKwkJLyogQ2hlY2sgZm9yIHZhcmlvdXMgdmlzdWFsIGRlYnVnZ2luZyBoaW50cyAoY29sb3JpemVkIHBpeGVscykgKi8KKwkJaWYgKChmbGFncyAmIEZMQUdTX0RJU1BMQVlfSElOVFMpICYmIChJQk1DQU1fVCh1dmQpLT5oYXNfaGRyKSkgeworCQkJaWYgKElCTUNBTV9UKHV2ZCktPmhhc19oZHIgPT0gMSkgeworCQkJCWJ2ID0gMDsgLyogWWVsbG93IG1hcmtlciAqLworCQkJCWd2ID0gMHhGRjsKKwkJCQlydiA9IDB4RkY7CisJCQl9IGVsc2UgeworCQkJCWJ2ID0gMHhGRjsgLyogQ3lhbiBtYXJrZXIgKi8KKwkJCQlndiA9IDB4RkY7CisJCQkJcnYgPSAwOworCQkJfQorCQkJSUJNQ0FNX1QodXZkKS0+aGFzX2hkciA9IDA7CisJCQlnb3RvIG1ha2VfcGl4ZWw7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayBpZiB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuIFdlIG1heSBiZSBvdXQgb2YgcmFuZ2UgaWYgb3VyCisJCSAqIFY0TCBjYW52YXMgaXMgd2lkZXIgb3IgdGFsbGVyIHRoYW4gdGhlIGNhbWVyYSAibmF0aXZlIiBpbWFnZS4KKwkJICogVGhlbiB3ZSBxdWlja2x5IGZpbGwgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB3aXRoIHplcm9zIHRvCisJCSAqIG1ha2UgYmxhY2sgY29sb3IgYW5kIHF1aXQgdGhlIGhvcml6b250YWwgc2Nhbm5pbmcgbG9vcC4KKwkJICovCisJCWlmICgoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gc2NhbkhlaWdodCkgfHwgKGkgPj0gc2Nhbkxlbmd0aCkpIHsKKwkJCWNvbnN0IGludCBqID0gaSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisjaWYgVVNFU19JQk1DQU1fUFVUUElYRUwKKwkJCS8qIFJlZnJlc2ggJ2YnIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIGl0IG11Y2ggd2l0aCBQVVRQSVhFTCAqLworCQkJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKSArIGo7CisjZW5kaWYKKwkJCW1lbXNldChmLCAwLCB2NGxfbGluZXNpemUgLSBqKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogSGVyZSBJIHVzZSBSQSBhbmQgUkIgY29tcG9uZW50cywgb25lIHBlciBwaHlzaWNhbCBwaXhlbC4KKwkJICogVGhpcyBjYXVzZXMgZmluZSB2ZXJ0aWNhbCBncmlkIG9uIHRoZSBwaWN0dXJlIGJ1dCBtYXkgaW1wcm92ZQorCQkgKiBob3Jpem9udGFsIHJlc29sdXRpb24uIElmIHlvdSBwcmVmZXIgcmVwbGljYXRpbmcsIHVzZSB0aGlzOgorCQkgKiAgIHJ2ID0gbGFbaiArIDBdOyAgIC4uLiBvciAuLi4gcnYgPSBsYVtqICsgMV07CisJCSAqIHRoZW4gdGhlIHBpeGVsIHdpbGwgYmUgcmVwbGljYXRlZC4KKwkJICovCisJCXJ2ID0gbGFbaV07CisJCWd2ID0gbGJbaiArIDFdOworCQlidiA9IGxiW2ogKyAwXTsKKworCQl5ID0gKHJ2ICsgZ3YgKyBidikgLyAzOyAvKiBCcmlnaHRuZXNzIChiYWRseSBjYWxjdWxhdGVkKSAqLworCisJCWlmIChmbGFncyAmIEZMQUdTX01PTk9DSFJPTUUpIC8qIFVzZSBtb25vY2hyb21lIGZvciBkZWJ1Z2dpbmcgKi8KKwkJCXJ2ID0gZ3YgPSBidiA9IHk7CisJCWVsc2UgaWYgKGNvbG9yX2NvcnIgIT0gMTI4KSB7CisKKwkJCS8qIENhbGN1bGF0ZSBkaWZmZXJlbmNlIGJldHdlZW4gY29sb3IgYW5kIGJyaWdodG5lc3MgKi8KKwkJCXJ2IC09IHk7CisJCQlndiAtPSB5OworCQkJYnYgLT0geTsKKworCQkJLyogU2NhbGUgZGlmZmVyZW5jZXMgKi8KKwkJCXJ2ID0gKHJ2ICogY29sb3JfY29ycikgLyAxMjg7CisJCQlndiA9IChndiAqIGNvbG9yX2NvcnIpIC8gMTI4OworCQkJYnYgPSAoYnYgKiBjb2xvcl9jb3JyKSAvIDEyODsKKworCQkJLyogUmVhcHBseSBicmlnaHRuZXNzICovCisJCQlydiArPSB5OworCQkJZ3YgKz0geTsKKwkJCWJ2ICs9IHk7CisKKwkJCS8qIFdhdGNoIGZvciBvdmVyZmxvd3MgKi8KKwkJCVJFU1RSSUNUX1RPX1JBTkdFKHJ2LCAwLCAyNTUpOworCQkJUkVTVFJJQ1RfVE9fUkFOR0UoZ3YsIDAsIDI1NSk7CisJCQlSRVNUUklDVF9UT19SQU5HRShidiwgMCwgMjU1KTsKKwkJfQorCisJbWFrZV9waXhlbDoKKwkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGZyYW1lLT5jdXJsaW5lLCBydiwgZ3YsIGJ2KTsKKwl9CisJLyoKKwkgKiBBY2NvdW50IGZvciBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3ZSB3cm90ZSBpbnRvIG91dHB1dCBWNEwgZnJhbWUuCisJICogV2UgZG8gaXQgaGVyZSwgYWZ0ZXIgd2UgYXJlIGRvbmUgd2l0aCB0aGUgc2NhbmxpbmUsIGJlY2F1c2Ugd2UKKwkgKiBtYXkgZmlsbCBtb3JlIHRoYW4gb25lIG91dHB1dCBzY2FubGluZSBpZiB3ZSBkbyB2ZXJ0aWNhbAorCSAqIGVubGFyZ2VtZW50LgorCSAqLworCWZyYW1lLT5jdXJsaW5lICs9IDI7CisJKnBjb3B5bGVuICs9IHY0bF9saW5lc2l6ZSAqIDI7CisJZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfRmlsbE9kZExpbmVzOworCisJaWYgKGZyYW1lX2RvbmUgfHwgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkpCisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwllbHNlCisJCXJldHVybiBzY2FuX0NvbnRpbnVlOworfQorCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDNfcGFyc2VfbGluZXMoCisJc3RydWN0IHV2ZCAqdXZkLAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJbG9uZyAqcGNvcHlsZW4pCit7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjb2xvcjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWNvbnN0IGludCBodWVfY29yciAgPSAodXZkLT52cGljLmh1ZSAtIDB4ODAwMCkgPj4gMTA7CS8qIC0zMi4uKzMxICovCisJY29uc3QgaW50IGh1ZTJfY29yciA9IChodWVfY29ycmVjdGlvbiAtIDEyOCkgLyA0OwkJLyogLTMyLi4rMzEgKi8KKwljb25zdCBpbnQgY2NtID0gMTI4OyAvKiBDb2xvciBjb3JyZWN0aW9uIG1lZGlhbiAtIHNlZSBiZWxvdyAqLworCWludCBpLCB1LCB2LCBydywgZGF0YV93PTAsIGRhdGFfaD0wLCBjb2xvcl9jb3JyOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpbmVCdWZmZXJbNjQwKjNdOworCisJY29sb3JfY29yciA9ICh1dmQtPnZwaWMuY29sb3VyIC0gMHg4MDAwKSA+PiA4OyAvKiAtMTI4Li4rMTI3ID0gLWNjbS4uKyhjY20tMSkqLworCVJFU1RSSUNUX1RPX1JBTkdFKGNvbG9yX2NvcnIsIC1jY20sIGNjbSsxKTsKKworCXY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisKKwkvKiBUaGUgaGVhZGVyIHRlbGxzIHVzIHdoYXQgc29ydCBvZiBkYXRhIGlzIGluIHRoaXMgZnJhbWUgKi8KKwlzd2l0Y2ggKGZyYW1lLT5oZWFkZXIpIHsKKwkJLyoKKwkJICogVW5jb21wcmVzc2VkIG1vZGVzICh0aGF0IGFyZSBlYXN5IHRvIGRlY29kZSkuCisJCSAqLworCWNhc2UgMHgwMzA4OgorCQlkYXRhX3cgPSA2NDA7CisJCWRhdGFfaCA9IDQ4MDsKKwkJYnJlYWs7CisJY2FzZSAweDAyMDg6CisJCWRhdGFfdyA9IDMyMDsKKwkJZGF0YV9oID0gMjQwOworCQlicmVhazsKKwljYXNlIDB4MDIwQToKKwkJZGF0YV93ID0gMTYwOworCQlkYXRhX2ggPSAxMjA7CisJCWJyZWFrOworCQkvKgorCQkgKiBDb21wcmVzc2VkIG1vZGVzIChWaUNFIC0gdGhhdCBJIGRvbid0IGtub3cgaG93IHRvIGRlY29kZSkuCisJCSAqLworCWNhc2UgMHgwMzI4OgkvKiA2NDB4NDgwLCBiZXN0IHF1YWxpdHkgY29tcHJlc3Npb24gKi8KKwljYXNlIDB4MDM2ODoJLyogNjQweDQ4MCwgYmVzdCBmcmFtZSByYXRlIGNvbXByZXNzaW9uICovCisJY2FzZSAweDAyMjg6CS8qIDMyMHgyNDAsIGJlc3QgcXVhbGl0eSBjb21wcmVzc2lvbiAqLworCWNhc2UgMHgwMjY4OgkvKiAzMjB4MjQwLCBiZXN0IGZyYW1lIHJhdGUgY29tcHJlc3Npb24gKi8KKwljYXNlIDB4MDJDQToJLyogMTYweDEyMCwgYmVzdCBxdWFsaXR5IGNvbXByZXNzaW9uICovCisJY2FzZSAweDAyRUE6CS8qIDE2MHgxMjAsIGJlc3QgZnJhbWUgcmF0ZSBjb21wcmVzc2lvbiAqLworCQkvKiBEbyBub3RoaW5nIHdpdGggdGhpcyAtIG5vdCBzdXBwb3J0ZWQgKi8KKwkJZXJyKCJVbnN1cHBvcnRlZCBtb2RlICQlMDRseCIsIGZyYW1lLT5oZWFkZXIpOworCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJZGVmYXVsdDoKKwkJLyogQ2F0Y2ggdW5rbm93biBoZWFkZXJzLCBtYXkgaGVscCBpbiBsZWFybmluZyBuZXcgaGVhZGVycyAqLworCQllcnIoIlN0cmFuZ2UgZnJhbWUtPmhlYWRlcj0kJTA4bHgiLCBmcmFtZS0+aGVhZGVyKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgb3VyIHdyaXRpbmcgaW50byBvdXRwdXQgYnVmZmVyCisJICogd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIuIE5vdGUgdGhhdCB3ZSBtYXkgd3JpdGUKKwkgKiBub3QgaW50byBjdXJyZW50IG91dHB1dCBzY2FubGluZSBidXQgaW4gc2V2ZXJhbCBhZnRlcgorCSAqIGl0IGFzIHdlbGwgKGlmIHdlIGVubGFyZ2UgaW1hZ2UgdmVydGljYWxseS4pCisJICovCisJaWYgKChmcmFtZS0+Y3VybGluZSArIDEpID49IGRhdGFfaCkgeworCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKQorCQkJaW5mbygiUmVhY2hlZCBsaW5lICVkLiAoZnJhbWUgaXMgZG9uZSkiLCBmcmFtZS0+Y3VybGluZSk7CisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJbGVuID0gMyAqIGRhdGFfdzsgLyogPHktZGF0YT4gPHV2LWRhdGE+ICovCisJYXNzZXJ0KGxlbiA8PSBzaXplb2YobGluZUJ1ZmZlcikpOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA8IGxlbikKKwkJcmV0dXJuIHNjYW5fT3V0OworCisJLyogU3VjayBvbmUgbGluZSBvdXQgb2YgdGhlIHJpbmcgcXVldWUgKi8KKwlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgbGluZUJ1ZmZlciwgbGVuKTsKKworCWRhdGEgPSBsaW5lQnVmZmVyOworCWNvbG9yID0gZGF0YSArIGRhdGFfdzsJCS8qIFBvaW50IHRvIHdoZXJlIGNvbG9yIHBsYW5lcyBiZWdpbiAqLworCisJLyogQm90dG9tLXRvLXRvcCBzY2FubmluZyAqLworCXJ3ID0gKGludClWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkgLSAoaW50KShmcmFtZS0+Y3VybGluZSkgLSAxOworCVJFU1RSSUNUX1RPX1JBTkdFKHJ3LCAwLCBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCktMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspIHsKKwkJaW50IHksIHJ2LCBndiwgYnY7CS8qIFJHQiBjb21wb25lbnRzICovCisKKwkJaWYgKGkgPCBkYXRhX3cpIHsKKwkJCXkgPSBkYXRhW2ldOwkvKiBMdW1pbm9zaXR5IGlzIHRoZSBmaXJzdCBsaW5lICovCisKKwkJCS8qIEFwcGx5IHN0YXRpYyBjb2xvciBjb3JyZWN0aW9uICovCisJCQl1ID0gY29sb3JbaSoyXSArIGh1ZV9jb3JyOworCQkJdiA9IGNvbG9yW2kqMiArIDFdICsgaHVlMl9jb3JyOworCisJCQkvKiBBcHBseSBjb2xvciBjb3JyZWN0aW9uICovCisJCQlpZiAoY29sb3JfY29yciAhPSAwKSB7CisJCQkJLyogTWFnbmlmeSB1cCB0byAyIHRpbWVzLCByZWR1Y2UgZG93biB0byB6ZXJvIHNhdHVyYXRpb24gKi8KKwkJCQl1ID0gMTI4ICsgKChjY20gKyBjb2xvcl9jb3JyKSAqICh1IC0gMTI4KSkgLyBjY207CisJCQkJdiA9IDEyOCArICgoY2NtICsgY29sb3JfY29ycikgKiAodiAtIDEyOCkpIC8gY2NtOworCQkJfQorCQl9IGVsc2UKKwkJCXkgPSAwLCB1ID0gdiA9IDEyODsKKworCQlZVVZfVE9fUkdCX0JZX1RIRV9CT09LKHksIHUsIHYsIHJ2LCBndiwgYnYpOworCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgaSwgcncsIHJ2LCBndiwgYnYpOyAvKiBEb25lIGJ5IGRlaW50ZXJsYWNpbmcgbm93ICovCisJfQorCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX0ZpbGxFdmVuTGluZXM7CisKKwkvKgorCSAqIEFjY291bnQgZm9yIG51bWJlciBvZiBieXRlcyB0aGF0IHdlIHdyb3RlIGludG8gb3V0cHV0IFY0TCBmcmFtZS4KKwkgKiBXZSBkbyBpdCBoZXJlLCBhZnRlciB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzY2FubGluZSwgYmVjYXVzZSB3ZQorCSAqIG1heSBmaWxsIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHNjYW5saW5lIGlmIHdlIGRvIHZlcnRpY2FsCisJICogZW5sYXJnZW1lbnQuCisJICovCisJZnJhbWUtPmN1cmxpbmUgKz0gMjsKKwkqcGNvcHlsZW4gKz0gMiAqIHY0bF9saW5lc2l6ZTsKKworCWlmIChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMykgeworCQkJaW5mbygiQWxsIHJlcXVlc3RlZCBsaW5lcyAoJWxkLikgZG9uZS4iLAorCQkJICAgICBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOworCQl9CisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwl9IGVsc2UKKwkJcmV0dXJuIHNjYW5fQ29udGludWU7Cit9CisKKy8qCisgKiBpYm1jYW1fbW9kZWw0XzEyOHg5Nl9wYXJzZV9saW5lcygpCisgKgorICogVGhpcyBkZWNvZGVyIGlzIGZvciBvbmUgc3RyYW5nZSBkYXRhIGZvcm1hdCB0aGF0IGlzIHByb2R1Y2VkIGJ5IE1vZGVsIDQKKyAqIGNhbWVyYSBvbmx5IGluIDEyOHg5NiBtb2RlLiBUaGlzIGlzIFJHQiBmb3JtYXQgYW5kIGhlcmUgaXMgaXRzIGRlc2NyaXB0aW9uLgorICogRmlyc3Qgb2YgYWxsLCB0aGlzIGlzIG5vbi1pbnRlcmxhY2VkIHN0cmVhbSwgbWVhbmluZyB0aGF0IGFsbCBzY2FuIGxpbmVzCisgKiBhcmUgcHJlc2VudCBpbiB0aGUgZGF0YXN0cmVhbS4gVGhlcmUgYXJlIDk2IGNvbnNlY3V0aXZlIGJsb2NrcyBvZiBkYXRhCisgKiB0aGF0IGRlc2NyaWJlIGFsbCA5NiBsaW5lcyBvZiB0aGUgaW1hZ2UuIEVhY2ggYmxvY2sgaXMgNSoxMjggYnl0ZXMgbG9uZworICogYW5kIGNhcnJpZXMgUiwgRywgQiBjb21wb25lbnRzLiBUaGUgZm9ybWF0IG9mIHRoZSBibG9jayBpcyBzaG93biBpbiB0aGUKKyAqIGNvZGUgYmVsb3cuIEZpcnN0IDEyOCoyIGJ5dGVzIGFyZSBpbnRlcmxlYXZlZCBSIGFuZCBHIGNvbXBvbmVudHMuIFRoZW4KKyAqIHdlIGhhdmUgYSBnYXAgKGp1bmsgZGF0YSkgNjQgYnl0ZXMgbG9uZy4gVGhlbiBmb2xsb3cgQiBhbmQgc29tZXRoaW5nCisgKiBlbHNlLCBhbHNvIGludGVybGVhdmVkICh0aGlzIG1ha2VzIGFub3RoZXIgMTI4KjIgYnl0ZXMpLiBBZnRlciB0aGF0CisgKiBwcm9iYWJseSBhbm90aGVyIDY0IGJ5dGVzIG9mIGp1bmsgZm9sbG93LgorICoKKyAqIEhpc3Rvcnk6CisgKiAxMC1GZWItMjAwMSBDcmVhdGVkLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDRfMTI4eDk2X3BhcnNlX2xpbmVzKAorCXN0cnVjdCB1dmQgKnV2ZCwKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCWxvbmcgKnBjb3B5bGVuKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGFfcnYsICpkYXRhX2d2LCAqZGF0YV9idjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBpLCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWNvbnN0IGludCBkYXRhX3c9MTI4LCBkYXRhX2g9OTY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlclsxMjgqNV07CisKKwl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZGF0YV9oKSB7CisJCWlmICh1dmQtPmRlYnVnID49IDMpCisJCQlpbmZvKCJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKSIsIGZyYW1lLT5jdXJsaW5lKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKworCS8qCisJICogUkdSR1JHIC4uLi4gUkdSR19fX19fX19fX19fX19CP0I/Qj8gLi4uIEI/Qj9fX19fX19fX19fX18KKwkgKiA8LS0tLSAxMjgqMiAtLS0+PC0tLS0gNjQgLS0tPjwtLS0gMTI4KjIgLS0tPjwtLS0gNjQgLS0tPgorCSAqLworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWxlbiA9IDUgKiBkYXRhX3c7CisJYXNzZXJ0KGxlbiA8PSBzaXplb2YobGluZUJ1ZmZlcikpOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA8IGxlbikKKwkJcmV0dXJuIHNjYW5fT3V0OworCisJLyogU3VjayBvbmUgbGluZSBvdXQgb2YgdGhlIHJpbmcgcXVldWUgKi8KKwlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgbGluZUJ1ZmZlciwgbGVuKTsKKworCWRhdGFfcnYgPSBsaW5lQnVmZmVyOworCWRhdGFfZ3YgPSBsaW5lQnVmZmVyICsgMTsKKwlkYXRhX2J2ID0gbGluZUJ1ZmZlciArIGRhdGFfdyoyICsgZGF0YV93LzI7CisJZm9yIChpID0gMDsgaSA8IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCWludCBydiwgZ3YsIGJ2OwkvKiBSR0IgY29tcG9uZW50cyAqLworCQlpZiAoaSA8IGRhdGFfdykgeworCQkJY29uc3QgaW50IGogPSBpICogMjsKKwkJCWd2ID0gZGF0YV9ydltqXTsKKwkJCXJ2ID0gZGF0YV9ndltqXTsKKwkJCWJ2ID0gZGF0YV9idltqXTsKKwkJCWlmIChmbGFncyAmIEZMQUdTX01PTk9DSFJPTUUpIHsKKwkJCQl1bnNpZ25lZCBsb25nIHk7CisJCQkJeSA9IHJ2ICsgZ3YgKyBidjsKKwkJCQl5IC89IDM7CisJCQkJaWYgKHkgPiAweEZGKQorCQkJCQl5ID0gMHhGRjsKKwkJCQlydiA9IGd2ID0gYnYgPSAodW5zaWduZWQgY2hhcikgeTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJ2ID0gZ3YgPSBidiA9IDA7CisJCX0KKwkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGZyYW1lLT5jdXJsaW5lLCBydiwgZ3YsIGJ2KTsKKwl9CisJZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfTm9uZTsKKwlmcmFtZS0+Y3VybGluZSsrOworCSpwY29weWxlbiArPSB2NGxfbGluZXNpemU7CisKKwlpZiAoZnJhbWUtPmN1cmxpbmUgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSB7CisJCWlmICh1dmQtPmRlYnVnID49IDMpIHsKKwkJCWluZm8oIkFsbCByZXF1ZXN0ZWQgbGluZXMgKCVsZC4pIGRvbmUuIiwKKwkJCSAgICAgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKKwkJfQorCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJfSBlbHNlCisJCXJldHVybiBzY2FuX0NvbnRpbnVlOworfQorCisvKgorICogaWJtY2FtX1Byb2Nlc3NJc29jRGF0YSgpCisgKgorICogR2VuZXJpYyByb3V0aW5lIHRvIHBhcnNlIHRoZSByaW5nIHF1ZXVlIGRhdGEuIEl0IGVtcGxveXMgZWl0aGVyCisgKiBpYm1jYW1fZmluZF9oZWFkZXIoKSBvciBpYm1jYW1fcGFyc2VfbGluZXMoKSB0byBkbyBtb3N0CisgKiBvZiB3b3JrLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIxLzAwICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fUHJvY2Vzc0lzb2NEYXRhKHN0cnVjdCB1dmQgKnV2ZCwKKwkJCQkgICBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWVudW0gUGFyc2VTdGF0ZSBuZXdzdGF0ZTsKKwlsb25nIGNvcHlsZW4gPSAwOworCWludCBtb2QgPSBJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWw7CisKKwl3aGlsZSAoMSkgeworCQluZXdzdGF0ZSA9IHNjYW5fT3V0OworCQlpZiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPiAwKSB7CisJCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpIHsKKwkJCQluZXdzdGF0ZSA9IGlibWNhbV9maW5kX2hlYWRlcih1dmQpOworCQkJfSBlbHNlIGlmIChmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9MaW5lcykgeworCQkJCWlmICgobW9kID09IElCTUNBTV9NT0RFTF8yKSAmJgorCQkJCSAgICAoKHV2ZC0+dmlkZW9zaXplID09IFZJREVPU0laRV8zNTJ4Mjg4KSB8fAorCQkJCSAgICAgKHV2ZC0+dmlkZW9zaXplID09IFZJREVPU0laRV8zMjB4MjQwKSB8fAorCQkJCSAgICAgKHV2ZC0+dmlkZW9zaXplID09IFZJREVPU0laRV8zNTJ4MjQwKSkpCisJCQkJeworCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcygKKwkJCQkJCXV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQl9IGVsc2UgaWYgKG1vZCA9PSBJQk1DQU1fTU9ERUxfNCkgeworCQkJCQkvKgorCQkJCQkgKiBNb2RlbCA0IGNhbWVyYXMgKElCTSBOZXRDYW1lcmEpIHVzZSBNb2RlbCAyIGRlY29kZXIgKFJHQikKKwkJCQkJICogZm9yIDMyMHgyNDAgYW5kIGFib3ZlOyAxNjB4MTIwIGFuZCAxNzZ4MTQ0IHVzZXMgTW9kZWwgMQorCQkJCQkgKiBkZWNvZGVyIChZVVYpLCBhbmQgMTI4eDk2IG1vZGUgdXNlcyA/Pz8KKwkJCQkJICovCisJCQkJCWlmICgodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyODgpIHx8CisJCQkJCSAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzMyMHgyNDApIHx8CisJCQkJCSAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyNDApKQorCQkJCQl7CisJCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJCX0gZWxzZSBpZiAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzEyOHg5NikgeworCQkJCQkJbmV3c3RhdGUgPSBpYm1jYW1fbW9kZWw0XzEyOHg5Nl9wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKG1vZCA9PSBJQk1DQU1fTU9ERUxfMykgeworCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDNfcGFyc2VfbGluZXModXZkLCBmcmFtZSwgJmNvcHlsZW4pOworCQkJCX0gZWxzZSB7CisJCQkJCW5ld3N0YXRlID0gaWJtY2FtX3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKG5ld3N0YXRlID09IHNjYW5fQ29udGludWUpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoKG5ld3N0YXRlID09IHNjYW5fTmV4dEZyYW1lKSB8fCAobmV3c3RhdGUgPT0gc2Nhbl9PdXQpKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXJldHVybjsgLyogc2Nhbl9FbmRQYXJzZSAqLworCX0KKworCWlmIChuZXdzdGF0ZSA9PSBzY2FuX05leHRGcmFtZSkgeworCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfRG9uZTsKKwkJdXZkLT5jdXJmcmFtZSA9IC0xOworCQl1dmQtPnN0YXRzLmZyYW1lX251bSsrOworCQlpZiAoKG1vZCA9PSBJQk1DQU1fTU9ERUxfMikgfHwgKG1vZCA9PSBJQk1DQU1fTU9ERUxfNCkpIHsKKwkJCS8qIE5lZWQgc29mdHdhcmUgY29udHJhc3QgYWRqdXN0bWVudCBmb3IgdGhvc2UgY2FtZXJhcyAqLworCQkJZnJhbWUtPmZsYWdzIHw9IFVTQlZJREVPX0ZSQU1FX0ZMQUdfU09GVFdBUkVfQ09OVFJBU1Q7CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgdGhlIGZyYW1lJ3MgdW5jb21wcmVzc2VkIGxlbmd0aC4gKi8KKwlmcmFtZS0+c2VxUmVhZF9MZW5ndGggKz0gY29weWxlbjsKKworI2lmIDAKKwl7CisJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGo9MDsKKwkJbWVtc2V0KGZyYW1lLT5kYXRhLCBqKyssIHV2ZC0+bWF4X2ZyYW1lX3NpemUpOworCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfUmVhZHk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBpYm1jYW1fdmVpbygpCisgKgorICogSGlzdG9yeToKKyAqIDEvMjcvMDAgIEFkZGVkIGNoZWNrIGZvciBkZXYgPT0gTlVMTDsgdGhpcyBoYXBwZW5zIGlmIGNhbWVyYSBpcyB1bnBsdWdnZWQuCisgKi8KK3N0YXRpYyBpbnQgaWJtY2FtX3ZlaW8oCisJc3RydWN0IHV2ZCAqdXZkLAorCXVuc2lnbmVkIGNoYXIgcmVxLAorCXVuc2lnbmVkIHNob3J0IHZhbHVlLAorCXVuc2lnbmVkIHNob3J0IGluZGV4KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fdmVpbyI7CisJdW5zaWduZWQgY2hhciBjcFs4XSAvKiA9IHsgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiB9ICovOworCWludCBpOworCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVxID09IDEpIHsKKwkJaSA9IHVzYl9jb250cm9sX21zZygKKwkJCXV2ZC0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJY3AsCisJCQlzaXplb2YoY3ApLAorCQkJMTAwMCk7CisjaWYgMAorCQlpbmZvKCJVU0IgPT4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkgICAgICAgIihyZXE9JCUwMnggdmFsPSQlMDR4IGluZD0kJTA0eCkiLAorCQkgICAgICAgY3BbMF0sY3BbMV0sY3BbMl0sY3BbM10sY3BbNF0sY3BbNV0sY3BbNl0sY3BbN10sCisJCSAgICAgICByZXEsIHZhbHVlLCBpbmRleCk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlpID0gdXNiX2NvbnRyb2xfbXNnKAorCQkJdXZkLT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUodXZkLT5kZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJTlVMTCwKKwkJCTAsCisJCQkxMDAwKTsKKwl9CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IEVSUk9SPSVkLiBDYW1lcmEgc3RvcHBlZDsgUmVjb25uZWN0IG9yIHJlbG9hZCBkcml2ZXIuIiwKKwkJICAgIHByb2MsIGkpOworCQl1dmQtPmxhc3RfZXJyb3IgPSBpOworCX0KKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIGlibWNhbV9jYWxjdWxhdGVfZnBzKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSByb3VnaGx5IGNhbGN1bGF0ZXMgdGhlIHJlYWwgZnJhbWUgcmF0ZSBiYXNlZAorICogb24gRlBTIGNvZGUgKGZyYW1lcmF0ZT1OTk4gb3B0aW9uKS4gQWN0dWFsIEZQUyBkaWZmZXJzCisgKiBzbGlnaHRseSBkZXBlbmRpbmcgb24gbGlnaHRpbmcgY29uZGl0aW9ucywgc28gdGhhdCBhY3R1YWwgZnJhbWUKKyAqIHJhdGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY2FtZXJhLiBTaW5jZSBJIGRvbid0IGtub3cgaG93IHRvIGFzaworICogdGhlIGNhbWVyYSB3aGF0IEZQUyBpcyBub3cgSSBoYXZlIHRvIHVzZSB0aGUgRlBTIGNvZGUgaW5zdGVhZC4KKyAqCisgKiBUaGUgRlBTIGNvZGUgaXMgaW4gcmFuZ2UgWzAuLjZdLCAwIGlzIHNsb3dlc3QsIDYgaXMgZmFzdGVzdC4KKyAqIENvcnJlc3BvbmRpbmcgcmVhbCBGUFMgc2hvdWxkIGJlIGluIHJhbmdlIFszLi4zMF0gZnJhbWVzIHBlciBzZWNvbmQuCisgKiBUaGUgY29udmVyc2lvbiBmb3JtdWxhIGlzIG9idmlvdXM6CisgKgorICogcmVhbF9mcHMgPSAzICsgKGZwc19jb2RlICogNC41KQorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzE4LzAwICBDcmVhdGVkLgorICovCitzdGF0aWMgaW50IGlibWNhbV9jYWxjdWxhdGVfZnBzKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlyZXR1cm4gMyArIGZyYW1lcmF0ZSo0ICsgZnJhbWVyYXRlLzI7Cit9CisKKy8qCisgKiBpYm1jYW1fc2VuZF9GRl8wNF8wMigpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgbWFnaWMgMy1jb21tYW5kIHByZWZpeCB0byB0aGUgY2FtZXJhLgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBwcmVmaXggaXMgbm90IGtub3duLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIvMDAgICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF9GRl8wNF8wMihzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwRkYsIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kXzAwXzA0XzA2KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMChzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kX3hfMDBfMDUoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB4KQoreworCWlibWNhbV9zZW5kX3hfMDAodXZkLCB4KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMF8wNV8wMihzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDUsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kX3hfMDFfMDBfMDUoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB4KQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgeCwgICAgICAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA1LCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzAxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMF8wNV8wMl8wOF8wMShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDUsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9QYWNrZXRfRm9ybWF0MShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIGNoYXIgZmtleSwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJaWJtY2FtX3NlbmRfeF8wMV8wMF8wNSh1dmQsIHVua25vd25fODgpOworCWlibWNhbV9zZW5kX3hfMDBfMDUodXZkLCBma2V5KTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzA4XzAxKHV2ZCwgdmFsKTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1KHV2ZCwgdW5rbm93bl84OCk7CisJaWJtY2FtX3NlbmRfeF8wMF8wNV8wMl8wMSh1dmQsIGZrZXkpOworCWlibWNhbV9zZW5kX3hfMDBfMDUodXZkLCB1bmtub3duXzg5KTsKKwlpYm1jYW1fc2VuZF94XzAwKHV2ZCwgZmtleSk7CisJaWJtY2FtX3NlbmRfMDBfMDRfMDYodXZkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTI2KTsKKwlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fUGFja2V0Rm9ybWF0MihzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIGNoYXIgZmtleSwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJaWJtY2FtX3NlbmRfeF8wMV8wMF8wNQkodXZkLCB1bmtub3duXzg4KTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1CSh1dmQsIGZrZXkpOworCWlibWNhbV9zZW5kX3hfMDBfMDVfMDIJKHV2ZCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsMl9QYWNrZXQyKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmZiwgMHgwMTJkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhMywgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsMl9QYWNrZXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgdjEsIHVuc2lnbmVkIHNob3J0IHYyKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZmLCAweDAxMmUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjEsICAgICAweDAxMmYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZmLCAweDAxMzApOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjNzE5LCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjIsICAgICAweDAxMjcpOworCisJaWJtY2FtX21vZGVsMl9QYWNrZXQyKHV2ZCk7Cit9CisKKy8qCisgKiBpYm1jYW1fbW9kZWwzX1BhY2tldDEoKQorICoKKyAqIDAwXzAwNzhfMDEyZAkKKyAqIDAwXzAwOTdfMDEyZgorICogMDBfZDE0MV8wMTI0CQorICogMDBfMDA5Nl8wMTI3CisgKiAwMF9mZWE4XzAxMjQJCisqLworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsM19QYWNrZXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgdjEsIHVuc2lnbmVkIHNob3J0IHYyKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjEsICAgICAweDAxMmYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgdjIsICAgICAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWw0X0JyaWdodG5lc3NQYWNrZXQoc3RydWN0IHV2ZCAqdXZkLCBpbnQgaSkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyNiwgMHgwMTJmKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIGksICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJkKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKK30KKworLyoKKyAqIGlibWNhbV9hZGp1c3RfY29udHJhc3QoKQorICoKKyAqIFRoZSBjb250cmFzdCB2YWx1ZSBjaGFuZ2VzIGZyb20gMCAoaGlnaCBjb250cmFzdCkgdG8gMTUgKGxvdyBjb250cmFzdCkuCisgKiBUaGlzIGlzIGluIHJldmVyc2UgdG8gdXN1YWwgb3JkZXIgb2YgdGhpbmdzIChzdWNoIGFzIFRWIGNvbnRyb2xzKSwgc28KKyAqIHdlIHJldmVyc2UgaXQgYWdhaW4gaGVyZS4KKyAqCisgKiBUT0RPOiB3ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHNlbmQgdGhlIHNldHVwIDUgdGltZXMuLi4KKyAqCisgKiBIaXN0b3J5OgorICogMS8yLzAwICAgQ3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX2FkanVzdF9jb250cmFzdChzdHJ1Y3QgdXZkICp1dmQpCit7CisJdW5zaWduZWQgY2hhciBhX2NvbnRyYXN0ID0gdXZkLT52cGljLmNvbnRyYXN0ID4+IDEyOworCXVuc2lnbmVkIGNoYXIgbmV3X2NvbnRyYXN0OworCisJaWYgKGFfY29udHJhc3QgPj0gMTYpCisJCWFfY29udHJhc3QgPSAxNTsKKwluZXdfY29udHJhc3QgPSAxNSAtIGFfY29udHJhc3Q7CisJaWYgKG5ld19jb250cmFzdCA9PSB1dmQtPnZwaWNfb2xkLmNvbnRyYXN0KQorCQlyZXR1cm47CisJdXZkLT52cGljX29sZC5jb250cmFzdCA9IG5ld19jb250cmFzdDsKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQljb25zdCBpbnQgbnRyaWVzID0gNTsKKwkJaW50IGk7CisJCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspIHsKKwkJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGNvbnRyYXN0XzE0LCBuZXdfY29udHJhc3QpOworCQkJaWJtY2FtX3NlbmRfRkZfMDRfMDIodXZkKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCQkvKiBNb2RlbHMgMiwgNCBkbyBub3QgaGF2ZSB0aGlzIGNvbnRyb2w7IGltcGxlbWVudGVkIGluIHNvZnR3YXJlLiAqLworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsJLyogUHJlc2V0IGhhcmR3YXJlIHZhbHVlcyAqLworCQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJCXVuc2lnbmVkIHNob3J0IGN2MTsKKwkJCXVuc2lnbmVkIHNob3J0IGN2MjsKKwkJCXVuc2lnbmVkIHNob3J0IGN2MzsKKwkJfSBjdls3XSA9IHsKKwkJCXsgMHgwNSwgMHgwNSwgMHgwZiB9LAkvKiBNaW5pbXVtICovCisJCQl7IDB4MDQsIDB4MDQsIDB4MTYgfSwKKwkJCXsgMHgwMiwgMHgwMywgMHgxNiB9LAorCQkJeyAweDAyLCAweDA4LCAweDE2IH0sCisJCQl7IDB4MDEsIDB4MGMsIDB4MTYgfSwKKwkJCXsgMHgwMSwgMHgwZSwgMHgxNiB9LAorCQkJeyAweDAxLCAweDEwLCAweDE2IH0JLyogTWF4aW11bSAqLworCQl9OworCQlpbnQgaSA9IGFfY29udHJhc3QgLyAyOworCQlSRVNUUklDVF9UT19SQU5HRShpLCAwLCA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY3LCBjdltpXS5jdjEpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWIsIGN2W2ldLmN2Mik7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YywgY3ZbaV0uY3YzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBHbyEgKi8KKwkJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMoKQorICoKKyAqIENhbWVyYSBtb2RlbCAxOgorICogV2UgaGF2ZSAzIGxldmVscyBvZiBsaWdodGluZyBjb25kaXRpb25zOiAwPUJyaWdodCwgMT1NZWRpdW0sIDI9TG93LgorICoKKyAqIENhbWVyYSBtb2RlbCAyOgorICogV2UgaGF2ZSAxNiBsZXZlbHMgb2YgbGlnaHRpbmcsIDAgZm9yIGJyaWdodCBsaWdodCBhbmQgdXAgdG8gMTUgZm9yCisgKiBsb3cgbGlnaHQuIEJ1dCB2YWx1ZXMgYWJvdmUgNSBvciBzbyBhcmUgdXNlbGVzcyBiZWNhdXNlIGNhbWVyYSBpcworICogbm90IHJlYWxseSBjYXBhYmxlIHRvIHByb2R1Y2UgYW55dGhpbmcgd29ydGggdmlld2luZyBhdCBzdWNoIGxpZ2h0LgorICogVGhpcyBzZXR0aW5nIG1heSBiZSBhbHRlcmVkIG9ubHkgaW4gY2VydGFpbiBjYW1lcmEgc3RhdGUuCisgKgorICogTG93IGxpZ2h0aW5nIGZvcmNlcyBzbG93ZXIgRlBTLiBMaWdodGluZyBpcyBzZXQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzUvMDAgICBDcmVhdGVkLgorICogMi8yMC8wMCAgQWRkZWQgc3VwcG9ydCBmb3IgTW9kZWwgMiBjYW1lcmFzLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMiOworCisJaWYgKGRlYnVnID4gMCkKKwkJaW5mbygiJXM6IFNldCBsaWdodGluZyB0byAlaHUuIiwgcHJvYywgbGlnaHRpbmcpOworCisJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCXsKKwkJY29uc3QgaW50IG50cmllcyA9IDU7CisJCWludCBpOworCQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgbGlnaHRfMjcsICh1bnNpZ25lZCBzaG9ydCkgbGlnaHRpbmcpOworCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKyNpZiAwCisJCS8qCisJCSAqIFRoaXMgY29tbWFuZCBhcHBhcmVudGx5IHJlcXVpcmVzIGNhbWVyYSB0byBiZSBzdG9wcGVkLiBNeQorCQkgKiBleHBlcmltZW50cyBzaG93ZWQgdGhhdCBpdCAtaXMtIHBvc3NpYmxlIHRvIGFsdGVyIHRoZSBsaWdodGluZworCQkgKiBjb25kaXRpb25zIHNldHRpbmcgIm9uIHRoZSBmbHkiLCBidXQgd2h5IGJvdGhlcj8gVGhpcyBzZXR0aW5nIGRvZXMKKwkJICogbm90IHdvcmsgcmVsaWFibHkgaW4gYWxsIGNhc2VzLCBzbyBJIGRlY2lkZWQgc2ltcGx5IHRvIGxlYXZlIHRoZQorCQkgKiBzZXR0aW5nIHdoZXJlIFhpcmxpbmsgcHV0IGl0IC0gaW4gdGhlIGNhbWVyYSBzZXR1cCBwaGFzZS4gVGhpcyBjb2RlCisJCSAqIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCBkb2VzIG5vdCB3b3JrIGF0IC1hbnktIG1vbWVudCwgc28gaXRzCisJCSAqIHByZXNlbmNlIG1ha2VzIG5vIHNlbnNlLiBZb3UgbWF5IHVzZSBpdCBmb3IgZXhwZXJpbWVudHMuCisJCSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCBjYW1lcmEgKi8KKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zZW5zaXRpdml0eSwgbGlnaHRpbmcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogU3RhcnQgY2FtZXJhICovCisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIGlibWNhbV9zZXRfc2hhcnBuZXNzKCkKKyAqCisgKiBDYW1lcmFzIG1vZGVsIDEgaGF2ZSBpbnRlcm5hbCBzbW9vdGhpbmcgZmVhdHVyZS4gSXQgaXMgY29udHJvbGxlZCBieSB2YWx1ZSBpbgorICogcmFuZ2UgWzAuLjZdLCB3aGVyZSAwIGlzIG1vc3Qgc21vb3RoIGFuZCA2IGlzIG1vc3Qgc2hhcnAgKHJhdyBpbWFnZSwgSSBndWVzcykuCisgKiBSZWNvbW1lbmRlZCB2YWx1ZSBpcyA0LiBDYW1lcmFzIG1vZGVsIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlIGF0IGFsbC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX3NldF9zaGFycG5lc3Moc3RydWN0IHV2ZCAqdXZkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fc2V0X3NoYXJwbmVzcyI7CisKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FbXSA9IHsgMHgxMSwgMHgxMywgMHgxNiwgMHgxOCwgMHgxYSwgMHg4LCAweDBhIH07CisJCXVuc2lnbmVkIHNob3J0IGksIHN2OworCisJCVJFU1RSSUNUX1RPX1JBTkdFKHNoYXJwbmVzcywgU0hBUlBORVNTX01JTiwgU0hBUlBORVNTX01BWCk7CisJCWlmIChkZWJ1ZyA+IDApCisJCQlpbmZvKCIlczogU2V0IHNoYXJwbmVzcyB0byAlaHUuIiwgcHJvYywgc2hhcnBuZXNzKTsKKworCQlzdiA9IHNhW3NoYXJwbmVzcyAtIFNIQVJQTkVTU19NSU5dOworCQlmb3IgKGk9MDsgaSA8IDI7IGkrKykgeworCQkJaWJtY2FtX3NlbmRfeF8wMV8wMF8wNQkodXZkLCB1bmtub3duXzg4KTsKKwkJCWlibWNhbV9zZW5kX3hfMDBfMDUJCSh1dmQsIHNoYXJwXzEzKTsKKwkJCWlibWNhbV9zZW5kX3hfMDBfMDVfMDIJKHV2ZCwgc3YpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8yOgorCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJCS8qIE1vZGVscyAyLCA0IGRvIG5vdCBoYXZlIHRoaXMgY29udHJvbCAqLworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsJLyoKKwkJICogIlVzZSBhIHRhYmxlIG9mIG1hZ2ljIG51bWJlcnMuCisJCSAqICBUaGlzIHNldHRpbmcgZG9lc24ndCByZWFsbHkgY2hhbmdlIG11Y2guCisJCSAqICBCdXQgdGhhdCdzIGhvdyBXaW5kb3dzIGRvZXMgaXQuIgorCQkgKi8KKwkJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjE7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjI7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjM7CisJCQl1bnNpZ25lZCBzaG9ydCBzdjQ7CisJCX0gc3ZbN10gPSB7CisJCQl7IDB4MDAsIDB4MDAsIDB4MDUsIDB4MTQgfSwJLyogU21vb3RoZXN0ICovCisJCQl7IDB4MDEsIDB4MDQsIDB4MDUsIDB4MTQgfSwKKwkJCXsgMHgwMiwgMHgwNCwgMHgwNSwgMHgxNCB9LAorCQkJeyAweDAzLCAweDA0LCAweDA1LCAweDE0IH0sCisJCQl7IDB4MDMsIDB4MDUsIDB4MDUsIDB4MTQgfSwKKwkJCXsgMHgwMywgMHgwNiwgMHgwNSwgMHgxNCB9LAorCQkJeyAweDAzLCAweDA3LCAweDA1LCAweDE0IH0JLyogU2hhcnBlc3QgKi8KKwkJfTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2hhcnBuZXNzLCBTSEFSUE5FU1NfTUlOLCBTSEFSUE5FU1NfTUFYKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2hhcnBuZXNzLCAwLCA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYwLCBzdltzaGFycG5lc3NdLnN2MSk7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MSwgc3Zbc2hhcnBuZXNzXS5zdjIpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjIsIHN2W3NoYXJwbmVzc10uc3YzKTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYzLCBzdltzaGFycG5lc3NdLnN2NCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28hICovCisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTEzKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIGlibWNhbV9zZXRfYnJpZ2h0bmVzcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY2hhbmdlcyBicmlnaHRuZXNzIG9mIHRoZSBwaWN0dXJlLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fc2V0X2JyaWdodG5lc3Moc3RydWN0IHV2ZCAqdXZkKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fc2V0X2JyaWdodG5lc3MiOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBuID0gMTsKKworCWlmIChkZWJ1ZyA+IDApCisJCWluZm8oIiVzOiBTZXQgYnJpZ2h0bmVzcyB0byAlaHUuIiwgcHJvYywgdXZkLT52cGljLmJyaWdodG5lc3MpOworCisJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCXsKKwkJdW5zaWduZWQgc2hvcnQgaSwgaiwgYnZbM107CisJCWJ2WzBdID0gYnZbMV0gPSBidlsyXSA9IHV2ZC0+dnBpYy5icmlnaHRuZXNzID4+IDEwOworCQlpZiAoYnZbMF0gPT0gKHV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA+PiAxMCkpCisJCQlyZXR1cm47CisJCXV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9IGJ2WzBdOworCQlmb3IgKGo9MDsgaiA8IDM7IGorKykKKwkJCWZvciAoaT0wOyBpIDwgbjsgaSsrKQorCQkJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGJyaWdodF8zeFtqXSwgYnZbal0pOworCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwl7CisJCXVuc2lnbmVkIHNob3J0IGksIGo7CisJCWkgPSB1dmQtPnZwaWMuYnJpZ2h0bmVzcyA+PiAxMjsJLyogMCAuLiAxNSAqLworCQlqID0gMHg2MCArIGkgKiAoKDB4ZWUgLSAweDYwKSAvIDE2KTsJLyogMHg2MCAuLiAweGVlIG9yIHNvICovCisJCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaikKKwkJCWJyZWFrOworCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBqOworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2JyaWdodG5lc3MsIGopOworCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwl7CisJCS8qIE1vZGVsIDM6IEJyaWdodG5lc3MgcmFuZ2UgJ2knIGluIFsweDBDLi4weDNGXSAqLworCQl1bnNpZ25lZCBzaG9ydCBpID0KKwkJCTB4MEMgKyAodXZkLT52cGljLmJyaWdodG5lc3MgLyAoMHhGRkZGIC8gKDB4M0YgLSAweDBDICsgMSkpKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaSwgMHgwQywgMHgzRik7CisJCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaSkKKwkJCWJyZWFrOworCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzYsIGkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIEdvISAqLworCQl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExMyk7CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF80OgorCXsKKwkJLyogTW9kZWwgNDogQnJpZ2h0bmVzcyByYW5nZSAnaScgaW4gWzB4MDQuLjB4YjRdICovCisJCXVuc2lnbmVkIHNob3J0IGkgPSAweDA0ICsgKHV2ZC0+dnBpYy5icmlnaHRuZXNzIC8gKDB4RkZGRiAvICgweGI0IC0gMHgwNCArIDEpKSk7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGksIDB4MDQsIDB4YjQpOworCQlpZiAodXZkLT52cGljX29sZC5icmlnaHRuZXNzID09IGkpCisJCQlicmVhazsKKwkJdXZkLT52cGljX29sZC5icmlnaHRuZXNzID0gaTsKKwkJaWJtY2FtX21vZGVsNF9CcmlnaHRuZXNzUGFja2V0KHV2ZCwgaSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZXRfaHVlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJeworCQl1bnNpZ25lZCBzaG9ydCBodWUgPSB1dmQtPnZwaWMuaHVlID4+IDk7IC8qIDAgLi4gN0YgKi8KKwkJaWYgKHV2ZC0+dnBpY19vbGQuaHVlID09IGh1ZSkKKwkJCXJldHVybjsKKwkJdXZkLT52cGljX29sZC5odWUgPSBodWU7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfaHVlLCBodWUpOworCQkvKiBpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NhdHVyYXRpb24sIHNhdCk7ICovCisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsKKyNpZiAwIC8qIFRoaXMgc2VlbXMgbm90IHRvIHdvcmsuIE5vIHByb2JsZW0sIHdpbGwgZml4IHByb2dyYW1tYXRpY2FsbHkgKi8KKwkJdW5zaWduZWQgc2hvcnQgaHVlID0gMHgwNSArICh1dmQtPnZwaWMuaHVlIC8gKDB4RkZGRiAvICgweDM3IC0gMHgwNSArIDEpKSk7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGh1ZSwgMHgwNSwgMHgzNyk7CisJCWlmICh1dmQtPnZwaWNfb2xkLmh1ZSA9PSBodWUpCisJCQlyZXR1cm47CisJCXV2ZC0+dnBpY19vbGQuaHVlID0gaHVlOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIGh1ZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28hICovCisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTEzKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwl7CisJCXVuc2lnbmVkIHNob3J0IHJfZ2FpbiwgZ19nYWluLCBiX2dhaW4sIGh1ZTsKKworCQkvKgorCQkgKiBJIGFtIG5vdCBzdXJlIHIvZy9iX2dhaW4gdmFyaWFibGVzIGV4YWN0bHkgY29udHJvbCBnYWluCisJCSAqIG9mIHRob3NlIGNoYW5uZWxzLiBNb3N0IGxpa2VseSB0aGV5IHN1YnRseSBjaGFuZ2Ugc29tZQorCQkgKiB2ZXJ5IGludGVybmFsIGltYWdlIHByb2Nlc3Npbmcgc2V0dGluZ3MgaW4gdGhlIGNhbWVyYS4KKwkJICogSW4gYW55IGNhc2UsIGhlcmUgaXMgd2hhdCB0aGV5IGRvLCBhbmQgZmVlbCBmcmVlIHRvIHR3ZWFrOgorCQkgKgorCQkgKiByX2dhaW46IHNlcmlvdXNseSBhZmZlY3RzIHJlZCBnYWluCisJCSAqIGdfZ2Fpbjogc2VyaW91c2x5IGFmZmVjdHMgZ3JlZW4gZ2FpbgorCQkgKiBiX2dhaW46IHNlcmlvdXNseSBhZmZlY3RzIGJsdWUgZ2FpbgorCQkgKiBodWU6IGNoYW5nZXMgYXZlcmFnZSBjb2xvciBmcm9tIHZpb2xldCAoMCkgdG8gcmVkICgweEZGKQorCQkgKgorCQkgKiBUaGVzZSBzZXR0aW5ncyBhcmUgcHJlc2V0IGZvciBhIGRlY2VudCB3aGl0ZSBiYWxhbmNlIGluCisJCSAqIDMyMHgyNDAsIDM1MngyODggbW9kZXMuIExvdy1yZXMgbW9kZXMgZXhoaWJpdCBoaWdoZXIgY29udHJhc3QKKwkJICogYW5kIHRoZXJlZm9yZSBtYXkgbmVlZCBkaWZmZXJlbnQgdmFsdWVzIGhlcmUuCisJCSAqLworCQlodWUgPSAyMCArICh1dmQtPnZwaWMuaHVlID4+IDkpOworCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJCXJfZ2FpbiA9IDkwOworCQkJZ19nYWluID0gMTY2OworCQkJYl9nYWluID0gMTc1OworCQkJYnJlYWs7CisJCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCQlyX2dhaW4gPSA3MDsKKwkJCWdfZ2FpbiA9IDE2NjsKKwkJCWJfZ2FpbiA9IDE4NTsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQkJcl9nYWluID0gMTYwOworCQkJZ19nYWluID0gMTc1OworCQkJYl9nYWluID0gMTg1OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyX2dhaW4gPSAxMjA7CisJCQlnX2dhaW4gPSAxNjY7CisJCQliX2dhaW4gPSAxNzU7CisJCQlicmVhazsKKwkJfQorCQlSRVNUUklDVF9UT19SQU5HRShodWUsIDEsIDB4N2YpOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgZ19nYWluLCAweDAxMjcpOwkvKiBHcmVlbiBnYWluICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgcl9nYWluLCAweDAxMmUpOwkvKiBSZWQgZ2FpbiAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGJfZ2FpbiwgMHgwMTMwKTsJLyogQmx1ZSBnYWluICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGh1ZSwgICAgMHgwMTJkKTsJLyogSHVlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmNTQ1LCAweDAxMjQpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogaWJtY2FtX2FkanVzdF9waWN0dXJlKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBnZXRzIGNhbGxlZCBmcm9tIFY0TCBpbnRlcmZhY2UgdG8gdXBkYXRlIHBpY3R1cmUgc2V0dGluZ3MuCisgKiBIZXJlIHdlIGNoYW5nZSBicmlnaHRuZXNzIGFuZCBjb250cmFzdC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX2FkanVzdF9waWN0dXJlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fYWRqdXN0X2NvbnRyYXN0KHV2ZCk7CisJaWJtY2FtX3NldF9icmlnaHRuZXNzKHV2ZCk7CisJaWJtY2FtX3NldF9odWUodXZkKTsKK30KKworc3RhdGljIGludCBpYm1jYW1fbW9kZWwxX3NldHVwKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwljb25zdCBpbnQgbnRyaWVzID0gNTsKKwlpbnQgaTsKKworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTI4KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDApOwkvKiBMRUQgT24gICovCisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMDApOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MSwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTAwKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwOCk7CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDMsIDB4MDExMik7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNiwgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDQ0LCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4NDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwZSwgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MTksIDB4MDEyYyk7CisKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDAwLCAweDFlKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDBkKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDA5KTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDNiLCAweDAwKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDI4LCAweDIyKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBsaWdodF8yNywgMCk7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyYiwgMHgxZik7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzOSwgMHgwOCk7CisKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJjLCAweDAwKTsKKworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzAsIDB4MTQpOworCisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDEsIDB4ZTEpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwMiwgMHhjZCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDAzLCAweGNkKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDQsIDB4ZmEpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzZiwgMHhmZik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAwKTsKKworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzOSwgMHgwMik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBhLCAweDM3KTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGIsIDB4YjgpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwYywgMHhmMyk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBkLCAweGUzKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGUsIDB4MGQpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwZiwgMHhmMik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDEwLCAweGQ1KTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTEsIDB4YmEpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxMiwgMHg1Myk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDNmLCAweGZmKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDApOworCisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTYsIDB4MDApOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxNywgMHgyOCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDE4LCAweDdkKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTksIDB4YmUpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzZiwgMHhmZik7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAwKTsKKworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MDAsIDB4MTgpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MTMsIDB4MTgpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MTQsIDB4MDYpOworCisJLyogVGhpcyBpcyBkZWZhdWx0IGJyaWdodG5lc3MgKi8KKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMxLCAweDM3KTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMyLCAweDQ2KTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMzLCAweDU1KTsKKworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmUsIDB4MDQpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmQsIDB4MDQpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MjksIDB4ODApOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmMsIDB4MDEpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzAsIDB4MTcpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzksIDB4MDgpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzQsIDB4MDApOworCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMDEpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTBhKTsKKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xMjh4OTY6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDYwLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MGMsIDB4MDEwYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFiKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwYiwgMHgwMTFkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMWUpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMjkpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YjAsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4ZiwgMHgwMTA1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA2LCAweDAxMGIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDExYik7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MGQsIDB4MDExZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTFlKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMywgMHgwMTI5KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGIwLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTAsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMiwgMHgwMTBiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWIpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA1LCAweDAxMWQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDExZSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEyOSk7CisJCWJyZWFrOworCX0KKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZiwgMHgwMTJiKTsKKworCS8qIFRoaXMgaXMgYW5vdGhlciBicmlnaHRuZXNzIC0gZG9uJ3Qga25vdyB3aHkgKi8KKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMxLCAweGMzKTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMyLCAweGQyKTsKKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMzLCAweGUxKTsKKworCS8qIERlZmF1bHQgY29udHJhc3QgKi8KKwlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBjb250cmFzdF8xNCwgMHgwYSk7CisKKwkvKiBEZWZhdWx0IHNoYXJwbmVzcyAqLworCWZvciAoaT0wOyBpIDwgMjsgaSsrKQorCQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIHNoYXJwXzEzLCAweDFhKTsJLyogTGV2ZWwgNCBGSVhNRSAqLworCisJLyogRGVmYXVsdCBsaWdodGluZyBjb25kaXRpb25zICovCisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgbGlnaHRfMjcsIGxpZ2h0aW5nKTsgLyogMD1CcmlnaHQgMj1Mb3cgKi8KKworCS8qIEFzc29ydGVkIGluaXQgKi8KKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xMjh4OTY6CisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MzYsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgxYSwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJiLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworI2lmIDAKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MzgsIDB4MDEwNyk7CisjZWxzZQorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDIsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyYSwgMHgwMTA3KTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJiLCAweDFlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGM5LCAweDAxMTkpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgwLCAweDAxMDkpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDIsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFhKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyYiwgMHgwMTFjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDIzLCAweDAxMmEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4Y2EsIDB4MDEwNyk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDgsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJmLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmNiwgMHgwMTA3KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkgPyAwIDogLUVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQgaWJtY2FtX21vZGVsMl9zZXR1cChzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CS8qIExFRCBvbiAqLworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDYwLCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMTIpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmIpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwkvKiAxNzZ4MTQ0LCAzNTJ4Mjg4ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI5LCAweDAxMGEpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMTkpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDkwLCAweDAxMDcpOwkvKiBVbmlxdWUgdG8gZXZlcnkgbW9kZSovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMDMpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOwkvKiAzMjB4MjQwLCAzNTJ4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5OCwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOwkvKiAzMjB4MjQwLCAzNTJ4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkYSwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwkvKiAxNzZ4MTQ0LCAzNTJ4Mjg4ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmZSwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLworCQlicmVhazsKKwl9CisJcmV0dXJuIChDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSA/IDAgOiAtRUZBVUxUKTsKK30KKworLyoKKyAqIGlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoKQorICoKKyAqIFRoaXMgY29kZSBhZGRzIGZpbmlzaGluZyB0b3VjaGVzIHRvIHRoZSB2aWRlbyBkYXRhIGludGVyZmFjZS4KKyAqIEhlcmUgd2UgY29uZmlndXJlIHRoZSBmcmFtZSByYXRlIGFuZCB0dXJuIG9uIHRoZSBMRUQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQoreworCXVuc2lnbmVkIHNob3J0IGludGVybmFsX2ZyYW1lX3JhdGU7CisKKwlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIEZSQU1FUkFURV9NSU4sIEZSQU1FUkFURV9NQVgpOworCWludGVybmFsX2ZyYW1lX3JhdGUgPSBGUkFNRVJBVEVfTUFYIC0gZnJhbWVyYXRlOyAvKiAwPUZhc3QgNj1TbG93ICovCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDApOwkvKiBMRUQgT24gICovCisJaWJtY2FtX3ZlaW8odXZkLCAwLCBpbnRlcm5hbF9mcmFtZV9yYXRlLCAweDAxMTEpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTE0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzAsIDB4MDEwYyk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDJfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQoreworCXVuc2lnbmVkIHNob3J0IHNldHVwX21vZGVsMl9yZzIsIHNldHVwX21vZGVsMl9zYXQsIHNldHVwX21vZGVsMl95YjsKKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOwkvKiBMRUQgb24gKi8KKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1MCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWJyZWFrOworCX0KKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKKworCS8qCisJICogSGFyZHdhcmUgc2V0dGluZ3MsIG1heSBhZmZlY3QgQ01PUyBzZW5zb3I7IG5vdCB1c2VyIGNvbnRyb2xzIQorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAweDAwMDQ6IG5vIGVmZmVjdAorCSAqIDB4MDAwNjogaGFyZHdhcmUgZWZmZWN0CisJICogMHgwMDA4OiBubyBlZmZlY3QKKwkgKiAweDAwMGE6IHN0b3BzIHZpZGVvIHN0cmVhbSwgcHJvYmFibHkgaW1wb3J0YW50IGgvdyBzZXR0aW5nCisJICogMHgwMDBjOiBjaGFuZ2VzIGNvbG9yIGluIGhhcmR3YXJlIG1hbm5lciAobm90IHVzZXIgc2V0dGluZykKKwkgKiAweDAwMTI6IGNoYW5nZXMgbnVtYmVyIG9mIGNvbG9ycyAoZG9lcyBub3QgYWZmZWN0IHNwZWVkKQorCSAqIDB4MDAyYTogbm8gZWZmZWN0CisJICogMHgwMDJjOiBoYXJkd2FyZSBzZXR0aW5nIChyZWxhdGVkIHRvIHNjYW4gbGluZXMpCisJICogMHgwMDJlOiBzdG9wcyB2aWRlbyBzdHJlYW0sIHByb2JhYmx5IGltcG9ydGFudCBoL3cgc2V0dGluZworCSAqLworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwYSwgMHgwMDVjKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMDQsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDA2LCAweDAwZmIpOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwOCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMGMsIDB4MDAwOSk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDEyLCAweDAwMGEpOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyYSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMmMsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDJlLCAweDAwMDgpOworCisJLyoKKwkgKiBGdW5jdGlvbiAweDAwMzAgcG9wcyB1cCBhbGwgb3ZlciB0aGUgcGxhY2UuIEFwcGFyZW50bHkKKwkgKiBpdCBpcyBhIGhhcmR3YXJlIGNvbnRyb2wgcmVnaXN0ZXIsIHdpdGggZXZlcnkgYml0IGFzc2lnbmVkIHRvCisJICogZG8gc29tZXRoaW5nLgorCSAqLworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDAwKTsKKworCS8qCisJICogTWFnaWMgY29udHJvbCBvZiBDTU9TIHNlbnNvci4gT25seSBsb3dlciB2YWx1ZXMgbGlrZQorCSAqIDAtMyB3b3JrLCBhbmQgcGljdHVyZSBzaGlmdHMgbGVmdCBvciByaWdodC4gRG9uJ3QgY2hhbmdlLgorCSAqLworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwMik7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNiwgMHgwMDAyKTsgLyogSG9yaXpvbnRhbCBzaGlmdCAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDA0YSk7IC8qIEFub3RoZXIgaGFyZHdhcmUgc2V0dGluZyAqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwOSk7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNiwgMHgwMDA1KTsgLyogSG9yaXpvbnRhbCBzaGlmdCAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDA0NCk7IC8qIEFub3RoZXIgaGFyZHdhcmUgc2V0dGluZyAqLworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCQkvKiBUaGlzIG1vZGUgZG9lc24ndCB3b3JrIGFzIFdpbmRvd3MgcHJvZ3JhbXMgaXQ7IGNoYW5nZWQgdG8gd29yayAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwOSk7IC8qIFdpbmRvd3Mgc2V0cyB0aGlzIHRvIDggKi8KKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDMpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDQ0KTsgLyogV2luZG93cyBzZXRzIHRoaXMgdG8gMHgwMDQ1ICovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDAzKTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDIpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDRhKTsgLyogQW5vdGhlciBoYXJkd2FyZSBzZXR0aW5nICovCisJCWJyZWFrOworCX0KKworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfYnJpZ2h0bmVzcywgMHgwMDVhKTsKKworCS8qCisJICogV2UgaGF2ZSBvdXIgb3duIGZyYW1lIHJhdGUgc2V0dGluZyB2YXJ5aW5nIGZyb20gMCAoc2xvd2VzdCkgdG8gNiAoZmFzdGVzdCkuCisJICogVGhlIGNhbWVyYSBtb2RlbCAyIGFsbG93cyBmcmFtZSByYXRlIGluIHJhbmdlIFswLi4weDFGXSB3aGVyZSAwIGlzIGFsc28gdGhlCisJICogc2xvd2VzdCBzZXR0aW5nLiBIb3dldmVyIGZvciBhbGwgcHJhY3RpY2FsIHJlYXNvbnMgaGlnaCBzZXR0aW5ncyBtYWtlIG5vCisJICogc2Vuc2UgYmVjYXVzZSBVU0IgaXMgbm90IGZhc3QgZW5vdWdoIHRvIHN1cHBvcnQgaGlnaCBGUFMuIEJlIGF3YXJlIHRoYXQKKwkgKiB0aGUgcGljdHVyZSBkYXRhc3RyZWFtIHdpbGwgYmUgc2V2ZXJlbHkgZGlzcnVwdGVkIGlmIHlvdSBhc2sgZm9yCisJICogZnJhbWUgcmF0ZSBmYXN0ZXIgdGhhbiBhbGxvd2VkIGZvciB0aGUgdmlkZW8gc2l6ZSAtIHNlZSBiZWxvdzoKKwkgKgorCSAqIEFsbG93YWJsZSByYW5nZXMgKG9idGFpbmVkIGV4cGVyaW1lbnRhbGx5IG9uIE9IQ0ksIEs2LTMsIDQ1MCBNSHopOgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogMTc2eDE0NDogWzYuLjMxXQorCSAqIDMyMHgyNDA6IFs4Li4zMV0KKwkgKiAzNTJ4MjQwOiBbMTAuLjMxXQorCSAqIDM1MngyODg6IFsxNi4uMzFdIEkgaGF2ZSB0byByYWlzZSBsb3dlciB0aHJlc2hvbGQgZm9yIHN0YWJpbGl0eS4uLgorCSAqCisJICogQXMgdXN1YWwsIHNsb3dlciBGUFMgcHJvdmlkZXMgYmV0dGVyIHNlbnNpdGl2aXR5LgorCSAqLworCXsKKwkJc2hvcnQgaHdfZnBzPTMxLCBpX2ZyYW1lcmF0ZTsKKworCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIEZSQU1FUkFURV9NSU4sIEZSQU1FUkFURV9NQVgpOworCQlpX2ZyYW1lcmF0ZSA9IEZSQU1FUkFURV9NQVggLSBmcmFtZXJhdGUgKyBGUkFNRVJBVEVfTUlOOworCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCQlod19mcHMgPSA2ICsgaV9mcmFtZXJhdGUqNDsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCQkJaHdfZnBzID0gOCArIGlfZnJhbWVyYXRlKjM7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKKwkJCWh3X2ZwcyA9IDEwICsgaV9mcmFtZXJhdGUqMjsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQkJaHdfZnBzID0gMjggKyBpX2ZyYW1lcmF0ZS8yOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQkJaW5mbygiRnJhbWVyYXRlIChoYXJkd2FyZSk6ICVoZC4iLCBod19mcHMpOworCQlSRVNUUklDVF9UT19SQU5HRShod19mcHMsIDAsIDMxKTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zZXRfZnJhbWVyYXRlLCBod19mcHMpOworCX0KKworCS8qCisJICogVGhpcyBzZXR0aW5nIGRvZXMgbm90IHZpc2libHkgYWZmZWN0IHBpY3R1cmVzOyBsZWZ0IGl0IGhlcmUKKwkgKiBiZWNhdXNlIGl0IHdhcyBwcmVzZW50IGluIFdpbmRvd3MgVVNCIGRhdGEgc3RyZWFtLiBUaGlzIGZ1bmN0aW9uCisJICogZG9lcyBub3QgYWxsb3cgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgYXBwYXJlbnRseSBpcyBhIGJpdCBtYXNrLCB0bworCSAqIGJlIGFjdGl2YXRlZCBvbmx5IGF0IGFwcHJvcHJpYXRlIHRpbWUuIERvbid0IGNoYW5nZSBpdCByYW5kb21seSEKKwkgKi8KKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDI2LCAweDAwYzIpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMjYsIDB4MDA0NCk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyNDA6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyNiwgMHgwMDQ2KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDI2LCAweDAwNDgpOworCQlicmVhazsKKwl9CisKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NlbnNpdGl2aXR5LCBsaWdodGluZyk7CisKKwlpZiAoaW5pdF9tb2RlbDJfcmcyID49IDApIHsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9tb2RlbDJfcmcyLCAwLCAyNTUpOworCQlzZXR1cF9tb2RlbDJfcmcyID0gaW5pdF9tb2RlbDJfcmcyOworCX0gZWxzZQorCQlzZXR1cF9tb2RlbDJfcmcyID0gMHgwMDJmOworCisJaWYgKGluaXRfbW9kZWwyX3NhdCA+PSAwKSB7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfbW9kZWwyX3NhdCwgMCwgMjU1KTsKKwkJc2V0dXBfbW9kZWwyX3NhdCA9IGluaXRfbW9kZWwyX3NhdDsKKwl9IGVsc2UKKwkJc2V0dXBfbW9kZWwyX3NhdCA9IDB4MDAzNDsKKworCWlmIChpbml0X21vZGVsMl95YiA+PSAwKSB7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfbW9kZWwyX3liLCAwLCAyNTUpOworCQlzZXR1cF9tb2RlbDJfeWIgPSBpbml0X21vZGVsMl95YjsKKwl9IGVsc2UKKwkJc2V0dXBfbW9kZWwyX3liID0gMHgwMGEwOworCisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9jb2xvcl9iYWxhbmNlX3JnMiwgc2V0dXBfbW9kZWwyX3JnMik7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zYXR1cmF0aW9uLCBzZXR1cF9tb2RlbDJfc2F0KTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2NvbG9yX2JhbGFuY2VfeWIsIHNldHVwX21vZGVsMl95Yik7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9odWUsIHV2ZC0+dnBpYy5odWUgPj4gOSk7IC8qIDAgLi4gN0YgKi87CisKKwkvKiBIYXJkd2FyZSBjb250cm9sIGNvbW1hbmQgKi8KKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMzAsIDB4MDAwNCk7CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28gY2FtZXJhLCBnbyEgKi8KKwl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsNF9zZXR1cF9hZnRlcl92aWRlb19pZihzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQyLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWUsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDMsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBlYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTMsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMxLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTcsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNjB4MTIwOgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDgsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYjksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYiwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDMsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjNywgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI1LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzUsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDgsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDkwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDYsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiOSwgMHgwMTBhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJjLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA3LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE0LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMGEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVlLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTU0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGM3LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzYsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMywgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNmQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMmIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA4KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDcwLCAweDAxMTkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMiwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVlLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTAyKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTA1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTQsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEwYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5NTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQzLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZWIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNiwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTcsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEzLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE3LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGYyLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOGMsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1ZSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDksIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjZiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTMsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI1LCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTAsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQ4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsgCisJfQorCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwzX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaTsKKwkvKgorCSAqIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTworCSAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gaW5pdCB0aGUgTW9kZWwzIGNhbSB0byB1c2UgdGhlIFJDQSB2aWRlbyBpbiBwb3J0CisJICogaW5zdGVhZCBvZiB0aGUgQ0NEIHNlbnNvci4KKwkgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnVjdF9pbml0RGF0YSBpbml0RGF0YVtdID0geworCQl7MCwgMHgwMDAwLCAweDAxMGN9LAorCQl7MCwgMHgwMDA2LCAweDAxMmN9LAorCQl7MCwgMHgwMDc4LCAweDAxMmR9LAorCQl7MCwgMHgwMDQ2LCAweDAxMmZ9LAorCQl7MCwgMHhkMTQxLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZWE4LCAweDAxMjR9LAorCQl7MSwgMHgwMDAwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDY0LCAweDAxMTZ9LAorCQl7MSwgMHgwMDAwLCAweDAxMTV9LAorCQl7MCwgMHgwMDAzLCAweDAxMTV9LAorCQl7MCwgMHgwMDA4LCAweDAxMjN9LAorCQl7MCwgMHgwMDAwLCAweDAxMTd9LAorCQl7MCwgMHgwMDAwLCAweDAxMTJ9LAorCQl7MCwgMHgwMDgwLCAweDAxMDB9LAorCQl7MCwgMHgwMDAwLCAweDAxMDB9LAorCQl7MSwgMHgwMDAwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDYwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDAyLCAweDAxMTJ9LAorCQl7MCwgMHgwMDAwLCAweDAxMjN9LAorCQl7MCwgMHgwMDAxLCAweDAxMTd9LAorCQl7MCwgMHgwMDQwLCAweDAxMDh9LAorCQl7MCwgMHgwMDE5LCAweDAxMmN9LAorCQl7MCwgMHgwMDQwLCAweDAxMTZ9LAorCQl7MCwgMHgwMDBhLCAweDAxMTV9LAorCQl7MCwgMHgwMDBiLCAweDAxMTV9LAorCQl7MCwgMHgwMDc4LCAweDAxMmR9LAorCQl7MCwgMHgwMDQ2LCAweDAxMmZ9LAorCQl7MCwgMHhkMTQxLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZWE4LCAweDAxMjR9LAorCQl7MCwgMHgwMDY0LCAweDAxMTZ9LAorCQl7MCwgMHgwMDAwLCAweDAxMTV9LAorCQl7MCwgMHgwMDAxLCAweDAxMTV9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGFhLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGYyLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDBmLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGY4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGZjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGY5LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDNjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmZmLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDI3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDE5LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDIxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDA2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQ1LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJhLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDBlLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJiLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGY0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDA0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJkLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDE0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJlLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAzLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDJmLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAzLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDE0LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDUzLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMDF9LAorCQl7MCwgMHgwMGEwLCAweDAxMDN9LAorCQl7MCwgMHgwMDc4LCAweDAxMDV9LAorCQl7MCwgMHgwMDAwLCAweDAxMGF9LAorCQl7MCwgMHgwMDI0LCAweDAxMGJ9LAorCQl7MCwgMHgwMDI4LCAweDAxMTl9LAorCQl7MCwgMHgwMDg4LCAweDAxMWJ9LAorCQl7MCwgMHgwMDAyLCAweDAxMWR9LAorCQl7MCwgMHgwMDAzLCAweDAxMWV9LAorCQl7MCwgMHgwMDAwLCAweDAxMjl9LAorCQl7MCwgMHgwMGZjLCAweDAxMmJ9LAorCQl7MCwgMHgwMDA4LCAweDAxMDJ9LAorCQl7MCwgMHgwMDAwLCAweDAxMDR9LAorCQl7MCwgMHgwMDA4LCAweDAxMWF9LAorCQl7MCwgMHgwMDI4LCAweDAxMWN9LAorCQl7MCwgMHgwMDIxLCAweDAxMmF9LAorCQl7MCwgMHgwMDAwLCAweDAxMTh9LAorCQl7MCwgMHgwMDAwLCAweDAxMzJ9LAorCQl7MCwgMHgwMDAwLCAweDAxMDl9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDMxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMGRjLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDMyLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDIwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAxLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDQwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM3LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDMwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHhmZmY5LCAweDAxMjR9LAorCQl7MCwgMHgwMDg2LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDM4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDA4LCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHgwMDAwLCAweDAxMjd9LAorCQl7MCwgMHhmZmY4LCAweDAxMjR9LAorCQl7MCwgMHhmZmZkLCAweDAxMjR9LAorCQl7MCwgMHhmZmZhLCAweDAxMjR9LAorCQl7MCwgMHgwMDAzLCAweDAxMDZ9LAorCQl7MCwgMHgwMDYyLCAweDAxMDd9LAorCQl7MCwgMHgwMDAzLCAweDAxMTF9LAorCX07CisjZGVmaW5lIE5VTV9JTklUX0RBVEEgCisKKwl1bnNpZ25lZCBzaG9ydCBjb21wcmVzc2lvbiA9IDA7CS8qIDA9bm9uZSwgNz1iZXN0IGZyYW1lIHJhdGUgICovCisJaW50IGZfcmF0ZTsgLyogMD1GYXN0ZXN0IDc9c2xvd2VzdCAqLworCisJaWYgKElCTUNBTV9UKHV2ZCktPmluaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwkvKiBJbnRlcm5hbCBmcmFtZSByYXRlIGlzIGNvbnRyb2xsZWQgYnkgZl9yYXRlIHZhbHVlICovCisJZl9yYXRlID0gNyAtIGZyYW1lcmF0ZTsKKwlSRVNUUklDVF9UT19SQU5HRShmX3JhdGUsIDAsIDcpOworCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNjAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExMik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyMyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDAsIDB4MDEwOCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTksIDB4MDEyYyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNjAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGIsIDB4MDExNSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBhLCAweDAwNDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwYiwgMHgwMGY2KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGMsIDB4MDAwMik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBkLCAweDAwMjApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwZSwgMHgwMDMzKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGYsIDB4MDAwNyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDEwLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxMSwgMHgwMDcwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTIsIDB4MDAzMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDEzLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTUsIDB4MDAwMSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxNywgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFlLCAweDAwYzMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyMCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjgsIDB4MDAxMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDI5LCAweDAwNTQpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyYSwgMHgwMDEzKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMmIsIDB4MDAwNyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJkLCAweDAwMjgpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyZSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzEsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDMyLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzMywgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzQsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM1LCAweDAwMzgpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYSwgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2MsIDB4MDAxZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNmLCAweDAwMGEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA0MSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDYsIDB4MDAzZik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQ3LCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MCwgMHgwMDA1KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTIsIDB4MDAxYSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDUzLCAweDAwMDMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YSwgMHgwMDZiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWQsIDB4MDAxZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVlLCAweDAwMzApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1ZiwgMHgwMDQxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjQsIDB4MDAwOCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY1LCAweDAwMTUpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2OCwgMHgwMDBmKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNzksIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdhLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3YywgMHgwMDNmKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODIsIDB4MDAwZik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDg1LCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5OSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWIsIDB4MDAyMyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDljLCAweDAwMjIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5ZCwgMHgwMDk2KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWUsIDB4MDA5Nik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDlmLCAweDAwMGEpOworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDEpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDEwMyk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTA1KTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMGIpOyAvKiBEaWZmZXJzIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTksIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMWIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTFkKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMWUpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyOSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmMsIDB4MDEyYik7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDExYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIyLCAweDAxMmEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMTgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMyKTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDIxLCAweDAwMDEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgY29tcHJlc3Npb24sIDB4MDEwOSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDEpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDEwMyk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTA1KTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMGIpOyAvKiBEaWZmZXJzIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExZCk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjkpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZjLCAweDAxMmIpOyAvKiBTYW1lICovCisJCS8qIDQgY29tbWFuZHMgZnJvbSAxNjB4MTIwIHNraXBwZWQgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjIsIDB4MDEyYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDIxLCAweDAwMDEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgY29tcHJlc3Npb24sIDB4MDEwOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQ5LCAweDAxMTkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTFiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjEsIDB4MDEwMik7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDExYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDNmLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTE4KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMik7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzY0MHg0ODA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGYwLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBhKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTBiKTsgLyogRGlmZmVycyBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQ5LCAweDAxMTkpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDYsIDB4MDExYik7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFkKTsgLyogTkMgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExZSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI5KTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYywgMHgwMTJiKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMSwgMHgwMTAyKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMDQpOyAvKiBOQyAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFhKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDNmLCAweDAxMWMpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjIsIDB4MDEyYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDExOCk7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjEsIDB4MDAwMSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBjb21wcmVzc2lvbiwgMHgwMTA5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDAsIDB4MDEwMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQwLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMyKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWJyZWFrOworCX0KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIDB4MDAwZSk7CS8qIEh1ZSAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNiwgMHgwMDExKTsJLyogQnJpZ2h0bmVzcyAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MCwgMHgwMDAyKTsJLyogU2hhcnBuZXNzICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYxLCAweDAwMDQpOwkvKiBTaGFycG5lc3MgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjIsIDB4MDAwNSk7CS8qIFNoYXJwbmVzcyAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MywgMHgwMDE0KTsJLyogU2hhcnBuZXNzICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk2LCAweDAwYTApOwkvKiBSZWQgZ2FpbiAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5NywgMHgwMDk2KTsJLyogQmx1ZSBnYWluICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY3LCAweDAwMDEpOwkvKiBDb250cmFzdCAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YiwgMHgwMDBjKTsJLyogQ29udHJhc3QgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWMsIDB4MDAxNik7CS8qIENvbnRyYXN0ICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk4LCAweDAwMGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyYywgMHgwMDAzKTsJLyogV2FzIDEsIGJyb2tlIDY0MHg0ODAgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMmYsIDB4MDAyYSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMjkpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNywgMHgwMDAyKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzgsIDB4MDA1OSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNkLCAweDAwMmUpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzZSwgMHgwMDI4KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNzgsIDB4MDAwNSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdiLCAweDAwMTEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZCwgMHgwMDRiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2YsIDB4MDAyMik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDgwLCAweDAwMGMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4MSwgMHgwMDBiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODMsIDB4MDBmZCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDg2LCAweDAwMGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4NywgMHgwMDBiKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIDB4MDAwZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk2LCAweDAwYTApOwkvKiBSZWQgZ2FpbiAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5NywgMHgwMDk2KTsJLyogQmx1ZSBnYWluICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk4LCAweDAwMGIpOworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBmX3JhdGUsIDB4MDExMSk7CS8qIEZyYW1lIHJhdGUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFmLCAweDAwMDApOyAvKiBTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOSwgMHgwMDFmKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2IsIDB4MDAzYyk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQwLCAweDAwMGEpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTEsIDB4MDAwYSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2MiwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBmX3JhdGUsIDB4MDExMSk7CS8qIEZyYW1lIHJhdGUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFmLCAweDAwMDApOyAvKiBTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOSwgMHgwMDFmKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2IsIDB4MDAzYyk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQwLCAweDAwMDgpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTEsIDB4MDAwYik7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzY0MHg0ODA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMDYpOwkvKiBBZGp1c3RtZW50cyAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiNCwgMHgwMTA3KTsJLyogQWRqdXN0bWVudHMgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBmX3JhdGUsIDB4MDExMSk7CS8qIEZyYW1lIHJhdGUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDFmLCAweDAwMDIpOyAvKiAhU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzksIDB4MDAzZSk7IC8qICFTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA0MCwgMHgwMDA4KTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDUxLCAweDAwMGEpOworCQlicmVhazsKKwl9CisKKwkvKiAwMS4wMS4wOCAtIEFkZGVkIGZvciBSQ0EgdmlkZW8gaW4gc3VwcG9ydCAtTE8gKi8KKwlpZihpbml0X21vZGVsM19pbnB1dCkgeworCQlpZiAoZGVidWcgPiAwKQorCQkJaW5mbygiU2V0dGluZyBpbnB1dCB0byBSQ0EuIik7CisJCWZvciAoaT0wOyBpIDwgKHNpemVvZihpbml0RGF0YSkvc2l6ZW9mKGluaXREYXRhWzBdKSk7IGkrKykgeworCQkJaWJtY2FtX3ZlaW8odXZkLCBpbml0RGF0YVtpXS5yZXEsIGluaXREYXRhW2ldLnZhbHVlLCBpbml0RGF0YVtpXS5pbmRleCk7CisJCX0KKwl9CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKKwl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKK30KKworLyoKKyAqIGlibWNhbV92aWRlb19zdG9wKCkKKyAqCisgKiBUaGlzIGNvZGUgdGVsbHMgY2FtZXJhIHRvIHN0b3Agc3RyZWFtaW5nLiBUaGUgaW50ZXJmYWNlIHJlbWFpbnMKKyAqIGNvbmZpZ3VyZWQgYW5kIGJhbmR3aWR0aCAtIGNsYWltZWQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV92aWRlb19zdG9wKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTBjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDExNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjMCwgMHgwMTBjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOworCQlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MSwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8yOgorY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgdGhlIGNhbWVyYSAqLworCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDA0KTsKKworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDExMSk7CisKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMDIpOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTEyKTsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKyNpZiAxCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGMpOworCisJCS8qIEhlcmUgd2UgYXJlIHN1cHBvc2VkIHRvIHNlbGVjdCB2aWRlbyBpbnRlcmZhY2UgYWx0LiBzZXR0aW5nIDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDYsIDB4MDEyYyk7CisKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQ2LCAweDAwMDApOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMTYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2NCwgMHgwMTE2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMTUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTIzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMTIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTAwKTsKKwkJSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQgPSAwOworI2VuZGlmCisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCit9CisKKy8qCisgKiBpYm1jYW1fcmVpbml0X2lzbygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgY291cGxlIG9mIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEgYW5kIHRoZW4KKyAqIHJlc2V0cyB0aGUgdmlkZW8gcGlwZS4gVGhpcyBzZXF1ZW5jZSB3YXMgb2JzZXJ2ZWQgdG8gcmVpbml0IHRoZQorICogY2FtZXJhIG9yLCBhdCBsZWFzdCwgdG8gaW5pdGlhdGUgSVNPIGRhdGEgc3RyZWFtLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIvMDAgICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fcmVpbml0X2lzbyhzdHJ1Y3QgdXZkICp1dmQsIGludCBkb19zdG9wKQoreworCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwkJaWYgKGRvX3N0b3ApCisJCQlpYm1jYW1fdmlkZW9fc3RvcCh1dmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fbW9kZWwxX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7CisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJCWlibWNhbV9tb2RlbDJfc2V0dXBfYWZ0ZXJfdmlkZW9faWYodXZkKTsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwkJaWJtY2FtX3ZpZGVvX3N0b3AodXZkKTsKKwkJaWJtY2FtX21vZGVsM19zZXR1cF9hZnRlcl92aWRlb19pZih1dmQpOworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCQlpYm1jYW1fbW9kZWw0X3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3ZpZGVvX3N0YXJ0KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnModXZkKTsKKwlpYm1jYW1fc2V0X3NoYXJwbmVzcyh1dmQpOworCWlibWNhbV9yZWluaXRfaXNvKHV2ZCwgMCk7Cit9CisKKy8qCisgKiBSZXR1cm4gbmVnYXRpdmUgY29kZSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgaWJtY2FtX3NldHVwX29uX29wZW4oc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBzZXR1cF9vayA9IDA7IC8qIFN1Y2Nlc3MgYnkgZGVmYXVsdCAqLworCS8qIFNlbmQgaW5pdCBzZXF1ZW5jZSBvbmx5IG9uY2UsIGl0J3MgbGFyZ2UhICovCisJaWYgKCFJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCkgeyAvKiBGSVhNRSByZW5hbWUgKi8KKwkJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwkJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwkJCXNldHVwX29rID0gaWJtY2FtX21vZGVsMV9zZXR1cCh1dmQpOworCQkJYnJlYWs7CisJCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJCQlzZXR1cF9vayA9IGlibWNhbV9tb2RlbDJfc2V0dXAodXZkKTsKKwkJCWJyZWFrOworCQljYXNlIElCTUNBTV9NT0RFTF8zOgorCQljYXNlIElCTUNBTV9NT0RFTF80OgorCQkJLyogV2UgZG8gYWxsIHNldHVwIHdoZW4gSXNvYyBzdHJlYW0gaXMgcmVxdWVzdGVkICovCisJCQlicmVhazsKKwkJfQorCQlJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IChzZXR1cF9vayAhPSAwKTsKKwl9CisJcmV0dXJuIHNldHVwX29rOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fY29uZmlndXJlX3ZpZGVvKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpZiAodXZkID09IE5VTEwpCisJCXJldHVybjsKKworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfYnJpZ2h0bmVzcywgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2NvbnRyYXN0LCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfY29sb3IsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9odWUsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaHVlX2NvcnJlY3Rpb24sIDAsIDI1NSk7CisKKwltZW1zZXQoJnV2ZC0+dnBpYywgMCwgc2l6ZW9mKHV2ZC0+dnBpYykpOworCW1lbXNldCgmdXZkLT52cGljX29sZCwgMHg1NSwgc2l6ZW9mKHV2ZC0+dnBpY19vbGQpKTsKKworCXV2ZC0+dnBpYy5jb2xvdXIgPSBpbml0X2NvbG9yIDw8IDg7CisJdXZkLT52cGljLmh1ZSA9IGluaXRfaHVlIDw8IDg7CisJdXZkLT52cGljLmJyaWdodG5lc3MgPSBpbml0X2JyaWdodG5lc3MgPDwgODsKKwl1dmQtPnZwaWMuY29udHJhc3QgPSBpbml0X2NvbnRyYXN0IDw8IDg7CisJdXZkLT52cGljLndoaXRlbmVzcyA9IDEwNSA8PCA4OyAvKiBUaGlzIG9uZSBpc24ndCB1c2VkICovCisJdXZkLT52cGljLmRlcHRoID0gMjQ7CisJdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OworCisJbWVtc2V0KCZ1dmQtPnZjYXAsIDAsIHNpemVvZih1dmQtPnZjYXApKTsKKwlzdHJjcHkodXZkLT52Y2FwLm5hbWUsICJJQk0gVVNCIENhbWVyYSIpOworCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOworCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOworCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKTsKKwl1dmQtPnZjYXAubWF4aGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT5jYW52YXMpOworCXV2ZC0+dmNhcC5taW53aWR0aCA9IG1pbl9jYW52YXNXaWR0aDsKKwl1dmQtPnZjYXAubWluaGVpZ2h0ID0gbWluX2NhbnZhc0hlaWdodDsKKworCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKKwl1dmQtPnZjaGFuLmZsYWdzID0gMDsKKwl1dmQtPnZjaGFuLnR1bmVycyA9IDA7CisJdXZkLT52Y2hhbi5jaGFubmVsID0gMDsKKwl1dmQtPnZjaGFuLnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwlzdHJjcHkodXZkLT52Y2hhbi5uYW1lLCAiQ2FtZXJhIik7Cit9CisKKy8qCisgKiBpYm1jYW1fcHJvYmUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHF1ZXJpZXMgZGV2aWNlIGRlc2NyaXB0b3IgYW5kIGFjY2VwdHMgdGhlIGludGVyZmFjZQorICogaWYgaXQgbG9va3MgbGlrZSBJQk0gQy1pdCBjYW1lcmEuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIE1vdmVkIGNhbWVyYSBpbml0IGNvZGUgdG8gaWJtY2FtX29wZW4oKQorICogMjc9SmFuLTIwMDAgQ2hhbmdlZCB0byB1c2Ugc3RhdGljIHN0cnVjdHVyZXMsIGFkZGVkIGxvY2tpbmcuCisgKiAyNC1NYXktMjAwMCBDb3JyZWN0ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiAoTU9EX3h4eF9VU0VfQ09VTlQpLgorICogMDMtSnVsLTIwMDAgRml4ZWQgZW5kaWFubmVzcyBidWcuCisgKiAxMi1Ob3YtMjAwMCBSZXdvcmtlZCB0byBjb21wbHkgd2l0aCBuZXcgcHJvYmUoKSBzaWduYXR1cmUuCisgKiAyMy1KYW4tMjAwMSBBZGRlZCBjb21wYXRpYmlsaXR5IHdpdGggMi4yLngga2VybmVscy4KKyAqLworc3RhdGljIGludCBpYm1jYW1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXZkICp1dmQgPSBOVUxMOworCWludCBpeCwgaSwgbmFzLCBtb2RlbD0wLCBjYW52YXNYPTAsIGNhbnZhc1k9MDsKKwlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKKwlfX3U4IGlmbnVtID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCXVuc2lnbmVkIGNoYXIgdmlkZW9fZXAgPSAwOworCisJaWYgKGRlYnVnID49IDEpCisJCWluZm8oImlibWNhbV9wcm9iZSglcCwldS4pIiwgaW50ZiwgaWZudW0pOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBDaGVjayB0aGUgdmVyc2lvbi9yZXZpc2lvbiAqLworCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpIHsKKwljYXNlIDB4MDAwMjoKKwkJaWYgKGlmbnVtICE9IDIpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbW9kZWwgPSBJQk1DQU1fTU9ERUxfMTsKKwkJYnJlYWs7CisJY2FzZSAweDAzMEE6CisJCWlmIChpZm51bSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTkVUQ0FNX1BST0RVQ1RfSUQpIHx8CisJCSAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gVkVPXzgwMERfUFJPRFVDVF9JRCkpCisJCQltb2RlbCA9IElCTUNBTV9NT0RFTF80OworCQllbHNlCisJCQltb2RlbCA9IElCTUNBTV9NT0RFTF8yOworCQlicmVhazsKKwljYXNlIDB4MDMwMToKKwkJaWYgKGlmbnVtICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbW9kZWwgPSBJQk1DQU1fTU9ERUxfMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJJQk0gY2FtZXJhIHdpdGggcmV2aXNpb24gMHglMDR4IGlzIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogUHJpbnQgZGV0YWlsZWQgaW5mbyBvbiB3aGF0IHdlIGZvdW5kIHNvIGZhciAqLworCWRvIHsKKwkJY2hhciAqYnJhbmQgPSBOVUxMOworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CisJCWNhc2UgTkVUQ0FNX1BST0RVQ1RfSUQ6CisJCQlicmFuZCA9ICJJQk0gTmV0Q2FtZXJhIjsKKwkJCWJyZWFrOworCQljYXNlIFZFT184MDBDX1BST0RVQ1RfSUQ6CisJCQlicmFuZCA9ICJWZW8gU3RpbmdyYXkgWzgwMENdIjsKKwkJCWJyZWFrOworCQljYXNlIFZFT184MDBEX1BST0RVQ1RfSUQ6CisJCQlicmFuZCA9ICJWZW8gU3RpbmdyYXkgWzgwMERdIjsKKwkJCWJyZWFrOworCQljYXNlIElCTUNBTV9QUk9EVUNUX0lEOgorCQlkZWZhdWx0OgorCQkJYnJhbmQgPSAiSUJNIFBDIENhbWVyYSI7IC8qIGEuay5hLiBYaXJsaW5rIEMtSXQgKi8KKwkJCWJyZWFrOworCQl9CisJCWluZm8oIiVzIFVTQiBjYW1lcmEgZm91bmQgKG1vZGVsICVkLCByZXYuIDB4JTA0eCkiLAorCQkgICAgIGJyYW5kLCBtb2RlbCwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCX0gd2hpbGUgKDApOworCisJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLworCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCWlmIChkZWJ1ZyA+IDApCisJCWluZm8oIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuIiwgbmFzKTsKKwlpZiAobmFzIDwgMikgeworCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIFZhbGlkYXRlIGFsbCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwlmb3IgKGl4PTA7IGl4IDwgbmFzOyBpeCsrKSB7CisJCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKworCQlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1tpeF07CisJCWkgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhIiwKKwkJCSAgICBpZm51bSwgKHVuc2lnbmVkKShpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCQlpZiAodmlkZW9fZXAgPT0gMCkKKwkJCXZpZGVvX2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCWVsc2UgaWYgKHZpZGVvX2VwICE9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSB7CisJCQllcnIoIkFsdGVybmF0ZSBzZXR0aW5ncyBoYXZlIGRpZmZlcmVudCBlbmRwb2ludCBhZGRyZXNzZXMhIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzIG5vbi1JU08gZW5kcG9pbnQhIiwgaWZudW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDApIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLCBpZm51bSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA9PSAwKSB7CisJCQlpZiAoaW5hY3RJbnRlcmZhY2UgPCAwKQorCQkJCWluYWN0SW50ZXJmYWNlID0gaTsKKwkJCWVsc2UgeworCQkJCWVycigiTW9yZSB0aGFuIG9uZSBpbmFjdGl2ZSBhbHQuIHNldHRpbmchIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWN0SW50ZXJmYWNlIDwgMCkgeworCQkJCWFjdEludGVyZmFjZSA9IGk7CisJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJCWlmIChkZWJ1ZyA+IDApCisJCQkJCWluZm8oIkFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBpLCBtYXhQUyk7CisJCQl9IGVsc2UKKwkJCQllcnIoIk1vcmUgdGhhbiBvbmUgYWN0aXZlIGFsdC4gc2V0dGluZyEgSWdub3JpbmcgIyVkLiIsIGkpOworCQl9CisJfQorCWlmICgobWF4UFMgPD0gMCkgfHwgKGFjdEludGVyZmFjZSA8IDApIHx8IChpbmFjdEludGVyZmFjZSA8IDApKSB7CisJCWVycigiRmFpbGVkIHRvIHJlY29nbml6ZSB0aGUgY2FtZXJhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBWYWxpZGF0ZSBvcHRpb25zICovCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJCVJFU1RSSUNUX1RPX1JBTkdFKGxpZ2h0aW5nLCAwLCAyKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xMjh4OTYsIFNJWkVfMzUyeDI4OCk7CisJCWlmIChmcmFtZXJhdGUgPCAwKQorCQkJZnJhbWVyYXRlID0gMjsKKwkJY2FudmFzWCA9IDM1MjsKKwkJY2FudmFzWSA9IDI4ODsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDE1KTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNzZ4MTQ0LCBTSVpFXzM1MngyNDApOworCQlpZiAoZnJhbWVyYXRlIDwgMCkKKwkJCWZyYW1lcmF0ZSA9IDI7CisJCWNhbnZhc1ggPSAzNTI7CisJCWNhbnZhc1kgPSAyNDA7CisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzM6CisJCVJFU1RSSUNUX1RPX1JBTkdFKGxpZ2h0aW5nLCAwLCAxNSk7IC8qIEZJWE1FICovCisJCXN3aXRjaCAoc2l6ZSkgeworCQljYXNlIFNJWkVfMTYweDEyMDoKKwkJCWNhbnZhc1ggPSAxNjA7CisJCQljYW52YXNZID0gMTIwOworCQkJaWYgKGZyYW1lcmF0ZSA8IDApCisJCQkJZnJhbWVyYXRlID0gMjsKKwkJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lcmF0ZSwgMCwgNSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8oIklCTSBjYW1lcmE6IHVzaW5nIDMyMHgyNDAiKTsKKwkJCXNpemUgPSBTSVpFXzMyMHgyNDA7CisJCQkvKiBObyBicmVhayBoZXJlICovCisJCWNhc2UgU0laRV8zMjB4MjQwOgorCQkJY2FudmFzWCA9IDMyMDsKKwkJCWNhbnZhc1kgPSAyNDA7CisJCQlpZiAoZnJhbWVyYXRlIDwgMCkKKwkJCQlmcmFtZXJhdGUgPSAzOworCQkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWVyYXRlLCAwLCA1KTsKKwkJCWJyZWFrOworCQljYXNlIFNJWkVfNjQweDQ4MDoKKwkJCWNhbnZhc1ggPSA2NDA7CisJCQljYW52YXNZID0gNDgwOworCQkJZnJhbWVyYXRlID0gMDsJLyogU2xvd2VzdCwgYW5kIG1heWJlIGV2ZW4gdGhhdCBpcyB0b28gZmFzdCAqLworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDIpOworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSBTSVpFXzEyOHg5NjoKKwkJCWNhbnZhc1ggPSAxMjg7CisJCQljYW52YXNZID0gOTY7CisJCQlicmVhazsKKwkJY2FzZSBTSVpFXzE2MHgxMjA6CisJCQljYW52YXNYID0gMTYwOworCQkJY2FudmFzWSA9IDEyMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSUJNIE5ldENhbWVyYTogdXNpbmcgMTc2eDE0NCIpOworCQkJc2l6ZSA9IFNJWkVfMTc2eDE0NDsKKwkJCS8qIE5vIGJyZWFrIGhlcmUgKi8KKwkJY2FzZSBTSVpFXzE3NngxNDQ6CisJCQljYW52YXNYID0gMTc2OworCQkJY2FudmFzWSA9IDE0NDsKKwkJCWJyZWFrOworCQljYXNlIFNJWkVfMzIweDI0MDoKKwkJCWNhbnZhc1ggPSAzMjA7CisJCQljYW52YXNZID0gMjQwOworCQkJYnJlYWs7CisJCWNhc2UgU0laRV8zNTJ4Mjg4OgorCQkJY2FudmFzWCA9IDM1MjsKKwkJCWNhbnZhc1kgPSAyODg7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIklCTSBjYW1lcmE6IE1vZGVsICVkLiBub3Qgc3VwcG9ydGVkISIsIG1vZGVsKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdXZkID0gdXNidmlkZW9fQWxsb2NhdGVEZXZpY2UoY2Ftcyk7CisJaWYgKHV2ZCAhPSBOVUxMKSB7CisJCS8qIEhlcmUgdXZkIGlzIGEgZnVsbHkgYWxsb2NhdGVkIHV2ZCBvYmplY3QgKi8KKwkJdXZkLT5mbGFncyA9IGZsYWdzOworCQl1dmQtPmRlYnVnID0gZGVidWc7CisJCXV2ZC0+ZGV2ID0gZGV2OworCQl1dmQtPmlmYWNlID0gaWZudW07CisJCXV2ZC0+aWZhY2VBbHRJbmFjdGl2ZSA9IGluYWN0SW50ZXJmYWNlOworCQl1dmQtPmlmYWNlQWx0QWN0aXZlID0gYWN0SW50ZXJmYWNlOworCQl1dmQtPnZpZGVvX2VuZHAgPSB2aWRlb19lcDsKKwkJdXZkLT5pc29fcGFja2V0X2xlbiA9IG1heFBTOworCQl1dmQtPnBhbGV0dGVCaXRzID0gMUwgPDwgVklERU9fUEFMRVRURV9SR0IyNDsKKwkJdXZkLT5kZWZhdWx0UGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisJCXV2ZC0+Y2FudmFzID0gVklERU9TSVpFKGNhbnZhc1gsIGNhbnZhc1kpOworCQl1dmQtPnZpZGVvc2l6ZSA9IGlibWNhbV9zaXplX3RvX3ZpZGVvc2l6ZShzaXplKTsKKworCQkvKiBJbml0aWFsaXplIGlibWNhbS1zcGVjaWZpYyBkYXRhICovCisJCWFzc2VydChJQk1DQU1fVCh1dmQpICE9IE5VTEwpOworCQlJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPSBtb2RlbDsKKwkJSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQgPSAwOworCisJCWlibWNhbV9jb25maWd1cmVfdmlkZW8odXZkKTsKKworCQlpID0gdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSh1dmQpOworCQlpZiAoaSAhPSAwKSB7CisJCQllcnIoInVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UoKSBmYWlsZWQuIik7CisJCQl1dmQgPSBOVUxMOworCQl9CisJfQorCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHV2ZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBJQk1DQU1fUFJPRFVDVF9JRCwgMHgwMDAyLCAweDAwMDIpIH0sCS8qIE1vZGVsIDEgKi8KKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIElCTUNBTV9QUk9EVUNUX0lELCAweDAzMGEsIDB4MDMwYSkgfSwJLyogTW9kZWwgMiAqLworCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgSUJNQ0FNX1BST0RVQ1RfSUQsIDB4MDMwMSwgMHgwMzAxKSB9LAkvKiBNb2RlbCAzICovCisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBORVRDQU1fUFJPRFVDVF9JRCwgMHgwMzBhLCAweDAzMGEpIH0sCS8qIE1vZGVsIDQgKi8KKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIFZFT184MDBDX1BST0RVQ1RfSUQsIDB4MDMwYSwgMHgwMzBhKSB9LAkvKiBNb2RlbCAyICovCisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBWRU9fODAwRF9QUk9EVUNUX0lELCAweDAzMGEsIDB4MDMwYSkgfSwJLyogTW9kZWwgNCAqLworCXsgfSAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qCisgKiBpYm1jYW1faW5pdCgpCisgKgorICogVGhpcyBjb2RlIGlzIHJ1biB0byBpbml0aWFsaXplIHRoZSBkcml2ZXIuCisgKgorICogSGlzdG9yeToKKyAqIDEvMjcvMDAgIFJld29ya2VkIHRvIHVzZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBpYm1jYW0gc3RydWN0dXJlcy4KKyAqIDIxLzEwLzAwIENvbXBsZXRlbHkgcmVkZXNpZ25lZCB0byB1c2UgdXNidmlkZW8gc2VydmljZXMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGlibWNhbV9pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOworCW1lbXNldCgmY2JUYmwsIDAsIHNpemVvZihjYlRibCkpOworCWNiVGJsLnByb2JlID0gaWJtY2FtX3Byb2JlOworCWNiVGJsLnNldHVwT25PcGVuID0gaWJtY2FtX3NldHVwX29uX29wZW47CisJY2JUYmwudmlkZW9TdGFydCA9IGlibWNhbV92aWRlb19zdGFydDsKKwljYlRibC52aWRlb1N0b3AgPSBpYm1jYW1fdmlkZW9fc3RvcDsKKwljYlRibC5wcm9jZXNzRGF0YSA9IGlibWNhbV9Qcm9jZXNzSXNvY0RhdGE7CisJY2JUYmwucG9zdFByb2Nlc3MgPSB1c2J2aWRlb19EZWludGVybGFjZUZyYW1lOworCWNiVGJsLmFkanVzdFBpY3R1cmUgPSBpYm1jYW1fYWRqdXN0X3BpY3R1cmU7CisJY2JUYmwuZ2V0RlBTID0gaWJtY2FtX2NhbGN1bGF0ZV9mcHM7CisJcmV0dXJuIHVzYnZpZGVvX3JlZ2lzdGVyKAorCQkmY2FtcywKKwkJTUFYX0lCTUNBTSwKKwkJc2l6ZW9mKGlibWNhbV90KSwKKwkJImlibWNhbSIsCisJCSZjYlRibCwKKwkJVEhJU19NT0RVTEUsCisJCWlkX3RhYmxlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlibWNhbV9jbGVhbnVwKHZvaWQpCit7CisJdXNidmlkZW9fRGVyZWdpc3RlcigmY2Ftcyk7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK21vZHVsZV9pbml0KGlibWNhbV9pbml0KTsKK21vZHVsZV9leGl0KGlibWNhbV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTIxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jCkBAIC0wLDAgKzEsOTQ3IEBACisvKgorICoga29uaWNhd2MuYyAtIGtvbmljYSB3ZWJjYW0gZHJpdmVyCisgKgorICogQXV0aG9yOiBTaW1vbiBFdmFucyA8c3BzZUBzZWNyZXQub3JnLnVrPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTaW1vbiBFdmFucworICoKKyAqIExpY2VuY2U6IEdQTAorICoKKyAqIERyaXZlciBmb3IgVVNCIHdlYmNhbXMgYmFzZWQgb24gS29uaWNhIGNoaXBzZXQuIFRoaXMKKyAqIGNoaXBzZXQgaXMgdXNlZCBpbiBJbnRlbCBZQzc2IGNhbWVyYS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaW5jbHVkZSAidXNidmlkZW8uaCIKKworI2RlZmluZSBNQVhfQlJJR0hUTkVTUwkxMDgKKyNkZWZpbmUgTUFYX0NPTlRSQVNUCTEwOAorI2RlZmluZSBNQVhfU0FUVVJBVElPTgkxMDgKKyNkZWZpbmUgTUFYX1NIQVJQTkVTUwkxMDgKKyNkZWZpbmUgTUFYX1dISVRFQkFMCTM3MgorI2RlZmluZSBNQVhfU1BFRUQJNgorCisKKyNkZWZpbmUgTUFYX0NBTUVSQVMJMQorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSJ2MS40IgorI2RlZmluZSBEUklWRVJfREVTQwkiS29uaWNhIFdlYmNhbSBkcml2ZXIiCisKK2VudW0gY3RybF9yZXEgeworCVNldFdoaXRlYmFsCT0gMHgwMSwKKwlTZXRCcmlnaHRuZXNzCT0gMHgwMiwKKyAgICAgICAgU2V0U2hhcnBuZXNzCT0gMHgwMywKKwlTZXRDb250cmFzdAk9IDB4MDQsCisJU2V0U2F0dXJhdGlvbgk9IDB4MDUsCit9OworCisKK2VudW0gZnJhbWVfc2l6ZXMgeworCVNJWkVfMTYwWDEyMAk9IDAsCisJU0laRV8xNjBYMTM2CT0gMSwKKwlTSVpFXzE3NlgxNDQJPSAyLAorCVNJWkVfMzIwWDI0MAk9IDMsCisJCit9OworCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFCVNJWkVfMzIwWDI0MAorCitzdGF0aWMgc3RydWN0IHVzYnZpZGVvICpjYW1zOworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworc3RhdGljIGludCBkZWJ1ZzsKKyNkZWZpbmUgREVCVUcobiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlpZiAobiA8PSBkZWJ1ZykgewkgXAorCQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiVzKCk6ICIgZm9ybWF0ICJcbiIsIF9fRlVOQ1RJT05fXyAsICMjIGFyZyk7IFwKKwl9CisjZWxzZQorI2RlZmluZSBERUJVRyhuLCBhcmcuLi4pCitzdGF0aWMgY29uc3QgaW50IGRlYnVnID0gMDsKKyNlbmRpZgorCisKKy8qIFNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGluaXRpYWwgY2FtZXJhIHNldHRpbmdzLAorICAgY2FuIGJlIHNldCBieSBtb2Rwcm9iZSAqLworCitzdGF0aWMgaW50IHNpemU7CQorc3RhdGljIGludCBzcGVlZCA9IDY7CQkvKiBTcGVlZCAoZnBzKSAwIChzbG93ZXN0KSB0byA2IChmYXN0ZXN0KSAqLworc3RhdGljIGludCBicmlnaHRuZXNzID0JTUFYX0JSSUdIVE5FU1MvMjsKK3N0YXRpYyBpbnQgY29udHJhc3QgPQlNQVhfQ09OVFJBU1QvMjsKK3N0YXRpYyBpbnQgc2F0dXJhdGlvbiA9CU1BWF9TQVRVUkFUSU9OLzI7CitzdGF0aWMgaW50IHNoYXJwbmVzcyA9CU1BWF9TSEFSUE5FU1MvMjsKK3N0YXRpYyBpbnQgd2hpdGViYWwgPQkzKihNQVhfV0hJVEVCQUwvNCk7CisKK3N0YXRpYyBpbnQgc3BkX3RvX2lmYWNlW10gPSB7IDEsIDAsIDMsIDIsIDQsIDUsIDYgfTsKKworLyogVGhlc2UgRlBTIHNwZWVkcyBhcmUgZnJvbSB0aGUgd2luZG93cyBjb25maWcgYm94LiBUaGV5IGFyZQorICogaW5kZXhlZCBvbiBzaXplICgwLTIpIGFuZCBzcGVlZCAoMC02KS4gRGl2aWRlIGJ5IDMgdG8gZ2V0IHRoZQorICogcmVhbCBmcHMuCisgKi8KKworc3RhdGljIGludCBzcGRfdG9fZnBzW11bN10gPSB7IHsgMjQsIDQwLCA0OCwgNjAsIDcyLCA4MCwgMTAwIH0sCisJCQkgICAgICAgeyAyNCwgNDAsIDQ4LCA2MCwgNzIsIDgwLCAxMDAgfSwKKwkJCSAgICAgICB7IDE4LCAzMCwgMzYsIDQ1LCA1NCwgNjAsIDc1ICB9LAorCQkJICAgICAgIHsgNiwgIDEwLCAxMiwgMTUsIDE4LCAyMSwgMjUgIH0gfTsKKworc3RydWN0IGNhbV9zaXplIHsKKwl1MTYJd2lkdGg7CisJdTE2CWhlaWdodDsKKwl1OAljbWQ7Cit9OworCitzdGF0aWMgc3RydWN0IGNhbV9zaXplIGNhbWVyYV9zaXplc1tdID0geyB7IDE2MCwgMTIwLCAweDcgfSwKKwkJCQkJICB7IDE2MCwgMTM2LCAweGEgfSwKKwkJCQkJICB7IDE3NiwgMTQ0LCAweDQgfSwKKwkJCQkJICB7IDMyMCwgMjQwLCAweDUgfSB9OworCitzdHJ1Y3Qga29uaWNhd2MgeworCXU4IGJyaWdodG5lc3M7CQkvKiBjYW1lcmEgdXNlcyAwIC0gOSwgeDExIGZvciByZWFsIHZhbHVlICovCisJdTggY29udHJhc3Q7CQkvKiBhcyBhYm92ZSAqLworCXU4IHNhdHVyYXRpb247CQkvKiBhcyBhYm92ZSAqLworCXU4IHNoYXJwbmVzczsJCS8qIGFzIGFib3ZlICovCisJdTggd2hpdGVfYmFsOwkJLyogMCAtIDMzLCB4MTEgZm9yIHJlYWwgdmFsdWUgKi8KKwl1OCBzcGVlZDsJCS8qIFN0b3JlZCBhcyAwIC0gNiwgdXNlZCBhcyBpbmRleCBpbiBzcGRfdG9fKiAoYWJvdmUpICovCisJdTggc2l6ZTsJCS8qIEZyYW1lIFNpemUgKi8KKwlpbnQgaGVpZ2h0OworCWludCB3aWR0aDsKKwlzdHJ1Y3QgdXJiICpzdHNfdXJiW1VTQlZJREVPX05VTVNCVUZdOworCXU4IHN0c19idWZbVVNCVklERU9fTlVNU0JVRl1bRlJBTUVTX1BFUl9ERVNDXTsKKwlzdHJ1Y3QgdXJiICpsYXN0X2RhdGFfdXJiOworCWludCBsYXN0ZnJhbWU7CisJaW50IGN1cl9mcmFtZV9zaXplOwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gY3VycmVudCBmcmFtZSBzaXplICovCisJaW50IG1heGxpbmU7CQkvKiBudW1iZXIgb2YgbGluZXMgcGVyIGZyYW1lICovCisJaW50IHlwbGFuZXN6OwkJLyogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBZIHBsYW5lICovCisJdW5zaWduZWQgaW50IGJ1dHRvbnN0czoxOworI2lmZGVmIENPTkZJR19JTlBVVAorCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisJY2hhciBpbnB1dF9waHlzbmFtZVs2NF07CisjZW5kaWYKK307CisKKworI2RlZmluZSBrb25pY2F3Y19zZXRfbWlzYyh1dmQsIHJlcSwgdmFsdWUsIGluZGV4KQkJa29uaWNhd2NfY3RybF9tc2codXZkLCBVU0JfRElSX09VVCwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIDApCisjZGVmaW5lIGtvbmljYXdjX2dldF9taXNjKHV2ZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc3opCWtvbmljYXdjX2N0cmxfbXNnKHV2ZCwgVVNCX0RJUl9JTiwgcmVxLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc3opCisjZGVmaW5lIGtvbmljYXdjX3NldF92YWx1ZSh1dmQsIHZhbHVlLCBpbmRleCkJCQlrb25pY2F3Y19jdHJsX21zZyh1dmQsIFVTQl9ESVJfT1VULCAyLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIDApCisKKworc3RhdGljIGludCBrb25pY2F3Y19jdHJsX21zZyhzdHJ1Y3QgdXZkICp1dmQsIHU4IGRpciwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICAgICAgaW50IHJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1dmQtPmRldiwKKwkJZGlyID8gdXNiX3JjdmN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCSAgICByZXF1ZXN0LCAweDQwIHwgZGlyLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCAxMDAwKTsKKyAgICAgICAgcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrb25pY2F3Y19jYW1lcmFfb24oc3RydWN0IHV2ZCAqdXZkKQoreworICAgICAgICBERUJVRygwLCAiY2FtZXJhIG9uIik7CisgICAgICAgIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAxLCAweDBiKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQga29uaWNhd2NfY2FtZXJhX29mZihzdHJ1Y3QgdXZkICp1dmQpCit7CisgICAgICAgIERFQlVHKDAsICJjYW1lcmEgb2ZmIik7CisgICAgICAgIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAwLCAweDBiKTsKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19zZXRfY2FtZXJhX3NpemUoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisJa29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLmNtZCwgMHgwOCk7CisJY2FtLT53aWR0aCA9IGNhbWVyYV9zaXplc1tjYW0tPnNpemVdLndpZHRoOworCWNhbS0+aGVpZ2h0ID0gY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0uaGVpZ2h0OworCWNhbS0+eXBsYW5lc3ogPSBjYW0tPmhlaWdodCAqIGNhbS0+d2lkdGg7CisJY2FtLT5jdXJfZnJhbWVfc2l6ZSA9IChjYW0tPnlwbGFuZXN6ICogMykgLyAyOworCWNhbS0+bWF4bGluZSA9IGNhbS0+eXBsYW5lc3ogLyAyNTY7CisJdXZkLT52aWRlb3NpemUgPSBWSURFT1NJWkUoY2FtLT53aWR0aCwgY2FtLT5oZWlnaHQpOworfQorCisKK3N0YXRpYyBpbnQga29uaWNhd2Nfc2V0dXBfb25fb3BlbihzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisKKwlERUJVRygxLCAic2V0dGluZyBicmlnaHRuZXNzIHRvICVkICglZCkiLCBjYW0tPmJyaWdodG5lc3MsCisJICAgIGNhbS0+YnJpZ2h0bmVzcyAqIDExKTsKKwlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPmJyaWdodG5lc3MsIFNldEJyaWdodG5lc3MpOworCURFQlVHKDEsICJzZXR0aW5nIHdoaXRlIGJhbGFuY2UgdG8gJWQgKCVkKSIsIGNhbS0+d2hpdGVfYmFsLAorCSAgICBjYW0tPndoaXRlX2JhbCAqIDExKTsKKwlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPndoaXRlX2JhbCwgU2V0V2hpdGViYWwpOworCURFQlVHKDEsICJzZXR0aW5nIGNvbnRyYXN0IHRvICVkICglZCkiLCBjYW0tPmNvbnRyYXN0LAorCSAgICBjYW0tPmNvbnRyYXN0ICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+Y29udHJhc3QsIFNldENvbnRyYXN0KTsKKwlERUJVRygxLCAic2V0dGluZyBzYXR1cmF0aW9uIHRvICVkICglZCkiLCBjYW0tPnNhdHVyYXRpb24sCisJICAgIGNhbS0+c2F0dXJhdGlvbiAqIDExKTsKKwlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPnNhdHVyYXRpb24sIFNldFNhdHVyYXRpb24pOworCURFQlVHKDEsICJzZXR0aW5nIHNoYXJwbmVzcyB0byAlZCAoJWQpIiwgY2FtLT5zaGFycG5lc3MsCisJICAgIGNhbS0+c2hhcnBuZXNzICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+c2hhcnBuZXNzLCBTZXRTaGFycG5lc3MpOworCWtvbmljYXdjX3NldF9jYW1lcmFfc2l6ZSh1dmQpOworCWNhbS0+bGFzdGZyYW1lID0gLTI7CisJY2FtLT5idXR0b25zdHMgPSAwOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX2FkanVzdF9waWN0dXJlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworCWtvbmljYXdjX2NhbWVyYV9vZmYodXZkKTsKKwlERUJVRygxLCAibmV3IGJyaWdodG5lc3M6ICVkIiwgdXZkLT52cGljLmJyaWdodG5lc3MpOworCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gKHV2ZC0+dnBpYy5icmlnaHRuZXNzID4gTUFYX0JSSUdIVE5FU1MpID8gTUFYX0JSSUdIVE5FU1MgOiB1dmQtPnZwaWMuYnJpZ2h0bmVzczsKKwlpZihjYW0tPmJyaWdodG5lc3MgIT0gdXZkLT52cGljLmJyaWdodG5lc3MgLyAxMSkgeworCSAgIGNhbS0+YnJpZ2h0bmVzcyA9IHV2ZC0+dnBpYy5icmlnaHRuZXNzIC8gMTE7CisJICAgREVCVUcoMSwgInNldHRpbmcgYnJpZ2h0bmVzcyB0byAlZCAoJWQpIiwgY2FtLT5icmlnaHRuZXNzLAorCSAgICAgICBjYW0tPmJyaWdodG5lc3MgKiAxMSk7CisJICAga29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5icmlnaHRuZXNzLCBTZXRCcmlnaHRuZXNzKTsKKwl9CisKKwlERUJVRygxLCAibmV3IGNvbnRyYXN0OiAlZCIsIHV2ZC0+dnBpYy5jb250cmFzdCk7CisJdXZkLT52cGljLmNvbnRyYXN0ID0gKHV2ZC0+dnBpYy5jb250cmFzdCA+IE1BWF9DT05UUkFTVCkgPyBNQVhfQ09OVFJBU1QgOiB1dmQtPnZwaWMuY29udHJhc3Q7CisJaWYoY2FtLT5jb250cmFzdCAhPSB1dmQtPnZwaWMuY29udHJhc3QgLyAxMSkgeworCQljYW0tPmNvbnRyYXN0ID0gdXZkLT52cGljLmNvbnRyYXN0IC8gMTE7CisJCURFQlVHKDEsICJzZXR0aW5nIGNvbnRyYXN0IHRvICVkICglZCkiLCBjYW0tPmNvbnRyYXN0LAorCQkgICAgY2FtLT5jb250cmFzdCAqIDExKTsKKwkJa29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5jb250cmFzdCwgU2V0Q29udHJhc3QpOworCX0KKwlrb25pY2F3Y19jYW1lcmFfb24odXZkKTsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX2NvbXByZXNzX2lzbyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1cmIgKmRhdGF1cmIsIHN0cnVjdCB1cmIgKnN0c3VyYikKK3sKKwljaGFyICpjZGF0YTsKKwlpbnQgaSwgdG90bGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSBzdHN1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQga2VlcCA9IDAsIGRpc2NhcmQgPSAwLCBiYWQgPSAwOworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IGRhdGF1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IGJ1dHRvbiA9IGNhbS0+YnV0dG9uc3RzOworCQl1bnNpZ25lZCBjaGFyIHN0czsKKwkJaW50IG4gPSBkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlpbnQgc3QgPSBkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWNkYXRhID0gZGF0YXVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCWRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlcnJvcmVkIHBhY2tldHMgKi8KKwkJaWYgKHN0IDwgMCkgeworCQkJREVCVUcoMSwgIkRhdGEgZXJyb3I6IHBhY2tldD0lZC4gbGVuPSVkLiBzdGF0dXM9JWQuIiwKKwkJCSAgICAgIGksIG4sIHN0KTsKKwkJCXV2ZC0+c3RhdHMuaXNvX2Vycl9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlbXB0eSBwYWNrZXRzICovCisJCWlmIChuIDw9IDApIHsKKwkJCXV2ZC0+c3RhdHMuaXNvX3NraXBfY291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2VlIHdoYXQgdGhlIHN0YXR1cyBkYXRhIHNhaWQgYWJvdXQgdGhlIHBhY2tldCAqLworCQlzdHMgPSAqKHN0YXR1cytzdHN1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CisKKwkJLyogc3RzOiAweDgwLTB4ZmY6IGZyYW1lIHN0YXJ0IHdpdGggZnJhbWUgbnVtYmVyIChpZSAwLTdmKQorCQkgKiBvdGhlcndpc2U6CisJCSAqIGJpdCAwIDA6IGtlZXAgcGFja2V0CisJCSAqCSAxOiBkcm9wIHBhY2tldCAocGFkZGluZyBkYXRhKQorCQkgKgorCQkgKiBiaXQgNCAwIGJ1dHRvbiBub3QgY2xpY2tlZAorCQkgKiAgICAgICAxIGJ1dHRvbiBjbGlja2VkCisJCSAqIGJ1dHRvbiBpcyB1c2VkIHRvIGB0YWtlIGEgcGljdHVyZScgKGluIHNvZnR3YXJlKQorCQkgKi8KKworCQlpZihzdHMgPCAweDgwKSB7CisJCQlidXR0b24gPSAhIShzdHMgJiAweDQwKTsKKwkJCXN0cyAmPSB+MHg0MDsKKwkJfQorCQkKKwkJLyogd29yayBvdXQgdGhlIGJ1dHRvbiBzdGF0dXMsIGJ1dCBkb24ndCBkbworCQkgICBhbnl0aGluZyB3aXRoIGl0IGZvciBub3cgKi8KKworCQlpZihidXR0b24gIT0gY2FtLT5idXR0b25zdHMpIHsKKwkJCURFQlVHKDIsICJidXR0b246ICVzY2xpY2tlZCIsIGJ1dHRvbiA/ICIiIDogInVuIik7CisJCQljYW0tPmJ1dHRvbnN0cyA9IGJ1dHRvbjsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJCWlucHV0X3JlcG9ydF9rZXkoJmNhbS0+aW5wdXQsIEJUTl8wLCBjYW0tPmJ1dHRvbnN0cyk7CisJCQlpbnB1dF9zeW5jKCZjYW0tPmlucHV0KTsKKyNlbmRpZgorCQl9CisKKwkJaWYoc3RzID09IDB4MDEpIHsgLyogZHJvcCBmcmFtZSAqLworCQkJZGlzY2FyZCsrOworCQkJY29udGludWU7CisJCX0KKwkJCisJCWlmKChzdHMgPiAweDAxKSAmJiAoc3RzIDwgMHg4MCkpIHsKKwkJCWluZm8oInVua25vd24gc3RhdHVzICUyLjJ4Iiwgc3RzKTsKKwkJCWJhZCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYoIXN0cyAmJiBjYW0tPmxhc3RmcmFtZSA9PSAtMikgeworCQkJREVCVUcoMiwgImRyb3BwaW5nIGZyYW1lIGxvb2tpbmcgZm9yIGltYWdlIHN0YXJ0Iik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWtlZXArKzsKKwkJaWYoc3RzICYgMHg4MCkgeyAvKiBmcmFtZSBzdGFydCAqLworCQkJdW5zaWduZWQgY2hhciBtYXJrZXJbXSA9IHsgMCwgMHhmZiwgMCwgMHgwMCB9OworCisJCQlpZihjYW0tPmxhc3RmcmFtZSA9PSAtMikgeworCQkJCURFQlVHKDIsICJmb3VuZCBpbml0aWFsIGltYWdlIik7CisJCQkJY2FtLT5sYXN0ZnJhbWUgPSAtMTsKKwkJCX0KKwkJCQkKKwkJCW1hcmtlclszXSA9IHN0cyAmIDB4N0Y7CisJCQlSaW5nUXVldWVfRW5xdWV1ZSgmdXZkLT5kcCwgbWFya2VyLCA0KTsKKwkJCXRvdGxlbiArPSA0OworCQl9CisKKwkJdG90bGVuICs9IG47CS8qIExpdHRsZSBsb2NhbCBhY2NvdW50aW5nICovCisJCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBjZGF0YSwgbik7CisJfQorCURFQlVHKDgsICJmaW5pc2hlZDoga2VlcCA9ICVkIGRpc2NhcmQgPSAlZCBiYWQgPSAlZCBhZGRlZCAlZCBieXRlcyIsCisJCSAgICBrZWVwLCBkaXNjYXJkLCBiYWQsIHRvdGxlbik7CisJcmV0dXJuIHRvdGxlbjsKK30KKworCitzdGF0aWMgdm9pZCByZXN1Ym1pdF91cmIoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisgICAgICAgIGludCBpLCByZXQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGUkFNRVNfUEVSX0RFU0M7IGkrKykgeworICAgICAgICAgICAgICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKyAgICAgICAgfQorICAgICAgICB1cmItPmRldiA9IHV2ZC0+ZGV2OworICAgICAgICB1cmItPnN0YXR1cyA9IDA7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlERUJVRygzLCAic3VibWl0dGluZyB1cmIgb2YgbGVuZ3RoICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKyAgICAgICAgaWYocmV0KQorICAgICAgICAgICAgICAgIGVycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgKCVkKSIsIHJldCk7CisKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1dmQgKnV2ZCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgaWYgd2UgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQhICovCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkKKwkJcmV0dXJuOworCisJaWYgKCF1dmQtPnN0cmVhbWluZykgeworCQlERUJVRygxLCAiTm90IHN0cmVhbWluZywgYnV0IGludGVycnVwdCEiKTsKKwkJcmV0dXJuOworCX0KKworCURFQlVHKDMsICJnb3QgZnJhbWUgJWQgbGVuID0gJWQgYnVmbGVuID0lZCIsIHVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCXV2ZC0+c3RhdHMudXJiX2NvdW50Kys7CisKKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMzIpIHsKKwkJY2FtLT5sYXN0X2RhdGFfdXJiID0gdXJiOworCQlyZXR1cm47CisJfQorCS8qIENvcHkgdGhlIGRhdGEgcmVjZWl2ZWQgaW50byByaW5nIHF1ZXVlICovCisJaWYoY2FtLT5sYXN0X2RhdGFfdXJiKSB7CisJCWludCBsZW4gPSAwOworCQlpZih1cmItPnN0YXJ0X2ZyYW1lICE9IGNhbS0+bGFzdF9kYXRhX3VyYi0+c3RhcnRfZnJhbWUpCisJCQllcnIoIkxvc3Qgc3luYyBvbiBmcmFtZXMiKTsKKwkJZWxzZSBpZiAoIXVyYi0+c3RhdHVzICYmICFjYW0tPmxhc3RfZGF0YV91cmItPnN0YXR1cykKKwkJCWxlbiA9IGtvbmljYXdjX2NvbXByZXNzX2lzbyh1dmQsIGNhbS0+bGFzdF9kYXRhX3VyYiwgdXJiKTsKKworCQlyZXN1Ym1pdF91cmIodXZkLCBjYW0tPmxhc3RfZGF0YV91cmIpOworCQlyZXN1Ym1pdF91cmIodXZkLCB1cmIpOworCQljYW0tPmxhc3RfZGF0YV91cmIgPSBOVUxMOworCQl1dmQtPnN0YXRzLnVyYl9sZW5ndGggPSBsZW47CisJCXV2ZC0+c3RhdHMuZGF0YV9jb3VudCArPSBsZW47CisJCWlmKGxlbikKKwkJCVJpbmdRdWV1ZV9XYWtlVXBJbnRlcnJ1cHRpYmxlKCZ1dmQtPmRwKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19zdGFydF9kYXRhKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXZkLT5kZXY7CisJaW50IGksIGVyckZsYWc7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJaW50IHBrdHN6OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZSA9IE5VTEw7CisKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdXZkLT5pZmFjZSk7CisJaWYgKGludGYpCisJCWludGVyZmFjZSA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLAorCQkJCXNwZF90b19pZmFjZVtjYW0tPnNwZWVkXSk7CisJaWYgKCFpbnRlcmZhY2UpCisJCXJldHVybiAtRU5YSU87CisJcGt0c3ogPSBsZTE2X3RvX2NwdShpbnRlcmZhY2UtPmVuZHBvaW50WzFdLmRlc2Mud01heFBhY2tldFNpemUpOworCURFQlVHKDEsICJwa3RzeiA9ICVkIiwgcGt0c3opOworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKKwkJZXJyKCJDYW1lcmEgaXMgbm90IG9wZXJhdGlvbmFsIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl1dmQtPmN1cmZyYW1lID0gLTE7CisJa29uaWNhd2NfY2FtZXJhX29uKHV2ZCk7CisJLyogQWx0ZXJuYXRlIGludGVyZmFjZSAxIGlzIGlzIHRoZSBiaWdnZXN0IGZyYW1lIHNpemUgKi8KKwlpID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LCB1dmQtPmlmYWNlLCB1dmQtPmlmYWNlQWx0QWN0aXZlKTsKKwlpZiAoaSA8IDApIHsKKwkJZXJyKCJ1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciIpOworCQl1dmQtPmxhc3RfZXJyb3IgPSBpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFdlIGRvdWJsZSBidWZmZXIgdGhlIElzbyBsaXN0cyAqLworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCWludCBqLCBrOworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1dmQtPnNidWZbaV0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5jb250ZXh0ID0gdXZkOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1dmQtPnZpZGVvX2VuZHApOworCQl1cmItPmludGVydmFsID0gMTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1dmQtPnNidWZbaV0uZGF0YTsKKwkJdXJiLT5jb21wbGV0ZSA9IGtvbmljYXdjX2lzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwa3RzeiAqIEZSQU1FU19QRVJfREVTQzsKKwkJZm9yIChqPWs9MDsgaiA8IEZSQU1FU19QRVJfREVTQzsgaisrLCBrICs9IHBrdHN6KSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IHBrdHN6OworCQl9CisKKwkJdXJiID0gY2FtLT5zdHNfdXJiW2ldOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5jb250ZXh0ID0gdXZkOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1dmQtPnZpZGVvX2VuZHAtMSk7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhbS0+c3RzX2J1ZltpXTsKKwkJdXJiLT5jb21wbGV0ZSA9IGtvbmljYXdjX2lzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBGUkFNRVNfUEVSX0RFU0M7CisJCWZvciAoaj0wOyBqIDwgRlJBTUVTX1BFUl9ERVNDOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gajsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gMTsKKwkJfQorCX0KKworCWNhbS0+bGFzdF9kYXRhX3VyYiA9IE5VTEw7CisJCisJLyogU3VibWl0IGFsbCBVUkJzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJZXJyRmxhZyA9IHVzYl9zdWJtaXRfdXJiKGNhbS0+c3RzX3VyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnJGbGFnKQorCQkJZXJyKCJ1c2Jfc3VibWl0X2lzb2MoJWQpIHJldCAlZCIsIGksIGVyckZsYWcpOworCisJCWVyckZsYWcgPSB1c2Jfc3VibWl0X3VyYih1dmQtPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyckZsYWcpCisJCQllcnIgKCJ1c2Jfc3VibWl0X2lzb2MoJWQpIHJldCAlZCIsIGksIGVyckZsYWcpOworCX0KKworCXV2ZC0+c3RyZWFtaW5nID0gMTsKKwlERUJVRygxLCAic3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeCIsIHV2ZC0+dmlkZW9fZW5kcCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQga29uaWNhd2Nfc3RvcF9kYXRhKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbTsKKworCWlmICgodXZkID09IE5VTEwpIHx8ICghdXZkLT5zdHJlYW1pbmcpIHx8ICh1dmQtPmRldiA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJa29uaWNhd2NfY2FtZXJhX29mZih1dmQpOworCXV2ZC0+c3RyZWFtaW5nID0gMDsKKwljYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJY2FtLT5sYXN0X2RhdGFfdXJiID0gTlVMTDsKKworCS8qIFVuc2NoZWR1bGUgYWxsIG9mIHRoZSBpc28gdGQncyAqLworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCXVzYl9raWxsX3VyYih1dmQtPnNidWZbaV0udXJiKTsKKwkJdXNiX2tpbGxfdXJiKGNhbS0+c3RzX3VyYltpXSk7CisJfQorCisJaWYgKCF1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CisJCS8qIFNldCBwYWNrZXQgc2l6ZSB0byAwICovCisJCWogPSB1c2Jfc2V0X2ludGVyZmFjZSh1dmQtPmRldiwgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEluYWN0aXZlKTsKKwkJaWYgKGogPCAwKSB7CisJCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlKCkgZXJyb3IgJWQuIiwgaik7CisJCQl1dmQtPmxhc3RfZXJyb3IgPSBqOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX3Byb2Nlc3NfaXNvYyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCit7CQorCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCWludCBtYXhsaW5lID0gY2FtLT5tYXhsaW5lOworCWludCB5cGxhbmVzeiA9IGNhbS0+eXBsYW5lc3o7CisKKwlhc3NlcnQoZnJhbWUgIT0gTlVMTCk7CisKKwlERUJVRyg1LCAibWF4bGluZSA9ICVkIHlwbGFuZXN6ID0gJWQiLCBtYXhsaW5lLCB5cGxhbmVzeik7CisJREVCVUcoMywgIkZyYW1lIHN0YXRlID0gJWQiLCBmcmFtZS0+c2NhbnN0YXRlKTsKKworCWlmKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU2NhblN0YXRlX1NjYW5uaW5nKSB7CisJCWludCBkcm9wID0gMDsKKwkJaW50IGN1cmZyYW1lOworCQlpbnQgZmRyb3BzID0gMDsKKwkJREVCVUcoMywgIlNlYXJjaGluZyBmb3IgbWFya2VyLCBxdWV1ZSBsZW4gPSAlZCIsIFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApKTsKKwkJd2hpbGUoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gNCkgeworCQkJaWYgKChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDApID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhmZikgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAyKSA9PSAweDAwKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpIDwgMHg4MCkpIHsKKwkJCQljdXJmcmFtZSA9IFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMyk7CisJCQkJaWYoY2FtLT5sYXN0ZnJhbWUgPj0gMCkgeworCQkJCQlmZHJvcHMgPSAoMHg4MCArIGN1cmZyYW1lIC0gY2FtLT5sYXN0ZnJhbWUpICYgMHg3RjsKKwkJCQkJZmRyb3BzLS07CisJCQkJCWlmKGZkcm9wcykgeworCQkJCQkJaW5mbygiRHJvcHBlZCAlZCBmcmFtZXMgKCVkIC0+ICVkKSIsIGZkcm9wcywKKwkJCQkJCSAgICAgY2FtLT5sYXN0ZnJhbWUsIGN1cmZyYW1lKTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYW0tPmxhc3RmcmFtZSA9IGN1cmZyYW1lOworCQkJCWZyYW1lLT5jdXJsaW5lID0gMDsKKwkJCQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOworCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgNCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDEpOworCQkJZHJvcCsrOworCQl9CisJCWlmKGRyb3ApCisJCQlERUJVRygyLCAiZHJvcHBlZCAlZCBieXRlcyBsb29raW5nIGZvciBuZXcgZnJhbWUiLCBkcm9wKTsKKwl9CisKKwlpZihmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9TY2FubmluZykKKwkJcmV0dXJuOworCQkKKwkvKiBUcnkgdG8gbW92ZSBkYXRhIGZyb20gcXVldWUgaW50byBmcmFtZSBidWZmZXIKKwkgKiBXZSBnZXQgZGF0YSBpbiBibG9ja3Mgb2YgMzg0IGJ5dGVzIG1hZGUgdXAgb2Y6CisJICogMjU2IFksIDY0IFUsIDY0IFYuCisJICogVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIG91dCBhcyBhIFkgcGxhbmUsIGEgVSBwbGFuZSBhbmQgYSBWIHBsYW5lLgorCSAqLworCQkKKwl3aGlsZSAoIGZyYW1lLT5jdXJsaW5lIDwgbWF4bGluZSAmJiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPj0gMzg0KSkgeworCQkvKiBZICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBmcmFtZS0+ZGF0YSArIChmcmFtZS0+Y3VybGluZSAqIDI1NiksIDI1Nik7CisJCS8qIFUgKi8KKwkJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGZyYW1lLT5kYXRhICsgeXBsYW5lc3ogKyAoZnJhbWUtPmN1cmxpbmUgKiA2NCksIDY0KTsKKwkJLyogViAqLworCQlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgZnJhbWUtPmRhdGEgKyAoNSAqIHlwbGFuZXN6KS80ICsgKGZyYW1lLT5jdXJsaW5lICogNjQpLCA2NCk7CisJCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSAzODQ7CisJCWZyYW1lLT5jdXJsaW5lKys7CisJfQorCS8qIFNlZSBpZiB3ZSBmaWxsZWQgdGhlIGZyYW1lICovCisJaWYgKGZyYW1lLT5jdXJsaW5lID09IG1heGxpbmUpIHsKKwkJREVCVUcoNSwgImdvdCB3aG9sZSBmcmFtZSIpOworCisJCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lX0hvbGQ7CisJCWZyYW1lLT5jdXJsaW5lID0gMDsKKwkJdXZkLT5jdXJmcmFtZSA9IC0xOworCQl1dmQtPnN0YXRzLmZyYW1lX251bSsrOworCX0KK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX2ZpbmRfZnBzKGludCBzaXplLCBpbnQgZnBzKQoreworCWludCBpOworCisJZnBzICo9IDM7CisJREVCVUcoMSwgImtvbmljYV9maW5kX2Zwczogc2l6ZSA9ICVkIGZwcyA9ICVkIiwgc2l6ZSwgZnBzKTsKKwlpZihmcHMgPD0gc3BkX3RvX2Zwc1tzaXplXVswXSkKKwkJcmV0dXJuIDA7CisKKwlpZihmcHMgPj0gc3BkX3RvX2Zwc1tzaXplXVtNQVhfU1BFRURdKQorCQlyZXR1cm4gTUFYX1NQRUVEOworCisJZm9yKGkgPSAwOyBpIDwgTUFYX1NQRUVEOyBpKyspIHsKKwkJaWYoKGZwcyA+PSBzcGRfdG9fZnBzW3NpemVdW2ldKSAmJiAoZnBzIDw9IHNwZF90b19mcHNbc2l6ZV1baSsxXSkpIHsKKwkJCURFQlVHKDIsICJmcHMgJWQgYmV0d2VlbiAlZCBhbmQgJWQiLCBmcHMsIGksIGkrMSk7CisJCQlpZiggKGZwcyAtIHNwZF90b19mcHNbc2l6ZV1baV0pIDwgKHNwZF90b19mcHNbc2l6ZV1baSsxXSAtIGZwcykpCisJCQkJcmV0dXJuIGk7CisJCQllbHNlCisJCQkJcmV0dXJuIGkrMTsKKwkJfQorCX0KKwlyZXR1cm4gTUFYX1NQRUVEKzE7Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB2aWRlb193aW5kb3cgKnZ3KQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCWludCBuZXdzcGVlZCA9IGNhbS0+c3BlZWQ7CisJaW50IG5ld3NpemU7CisJaW50IHggPSB2dy0+d2lkdGg7CisJaW50IHkgPSB2dy0+aGVpZ2h0OworCWludCBmcHMgPSB2dy0+ZmxhZ3M7CisKKwlpZih4ID4gMCAmJiB5ID4gMCkgeworCQlERUJVRygyLCAidHJ5aW5nIHRvIGZpbmQgc2l6ZSAlZCwlZCIsIHgsIHkpOworCQlmb3IobmV3c2l6ZSA9IDA7IG5ld3NpemUgPD0gTUFYX0ZSQU1FX1NJWkU7IG5ld3NpemUrKykgeworCQkJaWYoKGNhbWVyYV9zaXplc1tuZXdzaXplXS53aWR0aCA9PSB4KSAmJiAoY2FtZXJhX3NpemVzW25ld3NpemVdLmhlaWdodCA9PSB5KSkKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCW5ld3NpemUgPSBjYW0tPnNpemU7CisJfQorCisJaWYobmV3c2l6ZSA+IE1BWF9GUkFNRV9TSVpFKSB7CisJCURFQlVHKDEsICJjb3VsZG4ndCBmaW5kIHNpemUgJWQsJWQiLCB4LCB5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYoZnBzID4gMCkgeworCQlERUJVRygxLCAidHJ5aW5nIHRvIHNldCBmcHMgdG8gJWQiLCBmcHMpOworCQluZXdzcGVlZCA9IGtvbmljYXdjX2ZpbmRfZnBzKG5ld3NpemUsIGZwcyk7CisJCURFQlVHKDEsICJmaW5kX2ZwcyByZXR1cm5lZCAlZCAoJWQpIiwgbmV3c3BlZWQsIHNwZF90b19mcHNbbmV3c2l6ZV1bbmV3c3BlZWRdKTsKKwl9CisKKwlpZihuZXdzcGVlZCA+IE1BWF9TUEVFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlERUJVRygxLCAic2V0dGluZyBzaXplIHRvICVkIHNwZWVkIHRvICVkIiwgbmV3c2l6ZSwgbmV3c3BlZWQpOworCWlmKChuZXdzaXplID09IGNhbS0+c2l6ZSkgJiYgKG5ld3NwZWVkID09IGNhbS0+c3BlZWQpKSB7CisJCURFQlVHKDEsICJOb3RoaW5nIHRvIGRvIik7CisJCXJldHVybiAwOworCX0KKwlERUJVRygwLCAic2V0dGluZyB0byAgJWR4JWQgQCAlZCBmcHMiLCBjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0ud2lkdGgsCisJICAgICBjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0uaGVpZ2h0LCBzcGRfdG9fZnBzW25ld3NpemVdW25ld3NwZWVkXS8zKTsKKworCWtvbmljYXdjX3N0b3BfZGF0YSh1dmQpOworCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBzcGRfdG9faWZhY2VbbmV3c3BlZWRdOworCURFQlVHKDEsICJuZXcgaW50ZXJmYWNlID0gJWQiLCB1dmQtPmlmYWNlQWx0QWN0aXZlKTsKKwljYW0tPnNwZWVkID0gbmV3c3BlZWQ7CisKKwlpZihjYW0tPnNpemUgIT0gbmV3c2l6ZSkgeworCQljYW0tPnNpemUgPSBuZXdzaXplOworCQlrb25pY2F3Y19zZXRfY2FtZXJhX3NpemUodXZkKTsKKwl9CisKKwkvKiBGbHVzaCB0aGUgaW5wdXQgcXVldWUgYW5kIGNsZWFyIGFueSBjdXJyZW50IGZyYW1lIGluIHByb2dyZXNzICovCisKKwlSaW5nUXVldWVfRmx1c2goJnV2ZC0+ZHApOworCWNhbS0+bGFzdGZyYW1lID0gLTI7CisJaWYodXZkLT5jdXJmcmFtZSAhPSAtMSkgeworCSAgdXZkLT5mcmFtZVt1dmQtPmN1cmZyYW1lXS5jdXJsaW5lID0gMDsKKwkgIHV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV0uc2VxUmVhZF9MZW5ndGggPSAwOworCSAgdXZkLT5mcmFtZVt1dmQtPmN1cmZyYW1lXS5zZXFSZWFkX0luZGV4ID0gMDsKKwl9CisKKwlrb25pY2F3Y19zdGFydF9kYXRhKHV2ZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19jYWxjdWxhdGVfZnBzKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IHV2ZC0+dXNlcl9kYXRhOworCXJldHVybiBzcGRfdG9fZnBzW2NhbS0+c2l6ZV1bY2FtLT5zcGVlZF0vMzsKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19jb25maWd1cmVfdmlkZW8oc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCXU4IGJ1ZlsyXTsKKworCW1lbXNldCgmdXZkLT52cGljLCAwLCBzaXplb2YodXZkLT52cGljKSk7CisJbWVtc2V0KCZ1dmQtPnZwaWNfb2xkLCAweDU1LCBzaXplb2YodXZkLT52cGljX29sZCkpOworCisJUkVTVFJJQ1RfVE9fUkFOR0UoYnJpZ2h0bmVzcywgMCwgTUFYX0JSSUdIVE5FU1MpOworCVJFU1RSSUNUX1RPX1JBTkdFKGNvbnRyYXN0LCAwLCBNQVhfQ09OVFJBU1QpOworCVJFU1RSSUNUX1RPX1JBTkdFKHNhdHVyYXRpb24sIDAsIE1BWF9TQVRVUkFUSU9OKTsKKwlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIDAsIE1BWF9TSEFSUE5FU1MpOworCVJFU1RSSUNUX1RPX1JBTkdFKHdoaXRlYmFsLCAwLCBNQVhfV0hJVEVCQUwpOworCisJY2FtLT5icmlnaHRuZXNzID0gYnJpZ2h0bmVzcyAvIDExOworCWNhbS0+Y29udHJhc3QgPSBjb250cmFzdCAvIDExOworCWNhbS0+c2F0dXJhdGlvbiA9IHNhdHVyYXRpb24gLyAxMTsKKwljYW0tPnNoYXJwbmVzcyA9IHNoYXJwbmVzcyAvIDExOworCWNhbS0+d2hpdGVfYmFsID0gd2hpdGViYWwgLyAxMTsKKworCXV2ZC0+dnBpYy5jb2xvdXIgPSAxMDg7CisJdXZkLT52cGljLmh1ZSA9IDEwODsKKwl1dmQtPnZwaWMuYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisJdXZkLT52cGljLmNvbnRyYXN0ID0gY29udHJhc3Q7CisJdXZkLT52cGljLndoaXRlbmVzcyA9IHdoaXRlYmFsOworCXV2ZC0+dnBpYy5kZXB0aCA9IDY7CisJdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMFA7CisKKwltZW1zZXQoJnV2ZC0+dmNhcCwgMCwgc2l6ZW9mKHV2ZC0+dmNhcCkpOworCXN0cmNweSh1dmQtPnZjYXAubmFtZSwgIktvbmljYSBXZWJjYW0iKTsKKwl1dmQtPnZjYXAudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkU7CisJdXZkLT52Y2FwLmNoYW5uZWxzID0gMTsKKwl1dmQtPnZjYXAuYXVkaW9zID0gMDsKKwl1dmQtPnZjYXAubWlud2lkdGggPSBjYW1lcmFfc2l6ZXNbU0laRV8xNjBYMTIwXS53aWR0aDsKKwl1dmQtPnZjYXAubWluaGVpZ2h0ID0gY2FtZXJhX3NpemVzW1NJWkVfMTYwWDEyMF0uaGVpZ2h0OworCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IGNhbWVyYV9zaXplc1tTSVpFXzMyMFgyNDBdLndpZHRoOworCXV2ZC0+dmNhcC5tYXhoZWlnaHQgPSBjYW1lcmFfc2l6ZXNbU0laRV8zMjBYMjQwXS5oZWlnaHQ7CisKKwltZW1zZXQoJnV2ZC0+dmNoYW4sIDAsIHNpemVvZih1dmQtPnZjaGFuKSk7CisJdXZkLT52Y2hhbi5mbGFncyA9IDAgOworCXV2ZC0+dmNoYW4udHVuZXJzID0gMDsKKwl1dmQtPnZjaGFuLmNoYW5uZWwgPSAwOworCXV2ZC0+dmNoYW4udHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCXN0cmNweSh1dmQtPnZjaGFuLm5hbWUsICJDYW1lcmEiKTsKKworCS8qIFRhbGsgdG8gZGV2aWNlICovCisJREVCVUcoMSwgImRldmljZSBpbml0Iik7CisJaWYoIWtvbmljYXdjX2dldF9taXNjKHV2ZCwgMHgzLCAwLCAweDEwLCBidWYsIDIpKQorCQlERUJVRygyLCAiMywxMCAtPiAlMi4yeCAlMi4yeCIsIGJ1ZlswXSwgYnVmWzFdKTsKKwlpZigha29uaWNhd2NfZ2V0X21pc2ModXZkLCAweDMsIDAsIDB4MTAsIGJ1ZiwgMikpCisJCURFQlVHKDIsICIzLDEwIC0+ICUyLjJ4ICUyLjJ4IiwgYnVmWzBdLCBidWZbMV0pOworCWlmKGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAwLCAweGQpKQorCQlERUJVRygyLCAiMiwwLGQgZmFpbGVkIik7CisJREVCVUcoMSwgInNldHRpbmcgaW5pdGlhbCB2YWx1ZXMiKTsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHV2ZCAqdXZkID0gTlVMTDsKKwlpbnQgaXgsIGksIG5hczsKKwlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKKwl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKKworCURFQlVHKDEsICJrb25pY2F3Y19wcm9iZSglcCkiLCBpbnRmKTsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbygiS29uaWNhIFdlYmNhbSAocmV2LiAweCUwNHgpIiwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCVJFU1RSSUNUX1RPX1JBTkdFKHNwZWVkLCAwLCBNQVhfU1BFRUQpOworCisJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLworCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCWlmIChuYXMgIT0gOCkgeworCQllcnIoIkluY29ycmVjdCBudW1iZXIgb2YgYWx0ZXJuYXRlIHNldHRpbmdzICglZCkgZm9yIHRoaXMgY2FtZXJhISIsIG5hcyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBWYWxpZGF0ZSBhbGwgYWx0ZXJuYXRlIHNldHRpbmdzICovCisJZm9yIChpeD0wOyBpeCA8IG5hczsgaXgrKykgeworCQljb25zdCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisKKwkJaW50ZXJmYWNlID0gJmludGYtPmFsdHNldHRpbmdbaXhdOworCQlpID0gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMikgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyAldS4gZW5kcG9pbnRzISIsCisJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkgICAgKHVuc2lnbmVkKShpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOworCQlERUJVRygxLCAiZm91bmQgZW5kcG9pbnQ6IGFkZHI6IDB4JTIuMnggbWF4cHMgPSAweCU0LjR4IiwKKwkJICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKKwkJaWYgKHZpZGVvX2VwID09IDApCisJCQl2aWRlb19lcCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQllbHNlIGlmICh2aWRlb19lcCAhPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgeworCQkJZXJyKCJBbHRlcm5hdGUgc2V0dGluZ3MgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgYWRkcmVzc2VzISIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgIT0gMHgwMSkgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCisJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDApIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLAorCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmIChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID09IDApIHsKKwkJCWlmIChpbmFjdEludGVyZmFjZSA8IDApCisJCQkJaW5hY3RJbnRlcmZhY2UgPSBpOworCQkJZWxzZSB7CisJCQkJZXJyKCJNb3JlIHRoYW4gb25lIGluYWN0aXZlIGFsdC4gc2V0dGluZyEiKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChpID09IHNwZF90b19pZmFjZVtzcGVlZF0pIHsKKwkJCQkvKiBUaGlzIG9uZSBpcyB0aGUgcmVxdWVzdGVkIG9uZSAqLworCQkJCWFjdEludGVyZmFjZSA9IGk7CisJCQl9CisJCX0KKwkJaWYgKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiBtYXhQUykKKwkJCW1heFBTID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwl9CisJaWYoYWN0SW50ZXJmYWNlID09IC0xKSB7CisJCWVycigiQ2FudCBmaW5kIHJlcXVpcmVkIGVuZHBvaW50Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCURFQlVHKDEsICJTZWxlY3RpbmcgcmVxdWVzdGVkIGFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBhY3RJbnRlcmZhY2UsIG1heFBTKTsKKworCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOworCWlmICh1dmQgIT0gTlVMTCkgeworCQlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKikodXZkLT51c2VyX2RhdGEpOworCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCisJCWZvcihpID0gMDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQkJY2FtLT5zdHNfdXJiW2ldID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQkJaWYoY2FtLT5zdHNfdXJiW2ldID09IE5VTEwpIHsKKwkJCQl3aGlsZShpLS0pIHsKKwkJCQkJdXNiX2ZyZWVfdXJiKGNhbS0+c3RzX3VyYltpXSk7CisJCQkJfQorCQkJCWVycigiY2FuJ3QgYWxsb2NhdGUgdXJicyIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJCWNhbS0+c3BlZWQgPSBzcGVlZDsKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNjBYMTIwLCBTSVpFXzMyMFgyNDApOworCQljYW0tPndpZHRoID0gY2FtZXJhX3NpemVzW3NpemVdLndpZHRoOworCQljYW0tPmhlaWdodCA9IGNhbWVyYV9zaXplc1tzaXplXS5oZWlnaHQ7CisJCWNhbS0+c2l6ZSA9IHNpemU7CisKKwkJdXZkLT5mbGFncyA9IDA7CisJCXV2ZC0+ZGVidWcgPSBkZWJ1ZzsKKwkJdXZkLT5kZXYgPSBkZXY7CisJCXV2ZC0+aWZhY2UgPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJCXV2ZC0+aWZhY2VBbHRJbmFjdGl2ZSA9IGluYWN0SW50ZXJmYWNlOworCQl1dmQtPmlmYWNlQWx0QWN0aXZlID0gYWN0SW50ZXJmYWNlOworCQl1dmQtPnZpZGVvX2VuZHAgPSB2aWRlb19lcDsKKwkJdXZkLT5pc29fcGFja2V0X2xlbiA9IG1heFBTOworCQl1dmQtPnBhbGV0dGVCaXRzID0gMUwgPDwgVklERU9fUEFMRVRURV9ZVVY0MjBQOworCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVY0MjBQOworCQl1dmQtPmNhbnZhcyA9IFZJREVPU0laRSgzMjAsIDI0MCk7CisJCXV2ZC0+dmlkZW9zaXplID0gVklERU9TSVpFKGNhbS0+d2lkdGgsIGNhbS0+aGVpZ2h0KTsKKworCQkvKiBJbml0aWFsaXplIGtvbmljYXdjIHNwZWNpZmljIGRhdGEgKi8KKwkJa29uaWNhd2NfY29uZmlndXJlX3ZpZGVvKHV2ZCk7CisKKwkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKKwkJdXZkLT5tYXhfZnJhbWVfc2l6ZSA9ICgzMjAgKiAyNDAgKiAzKS8yOworCQlpZiAoaSAhPSAwKSB7CisJCQllcnIoInVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UoKSBmYWlsZWQuIik7CisJCQl1dmQgPSBOVUxMOworCQl9CisjaWZkZWYgQ09ORklHX0lOUFVUCisJCS8qIFJlZ2lzdGVyIGlucHV0IGRldmljZSBmb3IgYnV0dG9uICovCisJCW1lbXNldCgmY2FtLT5pbnB1dCwgMCwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9kZXYpKTsKKwkJY2FtLT5pbnB1dC5uYW1lID0gIktvbmljYXdjIHNuYXBzaG90IGJ1dHRvbiI7CisJCWNhbS0+aW5wdXQucHJpdmF0ZSA9IGNhbTsKKwkJY2FtLT5pbnB1dC5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCQljYW0tPmlucHV0LmtleWJpdFtMT05HKEJUTl8wKV0gPSBCSVQoQlROXzApOworCQljYW0tPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCQljYW0tPmlucHV0LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJCWNhbS0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCQljYW0tPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPmlucHV0KTsKKwkJCisJCXVzYl9tYWtlX3BhdGgoZGV2LCBjYW0tPmlucHV0X3BoeXNuYW1lLCA1Nik7CisJCXN0cmNhdChjYW0tPmlucHV0X3BoeXNuYW1lLCAiL2lucHV0MCIpOworCQljYW0tPmlucHV0LnBoeXMgPSBjYW0tPmlucHV0X3BoeXNuYW1lOworCQlpbmZvKCJrb25pY2F3YzogJXMgb24gJXNcbiIsIGNhbS0+aW5wdXQubmFtZSwgY2FtLT5pbnB1dC5waHlzKTsKKyNlbmRpZgorCX0KKworCWlmICh1dmQpIHsKKwkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX2ZyZWVfdXZkKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworI2lmZGVmIENPTkZJR19JTlBVVAorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPmlucHV0KTsKKyNlbmRpZgorCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCXVzYl9mcmVlX3VyYihjYW0tPnN0c191cmJbaV0pOworCQljYW0tPnN0c191cmJbaV0gPSBOVUxMOworCX0KK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNGM4LCAweDA3MjApIH0sIC8qIEludGVsIFlDIDc2ICovCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBrb25pY2F3Y19pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwltZW1zZXQoJmNiVGJsLCAwLCBzaXplb2YoY2JUYmwpKTsKKwljYlRibC5wcm9iZSA9IGtvbmljYXdjX3Byb2JlOworCWNiVGJsLnNldHVwT25PcGVuID0ga29uaWNhd2Nfc2V0dXBfb25fb3BlbjsKKwljYlRibC5wcm9jZXNzRGF0YSA9IGtvbmljYXdjX3Byb2Nlc3NfaXNvYzsKKwljYlRibC5nZXRGUFMgPSBrb25pY2F3Y19jYWxjdWxhdGVfZnBzOworCWNiVGJsLnNldFZpZGVvTW9kZSA9IGtvbmljYXdjX3NldF92aWRlb19tb2RlOworCWNiVGJsLnN0YXJ0RGF0YVB1bXAgPSBrb25pY2F3Y19zdGFydF9kYXRhOworCWNiVGJsLnN0b3BEYXRhUHVtcCA9IGtvbmljYXdjX3N0b3BfZGF0YTsKKwljYlRibC5hZGp1c3RQaWN0dXJlID0ga29uaWNhd2NfYWRqdXN0X3BpY3R1cmU7CisJY2JUYmwudXNlckZyZWUgPSBrb25pY2F3Y19mcmVlX3V2ZDsKKwlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCisJCSZjYW1zLAorCQlNQVhfQ0FNRVJBUywKKwkJc2l6ZW9mKHN0cnVjdCBrb25pY2F3YyksCisJCSJrb25pY2F3YyIsCisJCSZjYlRibCwKKwkJVEhJU19NT0RVTEUsCisJCWlkX3RhYmxlKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQga29uaWNhd2NfY2xlYW51cCh2b2lkKQoreworCXVzYnZpZGVvX0RlcmVnaXN0ZXIoJmNhbXMpOworfQorCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworbW9kdWxlX3BhcmFtKHNwZWVkLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzcGVlZCwgIkluaXRpYWwgc3BlZWQ6IDAgKHNsb3dlc3QpIC0gNiAoZmFzdGVzdCkiKTsKK21vZHVsZV9wYXJhbShzaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzaXplLCAiSW5pdGlhbCBTaXplIDA6IDE2MHgxMjAgMTogMTYweDEzNiAyOiAxNzZ4MTQ0IDM6IDMyMHgyNDAiKTsKK21vZHVsZV9wYXJhbShicmlnaHRuZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzLCAiSW5pdGlhbCBicmlnaHRuZXNzIDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbShjb250cmFzdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY29udHJhc3QsICJJbml0aWFsIGNvbnRyYXN0IDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbShzYXR1cmF0aW9uLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzYXR1cmF0aW9uLCAiSW5pdGlhbCBzYXR1cmF0aW9uIDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbShzaGFycG5lc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNoYXJwbmVzcywgIkluaXRpYWwgYnJpZ2h0bmVzcyAwIC0gMTA4Iik7Cittb2R1bGVfcGFyYW0od2hpdGViYWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdoaXRlYmFsLCAiSW5pdGlhbCB3aGl0ZSBiYWxhbmNlIDAgLSAzNjMiKTsKKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDAtOSAoZGVmYXVsdD0wKSIpOworI2VuZGlmCisKK21vZHVsZV9pbml0KGtvbmljYXdjX2luaXQpOworbW9kdWxlX2V4aXQoa29uaWNhd2NfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ3ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYwpAQCAtMCwwICsxLDYxMzEgQEAKKy8qCisgKiBPbW5pVmlzaW9uIE9WNTExIENhbWVyYS10by1VU0IgQnJpZGdlIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAzIE1hcmsgVy4gTWNDbGVsbGFuZAorICogT3JpZ2luYWwgZGVjb21wcmVzc2lvbiBjb2RlIENvcHlyaWdodCAxOTk4LTIwMDAgT21uaVZpc2lvbiBUZWNobm9sb2dpZXMKKyAqIE1hbnkgaW1wcm92ZW1lbnRzIGJ5IEJyZXQgV2FsbGFjaCA8YndhbGxhYzFAc2FuLnJyLmNvbT4KKyAqIENvbG9yIGZpeGVzIGJ5IGJ5IE9yaW9uIFNreSBMYXdsb3IgPG9sYXdsb3JAYWNtLm9yZz4gKDIvMjYvMjAwMCkKKyAqIFNuYXBzaG90IGNvZGUgYnkgS2V2aW4gTW9vcmUKKyAqIE9WNzYyMCBmaXhlcyBieSBDaGFybCBQLiBCb3RoYSA8Y3Bib3RoYUBpZWVlLm9yZz4KKyAqIENoYW5nZXMgYnkgQ2xhdWRpbyBNYXRzdW9rYSA8Y2xhdWRpb0Bjb25lY3RpdmEuY29tPgorICogT3JpZ2luYWwgU0FBNzExMUEgY29kZSBieSBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KKyAqIFVSQiBlcnJvciBtZXNzYWdlcyBmcm9tIHB3YyBkcml2ZXIgYnkgTmVtb3NvZnQKKyAqIGdlbmVyaWNfaW9jdGwoKSBjb2RlIGZyb20gdmlkZW9kZXYuYyBieSBHZXJkIEtub3JyIGFuZCBBbGFuIENveAorICogTWVtb3J5IG1hbmFnZW1lbnQgKHJ2bWFsbG9jKSBjb2RlIGZyb20gYnR0diBkcml2ZXIsIGJ5IEdlcmQgS25vcnIgYW5kIG90aGVycworICoKKyAqIEJhc2VkIG9uIHRoZSBMaW51eCBDUGlBIGRyaXZlciB3cml0dGVuIGJ5IFBldGVyIFByZWdsZXIsCisgKiBTY290dCBKLiBCZXJ0aW4gYW5kIEpvaGFubmVzIEVyZGZlbHQuCisgKiAKKyAqIFBsZWFzZSBzZWUgdGhlIGZpbGU6IERvY3VtZW50YXRpb24vdXNiL292NTExLnR4dAorICogYW5kIHRoZSB3ZWJzaXRlIGF0OiAgaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEKKyAqIGZvciBtb3JlIGluZm8uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2lmIGRlZmluZWQgKF9faTM4Nl9fKQorCSNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJvdjUxMS5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS42NCBmb3IgTGludXggMi41IgorI2RlZmluZSBFTUFJTCAibWFya0BhbHBoYS5keW5kbnMub3JnIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXJrIE1jQ2xlbGxhbmQgPG1hcmtAYWxwaGEuZHluZG5zLm9yZz4gJiBCcmV0IFdhbGxhY2ggXAorCSYgT3Jpb24gU2t5IExhd2xvciA8b2xhd2xvckBhY20ub3JnPiAmIEtldmluIE1vb3JlICYgQ2hhcmwgUC4gQm90aGEgXAorCTxjcGJvdGhhQGllZWUub3JnPiAmIENsYXVkaW8gTWF0c3Vva2EgPGNsYXVkaW9AY29uZWN0aXZhLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJvdjUxMSBVU0IgQ2FtZXJhIERyaXZlciIKKworI2RlZmluZSBPVjUxMV9JMkNfUkVUUklFUyAzCisjZGVmaW5lIEVOQUJMRV9ZX1FVQU5UQUJMRSAxCisjZGVmaW5lIEVOQUJMRV9VVl9RVUFOVEFCTEUgMQorCisjZGVmaW5lIE9WNTExX01BWF9VTklUX1ZJREVPIDE2CisKKy8qIFBpeGVsIGNvdW50ICogYnl0ZXMgcGVyIFlVVjQyMCBwaXhlbCAoMS41KSAqLworI2RlZmluZSBNQVhfRlJBTUVfU0laRSh3LCBoKSAoKHcpICogKGgpICogMyAvIDIpCisKKyNkZWZpbmUgTUFYX0RBVEFfU0laRSh3LCBoKSAoTUFYX0ZSQU1FX1NJWkUodywgaCkgKyBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKQorCisvKiBNYXggc2l6ZSAqIGJ5dGVzIHBlciBZVVY0MjAgcGl4ZWwgKDEuNSkgKyBvbmUgZXh0cmEgaXNvYyBmcmFtZSBmb3Igc2FmZXR5ICovCisjZGVmaW5lIE1BWF9SQVdfREFUQV9TSVpFKHcsIGgpICgodykgKiAoaCkgKiAzIC8gMiArIDEwMjQpCisKKyNkZWZpbmUgRkFUQUxfRVJST1IocmMpICgocmMpIDwgMCAmJiAocmMpICE9IC1FUEVSTSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBQYXJhbWV0ZXJzCisgKiAoU2VlIG92NTExLnR4dCBmb3IgZGV0YWlsZWQgZGVzY3JpcHRpb25zIG9mIHRoZXNlKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZXNlIHZhcmlhYmxlcyAoYW5kIGFsbCBzdGF0aWMgZ2xvYmFscykgZGVmYXVsdCB0byB6ZXJvICovCitzdGF0aWMgaW50IGF1dG9icmlnaHQJCT0gMTsKK3N0YXRpYyBpbnQgYXV0b2dhaW4JCT0gMTsKK3N0YXRpYyBpbnQgYXV0b2V4cAkJPSAxOworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBpbnQgc25hcHNob3Q7CitzdGF0aWMgaW50IGNhbXMJCQk9IDE7CitzdGF0aWMgaW50IGNvbXByZXNzOworc3RhdGljIGludCB0ZXN0cGF0Oworc3RhdGljIGludCBkdW1wcGl4Oworc3RhdGljIGludCBsZWQgCQkJPSAxOworc3RhdGljIGludCBkdW1wX2JyaWRnZTsKK3N0YXRpYyBpbnQgZHVtcF9zZW5zb3I7CitzdGF0aWMgaW50IHByaW50cGg7CitzdGF0aWMgaW50IHBoeQkJCT0gMHgxZjsKK3N0YXRpYyBpbnQgcGh1dgkJCT0gMHgwNTsKK3N0YXRpYyBpbnQgcHZ5CQkJPSAweDA2Oworc3RhdGljIGludCBwdnV2CQkJPSAweDA2Oworc3RhdGljIGludCBxaHkJCQk9IDB4MTQ7CitzdGF0aWMgaW50IHFodXYJCQk9IDB4MDM7CitzdGF0aWMgaW50IHF2eQkJCT0gMHgwNDsKK3N0YXRpYyBpbnQgcXZ1dgkJCT0gMHgwNDsKK3N0YXRpYyBpbnQgbGlnaHRmcmVxOworc3RhdGljIGludCBiYW5kaW5nZmlsdGVyOworc3RhdGljIGludCBjbG9ja2RpdgkJPSAtMTsKK3N0YXRpYyBpbnQgcGFja2V0c2l6ZQkJPSAtMTsKK3N0YXRpYyBpbnQgZnJhbWVkcm9wCQk9IC0xOworc3RhdGljIGludCBmYXN0c2V0Oworc3RhdGljIGludCBmb3JjZV9wYWxldHRlOworc3RhdGljIGludCBiYWNrbGlnaHQ7CitzdGF0aWMgaW50IHVuaXRfdmlkZW9bT1Y1MTFfTUFYX1VOSVRfVklERU9dOworc3RhdGljIGludCByZW1vdmVfemVyb3M7CitzdGF0aWMgaW50IG1pcnJvcjsKK3N0YXRpYyBpbnQgb3Y1MThfY29sb3I7CisKK21vZHVsZV9wYXJhbShhdXRvYnJpZ2h0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhdXRvYnJpZ2h0LCAiU2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBicmlnaHRuZXNzIik7Cittb2R1bGVfcGFyYW0oYXV0b2dhaW4sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9nYWluLCAiU2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBnYWluIik7Cittb2R1bGVfcGFyYW0oYXV0b2V4cCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b2V4cCwgIlNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgZXhwb3N1cmUiKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisgICJEZWJ1ZyBsZXZlbDogMD1ub25lLCAxPWluaXRzLCAyPXdhcm5pbmcsIDM9Y29uZmlnLCA0PWZ1bmN0aW9ucywgNT1tYXgiKTsKK21vZHVsZV9wYXJhbShzbmFwc2hvdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc25hcHNob3QsICJFbmFibGUgc25hcHNob3QgbW9kZSIpOworbW9kdWxlX3BhcmFtKGNhbXMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhbXMsICJOdW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMiKTsKK21vZHVsZV9wYXJhbShjb21wcmVzcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY29tcHJlc3MsICJUdXJuIG9uIGNvbXByZXNzaW9uIik7Cittb2R1bGVfcGFyYW0odGVzdHBhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGVzdHBhdCwKKyAgIlJlcGxhY2UgaW1hZ2Ugd2l0aCB2ZXJ0aWNhbCBiYXIgdGVzdHBhdHRlcm4gKG9ubHkgcGFydGlhbGx5IHdvcmtpbmcpIik7Cittb2R1bGVfcGFyYW0oZHVtcHBpeCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZHVtcHBpeCwgIkR1bXAgcmF3IHBpeGVsIGRhdGEiKTsKK21vZHVsZV9wYXJhbShsZWQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxlZCwKKyAgIkxFRCBwb2xpY3kgKE9WNTExKyBvciBsYXRlcikuIDA9b2ZmLCAxPW9uIChkZWZhdWx0KSwgMj1hdXRvIChvbiB3aGVuIG9wZW4pIik7Cittb2R1bGVfcGFyYW0oZHVtcF9icmlkZ2UsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfYnJpZGdlLCAiRHVtcCB0aGUgYnJpZGdlIHJlZ2lzdGVycyIpOworbW9kdWxlX3BhcmFtKGR1bXBfc2Vuc29yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkdW1wX3NlbnNvciwgIkR1bXAgdGhlIHNlbnNvciByZWdpc3RlcnMiKTsKK21vZHVsZV9wYXJhbShwcmludHBoLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwcmludHBoLCAiUHJpbnQgZnJhbWUgc3RhcnQvZW5kIGhlYWRlcnMiKTsKK21vZHVsZV9wYXJhbShwaHksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBoeSwgIlByZWRpY3Rpb24gcmFuZ2UgKGhvcml6LiBZKSIpOworbW9kdWxlX3BhcmFtKHBodXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBodXYsICJQcmVkaWN0aW9uIHJhbmdlIChob3Jpei4gVVYpIik7Cittb2R1bGVfcGFyYW0ocHZ5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwdnksICJQcmVkaWN0aW9uIHJhbmdlICh2ZXJ0LiBZKSIpOworbW9kdWxlX3BhcmFtKHB2dXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHB2dXYsICJQcmVkaWN0aW9uIHJhbmdlICh2ZXJ0LiBVVikiKTsKK21vZHVsZV9wYXJhbShxaHksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHFoeSwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKGhvcml6LiBZKSIpOworbW9kdWxlX3BhcmFtKHFodXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHFodXYsICJRdWFudGl6YXRpb24gdGhyZXNob2xkIChob3Jpei4gVVYpIik7Cittb2R1bGVfcGFyYW0ocXZ5LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhxdnksICJRdWFudGl6YXRpb24gdGhyZXNob2xkICh2ZXJ0LiBZKSIpOworbW9kdWxlX3BhcmFtKHF2dXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHF2dXYsICJRdWFudGl6YXRpb24gdGhyZXNob2xkICh2ZXJ0LiBVVikiKTsKK21vZHVsZV9wYXJhbShsaWdodGZyZXEsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxpZ2h0ZnJlcSwKKyAgIkxpZ2h0IGZyZXF1ZW5jeS4gU2V0IHRvIDUwIG9yIDYwIEh6LCBvciB6ZXJvIGZvciBkZWZhdWx0IHNldHRpbmdzIik7Cittb2R1bGVfcGFyYW0oYmFuZGluZ2ZpbHRlciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFuZGluZ2ZpbHRlciwKKyAgIkVuYWJsZSBiYW5kaW5nIGZpbHRlciAodG8gcmVkdWNlIGVmZmVjdHMgb2YgZmx1b3Jlc2NlbnQgbGlnaHRpbmcpIik7Cittb2R1bGVfcGFyYW0oY2xvY2tkaXYsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrZGl2LCAiRm9yY2UgcGl4ZWwgY2xvY2sgZGl2aXNvciB0byBhIHNwZWNpZmljIHZhbHVlIik7Cittb2R1bGVfcGFyYW0ocGFja2V0c2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGFja2V0c2l6ZSwgIkZvcmNlIGEgc3BlY2lmaWMgaXNvYyBwYWNrZXQgc2l6ZSIpOworbW9kdWxlX3BhcmFtKGZyYW1lZHJvcCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZnJhbWVkcm9wLCAiRm9yY2UgYSBzcGVjaWZpYyBmcmFtZSBkcm9wIHJlZ2lzdGVyIHNldHRpbmciKTsKK21vZHVsZV9wYXJhbShmYXN0c2V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmYXN0c2V0LCAiQWxsb3dzIHBpY3R1cmUgc2V0dGluZ3MgdG8gdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkiKTsKK21vZHVsZV9wYXJhbShmb3JjZV9wYWxldHRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wYWxldHRlLCAiRm9yY2UgdGhlIHBhbGV0dGUgdG8gYSBzcGVjaWZpYyB2YWx1ZSIpOworbW9kdWxlX3BhcmFtKGJhY2tsaWdodCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFja2xpZ2h0LCAiRm9yIG9iamVjdHMgdGhhdCBhcmUgbGl0IGZyb20gYmVoaW5kIik7CitzdGF0aWMgaW50IG51bV91djsKK21vZHVsZV9wYXJhbV9hcnJheSh1bml0X3ZpZGVvLCBpbnQsICZudW1fdXYsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bml0X3ZpZGVvLAorICAiRm9yY2UgdXNlIG9mIHNwZWNpZmljIG1pbm9yIG51bWJlcihzKS4gMCBpcyBub3QgYWxsb3dlZC4iKTsKK21vZHVsZV9wYXJhbShyZW1vdmVfemVyb3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbW92ZV96ZXJvcywKKyAgIlJlbW92ZSB6ZXJvLXBhZGRpbmcgZnJvbSB1bmNvbXByZXNzZWQgaW5jb21pbmcgZGF0YSIpOworbW9kdWxlX3BhcmFtKG1pcnJvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWlycm9yLCAiUmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHkiKTsKK21vZHVsZV9wYXJhbShvdjUxOF9jb2xvciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mob3Y1MThfY29sb3IsICJFbmFibGUgT1Y1MTggY29sb3IgKGV4cGVyaW1lbnRhbCkiKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaXNjZWxsYW5lb3VzIEdsb2JhbHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3Y1MTFfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm92NTExX2RlY29tcF9vcHM7CitzdGF0aWMgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm92NTExX21teF9kZWNvbXBfb3BzOworc3RhdGljIHN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpvdjUxOF9kZWNvbXBfb3BzOworc3RhdGljIHN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpvdjUxOF9tbXhfZGVjb21wX29wczsKKworLyogTnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGEgZmFpbGVkIEkyQyB0cmFuc2FjdGlvbi4gSW5jcmVhc2UgdGhpcyBpZiB5b3UKKyAqIGFyZSBnZXR0aW5nICJGYWlsZWQgdG8gcmVhZCBzZW5zb3IgSUQuLi4iICovCitzdGF0aWMgaW50IGkyY19kZXRlY3RfdHJpZXMgPSA1OworCisvKiBNTVggc3VwcG9ydCBpcyBwcmVzZW50IGluIGtlcm5lbCBhbmQgQ1BVLiBDaGVja2VkIHVwb24gZGVjb21wIG1vZHVsZSBsb2FkLiAqLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgb3Y1MXhfbW14X2F2YWlsYWJsZSAoY3B1X2hhc19tbXgpCisjZWxzZQorI2RlZmluZSBvdjUxeF9tbXhfYXZhaWxhYmxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRfT01OSVZJU0lPTiwgUFJPRF9PVjUxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORF9PTU5JVklTSU9OLCBQUk9EX09WNTExUExVUykgfSwKKwl7IFVTQl9ERVZJQ0UoVkVORF9PTU5JVklTSU9OLCBQUk9EX09WNTE4KSB9LAorCXsgVVNCX0RFVklDRShWRU5EX09NTklWSVNJT04sIFBST0RfT1Y1MThQTFVTKSB9LAorCXsgVVNCX0RFVklDRShWRU5EX01BVFRFTCwgUFJPRF9NRTJDQU0pIH0sCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkZXZpY2VfdGFibGUpOworCitzdGF0aWMgdW5zaWduZWQgY2hhciB5UXVhblRhYmxlNTExW10gPSBPVjUxMV9ZUVVBTlRBQkxFOworc3RhdGljIHVuc2lnbmVkIGNoYXIgdXZRdWFuVGFibGU1MTFbXSA9IE9WNTExX1VWUVVBTlRBQkxFOworc3RhdGljIHVuc2lnbmVkIGNoYXIgeVF1YW5UYWJsZTUxOFtdID0gT1Y1MThfWVFVQU5UQUJMRTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHV2UXVhblRhYmxlNTE4W10gPSBPVjUxOF9VVlFVQU5UQUJMRTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5bWJvbGljIE5hbWVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS25vd24gT1Y1MTEtYmFzZWQgY2FtZXJhcyAqLworc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IGNhbWxpc3RbXSA9IHsKKwl7ICAgMCwgIkdlbmVyaWMgQ2FtZXJhIChubyBJRCkiIH0sCisJeyAgIDEsICJNdXN0ZWsgV0NhbSAzWCIgfSwKKwl7ICAgMywgIkQtTGluayBEU0ItQzMwMCIgfSwKKwl7ICAgNCwgIkdlbmVyaWMgT1Y1MTEvT1Y3NjEwIiB9LAorCXsgICA1LCAiUHVyZXRlayBQVC02MDA3IiB9LAorCXsgICA2LCAiTGlmZXZpZXcgVVNCIExpZmUgVFYgKE5UU0MpIiB9LAorCXsgIDIxLCAiQ3JlYXRpdmUgTGFicyBXZWJDYW0gMyIgfSwKKwl7ICAyMiwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwgRC9LK0IvRykiIH0sCisJeyAgMzYsICJLb2FsYS1DYW0iIH0sCisJeyAgMzgsICJMaWZldmlldyBVU0IgTGlmZSBUViAoUEFMKSIgfSwKKwl7ICA0MSwgIlNhbXN1bmcgQW55Y2FtIE1QQy1NMTAiIH0sCisJeyAgNDMsICJNdGVrdmlzaW9uIFplY2EgTVY0MDIiIH0sCisJeyAgNDYsICJTdW1hIGVPTiIgfSwKKwl7ICA3MCwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwvU0VDQU0pIiB9LAorCXsgMTAwLCAiTGlmZXZpZXcgUm9ib0NhbSIgfSwKKwl7IDEwMiwgIkF2ZXJNZWRpYSBJbnRlckNhbSBFbGl0ZSIgfSwKKwl7IDExMiwgIk1lZGlhRm9ydGUgTVYzMDAiIH0sCS8qIG9yIE9WNzExMCBldmFsdWF0aW9uIGtpdCAqLworCXsgMTM0LCAiRXpvbmljcyBFWkNhbSBJSSIgfSwKKwl7IDE5MiwgIldlYmV5ZSAyMDAwQiIgfSwKKwl7IDI1MywgIkFscGhhIFZpc2lvbiBUZWNoLiBBbHBoYUNhbSBTRSIgfSwKKwl7ICAtMSwgTlVMTCB9Cit9OworCisvKiBWaWRlbzRMaW51eDEgUGFsZXR0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9saWNfbGlzdCB2NGwxX3BsaXN0W10gPSB7CisJeyBWSURFT19QQUxFVFRFX0dSRVksCSJHUkVZIiB9LAorCXsgVklERU9fUEFMRVRURV9ISTI0MCwJIkhJMjQwIiB9LAorCXsgVklERU9fUEFMRVRURV9SR0I1NjUsCSJSR0I1NjUiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjI0LAkiUkdCMjQiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjMyLAkiUkdCMzIiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjU1NSwJIlJHQjU1NSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyLAkiWVVWNDIyIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVlWLAkiWVVZViIgfSwKKwl7IFZJREVPX1BBTEVUVEVfVVlWWSwJIlVZVlkiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMCwJIllVVjQyMCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDExLAkiWVVWNDExIiB9LAorCXsgVklERU9fUEFMRVRURV9SQVcsCSJSQVciIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMlAsIllVVjQyMlAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMVAsIllVVjQxMVAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMFAsIllVVjQyMFAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMFAsIllVVjQxMFAiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3QgYnJnbGlzdFtdID0geworCXsgQlJHX09WNTExLAkJIk9WNTExIiB9LAorCXsgQlJHX09WNTExUExVUywJIk9WNTExKyIgfSwKKwl7IEJSR19PVjUxOCwJCSJPVjUxOCIgfSwKKwl7IEJSR19PVjUxOFBMVVMsCSJPVjUxOCsiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3Qgc2VubGlzdFtdID0geworCXsgU0VOX09WNzZCRSwJIk9WNzZCRSIgfSwKKwl7IFNFTl9PVjc2MTAsCSJPVjc2MTAiIH0sCisJeyBTRU5fT1Y3NjIwLAkiT1Y3NjIwIiB9LAorCXsgU0VOX09WNzYyMEFFLAkiT1Y3NjIwQUUiIH0sCisJeyBTRU5fT1Y2NjIwLAkiT1Y2NjIwIiB9LAorCXsgU0VOX09WNjYzMCwJIk9WNjYzMCIgfSwKKwl7IFNFTl9PVjY2MzBBRSwJIk9WNjYzMEFFIiB9LAorCXsgU0VOX09WNjYzMEFGLAkiT1Y2NjMwQUYiIH0sCisJeyBTRU5fT1Y4NjAwLAkiT1Y4NjAwIiB9LAorCXsgU0VOX0tTMDEyNywJIktTMDEyNyIgfSwKKwl7IFNFTl9LUzAxMjdCLAkiS1MwMTI3QiIgfSwKKwl7IFNFTl9TQUE3MTExQSwJIlNBQTcxMTFBIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworLyogVVJCIGVycm9yIGNvZGVzOiAqLworc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IHVyYl9lcnJsaXN0W10gPSB7CisJeyAtRU5PU1IsCSJCdWZmZXIgZXJyb3IgKG92ZXJydW4pIiB9LAorCXsgLUVQSVBFLAkiU3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSIgfSwKKwl7IC1FT1ZFUkZMT1csCSJCYWJibGUgKGJhZCBjYWJsZT8pIiB9LAorCXsgLUVQUk9UTywJIkJpdC1zdHVmZiBlcnJvciAoYmFkIGNhYmxlPykiIH0sCisJeyAtRUlMU0VRLAkiQ1JDL1RpbWVvdXQiIH0sCisJeyAtRVRJTUVET1VULAkiTkFLIChkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IG1hbmFnZW1lbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgKgorcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZAorcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmVnaXN0ZXIgSS9PCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFdyaXRlIGFuIE9WNTF4IHJlZ2lzdGVyICovCitzdGF0aWMgaW50CityZWdfdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwlvdi0+Y2J1ZlswXSA9IHZhbHVlOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG92LT5kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShvdi0+ZGV2LCAwKSwKKwkJCSAgICAgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KT8xOjIgLyogUkVHX0lPICovLAorCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAwLCAoX191MTYpcmVnLCAmb3YtPmNidWZbMF0sIDEsIDEwMDApOworCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKworCWlmIChyYyA8IDApCisJCWVycigicmVnIHdyaXRlOiBlcnJvciAlZDogJXMiLCByYywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJjKSk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFJlYWQgZnJvbSBhbiBPVjUxeCByZWdpc3RlciAqLworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQKK3JlZ19yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhvdi0+ZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUob3YtPmRldiwgMCksCisJCQkgICAgIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCk/MTozIC8qIFJFR19JTyAqLywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgIDAsIChfX3UxNilyZWcsICZvdi0+Y2J1ZlswXSwgMSwgMTAwMCk7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigicmVnIHJlYWQ6IGVycm9yICVkOiAlcyIsIHJjLCBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmMpKTsKKwl9IGVsc2UgeworCQlyYyA9IG92LT5jYnVmWzBdOworCQlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIG92LT5jYnVmWzBdKTsKKwl9CisKKwl1cCgmb3YtPmNidWZfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBXcml0ZXMgYml0cyBhdCBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IG1hc2sgdG8gYW4gT1Y1MXggcmVnLiBCaXRzIHRoYXQgYXJlIGluCisgKiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAxJ3MgaW4gIm1hc2siIGFyZSBjbGVhcmVkIGFuZCBzZXQgdG8gInZhbHVlIi4gQml0cworICogdGhhdCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgMCdzIGluICJtYXNrIiBhcmUgcHJlc2VydmVkLCByZWdhcmRsZXNzCisgKiBvZiB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGluICJ2YWx1ZSIuCisgKi8KK3N0YXRpYyBpbnQKK3JlZ193X21hc2soc3RydWN0IHVzYl9vdjUxMSAqb3YsCisJICAgdW5zaWduZWQgY2hhciByZWcsCisJICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKKwkgICB1bnNpZ25lZCBjaGFyIG1hc2spCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIG9sZHZhbCwgbmV3dmFsOworCisJcmV0ID0gcmVnX3Iob3YsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlvbGR2YWwgPSAodW5zaWduZWQgY2hhcikgcmV0OworCW9sZHZhbCAmPSAofm1hc2spOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCisJdmFsdWUgJj0gbWFzazsJCQkvKiBFbmZvcmNlIG1hc2sgb24gdmFsdWUgKi8KKwluZXd2YWwgPSBvbGR2YWwgfCB2YWx1ZTsJLyogU2V0IHRoZSBkZXNpcmVkIGJpdHMgKi8KKworCXJldHVybiAocmVnX3cob3YsIHJlZywgbmV3dmFsKSk7Cit9CisKKy8qIAorICogV3JpdGVzIG11bHRpcGxlIChuKSBieXRlIHZhbHVlIHRvIGEgc2luZ2xlIHJlZ2lzdGVyLiBPbmx5IHZhbGlkIHdpdGggY2VydGFpbgorICogcmVnaXN0ZXJzICgweDMwIGFuZCAweGM0IC0gMHhjZSkuCisgKi8KK3N0YXRpYyBpbnQKK292NTE4X3JlZ193MzIoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnLCB1MzIgdmFsLCBpbnQgbikKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNSwgIjB4JTAyWDolN2QsIG49JWQiLCByZWcsIHZhbCwgbik7CisKKwlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKworCSooKF9fbGUzMiAqKW92LT5jYnVmKSA9IF9fY3B1X3RvX2xlMzIodmFsKTsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG92LT5kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShvdi0+ZGV2LCAwKSwKKwkJCSAgICAgMSAvKiBSRUdfSU8gKi8sCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgIDAsIChfX3UxNilyZWcsIG92LT5jYnVmLCBuLCAxMDAwKTsKKwl1cCgmb3YtPmNidWZfbG9jayk7CisKKwlpZiAocmMgPCAwKQorCQllcnIoInJlZyB3cml0ZSBtdWx0aXBsZTogZXJyb3IgJWQ6ICVzIiwgcmMsCisJCSAgICBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmMpKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorb3Y1MTFfdXBsb2FkX3F1YW5fdGFibGVzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXVuc2lnbmVkIGNoYXIgKnBZVGFibGUgPSB5UXVhblRhYmxlNTExOworCXVuc2lnbmVkIGNoYXIgKnBVVlRhYmxlID0gdXZRdWFuVGFibGU1MTE7CisJdW5zaWduZWQgY2hhciB2YWwwLCB2YWwxOworCWludCBpLCByYywgcmVnID0gUjUxMV9DT01QX0xVVF9CRUdJTjsKKworCVBERUJVRyg0LCAiVXBsb2FkaW5nIHF1YW50aXphdGlvbiB0YWJsZXMiKTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9RVUFOVEFCTEVTSVpFIC8gMjsgaSsrKSB7CisJCWlmIChFTkFCTEVfWV9RVUFOVEFCTEUpCXsKKwkJCXZhbDAgPSAqcFlUYWJsZSsrOworCQkJdmFsMSA9ICpwWVRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZywgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCWlmIChFTkFCTEVfVVZfUVVBTlRBQkxFKSB7CisJCQl2YWwwID0gKnBVVlRhYmxlKys7CisJCQl2YWwxID0gKnBVVlRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZyArIE9WNTExX1FVQU5UQUJMRVNJWkUvMiwgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCXJlZysrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBPVjUxOCBxdWFudGl6YXRpb24gdGFibGVzIGFyZSA4eDQgKGluc3RlYWQgb2YgOHg4KSAqLworc3RhdGljIGludAorb3Y1MThfdXBsb2FkX3F1YW5fdGFibGVzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXVuc2lnbmVkIGNoYXIgKnBZVGFibGUgPSB5UXVhblRhYmxlNTE4OworCXVuc2lnbmVkIGNoYXIgKnBVVlRhYmxlID0gdXZRdWFuVGFibGU1MTg7CisJdW5zaWduZWQgY2hhciB2YWwwLCB2YWwxOworCWludCBpLCByYywgcmVnID0gUjUxMV9DT01QX0xVVF9CRUdJTjsKKworCVBERUJVRyg0LCAiVXBsb2FkaW5nIHF1YW50aXphdGlvbiB0YWJsZXMiKTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxOF9RVUFOVEFCTEVTSVpFIC8gMjsgaSsrKSB7CisJCWlmIChFTkFCTEVfWV9RVUFOVEFCTEUpIHsKKwkJCXZhbDAgPSAqcFlUYWJsZSsrOworCQkJdmFsMSA9ICpwWVRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZywgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCWlmIChFTkFCTEVfVVZfUVVBTlRBQkxFKSB7CisJCQl2YWwwID0gKnBVVlRhYmxlKys7CisJCQl2YWwxID0gKnBVVlRhYmxlKys7CisJCQl2YWwwICY9IDB4MGY7CisJCQl2YWwxICY9IDB4MGY7CisJCQl2YWwwIHw9IHZhbDEgPDwgNDsKKwkJCXJjID0gcmVnX3cob3YsIHJlZyArIE9WNTE4X1FVQU5UQUJMRVNJWkUvMiwgdmFsMCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCXJlZysrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvdjUxeF9yZXNldChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZXNldF90eXBlKQoreworCWludCByYzsKKworCS8qIFNldHRpbmcgYml0IDAgbm90IGFsbG93ZWQgb24gNTE4LzUxOFBsdXMgKi8KKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJlc2V0X3R5cGUgJj0gMHhmZTsKKworCVBERUJVRyg0LCAiUmVzZXQ6IHR5cGU9MHglMDJYIiwgcmVzZXRfdHlwZSk7CisKKwlyYyA9IHJlZ193KG92LCBSNTF4X1NZU19SRVNFVCwgcmVzZXRfdHlwZSk7CisJcmMgPSByZWdfdyhvdiwgUjUxeF9TWVNfUkVTRVQsIDApOworCisJaWYgKHJjIDwgMCkKKwkJZXJyKCJyZXNldDogY29tbWFuZCBmYWlsZWQiKTsKKworCXJldHVybiByYzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMb3ctbGV2ZWwgSTJDIEkvTyBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTk9URTogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEKKyAqIFRoZSBPVjUxOCBJMkMgSS9PIHByb2NlZHVyZSBpcyBkaWZmZXJlbnQsIGhlbmNlLCB0aGlzIGZ1bmN0aW9uLgorICogVGhpcyBpcyBub3JtYWxseSBvbmx5IGNhbGxlZCBmcm9tIGkyY193KCkuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCisgKiBhbHdheXMgc3VjY2VlZHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzZW5zb3IgaXMgcHJlc2VudCBhbmQgd29ya2luZy4KKyAqLworc3RhdGljIGludAorb3Y1MThfaTJjX3dyaXRlX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCQkJIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBXcml0ZSAidmFsdWUiIHRvIEkyQyBkYXRhIHBvcnQgb2YgT1Y1MTEgKi8KKwlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMy1ieXRlIHdyaXRlIGN5Y2xlICovCisJcmMgPSByZWdfdyhvdiwgUjUxOF9JMkNfQ1RMLCAweDAxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworLyogTk9URTogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEgKi8KK3N0YXRpYyBpbnQKK292NTExX2kyY193cml0ZV9pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJCSB1bnNpZ25lZCBjaGFyIHJlZywKKwkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCByYywgcmV0cmllczsKKworCVBERUJVRyg1LCAiMHglMDJYOjB4JTAyWCIsIHJlZywgdmFsdWUpOworCisJLyogVGhyZWUgYnl0ZSB3cml0ZSBjeWNsZSAqLworCWZvciAocmV0cmllcyA9IE9WNTExX0kyQ19SRVRSSUVTOyA7ICkgeworCQkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1NBRERSXzMsIHJlZyk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKworCQkvKiBXcml0ZSAidmFsdWUiIHRvIEkyQyBkYXRhIHBvcnQgb2YgT1Y1MTEgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfREFUQSwgdmFsdWUpOworCQlpZiAocmMgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogSW5pdGlhdGUgMy1ieXRlIHdyaXRlIGN5Y2xlICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwMSk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKworCQkvKiBSZXRyeSB1bnRpbCBpZGxlICovCisJCWRvCisJCQlyYyA9IHJlZ19yKG92LCBSNTExX0kyQ19DVEwpOworCQl3aGlsZSAocmMgPiAwICYmICgocmMmMSkgPT0gMCkpOyAKKwkJaWYgKHJjIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIEFjaz8gKi8KKwkJaWYgKChyYyYyKSA9PSAwKSB7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorI2lmIDAKKwkJLyogSTJDIGFib3J0ICovCisJCXJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MTApOworI2VuZGlmCisJCWlmICgtLXJldHJpZXMgPCAwKSB7CisJCQllcnIoImkyYyB3cml0ZSByZXRyaWVzIGV4aGF1c3RlZCIpOworCQkJcmMgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKiBOT1RFOiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IQorICogVGhlIE9WNTE4IEkyQyBJL08gcHJvY2VkdXJlIGlzIGRpZmZlcmVudCwgaGVuY2UsIHRoaXMgZnVuY3Rpb24uCisgKiBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIGZyb20gaTJjX3IoKS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGFsd2F5cyBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlbnNvciBpcyBwcmVzZW50IGFuZCB3b3JraW5nLgorICovCitzdGF0aWMgaW50CitvdjUxOF9pMmNfcmVhZF9pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcpCit7CisJaW50IHJjLCB2YWx1ZTsKKworCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KKwlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19TQUREUl8yLCByZWcpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIEluaXRpYXRlIDItYnl0ZSB3cml0ZSBjeWNsZSAqLworCXJjID0gcmVnX3cob3YsIFI1MThfSTJDX0NUTCwgMHgwMyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMi1ieXRlIHJlYWQgY3ljbGUgKi8KKwlyYyA9IHJlZ193KG92LCBSNTE4X0kyQ19DVEwsIDB4MDUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXZhbHVlID0gcmVnX3Iob3YsIFI1MXhfSTJDX0RBVEEpOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIE5PVEU6IERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCisgKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLworc3RhdGljIGludAorb3Y1MTFfaTJjX3JlYWRfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCWludCByYywgdmFsdWUsIHJldHJpZXM7CisKKwkvKiBUd28gYnl0ZSB3cml0ZSBjeWNsZSAqLworCWZvciAocmV0cmllcyA9IE9WNTExX0kyQ19SRVRSSUVTOyA7ICkgeworCQkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCisJCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1NBRERSXzIsIHJlZyk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogSW5pdGlhdGUgMi1ieXRlIHdyaXRlIGN5Y2xlICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwMyk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQlkbworCQkJIHJjID0gcmVnX3Iob3YsIFI1MTFfSTJDX0NUTCk7CisJCXdoaWxlIChyYyA+IDAgJiYgKChyYyYxKSA9PSAwKSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJaWYgKChyYyYyKSA9PSAwKSAvKiBBY2s/ICovCisJCQlicmVhazsKKworCQkvKiBJMkMgYWJvcnQgKi8KKwkJcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgxMCk7CisKKwkJaWYgKC0tcmV0cmllcyA8IDApIHsKKwkJCWVycigiaTJjIHdyaXRlIHJldHJpZXMgZXhoYXVzdGVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBUd28gYnl0ZSByZWFkIGN5Y2xlICovCisJZm9yIChyZXRyaWVzID0gT1Y1MTFfSTJDX1JFVFJJRVM7IDsgKSB7CisJCS8qIEluaXRpYXRlIDItYnl0ZSByZWFkIGN5Y2xlICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwNSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogUmV0cnkgdW50aWwgaWRsZSAqLworCQlkbworCQkJcmMgPSByZWdfcihvdiwgUjUxMV9JMkNfQ1RMKTsKKwkJd2hpbGUgKHJjID4gMCAmJiAoKHJjJjEpID09IDApKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlpZiAoKHJjJjIpID09IDApIC8qIEFjaz8gKi8KKwkJCWJyZWFrOworCisJCS8qIEkyQyBhYm9ydCAqLworCQlyYyA9IHJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MTApOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWlmICgtLXJldHJpZXMgPCAwKSB7CisJCQllcnIoImkyYyByZWFkIHJldHJpZXMgZXhoYXVzdGVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwl2YWx1ZSA9IHJlZ19yKG92LCBSNTF4X0kyQ19EQVRBKTsKKworCVBERUJVRyg1LCAiMHglMDJYOjB4JTAyWCIsIHJlZywgdmFsdWUpOworCisJLyogVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBpMmNfdygpIHdvcmsgKi8KKwlyYyA9IHJlZ193KG92LCBSNTExX0kyQ19DVEwsIDB4MDUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyogcmV0dXJuczogbmVnYXRpdmUgaXMgZXJyb3IsIHBvcyBvciB6ZXJvIGlzIGRhdGEgKi8KK3N0YXRpYyBpbnQKK2kyY19yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQlyYyA9IG92NTE4X2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCWVsc2UKKwkJcmMgPSBvdjUxMV9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKworCXVwKCZvdi0+aTJjX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitpMmNfdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmMgPSBvdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUpOworCWVsc2UKKwkJcmMgPSBvdjUxMV9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUpOworCisJdXAoJm92LT5pMmNfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhICovCitzdGF0aWMgaW50CitvdjUxeF9pMmNfd3JpdGVfbWFza19pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBvbGR2YWwsIG5ld3ZhbDsKKworCWlmIChtYXNrID09IDB4ZmYpIHsKKwkJbmV3dmFsID0gdmFsdWU7CisJfSBlbHNlIHsKKwkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQkJcmMgPSBvdjUxOF9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKwkJZWxzZQorCQkJcmMgPSBvdjUxMV9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlvbGR2YWwgPSAodW5zaWduZWQgY2hhcikgcmM7CisJCW9sZHZhbCAmPSAofm1hc2spOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCisJCXZhbHVlICY9IG1hc2s7CQkJLyogRW5mb3JjZSBtYXNrIG9uIHZhbHVlICovCisJCW5ld3ZhbCA9IG9sZHZhbCB8IHZhbHVlOwkvKiBTZXQgdGhlIGRlc2lyZWQgYml0cyAqLworCX0KKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmV0dXJuIChvdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwob3YsIHJlZywgbmV3dmFsKSk7CisJZWxzZQorCQlyZXR1cm4gKG92NTExX2kyY193cml0ZV9pbnRlcm5hbChvdiwgcmVnLCBuZXd2YWwpKTsKK30KKworLyogV3JpdGVzIGJpdHMgYXQgcG9zaXRpb25zIHNwZWNpZmllZCBieSBtYXNrIHRvIGFuIEkyQyByZWcuIEJpdHMgdGhhdCBhcmUgaW4KKyAqIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDEncyBpbiAibWFzayIgYXJlIGNsZWFyZWQgYW5kIHNldCB0byAidmFsdWUiLiBCaXRzCisgKiB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAwJ3MgaW4gIm1hc2siIGFyZSBwcmVzZXJ2ZWQsIHJlZ2FyZGxlc3MKKyAqIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgaW4gInZhbHVlIi4KKyAqLworc3RhdGljIGludAoraTJjX3dfbWFzayhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkgICB1bnNpZ25lZCBjaGFyIHZhbHVlLAorCSAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCXJjID0gb3Y1MXhfaTJjX3dyaXRlX21hc2tfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUsIG1hc2spOworCXVwKCZvdi0+aTJjX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCisvKiBTZXQgdGhlIHJlYWQgYW5kIHdyaXRlIHNsYXZlIElEcy4gVGhlICJzbGF2ZSIgYXJndW1lbnQgaXMgdGhlIHdyaXRlIHNsYXZlLAorICogYW5kIHRoZSByZWFkIHNsYXZlIHdpbGwgYmUgc2V0IHRvIChzbGF2ZSArIDEpLiBvdi0+aTJjX2xvY2sgc2hvdWxkIGJlIGhlbGQKKyAqIHdoZW4gY2FsbGluZyB0aGlzLiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgaTJjIEkvTworICogZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50CitpMmNfc2V0X3NsYXZlX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHNsYXZlKQoreworCWludCByYzsKKworCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1dfU0lELCBzbGF2ZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfUl9TSUQsIHNsYXZlICsgMSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdyaXRlIHRvIGEgc3BlY2lmaWMgSTJDIHNsYXZlIElEIGFuZCByZWdpc3RlciwgdXNpbmcgdGhlIHNwZWNpZmllZCBtYXNrICovCitzdGF0aWMgaW50CitpMmNfd19zbGF2ZShzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICAgdW5zaWduZWQgY2hhciBzbGF2ZSwKKwkgICAgdW5zaWduZWQgY2hhciByZWcsCisJICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUsCisJICAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmMgPSAwOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCS8qIFNldCBuZXcgc2xhdmUgSURzICovCisJcmMgPSBpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBzbGF2ZSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlyYyA9IG92NTF4X2kyY193cml0ZV9tYXNrX2ludGVybmFsKG92LCByZWcsIHZhbHVlLCBtYXNrKTsKKworb3V0OgorCS8qIFJlc3RvcmUgcHJpbWFyeSBJRHMgKi8KKwlpZiAoaTJjX3NldF9zbGF2ZV9pbnRlcm5hbChvdiwgb3YtPnByaW1hcnlfaTJjX3NsYXZlKSA8IDApCisJCWVycigiQ291bGRuJ3QgcmVzdG9yZSBwcmltYXJ5IEkyQyBzbGF2ZSIpOworCisJdXAoJm92LT5pMmNfbG9jayk7CisJcmV0dXJuIHJjOworfQorCisvKiBSZWFkIGZyb20gYSBzcGVjaWZpYyBJMkMgc2xhdmUgSUQgYW5kIHJlZ2lzdGVyICovCitzdGF0aWMgaW50CitpMmNfcl9zbGF2ZShzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICAgdW5zaWduZWQgY2hhciBzbGF2ZSwKKwkgICAgdW5zaWduZWQgY2hhciByZWcpCit7CisJaW50IHJjOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCS8qIFNldCBuZXcgc2xhdmUgSURzICovCisJcmMgPSBpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBzbGF2ZSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7CisJZWxzZQorCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCitvdXQ6CisJLyogUmVzdG9yZSBwcmltYXJ5IElEcyAqLworCWlmIChpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBvdi0+cHJpbWFyeV9pMmNfc2xhdmUpIDwgMCkKKwkJZXJyKCJDb3VsZG4ndCByZXN0b3JlIHByaW1hcnkgSTJDIHNsYXZlIik7CisKKwl1cCgmb3YtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFNldHMgSTJDIHJlYWQgYW5kIHdyaXRlIHNsYXZlIElEcy4gUmV0dXJucyA8MCBmb3IgZXJyb3IgKi8KK3N0YXRpYyBpbnQKK292NTF4X3NldF9zbGF2ZV9pZHMoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgc2lkKQoreworCWludCByYzsKKworCWRvd24oJm92LT5pMmNfbG9jayk7CisKKwlyYyA9IGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIHNpZCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvLyBGSVhNRTogSXMgdGhpcyBhY3R1YWxseSBuZWNlc3Nhcnk/CisJcmMgPSBvdjUxeF9yZXNldChvdiwgT1Y1MTFfUkVTRVRfTk9SRUdTKTsKK291dDoKKwl1cCgmb3YtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3JlZ3ZhbHMoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9yZWd2YWxzICogcFJlZ3ZhbHMpCit7CisJaW50IHJjOworCisJd2hpbGUgKHBSZWd2YWxzLT5idXMgIT0gT1Y1MTFfRE9ORV9CVVMpIHsKKwkJaWYgKHBSZWd2YWxzLT5idXMgPT0gT1Y1MTFfUkVHX0JVUykgeworCQkJaWYgKChyYyA9IHJlZ193KG92LCBwUmVndmFscy0+cmVnLCBwUmVndmFscy0+dmFsKSkgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfSBlbHNlIGlmIChwUmVndmFscy0+YnVzID09IE9WNTExX0kyQ19CVVMpIHsKKwkJCWlmICgocmMgPSBpMmNfdyhvdiwgcFJlZ3ZhbHMtPnJlZywgcFJlZ3ZhbHMtPnZhbCkpIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0gZWxzZSB7CisJCQllcnIoIkJhZCByZWd2YWwgYXJyYXkiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwUmVndmFscysrOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIE9WNTExX0RFQlVHCitzdGF0aWMgdm9pZAorZHVtcF9pMmNfcmFuZ2Uoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCByZWcxLCBpbnQgcmVnbikKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSByZWcxOyBpIDw9IHJlZ247IGkrKykgeworCQlyYyA9IGkyY19yKG92LCBpKTsKKwkJaW5mbygiU2Vuc29yWzB4JTAyWF0gPSAweCUwMlgiLCBpLCByYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorZHVtcF9pMmNfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbmZvKCJJMkMgUkVHUyIpOworCWR1bXBfaTJjX3JhbmdlKG92LCAweDAwLCAweDdDKTsKK30KKworc3RhdGljIHZvaWQKK2R1bXBfcmVnX3JhbmdlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgcmVnMSwgaW50IHJlZ24pCit7CisJaW50IGksIHJjOworCisJZm9yIChpID0gcmVnMTsgaSA8PSByZWduOyBpKyspIHsKKwkJcmMgPSByZWdfcihvdiwgaSk7CisJCWluZm8oIk9WNTExWzB4JTAyWF0gPSAweCUwMlgiLCBpLCByYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MTFfZHVtcF9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWluZm8oIkNBTUVSQSBJTlRFUkZBQ0UgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDEwLCAweDFmKTsKKwlpbmZvKCJEUkFNIElOVEVSRkFDRSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MjAsIDB4MjMpOworCWluZm8oIklTTyBGSUZPIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgzMCwgMHgzMSk7CisJaW5mbygiUElPIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgzOCwgMHgzOSk7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4M2UsIDB4M2UpOworCWluZm8oIkkyQyBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NDAsIDB4NDkpOworCWluZm8oIlNZU1RFTSBDT05UUk9MIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg1MCwgMHg1NSk7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NWUsIDB4NWYpOworCWluZm8oIk9tbmlDRSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NzAsIDB4NzkpOworCS8qIE5PVEU6IFF1YW50aXphdGlvbiB0YWJsZXMgYXJlIG5vdCByZWFkYWJsZS4gWW91IHdpbGwgZ2V0IHRoZSB2YWx1ZQorCSAqIGluIHJlZy4gMHg3OSBmb3IgZXZlcnkgdGFibGUgcmVnaXN0ZXIgKi8KKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg4MCwgMHg5Zik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YTAsIDB4YmYpOworCit9CisKK3N0YXRpYyB2b2lkCitvdjUxOF9kdW1wX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW5mbygiVklERU8gTU9ERSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MjAsIDB4MmYpOworCWluZm8oIkRBVEEgUFVNUCBBTkQgU05BUFNIT1QgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDMwLCAweDNmKTsKKwlpbmZvKCJJMkMgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDQwLCAweDRmKTsKKwlpbmZvKCJTWVNURU0gQ09OVFJPTCBBTkQgVkVORE9SIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg1MCwgMHg1Zik7CisJaW5mbygiNjAgLSA2RiIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDYwLCAweDZmKTsKKwlpbmZvKCI3MCAtIDdGIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NzAsIDB4N2YpOworCWluZm8oIlkgUVVBTlRJWkFUSU9OIFRBQkxFIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4ODAsIDB4OGYpOworCWluZm8oIlVWIFFVQU5USVpBVElPTiBUQUJMRSIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDkwLCAweDlmKTsKKwlpbmZvKCJBMCAtIEJGIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YTAsIDB4YmYpOworCWluZm8oIkNCUiIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweGMwLCAweGNmKTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRlbXBvcmFyaWx5IHN0b3BzIE9WNTExIGZyb20gZnVuY3Rpb25pbmcuIE11c3QgZG8gdGhpcyBiZWZvcmUgY2hhbmdpbmcKKyAqIHJlZ2lzdGVycyB3aGlsZSB0aGUgY2FtZXJhIGlzIHN0cmVhbWluZyAqLworc3RhdGljIGlubGluZSBpbnQKK292NTF4X3N0b3Aoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJUERFQlVHKDQsICJzdG9wcGluZyIpOworCW92LT5zdG9wcGVkID0gMTsKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJldHVybiAocmVnX3dfbWFzayhvdiwgUjUxeF9TWVNfUkVTRVQsIDB4M2EsIDB4M2EpKTsKKwllbHNlCisJCXJldHVybiAocmVnX3cob3YsIFI1MXhfU1lTX1JFU0VULCAweDNkKSk7Cit9CisKKy8qIFJlc3RhcnRzIE9WNTExIGFmdGVyIG92NTExX3N0b3AoKSBpcyBjYWxsZWQuIEhhcyBubyBlZmZlY3QgaWYgaXQgaXMgbm90CisgKiBhY3R1YWxseSBzdG9wcGVkIChmb3IgcGVyZm9ybWFuY2UpLiAqLworc3RhdGljIGlubGluZSBpbnQKK292NTF4X3Jlc3RhcnQoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaWYgKG92LT5zdG9wcGVkKSB7CisJCVBERUJVRyg0LCAicmVzdGFydGluZyIpOworCQlvdi0+c3RvcHBlZCA9IDA7CisKKwkJLyogUmVpbml0aWFsaXplIHRoZSBzdHJlYW0gKi8KKwkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQkJcmVnX3cob3YsIDB4MmYsIDB4ODApOworCisJCXJldHVybiAocmVnX3cob3YsIFI1MXhfU1lTX1JFU0VULCAweDAwKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNsZWVwcyB1bnRpbCBubyBmcmFtZXMgYXJlIGFjdGl2ZS4gUmV0dXJucyAhMCBpZiBnb3Qgc2lnbmFsICovCitzdGF0aWMgaW50CitvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG92LT53cSwgb3YtPmN1cmZyYW1lIDwgMCk7Cit9CisKKy8qIFJlc2V0cyB0aGUgaGFyZHdhcmUgc25hcHNob3QgYnV0dG9uICovCitzdGF0aWMgdm9pZAorb3Y1MXhfY2xlYXJfc25hcHNob3Qoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKSB7CisJCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAwKTsKKwkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDIpOworCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMCk7CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQl3YXJuKCJzbmFwc2hvdCByZXNldCBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCX0gZWxzZSB7CisJCWVycigiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCX0KK30KKworI2lmIDAKKy8qIENoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBzbmFwc2hvdCBidXR0b24uIFJldHVybnMgMSBpZiBpdCB3YXMgcHJlc3NlZCBzaW5jZQorICogaXQgd2FzIGxhc3QgY2xlYXJlZCwgYW5kIHplcm8gaW4gYWxsIG90aGVyIGNhc2VzIChpbmNsdWRpbmcgZXJyb3JzKSAqLworc3RhdGljIGludAorb3Y1MXhfY2hlY2tfc25hcHNob3Qoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJldCwgc3RhdHVzID0gMDsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkgeworCQlyZXQgPSByZWdfcihvdiwgUjUxeF9TWVNfU05BUCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQllcnIoIkVycm9yIGNoZWNraW5nIHNuc3BzaG90IHN0YXR1cyAoJWQpIiwgcmV0KTsKKwkJfSBlbHNlIGlmIChyZXQgJiAweDA4KSB7CisJCQlzdGF0dXMgPSAxOworCQl9CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQl3YXJuKCJzbmFwc2hvdCBjaGVjayBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCX0gZWxzZSB7CisJCWVycigiY2hlY2sgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYKKworLyogVGhpcyBkb2VzIGFuIGluaXRpYWwgcmVzZXQgb2YgYW4gT21uaVZpc2lvbiBzZW5zb3IgYW5kIGVuc3VyZXMgdGhhdCBJMkMKKyAqIGlzIHN5bmNocm9uaXplZC4gUmV0dXJucyA8MCBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAoraW5pdF9vdl9zZW5zb3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IGksIHN1Y2Nlc3M7CisKKwkvKiBSZXNldCB0aGUgc2Vuc29yICovCisJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLworCW1zbGVlcCgxNTApOworCisJZm9yIChpID0gMCwgc3VjY2VzcyA9IDA7IGkgPCBpMmNfZGV0ZWN0X3RyaWVzICYmICFzdWNjZXNzOyBpKyspIHsKKwkJaWYgKChpMmNfcihvdiwgT1Y3NjEwX1JFR19JRF9ISUdIKSA9PSAweDdGKSAmJgorCQkgICAgKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0xPVykgPT0gMHhBMikpIHsKKwkJCXN1Y2Nlc3MgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZXNldCB0aGUgc2Vuc29yICovCisJCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KKwkJbXNsZWVwKDE1MCk7CisJCS8qIER1bW15IHJlYWQgdG8gc3luYyBJMkMgKi8KKwkJaWYgKGkyY19yKG92LCAweDAwKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoIXN1Y2Nlc3MpCisJCXJldHVybiAtRUlPOworCisJUERFQlVHKDEsICJJMkMgc3luY2VkIGluICVkIGF0dGVtcHQocykiLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvdjUxMV9zZXRfcGFja2V0X3NpemUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBzaXplKQoreworCWludCBhbHQsIG11bHQ7CisKKwlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCW11bHQgPSBzaXplID4+IDU7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTEpIHsKKwkJaWYgKHNpemUgPT0gMCkKKwkJCWFsdCA9IE9WNTExX0FMVF9TSVpFXzA7CisJCWVsc2UgaWYgKHNpemUgPT0gMjU3KQorCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfMjU3OworCQllbHNlIGlmIChzaXplID09IDUxMykKKwkJCWFsdCA9IE9WNTExX0FMVF9TSVpFXzUxMzsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA3NjkpCisJCQlhbHQgPSBPVjUxMV9BTFRfU0laRV83Njk7CisJCWVsc2UgaWYgKHNpemUgPT0gOTkzKQorCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfOTkzOworCQllbHNlIHsKKwkJCWVycigiU2V0IHBhY2tldCBzaXplOiBpbnZhbGlkIHNpemUgKCVkKSIsIHNpemUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgeworCQlpZiAoc2l6ZSA9PSAwKQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzA7CisJCWVsc2UgaWYgKHNpemUgPT0gMzMpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMzM7CisJCWVsc2UgaWYgKHNpemUgPT0gMTI5KQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzEyOTsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAyNTcpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMjU3OworCQllbHNlIGlmIChzaXplID09IDM4NSkKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV8zODU7CisJCWVsc2UgaWYgKHNpemUgPT0gNTEzKQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzUxMzsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA3NjkpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfNzY5OworCQllbHNlIGlmIChzaXplID09IDk2MSkKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV85NjE7CisJCWVsc2UgeworCQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IGludmFsaWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBJbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVBERUJVRygzLCAiJWQsIG11bHQ9JWQsIGFsdD0lZCIsIHNpemUsIG11bHQsIGFsdCk7CisKKwlpZiAocmVnX3cob3YsIFI1MXhfRklGT19QU0laRSwgbXVsdCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShvdi0+ZGV2LCBvdi0+aWZhY2UsIGFsdCkgPCAwKSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBzZXQgaW50ZXJmYWNlIGVycm9yIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlvdi0+cGFja2V0X3NpemUgPSBzaXplOworCisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogTm90ZTogVW5saWtlIHRoZSBPVjUxMS9PVjUxMSssIHRoZSBzaXplIGFyZ3VtZW50IGRvZXMgTk9UIGluY2x1ZGUgdGhlCisgKiBvcHRpb25hbCBwYWNrZXQgbnVtYmVyIGJ5dGUuIFRoZSBhY3R1YWwgc2l6ZSAqaXMqIHN0b3JlZCBpbiBvdi0+cGFja2V0X3NpemUsCisgKiB0aG91Z2guICovCitzdGF0aWMgaW50CitvdjUxOF9zZXRfcGFja2V0X3NpemUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBzaXplKQoreworCWludCBhbHQ7CisKKwlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAoc2l6ZSA9PSAwKQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfMDsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAxMjgpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV8xMjg7CisJCWVsc2UgaWYgKHNpemUgPT0gMjU2KQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfMjU2OworCQllbHNlIGlmIChzaXplID09IDM4NCkKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzM4NDsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA1MTIpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV81MTI7CisJCWVsc2UgaWYgKHNpemUgPT0gNjQwKQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfNjQwOworCQllbHNlIGlmIChzaXplID09IDc2OCkKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzc2ODsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA4OTYpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV84OTY7CisJCWVsc2UgeworCQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IGludmFsaWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBJbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVBERUJVRygzLCAiJWQsIGFsdD0lZCIsIHNpemUsIGFsdCk7CisKKwlvdi0+cGFja2V0X3NpemUgPSBzaXplOworCWlmIChzaXplID4gMCkgeworCQkvKiBQcm9ncmFtIElTTyBGSUZPIHNpemUgcmVnIChwYWNrZXQgbnVtYmVyIGlzbid0IGluY2x1ZGVkKSAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweDMwLCBzaXplLCAyKTsKKworCQlpZiAob3YtPnBhY2tldF9udW1iZXJpbmcpCisJCQkrK292LT5wYWNrZXRfc2l6ZTsKKwl9CisKKwlpZiAodXNiX3NldF9pbnRlcmZhY2Uob3YtPmRldiwgb3YtPmlmYWNlLCBhbHQpIDwgMCkgeworCQllcnIoIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHN0cmVhbSAqLworCWlmIChyZWdfdyhvdiwgMHgyZiwgMHg4MCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogVXBsb2FkIGNvbXByZXNzaW9uIHBhcmFtcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcy4gUmV0dXJucyAwIGZvciBzdWNjZXNzLiAqLworc3RhdGljIGludAorb3Y1MTFfaW5pdF9jb21wcmVzc2lvbihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFvdi0+Y29tcHJlc3NfaW5pdGVkKSB7CisJCXJlZ193KG92LCAweDcwLCBwaHkpOworCQlyZWdfdyhvdiwgMHg3MSwgcGh1dik7CisJCXJlZ193KG92LCAweDcyLCBwdnkpOworCQlyZWdfdyhvdiwgMHg3MywgcHZ1dik7CisJCXJlZ193KG92LCAweDc0LCBxaHkpOworCQlyZWdfdyhvdiwgMHg3NSwgcWh1dik7CisJCXJlZ193KG92LCAweDc2LCBxdnkpOworCQlyZWdfdyhvdiwgMHg3NywgcXZ1dik7CisKKwkJaWYgKG92NTExX3VwbG9hZF9xdWFuX3RhYmxlcyhvdikgPCAwKSB7CisJCQllcnIoIkVycm9yIHVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW92LT5jb21wcmVzc19pbml0ZWQgPSAxOworb3V0OgorCXJldHVybiByYzsKK30KKworLyogVXBsb2FkIGNvbXByZXNzaW9uIHBhcmFtcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcy4gUmV0dXJucyAwIGZvciBzdWNjZXNzLiAqLworc3RhdGljIGludAorb3Y1MThfaW5pdF9jb21wcmVzc2lvbihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFvdi0+Y29tcHJlc3NfaW5pdGVkKSB7CisJCWlmIChvdjUxOF91cGxvYWRfcXVhbl90YWJsZXMob3YpIDwgMCkgeworCQkJZXJyKCJFcnJvciB1cGxvYWRpbmcgcXVhbnRpemF0aW9uIHRhYmxlcyIpOworCQkJcmMgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlvdi0+Y29tcHJlc3NfaW5pdGVkID0gMTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldHMgc2Vuc29yJ3MgY29udHJhc3Qgc2V0dGluZyB0byAidmFsIiAqLworc3RhdGljIGludAorc2Vuc29yX3NldF9jb250cmFzdChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCWludCByYzsKKworCVBERUJVRygzLCAiJWQiLCB2YWwpOworCisJaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCisJCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJeworCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX0NOVCwgdmFsID4+IDgpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFNFTl9PVjY2MzA6CisJeworCQlyYyA9IGkyY193X21hc2sob3YsIE9WNzYxMF9SRUdfQ05ULCB2YWwgPj4gMTIsIDB4MGYpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFNFTl9PVjc2MjA6CisJeworCQl1bnNpZ25lZCBjaGFyIGN0YWJbXSA9IHsKKwkJCTB4MDEsIDB4MDUsIDB4MDksIDB4MTEsIDB4MTUsIDB4MzUsIDB4MzcsIDB4NTcsCisJCQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCisJCX07CisKKwkJLyogVXNlIFkgZ2FtbWEgY29udHJvbCBpbnN0ZWFkLiBCaXQgMCBlbmFibGVzIGl0LiAqLworCQlyYyA9IGkyY193KG92LCAweDY0LCBjdGFiW3ZhbD4+MTJdKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJY2FzZSBTRU5fU0FBNzExMUE6CisJeworCQlyYyA9IGkyY193KG92LCAweDBiLCB2YWwgPj4gOSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJeworCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKwl9CisKKwlyYyA9IDA7CQkvKiBTdWNjZXNzICovCisJb3YtPmNvbnRyYXN0ID0gdmFsOworb3V0OgorCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorCisvKiBHZXRzIHNlbnNvcidzIGNvbnRyYXN0IHNldHRpbmcgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9nZXRfY29udHJhc3Qoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0ICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwkJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19DTlQpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmMgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0NOVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCAxMjsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQkvKiBVc2UgWSBnYW1tYSByZWcgaW5zdGVhZC4gQml0IDAgaXMgdGhlIGVuYWJsZSBiaXQuICovCisJCXJjID0gaTJjX3Iob3YsIDB4NjQpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gKHJjICYgMHhmZSkgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCSp2YWwgPSBvdi0+Y29udHJhc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKKwlvdi0+Y29udHJhc3QgPSAqdmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldHMgc2Vuc29yJ3MgYnJpZ2h0bmVzcyBzZXR0aW5nIHRvICJ2YWwiICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2JyaWdodG5lc3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfQlJULCB2YWwgPj4gOCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQkvKiA3NjIwIGRvZXNuJ3QgbGlrZSBtYW51YWwgY2hhbmdlcyB3aGVuIGluIGF1dG8gbW9kZSAqLworCQlpZiAoIW92LT5hdXRvX2JydCkgeworCQkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19CUlQsIHZhbCA+PiA4KTsKKwkJCWlmIChyYyA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCXJjID0gaTJjX3cob3YsIDB4MGEsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsJCS8qIFN1Y2Nlc3MgKi8KKwlvdi0+YnJpZ2h0bmVzcyA9IHZhbDsKK291dDoKKwlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKworLyogR2V0cyBzZW5zb3IncyBicmlnaHRuZXNzIHNldHRpbmcgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKK3sKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0JSVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJKnZhbCA9IG92LT5icmlnaHRuZXNzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmJyaWdodG5lc3MgPSAqdmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNldHMgc2Vuc29yJ3Mgc2F0dXJhdGlvbiAoY29sb3IgaW50ZW5zaXR5KSBzZXR0aW5nIHRvICJ2YWwiICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X3NhdHVyYXRpb24oc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoMywgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfU0FULCB2YWwgPj4gOCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorLy8JCS8qIFVzZSBVViBnYW1tYSBjb250cm9sIGluc3RlYWQuIEJpdHMgMCAmIDcgYXJlIHJlc2VydmVkLiAqLworLy8JCXJjID0gb3ZfaTJjX3dyaXRlKG92LT5kZXYsIDB4NjIsICh2YWwgPj4gOSkgJiAweDdlKTsKKy8vCQlpZiAocmMgPCAwKQorLy8JCQlnb3RvIG91dDsKKwkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19TQVQsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJcmMgPSBpMmNfdyhvdiwgMHgwYywgdmFsID4+IDkpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyYyA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOwkJLyogU3VjY2VzcyAqLworCW92LT5jb2xvdXIgPSB2YWw7CitvdXQ6CisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEdldHMgc2Vuc29yJ3Mgc2F0dXJhdGlvbiAoY29sb3IgaW50ZW5zaXR5KSBzZXR0aW5nICovCitzdGF0aWMgaW50CitzZW5zb3JfZ2V0X3NhdHVyYXRpb24oc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0ICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX1NBVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisvLwkJLyogVXNlIFVWIGdhbW1hIHJlZyBpbnN0ZWFkLiBCaXRzIDAgJiA3IGFyZSByZXNlcnZlZC4gKi8KKy8vCQlyYyA9IGkyY19yKG92LCAweDYyKTsKKy8vCQlpZiAocmMgPCAwKQorLy8JCQlyZXR1cm4gcmM7CisvLwkJZWxzZQorLy8JCQkqdmFsID0gKHJjICYgMHg3ZSkgPDwgOTsKKwkJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19TQVQpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmMgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCSp2YWwgPSBvdi0+Y29sb3VyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmNvbG91ciA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogU2V0cyBzZW5zb3IncyBodWUgKHJlZC9ibHVlIGJhbGFuY2UpIHNldHRpbmcgdG8gInZhbCIgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfaHVlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJaW50IHJjOworCisJUERFQlVHKDMsICIlZCIsIHZhbCk7CisKKwlpZiAob3YtPnN0b3BfZHVyaW5nX3NldCkKKwkJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfUkVELCAweEZGIC0gKHZhbCA+PiA4KSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKworCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX0JMVUUsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisvLyBIdWUgY29udHJvbCBpcyBjYXVzaW5nIHByb2JsZW1zLiBJIHdpbGwgZW5hYmxlIGl0IG9uY2UgaXQncyBmaXhlZC4KKyNpZiAwCisJCXJjID0gaTJjX3cob3YsIDB4N2EsICh1bnNpZ25lZCBjaGFyKSh2YWwgPj4gOCkgKyAweGIpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcmMgPSBpMmNfdyhvdiwgMHg3OSwgKHVuc2lnbmVkIGNoYXIpKHZhbCA+PiA4KSArIDB4Yik7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJcmMgPSBpMmNfdyhvdiwgMHgwZCwgKHZhbCArIDMyNzY4KSA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gMDsJCS8qIFN1Y2Nlc3MgKi8KKwlvdi0+aHVlID0gdmFsOworb3V0OgorCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorCisvKiBHZXRzIHNlbnNvcidzIGh1ZSAocmVkL2JsdWUgYmFsYW5jZSkgc2V0dGluZyAqLworc3RhdGljIGludAorc2Vuc29yX2dldF9odWUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0ICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQkxVRSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCXJjID0gaTJjX3Iob3YsIDB4N2EpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmMgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCSp2YWwgPSBvdi0+aHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmh1ZSA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludAorc2Vuc29yX3NldF9waWN0dXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgInNlbnNvcl9zZXRfcGljdHVyZSIpOworCisJb3YtPndoaXRlbmVzcyA9IHAtPndoaXRlbmVzczsKKworCS8qIERvbid0IHJldHVybiBlcnJvciBpZiBhIHNldHRpbmcgaXMgdW5zdXBwb3J0ZWQsIG9yIHJlc3Qgb2Ygc2V0dGluZ3MKKyAgICAgICAgICogd2lsbCBub3QgYmUgcGVyZm9ybWVkICovCisKKwlyYyA9IHNlbnNvcl9zZXRfY29udHJhc3Qob3YsIHAtPmNvbnRyYXN0KTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9zZXRfYnJpZ2h0bmVzcyhvdiwgcC0+YnJpZ2h0bmVzcyk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X3NhdHVyYXRpb24ob3YsIHAtPmNvbG91cik7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X2h1ZShvdiwgcC0+aHVlKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2Vuc29yX2dldF9waWN0dXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgInNlbnNvcl9nZXRfcGljdHVyZSIpOworCisJLyogRG9uJ3QgcmV0dXJuIGVycm9yIGlmIGEgc2V0dGluZyBpcyB1bnN1cHBvcnRlZCwgb3IgcmVzdCBvZiBzZXR0aW5ncworICAgICAgICAgKiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KKworCXJjID0gc2Vuc29yX2dldF9jb250cmFzdChvdiwgJihwLT5jb250cmFzdCkpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX2dldF9icmlnaHRuZXNzKG92LCAmKHAtPmJyaWdodG5lc3MpKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9nZXRfc2F0dXJhdGlvbihvdiwgJihwLT5jb2xvdXIpKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9nZXRfaHVlKG92LCAmKHAtPmh1ZSkpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXAtPndoaXRlbmVzcyA9IDEwNSA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCisvLyBGSVhNRTogRXhwb3N1cmUgcmFuZ2UgaXMgb25seSAweDAwLTB4N2YgaW4gaW50ZXJsYWNlIG1vZGUKKy8qIFNldHMgY3VycmVudCBleHBvc3VyZSBmb3Igc2Vuc29yLiBUaGlzIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiBhdXRvLWV4cG9zdXJlCisgKiBpcyBvZmYgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitzZW5zb3Jfc2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoMywgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwkJcmMgPSBpMmNfdyhvdiwgMHgxMCwgdmFsKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfZXhwb3N1cmUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSAwOwkJLyogU3VjY2VzcyAqLworCW92LT5leHBvc3VyZSA9IHZhbDsKK291dDoKKwlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKyNlbmRpZgorCisvKiBHZXRzIGN1cnJlbnQgZXhwb3N1cmUgbGV2ZWwgZnJvbSBzZW5zb3IsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyB1bmRlcgorICogbWFudWFsIGNvbnRyb2wuICovCitzdGF0aWMgaW50CitzZW5zb3JfZ2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyICp2YWwpCit7CisJaW50IHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjg2MDA6CisJCXJjID0gaTJjX3Iob3YsIDB4MTApOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCQllbHNlCisJCQkqdmFsID0gcmM7CisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQl2YWwgPSBOVUxMOworCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBnZXRfZXhwb3N1cmUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUERFQlVHKDMsICIlZCIsICp2YWwpOworCW92LT5leHBvc3VyZSA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogVHVybnMgb24gb3Igb2ZmIHRoZSBMRUQuIE9ubHkgaGFzIGFuIGVmZmVjdCB3aXRoIE9WNTExKy9PVjUxOCgrKSAqLworc3RhdGljIHZvaWQKK292NTF4X2xlZF9jb250cm9sKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQoreworCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKKworCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpCisJCXJlZ193KG92LCBSNTExX1NZU19MRURfQ1RMLCBlbmFibGUgPyAxIDogMCk7CisJZWxzZSBpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJlZ193X21hc2sob3YsIFI1MThfR1BJT19PVVQsIGVuYWJsZSA/IDB4MDIgOiAweDAwLCAweDAyKTsKKworCXJldHVybjsKK30KKworLyogTWF0Y2hlcyB0aGUgc2Vuc29yJ3MgaW50ZXJuYWwgZnJhbWUgcmF0ZSB0byB0aGUgbGlnaHRpbmcgZnJlcXVlbmN5LgorICogVmFsaWQgZnJlcXVlbmNpZXMgYXJlOgorICoJNTAgLSA1MEh6LCBmb3IgRXVyb3BlYW4gYW5kIEFzaWFuIGxpZ2h0aW5nCisgKgk2MCAtIDYwSHosIGZvciBBbWVyaWNhbiBsaWdodGluZworICoKKyAqIFRlc3RlZCB3aXRoOiBPVjc2MTAsIE9WNzYyMCwgT1Y3NkJFLCBPVjY2MjAKKyAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfbGlnaHRfZnJlcShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGZyZXEpCit7CisJaW50IHNpeHR5OworCisJUERFQlVHKDQsICIlZCBIeiIsIGZyZXEpOworCisJaWYgKGZyZXEgPT0gNjApCisJCXNpeHR5ID0gMTsKKwllbHNlIGlmIChmcmVxID09IDUwKQorCQlzaXh0eSA9IDA7CisJZWxzZSB7CisJCWVycigiSW52YWxpZCBsaWdodCBmcmVxICglZCBIeikiLCBmcmVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCQlpMmNfd19tYXNrKG92LCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOworCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHgwMDoweGFjKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgxMywgMHgxMCwgMHgxMCk7CisJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MTApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwkJaTJjX3dfbWFzayhvdiwgMHgyYSwgc2l4dHk/MHgwMDoweDgwLCAweDgwKTsKKwkJaTJjX3cob3YsIDB4MmIsIHNpeHR5PzB4MDA6MHhhYyk7CisJCWkyY193X21hc2sob3YsIDB4NzYsIDB4MDEsIDB4MDEpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHhhODoweDI4KTsKKwkJaTJjX3cob3YsIDB4MmEsIHNpeHR5PzB4ODQ6MHhhNCk7CisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlQREVCVUcoNSwgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfbGlnaHRfZnJlcSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvdi0+bGlnaHRmcmVxID0gZnJlcTsKKworCXJldHVybiAwOworfQorCisvKiBJZiBlbmFibGUgaXMgdHJ1ZSwgdHVybiBvbiB0aGUgc2Vuc29yJ3MgYmFuZGluZyBmaWx0ZXIsIG90aGVyd2lzZSB0dXJuIGl0CisgKiBvZmYuIFRoaXMgZmlsdGVyIHRyaWVzIHRvIHJlZHVjZSB0aGUgcGF0dGVybiBvZiBob3Jpem9udGFsIGxpZ2h0L2RhcmsgYmFuZHMKKyAqIGNhdXNlZCBieSBzb21lICh1c3VhbGx5IGZsdW9yZXNjZW50KSBsaWdodGluZy4gVGhlIGxpZ2h0IGZyZXF1ZW5jeSBtdXN0IGJlCisgKiBzZXQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBlbmFibGluZyBpdCB3aXRoIG92NTF4X3NldF9saWdodF9mcmVxKCkuCisgKgorICogVGVzdGVkIHdpdGg6IE9WNzYxMCwgT1Y3NjIwLCBPVjc2QkUsIE9WNjYyMC4KKyAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfYmFuZGluZ19maWx0ZXIoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCit7CisJaW50IHJjOworCisJUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOworCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyNyB8fCBvdi0+c2Vuc29yID09IFNFTl9LUzAxMjdCCisJCXx8IG92LT5zZW5zb3IgPT0gU0VOX1NBQTcxMTFBKSB7CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXJjID0gaTJjX3dfbWFzayhvdiwgMHgyZCwgZW5hYmxlPzB4MDQ6MHgwMCwgMHgwNCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJb3YtPmJhbmRmaWx0ID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIElmIGVuYWJsZSBpcyB0cnVlLCB0dXJuIG9uIHRoZSBzZW5zb3IncyBhdXRvIGJyaWdodG5lc3MgY29udHJvbCwgb3RoZXJ3aXNlCisgKiB0dXJuIGl0IG9mZi4KKyAqCisgKiBVbnN1cHBvcnRlZDogS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2F1dG9fYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fS1MwMTI3IHx8IG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyN0IKKwkJfHwgb3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEpIHsKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmMgPSBpMmNfd19tYXNrKG92LCAweDJkLCBlbmFibGU/MHgxMDoweDAwLCAweDEwKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlvdi0+YXV0b19icnQgPSBlbmFibGU7CisKKwlyZXR1cm4gMDsKK30KKworLyogSWYgZW5hYmxlIGlzIHRydWUsIHR1cm4gb24gdGhlIHNlbnNvcidzIGF1dG8gZXhwb3N1cmUgY29udHJvbCwgb3RoZXJ3aXNlCisgKiB0dXJuIGl0IG9mZi4KKyAqCisgKiBVbnN1cHBvcnRlZDogS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2F1dG9fZXhwb3N1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCit7CisJUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwMDoweDgwLCAweDgwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDEzLCBlbmFibGU/MHgwMToweDAwLCAweDAxKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfd19tYXNrKG92LCAweDI4LCBlbmFibGU/MHgwMDoweDEwLCAweDEwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9hdXRvX2V4cG9zdXJlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW92LT5hdXRvX2V4cCA9IGVuYWJsZTsKKworCXJldHVybiAwOworfQorCisvKiBNb2RpZmllcyB0aGUgc2Vuc29yJ3MgZXhwb3N1cmUgYWxnb3JpdGhtIHRvIGFsbG93IHByb3BlciBleHBvc3VyZSBvZiBvYmplY3RzCisgKiB0aGF0IGFyZSBpbGx1bWluYXRlZCBmcm9tIGJlaGluZC4KKyAqCisgKiBUZXN0ZWQgd2l0aDogT1Y2NjIwLCBPVjc2MjAKKyAqIFVuc3VwcG9ydGVkOiBPVjc2MTAsIE9WNzZCRSwgS1MwMTI3LCBLUzAxMjdCLCBTQUE3MTExQQorICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2JhY2tsaWdodChzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKK3sKKwlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDY4LCBlbmFibGU/MHhlMDoweGMwLCAweGUwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyOSwgZW5hYmxlPzB4MDg6MHgwMCwgMHgwOCk7CisJCWkyY193X21hc2sob3YsIDB4MjgsIGVuYWJsZT8weDAyOjB4MDAsIDB4MDIpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJCWkyY193X21hc2sob3YsIDB4NGUsIGVuYWJsZT8weGUwOjB4YzAsIDB4ZTApOworCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwODoweDAwLCAweDA4KTsKKwkJaTJjX3dfbWFzayhvdiwgMHgwZSwgZW5hYmxlPzB4ODA6MHgwMCwgMHg4MCk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYzMDoKKwkJaTJjX3dfbWFzayhvdiwgMHg0ZSwgZW5hYmxlPzB4ODA6MHg2MCwgMHhlMCk7CisJCWkyY193X21hc2sob3YsIDB4MjksIGVuYWJsZT8weDA4OjB4MDAsIDB4MDgpOworCQlpMmNfd19tYXNrKG92LCAweDI4LCBlbmFibGU/MHgwMjoweDAwLCAweDAyKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9LUzAxMjc6CisJY2FzZSBTRU5fS1MwMTI3QjoKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJZGVmYXVsdDoKKwkJZXJyKCJTZW5zb3Igbm90IHN1cHBvcnRlZCBmb3Igc2V0X2JhY2tsaWdodCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvdi0+YmFja2xpZ2h0ID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfbWlycm9yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQoreworCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDEyLCBlbmFibGU/MHg0MDoweDAwLCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9taXJyb3IiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3YtPm1pcnJvciA9IGVuYWJsZTsKKworCXJldHVybiAwOworfQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCAocmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBsb2NhdGVkOworICogcGxhbmFyIG9yIG5vdCksIG9yIHplcm8gZm9yIHVuc3VwcG9ydGVkIGZvcm1hdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2dldF9kZXB0aChpbnQgcGFsZXR0ZSkKK3sKKwlzd2l0Y2ggKHBhbGV0dGUpIHsKKwljYXNlIFZJREVPX1BBTEVUVEVfR1JFWTogICAgcmV0dXJuIDg7CisJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDogIHJldHVybiAxMjsKKwljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDogcmV0dXJuIDEyOyAvKiBQbGFuYXIgKi8KKwlkZWZhdWx0OgkJICAgIHJldHVybiAwOyAgLyogSW52YWxpZCBmb3JtYXQgKi8KKwl9Cit9CisKKy8qIEJ5dGVzIHBlciBmcmFtZS4gVXNlZCBieSByZWFkKCkuIFJldHVybiBvZiAwIGluZGljYXRlcyBlcnJvciAqLworc3RhdGljIGlubGluZSBsb25nIGludAorZ2V0X2ZyYW1lX2xlbmd0aChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lKQoreworCWlmICghZnJhbWUpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuICgoZnJhbWUtPndpZHRoICogZnJhbWUtPmhlaWdodAorCQkJICogZ2V0X2RlcHRoKGZyYW1lLT5mb3JtYXQpKSA+PiAzKTsKK30KKworc3RhdGljIGludAorbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisJCQkgaW50IG1vZGUsIGludCBzdWJfZmxhZywgaW50IHF2Z2EpCit7CisJaW50IGNsb2NrOworCisJLyoqKioqKioqIE1vZGUgKFZHQS9RVkdBKSBhbmQgc2Vuc29yIHNwZWNpZmljIHJlZ3MgKioqKioqKiovCisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJCWkyY193KG92LCAweDE0LCBxdmdhPzB4MjQ6MHgwNCk7CisvLyBGSVhNRTogRG9lcyB0aGlzIGltcHJvdmUgdGhlIGltYWdlIHF1YWxpdHkgb3IgZnJhbWUgcmF0ZT8KKyNpZiAwCisJCWkyY193X21hc2sob3YsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKKwkJaTJjX3cob3YsIDB4MjQsIDB4MTApOworCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDQwOjB4OGEpOworCQlpMmNfdyhvdiwgMHgyZiwgcXZnYT8weDMwOjB4YjApOworCQlpMmNfdyhvdiwgMHgzNSwgcXZnYT8weDFjOjB4OWMpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYyMDoKKy8vCQlpMmNfdyhvdiwgMHgyYiwgMHgwMCk7CisJCWkyY193KG92LCAweDE0LCBxdmdhPzB4YTQ6MHg4NCk7CisJCWkyY193X21hc2sob3YsIDB4MjgsIHF2Z2E/MHgwMDoweDIwLCAweDIwKTsKKwkJaTJjX3cob3YsIDB4MjQsIHF2Z2E/MHgyMDoweDNhKTsKKwkJaTJjX3cob3YsIDB4MjUsIHF2Z2E/MHgzMDoweDYwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyZCwgcXZnYT8weDQwOjB4MDAsIDB4NDApOworCQlpMmNfd19tYXNrKG92LCAweDY3LCBxdmdhPzB4ZjA6MHg5MCwgMHhmMCk7CisJCWkyY193X21hc2sob3YsIDB4NzQsIHF2Z2E/MHgyMDoweDAwLCAweDIwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NkJFOgorLy8JCWkyY193KG92LCAweDJiLCAweDAwKTsKKwkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHhhNDoweDg0KTsKKy8vIEZJWE1FOiBFbmFibGUgdGhpcyBvbmNlIDc2MjBBRSB1c2VzIDc2MjAgaW5pdGlhbCBzZXR0aW5ncworI2lmIDAKKwkJaTJjX3dfbWFzayhvdiwgMHgyOCwgcXZnYT8weDAwOjB4MjAsIDB4MjApOworCQlpMmNfdyhvdiwgMHgyNCwgcXZnYT8weDIwOjB4M2EpOworCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDMwOjB4NjApOworCQlpMmNfd19tYXNrKG92LCAweDJkLCBxdmdhPzB4NDA6MHgwMCwgMHg0MCk7CisJCWkyY193X21hc2sob3YsIDB4NjcsIHF2Z2E/MHhiMDoweDkwLCAweGYwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHg3NCwgcXZnYT8weDIwOjB4MDAsIDB4MjApOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYyMDoKKwkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHgyNDoweDA0KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfdyhvdiwgMHgxNCwgcXZnYT8weGEwOjB4ODApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIkludmFsaWQgc2Vuc29yIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qKioqKioqKiBQYWxldHRlLXNwZWNpZmljIHJlZ3MgKioqKioqKiovCisKKwlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKKwkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKKwkJCS8qIHRoZXNlIGFyZW4ndCB2YWxpZCBvbiB0aGUgT1Y2NjIwL09WNzYyMC82NjMwPyAqLworCQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgMHg0MCwgMHg0MCk7CisJCX0KKworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwICYmIG92LT5icmlkZ2UgPT0gQlJHX09WNTE4CisJCSAgICAmJiBvdjUxOF9jb2xvcikgeworCQkJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgwMCwgMHgxMCk7CisJCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDAwLCAweDIwKTsKKwkJfSBlbHNlIHsKKwkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MjAsIDB4MjApOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKKwkJCS8qIG5vdCB2YWxpZCBvbiB0aGUgT1Y2NjIwL09WNzYyMC82NjMwPyAqLworCQkJaTJjX3dfbWFzayhvdiwgMHgwZSwgMHgwMCwgMHg0MCk7CisJCX0KKworCQkvKiBUaGUgT1Y1MTggbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuIEFsdGhvdWdoIGJvdGggdGhlIE9WNTE4CisJCSAqIGFuZCB0aGUgT1Y2NjMwIHN1cHBvcnQgYSAxNi1iaXQgdmlkZW8gYnVzLCBvbmx5IHRoZSA4IGJpdCBZCisJCSAqIGJ1cyBpcyBhY3R1YWxseSB1c2VkLiBUaGUgVVYgYnVzIGlzIHRpZWQgdG8gZ3JvdW5kLgorCQkgKiBUaGVyZWZvcmUsIHRoZSBPVjY2MzAgbmVlZHMgdG8gYmUgaW4gOC1iaXQgbXVsdGlwbGV4ZWQKKwkJICogb3V0cHV0IG1vZGUgKi8KKworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwICYmIG92LT5icmlkZ2UgPT0gQlJHX09WNTE4CisJCSAgICAmJiBvdjUxOF9jb2xvcikgeworCQkJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgxMCwgMHgxMCk7CisJCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDIwLCAweDIwKTsKKwkJfSBlbHNlIHsKKwkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MjApOworCQl9CisJfQorCisJLyoqKioqKioqIENsb2NrIHByb2dyYW1taW5nICoqKioqKioqLworCisJLyogVGhlIE9WNjYyMCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiBUaGlzIHByZXZlbnRzIHRoZSAKKwkgKiBzZXZlcmUgYmFuZGluZyB0aGF0IG5vcm1hbGx5IG9jY3VycyAqLworCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MjAgfHwgb3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwKQorCXsKKwkJLyogQ2xvY2sgZG93biAqLworCisJCWkyY193KG92LCAweDJhLCAweDA0KTsKKworCQlpZiAob3YtPmNvbXByZXNzKSB7CisvLwkJCWNsb2NrID0gMDsgICAgLyogVGhpcyBlbnN1cmVzIHRoZSBoaWdoZXN0IGZyYW1lIHJhdGUgKi8KKwkJCWNsb2NrID0gMzsKKwkJfSBlbHNlIGlmIChjbG9ja2RpdiA9PSAtMSkgeyAgIC8qIElmIHVzZXIgZGlkbid0IG92ZXJyaWRlIGl0ICovCisJCQljbG9jayA9IDM7ICAgIC8qIEdpdmVzIGJldHRlciBleHBvc3VyZSB0aW1lICovCisJCX0gZWxzZSB7CisJCQljbG9jayA9IGNsb2NrZGl2OworCQl9CisKKwkJUERFQlVHKDQsICJTZXR0aW5nIGNsb2NrIGRpdmlzb3IgdG8gJWQiLCBjbG9jayk7CisKKwkJaTJjX3cob3YsIDB4MTEsIGNsb2NrKTsKKworCQlpMmNfdyhvdiwgMHgyYSwgMHg4NCk7CisJCS8qIFRoaXMgbmV4dCBzZXR0aW5nIGlzIGNyaXRpY2FsLiBJdCBzZWVtcyB0byBpbXByb3ZlCisJCSAqIHRoZSBnYWluIG9yIHRoZSBjb250cmFzdC4gVGhlICJyZXNlcnZlZCIgYml0cyBzZWVtCisJCSAqIHRvIGhhdmUgc29tZSBlZmZlY3QgaW4gdGhpcyBjYXNlLiAqLworCQlpMmNfdyhvdiwgMHgyZCwgMHg4NSk7CisJfQorCWVsc2UKKwl7CisJCWlmIChvdi0+Y29tcHJlc3MpIHsKKwkJCWNsb2NrID0gMTsgICAgLyogVGhpcyBlbnN1cmVzIHRoZSBoaWdoZXN0IGZyYW1lIHJhdGUgKi8KKwkJfSBlbHNlIGlmIChjbG9ja2RpdiA9PSAtMSkgeyAgIC8qIElmIHVzZXIgZGlkbid0IG92ZXJyaWRlIGl0ICovCisJCQkvKiBDYWxjdWxhdGUgYW5kIHNldCB0aGUgY2xvY2sgZGl2aXNvciAqLworCQkJY2xvY2sgPSAoKHN1Yl9mbGFnID8gb3YtPnN1YncgKiBvdi0+c3ViaAorCQkJCSAgOiB3aWR0aCAqIGhlaWdodCkKKwkJCQkgKiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkgPyAyIDogMykgLyAyKQorCQkJCSAvIDY2MDAwOworCQl9IGVsc2UgeworCQkJY2xvY2sgPSBjbG9ja2RpdjsKKwkJfQorCisJCVBERUJVRyg0LCAiU2V0dGluZyBjbG9jayBkaXZpc29yIHRvICVkIiwgY2xvY2spOworCisJCWkyY193KG92LCAweDExLCBjbG9jayk7CisJfQorCisJLyoqKioqKioqIFNwZWNpYWwgRmVhdHVyZXMgKioqKioqKiovCisKKwlpZiAoZnJhbWVkcm9wID49IDApCisJCWkyY193KG92LCAweDE2LCBmcmFtZWRyb3ApOworCisJLyogVGVzdCBQYXR0ZXJuICovCisJaTJjX3dfbWFzayhvdiwgMHgxMiwgKHRlc3RwYXQ/MHgwMjoweDAwKSwgMHgwMik7CisKKwkvKiBFbmFibGUgYXV0byB3aGl0ZSBiYWxhbmNlICovCisJaTJjX3dfbWFzayhvdiwgMHgxMiwgMHgwNCwgMHgwNCk7CisKKwkvLyBUaGlzIHdpbGwgZ28gYXdheSBhcyBzb29uIGFzIG92NTF4X21vZGVfaW5pdF9zZW5zb3JfcmVncygpCisJLy8gaXMgZnVsbHkgdGVzdGVkLgorCS8qIDc2MjAvNjYyMC82NjMwPyBkb24ndCBoYXZlIHJlZ2lzdGVyIDB4MzUsIHNvIHBsYXkgaXQgc2FmZSAqLworCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjc2MTAgfHwgb3YtPnNlbnNvciA9PSBTRU5fT1Y3NkJFKSB7CisJCWlmICh3aWR0aCA9PSA2NDAgJiYgaGVpZ2h0ID09IDQ4MCkKKwkJCWkyY193KG92LCAweDM1LCAweDllKTsKKwkJZWxzZQorCQkJaTJjX3cob3YsIDB4MzUsIDB4MWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZXRfb3Zfc2Vuc29yX3dpbmRvdyhzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwKKwkJICAgICBpbnQgc3ViX2ZsYWcpCit7CisJaW50IHJldDsKKwlpbnQgaHdzYmFzZSwgaHdlYmFzZSwgdndzYmFzZSwgdndlYmFzZSwgaHdzaXplLCB2d3NpemU7IAorCWludCBob2Zmc2V0LCB2b2Zmc2V0LCBod3NjYWxlID0gMCwgdndzY2FsZSA9IDA7CisKKwkvKiBUaGUgZGlmZmVyZW50IHNlbnNvciBJQ3MgaGFuZGxlIHNldHRpbmcgdXAgb2Ygd2luZG93IGRpZmZlcmVudGx5LgorCSAqIElGIFlPVSBTRVQgSVQgV1JPTkcsIFlPVSBXSUxMIEdFVCBBTEwgWkVSTyBJU09DIERBVEEgRlJPTSBPVjUxeCEhISAqLworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJCWh3c2Jhc2UgPSAweDM4OworCQlod2ViYXNlID0gMHgzYTsKKwkJdndzYmFzZSA9IHZ3ZWJhc2UgPSAweDA1OworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlod3NiYXNlID0gMHgzODsKKwkJaHdlYmFzZSA9IDB4M2E7CisJCXZ3c2Jhc2UgPSAweDA1OworCQl2d2ViYXNlID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorCQlod3NiYXNlID0gMHgyZjsJCS8qIEZyb20gNzYyMC5TRVQgKHNwZWMgaXMgd3JvbmcpICovCisJCWh3ZWJhc2UgPSAweDJmOworCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiSW52YWxpZCBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNjYyMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjY2MzApIHsKKwkJLyogTm90ZTogT1Y1MTgoKykgZG9lcyBkb3duc2FtcGxlIG9uIGl0cyBvd24pICovCisJCWlmICgod2lkdGggPiAxNzYgJiYgaGVpZ2h0ID4gMTQ0KQorCQkgICAgfHwgb3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsgIC8qIENJRiAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NjYWxlID0gMTsKKwkJCXZ3c2NhbGUgPSAxOyAgLyogVGhlIGRhdGFzaGVldCBzYXlzIDA7IGl0J3Mgd3JvbmcgKi8KKwkJCWh3c2l6ZSA9IDM1MjsKKwkJCXZ3c2l6ZSA9IDI4ODsKKwkJfSBlbHNlIGlmICh3aWR0aCA+IDE3NiB8fCBoZWlnaHQgPiAxNDQpIHsKKwkJCWVycigiSWxsZWdhbCBkaW1lbnNpb25zIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsJCQkgICAgLyogUUNJRiAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NpemUgPSAxNzY7CisJCQl2d3NpemUgPSAxNDQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAod2lkdGggPiAzMjAgJiYgaGVpZ2h0ID4gMjQwKSB7ICAvKiBWR0EgKi8KKwkJCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwKKwkJCQltb2RlLCBzdWJfZmxhZywgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaHdzY2FsZSA9IDI7CisJCQl2d3NjYWxlID0gMTsKKwkJCWh3c2l6ZSA9IDY0MDsKKwkJCXZ3c2l6ZSA9IDQ4MDsKKwkJfSBlbHNlIGlmICh3aWR0aCA+IDMyMCB8fCBoZWlnaHQgPiAyNDApIHsKKwkJCWVycigiSWxsZWdhbCBkaW1lbnNpb25zIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsJCQkgICAgLyogUVZHQSAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAxKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NjYWxlID0gMTsKKwkJCWh3c2l6ZSA9IDMyMDsKKwkJCXZ3c2l6ZSA9IDI0MDsKKwkJfQorCX0KKworCS8qIENlbnRlciB0aGUgd2luZG93ICovCisJaG9mZnNldCA9ICgoaHdzaXplIC0gd2lkdGgpIC8gMikgPj4gaHdzY2FsZTsKKwl2b2Zmc2V0ID0gKCh2d3NpemUgLSBoZWlnaHQpIC8gMikgPj4gdndzY2FsZTsKKworCS8qIEZJWE1FISAtIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBzdXBwb3J0IDE2MHgxMjAgYW5kIDY2MjAhISEgKi8KKwlpZiAoc3ViX2ZsYWcpIHsKKwkJaTJjX3cob3YsIDB4MTcsIGh3c2Jhc2UrKG92LT5zdWJ4Pj5od3NjYWxlKSk7CisJCWkyY193KG92LCAweDE4LAlod2ViYXNlKygob3YtPnN1Yngrb3YtPnN1YncpPj5od3NjYWxlKSk7CisJCWkyY193KG92LCAweDE5LCB2d3NiYXNlKyhvdi0+c3VieT4+dndzY2FsZSkpOworCQlpMmNfdyhvdiwgMHgxYSwgdndlYmFzZSsoKG92LT5zdWJ5K292LT5zdWJoKT4+dndzY2FsZSkpOworCX0gZWxzZSB7CisJCWkyY193KG92LCAweDE3LCBod3NiYXNlICsgaG9mZnNldCk7CisJCWkyY193KG92LCAweDE4LCBod2ViYXNlICsgaG9mZnNldCArIChod3NpemU+Pmh3c2NhbGUpKTsKKwkJaTJjX3cob3YsIDB4MTksIHZ3c2Jhc2UgKyB2b2Zmc2V0KTsKKwkJaTJjX3cob3YsIDB4MWEsIHZ3ZWJhc2UgKyB2b2Zmc2V0ICsgKHZ3c2l6ZT4+dndzY2FsZSkpOworCX0KKworI2lmZGVmIE9WNTExX0RFQlVHCisJaWYgKGR1bXBfc2Vuc29yKQorCQlkdW1wX2kyY19yZWdzKG92KTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCB1cCB0aGUgT1Y1MTEvT1Y1MTErIHdpdGggdGhlIGdpdmVuIGltYWdlIHBhcmFtZXRlcnMuCisgKgorICogRG8gbm90IHB1dCBhbnkgc2Vuc29yLXNwZWNpZmljIGNvZGUgaW4gaGVyZSAoaW5jbHVkaW5nIEkyQyBJL08gZnVuY3Rpb25zKQorICovCitzdGF0aWMgaW50CitvdjUxMV9tb2RlX2luaXRfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtb2RlLCBpbnQgc3ViX2ZsYWcpCit7CisJaW50IGhzZWdzLCB2c2VnczsKKworCWlmIChzdWJfZmxhZykgeworCQl3aWR0aCA9IG92LT5zdWJ3OworCQloZWlnaHQgPSBvdi0+c3ViaDsKKwl9CisKKwlQREVCVUcoMywgIndpZHRoOiVkLCBoZWlnaHQ6JWQsIG1vZGU6JWQsIHN1YjolZCIsCisJICAgICAgIHdpZHRoLCBoZWlnaHQsIG1vZGUsIHN1Yl9mbGFnKTsKKworCS8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBhIDcxMTFhLXNwZWNpZmljIGZ1bmN0aW9uIG9uY2UKKwkvLyBzdWJjYXB0dXJlIGlzIGRlYWx0IHdpdGggcHJvcGVybHkKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEpIHsKKwkJaWYgKHdpZHRoID09IDMyMCAmJiBoZWlnaHQgPT0gMjQwKSB7CisJCQkvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgKi8KKwkJfSBlbHNlIGlmICh3aWR0aCA9PSA2NDAgJiYgaGVpZ2h0ID09IDQ4MCkgeworCQkJLyogU2V0IHRoZSBPVjUxMSB1cCBhcyAzMjB4NDgwLCBidXQga2VlcCB0aGUKKwkJCSAqIFY0TCByZXNvbHV0aW9uIGFzIDY0MHg0ODAgKi8KKwkJCXdpZHRoID0gMzIwOworCQl9IGVsc2UgeworCQkJZXJyKCJTQUE3MTExQSBvbmx5IGFsbG93cyAzMjB4MjQwIG9yIDY0MHg0ODAiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogTWFrZSBzdXJlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGEgbXVsdGlwbGUgb2YgOCAqLworCWlmICh3aWR0aCAlIDggfHwgaGVpZ2h0ICUgOCkgeworCQllcnIoIkludmFsaWQgc2l6ZSAoJWQsICVkKSAobW9kZSA9ICVkKSIsIHdpZHRoLCBoZWlnaHQsIG1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAod2lkdGggPCBvdi0+bWlud2lkdGggfHwgaGVpZ2h0IDwgb3YtPm1pbmhlaWdodCkgeworCQllcnIoIlJlcXVlc3RlZCBkaW1lbnNpb25zIGFyZSB0b28gc21hbGwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKKwkJcmVnX3cob3YsIFI1MTFfQ0FNX1VWX0VOLCAweDAwKTsKKwkJcmVnX3cob3YsIFI1MTFfU05BUF9VVl9FTiwgMHgwMCk7CisJCXJlZ193KG92LCBSNTExX1NOQVBfT1BUUywgMHgwMSk7CisJfSBlbHNlIHsKKwkJcmVnX3cob3YsIFI1MTFfQ0FNX1VWX0VOLCAweDAxKTsKKwkJcmVnX3cob3YsIFI1MTFfU05BUF9VVl9FTiwgMHgwMSk7CisJCXJlZ193KG92LCBSNTExX1NOQVBfT1BUUywgMHgwMyk7CisJfQorCisJLyogSGVyZSBJJ20gYXNzdW1pbmcgdGhhdCBzbmFwc2hvdCBzaXplID09IGltYWdlIHNpemUuCisJICogSSBob3BlIHRoYXQncyBhbHdheXMgdHJ1ZS4gLS1jbGF1ZGlvCisJICovCisJaHNlZ3MgPSAod2lkdGggPj4gMykgLSAxOworCXZzZWdzID0gKGhlaWdodCA+PiAzKSAtIDE7CisKKwlyZWdfdyhvdiwgUjUxMV9DQU1fUFhDTlQsIGhzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9DQU1fTE5DTlQsIHZzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9DQU1fUFhESVYsIDB4MDApOworCXJlZ193KG92LCBSNTExX0NBTV9MTkRJViwgMHgwMCk7CisKKwkvKiBZVVY0MjAsIGxvdyBwYXNzIGZpbHRlciBvbiAqLworCXJlZ193KG92LCBSNTExX0NBTV9PUFRTLCAweDAzKTsKKworCS8qIFNuYXBzaG90IGFkZGl0aW9ucyAqLworCXJlZ193KG92LCBSNTExX1NOQVBfUFhDTlQsIGhzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9TTkFQX0xOQ05ULCB2c2Vncyk7CisJcmVnX3cob3YsIFI1MTFfU05BUF9QWERJViwgMHgwMCk7CisJcmVnX3cob3YsIFI1MTFfU05BUF9MTkRJViwgMHgwMCk7CisKKwlpZiAob3YtPmNvbXByZXNzKSB7CisJCS8qIEVuYWJsZSBZIGFuZCBVViBxdWFudGl6YXRpb24gYW5kIGNvbXByZXNzaW9uICovCisJCXJlZ193KG92LCBSNTExX0NPTVBfRU4sIDB4MDcpOworCQlyZWdfdyhvdiwgUjUxMV9DT01QX0xVVF9FTiwgMHgwMyk7CisJCW92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9PTU5JQ0UpOworCX0KKworCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldHMgdXAgdGhlIE9WNTE4L09WNTE4KyB3aXRoIHRoZSBnaXZlbiBpbWFnZSBwYXJhbWV0ZXJzCisgKgorICogT1Y1MTggbmVlZHMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBhcHByb2FjaCwgdW50aWwgd2UgY2FuIGZpZ3VyZSBvdXQgd2hhdAorICogdGhlIGluZGl2aWR1YWwgcmVnaXN0ZXJzIGRvLiBBbHNvLCBvbmx5IDE1IEZQUyBpcyBzdXBwb3J0ZWQgbm93LgorICoKKyAqIERvIG5vdCBwdXQgYW55IHNlbnNvci1zcGVjaWZpYyBjb2RlIGluIGhlcmUgKGluY2x1ZGluZyBJMkMgSS9PIGZ1bmN0aW9ucykKKyAqLworc3RhdGljIGludAorb3Y1MThfbW9kZV9pbml0X3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsCisJCSAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnKQoreworCWludCBoc2VncywgdnNlZ3MsIGhpX3JlczsKKworCWlmIChzdWJfZmxhZykgeworCQl3aWR0aCA9IG92LT5zdWJ3OworCQloZWlnaHQgPSBvdi0+c3ViaDsKKwl9CisKKwlQREVCVUcoMywgIndpZHRoOiVkLCBoZWlnaHQ6JWQsIG1vZGU6JWQsIHN1YjolZCIsCisJICAgICAgIHdpZHRoLCBoZWlnaHQsIG1vZGUsIHN1Yl9mbGFnKTsKKworCWlmICh3aWR0aCAlIDE2IHx8IGhlaWdodCAlIDgpIHsKKwkJZXJyKCJJbnZhbGlkIHNpemUgKCVkLCAlZCkiLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHdpZHRoIDwgb3YtPm1pbndpZHRoIHx8IGhlaWdodCA8IG92LT5taW5oZWlnaHQpIHsKKwkJZXJyKCJSZXF1ZXN0ZWQgZGltZW5zaW9ucyBhcmUgdG9vIHNtYWxsIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3aWR0aCA+PSAzMjAgJiYgaGVpZ2h0ID49IDI0MCkgeworCQloaV9yZXMgPSAxOworCX0gZWxzZSBpZiAod2lkdGggPj0gMzIwIHx8IGhlaWdodCA+PSAyNDApIHsKKwkJZXJyKCJJbnZhbGlkIHdpZHRoL2hlaWdodCBjb21iaW5hdGlvbiAoJWQsICVkKSIsIHdpZHRoLCBoZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQloaV9yZXMgPSAwOworCX0KKworCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyoqKioqKioqIFNldCB0aGUgbW9kZSAqKioqKioqKi8KKworCXJlZ193KG92LCAweDJiLCAwKTsKKwlyZWdfdyhvdiwgMHgyYywgMCk7CisJcmVnX3cob3YsIDB4MmQsIDApOworCXJlZ193KG92LCAweDJlLCAwKTsKKwlyZWdfdyhvdiwgMHgzYiwgMCk7CisJcmVnX3cob3YsIDB4M2MsIDApOworCXJlZ193KG92LCAweDNkLCAwKTsKKwlyZWdfdyhvdiwgMHgzZSwgMCk7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTggJiYgb3Y1MThfY29sb3IpIHsKKwkJLyogT1Y1MTggbmVlZHMgVSBhbmQgViBzd2FwcGVkICovCisJCWkyY193X21hc2sob3YsIDB4MTUsIDB4MDAsIDB4MDEpOworCisJIAlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKKwkJCS8qIFNldCAxNi1iaXQgaW5wdXQgZm9ybWF0IChVViBkYXRhIGFyZSBpZ25vcmVkKSAqLworCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwMCwgMHgwOCk7CisKKwkJCS8qIFNldCA4LWJpdCAoNDowOjApIG91dHB1dCBmb3JtYXQgKi8KKwkJCXJlZ193X21hc2sob3YsIDB4MjgsIDB4MDAsIDB4ZjApOworCQkJcmVnX3dfbWFzayhvdiwgMHgzOCwgMHgwMCwgMHhmMCk7CisJCX0gZWxzZSB7CisJCQkvKiBTZXQgOC1iaXQgKFlWWVUpIGlucHV0IGZvcm1hdCAqLworCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwOCwgMHgwOCk7CisKKwkJCS8qIFNldCAxMi1iaXQgKDQ6MjowKSBvdXRwdXQgZm9ybWF0ICovCisJCQlyZWdfd19tYXNrKG92LCAweDI4LCAweDgwLCAweGYwKTsKKwkJCXJlZ193X21hc2sob3YsIDB4MzgsIDB4ODAsIDB4ZjApOworCQl9CisJfSBlbHNlIHsKKwkJcmVnX3cob3YsIDB4MjgsIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgPyAweDAwOjB4ODApOworCQlyZWdfdyhvdiwgMHgzOCwgKG1vZGUgPT0gVklERU9fUEFMRVRURV9HUkVZKSA/IDB4MDA6MHg4MCk7CisJfQorCisJaHNlZ3MgPSB3aWR0aCAvIDE2OworCXZzZWdzID0gaGVpZ2h0IC8gNDsKKworCXJlZ193KG92LCAweDI5LCBoc2Vncyk7CisJcmVnX3cob3YsIDB4MmEsIHZzZWdzKTsKKworCXJlZ193KG92LCAweDM5LCBoc2Vncyk7CisJcmVnX3cob3YsIDB4M2EsIHZzZWdzKTsKKworCS8qIFdpbmRvd3MgZHJpdmVyIGRvZXMgdGhpcyBoZXJlOyB3aG8ga25vd3Mgd2h5ICovCisJcmVnX3cob3YsIDB4MmYsIDB4ODApOworCisJLyoqKioqKioqIFNldCB0aGUgZnJhbWVyYXRlICh0byAxNSBGUFMpICoqKioqKioqLworCisJLyogTW9kZSBpbmRlcGVuZGVudCwgYnV0IGZyYW1lcmF0ZSBkZXBlbmRlbnQsIHJlZ3MgKi8KKwlyZWdfdyhvdiwgMHg1MSwgMHgwMik7CS8qIENsb2NrIGRpdmlkZXI7IGxvd2VyPT1mYXN0ZXIgKi8KKwlyZWdfdyhvdiwgMHgyMiwgMHgxOCk7CisJcmVnX3cob3YsIDB4MjMsIDB4ZmYpOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4UExVUykKKwkJcmVnX3cob3YsIDB4MjEsIDB4MTkpOworCWVsc2UKKwkJcmVnX3cob3YsIDB4NzEsIDB4MTkpOwkvKiBDb21wcmVzc2lvbi1yZWxhdGVkPyAqLworCisJLy8gRklYTUU6IFNlbnNvci1zcGVjaWZpYworCS8qIEJpdCA1IGlzIHdoYXQgbWF0dGVycyBoZXJlLiBPZiBjb3Vyc2UsIGl0IGlzICJyZXNlcnZlZCIgKi8KKwlpMmNfdyhvdiwgMHg1NCwgMHgyMyk7CisKKwlyZWdfdyhvdiwgMHgyZiwgMHg4MCk7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MThQTFVTKSB7CisJCXJlZ193KG92LCAweDI0LCAweDk0KTsKKwkJcmVnX3cob3YsIDB4MjUsIDB4OTApOworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM0LCAgICA0MDAsIDIpOwkvKiAxOTBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjNiwgICAgNTQwLCAyKTsJLyogMjFjaCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4YzcsICAgIDU0MCwgMik7CS8qIDIxY2ggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM4LCAgICAxMDgsIDIpOwkvKiA2Y2ggICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjYSwgMTMxMDk4LCAzKTsJLyogMjAwMWFoICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2IsICAgIDUzMiwgMik7CS8qIDIxNGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNjLCAgIDI0MDAsIDIpOwkvKiA5NjBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjZCwgICAgIDMyLCAyKTsJLyogMjBoICAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2UsICAgIDYwOCwgMik7CS8qIDI2MGggICAqLworCX0gZWxzZSB7CisJCXJlZ193KG92LCAweDI0LCAweDlmKTsKKwkJcmVnX3cob3YsIDB4MjUsIDB4OTApOworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM0LCAgICA0MDAsIDIpOwkvKiAxOTBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjNiwgICAgNTAwLCAyKTsJLyogMWY0aCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4YzcsICAgIDUwMCwgMik7CS8qIDFmNGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM4LCAgICAxNDIsIDIpOwkvKiA4ZWggICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjYSwgMTMxMDk4LCAzKTsJLyogMjAwMWFoICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2IsICAgIDUzMiwgMik7CS8qIDIxNGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNjLCAgIDIwMDAsIDIpOwkvKiA3ZDBoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjZCwgICAgIDMyLCAyKTsJLyogMjBoICAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2UsICAgIDYwOCwgMik7CS8qIDI2MGggICAqLworCX0KKworCXJlZ193KG92LCAweDJmLCAweDgwKTsKKworCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogUmVzZXQgaXQganVzdCBmb3IgZ29vZCBtZWFzdXJlICovCisJaWYgKG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBPVjUxMSwgT1Y1MTgsIGFuZCBzZW5zb3Igc3BlY2lmaWMgZnVuY3Rpb25zICovCitzdGF0aWMgaW50Cittb2RlX2luaXRfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnKQoreworCWludCByYyA9IDA7CisKKwlpZiAoIW92IHx8ICFvdi0+ZGV2KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlyYyA9IG92NTE4X21vZGVfaW5pdF9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7CisJfSBlbHNlIHsKKwkJcmMgPSBvdjUxMV9tb2RlX2luaXRfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwgbW9kZSwgc3ViX2ZsYWcpOworCX0KKworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlyYyA9IHNldF9vdl9zZW5zb3Jfd2luZG93KG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7CisJCWJyZWFrOworCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCQllcnIoIktTMDEyNy1zZXJpZXMgZGVjb2RlcnMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKwkJcmMgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKy8vCQlyYyA9IG1vZGVfaW5pdF9zYWFfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsIG1vZGUsCisvLwkJCQkJICAgICAgIHN1Yl9mbGFnKTsKKworCQlQREVCVUcoMSwgIlNBQSBzdGF0dXMgPSAweCUwMlgiLCBpMmNfcihvdiwgMHgxZikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIlVua25vd24gc2Vuc29yIik7CisJCXJjID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwkvKiBTZW5zb3ItaW5kZXBlbmRlbnQgc2V0dGluZ3MgKi8KKwlyYyA9IHNlbnNvcl9zZXRfYXV0b19icmlnaHRuZXNzKG92LCBvdi0+YXV0b19icnQpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX3NldF9hdXRvX2V4cG9zdXJlKG92LCBvdi0+YXV0b19leHApOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX3NldF9iYW5kaW5nX2ZpbHRlcihvdiwgYmFuZGluZ2ZpbHRlcik7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJaWYgKG92LT5saWdodGZyZXEpIHsKKwkJcmMgPSBzZW5zb3Jfc2V0X2xpZ2h0X2ZyZXEob3YsIGxpZ2h0ZnJlcSk7CisJCWlmIChGQVRBTF9FUlJPUihyYykpCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBzZW5zb3Jfc2V0X2JhY2tsaWdodChvdiwgb3YtPmJhY2tsaWdodCk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X21pcnJvcihvdiwgb3YtPm1pcnJvcik7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBpbWFnZSBwYXJhbWV0ZXJzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYXBwcyB0aGF0IHVzZQorICogcmVhZCgpIGFuZCBkbyBub3Qgc2V0IHRoZXNlLgorICovCitzdGF0aWMgaW50CitvdjUxeF9zZXRfZGVmYXVsdF9wYXJhbXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IGk7CisKKwkvKiBTZXQgZGVmYXVsdCBzaXplcyBpbiBjYXNlIElPQ1RMIChWSURJT0NNQ0FQVFVSRSkgaXMgbm90IHVzZWQKKwkgKiAodXNpbmcgcmVhZCgpIGluc3RlYWQpLiAqLworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQlvdi0+ZnJhbWVbaV0ud2lkdGggPSBvdi0+bWF4d2lkdGg7CisJCW92LT5mcmFtZVtpXS5oZWlnaHQgPSBvdi0+bWF4aGVpZ2h0OworCQlvdi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7CisJCWlmIChmb3JjZV9wYWxldHRlKQorCQkJb3YtPmZyYW1lW2ldLmZvcm1hdCA9IGZvcmNlX3BhbGV0dGU7CisJCWVsc2UKKwkJCW92LT5mcmFtZVtpXS5mb3JtYXQgPSBWSURFT19QQUxFVFRFX1lVVjQyMDsKKworCQlvdi0+ZnJhbWVbaV0uZGVwdGggPSBnZXRfZGVwdGgob3YtPmZyYW1lW2ldLmZvcm1hdCk7CisJfQorCisJUERFQlVHKDMsICIlZHglZCwgJXMiLCBvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQsCisJICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG92LT5mcmFtZVswXS5mb3JtYXQpKTsKKworCS8qIEluaXRpYWxpemUgdG8gbWF4IHdpZHRoL2hlaWdodCwgWVVWNDIwIG9yIFJHQjI0IChpZiBzdXBwb3J0ZWQpICovCisJaWYgKG1vZGVfaW5pdF9yZWdzKG92LCBvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQsCisJCQkgICBvdi0+ZnJhbWVbMF0uZm9ybWF0LCAwKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVmlkZW8gZGVjb2RlciBzdHVmZgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTZXQgYW5hbG9nIGlucHV0IHBvcnQgb2YgZGVjb2RlciAqLworc3RhdGljIGludAorZGVjb2Rlcl9zZXRfaW5wdXQoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBpbnB1dCkKK3sKKwlQREVCVUcoNCwgInBvcnQgJWQiLCBpbnB1dCk7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9TQUE3MTExQToKKwl7CisJCS8qIFNlbGVjdCBtb2RlICovCisJCWkyY193X21hc2sob3YsIDB4MDIsIGlucHV0LCAweDA3KTsKKwkJLyogQnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KKwkJaTJjX3dfbWFzayhvdiwgMHgwOSwgKGlucHV0ID4gMykgPyAweDgwOjB4MDAsIDB4ODApOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEdldCBBU0NJSSBuYW1lIG9mIHZpZGVvIGlucHV0ICovCitzdGF0aWMgaW50CitkZWNvZGVyX2dldF9pbnB1dF9uYW1lKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgaW5wdXQsIGNoYXIgKm5hbWUpCit7CisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJeworCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID4gNykKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIGlmIChpbnB1dCA8IDQpCisJCQlzcHJpbnRmKG5hbWUsICJDVkJTLSVkIiwgaW5wdXQpOworCQllbHNlIC8vIGlmIChpbnB1dCA8IDgpCisJCQlzcHJpbnRmKG5hbWUsICJTLVZpZGVvLSVkIiwgaW5wdXQgLSA0KTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXNwcmludGYobmFtZSwgIiVzIiwgIkNhbWVyYSIpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTZXQgbm9ybSAoTlRTQywgUEFMLCBTRUNBTSwgQVVUTykgKi8KK3N0YXRpYyBpbnQKK2RlY29kZXJfc2V0X25vcm0oc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBub3JtKQoreworCVBERUJVRyg0LCAiJWQiLCBub3JtKTsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX1NBQTcxMTFBOgorCXsKKwkJaW50IHJlZ184LCByZWdfZTsKKworCQlpZiAobm9ybSA9PSBWSURFT19NT0RFX05UU0MpIHsKKwkJCXJlZ184ID0gMHg0MDsJLyogNjAgSHogKi8KKwkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KKwkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfUEFMKSB7CisJCQlyZWdfOCA9IDB4MDA7CS8qIDUwIEh6ICovCisJCQlyZWdfZSA9IDB4MDA7CS8qIE5UU0MgTSAvIFBBTCBCR0hJICovCisJCX0gZWxzZSBpZiAobm9ybSA9PSBWSURFT19NT0RFX0FVVE8pIHsKKwkJCXJlZ184ID0gMHg4MDsJLyogQXV0byBmaWVsZCBkZXRlY3QgKi8KKwkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KKwkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfU0VDQU0pIHsKKwkJCXJlZ184ID0gMHgwMDsJLyogNTAgSHogKi8KKwkJCXJlZ19lID0gMHg1MDsJLyogU0VDQU0gLyBQQUwgNC40MyAqLworCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpMmNfd19tYXNrKG92LCAweDA4LCByZWdfOCwgMHhjMCk7CisJCWkyY193X21hc2sob3YsIDB4MGUsIHJlZ19lLCAweDcwKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFJhdyBkYXRhIHBhcnNpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29waWVzIGEgNjQtYnl0ZSBzZWdtZW50IGF0IHBJbiB0byBhbiA4eDggYmxvY2sgYXQgcE91dC4gVGhlIHdpZHRoIG9mIHRoZQorICogaW1hZ2UgYXQgcE91dCBpcyBzcGVjaWZpZWQgYnkgdy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCittYWtlXzh4OCh1bnNpZ25lZCBjaGFyICpwSW4sIHVuc2lnbmVkIGNoYXIgKnBPdXQsIGludCB3KQoreworCXVuc2lnbmVkIGNoYXIgKnBPdXQxID0gcE91dDsKKwlpbnQgeCwgeTsKKworCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJcE91dDEgPSBwT3V0OworCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisJCQkqcE91dDErKyA9ICpwSW4rKzsKKwkJfQorCQlwT3V0ICs9IHc7CisJfQorfQorCisvKgorICogRm9yIFJBVyBCVyAoWVVWIDQ6MDowKSBpbWFnZXMsIGRhdGEgc2hvdyB1cCBpbiAyNTYgYnl0ZSBzZWdtZW50cy4KKyAqIFRoZSBzZWdtZW50cyByZXByZXNlbnQgNCBzcXVhcmVzIG9mIDh4OCBwaXhlbHMgYXMgZm9sbG93czoKKyAqCisgKiAgICAgIDAgIDEgLi4uICA3ICAgIDY0ICA2NSAuLi4gIDcxICAgLi4uICAxOTIgMTkzIC4uLiAxOTkKKyAqICAgICAgOCAgOSAuLi4gMTUgICAgNzIgIDczIC4uLiAgNzkgICAgICAgIDIwMCAyMDEgLi4uIDIwNworICogICAgICAgICAgIC4uLiAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAuLi4KKyAqICAgICA1NiA1NyAuLi4gNjMgICAxMjAgMTIxIC4uLiAxMjcgICAgICAgIDI0OCAyNDkgLi4uIDI1NQorICoKKyAqLyAKK3N0YXRpYyB2b2lkCit5dXY0MDByYXdfdG9feXV2NDAwcChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBJbjAsIHVuc2lnbmVkIGNoYXIgKnBPdXQwKQoreworCWludCB4LCB5OworCXVuc2lnbmVkIGNoYXIgKnBJbiwgKnBPdXQsICpwT3V0TGluZTsKKworCS8qIENvcHkgWSAqLworCXBJbiA9IHBJbjA7CisJcE91dExpbmUgPSBwT3V0MDsKKwlmb3IgKHkgPSAwOyB5IDwgZnJhbWUtPnJhd2hlaWdodCAtIDE7IHkgKz0gOCkgeworCQlwT3V0ID0gcE91dExpbmU7CisJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGggLSAxOyB4ICs9IDgpIHsKKwkJCW1ha2VfOHg4KHBJbiwgcE91dCwgZnJhbWUtPnJhd3dpZHRoKTsKKwkJCXBJbiArPSA2NDsKKwkJCXBPdXQgKz0gODsKKwkJfQorCQlwT3V0TGluZSArPSA4ICogZnJhbWUtPnJhd3dpZHRoOworCX0KK30KKworLyoKKyAqIEZvciBZVVYgNDoyOjAgaW1hZ2VzLCB0aGUgZGF0YSBzaG93IHVwIGluIDM4NCBieXRlIHNlZ21lbnRzLgorICogVGhlIGZpcnN0IDY0IGJ5dGVzIG9mIGVhY2ggc2VnbWVudCBhcmUgVSwgdGhlIG5leHQgNjQgYXJlIFYuICBUaGUgVSBhbmQKKyAqIFYgYXJlIGFycmFuZ2VkIGFzIGZvbGxvd3M6CisgKgorICogICAgICAwICAxIC4uLiAgNworICogICAgICA4ICA5IC4uLiAxNQorICogICAgICAgICAgIC4uLiAgIAorICogICAgIDU2IDU3IC4uLiA2MworICoKKyAqIFUgYW5kIFYgYXJlIHNoaXBwZWQgYXQgaGFsZiByZXNvbHV0aW9uICgxIFUsViBzYW1wbGUgLT4gb25lIDJ4MiBibG9jaykuCisgKgorICogVGhlIG5leHQgMjU2IGJ5dGVzIGFyZSBmdWxsIHJlc29sdXRpb24gWSBkYXRhIGFuZCByZXByZXNlbnQgNCBzcXVhcmVzCisgKiBvZiA4eDggcGl4ZWxzIGFzIGZvbGxvd3M6CisgKgorICogICAgICAwICAxIC4uLiAgNyAgICA2NCAgNjUgLi4uICA3MSAgIC4uLiAgMTkyIDE5MyAuLi4gMTk5CisgKiAgICAgIDggIDkgLi4uIDE1ICAgIDcyICA3MyAuLi4gIDc5ICAgICAgICAyMDAgMjAxIC4uLiAyMDcKKyAqICAgICAgICAgICAuLi4gICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgLi4uCisgKiAgICAgNTYgNTcgLi4uIDYzICAgMTIwIDEyMSAuLi4gMTI3ICAgLi4uICAyNDggMjQ5IC4uLiAyNTUKKyAqCisgKiBOb3RlIHRoYXQgdGhlIFUgYW5kIFYgZGF0YSBpbiBvbmUgc2VnbWVudCByZXByZXNlbnQgYSAxNiB4IDE2IHBpeGVsCisgKiBhcmVhLCBidXQgdGhlIFkgZGF0YSByZXByZXNlbnQgYSAzMiB4IDggcGl4ZWwgYXJlYS4gSWYgdGhlIHdpZHRoIGlzIG5vdCBhbgorICogZXZlbiBtdWx0aXBsZSBvZiAzMiwgdGhlIGV4dHJhIDh4OCBibG9ja3Mgd2l0aGluIGEgMzJ4OCBibG9jayBiZWxvbmcgdG8gdGhlCisgKiBuZXh0IGhvcml6b250YWwgc3RyaXBlLgorICoKKyAqIElmIGR1bXBwaXggbW9kdWxlIHBhcmFtIGlzIHNldCwgX3BhcnNlX2RhdGEganVzdCBkdW1wcyB0aGUgaW5jb21pbmcgc2VnbWVudHMsCisgKiB2ZXJiYXRpbSwgaW4gb3JkZXIsIGludG8gdGhlIGZyYW1lLiBXaGVuIHVzZWQgd2l0aCB2aWRjYXQgLWYgcHBtIC1zIDY0MHg0ODAKKyAqIHRoaXMgcHV0cyB0aGUgZGF0YSBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBjYW4gYmUgYW5hbHl6ZWQgd2l0aCB0aGUKKyAqIHBhcnNlcHBtLmMgdXRpbGl0eSBJIHdyb3RlLiAgVGhhdCdzIGEgbXVjaCBmYXN0ZXIgd2F5IGZvciBmaWd1cmluZyBvdXQgaG93CisgKiB0aGVzZSBkYXRhIGFyZSBzY3JhbWJsZWQuCisgKi8KKworLyogQ29udmVydHMgZnJvbSByYXcsIHVuY29tcHJlc3NlZCBzZWdtZW50cyBhdCBwSW4wIHRvIGEgWVVWNDIwUCBmcmFtZSBhdCBwT3V0MC4KKyAqCisgKiBGSVhNRTogQ3VycmVudGx5IG9ubHkgaGFuZGxlcyB3aWR0aCBhbmQgaGVpZ2h0IHRoYXQgYXJlIG11bHRpcGxlcyBvZiAxNgorICovCitzdGF0aWMgdm9pZAoreXV2NDIwcmF3X3RvX3l1djQyMHAoc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKK3sKKwlpbnQgaywgeCwgeTsKKwl1bnNpZ25lZCBjaGFyICpwSW4sICpwT3V0LCAqcE91dExpbmU7CisJY29uc3QgdW5zaWduZWQgaW50IGEgPSBmcmFtZS0+cmF3d2lkdGggKiBmcmFtZS0+cmF3aGVpZ2h0OworCWNvbnN0IHVuc2lnbmVkIGludCB3ID0gZnJhbWUtPnJhd3dpZHRoIC8gMjsKKworCS8qIENvcHkgVSBhbmQgViAqLworCXBJbiA9IHBJbjA7CisJcE91dExpbmUgPSBwT3V0MCArIGE7CisJZm9yICh5ID0gMDsgeSA8IGZyYW1lLT5yYXdoZWlnaHQgLSAxOyB5ICs9IDE2KSB7CisJCXBPdXQgPSBwT3V0TGluZTsKKwkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAtIDE7IHggKz0gMTYpIHsKKwkJCW1ha2VfOHg4KHBJbiwgcE91dCwgdyk7CisJCQltYWtlXzh4OChwSW4gKyA2NCwgcE91dCArIGEvNCwgdyk7CisJCQlwSW4gKz0gMzg0OworCQkJcE91dCArPSA4OworCQl9CisJCXBPdXRMaW5lICs9IDggKiB3OworCX0KKworCS8qIENvcHkgWSAqLworCXBJbiA9IHBJbjAgKyAxMjg7CisJcE91dExpbmUgPSBwT3V0MDsKKwlrID0gMDsKKwlmb3IgKHkgPSAwOyB5IDwgZnJhbWUtPnJhd2hlaWdodCAtIDE7IHkgKz0gOCkgeworCQlwT3V0ID0gcE91dExpbmU7CisJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGggLSAxOyB4ICs9IDgpIHsKKwkJCW1ha2VfOHg4KHBJbiwgcE91dCwgZnJhbWUtPnJhd3dpZHRoKTsKKwkJCXBJbiArPSA2NDsKKwkJCXBPdXQgKz0gODsKKwkJCWlmICgoKytrKSA+IDMpIHsKKwkJCQlrID0gMDsKKwkJCQlwSW4gKz0gMTI4OworCQkJfQorCQl9CisJCXBPdXRMaW5lICs9IDggKiBmcmFtZS0+cmF3d2lkdGg7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERlY29tcHJlc3Npb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2hvb3NlcyBhIGRlY29tcHJlc3Npb24gbW9kdWxlLCBsb2NrcyBpdCwgYW5kIHNldHMgb3YtPmRlY29tcF9vcHMKKyAqIGFjY29yZGluZ2x5LiBSZXR1cm5zIC1FTlhJTyBpZiBkZWNvbXByZXNzb3IgaXMgbm90IGF2YWlsYWJsZSwgb3RoZXJ3aXNlCisgKiByZXR1cm5zIDAgaWYgbm8gb3RoZXIgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3JlcXVlc3RfZGVjb21wcmVzc29yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWlmICghb3YpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG92LT5kZWNvbXBfb3BzKSB7CisJCWVycigiRVJST1I6IERlY29tcHJlc3NvciBhbHJlYWR5IHJlcXVlc3RlZCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbG9ja19rZXJuZWwoKTsKKworCS8qIFRyeSB0byBnZXQgTU1YLCBhbmQgZmFsbCBiYWNrIG9uIG5vLU1NWCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpIHsKKwkJaWYgKG92NTExX21teF9kZWNvbXBfb3BzKSB7CisJCQlQREVCVUcoMywgIlVzaW5nIE9WNTExIE1NWCBkZWNvbXByZXNzb3IiKTsKKwkJCW92LT5kZWNvbXBfb3BzID0gb3Y1MTFfbW14X2RlY29tcF9vcHM7CisJCX0gZWxzZSBpZiAob3Y1MTFfZGVjb21wX29wcykgeworCQkJUERFQlVHKDMsICJVc2luZyBPVjUxMSBkZWNvbXByZXNzb3IiKTsKKwkJCW92LT5kZWNvbXBfb3BzID0gb3Y1MTFfZGVjb21wX29wczsKKwkJfSBlbHNlIHsKKwkJCWVycigiTm8gZGVjb21wcmVzc29yIGF2YWlsYWJsZSIpOworCQl9CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAob3Y1MThfbW14X2RlY29tcF9vcHMpIHsKKwkJCVBERUJVRygzLCAiVXNpbmcgT1Y1MTggTU1YIGRlY29tcHJlc3NvciIpOworCQkJb3YtPmRlY29tcF9vcHMgPSBvdjUxOF9tbXhfZGVjb21wX29wczsKKwkJfSBlbHNlIGlmIChvdjUxOF9kZWNvbXBfb3BzKSB7CisJCQlQREVCVUcoMywgIlVzaW5nIE9WNTE4IGRlY29tcHJlc3NvciIpOworCQkJb3YtPmRlY29tcF9vcHMgPSBvdjUxOF9kZWNvbXBfb3BzOworCQl9IGVsc2UgeworCQkJZXJyKCJObyBkZWNvbXByZXNzb3IgYXZhaWxhYmxlIik7CisJCX0KKwl9IGVsc2UgeworCQllcnIoIlVua25vd24gYnJpZGdlIik7CisJfQorCisJaWYgKCFvdi0+ZGVjb21wX29wcykKKwkJZ290byBub3N5czsKKworCWlmICghb3YtPmRlY29tcF9vcHMtPm93bmVyKSB7CisJCW92LT5kZWNvbXBfb3BzID0gTlVMTDsKKwkJZ290byBub3N5czsKKwl9CisJCisJaWYgKCF0cnlfbW9kdWxlX2dldChvdi0+ZGVjb21wX29wcy0+b3duZXIpKQorCQlnb3RvIG5vc3lzOworCisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworCisgbm9zeXM6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAtRU5PU1lTOworfQorCisvKiBVbmxvY2tzIGRlY29tcHJlc3Npb24gbW9kdWxlIGFuZCBudWxscyBvdi0+ZGVjb21wX29wcy4gU2FmZSB0byBjYWxsIGV2ZW4KKyAqIGlmIG92LT5kZWNvbXBfb3BzIGlzIE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkCityZWxlYXNlX2RlY29tcHJlc3NvcihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmVsZWFzZWQgPSAwOwkvKiBEaWQgd2UgYWN0dWFsbHkgZG8gYW55dGhpbmc/ICovCisKKwlpZiAoIW92KQorCQlyZXR1cm47CisKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKG92LT5kZWNvbXBfb3BzKSB7CisJCW1vZHVsZV9wdXQob3YtPmRlY29tcF9vcHMtPm93bmVyKTsKKwkJcmVsZWFzZWQgPSAxOworCX0KKworCW92LT5kZWNvbXBfb3BzID0gTlVMTDsKKworCXVubG9ja19rZXJuZWwoKTsKKworCWlmIChyZWxlYXNlZCkKKwkJUERFQlVHKDMsICJEZWNvbXByZXNzb3IgcmVsZWFzZWQiKTsKK30KKworc3RhdGljIHZvaWQKK2RlY29tcHJlc3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUsCisJICAgdW5zaWduZWQgY2hhciAqcEluMCwgdW5zaWduZWQgY2hhciAqcE91dDApCit7CisJaWYgKCFvdi0+ZGVjb21wX29wcykKKwkJaWYgKHJlcXVlc3RfZGVjb21wcmVzc29yKG92KSkKKwkJCXJldHVybjsKKworCVBERUJVRyg0LCAiRGVjb21wcmVzc2luZyAlZCBieXRlcyIsIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisKKwlpZiAoZnJhbWUtPmZvcm1hdCA9PSBWSURFT19QQUxFVFRFX0dSRVkKKwkgICAgJiYgb3YtPmRlY29tcF9vcHMtPmRlY29tcF80MDApIHsKKwkJaW50IHJldCA9IG92LT5kZWNvbXBfb3BzLT5kZWNvbXBfNDAwKAorCQkJcEluMCwKKwkJCXBPdXQwLAorCQkJZnJhbWUtPmNvbXBidWYsCisJCQlmcmFtZS0+cmF3d2lkdGgsCisJCQlmcmFtZS0+cmF3aGVpZ2h0LAorCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKwkJUERFQlVHKDQsICJERUJVRzogZGVjb21wXzQwMCByZXR1cm5lZCAlZCIsIHJldCk7CisJfSBlbHNlIGlmIChmcmFtZS0+Zm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfR1JFWQorCQkgICAmJiBvdi0+ZGVjb21wX29wcy0+ZGVjb21wXzQyMCkgeworCQlpbnQgcmV0ID0gb3YtPmRlY29tcF9vcHMtPmRlY29tcF80MjAoCisJCQlwSW4wLAorCQkJcE91dDAsCisJCQlmcmFtZS0+Y29tcGJ1ZiwKKwkJCWZyYW1lLT5yYXd3aWR0aCwKKwkJCWZyYW1lLT5yYXdoZWlnaHQsCisJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQpOworCQlQREVCVUcoNCwgIkRFQlVHOiBkZWNvbXBfNDIwIHJldHVybmVkICVkIiwgcmV0KTsKKwl9IGVsc2UgeworCQllcnIoIkRlY29tcHJlc3NvciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZm9ybWF0Iik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZvcm1hdCBjb252ZXJzaW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZ1c2VzIGV2ZW4gYW5kIG9kZCBmaWVsZHMgdG9nZXRoZXIsIGFuZCBkb3VibGVzIHdpZHRoLgorICogSU5QVVQ6IGFuIG9kZCBmaWVsZCBmb2xsb3dlZCBieSBhbiBldmVuIGZpZWxkIGF0IHBJbjAsIGluIFlVViBwbGFuYXIgZm9ybWF0CisgKiBPVVRQVVQ6IGEgbm9ybWFsIFlVViBwbGFuYXIgaW1hZ2UsIHdpdGggY29ycmVjdCBhc3BlY3QgcmF0aW8KKyAqLworc3RhdGljIHZvaWQKK2RlaW50ZXJsYWNlKHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUsIGludCByYXdmb3JtYXQsCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKK3sKKwljb25zdCBpbnQgZmllbGRoZWlnaHQgPSBmcmFtZS0+cmF3aGVpZ2h0IC8gMjsKKwljb25zdCBpbnQgZmllbGRwaXggPSBmaWVsZGhlaWdodCAqIGZyYW1lLT5yYXd3aWR0aDsKKwljb25zdCBpbnQgdyA9IGZyYW1lLT53aWR0aDsKKwlpbnQgeCwgeTsKKwl1bnNpZ25lZCBjaGFyICpwSW5FdmVuLCAqcEluT2RkLCAqcE91dDsKKworCVBERUJVRyg1LCAiZmllbGRoZWlnaHQ9JWQiLCBmaWVsZGhlaWdodCk7CisKKwlpZiAoZnJhbWUtPnJhd2hlaWdodCAhPSBmcmFtZS0+aGVpZ2h0KSB7CisJCWVycigiaW52YWxpZCBoZWlnaHQiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoZnJhbWUtPnJhd3dpZHRoICogMikgIT0gZnJhbWUtPndpZHRoKSB7CisJCWVycigiaW52YWxpZCB3aWR0aCIpOworCQlyZXR1cm47CisJfQorCisJLyogWSAqLworCXBJbk9kZCA9IHBJbjA7CisJcEluRXZlbiA9IHBJbk9kZCArIGZpZWxkcGl4OworCXBPdXQgPSBwT3V0MDsKKwlmb3IgKHkgPSAwOyB5IDwgZmllbGRoZWlnaHQ7IHkrKykgeworCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoOyB4KyspIHsKKwkJCSpwT3V0ID0gKnBJbkV2ZW47CisJCQkqKHBPdXQrMSkgPSAqcEluRXZlbisrOworCQkJKihwT3V0K3cpID0gKnBJbk9kZDsKKwkJCSoocE91dCt3KzEpID0gKnBJbk9kZCsrOworCQkJcE91dCArPSAyOworCQl9CisJCXBPdXQgKz0gdzsKKwl9CisKKwlpZiAocmF3Zm9ybWF0ID09IFJBV0ZNVF9ZVVY0MjApIHsKKwkvKiBVICovCisJCXBJbk9kZCA9IHBJbjAgKyBmaWVsZHBpeCAqIDI7CisJCXBJbkV2ZW4gPSBwSW5PZGQgKyBmaWVsZHBpeCAvIDQ7CisJCWZvciAoeSA9IDA7IHkgPCBmaWVsZGhlaWdodCAvIDI7IHkrKykgeworCQkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAvIDI7IHgrKykgeworCQkJCSpwT3V0ID0gKnBJbkV2ZW47CisJCQkJKihwT3V0KzEpID0gKnBJbkV2ZW4rKzsKKwkJCQkqKHBPdXQrdy8yKSA9ICpwSW5PZGQ7CisJCQkJKihwT3V0K3cvMisxKSA9ICpwSW5PZGQrKzsKKwkJCQlwT3V0ICs9IDI7CisJCQl9CisJCQlwT3V0ICs9IHcvMjsKKwkJfQorCS8qIFYgKi8KKwkJcEluT2RkID0gcEluMCArIGZpZWxkcGl4ICogMiArIGZpZWxkcGl4IC8gMjsKKwkJcEluRXZlbiA9IHBJbk9kZCArIGZpZWxkcGl4IC8gNDsKKwkJZm9yICh5ID0gMDsgeSA8IGZpZWxkaGVpZ2h0IC8gMjsgeSsrKSB7CisJCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoIC8gMjsgeCsrKSB7CisJCQkJKnBPdXQgPSAqcEluRXZlbjsKKwkJCQkqKHBPdXQrMSkgPSAqcEluRXZlbisrOworCQkJCSoocE91dCt3LzIpID0gKnBJbk9kZDsKKwkJCQkqKHBPdXQrdy8yKzEpID0gKnBJbk9kZCsrOworCQkJCXBPdXQgKz0gMjsKKwkJCX0KKwkJCXBPdXQgKz0gdy8yOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfcG9zdHByb2Nlc3NfZ3JleShzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSkKK3sKKwkJLyogRGVpbnRlcmxhY2UgZnJhbWUsIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEgJiYgZnJhbWUtPnJhd2hlaWdodCA+PSA0ODApIHsKKwkJCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKKwkJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgZnJhbWUtPnRlbXBkYXRhKTsKKwkJCWVsc2UKKwkJCQl5dXY0MDByYXdfdG9feXV2NDAwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgICAgIGZyYW1lLT50ZW1wZGF0YSk7CisKKwkJCWRlaW50ZXJsYWNlKGZyYW1lLCBSQVdGTVRfWVVWNDAwLCBmcmFtZS0+dGVtcGRhdGEsCisJCQkgICAgICAgICAgICBmcmFtZS0+ZGF0YSk7CisJCX0gZWxzZSB7CisJCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCisJCQkJZGVjb21wcmVzcyhvdiwgZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAorCQkJCQkJIGZyYW1lLT5kYXRhKTsKKwkJCWVsc2UKKwkJCQl5dXY0MDByYXdfdG9feXV2NDAwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgICAgIGZyYW1lLT5kYXRhKTsKKwkJfQorfQorCisvKiBQcm9jZXNzIHJhdyBZVVY0MjAgZGF0YSBpbnRvIHN0YW5kYXJkIFlVVjQyMFAgKi8KK3N0YXRpYyB2b2lkCitvdjUxeF9wb3N0cHJvY2Vzc195dXY0MjAoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCit7CisJLyogRGVpbnRlcmxhY2UgZnJhbWUsIGlmIG5lY2Vzc2FyeSAqLworCWlmIChvdi0+c2Vuc29yID09IFNFTl9TQUE3MTExQSAmJiBmcmFtZS0+cmF3aGVpZ2h0ID49IDQ4MCkgeworCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCisJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT50ZW1wZGF0YSk7CisJCWVsc2UKKwkJCXl1djQyMHJhd190b195dXY0MjBwKGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwKKwkJCQkJICAgICBmcmFtZS0+dGVtcGRhdGEpOworCisJCWRlaW50ZXJsYWNlKGZyYW1lLCBSQVdGTVRfWVVWNDIwLCBmcmFtZS0+dGVtcGRhdGEsCisJCSAgICAgICAgICAgIGZyYW1lLT5kYXRhKTsKKwl9IGVsc2UgeworCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCisJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT5kYXRhKTsKKwkJZWxzZQorCQkJeXV2NDIwcmF3X3RvX3l1djQyMHAoZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAorCQkJCQkgICAgIGZyYW1lLT5kYXRhKTsKKwl9Cit9CisKKy8qIFBvc3QtcHJvY2Vzc2VzIHRoZSBzcGVjaWZpZWQgZnJhbWUuIFRoaXMgY29uc2lzdHMgb2Y6CisgKiAJMS4gRGVjb21wcmVzcyBmcmFtZSwgaWYgbmVjZXNzYXJ5CisgKgkyLiBEZWludGVybGFjZSBmcmFtZSBhbmQgc2NhbGUgdG8gcHJvcGVyIHNpemUsIGlmIG5lY2Vzc2FyeQorICogCTMuIENvbnZlcnQgZnJvbSBZVVYgcGxhbmFyIHRvIGRlc3RpbmF0aW9uIGZvcm1hdCwgaWYgbmVjZXNzYXJ5CisgKiAJNC4gRml4IHRoZSBSR0Igb2Zmc2V0LCBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIHZvaWQKK292NTF4X3Bvc3Rwcm9jZXNzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lKQoreworCWlmIChkdW1wcGl4KSB7CisJCW1lbXNldChmcmFtZS0+ZGF0YSwgMCwKKwkJCU1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7CisJCVBERUJVRyg0LCAiRHVtcGluZyAlZCBieXRlcyIsIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisJCW1lbWNweShmcmFtZS0+ZGF0YSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChmcmFtZS0+Zm9ybWF0KSB7CisJCWNhc2UgVklERU9fUEFMRVRURV9HUkVZOgorCQkJb3Y1MXhfcG9zdHByb2Nlc3NfZ3JleShvdiwgZnJhbWUpOworCQkJYnJlYWs7CisJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjA6CisJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOgorCQkJb3Y1MXhfcG9zdHByb2Nlc3NfeXV2NDIwKG92LCBmcmFtZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiQ2Fubm90IGNvbnZlcnQgZGF0YSB0byAlcyIsCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgZnJhbWUtPmZvcm1hdCkpOworCQl9CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE9WNTF4IGRhdGEgdHJhbnNmZXIsIElSUSBoYW5kbGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb3Y1MTFfbW92ZV9kYXRhKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pCit7CisJaW50IG51bSwgb2Zmc2V0OworCWludCBwbnVtID0gaW5bb3YtPnBhY2tldF9zaXplIC0gMV07CQkvKiBHZXQgcGFja2V0IG51bWJlciAqLworCWludCBtYXhfcmF3ID0gTUFYX1JBV19EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KTsKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lID0gJm92LT5mcmFtZVtvdi0+Y3VyZnJhbWVdOworCXN0cnVjdCB0aW1ldmFsICp0czsKKworCS8qIFNPRi9FT0YgcGFja2V0cyBoYXZlIDFzdCB0byA4dGggYnl0ZXMgemVyb2VkIGFuZCB0aGUgOXRoCisJICogYnl0ZSBub24temVyby4gVGhlIEVPRiBwYWNrZXQgaGFzIGltYWdlIHdpZHRoL2hlaWdodCBpbiB0aGUKKwkgKiAxMHRoIGFuZCAxMXRoIGJ5dGVzLiBUaGUgOXRoIGJ5dGUgaXMgZ2l2ZW4gYXMgZm9sbG93czoKKwkgKgorCSAqIGJpdCA3OiBFT0YKKwkgKiAgICAgNjogY29tcHJlc3Npb24gZW5hYmxlZAorCSAqICAgICA1OiA0MjIvNDIwLzQwMCBtb2RlcworCSAqICAgICA0OiA0MjIvNDIwLzQwMCBtb2RlcworCSAqICAgICAzOiAxCisJICogICAgIDI6IHNuYXBzaG90IGJ1dHRvbiBvbgorCSAqICAgICAxOiBzbmFwc2hvdCBmcmFtZQorCSAqICAgICAwOiBldmVuL29kZCBmaWVsZAorCSAqLworCisJaWYgKHByaW50cGgpIHsKKwkJaW5mbygicGgoJTNkKTogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMngiLAorCQkgICAgIHBudW0sIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sIGluWzZdLAorCQkgICAgIGluWzddLCBpbls4XSwgaW5bOV0sIGluWzEwXSwgaW5bMTFdKTsKKwl9CisKKwkvKiBDaGVjayBmb3IgU09GL0VPRiBwYWNrZXQgKi8KKwlpZiAoKGluWzBdIHwgaW5bMV0gfCBpblsyXSB8IGluWzNdIHwgaW5bNF0gfCBpbls1XSB8IGluWzZdIHwgaW5bN10pIHx8CisJICAgICh+aW5bOF0gJiAweDA4KSkKKwkJZ290byBjaGVja19taWRkbGU7CisKKwkvKiBGcmFtZSBlbmQgKi8KKwlpZiAoaW5bOF0gJiAweDgwKSB7CisJCXRzID0gKHN0cnVjdCB0aW1ldmFsICopKGZyYW1lLT5kYXRhCisJCSAgICAgICsgTUFYX0ZSQU1FX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7CisJCWRvX2dldHRpbWVvZmRheSh0cyk7CisKKwkJLyogR2V0IHRoZSBhY3R1YWwgZnJhbWUgc2l6ZSBmcm9tIHRoZSBFT0YgaGVhZGVyICovCisJCWZyYW1lLT5yYXd3aWR0aCA9ICgoaW50KShpbls5XSkgKyAxKSAqIDg7CisJCWZyYW1lLT5yYXdoZWlnaHQgPSAoKGludCkoaW5bMTBdKSArIDEpICogODsKKworIAkJUERFQlVHKDQsICJGcmFtZSBlbmQsIGZyYW1lPSVkLCBwbnVtPSVkLCB3PSVkLCBoPSVkLCByZWN2ZD0lZCIsCisJCQlvdi0+Y3VyZnJhbWUsIHBudW0sIGZyYW1lLT5yYXd3aWR0aCwgZnJhbWUtPnJhd2hlaWdodCwKKwkJCWZyYW1lLT5ieXRlc19yZWN2ZCk7CisKKwkJLyogVmFsaWRhdGUgdGhlIGhlYWRlciBkYXRhICovCisJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXd3aWR0aCwgb3YtPm1pbndpZHRoLCBvdi0+bWF4d2lkdGgpOworCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZS0+cmF3aGVpZ2h0LCBvdi0+bWluaGVpZ2h0LAorCQkJCSAgb3YtPm1heGhlaWdodCk7CisKKwkJLyogRG9uJ3QgYWxsb3cgYnl0ZSBjb3VudCB0byBleGNlZWQgYnVmZmVyIHNpemUgKi8KKwkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPmJ5dGVzX3JlY3ZkLCA4LCBtYXhfcmF3KTsKKworCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgeworCSAgICAJCWludCBuZXh0ZjsKKworCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0RPTkU7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZyYW1lLT53cSk7CisKKwkJCS8qIElmIG5leHQgZnJhbWUgaXMgcmVhZHkgb3IgZ3JhYmJpbmcsCisJCQkgKiBwb2ludCB0byBpdCAqLworCQkJbmV4dGYgPSAob3YtPmN1cmZyYW1lICsgMSkgJSBPVjUxMV9OVU1GUkFNRVM7CisJCQlpZiAob3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkKKwkJCSAgICB8fCBvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykgeworCQkJCW92LT5jdXJmcmFtZSA9IG5leHRmOworCQkJCW92LT5mcmFtZVtuZXh0Zl0uc2NhbnN0YXRlID0gU1RBVEVfU0NBTk5JTkc7CisJCQl9IGVsc2UgeworCQkJCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0RPTkUpIHsKKwkJCQkJUERFQlVHKDQsICIqKiBGcmFtZSBkb25lICoqIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJUERFQlVHKDQsICJGcmFtZSBub3QgcmVhZHk/IHN0YXRlID0gJWQiLAorCQkJCQkJb3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUpOworCQkJCX0KKworCQkJCW92LT5jdXJmcmFtZSA9IC0xOworCQkJfQorCQl9IGVsc2UgeworCQkJUERFQlVHKDUsICJGcmFtZSBkb25lLCBidXQgbm90IHNjYW5uaW5nIik7CisJCX0KKwkJLyogSW1hZ2UgY29ycnVwdGlvbiBjYXVzZWQgYnkgbWlzcGxhY2VkIGZyYW1lLT5zZWdtZW50ID0gMAorCQkgKiBmaXhlZCBieSBjYXJsb3NmQGNvbmVjdGl2YS5jb20uYnIKKwkJICovCisJfSBlbHNlIHsKKwkJLyogRnJhbWUgc3RhcnQgKi8KKwkJUERFQlVHKDQsICJGcmFtZSBzdGFydCwgZnJhbWVudW0gPSAlZCIsIG92LT5jdXJmcmFtZSk7CisKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYSBzbmFwc2hvdCBmcmFtZSAqLworCQkvKiBGSVhNRT8/IFNob3VsZCB0aGUgc25hcHNob3QgcmVzZXQgZ28gaGVyZT8gUGVyZm9ybWFuY2U/ICovCisJCWlmIChpbls4XSAmIDB4MDIpIHsKKwkJCWZyYW1lLT5zbmFwc2hvdCA9IDE7CisJCQlQREVCVUcoMywgInNuYXBzaG90IGRldGVjdGVkIik7CisJCX0KKworCQlmcmFtZS0+c2NhbnN0YXRlID0gU1RBVEVfTElORVM7CisJCWZyYW1lLT5ieXRlc19yZWN2ZCA9IDA7CisJCWZyYW1lLT5jb21wcmVzc2VkID0gaW5bOF0gJiAweDQwOworCX0KKworY2hlY2tfbWlkZGxlOgorCS8qIEFyZSB3ZSBpbiBhIGZyYW1lPyAqLworCWlmIChmcmFtZS0+c2NhbnN0YXRlICE9IFNUQVRFX0xJTkVTKSB7CisJCVBERUJVRyg1LCAiTm90IGluIGEgZnJhbWU7IHBhY2tldCBza2lwcGVkIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiBmcmFtZSBzdGFydCwgc2tpcCBoZWFkZXIgKi8KKwlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkID09IDApCisJCW9mZnNldCA9IDk7CisJZWxzZQorCQlvZmZzZXQgPSAwOworCisJbnVtID0gbiAtIG9mZnNldCAtIDE7CisKKwkvKiBEdW1wIGFsbCBkYXRhIGV4YWN0bHkgYXMgcmVjZWl2ZWQgKi8KKwlpZiAoZHVtcHBpeCA9PSAyKSB7CisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBuIC0gMTsKKwkJaWYgKGZyYW1lLT5ieXRlc19yZWN2ZCA8PSBtYXhfcmF3KQorCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhICsgZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gKG4gLSAxKSwKKwkJCQlpbiwgbiAtIDEpOworCQllbHNlCisJCQlQREVCVUcoMywgIlJhdyBkYXRhIGJ1ZmZlciBvdmVycnVuISEgKCVkKSIsCisJCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gbWF4X3Jhdyk7CisJfSBlbHNlIGlmICghZnJhbWUtPmNvbXByZXNzZWQgJiYgIXJlbW92ZV96ZXJvcykgeworCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gbnVtOworCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkIDw9IG1heF9yYXcpCisJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBudW0sCisJCQkJaW4gKyBvZmZzZXQsIG51bSk7CisJCWVsc2UKKwkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISAoJWQpIiwKKwkJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBtYXhfcmF3KTsKKwl9IGVsc2UgeyAvKiBSZW1vdmUgYWxsLXplcm8gRklGTyBsaW5lcyAoYWxpZ25lZCAzMi1ieXRlIGJsb2NrcykgKi8KKwkJaW50IGIsIHJlYWQgPSAwLCBhbGx6ZXJvLCBjb3BpZWQgPSAwOworCQlpZiAob2Zmc2V0KSB7CisJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gMzIgLSBvZmZzZXQ7CS8vIEJ5dGVzIG91dAorCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhLAlpbiArIG9mZnNldCwgMzIgLSBvZmZzZXQpOworCQkJcmVhZCArPSAzMjsKKwkJfQorCisJCXdoaWxlIChyZWFkIDwgbiAtIDEpIHsKKwkJCWFsbHplcm8gPSAxOworCQkJZm9yIChiID0gMDsgYiA8IDMyOyBiKyspIHsKKwkJCQlpZiAoaW5bcmVhZCArIGJdKSB7CisJCQkJCWFsbHplcm8gPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGx6ZXJvKSB7CisJCQkJLyogRG9uJ3QgY29weSBpdCAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkICsgY29waWVkICsgMzIgPD0gbWF4X3JhdykKKwkJCQl7CisJCQkJCW1lbWNweShmcmFtZS0+cmF3ZGF0YQorCQkJCQkJKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQsCisJCQkJCQlpbiArIHJlYWQsIDMyKTsKKwkJCQkJY29waWVkICs9IDMyOworCQkJCX0gZWxzZSB7CisJCQkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISIpOworCQkJCX0KKwkJCX0KKwkJCXJlYWQgKz0gMzI7CisJCX0KKworCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gY29waWVkOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitvdjUxOF9tb3ZlX2RhdGEoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKK3sKKwlpbnQgbWF4X3JhdyA9IE1BWF9SQVdfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCk7CisJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSA9ICZvdi0+ZnJhbWVbb3YtPmN1cmZyYW1lXTsKKwlzdHJ1Y3QgdGltZXZhbCAqdHM7CisKKwkvKiBEb24ndCBjb3B5IHRoZSBwYWNrZXQgbnVtYmVyIGJ5dGUgKi8KKwlpZiAob3YtPnBhY2tldF9udW1iZXJpbmcpCisJCS0tbjsKKworCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQorCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCisJaWYgKCghKGluWzBdIHwgaW5bMV0gfCBpblsyXSB8IGluWzNdIHwgaW5bNV0pKSAmJiBpbls2XSkgeworCQlpZiAocHJpbnRwaCkgeworCQkJaW5mbygicGg6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMngiLCBpblswXSwKKwkJCSAgICAgaW5bMV0sIGluWzJdLCBpblszXSwgaW5bNF0sIGluWzVdLCBpbls2XSwgaW5bN10pOworCQl9CisKKwkJaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU1RBVEVfTElORVMpIHsKKwkJCVBERUJVRyg0LCAiRGV0ZWN0ZWQgZnJhbWUgZW5kL3N0YXJ0Iik7CisJCQlnb3RvIGVvZjsKKwkJfSBlbHNlIHsgLy9zY2Fuc3RhdGUgPT0gU1RBVEVfU0NBTk5JTkcKKwkJCS8qIEZyYW1lIHN0YXJ0ICovCisJCQlQREVCVUcoNCwgIkZyYW1lIHN0YXJ0LCBmcmFtZW51bSA9ICVkIiwgb3YtPmN1cmZyYW1lKTsKKwkJCWdvdG8gc29mOworCQl9CisJfSBlbHNlIHsKKwkJZ290byBjaGVja19taWRkbGU7CisJfQorCitlb2Y6CisJdHMgPSAoc3RydWN0IHRpbWV2YWwgKikoZnJhbWUtPmRhdGEKKwkgICAgICArIE1BWF9GUkFNRV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCkpOworCWRvX2dldHRpbWVvZmRheSh0cyk7CisKKwlQREVCVUcoNCwgIkZyYW1lIGVuZCwgY3VyZnJhbWUgPSAlZCwgaHc9JWQsIHZ3PSVkLCByZWN2ZD0lZCIsCisJCW92LT5jdXJmcmFtZSwKKwkJKGludCkoaW5bOV0pLCAoaW50KShpblsxMF0pLCBmcmFtZS0+Ynl0ZXNfcmVjdmQpOworCisJLy8gRklYTUU6IFNpbmNlIHdlIGRvbid0IGtub3cgdGhlIGhlYWRlciBmb3JtYXRzIHlldCwKKwkvLyB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyB3aGF0IHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZSBpcworCWZyYW1lLT5yYXd3aWR0aCA9IGZyYW1lLT53aWR0aDsKKwlmcmFtZS0+cmF3aGVpZ2h0ID0gZnJhbWUtPmhlaWdodDsKKworCS8qIFZhbGlkYXRlIHRoZSBoZWFkZXIgZGF0YSAqLworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXd3aWR0aCwgb3YtPm1pbndpZHRoLCBvdi0+bWF4d2lkdGgpOworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXdoZWlnaHQsIG92LT5taW5oZWlnaHQsIG92LT5tYXhoZWlnaHQpOworCisJLyogRG9uJ3QgYWxsb3cgYnl0ZSBjb3VudCB0byBleGNlZWQgYnVmZmVyIHNpemUgKi8KKwlSRVNUUklDVF9UT19SQU5HRShmcmFtZS0+Ynl0ZXNfcmVjdmQsIDgsIG1heF9yYXcpOworCisJaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU1RBVEVfTElORVMpIHsKKyAgICAJCWludCBuZXh0ZjsKKworCQlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfRE9ORTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmcmFtZS0+d3EpOworCisJCS8qIElmIG5leHQgZnJhbWUgaXMgcmVhZHkgb3IgZ3JhYmJpbmcsCisJCSAqIHBvaW50IHRvIGl0ICovCisJCW5leHRmID0gKG92LT5jdXJmcmFtZSArIDEpICUgT1Y1MTFfTlVNRlJBTUVTOworCQlpZiAob3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkKKwkJICAgIHx8IG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKSB7CisJCQlvdi0+Y3VyZnJhbWUgPSBuZXh0ZjsKKwkJCW92LT5mcmFtZVtuZXh0Zl0uc2NhbnN0YXRlID0gU1RBVEVfU0NBTk5JTkc7CisJCQlmcmFtZSA9ICZvdi0+ZnJhbWVbbmV4dGZdOworCQl9IGVsc2UgeworCQkJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkgeworCQkJCVBERUJVRyg0LCAiKiogRnJhbWUgZG9uZSAqKiIpOworCQkJfSBlbHNlIHsKKwkJCQlQREVCVUcoNCwgIkZyYW1lIG5vdCByZWFkeT8gc3RhdGUgPSAlZCIsCisJCQkJICAgICAgIG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlKTsKKwkJCX0KKworCQkJb3YtPmN1cmZyYW1lID0gLTE7CisJCQlQREVCVUcoNCwgIlNPRiBkcm9wcGVkIChubyBhY3RpdmUgZnJhbWUpIik7CisJCQlyZXR1cm47ICAvKiBOb3doZXJlIHRvIHN0b3JlIHRoaXMgZnJhbWUgKi8KKwkJfQorCX0KK3NvZjoKKwlQREVCVUcoNCwgIlN0YXJ0aW5nIGNhcHR1cmUgb24gZnJhbWUgJWQiLCBmcmFtZS0+ZnJhbWVudW0pOworCisvLyBTbmFwc2hvdCBub3QgcmV2ZXJzZS1lbmdpbmVlcmVkIHlldC4KKyNpZiAwCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0J3MgYSBzbmFwc2hvdCBmcmFtZSAqLworCS8qIEZJWE1FPz8gU2hvdWxkIHRoZSBzbmFwc2hvdCByZXNldCBnbyBoZXJlPyBQZXJmb3JtYW5jZT8gKi8KKwlpZiAoaW5bOF0gJiAweDAyKSB7CisJCWZyYW1lLT5zbmFwc2hvdCA9IDE7CisJCVBERUJVRygzLCAic25hcHNob3QgZGV0ZWN0ZWQiKTsKKwl9CisjZW5kaWYKKwlmcmFtZS0+c2NhbnN0YXRlID0gU1RBVEVfTElORVM7CisJZnJhbWUtPmJ5dGVzX3JlY3ZkID0gMDsKKwlmcmFtZS0+Y29tcHJlc3NlZCA9IDE7CisKK2NoZWNrX21pZGRsZToKKwkvKiBBcmUgd2UgaW4gYSBmcmFtZT8gKi8KKwlpZiAoZnJhbWUtPnNjYW5zdGF0ZSAhPSBTVEFURV9MSU5FUykgeworCQlQREVCVUcoNCwgInNjYW5zdGF0ZTogbm8gU09GIHlldCIpOworCQlyZXR1cm47CisJfQorCisJLyogRHVtcCBhbGwgZGF0YSBleGFjdGx5IGFzIHJlY2VpdmVkICovCisJaWYgKGR1bXBwaXggPT0gMikgeworCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgKz0gbjsKKwkJaWYgKGZyYW1lLT5ieXRlc19yZWN2ZCA8PSBtYXhfcmF3KQorCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhICsgZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gbiwgaW4sIG4pOworCQllbHNlCisJCQlQREVCVUcoMywgIlJhdyBkYXRhIGJ1ZmZlciBvdmVycnVuISEgKCVkKSIsCisJCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkIC0gbWF4X3Jhdyk7CisJfSBlbHNlIHsKKwkJLyogQWxsIGluY29taW5nIGRhdGEgYXJlIGRpdmlkZWQgaW50byA4LWJ5dGUgc2VnbWVudHMuIElmIHRoZQorCQkgKiBzZWdtZW50IGNvbnRhaW5zIGFsbCB6ZXJvIGJ5dGVzLCBpdCBtdXN0IGJlIHNraXBwZWQuIFRoZXNlCisJCSAqIHplcm8tc2VnbWVudHMgYWxsb3cgdGhlIE9WNTE4IHRvIG1haW5haW4gYSBjb25zdGFudCBkYXRhIHJhdGUKKwkJICogcmVnYXJkbGVzcyBvZiB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgY29tcHJlc3Npb24uIFNlZ21lbnRzCisJCSAqIGFyZSBhbGlnbmVkIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBpc29jaHJvbm91cworCQkgKiBwYWNrZXQuIFRoZSBmaXJzdCBzZWdtZW50IGluIGVhY2ggaW1hZ2UgaXMgYSBoZWFkZXIgKHRoZQorCQkgKiBkZWNvbXByZXNzb3Igc2tpcHMgaXQgbGF0ZXIpLgorCQkgKi8KKworCQlpbnQgYiwgcmVhZCA9IDAsIGFsbHplcm8sIGNvcGllZCA9IDA7CisKKwkJd2hpbGUgKHJlYWQgPCBuKSB7CisJCQlhbGx6ZXJvID0gMTsKKwkJCWZvciAoYiA9IDA7IGIgPCA4OyBiKyspIHsKKwkJCQlpZiAoaW5bcmVhZCArIGJdKSB7CisJCQkJCWFsbHplcm8gPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGx6ZXJvKSB7CisJCQkvKiBEb24ndCBjb3B5IGl0ICovCisJCQl9IGVsc2UgeworCQkJCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQgKyA4IDw9IG1heF9yYXcpCisJCQkJeworCQkJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEKKwkJCQkJCSsgZnJhbWUtPmJ5dGVzX3JlY3ZkICsgY29waWVkLAorCQkJCQkJaW4gKyByZWFkLCA4KTsKKwkJCQkJY29waWVkICs9IDg7CisJCQkJfSBlbHNlIHsKKwkJCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhIik7CisJCQkJfQorCQkJfQorCQkJcmVhZCArPSA4OworCQl9CisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBjb3BpZWQ7CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdXNiX292NTExICpvdjsKKwlzdHJ1Y3Qgb3Y1MTFfc2J1ZiAqc2J1ZjsKKworCWlmICghdXJiLT5jb250ZXh0KSB7CisJCVBERUJVRyg0LCAibm8gY29udGV4dCIpOworCQlyZXR1cm47CisJfQorCisJc2J1ZiA9IHVyYi0+Y29udGV4dDsKKwlvdiA9IHNidWYtPm92OworCisJaWYgKCFvdiB8fCAhb3YtPmRldiB8fCAhb3YtPnVzZXIpIHsKKwkJUERFQlVHKDQsICJubyBkZXZpY2UsIG9yIG5vdCBvcGVuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW92LT5zdHJlYW1pbmcpIHsKKwkJUERFQlVHKDQsICJobW1tLi4uIG5vdCBzdHJlYW1pbmcsIGJ1dCBnb3QgaW50ZXJydXB0Iik7CisJCXJldHVybjsKKwl9CisKKyAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKyAgICAgICAgICAgICAgICBQREVCVUcoNCwgIlVSQiB1bmxpbmtlZCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJiB1cmItPnN0YXR1cyAhPSAwKSB7CisJCWVycigiRVJST1I6IHVyYi0+c3RhdHVzPSVkOiAlcyIsIHVyYi0+c3RhdHVzLAorCQkgICAgc3ltYm9saWModXJiX2Vycmxpc3QsIHVyYi0+c3RhdHVzKSk7CisJfQorCisJLyogQ29weSB0aGUgZGF0YSByZWNlaXZlZCBpbnRvIG91ciBmcmFtZSBidWZmZXIgKi8KKwlQREVCVUcoNSwgInNidWZbJWRdOiBNb3ZpbmcgJWQgcGFja2V0cyIsIHNidWYtPm4sCisJICAgICAgIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJLyogV2FybmluZzogRG9uJ3QgY2FsbCAqX21vdmVfZGF0YSgpIGlmIG5vIGZyYW1lIGFjdGl2ZSEgKi8KKwkJaWYgKG92LT5jdXJmcmFtZSA+PSAwKSB7CisJCQlpbnQgbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCWludCBzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCQkJdW5zaWduZWQgY2hhciAqY2RhdGE7CisKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CisKKwkJCWNkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCisJCQlpZiAoIW4pIHsKKwkJCQlQREVCVUcoNCwgIlplcm8tbGVuZ3RoIHBhY2tldCIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc3QpCisJCQkJUERFQlVHKDIsICJkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgc3RhdHVzPSVkIiwKKwkJCQkgICAgICAgaSwgbiwgc3QpOworCisJCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCisJCQkJb3Y1MTFfbW92ZV9kYXRhKG92LCBjZGF0YSwgbik7CisJCQllbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJCQlvdjUxOF9tb3ZlX2RhdGEob3YsIGNkYXRhLCBuKTsKKwkJCWVsc2UKKwkJCQllcnIoIlVua25vd24gYnJpZGdlIGRldmljZSAoJWQpIiwgb3YtPmJyaWRnZSk7CisKKwkJfSBlbHNlIGlmICh3YWl0cXVldWVfYWN0aXZlKCZvdi0+d3EpKSB7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT53cSk7CisJCX0KKwl9CisKKwkvKiBSZXN1Ym1pdCB0aGlzIFVSQiAqLworCXVyYi0+ZGV2ID0gb3YtPmRldjsKKwlpZiAoKGkgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKQorCQllcnIoInVzYl9zdWJtaXRfdXJiKCkgcmV0ICVkIiwgaSk7CisKKwlyZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU3RyZWFtIGluaXRpYWxpemF0aW9uIGFuZCB0ZXJtaW5hdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK292NTF4X2luaXRfaXNvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGZ4LCBlcnIsIG4sIHNpemU7CisKKwlQREVCVUcoMywgIioqKiBJbml0aWFsaXppbmcgY2FwdHVyZSAqKioiKTsKKworCW92LT5jdXJmcmFtZSA9IC0xOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExKSB7CisJCWlmIChjYW1zID09IDEpCisJCQlzaXplID0gOTkzOworCQllbHNlIGlmIChjYW1zID09IDIpCisJCQlzaXplID0gNTEzOworCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQorCQkJc2l6ZSA9IDI1NzsKKwkJZWxzZSB7CisJCQllcnIoIlwiY2Ftc1wiIHBhcmFtZXRlciB0b28gaGlnaCEiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7CisJCWlmIChjYW1zID09IDEpCisJCQlzaXplID0gOTYxOworCQllbHNlIGlmIChjYW1zID09IDIpCisJCQlzaXplID0gNTEzOworCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQorCQkJc2l6ZSA9IDI1NzsKKwkJZWxzZSBpZiAoY2FtcyA+PSA1ICYmIGNhbXMgPD0gOCkKKwkJCXNpemUgPSAxMjk7CisJCWVsc2UgaWYgKGNhbXMgPj0gOSAmJiBjYW1zIDw9IDMxKQorCQkJc2l6ZSA9IDMzOworCQllbHNlIHsKKwkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAoY2FtcyA9PSAxKQorCQkJc2l6ZSA9IDg5NjsKKwkJZWxzZSBpZiAoY2FtcyA9PSAyKQorCQkJc2l6ZSA9IDUxMjsKKwkJZWxzZSBpZiAoY2FtcyA9PSAzIHx8IGNhbXMgPT0gNCkKKwkJCXNpemUgPSAyNTY7CisJCWVsc2UgaWYgKGNhbXMgPj0gNSAmJiBjYW1zIDw9IDgpCisJCQlzaXplID0gMTI4OworCQllbHNlIHsKKwkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvLyBGSVhNRTogT1Y1MTggaXMgaGFyZGNvZGVkIHRvIDE1IEZQUyAoYWx0ZXJuYXRlIDUpIGZvciBub3cKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKKwkJaWYgKHBhY2tldHNpemUgPT0gLTEpIHsKKwkJCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgNjQwKTsKKwkJfSBlbHNlIHsKKwkJCWluZm8oIkZvcmNpbmcgcGFja2V0IHNpemUgdG8gJWQiLCBwYWNrZXRzaXplKTsKKwkJCW92NTE4X3NldF9wYWNrZXRfc2l6ZShvdiwgcGFja2V0c2l6ZSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGFja2V0c2l6ZSA9PSAtMSkgeworCQkJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCWluZm8oIkZvcmNpbmcgcGFja2V0IHNpemUgdG8gJWQiLCBwYWNrZXRzaXplKTsKKwkJCW92NTExX3NldF9wYWNrZXRfc2l6ZShvdiwgcGFja2V0c2l6ZSk7CisJCX0KKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgT1Y1MTFfTlVNU0JVRjsgbisrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWVycigiaW5pdCBpc29jOiB1c2JfYWxsb2NfdXJiIHJldC4gTlVMTCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJb3YtPnNidWZbbl0udXJiID0gdXJiOworCQl1cmItPmRldiA9IG92LT5kZXY7CisJCXVyYi0+Y29udGV4dCA9ICZvdi0+c2J1ZltuXTsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKG92LT5kZXYsIE9WNTExX0VORFBPSU5UX0FERFJFU1MpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IG92LT5zYnVmW25dLmRhdGE7CisJCXVyYi0+Y29tcGxldGUgPSBvdjUxeF9pc29jX2lycTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb3YtPnBhY2tldF9zaXplICogRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPmludGVydmFsID0gMTsKKwkJZm9yIChmeCA9IDA7IGZ4IDwgRlJBTUVTX1BFUl9ERVNDOyBmeCsrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2Z4XS5vZmZzZXQgPSBvdi0+cGFja2V0X3NpemUgKiBmeDsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnhdLmxlbmd0aCA9IG92LT5wYWNrZXRfc2l6ZTsKKwkJfQorCX0KKworCW92LT5zdHJlYW1pbmcgPSAxOworCisJZm9yIChuID0gMDsgbiA8IE9WNTExX05VTVNCVUY7IG4rKykgeworCQlvdi0+c2J1ZltuXS51cmItPmRldiA9IG92LT5kZXY7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKG92LT5zYnVmW25dLnVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWVycigiaW5pdCBpc29jOiB1c2Jfc3VibWl0X3VyYiglZCkgcmV0ICVkIiwgbiwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK292NTF4X3VubGlua19pc29jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBuOworCisJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCisJZm9yIChuID0gT1Y1MTFfTlVNU0JVRiAtIDE7IG4gPj0gMDsgbi0tKSB7CisJCWlmIChvdi0+c2J1ZltuXS51cmIpIHsKKwkJCXVzYl9raWxsX3VyYihvdi0+c2J1ZltuXS51cmIpOworCQkJdXNiX2ZyZWVfdXJiKG92LT5zYnVmW25dLnVyYik7CisJCQlvdi0+c2J1ZltuXS51cmIgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfc3RvcF9pc29jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWlmICghb3YtPnN0cmVhbWluZyB8fCAhb3YtPmRldikKKwkJcmV0dXJuOworCisJUERFQlVHKDMsICIqKiogU3RvcHBpbmcgY2FwdHVyZSAqKioiKTsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKwllbHNlCisJCW92NTExX3NldF9wYWNrZXRfc2l6ZShvdiwgMCk7CisKKwlvdi0+c3RyZWFtaW5nID0gMDsKKworCW92NTF4X3VubGlua19pc29jKG92KTsKK30KKworc3RhdGljIGludAorb3Y1MXhfbmV3X2ZyYW1lKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZnJhbWVudW0pCit7CisJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZTsKKwlpbnQgbmV3bnVtOworCisJUERFQlVHKDQsICJvdi0+Y3VyZnJhbWUgPSAlZCwgZnJhbWVudW0gPSAlZCIsIG92LT5jdXJmcmFtZSwgZnJhbWVudW0pOworCisJaWYgKCFvdi0+ZGV2KQorCQlyZXR1cm4gLTE7CisKKwkvKiBJZiB3ZSdyZSBub3QgZ3JhYmJpbmcgYSBmcmFtZSByaWdodCBub3cgYW5kIHRoZSBvdGhlciBmcmFtZSBpcyAqLworCS8qIHJlYWR5IHRvIGJlIGdyYWJiZWQgaW50bywgdGhlbiB1c2UgaXQgaW5zdGVhZCAqLworCWlmIChvdi0+Y3VyZnJhbWUgPT0gLTEpIHsKKwkJbmV3bnVtID0gKGZyYW1lbnVtIC0gMSArIE9WNTExX05VTUZSQU1FUykgJSBPVjUxMV9OVU1GUkFNRVM7CisJCWlmIChvdi0+ZnJhbWVbbmV3bnVtXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkpCisJCQlmcmFtZW51bSA9IG5ld251bTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwlmcmFtZSA9ICZvdi0+ZnJhbWVbZnJhbWVudW1dOworCisJUERFQlVHKDQsICJmcmFtZW51bSA9ICVkLCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZCIsIGZyYW1lbnVtLAorCSAgICAgICBmcmFtZS0+d2lkdGgsIGZyYW1lLT5oZWlnaHQpOworCisJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0dSQUJCSU5HOworCWZyYW1lLT5zY2Fuc3RhdGUgPSBTVEFURV9TQ0FOTklORzsKKwlmcmFtZS0+c25hcHNob3QgPSAwOworCisJb3YtPmN1cmZyYW1lID0gZnJhbWVudW07CisKKwkvKiBNYWtlIHN1cmUgaXQncyBub3QgdG9vIGJpZyAqLworCWlmIChmcmFtZS0+d2lkdGggPiBvdi0+bWF4d2lkdGgpCisJCWZyYW1lLT53aWR0aCA9IG92LT5tYXh3aWR0aDsKKworCWZyYW1lLT53aWR0aCAmPSB+N0w7CQkvKiBNdWx0aXBsZSBvZiA4ICovCisKKwlpZiAoZnJhbWUtPmhlaWdodCA+IG92LT5tYXhoZWlnaHQpCisJCWZyYW1lLT5oZWlnaHQgPSBvdi0+bWF4aGVpZ2h0OworCisJZnJhbWUtPmhlaWdodCAmPSB+M0w7CQkvKiBNdWx0aXBsZSBvZiA0ICovCisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBCdWZmZXIgbWFuYWdlbWVudAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAtIFlvdSBtdXN0IGFjcXVpcmUgYnVmX2xvY2sgYmVmb3JlIGVudGVyaW5nIHRoaXMgZnVuY3Rpb24uCisgKiAtIEJlY2F1c2UgdGhpcyBjb2RlIHdpbGwgZnJlZSBhbnkgbm9uLW51bGwgcG9pbnRlciwgeW91IG11c3QgYmUgc3VyZSB0byBudWxsCisgKiAgIHRoZW0gaWYgeW91IGV4cGxpY2l0bHkgZnJlZSB0aGVtIHNvbWV3aGVyZSBlbHNlIQorICovCitzdGF0aWMgdm9pZAorb3Y1MXhfZG9fZGVhbGxvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgaTsKKwlQREVCVUcoNCwgImVudGVyZWQiKTsKKworCWlmIChvdi0+ZmJ1ZikgeworCQlydmZyZWUob3YtPmZidWYsIE9WNTExX05VTUZSQU1FUworCQkgICAgICAgKiBNQVhfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCkpOworCQlvdi0+ZmJ1ZiA9IE5VTEw7CisJfQorCisJdmZyZWUob3YtPnJhd2ZidWYpOworCW92LT5yYXdmYnVmID0gTlVMTDsKKworCXZmcmVlKG92LT50ZW1wZmJ1Zik7CisJb3YtPnRlbXBmYnVmID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1TQlVGOyBpKyspIHsKKwkJaWYgKG92LT5zYnVmW2ldLmRhdGEpIHsKKwkJCWtmcmVlKG92LT5zYnVmW2ldLmRhdGEpOworCQkJb3YtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKKwkJb3YtPmZyYW1lW2ldLmRhdGEgPSBOVUxMOworCQlvdi0+ZnJhbWVbaV0ucmF3ZGF0YSA9IE5VTEw7CisJCW92LT5mcmFtZVtpXS50ZW1wZGF0YSA9IE5VTEw7CisJCWlmIChvdi0+ZnJhbWVbaV0uY29tcGJ1ZikgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBvdi0+ZnJhbWVbaV0uY29tcGJ1Zik7CisJCQlvdi0+ZnJhbWVbaV0uY29tcGJ1ZiA9IE5VTEw7CisJCX0KKwl9CisKKwlQREVCVUcoNCwgImJ1ZmZlciBtZW1vcnkgZGVhbGxvY2F0ZWQiKTsKKwlvdi0+YnVmX3N0YXRlID0gQlVGX05PVF9BTExPQ0FURUQ7CisJUERFQlVHKDQsICJsZWF2aW5nIik7Cit9CisKK3N0YXRpYyBpbnQKK292NTF4X2FsbG9jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBpOworCWNvbnN0IGludCB3ID0gb3YtPm1heHdpZHRoOworCWNvbnN0IGludCBoID0gb3YtPm1heGhlaWdodDsKKwljb25zdCBpbnQgZGF0YV9idWZzaXplID0gT1Y1MTFfTlVNRlJBTUVTICogTUFYX0RBVEFfU0laRSh3LCBoKTsKKwljb25zdCBpbnQgcmF3X2J1ZnNpemUgPSBPVjUxMV9OVU1GUkFNRVMgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKKworCVBERUJVRyg0LCAiZW50ZXJlZCIpOworCWRvd24oJm92LT5idWZfbG9jayk7CisKKwlpZiAob3YtPmJ1Zl9zdGF0ZSA9PSBCVUZfQUxMT0NBVEVEKQorCQlnb3RvIG91dDsKKworCW92LT5mYnVmID0gcnZtYWxsb2MoZGF0YV9idWZzaXplKTsKKwlpZiAoIW92LT5mYnVmKQorCQlnb3RvIGVycm9yOworCisJb3YtPnJhd2ZidWYgPSB2bWFsbG9jKHJhd19idWZzaXplKTsKKwlpZiAoIW92LT5yYXdmYnVmKQorCQlnb3RvIGVycm9yOworCisJbWVtc2V0KG92LT5yYXdmYnVmLCAwLCByYXdfYnVmc2l6ZSk7CisKKwlvdi0+dGVtcGZidWYgPSB2bWFsbG9jKHJhd19idWZzaXplKTsKKwlpZiAoIW92LT50ZW1wZmJ1ZikKKwkJZ290byBlcnJvcjsKKworCW1lbXNldChvdi0+dGVtcGZidWYsIDAsIHJhd19idWZzaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1TQlVGOyBpKyspIHsKKwkJb3YtPnNidWZbaV0uZGF0YSA9IGttYWxsb2MoRlJBTUVTX1BFUl9ERVNDICoKKwkJCU1BWF9GUkFNRV9TSVpFX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvdi0+c2J1ZltpXS5kYXRhKQorCQkJZ290byBlcnJvcjsKKworCQlQREVCVUcoNCwgInNidWZbJWRdIEAgJXAiLCBpLCBvdi0+c2J1ZltpXS5kYXRhKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKKwkJb3YtPmZyYW1lW2ldLmRhdGEgPSBvdi0+ZmJ1ZiArIGkgKiBNQVhfREFUQV9TSVpFKHcsIGgpOworCQlvdi0+ZnJhbWVbaV0ucmF3ZGF0YSA9IG92LT5yYXdmYnVmCisJCSArIGkgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKKwkJb3YtPmZyYW1lW2ldLnRlbXBkYXRhID0gb3YtPnRlbXBmYnVmCisJCSArIGkgKiBNQVhfUkFXX0RBVEFfU0laRSh3LCBoKTsKKworCQlvdi0+ZnJhbWVbaV0uY29tcGJ1ZiA9CisJCSAodW5zaWduZWQgY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghb3YtPmZyYW1lW2ldLmNvbXBidWYpCisJCQlnb3RvIGVycm9yOworCisJCVBERUJVRyg0LCAiZnJhbWVbJWRdIEAgJXAiLCBpLCBvdi0+ZnJhbWVbaV0uZGF0YSk7CisJfQorCisJb3YtPmJ1Zl9zdGF0ZSA9IEJVRl9BTExPQ0FURUQ7CitvdXQ6CisJdXAoJm92LT5idWZfbG9jayk7CisJUERFQlVHKDQsICJsZWF2aW5nIik7CisJcmV0dXJuIDA7CitlcnJvcjoKKwlvdjUxeF9kb19kZWFsbG9jKG92KTsKKwl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwlQREVCVUcoNCwgImVycm9yZWQiKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQKK292NTF4X2RlYWxsb2Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJUERFQlVHKDQsICJlbnRlcmVkIik7CisJZG93bigmb3YtPmJ1Zl9sb2NrKTsKKwlvdjUxeF9kb19kZWFsbG9jKG92KTsKKwl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwlQREVCVUcoNCwgImxlYXZpbmciKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBWNEwgMSBBUEkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitvdjUxeF92NGwxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlpbnQgZXJyLCBpOworCisJUERFQlVHKDQsICJvcGVuaW5nIik7CisKKwlkb3duKCZvdi0+bG9jayk7CisKKwllcnIgPSAtRUJVU1k7CisJaWYgKG92LT51c2VyKQorCQlnb3RvIG91dDsKKworCW92LT5zdWJfZmxhZyA9IDA7CisKKwkvKiBJbiBjYXNlIGFwcCBkb2Vzbid0IHNldCB0aGVtLi4uICovCisJZXJyID0gb3Y1MXhfc2V0X2RlZmF1bHRfcGFyYW1zKG92KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBNYWtlIHN1cmUgZnJhbWVzIGFyZSByZXNldCAqLworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQlvdi0+ZnJhbWVbaV0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCQlvdi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7CisJfQorCisJLyogSWYgY29tcHJlc3Npb24gaXMgb24sIG1ha2Ugc3VyZSBub3cgdGhhdCBhCisJICogZGVjb21wcmVzc29yIGNhbiBiZSBsb2FkZWQgKi8KKwlpZiAob3YtPmNvbXByZXNzICYmICFvdi0+ZGVjb21wX29wcykgeworCQllcnIgPSByZXF1ZXN0X2RlY29tcHJlc3Nvcihvdik7CisJCWlmIChlcnIgJiYgIWR1bXBwaXgpCisJCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBvdjUxeF9hbGxvYyhvdik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gb3Y1MXhfaW5pdF9pc29jKG92KTsKKwlpZiAoZXJyKSB7CisJCW92NTF4X2RlYWxsb2Mob3YpOworCQlnb3RvIG91dDsKKwl9CisKKwlvdi0+dXNlcisrOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZkZXY7CisKKwlpZiAob3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAxKTsKKworb3V0OgorCXVwKCZvdi0+bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorb3Y1MXhfdjRsMV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisKKwlQREVCVUcoNCwgIm92NTExX2Nsb3NlIik7CisKKwlkb3duKCZvdi0+bG9jayk7CisKKwlvdi0+dXNlci0tOworCW92NTF4X3N0b3BfaXNvYyhvdik7CisKKwlyZWxlYXNlX2RlY29tcHJlc3Nvcihvdik7CisKKwlpZiAob3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKKworCWlmIChvdi0+ZGV2KQorCQlvdjUxeF9kZWFsbG9jKG92KTsKKworCXVwKCZvdi0+bG9jayk7CisKKwkvKiBEZXZpY2UgdW5wbHVnZ2VkIHdoaWxlIG9wZW4uIE9ubHkgYSBtaW5pbXVtIG9mIHVucmVnaXN0cmF0aW9uIGlzIGRvbmUKKwkgKiBoZXJlOyB0aGUgZGlzY29ubmVjdCBjYWxsYmFjayBhbHJlYWR5IGRpZCB0aGUgcmVzdC4gKi8KKwlpZiAoIW92LT5kZXYpIHsKKwkJZG93bigmb3YtPmNidWZfbG9jayk7CisJCWtmcmVlKG92LT5jYnVmKTsKKwkJb3YtPmNidWYgPSBOVUxMOworCQl1cCgmb3YtPmNidWZfbG9jayk7CisKKwkJb3Y1MXhfZGVhbGxvYyhvdik7CisJCWtmcmVlKG92KTsKKwkJb3YgPSBOVUxMOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhICovCitzdGF0aWMgaW50CitvdjUxeF92NGwxX2lvY3RsX2ludGVybmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCVBERUJVRyg1LCAiSU9DdGw6IDB4JVgiLCBjbWQpOworCisJaWYgKCFvdi0+ZGV2KQorCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NHQ0FQOgorCXsKKwkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7CisKKwkJUERFQlVHKDQsICJWSURJT0NHQ0FQIik7CisKKwkJbWVtc2V0KGIsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkpOworCQlzcHJpbnRmKGItPm5hbWUsICIlcyBVU0IgQ2FtZXJhIiwKKwkJCXN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKKwkJYi0+dHlwZSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9TVUJDQVBUVVJFOworCQliLT5jaGFubmVscyA9IG92LT5udW1faW5wdXRzOworCQliLT5hdWRpb3MgPSAwOworCQliLT5tYXh3aWR0aCA9IG92LT5tYXh3aWR0aDsKKwkJYi0+bWF4aGVpZ2h0ID0gb3YtPm1heGhlaWdodDsKKwkJYi0+bWlud2lkdGggPSBvdi0+bWlud2lkdGg7CisJCWItPm1pbmhlaWdodCA9IG92LT5taW5oZWlnaHQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR0NIQU46CisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dDSEFOIik7CisKKwkJaWYgKCh1bnNpZ25lZCkodi0+Y2hhbm5lbCkgPj0gb3YtPm51bV9pbnB1dHMpIHsKKwkJCWVycigiSW52YWxpZCBjaGFubmVsICglZCkiLCB2LT5jaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdi0+bm9ybSA9IG92LT5ub3JtOworCQl2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCXYtPmZsYWdzID0gMDsKKy8vCQl2LT5mbGFncyB8PSAob3YtPmhhc19kZWNvZGVyKSA/IFZJREVPX1ZDX05PUk0gOiAwOworCQl2LT50dW5lcnMgPSAwOworCQlkZWNvZGVyX2dldF9pbnB1dF9uYW1lKG92LCB2LT5jaGFubmVsLCB2LT5uYW1lKTsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCQlpbnQgZXJyOworCisJCVBERUJVRyg0LCAiVklESU9DU0NIQU4iKTsKKworCQkvKiBNYWtlIHN1cmUgaXQncyBub3QgYSBjYW1lcmEgKi8KKwkJaWYgKCFvdi0+aGFzX2RlY29kZXIpIHsKKwkJCWlmICh2LT5jaGFubmVsID09IDApCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAodi0+bm9ybSAhPSBWSURFT19NT0RFX1BBTCAmJgorCQkgICAgdi0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MgJiYKKwkJICAgIHYtPm5vcm0gIT0gVklERU9fTU9ERV9TRUNBTSAmJgorCQkgICAgdi0+bm9ybSAhPSBWSURFT19NT0RFX0FVVE8pIHsKKwkJCWVycigiSW52YWxpZCBub3JtICglZCkiLCB2LT5ub3JtKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCh1bnNpZ25lZCkodi0+Y2hhbm5lbCkgPj0gb3YtPm51bV9pbnB1dHMpIHsKKwkJCWVycigiSW52YWxpZCBjaGFubmVsICglZCkiLCB2LT5jaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZXJyID0gZGVjb2Rlcl9zZXRfaW5wdXQob3YsIHYtPmNoYW5uZWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBkZWNvZGVyX3NldF9ub3JtKG92LCB2LT5ub3JtKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR1BJQ1Q6CisJeworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dQSUNUIik7CisKKwkJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpOworCQlpZiAoc2Vuc29yX2dldF9waWN0dXJlKG92LCBwKSkKKwkJCXJldHVybiAtRUlPOworCisJCS8qIENhbiB3ZSBnZXQgdGhlc2UgZnJvbSBmcmFtZVswXT8gLWNsYXVkaW8/ICovCisJCXAtPmRlcHRoID0gb3YtPmZyYW1lWzBdLmRlcHRoOworCQlwLT5wYWxldHRlID0gb3YtPmZyYW1lWzBdLmZvcm1hdDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTUElDVDoKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCQlpbnQgaSwgcmM7CisKKwkJUERFQlVHKDQsICJWSURJT0NTUElDVCIpOworCisJCWlmICghZ2V0X2RlcHRoKHAtPnBhbGV0dGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHNlbnNvcl9zZXRfcGljdHVyZShvdiwgcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoZm9yY2VfcGFsZXR0ZSAmJiBwLT5wYWxldHRlICE9IGZvcmNlX3BhbGV0dGUpIHsKKwkJCWluZm8oIlBhbGV0dGUgcmVqZWN0ZWQgKCVzKSIsCisJCQkgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHAtPnBhbGV0dGUpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLy8gRklYTUU6IEZvcm1hdCBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgZnJhbWVzCisJCWlmIChwLT5wYWxldHRlICE9IG92LT5mcmFtZVswXS5mb3JtYXQpIHsKKwkJCVBERUJVRyg0LCAiRGV0ZWN0ZWQgZm9ybWF0IGNoYW5nZSIpOworCisJCQlyYyA9IG92NTF4X3dhaXRfZnJhbWVzX2luYWN0aXZlKG92KTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisKKwkJCW1vZGVfaW5pdF9yZWdzKG92LCBvdi0+ZnJhbWVbMF0ud2lkdGgsCisJCQkJb3YtPmZyYW1lWzBdLmhlaWdodCwgcC0+cGFsZXR0ZSwgb3YtPnN1Yl9mbGFnKTsKKwkJfQorCisJCVBERUJVRyg0LCAiU2V0dGluZyBkZXB0aD0lZCwgcGFsZXR0ZT0lcyIsCisJCSAgICAgICBwLT5kZXB0aCwgc3ltYm9saWModjRsMV9wbGlzdCwgcC0+cGFsZXR0ZSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQkJb3YtPmZyYW1lW2ldLmRlcHRoID0gcC0+ZGVwdGg7CisJCQlvdi0+ZnJhbWVbaV0uZm9ybWF0ID0gcC0+cGFsZXR0ZTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dDQVBUVVJFOgorCXsKKwkJaW50ICp2ZiA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dDQVBUVVJFIik7CisKKwkJb3YtPnN1Yl9mbGFnID0gKnZmOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19jYXB0dXJlICp2YyA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ1NDQVBUVVJFIik7CisKKwkJaWYgKHZjLT5mbGFncykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodmMtPmRlY2ltYXRpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2Yy0+eCAmPSB+M0w7CisJCXZjLT55ICY9IH4xTDsKKwkJdmMtPnkgJj0gfjMxTDsKKworCQlpZiAodmMtPndpZHRoID09IDApCisJCQl2Yy0+d2lkdGggPSAzMjsKKworCQl2Yy0+aGVpZ2h0IC89IDE2OworCQl2Yy0+aGVpZ2h0ICo9IDE2OworCQlpZiAodmMtPmhlaWdodCA9PSAwKQorCQkJdmMtPmhlaWdodCA9IDE2OworCisJCW92LT5zdWJ4ID0gdmMtPng7CisJCW92LT5zdWJ5ID0gdmMtPnk7CisJCW92LT5zdWJ3ID0gdmMtPndpZHRoOworCQlvdi0+c3ViaCA9IHZjLT5oZWlnaHQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCQlpbnQgaSwgcmM7CisKKwkJUERFQlVHKDQsICJWSURJT0NTV0lOOiAlZHglZCIsIHZ3LT53aWR0aCwgdnctPmhlaWdodCk7CisKKyNpZiAwCisJCWlmICh2dy0+ZmxhZ3MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZ3LT5jbGlwY291bnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZ3LT5oZWlnaHQgIT0gb3YtPm1heGhlaWdodCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodnctPndpZHRoICE9IG92LT5tYXh3aWR0aCkKKwkJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisKKwkJcmMgPSBvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShvdik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKworCQlyYyA9IG1vZGVfaW5pdF9yZWdzKG92LCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQsCisJCQlvdi0+ZnJhbWVbMF0uZm9ybWF0LCBvdi0+c3ViX2ZsYWcpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQkJb3YtPmZyYW1lW2ldLndpZHRoID0gdnctPndpZHRoOworCQkJb3YtPmZyYW1lW2ldLmhlaWdodCA9IHZ3LT5oZWlnaHQ7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHV0lOOgorCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJbWVtc2V0KHZ3LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpOworCQl2dy0+eCA9IDA7CQkvKiBGSVhNRSAqLworCQl2dy0+eSA9IDA7CisJCXZ3LT53aWR0aCA9IG92LT5mcmFtZVswXS53aWR0aDsKKwkJdnctPmhlaWdodCA9IG92LT5mcmFtZVswXS5oZWlnaHQ7CisJCXZ3LT5mbGFncyA9IDMwOworCisJCVBERUJVRyg0LCAiVklESU9DR1dJTjogJWR4JWQiLCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dNQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOworCQlpbnQgaTsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dNQlVGIik7CisKKwkJbWVtc2V0KHZtLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX21idWYpKTsKKwkJdm0tPnNpemUgPSBPVjUxMV9OVU1GUkFNRVMKKwkJCSAgICogTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpOworCQl2bS0+ZnJhbWVzID0gT1Y1MTFfTlVNRlJBTUVTOworCisJCXZtLT5vZmZzZXRzWzBdID0gMDsKKwkJZm9yIChpID0gMTsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCQl2bS0+b2Zmc2V0c1tpXSA9IHZtLT5vZmZzZXRzW2ktMV0KKwkJCSAgICsgTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DTUNBUFRVUkU6CisJeworCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0gPSBhcmc7CisJCWludCByYywgZGVwdGg7CisJCXVuc2lnbmVkIGludCBmID0gdm0tPmZyYW1lOworCisJCVBERUJVRyg0LCAiVklESU9DTUNBUFRVUkU6IGZyYW1lOiAlZCwgJWR4JWQsICVzIiwgZiwgdm0tPndpZHRoLAorCQkJdm0tPmhlaWdodCwgc3ltYm9saWModjRsMV9wbGlzdCwgdm0tPmZvcm1hdCkpOworCisJCWRlcHRoID0gZ2V0X2RlcHRoKHZtLT5mb3JtYXQpOworCQlpZiAoIWRlcHRoKSB7CisJCQlQREVCVUcoMiwgIlZJRElPQ01DQVBUVVJFOiBpbnZhbGlkIGZvcm1hdCAoJXMpIiwKKwkJCSAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCB2bS0+Zm9ybWF0KSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChmID49IE9WNTExX05VTUZSQU1FUykgeworCQkJZXJyKCJWSURJT0NNQ0FQVFVSRTogaW52YWxpZCBmcmFtZSAoJWQpIiwgZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICh2bS0+d2lkdGggPiBvdi0+bWF4d2lkdGgKKwkJICAgIHx8IHZtLT5oZWlnaHQgPiBvdi0+bWF4aGVpZ2h0KSB7CisJCQllcnIoIlZJRElPQ01DQVBUVVJFOiByZXF1ZXN0ZWQgZGltZW5zaW9ucyB0b28gYmlnIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChvdi0+ZnJhbWVbZl0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKSB7CisJCQlQREVCVUcoNCwgIlZJRElPQ01DQVBUVVJFOiBhbHJlYWR5IGdyYWJiaW5nIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJaWYgKGZvcmNlX3BhbGV0dGUgJiYgKHZtLT5mb3JtYXQgIT0gZm9yY2VfcGFsZXR0ZSkpIHsKKwkJCVBERUJVRygyLCAicGFsZXR0ZSByZWplY3RlZCAoJXMpIiwKKwkJCSAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCB2bS0+Zm9ybWF0KSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICgob3YtPmZyYW1lW2ZdLndpZHRoICE9IHZtLT53aWR0aCkgfHwKKwkJICAgIChvdi0+ZnJhbWVbZl0uaGVpZ2h0ICE9IHZtLT5oZWlnaHQpIHx8CisJCSAgICAob3YtPmZyYW1lW2ZdLmZvcm1hdCAhPSB2bS0+Zm9ybWF0KSB8fAorCQkgICAgKG92LT5mcmFtZVtmXS5zdWJfZmxhZyAhPSBvdi0+c3ViX2ZsYWcpIHx8CisJCSAgICAob3YtPmZyYW1lW2ZdLmRlcHRoICE9IGRlcHRoKSkgeworCQkJUERFQlVHKDQsICJWSURJT0NNQ0FQVFVSRTogY2hhbmdlIGluIGltYWdlIHBhcmFtZXRlcnMiKTsKKworCQkJcmMgPSBvdjUxeF93YWl0X2ZyYW1lc19pbmFjdGl2ZShvdik7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCisJCQlyYyA9IG1vZGVfaW5pdF9yZWdzKG92LCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQsCisJCQkJdm0tPmZvcm1hdCwgb3YtPnN1Yl9mbGFnKTsKKyNpZiAwCisJCQlpZiAocmMgPCAwKSB7CisJCQkJUERFQlVHKDEsICJHb3QgZXJyb3Igd2hpbGUgaW5pdGlhbGl6aW5nIHJlZ3MgIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKyNlbmRpZgorCQkJb3YtPmZyYW1lW2ZdLndpZHRoID0gdm0tPndpZHRoOworCQkJb3YtPmZyYW1lW2ZdLmhlaWdodCA9IHZtLT5oZWlnaHQ7CisJCQlvdi0+ZnJhbWVbZl0uZm9ybWF0ID0gdm0tPmZvcm1hdDsKKwkJCW92LT5mcmFtZVtmXS5zdWJfZmxhZyA9IG92LT5zdWJfZmxhZzsKKwkJCW92LT5mcmFtZVtmXS5kZXB0aCA9IGRlcHRoOworCQl9CisKKwkJLyogTWFyayBpdCBhcyByZWFkeSAqLworCQlvdi0+ZnJhbWVbZl0uZ3JhYnN0YXRlID0gRlJBTUVfUkVBRFk7CisKKwkJUERFQlVHKDQsICJWSURJT0NNQ0FQVFVSRTogcmVuZXdpbmcgZnJhbWUgJWQiLCBmKTsKKworCQlyZXR1cm4gb3Y1MXhfbmV3X2ZyYW1lKG92LCBmKTsKKwl9CisJY2FzZSBWSURJT0NTWU5DOgorCXsKKwkJdW5zaWduZWQgaW50IGZudW0gPSAqKCh1bnNpZ25lZCBpbnQgKikgYXJnKTsKKwkJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZTsKKwkJaW50IHJjOworCisJCWlmIChmbnVtID49IE9WNTExX05VTUZSQU1FUykgeworCQkJZXJyKCJWSURJT0NTWU5DOiBpbnZhbGlkIGZyYW1lICglZCkiLCBmbnVtKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZnJhbWUgPSAmb3YtPmZyYW1lW2ZudW1dOworCisJCVBERUJVRyg0LCAic3luY2luZyB0byBmcmFtZSAlZCwgZ3JhYnN0YXRlID0gJWQiLCBmbnVtLAorCQkgICAgICAgZnJhbWUtPmdyYWJzdGF0ZSk7CisKKwkJc3dpdGNoIChmcmFtZS0+Z3JhYnN0YXRlKSB7CisJCWNhc2UgRlJBTUVfVU5VU0VEOgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgRlJBTUVfUkVBRFk6CisJCWNhc2UgRlJBTUVfR1JBQkJJTkc6CisJCWNhc2UgRlJBTUVfRVJST1I6CityZWRvOgorCQkJaWYgKCFvdi0+ZGV2KQorCQkJCXJldHVybiAtRUlPOworCisJCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmcmFtZS0+d3EsCisJCQkgICAgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkKKwkJCSAgICB8fCAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9FUlJPUikpOworCisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCisJCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9FUlJPUikgeworCQkJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZudW0pKSA8IDApCisJCQkJCXJldHVybiByYzsKKwkJCQlnb3RvIHJlZG87CisJCQl9CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBGUkFNRV9ET05FOgorCQkJaWYgKG92LT5zbmFwX2VuYWJsZWQgJiYgIWZyYW1lLT5zbmFwc2hvdCkgeworCQkJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZudW0pKSA8IDApCisJCQkJCXJldHVybiByYzsKKwkJCQlnb3RvIHJlZG87CisJCQl9CisKKwkJCWZyYW1lLT5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7CisKKwkJCS8qIFJlc2V0IHRoZSBoYXJkd2FyZSBzbmFwc2hvdCBidXR0b24gKi8KKwkJCS8qIEZJWE1FIC0gSXMgdGhpcyB0aGUgYmVzdCBwbGFjZSBmb3IgdGhpcz8gKi8KKwkJCWlmICgob3YtPnNuYXBfZW5hYmxlZCkgJiYgKGZyYW1lLT5zbmFwc2hvdCkpIHsKKwkJCQlmcmFtZS0+c25hcHNob3QgPSAwOworCQkJCW92NTF4X2NsZWFyX3NuYXBzaG90KG92KTsKKwkJCX0KKworCQkJLyogRGVjb21wcmVzc2lvbiwgZm9ybWF0IGNvbnZlcnNpb24sIGV0Yy4uLiAqLworCQkJb3Y1MXhfcG9zdHByb2Nlc3Mob3YsIGZyYW1lKTsKKworCQkJYnJlYWs7CisJCX0gLyogZW5kIHN3aXRjaCAqLworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dGQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmIgPSBhcmc7CisKKwkJUERFQlVHKDQsICJWSURJT0NHRkJVRiIpOworCisJCW1lbXNldCh2YiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19idWZmZXIpKTsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHVU5JVDoKKwl7CisJCXN0cnVjdCB2aWRlb191bml0ICp2dSA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dVTklUIik7CisKKwkJbWVtc2V0KHZ1LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3VuaXQpKTsKKworCQl2dS0+dmlkZW8gPSBvdi0+dmRldi0+bWlub3I7CisJCXZ1LT52YmkgPSBWSURFT19OT19VTklUOworCQl2dS0+cmFkaW8gPSBWSURFT19OT19VTklUOworCQl2dS0+YXVkaW8gPSBWSURFT19OT19VTklUOworCQl2dS0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOworCisJCXJldHVybiAwOworCX0KKwljYXNlIE9WNTExSU9DX1dJMkM6CisJeworCQlzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCAqdyA9IGFyZzsKKworCQlyZXR1cm4gaTJjX3dfc2xhdmUob3YsIHctPnNsYXZlLCB3LT5yZWcsIHctPnZhbHVlLCB3LT5tYXNrKTsKKwl9CisJY2FzZSBPVjUxMUlPQ19SSTJDOgorCXsKKwkJc3RydWN0IG92NTExX2kyY19zdHJ1Y3QgKnIgPSBhcmc7CisJCWludCByYzsKKworCQlyYyA9IGkyY19yX3NsYXZlKG92LCByLT5zbGF2ZSwgci0+cmVnKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlyLT52YWx1ZSA9IHJjOworCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJUERFQlVHKDMsICJVbnN1cHBvcnRlZCBJT0N0bDogMHglWCIsIGNtZCk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfSAvKiBlbmQgc3dpdGNoICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb3Y1MXhfdjRsMV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlpbnQgcmM7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlyYyA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgb3Y1MXhfdjRsMV9pb2N0bF9pbnRlcm5hbCk7CisKKwl1cCgmb3YtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3QKK292NTF4X3Y0bDFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0s7CisJdW5zaWduZWQgbG9uZyBjb3VudCA9IGNudDsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWludCBpLCByYyA9IDAsIGZybXggPSAtMTsKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmb3YtPmxvY2spKQorCQlyZXR1cm4gLUVJTlRSOworCisJUERFQlVHKDQsICIlbGQgYnl0ZXMsIG5vYmxvY2s9JWQiLCBjb3VudCwgbm9ibG9jayk7CisKKwlpZiAoIXZkZXYgfHwgIWJ1ZikgeworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCFvdi0+ZGV2KSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKy8vIEZJWE1FOiBPbmx5IHN1cHBvcnRzIHR3byBmcmFtZXMKKwkvKiBTZWUgaWYgYSBmcmFtZSBpcyBjb21wbGV0ZWQsIHRoZW4gdXNlIGl0LiAqLworCWlmIChvdi0+ZnJhbWVbMF0uZ3JhYnN0YXRlID49IEZSQU1FX0RPTkUpCS8qIF9ET05FIG9yIF9FUlJPUiAqLworCQlmcm14ID0gMDsKKwllbHNlIGlmIChvdi0+ZnJhbWVbMV0uZ3JhYnN0YXRlID49IEZSQU1FX0RPTkUpLyogX0RPTkUgb3IgX0VSUk9SICovCisJCWZybXggPSAxOworCisJLyogSWYgbm9uYmxvY2tpbmcgd2UgcmV0dXJuIGltbWVkaWF0ZWx5ICovCisJaWYgKG5vYmxvY2sgJiYgKGZybXggPT0gLTEpKSB7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBJZiBubyBGUkFNRV9ET05FLCBsb29rIGZvciBhIEZSQU1FX0dSQUJCSU5HIHN0YXRlLiAqLworCS8qIFNlZSBpZiBhIGZyYW1lIGlzIGluIHByb2Nlc3MgKGdyYWJiaW5nKSwgdGhlbiB1c2UgaXQuICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJaWYgKG92LT5mcmFtZVswXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpCisJCQlmcm14ID0gMDsKKwkJZWxzZSBpZiAob3YtPmZyYW1lWzFdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykKKwkJCWZybXggPSAxOworCX0KKworCS8qIElmIG5vIGZyYW1lIGlzIGFjdGl2ZSwgc3RhcnQgb25lLiAqLworCWlmIChmcm14ID09IC0xKSB7CisJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZybXggPSAwKSkpIHsKKwkJCWVycigicmVhZDogb3Y1MXhfbmV3X2ZyYW1lIGVycm9yIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJZnJhbWUgPSAmb3YtPmZyYW1lW2ZybXhdOworCityZXN0YXJ0OgorCWlmICghb3YtPmRldikgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogV2FpdCB3aGlsZSB3ZSdyZSBncmFiYmluZyB0aGUgaW1hZ2UgKi8KKwlQREVCVUcoNCwgIldhaXRpbmcgaW1hZ2UgZ3JhYmJpbmciKTsKKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmcmFtZS0+d3EsCisJCShmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0RPTkUpCisJCXx8IChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0VSUk9SKSk7CisKKwlpZiAocmMpCisJCWdvdG8gZXJyb3I7CisKKwlQREVCVUcoNCwgIkdvdCBpbWFnZSwgZnJhbWUtPmdyYWJzdGF0ZSA9ICVkIiwgZnJhbWUtPmdyYWJzdGF0ZSk7CisJUERFQlVHKDQsICJieXRlc19yZWN2ZCA9ICVkIiwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKworCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0VSUk9SKSB7CisJCWZyYW1lLT5ieXRlc19yZWFkID0gMDsKKwkJZXJyKCIqKiBpY2shICoqIEVycm9yZWQgZnJhbWUgJWQiLCBvdi0+Y3VyZnJhbWUpOworCQlpZiAob3Y1MXhfbmV3X2ZyYW1lKG92LCBmcm14KSkgeworCQkJZXJyKCJyZWFkOiBvdjUxeF9uZXdfZnJhbWUgZXJyb3IiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0KKworCisJLyogUmVwZWF0IHVudGlsIHdlIGdldCBhIHNuYXBzaG90IGZyYW1lICovCisJaWYgKG92LT5zbmFwX2VuYWJsZWQpCisJCVBERUJVRyg0LCAiV2FpdGluZyBzbmFwc2hvdCBmcmFtZSIpOworCWlmIChvdi0+c25hcF9lbmFibGVkICYmICFmcmFtZS0+c25hcHNob3QpIHsKKwkJZnJhbWUtPmJ5dGVzX3JlYWQgPSAwOworCQlpZiAoKHJjID0gb3Y1MXhfbmV3X2ZyYW1lKG92LCBmcm14KSkpIHsKKwkJCWVycigicmVhZDogb3Y1MXhfbmV3X2ZyYW1lIGVycm9yIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiBDbGVhciB0aGUgc25hcHNob3QgKi8KKwlpZiAob3YtPnNuYXBfZW5hYmxlZCAmJiBmcmFtZS0+c25hcHNob3QpIHsKKwkJZnJhbWUtPnNuYXBzaG90ID0gMDsKKwkJb3Y1MXhfY2xlYXJfc25hcHNob3Qob3YpOworCX0KKworCS8qIERlY29tcHJlc3Npb24sIGZvcm1hdCBjb252ZXJzaW9uLCBldGMuLi4gKi8KKwlvdjUxeF9wb3N0cHJvY2VzcyhvdiwgZnJhbWUpOworCisJUERFQlVHKDQsICJmcm14PSVkLCBieXRlc19yZWFkPSVsZCwgbGVuZ3RoPSVsZCIsIGZybXgsCisJCWZyYW1lLT5ieXRlc19yZWFkLAorCQlnZXRfZnJhbWVfbGVuZ3RoKGZyYW1lKSk7CisKKwkvKiBjb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2U7IHdlIGFsbG93IGZvciBwYXJ0aWFscyByZWFkcyAqLworLy8JaWYgKChjb3VudCArIGZyYW1lLT5ieXRlc19yZWFkKQorLy8JICAgID4gZ2V0X2ZyYW1lX2xlbmd0aCgoc3RydWN0IG92NTExX2ZyYW1lICopZnJhbWUpKQorLy8JCWNvdW50ID0gZnJhbWUtPnNjYW5sZW5ndGggLSBmcmFtZS0+Ynl0ZXNfcmVhZDsKKworCS8qIEZJWE1FIC0gY291bnQgaGFyZHdpcmVkIHRvIGJlIG9uZSBmcmFtZS4uLiAqLworCWNvdW50ID0gZ2V0X2ZyYW1lX2xlbmd0aChmcmFtZSk7CisKKwlQREVCVUcoNCwgIkNvcHkgdG8gdXNlciBzcGFjZTogJWxkIGJ5dGVzIiwgY291bnQpOworCWlmICgoaSA9IGNvcHlfdG9fdXNlcihidWYsIGZyYW1lLT5kYXRhICsgZnJhbWUtPmJ5dGVzX3JlYWQsIGNvdW50KSkpIHsKKwkJUERFQlVHKDQsICJDb3B5IGZhaWxlZCEgJWQgYnl0ZXMgbm90IGNvcGllZCIsIGkpOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZnJhbWUtPmJ5dGVzX3JlYWQgKz0gY291bnQ7CisJUERFQlVHKDQsICJ7Y29weX0gY291bnQgdXNlZD0lbGQsIG5ldyBieXRlc19yZWFkPSVsZCIsCisJCWNvdW50LCBmcmFtZS0+Ynl0ZXNfcmVhZCk7CisKKwkvKiBJZiBhbGwgZGF0YSBoYXZlIGJlZW4gcmVhZC4uLiAqLworCWlmIChmcmFtZS0+Ynl0ZXNfcmVhZAorCSAgICA+PSBnZXRfZnJhbWVfbGVuZ3RoKGZyYW1lKSkgeworCQlmcmFtZS0+Ynl0ZXNfcmVhZCA9IDA7CisKKy8vIEZJWE1FOiBPbmx5IHN1cHBvcnRzIHR3byBmcmFtZXMKKwkJLyogTWFyayBpdCBhcyBhdmFpbGFibGUgdG8gYmUgdXNlZCBhZ2Fpbi4gKi8KKwkJb3YtPmZyYW1lW2ZybXhdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwkJaWYgKChyYyA9IG92NTF4X25ld19mcmFtZShvdiwgIWZybXgpKSkgeworCQkJZXJyKCJvdjUxeF9uZXdfZnJhbWUgcmV0dXJuZWQgZXJyb3IiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlQREVCVUcoNCwgInJlYWQgZmluaXNoZWQsIHJldHVybmluZyAlbGQgKHN3ZWV0KSIsIGNvdW50KTsKKworCXVwKCZvdi0+bG9jayk7CisJcmV0dXJuIGNvdW50OworCitlcnJvcjoKKwl1cCgmb3YtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorb3Y1MXhfdjRsMV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKworCWlmIChvdi0+ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCisJUERFQlVHKDQsICJtbWFwOiAlbGQgKCVsWCkgYnl0ZXMiLCBzaXplLCBzaXplKTsKKworCWlmIChzaXplID4gKCgoT1Y1MTFfTlVNRlJBTUVTCisJICAgICAgICAgICAgICAqIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KQorCSAgICAgICAgICAgICAgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlwb3MgPSAodW5zaWduZWQgbG9uZylvdi0+ZmJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgeworCQkJdXAoJm92LT5sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJdXAoJm92LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb3Y1MTFfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlvdjUxeF92NGwxX29wZW4sCisJLnJlbGVhc2UgPQlvdjUxeF92NGwxX2Nsb3NlLAorCS5yZWFkID0JCW92NTF4X3Y0bDFfcmVhZCwKKwkubW1hcCA9CQlvdjUxeF92NGwxX21tYXAsCisJLmlvY3RsID0Jb3Y1MXhfdjRsMV9pb2N0bCwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiT1Y1MTEgVVNCIENhbWVyYSIsCisJLnR5cGUgPQkJVklEX1RZUEVfQ0FQVFVSRSwKKwkuaGFyZHdhcmUgPQlWSURfSEFSRFdBUkVfT1Y1MTEsCisJLmZvcHMgPQkJJm92NTExX2ZvcHMsCisJLnJlbGVhc2UgPQl2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkubWlub3IgPQktMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogT1Y1MTEgYW5kIHNlbnNvciBjb25maWd1cmF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y3NjEwLCBPVjc2MjAsIG9yIE9WNzZCRSBzZW5zb3IuIFRoZSBPVjc2QkUgdXNlcworICogdGhlIHNhbWUgcmVnaXN0ZXIgc2V0dGluZ3MgYXMgdGhlIE9WNzYxMCwgc2luY2UgdGhleSBhcmUgdmVyeSBzaW1pbGFyLgorICovCitzdGF0aWMgaW50Citvdjd4eDBfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBpLCBzdWNjZXNzOworCWludCByYzsKKworCS8qIExhd3JlbmNlIEdsYWlzdGVyIDxsZ0BqZm0uYmMuY2E+IHJlcG9ydHM6CisJICoKKwkgKiBSZWdpc3RlciAweDBmIGluIHRoZSA3NjEwIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6CisJICoKKwkgKiAweDg1IChBRUMgbWV0aG9kIDEpOiBCZXN0IG92ZXJhbGwsIGdvb2QgY29udHJhc3QgcmFuZ2UKKwkgKiAweDQ1IChBRUMgbWV0aG9kIDIpOiBWZXJ5IG92ZXJleHBvc2VkCisJICogMHhhNSAoc3BlYyBzaGVldCBkZWZhdWx0KTogT2ssIGJ1dCB0aGUgYmxhY2sgbGV2ZWwgaXMKKwkgKglzaGlmdGVkIHJlc3VsdGluZyBpbiBsb3NzIG9mIGNvbnRyYXN0CisJICogMHgwNSAob2xkIGRyaXZlciBzZXR0aW5nKTogdmVyeSBvdmVyZXhwb3NlZCwgdG9vIG11Y2gKKwkgKgljb250cmFzdAorCSAqLworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm03NjEwW10gPSB7CisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMCwgMHhmZiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHhhYyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDM4LCAweDgxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHgyNCB9LAkvKiAwYyAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGYsIDB4ODUgfSwJLyogbGcncyBzZXR0aW5nICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MWMgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDIzLCAweDJhIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNCwgMHgxMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjUsIDB4OGEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGEyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNywgMHhjMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmEsIDB4MDQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJjLCAweGZlIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5MyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzAsIDB4NzEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDMxLCAweDYwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzMiwgMHgyNiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzMsIDB4MjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDM0LCAweDQ4IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTEsIDB4MDEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZCwgMHgyNCB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTc2MjBbXSA9IHsKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAwLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMSwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDIsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAzLCAweGMwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNiwgMHg2MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDcsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDAxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTMsIDB4MDEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDg0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDMgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE3LCAweDJmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxOCwgMHhjZiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTksIDB4MDYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDFhLCAweGY1IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxYiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MTggfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDIxLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyMiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjMsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGEyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNywgMHhlYSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI5LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYSwgMHgxMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmIsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJjLCAweDg4IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5MSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmUsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJmLCAweDQ0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2MCwgMHgyNyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjEsIDB4MDIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDYyLCAweDVmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2MywgMHhkNSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjQsIDB4NTcgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDY1LCAweDgzIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2NiwgMHg1NSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjcsIDB4OTIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDY4LCAweGNmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2OSwgMHg3NiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NmEsIDB4MjIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDZiLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2YywgMHgwMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NmQsIDB4NDQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDZlLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2ZiwgMHgxZCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzAsIDB4OGIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDcxLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3MiwgMHgxNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzMsIDB4NTQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDc0LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3NSwgMHg4ZSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzYsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDc3LCAweGZmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3OCwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzksIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDdhLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3YiwgMHhlMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4N2MsIDB4MDAgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCVBERUJVRyg0LCAic3RhcnRpbmcgY29uZmlndXJhdGlvbiIpOworCisJLyogVGhpcyBsb29rcyByZWR1bmRhbnQsIGJ1dCBpcyBuZWNlc3NhcnkgZm9yIFdlYkNhbSAzICovCisJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y3eHgwX1NJRDsKKwlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y3eHgwX1NJRCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaW5pdF9vdl9zZW5zb3Iob3YpID49IDApIHsKKwkJUERFQlVHKDEsICJPVjd4eDAgc2Vuc29yIGluaXRhbGl6ZWQgKG1ldGhvZCAxKSIpOworCX0gZWxzZSB7CisJCS8qIFJlc2V0IHRoZSA3Nnh4ICovCisJCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qIFdhaXQgZm9yIGl0IHRvIGluaXRpYWxpemUgKi8KKwkJbXNsZWVwKDE1MCk7CisKKwkJaSA9IDA7CisJCXN1Y2Nlc3MgPSAwOworCQl3aGlsZSAoaSA8PSBpMmNfZGV0ZWN0X3RyaWVzKSB7CisJCQlpZiAoKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0hJR0gpID09IDB4N0YpICYmCisJCQkgICAgKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0xPVykgPT0gMHhBMikpIHsKKwkJCQlzdWNjZXNzID0gMTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaSsrOworCQkJfQorCQl9CisKKy8vIFdhcyAoaSA9PSBpMmNfZGV0ZWN0X3RyaWVzKSBwcmV2aW91c2x5LiBUaGlzIG9idmlvdXNseSB1c2VkIHRvIGFsd2F5cyByZXBvcnQKKy8vIHN1Y2Nlc3MuIFdoZXRoZXIgYW55b25lIGFjdHVhbGx5IGRlcGVuZGVkIG9uIHRoYXQgYnVnIGlzIHVua25vd24KKwkJaWYgKChpID49IGkyY19kZXRlY3RfdHJpZXMpICYmIChzdWNjZXNzID09IDApKSB7CisJCQllcnIoIkZhaWxlZCB0byByZWFkIHNlbnNvciBJRC4gWW91IG1pZ2h0IG5vdCBoYXZlIGFuIik7CisJCQllcnIoIk9WNzYxMC8yMCwgb3IgaXQgbWF5IGJlIG5vdCByZXNwb25kaW5nLiBSZXBvcnQiKTsKKwkJCWVycigidGhpcyB0byAiIEVNQUlMKTsKKwkJCWVycigiVGhpcyBpcyBvbmx5IGEgd2FybmluZy4gWW91IGNhbiBhdHRlbXB0IHRvIHVzZSIpOworCQkJZXJyKCJ5b3VyIGNhbWVyYSBhbnl3YXkiKTsKKy8vIE9ubHkgaXNzdWUgYSB3YXJuaW5nIGZvciBub3cKKy8vCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJUERFQlVHKDEsICJPVjd4eDAgaW5pdGlhbGl6ZWQgKG1ldGhvZCAyLCAlZHgpIiwgaSsxKTsKKwkJfQorCX0KKworCS8qIERldGVjdCBzZW5zb3IgKHN1Yil0eXBlICovCisJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19DT01fSSk7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDMpIHsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYxMCIpOworCQlvdi0+c2Vuc29yID0gU0VOX09WNzYxMDsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDEpIHsKKwkJLyogSSBkb24ndCBrbm93IHdoYXQncyBkaWZmZXJlbnQgYWJvdXQgdGhlIDc2QkUgeWV0LiAqLworCQlpZiAoaTJjX3Iob3YsIDB4MTUpICYgMSkKKwkJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2MjBBRSIpOworCQllbHNlCisJCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y3NkJFIik7CisKKwkJLyogT1Y1MTErIHdpbGwgcmV0dXJuIGFsbCB6ZXJvIGlzb2MgZGF0YSB1bmxlc3Mgd2UKKwkJICogY29uZmlndXJlIHRoZSBzZW5zb3IgYXMgYSA3NjIwLiBTb21lb25lIG5lZWRzIHRvCisJCSAqIGZpbmQgdGhlIGV4YWN0IHJlZy4gc2V0dGluZyB0aGF0IGNhdXNlcyB0aGlzLiAqLworCQlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7CisJCQlpbmZvKCJFbmFibGluZyA1MTErLzc2MjBBRSB3b3JrYXJvdW5kIik7CisJCQlvdi0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwkJfSBlbHNlIHsKKwkJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NkJFOworCQl9CisJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAwKSB7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2MjAiKTsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjc2MjA7CisJfSBlbHNlIHsKKwkJZXJyKCJVbmtub3duIGltYWdlIHNlbnNvciB2ZXJzaW9uOiAlZCIsIHJjICYgMyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y3NjIwKSB7CisJCVBERUJVRyg0LCAiV3JpdGluZyA3NjIwIHJlZ2lzdGVycyIpOworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNzYyMCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKDQsICJXcml0aW5nIDc2MTAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm03NjEwKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KKwlvdi0+bWF4d2lkdGggPSA2NDA7CisJb3YtPm1heGhlaWdodCA9IDQ4MDsKKwlvdi0+bWlud2lkdGggPSA2NDsKKwlvdi0+bWluaGVpZ2h0ID0gNDg7CisKKwkvLyBGSVhNRTogVGhlc2UgZG8gbm90IG1hdGNoIHRoZSBhY3R1YWwgc2V0dGluZ3MgeWV0CisJb3YtPmJyaWdodG5lc3MgPSAweDgwIDw8IDg7CisJb3YtPmNvbnRyYXN0ID0gMHg4MCA8PCA4OworCW92LT5jb2xvdXIgPSAweDgwIDw8IDg7CisJb3YtPmh1ZSA9IDB4ODAgPDwgODsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjY2MjAsIE9WNjYzMCwgT1Y2NjMwQUUsIG9yIE9WNjYzMEFGIHNlbnNvci4gKi8KK3N0YXRpYyBpbnQKK292Nnh4MF9jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJjOworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTZ4MjBbXSA9IHsKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDMsIDB4NjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA1LCAweDdmIH0sIC8qIEZvciB3aGVuIGF1dG9hZGp1c3QgaXMgb2ZmICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNywgMHhhOCB9LAorCQkvKiBUaGUgcmF0aW8gb2YgMHgwYyBhbmQgMHgwZCAgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBmLCAweDE1IH0sIC8qIENPTVMgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEwLCAweDc1IH0sIC8qIEFFQyBFeHBvc3VyZSB0aW1lICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgyNCB9LCAvKiBFbmFibGUgQUdDICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNCwgMHgwNCB9LAorCQkvKiAweDE2OiAweDA2IGhlbHBzIGZyYW1lIHN0YWJpbGl0eSB3aXRoIG1vdmluZyBvYmplY3RzICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwNiB9LAorLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgyMCwgMHgzMCB9LCAvKiBBcGVydHVyZSBjb3JyZWN0aW9uIGVuYWJsZSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLworCQkvKiAweDI4OiAweDA1IFNlbGVjdHMgUkdCIGZvcm1hdCBpZiBSR0Igb24gKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDA1IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYSwgMHgwNCB9LCAvKiBEaXNhYmxlIGZyYW1lcmF0ZSBhZGp1c3QgKi8KKy8vCQl7IE9WNTExX0kyQ19CVVMsIDB4MmIsIDB4YWMgfSwgLyogRnJhbWVyYXRlOyBTZXQgMmFbN10gZmlyc3QgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJkLCAweDk5IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzMywgMHhhMCB9LCAvKiBDb2xvciBQcm9jZXNpbmcgUGFyYW1ldGVyICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzNCwgMHhkMiB9LCAvKiBNYXggQS9EIHJhbmdlICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzOCwgMHg4YiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzksIDB4NDAgfSwKKworCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4MzkgfSwgLyogRW5hYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgzYyB9LCAvKiBDaGFuZ2UgQUVDIG1vZGUgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDI0IH0sIC8qIERpc2FibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KKworCQl7IE9WNTExX0kyQ19CVVMsIDB4M2QsIDB4ODAgfSwKKwkJLyogVGhlc2UgbmV4dCB0d28gcmVnaXN0ZXJzICgweDRhLCAweDRiKSBhcmUgdW5kb2N1bWVudGVkLiBUaGV5CisJCSAqIGNvbnRyb2wgdGhlIGNvbG9yIGJhbGFuY2UgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDRhLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0YiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NGQsIDB4ZDIgfSwgLyogVGhpcyByZWR1Y2VzIG5vaXNlIGEgYml0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZSwgMHhjMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NGYsIDB4MDQgfSwKKy8vIERvIDUwLTUzIGhhdmUgYW55IGVmZmVjdD8KKy8vIFRvZ2dsZSAweDEyWzJdIG9mZiBhbmQgb24gaGVyZT8KKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCS8qIEVORCBNQVJLRVIgKi8KKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTZ4MzBbXSA9IHsKKwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDgwIH0sIC8qIHJlc2V0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwMCB9LAorCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MDMsIDB4NjAgfSwKKwkvKjBBPyovCXsgT1Y1MTFfSTJDX0JVUywgMHgwNSwgMHg3ZiB9LCAvKiBGb3Igd2hlbiBhdXRvYWRqdXN0IGlzIG9mZiAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDcsIDB4YTggfSwKKwkJLyogVGhlIHJhdGlvIG9mIDB4MGMgYW5kIDB4MGQgIGNvbnRyb2xzIHRoZSB3aGl0ZSBwb2ludCAqLworCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4MjQgfSwKKwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDBkLCAweDI0IH0sCisJLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDBlLCAweDIwIH0sCisvLwkvKjA0PyovCXsgT1Y1MTFfSTJDX0JVUywgMHgxNCwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDMgfSwKKy8vCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjAsIDB4MzAgfSwgLyogQXBlcnR1cmUgY29ycmVjdGlvbiBlbmFibGUgKi8KKwkJLy8gMjEgJiAyMj8gVGhlIHN1Z2dlc3RlZCB2YWx1ZXMgbG9vayB3cm9uZy4gR28gd2l0aCBkZWZhdWx0CisJLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDIzLCAweGMwIH0sCisJLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDI1LCAweDlhIH0sIC8vIENoZWNrIHRoaXMgYWdhaW5zdCBkZWZhdWx0CisvLwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDI2LCAweGIyIH0sIC8qIEJMQyBlbmFibGUgKi8KKworCQkvKiAweDI4OiAweDA1IFNlbGVjdHMgUkdCIGZvcm1hdCBpZiBSR0Igb24gKi8KKy8vCS8qMDQ/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDA1IH0sCisvLwkvKjA0PyovCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHg0NSB9LCAvLyBERUJVRzogVHJpc3RhdGUgVVYgYnVzCisKKwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDJhLCAweDA0IH0sIC8qIERpc2FibGUgZnJhbWVyYXRlIGFkanVzdCAqLworLy8JLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHhhYyB9LCAvKiBGcmFtZXJhdGU7IFNldCAyYVs3XSBmaXJzdCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MmQsIDB4OTkgfSwKKy8vCS8qQSovCXsgT1Y1MTFfSTJDX0JVUywgMHgzMywgMHgyNiB9LCAvLyBSZXNlcnZlZCBiaXRzIG9uIDY2MjAKKy8vCS8qZDI/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDM0LCAweDAzIH0sIC8qIE1heCBBL0QgcmFuZ2UgKi8KKy8vCS8qOGI/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDM4LCAweDgzIH0sCisvLwkvKjQwPyovCXsgT1Y1MTFfSTJDX0JVUywgMHgzOSwgMHhjMCB9LCAvLyA2NjMwIGFkZHMgYml0IDcKKy8vCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4MzkgfSwgLyogRW5hYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisvLwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDNjIH0sIC8qIENoYW5nZSBBRUMgbW9kZSAqLworLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgyNCB9LCAvKiBEaXNhYmxlIEFFQyBtb2RlIGNoYW5naW5nICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzZCwgMHg4MCB9LAorLy8JLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDNmLCAweDBlIH0sCisKKwkJLyogVGhlc2UgbmV4dCB0d28gcmVnaXN0ZXJzICgweDRhLCAweDRiKSBhcmUgdW5kb2N1bWVudGVkLiBUaGV5CisJCSAqIGNvbnRyb2wgdGhlIGNvbG9yIGJhbGFuY2UgKi8KKy8vCS8qT0s/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDRhLCAweDgwIH0sIC8vIENoZWNrIHRoZXNlCisvLwkvKk9LPyovCXsgT1Y1MTFfSTJDX0JVUywgMHg0YiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NGQsIDB4MTAgfSwgLyogVSA9IDAuNTYzdSwgViA9IDAuNzE0diAqLworCS8qYzE/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDRlLCAweDQwIH0sCisKKwkJLyogVVYgYXZlcmFnZSBtb2RlLCBjb2xvciBraWxsZXI6IHN0cm9uZ2VzdCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4NGYsIDB4MDcgfSwKKworCQl7IE9WNTExX0kyQ19CVVMsIDB4NTQsIDB4MjMgfSwgLyogTWF4IEFHQyBnYWluOiAxOGRCICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg1NywgMHg4MSB9LCAvKiAoZGVmYXVsdCkgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDU5LCAweDAxIH0sIC8qIEFHQyBkYXJrIGN1cnJlbnQgY29tcDogKzEgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDVhLCAweDJjIH0sIC8qICh1bmRvY3VtZW50ZWQpICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg1YiwgMHgwZiB9LCAvKiBBV0IgY2hyb21pbmFuY2UgbGV2ZWxzICovCisvLwkJeyBPVjUxMV9JMkNfQlVTLCAweDVjLCAweDEwIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAkvKiBFTkQgTUFSS0VSICovCisJfTsKKworCVBERUJVRyg0LCAic3RhcnRpbmcgc2Vuc29yIGNvbmZpZ3VyYXRpb24iKTsKKworCWlmIChpbml0X292X3NlbnNvcihvdikgPCAwKSB7CisJCWVycigiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELiBZb3UgbWlnaHQgbm90IGhhdmUgYW4gT1Y2eHgwLCIpOworCQllcnIoIm9yIGl0IG1heSBiZSBub3QgcmVzcG9uZGluZy4gUmVwb3J0IHRoaXMgdG8gIiBFTUFJTCk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlQREVCVUcoMSwgIk9WNnh4MCBzZW5zb3IgZGV0ZWN0ZWQiKTsKKwl9CisKKwkvKiBEZXRlY3Qgc2Vuc29yIChzdWIpdHlwZSAqLworCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQ09NX0kpOworCisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChyYyAmIDMpID09IDApIHsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzAiKTsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDEpIHsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MjA7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MjAiKTsKKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDIpIHsKKwkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7CisJCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzBBRSIpOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMykgeworCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYzMEFGIik7CisJfQorCisJLyogU2V0IHNlbnNvci1zcGVjaWZpYyB2YXJzICovCisJb3YtPm1heHdpZHRoID0gMzUyOworCW92LT5tYXhoZWlnaHQgPSAyODg7CisJb3YtPm1pbndpZHRoID0gNjQ7CisJb3YtPm1pbmhlaWdodCA9IDQ4OworCisJLy8gRklYTUU6IFRoZXNlIGRvIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHNldHRpbmdzIHlldAorCW92LT5icmlnaHRuZXNzID0gMHg4MCA8PCA4OworCW92LT5jb250cmFzdCA9IDB4ODAgPDwgODsKKwlvdi0+Y29sb3VyID0gMHg4MCA8PCA4OworCW92LT5odWUgPSAweDgwIDw8IDg7CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjIwKSB7CisJCVBERUJVRyg0LCAiV3JpdGluZyA2eDIwIHJlZ2lzdGVycyIpOworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNngyMCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKDQsICJXcml0aW5nIDZ4MzAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm02eDMwKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgS1MwMTI3IGFuZCBLUzAxMjdCIHZpZGVvIGRlY29kZXJzLiAqLworc3RhdGljIGludCAKK2tzMDEyN19jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJjOworCisvLyBGSVhNRTogSSBkb24ndCBrbm93IGhvdyB0byBzeW5jIG9yIHJlc2V0IGl0IHlldAorI2lmIDAKKwlpZiAob3Y1MXhfaW5pdF9rc19zZW5zb3Iob3YpIDwgMCkgeworCQllcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBLUzAxMjciKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCVBERUJVRygxLCAiS1MwMTJ4KEIpIHNlbnNvciBkZXRlY3RlZCIpOworCX0KKyNlbmRpZgorCisJLyogRGV0ZWN0IGRlY29kZXIgc3VidHlwZSAqLworCXJjID0gaTJjX3Iob3YsIDB4MDApOworCWlmIChyYyA8IDApIHsKKwkJZXJyKCJFcnJvciBkZXRlY3Rpbmcgc2Vuc29yIHR5cGUiKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAocmMgJiAweDA4KSB7CisJCXJjID0gaTJjX3Iob3YsIDB4M2QpOworCQlpZiAocmMgPCAwKSB7CisJCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgaWYgKChyYyAmIDB4MGYpID09IDApIHsKKwkJCWluZm8oIlNlbnNvciBpcyBhIEtTMDEyNyIpOworCQkJb3YtPnNlbnNvciA9IFNFTl9LUzAxMjc7CisJCX0gZWxzZSBpZiAoKHJjICYgMHgwZikgPT0gOSkgeworCQkJaW5mbygiU2Vuc29yIGlzIGEgS1MwMTI3QiBSZXYuIEEiKTsKKwkJCW92LT5zZW5zb3IgPSBTRU5fS1MwMTI3QjsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiRXJyb3I6IFNlbnNvciBpcyBhbiB1bnN1cHBvcnRlZCBLUzAxMjIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNldCBzZW5zb3Itc3BlY2lmaWMgdmFycyAqLworCW92LT5tYXh3aWR0aCA9IDY0MDsKKwlvdi0+bWF4aGVpZ2h0ID0gNDgwOworCW92LT5taW53aWR0aCA9IDY0OworCW92LT5taW5oZWlnaHQgPSA0ODsKKworCS8vIEZJWE1FOiBUaGVzZSBkbyBub3QgbWF0Y2ggdGhlIGFjdHVhbCBzZXR0aW5ncyB5ZXQKKwlvdi0+YnJpZ2h0bmVzcyA9IDB4ODAgPDwgODsKKwlvdi0+Y29udHJhc3QgPSAweDgwIDw8IDg7CisJb3YtPmNvbG91ciA9IDB4ODAgPDwgODsKKwlvdi0+aHVlID0gMHg4MCA8PCA4OworCisJLyogVGhpcyBkZXZpY2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIEJhaWwgb3V0IG5vdy4uLiAqLworCWVycigiVGhpcyBzZW5zb3IgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7CisJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIFNBQTcxMTFBIHZpZGVvIGRlY29kZXIuICovCitzdGF0aWMgaW50CitzYWE3MTExYV9jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IHJjOworCisJLyogU2luY2UgdGhlcmUgaXMgbm8gcmVnaXN0ZXIgcmVzZXQgY29tbWFuZCwgYWxsIHJlZ2lzdGVycyBtdXN0IGJlCisJICogd3JpdHRlbiwgb3RoZXJ3aXNlIGdpdmVzIGVycmF0aWMgcmVzdWx0cyAqLworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm1TQUE3MTExQVtdID0geworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDYsIDB4Y2UgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA3LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMCwgMHg0NCB9LCAvKiBZVVY0MjIsIDI0MC8yODYgbGluZXMgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBlLCAweDAxIH0sIC8qIE5UU0MgTSBvciBQQUwgQkdISSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDAsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAxLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMywgMHgyMyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDQsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA1LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwOCwgMHhjOCB9LCAvKiBBdXRvIGZpZWxkIGZyZXEgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA5LCAweDAxIH0sIC8qIENocm9tLiB0cmFwIG9mZiwgQVBFUj0wLjI1ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYSwgMHg4MCB9LCAvKiBCUklHPTEyOCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGIsIDB4NDAgfSwgLyogQ09OVD0xLjAgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDQwIH0sIC8qIFNBVE49MS4wICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZCwgMHgwMCB9LCAvKiBIVUU9MCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGYsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDBjIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTMsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNSwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTYsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE3LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMiwgMHhjMCB9LAkvKiBDb21wb3NpdGUgaW5wdXQgMCAqLworCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisvLyBGSVhNRTogSSBkb24ndCBrbm93IGhvdyB0byBzeW5jIG9yIHJlc2V0IGl0IHlldAorI2lmIDAKKwlpZiAob3Y1MXhfaW5pdF9zYWFfc2Vuc29yKG92KSA8IDApIHsKKwkJZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgU0FBNzExMUEiKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCVBERUJVRygxLCAiU0FBNzExMUEgc2Vuc29yIGRldGVjdGVkIik7CisJfQorI2VuZGlmCisKKwkvKiA2NDB4NDgwIG5vdCBzdXBwb3J0ZWQgd2l0aCBQQUwgKi8KKwlpZiAob3YtPnBhbCkgeworCQlvdi0+bWF4d2lkdGggPSAzMjA7CisJCW92LT5tYXhoZWlnaHQgPSAyNDA7CQkvKiBFdmVuIGZpZWxkIG9ubHkgKi8KKwl9IGVsc2UgeworCQlvdi0+bWF4d2lkdGggPSA2NDA7CisJCW92LT5tYXhoZWlnaHQgPSA0ODA7CQkvKiBFdmVuL09kZCBmaWVsZHMgKi8KKwl9CisKKwlvdi0+bWlud2lkdGggPSAzMjA7CisJb3YtPm1pbmhlaWdodCA9IDI0MDsJCS8qIEV2ZW4gZmllbGQgb25seSAqLworCisJb3YtPmhhc19kZWNvZGVyID0gMTsKKwlvdi0+bnVtX2lucHV0cyA9IDg7CisJb3YtPm5vcm0gPSBWSURFT19NT0RFX0FVVE87CisJb3YtPnN0b3BfZHVyaW5nX3NldCA9IDA7CS8qIERlY29kZXIgZ3VhcmFudGVlcyBzdGFibGUgaW1hZ2UgKi8KKworCS8qIERlY29kZXIgZG9lc24ndCBjaGFuZ2UgdGhlc2UgdmFsdWVzLCBzbyB3ZSB1c2UgdGhlc2UgaW5zdGVhZCBvZgorCSAqIGFjdXRhbGx5IHJlYWRpbmcgdGhlIHJlZ2lzdGVycyAod2hpY2ggZG9lc24ndCB3b3JrKSAqLworCW92LT5icmlnaHRuZXNzID0gMHg4MCA8PCA4OworCW92LT5jb250cmFzdCA9IDB4NDAgPDwgOTsKKwlvdi0+Y29sb3VyID0gMHg0MCA8PCA5OworCW92LT5odWUgPSAzMjc2ODsKKworCVBERUJVRyg0LCAiV3JpdGluZyBTQUE3MTExQSByZWdpc3RlcnMiKTsKKwlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtU0FBNzExMUEpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBEZXRlY3QgdmVyc2lvbiBvZiBkZWNvZGVyLiBUaGlzIG11c3QgYmUgZG9uZSBhZnRlciB3cml0aW5nIHRoZQorICAgICAgICAgKiBpbml0aWFsIHJlZ3Mgb3IgdGhlIGRlY29kZXIgd2lsbCBsb2NrIHVwLiAqLworCXJjID0gaTJjX3Iob3YsIDB4MDApOworCisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdmVyc2lvbiIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIFNBQTcxMTFBICh2ZXJzaW9uIDB4JXgpIiwgcmMpOworCQlvdi0+c2Vuc29yID0gU0VOX1NBQTcxMTFBOworCX0KKworCS8vIEZJWE1FOiBGaXggdGhpcyBmb3IgT1Y1MTgoKykKKwkvKiBMYXRjaCB0byBuZWdhdGl2ZSBlZGdlIG9mIGNsb2NrLiBPdGhlcndpc2UsIHdlIGdldCBpbmNvcnJlY3QKKwkgKiBjb2xvcnMgYW5kIGppdHRlciBpbiB0aGUgZGlnaXRhbCBzaWduYWwuICovCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKQorCQlyZWdfdyhvdiwgMHgxMSwgMHgwMCk7CisJZWxzZQorCQl3YXJuKCJTQUE3MTExQSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIE9WNTE4L09WNTE4KyIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNTExL09WNTExKyBhbmQgdGhlIHNlbnNvciAqLworc3RhdGljIGludCAKK292NTExX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNJbml0NTExW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHgwMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDNmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZCB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDB9LAorCX07CisKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNTExW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9EUkFNX0ZMT1dfQ1RMLCAJMHgwMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDIgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMCB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfRklGT19PUFRTLAkweDFmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9DT01QX0VOLAkJMHgwMCB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfQ09NUF9MVVRfRU4sCTB4MDMgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MTFQbHVzW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9EUkFNX0ZMT1dfQ1RMLAkweGZmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMiB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9GSUZPX09QVFMsCTB4ZmYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0NPTVBfRU4sCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9DT01QX0xVVF9FTiwJMHgwMyB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJUERFQlVHKDQsICIiKTsKKworCW92LT5jdXN0b21pZCA9IHJlZ19yKG92LCBSNTExX1NZU19DVVNUX0lEKTsKKwlpZiAob3YtPmN1c3RvbWlkIDwgMCkgeworCQllcnIoIlVuYWJsZSB0byByZWFkIGNhbWVyYSBicmlkZ2UgcmVnaXN0ZXJzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUERFQlVHICgxLCAiQ3VzdG9tSUQgPSAlZCIsIG92LT5jdXN0b21pZCk7CisJb3YtPmRlc2MgPSBzeW1ib2xpYyhjYW1saXN0LCBvdi0+Y3VzdG9taWQpOworCWluZm8oIm1vZGVsOiAlcyIsIG92LT5kZXNjKTsKKworCWlmICgwID09IHN0cmNtcChvdi0+ZGVzYywgTk9UX0RFRklORURfU1RSKSkgeworCQllcnIoIkNhbWVyYSB0eXBlICglZCkgbm90IHJlY29nbml6ZWQiLCBvdi0+Y3VzdG9taWQpOworCQllcnIoIlBsZWFzZSBub3RpZnkgIiBFTUFJTCAiIG9mIHRoZSBuYW1lLCIpOworCQllcnIoIm1hbnVmYWN0dXJlciwgbW9kZWwsIGFuZCB0aGlzIG51bWJlciBvZiB5b3VyIGNhbWVyYS4iKTsKKwkJZXJyKCJBbHNvIGluY2x1ZGUgdGhlIG91dHB1dCBvZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MuIik7CisJfSAKKworCWlmIChvdi0+Y3VzdG9taWQgPT0gNzApCQkvKiBVU0IgTGlmZSBUViAoUEFML1NFQ0FNKSAqLworCQlvdi0+cGFsID0gMTsKKworCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc0luaXQ1MTEpKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92LT5sZWRfcG9saWN5ID09IExFRF9PRkYgfHwgb3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKKworCS8qIFRoZSBPVjUxMSsgaGFzIHVuZG9jdW1lbnRlZCBiaXRzIGluIHRoZSBmbG93IGNvbnRyb2wgcmVnaXN0ZXIuCisJICogU2V0dGluZyBpdCB0byAweGZmIGZpeGVzIHRoZSBjb3JydXB0aW9uIHdpdGggbW92aW5nIG9iamVjdHMuICovCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExKSB7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MTEpKQorCQkJZ290byBlcnJvcjsKKwl9IGVsc2UgaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgeworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNTExUGx1cykpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWVycigiSW52YWxpZCBicmlkZ2UiKTsKKwl9CisKKwlpZiAob3Y1MTFfaW5pdF9jb21wcmVzc2lvbihvdikpCisJCWdvdG8gZXJyb3I7CisKKwlvdi0+cGFja2V0X251bWJlcmluZyA9IDE7CisJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKworCW92LT5zbmFwX2VuYWJsZWQgPSBzbmFwc2hvdDsKKworCS8qIFRlc3QgZm9yIDd4eDAgKi8KKwlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWN3h4MCIpOworCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WN3h4MF9TSUQ7CisJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WN3h4MF9TSUQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKSB7CisJCS8qIFRlc3QgZm9yIDZ4eDAgKi8KKwkJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjZ4eDAiKTsKKwkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y2eHgwX1NJRDsKKwkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WNnh4MF9TSUQpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApIHsKKwkJCS8qIFRlc3QgZm9yIDh4eDAgKi8KKwkJCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY4eHgwIik7CisJCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjh4eDBfU0lEOworCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WOHh4MF9TSUQpIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCisJCQlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkgeworCQkJCS8qIFRlc3QgZm9yIFNBQTcxMTFBICovCisJCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciBTQUE3MTExQSIpOworCQkJCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IFNBQTcxMTFBX1NJRDsKKwkJCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgU0FBNzExMUFfU0lEKSA8IDApCisJCQkJCWdvdG8gZXJyb3I7CisKKwkJCQlpZiAoaTJjX3cob3YsIDB4MGQsIDB4MDApIDwgMCkgeworCQkJCQkvKiBUZXN0IGZvciBLUzAxMjcgKi8KKwkJCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciBLUzAxMjciKTsKKwkJCQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gS1MwMTI3X1NJRDsKKwkJCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIEtTMDEyN19TSUQpIDwgMCkKKwkJCQkJCWdvdG8gZXJyb3I7CisKKwkJCQkJaWYgKGkyY193KG92LCAweDEwLCAweDAwKSA8IDApIHsKKwkJCQkJCWVycigiQ2FuJ3QgZGV0ZXJtaW5lIHNlbnNvciBzbGF2ZSBJRHMiKTsKKwkJIAkJCQlnb3RvIGVycm9yOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKGtzMDEyN19jb25maWd1cmUob3YpIDwgMCkgeworCQkJCQkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBLUzAxMjciKTsKKwkgCQkJCQkJZ290byBlcnJvcjsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzYWE3MTExYV9jb25maWd1cmUob3YpIDwgMCkgeworCQkJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIFNBQTcxMTFBIik7CisJIAkJCQkJZ290byBlcnJvcjsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZXJyKCJEZXRlY3RlZCB1bnN1cHBvcnRlZCBPVjh4eDAgc2Vuc29yIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvdjZ4eDBfY29uZmlndXJlKG92KSA8IDApIHsKKwkJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y2eHgwIik7CisgCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAob3Y3eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7CisJIAkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJvcjoKKwllcnIoIk9WNTExIENvbmZpZyBmYWlsZWQiKTsKKworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNTE4L09WNTE4KyBhbmQgdGhlIHNlbnNvciAqLworc3RhdGljIGludAorb3Y1MThfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCS8qIEZvciA1MTggYW5kIDUxOCsgKi8KKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNJbml0NTE4W10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4NDAgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4ZTEgfSwKKwkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4M2UgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4ZTEgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDQ2LAkJCTB4MDAgfSwgCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg1ZCwJCQkweDAzIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MThbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMiB9LCAvKiBSZXNldCAqLworCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAxIH0sIC8qIEVuYWJsZSAqLworCQl7IE9WNTExX1JFR19CVVMsIDB4MzEsIAkJCTB4MGYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDVkLAkJCTB4MDMgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDI0LAkJCTB4OWYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDI1LAkJCTB4OTAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDIwLAkJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDUxLAkJCTB4MDQgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDcxLAkJCTB4MTkgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MThQbHVzW10gPSB7CisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDIgfSwgLyogUmVzZXQgKi8KKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMSB9LCAvKiBFbmFibGUgKi8KKwkJeyBPVjUxMV9SRUdfQlVTLCAweDMxLCAJCQkweDBmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg1ZCwJCQkweDAzIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyNCwJCQkweDlmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyNSwJCQkweDkwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyMCwJCQkweDYwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg1MSwJCQkweDAyIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg3MSwJCQkweDE5IH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0MCwJCQkweGZmIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0MSwJCQkweDQyIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0NiwJCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgzMywJCQkweDA0IH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgyMSwJCQkweDE5IH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgzZiwJCQkweDEwIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAorCX07CisKKwlQREVCVUcoNCwgIiIpOworCisJLyogRmlyc3QgNSBiaXRzIG9mIGN1c3RvbSBJRCByZWcgYXJlIGEgcmV2aXNpb24gSUQgb24gT1Y1MTggKi8KKwlpbmZvKCJEZXZpY2UgcmV2aXNpb24gJWQiLCAweDFGICYgcmVnX3Iob3YsIFI1MTFfU1lTX0NVU1RfSUQpKTsKKworCS8qIEdpdmUgaXQgdGhlIGRlZmF1bHQgZGVzY3JpcHRpb24gKi8KKwlvdi0+ZGVzYyA9IHN5bWJvbGljKGNhbWxpc3QsIDApOworCisJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzSW5pdDUxOCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBTZXQgTEVEIEdQSU8gcGluIHRvIG91dHB1dCBtb2RlICovCisJaWYgKHJlZ193X21hc2sob3YsIDB4NTcsIDB4MDAsIDB4MDIpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIExFRCBpcyBvZmYgYnkgZGVmYXVsdCB3aXRoIE9WNTE4OyBoYXZlIHRvIGV4cGxpY2l0bHkgdHVybiBpdCBvbiAqLworCWlmIChvdi0+bGVkX3BvbGljeSA9PSBMRURfT0ZGIHx8IG92LT5sZWRfcG9saWN5ID09IExFRF9BVVRPKQorCQlvdjUxeF9sZWRfY29udHJvbChvdiwgMCk7CisJZWxzZQorCQlvdjUxeF9sZWRfY29udHJvbChvdiwgMSk7CisKKwkvKiBEb24ndCByZXF1aXJlIGNvbXByZXNzaW9uIGlmIGR1bXBwaXggaXMgZW5hYmxlZDsgb3RoZXJ3aXNlIGl0J3MKKwkgKiByZXF1aXJlZC4gT1Y1MTggaGFzIG5vIHVuY29tcHJlc3NlZCBtb2RlLCB0byBzYXZlIFJBTS4gKi8KKwlpZiAoIWR1bXBwaXggJiYgIW92LT5jb21wcmVzcykgeworCQlvdi0+Y29tcHJlc3MgPSAxOworCQl3YXJuKCJDb21wcmVzc2lvbiByZXF1aXJlZCB3aXRoIE9WNTE4Li4uZW5hYmxpbmciKTsKKwl9CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgpIHsKKwkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTUxOCkpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MThQTFVTKSB7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MThQbHVzKSkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJZXJyKCJJbnZhbGlkIGJyaWRnZSIpOworCX0KKworCWlmIChyZWdfdyhvdiwgMHgyZiwgMHg4MCkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92NTE4X2luaXRfY29tcHJlc3Npb24ob3YpKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4KQorCXsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmcDsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCQlfX3UxNiBteHBzID0gMDsKKworCQlpZnAgPSB1c2JfaWZudW1fdG9faWYob3YtPmRldiwgMCk7CisJCWlmIChpZnApIHsKKwkJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZnAsIDcpOworCQkJaWYgKGFsdCkKKwkJCQlteHBzID0gbGUxNl90b19jcHUoYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKKwkJfQorCisJCS8qIFNvbWUgT1Y1MThzIGhhdmUgcGFja2V0IG51bWJlcmluZyBieSBkZWZhdWx0LCBzb21lIGRvbid0ICovCisJCWlmIChteHBzID09IDg5NykKKwkJCW92LT5wYWNrZXRfbnVtYmVyaW5nID0gMTsKKwkJZWxzZQorCQkJb3YtPnBhY2tldF9udW1iZXJpbmcgPSAwOworCX0gZWxzZSB7CisJCS8qIE9WNTE4KyBoYXMgcGFja2V0IG51bWJlcmluZyB0dXJuZWQgb24gYnkgZGVmYXVsdCAqLworCQlvdi0+cGFja2V0X251bWJlcmluZyA9IDE7CisJfQorCisJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKworCW92LT5zbmFwX2VuYWJsZWQgPSBzbmFwc2hvdDsKKworCS8qIFRlc3QgZm9yIDc2eHggKi8KKwlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjd4eDBfU0lEOworCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBPVjd4eDBfU0lEKSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBUaGUgT1Y1MTggbXVzdCBiZSBtb3JlIGFnZ3Jlc3NpdmUgYWJvdXQgc2Vuc29yIGRldGVjdGlvbiBzaW5jZQorCSAqIEkyQyB3cml0ZSB3aWxsIG5ldmVyIGZhaWwgaWYgdGhlIHNlbnNvciBpcyBub3QgcHJlc2VudC4gV2UgaGF2ZQorCSAqIHRvIHRyeSB0byBpbml0aWFsaXplIHRoZSBzZW5zb3IgdG8gZGV0ZWN0IGl0cyBwcmVzZW5jZSAqLworCisJaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKKwkJLyogVGVzdCBmb3IgNnh4MCAqLworCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjZ4eDBfU0lEOworCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y2eHgwX1NJRCkgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQlpZiAoaW5pdF9vdl9zZW5zb3Iob3YpIDwgMCkgeworCQkJLyogVGVzdCBmb3IgOHh4MCAqLworCQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y4eHgwX1NJRDsKKwkJCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBPVjh4eDBfU0lEKSA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKKwkJCQllcnIoIkNhbid0IGRldGVybWluZSBzZW5zb3Igc2xhdmUgSURzIik7CisgCQkJCWdvdG8gZXJyb3I7CisJCQl9IGVsc2UgeworCQkJCWVycigiRGV0ZWN0ZWQgdW5zdXBwb3J0ZWQgT1Y4eHgwIHNlbnNvciIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAob3Y2eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WNnh4MCIpOworIAkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKG92N3h4MF9jb25maWd1cmUob3YpIDwgMCkgeworCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WN3h4MCIpOworCSAJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlvdi0+bWF4d2lkdGggPSAzNTI7CisJb3YtPm1heGhlaWdodCA9IDI4ODsKKworCS8vIFRoZSBPVjUxOCBjYW5ub3QgZ28gYXMgbG93IGFzIHRoZSBzZW5zb3IgY2FuCisJb3YtPm1pbndpZHRoID0gMTYwOworCW92LT5taW5oZWlnaHQgPSAxMjA7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZXJyKCJPVjUxOCBDb25maWcgZmFpbGVkIik7CisKKwlyZXR1cm4gLUVCVVNZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHN5c2ZzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Jfb3Y1MTEgKmNkX3RvX292KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2QpOworCXJldHVybiB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jdXN0b21faWQoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgb3YtPmN1c3RvbWlkKTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY3VzdG9tX2lkLCBTX0lSVUdPLCBzaG93X2N1c3RvbV9pZCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbW9kZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3YtPmRlc2MpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RlbCwgU19JUlVHTywgc2hvd19tb2RlbCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnJpZGdlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYnJpZGdlLCBTX0lSVUdPLCBzaG93X2JyaWRnZSwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN5bWJvbGljKHNlbmxpc3QsIG92LT5zZW5zb3IpKTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2Vuc29yLCBTX0lSVUdPLCBzaG93X3NlbnNvciwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfYnJpZ2h0bmVzcyhvdiwgJngpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB4ID4+IDgpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihicmlnaHRuZXNzLCBTX0lSVUdPLCBzaG93X2JyaWdodG5lc3MsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3NhdHVyYXRpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwl1bnNpZ25lZCBzaG9ydCB4OworCisJaWYgKCFvdi0+ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlzZW5zb3JfZ2V0X3NhdHVyYXRpb24ob3YsICZ4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2F0dXJhdGlvbiwgU19JUlVHTywgc2hvd19zYXR1cmF0aW9uLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19jb250cmFzdChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfY29udHJhc3Qob3YsICZ4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY29udHJhc3QsIFNfSVJVR08sIHNob3dfY29udHJhc3QsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2h1ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfaHVlKG92LCAmeCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHggPj4gOCk7Cit9IAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGh1ZSwgU19JUlVHTywgc2hvd19odWUsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2V4cG9zdXJlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJdW5zaWduZWQgY2hhciBleHA7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfZXhwb3N1cmUob3YsICZleHApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBleHAgPj4gOCk7Cit9IAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGV4cG9zdXJlLCBTX0lSVUdPLCBzaG93X2V4cG9zdXJlLCBOVUxMKTsKKworc3RhdGljIHZvaWQgb3ZfY3JlYXRlX3N5c2ZzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9jdXN0b21faWQpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZWwpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYnJpZGdlKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX3NlbnNvcik7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9icmlnaHRuZXNzKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX3NhdHVyYXRpb24pOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfY29udHJhc3QpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaHVlKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2V4cG9zdXJlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBVU0Igcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK292NTF4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWRlc2M7CisJc3RydWN0IHVzYl9vdjUxMSAqb3Y7CisJaW50IGk7CisKKwlQREVCVUcoMSwgInByb2JpbmcgZm9yIGRldmljZS4uLiIpOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZGVzYyA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKworCWlmIChpZGVzYy0+YkludGVyZmFjZUNsYXNzICE9IDB4RkYpCisJCXJldHVybiAtRU5PREVWOworCWlmIChpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzICE9IDB4MDApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChvdiA9IGttYWxsb2Moc2l6ZW9mKCpvdiksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWVycigiY291bGRuJ3Qga21hbGxvYyBvdiBzdHJ1Y3QiKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJbWVtc2V0KG92LCAwLCBzaXplb2YoKm92KSk7CisKKwlvdi0+ZGV2ID0gZGV2OworCW92LT5pZmFjZSA9IGlkZXNjLT5iSW50ZXJmYWNlTnVtYmVyOworCW92LT5sZWRfcG9saWN5ID0gbGVkOworCW92LT5jb21wcmVzcyA9IGNvbXByZXNzOworCW92LT5saWdodGZyZXEgPSBsaWdodGZyZXE7CisJb3YtPm51bV9pbnB1dHMgPSAxOwkgICAvKiBWaWRlbyBkZWNvZGVyIGluaXQgZnVuY3RzLiBjaGFuZ2UgdGhpcyAqLworCW92LT5zdG9wX2R1cmluZ19zZXQgPSAhZmFzdHNldDsKKwlvdi0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0OworCW92LT5taXJyb3IgPSBtaXJyb3I7CisJb3YtPmF1dG9fYnJ0ID0gYXV0b2JyaWdodDsKKwlvdi0+YXV0b19nYWluID0gYXV0b2dhaW47CisJb3YtPmF1dG9fZXhwID0gYXV0b2V4cDsKKworCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKKwljYXNlIFBST0RfT1Y1MTE6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTE7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTE7CisJCWJyZWFrOworCWNhc2UgUFJPRF9PVjUxMVBMVVM6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTFQTFVTOworCQlvdi0+YmNsYXNzID0gQkNMX09WNTExOworCQlicmVhazsKKwljYXNlIFBST0RfT1Y1MTg6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTg7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTg7CisJCWJyZWFrOworCWNhc2UgUFJPRF9PVjUxOFBMVVM6CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MThQTFVTOworCQlvdi0+YmNsYXNzID0gQkNMX09WNTE4OworCQlicmVhazsKKwljYXNlIFBST0RfTUUyQ0FNOgorCQlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSBWRU5EX01BVFRFTCkKKwkJCWdvdG8gZXJyb3I7CisJCW92LT5icmlkZ2UgPSBCUkdfT1Y1MTFQTFVTOworCQlvdi0+YmNsYXNzID0gQkNMX09WNTExOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIlVua25vd24gcHJvZHVjdCBJRCAweCUwNHgiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaW5mbygiVVNCICVzIHZpZGVvIGRldmljZSBmb3VuZCIsIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT53cSk7CisKKwlpbml0X01VVEVYKCZvdi0+bG9jayk7CS8qIHRvIDEgPT0gYXZhaWxhYmxlICovCisJaW5pdF9NVVRFWCgmb3YtPmJ1Zl9sb2NrKTsKKwlpbml0X01VVEVYKCZvdi0+cGFyYW1fbG9jayk7CisJaW5pdF9NVVRFWCgmb3YtPmkyY19sb2NrKTsKKwlpbml0X01VVEVYKCZvdi0+Y2J1Zl9sb2NrKTsKKworCW92LT5idWZfc3RhdGUgPSBCVUZfTk9UX0FMTE9DQVRFRDsKKworCWlmICh1c2JfbWFrZV9wYXRoKGRldiwgb3YtPnVzYl9wYXRoLCBPVjUxMV9VU0JfUEFUSF9MRU4pIDwgMCkgeworCQllcnIoInVzYl9tYWtlX3BhdGggZXJyb3IiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBjb250cm9sIHRyYW5zZmVyIGJ1ZmZlci4gKi8KKwkvKiBNdXN0IGJlIGttYWxsb2MoKSdlZCwgZm9yIERNQSBjb21wYXRpYmlsaXR5ICovCisJb3YtPmNidWYgPSBrbWFsbG9jKE9WNTExX0NCVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvdi0+Y2J1ZikKKwkJZ290byBlcnJvcjsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAob3Y1MThfY29uZmlndXJlKG92KSA8IDApCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWlmIChvdjUxMV9jb25maWd1cmUob3YpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCW92LT5mcmFtZVtpXS5mcmFtZW51bSA9IGk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT5mcmFtZVtpXS53cSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTVNCVUY7IGkrKykgeworCQlvdi0+c2J1ZltpXS5vdiA9IG92OworCQlzcGluX2xvY2tfaW5pdCgmb3YtPnNidWZbaV0ubG9jayk7CisJCW92LT5zYnVmW2ldLm4gPSBpOworCX0KKworCS8qIFVubmVjZXNzYXJ5PyAoVGhpcyBpcyBkb25lIG9uIG9wZW4oKS4gTmVlZCB0byBtYWtlIHN1cmUgdmFyaWFibGVzCisJICogYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGhvdXQgdGhpcyBiZWZvcmUgcmVtb3ZpbmcgaXQsIHRob3VnaCkuICovCisJaWYgKG92NTF4X3NldF9kZWZhdWx0X3BhcmFtcyhvdikgPCAwKQorCQlnb3RvIGVycm9yOworCisjaWZkZWYgT1Y1MTFfREVCVUcKKwlpZiAoZHVtcF9icmlkZ2UpIHsKKwkJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKQorCQkJb3Y1MTFfZHVtcF9yZWdzKG92KTsKKwkJZWxzZQorCQkJb3Y1MThfZHVtcF9yZWdzKG92KTsKKwl9CisjZW5kaWYKKworCW92LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFvdi0+dmRldikKKwkJZ290byBlcnJvcjsKKworCW1lbWNweShvdi0+dmRldiwgJnZkZXZfdGVtcGxhdGUsIHNpemVvZigqb3YtPnZkZXYpKTsKKwlvdi0+dmRldi0+ZGV2ID0gJmRldi0+ZGV2OworCXZpZGVvX3NldF9kcnZkYXRhKG92LT52ZGV2LCBvdik7CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTUFYX1VOSVRfVklERU87IGkrKykgeworCQkvKiBNaW5vciAwIGNhbm5vdCBiZSBzcGVjaWZpZWQ7IGFzc3VtZSB1c2VyIHdhbnRzIGF1dG9kZXRlY3QgKi8KKwkJaWYgKHVuaXRfdmlkZW9baV0gPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uob3YtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCisJCQl1bml0X3ZpZGVvW2ldKSA+PSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFVzZSB0aGUgbmV4dCBhdmFpbGFibGUgb25lICovCisJaWYgKChvdi0+dmRldi0+bWlub3IgPT0gLTEpICYmCisJICAgIHZpZGVvX3JlZ2lzdGVyX2RldmljZShvdi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpIDwgMCkgeworCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpbmZvKCJEZXZpY2UgYXQgJXMgcmVnaXN0ZXJlZCB0byBtaW5vciAlZCIsIG92LT51c2JfcGF0aCwKKwkgICAgIG92LT52ZGV2LT5taW5vcik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG92KTsKKwlvdl9jcmVhdGVfc3lzZnMob3YtPnZkZXYpOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAob3YtPnZkZXYpIHsKKwkJaWYgKC0xID09IG92LT52ZGV2LT5taW5vcikKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKG92LT52ZGV2KTsKKwkJZWxzZQorCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uob3YtPnZkZXYpOworCQlvdi0+dmRldiA9IE5VTEw7CisJfQorCisJaWYgKG92LT5jYnVmKSB7CisJCWRvd24oJm92LT5jYnVmX2xvY2spOworCQlrZnJlZShvdi0+Y2J1Zik7CisJCW92LT5jYnVmID0gTlVMTDsKKwkJdXAoJm92LT5jYnVmX2xvY2spOworCX0KKworCWlmIChvdikgeworCQlrZnJlZShvdik7CisJCW92ID0gTlVMTDsKKwl9CisKK2Vycm9yX291dDoKKwllcnIoIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQKK292NTF4X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBuOworCisJUERFQlVHKDMsICIiKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJaWYgKCFvdikKKwkJcmV0dXJuOworCisJaWYgKG92LT52ZGV2KQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShvdi0+dmRldik7CisKKwlmb3IgKG4gPSAwOyBuIDwgT1Y1MTFfTlVNRlJBTUVTOyBuKyspCisJCW92LT5mcmFtZVtuXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKworCW92LT5jdXJmcmFtZSA9IC0xOworCisJLyogVGhpcyB3aWxsIGNhdXNlIHRoZSBwcm9jZXNzIHRvIHJlcXVlc3QgYW5vdGhlciBmcmFtZSAqLworCWZvciAobiA9IDA7IG4gPCBPVjUxMV9OVU1GUkFNRVM7IG4rKykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvdi0+ZnJhbWVbbl0ud3EpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvdi0+d3EpOworCisJb3YtPnN0cmVhbWluZyA9IDA7CisJb3Y1MXhfdW5saW5rX2lzb2Mob3YpOworCisJb3YtPmRldiA9IE5VTEw7CisKKwkvKiBGcmVlIHRoZSBtZW1vcnkgKi8KKwlpZiAob3YgJiYgIW92LT51c2VyKSB7CisJCWRvd24oJm92LT5jYnVmX2xvY2spOworCQlrZnJlZShvdi0+Y2J1Zik7CisJCW92LT5jYnVmID0gTlVMTDsKKwkJdXAoJm92LT5jYnVmX2xvY2spOworCisJCW92NTF4X2RlYWxsb2Mob3YpOworCQlrZnJlZShvdik7CisJCW92ID0gTlVMTDsKKwl9CisKKwlQREVCVUcoMywgIkRpc2Nvbm5lY3QgY29tcGxldGUiKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG92NTExX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkib3Y1MTEiLAorCS5pZF90YWJsZSA9CWRldmljZV90YWJsZSwKKwkucHJvYmUgPQlvdjUxeF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CW92NTF4X2Rpc2Nvbm5lY3QKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIE1vZHVsZSByb3V0aW5lcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJldHVybnMgMCBmb3Igc3VjY2VzcyAqLworaW50CitvdjUxMV9yZWdpc3Rlcl9kZWNvbXBfbW9kdWxlKGludCB2ZXIsIHN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpvcHMsIGludCBvdjUxOCwKKwkJCSAgICAgaW50IG1teCkKK3sKKwlpZiAodmVyICE9IERFQ09NUF9JTlRFUkZBQ0VfVkVSKSB7CisJCWVycigiRGVjb21wcmVzc2lvbiBtb2R1bGUgaGFzIGluY29tcGF0aWJsZSIpOworCQllcnIoImludGVyZmFjZSB2ZXJzaW9uICVkIiwgdmVyKTsKKwkJZXJyKCJJbnRlcmZhY2UgdmVyc2lvbiAlZCBpcyByZXF1aXJlZCIsIERFQ09NUF9JTlRFUkZBQ0VfVkVSKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFvcHMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG1teCAmJiAhb3Y1MXhfbW14X2F2YWlsYWJsZSkgeworCQllcnIoIk1NWCBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIG9yIGtlcm5lbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKG92NTE4KSB7CisJCWlmIChtbXgpIHsKKwkJCWlmIChvdjUxOF9tbXhfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MThfbW14X2RlY29tcF9vcHMgPSBvcHM7CisJCX0gZWxzZSB7CisJCQlpZiAob3Y1MThfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MThfZGVjb21wX29wcyA9IG9wczsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbXgpIHsKKwkJCWlmIChvdjUxMV9tbXhfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MTFfbW14X2RlY29tcF9vcHMgPSBvcHM7CisJCX0gZWxzZSB7CisJCQlpZiAob3Y1MTFfZGVjb21wX29wcykKKwkJCQlnb3RvIGVycl9pbl91c2U7CisJCQllbHNlCisJCQkJb3Y1MTFfZGVjb21wX29wcyA9IG9wczsKKwkJfQorCX0KKworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gMDsKKworZXJyX2luX3VzZToKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIC1FQlVTWTsKK30KKwordm9pZAorb3Y1MTFfZGVyZWdpc3Rlcl9kZWNvbXBfbW9kdWxlKGludCBvdjUxOCwgaW50IG1teCkKK3sKKwlsb2NrX2tlcm5lbCgpOworCisJaWYgKG92NTE4KSB7CisJCWlmIChtbXgpCisJCQlvdjUxOF9tbXhfZGVjb21wX29wcyA9IE5VTEw7CisJCWVsc2UKKwkJCW92NTE4X2RlY29tcF9vcHMgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChtbXgpCisJCQlvdjUxMV9tbXhfZGVjb21wX29wcyA9IE5VTEw7CisJCWVsc2UKKwkJCW92NTExX2RlY29tcF9vcHMgPSBOVUxMOworCX0KKworCXVubG9ja19rZXJuZWwoKTsKK30KKworc3RhdGljIGludCBfX2luaXQKK3VzYl9vdjUxMV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb3Y1MTFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIiA6ICIgRFJJVkVSX0RFU0MpOworCitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit1c2Jfb3Y1MTFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZvdjUxMV9kcml2ZXIpOworCWluZm8oImRyaXZlciBkZXJlZ2lzdGVyZWQiKTsKKworfQorCittb2R1bGVfaW5pdCh1c2Jfb3Y1MTFfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfb3Y1MTFfZXhpdCk7CisKK0VYUE9SVF9TWU1CT0wob3Y1MTFfcmVnaXN0ZXJfZGVjb21wX21vZHVsZSk7CitFWFBPUlRfU1lNQk9MKG92NTExX2RlcmVnaXN0ZXJfZGVjb21wX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5oIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODY1MDlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuaApAQCAtMCwwICsxLDU2OSBAQAorI2lmbmRlZiBfX0xJTlVYX09WNTExX0gKKyNkZWZpbmUgX19MSU5VWF9PVjUxMV9ICisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBPVjUxMV9ERUJVRwkvKiBUdXJuIG9uIGRlYnVnIG1lc3NhZ2VzICovCisKKyNpZmRlZiBPVjUxMV9ERUJVRworCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwkJaWYgKGRlYnVnID49IChsZXZlbCkpIGluZm8oIlslczolZF0gIiBmbXQsIFwKKwkJX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCisjZWxzZQorCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworLyogVGhpcyBtYWNybyByZXN0cmljdHMgYW4gaW50IHZhcmlhYmxlIHRvIGFuIGluY2x1c2l2ZSByYW5nZSAqLworI2RlZmluZSBSRVNUUklDVF9UT19SQU5HRSh2LG1pLG1hKSB7IFwKKwlpZiAoKHYpIDwgKG1pKSkgKHYpID0gKG1pKTsgXAorCWVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IFwKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBERUZJTkVTIEZPUiBPVjUxMSBBTkQgT1RIRVIgQ0hJUFMgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBVU0IgSURzICovCisjZGVmaW5lIFZFTkRfT01OSVZJU0lPTgkweDA1QTkKKyNkZWZpbmUgUFJPRF9PVjUxMQkweDA1MTEKKyNkZWZpbmUgUFJPRF9PVjUxMVBMVVMJMHhBNTExCisjZGVmaW5lIFBST0RfT1Y1MTgJMHgwNTE4CisjZGVmaW5lIFBST0RfT1Y1MThQTFVTCTB4QTUxOAorCisjZGVmaW5lIFZFTkRfTUFUVEVMCTB4MDgxMworI2RlZmluZSBQUk9EX01FMkNBTQkweDAwMDIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgT1Y1MXggUkVHSVNURVIgTU5FTU9OSUNTICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDYW1lcmEgaW50ZXJmYWNlIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgUjUxMV9DQU1fREVMQVkJCTB4MTAKKyNkZWZpbmUgUjUxMV9DQU1fRURHRQkJMHgxMQorI2RlZmluZSBSNTExX0NBTV9QWENOVAkJMHgxMgorI2RlZmluZSBSNTExX0NBTV9MTkNOVAkJMHgxMworI2RlZmluZSBSNTExX0NBTV9QWERJVgkJMHgxNAorI2RlZmluZSBSNTExX0NBTV9MTkRJVgkJMHgxNQorI2RlZmluZSBSNTExX0NBTV9VVl9FTgkJMHgxNgorI2RlZmluZSBSNTExX0NBTV9MSU5FX01PREUJMHgxNworI2RlZmluZSBSNTExX0NBTV9PUFRTCQkweDE4CisKKy8qIFNuYXBzaG90IG1vZGUgY2FtZXJhIGludGVyZmFjZSByZWdpc3RlciBudW1iZXJzICovCisjZGVmaW5lIFI1MTFfU05BUF9GUkFNRQkJMHgxOQorI2RlZmluZSBSNTExX1NOQVBfUFhDTlQJCTB4MUEKKyNkZWZpbmUgUjUxMV9TTkFQX0xOQ05UCQkweDFCCisjZGVmaW5lIFI1MTFfU05BUF9QWERJVgkJMHgxQworI2RlZmluZSBSNTExX1NOQVBfTE5ESVYJCTB4MUQKKyNkZWZpbmUgUjUxMV9TTkFQX1VWX0VOCQkweDFFCisjZGVmaW5lIFI1MTFfU05BUF9PUFRTCQkweDFGCisKKy8qIERSQU0gcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBSNTExX0RSQU1fRkxPV19DVEwJMHgyMAorI2RlZmluZSBSNTExX0RSQU1fQVJDUAkJMHgyMQorI2RlZmluZSBSNTExX0RSQU1fTVJDCQkweDIyCisjZGVmaW5lIFI1MTFfRFJBTV9SRkMJCTB4MjMKKworLyogSVNPIEZJRk8gcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBSNTF4X0ZJRk9fUFNJWkUJCTB4MzAJLyogMiBieXRlcyB3aWRlIHcvIE9WNTE4KCspICovCisjZGVmaW5lIFI1MTFfRklGT19PUFRTCQkweDMxCisKKy8qIFBhcmFsbGVsIElPIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgUjUxMV9QSU9fT1BUUwkJMHgzOAorI2RlZmluZSBSNTExX1BJT19EQVRBCQkweDM5CisjZGVmaW5lIFI1MTFfUElPX0JJU1QJCTB4M0UKKyNkZWZpbmUgUjUxOF9HUElPX0lOCQkweDU1CS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX09VVAkJMHg1NgkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MThfR1BJT19DVEwJCTB4NTcJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fUFVMU0VfSU4JMHg1OAkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MThfR1BJT19QVUxTRV9DTEVBUgkweDU5CS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX1BPTAkweDVhCS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX0VOCTB4NWIJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fUkVTRVQJCTB4NWMJLyogT1Y1MTgoKykgb25seSAqLworCisvKiBJMkMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFI1MTFfSTJDX0NUTAkJMHg0MAorI2RlZmluZSBSNTE4X0kyQ19DVEwJCTB4NDcJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTF4X0kyQ19XX1NJRAkJMHg0MQorI2RlZmluZSBSNTF4X0kyQ19TQUREUl8zCTB4NDIKKyNkZWZpbmUgUjUxeF9JMkNfU0FERFJfMgkweDQzCisjZGVmaW5lIFI1MXhfSTJDX1JfU0lECQkweDQ0CisjZGVmaW5lIFI1MXhfSTJDX0RBVEEJCTB4NDUKKyNkZWZpbmUgUjUxeF9JMkNfQ0xPQ0sJCTB4NDYKKyNkZWZpbmUgUjUxeF9JMkNfVElNRU9VVAkweDQ3CisKKy8qIEkyQyBzbmFwc2hvdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxMV9TSTJDX1NBRERSXzMJMHg0OAorI2RlZmluZSBSNTExX1NJMkNfREFUQQkJMHg0OQorCisvKiBTeXN0ZW0gY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxeF9TWVNfUkVTRVQJCTB4NTAKKwkJLyogUmVzZXQgdHlwZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSAJT1Y1MTFfUkVTRVRfVURDCQkweDAxCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9JMkMJCTB4MDIKKyNkZWZpbmUgCU9WNTExX1JFU0VUX0ZJRk8JMHgwNAorI2RlZmluZSAJT1Y1MTFfUkVTRVRfT01OSUNFCTB4MDgKKyNkZWZpbmUgCU9WNTExX1JFU0VUX0RSQU0JMHgxMAorI2RlZmluZSAJT1Y1MTFfUkVTRVRfQ0FNX0lOVAkweDIwCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9PVjUxMQkweDQwCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9OT1JFR1MJMHgzRiAvKiBBbGwgYnV0IE9WNTExICYgcmVncyAqLworI2RlZmluZSAJT1Y1MTFfUkVTRVRfQUxMCQkweDdGCisKKyNkZWZpbmUgUjUxMV9TWVNfQ0xPQ0tfRElWCTB4NTEKKyNkZWZpbmUgUjUxeF9TWVNfU05BUAkJMHg1MgorI2RlZmluZSBSNTF4X1NZU19JTklUICAgICAgICAgCTB4NTMKKyNkZWZpbmUgUjUxMV9TWVNfUFdSX0NMSwkweDU0IC8qIE9WNTExKy9PVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MTFfU1lTX0xFRF9DVEwJMHg1NSAvKiBPVjUxMSsgb25seSAqLworI2RlZmluZSBSNTExX1NZU19VU0VSCQkweDVFCisjZGVmaW5lIFI1MTFfU1lTX0NVU1RfSUQJMHg1RgorCisvKiBPbW5pQ0UgKGNvbXByZXNzaW9uKSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxMV9DT01QX1BIWQkJMHg3MAorI2RlZmluZSBSNTExX0NPTVBfUEhVVgkJMHg3MQorI2RlZmluZSBSNTExX0NPTVBfUFZZCQkweDcyCisjZGVmaW5lIFI1MTFfQ09NUF9QVlVWCQkweDczCisjZGVmaW5lIFI1MTFfQ09NUF9RSFkJCTB4NzQKKyNkZWZpbmUgUjUxMV9DT01QX1FIVVYJCTB4NzUKKyNkZWZpbmUgUjUxMV9DT01QX1FWWQkJMHg3NgorI2RlZmluZSBSNTExX0NPTVBfUVZVVgkJMHg3NworI2RlZmluZSBSNTExX0NPTVBfRU4JCTB4NzgKKyNkZWZpbmUgUjUxMV9DT01QX0xVVF9FTgkweDc5CQkKKyNkZWZpbmUgUjUxMV9DT01QX0xVVF9CRUdJTgkweDgwCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICBBTFRFUk5BVEUgTlVNQkVSUyAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQWx0ZXJuYXRlIG51bWJlcnMgZm9yIHZhcmlvdXMgbWF4IHBhY2tldCBzaXplcyAoT1Y1MTEgb25seSkgKi8KKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfOTkyCTAKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfOTkzCTEKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNzY4CTIKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNzY5CTMKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNTEyCTQKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfNTEzCTUKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfMjU3CTYKKyNkZWZpbmUgT1Y1MTFfQUxUX1NJWkVfMAk3CisKKy8qIEFsdGVybmF0ZSBudW1iZXJzIGZvciB2YXJpb3VzIG1heCBwYWNrZXQgc2l6ZXMgKE9WNTExKyBvbmx5KSAqLworI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMAkwCisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8zMwkxCisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8xMjkJMgorI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMjU3CTMKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzM4NQk0CisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV81MTMJNQorI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfNzY5CTYKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzk2MQk3CisKKy8qIEFsdGVybmF0ZSBudW1iZXJzIGZvciB2YXJpb3VzIG1heCBwYWNrZXQgc2l6ZXMgKE9WNTE4KCspIG9ubHkpICovCisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzAJMAorI2RlZmluZSBPVjUxOF9BTFRfU0laRV8xMjgJMQorI2RlZmluZSBPVjUxOF9BTFRfU0laRV8yNTYJMgorI2RlZmluZSBPVjUxOF9BTFRfU0laRV8zODQJMworI2RlZmluZSBPVjUxOF9BTFRfU0laRV81MTIJNAorI2RlZmluZSBPVjUxOF9BTFRfU0laRV82NDAJNQorI2RlZmluZSBPVjUxOF9BTFRfU0laRV83NjgJNgorI2RlZmluZSBPVjUxOF9BTFRfU0laRV84OTYJNworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICBPVjc2MTAgUkVHSVNURVIgTU5FTU9OSUNTICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9WNzYxMCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19HQUlOICAgICAgICAgIDB4MDAJLyogZ2FpbiBzZXR0aW5nICg1OjApICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQkxVRSAgICAgICAgICAweDAxCS8qIGJsdWUgY2hhbm5lbCBiYWxhbmNlICovCisjZGVmaW5lIE9WNzYxMF9SRUdfUkVEICAgICAgICAgICAweDAyCS8qIHJlZCBjaGFubmVsIGJhbGFuY2UgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19TQVQgICAgICAgICAgIDB4MDMJLyogc2F0dXJhdGlvbiAqLworCQkJCQkvKiAwNCByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NOVCAgICAgICAgICAgMHgwNQkvKiBZIGNvbnRyYXN0ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQlJUICAgICAgICAgICAweDA2CS8qIFkgYnJpZ2h0bmVzcyAqLworCQkJCQkvKiAwOC0wYiByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0JMVUVfQklBUyAgICAgMHgwQwkvKiBibHVlIGNoYW5uZWwgYmlhcyAoNTowKSAqLworI2RlZmluZSBPVjc2MTBfUkVHX1JFRF9CSUFTICAgICAgMHgwRAkvKiByZWFkIGNoYW5uZWwgYmlhcyAoNTowKSAqLworI2RlZmluZSBPVjc2MTBfUkVHX0dBTU1BX0NPRUZGICAgMHgwRQkvKiBnYW1tYSBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX1dCX1JBTkdFICAgICAgMHgwRgkvKiBBRUMvQUxDL1MtQVdCIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRVhQICAgICAgICAgICAweDEwCS8qIG1hbnVhbCBleHBvc3VyZSBzZXR0aW5nICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ0xPQ0sgICAgICAgICAweDExCS8qIHBvbGFyaXR5L2Nsb2NrIHByZXNjYWxlciAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9BICAgICAgICAgMHgxMgkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0IgICAgICAgICAweDEzCS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fQyAgICAgICAgIDB4MTQJLyogbWlzYyBjb21tb24gcmVncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9EICAgICAgICAgMHgxNQkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRklFTERfRElWSURFICAweDE2CS8qIGZpZWxkIGludGVydmFsL21vZGUgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19IV0lOX1NUQVJUICAgIDB4MTcJLyogaG9yaXpvbnRhbCB3aW5kb3cgc3RhcnQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19IV0lOX0VORCAgICAgIDB4MTgJLyogaG9yaXpvbnRhbCB3aW5kb3cgZW5kICovCisjZGVmaW5lIE9WNzYxMF9SRUdfVldJTl9TVEFSVCAgICAweDE5CS8qIHZlcnRpY2FsIHdpbmRvdyBzdGFydCAqLworI2RlZmluZSBPVjc2MTBfUkVHX1ZXSU5fRU5EICAgICAgMHgxQQkvKiB2ZXJ0aWNhbCB3aW5kb3cgZW5kICovCisjZGVmaW5lIE9WNzYxMF9SRUdfUElYRUxfU0hJRlQgICAweDFCCS8qIHBpeGVsIHNoaWZ0ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfSURfSElHSCAgICAgICAweDFDCS8qIG1hbnVmYWN0dXJlciBJRCBNU0IgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19JRF9MT1cgICAgICAgIDB4MUQJLyogbWFudWZhY3R1cmVyIElEIExTQiAqLworCQkJCQkvKiAwZS0wZiByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9FICAgICAgICAgMHgyMAkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfWU9GRlNFVCAgICAgICAweDIxCS8qIFkgY2hhbm5lbCBvZmZzZXQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19VT0ZGU0VUICAgICAgIDB4MjIJLyogVSBjaGFubmVsIG9mZnNldCAqLworCQkJCQkvKiAyMyByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0VDVyAgICAgICAgICAgMHgyNAkvKiBFeHBvc3VyZSB3aGl0ZSBsZXZlbCBmb3IgQUVDICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRUNCICAgICAgICAgICAweDI1CS8qIEV4cG9zdXJlIGJsYWNrIGxldmVsIGZvciBBRUMgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fRiAgICAgICAgIDB4MjYJLyogbWlzYyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9HICAgICAgICAgMHgyNwkvKiBtaXNjIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0ggICAgICAgICAweDI4CS8qIG1pc2Mgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fSSAgICAgICAgIDB4MjkJLyogbWlzYyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0ZSQU1FUkFURV9IICAgMHgyQQkvKiBmcmFtZSByYXRlIE1TQiArIG1pc2MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19GUkFNRVJBVEVfTCAgIDB4MkIJLyogZnJhbWUgcmF0ZSBMU0IgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19BTEMgICAgICAgICAgIDB4MkMJLyogQXV0byBMZXZlbCBDb250cm9sIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0ogICAgICAgICAweDJECS8qIG1pc2Mgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19WT0ZGU0VUICAgICAgIDB4MkUJLyogViBjaGFubmVsIG9mZnNldCBhZGp1c3RtZW50ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQVJSQVlfQklBUwkgMHgyRgkvKiBBcnJheSBiaWFzIC0tIGRvbid0IGNoYW5nZSAqLworCQkJCQkvKiAzMC0zMiByZXNlcnZlZCAqLworI2RlZmluZSBPVjc2MTBfUkVHX1lHQU1NQSAgICAgICAgMHgzMwkvKiBtaXNjIGdhbW1hIHNldHRpbmdzICg3OjYpICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQklBU19BREpVU1QgICAweDM0CS8qIG1pc2MgYmlhcyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9MICAgICAgICAgMHgzNQkvKiBtaXNjIHNldHRpbmdzICovCisJCQkJCS8qIDM2LTM3IHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0sgICAgICAgICAweDM4CS8qIG1pc2MgcmVnaXN0ZXJzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgIEkyQyBBRERSRVNTRVMgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBPVjd4eDBfU0lEICAgMHg0MgorI2RlZmluZSBPVjZ4eDBfU0lEICAgMHhDMAorI2RlZmluZSBPVjh4eDBfU0lEICAgMHhBMAorI2RlZmluZSBLUzAxMjdfU0lEICAgMHhEOAorI2RlZmluZSBTQUE3MTExQV9TSUQgMHg0OAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgIE1JU0NFTExBTkVPVVMgREVGSU5FUyAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgSTJDX0NMT0NLX1BSRVNDQUxFUiAJMHgwMworCisjZGVmaW5lIEZSQU1FU19QRVJfREVTQwkJMTAJLyogRklYTUUgLSBXaGF0IHNob3VsZCB0aGlzIGJlPyAqLworI2RlZmluZSBNQVhfRlJBTUVfU0laRV9QRVJfREVTQwk5OTMJLyogRm9yIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0dWZmICovCisjZGVmaW5lIFBJWEVMU19QRVJfU0VHCQkyNTYJLyogUGl4ZWxzIHBlciBzZWdtZW50ICovCisKKyNkZWZpbmUgT1Y1MTFfRU5EUE9JTlRfQUREUkVTUwkxCS8qIElzb2MgZW5kcG9pbnQgbnVtYmVyICovCisKKyNkZWZpbmUgT1Y1MTFfTlVNRlJBTUVTCTIKKyNpZiBPVjUxMV9OVU1GUkFNRVMgPiBWSURFT19NQVhfRlJBTUUKKwkjZXJyb3IgIk9WNTExX05VTUZSQU1FUyBpcyB0b28gaGlnaCIKKyNlbmRpZgorCisjZGVmaW5lIE9WNTExX05VTVNCVUYJCTIKKworLyogQ29udHJvbCB0cmFuc2ZlcnMgdXNlIHVwIHRvIDQgYnl0ZXMgKi8KKyNkZWZpbmUgT1Y1MTFfQ0JVRl9TSVpFCQk0CisKKy8qIFNpemUgb2YgdXNiX21ha2VfcGF0aCgpIGJ1ZmZlciAqLworI2RlZmluZSBPVjUxMV9VU0JfUEFUSF9MRU4JNjQKKworLyogQnJpZGdlIHR5cGVzICovCitlbnVtIHsKKwlCUkdfVU5LTk9XTiwKKwlCUkdfT1Y1MTEsCisJQlJHX09WNTExUExVUywKKwlCUkdfT1Y1MTgsCisJQlJHX09WNTE4UExVUywKK307CisKKy8qIEJyaWRnZSBjbGFzc2VzICovCitlbnVtIHsKKwlCQ0xfVU5LTk9XTiwKKwlCQ0xfT1Y1MTEsCisJQkNMX09WNTE4LAorfTsKKworLyogU2Vuc29yIHR5cGVzICovCitlbnVtIHsKKwlTRU5fVU5LTk9XTiwKKwlTRU5fT1Y3NkJFLAorCVNFTl9PVjc2MTAsCisJU0VOX09WNzYyMCwKKwlTRU5fT1Y3NjIwQUUsCisJU0VOX09WNjYyMCwKKwlTRU5fT1Y2NjMwLAorCVNFTl9PVjY2MzBBRSwKKwlTRU5fT1Y2NjMwQUYsCisJU0VOX09WODYwMCwKKwlTRU5fS1MwMTI3LAorCVNFTl9LUzAxMjdCLAorCVNFTl9TQUE3MTExQSwKK307CisKK2VudW0geworCVNUQVRFX1NDQU5OSU5HLAkJLyogU2Nhbm5pbmcgZm9yIHN0YXJ0ICovCisJU1RBVEVfSEVBREVSLAkJLyogUGFyc2luZyBoZWFkZXIgKi8KKwlTVEFURV9MSU5FUywJCS8qIFBhcnNpbmcgbGluZXMgKi8KK307CisKKy8qIEJ1ZmZlciBzdGF0ZXMgKi8KK2VudW0geworCUJVRl9OT1RfQUxMT0NBVEVELAorCUJVRl9BTExPQ0FURUQsCit9OworCisvKiAtLS0tLS0tLS0gRGVmaW5pdGlvbiBvZiBpb2N0bCBpbnRlcmZhY2UgLS0tLS0tLS0tICovCisKKyNkZWZpbmUgT1Y1MTFfSU5URVJGQUNFX1ZFUiAxMDEKKworLyogTEVEIG9wdGlvbnMgKi8KK2VudW0geworCUxFRF9PRkYsCisJTEVEX09OLAorCUxFRF9BVVRPLAorfTsKKworLyogUmF3IGZyYW1lIGZvcm1hdHMgKi8KK2VudW0geworCVJBV0ZNVF9JTlZBTElELAorCVJBV0ZNVF9ZVVY0MDAsCisJUkFXRk1UX1lVVjQyMCwKKwlSQVdGTVRfWVVWNDIyLAorCVJBV0ZNVF9HQlI0MjIsCit9OworCitzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCB7CisJdW5zaWduZWQgY2hhciBzbGF2ZTsgLyogV3JpdGUgc2xhdmUgSUQgKHJlYWQgSUQgLSAxKSAqLworCXVuc2lnbmVkIGNoYXIgcmVnOyAgIC8qIEluZGV4IG9mIHJlZ2lzdGVyICovCisJdW5zaWduZWQgY2hhciB2YWx1ZTsgLyogVXNlciBzZXRzIHRoaXMgdy8gd3JpdGUsIGRyaXZlciBkb2VzIHcvIHJlYWQgKi8KKwl1bnNpZ25lZCBjaGFyIG1hc2s7ICAvKiBCaXRzIHRvIGJlIGNoYW5nZWQuIE5vdCB1c2VkIHdpdGggcmVhZCBvcHMgKi8KK307CisKKy8qIGlvY3RscyAqLworI2RlZmluZSBPVjUxMUlPQ19XSTJDICAgICBfSU9XKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgNSwgXAorCQkJICAgICAgIHN0cnVjdCBvdjUxMV9pMmNfc3RydWN0KQorI2RlZmluZSBPVjUxMUlPQ19SSTJDICAgIF9JT1dSKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgNiwgXAorCQkJICAgICAgIHN0cnVjdCBvdjUxMV9pMmNfc3RydWN0KQorLyogLS0tLS0tLS0tLS0tLSBFbmQgSU9DVEwgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCB1c2Jfb3Y1MTE7CQkvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCisKK3N0cnVjdCBvdjUxMV9zYnVmIHsKKwlzdHJ1Y3QgdXNiX292NTExICpvdjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IG47Cit9OworCitlbnVtIHsKKwlGUkFNRV9VTlVTRUQsCQkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLworCUZSQU1FX1JFQURZLAkJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGUkFNRV9HUkFCQklORywJCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLworCUZSQU1FX0RPTkUsCQkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KKwlGUkFNRV9FUlJPUiwJCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworfTsKKworc3RydWN0IG92NTExX3JlZ3ZhbHMgeworCWVudW0geworCQlPVjUxMV9ET05FX0JVUywKKwkJT1Y1MTFfUkVHX0JVUywKKwkJT1Y1MTFfSTJDX0JVUywKKwl9IGJ1czsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKK307CisKK3N0cnVjdCBvdjUxMV9mcmFtZSB7CisJaW50IGZyYW1lbnVtOwkJLyogSW5kZXggb2YgdGhpcyBmcmFtZSAqLworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIEZyYW1lIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgKnRlbXBkYXRhOyAvKiBUZW1wIGJ1ZmZlciBmb3IgbXVsdGktc3RhZ2UgY29udmVyc2lvbnMgKi8KKwl1bnNpZ25lZCBjaGFyICpyYXdkYXRhOwkvKiBSYXcgY2FtZXJhIGRhdGEgYnVmZmVyICovCisJdW5zaWduZWQgY2hhciAqY29tcGJ1ZjsJLyogVGVtcCBidWZmZXIgZm9yIGRlY29tcHJlc3NvciAqLworCisJaW50IGRlcHRoOwkJLyogQnl0ZXMgcGVyIHBpeGVsICovCisJaW50IHdpZHRoOwkJLyogV2lkdGggYXBwbGljYXRpb24gaXMgZXhwZWN0aW5nICovCisJaW50IGhlaWdodDsJCS8qIEhlaWdodCBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgKi8KKworCWludCByYXd3aWR0aDsJCS8qIEFjdHVhbCB3aWR0aCBvZiBmcmFtZSBzZW50IGZyb20gY2FtZXJhICovCisJaW50IHJhd2hlaWdodDsJCS8qIEFjdHVhbCBoZWlnaHQgb2YgZnJhbWUgc2VudCBmcm9tIGNhbWVyYSAqLworCisJaW50IHN1Yl9mbGFnOwkJLyogU3ViLWNhcHR1cmUgbW9kZSBmb3IgdGhpcyBmcmFtZT8gKi8KKwl1bnNpZ25lZCBpbnQgZm9ybWF0OwkvKiBGb3JtYXQgZm9yIHRoaXMgZnJhbWUgKi8KKwlpbnQgY29tcHJlc3NlZDsJCS8qIElzIGZyYW1lIGNvbXByZXNzZWQ/ICovCisKKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCWludCBzY2Fuc3RhdGU7CQkvKiBTdGF0ZSBvZiBzY2FubmluZyAqLworCisJaW50IGJ5dGVzX3JlY3ZkOwkvKiBOdW1iZXIgb2YgaW1hZ2UgYnl0ZXMgcmVjZWl2ZWQgZnJvbSBjYW1lcmEgKi8KKworCWxvbmcgYnl0ZXNfcmVhZDsJLyogQW1vdW50IHRoYXQgaGFzIGJlZW4gcmVhZCgpICovCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKworCWludCBzbmFwc2hvdDsJCS8qIFRydWUgaWYgZnJhbWUgd2FzIGEgc25hcHNob3QgKi8KK307CisKKyNkZWZpbmUgREVDT01QX0lOVEVSRkFDRV9WRVIgNAorCisvKiBDb21wcmVzc2lvbiBtb2R1bGUgb3BlcmF0aW9ucyAqLworc3RydWN0IG92NTF4X2RlY29tcF9vcHMgeworCWludCAoKmRlY29tcF80MDApKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkgIGludCwgaW50LCBpbnQpOworCWludCAoKmRlY29tcF80MjApKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkgIGludCwgaW50LCBpbnQpOworCWludCAoKmRlY29tcF80MjIpKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCisJCQkgIGludCwgaW50LCBpbnQpOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworfTsKKworc3RydWN0IHVzYl9vdjUxMSB7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCisJaW50IGN1c3RvbWlkOworCWNoYXIgKmRlc2M7CisJdW5zaWduZWQgY2hhciBpZmFjZTsKKwljaGFyIHVzYl9wYXRoW09WNTExX1VTQl9QQVRIX0xFTl07CisKKwkvKiBEZXRlcm1pbmVkIGJ5IHNlbnNvciB0eXBlICovCisJaW50IG1heHdpZHRoOworCWludCBtYXhoZWlnaHQ7CisJaW50IG1pbndpZHRoOworCWludCBtaW5oZWlnaHQ7CisKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29sb3VyOworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworCWludCB3aGl0ZW5lc3M7CisJaW50IGV4cG9zdXJlOworCWludCBhdXRvX2JydDsJCS8qIEF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIGZsYWcgKi8KKwlpbnQgYXV0b19nYWluOwkJLyogQXV0byBnYWluIGNvbnRyb2wgZW5hYmxlZCBmbGFnICovCisJaW50IGF1dG9fZXhwOwkJLyogQXV0byBleHBvc3VyZSBlbmFibGVkIGZsYWcgKi8KKwlpbnQgYmFja2xpZ2h0OwkJLyogQmFja2xpZ2h0IGV4cG9zdXJlIGFsZ29yaXRobSBmbGFnICovCisJaW50IG1pcnJvcjsJCS8qIEltYWdlIGlzIHJldmVyc2VkIGhvcml6b250YWxseSAqLworCisJaW50IGxlZF9wb2xpY3k7CQkvKiBMRUQ6IG9mZnxvbnxhdXRvOyBPVjUxMSsgb25seSAqLworCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkvKiBTZXJpYWxpemVzIHVzZXItYWNjZXNzaWJsZSBvcGVyYXRpb25zICovCisJaW50IHVzZXI7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCisKKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyBJc29jaHJvbm91cz8gKi8KKwlpbnQgZ3JhYmJpbmc7CQkvKiBBcmUgd2UgZ3JhYmJpbmc/ICovCisKKwlpbnQgY29tcHJlc3M7CQkvKiBTaG91bGQgdGhlIG5leHQgZnJhbWUgYmUgY29tcHJlc3NlZD8gKi8KKwlpbnQgY29tcHJlc3NfaW5pdGVkOwkvKiBBcmUgY29tcHJlc3Npb24gcGFyYW1zIHVwbG9hZGVkPyAqLworCisJaW50IGxpZ2h0ZnJlcTsJCS8qIFBvd2VyIChsaWdodGluZykgZnJlcXVlbmN5ICovCisJaW50IGJhbmRmaWx0OwkJLyogQmFuZGluZyBmaWx0ZXIgZW5hYmxlZCBmbGFnICovCisKKwl1bnNpZ25lZCBjaGFyICpmYnVmOwkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLworCXVuc2lnbmVkIGNoYXIgKnRlbXBmYnVmOyAvKiBUZW1wb3JhcnkgKGludGVybWVkaWF0ZSkgYnVmZmVyIGFyZWEgKi8KKwl1bnNpZ25lZCBjaGFyICpyYXdmYnVmOwkvKiBSYXcgY2FtZXJhIGRhdGEgYnVmZmVyIGFyZWEgKi8KKworCWludCBzdWJfZmxhZzsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIG9uIGZsYWcgKi8KKwlpbnQgc3VieDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIHggb2Zmc2V0ICovCisJaW50IHN1Ynk7CQkvKiBQaXggQXJyYXkgc3ViY2FwdHVyZSB5IG9mZnNldCAqLworCWludCBzdWJ3OwkJLyogUGl4IEFycmF5IHN1YmNhcHR1cmUgd2lkdGggKi8KKwlpbnQgc3ViaDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIGhlaWdodCAqLworCisJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgc2J1ZiAqLworCXN0cnVjdCBvdjUxMV9mcmFtZSBmcmFtZVtPVjUxMV9OVU1GUkFNRVNdOwkKKworCXN0cnVjdCBvdjUxMV9zYnVmIHNidWZbT1Y1MTFfTlVNU0JVRl07CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKworCWludCBzbmFwX2VuYWJsZWQ7CS8qIFNuYXBzaG90IG1vZGUgZW5hYmxlZCAqLworCQorCWludCBicmlkZ2U7CQkvKiBUeXBlIG9mIGJyaWRnZSAoQlJHXyopICovCisJaW50IGJjbGFzczsJCS8qIENsYXNzIG9mIGJyaWRnZSAoQkNMXyopICovCisJaW50IHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKFNFTl8qKSAqLworCisJaW50IHBhY2tldF9zaXplOwkvKiBGcmFtZSBzaXplIHBlciBpc29jIGRlc2MgKi8KKwlpbnQgcGFja2V0X251bWJlcmluZzsJLyogSXMgSVNPIGZyYW1lIG51bWJlcmluZyBlbmFibGVkPyAqLworCisJc3RydWN0IHNlbWFwaG9yZSBwYXJhbV9sb2NrOwkvKiBwYXJhbXMgbG9jayBmb3IgdGhpcyBjYW1lcmEgKi8KKworCS8qIEZyYW1lYnVmZmVyL3NidWYgbWFuYWdlbWVudCAqLworCWludCBidWZfc3RhdGU7CisJc3RydWN0IHNlbWFwaG9yZSBidWZfbG9jazsKKworCXN0cnVjdCBvdjUxeF9kZWNvbXBfb3BzICpkZWNvbXBfb3BzOworCisJLyogU3RvcCBzdHJlYW1pbmcgd2hpbGUgY2hhbmdpbmcgcGljdHVyZSBzZXR0aW5ncyAqLworCWludCBzdG9wX2R1cmluZ19zZXQ7CisKKwlpbnQgc3RvcHBlZDsJCS8qIFN0cmVhbWluZyBpcyB0ZW1wb3JhcmlseSBwYXVzZWQgKi8KKworCS8qIFZpZGVvIGRlY29kZXIgc3R1ZmYgKi8KKwlpbnQgaW5wdXQ7CQkvKiBDb21wb3NpdGUsIFMtVklERU8sIGV0Yy4uLiAqLworCWludCBudW1faW5wdXRzOwkJLyogTnVtYmVyIG9mIGlucHV0cyAqLworCWludCBub3JtOyAJCS8qIE5UU0MgLyBQQUwgLyBTRUNBTSAqLworCWludCBoYXNfZGVjb2RlcjsJLyogRGV2aWNlIGhhcyBhIHZpZGVvIGRlY29kZXIgKi8KKwlpbnQgcGFsOwkJLyogRGV2aWNlIGlzIGRlc2lnbmVkIGZvciBQQUwgcmVzb2x1dGlvbiAqLworCisJLyogSTJDIGludGVyZmFjZSAqLworCXN0cnVjdCBzZW1hcGhvcmUgaTJjX2xvY2s7CSAgLyogUHJvdGVjdCBJMkMgY29udHJvbGxlciByZWdzICovCisJdW5zaWduZWQgY2hhciBwcmltYXJ5X2kyY19zbGF2ZTsgIC8qIEkyQyB3cml0ZSBpZCBvZiBzZW5zb3IgKi8KKworCS8qIENvbnRyb2wgdHJhbnNhY3Rpb24gc3R1ZmYgKi8KKwl1bnNpZ25lZCBjaGFyICpjYnVmOwkJLyogQnVmZmVyIGZvciBwYXlsb2FkICovCisJc3RydWN0IHNlbWFwaG9yZSBjYnVmX2xvY2s7Cit9OworCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhIGxpc3Qgb2YgdmFsdWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIHN5bWJvbGljIG5hbWVzICovCitzdHJ1Y3Qgc3ltYm9saWNfbGlzdCB7CisJaW50IG51bTsKKwljaGFyICpuYW1lOworfTsKKworI2RlZmluZSBOT1RfREVGSU5FRF9TVFIgIlVua25vd24iCisKKy8qIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIHN5bWJvbGljX2xpc3QgYXJyYXkuIFRoZQorICogZW5kIG9mIHRoZSBsaXN0IG11c3QgYmUgbWFya2VkIHdpdGggYW4gZWxlbWVudCB0aGF0IGhhcyBhIE5VTEwgbmFtZS4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICogCitzeW1ib2xpYyhzdHJ1Y3Qgc3ltYm9saWNfbGlzdCBsaXN0W10sIGludCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBsaXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCQkJaWYgKGxpc3RbaV0ubnVtID09IG51bSkKKwkJCQlyZXR1cm4gKGxpc3RbaV0ubmFtZSk7CisKKwlyZXR1cm4gKE5PVF9ERUZJTkVEX1NUUik7Cit9CisKKy8qIENvbXByZXNzaW9uIHN0dWZmICovCisKKyNkZWZpbmUgT1Y1MTFfUVVBTlRBQkxFU0laRQk2NAorI2RlZmluZSBPVjUxOF9RVUFOVEFCTEVTSVpFCTMyCisKKyNkZWZpbmUgT1Y1MTFfWVFVQU5UQUJMRSB7IFwKKwkwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCBcCisJMSwgMSwgMSwgMiwgMiwgMywgNCwgNCwgXAorCTEsIDEsIDIsIDIsIDMsIDQsIDQsIDQsIFwKKwkyLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCBcCisJMiwgMiwgMywgNCwgNCwgNSwgNSwgNSwgXAorCTMsIDMsIDQsIDQsIDUsIDUsIDUsIDUsIFwKKwkzLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCBcCisJNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSAgXAorfQorCisjZGVmaW5lIE9WNTExX1VWUVVBTlRBQkxFIHsgXAorCTAsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIFwKKwkyLCAyLCAyLCA0LCA0LCA0LCA0LCA0LCBcCisJMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgXAorCTMsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIFwKKwk0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCBcCisJNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgXAorCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIFwKKwk0LCA0LCA0LCA0LCA0LCA0LCA0LCA0ICBcCit9CisKKyNkZWZpbmUgT1Y1MThfWVFVQU5UQUJMRSB7IFwKKwk1LCA0LCA1LCA2LCA2LCA3LCA3LCA3LCBcCisJNSwgNSwgNSwgNSwgNiwgNywgNywgNywgXAorCTYsIDYsIDYsIDYsIDcsIDcsIDcsIDgsIFwKKwk3LCA3LCA2LCA3LCA3LCA3LCA4LCA4ICBcCit9CisKKyNkZWZpbmUgT1Y1MThfVVZRVUFOVEFCTEUgeyBcCisJNiwgNiwgNiwgNywgNywgNywgNywgNywgXAorCTYsIDYsIDYsIDcsIDcsIDcsIDcsIDcsIFwKKwk2LCA2LCA2LCA3LCA3LCA3LCA3LCA4LCBcCisJNywgNywgNywgNywgNywgNywgOCwgOCAgXAorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9DaGFuZ2VMb2cgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWI3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMTQzIEBACis5LjAuMgorCisqIEFkZGluZyAjaWZkZWYgdG8gY29tcGlsZSBQV0MgYmVmb3JlIGFuZCBhZnRlciAyLjYuNQorCis5LjAuMQorCis5LjAKKworCis4LjEyCisKKyogSW1wbGVtZW50IG1vdG9yaXplZCBwYW4vdGlsdCBmZWF0dXJlIGZvciBMb2dpdGVjaCBRdWlja0NhbSBPcmJpdC9TcGVyZS4KKworOC4xMS4xCisKKyogRml4IGZvciBQQ1ZDNzIwLzQwLCB3b3VsZCBub3QgYmUgYWJsZSB0byBzZXQgdmlkZW9tb2RlCisqIEZpeCBmb3IgU2Ftc3VuZyBNUEMgbW9kZWxzLCBhcHBlYXJhbnRseSB0aGV5IGFyZSBiYXNlZCBvbiBhIG5ld2VyIGNoaXBzZXQKKworOC4xMQorCisqIDIwIGRldl9oaW50cyAocGVyIHJlcXVlc3QpCisqIEhvdCB1bnBsdWdnaW5nIHNob3VsZCBiZSBiZXR0ZXIsIG5vIG1vcmUgZGFuZ2xpbmcgcG9pbnRlcnMgb3IgbWVtb3J5IGxlYWtzCisqIEFkZGVkIHJlc2VydmVkIExvZ2l0ZWNoIHdlYmNhbSBJRHMKKyogRGV2aWNlIG5vdyByZW1lbWJlcnMgc2l6ZSAmIGZwcyBiZXR3ZWVuIGNsb3NlKCkvb3BlbigpCisqIFJlbW92ZWQgcGFsZXR0ZSBzdHVmZiBhbHRvZ2V0aGVyCisKKzguMTAuMQorCisqIEFkZGVkIElEcyBmb3IgUENWQzcyMEsvNDAgYW5kIENyZWF0aXZlIExhYnMgV2ViY2FtIFBybworCis4LjEwCisKKyogRml4ZWQgSUQgZm9yIFF1aWNrQ2FtIE5vdGVib29rIHBybworKiBBZGRlZCBHUkVBTFNJWkUgaW9jdGwoKSBjYWxsCisqIEZpeGVkIGJ1ZyBpbiBjYXNlIFBXQ1ggd2FzIG5vdCBsb2FkZWQgYW5kIGludmFsaWQgc2l6ZSB3YXMgc2V0CisKKzguOQorCisqIE1lcmdpbmcgd2l0aCBrZXJuZWwgMi41LjQ5CisqIEFkZGluZyBJRHMgZm9yIFF1aWNrQ2FtIFpvb20gJiBRdWlja0NhbSBOb3RlYm9vaworCis4LjgKKworKiBGaXhpbmcgJ2xlZHMnIHBhcmFtZXRlcgorKiBBZGRpbmcgSURzIGZvciBMb2dpdGVjaCBRdWlja0NhbSBQcm8gNDAwMAorKiBNYWtpbmcgVVJCIGluaXQvY2xlYW51cCBhIGxpdHRsZSBuaWNlcgorCis4LjcKKworKiBJbmNvcnBvcmF0aW5nIGNoYW5nZXMgaW4gaW9jdGwoKSBwYXJhbWV0ZXIgcGFzc2luZworKiBBbHNvIGNoYW5nZXMgdG8gVVJCIG1lY2hhbmlzbQorCis4LjYKKworKiBBZGRlZCBJRCdzIGZvciBWaXNpb25pdGUgVkNTIFVNMTAwIGFuZCBVQzMwMAorKiBSZW1vdmVkIFlVVjQyMC1pbnRlcmxhY2VkIHBhbGV0dGUgYWx0b2dldGhlciAod2FzIGNvbmZ1c2luZykKKyogUmVtb3ZlZCBNSVJST1Igc3R1ZmYgYXMgaXQgZGlkbid0IHdvcmsgYW55d2F5CisqIEZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSAnbGVkcycgcGFyYW1ldGVyICh3b3VsZG4ndCBibGluaykKKyogQWRkZWQgaW9jdGwoKXMgZm9yIGFkdmFuY2VkIGZlYXR1cmVzOiAnZXh0ZW5kZWQnIHdoaXRlYmFsYW5jZSBpb2N0bCgpcywKKyAgQ09OVE9VUiwgQkFDS0xJR0hULCBGTElDS0VSLCBEWU5OT0lTRS4KKyogVklESU9DR0NBUC5uYW1lIG5vdyBjb250YWlucyByZWFsIGNhbWVyYSBtb2RlbCBuYW1lIGluc3RlYWQgb2YKKyAgJ1BoaWxpcHMgeHh4IHdlYmNhbScKKyogQWRkZWQgUFJPQkUgaW9jdGwgKHNlZSBwcmV2aW91cyBwb2ludCAmIEFQSSBkb2MpCisKKzguNQorCisqIEFkZGluZyBJRHMgZm9yIENyZWF0aXZlIExhYnMgV2ViY2FtIDUKKyogQWRkaW5nIElEcyBmb3IgU09URUMgQ01TLTAwMSB3ZWJjYW0KKyogU29sdmluZyBwb3NzaWJsZSBoYW5nIGluIFZJRElPQ1NZTkMgd2hlbiB1bnBsdWdnaW5nIHRoZSBjYW0gCisqIEZvcmdvdCB0byByZXR1cm4gc3RydWN0dXJlIGluIFZJRElPQ1BXQ0dBV0IsIG9vcHMKKyogVGltZSBpbnRlcnZhbCBmb3IgdGhlIExFRHMgYXJlIG5vdyBpbiBtaWxsaXNlY29uZHMKKworOC40CisKKyogRml4aW5nIHBvd2VyX3NhdmUgb3B0aW9uIGZvciBWZXN0YSByYW5nZQorKiBIYW5kbGluZyBuZXcgZXJyb3IgY29kZXMgaW4gSVNPQyBjYWxsYmFjaworKiBBZGRpbmcgZGV2X2hpbnQgbW9kdWxlIHBhcmFtZXRlciwgdG8gc3BlY2lmeSAvZGV2L3ZpZGVvWCBkZXZpY2Ugbm9kZXMKKworOC4zCisKKyogQWRkaW5nIFNhbXN1bmcgQzEwIGFuZCBDMzAgY2FtZXJhcworKiBSZW1vdmluZyBwYWxldHRlIG1vZHVsZSBwYXJhbWV0ZXIKKyogRml4ZWQgdHlwbyBpbiBJRCBvZiBRdWlja0NhbSAzMDAwIFBybworKiBBZGRpbmcgTEVEIHNldHRpbmdzIChibGlua2luZyB3aGlsZSBpbiB1c2UpIGZvciBUb1VDYW0gY2FtZXJhcy4KKyogVHVybnMgTEVEIG9mZiB3aGVuIGNhbWVyYSBpcyBub3QgaW4gdXNlLgorCis4LjIKKworKiBNYWtpbmcgbW9kdWxlIG1vcmUgc2lsZW50IHdoZW4gdHJhY2UgPSAwIAorKiBBZGRpbmcgUXVpY2tDYW0gMzAwMCBQcm8gSURzCisqIENocm9taW5hbmNlIGNvbnRyb2wgZm9yIHRoZSBWZXN0YSBjYW1lcmFzCisqIEhvcGVmdWxseSBmaXhlZCBwcm9ibGVtcyBvbiBtYWNoaW5lcyB3aXRoIEJJR01FTSBhbmQgPiAxR0Igb2YgUkFNCisqIEluY2x1ZGVkIE9saXZlciBOZXVrZW0ncyBsb2NrX2tlcm5lbCgpIHBhdGNoCisqIEFsbG9jYXRlcyBsZXNzIG1lbW9yeSBmb3IgaW1hZ2UgYnVmZmVycworKiBBZGRzIGlvY3RsKClzIGZvciB0aGUgd2hpdGViYWxhbmNpbmcKKworOC4xCisKKyogQWRkaW5nIHN1cHBvcnQgZm9yIDc1MAorKiBBZGRpbmcgVjRMIEdBVURJTy9TQVVESU8vVU5JVCBpb2N0bCgpIGNhbGxzCisKKzguMAorKiAnZGFtYWdlIGNvbnRyb2wnIGFmdGVyIGluY2x1c2lvbiBpbiAyLjQuNS4KKyogQ2hhbmdlZCB3YWl0LXF1ZXVlIG1lY2hhbmlzbSBpbiByZWFkL21tYXAvcG9sbCBhY2NvcmRpbmcgdG8gdGhlIGJvb2suCisqIEluY2x1ZGVkIFlVVjQyMFAgcGFsZXR0ZS4KKyogQ2hhbmdlZCBpbnRlcmZhY2UgdG8gZGVjb21wcmVzc29yIG1vZHVsZS4KKyogQ2xlYW5lZCB1cCBwd2Mgc3RydWN0dXJlIGEgYml0LgorCis3LjAKKworKiBGaXhlZCBidWcgaW4gdmN2dF80MjBpX3l1eXY7IGV4dHJhIHZhcmlhYmxlcyBvbiBzdGFjayB3ZXJlIG1pc2FsaWduZWQuCisqIFRoZXJlIGlzIG5vdyBhIGNsZWFyIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBpbWFnZSBzaXplIGlzIHNlbGVjdGVkIHRoYXQKKyAgaXMgb25seSBzdXBwb3J0ZWQgdXNpbmcgdGhlIGRlY29tcHJlc3NvciwgYW5kIHRoZSBkZWNvbXByZXNzb3IgaXNuJ3QKKyAgbG9hZGVkLgorKiBXaGVuIHRoZSBkZWNvbXByZXNzb3Igd2Fzbid0IGxvYWRlZCwgc2VsZWN0aW5nIGxhcmdlIGltYWdlIHNpemUKKyAgd291bGQgY3JlYXRlIHNrZXdlZCBvciBkb3VibGUgaW1hZ2VzLgorCis2LjMKKworKiBJbnRyb2R1Y2VkIHNwaW5sb2NrcyBmb3IgdGhlIGJ1ZmZlciBwb2ludGVyIG1hbmlwdWxhdGlvbjsgYSBudW1iZXIgb2YKKyAgcmVwb3J0cyBzZWVtIHRvIHN1Z2dlc3QgdGhlIGRvd24oKS91cCgpIHNlbWFwaG9yZXMgd2VyZSB0aGUgY2F1c2Ugb2YKKyAgbG9ja3Vwcywgc2luY2UgdGhleSBhcmUgbm90IHN1aXRhYmxlIGZvciBpbnRlcnJ1cHQvdXNlciBsb2NraW5nLgorKiBTZXBhcmF0ZWQgZGVjb21wcmVzc29yIGFuZCBjb3JlIGNvZGUgaW50byAyIG1vZHVsZXMuCisKKzYuMgorCisqIE5vbi1pbnRlZ3JhbCBpbWFnZSBzaXplcyBhcmUgbm93IHBhZGRlZCB3aXRoIGdyYXkgb3IgYmxhY2suCisqIEFkZGVkIFNIVVRURVJTUEVFRCBpb2N0bCgpLgorKiBGaXhlZCBidWdsZXQgaW4gVklESU9DUFdDU0FHQzsgdGhlIGZ1bmN0aW9uIHdvdWxkIGFsd2F5cyByZXR1cm4gYW4gZXJyb3IsCisgIGV2ZW4gdGhvdWdoIHRoZSBjYWxsIHN1Y2NlZWRlZC4KKyogQWRkZWQgaG90cGx1ZyBzdXBwb3J0IGZvciAyLjQuKi4KKyogTWVtb3J5OiB0aGUgNjQ1LzY0NiB1c2VzIGxlc3MgbWVtb3J5IG5vdy4KKworNi4xCisKKyogVklESU9DU1BJQ1QgcmV0dXJucyAtRUlOVkFMIHdpdGggaW52YWxpZCBwYWxldHRlcy4KKyogQWRkZWQgc2F0dXJhdGlvbiBjb250cm9sLgorKiBTcGxpdCBkZWNvbXByZXNzb3JzIGZyb20gcmVzdC4KKyogRml4ZWQgYnVnIHRoYXQgd291bGQgcmVzZXQgdGhlIGZyYW1lcmF0ZSB0byB0aGUgZGVmYXVsdCBmcmFtZXJhdGUgaWYgCisgIHRoZSByYXRlIGZpZWxkIHdhcyBzZXQgdG8gMCAod2hpY2ggaXMgbm90IHdoYXQgSSBpbnRlbmRlZCwgbmwuIGRvIG5vdCAKKyAgY2hhbmdlIHRoZSBmcmFtZXJhdGUhKS4KKyogVklESU9DUFdDU0NRVUFMIChzZXR0aW5nIGNvbXByZXNzaW9uIHF1YWxpdHkpIG5vdyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkuCisqIFdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSA3MzAgc2Vuc29yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjQxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAoraWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQorCitwd2Mtb2Jqcwk6PSBwd2MtaWYubyBwd2MtbWlzYy5vIHB3Yy1jdHJsLm8gcHdjLXVuY29tcHJlc3MubyBwd2MtZGVjMS5vIHB3Yy1kZWMyMy5vIHB3Yy1raWFyYS5vIHB3Yy10aW1vbi5vCisKK29iai0kKENPTkZJR19VU0JfUFdDKSArPSBwd2MubworCitlbHNlCisKK0tESVIgOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCitQV0QgOj0gJChzaGVsbCBwd2QpCisKK2RlZmF1bHQ6CisJJChNQUtFKSAtQyAkKEtESVIpIFNVQkRJUlM9JChQV0QpIG1vZHVsZXMKKworZW5kaWYKKworY2xlYW46CisJcm0gLWYgKi5bb2FzXSAuKi5mbGFncyAqLmtvIC4qLmNtZCAuKi5kIC4qLnRtcCAqLm1vZC5jIAorCXJtIC1yZiAudG1wX3ZlcnNpb25zCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9waGlsaXBzLnR4dCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9waGlsaXBzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE2NDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3BoaWxpcHMudHh0CkBAIC0wLDAgKzEsMjM2IEBACitUaGlzIGZpbGUgY29udGFpbnMgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciB0aGUgUGhpbGlwcyBhbmQgT0VNIHdlYmNhbXMuCitFLW1haWw6IHdlYmNhbUBzbWNjLmRlbW9uLm5sICAgICAgICAgICAgICAgICAgICAgICAgTGFzdCB1cGRhdGVkOiAyMDA0LTAxLTE5CitTaXRlOiBodHRwOi8vd3d3LnNtY2MuZGVtb24ubmwvd2ViY2FtLworCitBcyBvZiB0aGlzIG1vbWVudCwgdGhlIGZvbGxvd2luZyBjYW1lcmFzIGFyZSBzdXBwb3J0ZWQ6CisgKiBQaGlsaXBzIFBDQTY0NQorICogUGhpbGlwcyBQQ0E2NDYKKyAqIFBoaWxpcHMgUENWQzY3NQorICogUGhpbGlwcyBQQ1ZDNjgwCisgKiBQaGlsaXBzIFBDVkM2OTAKKyAqIFBoaWxpcHMgUENWQzcyMC80MAorICogUGhpbGlwcyBQQ1ZDNzMwCisgKiBQaGlsaXBzIFBDVkM3NDAKKyAqIFBoaWxpcHMgUENWQzc1MAorICogQXNrZXkgVkMwMTAKKyAqIENyZWF0aXZlIExhYnMgV2ViY2FtIDUKKyAqIENyZWF0aXZlIExhYnMgV2ViY2FtIFBybyBFeAorICogTG9naXRlY2ggUXVpY2tDYW0gMzAwMCBQcm8KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIDQwMDAgUHJvCisgKiBMb2dpdGVjaCBRdWlja0NhbSBOb3RlYm9vayBQcm8KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIE9yYml0CisgKiBMb2dpdGVjaCBRdWlja0NhbSBTcGhlcmUKKyAqIFNhbXN1bmcgTVBDLUMxMAorICogU2Ftc3VuZyBNUEMtQzMwCisgKiBTb3RlYyBBZmluYSBFeWUKKyAqIEFNRSBDVS0wMDEKKyAqIFZpc2lvbml0ZSBWQ1MtVU0xMDAKKyAqIFZpc2lvbml0ZSBWQ1MtVUMzMDAKKworVGhlIG1haW4gd2VicGFnZSBmb3IgdGhlIFBoaWxpcHMgZHJpdmVyIGlzIGF0IHRoZSBhZGRyZXNzIGFib3ZlLiBJdCBjb250YWlucworYSBsb3Qgb2YgZXh0cmEgaW5mb3JtYXRpb24sIGEgRkFRLCBhbmQgdGhlIGJpbmFyeSBwbHVnaW4gJ1BXQ1gnLiBUaGlzIHBsdWdpbgorY29udGFpbnMgZGVjb21wcmVzc2lvbiByb3V0aW5lcyB0aGF0IGFsbG93IHlvdSB0byB1c2UgaGlnaGVyIGltYWdlIHNpemVzIGFuZAorZnJhbWVyYXRlczsgaW4gYWRkaXRpb24gdGhlIHdlYmNhbSB1c2VzIGxlc3MgYmFuZHdpZHRoIG9uIHRoZSBVU0IgYnVzIChoYW5keQoraWYgeW91IHdhbnQgdG8gcnVuIG1vcmUgdGhhbiAxIGNhbWVyYSBzaW11bHRhbmVvdXNseSkuIFRoZXNlIHJvdXRpbmVzIGZhbGwKK3VuZGVyIGEgTkRBLCBhbmQgbWF5IHRoZXJlZm9yIG5vdCBiZSBkaXN0cmlidXRlZCBhcyBzb3VyY2U7IGhvd2V2ZXIsIGl0cyB1c2UKK2lzIGNvbXBsZXRlbHkgb3B0aW9uYWwuCisKK1lvdSBjYW4gYnVpbGQgdGhpcyBjb2RlIGVpdGhlciBpbnRvIHlvdXIga2VybmVsLCBvciBhcyBhIG1vZHVsZS4gSSByZWNvbW1lbmQKK3RoZSBsYXR0ZXIsIHNpbmNlIGl0IG1ha2VzIHRyb3VibGVzaG9vdGluZyBhIGxvdCBlYXNpZXIuIFRoZSBidWlsdC1pbgorbWljcm9waG9uZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgVVNCIEF1ZGlvIGNsYXNzLgorCitXaGVuIHlvdSBsb2FkIHRoZSBtb2R1bGUgeW91IGNhbiBzZXQgc29tZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUKK2NhbWVyYTsgc29tZSBwcm9ncmFtcyBkZXBlbmQgb24gYSBwYXJ0aWN1bGFyIGltYWdlLXNpemUgb3IgLWZvcm1hdCBhbmQKK2Rvbid0IGtub3cgaG93IHRvIHNldCBpdCBwcm9wZXJseSBpbiB0aGUgZHJpdmVyLiBUaGUgb3B0aW9ucyBhcmU6CisKK3NpemUKKyAgIENhbiBiZSBvbmUgb2YgJ3NxY2lmJywgJ3FzaWYnLCAncWNpZicsICdzaWYnLCAnY2lmJyBvcgorICAgJ3ZnYScsIGZvciBhbiBpbWFnZSBzaXplIG9mIHJlc3AuIDEyOHg5NiwgMTYweDEyMCwgMTc2eDE0NCwKKyAgIDMyMHgyNDAsIDM1MngyODggYW5kIDY0MHg0ODAgKG9mIGNvdXJzZSwgb25seSBmb3IgdGhvc2UgY2FtZXJhcyB0aGF0IAorICAgc3VwcG9ydCB0aGVzZSByZXNvbHV0aW9ucykuCisKK2ZwcworICAgU3BlY2lmaWVzIHRoZSBkZXNpcmVkIGZyYW1lcmF0ZS4gSXMgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgNC0zMC4KKworZmJ1ZnMKKyAgIFRoaXMgcGFyYW10ZXIgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgYnVmZmVycyB0byB1c2UgZm9yIHN0b3JpbmcgCisgICBmcmFtZXMgZnJvbSB0aGUgY2FtLiBUaGlzIHdpbGwgaGVscCBpZiB0aGUgcHJvY2VzcyB0aGF0IHJlYWRzIGltYWdlcyBmcm9tIAorICAgdGhlIGNhbSBpcyBhIGJpdCBzbG93IG9yIG1vbWVudGFyZWx5IGJ1c3kuIEhvd2V2ZXIsIG9uIHNsb3cgbWFjaGluZXMgaXQgCisgICBvbmx5IGludHJvZHVjZXMgbGFnLCBzbyBjaG9vc2UgY2FyZWZ1bGx5LiBUaGUgZGVmYXVsdCBpcyAzLCB3aGljaCBpcyAKKyAgIHJlYXNvbmFibGUuIFlvdSBjYW4gc2V0IGl0IGJldHdlZW4gMiBhbmQgNS4KKworbWJ1ZnMKKyAgIFRoaXMgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwLiBJdCB3aWxsIHRlbGwgdGhlIG1vZHVsZSB0aGUgbnVtYmVyIG9mCisgICBidWZmZXJzIHRvIHJlc2VydmUgZm9yIG1tYXAoKSwgVklESU9DQ0dNQlVGLCBWSURJT0NNQ0FQVFVSRSBhbmQgZnJpZW5kcy4KKyAgIFRoZSBkZWZhdWx0IGlzIDIsIHdoaWNoIGlzIGFkZXF1YXRlIGZvciBtb3N0IGFwcGxpY2F0aW9ucyAoZG91YmxlCisgICBidWZmZXJpbmcpLgorICAgICAgCisgICBTaG91bGQgeW91IGV4cGVyaWVuY2UgYSBsb3Qgb2YgJ0R1bXBpbmcgZnJhbWUuLi4nIG1lc3NhZ2VzIGR1cmluZworICAgZ3JhYmJpbmcgd2l0aCBhIHRvb2wgdGhhdCB1c2VzIG1tYXAoKSwgeW91IG1pZ2h0IHdhbnQgdG8gaW5jcmVhc2UgaWYuIAorICAgSG93ZXZlciwgaXQgZG9lc24ndCByZWFsbHkgYnVmZmVyIGltYWdlcywgaXQganVzdCBnaXZlcyB5b3UgYSBiaXQgbW9yZQorICAgc2xhY2sgd2hlbiB5b3VyIHByb2dyYW0gaXMgYmVoaW5kLiBCdXQgeW91IG5lZWQgYSBtdWx0aS10aHJlYWRlZCBvcgorICAgZm9ya2VkIHByb2dyYW0gdG8gcmVhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoZXNlIGJ1ZmZlcnMuCisKKyAgIFRoZSBhYnNvbHV0ZSBtYXhpbXVtIGlzIDEwLCBidXQgZG9uJ3Qgc2V0IGl0IHRvbyBoaWdoISAgRXZlcnkgYnVmZmVyIHRha2VzCisgICB1cCA0NjAgS0Igb2YgUkFNLCBzbyB1bmxlc3MgeW91IGhhdmUgYSBsb3Qgb2YgbWVtb3J5IHNldHRpbmcgdGhpcyB0bworICAgc29tZXRoaW5nIG1vcmUgdGhhbiA0IGlzIGFuIGFic29sdXRlIHdhc3RlLiAgVGhpcyBtZW1vcnkgaXMgb25seQorICAgYWxsb2NhdGVkIGR1cmluZyBvcGVuKCksIHNvIG5vdGhpbmcgaXMgd2FzdGVkIHdoZW4gdGhlIGNhbWVyYSBpcyBub3QgaW4KKyAgIHVzZS4KKworcG93ZXJfc2F2ZQorICAgV2hlbiBwb3dlcl9zYXZlIGlzIGVuYWJsZWQgKHNldCB0byAxKSwgdGhlIG1vZHVsZSB3aWxsIHRyeSB0byBzaHV0IGRvd24KKyAgIHRoZSBjYW0gb24gY2xvc2UoKSBhbmQgcmUtYWN0aXZhdGUgb24gb3BlbigpLiBUaGlzIHdpbGwgc2F2ZSBwb3dlciBhbmQKKyAgIHR1cm4gb2ZmIHRoZSBMRUQuIE5vdCBhbGwgY2FtZXJhcyBzdXBwb3J0IHRoaXMgdGhvdWdoICh0aGUgNjQ1IGFuZCA2NDYKKyAgIGRvbid0IGhhdmUgcG93ZXIgc2F2aW5nIGF0IGFsbCksIGFuZCBzb21lIG1vZGVscyBkb24ndCB3b3JrIGVpdGhlciAodGhleQorICAgd2lsbCBzaHV0IGRvd24sIGJ1dCBuZXZlciB3YWtlIHVwKS4gQ29uc2lkZXIgdGhpcyBleHBlcmltZW50YWwuIEJ5CisgICBkZWZhdWx0IHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLgorCitjb21wcmVzc2lvbiAob25seSB1c2VmdWwgd2l0aCB0aGUgcGx1Z2luKQorICAgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIGNvbnRyb2wgdGhlIGNvbXByZXNzaW9uIGZhY3RvciB0aGF0IHRoZSBjYW1lcmEKKyAgIHVzZXMgdG8gc3F1ZWV6ZSB0aGUgaW1hZ2UgdGhyb3VnaCB0aGUgVVNCIGJ1cy4gWW91IGNhbiBzZXQgdGhlIAorICAgcGFyYW1ldGVyIGJldHdlZW4gMCBhbmQgMzoKKyAgICAgMCA9IHByZWZlciB1bmNvbXByZXNzZWQgaW1hZ2VzOyBpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMgbm90IGF2YWlsYWJsZQorICAgICAgICAgaW4gYW4gdW5jb21wcmVzc2VkIGZvcm1hdCwgdGhlIGRyaXZlciB3aWxsIHNpbGVudGx5IHN3aXRjaCB0byBsb3cKKyAgICAgICAgIGNvbXByZXNzaW9uLgorICAgICAxID0gbG93IGNvbXByZXNzaW9uLgorICAgICAyID0gbWVkaXVtIGNvbXByZXNzaW9uLgorICAgICAzID0gaGlnaCBjb21wcmVzc2lvbi4KKyAgICAgIAorICAgSGlnaCBjb21wcmVzc2lvbiB0YWtlcyBsZXNzIGJhbmR3aWR0aCBvZiBjb3Vyc2UsIGJ1dCBpdCBjb3VsZCBhbHNvCisgICBpbnRyb2R1Y2Ugc29tZSB1bndhbnRlZCBhcnRlZmFjdHMuIFRoZSBkZWZhdWx0IGlzIDIsIG1lZGl1bSBjb21wcmVzc2lvbi4KKyAgIFNlZSB0aGUgRkFRIG9uIHRoZSB3ZWJzaXRlIGZvciBhbiBvdmVydmlldyBvZiB3aGljaCBtb2RlcyByZXF1aXJlCisgICBjb21wcmVzc2lvbi4KKworICAgVGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlciBkb2VzIG5vdCBhcHBseSB0byB0aGUgNjQ1IGFuZCA2NDYgY2FtZXJhcworICAgYW5kIE9FTSBtb2RlbHMgZGVyaXZlZCBmcm9tIHRob3NlIChvbmx5IGEgZmV3KS4gTW9zdCBjYW1zIGhvbm91ciB0aGlzCisgICBwYXJhbWV0ZXIuCisKK2xlZHMKKyAgIFRoaXMgc2V0dGluZ3MgdGFrZXMgMiBpbnRlZ2VycywgdGhhdCBkZWZpbmUgdGhlIG9uL29mZiB0aW1lIGZvciB0aGUgTEVECisgICAoaW4gbWlsbGlzZWNvbmRzKS4gT25lIG9mIHRoZSBpbnRlcmVzdGluZyB0aGluZ3MgdGhhdCB5b3UgY2FuIGRvIHdpdGgKKyAgIHRoaXMgaXMgbGV0IHRoZSBMRUQgYmxpbmsgd2hpbGUgdGhlIGNhbWVyYSBpcyBpbiB1c2UuIFRoaXM6CisKKyAgICAgbGVkcz01MDAsNTAwCisgICAgICAKKyAgIHdpbGwgYmxpbmsgdGhlIExFRCBvbmNlIGV2ZXJ5IHNlY29uZC4gQnV0IHdpdGg6CisKKyAgICAgbGVkcz0wLDAKKworICAgdGhlIExFRCBuZXZlciBnb2VzIG9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIHNpbGVudCBzdXJ2ZWlsbGFuY2UuCisKKyAgIEJ5IGRlZmF1bHQgdGhlIGNhbWVyYSdzIExFRCBpcyBvbiBzb2xpZCB3aGlsZSBpbiB1c2UsIGFuZCB0dXJuZWQgb2ZmCisgICB3aGVuIHRoZSBjYW1lcmEgaXMgbm90IHVzZWQgYW55bW9yZS4KKworICAgVGhpcyBwYXJhbWV0ZXIgd29ya3Mgb25seSB3aXRoIHRoZSBUb1VDYW0gcmFuZ2Ugb2YgY2FtZXJhcyAoNzIwLCA3MzAsIDc0MCwKKyAgIDc1MCkgYW5kIE9FTXMuIEZvciBvdGhlciBjYW1lcmFzIHRoaXMgY29tbWFuZCBpcyBzaWxlbnRseSBpZ25vcmVkLCBhbmQgCisgICB0aGUgTEVEIGNhbm5vdCBiZSBjb250cm9sbGVkLgorCisgICBGaW5hbGx5OiB0aGlzIHBhcmFtZXRlcnMgZG9lcyBub3QgdGFrZSBlZmZlY3QgVU5USUwgdGhlIGZpcnN0IHRpbWUgeW91CisgICBvcGVuIHRoZSBjYW1lcmEgZGV2aWNlLiBVbnRpbCB0aGVuLCB0aGUgTEVEIHJlbWFpbnMgb24uCisKK2Rldl9oaW50CisgICBBIGxvbmcgc3RhbmRpbmcgcHJvYmxlbSB3aXRoIFVTQiBkZXZpY2VzIGlzIHRoZWlyIGR5bmFtaWMgbmF0dXJlOiB5b3UKKyAgIG5ldmVyIGtub3cgd2hhdCBkZXZpY2UgYSBjYW1lcmEgZ2V0cyBhc3NpZ25lZDsgaXQgZGVwZW5kcyBvbiBtb2R1bGUgbG9hZAorICAgb3JkZXIsIHRoZSBodWIgY29uZmlndXJhdGlvbiwgdGhlIG9yZGVyIGluIHdoaWNoIGRldmljZXMgYXJlIHBsdWdnZWQgaW4sCisgICBhbmQgdGhlIHBoYXNlIG9mIHRoZSBtb29uIChpLmUuIGl0IGNhbiBiZSByYW5kb20pLiBXaXRoIHRoaXMgb3B0aW9uIHlvdQorICAgY2FuIGdpdmUgdGhlIGRyaXZlciBhIGhpbnQgYXMgdG8gd2hhdCB2aWRlbyBkZXZpY2Ugbm9kZSAoL2Rldi92aWRlb1gpIGl0CisgICBzaG91bGQgdXNlIHdpdGggYSBzcGVjaWZpYyBjYW1lcmEuIFRoaXMgaXMgYWxzbyBoYW5keSBpZiB5b3UgaGF2ZSB0d28KKyAgIGNhbWVyYXMgb2YgdGhlIHNhbWUgbW9kZWwuCisKKyAgIEEgY2FtZXJhIGlzIHNwZWNpZmllZCBieSBpdHMgdHlwZSAodGhlIG51bWJlciBmcm9tIHRoZSBjYW1lcmEgbW9kZWwsCisgICBsaWtlIFBDQTY0NSwgUENWQzc1MFZDLCBldGMpIGFuZCBvcHRpb25hbGx5IHRoZSBzZXJpYWwgbnVtYmVyICh2aXNpYmxlCisgICBpbiAvcHJvYy9idXMvdXNiL2RldmljZXMpLiBBIGhpbnQgY29uc2lzdHMgb2YgYSBzdHJpbmcgd2l0aCB0aGUgZm9sbG93aW5nCisgICBmb3JtYXQ6CisKKyAgICAgIFt0eXBlWy5zZXJpYWxudW1iZXJdOl1ub2RlCisgICAgICAKKyAgIFRoZSBzcXVhcmUgYnJhY2tldHMgbWVhbiB0aGF0IGJvdGggdGhlIHR5cGUgYW5kIHRoZSBzZXJpYWxudW1iZXIgYXJlCisgICBvcHRpb25hbCwgYnV0IGEgc2VyaWFsbnVtYmVyIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aG91dCBhIHR5cGUgKHdoaWNoCisgICB3b3VsZCBiZSByYXRoZXIgcG9pbnRsZXNzKS4gVGhlIHNlcmlhbG51bWJlciBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgdHlwZQorICAgYnkgYSAnLic7IHRoZSBub2RlIG51bWJlciBieSBhICc6Jy4KKyAgIAorICAgVGhpcyBzb21ld2hhdCBjcnlwdGljIHN5bnRheCBpcyBiZXN0IGV4cGxhaW5lZCBieSBhIGZldyBleGFtcGxlczoKKworICAgICBkZXZfaGludD0zLDUgICAgICAgICAgICAgIFRoZSBmaXJzdCBkZXRlY3RlZCBjYW0gZ2V0cyBhc3NpZ25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9kZXYvdmlkZW8zLCB0aGUgc2Vjb25kIC9kZXYvdmlkZW81LiBBbnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciBjYW1lcmFzIHdpbGwgZ2V0IHRoZSBmaXJzdCBmcmVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBzbG90IChzZWUgYmVsb3cpLgorCisgICAgIGRldl9oaW50PTY0NToxLDY4MDoyICAgICAgVGhlIFBDQTY0NSBjYW1lcmEgd2lsbCBnZXQgL2Rldi92aWRlbzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGEgUENWQzY4MCAvZGV2L3ZpZGVvMi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgZGV2X2hpbnQ9NjQ1LjAxMjM6Myw2NDUuNDU2NzowCVRoZSBQQ0E2NDUgY2FtZXJhIHdpdGggc2VyaWFsbnVtYmVyIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAxMjMgZ29lcyB0byAvZGV2L3ZpZGVvMywgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgbW9kZWwgd2l0aCB0aGUgNDU2NyBzZXJpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzIC9kZXYvdmlkZW8wLgorCisgICAgIGRldl9oaW50PTc1MDoxLDQsNSw2ICAgICAgIFRoZSBQQ1ZDNzUwIGNhbWVyYSB3aWxsIGdldCAvZGV2L3ZpZGVvMSwgdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IDMgUGhpbGlwcyBjYW1zIHdpbGwgdXNlIC9kZXYvdmlkZW80IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIC9kZXYvdmlkZW82LgorCisgICBTb21lIHBvaW50cyB3b3J0aCBrbm93aW5nOgorICAgLSBTZXJpYWxudW1iZXJzIGFyZSBjYXNlIHNlbnNpdGl2ZSBhbmQgbXVzdCBiZSB3cml0dGVuIGZ1bGwsIGluY2x1ZGluZyAKKyAgICAgbGVhZGluZyB6ZXJvZXMgKGl0J3MgdHJlYXRlZCBhcyBhIHN0cmluZykuCisgICAtIElmIGEgZGV2aWNlIG5vZGUgaXMgYWxyZWFkeSBvY2N1cGllZCwgcmVnaXN0cmF0aW9uIHdpbGwgZmFpbCBhbmQgCisgICAgIHRoZSB3ZWJjYW0gaXMgbm90IGF2YWlsYWJsZS4KKyAgIC0gWW91IGNhbiBoYXZlIHVwIHRvIDY0IHZpZGVvIGRldmljZXM7IGJlIHN1cmUgdG8gbWFrZSBlbm91Z2ggZGV2aWNlCisgICAgIG5vZGVzIGluIC9kZXYgaWYgeW91IHdhbnQgdG8gc3ByZWFkIHRoZSBudW1iZXJzICh0aGlzIGRvZXMgbm90IGFwcGx5CisgICAgIHRvIGRldmZzKS4gQWZ0ZXIgL2Rldi92aWRlbzkgY29tZXMgL2Rldi92aWRlbzEwIChub3QgL2Rldi92aWRlb0EpLgorICAgLSBJZiBhIGNhbWVyYSBkb2VzIG5vdCBtYXRjaCBhbnkgZGV2X2hpbnQsIGl0IHdpbGwgc2ltcGx5IGdldCBhc3NpZ25lZAorICAgICB0aGUgZmlyc3QgYXZhaWxhYmxlIGRldmljZSBub2RlLCBqdXN0IGFzIGl0IHVzZWQgdG8gYmUuCisKK3RyYWNlCisgICBJbiBvcmRlciB0byBiZXR0ZXIgZGV0ZWN0IHByb2JsZW1zLCBpdCBpcyBub3cgcG9zc2libGUgdG8gdHVybiBvbiBhCisgICAndHJhY2UnIG9mIHNvbWUgb2YgdGhlIGNhbGxzIHRoZSBtb2R1bGUgbWFrZXM7IGl0IGxvZ3MgYWxsIGl0ZW1zIGluIHlvdXIKKyAgIGtlcm5lbCBsb2cgYXQgZGVidWcgbGV2ZWwuCisKKyAgIFRoZSB0cmFjZSB2YXJpYWJsZSBpcyBhIGJpdG1hc2s7IGVhY2ggYml0IHJlcHJlc2VudHMgYSBjZXJ0YWluIGZlYXR1cmUuCisgICBJZiB5b3Ugd2FudCB0byB0cmFjZSBzb21ldGhpbmcsIGxvb2sgdXAgdGhlIGJpdCB2YWx1ZShzKSBpbiB0aGUgdGFibGUgCisgICBiZWxvdywgYWRkIHRoZSB2YWx1ZXMgdG9nZXRoZXIgYW5kIHN1cHBseSB0aGF0IHRvIHRoZSB0cmFjZSB2YXJpYWJsZS4KKworICAgVmFsdWUgIFZhbHVlICAgRGVzY3JpcHRpb24JCQkJCSAgIERlZmF1bHQKKyAgIChkZWMpICAoaGV4KQorICAgICAgIDEgICAgMHgxICAgTW9kdWxlIGluaXRpYWxpemF0aW9uOyB0aGlzIHdpbGwgbG9nIG1lc3NhZ2VzICAgICAgIE9uCisgICAgICAgICAgICAgICAgICB3aGlsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgdGhlIG1vZHVsZQorCisgICAgICAgMiAgICAweDIgICBwcm9iZSgpIGFuZCBkaXNjb25uZWN0KCkgdHJhY2VzICAgICAgICAgICAgICAgICAgICAgT24KKworICAgICAgIDQgICAgMHg0ICAgVHJhY2Ugb3BlbigpIGFuZCBjbG9zZSgpIGNhbGxzICAgICAgICAgICAgICAgICAgICAgIE9mZgorCisgICAgICAgOCAgICAweDggICByZWFkKCksIG1tYXAoKSBhbmQgYXNzb2NpYXRlZCBpb2N0bCgpIGNhbGxzICAgICAgICAgT2ZmCisKKyAgICAgIDE2ICAgMHgxMCAgIE1lbW9yeSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMsIGV0Yy4gICAgICAgICAgICAgICAgICBPZmYKKworICAgICAgMzIgICAweDIwICAgU2hvd2luZyB1bmRlcmZsb3csIG92ZXJmbG93IGFuZCBEdW1waW5nIGZyYW1lICAgICAgIE9uCisgICAgICAgICAgICAgICAgICBtZXNzYWdlcworCisgICAgICA2NCAgIDB4NDAgICBTaG93IHZpZXdwb3J0IGFuZCBpbWFnZSBzaXplcyAgICAgICAgICAgICAgICAgICAgICAgT2ZmCisKKyAgICAgMTI4ICAgMHg4MCAgIFBXQ1ggZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYKKworICAgRm9yIGV4YW1wbGUsIHRvIHRyYWNlIHRoZSBvcGVuKCkgJiByZWFkKCkgZnVjdGlvbnMsIHN1bSA4ICsgNCA9IDEyLAorICAgc28geW91IHdvdWxkIHN1cHBseSB0cmFjZT0xMiBkdXJpbmcgaW5zbW9kIG9yIG1vZHByb2JlLiBJZgorICAgeW91IHdhbnQgdG8gdHVybiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHByb2JpbmcgdHJhY2luZyBvZmYsIHNldCB0cmFjZT0wLgorICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRyYWNlIGlzIDM1ICgweDIzKS4KKworCisKK0V4YW1wbGU6CisgICAgIAorICAgICAjIG1vZHByb2JlIHB3YyBzaXplPWNpZiBmcHM9MTUgcG93ZXJfc2F2ZT0xCisKK1RoZSBmYnVmcywgbWJ1ZnMgYW5kIHRyYWNlIHBhcmFtZXRlcnMgYXJlIGdsb2JhbCBhbmQgYXBwbHkgdG8gYWxsIGNvbm5lY3RlZAorY2FtZXJhcy4gRWFjaCBjYW1lcmEgaGFzIGl0cyBvd24gc2V0IG9mIGJ1ZmZlcnMuCisKK3NpemUgYW5kIGZwcyBvbmx5IHNwZWNpZnkgZGVmYXVsdHMgd2hlbiB5b3Ugb3BlbigpIHRoZSBkZXZpY2U7IHRoaXMgaXMgdG8KK2FjY29tbW9kYXRlIHNvbWUgdG9vbHMgdGhhdCBkb24ndCBzZXQgdGhlIHNpemUuIFlvdSBjYW4gY2hhbmdlIHRoZXNlCitzZXR0aW5ncyBhZnRlciBvcGVuKCkgd2l0aCB0aGUgVmlkZW80TGludXggaW9jdGwoKSBjYWxscy4gVGhlIGRlZmF1bHQgb2YKK2RlZmF1bHRzIGlzIFFDSUYgc2l6ZSBhdCAxMCBmcHMuCisKK1RoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXIgaXMgc2VtaWdsb2JhbDsgaXQgc2V0cyB0aGUgaW5pdGlhbCBjb21wcmVzc2lvbgorcHJlZmVyZW5jZSBmb3IgYWxsIGNhbWVyYSdzLCBidXQgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCBwZXIgY2FtZXJhIHdpdGgKK3RoZSBWSURJT0NQV0NTQ1FVQUwgaW9jdGwoKSBjYWxsLgorCitBbGwgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhYTkxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jCkBAIC0wLDAgKzEsMTYzMCBAQAorLyogRHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgRnVuY3Rpb25zIHRoYXQgc2VuZCB2YXJpb3VzIGNvbnRyb2wgbWVzc2FnZXMgdG8gdGhlIHdlYmNhbSwgaW5jbHVkaW5nCisgICB2aWRlbyBtb2Rlcy4KKyAgIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKgorICAgQ2hhbmdlcworICAgMjAwMS8wOC8wMyAgQWx2YXJhZG8gICBBZGRlZCBtZXRob2RzIGZvciBjaGFuZ2luZyB3aGl0ZSBiYWxhbmNlIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkL2dyZWVuIGdhaW5zCisgKi8KKworLyogQ29udHJvbCBmdW5jdGlvbnMgZm9yIHRoZSBjYW07IGJyaWdodG5lc3MsIGNvbnRyYXN0LCB2aWRlbyBtb2RlLCBldGMuICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4gCisjZW5kaWYKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgCisjaW5jbHVkZSAicHdjLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKyNpbmNsdWRlICJwd2Mta2lhcmEuaCIKKyNpbmNsdWRlICJwd2MtdGltb24uaCIKKyNpbmNsdWRlICJwd2MtZGVjMS5oIgorI2luY2x1ZGUgInB3Yy1kZWMyMy5oIgorCisvKiBSZXF1ZXN0IHR5cGVzOiB2aWRlbyAqLworI2RlZmluZSBTRVRfTFVNX0NUTAkJCTB4MDEKKyNkZWZpbmUgR0VUX0xVTV9DVEwJCQkweDAyCisjZGVmaW5lIFNFVF9DSFJPTV9DVEwJCQkweDAzCisjZGVmaW5lIEdFVF9DSFJPTV9DVEwJCQkweDA0CisjZGVmaW5lIFNFVF9TVEFUVVNfQ1RMCQkJMHgwNQorI2RlZmluZSBHRVRfU1RBVFVTX0NUTAkJCTB4MDYKKyNkZWZpbmUgU0VUX0VQX1NUUkVBTV9DVEwJCTB4MDcKKyNkZWZpbmUgR0VUX0VQX1NUUkVBTV9DVEwJCTB4MDgKKyNkZWZpbmUgU0VUX01QVF9DVEwJCQkweDBECisjZGVmaW5lIEdFVF9NUFRfQ1RMCQkJMHgwRQorCisvKiBTZWxlY3RvcnMgZm9yIHRoZSBMdW1pbmFuY2UgY29udHJvbHMgW0dTXUVUX0xVTV9DVEwgKi8KKyNkZWZpbmUgQUdDX01PREVfRk9STUFUVEVSCQkJMHgyMDAwCisjZGVmaW5lIFBSRVNFVF9BR0NfRk9STUFUVEVSCQkJMHgyMTAwCisjZGVmaW5lIFNIVVRURVJfTU9ERV9GT1JNQVRURVIJCQkweDIyMDAKKyNkZWZpbmUgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSCQkweDIzMDAKKyNkZWZpbmUgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSCQkweDI0MDAKKyNkZWZpbmUgQVVUT19DT05UT1VSX0ZPUk1BVFRFUgkJCTB4MjUwMAorI2RlZmluZSBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIJMHgyNjAwCisjZGVmaW5lIENPTlRSQVNUX0ZPUk1BVFRFUgkJCTB4MjcwMAorI2RlZmluZSBEWU5BTUlDX05PSVNFX0NPTlRST0xfRk9STUFUVEVSCQkweDI4MDAKKyNkZWZpbmUgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIJCTB4MjkwMAorI2RlZmluZSBBRV9DT05UUk9MX1NQRUVECQkJMHgyQTAwCisjZGVmaW5lIEJSSUdIVE5FU1NfRk9STUFUVEVSCQkJMHgyQjAwCisjZGVmaW5lIEdBTU1BX0ZPUk1BVFRFUgkJCQkweDJDMDAKKworLyogU2VsZWN0b3JzIGZvciB0aGUgQ2hyb21pbmFuY2UgY29udHJvbHMgW0dTXUVUX0NIUk9NX0NUTCAqLworI2RlZmluZSBXQl9NT0RFX0ZPUk1BVFRFUgkJCTB4MTAwMAorI2RlZmluZSBBV0JfQ09OVFJPTF9TUEVFRF9GT1JNQVRURVIJCTB4MTEwMAorI2RlZmluZSBBV0JfQ09OVFJPTF9ERUxBWV9GT1JNQVRURVIJCTB4MTIwMAorI2RlZmluZSBQUkVTRVRfTUFOVUFMX1JFRF9HQUlOX0ZPUk1BVFRFUgkweDEzMDAKKyNkZWZpbmUgUFJFU0VUX01BTlVBTF9CTFVFX0dBSU5fRk9STUFUVEVSCTB4MTQwMAorI2RlZmluZSBDT0xPVVJfTU9ERV9GT1JNQVRURVIJCQkweDE1MDAKKyNkZWZpbmUgU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjEJCTB4MTYwMAorI2RlZmluZSBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMgkJMHgxNzAwCisKKy8qIFNlbGVjdG9ycyBmb3IgdGhlIFN0YXR1cyBjb250cm9scyBbR1NdRVRfU1RBVFVTX0NUTCAqLworI2RlZmluZSBTQVZFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSCQkweDAyMDAKKyNkZWZpbmUgUkVTVE9SRV9VU0VSX0RFRkFVTFRTX0ZPUk1BVFRFUgkJMHgwMzAwCisjZGVmaW5lIFJFU1RPUkVfRkFDVE9SWV9ERUZBVUxUU19GT1JNQVRURVIJMHgwNDAwCisjZGVmaW5lIFJFQURfQUdDX0ZPUk1BVFRFUgkJCTB4MDUwMAorI2RlZmluZSBSRUFEX1NIVVRURVJfRk9STUFUVEVSCQkJMHgwNjAwCisjZGVmaW5lIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSCQkJMHgwNzAwCisjZGVmaW5lIFJFQURfQkxVRV9HQUlOX0ZPUk1BVFRFUgkJMHgwODAwCisjZGVmaW5lIFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjEJCQkweDBDMDAKKyNkZWZpbmUgUkVBRF9SQVdfWV9NRUFOX0ZPUk1BVFRFUgkJMHgzMTAwCisjZGVmaW5lIFNFVF9QT1dFUl9TQVZFX01PREVfRk9STUFUVEVSCQkweDMyMDAKKyNkZWZpbmUgTUlSUk9SX0lNQUdFX0ZPUk1BVFRFUgkJCTB4MzMwMAorI2RlZmluZSBMRURfRk9STUFUVEVSCQkJCTB4MzQwMAorI2RlZmluZSBTRU5TT1JfVFlQRV9GT1JNQVRURVIyCQkJMHgzNzAwCisKKy8qIEZvcm1hdHRlcnMgZm9yIHRoZSBWaWRlbyBFbmRwb2ludCBjb250cm9scyBbR1NdRVRfRVBfU1RSRUFNX0NUTCAqLworI2RlZmluZSBWSURFT19PVVRQVVRfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDEwMAorCisvKiBGb3JtYXR0ZXJzIGZvciB0aGUgbW90b3JpemVkIHBhbiAmIHRpbHQgW0dTXUVUX01QVF9DVEwgKi8KKyNkZWZpbmUgUFRfUkVMQVRJVkVfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDEKKyNkZWZpbmUgUFRfUkVTRVRfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDIKKyNkZWZpbmUgUFRfU1RBVFVTX0ZPUk1BVFRFUgkJCTB4MDMKKworc3RhdGljIGNoYXIgKnNpemUybmFtZVtQU1pfTUFYXSA9Cit7CisJInN1YlFDSUYiLAorCSJRU0lGIiwKKwkiUUNJRiIsCisJIlNJRiIsCisJIkNJRiIsCisJIlZHQSIsCit9OyAgCisKKy8qKioqKioqKi8KKworLyogRW50cmllcyBmb3IgdGhlIE5hbGEgKDY0NS82NDYpIGNhbWVyYTsgdGhlIE5hbGEgZG9lc24ndCBoYXZlIGNvbXByZXNzaW9uIAorICAgcHJlZmVyZW5jZXMsIHNvIHlvdSBlaXRoZXIgZ2V0IGNvbXByZXNzZWQgb3Igbm9uLWNvbXByZXNzZWQgc3RyZWFtcy4KKyAgIAorICAgQW4gYWx0ZXJuYXRlIHZhbHVlIG9mIDAgbWVhbnMgdGhpcyBtb2RlIGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsLgorICovCisKK3N0cnVjdCBOYWxhX3RhYmxlX2VudHJ5IHsKKwljaGFyIGFsdGVybmF0ZTsJCQkvKiBVU0IgYWx0ZXJuYXRlIHNldHRpbmcgKi8KKwlpbnQgY29tcHJlc3NlZDsJCQkvKiBDb21wcmVzc2VkIHllcy9ubyAqLworCisJdW5zaWduZWQgY2hhciBtb2RlWzNdOwkJLyogcHJlY29tcHV0ZWQgbW9kZSB0YWJsZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBOYWxhX3RhYmxlX2VudHJ5IE5hbGFfdGFibGVbUFNaX01BWF1bOF0gPQoreworI2luY2x1ZGUgInB3Yy1uYWxhLmgiCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNkZWZpbmUgU2VuZENvbnRyb2xNc2cocmVxdWVzdCwgdmFsdWUsIGJ1ZmxlbikgXAorCXVzYl9jb250cm9sX21zZyhwZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUocGRldi0+dWRldiwgMCksIFwKKwkJcmVxdWVzdCwgXAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsIFwKKwkJdmFsdWUsIFwKKwkJcGRldi0+dmNpbnRlcmZhY2UsIFwKKwkJJmJ1ZiwgYnVmbGVuLCA1MDApCisKKyNkZWZpbmUgUmVjdkNvbnRyb2xNc2cocmVxdWVzdCwgdmFsdWUsIGJ1ZmxlbikgXAorCXVzYl9jb250cm9sX21zZyhwZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUocGRldi0+dWRldiwgMCksIFwKKwkJcmVxdWVzdCwgXAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwgXAorCQl2YWx1ZSwgXAorCQlwZGV2LT52Y2ludGVyZmFjZSwgXAorCQkmYnVmLCBidWZsZW4sIDUwMCkKKworCisjaWYgUFdDX0RFQlVHCit2b2lkIHB3Y19oZXhkdW1wKHZvaWQgKnAsIGludCBsZW4pCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqczsKKwljaGFyIGJ1ZlsxMDBdLCAqZDsKKworCXMgPSAodW5zaWduZWQgY2hhciAqKXA7CisJZCA9IGJ1ZjsKKwkqZCA9ICdcMCc7CisJRGVidWcoIkRvaW5nIGhleGR1bXAgQCAlcCwgJWQgYnl0ZXMuXG4iLCBwLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlkICs9IHNwcmludGYoZCwgIiUwMlggIiwgKnMrKyk7CisJCWlmICgoaSAmIDB4RikgPT0gMHhGKSB7CisJCQlEZWJ1ZygiJXNcbiIsIGJ1Zik7CisJCQlkID0gYnVmOworCQkJKmQgPSAnXDAnOworCQl9CisJfQorCWlmICgoaSAmIDB4RikgIT0gMCkKKwkJRGVidWcoIiVzXG4iLCBidWYpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbmRfdmlkZW9fY29tbWFuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGluZGV4LCB2b2lkICpidWYsIGludCBidWZsZW4pCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQl1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCVNFVF9FUF9TVFJFQU1fQ1RMLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCVZJREVPX09VVFBVVF9DT05UUk9MX0ZPUk1BVFRFUiwKKwkJaW5kZXgsCisJCWJ1ZiwgYnVmbGVuLCAxMDAwKTsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgaW50IHNldF92aWRlb19tb2RlX05hbGEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzaXplLCBpbnQgZnJhbWVzKQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzNdOworCWludCByZXQsIGZwczsKKwlzdHJ1Y3QgTmFsYV90YWJsZV9lbnRyeSAqcEVudHJ5OworCWludCBmcmFtZXMyZnJhbWVzWzMxXSA9CisJeyAvKiBjbG9zZXN0IG1hdGNoIG9mIGZyYW1lcmF0ZSAqLworCSAgIDAsICAwLCAgMCwgIDAsICA0LCAgLyogIDAtNCAgKi8KKwkgICA1LCAgNSwgIDcsICA3LCAxMCwgIC8qICA1LTkgICovCisgICAgICAgICAgMTAsIDEwLCAxMiwgMTIsIDE1LCAgLyogMTAtMTQgKi8KKyAgICAgICAgICAxNSwgMTUsIDE1LCAyMCwgMjAsICAvKiAxNS0xOSAqLworICAgICAgICAgIDIwLCAyMCwgMjAsIDI0LCAyNCwgIC8qIDIwLTI0ICovCisgICAgICAgICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAgLyogMjUtMjkgKi8KKyAgICAgICAgICAyNCAgICAgICAgICAgICAgICAgICAvKiAzMCAgICAqLworCX07CisJaW50IGZyYW1lczJ0YWJsZVszMV0gPSAKKwl7IDAsIDAsIDAsIDAsIDAsIC8qICAwLTQgICovCisJICAxLCAxLCAxLCAyLCAyLCAvKiAgNS05ICAqLworCSAgMywgMywgNCwgNCwgNCwgLyogMTAtMTQgKi8KKwkgIDUsIDUsIDUsIDUsIDUsIC8qIDE1LTE5ICovCisJICA2LCA2LCA2LCA2LCA3LCAvKiAyMC0yNCAqLworCSAgNywgNywgNywgNywgNywgLyogMjUtMjkgKi8KKwkgIDcgICAgICAgICAgICAgIC8qIDMwICAgICovCisJfTsKKwkKKwlpZiAoc2l6ZSA8IDAgfHwgc2l6ZSA+IFBTWl9DSUYgfHwgZnJhbWVzIDwgNCB8fCBmcmFtZXMgPiAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZnJhbWVzID0gZnJhbWVzMmZyYW1lc1tmcmFtZXNdOworCWZwcyA9IGZyYW1lczJ0YWJsZVtmcmFtZXNdOworCXBFbnRyeSA9ICZOYWxhX3RhYmxlW3NpemVdW2Zwc107CisJaWYgKHBFbnRyeS0+YWx0ZXJuYXRlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBFbnRyeS0+Y29tcHJlc3NlZCkKKwkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCisKKwltZW1jcHkoYnVmLCBwRW50cnktPm1vZGUsIDMpOwkKKwlyZXQgPSBzZW5kX3ZpZGVvX2NvbW1hbmQocGRldi0+dWRldiwgcGRldi0+dmVuZHBvaW50LCBidWYsIDMpOworCWlmIChyZXQgPCAwKSB7CisJCURlYnVnKCJGYWlsZWQgdG8gc2VuZCB2aWRlbyBjb21tYW5kLi4uICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocEVudHJ5LT5jb21wcmVzc2VkICYmIHBkZXYtPnZwYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkFXKQorCSB7CisJICAgc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwkgICAgIGNhc2UgNjQ1OgorCSAgICAgY2FzZSA2NDY6CisJICAgICAgIHB3Y19kZWMxX2luaXQocGRldi0+dHlwZSwgcGRldi0+cmVsZWFzZSwgYnVmLCBwZGV2LT5kZWNvbXByZXNzX2RhdGEpOworCSAgICAgICBicmVhazsKKworCSAgICAgY2FzZSA2NzU6CisJICAgICBjYXNlIDY4MDoKKwkgICAgIGNhc2UgNjkwOgorCSAgICAgY2FzZSA3MjA6CisJICAgICBjYXNlIDczMDoKKwkgICAgIGNhc2UgNzQwOgorCSAgICAgY2FzZSA3NTA6CisJICAgICAgIHB3Y19kZWMyM19pbml0KHBkZXYtPnR5cGUsIHBkZXYtPnJlbGVhc2UsIGJ1ZiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkgICAgICAgYnJlYWs7CisJICAgfQorCX0KKyAKKwlwZGV2LT5jbWRfbGVuID0gMzsKKwltZW1jcHkocGRldi0+Y21kX2J1ZiwgYnVmLCAzKTsKKworCS8qIFNldCB2YXJpb3VzIHBhcmFtZXRlcnMgKi8KKwlwZGV2LT52ZnJhbWVzID0gZnJhbWVzOworCXBkZXYtPnZzaXplID0gc2l6ZTsKKwlwZGV2LT52YWx0ZXJuYXRlID0gcEVudHJ5LT5hbHRlcm5hdGU7CisJcGRldi0+aW1hZ2UgPSBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV07CisJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIDMpIC8gMjsKKwlpZiAocEVudHJ5LT5jb21wcmVzc2VkKSB7CisJCWlmIChwZGV2LT5yZWxlYXNlIDwgNSkgeyAvKiA0IGZvbGQgY29tcHJlc3Npb24gKi8KKwkJCXBkZXYtPnZiYW5kbGVuZ3RoID0gNTI4OworCQkJcGRldi0+ZnJhbWVfc2l6ZSAvPSA0OworCQl9CisJCWVsc2UgeworCQkJcGRldi0+dmJhbmRsZW5ndGggPSA3MDQ7CisJCQlwZGV2LT5mcmFtZV9zaXplIC89IDM7CisJCX0KKwl9CisJZWxzZQorCQlwZGV2LT52YmFuZGxlbmd0aCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgc2V0X3ZpZGVvX21vZGVfVGltb24oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzaXplLCBpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIGludCBzbmFwc2hvdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxM107CisJY29uc3Qgc3RydWN0IFRpbW9uX3RhYmxlX2VudHJ5ICpwQ2hvb3NlOworCWludCByZXQsIGZwczsKKworCWlmIChzaXplID49IFBTWl9NQVggfHwgZnJhbWVzIDwgNSB8fCBmcmFtZXMgPiAzMCB8fCBjb21wcmVzc2lvbiA8IDAgfHwgY29tcHJlc3Npb24gPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA+IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmcHMgPSAoZnJhbWVzIC8gNSkgLSAxOworCisJLyogRmluZCBhIHN1cHBvcnRlZCBmcmFtZXJhdGUgd2l0aCBwcm9ncmVzc2l2ZWx5IGhpZ2hlciBjb21wcmVzc2lvbiByYXRpb3MKKwkgICBpZiB0aGUgcHJlZmVycmVkIHJhdGlvIGlzIG5vdCBhdmFpbGFibGUuCisJKi8KKwlwQ2hvb3NlID0gTlVMTDsKKwl3aGlsZSAoY29tcHJlc3Npb24gPD0gMykgeworCSAgIHBDaG9vc2UgPSAmVGltb25fdGFibGVbc2l6ZV1bZnBzXVtjb21wcmVzc2lvbl07CisJICAgaWYgKHBDaG9vc2UtPmFsdGVybmF0ZSAhPSAwKQorCSAgICAgYnJlYWs7CisJICAgY29tcHJlc3Npb24rKzsKKwl9CisJaWYgKHBDaG9vc2UgPT0gTlVMTCB8fCBwQ2hvb3NlLT5hbHRlcm5hdGUgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCisKKwltZW1jcHkoYnVmLCBwQ2hvb3NlLT5tb2RlLCAxMyk7CisJaWYgKHNuYXBzaG90KQorCQlidWZbMF0gfD0gMHg4MDsKKwlyZXQgPSBzZW5kX3ZpZGVvX2NvbW1hbmQocGRldi0+dWRldiwgcGRldi0+dmVuZHBvaW50LCBidWYsIDEzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwQ2hvb3NlLT5iYW5kbGVuZ3RoID4gMCAmJiBwZGV2LT52cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1JBVykKKwkgICBwd2NfZGVjMjNfaW5pdChwZGV2LT50eXBlLCBwZGV2LT5yZWxlYXNlLCBidWYsIHBkZXYtPmRlY29tcHJlc3NfZGF0YSk7CisKKwlwZGV2LT5jbWRfbGVuID0gMTM7CisJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMTMpOworCisJLyogU2V0IHZhcmlvdXMgcGFyYW1ldGVycyAqLworCXBkZXYtPnZmcmFtZXMgPSBmcmFtZXM7CisJcGRldi0+dnNpemUgPSBzaXplOworCXBkZXYtPnZzbmFwc2hvdCA9IHNuYXBzaG90OworCXBkZXYtPnZhbHRlcm5hdGUgPSBwQ2hvb3NlLT5hbHRlcm5hdGU7CisJcGRldi0+aW1hZ2UgPSBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV07CisJcGRldi0+dmJhbmRsZW5ndGggPSBwQ2hvb3NlLT5iYW5kbGVuZ3RoOworCWlmIChwQ2hvb3NlLT5iYW5kbGVuZ3RoID4gMCkKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwQ2hvb3NlLT5iYW5kbGVuZ3RoICogcGRldi0+aW1hZ2UueSkgLyA0OworCWVsc2UKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIDEyKSAvIDg7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgc2V0X3ZpZGVvX21vZGVfS2lhcmEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzaXplLCBpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIGludCBzbmFwc2hvdCkKK3sKKwljb25zdCBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgKnBDaG9vc2UgPSBOVUxMOworCWludCBmcHMsIHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMl07CisJc3RydWN0IEtpYXJhX3RhYmxlX2VudHJ5IFJhd0VudHJ5ID0gezYsIDc3MywgMTI3MiwgezB4QUQsIDB4RjQsIDB4MTAsIDB4MjcsIDB4QjYsIDB4MjQsIDB4OTYsIDB4MDIsIDB4MzAsIDB4MDUsIDB4MDMsIDB4ODB9fTsKKworCWlmIChzaXplID49IFBTWl9NQVggfHwgZnJhbWVzIDwgNSB8fCBmcmFtZXMgPiAzMCB8fCBjb21wcmVzc2lvbiA8IDAgfHwgY29tcHJlc3Npb24gPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA+IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmcHMgPSAoZnJhbWVzIC8gNSkgLSAxOworCisJLyogc3BlY2lhbCBjYXNlOiBWR0EgQCA1IGZwcyBhbmQgc25hcHNob3QgaXMgcmF3IGJheWVyIG1vZGUgKi8KKwlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA9PSA1ICYmIHNuYXBzaG90KQorCXsKKwkJLyogT25seSBhdmFpbGFibGUgaW4gY2FzZSB0aGUgcmF3IHBhbGV0dGUgaXMgc2VsZWN0ZWQgb3IgCisJCSAgIHdlIGhhdmUgdGhlIGRlY29tcHJlc3NvciBhdmFpbGFibGUuIFRoaXMgbW9kZSBpcyAKKwkJICAgb25seSBhdmFpbGFibGUgaW4gY29tcHJlc3NlZCBmb3JtIAorCQkqLworCQlpZiAocGRldi0+dnBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SQVcpCisJCXsKKwkgICAgICAgICAgICAgICAgSW5mbygiQ2hvb3NpbmcgVkdBLzUgQkFZRVIgbW9kZSAoJWQpLlxuIiwgcGRldi0+dnBhbGV0dGUpOworCQkJcENob29zZSA9ICZSYXdFbnRyeTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUluZm8oIlZHQS81IEJBWUVSIG1vZGUgX211c3RfIGhhdmUgYSBkZWNvbXByZXNzb3IgYXZhaWxhYmxlLCBvciB1c2UgUkFXIHBhbGV0dGUuXG4iKTsKKwkJfQorCX0KKwllbHNlCisJeworICAgICAgICAJLyogRmluZCBhIHN1cHBvcnRlZCBmcmFtZXJhdGUgd2l0aCBwcm9ncmVzc2l2ZWx5IGhpZ2hlciBjb21wcmVzc2lvbiByYXRpb3MKKwkJICAgaWYgdGhlIHByZWZlcnJlZCByYXRpbyBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgIFNraXAgdGhpcyBzdGVwIHdoZW4gdXNpbmcgUkFXIG1vZGVzLgorCQkqLworCQl3aGlsZSAoY29tcHJlc3Npb24gPD0gMykgeworCQkJcENob29zZSA9ICZLaWFyYV90YWJsZVtzaXplXVtmcHNdW2NvbXByZXNzaW9uXTsKKwkJCWlmIChwQ2hvb3NlLT5hbHRlcm5hdGUgIT0gMCkKKwkJCQlicmVhazsKKwkJCWNvbXByZXNzaW9uKys7CisJCX0KKwl9CisJaWYgKHBDaG9vc2UgPT0gTlVMTCB8fCBwQ2hvb3NlLT5hbHRlcm5hdGUgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCisKKwlEZWJ1ZygiVXNpbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQuXG4iLCBwQ2hvb3NlLT5hbHRlcm5hdGUpOworCQorCS8qIHVzYl9jb250cm9sX21zZyB3b24ndCB0YWtlIHN0YXRpY2x5IGFsbG9jYXRlZCBhcnJheXMgYXMgYXJndW1lbnQ/PyAqLworCW1lbWNweShidWYsIHBDaG9vc2UtPm1vZGUsIDEyKTsKKwlpZiAoc25hcHNob3QpCisJCWJ1ZlswXSB8PSAweDgwOworCisJLyogRmlybXdhcmUgYnVnOiB2aWRlbyBlbmRwb2ludCBpcyA1LCBidXQgY29tbWFuZHMgYXJlIHNlbnQgdG8gZW5kcG9pbnQgNCAqLworCXJldCA9IHNlbmRfdmlkZW9fY29tbWFuZChwZGV2LT51ZGV2LCA0IC8qIHBkZXYtPnZlbmRwb2ludCAqLywgYnVmLCAxMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocENob29zZS0+YmFuZGxlbmd0aCA+IDAgJiYgcGRldi0+dnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SQVcpCisJICBwd2NfZGVjMjNfaW5pdChwZGV2LT50eXBlLCBwZGV2LT5yZWxlYXNlLCBidWYsIHBkZXYtPmRlY29tcHJlc3NfZGF0YSk7CisKKwlwZGV2LT5jbWRfbGVuID0gMTI7CisJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMTIpOworCS8qIEFsbCBzZXQgYW5kIGdvICovCisJcGRldi0+dmZyYW1lcyA9IGZyYW1lczsKKwlwZGV2LT52c2l6ZSA9IHNpemU7CisJcGRldi0+dnNuYXBzaG90ID0gc25hcHNob3Q7CisJcGRldi0+dmFsdGVybmF0ZSA9IHBDaG9vc2UtPmFsdGVybmF0ZTsKKwlwZGV2LT5pbWFnZSA9IHB3Y19pbWFnZV9zaXplc1tzaXplXTsKKwlwZGV2LT52YmFuZGxlbmd0aCA9IHBDaG9vc2UtPmJhbmRsZW5ndGg7CisJaWYgKHBkZXYtPnZiYW5kbGVuZ3RoID4gMCkKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT52YmFuZGxlbmd0aCAqIHBkZXYtPmltYWdlLnkpIC8gNDsKKwllbHNlCisJCXBkZXYtPmZyYW1lX3NpemUgPSAocGRldi0+aW1hZ2UueCAqIHBkZXYtPmltYWdlLnkgKiAxMikgLyA4OworCXJldHVybiAwOworfQorCisKKworLyoqCisgICBAcGRldjogZGV2aWNlIHN0cnVjdHVyZQorICAgQHdpZHRoOiB2aWV3cG9ydCB3aWR0aAorICAgQGhlaWdodDogdmlld3BvcnQgaGVpZ2h0CisgICBAZnJhbWU6IGZyYW1lcmF0ZSwgaW4gZnBzCisgICBAY29tcHJlc3Npb246IHByZWZlcnJlZCBjb21wcmVzc2lvbiByYXRpbworICAgQHNuYXBzaG90OiBzbmFwc2hvdCBtb2RlIG9yIHN0cmVhbWluZworICovCitpbnQgcHdjX3NldF92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KQoreworICAgICAgICBpbnQgcmV0LCBzaXplOworCisgICAgICAgIFRyYWNlKFRSQUNFX0ZMT1csICJzZXRfdmlkZW9fbW9kZSglZHglZCBAICVkLCBwYWxldHRlICVkKS5cbiIsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcywgcGRldi0+dnBhbGV0dGUpOworCXNpemUgPSBwd2NfZGVjb2RlX3NpemUocGRldiwgd2lkdGgsIGhlaWdodCk7CisJaWYgKHNpemUgPCAwKSB7CisJCURlYnVnKCJDb3VsZCBub3QgZmluZCBzdWl0YWJsZSBzaXplLlxuIik7CisJCXJldHVybiAtRVJBTkdFOworCX0KKwlEZWJ1ZygiZGVjb2RlX3NpemUgPSAlZC5cbiIsIHNpemUpOworCisgICAgICAgIHJldCA9IC1FSU5WQUw7CisJc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwljYXNlIDY0NToKKwljYXNlIDY0NjoKKwkJcmV0ID0gc2V0X3ZpZGVvX21vZGVfTmFsYShwZGV2LCBzaXplLCBmcmFtZXMpOworCQlicmVhazsKKworCWNhc2UgNjc1OgorCWNhc2UgNjgwOgorCWNhc2UgNjkwOgorCQlyZXQgPSBzZXRfdmlkZW9fbW9kZV9UaW1vbihwZGV2LCBzaXplLCBmcmFtZXMsIGNvbXByZXNzaW9uLCBzbmFwc2hvdCk7CisJCWJyZWFrOworCQorCWNhc2UgNzIwOgorCWNhc2UgNzMwOgorCWNhc2UgNzQwOgorCWNhc2UgNzUwOgorCQlyZXQgPSBzZXRfdmlkZW9fbW9kZV9LaWFyYShwZGV2LCBzaXplLCBmcmFtZXMsIGNvbXByZXNzaW9uLCBzbmFwc2hvdCk7CisJCWJyZWFrOworCX0KKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FTk9FTlQpCisJCQlJbmZvKCJWaWRlbyBtb2RlICVzQCVkIGZwcyBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIHRoZSBkZWNvbXByZXNzb3IgbW9kdWxlIChwd2N4KS5cbiIsIHNpemUybmFtZVtzaXplXSwgZnJhbWVzKTsKKwkJZWxzZSB7CisJCQlFcnIoIkZhaWxlZCB0byBzZXQgdmlkZW8gbW9kZSAlc0AlZCBmcHM7IHJldHVybiBjb2RlID0gJWRcbiIsIHNpemUybmFtZVtzaXplXSwgZnJhbWVzLCByZXQpOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCXBkZXYtPnZpZXcueCA9IHdpZHRoOworCXBkZXYtPnZpZXcueSA9IGhlaWdodDsKKwlwZGV2LT5mcmFtZV90b3RhbF9zaXplID0gcGRldi0+ZnJhbWVfc2l6ZSArIHBkZXYtPmZyYW1lX2hlYWRlcl9zaXplICsgcGRldi0+ZnJhbWVfdHJhaWxlcl9zaXplOworCXB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUocGRldik7CisJVHJhY2UoVFJBQ0VfU0laRSwgIlNldCB2aWV3cG9ydCB0byAlZHglZCwgaW1hZ2Ugc2l6ZSBpcyAlZHglZC5cbiIsIHdpZHRoLCBoZWlnaHQsIHB3Y19pbWFnZV9zaXplc1tzaXplXS54LCBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV0ueSk7CisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBwd2Nfc2V0X2ltYWdlX2J1ZmZlcl9zaXplKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpLCBmYWN0b3IgPSAwLCBmaWxsZXIgPSAwOworCisJLyogZm9yIFBBTEVUVEVfWVVWNDIwUCAqLworCXN3aXRjaChwZGV2LT52cGFsZXR0ZSkKKwl7CisJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6CisJCWZhY3RvciA9IDY7CisJCWZpbGxlciA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSBWSURFT19QQUxFVFRFX1JBVzoKKwkJZmFjdG9yID0gNjsgLyogY2FuIGJlIHVuY29tcHJlc3NlZCBZVVY0MjBQICovCisJCWZpbGxlciA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCBzaXplcyBpbiBieXRlcyAqLworCXBkZXYtPmltYWdlLnNpemUgPSBwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIGZhY3RvciAvIDQ7CisJcGRldi0+dmlldy5zaXplICA9IHBkZXYtPnZpZXcueCAgKiBwZGV2LT52aWV3LnkgICogZmFjdG9yIC8gNDsKKworCS8qIEFsaWduIG9mZnNldCwgb3IgeW91J2xsIGdldCBzb21lIHZlcnkgd2VpcmQgcmVzdWx0cyBpbgorCSAgIFlVVjQyMCBtb2RlLi4uIHggbXVzdCBiZSBtdWx0aXBsZSBvZiA0ICh0byBnZXQgdGhlIFkncyBpbgorCSAgIHBsYWNlKSwgYW5kIHkgZXZlbiAob3IgeW91J2xsIG1peHVwIFUgJiBWKS4gVGhpcyBpcyBsZXNzIG9mIGEKKwkgICBwcm9ibGVtIGZvciBZVVY0MjBQLgorCSAqLworCXBkZXYtPm9mZnNldC54ID0gKChwZGV2LT52aWV3LnggLSBwZGV2LT5pbWFnZS54KSAvIDIpICYgMHhGRkZDOworCXBkZXYtPm9mZnNldC55ID0gKChwZGV2LT52aWV3LnkgLSBwZGV2LT5pbWFnZS55KSAvIDIpICYgMHhGRkZFOworCisJLyogRmlsbCBidWZmZXJzIHdpdGggZ3JheSBvciBibGFjayAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfSU1BR0VTOyBpKyspIHsKKwkJaWYgKHBkZXYtPmltYWdlX3B0cltpXSAhPSBOVUxMKQorCQkJbWVtc2V0KHBkZXYtPmltYWdlX3B0cltpXSwgZmlsbGVyLCBwZGV2LT52aWV3LnNpemUpOworCX0KK30KKworCisKKy8qIEJSSUdIVE5FU1MgKi8KKworaW50IHB3Y19nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIEJSSUdIVE5FU1NfRk9STUFUVEVSLCAxKTsJCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZiA8PCA5OworfQorCitpbnQgcHdjX3NldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCit7CisJY2hhciBidWY7CisKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwlidWYgPSAodmFsdWUgPj4gOSkgJiAweDdmOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQlJJR0hUTkVTU19GT1JNQVRURVIsIDEpOworfQorCisvKiBDT05UUkFTVCAqLworCitpbnQgcHdjX2dldF9jb250cmFzdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIENPTlRSQVNUX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZiA8PCAxMDsKK30KKworaW50IHB3Y19zZXRfY29udHJhc3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKK3sKKwljaGFyIGJ1ZjsKKworCWlmICh2YWx1ZSA8IDApCisJCXZhbHVlID0gMDsKKwlpZiAodmFsdWUgPiAweGZmZmYpCisJCXZhbHVlID0gMHhmZmZmOworCWJ1ZiA9ICh2YWx1ZSA+PiAxMCkgJiAweDNmOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQ09OVFJBU1RfRk9STUFUVEVSLCAxKTsKK30KKworLyogR0FNTUEgKi8KKworaW50IHB3Y19nZXRfZ2FtbWEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgR0FNTUFfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gYnVmIDw8IDExOworfQorCitpbnQgcHdjX3NldF9nYW1tYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQoreworCWNoYXIgYnVmOworCisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJYnVmID0gKHZhbHVlID4+IDExKSAmIDB4MWY7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBHQU1NQV9GT1JNQVRURVIsIDEpOworfQorCisKKy8qIFNBVFVSQVRJT04gKi8KKworaW50IHB3Y19nZXRfc2F0dXJhdGlvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCisJaWYgKHBkZXYtPnR5cGUgPCA2NzUpCisJCXJldHVybiAtMTsKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfQ0hST01fQ1RMLCBwZGV2LT50eXBlIDwgNzMwID8gU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjIgOiBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMSwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDMyNzY4ICsgYnVmICogMzI3OworfQorCitpbnQgcHdjX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCit7CisJY2hhciBidWY7CisKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJLyogc2F0dXJhdGlvbiByYW5nZXMgZnJvbSAtMTAwIHRvICsxMDAgKi8KKwlidWYgPSAodmFsdWUgLSAzMjc2OCkgLyAzMjc7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9DSFJPTV9DVEwsIHBkZXYtPnR5cGUgPCA3MzAgPyBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMiA6IFNBVFVSQVRJT05fTU9ERV9GT1JNQVRURVIxLCAxKTsKK30KKworLyogQUdDICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfYWdjKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSwgaW50IHZhbHVlKQoreworCWNoYXIgYnVmOworCWludCByZXQ7CisJCisJaWYgKG1vZGUpCisJCWJ1ZiA9IDB4MDsgLyogYXV0byAqLworCWVsc2UKKwkJYnVmID0gMHhmZjsgLyogZml4ZWQgKi8KKworCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsIDEpOworCQorCWlmICghbW9kZSAmJiByZXQgPj0gMCkgeworCQlpZiAodmFsdWUgPCAwKQorCQkJdmFsdWUgPSAwOworCQlpZiAodmFsdWUgPiAweGZmZmYpCisJCQl2YWx1ZSA9IDB4ZmZmZjsKKwkJYnVmID0gKHZhbHVlID4+IDEwKSAmIDB4M0Y7CisJCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwgMSk7CisJfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2FnYyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJ1ZiAhPSAwKSB7IC8qIGZpeGVkICovCisJCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKGJ1ZiA+IDB4M0YpCisJCQlidWYgPSAweDNGOworCQkqdmFsdWUgPSAoYnVmIDw8IDEwKTsJCQorCX0KKwllbHNlIHsgLyogYXV0byAqLworCQlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgUkVBRF9BR0NfRk9STUFUVEVSLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkvKiBHYWguLi4gdGhpcyB2YWx1ZSByYW5nZXMgZnJvbSAweDAwIC4uLiAweDlGICovCisJCWlmIChidWYgPiAweDlGKQorCQkJYnVmID0gMHg5RjsKKwkJKnZhbHVlID0gLSg0OCArIGJ1ZiAqIDQwOSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfc2h1dHRlcl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG1vZGUsIGludCB2YWx1ZSkKK3sKKwljaGFyIGJ1ZlsyXTsKKwlpbnQgc3BlZWQsIHJldDsKKworCisJaWYgKG1vZGUpCisJCWJ1ZlswXSA9IDB4MDsJLyogYXV0byAqLworCWVsc2UKKwkJYnVmWzBdID0gMHhmZjsgLyogZml4ZWQgKi8KKwkKKwlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgU0hVVFRFUl9NT0RFX0ZPUk1BVFRFUiwgMSk7CisKKwlpZiAoIW1vZGUgJiYgcmV0ID49IDApIHsKKwkJaWYgKHZhbHVlIDwgMCkKKwkJCXZhbHVlID0gMDsKKwkJaWYgKHZhbHVlID4gMHhmZmZmKQorCQkJdmFsdWUgPSAweGZmZmY7CisJCXN3aXRjaChwZGV2LT50eXBlKSB7CisJCWNhc2UgNjc1OgorCQljYXNlIDY4MDoKKwkJY2FzZSA2OTA6CisJCQkvKiBzcGVlZCByYW5nZXMgZnJvbSAweDAgdG8gMHgyOTAgKDY1NikgKi8KKwkJCXNwZWVkID0gKHZhbHVlIC8gMTAwKTsKKwkJCWJ1ZlsxXSA9IHNwZWVkID4+IDg7CisJCQlidWZbMF0gPSBzcGVlZCAmIDB4ZmY7CisJCQlicmVhazsKKwkJY2FzZSA3MjA6CisJCWNhc2UgNzMwOgorCQljYXNlIDc0MDoKKwkJY2FzZSA3NTA6CisJCQkvKiBzcGVlZCBzZWVtcyB0byByYW5nZSBmcm9tIDB4MCB0byAweGZmICovCisJCQlidWZbMV0gPSAwOworCQkJYnVmWzBdID0gdmFsdWUgPj4gODsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIFBSRVNFVF9TSFVUVEVSX0ZPUk1BVFRFUiwgMik7CisJfQorCXJldHVybiByZXQ7Cit9CQorCisKKy8qIFBPV0VSICovCisKK2ludCBwd2NfY2FtZXJhX3Bvd2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgcG93ZXIpCit7CisJY2hhciBidWY7CisKKwlpZiAocGRldi0+dHlwZSA8IDY3NSB8fCAocGRldi0+dHlwZSA8IDczMCAmJiBwZGV2LT5yZWxlYXNlIDwgNikpCisJCXJldHVybiAwOwkvKiBOb3Qgc3VwcG9ydGVkIGJ5IE5hbGEgb3IgVGltb24gPCByZWxlYXNlIDYgKi8KKworCWlmIChwb3dlcikKKwkJYnVmID0gMHgwMDsgLyogYWN0aXZlICovCisJZWxzZQorCQlidWYgPSAweEZGOyAvKiBwb3dlciBzYXZlICovCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBTRVRfUE9XRVJfU0FWRV9NT0RFX0ZPUk1BVFRFUiwgMSk7Cit9CisKKworCisvKiBwcml2YXRlIGNhbGxzICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19yZXN0b3JlX3VzZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJY2hhciBidWY7IC8qIGR1bW15ICovCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBSRVNUT1JFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NhdmVfdXNlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsgLyogZHVtbXkgKi8KKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX1NUQVRVU19DVEwsIFNBVkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfcmVzdG9yZV9mYWN0b3J5KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWNoYXIgYnVmOyAvKiBkdW1teSAqLworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfU1RBVFVTX0NUTCwgUkVTVE9SRV9GQUNUT1JZX0RFRkFVTFRTX0ZPUk1BVFRFUiwgMCk7Cit9CisKKyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgLyogUGF0Y2ggYnkgQWx2YXJhZG86IChub3QgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gICAqLworCisgLyoKKyAgKiB0aGUgY2FtZXJhIHJlY29nbml6ZXMgbW9kZXMgZnJvbSAwIHRvIDQ6CisgICoKKyAgKiAwMDogaW5kb29yIChpbmNhbmRlc2NhbnQgbGlnaHRpbmcpCisgICogMDE6IG91dGRvb3IgKHN1bmxpZ2h0KQorICAqIDAyOiBmbHVvcmVzY2VudCBsaWdodGluZworICAqIDAzOiBtYW51YWwKKyAgKiAwNDogYXV0bworICAqLyAKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSkKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCWlmIChtb2RlIDwgMCkKKwkgICAgbW9kZSA9IDA7CisJCisJaWYgKG1vZGUgPiA0KQorCSAgICBtb2RlID0gNDsKKwkKKwlidWYgPSBtb2RlICYgMHgwNzsgLyoganVzdCB0aGUgbG93ZXN0IHRocmVlIGJpdHMgKi8KKwkKKwlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBXQl9NT0RFX0ZPUk1BVFRFUiwgMSk7CisJCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgV0JfTU9ERV9GT1JNQVRURVIsIDEpOworCisJaWYgKHJldCA8IDApIAorCQlyZXR1cm4gcmV0OworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfcmVkX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKK3sKKyAgICAgICAgdW5zaWduZWQgY2hhciBidWY7CisKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwkvKiBvbmx5IHRoZSBtc2IgaXMgY29uc2lkZXJlZCAqLworCWJ1ZiA9IHZhbHVlID4+IDg7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9yZWRfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkgICAgcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgODsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2V0X2JsdWVfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJLyogb25seSB0aGUgbXNiIGlzIGNvbnNpZGVyZWQgKi8KKwlidWYgPSB2YWx1ZSA+PiA4OworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBQUkVTRVRfTUFOVUFMX0JMVUVfR0FJTl9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2JsdWVfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJICAgIHJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmIDw8IDg7CisJcmV0dXJuIDA7Cit9CisKKworLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBkaWZmZXJlbnQsIHNpbmNlIHRoZXkgb25seSByZWFkIHRoZQorICAgaW50ZXJuYWwgcmVkL2JsdWUgZ2FpbnMsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbWFudWFsIAorICAgZ2FpbnMgc2V0IG9yIHJlYWQgYWJvdmUuCisgKi8gICAKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19yZWFkX3JlZF9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX1NUQVRVU19DVEwsIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgODsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3JlYWRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX1NUQVRVU19DVEwsIFJFQURfQkxVRV9HQUlOX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmIDw8IDg7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF93Yl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNwZWVkKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCS8qIHVzZWZ1bCByYW5nZSBpcyAweDAxLi4weDIwICovCisJYnVmID0gc3BlZWQgLyAweDdmMDsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfU1BFRURfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF93Yl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIEFXQl9DT05UUk9MX1NQRUVEX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmICogMHg3ZjA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF93Yl9kZWxheShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGRlbGF5KQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCS8qIHVzZWZ1bCByYW5nZSBpcyAweDAxLi4weDNGICovCisJYnVmID0gKGRlbGF5ID4+IDEwKTsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfREVMQVlfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF93Yl9kZWxheShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIEFXQl9DT05UUk9MX0RFTEFZX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKnZhbHVlID0gYnVmIDw8IDEwOworCXJldHVybiAwOworfQorCisKK2ludCBwd2Nfc2V0X2xlZHMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBvbl92YWx1ZSwgaW50IG9mZl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKworCWlmIChwZGV2LT50eXBlIDwgNzMwKQorCQlyZXR1cm4gMDsKKwlvbl92YWx1ZSAvPSAxMDA7CisJb2ZmX3ZhbHVlIC89IDEwMDsKKwlpZiAob25fdmFsdWUgPCAwKQorCQlvbl92YWx1ZSA9IDA7CisJaWYgKG9uX3ZhbHVlID4gMHhmZikKKwkJb25fdmFsdWUgPSAweGZmOworCWlmIChvZmZfdmFsdWUgPCAwKQorCQlvZmZfdmFsdWUgPSAwOworCWlmIChvZmZfdmFsdWUgPiAweGZmKQorCQlvZmZfdmFsdWUgPSAweGZmOworCisJYnVmWzBdID0gb25fdmFsdWU7CisJYnVmWzFdID0gb2ZmX3ZhbHVlOworCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBMRURfRk9STUFUVEVSLCAyKTsKK30KKworaW50IHB3Y19nZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpvbl92YWx1ZSwgaW50ICpvZmZfdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJaW50IHJldDsKKwkKKwlpZiAocGRldi0+dHlwZSA8IDczMCkgeworCQkqb25fdmFsdWUgPSAtMTsKKwkJKm9mZl92YWx1ZSA9IC0xOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgTEVEX0ZPUk1BVFRFUiwgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKm9uX3ZhbHVlID0gYnVmWzBdICogMTAwOworCSpvZmZfdmFsdWUgPSBidWZbMV0gKiAxMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfY29udG91cihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGNvbnRvdXIpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlpZiAoY29udG91ciA8IDApCisJCWJ1ZiA9IDB4ZmY7IC8qIGF1dG8gY29udG91ciBvbiAqLworCWVsc2UKKwkJYnVmID0gMHgwOyAvKiBhdXRvIGNvbnRvdXIgb2ZmICovCisJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEFVVE9fQ09OVE9VUl9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCQorCWlmIChjb250b3VyIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKGNvbnRvdXIgPiAweGZmZmYpCisJCWNvbnRvdXIgPSAweGZmZmY7CisJCisJYnVmID0gKGNvbnRvdXIgPj4gMTApOyAvKiBjb250b3VyIHByZXNldCBpcyBbMC4uM2ZdICovCisJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIFBSRVNFVF9DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCQorCQlyZXR1cm4gcmV0OwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9jb250b3VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmNvbnRvdXIpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgQVVUT19DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoYnVmID09IDApIHsKKwkJLyogYXV0byBtb2RlIG9mZiwgcXVlcnkgY3VycmVudCBwcmVzZXQgdmFsdWUgKi8KKwkJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIFBSRVNFVF9DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJCWlmIChyZXQgPCAwKQkKKwkJCXJldHVybiByZXQ7CisJCSpjb250b3VyID0gYnVmIDw8IDEwOworCX0KKwllbHNlCisJCSpjb250b3VyID0gLTE7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9iYWNrbGlnaHQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBiYWNrbGlnaHQpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJCisJaWYgKGJhY2tsaWdodCkKKwkJYnVmID0gMHhmZjsKKwllbHNlCisJCWJ1ZiA9IDB4MDsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEJBQ0tfTElHSFRfQ09NUEVOU0FUSU9OX0ZPUk1BVFRFUiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfYmFja2xpZ2h0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmJhY2tsaWdodCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCSpiYWNrbGlnaHQgPSBidWY7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9mbGlja2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgZmxpY2tlcikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlpZiAoZmxpY2tlcikKKwkJYnVmID0gMHhmZjsKKwllbHNlCisJCWJ1ZiA9IDB4MDsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEZMSUNLRVJMRVNTX01PREVfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9mbGlja2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmZsaWNrZXIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCSpmbGlja2VyID0gYnVmOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfZHluYW1pY19ub2lzZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG5vaXNlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCisJaWYgKG5vaXNlIDwgMCkKKwkJbm9pc2UgPSAwOworCWlmIChub2lzZSA+IDMpCisJCW5vaXNlID0gMzsKKwlidWYgPSBub2lzZTsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIERZTkFNSUNfTk9JU0VfQ09OVFJPTF9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2R5bmFtaWNfbm9pc2Uoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqbm9pc2UpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgRFlOQU1JQ19OT0lTRV9DT05UUk9MX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKm5vaXNlID0gYnVmOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB3Y19tcHRfcmVzZXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlidWYgPSBmbGFncyAmIDB4MDM7IC8vIG9ubHkgbG93ZXIgdHdvIGJpdHMgYXJlIGN1cnJlbnRseSB1c2VkCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9NUFRfQ1RMLCBQVF9SRVNFVF9DT05UUk9MX0ZPUk1BVFRFUiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19tcHRfc2V0X2FuZ2xlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgcGFuLCBpbnQgdGlsdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKwkKKwkvKiBzZXQgbmV3IHJlbGF0aXZlIGFuZ2xlOyBhbmdsZXMgYXJlIGV4cHJlc3NlZCBpbiBkZWdyZWVzICogMTAwLAorCSAgIGJ1dCBjYW0gYXMgLjUgZGVncmVlIHJlc29sdXRpb24sIGhlbmNlIGRldmlkZSBieSAyMDAuIEFsc28KKwkgICB0aGUgYW5nbGUgbXVzdCBiZSBtdWx0aXBsaWVkIGJ5IDY0IGJlZm9yZSBpdCdzIHNlbmQgdG8KKwkgICB0aGUgY2FtICg/PykKKwkgKi8KKwlwYW4gID0gIDY0ICogcGFuICAvIDEwMDsKKwl0aWx0ID0gLTY0ICogdGlsdCAvIDEwMDsgLyogcG9zaXRpdmUgdGlsdCBpcyBkb3duLCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgdXNlciB3b3VsZCBleHBlY3QgKi8KKwlidWZbMF0gPSBwYW4gJiAweEZGOworCWJ1ZlsxXSA9IChwYW4gPj4gOCkgJiAweEZGOworCWJ1ZlsyXSA9IHRpbHQgJiAweEZGOworCWJ1ZlszXSA9ICh0aWx0ID4+IDgpICYgMHhGRjsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX01QVF9DVEwsIFBUX1JFTEFUSVZFX0NPTlRST0xfRk9STUFUVEVSLCA0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX21wdF9nZXRfc3RhdHVzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcHdjX21wdF9zdGF0dXMgKnN0YXR1cykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzVdOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9NUFRfQ1RMLCBQVF9TVEFUVVNfRk9STUFUVEVSLCA1KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlzdGF0dXMtPnN0YXR1cyA9IGJ1ZlswXSAmIDB4NzsgLy8gMyBiaXRzIGFyZSB1c2VkIGZvciByZXBvcnRpbmcKKwlzdGF0dXMtPnRpbWVfcGFuID0gKGJ1ZlsxXSA8PCA4KSArIGJ1ZlsyXTsKKwlzdGF0dXMtPnRpbWVfdGlsdCA9IChidWZbM10gPDwgOCkgKyBidWZbNF07CisJcmV0dXJuIDA7Cit9CisKKworaW50IHB3Y19nZXRfY21vc19zZW5zb3Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqc2Vuc29yKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQgPSAtMSwgcmVxdWVzdDsKKwkKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJcmVxdWVzdCA9IFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjE7CisJZWxzZSBpZiAocGRldi0+dHlwZSA8IDczMCkKKwkJcmV0dXJuIC0xOyAvKiBUaGUgVmVzdGEgc2VyaWVzIGRvZXNuJ3QgaGF2ZSB0aGlzIGNhbGwgKi8KKwllbHNlCisJCXJlcXVlc3QgPSBTRU5TT1JfVFlQRV9GT1JNQVRURVIyOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9TVEFUVVNfQ1RMLCByZXF1ZXN0LCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJKnNlbnNvciA9IGJ1ZiB8IDB4MTAwOworCWVsc2UKKwkJKnNlbnNvciA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KKworCisgLyogRW5kIG9mIEFkZC1PbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogTGludXggMi41LnNvbWV0aGluZyBhbmQgMi42IHBhc3MgZGlyZWN0IHBvaW50ZXJzIHRvIGFyZ3VtZW50cyBvZgorICAgaW9jdGwoKSBjYWxscy4gV2l0aCAyLjQsIHlvdSBoYXZlIHRvIGRvIHRlZGlvdXMgY29weV9mcm9tX3VzZXIoKQorICAgYW5kIGNvcHlfdG9fdXNlcigpIGNhbGxzLiBXaXRoIHRoZXNlIG1hY3JvcyB3ZSBjaXJjdW12ZW50IHRoaXMsCisgICBhbmQgbGV0IG1lIG1haW50YWluIG9ubHkgb25lIHNvdXJjZSBmaWxlLiBUaGUgZnVuY3Rpb25hbGl0eSBpcworICAgZXhhY3RseSB0aGUgc2FtZSBvdGhlcndpc2UuCisgKi8gICAKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAwKQorCisvKiBkZWZpbmUgbG9jYWwgdmFyaWFibGUgZm9yIGFyZyAqLworI2RlZmluZSBBUkdfREVGKEFSR190eXBlLCBBUkdfbmFtZSlcCisJQVJHX3R5cGUgKkFSR19uYW1lID0gYXJnOworLyogY29weSBhcmcgdG8gbG9jYWwgdmFyaWFibGUgKi8JCisjZGVmaW5lIEFSR19JTihBUkdfbmFtZSkgLyogbm90aGluZyAqLworLyogYXJndW1lbnQgaXRzZWxmIChyZWZlcmVuY2VkKSAqLworI2RlZmluZSBBUkdSKEFSR19uYW1lKSAoKkFSR19uYW1lKQorLyogYXJndW1lbnQgYWRkcmVzcyAqLworI2RlZmluZSBBUkdBKEFSR19uYW1lKSBBUkdfbmFtZQorLyogY29weSBsb2NhbCB2YXJpYWJsZSB0byBhcmcgKi8KKyNkZWZpbmUgQVJHX09VVChBUkdfbmFtZSkgLyogbm90aGluZyAqLworCisjZWxzZQorCisjZGVmaW5lIEFSR19ERUYoQVJHX3R5cGUsIEFSR19uYW1lKVwKKwlBUkdfdHlwZSBBUkdfbmFtZTsKKyNkZWZpbmUgQVJHX0lOKEFSR19uYW1lKVwKKwlpZiAoY29weV9mcm9tX3VzZXIoJkFSR19uYW1lLCBhcmcsIHNpemVvZihBUkdfbmFtZSkpKSB7XAorCQlyZXQgPSAtRUZBVUxUO1wKKwkJYnJlYWs7XAorCX0KKyNkZWZpbmUgQVJHUihBUkdfbmFtZSkgQVJHX25hbWUKKyNkZWZpbmUgQVJHQShBUkdfbmFtZSkgJkFSR19uYW1lCisjZGVmaW5lIEFSR19PVVQoQVJHX25hbWUpXAorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmQVJHX25hbWUsIHNpemVvZihBUkdfbmFtZSkpKSB7XAorCQlyZXQgPSAtRUZBVUxUO1wKKwkJYnJlYWs7XAorCX0KKworI2VuZGlmCisKK2ludCBwd2NfaW9jdGwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaChjbWQpIHsKKwljYXNlIFZJRElPQ1BXQ1JVU0VSOgorCXsKKwkJaWYgKHB3Y19yZXN0b3JlX3VzZXIocGRldikpCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NTVVNFUjoKKwl7CisJCWlmIChwd2Nfc2F2ZV91c2VyKHBkZXYpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCQkKKwljYXNlIFZJRElPQ1BXQ0ZBQ1RPUlk6CisJeworCQlpZiAocHdjX3Jlc3RvcmVfZmFjdG9yeShwZGV2KSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NDUVVBTDoKKwl7CQorCQlBUkdfREVGKGludCwgcXVhbCkKKworCQlBUkdfSU4ocXVhbCkKKwkJaWYgKEFSR1IocXVhbCkgPCAwIHx8IEFSR1IocXVhbCkgPiAzKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHBkZXYtPnZpZXcueCwgcGRldi0+dmlldy55LCBwZGV2LT52ZnJhbWVzLCBBUkdSKHF1YWwpLCBwZGV2LT52c25hcHNob3QpOworCQlpZiAocmV0ID49IDApCisJCQlwZGV2LT52Y29tcHJlc3Npb24gPSBBUkdSKHF1YWwpOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NHQ1FVQUw6CisJeworCQlBUkdfREVGKGludCwgcXVhbCkKKwkJCisJCUFSR1IocXVhbCkgPSBwZGV2LT52Y29tcHJlc3Npb247CisJCUFSR19PVVQocXVhbCkKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDUFJPQkU6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2NfcHJvYmUsIHByb2JlKQorCQkKKwkJc3RyY3B5KEFSR1IocHJvYmUpLm5hbWUsIHBkZXYtPnZkZXYtPm5hbWUpOworCQlBUkdSKHByb2JlKS50eXBlID0gcGRldi0+dHlwZTsKKwkJQVJHX09VVChwcm9iZSkKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHU0VSSUFMOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3NlcmlhbCwgc2VyaWFsKQorCQkKKwkJc3RyY3B5KEFSR1Ioc2VyaWFsKS5zZXJpYWwsIHBkZXYtPnNlcmlhbCk7CisJCUFSR19PVVQoc2VyaWFsKQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ1NBR0M6CisJeworCQlBUkdfREVGKGludCwgYWdjKQorCisJCUFSR19JTihhZ2MpCisJCWlmIChwd2Nfc2V0X2FnYyhwZGV2LCBBUkdSKGFnYykgPCAwID8gMSA6IDAsIEFSR1IoYWdjKSkpCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NHQUdDOgorCXsKKwkJQVJHX0RFRihpbnQsIGFnYykKKwkJCisJCWlmIChwd2NfZ2V0X2FnYyhwZGV2LCBBUkdBKGFnYykpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJQVJHX09VVChhZ2MpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NTSFVUVEVSOgorCXsKKwkJQVJHX0RFRihpbnQsIHNodXR0ZXJfc3BlZWQpCisKKwkJQVJHX0lOKHNodXR0ZXJfc3BlZWQpCisJCXJldCA9IHB3Y19zZXRfc2h1dHRlcl9zcGVlZChwZGV2LCBBUkdSKHNodXR0ZXJfc3BlZWQpIDwgMCA/IDEgOiAwLCBBUkdSKHNodXR0ZXJfc3BlZWQpKTsKKwkJYnJlYWs7CisJfQorCQorICAgICAgICBjYXNlIFZJRElPQ1BXQ1NBV0I6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlLCB3YikKKwkJCisJCUFSR19JTih3YikKKwkJcmV0ID0gcHdjX3NldF9hd2IocGRldiwgQVJHUih3YikubW9kZSk7CisJCWlmIChyZXQgPj0gMCAmJiBBUkdSKHdiKS5tb2RlID09IFBXQ19XQl9NQU5VQUwpIHsKKwkJCXB3Y19zZXRfcmVkX2dhaW4ocGRldiwgQVJHUih3YikubWFudWFsX3JlZCk7CisJCQlwd2Nfc2V0X2JsdWVfZ2FpbihwZGV2LCBBUkdSKHdiKS5tYW51YWxfYmx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHQVdCOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSwgd2IpCisKKwkJbWVtc2V0KEFSR0Eod2IpLCAwLCBzaXplb2Yoc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UpKTsKKwkJQVJHUih3YikubW9kZSA9IHB3Y19nZXRfYXdiKHBkZXYpOworCQlpZiAoQVJHUih3YikubW9kZSA8IDApCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlIHsKKwkJCWlmIChBUkdSKHdiKS5tb2RlID09IFBXQ19XQl9NQU5VQUwpIHsKKwkJCQlyZXQgPSBwd2NfZ2V0X3JlZF9nYWluKHBkZXYsICZBUkdSKHdiKS5tYW51YWxfcmVkKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJcmV0ID0gcHdjX2dldF9ibHVlX2dhaW4ocGRldiwgJkFSR1Iod2IpLm1hbnVhbF9ibHVlKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoQVJHUih3YikubW9kZSA9PSBQV0NfV0JfQVVUTykgeworCQkJCXJldCA9IHB3Y19yZWFkX3JlZF9nYWluKHBkZXYsICZBUkdSKHdiKS5yZWFkX3JlZCk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWJyZWFrOworIAkJCQlyZXQgPXB3Y19yZWFkX2JsdWVfZ2FpbihwZGV2LCAmQVJHUih3YikucmVhZF9ibHVlKTsKKyAJCQkJaWYgKHJldCA8IDApCisgCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlBUkdfT1VUKHdiKQorCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NTQVdCU1BFRUQ6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2Jfc3BlZWQsIHdicykKKwkJCisJCWlmIChBUkdSKHdicykuY29udHJvbF9zcGVlZCA+IDApIHsKKwkJCXJldCA9IHB3Y19zZXRfd2Jfc3BlZWQocGRldiwgQVJHUih3YnMpLmNvbnRyb2xfc3BlZWQpOworCQl9CisJCWlmIChBUkdSKHdicykuY29udHJvbF9kZWxheSA+IDApIHsKKwkJCXJldCA9IHB3Y19zZXRfd2JfZGVsYXkocGRldiwgQVJHUih3YnMpLmNvbnRyb2xfZGVsYXkpOworCQl9CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ0dBV0JTUEVFRDoKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y193Yl9zcGVlZCwgd2JzKQorCQkKKwkJcmV0ID0gcHdjX2dldF93Yl9zcGVlZChwZGV2LCAmQVJHUih3YnMpLmNvbnRyb2xfc3BlZWQpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlyZXQgPSBwd2NfZ2V0X3diX2RlbGF5KHBkZXYsICZBUkdSKHdicykuY29udHJvbF9kZWxheSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCUFSR19PVVQod2JzKQorCQlicmVhazsKKwl9CisKKyAgICAgICAgY2FzZSBWSURJT0NQV0NTTEVEOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX2xlZHMsIGxlZHMpCisKKwkJQVJHX0lOKGxlZHMpCisJCXJldCA9IHB3Y19zZXRfbGVkcyhwZGV2LCBBUkdSKGxlZHMpLmxlZF9vbiwgQVJHUihsZWRzKS5sZWRfb2ZmKTsKKwkgICAgCWJyZWFrOworCX0KKworCisJY2FzZSBWSURJT0NQV0NHTEVEOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX2xlZHMsIGxlZHMpCisJCQorCQlyZXQgPSBwd2NfZ2V0X2xlZHMocGRldiwgJkFSR1IobGVkcykubGVkX29uLCAmQVJHUihsZWRzKS5sZWRfb2ZmKTsKKwkJQVJHX09VVChsZWRzKQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ1NDT05UT1VSOgorCXsKKwkJQVJHX0RFRihpbnQsIGNvbnRvdXIpCisKKwkJQVJHX0lOKGNvbnRvdXIpCisJCXJldCA9IHB3Y19zZXRfY29udG91cihwZGV2LCBBUkdSKGNvbnRvdXIpKTsKKwkJYnJlYWs7CisJfQorCQkJCisJY2FzZSBWSURJT0NQV0NHQ09OVE9VUjoKKwl7CisJCUFSR19ERUYoaW50LCBjb250b3VyKQorCQkKKwkJcmV0ID0gcHdjX2dldF9jb250b3VyKHBkZXYsIEFSR0EoY29udG91cikpOworCQlBUkdfT1VUKGNvbnRvdXIpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NCQUNLTElHSFQ6CisJeworCQlBUkdfREVGKGludCwgYmFja2xpZ2h0KQorCQkKKwkJQVJHX0lOKGJhY2tsaWdodCkKKwkJcmV0ID0gcHdjX3NldF9iYWNrbGlnaHQocGRldiwgQVJHUihiYWNrbGlnaHQpKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHQkFDS0xJR0hUOgorCXsKKwkJQVJHX0RFRihpbnQsIGJhY2tsaWdodCkKKwkJCisJCXJldCA9IHB3Y19nZXRfYmFja2xpZ2h0KHBkZXYsIEFSR0EoYmFja2xpZ2h0KSk7CisJCUFSR19PVVQoYmFja2xpZ2h0KQorCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NTRkxJQ0tFUjoKKwl7CisJCUFSR19ERUYoaW50LCBmbGlja2VyKQorCQkKKwkJQVJHX0lOKGZsaWNrZXIpCisJCXJldCA9IHB3Y19zZXRfZmxpY2tlcihwZGV2LCBBUkdSKGZsaWNrZXIpKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHRkxJQ0tFUjoKKwl7CisJCUFSR19ERUYoaW50LCBmbGlja2VyKQorCQkKKwkJcmV0ID0gcHdjX2dldF9mbGlja2VyKHBkZXYsIEFSR0EoZmxpY2tlcikpOworCQlBUkdfT1VUKGZsaWNrZXIpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NEWU5OT0lTRToKKwl7CisJCUFSR19ERUYoaW50LCBkeW5ub2lzZSkKKwkJCisJCUFSR19JTihkeW5ub2lzZSkKKwkJcmV0ID0gcHdjX3NldF9keW5hbWljX25vaXNlKHBkZXYsIEFSR1IoZHlubm9pc2UpKTsKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDR0RZTk5PSVNFOgorCXsKKwkJQVJHX0RFRihpbnQsIGR5bm5vaXNlKQorCisJCXJldCA9IHB3Y19nZXRfZHluYW1pY19ub2lzZShwZGV2LCBBUkdBKGR5bm5vaXNlKSk7CisJCUFSR19PVVQoZHlubm9pc2UpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ0dSRUFMU0laRToKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y19pbWFnZXNpemUsIHNpemUpCisJCQorCQlBUkdSKHNpemUpLndpZHRoID0gcGRldi0+aW1hZ2UueDsKKwkJQVJHUihzaXplKS5oZWlnaHQgPSBwZGV2LT5pbWFnZS55OworCQlBUkdfT1VUKHNpemUpCisJCWJyZWFrOworIAl9CisgCQorIAljYXNlIFZJRElPQ1BXQ01QVFJFU0VUOgorIAl7CisgCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCisgCQl7CisJIAkJQVJHX0RFRihpbnQsIGZsYWdzKQorCisgCQkJQVJHX0lOKGZsYWdzKQorCQkJcmV0ID0gcHdjX21wdF9yZXNldChwZGV2LCBBUkdSKGZsYWdzKSk7CisgCQkJaWYgKHJldCA+PSAwKQorIAkJCXsKKyAJCQkJcGRldi0+cGFuX2FuZ2xlID0gMDsKKyAJCQkJcGRldi0+dGlsdF9hbmdsZSA9IDA7CisgCQkJfQorIAkJfQorIAkJZWxzZQorIAkJeworIAkJCXJldCA9IC1FTlhJTzsKKyAJCX0KKyAJCWJyZWFrOwkJCisgCX0KKyAJCisgCWNhc2UgVklESU9DUFdDTVBUR1JBTkdFOgorIAl7CisgCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCisgCQl7CisgCQkJQVJHX0RFRihzdHJ1Y3QgcHdjX21wdF9yYW5nZSwgcmFuZ2UpCisgCQkJCisgCQkJQVJHUihyYW5nZSkgPSBwZGV2LT5hbmdsZV9yYW5nZTsKKyAJCQlBUkdfT1VUKHJhbmdlKQorIAkJfQorIAkJZWxzZQorIAkJewkKKyAJCQlyZXQgPSAtRU5YSU87CisgCQl9CisgCQlicmVhazsKKyAJfQorIAkKKyAJY2FzZSBWSURJT0NQV0NNUFRTQU5HTEU6CisgCXsKKyAJCWludCBuZXdfcGFuLCBuZXdfdGlsdDsKKyAJCQorIAkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorIAkJeworCSAJCUFSR19ERUYoc3RydWN0IHB3Y19tcHRfYW5nbGVzLCBhbmdsZXMpCisKKwkgCQlBUkdfSU4oYW5nbGVzKQorCQkJLyogVGhlIGNhbWVyYSBjYW4gb25seSBzZXQgcmVsYXRpdmUgYW5nbGVzLCBzbworCQkJICAgZG8gc29tZSBjYWxjdWxhdGlvbnMgd2hlbiBnZXR0aW5nIGFuIGFic29sdXRlIGFuZ2xlIC4KKwkJCSAqLworCQkJaWYgKEFSR1IoYW5nbGVzKS5hYnNvbHV0ZSkKKwkJCXsKKyAJCQkJbmV3X3BhbiAgPSBBUkdSKGFuZ2xlcykucGFuOyAKKyAJCQkJbmV3X3RpbHQgPSBBUkdSKGFuZ2xlcykudGlsdDsKKyAJCQl9CisgCQkJZWxzZQorIAkJCXsKKyAJCQkJbmV3X3BhbiAgPSBwZGV2LT5wYW5fYW5nbGUgICsgQVJHUihhbmdsZXMpLnBhbjsKKyAJCQkJbmV3X3RpbHQgPSBwZGV2LT50aWx0X2FuZ2xlICsgQVJHUihhbmdsZXMpLnRpbHQ7CisJCQl9CisJCQkvKiBjaGVjayBhYnNvbHV0ZSByYW5nZXMgKi8KKwkJCWlmIChuZXdfcGFuICA8IHBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9taW4gIHx8CisJCQkgICAgbmV3X3BhbiAgPiBwZGV2LT5hbmdsZV9yYW5nZS5wYW5fbWF4ICB8fAorCQkJICAgIG5ld190aWx0IDwgcGRldi0+YW5nbGVfcmFuZ2UudGlsdF9taW4gfHwKKwkJCSAgICBuZXdfdGlsdCA+IHBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWF4KQorCQkJeworCQkJCXJldCA9IC1FUkFOR0U7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogZ28gdG8gcmVsYXRpdmUgcmFuZ2UsIGNoZWNrIGFnYWluICovCisJCQkJbmV3X3BhbiAgLT0gcGRldi0+cGFuX2FuZ2xlOworCQkJCW5ld190aWx0IC09IHBkZXYtPnRpbHRfYW5nbGU7CisJCQkJLyogYW5nbGVzIGFyZSBzcGVjaWZpZWQgaW4gZGVncmVlcyAqIDEwMCwgdGh1cyB0aGUgbGltaXQgPSAzNjAwMCAqLworCQkJCWlmIChuZXdfcGFuIDwgLTM2MDAwIHx8IG5ld19wYW4gPiAzNjAwMCB8fCBuZXdfdGlsdCA8IC0zNjAwMCB8fCBuZXdfdGlsdCA+IDM2MDAwKQorCQkJCQlyZXQgPSAtRVJBTkdFOworCQkJfQorCQkJaWYgKHJldCA9PSAwKSAvKiBubyBlcnJvcnMgc28gZmFyICovCisJCQl7CisJCQkJcmV0ID0gcHdjX21wdF9zZXRfYW5nbGUocGRldiwgbmV3X3BhbiwgbmV3X3RpbHQpOworCQkJCWlmIChyZXQgPj0gMCkKKwkJCQl7CisJCQkJCXBkZXYtPnBhbl9hbmdsZSAgKz0gbmV3X3BhbjsKKwkJCQkJcGRldi0+dGlsdF9hbmdsZSArPSBuZXdfdGlsdDsKKwkJCQl9CisJCQkJaWYgKHJldCA9PSAtRVBJUEUpIC8qIHN0YWxsIC0+IG91dCBvZiByYW5nZSAqLworCQkJCQlyZXQgPSAtRVJBTkdFOwkJCQkKKwkJCX0KKyAJCX0KKyAJCWVsc2UKKyAJCXsKKyAJCQlyZXQgPSAtRU5YSU87CisgCQl9CisgCQlicmVhazsKKyAJfQorCisgCWNhc2UgVklESU9DUFdDTVBUR0FOR0xFOgorIAl7CisgCQkKKyAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKyAJCXsKKwkgCQlBUkdfREVGKHN0cnVjdCBwd2NfbXB0X2FuZ2xlcywgYW5nbGVzKQorCisgCQkJQVJHUihhbmdsZXMpLmFic29sdXRlID0gMTsKKyAJCQlBUkdSKGFuZ2xlcykucGFuICA9IHBkZXYtPnBhbl9hbmdsZTsKKyAJCQlBUkdSKGFuZ2xlcykudGlsdCA9IHBkZXYtPnRpbHRfYW5nbGU7CisgCQkJQVJHX09VVChhbmdsZXMpCisgCQl9CisgCQllbHNlCisgCQl7CisgCQkJcmV0ID0gLUVOWElPOworIAkJfQorIAkJYnJlYWs7CisgCX0KKyAKKyAJY2FzZSBWSURJT0NQV0NNUFRTVEFUVVM6CisgCXsKKyAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKyAJCXsKKyAJCQlBUkdfREVGKHN0cnVjdCBwd2NfbXB0X3N0YXR1cywgc3RhdHVzKQorIAkJCQorIAkJCXJldCA9IHB3Y19tcHRfZ2V0X3N0YXR1cyhwZGV2LCBBUkdBKHN0YXR1cykpOworIAkJCUFSR19PVVQoc3RhdHVzKQorIAkJfQorIAkJZWxzZQorIAkJeworIAkJCXJldCA9IC1FTlhJTzsKKyAJCX0KKyAJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DUFdDR1ZJRENNRDoKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y192aWRlb19jb21tYW5kLCBjbWQpOworCQkKKyAgICAgICAgICAgICAgICBBUkdSKGNtZCkudHlwZSA9IHBkZXYtPnR5cGU7CisJCUFSR1IoY21kKS5yZWxlYXNlID0gcGRldi0+cmVsZWFzZTsKKwkJQVJHUihjbWQpLmNvbW1hbmRfbGVuID0gcGRldi0+Y21kX2xlbjsKKwkJbWVtY3B5KCZBUkdSKGNtZCkuY29tbWFuZF9idWYsIHBkZXYtPmNtZF9idWYsIHBkZXYtPmNtZF9sZW4pOworCQlBUkdSKGNtZCkuYmFuZGxlbmd0aCA9IHBkZXYtPnZiYW5kbGVuZ3RoOworCQlBUkdSKGNtZCkuZnJhbWVfc2l6ZSA9IHBkZXYtPmZyYW1lX3NpemU7CisJCUFSR19PVVQoY21kKQorCQlicmVhazsKKwl9CisgICAgICAgLyoKKwljYXNlIFZJRElPQ1BXQ0dWSURUQUJMRToKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlciwgdGFibGUpOworCQlBUkdSKHRhYmxlKS5sZW4gPSBwZGV2LT5jbWRfbGVuOworCQltZW1jcHkoJkFSR1IodGFibGUpLmJ1ZmZlciwgcGRldi0+ZGVjb21wcmVzc19kYXRhLCBwZGV2LT5kZWNvbXByZXNzb3ItPnRhYmxlX3NpemUpOworCQlBUkdfT1VUKHRhYmxlKQorCQlicmVhazsKKwl9CisJKi8KKworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCQorCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2QwM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmMKQEAgLTAsMCArMSw0MiBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgRGVjb21wcmVzc2lvbiBmb3IgY2hpcHNldCB2ZXJzaW9uIDEKKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisKKyNpbmNsdWRlICJwd2MtZGVjMS5oIgorCisKK3ZvaWQgcHdjX2RlYzFfaW5pdChpbnQgdHlwZSwgaW50IHJlbGVhc2UsIHZvaWQgKmJ1ZmZlciwgdm9pZCAqdGFibGUpCit7CisKK30KKwordm9pZCBwd2NfZGVjMV9leGl0KHZvaWQpCit7CisKKworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMS5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmZmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisKKyNpZm5kZWYgUFdDX0RFQzFfSAorI2RlZmluZSBQV0NfREVDMV9ICisKK3ZvaWQgcHdjX2RlYzFfaW5pdChpbnQgdHlwZSwgaW50IHJlbGVhc2UsIHZvaWQgKmJ1ZmZlciwgdm9pZCAqcHJpdmF0ZV9kYXRhKTsKK3ZvaWQgcHdjX2RlYzFfZXhpdCh2b2lkKTsKKworI2VuZGlmCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzIzLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYTNmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuYwpAQCAtMCwwICsxLDYyMyBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgRGVjb21wcmVzc2lvbiBmb3IgY2hpcHNldCB2ZXJzaW9uIDIgZXQgMworICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSAicHdjLXRpbW9uLmgiCisjaW5jbHVkZSAicHdjLWtpYXJhLmgiCisjaW5jbHVkZSAicHdjLWRlYzIzLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyoqKioKKyAqCisgKgorICoKKyAqLworCisKK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfYTAwMCh1bnNpZ25lZCBpbnQgKnApCit7CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdGlhbF92YWx1ZXNbMTJdID0geworICAgICAweEZGQUQ5QjAwLCAweEZGRERFRTAwLCAweDAwMjIxMjAwLCAweDAwNTI2NTAwLAorICAgICAweEZGQzIxRTAwLCAweDAwM0RFMjAwLCAweEZGOTI0QjgwLCAweEZGRDJBMzAwLAorICAgICAweDAwMkQ1RDAwLCAweDAwNkRCNDgwLCAweEZGRUQzRTAwLCAweDAwMTJDMjAwCisgIH07CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmFsdWVzX2Rlcml2YXRlZFsxMl0gPSB7CisgICAgIDB4MDAwMEE0Q0EsIDB4MDAwMDQ0MjQsIDB4RkZGRkJCREMsIDB4RkZGRjVCMzYsCisgICAgIDB4MDAwMDdCQzQsIDB4RkZGRjg0M0MsIDB4MDAwMERCNjksIDB4MDAwMDVBQkEsCisgICAgIDB4RkZGRkE1NDYsIDB4RkZGRjI0OTcsIDB4MDAwMDI1ODQsIDB4RkZGRkRBN0MKKyAgfTsKKyAgdW5zaWduZWQgaW50IHRlbXBfdmFsdWVzWzEyXTsKKyAgaW50IGksajsKKworICBtZW1jcHkodGVtcF92YWx1ZXMsaW5pdGlhbF92YWx1ZXMsc2l6ZW9mKGluaXRpYWxfdmFsdWVzKSk7CisgIGZvciAoaT0wO2k8MjU2O2krKykKKyAgIHsKKyAgICAgZm9yIChqPTA7ajwxMjtqKyspCisgICAgICB7CisJKnArKyA9IHRlbXBfdmFsdWVzW2pdOworCXRlbXBfdmFsdWVzW2pdICs9IHZhbHVlc19kZXJpdmF0ZWRbal07CisgICAgICB9CisgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfZDAwMCh1bnNpZ25lZCBjaGFyICpwKQoreworICBpbnQgYml0LGJ5dGU7CisKKyAgZm9yIChiaXQ9MDsgYml0PDg7IGJpdCsrKQorICAgeworICAgICB1bnNpZ25lZCBjaGFyIGJpdHBvd2VyID0gMTw8Yml0OworICAgICB1bnNpZ25lZCBjaGFyIG1hc2sgPSBiaXRwb3dlci0xOworICAgICBmb3IgKGJ5dGU9MDsgYnl0ZTwyNTY7IGJ5dGUrKykKKyAgICAgIHsKKwlpZiAoYnl0ZSAmIGJpdHBvd2VyKQorCSAgKnArKyA9IC0oYnl0ZSAmIG1hc2spOworCWVsc2UKKwkgICpwKysgPSAoYnl0ZSAmIG1hc2spOworICAgICAgfQorICAgfQorfQorCisvKgorICoKKyAqIEtpYXJhOiAwIDw9IHZlciA8PSA3CisgKiBUaW1vbjogMCA8PSB2ZXIgPD0gMTUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfY29sb3IodW5zaWduZWQgaW50IHZlcnNpb24sIGNvbnN0IHVuc2lnbmVkIGludCAqcm9tdGFibGUsIAorICAgIHVuc2lnbmVkIGNoYXIgKnAwMDA0LCAKKyAgICB1bnNpZ25lZCBjaGFyICpwODAwNCkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50ICp0YWJsZTsKKyAgdW5zaWduZWQgY2hhciAqcDAsICpwODsKKyAgaW50IGksaixrOworICBpbnQgZGwsYml0LHB3OworCisgIHJvbXRhYmxlICs9IHZlcnNpb24qMjU2OworCisgIGZvciAoaT0wOyBpPDI7IGkrKykKKyAgIHsKKyAgICAgdGFibGUgPSByb210YWJsZSArIGkqMTI4OworCisgICAgIGZvciAoZGw9MDsgZGw8MTY7IGRsKyspCisgICAgICB7CisJcDAgPSBwMDAwNCArIChpPDwxNCkgKyAoZGw8PDEwKTsKKwlwOCA9IHA4MDA0ICsgKGk8PDEyKSArIChkbDw8OCk7CisKKwlmb3IgKGo9MDsgajw4OyBqKysgLCB0YWJsZSsrLCBwMCs9MTI4KQorCSB7CisJICAgZm9yIChrPTA7IGs8MTY7IGsrKykKKwkgICAgeworCSAgICAgIGlmIChrPT0wKQorCQliaXQ9MTsKKwkgICAgICBlbHNlIGlmIChrPj0xICYmIGs8MykKKwkJYml0PSh0YWJsZVswXT4+MTUpJjc7CisJICAgICAgZWxzZSBpZiAoaz49MyAmJiBrPDYpCisJCWJpdD0odGFibGVbMF0+PjEyKSY3OworCSAgICAgIGVsc2UgaWYgKGs+PTYgJiYgazwxMCkKKwkJYml0PSh0YWJsZVswXT4+OSkmNzsKKwkgICAgICBlbHNlIGlmIChrPj0xMCAmJiBrPDEzKQorCQliaXQ9KHRhYmxlWzBdPj42KSY3OworCSAgICAgIGVsc2UgaWYgKGs+PTEzICYmIGs8MTUpCisJCWJpdD0odGFibGVbMF0+PjMpJjc7CisJICAgICAgZWxzZQorCQliaXQ9KHRhYmxlWzBdKSY3OworCSAgICAgIGlmIChrID09IDApCisJCSoodW5zaWduZWQgY2hhciAqKXA4KysgPSA4OworCSAgICAgIGVsc2UKKwkJKih1bnNpZ25lZCBjaGFyICopcDgrKyA9IGogLSBiaXQ7CisJICAgICAgKih1bnNpZ25lZCBjaGFyICopcDgrKyA9IGJpdDsKKworCSAgICAgIHB3ID0gMTw8Yml0OworCSAgICAgIHAwW2srMHgwMF0gPSAoMSpwdykgICsgMHg4MDsKKwkgICAgICBwMFtrKzB4MTBdID0gKDIqcHcpICArIDB4ODA7CisJICAgICAgcDBbaysweDIwXSA9ICgzKnB3KSAgKyAweDgwOworCSAgICAgIHAwW2srMHgzMF0gPSAoNCpwdykgICsgMHg4MDsKKwkgICAgICBwMFtrKzB4NDBdID0gKC1wdykgICArIDB4ODA7CisJICAgICAgcDBbaysweDUwXSA9ICgyKi1wdykgKyAweDgwOworCSAgICAgIHAwW2srMHg2MF0gPSAoMyotcHcpICsgMHg4MDsKKwkgICAgICBwMFtrKzB4NzBdID0gKDQqLXB3KSArIDB4ODA7CisJICAgIH0gLyogZW5kIG9mIGZvciAoaz0wOyBrPDE2OyBrKyssIHA4KyspICovCisJIH0gLyogZW5kIG9mIGZvciAoaj0wOyBqPDg7IGorKyAsIHRhYmxlKyspICovCisgICAgICB9IC8qIGVuZCBvZiBmb3IgKGRsPTA7IGRsPDE2OyBkbCsrKSAqLworICAgfSAvKiBlbmQgb2YgZm9yIChpPTA7IGk8MjsgaSsrKSAqLworfQorCisvKgorICogcHJlY2lzaW9uID0gKHBkZXYtPnh4ICsgcGRldi0+eXkpCisgKgorICovCitzdGF0aWMgdm9pZCBmaWxsX3RhYmxlX2RjMDBfZDgwMCh1bnNpZ25lZCBpbnQgcHJlY2lzaW9uLCB1bnNpZ25lZCBpbnQgKnBkYzAwLCB1bnNpZ25lZCBpbnQgKnBkODAwKQoreworICBpbnQgaTsKKyAgdW5zaWduZWQgaW50IG9mZnNldDEsIG9mZnNldDI7CisgCisgIGZvcihpPTAsb2Zmc2V0MT0weDQwMDAsIG9mZnNldDI9MDsgaTwyNTYgOyBpKyssb2Zmc2V0MSs9MHg3QkM0LCBvZmZzZXQyKz0weDdCQzQpCisgICB7CisgICAgIHVuc2lnbmVkIGludCBtc2IgPSBvZmZzZXQxID4+IDE1OworCisgICAgIGlmICggbXNiID4gMjU1KQorICAgICAgeworCWlmIChtc2IpCisJICBtc2I9MDsKKwllbHNlCisJICBtc2I9MjU1OworICAgICAgfQorCisgICAgICpwZGMwMCsrID0gbXNiIDw8IHByZWNpc2lvbjsKKyAgICAgKnBkODAwKysgPSBvZmZzZXQyOworICAgfQorCit9CisKKy8qCisgKiBzdHJ1Y3QgeworICogICB1bnNpZ25lZCBjaGFyIG9wOwkgICAgLy8gb3BlcmF0aW9uIHRvIGV4ZWN1dGUKKyAqICAgdW5zaWduZWQgY2hhciBiaXRzOyAgICAvLyBiaXRzIHVzZSB0byBwZXJmb3JtIG9wZXJhdGlvbgorICogICB1bnNpZ25lZCBjaGFyIG9mZnNldDE7IC8vIG9mZnNldCB0byBhZGQgdG8gYWNjZXNzIGluIHRoZSB0YWJsZV8wMDA0ICUgMTYKKyAqICAgdW5zaWduZWQgY2hhciBvZmZzZXQyOyAvLyBvZmZzZXQgdG8gYWRkIHRvIGFjY2VzcyBpbiB0aGUgdGFibGVfMDAwNAorICogfQorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0YWJsZV9vcHNbXSA9IHsKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4MTAsIDB4MDAsMHgwNiwweDAxLDB4MzAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMSwweDIwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHg1MCwgMHgwMCwweDA1LDB4MDIsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAzLDB4MDAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDEwLCAweDAwLDB4MDYsMHgwMiwweDEwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDEsMHg2MCwgMHgwMSwweDAwLDB4MDAsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4NTAsIDB4MDAsMHgwNSwweDAyLDB4NDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMywweDQwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHgxMCwgMHgwMCwweDA2LDB4MDEsMHg3MCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAxLDB4MjAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDUwLCAweDAwLDB4MDUsMHgwMiwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDMsMHgwMCwgMHgwMSwweDAwLDB4MDAsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4MTAsIDB4MDAsMHgwNiwweDAyLDB4NTAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMSwweDYwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHg1MCwgMHgwMCwweDA1LDB4MDIsMHg0MCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAzLDB4NDAsIDB4MDEsMHgwMCwweDAwLDB4MDAKK307CisKKy8qCisgKiBUT0RPOiBtdWx0aXBseSBieSA0IGFsbCB2YWx1ZXMKKyAqCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgTXVsSWR4WzI1Nl0gPSB7CisgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAwLCAxLCAyLCAzLCAwLCAxLCAyLCAzLCAwLCAxLCAyLCAzLCAwLCAxLCAyLCAzLAorIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsCisgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNCwgNCwgNCwgNCwKKyA2LCA3LCA4LCA5LCA3LDEwLDExLCA4LCA4LDExLDEwLCA3LCA5LCA4LCA3LCA2LAorIDQsIDUsIDUsIDQsIDQsIDUsIDUsIDQsIDQsIDUsIDUsIDQsIDQsIDUsIDUsIDQsCisgMSwgMywgMCwgMiwgMSwgMywgMCwgMiwgMSwgMywgMCwgMiwgMSwgMywgMCwgMiwKKyAwLCAzLCAzLCAwLCAxLCAyLCAyLCAxLCAyLCAxLCAxLCAyLCAzLCAwLCAwLCAzLAorIDAsIDEsIDIsIDMsIDMsIDIsIDEsIDAsIDMsIDIsIDEsIDAsIDAsIDEsIDIsIDMsCisgMSwgMSwgMSwgMSwgMywgMywgMywgMywgMCwgMCwgMCwgMCwgMiwgMiwgMiwgMiwKKyA3LDEwLDExLCA4LCA5LCA4LCA3LCA2LCA2LCA3LCA4LCA5LCA4LDExLDEwLCA3LAorIDQsIDUsIDUsIDQsIDUsIDQsIDQsIDUsIDUsIDQsIDQsIDUsIDQsIDUsIDUsIDQsCisgNywgOSwgNiwgOCwxMCwgOCwgNywxMSwxMSwgNywgOCwxMCwgOCwgNiwgOSwgNywKKyAxLCAzLCAwLCAyLCAyLCAwLCAzLCAxLCAyLCAwLCAzLCAxLCAxLCAzLCAwLCAyLAorIDEsIDIsIDIsIDEsIDMsIDAsIDAsIDMsIDAsIDMsIDMsIDAsIDIsIDEsIDEsIDIsCisxMCwgOCwgNywxMSwgOCwgNiwgOSwgNywgNywgOSwgNiwgOCwxMSwgNywgOCwxMAorfTsKKworCisKK3ZvaWQgcHdjX2RlYzIzX2luaXQoaW50IHR5cGUsIGludCByZWxlYXNlLCB1bnNpZ25lZCBjaGFyICptb2RlLCB2b2lkICpkYXRhKQoreworICBpbnQgZmxhZ3M7CisgIHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSAqcGRldiA9IGRhdGE7CisgIHJlbGVhc2UgPSByZWxlYXNlOworCisgIHN3aXRjaCAodHlwZSkKKyAgIHsKKyAgICBjYXNlIDcyMDoKKyAgICBjYXNlIDczMDoKKyAgICBjYXNlIDc0MDoKKyAgICBjYXNlIDc1MDoKKyAgICAgIGZsYWdzID0gbW9kZVsyXSYweDE4OwkvKiBvdXI6IGZsYWdzID0gOCwgbW9kZVsyXT09ZTggKi8KKyAgICAgIGlmIChmbGFncz09OCkKKwlwZGV2LT56eiA9IDc7CisgICAgICBlbHNlIGlmIChmbGFncz09MHgxMCkKKwlwZGV2LT56eiA9IDg7CisgICAgICBlbHNlCisJcGRldi0+enogPSA2OworICAgICAgZmxhZ3MgPSBtb2RlWzJdPj41OwkvKiBvdXI6IDcgKi8KKworICAgICAgZmlsbF90YWJsZV9jb2xvcihmbGFncywgKHVuc2lnbmVkIGludCAqKUtpYXJhUm9tVGFibGUsIHBkZXYtPnRhYmxlXzAwMDQsIHBkZXYtPnRhYmxlXzgwMDQpOworICAgICAgYnJlYWs7CisKKworICAgIGNhc2UgNjc1OgorICAgIGNhc2UgNjgwOgorICAgIGNhc2UgNjkwOgorICAgICAgZmxhZ3MgPSBtb2RlWzJdJjY7CisgICAgICBpZiAoZmxhZ3M9PTIpCisJcGRldi0+enogPSA3OworICAgICAgZWxzZSBpZiAoZmxhZ3M9PTQpCisJcGRldi0+enogPSA4OworICAgICAgZWxzZQorCXBkZXYtPnp6ID0gNjsKKyAgICAgIGZsYWdzID0gbW9kZVsyXT4+MzsKKworICAgICAgZmlsbF90YWJsZV9jb2xvcihmbGFncywgKHVuc2lnbmVkIGludCAqKVRpbW9uUm9tVGFibGUsIHBkZXYtPnRhYmxlXzAwMDQsIHBkZXYtPnRhYmxlXzgwMDQpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgLyogTm90IHN1cHBvcnRlZCAqLworICAgICAgcmV0dXJuOworICAgfQorCisgIC8qICogKiAqICoqICovCisgIHBkZXYtPnh4ID0gOCAtIHBkZXYtPnp6OworICBwZGV2LT55eSA9IDE1IC0gcGRldi0+eHg7CisgIHBkZXYtPnp6bWFzayA9IDB4RkY+PnBkZXYtPnh4OworICAvL3BkZXYtPnp6bWFzayA9ICgxVTw8cGRldi0+enopLTE7CisKKworICBmaWxsX3RhYmxlX2RjMDBfZDgwMChwZGV2LT54eCArIHBkZXYtPnl5LCBwZGV2LT50YWJsZV9kYzAwLCBwZGV2LT50YWJsZV9kODAwKTsKKyAgZmlsbF90YWJsZV9hMDAwKHBkZXYtPnRhYmxlX2EwMDQpOworICBmaWxsX3RhYmxlX2QwMDAocGRldi0+dGFibGVfZDAwNCk7Cit9CisKKworLyoKKyAqIFRvIG1hbmFnZSB0aGUgc3RyZWFtLCB3ZSBrZWVwIGluIGEgMzIgYml0cyB2YXJpYWJsZXMsCisgKiB0aGUgbmV4dCBiaXRzIGluIHRoZSBzdHJlYW0uIGZpbGxfcmVzZXJ2b2lyKCkgYWRkIHRvCisgKiB0aGUgcmVzZXJ2b2lyIGF0IGxlYXN0IHdhbnRlZCBuYml0cy4KKyAqCisgKgorICovCisjZGVmaW5lIGZpbGxfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sbmJpdHNfd2FudGVkKSBkbyB7IFwKKyAgIHdoaWxlIChuYml0c19pbl9yZXNlcnZvaXI8bmJpdHNfd2FudGVkKSBcCisgICAgeyBcCisgICAgICByZXNlcnZvaXIgfD0gKCooc3RyZWFtKSsrKSA8PCBuYml0c19pbl9yZXNlcnZvaXI7IFwKKyAgICAgIG5iaXRzX2luX3Jlc2Vydm9pcis9ODsgXAorICAgIH0gXAorfSAgd2hpbGUoMCk7CisKKyNkZWZpbmUgZ2V0X25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLG5iaXRzX3dhbnRlZCxyZXN1bHQpIGRvIHsgXAorICAgZmlsbF9uYml0cyhyZXNlcnZvaXIsbmJpdHNfaW5fcmVzZXJ2b2lyLHN0cmVhbSxuYml0c193YW50ZWQpOyBcCisgICByZXN1bHQgPSAocmVzZXJ2b2lyKSAmICgoMVU8PG5iaXRzX3dhbnRlZCktMSk7IFwKKyAgIHJlc2Vydm9pciA+Pj0gbmJpdHNfd2FudGVkOyBcCisgICBuYml0c19pbl9yZXNlcnZvaXIgLT0gbmJpdHNfd2FudGVkOyBcCit9ICB3aGlsZSgwKTsKKworCisKK3N0YXRpYyB2b2lkIERlY29tcHJlc3NCYW5kMjMoY29uc3Qgc3RydWN0IHB3Y19kZWMyM19wcml2YXRlICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXd5dXYsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBsYW5hcl95LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpwbGFuYXJfdSwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqcGxhbmFyX3YsCisJCQkgICAgIHVuc2lnbmVkIGludCBpbWFnZV94LAkJLyogYWthIG51bWJlciBvZiBwaXhlbHMgd2FudGVkID8/PyAqLworCQkJICAgICB1bnNpZ25lZCBpbnQgcGl4ZWxzX3Blcl9saW5lLAkvKiBha2EgbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSAqLworCQkJICAgICBpbnQgZmxhZ3MpCit7CisKKworICB1bnNpZ25lZCBpbnQgcmVzZXJ2b2lyLCBuYml0c19pbl9yZXNlcnZvaXI7CisgIGludCBmaXJzdF80X2JpdHM7CisgIHVuc2lnbmVkIGludCBieXRlc19wZXJfY2hhbm5lbDsKKyAgaW50IGxpbmVfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgbGluZSAoNFkrVStWKSAqLworICBpbnQgcGFzc2VzOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdGFibGUwMDA0LCAqcHRhYmxlODAwNDsKKworICBpbnQgZXZlbl9saW5lOworICB1bnNpZ25lZCBpbnQgdGVtcF9jb2xvcnNbMTZdOworICBpbnQgbmJsb2NrczsKKworICBjb25zdCB1bnNpZ25lZCBjaGFyICpzdHJlYW07CisgIHVuc2lnbmVkIGNoYXIgKmRlc3RfeSwgKmRlc3RfdT1OVUxMLCAqZGVzdF92PU5VTEw7CisgIHVuc2lnbmVkIGludCBvZmZzZXRfdG9fcGxhbmVfdSwgb2Zmc2V0X3RvX3BsYW5lX3Y7CisKKyAgaW50IGk7CisKKworICByZXNlcnZvaXIgPSAwOworICBuYml0c19pbl9yZXNlcnZvaXIgPSAwOworICBzdHJlYW0gPSByYXd5dXYrMTsJLyogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHN0cmVhbSBpcyBza2lwcGVkICovCisgIGV2ZW5fbGluZSA9IDE7CisKKyAgZ2V0X25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLDQsZmlyc3RfNF9iaXRzKTsKKworICBsaW5lX3NpemUgPSBwaXhlbHNfcGVyX2xpbmUqMzsKKworICBmb3IgKHBhc3Nlcz0wO3Bhc3NlczwyO3Bhc3NlcysrKQorICAgeworICAgICBpZiAocGFzc2VzPT0wKQorICAgICAgeworCWJ5dGVzX3Blcl9jaGFubmVsID0gcGl4ZWxzX3Blcl9saW5lOworCWRlc3RfeSA9IHBsYW5hcl95OworCW5ibG9ja3MgPSBpbWFnZV94LzQ7CisgICAgICB9CisgICAgIGVsc2UKKyAgICAgIHsKKwkvKiBGb3JtYXQgcGxhbmFyOiBBbGwgWSwgdGhlbiBhbGwgVSwgdGhlbiBhbGwgViAqLworCWJ5dGVzX3Blcl9jaGFubmVsID0gcGl4ZWxzX3Blcl9saW5lLzI7CisJZGVzdF91ID0gcGxhbmFyX3U7CisJZGVzdF92ID0gcGxhbmFyX3Y7CisJZGVzdF95ID0gZGVzdF91OworCW5ibG9ja3MgPSBpbWFnZV94Lzg7CisgICAgICB9CisKKyAgICAgb2Zmc2V0X3RvX3BsYW5lX3UgPSBieXRlc19wZXJfY2hhbm5lbCoyOworICAgICBvZmZzZXRfdG9fcGxhbmVfdiA9IGJ5dGVzX3Blcl9jaGFubmVsKjM7CisgICAgIC8qCisgICAgIHByaW50ZigiYnl0ZXNfcGVyX2NoYW5uZWwgPSAlZFxuIixieXRlc19wZXJfY2hhbm5lbCk7CisgICAgIHByaW50Zigib2Zmc2V0X3RvX3BsYW5lX3UgPSAlZFxuIixvZmZzZXRfdG9fcGxhbmVfdSk7CisgICAgIHByaW50Zigib2Zmc2V0X3RvX3BsYW5lX3YgPSAlZFxuIixvZmZzZXRfdG9fcGxhbmVfdik7CisgICAgICovCisKKyAgICAgd2hpbGUgKG5ibG9ja3MtLT4wKQorICAgICAgeworCXVuc2lnbmVkIGludCBncmF5X2luZGV4OworCisJZmlsbF9uYml0cyhyZXNlcnZvaXIsbmJpdHNfaW5fcmVzZXJ2b2lyLHN0cmVhbSwxNik7CisJZ3JheV9pbmRleCA9IHJlc2Vydm9pciAmIHBkZXYtPnp6bWFzazsKKwlyZXNlcnZvaXIgPj49IHBkZXYtPnp6OworCW5iaXRzX2luX3Jlc2Vydm9pciAtPSBwZGV2LT56ejsKKworCWZpbGxfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sMik7CisKKwlpZiAoIChyZXNlcnZvaXIgJiAzKSA9PSAwKQorCSB7CisJICAgcmVzZXJ2b2lyPj49MjsKKwkgICBuYml0c19pbl9yZXNlcnZvaXItPTI7CisJICAgZm9yIChpPTA7aTwxNjtpKyspCisJICAgICB0ZW1wX2NvbG9yc1tpXSA9IHBkZXYtPnRhYmxlX2RjMDBbZ3JheV9pbmRleF07CisKKwkgfQorCWVsc2UKKwkgeworCSAgIHVuc2lnbmVkIGludCBjaGFubmVsX3YsIG9mZnNldDE7CisKKwkgICAvKiBzd2FwIGJpdCAwIGFuZCAyIG9mIG9mZnNldF9PUiAqLworCSAgIGNoYW5uZWxfdiA9ICgocmVzZXJ2b2lyICYgMSkgPDwgMikgfCAocmVzZXJ2b2lyICYgMikgfCAoKHJlc2Vydm9pciAmIDQpPj4yKTsKKwkgICByZXNlcnZvaXI+Pj0zOworCSAgIG5iaXRzX2luX3Jlc2Vydm9pci09MzsKKworCSAgIGZvciAoaT0wO2k8MTY7aSsrKQorCSAgICAgdGVtcF9jb2xvcnNbaV0gPSBwZGV2LT50YWJsZV9kODAwW2dyYXlfaW5kZXhdOworCisJICAgcHRhYmxlMDAwNCA9IHBkZXYtPnRhYmxlXzAwMDQgKyAocGFzc2VzKjE2Mzg0KSArIChmaXJzdF80X2JpdHMqMTAyNCkgKyAoY2hhbm5lbF92KjEyOCk7CisJICAgcHRhYmxlODAwNCA9IHBkZXYtPnRhYmxlXzgwMDQgKyAocGFzc2VzKjQwOTYpICArIChmaXJzdF80X2JpdHMqMjU2KSAgKyAoY2hhbm5lbF92KjMyKTsKKworCSAgIG9mZnNldDEgPSAwOworCSAgIHdoaWxlKDEpIAorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGluZGV4X2luX3RhYmxlX29wcywgb3AsIHJvd3M9MDsKKwkgICAgICBmaWxsX25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLDE2KTsKKworCSAgICAgIC8qIG1vZGUgaXMgMCwxIG9yIDIgKi8KKwkgICAgICBpbmRleF9pbl90YWJsZV9vcHMgPSAocmVzZXJ2b2lyJjB4M0YpOworCSAgICAgIG9wID0gdGFibGVfb3BzWyBpbmRleF9pbl90YWJsZV9vcHMqNCBdOworCSAgICAgIGlmIChvcCA9PSAyKQorCSAgICAgICB7CisJCSByZXNlcnZvaXIgPj49IDI7CisJCSBuYml0c19pbl9yZXNlcnZvaXIgLT0gMjsKKwkJIGJyZWFrOwkvKiBleGl0IHRoZSB3aGlsZSgxKSAqLworCSAgICAgICB9CisJICAgICAgaWYgKG9wID09IDApCisJICAgICAgIHsKKwkJIHVuc2lnbmVkIGludCBzaGlmdDsKKworCQkgb2Zmc2V0MSA9IChvZmZzZXQxICsgdGFibGVfb3BzW2luZGV4X2luX3RhYmxlX29wcyo0KzJdKSAmIDB4MEY7CisJCSBzaGlmdCA9IHRhYmxlX29wc1sgaW5kZXhfaW5fdGFibGVfb3BzKjQrMSBdOworCQkgcmVzZXJ2b2lyID4+PSBzaGlmdDsKKwkJIG5iaXRzX2luX3Jlc2Vydm9pciAtPSBzaGlmdDsKKwkJIHJvd3MgPSBwdGFibGUwMDA0WyBvZmZzZXQxICsgdGFibGVfb3BzW2luZGV4X2luX3RhYmxlX29wcyo0KzNdIF07CisJICAgICAgIH0KKwkgICAgICBpZiAob3AgPT0gMSkKKwkgICAgICAgeworCQkgIC8qIDEwYml0cyBbIHh4eHggeHh4eCB5eXl5IDAwMCBdCisJCSAgICogeXl5ID0+IG9mZnNldCBpbiB0aGUgdGFibGU4MDA0CisJCSAgICogeHh4ID0+IG9mZnNldCBpbiB0aGUgdGFibGVkMDA0CisJCSAgICovCisJCSB1bnNpZ25lZCBpbnQgbWFzaywgc2hpZnQ7CisJCSB1bnNpZ25lZCBpbnQgY29sMSwgcm93MSwgdG90YWxfYml0czsKKworCQkgb2Zmc2V0MSA9IChvZmZzZXQxICsgKChyZXNlcnZvaXI+PjMpJjB4MEYpKzEpICYgMHgwRjsKKworCQkgY29sMSA9IChyZXNlcnZvaXI+PjcpICYgMHhGRjsKKwkJIHJvdzEgPSBwdGFibGU4MDA0IFsgb2Zmc2V0MSoyIF07CisKKwkJIC8qIEJpdCBtYXNrIHRhYmxlICovCisJCSBtYXNrID0gcGRldi0+dGFibGVfZDAwNFsgKHJvdzE8PDgpICsgY29sMSBdOworCQkgc2hpZnQgPSBwdGFibGU4MDA0IFsgb2Zmc2V0MSoyICsgMV07CisJCSByb3dzID0gKChtYXNrIDw8IHNoaWZ0KSArIDB4ODApICYgMHhGRjsKKworCQkgdG90YWxfYml0cyA9IHJvdzEgKyA4OworCQkgcmVzZXJ2b2lyID4+PSB0b3RhbF9iaXRzOworCQkgbmJpdHNfaW5fcmVzZXJ2b2lyIC09IHRvdGFsX2JpdHM7CisJICAgICAgIH0KKwkgICAgICAgeworCQkgY29uc3QgdW5zaWduZWQgaW50ICp0YWJsZV9hMDA0ID0gcGRldi0+dGFibGVfYTAwNCArIHJvd3MqMTI7CisJCSB1bnNpZ25lZCBpbnQgKnBvZmZzZXQgPSBNdWxJZHggKyBvZmZzZXQxKjE2OwkvKiA2NC80IChpbnQpICovCisJCSBmb3IgKGk9MDtpPDE2O2krKykKKwkJICB7CisJCSAgICB0ZW1wX2NvbG9yc1tpXSArPSB0YWJsZV9hMDA0WyAqcG9mZnNldCBdOworCQkgICAgcG9mZnNldCsrOworCQkgIH0KKwkgICAgICAgfQorCSAgIH0KKwkgfQorI2RlZmluZSBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKyNpZmRlZiBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKyMgIGRlZmluZSBDTEFNUCh4KSAoKHgpPjI1NT8yNTU6KCh4KTwwPzA6eCkpCisjZWxzZQorIyAgZGVmaW5lIENMQU1QKHgpICgoeCk+MjU1PzI1NTp4KQorI2VuZGlmCisKKwlpZiAocGFzc2VzID09IDApCisJIHsKKyNpZmRlZiBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKwkgICBjb25zdCBpbnQgKmMgPSB0ZW1wX2NvbG9yczsKKyNlbHNlCisJICAgY29uc3QgdW5zaWduZWQgaW50ICpjID0gdGVtcF9jb2xvcnM7CisjZW5kaWYKKwkgICB1bnNpZ25lZCBjaGFyICpkOworCisJICAgZCA9IGRlc3RfeTsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGQgPSBkZXN0X3kgKyBieXRlc19wZXJfY2hhbm5lbDsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGQgPSBkZXN0X3kgKyBvZmZzZXRfdG9fcGxhbmVfdTsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGQgPSBkZXN0X3kgKyBvZmZzZXRfdG9fcGxhbmVfdjsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMrKykKKwkgICAgICpkKysgPSBDTEFNUCgoKmMpID4+IHBkZXYtPnl5KTsKKworCSAgIGRlc3RfeSArPSA0OworCSB9CisJZWxzZSBpZiAocGFzc2VzID09IDEpCisJIHsKKyNpZmRlZiBVU0VfU0lHTkVEX0lOVF9GT1JfQ09MT1IKKwkgICBpbnQgKmMxID0gdGVtcF9jb2xvcnM7CisJICAgaW50ICpjMiA9IHRlbXBfY29sb3JzKzQ7CisjZWxzZQorCSAgIHVuc2lnbmVkIGludCAqYzEgPSB0ZW1wX2NvbG9yczsKKwkgICB1bnNpZ25lZCBpbnQgKmMyID0gdGVtcF9jb2xvcnMrNDsKKyNlbmRpZgorCSAgIHVuc2lnbmVkIGNoYXIgKmQ7CisKKwkgICBkID0gZGVzdF95OworCSAgIGZvciAoaT0wO2k8NDtpKyssYzErKyxjMisrKQorCSAgICB7CisJICAgICAgKmQrKyA9IENMQU1QKCgqYzEpID4+IHBkZXYtPnl5KTsKKwkgICAgICAqZCsrID0gQ0xBTVAoKCpjMikgPj4gcGRldi0+eXkpOworCSAgICB9CisJICAgYzEgPSB0ZW1wX2NvbG9ycysxMjsKKwkgICAvL2MyID0gdGVtcF9jb2xvcnMrODsKKwkgICBkID0gZGVzdF95ICsgYnl0ZXNfcGVyX2NoYW5uZWw7CisJICAgZm9yIChpPTA7aTw0O2krKyxjMSsrLGMyKyspCisJICAgIHsKKwkgICAgICAqZCsrID0gQ0xBTVAoKCpjMSkgPj4gcGRldi0+eXkpOworCSAgICAgICpkKysgPSBDTEFNUCgoKmMyKSA+PiBwZGV2LT55eSk7CisJICAgIH0KKworCSAgIGlmIChldmVuX2xpbmUpCS8qIEVhY2ggbGluZSwgc3dhcCB1L3YgKi8KKwkgICAgeworCSAgICAgIGV2ZW5fbGluZT0wOworCSAgICAgIGRlc3RfeSA9IGRlc3RfdjsKKwkgICAgICBkZXN0X3UgKz0gODsKKwkgICAgfQorCSAgIGVsc2UKKwkgICAgeworCSAgICAgIGV2ZW5fbGluZT0xOworCSAgICAgIGRlc3RfeSA9IGRlc3RfdTsKKwkgICAgICBkZXN0X3YgKz0gODsKKwkgICAgfQorCSB9CisKKyAgICAgIH0gLyogZW5kIG9mIHdoaWxlIChuYmxvY2tzLS0+MCkgKi8KKworICAgfSAvKiBlbmQgb2YgZm9yIChwYXNzZXM9MDtwYXNzZXM8MjtwYXNzZXMrKykgKi8KKworfQorCisKKy8qKgorICoKKyAqIGltYWdlOiBzaXplIG9mIHRoZSBpbWFnZSB3YW50ZWQKKyAqIHZpZXcgOiBzaXplIG9mIHRoZSBpbWFnZSByZXR1cm5lZCBieSB0aGUgY2FtZXJhCisgKiBvZmZzZXQ6ICh4LHkpIHRvIGRpc3BsYXllciBpbWFnZSBpbiB0aGUgdmlldworICoKKyAqIHNyYzogcmF3IGRhdGEKKyAqIGRzdDogaW1hZ2Ugb3V0cHV0CisgKiBmbGFnczogUFdDWF9GTEFHX1BMQU5BUgorICogcGRldjogcHJpdmF0ZSBidWZmZXIKKyAqIGJhbmRsZW5ndGg6CisgKgorICovCit2b2lkIHB3Y19kZWMyM19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBwd2NfY29vcmQgKmltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwd2NfY29vcmQgKnZpZXcsCisJCQkgICAgY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqb2Zmc2V0LAorCQkJICAgIGNvbnN0IHZvaWQgKnNyYywKKwkJCSAgICB2b2lkICpkc3QsCisJCQkgICAgaW50IGZsYWdzLAorCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICAgaW50IGJhbmRsZW5ndGgpCit7CisgIGNvbnN0IHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSAqcGRldiA9IGRhdGE7CisgIHVuc2lnbmVkIGNoYXIgKnBvdXQsICpwb3V0X3BsYW5hcl95PU5VTEwsICpwb3V0X3BsYW5hcl91PU5VTEwsICpwb3V0X3BsYW5hcl92PU5VTEw7CisgIGludCBpLG4sc3RyaWRlLHBpeGVsX3NpemU7CisKKworICBpZiAoZmxhZ3MgJiBQV0NYX0ZMQUdfQkFZRVIpCisgICB7CisgICAgIHBvdXQgPSBkc3QgKyAodmlldy0+eCAqIG9mZnNldC0+eSkgKyBvZmZzZXQtPng7CisgICAgIHBpeGVsX3NpemUgPSB2aWV3LT54ICogNDsKKyAgIH0KKyAgZWxzZQorICAgeworICAgICBuID0gdmlldy0+eCAqIHZpZXctPnk7CisKKyAgICAgLyogb2Zmc2V0IGluIFkgcGxhbmUgKi8KKyAgICAgc3RyaWRlID0gdmlldy0+eCAqIG9mZnNldC0+eTsKKyAgICAgcG91dF9wbGFuYXJfeSA9IGRzdCArIHN0cmlkZSArIG9mZnNldC0+eDsKKworICAgICAvKiBvZmZzZXRzIGluIFUvViBwbGFuZXMgKi8KKyAgICAgc3RyaWRlID0gKHZpZXctPnggKiBvZmZzZXQtPnkpLzQgKyBvZmZzZXQtPngvMjsKKyAgICAgcG91dF9wbGFuYXJfdSA9IGRzdCArIG4gKyAgICAgKyBzdHJpZGU7CisgICAgIHBvdXRfcGxhbmFyX3YgPSBkc3QgKyBuICsgbi80ICsgc3RyaWRlOworCisgICAgIHBpeGVsX3NpemUgPSB2aWV3LT54ICogNDsKKyAgIH0KKworCisgIGZvciAoaT0wO2k8aW1hZ2UtPnk7aSs9NCkKKyAgIHsKKyAgICAgaWYgKGZsYWdzICYgUFdDWF9GTEFHX0JBWUVSKQorICAgICAgeworCS8vVE9ETzoKKwkvL0RlY29tcHJlc3NCYW5kQmF5ZXIocGRldixzcmMscG91dCxpbWFnZS54LHZpZXctPngsZmxhZ3MpOworCXNyYyArPSBiYW5kbGVuZ3RoOworCXBvdXQgKz0gcGl4ZWxfc2l6ZTsKKyAgICAgIH0KKyAgICAgZWxzZQorICAgICAgeworCURlY29tcHJlc3NCYW5kMjMocGRldixzcmMscG91dF9wbGFuYXJfeSxwb3V0X3BsYW5hcl91LHBvdXRfcGxhbmFyX3YsaW1hZ2UtPngsdmlldy0+eCxmbGFncyk7CisJc3JjICs9IGJhbmRsZW5ndGg7CisJcG91dF9wbGFuYXJfeSArPSBwaXhlbF9zaXplOworCXBvdXRfcGxhbmFyX3UgKz0gdmlldy0+eDsKKwlwb3V0X3BsYW5hcl92ICs9IHZpZXctPng7CisgICAgICB9CisgICB9Cit9CisKK3ZvaWQgcHdjX2RlYzIzX2V4aXQodm9pZCkKK3sKKyAgLyogRG8gbm90aGluZyAqLworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjJhYWNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMyMy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmbmRlZiBQV0NfREVDMjNfSAorI2RlZmluZSBQV0NfREVDMjNfSAorCitzdHJ1Y3QgcHdjX2RlYzIzX3ByaXZhdGUKK3sKKyAgdW5zaWduZWQgY2hhciB4eCx5eSx6eix6em1hc2s7CisKKyAgdW5zaWduZWQgY2hhciB0YWJsZV8wMDA0WzIqMHg0MDAwXTsKKyAgdW5zaWduZWQgY2hhciB0YWJsZV84MDA0WzIqMHgxMDAwXTsKKyAgdW5zaWduZWQgaW50ICB0YWJsZV9hMDA0WzI1NioxMl07CisKKyAgdW5zaWduZWQgY2hhciB0YWJsZV9kMDA0WzgqMjU2XTsKKyAgdW5zaWduZWQgaW50ICB0YWJsZV9kODAwWzI1Nl07CisgIHVuc2lnbmVkIGludCAgdGFibGVfZGMwMFsyNTZdOworfTsKKworCit2b2lkIHB3Y19kZWMyM19pbml0KGludCB0eXBlLCBpbnQgcmVsZWFzZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB2b2lkICpwcml2YXRlX2RhdGEpOwordm9pZCBwd2NfZGVjMjNfZXhpdCh2b2lkKTsKK3ZvaWQgcHdjX2RlYzIzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqdmlldywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcHdjX2Nvb3JkICpvZmZzZXQsCisJCQkgICAgY29uc3Qgdm9pZCAqc3JjLAorCQkJICAgIHZvaWQgKmRzdCwKKwkJCSAgICBpbnQgZmxhZ3MsCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCSAgICBpbnQgYmFuZGxlbmd0aCk7CisKKworCisjZW5kaWYKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDBhNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCkBAIC0wLDAgKzEsMjIxMiBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgVVNCIGFuZCBWaWRlbzRMaW51eCBpbnRlcmZhY2UgcGFydC4KKyAgIChDKSAxOTk5LTIwMDQgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyovCisKKy8qICAKKyAgIFRoaXMgY29kZSBmb3JtcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIFVTQiBsYXllcnMgYW5kIHRoZSBQaGlsaXBzCisgICBzcGVjaWZpYyBzdHVmZi4gU29tZSBhZGFudmVkIHN0dWZmIG9mIHRoZSBkcml2ZXIgZmFsbHMgdW5kZXIgYW4KKyAgIE5EQSwgc2lnbmVkIGJldHdlZW4gbWUgYW5kIFBoaWxpcHMgQi5WLiwgRWluZGhvdmVuLCB0aGUgTmV0aGVybGFuZHMsIGFuZAorICAgaXMgdGh1cyBub3QgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGZvcm0uIFRoZSBiaW5hcnkgcHdjeC5vIG1vZHVsZSAKKyAgIGNvbnRhaW5zIHRoZSBjb2RlIHRoYXQgZmFsbHMgdW5kZXIgdGhlIE5EQS4KKyAgIAorICAgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nOiAncHdjJyBzdGFuZHMgZm9yICJQaGlsaXBzIFdlYkNhbSIsIGJ1dCAKKyAgIEkgcmVhbGx5IGRpZG4ndCB3YW50IHRvIHR5cGUgJ3BoaWxpcHNfd2ViX2NhbScgZXZlcnkgdGltZSAoSSdtIGxhenkgYXMKKyAgIGFueSBMaW51eCBrZXJuZWwgaGFja2VyLCBidXQgSSBkb24ndCBsaWtlIHVuY29tcHJlaGVuc2libGUgYWJicmV2aWF0aW9ucworICAgd2l0aG91dCBleHBsYW5hdGlvbikuCisgICAKKyAgIE9oIHllcywgY29udmVudGlvbjogdG8gZGlzY3Rpbmd1aXNoIGJldHdlZW4gYWxsIHRoZSB2YXJpb3VzIHBvaW50ZXJzIHRvCisgICBkZXZpY2Utc3RydWN0dXJlcywgSSB1c2UgdGhlc2UgbmFtZXMgZm9yIHRoZSBwb2ludGVyIHZhcmlhYmxlczoKKyAgIHVkZXY6IHN0cnVjdCB1c2JfZGV2aWNlICoKKyAgIHZkZXY6IHN0cnVjdCB2aWRlb19kZXZpY2UgKgorICAgcGRldjogc3RydWN0IHB3Y19kZXZpdmUgKgorKi8KKworLyogQ29udHJpYnV0b3JzOgorICAgLSBBbHZhcmFkbzogYWRkaW5nIHdoaXRlYmFsYW5jZSBjb2RlCisgICAtIEFsaXN0YXIgTW9pcmU6IFF1aWNrQ2FtIDMwMDAgUHJvIGRldmljZS9wcm9kdWN0IElECisgICAtIFRvbnkgSG95bGU6IENyZWF0aXZlIExhYnMgV2ViY2FtIDUgZGV2aWNlL3Byb2R1Y3QgSUQKKyAgIC0gTWFyayBCdXJhemluOiBzb2x2aW5nIGhhbmcgaW4gVklESU9DU1lOQyB3aGVuIGNhbWVyYSBnZXRzIHVucGx1Z2dlZAorICAgLSBKayBGYW5nOiBTb3RlYyBBZmluYSBFeWUgSUQKKyAgIC0gWGF2aWVyIFJvY2hlOiBRdWlja0NhbSBQcm8gNDAwMCBJRAorICAgLSBKZW5zIEtudWRzZW46IFF1aWNrQ2FtIFpvb20gSUQKKyAgIC0gSi4gRGViZXJ0OiBRdWlja0NhbSBmb3IgTm90ZWJvb2tzIElECisqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInB3Yy5oIgorI2luY2x1ZGUgInB3Yy1pb2N0bC5oIgorI2luY2x1ZGUgInB3Yy1raWFyYS5oIgorI2luY2x1ZGUgInB3Yy10aW1vbi5oIgorI2luY2x1ZGUgInB3Yy1kZWMyMy5oIgorI2luY2x1ZGUgInB3Yy1kZWMxLmgiCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgZHJpdmVyIHRlbXBsYXRlcyAqLworCisvKiBob3RwbHVnIGRldmljZSB0YWJsZSBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcHdjX2RldmljZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMDIpIH0sIC8qIFBoaWxpcHMgbW9kZWxzICovCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzAzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwNCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMDcpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzA4KSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwQykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMTApIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzExKSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMxMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMTMpIH0sIC8qIHRoZSAnbmV3JyA3MjBLICovCisJeyBVU0JfREVWSUNFKDB4MDY5QSwgMHgwMDAxKSB9LCAvKiBBc2tleSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCMCkgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjEpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIE5vdGVib29rIFBybyAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCMikgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDQwMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjMpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20gKG9sZCBtb2RlbCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjQpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20gKG5ldyBtb2RlbCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZELCAweDA4QjUpIH0sIC8qIExvZ2l0ZWNoIFF1aWNrQ2FtIE9yYml0L1NwaGVyZSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCNikgfSwgLyogTG9naXRlY2ggKHJlc2VydmVkKSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCNykgfSwgLyogTG9naXRlY2ggKHJlc2VydmVkKSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCOCkgfSwgLyogTG9naXRlY2ggKHJlc2VydmVkKSAqLworCXsgVVNCX0RFVklDRSgweDA1NUQsIDB4OTAwMCkgfSwgLyogU2Ftc3VuZyAqLworCXsgVVNCX0RFVklDRSgweDA1NUQsIDB4OTAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDFFLCAweDQwMEMpIH0sIC8qIENyZWF0aXZlIFdlYmNhbSA1ICovCisJeyBVU0JfREVWSUNFKDB4MDQxRSwgMHg0MDExKSB9LCAvKiBDcmVhdGl2ZSBXZWJjYW0gUHJvIEV4ICovCisJeyBVU0JfREVWSUNFKDB4MDRDQywgMHg4MTE2KSB9LCAvKiBBZmluYSBFeWUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNkJFLCAweDgxMTYpIH0sIC8qIG5ldyBBZmluYSBFeWUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDgxLCAweDE5MTApIH0sIC8qIFZpc2lvbml0ZSAqLworCXsgVVNCX0RFVklDRSgweDBkODEsIDB4MTkwMCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHdjX2RldmljZV90YWJsZSk7CisKK3N0YXRpYyBpbnQgdXNiX3B3Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHVzYl9wd2NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwd2NfZHJpdmVyID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlBoaWxpcHMgd2ViY2FtIiwJLyogbmFtZSAqLworCS5pZF90YWJsZSA9CQlwd2NfZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9CQl1c2JfcHdjX3Byb2JlLAkJLyogcHJvYmUoKSAqLworCS5kaXNjb25uZWN0ID0JCXVzYl9wd2NfZGlzY29ubmVjdCwJLyogZGlzY29ubmVjdCgpICovCit9OworCisjZGVmaW5lIE1BWF9ERVZfSElOVFMJMjAKKyNkZWZpbmUgTUFYX0lTT0NfRVJST1JTCTIwCisKK3N0YXRpYyBpbnQgZGVmYXVsdF9zaXplID0gUFNaX1FDSUY7CitzdGF0aWMgaW50IGRlZmF1bHRfZnBzID0gMTA7CitzdGF0aWMgaW50IGRlZmF1bHRfZmJ1ZnMgPSAzOyAgIC8qIERlZmF1bHQgbnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcnMgKi8KK3N0YXRpYyBpbnQgZGVmYXVsdF9tYnVmcyA9IDI7CS8qIERlZmF1bHQgbnVtYmVyIG9mIG1tYXAoKSBidWZmZXJzICovCisgICAgICAgaW50IHB3Y190cmFjZSA9IFRSQUNFX01PRFVMRSB8IFRSQUNFX0ZMT1cgfCBUUkFDRV9QV0NYOworc3RhdGljIGludCBwb3dlcl9zYXZlID0gMDsKK3N0YXRpYyBpbnQgbGVkX29uID0gMTAwLCBsZWRfb2ZmID0gMDsgLyogZGVmYXVsdHMgdG8gTEVEIHRoYXQgaXMgb24gd2hpbGUgaW4gdXNlICovCisgICAgICAgaW50IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24gPSAyOyAvKiAwLi4zID0gdW5jb21wcmVzc2VkLi5oaWdoICovCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgdHlwZTsKKwljaGFyIHNlcmlhbF9udW1iZXJbMzBdOworCWludCBkZXZpY2Vfbm9kZTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKK30gZGV2aWNlX2hpbnRbTUFYX0RFVl9ISU5UU107CisKKy8qKiovCisKK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBwd2NfdmlkZW9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIHNzaXplX3QgcHdjX3ZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IHB3Y192aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKK3N0YXRpYyBpbnQgIHB3Y192aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgaW9jdGxuciwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCAgcHdjX3ZpZGVvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHdjX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJcHdjX3ZpZGVvX29wZW4sCisJLnJlbGVhc2UgPSAgICAgCXB3Y192aWRlb19jbG9zZSwKKwkucmVhZCA9CQlwd2NfdmlkZW9fcmVhZCwKKwkucG9sbCA9CQlwd2NfdmlkZW9fcG9sbCwKKwkubW1hcCA9CQlwd2NfdmlkZW9fbW1hcCwKKwkuaW9jdGwgPSAgICAgICAgcHdjX3ZpZGVvX2lvY3RsLAorCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCit9Oworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcHdjX3RlbXBsYXRlID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJQaGlsaXBzIFdlYmNhbSIsCS8qIEZpbGxlZCBpbiBsYXRlciAqLworCS50eXBlID0JCVZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlID0JVklEX0hBUkRXQVJFX1BXQywKKwkucmVsZWFzZSA9CXZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5mb3BzID0gICAgICAgICAmcHdjX2ZvcHMsCisJLm1pbm9yID0gICAgICAgIC0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogT2theSwgdGhpcyBpcyBzb21lIG1hZ2ljIHRoYXQgSSB3b3JrZWQgb3V0IGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCBpdC4uLgorCisgICBUaGUgYmlnZ2VzdCBwcm9ibGVtIHdpdGggYW55IFVTQiBkZXZpY2UgaXMgb2YgY291cnNlOiAid2hhdCB0byBkbyAKKyAgIHdoZW4gdGhlIHVzZXIgdW5wbHVncyB0aGUgZGV2aWNlIHdoaWxlIGl0IGlzIGluIHVzZSBieSBhbiBhcHBsaWNhdGlvbj8iCisgICBXZSBoYXZlIHNldmVyYWwgb3B0aW9uczoKKyAgIDEpIEN1cnNlIHRoZW0gd2l0aCB0aGUgNyBwbGFndWVzIHdoZW4gdGhleSBkbyAocmVxdWlyZXMgZGl2aW5lIGludGVydmVudGlvbikKKyAgIDIpIFRlbGwgdGhlbSBub3QgdG8gKHdvbid0IHdvcms6IHRoZXknbGwgZG8gaXQgYW55d2F5KQorICAgMykgT29wcyB0aGUga2VybmVsICh0aGlzIHdpbGwgaGF2ZSBhIG5lZ2F0aXZlIGVmZmVjdCBvbiBhIHVzZXIncyB1cHRpbWUpCisgICA0KSBEbyBzb21ldGhpbmcgc2Vuc2libGUuCisgICAKKyAgIE9mIGNvdXJzZSwgd2UgZ28gZm9yIG9wdGlvbiA0LgorCisgICBJdCBoYXBwZW5zIHRoYXQgdGhpcyBkZXZpY2Ugd2lsbCBiZSBsaW5rZWQgdG8gdHdvIHRpbWVzLCBvbmNlIGZyb20KKyAgIHVzYl9kZXZpY2UgYW5kIG9uY2UgZnJvbSB0aGUgdmlkZW9fZGV2aWNlIGluIHRoZWlyIHJlc3BlY3RpdmUgJ3ByaXZhdGUnCisgICBwb2ludGVycy4gVGhpcyBpcyBkb25lIHdoZW4gdGhlIGRldmljZSBpcyBwcm9iZWQoKSBhbmQgYWxsIGluaXRpYWxpemF0aW9uCisgICBzdWNjZWVkZWQuIFRoZSBwd2NfZGV2aWNlIHN0cnVjdCBsaW5rcyBiYWNrIHRvIGJvdGggc3RydWN0dXJlcy4KKworICAgV2hlbiBhIGRldmljZSBpcyB1bnBsdWdnZWQgd2hpbGUgaW4gdXNlIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSAKKyAgIGxpc3Qgb2Yga25vd24gVVNCIGRldmljZXM7IEkgYWxzbyBkZS1yZWdpc3RlciBpdCBhcyBhIFY0TCBkZXZpY2UsIGJ1dCAKKyAgIHVuZm9ydHVuYXRlbHkgSSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgc2luY2UgdGhlIHN0cnVjdCBpcyBzdGlsbCBpbiB1c2UKKyAgIGJ5IHRoZSBmaWxlIGRlc2NyaXB0b3IuIFRoaXMgZnJlZS1pbmcgaXMgdGhlbiBkZWZlcmVuZCB1bnRpbCB0aGUgZmlyc3QKKyAgIG9wcG9ydHVuaXR5LiBDcnVkZSwgYnV0IGl0IHdvcmtzLgorICAgCisgICBBIHNtYWxsICdhZHZhbnRhZ2UnIGlzIHRoYXQgaWYgYSB1c2VyIHVucGx1Z3MgdGhlIGNhbSBhbmQgcGx1Z3MgaXQgYmFjaworICAgaW4sIGl0IHNob3VsZCBnZXQgYXNzaWduZWQgdGhlIHNhbWUgdmlkZW8gZGV2aWNlIG1pbm9yLCBidXQgdW5mb3J0dW5hdGVseQorICAgaXQncyBub24tdHJpdmlhbCB0byByZS1saW5rIHRoZSBjYW0gYmFjayB0byB0aGUgdmlkZW8gZGV2aWNlLi4uICh0aGF0IAorICAgd291bGQgc3VyZWx5IGJlIG1hZ2ljISA6KSkKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLworCisvKiBIZXJlIHdlIHdhbnQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS4KKyAqIFRoaXMgaXMgdXNlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgY29udGVudHMgb2YgdGhlIGFyZWEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcikgCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcga3ZhLCByZXQ7CisKKwlrdmEgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCWt2YSB8PSBhZHIgJiAoUEFHRV9TSVpFLTEpOyAvKiByZXN0b3JlIHRoZSBvZmZzZXQgKi8KKwlyZXQgPSBfX3BhKGt2YSk7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICogcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKiBtZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplPVBBR0VfQUxJR04oc2l6ZSk7CisgICAgICAgIG1lbT12bWFsbG9jXzMyKHNpemUpOworCWlmIChtZW0pIAorCXsKKwkJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJICAgICAgICBhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKKwkJd2hpbGUgKHNpemUgPiAwKSAKKyAgICAgICAgICAgICAgICB7CisJCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCQlhZHIrPVBBR0VfU0laRTsKKwkJCXNpemUtPVBBR0VfU0laRTsKKwkJfQorCX0KKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqIG1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmIChtZW0pIAorCXsKKwkgICAgICAgIGFkcj0odW5zaWduZWQgbG9uZykgbWVtOworCQl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSAKKyAgICAgICAgICAgICAgICB7CisJCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJCWFkcis9UEFHRV9TSVpFOworCQkJc2l6ZS09UEFHRV9TSVpFOworCQl9CisJCXZmcmVlKG1lbSk7CisJfQorfQorCisKKworCitzdGF0aWMgaW50IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpOworCXZvaWQgKmtidWY7CisKKwlUcmFjZShUUkFDRV9NRU1PUlksICI+PiBwd2NfYWxsb2NhdGVfYnVmZmVycyhwZGV2ID0gMHglcClcbiIsIHBkZXYpOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKwkJCisjaWZkZWYgUFdDX01BR0lDCisJaWYgKHBkZXYtPm1hZ2ljICE9IFBXQ19NQUdJQykgeworCQlFcnIoImFsbG9jYXRlX2J1ZmZlcnMoKTogbWFnaWMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorI2VuZGlmCQorCS8qIEFsbG9jYXRlIElzb2Nocm9udW91cyBwaXBlIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKKwkJaWYgKHBkZXYtPnNidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlrYnVmID0ga21hbGxvYyhJU09fQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKGtidWYgPT0gTlVMTCkgeworCQkJCUVycigiRmFpbGVkIHRvIGFsbG9jYXRlIGlzbyBidWZmZXIgJWQuXG4iLCBpKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBpc28gYnVmZmVyIGF0ICVwLlxuIiwga2J1Zik7CisJCQlwZGV2LT5zYnVmW2ldLmRhdGEgPSBrYnVmOworCQkJbWVtc2V0KGtidWYsIDAsIElTT19CVUZGRVJfU0laRSk7CisJCX0KKwl9CisKKwkvKiBBbGxvY2F0ZSBmcmFtZSBidWZmZXIgc3RydWN0dXJlICovCisJaWYgKHBkZXYtPmZidWYgPT0gTlVMTCkgeworCQlrYnVmID0ga21hbGxvYyhkZWZhdWx0X2ZidWZzICogc2l6ZW9mKHN0cnVjdCBwd2NfZnJhbWVfYnVmKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChrYnVmID09IE5VTEwpIHsKKwkJCUVycigiRmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUuXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBmcmFtZSBidWZmZXIgc3RydWN0dXJlIGF0ICVwLlxuIiwga2J1Zik7CisJCXBkZXYtPmZidWYgPSBrYnVmOworCQltZW1zZXQoa2J1ZiwgMCwgZGVmYXVsdF9mYnVmcyAqIHNpemVvZihzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZikpOworCX0KKwkvKiBjcmVhdGUgZnJhbWUgYnVmZmVycywgYW5kIG1ha2UgY2lyY3VsYXIgcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X2ZidWZzOyBpKyspIHsKKwkJaWYgKHBkZXYtPmZidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlrYnVmID0gdm1hbGxvYyhQV0NfRlJBTUVfU0laRSk7IC8qIG5lZWQgdm1hbGxvYyBzaW5jZSBmcmFtZSBidWZmZXIgPiAxMjhLICovCisJCQlpZiAoa2J1ZiA9PSBOVUxMKSB7CisJCQkJRXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZnJhbWUgYnVmZmVyICVkLlxuIiwgaSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlUcmFjZShUUkFDRV9NRU1PUlksICJBbGxvY2F0ZWQgZnJhbWUgYnVmZmVyICVkIGF0ICVwLlxuIiwgaSwga2J1Zik7CisJCQlwZGV2LT5mYnVmW2ldLmRhdGEgPSBrYnVmOworCQkJbWVtc2V0KGtidWYsIDEyOCwgUFdDX0ZSQU1FX1NJWkUpOworCQl9CisJfQorCQorCS8qIEFsbG9jYXRlIGRlY29tcHJlc3NvciB0YWJsZSBzcGFjZSAqLworCWtidWYgPSBOVUxMOworCXN3aXRjaCAocGRldi0+dHlwZSkKKwkgeworCSAgY2FzZSA2NzU6CisJICBjYXNlIDY4MDoKKwkgIGNhc2UgNjkwOgorCSAgY2FzZSA3MjA6CisJICBjYXNlIDczMDoKKwkgIGNhc2UgNzQwOgorCSAgY2FzZSA3NTA6CisJICAgIFRyYWNlKFRSQUNFX01FTU9SWSwicHJpdmF0ZV9kYXRhKCVaZClcbiIsc2l6ZW9mKHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSkpOworCSAgICBrYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CS8qIFRpbW9uICYgS2lhcmEgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDY0NToKKwkgIGNhc2UgNjQ2OgorCSAgICAvKiBUT0RPICYgRklYTUUgKi8KKwkgICAga2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCSAgICBicmVhazsKKwkgfQorCWlmIChrYnVmID09IE5VTEwpIHsKKwkgICBFcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkZWNvbXByZXNzIHRhYmxlLlxuIik7CisJICAgcmV0dXJuIC1FTk9NRU07CisJfQorCXBkZXYtPmRlY29tcHJlc3NfZGF0YSA9IGtidWY7CisJCisJLyogQWxsb2NhdGUgaW1hZ2UgYnVmZmVyOyBkb3VibGUgYnVmZmVyIGZvciBtbWFwKCkgKi8KKwlrYnVmID0gcnZtYWxsb2MoZGVmYXVsdF9tYnVmcyAqIHBkZXYtPmxlbl9wZXJfaW1hZ2UpOworCWlmIChrYnVmID09IE5VTEwpIHsKKwkJRXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UgYnVmZmVyKHMpLiBuZWVkZWQgKCVkKVxuIixkZWZhdWx0X21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlUcmFjZShUUkFDRV9NRU1PUlksICJBbGxvY2F0ZWQgaW1hZ2UgYnVmZmVyIGF0ICVwLlxuIiwga2J1Zik7CisJcGRldi0+aW1hZ2VfZGF0YSA9IGtidWY7CisJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfbWJ1ZnM7IGkrKykKKwkJcGRldi0+aW1hZ2VfcHRyW2ldID0ga2J1ZiArIGkgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOworCWZvciAoOyBpIDwgTUFYX0lNQUdFUzsgaSsrKQorCQlwZGV2LT5pbWFnZV9wdHJbaV0gPSBOVUxMOworCisJa2J1ZiA9IE5VTEw7CisJICAKKwlUcmFjZShUUkFDRV9NRU1PUlksICI8PCBwd2NfYWxsb2NhdGVfYnVmZmVycygpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHdjX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKworCVRyYWNlKFRSQUNFX01FTU9SWSwgIkVudGVyaW5nIGZyZWVfYnVmZmVycyglcCkuXG4iLCBwZGV2KTsKKworCWlmIChwZGV2ID09IE5VTEwpCisJCXJldHVybjsKKyNpZmRlZiBQV0NfTUFHSUMKKwlpZiAocGRldi0+bWFnaWMgIT0gUFdDX01BR0lDKSB7CisJCUVycigiZnJlZV9idWZmZXJzKCk6IG1hZ2ljIGZhaWxlZC5cbiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCQorCisJLyogUmVsZWFzZSBJc28tcGlwZSBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKQorCQlpZiAocGRldi0+c2J1ZltpXS5kYXRhICE9IE5VTEwpIHsKKwkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkZyZWVpbmcgSVNPIGJ1ZmZlciBhdCAlcC5cbiIsIHBkZXYtPnNidWZbaV0uZGF0YSk7CisJCQlrZnJlZShwZGV2LT5zYnVmW2ldLmRhdGEpOworCQkJcGRldi0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKwkJfQorCisJLyogVGhlIHNhbWUgZm9yIGZyYW1lIGJ1ZmZlcnMgKi8KKwlpZiAocGRldi0+ZmJ1ZiAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X2ZidWZzOyBpKyspIHsKKwkJCWlmIChwZGV2LT5mYnVmW2ldLmRhdGEgIT0gTlVMTCkgeworCQkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkZyZWVpbmcgZnJhbWUgYnVmZmVyICVkIGF0ICVwLlxuIiwgaSwgcGRldi0+ZmJ1ZltpXS5kYXRhKTsKKwkJCQl2ZnJlZShwZGV2LT5mYnVmW2ldLmRhdGEpOworCQkJCXBkZXYtPmZidWZbaV0uZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJa2ZyZWUocGRldi0+ZmJ1Zik7CisJCXBkZXYtPmZidWYgPSBOVUxMOworCX0KKworCS8qIEludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlciAmIHRhYmxlcyAqLworCWlmIChwZGV2LT5kZWNvbXByZXNzX2RhdGEgIT0gTlVMTCkgeworCQlUcmFjZShUUkFDRV9NRU1PUlksICJGcmVlaW5nIGRlY29tcHJlc3Npb24gYnVmZmVyIGF0ICVwLlxuIiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkJa2ZyZWUocGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkJcGRldi0+ZGVjb21wcmVzc19kYXRhID0gTlVMTDsKKwl9CisJcGRldi0+ZGVjb21wcmVzc29yID0gTlVMTDsKKworCS8qIFJlbGVhc2UgaW1hZ2UgYnVmZmVycyAqLworCWlmIChwZGV2LT5pbWFnZV9kYXRhICE9IE5VTEwpIHsKKwkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRnJlZWluZyBpbWFnZSBidWZmZXIgYXQgJXAuXG4iLCBwZGV2LT5pbWFnZV9kYXRhKTsKKwkJcnZmcmVlKHBkZXYtPmltYWdlX2RhdGEsIGRlZmF1bHRfbWJ1ZnMgKiBwZGV2LT5sZW5fcGVyX2ltYWdlKTsKKwl9CisJcGRldi0+aW1hZ2VfZGF0YSA9IE5VTEw7CisJCisJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiTGVhdmluZyBmcmVlX2J1ZmZlcnMoKS5cbiIpOworfQorCisvKiBUaGUgZnJhbWUgJiBpbWFnZSBidWZmZXIgbWVzcy4gCisKKyAgIFllcywgdGhpcyBpcyBhIG1lc3MuIFdlbGwsIGl0IHVzZWQgdG8gYmUgc2ltcGxlLCBidXQgYWxhcy4uLiAgSW4gdGhpcworICAgbW9kdWxlLCAzIGJ1ZmZlcnMgc2NoZW1lcyBhcmUgdXNlZCB0byBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgVVNCIGJ1cyB0bworICAgdGhlIHVzZXIgcHJvZ3JhbS4gVGhlIGZpcnN0IHNjaGVtZSBpbnZvbHZlcyB0aGUgSVNPIGJ1ZmZlcnMgKGNhbGxlZCB0aHVzCisgICBzaW5jZSB0aGV5IHRyYW5zcG9ydCBJU08gZGF0YSBmcm9tIHRoZSBVU0IgY29udHJvbGxlciksIGFuZCBub3QgcmVhbGx5CisgICBpbnRlcmVzdGluZy4gU3VmZmljZXMgdG8gc2F5IHRoZSBkYXRhIGZyb20gdGhpcyBidWZmZXIgaXMgcXVpY2tseSAKKyAgIGdhdGhlcmVkIGluIGFuIGludGVycnVwdCBoYW5kbGVyIChwd2NfaXNvY19oYW5kbGVyKSBhbmQgcGxhY2VkIGludG8gdGhlCisgICBmcmFtZSBidWZmZXIuCisKKyAgIFRoZSBmcmFtZSBidWZmZXIgaXMgdGhlIHNlY29uZCBzY2hlbWUsIGFuZCBpcyB0aGUgY2VudHJhbCBlbGVtZW50IGhlcmUuCisgICBJdCBjb2xsZWN0cyB0aGUgZGF0YSBmcm9tIGEgc2luZ2xlIGZyYW1lIGZyb20gdGhlIGNhbWVyYSAoaGVuY2UsIHRoZQorICAgbmFtZSkuIEZyYW1lcyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBVU0IgY2FtZXJhIHdpdGggYSBzaG9ydCBVU0IgcGFja2V0LAorICAgc28gdGhhdCdzIGVhc3kgdG8gZGV0ZWN0LiBUaGUgZnJhbWUgYnVmZmVycyBmb3JtIGEgbGlzdCB0aGF0IGlzIGZpbGxlZAorICAgYnkgdGhlIGNhbWVyYStVU0IgY29udHJvbGxlciBhbmQgZHJhaW5lZCBieSB0aGUgdXNlciBwcm9jZXNzIHRocm91Z2gKKyAgIGVpdGhlciByZWFkKCkgb3IgbW1hcCgpLgorCisgICBUaGUgaW1hZ2UgYnVmZmVyIGlzIHRoZSB0aGlyZCBzY2hlbWUsIGluIHdoaWNoIGZyYW1lcyBhcmUgZGVjb21wcmVzc2VkCisgICBhbmQgY29udmVydGVkIGludG8gcGxhbmFyIGZvcm1hdC4gRm9yIG1tYXAoKSB0aGVyZSBpcyBtb3JlIHRoYW4KKyAgIG9uZSBpbWFnZSBidWZmZXIgYXZhaWxhYmxlLgorCisgICBUaGUgZnJhbWUgYnVmZmVycyBwcm92aWRlIHRoZSBpbWFnZSBidWZmZXJpbmcuIEluIGNhc2UgdGhlIHVzZXIgcHJvY2VzcworICAgaXMgYSBiaXQgc2xvdywgdGhpcyBpbnRyb2R1Y2VzIGxhZyBhbmQgc29tZSB1bmRlc2lyZWQgc2lkZS1lZmZlY3RzLgorICAgVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gdGhlIGZyYW1lIGJ1ZmZlciBpcyBmdWxsLiBJIHVzZWQgdG8gZHJvcCB0aGUgbGFzdAorICAgZnJhbWUsIHdoaWNoIG1ha2VzIHRoZSBkYXRhIGluIHRoZSBxdWV1ZSBzdGFsZSB2ZXJ5IHF1aWNrbHkuIEJ1dCBkcm9wcGluZworICAgdGhlIGZyYW1lIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBwcm92ZWQgdG8gYmUgYSBsaXR0ZSBiaXQgbW9yZSBkaWZmaWN1bHQuCisgICBJIHRyaWVkIGEgY2lyY3VsYXIgbGlua2VkIHNjaGVtZSwgYnV0IHRoaXMgaW50cm9kdWNlZCBtb3JlIHByb2JsZW1zIHRoYW4KKyAgIGl0IHNvbHZlZC4KKworICAgQmVjYXVzZSBmaWxsaW5nIGFuZCBkcmFpbmluZyBhcmUgY29tcGxldGVseSBhc3luY2hyb25vdXMgcHJvY2Vzc2VzLCB0aGlzCisgICByZXF1aXJlcyBzb21lIGZpZGRsaW5nIHdpdGggcG9pbnRlcnMgYW5kIG11dGV4ZXMuCisKKyAgIEV2ZW50dWFsbHksIEkgY2FtZSB1cCB3aXRoIGEgc3lzdGVtIHdpdGggMiBsaXN0czogYW4gJ2VtcHR5JyBmcmFtZSBsaXN0CisgICBhbmQgYSAnZnVsbCcgZnJhbWUgbGlzdDoKKyAgICAgKiBJbml0aWFsbHksIGFsbCBmcmFtZSBidWZmZXJzIGJ1dCBvbmUgYXJlIG9uIHRoZSAnZW1wdHknIGxpc3Q7IHRoZSBvbmUKKyAgICAgICByZW1haW5pbmcgYnVmZmVyIGlzIG91ciBpbml0aWFsIGZpbGwgZnJhbWUuCisgICAgICogSWYgYSBmcmFtZSBpcyBuZWVkZWQgZm9yIGZpbGxpbmcsIHdlIHRyeSB0byB0YWtlIGl0IGZyb20gdGhlICdlbXB0eScgCisgICAgICAgbGlzdCwgdW5sZXNzIHRoYXQgbGlzdCBpcyBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZSB0YWtlIHRoZSBidWZmZXIgYXQgCisgICAgICAgdGhlIGhlYWQgb2YgdGhlICdmdWxsJyBsaXN0LgorICAgICAqIFdoZW4gb3VyIGZpbGwgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCwgaXQgaXMgYXBwZW5kZWQgdG8gdGhlICdmdWxsJworICAgICAgIGxpc3QuCisgICAgICogSWYgYSBmcmFtZSBpcyBuZWVkZWQgYnkgcmVhZCgpIG9yIG1tYXAoKSwgaXQgaXMgdGFrZW4gZnJvbSB0aGUgaGVhZCBvZgorICAgICAgIHRoZSAnZnVsbCcgbGlzdCwgaGFuZGxlZCwgYW5kIHRoZW4gYXBwZW5kZWQgdG8gdGhlICdlbXB0eScgbGlzdC4gSWYgbm8KKyAgICAgICBidWZmZXIgaXMgcHJlc2VudCBvbiB0aGUgJ2Z1bGwnIGxpc3QsIHdlIHdhaXQuCisgICBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBkZWNvbXByZXNzZWQvCisgICBjb252ZXJ0ZWQsIGlzIG9uIG5laXRoZXIgbGlzdCwgYW5kIHRodXMgbm90IGluIG91ciB3YXkgKGFueSBvdGhlciBzY2hlbWUKKyAgIEkgdHJpZWQgaGFkIHRoZSBwcm9ibGVtIG9mIG9sZCBkYXRhIGxpbmdlcmluZyBpbiB0aGUgcXVldWUpLgorCisgICBXaGF0ZXZlciBzdHJhdGVneSB5b3UgY2hvb3NlLCBpdCBhbHdheXMgcmVtYWlucyBhIHRyYWRlb2ZmOiB3aXRoIG1vcmUKKyAgIGZyYW1lIGJ1ZmZlcnMgdGhlIGNoYW5jZXMgb2YgYSBtaXNzZWQgZnJhbWUgYXJlIHJlZHVjZWQuIE9uIHRoZSBvdGhlcgorICAgaGFuZCwgb24gc2xvd2VyIG1hY2hpbmVzIGl0IGludHJvZHVjZXMgbGFnIGJlY2F1c2UgdGhlIHF1ZXVlIHdpbGwKKyAgIGFsd2F5cyBiZSBmdWxsLgorICovCisKKy8qKgorICBcYnJpZWYgRmluZCBuZXh0IGZyYW1lIGJ1ZmZlciB0byBmaWxsLiBUYWtlIGZyb20gZW1wdHkgb3IgZnVsbCBsaXN0LCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19uZXh0X2ZpbGxfZnJhbWUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmV0ID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCWlmIChwZGV2LT5maWxsX2ZyYW1lICE9IE5VTEwpIHsKKwkJLyogYXBwZW5kIHRvICdmdWxsJyBsaXN0ICovCisJCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQlwZGV2LT5mdWxsX2ZyYW1lcyA9IHBkZXYtPmZpbGxfZnJhbWU7CisJCQlwZGV2LT5mdWxsX2ZyYW1lc190YWlsID0gcGRldi0+ZnVsbF9mcmFtZXM7CisJCX0KKwkJZWxzZSB7CisJCQlwZGV2LT5mdWxsX2ZyYW1lc190YWlsLT5uZXh0ID0gcGRldi0+ZmlsbF9mcmFtZTsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzX3RhaWwgPSBwZGV2LT5maWxsX2ZyYW1lOworCQl9CisJfQorCWlmIChwZGV2LT5lbXB0eV9mcmFtZXMgIT0gTlVMTCkgeworCQkvKiBXZSBoYXZlIGVtcHR5IGZyYW1lcyBhdmFpbGFibGUuIFRoYXQncyBlYXN5ICovCisJCXBkZXYtPmZpbGxfZnJhbWUgPSBwZGV2LT5lbXB0eV9mcmFtZXM7CisJCXBkZXYtPmVtcHR5X2ZyYW1lcyA9IHBkZXYtPmVtcHR5X2ZyYW1lcy0+bmV4dDsKKwl9CisJZWxzZSB7CisJCS8qIEhtbS4gVGFrZSBpdCBmcm9tIHRoZSBmdWxsIGxpc3QgKi8KKyNpZiBQV0NfREVCVUcKKwkJLyogc2FuaXR5IGNoZWNrICovCisJCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQlFcnIoIk5laXRoZXIgZW1wdHkgb3IgZnVsbCBmcmFtZXMgYXZhaWxhYmxlIVxuIik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorI2VuZGlmCisJCXBkZXYtPmZpbGxfZnJhbWUgPSBwZGV2LT5mdWxsX2ZyYW1lczsKKwkJcGRldi0+ZnVsbF9mcmFtZXMgPSBwZGV2LT5mdWxsX2ZyYW1lcy0+bmV4dDsKKwkJcmV0ID0gMTsKKwl9CisJcGRldi0+ZmlsbF9mcmFtZS0+bmV4dCA9IE5VTEw7CisjaWYgUFdDX0RFQlVHCisJVHJhY2UoVFJBQ0VfU0VRVUVOQ0UsICJBc3NpZ25pbmcgc2VxdWVuY2UgbnVtYmVyICVkLlxuIiwgcGRldi0+c2VxdWVuY2UpOworCXBkZXYtPmZpbGxfZnJhbWUtPnNlcXVlbmNlID0gcGRldi0+c2VxdWVuY2UrKzsKKyNlbmRpZgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICBcYnJpZWYgUmVzZXQgYWxsIGJ1ZmZlcnMsIHBvaW50ZXJzIGFuZCBsaXN0cywgZXhjZXB0IGZvciB0aGUgaW1hZ2VfdXNlZFtdIGJ1ZmZlci4KKworICBJZiB0aGUgaW1hZ2VfdXNlZFtdIGJ1ZmZlciBpcyBjbGVhcmVkIHRvbywgbW1hcCgpL1ZJRElPQ1NZTkMgd2lsbCBydW4gaW50byB0cm91YmxlLgorICovCitzdGF0aWMgdm9pZCBwd2NfcmVzZXRfYnVmZmVycyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKKwlwZGV2LT5mdWxsX2ZyYW1lcyA9IE5VTEw7CisJcGRldi0+ZnVsbF9mcmFtZXNfdGFpbCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfZmJ1ZnM7IGkrKykgeworCQlwZGV2LT5mYnVmW2ldLmZpbGxlZCA9IDA7CisJCWlmIChpID4gMCkKKwkJCXBkZXYtPmZidWZbaV0ubmV4dCA9ICZwZGV2LT5mYnVmW2kgLSAxXTsKKwkJZWxzZQorCQkJcGRldi0+ZmJ1Zi0+bmV4dCA9IE5VTEw7CisJfQorCXBkZXYtPmVtcHR5X2ZyYW1lcyA9ICZwZGV2LT5mYnVmW2RlZmF1bHRfZmJ1ZnMgLSAxXTsKKwlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbCA9IHBkZXYtPmZidWY7CisJcGRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CisJcGRldi0+ZmlsbF9mcmFtZSA9IHBkZXYtPmVtcHR5X2ZyYW1lczsKKwlwZGV2LT5lbXB0eV9mcmFtZXMgPSBwZGV2LT5lbXB0eV9mcmFtZXMtPm5leHQ7CisKKwlwZGV2LT5pbWFnZV9yZWFkX3BvcyA9IDA7CisJcGRldi0+ZmlsbF9pbWFnZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworfQorCisKKy8qKgorICBcYnJpZWYgRG8gYWxsIHRoZSBoYW5kbGluZyBmb3IgZ2V0dGluZyBvbmUgZnJhbWU6IGdldCBwb2ludGVyLCBkZWNvbXByZXNzLCBhZHZhbmNlIHBvaW50ZXJzLgorICovCitzdGF0aWMgaW50IHB3Y19oYW5kbGVfZnJhbWUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJLyogRmlyc3QgZ3JhYiBvdXIgcmVhZF9mcmFtZTsgdGhpcyBpcyByZW1vdmVkIGZyb20gYWxsIGxpc3RzLCBzbworCSAgIHdlIGNhbiByZWxlYXNlIHRoZSBsb2NrIGFmdGVyIHRoaXMgd2l0aG91dCBwcm9ibGVtcyAqLworCWlmIChwZGV2LT5yZWFkX2ZyYW1lICE9IE5VTEwpIHsKKwkJLyogVGhpcyBjYW4ndCB0aGVvcmV0aWNhbGx5IGhhcHBlbiAqLworCQlFcnIoIkh1aD8gUmVhZCBmcmFtZSBzdGlsbCBpbiB1c2U/XG4iKTsKKwl9CisJZWxzZSB7CisJCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQlFcnIoIldvb3BzLiBObyBmcmFtZXMgcmVhZHkuXG4iKTsKKwkJfQorCQllbHNlIHsKKwkJCXBkZXYtPnJlYWRfZnJhbWUgPSBwZGV2LT5mdWxsX2ZyYW1lczsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzID0gcGRldi0+ZnVsbF9mcmFtZXMtPm5leHQ7CisJCQlwZGV2LT5yZWFkX2ZyYW1lLT5uZXh0ID0gTlVMTDsKKwkJfQorCisJCWlmIChwZGV2LT5yZWFkX2ZyYW1lICE9IE5VTEwpIHsKKyNpZiBQV0NfREVCVUcKKwkJCVRyYWNlKFRSQUNFX1NFUVVFTkNFLCAiRGVjb21wcmVzc2luZyBmcmFtZSAlZFxuIiwgcGRldi0+cmVhZF9mcmFtZS0+c2VxdWVuY2UpOworI2VuZGlmCisJCQkvKiBEZWNvbXByZXNzaW9uIGlzIGEgbGVuZ2h0eSBwcm9jZXNzLCBzbyBpdCdzIG91dHNpZGUgb2YgdGhlIGxvY2suCisJCQkgICBUaGlzIGdpdmVzIHRoZSBpc29jX2hhbmRsZXIgdGhlIG9wcG9ydHVuaXR5IHRvIGZpbGwgbW9yZSBmcmFtZXMKKwkJCSAgIGluIHRoZSBtZWFuIHRpbWUuCisJCQkqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCQkJcmV0ID0gcHdjX2RlY29tcHJlc3MocGRldik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCisJCQkvKiBXZSdyZSBkb25lIHdpdGggcmVhZF9idWZmZXIsIHRhY2sgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZW1wdHkgYnVmZmVyIGxpc3QgKi8KKwkJCWlmIChwZGV2LT5lbXB0eV9mcmFtZXMgPT0gTlVMTCkgeworCQkJCXBkZXYtPmVtcHR5X2ZyYW1lcyA9IHBkZXYtPnJlYWRfZnJhbWU7CisJCQkJcGRldi0+ZW1wdHlfZnJhbWVzX3RhaWwgPSBwZGV2LT5lbXB0eV9mcmFtZXM7CisJCQl9CisJCQllbHNlIHsKKwkJCQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbC0+bmV4dCA9IHBkZXYtPnJlYWRfZnJhbWU7CisJCQkJcGRldi0+ZW1wdHlfZnJhbWVzX3RhaWwgPSBwZGV2LT5yZWFkX2ZyYW1lOworCQkJfQorCQkJcGRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICBcYnJpZWYgQWR2YW5jZSBwb2ludGVycyBvZiBpbWFnZSBidWZmZXIgKGFmdGVyIGVhY2ggdXNlciByZXF1ZXN0KQorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwd2NfbmV4dF9pbWFnZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlwZGV2LT5pbWFnZV91c2VkW3BkZXYtPmZpbGxfaW1hZ2VdID0gMDsKKwlwZGV2LT5maWxsX2ltYWdlID0gKHBkZXYtPmZpbGxfaW1hZ2UgKyAxKSAlIGRlZmF1bHRfbWJ1ZnM7Cit9CisKKworLyogVGhpcyBnZXRzIGNhbGxlZCBmb3IgdGhlIElzb2Nocm9ub3VzIHBpcGUgKHZpZGVvKS4gVGhpcyBpcyBkb25lIGluCisgKiBpbnRlcnJ1cHQgdGltZSwgc28gaXQgaGFzIHRvIGJlIGZhc3QsIG5vdCBjcmFzaCwgYW5kIG5vdCBzdGFsbC4gTmVhdC4KKyAqLworc3RhdGljIHZvaWQgcHdjX2lzb2NfaGFuZGxlcihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworCWludCBpLCBmc3QsIGZsZW47CisJaW50IGF3YWtlOworCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmOworCXVuc2lnbmVkIGNoYXIgKmZpbGxwdHIgPSBOVUxMLCAqaXNvX2J1ZiA9IE5VTEw7CisKKwlhd2FrZSA9IDA7CisJcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXVyYi0+Y29udGV4dDsKKwlpZiAocGRldiA9PSBOVUxMKSB7CisJCUVycigiaXNvY19oYW5kbGVyKCkgY2FsbGVkIHdpdGggTlVMTCBkZXZpY2U/IVxuIik7CisJCXJldHVybjsKKwl9CisjaWZkZWYgUFdDX01BR0lDCisJaWYgKHBkZXYtPm1hZ2ljICE9IFBXQ19NQUdJQykgeworCQlFcnIoImlzb2NfaGFuZGxlcigpIGNhbGxlZCB3aXRoIGJhZCBtYWdpYyFcbiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKwkJVHJhY2UoVFJBQ0VfT1BFTiwgInB3Y19pc29jX2hhbmRsZXIoKTogVVJCICglcCkgdW5saW5rZWQgJXNzeW5jaHJvbnVvdXNseS5cbiIsIHVyYiwgdXJiLT5zdGF0dXMgPT0gLUVOT0VOVCA/ICIiIDogImEiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTICYmIHVyYi0+c3RhdHVzICE9IDApIHsKKwkJY29uc3QgY2hhciAqZXJybXNnOworCisJCWVycm1zZyA9ICJVbmtub3duIjsKKwkJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCQljYXNlIC1FTk9TUjoJCWVycm1zZyA9ICJCdWZmZXIgZXJyb3IgKG92ZXJydW4pIjsgYnJlYWs7CisJCQljYXNlIC1FUElQRToJCWVycm1zZyA9ICJTdGFsbGVkIChkZXZpY2Ugbm90IHJlc3BvbmRpbmcpIjsgYnJlYWs7CisJCQljYXNlIC1FT1ZFUkZMT1c6CWVycm1zZyA9ICJCYWJibGUgKGJhZCBjYWJsZT8pIjsgYnJlYWs7CisJCQljYXNlIC1FUFJPVE86CQllcnJtc2cgPSAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSI7IGJyZWFrOworCQkJY2FzZSAtRUlMU0VROgkJZXJybXNnID0gIkNSQy9UaW1lb3V0IChjb3VsZCBiZSBhbnl0aGluZykiOyBicmVhazsKKwkJCWNhc2UgLUVUSU1FRE9VVDoJZXJybXNnID0gIk5BSyAoZGV2aWNlIGRvZXMgbm90IHJlc3BvbmQpIjsgYnJlYWs7CisJCX0KKwkJVHJhY2UoVFJBQ0VfRkxPVywgInB3Y19pc29jX2hhbmRsZXIoKSBjYWxsZWQgd2l0aCBzdGF0dXMgJWQgWyVzXS5cbiIsIHVyYi0+c3RhdHVzLCBlcnJtc2cpOworCQkvKiBHaXZlIHVwIGFmdGVyIGEgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZXJyb3JzIG9uIHRoZSBVU0IgYnVzLiAKKwkJICAgQXBwZWFyYW50bHkgc29tZXRoaW5nIGlzIHdyb25nIHNvIHdlIHNpbXVsYXRlIGFuIHVucGx1ZyBldmVudC4KKwkJICovCisJCWlmICgrK3BkZXYtPnZpc29jX2Vycm9ycyA+IE1BWF9JU09DX0VSUk9SUykKKwkJeworCQkJSW5mbygiVG9vIG1hbnkgSVNPQyBlcnJvcnMsIGJhaWxpbmcgb3V0LlxuIik7CisJCQlwZGV2LT5lcnJvcl9zdGF0dXMgPSBFSU87CisJCQlhd2FrZSA9IDE7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7CisJCX0KKwkJZ290byBoYW5kbGVyX2VuZDsgLy8gdWdseSwgYnV0IHByYWN0aWNhbAorCX0KKworCWZidWYgPSBwZGV2LT5maWxsX2ZyYW1lOworCWlmIChmYnVmID09IE5VTEwpIHsKKwkJRXJyKCJwd2NfaXNvY19oYW5kbGVyIHdpdGhvdXQgdmFsaWQgZmlsbCBmcmFtZS5cbiIpOworCQlhd2FrZSA9IDE7CisJCWdvdG8gaGFuZGxlcl9lbmQ7CisJfQorCWVsc2UgeworCQlmaWxscHRyID0gZmJ1Zi0+ZGF0YSArIGZidWYtPmZpbGxlZDsKKwl9CisKKwkvKiBSZXNldCBJU09DIGVycm9yIGNvdW50ZXIuIFdlIGRpZCBnZXQgaGVyZSwgYWZ0ZXIgYWxsLiAqLworCXBkZXYtPnZpc29jX2Vycm9ycyA9IDA7CisKKwkvKiB2c3luYzogMCA9IGRvbid0IGNvcHkgZGF0YQorCSAgICAgICAgICAxID0gc3luYy1odW50CisJICAgICAgICAgIDIgPSBzeW5jaGVkCisJICovCisJLyogQ29tcGFjdCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlmc3QgID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWZsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCWlzb19idWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQlpZiAoZnN0ID09IDApIHsKKwkJCWlmIChmbGVuID4gMCkgeyAvKiBpZiB2YWxpZCBkYXRhLi4uICovCisJCQkJaWYgKHBkZXYtPnZzeW5jID4gMCkgeyAvKiAuLi5hbmQgd2UgYXJlIG5vdCBzeW5jLWh1bnRpbmcuLi4gKi8KKwkJCQkJcGRldi0+dnN5bmMgPSAyOworCisJCQkJCS8qIC4uLmNvcHkgZGF0YSB0byBmcmFtZSBidWZmZXIsIGlmIHBvc3NpYmxlICovCisJCQkJCWlmIChmbGVuICsgZmJ1Zi0+ZmlsbGVkID4gcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSkgeworCQkJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIkZyYW1lIGJ1ZmZlciBvdmVyZmxvdyAoZmxlbiA9ICVkLCBmcmFtZV90b3RhbF9zaXplID0gJWQpLlxuIiwgZmxlbiwgcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSk7CisJCQkJCQlwZGV2LT52c3luYyA9IDA7IC8qIEhtbSwgbGV0J3Mgd2FpdCBmb3IgYW4gRU9GIChlbmQtb2YtZnJhbWUpICovCisJCQkJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQltZW1tb3ZlKGZpbGxwdHIsIGlzb19idWYsIGZsZW4pOworCQkJCQkJZmlsbHB0ciArPSBmbGVuOworCQkJCQl9CisJCQkJfQorCQkJCWZidWYtPmZpbGxlZCArPSBmbGVuOworCQkJfSAvKiAuLmZsZW4gPiAwICovCisKKwkJCWlmIChmbGVuIDwgcGRldi0+dmxhc3RfcGFja2V0X3NpemUpIHsKKwkJCQkvKiBTaG9ydGVyIHBhY2tldC4uLiBXZSBwcm9iYWJseSBoYXZlIHRoZSBlbmQgb2YgYW4gaW1hZ2UtZnJhbWU7IAorCQkJCSAgIHdha2UgdXAgcmVhZCgpIHByb2Nlc3MgYW5kIGxldCBzZWxlY3QoKS9wb2xsKCkgZG8gc29tZXRoaW5nLgorCQkJCSAgIERlY29tcHJlc3Npb24gaXMgZG9uZSBpbiB1c2VyIHRpbWUgb3ZlciB0aGVyZS4KKwkJCQkgKi8KKwkJCQlpZiAocGRldi0+dnN5bmMgPT0gMikgeworCQkJCQkvKiBUaGUgVG9VQ2FtIEZ1biBDTU9TIHNlbnNvciBjYXVzZXMgdGhlIGZpcm13YXJlIHRvIHNlbmQgMiBvciAzIGJvZ3VzIAorCQkJCQkgICBmcmFtZXMgb24gdGhlIFVTQiB3aXJlIGFmdGVyIGFuIGV4cG9zdXJlIGNoYW5nZS4gVGhpcyBjb25kaXRpdGlvbiBpcyAKKwkJCQkJICAgaG93ZXZlciBkZXRlY3RlZCAgaW4gdGhlIGNhbSBhbmQgYSBiaXQgaXMgc2V0IGluIHRoZSBoZWFkZXIuCisJCQkJCSAqLworCQkJCQlpZiAocGRldi0+dHlwZSA9PSA3MzApIHsKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZmJ1Zi0+ZGF0YTsKKwkJCQkJCQorCQkJCQkJaWYgKHB0clsxXSA9PSAxICYmIHB0clswXSAmIDB4MTApIHsKKyNpZiBQV0NfREVCVUcKKwkJCQkJCQlEZWJ1ZygiSHl1bmRhaSBDTU9TIHNlbnNvciBidWcuIERyb3BwaW5nIGZyYW1lICVkLlxuIiwgZmJ1Zi0+c2VxdWVuY2UpOworI2VuZGlmCisJCQkJCQkJcGRldi0+ZHJvcF9mcmFtZXMgKz0gMjsKKwkJCQkJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CisJCQkJCQl9CisJCQkJCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgeworCQkJCQkJCWlmIChwdHJbMF0gJiAweDAxKQorCQkJCQkJCQlJbmZvKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJSW5mbygiU25hcHNob3QgYnV0dG9uIHJlbGVhc2VkLlxuIik7CisJCQkJCQl9CisJCQkJCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMikgeworCQkJCQkJCWlmIChwdHJbMF0gJiAweDAyKQorCQkJCQkJCQlJbmZvKCJJbWFnZSBpcyBtaXJyb3JlZC5cbiIpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJSW5mbygiSW1hZ2UgaXMgbm9ybWFsLlxuIik7CisJCQkJCQl9CisJCQkJCQlwZGV2LT52bWlycm9yID0gcHRyWzBdICYgMHgwMzsKKwkJCQkJCS8qIFNvbWV0aW1lcyB0aGUgdHJhaWxlciBvZiB0aGUgNzMwIGlzIHN0aWxsIHNlbnQgYXMgYSA0IGJ5dGUgcGFja2V0IAorCQkJCQkJICAgYWZ0ZXIgYSBzaG9ydCBmcmFtZTsgdGhpcyBjb25kaXRpb24gaXMgZmlsdGVyZWQgb3V0IHNwZWNpZmljYWxseS4gQSA0IGJ5dGUKKwkJCQkJCSAgIGZyYW1lIGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnl3YXkuCisJCQkJCQkgICBTbyB3ZSBnZXQgZWl0aGVyIHRoaXMgc2VxdWVuY2U6IAorCQkJCQkJICAgCWRyb3BfYml0IHNldCAtPiA0IGJ5dGUgZnJhbWUgLT4gc2hvcnQgZnJhbWUgLT4gZ29vZCBmcmFtZQorCQkJCQkJICAgT3IgdGhpcyBvbmU6CisJCQkJCQkgICAJZHJvcF9iaXQgc2V0IC0+IHNob3J0IGZyYW1lIC0+IGdvb2QgZnJhbWUKKwkJCQkJCSAgIFNvIHdlIGRyb3AgZWl0aGVyIDMgb3IgMiBmcmFtZXMgaW4gYWxsIQorCQkJCQkJICovCisJCQkJCQlpZiAoZmJ1Zi0+ZmlsbGVkID09IDQpCisJCQkJCQkJcGRldi0+ZHJvcF9mcmFtZXMrKzsKKwkJCQkJfQorCisJCQkJCS8qIEluIGNhc2Ugd2Ugd2VyZSBpbnN0cnVjdGVkIHRvIGRyb3AgdGhlIGZyYW1lLCBkbyBzbyBzaWxlbnRseS4KKwkJCQkJICAgVGhlIGJ1ZmZlciBwb2ludGVycyBhcmUgbm90IHVwZGF0ZWQgZWl0aGVyIChidXQgdGhlIGNvdW50ZXJzIGFyZSByZXNldCBiZWxvdykuCisJCQkJCSAqLworCQkJCQlpZiAocGRldi0+ZHJvcF9mcmFtZXMgPiAwKQorCQkJCQkJcGRldi0+ZHJvcF9mcmFtZXMtLTsKKwkJCQkJZWxzZSB7CisJCQkJCQkvKiBDaGVjayBmb3IgdW5kZXJmbG93IGZpcnN0ICovCisJCQkJCQlpZiAoZmJ1Zi0+ZmlsbGVkIDwgcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSkgeworCQkJCQkJCVRyYWNlKFRSQUNFX0ZMT1csICJGcmFtZSBidWZmZXIgdW5kZXJmbG93ICglZCBieXRlcyk7IGRpc2NhcmRlZC5cbiIsIGZidWYtPmZpbGxlZCk7CisJCQkJCQkJcGRldi0+dmZyYW1lc19lcnJvcisrOworCQkJCQkJfQorCQkJCQkJZWxzZSB7CisJCQkJCQkJLyogU2VuZCBvbmx5IG9uY2UgcGVyIEVPRiAqLworCQkJCQkJCWF3YWtlID0gMTsgLyogZGVsYXkgd2FrZV91cHMgKi8KKworCQkJCQkJCS8qIEZpbmQgb3VyIG5leHQgZnJhbWUgdG8gZmlsbC4gVGhpcyB3aWxsIGFsd2F5cyBzdWNjZWVkLCBzaW5jZSB3ZQorCQkJCQkJCSAqIG5pY2sgYSBmcmFtZSBmcm9tIGVpdGhlciBlbXB0eSBvciBmdWxsIGxpc3QsIGJ1dCBpZiB3ZSBoYWQgdG8KKwkJCQkJCQkgKiB0YWtlIGl0IGZyb20gdGhlIGZ1bGwgbGlzdCwgaXQgbWVhbnMgYSBmcmFtZSBnb3QgZHJvcHBlZC4KKwkJCQkJCQkgKi8KKwkJCQkJCQlpZiAocHdjX25leHRfZmlsbF9mcmFtZShwZGV2KSkgeworCQkJCQkJCQlwZGV2LT52ZnJhbWVzX2R1bXBlZCsrOworCQkJCQkJCQlpZiAoKHBkZXYtPnZmcmFtZV9jb3VudCA+IEZSQU1FX0xPV01BUkspICYmIChwd2NfdHJhY2UgJiBUUkFDRV9GTE9XKSkgeworCQkJCQkJCQkJaWYgKHBkZXYtPnZmcmFtZXNfZHVtcGVkIDwgMjApCisJCQkJCQkJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIkR1bXBpbmcgZnJhbWUgJWQuXG4iLCBwZGV2LT52ZnJhbWVfY291bnQpOworCQkJCQkJCQkJaWYgKHBkZXYtPnZmcmFtZXNfZHVtcGVkID09IDIwKQorCQkJCQkJCQkJCVRyYWNlKFRSQUNFX0ZMT1csICJEdW1waW5nIGZyYW1lICVkIChsYXN0IG1lc3NhZ2UpLlxuIiwgcGRldi0+dmZyYW1lX2NvdW50KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlmYnVmID0gcGRldi0+ZmlsbF9mcmFtZTsKKwkJCQkJCX0KKwkJCQkJfSAvKiAhZHJvcF9mcmFtZXMgKi8KKwkJCQkJcGRldi0+dmZyYW1lX2NvdW50Kys7CisJCQkJfQorCQkJCWZidWYtPmZpbGxlZCA9IDA7CisJCQkJZmlsbHB0ciA9IGZidWYtPmRhdGE7CisJCQkJcGRldi0+dnN5bmMgPSAxOworCQkJfSAvKiAuLiBmbGVuIDwgbGFzdF9wYWNrZXRfc2l6ZSAqLworCQkJcGRldi0+dmxhc3RfcGFja2V0X3NpemUgPSBmbGVuOworCQl9IC8qIC4uc3RhdHVzID09IDAgKi8KKyNpZiBQV0NfREVCVUcKKwkJLyogVGhpcyBpcyBub3JtYWxseSBub3QgaW50ZXJlc3RpbmcgdG8gdGhlIHVzZXIsIHVubGVzcyB5b3UgYXJlIHJlYWxseSBkZWJ1Z2dpbmcgc29tZXRoaW5nICovCisJCWVsc2UgeworCQkJc3RhdGljIGludCBpc29fZXJyb3IgPSAwOworCQkJaXNvX2Vycm9yKys7CisJCQlpZiAoaXNvX2Vycm9yIDwgMjApCisJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIklzbyBmcmFtZSAlZCBvZiBVU0IgaGFzIGVycm9yICVkXG4iLCBpLCBmc3QpOworCQl9CisjZW5kaWYKKwl9CisKK2hhbmRsZXJfZW5kOgorCWlmIChhd2FrZSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwZGV2LT5mcmFtZXEpOworCisJdXJiLT5kZXYgPSBwZGV2LT51ZGV2OworCWkgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChpICE9IDApCisJCUVycigiRXJyb3IgKCVkKSByZS1zdWJtaXR0aW5nIHVyYiBpbiBwd2NfaXNvY19oYW5kbGVyLlxuIiwgaSk7Cit9CisKKworc3RhdGljIGludCBwd2NfaXNvY19pbml0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgaSwgaiwgcmV0OworCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWRlc2MgPSBOVUxMOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHBkZXYtPmlzb19pbml0KQorCQlyZXR1cm4gMDsKKwlwZGV2LT52c3luYyA9IDA7CisJdWRldiA9IHBkZXYtPnVkZXY7CisKKwkvKiBHZXQgdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGludGVyZmFjZSwgYWRqdXN0IHBhY2tldCBzaXplICovCisJaWYgKCF1ZGV2LT5hY3Rjb25maWcpCisJCXJldHVybiAtRUZBVUxUOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiw1KQorCWlkZXNjID0gJnVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdLT5hbHRzZXR0aW5nW3BkZXYtPnZhbHRlcm5hdGVdOworI2Vsc2UKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApOworCWlmIChpbnRmKQorCQlpZGVzYyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBwZGV2LT52YWx0ZXJuYXRlKTsKKyNlbmRpZgorCQkKKwlpZiAoIWlkZXNjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFNlYXJjaCB2aWRlbyBlbmRwb2ludCAqLworCXBkZXYtPnZtYXhfcGFja2V0X3NpemUgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgaWRlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKQorCQlpZiAoKGlkZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweEYpID09IHBkZXYtPnZlbmRwb2ludCkgeworCQkJcGRldi0+dm1heF9wYWNrZXRfc2l6ZSA9IGxlMTZfdG9fY3B1KGlkZXNjLT5lbmRwb2ludFtpXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKKwkJCWJyZWFrOworCQl9CisJCisJaWYgKHBkZXYtPnZtYXhfcGFja2V0X3NpemUgPCAwIHx8IHBkZXYtPnZtYXhfcGFja2V0X3NpemUgPiBJU09fTUFYX0ZSQU1FX1NJWkUpIHsKKwkJRXJyKCJGYWlsZWQgdG8gZmluZCBwYWNrZXQgc2l6ZSBmb3IgdmlkZW8gZW5kcG9pbnQgaW4gY3VycmVudCBhbHRlcm5hdGUgc2V0dGluZy5cbiIpOworCQlyZXR1cm4gLUVORklMRTsgLyogT2RkIGVycm9yLCB0aGF0IHNob3VsZCBiZSBub3RpY2FibGUgKi8KKwl9CisKKwkvKiBTZXQgYWx0ZXJuYXRlIGludGVyZmFjZSAqLworCXJldCA9IDA7CisJVHJhY2UoVFJBQ0VfT1BFTiwgIlNldHRpbmcgYWx0ZXJuYXRlIGludGVyZmFjZSAlZFxuIiwgcGRldi0+dmFsdGVybmF0ZSk7CisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocGRldi0+dWRldiwgMCwgcGRldi0+dmFsdGVybmF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihJU09fRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQlFcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSB1cmIgJWRcbiIsIGkpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCXBkZXYtPnNidWZbaV0udXJiID0gdXJiOworCQlUcmFjZShUUkFDRV9NRU1PUlksICJBbGxvY2F0ZWQgVVJCIGF0IDB4JXBcbiIsIHVyYik7CisJfQorCWlmIChyZXQpIHsKKwkJLyogRGUtYWxsb2NhdGUgaW4gcmV2ZXJzZSBvcmRlciAqLworCQl3aGlsZSAoaSA+PSAwKSB7CisJCQlpZiAocGRldi0+c2J1ZltpXS51cmIgIT0gTlVMTCkKKwkJCQl1c2JfZnJlZV91cmIocGRldi0+c2J1ZltpXS51cmIpOworCQkJcGRldi0+c2J1ZltpXS51cmIgPSBOVUxMOworCQkJaS0tOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJLyogaW5pdCBVUkIgc3RydWN0dXJlICovCQorCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgeworCQl1cmIgPSBwZGV2LT5zYnVmW2ldLnVyYjsKKworCQl1cmItPmludGVydmFsID0gMTsgLy8gZGV2aWsKKwkJdXJiLT5kZXYgPSB1ZGV2OworCSAgICAgICAgdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsIHBkZXYtPnZlbmRwb2ludCk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBkZXYtPnNidWZbaV0uZGF0YTsKKwkgICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IElTT19CVUZGRVJfU0laRTsKKwkgICAgICAgIHVyYi0+Y29tcGxldGUgPSBwd2NfaXNvY19oYW5kbGVyOworCSAgICAgICAgdXJiLT5jb250ZXh0ID0gcGRldjsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IDA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBJU09fRlJBTUVTX1BFUl9ERVNDOworCQlmb3IgKGogPSAwOyBqIDwgSVNPX0ZSQU1FU19QRVJfREVTQzsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGogKiBJU09fTUFYX0ZSQU1FX1NJWkU7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IHBkZXYtPnZtYXhfcGFja2V0X3NpemU7CisJCX0KKwl9CisKKwkvKiBsaW5rICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBkZXYtPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkKKwkJCUVycigiaXNvY19pbml0KCkgc3VibWl0X3VyYiAlZCBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgaSwgcmV0KTsKKwkJZWxzZQorCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiVVJCIDB4JXAgc3VibWl0dGVkLlxuIiwgcGRldi0+c2J1ZltpXS51cmIpOworCX0KKworCS8qIEFsbCBpcyBkb25lLi4uICovCisJcGRldi0+aXNvX2luaXQgPSAxOworCVRyYWNlKFRSQUNFX09QRU4sICI8PCBwd2NfaXNvY19pbml0KClcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwd2NfaXNvY19jbGVhbnVwKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpOworCisJVHJhY2UoVFJBQ0VfT1BFTiwgIj4+IHB3Y19pc29jX2NsZWFudXAoKVxuIik7CisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogVW5saW5raW5nIElTT0MgYnVmZmVycyBvbmUgYnkgb25lICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQl1cmIgPSBwZGV2LT5zYnVmW2ldLnVyYjsKKwkJaWYgKHVyYiAhPSAwKSB7CisJCQlpZiAocGRldi0+aXNvX2luaXQpIHsKKwkJCQlUcmFjZShUUkFDRV9NRU1PUlksICJVbmxpbmtpbmcgVVJCICVwXG4iLCB1cmIpOworCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJfQorCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRnJlZWluZyBVUkJcbiIpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlwZGV2LT5zYnVmW2ldLnVyYiA9IE5VTEw7CisJCX0KKwl9CisKKwkvKiBTdG9wIGNhbWVyYSwgYnV0IG9ubHkgaWYgd2UgYXJlIHN1cmUgdGhlIGNhbWVyYSBpcyBzdGlsbCB0aGVyZSAodW5wbHVnCisJICAgaXMgc2lnbmFsbGVkIGJ5IEVQSVBFKSAKKwkgKi8KKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzICYmIHBkZXYtPmVycm9yX3N0YXR1cyAhPSBFUElQRSkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiU2V0dGluZyBhbHRlcm5hdGUgaW50ZXJmYWNlIDAuXG4iKTsKKwkJdXNiX3NldF9pbnRlcmZhY2UocGRldi0+dWRldiwgMCwgMCk7CisJfQorCisJcGRldi0+aXNvX2luaXQgPSAwOworCVRyYWNlKFRSQUNFX09QRU4sICI8PCBwd2NfaXNvY19jbGVhbnVwKClcbiIpOworfQorCitpbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KQoreworCWludCByZXQsIHN0YXJ0OworCisJLyogU3RvcCBpc29jIHN0dWZmICovCisJcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKKwkvKiBSZXNldCBwYXJhbWV0ZXJzICovCisJcHdjX3Jlc2V0X2J1ZmZlcnMocGRldik7CisJLyogVHJ5IHRvIHNldCB2aWRlbyBtb2RlLi4uICovCisJc3RhcnQgPSByZXQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgd2lkdGgsIGhlaWdodCwgbmV3X2ZwcywgbmV3X2NvbXByZXNzaW9uLCBuZXdfc25hcHNob3QpOworCWlmIChyZXQpIHsgCisJICAgICAgICBUcmFjZShUUkFDRV9GTE9XLCAicHdjX3NldF92aWRlb19tb2RlIGF0dGVtcHQgMSBmYWlsZWQuXG4iKTsKKwkJLyogVGhhdCBmYWlsZWQuLi4gcmVzdG9yZSBvbGQgbW9kZSAod2Uga25vdyB0aGF0IHdvcmtlZCkgKi8KKwkJc3RhcnQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcGRldi0+dmlldy54LCBwZGV2LT52aWV3LnksIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgcGRldi0+dnNuYXBzaG90KTsKKwkJaWYgKHN0YXJ0KSB7CisJCSAgICAgICAgVHJhY2UoVFJBQ0VfRkxPVywgInB3Y19zZXRfdmlkZW9fbW9kZSBhdHRlbXB0IDIgZmFpbGVkLlxuIik7CisJCX0KKwl9CisJaWYgKHN0YXJ0ID09IDApCisJeworCQlpZiAocHdjX2lzb2NfaW5pdChwZGV2KSA8IDApCisJCXsKKwkJCUluZm8oIkZhaWxlZCB0byByZXN0YXJ0IElTT0MgdHJhbnNmZXJzIGluIHB3Y190cnlfdmlkZW9fbW9kZS5cbiIpOworCQkJcmV0ID0gLUVBR0FJTjsgLyogbGV0J3MgdHJ5IGFnYWluLCB3aG8ga25vd3MgaWYgaXQgd29ya3MgYSBzZWNvbmQgdGltZSAqLworCQl9CisJfQorCXBkZXYtPmRyb3BfZnJhbWVzKys7IC8qIHRyeSB0byBhdm9pZCBnYXJiYWdlIGR1cmluZyBzd2l0Y2ggKi8KKwlyZXR1cm4gcmV0OyAvKiBSZXR1cm4gb3JpZ2luYWwgZXJyb3IgY29kZSAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBWaWRlbzRMaW51eCBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludCBwd2NfdmlkZW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKworCVRyYWNlKFRSQUNFX09QRU4sICI+PiB2aWRlb19vcGVuIGNhbGxlZCh2ZGV2ID0gMHglcCkuXG4iLCB2ZGV2KTsKKwkKKwlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlCVUcoKTsKKwlpZiAocGRldi0+dm9wZW4pCisJCXJldHVybiAtRUJVU1k7CisJCisJZG93bigmcGRldi0+bW9kbG9jayk7CisJaWYgKCFwZGV2LT51c2JfaW5pdCkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiRG9pbmcgZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbi5cbiIpOworCQlwZGV2LT51c2JfaW5pdCA9IDE7CisJCQorCQlpZiAocHdjX3RyYWNlICYgVFJBQ0VfT1BFTikKKwkJeworCQkJLyogUXVlcnkgc2Vuc29yIHR5cGUgKi8KKwkJCWNvbnN0IGNoYXIgKnNlbnNvcl90eXBlID0gTlVMTDsKKwkJCWludCByZXQ7CisKKwkJCXJldCA9IHB3Y19nZXRfY21vc19zZW5zb3IocGRldiwgJmkpOworCQkJaWYgKHJldCA+PSAwKQorCQkJeworCQkJCXN3aXRjaChpKSB7CisJCQkJY2FzZSAweDAwOiAgc2Vuc29yX3R5cGUgPSAiSHl1bmRhaSBDTU9TIHNlbnNvciI7IGJyZWFrOworCQkJCWNhc2UgMHgyMDogIHNlbnNvcl90eXBlID0gIlNvbnkgQ0NEIHNlbnNvciArIFREQTg3ODciOyBicmVhazsKKwkJCQljYXNlIDB4MkU6ICBzZW5zb3JfdHlwZSA9ICJTb255IENDRCBzZW5zb3IgKyBFeGFzIDk4TDU5IjsgYnJlYWs7CisJCQkJY2FzZSAweDJGOiAgc2Vuc29yX3R5cGUgPSAiU29ueSBDQ0Qgc2Vuc29yICsgQURJIDk4MDQiOyBicmVhazsKKwkJCQljYXNlIDB4MzA6ICBzZW5zb3JfdHlwZSA9ICJTaGFycCBDQ0Qgc2Vuc29yICsgVERBODc4NyI7IGJyZWFrOworCQkJCWNhc2UgMHgzRTogIHNlbnNvcl90eXBlID0gIlNoYXJwIENDRCBzZW5zb3IgKyBFeGFzIDk4TDU5IjsgYnJlYWs7CisJCQkJY2FzZSAweDNGOiAgc2Vuc29yX3R5cGUgPSAiU2hhcnAgQ0NEIHNlbnNvciArIEFESSA5ODA0IjsgYnJlYWs7CisJCQkJY2FzZSAweDQwOiAgc2Vuc29yX3R5cGUgPSAiVVBBIDEwMjEgc2Vuc29yIjsgYnJlYWs7CisJCQkJY2FzZSAweDEwMDogc2Vuc29yX3R5cGUgPSAiVkdBIHNlbnNvciI7IGJyZWFrOworCQkJCWNhc2UgMHgxMDE6IHNlbnNvcl90eXBlID0gIlBBTCBNUiBzZW5zb3IiOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgICBzZW5zb3JfdHlwZSA9ICJ1bmtub3duIHR5cGUgb2Ygc2Vuc29yIjsgYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHNlbnNvcl90eXBlICE9IE5VTEwpCisJCQkJSW5mbygiVGhpcyAlcyBjYW1lcmEgaXMgZXF1aXBwZWQgd2l0aCBhICVzICglZCkuXG4iLCBwZGV2LT52ZGV2LT5uYW1lLCBzZW5zb3JfdHlwZSwgaSk7CisJCX0KKwl9CisKKwkvKiBUdXJuIG9uIGNhbWVyYSAqLworCWlmIChwb3dlcl9zYXZlKSB7CisJCWkgPSBwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDEpOworCQlpZiAoaSA8IDApCisJCQlJbmZvKCJGYWlsZWQgdG8gcmVzdG9yZSBwb3dlciB0byB0aGUgY2FtZXJhISAoJWQpXG4iLCBpKTsKKwl9CisJLyogU2V0IExFRCBvbi9vZmYgdGltZSAqLworCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgbGVkX29uLCBsZWRfb2ZmKSA8IDApCisJCUluZm8oIkZhaWxlZCB0byBzZXQgTEVEIG9uL29mZiB0aW1lLlxuIik7CisJCisJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLworCisJLyogU28gZmFyLCBzbyBnb29kLiBBbGxvY2F0ZSBtZW1vcnkuICovCisJaSA9IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHBkZXYpOworCWlmIChpIDwgMCkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBtZW1vcnkuXG4iKTsKKwkJdXAoJnBkZXYtPm1vZGxvY2spOworCQlyZXR1cm4gaTsKKwl9CisJCisJLyogUmVzZXQgYnVmZmVycyAmIHBhcmFtZXRlcnMgKi8KKwlwd2NfcmVzZXRfYnVmZmVycyhwZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZGVmYXVsdF9tYnVmczsgaSsrKQorCQlwZGV2LT5pbWFnZV91c2VkW2ldID0gMDsKKwlwZGV2LT52ZnJhbWVfY291bnQgPSAwOworCXBkZXYtPnZmcmFtZXNfZHVtcGVkID0gMDsKKwlwZGV2LT52ZnJhbWVzX2Vycm9yID0gMDsKKwlwZGV2LT52aXNvY19lcnJvcnMgPSAwOworCXBkZXYtPmVycm9yX3N0YXR1cyA9IDA7CisjaWYgUFdDX0RFQlVHCisJcGRldi0+c2VxdWVuY2UgPSAwOworI2VuZGlmCisJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLworCisJLyogU2V0IHNvbWUgZGVmYXVsdHMgKi8KKwlwZGV2LT52c25hcHNob3QgPSAwOworCisJLyogU3RhcnQgaXNvIHBpcGUgZm9yIHZpZGVvOyBmaXJzdCB0cnkgdGhlIGxhc3QgdXNlZCB2aWRlbyBzaXplCisJICAgKG9yIHRoZSBkZWZhdWx0IG9uZSk7IGlmIHRoYXQgZmFpbHMgdHJ5IFFDSUYvMTAgb3IgUVNJRi8xMDsKKwkgICBpdCB0aGF0IGZhaWxzIHRvbywgZ2l2ZSB1cC4KKwkgKi8KKwlpID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHB3Y19pbWFnZV9zaXplc1twZGV2LT52c2l6ZV0ueCwgcHdjX2ltYWdlX3NpemVzW3BkZXYtPnZzaXplXS55LCBwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sIDApOworCWlmIChpKQl7CisJCVRyYWNlKFRSQUNFX09QRU4sICJGaXJzdCBhdHRlbXB0IGF0IHNldF92aWRlb19tb2RlIGZhaWxlZC5cbiIpOworCQlpZiAocGRldi0+dHlwZSA9PSA3MzAgfHwgcGRldi0+dHlwZSA9PSA3NDAgfHwgcGRldi0+dHlwZSA9PSA3NTApCisJCQlpID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHB3Y19pbWFnZV9zaXplc1tQU1pfUVNJRl0ueCwgcHdjX2ltYWdlX3NpemVzW1BTWl9RU0lGXS55LCAxMCwgcGRldi0+dmNvbXByZXNzaW9uLCAwKTsKKwkJZWxzZQorCQkJaSA9IHB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LCBwd2NfaW1hZ2Vfc2l6ZXNbUFNaX1FDSUZdLngsIHB3Y19pbWFnZV9zaXplc1tQU1pfUUNJRl0ueSwgMTAsIHBkZXYtPnZjb21wcmVzc2lvbiwgMCk7CisJfQorCWlmIChpKSB7CisJCVRyYWNlKFRSQUNFX09QRU4sICJTZWNvbmQgYXR0ZW1wdCBhdCBzZXRfdmlkZW9fbW9kZSBmYWlsZWQuXG4iKTsKKwkJdXAoJnBkZXYtPm1vZGxvY2spOworCQlyZXR1cm4gaTsKKwl9CisJCisJaSA9IHB3Y19pc29jX2luaXQocGRldik7CisJaWYgKGkpIHsKKwkJVHJhY2UoVFJBQ0VfT1BFTiwgIkZhaWxlZCB0byBpbml0IElTT0Mgc3R1ZmYgPSAlZC5cbiIsIGkpOworCQl1cCgmcGRldi0+bW9kbG9jayk7CisJCXJldHVybiBpOworCX0KKworCXBkZXYtPnZvcGVuKys7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdmRldjsKKwl1cCgmcGRldi0+bW9kbG9jayk7CisJVHJhY2UoVFJBQ0VfT1BFTiwgIjw8IHZpZGVvX29wZW4oKSByZXR1cm5zIDAuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyogTm90ZSB0aGF0IGFsbCBjbGVhbnVwIGlzIGRvbmUgaW4gdGhlIHJldmVyc2Ugb3JkZXIgYXMgaW4gX29wZW4gKi8KK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJaW50IGk7CisKKwlUcmFjZShUUkFDRV9PUEVOLCAiPj4gdmlkZW9fY2xvc2UgY2FsbGVkKHZkZXYgPSAweCVwKS5cbiIsIHZkZXYpOworCisJcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXZkZXYtPnByaXY7CisJaWYgKHBkZXYtPnZvcGVuID09IDApCisJCUluZm8oInZpZGVvX2Nsb3NlKCkgY2FsbGVkIG9uIGNsb3NlZCBkZXZpY2U/XG4iKTsKKworCS8qIER1bXAgc3RhdGlzdGljcywgYnV0IG9ubHkgaWYgYSByZWFzb25hYmxlIGFtb3VudCBvZiBmcmFtZXMgd2VyZQorCSAgIHByb2Nlc3NlZCAodG8gcHJldmVudCBlbmRsZXNzIGxvZy1lbnRyaWVzIGluIGNhc2Ugb2Ygc25hcC1zaG90CisJICAgcHJvZ3JhbXMpCisJICovCisJaWYgKHBkZXYtPnZmcmFtZV9jb3VudCA+IDIwKQorCQlJbmZvKCJDbG9zaW5nIHZpZGVvIGRldmljZTogJWQgZnJhbWVzIHJlY2VpdmVkLCBkdW1wZWQgJWQgZnJhbWVzLCAlZCBmcmFtZXMgd2l0aCBlcnJvcnMuXG4iLCBwZGV2LT52ZnJhbWVfY291bnQsIHBkZXYtPnZmcmFtZXNfZHVtcGVkLCBwZGV2LT52ZnJhbWVzX2Vycm9yKTsKKworCXN3aXRjaCAocGRldi0+dHlwZSkKKwkgeworCSAgY2FzZSA2NzU6CisJICBjYXNlIDY4MDoKKwkgIGNhc2UgNjkwOgorCSAgY2FzZSA3MjA6CisJICBjYXNlIDczMDoKKwkgIGNhc2UgNzQwOgorCSAgY2FzZSA3NTA6CisJICAgIHB3Y19kZWMyM19leGl0KCk7CS8qIFRpbW9uICYgS2lhcmEgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDY0NToKKwkgIGNhc2UgNjQ2OgorCSAgICBwd2NfZGVjMV9leGl0KCk7CisJICAgIGJyZWFrOworCSB9CisKKwlwd2NfaXNvY19jbGVhbnVwKHBkZXYpOworCXB3Y19mcmVlX2J1ZmZlcnMocGRldik7CisKKwkvKiBUdXJuIG9mZiBMRURTIGFuZCBwb3dlciBkb3duIGNhbWVyYSwgYnV0IG9ubHkgd2hlbiBub3QgdW5wbHVnZ2VkICovCisJaWYgKHBkZXYtPmVycm9yX3N0YXR1cyAhPSBFUElQRSkgeworCQkvKiBUdXJuIExFRHMgb2ZmICovCisJCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgMCwgMCkgPCAwKQorCQkJSW5mbygiRmFpbGVkIHRvIHNldCBMRUQgb24vb2ZmIHRpbWUuXG4iKTsKKwkJaWYgKHBvd2VyX3NhdmUpIHsKKwkJCWkgPSBwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDApOworCQkJaWYgKGkgPCAwKQorCQkJCUVycigiRmFpbGVkIHRvIHBvd2VyIGRvd24gY2FtZXJhICglZClcbiIsIGkpOworCQl9CisJfQorCXBkZXYtPnZvcGVuID0gMDsKKwlUcmFjZShUUkFDRV9PUEVOLCAiPDwgdmlkZW9fY2xvc2UoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglGSVhNRTogd2hhdCBhYm91dCB0d28gcGFyYWxsZWwgcmVhZHMgPz8/PworICogICAgICBBTlNXRVI6IE5vdCBzdXBwb3J0ZWQuIFlvdSBjYW4ndCBvcGVuIHRoZSBkZXZpY2UgbW9yZSB0aGFuIG9uY2UsCisgICAgICAgICAgICAgICAgZGVzcGl0ZSB3aGF0IHRoZSBWNEwxIGludGVyZmFjZSBzYXlzLiBGaXJzdCwgSSBkb24ndCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgbmVlZCwgc2Vjb25kIHRoZXJlJ3Mgbm8gbWVjaGFuaXNtIG9mIGFsZXJ0aW5nIHRoZQorICAgICAgICAgICAgICAgIDJuZC8zcmQvLi4uIHByb2Nlc3Mgb2YgZXZlbnRzIGxpa2UgY2hhbmdpbmcgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgICAgICAgICBBbmQgSSBkb24ndCBzZWUgdGhlIHBvaW50IG9mIGJsb2NraW5nIHRoYXQgZm9yIHRoZQorICAgICAgICAgICAgICAgIDJuZC8zcmQvLi4uIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzIHJlYWRpbmcgcGFyYWxsZWwgZnJvbSBhbnkKKyAgICAgICAgICAgICAgICBkZXZpY2UgaXMgdHJpY2t5IGFueWhvdy4KKyAqLworCitzdGF0aWMgc3NpemVfdCBwd2NfdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKyAgICAgICAgaW50IGJ5dGVzX3RvX3JlYWQ7CisKKwlUcmFjZShUUkFDRV9SRUFELCAidmlkZW9fcmVhZCgweCVwLCAlcCwgJVpkKSBjYWxsZWQuXG4iLCB2ZGV2LCBidWYsIGNvdW50KTsKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKQorCQlyZXR1cm4gLXBkZXYtPmVycm9yX3N0YXR1czsgLyogU29tZXRoaW5nIGhhcHBlbmVkLCByZXBvcnQgd2hhdC4gKi8KKworCS8qIEluIGNhc2Ugd2UncmUgZG9pbmcgcGFydGlhbCByZWFkcywgd2UgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBhIGZyYW1lICovCisJaWYgKHBkZXYtPmltYWdlX3JlYWRfcG9zID09IDApIHsKKwkJLyogRG8gd2FpdCBxdWV1ZWluZyBhY2NvcmRpbmcgdG8gdGhlIChkb2MpYm9vayAqLworCQlhZGRfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCXdoaWxlIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQkvKiBDaGVjayBmb3IgdW5wbHVnZ2VkL2V0Yy4gaGVyZSAqLworCQkJaWYgKHBkZXYtPmVycm9yX3N0YXR1cykgeworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzIDsKKwkJCX0KKwkgICAgICAgICAgICAgICAgaWYgKG5vYmxvY2spIHsKKwkgICAgICAgICAgICAgICAgCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkgICAgICAgICAgICAgICAgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJICAgICAgICAgICAgICAgIAlyZXR1cm4gLUVXT1VMREJMT0NLOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCSAgICAgICAgICAgICAgICAJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCSAgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkgICAgICAgICAgICAgICAgCXJldHVybiAtRVJFU1RBUlRTWVM7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKKwkgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJfQorCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQkvKiBEZWNvbXByZXNzIGFuZCByZWxlYXNlIGZyYW1lICovCisJCWlmIChwd2NfaGFuZGxlX2ZyYW1lKHBkZXYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJVHJhY2UoVFJBQ0VfUkVBRCwgIkNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLlxuIik7CisJaWYgKHBkZXYtPnZwYWxldHRlID09IFZJREVPX1BBTEVUVEVfUkFXKQorCQlieXRlc190b19yZWFkID0gcGRldi0+ZnJhbWVfc2l6ZTsKKwllbHNlCisgCQlieXRlc190b19yZWFkID0gcGRldi0+dmlldy5zaXplOworCisJLyogY29weSBieXRlcyB0byB1c2VyIHNwYWNlOyB3ZSBhbGxvdyBmb3IgcGFydGlhbCByZWFkcyAqLworCWlmIChjb3VudCArIHBkZXYtPmltYWdlX3JlYWRfcG9zID4gYnl0ZXNfdG9fcmVhZCkKKwkJY291bnQgPSBieXRlc190b19yZWFkIC0gcGRldi0+aW1hZ2VfcmVhZF9wb3M7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHBkZXYtPmltYWdlX3B0cltwZGV2LT5maWxsX2ltYWdlXSArIHBkZXYtPmltYWdlX3JlYWRfcG9zLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCXBkZXYtPmltYWdlX3JlYWRfcG9zICs9IGNvdW50OworCWlmIChwZGV2LT5pbWFnZV9yZWFkX3BvcyA+PSBieXRlc190b19yZWFkKSB7IC8qIEFsbCBkYXRhIGhhcyBiZWVuIHJlYWQgKi8KKwkJcGRldi0+aW1hZ2VfcmVhZF9wb3MgPSAwOworCQlwd2NfbmV4dF9pbWFnZShwZGV2KTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHB3Y192aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXBvbGxfd2FpdChmaWxlLCAmcGRldi0+ZnJhbWVxLCB3YWl0KTsKKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKQorCQlyZXR1cm4gUE9MTEVSUjsKKwlpZiAocGRldi0+ZnVsbF9mcmFtZXMgIT0gTlVMTCkgLyogd2UgaGF2ZSBmcmFtZXMgd2FpdGluZyAqLworCQlyZXR1cm4gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAodmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN3aXRjaCAoY21kKSB7CisJCS8qIFF1ZXJ5IGNhYmFwaWxpdGllcyAqLworCQljYXNlIFZJRElPQ0dDQVA6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpjYXBzID0gYXJnOworCisJCQlzdHJjcHkoY2Fwcy0+bmFtZSwgdmRldi0+bmFtZSk7CisJCQljYXBzLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJCWNhcHMtPmNoYW5uZWxzID0gMTsKKwkJCWNhcHMtPmF1ZGlvcyA9IDE7CisJCQljYXBzLT5taW53aWR0aCAgPSBwZGV2LT52aWV3X21pbi54OworCQkJY2Fwcy0+bWluaGVpZ2h0ID0gcGRldi0+dmlld19taW4ueTsKKwkJCWNhcHMtPm1heHdpZHRoICA9IHBkZXYtPnZpZXdfbWF4Lng7CisJCQljYXBzLT5tYXhoZWlnaHQgPSBwZGV2LT52aWV3X21heC55OworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGFubmVsIGZ1bmN0aW9ucyAoc2ltdWxhdGUgMSBjaGFubmVsKSAqLworCQljYXNlIFZJRElPQ0dDSEFOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXYtPmZsYWdzID0gMDsKKwkJCXYtPnR1bmVycyA9IDA7CisJCQl2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCQlzdHJjcHkodi0+bmFtZSwgIldlYmNhbSIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQljYXNlIFZJRElPQ1NDSEFOOgorCQl7CisJCQkvKiBUaGUgc3BlYyBzYXlzIHRoZSBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyLCBidXQKKwkJCSAgIHRoZSBidHR2IGRyaXZlciB1c2VzIGEgdmlkZW9fY2hhbm5lbCBhcmcsIHdoaWNoCisJCQkgICBtYWtlcyBzZW5zZSBiZWNhc3VlIGl0IGFsc28gaGFzIHRoZSBub3JtIGZsYWcuCisJCQkgKi8KKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAwOworCQl9CisKKworCQkvKiBQaWN0dXJlIGZ1bmN0aW9uczsgY29udHJhc3QgZXRjLiAqLworCQljYXNlIFZJRElPQ0dQSUNUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKwkJCWludCB2YWw7CisKKwkJCXZhbCA9IHB3Y19nZXRfYnJpZ2h0bmVzcyhwZGV2KTsKKwkJCWlmICh2YWwgPj0gMCkKKwkJCQlwLT5icmlnaHRuZXNzID0gdmFsOworCQkJZWxzZQorCQkJCXAtPmJyaWdodG5lc3MgPSAweGZmZmY7CisJCQl2YWwgPSBwd2NfZ2V0X2NvbnRyYXN0KHBkZXYpOworCQkJaWYgKHZhbCA+PSAwKQorCQkJCXAtPmNvbnRyYXN0ID0gdmFsOworCQkJZWxzZQorCQkJCXAtPmNvbnRyYXN0ID0gMHhmZmZmOworCQkJLyogR2FtbWEsIFdoaXRlbmVzcywgd2hhdCdzIHRoZSBkaWZmZXJlbmNlPyA6KSAqLworCQkJdmFsID0gcHdjX2dldF9nYW1tYShwZGV2KTsKKwkJCWlmICh2YWwgPj0gMCkKKwkJCQlwLT53aGl0ZW5lc3MgPSB2YWw7CisJCQllbHNlCisJCQkJcC0+d2hpdGVuZXNzID0gMHhmZmZmOworCQkJdmFsID0gcHdjX2dldF9zYXR1cmF0aW9uKHBkZXYpOworCQkJaWYgKHZhbCA+PSAwKQorCQkJCXAtPmNvbG91ciA9IHZhbDsKKwkJCWVsc2UKKwkJCQlwLT5jb2xvdXIgPSAweGZmZmY7CisJCQlwLT5kZXB0aCA9IDI0OworCQkJcC0+cGFsZXR0ZSA9IHBkZXYtPnZwYWxldHRlOworCQkJcC0+aHVlID0gMHhGRkZGOyAvKiBOL0EgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBWSURJT0NTUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7CisJCQkvKgorCQkJICoJRklYTUU6CVN1cHBvc2Ugd2UgYXJlIG1pZCByZWFkCisJCQkgICAgICAgIEFOU1dFUjogTm8gcHJvYmxlbTogdGhlIGZpcm13YXJlIG9mIHRoZSBjYW1lcmEKKwkJCSAgICAgICAgICAgICAgICBjYW4gaGFuZGxlIGJyaWdodG5lc3MvY29udHJhc3QvZXRjCisJCQkgICAgICAgICAgICAgICAgY2hhbmdlcyBhdCBfYW55XyB0aW1lLCBhbmQgdGhlIHBhbGV0dGUKKwkJCSAgICAgICAgICAgICAgICBpcyB1c2VkIGV4YWN0bHkgb25jZSBpbiB0aGUgdW5jb21wcmVzcworCQkJICAgICAgICAgICAgICAgIHJvdXRpbmUuCisJCQkgKi8KKwkJCXB3Y19zZXRfYnJpZ2h0bmVzcyhwZGV2LCBwLT5icmlnaHRuZXNzKTsKKwkJCXB3Y19zZXRfY29udHJhc3QocGRldiwgcC0+Y29udHJhc3QpOworCQkJcHdjX3NldF9nYW1tYShwZGV2LCBwLT53aGl0ZW5lc3MpOworCQkJcHdjX3NldF9zYXR1cmF0aW9uKHBkZXYsIHAtPmNvbG91cik7CisJCQlpZiAocC0+cGFsZXR0ZSAmJiBwLT5wYWxldHRlICE9IHBkZXYtPnZwYWxldHRlKSB7CisJCQkJc3dpdGNoIChwLT5wYWxldHRlKSB7CisJCQkJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOgorCQkJCQljYXNlIFZJREVPX1BBTEVUVEVfUkFXOgorCQkJCQkJcGRldi0+dnBhbGV0dGUgPSBwLT5wYWxldHRlOworCQkJCQkJcmV0dXJuIHB3Y190cnlfdmlkZW9fbW9kZShwZGV2LCBwZGV2LT5pbWFnZS54LCBwZGV2LT5pbWFnZS55LCBwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sIHBkZXYtPnZzbmFwc2hvdCk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQkvKiBXaW5kb3cvc2l6ZSBwYXJhbWV0ZXJzICovCQkKKwkJY2FzZSBWSURJT0NHV0lOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKwkJCQorCQkJdnctPnggPSAwOworCQkJdnctPnkgPSAwOworCQkJdnctPndpZHRoID0gcGRldi0+dmlldy54OworCQkJdnctPmhlaWdodCA9IHBkZXYtPnZpZXcueTsKKwkJCXZ3LT5jaHJvbWFrZXkgPSAwOworCQkJdnctPmZsYWdzID0gKHBkZXYtPnZmcmFtZXMgPDwgUFdDX0ZQU19TSElGVCkgfCAKKwkJCSAgICAgICAgICAgKHBkZXYtPnZzbmFwc2hvdCA/IFBXQ19GUFNfU05BUFNIT1QgOiAwKTsKKwkJCWJyZWFrOworCQl9CisJCQorCQljYXNlIFZJRElPQ1NXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCQkJaW50IGZwcywgc25hcHNob3QsIHJldDsKKworCQkJZnBzID0gKHZ3LT5mbGFncyAmIFBXQ19GUFNfRlJNQVNLKSA+PiBQV0NfRlBTX1NISUZUOworCQkJc25hcHNob3QgPSB2dy0+ZmxhZ3MgJiBQV0NfRlBTX1NOQVBTSE9UOworCQkJaWYgKGZwcyA9PSAwKQorCQkJCWZwcyA9IHBkZXYtPnZmcmFtZXM7CisJCQlpZiAocGRldi0+dmlldy54ID09IHZ3LT53aWR0aCAmJiBwZGV2LT52aWV3LnkgJiYgZnBzID09IHBkZXYtPnZmcmFtZXMgJiYgc25hcHNob3QgPT0gcGRldi0+dnNuYXBzaG90KQorCQkJCXJldHVybiAwOworCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHZ3LT53aWR0aCwgdnctPmhlaWdodCwgZnBzLCBwZGV2LT52Y29tcHJlc3Npb24sIHNuYXBzaG90KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOwkJCisJCX0KKwkJCisJCS8qIFdlIGRvbid0IGhhdmUgb3ZlcmxheSBzdXBwb3J0ICh5ZXQpICovCisJCWNhc2UgVklESU9DR0ZCVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCQltZW1zZXQodmIsMCxzaXplb2YoKnZiKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIG1tYXAoKSBmdW5jdGlvbnMgKi8KKwkJY2FzZSBWSURJT0NHTUJVRjoKKwkJeworCQkJLyogVGVsbCB0aGUgdXNlciBwcm9ncmFtIGhvdyBtdWNoIG1lbW9yeSBpcyBuZWVkZWQgZm9yIGEgbW1hcCgpICovCisJCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm0gPSBhcmc7CisJCQlpbnQgaTsKKworCQkJbWVtc2V0KHZtLCAwLCBzaXplb2YoKnZtKSk7CisJCQl2bS0+c2l6ZSA9IGRlZmF1bHRfbWJ1ZnMgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOworCQkJdm0tPmZyYW1lcyA9IGRlZmF1bHRfbWJ1ZnM7IC8qIGRvdWJsZSBidWZmZXJpbmcgc2hvdWxkIGJlIGVub3VnaCBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X21idWZzOyBpKyspCisJCQkJdm0tPm9mZnNldHNbaV0gPSBpICogcGRldi0+bGVuX3Blcl9pbWFnZTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwkJeworCQkJLyogU3RhcnQgY2FwdHVyZSBpbnRvIGEgZ2l2ZW4gaW1hZ2UgYnVmZmVyIChjYWxsZWQgJ2ZyYW1lJyBpbiB2aWRlb19tbWFwIHN0cnVjdHVyZSkgKi8KKwkJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQkJVHJhY2UoVFJBQ0VfUkVBRCwgIlZJRElPQ01DQVBUVVJFOiAlZHglZCwgZnJhbWUgJWQsIGZvcm1hdCAlZFxuIiwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LCB2bS0+ZnJhbWUsIHZtLT5mb3JtYXQpOworCQkJaWYgKHZtLT5mcmFtZSA8IDAgfHwgdm0tPmZyYW1lID49IGRlZmF1bHRfbWJ1ZnMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIHhhd3R2IGlzIG5hc3R5LiBJdCBwcm9iZXMgdGhlIGF2YWlsYWJsZSBwYWxldHRlcworCQkJICAgYnkgc2V0dGluZyBhIHZlcnkgc21hbGwgaW1hZ2Ugc2l6ZSBhbmQgdHJ5aW5nCisJCQkgICB2YXJpb3VzIHBhbGV0dGVzLi4uIFRoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0CisJCQkgICBzdWNoIHNtYWxsIGltYWdlcywgc28gSSdtIHdvcmtpbmcgYXJvdW5kIGl0LgorCQkJICovCisJCQlpZiAodm0tPmZvcm1hdCkKKwkJCXsKKwkJCQlzd2l0Y2ggKHZtLT5mb3JtYXQpCisJCQkJeworCQkJCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDoKKwkJCQkJY2FzZSBWSURFT19QQUxFVFRFX1JBVzoKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgodm0tPndpZHRoICE9IHBkZXYtPnZpZXcueCB8fCB2bS0+aGVpZ2h0ICE9IHBkZXYtPnZpZXcueSkgJiYKKwkJCSAgICAodm0tPndpZHRoID49IHBkZXYtPnZpZXdfbWluLnggJiYgdm0tPmhlaWdodCA+PSBwZGV2LT52aWV3X21pbi55KSkgeworCQkJCWludCByZXQ7CisKKwkJCQlUcmFjZShUUkFDRV9PUEVOLCAiVklESU9DTUNBUFRVUkU6IGNoYW5naW5nIHNpemUgdG8gcGxlYXNlIHhhd3R2IDotKC5cbiIpOworCQkJCXJldCA9IHB3Y190cnlfdmlkZW9fbW9kZShwZGV2LCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQsIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgcGRldi0+dnNuYXBzaG90KTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCQkJfSAvKiAuLi4gc2l6ZSBtaXNtYXRjaCAqLworCisJCQkvKiBGSVhNRTogc2hvdWxkIHdlIGxvY2sgaGVyZT8gKi8KKwkJCWlmIChwZGV2LT5pbWFnZV91c2VkW3ZtLT5mcmFtZV0pCisJCQkJcmV0dXJuIC1FQlVTWTsJLyogYnVmZmVyIHdhc24ndCBhdmFpbGFibGUuIEJ1bW1lciAqLworCQkJcGRldi0+aW1hZ2VfdXNlZFt2bS0+ZnJhbWVdID0gMTsKKworCQkJLyogT2theSwgd2UncmUgZG9uZSBoZXJlLiBJbiB0aGUgU1lOQyBjYWxsIHdlIHdhaXQgdW50aWwgYSAKKwkJCSAgIGZyYW1lIGNvbWVzIGF2YWlsYWJsZSwgdGhlbiBleHBhbmQgaW1hZ2UgaW50byB0aGUgZ2l2ZW4gCisJCQkgICBidWZmZXIuCisJCQkgICBJbiBjb250cmFzdCB0byB0aGUgQ1BpQSBjYW0gdGhlIFBoaWxpcHMgY2FtcyBkZWxpdmVyIGEKKwkJCSAgIGNvbnN0YW50IHN0cmVhbSwgYWxtb3N0IGxpa2UgYSBncmFiYmVyIGNhcmQuIEFsc28sCisJCQkgICB3ZSBoYXZlIHNlcGFyYXRlIGJ1ZmZlcnMgZm9yIHRoZSByYXdkYXRhIGFuZCB0aGUgaW1hZ2UsCisJCQkgICBtZWFuaW5nIHdlIGNhbiBuZWFybHkgYWx3YXlzIGV4cGFuZCBpbnRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyLgorCQkJICovCisJCQlUcmFjZShUUkFDRV9SRUFELCAiVklESU9DTUNBUFRVUkUgZG9uZS5cbiIpOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFZJRElPQ1NZTkM6CisJCXsKKwkJCS8qIFRoZSBkb2Mgc2F5czogIldoZW5ldmVyIGEgYnVmZmVyIGlzIHVzZWQgaXQgc2hvdWxkCisJCQkgICBjYWxsIFZJRElPQ1NZTkMgdG8gZnJlZSB0aGlzIGZyYW1lIHVwIGFuZCBjb250aW51ZS4iCisJCQkgICAKKwkJCSAgIFRoZSBvbmx5IG9kZCB0aGluZyBhYm91dCB0aGlzIHdob2xlIHByb2NlZHVyZSBpcyAKKwkJCSAgIHRoYXQgTUNBUFRVUkUgZmxhZ3MgdGhlIGJ1ZmZlciBhcyAiaW4gdXNlIiwgYW5kCisJCQkgICBTWU5DIGltbWVkaWF0ZWx5IHVubWFya3MgaXQsIHdoaWxlIGl0IGlzbid0IAorCQkJICAgYWZ0ZXIgU1lOQyB0aGF0IHlvdSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBhY3R1YWxseQorCQkJICAgZ290IGZpbGxlZCEgU28geW91IGJldHRlciBub3Qgc3RhcnQgYSBDQVBUVVJFIGluCisJCQkgICB0aGUgc2FtZSBmcmFtZSBpbW1lZGlhdGVseSAodXNlIGRvdWJsZSBidWZmZXJpbmcpLiAKKwkJCSAgIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBmb3IgdGhpcyBjYW0sIHNpbmNlIGl0IGhhcyAKKwkJCSAgIGV4dHJhIGludGVybWVkaWF0ZSBidWZmZXJzLCBidXQgYSBoYXJkd2FyZSAKKwkJCSAgIGdyYWJiZXIgY2FyZCB3aWxsIHRoZW4gb3ZlcndyaXRlIHRoZSBidWZmZXIgCisJCQkgICB5b3UncmUgd29ya2luZyBvbi4KKwkJCSAqLworCQkJaW50ICptYnVmID0gYXJnOworCQkJaW50IHJldDsKKworCQkJVHJhY2UoVFJBQ0VfUkVBRCwgIlZJRElPQ1NZTkMgY2FsbGVkICglZCkuXG4iLCAqbWJ1Zik7CisKKwkJCS8qIGJvdW5kcyBjaGVjayAqLworCQkJaWYgKCptYnVmIDwgMCB8fCAqbWJ1ZiA+PSBkZWZhdWx0X21idWZzKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJLyogY2hlY2sgaWYgdGhpcyBidWZmZXIgd2FzIHJlcXVlc3RlZCBhbnl3YXkgKi8KKwkJCWlmIChwZGV2LT5pbWFnZV91c2VkWyptYnVmXSA9PSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkvKiBBZGQgb3Vyc2VsdmVzIHRvIHRoZSBmcmFtZSB3YWl0LXF1ZXVlLgorCQkJICAgCisJCQkgICBGSVhNRTogbmVlZHMgYXVkaXRpbmcgZm9yIHNhZmV0eS4KKwkJCSAgIFFVRVNUSU9OOiBJbiB3aGF0IHJlc3BlY3Q/IEkgdGhpbmsgdGhhdCB1c2luZyB0aGUKKwkJCSAgICAgICAgICAgICBmcmFtZXEgaXMgc2FmZSBub3cuCisJCQkgKi8KKwkJCWFkZF93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJCXdoaWxlIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CisJCQkJaWYgKHBkZXYtPmVycm9yX3N0YXR1cykgeworCQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzOworCQkJCX0KKwkJCQorCSAgICAgICAgICAgICAgICAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJICAgICAgICAgICAgICAgIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkgICAgICAgICAgICAgICAgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCSAgICAgICAgICAgICAgICAJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkgICAgICAgIAkgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgCXNjaGVkdWxlKCk7CisJCSAgICAgICAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJfQorCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQkKKwkJCS8qIFRoZSBmcmFtZSBpcyByZWFkeS4gRXhwYW5kIGluIHRoZSBpbWFnZSBidWZmZXIgCisJCQkgICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIEkgZG9uJ3QgY2FyZSBpZiB5b3UgCisJCQkgICBtbWFwKCkgNSBidWZmZXJzIGFuZCByZXF1ZXN0IGRhdGEgaW4gdGhpcyBvcmRlcjogCisJCQkgICBidWZmZXIgNCAyIDMgMCAxIDIgMyAwIDQgMyAxIC4gLiAuCisJCQkgICBHcmFiYmVyIGhhcmR3YXJlIG1heSBub3QgYmUgc28gZm9yZ2l2aW5nLgorCQkJICovCisJCQlUcmFjZShUUkFDRV9SRUFELCAiVklESU9DU1lOQzogZnJhbWUgcmVhZHkuXG4iKTsKKwkJCXBkZXYtPmZpbGxfaW1hZ2UgPSAqbWJ1ZjsgLyogdGVsbCBpbiB3aGljaCBidWZmZXIgd2Ugd2FudCB0aGUgaW1hZ2UgdG8gYmUgZXhwYW5kZWQgKi8KKwkJCS8qIERlY29tcHJlc3MsIGV0YyAqLworCQkJcmV0ID0gcHdjX2hhbmRsZV9mcmFtZShwZGV2KTsKKwkJCXBkZXYtPmltYWdlX3VzZWRbKm1idWZdID0gMDsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQkKKwkJY2FzZSBWSURJT0NHQVVESU86CisJCXsKKwkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKKwkJCQorCQkJc3RyY3B5KHYtPm5hbWUsICJNaWNyb3Bob25lIik7CisJCQl2LT5hdWRpbyA9IC0xOyAvKiB1bmtub3duIGF1ZGlvIG1pbm9yICovCisJCQl2LT5mbGFncyA9IDA7CisJCQl2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKKwkJCXYtPnZvbHVtZSA9IDA7CisJCQl2LT5iYXNzID0gMDsKKwkJCXYtPnRyZWJsZSA9IDA7CisJCQl2LT5iYWxhbmNlID0gMHg4MDAwOworCQkJdi0+c3RlcCA9IDE7CisJCQlicmVhazsJCisJCX0KKwkJCisJCWNhc2UgVklESU9DU0FVRElPOgorCQl7CisJCQkvKiBEdW1teTogbm90aGluZyBjYW4gYmUgc2V0ICovCisJCQlicmVhazsKKwkJfQorCQkKKwkJY2FzZSBWSURJT0NHVU5JVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3VuaXQgKnZ1ID0gYXJnOworCQkJCisJCQl2dS0+dmlkZW8gPSBwZGV2LT52ZGV2LT5taW5vciAmIDB4M0Y7CisJCQl2dS0+YXVkaW8gPSAtMTsgLyogbm90IGtub3duIHlldCAqLworCQkJdnUtPnZiaSA9IC0xOworCQkJdnUtPnJhZGlvID0gLTE7CisJCQl2dS0+dGVsZXRleHQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gcHdjX2lvY3RsKHBkZXYsIGNtZCwgYXJnKTsKKwl9IC8qIC4uc3dpdGNoICovCisJcmV0dXJuIDA7Cit9CQorCitzdGF0aWMgaW50IHB3Y192aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHB3Y192aWRlb19kb19pb2N0bCk7Cit9CisKKworc3RhdGljIGludCBwd2NfdmlkZW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemUgID0gdm1hLT52bV9lbmQtdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKwkKKwlUcmFjZShUUkFDRV9NRU1PUlksICJtbWFwKDB4JXAsIDB4JWx4LCAlbHUpIGNhbGxlZC5cbiIsIHZkZXYsIHN0YXJ0LCBzaXplKTsKKwlwZGV2ID0gdmRldi0+cHJpdjsKKwkKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpcGRldi0+aW1hZ2VfZGF0YTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVU0IgZnVuY3Rpb25zICovCisKKy8qIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiBhIG5ldyBkZXZpY2UgaXMgcGx1Z2dlZCBpbiBvciB0aGUgdXNiIGNvcmUKKyAqIGlzIGxvYWRlZC4KKyAqLworCitzdGF0aWMgaW50IHVzYl9wd2NfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSBOVUxMOworCWludCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQsIHR5cGVfaWQ7CisJaW50IGksIGhpbnQ7CisJaW50IGZlYXR1cmVzID0gMDsKKwlpbnQgdmlkZW9fbnIgPSAtMTsgLyogZGVmYXVsdDogdXNlIG5leHQgYXZhaWxhYmxlIGRldmljZSAqLworCWNoYXIgc2VyaWFsX251bWJlclszMF0sICpuYW1lOworCisJLyogQ2hlY2sgaWYgd2UgY2FuIGhhbmRsZSB0aGlzIGRldmljZSAqLworCVRyYWNlKFRSQUNFX1BST0JFLCAicHJvYmUoKSBjYWxsZWQgWyUwNFggJTA0WF0sIGlmICVkXG4iLCAKKwkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCS8qIHRoZSBpbnRlcmZhY2VzIGFyZSBwcm9iZWQgb25lIGJ5IG9uZS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUKKwkgICB2aWRlbyBpbnRlcmZhY2UgKDApIG5vdy4KKwkgICBJbnRlcmZhY2UgMSBpcyB0aGUgQXVkaW8gQ29udHJvbCwgYW5kIGludGVyZmFjZSAyIEF1ZGlvIGl0c2VsZi4KKwkgKi8KKwlpZiAoaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID4gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2ZW5kb3JfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlwcm9kdWN0X2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJaWYgKHZlbmRvcl9pZCA9PSAweDA0NzEpIHsKKwkJc3dpdGNoIChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHgwMzAyOgorCQkJSW5mbygiUGhpbGlwcyBQQ0E2NDVWQyBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjQ1IHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjQ1OworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzAzOgorCQkJSW5mbygiUGhpbGlwcyBQQ0E2NDZWQyBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjQ2IHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjQ2OworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzA0OgorCQkJSW5mbygiQXNrZXkgVkMwMTAgdHlwZSAyIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQXNrZXkgVkMwMTAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2NDY7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMDc6CisJCQlJbmZvKCJQaGlsaXBzIFBDVkM2NzVLIChWZXN0YSkgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJQaGlsaXBzIDY3NSB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDY3NTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDMwODoKKwkJCUluZm8oIlBoaWxpcHMgUENWQzY4MEsgKFZlc3RhIFBybykgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJQaGlsaXBzIDY4MCB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDY4MDsKKwkJCWJyZWFrOworCQljYXNlIDB4MDMwQzoKKwkJCUluZm8oIlBoaWxpcHMgUENWQzY5MEsgKFZlc3RhIFBybyBTY2FuKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjkwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjkwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzEwOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzMwSyAoVG9VQ2FtIEZ1bikvUENWQzgzMCAoVG9VQ2FtIElJKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzMwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzMwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzExOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzQwSyAoVG9VQ2FtIFBybykvUENWQzg0MCAoVG9VQ2FtIElJKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzQwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzQwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzEyOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzUwSyAoVG9VQ2FtIFBybyBTY2FuKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzUwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzUwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzEzOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNzIwSy80MCAoVG9VQ2FtIFhTKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNzIwSy80MCB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDcyMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICh2ZW5kb3JfaWQgPT0gMHgwNjlBKSB7CisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHgwMDAxOgorCQkJSW5mbygiQXNrZXkgVkMwMTAgdHlwZSAxIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQXNrZXkgVkMwMTAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2NDU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MDQ2ZCkgeworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4MDhiMDoKKwkJCUluZm8oIkxvZ2l0ZWNoIFF1aWNrQ2FtIFBybyAzMDAwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAiOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGIxOgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gTm90ZWJvb2sgUHJvIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gTm90ZWJvb2sgUHJvIjsKKwkJCXR5cGVfaWQgPSA3NDA7IC8qIENDRCBzZW5zb3IgKi8KKwkJCWJyZWFrOworCQljYXNlIDB4MDhiMjoKKwkJCUluZm8oIkxvZ2l0ZWNoIFF1aWNrQ2FtIDQwMDAgUHJvIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gUHJvIDQwMDAiOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGIzOgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20iOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOEI0OgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSAobmV3IG1vZGVsKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20iOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGI1OgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQvU3BoZXJlIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQiOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJZmVhdHVyZXMgfD0gRkVBVFVSRV9NT1RPUl9QQU5USUxUOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGI2OgorCQljYXNlIDB4MDhiNzoKKwkJY2FzZSAweDA4Yjg6CisJCQlJbmZvKCJMb2dpdGVjaCBRdWlja0NhbSBkZXRlY3RlZCAocmVzZXJ2ZWQgSUQpLlxuIik7CisJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIChyZXMuKSI7CisJCQl0eXBlX2lkID0gNzMwOyAvKiBBc3N1bWluZyBDTU9TICovCisJCQlicmVhazsKKyAgICAgICAgCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgCQlicmVhazsKKyAgICAgICAgCX0KKyAgICAgICAgfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA1NWQpIHsKKwkJLyogSSBkb24ndCBrbm93IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIEMxMCBhbmQgdGhlIEMzMDsKKwkJICAgSSBzdXBwb3NlIHRoZSBkaWZmZXJlbmNlIGlzIHRoZSBzZW5zb3IsIGJ1dCBib3RoIGNhbWVyYXMKKwkJICAgd29yayBlcXVhbGx5IHdlbGwgd2l0aCBhIHR5cGVfaWQgb2YgNjc1CisJCSAqLworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4OTAwMDoKKwkJCUluZm8oIlNhbXN1bmcgTVBDLUMxMCBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlNhbXN1bmcgTVBDLUMxMCI7CisJCQl0eXBlX2lkID0gNjc1OworCQkJYnJlYWs7CisJCWNhc2UgMHg5MDAxOgorCQkJSW5mbygiU2Ftc3VuZyBNUEMtQzMwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiU2Ftc3VuZyBNUEMtQzMwIjsKKwkJCXR5cGVfaWQgPSA2NzU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MDQxZSkgeworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4NDAwYzoKKwkJCUluZm8oIkNyZWF0aXZlIExhYnMgV2ViY2FtIDUgZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQ3JlYXRpdmUgTGFicyBXZWJjYW0gNSI7CisJCQl0eXBlX2lkID0gNzMwOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MDExOgorCQkJSW5mbygiQ3JlYXRpdmUgTGFicyBXZWJjYW0gUHJvIEV4IGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkNyZWF0aXZlIExhYnMgV2ViY2FtIFBybyBFeCI7CisJCQl0eXBlX2lkID0gNzQwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA0Y2MpIHsKKwkJc3dpdGNoKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDgxMTY6CisJCQlJbmZvKCJTb3RlYyBBZmluYSBFeWUgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJTb3RlYyBBZmluYSBFeWUiOworCQkJdHlwZV9pZCA9IDczMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICh2ZW5kb3JfaWQgPT0gMHgwNmJlKSB7CisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHg4MTE2OgorCQkJLyogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBjYW0gYXMgdGhlIFNvdGVjIEFmaW5hIEV5ZSAqLworCQkJSW5mbygiQU1FIENvLiBBZmluYSBFeWUgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJBTUUgQ28uIEFmaW5hIEV5ZSI7CisJCQl0eXBlX2lkID0gNzUwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJCisJfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDBkODEpIHsKKwkJc3dpdGNoKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDE5MDA6CisJCQlJbmZvKCJWaXNpb25pdGUgVkNTLVVDMzAwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiVmlzaW9uaXRlIFZDUy1VQzMwMCI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlicmVhazsKKwkJY2FzZSAweDE5MTA6CisJCQlJbmZvKCJWaXNpb25pdGUgVkNTLVVNMTAwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiVmlzaW9uaXRlIFZDUy1VTTEwMCI7CisJCQl0eXBlX2lkID0gNzMwOyAvKiBDTU9TIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgCisJCXJldHVybiAtRU5PREVWOyAvKiBOb3QgYW55IG9mIHRoZSBrbm93IHR5cGVzOyBidXQgdGhlIGxpc3Qga2VlcHMgZ3Jvd2luZy4gKi8KKworCW1lbXNldChzZXJpYWxfbnVtYmVyLCAwLCAzMCk7CisJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIHNlcmlhbF9udW1iZXIsIDI5KTsKKwlUcmFjZShUUkFDRV9QUk9CRSwgIkRldmljZSBzZXJpYWwgbnVtYmVyIGlzICVzXG4iLCBzZXJpYWxfbnVtYmVyKTsKKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyA+IDEpCisJCUluZm8oIldhcm5pbmc6IG1vcmUgdGhhbiAxIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlLlxuIik7CisKKwkvKiBBbGxvY2F0ZSBzdHJ1Y3R1cmUsIGluaXRpYWxpemUgcG9pbnRlcnMsIG11dGV4ZXMsIGV0Yy4gYW5kIGxpbmsgaXQgdG8gdGhlIHVzYl9kZXZpY2UgKi8KKwlwZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGRldiA9PSBOVUxMKSB7CisJCUVycigiT29wcywgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcHdjX2RldmljZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHBkZXYsIDAsIHNpemVvZihzdHJ1Y3QgcHdjX2RldmljZSkpOworCXBkZXYtPnR5cGUgPSB0eXBlX2lkOworCXBkZXYtPnZzaXplID0gZGVmYXVsdF9zaXplOworCXBkZXYtPnZmcmFtZXMgPSBkZWZhdWx0X2ZwczsKKwlzdHJjcHkocGRldi0+c2VyaWFsLCBzZXJpYWxfbnVtYmVyKTsKKwlwZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWlmICh2ZW5kb3JfaWQgPT0gMHgwNDZEICYmIHByb2R1Y3RfaWQgPT0gMHgwOEI1KQorCXsKKwkJLyogTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQKKwkgICAgICAgICAgIFRoZSByYW5nZXMgaGF2ZSBiZWVuIGRldGVybWluZWQgZXhwZXJpbWVudGFsbHk7IHRoZXkgbWF5IGRpZmZlciBmcm9tIGNhbSB0byBjYW0uCisJICAgICAgICAgICBBbHNvLCB0aGUgZXhhY3QgcmFuZ2VzIGxlZnQtcmlnaHQgYW5kIHVwLWRvd24gYXJlIGRpZmZlcmVudCBmb3IgbXkgY2FtCisJICAgICAgICAgICovCisJCXBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9taW4gID0gLTcwMDA7CisJCXBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9tYXggID0gIDcwMDA7CisJCXBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWluID0gLTMwMDA7CisJCXBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWF4ID0gIDI1MDA7CisJfQorCisJaW5pdF9NVVRFWCgmcGRldi0+bW9kbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBkZXYtPnB0cmxvY2spOworCisJcGRldi0+dWRldiA9IHVkZXY7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGRldi0+ZnJhbWVxKTsKKwlwZGV2LT52Y29tcHJlc3Npb24gPSBwd2NfcHJlZmVycmVkX2NvbXByZXNzaW9uOworCisJLyogQWxsb2NhdGUgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSAqLworCXBkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAocGRldi0+dmRldiA9PSAwKQorCXsKKwkJRXJyKCJFcnIsIGNhbm5vdCBhbGxvY2F0ZSB2aWRlb19kZXZpY2Ugc3RydXR1cmUuIEZhaWxpbmcgcHJvYmUuIik7CisJCWtmcmVlKHBkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5KHBkZXYtPnZkZXYsICZwd2NfdGVtcGxhdGUsIHNpemVvZihwd2NfdGVtcGxhdGUpKTsKKwlzdHJjcHkocGRldi0+dmRldi0+bmFtZSwgbmFtZSk7CisJcGRldi0+dmRldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShwZGV2LT52ZGV2LCBwZGV2KTsKKworCXBkZXYtPnJlbGVhc2UgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJVHJhY2UoVFJBQ0VfUFJPQkUsICJSZWxlYXNlOiAlMDR4XG4iLCBwZGV2LT5yZWxlYXNlKTsKKworCS8qIE5vdyBzZWFyY2ggZGV2aWNlX2hpbnRbXSB0YWJsZSBmb3IgYSBtYXRjaCwgc28gd2UgY2FuIGhpbnQgYSBub2RlIG51bWJlci4gKi8KKwlmb3IgKGhpbnQgPSAwOyBoaW50IDwgTUFYX0RFVl9ISU5UUzsgaGludCsrKSB7CisJCWlmICgoKGRldmljZV9oaW50W2hpbnRdLnR5cGUgPT0gLTEpIHx8IChkZXZpY2VfaGludFtoaW50XS50eXBlID09IHBkZXYtPnR5cGUpKSAmJgorCQkgICAgIChkZXZpY2VfaGludFtoaW50XS5wZGV2ID09IE5VTEwpKSB7CisJCQkvKiBzbyBmYXIsIHNvIGdvb2QuLi4gdHJ5IHNlcmlhbCBudW1iZXIgKi8KKwkJCWlmICgoZGV2aWNlX2hpbnRbaGludF0uc2VyaWFsX251bWJlclswXSA9PSAnKicpIHx8ICFzdHJjbXAoZGV2aWNlX2hpbnRbaGludF0uc2VyaWFsX251bWJlciwgc2VyaWFsX251bWJlcikpIHsKKwkJCSAgICAJLyogbWF0Y2ghICovCisJCQkgICAgCXZpZGVvX25yID0gZGV2aWNlX2hpbnRbaGludF0uZGV2aWNlX25vZGU7CisJCQkgICAgCVRyYWNlKFRSQUNFX1BST0JFLCAiRm91bmQgaGludCwgd2lsbCB0cnkgdG8gcmVnaXN0ZXIgYXMgL2Rldi92aWRlbyVkXG4iLCB2aWRlb19ucik7CisJCQkgICAgCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcGRldi0+dmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCWkgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UocGRldi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpOworCWlmIChpIDwgMCkgeworCQlFcnIoIkZhaWxlZCB0byByZWdpc3RlciBhcyB2aWRlbyBkZXZpY2UgKCVkKS5cbiIsIGkpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShwZGV2LT52ZGV2KTsgLyogRHJpcC4uLiBkcmlwLi4uIGRyaXAuLi4gKi8KKwkJa2ZyZWUocGRldik7IC8qIE9vcHMsIG5vIG1lbW9yeSBsZWFrcyBwbGVhc2UgKi8KKwkJcmV0dXJuIC1FSU87CisJfQorCWVsc2UgeworCQlJbmZvKCJSZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZC5cbiIsIHBkZXYtPnZkZXYtPm1pbm9yICYgMHgzRik7CisJfQorCisJLyogb2NjdXB5IHNsb3QgKi8KKwlpZiAoaGludCA8IE1BWF9ERVZfSElOVFMpIAorCQlkZXZpY2VfaGludFtoaW50XS5wZGV2ID0gcGRldjsKKworCVRyYWNlKFRSQUNFX1BST0JFLCAicHJvYmUoKSBmdW5jdGlvbiByZXR1cm5pbmcgc3RydWN0IGF0IDB4JXAuXG4iLCBwZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBwZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyogVGhlIHVzZXIgamFua2VkIG91dCB0aGUgY2FibGUuLi4gKi8KK3N0YXRpYyB2b2lkIHVzYl9wd2NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwlpbnQgaGludDsKKworCWxvY2tfa2VybmVsKCk7CisJcGRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChwZGV2ID09IE5VTEwpIHsKKwkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIENhbGxlZCB3aXRob3V0IHByaXZhdGUgcG9pbnRlci5cbiIpOworCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OworCX0KKwlpZiAocGRldi0+dWRldiA9PSBOVUxMKSB7CisJCUVycigicHdjX2Rpc2Nvbm5lY3QoKSBhbHJlYWR5IGNhbGxlZCBmb3IgJXBcbiIsIHBkZXYpOworCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OworCX0KKwlpZiAocGRldi0+dWRldiAhPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKSB7CisJCUVycigicHdjX2Rpc2Nvbm5lY3QoKSBXb29wczogcG9pbnRlciBtaXNtYXRjaCB1ZGV2L3BkZXYuXG4iKTsKKwkJZ290byBkaXNjb25uZWN0X291dDsKKwl9CisjaWZkZWYgUFdDX01BR0lDCQorCWlmIChwZGV2LT5tYWdpYyAhPSBQV0NfTUFHSUMpIHsKKwkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIE1hZ2ljIG51bWJlciBmYWlsZWQuIENvbnN1bHQgeW91ciBzY3JvbGxzIGFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZ290byBkaXNjb25uZWN0X291dDsKKwl9CisjZW5kaWYKKwkKKwkvKiBXZSBnb3QgdW5wbHVnZ2VkOyB0aGlzIGlzIHNpZ25hbGxlZCBieSBhbiBFUElQRSBlcnJvciBjb2RlICovCisJaWYgKHBkZXYtPnZvcGVuKSB7CisJCUluZm8oIkRpc2Nvbm5lY3RlZCB3aGlsZSB3ZWJjYW0gaXMgaW4gdXNlIVxuIik7CisJCXBkZXYtPmVycm9yX3N0YXR1cyA9IEVQSVBFOworCX0KKworCS8qIEFsZXJ0IHdhaXRpbmcgcHJvY2Vzc2VzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwZGV2LT5mcmFtZXEpOworCS8qIFdhaXQgdW50aWwgZGV2aWNlIGlzIGNsb3NlZCAqLworCXdoaWxlIChwZGV2LT52b3BlbikKKwkJc2NoZWR1bGUoKTsKKwkvKiBEZXZpY2UgaXMgbm93IGNsb3NlZCwgc28gd2UgY2FuIHNhZmVseSB1bnJlZ2lzdGVyIGl0ICovCisJVHJhY2UoVFJBQ0VfUFJPQkUsICJVbnJlZ2lzdGVyaW5nIHZpZGVvIGRldmljZSBpbiBkaXNjb25uZWN0KCkuXG4iKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2KTsKKworCS8qIEZyZWUgbWVtb3J5IChkb24ndCBzZXQgcGRldiB0byAwIGp1c3QgeWV0KSAqLworCWtmcmVlKHBkZXYpOworCitkaXNjb25uZWN0X291dDoKKwkvKiBzZWFyY2ggZGV2aWNlX2hpbnRbXSB0YWJsZSBpZiB3ZSBvY2N1cHkgYSBzbG90LCBieSBhbnkgY2hhbmNlICovCisJZm9yIChoaW50ID0gMDsgaGludCA8IE1BWF9ERVZfSElOVFM7IGhpbnQrKykKKwkJaWYgKGRldmljZV9oaW50W2hpbnRdLnBkZXYgPT0gcGRldikKKwkJCWRldmljZV9oaW50W2hpbnRdLnBkZXYgPSBOVUxMOworCisJdW5sb2NrX2tlcm5lbCgpOworfQorCisKKy8qICpncnVudCogV2UgaGF2ZSB0byBkbyBhdG9pIG91cnNlbHZlcyA6LSggKi8KK3N0YXRpYyBpbnQgcHdjX2F0b2koY29uc3QgY2hhciAqcykKK3sKKwlpbnQgayA9IDA7CisKKwlrID0gMDsKKwl3aGlsZSAoKnMgIT0gJ1wwJyAmJiAqcyA+PSAnMCcgJiYgKnMgPD0gJzknKSB7CisJCWsgPSAxMCAqIGsgKyAoKnMgLSAnMCcpOworCQlzKys7CisJfQorCXJldHVybiBrOworfQorCisKKy8qIAorICogSW5pdGlhbGl6YXRpb24gY29kZSAmIG1vZHVsZSBzdHVmZiAKKyAqLworCitzdGF0aWMgY2hhciBzaXplWzEwXTsKK3N0YXRpYyBpbnQgZnBzID0gMDsKK3N0YXRpYyBpbnQgZmJ1ZnMgPSAwOworc3RhdGljIGludCBtYnVmcyA9IDA7CitzdGF0aWMgaW50IHRyYWNlID0gLTE7CitzdGF0aWMgaW50IGNvbXByZXNzaW9uID0gLTE7CitzdGF0aWMgaW50IGxlZHNbMl0gPSB7IC0xLCAtMSB9Oworc3RhdGljIGNoYXIgKmRldl9oaW50W01BWF9ERVZfSElOVFNdID0geyB9OworCittb2R1bGVfcGFyYW1fc3RyaW5nKHNpemUsIHNpemUsIHNpemVvZihzaXplKSwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbml0aWFsIGltYWdlIHNpemUuIE9uZSBvZiBzcWNpZiwgcXNpZiwgcWNpZiwgc2lmLCBjaWYsIHZnYSIpOworbW9kdWxlX3BhcmFtKGZwcywgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZnBzLCAiSW5pdGlhbCBmcmFtZXMgcGVyIHNlY29uZC4gVmFyaWVzIHdpdGggbW9kZWwsIHVzZWZ1bCByYW5nZSA1LTMwIik7Cittb2R1bGVfcGFyYW0oZmJ1ZnMsIGludCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZidWZzLCAiTnVtYmVyIG9mIGludGVybmFsIGZyYW1lIGJ1ZmZlcnMgdG8gcmVzZXJ2ZSIpOworbW9kdWxlX3BhcmFtKG1idWZzLCBpbnQsIDAwMDApOworTU9EVUxFX1BBUk1fREVTQyhtYnVmcywgIk51bWJlciBvZiBleHRlcm5hbCAobW1hcCgpZWQpIGltYWdlIGJ1ZmZlcnMiKTsKK21vZHVsZV9wYXJhbSh0cmFjZSwgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0ModHJhY2UsICJGb3IgZGVidWdnaW5nIHB1cnBvc2VzIik7Cittb2R1bGVfcGFyYW0ocG93ZXJfc2F2ZSwgYm9vbCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvd2VyX3NhdmUsICJUdXJuIHBvd2VyIHNhdmUgZmVhdHVyZSBpbiBjYW1lcmEgb24gb3Igb2ZmIik7Cittb2R1bGVfcGFyYW0oY29tcHJlc3Npb24sIGludCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvbXByZXNzaW9uLCAiUHJlZmVycmVkIGNvbXByZXNzaW9uIHF1YWxpdHkuIFJhbmdlIDAgKHVuY29tcHJlc3NlZCkgdG8gMyAoaGlnaCBjb21wcmVzc2lvbikiKTsKK21vZHVsZV9wYXJhbV9hcnJheShsZWRzLCBpbnQsIE5VTEwsIDAwMDApOworTU9EVUxFX1BBUk1fREVTQyhsZWRzLCAiTEVEIG9uLG9mZiB0aW1lIGluIG1pbGxpc2Vjb25kcyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGRldl9oaW50LCBjaGFycCwgTlVMTCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRldl9oaW50LCAiRGV2aWNlIG5vZGUgaGludHMiKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzICYgT0VNIFVTQiB3ZWJjYW0gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMdWMgU2FpbGxhcmQgPGx1Y0BzYWlsbGFyZC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9wd2NfaW5pdCh2b2lkKQoreworCWludCBpLCBzejsKKwljaGFyICpzaXplbmFtZXNbUFNaX01BWF0gPSB7ICJzcWNpZiIsICJxc2lmIiwgInFjaWYiLCAic2lmIiwgImNpZiIsICJ2Z2EiIH07CisKKwlJbmZvKCJQaGlsaXBzIHdlYmNhbSBtb2R1bGUgdmVyc2lvbiAiIFBXQ19WRVJTSU9OICIgbG9hZGVkLlxuIik7CisJSW5mbygiU3VwcG9ydHMgUGhpbGlwcyBQQ0E2NDUvNjQ2LCBQQ1ZDNjc1LzY4MC82OTAsIFBDVkM3MjBbNDBdLzczMC83NDAvNzUwICYgUENWQzgzMC84NDAuXG4iKTsKKwlJbmZvKCJBbHNvIHN1cHBvcnRzIHRoZSBBc2tleSBWQzAxMCwgdmFyaW91cyBMb2dpdGVjaCBRdWlja2NhbXMsIFNhbXN1bmcgTVBDLUMxMCBhbmQgTVBDLUMzMCxcbiIpOworCUluZm8oInRoZSBDcmVhdGl2ZSBXZWJDYW0gNSAmIFBybyBFeCwgU09URUMgQWZpbmEgRXllIGFuZCBWaXNpb25pdGUgVkNTLVVDMzAwIGFuZCBWQ1MtVU0xMDAuXG4iKTsKKworCWlmIChmcHMpIHsKKwkJaWYgKGZwcyA8IDQgfHwgZnBzID4gMzApIHsKKwkJCUVycigiRnJhbWVyYXRlIG91dCBvZiBib3VuZHMgKDQtMzApLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZWZhdWx0X2ZwcyA9IGZwczsKKwkJSW5mbygiRGVmYXVsdCBmcmFtZXJhdGUgc2V0IHRvICVkLlxuIiwgZGVmYXVsdF9mcHMpOworCX0KKworCWlmIChzaXplWzBdKSB7CisJCS8qIHN0cmluZzsgdHJ5IG1hdGNoaW5nIHdpdGggYXJyYXkgKi8KKwkJZm9yIChzeiA9IDA7IHN6IDwgUFNaX01BWDsgc3orKykgeworCQkJaWYgKCFzdHJjbXAoc2l6ZW5hbWVzW3N6XSwgc2l6ZSkpIHsgLyogRm91bmQhICovCisJCQkJZGVmYXVsdF9zaXplID0gc3o7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHN6ID09IFBTWl9NQVgpIHsKKwkJCUVycigiU2l6ZSBub3QgcmVjb2duaXplZDsgdHJ5IHNpemU9W3NxY2lmIHwgcXNpZiB8IHFjaWYgfCBzaWYgfCBjaWYgfCB2Z2FdLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlJbmZvKCJEZWZhdWx0IGltYWdlIHNpemUgc2V0IHRvICVzIFslZHglZF0uXG4iLCBzaXplbmFtZXNbZGVmYXVsdF9zaXplXSwgcHdjX2ltYWdlX3NpemVzW2RlZmF1bHRfc2l6ZV0ueCwgcHdjX2ltYWdlX3NpemVzW2RlZmF1bHRfc2l6ZV0ueSk7CisJfQorCWlmIChtYnVmcykgeworCQlpZiAobWJ1ZnMgPCAxIHx8IG1idWZzID4gTUFYX0lNQUdFUykgeworCQkJRXJyKCJJbGxlZ2FsIG51bWJlciBvZiBtbWFwKCkgYnVmZmVyczsgdXNlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgJWQuXG4iLCBNQVhfSU1BR0VTKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRlZmF1bHRfbWJ1ZnMgPSBtYnVmczsKKwkJSW5mbygiTnVtYmVyIG9mIGltYWdlIGJ1ZmZlcnMgc2V0IHRvICVkLlxuIiwgZGVmYXVsdF9tYnVmcyk7CisJfQorCWlmIChmYnVmcykgeworCQlpZiAoZmJ1ZnMgPCAyIHx8IGZidWZzID4gTUFYX0ZSQU1FUykgeworCQkJRXJyKCJJbGxlZ2FsIG51bWJlciBvZiBmcmFtZSBidWZmZXJzOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAyIGFuZCAlZC5cbiIsIE1BWF9GUkFNRVMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGVmYXVsdF9mYnVmcyA9IGZidWZzOworCQlJbmZvKCJOdW1iZXIgb2YgZnJhbWUgYnVmZmVycyBzZXQgdG8gJWQuXG4iLCBkZWZhdWx0X2ZidWZzKTsKKwl9CisJaWYgKHRyYWNlID49IDApIHsKKwkJSW5mbygiVHJhY2Ugb3B0aW9uczogMHglMDR4XG4iLCB0cmFjZSk7CisJCXB3Y190cmFjZSA9IHRyYWNlOworCX0KKwlpZiAoY29tcHJlc3Npb24gPj0gMCkgeworCQlpZiAoY29tcHJlc3Npb24gPiAzKSB7CisJCQlFcnIoIkludmFsaWQgY29tcHJlc3Npb24gc2V0dGluZzsgdXNlIGEgbnVtYmVyIGJldHdlZW4gMCAodW5jb21wcmVzc2VkKSBhbmQgMyAoaGlnaCkuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbjsKKwkJSW5mbygiUHJlZmVycmVkIGNvbXByZXNzaW9uIHNldCB0byAlZC5cbiIsIHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb24pOworCX0KKwlpZiAocG93ZXJfc2F2ZSkKKwkJSW5mbygiRW5hYmxpbmcgcG93ZXIgc2F2ZSBvbiBvcGVuL2Nsb3NlLlxuIik7CisJaWYgKGxlZHNbMF0gPj0gMCkKKwkJbGVkX29uID0gbGVkc1swXTsKKwlpZiAobGVkc1sxXSA+PSAwKQorCQlsZWRfb2ZmID0gbGVkc1sxXTsKKworCS8qIEJpZyBkZXZpY2Ugbm9kZSB3aG9vcGxhLiBCYXNpY2x5LCBpdCBhbGxvd3MgeW91IHRvIGFzc2lnbiBhCisJICAgZGV2aWNlIG5vZGUgKC9kZXYvdmlkZW9YKSB0byBhIGNhbWVyYSwgYmFzZWQgb24gaXRzIHR5cGUKKwkgICAmIHNlcmlhbCBudW1iZXIuIFRoZSBmb3JtYXQgaXMgW3R5cGVbLnNlcmlhbG51bWJlcl06XW5vZGUuCisKKwkgICBBbnkgY2FtZXJhIHRoYXQgaXNuJ3QgbWF0Y2hlZCBieSB0aGVzZSBydWxlcyBnZXRzIHRoZSBuZXh0CisJICAgYXZhaWxhYmxlIGZyZWUgZGV2aWNlIG5vZGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9ERVZfSElOVFM7IGkrKykgeworCQljaGFyICpzLCAqY29sb24sICpkb3Q7CisKKwkJLyogVGhpcyBsb29wIGFsc28gaW5pdGlhbGl6ZXMgdGhlIGFycmF5ICovCisJCWRldmljZV9oaW50W2ldLnBkZXYgPSBOVUxMOworCQlzID0gZGV2X2hpbnRbaV07CisJCWlmIChzICE9IE5VTEwgJiYgKnMgIT0gJ1wwJykgeworCQkJZGV2aWNlX2hpbnRbaV0udHlwZSA9IC0xOyAvKiB3aWxkY2FyZCAqLworCQkJc3RyY3B5KGRldmljZV9oaW50W2ldLnNlcmlhbF9udW1iZXIsICIqIik7CisKKwkJCS8qIHBhcnNlIHN0cmluZzogY2hvcCBhdCAnOicgJiAnLycgKi8KKwkJCWNvbG9uID0gZG90ID0gczsKKwkJCXdoaWxlICgqY29sb24gIT0gJ1wwJyAmJiAqY29sb24gIT0gJzonKQorCQkJCWNvbG9uKys7CisJCQl3aGlsZSAoKmRvdCAhPSAnXDAnICYmICpkb3QgIT0gJy4nKQorCQkJCWRvdCsrOworCQkJLyogRmV3IHNhbml0eSBjaGVja3MgKi8KKwkJCWlmICgqZG90ICE9ICdcMCcgJiYgZG90ID4gY29sb24pIHsKKwkJCQlFcnIoIk1hbGZvcm1lZCBjYW1lcmEgaGludDogdGhlIGNvbG9uIG11c3QgYmUgYWZ0ZXIgdGhlIGRvdC5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoKmNvbG9uID09ICdcMCcpIHsKKwkJCQkvKiBObyBjb2xvbiAqLworCQkJCWlmICgqZG90ICE9ICdcMCcpIHsKKwkJCQkJRXJyKCJNYWxmb3JtZWQgY2FtZXJhIGhpbnQ6IG5vIGNvbG9uICsgZGV2aWNlIG5vZGUgZ2l2ZW4uXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvKiBObyB0eXBlIG9yIHNlcmlhbCBudW1iZXIgc3BlY2lmaWVkLCBqdXN0IGEgbnVtYmVyLiAqLworCQkJCQlkZXZpY2VfaGludFtpXS5kZXZpY2Vfbm9kZSA9IHB3Y19hdG9pKHMpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCS8qIFRoZXJlJ3MgYSBjb2xvbiwgc28gd2UgaGF2ZSBhdCBsZWFzdCBhIHR5cGUgYW5kIGEgZGV2aWNlIG5vZGUgKi8KKwkJCQlkZXZpY2VfaGludFtpXS50eXBlID0gcHdjX2F0b2kocyk7CisJCQkJZGV2aWNlX2hpbnRbaV0uZGV2aWNlX25vZGUgPSBwd2NfYXRvaShjb2xvbiArIDEpOworCQkJCWlmICgqZG90ICE9ICdcMCcpIHsKKwkJCQkJLyogVGhlcmUncyBhIHNlcmlhbCBudW1iZXIgYXMgd2VsbCAqLworCQkJCQlpbnQgazsKKwkJCQkJCisJCQkJCWRvdCsrOworCQkJCQlrID0gMDsKKwkJCQkJd2hpbGUgKCpkb3QgIT0gJzonICYmIGsgPCAyOSkgeworCQkJCQkJZGV2aWNlX2hpbnRbaV0uc2VyaWFsX251bWJlcltrKytdID0gKmRvdDsKKwkJCQkJCWRvdCsrOworCQkJCQl9CisJCQkJCWRldmljZV9oaW50W2ldLnNlcmlhbF9udW1iZXJba10gPSAnXDAnOworCQkJCX0KKwkJCX0KKyNpZiBQV0NfREVCVUcJCQorCQkJRGVidWcoImRldmljZV9oaW50WyVkXTpcbiIsIGkpOworCQkJRGVidWcoIiAgdHlwZSAgICA6ICVkXG4iLCBkZXZpY2VfaGludFtpXS50eXBlKTsKKwkJCURlYnVnKCIgIHNlcmlhbCMgOiAlc1xuIiwgZGV2aWNlX2hpbnRbaV0uc2VyaWFsX251bWJlcik7CisJCQlEZWJ1ZygiICBub2RlICAgIDogJWRcbiIsIGRldmljZV9oaW50W2ldLmRldmljZV9ub2RlKTsKKyNlbmRpZgkJCQorCQl9CisJCWVsc2UKKwkJCWRldmljZV9oaW50W2ldLnR5cGUgPSAwOyAvKiBub3QgZmlsbGVkICovCisJfSAvKiAuLmZvciBNQVhfREVWX0hJTlRTICovCisKKyAJVHJhY2UoVFJBQ0VfUFJPQkUsICJSZWdpc3RlcmluZyBkcml2ZXIgYXQgYWRkcmVzcyAweCVwLlxuIiwgJnB3Y19kcml2ZXIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnB3Y19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3B3Y19leGl0KHZvaWQpCit7CisJVHJhY2UoVFJBQ0VfTU9EVUxFLCAiRGVyZWdpc3RlcmluZyBkcml2ZXIuXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmcHdjX2RyaXZlcik7CisJSW5mbygiUGhpbGlwcyB3ZWJjYW0gbW9kdWxlIHJlbW92ZWQuXG4iKTsKK30KKworbW9kdWxlX2luaXQodXNiX3B3Y19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9wd2NfZXhpdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaW9jdGwuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgwNWVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oCkBAIC0wLDAgKzEsMjkyIEBACisjaWZuZGVmIFBXQ19JT0NUTF9ICisjZGVmaW5lIFBXQ19JT0NUTF9ICisKKy8qIChDKSAyMDAxLTIwMDQgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKiBUaGlzIGlzIHB3Yy1pb2N0bC5oIGJlbG9uZ2luZyB0byBQV0MgOC4xMi4xCisgICBJdCBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHRvIGNvbW11bmljYXRlIGZyb20gdXNlciBzcGFjZQorICAgZGlyZWN0bHkgdG8gdGhlIGRyaXZlci4KKyAqLworCisvKgorICAgQ2hhbmdlcworICAgMjAwMS8wOC8wMyAgQWx2YXJhZG8gICBBZGRlZCBpb2N0bCBjb25zdGFudHMgdG8gYWNjZXNzIG1ldGhvZHMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHdoaXRlIGJhbGFuY2UgYW5kIHJlZC9ibHVlIGdhaW5zCisgICAyMDAyLzEyLzE1ICBHLiBILiBGZXJuYW5kZXotVG9yaWJpbyAgIFZJRElPQ0dSRUFMU0laRQorICAgMjAwMy8xMi8xMyAgTmVtb3NmdCBVbnYuIFNvbWUgbW9kaWZpY2F0aW9ucyB0byBtYWtlIGludGVyZmFjaW5nIHRvCisgICAgICAgICAgICAgICBQV0NYIGVhc2llcgorICovCisKKy8qIFRoZXNlIGFyZSBwcml2YXRlIGlvY3RsKCkgY29tbWFuZHMsIHNwZWNpZmljIGZvciB0aGUgUGhpbGlwcyB3ZWJjYW1zLgorICAgVGhleSBjb250YWluIGZ1bmN0aW9ucyBub3QgZm91bmQgaW4gb3RoZXIgd2ViY2FtcywgYW5kIHNldHRpbmdzIG5vdAorICAgc3BlY2lmaWVkIGluIHRoZSBWaWRlbzRMaW51eCBBUEkuCisKKyAgIFRoZSAjZGVmaW5lIG5hbWVzIGFyZSBidWlsdCB1cCBsaWtlIGZvbGxvd3M6CisgICBWSURJT0MJCVZJRGVvIElPQ3RsIHByZWZpeAorICAgICAgICAgUFdDCQlQaGlscHMgV2ViQ2FtCisgICAgICAgICAgICBHICAgICAgICAgICBvcHRpb25hbDogR2V0CisgICAgICAgICAgICBTICAgICAgICAgICBvcHRpb25hbDogU2V0CisgICAgICAgICAgICAgLi4uIAl0aGUgZnVuY3Rpb24KKyAqLworCisKKyAvKiBFbnVtZXJhdGlvbiBvZiBpbWFnZSBzaXplcyAqLworI2RlZmluZSBQU1pfU1FDSUYJMHgwMAorI2RlZmluZSBQU1pfUVNJRgkweDAxCisjZGVmaW5lIFBTWl9RQ0lGCTB4MDIKKyNkZWZpbmUgUFNaX1NJRgkJMHgwMworI2RlZmluZSBQU1pfQ0lGCQkweDA0CisjZGVmaW5lIFBTWl9WR0EJCTB4MDUKKyNkZWZpbmUgUFNaX01BWAkJNgorCisKKy8qIFRoZSBmcmFtZSByYXRlIGlzIGVuY29kZWQgaW4gdGhlIHZpZGVvX3dpbmRvdy5mbGFncyBwYXJhbWV0ZXIgdXNpbmcKKyAgIHRoZSB1cHBlciAxNiBiaXRzLCBzaW5jZSBzb21lIGZsYWdzIGFyZSBkZWZpbmVkIG5vd2FkYXlzLiBUaGUgZm9sbG93aW5nCisgICBkZWZpbmVzIHByb3ZpZGUgYSBtYXNrIGFuZCBzaGlmdCB0byBmaWx0ZXIgb3V0IHRoaXMgdmFsdWUuCisKKyAgIEluICdTbmFwc2hvdCcgbW9kZSB0aGUgY2FtZXJhIGZyZWV6ZXMgaXRzIGF1dG9tYXRpYyBleHBvc3VyZSBhbmQgY29sb3VyCisgICBiYWxhbmNlIGNvbnRyb2xzLgorICovCisjZGVmaW5lIFBXQ19GUFNfU0hJRlQJCTE2CisjZGVmaW5lIFBXQ19GUFNfTUFTSwkJMHgwMEZGMDAwMAorI2RlZmluZSBQV0NfRlBTX0ZSTUFTSwkJMHgwMDNGMDAwMAorI2RlZmluZSBQV0NfRlBTX1NOQVBTSE9UCTB4MDA0MDAwMDAKKworCisvKiBzdHJ1Y3R1cmUgZm9yIHRyYW5zZmVyaW5nIHggJiB5IGNvb3JkaW5hdGVzICovCitzdHJ1Y3QgcHdjX2Nvb3JkCit7CisJaW50IHgsIHk7CQkvKiBndWVzcyB3aGF0ICovCisJaW50IHNpemU7CQkvKiBzaXplLCBvciBvZmZzZXQgKi8KK307CisKKworLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1BST0JFICovCitzdHJ1Y3QgcHdjX3Byb2JlCit7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHlwZTsKK307CisKK3N0cnVjdCBwd2Nfc2VyaWFsCit7CisJY2hhciBzZXJpYWxbMzBdOwkvKiBTdHJpbmcgd2l0aCBzZXJpYWwgbnVtYmVyLiBDb250YWlucyB0ZXJtaW5hdGluZyAwICovCit9OworCQorLyogcHdjX3doaXRlYmFsYW5jZS5tb2RlIHZhbHVlcyAqLworI2RlZmluZSBQV0NfV0JfSU5ET09SCQkwCisjZGVmaW5lIFBXQ19XQl9PVVRET09SCQkxCisjZGVmaW5lIFBXQ19XQl9GTAkJMgorI2RlZmluZSBQV0NfV0JfTUFOVUFMCQkzCisjZGVmaW5lIFBXQ19XQl9BVVRPCQk0CisKKy8qIFVzZWQgd2l0aCBWSURJT0NQV0NbU0ddQVdCIChBdXRvIFdoaXRlIEJhbGFuY2UpLiAKKyAgIFNldCBtb2RlIHRvIG9uZSBvZiB0aGUgUFdDX1dCXyogdmFsdWVzIGFib3ZlLgorICAgKnJlZCBhbmQgKmJsdWUgYXJlIHRoZSByZXNwZWN0aXZlIGdhaW5zIG9mIHRoZXNlIGNvbG91ciBjb21wb25lbnRzIGluc2lkZSAKKyAgIHRoZSBjYW1lcmE7IHJhbmdlIDAuLjY1NTM1CisgICBXaGVuICdtb2RlJyA9PSBQV0NfV0JfTUFOVUFMLCAnbWFudWFsX3JlZCcgYW5kICdtYW51YWxfYmx1ZScgYXJlIHNldCBvciByZWFkOyAKKyAgIG90aGVyd2lzZSB1bmRlZmluZWQuCisgICAncmVhZF9yZWQnIGFuZCAncmVhZF9ibHVlJyBhcmUgcmVhZC1vbmx5LgorKi8gICAKK3N0cnVjdCBwd2Nfd2hpdGViYWxhbmNlCit7CisJaW50IG1vZGU7CisJaW50IG1hbnVhbF9yZWQsIG1hbnVhbF9ibHVlOwkvKiBSL1cgKi8KKwlpbnQgcmVhZF9yZWQsIHJlYWRfYmx1ZTsJLyogUi9PICovCit9OworCisvKiAKKyAgICdjb250cm9sX3NwZWVkJyBhbmQgJ2NvbnRyb2xfZGVsYXknIGFyZSB1c2VkIGluIGF1dG9tYXRpYyB3aGl0ZWJhbGFuY2UgbW9kZSwKKyAgIGFuZCB0ZWxsIHRoZSBjYW1lcmEgaG93IGZhc3QgaXQgc2hvdWxkIHJlYWN0IHRvIGNoYW5nZXMgaW4gbGlnaHRpbmcsIGFuZCAKKyAgIHdpdGggaG93IG11Y2ggZGVsYXkuIFZhbGlkIHZhbHVlcyBhcmUgMC4uNjU1MzUuCisqLworc3RydWN0IHB3Y193Yl9zcGVlZAoreworCWludCBjb250cm9sX3NwZWVkOworCWludCBjb250cm9sX2RlbGF5OworCit9OworCisvKiBVc2VkIHdpdGggVklESU9DUFdDW1NHXUxFRCAqLworc3RydWN0IHB3Y19sZWRzCit7CisJaW50IGxlZF9vbjsJCQkvKiBMZWQgb24tdGltZTsgcmFuZ2UgPSAwLi4yNTAwMCAqLworCWludCBsZWRfb2ZmOwkJCS8qIExlZCBvZmYtdGltZTsgcmFuZ2UgPSAwLi4yNTAwMCAgKi8KK307CisKKy8qIEltYWdlIHNpemUgKHVzZWQgd2l0aCBHUkVBTFNJWkUpICovCitzdHJ1Y3QgcHdjX2ltYWdlc2l6ZQoreworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OworfTsKKworLyogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgTW90b3JpemVkIFBhbiAmIFRpbHQgKi8KKyNkZWZpbmUgUFdDX01QVF9QQU4JCTB4MDEKKyNkZWZpbmUgUFdDX01QVF9USUxUCQkweDAyCisjZGVmaW5lIFBXQ19NUFRfVElNRU9VVAkJMHgwNCAvKiBmb3Igc3RhdHVzICovCisKKy8qIFNldCBhbmdsZXM7IHdoZW4gYWJzb2x1dGUgIT0gMCwgdGhlIGFuZ2xlIGlzIGFic29sdXRlIGFuZCB0aGUgCisgICBkcml2ZXIgY2FsY3VsYXRlcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IGZvciB5b3UuIFRoaXMgY2FuIG9ubHkKKyAgIGJlIHVzZWQgd2l0aCBWSURJT0NQV0NTQU5HTEU7IFZJRElPQ1BXQ0dBTkdMRSBhbHdheXMgcmV0dXJucworICAgYWJzb2x1dGUgYW5nbGVzLgorICovICAgCitzdHJ1Y3QgcHdjX21wdF9hbmdsZXMKK3sKKwlpbnQgYWJzb2x1dGU7CQkvKiB3cml0ZS1vbmx5ICovCisJaW50IHBhbjsJCS8qIGRlZ3JlZXMgKiAxMDAgKi8KKwlpbnQgdGlsdDsJCS8qIGRlZ3Jlc3MgKiAxMDAgKi8KK307CisKKy8qIFJhbmdlIG9mIGFuZ2xlcyBvZiB0aGUgY2FtZXJhLCBib3RoIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseS4KKyAqLworc3RydWN0IHB3Y19tcHRfcmFuZ2UKK3sKKwlpbnQgcGFuX21pbiwgcGFuX21heDsJCS8qIGRlZ3JlZXMgKiAxMDAgKi8KKwlpbnQgdGlsdF9taW4sIHRpbHRfbWF4OworfTsKKworc3RydWN0IHB3Y19tcHRfc3RhdHVzCit7CisJaW50IHN0YXR1czsKKwlpbnQgdGltZV9wYW47CisJaW50IHRpbWVfdGlsdDsKK307CisKKworLyogVGhpcyBpcyB1c2VkIGZvciBvdXQtb2Yta2VybmVsIGRlY29tcHJlc3Npb24uIFdpdGggaXQsIHlvdSBjYW4gZ2V0CisgICBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBpbml0aWFsaXplIGFuZCB1c2UgdGhlIGRlY29tcHJlc3NvcgorICAgcm91dGluZXMgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMuCisgKi8gICAKK3N0cnVjdCBwd2NfdmlkZW9fY29tbWFuZAoreworCWludCB0eXBlOwkJLyogY2FtZXJhIHR5cGUgKDY0NSwgNjc1LCA3MzAsIGV0Yy4pICovCisJaW50IHJlbGVhc2U7CQkvKiByZWxlYXNlIG51bWJlciAqLworCisgICAgICAgIGludCBzaXplOwkJLyogb25lIG9mIFBTWl8qICovCisgICAgICAgIGludCBhbHRlcm5hdGU7CisJaW50IGNvbW1hbmRfbGVuOwkvKiBsZW5ndGggb2YgVVNCIHZpZGVvIGNvbW1hbmQgKi8KKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRfYnVmWzEzXTsJLyogQWN0dWFsIFVTQiB2aWRlbyBjb21tYW5kICovCisJaW50IGJhbmRsZW5ndGg7CQkvKiA+MCA9IGNvbXByZXNzZWQgKi8KKwlpbnQgZnJhbWVfc2l6ZTsJCS8qIFNpemUgb2Ygb25lICh1biljb21wcmVzc2VkIGZyYW1lICovCit9OworCisvKiBGbGFncyBmb3IgUFdDWCBzdWJyb3V0aW5lcy4gTm90IGFsbCBtb2R1bGVzIGhvbm91ciBhbGwgZmxhZ3MuICovCisjZGVmaW5lIFBXQ1hfRkxBR19QTEFOQVIJMHgwMDAxCisjZGVmaW5lIFBXQ1hfRkxBR19CQVlFUgkJMHgwMDA4CisKKworLyogSU9DVEwgZGVmaW5pdGlvbnMgKi8KKworIC8qIFJlc3RvcmUgdXNlciBzZXR0aW5ncyAqLworI2RlZmluZSBWSURJT0NQV0NSVVNFUgkJX0lPKCd2JywgMTkyKQorIC8qIFNhdmUgdXNlciBzZXR0aW5ncyAqLworI2RlZmluZSBWSURJT0NQV0NTVVNFUgkJX0lPKCd2JywgMTkzKQorIC8qIFJlc3RvcmUgZmFjdG9yeSBzZXR0aW5ncyAqLworI2RlZmluZSBWSURJT0NQV0NGQUNUT1JZCV9JTygndicsIDE5NCkKKworIC8qIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29tcHJlc3Npb24gZmFjdG9yLiBBIGNvbXByZXNzaW9uIHByZWZlcmVuY2Ugb2YgMAorICAgIG1lYW5zIHVzZSB1bmNvbXByZXNzZWQgbW9kZXMgd2hlbiBhdmFpbGFibGU7IDEgaXMgbG93IGNvbXByZXNzaW9uLCAyIGlzCisgICAgbWVkaXVtIGFuZCAzIGlzIGhpZ2ggY29tcHJlc3Npb24gcHJlZmVycmVkLiBPZiBjb3Vyc2UsIHRoZSBoaWdoZXIgdGhlCisgICAgY29tcHJlc3Npb24sIHRoZSBsb3dlciB0aGUgYmFuZHdpZHRoIHVzZWQgYnV0IG1vcmUgY2hhbmNlIG9mIGFydGVmYWN0cworICAgIGluIHRoZSBpbWFnZS4gVGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGNob29zZXMgYSBoaWdoZXIgY29tcHJlc3Npb24gd2hlbgorICAgIHRoZSBwcmVmZXJyZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLgorICAqLworIC8qIFNldCBwcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eSAoMCA9IHVuY29tcHJlc3NlZCwgMyA9IGhpZ2hlc3QgY29tcHJlc3Npb24pICovCisjZGVmaW5lIFZJRElPQ1BXQ1NDUVVBTAkJX0lPVygndicsIDE5NSwgaW50KQorIC8qIEdldCBwcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eSAqLworI2RlZmluZSBWSURJT0NQV0NHQ1FVQUwJCV9JT1IoJ3YnLCAxOTUsIGludCkKKworCisvKiBSZXRyaWV2ZSBzZXJpYWwgbnVtYmVyIG9mIGNhbWVyYSAqLworI2RlZmluZSBWSURJT0NQV0NHU0VSSUFMCV9JT1IoJ3YnLCAxOTgsIHN0cnVjdCBwd2Nfc2VyaWFsKQorCisgLyogVGhpcyBpcyBhIHByb2JlIGZ1bmN0aW9uOyBzaW5jZSBzbyBtYW55IGRldmljZXMgYXJlIHN1cHBvcnRlZCwgaXQKKyAgICBiZWNvbWVzIGRpZmZpY3VsdCB0byBpbmNsdWRlIGFsbCB0aGUgbmFtZXMgaW4gcHJvZ3JhbXMgdGhhdCB3YW50IHRvCisgICAgY2hlY2sgZm9yIHRoZSBlbmhhbmNlZCBQaGlsaXBzIHN0dWZmLiBTbyBpbiBzdGVhZCwgdHJ5IHRoaXMgUFJPQkU7CisgICAgaXQgcmV0dXJucyBhIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICBQaGlsaXBzIHR5cGUuCisgICAgVG8gdXNlLCBmaWxsIHRoZSBzdHJ1Y3R1cmUgd2l0aCB6ZXJvZXMsIGNhbGwgUFJPQkUgYW5kIGlmIHRoYXQgc3VjY2VlZHMsCisgICAgY29tcGFyZSB0aGUgbmFtZSB3aXRoIHRoYXQgcmV0dXJuZWQgZnJvbSBWSURJT0NHQ0FQOyB0aGV5IHNob3VsZCBiZSB0aGUKKyAgICBzYW1lLiBJZiBzbywgeW91IGNhbiBiZSBhc3N1cmVkIGl0IGlzIGEgUGhpbGlwcyAoT0VNKSBjYW0gYW5kIHRoZSB0eXBlCisgICAgaXMgdmFsaWQuCisgKi8KKyNkZWZpbmUgVklESU9DUFdDUFJPQkUJCV9JT1IoJ3YnLCAxOTksIHN0cnVjdCBwd2NfcHJvYmUpCisKKyAvKiBTZXQgQUdDIChBdXRvbWF0aWMgR2FpbiBDb250cm9sKTsgaW50IDwgMCA9IGF1dG8sIDAuLjY1NTM1ID0gZml4ZWQgKi8KKyNkZWZpbmUgVklESU9DUFdDU0FHQwkJX0lPVygndicsIDIwMCwgaW50KQorIC8qIEdldCBBR0M7IGludCA8IDAgPSBhdXRvOyA+PSAwID0gZml4ZWQsIHJhbmdlIDAuLjY1NTM1ICovCisjZGVmaW5lIFZJRElPQ1BXQ0dBR0MJCV9JT1IoJ3YnLCAyMDAsIGludCkKKyAvKiBTZXQgc2h1dHRlciBzcGVlZDsgaW50IDwgMCA9IGF1dG87ID49IDAgPSBmaXhlZCwgcmFuZ2UgMC4uNjU1MzUgKi8KKyNkZWZpbmUgVklESU9DUFdDU1NIVVRURVIJX0lPVygndicsIDIwMSwgaW50KQorCisgLyogQ29sb3IgY29tcGVuc2F0aW9uIChBdXRvIFdoaXRlIEJhbGFuY2UpICovCisjZGVmaW5lIFZJRElPQ1BXQ1NBV0IgICAgICAgICAgIF9JT1coJ3YnLCAyMDIsIHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlKQorI2RlZmluZSBWSURJT0NQV0NHQVdCICAgICAgICAgICBfSU9SKCd2JywgMjAyLCBzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSkKKworIC8qIEF1dG8gV0Igc3BlZWQgKi8KKyNkZWZpbmUgVklESU9DUFdDU0FXQlNQRUVECV9JT1coJ3YnLCAyMDMsIHN0cnVjdCBwd2Nfd2Jfc3BlZWQpCisjZGVmaW5lIFZJRElPQ1BXQ0dBV0JTUEVFRAlfSU9SKCd2JywgMjAzLCBzdHJ1Y3QgcHdjX3diX3NwZWVkKQorCisgLyogTEVEcyBvbi9vZmYvYmxpbms7IGludCByYW5nZSAwLi42NTUzNSAqLworI2RlZmluZSBWSURJT0NQV0NTTEVEICAgICAgICAgICBfSU9XKCd2JywgMjA1LCBzdHJ1Y3QgcHdjX2xlZHMpCisjZGVmaW5lIFZJRElPQ1BXQ0dMRUQgICAgICAgICAgIF9JT1IoJ3YnLCAyMDUsIHN0cnVjdCBwd2NfbGVkcykKKworICAvKiBDb250b3VyIChzaGFycG5lc3MpOyBpbnQgPCAwID0gYXV0bywgMC4uNjU1MzYgPSBmaXhlZCAqLworI2RlZmluZSBWSURJT0NQV0NTQ09OVE9VUglfSU9XKCd2JywgMjA2LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dDT05UT1VSCV9JT1IoJ3YnLCAyMDYsIGludCkKKworICAvKiBCYWNrbGlnaHQgY29tcGVuc2F0aW9uOyAwID0gb2ZmLCBvdGhlcndpc2Ugb24gKi8KKyNkZWZpbmUgVklESU9DUFdDU0JBQ0tMSUdIVAlfSU9XKCd2JywgMjA3LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dCQUNLTElHSFQJX0lPUigndicsIDIwNywgaW50KQorCisgIC8qIEZsaWNrZXJsZXNzIG1vZGU7ID0gMCBvZmYsIG90aGVyd2lzZSBvbiAqLworI2RlZmluZSBWSURJT0NQV0NTRkxJQ0tFUglfSU9XKCd2JywgMjA4LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dGTElDS0VSCV9JT1IoJ3YnLCAyMDgsIGludCkgIAorCisgIC8qIER5bmFtaWMgbm9pc2UgcmVkdWN0aW9uOyAwIG9mZiwgMyA9IGhpZ2ggbm9pc2UgcmVkdWN0aW9uICovCisjZGVmaW5lIFZJRElPQ1BXQ1NEWU5OT0lTRQlfSU9XKCd2JywgMjA5LCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ0dEWU5OT0lTRQlfSU9SKCd2JywgMjA5LCBpbnQpCisKKyAvKiBSZWFsIGltYWdlIHNpemUgYXMgdXNlZCBieSB0aGUgY2FtZXJhOyB0ZWxscyB5b3Ugd2hldGhlciBvciBub3QgdGhlcmUncyBhIGdyYXkgYm9yZGVyIGFyb3VuZCB0aGUgaW1hZ2UgKi8KKyNkZWZpbmUgVklESU9DUFdDR1JFQUxTSVpFCV9JT1IoJ3YnLCAyMTAsIHN0cnVjdCBwd2NfaW1hZ2VzaXplKQorCisgLyogTW90b3JpemVkIHBhbiAmIHRpbHQgZnVuY3Rpb25zICovIAorI2RlZmluZSBWSURJT0NQV0NNUFRSRVNFVAlfSU9XKCd2JywgMjExLCBpbnQpCisjZGVmaW5lIFZJRElPQ1BXQ01QVEdSQU5HRQlfSU9SKCd2JywgMjExLCBzdHJ1Y3QgcHdjX21wdF9yYW5nZSkKKyNkZWZpbmUgVklESU9DUFdDTVBUU0FOR0xFCV9JT1coJ3YnLCAyMTIsIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcykKKyNkZWZpbmUgVklESU9DUFdDTVBUR0FOR0xFCV9JT1IoJ3YnLCAyMTIsIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcykKKyNkZWZpbmUgVklESU9DUFdDTVBUU1RBVFVTCV9JT1IoJ3YnLCAyMTMsIHN0cnVjdCBwd2NfbXB0X3N0YXR1cykKKworIC8qIEdldCB0aGUgVVNCIHNldC12aWRlbyBjb21tYW5kOyBuZWVkZWQgZm9yIGluaXRpYWxpemluZyBsaWJwd2N4ICovCisjZGVmaW5lIFZJRElPQ1BXQ0dWSURDTUQJX0lPUigndicsIDIxNSwgc3RydWN0IHB3Y192aWRlb19jb21tYW5kKQorc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlciB7CisgICBpbnQgbGVuOworICAgY2hhciAqYnVmZmVyOworCit9OworI2RlZmluZSBWSURJT0NQV0NHVklEVEFCTEUJX0lPUigndicsIDIxNiwgc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlcikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4NTgwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuYwpAQCAtMCwwICsxLDg5MSBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisKKy8qIFRoaXMgdGFibGVzIGNvbnRhaW5zIGVudHJpZXMgZm9yIHRoZSA3MzAvNzQwLzc1MCAoS2lhcmEpIGNhbWVyYSwgd2l0aAorICAgNCBkaWZmZXJlbnQgcXVhbGl0aWVzIChubyBjb21wcmVzc2lvbiwgbG93LCBtZWRpdW0sIGhpZ2gpLgorICAgSXQgbGlzdHMgdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHNhaWQgbW9kZSBieSBpdHMgYWx0ZXJuYXRlIGludGVyZmFjZQorICAgbnVtYmVyLiBBbiBhbHRlcm5hdGUgb2YgMCBtZWFucyB0aGF0IHRoZSBtb2RlIGlzIHVuYXZhaWxhYmxlLgorCisgICBUaGVyZSBhcmUgNiAqIDQgKiA0IGVudHJpZXM6CisgICAgIDYgZGlmZmVyZW50IHJlc29sdXRpb25zIHN1YnFjaWYsIHFzaWYsIHFjaWYsIHNpZiwgY2lmLCB2Z2EKKyAgICAgNiBmcmFtZXJhdGVzOiA1LCAxMCwgMTUsIDIwLCAyNSwgMzAKKyAgICAgNCBjb21wcmVzc2lvbiBtb2RpOiBub25lLCBsb3csIG1lZGl1bSwgaGlnaAorCisgICBXaGVuIGFuIHVuY29tcHJlc3NlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBuZXh0IGF2YWlsYWJsZSBjb21wcmVzc2VkIG1vZGUKKyAgIHdpbGwgYmUgY2hvc2VuICh1bmxlc3MgdGhlIGRlY29tcHJlc3NvciBpcyBhYnNlbnQpLiBTb21ldGltZXMgdGhlcmUgYXJlIG9ubHkKKyAgIDEgb3IgMiBjb21wcmVzc2VkIG1vZGVzIGF2YWlsYWJsZTsgaW4gdGhhdCBjYXNlIGVudHJpZXMgYXJlIGR1cGxpY2F0ZWQuCisqLworCisKKyNpbmNsdWRlICJwd2Mta2lhcmEuaCIKKyNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgorCitjb25zdCBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgS2lhcmFfdGFibGVbUFNaX01BWF1bNl1bNF0gPQoreworICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgxRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHgwMCwgMHg4MH19LAorICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MUQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4MDAsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgxRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHgwMCwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezIsIDI5MSwgICAgMCwgezB4MUMsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjMsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICAgICB7MSwgMTkyLCAgNjMwLCB7MHgxNCwgMHhGNCwgMHgzMCwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhDMCwgMHgwMCwgMHg4MH19LAorICAgICAgICAgezEsIDE5MiwgIDYzMCwgezB4MTQsIDB4RjQsIDB4MzAsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QzAsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHszLCA0MzcsICAgIDAsIHsweDFCLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEI1LCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkyLCAgNjQwLCB7MHgxMywgMHhGNCwgMHgzMCwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgyMCwgMHgyNCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MiwgIDY0MCwgezB4MTMsIDB4RjQsIDB4MzAsIDB4MTMsIDB4RjcsIDB4MTMsIDB4MkYsIDB4MTMsIDB4MjAsIDB4MjQsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTIsICA0MjAsIHsweDEzLCAweEY0LCAweDMwLCAweDBELCAweDFCLCAweDBDLCAweDUzLCAweDFFLCAweDE4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTg5LCAgICAwLCB7MHgxQSwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0RCwgMHgwMiwgMHg4MH19LAorICAgICAgICAgezMsIDQ0OCwgIDczMCwgezB4MTIsIDB4RjQsIDB4MzAsIDB4MTYsIDB4QzksIDB4MTYsIDB4MDEsIDB4MEUsIDB4MTgsIDB4QzAsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsyLCAyOTIsICA0NzYsIHsweDEyLCAweEY0LCAweDMwLCAweDBFLCAweEQ4LCAweDBFLCAweDEwLCAweDE5LCAweDE4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MSwgMTkyLCAgMzEyLCB7MHgxMiwgMHhGNCwgMHg1MCwgMHgwOSwgMHhCMywgMHgwOCwgMHhFQiwgMHgxRSwgMHgxOCwgMHhDMCwgMHgwMCwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezUsIDcwMywgICAgMCwgezB4MTksIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QkYsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDcsICA2MTAsIHsweDExLCAweEY0LCAweDMwLCAweDEzLCAweDBCLCAweDEyLCAweDQzLCAweDE0LCAweDI4LCAweEJGLCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkyLCAgMzk4LCB7MHgxMSwgMHhGNCwgMHg1MCwgMHgwQywgMHg2QywgMHgwQiwgMHhBNCwgMHgxRSwgMHgyOCwgMHgyNCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezEsIDE5MywgIDI2MiwgezB4MTEsIDB4RjQsIDB4NTAsIDB4MDgsIDB4MjMsIDB4MDcsIDB4NUIsIDB4MUUsIDB4MjgsIDB4QzEsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs4LCA4NzQsICAgIDAsIHsweDE4LCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDZBLCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NSwgNzA0LCAgNzMwLCB7MHgxMCwgMHhGNCwgMHgzMCwgMHgxNiwgMHhDOSwgMHgxNiwgMHgwMSwgMHgwRSwgMHgyOCwgMHhDMCwgMHgwMiwgMHg4MH19LAorICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MTAsIDB4RjQsIDB4MzAsIDB4MEYsIDB4NUQsIDB4MEUsIDB4OTUsIDB4MTUsIDB4MjgsIDB4QzAsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsyLCAyOTIsICAzMjAsIHsweDEwLCAweEY0LCAweDUwLCAweDA5LCAweEZCLCAweDA5LCAweDMzLCAweDFFLCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1ODIsICAgIDAsIHsweDBELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ2LCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgMzg3LCAxMjc2LCB7MHgwNSwgMHhGNCwgMHgzMCwgMHgyNywgMHhEOCwgMHgyNiwgMHg0OCwgMHgwMywgMHgxMCwgMHg4MywgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MSwgIDk2MCwgezB4MDUsIDB4RjQsIDB4MzAsIDB4MUQsIDB4RjIsIDB4MUMsIDB4NjIsIDB4MDQsIDB4MTAsIDB4MjMsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDA1LCAweEY0LCAweDUwLCAweDEzLCAweEE5LCAweDEyLCAweDE5LCAweDA1LCAweDE4LCAweEJGLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs2LCA3NzUsIDEyNzgsIHsweDA0LCAweEY0LCAweDMwLCAweDI3LCAweEU4LCAweDI2LCAweDU4LCAweDA1LCAweDMwLCAweDA3LCAweDAzLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ3LCAgNzM2LCB7MHgwNCwgMHhGNCwgMHgzMCwgMHgxNiwgMHhGQiwgMHgxNSwgMHg2QiwgMHgwNSwgMHgyOCwgMHhCRiwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MiwgIDQ4MCwgezB4MDQsIDB4RjQsIDB4NzAsIDB4MEUsIDB4RjksIDB4MEQsIDB4NjksIDB4MDksIDB4MjgsIDB4MjQsIDB4MDEsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NSwgMTA1MCwgezB4MDMsIDB4RjQsIDB4MzAsIDB4MjAsIDB4Q0YsIDB4MUYsIDB4M0YsIDB4MDYsIDB4NDgsIDB4QkIsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTIsICA2NTAsIHsweDAzLCAweEY0LCAweDMwLCAweDE0LCAweDQ0LCAweDEyLCAweEI0LCAweDA4LCAweDMwLCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgwMywgMHhGNCwgMHg1MCwgMHgwRiwgMHg1MiwgMHgwRCwgMHhDMiwgMHgwOSwgMHgzOCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDIwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU4LCAgNzgyLCB7MHgwMiwgMHhGNCwgMHgzMCwgMHgxOCwgMHg2QSwgMHgxNiwgMHhEQSwgMHgwQiwgMHg1OCwgMHhCRSwgMHgwMywgMHg4MH19LAorICAgICAgICAgezUsIDcwMywgIDU3NCwgezB4MDIsIDB4RjQsIDB4NTAsIDB4MTEsIDB4RTcsIDB4MTAsIDB4NTcsIDB4MEIsIDB4NDAsIDB4QkYsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDYsICAzNjQsIHsweDAyLCAweEY0LCAweDkwLCAweDBCLCAweDVDLCAweDA5LCAweENDLCAweDBFLCAweDM4LCAweEJFLCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTgsICA2NTQsIHsweDAxLCAweEY0LCAweDMwLCAweDE0LCAweDY2LCAweDEyLCAweEQ2LCAweDBCLCAweDUwLCAweEJFLCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NiwgNzc2LCAgNTMwLCB7MHgwMSwgMHhGNCwgMHg1MCwgMHgxMCwgMHg4QywgMHgwRSwgMHhGQywgMHgwQywgMHg0OCwgMHgwOCwgMHgwMywgMHg4MH19LAorICAgICAgICAgezQsIDU5MiwgIDQwNCwgezB4MDEsIDB4RjQsIDB4NzAsIDB4MEMsIDB4OTYsIDB4MEIsIDB4MDYsIDB4MEIsIDB4NDgsIDB4NTAsIDB4MDIsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MDAsIDB4RjQsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MEUsIDB4RDgsIDB4MEQsIDB4NTgsIDB4QkQsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs2LCA3NzUsICA0MjYsIHsweDAwLCAweEY0LCAweDcwLCAweDBELCAweDQ4LCAweDBCLCAweEI4LCAweDBGLCAweDUwLCAweDA3LCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NCwgNTkwLCAgMzI0LCB7MHgwMCwgMHg3QSwgMHg4OCwgMHgwQSwgMHgxQywgMHgwOCwgMHhCNCwgMHgwRSwgMHg1MCwgMHg0RSwgMHgwMiwgMHg4MH19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFZHQSAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezYsIDc3MywgMTI3MiwgezB4MjUsIDB4RjQsIDB4MzAsIDB4MjcsIDB4QjYsIDB4MjQsIDB4OTYsIDB4MDIsIDB4MzAsIDB4MDUsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTIsICA5NzYsIHsweDI1LCAweEY0LCAweDUwLCAweDFFLCAweDc4LCAweDFCLCAweDU4LCAweDAzLCAweDMwLCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ4LCAgNzM4LCB7MHgyNSwgMHhGNCwgMHg5MCwgMHgxNywgMHgwQywgMHgxMywgMHhFQywgMHgwNCwgMHgzMCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNzg4LCB7MHgyNCwgMHhGNCwgMHg3MCwgMHgxOCwgMHg5QywgMHgxNSwgMHg3QywgMHgwMywgMHg0OCwgMHhCQywgMHgwMywgMHg4MH19LAorICAgICAgICAgezYsIDc3NiwgIDY0MCwgezB4MjQsIDB4RjQsIDB4QjAsIDB4MTMsIDB4RkMsIDB4MTEsIDB4MkMsIDB4MDQsIDB4NDgsIDB4MDgsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTIsICA0ODgsIHsweDI0LCAweDdBLCAweEU4LCAweDBGLCAweDNDLCAweDBDLCAweDZDLCAweDA2LCAweDQ4LCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDIzLCAweDdBLCAweEU4LCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDAzLCAweDgwfX0sCisgICAgICAgICB7OSwgOTU3LCAgNTI2LCB7MHgyMywgMHg3QSwgMHhFOCwgMHgxMCwgMHg2OCwgMHgwRCwgMHg5OCwgMHgwNiwgMHg1OCwgMHhCRCwgMHgwMywgMHg4MH19LAorICAgICAgICAgezgsIDg5NSwgIDQ5MiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MEYsIDB4NUQsIDB4MEMsIDB4OEQsIDB4MDYsIDB4NTgsIDB4N0YsIDB4MDMsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorfTsKKworCisvKgorICogUm9tIHRhYmxlIGZvciBraWFyYSBjaGlwcworICoKKyAqIDMyIHJvbXMgdGFibGVzIChvbmUgZm9yIGVhY2ggcmVzb2x1dGlvbiA/KQorICogIDIgdGFibGVzIHBlciByb21zIChvbmUgZm9yIGVhY2ggcGFzc2VzKSAoWSwgYW5kIFUmVikKKyAqIDEyOCBieXRlcyBwZXIgcGFzc2VzCisgKi8KKworY29uc3QgdW5zaWduZWQgaW50IEtpYXJhUm9tVGFibGUgWzhdWzJdWzE2XVs4XSA9ICAKK3sKKyB7IC8qIHZlcnNpb24gMCAqLworICB7IC8qIHZlcnNpb24gMCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAwLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEgKi8KKyAgeyAvKiB2ZXJzaW9uIDEsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAyICovCisgIHsgLyogdmVyc2lvbiAyLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDIsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMGE0OWIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMyAqLworICB7IC8qIHZlcnNpb24gMywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAyNWJiNiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAzLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNmRjLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDQgKi8KKyAgeyAvKiB2ZXJzaW9uIDQsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA1ICovCisgIHsgLyogdmVyc2lvbiA1LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNDk2ZCwweDAwMDI1YmI2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDUsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjUyLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNiAqLworICB7IC8qIHZlcnNpb24gNiwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA2LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDcgKi8KKyAgeyAvKiB2ZXJzaW9uIDcsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAyNDkyNCwweDAwMDI0YjZkLDB4MDAwMmRkYjYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNywgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjZkYywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxYjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5MjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuaApAQCAtMCwwICsxLDQ1IEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKy8qIEVudHJpZXMgZm9yIHRoZSBLaWFyYSAoNzMwLzc0MC83NTApIGNhbWVyYSAqLworCisjaWZuZGVmIFBXQ19LSUFSQV9ICisjZGVmaW5lIFBXQ19LSUFSQV9ICisKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworc3RydWN0IEtpYXJhX3RhYmxlX2VudHJ5Cit7CisJY2hhciBhbHRlcm5hdGU7CQkJLyogVVNCIGFsdGVybmF0ZSBpbnRlcmZhY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWNrZXRzaXplOwkvKiBOb3JtYWwgcGFja2V0IHNpemUgKi8KKwl1bnNpZ25lZCBzaG9ydCBiYW5kbGVuZ3RoOwkvKiBCYW5kbGVuZ3RoIHdoZW4gZGVjb21wcmVzc2luZyAqLworCXVuc2lnbmVkIGNoYXIgbW9kZVsxMl07CQkvKiBwcmVjb21wdXRlZCBtb2RlIHNldHRpbmdzIGZvciBjYW0gKi8KK307CisKK2NvbnN0IGV4dGVybiBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgS2lhcmFfdGFibGVbUFNaX01BWF1bNl1bNF07Citjb25zdCBleHRlcm4gdW5zaWduZWQgaW50IEtpYXJhUm9tVGFibGVbOF1bMl1bMTZdWzhdOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW1pc2MuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YTRiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW1pc2MuYwpAQCAtMCwwICsxLDE0MCBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbSAKKyAgIFZhcmlvdXMgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgYW5kIHRhYmxlcy4KKyAgIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAicHdjLmgiCisKK3N0cnVjdCBwd2NfY29vcmQgcHdjX2ltYWdlX3NpemVzW1BTWl9NQVhdID0KK3sKKwl7IDEyOCwgIDk2LCAwIH0sCisJeyAxNjAsIDEyMCwgMCB9LAorCXsgMTc2LCAxNDQsIDAgfSwKKwl7IDMyMCwgMjQwLCAwIH0sCisJeyAzNTIsIDI4OCwgMCB9LAorCXsgNjQwLCA0ODAsIDAgfSwKK307CisKKy8qIHgseSAtPiBQU1pfICovCitpbnQgcHdjX2RlY29kZV9zaXplKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaW50IGksIGZpbmQ7CisKKwkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gYmV5b25kIG91ciBtYXggc2l6ZS4KKyAgICAgICAgICAgTkI6IHdlIGhhdmUgZGlmZmVyZW50IGxpbWl0cyBmb3IgUkFXIGFuZCBub3JtYWwgbW9kZXMuIEluIGNhc2UKKyAgICAgICAgICAgeW91IGRvbid0IGhhdmUgdGhlIGRlY29tcHJlc3NvciBsb2FkZWQgb3IgdXNlIFJBVyBtb2RlLCAKKyAgICAgICAgICAgdGhlIG1heGltdW0gdmlld2FibGUgc2l6ZSBpcyBzbWFsbGVyLgorICAgICAgICAqLworCWlmIChwZGV2LT52cGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JBVykKKwl7CisJCWlmICh3aWR0aCA+IHBkZXYtPmFic19tYXgueCB8fCBoZWlnaHQgPiBwZGV2LT5hYnNfbWF4LnkpCisJCXsKKwkJCURlYnVnKCJWSURFT19QQUxFVFRFX1JBVzogZ29pbmcgYmV5b25kIGFic19tYXguXG4iKTsKKyAgICAgICAgICAgICAgICAJcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHdpZHRoID4gcGRldi0+dmlld19tYXgueCB8fCBoZWlnaHQgPiBwZGV2LT52aWV3X21heC55KQorCQl7CisJCQlEZWJ1ZygiVklERU9fUEFMRVRURV8gbm90IFJBVzogZ29pbmcgYmV5b25kIHZpZXdfbWF4LlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBGaW5kIHRoZSBsYXJnZXN0IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBjYW1lcmEgdGhhdCBmaXRzIGludG8gdGhlCisJICAgcmVxdWVzdGVkIHNpemUuCisJICovCisJZmluZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBQU1pfTUFYOyBpKyspIHsKKwkJaWYgKHBkZXYtPmltYWdlX21hc2sgJiAoMSA8PCBpKSkgeworCQkJaWYgKHB3Y19pbWFnZV9zaXplc1tpXS54IDw9IHdpZHRoICYmIHB3Y19pbWFnZV9zaXplc1tpXS55IDw9IGhlaWdodCkKKwkJCQlmaW5kID0gaTsKKwkJfQorCX0KKwlyZXR1cm4gZmluZDsKK30KKworLyogaW5pdGlhbGl6ZSB2YXJpYWJsZXMgZGVwZW5kaW5nIG9uIHR5cGUgYW5kIGRlY29tcHJlc3NvciovCit2b2lkIHB3Y19jb25zdHJ1Y3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwljYXNlIDY0NToKKwljYXNlIDY0NjoKKwkJcGRldi0+dmlld19taW4ueCA9IDEyODsKKwkJcGRldi0+dmlld19taW4ueSA9ICA5NjsKKwkJcGRldi0+dmlld19tYXgueCA9IDM1MjsKKwkJcGRldi0+dmlld19tYXgueSA9IDI4ODsKKyAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnggID0gMzUyOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueSAgPSAyODg7CisJCXBkZXYtPmltYWdlX21hc2sgPSAxIDw8IFBTWl9TUUNJRiB8IDEgPDwgUFNaX1FDSUYgfCAxIDw8IFBTWl9DSUY7CisJCXBkZXYtPnZjaW50ZXJmYWNlID0gMjsKKwkJcGRldi0+dmVuZHBvaW50ID0gNDsKKwkJcGRldi0+ZnJhbWVfaGVhZGVyX3NpemUgPSAwOworCQlwZGV2LT5mcmFtZV90cmFpbGVyX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIDY3NToKKwljYXNlIDY4MDoKKwljYXNlIDY5MDoKKwkJcGRldi0+dmlld19taW4ueCA9IDEyODsKKwkJcGRldi0+dmlld19taW4ueSA9ICA5NjsKKwkJLyogQW50aGlsbCBidWcgIzM4OiBQV0MgYWx3YXlzIHJlcG9ydHMgbWF4IHNpemUsIGV2ZW4gd2l0aG91dCBQV0NYICovCisJCXBkZXYtPnZpZXdfbWF4LnggPSA2NDA7CisJCXBkZXYtPnZpZXdfbWF4LnkgPSA0ODA7CisJCXBkZXYtPmltYWdlX21hc2sgPSAxIDw8IFBTWl9TUUNJRiB8IDEgPDwgUFNaX1FTSUYgfCAxIDw8IFBTWl9RQ0lGIHwgMSA8PCBQU1pfU0lGIHwgMSA8PCBQU1pfQ0lGIHwgMSA8PCBQU1pfVkdBOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueCA9IDY0MDsKKyAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnkgPSA0ODA7CisJCXBkZXYtPnZjaW50ZXJmYWNlID0gMzsKKwkJcGRldi0+dmVuZHBvaW50ID0gNDsKKwkJcGRldi0+ZnJhbWVfaGVhZGVyX3NpemUgPSAwOworCQlwZGV2LT5mcmFtZV90cmFpbGVyX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIDcyMDoKKwljYXNlIDczMDoKKwljYXNlIDc0MDoKKwljYXNlIDc1MDoKKwkJcGRldi0+dmlld19taW4ueCA9IDE2MDsKKwkJcGRldi0+dmlld19taW4ueSA9IDEyMDsKKwkJcGRldi0+dmlld19tYXgueCA9IDY0MDsKKwkJcGRldi0+dmlld19tYXgueSA9IDQ4MDsKKwkJcGRldi0+aW1hZ2VfbWFzayA9IDEgPDwgUFNaX1FTSUYgfCAxIDw8IFBTWl9TSUYgfCAxIDw8IFBTWl9WR0E7CisgICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC54ID0gNjQwOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueSA9IDQ4MDsKKwkJcGRldi0+dmNpbnRlcmZhY2UgPSAzOworCQlwZGV2LT52ZW5kcG9pbnQgPSA1OworCQlwZGV2LT5mcmFtZV9oZWFkZXJfc2l6ZSA9IFRPVUNBTV9IRUFERVJfU0laRTsKKwkJcGRldi0+ZnJhbWVfdHJhaWxlcl9zaXplID0gVE9VQ0FNX1RSQUlMRVJfU0laRTsKKwkJYnJlYWs7CisJfQorCURlYnVnKCJ0eXBlID0gJWRcbiIscGRldi0+dHlwZSk7CisJcGRldi0+dnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMFA7IC8qIGRlZmF1bHQgKi8KKwlwZGV2LT52aWV3X21pbi5zaXplID0gcGRldi0+dmlld19taW4ueCAqIHBkZXYtPnZpZXdfbWluLnk7CisJcGRldi0+dmlld19tYXguc2l6ZSA9IHBkZXYtPnZpZXdfbWF4LnggKiBwZGV2LT52aWV3X21heC55OworCS8qIGxlbmd0aCBvZiBpbWFnZSwgaW4gWVVWIGZvcm1hdDsgYWx3YXlzIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkuICovCisJcGRldi0+bGVuX3Blcl9pbWFnZSA9IChwZGV2LT5hYnNfbWF4LnggKiBwZGV2LT5hYnNfbWF4LnkgKiAzKSAvIDI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1uYWxhLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW5hbGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM1Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1uYWxhLmgKQEAgLTAsMCArMSw2NiBAQAorICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIHswLCAwLCB7MHgwNCwgMHgwMSwgMHgwM319LAorICAgICAgezgsIDAsIHsweDA1LCAweDAxLCAweDAzfX0sCisgICAgICB7NywgMCwgezB4MDgsIDB4MDEsIDB4MDN9fSwKKyAgICAgIHs3LCAwLCB7MHgwQSwgMHgwMSwgMHgwM319LAorICAgICAgezYsIDAsIHsweDBDLCAweDAxLCAweDAzfX0sCisgICAgICB7NSwgMCwgezB4MEYsIDB4MDEsIDB4MDN9fSwKKyAgICAgIHs0LCAwLCB7MHgxNCwgMHgwMSwgMHgwM319LAorICAgICAgezMsIDAsIHsweDE4LCAweDAxLCAweDAzfX0sCisgICB9LAorICAgLyogUVNJRiAqLworICAgeworICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIHswLCAwLCB7MHgwNCwgMHgwMSwgMHgwMn19LAorICAgICAgezgsIDAsIHsweDA1LCAweDAxLCAweDAyfX0sCisgICAgICB7NywgMCwgezB4MDgsIDB4MDEsIDB4MDJ9fSwKKyAgICAgIHs2LCAwLCB7MHgwQSwgMHgwMSwgMHgwMn19LAorICAgICAgezUsIDAsIHsweDBDLCAweDAxLCAweDAyfX0sCisgICAgICB7NCwgMCwgezB4MEYsIDB4MDEsIDB4MDJ9fSwKKyAgICAgIHsxLCAwLCB7MHgxNCwgMHgwMSwgMHgwMn19LAorICAgICAgezEsIDAsIHsweDE4LCAweDAxLCAweDAyfX0sCisgICB9LAorICAgLyogU0lGICovCisgICB7CisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICB9LAorICAgLyogQ0lGICovCisgICB7CisgICAgICB7NCwgMCwgezB4MDQsIDB4MDEsIDB4MDF9fSwKKyAgICAgIHs3LCAxLCB7MHgwNSwgMHgwMywgMHgwMX19LAorICAgICAgezYsIDEsIHsweDA4LCAweDAzLCAweDAxfX0sCisgICAgICB7NCwgMSwgezB4MEEsIDB4MDMsIDB4MDF9fSwKKyAgICAgIHszLCAxLCB7MHgwQywgMHgwMywgMHgwMX19LAorICAgICAgezIsIDEsIHsweDBGLCAweDAzLCAweDAxfX0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICB9LAorICAgLyogVkdBICovCisgICB7ICAKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1MGE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uYwpAQCAtMCwwICsxLDE0NDYgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisvKiBUaGlzIHRhYmxlcyBjb250YWlucyBlbnRyaWVzIGZvciB0aGUgNjc1LzY4MC82OTAgKFRpbW9uKSBjYW1lcmEsIHdpdGgKKyAgIDQgZGlmZmVyZW50IHF1YWxpdGllcyAobm8gY29tcHJlc3Npb24sIGxvdywgbWVkaXVtLCBoaWdoKS4KKyAgIEl0IGxpc3RzIHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciBzYWlkIG1vZGUgYnkgaXRzIGFsdGVybmF0ZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gQW4gYWx0ZXJuYXRlIG9mIDAgbWVhbnMgdGhhdCB0aGUgbW9kZSBpcyB1bmF2YWlsYWJsZS4KKworICAgVGhlcmUgYXJlIDYgKiA0ICogNCBlbnRyaWVzOgorICAgICA2IGRpZmZlcmVudCByZXNvbHV0aW9ucyBzdWJxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhCisgICAgIDYgZnJhbWVyYXRlczogNSwgMTAsIDE1LCAyMCwgMjUsIDMwCisgICAgIDQgY29tcHJlc3Npb24gbW9kaTogbm9uZSwgbG93LCBtZWRpdW0sIGhpZ2gKKworICAgV2hlbiBhbiB1bmNvbXByZXNzZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbmV4dCBhdmFpbGFibGUgY29tcHJlc3NlZCBtb2RlCisgICB3aWxsIGJlIGNob3NlbiAodW5sZXNzIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJzZW50KS4gU29tZXRpbWVzIHRoZXJlIGFyZSBvbmx5CisgICAxIG9yIDIgY29tcHJlc3NlZCBtb2RlcyBhdmFpbGFibGU7IGluIHRoYXQgY2FzZSBlbnRyaWVzIGFyZSBkdXBsaWNhdGVkLgorKi8KKworI2luY2x1ZGUgInB3Yy10aW1vbi5oIgorCitjb25zdCBzdHJ1Y3QgVGltb25fdGFibGVfZW50cnkgVGltb25fdGFibGVbUFNaX01BWF1bNl1bNF0gPQoreworICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTQwLCAgICAwLCB7MHgwNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg4QywgMHhGQywgMHg4MCwgMHgwMn19LAorICAgICAgICAgezEsIDE0MCwgICAgMCwgezB4MDUsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OEMsIDB4RkMsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTQwLCAgICAwLCB7MHgwNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg4QywgMHhGQywgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezIsIDI4MCwgICAgMCwgezB4MDQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MTgsIDB4QTksIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjgwLCAgICAwLCB7MHgwNCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgxOCwgMHhBOSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezIsIDI4MCwgICAgMCwgezB4MDQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MTgsIDB4QTksIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MywgNDEwLCAgICAwLCB7MHgwMywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5QSwgMHg3MSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezMsIDQxMCwgICAgMCwgezB4MDMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OUEsIDB4NzEsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTU5LCAgICAwLCB7MHgwMiwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgyRiwgMHg1NiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezQsIDU1OSwgICAgMCwgezB4MDIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MkYsIDB4NTYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTU5LCAgICAwLCB7MHgwMiwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgyRiwgMHg1NiwgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezUsIDY1OSwgICAgMCwgezB4MDEsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OTMsIDB4NDYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NSwgNjU5LCAgICAwLCB7MHgwMSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5MywgMHg0NiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezUsIDY1OSwgICAgMCwgezB4MDEsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OTMsIDB4NDYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NywgODM4LCAgICAwLCB7MHgwMCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg0NiwgMHgzQiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezcsIDgzOCwgICAgMCwgezB4MDAsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDYsIDB4M0IsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgyRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHhGQywgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MkQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4RkMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgyRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHhGQywgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezIsIDI5MSwgICAgMCwgezB4MkMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgyQywgMHhGNCwgMHgwNSwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhCRiwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MSwgIDYzMCwgezB4MkMsIDB4RjQsIDB4MDUsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QkYsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHszLCA0MzcsICAgIDAsIHsweDJCLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEI1LCAweDZELCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgNjQwLCB7MHgyQiwgMHhGNCwgMHgwNSwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgwOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MSwgIDY0MCwgezB4MkIsIDB4RjQsIDB4MDUsIDB4MTMsIDB4RjcsIDB4MTMsIDB4MkYsIDB4MTMsIDB4MDgsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTEsICA0MjAsIHsweDJCLCAweEY0LCAweDBELCAweDBELCAweDFCLCAweDBDLCAweDUzLCAweDFFLCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTg4LCAgICAwLCB7MHgyQSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0QywgMHg1MiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0NywgIDczMCwgezB4MkEsIDB4RjQsIDB4MDUsIDB4MTYsIDB4QzksIDB4MTYsIDB4MDEsIDB4MEUsIDB4MTgsIDB4QkYsIDB4NjksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTIsICA0NzYsIHsweDJBLCAweEY0LCAweDBELCAweDBFLCAweEQ4LCAweDBFLCAweDEwLCAweDE5LCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkyLCAgMzEyLCB7MHgyQSwgMHhGNCwgMHgxRCwgMHgwOSwgMHhCMywgMHgwOCwgMHhFQiwgMHgxRSwgMHgxOCwgMHhDMCwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezUsIDcwMywgICAgMCwgezB4MjksIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QkYsIDB4NDIsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDcsICA2MTAsIHsweDI5LCAweEY0LCAweDA1LCAweDEzLCAweDBCLCAweDEyLCAweDQzLCAweDE0LCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkyLCAgMzk4LCB7MHgyOSwgMHhGNCwgMHgwRCwgMHgwQywgMHg2QywgMHgwQiwgMHhBNCwgMHgxRSwgMHgxOCwgMHgyNCwgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MiwgIDI2MiwgezB4MjksIDB4RjQsIDB4MjUsIDB4MDgsIDB4MjMsIDB4MDcsIDB4NUIsIDB4MUUsIDB4MTgsIDB4QzAsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs4LCA4NzMsICAgIDAsIHsweDI4LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDY5LCAweDM3LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7NSwgNzA0LCAgNzc0LCB7MHgyOCwgMHhGNCwgMHgwNSwgMHgxOCwgMHgyMSwgMHgxNywgMHg1OSwgMHgwRiwgMHgxOCwgMHhDMCwgMHg0MiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MjgsIDB4RjQsIDB4MDUsIDB4MEYsIDB4NUQsIDB4MEUsIDB4OTUsIDB4MTUsIDB4MTgsIDB4QzAsIDB4NjksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICAzMjAsIHsweDI4LCAweEY0LCAweDFELCAweDA5LCAweEZCLCAweDA5LCAweDMzLCAweDFFLCAweDE4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MSwgMTkzLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhDMSwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MywgICAgMCwgezB4MEQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4QzEsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkzLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhDMSwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezMsIDM4NSwgICAgMCwgezB4MEMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODEsIDB4NzksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA4MDAsIHsweDBDLCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDExLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgODAwLCB7MHgwQywgMHhGNCwgMHgwNSwgMHgxOCwgMHhGNCwgMHgxOCwgMHgxOCwgMHgxMSwgMHgwOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5NCwgIDUzMiwgezB4MEMsIDB4RjQsIDB4MDUsIDB4MTAsIDB4OUEsIDB4MEYsIDB4QkUsIDB4MUIsIDB4MDgsIDB4QzIsIDB4RjAsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1NzcsICAgIDAsIHsweDBCLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQxLCAweDUyLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ3LCAgODE4LCB7MHgwQiwgMHhGNCwgMHgwNSwgMHgxOSwgMHg4OSwgMHgxOCwgMHhBRCwgMHgwRiwgMHgxMCwgMHhCRiwgMHg2OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MiwgIDUzNCwgezB4MEIsIDB4RjQsIDB4MDUsIDB4MTAsIDB4QTMsIDB4MEYsIDB4QzcsIDB4MTksIDB4MTAsIDB4MjQsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTUsICAzNTYsIHsweDBCLCAweEY0LCAweDE1LCAweDBCLCAweDExLCAweDBBLCAweDM1LCAweDFFLCAweDEwLCAweEMzLCAweEYwLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7NiwgNzc2LCAgICAwLCB7MHgwQSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwOCwgMHgzRiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MSwgIDgwNCwgezB4MEEsIDB4RjQsIDB4MDUsIDB4MTksIDB4MUUsIDB4MTgsIDB4NDIsIDB4MEYsIDB4MTgsIDB4NEYsIDB4NEUsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDcsICA2MDgsIHsweDBBLCAweEY0LCAweDA1LCAweDEyLCAweEZELCAweDEyLCAweDIxLCAweDE1LCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgMzk2LCB7MHgwQSwgMHhGNCwgMHgxNSwgMHgwQywgMHg1RSwgMHgwQiwgMHg4MiwgMHgxRSwgMHgxOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezksIDkyOCwgICAgMCwgezB4MDksIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4QTAsIDB4MzMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA3MDMsICA4MDAsIHsweDA5LCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDEwLCAweDE4LCAweEJGLCAweDQyLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ3LCAgNTA4LCB7MHgwOSwgMHhGNCwgMHgwRCwgMHgwRiwgMHhEMiwgMHgwRSwgMHhGNiwgMHgxQiwgMHgxOCwgMHhCRiwgMHg2OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MiwgIDMzMiwgezB4MDksIDB4RjQsIDB4MUQsIDB4MEEsIDB4NUEsIDB4MDksIDB4N0UsIDB4MUUsIDB4MTgsIDB4MjQsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NiwgIDg3NiwgezB4MDgsIDB4RjQsIDB4MDUsIDB4MUIsIDB4NTgsIDB4MUEsIDB4N0MsIDB4MEUsIDB4MjAsIDB4QkMsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA1NDIsIHsweDA4LCAweEY0LCAweDA1LCAweDEwLCAweEU0LCAweDEwLCAweDA4LCAweDE3LCAweDIwLCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgMjY2LCB7MHgwOCwgMHhGNCwgMHgyNSwgMHgwOCwgMHg0OCwgMHgwNywgMHg2QywgMHgxRSwgMHgyMCwgMHgyMywgMHhBMSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7NCwgNTgyLCAgICAwLCB7MHgzNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0NiwgMHg1MiwgMHg2MCwgMHgwMn19LAorICAgICAgICAgezMsIDM4NywgMTI3NiwgezB4MzUsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RDgsIDB4MjYsIDB4NDgsIDB4MDMsIDB4MTAsIDB4ODMsIDB4NzksIDB4NjAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA5NjAsIHsweDM1LCAweEY0LCAweDBELCAweDFELCAweEYyLCAweDFDLCAweDYyLCAweDA0LCAweDEwLCAweDIzLCAweEExLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgzNSwgMHhGNCwgMHgxRCwgMHgxMywgMHhBOSwgMHgxMiwgMHgxOSwgMHgwNSwgMHgwOCwgMHhCRiwgMHhGNCwgMHg2MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7NiwgNzc1LCAxMjc4LCB7MHgzNCwgMHhGNCwgMHgwNSwgMHgyNywgMHhFOCwgMHgyNiwgMHg1OCwgMHgwNSwgMHgzMCwgMHgwNywgMHgzRiwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0NywgIDczNiwgezB4MzQsIDB4RjQsIDB4MTUsIDB4MTYsIDB4RkIsIDB4MTUsIDB4NkIsIDB4MDUsIDB4MTgsIDB4QkYsIDB4NjksIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA0ODAsIHsweDM0LCAweEY0LCAweDJELCAweDBFLCAweEY5LCAweDBELCAweDY5LCAweDA5LCAweDE4LCAweDIzLCAweEExLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTUsIDEwNTAsIHsweDMzLCAweEY0LCAweDA1LCAweDIwLCAweENGLCAweDFGLCAweDNGLCAweDA2LCAweDQ4LCAweEJCLCAweDMzLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTkxLCAgNjUwLCB7MHgzMywgMHhGNCwgMHgxNSwgMHgxNCwgMHg0NCwgMHgxMiwgMHhCNCwgMHgwOCwgMHgzMCwgMHg0RiwgMHg0RSwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MzMsIDB4RjQsIDB4MjUsIDB4MEYsIDB4NTIsIDB4MEQsIDB4QzIsIDB4MDksIDB4MjgsIDB4QzAsIDB4NjksIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1OCwgIDc4MiwgezB4MzIsIDB4RjQsIDB4MEQsIDB4MTgsIDB4NkEsIDB4MTYsIDB4REEsIDB4MEIsIDB4NTgsIDB4QkUsIDB4MzMsIDB4RDAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA3MDMsICA1NzQsIHsweDMyLCAweEY0LCAweDFELCAweDExLCAweEU3LCAweDEwLCAweDU3LCAweDBCLCAweDQwLCAweEJGLCAweDQyLCAweEQwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ2LCAgMzY0LCB7MHgzMiwgMHhGNCwgMHgzRCwgMHgwQiwgMHg1QywgMHgwOSwgMHhDQywgMHgwRSwgMHgzMCwgMHhCRSwgMHg2OSwgMHhEMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU4LCAgNjU0LCB7MHgzMSwgMHhGNCwgMHgxNSwgMHgxNCwgMHg2NiwgMHgxMiwgMHhENiwgMHgwQiwgMHg1MCwgMHhCRSwgMHgzMywgMHg5MCwgMHgwMn19LAorICAgICAgICAgezYsIDc3NiwgIDUzMCwgezB4MzEsIDB4RjQsIDB4MjUsIDB4MTAsIDB4OEMsIDB4MEUsIDB4RkMsIDB4MEMsIDB4NDgsIDB4MDgsIDB4M0YsIDB4OTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA0MDQsIHsweDMxLCAweEY0LCAweDM1LCAweDBDLCAweDk2LCAweDBCLCAweDA2LCAweDBCLCAweDM4LCAweDUwLCAweDRFLCAweDkwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDMwLCAweEY0LCAweDI1LCAweDEwLCAweDY4LCAweDBFLCAweEQ4LCAweDBELCAweDU4LCAweEJELCAweDMzLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7NiwgNzc1LCAgNDI2LCB7MHgzMCwgMHhGNCwgMHgzNSwgMHgwRCwgMHg0OCwgMHgwQiwgMHhCOCwgMHgwRiwgMHg1MCwgMHgwNywgMHgzRiwgMHg2MCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MCwgIDMyNCwgezB4MzAsIDB4N0EsIDB4NEIsIDB4MEEsIDB4MUMsIDB4MDgsIDB4QjQsIDB4MEUsIDB4NDAsIDB4NEUsIDB4NTIsIDB4NjAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogQ0lGICovCisgICB7CisgICAgICAvKiA1IGZwcyAqLworICAgICAgeworICAgICAgICAgezYsIDc3MSwgICAgMCwgezB4MTUsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDMsIDB4M0YsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA0NjUsIDEyNzgsIHsweDE1LCAweEY0LCAweDA1LCAweDI3LCAweEVFLCAweDI2LCAweDM2LCAweDAzLCAweDE4LCAweEQxLCAweDY1LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgODAwLCB7MHgxNSwgMHhGNCwgMHgxNSwgMHgxOCwgMHhGNCwgMHgxNywgMHgzQywgMHgwNSwgMHgxOCwgMHgyMywgMHhBMSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MywgIDUyOCwgezB4MTUsIDB4RjQsIDB4MkQsIDB4MTAsIDB4N0UsIDB4MEUsIDB4QzYsIDB4MEEsIDB4MTgsIDB4QzEsIDB4RjQsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDkzMiwgMTI3OCwgezB4MTQsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RUUsIDB4MjYsIDB4MzYsIDB4MDQsIDB4MzAsIDB4QTQsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTEsICA4MTIsIHsweDE0LCAweEY0LCAweDE1LCAweDE5LCAweDU2LCAweDE3LCAweDlFLCAweDA2LCAweDI4LCAweDRGLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgNDAwLCB7MHgxNCwgMHhGNCwgMHgzRCwgMHgwQywgMHg3QSwgMHgwQSwgMHhDMiwgMHgwRSwgMHgyOCwgMHgyMywgMHhBMSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgODc2LCB7MHgxMywgMHhGNCwgMHgwRCwgMHgxQiwgMHg1OCwgMHgxOSwgMHhBMCwgMHgwNSwgMHgzOCwgMHhCQywgMHgzMywgMHg2MCwgMHgwMn19LAorICAgICAgICAgezUsIDcwMywgIDY0NCwgezB4MTMsIDB4RjQsIDB4MUQsIDB4MTQsIDB4MUMsIDB4MTIsIDB4NjQsIDB4MDgsIDB4MzgsIDB4QkYsIDB4NDIsIDB4NjAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDgsICA0MTAsIHsweDEzLCAweEY0LCAweDNELCAweDBDLCAweEM0LCAweDBCLCAweDBDLCAweDBFLCAweDM4LCAweEMwLCAweDY5LCAweDYwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTYsICA2NTAsIHsweDEyLCAweEY0LCAweDFELCAweDE0LCAweDRBLCAweDEyLCAweDkyLCAweDA5LCAweDQ4LCAweEJDLCAweDMzLCAweDEwLCAweDAzfX0sCisgICAgICAgICB7NiwgNzc2LCAgNTI4LCB7MHgxMiwgMHhGNCwgMHgyRCwgMHgxMCwgMHg3RSwgMHgwRSwgMHhDNiwgMHgwQSwgMHg0MCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgwM319LAorICAgICAgICAgezQsIDU5MSwgIDQwMiwgezB4MTIsIDB4RjQsIDB4M0QsIDB4MEMsIDB4OEYsIDB4MEEsIDB4RDcsIDB4MEUsIDB4NDAsIDB4NEYsIDB4NEUsIDB4MTAsIDB4MDN9fSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NiwgIDU0NCwgezB4MTEsIDB4RjQsIDB4MjUsIDB4MTAsIDB4RjQsIDB4MEYsIDB4M0MsIDB4MEEsIDB4NDgsIDB4QkMsIDB4MzMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHs3LCA4NDAsICA0NzgsIHsweDExLCAweEY0LCAweDJELCAweDBFLCAweEVCLCAweDBELCAweDMzLCAweDBCLCAweDQ4LCAweDQ4LCAweDNCLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7NSwgNzAzLCAgNDAwLCB7MHgxMSwgMHhGNCwgMHgzRCwgMHgwQywgMHg3QSwgMHgwQSwgMHhDMiwgMHgwRSwgMHg0OCwgMHhCRiwgMHg0MiwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNDM4LCB7MHgxMCwgMHhGNCwgMHgzNSwgMHgwRCwgMHhBQywgMHgwQiwgMHhGNCwgMHgwRCwgMHg1MCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorICAgICAgICAgezcsIDgzOCwgIDM4NCwgezB4MTAsIDB4RjQsIDB4NDUsIDB4MEIsIDB4RkQsIDB4MEEsIDB4NDUsIDB4MEYsIDB4NTAsIDB4NDYsIDB4M0IsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs2LCA3NzMsICAzNTQsIHsweDEwLCAweDdBLCAweDRCLCAweDBCLCAweDBDLCAweDA5LCAweDgwLCAweDEwLCAweDUwLCAweDA1LCAweDNGLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFZHQSAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezYsIDc3MywgMTI3MiwgezB4MUQsIDB4RjQsIDB4MTUsIDB4MjcsIDB4QjYsIDB4MjQsIDB4OTYsIDB4MDIsIDB4MzAsIDB4MDUsIDB4M0YsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA5NzYsIHsweDFELCAweEY0LCAweDI1LCAweDFFLCAweDc4LCAweDFCLCAweDU4LCAweDAzLCAweDMwLCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ4LCAgNzM4LCB7MHgxRCwgMHhGNCwgMHgzRCwgMHgxNywgMHgwQywgMHgxMywgMHhFQywgMHgwNCwgMHgzMCwgMHhDMCwgMHg2OSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNzg4LCB7MHgxQywgMHhGNCwgMHgzNSwgMHgxOCwgMHg5QywgMHgxNSwgMHg3QywgMHgwMywgMHg0OCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorICAgICAgICAgezYsIDc3NiwgIDY0MCwgezB4MUMsIDB4N0EsIDB4NTMsIDB4MTMsIDB4RkMsIDB4MTEsIDB4MkMsIDB4MDQsIDB4NDgsIDB4MDgsIDB4M0YsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTIsICA0ODgsIHsweDFDLCAweDdBLCAweDZCLCAweDBGLCAweDNDLCAweDBDLCAweDZDLCAweDA2LCAweDQ4LCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDFCLCAweDdBLCAweDYzLCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDMzLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7OSwgOTU3LCAgNTI2LCB7MHgxQiwgMHg3QSwgMHg2MywgMHgxMCwgMHg2OCwgMHgwRCwgMHg5OCwgMHgwNiwgMHg1OCwgMHhCRCwgMHgzMywgMHg4MCwgMHgwMn19LAorICAgICAgICAgezgsIDg5NSwgIDQ5MiwgezB4MUIsIDB4N0EsIDB4NkIsIDB4MEYsIDB4NUQsIDB4MEMsIDB4OEQsIDB4MDYsIDB4NTgsIDB4N0YsIDB4MzcsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorfTsKKworLyoKKyAqIDE2IHZlcnNpb25zOgorICogICAyIHRhYmxlcyAgKG9uZSBmb3IgWSwgYW5kIG9uZSBmb3IgVSZWKQorICogICAxNiBsZXZlbHMgb2YgZGV0YWlscyBwZXIgdGFibGVzCisgKiAgIDggYmxvY3MKKyAqLworCitjb25zdCB1bnNpZ25lZCBpbnQgVGltb25Sb21UYWJsZSBbMTZdWzJdWzE2XVs4XSA9ICAKK3sKKyB7IC8qIHZlcnNpb24gMCAqLworICB7IC8qIHZlcnNpb24gMCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDEsCisgICAgMHgwMDAwMDAwMSwweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwKKyAgICAweDAwMDAwMDAxLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAwLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwKKyAgICAweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDEsMHgwMDAwMDAwOSwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDA0OSwweDAwMDAwMDAxLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDQ5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEgKi8KKyAgeyAvKiB2ZXJzaW9uIDEsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDEsMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAwMDQ5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAyICovCisgIHsgLyogdmVyc2lvbiAyLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDIsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMyAqLworICB7IC8qIHZlcnNpb24gMywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAzLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDQgKi8KKyAgeyAvKiB2ZXJzaW9uIDQsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA1ICovCisgIHsgLyogdmVyc2lvbiA1LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDUsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMTI0ZGIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAxMjRkYiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNiAqLworICB7IC8qIHZlcnNpb24gNiwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAyNWJiNiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA2LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNmRjLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDcgKi8KKyAgeyAvKiB2ZXJzaW9uIDcsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYzk2ZSwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDI0OTZkLDB4MDAwMjViYjYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNywgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA4ICovCisgIHsgLyogdmVyc2lvbiA4LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDI0Yjc2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMjRiNzYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMmVmZmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDgsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDI0OTZkLDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gOSAqLworICB7IC8qIHZlcnNpb24gOSwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA5LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyNTIsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEwICovCisgIHsgLyogdmVyc2lvbiAxMCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiOTI1LDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMjQ5NmQsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxMCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAxMSAqLworICB7IC8qIHZlcnNpb24gMTEsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0OTZkLDB4MDAwMjViYjYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMTEsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjUyLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMTIgKi8KKyAgeyAvKiB2ZXJzaW9uIDEyLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDEyLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDEzICovCisgIHsgLyogdmVyc2lvbiAxMywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDI0OTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxMywgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjZkYywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxYjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAxNCAqLworICB7IC8qIHZlcnNpb24gMTQsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMjQ5NmQsMHgwMDAyNGI3NiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMWI2ZGIsCisgICAgMHgwMDAyNDkyNCwweDAwMDJkYjZkLDB4MDAwMzZkYjYsMHgwMDAyZWZmZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMTQsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTM2ZTQsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMWI2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMTUgKi8KKyAgeyAvKiB2ZXJzaW9uIDE1LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMjQ5NmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNDk2ZCwweDAwMDI1YmI2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0YjZkLDB4MDAwMjViYjYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDFiNmRiLAorICAgIDB4MDAwMjQ5MjQsMHgwMDAyZGI2ZCwweDAwMDM2ZGI2LDB4MDAwMmVmZmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDE1LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxYjcyNCwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjcyNCwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiOTI1LDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI5MjUsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjkyNSwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiOTI1LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDFiNmRiLAorICAgIDB4MDAwMjQ5MjQsMHgwMDAyNDk2ZCwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2YjM3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uaApAQCAtMCwwICsxLDYxIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKworCisvKiBUaGlzIHRhYmxlcyBjb250YWlucyBlbnRyaWVzIGZvciB0aGUgNjc1LzY4MC82OTAgKFRpbW9uKSBjYW1lcmEsIHdpdGgKKyAgIDQgZGlmZmVyZW50IHF1YWxpdGllcyAobm8gY29tcHJlc3Npb24sIGxvdywgbWVkaXVtLCBoaWdoKS4KKyAgIEl0IGxpc3RzIHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciBzYWlkIG1vZGUgYnkgaXRzIGFsdGVybmF0ZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gQW4gYWx0ZXJuYXRlIG9mIDAgbWVhbnMgdGhhdCB0aGUgbW9kZSBpcyB1bmF2YWlsYWJsZS4KKworICAgVGhlcmUgYXJlIDYgKiA0ICogNCBlbnRyaWVzOgorICAgICA2IGRpZmZlcmVudCByZXNvbHV0aW9ucyBzdWJxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhCisgICAgIDYgZnJhbWVyYXRlczogNSwgMTAsIDE1LCAyMCwgMjUsIDMwCisgICAgIDQgY29tcHJlc3Npb24gbW9kaTogbm9uZSwgbG93LCBtZWRpdW0sIGhpZ2gKKworICAgV2hlbiBhbiB1bmNvbXByZXNzZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbmV4dCBhdmFpbGFibGUgY29tcHJlc3NlZCBtb2RlCisgICB3aWxsIGJlIGNob3NlbiAodW5sZXNzIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJzZW50KS4gU29tZXRpbWVzIHRoZXJlIGFyZSBvbmx5CisgICAxIG9yIDIgY29tcHJlc3NlZCBtb2RlcyBhdmFpbGFibGU7IGluIHRoYXQgY2FzZSBlbnRyaWVzIGFyZSBkdXBsaWNhdGVkLgorKi8KKworI2lmbmRlZiBQV0NfVElNT05fSAorI2RlZmluZSBQV0NfVElNT05fSAorCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisKK3N0cnVjdCBUaW1vbl90YWJsZV9lbnRyeQoreworCWNoYXIgYWx0ZXJuYXRlOwkJCS8qIFVTQiBhbHRlcm5hdGUgaW50ZXJmYWNlICovCisJdW5zaWduZWQgc2hvcnQgcGFja2V0c2l6ZTsJLyogTm9ybWFsIHBhY2tldCBzaXplICovCisJdW5zaWduZWQgc2hvcnQgYmFuZGxlbmd0aDsJLyogQmFuZGxlbmd0aCB3aGVuIGRlY29tcHJlc3NpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIG1vZGVbMTNdOwkJLyogcHJlY29tcHV0ZWQgbW9kZSBzZXR0aW5ncyBmb3IgY2FtICovCit9OworCitjb25zdCBleHRlcm4gc3RydWN0IFRpbW9uX3RhYmxlX2VudHJ5IFRpbW9uX3RhYmxlW1BTWl9NQVhdWzZdWzRdOworY29uc3QgZXh0ZXJuIHVuc2lnbmVkIGludCBUaW1vblJvbVRhYmxlIFsxNl1bMl1bMTZdWzhdOworCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2MmU0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICBEZWNvbXByZXNzaW9uIGZyb250ZW5kLgorICAgKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSAicHdjLmgiCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKyNpbmNsdWRlICJwd2MtZGVjMS5oIgorI2luY2x1ZGUgInB3Yy1kZWMyMy5oIgorCitpbnQgcHdjX2RlY29tcHJlc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWY7CisJaW50IG4sIGxpbmUsIGNvbCwgc3RyaWRlOworCXZvaWQgKnl1diwgKmltYWdlOworCXUxNiAqc3JjOworCXUxNiAqZHN0eSwgKmRzdHUsICpkc3R2OworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKFBXQ19NQUdJQykKKwlpZiAocGRldi0+bWFnaWMgIT0gUFdDX01BR0lDKSB7CisJCUVycigicHdjX2RlY29tcHJlc3MoKTogbWFnaWMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKyNlbmRpZgorCisJZmJ1ZiA9IHBkZXYtPnJlYWRfZnJhbWU7CisJaWYgKGZidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaW1hZ2UgPSBwZGV2LT5pbWFnZV9wdHJbcGRldi0+ZmlsbF9pbWFnZV07CisJaWYgKCFpbWFnZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl5dXYgPSBmYnVmLT5kYXRhICsgcGRldi0+ZnJhbWVfaGVhZGVyX3NpemU7ICAvKiBTa2lwIGhlYWRlciAqLworCisJLyogUmF3IGZvcm1hdDsgdGhhdCdzIGVhc3kuLi4gKi8KKwlpZiAocGRldi0+dnBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SQVcpCisJeworCQltZW1jcHkoaW1hZ2UsIHl1diwgcGRldi0+ZnJhbWVfc2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwZGV2LT52YmFuZGxlbmd0aCA9PSAwKSB7CisJCS8qIFVuY29tcHJlc3NlZCBtb2RlLiBXZSBjb3B5IHRoZSBkYXRhIGludG8gdGhlIG91dHB1dCBidWZmZXIsCisJCSAgIHVzaW5nIHRoZSB2aWV3cG9ydCBzaXplICh3aGljaCBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGltYWdlCisJCSAgIHNpemUpLiBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gZG8gYSBiaXQgb2YgYnl0ZSBzdHVmZmluZworCQkgICB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IGZvcm1hdC9zaXplLgorCQkgKi8KKwkJCS8qCisJCQkgKiBXZSBkbyBzb21lIGJ5dGUgc2h1ZmZsaW5nIGhlcmUgdG8gZ28gZnJvbSB0aGUKKwkJCSAqIG5hdGl2ZSBmb3JtYXQgdG8gWVVWNDIwUC4KKwkJCSAqLworCQkJc3JjID0gKHUxNiAqKXl1djsKKwkJCW4gPSBwZGV2LT52aWV3LnggKiBwZGV2LT52aWV3Lnk7CisKKwkJCS8qIG9mZnNldCBpbiBZIHBsYW5lICovCisJCQlzdHJpZGUgPSBwZGV2LT52aWV3LnggKiBwZGV2LT5vZmZzZXQueSArIHBkZXYtPm9mZnNldC54OworCQkJZHN0eSA9ICh1MTYgKikoaW1hZ2UgKyBzdHJpZGUpOworCisJCQkvKiBvZmZzZXRzIGluIFUvViBwbGFuZXMgKi8KKwkJCXN0cmlkZSA9IHBkZXYtPnZpZXcueCAqIHBkZXYtPm9mZnNldC55IC8gNCArIHBkZXYtPm9mZnNldC54IC8gMjsKKwkJCWRzdHUgPSAodTE2ICopKGltYWdlICsgbiArICAgICAgICAgc3RyaWRlKTsKKwkJCWRzdHYgPSAodTE2ICopKGltYWdlICsgbiArIG4gLyA0ICsgc3RyaWRlKTsKKworCQkJLyogaW5jcmVtZW50IGFmdGVyIGVhY2ggbGluZSAqLworCQkJc3RyaWRlID0gKHBkZXYtPnZpZXcueCAtIHBkZXYtPmltYWdlLngpIC8gMjsgLyogdTE2IGlzIDIgYnl0ZXMgKi8KKworCQkJZm9yIChsaW5lID0gMDsgbGluZSA8IHBkZXYtPmltYWdlLnk7IGxpbmUrKykgeworCQkJCWZvciAoY29sID0gMDsgY29sIDwgcGRldi0+aW1hZ2UueDsgY29sICs9IDQpIHsKKwkJCQkJKmRzdHkrKyA9ICpzcmMrKzsKKwkJCQkJKmRzdHkrKyA9ICpzcmMrKzsKKwkJCQkJaWYgKGxpbmUgJiAxKQorCQkJCQkJKmRzdHYrKyA9ICpzcmMrKzsKKwkJCQkJZWxzZQorCQkJCQkJKmRzdHUrKyA9ICpzcmMrKzsKKwkJCQl9CisJCQkJZHN0eSArPSBzdHJpZGU7CisJCQkJaWYgKGxpbmUgJiAxKQorCQkJCQlkc3R2ICs9IChzdHJpZGUgPj4gMSk7CisJCQkJZWxzZQorCQkJCQlkc3R1ICs9IChzdHJpZGUgPj4gMSk7CisJCQl9CisJfQorCWVsc2UgeworCQkvKiBDb21wcmVzc2VkOyB0aGUgZGVjb21wcmVzc29yIHJvdXRpbmVzIHdpbGwgd3JpdGUgdGhlIGRhdGEKKwkJICAgaW4gcGxhbmFyIGZvcm1hdCBpbW1lZGlhdGVseS4KKwkJICovCisJCWludCBmbGFnczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmbGFncyA9IFBXQ1hfRkxBR19QTEFOQVI7CisgICAgICAgICAgICAgICAgaWYgKHBkZXYtPnZzaXplID09IFBTWl9WR0EgJiYgcGRldi0+dmZyYW1lcyA9PSA1ICYmIHBkZXYtPnZzbmFwc2hvdCkKKwkJIHsKKwkJICAgcHJpbnRrKEtFUk5fRVJSICJwd2M6IE1vZGUgQmF5ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93XG4iKTsKKwkJICAgZmxhZ3MgfD0gUFdDWF9GTEFHX0JBWUVSOworCQkgICByZXR1cm4gLUVOWElPOyAvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzOiBtaXNzaW5nIGRlY29tcHJlc3NvciAqLworCQkgfQorCisJCXN3aXRjaCAocGRldi0+dHlwZSkKKwkJIHsKKwkJICBjYXNlIDY3NToKKwkJICBjYXNlIDY4MDoKKwkJICBjYXNlIDY5MDoKKwkJICBjYXNlIDcyMDoKKwkJICBjYXNlIDczMDoKKwkJICBjYXNlIDc0MDoKKwkJICBjYXNlIDc1MDoKKwkJICAgIHB3Y19kZWMyM19kZWNvbXByZXNzKCZwZGV2LT5pbWFnZSwgJnBkZXYtPnZpZXcsICZwZGV2LT5vZmZzZXQsCisJCQkJeXV2LCBpbWFnZSwKKwkJCQlmbGFncywKKwkJCQlwZGV2LT5kZWNvbXByZXNzX2RhdGEsIHBkZXYtPnZiYW5kbGVuZ3RoKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgNjQ1OgorCQkgIGNhc2UgNjQ2OgorCQkgICAgLyogVE9ETyAmIEZJWE1FICovCisJCSAgICByZXR1cm4gLUVOWElPOyAvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzOiBtaXNzaW5nIGRlY29tcHJlc3NvciAqLworCQkgICAgYnJlYWs7CisJCSB9CisJfQorCXJldHVybiAwOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiOTI1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKiBUaGlzIGZpbGUgaXMgdGhlIGJyaWRnZSBiZXR3ZWVuIHRoZSBrZXJuZWwgbW9kdWxlIGFuZCB0aGUgcGx1Z2luOyBpdAorICAgZGVzY3JpYmVzIHRoZSBzdHJ1Y3R1cmVzIGFuZCBkYXRhdHlwZXMgdXNlZCBpbiBib3RoIG1vZHVsZXMuIEFueQorICAgc2lnbmlmaWNhbnQgY2hhbmdlIHNob3VsZCBiZSByZWZsZWN0ZWQgYnkgaW5jcmVhc2luZyB0aGUgCisgICBwd2NfZGVjb21wcmVzc29yX3ZlcnNpb24gbWFqb3IgbnVtYmVyLgorICovCisjaWZuZGVmIFBXQ19VTkNPTVBSRVNTX0gKKyNkZWZpbmUgUFdDX1VOQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworLyogZnJvbSBwd2MtZGVjLmggKi8KKyNkZWZpbmUgUFdDWF9GTEFHX1BMQU5BUiAgICAgICAgMHgwMDAxCisvKiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2I1MTZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCkBAIC0wLDAgKzEsMjc4IEBACisvKiAoQykgMTk5OS0yMDAzIE5lbW9zb2Z0IFVudi4KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmbmRlZiBQV0NfSAorI2RlZmluZSBQV0NfSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisKKy8qIERlZmluZXMgYW5kIHN0cnVjdHVyZXMgZm9yIHRoZSBQaGlsaXBzIHdlYmNhbSAqLworLyogVXNlZCBmb3IgY2hlY2tpbmcgbWVtb3J5IGNvcnJ1cHRpb24vcG9pbnRlciB2YWxpZGF0aW9uICovCisjZGVmaW5lIFBXQ19NQUdJQyAweDg5REMxMEFCVUwKKyN1bmRlZiBQV0NfTUFHSUMKKworLyogVHVybiBzb21lIGRlYnVnZ2luZyBvcHRpb25zIG9uL29mZiAqLworI2RlZmluZSBQV0NfREVCVUcgMAorCisvKiBUcmFjZSBjZXJ0YWluIGFjdGlvbnMgaW4gdGhlIGRyaXZlciAqLworI2RlZmluZSBUUkFDRV9NT0RVTEUJMHgwMDAxCisjZGVmaW5lIFRSQUNFX1BST0JFCTB4MDAwMgorI2RlZmluZSBUUkFDRV9PUEVOCTB4MDAwNAorI2RlZmluZSBUUkFDRV9SRUFECTB4MDAwOAorI2RlZmluZSBUUkFDRV9NRU1PUlkJMHgwMDEwCisjZGVmaW5lIFRSQUNFX0ZMT1cJMHgwMDIwCisjZGVmaW5lIFRSQUNFX1NJWkUJMHgwMDQwCisjZGVmaW5lIFRSQUNFX1BXQ1gJMHgwMDgwCisjZGVmaW5lIFRSQUNFX1NFUVVFTkNFCTB4MTAwMAorCisjZGVmaW5lIFRyYWNlKFIsIEEuLi4pIGlmIChwd2NfdHJhY2UgJiBSKSBwcmludGsoS0VSTl9ERUJVRyBQV0NfTkFNRSAiICIgQSkKKyNkZWZpbmUgRGVidWcoQS4uLikgcHJpbnRrKEtFUk5fREVCVUcgUFdDX05BTUUgIiAiIEEpCisjZGVmaW5lIEluZm8oQS4uLikgIHByaW50ayhLRVJOX0lORk8gIFBXQ19OQU1FICIgIiBBKQorI2RlZmluZSBFcnIoQS4uLikgICBwcmludGsoS0VSTl9FUlIgICBQV0NfTkFNRSAiICIgQSkKKworCisvKiBEZWZpbmVzIGZvciBUb1VDYW0gY2FtZXJhcyAqLworI2RlZmluZSBUT1VDQU1fSEVBREVSX1NJWkUJCTgKKyNkZWZpbmUgVE9VQ0FNX1RSQUlMRVJfU0laRQkJNAorCisjZGVmaW5lIEZFQVRVUkVfTU9UT1JfUEFOVElMVAkJMHgwMDAxCisKKy8qIFZlcnNpb24gYmxvY2sgKi8KKyNkZWZpbmUgUFdDX01BSk9SCTkKKyNkZWZpbmUgUFdDX01JTk9SCTAKKyNkZWZpbmUgUFdDX1ZFUlNJT04gCSI5LjAuMi11bm9mZmljaWFsIgorI2RlZmluZSBQV0NfTkFNRSAJInB3YyIKKworLyogVHVybiBjZXJ0YWluIGZlYXR1cmVzIG9uL29mZiAqLworI2RlZmluZSBQV0NfSU5UX1BJUEUgMAorCisvKiBJZ25vcmUgZXJyb3JzIGluIHRoZSBmaXJzdCBOIGZyYW1lcywgdG8gYWxsb3cgZm9yIHN0YXJ0dXAgZGVsYXlzICovCisjZGVmaW5lIEZSQU1FX0xPV01BUksgNQorCisvKiBTaXplIGFuZCBudW1iZXIgb2YgYnVmZmVycyBmb3IgdGhlIElTTyBwaXBlLiAqLworI2RlZmluZSBNQVhfSVNPX0JVRlMJCTIKKyNkZWZpbmUgSVNPX0ZSQU1FU19QRVJfREVTQwkxMAorI2RlZmluZSBJU09fTUFYX0ZSQU1FX1NJWkUJOTYwCisjZGVmaW5lIElTT19CVUZGRVJfU0laRSAJKElTT19GUkFNRVNfUEVSX0RFU0MgKiBJU09fTUFYX0ZSQU1FX1NJWkUpCisKKy8qIEZyYW1lIGJ1ZmZlcnM6IGNvbnRhaW5zIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkIHZpZGVvIGRhdGEuICovCisjZGVmaW5lIE1BWF9GUkFNRVMJCTUKKy8qIE1heGltdW0gc2l6ZSBhZnRlciBkZWNvbXByZXNzaW9uIGlzIDY0MHg0ODAgWVVWIGRhdGEsIDEuNSAqIDY0MCAqIDQ4MCAqLworI2RlZmluZSBQV0NfRlJBTUVfU0laRSAJCSg0NjA4MDAgKyBUT1VDQU1fSEVBREVSX1NJWkUgKyBUT1VDQU1fVFJBSUxFUl9TSVpFKQorCisvKiBBYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiBidWZmZXJzIGF2YWlsYWJsZSBmb3IgbW1hcCgpICovCisjZGVmaW5lIE1BWF9JTUFHRVMgCQkxMAorCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgd2VyZSBiYXNlZCBvbiBjcGlhLmguIFdoeSByZWludmVudCB0aGUgd2hlZWw/IDotKSAqLworc3RydWN0IHB3Y19pc29fYnVmCit7CisJdm9pZCAqZGF0YTsKKwlpbnQgIGxlbmd0aDsKKwlpbnQgIHJlYWQ7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworLyogaW50ZXJtZWRpYXRlIGJ1ZmZlcnMgd2l0aCByYXcgZGF0YSBmcm9tIHRoZSBVU0IgY2FtICovCitzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZgoreworICAgdm9pZCAqZGF0YTsKKyAgIHZvbGF0aWxlIGludCBmaWxsZWQ7CQkvKiBudW1iZXIgb2YgYnl0ZXMgZmlsbGVkICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqbmV4dDsJLyogbGlzdCAqLworI2lmIFBXQ19ERUJVRworICAgaW50IHNlcXVlbmNlOwkJLyogU2VxdWVuY2UgbnVtYmVyICovCisjZW5kaWYKK307CisKK3N0cnVjdCBwd2NfZGV2aWNlCit7CisgICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworI2lmZGVmIFBXQ19NQUdJQworICAgaW50IG1hZ2ljOworI2VuZGlmCisgICAvKiBQb2ludGVyIHRvIG91ciB1c2JfZGV2aWNlICovCisgICBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKyAgIAorICAgaW50IHR5cGU7ICAgICAgICAgICAgICAgICAgICAvKiB0eXBlIG9mIGNhbSAoNjQ1LCA2NDYsIDY3NSwgNjgwLCA2OTAsIDcyMCwgNzMwLCA3NDAsIDc1MCkgKi8KKyAgIGludCByZWxlYXNlOwkJCS8qIHJlbGVhc2UgbnVtYmVyICovCisgICBpbnQgZmVhdHVyZXM7CQkvKiBmZWF0dXJlIGJpdHMgKi8KKyAgIGNoYXIgc2VyaWFsWzMwXTsJCS8qIHNlcmlhbCBudW1iZXIgKHN0cmluZykgKi8KKyAgIGludCBlcnJvcl9zdGF0dXM7CQkvKiBzZXQgd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZyB3aXRoIHRoZSBjYW0gKHVucGx1Z2dlZCwgVVNCIGVycm9ycykgKi8KKyAgIGludCB1c2JfaW5pdDsJCS8qIHNldCB3aGVuIHRoZSBjYW0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb3ZlciBVU0IgKi8KKworICAgLyoqKiBWaWRlbyBkYXRhICoqKi8KKyAgIGludCB2b3BlbjsJCQkvKiBmbGFnICovCisgICBpbnQgdmVuZHBvaW50OwkJLyogdmlkZW8gaXNvYyBlbmRwb2ludCAqLworICAgaW50IHZjaW50ZXJmYWNlOwkJLyogdmlkZW8gY29udHJvbCBpbnRlcmZhY2UgKi8KKyAgIGludCB2YWx0ZXJuYXRlOwkJLyogYWx0ZXJuYXRlIGludGVyZmFjZSBuZWVkZWQgKi8KKyAgIGludCB2ZnJhbWVzLCB2c2l6ZTsJCS8qIGZyYW1lcy1wZXItc2Vjb25kICYgc2l6ZSAoc2VlIFBTWl8qKSAqLworICAgaW50IHZwYWxldHRlOwkJLyogcGFsZXR0ZTogNDIwUCwgUkFXIG9yIFJHQkJBWUVSICovCisgICBpbnQgdmZyYW1lX2NvdW50OwkJLyogcmVjZWl2ZWQgZnJhbWVzICovCisgICBpbnQgdmZyYW1lc19kdW1wZWQ7IAkJLyogY291bnRlciBmb3IgZHVtcGVkIGZyYW1lcyAqLworICAgaW50IHZmcmFtZXNfZXJyb3I7CQkvKiBmcmFtZXMgcmVjZWl2ZWQgaW4gZXJyb3IgKi8KKyAgIGludCB2bWF4X3BhY2tldF9zaXplOwkvKiBVU0IgbWF4cGFja2V0IHNpemUgKi8KKyAgIGludCB2bGFzdF9wYWNrZXRfc2l6ZTsJLyogZm9yIGZyYW1lIHN5bmNocm9uaXNhdGlvbiAqLworICAgaW50IHZpc29jX2Vycm9yczsJCS8qIG51bWJlciBvZiBjb250aWd1b3VzIElTT0MgZXJyb3JzICovCisgICBpbnQgdmNvbXByZXNzaW9uOwkJLyogZGVzaXJlZCBjb21wcmVzc2lvbiBmYWN0b3IgKi8KKyAgIGludCB2YmFuZGxlbmd0aDsJCS8qIGNvbXByZXNzZWQgYmFuZCBsZW5ndGg7IDAgaXMgdW5jb21wcmVzc2VkICovCisgICBjaGFyIHZzbmFwc2hvdDsJCS8qIHNuYXBzaG90IG1vZGUgKi8KKyAgIGNoYXIgdnN5bmM7CQkJLyogdXNlZCBieSBpc29jIGhhbmRsZXIgKi8KKyAgIGNoYXIgdm1pcnJvcjsJCS8qIGZvciBUb1VDYU0gc2VyaWVzICovCisgICAKKyAgIGludCBjbWRfbGVuOworICAgdW5zaWduZWQgY2hhciBjbWRfYnVmWzEzXTsKKworICAgLyogVGhlIGltYWdlIGFjcXVpc2l0aW9uIHJlcXVpcmVzIDMgdG8gNCBzdGVwczoKKyAgICAgIDEuIGRhdGEgaXMgZ2F0aGVyZWQgaW4gc2hvcnQgcGFja2V0cyBmcm9tIHRoZSBVU0IgY29udHJvbGxlcgorICAgICAgMi4gZGF0YSBpcyBzeW5jaHJvbml6ZWQgYW5kIHBhY2tlZCBpbnRvIGEgZnJhbWUgYnVmZmVyCisgICAgICAzYS4gaW4gY2FzZSBkYXRhIGlzIGNvbXByZXNzZWQsIGRlY29tcHJlc3MgaXQgZGlyZWN0bHkgaW50byBpbWFnZSBidWZmZXIKKyAgICAgIDNiLiBpbiBjYXNlIGRhdGEgaXMgdW5jb21wcmVzc2VkLCBjb3B5IGludG8gaW1hZ2UgYnVmZmVyIHdpdGggdmlld3BvcnQKKyAgICAgIDQuIGRhdGEgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHVzZXIgcHJvY2VzcworCisgICAgICBOb3RlIHRoYXQgTUFYX0lTT19CVUZTICE9IE1BWF9GUkFNRVMgIT0gTUFYX0lNQUdFUy4uLi4KKyAgICAgIFdlIGhhdmUgaW4gZWZmZWN0IGEgYmFjay10by1iYWNrLWRvdWJsZS1idWZmZXIgc3lzdGVtLgorICAgICovCisgICAvKiAxOiBpc29jICovCisgICBzdHJ1Y3QgcHdjX2lzb19idWYgc2J1ZltNQVhfSVNPX0JVRlNdOworICAgY2hhciBpc29faW5pdDsKKworICAgLyogMjogZnJhbWUgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmOwkvKiBhbGwgZnJhbWVzICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZW1wdHlfZnJhbWVzLCAqZW1wdHlfZnJhbWVzX3RhaWw7CS8qIGFsbCBlbXB0eSBmcmFtZXMgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmdWxsX2ZyYW1lcywgKmZ1bGxfZnJhbWVzX3RhaWw7CS8qIGFsbCBmaWxsZWQgZnJhbWVzICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZmlsbF9mcmFtZTsJLyogZnJhbWUgY3VycmVudGx5IGJlaW5nIGZpbGxlZCAqLworICAgc3RydWN0IHB3Y19mcmFtZV9idWYgKnJlYWRfZnJhbWU7CS8qIGZyYW1lIGN1cnJlbnRseSByZWFkIGJ5IHVzZXIgcHJvY2VzcyAqLworICAgaW50IGZyYW1lX2hlYWRlcl9zaXplLCBmcmFtZV90cmFpbGVyX3NpemU7CisgICBpbnQgZnJhbWVfc2l6ZTsKKyAgIGludCBmcmFtZV90b3RhbF9zaXplOyAvKiBpbmNsdWRpbmcgaGVhZGVyICYgdHJhaWxlciAqLworICAgaW50IGRyb3BfZnJhbWVzOworI2lmIFBXQ19ERUJVRworICAgaW50IHNlcXVlbmNlOwkJCS8qIERlYnVnZ2luZyBhaWQgKi8KKyNlbmRpZgorCisgICAvKiAzOiBkZWNvbXByZXNzaW9uICovCisgICBzdHJ1Y3QgcHdjX2RlY29tcHJlc3NvciAqZGVjb21wcmVzc29yOwkvKiBmdW5jdGlvbiBibG9jayB3aXRoIGRlY29tcHJlc3Npb24gcm91dGluZXMgKi8KKyAgIHZvaWQgKmRlY29tcHJlc3NfZGF0YTsJCS8qIHByaXZhdGUgZGF0YSBmb3IgZGVjb21wcmVzc2lvbiBlbmdpbmUgKi8KKworICAgLyogNDogaW1hZ2UgKi8KKyAgIC8qIFdlIGhhdmUgYW4gJ2ltYWdlJyBhbmQgYSAndmlldycsIHdoZXJlICdpbWFnZScgaXMgdGhlIGZpeGVkLXNpemUgaW1hZ2UKKyAgICAgIGFzIGRlbGl2ZXJlZCBieSB0aGUgY2FtZXJhLCBhbmQgJ3ZpZXcnIGlzIHRoZSBzaXplIHJlcXVlc3RlZCBieSB0aGUKKyAgICAgIHByb2dyYW0uIFRoZSBjYW1lcmEgaW1hZ2UgaXMgY2VudGVyZWQgaW4gdGhpcyB2aWV3cG9ydCwgbGFjZWQgd2l0aAorICAgICAgYSBncmF5IG9yIGJsYWNrIGJvcmRlci4gdmlld19taW4gPD0gaW1hZ2UgPD0gdmlldyA8PSB2aWV3X21heDsKKyAgICAqLworICAgaW50IGltYWdlX21hc2s7CQkJLyogYml0bWFzayBvZiBzdXBwb3J0ZWQgc2l6ZXMgKi8KKyAgIHN0cnVjdCBwd2NfY29vcmQgdmlld19taW4sIHZpZXdfbWF4OwkvKiBtaW5pbXVtIGFuZCBtYXhpbXVtIHZpZXdhYmxlIHNpemVzICovCisgICBzdHJ1Y3QgcHdjX2Nvb3JkIGFic19tYXg7ICAgICAgICAgICAgLyogbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSB3aXRoIGNvbXByZXNzaW9uICovCisgICBzdHJ1Y3QgcHdjX2Nvb3JkIGltYWdlLCB2aWV3OwkvKiBpbWFnZSBhbmQgdmlld3BvcnQgc2l6ZSAqLworICAgc3RydWN0IHB3Y19jb29yZCBvZmZzZXQ7CQkvKiBvZmZzZXQgd2l0aGluIHRoZSB2aWV3cG9ydCAqLworCisgICB2b2lkICppbWFnZV9kYXRhOwkJCS8qIHRvdGFsIGJ1ZmZlciwgd2hpY2ggaXMgc3ViZGl2aWRlZCBpbnRvIC4uLiAqLworICAgdm9pZCAqaW1hZ2VfcHRyW01BWF9JTUFHRVNdOwkJLyogLi4uc2V2ZXJhbCBpbWFnZXMuLi4gKi8KKyAgIGludCBmaWxsX2ltYWdlOwkJCS8qIC4uLndoaWNoIGFyZSByb3RhdGVkLiAqLworICAgaW50IGxlbl9wZXJfaW1hZ2U7CQkJLyogbGVuZ3RoIHBlciBpbWFnZSAqLworICAgaW50IGltYWdlX3JlYWRfcG9zOwkJCS8qIEluIGNhc2Ugd2UgcmVhZCBkYXRhIGluIHBpZWNlcywga2VlcCB0cmFjayBvZiB3ZXJlIHdlIGFyZSBpbiB0aGUgaW1hZ2VidWZmZXIgKi8KKyAgIGludCBpbWFnZV91c2VkW01BWF9JTUFHRVNdOwkJLyogRm9yIE1DQVBUVVJFIGFuZCBTWU5DICovCisKKyAgIHN0cnVjdCBzZW1hcGhvcmUgbW9kbG9jazsJCS8qIHRvIHByZXZlbnQgcmFjZXMgaW4gdmlkZW9fb3BlbigpLCBldGMgKi8KKyAgIHNwaW5sb2NrX3QgcHRybG9jazsJCQkvKiBmb3IgbWFuaXB1bGF0aW5nIHRoZSBidWZmZXIgcG9pbnRlcnMgKi8KKworICAgLyoqKiBtb3Rvcml6ZWQgcGFuL3RpbHQgZmVhdHVyZSAqLworICAgc3RydWN0IHB3Y19tcHRfcmFuZ2UgYW5nbGVfcmFuZ2U7CisgICBpbnQgcGFuX2FuZ2xlOwkJCS8qIGluIGRlZ3JlZXMgKiAxMDAgKi8KKyAgIGludCB0aWx0X2FuZ2xlOwkJCS8qIGFic29sdXRlIGFuZ2xlOyAwLDAgaXMgaG9tZSBwb3NpdGlvbiAqLworCisgICAvKioqIE1pc2MuIGRhdGEgKioqLworICAgd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVxOwkJLyogV2hlbiB3YWl0aW5nIGZvciBhIGZyYW1lIHRvIGZpbmlzaC4uLiAqLworI2lmIFBXQ19JTlRfUElQRQorICAgdm9pZCAqdXNiX2ludF9oYW5kbGVyOwkJLyogZm9yIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKyNlbmRpZgorfTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KK2V4dGVybiBpbnQgcHdjX3RyYWNlOworZXh0ZXJuIGludCBwd2NfcHJlZmVycmVkX2NvbXByZXNzaW9uOworCisvKiogZnVuY3Rpb25zIGluIHB3Yy1pZi5jICovCitpbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KTsKKworLyoqIEZ1bmN0aW9ucyBpbiBwd2MtbWlzYy5jICovCisvKiBzaXplcyBpbiBwaXhlbHMgKi8KK2V4dGVybiBzdHJ1Y3QgcHdjX2Nvb3JkIHB3Y19pbWFnZV9zaXplc1tQU1pfTUFYXTsKKworaW50IHB3Y19kZWNvZGVfc2l6ZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQgcHdjX2NvbnN0cnVjdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CisKKy8qKiBGdW5jdGlvbnMgaW4gcHdjLWN0cmwuYyAqLworLyogUmVxdWVzdCBhIGNlcnRhaW4gdmlkZW8gbW9kZS4gUmV0dXJucyA8IDAgaWYgbm90IHBvc3NpYmxlICovCitleHRlcm4gaW50IHB3Y19zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIGludCBzbmFwc2hvdCk7CisvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgaW1hZ2UgKG5vdCBmcmFtZSkgKi8KK2V4dGVybiB2b2lkIHB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworCisvKiBWYXJpb3VzIGNvbnRyb2xzOyBzaG91bGQgYmUgb2J2aW91cy4gVmFsdWUgMC4uNjU1MzUsIG9yIDwgMCBvbiBlcnJvciAqLworZXh0ZXJuIGludCBwd2NfZ2V0X2JyaWdodG5lc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworZXh0ZXJuIGludCBwd2Nfc2V0X2JyaWdodG5lc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7CitleHRlcm4gaW50IHB3Y19nZXRfY29udHJhc3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworZXh0ZXJuIGludCBwd2Nfc2V0X2NvbnRyYXN0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBwd2NfZ2V0X2dhbW1hKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKK2V4dGVybiBpbnQgcHdjX3NldF9nYW1tYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgcHdjX2dldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKK2V4dGVybiBpbnQgcHdjX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBwd2Nfc2V0X2xlZHMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBvbl92YWx1ZSwgaW50IG9mZl92YWx1ZSk7CitleHRlcm4gaW50IHB3Y19nZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpvbl92YWx1ZSwgaW50ICpvZmZfdmFsdWUpOworZXh0ZXJuIGludCBwd2NfZ2V0X2Ntb3Nfc2Vuc29yKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnNlbnNvcik7CisKKy8qIFBvd2VyIGRvd24gb3IgdXAgdGhlIGNhbWVyYTsgbm90IHN1cHBvcnRlZCBieSBhbGwgbW9kZWxzICovCitleHRlcm4gaW50IHB3Y19jYW1lcmFfcG93ZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwb3dlcik7CisKKy8qIFByaXZhdGUgaW9jdGwoKXM7IHNlZSBwd2MtaW9jdGwuaCAqLworZXh0ZXJuIGludCBwd2NfaW9jdGwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKworLyoqIHB3Yy11bmNvbXByZXNzLmMgKi8KKy8qIEV4cGFuZCBmcmFtZSB0byBpbWFnZSwgcG9zc2libHkgaW5jbHVkaW5nIGRlY29tcHJlc3Npb24uIFVzZXMgcmVhZF9mcmFtZSBhbmQgZmlsbF9pbWFnZSAqLworZXh0ZXJuIGludCBwd2NfZGVjb21wcmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jIGIvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODViZGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYwpAQCAtMCwwICsxLDE0MzYgQEAKKy8qCisgKiBFbmRwb2ludHMgKGZvcm1lcmx5IGtub3duIGFzIEFPWCkgc2U0MDEgVVNCIENhbWVyYSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgSmVyb2VuIEIuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCisgKgorICogU3RpbGwgc29tZXdoYXQgYmFzZWQgb24gdGhlIExpbnV4IG92NTExIGRyaXZlci4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqIFRoYW5rcyB0byBFbmRwb2ludHMgSW5jLiAod3d3LmVuZHBvaW50cy5jb20pIGZvciBtYWtpbmcgZG9jdW1lbnRhdGlvbiBvbgorICogdGhlaXIgY2hpcHNldCBhdmFpbGFibGUgYW5kIHN1cHBvcnRpbmcgbWUgd2hpbGUgd3JpdGluZyB0aGlzIGRyaXZlci4KKyAqIAktIEplcm9lbiBWcmVla2VuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gIjAuMjQiOworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInNlNDAxLmgiCisKK3N0YXRpYyBpbnQgZmxpY2tlcmxlc3M9MDsKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwM2U4LCAweDAwMDQpIH0sLyogRW5kcG9pbnRzL0FveCBTRTQwMSAqLworCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwYikgfSwvKiBQaGlsaXBzIFBDVkM2NjVLICovCisJeyBVU0JfREVWSUNFKDB4MDQ3ZCwgMHg1MDAxKSB9LC8qIEtlbnNpbmd0b24gNjcwMTQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDIpIH0sLyogS2Vuc2luZ3RvbiA2NzAxKDUvNykgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDMpIH0sLyogS2Vuc2luZ3RvbiA2NzAxNiAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKK01PRFVMRV9BVVRIT1IoIkplcm9lbiBWcmVla2VuIDxwZTFyeHFAYW1zYXQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTRTQwMSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKGZsaWNrZXJsZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmbGlja2VybGVzcywgIk5ldCBmcmVxdWVuY3kgdG8gYWRqdXN0IGV4cG9zdXJlIHRpbWUgdG8gKDAvNTAvNjApIik7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZTQwMV9kcml2ZXI7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNlNDAxIHJlZ2lzdGVyIHJlYWQvd3JpdGUgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzZTQwMV9zbmRjdHJsKGludCBzZXQsIHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCB1bnNpZ25lZCBzaG9ydCByZXEsCisJCQkgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGNoYXIgKmNwLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnICgKKyAgICAgICAgICAgICAgICBzZTQwMS0+ZGV2LAorICAgICAgICAgICAgICAgIHNldCA/IHVzYl9zbmRjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSA6IHVzYl9yY3ZjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICByZXEsCisgICAgICAgICAgICAgICAgKHNldCA/IFVTQl9ESVJfT1VUIDogVVNCX0RJUl9JTikgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgY3AsCisgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAxMDAwCisgICAgICAgICk7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfc2V0X2ZlYXR1cmUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHVuc2lnbmVkIHNob3J0IHNlbGVjdG9yLAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwYXJhbSkKK3sKKwkvKiBzcGVjcyBzYXkgdGhhdCB0aGUgc2VsZWN0b3IgKGFkZHJlc3MpIHNob3VsZCBnbyBpbiB0aGUgdmFsdWUgZmllbGQKKwkgICBhbmQgdGhlIHBhcmFtIGluIGluZGV4LCBidXQgaW4gdGhlIGxvZ3Mgb2YgdGhlIHdpbmRvd3MgZHJpdmVyIHRoZXkgZG8KKwkgICB0aGlzIHRoZSBvdGhlciB3YXkgYXJvdW5kLi4uCisJICovCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyAoCisJCXNlNDAxLT5kZXYsCisJCXVzYl9zbmRjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKKwkJU0U0MDFfUkVRX1NFVF9FWFRfRkVBVFVSRSwKKwkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQlwYXJhbSwKKwkJc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIDEwMDAKKyAgICAgICAgKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHNlNDAxX2dldF9mZWF0dXJlKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCAKKwkJCQkgICAgICAgIHVuc2lnbmVkIHNob3J0IHNlbGVjdG9yKQoreworCS8qIEZvciAnc2V0JyB0aGUgc2VsZWNldG9yIHNob3VsZCBiZSBpbiBpbmRleCwgbm90IHN1cmUgaWYgdGhlIHNwZWMgaXMKKwkgICB3cm9uZyBoZXJlIHRvLi4uLgorCSAqLworCXVuc2lnbmVkIGNoYXIgY3BbMl07CisgICAgICAgIHVzYl9jb250cm9sX21zZyAoCisgICAgICAgICAgICAgICAgc2U0MDEtPmRldiwKKyAgICAgICAgICAgICAgICB1c2JfcmN2Y3RybHBpcGUoc2U0MDEtPmRldiwgMCksCisgICAgICAgICAgICAgICAgU0U0MDFfUkVRX0dFVF9FWFRfRkVBVFVSRSwKKyAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisgICAgICAgIAkwLAorICAgICAgICAgICAgICAgIHNlbGVjdG9yLAorICAgICAgICAgICAgICAgIGNwLAorICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgMTAwMAorICAgICAgICApOworCXJldHVybiBjcFswXStjcFsxXSoyNTY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ2FtZXJhIGNvbnRyb2wKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2U0MDFfc2VuZF9waWN0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxKQoreworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX1RJVEwsIHNlNDAxLT5leHBvc2VfbCk7LyogaW50ZWdyYXRpb24gdGltZSBsb3cgKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19USVRNLCBzZTQwMS0+ZXhwb3NlX20pOy8qIGludGVncmF0aW9uIHRpbWUgbWlkICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfVElUVSwgc2U0MDEtPmV4cG9zZV9oKTsvKiBpbnRlZ3JhdGlvbiB0aW1lIG1pZCAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FSTFYsIHNlNDAxLT5yZXNldGxldmVsKTsvKiByZXNldCBsZXZlbCB2YWx1ZSAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FSQ0csIHNlNDAxLT5yZ2Fpbik7LyogcmVkIGNvbG9yIGdhaW4gKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19BR0NHLCBzZTQwMS0+Z2dhaW4pOy8qIGdyZWVuIGNvbG9yIGdhaW4gKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19BQkNHLCBzZTQwMS0+YmdhaW4pOy8qIGJsdWUgY29sb3IgZ2FpbiAqLworCSAgICAJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX3NldF9leHBvc3VyZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgaW50IGJyaWdodG5lc3MpCit7CisJaW50IGludGVncmF0aW9uPWJyaWdodG5lc3M8PDU7CisJCisJaWYgKGZsaWNrZXJsZXNzPT01MCkgeworCQlpbnRlZ3JhdGlvbj1pbnRlZ3JhdGlvbi1pbnRlZ3JhdGlvbiUxMDY2Njc7CisJfQorCWlmIChmbGlja2VybGVzcz09NjApIHsKKwkJaW50ZWdyYXRpb249aW50ZWdyYXRpb24taW50ZWdyYXRpb24lODg4ODk7CisJfQorCXNlNDAxLT5icmlnaHRuZXNzPWludGVncmF0aW9uPj41OworCXNlNDAxLT5leHBvc2VfaD0oaW50ZWdyYXRpb24+PjE2KSYweGZmOworCXNlNDAxLT5leHBvc2VfbT0oaW50ZWdyYXRpb24+PjgpJjB4ZmY7CisJc2U0MDEtPmV4cG9zZV9sPWludGVncmF0aW9uJjB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfZ2V0X3BpY3Qoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQoreworCXAtPmJyaWdodG5lc3M9c2U0MDEtPmJyaWdodG5lc3M7CisJaWYgKHNlNDAxLT5lbmhhbmNlKSB7CisJCXAtPndoaXRlbmVzcz0zMjc2ODsKKwl9IGVsc2UgeworCQlwLT53aGl0ZW5lc3M9MDsKKwl9CisJcC0+Y29sb3VyPTY1NTM1OworCXAtPmNvbnRyYXN0PTY1NTM1OworCXAtPmh1ZT1zZTQwMS0+cmdhaW48PDEwOworCXAtPnBhbGV0dGU9c2U0MDEtPnBhbGV0dGU7CisJcC0+ZGVwdGg9MzsgLyogcmdiMjQgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNlNDAxX3NldF9waWN0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwlpZiAocC0+cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1JHQjI0KQorCQlyZXR1cm4gMTsKKwlzZTQwMS0+cGFsZXR0ZT1wLT5wYWxldHRlOworCWlmIChwLT5odWUhPXNlNDAxLT5odWUpIHsKKwkJc2U0MDEtPnJnYWluPSBwLT5odWU+PjEwOworCQlzZTQwMS0+YmdhaW49IDB4NDAtKHAtPmh1ZT4+MTApOworCQlzZTQwMS0+aHVlPXAtPmh1ZTsKKwl9CisJaWYgKHAtPmJyaWdodG5lc3MhPXNlNDAxLT5icmlnaHRuZXNzKSB7CisJCXNlNDAxX3NldF9leHBvc3VyZShzZTQwMSwgcC0+YnJpZ2h0bmVzcyk7CisJfQorCWlmIChwLT53aGl0ZW5lc3M+PTMyNzY4KSB7CisJCXNlNDAxLT5lbmhhbmNlPTE7CisJfSBlbHNlIHsKKwkJc2U0MDEtPmVuaGFuY2U9MDsKKwl9CisJc2U0MDFfc2VuZF9waWN0KHNlNDAxKTsKKwlzZTQwMV9zZW5kX3BpY3Qoc2U0MDEpOworCXJldHVybiAwOworfQorCisvKgorCUh5dW5kYWkgaGF2ZSBzb21lIHJlYWxseSBuaWNlIGRvY3MgYWJvdXQgdGhpcyBhbmQgb3RoZXIgc2Vuc29yIHJlbGF0ZWQKKwlzdHVmZiBvbiB0aGVpciBob21lcGFnZTogd3d3LmhlaS5jby5rcgorKi8KK3N0YXRpYyB2b2lkIHNlNDAxX2F1dG9fcmVzZXRsZXZlbChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSkKK3sKKwl1bnNpZ25lZCBpbnQgYWhyYywgYWxyYzsKKwlpbnQgb2xkcmVzZXQ9c2U0MDEtPnJlc2V0bGV2ZWw7CisKKwkvKiBGb3Igc29tZSByZWFzb24gdGhpcyBub3JtYWxseSByZWFkLW9ubHkgcmVnaXN0ZXIgZG9lc24ndCBnZXQgcmVzZXQKKwkgICB0byB6ZXJvIGFmdGVyIHJlYWRpbmcgdGhlbSBqdXN0IG9uY2UuLi4KKwkgKi8KKwlzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19ISVJFRk5PSCk7IAorCXNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9MKTsKKwlzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PSCk7CisJc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0wpOworCWFocmM9MjU2KnNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9IKSArIAorCSAgICBzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19ISVJFRk5PTCk7CisJYWxyYz0yNTYqc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0gpICsKKwkgICAgc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0wpOworCisJLyogTm90IGFuIGV4YWN0IHNjaWVuY2UsIGJ1dCBpdCBzZWVtcyB0byB3b3JrIHByZXR0eSB3ZWxsLi4uICovCisJaWYgKGFscmMgPiAxMCkgeworCQl3aGlsZSAoYWxyYz49MTAgJiYgc2U0MDEtPnJlc2V0bGV2ZWwgPCA2MykgeworCQkJc2U0MDEtPnJlc2V0bGV2ZWwrKzsKKwkJCWFscmMgLz0yOworCQl9CisJfSBlbHNlIGlmIChhaHJjID4gMjApIHsKKwkJd2hpbGUgKGFocmM+PTIwICYmIHNlNDAxLT5yZXNldGxldmVsID4gMCkgeworCQkJc2U0MDEtPnJlc2V0bGV2ZWwtLTsKKwkJCWFocmMgLz0yOworCQl9CisJfQorCWlmIChzZTQwMS0+cmVzZXRsZXZlbCE9b2xkcmVzZXQpCisJCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FSTFYsIHNlNDAxLT5yZXNldGxldmVsKTsKKworCXJldHVybjsKK30KKworLyogaXJxIGhhbmRsZXIgZm9yIHNuYXBzaG90IGJ1dHRvbiAqLworc3RhdGljIHZvaWQgc2U0MDFfYnV0dG9uX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gdXJiLT5jb250ZXh0OworCWludCBzdGF0dXM7CisJCisJaWYgKCFzZTQwMS0+ZGV2KSB7CisJCWluZm8oIm9ob2g6IGRldmljZSB2YXBvdXJpc2hlZCIpOworCQlyZXR1cm47CisJfQorCQorCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+PTIpIHsKKwkJaWYgKHNlNDAxLT5idXR0b24pCisJCQlzZTQwMS0+YnV0dG9ucHJlc3NlZD0xOworCX0KK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgc2U0MDFfdmlkZW9faXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSB1cmItPmNvbnRleHQ7CisJaW50IGxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCS8qIG9ob2guLi4gKi8KKwlpZiAoIXNlNDAxLT5zdHJlYW1pbmcpCisJCXJldHVybjsKKworCWlmICghc2U0MDEtPmRldikgeworCQlpbmZvICgib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCXJldHVybjsKKwl9CisKKwkvKiAwIHNpemVkIHBhY2tldHMgaGFwcGVuIGlmIHdlIGFyZSB0byBmYXN0LCBidXQgc29tZXRpbWVzIHRoZSBjYW1lcmEKKwkgICBrZWVwcyBzZW5kaW5nIHRoZW0gZm9yZXZlci4uLgorCSAqLworCWlmIChsZW5ndGggJiYgIXVyYi0+c3RhdHVzKSB7CisJCXNlNDAxLT5udWxscGFja2V0cz0wOworCQlzd2l0Y2goc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfbmV4dF0uc3RhdGUpIHsKKwkJCWNhc2UgQlVGRkVSX1JFQURZOgorCQkJY2FzZSBCVUZGRVJfQlVTWTogeworCQkJCXNlNDAxLT5kcm9wcGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEJVRkZFUl9VTlVTRUQ6IHsKKwkJCQltZW1jcHkoc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfbmV4dF0uZGF0YSwgKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoKTsKKwkJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5zdGF0ZT1CVUZGRVJfUkVBRFk7CisJCQkJc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfbmV4dF0ub2Zmc2V0PXNlNDAxLT5iYXllcm9mZnNldDsKKwkJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5sZW5ndGg9bGVuZ3RoOworCQkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZzZTQwMS0+d3EpKSB7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2U0MDEtPndxKTsKKwkJCQl9CisJCQkJc2U0MDEtPnNjcmF0Y2hfb3ZlcmZsb3c9MDsKKwkJCQlzZTQwMS0+c2NyYXRjaF9uZXh0Kys7CisJCQkJaWYgKHNlNDAxLT5zY3JhdGNoX25leHQ+PVNFNDAxX05VTVNDUkFUQ0gpCisJCQkJCXNlNDAxLT5zY3JhdGNoX25leHQ9MDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzZTQwMS0+YmF5ZXJvZmZzZXQrPWxlbmd0aDsKKwkJaWYgKHNlNDAxLT5iYXllcm9mZnNldD49c2U0MDEtPmNoZWlnaHQqc2U0MDEtPmN3aWR0aCkgeworCQkJc2U0MDEtPmJheWVyb2Zmc2V0PTA7CisJCX0KKwl9IGVsc2UgeworCQlzZTQwMS0+bnVsbHBhY2tldHMrKzsKKwkJaWYgKHNlNDAxLT5udWxscGFja2V0cyA+IFNFNDAxX01BWF9OVUxMUEFDS0VUUykgeworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnNlNDAxLT53cSkpIHsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNlNDAxLT53cSk7CisJCQl9CQkKKwkJfQorCX0KKworCS8qIFJlc3VibWl0IHVyYiBmb3IgbmV3IGRhdGEgKi8KKwl1cmItPnN0YXR1cz0wOworCXVyYi0+ZGV2PXNlNDAxLT5kZXY7CisJaWYodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKKwkJaW5mbygidXJiIGJ1cm5lZCBkb3duIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZTQwMV9zZW5kX3NpemUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgaT0wOworCWludCBtb2RlPTB4MDM7IC8qIE5vIGNvbXByZXNzaW9uICovCisJaW50IHNlbmRoZWlnaHQ9aGVpZ2h0OworCWludCBzZW5kd2lkdGg9d2lkdGg7CisKKwkvKiBKYW5nR3UgY29tcHJlc3Npb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBjYW1lcmEgc3VwcG9ydGVkIHNpemVzLAorCSAgIGJ1dCBiYXllciBzZWVtcyB0byB3b3JrIHdpdGggYW55IHNpemUgdGhhdCBmaXRzIG9uIHRoZSBzZW5zb3IuCisJICAgV2UgY2hlY2sgaWYgd2UgY2FuIHVzZSBjb21wcmVzc2lvbiB3aXRoIHRoZSBjdXJyZW50IHNpemUgd2l0aCBlaXRoZXIKKwkgICA0IG9yIDE2IHRpbWVzIHN1YmNhcHR1cmluZywgaWYgbm90IHdlIHVzZSB1bmNvbXByZXNzZWQgYmF5ZXIgZGF0YQorCSAgIGJ1dCB0aGlzIHdpbGwgcmVzdWx0IGluIGN1dG91dHMgb2YgdGhlIG1heGltdW0gc2l6ZS4uLi4KKwkgKi8KKwl3aGlsZSAoaTxzZTQwMS0+c2l6ZXMgJiYgIShzZTQwMS0+d2lkdGhbaV09PXdpZHRoICYmIHNlNDAxLT5oZWlnaHRbaV09PWhlaWdodCkpCisJCWkrKzsKKwl3aGlsZSAoaTxzZTQwMS0+c2l6ZXMpIHsKKwkJaWYgKHNlNDAxLT53aWR0aFtpXT09d2lkdGgqMiAmJiBzZTQwMS0+aGVpZ2h0W2ldPT1oZWlnaHQqMikgeworCQkJc2VuZGhlaWdodD1zZTQwMS0+aGVpZ2h0W2ldOworCQkJc2VuZHdpZHRoPXNlNDAxLT53aWR0aFtpXTsKKwkJCW1vZGU9MHg0MDsKKwkJfQorCQlpZiAoc2U0MDEtPndpZHRoW2ldPT13aWR0aCo0ICYmIHNlNDAxLT5oZWlnaHRbaV09PWhlaWdodCo0KSB7CisJCQlzZW5kaGVpZ2h0PXNlNDAxLT5oZWlnaHRbaV07CisJCQlzZW5kd2lkdGg9c2U0MDEtPndpZHRoW2ldOworCQkJbW9kZT0weDQyOworCQl9CisJCWkrKzsKKwl9CisKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfU0VUX1dJRFRILCBzZW5kd2lkdGgsIE5VTEwsIDApOworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TRVRfSEVJR0hULCBzZW5kaGVpZ2h0LCBOVUxMLCAwKTsKKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgU0U0MDFfT1BFUkFUSU5HTU9ERSwgbW9kZSk7CisKKwlpZiAobW9kZT09MHgwMykgeworCQlzZTQwMS0+Zm9ybWF0PUZNVF9CQVlFUjsKKwl9IGVsc2UgeworCQlzZTQwMS0+Zm9ybWF0PUZNVF9KQU5HR1U7CisJfQorCisJcmV0dXJuOworfQorCisvKgorCUluIHRoaXMgZnVuY3Rpb24gc2U0MDFfc2VuZF9waWN0IGlzIGNhbGxlZCBzZXZlcmFsIHRpbWVzLAorCWZvciBzb21lIHJlYXNvbiAoZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgc2Vuc29yIGFuZCB0aGUgcGhhc2Ugb2YKKwl0aGUgbW9vbiA6KSBkb2luZyB0aGlzIG9ubHkgaW4gZWl0aGVyIHBsYWNlIGRvZXNuJ3QgYWx3YXlzIHdvcmsuLi4KKyovCitzdGF0aWMgaW50IHNlNDAxX3N0YXJ0X3N0cmVhbShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVycj0wLCBpOworCXNlNDAxLT5zdHJlYW1pbmc9MTsKKworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAxLCBOVUxMLCAwKTsKKworCS8qIFNldCBwaWN0dXJlIHNldHRpbmdzICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTU9ERV9CLCAweDA1KTsvKndpbmRvd2VkICsgcGl4IGludGcgKi8KKwlzZTQwMV9zZW5kX3BpY3Qoc2U0MDEpOworCisJc2U0MDFfc2VuZF9zaXplKHNlNDAxLCBzZTQwMS0+Y3dpZHRoLCBzZTQwMS0+Y2hlaWdodCk7CisKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfU1RBUlRfQ09OVElOVU9VU19DQVBUVVJFLCAwLCBOVUxMLCAwKTsKKworCS8qIERvIHNvbWUgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1GUkFNRVM7IGkrKykgeworCQlzZTQwMS0+ZnJhbWVbaV0uZGF0YT1zZTQwMS0+ZmJ1ZiArIGkgKiBzZTQwMS0+bWF4ZnJhbWVzaXplOworCQlzZTQwMS0+ZnJhbWVbaV0uY3VycGl4PTA7CisJfQorCWZvciAoaT0wOyBpPFNFNDAxX05VTVNCVUY7IGkrKykgeworCQlzZTQwMS0+c2J1ZltpXS5kYXRhPWttYWxsb2MoU0U0MDFfUEFDS0VUU0laRSwgR0ZQX0tFUk5FTCk7CisJfQorCisJc2U0MDEtPmJheWVyb2Zmc2V0PTA7CisJc2U0MDEtPnNjcmF0Y2hfbmV4dD0wOworCXNlNDAxLT5zY3JhdGNoX3VzZT0wOworCXNlNDAxLT5zY3JhdGNoX292ZXJmbG93PTA7CisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0NSQVRDSDsgaSsrKSB7CisJCXNlNDAxLT5zY3JhdGNoW2ldLmRhdGE9a21hbGxvYyhTRTQwMV9QQUNLRVRTSVpFLCBHRlBfS0VSTkVMKTsKKwkJc2U0MDEtPnNjcmF0Y2hbaV0uc3RhdGU9QlVGRkVSX1VOVVNFRDsKKwl9CisKKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQlVGOyBpKyspIHsKKwkJdXJiPXVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmKCF1cmIpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlNDAxLT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUoc2U0MDEtPmRldiwgU0U0MDFfVklERU9fRU5EUE9JTlQpLAorCQkJc2U0MDEtPnNidWZbaV0uZGF0YSwgU0U0MDFfUEFDS0VUU0laRSwKKwkJCXNlNDAxX3ZpZGVvX2lycSwKKwkJCXNlNDAxKTsKKworCQlzZTQwMS0+dXJiW2ldPXVyYjsKKworCQllcnI9dXNiX3N1Ym1pdF91cmIoc2U0MDEtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmKGVycikKKwkJCWVycigidXJiIGJ1cm5lZCBkb3duIik7CisJfQorCisJc2U0MDEtPmZyYW1lY291bnQ9MDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlNDAxX3N0b3Bfc3RyZWFtKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxKQoreworCWludCBpOworCisJaWYgKCFzZTQwMS0+c3RyZWFtaW5nIHx8ICFzZTQwMS0+ZGV2KQorCQlyZXR1cm4gMTsKKworCXNlNDAxLT5zdHJlYW1pbmc9MDsKKworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TVE9QX0NPTlRJTlVPVVNfQ0FQVFVSRSwgMCwgTlVMTCwgMCk7CisKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDAsIE5VTEwsIDApOworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDAsIE5VTEwsIDApOworCisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0JVRjsgaSsrKSBpZiAoc2U0MDEtPnVyYltpXSkgeworCQl1c2Jfa2lsbF91cmIoc2U0MDEtPnVyYltpXSk7CisJCXVzYl9mcmVlX3VyYihzZTQwMS0+dXJiW2ldKTsKKwkJc2U0MDEtPnVyYltpXT1OVUxMOworCQlrZnJlZShzZTQwMS0+c2J1ZltpXS5kYXRhKTsKKwl9CisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0NSQVRDSDsgaSsrKSB7CisJCWtmcmVlKHNlNDAxLT5zY3JhdGNoW2ldLmRhdGEpOworCQlzZTQwMS0+c2NyYXRjaFtpXS5kYXRhPU5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfc2V0X3NpemUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgd2Fzc3RyZWFtaW5nPXNlNDAxLT5zdHJlYW1pbmc7CisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2hhbmdlICovCisJaWYgKHNlNDAxLT5jd2lkdGg9PXdpZHRoICYmIHNlNDAxLT5jaGVpZ2h0PT1oZWlnaHQpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSAqLworCWlmICghd2lkdGggfHwgIWhlaWdodCkKKwkJcmV0dXJuIDE7CisJaWYgKCh3aWR0aCAmIDEpIHx8IChoZWlnaHQgJiAxKSkKKwkJcmV0dXJuIDE7CisJaWYgKHdpZHRoPnNlNDAxLT53aWR0aFtzZTQwMS0+c2l6ZXMtMV0pCisJCXJldHVybiAxOworCWlmIChoZWlnaHQ+c2U0MDEtPmhlaWdodFtzZTQwMS0+c2l6ZXMtMV0pCisJCXJldHVybiAxOworCisJLyogU3RvcCBhIGN1cnJlbnQgc3RyZWFtIGFuZCBzdGFydCBpdCBhZ2FpbiBhdCB0aGUgbmV3IHNpemUgKi8KKwlpZiAod2Fzc3RyZWFtaW5nKQorCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CisJc2U0MDEtPmN3aWR0aD13aWR0aDsKKwlzZTQwMS0+Y2hlaWdodD1oZWlnaHQ7CisJaWYgKHdhc3N0cmVhbWluZykKKwkJc2U0MDFfc3RhcnRfc3RyZWFtKHNlNDAxKTsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFZpZGVvIERlY29kaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKwlUaGlzIHNob3VsZG4ndCByZWFsbHkgYmUgZG9uZSBpbiBhIHY0bCBkcml2ZXIuLi4uCisJQnV0IGl0IGRvZXMgbWFrZSB0aGUgaW1hZ2UgbG9vayBhIGxvdCBtb3JlIHVzYWJsZS4KKwlCYXNpY2FsbHkgaXQgbGlmdHMgdGhlIGRhcmsgcGl4ZWxzIG1vcmUgdGhhbiB0aGUgbGlnaHQgcGl4ZWxzLgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmhhbmNlX3BpY3R1cmUodW5zaWduZWQgY2hhciAqZnJhbWUsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbi0tKSB7CisJCSpmcmFtZT0oKCgqZnJhbWVeMjU1KSooKmZyYW1lXjI1NSkpLzI1NSleMjU1OworCQlmcmFtZSsrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY29kZV9KYW5nR3VfaW50ZWdyYXRlKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2U0MDFfZnJhbWUgKmZyYW1lPSZzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXTsKKwlpbnQgbGluZWxlbmd0aD1zZTQwMS0+Y3dpZHRoKjM7CisKKwlpZiAoZnJhbWUtPmN1cmxpbmVwaXggPj0gbGluZWxlbmd0aCkgeworCQlmcmFtZS0+Y3VybGluZXBpeD0wOworCQlmcmFtZS0+Y3VybGluZSs9bGluZWxlbmd0aDsKKwl9CisKKwkvKiBGaXJzdCB0aHJlZSBhcmUgYWJzb2x1dGUsIGFsbCBvdGhlcnMgcmVsYXRpdmUuCisJICogRm9ybWF0IGlzIHJnYiBmcm9tIHJpZ2h0IHRvIGxlZnQgKG1pcnJvcnJlZCBpbWFnZSksIAorCSAqIHdlIGZsaXAgaXQgdG8gZ2V0IGJnciBmcm9tIGxlZnQgdG8gcmlnaHQuICovCisJaWYgKGZyYW1lLT5jdXJsaW5lcGl4IDwgMykgeworCQkqKGZyYW1lLT5jdXJsaW5lLWZyYW1lLT5jdXJsaW5lcGl4KT0xK2RhdGEqNDsKKwl9IGVsc2UgeworCQkqKGZyYW1lLT5jdXJsaW5lLWZyYW1lLT5jdXJsaW5lcGl4KT0KKwkJICAgICooZnJhbWUtPmN1cmxpbmUtZnJhbWUtPmN1cmxpbmVwaXgrMykrZGF0YSo0OworCX0KKwlmcmFtZS0+Y3VybGluZXBpeCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjb2RlX0phbmdHdV92bGMgKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0X2V4cCwgaW50IHBhY2tldGxlbmd0aCkKK3sKKwlpbnQgcG9zPTA7CisJaW50IHZsY19jb2Q9MDsKKwlpbnQgdmxjX3NpemU9MDsKKwlpbnQgdmxjX2RhdGE9MDsKKwlpbnQgYml0X2N1cjsKKwlpbnQgYml0OworCWRhdGErPTQ7CisJd2hpbGUgKHBvcyA8IHBhY2tldGxlbmd0aCkgeworCQliaXRfY3VyPTg7CisJCXdoaWxlIChiaXRfY3VyICYmIGJpdF9leHApIHsKKwkJCWJpdD0oKCpkYXRhKT4+KGJpdF9jdXItMSkpJjE7CisJCQlpZiAoIXZsY19jb2QpIHsKKwkJCQlpZiAoYml0KSB7CisJCQkJCXZsY19zaXplKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCF2bGNfc2l6ZSkgeworCQkJCQkJZGVjb2RlX0phbmdHdV9pbnRlZ3JhdGUoc2U0MDEsIDApOworCQkJCQl9IGVsc2UgeworCQkJCQkJdmxjX2NvZD0yOworCQkJCQkJdmxjX2RhdGE9MDsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHZsY19jb2Q9PTIpIHsKKwkJCQkJaWYgKCFiaXQpCisJCQkJCQl2bGNfZGF0YSA9ICAtKDE8PHZsY19zaXplKSArIDE7CisJCQkJCXZsY19jb2QtLTsKKwkJCQl9CisJCQkJdmxjX3NpemUtLTsKKwkJCQl2bGNfZGF0YSs9Yml0PDx2bGNfc2l6ZTsKKwkJCQlpZiAoIXZsY19zaXplKSB7CisJCQkJCWRlY29kZV9KYW5nR3VfaW50ZWdyYXRlKHNlNDAxLCB2bGNfZGF0YSk7CisJCQkJCXZsY19jb2Q9MDsKKwkJCQl9CisJCQl9CisJCQliaXRfY3VyLS07CisJCQliaXRfZXhwLS07CisJCX0KKwkJcG9zKys7CisJCWRhdGErKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNvZGVfSmFuZ0d1IChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgc3RydWN0IHNlNDAxX3NjcmF0Y2ggKmJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhPWJ1ZmZlci0+ZGF0YTsKKwlpbnQgbGVuPWJ1ZmZlci0+bGVuZ3RoOworCWludCBiaXRfZXhwPTAsIHBpeF9leHA9MCwgZnJhbWVpbmZvPTAsIHBhY2tldGxlbmd0aD0wLCBzaXplOworCWludCBkYXRhcG9zPTA7CisKKwkvKiBOZXcgaW1hZ2U/ICovCisJaWYgKCFzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJwaXgpIHsKKwkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VybGluZXBpeD0wOworCQlzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJsaW5lPQorCQkgICAgc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZGF0YSsKKwkJICAgIHNlNDAxLT5jd2lkdGgqMy0xOworCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSkKKwkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9HUkFCQklORzsKKwkJc2U0MDEtPnZsY2RhdGFwb3M9MDsKKwl9CisJd2hpbGUgKGRhdGFwb3MgPCBsZW4pIHsKKwkJc2l6ZT0xMDI0LXNlNDAxLT52bGNkYXRhcG9zOworCQlpZiAoc2l6ZStkYXRhcG9zID4gbGVuKQorCQkJc2l6ZT1sZW4tZGF0YXBvczsKKwkJbWVtY3B5KHNlNDAxLT52bGNkYXRhK3NlNDAxLT52bGNkYXRhcG9zLCBkYXRhK2RhdGFwb3MsIHNpemUpOworCQlzZTQwMS0+dmxjZGF0YXBvcys9c2l6ZTsKKwkJcGFja2V0bGVuZ3RoPTA7CisJCWlmIChzZTQwMS0+dmxjZGF0YXBvcyA+PSA0KSB7CisJCQliaXRfZXhwPXNlNDAxLT52bGNkYXRhWzNdKyhzZTQwMS0+dmxjZGF0YVsyXTw8OCk7CisJCQlwaXhfZXhwPXNlNDAxLT52bGNkYXRhWzFdKygoc2U0MDEtPnZsY2RhdGFbMF0mMHgzZik8PDgpOworCQkJZnJhbWVpbmZvPXNlNDAxLT52bGNkYXRhWzBdJjB4YzA7CisJCQlwYWNrZXRsZW5ndGg9KChiaXRfZXhwKzQ3KT4+NCk8PDE7CisJCQlpZiAocGFja2V0bGVuZ3RoID4gMTAyNCkgeworCQkJCXNlNDAxLT52bGNkYXRhcG9zPTA7CisJCQkJZGF0YXBvcz1sZW47CisJCQkJcGFja2V0bGVuZ3RoPTA7CisJCQkJc2U0MDEtPmVycm9yKys7CisJCQkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4PTA7CisJCQl9CisJCX0KKwkJaWYgKHBhY2tldGxlbmd0aCAmJiBzZTQwMS0+dmxjZGF0YXBvcyA+PSBwYWNrZXRsZW5ndGgpIHsKKwkJCWRlY29kZV9KYW5nR3VfdmxjKHNlNDAxLCBzZTQwMS0+dmxjZGF0YSwgYml0X2V4cCwgcGFja2V0bGVuZ3RoKTsKKwkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmN1cnBpeCs9cGl4X2V4cCozOworCQkJZGF0YXBvcys9c2l6ZS0oc2U0MDEtPnZsY2RhdGFwb3MtcGFja2V0bGVuZ3RoKTsKKwkJCXNlNDAxLT52bGNkYXRhcG9zPTA7CisJCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4Pj1zZTQwMS0+Y3dpZHRoKnNlNDAxLT5jaGVpZ2h0KjMpIHsKKwkJCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4PT1zZTQwMS0+Y3dpZHRoKnNlNDAxLT5jaGVpZ2h0KjMpIHsKKwkJCQkJaWYgKHNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmdyYWJzdGF0ZT09RlJBTUVfR1JBQkJJTkcpIHsKKwkJCQkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9ET05FOworCQkJCQkJc2U0MDEtPmZyYW1lY291bnQrKzsKKwkJCQkJCXNlNDAxLT5yZWFkY291bnQrKzsKKwkJCQkJfQorCQkJCQlpZiAoc2U0MDEtPmZyYW1lWyhzZTQwMS0+Y3VyZnJhbWUrMSkmKFNFNDAxX05VTUZSQU1FUy0xKV0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSkgeworCQkJCQkJc2U0MDEtPmN1cmZyYW1lPShzZTQwMS0+Y3VyZnJhbWUrMSkgJiAoU0U0MDFfTlVNRlJBTUVTLTEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJc2U0MDEtPmVycm9yKys7CisJCQkJfQorCQkJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmN1cnBpeD0wOworCQkJCWRhdGFwb3M9bGVuOworCQkJfQorCQl9IGVsc2UgeworCQkJZGF0YXBvcys9c2l6ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY29kZV9iYXllciAoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHN0cnVjdCBzZTQwMV9zY3JhdGNoICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciAqZGF0YT1idWZmZXItPmRhdGE7CisJaW50IGxlbj1idWZmZXItPmxlbmd0aDsKKwlpbnQgb2Zmc2V0PWJ1ZmZlci0+b2Zmc2V0OworCWludCBkYXRhc2l6ZT1zZTQwMS0+Y3dpZHRoKnNlNDAxLT5jaGVpZ2h0OworCXN0cnVjdCBzZTQwMV9mcmFtZSAqZnJhbWU9JnNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdOworCisJdW5zaWduZWQgY2hhciAqZnJhbWVkYXRhPWZyYW1lLT5kYXRhLCAqY3VybGluZSwgKm5leHRsaW5lOworCWludCB3aWR0aD1zZTQwMS0+Y3dpZHRoOworCWludCBibGluZW9mZnNldD0wLCBibGluZTsKKwlpbnQgbGluZWxlbmd0aD13aWR0aCozLCBpOworCQorCisJaWYgKGZyYW1lLT5jdXJwaXg9PTApIHsKKwkJaWYgKGZyYW1lLT5ncmFic3RhdGU9PUZSQU1FX1JFQURZKSB7CisJCQlmcmFtZS0+Z3JhYnN0YXRlPUZSQU1FX0dSQUJCSU5HOworCQl9CisJCWZyYW1lLT5jdXJsaW5lPWZyYW1lZGF0YStsaW5lbGVuZ3RoOworCQlmcmFtZS0+Y3VybGluZXBpeD0wOworCX0KKworCWlmIChvZmZzZXQhPWZyYW1lLT5jdXJwaXgpIHsKKwkJLyogUmVnYXJkIGZyYW1lIGFzIGxvc3QgOiggKi8KKwkJZnJhbWUtPmN1cnBpeD0wOworCQlzZTQwMS0+ZXJyb3IrKzsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGlmIHdlIGhhdmUgdG8gbXVjaCBkYXRhICovCisJaWYgKGZyYW1lLT5jdXJwaXgrbGVuID4gZGF0YXNpemUpIHsKKwkJbGVuPWRhdGFzaXplLWZyYW1lLT5jdXJwaXg7CisJfQorCWlmIChzZTQwMS0+Y2hlaWdodCU0KQorCQlibGluZW9mZnNldD0xOworCWJsaW5lPWZyYW1lLT5jdXJwaXgvc2U0MDEtPmN3aWR0aCtibGluZW9mZnNldDsKKworCWN1cmxpbmU9ZnJhbWUtPmN1cmxpbmU7CisJbmV4dGxpbmU9Y3VybGluZStsaW5lbGVuZ3RoOworCWlmIChuZXh0bGluZSA+PSBmcmFtZWRhdGErZGF0YXNpemUqMykKKwkJbmV4dGxpbmU9Y3VybGluZTsKKwl3aGlsZSAobGVuKSB7CisJCWlmIChmcmFtZS0+Y3VybGluZXBpeD49d2lkdGgpIHsKKwkJCWZyYW1lLT5jdXJsaW5lcGl4LT13aWR0aDsKKwkJCWJsaW5lPWZyYW1lLT5jdXJwaXgvd2lkdGgrYmxpbmVvZmZzZXQ7CisJCQljdXJsaW5lKz1saW5lbGVuZ3RoKjI7CisJCQluZXh0bGluZSs9bGluZWxlbmd0aCoyOworCQkJaWYgKGN1cmxpbmUgPj0gZnJhbWVkYXRhK2RhdGFzaXplKjMpIHsKKwkJCQlmcmFtZS0+Y3VybGluZXBpeCsrOworCQkJCWN1cmxpbmUtPTM7CisJCQkJbmV4dGxpbmUtPTM7CisJCQkJbGVuLS07CisJCQkJZGF0YSsrOworCQkJCWZyYW1lLT5jdXJwaXgrKzsKKwkJCX0KKwkJCWlmIChuZXh0bGluZSA+PSBmcmFtZWRhdGErZGF0YXNpemUqMykKKwkJCQluZXh0bGluZT1jdXJsaW5lOworCQl9CisJCWlmICgoYmxpbmUmMSkpIHsKKwkJCWlmICgoZnJhbWUtPmN1cmxpbmVwaXgmMSkpIHsKKwkJCQkqKGN1cmxpbmUrMik9KmRhdGE7CisJCQkJKihjdXJsaW5lLTEpPSpkYXRhOworCQkJCSoobmV4dGxpbmUrMik9KmRhdGE7CisJCQkJKihuZXh0bGluZS0xKT0qZGF0YTsKKwkJCX0gZWxzZSB7CisJCQkJKihjdXJsaW5lKzEpPQorCQkJCQkoKihjdXJsaW5lKzEpKypkYXRhKS8yOworCQkJCSooY3VybGluZS0yKT0KKwkJCQkJKCooY3VybGluZS0yKSsqZGF0YSkvMjsKKwkJCQkqKG5leHRsaW5lKzEpPSpkYXRhOworCQkJCSoobmV4dGxpbmUtMik9KmRhdGE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGZyYW1lLT5jdXJsaW5lcGl4JjEpKSB7CisJCQkJKihjdXJsaW5lKzEpPQorCQkJCQkoKihjdXJsaW5lKzEpKypkYXRhKS8yOworCQkJCSooY3VybGluZS0yKT0KKwkJCQkJKCooY3VybGluZS0yKSsqZGF0YSkvMjsKKwkJCQkqKG5leHRsaW5lKzEpPSpkYXRhOworCQkJCSoobmV4dGxpbmUtMik9KmRhdGE7CisJCQl9IGVsc2UgeworCQkJCSpjdXJsaW5lPSpkYXRhOworCQkJCSooY3VybGluZS0zKT0qZGF0YTsKKwkJCQkqbmV4dGxpbmU9KmRhdGE7CisJCQkJKihuZXh0bGluZS0zKT0qZGF0YTsKKwkJCX0KKwkJfQorCQlmcmFtZS0+Y3VybGluZXBpeCsrOworCQljdXJsaW5lLT0zOworCQluZXh0bGluZS09MzsKKwkJbGVuLS07CisJCWRhdGErKzsKKwkJZnJhbWUtPmN1cnBpeCsrOworCX0KKwlmcmFtZS0+Y3VybGluZT1jdXJsaW5lOworCisJaWYgKGZyYW1lLT5jdXJwaXg+PWRhdGFzaXplKSB7CisJCS8qIEZpeCB0aGUgdG9wIGxpbmUgKi8KKwkJZnJhbWVkYXRhKz1saW5lbGVuZ3RoOworCQlmb3IgKGk9MDsgaTxsaW5lbGVuZ3RoOyBpKyspIHsKKwkJCWZyYW1lZGF0YS0tOworCQkJKmZyYW1lZGF0YT0qKGZyYW1lZGF0YStsaW5lbGVuZ3RoKTsKKwkJfQorCQkvKiBGaXggdGhlIGxlZnQgc2lkZSAoZ3JlZW4gaXMgYWxyZWFkeSBwcmVzZW50KSAqLworCQlmb3IgKGk9MDsgaTxzZTQwMS0+Y2hlaWdodDsgaSsrKSB7CisJCQkqZnJhbWVkYXRhPSooZnJhbWVkYXRhKzMpOworCQkJKihmcmFtZWRhdGErMSk9KihmcmFtZWRhdGErNCk7CisJCQkqKGZyYW1lZGF0YSsyKT0qKGZyYW1lZGF0YSs1KTsKKwkJCWZyYW1lZGF0YSs9bGluZWxlbmd0aDsKKwkJfQorCQlmcmFtZS0+Y3VycGl4PTA7CisJCWZyYW1lLT5ncmFic3RhdGU9RlJBTUVfRE9ORTsKKwkJc2U0MDEtPmZyYW1lY291bnQrKzsKKwkJc2U0MDEtPnJlYWRjb3VudCsrOworCQlpZiAoc2U0MDEtPmZyYW1lWyhzZTQwMS0+Y3VyZnJhbWUrMSkmKFNFNDAxX05VTUZSQU1FUy0xKV0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSkgeworCQkJc2U0MDEtPmN1cmZyYW1lPShzZTQwMS0+Y3VyZnJhbWUrMSkgJiAoU0U0MDFfTlVNRlJBTUVTLTEpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNlNDAxX25ld2ZyYW1lKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgZnJhbWVucikKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlpbnQgZXJyb3JzPTA7CisKKwl3aGlsZSAoc2U0MDEtPnN0cmVhbWluZyAmJgorCSAgICAoc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZT09RlJBTUVfUkVBRFkgfHwKKwkgICAgIHNlNDAxLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGU9PUZSQU1FX0dSQUJCSU5HKSApIHsKKwkJaWYoIXNlNDAxLT5mcmFtZVtmcmFtZW5yXS5jdXJwaXgpIHsKKwkJCWVycm9ycysrOworCQl9CisJCXdhaXRfaW50ZXJydXB0aWJsZSgKKwkJICAgIHNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0uc3RhdGUhPUJVRkZFUl9SRUFEWSwKKwkJICAgICZzZTQwMS0+d3EsCisJCSAgICAmd2FpdAorCQkpOworCQlpZiAoc2U0MDEtPm51bGxwYWNrZXRzID4gU0U0MDFfTUFYX05VTExQQUNLRVRTKSB7CisJCQlzZTQwMS0+bnVsbHBhY2tldHM9MDsKKwkJCWluZm8oInRvIG1hbnkgbnVsbCBsZW5ndGggcGFja2V0cywgcmVzdGFydGluZyBjYXB0dXJlIik7CisJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CisJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOwkJCQorCQl9IGVsc2UgeworCQkJaWYgKHNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0uc3RhdGUhPUJVRkZFUl9SRUFEWSkgeworCQkJCXNlNDAxLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGU9RlJBTUVfRVJST1I7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF91c2VdLnN0YXRlPUJVRkZFUl9CVVNZOworCQkJaWYgKHNlNDAxLT5mb3JtYXQ9PUZNVF9KQU5HR1UpIHsKKwkJCQlkZWNvZGVfSmFuZ0d1KHNlNDAxLCAmc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXSk7CisJCQl9IGVsc2UgeworCQkJCWRlY29kZV9iYXllcihzZTQwMSwgJnNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0pOworCQkJfQorCQkJc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXS5zdGF0ZT1CVUZGRVJfVU5VU0VEOworCQkJc2U0MDEtPnNjcmF0Y2hfdXNlKys7CisJCQlpZiAoc2U0MDEtPnNjcmF0Y2hfdXNlPj1TRTQwMV9OVU1TQ1JBVENIKQorCQkJCXNlNDAxLT5zY3JhdGNoX3VzZT0wOworCQkJaWYgKGVycm9ycyA+IFNFNDAxX01BWF9FUlJPUlMpIHsKKwkJCQllcnJvcnM9MDsKKwkJCQlpbmZvKCJ0byBtdWNoIGVycm9ycywgcmVzdGFydGluZyBjYXB0dXJlIik7CisJCQkJc2U0MDFfc3RvcF9zdHJlYW0oc2U0MDEpOworCQkJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZT09RlJBTUVfRE9ORSkKKwkJaWYgKHNlNDAxLT5lbmhhbmNlKQorCQkJZW5oYW5jZV9waWN0dXJlKHNlNDAxLT5mcmFtZVtmcmFtZW5yXS5kYXRhLCBzZTQwMS0+Y2hlaWdodCpzZTQwMS0+Y3dpZHRoKjMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfc2U0MDFfcmVtb3ZlX2Rpc2Nvbm5lY3RlZCAoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEpCit7CisJaW50IGk7CisKKyAgICAgICAgc2U0MDEtPmRldiA9IE5VTEw7CisKKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQlVGOyBpKyspIGlmIChzZTQwMS0+dXJiW2ldKSB7CisJCXVzYl9raWxsX3VyYihzZTQwMS0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKHNlNDAxLT51cmJbaV0pOworCQlzZTQwMS0+dXJiW2ldID0gTlVMTDsKKwkJa2ZyZWUoc2U0MDEtPnNidWZbaV0uZGF0YSk7CisJfQorCWZvciAoaT0wOyBpPFNFNDAxX05VTVNDUkFUQ0g7IGkrKykgaWYgKHNlNDAxLT5zY3JhdGNoW2ldLmRhdGEpIHsKKwkJa2ZyZWUoc2U0MDEtPnNjcmF0Y2hbaV0uZGF0YSk7CisJfQorCWlmIChzZTQwMS0+aW50dXJiKSB7CisJCXVzYl9raWxsX3VyYihzZTQwMS0+aW50dXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHNlNDAxLT5pbnR1cmIpOworCX0KKyAgICAgICAgaW5mbygiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKKworICAgICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgKi8KKwlrZnJlZShzZTQwMS0+d2lkdGgpOworCWtmcmVlKHNlNDAxLT5oZWlnaHQpOworCWtmcmVlKHNlNDAxKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVmlkZW80TGludXgKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgc2U0MDFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CisJaW50IGVyciA9IDA7CisKKwlpZiAoc2U0MDEtPnVzZXIpCisJCXJldHVybiAtRUJVU1k7CisJc2U0MDEtPmZidWYgPSBydm1hbGxvYyhzZTQwMS0+bWF4ZnJhbWVzaXplICogU0U0MDFfTlVNRlJBTUVTKTsKKwlpZiAoc2U0MDEtPmZidWYpCisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwllbHNlIAorCQllcnIgPSAtRU5PTUVNOworCXNlNDAxLT51c2VyID0gIWVycjsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IChzdHJ1Y3QgdXNiX3NlNDAxICopZGV2OworCWludCBpOworCisJcnZmcmVlKHNlNDAxLT5mYnVmLCBzZTQwMS0+bWF4ZnJhbWVzaXplICogU0U0MDFfTlVNRlJBTUVTKTsKKyAgICAgICAgaWYgKHNlNDAxLT5yZW1vdmVkKSB7CisJCXVzYl9zZTQwMV9yZW1vdmVfZGlzY29ubmVjdGVkKHNlNDAxKTsKKwkJaW5mbygiZGV2aWNlIHVucmVnaXN0ZXJlZCIpOworCX0gZWxzZSB7CisJCWZvciAoaT0wOyBpPFNFNDAxX05VTUZSQU1FUzsgaSsrKQorCQkJc2U0MDEtPmZyYW1lW2ldLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJCWlmIChzZTQwMS0+c3RyZWFtaW5nKQorCQkJc2U0MDFfc3RvcF9zdHJlYW0oc2U0MDEpOworCQlzZTQwMS0+dXNlcj0wOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlNDAxX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKXZkZXY7CisKKyAgICAgICAgaWYgKCFzZTQwMS0+ZGV2KQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOworCisgICAgICAgIHN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NHQ0FQOgorCXsKKwkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7CisJCXN0cmNweShiLT5uYW1lLCBzZTQwMS0+Y2FtZXJhX25hbWUpOworCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJYi0+Y2hhbm5lbHMgPSAxOworCQliLT5hdWRpb3MgPSAwOworCQliLT5tYXh3aWR0aCA9IHNlNDAxLT53aWR0aFtzZTQwMS0+c2l6ZXMtMV07CisJCWItPm1heGhlaWdodCA9IHNlNDAxLT5oZWlnaHRbc2U0MDEtPnNpemVzLTFdOworCQliLT5taW53aWR0aCA9IHNlNDAxLT53aWR0aFswXTsKKwkJYi0+bWluaGVpZ2h0ID0gc2U0MDEtPmhlaWdodFswXTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR0NIQU46CisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXYtPmZsYWdzID0gMDsKKwkJdi0+dHVuZXJzID0gMDsKKwkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQlzdHJjcHkodi0+bmFtZSwgIkNhbWVyYSIpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCisJCWlmICh2LT5jaGFubmVsICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorICAgICAgICBjYXNlIFZJRElPQ0dQSUNUOgorICAgICAgICB7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCXNlNDAxX2dldF9waWN0KHNlNDAxLCBwKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1BJQ1Q6CisJeworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKworCQlpZiAoc2U0MDFfc2V0X3BpY3Qoc2U0MDEsIHApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NXSU46CisJeworCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQlpZiAodnctPmZsYWdzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2dy0+Y2xpcGNvdW50KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChzZTQwMV9zZXRfc2l6ZShzZTQwMSwgdnctPndpZHRoLCB2dy0+aGVpZ2h0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKyAgICAgICAgfQorCWNhc2UgVklESU9DR1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCisJCXZ3LT54ID0gMDsgICAgICAgICAgICAgICAvKiBGSVhNRSAqLworCQl2dy0+eSA9IDA7CisJCXZ3LT5jaHJvbWFrZXkgPSAwOworCQl2dy0+ZmxhZ3MgPSAwOworCQl2dy0+Y2xpcGNvdW50ID0gMDsKKwkJdnctPndpZHRoID0gc2U0MDEtPmN3aWR0aDsKKwkJdnctPmhlaWdodCA9IHNlNDAxLT5jaGVpZ2h0OworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHTUJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKKwkJaW50IGk7CisKKwkJbWVtc2V0KHZtLCAwLCBzaXplb2YoKnZtKSk7CisJCXZtLT5zaXplID0gU0U0MDFfTlVNRlJBTUVTICogc2U0MDEtPm1heGZyYW1lc2l6ZTsKKwkJdm0tPmZyYW1lcyA9IFNFNDAxX05VTUZSQU1FUzsKKwkJZm9yIChpPTA7IGk8U0U0MDFfTlVNRlJBTUVTOyBpKyspCisJCQl2bS0+b2Zmc2V0c1tpXSA9IHNlNDAxLT5tYXhmcmFtZXNpemUgKiBpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQlpZiAodm0tPmZvcm1hdCAhPSBWSURFT19QQUxFVFRFX1JHQjI0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2bS0+ZnJhbWUgPj0gU0U0MDFfTlVNRlJBTUVTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChzZTQwMS0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgIT0gRlJBTUVfVU5VU0VEKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQkvKiBJcyB0aGlzIGFjY29yZGluZyB0byB0aGUgdjRsIHNwZWM/Pz8gKi8KKwkJaWYgKHNlNDAxX3NldF9zaXplKHNlNDAxLCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNlNDAxLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9SRUFEWTsKKworCQlpZiAoIXNlNDAxLT5zdHJlYW1pbmcpCisJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOworCisJCS8qIFNldCB0aGUgcGljdHVyZSBwcm9wZXJ0aWVzICovCisJCWlmIChzZTQwMS0+ZnJhbWVjb3VudD09MCkKKwkJCXNlNDAxX3NlbmRfcGljdChzZTQwMSk7CisJCS8qIENhbGlicmF0ZSB0aGUgcmVzZXQgbGV2ZWwgYWZ0ZXIgYSBmZXcgZnJhbWVzLiAqLworCQlpZiAoc2U0MDEtPmZyYW1lY291bnQlMjA9PTEpCisJCQlzZTQwMV9hdXRvX3Jlc2V0bGV2ZWwoc2U0MDEpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NZTkM6CisJeworCQlpbnQgKmZyYW1lID0gYXJnOworCQlpbnQgcmV0PTA7CisKKwkJaWYoKmZyYW1lIDwwIHx8ICpmcmFtZSA+PSBTRTQwMV9OVU1GUkFNRVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQ9c2U0MDFfbmV3ZnJhbWUoc2U0MDEsICpmcmFtZSk7CisJCXNlNDAxLT5mcmFtZVsqZnJhbWVdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJCXJldHVybiByZXQ7CisJfQorCWNhc2UgVklESU9DR0ZCVUY6CisJeworCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YiA9IGFyZzsKKworCQltZW1zZXQodmIsIDAsIHNpemVvZigqdmIpKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DS0VZOgorCQlyZXR1cm4gMDsKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DU0ZCVUY6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DR1RVTkVSOgorCWNhc2UgVklESU9DU1RVTkVSOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFZJRElPQ0dGUkVROgorCWNhc2UgVklESU9DU0ZSRVE6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCQlyZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOworICAgICAgICB9IC8qIGVuZCBzd2l0Y2ggKi8KKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZTQwMV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHNlNDAxX2RvX2lvY3RsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2U0MDFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmVhbGNvdW50PWNvdW50LCByZXQ9MDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKWRldjsKKworCisJaWYgKHNlNDAxLT5kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHJlYWxjb3VudCA+IHNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQqMykKKwkJcmVhbGNvdW50PXNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQqMzsKKworCS8qIFNob3VsZG4ndCBoYXBwZW46ICovCisJaWYgKHNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGU9PUZSQU1FX0dSQUJCSU5HKQorCQlyZXR1cm4gLUVCVVNZOworCXNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGU9RlJBTUVfUkVBRFk7CisJc2U0MDEtPmZyYW1lWzFdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJc2U0MDEtPmN1cmZyYW1lPTA7CisKKwlpZiAoIXNlNDAxLT5zdHJlYW1pbmcpCisJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CisKKwkvKiBTZXQgdGhlIHBpY3R1cmUgcHJvcGVydGllcyAqLworCWlmIChzZTQwMS0+ZnJhbWVjb3VudD09MCkKKwkJc2U0MDFfc2VuZF9waWN0KHNlNDAxKTsKKwkvKiBDYWxpYnJhdGUgdGhlIHJlc2V0IGxldmVsIGFmdGVyIGEgZmV3IGZyYW1lcy4gKi8KKwlpZiAoc2U0MDEtPmZyYW1lY291bnQlMjA9PTEpCisJCXNlNDAxX2F1dG9fcmVzZXRsZXZlbChzZTQwMSk7CisKKwlyZXQ9c2U0MDFfbmV3ZnJhbWUoc2U0MDEsIDApOworCisJc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsJCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHNlNDAxLT5mcmFtZVswXS5kYXRhLCByZWFsY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiByZWFsY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisKKwlkb3duKCZzZTQwMS0+bG9jayk7CisKKwlpZiAoc2U0MDEtPmRldiA9PSBOVUxMKSB7CisJCXVwKCZzZTQwMS0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoc2l6ZSA+ICgoKFNFNDAxX05VTUZSQU1FUyAqIHNlNDAxLT5tYXhmcmFtZXNpemUpICsgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKSkgeworCQl1cCgmc2U0MDEtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcG9zID0gKHVuc2lnbmVkIGxvbmcpc2U0MDEtPmZidWY7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpIHsKKwkJCXVwKCZzZTQwMS0+bG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAwOworCX0KKwl1cCgmc2U0MDEtPmxvY2spOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZTQwMV9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorICAgICAgICAub3BlbiA9ICAgICAgICAgc2U0MDFfb3BlbiwKKyAgICAgICAgLnJlbGVhc2UgPSAgICAgIHNlNDAxX2Nsb3NlLAorICAgICAgICAucmVhZCA9ICAgICAgICAgc2U0MDFfcmVhZCwKKyAgICAgICAgLm1tYXAgPSAgICAgICAgIHNlNDAxX21tYXAsCisJLmlvY3RsID0gICAgICAgIHNlNDAxX2lvY3RsLAorCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCit9Oworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2U0MDFfdGVtcGxhdGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisgICAgICAgIC5uYW1lID0gICAgICAgICAic2U0MDEgVVNCIGNhbWVyYSIsCisgICAgICAgIC50eXBlID0gICAgICAgICBWSURfVFlQRV9DQVBUVVJFLAorICAgICAgICAuaGFyZHdhcmUgPSAgICAgVklEX0hBUkRXQVJFX1NFNDAxLAorCS5mb3BzID0gICAgICAgICAmc2U0MDFfZm9wcywKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZTQwMV9pbml0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgYnV0dG9uKQoreworICAgICAgICBpbnQgaT0wLCByYzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjcFsweDQwXTsKKwljaGFyIHRlbXBbMjAwXTsKKworCS8qIGxlZCBvbiAqLworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIE5VTEwsIDApOworCisJLyogZ2V0IGNhbWVyYSBkZXNjcmlwdG9yICovCisJcmM9c2U0MDFfc25kY3RybCgwLCBzZTQwMSwgU0U0MDFfUkVRX0dFVF9DQU1FUkFfREVTQ1JJUFRPUiwgMCwgY3AsIHNpemVvZihjcCkpOworCWlmIChjcFsxXSE9MHg0MSkgeworCQllcnIoIldyb25nIGRlc2NyaXB0b3IgdHlwZSIpOworCQlyZXR1cm4gMTsKKwl9CisJc3ByaW50ZiAodGVtcCwgIkV4dHJhRmVhdHVyZXM6ICVkIiwgY3BbM10pOworCisJc2U0MDEtPnNpemVzPWNwWzRdK2NwWzVdKjI1NjsKKwlzZTQwMS0+d2lkdGg9a21hbGxvYyhzZTQwMS0+c2l6ZXMqc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCWlmICghc2U0MDEtPndpZHRoKQorCQlyZXR1cm4gMTsKKwlzZTQwMS0+aGVpZ2h0PWttYWxsb2Moc2U0MDEtPnNpemVzKnNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlNDAxLT5oZWlnaHQpIHsKKwkJa2ZyZWUoc2U0MDEtPndpZHRoKTsKKwkJcmV0dXJuIDE7CisJfQorCWZvciAoaT0wOyBpPHNlNDAxLT5zaXplczsgaSsrKSB7CisJCSAgICBzZTQwMS0+d2lkdGhbaV09Y3BbNitpKjQrMF0rY3BbNitpKjQrMV0qMjU2OworCQkgICAgc2U0MDEtPmhlaWdodFtpXT1jcFs2K2kqNCsyXStjcFs2K2kqNCszXSoyNTY7CisJfQorCXNwcmludGYgKHRlbXAsICIlcyBTaXplczoiLCB0ZW1wKTsKKwlmb3IgKGk9MDsgaTxzZTQwMS0+c2l6ZXM7IGkrKykgeworCQlzcHJpbnRmKHRlbXAsICIlcyAlZHglZCIsIHRlbXAsIHNlNDAxLT53aWR0aFtpXSwgc2U0MDEtPmhlaWdodFtpXSk7CisJfQorCWluZm8oIiVzIiwgdGVtcCk7CisJc2U0MDEtPm1heGZyYW1lc2l6ZT1zZTQwMS0+d2lkdGhbc2U0MDEtPnNpemVzLTFdKnNlNDAxLT5oZWlnaHRbc2U0MDEtPnNpemVzLTFdKjM7CisKKwlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX1dJRFRILCAwLCBjcCwgc2l6ZW9mKGNwKSk7CisJc2U0MDEtPmN3aWR0aD1jcFswXStjcFsxXSoyNTY7CisJcmM9c2U0MDFfc25kY3RybCgwLCBzZTQwMSwgU0U0MDFfUkVRX0dFVF9IRUlHSFQsIDAsIGNwLCBzaXplb2YoY3ApKTsKKwlzZTQwMS0+Y2hlaWdodD1jcFswXStjcFsxXSoyNTY7CisKKwlpZiAoIWNwWzJdICYmIFNFNDAxX0ZPUk1BVF9CQVlFUikgeworCQllcnIoIkJheWVyIGZvcm1hdCBub3Qgc3VwcG9ydGVkISIpOworCQlyZXR1cm4gMTsKKwl9CisJLyogc2V0IG91dHB1dCBtb2RlIChCQVlFUikgKi8KKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX1NFVF9PVVRQVVRfTU9ERSwgU0U0MDFfRk9STUFUX0JBWUVSLCBOVUxMLCAwKTsKKworCXJjPXNlNDAxX3NuZGN0cmwoMCwgc2U0MDEsIFNFNDAxX1JFUV9HRVRfQlJULCAwLCBjcCwgc2l6ZW9mKGNwKSk7CisJc2U0MDEtPmJyaWdodG5lc3M9Y3BbMF0rY3BbMV0qMjU2OworCS8qIHNvbWUgZGVmYXVsdCB2YWx1ZXMgKi8KKwlzZTQwMS0+cmVzZXRsZXZlbD0weDJkOworCXNlNDAxLT5yZ2Fpbj0weDIwOworCXNlNDAxLT5nZ2Fpbj0weDIwOworCXNlNDAxLT5iZ2Fpbj0weDIwOworCXNlNDAxX3NldF9leHBvc3VyZShzZTQwMSwgMjAwMDApOworCXNlNDAxLT5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCMjQ7CisJc2U0MDEtPmVuaGFuY2U9MTsKKwlzZTQwMS0+ZHJvcHBlZD0wOworCXNlNDAxLT5lcnJvcj0wOworCXNlNDAxLT5mcmFtZWNvdW50PTA7CisJc2U0MDEtPnJlYWRjb3VudD0wOworCisJLyogU3RhcnQgaW50ZXJydXB0IHRyYW5zZmVycyBmb3Igc25hcHNob3QgYnV0dG9uICovCisJaWYgKGJ1dHRvbikgeworCQlzZTQwMS0+aW50dXJiPXVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2U0MDEtPmludHVyYikgeworCQkJaW5mbygiQWxsb2NhdGlvbiBvZiBpbnR1cmIgZmFpbGVkIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQl1c2JfZmlsbF9pbnRfdXJiKHNlNDAxLT5pbnR1cmIsIHNlNDAxLT5kZXYsCisJCSAgICB1c2JfcmN2aW50cGlwZShzZTQwMS0+ZGV2LCBTRTQwMV9CVVRUT05fRU5EUE9JTlQpLAorCQkgICAgJnNlNDAxLT5idXR0b24sIHNpemVvZihzZTQwMS0+YnV0dG9uKSwKKwkJICAgIHNlNDAxX2J1dHRvbl9pcnEsCisJCSAgICBzZTQwMSwKKwkJICAgIDgKKwkJKTsKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHNlNDAxLT5pbnR1cmIsIEdGUF9LRVJORUwpKSB7CisJCQlpbmZvKCJpbnQgdXJiIGJ1cm5lZCBkb3duIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZQorCQlzZTQwMS0+aW50dXJiPU5VTEw7CisKKyAgICAgICAgLyogRmxhc2ggdGhlIGxlZCAqLworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUiwgMCwgTlVMTCwgMCk7CisJc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAwLCBOVUxMLCAwKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZTQwMV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisgICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZmFjZTsKKyAgICAgICAgc3RydWN0IHVzYl9zZTQwMSAqc2U0MDE7CisgICAgICAgIGNoYXIgKmNhbWVyYV9uYW1lPU5VTEw7CisJaW50IGJ1dHRvbj0xOworCisgICAgICAgIC8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworICAgICAgICBpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCisgICAgICAgIGludGVyZmFjZSA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKworICAgICAgICAvKiBJcyBpdCBhbiBzZTQwMT8gKi8KKyAgICAgICAgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwM2U4ICYmCisgICAgICAgICAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDAwMDQpIHsKKyAgICAgICAgICAgICAgICBjYW1lcmFfbmFtZT0iRW5kcG9pbnRzL0FveCBTRTQwMSI7CisgICAgICAgIH0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0NzEgJiYKKyAgICAgICAgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MDMwYikgeworICAgICAgICAgICAgICAgIGNhbWVyYV9uYW1lPSJQaGlsaXBzIFBDVkM2NjVLIjsKKyAgICAgICAgfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQ3ZCAmJgorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDUwMDEpIHsKKwkJY2FtZXJhX25hbWU9IktlbnNpbmd0b24gVmlkZW9DQU0gNjcwMTQiOworICAgICAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCisJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTAwMikgeworCQljYW1lcmFfbmFtZT0iS2Vuc2luZ3RvbiBWaWRlb0NBTSA2NzAxKDUvNykiOworICAgICAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCisJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTAwMykgeworCQljYW1lcmFfbmFtZT0iS2Vuc2luZ3RvbiBWaWRlb0NBTSA2NzAxNiI7CisJCWJ1dHRvbj0wOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworICAgICAgICAvKiBDaGVja2luZyB2ZW5kb3IvcHJvZHVjdCBzaG91bGQgYmUgZW5vdWdoLCBidXQgd2hhdCB0aGUgaGVsbCAqLworICAgICAgICBpZiAoaW50ZXJmYWNlLT5iSW50ZXJmYWNlQ2xhc3MgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIGlmIChpbnRlcmZhY2UtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAweDAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworICAgICAgICAvKiBXZSBmb3VuZCBvbmUgKi8KKyAgICAgICAgaW5mbygiU0U0MDEgY2FtZXJhIGZvdW5kOiAlcyIsIGNhbWVyYV9uYW1lKTsKKworICAgICAgICBpZiAoKHNlNDAxID0ga21hbGxvYyhzaXplb2YoKnNlNDAxKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBlcnIoImNvdWxkbid0IGttYWxsb2Mgc2U0MDEgc3RydWN0Iik7CisJCXJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KHNlNDAxLCAwLCBzaXplb2YoKnNlNDAxKSk7CisKKyAgICAgICAgc2U0MDEtPmRldiA9IGRldjsKKyAgICAgICAgc2U0MDEtPmlmYWNlID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyOworICAgICAgICBzZTQwMS0+Y2FtZXJhX25hbWUgPSBjYW1lcmFfbmFtZTsKKworCWluZm8oImZpcm13YXJlIHZlcnNpb246ICUwMngiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDI1NSk7CisKKyAgICAgICAgaWYgKHNlNDAxX2luaXQoc2U0MDEsIGJ1dHRvbikpIHsKKwkJa2ZyZWUoc2U0MDEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltZW1jcHkoJnNlNDAxLT52ZGV2LCAmc2U0MDFfdGVtcGxhdGUsIHNpemVvZihzZTQwMV90ZW1wbGF0ZSkpOworCW1lbWNweShzZTQwMS0+dmRldi5uYW1lLCBzZTQwMS0+Y2FtZXJhX25hbWUsIHN0cmxlbihzZTQwMS0+Y2FtZXJhX25hbWUpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZTQwMS0+d3EpOworCWluaXRfTVVURVgoJnNlNDAxLT5sb2NrKTsKKwl3bWIoKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnNlNDAxLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKKwkJa2ZyZWUoc2U0MDEpOworCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWluZm8oInJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsIHNlNDAxLT52ZGV2Lm1pbm9yKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHNlNDAxKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChzZTQwMSkgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmc2U0MDEtPnZkZXYpOworCQlpZiAoIXNlNDAxLT51c2VyKXsKKwkJCXVzYl9zZTQwMV9yZW1vdmVfZGlzY29ubmVjdGVkKHNlNDAxKTsKKwkJfSBlbHNlIHsKKwkJCXNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKwkJCXNlNDAxLT5mcmFtZVswXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKworCQkJc2U0MDEtPnN0cmVhbWluZyA9IDA7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2U0MDEtPndxKTsKKwkJCXNlNDAxLT5yZW1vdmVkID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlNDAxX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisgICAgICAgIC5uYW1lCQk9ICJzZTQwMSIsCisgICAgICAgIC5pZF90YWJsZQk9IGRldmljZV90YWJsZSwKKwkucHJvYmUJCT0gc2U0MDFfcHJvYmUsCisgICAgICAgIC5kaXNjb25uZWN0CT0gc2U0MDFfZGlzY29ubmVjdCwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBNb2R1bGUgcm91dGluZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2U0MDFfaW5pdCh2b2lkKQoreworCWluZm8oIlNFNDAxIHVzYiBjYW1lcmEgZHJpdmVyIHZlcnNpb24gJXMgcmVnaXN0ZXJpbmciLCB2ZXJzaW9uKTsKKwlpZiAoZmxpY2tlcmxlc3MpCisJCWlmIChmbGlja2VybGVzcyE9NTAgJiYgZmxpY2tlcmxlc3MhPTYwKSB7CisJCQlpbmZvKCJJbnZhbGxpZCBmbGlja2VybGVzcyB2YWx1ZSwgdXNlIDAsIDUwIG9yIDYwLiIpOworCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzZTQwMV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NlNDAxX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2U0MDFfZHJpdmVyKTsKKwlpbmZvKCJTRTQwMSBkcml2ZXIgZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9zZTQwMV9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zZTQwMV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTg0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5oCkBAIC0wLDAgKzEsMjMzIEBACisKKyNpZm5kZWYgX19MSU5VWF9zZTQwMV9ICisjZGVmaW5lIF9fTElOVVhfc2U0MDFfSAorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNkZWZpbmUgc2U0MDFfREVCVUcJLyogVHVybiBvbiBkZWJ1ZyBtZXNzYWdlcyAqLworCisjaWZkZWYgc2U0MDFfREVCVUcKKyMgIGRlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAoraWYgKGRlYnVnID49IGxldmVsKSBpbmZvKCJbIiBfX1BSRVRUWV9GVU5DVElPTl9fICI6JWRdICIgZm10LCBfX0xJTkVfXyAsICMjIGFyZ3MpCisjZWxzZQorIyAgZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKy8qIEFuIGFsbW9zdCBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzbGVlcF9vbl9pbnRlcnJ1cHRpYmxlICovCisjZGVmaW5lIHdhaXRfaW50ZXJydXB0aWJsZSh0ZXN0LCBxdWV1ZSwgd2FpdCkgXAoreyBcCisJYWRkX3dhaXRfcXVldWUocXVldWUsIHdhaXQpOyBcCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgXAorCWlmICh0ZXN0KSBcCisJCXNjaGVkdWxlKCk7IFwKKwlyZW1vdmVfd2FpdF9xdWV1ZShxdWV1ZSwgd2FpdCk7IFwKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOyBcCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSBcCisJCWJyZWFrOyBcCit9CisKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9DQU1FUkFfREVTQ1JJUFRPUgkJMHgwNgorI2RlZmluZSBTRTQwMV9SRVFfU1RBUlRfQ09OVElOVU9VU19DQVBUVVJFCTB4NDEKKyNkZWZpbmUgU0U0MDFfUkVRX1NUT1BfQ09OVElOVU9VU19DQVBUVVJFCTB4NDIKKyNkZWZpbmUgU0U0MDFfUkVRX0NBUFRVUkVfRlJBTUUJCQkweDQzCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfQlJUCQkJMHg0NAorI2RlZmluZSBTRTQwMV9SRVFfU0VUX0JSVAkJCTB4NDUKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9XSURUSAkJCTB4NGMKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9XSURUSAkJCTB4NGQKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9IRUlHSFQJCQkweDRlCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfSEVJR0hUCQkJMHg0ZgorI2RlZmluZSBTRTQwMV9SRVFfR0VUX09VVFBVVF9NT0RFCQkweDUwCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfT1VUUFVUX01PREUJCTB4NTEKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9FWFRfRkVBVFVSRQkJMHg1MgorI2RlZmluZSBTRTQwMV9SRVFfU0VUX0VYVF9GRUFUVVJFCQkweDUzCisjZGVmaW5lIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIJCQkweDU2CisjZGVmaW5lIFNFNDAxX1JFUV9MRURfQ09OVFJPTAkJCTB4NTcKKyNkZWZpbmUgU0U0MDFfUkVRX0JJT1MJCQkJMHhmZgorCisjZGVmaW5lIFNFNDAxX0JJT1NfUkVBRAkJCQkweDA3CisKKyNkZWZpbmUgU0U0MDFfRk9STUFUX0JBWUVSCTB4NDAKKworLyogSHl1bmRhaSBodjcxMzFiIHJlZ2lzdGVycworICAgNzEyMSBhbmQgNzE0MSBzaG91bGQgYmUgdGhlIHNhbWUgKGhhdmVuJ3QgcmVhbGx5IGNoZWNrZWQuLi4pICovCisvKiBNb2RlIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19NT0RFX0EJCTB4MDAKKyNkZWZpbmUgSFY3MTMxX1JFR19NT0RFX0IJCTB4MDEKKyNkZWZpbmUgSFY3MTMxX1JFR19NT0RFX0MJCTB4MDIKKy8qIEZyYW1lIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19GUlNVCQkweDEwCisjZGVmaW5lIEhWNzEzMV9SRUdfRlJTTAkJMHgxMQorI2RlZmluZSBIVjcxMzFfUkVHX0ZDU1UJCTB4MTIKKyNkZWZpbmUgSFY3MTMxX1JFR19GQ1NMCQkweDEzCisjZGVmaW5lIEhWNzEzMV9SRUdfRldIVQkJMHgxNAorI2RlZmluZSBIVjcxMzFfUkVHX0ZXSEwJCTB4MTUKKyNkZWZpbmUgSFY3MTMxX1JFR19GV1dVCQkweDE2CisjZGVmaW5lIEhWNzEzMV9SRUdfRldXTAkJMHgxNworLyogVGltaW5nIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19USEJVCQkweDIwCisjZGVmaW5lIEhWNzEzMV9SRUdfVEhCTAkJMHgyMQorI2RlZmluZSBIVjcxMzFfUkVHX1RWQlUJCTB4MjIKKyNkZWZpbmUgSFY3MTMxX1JFR19UVkJMCQkweDIzCisjZGVmaW5lIEhWNzEzMV9SRUdfVElUVQkJMHgyNQorI2RlZmluZSBIVjcxMzFfUkVHX1RJVE0JCTB4MjYKKyNkZWZpbmUgSFY3MTMxX1JFR19USVRMCQkweDI3CisjZGVmaW5lIEhWNzEzMV9SRUdfVE1DRAkJMHgyOAorLyogQWRqdXN0IFJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19BUkxWCQkweDMwCisjZGVmaW5lIEhWNzEzMV9SRUdfQVJDRwkJMHgzMQorI2RlZmluZSBIVjcxMzFfUkVHX0FHQ0cJCTB4MzIKKyNkZWZpbmUgSFY3MTMxX1JFR19BQkNHCQkweDMzCisjZGVmaW5lIEhWNzEzMV9SRUdfQVBCVgkJMHgzNAorI2RlZmluZSBIVjcxMzFfUkVHX0FTTFAJCTB4NTQKKy8qIE9mZnNldCBSZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfT0ZTUgkJMHg1MAorI2RlZmluZSBIVjcxMzFfUkVHX09GU0cJCTB4NTEKKyNkZWZpbmUgSFY3MTMxX1JFR19PRlNCCQkweDUyCisvKiBSRXNldCBsZXZlbCBzdGF0aXN0aWNzIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19MT1JFRk5PSAkweDU3CisjZGVmaW5lIEhWNzEzMV9SRUdfTE9SRUZOT0wJMHg1OAorI2RlZmluZSBIVjcxMzFfUkVHX0hJUkVGTk9ICTB4NTkKKyNkZWZpbmUgSFY3MTMxX1JFR19ISVJFRk5PTAkweDVhCisKKy8qIHNlNDAxIHJlZ2lzdGVycyAqLworI2RlZmluZSBTRTQwMV9PUEVSQVRJTkdNT0RFCTB4MjAwMAorCisKKy8qIHNpemUgb2YgdXNiIHRyYW5zZmVycyAqLworI2RlZmluZSBTRTQwMV9QQUNLRVRTSVpFCTQwOTYKKy8qIG51bWJlciBvZiBxdWV1ZWQgYnVsayB0cmFuc2ZlcnMgdG8gdXNlLCBzaG91bGQgYmUgYWJvdXQgOCAqLworI2RlZmluZSBTRTQwMV9OVU1TQlVGCQkxCisvKiByZWFkIHRoZSB1c2Igc3BlY3MgZm9yIHRoaXMgb25lIDopICovCisjZGVmaW5lIFNFNDAxX1ZJREVPX0VORFBPSU5UCTEKKyNkZWZpbmUgU0U0MDFfQlVUVE9OX0VORFBPSU5UCTIKKy8qIG51bWJlciBvZiBmcmFtZXMgc3VwcG9ydGVkIGJ5IHRoZSB2NGwgcGFydCAqLworI2RlZmluZSBTRTQwMV9OVU1GUkFNRVMJCTIKKy8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgcGFzc2luZyBkYXRhIHRvIHRoZSBkZWNvZGVycyAqLworI2RlZmluZSBTRTQwMV9OVU1TQ1JBVENICTMyCisvKiBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIGluIGEgSmFuZ0d1IHBhY2tldCAqLworI2RlZmluZSBTRTQwMV9WTENEQVRBTEVOCTEwMjQKKy8qIG51bWJlciBvZiBudWwgc2l6ZWQgcGFja2V0cyB0byByZWNlaXZlIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KKyNkZWZpbmUgU0U0MDFfTUFYX05VTExQQUNLRVRTCTQwMDAKKy8qIG51bWJlciBvZiBkZWNvZGluZyBlcnJvcnMgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLworI2RlZmluZSBTRTQwMV9NQVhfRVJST1JTCTIwMAorCitzdHJ1Y3QgdXNiX2RldmljZTsKKworc3RydWN0IHNlNDAxX3NidWYgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9OworCitlbnVtIHsKKwlGUkFNRV9VTlVTRUQsCQkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLworCUZSQU1FX1JFQURZLAkJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGUkFNRV9HUkFCQklORywJCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLworCUZSQU1FX0RPTkUsCQkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KKwlGUkFNRV9FUlJPUiwJCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworfTsKKworZW51bSB7CisJRk1UX0JBWUVSLAorCUZNVF9KQU5HR1UsCit9OworCitlbnVtIHsKKwlCVUZGRVJfVU5VU0VELAorCUJVRkZFUl9SRUFEWSwKKwlCVUZGRVJfQlVTWSwKKwlCVUZGRVJfRE9ORSwKK307CisKK3N0cnVjdCBzZTQwMV9zY3JhdGNoIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXZvbGF0aWxlIGludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OworCWludCBsZW5ndGg7Cit9OworCitzdHJ1Y3Qgc2U0MDFfZnJhbWUgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CQkvKiBGcmFtZSBidWZmZXIgKi8KKworCXZvbGF0aWxlIGludCBncmFic3RhdGU7CS8qIFN0YXRlIG9mIGdyYWJiaW5nICovCisKKwl1bnNpZ25lZCBjaGFyICpjdXJsaW5lOworCWludCBjdXJsaW5lcGl4OworCWludCBjdXJwaXg7Cit9OworCitzdHJ1Y3QgdXNiX3NlNDAxIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisKKwkvKiBEZXZpY2Ugc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCXVuc2lnbmVkIGNoYXIgaWZhY2U7CisKKwljaGFyICpjYW1lcmFfbmFtZTsKKworCWludCBjaGFuZ2U7CisJaW50IGJyaWdodG5lc3M7CisJaW50IGh1ZTsKKwlpbnQgcmdhaW47CisJaW50IGdnYWluOworCWludCBiZ2FpbjsKKwlpbnQgZXhwb3NlX2g7CisJaW50IGV4cG9zZV9tOworCWludCBleHBvc2VfbDsKKwlpbnQgcmVzZXRsZXZlbDsKKwkKKwlpbnQgZW5oYW5jZTsKKworCWludCBmb3JtYXQ7CisJaW50IHNpemVzOworCWludCAqd2lkdGg7CisJaW50ICpoZWlnaHQ7CisJaW50IGN3aWR0aDsJCS8qIGN1cnJlbnQgd2lkdGggKi8KKwlpbnQgY2hlaWdodDsJCS8qIGN1cnJlbnQgaGVpZ2h0ICovCisJaW50IHBhbGV0dGU7CisJaW50IG1heGZyYW1lc2l6ZTsKKwlpbnQgY2ZyYW1lc2l6ZTsJCS8qIGN1cnJlbnQgZnJhbWVzaXplICovCisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJaW50IHVzZXI7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCisJaW50IHJlbW92ZWQ7CQkvKiBkZXZpY2UgZGlzY29ubmVjdGVkICovCisKKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyB2aWRlbz8gKi8KKworCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLworCisJc3RydWN0IHVyYiAqdXJiW1NFNDAxX05VTVNCVUZdOworCXN0cnVjdCB1cmIgKmludHVyYjsKKwkKKwlpbnQgYnV0dG9uOworCWludCBidXR0b25wcmVzc2VkOworCisJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KKwlzdHJ1Y3Qgc2U0MDFfZnJhbWUgZnJhbWVbU0U0MDFfTlVNRlJBTUVTXTsJCisJaW50IHJlYWRjb3VudDsKKwlpbnQgZnJhbWVjb3VudDsKKwlpbnQgZXJyb3I7CisJaW50IGRyb3BwZWQ7CisKKwlpbnQgc2NyYXRjaF9uZXh0OworCWludCBzY3JhdGNoX3VzZTsKKwlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKKwlzdHJ1Y3Qgc2U0MDFfc2NyYXRjaCBzY3JhdGNoW1NFNDAxX05VTVNDUkFUQ0hdOworCisJLyogRGVjb2RlciBzcGVjaWZpYyBkYXRhOiAqLworCXVuc2lnbmVkIGNoYXIgdmxjZGF0YVtTRTQwMV9WTENEQVRBTEVOXTsKKwlpbnQgdmxjZGF0YXBvczsKKwlpbnQgYmF5ZXJvZmZzZXQ7CisKKwlzdHJ1Y3Qgc2U0MDFfc2J1ZiBzYnVmW1NFNDAxX05VTVNCVUZdOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCisKKwlpbnQgbnVsbHBhY2tldHM7Cit9OworCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDIuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjhhNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oCkBAIC0wLDAgKzEsMjA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWNEwyIGRyaXZlciBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TTjlDMTAyX0hfCisjZGVmaW5lIF9TTjlDMTAyX0hfCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTTjlDMTAyX0RFQlVHCisjZGVmaW5lIFNOOUMxMDJfREVCVUdfTEVWRUwgICAgICAgMgorI2RlZmluZSBTTjlDMTAyX01BWF9ERVZJQ0VTICAgICAgIDY0CisjZGVmaW5lIFNOOUMxMDJfUFJFU0VSVkVfSU1HU0NBTEUgMAorI2RlZmluZSBTTjlDMTAyX0ZPUkNFX01VTk1BUCAgICAgIDAKKyNkZWZpbmUgU045QzEwMl9NQVhfRlJBTUVTICAgICAgICAzMgorI2RlZmluZSBTTjlDMTAyX1VSQlMgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU045QzEwMl9JU09fUEFDS0VUUyAgICAgICA3CisjZGVmaW5lIFNOOUMxMDJfQUxURVJOQVRFX1NFVFRJTkcgOAorI2RlZmluZSBTTjlDMTAyX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMiAqIFNOOUMxMDJfSVNPX1BBQ0tFVFMpCisjZGVmaW5lIFNOOUMxMDJfQ1RSTF9USU1FT1VUICAgICAgMzAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTTjlDMTAyX01PRFVMRV9OQU1FICAgICAiVjRMMiBkcml2ZXIgZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzIgorI2RlZmluZSBTTjlDMTAyX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDQtMjAwNSBMdWNhIFJpc29saWEiCisjZGVmaW5lIFNOOUMxMDJfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX0xJQ0VOU0UgICJHUEwiCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuMjQiCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMCwgMjQpCisKK2VudW0gc245YzEwMl9icmlkZ2UgeworCUJSSURHRV9TTjlDMTAxID0gMHgwMSwKKwlCUklER0VfU045QzEwMiA9IDB4MDIsCisJQlJJREdFX1NOOUMxMDMgPSAweDA0LAorfTsKKworU045QzEwMl9JRF9UQUJMRQorU045QzEwMl9TRU5TT1JfVEFCTEUKKworZW51bSBzbjljMTAyX2ZyYW1lX3N0YXRlIHsKKwlGX1VOVVNFRCwKKwlGX1FVRVVFRCwKKwlGX0dSQUJCSU5HLAorCUZfRE9ORSwKKwlGX0VSUk9SLAorfTsKKworc3RydWN0IHNuOWMxMDJfZnJhbWVfdCB7CisJdm9pZCogYnVmbWVtOworCXN0cnVjdCB2NGwyX2J1ZmZlciBidWY7CisJZW51bSBzbjljMTAyX2ZyYW1lX3N0YXRlIHN0YXRlOworCXN0cnVjdCBsaXN0X2hlYWQgZnJhbWU7CisJdW5zaWduZWQgbG9uZyB2bWFfdXNlX2NvdW50OworfTsKKworZW51bSBzbjljMTAyX2Rldl9zdGF0ZSB7CisJREVWX0lOSVRJQUxJWkVEID0gMHgwMSwKKwlERVZfRElTQ09OTkVDVEVEID0gMHgwMiwKKwlERVZfTUlTQ09ORklHVVJFRCA9IDB4MDQsCit9OworCitlbnVtIHNuOWMxMDJfaW9fbWV0aG9kIHsKKwlJT19OT05FLAorCUlPX1JFQUQsCisJSU9fTU1BUCwKK307CisKK2VudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX0lOVEVSUlVQVCwKKwlTVFJFQU1fT04sCit9OworCit0eXBlZGVmIGNoYXIgc245YzEwMl9zb2ZfaGVhZGVyX3RbMTJdOwordHlwZWRlZiBjaGFyIHNuOWMxMDJfZW9mX2hlYWRlcl90WzRdOworCitzdHJ1Y3Qgc245YzEwMl9zeXNmc19hdHRyIHsKKwl1OCByZWcsIGkyY19yZWc7CisJc245YzEwMl9zb2ZfaGVhZGVyX3QgZnJhbWVfaGVhZGVyOworfTsKKworc3RydWN0IHNuOWMxMDJfbW9kdWxlX3BhcmFtIHsKKwl1OCBmb3JjZV9tdW5tYXA7Cit9OworCitzdGF0aWMgREVDTEFSRV9NVVRFWChzbjljMTAyX3N5c2ZzX2xvY2spOworc3RhdGljIERFQ0xBUkVfUldTRU0oc245YzEwMl9kaXNjb25uZWN0KTsKKworc3RydWN0IHNuOWMxMDJfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKworCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsKKworCWVudW0gc245YzEwMl9icmlkZ2UgYnJpZGdlOworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yOworCisJc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsKKwlzdHJ1Y3QgdXJiKiB1cmJbU045QzEwMl9VUkJTXTsKKwl2b2lkKiB0cmFuc2Zlcl9idWZmZXJbU045QzEwMl9VUkJTXTsKKwl1OCogY29udHJvbF9idWZmZXI7CisKKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90ICpmcmFtZV9jdXJyZW50LCBmcmFtZVtTTjlDMTAyX01BWF9GUkFNRVNdOworCXN0cnVjdCBsaXN0X2hlYWQgaW5xdWV1ZSwgb3V0cXVldWU7CisJdTMyIGZyYW1lX2NvdW50LCBuYnVmZmVycywgbnJlYWRidWZmZXJzOworCisJZW51bSBzbjljMTAyX2lvX21ldGhvZCBpbzsKKwllbnVtIHNuOWMxMDJfc3RyZWFtX3N0YXRlIHN0cmVhbTsKKworCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBjb21wcmVzc2lvbjsKKworCXN0cnVjdCBzbjljMTAyX3N5c2ZzX2F0dHIgc3lzZnM7CisJc245YzEwMl9zb2ZfaGVhZGVyX3Qgc29mX2hlYWRlcjsKKwl1MTYgcmVnWzMyXTsKKworCXN0cnVjdCBzbjljMTAyX21vZHVsZV9wYXJhbSBtb2R1bGVfcGFyYW07CisKKwllbnVtIHNuOWMxMDJfZGV2X3N0YXRlIHN0YXRlOworCXU4IHVzZXJzOworCisJc3RydWN0IHNlbWFwaG9yZSBkZXZfc2VtLCBmaWxlb3Bfc2VtOworCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuLCB3YWl0X2ZyYW1lLCB3YWl0X3N0cmVhbTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZAorc245YzEwMl9hdHRhY2hfc2Vuc29yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQoreworCWNhbS0+c2Vuc29yID0gc2Vuc29yOworCWNhbS0+c2Vuc29yLT5kZXYgPSAmY2FtLT5kZXY7CisJY2FtLT5zZW5zb3ItPnVzYmRldiA9IGNhbS0+dXNiZGV2OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBEQkcKKyN1bmRlZiBLREJHCisjaWZkZWYgU045QzEwMl9ERUJVRworIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmICgobGV2ZWwpID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2VycigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID09IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9pbmZvKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA+PSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlkZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICAgICAgICBcCisJCQkgICAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoZGVidWcgPj0gKGxldmVsKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoKGxldmVsKSA9PSAxIHx8IChsZXZlbCkgPT0gMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByX2luZm8oInNuOWMxMDI6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA9PSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcl9kZWJ1Zygic245YzEwMjogWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sICBcCisJCQkgICAgICAgICBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisjCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsKKyMJZGVmaW5lIERCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCk7CisjZW5kaWYKKworI3VuZGVmIFBEQkcKKyNkZWZpbmUgUERCRyhmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2Rldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOworCisjdW5kZWYgUERCR0cKKyNkZWZpbmUgUERCR0coZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCk7IC8qIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfU045QzEwMl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg0MDFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9jb3JlLmMKQEAgLTAsMCArMSwyNzQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWNEwyIGRyaXZlciBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAic245YzEwMi5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzbjljMTAyX2lkX3RhYmxlKTsKKworTU9EVUxFX0FVVEhPUihTTjlDMTAyX01PRFVMRV9BVVRIT1IgIiAiIFNOOUMxMDJfQVVUSE9SX0VNQUlMKTsKK01PRFVMRV9ERVNDUklQVElPTihTTjlDMTAyX01PRFVMRV9OQU1FKTsKK01PRFVMRV9WRVJTSU9OKFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoU045QzEwMl9NT0RVTEVfTElDRU5TRSk7CisKK3N0YXRpYyBzaG9ydCB2aWRlb19ucltdID0ge1swIC4uLiBTTjlDMTAyX01BWF9ERVZJQ0VTLTFdID0gLTF9OworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBzaG9ydCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLAorICAgICAgICAgICAgICAgICAiXG48LTF8blssLi4uXT4gU3BlY2lmeSBWNEwyIG1pbm9yIG1vZGUgbnVtYmVyLiIKKyAgICAgICAgICAgICAgICAgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKKyAgICAgICAgICAgICAgICAgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgorICAgICAgICAgICAgICAgICAiXG5Zb3UgY2FuIHNwZWNpZnkgdXAgdG8gIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX01BWF9ERVZJQ0VTKQorICAgICAgICAgICAgICAgICAiIGNhbWVyYXMgdGhpcyB3YXkuIgorICAgICAgICAgICAgICAgICAiXG5Gb3IgZXhhbXBsZToiCisgICAgICAgICAgICAgICAgICJcbnZpZGVvX25yPS0xLDIsLTEgd291bGQgYXNzaWduIG1pbm9yIG51bWJlciAyIHRvIgorICAgICAgICAgICAgICAgICAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKKyAgICAgICAgICAgICAgICAgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisKK3N0YXRpYyBzaG9ydCBmb3JjZV9tdW5tYXBbXSA9IHtbMCAuLi4gU045QzEwMl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOOUMxMDJfRk9SQ0VfTVVOTUFQfTsKK21vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9tdW5tYXAsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tdW5tYXAsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEZvcmNlIHRoZSBhcHBsaWNhdGlvbiB0byB1bm1hcCBwcmV2aW91c2x5ICIKKyAgICAgICAgICAgICAgICAgIlxubWFwcGVkIGJ1ZmZlciBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgYW55IFZJRElPQ19TX0NST1Agb3IgIgorICAgICAgICAgICAgICAgICAiXG5WSURJT0NfU19GTVQgaW9jdGwncy4gTm90IGFsbCB0aGUgYXBwbGljYXRpb25zIHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAiXG50aGlzIGZlYXR1cmUuIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoICIKKyAgICAgICAgICAgICAgICAgIlxuZGV0ZWN0ZWQgY2FtZXJhLiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBkbyBub3QgZm9yY2UgbWVtb3J5IHVubWFwcGluZyIKKyAgICAgICAgICAgICAgICAgIlxuIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0ZPUkNFX01VTk1BUCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisKKyNpZmRlZiBTTjlDMTAyX0RFQlVHCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVidWcgPSBTTjlDMTAyX0RFQlVHX0xFVkVMOworbW9kdWxlX3BhcmFtKGRlYnVnLCB1c2hvcnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKyAgICAgICAgICAgICAgICAgIlxuPG4+IERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6IgorICAgICAgICAgICAgICAgICAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCisgICAgICAgICAgICAgICAgICJcbjEgPSBjcml0aWNhbCBlcnJvcnMiCisgICAgICAgICAgICAgICAgICJcbjIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMiCisgICAgICAgICAgICAgICAgICJcbjMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMiCisgICAgICAgICAgICAgICAgICJcbkxldmVsIDMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSAiCisgICAgICAgICAgICAgICAgICJvbmUgZGV2aWNlIGlzIHVzZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9ERUJVR19MRVZFTCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc245YzEwMl9zb2ZfaGVhZGVyX3Qgc245YzEwMl9zb2ZfaGVhZGVyW10gPSB7CisJezB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzQsIDB4YzQsIDB4OTYsIDB4MDB9LAorCXsweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0LCAweDk2LCAweDAxfSwKK307CisKKworc3RhdGljIHNuOWMxMDJfZW9mX2hlYWRlcl90IHNuOWMxMDJfZW9mX2hlYWRlcltdID0geworCXsweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg0MCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4ODAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGMwLCAweDAwLCAweDAwLCAweDAwfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHNpemVfdCBzaXplKQoreworCXZvaWQqIG1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJbWVtID0gdm1hbGxvY18zMigodW5zaWduZWQgbG9uZylzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkKiBtZW0sIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJdmZyZWUobWVtKTsKK30KKworCitzdGF0aWMgdTMyIAorc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHUzMiBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHNuOWMxMDJfaW9fbWV0aG9kIGlvKQoreworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHAgPSAmKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0KTsKKwlzdHJ1Y3QgdjRsMl9yZWN0KiByID0gJihjYW0tPnNlbnNvci0+Y3JvcGNhcC5ib3VuZHMpOworCWNvbnN0IHNpemVfdCBpbWFnZXNpemUgPSBjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgaW8gPT0gSU9fUkVBRCA/CisJICAgICAgICAgICAgICAgICAgICAgICAgIChwLT53aWR0aCAqIHAtPmhlaWdodCAqIHAtPnByaXYpIC8gOCA6CisJICAgICAgICAgICAgICAgICAgICAgICAgIChyLT53aWR0aCAqIHItPmhlaWdodCAqIHAtPnByaXYpIC8gODsKKwl2b2lkKiBidWZmID0gTlVMTDsKKwl1MzIgaTsKKworCWlmIChjb3VudCA+IFNOOUMxMDJfTUFYX0ZSQU1FUykKKwkJY291bnQgPSBTTjlDMTAyX01BWF9GUkFNRVM7CisKKwljYW0tPm5idWZmZXJzID0gY291bnQ7CisJd2hpbGUgKGNhbS0+bmJ1ZmZlcnMgPiAwKSB7CisJCWlmICgoYnVmZiA9IHJ2bWFsbG9jKGNhbS0+bmJ1ZmZlcnMgKiBQQUdFX0FMSUdOKGltYWdlc2l6ZSkpKSkKKwkJCWJyZWFrOworCQljYW0tPm5idWZmZXJzLS07CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPmZyYW1lW2ldLmJ1Zm1lbSA9IGJ1ZmYgKyBpKlBBR0VfQUxJR04oaW1hZ2VzaXplKTsKKwkJY2FtLT5mcmFtZVtpXS5idWYuaW5kZXggPSBpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5tLm9mZnNldCA9IGkqUEFHRV9BTElHTihpbWFnZXNpemUpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5sZW5ndGggPSBpbWFnZXNpemU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLnNlcXVlbmNlID0gMDsKKwkJY2FtLT5mcmFtZVtpXS5idWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLmZsYWdzID0gMDsKKwl9CisKKwlyZXR1cm4gY2FtLT5uYnVmZmVyczsKK30KKworCitzdGF0aWMgdm9pZCBzbjljMTAyX3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpZiAoY2FtLT5uYnVmZmVycykgeworCQlydmZyZWUoY2FtLT5mcmFtZVswXS5idWZtZW0sCisJCSAgICAgICBjYW0tPm5idWZmZXJzICogY2FtLT5mcmFtZVswXS5idWYubGVuZ3RoKTsKKwkJY2FtLT5uYnVmZmVycyA9IDA7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfZW1wdHlfZnJhbWVxdWV1ZXMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJdTMyIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmY2FtLT5pbnF1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FtLT5vdXRxdWV1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU045QzEwMl9NQVhfRlJBTUVTOyBpKyspIHsKKwkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZfVU5VU0VEOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5ieXRlc3VzZWQgPSAwOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQlpZiAoY2FtLT5mcmFtZVtpXS5zdGF0ZSA9PSBGX1VOVVNFRCkgeworCQkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZfUVVFVUVEOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCQlsaXN0X2FkZF90YWlsKCZjYW0tPmZyYW1lW2ldLmZyYW1lLCAmY2FtLT5pbnF1ZXVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgc245YzEwMl93cml0ZV9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwl1OCogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IHJlczsKKworCSpidWZmID0gdmFsdWU7CisKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAorCSAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgMCwgYnVmZiwgMSwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCWlmIChyZXMgPCAwKSB7CisJCURCRygzLCAiRmFpbGVkIHRvIHdyaXRlIGEgcmVnaXN0ZXIgKHZhbHVlIDB4JTAyWCwgaW5kZXggIgorCQkgICAgICAgIjB4JTAyWCwgZXJyb3IgJWQpIiwgdmFsdWUsIGluZGV4LCByZXMpCisJCXJldHVybiAtMTsKKwl9CisKKwljYW0tPnJlZ1tpbmRleF0gPSB2YWx1ZTsKKworCXJldHVybiAwOworfQorCisKKy8qIE5PVEU6IHJlYWRpbmcgc29tZSByZWdpc3RlcnMgYWx3YXlzIHJldHVybnMgMCAqLworc3RhdGljIGludCBzbjljMTAyX3JlYWRfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwl1OCogYnVmZiA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IHJlczsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsIDB4YzEsCisJICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCAwLCBidWZmLCAxLCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCURCRygzLCAiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAoaW5kZXggMHglMDJYLCBlcnJvciAlZCkiLAorCQkgICAgaW5kZXgsIHJlcykKKworCXJldHVybiAocmVzID49IDApID8gKGludCkoKmJ1ZmYpIDogLTE7Cit9CisKKworaW50IHNuOWMxMDJfcHJlYWRfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MTYgaW5kZXgpCit7CisJaWYgKGluZGV4ID4gMHgxZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY2FtLT5yZWdbaW5kZXhdOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfaTJjX3dhaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQoreworCWludCBpLCByOworCisJZm9yIChpID0gMTsgaSA8PSA1OyBpKyspIHsKKwkJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChyICYgMHgwNCkKKwkJCXJldHVybiAwOworCQlpZiAoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopCisJCQl1ZGVsYXkoNSoxNik7CisJCWVsc2UKKwkJCXVkZWxheSgxNioxNik7CisJfQorCXJldHVybiAtRUJVU1k7Cit9CisKKworc3RhdGljIGludAorc245YzEwMl9pMmNfZGV0ZWN0X3JlYWRfZXJyb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCit7CisJaW50IHI7CisJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKKwlyZXR1cm4gKHIgPCAwIHx8IChyID49IDAgJiYgIShyICYgMHgwOCkpKSA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfaTJjX2RldGVjdF93cml0ZV9lcnJvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCit7CisJaW50IHI7CisJciA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA4KTsKKwlyZXR1cm4gKHIgPCAwIHx8IChyID49IDAgJiYgKHIgJiAweDA4KSkpID8gLUVJTyA6IDA7Cit9CisKKworaW50IAorc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBkYXRhMCwgdTggZGF0YTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdTggbiwgdTggYnVmZmVyW10pCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwl1OCogZGF0YSA9IGNhbS0+Y29udHJvbF9idWZmZXI7CisJaW50IGVyciA9IDAsIHJlczsKKworCS8qIFdyaXRlIGN5Y2xlICovCisJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8CisJICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwgMHgxMDsKKwlkYXRhWzFdID0gZGF0YTA7IC8qIEkyQyBzbGF2ZSBpZCAqLworCWRhdGFbMl0gPSBkYXRhMTsgLyogYWRkcmVzcyAqLworCWRhdGFbN10gPSAweDEwOworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDgsIDB4NDEsCisJICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwlpZiAocmVzIDwgMCkKKwkJZXJyICs9IHJlczsKKworCWVyciArPSBzbjljMTAyX2kyY193YWl0KGNhbSwgc2Vuc29yKTsKKworCS8qIFJlYWQgY3ljbGUgLSBuIGJ5dGVzICovCisJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8CisJICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwKKwkgICAgICAgICAgKG4gPDwgNCkgfCAweDAyOworCWRhdGFbMV0gPSBkYXRhMDsKKwlkYXRhWzddID0gMHgxMDsKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAorCSAgICAgICAgICAgICAgICAgICAgICAweDA4LCAwLCBkYXRhLCA4LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCWVyciArPSByZXM7CisKKwllcnIgKz0gc245YzEwMl9pMmNfd2FpdChjYW0sIHNlbnNvcik7CisKKwkvKiBUaGUgZmlyc3QgcmVhZCBieXRlIHdpbGwgYmUgcGxhY2VkIGluIGRhdGFbNF0gKi8KKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweGMxLAorCSAgICAgICAgICAgICAgICAgICAgICAweDBhLCAwLCBkYXRhLCA1LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCWVyciArPSByZXM7CisKKwllcnIgKz0gc245YzEwMl9pMmNfZGV0ZWN0X3JlYWRfZXJyb3IoY2FtLCBzZW5zb3IpOworCisJUERCR0coIkkyQyByZWFkOiBhZGRyZXNzIDB4JTAyWCwgZmlyc3QgcmVhZCBieXRlOiAweCUwMlgiLCBkYXRhMSwKKwkgICAgICBkYXRhWzRdKQorCisJaWYgKGVycikgeworCQlEQkcoMywgIkkyQyByZWFkIGZhaWxlZCBmb3IgJXMgaW1hZ2Ugc2Vuc29yIiwgc2Vuc29yLT5uYW1lKQorCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGJ1ZmZlcikKKwkJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZW9mKGJ1ZmZlcikpOworCisJcmV0dXJuIChpbnQpZGF0YVs0XTsKK30KKworCitpbnQgCitzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgdTggZGF0YTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsIHU4IGRhdGE0LCB1OCBkYXRhNSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXU4KiBkYXRhID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgZXJyID0gMCwgcmVzOworCisJLyogV3JpdGUgY3ljbGUuIEl0IHVzdWFsbHkgaXMgYWRkcmVzcyArIHZhbHVlICovCisJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8CisJICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApCisJICAgICAgICAgIHwgKChuIC0gMSkgPDwgNCk7CisJZGF0YVsxXSA9IGRhdGEwOworCWRhdGFbMl0gPSBkYXRhMTsKKwlkYXRhWzNdID0gZGF0YTI7CisJZGF0YVs0XSA9IGRhdGEzOworCWRhdGFbNV0gPSBkYXRhNDsKKwlkYXRhWzZdID0gZGF0YTU7CisJZGF0YVs3XSA9IDB4MTQ7CisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwOCwgMHg0MSwKKwkgICAgICAgICAgICAgICAgICAgICAgMHgwOCwgMCwgZGF0YSwgOCwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCWlmIChyZXMgPCAwKQorCQllcnIgKz0gcmVzOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dhaXQoY2FtLCBzZW5zb3IpOworCWVyciArPSBzbjljMTAyX2kyY19kZXRlY3Rfd3JpdGVfZXJyb3IoY2FtLCBzZW5zb3IpOworCisJaWYgKGVycikKKwkJREJHKDMsICJJMkMgd3JpdGUgZmFpbGVkIGZvciAlcyBpbWFnZSBzZW5zb3IiLCBzZW5zb3ItPm5hbWUpCisKKwlQREJHRygiSTJDIHJhdyB3cml0ZTogJXUgYnl0ZXMsIGRhdGEwID0gMHglMDJYLCBkYXRhMSA9IDB4JTAyWCwgIgorCSAgICAgICJkYXRhMiA9IDB4JTAyWCwgZGF0YTMgPSAweCUwMlgsIGRhdGE0ID0gMHglMDJYLCBkYXRhNSA9IDB4JTAyWCIsCisJICAgICAgbiwgZGF0YTAsIGRhdGExLCBkYXRhMiwgZGF0YTMsIGRhdGE0LCBkYXRhNSkKKworCXJldHVybiBlcnIgPyAtMSA6IDA7Cit9CisKKworaW50CitzbjljMTAyX2kyY190cnlfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzKQoreworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCBzZW5zb3IsIHNlbnNvci0+aTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgMSwgTlVMTCk7Cit9CisKKworaW50IAorc245YzEwMl9pMmNfdHJ5X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sIHNlbnNvciwgMywgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yLT5pMmNfc2xhdmVfaWQsIGFkZHJlc3MsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIDAsIDAsIDApOworfQorCisKK2ludCBzbjljMTAyX2kyY19yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1OCBhZGRyZXNzKQoreworCWlmICghY2FtLT5zZW5zb3IpCisJCXJldHVybiAtMTsKKworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sIGNhbS0+c2Vuc29yLCBhZGRyZXNzKTsKK30KKworCitpbnQgc245YzEwMl9pMmNfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IGFkZHJlc3MsIHU4IHZhbHVlKQoreworCWlmICghY2FtLT5zZW5zb3IpCisJCXJldHVybiAtMTsKKworCXJldHVybiBzbjljMTAyX2kyY190cnlfd3JpdGUoY2FtLCBjYW0tPnNlbnNvciwgYWRkcmVzcywgdmFsdWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkKgorc245YzEwMl9maW5kX3NvZl9oZWFkZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQqIG1lbSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3Qgc29mbGVuID0gc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcl90KSwgaTsKKwl1OCBqLCBuID0gc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcikgLyBzb2ZsZW47CisKKwlmb3IgKGkgPSAwOyAobGVuID49IHNvZmxlbikgJiYgKGkgPD0gbGVuIC0gc29mbGVuKTsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQkJLyogSXQncyBlbm91Z2ggdG8gY29tcGFyZSA3IGJ5dGVzICovCisJCQlpZiAoIW1lbWNtcChtZW0gKyBpLCBzbjljMTAyX3NvZl9oZWFkZXJbal0sIDcpKSB7CisJCQkJbWVtY3B5KGNhbS0+c29mX2hlYWRlciwgbWVtICsgaSwgc29mbGVuKTsKKwkJCQkvKiBTa2lwIHRoZSBoZWFkZXIgKi8KKwkJCQlyZXR1cm4gbWVtICsgaSArIHNvZmxlbjsKKwkJCX0KKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkKgorc245YzEwMl9maW5kX2VvZl9oZWFkZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQqIG1lbSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgZW9mbGVuID0gc2l6ZW9mKHNuOWMxMDJfZW9mX2hlYWRlcl90KSwgaTsKKwl1bnNpZ25lZCBqLCBuID0gc2l6ZW9mKHNuOWMxMDJfZW9mX2hlYWRlcikgLyBlb2ZsZW47CisKKwlpZiAoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCXJldHVybiBOVUxMOyAvKiBFT0YgaGVhZGVyIGRvZXMgbm90IGV4aXN0IGluIGNvbXByZXNzZWQgZGF0YSAqLworCisJZm9yIChpID0gMDsgKGxlbiA+PSBlb2ZsZW4pICYmIChpIDw9IGxlbiAtIGVvZmxlbik7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG47IGorKykKKwkJCWlmICghbWVtY21wKG1lbSArIGksIHNuOWMxMDJfZW9mX2hlYWRlcltqXSwgZW9mbGVuKSkKKwkJCQlyZXR1cm4gbWVtICsgaTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MqIHJlZ3MpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuOWMxMDJfZnJhbWVfdCoqIGY7CisJc2l6ZV90IGltYWdlc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTggaTsKKwlpbnQgZXJyID0gMDsKKworCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQorCQlyZXR1cm47CisKKwlmID0gJmNhbS0+ZnJhbWVfY3VycmVudDsKKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fSU5URVJSVVBUKSB7CisJCWNhbS0+c3RyZWFtID0gU1RSRUFNX09GRjsKKwkJaWYgKCgqZikpCisJCQkoKmYpLT5zdGF0ZSA9IEZfUVVFVUVEOworCQlEQkcoMywgIlN0cmVhbSBpbnRlcnJ1cHRlZCIpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X3N0cmVhbSk7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm47CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGIHx8IGxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpCisJCWdvdG8gcmVzdWJtaXRfdXJiOworCisJaWYgKCEoKmYpKQorCQkoKmYpID0gbGlzdF9lbnRyeShjYW0tPmlucXVldWUubmV4dCwgc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwKKwkJICAgICAgICAgICAgICAgICAgZnJhbWUpOworCisJaW1hZ2VzaXplID0gKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LndpZHRoICoKKwkgICAgICAgICAgICAgY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQuaGVpZ2h0ICoKKwkgICAgICAgICAgICAgY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQucHJpdikgLyA4OworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaW1nLCBsZW4sIHN0YXR1czsKKwkJdm9pZCAqcG9zLCAqc29mLCAqZW9mOworCisJCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCXBvcyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ICsgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkJaWYgKHN0YXR1cykgeworCQkJREJHKDMsICJFcnJvciBpbiBpc29jaHJvbm91cyBmcmFtZSIpCisJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQljb250aW51ZTsKKwkJfQorCisJCVBEQkdHKCJJc29jaHJub3VzIGZyYW1lOiBsZW5ndGggJXUsICMldSBpIiwgbGVuLCBpKQorCisJCS8qCisJCSAgIE5PVEU6IEl0IGlzIHByb2JhYmx5IGNvcnJlY3QgdG8gYXNzdW1lIHRoYXQgU09GIGFuZCBFT0YKKwkJICAgICAgICAgaGVhZGVycyBkbyBub3Qgb2NjdXIgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgcGFja2V0cywKKwkJICAgICAgICAgYnV0IHdobyBrbm93cy4uV2hhdGV2ZXIgaXMgdGhlIHRydXRoLCB0aGlzIGFzc3VtcHRpb24KKwkJICAgICAgICAgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKwkJKi8KKworcmVkbzoKKwkJc29mID0gc245YzEwMl9maW5kX3NvZl9oZWFkZXIoY2FtLCBwb3MsIGxlbik7CisJCWlmICghc29mKSB7CisJCQllb2YgPSBzbjljMTAyX2ZpbmRfZW9mX2hlYWRlcihjYW0sIHBvcywgbGVuKTsKKwkJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CitlbmRfb2ZfZnJhbWU6CisJCQkJaW1nID0gbGVuOworCisJCQkJaWYgKGVvZikKKwkJCQkJaW1nID0gKGVvZiA+IHBvcykgPyBlb2YgLSBwb3MgLSAxIDogMDsKKworCQkJCWlmICgoKmYpLT5idWYuYnl0ZXN1c2VkK2ltZyA+IGltYWdlc2l6ZSkgeworCQkJCQl1MzIgYiA9ICgqZiktPmJ1Zi5ieXRlc3VzZWQgKyBpbWcgLQorCQkJCQkgICAgICAgIGltYWdlc2l6ZTsKKwkJCQkJaW1nID0gaW1hZ2VzaXplIC0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKKwkJCQkJREJHKDMsICJFeHBlY3RlZCBFT0Ygbm90IGZvdW5kOiAiCisJCQkJCSAgICAgICAidmlkZW8gZnJhbWUgY3V0IikKKwkJCQkJaWYgKGVvZikKKwkJCQkJCURCRygzLCAiRXhjZWVkZWQgbGltaXQ6ICsldSAiCisJCQkJCQkgICAgICAgImJ5dGVzIiwgKHVuc2lnbmVkKShiKSkKKwkJCQl9CisKKwkJCQltZW1jcHkoKCpmKS0+YnVmbWVtICsgKCpmKS0+YnVmLmJ5dGVzdXNlZCwgcG9zLAorCQkJCSAgICAgICBpbWcpOworCisJCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgPT0gMCkKKwkJCQkJZG9fZ2V0dGltZW9mZGF5KCYoKmYpLT5idWYudGltZXN0YW1wKTsKKworCQkJCSgqZiktPmJ1Zi5ieXRlc3VzZWQgKz0gaW1nOworCisJCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgPT0gaW1hZ2VzaXplIHx8CisJCQkJICAgIChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQorCQkJCSAgICAgICAgICAgICAgICBWNEwyX1BJWF9GTVRfU045QzEwWCAmJiBlb2YpKSB7CisJCQkJCXUzMiBiID0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKKwkJCQkJKCpmKS0+c3RhdGUgPSBGX0RPTkU7CisJCQkJCSgqZiktPmJ1Zi5zZXF1ZW5jZT0gKytjYW0tPmZyYW1lX2NvdW50OworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLAorCQkJCQkgICAgICAgICAgICAgICAgICBsb2NrX2ZsYWdzKTsKKwkJCQkJbGlzdF9tb3ZlX3RhaWwoJigqZiktPmZyYW1lLAorCQkJCQkgICAgICAgICAgICAgICAmY2FtLT5vdXRxdWV1ZSk7CisJCQkJCWlmICghbGlzdF9lbXB0eSgmY2FtLT5pbnF1ZXVlKSkKKwkJCQkJCSgqZikgPSBsaXN0X2VudHJ5KAorCQkJCQkJICAgICAgICBjYW0tPmlucXVldWUubmV4dCwKKwkJCQkJCSAgICAgICAgc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwKKwkJCQkJCSAgICAgICAgZnJhbWUgKTsKKwkJCQkJZWxzZQorCQkJCQkJKCpmKSA9IE5VTEw7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaworCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICwgbG9ja19mbGFncyk7CisJCQkJCW1lbWNweShjYW0tPnN5c2ZzLmZyYW1lX2hlYWRlciwKKwkJCQkJICAgICAgIGNhbS0+c29mX2hlYWRlciwKKwkJCQkJICAgICAgIHNpemVvZihzbjljMTAyX3NvZl9oZWFkZXJfdCkpOworCQkJCQlEQkcoMywgIlZpZGVvIGZyYW1lIGNhcHR1cmVkOiAiCisJCQkJCSAgICAgICAiJWx1IGJ5dGVzIiwgKHVuc2lnbmVkIGxvbmcpKGIpKQorCisJCQkJCWlmICghKCpmKSkKKwkJCQkJCWdvdG8gcmVzdWJtaXRfdXJiOworCisJCQkJfSBlbHNlIGlmIChlb2YpIHsKKwkJCQkJKCpmKS0+c3RhdGUgPSBGX0VSUk9SOworCQkJCQlEQkcoMywgIk5vdCBleHBlY3RlZCBFT0YgYWZ0ZXIgJWx1ICIKKwkJCQkJICAgICAgICJieXRlcyBvZiBpbWFnZSBkYXRhIiwgCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcpKCgqZiktPmJ1Zi5ieXRlc3VzZWQpKQorCQkJCX0KKworCQkJCWlmIChzb2YpIC8qICgxKSAqLworCQkJCQlnb3RvIHN0YXJ0X29mX2ZyYW1lOworCisJCQl9IGVsc2UgaWYgKGVvZikgeworCQkJCURCRygzLCAiRU9GIHdpdGhvdXQgU09GIikKKwkJCQljb250aW51ZTsKKworCQkJfSBlbHNlIHsKKwkJCQlQREJHRygiSWdub3JpbmcgcG9pbnRsZXNzIGlzb2Nocm9ub3VzIGZyYW1lIikKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQl9IGVsc2UgaWYgKCgqZiktPnN0YXRlID09IEZfUVVFVUVEIHx8ICgqZiktPnN0YXRlID09IEZfRVJST1IpIHsKK3N0YXJ0X29mX2ZyYW1lOgorCQkJKCpmKS0+c3RhdGUgPSBGX0dSQUJCSU5HOworCQkJKCpmKS0+YnVmLmJ5dGVzdXNlZCA9IDA7CisJCQlsZW4gLT0gKHNvZiAtIHBvcyk7CisJCQlwb3MgPSBzb2Y7CisJCQlEQkcoMywgIlNPRiBkZXRlY3RlZDogbmV3IHZpZGVvIGZyYW1lIikKKwkJCWlmIChsZW4pCisJCQkJZ290byByZWRvOworCisJCX0gZWxzZSBpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgeworCQkJZW9mID0gc245YzEwMl9maW5kX2VvZl9oZWFkZXIoY2FtLCBwb3MsIGxlbik7CisJCQlpZiAoZW9mICYmIGVvZiA8IHNvZikKKwkJCQlnb3RvIGVuZF9vZl9mcmFtZTsgLyogKDEpICovCisJCQllbHNlIHsKKwkJCQlpZiAoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkgICAgVjRMMl9QSVhfRk1UX1NOOUMxMFgpIHsKKwkJCQkJZW9mID0gc29mLXNpemVvZihzbjljMTAyX3NvZl9oZWFkZXJfdCk7CisJCQkJCWdvdG8gZW5kX29mX2ZyYW1lOworCQkJCX0gZWxzZSB7CisJCQkJCURCRygzLCAiU09GIGJlZm9yZSBleHBlY3RlZCBFT0YgYWZ0ZXIgIgorCQkJCQkgICAgICAgIiVsdSBieXRlcyBvZiBpbWFnZSBkYXRhIiwgCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcpKCgqZiktPmJ1Zi5ieXRlc3VzZWQpKQorCQkJCQlnb3RvIHN0YXJ0X29mX2ZyYW1lOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworcmVzdWJtaXRfdXJiOgorCXVyYi0+ZGV2ID0gY2FtLT51c2JkZXY7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyIDwgMCAmJiBlcnIgIT0gLUVQRVJNKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAidXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiKQorCX0KKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfc3RhcnRfdHJhbnNmZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKKwlzdHJ1Y3QgdXJiKiB1cmI7CisJY29uc3QgdW5zaWduZWQgaW50IHdNYXhQYWNrZXRTaXplW10gPSB7MCwgMTI4LCAyNTYsIDM4NCwgNTEyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4MCwgODAwLCA5MDAsIDEwMjN9OworCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSB3TWF4UGFja2V0U2l6ZVtTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HXTsKKwlzOCBpLCBqOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IFNOOUMxMDJfVVJCUzsgaSsrKSB7CisJCWNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldID0ga21hbGxvYyhTTjlDMTAyX0lTT19QQUNLRVRTICogcHN6LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlEQkcoMSwgIk5vdCBlbm91Z2ggbWVtb3J5IikKKwkJCWdvdG8gZnJlZV9idWZmZXJzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNOOUMxMDJfVVJCUzsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoU045QzEwMl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7CisJCWNhbS0+dXJiW2ldID0gdXJiOworCQlpZiAoIXVyYikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCURCRygxLCAidXNiX2FsbG9jX3VyYigpIGZhaWxlZCIpCisJCQlnb3RvIGZyZWVfdXJiczsKKwkJfQorCQl1cmItPmRldiA9IHVkZXY7CisJCXVyYi0+Y29udGV4dCA9IGNhbTsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsIDEpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU045QzEwMl9JU09fUEFDS0VUUzsKKwkJdXJiLT5jb21wbGV0ZSA9IHNuOWMxMDJfdXJiX2NvbXBsZXRlOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwc3ogKiBTTjlDMTAyX0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gMTsKKwkJZm9yIChqID0gMDsgaiA8IFNOOUMxMDJfSVNPX1BBQ0tFVFM7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBwc3ogKiBqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwc3o7CisJCX0KKwl9CisKKwkvKiBFbmFibGUgdmlkZW8gKi8KKwlpZiAoIShjYW0tPnJlZ1sweDAxXSAmIDB4MDQpKSB7CisJCWVyciA9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgwMV0gfCAweDA0LCAweDAxKTsKKwkJaWYgKGVycikgeworCQkJZXJyID0gLUVJTzsKKwkJCURCRygxLCAiSS9PIGhhcmR3YXJlIGVycm9yIikKKwkJCWdvdG8gZnJlZV91cmJzOworCQl9CisJfQorCisJZXJyID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgU045QzEwMl9BTFRFUk5BVEVfU0VUVElORyk7CisJaWYgKGVycikgeworCQlEQkcoMSwgInVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkIikKKwkJZ290byBmcmVlX3VyYnM7CisJfQorCisJY2FtLT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBTTjlDMTAyX1VSQlM7IGkrKykgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihjYW0tPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWZvciAoaiA9IGktMTsgaiA+PSAwOyBqLS0pCisJCQkJdXNiX2tpbGxfdXJiKGNhbS0+dXJiW2pdKTsKKwkJCURCRygxLCAidXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQsIGVycm9yICVkIiwgZXJyKQorCQkJZ290byBmcmVlX3VyYnM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZnJlZV91cmJzOgorCWZvciAoaSA9IDA7IChpIDwgU045QzEwMl9VUkJTKSAmJiAgY2FtLT51cmJbaV07IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKKworZnJlZV9idWZmZXJzOgorCWZvciAoaSA9IDA7IChpIDwgU045QzEwMl9VUkJTKSAmJiBjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXTsgaSsrKQorCQlrZnJlZShjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9zdG9wX3RyYW5zZmVyKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7CisJczggaTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSBTTjlDMTAyX1VSQlMtMTsgaSA+PSAwOyBpLS0pIHsKKwkJdXNiX2tpbGxfdXJiKGNhbS0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2ldKTsKKwkJa2ZyZWUoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pOworCX0KKworCWVyciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIDAsIDApOyAvKiAwIE1iL3MgKi8KKwlpZiAoZXJyKQorCQlEQkcoMywgInVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkIikKKworCXJldHVybiBlcnI7Cit9CisKKworaW50IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWNhbS0+c3RyZWFtID0gU1RSRUFNX0lOVEVSUlVQVDsKKwllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoY2FtLT53YWl0X3N0cmVhbSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PRkYpIHx8CisJICAgICAgICAgICAgICAgICAgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCksCisJICAgICAgICAgICAgICAgICAgICAgICAgIFNOOUMxMDJfVVJCX1RJTUVPVVQpOworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWxzZSBpZiAoZXJyKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBUbyB1c2UgaXQsIGNsb3NlIGFuZCAiCisJCSAgICAgICAib3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1OCBzbjljMTAyX3N0cnRvdTgoY29uc3QgY2hhciogYnVmZiwgc2l6ZV90IGxlbiwgc3NpemVfdCogY291bnQpCit7CisJY2hhciBzdHJbNV07CisJY2hhciogZW5kcDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChsZW4gPCA0KSB7CisJCXN0cm5jcHkoc3RyLCBidWZmLCBsZW4pOworCQlzdHJbbGVuKzFdID0gJ1wwJzsKKwl9IGVsc2UgeworCQlzdHJuY3B5KHN0ciwgYnVmZiwgNCk7CisJCXN0cls0XSA9ICdcMCc7CisJfQorCisJdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kcCwgMCk7CisKKwkqY291bnQgPSAwOworCWlmICh2YWwgPD0gMHhmZikKKwkJKmNvdW50ID0gKHNzaXplX3QpKGVuZHAgLSBzdHIpOworCWlmICgoKmNvdW50KSAmJiAobGVuID09ICpjb3VudCsxKSAmJiAoYnVmZlsqY291bnRdID09ICdcbicpKQorCQkqY291bnQgKz0gMTsKKworCXJldHVybiAodTgpdmFsOworfQorCisvKgorICAgTk9URSAxOiBiZWluZyBpbnNpZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbXBsaWVzIHRoYXQgdGhlIHY0bAorICAgICAgICAgICBkZXZpY2UgZXhpc3RzIGZvciBzdXJlIChzZWUga29iamVjdHMgYW5kIHJlZmVyZW5jZSBjb3VudGVycykKKyAgIE5PVEUgMjogYnVmZmVycyBhcmUgUEFHRV9TSVpFIGxvbmcKKyovCisKK3N0YXRpYyBzc2l6ZV90IHNuOWMxMDJfc2hvd19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGNhbS0+c3lzZnMucmVnKTsKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfSAKKworCitzdGF0aWMgc3NpemVfdCAKK3NuOWMxMDJfc3RvcmVfcmVnKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07CisJdTggaW5kZXg7CisJc3NpemVfdCBjb3VudDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5kZXggPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKGluZGV4ID4gMHgxZiB8fCAhY291bnQpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhbS0+c3lzZnMucmVnID0gaW5kZXg7CisKKwlEQkcoMiwgIk1vdmVkIFNOOUMxMFggcmVnaXN0ZXIgaW5kZXggdG8gMHglMDJYIiwgY2FtLT5zeXNmcy5yZWcpCisJREJHKDMsICJXcml0dGVuIGJ5dGVzOiAlemQiLCBjb3VudCkKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNuOWMxMDJfc2hvd192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCWludCB2YWw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgodmFsID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIGNhbS0+c3lzZnMucmVnKSkgPCAwKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisKKwlEQkcoMywgIlJlYWQgYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX3ZhbChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXU4IHZhbHVlOworCXNzaXplX3QgY291bnQ7CisJaW50IGVycjsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKCFjb3VudCkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2YWx1ZSwgY2FtLT5zeXNmcy5yZWcpOworCWlmIChlcnIpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKworCURCRygyLCAiV3JpdHRlbiBTTjlDMTBYIHJlZy4gMHglMDJYLCB2YWwuIDB4JTAyWCIsCisJICAgIGNhbS0+c3lzZnMucmVnLCB2YWx1ZSkKKwlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X2kyY19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGNhbS0+c3lzZnMuaTJjX3JlZyk7CisKKwlEQkcoMywgIlJlYWQgYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgCitzbjljMTAyX3N0b3JlX2kyY19yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwl1OCBpbmRleDsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoIWNvdW50KSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYW0tPnN5c2ZzLmkyY19yZWcgPSBpbmRleDsKKworCURCRygyLCAiTW92ZWQgc2Vuc29yIHJlZ2lzdGVyIGluZGV4IHRvIDB4JTAyWCIsIGNhbS0+c3lzZnMuaTJjX3JlZykKKwlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X2kyY192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCWludCB2YWw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19SRUFEKSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJaWYgKCh2YWwgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgY2FtLT5zeXNmcy5pMmNfcmVnKSkgPCAwKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljb3VudCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisKKwlEQkcoMywgIlJlYWQgYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX2kyY192YWwoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwl1OCB2YWx1ZTsKKwlzc2l6ZV90IGNvdW50OworCWludCBlcnI7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19XUklURSkpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKworCXZhbHVlID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCWlmICghY291bnQpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgY2FtLT5zeXNmcy5pMmNfcmVnLCB2YWx1ZSk7CisJaWYgKGVycikgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJREJHKDIsICJXcml0dGVuIHNlbnNvciByZWcuIDB4JTAyWCwgdmFsLiAweCUwMlgiLAorCSAgICBjYW0tPnN5c2ZzLmkyY19yZWcsIHZhbHVlKQorCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9zdG9yZV9ncmVlbihzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCWVudW0gc245YzEwMl9icmlkZ2UgYnJpZGdlOworCXNzaXplX3QgcmVzID0gMDsKKwl1OCB2YWx1ZTsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlicmlkZ2UgPSBjYW0tPmJyaWRnZTsKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGJyaWRnZSkgeworCWNhc2UgQlJJREdFX1NOOUMxMDE6CisJY2FzZSBCUklER0VfU045QzEwMjoKKwkJaWYgKHZhbHVlID4gMHgwZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKHJlcyA9IHNuOWMxMDJfc3RvcmVfcmVnKGNkLCAiMHgxMSIsIDQpKSA+PSAwKQorCQkJcmVzID0gc245YzEwMl9zdG9yZV92YWwoY2QsIGJ1ZiwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzEwMzoKKwkJaWYgKHZhbHVlID4gMHg3ZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKHJlcyA9IHNuOWMxMDJfc3RvcmVfcmVnKGNkLCAiMHgwNCIsIDQpKSA+PSAwKQorCQkJcmVzID0gc245YzEwMl9zdG9yZV92YWwoY2QsIGJ1ZiwgbGVuKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9zdG9yZV9ibHVlKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdCByZXMgPSAwOworCXU4IHZhbHVlOworCXNzaXplX3QgY291bnQ7CisKKwl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoIWNvdW50IHx8IHZhbHVlID4gMHg3ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHJlcyA9IHNuOWMxMDJfc3RvcmVfcmVnKGNkLCAiMHgwNiIsIDQpKSA+PSAwKQorCQlyZXMgPSBzbjljMTAyX3N0b3JlX3ZhbChjZCwgYnVmLCBsZW4pOworCisJcmV0dXJuIHJlczsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9zdG9yZV9yZWQoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IHJlcyA9IDA7CisJdTggdmFsdWU7CisJc3NpemVfdCBjb3VudDsKKworCXZhbHVlID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCWlmICghY291bnQgfHwgdmFsdWUgPiAweDdmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDA1IiwgNCkpID49IDApCisJCXJlcyA9IHNuOWMxMDJfc3RvcmVfdmFsKGNkLCBidWYsIGxlbik7CisKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNuOWMxMDJfc2hvd19mcmFtZV9oZWFkZXIoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNoYXIqIGJ1ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzc2l6ZV90IGNvdW50OworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PREVWOworCisJY291bnQgPSBzaXplb2YoY2FtLT5zeXNmcy5mcmFtZV9oZWFkZXIpOworCW1lbWNweShidWYsIGNhbS0+c3lzZnMuZnJhbWVfaGVhZGVyLCBjb3VudCk7CisKKwlEQkcoMywgIkZyYW1lIGhlYWRlciwgcmVhZCBieXRlczogJXpkIiwgY291bnQpCisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyZWcsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19yZWcsIHNuOWMxMDJfc3RvcmVfcmVnKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd192YWwsIHNuOWMxMDJfc3RvcmVfdmFsKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpMmNfcmVnLCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfaTJjX3JlZywgc245YzEwMl9zdG9yZV9pMmNfcmVnKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpMmNfdmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfaTJjX3ZhbCwgc245YzEwMl9zdG9yZV9pMmNfdmFsKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihncmVlbiwgU19JV1VHTywgTlVMTCwgc245YzEwMl9zdG9yZV9ncmVlbik7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYmx1ZSwgU19JV1VHTywgTlVMTCwgc245YzEwMl9zdG9yZV9ibHVlKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyZWQsIFNfSVdVR08sIE5VTEwsIHNuOWMxMDJfc3RvcmVfcmVkKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmcmFtZV9oZWFkZXIsIFNfSVJVR08sCisgICAgICAgICAgICAgICAgICAgICAgICAgc245YzEwMl9zaG93X2ZyYW1lX2hlYWRlciwgTlVMTCk7CisKKworc3RhdGljIHZvaWQgc245YzEwMl9jcmVhdGVfc3lzZnMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdjRsZGV2ID0gY2FtLT52NGxkZXY7CisKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfdmFsKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVfaGVhZGVyKTsKKwlpZiAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDEgfHwgY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDIpCisJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9ncmVlbik7CisJZWxzZSBpZiAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDMpIHsKKwkJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2JsdWUpOworCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVkKTsKKwl9CisJaWYgKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMpIHsKKwkJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2kyY19yZWcpOworCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3ZhbCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE4XSB8IDB4ODAsIDB4MTgpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxOF0gJiAweDdmLCAweDE4KTsKKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50CitzbjljMTAyX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiogY29tcHJlc3Npb24pCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY29tcHJlc3Npb24tPnF1YWxpdHkgPT0gMCkKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgY2FtLT5yZWdbMHgxN10gfCAweDAxLCAweDE3KTsKKwllbHNlIGlmIChjb21wcmVzc2lvbi0+cXVhbGl0eSA9PSAxKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE3XSAmIDB4ZmUsIDB4MTcpOworCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9zZXRfc2NhbGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IHNjYWxlKQoreworCXU4IHIgPSAwOworCWludCBlcnIgPSAwOworCisJaWYgKHNjYWxlID09IDEpCisJCXIgPSBjYW0tPnJlZ1sweDE4XSAmIDB4Y2Y7CisJZWxzZSBpZiAoc2NhbGUgPT0gMikgeworCQlyID0gY2FtLT5yZWdbMHgxOF0gJiAweGNmOworCQlyIHw9IDB4MTA7CisJfSBlbHNlIGlmIChzY2FsZSA9PSA0KQorCQlyID0gY2FtLT5yZWdbMHgxOF0gfCAweDIwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgciwgMHgxOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisKKwlQREJHRygiU2NhbGluZyBmYWN0b3I6ICV1Iiwgc2NhbGUpCisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpLAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCksCisJICAgaF9zaXplID0gKHU4KShyZWN0LT53aWR0aCAvIDE2KSwKKwkgICB2X3NpemUgPSAodTgpKHJlY3QtPmhlaWdodCAvIDE2KTsKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc2l6ZSwgMHgxNSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zaXplLCAweDE2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCVBEQkdHKCJoX3N0YXJ0LCB2X3N0YXJ0LCBoX3NpemUsIHZfc2l6ZSwgaG9fc2l6ZSwgdm9fc2l6ZSAiCisJICAgICAgIiV1ICV1ICV1ICV1IiwgaF9zdGFydCwgdl9zdGFydCwgaF9zaXplLCB2X3NpemUpCisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKKwlzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0OworCXU4IGkgPSAwLCBuID0gMDsKKwlpbnQgZXJyID0gMDsKKworCWlmICghKGNhbS0+c3RhdGUgJiBERVZfSU5JVElBTElaRUQpKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+b3Blbik7CisJCXFjdHJsID0gcy0+cWN0cmw7CisJCXJlY3QgPSAmKHMtPmNyb3BjYXAuZGVmcmVjdCk7CisJfSBlbHNlIHsgLyogdXNlIGN1cnJlbnQgdmFsdWVzICovCisJCXFjdHJsID0gcy0+X3FjdHJsOworCQlyZWN0ID0gJihzLT5fcmVjdCk7CisJfQorCisJZXJyICs9IHNuOWMxMDJfc2V0X3NjYWxlKGNhbSwgcmVjdC0+d2lkdGggLyBzLT5waXhfZm9ybWF0LndpZHRoKTsKKwllcnIgKz0gc245YzEwMl9zZXRfY3JvcChjYW0sIHJlY3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAocy0+aW5pdCkgeworCQllcnIgPSBzLT5pbml0KGNhbSk7CisJCWlmIChlcnIpIHsKKwkJCURCRygzLCAiU2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpCisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpCisJCWNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSA9ICBjYW0tPnJlZ1sweDE3XSAmIDB4MDEgPyAwIDogMTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3NldF9jb21wcmVzc2lvbihjYW0sICZjYW0tPmNvbXByZXNzaW9uKTsKKwllcnIgKz0gc245YzEwMl9zZXRfcGl4X2Zvcm1hdChjYW0sICZzLT5waXhfZm9ybWF0KTsKKwlpZiAocy0+c2V0X3BpeF9mb3JtYXQpCisJCWVyciArPSBzLT5zZXRfcGl4X2Zvcm1hdChjYW0sICZzLT5waXhfZm9ybWF0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHMtPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCURCRygzLCAiQ29tcHJlc3NlZCB2aWRlbyBmb3JtYXQgaXMgYWN0aXZlLCBxdWFsaXR5ICVkIiwgCisJCSAgICBjYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkpCisJZWxzZQorCQlEQkcoMywgIlVuY29tcHJlc3NlZCB2aWRlbyBmb3JtYXQgaXMgYWN0aXZlIikKKworCWlmIChzLT5zZXRfY3JvcCkKKwkJaWYgKChlcnIgPSBzLT5zZXRfY3JvcChjYW0sIHJlY3QpKSkgeworCQkJREJHKDMsICJzZXRfY3JvcCgpIGZhaWxlZCIpCisJCQlyZXR1cm4gZXJyOworCQl9CisKKwlpZiAocy0+c2V0X2N0cmwpIHsKKwkJbiA9IHNpemVvZihzLT5xY3RybCkgLyBzaXplb2Yocy0+cWN0cmxbMF0pOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJaWYgKHMtPnFjdHJsW2ldLmlkICE9IDAgJiYgCisJCQkgICAgIShzLT5xY3RybFtpXS5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSkgeworCQkJCWN0cmwuaWQgPSBzLT5xY3RybFtpXS5pZDsKKwkJCQljdHJsLnZhbHVlID0gcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKKwkJCQllcnIgPSBzLT5zZXRfY3RybChjYW0sICZjdHJsKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCURCRygzLCAiU2V0ICVzIGNvbnRyb2wgZmFpbGVkIiwKKwkJCQkJICAgIHMtPnFjdHJsW2ldLm5hbWUpCisJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJCURCRygzLCAiSW1hZ2Ugc2Vuc29yIHN1cHBvcnRzICclcycgY29udHJvbCIsCisJCQkJICAgIHMtPnFjdHJsW2ldLm5hbWUpCisJCQl9CisJfQorCisJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpIHsKKwkJaW5pdF9NVVRFWCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNhbS0+cXVldWVfbG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9mcmFtZSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9zdHJlYW0pOworCQljYW0tPm5yZWFkYnVmZmVycyA9IDI7CisJCW1lbWNweShzLT5fcWN0cmwsIHMtPnFjdHJsLCBzaXplb2Yocy0+cWN0cmwpKTsKKwkJbWVtY3B5KCYocy0+X3JlY3QpLCAmKHMtPmNyb3BjYXAuZGVmcmVjdCksIAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3JlY3QpKTsKKwkJY2FtLT5zdGF0ZSB8PSBERVZfSU5JVElBTElaRUQ7CisJfQorCisJREJHKDIsICJJbml0aWFsaXphdGlvbiBzdWNjZWVkZWQiKQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJZG93bigmc245YzEwMl9zeXNmc19sb2NrKTsKKworCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5taW5vcikKKwl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgTlVMTCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOworCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNuOWMxMDJfb3BlbihzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlpbnQgZXJyID0gMDsKKworCS8qCisJICAgVGhpcyBpcyB0aGUgb25seSBzYWZlIHdheSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoCisJICAgZGlzY29ubmVjdAorCSovCisJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmc245YzEwMl9kaXNjb25uZWN0KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5kZXZfc2VtKSkgeworCQl1cF9yZWFkKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWlmIChjYW0tPnVzZXJzKSB7CisJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBidXN5Li4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAorCQkgICAgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKKwkJCWVyciA9IC1FV09VTERCTE9DSzsKKwkJCWdvdG8gb3V0OworCQl9CisJCXVwKCZjYW0tPmRldl9zZW0pOworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKGNhbS0+b3BlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVECisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWNhbS0+dXNlcnMpOworCQlpZiAoZXJyKSB7CisJCQl1cF9yZWFkKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkb3duKCZjYW0tPmRldl9zZW0pOworCX0KKworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQllcnIgPSBzbjljMTAyX2luaXQoY2FtKTsKKwkJaWYgKGVycikgeworCQkJREJHKDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQgYWdhaW4uICIKKwkJCSAgICAgICAiSSB3aWxsIHJldHJ5IG9uIG5leHQgb3BlbigpLiIpCisJCQlnb3RvIG91dDsKKwkJfQorCQljYW0tPnN0YXRlICY9IH5ERVZfTUlTQ09ORklHVVJFRDsKKwl9CisKKwlpZiAoKGVyciA9IHNuOWMxMDJfc3RhcnRfdHJhbnNmZXIoY2FtKSkpCisJCWdvdG8gb3V0OworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gY2FtOworCWNhbS0+dXNlcnMrKzsKKwljYW0tPmlvID0gSU9fTk9ORTsKKwljYW0tPnN0cmVhbSA9IFNUUkVBTV9PRkY7CisJY2FtLT5uYnVmZmVycyA9IDA7CisJY2FtLT5mcmFtZV9jb3VudCA9IDA7CisJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisKK291dDoKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwl1cF9yZWFkKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX3JlbGVhc2Uoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHApCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCWRvd24oJmNhbS0+ZGV2X3NlbSk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLworCisJc245YzEwMl9zdG9wX3RyYW5zZmVyKGNhbSk7CisKKwlzbjljMTAyX3JlbGVhc2VfYnVmZmVycyhjYW0pOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCXNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWtmcmVlKGNhbSk7CisJCXJldHVybiAwOworCX0KKworCWNhbS0+dXNlcnMtLTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+b3BlbiwgMSk7CisKKwlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgY2xvc2VkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCisJdXAoJmNhbS0+ZGV2X3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3NpemVfdAorc245YzEwMl9yZWFkKHN0cnVjdCBmaWxlKiBmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHNuOWMxMDJfZnJhbWVfdCogZiwgKiBpOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjYW0tPmlvID09IElPX01NQVApIHsKKwkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSAiCisJCSAgICAgICAidGhlIHJlYWQgbWV0aG9kIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjYW0tPmlvID09IElPX05PTkUpIHsKKwkJaWYgKCFzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhjYW0sY2FtLT5ucmVhZGJ1ZmZlcnMsIElPX1JFQUQpKSB7CisJCQlEQkcoMSwgInJlYWQoKSBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5IikKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY2FtLT5pbyA9IElPX1JFQUQ7CisJCWNhbS0+c3RyZWFtID0gU1RSRUFNX09OOworCQlzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOworCX0KKworCWlmICghY291bnQpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgeworCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCSAgICAgICggY2FtLT53YWl0X2ZyYW1lLCAKKwkJICAgICAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAorCQkgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkJCShjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpICk7CisJCWlmIChlcnIpIHsKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCWYgPSBsaXN0X2VudHJ5KGNhbS0+b3V0cXVldWUucHJldiwgc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwgZnJhbWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmY2FtLT5vdXRxdWV1ZSwgZnJhbWUpCisJCWktPnN0YXRlID0gRl9VTlVTRUQ7CisJSU5JVF9MSVNUX0hFQUQoJmNhbS0+b3V0cXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwlzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOworCisJaWYgKGNvdW50ID4gZi0+YnVmLmJ5dGVzdXNlZCkKKwkJY291bnQgPSBmLT5idWYuYnl0ZXN1c2VkOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGYtPmJ1Zm1lbSwgY291bnQpKSB7CisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJKmZfcG9zICs9IGNvdW50OworCisJUERCR0coIkZyYW1lICMlbHUsIGJ5dGVzIHJlYWQ6ICV6dSIsICh1bnNpZ25lZCBsb25nKWYtPmJ1Zi5pbmRleCxjb3VudCkKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc245YzEwMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwkJcmV0dXJuIFBPTExFUlI7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQlnb3RvIGVycm9yOworCX0KKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fTk9ORSkgeworCQlpZiAoIXNuOWMxMDJfcmVxdWVzdF9idWZmZXJzKGNhbSwgY2FtLT5ucmVhZGJ1ZmZlcnMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9fUkVBRCkpIHsKKwkJCURCRygxLCAicG9sbCgpIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkiKQorCQkJZ290byBlcnJvcjsKKwkJfQorCQljYW0tPmlvID0gSU9fUkVBRDsKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT047CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fUkVBRCkKKwkJc245YzEwMl9xdWV1ZV91bnVzZWRmcmFtZXMoY2FtKTsKKworCXBvbGxfd2FpdChmaWxwLCAmY2FtLT53YWl0X2ZyYW1lLCB3YWl0KTsKKworCWlmICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIG1hc2s7CisKK2Vycm9yOgorCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCXJldHVybiBQT0xMRVJSOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqIHZtYSkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudCsrOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWEpCit7CisJLyogTk9URTogYnVmZmVycyBhcmUgbm90IGZyZWVkIGhlcmUgKi8KKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudC0tOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc245YzEwMl92bV9vcHMgPSB7CisJLm9wZW4gPSBzbjljMTAyX3ZtX29wZW4sCisJLmNsb3NlID0gc245YzEwMl92bV9jbG9zZSwKK307CisKKworc3RhdGljIGludCBzbjljMTAyX21tYXAoc3RydWN0IGZpbGUqIGZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCSAgICAgICAgICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LAorCSAgICAgICAgICAgICAgcG9zLAorCSAgICAgICAgICAgICAgcGFnZTsKKwl1MzIgaTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjYW0tPmlvICE9IElPX01NQVAgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8CisJICAgIHNpemUgIT0gUEFHRV9BTElHTihjYW0tPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpKSB7CisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKSB7CisJCWlmICgoY2FtLT5mcmFtZVtpXS5idWYubS5vZmZzZXQ+PlBBR0VfU0hJRlQpID09IHZtYS0+dm1fcGdvZmYpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gY2FtLT5uYnVmZmVycykgeworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVk1fSU8gaXMgZXZlbnR1YWxseSBnb2luZyB0byByZXBsYWNlIFBhZ2VSZXNlcnZlZCBhbHRvZ2V0aGVyICovCisJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOyAvKiBhdm9pZCB0byBzd2FwIG91dCB0aGlzIFZNQSAqLworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZVtpXS5idWZtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7IC8qIHNpemUgaXMgcGFnZS1hbGlnbmVkICovCisJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLAorCQkgICAgICAgICAgICAgICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXZtYS0+dm1fb3BzID0gJnNuOWMxMDJfdm1fb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmNhbS0+ZnJhbWVbaV07CisKKwlzbjljMTAyX3ZtX29wZW4odm1hKTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX2lvY3RsX3Y0bDIoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSBjYXAgPSB7CisJCQkuZHJpdmVyID0gInNuOWMxMDIiLAorCQkJLnZlcnNpb24gPSBTTjlDMTAyX01PRFVMRV9WRVJTSU9OX0NPREUsCisJCQkuY2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IAorCQkJICAgICAgICAgICAgICAgIFY0TDJfQ0FQX1JFQURXUklURSB8CisJCQkgICAgICAgICAgICAgICAgVjRMMl9DQVBfU1RSRUFNSU5HLAorCQl9OworCisJCXN0cmxjcHkoY2FwLmNhcmQsIGNhbS0+djRsZGV2LT5uYW1lLCBzaXplb2YoY2FwLmNhcmQpKTsKKwkJaWYgKHVzYl9tYWtlX3BhdGgoY2FtLT51c2JkZXYsIGNhcC5idXNfaW5mbywKKwkJICAgIHNpemVvZihjYXAuYnVzX2luZm8pKSA8IDApCisJCQlzdHJsY3B5KGNhcC5idXNfaW5mbywgY2FtLT5kZXYuYnVzX2lkLAorCQkJICAgICAgICBzaXplb2YoY2FwLmJ1c19pbmZvKSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX2lucHV0IGk7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpLCBhcmcsIHNpemVvZihpKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoaS5pbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbXNldCgmaSwgMCwgc2l6ZW9mKGkpKTsKKwkJc3RyY3B5KGkubmFtZSwgIlVTQiIpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaSwgc2l6ZW9mKGkpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCBpbmRleDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmluZGV4LCBhcmcsIHNpemVvZihpbmRleCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjOworCQl1OCBpLCBuOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcWMsIGFyZywgc2l6ZW9mKHFjKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQluID0gc2l6ZW9mKHMtPnFjdHJsKSAvIHNpemVvZihzLT5xY3RybFswXSk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlpZiAocWMuaWQgJiYgcWMuaWQgPT0gcy0+cWN0cmxbaV0uaWQpIHsKKwkJCQltZW1jcHkoJnFjLCAmKHMtPnFjdHJsW2ldKSwgc2l6ZW9mKHFjKSk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZxYywgc2l6ZW9mKHFjKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCXJldHVybiAwOworCQkJfQorCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJCWludCBlcnIgPSAwOworCisJCWlmICghcy0+Z2V0X2N0cmwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWVyciA9IHMtPmdldF9jdHJsKGNhbSwgJmN0cmwpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3RybCwgc2l6ZW9mKGN0cmwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiBlcnI7CisJfQorCisJY2FzZSBWSURJT0NfU19DVFJMX09MRDoKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwkJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCQl1OCBpLCBuOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoIXMtPnNldF9jdHJsKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZihjdHJsKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQluID0gc2l6ZW9mKHMtPnFjdHJsKSAvIHNpemVvZihzLT5xY3RybFswXSk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlpZiAoY3RybC5pZCA9PSBzLT5xY3RybFtpXS5pZCkgeworCQkJCWlmIChjdHJsLnZhbHVlIDwgcy0+cWN0cmxbaV0ubWluaW11bSB8fAorCQkJCSAgICBjdHJsLnZhbHVlID4gcy0+cWN0cmxbaV0ubWF4aW11bSkKKwkJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQkJY3RybC52YWx1ZSAtPSBjdHJsLnZhbHVlICUgcy0+cWN0cmxbaV0uc3RlcDsKKwkJCQlicmVhazsKKwkJCX0KKworCQlpZiAoKGVyciA9IHMtPnNldF9jdHJsKGNhbSwgJmN0cmwpKSkKKwkJCXJldHVybiBlcnI7CisKKwkJcy0+X3FjdHJsW2ldLmRlZmF1bHRfdmFsdWUgPSBjdHJsLnZhbHVlOworCisJCVBEQkdHKCJWSURJT0NfU19DVFJMOiBpZCAlbHUsIHZhbHVlICVsdSIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nKWN0cmwuaWQsICh1bnNpZ25lZCBsb25nKWN0cmwudmFsdWUpCisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfQ1JPUENBUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAqIGNjID0gJihjYW0tPnNlbnNvci0+Y3JvcGNhcCk7CisKKwkJY2MtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSAxOworCQljYy0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSAxOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBjYywgc2l6ZW9mKCpjYykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19DUk9QOgorCXsKKwkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcCA9IHsKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQl9OworCisJCW1lbWNweSgmKGNyb3AuYyksICYocy0+X3JlY3QpLCBzaXplb2Yoc3RydWN0IHY0bDJfcmVjdCkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1NfQ1JPUDoKKwl7CisJCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCQlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CisJCXN0cnVjdCB2NGwyX3JlY3QqIHJlY3Q7CisJCXN0cnVjdCB2NGwyX3JlY3QqIGJvdW5kcyA9ICYocy0+Y3JvcGNhcC5ib3VuZHMpOworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXhfZm9ybWF0ID0gJihzLT5waXhfZm9ybWF0KTsKKwkJdTggc2NhbGU7CisJCWNvbnN0IGVudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07CisJCWNvbnN0IHUzMiBuYnVmZmVycyA9IGNhbS0+bmJ1ZmZlcnM7CisJCXUzMiBpOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNyb3AsIGFyZywgc2l6ZW9mKGNyb3ApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlY3QgPSAmKGNyb3AuYyk7CisKKwkJaWYgKGNyb3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwKQorCQkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJCQlpZiAoY2FtLT5mcmFtZVtpXS52bWFfdXNlX2NvdW50KSB7CisJCQkJCURCRygzLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQuICIKKwkJCQkJICAgICAgICJVbm1hcCB0aGUgYnVmZmVycyBmaXJzdC4iKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJLyogUHJlc2VydmUgUixHIG9yIEIgb3JpZ2luICovCisJCXJlY3QtPmxlZnQgPSAocy0+X3JlY3QubGVmdCAmIDFMKSA/CisJCSAgICAgICAgICAgICByZWN0LT5sZWZ0IHwgMUwgOiByZWN0LT5sZWZ0ICYgfjFMOworCQlyZWN0LT50b3AgPSAocy0+X3JlY3QudG9wICYgMUwpID8KKwkJICAgICAgICAgICAgcmVjdC0+dG9wIHwgMUwgOiByZWN0LT50b3AgJiB+MUw7CisKKwkJaWYgKHJlY3QtPndpZHRoIDwgMTYpCisJCQlyZWN0LT53aWR0aCA9IDE2OworCQlpZiAocmVjdC0+aGVpZ2h0IDwgMTYpCisJCQlyZWN0LT5oZWlnaHQgPSAxNjsKKwkJaWYgKHJlY3QtPndpZHRoID4gYm91bmRzLT53aWR0aCkKKwkJCXJlY3QtPndpZHRoID0gYm91bmRzLT53aWR0aDsKKwkJaWYgKHJlY3QtPmhlaWdodCA+IGJvdW5kcy0+aGVpZ2h0KQorCQkJcmVjdC0+aGVpZ2h0ID0gYm91bmRzLT5oZWlnaHQ7CisJCWlmIChyZWN0LT5sZWZ0IDwgYm91bmRzLT5sZWZ0KQorCQkJcmVjdC0+bGVmdCA9IGJvdW5kcy0+bGVmdDsKKwkJaWYgKHJlY3QtPnRvcCA8IGJvdW5kcy0+dG9wKQorCQkJcmVjdC0+dG9wID0gYm91bmRzLT50b3A7CisJCWlmIChyZWN0LT5sZWZ0ICsgcmVjdC0+d2lkdGggPiBib3VuZHMtPmxlZnQgKyBib3VuZHMtPndpZHRoKQorCQkJcmVjdC0+bGVmdCA9IGJvdW5kcy0+bGVmdCtib3VuZHMtPndpZHRoIC0gcmVjdC0+d2lkdGg7CisJCWlmIChyZWN0LT50b3AgKyByZWN0LT5oZWlnaHQgPiBib3VuZHMtPnRvcCArIGJvdW5kcy0+aGVpZ2h0KQorCQkJcmVjdC0+dG9wID0gYm91bmRzLT50b3ArYm91bmRzLT5oZWlnaHQgLSByZWN0LT5oZWlnaHQ7CisKKwkJcmVjdC0+d2lkdGggJj0gfjE1TDsKKwkJcmVjdC0+aGVpZ2h0ICY9IH4xNUw7CisKKwkJaWYgKFNOOUMxMDJfUFJFU0VSVkVfSU1HU0NBTEUpIHsKKwkJCS8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIHNjYWxpbmcgZmFjdG9yICovCisJCQl1MzIgYSwgYjsKKwkJCWEgPSByZWN0LT53aWR0aCAqIHJlY3QtPmhlaWdodDsKKwkJCWIgPSBwaXhfZm9ybWF0LT53aWR0aCAqIHBpeF9mb3JtYXQtPmhlaWdodDsKKwkJCXNjYWxlID0gYiA/ICh1OCkoKGEgLyBiKSA8IDQgPyAxIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKChhIC8gYikgPCAxNiA/IDIgOiA0KSkgOiAxOworCQl9IGVsc2UKKwkJCXNjYWxlID0gMTsKKworCQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQorCQkJaWYgKChlcnIgPSBzbjljMTAyX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQkJcmV0dXJuIGVycjsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNyb3AsIHNpemVvZihjcm9wKSkpIHsKKwkJCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwIHx8IGNhbS0+aW8gPT0gSU9fUkVBRCkKKwkJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisKKwkJZXJyID0gc245YzEwMl9zZXRfY3JvcChjYW0sIHJlY3QpOworCQlpZiAocy0+c2V0X2Nyb3ApCisJCQllcnIgKz0gcy0+c2V0X2Nyb3AoY2FtLCByZWN0KTsKKwkJZXJyICs9IHNuOWMxMDJfc2V0X3NjYWxlKGNhbSwgc2NhbGUpOworCisJCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlICIKKwkJCSAgICAgICAicHJvYmxlbXMuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAiCisJCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXMtPnBpeF9mb3JtYXQud2lkdGggPSByZWN0LT53aWR0aC9zY2FsZTsKKwkJcy0+cGl4X2Zvcm1hdC5oZWlnaHQgPSByZWN0LT5oZWlnaHQvc2NhbGU7CisJCW1lbWNweSgmKHMtPl9yZWN0KSwgcmVjdCwgc2l6ZW9mKCpyZWN0KSk7CisKKwkJaWYgKChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgorCQkgICAgbmJ1ZmZlcnMgIT0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+aW8pKSB7CisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggIgorCQkJICAgICAgICJtZW1vcnkuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAiCisJCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm10ZGVzYyBmbXRkOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZm10ZCwgYXJnLCBzaXplb2YoZm10ZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGZtdGQuaW5kZXggPT0gMCkgeworCQkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJiYXllciByZ2IiKTsKKwkJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OworCQl9IGVsc2UgaWYgKGZtdGQuaW5kZXggPT0gMSkgeworCQkJc3RyY3B5KGZtdGQuZGVzY3JpcHRpb24sICJjb21wcmVzc2VkIik7CisJCQlmbXRkLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NOOUMxMFg7CisJCQlmbXRkLmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZtdGQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJbWVtc2V0KCZmbXRkLnJlc2VydmVkLCAwLCBzaXplb2YoZm10ZC5yZXNlcnZlZCkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm10ZCwgc2l6ZW9mKGZtdGQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0dfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQpOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZm9ybWF0LCBhcmcsIHNpemVvZihmb3JtYXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChmb3JtYXQudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlwZm10LT5ieXRlc3BlcmxpbmUgPSAocGZtdC0+cGl4ZWxmb3JtYXQ9PVY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQkgICAgICAgICAgICAgICAgICAgICA/IDAgOiAocGZtdC0+d2lkdGggKiBwZm10LT5wcml2KSAvIDg7CisJCXBmbXQtPnNpemVpbWFnZSA9IHBmbXQtPmhlaWdodCAqICgocGZtdC0+d2lkdGgqcGZtdC0+cHJpdikvOCk7CisJCXBmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQltZW1jcHkoJihmb3JtYXQuZm10LnBpeCksIHBmbXQsIHNpemVvZigqcGZtdCkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmb3JtYXQ7CisJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeDsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYocy0+cGl4X2Zvcm1hdCk7CisJCXN0cnVjdCB2NGwyX3JlY3QqIGJvdW5kcyA9ICYocy0+Y3JvcGNhcC5ib3VuZHMpOworCQlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CisJCXU4IHNjYWxlOworCQljb25zdCBlbnVtIHNuOWMxMDJfc3RyZWFtX3N0YXRlIHN0cmVhbSA9IGNhbS0+c3RyZWFtOworCQljb25zdCB1MzIgbmJ1ZmZlcnMgPSBjYW0tPm5idWZmZXJzOworCQl1MzIgaTsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZmb3JtYXQsIGFyZywgc2l6ZW9mKGZvcm1hdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcGl4ID0gJihmb3JtYXQuZm10LnBpeCk7CisKKwkJaWYgKGZvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbWNweSgmcmVjdCwgJihzLT5fcmVjdCksIHNpemVvZihyZWN0KSk7CisKKwkJeyAvKiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBzY2FsaW5nIGZhY3RvciAqLworCQkJdTMyIGEsIGI7CisJCQlhID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0OworCQkJYiA9IHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodDsKKwkJCXNjYWxlID0gYiA/ICh1OCkoKGEgLyBiKSA8IDQgPyAxIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKChhIC8gYikgPCAxNiA/IDIgOiA0KSkgOiAxOworCQl9CisKKwkJcmVjdC53aWR0aCA9IHNjYWxlICogcGl4LT53aWR0aDsKKwkJcmVjdC5oZWlnaHQgPSBzY2FsZSAqIHBpeC0+aGVpZ2h0OworCisJCWlmIChyZWN0LndpZHRoIDwgMTYpCisJCQlyZWN0LndpZHRoID0gMTY7CisJCWlmIChyZWN0LmhlaWdodCA8IDE2KQorCQkJcmVjdC5oZWlnaHQgPSAxNjsKKwkJaWYgKHJlY3Qud2lkdGggPiBib3VuZHMtPmxlZnQgKyBib3VuZHMtPndpZHRoIC0gcmVjdC5sZWZ0KQorCQkJcmVjdC53aWR0aCA9IGJvdW5kcy0+bGVmdCArIGJvdW5kcy0+d2lkdGggLSByZWN0LmxlZnQ7CisJCWlmIChyZWN0LmhlaWdodCA+IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQgLSByZWN0LnRvcCkKKwkJCXJlY3QuaGVpZ2h0ID0gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCAtIHJlY3QudG9wOworCisJCXJlY3Qud2lkdGggJj0gfjE1TDsKKwkJcmVjdC5oZWlnaHQgJj0gfjE1TDsKKworCQl7IC8qIGFkanVzdCB0aGUgc2NhbGluZyBmYWN0b3IgKi8KKwkJCXUzMiBhLCBiOworCQkJYSA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodDsKKwkJCWIgPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQ7CisJCQlzY2FsZSA9IGIgPyAodTgpKChhIC8gYikgPCA0ID8gMSA6CisJCSAgICAgICAgICAgICAgICAgICAgICAgICgoYSAvIGIpIDwgMTYgPyAyIDogNCkpIDogMTsKKwkJfQorCisJCXBpeC0+d2lkdGggPSByZWN0LndpZHRoIC8gc2NhbGU7CisJCXBpeC0+aGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyBzY2FsZTsKKworCQlpZiAocGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU045QzEwWCAmJgorCQkgICAgcGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfU0JHR1I4KQorCQkJcGl4LT5waXhlbGZvcm1hdCA9IHBmbXQtPnBpeGVsZm9ybWF0OworCQlwaXgtPnByaXYgPSBwZm10LT5wcml2OyAvKiBicHAgKi8KKwkJcGl4LT5jb2xvcnNwYWNlID0gcGZtdC0+Y29sb3JzcGFjZTsKKwkJcGl4LT5ieXRlc3BlcmxpbmUgPSAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJICAgICAgICAgICAgICAgICAgICA/IDAgOiAocGl4LT53aWR0aCAqIHBpeC0+cHJpdikgLyA4OworCQlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogKChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDgpOworCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCisJCWlmIChjbWQgPT0gVklESU9DX1RSWV9GTVQpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXApCisJCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQkJCWlmIChjYW0tPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQkJREJHKDMsICJWSURJT0NfU19GTVQgZmFpbGVkLiAiCisJCQkJCSAgICAgICAiVW5tYXAgdGhlIGJ1ZmZlcnMgZmlyc3QuIikKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCisJCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCisJCQlpZiAoKGVyciA9IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChjYW0pKSkKKwkJCQlyZXR1cm4gZXJyOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpIHsKKwkJCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwICB8fCBjYW0tPmlvID09IElPX1JFQUQpCisJCQlzbjljMTAyX3JlbGVhc2VfYnVmZmVycyhjYW0pOworCisJCWVyciArPSBzbjljMTAyX3NldF9waXhfZm9ybWF0KGNhbSwgcGl4KTsKKwkJZXJyICs9IHNuOWMxMDJfc2V0X2Nyb3AoY2FtLCAmcmVjdCk7CisJCWlmIChzLT5zZXRfcGl4X2Zvcm1hdCkKKwkJCWVyciArPSBzLT5zZXRfcGl4X2Zvcm1hdChjYW0sIHBpeCk7CisJCWlmIChzLT5zZXRfY3JvcCkKKwkJCWVyciArPSBzLT5zZXRfY3JvcChjYW0sICZyZWN0KTsKKwkJZXJyICs9IHNuOWMxMDJfc2V0X3NjYWxlKGNhbSwgc2NhbGUpOworCisJCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgorCQkJICAgICAgICJwcm9ibGVtcy4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJbWVtY3B5KHBmbXQsIHBpeCwgc2l6ZW9mKCpwaXgpKTsKKwkJbWVtY3B5KCYocy0+X3JlY3QpLCAmcmVjdCwgc2l6ZW9mKHJlY3QpKTsKKworCQlpZiAoKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgorCQkgICAgbmJ1ZmZlcnMgIT0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBuYnVmZmVycywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+aW8pKSB7CisJCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2Ygbm90IGVub3VnaCAiCisJCQkgICAgICAgIm1lbW9yeS4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKKwl7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FtLT5jb21wcmVzc2lvbiwKKwkJICAgICAgICAgICAgICAgICBzaXplb2YoY2FtLT5jb21wcmVzc2lvbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKKwl7CisJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiBqYzsKKwkJY29uc3QgZW51bSBzbjljMTAyX3N0cmVhbV9zdGF0ZSBzdHJlYW0gPSBjYW0tPnN0cmVhbTsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZqYywgYXJnLCBzaXplb2YoamMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChqYy5xdWFsaXR5ICE9IDAgJiYgamMucXVhbGl0eSAhPSAxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJZXJyICs9IHNuOWMxMDJfc2V0X2NvbXByZXNzaW9uKGNhbSwgJmpjKTsKKwkJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KKwkJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCQlEQkcoMSwgIlZJRElPQ19TX0pQRUdDT01QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlICIKKwkJCSAgICAgICAicHJvYmxlbXMuIFRvIHVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAiCisJCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSA9IGpjLnF1YWxpdHk7CisKKwkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzIHJiOworCQl1MzIgaTsKKwkJaW50IGVycjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJiLCBhcmcsIHNpemVvZihyYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHJiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICByYi5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjYW0tPmlvID09IElPX1JFQUQpIHsKKwkJCURCRygzLCAiQ2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBhZ2FpbiB0byBjaG9vc2UgIgorCQkJICAgICAgICJ0aGUgbW1hcCBJL08gbWV0aG9kIikKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJCWlmIChjYW0tPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQlEQkcoMywgIlZJRElPQ19SRVFCVUZTIGZhaWxlZC4gIgorCQkJCSAgICAgICAiUHJldmlvdXMgYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkLiIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisJCWlmIChyYi5jb3VudCkKKwkJCXJiLmNvdW50ID0gc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCByYi5jb3VudCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9fTU1BUCk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZyYiwgc2l6ZW9mKHJiKSkpIHsKKwkJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisJCQljYW0tPmlvID0gSU9fTk9ORTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJY2FtLT5pbyA9IHJiLmNvdW50ID8gSU9fTU1BUCA6IElPX05PTkU7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfUVVFUllCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmIsIGFyZywgc2l6ZW9mKGIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICBiLmluZGV4ID49IGNhbS0+bmJ1ZmZlcnMgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtY3B5KCZiLCAmY2FtLT5mcmFtZVtiLmluZGV4XS5idWYsIHNpemVvZihiKSk7CisKKwkJaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0udm1hX3VzZV9jb3VudCkKKwkJCWIuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CisKKwkJaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgPT0gRl9ET05FKQorCQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCWVsc2UgaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgIT0gRl9VTlVTRUQpCisJCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYiwgc2l6ZW9mKGIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1FCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKwkJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJICAgIGIuaW5kZXggPj0gY2FtLT5uYnVmZmVycyB8fCBjYW0tPmlvICE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmY2FtLT5mcmFtZVtiLmluZGV4XS5mcmFtZSwgJmNhbS0+aW5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJUERCR0coIkZyYW1lICMlbHUgcXVldWVkIiwgKHVuc2lnbmVkIGxvbmcpYi5pbmRleCkKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19EUUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciBiOworCQlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90ICpmOworCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAobGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHsKKwkJCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCXJldHVybiAtRUFHQUlOOworCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkgICAgICAoIGNhbS0+d2FpdF9mcmFtZSwgCisJCQkgICAgICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CisJCQkgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkJCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpCisJCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJZiA9IGxpc3RfZW50cnkoY2FtLT5vdXRxdWV1ZS5uZXh0LCBzdHJ1Y3Qgc245YzEwMl9mcmFtZV90LAorCQkgICAgICAgICAgICAgICBmcmFtZSk7CisJCWxpc3RfZGVsKGNhbS0+b3V0cXVldWUubmV4dCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJZi0+c3RhdGUgPSBGX1VOVVNFRDsKKworCQltZW1jcHkoJmIsICZmLT5idWYsIHNpemVvZihiKSk7CisJCWlmIChmLT52bWFfdXNlX2NvdW50KQorCQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmIsIHNpemVvZihiKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlQREJHRygiRnJhbWUgIyVsdSBkZXF1ZXVlZCIsICh1bnNpZ25lZCBsb25nKWYtPmJ1Zi5pbmRleCkKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwl7CisJCWludCB0eXBlOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdHlwZSwgYXJnLCBzaXplb2YodHlwZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8IGNhbS0+aW8gIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChsaXN0X2VtcHR5KCZjYW0tPmlucXVldWUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT047CisKKwkJREJHKDMsICJTdHJlYW0gb24iKQorCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwl7CisJCWludCB0eXBlLCBlcnI7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0eXBlLCBhcmcsIHNpemVvZih0eXBlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJCURCRygzLCAiU3RyZWFtIG9mZiIpCisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19QQVJNOgorCXsKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSBzcDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnNwLCBhcmcsIHNpemVvZihzcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHNwLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3AucGFybS5jYXB0dXJlLmV4dGVuZGVkbW9kZSA9IDA7CisJCXNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGNhbS0+bnJlYWRidWZmZXJzOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3AsIHNpemVvZihzcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfU19QQVJNX09MRDoKKwljYXNlIFZJRElPQ19TX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHNwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3AsIGFyZywgc2l6ZW9mKHNwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoc3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzcC5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKKworCQlpZiAoc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID09IDApCisJCQlzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBjYW0tPm5yZWFkYnVmZmVyczsKKworCQlpZiAoc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID4gU045QzEwMl9NQVhfRlJBTUVTKQorCQkJc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gU045QzEwMl9NQVhfRlJBTUVTOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3AsIHNpemVvZihzcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJY2FtLT5ucmVhZGJ1ZmZlcnMgPSBzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnM7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19TVEQ6CisJY2FzZSBWSURJT0NfU19TVEQ6CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwljYXNlIFZJRElPQ19RVUVSWU1FTlU6CisJCXJldHVybiAtRUlOVkFMOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl9Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSBzbjljMTAyX2lvY3RsX3Y0bDIoaW5vZGUsIGZpbHAsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbjljMTAyX2ZvcHMgPSB7CisJLm93bmVyID0gICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgIHNuOWMxMDJfb3BlbiwKKwkucmVsZWFzZSA9IHNuOWMxMDJfcmVsZWFzZSwKKwkuaW9jdGwgPSAgIHNuOWMxMDJfaW9jdGwsCisJLnJlYWQgPSAgICBzbjljMTAyX3JlYWQsCisJLnBvbGwgPSAgICBzbjljMTAyX3BvbGwsCisJLm1tYXAgPSAgICBzbjljMTAyX21tYXAsCisJLmxsc2VlayA9ICBub19sbHNlZWssCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEl0IGV4aXN0cyBhIHNpbmdsZSBpbnRlcmZhY2Ugb25seS4gV2UgZG8gbm90IG5lZWQgdG8gdmFsaWRhdGUgYW55dGhpbmcuICovCitzdGF0aWMgaW50CitzbjljMTAyX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSogaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQqIGlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGRldl9uciA9IDA7CisJdW5zaWduZWQgaW50IGksIG47CisJaW50IGVyciA9IDAsIHI7CisKKwluID0gc2l6ZW9mKHNuOWMxMDJfaWRfdGFibGUpL3NpemVvZihzbjljMTAyX2lkX3RhYmxlWzBdKTsKKwlmb3IgKGkgPSAwOyBpIDwgbi0xOyBpKyspCisJCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAKKwkJICAgIHNuOWMxMDJfaWRfdGFibGVbaV0uaWRWZW5kb3IgJiYKKwkJICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PQorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFByb2R1Y3QpCisJCQlicmVhazsKKwlpZiAoaSA9PSBuLTEpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCEoY2FtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuOWMxMDJfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoY2FtLCAwLCBzaXplb2YoKmNhbSkpOworCisJY2FtLT51c2JkZXYgPSB1ZGV2OworCisJbWVtY3B5KCZjYW0tPmRldiwgJnVkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBkZXZpY2UpKTsKKworCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgeworCQlEQkcoMSwgImttYWxsb2MoKSBmYWlsZWQiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldChjYW0tPmNvbnRyb2xfYnVmZmVyLCAwLCA4KTsKKworCWlmICghKGNhbS0+djRsZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCkpKSB7CisJCURCRygxLCAidmlkZW9fZGV2aWNlX2FsbG9jKCkgZmFpbGVkIikKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWluaXRfTVVURVgoJmNhbS0+ZGV2X3NlbSk7CisKKwlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDApOworCWlmIChyIDwgMCB8fCByICE9IDB4MTApIHsKKwkJREJHKDEsICJTb3JyeSwgdGhpcyBpcyBub3QgYSBTTjlDMTB4IGJhc2VkIGNhbWVyYSAiCisJCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLAorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvcixzbjljMTAyX2lkX3RhYmxlW2ldLmlkUHJvZHVjdCkKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWNhbS0+YnJpZGdlID0gKHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0ICYgMHhmZmMwKSA9PSAweDYwODAgPworCSAgICAgICAgICAgICAgQlJJREdFX1NOOUMxMDMgOiBCUklER0VfU045QzEwMjsKKwlzd2l0Y2ggKGNhbS0+YnJpZGdlKSB7CisJY2FzZSBCUklER0VfU045QzEwMToKKwljYXNlIEJSSURHRV9TTjlDMTAyOgorCQlEQkcoMiwgIlNOOUMxMFsxMl0gUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgorCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIiwgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvciwKKwkJICAgIHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0KQorCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTAzOgorCQlEQkcoMiwgIlNOOUMxMDMgUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgorCQkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIiwgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvciwKKwkJICAgIHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0KQorCQlicmVhazsKKwl9CisKKwlmb3IgIChpID0gMDsgc245YzEwMl9zZW5zb3JfdGFibGVbaV07IGkrKykgeworCQllcnIgPSBzbjljMTAyX3NlbnNvcl90YWJsZVtpXShjYW0pOworCQlpZiAoIWVycikKKwkJCWJyZWFrOworCX0KKworCWlmICghZXJyICYmIGNhbS0+c2Vuc29yKSB7CisJCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIiwgY2FtLT5zZW5zb3ItPm5hbWUpCisJCURCRygzLCAiU3VwcG9ydCBmb3IgJXMgbWFpbnRhaW5lZCBieSAlcyIsCisJCSAgICBjYW0tPnNlbnNvci0+bmFtZSwgY2FtLT5zZW5zb3ItPm1haW50YWluZXIpCisJfSBlbHNlIHsKKwkJREJHKDEsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIikKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChzbjljMTAyX2luaXQoY2FtKSkgeworCQlEQkcoMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZC4gSSB3aWxsIHJldHJ5IG9uIG9wZW4oKS4iKQorCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCX0KKworCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgIlNOOUMxMHggUEMgQ2FtZXJhIik7CisJY2FtLT52NGxkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2FtLT52NGxkZXYtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfU0NBTEVTOworCWNhbS0+djRsZGV2LT5oYXJkd2FyZSA9IFZJRF9IQVJEV0FSRV9TTjlDMTAyOworCWNhbS0+djRsZGV2LT5mb3BzID0gJnNuOWMxMDJfZm9wczsKKwljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOworCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOworCisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19ucltkZXZfbnJdKTsKKwlpZiAoZXJyKSB7CisJCURCRygxLCAiVjRMMiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCIpCisJCWlmIChlcnIgPT0gLUVORklMRSAmJiB2aWRlb19ucltkZXZfbnJdID09IC0xKQorCQkJREJHKDEsICJGcmVlIC9kZXYvdmlkZW9YIG5vZGUgbm90IGZvdW5kIikKKwkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOworCQlkZXZfbnIgPSAoZGV2X25yIDwgU045QzEwMl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlEQkcoMiwgIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCisJY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07CisKKwlkZXZfbnIgPSAoZGV2X25yIDwgU045QzEwMl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKworCXNuOWMxMDJfY3JlYXRlX3N5c2ZzKGNhbSk7CisJREJHKDIsICJPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICdzeXNmcycgaW50ZXJmYWNlIHJlYWR5IikKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKKworCXVwKCZjYW0tPmRldl9zZW0pOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKGNhbSkgeworCQlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKKwkJaWYgKGNhbS0+djRsZGV2KQorCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOworCQlrZnJlZShjYW0pOworCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaWYgKCFjYW0pCisJCXJldHVybjsKKworCWRvd25fd3JpdGUoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOyAKKworCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIGNhbS0+djRsZGV2LT5uYW1lKQorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY2FtLT5vcGVuKTsKKworCWlmIChjYW0tPnVzZXJzKSB7CisJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgorCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLiIsCisJCSAgICBjYW0tPnY0bGRldi0+bWlub3IpCisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCXNuOWMxMDJfc3RvcF90cmFuc2ZlcihjYW0pOworCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfc3RyZWFtKTsKKwl9IGVsc2UgeworCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwl9CisKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKworCWlmICghY2FtLT51c2VycykKKwkJa2ZyZWUoY2FtKTsKKworCXVwX3dyaXRlKCZzbjljMTAyX2Rpc2Nvbm5lY3QpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbjljMTAyX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyID0gICAgICBUSElTX01PRFVMRSwKKwkubmFtZSA9ICAgICAgICJzbjljMTAyIiwKKwkuaWRfdGFibGUgPSAgIHNuOWMxMDJfaWRfdGFibGUsCisJLnByb2JlID0gICAgICBzbjljMTAyX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHNuOWMxMDJfdXNiX2Rpc2Nvbm5lY3QsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHNuOWMxMDJfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKworCUtEQkcoMiwgU045QzEwMl9NT0RVTEVfTkFNRSAiIHYiIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04pCisJS0RCRygzLCBTTjlDMTAyX01PRFVMRV9BVVRIT1IpCisKKwlpZiAoKGVyciA9IHVzYl9yZWdpc3Rlcigmc245YzEwMl91c2JfZHJpdmVyKSkpCisJCUtEQkcoMSwgInVzYl9yZWdpc3RlcigpIGZhaWxlZCIpCisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbjljMTAyX21vZHVsZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNuOWMxMDJfdXNiX2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQoc245YzEwMl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzbjljMTAyX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfaHY3MTMxZC5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9odjcxMzFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwNzBkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfaHY3MTMxZC5jCkBAIC0wLDAgKzEsMjcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBIVjcxMzFEIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAgICAqCisgKiBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMWQ7CisKKworc3RhdGljIGludCBodjcxMzFkX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDEwKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDExKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDE0KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDYwLCAweDE3KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBlLCAweDE4KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGYyLCAweDE5KTsKKworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDEsIDB4MDQpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDIsIDB4MDApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjgsIDB4MDApOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCXsKKwkJCWludCByMSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDI2KSwKKwkJCSAgICByMiA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDI3KTsKKwkJCWlmIChyMSA8IDAgfHwgcjIgPCAwKQorCQkJCXJldHVybiAtRUlPOworCQkJY3RybC0+dmFsdWUgPSAocjEgPDwgOCkgfCAocjIgJiAweGZmKTsKKwkJfQorCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzEpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAweDNmIC0gKGN0cmwtPnZhbHVlICYgMHgzZik7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzMpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAweDNmIC0gKGN0cmwtPnZhbHVlICYgMHgzZik7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzIpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAweDNmIC0gKGN0cmwtPnZhbHVlICYgMHgzZik7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTDoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDMwKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4M2Y7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9QSVhFTF9CSUFTX1ZPTFRBR0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgzNCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDA3OworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIGludCBodjcxMzFkX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjYsIGN0cmwtPnZhbHVlID4+IDgpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDI3LCBjdHJsLT52YWx1ZSAmIDB4ZmYpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDMxLCAweDNmIC0gY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMywgMHgzZiAtIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzIsIDB4M2YgLSBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTDoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDM0LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJmh2NzEzMWQ7CisJaW50IGVyciA9IDA7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMiwKKwkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMjsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDQyLCAweDE5KTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZjIsIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMWQgPSB7CisJLm5hbWUgPSAiSFY3MTMxRCIsCisJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1JFQUQgfCBTTjlDMTAyX0kyQ19XUklURSwKKwkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAorCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCisJLmkyY19zbGF2ZV9pZCA9IDB4MTEsCisJLmluaXQgPSAmaHY3MTMxZF9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJleHBvc3VyZSIsCisJCQkubWluaW11bSA9IDB4MDI1MCwKKwkJCS5tYXhpbXVtID0gMHhmZmZmLAorCQkJLnN0ZXAgPSAweDAwMDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDI1MCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicmVkIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDNmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgzZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdyZWVuIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDNmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDFlLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gInJlc2V0IGxldmVsIiwKKwkJCS5taW5pbXVtID0gMHgxOSwKKwkJCS5tYXhpbXVtID0gMHgzZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgzMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicGl4ZWwgYmlhcyB2b2x0YWdlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwNywKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmaHY3MTMxZF9nZXRfY3RybCwKKwkuc2V0X2N0cmwgPSAmaHY3MTMxZF9zZXRfY3RybCwKKwkuY3JvcGNhcCA9IHsKKwkJLmJvdW5kcyA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwkJLmRlZnJlY3QgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJfSwKKwkuc2V0X2Nyb3AgPSAmaHY3MTMxZF9zZXRfY3JvcCwKKwkucGl4X2Zvcm1hdCA9IHsKKwkJLndpZHRoID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkucHJpdiA9IDgsCisJfSwKKwkuc2V0X3BpeF9mb3JtYXQgPSAmaHY3MTMxZF9zZXRfcGl4X2Zvcm1hdAorfTsKKworCitpbnQgc245YzEwMl9wcm9iZV9odjcxMzFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCByMCA9IDAsIHIxID0gMCwgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZodjcxMzFkLCAweDAwKTsKKwlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJmh2NzEzMWQsIDB4MDEpOworCWlmIChyMCA8IDAgfHwgcjEgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChyMCAhPSAweDAwICYmIHIxICE9IDB4MDQpCisJCXJldHVybiAtRU5PREVWOworCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJmh2NzEzMWQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX21pMDM0My5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9taTAzNDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjY3NmFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9taTAzNDMuYwpAQCAtMCwwICsxLDM2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgTUktMDM0MyBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBtaTAzNDM7CitzdGF0aWMgdTggbWkwMzQzX2kyY19kYXRhWzUrMV07CisKKworc3RhdGljIGludCBtaTAzNDNfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGEsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDcsIDB4MTgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4YTAsIDB4MTkpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGQsIDB4MDAsIDB4MDEsIDAsIDApOworCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkLCAweDAwLCAweDAwLCAwLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgwMSwgMHhlMSwgMCwgMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDIsIDB4ODEsIDAsIDApOworCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1LCAweDAwLCAweDE3LCAwLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwMCwgMHgxMSwgMCwgMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIsIDB4MDQsIDB4OWEsIDAsIDApOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IG1pMDM0M19nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzJdOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IG1pMDM0M19pMmNfZGF0YVszXSAmIDB4MjAgPyAxIDogMDsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IG1pMDM0M19pMmNfZGF0YVszXSAmIDB4ODAgPyAxIDogMDsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYywgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZSwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzNdIHwgKG1pMDM0M19pMmNfZGF0YVsyXSA8PCA4KTsKKwkJaWYgKGN0cmwtPnZhbHVlID49IDB4MTAgJiYgY3RybC0+dmFsdWUgPD0gMHgzZikKKwkJCWN0cmwtPnZhbHVlIC09IDB4MTA7CisJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID49IDB4NjAgJiYgY3RybC0+dmFsdWUgPD0gMHg3ZikKKwkJCWN0cmwtPnZhbHVlIC09IDB4NjA7CisJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID49IDB4ZTAgJiYgY3RybC0+dmFsdWUgPD0gMHhmZikKKwkJCWN0cmwtPnZhbHVlIC09IDB4ZTA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBtaTAzNDNfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwl1MTYgcmVnID0gMDsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJaWYgKGN0cmwtPnZhbHVlIDw9ICgweDNmLTB4MTApKQorCQkJcmVnID0gMHgxMCArIGN0cmwtPnZhbHVlOworCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8PSAoKDB4M2YtMHgxMCkgKyAoMHg3Zi0weDYwKSkpCisJCQlyZWcgPSAweDYwICsgKGN0cmwtPnZhbHVlIC0gKDB4M2YtMHgxMCkpOworCQllbHNlCisJCQlyZWcgPSAweGUwICsgKGN0cmwtPnZhbHVlIC0gKDB4M2YtMHgxMCkgLSAoMHg3Zi0weDYwKSk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIGN0cmwtPnZhbHVlLCAweDAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCBjdHJsLT52YWx1ZSA/IDB4NDA6MHgwMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybC0+dmFsdWUgPyAweDIwOjB4MDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIGN0cmwtPnZhbHVlID8gMHg4MDoweDAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsLT52YWx1ZSA/IDB4ODA6MHgwMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZCwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmIsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJlLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IG1pMDM0M19zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmbWkwMzQzOworCWludCBlcnIgPSAwOworCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDAsCisJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDI7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBoX3N0YXJ0LCAweDEyKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2X3N0YXJ0LCAweDEzKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBtaTAzNDNfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpIHsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBhLCAweDAwLCAweDAzLCAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxOSk7CisJfSBlbHNlIHsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBhLCAweDAwLCAweDA1LCAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhhMCwgMHgxOSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIG1pMDM0MyA9IHsKKwkubmFtZSA9ICJNSS0wMzQzIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAorCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCisJLmkyY19zbGF2ZV9pZCA9IDB4NWQsCisJLmluaXQgPSAmbWkwMzQzX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgweDNmLTB4MTApKygweDdmLTB4NjApKygweGZmLTB4ZTApLC8qMHg2ZCovCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gImhvcml6b250YWwgbWlycm9yIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgPSAidmVydGljYWwgbWlycm9yIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicmVkIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAoMHgzZi0weDEwKSsoMHg3Zi0weDYwKSsoMHhmZi0weGUwKSwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgweDNmLTB4MTApKygweDdmLTB4NjApKygweGZmLTB4ZTApLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ3JlZW4gYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgoMHgzZi0weDEwKSsoMHg3Zi0weDYwKSsoMHhmZi0weGUwKSksCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCX0sCisJLmdldF9jdHJsID0gJm1pMDM0M19nZXRfY3RybCwKKwkuc2V0X2N0cmwgPSAmbWkwMzQzX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZtaTAzNDNfc2V0X2Nyb3AsCisJLnBpeF9mb3JtYXQgPSB7CisJCS53aWR0aCA9IDY0MCwKKwkJLmhlaWdodCA9IDQ4MCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJLnByaXYgPSA4LAorCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJm1pMDM0M19zZXRfcGl4X2Zvcm1hdAorfTsKKworCitpbnQgc245YzEwMl9wcm9iZV9taTAzNDMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAxLCAweDAxKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDAxKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLCAweDAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKG1pMDM0M19pMmNfZGF0YVs0XSAhPSAweDMyICYmIG1pMDM0M19pMmNfZGF0YVszXSAhPSAweGUzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZtaTAzNDMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczEwNmIuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMTA2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTNlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczEwNmIuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgUEFTMTA2QiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczEwNmI7CisKKworc3RhdGljIGludCBwYXMxMDZiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDEwKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDExKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDE0KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE3KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE5KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDA5LCAweDE4KTsKKworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDIsIDB4MGMpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIDB4NWEpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDYsIDB4ODgpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDcsIDB4ODApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTAsIDB4MDYpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDYpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4MDApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTQsIDB4MDIpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTMsIDB4MDEpOworCisJbXNsZWVwKDQwMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMTA2Yl9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJeworCQkJaW50IHIxID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDMpLAorCQkJICAgIHIyID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDQpOworCQkJaWYgKHIxIDwgMCB8fCByMiA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQljdHJsLT52YWx1ZSA9IChyMSA8PCA0KSB8IChyMiAmIDB4MGYpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwYykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDFmOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA5KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBlKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwZikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDA3OworCQlyZXR1cm4gMDsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBhKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gKGN0cmwtPnZhbHVlICYgMHgxZikgPDwgMTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwOCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweGY4OworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIGludCBwYXMxMDZiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDMsIGN0cmwtPnZhbHVlID4+IDQpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA0LCBjdHJsLT52YWx1ZSAmIDB4MGYpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBjLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA5LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZSwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBmLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBhLCBjdHJsLT52YWx1ZSA+PiAxKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwYiwgY3RybC0+dmFsdWUgPj4gMSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA4LCBjdHJsLT52YWx1ZSA8PCAzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTMsIDB4MDEpOworCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmcGFzMTA2YjsKKwlpbnQgZXJyID0gMDsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyA0LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAzOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MmMsIDB4MTcpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgcGFzMTA2YiA9IHsKKwkubmFtZSA9ICJQQVMxMDZCIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKKwkuaTJjX3NsYXZlX2lkID0gMHg0MCwKKwkuaW5pdCA9ICZwYXMxMDZiX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtID0gMHgxMjUsCisJCQkubWF4aW11bSA9IDB4ZmZmLAorCQkJLnN0ZXAgPSAweDAwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgxNDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBkLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJjb250cmFzdCIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MDcsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsIC8qIDB4MDB+MHgwMyBoYXZlIHNhbWUgZWZmZWN0ICovCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gInJlZCBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgxZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MWYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDYsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJncmVlbiBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgzZSwKKwkJCS5zdGVwID0gMHgwMiwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkRBQyBtYWduaXR1ZGUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAxLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZwYXMxMDZiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZwYXMxMDZiX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSAzNTIsCisJCQkuaGVpZ2h0ID0gMjg4LAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gMzUyLAorCQkJLmhlaWdodCA9IDI4OCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZwYXMxMDZiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSAzNTIsCisJCS5oZWlnaHQgPSAyODgsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwgLyogd2UgdXNlIHRoaXMgZmllbGQgYXMgJ2JpdHMgcGVyIHBpeGVsJyAqLworCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJnBhczEwNmJfc2V0X3BpeF9mb3JtYXQKK307CisKKworaW50IHNuOWMxMDJfcHJvYmVfcGFzMTA2YihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgcjAgPSAwLCByMSA9IDAsIGVyciA9IDA7CisJdW5zaWduZWQgaW50IHBpZCA9IDA7CisKKwkvKgorCSAgIE1pbmltYWwgaW5pdGlhbGl6YXRpb24gdG8gZW5hYmxlIHRoZSBJMkMgY29tbXVuaWNhdGlvbgorCSAgIE5PVEU6IGRvIE5PVCBjaGFuZ2UgdGhlIHZhbHVlcyEKKwkqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgZG93biAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgb24gKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsgLyogc2Vuc29yIGNsb2NrIGF0IDI0IE1IeiAqLworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZwYXMxMDZiLCAweDAwKTsKKwlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczEwNmIsIDB4MDEpOworCisJaWYgKHIwIDwgMCB8fCByMSA8IDApCisJCXJldHVybiAtRUlPOworCisJcGlkID0gKHIwIDw8IDExKSB8ICgocjEgJiAweGYwKSA+PiA0KTsKKwlpZiAocGlkICE9IDB4MDA3KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZwYXMxMDZiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMjAyYmNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNTRjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMjAyYmNiLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsdWctaW4gZm9yIFBBUzIwMkJDQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICoKKyAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBDYXJsb3MgRWR1YXJkbyBNZWRhZ2xpYSBEeW9uaXNpbyAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICA8bWVkYWdsaWFAdW5kbC5vcmcuYnI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vY2FkdS5ob21lbGludXguY29tOjgwODAvICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERBQyBNYWduaXR1ZGUsIGV4cG9zdXJlIGFuZCBncmVlbiBnYWluIGNvbnRyb2xzIGFkZGVkIGJ5ICAgICAgICAgICAgICAgICoKKyAqIEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2I7CisKKworc3RhdGljIGludCBwYXMyMDJiY2JfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MzAsIDB4MTkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDksIDB4MTgpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMywgMHg0MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZCwgMHgyYyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwZiwgMHhhOSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMCwgMHgwOCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgMHg2Myk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNSwgMHg3MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwMSk7CisKKwltc2xlZXAoNDAwKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwYXMyMDJiY2JfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJeworCQkJaW50IHIxID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDQpLAorCQkJICAgIHIyID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDUpOworCQkJaWYgKHIxIDwgMCB8fCByMiA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQljdHJsLT52YWx1ZSA9IChyMSA8PCA2KSB8IChyMiAmIDB4M2YpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwOSkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDBmOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA3KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MGY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDEwKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDgpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgwZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwYykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIGludCBwYXMyMDJiY2Jfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjQsIDB4MTcpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgY3RybC0+dmFsdWUgPj4gNik7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIGN0cmwtPnZhbHVlICYgMHgzZik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDksIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDcsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBjLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDExLCAweDAxKTsKKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZwYXMyMDJiY2I7CisJaW50IGVyciA9IDA7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgNCwKKwkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMzsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczIwMmJjYiA9IHsKKwkubmFtZSA9ICJQQVMyMDJCQ0IiLAorCS5tYWludGFpbmVyID0gIkNhcmxvcyBFZHVhcmRvIE1lZGFnbGlhIER5b25pc2lvICIKKwkgICAgICAgICAgICAgICI8bWVkYWdsaWFAdW5kbC5vcmcuYnI+IiwKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKKwkuaTJjX3NsYXZlX2lkID0gMHg0MCwKKwkuaW5pdCA9ICZwYXMyMDJiY2JfaW5pdCwKKwkucWN0cmwgPSB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDAxZTUsCisJCQkubWF4aW11bSA9IDB4M2ZmZiwKKwkJCS5zdGVwID0gMHgwMDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAxZTUsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBjLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MGYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJibHVlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDBmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDA1LAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ3JlZW4gYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MGYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJEQUMgbWFnbml0dWRlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHhmZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmcGFzMjAyYmNiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZwYXMyMDJiY2Jfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCX0sCisJLnNldF9jcm9wID0gJnBhczIwMmJjYl9zZXRfY3JvcCwKKwkucGl4X2Zvcm1hdCA9IHsKKwkJLndpZHRoID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkucHJpdiA9IDgsCisJfSwKKwkuc2V0X3BpeF9mb3JtYXQgPSAmcGFzMjAyYmNiX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sgICAgICAgCisJaW50IHIwID0gMCwgcjEgPSAwLCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBwaWQgPSAwOworCisJLyoKKwkgKiAgTWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBlbmFibGUgdGhlIEkyQyBjb21tdW5pY2F0aW9uCisJICogIE5PVEU6IGRvIE5PVCBjaGFuZ2UgdGhlIHZhbHVlcyEKKwkgKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAxLCAweDAxKTsgLyogc2Vuc29yIHBvd2VyIGRvd24gKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDQwLCAweDAxKTsgLyogc2Vuc29yIHBvd2VyIG9uICovCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyOCwgMHgxNyk7IC8qIHNlbnNvciBjbG9jayBhdCAyNCBNSHogKi8KKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCXIwID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmcGFzMjAyYmNiLCAweDAwKTsKKwlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczIwMmJjYiwgMHgwMSk7CisKKwlpZiAocjAgPCAwIHx8IHIxIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlwaWQgPSAocjAgPDwgNCkgfCAoKHIxICYgMHhmMCkgPj4gNCk7CisJaWYgKHBpZCAhPSAweDAxNykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmcGFzMjAyYmNiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfc2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmNzQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfc2Vuc29yLmgKQEAgLTAsMCArMSwzNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFQSSBmb3IgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1NOOUMxMDJfU0VOU09SX0hfCisjZGVmaW5lIF9TTjlDMTAyX1NFTlNPUl9IXworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3Qgc245YzEwMl9kZXZpY2U7CitzdHJ1Y3Qgc245YzEwMl9zZW5zb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAgIE9WRVJWSUVXLgorICAgVGhpcyBpcyBhIHNtYWxsIGludGVyZmFjZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIHN1cHBvcnQgZm9yIGFueSBDQ0QvQ01PUworICAgaW1hZ2Ugc2Vuc29ycyBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMFggYnJpZGdlcy4gVGhlIGVudGlyZSBBUEkgaXMgZG9jdW1lbnRlZAorICAgYmVsb3cuIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgdG8gc3VwcG9ydCBhIHNlbnNvciB0aGVyZSBhcmUgdGhyZWUgc3RlcHMKKyAgIHlvdSBoYXZlIHRvIGZvbGxvdzoKKyAgIDEpIGRlZmluZSB0aGUgbWFpbiAic245YzEwMl9zZW5zb3IiIHN0cnVjdHVyZSBieSBzZXR0aW5nIHRoZSBiYXNpYyBmaWVsZHM7CisgICAyKSB3cml0ZSBhIHByb2JpbmcgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IHRoZSBjb3JlIG1vZHVsZSB3aGVuIHRoZSBVU0IKKyAgICAgIGNhbWVyYSBpcyByZWNvZ25pemVkLCB0aGVuIGFkZCBib3RoIHRoZSBVU0IgaWRzIGFuZCB0aGUgbmFtZSBvZiB0aGF0CisgICAgICBmdW5jdGlvbiB0byB0aGUgdHdvIGNvcnJlc3BvbmRpbmcgdGFibGVzIFNFTlNPUl9UQUJMRSBhbmQgSURfVEFCTEUgKHNlZQorICAgICAgYmVsb3cpOworICAgMykgaW1wbGVtZW50IHRoZSBtZXRob2RzIHRoYXQgeW91IHdhbnQvbmVlZCAoYW5kIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIG1haW4KKyAgICAgIHN0cnVjdHVyZSBhY2NvcmRpbmdseSkuCisgICAic245YzEwMl9wYXMxMDZiLmMiIGlzIGFuIGV4YW1wbGUgb2YgYWxsIHRoaXMgc3R1ZmYuIFJlbWVtYmVyIHRoYXQgeW91IGRvCisgICBOT1QgbmVlZCB0byB0b3VjaCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGNvcmUgbW9kdWxlIGZvciB0aGUgdGhpbmdzIHRvIHdvcmsKKyAgIHByb3Blcmx5LCB1bmxlc3MgeW91IGZpbmQgYnVncyBvciBmbGF3cyBpbiBpdC4gRmluYWxseSwgZG8gbm90IGZvcmdldCB0bworICAgcmVhZCB0aGUgVjRMMiBBUEkgZm9yIGNvbXBsZXRlbmVzcy4KKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAgIFByb2JpbmcgZnVuY3Rpb25zOiBvbiBzdWNjZXNzLCB5b3UgbXVzdCBhdHRhY2ggdGhlIHNlbnNvciB0byB0aGUgY2FtZXJhCisgICBieSBjYWxsaW5nIHNuOWMxMDJfYXR0YWNoX3NlbnNvcigpIHByb3ZpZGVkIGJlbG93LgorICAgVG8gZW5hYmxlIHRoZSBJMkMgY29tbXVuaWNhdGlvbiwgeW91IG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBhIHJlYWxseSBiYXNpYworICAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNOOUMxMFggY2hpcCBieSB1c2luZyB0aGUgd3JpdGUgZnVuY3Rpb24gZGVjbGFyZWQgCisgICBhaGVhZC4KKyAgIEZ1bmN0aW9ucyBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBvdGhlcndpc2UuCisqLworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX2h2NzEzMWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX21pMDM0MyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfcGFzMTA2YihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfcGFzMjAyYmNiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTEwYzFiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTMwZDFiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKKworLyoKKyAgIEFkZCB0aGUgYWJvdmUgZW50cmllcyB0byB0aGlzIHRhYmxlLiBCZSBzdXJlIHRvIGFkZCB0aGUgZW50cnkgaW4gdGhlIHJpZ2h0CisgICBwbGFjZSwgc2luY2UsIG9uIGZhaWx1cmUsIHRoZSBuZXh0IHByb2Jpbmcgcm91dGluZSBpcyBjYWxsZWQgYWNjb3JkaW5nIHRvIAorICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCisqLworI2RlZmluZSBTTjlDMTAyX1NFTlNPUl9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSopID0geyAgICAgICAgICAgICAgXAorCSZzbjljMTAyX3Byb2JlX21pMDM0MywgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgICBcCisJJnNuOWMxMDJfcHJvYmVfcGFzMTA2YiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgIFwKKwkmc245YzEwMl9wcm9iZV9wYXMyMDJiY2IsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgXAorCSZzbjljMTAyX3Byb2JlX2h2NzEzMWQsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgICBcCisJJnNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovICAgICAgIFwKKwkmc245YzEwMl9wcm9iZV90YXM1MTMwZDFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8gICAgICAgXAorCU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9OworCisvKiBBdHRhY2ggYSBwcm9iZWQgc2Vuc29yIHRvIHRoZSBjYW1lcmEuICovCitleHRlcm4gdm9pZCAKK3NuOWMxMDJfYXR0YWNoX3NlbnNvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcik7CisKKy8qIEVhY2ggU045QzEwWCBjYW1lcmEgaGFzIHByb3BlciBQSUQvVklEIGlkZW50aWZpZXJzLiBBZGQgdGhlbSBoZXJlIGluIGNhc2UuKi8KKyNkZWZpbmUgU045QzEwMl9JRF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzbjljMTAyX2lkX3RhYmxlW10gPSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDEpLCB9LCAvKiBUQVM1MTEwQzFCICovICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSksIH0sIC8qIFRBUzUxMTBDMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA5KSwgfSwgLyogUEFTMTA2QiAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQpLCB9LCAvKiBQQVMxMDZCICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI1KSwgfSwgLyogVEFTNTEzMEQxQiBhbmQgVEFTNTExMEMxQiAqLyAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjgpLCB9LCAvKiBQQVMyMDJCQ0IgKi8gICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIH0sIC8qIFBBUzEwNkIgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJhKSwgfSwgLyogSFY3MTMxRCAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmIpLCB9LCAvKiBNSS0wMzQzICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIH0sIC8qIE9WNzYyMCAqLyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwKSwgfSwgLyogTUkwM3ggKi8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODApLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MiksIH0sIC8qIE1JMDM0MyBhbmQgTUkwMzYwICovICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgzKSwgfSwgLyogSFY3MTMxW0R8RTFdICovICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODgpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhiKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGMpLCB9LCAvKiBIVjcxMzF4ICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZSksIH0sIC8qIENJUy1WRjEwICovICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhmKSwgfSwgLyogT1Y3NjMwICovICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTApLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEzKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTgpLCB9LCAvKiBQQVMxMDZCICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYSksIH0sIC8qIFRBUzUxMzBEMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFiKSwgfSwgLyogVEFTNTExMEMxQiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWMpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFmKSwgfSwgLyogUEFTMjAyQkNCICovICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjApLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGIzKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjgpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJiKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmMpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiZSksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAgIFJlYWQvd3JpdGUgcm91dGluZXM6IHRoZXkgYWx3YXlzIHJldHVybiAtMSBvbiBlcnJvciwgMCBvciB0aGUgcmVhZCB2YWx1ZQorICAgb3RoZXJ3aXNlLiBOT1RFIHRoYXQgYSByZWFsIHJlYWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNOOUMxMFgKKyAgIGNoaXAgZm9yIHNvbWUgb2YgaXRzIHJlZ2lzdGVycy4gVG8gd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCBhIHBzZXVkby1yZWFkCisgICBjYWxsIGlzIHByb3ZpZGVkIGluc3RlYWQ6IGl0IHJldHVybnMgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdmFsdWUgCisgICBvbiB0aGUgcmVnaXN0ZXIgKDAgaWYgaXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiksIHRoZSB1c3VhbCAtMSBvbiBlcnJvci4KKyovCisKKy8qIFRoZSAidHJ5IiBJMkMgSS9PIHZlcnNpb25zIGFyZSB1c2VkIHdoZW4gcHJvYmluZyB0aGUgc2Vuc29yICovCitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV93cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLHN0cnVjdCBzbjljMTAyX3NlbnNvciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBhZGRyZXNzLCB1OCB2YWx1ZSk7CitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV9yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSosc3RydWN0IHNuOWMxMDJfc2Vuc29yKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggYWRkcmVzcyk7CisKKy8qCisgICBUaGVzZSBtdXN0IGJlIHVzZWQgaWYgYW5kIG9ubHkgaWYgdGhlIHNlbnNvciBkb2Vzbid0IGltcGxlbWVudCB0aGUgc3RhbmRhcmQKKyAgIEkyQyBwcm90b2NvbC4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGdvb2QgcmVhc29ucyB3aHkgeW91IG11c3QgdXNlIHRoZSAKKyAgIHNpbmdsZS1ieXRlIHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9uczogZG8gbm90IGFidXNlLiBUaGUgZmlyc3QgZnVuY3Rpb24KKyAgIHdyaXRlcyBuIGJ5dGVzLCBmcm9tIGRhdGEwIHRvIGRhdGFuLCB0byByZWdpc3RlcnMgMHgwOSAtIDB4MDkrbiBvZiBTTjlDMTBYCisgICBjaGlwLiBUaGUgc2Vjb25kIG9uZSBwcm9ncmFtcyB0aGUgcmVnaXN0ZXJzIDB4MDkgYW5kIDB4MTAgd2l0aCBkYXRhMCBhbmQKKyAgIGRhdGExLCBhbmQgcGxhY2VzIHRoZSBuIGJ5dGVzIHJlYWQgZnJvbSB0aGUgc2Vuc29yIHJlZ2lzdGVyIHRhYmxlIGluIHRoZQorICAgYnVmZmVyIHBvaW50ZWQgYnkgJ2J1ZmZlcicuIEJvdGggdGhlIGZ1bmN0aW9ucyByZXR1cm4gLTEgb24gZXJyb3I7IHRoZSB3cml0ZQorICAgdmVyc2lvbiByZXR1cm5zIDAgb24gc3VjY2Vzcywgd2hpbGUgdGhlIHJlYWQgdmVyc2lvbiByZXR1cm5zIHRoZSBmaXJzdCByZWFkCisgICBieXRlLgorKi8KK2V4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTAsIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTQsIHU4IGRhdGE1KTsKK2V4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGRhdGEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTEsIHU4IG4sIHU4IGJ1ZmZlcltdKTsKKworLyogVG8gYmUgdXNlZCBhZnRlciB0aGUgc2Vuc29yIHN0cnVjdCBoYXMgYmVlbiBhdHRhY2hlZCB0byB0aGUgY2FtZXJhIHN0cnVjdCAqLworZXh0ZXJuIGludCBzbjljMTAyX2kyY193cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSk7CitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiwgdTggYWRkcmVzcyk7CisKKy8qIEkvTyBvbiByZWdpc3RlcnMgaW4gdGhlIGJyaWRnZS4gQ291bGQgYmUgdXNlZCBieSB0aGUgc2Vuc29yIG1ldGhvZHMgdG9vICovCitleHRlcm4gaW50IHNuOWMxMDJfd3JpdGVfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSosIHU4IHZhbHVlLCB1MTYgaW5kZXgpOworZXh0ZXJuIGludCBzbjljMTAyX3ByZWFkX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1MTYgaW5kZXgpOworCisvKgorICAgTk9URTogdGhlcmUgYXJlIG5vIGV4cG9ydGVkIGRlYnVnZ2luZyBmdW5jdGlvbnMuIFRvIHVuaWZvcm0gdGhlIG91dHB1dCB5b3UKKyAgIG11c3QgdXNlIHRoZSBkZXZfaW5mbygpL2Rldl93YXJuKCkvZGV2X2VycigpIG1hY3JvcyBkZWZpbmVkIGluIGRldmljZS5oLAorICAgYWxyZWFkeSBpbmNsdWRlZCBoZXJlLCB0aGUgYXJndW1lbnQgYmVpbmcgdGhlIHN0cnVjdCBkZXZpY2UgJ2Rldicgb2YgdGhlCisgICBzZW5zb3Igc3RydWN0dXJlLiBEbyBOT1QgdXNlIHRoZXNlIG1hY3JvcyBiZWZvcmUgdGhlIHNlbnNvciBpcyBhdHRhY2hlZCBvcgorICAgdGhlIGtlcm5lbCB3aWxsIGNyYXNoISBIb3dldmVyLCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIG5vdGlmeSB0aGUgdXNlciBhYm91dAorICAgY29tbW9uIGVycm9ycyBvciBvdGhlciBtZXNzYWdlcywgc2luY2UgdGhpcyBpcyBkb25lIGJ5IHRoZSBtYXN0ZXIgbW9kdWxlLgorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHNuOWMxMDJfaTJjX3N5c2ZzX29wcyB7CisJU045QzEwMl9JMkNfUkVBRCA9IDB4MDEsCisJU045QzEwMl9JMkNfV1JJVEUgPSAweDAyLAorfTsKKworZW51bSBzbjljMTAyX2kyY19mcmVxdWVuY3kgeyAvKiBzZW5zb3JzIG1heSBzdXBwb3J0IGJvdGggdGhlIGZyZXF1ZW5jaWVzICovCisJU045QzEwMl9JMkNfMTAwS0haID0gMHgwMSwKKwlTTjlDMTAyX0kyQ180MDBLSFogPSAweDAyLAorfTsKKworZW51bSBzbjljMTAyX2kyY19pbnRlcmZhY2UgeworCVNOOUMxMDJfSTJDXzJXSVJFUywKKwlTTjlDMTAyX0kyQ18zV0lSRVMsCit9OworCitzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgeworCWNoYXIgbmFtZVszMl0sIC8qIHNlbnNvciBuYW1lICovCisJICAgICBtYWludGFpbmVyWzY0XTsgLyogbmFtZSBvZiB0aGUgbWFudGFpbmVyIDxlbWFpbD4gKi8KKworCS8qIFN1cHBvcnRlZCBvcGVyYXRpb25zIHRocm91Z2ggdGhlICdzeXNmcycgaW50ZXJmYWNlICovCisJZW51bSBzbjljMTAyX2kyY19zeXNmc19vcHMgc3lzZnNfb3BzOworCisJLyoKKwkgICBUaGVzZSBzZW5zb3IgY2FwYWJpbGl0aWVzIG11c3QgYmUgcHJvdmlkZWQgaWYgdGhlIFNOOUMxMFggY29udHJvbGxlcgorCSAgIG5lZWRzIHRvIGNvbW11bmljYXRlIHRocm91Z2ggdGhlIHNlbnNvciBzZXJpYWwgaW50ZXJmYWNlIGJ5IHVzaW5nCisJICAgYXQgbGVhc3Qgb25lIG9mIHRoZSBpMmMgZnVuY3Rpb25zIGF2YWlsYWJsZS4KKwkqLworCWVudW0gc245YzEwMl9pMmNfZnJlcXVlbmN5IGZyZXF1ZW5jeTsKKwllbnVtIHNuOWMxMDJfaTJjX2ludGVyZmFjZSBpbnRlcmZhY2U7CisKKwkvKgorCSAgIFRoaXMgaWRlbnRpZmllciBtdXN0IGJlIHByb3ZpZGVkIGlmIHRoZSBpbWFnZSBzZW5zb3IgaW1wbGVtZW50cworCSAgIHRoZSBzdGFuZGFyZCBJMkMgcHJvdG9jb2wuCisJKi8KKwl1OCBpMmNfc2xhdmVfaWQ7IC8qIHJlZy4gMHgwOSAqLworCisJLyoKKwkgICBOT1RFOiBXaGVyZSBub3Qgbm90ZWQsbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGFyZSBub3QgbWFuZGF0b3J5LgorCSAgICAgICAgIFNldCB0byBudWxsIGlmIHlvdSBkbyBub3QgaW1wbGVtZW50IHRoZW0uIElmIGltcGxlbWVudGVkLAorCSAgICAgICAgIHRoZXkgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCB0aGUgcHJvcGVyIGVycm9yIG90aGVyd2lzZS4KKwkqLworCisJaW50ICgqaW5pdCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworCS8qCisJICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgc2Vuc29yIGhhcyBiZWVuIGF0dGFjaGVkLiAKKwkgICBJdCBzaG91bGQgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzZW5zb3Igb25seSwgYnV0IG1heSBhbHNvCisJICAgY29uZmlndXJlIHBhcnQgb2YgdGhlIFNOOUMxMFggY2hpcCBpZiBuZWNlc3NhcnkuIFlvdSBkb24ndCBuZWVkIHRvCisJICAgc2V0dXAgcGljdHVyZSBzZXR0aW5ncyBsaWtlIGJyaWdodG5lc3MsIGNvbnRyYXN0LCBldGMuLiBoZXJlLCBpZgorCSAgIHRoZSBjb3JyaXNwb25kaW5nIGNvbnRyb2xzIGFyZSBpbXBsZW1lbnRlZCAoc2VlIGJlbG93KSwgc2luY2UgCisJICAgdGhleSBhcmUgYWRqdXN0ZWQgaW4gdGhlIGNvcmUgZHJpdmVyIGJ5IGNhbGxpbmcgdGhlIHNldF9jdHJsKCkKKwkgICBtZXRob2QgYWZ0ZXIgaW5pdCgpLCB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMKKwkgICBzcGVjaWZpZWQgaW4gdGhlIHY0bDJfcXVlcnljdHJsIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbnRyb2xzOworCSAgIFNhbWUgc3VnZ2VzdGlvbnMgYXBwbHkgZm9yIG90aGVyIHNldHRpbmdzLCBfaWZfIHRoZSBjb3JyZXNwb25kaW5nCisJICAgbWV0aG9kcyBhcmUgcHJlc2VudDsgaWYgbm90LCB0aGUgaW5pdGlhbGl6YXRpb24gbXVzdCBjb25maWd1cmUgdGhlCisJICAgc2Vuc29yIGFjY29yZGluZyB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYmVsb3cuCisJKi8KKworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybFtWNEwyX0NJRF9MQVNUUDEtVjRMMl9DSURfQkFTRV07CisJLyoKKwkgICBPcHRpb25hbCBsaXN0IG9mIGRlZmF1bHQgY29udHJvbHMsIGRlZmluZWQgYXMgaW5kaWNhdGVkIGluIHRoZSAKKwkgICBWNEwyIEFQSS4gTWVudSB0eXBlIGNvbnRyb2xzIGFyZSBub3QgaGFuZGxlZCBieSB0aGlzIGludGVyZmFjZS4KKwkqLworCisJaW50ICgqZ2V0X2N0cmwpKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKTsKKwlpbnQgKCpzZXRfY3RybCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOworCS8qCisJICAgWW91IG11c3QgaW1wbGVtZW50IGF0IGxlYXN0IHRoZSBzZXRfY3RybCBtZXRob2QgaWYgeW91IGhhdmUgZGVmaW5lZAorCSAgIHRoZSBsaXN0IGFib3ZlLiBUaGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBmb2xsb3cgdGhlIFY0TDIKKwkgICBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIFZJRElPQ19HfENfQ1RSTCBpb2N0bHMuIFY0TDJfQ0lEX0h8VkNFTlRFUgorCSAgIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBzbyBkbyBub3QgaW1wbGVtZW50IHRoZW0uIEFsc28sCisJICAgeW91IGRvbid0IGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGUgcGFzc2VkIHZhbHVlcyBhcmUgb3V0IG9mIGJvdW5kcywKKwkgICBnaXZlbiB0aGF0IHRoaXMgaXMgZG9uZSBieSB0aGUgY29yZSBtb2R1bGUuCisJKi8KKworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY3JvcGNhcDsKKwkvKgorCSAgIFRoaW5rIHRoZSBpbWFnZSBzZW5zb3IgYXMgYSBncmlkIG9mIFIsRyxCIG1vbm9jaHJvbWF0aWMgcGl4ZWxzCisJICAgZGlzcG9zZWQgYWNjb3JkaW5nIHRvIGEgcGFydGljdWxhciBCYXllciBwYXR0ZXJuLCB3aGljaCBkZXNjcmliZXMKKwkgICB0aGUgY29tcGxldGUgYXJyYXkgb2YgcGl4ZWxzLCBmcm9tICgwLDApIHRvICh4bWF4LCB5bWF4KS4gV2Ugd2lsbAorCSAgIHVzZSB0aGlzIGNvb3JkaW5hdGUgc3lzdGVtIGZyb20gbm93IG9uLiBJdCBpcyBhc3N1bWVkIHRoZSBzZW5zb3IKKwkgICBjaGlwIGNhbiBiZSBwcm9ncmFtbWVkIHRvIGNhcHR1cmUvdHJhbnNtaXQgYSBzdWJzZWN0aW9uIG9mIHRoYXQKKwkgICBhcnJheSBvZiBwaXhlbHM6IHdlIHdpbGwgY2FsbCB0aGlzIHN1YnNlY3Rpb24gImFjdGl2ZSB3aW5kb3ciLgorCSAgIEl0IGlzIG5vdCBhbHdheXMgdHJ1ZSB0aGF0IHRoZSBsYXJnZXN0IGFjaGlldmFibGUgYWN0aXZlIHdpbmRvdyBjYW4KKwkgICBjb3ZlciB0aGUgd2hvbGUgYXJyYXkgb2YgcGl4ZWxzLiBUaGUgVjRMMiBBUEkgZGVmaW5lcyBhbm90aGVyCisJICAgYXJlYSBjYWxsZWQgInNvdXJjZSByZWN0YW5nbGUiLCB3aGljaCwgaW4gdHVybiwgaXMgYSBzdWJyZWN0YW5nbGUgb2YKKwkgICB0aGUgYWN0aXZlIHdpbmRvdy4gVGhlIFNOOUMxMFggY2hpcCBpcyBhbHdheXMgcHJvZ3JhbW1lZCB0byByZWFkIHRoZQorCSAgIHNvdXJjZSByZWN0YW5nbGUuCisJICAgVGhlIGJvdW5kcyBvZiBib3RoIHRoZSBhY3RpdmUgd2luZG93IGFuZCB0aGUgc291cmNlIHJlY3RhbmdsZSBhcmUKKwkgICBzcGVjaWZpZWQgaW4gdGhlIGNyb3BjYXAgc3Vic3RydWN0dXJlcyAnYm91bmRzJyBhbmQgJ2RlZnJlY3QnLgorCSAgIEJ5IGRlZmF1bHQsIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIHNob3VsZCBjb3ZlciB0aGUgbGFyZ2VzdCBwb3NzaWJsZQorCSAgIGFyZWEuIEFnYWluLCBpdCBpcyBub3QgYWx3YXlzIHRydWUgdGhhdCB0aGUgbGFyZ2VzdCBzb3VyY2UgcmVjdGFuZ2xlCisJICAgY2FuIGNvdmVyIHRoZSBlbnRpcmUgYWN0aXZlIHdpbmRvdywgYWx0aG91Z2ggaXQgaXMgYSByYXJlIGNhc2UgZm9yIAorCSAgIHRoZSBoYXJkd2FyZSB3ZSBoYXZlLiBUaGUgYm91bmRzIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIF9tdXN0XyBiZQorCSAgIG11bHRpcGxlIG9mIDE2IGFuZCBtdXN0IHVzZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbSBhcyBpbmRpY2F0ZWQKKwkgICBiZWZvcmU7IHRoZWlyIGNlbnRlcnMgc2hhbGwgYWxpZ24gaW5pdGlhbGx5LgorCSAgIElmIG5lY2Vzc2FyeSwgdGhlIHNlbnNvciBjaGlwIG11c3QgYmUgaW5pdGlhbGl6ZWQgZHVyaW5nIGluaXQoKSB0bworCSAgIHNldCB0aGUgYm91bmRzIG9mIHRoZSBhY3RpdmUgc2Vuc29yIHdpbmRvdzsgaG93ZXZlciwgYnkgZGVmYXVsdCwgaXQKKwkgICB1c3VhbGx5IGNvdmVycyB0aGUgbGFyZ2VzdCBhY2hpZXZhYmxlIGFyZWEgKG1heHdpZHRoIHggbWF4aGVpZ2h0KQorCSAgIG9mIHBpeGVscywgc28gbm8gcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBpcyBuZWVkZWQsIGlmIHlvdSBoYXZlCisJICAgZGVmaW5lZCB0aGUgY29ycmVjdCBkZWZhdWx0IGJvdW5kcyBpbiB0aGUgc3RydWN0dXJlcy4KKwkgICBTZWUgdGhlIFY0TDIgQVBJIGZvciBmdXJ0aGVyIGRldGFpbHMuCisJICAgTk9URTogb25jZSB5b3UgaGF2ZSBkZWZpbmVkIHRoZSBib3VuZHMgb2YgdGhlIGFjdGl2ZSB3aW5kb3cKKwkgICAgICAgICAoc3RydWN0IGNyb3BjYXAuYm91bmRzKSB5b3UgbXVzdCBub3QgY2hhbmdlIHRoZW0uYW55bW9yZS4KKwkgICBPbmx5ICdib3VuZHMnIGFuZCAnZGVmcmVjdCcgZmllbGRzIGFyZSBtYW5kYXRvcnksIG90aGVyIGZpZWxkcworCSAgIHdpbGwgYmUgaWdub3JlZC4KKwkqLworCisJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCSAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKKwkvKgorCSAgIFRvIGJlIGNhbGxlZCBvbiBWSURJT0NfQ19TRVRDUk9QLiBUaGUgY29yZSBtb2R1bGUgYWx3YXlzIGNhbGxzIGEKKwkgICBkZWZhdWx0IHJvdXRpbmUgd2hpY2ggY29uZmlndXJlcyB0aGUgYXBwcm9wcmlhdGUgU045QzEwWCByZWdzIChhbHNvCisJICAgc2NhbGluZyksIGJ1dCB5b3UgbWF5IG5lZWQgdG8gb3ZlcnJpZGUvYWRqdXN0IHNwZWNpZmljIHN0dWZmLgorCSAgICdyZWN0JyBjb250YWlucyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB0aGF0IGFyZSBtdWx0aXBsZSBvZiAxNjogaW4KKwkgICBjYXNlIHlvdSBvdmVycmlkZSB0aGUgZGVmYXVsdCBmdW5jdGlvbiwgeW91IGFsd2F5cyBoYXZlIHRvIHByb2dyYW0KKwkgICB0aGUgY2hpcCB0byBtYXRjaCB0aG9zZSB2YWx1ZXM7IG9uIGVycm9yIHJldHVybiB0aGUgY29ycmVzcG9uZGluZworCSAgIGVycm9yIGNvZGUgd2l0aG91dCByb2xsaW5nIGJhY2suCisJICAgTk9URTogaW4gY2FzZSwgeW91IG11c3QgcHJvZ3JhbSB0aGUgU045QzEwWCBjaGlwIHRvIGdldCByaWQgb2YgCisJICAgICAgICAgYmxhbmsgcGl4ZWxzIG9yIGJsYW5rIGxpbmVzIGF0IHRoZSBfc3RhcnRfIG9mIGVhY2ggbGluZSBvcgorCSAgICAgICAgIGZyYW1lIGFmdGVyIGVhY2ggSFNZTkMgb3IgVlNZTkMsIHNvIHRoYXQgdGhlIGltYWdlIHN0YXJ0cyB3aXRoCisJICAgICAgICAgcmVhbCBSR0IgZGF0YSAoc2VlIHJlZ3MgMHgxMiwgMHgxMykgKGhhdmluZyBzZXQgSF9TSVpFIGFuZCwKKwkgICAgICAgICBWX1NJWkUgeW91IGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBibGFuayBwaXhlbHMgb3IgYmxhbmsKKwkgICAgICAgICBsaW5lcyBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSBvciBmcmFtZSkuCisJKi8KKworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4X2Zvcm1hdDsKKwkvKgorCSAgIFdoYXQgeW91IGhhdmUgdG8gZGVmaW5lIGhlcmUgYXJlOiAxKSBpbml0aWFsICd3aWR0aCcgYW5kICdoZWlnaHQnIG9mCisJICAgdGhlIHRhcmdldCByZWN0YW5nbGUgMikgdGhlIGluaXRpYWwgJ3BpeGVsZm9ybWF0Jywgd2hpY2ggY2FuIGJlCisJICAgZWl0aGVyIFY0TDJfUElYX0ZNVF9TTjlDMTBYIChmb3IgY29tcHJlc3NlZCB2aWRlbykgb3IKKwkgICBWNEwyX1BJWF9GTVRfU0JHR1I4IDMpICdwcml2Jywgd2hpY2ggd2UnbGwgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUKKwkgICBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgZm9yIHVuY29tcHJlc3NlZCB2aWRlbywgOCBvciA5IChkZXNwaXRlIHRoZQorCSAgIGN1cnJlbnQgdmFsdWUgb2YgJ3BpeGVsZm9ybWF0JykuCisJICAgTk9URSAxOiBib3RoICd3aWR0aCcgYW5kICdoZWlnaHQnIF9tdXN0XyBiZSBlaXRoZXIgMS8xIG9yIDEvMiBvciAxLzQKKwkgICAgICAgICAgIG9mIGNyb3BjYXAuZGVmcmVjdC53aWR0aCBhbmQgY3JvcGNhcC5kZWZyZWN0LmhlaWdodC4gSQorCSAgICAgICAgICAgc3VnZ2VzdCAxLzEuCisJICAgTk9URSAyOiBUaGUgaW5pdGlhbCBjb21wcmVzc2lvbiBxdWFsaXR5IGlzIGRlZmluZWQgYnkgdGhlIGZpcnN0IGJpdAorCSAgICAgICAgICAgb2YgcmVnIDB4MTcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW1hZ2Ugc2Vuc29yLgorCSAgIE5PVEUgMzogYXMgc2FpZCBhYm92ZSwgeW91IGhhdmUgdG8gcHJvZ3JhbSB0aGUgU045QzEwWCBjaGlwIHRvIGdldAorCSAgICAgICAgICAgcmlkIG9mIGFueSBibGFuayBwaXhlbHMsIHNvIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgc2Vuc29yCisJICAgICAgICAgICBtYXRjaGVzIHRoZSBSR0IgYmF5ZXIgc2VxdWVuY2UgKGkuZS4gQkdCR0JHLi4uR1JHUkdSKS4KKwkqLworCisJaW50ICgqc2V0X3BpeF9mb3JtYXQpKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpOworCS8qCisJICAgVG8gYmUgY2FsbGVkIG9uIFZJRElPQ19TX0ZNVCwgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0aGUgU0JHR1I4IHRvCisJICAgU045QzEwWCBwaXhlbCBmb3JtYXQgb3IgdmljZXZlcnNhLiBPbiBlcnJvciByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKKwkgICBlcnJvciBjb2RlIHdpdGhvdXQgcm9sbGluZyBiYWNrLgorCSovCisKKwljb25zdCBzdHJ1Y3QgZGV2aWNlKiBkZXY7CisJLyoKKwkgICBUaGlzIGlzIHRoZSBhcmd1bWVudCBmb3IgZGV2X2VycigpLCBkZXZfaW5mbygpIGFuZCBkZXZfd2FybigpLiBJdAorCSAgIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gWW91IG11c3Qgbm90IGFjY2VzcyB0aGUgc3RydWN0CisJICAgYmVmb3JlIHRoZSBzZW5zb3IgaXMgYXR0YWNoZWQuCisJKi8KKworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlKiB1c2JkZXY7CisJLyoKKwkgICBQb2ludHMgdG8gdGhlIHVzYl9kZXZpY2Ugc3RydWN0IGFmdGVyIHRoZSBzZW5zb3IgaXMgYXR0YWNoZWQuCisJICAgRG8gbm90IHRvdWNoIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisJKi8KKworCS8qCisJICAgRG8gTk9UIHdyaXRlIHRvIHRoZSBkYXRhIGJlbG93LCBpdCdzIFJFQUQgT05MWS4gSXQgaXMgdXNlZCBieSB0aGUKKwkgICBjb3JlIG1vZHVsZSB0byBzdG9yZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCB2YWx1ZXMgb2YgdGhlIGFib3ZlCisJICAgc2V0dGluZ3MsIGZvciByb2xsYmFja3MuLmV0Yy4uaW4gY2FzZSBvZiBlcnJvcnMgZHVyaW5nIGF0b21pYyBJL08KKwkqLworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBfcWN0cmxbVjRMMl9DSURfTEFTVFAxLVY0TDJfQ0lEX0JBU0VdOworCXN0cnVjdCB2NGwyX3JlY3QgX3JlY3Q7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFByaXZhdGUgaW9jdGwncyBmb3IgY29udHJvbCBzZXR0aW5ncyBzdXBwb3J0ZWQgYnkgc29tZSBpbWFnZSBzZW5zb3JzICovCisjZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSBWNEwyX0NJRF9QUklWQVRFX0JBU0UKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9SRVNFVF9MRVZFTCBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyCisjZGVmaW5lIFNOOUMxMDJfVjRMMl9DSURfUElYRUxfQklBU19WT0xUQUdFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMKKworI2VuZGlmIC8qIF9TTjlDMTAyX1NFTlNPUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTEwYzFiLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMTBjMWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBkNjIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTEwYzFiLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsdWctaW4gZm9yIFRBUzUxMTBDMUIgaW1hZ2Ugc2Vuc29yIGNvbm5lY3RlZCB0byB0aGUgU045QzEweCBQQyBDYW1lcmEgICoKKyAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgdGFzNTExMGMxYjsKKworc3RhdGljIHN0cnVjdCB2NGwyX2NvbnRyb2wgdGFzNTExMGMxYl9nYWluOworCisKK3N0YXRpYyBpbnQgdGFzNTExMGMxYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg0NCwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwYSwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwNiwgMHgxOCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhmYiwgMHgxOSk7CisKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweGMwLCAweDgwKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB0YXM1MTEwYzFiX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWN0cmwtPnZhbHVlID0gdGFzNTExMGMxYl9nYWluLnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlpZiAoIShlcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDIwLCAweGY2IC0gY3RybC0+dmFsdWUpKSkKKwkJCXRhczUxMTBjMWJfZ2Fpbi52YWx1ZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7Cit9CisKKworc3RhdGljIGludCB0YXM1MTEwYzFiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZ0YXM1MTEwYzFiOworCWludCBlcnIgPSAwOworCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDY5LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyA5OworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwkvKiBEb24ndCBjaGFuZ2UgISAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MTQsIDB4MWEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGEsIDB4MWIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHNuOWMxMDJfcHJlYWRfcmVnKGNhbSwgMHgxOSksIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDJiLCAweDE5KTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZmIsIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMTBjMWIgPSB7CisJLm5hbWUgPSAiVEFTNTExMEMxQiIsCisJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzNXSVJFUywKKwkuaW5pdCA9ICZ0YXM1MTEwYzFiX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGY2LAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDQwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5zZXRfY3RybCA9ICZ0YXM1MTEwYzFiX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSAzNTIsCisJCQkuaGVpZ2h0ID0gMjg4LAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gMzUyLAorCQkJLmhlaWdodCA9IDI4OCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZ0YXM1MTEwYzFiX2dldF9jdHJsLAorCS5zZXRfY3JvcCA9ICZ0YXM1MTEwYzFiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSAzNTIsCisJCS5oZWlnaHQgPSAyODgsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwKKwl9LAorCS5zZXRfcGl4X2Zvcm1hdCA9ICZ0YXM1MTEwYzFiX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX3RhczUxMTBjMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJLyogVGhpcyBzZW5zb3IgaGFzIG5vIGlkZW50aWZpZXJzLCBzbyBsZXQncyBhdHRhY2ggaXQgYW55d2F5ICovCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnRhczUxMTBjMWIpOworCisJLyogU2Vuc29yIGRldGVjdGlvbiBpcyBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCWlmIChsZTE2X3RvX2NwdSh0YXM1MTEwYzFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAwMSAmJgorCSAgICBsZTE2X3RvX2NwdSh0YXM1MTEwYzFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAwNSAmJgorCSAgICBsZTE2X3RvX2NwdSh0YXM1MTEwYzFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjBhYikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfdGFzNTEzMGQxYi5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTMwZDFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3OGU5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfdGFzNTEzMGQxYi5jCkBAIC0wLDAgKzEsMTg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBUQVM1MTMwRDFCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAqCisgKiBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMzBkMWI7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9jb250cm9sIHRhczUxMzBkMWJfZ2FpbiwgdGFzNTEzMGQxYl9leHBvc3VyZTsKKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDQsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDcsIDB4MTgpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSB0YXM1MTMwZDFiX2dhaW4udmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWN0cmwtPnZhbHVlID0gdGFzNTEzMGQxYl9leHBvc3VyZS52YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB0YXM1MTMwZDFiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKCEoZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHhmNiAtIGN0cmwtPnZhbHVlKSkpCisJCQl0YXM1MTMwZDFiX2dhaW4udmFsdWUgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJaWYgKCEoZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg0MCwgMHg0NyAtIGN0cmwtPnZhbHVlKSkpCisJCQl0YXM1MTMwZDFiX2V4cG9zdXJlLnZhbHVlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnRhczUxMzBkMWI7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMTA0LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAxMjsKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJLyogRG8gTk9UIGNoYW5nZSEgKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDFmLCAweDFhKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDFhLCAweDFiKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MTkpLCAweDE5KTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB0YXM1MTMwZDFiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MywgMHgxOSk7CisJZWxzZQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGYzLCAweDE5KTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciB0YXM1MTMwZDFiID0geworCS5uYW1lID0gIlRBUzUxMzBEMUIiLAorCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAorCS5zeXNmc19vcHMgPSBTTjlDMTAyX0kyQ19XUklURSwKKwkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAorCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18zV0lSRVMsCisJLmluaXQgPSAmdGFzNTEzMGQxYl9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdsb2JhbCBnYWluIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHhmNiwKKwkJCS5zdGVwID0gMHgwMiwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDQ3LAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZ0YXM1MTMwZDFiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZ0YXM1MTMwZDFiX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZ0YXM1MTMwZDFiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSA2NDAsCisJCS5oZWlnaHQgPSA0ODAsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwKKwl9LAorCS5zZXRfcGl4X2Zvcm1hdCA9ICZ0YXM1MTMwZDFiX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJLyogVGhpcyBzZW5zb3IgaGFzIG5vIGlkZW50aWZpZXJzLCBzbyBsZXQncyBhdHRhY2ggaXQgYW55d2F5ICovCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnRhczUxMzBkMWIpOworCisJLyogU2Vuc29yIGRldGVjdGlvbiBpcyBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCWlmIChsZTE2X3RvX2NwdSh0YXM1MTMwZDFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAyNSAmJgorCSAgICBsZTE2X3RvX2NwdSh0YXM1MTMwZDFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjBhYSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5jIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NTVjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5jCkBAIC0wLDAgKzEsMTUwNiBAQAorLyoKKyAqICBTVFYwNjgwIFVTQiBDYW1lcmEgRHJpdmVyLCBieSBLZXZpbiBTaXNzb24gKGtqc2lzc29uQGJlbGxzb3V0aC5uZXQpCisgKiAgCisgKiBUaGFua3MgdG8gU1RNaWNyb2VsZWN0cm9uaWNzIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdXNiIGNvbW1hbmRzLCBhbmQgCisgKiB0byBTdGV2ZSBNaWxsZXIgYXQgU1RNIGZvciBoaXMgaGVscCBhbmQgZW5jb3VyYWdlbWVudCB3aGlsZSBJIHdhcyAKKyAqIHdyaXRpbmcgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgaGVhdmlseSBvbiB0aGUgCisgKiBFbmRwb2ludHMgKGZvcm1lcmx5IGtub3duIGFzIEFPWCkgc2U0MDEgVVNCIENhbWVyYSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMCBKZXJvZW4gQi4gVnJlZWtlbiAocGUxcnhxQGFtc2F0Lm9yZykKKyAqCisgKiBTdGlsbCBzb21ld2hhdCBiYXNlZCBvbiB0aGUgTGludXggb3Y1MTEgZHJpdmVyLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBIaXN0b3J5OiAKKyAqIHZlciAwLjEgT2N0b2JlciwgMjAwMS4gSW5pdGlhbCBhdHRlbXB0LiAKKyAqCisgKiB2ZXIgMC4yIE5vdmVtYmVyLCAyMDAxLiBGaXhlZCBhc2JpbGl0eSB0byByZXNpemUsIGFkZGVkIGJyaWdodG5lc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBtYWRlIG1vcmUgc3RhYmxlICg/KQorICoKKyAqIHZlciAwLjIxIE5vdiwgMjAwMS4gICAgIEFkZGVkIGdhbW1hIGNvcnJlY3Rpb24gYW5kIHdoaXRlIGJhbGFuY2UsIAorICogICAgICAgICAgICAgICAgICAgICAgICAgZHVlIHRvIEFsZXhhbmRlciBTY2h3YXJ0ei4gU3RpbGwgdHJ5aW5nIHRvIAorICogICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92ZSBzdGFibGlsaXR5LiBNb3ZlZCBzdHVmZiBpbnRvIHN0djY4MC5oCisgKgorICogdmVyIDAuMjIgTm92LCAyMDAxLgkgICBBZGRlZCBzaGFycGVuIGZ1bmN0aW9uIChieSBNaWNoYWVsIFN3ZWV0LCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG1pa2VAZWFzeXN3LmNvbSkgZnJvbSBHSU1QLCBhbHNvIHVzZWQgaW4gcGVuY2FtLiAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSwgZmFzdCwgZ29vZCBpbnRlZ2VyIG1hdGggcm91dGluZS4KKyAqCisgKiB2ZXIgMC4yMyBEZWMsIDIwMDEgKGdraCkKKyAqIAkJCSAgIFRvb2sgb3V0IHNoYXJwZW4gZnVuY3Rpb24sIHJhbiBjb2RlIHRocm91Z2gKKyAqIAkJCSAgIExpbmRlbnQsIGFuZCBkaWQgb3RoZXIgbWlub3IgdHdlYWtzIHRvIGdldAorICogCQkJICAgdGhpbmdzIHRvIHdvcmsgcHJvcGVybHkgd2l0aCAyLjUuMQorICoKKyAqIHZlciAwLjI0IEphbiwgMjAwMiAoa2pzKSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIHRoZSBwcm9ibGVtIHdpdGggd2ViY2FtIGNyYXNoaW5nIGFmdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICB0d28gcGljdHVyZXMuIENoYW5nZWQgdGhlIHdheSBwaWMgaXMgaGFsdmVkIHRvIAorICogICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92ZSBxdWFsaXR5LiBHb3QgcmlkIG9mIGdyZWVuIGxpbmUgYXJvdW5kIAorICogICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuIEZpeCBicmlnaHRuZXNzIHJlc2V0IHdoZW4gY2hhbmdpbmcgc2l6ZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zy4gQWRqdXN0ZWQgZ2FtbWEgZmlsdGVycyBzbGlnaHRseS4KKyAqCisgKiB2ZXIgMC4yNSBKYW4sIDIwMDIgKGtqcykKKyAqCQkJICAgRml4ZWQgYSBidWcgaW4gd2hpY2ggdGhlIGRyaXZlciBzb21ldGltZXMgYXR0ZW1wdGVkCisgKgkJCSAgIHRvIHNldCB0byBhIG5vbi1zdXBwb3J0ZWQgc2l6ZS4gVGhpcyBhbGxvd2VkCisgKgkJCSAgIGdub21lbWVldGluZyB0byB3b3JrLgorICoJCQkgICBGaXhlZCBwcm9jIGVudHJ5IHJlbW92YWwgYnVnLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAic3R2NjgwLmgiCisKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKK3N0YXRpYyBpbnQgc3dhcFJHQiA9IDA7ICAgLyogZGVmYXVsdCBmb3IgYXV0byBzbGVlY3QgKi8KK3N0YXRpYyBpbnQgc3dhcFJHQl9vbiA9IDA7IC8qIGRlZmF1bHQgdG8gYWxsb3cgYXV0byBzZWxlY3Q7IC0xPXN3YXAgbmV2ZXIsICsxPSBzd2FwIGFsd2F5cyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnID0gMDsKKworI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCWlmIChkZWJ1ZyA+PSBsZXZlbCkJXAorCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjI1IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJLZXZpbiBTaXNzb24gPGtqc2lzc29uQGJlbGxzb3V0aC5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAiU1RWMDY4MCBVU0IgQ2FtZXJhIERyaXZlciIKKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyAoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworbW9kdWxlX3BhcmFtKHN3YXBSR0Jfb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChzd2FwUkdCX29uLCAiUmVkL2JsdWUgc3dhcDogMT1hbHdheXMsIDA9YXV0bywgLTE9bmV2ZXIiKTsKK21vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWVtb3J5IG1hbmFnZW1lbnQKKyAqCisgKiBUaGlzIGlzIGEgc2hhbWVsZXNzIGNvcHkgZnJvbSB0aGUgVVNCLWNwaWEgZHJpdmVyIChsaW51eCBrZXJuZWwKKyAqIHZlcnNpb24gMi4zLjI5IG9yIHNvLCBJIGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSBkb2VzIDspLgorICogQWN0dWFsbHkgaXQgc2VlbXMgdG8gYmUgYSBjb3B5IG9mIGEgc2hhbWVsZXNzIGNvcHkgb2YgdGhlIGJ0dHYtZHJpdmVyLgorICogT3IgdGhhdCBpcyBhIGNvcHkgb2YgYSBzaGFtZWxlc3MgY29weSBvZiAuLi4gKFRvIHRoZSBwb3dlcnM6IGlzIHRoZXJlCisgKiBubyBnZW5lcmljIGtlcm5lbC1mdW5jdGlvbiB0byBkbyB0aGlzIHNvcnQgb2Ygc3R1ZmY/KQorICoKKyAqIFllcywgaXQgd2FzIGEgc2hhbWVsZXNzIGNvcHkgZnJvbSB0aGUgYnR0di1kcml2ZXIuIElJUkMsIEFsYW4gc2F5cworICogdGhlcmUgd2lsbCBiZSBvbmUsIGJ1dCBhcHBhcmVudGVseSBub3QgeWV0IC1qZXJkZmVsdAorICoKKyAqIFNvIEkgY29waWVkIGl0IGFnYWluIGZvciB0aGUgb3Y1MTEgZHJpdmVyIC1jbGF1ZGlvCisgKgorICogU2FtZSBmb3IgdGhlIHNlNDAxIGRyaXZlciAtSmVyb2VuCisgKgorICogQW5kIHRoZSBTVFYwNjgwIGRyaXZlciAtIEtldmluCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAqcnZtYWxsb2MgKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyIChzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQgKG1lbSwgMCwgc2l6ZSk7CS8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlICh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmICghbWVtKQorCQlyZXR1cm47CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwl2ZnJlZSAobWVtKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwZW5jYW0gcmVhZC93cml0ZSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzdHZfc25kY3RybCAoaW50IHNldCwgc3RydWN0IHVzYl9zdHYgKnN0djY4MCwgdW5zaWduZWQgc2hvcnQgcmVxLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gLTE7CisKKwlzd2l0Y2ggKHNldCkgeworCWNhc2UgMDoJCS8qICAweGMxICAqLworCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKKwkJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAorCQkJCSAgICAgICByZXEsCisJCQkJICAgICAgIChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSwKKwkJCQkgICAgICAgdmFsdWUsIDAsIGJ1ZmZlciwgc2l6ZSwgUEVOQ0FNX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgMToJCS8qICAweDQxICAqLworCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKKwkJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAorCQkJCSAgICAgICByZXEsCisJCQkJICAgICAgIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCksCisJCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvKiAgMHg4MCAgKi8KKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnIChzdHY2ODAtPnVkZXYsCisJCQkJICAgICAgIHVzYl9yY3ZjdHJscGlwZSAoc3R2NjgwLT51ZGV2LCAwKSwKKwkJCQkgICAgICAgcmVxLAorCQkJCSAgICAgICAoVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UpLAorCQkJCSAgICAgICB2YWx1ZSwgMCwgYnVmZmVyLCBzaXplLCBQRU5DQU1fVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSAzOgkJLyogIDB4NDAgICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyAoc3R2NjgwLT51ZGV2LAorCQkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUgKHN0djY4MC0+dWRldiwgMCksCisJCQkJICAgICAgIHJlcSwKKwkJCQkgICAgICAgKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSksCisJCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwl9CisJaWYgKChyZXQgPCAwKSAmJiAocmVxICE9IDB4MGEpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogdXNiX2NvbnRyb2xfbXNnIGVycm9yICVpLCByZXF1ZXN0ID0gMHgleCwgZXJyb3IgPSAlaSIsIHNldCwgcmVxLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0dl9zZXRfY29uZmlnIChzdHJ1Y3QgdXNiX3N0diAqZGV2LCBpbnQgY29uZmlndXJhdGlvbiwgaW50IGludGVyZmFjZSwgaW50IGFsdGVybmF0ZSkKK3sKKworCWlmIChjb25maWd1cmF0aW9uICE9IGRldi0+dWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUKKwkJCXx8IHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChkZXYtPnVkZXYpIDwgMCkgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IEZBSUxFRCB0byByZXNldCBjb25maWd1cmF0aW9uICVpIiwgY29uZmlndXJhdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChkZXYtPnVkZXYsIGludGVyZmFjZSwgYWx0ZXJuYXRlKSA8IDApIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiBGQUlMRUQgdG8gc2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgJWkiLCBhbHRlcm5hdGUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0dl9zdG9wX3ZpZGVvIChzdHJ1Y3QgdXNiX3N0diAqZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiB0aGlzIGlzIGEgaGlnaCBwcmlvcml0eSBjb21tYW5kOyBpdCBzdG9wcyBhbGwgbG93ZXIgb3JkZXIgY29tbWFuZHMgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMSwgZGV2LCAweDA0LCAweDAwMDAsIGJ1ZiwgMHgwKSkgPCAwKSB7CisJCWkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDgwLCAwLCBidWYsIDB4MDIpOwkvKiBHZXQgTGFzdCBFcnJvcjsgMiA9IGJ1c3kgKi8KKwkJUERFQlVHICgxLCAiU1RWKGkpOiBsYXN0IGVycm9yOiAlaSwgIGNvbW1hbmQgPSAweCV4IiwgYnVmWzBdLCBidWZbMV0pOworCX0gZWxzZSB7CisJCVBERUJVRyAoMSwgIlNUVihpKTogQ2FtZXJhIHJlc2V0IHRvIGlkbGUgbW9kZS4iKTsKKwl9CisKKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAwKSkgPCAwKQorCQlQREVCVUcgKDEsICJTVFYoZSk6IFJlc2V0IGNvbmZpZyBkdXJpbmcgZXhpdCBmYWlsZWQiKTsKKworCS8qICBnZXQgY3VycmVudCBtb2RlICAqLworCWJ1ZlswXSA9IDB4ZjA7CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIGRldiwgMHg4NywgMCwgYnVmLCAweDA4KSkgIT0gMHgwOCkJLyogZ2V0IG1vZGUgKi8KKwkJUERFQlVHICgwLCAiU1RWKGUpOiBTdG9wX3ZpZGVvOiBwcm9ibGVtIHNldHRpbmcgb3JpZ2luYWwgbW9kZSIpOworCWlmIChkZXYtPm9yaWdNb2RlICE9IGJ1ZlswXSkgeworCQltZW1zZXQgKGJ1ZiwgMCwgOCk7CisJCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSBkZXYtPm9yaWdNb2RlOworCQlpZiAoKGkgPSBzdHZfc25kY3RybCAoMywgZGV2LCAweDA3LCAweDAxMDAsIGJ1ZiwgMHgwOCkpICE9IDB4MDgpIHsKKwkJCVBERUJVRyAoMCwgIlNUVihlKTogU3RvcF92aWRlbzogU2V0X0NhbWVyYV9Nb2RlIGZhaWxlZCIpOworCQkJaSA9IC0xOworCQl9CisJCWJ1ZlswXSA9IDB4ZjA7CisJCWkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDg3LCAwLCBidWYsIDB4MDgpOworCQlpZiAoKGkgIT0gMHgwOCkgfHwgKGJ1ZlswXSAhPSBkZXYtPm9yaWdNb2RlKSkgeworCQkJUERFQlVHICgwLCAiU1RWKGUpOiBjYW1lcmEgTk9UIHNldCB0byBvcmlnaW5hbCByZXNvbHV0aW9uLiIpOworCQkJaSA9IC0xOworCQl9IGVsc2UKKwkJCVBERUJVRyAoMCwgIlNUVihpKTogQ2FtZXJhIHNldCB0byBvcmlnaW5hbCByZXNvbHV0aW9uIik7CisJfQorCS8qIG9yaWdNb2RlICovCisJa2ZyZWUgKGJ1Zik7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgc3R2X3NldF92aWRlb19tb2RlIChzdHJ1Y3QgdXNiX3N0diAqZGV2KQoreworCWludCBpLCBzdG9wX3ZpZGVvID0gMTsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisKKwlidWYgPSBrbWFsbG9jICg0MCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogT3V0IG9mIChzbWFsbCBidWYpIG1lbW9yeSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChpID0gc3R2X3NldF9jb25maWcgKGRldiwgMSwgMCwgMCkpIDwgMCkgeworCQlrZnJlZSAoYnVmKTsKKwkJcmV0dXJuIGk7CisJfQorCisJaSA9IHN0dl9zbmRjdHJsICgyLCBkZXYsIDB4MDYsIDB4MDEwMCwgYnVmLCAweDEyKTsKKwlpZiAoIShpID4gMCkgJiYgKGJ1Zls4XSA9PSAweDUzKSAmJiAoYnVmWzldID09IDB4MDUpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogQ291bGQgbm90IGdldCBkZXNjcmlwdG9yIDAxMDAuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogIHNldCBhbHRlcm5hdGUgaW50ZXJmYWNlIDEgKi8KKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAxKSkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIGRldiwgMHg4NSwgMCwgYnVmLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKwlQREVCVUcgKDEsICJTVFYoaSk6IFNldHRpbmcgdmlkZW8gbW9kZS4iKTsKKwkvKiAgU3dpdGNoIHRvIFZpZGVvIG1vZGU6IDB4MDEwMCA9IFZHQSAoNjQweDQ4MCksIDB4MDAwMCA9IENJRiAoMzUyeDI4OCkgMHgwMzAwID0gUVZHQSAoMzIweDI0MCkgICovCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDEsIGRldiwgMHgwOSwgZGV2LT5WaWRlb01vZGUsIGJ1ZiwgMHgwKSkgPCAwKSB7CisJCXN0b3BfdmlkZW8gPSAwOworCQlnb3RvIGVycm9yOworCX0KKwlnb3RvIGV4aXQ7CisKK2Vycm9yOgorCWtmcmVlIChidWYpOworCWlmIChzdG9wX3ZpZGVvID09IDEpCisJCXN0dl9zdG9wX3ZpZGVvIChkZXYpOworCXJldHVybiAtMTsKKworZXhpdDoKKwlrZnJlZSAoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHZfaW5pdCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCkKK3sKKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaW50IGJ1ZnNpemU7CisKKwlidWZmZXIgPSBrbWFsbG9jICg0MCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogT3V0IG9mIChzbWFsbCBidWYpIG1lbW9yeSIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldCAoYnVmZmVyLCAwLCA0MCk7CisJdWRlbGF5ICgxMDApOworCisJLyogc2V0IGNvbmZpZyAxLCBpbnRlcmZhY2UgMCwgYWx0ZXJuYXRlIDAgKi8KKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoc3R2NjgwLCAxLCAwLCAwKSkgPCAwKSB7CisJCWtmcmVlIChidWZmZXIpOworCQlQREVCVUcgKDAsICJTVFYoZSk6IHNldCBjb25maWcgMSwwLDAgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJLyogcGluZyBjYW1lcmEgdG8gYmUgc3VyZSBTVFYwNjgwIGlzIHByZXNlbnQgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg4LCAweDU2NzgsIGJ1ZmZlciwgMHgwMikpICE9IDB4MDIpCisJCWdvdG8gZXJyb3I7CisJaWYgKChidWZmZXJbMF0gIT0gMHg1NikgfHwgKGJ1ZmZlclsxXSAhPSAweDc4KSkgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IGNhbWVyYSBwaW5nIGZhaWxlZCEhIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogZ2V0IGNhbWVyYSBkZXNjcmlwdG9yICovCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDIsIHN0djY4MCwgMHgwNiwgMHgwMjAwLCBidWZmZXIsIDB4MDkpKSAhPSAweDA5KQorCQlnb3RvIGVycm9yOworCWkgPSBzdHZfc25kY3RybCAoMiwgc3R2NjgwLCAweDA2LCAweDAyMDAsIGJ1ZmZlciwgMHgyMik7CisJaWYgKCEoaSA+PSAwKSAmJiAoYnVmZmVyWzddID09IDB4YTApICYmIChidWZmZXJbOF0gPT0gMHgyMykpIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiBDb3VsZCBub3QgZ2V0IGRlc2NyaXB0b3IgMDIwMC4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4YSwgMCwgYnVmZmVyLCAweDAyKSkgIT0gMHgwMikKKwkJZ290byBlcnJvcjsKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhiLCAwLCBidWZmZXIsIDB4MjQpKSAhPSAweDI0KQorCQlnb3RvIGVycm9yOworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4ODUsIDAsIGJ1ZmZlciwgMHgxMCkpICE9IDB4MTApCisJCWdvdG8gZXJyb3I7CisKKwlzdHY2ODAtPlN1cHBvcnRlZE1vZGVzID0gYnVmZmVyWzddOworCWkgPSBzdHY2ODAtPlN1cHBvcnRlZE1vZGVzOworCXN0djY4MC0+Q0lGID0gMDsKKwlzdHY2ODAtPlZHQSA9IDA7CisJc3R2NjgwLT5RVkdBID0gMDsKKwlpZiAoaSAmIDEpCisJCXN0djY4MC0+Q0lGID0gMTsKKwlpZiAoaSAmIDIpCisJCXN0djY4MC0+VkdBID0gMTsKKwlpZiAoaSAmIDgpCisJCXN0djY4MC0+UVZHQSA9IDE7CisJaWYgKHN0djY4MC0+U3VwcG9ydGVkTW9kZXMgPT0gMCkgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IFRoZXJlIGFyZSBOTyBzdXBwb3J0ZWQgU1RWNjgwIG1vZGVzISEiKTsKKwkJaSA9IC0xOworCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWlmIChzdHY2ODAtPkNJRikKKwkJCVBERUJVRyAoMCwgIlNUVihpKTogQ0lGIGlzIHN1cHBvcnRlZCIpOworCQlpZiAoc3R2NjgwLT5RVkdBKQorCQkJUERFQlVHICgwLCAiU1RWKGkpOiBRVkdBIGlzIHN1cHBvcnRlZCIpOworCX0KKwkvKiBGVyByZXYsIEFTSUMgcmV2LCBzZW5zb3IgSUQgICovCisJUERFQlVHICgxLCAiU1RWKGkpOiBGaXJtd2FyZSByZXYgaXMgJWkuJWkiLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisJUERFQlVHICgxLCAiU1RWKGkpOiBBU0lDIHJldiBpcyAlaS4laSIsIGJ1ZmZlclsyXSwgYnVmZmVyWzNdKTsKKwlQREVCVUcgKDEsICJTVFYoaSk6IFNlbnNvciBJRCBpcyAlaSIsIChidWZmZXJbNF0qMTYpICsgKGJ1ZmZlcls1XT4+NCkpOworCisJLyogIHNldCBhbHRlcm5hdGUgaW50ZXJmYWNlIDEgKi8KKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoc3R2NjgwLCAxLCAwLCAxKSkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4NSwgMCwgYnVmZmVyLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhkLCAwLCBidWZmZXIsIDB4MDgpKSAhPSAweDA4KQorCQlnb3RvIGVycm9yOworCWkgPSBidWZmZXJbM107CisJUERFQlVHICgwLCAiU1RWKGkpOiBDYW1lcmEgaGFzICVpIHBpY3R1cmVzLiIsIGkpOworCisJLyogIGdldCBjdXJyZW50IG1vZGUgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg3LCAwLCBidWZmZXIsIDB4MDgpKSAhPSAweDA4KQorCQlnb3RvIGVycm9yOworCXN0djY4MC0+b3JpZ01vZGUgPSBidWZmZXJbMF07CS8qIDAxID0gVkdBLCAwMyA9IFFWR0EsIDAwID0gQ0lGICovCisKKwkvKiBUaGlzIHdpbGwgYXR0ZW1wIENJRiBtb2RlLCBpZiBzdXBwb3J0ZWQuIElmIG5vdCwgc2V0IHRvIFFWR0EgICovCisJbWVtc2V0IChidWZmZXIsIDAsIDgpOworCWlmIChzdHY2ODAtPkNJRikKKwkJYnVmZmVyWzBdID0gMHgwMDsKKwllbHNlIGlmIChzdHY2ODAtPlFWR0EpCisJCWJ1ZmZlclswXSA9IDB4MDM7CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDMsIHN0djY4MCwgMHgwNywgMHgwMTAwLCBidWZmZXIsIDB4MDgpKSAhPSAweDA4KSB7CisJCVBERUJVRyAoMCwgIlNUVihpKTogU2V0X0NhbWVyYV9Nb2RlIGZhaWxlZCIpOworCQlpID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCWJ1ZmZlclswXSA9IDB4ZjA7CisJc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4NywgMCwgYnVmZmVyLCAweDA4KTsKKwlpZiAoKChzdHY2ODAtPkNJRiA9PSAxKSAmJiAoYnVmZmVyWzBdICE9IDB4MDApKSB8fCAoKHN0djY4MC0+UVZHQSA9PSAxKSAmJiAoYnVmZmVyWzBdICE9IDB4MDMpKSkgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IEVycm9yIHNldHRpbmcgY2FtZXJhIHZpZGVvIG1vZGUhIik7CisJCWkgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQlpZiAoYnVmZmVyWzBdID09IDApIHsKKwkJCXN0djY4MC0+VmlkZW9Nb2RlID0gMHgwMDAwOworCQkJUERFQlVHICgwLCAiU1RWKGkpOiBWaWRlbyBNb2RlIHNldCB0byBDSUYiKTsKKwkJfQorCQlpZiAoYnVmZmVyWzBdID09IDB4MDMpIHsKKwkJCXN0djY4MC0+VmlkZW9Nb2RlID0gMHgwMzAwOworCQkJUERFQlVHICgwLCAiU1RWKGkpOiBWaWRlbyBNb2RlIHNldCB0byBRVkdBIik7CisJCX0KKwl9CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4ZiwgMCwgYnVmZmVyLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKwlidWZzaXplID0gKGJ1ZmZlclswXSA8PCAyNCkgfCAoYnVmZmVyWzFdIDw8IDE2KSB8IChidWZmZXJbMl0gPDwgOCkgfCAoYnVmZmVyWzNdKTsKKwlzdHY2ODAtPmN3aWR0aCA9IChidWZmZXJbNF0gPDwgOCkgfCAoYnVmZmVyWzVdKTsJLyogLT5jYW1lcmEgPSAzMjIsIDM1NiwgNjQ0ICAqLworCXN0djY4MC0+Y2hlaWdodCA9IChidWZmZXJbNl0gPDwgOCkgfCAoYnVmZmVyWzddKTsJLyogLT5jYW1lcmEgPSAyNDIsIDI5MiwgNDg0ICAqLworCXN0djY4MC0+b3JpZ0dhaW4gPSBidWZmZXJbMTJdOworCisJZ290byBleGl0OworCitlcnJvcjoKKwlpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4MCwgMCwgYnVmZmVyLCAweDAyKTsJLyogR2V0IExhc3QgRXJyb3IgKi8KKwlQREVCVUcgKDEsICJTVFYoaSk6IGxhc3QgZXJyb3I6ICVpLCAgY29tbWFuZCA9IDB4JXgiLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisJa2ZyZWUgKGJ1ZmZlcik7CisJcmV0dXJuIC0xOworCitleGl0OgorCWtmcmVlIChidWZmZXIpOworCisJLyogdmlkZW8gPSAzMjB4MjQwLCAzNTJ4Mjg4ICovCisJaWYgKHN0djY4MC0+Q0lGID09IDEpIHsKKwkJc3R2NjgwLT5tYXh3aWR0aCA9IDM1MjsKKwkJc3R2NjgwLT5tYXhoZWlnaHQgPSAyODg7CisJCXN0djY4MC0+dndpZHRoID0gMzUyOworCQlzdHY2ODAtPnZoZWlnaHQgPSAyODg7CisJfQorCWlmIChzdHY2ODAtPlFWR0EgPT0gMSkgeworCQlzdHY2ODAtPm1heHdpZHRoID0gMzIwOworCQlzdHY2ODAtPm1heGhlaWdodCA9IDI0MDsKKwkJc3R2NjgwLT52d2lkdGggPSAzMjA7CisJCXN0djY4MC0+dmhlaWdodCA9IDI0MDsKKwl9CisKKwlzdHY2ODAtPnJhd2J1ZnNpemUgPSBidWZzaXplOwkvKiBtdXN0IGJlIC4vLiBieSA4ICovCisJc3R2NjgwLT5tYXhmcmFtZXNpemUgPSBidWZzaXplICogMzsJLyogUkdCIHNpemUgKi8KKwlQREVCVUcgKDIsICJTVFYoaSk6IGN3aWR0aCA9ICVpLCBjaGVpZ2h0ID0gJWkiLCBzdHY2ODAtPmN3aWR0aCwgc3R2NjgwLT5jaGVpZ2h0KTsKKwlQREVCVUcgKDEsICJTVFYoaSk6IHdpZHRoID0gJWksIGhlaWdodCA9ICVpLCByYXdidWZzaXplID0gJWxpIiwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCwgc3R2NjgwLT5yYXdidWZzaXplKTsKKworCS8qIHNvbWUgZGVmYXVsdCB2YWx1ZXMgKi8KKwlzdHY2ODAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gMHg4MjsKKwlzdHY2ODAtPmRyb3BwZWQgPSAwOworCXN0djY4MC0+ZXJyb3IgPSAwOworCXN0djY4MC0+ZnJhbWVjb3VudCA9IDA7CisJc3R2NjgwLT5yZWFkY291bnQgPSAwOworCXN0djY4MC0+c3RyZWFtaW5nID0gMDsKKwkvKiBicmlnaHQsIHdoaXRlLCBjb2xvdXIsIGh1ZSwgY29udHJhc3QgYXJlIHNldCBieSBzb2Z0d2FyZSwgbm90IGluIHN0djA2ODAgKi8KKwlzdHY2ODAtPmJyaWdodG5lc3MgPSAzMjc2NzsKKwlzdHY2ODAtPmNoZ2JyaWdodCA9IDA7CisJc3R2NjgwLT53aGl0ZW5lc3MgPSAwOwkvKiBvbmx5IGZvciBncmV5c2NhbGUgKi8KKwlzdHY2ODAtPmNvbG91ciA9IDMyNzY3OworCXN0djY4MC0+Y29udHJhc3QgPSAzMjc2NzsKKwlzdHY2ODAtPmh1ZSA9IDMyNzY3OworCXN0djY4MC0+cGFsZXR0ZSA9IFNUVl9WSURFT19QQUxFVFRFOworCXN0djY4MC0+ZGVwdGggPSAyNDsJLyogcmdiMjQgYml0cyAqLworCWlmICgoc3dhcFJHQl9vbiA9PSAwKSAmJiAoc3dhcFJHQiA9PSAwKSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChhdXRvKSBPRkYiKTsKKwllbHNlIGlmICgoc3dhcFJHQl9vbiA9PSAwKSAmJiAoc3dhcFJHQiA9PSAxKSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChhdXRvKSBPTiIpOworCWVsc2UgaWYgKHN3YXBSR0Jfb24gPT0gMSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChmb3JjZWQpIE9OIik7CisJZWxzZSBpZiAoc3dhcFJHQl9vbiA9PSAtMSkKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBzd2FwUkdCIGlzIChmb3JjZWQpIE9GRiIpOworCQorCWlmIChzdHZfc2V0X3ZpZGVvX21vZGUgKHN0djY4MCkgPCAwKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogQ291bGQgbm90IHNldCB2aWRlbyBtb2RlIGluIHN0dl9pbml0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqIGxhc3Qgb2YgcGVuY2FtICByb3V0aW5lcyAgKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzeXNmcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgc3R2NjgwX2ZpbGUobmFtZSwgdmFyaWFibGUsIGZpZWxkKQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNsYXNzX2Rldik7CQlcCisJc3RydWN0IHVzYl9zdHYgKnN0diA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsIGZpZWxkLCBzdHYtPnZhcmlhYmxlKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBOVUxMKTsKKworc3R2NjgwX2ZpbGUobW9kZWwsIGNhbWVyYV9uYW1lLCAiJXNcbiIpOworc3R2NjgwX2ZpbGUoaW5fdXNlLCB1c2VyLCAiJWRcbiIpOworc3R2NjgwX2ZpbGUoc3RyZWFtaW5nLCBzdHJlYW1pbmcsICIlZFxuIik7CitzdHY2ODBfZmlsZShwYWxldHRlLCBwYWxldHRlLCAiJWlcbiIpOworc3R2NjgwX2ZpbGUoZnJhbWVzX3RvdGFsLCByZWFkY291bnQsICIlZFxuIik7CitzdHY2ODBfZmlsZShmcmFtZXNfcmVhZCwgZnJhbWVjb3VudCwgIiVkXG4iKTsKK3N0djY4MF9maWxlKHBhY2tldHNfZHJvcHBlZCwgZHJvcHBlZCwgIiVkXG4iKTsKK3N0djY4MF9maWxlKGRlY29kaW5nX2Vycm9ycywgZXJyb3IsICIlZFxuIik7CisKK3N0YXRpYyB2b2lkIHN0djY4MF9jcmVhdGVfc3lzZnNfZmlsZXMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX21vZGVsKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2luX3VzZSk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9zdHJlYW1pbmcpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFsZXR0ZSk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZXNfdG90YWwpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVzX3JlYWQpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFja2V0c19kcm9wcGVkKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2RlY29kaW5nX2Vycm9ycyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0djY4MF9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX21vZGVsKTsKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2luX3VzZSk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9zdHJlYW1pbmcpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFsZXR0ZSk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZXNfdG90YWwpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZnJhbWVzX3JlYWQpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGFja2V0c19kcm9wcGVkKTsKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2RlY29kaW5nX2Vycm9ycyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2FtZXJhIGNvbnRyb2wKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHN0djY4MF9nZXRfcGljdCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCwgc3RydWN0IHZpZGVvX3BpY3R1cmUgKnApCit7CisJLyogVGhpcyBzZXRzIHZhbHVlcyBmb3IgdjRsIGludGVyZmFjZS4gbWF4L21pbiA9IDY1NTM1LzAgICovCisKKwlwLT5icmlnaHRuZXNzID0gc3R2NjgwLT5icmlnaHRuZXNzOworCXAtPndoaXRlbmVzcyA9IHN0djY4MC0+d2hpdGVuZXNzOwkvKiBncmV5c2NhbGUgKi8KKwlwLT5jb2xvdXIgPSBzdHY2ODAtPmNvbG91cjsKKwlwLT5jb250cmFzdCA9IHN0djY4MC0+Y29udHJhc3Q7CisJcC0+aHVlID0gc3R2NjgwLT5odWU7CisJcC0+cGFsZXR0ZSA9IHN0djY4MC0+cGFsZXR0ZTsKKwlwLT5kZXB0aCA9IHN0djY4MC0+ZGVwdGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjgwX3NldF9waWN0IChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwkvKiBTZWUgYWJvdmUgc3R2NjgwX2dldF9waWN0ICAqLworCisJaWYgKHAtPnBhbGV0dGUgIT0gU1RWX1ZJREVPX1BBTEVUVEUpIHsKKwkJUERFQlVHICgyLCAiU1RWKGUpOiBQYWxldHRlIHNldCBlcnJvciBpbiBfc2V0X3BpYyIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc3R2NjgwLT5icmlnaHRuZXNzICE9IHAtPmJyaWdodG5lc3MpIHsKKwkJc3R2NjgwLT5jaGdicmlnaHQgPSAxOworCQlzdHY2ODAtPmJyaWdodG5lc3MgPSBwLT5icmlnaHRuZXNzOworCX0gCisKKwlzdHY2ODAtPndoaXRlbmVzcyA9IHAtPndoaXRlbmVzczsJLyogZ3JleXNjYWxlICovCisJc3R2NjgwLT5jb2xvdXIgPSBwLT5jb2xvdXI7CisJc3R2NjgwLT5jb250cmFzdCA9IHAtPmNvbnRyYXN0OworCXN0djY4MC0+aHVlID0gcC0+aHVlOworCXN0djY4MC0+cGFsZXR0ZSA9IHAtPnBhbGV0dGU7CisJc3R2NjgwLT5kZXB0aCA9IHAtPmRlcHRoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0djY4MF92aWRlb19pcnEgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJaWYgKGxlbmd0aCA8IHN0djY4MC0+cmF3YnVmc2l6ZSkKKwkJUERFQlVHICgyLCAiU1RWKGkpOiBMb3N0IGRhdGEgaW4gdHJhbnNmZXI6IGV4cCAlbGksIGdvdCAlaSIsIHN0djY4MC0+cmF3YnVmc2l6ZSwgbGVuZ3RoKTsKKworCS8qIG9ob2guLi4gKi8KKwlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisKKwlpZiAoIXN0djY4MC0+dWRldikgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IGRldmljZSB2YXBvdXJpc2hlZCBpbiB2aWRlb19pcnEiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIDAgc2l6ZWQgcGFja2V0cyBoYXBwZW4gaWYgd2UgYXJlIHRvIGZhc3QsIGJ1dCBzb21ldGltZXMgdGhlIGNhbWVyYQorCSAgIGtlZXBzIHNlbmRpbmcgdGhlbSBmb3JldmVyLi4uCisJICovCisJaWYgKGxlbmd0aCAmJiAhdXJiLT5zdGF0dXMpIHsKKwkJc3R2NjgwLT5udWxscGFja2V0cyA9IDA7CisJCXN3aXRjaCAoc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF9uZXh0XS5zdGF0ZSkgeworCQljYXNlIEJVRkZFUl9SRUFEWToKKwkJY2FzZSBCVUZGRVJfQlVTWToKKwkJCXN0djY4MC0+ZHJvcHBlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBCVUZGRVJfVU5VU0VEOgorCQkJbWVtY3B5IChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLmRhdGEsCisJCQkgICAgICAgICh1bnNpZ25lZCBjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgpOworCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF9uZXh0XS5zdGF0ZSA9IEJVRkZFUl9SRUFEWTsKKwkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfbmV4dF0ubGVuZ3RoID0gbGVuZ3RoOworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUgKCZzdHY2ODAtPndxKSkgeworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnN0djY4MC0+d3EpOworCQkJfQorCQkJc3R2NjgwLT5zY3JhdGNoX292ZXJmbG93ID0gMDsKKwkJCXN0djY4MC0+c2NyYXRjaF9uZXh0Kys7CisJCQlpZiAoc3R2NjgwLT5zY3JhdGNoX25leHQgPj0gU1RWNjgwX05VTVNDUkFUQ0gpCisJCQkJc3R2NjgwLT5zY3JhdGNoX25leHQgPSAwOworCQkJYnJlYWs7CisJCX0JCS8qIHN3aXRjaCAgKi8KKwl9IGVsc2UgeworCQlzdHY2ODAtPm51bGxwYWNrZXRzKys7CisJCWlmIChzdHY2ODAtPm51bGxwYWNrZXRzID4gU1RWNjgwX01BWF9OVUxMUEFDS0VUUykgeworCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUgKCZzdHY2ODAtPndxKSkgeworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnN0djY4MC0+d3EpOworCQkJfQorCQl9CisJfQkJCS8qICBpZiAtIGVsc2UgKi8KKworCS8qIFJlc3VibWl0IHVyYiBmb3IgbmV3IGRhdGEgKi8KKwl1cmItPnN0YXR1cyA9IDA7CisJdXJiLT5kZXYgPSBzdHY2ODAtPnVkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKQorCQlQREVCVUcgKDAsICJTVFYoZSk6IHVyYiBidXJuZWQgZG93biBpbiB2aWRlbyBpcnEiKTsKKwlyZXR1cm47Cit9CQkJCS8qICBfdmlkZW9faXJxICAqLworCitzdGF0aWMgaW50IHN0djY4MF9zdGFydF9zdHJlYW0gKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcnIgPSAwLCBpOworCisJc3R2NjgwLT5zdHJlYW1pbmcgPSAxOworCisJLyogRG8gc29tZSBtZW1vcnkgYWxsb2NhdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNRlJBTUVTOyBpKyspIHsKKwkJc3R2NjgwLT5mcmFtZVtpXS5kYXRhID0gc3R2NjgwLT5mYnVmICsgaSAqIHN0djY4MC0+bWF4ZnJhbWVzaXplOworCQlzdHY2ODAtPmZyYW1lW2ldLmN1cnBpeCA9IDA7CisJfQorCS8qIHBhY2tldCBzaXplID0gNDA5NiAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNCVUY7IGkrKykgeworCQlzdHY2ODAtPnNidWZbaV0uZGF0YSA9IGttYWxsb2MgKHN0djY4MC0+cmF3YnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdHY2ODAtPnNidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBrbWFsbG9jIHJhdyBkYXRhIGJ1ZmZlciAlaSIsIGkpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJc3R2NjgwLT5zY3JhdGNoX25leHQgPSAwOworCXN0djY4MC0+c2NyYXRjaF91c2UgPSAwOworCXN0djY4MC0+c2NyYXRjaF9vdmVyZmxvdyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQ1JBVENIOyBpKyspIHsKKwkJc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPSBrbWFsbG9jIChzdHY2ODAtPnJhd2J1ZnNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPT0gTlVMTCkgeworCQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qga21hbGxvYyByYXcgc2NyYXRjaCBidWZmZXIgJWkiLCBpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzdHY2ODAtPnNjcmF0Y2hbaV0uc3RhdGUgPSBCVUZGRVJfVU5VU0VEOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0JVRjsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIHNidWYgaXMgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxhdGVyIGdldHMgbWVtY3B5ZWQgdG8gc2NyYXRjaCAqLworCQl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBzdHY2ODAtPnVkZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzdHY2ODAtPnVkZXYsIHN0djY4MC0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCSAgIHN0djY4MC0+c2J1ZltpXS5kYXRhLCBzdHY2ODAtPnJhd2J1ZnNpemUsCisJCQkJICAgc3R2NjgwX3ZpZGVvX2lycSwgc3R2NjgwKTsKKwkJc3R2NjgwLT51cmJbaV0gPSB1cmI7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiIChzdHY2ODAtPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpCisJCQlQREVCVUcgKDAsICJTVFYoZSk6IHVyYiBidXJuZWQgZG93biBpbiBzdGFydCBzdHJlYW0iKTsKKwl9CQkJLyogaSBTVFY2ODBfTlVNU0JVRiAqLworCisJc3R2NjgwLT5mcmFtZWNvdW50ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2ODBfc3RvcF9zdHJlYW0gKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCit7CisJaW50IGk7CisKKwlpZiAoIXN0djY4MC0+c3RyZWFtaW5nIHx8ICFzdHY2ODAtPnVkZXYpCisJCXJldHVybiAxOworCisJc3R2NjgwLT5zdHJlYW1pbmcgPSAwOworCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspCisJCWlmIChzdHY2ODAtPnVyYltpXSkgeworCQkJdXNiX2tpbGxfdXJiIChzdHY2ODAtPnVyYltpXSk7CisJCQl1c2JfZnJlZV91cmIgKHN0djY4MC0+dXJiW2ldKTsKKwkJCXN0djY4MC0+dXJiW2ldID0gTlVMTDsKKwkJCWtmcmVlIChzdHY2ODAtPnNidWZbaV0uZGF0YSk7CisJCX0KKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNDUkFUQ0g7IGkrKykgeworCQlrZnJlZSAoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEpOworCQlzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjgwX3NldF9zaXplIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaW50IHdhc3N0cmVhbWluZyA9IHN0djY4MC0+c3RyZWFtaW5nOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2hhbmdlICovCisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSB3aWR0aCkgJiYgKHN0djY4MC0+dmhlaWdodCA9PSBoZWlnaHQpKQorCQlyZXR1cm4gMDsKKworCVBERUJVRyAoMSwgIlNUVihpKTogc2l6ZSByZXF1ZXN0IGZvciAlaSB4ICVpIiwgd2lkdGgsIGhlaWdodCk7CisJLyogQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSAqLworCWlmICgoIXdpZHRoIHx8ICFoZWlnaHQpIHx8ICgod2lkdGggJiAxKSB8fCAoaGVpZ2h0ICYgMSkpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogc2V0X3NpemUgZXJyb3I6IHJlcXVlc3Q6IHYud2lkdGggPSAlaSwgdi5oZWlnaHQgPSAlaSAgYWN0dWFsOiBzdHYud2lkdGggPSAlaSwgc3R2LmhlaWdodCA9ICVpIiwgd2lkdGgsIGhlaWdodCwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCk7CisJCXJldHVybiAxOworCX0KKworCWlmICgod2lkdGggPCAoc3R2NjgwLT5tYXh3aWR0aCAvIDIpKSB8fCAoaGVpZ2h0IDwgKHN0djY4MC0+bWF4aGVpZ2h0IC8gMikpKSB7CisJCXdpZHRoID0gc3R2NjgwLT5tYXh3aWR0aCAvIDI7CisJCWhlaWdodCA9IHN0djY4MC0+bWF4aGVpZ2h0IC8gMjsKKwl9IGVsc2UgaWYgKCh3aWR0aCA+PSAxNTgpICYmICh3aWR0aCA8PSAxNjYpICYmIChzdHY2ODAtPlFWR0EgPT0gMSkpIHsKKwkJd2lkdGggPSAxNjA7CisJCWhlaWdodCA9IDEyMDsKKwl9IGVsc2UgaWYgKCh3aWR0aCA+PSAxNzIpICYmICh3aWR0aCA8PSAxODApICYmIChzdHY2ODAtPkNJRiA9PSAxKSkgeworCQl3aWR0aCA9IDE3NjsKKwkJaGVpZ2h0ID0gMTQ0OworCX0gZWxzZSBpZiAoKHdpZHRoID49IDMxOCkgJiYgKHdpZHRoIDw9IDM1MCkgJiYgKHN0djY4MC0+UVZHQSA9PSAxKSkgeworCQl3aWR0aCA9IDMyMDsKKwkJaGVpZ2h0ID0gMjQwOworCX0gZWxzZSBpZiAoKHdpZHRoID49IDM1MCkgJiYgKHdpZHRoIDw9IDM1OCkgJiYgKHN0djY4MC0+Q0lGID09IDEpKSB7CisJCXdpZHRoID0gMzUyOworCQloZWlnaHQgPSAyODg7CisJfSBlbHNlIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiByZXF1ZXN0IGZvciBub24tc3VwcG9ydGVkIHNpemU6IHJlcXVlc3Q6IHYud2lkdGggPSAlaSwgdi5oZWlnaHQgPSAlaSAgYWN0dWFsOiBzdHYud2lkdGggPSAlaSwgc3R2LmhlaWdodCA9ICVpIiwgd2lkdGgsIGhlaWdodCwgc3R2NjgwLT52d2lkdGgsIHN0djY4MC0+dmhlaWdodCk7CisJCXJldHVybiAxOworCX0KKwkKKwkvKiBTdG9wIGEgY3VycmVudCBzdHJlYW0gYW5kIHN0YXJ0IGl0IGFnYWluIGF0IHRoZSBuZXcgc2l6ZSAqLworCWlmICh3YXNzdHJlYW1pbmcpCisJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKwlzdHY2ODAtPnZ3aWR0aCA9IHdpZHRoOworCXN0djY4MC0+dmhlaWdodCA9IGhlaWdodDsKKwlQREVCVUcgKDEsICJTVFYoaSk6IHNpemUgc2V0IHRvICVpIHggJWkiLCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0KTsKKwlpZiAod2Fzc3RyZWFtaW5nKQorCQlzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHY2ODApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWaWRlbyBEZWNvZGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqICByb3V0aW5lcyBmcm9tIHRoZSBwZW5jYW0gcHJvZ3JhbTsgaGV5LCB0aGV5IHdvcmshICAqKioqKioqKi8KKworLyoKKyAqIFNUVjA2ODAgVmlzaW9uIENhbWVyYSBDaGlwc2V0IERyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDAwIEFkYW0gSGFycmlzb24gPGFkYW1AYW50aXNwaW4ub3JnPiAKKyovCisKKyNkZWZpbmUgUkVEIDAKKyNkZWZpbmUgR1JFRU4gMQorI2RlZmluZSBCTFVFIDIKKyNkZWZpbmUgQUQoeCwgeSwgdykgKCgoeSkqKHcpKyh4KSkqMykKKworc3RhdGljIHZvaWQgYmF5ZXJfdW5zaHVmZmxlIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggKmJ1ZmZlcikKK3sKKwlpbnQgeCwgeSwgaTsKKwlpbnQgdyA9IHN0djY4MC0+Y3dpZHRoOworCWludCB2dyA9IHN0djY4MC0+Y3dpZHRoLCB2aCA9IHN0djY4MC0+Y2hlaWdodDsKKwl1bnNpZ25lZCBpbnQgcCA9IDA7CisJaW50IGNvbG91ciA9IDAsIGJheWVyID0gMDsKKwl1bnNpZ25lZCBjaGFyICpyYXcgPSBidWZmZXItPmRhdGE7CisJc3RydWN0IHN0djY4MF9mcmFtZSAqZnJhbWUgPSAmc3R2NjgwLT5mcmFtZVtzdHY2ODAtPmN1cmZyYW1lXTsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXQgPSBmcmFtZS0+ZGF0YTsKKwl1bnNpZ25lZCBjaGFyICp0ZW1wID0gZnJhbWUtPmRhdGE7CisJaW50IG9mZnNldCA9IGJ1ZmZlci0+b2Zmc2V0OworCisJaWYgKGZyYW1lLT5jdXJwaXggPT0gMCkgeworCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSkgeworCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0dSQUJCSU5HOworCQl9CisJfQorCWlmIChvZmZzZXQgIT0gZnJhbWUtPmN1cnBpeCkgewkvKiBSZWdhcmQgZnJhbWUgYXMgbG9zdCA6KCAqLworCQlmcmFtZS0+Y3VycGl4ID0gMDsKKwkJc3R2NjgwLT5lcnJvcisrOworCQlyZXR1cm47CisJfQorCisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAzMjApIHx8IChzdHY2ODAtPnZ3aWR0aCA9PSAxNjApKSB7CisJCXZ3ID0gMzIwOworCQl2aCA9IDI0MDsKKwl9CisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAzNTIpIHx8IChzdHY2ODAtPnZ3aWR0aCA9PSAxNzYpKSB7CisJCXZ3ID0gMzUyOworCQl2aCA9IDI4ODsKKwl9CisKKwltZW1zZXQgKG91dHB1dCwgMCwgMyAqIHZ3ICogdmgpOwkvKiBjbGVhciBvdXRwdXQgbWF0cml4LiAqLworCisJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCWlmICh4ICYgMSkKKwkJCQlwID0gKihyYXcgKyB5ICogdyArICh4ID4+IDEpKTsKKwkJCWVsc2UKKwkJCQlwID0gKihyYXcgKyB5ICogdyArICh4ID4+IDEpICsgKHcgPj4gMSkpOworCisJCQlpZiAoeSAmIDEpCisJCQkJYmF5ZXIgPSAyOworCQkJZWxzZQorCQkJCWJheWVyID0gMDsKKwkJCWlmICh4ICYgMSkKKwkJCQliYXllcisrOworCisJCQlzd2l0Y2ggKGJheWVyKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDM6CisJCQkJY29sb3VyID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQljb2xvdXIgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWNvbG91ciA9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpID0gKHkgKiB2dyArIHgpICogMzsJCisJCQkqKG91dHB1dCArIGkgKyBjb2xvdXIpID0gKHVuc2lnbmVkIGNoYXIpIHA7CisJCX0JCS8qIGZvciB4ICovCisKKwl9CQkJLyogZm9yIHkgKi8KKworCS8qKioqKiogZ2FtbWEgY29ycmVjdGlvbiBwbHVzIGhhcmRjb2RlZCB3aGl0ZSBiYWxhbmNlICovCisJLyogVGhhbmtzIHRvIEFsZXhhbmRlciBTY2h3YXJ0eCA8YWxleGFuZGVyLnNjaHdhcnR4QGdteC5uZXQ+IGZvciB0aGlzIGNvZGUuCisJICAgQ29ycmVjdGlvbiB2YWx1ZXMgcmVkW10sIGdyZWVuW10sIGJsdWVbXSwgYXJlIGdlbmVyYXRlZCBieSAKKwkgICAocG93KGkvMjU2LjAsIEdBTU1BKSoyNTUuMCkqd2hpdGUgYmFsYW5jZVJHQiB3aGVyZSBHQU1NQT0wLjU1LCAxPGk8MjU1LiAKKwkgICBXaGl0ZSBiYWxhbmNlIChSR0IpPSAxLjAsIDEuMTcsIDEuNDguIFZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhcyBkb3VibGUgZmxvYXQgYW5kIAorCSAgIGNvbnZlcnRlZCB0byB1bnNpZ25lZCBjaGFyLiBWYWx1ZXMgYXJlIGluIHN0djY4MC5oICAqLworCisJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCWkgPSAoeSAqIHZ3ICsgeCkgKiAzOworCQkJKihvdXRwdXQgKyBpKSA9IHJlZFsqKG91dHB1dCArIGkpXTsKKwkJCSoob3V0cHV0ICsgaSArIDEpID0gZ3JlZW5bKihvdXRwdXQgKyBpICsgMSldOworCQkJKihvdXRwdXQgKyBpICsgMikgPSBibHVlWyoob3V0cHV0ICsgaSArIDIpXTsKKwkJfQorCX0KKworCS8qKioqKiogIGJheWVyIGRlbW9zYWljICAqKioqKiovCisJZm9yICh5ID0gMTsgeSA8ICh2aCAtIDEpOyB5KyspIHsKKwkJZm9yICh4ID0gMTsgeCA8ICh2dyAtIDEpOyB4KyspIHsJLyogd29yayBvdXQgcGl4ZWwgdHlwZSAqLworCQkJaWYgKHkgJiAxKQorCQkJCWJheWVyID0gMDsKKwkJCWVsc2UKKwkJCQliYXllciA9IDI7CisJCQlpZiAoISh4ICYgMSkpCisJCQkJYmF5ZXIrKzsKKworCQkJc3dpdGNoIChiYXllcikgeworCQkJY2FzZSAwOgkvKiBncmVlbi4gYmx1ZSBsciwgcmVkIHRiICovCisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgQkxVRSkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHksIHZ3KSArIEJMVUUpICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCArIDEsIHksIHZ3KSArIEJMVUUpKSA+PiAxOworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIFJFRCkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSAtIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5ICsgMSwgdncpICsgUkVEKSkgPj4gMTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxOgkvKiBibHVlLiBncmVlbiBscnRiLCByZWQgZGlhZ29uYWxzICovCisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgR1JFRU4pID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5LCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSAtIDEsIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBHUkVFTikpID4+IDI7CisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgUkVEKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSAtIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSArIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSAtIDEsIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSArIDEsIHZ3KSArIFJFRCkpID4+IDI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoJLyogcmVkLiBncmVlbiBscnRiLCBibHVlIGRpYWdvbmFscyAqLworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIEdSRUVOKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCArIDEsIHksIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgLSAxLCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5ICsgMSwgdncpICsgR1JFRU4pKSA+PiAyOworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIEJMVUUpID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5IC0gMSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSAtIDEsIHZ3KSArIEJMVUUpICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHkgKyAxLCB2dykgKyBCTFVFKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5ICsgMSwgdncpICsgQkxVRSkpID4+IDI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzoJLyogZ3JlZW4uIHJlZCBsciwgYmx1ZSB0YiAqLworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIFJFRCkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHksIHZ3KSArIFJFRCkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgUkVEKSkgPj4gMTsKKwkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBCTFVFKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4LCB5IC0gMSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5ICsgMSwgdncpICsgQkxVRSkpID4+IDE7CisJCQkJYnJlYWs7CisJCQl9CS8qIHN3aXRjaCAqLworCQl9CQkvKiBmb3IgeCAqLworCX0JCQkvKiBmb3IgeSAgLSBlbmQgZGVtb3NhaWMgICovCisKKwkvKiBmaXggdG9wIGFuZCBib3R0b20gcm93LCBsZWZ0IGFuZCByaWdodCBzaWRlICovCisJaSA9IHZ3ICogMzsKKwltZW1jcHkgKG91dHB1dCwgKG91dHB1dCArIGkpLCBpKTsKKwltZW1jcHkgKChvdXRwdXQgKyAodmggKiBpKSksIChvdXRwdXQgKyAoKHZoIC0gMSkgKiBpKSksIGkpOworCWZvciAoeSA9IDA7IHkgPCB2aDsgeSsrKSB7CisJCWkgPSB5ICogdncgKiAzOworCQltZW1jcHkgKChvdXRwdXQgKyBpKSwgKG91dHB1dCArIGkgKyAzKSwgMyk7CisJCW1lbWNweSAoKG91dHB1dCArIGkgKyAodncgKiAzKSksIChvdXRwdXQgKyBpICsgKHZ3IC0gMSkgKiAzKSwgMyk7CisJfQorCisJLyogIHByb2Nlc3MgYWxsIHJhdyBkYXRhLCB0aGVuIHRyaW0gdG8gc2l6ZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoKHN0djY4MC0+dndpZHRoID09IDE2MCkgfHwgKHN0djY4MC0+dndpZHRoID09IDE3NikpICB7CisJCWkgPSAwOworCQlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgeworCQkJaWYgKCEoeSAmIDEpKSB7CisJCQkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCQkJcCA9ICh5ICogdncgKyB4KSAqIDM7CisJCQkJCWlmICghKHggJiAxKSkgeworCQkJCQkJKihvdXRwdXQgKyBpKSA9ICoob3V0cHV0ICsgcCk7CisJCQkJCQkqKG91dHB1dCArIGkgKyAxKSA9ICoob3V0cHV0ICsgcCArIDEpOworCQkJCQkJKihvdXRwdXQgKyBpICsgMikgPSAqKG91dHB1dCArIHAgKyAyKTsKKwkJCQkJCWkgKz0gMzsKKwkJCQkJfQorCQkJCX0gIC8qIGZvciB4ICovCisJCQl9CisJCX0gIC8qIGZvciB5ICovCisJfQorCS8qIHJlc2V0IHRvIHByb3BlciB3aWR0aCAqLworCWlmICgoc3R2NjgwLT52d2lkdGggPT0gMTYwKSkgeworCQl2dyA9IDE2MDsKKwkJdmggPSAxMjA7CisJfQorCWlmICgoc3R2NjgwLT52d2lkdGggPT0gMTc2KSkgeworCQl2dyA9IDE3NjsKKwkJdmggPSAxNDQ7CisJfQorCisJLyogb3V0cHV0IGlzIFJHQjsgc29tZSBwcm9ncmFtcyB3YW50IEJHUiAgKi8KKwkvKiBzd2FwUkdCX29uPTAgLT4gcHJvZ3JhbSBkZWNpZGVzOyAgc3dhcFJHQl9vbj0xLCBhbHdheXMgc3dhcCAqLworCS8qIHN3YXBSR0Jfb249LTEsIG5ldmVyIHN3YXAgKi8KKwlpZiAoKChzd2FwUkdCID09IDEpICYmIChzd2FwUkdCX29uICE9IC0xKSkgfHwgKHN3YXBSR0Jfb24gPT0gMSkpIHsKKwkJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJCWZvciAoeCA9IDA7IHggPCB2dzsgeCsrKSB7CisJCQkJaSA9ICh5ICogdncgKyB4KSAqIDM7CisJCQkJKih0ZW1wKSA9ICoob3V0cHV0ICsgaSk7CisJCQkJKihvdXRwdXQgKyBpKSA9ICoob3V0cHV0ICsgaSArIDIpOworCQkJCSoob3V0cHV0ICsgaSArIDIpID0gKih0ZW1wKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBicmlnaHRuZXNzICovCisJaWYgKHN0djY4MC0+Y2hnYnJpZ2h0ID09IDEpIHsKKwkJaWYgKHN0djY4MC0+YnJpZ2h0bmVzcyA+PSAzMjc2NykgeworCQkJcCA9IChzdHY2ODAtPmJyaWdodG5lc3MgLSAzMjc2NykgLyAyNTY7CisJCQlmb3IgKHggPSAwOyB4IDwgKHZ3ICogdmggKiAzKTsgeCsrKSB7CisJCQkJaWYgKCgqKG91dHB1dCArIHgpICsgKHVuc2lnbmVkIGNoYXIpIHApID4gMjU1KQorCQkJCQkqKG91dHB1dCArIHgpID0gMjU1OworCQkJCWVsc2UKKwkJCQkJKihvdXRwdXQgKyB4KSArPSAodW5zaWduZWQgY2hhcikgcDsKKwkJCX0JLyogZm9yICovCisJCX0gZWxzZSB7CisJCQlwID0gKDMyNzY3IC0gc3R2NjgwLT5icmlnaHRuZXNzKSAvIDI1NjsKKwkJCWZvciAoeCA9IDA7IHggPCAodncgKiB2aCAqIDMpOyB4KyspIHsKKwkJCQlpZiAoKHVuc2lnbmVkIGNoYXIpIHAgPiAqKG91dHB1dCArIHgpKQorCQkJCQkqKG91dHB1dCArIHgpID0gMDsKKwkJCQllbHNlCisJCQkJCSoob3V0cHV0ICsgeCkgLT0gKHVuc2lnbmVkIGNoYXIpIHA7CisJCQl9CS8qIGZvciAqLworCQl9CQkvKiBlbHNlICovCisJfQorCS8qIGlmICovCisJZnJhbWUtPmN1cnBpeCA9IDA7CisJZnJhbWUtPmN1cmxpbmVwaXggPSAwOworCWZyYW1lLT5ncmFic3RhdGUgPSBGUkFNRV9ET05FOworCXN0djY4MC0+ZnJhbWVjb3VudCsrOworCXN0djY4MC0+cmVhZGNvdW50Kys7CisJaWYgKHN0djY4MC0+ZnJhbWVbKHN0djY4MC0+Y3VyZnJhbWUgKyAxKSAmIChTVFY2ODBfTlVNRlJBTUVTIC0gMSldLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSkgeworCQlzdHY2ODAtPmN1cmZyYW1lID0gKHN0djY4MC0+Y3VyZnJhbWUgKyAxKSAmIChTVFY2ODBfTlVNRlJBTUVTIC0gMSk7CisJfQorCit9CQkJCS8qIGJheWVyX3Vuc2h1ZmZsZSAqLworCisvKioqKioqKiAgZW5kIHJvdXRpbmVzIGZyb20gdGhlIHBlbmNhbSBwcm9ncmFtICAqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc3R2NjgwX25ld2ZyYW1lIChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBpbnQgZnJhbWVucikKK3sKKwlpbnQgZXJyb3JzID0gMDsKKworCXdoaWxlIChzdHY2ODAtPnN0cmVhbWluZyAmJiAoc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGUgPT0gRlJBTUVfUkVBRFkgfHwgc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpKSB7CisJCWlmICghc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5jdXJwaXgpIHsKKwkJCWVycm9ycysrOworCQl9CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoc3R2NjgwLT53cSwgKHN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXS5zdGF0ZSA9PSBCVUZGRVJfUkVBRFkpKTsKKworCQlpZiAoc3R2NjgwLT5udWxscGFja2V0cyA+IFNUVjY4MF9NQVhfTlVMTFBBQ0tFVFMpIHsKKwkJCXN0djY4MC0+bnVsbHBhY2tldHMgPSAwOworCQkJUERFQlVHICgyLCAiU1RWKGkpOiB0b28gbWFueSBudWxsIGxlbmd0aCBwYWNrZXRzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKKwkJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKwkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7CisJCX0gZWxzZSB7CisJCQlpZiAoc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlICE9IEJVRkZFUl9SRUFEWSkgeworCQkJCXN0djY4MC0+ZnJhbWVbZnJhbWVucl0uZ3JhYnN0YXRlID0gRlJBTUVfRVJST1I7CisJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBGUkFNRV9FUlJPUiBpbiBfbmV3ZnJhbWUiKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXS5zdGF0ZSA9IEJVRkZFUl9CVVNZOworCisJCQliYXllcl91bnNodWZmbGUgKHN0djY4MCwgJnN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXSk7CisKKwkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfdXNlXS5zdGF0ZSA9IEJVRkZFUl9VTlVTRUQ7CisJCQlzdHY2ODAtPnNjcmF0Y2hfdXNlKys7CisJCQlpZiAoc3R2NjgwLT5zY3JhdGNoX3VzZSA+PSBTVFY2ODBfTlVNU0NSQVRDSCkKKwkJCQlzdHY2ODAtPnNjcmF0Y2hfdXNlID0gMDsKKwkJCWlmIChlcnJvcnMgPiBTVFY2ODBfTUFYX0VSUk9SUykgeworCQkJCWVycm9ycyA9IDA7CisJCQkJUERFQlVHICgyLCAiU1RWKGkpOiB0b28gbWFueSBlcnJvcnMsIHJlc3RhcnRpbmcgY2FwdHVyZSIpOworCQkJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKwkJCQlzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHY2ODApOworCQkJfQorCQl9CQkvKiBlbHNlICovCisJfQkJCS8qIHdoaWxlICovCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvNExpbnV4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHN0dl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnIgPSAwOworCisJLyogd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBCS0wgaGVsZCAqLworCXN0djY4MC0+dXNlciA9IDE7CisJZXJyID0gc3R2X2luaXQgKHN0djY4MCk7CS8qIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgY2FtZXJhICovCisKKwlpZiAoZXJyID49IDApIHsKKwkJc3R2NjgwLT5mYnVmID0gcnZtYWxsb2MgKHN0djY4MC0+bWF4ZnJhbWVzaXplICogU1RWNjgwX05VTUZSQU1FUyk7CisJCWlmICghc3R2NjgwLT5mYnVmKSB7CisJCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBydm1hbGxvYyBmcmFtZSBidWZlciIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJfQorCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisJfQorCWlmIChlcnIpCisJCXN0djY4MC0+dXNlciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN0dl9jbG9zZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykKKwkJc3R2NjgwLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7CisJaWYgKHN0djY4MC0+c3RyZWFtaW5nKQorCQlzdHY2ODBfc3RvcF9zdHJlYW0gKHN0djY4MCk7CisKKwlpZiAoKGkgPSBzdHZfc3RvcF92aWRlbyAoc3R2NjgwKSkgPCAwKQorCQlQREVCVUcgKDEsICJTVFYoZSk6IHN0b3BfdmlkZW8gZmFpbGVkIGluIHN0dl9jbG9zZSIpOworCisJcnZmcmVlIChzdHY2ODAtPmZidWYsIHN0djY4MC0+bWF4ZnJhbWVzaXplICogU1RWNjgwX05VTUZSQU1FUyk7CisJc3R2NjgwLT51c2VyID0gMDsKKworCWlmIChzdHY2ODAtPnJlbW92ZWQpIHsKKwkJa2ZyZWUgKHN0djY4MCk7CisJCXN0djY4MCA9IE5VTEw7CisJCVBERUJVRyAoMCwgIlNUVihpKTogZGV2aWNlIHVucmVnaXN0ZXJlZCIpOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djY4MF9kb19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCisJaWYgKCFzdHY2ODAtPnVkZXYpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ0dDQVA6eworCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7CisKKwkJCXN0cmNweSAoYi0+bmFtZSwgc3R2NjgwLT5jYW1lcmFfbmFtZSk7CisJCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJCWItPmNoYW5uZWxzID0gMTsKKwkJCWItPmF1ZGlvcyA9IDA7CisJCQliLT5tYXh3aWR0aCA9IHN0djY4MC0+bWF4d2lkdGg7CisJCQliLT5tYXhoZWlnaHQgPSBzdHY2ODAtPm1heGhlaWdodDsKKwkJCWItPm1pbndpZHRoID0gc3R2NjgwLT5tYXh3aWR0aCAvIDI7CisJCQliLT5taW5oZWlnaHQgPSBzdHY2ODAtPm1heGhlaWdodCAvIDI7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DR0NIQU46eworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5jaGFubmVsICE9IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2LT5mbGFncyA9IDA7CisJCQl2LT50dW5lcnMgPSAwOworCQkJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQkJc3RyY3B5ICh2LT5uYW1lLCAiU1RWIENhbWVyYSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NDSEFOOnsKKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NHUElDVDp7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKworCQkJc3R2NjgwX2dldF9waWN0IChzdHY2ODAsIHApOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NQSUNUOnsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCQlpZiAoc3R2NjgwX3NldF9waWN0IChzdHY2ODAsIHApKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NXSU46eworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJCWlmICh2dy0+ZmxhZ3MpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodnctPmNsaXBjb3VudCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh2dy0+d2lkdGggIT0gc3R2NjgwLT52d2lkdGgpIHsKKwkJCQlpZiAoc3R2NjgwX3NldF9zaXplIChzdHY2ODAsIHZ3LT53aWR0aCwgdnctPmhlaWdodCkpIHsKKwkJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBmYWlsZWQgKGZyb20gdXNlcikgc2V0IHNpemUgaW4gVklESU9DU1dJTiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DR1dJTjp7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQkJdnctPnggPSAwOwkvKiBGSVhNRSAqLworCQkJdnctPnkgPSAwOworCQkJdnctPmNocm9tYWtleSA9IDA7CisJCQl2dy0+ZmxhZ3MgPSAwOworCQkJdnctPmNsaXBjb3VudCA9IDA7CisJCQl2dy0+d2lkdGggPSBzdHY2ODAtPnZ3aWR0aDsKKwkJCXZ3LT5oZWlnaHQgPSBzdHY2ODAtPnZoZWlnaHQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DR01CVUY6eworCQkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOworCQkJaW50IGk7CisKKwkJCW1lbXNldCAodm0sIDAsIHNpemVvZiAoKnZtKSk7CisJCQl2bS0+c2l6ZSA9IFNUVjY4MF9OVU1GUkFNRVMgKiBzdHY2ODAtPm1heGZyYW1lc2l6ZTsKKwkJCXZtLT5mcmFtZXMgPSBTVFY2ODBfTlVNRlJBTUVTOworCQkJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykKKwkJCQl2bS0+b2Zmc2V0c1tpXSA9IHN0djY4MC0+bWF4ZnJhbWVzaXplICogaTsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NNQ0FQVFVSRTp7CisJCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0gPSBhcmc7CisKKwkJCWlmICh2bS0+Zm9ybWF0ICE9IFNUVl9WSURFT19QQUxFVFRFKSB7CisJCQkJUERFQlVHICgyLCAiU1RWKGkpOiBWSURJT0NNQ0FQVFVSRSB2bS5mb3JtYXQgKCVpKSAhPSBWSURFT19QQUxFVFRFICglaSkiLAorCQkJCQl2bS0+Zm9ybWF0LCBTVFZfVklERU9fUEFMRVRURSk7CisJCQkJaWYgKCh2bS0+Zm9ybWF0ID09IDMpICYmIChzd2FwUkdCX29uID09IDApKSAgeworCQkJCQlQREVCVUcgKDIsICJTVFYoaSk6IFZJRElPQ01DQVBUVVJFIHN3YXBSR0IgaXMgKGF1dG8pIE9OIik7CisJCQkJCS8qIHRoaXMgbWF5IGZpeCB0aG9zZSBhcHBzIChlLmcuLCB4YXd0dikgdGhhdCB3YW50IEJHUiAqLworCQkJCQlzd2FwUkdCID0gMTsKKwkJCQl9CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAodm0tPmZyYW1lID49IFNUVjY4MF9OVU1GUkFNRVMpIHsKKwkJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ01DQVBUVVJFIHZtLmZyYW1lID4gTlVNRlJBTUVTIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoKHN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpCisJCQkgICAgfHwgKHN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpKSB7CisJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBWSURJT0NNQ0FQVFVSRSBncmFic3RhdGUgKCVpKSBlcnJvciIsCisJCQkJCXN0djY4MC0+ZnJhbWVbdm0tPmZyYW1lXS5ncmFic3RhdGUpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQkvKiBJcyB0aGlzIGFjY29yZGluZyB0byB0aGUgdjRsIHNwZWM/Pz8gKi8KKwkJCWlmIChzdHY2ODAtPnZ3aWR0aCAhPSB2bS0+d2lkdGgpIHsKKwkJCQlpZiAoc3R2NjgwX3NldF9zaXplIChzdHY2ODAsIHZtLT53aWR0aCwgdm0tPmhlaWdodCkpIHsKKwkJCQkJUERFQlVHICgyLCAiU1RWKGUpOiBWSURJT0NNQ0FQVFVSRSBzZXRfc2l6ZSBmYWlsZWQiKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJfQorCQkJc3R2NjgwLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSA9IEZSQU1FX1JFQURZOworCisJCQlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQorCQkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7CisKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NTWU5DOnsKKwkJCWludCAqZnJhbWUgPSBhcmc7CisJCQlpbnQgcmV0ID0gMDsKKworCQkJaWYgKCpmcmFtZSA8IDAgfHwgKmZyYW1lID49IFNUVjY4MF9OVU1GUkFNRVMpIHsKKwkJCQlQREVCVUcgKDIsICJTVFYoZSk6IEJhZCBmcmFtZSAjIGluIFZJRElPQ1NZTkMiKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXJldCA9IHN0djY4MF9uZXdmcmFtZSAoc3R2NjgwLCAqZnJhbWUpOworCQkJc3R2NjgwLT5mcmFtZVsqZnJhbWVdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwkJCXJldHVybiByZXQ7CisJCX0KKwljYXNlIFZJRElPQ0dGQlVGOnsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCQltZW1zZXQgKHZiLCAwLCBzaXplb2YgKCp2YikpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ0tFWToKKwkJcmV0dXJuIDA7CisJY2FzZSBWSURJT0NDQVBUVVJFOgorCQl7CisJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ0NBUFRVUkUgZmFpbGVkIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCWNhc2UgVklESU9DU0ZCVUY6CisJY2FzZSBWSURJT0NHVFVORVI6CisJY2FzZSBWSURJT0NTVFVORVI6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0JCQkvKiBlbmQgc3dpdGNoICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2ODBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBzdHY2ODBfZG9faW9jdGwpOworfQorCitzdGF0aWMgaW50IHN0djY4MF9tbWFwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCisJZG93biAoJnN0djY4MC0+bG9jayk7CisKKwlpZiAoc3R2NjgwLT51ZGV2ID09IE5VTEwpIHsKKwkJdXAgKCZzdHY2ODAtPmxvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHNpemUgPiAoKChTVFY2ODBfTlVNRlJBTUVTICogc3R2NjgwLT5tYXhmcmFtZXNpemUpICsgUEFHRV9TSVpFIC0gMSkKKwkJICAgICYgfihQQUdFX1NJWkUgLSAxKSkpIHsKKwkJdXAgKCZzdHY2ODAtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcG9zID0gKHVuc2lnbmVkIGxvbmcpIHN0djY4MC0+ZmJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgeworCQkJdXAgKCZzdHY2ODAtPmxvY2spOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQllbHNlCisJCQlzaXplID0gMDsKKwl9CisJdXAgKCZzdHY2ODAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0djY4MF9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGludCByZWFsY291bnQgPSBjb3VudDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGludCBpOworCisJaWYgKFNUVjY4MF9OVU1GUkFNRVMgIT0gMikgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IFNUVjY4MF9OVU1GUkFNRVMgbmVlZHMgdG8gYmUgMiEiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoc3R2NjgwLT51ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCWlmIChyZWFsY291bnQgPiAoc3R2NjgwLT52d2lkdGggKiBzdHY2ODAtPnZoZWlnaHQgKiAzKSkKKwkJcmVhbGNvdW50ID0gc3R2NjgwLT52d2lkdGggKiBzdHY2ODAtPnZoZWlnaHQgKiAzOworCisJLyogU2hvdWxkbid0IGhhcHBlbjogKi8KKwlpZiAoc3R2NjgwLT5mcmFtZVswXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpIHsKKwkJUERFQlVHICgyLCAiU1RWKGUpOiBGUkFNRV9HUkFCQklORyBpbiBzdHY2ODBfcmVhZCIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlzdHY2ODAtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9IEZSQU1FX1JFQURZOworCXN0djY4MC0+ZnJhbWVbMV0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCXN0djY4MC0+Y3VyZnJhbWUgPSAwOworCisJaWYgKCFzdHY2ODAtPnN0cmVhbWluZykKKwkJc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3R2NjgwKTsKKworCWlmICghc3R2NjgwLT5zdHJlYW1pbmcpIHsKKwkJcmV0ID0gc3R2NjgwX25ld2ZyYW1lIChzdHY2ODAsIDApOwkvKiByZXQgc2hvdWxkID0gMCAqLworCX0KKworCXJldCA9IHN0djY4MF9uZXdmcmFtZSAoc3R2NjgwLCAwKTsKKworCWlmICghcmV0KSB7CisJCWlmICgoaSA9IGNvcHlfdG9fdXNlciAoYnVmLCBzdHY2ODAtPmZyYW1lWzBdLmRhdGEsIHJlYWxjb3VudCkpICE9IDApIHsKKwkJCVBERUJVRyAoMiwgIlNUVihlKTogY29weV90b191c2VyIGZyYW1lIDAgZmFpbGVkLCByZXQgY291bnQgPSAlbGkiLCBpKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlIHsKKwkJcmVhbGNvdW50ID0gcmV0OworCX0KKwlzdHY2ODAtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwlyZXR1cm4gcmVhbGNvdW50OworfQkJCQkvKiBzdHY2ODBfcmVhZCAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdHY2ODBfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlzdHZfb3BlbiwKKwkucmVsZWFzZSA9ICAgICAJc3R2X2Nsb3NlLAorCS5yZWFkID0JCXN0djY4MF9yZWFkLAorCS5tbWFwID0JCXN0djY4MF9tbWFwLAorCS5pb2N0bCA9ICAgICAgICBzdHY2ODBfaW9jdGwsCisJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKK307CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzdHY2ODBfdGVtcGxhdGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIlNUVjA2ODAgVVNCIGNhbWVyYSIsCisJLnR5cGUgPQkJVklEX1RZUEVfQ0FQVFVSRSwKKwkuaGFyZHdhcmUgPQlWSURfSEFSRFdBUkVfU0U0MDEsCisJLmZvcHMgPSAgICAgICAgICZzdHY2ODBfZm9wcywKKwkucmVsZWFzZSA9CXZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5taW5vciA9IAktMSwKK307CisKK3N0YXRpYyBpbnQgc3R2NjgwX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gTlVMTDsKKwljaGFyICpjYW1lcmFfbmFtZSA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25zICE9IDEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW50ZXJmYWNlID0gJmludGYtPmFsdHNldHRpbmdbMF07CisJLyogSXMgaXQgYSBTVFY2ODA/ICovCisJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9QRU5DQU1fVkVORE9SX0lEKSAmJgorCSAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gVVNCX1BFTkNBTV9QUk9EVUNUX0lEKSkgeworCQljYW1lcmFfbmFtZSA9ICJTVFYwNjgwIjsKKwkJUERFQlVHICgwLCAiU1RWKGkpOiBTVFYwNjgwIGNhbWVyYSBmb3VuZC4iKTsKKwl9IGVsc2UgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IFZlbmRvci9Qcm9kdWN0IElEIGRvIG5vdCBtYXRjaCBTVFYwNjgwIHZhbHVlcy4iKTsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBDaGVjayB0aGF0IHRoZSBTVFYwNjgwIGNhbWVyYSBpcyBjb25uZWN0ZWQgdG8gdGhlIGNvbXB1dGVyLiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKwkvKiBXZSBmb3VuZCBvbmUgKi8KKwlpZiAoKHN0djY4MCA9IGttYWxsb2MgKHNpemVvZiAoKnN0djY4MCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogY291bGRuJ3Qga21hbGxvYyBzdHY2ODAgc3RydWN0LiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCW1lbXNldCAoc3R2NjgwLCAwLCBzaXplb2YgKCpzdHY2ODApKTsKKworCXN0djY4MC0+dWRldiA9IGRldjsKKwlzdHY2ODAtPmNhbWVyYV9uYW1lID0gY2FtZXJhX25hbWU7CisKKwlzdHY2ODAtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXN0djY4MC0+dmRldikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwltZW1jcHkoc3R2NjgwLT52ZGV2LCAmc3R2NjgwX3RlbXBsYXRlLCBzaXplb2Yoc3R2NjgwX3RlbXBsYXRlKSk7CisJc3R2NjgwLT52ZGV2LT5kZXYgPSAmaW50Zi0+ZGV2OworCXZpZGVvX3NldF9kcnZkYXRhKHN0djY4MC0+dmRldiwgc3R2NjgwKTsKKworCW1lbWNweSAoc3R2NjgwLT52ZGV2LT5uYW1lLCBzdHY2ODAtPmNhbWVyYV9uYW1lLCBzdHJsZW4gKHN0djY4MC0+Y2FtZXJhX25hbWUpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmc3R2NjgwLT53cSk7CisJaW5pdF9NVVRFWCAoJnN0djY4MC0+bG9jayk7CisJd21iICgpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSAoc3R2NjgwLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIik7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyb3JfdmRldjsKKwl9CisJUERFQlVHICgwLCAiU1RWKGkpOiByZWdpc3RlcmVkIG5ldyB2aWRlbyBkZXZpY2U6IHZpZGVvJWQiLCBzdHY2ODAtPnZkZXYtPm1pbm9yKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHN0djY4MCk7CisJc3R2NjgwX2NyZWF0ZV9zeXNmc19maWxlcyhzdHY2ODAtPnZkZXYpOworCXJldHVybiAwOworCitlcnJvcl92ZGV2OgorCXZpZGVvX2RldmljZV9yZWxlYXNlKHN0djY4MC0+dmRldik7CitlcnJvcjoKKwlrZnJlZShzdHY2ODApOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc3R2NjgwX3JlbW92ZV9kaXNjb25uZWN0ZWQgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCit7CisJaW50IGk7CisKKwlzdHY2ODAtPnVkZXYgPSBOVUxMOworCXN0djY4MC0+ZnJhbWVbMF0uZ3JhYnN0YXRlID0gRlJBTUVfRVJST1I7CisJc3R2NjgwLT5mcmFtZVsxXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKwlzdHY2ODAtPnN0cmVhbWluZyA9IDA7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZzdHY2ODAtPndxKTsKKworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0JVRjsgaSsrKQorCQlpZiAoc3R2NjgwLT51cmJbaV0pIHsKKwkJCXVzYl9raWxsX3VyYiAoc3R2NjgwLT51cmJbaV0pOworCQkJdXNiX2ZyZWVfdXJiIChzdHY2ODAtPnVyYltpXSk7CisJCQlzdHY2ODAtPnVyYltpXSA9IE5VTEw7CisJCQlrZnJlZSAoc3R2NjgwLT5zYnVmW2ldLmRhdGEpOworCQl9CisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQ1JBVENIOyBpKyspCisJCWtmcmVlIChzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSk7CisJUERFQlVHICgwLCAiU1RWKGkpOiAlcyBkaXNjb25uZWN0ZWQiLCBzdHY2ODAtPmNhbWVyYV9uYW1lKTsKKworCS8qIEZyZWUgdGhlIG1lbW9yeSAqLworCWtmcmVlIChzdHY2ODApOworfQorCitzdGF0aWMgdm9pZCBzdHY2ODBfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwlpZiAoc3R2NjgwKSB7CisJCS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHRyeWluZyB0byBvcGVuIHVwIHRoZSBkZXZpY2UgKi8KKwkJaWYgKHN0djY4MC0+dmRldikgeworCQkJc3R2NjgwX3JlbW92ZV9zeXNmc19maWxlcyhzdHY2ODAtPnZkZXYpOworCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3R2NjgwLT52ZGV2KTsKKwkJCXN0djY4MC0+dmRldiA9IE5VTEw7CisJCX0KKwkJaWYgKCFzdHY2ODAtPnVzZXIpIHsKKwkJCXVzYl9zdHY2ODBfcmVtb3ZlX2Rpc2Nvbm5lY3RlZCAoc3R2NjgwKTsKKwkJfSBlbHNlIHsKKwkJCXN0djY4MC0+cmVtb3ZlZCA9IDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHY2ODBfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJzdHY2ODAiLAorCS5wcm9iZSA9CXN0djY4MF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXN0djY4MF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWRldmljZV90YWJsZQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgTW9kdWxlIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zdHY2ODBfaW5pdCAodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyICgmc3R2NjgwX2RyaXZlcikgPCAwKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogQ291bGQgbm90IHNldHVwIFNUVjA2ODAgZHJpdmVyIik7CisJCXJldHVybiAtMTsKKwl9CisJUERFQlVHICgwLCAiU1RWKGkpOiB1c2IgY2FtZXJhIGRyaXZlciB2ZXJzaW9uICVzIHJlZ2lzdGVyaW5nIiwgRFJJVkVSX1ZFUlNJT04pOworCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0djY4MF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmc3R2NjgwX2RyaXZlcik7CisJUERFQlVHICgwLCAiU1RWKGkpOiBkcml2ZXIgZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0ICh1c2Jfc3R2NjgwX2luaXQpOworbW9kdWxlX2V4aXQgKHVzYl9zdHY2ODBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMGUzMTRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZpbGVuYW1lOiBzdHY2ODAuaAorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgU1RWMDY4MCBiYXNlZCB1c2IgdmlkZW8gY2FtZXJhcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNpemUgb2YgdXNiIHRyYW5zZmVycyAqLworI2RlZmluZSBTVFY2ODBfUEFDS0VUU0laRQk0MDk2CisKKy8qIG51bWJlciBvZiBxdWV1ZWQgYnVsayB0cmFuc2ZlcnMgdG8gdXNlLCBtYXkgaGF2ZSBwcm9ibGVtcyBpZiA+IDEgKi8KKyNkZWZpbmUgU1RWNjgwX05VTVNCVUYJCTEKKworLyogbnVtYmVyIG9mIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHY0bCBwYXJ0ICovCisjZGVmaW5lIFNUVjY4MF9OVU1GUkFNRVMJMgorCisvKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHBhc3NpbmcgZGF0YSB0byB0aGUgZGVjb2RlcnM6IDIgb3IgNCBhcmUgZ29vZCAqLworI2RlZmluZSBTVFY2ODBfTlVNU0NSQVRDSAkyCisKKy8qIG51bWJlciBvZiBudWwgc2l6ZWQgcGFja2V0cyB0byByZWNlaXZlIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KKyNkZWZpbmUgU1RWNjgwX01BWF9OVUxMUEFDS0VUUwkyMDAKKworLyogbnVtYmVyIG9mIGRlY29kaW5nIGVycm9ycyBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCisjZGVmaW5lIFNUVjY4MF9NQVhfRVJST1JTCTEwMAorCisjZGVmaW5lIFVTQl9QRU5DQU1fVkVORE9SX0lECTB4MDU1MworI2RlZmluZSBVU0JfUEVOQ0FNX1BST0RVQ1RfSUQJMHgwMjAyCisjZGVmaW5lIFBFTkNBTV9USU1FT1VUICAgICAgICAgIDEwMDAKKy8qIGZtdCA0ICovCisjZGVmaW5lIFNUVl9WSURFT19QQUxFVFRFICAgICAgIFZJREVPX1BBTEVUVEVfUkdCMjQKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFIChVU0JfUEVOQ0FNX1ZFTkRPUl9JRCwgVVNCX1BFTkNBTV9QUk9EVUNUX0lEKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRldmljZV90YWJsZSk7CisKK3N0cnVjdCBzdHY2ODBfc2J1ZiB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKK2VudW0geworCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCitlbnVtIHsKKwlCVUZGRVJfVU5VU0VELAorCUJVRkZFUl9SRUFEWSwKKwlCVUZGRVJfQlVTWSwKKwlCVUZGRVJfRE9ORSwKK307CisKKy8qIHJhdyBjYW1lcmEgZGF0YSA8LSBzYnVmICh1cmIgdHJhbnNmZXIgYnVmKSAqLworc3RydWN0IHN0djY4MF9zY3JhdGNoIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXZvbGF0aWxlIGludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OworCWludCBsZW5ndGg7Cit9OworCisvKiBwcm9jZXNzZWQgZGF0YSBmb3IgZGlzcGxheSBlbmRzIHVwIGhlcmUsIGFmdGVyIGJheWVyICovCitzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkvKiBGcmFtZSBidWZmZXIgKi8KKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCXVuc2lnbmVkIGNoYXIgKmN1cmxpbmU7CisJaW50IGN1cmxpbmVwaXg7CisJaW50IGN1cnBpeDsKK307CisKKy8qIHRoaXMgaXMgYWxtb3N0IHRoZSB2aWRlbyBzdHJ1Y3R1cmUgdXZkX3QsIHdpdGggZXh0cmEgcGFyYW1ldGVycyBmb3Igc3R2ICovCitzdHJ1Y3QgdXNiX3N0diB7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdW5zaWduZWQgY2hhciBidWxrX2luX2VuZHBvaW50QWRkcjsJLyogX191OCAgdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwljaGFyICpjYW1lcmFfbmFtZTsKKworCXVuc2lnbmVkIGludCBWaWRlb01vZGU7CS8qIDB4MDEwMCA9IFZHQSwgMHgwMDAwID0gQ0lGLCAweDAzMDAgPSBRVkdBICovCisJaW50IFN1cHBvcnRlZE1vZGVzOworCWludCBDSUY7CisJaW50IFZHQTsKKwlpbnQgUVZHQTsKKwlpbnQgY3dpZHRoOwkJLyogY2FtZXJhIHdpZHRoICovCisJaW50IGNoZWlnaHQ7CQkvKiBjYW1lcmEgaGVpZ2h0ICovCisJaW50IG1heHdpZHRoOwkJLyogbWF4IHZpZGVvIHdpZHRoICovCisJaW50IG1heGhlaWdodDsJCS8qIG1heCB2aWRlbyBoZWlnaHQgKi8KKwlpbnQgdndpZHRoOwkJLyogY3VycmVudCB3aWR0aCBmb3IgdmlkZW8gd2luZG93ICovCisJaW50IHZoZWlnaHQ7CQkvKiBjdXJyZW50IGhlaWdodCBmb3IgdmlkZW8gd2luZG93ICovCisJdW5zaWduZWQgbG9uZyBpbnQgcmF3YnVmc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGludCBtYXhmcmFtZXNpemU7CS8qIHJhd2J1ZnNpemUgKiAzIGZvciBSR0IgKi8KKworCWludCBvcmlnR2FpbjsKKwlpbnQgb3JpZ01vZGU7CQkvKiBvcmlnaW5hbCBjYW1lcmEgbW9kZSAqLworCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkvKiB0byBsb2NrIHRoZSBzdHJ1Y3R1cmUgKi8KKwlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKwlpbnQgcmVtb3ZlZDsJCS8qIGRldmljZSBkaXNjb25uZWN0ZWQgKi8KKwlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyB2aWRlbz8gKi8KKwljaGFyICpmYnVmOwkJLyogVmlkZW9kZXYgYnVmZmVyIGFyZWEgKi8KKwlzdHJ1Y3QgdXJiICp1cmJbU1RWNjgwX05VTVNCVUZdOwkvKiAjIG9mIHF1ZXVlZCBidWxrIHRyYW5zZmVycyAqLworCWludCBjdXJmcmFtZTsJCS8qIEN1cnJlbnQgcmVjZWl2aW5nIGZyYW1lICovCisJc3RydWN0IHN0djY4MF9mcmFtZSBmcmFtZVtTVFY2ODBfTlVNRlJBTUVTXTsJLyogIyBmcmFtZXMgc3VwcG9ydGVkIGJ5IHY0bCBwYXJ0ICovCisJaW50IHJlYWRjb3VudDsKKwlpbnQgZnJhbWVjb3VudDsKKwlpbnQgZXJyb3I7CisJaW50IGRyb3BwZWQ7CisJaW50IHNjcmF0Y2hfbmV4dDsKKwlpbnQgc2NyYXRjaF91c2U7CisJaW50IHNjcmF0Y2hfb3ZlcmZsb3c7CisJc3RydWN0IHN0djY4MF9zY3JhdGNoIHNjcmF0Y2hbU1RWNjgwX05VTVNDUkFUQ0hdOwkvKiBmb3IgZGVjb2RlcnMgKi8KKwlzdHJ1Y3Qgc3R2NjgwX3NidWYgc2J1ZltTVFY2ODBfTlVNU0JVRl07CisKKwl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBpbnQgY2hnYnJpZ2h0OworCXVuc2lnbmVkIGludCB3aGl0ZW5lc3M7CisJdW5zaWduZWQgaW50IGNvbG91cjsKKwl1bnNpZ25lZCBpbnQgY29udHJhc3Q7CisJdW5zaWduZWQgaW50IGh1ZTsKKwl1bnNpZ25lZCBpbnQgcGFsZXR0ZTsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CS8qIHJnYjI0IGluIGJpdHMgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdxOwkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLworCisJaW50IG51bGxwYWNrZXRzOworfTsKKworCitzdGF0aWMgdW5zaWduZWQgY2hhciByZWRbMjU2XSA9IHsgCisJMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAKKwkxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDMwLCAzNSwgMzgsIDQyLCAKKwk0NCwgNDcsIDUwLCA1MywgNTQsIDU3LCA1OSwgNjEsIDYzLCA2NSwgNjcsIDY5LCAKKwk3MSwgNzEsIDczLCA3NSwgNzcsIDc4LCA4MCwgODEsIDgyLCA4NCwgODUsIDg3LCAKKwk4OCwgODksIDkwLCA5MSwgOTMsIDk0LCA5NSwgOTcsIDk4LCA5OCwgOTksIDEwMSwgCisJMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgCisJMTE0LCAxMTUsIDExNiwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgCisJMTI1LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgCisJMTM0LCAxMzUsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MCwgMTQxLCAxNDIsIDE0MywgCisJMTQzLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTAsIDE1MSwgCisJMTUyLCAxNTIsIDE1MiwgMTUzLCAxNTQsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU3LCAxNTgsIDE1OSwgCisJMTU5LCAxNjAsIDE2MSwgMTYxLCAxNjEsIDE2MiwgMTYzLCAxNjMsIDE2NCwgMTY1LCAxNjUsIDE2NiwgCisJMTY3LCAxNjcsIDE2OCwgMTY4LCAxNjksIDE3MCwgMTcwLCAxNzAsIDE3MSwgMTcxLCAxNzIsIDE3MywgCisJMTczLCAxNzQsIDE3NCwgMTc1LCAxNzYsIDE3NiwgMTc3LCAxNzgsIDE3OCwgMTc5LCAxNzksIDE3OSwgCisJMTgwLCAxODAsIDE4MSwgMTgxLCAxODIsIDE4MywgMTgzLCAxODQsIDE4NCwgMTg1LCAxODUsIDE4NiwgCisJMTg3LCAxODcsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg5LCAxOTAsIDE5MCwgMTkxLCAxOTEsIDE5MiwgCisJMTkyLCAxOTMsIDE5MywgMTk0LCAxOTUsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LCAxOTcsIDE5NywgCisJMTk4LCAxOTgsIDE5OSwgMTk5LCAyMDAsIDIwMSwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDMsIDIwNCwgCisJMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDYsIDIwNiwgMjA2LCAyMDcsIDIwNywgMjA4LCAyMDgsIDIwOSwgCisJMjA5LCAyMTAsIDIxMCwgMjExLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAyMTQsIDIxNSwgCisJMjE1LCAyMTUsIDIxNSwgMjE2LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjE4LCAyMTksIDIxOSwgCisJMjIwLCAyMjAsIDIyMSwgMjIxIAorfTsgCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdyZWVuWzI1Nl0gPSB7CisJMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKwkyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjgsIDM0LCAzOSwgNDMsIDQ3LCAKKwk1MCwgNTMsIDU2LCA1OSwgNjEsIDY0LCA2NiwgNjgsIDcxLCA3MywgNzUsIDc3LCAKKwk3OSwgODAsIDgyLCA4NCwgODYsIDg3LCA4OSwgOTEsIDkyLCA5NCwgOTUsIDk3LCAKKwk5OCwgMTAwLCAxMDEsIDEwMiwgMTA0LCAxMDUsIDEwNiwgMTA4LCAxMDksIDExMCwgMTExLCAxMTMsIAorCTExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIAorCTEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIAorCTEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIAorCTE1MCwgMTUxLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTYsIDE1NywgMTU4LCAxNTksIAorCTE2MCwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY3LCAxNjgsIAorCTE2OSwgMTcwLCAxNzAsIDE3MSwgMTcyLCAxNzIsIDE3MywgMTc0LCAxNzUsIDE3NSwgMTc2LCAxNzcsIAorCTE3NywgMTc4LCAxNzksIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgyLCAxODMsIDE4NCwgMTg0LCAxODUsIAorCTE4NiwgMTg2LCAxODcsIDE4NywgMTg4LCAxODksIDE4OSwgMTkwLCAxOTEsIDE5MSwgMTkyLCAxOTMsIAorCTE5MywgMTk0LCAxOTQsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk4LCAxOTgsIDE5OSwgMTk5LCAyMDAsIAorCTIwMSwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDQsIDIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDcsIAorCTIwOCwgMjA4LCAyMDksIDIwOSwgMjEwLCAyMTAsIDIxMSwgMjEyLCAyMTIsIDIxMywgMjEzLCAyMTQsIAorCTIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMTksIDIxOSwgMjIwLCAyMjAsIAorCTIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjcsIAorCTIyNywgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMzAsIDIzMCwgMjMxLCAyMzEsIDIzMiwgMjMyLCAyMzMsIAorCTIzMywgMjM0LCAyMzQsIDIzNSwgMjM1LCAyMzYsIDIzNiwgMjM3LCAyMzcsIDIzOCwgMjM4LCAyMzksIAorCTIzOSwgMjQwLCAyNDAsIDI0MSwgMjQxLCAyNDIsIDI0MiwgMjQzLCAyNDMsIDI0MywgMjQ0LCAyNDQsIAorCTI0NSwgMjQ1LCAyNDYsIDI0NiAKK307IAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBibHVlWzI1Nl0gPSB7CisJMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAKKwkyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMzAsIDM3LCA0MiwgNDcsIDUxLCAKKwk1NSwgNTgsIDYxLCA2NCwgNjcsIDcwLCA3MiwgNzQsIDc4LCA4MCwgODIsIDg0LCAKKwk4NiwgODgsIDkwLCA5MiwgOTQsIDk1LCA5NywgMTAwLCAxMDEsIDEwMywgMTA0LCAxMDYsIAorCTEwNywgMTEwLCAxMTEsIDExMiwgMTE0LCAxMTUsIDExNiwgMTE4LCAxMTksIDEyMSwgMTIyLCAxMjQsIAorCTEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIAorCTEzOSwgMTQwLCAxNDEsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIAorCTE1MiwgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIAorCTE2NSwgMTY2LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzEsIDE3MiwgMTczLCAxNzQsIAorCTE3NiwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MCwgMTgxLCAxODIsIDE4MywgMTgzLCAxODQsIAorCTE4NSwgMTg3LCAxODcsIDE4OCwgMTg5LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MiwgMTkzLCAxOTQsIAorCTE5NCwgMTk1LCAxOTYsIDE5NiwgMTk4LCAxOTksIDIwMCwgMjAwLCAyMDEsIDIwMiwgMjAyLCAyMDMsIAorCTIwNCwgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDcsIDIwNywgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsIAorCTIxMiwgMjEzLCAyMTMsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMjAsIAorCTIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjcsIAorCTIyOCwgMjI4LCAyMjksIDIyOSwgMjMxLCAyMzEsIDIzMiwgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzUsIAorCTIzNSwgMjM2LCAyMzYsIDIzNywgMjM4LCAyMzgsIDIzOSwgMjM5LCAyNDAsIDI0MCwgMjQyLCAyNDIsIAorCTI0MywgMjQzLCAyNDQsIDI0NCwgMjQ1LCAyNDYsIDI0NiwgMjQ3LCAyNDcsIDI0OCwgMjQ4LCAyNDksIAorCTI0OSwgMjUwLCAyNTAsIDI1MSwgMjUxLCAyNTMsIDI1MywgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsIAorCTI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorCTI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorCTI1NSwgMjU1LCAyNTUsIDI1NSAKK307IApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdWx0cmFjYW0uYyBiL2RyaXZlcnMvdXNiL21lZGlhL3VsdHJhY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZjc1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3VsdHJhY2FtLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBVU0IgTkIgQ2FtZXJhIGRyaXZlcgorICoKKyAqIEhJU1RPUlk6CisgKiAyNS1EZWMtMjAwMiBEbWl0cmkgICAgICBSZW1vdmVkIGxpZ2h0aW5nLCBzaGFycG5lc3MgcGFyYW1ldGVycywgbWV0aG9kcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJ1c2J2aWRlby5oIgorCisjZGVmaW5lCVVMVFJBQ0FNX1ZFTkRPUl9JRAkweDA0NjEKKyNkZWZpbmUJVUxUUkFDQU1fUFJPRFVDVF9JRAkweDA4MTMKKworI2RlZmluZSBNQVhfQ0FNRVJBUwkJNAkvKiBIb3cgbWFueSBkZXZpY2VzIHdlIGFsbG93IHRvIGNvbm5lY3QgKi8KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGxpdmVzIGluIHV2ZF90LT51c2VyIGZpZWxkLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGluaXRpYWxpemVkOwkvKiBIYWQgd2UgYWxyZWFkeSBzZW50IGluaXQgc2VxdWVuY2U/ICovCisJaW50IGNhbWVyYV9tb2RlbDsJLyogV2hhdCB0eXBlIG9mIElCTSBjYW1lcmEgd2UgZ290PyAqLworICAgICAgICBpbnQgaGFzX2hkcjsKK30gdWx0cmFjYW1fdDsKKyNkZWZpbmUJVUxUUkFDQU1fVCh1dmQpCSgodWx0cmFjYW1fdCAqKSgodXZkKS0+dXNlcl9kYXRhKSkKKworc3RhdGljIHN0cnVjdCB1c2J2aWRlbyAqY2FtcyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworCitzdGF0aWMgaW50IGZsYWdzID0gMDsgLyogRkxBR1NfRElTUExBWV9ISU5UUyB8IEZMQUdTX09WRVJMQVlfU1RBVFM7ICovCisKK3N0YXRpYyBjb25zdCBpbnQgbWluX2NhbnZhc1dpZHRoICA9IDg7CitzdGF0aWMgY29uc3QgaW50IG1pbl9jYW52YXNIZWlnaHQgPSA0OworCisjZGVmaW5lIEZSQU1FUkFURV9NSU4JMAorI2RlZmluZSBGUkFNRVJBVEVfTUFYCTYKK3N0YXRpYyBpbnQgZnJhbWVyYXRlID0gLTE7CisKKy8qCisgKiBIZXJlIHdlIGRlZmluZSBzZXZlcmFsIGluaXRpYWxpemF0aW9uIHZhcmlhYmxlcy4gVGhleSBtYXkKKyAqIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZXQgY29sb3IsIGh1ZSwgYnJpZ2h0bmVzcyBhbmQKKyAqIGNvbnRyYXN0IHRvIGRlc2lyZWQgdmFsdWVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4KKyAqIGNhc2Ugb2Ygd2ViY2FtcyAod2hpY2ggaGF2ZSBubyBjb250cm9scyBhbmQgbm8gb24tc2NyZWVuCisgKiBvdXRwdXQpIGFuZCBhbHNvIHdoZW4gYSBjbGllbnQgVjRMIHNvZnR3YXJlIGlzIHVzZWQgdGhhdAorICogZG9lcyBub3QgaGF2ZSBzb21lIG9mIHRob3NlIGNvbnRyb2xzLiBJbiBhbnkgY2FzZSBpdCdzCisgKiBnb29kIHRvIGhhdmUgc3RhcnR1cCB2YWx1ZXMgYXMgb3B0aW9ucy4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIGFsbCBpbiBbMC4uMjU1XSByYW5nZS4gVGhpcyBzaW1wbGlmaWVzCisgKiBvcGVyYXRpb24uIE5vdGUgdGhhdCBhY3R1YWwgdmFsdWVzIG9mIFY0TCB2YXJpYWJsZXMgbWF5CisgKiBiZSBzY2FsZWQgdXAgKGFzIG11Y2ggYXMgPDwgOCkuIFVzZXIgY2FuIHNlZSB0aGF0IG9ubHkKKyAqIG9uIG92ZXJsYXkgb3V0cHV0LCBob3dldmVyLCBvciB0aHJvdWdoIGEgVjRMIGNsaWVudC4KKyAqLworc3RhdGljIGludCBpbml0X2JyaWdodG5lc3MgPSAxMjg7CitzdGF0aWMgaW50IGluaXRfY29udHJhc3QgPSAxOTI7CitzdGF0aWMgaW50IGluaXRfY29sb3IgPSAxMjg7CitzdGF0aWMgaW50IGluaXRfaHVlID0gMTI4Oworc3RhdGljIGludCBodWVfY29ycmVjdGlvbiA9IDEyODsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMC05IChkZWZhdWx0PTApIik7Cittb2R1bGVfcGFyYW0oZmxhZ3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZsYWdzLAorCQkiQml0ZmllbGQ6IDA9VklESU9DU1lOQywgIgorCQkiMT1CL1csICIKKwkJIjI9c2hvdyBoaW50cywgIgorCQkiMz1zaG93IHN0YXRzLCAiCisJCSI0PXRlc3QgcGF0dGVybiwgIgorCQkiNT1zZXBhcmF0ZSBmcmFtZXMsICIKKwkJIjY9Y2xlYW4gZnJhbWVzIik7Cittb2R1bGVfcGFyYW0oZnJhbWVyYXRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmcmFtZXJhdGUsICJGcmFtZXJhdGUgc2V0dGluZzogMD1zbG93ZXN0LCA2PWZhc3Rlc3QgKGRlZmF1bHQ9MikiKTsKKworbW9kdWxlX3BhcmFtKGluaXRfYnJpZ2h0bmVzcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9icmlnaHRuZXNzLCAiQnJpZ2h0bmVzcyBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9jb250cmFzdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9jb250cmFzdCwgIkNvbnRyYXN0IHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTE5MikiKTsKK21vZHVsZV9wYXJhbShpbml0X2NvbG9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2NvbG9yLCAiQ29sb3IgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGluaXRfaHVlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2h1ZSwgIkh1ZSBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaHVlX2NvcnJlY3Rpb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGh1ZV9jb3JyZWN0aW9uLCAiWVVWIGNvbG9yc3BhY2UgcmVndWxhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworCisvKgorICogdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhKCkKKyAqCisgKiBHZW5lcmljIHJvdXRpbmUgdG8gcGFyc2UgdGhlIHJpbmcgcXVldWUgZGF0YS4gSXQgZW1wbG95cyBlaXRoZXIKKyAqIHVsdHJhY2FtX2ZpbmRfaGVhZGVyKCkgb3IgdWx0cmFjYW1fcGFyc2VfbGluZXMoKSB0byBkbyBtb3N0CisgKiBvZiB3b3JrLgorICoKKyAqIDAyLU5vdi0yMDAwIEZpcnN0IChtb3N0bHkgZHVtbXkpIHZlcnNpb24uCisgKiAwNi1Ob3YtMjAwMCBSZXdyb3RlIHRvIGR1bXAgYWxsIGRhdGEgaW50byBmcmFtZS4KKyAqLworc3RhdGljIHZvaWQgdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgbjsKKworCWFzc2VydCh1dmQgIT0gTlVMTCk7CisJYXNzZXJ0KGZyYW1lICE9IE5VTEwpOworCisJLyogVHJ5IHRvIG1vdmUgZGF0YSBmcm9tIHF1ZXVlIGludG8gZnJhbWUgYnVmZmVyICovCisJbiA9IFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApOworCWlmIChuID4gMCkgeworCQlpbnQgbTsKKwkJLyogU2VlIGhvdyBtdWNoIHNwYXJlIHdlIGhhdmUgbGVmdCAqLworCQltID0gdXZkLT5tYXhfZnJhbWVfc2l6ZSAtIGZyYW1lLT5zZXFSZWFkX0xlbmd0aDsKKwkJaWYgKG4gPiBtKQorCQkJbiA9IG07CisJCS8qIE5vdyBtb3ZlIHRoYXQgbXVjaCBkYXRhIGludG8gZnJhbWUgYnVmZmVyICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKAorCQkJJnV2ZC0+ZHAsCisJCQlmcmFtZS0+ZGF0YSArIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCwKKwkJCW0pOworCQlmcmFtZS0+c2VxUmVhZF9MZW5ndGggKz0gbTsKKwl9CisJLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KKwlpZiAoZnJhbWUtPnNlcVJlYWRfTGVuZ3RoID49IHV2ZC0+bWF4X2ZyYW1lX3NpemUpIHsKKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmU7CisJCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKwkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKKwl9Cit9CisKKy8qCisgKiB1bHRyYWNhbV92ZWlvKCkKKyAqCisgKiBIaXN0b3J5OgorICogMS8yNy8wMCAgQWRkZWQgY2hlY2sgZm9yIGRldiA9PSBOVUxMOyB0aGlzIGhhcHBlbnMgaWYgY2FtZXJhIGlzIHVucGx1Z2dlZC4KKyAqLworc3RhdGljIGludCB1bHRyYWNhbV92ZWlvKAorCXN0cnVjdCB1dmQgKnV2ZCwKKwl1bnNpZ25lZCBjaGFyIHJlcSwKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZSwKKwl1bnNpZ25lZCBzaG9ydCBpbmRleCwKKwlpbnQgaXNfb3V0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJ1bHRyYWNhbV92ZWlvIjsKKwl1bnNpZ25lZCBjaGFyIGNwWzhdIC8qID0geyAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmIH0gKi87CisJaW50IGk7CisKKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm4gMDsKKworCWlmICghaXNfb3V0KSB7CisJCWkgPSB1c2JfY29udHJvbF9tc2coCisJCQl1dmQtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQljcCwKKwkJCXNpemVvZihjcCksCisJCQkxMDAwKTsKKyNpZiAxCisJCWluZm8oIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCSAgICAgICAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KSIsCisJCSAgICAgICBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKKwkJICAgICAgIHJlcSwgdmFsdWUsIGluZGV4KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWkgPSB1c2JfY29udHJvbF9tc2coCisJCQl1dmQtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQl2YWx1ZSwKKwkJCWluZGV4LAorCQkJTlVMTCwKKwkJCTAsCisJCQkxMDAwKTsKKwl9CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IEVSUk9SPSVkLiBDYW1lcmEgc3RvcHBlZDsgUmVjb25uZWN0IG9yIHJlbG9hZCBkcml2ZXIuIiwKKwkJICAgIHByb2MsIGkpOworCQl1dmQtPmxhc3RfZXJyb3IgPSBpOworCX0KKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIHVsdHJhY2FtX2NhbGN1bGF0ZV9mcHMoKQorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX2NhbGN1bGF0ZV9mcHMoc3RydWN0IHV2ZCAqdXZkKQoreworCXJldHVybiAzICsgZnJhbWVyYXRlKjQgKyBmcmFtZXJhdGUvMjsKK30KKworLyoKKyAqIHVsdHJhY2FtX2FkanVzdF9jb250cmFzdCgpCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX2FkanVzdF9jb250cmFzdChzdHJ1Y3QgdXZkICp1dmQpCit7Cit9CisKKy8qCisgKiB1bHRyYWNhbV9zZXRfYnJpZ2h0bmVzcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY2hhbmdlcyBicmlnaHRuZXNzIG9mIHRoZSBwaWN0dXJlLgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXZkICp1dmQpCit7Cit9CisKK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3NldF9odWUoc3RydWN0IHV2ZCAqdXZkKQoreworfQorCisvKgorICogdWx0cmFjYW1fYWRqdXN0X3BpY3R1cmUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGdldHMgY2FsbGVkIGZyb20gVjRMIGludGVyZmFjZSB0byB1cGRhdGUgcGljdHVyZSBzZXR0aW5ncy4KKyAqIEhlcmUgd2UgY2hhbmdlIGJyaWdodG5lc3MgYW5kIGNvbnRyYXN0LgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9hZGp1c3RfcGljdHVyZShzdHJ1Y3QgdXZkICp1dmQpCit7CisJdWx0cmFjYW1fYWRqdXN0X2NvbnRyYXN0KHV2ZCk7CisJdWx0cmFjYW1fc2V0X2JyaWdodG5lc3ModXZkKTsKKwl1bHRyYWNhbV9zZXRfaHVlKHV2ZCk7Cit9CisKKy8qCisgKiB1bHRyYWNhbV92aWRlb19zdG9wKCkKKyAqCisgKiBUaGlzIGNvZGUgdGVsbHMgY2FtZXJhIHRvIHN0b3Agc3RyZWFtaW5nLiBUaGUgaW50ZXJmYWNlIHJlbWFpbnMKKyAqIGNvbmZpZ3VyZWQgYW5kIGJhbmR3aWR0aCAtIGNsYWltZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3ZpZGVvX3N0b3Aoc3RydWN0IHV2ZCAqdXZkKQoreworfQorCisvKgorICogdWx0cmFjYW1fcmVpbml0X2lzbygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgY291cGxlIG9mIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEgYW5kIHRoZW4KKyAqIHJlc2V0cyB0aGUgdmlkZW8gcGlwZS4gVGhpcyBzZXF1ZW5jZSB3YXMgb2JzZXJ2ZWQgdG8gcmVpbml0IHRoZQorICogY2FtZXJhIG9yLCBhdCBsZWFzdCwgdG8gaW5pdGlhdGUgSVNPIGRhdGEgc3RyZWFtLgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9yZWluaXRfaXNvKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGRvX3N0b3ApCit7Cit9CisKK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3ZpZGVvX3N0YXJ0KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwl1bHRyYWNhbV9yZWluaXRfaXNvKHV2ZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdWx0cmFjYW1fcmVzZXRQaXBlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nKHN0cnVjdCB1dmQgKnV2ZCwgaW50IHNldHRpbmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gInVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmciOworCWludCBpOworCWkgPSB1c2Jfc2V0X2ludGVyZmFjZSh1dmQtPmRldiwgdXZkLT5pZmFjZSwgc2V0dGluZyk7CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlIGVycm9yIiwgcHJvYyk7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIG5lZ2F0aXZlIGNvZGUgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX3NldHVwX29uX29wZW4oc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBzZXR1cF9vayA9IDA7IC8qIFN1Y2Nlc3MgYnkgZGVmYXVsdCAqLworCS8qIFNlbmQgaW5pdCBzZXF1ZW5jZSBvbmx5IG9uY2UsIGl0J3MgbGFyZ2UhICovCisJaWYgKCFVTFRSQUNBTV9UKHV2ZCktPmluaXRpYWxpemVkKSB7CisJCXVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmcodXZkLCAweDA0KTsKKwkJdWx0cmFjYW1fYWx0ZXJuYXRlU2V0dGluZyh1dmQsIDB4MDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDA0LCAweDAwMGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDAxLCAweDAwMDUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHg4MDAwLCAweDAwMDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMGIwLCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDBjLCAweDAwMDMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDBiLCAweDAwMDQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDc5LCAweDAwMDcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDNiLCAweDAwMDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAyLCAweDAwMGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAxLCAweDAwMTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYmYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAxLCAweDAwYzAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDEwLCAweDAwY2IsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGE0LCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDEwLCAweDAwMDIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDY2LCAweDAwMDcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDBiLCAweDAwMDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM0LCAweDAwMDksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDJlLCAweDAwMGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGQ2LCAweDAwMGMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZjLCAweDAwMGQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGYxLCAweDAwMGUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGRhLCAweDAwMGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM2LCAweDAwMTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDBiLCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAxLCAweDAwMTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMTQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDg3LCAweDAwNTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDQwLCAweDAwNTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDU4LCAweDAwNTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDQwLCAweDAwNTQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwNDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDEwLCAweDAwNDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDIwLCAweDAwNDIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDMwLCAweDAwNDMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDQwLCAweDAwNDQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDUwLCAweDAwNDUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDYwLCAweDAwNDYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDcwLCAweDAwNDcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDgwLCAweDAwNDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDkwLCAweDAwNDksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGEwLCAweDAwNGEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGIwLCAweDAwNGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGMwLCAweDAwNGMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGQwLCAweDAwNGQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGUwLCAweDAwNGUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGYwLCAweDAwNGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZmLCAweDAwNTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwNTYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDgwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDgwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDA0LCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAyLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDIwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDQwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDE3LCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzcsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMGMwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHhjMDQwLCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMDgsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMDksIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGEsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGIsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGMsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGQsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGUsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGYsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMTAsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDBiLCAweDAwMDgsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM0LCAweDAwMDksIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMGEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDJlLCAweDAwMGIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGQ2LCAweDAwMGMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZjLCAweDAwMGQsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGYxLCAweDAwMGUsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGRhLCAweDAwMGYsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDM2LCAweDAwMTAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAwLCAweDAwMDEsIDApOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDY0LCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDU5LCAweDAwNTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDNmLCAweDAwNTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDk0LCAweDAwNTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGZmLCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMDAzLCAweDAwMTIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMSwgMHgwMGY3LCAweDAwMTMsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDA5LCAweDAwMTEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwMDAsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDIwLCAweDAwYzEsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDEwLCAweDAwYzIsIDEpOworCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMCwgMHgwMDAwLCAweDAwY2EsIDEpOworCQl1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nKHV2ZCwgMHgwNCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDkwMDAsIDB4MDAwNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwNDIsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDAsIDB4MDAwYiwgMCk7CisJCXVsdHJhY2FtX3Jlc2V0UGlwZSh1dmQpOworCQlVTFRSQUNBTV9UKHV2ZCktPmluaXRpYWxpemVkID0gKHNldHVwX29rICE9IDApOworCX0KKwlyZXR1cm4gc2V0dXBfb2s7Cit9CisKK3N0YXRpYyB2b2lkIHVsdHJhY2FtX2NvbmZpZ3VyZV92aWRlbyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWYgKHV2ZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2JyaWdodG5lc3MsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9jb250cmFzdCwgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2NvbG9yLCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfaHVlLCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGh1ZV9jb3JyZWN0aW9uLCAwLCAyNTUpOworCisJbWVtc2V0KCZ1dmQtPnZwaWMsIDAsIHNpemVvZih1dmQtPnZwaWMpKTsKKwltZW1zZXQoJnV2ZC0+dnBpY19vbGQsIDB4NTUsIHNpemVvZih1dmQtPnZwaWNfb2xkKSk7CisKKwl1dmQtPnZwaWMuY29sb3VyID0gaW5pdF9jb2xvciA8PCA4OworCXV2ZC0+dnBpYy5odWUgPSBpbml0X2h1ZSA8PCA4OworCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gaW5pdF9icmlnaHRuZXNzIDw8IDg7CisJdXZkLT52cGljLmNvbnRyYXN0ID0gaW5pdF9jb250cmFzdCA8PCA4OworCXV2ZC0+dnBpYy53aGl0ZW5lc3MgPSAxMDUgPDwgODsgLyogVGhpcyBvbmUgaXNuJ3QgdXNlZCAqLworCXV2ZC0+dnBpYy5kZXB0aCA9IDI0OworCXV2ZC0+dnBpYy5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKworCW1lbXNldCgmdXZkLT52Y2FwLCAwLCBzaXplb2YodXZkLT52Y2FwKSk7CisJc3RyY3B5KHV2ZC0+dmNhcC5uYW1lLCAiSUJNIFVsdHJhIENhbWVyYSIpOworCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOworCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOworCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKTsKKwl1dmQtPnZjYXAubWF4aGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT5jYW52YXMpOworCXV2ZC0+dmNhcC5taW53aWR0aCA9IG1pbl9jYW52YXNXaWR0aDsKKwl1dmQtPnZjYXAubWluaGVpZ2h0ID0gbWluX2NhbnZhc0hlaWdodDsKKworCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKKwl1dmQtPnZjaGFuLmZsYWdzID0gMDsKKwl1dmQtPnZjaGFuLnR1bmVycyA9IDA7CisJdXZkLT52Y2hhbi5jaGFubmVsID0gMDsKKwl1dmQtPnZjaGFuLnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwlzdHJjcHkodXZkLT52Y2hhbi5uYW1lLCAiQ2FtZXJhIik7Cit9CisKKy8qCisgKiB1bHRyYWNhbV9wcm9iZSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgcXVlcmllcyBkZXZpY2UgZGVzY3JpcHRvciBhbmQgYWNjZXB0cyB0aGUgaW50ZXJmYWNlCisgKiBpZiBpdCBsb29rcyBsaWtlIG91ciBjYW1lcmEuCisgKgorICogSGlzdG9yeToKKyAqIDEyLU5vdi0yMDAwIFJld29ya2VkIHRvIGNvbXBseSB3aXRoIG5ldyBwcm9iZSgpIHNpZ25hdHVyZS4KKyAqIDIzLUphbi0yMDAxIEFkZGVkIGNvbXBhdGliaWxpdHkgd2l0aCAyLjIueCBrZXJuZWxzLgorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHV2ZCAqdXZkID0gTlVMTDsKKwlpbnQgaXgsIGksIG5hczsKKwlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKKwl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKKworCWlmIChkZWJ1ZyA+PSAxKQorCQlpbmZvKCJ1bHRyYWNhbV9wcm9iZSglcCkiLCBpbnRmKTsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJaW5mbygiSUJNIFVsdHJhIGNhbWVyYSBmb3VuZCAocmV2LiAweCUwNHgpIiwKKwkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCisJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLworCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOworCWlmIChkZWJ1ZyA+IDApCisJCWluZm8oIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuIiwgbmFzKTsKKwlpZiAobmFzIDwgOCkgeworCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIFZhbGlkYXRlIGFsbCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwlmb3IgKGl4PTA7IGl4IDwgbmFzOyBpeCsrKSB7CisJCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKworCQlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1tpeF07CisJCWkgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhIiwKKwkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCSAgICAodW5zaWduZWQpKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJCWlmICh2aWRlb19lcCA9PSAwKQorCQkJdmlkZW9fZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJZWxzZSBpZiAodmlkZW9fZXAgIT0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpIHsKKwkJCWVycigiQWx0ZXJuYXRlIHNldHRpbmdzIGhhdmUgZGlmZmVyZW50IGVuZHBvaW50IGFkZHJlc3NlcyEiKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDB4MDMpICE9IDB4MDEpIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAorCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAwKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhIiwKKwkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA9PSAwKSB7CisJCQlpZiAoaW5hY3RJbnRlcmZhY2UgPCAwKQorCQkJCWluYWN0SW50ZXJmYWNlID0gaTsKKwkJCWVsc2UgeworCQkJCWVycigiTW9yZSB0aGFuIG9uZSBpbmFjdGl2ZSBhbHQuIHNldHRpbmchIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWN0SW50ZXJmYWNlIDwgMCkgeworCQkJCWFjdEludGVyZmFjZSA9IGk7CisJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJCWlmIChkZWJ1ZyA+IDApCisJCQkJCWluZm8oIkFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBpLCBtYXhQUyk7CisJCQl9IGVsc2UgeworCQkJCS8qIEdvdCBhbm90aGVyIGFjdGl2ZSBhbHQuIHNldHRpbmcgKi8KKwkJCQlpZiAobWF4UFMgPCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKSB7CisJCQkJCS8qIFRoaXMgb25lIGlzIGJldHRlciEgKi8KKwkJCQkJYWN0SW50ZXJmYWNlID0gaTsKKwkJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJCQlpZiAoZGVidWcgPiAwKSB7CisJCQkJCQlpbmZvKCJFdmVuIGJldHRlciBjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLAorCQkJCQkJICAgICBpLCBtYXhQUyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKChtYXhQUyA8PSAwKSB8fCAoYWN0SW50ZXJmYWNlIDwgMCkgfHwgKGluYWN0SW50ZXJmYWNlIDwgMCkpIHsKKwkJZXJyKCJGYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjYW1lcmEhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOworCWlmICh1dmQgIT0gTlVMTCkgeworCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCisJCXV2ZC0+ZmxhZ3MgPSBmbGFnczsKKwkJdXZkLT5kZWJ1ZyA9IGRlYnVnOworCQl1dmQtPmRldiA9IGRldjsKKwkJdXZkLT5pZmFjZSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwkJdXZkLT5pZmFjZUFsdEluYWN0aXZlID0gaW5hY3RJbnRlcmZhY2U7CisJCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBhY3RJbnRlcmZhY2U7CisJCXV2ZC0+dmlkZW9fZW5kcCA9IHZpZGVvX2VwOworCQl1dmQtPmlzb19wYWNrZXRfbGVuID0gbWF4UFM7CisJCXV2ZC0+cGFsZXR0ZUJpdHMgPSAxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0OworCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKwkJdXZkLT5jYW52YXMgPSBWSURFT1NJWkUoNjQwLCA0ODApOwkvKiBGSVhNRSAqLworCQl1dmQtPnZpZGVvc2l6ZSA9IHV2ZC0+Y2FudmFzOyAvKiB1bHRyYWNhbV9zaXplX3RvX3ZpZGVvc2l6ZShzaXplKTsqLworCisJCS8qIEluaXRpYWxpemUgaWJtY2FtLXNwZWNpZmljIGRhdGEgKi8KKwkJYXNzZXJ0KFVMVFJBQ0FNX1QodXZkKSAhPSBOVUxMKTsKKwkJVUxUUkFDQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPSAwOyAvKiBOb3QgdXNlZCB5ZXQgKi8KKwkJVUxUUkFDQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IDA7CisKKwkJdWx0cmFjYW1fY29uZmlndXJlX3ZpZGVvKHV2ZCk7CisKKwkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKKwkJaWYgKGkgIT0gMCkgeworCQkJZXJyKCJ1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKCkgZmFpbGVkLiIpOworCQkJdXZkID0gTlVMTDsKKwkJfQorCX0KKworCWlmICh1dmQpIHsKKwkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVTFRSQUNBTV9WRU5ET1JfSUQsIFVMVFJBQ0FNX1BST0RVQ1RfSUQpIH0sCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyoKKyAqIHVsdHJhY2FtX2luaXQoKQorICoKKyAqIFRoaXMgY29kZSBpcyBydW4gdG8gaW5pdGlhbGl6ZSB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCB1bHRyYWNhbV9pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOworCW1lbXNldCgmY2JUYmwsIDAsIHNpemVvZihjYlRibCkpOworCWNiVGJsLnByb2JlID0gdWx0cmFjYW1fcHJvYmU7CisJY2JUYmwuc2V0dXBPbk9wZW4gPSB1bHRyYWNhbV9zZXR1cF9vbl9vcGVuOworCWNiVGJsLnZpZGVvU3RhcnQgPSB1bHRyYWNhbV92aWRlb19zdGFydDsKKwljYlRibC52aWRlb1N0b3AgPSB1bHRyYWNhbV92aWRlb19zdG9wOworCWNiVGJsLnByb2Nlc3NEYXRhID0gdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhOworCWNiVGJsLnBvc3RQcm9jZXNzID0gdXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZTsKKwljYlRibC5hZGp1c3RQaWN0dXJlID0gdWx0cmFjYW1fYWRqdXN0X3BpY3R1cmU7CisJY2JUYmwuZ2V0RlBTID0gdWx0cmFjYW1fY2FsY3VsYXRlX2ZwczsKKwlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCisJCSZjYW1zLAorCQlNQVhfQ0FNRVJBUywKKwkJc2l6ZW9mKHVsdHJhY2FtX3QpLAorCQkidWx0cmFjYW0iLAorCQkmY2JUYmwsCisJCVRISVNfTU9EVUxFLAorCQlpZF90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1bHRyYWNhbV9jbGVhbnVwKHZvaWQpCit7CisJdXNidmlkZW9fRGVyZWdpc3RlcigmY2Ftcyk7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHVsdHJhY2FtX2luaXQpOworbW9kdWxlX2V4aXQodWx0cmFjYW1fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg0ODRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYwpAQCAtMCwwICsxLDIxOTIgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInVzYnZpZGVvLmgiCisKKyNpZiBkZWZpbmVkKE1BUF9OUikKKyNkZWZpbmUJdmlydF90b19wYWdlKHYpCU1BUF9OUih2KQkvKiBLZXJuZWxzIDIuMi54ICovCisjZW5kaWYKKworc3RhdGljIGludCB2aWRlb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOworCisvKgorICogTG9jYWwgcHJvdG90eXBlcy4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fRGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgdm9pZCB1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHN0cnVjdCB1dmQgKnV2ZCk7CisKK3N0YXRpYyBpbnQgdXNidmlkZW9fdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCB1c2J2aWRlb192NGxfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworc3RhdGljIGludCB1c2J2aWRlb192NGxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgc3NpemVfdCB1c2J2aWRlb192NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIGludCB1c2J2aWRlb192NGxfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCitzdGF0aWMgaW50IHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXAoc3RydWN0IHV2ZCAqdXZkKTsKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX1N0b3BEYXRhUHVtcChzdHJ1Y3QgdXZkICp1dmQpOworc3RhdGljIGludCB1c2J2aWRlb19HZXRGcmFtZShzdHJ1Y3QgdXZkICp1dmQsIGludCBmcmFtZU51bSk7CitzdGF0aWMgaW50IHVzYnZpZGVvX05ld0ZyYW1lKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZyYW1lbnVtKTsKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX1NvZnR3YXJlQ29udHJhc3RBZGp1c3RtZW50KHN0cnVjdCB1dmQgKnV2ZCwKKwkJCQkJCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAqdXNidmlkZW9fcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCB1c2J2aWRlb19ydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworc3RhdGljIHZvaWQgUmluZ1F1ZXVlX0luaXRpYWxpemUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJxLT53cWgpOworfQorCitzdGF0aWMgdm9pZCBSaW5nUXVldWVfQWxsb2NhdGUoc3RydWN0IFJpbmdRdWV1ZSAqcnEsIGludCBycUxlbikKK3sKKwkvKiBNYWtlIHN1cmUgdGhlIHJlcXVlc3RlZCBzaXplIGlzIGEgcG93ZXIgb2YgMiBhbmQKKwkgICByb3VuZCB1cCBpZiBuZWNlc3NhcnkuIFRoaXMgYWxsb3dzIGluZGV4IHdyYXBwaW5nCisJICAgdXNpbmcgbWFza3MgcmF0aGVyIHRoYW4gbW9kdWxvICovCisKKwlpbnQgaSA9IDE7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWFzc2VydChycUxlbiA+IDApOworCisJd2hpbGUocnFMZW4gPj4gaSkKKwkJaSsrOworCWlmKHJxTGVuICE9IDEgPDwgKGktMSkpCisJCXJxTGVuID0gMSA8PCBpOworCisJcnEtPmxlbmd0aCA9IHJxTGVuOworCXJxLT5yaSA9IHJxLT53aSA9IDA7CisJcnEtPnF1ZXVlID0gdXNidmlkZW9fcnZtYWxsb2MocnEtPmxlbmd0aCk7CisJYXNzZXJ0KHJxLT5xdWV1ZSAhPSBOVUxMKTsKK30KKworc3RhdGljIGludCBSaW5nUXVldWVfSXNBbGxvY2F0ZWQoY29uc3Qgc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJaWYgKHJxID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiAocnEtPnF1ZXVlICE9IE5VTEwpICYmIChycS0+bGVuZ3RoID4gMCk7Cit9CisKK3N0YXRpYyB2b2lkIFJpbmdRdWV1ZV9GcmVlKHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCWFzc2VydChycSAhPSBOVUxMKTsKKwlpZiAoUmluZ1F1ZXVlX0lzQWxsb2NhdGVkKHJxKSkgeworCQl1c2J2aWRlb19ydmZyZWUocnEtPnF1ZXVlLCBycS0+bGVuZ3RoKTsKKwkJcnEtPnF1ZXVlID0gTlVMTDsKKwkJcnEtPmxlbmd0aCA9IDA7CisJfQorfQorCitpbnQgUmluZ1F1ZXVlX0RlcXVldWUoc3RydWN0IFJpbmdRdWV1ZSAqcnEsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbikKK3sKKwlpbnQgcnFsLCB0b3JlYWQ7CisKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJYXNzZXJ0KGRzdCAhPSBOVUxMKTsKKworCXJxbCA9IFJpbmdRdWV1ZV9HZXRMZW5ndGgocnEpOworCWlmKCFycWwpCisJCXJldHVybiAwOworCisJLyogQ2xpcCByZXF1ZXN0ZWQgbGVuZ3RoIHRvIGF2YWlsYWJsZSBkYXRhICovCisJaWYobGVuID4gcnFsKQorCQlsZW4gPSBycWw7CisKKwl0b3JlYWQgPSBsZW47CisJaWYocnEtPnJpID4gcnEtPndpKSB7CisJCS8qIFJlYWQgZGF0YSBmcm9tIHRhaWwgKi8KKwkJaW50IHJlYWQgPSAodG9yZWFkIDwgKHJxLT5sZW5ndGggLSBycS0+cmkpKSA/IHRvcmVhZCA6IHJxLT5sZW5ndGggLSBycS0+cmk7CisJCW1lbWNweShkc3QsIHJxLT5xdWV1ZSArIHJxLT5yaSwgcmVhZCk7CisJCXRvcmVhZCAtPSByZWFkOworCQlkc3QgKz0gcmVhZDsKKwkJcnEtPnJpID0gKHJxLT5yaSArIHJlYWQpICYgKHJxLT5sZW5ndGgtMSk7CisJfQorCWlmKHRvcmVhZCkgeworCQkvKiBSZWFkIGRhdGEgZnJvbSBoZWFkICovCisJCW1lbWNweShkc3QsIHJxLT5xdWV1ZSArIHJxLT5yaSwgdG9yZWFkKTsKKwkJcnEtPnJpID0gKHJxLT5yaSArIHRvcmVhZCkgJiAocnEtPmxlbmd0aC0xKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworRVhQT1JUX1NZTUJPTChSaW5nUXVldWVfRGVxdWV1ZSk7CisKK2ludCBSaW5nUXVldWVfRW5xdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2RhdGEsIGludCBuKQoreworCWludCBlbnF1ZXVlZCA9IDA7CisKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJYXNzZXJ0KGNkYXRhICE9IE5VTEwpOworCWFzc2VydChycS0+bGVuZ3RoID4gMCk7CisJd2hpbGUgKG4gPiAwKSB7CisJCWludCBtLCBxX2F2YWlsOworCisJCS8qIENhbGN1bGF0ZSB0aGUgbGFyZ2VzdCBjaHVuayB0aGF0IGZpdHMgdGhlIHRhaWwgb2YgdGhlIHJpbmcgKi8KKwkJcV9hdmFpbCA9IHJxLT5sZW5ndGggLSBycS0+d2k7CisJCWlmIChxX2F2YWlsIDw9IDApIHsKKwkJCXJxLT53aSA9IDA7CisJCQlxX2F2YWlsID0gcnEtPmxlbmd0aDsKKwkJfQorCQltID0gbjsKKwkJYXNzZXJ0KHFfYXZhaWwgPiAwKTsKKwkJaWYgKG0gPiBxX2F2YWlsKQorCQkJbSA9IHFfYXZhaWw7CisKKwkJbWVtY3B5KHJxLT5xdWV1ZSArIHJxLT53aSwgY2RhdGEsIG0pOworCQlSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEsIHdpLCBtKTsKKwkJY2RhdGEgKz0gbTsKKwkJZW5xdWV1ZWQgKz0gbTsKKwkJbiAtPSBtOworCX0KKwlyZXR1cm4gZW5xdWV1ZWQ7Cit9CisKK0VYUE9SVF9TWU1CT0woUmluZ1F1ZXVlX0VucXVldWUpOworCitzdGF0aWMgdm9pZCBSaW5nUXVldWVfSW50ZXJydXB0aWJsZVNsZWVwT24oc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWludGVycnVwdGlibGVfc2xlZXBfb24oJnJxLT53cWgpOworfQorCit2b2lkIFJpbmdRdWV1ZV9XYWtlVXBJbnRlcnJ1cHRpYmxlKHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCWFzc2VydChycSAhPSBOVUxMKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcnEtPndxaCkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcnEtPndxaCk7Cit9CisKK0VYUE9SVF9TWU1CT0woUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUpOworCit2b2lkIFJpbmdRdWV1ZV9GbHVzaChzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJcnEtPnJpID0gMDsKKwlycS0+d2kgPSAwOworfQorCitFWFBPUlRfU1lNQk9MKFJpbmdRdWV1ZV9GbHVzaCk7CisKKworLyoKKyAqIHVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBjb252ZXJ0cyBnaXZlbiB2aWRlb3NpemUgdmFsdWUgdG8gcmVhZGFibGUgc3RyaW5nLgorICoKKyAqIEhpc3Rvcnk6CisgKiAwNy1BdWctMjAwMCBDcmVhdGVkLgorICogMTktT2N0LTIwMDAgUmV3b3JrZWQgZm9yIHVzYnZpZGVvIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcoY2hhciAqYnVmLCBpbnQgYnVmTGVuLCB2aWRlb3NpemVfdCB2cykKK3sKKwljaGFyIHRtcFs0MF07CisJaW50IG47CisKKwluID0gMSArIHNwcmludGYodG1wLCAiJWxkeCVsZCIsIFZJREVPU0laRV9YKHZzKSwgVklERU9TSVpFX1kodnMpKTsKKwlhc3NlcnQobiA8IHNpemVvZih0bXApKTsKKwlpZiAoKGJ1ZiA9PSBOVUxMKSB8fCAoYnVmTGVuIDwgbikpCisJCWVycigidXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmc6IGJ1ZmZlciBpcyB0b28gc21hbGwuIik7CisJZWxzZQorCQltZW1tb3ZlKGJ1ZiwgdG1wLCBuKTsKK30KKworLyoKKyAqIHVzYnZpZGVvX092ZXJsYXlDaGFyKCkKKyAqCisgKiBIaXN0b3J5OgorICogMDEtRmViLTIwMDAgQ3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fT3ZlcmxheUNoYXIoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCQkJCSBpbnQgeCwgaW50IHksIGludCBjaCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGlnaXRzWzE2XSA9IHsKKwkJMHhGNkRFLCAvKiAwICovCisJCTB4MjQ5MiwgLyogMSAqLworCQkweEU3Q0UsIC8qIDIgKi8KKwkJMHhFNzlFLCAvKiAzICovCisJCTB4Qjc5MiwgLyogNCAqLworCQkweEYzOUUsIC8qIDUgKi8KKwkJMHhGM0RFLCAvKiA2ICovCisJCTB4RjQ5MiwgLyogNyAqLworCQkweEY3REUsIC8qIDggKi8KKwkJMHhGNzlFLCAvKiA5ICovCisJCTB4NzdEQSwgLyogYSAqLworCQkweEQ3NUMsIC8qIGIgKi8KKwkJMHhGMjRFLCAvKiBjICovCisJCTB4RDZEQywgLyogZCAqLworCQkweEYzNEUsIC8qIGUgKi8KKwkJMHhGMzQ4ICAvKiBmICovCisJfTsKKwl1bnNpZ25lZCBzaG9ydCBkaWdpdDsKKwlpbnQgaXgsIGl5OworCisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKGZyYW1lID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykKKwkJY2ggLT0gJzAnOworCWVsc2UgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpCisJCWNoID0gMTAgKyAoY2ggLSAnQScpOworCWVsc2UgaWYgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpCisJCWNoID0gMTAgKyAoY2ggLSAnYScpOworCWVsc2UKKwkJcmV0dXJuOworCWRpZ2l0ID0gZGlnaXRzW2NoXTsKKworCWZvciAoaXk9MDsgaXkgPCA1OyBpeSsrKSB7CisJCWZvciAoaXg9MDsgaXggPCAzOyBpeCsrKSB7CisJCQlpZiAoZGlnaXQgJiAweDgwMDApIHsKKwkJCQlpZiAodXZkLT5wYWxldHRlQml0cyAmICgxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0KSkgeworLyogVE9ETyAqLwkJCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgeCtpeCwgeStpeSwgMHhGRiwgMHhGRiwgMHhGRik7CisJCQkJfQorCQkJfQorCQkJZGlnaXQgPSBkaWdpdCA8PCAxOworCQl9CisJfQorfQorCisvKgorICogdXNidmlkZW9fT3ZlcmxheVN0cmluZygpCisgKgorICogSGlzdG9yeToKKyAqIDAxLUZlYi0yMDAwIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX092ZXJsYXlTdHJpbmcoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCQkJCSAgIGludCB4LCBpbnQgeSwgY29uc3QgY2hhciAqc3RyKQoreworCXdoaWxlICgqc3RyKSB7CisJCXVzYnZpZGVvX092ZXJsYXlDaGFyKHV2ZCwgZnJhbWUsIHgsIHksICpzdHIpOworCQlzdHIrKzsKKwkJeCArPSA0OyAvKiAzIHBpeGVscyBjaGFyYWN0ZXIgKyAxIHNwYWNlICovCisJfQorfQorCisvKgorICogdXNidmlkZW9fT3ZlcmxheVN0YXRzKCkKKyAqCisgKiBPdmVybGF5cyBpbXBvcnRhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICoKKyAqIEhpc3Rvcnk6CisgKiAwMS1GZWItMjAwMCBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19PdmVybGF5U3RhdHMoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWNvbnN0IGludCB5X2RpZmYgPSA4OworCWNoYXIgdG1wWzE2XTsKKwlpbnQgeCA9IDEwLCB5PTEwOworCWxvbmcgaSwgaiwgYmFyTGVuZ3RoOworCWNvbnN0IGludCBxaV94MSA9IDYwLCBxaV95MSA9IDEwOworCWNvbnN0IGludCBxaV94MiA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAtIDEwLCBxaV9oID0gMTA7CisKKwkvKiBDYWxsIHRoZSB1c2VyIGNhbGxiYWNrLCBzZWUgaWYgd2UgbWF5IHByb2NlZWQgYWZ0ZXIgdGhhdCAqLworCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIG92ZXJsYXlIb29rKSkgeworCQlpZiAoR0VUX0NBTExCQUNLKHV2ZCwgb3ZlcmxheUhvb2spKHV2ZCwgZnJhbWUpIDwgMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGRyYXcgYSAobW9zdGx5KSBob2xsb3cgcmVjdGFuZ2xlIHdpdGggcWlfeHh4IGNvb3JkaW5hdGVzLgorCSAqIExlZnQgZWRnZSBzeW1ib2xpemVzIHRoZSBxdWV1ZSBpbmRleCAwOyByaWdodCBlZGdlIHN5bWJvbGl6ZXMKKwkgKiB0aGUgZnVsbCBjYXBhY2l0eSBvZiB0aGUgcXVldWUuCisJICovCisJYmFyTGVuZ3RoID0gcWlfeDIgLSBxaV94MSAtIDI7CisJaWYgKChiYXJMZW5ndGggPiAxMCkgJiYgKHV2ZC0+cGFsZXR0ZUJpdHMgJiAoMUwgPDwgVklERU9fUEFMRVRURV9SR0IyNCkpKSB7CisvKiBUT0RPICovCWxvbmcgdV9sbywgdV9oaSwgcV91c2VkOworCQlsb25nIG1fcmksIG1fd2ksIG1fbG8sIG1faGk7CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGZpbGwgem9uZXMgKHVzZWQgYXJlYXMgb2YgdGhlIHF1ZXVlKToKKwkJICogMCB4eHh4eHh4IHVfbG8gLi4uLi4uIHV2ZC0+ZHAucmkgeHh4eHh4eHggdV9oaSAuLi4uLiB1dmQtPmRwLmxlbmd0aAorCQkgKgorCQkgKiBpZiB1X2xvIDwgMCB0aGVuIHRoZXJlIGlzIG5vIGZpcnN0IGZpbGxlci4KKwkJICovCisKKwkJcV91c2VkID0gUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCk7CisJCWlmICgodXZkLT5kcC5yaSArIHFfdXNlZCkgPj0gdXZkLT5kcC5sZW5ndGgpIHsKKwkJCXVfaGkgPSB1dmQtPmRwLmxlbmd0aDsKKwkJCXVfbG8gPSAocV91c2VkICsgdXZkLT5kcC5yaSkgJiAodXZkLT5kcC5sZW5ndGgtMSk7CisJCX0gZWxzZSB7CisJCQl1X2hpID0gKHFfdXNlZCArIHV2ZC0+ZHAucmkpOworCQkJdV9sbyA9IC0xOworCQl9CisKKwkJLyogQ29udmVydCBieXRlIGluZGljZXMgaW50byBzY3JlZW4gdW5pdHMgKi8KKwkJbV9yaSA9IHFpX3gxICsgKChiYXJMZW5ndGggKiB1dmQtPmRwLnJpKSAvIHV2ZC0+ZHAubGVuZ3RoKTsKKwkJbV93aSA9IHFpX3gxICsgKChiYXJMZW5ndGggKiB1dmQtPmRwLndpKSAvIHV2ZC0+ZHAubGVuZ3RoKTsKKwkJbV9sbyA9ICh1X2xvID4gMCkgPyAocWlfeDEgKyAoKGJhckxlbmd0aCAqIHVfbG8pIC8gdXZkLT5kcC5sZW5ndGgpKSA6IC0xOworCQltX2hpID0gcWlfeDEgKyAoKGJhckxlbmd0aCAqIHVfaGkpIC8gdXZkLT5kcC5sZW5ndGgpOworCisJCWZvciAoaj1xaV95MTsgaiA8IChxaV95MSArIHFpX2gpOyBqKyspIHsKKwkJCWZvciAoaT1xaV94MTsgaSA8IHFpX3gyOyBpKyspIHsKKwkJCQkvKiBEcmF3IGJvcmRlciBsaW5lcyAqLworCQkJCWlmICgoaiA9PSBxaV95MSkgfHwgKGogPT0gKHFpX3kxICsgcWlfaCAtIDEpKSB8fAorCQkJCSAgICAoaSA9PSBxaV94MSkgfHwgKGkgPT0gKHFpX3gyIC0gMSkpKSB7CisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweEZGLCAweEZGLCAweEZGKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8qIEZvciBhbGwgb3RoZXIgcG9pbnRzIHRoZSBZIGNvb3JkaW5hdGUgZG9lcyBub3QgbWF0dGVyICovCisJCQkJaWYgKChpID49IG1fcmkpICYmIChpIDw9IChtX3JpICsgMykpKSB7CisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweDAwLCAweEZGLCAweDAwKTsKKwkJCQl9IGVsc2UgaWYgKChpID49IG1fd2kpICYmIChpIDw9IChtX3dpICsgMykpKSB7CisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweEZGLCAweDAwLCAweDAwKTsKKwkJCQl9IGVsc2UgaWYgKChpIDwgbV9sbykgfHwgKChpID4gbV9yaSkgJiYgKGkgPCBtX2hpKSkpCisJCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBqLCAweDAwLCAweDAwLCAweEZGKTsKKwkJCX0KKwkJfQorCX0KKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuZnJhbWVfbnVtKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLnVyYl9jb3VudCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOGx4IiwgdXZkLT5zdGF0cy51cmJfbGVuZ3RoKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLmRhdGFfY291bnQpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuaGVhZGVyX2NvdW50KTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLmlzb19za2lwX2NvdW50KTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLmlzb19lcnJfY291bnQpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJTh4IiwgdXZkLT52cGljLmNvbG91cik7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOHgiLCB1dmQtPnZwaWMuaHVlKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4eCIsIHV2ZC0+dnBpYy5icmlnaHRuZXNzID4+IDgpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJTh4IiwgdXZkLT52cGljLmNvbnRyYXN0ID4+IDEyKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4ZCIsIHV2ZC0+dnBpYy53aGl0ZW5lc3MgPj4gOCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworfQorCisvKgorICogdXNidmlkZW9fUmVwb3J0U3RhdGlzdGljcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgcHJpbnRzIHBhY2tldCBhbmQgdHJhbnNmZXIgc3RhdGlzdGljcy4KKyAqCisgKiBIaXN0b3J5OgorICogMTQtSmFuLTIwMDAgQ29ycmVjdGVkIGRlZmF1bHQgbXVsdGlwbGllci4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fUmVwb3J0U3RhdGlzdGljcyhjb25zdCBzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWYgKCh1dmQgIT0gTlVMTCkgJiYgKHV2ZC0+c3RhdHMudXJiX2NvdW50ID4gMCkpIHsKKwkJdW5zaWduZWQgbG9uZyBhbGxQYWNrZXRzLCBiYWRQYWNrZXRzLCBnb29kUGFja2V0cywgcGVyY2VudDsKKwkJYWxsUGFja2V0cyA9IHV2ZC0+c3RhdHMudXJiX2NvdW50ICogQ0FNRVJBX1VSQl9GUkFNRVM7CisJCWJhZFBhY2tldHMgPSB1dmQtPnN0YXRzLmlzb19za2lwX2NvdW50ICsgdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50OworCQlnb29kUGFja2V0cyA9IGFsbFBhY2tldHMgLSBiYWRQYWNrZXRzOworCQkvKiBDYWxjdWxhdGUgcGVyY2VudGFnZSB3aXNlbHksIHJlbWVtYmVyIGludGVnZXIgbGltaXRzICovCisJCWFzc2VydChhbGxQYWNrZXRzICE9IDApOworCQlpZiAoZ29vZFBhY2tldHMgPCAoKCh1bnNpZ25lZCBsb25nKS0xKS8xMDApKQorCQkJcGVyY2VudCA9ICgxMDAgKiBnb29kUGFja2V0cykgLyBhbGxQYWNrZXRzOworCQllbHNlCisJCQlwZXJjZW50ID0gZ29vZFBhY2tldHMgLyAoYWxsUGFja2V0cyAvIDEwMCk7CisJCWluZm8oIlBhY2tldCBTdGF0aXN0aWNzOiBUb3RhbD0lbHUuIEVtcHR5PSVsdS4gVXNhZ2U9JWx1JSUiLAorCQkgICAgIGFsbFBhY2tldHMsIGJhZFBhY2tldHMsIHBlcmNlbnQpOworCQlpZiAodXZkLT5pc29fcGFja2V0X2xlbiA+IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWxsQnl0ZXMsIHhmZXJCeXRlczsKKwkJCWNoYXIgbXVsdGlwbGllciA9ICcgJzsKKwkJCWFsbEJ5dGVzID0gYWxsUGFja2V0cyAqIHV2ZC0+aXNvX3BhY2tldF9sZW47CisJCQl4ZmVyQnl0ZXMgPSB1dmQtPnN0YXRzLmRhdGFfY291bnQ7CisJCQlhc3NlcnQoYWxsQnl0ZXMgIT0gMCk7CisJCQlpZiAoeGZlckJ5dGVzIDwgKCgodW5zaWduZWQgbG9uZyktMSkvMTAwKSkKKwkJCQlwZXJjZW50ID0gKDEwMCAqIHhmZXJCeXRlcykgLyBhbGxCeXRlczsKKwkJCWVsc2UKKwkJCQlwZXJjZW50ID0geGZlckJ5dGVzIC8gKGFsbEJ5dGVzIC8gMTAwKTsKKwkJCS8qIFNjYWxlIHhmZXJCeXRlcyBmb3IgZWFzeSByZWFkaW5nICovCisJCQlpZiAoeGZlckJ5dGVzID4gMTAqMTAyNCkgeworCQkJCXhmZXJCeXRlcyAvPSAxMDI0OworCQkJCW11bHRpcGxpZXIgPSAnSyc7CisJCQkJaWYgKHhmZXJCeXRlcyA+IDEwKjEwMjQpIHsKKwkJCQkJeGZlckJ5dGVzIC89IDEwMjQ7CisJCQkJCW11bHRpcGxpZXIgPSAnTSc7CisJCQkJCWlmICh4ZmVyQnl0ZXMgPiAxMCoxMDI0KSB7CisJCQkJCQl4ZmVyQnl0ZXMgLz0gMTAyNDsKKwkJCQkJCW11bHRpcGxpZXIgPSAnRyc7CisJCQkJCQlpZiAoeGZlckJ5dGVzID4gMTAqMTAyNCkgeworCQkJCQkJCXhmZXJCeXRlcyAvPSAxMDI0OworCQkJCQkJCW11bHRpcGxpZXIgPSAnVCc7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlpbmZvKCJUcmFuc2ZlciBTdGF0aXN0aWNzOiBUcmFuc2ZlcnJlZD0lbHUlY0IgVXNhZ2U9JWx1JSUiLAorCQkJICAgICB4ZmVyQnl0ZXMsIG11bHRpcGxpZXIsIHBlcmNlbnQpOworCQl9CisJfQorfQorCisvKgorICogdXNidmlkZW9fVGVzdFBhdHRlcm4oKQorICoKKyAqIFByb2NlZHVyZSBmb3JtcyBhIHRlc3QgcGF0dGVybiAoeWVsbG93IGdyaWQgb24gYmx1ZSBiYWNrZ3JvdW5kKS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogZnVsbGZyYW1lOiBpZiBUUlVFIHRoZW4gZW50aXJlIGZyYW1lIGlzIGZpbGxlZCwgb3RoZXJ3aXNlIHRoZSBwcm9jZWR1cmUKKyAqCSAgICAgIGNvbnRpbnVlcyBmcm9tIHRoZSBjdXJyZW50IHNjYW5saW5lLgorICogcG1vZGUgICAgICAwOiBmaWxsIHRoZSBmcmFtZSB3aXRoIHNvbGlkIGJsdWUgY29sb3IgKGxpa2Ugb24gVkNSIG9yIFRWKQorICoJICAgICAgMTogRHJhdyBhIGNvbG9yZWQgZ3JpZAorICoKKyAqIEhpc3Rvcnk6CisgKiAwMS1GZWItMjAwMCBDcmVhdGVkLgorICovCit2b2lkIHVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZ1bGxmcmFtZSwgaW50IHBtb2RlKQoreworCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWU7CisJaW50IG51bV9jZWxsID0gMDsKKwlpbnQgc2Nhbl9sZW5ndGggPSAwOworCXN0YXRpYyBpbnQgbnVtX3Bhc3MgPSAwOworCisJaWYgKHV2ZCA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZCA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHV2ZC0+Y3VyZnJhbWUgPCAwKSB8fCAodXZkLT5jdXJmcmFtZSA+PSBVU0JWSURFT19OVU1GUkFNRVMpKSB7CisJCWVycigiJXM6IHV2ZC0+Y3VyZnJhbWU9JWQuIiwgX19GVU5DVElPTl9fLCB1dmQtPmN1cmZyYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEdyYWIgdGhlIGN1cnJlbnQgZnJhbWUgKi8KKwlmcmFtZSA9ICZ1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdOworCisJLyogT3B0aW9uYWxseSBzdGFydCBhdCB0aGUgYmVnaW5uaW5nICovCisJaWYgKGZ1bGxmcmFtZSkgeworCQlmcmFtZS0+Y3VybGluZSA9IDA7CisJCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCA9IDA7CisJfQorI2lmIDAKKwl7CS8qIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSAqLworCQljaGFyIHRtcFsyMF07CisJCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcCwgc2l6ZW9mKHRtcCksIGZyYW1lLT5yZXF1ZXN0KTsKKwkJaW5mbygidGVzdHBhdHRlcm46IGZyYW1lPSVzIiwgdG1wKTsKKwl9CisjZW5kaWYKKwkvKiBGb3JtIGV2ZXJ5IHNjYW4gbGluZSAqLworCWZvciAoOyBmcmFtZS0+Y3VybGluZSA8IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KTsgZnJhbWUtPmN1cmxpbmUrKykgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgY2hhciAqZiA9IGZyYW1lLT5kYXRhICsKKwkJCShWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMICogZnJhbWUtPmN1cmxpbmUpOworCQlmb3IgKGk9MDsgaSA8IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGNiPTB4ODA7CisJCQl1bnNpZ25lZCBjaGFyIGNnID0gMDsKKwkJCXVuc2lnbmVkIGNoYXIgY3IgPSAwOworCisJCQlpZiAocG1vZGUgPT0gMSkgeworCQkJCWlmIChmcmFtZS0+Y3VybGluZSAlIDMyID09IDApCisJCQkJCWNiID0gMCwgY2cgPSBjciA9IDB4RkY7CisJCQkJZWxzZSBpZiAoaSAlIDMyID09IDApIHsKKwkJCQkJaWYgKGZyYW1lLT5jdXJsaW5lICUgMzIgPT0gMSkKKwkJCQkJCW51bV9jZWxsKys7CisJCQkJCWNiID0gMCwgY2cgPSBjciA9IDB4RkY7CisJCQkJfSBlbHNlIHsKKwkJCQkJY2IgPSAoKG51bV9jZWxsKjcpICsgbnVtX3Bhc3MpICYgMHhGRjsKKwkJCQkJY2cgPSAoKG51bV9jZWxsKjUpICsgbnVtX3Bhc3MqMikgJiAweEZGOworCQkJCQljciA9ICgobnVtX2NlbGwqMykgKyBudW1fcGFzcyozKSAmIDB4RkY7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBKdXN0IHRoZSBibHVlIHNjcmVlbiAqLworCQkJfQorCQkJCQorCQkJKmYrKyA9IGNiOworCQkJKmYrKyA9IGNnOworCQkJKmYrKyA9IGNyOworCQkJc2Nhbl9sZW5ndGggKz0gMzsKKwkJfQorCX0KKworCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOworCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBzY2FuX2xlbmd0aDsKKwkrK251bV9wYXNzOworCisJLyogV2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2YgRkxBR1NfT1ZFUkxBWV9TVEFUUyAqLworCXVzYnZpZGVvX092ZXJsYXlTdGF0cyh1dmQsIGZyYW1lKTsKK30KKworRVhQT1JUX1NZTUJPTCh1c2J2aWRlb19UZXN0UGF0dGVybik7CisKKworI2lmZGVmIERFQlVHCisvKgorICogdXNidmlkZW9fSGV4RHVtcCgpCisgKgorICogQSBkZWJ1Z2dpbmcgdG9vbC4gUHJpbnRzIGhleCBkdW1wcy4KKyAqCisgKiBIaXN0b3J5OgorICogMjktSnVsLTIwMDAgQWRkZWQgcHJpbnRpbmcgb2Ygb2Zmc2V0cy4KKyAqLwordm9pZCB1c2J2aWRlb19IZXhEdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJY29uc3QgaW50IGJ5dGVzX3Blcl9saW5lID0gMzI7CisJY2hhciB0bXBbMTI4XTsgLyogMzIqMyArIDUgKi8KKwlpbnQgaSwgazsKKworCWZvciAoaT1rPTA7IGxlbiA+IDA7IGkrKywgbGVuLS0pIHsKKwkJaWYgKGkgPiAwICYmICgoaSAlIGJ5dGVzX3Blcl9saW5lKSA9PSAwKSkgeworCQkJcHJpbnRrKCIlc1xuIiwgdG1wKTsKKwkJCWs9MDsKKwkJfQorCQlpZiAoKGkgJSBieXRlc19wZXJfbGluZSkgPT0gMCkKKwkJCWsgKz0gc3ByaW50ZigmdG1wW2tdLCAiJTA0eDogIiwgaSk7CisJCWsgKz0gc3ByaW50ZigmdG1wW2tdLCAiJTAyeCAiLCBkYXRhW2ldKTsKKwl9CisJaWYgKGsgPiAwKQorCQlwcmludGsoIiVzXG4iLCB0bXApOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0hleER1bXApOworCisjZW5kaWYKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogWFhYOiB0aGlzIHBpZWNlIG9mIGNyYXAgcmVhbGx5IHdhbnRzIHNvbWUgZXJyb3IgaGFuZGxpbmcuLiAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fQ2xpZW50SW5jTW9kQ291bnQoc3RydWN0IHV2ZCAqdXZkKQoreworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXZkLT5oYW5kbGUgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlLT5tZF9tb2R1bGUgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmhhbmRsZS0+bWRfbW9kdWxlID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWlmICghdHJ5X21vZHVsZV9nZXQodXZkLT5oYW5kbGUtPm1kX21vZHVsZSkpIHsKKwkJZXJyKCIlczogdHJ5X21vZHVsZV9nZXQoKSA9PSAwIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQoc3RydWN0IHV2ZCAqdXZkKQoreworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXZkLT5oYW5kbGUgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHV2ZC0+aGFuZGxlLT5tZF9tb2R1bGUgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmhhbmRsZS0+bWRfbW9kdWxlID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCW1vZHVsZV9wdXQodXZkLT5oYW5kbGUtPm1kX21vZHVsZSk7Cit9CisKK2ludCB1c2J2aWRlb19yZWdpc3RlcigKKwlzdHJ1Y3QgdXNidmlkZW8gKipwQ2FtcywKKwljb25zdCBpbnQgbnVtX2NhbXMsCisJY29uc3QgaW50IG51bV9leHRyYSwKKwljb25zdCBjaGFyICpkcml2ZXJOYW1lLAorCWNvbnN0IHN0cnVjdCB1c2J2aWRlb19jYiAqY2JUYmwsCisJc3RydWN0IG1vZHVsZSAqbWQsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKQoreworCXN0cnVjdCB1c2J2aWRlbyAqY2FtczsKKwlpbnQgaSwgYmFzZV9zaXplLCByZXN1bHQ7CisKKwkvKiBDaGVjayBwYXJhbWV0ZXJzIGZvciBzYW5pdHkgKi8KKwlpZiAoKG51bV9jYW1zIDw9IDApIHx8IChwQ2FtcyA9PSBOVUxMKSB8fCAoY2JUYmwgPT0gTlVMTCkpIHsKKwkJZXJyKCIlczogSWxsZWdhbCBjYWxsIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgcmVnaXN0cmF0aW9uIGNhbGxiYWNrIC0gbXVzdCBiZSBzZXQhICovCisJaWYgKGNiVGJsLT5wcm9iZSA9PSBOVUxMKSB7CisJCWVycigiJXM6IHByb2JlKCkgaXMgcmVxdWlyZWQhIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmFzZV9zaXplID0gbnVtX2NhbXMgKiBzaXplb2Yoc3RydWN0IHV2ZCkgKyBzaXplb2Yoc3RydWN0IHVzYnZpZGVvKTsKKwljYW1zID0gKHN0cnVjdCB1c2J2aWRlbyAqKSBrbWFsbG9jKGJhc2Vfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNhbXMgPT0gTlVMTCkgeworCQllcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSAlZC4gYnl0ZXMgZm9yIHVzYnZpZGVvIHN0cnVjdCIsIGJhc2Vfc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkYmcoIiVzOiBBbGxvY2F0ZWQgJCVwICglZC4gYnl0ZXMpIGZvciAlZC4gY2FtZXJhcyIsCisJICAgIF9fRlVOQ1RJT05fXywgY2FtcywgYmFzZV9zaXplLCBudW1fY2Ftcyk7CisJbWVtc2V0KGNhbXMsIDAsIGJhc2Vfc2l6ZSk7CisKKwkvKiBDb3B5IGNhbGxiYWNrcywgYXBwbHkgZGVmYXVsdHMgZm9yIHRob3NlIHRoYXQgYXJlIG5vdCBzZXQgKi8KKwltZW1tb3ZlKCZjYW1zLT5jYiwgY2JUYmwsIHNpemVvZihjYW1zLT5jYikpOworCWlmIChjYW1zLT5jYi5nZXRGcmFtZSA9PSBOVUxMKQorCQljYW1zLT5jYi5nZXRGcmFtZSA9IHVzYnZpZGVvX0dldEZyYW1lOworCWlmIChjYW1zLT5jYi5kaXNjb25uZWN0ID09IE5VTEwpCisJCWNhbXMtPmNiLmRpc2Nvbm5lY3QgPSB1c2J2aWRlb19EaXNjb25uZWN0OworCWlmIChjYW1zLT5jYi5zdGFydERhdGFQdW1wID09IE5VTEwpCisJCWNhbXMtPmNiLnN0YXJ0RGF0YVB1bXAgPSB1c2J2aWRlb19TdGFydERhdGFQdW1wOworCWlmIChjYW1zLT5jYi5zdG9wRGF0YVB1bXAgPT0gTlVMTCkKKwkJY2Ftcy0+Y2Iuc3RvcERhdGFQdW1wID0gdXNidmlkZW9fU3RvcERhdGFQdW1wOworCisJY2Ftcy0+bnVtX2NhbWVyYXMgPSBudW1fY2FtczsKKwljYW1zLT5jYW0gPSAoc3RydWN0IHV2ZCAqKSAmY2Ftc1sxXTsKKwljYW1zLT5tZF9tb2R1bGUgPSBtZDsKKwlpZiAoY2Ftcy0+bWRfbW9kdWxlID09IE5VTEwpCisJCXdhcm4oIiVzOiBtb2R1bGUgPT0gTlVMTCEiLCBfX0ZVTkNUSU9OX18pOworCWluaXRfTVVURVgoJmNhbXMtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLworCisJZm9yIChpID0gMDsgaSA8IG51bV9jYW1zOyBpKyspIHsKKwkJc3RydWN0IHV2ZCAqdXAgPSAmY2Ftcy0+Y2FtW2ldOworCisJCXVwLT5oYW5kbGUgPSBjYW1zOworCisJCS8qIEFsbG9jYXRlIHVzZXJfZGF0YSBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2Yga21hbGxvYydzIGxpbWl0cyAqLworCQlpZiAobnVtX2V4dHJhID4gMCkgeworCQkJdXAtPnVzZXJfc2l6ZSA9IG51bV9jYW1zICogbnVtX2V4dHJhOworCQkJdXAtPnVzZXJfZGF0YSA9IChjaGFyICopIGttYWxsb2ModXAtPnVzZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAodXAtPnVzZXJfZGF0YSA9PSBOVUxMKSB7CisJCQkJZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHVzZXJfZGF0YSAoJWQuIGJ5dGVzKSIsCisJCQkJICAgIF9fRlVOQ1RJT05fXywgdXAtPnVzZXJfc2l6ZSk7CisJCQkJd2hpbGUgKGkpIHsKKwkJCQkJdXAgPSAmY2Ftcy0+Y2FtWy0taV07CisJCQkJCWtmcmVlKHVwLT51c2VyX2RhdGEpOworCQkJCX0KKwkJCQlrZnJlZShjYW1zKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWRiZygiJXM6IEFsbG9jYXRlZCBjYW1zWyVkXS51c2VyX2RhdGE9JCVwICglZC4gYnl0ZXMpIiwKKwkJCSAgICAgX19GVU5DVElPTl9fLCBpLCB1cC0+dXNlcl9kYXRhLCB1cC0+dXNlcl9zaXplKTsKKwkJfQorCX0KKworCS8qCisJICogUmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggVVNCIHN0YWNrLgorCSAqLworCXN0cmNweShjYW1zLT5kcnZOYW1lLCAoZHJpdmVyTmFtZSAhPSBOVUxMKSA/IGRyaXZlck5hbWUgOiAiVW5rbm93biIpOworCWNhbXMtPnVzYmRydi5uYW1lID0gY2Ftcy0+ZHJ2TmFtZTsKKwljYW1zLT51c2JkcnYucHJvYmUgPSBjYW1zLT5jYi5wcm9iZTsKKwljYW1zLT51c2JkcnYuZGlzY29ubmVjdCA9IGNhbXMtPmNiLmRpc2Nvbm5lY3Q7CisJY2Ftcy0+dXNiZHJ2LmlkX3RhYmxlID0gaWRfdGFibGU7CisKKwkvKgorCSAqIFVwZGF0ZSBnbG9iYWwgaGFuZGxlIHRvIHVzYnZpZGVvLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50CisJICogYmVjYXVzZSBwcm9iZSgpIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHVzYl9yZWdpc3RlcigpIHJldHVybnMuCisJICogSWYgdGhlIGhhbmRsZSBpcyBub3QgeWV0IHVwZGF0ZWQgdGhlbiB0aGUgcHJvYmUoKSB3aWxsIGZhaWwuCisJICovCisJKnBDYW1zID0gY2FtczsKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmNhbXMtPnVzYmRydik7CisJaWYgKHJlc3VsdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhbXM7IGkrKykgeworCQkJc3RydWN0IHV2ZCAqdXAgPSAmY2Ftcy0+Y2FtW2ldOworCQkJa2ZyZWUodXAtPnVzZXJfZGF0YSk7CisJCX0KKwkJa2ZyZWUoY2Ftcyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2J2aWRlb19yZWdpc3Rlcik7CisKKy8qCisgKiB1c2J2aWRlb19EZXJlZ2lzdGVyKCkKKyAqCisgKiBQcm9jZWR1cmUgZnJlZXMgYWxsIHVzYnZpZGVvIGFuZCB1c2VyIGRhdGEgc3RydWN0dXJlcy4gQmUgd2FybmVkIHRoYXQKKyAqIGlmIHlvdSBoYWQgc29tZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgY29tcG9uZW50cyBpbiAtPnVzZXIgZmllbGQgdGhlbgorICogeW91IHNob3VsZCBmcmVlIHRoZW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4KKyAqLwordm9pZCB1c2J2aWRlb19EZXJlZ2lzdGVyKHN0cnVjdCB1c2J2aWRlbyAqKnBDYW1zKQoreworCXN0cnVjdCB1c2J2aWRlbyAqY2FtczsKKwlpbnQgaTsKKworCWlmIChwQ2FtcyA9PSBOVUxMKSB7CisJCWVycigiJXM6IHBDYW1zID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWNhbXMgPSAqcENhbXM7CisJaWYgKGNhbXMgPT0gTlVMTCkgeworCQllcnIoIiVzOiBjYW1zID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlczogRGVyZWdpc3RlcmluZyAlcyBkcml2ZXIuIiwgX19GVU5DVElPTl9fLCBjYW1zLT5kcnZOYW1lKTsKKwl1c2JfZGVyZWdpc3RlcigmY2Ftcy0+dXNiZHJ2KTsKKworCWRiZygiJXM6IERlYWxsb2NhdGluZyBjYW1zPSQlcCAoJWQuIGNhbWVyYXMpIiwgX19GVU5DVElPTl9fLCBjYW1zLCBjYW1zLT5udW1fY2FtZXJhcyk7CisJZm9yIChpPTA7IGkgPCBjYW1zLT5udW1fY2FtZXJhczsgaSsrKSB7CisJCXN0cnVjdCB1dmQgKnVwID0gJmNhbXMtPmNhbVtpXTsKKwkJaW50IHdhcm5pbmcgPSAwOworCisJCWlmICh1cC0+dXNlcl9kYXRhICE9IE5VTEwpIHsKKwkJCWlmICh1cC0+dXNlcl9zaXplIDw9IDApCisJCQkJKyt3YXJuaW5nOworCQl9IGVsc2UgeworCQkJaWYgKHVwLT51c2VyX3NpemUgPiAwKQorCQkJCSsrd2FybmluZzsKKwkJfQorCQlpZiAod2FybmluZykgeworCQkJZXJyKCIlczogV2FybmluZzogdXNlcl9kYXRhPSQlcCB1c2VyX3NpemU9JWQuIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIHVwLT51c2VyX2RhdGEsIHVwLT51c2VyX3NpemUpOworCQl9IGVsc2UgeworCQkJZGJnKCIlczogRnJlZWluZyAlZC4gJCVwLT51c2VyX2RhdGE9JCVwIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIGksIHVwLCB1cC0+dXNlcl9kYXRhKTsKKwkJCWtmcmVlKHVwLT51c2VyX2RhdGEpOworCQl9CisJfQorCS8qIFdob2xlIGFycmF5IHdhcyBhbGxvY2F0ZWQgaW4gb25lIGNodW5rICovCisJZGJnKCIlczogRnJlZWQgJWQgdXZkIHN0cnVjdHVyZXMiLAorCSAgICBfX0ZVTkNUSU9OX18sIGNhbXMtPm51bV9jYW1lcmFzKTsKKwlrZnJlZShjYW1zKTsKKwkqcENhbXMgPSBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0RlcmVnaXN0ZXIpOworCisvKgorICogdXNidmlkZW9fRGlzY29ubmVjdCgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc3RvcHMgYWxsIGRyaXZlciBhY3Rpdml0eS4gRGVhbGxvY2F0aW9uIG9mCisgKiB0aGUgaW50ZXJmYWNlLXByaXZhdGUgc3RydWN0dXJlIChwb2ludGVkIGJ5ICdwdHInKSBpcyBkb25lIG5vdworICogKGlmIHdlIGRvbid0IGhhdmUgYW55IG9wZW4gZmlsZXMpIG9yIGxhdGVyLCB3aGVuIHRob3NlIGZpbGVzCisgKiBhcmUgY2xvc2VkLiBBZnRlciB0aGF0IGRyaXZlciBzaG91bGQgYmUgcmVtb3ZhYmxlLgorICoKKyAqIFRoaXMgY29kZSBoYW5kbGVzIHN1cnByaXNlIHJlbW92YWwuIFRoZSB1dmQtPnVzZXIgaXMgYSBjb3VudGVyIHdoaWNoCisgKiBpbmNyZW1lbnRzIG9uIG9wZW4oKSBhbmQgZGVjcmVtZW50cyBvbiBjbG9zZSgpLiBJZiB3ZSBzZWUgaGVyZSB0aGF0CisgKiB0aGlzIGNvdW50ZXIgaXMgbm90IDAgdGhlbiB3ZSBoYXZlIGEgY2xpZW50IHdobyBzdGlsbCBoYXMgdXMgb3BlbmVkLgorICogV2Ugc2V0IHV2ZC0+cmVtb3ZlX3BlbmRpbmcgZmxhZyBhcyBlYXJseSBhcyBwb3NzaWJsZSwgYW5kIGFmdGVyIHRoYXQKKyAqIGFsbCBhY2Nlc3MgdG8gdGhlIGNhbWVyYSB3aWxsIGdyYWNlZnVsbHkgZmFpbC4gVGhlc2UgZmFpbHVyZXMgc2hvdWxkCisgKiBwcm9tcHQgY2xpZW50IHRvIChldmVudHVhbGx5KSBjbG9zZSB0aGUgdmlkZW8gZGV2aWNlLCBhbmQgdGhlbiAtIGluCisgKiB1c2J2aWRlb192NGxfY2xvc2UoKSAtIHdlIGRlY3JlbWVudCB1dmQtPnV2ZF91c2VkIGFuZCB1c2FnZSBjb3VudGVyLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyMi1KYW4tMjAwMCBBZGRlZCBwb2xsaW5nIG9mIE1PRF9JTl9VU0UgdG8gZGVsYXkgcmVtb3ZhbCB1bnRpbCBhbGwgdXNlcnMgZ29uZS4KKyAqIDI3LUphbi0yMDAwIFJld29ya2VkIHRvIGFsbG93IHBlbmRpbmcgZGlzY29ubmVjdHM7IHNlZSB4eHhfY2xvc2UoKQorICogMjQtTWF5LTIwMDAgQ29ycmVjdGVkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gKE1PRF94eHhfVVNFX0NPVU5UKS4KKyAqIDE5LU9jdC0yMDAwIE1vdmVkIHRvIHVzYnZpZGVvIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fRGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXZkICp1dmQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlpbnQgaTsKKworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzKCQlcCk6IElsbGVnYWwgY2FsbC4iLCBfX0ZVTkNUSU9OX18sIGludGYpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwl1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpOworCWlmICh1dmQtPmRlYnVnID4gMCkKKwkJaW5mbygiJXMoJXAuKSIsIF9fRlVOQ1RJT05fXywgaW50Zik7CisKKwlkb3duKCZ1dmQtPmxvY2spOworCXV2ZC0+cmVtb3ZlX3BlbmRpbmcgPSAxOyAvKiBOb3cgYWxsIElTTyBkYXRhIHdpbGwgYmUgaWdub3JlZCAqLworCisJLyogQXQgdGhpcyB0aW1lIHdlIGFzayB0byBjYW5jZWwgb3V0c3RhbmRpbmcgVVJCcyAqLworCUdFVF9DQUxMQkFDSyh1dmQsIHN0b3BEYXRhUHVtcCkodXZkKTsKKworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKQorCQl1c2JfZnJlZV91cmIodXZkLT5zYnVmW2ldLnVyYik7CisKKwl1c2JfcHV0X2Rldih1dmQtPmRldik7CisJdXZkLT5kZXYgPSBOVUxMOyAgICAJICAgIC8qIFVTQiBkZXZpY2UgaXMgbm8gbW9yZSAqLworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnV2ZC0+dmRldik7CisJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQlpbmZvKCIlczogVmlkZW8gdW5yZWdpc3RlcmVkLiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXZkLT51c2VyKQorCQlpbmZvKCIlczogSW4gdXNlLCBkaXNjb25uZWN0IHBlbmRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCXVzYnZpZGVvX0NhbWVyYVJlbGVhc2UodXZkKTsKKwl1cCgmdXZkLT5sb2NrKTsKKwlpbmZvKCJVU0IgY2FtZXJhIGRpc2Nvbm5lY3RlZC4iKTsKKworCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7Cit9CisKKy8qCisgKiB1c2J2aWRlb19DYW1lcmFSZWxlYXNlKCkKKyAqCisgKiBUaGlzIGNvZGUgZG9lcyBmaW5hbCByZWxlYXNlIG9mIHV2ZC4gVGhpcyBoYXBwZW5zCisgKiBhZnRlciB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZCAtYW5kLSBhbGwgY2xpZW50cworICogY2xvc2VkIHRoZWlyIGZpbGVzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyNy1KYW4tMjAwMCBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpZiAodXZkID09IE5VTEwpIHsKKwkJZXJyKCIlczogSWxsZWdhbCBjYWxsIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCVJpbmdRdWV1ZV9GcmVlKCZ1dmQtPmRwKTsKKwlpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCB1c2VyRnJlZSkpCisJCUdFVF9DQUxMQkFDSyh1dmQsIHVzZXJGcmVlKSh1dmQpOworCXV2ZC0+dXZkX3VzZWQgPSAwOwkvKiBUaGlzIGlzIGF0b21pYywgbm8gbmVlZCB0byB0YWtlIG11dGV4ICovCit9CisKKy8qCisgKiB1c2J2aWRlb19maW5kX3N0cnVjdCgpCisgKgorICogVGhpcyBjb2RlIHNlYXJjaGVzIHRoZSBhcnJheSBvZiBwcmVhbGxvY2F0ZWQgKHN0YXRpYykgc3RydWN0dXJlcworICogYW5kIHJldHVybnMgaW5kZXggb2YgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IGluIHVzZS4gUmV0dXJucyAtMQorICogaWYgdGhlcmUgYXJlIG5vIGZyZWUgc3RydWN0dXJlcy4KKyAqCisgKiBIaXN0b3J5OgorICogMjctSmFuLTIwMDAgQ3JlYXRlZC4KKyAqLworc3RhdGljIGludCB1c2J2aWRlb19maW5kX3N0cnVjdChzdHJ1Y3QgdXNidmlkZW8gKmNhbXMpCit7CisJaW50IHUsIHJ2ID0gLTE7CisKKwlpZiAoY2FtcyA9PSBOVUxMKSB7CisJCWVycigiTm8gdXNidmlkZW8gaGFuZGxlPyIpOworCQlyZXR1cm4gLTE7CisJfQorCWRvd24oJmNhbXMtPmxvY2spOworCWZvciAodSA9IDA7IHUgPCBjYW1zLT5udW1fY2FtZXJhczsgdSsrKSB7CisJCXN0cnVjdCB1dmQgKnV2ZCA9ICZjYW1zLT5jYW1bdV07CisJCWlmICghdXZkLT51dmRfdXNlZCkgLyogVGhpcyBvbmUgaXMgZnJlZSAqLworCQl7CisJCQl1dmQtPnV2ZF91c2VkID0gMTsJLyogSW4gdXNlIG5vdyAqLworCQkJaW5pdF9NVVRFWCgmdXZkLT5sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KKwkJCXV2ZC0+ZGV2ID0gTlVMTDsKKwkJCXJ2ID0gdTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwKCZjYW1zLT5sb2NrKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYnZpZGVvX2ZvcHMgPSB7CisJLm93bmVyID0gIFRISVNfTU9EVUxFLAorCS5vcGVuID0gICB1c2J2aWRlb192NGxfb3BlbiwKKwkucmVsZWFzZSA9dXNidmlkZW9fdjRsX2Nsb3NlLAorCS5yZWFkID0gICB1c2J2aWRlb192NGxfcmVhZCwKKwkubW1hcCA9ICAgdXNidmlkZW9fdjRsX21tYXAsCisJLmlvY3RsID0gIHVzYnZpZGVvX3Y0bF9pb2N0bCwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHVzYnZpZGVvX3RlbXBsYXRlID0geworCS5vd25lciA9ICAgICAgVEhJU19NT0RVTEUsCisJLnR5cGUgPSAgICAgICBWSURfVFlQRV9DQVBUVVJFLAorCS5oYXJkd2FyZSA9ICAgVklEX0hBUkRXQVJFX0NQSUEsCisJLmZvcHMgPSAgICAgICAmdXNidmlkZW9fZm9wcywKK307CisKK3N0cnVjdCB1dmQgKnVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKHN0cnVjdCB1c2J2aWRlbyAqY2FtcykKK3sKKwlpbnQgaSwgZGV2bnVtOworCXN0cnVjdCB1dmQgKnV2ZCA9IE5VTEw7CisKKwlpZiAoY2FtcyA9PSBOVUxMKSB7CisJCWVycigiTm8gdXNidmlkZW8gaGFuZGxlPyIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXZudW0gPSB1c2J2aWRlb19maW5kX3N0cnVjdChjYW1zKTsKKwlpZiAoZGV2bnVtID09IC0xKSB7CisJCWVycigiSUJNIFVTQiBjYW1lcmEgZHJpdmVyOiBUb28gbWFueSBkZXZpY2VzISIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJdXZkID0gJmNhbXMtPmNhbVtkZXZudW1dOworCWRiZygiRGV2aWNlIGVudHJ5ICMlZC4gYXQgJCVwIiwgZGV2bnVtLCB1dmQpOworCisJLyogTm90IHJlbHlpbmcgdXBvbiBjYWxsZXIgd2UgaW5jcmVhc2UgbW9kdWxlIGNvdW50ZXIgb3Vyc2VsdmVzICovCisJdXNidmlkZW9fQ2xpZW50SW5jTW9kQ291bnQodXZkKTsKKworCWRvd24oJnV2ZC0+bG9jayk7CisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJdXZkLT5zYnVmW2ldLnVyYiA9IHVzYl9hbGxvY191cmIoRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHV2ZC0+c2J1ZltpXS51cmIgPT0gTlVMTCkgeworCQkJZXJyKCJ1c2JfYWxsb2NfdXJiKCVkLikgZmFpbGVkLiIsIEZSQU1FU19QRVJfREVTQyk7CisJCQl1dmQtPnV2ZF91c2VkID0gMDsKKwkJCXV2ZCA9IE5VTEw7CisJCQlnb3RvIGFsbG9jYXRlX2RvbmU7CisJCX0KKwl9CisJdXZkLT51c2VyPTA7CisJdXZkLT5yZW1vdmVfcGVuZGluZyA9IDA7CisJdXZkLT5sYXN0X2Vycm9yID0gMDsKKwlSaW5nUXVldWVfSW5pdGlhbGl6ZSgmdXZkLT5kcCk7CisKKwkvKiBJbml0aWFsaXplIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwl1dmQtPnZkZXYgPSB1c2J2aWRlb190ZW1wbGF0ZTsKKwlzcHJpbnRmKHV2ZC0+dmRldi5uYW1lLCAiJS4yMHMgVVNCIENhbWVyYSIsIGNhbXMtPmRydk5hbWUpOworCS8qCisJICogVGhlIGNsaWVudCBpcyBmcmVlIHRvIG92ZXJ3cml0ZSB0aG9zZSBiZWNhdXNlIHdlCisJICogcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNsaWVudCdzIHByb2JlIGZ1bmN0aW9uIHJpZ2h0IG5vdy4KKwkgKi8KK2FsbG9jYXRlX2RvbmU6CisJdXAgKCZ1dmQtPmxvY2spOworCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7CisJcmV0dXJuIHV2ZDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2J2aWRlb19BbGxvY2F0ZURldmljZSk7CisKK2ludCB1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwljaGFyIHRtcDFbMjBdLCB0bXAyWzIwXTsJLyogQnVmZmVycyBmb3IgcHJpbnRpbmcgKi8KKworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiBJbGxlZ2FsIGNhbGwuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh1dmQtPnZpZGVvX2VuZHAgPT0gMCkgeworCQlpbmZvKCIlczogTm8gdmlkZW8gZW5kcG9pbnQgc3BlY2lmaWVkOyBkYXRhIHB1bXAgZGlzYWJsZWQuIiwgX19GVU5DVElPTl9fKTsKKwl9CisJaWYgKHV2ZC0+cGFsZXR0ZUJpdHMgPT0gMCkgeworCQllcnIoIiVzOiBObyBwYWxldHRlcyBzcGVjaWZpZWQhIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh1dmQtPmRlZmF1bHRQYWxldHRlID09IDApIHsKKwkJaW5mbygiJXM6IE5vIGRlZmF1bHQgcGFsZXR0ZSEiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCXV2ZC0+bWF4X2ZyYW1lX3NpemUgPSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykgKgorCQlWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykgKiBWNExfQllURVNfUEVSX1BJWEVMOworCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcDEsIHNpemVvZih0bXAxKSwgdXZkLT52aWRlb3NpemUpOworCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcDIsIHNpemVvZih0bXAyKSwgdXZkLT5jYW52YXMpOworCisJaWYgKHV2ZC0+ZGVidWcgPiAwKSB7CisJCWluZm8oIiVzOiBpZmFjZT0lZC4gZW5kcG9pbnQ9JCUwMnggcGFsZXR0ZUJpdHM9JCUwOGx4IiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHV2ZC0+aWZhY2UsIHV2ZC0+dmlkZW9fZW5kcCwgdXZkLT5wYWxldHRlQml0cyk7CisJfQorCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnV2ZC0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpID09IC0xKSB7CisJCWVycigiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVQSVBFOworCX0KKwlpZiAodXZkLT5kZWJ1ZyA+IDEpIHsKKwkJaW5mbygiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIHN1Y2Nlc3NmdWwiLCBfX0ZVTkNUSU9OX18pOworCX0KKwlpZiAodXZkLT5kZXYgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmRldiA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5mbygiJXMgb24gL2Rldi92aWRlbyVkOiBjYW52YXM9JXMgdmlkZW9zaXplPSVzIiwKKwkgICAgICh1dmQtPmhhbmRsZSAhPSBOVUxMKSA/IHV2ZC0+aGFuZGxlLT5kcnZOYW1lIDogIj8/PyIsCisJICAgICB1dmQtPnZkZXYubWlub3IsIHRtcDIsIHRtcDEpOworCisJdXNiX2dldF9kZXYodXZkLT5kZXYpOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdXZkICp1dmQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisKKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzaXplID4gKCgoVVNCVklERU9fTlVNRlJBTUVTICogdXZkLT5tYXhfZnJhbWVfc2l6ZSkgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcyA9ICh1bnNpZ25lZCBsb25nKSB1dmQtPmZidWY7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogdXNidmlkZW9fdjRsX29wZW4oKQorICoKKyAqIFRoaXMgaXMgcGFydCBvZiBWaWRlbyA0IExpbnV4IEFQSS4gVGhlIGRyaXZlciBjYW4gYmUgb3BlbmVkIGJ5IG9uZQorICogY2xpZW50IG9ubHkgKGNoZWNrcyBpbnRlcm5hbCBjb3VudGVyICd1dmRzZXInKS4gVGhlIHByb2NlZHVyZQorICogdGhlbiBhbGxvY2F0ZXMgYnVmZmVycyBuZWVkZWQgZm9yIHZpZGVvIHByb2Nlc3NpbmcuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIFJld3JvdGUsIG1vdmVkIHNjcmF0Y2ggYnVmZmVyIGFsbG9jYXRpb24gaGVyZS4gTm93IHRoZQorICogICAgICAgICAgICAgY2FtZXJhIGlzIGFsc28gaW5pdGlhbGl6ZWQgaGVyZSAob25jZSBwZXIgY29ubmVjdCksIGF0CisgKiAgICAgICAgICAgICBleHBlbnNlIG9mIFY0TCBjbGllbnQgKGl0IHdhaXRzIG9uIG9wZW4oKSBjYWxsKS4KKyAqIDI3LUphbi0yMDAwIFVzZWQgVVNCVklERU9fTlVNU0JVRiBhcyBudW1iZXIgb2YgVVJCIGJ1ZmZlcnMuCisgKiAyNC1NYXktMjAwMCBDb3JyZWN0ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiAoTU9EX3h4eF9VU0VfQ09VTlQpLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHV2ZCAqdXZkID0gKHN0cnVjdCB1dmQgKikgZGV2OworCWNvbnN0IGludCBzYl9zaXplID0gRlJBTUVTX1BFUl9ERVNDICogdXZkLT5pc29fcGFja2V0X2xlbjsKKwlpbnQgaSwgZXJyQ29kZSA9IDA7CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzKCQlcCkiLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwl1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpOworCWRvd24oJnV2ZC0+bG9jayk7CisKKwlpZiAodXZkLT51c2VyKSB7CisJCWVycigiJXM6IFNvbWVvbmUgdHJpZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UhIiwgX19GVU5DVElPTl9fKTsKKwkJZXJyQ29kZSA9IC1FQlVTWTsKKwl9IGVsc2UgeworCQkvKiBDbGVhciBzdGF0aXN0aWNzICovCisJCW1lbXNldCgmdXZkLT5zdGF0cywgMCwgc2l6ZW9mKHV2ZC0+c3RhdHMpKTsKKworCQkvKiBDbGVhbiBwb2ludGVycyBzbyB3ZSBrbm93IGlmIHdlIGFsbG9jYXRlZCBzb21ldGhpbmcgKi8KKwkJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspCisJCQl1dmQtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZnJhbWUgYnVmZmVycyAqLworCQl1dmQtPmZidWZfc2l6ZSA9IFVTQlZJREVPX05VTUZSQU1FUyAqIHV2ZC0+bWF4X2ZyYW1lX3NpemU7CisJCXV2ZC0+ZmJ1ZiA9IHVzYnZpZGVvX3J2bWFsbG9jKHV2ZC0+ZmJ1Zl9zaXplKTsKKwkJUmluZ1F1ZXVlX0FsbG9jYXRlKCZ1dmQtPmRwLCBSSU5HX1FVRVVFX1NJWkUpOworCQlpZiAoKHV2ZC0+ZmJ1ZiA9PSBOVUxMKSB8fAorCQkgICAgKCFSaW5nUXVldWVfSXNBbGxvY2F0ZWQoJnV2ZC0+ZHApKSkgeworCQkJZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGZidWYgb3IgZHAiLCBfX0ZVTkNUSU9OX18pOworCQkJZXJyQ29kZSA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQkvKiBBbGxvY2F0ZSBhbGwgYnVmZmVycyAqLworCQkJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1GUkFNRVM7IGkrKykgeworCQkJCXV2ZC0+ZnJhbWVbaV0uZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworCQkJCXV2ZC0+ZnJhbWVbaV0uZGF0YSA9IHV2ZC0+ZmJ1ZiArIGkqKHV2ZC0+bWF4X2ZyYW1lX3NpemUpOworCQkJCS8qCisJCQkJICogU2V0IGRlZmF1bHQgc2l6ZXMgaW4gY2FzZSBJT0NUTCAoVklESU9DTUNBUFRVUkUpCisJCQkJICogaXMgbm90IHVzZWQgKHVzaW5nIHJlYWQoKSBpbnN0ZWFkKS4KKwkJCQkgKi8KKwkJCQl1dmQtPmZyYW1lW2ldLmNhbnZhcyA9IHV2ZC0+Y2FudmFzOworCQkJCXV2ZC0+ZnJhbWVbaV0uc2VxUmVhZF9JbmRleCA9IDA7CisJCQl9CisJCQlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQkJCXV2ZC0+c2J1ZltpXS5kYXRhID0ga21hbGxvYyhzYl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAodXZkLT5zYnVmW2ldLmRhdGEgPT0gTlVMTCkgeworCQkJCQllcnJDb2RlID0gLUVOT01FTTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChlcnJDb2RlICE9IDApIHsKKwkJCS8qIEhhdmUgdG8gZnJlZSBhbGwgdGhhdCBtZW1vcnkgKi8KKwkJCWlmICh1dmQtPmZidWYgIT0gTlVMTCkgeworCQkJCXVzYnZpZGVvX3J2ZnJlZSh1dmQtPmZidWYsIHV2ZC0+ZmJ1Zl9zaXplKTsKKwkJCQl1dmQtPmZidWYgPSBOVUxMOworCQkJfQorCQkJUmluZ1F1ZXVlX0ZyZWUoJnV2ZC0+ZHApOworCQkJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJCQlpZiAodXZkLT5zYnVmW2ldLmRhdGEgIT0gTlVMTCkgeworCQkJCQlrZnJlZSAodXZkLT5zYnVmW2ldLmRhdGEpOworCQkJCQl1dmQtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogSWYgc28gZmFyIG5vIGVycm9ycyB0aGVuIHdlIHNoYWxsIHN0YXJ0IHRoZSBjYW1lcmEgKi8KKwlpZiAoZXJyQ29kZSA9PSAwKSB7CisJCS8qIFN0YXJ0IGRhdGEgcHVtcCBpZiB3ZSBoYXZlIHZhbGlkIGVuZHBvaW50ICovCisJCWlmICh1dmQtPnZpZGVvX2VuZHAgIT0gMCkKKwkJCWVyckNvZGUgPSBHRVRfQ0FMTEJBQ0sodXZkLCBzdGFydERhdGFQdW1wKSh1dmQpOworCQlpZiAoZXJyQ29kZSA9PSAwKSB7CisJCQlpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBzZXR1cE9uT3BlbikpIHsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCQkJCWluZm8oIiVzOiBzZXR1cE9uT3BlbiBjYWxsYmFjayIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZXJyQ29kZSA9IEdFVF9DQUxMQkFDSyh1dmQsIHNldHVwT25PcGVuKSh1dmQpOworCQkJCWlmIChlcnJDb2RlIDwgMCkgeworCQkJCQllcnIoIiVzOiBzZXR1cE9uT3BlbiBjYWxsYmFjayBmYWlsZWQgKCVkLikuIiwKKwkJCQkJICAgIF9fRlVOQ1RJT05fXywgZXJyQ29kZSk7CisJCQkJfSBlbHNlIGlmICh1dmQtPmRlYnVnID4gMSkgeworCQkJCQlpbmZvKCIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2sgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJfQorCQkJfQorCQkJaWYgKGVyckNvZGUgPT0gMCkgeworCQkJCXV2ZC0+c2V0dGluZ3NBZGp1c3RlZCA9IDA7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQkJCQlpbmZvKCIlczogT3BlbiBzdWNjZWVkZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJCQl1dmQtPnVzZXIrKzsKKwkJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSB1dmQ7CisJCQl9CisJCX0KKwl9CisJdXAoJnV2ZC0+bG9jayk7CisJaWYgKGVyckNvZGUgIT0gMCkKKwkJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKKwlpZiAodXZkLT5kZWJ1ZyA+IDApCisJCWluZm8oIiVzOiBSZXR1cm5pbmcgJWQuIiwgX19GVU5DVElPTl9fLCBlcnJDb2RlKTsKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworLyoKKyAqIHVzYnZpZGVvX3Y0bF9jbG9zZSgpCisgKgorICogVGhpcyBpcyBwYXJ0IG9mIFZpZGVvIDQgTGludXggQVBJLiBUaGUgcHJvY2VkdXJlCisgKiBzdG9wcyBzdHJlYW1pbmcgYW5kIGRlYWxsb2NhdGVzIGFsbCBidWZmZXJzIHRoYXQgd2VyZSBlYXJsaWVyCisgKiBhbGxvY2F0ZWQgaW4gdXNidmlkZW9fdjRsX29wZW4oKS4KKyAqCisgKiBIaXN0b3J5OgorICogMjItSmFuLTIwMDAgTW92ZWQgc2NyYXRjaCBidWZmZXIgZGVhbGxvY2F0aW9uIGhlcmUuCisgKiAyNy1KYW4tMjAwMCBVc2VkIFVTQlZJREVPX05VTVNCVUYgYXMgbnVtYmVyIG9mIFVSQiBidWZmZXJzLgorICogMjQtTWF5LTIwMDAgTW92ZWQgTU9EX0RFQ19VU0VfQ09VTlQgb3V0c2lkZSBvZiBjb2RlIHRoYXQgY2FuIHNsZWVwLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV2ZCAqdXZkID0gKHN0cnVjdCB1dmQgKikgZGV2OworCWludCBpOworCisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlcygkJXApIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJZG93bigmdXZkLT5sb2NrKTsKKwlHRVRfQ0FMTEJBQ0sodXZkLCBzdG9wRGF0YVB1bXApKHV2ZCk7CisJdXNidmlkZW9fcnZmcmVlKHV2ZC0+ZmJ1ZiwgdXZkLT5mYnVmX3NpemUpOworCXV2ZC0+ZmJ1ZiA9IE5VTEw7CisJUmluZ1F1ZXVlX0ZyZWUoJnV2ZC0+ZHApOworCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJa2ZyZWUodXZkLT5zYnVmW2ldLmRhdGEpOworCQl1dmQtPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJfQorCisjaWYgVVNCVklERU9fUkVQT1JUX1NUQVRTCisJdXNidmlkZW9fUmVwb3J0U3RhdGlzdGljcyh1dmQpOworI2VuZGlmICAgIAorCisJdXZkLT51c2VyLS07CisJaWYgKHV2ZC0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQkJaW5mbygidXNidmlkZW9fdjRsX2Nsb3NlOiBGaW5hbCBkaXNjb25uZWN0LiIpOworCQl1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHV2ZCk7CisJfQorCXVwKCZ1dmQtPmxvY2spOworCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzOiBDb21wbGV0ZWQuIiwgX19GVU5DVElPTl9fKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKgorICogdXNidmlkZW9fdjRsX2lvY3RsKCkKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgVmlkZW8gNCBMaW51eCBBUEkuIFRoZSBwcm9jZWR1cmUgaGFuZGxlcyBpb2N0bCgpIGNhbGxzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyMi1KYW4tMjAwMCBDb3JyZWN0ZWQgVklESU9DU1BJQ1QgdG8gcmVqZWN0IHVuc3VwcG9ydGVkIHNldHRpbmdzLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB1dmQgKnV2ZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBWSURJT0NHQ0FQOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqYiA9IGFyZzsKKwkJCSpiID0gdXZkLT52Y2FwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHQ0hBTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCQkqdiA9IHV2ZC0+dmNoYW47CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NDSEFOOgorCQl7CQorCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKKwkJCSpwaWMgPSB1dmQtPnZwaWM7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NQSUNUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOworCQkJLyoKKwkJCSAqIFVzZSB0ZW1wb3JhcnkgJ3ZpZGVvX3BpY3R1cmUnIHN0cnVjdHVyZSB0byBwcmVzZXJ2ZSBvdXIKKwkJCSAqIG93biBzZXR0aW5ncyAoc3VjaCBhcyBjb2xvciBkZXB0aCwgcGFsZXR0ZSkgdGhhdCB3ZQorCQkJICogYXJlbid0IGFsbG93aW5nIGV2ZXJ5b25lIChWNEwgY2xpZW50KSB0byBjaGFuZ2UuCisJCQkgKi8KKwkJCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gcGljLT5icmlnaHRuZXNzOworCQkJdXZkLT52cGljLmh1ZSA9IHBpYy0+aHVlOworCQkJdXZkLT52cGljLmNvbG91ciA9IHBpYy0+Y29sb3VyOworCQkJdXZkLT52cGljLmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKKwkJCXV2ZC0+c2V0dGluZ3NBZGp1c3RlZCA9IDA7CS8qIFdpbGwgZm9yY2UgbmV3IHNldHRpbmdzICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCisJCQlpZihWQUxJRF9DQUxMQkFDSyh1dmQsIHNldFZpZGVvTW9kZSkpIHsKKwkJCQlyZXR1cm4gR0VUX0NBTExCQUNLKHV2ZCwgc2V0VmlkZW9Nb2RlKSh1dmQsIHZ3KTsKKwkJCX0KKworCQkJaWYgKHZ3LT5mbGFncykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh2dy0+Y2xpcGNvdW50KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHZ3LT53aWR0aCAhPSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodnctPmhlaWdodCAhPSBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DR1dJTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJCXZ3LT54ID0gMDsKKwkJCXZ3LT55ID0gMDsKKwkJCXZ3LT53aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+dmlkZW9zaXplKTsKKwkJCXZ3LT5oZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPnZpZGVvc2l6ZSk7CisJCQl2dy0+Y2hyb21ha2V5ID0gMDsKKwkJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZQUykpCisJCQkJdnctPmZsYWdzID0gR0VUX0NBTExCQUNLKHV2ZCwgZ2V0RlBTKSh1dmQpOworCQkJZWxzZSAKKwkJCQl2dy0+ZmxhZ3MgPSAxMDsgLyogRklYTUU6IGRvIGJldHRlciEgKi8KKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DR01CVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKKwkJCWludCBpOworCisJCQltZW1zZXQodm0sIDAsIHNpemVvZigqdm0pKTsKKwkJCXZtLT5zaXplID0gdXZkLT5tYXhfZnJhbWVfc2l6ZSAqIFVTQlZJREVPX05VTUZSQU1FUzsKKwkJCXZtLT5mcmFtZXMgPSBVU0JWSURFT19OVU1GUkFNRVM7CisJCQlmb3IoaSA9IDA7IGkgPCBVU0JWSURFT19OVU1GUkFNRVM7IGkrKykgCisJCQkgIHZtLT5vZmZzZXRzW2ldID0gaSAqIHV2ZC0+bWF4X2ZyYW1lX3NpemU7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DTUNBUFRVUkU6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkgeworCQkJCWluZm8oIlZJRElPQ01DQVBUVVJFOiBmcmFtZT0lZC4gc2l6ZT0lZHglZCwgZm9ybWF0PSVkLiIsCisJCQkJICAgICB2bS0+ZnJhbWUsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwgdm0tPmZvcm1hdCk7CisJCQl9CisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHN1cHBvcnRlZC4gSWYgdGhlIHJlcXVlc3RvcgorCQkJICogcmVxdWVzdHMgdG9vIGJpZyBhIGZyYW1lIHRoZW4gd2UgbWF5IGJlIHRyaWNrZWQgaW50byBhY2Nlc3NpbmcKKwkJCSAqIG91dHNpZGUgb2Ygb3duIHByZWFsbG9jYXRlZCBmcmFtZSBidWZmZXIgKGluIHV2ZC0+ZnJhbWUpLgorCQkJICogVGhpcyB3aWxsIGNhdXNlIG9vcHMgb3IgYSBzZWN1cml0eSBob2xlLiBUaGVvcmV0aWNhbGx5LCB3ZQorCQkJICogY291bGQgb25seSBjbGFtcCB0aGUgc2l6ZSBkb3duIHRvIGFjY2VwdGFibGUgYm91bmRzLCBidXQgdGhlbgorCQkJICogd2UnZCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGluc2VydCBvdXIgc21hbGxlciBidWZmZXIgaW50bworCQkJICogbGFyZ2VyIGNhbGxlcidzIGJ1ZmZlci4uLiB0aGlzIGlzIG5vdCBhbiBlYXN5IHF1ZXN0aW9uLiBTbyB3ZQorCQkJICogaGVyZSBqdXN0IGZsYXRseSByZWplY3QgdG9vIGxhcmdlIHJlcXVlc3RzLCBhc3N1bWluZyB0aGF0IHRoZQorCQkJICogY2FsbGVyIHdpbGwgcmVzdWJtaXQgd2l0aCBzbWFsbGVyIHNpemUuIENhbGxlcnMgc2hvdWxkIGtub3cKKwkJCSAqIHdoYXQgc2l6ZSB3ZSBzdXBwb3J0IChyZXR1cm5lZCBieSBWSURJT0NHQ0FQKS4gSG93ZXZlciB2aWRjYXQsCisJCQkgKiBmb3Igb25lLCBkb2VzIG5vdCBjYXJlIGFuZCBhbGxvd3MgdG8gYXNrIGZvciBhbnkgc2l6ZS4KKwkJCSAqLworCQkJaWYgKCh2bS0+d2lkdGggPiBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykpIHx8CisJCQkgICAgKHZtLT5oZWlnaHQgPiBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykpKSB7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPiAwKSB7CisJCQkJCWluZm8oIlZJRElPQ01DQVBUVVJFOiBTaXplPSVkeCVkIHRvbyBsYXJnZTsgIgorCQkJCQkgICAgICJhbGxvd2VkIG9ubHkgdXAgdG8gJWxkeCVsZCIsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwKKwkJCQkJICAgICBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcyksIFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSk7CisJCQkJfQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJLyogQ2hlY2sgaWYgdGhlIHBhbGV0dGUgaXMgc3VwcG9ydGVkICovCisJCQlpZiAoKCgxTCA8PCB2bS0+Zm9ybWF0KSAmIHV2ZC0+cGFsZXR0ZUJpdHMpID09IDApIHsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKKwkJCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IGZvcm1hdD0lZC4gbm90IHN1cHBvcnRlZCIKKwkJCQkJICAgICAiIChwYWxldHRlQml0cz0kJTA4bHgpIiwKKwkJCQkJICAgICB2bS0+Zm9ybWF0LCB1dmQtPnBhbGV0dGVCaXRzKTsKKwkJCQl9CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoKHZtLT5mcmFtZSA8IDApIHx8ICh2bS0+ZnJhbWUgPj0gVVNCVklERU9fTlVNRlJBTUVTKSkgeworCQkJCWVycigiVklESU9DTUNBUFRVUkU6IHZtLmZyYW1lPSVkLiAhRSBbMC0lZF0iLCB2bS0+ZnJhbWUsIFVTQlZJREVPX05VTUZSQU1FUy0xKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmICh1dmQtPmZyYW1lW3ZtLT5mcmFtZV0uZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0dyYWJiaW5nKSB7CisJCQkJLyogTm90IGFuIGVycm9yIC0gY2FuIGhhcHBlbiAqLworCQkJfQorCQkJdXZkLT5mcmFtZVt2bS0+ZnJhbWVdLnJlcXVlc3QgPSBWSURFT1NJWkUodm0tPndpZHRoLCB2bS0+aGVpZ2h0KTsKKwkJCXV2ZC0+ZnJhbWVbdm0tPmZyYW1lXS5wYWxldHRlID0gdm0tPmZvcm1hdDsKKworCQkJLyogTWFyayBpdCBhcyByZWFkeSAqLworCQkJdXZkLT5mcmFtZVt2bS0+ZnJhbWVdLmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX1JlYWR5OworCisJCQlyZXR1cm4gdXNidmlkZW9fTmV3RnJhbWUodXZkLCB2bS0+ZnJhbWUpOworCQl9CisJCWNhc2UgVklESU9DU1lOQzoKKwkJeworCQkJaW50ICpmcmFtZU51bSA9IGFyZzsKKwkJCWludCByZXQ7CisKKwkJCWlmICgqZnJhbWVOdW0gPCAwIHx8ICpmcmFtZU51bSA+PSBVU0JWSURFT19OVU1GUkFNRVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJCisJCQlpZiAodXZkLT5kZWJ1ZyA+PSAxKQorCQkJCWluZm8oIlZJRElPQ1NZTkM6IHN5bmNpbmcgdG8gZnJhbWUgJWQuIiwgKmZyYW1lTnVtKTsKKwkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfTk9fREVDT0RJTkcpCisJCQkJcmV0ID0gdXNidmlkZW9fR2V0RnJhbWUodXZkLCAqZnJhbWVOdW0pOworCQkJZWxzZSBpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBnZXRGcmFtZSkpIHsKKwkJCQlyZXQgPSBHRVRfQ0FMTEJBQ0sodXZkLCBnZXRGcmFtZSkodXZkLCAqZnJhbWVOdW0pOworCQkJCWlmICgocmV0IDwgMCkgJiYgKHV2ZC0+ZGVidWcgPj0gMSkpIHsKKwkJCQkJZXJyKCJWSURJT0NTWU5DOiBnZXRGcmFtZSgpIHJldHVybmVkICVkLiIsIHJldCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcnIoIlZJRElPQ1NZTkM6IGdldEZyYW1lIGlzIG5vdCBzZXQiKTsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJfQorCisJCQkvKgorCQkJICogVGhlIGZyYW1lIGlzIGluIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLiBSZWxlYXNlIGl0CisJCQkgKiByaWdodCBub3cgYmVjYXVzZSBpdHMgZGF0YSBpcyBhbHJlYWR5IG1hcHBlZCBpbnRvCisJCQkgKiB0aGUgdXNlciBzcGFjZSBhbmQgaXQncyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8KKwkJCSAqIG1ha2UgdXNlIG9mIGl0IHVudGlsIGl0IGFza3MgZm9yIGFub3RoZXIgZnJhbWUuCisJCQkgKi8KKwkJCXV2ZC0+ZnJhbWVbKmZyYW1lTnVtXS5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNhc2UgVklESU9DR0ZCVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCQltZW1zZXQodmIsIDAsIHNpemVvZigqdmIpKTsKKyAJCQlyZXR1cm4gMDsKKyAJCX0KKwkJY2FzZSBWSURJT0NLRVk6CisJCQlyZXR1cm4gMDsKKworCQljYXNlIFZJRElPQ0NBUFRVUkU6CisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljYXNlIFZJRElPQ1NGQlVGOgorCisJCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ1NUVU5FUjoKKworCQljYXNlIFZJRElPQ0dGUkVROgorCQljYXNlIFZJRElPQ1NGUkVROgorCisJCWNhc2UgVklESU9DR0FVRElPOgorCQljYXNlIFZJRElPQ1NBVURJTzoKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2J2aWRlb192NGxfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB1c2J2aWRlb192NGxfZG9faW9jdGwpOworfQorCisvKgorICogdXNidmlkZW9fdjRsX3JlYWQoKQorICoKKyAqIFRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZi4gV2Ugc2ltcGx5IGFzayBmb3IgYSBmcmFtZSBhbmQgd2hlbiBpdAorICogYXJyaXZlcyBjb3B5IGFsbCB0aGUgdmlkZW8gZGF0YSBmcm9tIGl0IGludG8gdXNlciBzcGFjZS4gVGhlcmUgaXMKKyAqIG5vIG9idmlvdXMgbmVlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZC4KKyAqCisgKiBIaXN0b3J5OgorICogMjAtT2N0LTIwMDAgQ3JlYXRlZC4KKyAqIDAxLU5vdi0yMDAwIEFkZGVkIG11dGV4ICh1dmQtPmxvY2spLgorICovCitzdGF0aWMgc3NpemVfdCB1c2J2aWRlb192NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHV2ZCAqdXZkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBub2Jsb2NrID0gZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CisJaW50IGZybXggPSAtMSwgaTsKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lOworCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSB8fCAoYnVmID09IE5VTEwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh1dmQtPmRlYnVnID49IDEpCisJCWluZm8oIiVzOiAlWmQuIGJ5dGVzLCBub2Jsb2NrPSVkLiIsIF9fRlVOQ1RJT05fXywgY291bnQsIG5vYmxvY2spOworCisJZG93bigmdXZkLT5sb2NrKTsJCisKKwkvKiBTZWUgaWYgYSBmcmFtZSBpcyBjb21wbGV0ZWQsIHRoZW4gdXNlIGl0LiAqLworCWZvcihpID0gMDsgaSA8IFVTQlZJREVPX05VTUZSQU1FUzsgaSsrKSB7CisJCWlmICgodXZkLT5mcmFtZVtpXS5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfRG9uZSkgfHwKKwkJICAgICh1dmQtPmZyYW1lW2ldLmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9Eb25lX0hvbGQpIHx8CisJCSAgICAodXZkLT5mcmFtZVtpXS5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfRXJyb3IpKSB7CisJCQlmcm14ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRklYTUU6IElmIHdlIGRvbid0IHN0YXJ0IGEgZnJhbWUgaGVyZSB0aGVuIHdobyBldmVyIGRvZXM/ICovCisJaWYgKG5vYmxvY2sgJiYgKGZybXggPT0gLTEpKSB7CisJCWNvdW50ID0gLUVBR0FJTjsKKwkJZ290byByZWFkX2RvbmU7CisJfQorCisJLyoKKwkgKiBJZiBubyBGcmFtZVN0YXRlX0RvbmUsIGxvb2sgZm9yIGEgRnJhbWVTdGF0ZV9HcmFiYmluZyBzdGF0ZS4KKwkgKiBTZWUgaWYgYSBmcmFtZSBpcyBpbiBwcm9jZXNzIChncmFiYmluZyksIHRoZW4gdXNlIGl0LgorCSAqIFdlIHdpbGwgbmVlZCB0byB3YWl0IHVudGlsIGl0IGJlY29tZXMgY29va2VkLCBvZiBjb3Vyc2UuCisJICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJZm9yKGkgPSAwOyBpIDwgVVNCVklERU9fTlVNRlJBTUVTOyBpKyspIHsKKwkJCWlmICh1dmQtPmZyYW1lW2ldLmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9HcmFiYmluZykgeworCQkJCWZybXggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJZiBubyBmcmFtZSBpcyBhY3RpdmUsIHN0YXJ0IG9uZS4gV2UgZG9uJ3QgY2FyZSB3aGljaCBvbmUKKwkgKiBpdCB3aWxsIGJlLCBzbyAjMCBpcyBhcyBnb29kIGFzIGFueS4KKwkgKiBJbiByZWFkIGFjY2VzcyBtb2RlIHdlIGRvbid0IGhhdmUgY29udmVuaWVuY2Ugb2YgVklESU9DTUNBUFRVUkUKKwkgKiB0byBzcGVjaWZ5IHRoZSByZXF1ZXN0ZWQgcGFsZXR0ZSAodmlkZW8gZm9ybWF0KSBvbiBwZXItZnJhbWUKKwkgKiBiYXNpcy4gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgdG8gcmV0dXJuIGRhdGEgaW4gLXNvbWUtIGZvcm1hdAorCSAqIGFuZCBqdXN0IGhvcGUgdGhhdCB0aGUgY2xpZW50IGtub3dzIHdoYXQgdG8gZG8gd2l0aCBpdC4KKwkgKiBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgY29uZmlndXJlZCBpbiB1dmQtPmRlZmF1bHRQYWxldHRlIGZpZWxkCisJICogYXMgb25lIG9mIFZJREVPX1BBTEVUVEVfeHh4IHZhbHVlcy4gV2Ugc3R1ZmYgaXQgaW50byB0aGUgbmV3CisJICogZnJhbWUgYW5kIGluaXRpYXRlIHRoZSBmcmFtZSBmaWxsaW5nIHByb2Nlc3MuCisJICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJaWYgKHV2ZC0+ZGVmYXVsdFBhbGV0dGUgPT0gMCkgeworCQkJZXJyKCIlczogTm8gZGVmYXVsdCBwYWxldHRlOyBkb24ndCBrbm93IHdoYXQgdG8gZG8hIiwgX19GVU5DVElPTl9fKTsKKwkJCWNvdW50ID0gLUVGQVVMVDsKKwkJCWdvdG8gcmVhZF9kb25lOworCQl9CisJCWZybXggPSAwOworCQkvKgorCQkgKiBXZSBoYXZlIG5vIHBlci1mcmFtZSBjb250cm9sIG92ZXIgdmlkZW8gc2l6ZS4KKwkJICogVGhlcmVmb3JlIHdlIG9ubHkgY2FuIHVzZSB3aGF0ZXZlciBzaXplIHdhcworCQkgKiBzcGVjaWZpZWQgYXMgZGVmYXVsdC4KKwkJICovCisJCXV2ZC0+ZnJhbWVbZnJteF0ucmVxdWVzdCA9IHV2ZC0+dmlkZW9zaXplOworCQl1dmQtPmZyYW1lW2ZybXhdLnBhbGV0dGUgPSB1dmQtPmRlZmF1bHRQYWxldHRlOworCQl1dmQtPmZyYW1lW2ZybXhdLmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX1JlYWR5OworCQl1c2J2aWRlb19OZXdGcmFtZSh1dmQsIGZybXgpOworCQkvKiBOb3cgZnJhbWUgMCBpcyBzdXBwb3NlZCB0byBzdGFydCBmaWxsaW5nLi4uICovCisJfQorCisJLyoKKwkgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBhY3RpdmUgZnJhbWUuIEl0IGlzIGVpdGhlciBwcmV2aW91c2x5CisJICogY29tcGxldGVkIGZyYW1lIG9yIGZyYW1lIGluIHByb2dyZXNzIGJ1dCBub3QgY29tcGxldGVkIHlldC4KKwkgKi8KKwlmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZybXhdOworCisJLyoKKwkgKiBTaXQgYmFjayAmIHdhaXQgdW50aWwgdGhlIGZyYW1lIGdldHMgZmlsbGVkIGFuZCBwb3N0cHJvY2Vzc2VkLgorCSAqIElmIHdlIGZhaWwgdG8gZ2V0IHRoZSBwaWN0dXJlIFtpbiB0aW1lXSB0aGVuIHJldHVybiB0aGUgZXJyb3IuCisJICogSW4gdGhpcyBjYWxsIHdlIHNwZWNpZnkgdGhhdCB3ZSB3YW50IHRoZSBmcmFtZSB0byBiZSB3YWl0ZWQgZm9yLAorCSAqIHBvc3Rwcm9jZXNzZWQgYW5kIHN3aXRjaGVkIGludG8gRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuIFRoaXMKKwkgKiBzdGF0ZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGZyYW1lIGFzICJmdWxseSBjb21wbGV0ZWQiIGJldHdlZW4KKwkgKiBzdWJzZXF1ZW50IHBhcnRpYWwgcmVhZHMgb2YgdGhlIHNhbWUgZnJhbWUuCisJICovCisJaWYgKGZyYW1lLT5mcmFtZVN0YXRlICE9IEZyYW1lU3RhdGVfRG9uZV9Ib2xkKSB7CisJCWxvbmcgcnYgPSAtRUZBVUxUOworCQlpZiAodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKQorCQkJcnYgPSB1c2J2aWRlb19HZXRGcmFtZSh1dmQsIGZybXgpOworCQllbHNlIGlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZyYW1lKSkKKwkJCXJ2ID0gR0VUX0NBTExCQUNLKHV2ZCwgZ2V0RnJhbWUpKHV2ZCwgZnJteCk7CisJCWVsc2UKKwkJCWVycigiZ2V0RnJhbWUgaXMgbm90IHNldCIpOworCQlpZiAoKHJ2ICE9IDApIHx8IChmcmFtZS0+ZnJhbWVTdGF0ZSAhPSBGcmFtZVN0YXRlX0RvbmVfSG9sZCkpIHsKKwkJCWNvdW50ID0gcnY7CisJCQlnb3RvIHJlYWRfZG9uZTsKKwkJfQorCX0KKworCS8qCisJICogQ29weSBieXRlcyB0byB1c2VyIHNwYWNlLiBXZSBhbGxvdyBmb3IgcGFydGlhbCByZWFkcywgd2hpY2gKKwkgKiBtZWFucyB0aGF0IHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNhbiByZXF1ZXN0IHJlYWQgbGVzcyB0aGFuCisJICogdGhlIGZ1bGwgZnJhbWUgc2l6ZS4gSXQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIHRvIGlzc3VlCisJICogc3Vic2VxdWVudCBjYWxscyB1bnRpbCBlbnRpcmUgZnJhbWUgaXMgcmVhZC4KKwkgKgorCSAqIEZpcnN0IHRoaW5ncyBmaXJzdCwgbWFrZSBzdXJlIHdlIGRvbid0IGNvcHkgbW9yZSB0aGFuIHdlCisJICogaGF2ZSAtIGV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIG1vcmUuIFRoYXQgd291bGQgYmUKKwkgKiBhIGJpZyBzZWN1cml0eSBlbWJhcmFzc21lbnQhCisJICovCisJaWYgKChjb3VudCArIGZyYW1lLT5zZXFSZWFkX0luZGV4KSA+IGZyYW1lLT5zZXFSZWFkX0xlbmd0aCkKKwkJY291bnQgPSBmcmFtZS0+c2VxUmVhZF9MZW5ndGggLSBmcmFtZS0+c2VxUmVhZF9JbmRleDsKKworCS8qCisJICogQ29weSByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEgdG8gdXNlciBzcGFjZS4gV2Ugc3RhcnQKKwkgKiBjb3B5aW5nIGZyb20gdGhlIHBvc2l0aW9uIHdoZXJlIHdlIGxhc3QgbGVmdCBpdCwgd2hpY2gKKwkgKiB3aWxsIGJlIHplcm8gZm9yIGEgbmV3IGZyYW1lIChub3QgcmVhZCBiZWZvcmUpLgorCSAqLworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZS0+ZGF0YSArIGZyYW1lLT5zZXFSZWFkX0luZGV4LCBjb3VudCkpIHsKKwkJY291bnQgPSAtRUZBVUxUOworCQlnb3RvIHJlYWRfZG9uZTsKKwl9CisKKwkvKiBVcGRhdGUgbGFzdCByZWFkIHBvc2l0aW9uICovCisJZnJhbWUtPnNlcVJlYWRfSW5kZXggKz0gY291bnQ7CisJaWYgKHV2ZC0+ZGVidWcgPj0gMSkgeworCQllcnIoIiVzOiB7Y29weX0gY291bnQgdXNlZD0lWmQsIG5ldyBzZXFSZWFkX0luZGV4PSVsZCIsCisJCQlfX0ZVTkNUSU9OX18sIGNvdW50LCBmcmFtZS0+c2VxUmVhZF9JbmRleCk7CisJfQorCisJLyogRmluYWxseSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgZG9uZSB3aXRoIGFuZCAicmVsZWFzZSIgaXQgKi8KKwlpZiAoZnJhbWUtPnNlcVJlYWRfSW5kZXggPj0gZnJhbWUtPnNlcVJlYWRfTGVuZ3RoKSB7CisJCS8qIEFsbCBkYXRhIGhhcyBiZWVuIHJlYWQgKi8KKwkJZnJhbWUtPnNlcVJlYWRfSW5kZXggPSAwOworCisJCS8qIE1hcmsgaXQgYXMgYXZhaWxhYmxlIHRvIGJlIHVzZWQgYWdhaW4uICovCisJCXV2ZC0+ZnJhbWVbZnJteF0uZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworCQlpZiAodXNidmlkZW9fTmV3RnJhbWUodXZkLCAoZnJteCArIDEpICUgVVNCVklERU9fTlVNRlJBTUVTKSkgeworCQkJZXJyKCIlczogdXNidmlkZW9fTmV3RnJhbWUgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CityZWFkX2RvbmU6CisJdXAoJnV2ZC0+bG9jayk7CQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIE1ha2UgYWxsIG9mIHRoZSBibG9ja3Mgb2YgZGF0YSBjb250aWd1b3VzCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fQ29tcHJlc3NJc29jaHJvbm91cyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwljaGFyICpjZGF0YTsKKwlpbnQgaSwgdG90bGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IG4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCWludCBzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCisJCWNkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlcnJvcmVkIHBhY2tldHMgKi8KKwkJaWYgKHN0IDwgMCkgeworCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKKwkJCQllcnIoIkRhdGEgZXJyb3I6IHBhY2tldD0lZC4gbGVuPSVkLiBzdGF0dXM9JWQuIiwgaSwgbiwgc3QpOworCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIERldGVjdCBhbmQgaWdub3JlIGVtcHR5IHBhY2tldHMgKi8KKwkJaWYgKG4gPD0gMCkgeworCQkJdXZkLT5zdGF0cy5pc29fc2tpcF9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKwkJdG90bGVuICs9IG47CS8qIExpdHRsZSBsb2NhbCBhY2NvdW50aW5nICovCisJCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBjZGF0YSwgbik7CisJfQorCXJldHVybiB0b3RsZW47Cit9CisKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX0lzb2NJcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaSwgcmV0LCBsZW47CisJc3RydWN0IHV2ZCAqdXZkID0gdXJiLT5jb250ZXh0OworCisJLyogV2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyBpZiB3ZSBhcmUgYWJvdXQgdG8gYmUgcmVtb3ZlZCEgKi8KKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm47CisjaWYgMAorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCWluZm8oInVyYj0kJXAgc3RhdHVzPSVkLiBlcnJjb3VudD0lZC4gbGVuZ3RoPSVkLiIsCisJCSAgICAgdXJiLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlzdGF0aWMgaW50IGMgPSAwOworCQlpZiAoYysrICUgMTAwID09IDApCisJCQlpbmZvKCJObyBJc29jIGRhdGEiKTsKKwl9CisjZW5kaWYKKworCWlmICghdXZkLT5zdHJlYW1pbmcpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKKwkJCWluZm8oIk5vdCBzdHJlYW1pbmcsIGJ1dCBpbnRlcnJ1cHQhIik7CisJCXJldHVybjsKKwl9CisJCisJdXZkLT5zdGF0cy51cmJfY291bnQrKzsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IDApCisJCWdvdG8gdXJiX2RvbmVfd2l0aDsKKworCS8qIENvcHkgdGhlIGRhdGEgcmVjZWl2ZWQgaW50byByaW5nIHF1ZXVlICovCisJbGVuID0gdXNidmlkZW9fQ29tcHJlc3NJc29jaHJvbm91cyh1dmQsIHVyYik7CisJdXZkLT5zdGF0cy51cmJfbGVuZ3RoID0gbGVuOworCWlmIChsZW4gPD0gMCkKKwkJZ290byB1cmJfZG9uZV93aXRoOworCisJLyogSGVyZSB3ZSBnb3Qgc29tZSBkYXRhICovCisJdXZkLT5zdGF0cy5kYXRhX2NvdW50ICs9IGxlbjsKKwlSaW5nUXVldWVfV2FrZVVwSW50ZXJydXB0aWJsZSgmdXZkLT5kcCk7CisKK3VyYl9kb25lX3dpdGg6CisJZm9yIChpID0gMDsgaSA8IEZSQU1FU19QRVJfREVTQzsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwl9CisJdXJiLT5zdGF0dXMgPSAwOworCXVyYi0+ZGV2ID0gdXZkLT5kZXY7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYocmV0KQorCQllcnIoInVzYl9zdWJtaXRfdXJiIGVycm9yICglZCkiLCByZXQpOworCXJldHVybjsKK30KKworLyoKKyAqIHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXAoKQorICoKKyAqIEhpc3Rvcnk6CisgKiAyNy1KYW4tMjAwMCBVc2VkIGlibWNhbS0+aWZhY2UsIGlibWNhbS0+aWZhY2VBbHRBY3RpdmUgaW5zdGVhZAorICogICAgICAgICAgICAgb2YgaGFyZGNvZGVkIHZhbHVlcy4gU2ltcGxpZmllZCBieSB1c2luZyBmb3IgbG9vcCwKKyAqICAgICAgICAgICAgIGFsbG93ZWQgYW55IG51bWJlciBvZiBVUkJzLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXAoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1dmQtPmRldjsKKwlpbnQgaSwgZXJyRmxhZzsKKworCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygiJXMoJCVwKSIsIF9fRlVOQ1RJT05fXywgdXZkKTsKKworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKKwkJZXJyKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl1dmQtPmN1cmZyYW1lID0gLTE7CisKKwkvKiBBbHRlcm5hdGUgaW50ZXJmYWNlIDEgaXMgaXMgdGhlIGJpZ2dlc3QgZnJhbWUgc2l6ZSAqLworCWkgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYsIHV2ZC0+aWZhY2UsIHV2ZC0+aWZhY2VBbHRBY3RpdmUpOworCWlmIChpIDwgMCkgeworCQllcnIoIiVzOiB1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciIsIF9fRlVOQ1RJT05fXyk7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RhcnQpKQorCQlHRVRfQ0FMTEJBQ0sodXZkLCB2aWRlb1N0YXJ0KSh1dmQpOworCWVsc2UgCisJCWVycigiJXM6IHZpZGVvU3RhcnQgbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBXZSBkb3VibGUgYnVmZmVyIHRoZSBJc28gbGlzdHMgKi8KKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQlpbnQgaiwgazsKKwkJc3RydWN0IHVyYiAqdXJiID0gdXZkLT5zYnVmW2ldLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+Y29udGV4dCA9IHV2ZDsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXZkLT52aWRlb19lbmRwKTsKKwkJdXJiLT5pbnRlcnZhbCA9IDE7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXZkLT5zYnVmW2ldLmRhdGE7CisJCXVyYi0+Y29tcGxldGUgPSB1c2J2aWRlb19Jc29jSXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1dmQtPmlzb19wYWNrZXRfbGVuICogRlJBTUVTX1BFUl9ERVNDOworCQlmb3IgKGo9az0wOyBqIDwgRlJBTUVTX1BFUl9ERVNDOyBqKyssIGsgKz0gdXZkLT5pc29fcGFja2V0X2xlbikgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBrOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSB1dmQtPmlzb19wYWNrZXRfbGVuOworCQl9CisJfQorCisJLyogU3VibWl0IGFsbCBVUkJzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJZXJyRmxhZyA9IHVzYl9zdWJtaXRfdXJiKHV2ZC0+c2J1ZltpXS51cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyRmxhZykKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfaXNvYyglZCkgcmV0ICVkIiwgX19GVU5DVElPTl9fLCBpLCBlcnJGbGFnKTsKKwl9CisKKwl1dmQtPnN0cmVhbWluZyA9IDE7CisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlczogc3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeCIsIF9fRlVOQ1RJT05fXywgdXZkLT52aWRlb19lbmRwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVzYnZpZGVvX1N0b3BEYXRhUHVtcCgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgc3RvcHMgc3RyZWFtaW5nIGFuZCBkZWFsbG9jYXRlcyBVUkJzLiBUaGVuIGl0CisgKiBhY3RpdmF0ZXMgemVyby1iYW5kd2lkdGggYWx0LiBzZXR0aW5nIG9mIHRoZSB2aWRlbyBpbnRlcmZhY2UuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIENvcnJlY3RlZCBvcmRlciBvZiBhY3Rpb25zIHRvIHdvcmsgYWZ0ZXIgc3VycHJpc2UgcmVtb3ZhbC4KKyAqIDI3LUphbi0yMDAwIFVzZWQgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEluYWN0aXZlIGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlcy4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fU3RvcERhdGFQdW1wKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpbnQgaSwgajsKKworCWlmICgodXZkID09IE5VTEwpIHx8ICghdXZkLT5zdHJlYW1pbmcpIHx8ICh1dmQtPmRldiA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlcygkJXApIiwgX19GVU5DVElPTl9fLCB1dmQpOworCisJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJdXNiX2tpbGxfdXJiKHV2ZC0+c2J1ZltpXS51cmIpOworCX0KKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzOiBzdHJlYW1pbmc9MCIsIF9fRlVOQ1RJT05fXyk7CisJdXZkLT5zdHJlYW1pbmcgPSAwOworCisJaWYgKCF1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CisJCS8qIEludm9rZSBtaW5pZHJpdmVyJ3MgbWFnaWMgdG8gc3RvcCB0aGUgY2FtZXJhICovCisJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RvcCkpCisJCQlHRVRfQ0FMTEJBQ0sodXZkLCB2aWRlb1N0b3ApKHV2ZCk7CisJCWVsc2UgCisJCQllcnIoIiVzOiB2aWRlb1N0b3Agbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CisKKwkJLyogU2V0IHBhY2tldCBzaXplIHRvIDAgKi8KKwkJaiA9IHVzYl9zZXRfaW50ZXJmYWNlKHV2ZC0+ZGV2LCB1dmQtPmlmYWNlLCB1dmQtPmlmYWNlQWx0SW5hY3RpdmUpOworCQlpZiAoaiA8IDApIHsKKwkJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZXJyb3IgJWQuIiwgX19GVU5DVElPTl9fLCBqKTsKKwkJCXV2ZC0+bGFzdF9lcnJvciA9IGo7CisJCX0KKwl9Cit9CisKKy8qCisgKiB1c2J2aWRlb19OZXdGcmFtZSgpCisgKgorICogSGlzdG9yeToKKyAqIDI5LU1hci0wMCBBZGRlZCBjb3B5aW5nIG9mIHByZXZpb3VzIGZyYW1lIGludG8gdGhlIGN1cnJlbnQgb25lLgorICogNi1BdWctMDAgIEFkZGVkIG1vZGVsIDMgdmlkZW8gc2l6ZXMsIHJlbW92ZWQgcmVkdW5kYW50IHdpZHRoLCBoZWlnaHQuCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fTmV3RnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnJhbWVudW0pCit7CisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZTsKKwlpbnQgbjsKKworCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygidXNidmlkZW9fTmV3RnJhbWUoJCVwLCVkLikiLCB1dmQsIGZyYW1lbnVtKTsKKworCS8qIElmIHdlJ3JlIG5vdCBncmFiYmluZyBhIGZyYW1lIHJpZ2h0IG5vdyBhbmQgdGhlIG90aGVyIGZyYW1lIGlzICovCisJLyogIHJlYWR5IHRvIGJlIGdyYWJiZWQgaW50bywgdGhlbiB1c2UgaXQgaW5zdGVhZCAqLworCWlmICh1dmQtPmN1cmZyYW1lICE9IC0xKQorCQlyZXR1cm4gMDsKKworCS8qIElmIG5lY2Vzc2FyeSB3ZSBhZGp1c3QgcGljdHVyZSBzZXR0aW5ncyBiZXR3ZWVuIGZyYW1lcyAqLworCWlmICghdXZkLT5zZXR0aW5nc0FkanVzdGVkKSB7CisJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGFkanVzdFBpY3R1cmUpKQorCQkJR0VUX0NBTExCQUNLKHV2ZCwgYWRqdXN0UGljdHVyZSkodXZkKTsKKwkJdXZkLT5zZXR0aW5nc0FkanVzdGVkID0gMTsKKwl9CisKKwluID0gKGZyYW1lbnVtICsgMSkgJSBVU0JWSURFT19OVU1GUkFNRVM7CisJaWYgKHV2ZC0+ZnJhbWVbbl0uZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX1JlYWR5KQorCQlmcmFtZW51bSA9IG47CisKKwlmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZyYW1lbnVtXTsKKworCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9HcmFiYmluZzsKKwlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX1NjYW5uaW5nOworCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCA9IDA7CS8qIEFjY3VtdWxhdGVkIGluIHh4eF9wYXJzZV9kYXRhKCkgKi8KKwlmcmFtZS0+ZGVpbnRlcmxhY2UgPSBEZWludGVybGFjZV9Ob25lOworCWZyYW1lLT5mbGFncyA9IDA7IC8qIE5vIGZsYWdzIHlldCwgdXAgdG8gbWluaWRyaXZlciAob3IgdXMpIHRvIHNldCB0aGVtICovCisJdXZkLT5jdXJmcmFtZSA9IGZyYW1lbnVtOworCisJLyoKKwkgKiBOb3JtYWxseSB3ZSB3b3VsZCB3YW50IHRvIGNvcHkgcHJldmlvdXMgZnJhbWUgaW50byB0aGUgY3VycmVudCBvbmUKKwkgKiBiZWZvcmUgd2UgZXZlbiBzdGFydCBmaWxsaW5nIGl0IHdpdGggZGF0YTsgdGhpcyBhbGxvd3MgdXMgdG8gc3RvcAorCSAqIGZpbGxpbmcgYXQgYW55IG1vbWVudDsgdG9wIHBvcnRpb24gb2YgdGhlIGZyYW1lIHdpbGwgYmUgbmV3IGFuZAorCSAqIGJvdHRvbSBwb3J0aW9uIHdpbGwgc3RheSBhcyBpdCB3YXMgaW4gcHJldmlvdXMgZnJhbWUuIElmIHdlIGRvbid0CisJICogZG8gdGhhdCB0aGVuIG1pc3NpbmcgY2h1bmtzIG9mIHZpZGVvIHN0cmVhbSB3aWxsIHJlc3VsdCBpbiBmbGlja2VyaW5nCisJICogcG9ydGlvbnMgb2Ygb2xkIGRhdGEgd2hhdGV2ZXIgaXQgd2FzIGJlZm9yZS4KKwkgKgorCSAqIElmIHdlIGNob29zZSBub3QgdG8gY29weSBwcmV2aW91cyBmcmFtZSAodG8sIGZvciBleGFtcGxlLCBzYXZlIGZldworCSAqIGJ1cyBjeWNsZXMgLSB0aGUgZnJhbWUgY2FuIGJlIHByZXR0eSBsYXJnZSEpIHRoZW4gd2UgaGF2ZSBhbiBvcHRpb24KKwkgKiB0byBjbGVhciB0aGUgZnJhbWUgYmVmb3JlIHVzaW5nLiBJZiB3ZSBleHBlcmllbmNlIGxvc3NlcyBpbiB0aGlzCisJICogbW9kZSB0aGVuIG1pc3NpbmcgcGljdHVyZSB3aWxsIGJlIGJsYWNrIChubyBmbGlja2VyaW5nKS4KKwkgKgorCSAqIEZpbmFsbHksIGlmIHVzZXIgY2hvb3NlcyBub3QgdG8gY2xlYW4gdGhlIGN1cnJlbnQgZnJhbWUgYmVmb3JlCisJICogZmlsbGluZyBpdCB3aXRoIGRhdGEgdGhlbiB0aGUgb2xkIGRhdGEgd2lsbCBiZSB2aXNpYmxlIGlmIHdlIGZhaWwKKwkgKiB0byByZWZpbGwgZW50aXJlIGZyYW1lIHdpdGggbmV3IGRhdGEuCisJICovCisJaWYgKCEodXZkLT5mbGFncyAmIEZMQUdTX1NFUEFSQVRFX0ZSQU1FUykpIHsKKwkJLyogVGhpcyBjb3BpZXMgcHJldmlvdXMgZnJhbWUgaW50byB0aGlzIG9uZSB0byBtYXNrIGxvc3NlcyAqLworCQlpbnQgcHJldiA9IChmcmFtZW51bSAtIDEgKyBVU0JWSURFT19OVU1GUkFNRVMpICUgVVNCVklERU9fTlVNRlJBTUVTOworCQltZW1tb3ZlKGZyYW1lLT5kYXRhLCB1dmQtPmZyYW1lW3ByZXZdLmRhdGEsIHV2ZC0+bWF4X2ZyYW1lX3NpemUpOworCX0gZWxzZSB7CisJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfQ0xFQU5fRlJBTUVTKSB7CisJCQkvKiBUaGlzIHByb3ZpZGVzIGEgImNsZWFuIiBmcmFtZSBidXQgc2xvd3MgdGhpbmdzIGRvd24gKi8KKwkJCW1lbXNldChmcmFtZS0+ZGF0YSwgMCwgdXZkLT5tYXhfZnJhbWVfc2l6ZSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aWRlb19Db2xsZWN0UmF3RGF0YSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAncHJvY2Vzc0RhdGEnIGNhbGxiYWNrIGlmIHlvdQorICogb25seSB3YW50IHRvIGR1bXAgdGhlIHJhdyBkYXRhIGZyb20gdGhlIGNhbWVyYSBpbnRvIHRoZSBvdXRwdXQKKyAqIGRldmljZSAoZnJhbWUgYnVmZmVyKS4gWW91IGNhbiBsb29rIGF0IGl0IHdpdGggVjRMIGNsaWVudCwgYnV0IHRoZQorICogaW1hZ2Ugd2lsbCBiZSB1bndhdGNoYWJsZS4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGNvZGUgYW5kIG9mIHRoZQorICogbW9kZSBGTEFHU19OT19ERUNPRElORyBpcyBkZWJ1Z2dpbmcgYW5kIGNhcHR1cmluZyBvZiBkYXRhc3RyZWFtcyBmcm9tCisgKiBuZXcsIHVua25vd24gY2FtZXJhcy4gVGhpcyBwcm9jZWR1cmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGludm9rZWQKKyAqIGluc3RlYWQgb2YgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXZkLT5mbGFncyBoYXMgYml0CisgKiBGTEFHU19OT19ERUNPRElORyBzZXQuIFRoZXJlZm9yZSwgYW55IHJlZ3VsYXIgYnVpbGQgb2YgYW55IGRyaXZlcgorICogYmFzZWQgb24gdXNidmlkZW8gY2FuIHVzZSB0aGlzIGZlYXR1cmUgYXQgYW55IHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX0NvbGxlY3RSYXdEYXRhKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgbjsKKworCWFzc2VydCh1dmQgIT0gTlVMTCk7CisJYXNzZXJ0KGZyYW1lICE9IE5VTEwpOworCisJLyogVHJ5IHRvIG1vdmUgZGF0YSBmcm9tIHF1ZXVlIGludG8gZnJhbWUgYnVmZmVyICovCisJbiA9IFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApOworCWlmIChuID4gMCkgeworCQlpbnQgbTsKKwkJLyogU2VlIGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUgbGVmdCAqLworCQltID0gdXZkLT5tYXhfZnJhbWVfc2l6ZSAtIGZyYW1lLT5zZXFSZWFkX0xlbmd0aDsKKwkJaWYgKG4gPiBtKQorCQkJbiA9IG07CisJCS8qIE5vdyBtb3ZlIHRoYXQgbXVjaCBkYXRhIGludG8gZnJhbWUgYnVmZmVyICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKAorCQkJJnV2ZC0+ZHAsCisJCQlmcmFtZS0+ZGF0YSArIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCwKKwkJCW0pOworCQlmcmFtZS0+c2VxUmVhZF9MZW5ndGggKz0gbTsKKwl9CisJLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KKwlpZiAoZnJhbWUtPnNlcVJlYWRfTGVuZ3RoID49IHV2ZC0+bWF4X2ZyYW1lX3NpemUpIHsKKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmU7CisJCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKwkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNidmlkZW9fR2V0RnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnJhbWVOdW0pCit7CisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZyYW1lTnVtXTsKKworCWlmICh1dmQtPmRlYnVnID49IDIpCisJCWluZm8oIiVzKCQlcCwlZC4pIiwgX19GVU5DVElPTl9fLCB1dmQsIGZyYW1lTnVtKTsKKworCXN3aXRjaCAoZnJhbWUtPmZyYW1lU3RhdGUpIHsKKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX1VudXNlZDoKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX1VudXNlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworICAgICAgICBjYXNlIEZyYW1lU3RhdGVfUmVhZHk6CisgICAgICAgIGNhc2UgRnJhbWVTdGF0ZV9HcmFiYmluZzoKKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX0Vycm9yOgorICAgICAgICB7CisJCWludCBudHJpZXMsIHNpZ25hbFBlbmRpbmc7CisJcmVkbzoKKwkJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkgeworCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCQlpbmZvKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCAoMSkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbnRyaWVzID0gMDsgCisJCWRvIHsKKwkJCVJpbmdRdWV1ZV9JbnRlcnJ1cHRpYmxlU2xlZXBPbigmdXZkLT5kcCk7CisJCQlzaWduYWxQZW5kaW5nID0gc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7CisJCQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKSB7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCQkJaW5mbygiJXM6IENhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwgKDIpIiwgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWFzc2VydCh1dmQtPmZidWYgIT0gTlVMTCk7CisJCQlpZiAoc2lnbmFsUGVuZGluZykgeworCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCisJCQkJCWluZm8oIiVzOiBTaWduYWw9JCUwOHgiLCBfX0ZVTkNUSU9OX18sIHNpZ25hbFBlbmRpbmcpOworCQkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfUkVUUllfVklESU9DU1lOQykgeworCQkJCQl1c2J2aWRlb19UZXN0UGF0dGVybih1dmQsIDEsIDApOworCQkJCQl1dmQtPmN1cmZyYW1lID0gLTE7CisJCQkJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CisJCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCisJCQkJCQlpbmZvKCIlczogRm9yY2VkIHRlc3QgcGF0dGVybiBzY3JlZW4iLCBfX0ZVTkNUSU9OX18pOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBTdGFuZGFyZCBhbnN3ZXI6IEludGVycnVwdGVkISAqLworCQkJCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJCQkJaW5mbygiJXM6IEludGVycnVwdGVkISIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBObyBzaWduYWxzIC0gd2UganVzdCBnb3QgbmV3IGRhdGEgaW4gZHAgcXVldWUgKi8KKwkJCQlpZiAodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKQorCQkJCQl1c2J2aWRlb19Db2xsZWN0UmF3RGF0YSh1dmQsIGZyYW1lKTsKKwkJCQllbHNlIGlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHByb2Nlc3NEYXRhKSkKKwkJCQkJR0VUX0NBTExCQUNLKHV2ZCwgcHJvY2Vzc0RhdGEpKHV2ZCwgZnJhbWUpOworCQkJCWVsc2UgCisJCQkJCWVycigiJXM6IHByb2Nlc3NEYXRhIG5vdCBzZXQiLCBfX0ZVTkNUSU9OX18pOworCQkJfQorCQl9IHdoaWxlIChmcmFtZS0+ZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0dyYWJiaW5nKTsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikgeworCQkJaW5mbygiJXM6IEdyYWJiaW5nIGRvbmU7IHN0YXRlPSVkLiAoJWx1LiBieXRlcykiLAorCQkJICAgICBfX0ZVTkNUSU9OX18sIGZyYW1lLT5mcmFtZVN0YXRlLCBmcmFtZS0+c2VxUmVhZF9MZW5ndGgpOworCQl9CisJCWlmIChmcmFtZS0+ZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0Vycm9yKSB7CisJCQlpbnQgcmV0ID0gdXNidmlkZW9fTmV3RnJhbWUodXZkLCBmcmFtZU51bSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWVycigiJXM6IHVzYnZpZGVvX05ld0ZyYW1lKCkgZmFpbGVkICglZC4pIiwgX19GVU5DVElPTl9fLCByZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlnb3RvIHJlZG87CisJCX0KKwkJLyogTm90ZSB0aGF0IHdlIGZhbGwgdGhyb3VnaCB0byBtZWV0IG91ciBkZXN0aW55IGJlbG93ICovCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX0RvbmU6CisJCS8qCisJCSAqIERvIGFsbCBuZWNlc3NhcnkgcG9zdHByb2Nlc3Npbmcgb2YgZGF0YSBwcmVwYXJlZCBpbgorCQkgKiAiaW50ZXJydXB0IiBjb2RlIGFuZCB0aGUgY29sbGVjdGluZyBjb2RlIGFib3ZlLiBUaGUKKwkJICogZnJhbWUgZ2V0cyBtYXJrZWQgYXMgRnJhbWVTdGF0ZV9Eb25lIGJ5IHF1ZXVlIHBhcnNpbmcgY29kZS4KKwkJICogVGhpcyBzdGF0dXMgbWVhbnMgdGhhdCB3ZSBjb2xsZWN0ZWQgZW5vdWdoIGRhdGEgYW5kCisJCSAqIG1vc3QgbGlrZWx5IHByb2Nlc3NlZCBpdCBhcyB3ZSB3ZW50IHRocm91Z2guIEhvd2V2ZXIKKwkJICogdGhlIGRhdGEgbWF5IG5lZWQgcG9zdHByb2Nlc3NpbmcsIHN1Y2ggYXMgZGVpbnRlcmxhY2luZworCQkgKiBvciBwaWN0dXJlIGFkanVzdG1lbnRzIGltcGxlbWVudGVkIGluIHNvZnR3YXJlIChob3Jyb3IhKQorCQkgKgorCQkgKiBBcyBzb29uIGFzIHRoZSBmcmFtZSBiZWNvbWVzICJmaW5hbCIgaXQgZ2V0cyBwcm9tb3RlZCB0bworCQkgKiBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0dXMgd2hlcmUgaXQgd2lsbCByZW1haW4gdW50aWwgdGhlCisJCSAqIGNhbGxlciBjb25zdW1lZCBhbGwgdGhlIHZpZGVvIGRhdGEgZnJvbSB0aGUgZnJhbWUuIFRoZW4KKwkJICogdGhlIGVtcHR5IHNoZWxsIG9mIGV4LWZyYW1lIGlzIHRocm93biBvdXQgZm9yIGRvZ3MgdG8gZWF0LgorCQkgKiBCdXQgd2UsIHdvcnJpZWQgYWJvdXQgcGV0cywgd2lsbCByZWN5Y2xlIHRoZSBmcmFtZSEKKwkJICovCisJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CisJCWlmICgodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKSA9PSAwKSB7CisJCQlpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBwb3N0UHJvY2VzcykpCisJCQkJR0VUX0NBTExCQUNLKHV2ZCwgcG9zdFByb2Nlc3MpKHV2ZCwgZnJhbWUpOworCQkJaWYgKGZyYW1lLT5mbGFncyAmIFVTQlZJREVPX0ZSQU1FX0ZMQUdfU09GVFdBUkVfQ09OVFJBU1QpCisJCQkJdXNidmlkZW9fU29mdHdhcmVDb250cmFzdEFkanVzdG1lbnQodXZkLCBmcmFtZSk7CisJCX0KKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmVfSG9sZDsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCWluZm8oIiVzOiBFbnRlcmVkIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCisJY2FzZSBGcmFtZVN0YXRlX0RvbmVfSG9sZDoKKwkJLyoKKwkJICogV2Ugc3RheSBpbiB0aGlzIHN0YXRlIGluZGVmaW5pdGVseSB1bnRpbCBzb21lb25lIGV4dGVybmFsLAorCQkgKiBsaWtlIGlvY3RsKCkgb3IgcmVhZCgpIGNhbGwgZmluaXNoZXMgZGlnZXN0aW5nIHRoZSBmcmFtZQorCQkgKiBkYXRhLiBUaGVuIGl0IHdpbGwgbWFyayB0aGUgZnJhbWUgYXMgRnJhbWVTdGF0ZV9VbnVzZWQgYW5kCisJCSAqIGl0IHdpbGwgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSB3aWxkIHRvIHJvYW0gZnJlZWx5LgorCQkgKi8KKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0ZS4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDYXRjaC1hbGwgZm9yIG90aGVyIGNhc2VzLiBXZSBzaGFsbCBub3QgYmUgaGVyZS4gKi8KKwllcnIoIiVzOiBJbnZhbGlkIHN0YXRlICVkLiIsIF9fRlVOQ1RJT05fXywgZnJhbWUtPmZyYW1lU3RhdGUpOworCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aWRlb19EZWludGVybGFjZUZyYW1lKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBkZWludGVybGFjZXMgdGhlIGdpdmVuIGZyYW1lLiBTb21lIGNhbWVyYXMgcHJvZHVjZQorICogb25seSBoYWxmIG9mIHNjYW5saW5lcyAtIHNvbWV0aW1lcyBvbmx5IGV2ZW4gbGluZXMsIHNvbWV0aW1lcyBvbmx5CisgKiBvZGQgbGluZXMuIFRoZSBkZWludGVybGFjaW5nIG1ldGhvZCBpcyBzdG9yZWQgaW4gZnJhbWUtPmRlaW50ZXJsYWNlCisgKiB2YXJpYWJsZS4KKyAqCisgKiBIZXJlIHdlIHNjYW4gdGhlIGZyYW1lIHZlcnRpY2FsbHkgYW5kIHJlcGxhY2UgbWlzc2luZyBzY2FubGluZXMgd2l0aAorICogYXZlcmFnZSBiZXR3ZWVuIHN1cnJvdW5kaW5nIG9uZXMgLSBiZWZvcmUgYW5kIGFmdGVyLiBJZiB3ZSBoYXZlIG5vCisgKiBsaW5lIGFib3ZlIHRoZW4gd2UganVzdCBjb3B5IG5leHQgbGluZS4gU2ltaWxhcmx5LCBpZiB3ZSBuZWVkIHRvCisgKiBjcmVhdGUgYSBsYXN0IGxpbmUgdGhlbiBwcmVjZWRpbmcgbGluZSBpcyB1c2VkLgorICovCit2b2lkIHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWlmICgodXZkID09IE5VTEwpIHx8IChmcmFtZSA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKChmcmFtZS0+ZGVpbnRlcmxhY2UgPT0gRGVpbnRlcmxhY2VfRmlsbEV2ZW5MaW5lcykgfHwKKwkgICAgKGZyYW1lLT5kZWludGVybGFjZSA9PSBEZWludGVybGFjZV9GaWxsT2RkTGluZXMpKQorCXsKKwkJY29uc3QgaW50IHY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisJCWludCBpID0gKGZyYW1lLT5kZWludGVybGFjZSA9PSBEZWludGVybGFjZV9GaWxsRXZlbkxpbmVzKSA/IDAgOiAxOworCisJCWZvciAoOyBpIDwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpOyBpICs9IDIpIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZzMSwgKmZzMjsKKwkJCXVuc2lnbmVkIGNoYXIgKmZkOworCQkJaW50IGlwLCBpbiwgajsJLyogUHJldmlvdXMgYW5kIG5leHQgbGluZXMgKi8KKworCQkJLyoKKwkJCSAqIE5lZWQgdG8gYXZlcmFnZSBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyICdpJy4KKwkJCSAqIElmIHdlIGdvIG91dCBvZiBib3VuZHMgc2Vla2luZyB0aG9zZSBsaW5lcyB0aGVuCisJCQkgKiB3ZSBwb2ludCBiYWNrIHRvIGV4aXN0aW5nIGxpbmUuCisJCQkgKi8KKwkJCWlwID0gaSAtIDE7CS8qIEZpcnN0LCBnZXQgcm91Z2ggbnVtYmVycyAqLworCQkJaW4gPSBpICsgMTsKKworCQkJLyogTm93IHZhbGlkYXRlICovCisJCQlpZiAoaXAgPCAwKQorCQkJCWlwID0gaW47CisJCQlpZiAoaW4gPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKQorCQkJCWluID0gaXA7CisKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJaWYgKChpcCA8IDApIHx8IChpbiA8IDApIHx8CisJCQkgICAgKGlwID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkgfHwKKwkJCSAgICAoaW4gPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSkKKwkJCXsKKwkJCQllcnIoIkVycm9yOiBpcD0lZC4gaW49JWQuIHJlcS5oZWlnaHQ9JWxkLiIsCisJCQkJICAgIGlwLCBpbiwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTm93IHdlIG5lZWQgdG8gYXZlcmFnZSBsaW5lcyAnaXAnIGFuZCAnaW4nIHRvIHByb2R1Y2UgbGluZSAnaScgKi8KKwkJCWZzMSA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGlwKTsKKwkJCWZzMiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGluKTsKKwkJCWZkID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogaSk7CisKKwkJCS8qIEF2ZXJhZ2UgbGluZXMgYXJvdW5kIGRlc3RpbmF0aW9uICovCisJCQlmb3IgKGo9MDsgaiA8IHY0bF9saW5lc2l6ZTsgaisrKSB7CisJCQkJZmRbal0gPSAodW5zaWduZWQgY2hhcikoKCgodW5zaWduZWQpIGZzMVtqXSkgKworCQkJCQkJCSAoKHVuc2lnbmVkKWZzMltqXSkpID4+IDEpOworCQkJfQorCQl9CisJfQorCisJLyogT3B0aW9uYWxseSBkaXNwbGF5IHN0YXRpc3RpY3Mgb24gdGhlIHNjcmVlbiAqLworCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfT1ZFUkxBWV9TVEFUUykKKwkJdXNidmlkZW9fT3ZlcmxheVN0YXRzKHV2ZCwgZnJhbWUpOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUpOworCisvKgorICogdXNidmlkZW9fU29mdHdhcmVDb250cmFzdEFkanVzdG1lbnQoKQorICoKKyAqIFRoaXMgY29kZSBhZGp1c3RzIHRoZSBjb250cmFzdCBvZiB0aGUgZnJhbWUsIGFzc3VtaW5nIFJHQjI0IGZvcm1hdC4KKyAqIEFzIG1vc3Qgc29mdHdhcmUgaW1hZ2UgcHJvY2Vzc2luZywgdGhpcyBqb2IgaXMgQ1BVLWludGVuc2l2ZS4KKyAqIEdldCBhIGNhbWVyYSB0aGF0IHN1cHBvcnRzIGhhcmR3YXJlIGFkanVzdG1lbnQhCisgKgorICogSGlzdG9yeToKKyAqIDA5LUZlYi0yMDAxICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19Tb2Z0d2FyZUNvbnRyYXN0QWRqdXN0bWVudChzdHJ1Y3QgdXZkICp1dmQsIAorCQkJCQkJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sKKwlpbnQgaSwgaiwgdjRsX2xpbmVzaXplOworCXNpZ25lZCBsb25nIGFkajsKKwljb25zdCBpbnQgY2NtID0gMTI4OyAvKiBDb2xvciBjb3JyZWN0aW9uIG1lZGlhbiAtIHNlZSBiZWxvdyAqLworCisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKGZyYW1lID09IE5VTEwpKSB7CisJCWVycigiJXM6IElsbGVnYWwgY2FsbC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWFkaiA9ICh1dmQtPnZwaWMuY29udHJhc3QgLSAweDgwMDApID4+IDg7IC8qIC0xMjguLisxMjcgPSAtY2NtLi4rKGNjbS0xKSovCisJUkVTVFJJQ1RfVE9fUkFOR0UoYWRqLCAtY2NtLCBjY20rMSk7CisJaWYgKGFkaiA9PSAwKSB7CisJCS8qIEluIHJhcmUgY2FzZSBvZiBubyBhZGp1c3RtZW50ICovCisJCXJldHVybjsKKwl9CisJdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKwlmb3IgKGk9MDsgaSA8IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgKmZkID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogaSk7CisJCWZvciAoaj0wOyBqIDwgdjRsX2xpbmVzaXplOyBqKyspIHsKKwkJCXNpZ25lZCBsb25nIHYgPSAoc2lnbmVkIGxvbmcpIGZkW2pdOworCQkJLyogTWFnbmlmeSB1cCB0byAyIHRpbWVzLCByZWR1Y2UgZG93biB0byB6ZXJvICovCisJCQl2ID0gMTI4ICsgKChjY20gKyBhZGopICogKHYgLSAxMjgpKSAvIGNjbTsKKwkJCVJFU1RSSUNUX1RPX1JBTkdFKHYsIDAsIDB4RkYpOyAvKiBNdXN0IGZsYXR0ZW4gdGFpbHMgKi8KKwkJCWZkW2pdID0gKHVuc2lnbmVkIGNoYXIpIHY7CisJCX0KKwl9Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmggYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzkwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5oCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpZm5kZWYgdXNidmlkZW9faAorI2RlZmluZQl1c2J2aWRlb19oCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKiBNb3N0IGhlbHBmdWwgZGVidWdnaW5nIGFpZCAqLworI2RlZmluZSBhc3NlcnQoZXhwcikgKCh2b2lkKSAoKGV4cHIpID8gMCA6IChlcnIoImFzc2VydCBmYWlsZWQgYXQgbGluZSAlZCIsX19MSU5FX18pKSkpCisKKyNkZWZpbmUgVVNCVklERU9fUkVQT1JUX1NUQVRTCTEJLyogU2V0IHRvIDAgdG8gYmxvY2sgc3RhdGlzdGljcyBvbiBjbG9zZSAqLworCisvKiBCaXQgZmxhZ3MgKG9wdGlvbnMpICovCisjZGVmaW5lIEZMQUdTX1JFVFJZX1ZJRElPQ1NZTkMJCSgxIDw8IDApCisjZGVmaW5lCUZMQUdTX01PTk9DSFJPTUUJCSgxIDw8IDEpCisjZGVmaW5lIEZMQUdTX0RJU1BMQVlfSElOVFMJCSgxIDw8IDIpCisjZGVmaW5lIEZMQUdTX09WRVJMQVlfU1RBVFMJCSgxIDw8IDMpCisjZGVmaW5lIEZMQUdTX0ZPUkNFX1RFU1RQQVRURVJOCQkoMSA8PCA0KQorI2RlZmluZSBGTEFHU19TRVBBUkFURV9GUkFNRVMJCSgxIDw8IDUpCisjZGVmaW5lIEZMQUdTX0NMRUFOX0ZSQU1FUwkJKDEgPDwgNikKKyNkZWZpbmUJRkxBR1NfTk9fREVDT0RJTkcJCSgxIDw8IDcpCisKKy8qIEJpdCBmbGFncyBmb3IgZnJhbWVzIChhcHBseSB0byB0aGUgZnJhbWUgd2hlcmUgdGhleSBhcmUgc3BlY2lmaWVkKSAqLworI2RlZmluZSBVU0JWSURFT19GUkFNRV9GTEFHX1NPRlRXQVJFX0NPTlRSQVNUCSgxIDw8IDApCisKKy8qIENhbWVyYSBjYXBhYmlsaXRpZXMgKG1heGltdW0pICovCisjZGVmaW5lIENBTUVSQV9VUkJfRlJBTUVTICAgICAgIDMyCisjZGVmaW5lIENBTUVSQV9NQVhfSVNPX1BBQ0tFVCAgIDEwMjMgLyogMTAyMiBhY3R1YWxseSBzZW50IGJ5IGNhbWVyYSAqLworI2RlZmluZSBGUkFNRVNfUEVSX0RFU0MJCShDQU1FUkFfVVJCX0ZSQU1FUykKKyNkZWZpbmUgRlJBTUVfU0laRV9QRVJfREVTQwkoQ0FNRVJBX01BWF9JU09fUEFDS0VUKQorCisvKiBUaGlzIG1hY3JvIHJlc3RyaWN0cyBhbiBpbnQgdmFyaWFibGUgdG8gYW4gaW5jbHVzaXZlIHJhbmdlICovCisjZGVmaW5lIFJFU1RSSUNUX1RPX1JBTkdFKHYsbWksbWEpIHsgaWYgKCh2KSA8IChtaSkpICh2KSA9IChtaSk7IGVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IH0KKworI2RlZmluZSBWNExfQllURVNfUEVSX1BJWEVMICAgICAzCS8qIEJlY2F1c2Ugd2UgcHJvZHVjZSBSR0IyNCAqLworCisvKgorICogVXNlIHRoaXMgbWFjcm8gdG8gY29uc3RydWN0IGNvbnN0YW50cyBmb3IgZGlmZmVyZW50IHZpZGVvIHNpemVzLgorICogV2UgaGF2ZSB0byBkZWFsIHdpdGggZGlmZmVyZW50IHZpZGVvIHNpemVzIHRoYXQgaGF2ZSB0byBiZQorICogY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIG9yIGNvbXBhcmVkIGFnYWluc3Qgd2hlbiB3ZSByZWNlaXZlCisgKiBhIGRhdGEuIE5vcm1hbGx5IG9uZSB3b3VsZCBkZWZpbmUgYSBidW5jaCBvZiBWSURFT1NJWkVfeF9ieV95CisgKiAjZGVmaW5lcyBhbmQgdGhhdCdzIHRoZSBlbmQgb2Ygc3RvcnkuIEhvd2V2ZXIgdGhpcyBzb2x1dGlvbgorICogZG9lcyBub3QgYWxsb3cgdG8gY29udmVydCBiZXR3ZWVuIHJlYWwgcGl4ZWwgc2l6ZXMgYW5kIHRoZQorICogY29uc3RhbnQgKGludGVnZXIpIHZhbHVlIHRoYXQgbWF5IGJlIHVzZWQgdG8gdGFnIGEgZnJhbWUgb3IKKyAqIHdoYXRldmVyLiBUaGUgc2V0IG9mIG1hY3JvcyBiZWxvdyBjb25zdHJ1Y3RzIHZpZGVvc2l6ZSBjb25zdGFudHMKKyAqIGZyb20gdGhlIHBpeGVsIHNpemUgYW5kIGFsbG93cyB0byByZWNvbnN0cnVjdCB0aGUgcGl4ZWwgc2l6ZQorICogZnJvbSB0aGUgY29tYmluZWQgdmFsdWUgbGF0ZXIuCisgKi8KKyNkZWZpbmUJVklERU9TSVpFKHgseSkJKCgoeCkgJiAweEZGRkZMKSB8ICgoKHkpICYgMHhGRkZGTCkgPDwgMTYpKQorI2RlZmluZQlWSURFT1NJWkVfWCh2cykJKCh2cykgJiAweEZGRkZMKQorI2RlZmluZQlWSURFT1NJWkVfWSh2cykJKCgodnMpID4+IDE2KSAmIDB4RkZGRkwpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdmlkZW9zaXplX3Q7CisKKy8qCisgKiBUaGlzIG1hY3JvIGNoZWNrcyBpZiB0aGUgY2FtZXJhIGlzIHN0aWxsIG9wZXJhdGlvbmFsLiBUaGUgJ3V2ZCcKKyAqIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgdXZkLT5kZXYgbXVzdCBiZSB2YWxpZCwgd2UgYXJlIG5vdAorICogcmVtb3ZpbmcgdGhlIGRldmljZSBhbmQgdGhlIGRldmljZSBoYXMgbm90IGVycmVkIG9uIHVzLgorICovCisjZGVmaW5lIENBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpIChcCisJKHV2ZCAhPSBOVUxMKSAmJiBcCisJKCh1dmQpLT5kZXYgIT0gTlVMTCkgJiYgXAorCSgodXZkKS0+bGFzdF9lcnJvciA9PSAwKSAmJiBcCisJKCEodXZkKS0+cmVtb3ZlX3BlbmRpbmcpKQorCisvKgorICogV2UgdXNlIG1hY3JvcyB0byBkbyBZVVYgLT4gUkdCIGNvbnZlcnNpb24gYmVjYXVzZSB0aGlzIGlzCisgKiB2ZXJ5IGltcG9ydGFudCBmb3Igc3BlZWQgYW5kIHRvdGFsbHkgdW5pbXBvcnRhbnQgZm9yIHNpemUuCisgKgorICogWVVWIC0+IFJHQiBDb252ZXJzaW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCID0gMS4xNjQqKFktMTYpCQkgICAgKyAyLjAxOCooVi0xMjgpCisgKiBHID0gMS4xNjQqKFktMTYpIC0gMC44MTMqKFUtMTI4KSAtIDAuMzkxKihWLTEyOCkKKyAqIFIgPSAxLjE2NCooWS0xNikgKyAxLjU5NiooVS0xMjgpCisgKgorICogSWYgeW91IGZhbmN5IGludGVnZXIgYXJpdGhtZXRpY3MgKGFzIHlvdSBzaG91bGQpLCBoZWFyIHRoaXM6CisgKgorICogNjU1MzYqQiA9IDc2Mjg0KihZLTE2KQkJICArIDEzMjI1MiooVi0xMjgpCisgKiA2NTUzNipHID0gNzYyODQqKFktMTYpIC0gIDUzMjgxKihVLTEyOCkgLSAgMjU2MjUqKFYtMTI4KQorICogNjU1MzYqUiA9IDc2Mjg0KihZLTE2KSArIDEwNDU5NSooVS0xMjgpCisgKgorICogTWFrZSBzdXJlIHRoZSBvdXRwdXQgdmFsdWVzIGFyZSB3aXRoaW4gWzAuLjI1NV0gcmFuZ2UuCisgKi8KKyNkZWZpbmUgTElNSVRfUkdCKHgpICgoKHgpIDwgMCkgPyAwIDogKCgoeCkgPiAyNTUpID8gMjU1IDogKHgpKSkKKyNkZWZpbmUgWVVWX1RPX1JHQl9CWV9USEVfQk9PSyhteSxtdSxtdixtcixtZyxtYikgeyBcCisgICAgaW50IG1tX3ksIG1tX3ljLCBtbV91LCBtbV92LCBtbV9yLCBtbV9nLCBtbV9iOyBcCisgICAgbW1feSA9IChteSkgLSAxNjsgIFwKKyAgICBtbV91ID0gKG11KSAtIDEyODsgXAorICAgIG1tX3YgPSAobXYpIC0gMTI4OyBcCisgICAgbW1feWM9IG1tX3kgKiA3NjI4NDsgXAorICAgIG1tX2IgPSAobW1feWMJCSsgMTMyMjUyKm1tX3YJKSA+PiAxNjsgXAorICAgIG1tX2cgPSAobW1feWMgLSAgNTMyODEqbW1fdSAtICAyNTYyNSptbV92CSkgPj4gMTY7IFwKKyAgICBtbV9yID0gKG1tX3ljICsgMTA0NTk1Km1tX3UJCQkpID4+IDE2OyBcCisgICAgbWIgPSBMSU1JVF9SR0IobW1fYik7IFwKKyAgICBtZyA9IExJTUlUX1JHQihtbV9nKTsgXAorICAgIG1yID0gTElNSVRfUkdCKG1tX3IpOyBcCit9CisKKyNkZWZpbmUJUklOR19RVUVVRV9TSVpFCQkoMTI4KjEwMjQpCS8qIE11c3QgYmUgYSBwb3dlciBvZiAyICovCisjZGVmaW5lCVJJTkdfUVVFVUVfQURWQU5DRV9JTkRFWChycSxpbmQsbikgKHJxKS0+aW5kID0gKChycSktPmluZCArIChuKSkgJiAoKHJxKS0+bGVuZ3RoLTEpCisjZGVmaW5lCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUyhycSxuKSBSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEscmksbikKKyNkZWZpbmUJUklOR19RVUVVRV9QRUVLKHJxLG9mcykgKChycSktPnF1ZXVlWygob2ZzKSArIChycSktPnJpKSAmICgocnEpLT5sZW5ndGgtMSldKQorCitzdHJ1Y3QgUmluZ1F1ZXVlIHsKKwl1bnNpZ25lZCBjaGFyICpxdWV1ZTsJLyogRGF0YSBmcm9tIHRoZSBJc29jIGRhdGEgcHVtcCAqLworCWludCBsZW5ndGg7CQkvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBxdWV1ZSAqLworCWludCB3aTsJCQkvKiBUaGF0J3Mgd2hlcmUgd2Ugd3JpdGUgKi8KKwlpbnQgcmk7CQkJLyogUmVhZCBmcm9tIGhlcmUgdW50aWwgeW91IGhpdCB3cml0ZSBpbmRleCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxaDsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KK307CisKK2VudW0gU2NhblN0YXRlIHsKKwlTY2FuU3RhdGVfU2Nhbm5pbmcsCS8qIFNjYW5uaW5nIGZvciBoZWFkZXIgKi8KKwlTY2FuU3RhdGVfTGluZXMJCS8qIFBhcnNpbmcgbGluZXMgKi8KK307CisKKy8qIENvbXBsZXRpb24gc3RhdGVzIG9mIHRoZSBkYXRhIHBhcnNlciAqLworZW51bSBQYXJzZVN0YXRlIHsKKwlzY2FuX0NvbnRpbnVlLAkJLyogSnVzdCBwYXJzZSBuZXh0IGl0ZW0gKi8KKwlzY2FuX05leHRGcmFtZSwJCS8qIEZyYW1lIGRvbmUsIHNlbmQgaXQgdG8gVjRMICovCisJc2Nhbl9PdXQsCQkvKiBOb3QgZW5vdWdoIGRhdGEgZm9yIGZyYW1lICovCisJc2Nhbl9FbmRQYXJzZQkJLyogRW5kIHBhcnNpbmcgKi8KK307CisKK2VudW0gRnJhbWVTdGF0ZSB7CisJRnJhbWVTdGF0ZV9VbnVzZWQsCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRnJhbWVTdGF0ZV9SZWFkeSwJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGcmFtZVN0YXRlX0dyYWJiaW5nLAkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGcmFtZVN0YXRlX0RvbmUsCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZyYW1lU3RhdGVfRG9uZV9Ib2xkLAkvKiBBcmUgc3luY2luZyBvciByZWFkaW5nICovCisJRnJhbWVTdGF0ZV9FcnJvciwJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCisvKgorICogU29tZSBmcmFtZXMgbWF5IGNvbnRhaW4gb25seSBldmVuIG9yIG9kZCBsaW5lcy4gVGhpcyB0eXBlCisgKiBzcGVjaWZpZXMgd2hhdCB0eXBlIG9mIGRlaW50ZXJsYWNpbmcgaXMgcmVxdWlyZWQuCisgKi8KK2VudW0gRGVpbnRlcmxhY2UgeworCURlaW50ZXJsYWNlX05vbmU9MCwKKwlEZWludGVybGFjZV9GaWxsT2RkTGluZXMsCisJRGVpbnRlcmxhY2VfRmlsbEV2ZW5MaW5lcworfTsKKworI2RlZmluZSBVU0JWSURFT19OVU1GUkFNRVMJMgkvKiBIb3cgbWFueSBmcmFtZXMgd2Ugd29yayB3aXRoICovCisjZGVmaW5lIFVTQlZJREVPX05VTVNCVUYJMgkvKiBIb3cgbWFueSBVUkJzIGxpbmtlZCBpbiBhIHJpbmcgKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBvbmUgSXNvYyByZXF1ZXN0IC0gVVJCIGFuZCBidWZmZXIgKi8KK3N0cnVjdCB1c2J2aWRlb19zYnVmIHsKKwljaGFyICpkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKK3N0cnVjdCB1c2J2aWRlb19mcmFtZSB7CisJY2hhciAqZGF0YTsJCS8qIEZyYW1lIGJ1ZmZlciAqLworCXVuc2lnbmVkIGxvbmcgaGVhZGVyOwkvKiBTaWduaWZpY2FudCBiaXRzIGZyb20gdGhlIGhlYWRlciAqLworCisJdmlkZW9zaXplX3QgY2FudmFzOwkvKiBUaGUgY2FudmFzIChtYXguIGltYWdlKSBhbGxvY2F0ZWQgKi8KKwl2aWRlb3NpemVfdCByZXF1ZXN0OwkvKiBUaGF0J3Mgd2hhdCB0aGUgYXBwbGljYXRpb24gYXNrZWQgZm9yICovCisJdW5zaWduZWQgc2hvcnQgcGFsZXR0ZTsJLyogVGhlIGRlc2lyZWQgZm9ybWF0ICovCisKKwllbnVtIEZyYW1lU3RhdGUgZnJhbWVTdGF0ZTsvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCWVudW0gU2NhblN0YXRlIHNjYW5zdGF0ZTsJLyogU3RhdGUgb2Ygc2Nhbm5pbmcgKi8KKwllbnVtIERlaW50ZXJsYWNlIGRlaW50ZXJsYWNlOworCWludCBmbGFnczsJCS8qIFVTQlZJREVPX0ZSQU1FX0ZMQUdfeHh4IGJpdCBmbGFncyAqLworCisJaW50IGN1cmxpbmU7CQkvKiBMaW5lIG9mIGZyYW1lIHdlJ3JlIHdvcmtpbmcgb24gKi8KKworCWxvbmcgc2VxUmVhZF9MZW5ndGg7CS8qIFJhdyBkYXRhIGxlbmd0aCBvZiBmcmFtZSAqLworCWxvbmcgc2VxUmVhZF9JbmRleDsJLyogQW1vdW50IG9mIGRhdGEgdGhhdCBoYXMgYmVlbiBhbHJlYWR5IHJlYWQgKi8KKworCXZvaWQgKnVzZXI7CQkvKiBBZGRpdGlvbmFsIGRhdGEgdGhhdCB1c2VyIG1heSBuZWVkICovCit9OworCisvKiBTdGF0aXN0aWNzIHRoYXQgY2FuIGJlIG92ZXJsYWlkIG9uIHNjcmVlbiAqLworc3RydWN0IHVzYnZpZGVvX3N0YXRpc3RpY3MgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZyYW1lX251bTsJLyogU2VxdWVudGlhbCBudW1iZXIgb2YgdGhlIGZyYW1lICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdXJiX2NvdW50OyAgICAgICAgLyogSG93IG1hbnkgVVJCcyB3ZSByZWNlaXZlZCBzbyBmYXIgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyB1cmJfbGVuZ3RoOyAgICAgICAvKiBMZW5ndGggb2YgbGFzdCBVUkIgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2NvdW50OyAgICAgICAvKiBIb3cgbWFueSBieXRlcyB3ZSByZWNlaXZlZCAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9jb3VudDsgICAgIC8qIEhvdyBtYW55IGZyYW1lIGhlYWRlcnMgd2UgZm91bmQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb19za2lwX2NvdW50OwkvKiBIb3cgbWFueSBlbXB0eSBJU08gcGFja2V0cyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgaXNvX2Vycl9jb3VudDsJLyogSG93IG1hbnkgYmFkIElTTyBwYWNrZXRzIHJlY2VpdmVkICovCit9OworCitzdHJ1Y3QgdXNidmlkZW87CisKK3N0cnVjdCB1dmQgeworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsJLyogTXVzdCBiZSB0aGUgZmlyc3QgZmllbGQhICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXNidmlkZW8gKmhhbmRsZTsJLyogUG9pbnRzIGJhY2sgdG8gdGhlIHN0cnVjdCB1c2J2aWRlbyAqLworCXZvaWQgKnVzZXJfZGF0YTsJCS8qIENhbWVyYS1kZXBlbmRlbnQgZGF0YSAqLworCWludCB1c2VyX3NpemU7CQkJLyogU2l6ZSBvZiB0aGF0IGNhbWVyYS1kZXBlbmRlbnQgZGF0YSAqLworCWludCBkZWJ1ZzsJCQkvKiBEZWJ1ZyBsZXZlbCBmb3IgdXNidmlkZW8gKi8KKwl1bnNpZ25lZCBjaGFyIGlmYWNlOwkJLyogVmlkZW8gaW50ZXJmYWNlIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgdmlkZW9fZW5kcDsKKwl1bnNpZ25lZCBjaGFyIGlmYWNlQWx0QWN0aXZlOworCXVuc2lnbmVkIGNoYXIgaWZhY2VBbHRJbmFjdGl2ZTsgLyogQWx0IHNldHRpbmdzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIEZMQUdTX1VTQlZJREVPX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgcGFsZXR0ZUJpdHM7CS8qIFdoaWNoIHBhbGV0dGVzIHdlIGFjY2VwdD8gKi8KKwl1bnNpZ25lZCBzaG9ydCBkZWZhdWx0UGFsZXR0ZTsJLyogV2hhdCBwYWxldHRlIHRvIHVzZSBmb3IgcmVhZCgpICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLworCisJdmlkZW9zaXplX3QgdmlkZW9zaXplOwkvKiBDdXJyZW50IHNldHRpbmcgKi8KKwl2aWRlb3NpemVfdCBjYW52YXM7CS8qIFRoaXMgaXMgdGhlIHdpZHRoLGhlaWdodCBvZiB0aGUgVjRMIGNhbnZhcyAqLworCWludCBtYXhfZnJhbWVfc2l6ZTsJLyogQnl0ZXMgaW4gb25lIHZpZGVvIGZyYW1lICovCisKKwlpbnQgdXZkX3VzZWQ7ICAgICAgICAJLyogSXMgdGhpcyBzdHJ1Y3R1cmUgaW4gdXNlPyAqLworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIElzb2Nocm9ub3VzPyAqLworCWludCBncmFiYmluZzsJCS8qIEFyZSB3ZSBncmFiYmluZz8gKi8KKwlpbnQgc2V0dGluZ3NBZGp1c3RlZDsJLyogSGF2ZSB3ZSBhZGp1c3RlZCBjb250cmFzdCBldGMuPyAqLworCWludCBsYXN0X2Vycm9yOwkJLyogV2hhdCBjYWxhbWl0eSBzdHJ1Y2sgdXM/ICovCisKKwljaGFyICpmYnVmOwkJLyogVmlkZW9kZXYgYnVmZmVyIGFyZWEgKi8KKwlpbnQgZmJ1Zl9zaXplOwkJLyogVmlkZW9kZXYgYnVmZmVyIHNpemUgKi8KKworCWludCBjdXJmcmFtZTsKKwlpbnQgaXNvX3BhY2tldF9sZW47CS8qIFZpZGVvbW9kZS1kZXBlbmRlbnQsIHNhdmVzIGJ1cyBiYW5kd2lkdGggKi8KKworCXN0cnVjdCBSaW5nUXVldWUgZHA7CS8qIElzb2MgZGF0YSBwdW1wICovCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lIGZyYW1lW1VTQlZJREVPX05VTUZSQU1FU107CisJc3RydWN0IHVzYnZpZGVvX3NidWYgc2J1ZltVU0JWSURFT19OVU1TQlVGXTsKKworCXZvbGF0aWxlIGludCByZW1vdmVfcGVuZGluZzsJLyogSWYgc2V0IHRoZW4gYWJvdXQgdG8gZXhpdCAqLworCisJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnBpYywgdnBpY19vbGQ7CS8qIFBpY3R1cmUgc2V0dGluZ3MgKi8KKwlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2Y2FwOwkJLyogVmlkZW8gY2FwYWJpbGl0aWVzICovCisJc3RydWN0IHZpZGVvX2NoYW5uZWwgdmNoYW47CS8qIE1heSBiZSB1c2VkIGZvciB0dW5lciBzdXBwb3J0ICovCisJc3RydWN0IHVzYnZpZGVvX3N0YXRpc3RpY3Mgc3RhdHM7CisJY2hhciB2aWRlb05hbWVbMzJdOwkJLyogSG9sZHMgbmFtZSBsaWtlICJ2aWRlbzciICovCit9OworCisvKgorICogdXNidmlkZW8gY2FsbGJhY2tzICh2aXJ0dWFsIG1ldGhvZHMpLiBUaGV5IGFyZSBzZXQgd2hlbiB1c2J2aWRlbworICogc2VydmljZXMgYXJlIHJlZ2lzdGVyZWQuIEFsbCBvZiB0aGVzZSBkZWZhdWx0IHRvIE5VTEwsIGV4Y2VwdCB0aG9zZQorICogdGhhdCBkZWZhdWx0IHRvIHVzYnZpZGVvLXByb3ZpZGVkIG1ldGhvZHMuCisgKi8KK3N0cnVjdCB1c2J2aWRlb19jYiB7CisJaW50ICgqcHJvYmUpKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICopOworCXZvaWQgKCp1c2VyRnJlZSkoc3RydWN0IHV2ZCAqKTsKKwl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisJaW50ICgqc2V0dXBPbk9wZW4pKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnZpZGVvU3RhcnQpKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnZpZGVvU3RvcCkoc3RydWN0IHV2ZCAqKTsKKwl2b2lkICgqcHJvY2Vzc0RhdGEpKHN0cnVjdCB1dmQgKiwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICopOworCXZvaWQgKCpwb3N0UHJvY2Vzcykoc3RydWN0IHV2ZCAqLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKik7CisJdm9pZCAoKmFkanVzdFBpY3R1cmUpKHN0cnVjdCB1dmQgKik7CisJaW50ICgqZ2V0RlBTKShzdHJ1Y3QgdXZkICopOworCWludCAoKm92ZXJsYXlIb29rKShzdHJ1Y3QgdXZkICosIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqKTsKKwlpbnQgKCpnZXRGcmFtZSkoc3RydWN0IHV2ZCAqLCBpbnQpOworCWludCAoKnN0YXJ0RGF0YVB1bXApKHN0cnVjdCB1dmQgKnV2ZCk7CisJdm9pZCAoKnN0b3BEYXRhUHVtcCkoc3RydWN0IHV2ZCAqdXZkKTsKKwlpbnQgKCpzZXRWaWRlb01vZGUpKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHZpZGVvX3dpbmRvdyAqdncpOworfTsKKworc3RydWN0IHVzYnZpZGVvIHsKKwlpbnQgbnVtX2NhbWVyYXM7CQkvKiBBcyBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgdXNiX2RyaXZlciB1c2JkcnY7CS8qIEludGVyZmFjZSB0byB0aGUgVVNCIHN0YWNrICovCisJY2hhciBkcnZOYW1lWzgwXTsJCS8qIERyaXZlciBuYW1lICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkJLyogTXV0ZXggcHJvdGVjdGluZyBjYW1lcmEgc3RydWN0dXJlcyAqLworCXN0cnVjdCB1c2J2aWRlb19jYiBjYjsJCS8qIFRhYmxlIG9mIGNhbGxiYWNrcyAodmlydHVhbCBtZXRob2RzKSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmR0OwkvKiBWaWRlbyBkZXZpY2UgdGVtcGxhdGUgKi8KKwlzdHJ1Y3QgdXZkICpjYW07CQkJLyogQXJyYXkgb2YgY2FtZXJhIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3QgbW9kdWxlICptZF9tb2R1bGU7CS8qIE1pbmlkcml2ZXIgbW9kdWxlICovCit9OworCisKKy8qCisgKiBUaGlzIG1hY3JvIHJldHJpZXZlcyBjYWxsYmFjayBhZGRyZXNzIGZyb20gdGhlIHN0cnVjdCB1dmQgb2JqZWN0LgorICogTm8gdmFsaWRpdHkgY2hlY2tzIGFyZSBkb25lIGhlcmUsIHNvIGJlIHN1cmUgdG8gY2hlY2sgdGhlCisgKiBjYWxsYmFjayBiZWZvcmVoYW5kIHdpdGggVkFMSURfQ0FMTEJBQ0suCisgKi8KKyNkZWZpbmUJR0VUX0NBTExCQUNLKHV2ZCxjYk5hbWUpICgodXZkKS0+aGFuZGxlLT5jYi5jYk5hbWUpCisKKy8qCisgKiBUaGlzIG1hY3JvIHJldHVybnMgZWl0aGVyIGNhbGxiYWNrIHBvaW50ZXIgb3IgTlVMTC4gVGhpcyBpcyBzYWZlCisgKiBtYWNybywgbWVhbmluZyB0aGF0IG1vc3Qgb2YgY29tcG9uZW50cyBvZiBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQKKyAqIG1heSBiZSBOVUxMIC0gdGhpcyBvbmx5IHJlc3VsdHMgaW4gTlVMTCBiZWluZyByZXR1cm5lZC4gWW91IG1heQorICogd2lzaCB0byB1c2UgdGhpcyBtYWNybyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGFibGUuCisgKiBIb3dldmVyIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIGNoZWNrcyB0YWtlIHRpbWUuCisgKi8KKyNkZWZpbmUJVkFMSURfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgKCgoKHV2ZCkgIT0gTlVMTCkgJiYgXAorCQkoKHV2ZCktPmhhbmRsZSAhPSBOVUxMKSkgPyBHRVRfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgOiBOVUxMKQorCitpbnQgIFJpbmdRdWV1ZV9EZXF1ZXVlKHN0cnVjdCBSaW5nUXVldWUgKnJxLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4pOworaW50ICBSaW5nUXVldWVfRW5xdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2RhdGEsIGludCBuKTsKK3ZvaWQgUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpOwordm9pZCBSaW5nUXVldWVfRmx1c2goc3RydWN0IFJpbmdRdWV1ZSAqcnEpOworCitzdGF0aWMgaW5saW5lIGludCBSaW5nUXVldWVfR2V0TGVuZ3RoKGNvbnN0IHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCXJldHVybiAocnEtPndpIC0gcnEtPnJpICsgcnEtPmxlbmd0aCkgJiAocnEtPmxlbmd0aC0xKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgUmluZ1F1ZXVlX0dldEZyZWVTcGFjZShjb25zdCBzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlyZXR1cm4gcnEtPmxlbmd0aCAtIFJpbmdRdWV1ZV9HZXRMZW5ndGgocnEpOworfQorCit2b2lkIHVzYnZpZGVvX0RyYXdMaW5lKAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJaW50IHgxLCBpbnQgeTEsCisJaW50IHgyLCBpbnQgeTIsCisJdW5zaWduZWQgY2hhciBjciwgdW5zaWduZWQgY2hhciBjZywgdW5zaWduZWQgY2hhciBjYik7Cit2b2lkIHVzYnZpZGVvX0hleER1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7Cit2b2lkIHVzYnZpZGVvX1NheUFuZFdhaXQoY29uc3QgY2hhciAqd2hhdCk7Cit2b2lkIHVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZ1bGxmcmFtZSwgaW50IHBtb2RlKTsKKworLyogTWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgKi8KK3Vuc2lnbmVkIGxvbmcgdXNidmlkZW9fa3ZpcnRfdG9fcGEodW5zaWduZWQgbG9uZyBhZHIpOworCitpbnQgdXNidmlkZW9fcmVnaXN0ZXIoCisJc3RydWN0IHVzYnZpZGVvICoqcENhbXMsCisJY29uc3QgaW50IG51bV9jYW1zLAorCWNvbnN0IGludCBudW1fZXh0cmEsCisJY29uc3QgY2hhciAqZHJpdmVyTmFtZSwKKwljb25zdCBzdHJ1Y3QgdXNidmlkZW9fY2IgKmNiVGFibGUsCisJc3RydWN0IG1vZHVsZSAqbWQsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3N0cnVjdCB1dmQgKnVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKHN0cnVjdCB1c2J2aWRlbyAqY2Ftcyk7CitpbnQgdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZShzdHJ1Y3QgdXZkICp1dmQpOwordm9pZCB1c2J2aWRlb19EZXJlZ2lzdGVyKHN0cnVjdCB1c2J2aWRlbyAqKnV2dCk7CisKK2ludCB1c2J2aWRlb192NGxfaW5pdGlhbGl6ZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpOworCit2b2lkIHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIFRoaXMgY29kZSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgLSB1c2UgaXQgd2hlbiB3b3JraW5nIHdpdGgKKyAqIG5ldyBmb3JtYXRzLCBvciBlbHNlIHlvdSBtYXkgZ2V0IG9vcHNlcyBhbGwgb3ZlciB0aGUgcGxhY2UuCisgKiBJZiBwaXhlbCBmYWxscyBvdXQgb2YgYm91bmRzIHRoZW4gaXQgZ2V0cyBzaG92ZWQgYmFjayAoYXMgY2xvc2UKKyAqIHRvIHBsYWNlIG9mIG9mZmVuY2UgYXMgcG9zc2libGUpIGFuZCBpcyBwYWludGVkIGJyaWdodCByZWQuCisgKgorICogVGhlcmUgYXJlIHR3byBpbXBvcnRhbnQgY29uY2VwdHM6IGZyYW1lIHdpZHRoLCBoZWlnaHQgYW5kCisgKiBWNEwgY2FudmFzIHdpZHRoLCBoZWlnaHQuIFRoZSBmb3JtZXIgaXMgdGhlIGFyZWEgcmVxdWVzdGVkIGJ5CisgKiB0aGUgYXBwbGljYXRpb24gLWZvciB0aGlzIHZlcnkgZnJhbWUtLiBUaGUgbGF0dGVyIGlzIHRoZSBsYXJnZXN0CisgKiBwb3NzaWJsZSBmcmFtZSB0aGF0IHdlIGNhbiBzZXJ2ZSAod2UgYWR2ZXJ0aXNlIHRoYXQgdmlhIFY0TCBpb2N0bCkuCisgKiBUaGUgZnJhbWUgZGF0YSBpcyBleHBlY3RlZCB0byBiZSBmb3JtYXR0ZWQgYXMgbGluZXMgb2YgbGVuZ3RoCisgKiBWSURFT1NJWkVfWChmci0+cmVxdWVzdCksIHRvdGFsIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSBsaW5lcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJHQjI0X1BVVFBJWEVMKAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnIsCisJaW50IGl4LCBpbnQgaXksCisJdW5zaWduZWQgY2hhciB2ciwKKwl1bnNpZ25lZCBjaGFyIHZnLAorCXVuc2lnbmVkIGNoYXIgdmIpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcGY7CisJaW50IGxpbWl0ZXIgPSAwLCBteCwgbXk7CisJbXggPSBpeDsKKwlteSA9IGl5OworCWlmIChteCA8IDApIHsKKwkJbXg9MDsKKwkJbGltaXRlcisrOworCX0gZWxzZSBpZiAobXggPj0gVklERU9TSVpFX1goKGZyKS0+cmVxdWVzdCkpIHsKKwkJbXg9IFZJREVPU0laRV9YKChmciktPnJlcXVlc3QpIC0gMTsKKwkJbGltaXRlcisrOworCX0KKwlpZiAobXkgPCAwKSB7CisJCW15ID0gMDsKKwkJbGltaXRlcisrOworCX0gZWxzZSBpZiAobXkgPj0gVklERU9TSVpFX1koKGZyKS0+cmVxdWVzdCkpIHsKKwkJbXkgPSBWSURFT1NJWkVfWSgoZnIpLT5yZXF1ZXN0KSAtIDE7CisJCWxpbWl0ZXIrKzsKKwl9CisJcGYgPSAoZnIpLT5kYXRhICsgVjRMX0JZVEVTX1BFUl9QSVhFTCooKGl5KSpWSURFT1NJWkVfWCgoZnIpLT5yZXF1ZXN0KSArIChpeCkpOworCWlmIChsaW1pdGVyKSB7CisJCSpwZisrID0gMDsKKwkJKnBmKysgPSAwOworCQkqcGYrKyA9IDB4RkY7CisJfSBlbHNlIHsKKwkJKnBmKysgPSAodmIpOworCQkqcGYrKyA9ICh2Zyk7CisJCSpwZisrID0gKHZyKTsKKwl9Cit9CisKKyNlbmRpZiAvKiB1c2J2aWRlb19oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU4NTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwpAQCAtMCwwICsxLDE0MDkgQEAKKy8qCisgKiBVU0IgVmlDYW0gV2ViQ2FtIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAyIEpvZSBCdXJrcyAoamJ1cmtzQHdhdmljbGUub3JnKSwKKyAqICAgICAgICAgICAgICAgICAgICBDaHJpc3RvcGhlciBMIENoZW5leSAoY2NoZW5leUBjaGVuZXkuY3gpLAorICogICAgICAgICAgICAgICAgICAgIFBhdmVsIE1hY2hlayAocGF2ZWxAc3VzZS5jeiksCisgKiAgICAgICAgICAgICAgICAgICAgSm9obiBUeW5lciAoanR5bmVyQGNzLnVjci5lZHUpLAorICogICAgICAgICAgICAgICAgICAgIE1vbnJvZSBXaWxsaWFtcyAobW9ucm9lQHBvYm94LmNvbSkKKyAqCisgKiBTdXBwb3J0cyAzQ09NIEhvbWVDb25uZWN0IFBDIERpZ2l0YWwgV2ViQ2FtCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBiYXNlZCBoZWF2aWx5IG9uIHRoZSBDUGlBIHdlYmNhbSBkcml2ZXIgd2hpY2ggd2FzCisgKiB3cml0dGVuIGJ5IFBldGVyIFByZWdsZXIsIFNjb3R0IEouIEJlcnRpbiBhbmQgSm9oYW5uZXMgRXJkZmVsdAorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgY29kZSB3ZXJlIGFsc28gY29waWVkIGZyb20gdXNidmlkZW8uYworICoKKyAqIFNwZWNpYWwgdGhhbmtzIHRvIHRoZSB0aGUgd2hvbGUgdGVhbSBhdCBTb3VyY2Vmb3JnZSBmb3IgaGVscCBtYWtpbmcKKyAqIHRoaXMgZHJpdmVyIGJlY29tZSBhIHJlYWxpdHkuICBOb3RhYmx5OgorICogQW5keSBBcm1zdHJvbmcgd2hvIHJldmVyc2UgZW5naW5lZXJlZCB0aGUgY29sb3IgZW5jb2RpbmcgYW5kCisgKiBQYXZlbCBNYWNoZWsgYW5kIENocmlzIENoZW5leSB3aG8gd29ya2VkIG9uIHJldmVyc2UgZW5naW5lZXJpbmcgdGhlCisgKiAgICBjYW1lcmEgY29udHJvbHMgYW5kIHdyb3RlIHRoZSBmaXJzdCBnZW5lcmF0aW9uIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSAidXNidmlkZW8uaCIKKworLy8gI2RlZmluZSBWSUNBTV9ERUJVRworCisjaWZkZWYgVklDQU1fREVCVUcKKyNkZWZpbmUgQURCRyhsaW5lbm8sZm10LGFyZ3MuLi4pIHByaW50ayhmbXQsIGppZmZpZXMsIF9fRlVOQ1RJT05fXywgbGluZW5vLCAjI2FyZ3MpCisjZGVmaW5lIERCRyhmbXQsYXJncy4uLikgQURCRygoX19MSU5FX18pLEtFUk5fREVCVUcgX19GSUxFX18iKCVsZCk6JXMgKCVkKToiZm10LCMjYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbW4sYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAgICAgICAgICJKb2UgQnVya3MsIGpidXJrc0B3YXZpY2xlLm9yZyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAgICAgIlZpQ2FtIFdlYkNhbSBEcml2ZXIiCisKKy8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KKyNkZWZpbmUgVVNCX1ZJQ0FNX1ZFTkRPUl9JRAkweDA0YzEKKyNkZWZpbmUgVVNCX1ZJQ0FNX1BST0RVQ1RfSUQJMHgwMDlkCisKKyNkZWZpbmUgVklDQU1fQllURVNfUEVSX1BJWEVMICAgMworI2RlZmluZSBWSUNBTV9NQVhfUkVBRF9TSVpFICAgICAoNTEyKjI0MisxMjgpCisjZGVmaW5lIFZJQ0FNX01BWF9GUkFNRV9TSVpFICAgIChWSUNBTV9CWVRFU19QRVJfUElYRUwqMzIwKjI0MCkKKyNkZWZpbmUgVklDQU1fRlJBTUVTICAgICAgICAgICAgMgorCisjZGVmaW5lIFZJQ0FNX0hFQURFUl9TSVpFICAgICAgIDY0CisKKyNkZWZpbmUgY2xhbXAoIHgsIGwsIGggKSAgICAgICAgbWF4X3QoIF9fdHlwZW9mX18oIHggKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGwgKSwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3QoIF9fdHlwZW9mX18oIHggKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGggKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB4ICkgKSApCisKKy8qIE5vdCBzdXJlIHdoYXQgYWxsIHRoZSBieXRlcyBpbiB0aGVzZSBjaGFyCisgKiBhcnJheXMgZG8sIGJ1dCB0aGV5J3JlIG5lY2Vzc2FyeSB0byBtYWtlCisgKiB0aGUgY2FtZXJhIHdvcmsuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2V0dXAxW10gPSB7CisJMHhCNiwgMHhDMywgMHgxRiwgMHgwMCwgMHgwMiwgMHg2NCwgMHhFNywgMHg2NywKKwkweEZELCAweEZGLCAweDBFLCAweEMwLCAweEU3LCAweDA5LCAweERFLCAweDAwLAorCTB4OEUsIDB4MDAsIDB4QzAsIDB4MDksIDB4NDAsIDB4MDMsIDB4QzAsIDB4MTcsCisJMHg0NCwgMHgwMywgMHg0QiwgMHhBRiwgMHhDMCwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDRCLCAweEFGLCAweDk3LCAweENGLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXR1cDJbXSA9IHsKKwkweEI2LCAweEMzLCAweDAzLCAweDAwLCAweDAzLCAweDY0LCAweDE4LCAweDAwLAorCTB4MDAsIDB4MDAKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHVwM1tdID0geworCTB4QjYsIDB4QzMsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjQsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHVwNFtdID0geworCTB4QjYsIDB4QzMsIDB4OEYsIDB4MDYsIDB4MDIsIDB4NjQsIDB4RTcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHhDMCwgMHhFNywgMHgwNywgMHgwMCwgMHgwMCwKKwkweDNFLCAweEMwLCAweEU3LCAweDA3LCAweDU0LCAweDAxLCAweEFBLCAweDAwLAorCTB4RTcsIDB4MDcsIDB4QzgsIDB4MDUsIDB4QjYsIDB4MDAsIDB4RTcsIDB4MDcsCisJMHg0MiwgMHgwMSwgMHhEMiwgMHgwMCwgMHhFNywgMHgwNywgMHg3QywgMHgwMCwKKwkweDE2LCAweDAwLCAweEU3LCAweDA3LCAweDU2LCAweDAwLCAweDE4LCAweDAwLAorCTB4RTcsIDB4MDcsIDB4MDYsIDB4MDAsIDB4OTIsIDB4QzAsIDB4RTcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgxRSwgMHhDMCwgMHhFNywgMHgwNywgMHhGRiwgMHhGRiwKKwkweDIyLCAweEMwLCAweEU3LCAweDA3LCAweDA0LCAweDAwLCAweDI0LCAweEMwLAorCTB4RTcsIDB4MDcsIDB4RUMsIDB4MjcsIDB4MjgsIDB4QzAsIDB4RTcsIDB4MDcsCisJMHgxNiwgMHgwMSwgMHg4RSwgMHgwMCwgMHhFNywgMHg4NywgMHgwMSwgMHgwMCwKKwkweDBFLCAweEMwLCAweDk3LCAweENGLCAweEQ3LCAweDA5LCAweDAwLCAweEMwLAorCTB4RTcsIDB4NzcsIDB4MDEsIDB4MDAsIDB4OTIsIDB4QzAsIDB4MDksIDB4QzEsCisJMHhFNywgMHgwOSwgMHhGRSwgMHgwNSwgMHgyNCwgMHgwMSwgMHhFNywgMHgwOSwKKwkweDA0LCAweDA2LCAweDI2LCAweDAxLCAweEU3LCAweDA3LCAweDA3LCAweDAwLAorCTB4OTIsIDB4QzAsIDB4RTcsIDB4MDUsIDB4MDAsIDB4QzAsIDB4QzAsIDB4REYsCisJMHg5NywgMHhDRiwgMHgxNywgMHgwMCwgMHg1NywgMHgwMCwgMHgxNywgMHgwMiwKKwkweEQ3LCAweDA5LCAweDAwLCAweEMwLCAweEU3LCAweDc3LCAweDAxLCAweDAwLAorCTB4OTIsIDB4QzAsIDB4MEEsIDB4QzEsIDB4RTcsIDB4NTcsIDB4RkYsIDB4RkYsCisJMHhGQSwgMHgwNSwgMHgwRCwgMHhDMCwgMHhFNywgMHg1NywgMHgwMCwgMHgwMCwKKwkweEZBLCAweDA1LCAweDBGLCAweEMwLCAweDlGLCAweEFGLCAweEM2LCAweDAwLAorCTB4RTcsIDB4MDUsIDB4MDAsIDB4QzAsIDB4QzgsIDB4MDUsIDB4QzEsIDB4MDUsCisJMHhDMCwgMHgwNSwgMHhDMCwgMHhERiwgMHg5NywgMHhDRiwgMHgyNywgMHhEQSwKKwkweEZBLCAweDA1LCAweEVGLCAweDA3LCAweDAxLCAweDAwLCAweDBCLCAweDA2LAorCTB4NzMsIDB4Q0YsIDB4OUYsIDB4QUYsIDB4NzgsIDB4MDEsIDB4OUYsIDB4QUYsCisJMHgxQSwgMHgwMywgMHg2RSwgMHhDRiwgMHhFNywgMHgwOSwgMHhGQywgMHgwNSwKKwkweDI0LCAweDAxLCAweEU3LCAweDA5LCAweDAyLCAweDA2LCAweDI2LCAweDAxLAorCTB4RTcsIDB4MDcsIDB4MDcsIDB4MDAsIDB4OTIsIDB4QzAsIDB4RTcsIDB4MDksCisJMHhGQywgMHgwNSwgMHhGRSwgMHgwNSwgMHhFNywgMHgwOSwgMHgwMiwgMHgwNiwKKwkweDA0LCAweDA2LCAweEU3LCAweDA5LCAweDAwLCAweDA2LCAweEZDLCAweDA1LAorCTB4RTcsIDB4MDksIDB4RkUsIDB4MDUsIDB4MDAsIDB4MDYsIDB4MjcsIDB4REEsCisJMHhGQSwgMHgwNSwgMHhFNywgMHg1NywgMHgwMSwgMHgwMCwgMHhGQSwgMHgwNSwKKwkweDAyLCAweENBLCAweDA0LCAweEMwLCAweDk3LCAweENGLCAweDlGLCAweEFGLAorCTB4NjYsIDB4MDUsIDB4OTcsIDB4Q0YsIDB4RTcsIDB4MDcsIDB4NDAsIDB4MDAsCisJMHgwMiwgMHgwNiwgMHhDOCwgMHgwOSwgMHhGQywgMHgwNSwgMHg5RiwgMHhBRiwKKwkweERBLCAweDAyLCAweDk3LCAweENGLCAweENGLCAweDE3LCAweDAyLCAweDAwLAorCTB4RUYsIDB4NTcsIDB4ODEsIDB4MDAsIDB4MDksIDB4MDYsIDB4OUYsIDB4QTAsCisJMHhCNiwgMHgwMSwgMHhFRiwgMHg1NywgMHg4MCwgMHgwMCwgMHgwOSwgMHgwNiwKKwkweDlGLCAweEEwLCAweDQwLCAweDAyLCAweEVGLCAweDU3LCAweDAxLCAweDAwLAorCTB4MEIsIDB4MDYsIDB4OUYsIDB4QTAsIDB4NDYsIDB4MDMsIDB4RTcsIDB4MDcsCisJMHgwMSwgMHgwMCwgMHgwQSwgMHhDMCwgMHg0NiwgMHhBRiwgMHg0NywgMHhBRiwKKwkweDlGLCAweEFGLCAweDQwLCAweDAyLCAweEU3LCAweDA3LCAweDJFLCAweDAwLAorCTB4MEEsIDB4QzAsIDB4RUYsIDB4ODcsIDB4ODAsIDB4MDAsIDB4MDksIDB4MDYsCisJMHg5NywgMHhDRiwgMHgwMCwgMHgwRSwgMHgwMSwgMHgwMCwgMHhDMCwgMHg1NywKKwkweDUxLCAweDAwLCAweDlGLCAweEMwLCAweDlFLCAweDAyLCAweEMwLCAweDU3LAorCTB4NTAsIDB4MDAsIDB4MjAsIDB4QzAsIDB4QzAsIDB4NTcsIDB4NTUsIDB4MDAsCisJMHgxMiwgMHhDMCwgMHhDMCwgMHg1NywgMHg1NiwgMHgwMCwgMHg5RiwgMHhDMCwKKwkweDcyLCAweDAyLCAweDlGLCAweENGLCAweEQ2LCAweDAyLCAweEMxLCAweDBCLAorCTB4MDgsIDB4MDYsIDB4MDEsIDB4RDAsIDB4NkYsIDB4OTAsIDB4MDgsIDB4MDYsCisJMHhDMCwgMHgwNywgMHgwOCwgMHgwMCwgMHhDMSwgMHgwQiwgMHgwOCwgMHgwNiwKKwkweDlGLCAweEFGLCAweDI4LCAweDA1LCAweDk3LCAweENGLCAweDJGLCAweDBFLAorCTB4MDIsIDB4MDAsIDB4MDgsIDB4MDYsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MDAsCisJMHhDMSwgMHgwQiwgMHgwOCwgMHgwNiwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwKKwkweDlGLCAweENGLCAweEQ2LCAweDAyLCAweDJGLCAweDBFLCAweDAyLCAweDAwLAorCTB4MDksIDB4MDYsIDB4RUYsIDB4ODcsIDB4ODAsIDB4MDAsIDB4MDksIDB4MDYsCisJMHg5RiwgMHhDRiwgMHhENiwgMHgwMiwgMHhFRiwgMHg2NywgMHg3RiwgMHhGRiwKKwkweDA5LCAweDA2LCAweEU3LCAweDY3LCAweEZGLCAweEZELCAweDIyLCAweEMwLAorCTB4RTcsIDB4NjcsIDB4RUYsIDB4RkYsIDB4MjQsIDB4QzAsIDB4RTcsIDB4ODcsCisJMHgxMCwgMHgwMCwgMHgyOCwgMHhDMCwgMHg5RiwgMHhBRiwgMHhCOCwgMHgwNSwKKwkweEU3LCAweDg3LCAweEUwLCAweDIxLCAweDI0LCAweEMwLCAweDlGLCAweEFGLAorCTB4QTgsIDB4MDUsIDB4RTcsIDB4ODcsIDB4MDgsIDB4MDAsIDB4MjQsIDB4QzAsCisJMHhFNywgMHg2NywgMHhERiwgMHhGRiwgMHgyNCwgMHhDMCwgMHhDOCwgMHgwNywKKwkweDBBLCAweDAwLCAweEMwLCAweDA3LCAweDAwLCAweDAwLCAweEMxLCAweDA3LAorCTB4MDEsIDB4MDAsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4OUYsIDB4QUYsCisJMHhCOCwgMHgwNSwgMHhDMCwgMHgwNywgMHg5RSwgMHgwMCwgMHg5RiwgMHhBRiwKKwkweDQ0LCAweDA1LCAweEU3LCAweDY3LCAweEZGLCAweEZFLCAweDI0LCAweEMwLAorCTB4QzAsIDB4MDksIDB4MjAsIDB4QzAsIDB4RTcsIDB4ODcsIDB4MDAsIDB4MDEsCisJMHgyNCwgMHhDMCwgMHhDMCwgMHg3NywgMHgwMCwgMHgwMiwgMHgwRiwgMHhDMSwKKwkweEU3LCAweDY3LCAweEY3LCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDY3LAorCTB4RjcsIDB4RkYsIDB4MjQsIDB4QzAsIDB4RTcsIDB4ODcsIDB4MDgsIDB4MDAsCisJMHgyNCwgMHhDMCwgMHgwOCwgMHhEQSwgMHg1RSwgMHhDMSwgMHhFRiwgMHgwNywKKwkweDgwLCAweDAwLCAweDA5LCAweDA2LCAweDk3LCAweENGLCAweEVGLCAweDA3LAorCTB4MDEsIDB4MDAsIDB4MEEsIDB4MDYsIDB4OTcsIDB4Q0YsIDB4RUYsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwQiwgMHgwNiwgMHhFRiwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDBBLCAweDA2LCAweEVGLCAweDY3LCAweDdGLCAweEZGLCAweDA5LCAweDA2LAorCTB4RUYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDYsIDB4RTcsIDB4NjcsCisJMHhFRiwgMHhGRiwgMHgyOCwgMHhDMCwgMHhFNywgMHg2NywgMHgxNywgMHhEOCwKKwkweDI0LCAweEMwLCAweEU3LCAweDA3LCAweDAwLCAweDAwLCAweDFFLCAweEMwLAorCTB4RTcsIDB4MDcsIDB4RkYsIDB4RkYsIDB4MjIsIDB4QzAsIDB4OTcsIDB4Q0YsCisJMHhDOCwgMHgwNywgMHgwRSwgMHgwNiwgMHg5RiwgMHhBRiwgMHhEQSwgMHgwMiwKKwkweEU3LCAweDA3LCAweDAwLCAweDAwLCAweEYyLCAweDA1LCAweEU3LCAweDA3LAorCTB4MTAsIDB4MDAsIDB4RjYsIDB4MDUsIDB4RTcsIDB4MDcsIDB4MEUsIDB4MDYsCisJMHhGNCwgMHgwNSwgMHhFNywgMHgwNywgMHhENiwgMHgwMiwgMHhGOCwgMHgwNSwKKwkweEM4LCAweDA3LCAweEYyLCAweDA1LCAweEMxLCAweDA3LCAweDAwLCAweDgwLAorCTB4NTAsIDB4QUYsIDB4OTcsIDB4Q0YsIDB4MkYsIDB4MEMsIDB4MDIsIDB4MDAsCisJMHgwNywgMHgwNiwgMHgyRiwgMHgwQywgMHgwNCwgMHgwMCwgMHgwNiwgMHgwNiwKKwkweEU3LCAweDA3LCAweDAwLCAweDAwLCAweEYyLCAweDA1LCAweEU3LCAweDA3LAorCTB4MTAsIDB4MDAsIDB4RjYsIDB4MDUsIDB4RTcsIDB4MDcsIDB4RTIsIDB4MDUsCisJMHhGNCwgMHgwNSwgMHhFNywgMHgwNywgMHhDRSwgMHgwMiwgMHhGOCwgMHgwNSwKKwkweEM4LCAweDA3LCAweEYyLCAweDA1LCAweEMxLCAweDA3LCAweDAwLCAweDgwLAorCTB4NTEsIDB4QUYsIDB4OTcsIDB4Q0YsIDB4OUYsIDB4QUYsIDB4NjYsIDB4MDQsCisJMHg5RiwgMHhBRiwgMHgxQSwgMHgwMywgMHg1OSwgMHhBRiwgMHg5NywgMHhDRiwKKwkweEMwLCAweDA3LCAweDBFLCAweDAwLCAweEMxLCAweDBCLCAweDBDLCAweDA2LAorCTB4NDEsIDB4RDEsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsCisJMHgzQywgMHgwMCwgMHg5RiwgMHhBRiwgMHg0NCwgMHgwNSwgMHg2OCwgMHgwMCwKKwkweEMwLCAweDA3LCAweDNCLCAweDAwLCAweDlGLCAweEFGLCAweDQ0LCAweDA1LAorCTB4NkYsIDB4MDAsIDB4MEMsIDB4MDYsIDB4NjgsIDB4MDAsIDB4RTAsIDB4MDcsCisJMHgwNCwgMHgwMSwgMHhFOCwgMHgwQiwgMHgwQSwgMHgwNiwgMHhFOCwgMHgwNywKKwkweDAwLCAweDAwLCAweEUwLCAweDA3LCAweDAwLCAweDAyLCAweEUwLCAweDA3LAorCTB4RUMsIDB4MDEsIDB4RTAsIDB4MDcsIDB4RkMsIDB4RkYsIDB4OTcsIDB4Q0YsCisJMHhFNywgMHgwNywgMHhGRiwgMHhGRiwgMHhGQSwgMHgwNSwgMHhFRiwgMHgwNywKKwkweDAwLCAweDAwLCAweDBCLCAweDA2LCAweEU3LCAweDA3LCAweDBFLCAweDA2LAorCTB4MjQsIDB4MDEsIDB4RTcsIDB4MDcsIDB4MEUsIDB4MDYsIDB4RkUsIDB4MDUsCisJMHhFNywgMHgwNywgMHg0MCwgMHgwMCwgMHgyNiwgMHgwMSwgMHhFNywgMHgwNywKKwkweDQwLCAweDAwLCAweDA0LCAweDA2LCAweEU3LCAweDA3LCAweDA3LCAweDAwLAorCTB4OTIsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4RUYsIDB4MDcsIDB4MDIsIDB4MDAsCisJMHgwQiwgMHgwNiwgMHg5RiwgMHhBRiwgMHg3OCwgMHgwMSwgMHhFRiwgMHg3NywKKwkweDgwLCAweDAwLCAweDA3LCAweDA2LCAweDlGLCAweEMwLCAweDE0LCAweDA0LAorCTB4RUYsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDYsIDB4MzcsIDB4QzAsCisJMHhFRiwgMHg3NywgMHgwMSwgMHgwMCwgMHgwRCwgMHgwNiwgMHgwRiwgMHhDMSwKKwkweEVGLCAweDA3LCAweDAxLCAweDAwLCAweDBELCAweDA2LCAweEMwLCAweDA3LAorCTB4MDIsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzAsIDB4MDAsIDB4OUYsIDB4QUYsCisJMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwMSwgMHgwMCwgMHhDMSwgMHgwNywKKwkweDAyLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEM4LCAweDA3LAorCTB4RkYsIDB4NEYsIDB4OUYsIDB4QUYsIDB4QTgsIDB4MDUsIDB4QzAsIDB4MDcsCisJMHgzOCwgMHgwMCwgMHg5RiwgMHhBRiwgMHg0NCwgMHgwNSwgMHhDMSwgMHg3NywKKwkweDAzLCAweDAwLCAweDAyLCAweEMxLCAweDA4LCAweERBLCAweDc1LCAweEMxLAorCTB4QzEsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MEEsIDB4QzEsIDB4QzAsIDB4MDcsCisJMHgwMSwgMHgwMCwgMHhDMSwgMHgwNywgMHgwMiwgMHgwMCwgMHg5RiwgMHhBRiwKKwkweDI4LCAweDA1LCAweEVGLCAweDA3LCAweDAxLCAweDAwLCAweDA2LCAweDA2LAorCTB4MkMsIDB4Q0YsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MDAsIDB4QzEsIDB4MDcsCisJMHgwNCwgMHgwMCwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhFRiwgMHgwNywKKwkweDAwLCAweDAwLCAweDA2LCAweDA2LCAweDIyLCAweENGLCAweEVGLCAweDA3LAorCTB4MDAsIDB4MDAsIDB4MEQsIDB4MDYsIDB4RUYsIDB4NTcsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHgwNiwgMHgxQiwgMHhDMCwgMHhDMCwgMHgwNywgMHgwMSwgMHgwMCwKKwkweEMxLCAweDA3LCAweDAxLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4QzAsIDB4MDcsIDB4MDIsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzAsIDB4MDAsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDOCwgMHgwNywgMHhGRiwgMHg0RiwKKwkweDlGLCAweEFGLCAweEE4LCAweDA1LCAweEMwLCAweDA3LCAweDM4LCAweDAwLAorCTB4OUYsIDB4QUYsIDB4NDQsIDB4MDUsIDB4QzEsIDB4NjcsIDB4MDMsIDB4MDAsCisJMHhDMSwgMHg1NywgMHgwMywgMHgwMCwgMHgwMiwgMHhDMCwgMHgwOCwgMHhEQSwKKwkweDczLCAweEMxLCAweEMwLCAweDA3LCAweDAyLCAweDAwLCAweEMxLCAweDA3LAorCTB4MTIsIDB4MDAsIDB4RUYsIDB4NTcsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDYsCisJMHgwMiwgMHhDMCwgMHhDMSwgMHgwNywgMHgyMywgMHgwMCwgMHg5RiwgMHhBRiwKKwkweDI4LCAweDA1LCAweEMwLCAweDA3LCAweDE0LCAweDAwLCAweEMxLCAweDBCLAorCTB4RUEsIDB4MDUsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsCisJMHgzRSwgMHgwMCwgMHg5RiwgMHhBRiwgMHgwQSwgMHgwNSwgMHhFNywgMHgwOSwKKwkweEU0LCAweDA1LCAweEZBLCAweDA1LCAweDI3LCAweEQ4LCAweEZBLCAweDA1LAorCTB4RTcsIDB4MDcsIDB4MEUsIDB4MDYsIDB4RkMsIDB4MDUsIDB4RTcsIDB4MDcsCisJMHg0RSwgMHgwNiwgMHgwMCwgMHgwNiwgMHhFNywgMHgwNywgMHg0MCwgMHgwMCwKKwkweDAyLCAweDA2LCAweDlGLCAweEFGLCAweDY2LCAweDA1LCAweDlGLCAweEFGLAorCTB4QzYsIDB4MDAsIDB4OTcsIDB4Q0YsIDB4QzEsIDB4MEIsIDB4RTIsIDB4MDUsCisJMHg0MSwgMHhEMCwgMHgwMSwgMHhEMiwgMHhDMSwgMHgxNywgMHgyMywgMHgwMCwKKwkweDlGLCAweEFGLCAweERDLCAweDA0LCAweEMwLCAweDA3LCAweDA0LCAweDAwLAorCTB4QzEsIDB4MEIsIDB4RTMsIDB4MDUsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsCisJMHhDMCwgMHgwNywgMHgwNiwgMHgwMCwgMHhDMSwgMHgwOSwgMHhFNiwgMHgwNSwKKwkweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEMwLCAweDA3LCAweDA3LCAweDAwLAorCTB4QzEsIDB4MDksIDB4RTYsIDB4MDUsIDB4QzEsIDB4RDEsIDB4OUYsIDB4QUYsCisJMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwQiwgMHgwMCwgMHhDMSwgMHgwOSwKKwkweEU4LCAweDA1LCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEMwLCAweDA3LAorCTB4MEMsIDB4MDAsIDB4QzEsIDB4MDksIDB4RTgsIDB4MDUsIDB4QzEsIDB4RDEsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwRCwgMHgwMCwKKwkweEMxLCAweDA3LCAweDA5LCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4QzAsIDB4MDcsIDB4MDMsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzIsIDB4MDAsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwRiwgMHgwMCwKKwkweEMxLCAweDA3LCAweDAwLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4OTcsIDB4Q0YsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RDksIDB4MjQsIDB4QzAsCisJMHhDOCwgMHgwNywgMHgwQSwgMHgwMCwgMHg0MCwgMHgwMCwgMHhDMCwgMHg2NywKKwkweDAwLCAweDAyLCAweDI3LCAweDgwLCAweDI0LCAweEMwLCAweEU3LCAweDg3LAorCTB4MDAsIDB4MDQsIDB4MjQsIDB4QzAsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RjksCisJMHgyNCwgMHhDMCwgMHgwMSwgMHhEMiwgMHgwOCwgMHhEQSwgMHg3MiwgMHhDMSwKKwkweEU3LCAweDg3LCAweDAwLCAweDIwLCAweDI0LCAweEMwLCAweDk3LCAweENGLAorCTB4MjcsIDB4MDAsIDB4MUUsIDB4QzAsIDB4RTcsIDB4ODcsIDB4RkYsIDB4MDAsCisJMHgyMiwgMHhDMCwgMHhFNywgMHg2NywgMHg3RiwgMHhGRiwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDg3LCAweDgwLCAweDAwLCAweDI0LCAweEMwLCAweEU3LCAweDg3LAorCTB4ODAsIDB4MDAsIDB4MjQsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4OUYsIDB4QUYsCisJMHgwQSwgMHgwNSwgMHg2NywgMHgwMCwgMHgxRSwgMHhDMCwgMHhFNywgMHg2NywKKwkweEJGLCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDg3LCAweDQwLCAweDAwLAorCTB4MjQsIDB4QzAsIDB4RTcsIDB4ODcsIDB4NDAsIDB4MDAsIDB4MjQsIDB4QzAsCisJMHg5NywgMHhDRiwgMHg5RiwgMHhBRiwgMHgwQSwgMHgwNSwgMHhFNywgMHg2NywKKwkweDAwLCAweEZGLCAweDIyLCAweEMwLCAweEU3LCAweDY3LCAweEZGLCAweEZFLAorCTB4MjQsIDB4QzAsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RkUsIDB4MjQsIDB4QzAsCisJMHhDMSwgMHgwOSwgMHgyMCwgMHhDMCwgMHhFNywgMHg4NywgMHgwMCwgMHgwMSwKKwkweDI0LCAweEMwLCAweDk3LCAweENGLCAweEMwLCAweDA3LCAweDQwLCAweDAwLAorCTB4QzgsIDB4MDksIDB4RkMsIDB4MDUsIDB4RTcsIDB4NjcsIDB4MDAsIDB4RkYsCisJMHgyMiwgMHhDMCwgMHhFNywgMHg2NywgMHhGRiwgMHhGRSwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDY3LCAweEJGLCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDY3LAorCTB4QkYsIDB4RkYsIDB4MjQsIDB4QzAsIDB4MDAsIDB4REEsIDB4RTgsIDB4MDksCisJMHgyMCwgMHhDMCwgMHhFNywgMHg4NywgMHg0MCwgMHgwMCwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDg3LCAweDQwLCAweDAwLCAweDI0LCAweEMwLCAweDAwLCAweERBLAorCTB4RTgsIDB4MDksIDB4MjAsIDB4QzAsIDB4NkQsIDB4QzEsIDB4RTcsIDB4ODcsCisJMHgwMCwgMHgwMSwgMHgyNCwgMHhDMCwgMHg5NywgMHhDRiwgMHhFNywgMHgwNywKKwkweDMyLCAweDAwLCAweDEyLCAweEMwLCAweEU3LCAweDc3LCAweDAwLCAweDgwLAorCTB4MTIsIDB4QzAsIDB4N0MsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4RTcsIDB4MDcsCisJMHgyMCwgMHg0RSwgMHgxMiwgMHhDMCwgMHhFNywgMHg3NywgMHgwMCwgMHg4MCwKKwkweDEyLCAweEMwLCAweDdDLCAweEMwLCAweDk3LCAweENGLCAweDA5LCAweDAyLAorCTB4MTksIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTYsIDB4MDksCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXR1cDVbXSA9IHsKKwkweEI2LCAweEMzLCAweDJGLCAweDAxLCAweDAzLCAweDY0LCAweDBFLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MUEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjYsIDB4MDAsCisJMHg0QSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2QSwgMHgwMCwgMHg5MiwgMHgwMCwKKwkweDlBLCAweDAwLCAweEEwLCAweDAwLCAweEIyLCAweDAwLCAweEI4LCAweDAwLAorCTB4QkUsIDB4MDAsIDB4QzIsIDB4MDAsIDB4QzgsIDB4MDAsIDB4Q0UsIDB4MDAsCisJMHhEQywgMHgwMCwgMHhEQSwgMHgwMCwgMHhFMiwgMHgwMCwgMHhFMCwgMHgwMCwKKwkweEU4LCAweDAwLCAweEU2LCAweDAwLCAweEVFLCAweDAwLCAweEVDLCAweDAwLAorCTB4RjIsIDB4MDAsIDB4RjgsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDEsCisJMHgwRSwgMHgwMSwgMHgxMiwgMHgwMSwgMHgxRSwgMHgwMSwgMHgyMiwgMHgwMSwKKwkweDI4LCAweDAxLCAweDJDLCAweDAxLCAweDMyLCAweDAxLCAweDM2LCAweDAxLAorCTB4NDQsIDB4MDEsIDB4NTAsIDB4MDEsIDB4NUUsIDB4MDEsIDB4NzIsIDB4MDEsCisJMHg3NiwgMHgwMSwgMHg3QSwgMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwgMHgwMSwKKwkweDhDLCAweDAxLCAweDk0LCAweDAxLCAweDlDLCAweDAxLCAweEEwLCAweDAxLAorCTB4QTQsIDB4MDEsIDB4QUEsIDB4MDEsIDB4QjAsIDB4MDEsIDB4QjQsIDB4MDEsCisJMHhCQSwgMHgwMSwgMHhEMCwgMHgwMSwgMHhEQSwgMHgwMSwgMHhGNiwgMHgwMSwKKwkweEZBLCAweDAxLCAweDAyLCAweDAyLCAweDM0LCAweDAyLCAweDNDLCAweDAyLAorCTB4NDQsIDB4MDIsIDB4NEEsIDB4MDIsIDB4NTAsIDB4MDIsIDB4NTYsIDB4MDIsCisJMHg3NCwgMHgwMiwgMHg3OCwgMHgwMiwgMHg3RSwgMHgwMiwgMHg4NCwgMHgwMiwKKwkweDhBLCAweDAyLCAweDg4LCAweDAyLCAweDkwLCAweDAyLCAweDhFLCAweDAyLAorCTB4OTQsIDB4MDIsIDB4QTIsIDB4MDIsIDB4QTgsIDB4MDIsIDB4QUUsIDB4MDIsCisJMHhCNCwgMHgwMiwgMHhCQSwgMHgwMiwgMHhCOCwgMHgwMiwgMHhDMCwgMHgwMiwKKwkweEJFLCAweDAyLCAweEM0LCAweDAyLCAweEQwLCAweDAyLCAweEQ0LCAweDAyLAorCTB4RTAsIDB4MDIsIDB4RTYsIDB4MDIsIDB4RUUsIDB4MDIsIDB4RjgsIDB4MDIsCisJMHhGQywgMHgwMiwgMHgwNiwgMHgwMywgMHgxRSwgMHgwMywgMHgyNCwgMHgwMywKKwkweDI4LCAweDAzLCAweDMwLCAweDAzLCAweDJFLCAweDAzLCAweDNDLCAweDAzLAorCTB4NEEsIDB4MDMsIDB4NEUsIDB4MDMsIDB4NTQsIDB4MDMsIDB4NTgsIDB4MDMsCisJMHg1RSwgMHgwMywgMHg2NiwgMHgwMywgMHg2RSwgMHgwMywgMHg3QSwgMHgwMywKKwkweDg2LCAweDAzLCAweDhFLCAweDAzLCAweDk2LCAweDAzLCAweEIyLCAweDAzLAorCTB4QjgsIDB4MDMsIDB4QzYsIDB4MDMsIDB4Q0MsIDB4MDMsIDB4RDQsIDB4MDMsCisJMHhEQSwgMHgwMywgMHhFOCwgMHgwMywgMHhGNCwgMHgwMywgMHhGQywgMHgwMywKKwkweDA0LCAweDA0LCAweDIwLCAweDA0LCAweDJBLCAweDA0LCAweDMyLCAweDA0LAorCTB4MzYsIDB4MDQsIDB4M0UsIDB4MDQsIDB4NDQsIDB4MDQsIDB4NDIsIDB4MDQsCisJMHg0OCwgMHgwNCwgMHg0RSwgMHgwNCwgMHg0QywgMHgwNCwgMHg1NCwgMHgwNCwKKwkweDUyLCAweDA0LCAweDVBLCAweDA0LCAweDVFLCAweDA0LCAweDYyLCAweDA0LAorCTB4NjgsIDB4MDQsIDB4NzQsIDB4MDQsIDB4N0MsIDB4MDQsIDB4ODAsIDB4MDQsCisJMHg4OCwgMHgwNCwgMHg4QywgMHgwNCwgMHg5NCwgMHgwNCwgMHg5QSwgMHgwNCwKKwkweEEyLCAweDA0LCAweEE2LCAweDA0LCAweEFFLCAweDA0LCAweEI0LCAweDA0LAorCTB4QzAsIDB4MDQsIDB4Q0MsIDB4MDQsIDB4RDgsIDB4MDQsIDB4MkEsIDB4MDUsCisJMHg0NiwgMHgwNSwgMHg2QywgMHgwNSwgMHgwMCwgMHgwMAorfTsKKworLyogcnZtYWxsb2MgLyBydmZyZWUgY29waWVkIGZyb20gdXNidmlkZW8uYworICoKKyAqIE5vdCBzdXJlIHdoeSB0aGVzZSBhcmUgbm90IHlldCBub24tc3RhdGljcyB3aGljaCBJIGNhbiByZWZlcmVuY2UgdGhyb3VnaAorICogdXNidmlkZW8uaCB0aGUgc2FtZSBhcyBpdCBpcyBpbiAyLjQuMjAuICBJIGJldCB0aGlzIHdpbGwgZ2V0IGZpeGVkIHNvbWV0aW1lCisgKiBpbiB0aGUgZnV0dXJlLgorICogCisqLworc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKK3N0cnVjdCB2aWNhbV9jYW1lcmEgeworCXUxNiBzaHV0dGVyX3NwZWVkOwkvLyBjYXB0dXJlIHNodXR0ZXIgc3BlZWQKKwl1MTYgZ2FpbjsJCS8vIGNhcHR1cmUgZ2FpbgorCisJdTggKnJhd19pbWFnZTsJCS8vIHJhdyBkYXRhIGNhcHR1cmVkIGZyb20gdGhlIGNhbWVyYQorCXU4ICpmcmFtZWJ1ZjsJCS8vIHByb2Nlc3NlZCBkYXRhIGluIFJHQjI0IGZvcm1hdAorCXU4ICpjbnRybGJ1ZjsJCS8vIGFyZWEgdXNlZCB0byBzZW5kIGNvbnRyb2wgbXNncworCisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvLyB2NGwgdmlkZW8gZGV2aWNlCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8vIHVzYiBkZXZpY2UKKworCS8qIGd1YXJkIGFnYWluc3Qgc2ltdWx0YW5lb3VzIGFjY2Vzc2VzIHRvIHRoZSBjYW1lcmEgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGNhbV9sb2NrOworCisJaW50IGlzX2luaXRpYWxpemVkOworCXU4IG9wZW5fY291bnQ7CisJdTggYnVsa0VuZHBvaW50OworCWludCBuZWVkc0R1bW15UmVhZDsKKworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1BST0NfRlMpCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2RpcjsKKyNlbmRpZgorCit9OworCitzdGF0aWMgaW50IHZpY2FtX3Byb2JlKCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHZpY2FtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIHZvaWQgcmVhZF9mcmFtZShzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sIGludCBmcmFtZW51bSk7CitzdGF0aWMgdm9pZCB2aWNhbV9kZWNvZGVfY29sb3IoY29uc3QgdTggKiwgdTggKik7CisKK3N0YXRpYyBpbnQgX19zZW5kX2NvbnRyb2xfbXNnKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSwKKwkJCSAgICAgIHU4IHJlcXVlc3QsCisJCQkgICAgICB1MTYgdmFsdWUsCisJCQkgICAgICB1MTYgaW5kZXgsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICAgIHUxNiBzaXplKQoreworCWludCBzdGF0dXM7CisKKwkvKiBjcCBtdXN0IGJlIG1lbW9yeSB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBrbWFsbG9jICovCisKKwlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coY2FtLT51ZGV2LAorCQkJCSB1c2Jfc25kY3RybHBpcGUoY2FtLT51ZGV2LCAwKSwKKwkJCQkgcmVxdWVzdCwKKwkJCQkgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCSBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsCisJCQkJIGNwLCBzaXplLCAxMDAwKTsKKworCXN0YXR1cyA9IG1pbihzdGF0dXMsIDApOworCisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHNlbmRpbmcgY29udHJvbCBtZXNzYWdlLCBlcnJvciAlZC5cbiIsCisJCSAgICAgICBzdGF0dXMpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sCisJCQkgICAgdTggcmVxdWVzdCwKKwkJCSAgICB1MTYgdmFsdWUsCisJCQkgICAgdTE2IGluZGV4LAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJICAgIHUxNiBzaXplKQoreworCWludCBzdGF0dXMgPSAtRU5PREVWOworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCWlmIChjYW0tPnVkZXYpIHsKKwkJc3RhdHVzID0gX19zZW5kX2NvbnRyb2xfbXNnKGNhbSwgcmVxdWVzdCwgdmFsdWUsCisJCQkJCSAgICBpbmRleCwgY3AsIHNpemUpOworCX0KKwl1cCgmY2FtLT5jYW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KK3N0YXRpYyBpbnQKK2luaXRpYWxpemVfY2FtZXJhKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSkKK3sKKwljb25zdCBzdHJ1Y3QgeworCQl1OCAqZGF0YTsKKwkJdTMyIHNpemU7CisJfSBmaXJtd2FyZVtdID0geworCQl7IC5kYXRhID0gc2V0dXAxLCAuc2l6ZSA9IHNpemVvZihzZXR1cDEpIH0sCisJCXsgLmRhdGEgPSBzZXR1cDIsIC5zaXplID0gc2l6ZW9mKHNldHVwMikgfSwKKwkJeyAuZGF0YSA9IHNldHVwMywgLnNpemUgPSBzaXplb2Yoc2V0dXAzKSB9LAorCQl7IC5kYXRhID0gc2V0dXA0LCAuc2l6ZSA9IHNpemVvZihzZXR1cDQpIH0sCisJCXsgLmRhdGEgPSBzZXR1cDUsIC5zaXplID0gc2l6ZW9mKHNldHVwNSkgfSwKKwkJeyAuZGF0YSA9IHNldHVwMywgLnNpemUgPSBzaXplb2Yoc2V0dXAzKSB9LAorCQl7IC5kYXRhID0gTlVMTCwgLnNpemUgPSAwIH0KKwl9OworCisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDAsIGVyciA9IDA7IGZpcm13YXJlW2ldLmRhdGEgJiYgIWVycjsgaSsrKSB7CisJCW1lbWNweShjYW0tPmNudHJsYnVmLCBmaXJtd2FyZVtpXS5kYXRhLCBmaXJtd2FyZVtpXS5zaXplKTsKKworCQllcnIgPSBzZW5kX2NvbnRyb2xfbXNnKGNhbSwgMHhmZiwgMCwgMCwKKwkJCQkgICAgICAgY2FtLT5jbnRybGJ1ZiwgZmlybXdhcmVbaV0uc2l6ZSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorc2V0X2NhbWVyYV9wb3dlcihzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sIGludCBzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKChzdGF0dXMgPSBzZW5kX2NvbnRyb2xfbXNnKGNhbSwgMHg1MCwgc3RhdGUsIDAsIE5VTEwsIDApKSA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoc3RhdGUpIHsKKwkJc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTUsIDEsIDAsIE5VTEwsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2aWNhbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGlvY3RsbnIsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGlvY3RsbnIpIHsKKwkJLyogcXVlcnkgY2FwYWJpbGl0aWVzICovCisJY2FzZSBWSURJT0NHQ0FQOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBiOworCisJCQlEQkcoIlZJRElPQ0dDQVBcbiIpOworCQkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOworCQkJc3RyY3B5KGIubmFtZSwgIlZpQ2FtLWJhc2VkIENhbWVyYSIpOworCQkJYi50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJCWIuY2hhbm5lbHMgPSAxOworCQkJYi5hdWRpb3MgPSAwOworCQkJYi5tYXh3aWR0aCA9IDMyMDsJLyogVklERU9TSVpFX0NJRiAqLworCQkJYi5tYXhoZWlnaHQgPSAyNDA7CisJCQliLm1pbndpZHRoID0gMzIwOwkvKiBWSURFT1NJWkVfNDhfNDggKi8KKwkJCWIubWluaGVpZ2h0ID0gMjQwOworCisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmYiwgc2l6ZW9mKGIpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQlicmVhazsKKwkJfQorCQkvKiBnZXQvc2V0IHZpZGVvIHNvdXJjZSAtIHdlIGFyZSBhIGNhbWVyYSBhbmQgbm90aGluZyBlbHNlICovCisJY2FzZSBWSURJT0NHQ0hBTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKKworCQkJREJHKCJWSURJT0NHQ0hBTlxuIik7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnYsIHVzZXJfYXJnLCBzaXplb2YodikpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICh2LmNoYW5uZWwgIT0gMCkgeworCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXYuY2hhbm5lbCA9IDA7CisJCQlzdHJjcHkodi5uYW1lLCAiQ2FtZXJhIik7CisJCQl2LnR1bmVycyA9IDA7CisJCQl2LmZsYWdzID0gMDsKKwkJCXYudHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQkJdi5ub3JtID0gMDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnYsIHNpemVvZih2KSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ1NDSEFOOgorCQl7CisJCQlpbnQgdjsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCB1c2VyX2FyZywgc2l6ZW9mKHYpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJREJHKCJWSURJT0NTQ0hBTiAlZFxuIiwgdik7CisKKwkJCWlmIChyZXR2YWwgPT0gMCAmJiB2ICE9IDApCisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBpbWFnZSBwcm9wZXJ0aWVzICovCisJY2FzZSBWSURJT0NHUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnA7CisJCQlEQkcoIlZJRElPQ0dQSUNUXG4iKTsKKwkJCW1lbXNldCgmdnAsIDAsIHNpemVvZiAoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKKwkJCXZwLmJyaWdodG5lc3MgPSBjYW0tPmdhaW4gPDwgODsKKwkJCXZwLmRlcHRoID0gMjQ7CisJCQl2cC5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZ2cCwgc2l6ZW9mIChzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWSURJT0NTUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnA7CisJCQkKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmdnAsIHVzZXJfYXJnLCBzaXplb2YodnApKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQkKKwkJCURCRygiVklESU9DU1BJQ1QgZGVwdGggPSAlZCwgcGFsID0gJWRcbiIsIHZwLmRlcHRoLAorCQkJICAgIHZwLnBhbGV0dGUpOworCisJCQljYW0tPmdhaW4gPSB2cC5icmlnaHRuZXNzID4+IDg7CisKKwkJCWlmICh2cC5kZXB0aCAhPSAyNAorCQkJICAgIHx8IHZwLnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SR0IyNCkKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIGdldC9zZXQgY2FwdHVyZSB3aW5kb3cgKi8KKwljYXNlIFZJRElPQ0dXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgdnc7CisJCQl2dy54ID0gMDsKKwkJCXZ3LnkgPSAwOworCQkJdncud2lkdGggPSAzMjA7CisJCQl2dy5oZWlnaHQgPSAyNDA7CisJCQl2dy5jaHJvbWFrZXkgPSAwOworCQkJdncuZmxhZ3MgPSAwOworCQkJdncuY2xpcHMgPSBOVUxMOworCQkJdncuY2xpcGNvdW50ID0gMDsKKworCQkJREJHKCJWSURJT0NHV0lOXG4iKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgKHZvaWQgKikmdncsIHNpemVvZih2dykpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisKKwkJCS8vIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBkZWFsIHdpdGggYSBjYXB0dXJlIHdpbmRvdyBpcywgaXQgaXMgdmVyeSBwb29ybHkgZGVzY3JpYmVkCisJCQkvLyBpbiB0aGUgZG9jLiAgU28gSSB3b24ndCBzdXBwb3J0IGl0IG5vdy4KKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ1NXSU46CisJCXsKKworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2dywgdXNlcl9hcmcsIHNpemVvZih2dykpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJREJHKCJWSURJT0NTV0lOICVkIHggJWRcbiIsIHZ3LndpZHRoLCB2dy5oZWlnaHQpOworCQkJCisJCQlpZiAoIHZ3LndpZHRoICE9IDMyMCB8fCB2dy5oZWlnaHQgIT0gMjQwICkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIG1tYXAgaW50ZXJmYWNlICovCisJY2FzZSBWSURJT0NHTUJVRjoKKwkJeworCQkJc3RydWN0IHZpZGVvX21idWYgdm07CisJCQlpbnQgaTsKKworCQkJREJHKCJWSURJT0NHTUJVRlxuIik7CisJCQltZW1zZXQoJnZtLCAwLCBzaXplb2YgKHZtKSk7CisJCQl2bS5zaXplID0KKwkJCSAgICBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUzsKKwkJCXZtLmZyYW1lcyA9IFZJQ0FNX0ZSQU1FUzsKKwkJCWZvciAoaSA9IDA7IGkgPCBWSUNBTV9GUkFNRVM7IGkrKykKKwkJCQl2bS5vZmZzZXRzW2ldID0gVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBpOworCisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAodm9pZCAqKSZ2bSwgc2l6ZW9mKHZtKSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DTUNBUFRVUkU6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tbWFwIHZtOworCQkJLy8gaW50IHZpZGVvX3NpemU7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZ2bSwgdXNlcl9hcmcsIHNpemVvZih2bSkpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJREJHKCJWSURJT0NNQ0FQVFVSRSBmcmFtZT0lZCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZm9ybWF0PSVkLlxuIix2bS5mcmFtZSx2bS53aWR0aCx2bS5oZWlnaHQsdm0uZm9ybWF0KTsKKworCQkJaWYgKCB2bS5mcmFtZSA+PSBWSUNBTV9GUkFNRVMgfHwgdm0uZm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfUkdCMjQgKQorCQkJCXJldHZhbCA9IC1FSU5WQUw7CisKKwkJCS8vIGluIHRoZW9yeSByaWdodCBoZXJlIHdlJ2Qgc3RhcnQgdGhlIGltYWdlIGNhcHR1cmluZworCQkJLy8gKGZpbGwgaW4gYSBidWxrIHVyYiBhbmQgc3VibWl0IGl0IGFzeW5jaHJvbm91c2x5KQorCQkJLy8KKwkJCS8vIEluc3RlYWQgd2UncmUgZ29pbmcgdG8gZG8gYSB0b3RhbCBoYWNrIGpvYiBmb3Igbm93IGFuZAorCQkJLy8gcmV0cmlldmUgdGhlIGZyYW1lIGluIFZJRElPQ1NZTkMKKworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DU1lOQzoKKwkJeworCQkJaW50IGZyYW1lOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoKHZvaWQgKikmZnJhbWUsIHVzZXJfYXJnLCBzaXplb2YoaW50KSkpIHsKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCQkJREJHKCJWSURJT0NTWU5DOiAlZFxuIiwgZnJhbWUpOworCisJCQlyZWFkX2ZyYW1lKGNhbSwgZnJhbWUpOworCQkJdmljYW1fZGVjb2RlX2NvbG9yKGNhbS0+cmF3X2ltYWdlLAorCQkJCQkgICBjYW0tPmZyYW1lYnVmICsKKwkJCQkJICAgZnJhbWUgKiBWSUNBTV9NQVhfRlJBTUVfU0laRSApOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIHBvaW50bGVzcyB0byBpbXBsZW1lbnQgb3ZlcmxheSB3aXRoIHRoaXMgY2FtZXJhICovCisJY2FzZSBWSURJT0NDQVBUVVJFOgorCWNhc2UgVklESU9DR0ZCVUY6CisJY2FzZSBWSURJT0NTRkJVRjoKKwljYXNlIFZJRElPQ0tFWToKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwkJLyogdHVuZXIgaW50ZXJmYWNlIC0gd2UgaGF2ZSBub25lICovCisJY2FzZSBWSURJT0NHVFVORVI6CisJY2FzZSBWSURJT0NTVFVORVI6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKworCQkvKiBhdWRpbyBpbnRlcmZhY2UgLSB3ZSBoYXZlIG5vbmUgKi8KKwljYXNlIFZJRElPQ0dBVURJTzoKKwljYXNlIFZJRElPQ1NBVURJTzoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50Cit2aWNhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0KKwkgICAgKHN0cnVjdCB2aWNhbV9jYW1lcmEgKikgZGV2LT5wcml2OworCURCRygib3BlblxuIik7CisKKwlpZiAoIWNhbSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJ2aWNhbSB2aWRlb19kZXZpY2UgaW1wcm9wZXJseSBpbml0aWFsaXplZCIpOworCX0KKworCS8qIHRoZSB2aWRlb2Rldl9sb2NrIGhlbGQgYWJvdmUgdXMgcHJvdGVjdHMgdXMgZnJvbQorCSAqIHNpbXVsdGFuZW91cyBvcGVucy4uLmZvciBub3cuIHdlIHByb2JhYmx5IHNob3VsZG4ndAorCSAqIHJlbHkgb24gdGhpcyBmYWN0IGZvcmV2ZXIuCisJICovCisKKwlpZiAoY2FtLT5vcGVuX2NvdW50ID4gMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAidmljYW1fb3BlbiBjYWxsZWQgb24gYWxyZWFkeSBvcGVuZWQgY2FtZXJhIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY2FtLT5yYXdfaW1hZ2UgPSBrbWFsbG9jKFZJQ0FNX01BWF9SRUFEX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY2FtLT5yYXdfaW1hZ2UpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2FtLT5mcmFtZWJ1ZiA9IHJ2bWFsbG9jKFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKKwlpZiAoIWNhbS0+ZnJhbWVidWYpIHsKKwkJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljYW0tPmNudHJsYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY2FtLT5jbnRybGJ1ZikgeworCQlrZnJlZShjYW0tPnJhd19pbWFnZSk7CisJCXJ2ZnJlZShjYW0tPmZyYW1lYnVmLCBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIEZpcnN0IHVwbG9hZCBmaXJtd2FyZSwgdGhlbiB0dXJuIHRoZSBjYW1lcmEgb24KKworCWlmICghY2FtLT5pc19pbml0aWFsaXplZCkgeworCQlpbml0aWFsaXplX2NhbWVyYShjYW0pOworCisJCWNhbS0+aXNfaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCXNldF9jYW1lcmFfcG93ZXIoY2FtLCAxKTsKKworCWNhbS0+bmVlZHNEdW1teVJlYWQgPSAxOworCWNhbS0+b3Blbl9jb3VudCsrOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FtOwkKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCAKK3ZpY2FtX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgb3Blbl9jb3VudDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCURCRygiY2xvc2VcbiIpOworCisJLyogaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgaWYKKwkgKiB3ZSBmYWlsIHRvIHR1cm4gdGhlIGNhbWVyYSBvZmYuCisJICovCisKKwlzZXRfY2FtZXJhX3Bvd2VyKGNhbSwgMCk7CisKKwlrZnJlZShjYW0tPnJhd19pbWFnZSk7CisJcnZmcmVlKGNhbS0+ZnJhbWVidWYsIFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKKwlrZnJlZShjYW0tPmNudHJsYnVmKTsKKworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCisJY2FtLT5vcGVuX2NvdW50LS07CisJb3Blbl9jb3VudCA9IGNhbS0+b3Blbl9jb3VudDsKKwl1ZGV2ID0gY2FtLT51ZGV2OworCisJdXAoJmNhbS0+Y2FtX2xvY2spOworCisJaWYgKCFvcGVuX2NvdW50ICYmICF1ZGV2KSB7CisJCWtmcmVlKGNhbSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpY2FtX2RlY29kZV9jb2xvcihjb25zdCB1OCAqZGF0YSwgdTggKnJnYikKK3sKKwkvKiB2aWNhbV9kZWNvZGVfY29sb3IgLSBDb252ZXJ0IGZyb20gVmljYW0gWS1Dci1DYiB0byBSR0IKKwkgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTW9ucm9lIFdpbGxpYW1zIChtb25yb2VAcG9ib3guY29tKQorCSAqLworCisJaW50IGksIHByZXZZLCBuZXh0WTsKKworCXByZXZZID0gNTEyOworCW5leHRZID0gNTEyOworCisJZGF0YSArPSBWSUNBTV9IRUFERVJfU0laRTsKKworCWZvciggaSA9IDA7IGkgPCAyNDA7IGkrKywgZGF0YSArPSA1MTIgKSB7CisJCWNvbnN0IGludCB5ID0gKCBpICogMjQyICkgLyAyNDA7CisKKwkJaW50IGosIHByZXZYLCBuZXh0WDsKKwkJaW50IFksIENyLCBDYjsKKworCQlpZiAoIHkgPT0gMjQyIC0gMSApIHsKKwkJCW5leHRZID0gLTUxMjsKKwkJfQorCisJCXByZXZYID0gMTsKKwkJbmV4dFggPSAxOworCisJCWZvciAoIGogPSAwOyBqIDwgMzIwOyBqKyssIHJnYiArPSAzICkgeworCQkJY29uc3QgaW50IHggPSAoIGogKiA1MTIgKSAvIDMyMDsKKwkJCWNvbnN0IHU4ICogY29uc3Qgc3JjID0gJmRhdGFbeF07CisKKwkJCWlmICggeCA9PSA1MTIgLSAxICkgeworCQkJCW5leHRYID0gLTE7CisJCQl9CisKKwkJCUNyID0gKCBzcmNbcHJldlhdIC0gc3JjWzBdICkgKworCQkJCSggc3JjW25leHRYXSAtIHNyY1swXSApOworCQkJQ3IgLz0gMjsKKworCQkJQ2IgPSAoIHNyY1twcmV2WV0gLSBzcmNbcHJldlggKyBwcmV2WV0gKSArCisJCQkJKCBzcmNbcHJldlldIC0gc3JjW25leHRYICsgcHJldlldICkgKworCQkJCSggc3JjW25leHRZXSAtIHNyY1twcmV2WCArIG5leHRZXSApICsKKwkJCQkoIHNyY1tuZXh0WV0gLSBzcmNbbmV4dFggKyBuZXh0WV0gKTsKKwkJCUNiIC89IDQ7CisKKwkJCVkgPSAxMTYwICogKCBzcmNbMF0gKyAoIENyIC8gMiApIC0gMTYgKTsKKworCQkJaWYgKCBpICYgMSApIHsKKwkJCQlpbnQgQ3QgPSBDcjsKKwkJCQlDciA9IENiOworCQkJCUNiID0gQ3Q7CisJCQl9CisKKwkJCWlmICggKCB4IF4gaSApICYgMSApIHsKKwkJCQlDciA9IC1DcjsKKwkJCQlDYiA9IC1DYjsKKwkJCX0KKworCQkJcmdiWzBdID0gY2xhbXAoICggKCBZICsgKCAyMDE3ICogQ2IgKSApICsKKwkJCQkJNTAwICkgLyA5MDAsIDAsIDI1NSApOworCQkJcmdiWzFdID0gY2xhbXAoICggKCBZIC0gKCAzOTIgKiBDYiApIC0KKwkJCQkJICAoIDgxMyAqIENyICkgKSArCisJCQkJCSAgNTAwICkgLyAxMDAwLCAwLCAyNTUgKTsKKwkJCXJnYlsyXSA9IGNsYW1wKCAoICggWSArICggMTU5NCAqIENyICkgKSArCisJCQkJCTUwMCApIC8gMTMwMCwgMCwgMjU1ICk7CisKKwkJCXByZXZYID0gLTE7CisJCX0KKworCQlwcmV2WSA9IC01MTI7CisJfQorfQorCitzdGF0aWMgdm9pZAorcmVhZF9mcmFtZShzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sIGludCBmcmFtZW51bSkKK3sKKwl1bnNpZ25lZCBjaGFyICpyZXF1ZXN0ID0gY2FtLT5jbnRybGJ1ZjsKKwlpbnQgcmVhbFNodXR0ZXI7CisJaW50IG47CisJaW50IGFjdHVhbF9sZW5ndGg7CisKKwlpZiAoY2FtLT5uZWVkc0R1bW15UmVhZCkgeworCQljYW0tPm5lZWRzRHVtbXlSZWFkID0gMDsKKwkJcmVhZF9mcmFtZShjYW0sIGZyYW1lbnVtKTsKKwl9CisKKwltZW1zZXQocmVxdWVzdCwgMCwgMTYpOworCXJlcXVlc3RbMF0gPSBjYW0tPmdhaW47CS8vIDAgPSAwJSBnYWluLCBGRiA9IDEwMCUgZ2FpbgorCisJcmVxdWVzdFsxXSA9IDA7CS8vIDUxMngyNDIgY2FwdHVyZQorCisJcmVxdWVzdFsyXSA9IDB4OTA7CS8vIHRoZSBmdW5jdGlvbiBvZiB0aGVzZSB0d28gYnl0ZXMKKwlyZXF1ZXN0WzNdID0gMHgwNzsJLy8gaXMgbm90IHlldCB1bmRlcnN0b29kCisKKwlpZiAoY2FtLT5zaHV0dGVyX3NwZWVkID4gNjApIHsKKwkJLy8gU2hvcnQgZXhwb3N1cmUKKwkJcmVhbFNodXR0ZXIgPQorCQkgICAgKCgtMTU2MzE5MDAgLyBjYW0tPnNodXR0ZXJfc3BlZWQpICsgMjYwNTMzKSAvIDEwMDA7CisJCXJlcXVlc3RbNF0gPSByZWFsU2h1dHRlciAmIDB4RkY7CisJCXJlcXVlc3RbNV0gPSAocmVhbFNodXR0ZXIgPj4gOCkgJiAweEZGOworCQlyZXF1ZXN0WzZdID0gMHgwMzsKKwkJcmVxdWVzdFs3XSA9IDB4MDE7CisJfSBlbHNlIHsKKwkJLy8gTG9uZyBleHBvc3VyZQorCQlyZWFsU2h1dHRlciA9IDE1NjAwIC8gY2FtLT5zaHV0dGVyX3NwZWVkIC0gMTsKKwkJcmVxdWVzdFs0XSA9IDA7CisJCXJlcXVlc3RbNV0gPSAwOworCQlyZXF1ZXN0WzZdID0gcmVhbFNodXR0ZXIgJiAweEZGOworCQlyZXF1ZXN0WzddID0gcmVhbFNodXR0ZXIgPj4gODsKKwl9CisKKwkvLyBQZXIgSm9obiBNYXJrdXMgQmr4cm5kYWxlbiwgYnl0ZSBhdCBpbmRleCA4IGNhdXNlcyBwcm9ibGVtcyBpZiBpdCBpc24ndCAwCisJcmVxdWVzdFs4XSA9IDA7CisJLy8gYnl0ZXMgOS0xNSBkbyBub3Qgc2VlbSB0byBhZmZlY3QgZXhwb3N1cmUgb3IgaW1hZ2UgcXVhbGl0eQorCisJZG93bigmY2FtLT5jYW1fbG9jayk7CisKKwlpZiAoIWNhbS0+dWRldikgeworCQlnb3RvIGRvbmU7CisJfQorCisJbiA9IF9fc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTEsIDB4ODAsIDAsIHJlcXVlc3QsIDE2KTsKKworCWlmIChuIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIgUHJvYmxlbSBzZW5kaW5nIGZyYW1lIGNhcHR1cmUgY29udHJvbCBtZXNzYWdlIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwluID0gdXNiX2J1bGtfbXNnKGNhbS0+dWRldiwKKwkJCSB1c2JfcmN2YnVsa3BpcGUoY2FtLT51ZGV2LCBjYW0tPmJ1bGtFbmRwb2ludCksCisJCQkgY2FtLT5yYXdfaW1hZ2UsCisJCQkgNTEyICogMjQyICsgMTI4LCAmYWN0dWFsX2xlbmd0aCwgMTAwMDApOworCisJaWYgKG4gPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUHJvYmxlbSBkdXJpbmcgYnVsayByZWFkIG9mIGZyYW1lIGRhdGE6ICVkXG4iLAorCQkgICAgICAgbik7CisJfQorCisgZG9uZToKKwl1cCgmY2FtLT5jYW1fbG9jayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit2aWNhbV9yZWFkKCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MgKQoreworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCURCRygicmVhZCAlZCBieXRlcy5cbiIsIChpbnQpIGNvdW50KTsKKworCWlmICgqcHBvcyA+PSBWSUNBTV9NQVhfRlJBTUVfU0laRSkgeworCQkqcHBvcyA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICgqcHBvcyA9PSAwKSB7CisJCXJlYWRfZnJhbWUoY2FtLCAwKTsKKwkJdmljYW1fZGVjb2RlX2NvbG9yKGNhbS0+cmF3X2ltYWdlLAorCQkJCSAgIGNhbS0+ZnJhbWVidWYgKworCQkJCSAgIDAgKiBWSUNBTV9NQVhfRlJBTUVfU0laRSk7CisJfQorCisJY291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBWSUNBTV9NQVhfRlJBTUVfU0laRSAtICpwcG9zKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmY2FtLT5mcmFtZWJ1ZlsqcHBvc10sIGNvdW50KSkgeworCQljb3VudCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJKnBwb3MgKz0gY291bnQ7CisJfQorCisJaWYgKGNvdW50ID09IFZJQ0FNX01BWF9GUkFNRV9TSVpFKSB7CisJCSpwcG9zID0gMDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIGludAordmljYW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJLy8gVE9ETzogYWxsb2NhdGUgdGhlIHJhdyBmcmFtZSBidWZmZXIgaWYgbmVjZXNzYXJ5CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PREVWOworCisJREJHKCJ2aWNhbV9tbWFwOiAlbGRcbiIsIHNpemUpOworCisJLyogV2UgbGV0IG1tYXAgYWxsb2NhdGUgYXMgbXVjaCBhcyBpdCB3YW50cyBiZWNhdXNlIExpbnV4IHdhcyBhZGRpbmcgMjA0OCBieXRlcworCSAqIHRvIHRoZSBzaXplIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgZm9yIG1tYXAgYW5kIGl0IHdhcyBzY3Jld2luZyBhcHBzIHVwLgorCSBpZiAoc2l6ZSA+IFZJQ0FNX0ZSQU1FUypWSUNBTV9NQVhfRlJBTUVfU0laRSkKKwkgcmV0dXJuIC1FSU5WQUw7CisJICovCisKKwlwb3MgPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lYnVmOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQllbHNlCisJCQlzaXplID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1BST0NfRlMpCisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnZpY2FtX3Byb2Nfcm9vdCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgdmljYW1fcmVhZF9oZWxwZXIoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IHZhbHVlKQoreworCWNoYXIgKm91dCA9IHBhZ2U7CisJaW50IGxlbjsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiVkIix2YWx1ZSk7CisKKwlsZW4gPSBvdXQgLSBwYWdlOworCWxlbiAtPSBvZmY7CisJaWYgKGxlbiA8IGNvdW50KSB7CisJCSplb2YgPSAxOworCQlpZiAobGVuIDw9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJbGVuID0gY291bnQ7CisKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgdmljYW1fcmVhZF9wcm9jX3NodXR0ZXIoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdmljYW1fcmVhZF9oZWxwZXIocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLAorCQkJCSgoc3RydWN0IHZpY2FtX2NhbWVyYSAqKWRhdGEpLT5zaHV0dGVyX3NwZWVkKTsKK30KKworc3RhdGljIGludCB2aWNhbV9yZWFkX3Byb2NfZ2FpbihjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXJldHVybiB2aWNhbV9yZWFkX2hlbHBlcihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsCisJCQkJKChzdHJ1Y3QgdmljYW1fY2FtZXJhICopZGF0YSktPmdhaW4pOworfQorCitzdGF0aWMgaW50Cit2aWNhbV93cml0ZV9wcm9jX3NodXR0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXUxNiBzdG1wOworCWNoYXIga2J1Zls4XTsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSAoc3RydWN0IHZpY2FtX2NhbWVyYSAqKSBkYXRhOworCisJaWYgKGNvdW50ID4gNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoa2J1ZiwgYnVmZmVyLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3RtcCA9ICh1MTYpIHNpbXBsZV9zdHJ0b3VsKGtidWYsIE5VTEwsIDEwKTsKKwlpZiAoc3RtcCA8IDQgfHwgc3RtcCA+IDMyMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhbS0+c2h1dHRlcl9zcGVlZCA9IHN0bXA7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK3ZpY2FtX3dyaXRlX3Byb2NfZ2FpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXUxNiBndG1wOworCWNoYXIga2J1Zls4XTsKKworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IChzdHJ1Y3QgdmljYW1fY2FtZXJhICopIGRhdGE7CisKKwlpZiAoY291bnQgPiA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlndG1wID0gKHUxNikgc2ltcGxlX3N0cnRvdWwoa2J1ZiwgTlVMTCwgMTApOworCWlmIChndG1wID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwljYW0tPmdhaW4gPSBndG1wOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZAordmljYW1fY3JlYXRlX3Byb2Nfcm9vdCh2b2lkKQoreworCXZpY2FtX3Byb2Nfcm9vdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJ2aWRlby92aWNhbSIsIFNfSUZESVIsIDApOworCisJaWYgKHZpY2FtX3Byb2Nfcm9vdCkKKwkJdmljYW1fcHJvY19yb290LT5vd25lciA9IFRISVNfTU9EVUxFOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiY291bGQgbm90IGNyZWF0ZSAvcHJvYyBlbnRyeSBmb3IgdmljYW0hIik7Cit9CisKK3N0YXRpYyB2b2lkCit2aWNhbV9kZXN0cm95X3Byb2Nfcm9vdCh2b2lkKQoreworCWlmICh2aWNhbV9wcm9jX3Jvb3QpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJ2aWRlby92aWNhbSIsIDApOworfQorCitzdGF0aWMgdm9pZAordmljYW1fY3JlYXRlX3Byb2NfZW50cnkoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtKQoreworCWNoYXIgbmFtZVs2NF07CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisKKwlEQkcoS0VSTl9JTkZPICJ2aWNhbTogY3JlYXRpbmcgcHJvYyBlbnRyeVxuIik7CisKKwlpZiAoIXZpY2FtX3Byb2Nfcm9vdCB8fCAhY2FtKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJ2aWNhbTogY291bGQgbm90IGNyZWF0ZSBwcm9jIGVudHJ5LCAlcyBwb2ludGVyIGlzIG51bGwuXG4iLAorCQkgICAgICAgKCFjYW0gPyAiY2FtZXJhIiA6ICJyb290IikpOworCQlyZXR1cm47CisJfQorCisJc3ByaW50ZihuYW1lLCAidmlkZW8lZCIsIGNhbS0+dmRldi5taW5vcik7CisKKwljYW0tPnByb2NfZGlyID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRkRJUiwgdmljYW1fcHJvY19yb290KTsKKworCWlmICggIWNhbS0+cHJvY19kaXIgKQorCQlyZXR1cm47IC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgcmV0dXJuIGFuIGVycm9yIGhlcmUKKwkKKwllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgic2h1dHRlciIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQljYW0tPnByb2NfZGlyKTsKKwlpZiAoZW50KSB7CisJCWVudC0+ZGF0YSA9IGNhbTsKKwkJZW50LT5yZWFkX3Byb2MgPSB2aWNhbV9yZWFkX3Byb2Nfc2h1dHRlcjsKKwkJZW50LT53cml0ZV9wcm9jID0gdmljYW1fd3JpdGVfcHJvY19zaHV0dGVyOworCQllbnQtPnNpemUgPSA2NDsKKwl9CisKKwllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgiZ2FpbiIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQljYW0tPnByb2NfZGlyKTsKKwlpZiAoZW50KSB7CisJCWVudC0+ZGF0YSA9IGNhbTsKKwkJZW50LT5yZWFkX3Byb2MgPSB2aWNhbV9yZWFkX3Byb2NfZ2FpbjsKKwkJZW50LT53cml0ZV9wcm9jID0gdmljYW1fd3JpdGVfcHJvY19nYWluOworCQllbnQtPnNpemUgPSA2NDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2aWNhbV9kZXN0cm95X3Byb2NfZW50cnkodm9pZCAqcHRyKQoreworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IChzdHJ1Y3QgdmljYW1fY2FtZXJhICopIHB0cjsKKwljaGFyIG5hbWVbMTZdOworCisJaWYgKCAhY2FtLT5wcm9jX2RpciApCisJCXJldHVybjsKKworCXNwcmludGYobmFtZSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJzaHV0dGVyIiwgY2FtLT5wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImdhaW4iLCBjYW0tPnByb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeShuYW1lLHZpY2FtX3Byb2Nfcm9vdCk7CisJY2FtLT5wcm9jX2RpciA9IE5VTEw7CisKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWNhbV9jcmVhdGVfcHJvY19yb290KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHZpY2FtX2Rlc3Ryb3lfcHJvY19yb290KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHZpY2FtX2NyZWF0ZV9wcm9jX2VudHJ5KHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmljYW1fZGVzdHJveV9wcm9jX2VudHJ5KHZvaWQgKnB0cikgeyB9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmljYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmljYW1fb3BlbiwKKwkucmVsZWFzZQk9IHZpY2FtX2Nsb3NlLAorCS5yZWFkCQk9IHZpY2FtX3JlYWQsCisJLm1tYXAJCT0gdmljYW1fbW1hcCwKKwkuaW9jdGwJCT0gdmljYW1faW9jdGwsCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2aWNhbV90ZW1wbGF0ZSA9IHsKKwkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lIAkJPSAiVmlDYW0tYmFzZWQgVVNCIENhbWVyYSIsCisJLnR5cGUgCQk9IFZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlIAk9IFZJRF9IQVJEV0FSRV9WSUNBTSwKKwkuZm9wcyAJCT0gJnZpY2FtX2ZvcHMsCisJLm1pbm9yIAkJPSAtMSwKK307CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB2aWNhbV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFVTQl9WSUNBTV9WRU5ET1JfSUQsIFVTQl9WSUNBTV9QUk9EVUNUX0lEKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHZpY2FtX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpY2FtX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInZpY2FtIiwKKwkucHJvYmUJCT0gdmljYW1fcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB2aWNhbV9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHZpY2FtX3RhYmxlCit9OworCisvKioKKyAqCXZpY2FtX3Byb2JlCisgKglAaW50ZjogdGhlIGludGVyZmFjZQorICoJQGlkOiB0aGUgZGV2aWNlIGlkCisgKgorICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKKyAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCisgKi8KK3N0YXRpYyBpbnQKK3ZpY2FtX3Byb2JlKCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCBidWxrRW5kcG9pbnQgPSAwOworCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbTsKKwkKKwlwcmludGsoS0VSTl9JTkZPICJWaUNhbSBiYXNlZCB3ZWJjYW0gY29ubmVjdGVkXG4iKTsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCisJREJHKEtFUk5fREVCVUcgIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhXG4iLAorCSAgICAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgKHVuc2lnbmVkKSAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKwlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKKwkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCWJ1bGtFbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk5vIGJ1bGsgaW4gZW5kcG9pbnQgd2FzIGZvdW5kID8hICh0aGlzIGlzIGJhZClcbiIpOworCX0KKworCWlmICgoY2FtID0KKwkgICAgIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgdmljYW1fY2FtZXJhKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBrZXJuZWwgbWVtb3J5IGZvciB2aWNhbV9jYW1lcmEgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGNhbSwgMCwgc2l6ZW9mIChzdHJ1Y3QgdmljYW1fY2FtZXJhKSk7CisKKwljYW0tPnNodXR0ZXJfc3BlZWQgPSAxNTsKKworCWluaXRfTVVURVgoJmNhbS0+Y2FtX2xvY2spOworCisJbWVtY3B5KCZjYW0tPnZkZXYsICZ2aWNhbV90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mICh2aWNhbV90ZW1wbGF0ZSkpOworCWNhbS0+dmRldi5wcml2ID0gY2FtOwkvLyBzb3J0IG9mIGEgcmV2ZXJzZSBtYXBwaW5nIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBnZXQgdmRldiBvbmx5CisKKwljYW0tPnVkZXYgPSBkZXY7CisJY2FtLT5idWxrRW5kcG9pbnQgPSBidWxrRW5kcG9pbnQ7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKSA9PSAtMSkgeworCQlrZnJlZShjYW0pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJdmljYW1fY3JlYXRlX3Byb2NfZW50cnkoY2FtKTsKKworCXByaW50ayhLRVJOX0lORk8gIlZpQ2FtIHdlYmNhbSBkcml2ZXIgbm93IGNvbnRyb2xsaW5nIHZpZGVvIGRldmljZSAlZFxuIixjYW0tPnZkZXYubWlub3IpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgY2FtKTsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ZpY2FtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IG9wZW5fY291bnQ7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwkvKiB3ZSBtdXN0IHVucmVnaXN0ZXIgdGhlIGRldmljZSBiZWZvcmUgdGFraW5nIGl0cworCSAqIGNhbV9sb2NrLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHZpZGVvIG9wZW4gY2FsbAorCSAqIGhvbGRzIHRoZSBzYW1lIGxvY2sgYXMgdmlkZW8gdW5yZWdpc3Rlci4gaWYgd2UKKwkgKiB1bnJlZ2lzdGVyIGluc2lkZSBvZiB0aGUgY2FtX2xvY2sgYW5kIG9wZW4gYWxzbworCSAqIHVzZXMgdGhlIGNhbV9sb2NrLCB3ZSBnZXQgZGVhZGxvY2suCisJICovCisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2KTsKKworCS8qIHN0b3AgdGhlIGNhbWVyYSBmcm9tIGJlaW5nIHVzZWQgKi8KKworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCisJLyogbWFyayB0aGUgY2FtZXJhIGFzIGdvbmUgKi8KKworCWNhbS0+dWRldiA9IE5VTEw7CisKKwl2aWNhbV9kZXN0cm95X3Byb2NfZW50cnkoY2FtKTsKKworCS8qIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gZG8gaXMgc3luY2hyb25pemUgd2l0aAorCSAqIG91ciBjbG9zZS9yZWxlYXNlIGZ1bmN0aW9uIG9uIHdobyBzaG91bGQgcmVsZWFzZQorCSAqIHRoZSBjYW1lcmEgbWVtb3J5LiBpZiB0aGVyZSBhcmUgYW55IHVzZXJzIHVzaW5nIHRoZQorCSAqIGNhbWVyYSwgaXQncyB0aGVpciBqb2IuIGlmIHRoZXJlIGFyZSBubyB1c2VycywKKwkgKiBpdCdzIG91cnMuCisJICovCisKKwlvcGVuX2NvdW50ID0gY2FtLT5vcGVuX2NvdW50OworCisJdXAoJmNhbS0+Y2FtX2xvY2spOworCisJaWYgKCFvcGVuX2NvdW50KSB7CisJCWtmcmVlKGNhbSk7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlZpQ2FtLWJhc2VkIFdlYkNhbSBkaXNjb25uZWN0ZWRcbiIpOworfQorCisvKgorICovCitzdGF0aWMgaW50IF9faW5pdAordXNiX3ZpY2FtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCURCRyhLRVJOX0lORk8gIlZpQ2FtLWJhc2VkIFdlYkNhbSBkcml2ZXIgc3RhcnR1cFxuIik7CisJdmljYW1fY3JlYXRlX3Byb2Nfcm9vdCgpOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdmljYW1fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JfcmVnaXN0ZXIgZmFpbGVkIVxuIik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit1c2JfdmljYW1fZXhpdCh2b2lkKQoreworCURCRyhLRVJOX0lORk8KKwkgICAgICAgIlZpQ2FtLWJhc2VkIFdlYkNhbSBkcml2ZXIgc2h1dGRvd25cbiIpOworCisJdXNiX2RlcmVnaXN0ZXIoJnZpY2FtX2RyaXZlcik7CisJdmljYW1fZGVzdHJveV9wcm9jX3Jvb3QoKTsKK30KKworbW9kdWxlX2luaXQodXNiX3ZpY2FtX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3ZpY2FtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODllNzllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCkBAIC0wLDAgKzEsMzgyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggZHJpdmVyIGZvciBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcC4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogLSBNZW1vcnkgbWFuYWdlbWVudCBjb2RlIGZyb20gYnR0diBkcml2ZXIgYnkgUmFscGggTWV0emxlciwgICAgICAgICAgICAgKgorICogICBNYXJjdXMgTWV0emxlciBhbmQgR2VyZCBLbm9yci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogLSBJMkMgaW50ZXJmYWNlIHRvIGtlcm5lbCwgaGlnaC1sZXZlbCBpbWFnZSBzZW5zb3IgY29udHJvbCByb3V0aW5lcyBhbmQgKgorICogICBzb21lIHN5bWJvbGljIG5hbWVzIGZyb20gT1Y1MTEgZHJpdmVyIGJ5IE1hcmsgVy4gTWNDbGVsbGFuZC4gICAgICAgICAgKgorICogLSBMb3ctbGV2ZWwgSTJDIGZhc3Qgd3JpdGUgZnVuY3Rpb24gYnkgUGlvdHIgQ3plcmN6YWsuICAgICAgICAgICAgICAgICAgKgorICogLSBMb3ctbGV2ZWwgSTJDIHJlYWQgZnVuY3Rpb24gYnkgRnJlZGVyaWMgSm91YXVsdC4gICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSAidzk5NjhjZi5oIgorI2luY2x1ZGUgInc5OTY4Y2ZfZGVjb2Rlci5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBtYWNyb3MgYW5kIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHdpbmJvbmRfaWRfdGFibGUpOworCitNT0RVTEVfQVVUSE9SKFc5OTY4Q0ZfTU9EVUxFX0FVVEhPUiIgIlc5OTY4Q0ZfQVVUSE9SX0VNQUlMKTsKK01PRFVMRV9ERVNDUklQVElPTihXOTk2OENGX01PRFVMRV9OQU1FKTsKK01PRFVMRV9WRVJTSU9OKFc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoVzk5NjhDRl9NT0RVTEVfTElDRU5TRSk7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiVmlkZW8iKTsKKworc3RhdGljIGludCBvdm1vZF9sb2FkID0gVzk5NjhDRl9PVk1PRF9MT0FEOworc3RhdGljIGludCB2cHBtb2RfbG9hZCA9IFc5OTY4Q0ZfVlBQTU9EX0xPQUQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKK3N0YXRpYyBzaG9ydCB2aWRlb19ucltdPXtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IC0xfTsgLyotMT1maXJzdCBmcmVlKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfUEFDS0VUX1NJWkV9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heF9idWZmZXJzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQlVGRkVSU307CitzdGF0aWMgaW50IGRvdWJsZV9idWZmZXJbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9ET1VCTEVfQlVGRkVSfTsKK3N0YXRpYyBpbnQgY2xhbXBpbmdbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQ0xBTVBJTkd9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IGZpbHRlcl90eXBlW109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0ZJTFRFUl9UWVBFfTsKK3N0YXRpYyBpbnQgbGFyZ2V2aWV3W109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfTEFSR0VWSUVXfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWNvbXByZXNzaW9uW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9ERUNPTVBSRVNTSU9OfTsKK3N0YXRpYyBpbnQgdXBzY2FsaW5nW109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfVVBTQ0FMSU5HfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9wYWxldHRlW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAwfTsKK3N0YXRpYyBpbnQgZm9yY2VfcmdiW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0ZPUkNFX1JHQn07CitzdGF0aWMgaW50IGF1dG9icmlnaHRbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQVVUT0JSSUdIVH07CitzdGF0aWMgaW50IGF1dG9leHBbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQVVUT0VYUH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbGlnaHRmcmVxW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0xJR0hURlJFUX07CitzdGF0aWMgaW50IGJhbmRpbmdmaWx0ZXJbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQkFORElOR0ZJTFRFUn07CitzdGF0aWMgc2hvcnQgY2xvY2tkaXZbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQ0xPQ0tESVZ9Oworc3RhdGljIGludCBiYWNrbGlnaHRbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQkFDS0xJR0hUfTsKK3N0YXRpYyBpbnQgbWlycm9yW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX01JUlJPUn07CitzdGF0aWMgaW50IG1vbm9jaHJvbWVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXT1XOTk2OENGX01PTk9DSFJPTUV9Oworc3RhdGljIHVuc2lnbmVkIGludCBicmlnaHRuZXNzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQlJJR0hUTkVTU307CitzdGF0aWMgdW5zaWduZWQgaW50IGh1ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9IVUV9Oworc3RhdGljIHVuc2lnbmVkIGludCBjb2xvdXJbXT17WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0NPTE9VUn07CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnRyYXN0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0NPTlRSQVNUfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2hpdGVuZXNzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9XSElURU5FU1N9OworI2lmZGVmIFc5OTY4Q0ZfREVCVUcKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWJ1ZyA9IFc5OTY4Q0ZfREVCVUdfTEVWRUw7CitzdGF0aWMgaW50IHNwZWNpZmljX2RlYnVnID0gVzk5NjhDRl9TUEVDSUZJQ19ERUJVRzsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBhcmFtX252WzI0XTsgLyogbnVtYmVyIG9mIHZhbHVlcyBwZXIgcGFyYW1ldGVyICovCisKKyNpZmRlZiBDT05GSUdfS01PRAorbW9kdWxlX3BhcmFtKG92bW9kX2xvYWQsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKHZwcG1vZF9sb2FkLCBib29sLCAwNDQ0KTsKKyNlbmRpZgorbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCAmcGFyYW1fbnZbMF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHBhY2tldF9zaXplLCB1aW50LCAmcGFyYW1fbnZbMV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KG1heF9idWZmZXJzLCB1c2hvcnQsICZwYXJhbV9udlsyXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZG91YmxlX2J1ZmZlciwgYm9vbCwgJnBhcmFtX252WzNdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShjbGFtcGluZywgYm9vbCwgJnBhcmFtX252WzRdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmaWx0ZXJfdHlwZSwgdXNob3J0LCAmcGFyYW1fbnZbNV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGxhcmdldmlldywgYm9vbCwgJnBhcmFtX252WzZdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShkZWNvbXByZXNzaW9uLCB1c2hvcnQsICZwYXJhbV9udls3XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodXBzY2FsaW5nLCBib29sLCAmcGFyYW1fbnZbOF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGZvcmNlX3BhbGV0dGUsIHVzaG9ydCwgJnBhcmFtX252WzldLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9yZ2IsIHVzaG9ydCwgJnBhcmFtX252WzEwXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYXV0b2JyaWdodCwgYm9vbCwgJnBhcmFtX252WzExXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYXV0b2V4cCwgYm9vbCwgJnBhcmFtX252WzEyXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkobGlnaHRmcmVxLCB1c2hvcnQsICZwYXJhbV9udlsxM10sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGJhbmRpbmdmaWx0ZXIsIGJvb2wsICZwYXJhbV9udlsxNF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGNsb2NrZGl2LCBzaG9ydCwgJnBhcmFtX252WzE1XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYmFja2xpZ2h0LCBib29sLCAmcGFyYW1fbnZbMTZdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShtaXJyb3IsIGJvb2wsICZwYXJhbV9udlsxN10sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KG1vbm9jaHJvbWUsIGJvb2wsICZwYXJhbV9udlsxOF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGJyaWdodG5lc3MsIHVpbnQsICZwYXJhbV9udlsxOV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGh1ZSwgdWludCwgJnBhcmFtX252WzIwXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoY29sb3VyLCB1aW50LCAmcGFyYW1fbnZbMjFdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShjb250cmFzdCwgdWludCwgJnBhcmFtX252WzIyXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkod2hpdGVuZXNzLCB1aW50LCAmcGFyYW1fbnZbMjNdLCAwNDQ0KTsKKyNpZmRlZiBXOTk2OENGX0RFQlVHCittb2R1bGVfcGFyYW0oZGVidWcsIHVzaG9ydCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oc3BlY2lmaWNfZGVidWcsIGJvb2wsIDA2NDQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS01PRAorTU9EVUxFX1BBUk1fREVTQyhvdm1vZF9sb2FkLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MT4gQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuSWYgZW5hYmxlZCwnaW5zbW9kJyBzZWFyY2hlcyBmb3IgdGhlIHJlcXVpcmVkICdvdmNhbWNoaXAnIgorICAgICAgICAgICAgICAgICAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSwgYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLCBhbmQiCisgICAgICAgICAgICAgICAgICJcbmF0dGVtcHRzIHRvIGxvYWQgdGhhdCBtb2R1bGUgYXV0b21hdGljYWxseS4gVGhpcyBhY3Rpb24gaXMiCisgICAgICAgICAgICAgICAgICJcbnBlcmZvcm1lZCBvbmNlIGFzIHNvb24gYXMgdGhlICd3OTk2OGNmJyBtb2R1bGUgaXMgbG9hZGVkIgorICAgICAgICAgICAgICAgICAiXG5pbnRvIG1lbW9yeS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX09WTU9EX0xPQUQpIi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh2cHBtb2RfbG9hZCwgCisgICAgICAgICAgICAgICAgICJcbjwwfDE+IEF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuSWYgZW5hYmxlZCwgZXZlcnkgdGltZSBhbiBhcHBsaWNhdGlvbiBhdHRlbXB0cyB0byBvcGVuIGEiCisgICAgICAgICAgICAgICAgICJcbmNhbWVyYSwgJ2luc21vZCcgc2VhcmNoZXMgZm9yIHRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmciCisgICAgICAgICAgICAgICAgICJcbm1vZHVsZSBpbiB0aGUgc3lzdGVtIGFuZCBsb2FkcyBpdCBhdXRvbWF0aWNhbGx5IChpZiIKKyAgICAgICAgICAgICAgICAgIlxucHJlc2VudCkuIFRoZSBvcHRpb25hbCAndzk5NjhjZi12cHAnIG1vZHVsZSBhZGRzIGV4dHJhIgorICAgICAgICAgICAgICAgICAiXG4gaW1hZ2UgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0byB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSxsaWtlIgorICAgICAgICAgICAgICAgICAiXG5zb2Z0d2FyZSB1cC1zY2FsaW5nLGNvbG91ciBjb252ZXJzaW9ucyBhbmQgdmlkZW8gZGVjb2RpbmciCisgICAgICAgICAgICAgICAgICJcbmZvciB2ZXJ5IGhpZ2ggZnJhbWUgcmF0ZXMuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9WUFBNT0RfTE9BRCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisjZW5kaWYKK01PRFVMRV9QQVJNX0RFU0Moc2ltY2FtcywgCisgICAgICAgICAgICAgICAgICJcbjxuPiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseS4iCisgICAgICAgICAgICAgICAgICJcbm4gbWF5IHZhcnkgZnJvbSAwIHRvICIKKyAgICAgICAgICAgICAgICAgX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0RFVklDRVMpIi4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NJTUNBTVMpIi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwKKyAgICAgICAgICAgICAgICAgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMIG1pbm9yIG1vZGUgbnVtYmVyLiIKKyAgICAgICAgICAgICAgICAgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKKyAgICAgICAgICAgICAgICAgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgorICAgICAgICAgICAgICAgICAiXG5Zb3UgY2FuIHNwZWNpZnkgdXAgdG8gIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9ERVZJQ0VTKQorICAgICAgICAgICAgICAgICAiIGNhbWVyYXMgdGhpcyB3YXkuIgorICAgICAgICAgICAgICAgICAiXG5Gb3IgZXhhbXBsZToiCisgICAgICAgICAgICAgICAgICJcbnZpZGVvX25yPS0xLDIsLTEgd291bGQgYXNzaWduIG1pbm9yIG51bWJlciAyIHRvIgorICAgICAgICAgICAgICAgICAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKKyAgICAgICAgICAgICAgICAgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBhY2tldF9zaXplLAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU3BlY2lmeSB0aGUgbWF4aW11bSBkYXRhIHBheWxvYWQiCisgICAgICAgICAgICAgICAgICJcbnNpemUgaW4gYnl0ZXMgZm9yIGFsdGVybmF0ZSBzZXR0aW5ncywgZm9yIGVhY2ggZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxubiBpcyBzY2FsZWQgYmV0d2VlbiA2MyBhbmQgMTAyMyAiCisgICAgICAgICAgICAgICAgICIoZGVmYXVsdCBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfUEFDS0VUX1NJWkUpIikuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X2J1ZmZlcnMsCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBGb3IgYWR2YW5jZWQgdXNlcnMuIgorICAgICAgICAgICAgICAgICAiXG5TcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2aWRlbyBmcmFtZSBidWZmZXJzIgorICAgICAgICAgICAgICAgICAiXG50byBhbGxvY2F0ZSBmb3IgZWFjaCBkZXZpY2UsIGZyb20gMiB0byAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9CVUZGRVJTKQorICAgICAgICAgICAgICAgICAiLiAoZGVmYXVsdCBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQlVGRkVSUykiKS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhkb3VibGVfYnVmZmVyLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gIgorICAgICAgICAgICAgICAgICAiSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuSXQgc2hvdWxkIGJlIGVuYWJsZWQgaWYgeW91IHdhbnQgc21vb3RoIHZpZGVvIG91dHB1dDogaWYiCisgICAgICAgICAgICAgICAgICJcbnlvdSBvYnRhaW4gb3V0IG9mIHN5bmMuIHZpZGVvLCBkaXNhYmxlIGl0LCBvciB0cnkgdG8iCisgICAgICAgICAgICAgICAgICJcbmRlY3JlYXNlIHRoZSAnY2xvY2tkaXYnIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWUuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ET1VCTEVfQlVGRkVSKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xhbXBpbmcsIAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBWaWRlbyBkYXRhIGNsYW1waW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DTEFNUElORykKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZpbHRlcl90eXBlLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MXwyWywuLi5dPiBWaWRlbyBmaWx0ZXIgdHlwZS4iCisgICAgICAgICAgICAgICAgICJcbjAgbm9uZSwgMSAoMS0yLTEpIDMtdGFwIGZpbHRlciwgIgorICAgICAgICAgICAgICAgICAiMiAoMi0zLTYtMy0yKSA1LXRhcCBmaWx0ZXIuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9GSUxURVJfVFlQRSkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuVGhlIGZpbHRlciBpcyB1c2VkIHRvIHJlZHVjZSBub2lzZSBhbmQgYWxpYXNpbmcgYXJ0aWZhY3RzIgorICAgICAgICAgICAgICAgICAiXG5wcm9kdWNlZCBieSB0aGUgQ0NEIG9yIENNT1MgaW1hZ2Ugc2Vuc29yLCBhbmQgdGhlIHNjYWxpbmciCisgICAgICAgICAgICAgICAgICIgcHJvY2Vzcy4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhsYXJnZXZpZXcsIAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBMYXJnZSB2aWV3OiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9MQVJHRVZJRVcpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh1cHNjYWxpbmcsIAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBTb2Z0d2FyZSBzY2FsaW5nIChmb3Igbm9uLWNvbXByZXNzZWQgdmlkZW8pOiIKKyAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuRGlzYWJsZSBpdCBpZiB5b3UgaGF2ZSBhIHNsb3cgQ1BVIG9yIHlvdSBkb24ndCBoYXZlIgorICAgICAgICAgICAgICAgICAiIGVub3VnaCBtZW1vcnkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9VUFNDQUxJTkcpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbklmICd3OTk2OGNmLXZwcCcgaXMgbm90IHByZXNlbnQsIHRoaXMgcGFyYW1ldGVyIGlzIgorICAgICAgICAgICAgICAgICAiIHNldCB0byAwLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICJcbjwwfDF8MlssLi4uXT4gU29mdHdhcmUgdmlkZW8gZGVjb21wcmVzc2lvbjoiCisgICAgICAgICAgICAgICAgICJcbi0gMCBkaXNhYmxlcyBkZWNvbXByZXNzaW9uIChkb2Vzbid0IGFsbG93IGZvcm1hdHMgbmVlZGluZyIKKyAgICAgICAgICAgICAgICAgIiBkZWNvbXByZXNzaW9uKSIKKyAgICAgICAgICAgICAgICAgIlxuLSAxIGZvcmNlcyBkZWNvbXByZXNzaW9uIChhbGxvd3MgZm9ybWF0cyBuZWVkaW5nIgorICAgICAgICAgICAgICAgICAiIGRlY29tcHJlc3Npb24gb25seSk7IgorICAgICAgICAgICAgICAgICAiXG4tIDIgYWxsb3dzIGFueSBwZXJtaXR0ZWQgZm9ybWF0cy4iCisgICAgICAgICAgICAgICAgICJcbkZvcm1hdHMgc3VwcG9ydGluZyBjb21wcmVzc2VkIHZpZGVvIGFyZSBZVVY0MjJQIGFuZCIKKyAgICAgICAgICAgICAgICAgIiBZVVY0MjBQL1lVVjQyMCAiCisgICAgICAgICAgICAgICAgICJcbmluIGFueSByZXNvbHV0aW9ucyB3aGVyZSBib3RoIHdpZHRoIGFuZCBoZWlnaHQgYXJlICIKKyAgICAgICAgICAgICAgICAgImEgbXVsdGlwbGUgb2YgMTYuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ERUNPTVBSRVNTSU9OKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCBmb3JjaW5nIGRlY29tcHJlc3Npb24gaXMgIgorICAgICAgICAgICAgICAgICAiXG5ub3QgYWxsb3dlZDsgaW4gdGhpcyBjYXNlIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byAyLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3BhbGV0dGUsCisgICAgICAgICAgICAgICAgICJcbjwwIgorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfVVlWWSkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMCkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMlApCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjBQKQorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVZVikKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMikKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX0dSRVkpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0I1NTUpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0I1NjUpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0IyNCkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1JHQjMyKQorICAgICAgICAgICAgICAgICAiWywuLi5dPiIKKyAgICAgICAgICAgICAgICAgIiBGb3JjZSBwaWN0dXJlIHBhbGV0dGUuIgorICAgICAgICAgICAgICAgICAiXG5JbiBvcmRlcjoiCisgICAgICAgICAgICAgICAgICJcbi0gMCBhbGxvd3MgYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoiCisgICAgICAgICAgICAgICAgICJcbi0gVVlWWSAgICAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZGlzYWJsZWQiCisgICAgICAgICAgICAgICAgICJcbi0gWVVWNDIwICAxMiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKKyAgICAgICAgICAgICAgICAgIlxuLSBZVVY0MjJQIDE2IGJwcCAtIE9yaWdpbmFsIHZpZGVvLCBjb21wcmVzc2lvbiBlbmFibGVkIgorICAgICAgICAgICAgICAgICAiXG4tIFlVVjQyMFAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCisgICAgICAgICAgICAgICAgICJcbi0gWVVWWSAgICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuLSBZVVY0MjIgIDE2IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgorICAgICAgICAgICAgICAgICAiXG4tIEdSRVkgICAgIDggYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbi0gUkdCNTU1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuLSBSR0I1NjUgIDE2IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgorICAgICAgICAgICAgICAgICAiXG4tIFJHQjI0ICAgMjQgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbi0gUkdCMzIgICAzMiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuV2hlbiBub3QgMCwgdGhpcyBwYXJhbWV0ZXIgd2lsbCBvdmVycmlkZSAnZGVjb21wcmVzc2lvbicuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzIDAgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbkluaXRpYWwgcGFsZXR0ZSBpcyAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX1BBTEVUVEVfREVDT01QX09OKSIuIgorICAgICAgICAgICAgICAgICAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyIKKyAgICAgICAgICAgICAgICAgIiBzZXQgdG8gOSAoVVlWWSkuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfcmdiLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gUmVhZCBSR0IgdmlkZW8gZGF0YSBpbnN0ZWFkIG9mIEJHUjoiCisgICAgICAgICAgICAgICAgICJcbiAxID0gdXNlIFJHQiBjb21wb25lbnQgb3JkZXJpbmcuIgorICAgICAgICAgICAgICAgICAiXG4gMCA9IHVzZSBCR1IgY29tcG9uZW50IG9yZGVyaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuVGhpcyBwYXJhbWV0ZXIgaGFzIGVmZmVjdCB3aGVuIHVzaW5nIFJHQlggcGFsZXR0ZXMgb25seS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0ZPUkNFX1JHQikKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9icmlnaHQsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEltYWdlIHNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgYnJpZ2h0bmVzczoiCisgICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0FVVE9CUklHSFQpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvZXhwLAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBJbWFnZSBzZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGV4cG9zdXJlOiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQVVUT0VYUCkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGxpZ2h0ZnJlcSwKKyAgICAgICAgICAgICAgICAgIlxuPDUwfDYwWywuLi5dPiBMaWdodCBmcmVxdWVuY3kgaW4gSHo6IgorICAgICAgICAgICAgICAgICAiXG4gNTAgZm9yIEV1cm9wZWFuIGFuZCBBc2lhbiBsaWdodGluZywiCisgICAgICAgICAgICAgICAgICIgNjAgZm9yIEFtZXJpY2FuIGxpZ2h0aW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTElHSFRGUkVRKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFuZGluZ2ZpbHRlciwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gQmFuZGluZyBmaWx0ZXIgdG8gcmVkdWNlIGVmZmVjdHMgb2YiCisgICAgICAgICAgICAgICAgICIgZmx1b3Jlc2NlbnQgbGlnaHRpbmc6IgorICAgICAgICAgICAgICAgICAiXG4gMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuVGhpcyBmaWx0ZXIgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYXR0ZXJuIG9mIGhvcml6b250YWwiCisgICAgICAgICAgICAgICAgICJcbmxpZ2h0L2RhcmsgYmFuZHMgY2F1c2VkIGJ5IHNvbWUgKHVzdWFsbHkgZmx1b3Jlc2NlbnQpIgorICAgICAgICAgICAgICAgICAiIGxpZ2h0aW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQkFORElOR0ZJTFRFUikKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrZGl2LAorICAgICAgICAgICAgICAgICAiXG48LTF8blssLi4uXT4gIgorICAgICAgICAgICAgICAgICAiRm9yY2UgcGl4ZWwgY2xvY2sgZGl2aXNvciB0byBhIHNwZWNpZmljIHZhbHVlIChmb3IgZXhwZXJ0cyk6IgorICAgICAgICAgICAgICAgICAiXG4gIG4gbWF5IHZhcnkgZnJvbSAwIHRvIDEyNy4iCisgICAgICAgICAgICAgICAgICJcbiAtMSBmb3IgYXV0b21hdGljIHZhbHVlLiIKKyAgICAgICAgICAgICAgICAgIlxuU2VlIGFsc28gdGhlICdkb3VibGVfYnVmZmVyJyBtb2R1bGUgcGFyYW1ldGVyLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ0xPQ0tESVYpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhiYWNrbGlnaHQsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IE9iamVjdHMgYXJlIGxpdCBmcm9tIGJlaGluZDoiCisgICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JBQ0tMSUdIVCkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pcnJvciwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gUmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHk6IgorICAgICAgICAgICAgICAgICAiXG4gMCA9IG5vLCAxID0geWVzIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NSVJST1IpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhtb25vY2hyb21lLAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBVc2UgaW1hZ2Ugc2Vuc29yIGFzIG1vbm9jaHJvbWUgc2Vuc29yOiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKKyAgICAgICAgICAgICAgICAgIlxuTm90IGFsbCB0aGUgc2Vuc29ycyBzdXBwb3J0IG1vbm9jaHJvbWUgY29sb3IuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NT05PQ0hST01FKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYnJpZ2h0bmVzcywgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBicmlnaHRuZXNzICgwLTY1NTM1KS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JSSUdIVE5FU1MpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcblRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYgJ2F1dG9icmlnaHQnIGlzIGVuYWJsZWQuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaHVlLCAKKyAgICAgICAgICAgICAgICAgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIGh1ZSAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9IVUUpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhjb2xvdXIsIAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgc2F0dXJhdGlvbiAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT0xPVVIpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhjb250cmFzdCwgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBjb250cmFzdCAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT05UUkFTVCkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHdoaXRlbmVzcywgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSB3aGl0ZW5lc3MgKDAtNjU1MzUpLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfV0hJVEVORVNTKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKyNpZmRlZiBXOTk2OENGX0RFQlVHCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorICAgICAgICAgICAgICAgICAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gNjoiCisgICAgICAgICAgICAgICAgICJcbjAgPSBub25lICh1c2UgY2FyZWZ1bGx5KSIKKyAgICAgICAgICAgICAgICAgIlxuMSA9IGNyaXRpY2FsIGVycm9ycyIKKyAgICAgICAgICAgICAgICAgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKKyAgICAgICAgICAgICAgICAgIlxuMyA9IGNvbmZpZ3VyYXRpb24gb3IgZ2VuZXJhbCBtZXNzYWdlcyIKKyAgICAgICAgICAgICAgICAgIlxuNCA9IHdhcm5pbmdzIgorICAgICAgICAgICAgICAgICAiXG41ID0gY2FsbGVkIGZ1bmN0aW9ucyIKKyAgICAgICAgICAgICAgICAgIlxuNiA9IGZ1bmN0aW9uIGludGVybmFscyIKKyAgICAgICAgICAgICAgICAgIlxuTGV2ZWwgNSBhbmQgNiBhcmUgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSAiCisgICAgICAgICAgICAgICAgICJvbmUgZGV2aWNlIGlzIHVzZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ERUJVR19MRVZFTCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHNwZWNpZmljX2RlYnVnLAorICAgICAgICAgICAgICAgICAiXG48MHwxPiBFbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXM6IgorICAgICAgICAgICAgICAgICAiXG4wID0gcHJpbnQgbWVzc2FnZXMgY29uY2VybmluZyBldmVyeSBsZXZlbCIKKyAgICAgICAgICAgICAgICAgIiA8PSAnZGVidWcnIGxldmVsLiIKKyAgICAgICAgICAgICAgICAgIlxuMSA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgdGhlIGxldmVsIgorICAgICAgICAgICAgICAgICAiIGluZGljYXRlZCBieSAnZGVidWcnLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NQRUNJRklDX0RFQlVHKSIuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKyNlbmRpZiAvKiBXOTk2OENGX0RFQlVHICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU29tZSBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBWaWRlbzRsaW51eCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHc5OTY4Y2ZfZm9wczsKK3N0YXRpYyBpbnQgdzk5NjhjZl9vcGVuKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmaWxlKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSopOworc3RhdGljIGludCB3OTk2OGNmX21tYXAoc3RydWN0IGZpbGUqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pb2N0bChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBzc2l6ZV90IHc5OTY4Y2ZfcmVhZChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90Kik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmaWxlKiwgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqKTsKKworLyogVVNCLXNwZWNpZmljICovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc3RhcnRfdHJhbnNmZXIoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpOworc3RhdGljIGludCB3OTk2OGNmX3JlYWRfcmVnKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiBpbmRleCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfZnNiKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiogZGF0YSk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IHZhbHVlKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgdm9pZCB3OTk2OGNmX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogTG93LWxldmVsIEkyQyAoU01CdXMpIEkvTyAqLworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3N0YXJ0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3N0b3Aoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1OCB2KTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTgqIHYpOworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWZyZXNoX2J1cyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpOworc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBzdWJhZGRyZXNzLCB1OCogdmFsdWUpOworc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTggc3ViYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHZhbHVlKTsKKworLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIqLCB1MTYgYWRkciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhKik7CitzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOworc3RhdGljIGludCB3OTk2OGNmX2kyY19jb250cm9sKHN0cnVjdCBpMmNfYWRhcHRlciosIHVuc2lnbmVkIGludCBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworCisvKiBNZW1vcnkgbWFuYWdlbWVudCAqLworc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpOworc3RhdGljIHZvaWQgdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgIHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworCisvKiBIaWdoLWxldmVsIGltYWdlIHNlbnNvciBjb250cm9sIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLGludCBjaWQsaW50IHZhbCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSosaW50IGNpZCxpbnQgKnZhbCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3NldHRpbmdzKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9nZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpOworCisvKiBPdGhlciBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCB3OTk2OGNmX2NvbmZpZ3VyZV9jYW1lcmEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixzdHJ1Y3QgdXNiX2RldmljZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB3OTk2OGNmX21vZGVsX2lkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZXZfbnIpOworc3RhdGljIHZvaWQgdzk5NjhjZl9hZGp1c3RfY29uZmlndXJhdGlvbihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl90dXJuX29uX2xlZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pbml0X2NoaXAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX3BhbGV0dGUodTE2IHBhbGV0dGUpOworc3RhdGljIGlubGluZSB1MTYgdzk5NjhjZl92YWxpZF9kZXB0aCh1MTYgcGFsZXR0ZSk7CitzdGF0aWMgaW5saW5lIHU4IHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHUxNiBwYWxldHRlKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2V0X3dpbmRvdyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCBzdHJ1Y3QgdmlkZW9fd2luZG93KTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90Kik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiogdywgdTE2KiBoKTsKK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfaW5pdF9mcmFtZWxpc3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgdm9pZCB3OTk2OGNmX3B1c2hfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTggZl9udW0pOworc3RhdGljIHZvaWQgdzk5NjhjZl9wb3BfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiopOworc3RhdGljIHZvaWQgdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKKworLyogSW50ZXJtb2R1bGUgY29tbXVuaWNhdGlvbiAqLworc3RhdGljIGludCB3OTk2OGNmX3ZwcG1vZF9kZXRlY3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgdm9pZCB3OTk2OGNmX3ZwcG1vZF9yZWxlYXNlKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5bWJvbGljIG5hbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVXNlZCB0byByZXByZXNlbnQgYSBsaXN0IG9mIHZhbHVlcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBzeW1ib2xpYyBuYW1lcyAqLworc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCB7CisJY29uc3QgaW50IG51bTsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgc3ltYm9saWNfbGlzdCBhcnJheS4gVGhlCisgIGVuZCBvZiB0aGUgbGlzdCBtdXN0IGJlIG1hcmtlZCB3aXRoIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBOVUxMIG5hbWUuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqIAorc3ltYm9saWMoc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCBsaXN0W10sIGNvbnN0IGludCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBsaXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCQlpZiAobGlzdFtpXS5udW0gPT0gbnVtKQorCQkJcmV0dXJuIChsaXN0W2ldLm5hbWUpOworCisJcmV0dXJuICJVbmtub3duIjsKK30KKworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgY2FtbGlzdFtdID0geworCXsgVzk5NjhDRl9NT0RfR0VORVJJQywgIlc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX0NMVkJXR1AsICJDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIFBsdXMiIH0sCisKKwkvKiBPdGhlciBjYW1lcmFzIChoYXZpbmcgdGhlIHNhbWUgZGVzY3JpcHRvcnMgYXMgR2VuZXJpYyBXOTk2Wzg3XUNGKSAqLworCXsgVzk5NjhDRl9NT0RfQURQVkRNQSwgIkFyb21hIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgQURHLTUwMDAiIH0sCisJeyBXOTk4NkNGX01PRF9BQVUsICJBVmVyTWVkaWEgQVZlclRWIFVTQiIgfSwKKwl7IFc5OTY4Q0ZfTU9EX0NMVkJXRywgIkNyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28iIH0sCisJeyBXOTk2OENGX01PRF9MTCwgIkxlYm9uIExEQy0wMzVBIiB9LAorCXsgVzk5NjhDRl9NT0RfRUVFTUMsICJFem9uaWNzIEVaLTgwMiBFWk1lZ2EgQ2FtIiB9LAorCXsgVzk5NjhDRl9NT0RfT09FLCAiT21uaVZpc2lvbiBPVjg2MTAtRURFIiB9LAorCXsgVzk5NjhDRl9NT0RfT0RQVkRNUEMsICJPUENPTSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIFBlbiBDYW1lcmEiIH0sCisJeyBXOTk2OENGX01PRF9QRFBJSSwgIlByZXRlYyBEaWdpIFBlbi1JSSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX1BEUDQ4MCwgIlByZXRlYyBEaWdpUGVuLTQ4MCIgfSwKKworCXsgIC0xLCBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHNlbmxpc3RbXSA9IHsKKwl7IENDX09WNzZCRSwgICAiT1Y3NkJFIiB9LAorCXsgQ0NfT1Y3NjEwLCAgICJPVjc2MTAiIH0sCisJeyBDQ19PVjc2MjAsICAgIk9WNzYyMCIgfSwKKwl7IENDX09WNzYyMEFFLCAiT1Y3NjIwQUUiIH0sCisJeyBDQ19PVjY2MjAsICAgIk9WNjYyMCIgfSwKKwl7IENDX09WNjYzMCwgICAiT1Y2NjMwIiB9LAorCXsgQ0NfT1Y2NjMwQUUsICJPVjY2MzBBRSIgfSwKKwl7IENDX09WNjYzMEFGLCAiT1Y2NjMwQUYiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKiBWaWRlbzRMaW51eDEgcGFsZXR0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHY0bDFfcGxpc3RbXSA9IHsKKwl7IFZJREVPX1BBTEVUVEVfR1JFWSwgICAgIkdSRVkiIH0sCisJeyBWSURFT19QQUxFVFRFX0hJMjQwLCAgICJISTI0MCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCNTY1LCAgIlJHQjU2NSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCMjQsICAgIlJHQjI0IiB9LAorCXsgVklERU9fUEFMRVRURV9SR0IzMiwgICAiUkdCMzIiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjU1NSwgICJSR0I1NTUiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMiwgICJZVVY0MjIiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVWVYsICAgICJZVVlWIiB9LAorCXsgVklERU9fUEFMRVRURV9VWVZZLCAgICAiVVlWWSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIwLCAgIllVVjQyMCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDExLCAgIllVVjQxMSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkFXLCAgICAgIlJBVyIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwgIllVVjQyMlAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMVAsICJZVVY0MTFQIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVY0MjBQLCAiWVVWNDIwUCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDEwUCwgIllVVjQxMFAiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKiBEZWNvZGVyIGVycm9yIGNvZGVzOiAqLworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgZGVjb2Rlcl9lcnJsaXN0W10gPSB7CisJeyBXOTk2OENGX0RFQ19FUlJfQ09SUlVQVEVEX0RBVEEsICJDb3JydXB0ZWQgZGF0YSIgfSwKKwl7IFc5OTY4Q0ZfREVDX0VSUl9CVUZfT1ZFUkZMT1csICAgIkJ1ZmZlciBvdmVyZmxvdyIgfSwKKwl7IFc5OTY4Q0ZfREVDX0VSUl9OT19TT0ksICAgICAgICAgIlNPSSBtYXJrZXIgbm90IGZvdW5kIiB9LCAgICAgCisJeyBXOTk2OENGX0RFQ19FUlJfTk9fU09GMCwgICAgICAgICJTT0YwIG1hcmtlciBub3QgZm91bmQiIH0sCisJeyBXOTk2OENGX0RFQ19FUlJfTk9fU09TLCAgICAgICAgICJTT1MgbWFya2VyIG5vdCBmb3VuZCIgfSwKKwl7IFc5OTY4Q0ZfREVDX0VSUl9OT19FT0ksICAgICAgICAgIkVPSSBtYXJrZXIgbm90IGZvdW5kIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworLyogVVJCIGVycm9yIGNvZGVzOiAqLworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgdXJiX2Vycmxpc3RbXSA9IHsKKwl7IC1FTk9NRU0sICAgICJObyBtZW1vcnkgZm9yIGFsbG9jYXRpb24gb2YgaW50ZXJuYWwgc3RydWN0dXJlcyIgfSwKKwl7IC1FTk9TUEMsICAgICJUaGUgaG9zdCBjb250cm9sbGVyJ3MgYmFuZHdpZHRoIGlzIGFscmVhZHkgY29uc3VtZWQiIH0sCisJeyAtRU5PRU5ULCAgICAiVVJCIHdhcyBjYW5jZWxlZCBieSB1bmxpbmtfdXJiIiB9LAorCXsgLUVYREVWLCAgICAgIklTTyB0cmFuc2ZlciBvbmx5IHBhcnRpYWxseSBjb21wbGV0ZWQiIH0sCisJeyAtRUFHQUlOLCAgICAiVG9vIG1hdGNoIHNjaGVkdWxlZCBmb3IgdGhlIGZ1dHVyZSIgfSwKKwl7IC1FTlhJTywgICAgICJVUkIgYWxyZWFkeSBxdWV1ZWQiIH0sCisJeyAtRUZCSUcsICAgICAiVG9vIG11Y2ggSVNPIGZyYW1lcyByZXF1ZXN0ZWQiIH0sCisJeyAtRU5PU1IsICAgICAiQnVmZmVyIGVycm9yIChvdmVycnVuKSIgfSwKKwl7IC1FUElQRSwgICAgICJTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSJ9LAorCXsgLUVPVkVSRkxPVywgIkJhYmJsZSAoYmFkIGNhYmxlPykiIH0sCisJeyAtRVBST1RPLCAgICAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSIgfSwKKwl7IC1FSUxTRVEsICAgICJDUkMvVGltZW91dCIgfSwKKwl7IC1FVElNRURPVVQsICJOQUsgKGRldmljZSBkb2VzIG5vdCByZXNwb25kKSIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkKiBtZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCogbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlYWxsb2NhdGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5LgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCB3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXU4IGk7CisKKwkvKiBGcmVlIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IFc5OTY4Q0ZfVVJCUzsgaSsrKSB7CisJCWtmcmVlKGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKTsKKwkJY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPSBOVUxMOworCX0KKworCS8qIEZyZWUgdGVtcG9yYXJ5IGZyYW1lIGJ1ZmZlciAqLworCWlmIChjYW0tPmZyYW1lX3RtcC5idWZmZXIpIHsKKwkJcnZmcmVlKGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciwgY2FtLT5mcmFtZV90bXAuc2l6ZSk7CisJCWNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciA9IE5VTEw7CisJfQorCisJLyogRnJlZSBoZWxwZXIgYnVmZmVyICovCisJaWYgKGNhbS0+ZnJhbWVfdnBwLmJ1ZmZlcikgeworCQlydmZyZWUoY2FtLT5mcmFtZV92cHAuYnVmZmVyLCBjYW0tPmZyYW1lX3ZwcC5zaXplKTsKKwkJY2FtLT5mcmFtZV92cHAuYnVmZmVyID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHZpZGVvIGZyYW1lIGJ1ZmZlcnMgKi8KKwlpZiAoY2FtLT5mcmFtZVswXS5idWZmZXIpIHsKKwkJcnZmcmVlKGNhbS0+ZnJhbWVbMF0uYnVmZmVyLCBjYW0tPm5idWZmZXJzKmNhbS0+ZnJhbWVbMF0uc2l6ZSk7CisJCWNhbS0+ZnJhbWVbMF0uYnVmZmVyID0gTlVMTDsKKwl9CisKKwljYW0tPm5idWZmZXJzID0gMDsKKworCURCRyg1LCAiTWVtb3J5IHN1Y2Nlc3NmdWxseSBkZWFsbG9jYXRlZCIpCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVycyBmb3IgVVNCIHRyYW5zZmVycyBhbmQgdmlkZW8gZnJhbWVzLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBvcGVuKCkgb25seS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWNvbnN0IHUxNiBwX3NpemUgPSB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV07CisJdm9pZCogYnVmZiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBod19idWZzaXplLCB2cHBfYnVmc2l6ZTsKKwl1OCBpLCBicHA7CisKKwkvKiBOT1RFOiBEZWFsbG9jYXRpb24gaXMgZG9uZSBlbHNld2hlcmUgaW4gY2FzZSBvZiBlcnJvciAqLworCisJLyogQ2FsY3VsYXRlIHRoZSBtYXggYW1vdW50IG9mIHJhdyBkYXRhIHBlciBmcmFtZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwlod19idWZzaXplID0gY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCoyOworCisJLyogQ2FsY3VsYXRlIHRoZSBtYXggYnVmLiBzaXplIG5lZWRlZCBmb3IgcG9zdC1wcm9jZXNzaW5nIHJvdXRpbmVzICovCisJYnBwID0gKHc5OTY4Y2ZfdnBwKSA/IDQgOiAyOworCWlmIChjYW0tPnVwc2NhbGluZykKKwkJdnBwX2J1ZnNpemUgPSBtYXgoVzk5NjhDRl9NQVhfV0lEVEgqVzk5NjhDRl9NQVhfSEVJR0hUKmJwcCwKKwkJICAgICAgICAgICAgICAgICAgY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCpicHApOworCWVsc2UKKwkJdnBwX2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KmJwcDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspIHsKKwkJaWYgKCEoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPQorCQkgICAgICBrbWFsbG9jKFc5OTY4Q0ZfSVNPX1BBQ0tFVFMqcF9zaXplLCBHRlBfS0VSTkVMKSkpIHsKKwkJCURCRygxLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaXNvY2hyb25vdXMgIgorCQkJICAgICAgICJ0cmFuc2ZlciBidWZmZXJzICgldSBieXRlcykiLCAKKwkJCSAgICBwX3NpemUgKiBXOTk2OENGX0lTT19QQUNLRVRTKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldLCAwLCBXOTk2OENGX0lTT19QQUNLRVRTKnBfc2l6ZSk7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdGVtcG9yYXJ5IGZyYW1lIGJ1ZmZlciAqLworCWlmICghKGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciA9IHJ2bWFsbG9jKGh3X2J1ZnNpemUpKSkgeworCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRlbXBvcmFyeSAiCisJCSAgICAgICAidmlkZW8gZnJhbWUgYnVmZmVyICglbHUgYnl0ZXMpIiwgaHdfYnVmc2l6ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNhbS0+ZnJhbWVfdG1wLnNpemUgPSBod19idWZzaXplOworCWNhbS0+ZnJhbWVfdG1wLm51bWJlciA9IC0xOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaGVscGVyIGJ1ZmZlciAqLworCWlmICh3OTk2OGNmX3ZwcCkgeworCQlpZiAoIShjYW0tPmZyYW1lX3ZwcC5idWZmZXIgPSBydm1hbGxvYyh2cHBfYnVmc2l6ZSkpKSB7CisJCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhlbHBlciBidWZmZXIiCisJCQkgICAgICAgIiAoJWx1IGJ5dGVzKSIsIHZwcF9idWZzaXplKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY2FtLT5mcmFtZV92cHAuc2l6ZSA9IHZwcF9idWZzaXplOworCX0gZWxzZQorCQljYW0tPmZyYW1lX3ZwcC5idWZmZXIgPSBOVUxMOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2aWRlbyBmcmFtZSBidWZmZXJzICovCisJY2FtLT5uYnVmZmVycyA9IGNhbS0+bWF4X2J1ZmZlcnM7CisJd2hpbGUgKGNhbS0+bmJ1ZmZlcnMgPj0gMikgeworCQlpZiAoKGJ1ZmYgPSBydm1hbGxvYyhjYW0tPm5idWZmZXJzICogdnBwX2J1ZnNpemUpKSkKKwkJCWJyZWFrOworCQllbHNlCisJCQljYW0tPm5idWZmZXJzLS07CisJfQorCisJaWYgKCFidWZmKSB7CisJCURCRygxLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdmlkZW8gZnJhbWUgYnVmZmVycyIpCisJCWNhbS0+bmJ1ZmZlcnMgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoY2FtLT5uYnVmZmVycyAhPSBjYW0tPm1heF9idWZmZXJzKQorCQlEQkcoMiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXUgdmlkZW8gZnJhbWUgYnVmZmVycy4gIgorCQkgICAgICAgIk9ubHkgbWVtb3J5IGZvciAldSBidWZmZXJzIGhhcyBiZWVuIGFsbG9jYXRlZCIsCisJCSAgICBjYW0tPm1heF9idWZmZXJzLCBjYW0tPm5idWZmZXJzKQorCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPmZyYW1lW2ldLmJ1ZmZlciA9IGJ1ZmYgKyBpKnZwcF9idWZzaXplOworCQljYW0tPmZyYW1lW2ldLnNpemUgPSB2cHBfYnVmc2l6ZTsKKwkJY2FtLT5mcmFtZVtpXS5udW1iZXIgPSBpOworCQkvKiBDaXJjdWxhciBsaXN0ICovCisJCWlmIChpICE9IGNhbS0+bmJ1ZmZlcnMtMSkKKwkJCWNhbS0+ZnJhbWVbaV0ubmV4dCA9ICZjYW0tPmZyYW1lW2krMV07CisJCWVsc2UKKwkJCWNhbS0+ZnJhbWVbaV0ubmV4dCA9ICZjYW0tPmZyYW1lWzBdOworCQljYW0tPmZyYW1lW2ldLnN0YXR1cyA9IEZfVU5VU0VEOworCX0KKworCURCRyg1LCAiTWVtb3J5IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQiKQorCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQi1zcGVjaWZpYyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIGlzIGFuIGhhbmRsZXIgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSBVUkJzIGFyZSBjb21wbGV0ZWQuCisgIEl0IGNvbGxlY3RzIG11bHRpcGxlIGRhdGEgcGFja2V0cyBjb21pbmcgZnJvbSB0aGUgY2FtZXJhIGJ5IHB1dHRpbmcgdGhlbQorICBpbnRvIGZyYW1lIGJ1ZmZlcnM6IG9uZSBvciBtb3JlIHplcm8gZGF0YSBsZW5ndGggZGF0YSBwYWNrZXRzIGFyZSB1c2VkIHRvCisgIG1hcmsgdGhlIGVuZCBvZiBhIHZpZGVvIGZyYW1lOyB0aGUgZmlyc3Qgbm9uLXplcm8gZGF0YSBwYWNrZXQgaXMgdGhlIHN0YXJ0CisgIG9mIHRoZSBuZXh0IHZpZGVvIGZyYW1lOyBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBpbiBhIHBhY2tldCwgdGhlIGVudGlyZQorICB2aWRlbyBmcmFtZSBpcyBkaXNjYXJkZWQgYW5kIGdyYWJiZWQgYWdhaW4uCisgIElmIHRoZXJlIGFyZSBubyByZXF1ZXN0ZWQgZnJhbWVzIGluIHRoZSBGSUZPIGxpc3QsIHBhY2tldHMgYXJlIGNvbGxlY3RlZCBpbnRvCisgIGEgdGVtcG9yYXJ5IGJ1ZmZlci4gCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCoqIGY7CisJdW5zaWduZWQgaW50IGxlbiwgc3RhdHVzOworCXZvaWQqIHBvczsKKwl1OCBpOworCWludCBlcnIgPSAwOworCisJaWYgKCghY2FtLT5zdHJlYW1pbmcpIHx8IGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCURCRyg0LCAiR290IGludGVycnVwdCwgYnV0IG5vdCBzdHJlYW1pbmciKQorCQlyZXR1cm47CisJfQorCisJLyogIigqZikiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICJjYW0tPmZyYW1lX2N1cnJlbnQiICovCisJZiA9ICZjYW0tPmZyYW1lX2N1cnJlbnQ7CisKKwkvKiBJZiBhIGZyYW1lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgd2UgYXJlIGdyYWJiaW5nIGludG8gIAorCSAgIHRoZSB0ZW1wb3JhcnkgZnJhbWUsIHdlJ2xsIHN3aXRjaCB0byB0aGF0IHJlcXVlc3RlZCBmcmFtZSAqLworCWlmICgoKmYpID09ICZjYW0tPmZyYW1lX3RtcCAmJiAqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUpIHsKKwkJaWYgKGNhbS0+ZnJhbWVfdG1wLnN0YXR1cyA9PSBGX0dSQUJCSU5HKSB7CisJCQl3OTk2OGNmX3BvcF9mcmFtZShjYW0sICZjYW0tPmZyYW1lX2N1cnJlbnQpOworCQkJKCpmKS0+c3RhdHVzID0gRl9HUkFCQklORzsKKwkJCSgqZiktPmxlbmd0aCA9IGNhbS0+ZnJhbWVfdG1wLmxlbmd0aDsKKwkJCW1lbWNweSgoKmYpLT5idWZmZXIsIGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciwKKwkJCSAgICAgICAoKmYpLT5sZW5ndGgpOworCQkJREJHKDYsICJTd2l0Y2hlZCBmcm9tIHRlbXAuIGZyYW1lIHRvIGZyYW1lICMlZCIsIAorCQkJICAgICgqZiktPm51bWJlcikKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlzdGF0dXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJcG9zID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQlpZiAoc3RhdHVzICYmIGxlbiAhPSAwKSB7CisJCQlEQkcoNCwgIlVSQiBmYWlsZWQsIGVycm9yIGluIGRhdGEgcGFja2V0ICIKKwkJCSAgICAgICAiKGVycm9yICMldSwgJXMpIiwKKwkJCSAgICBzdGF0dXMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCBzdGF0dXMpKQorCQkJKCpmKS0+c3RhdHVzID0gRl9FUlJPUjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxlbikgeyAvKiBzdGFydCBvZiBmcmFtZSAqLworCisJCQlpZiAoKCpmKS0+c3RhdHVzID09IEZfVU5VU0VEKSB7CisJCQkJKCpmKS0+c3RhdHVzID0gRl9HUkFCQklORzsKKwkJCQkoKmYpLT5sZW5ndGggPSAwOworCQkJfQorCisJCQkvKiBCdWZmZXIgb3ZlcmZsb3dzIHNob3VsZG4ndCBoYXBwZW4sIGhvd2V2ZXIuLi4qLworCQkJaWYgKCgqZiktPmxlbmd0aCArIGxlbiA+ICgqZiktPnNpemUpIHsKKwkJCQlEQkcoNCwgIkJ1ZmZlciBvdmVyZmxvdzogYmFkIGRhdGEgcGFja2V0cyIpCisJCQkJKCpmKS0+c3RhdHVzID0gRl9FUlJPUjsKKwkJCX0KKworCQkJaWYgKCgqZiktPnN0YXR1cyA9PSBGX0dSQUJCSU5HKSB7CisJCQkJbWVtY3B5KCgqZiktPmJ1ZmZlciArICgqZiktPmxlbmd0aCwgcG9zLCBsZW4pOworCQkJCSgqZiktPmxlbmd0aCArPSBsZW47CisJCQl9CisKKwkJfSBlbHNlIGlmICgoKmYpLT5zdGF0dXMgPT0gRl9HUkFCQklORykgeyAvKiBlbmQgb2YgZnJhbWUgKi8KKworCQkJREJHKDYsICJGcmFtZSAjJWQgc3VjY2Vzc2Z1bGx5IGdyYWJiZWQiLCAoKmYpLT5udW1iZXIpCisKKwkJCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJCQllcnIgPSB3OTk2OGNmX3ZwcC0+Y2hlY2tfaGVhZGVycygoKmYpLT5idWZmZXIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpmKS0+bGVuZ3RoKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCURCRyg0LCAiU2tpcCBjb3JydXB0ZWQgZnJhbWU6ICVzIiwKKwkJCQkJICAgIHN5bWJvbGljKGRlY29kZXJfZXJybGlzdCwgZXJyKSkKKwkJCQkJKCpmKS0+c3RhdHVzID0gRl9VTlVTRUQ7CisJCQkJCWNvbnRpbnVlOyAvKiBncmFiIHRoaXMgZnJhbWUgYWdhaW4gKi8KKwkJCQl9CisJCQl9CisKKwkJCSgqZiktPnN0YXR1cyA9IEZfUkVBRFk7CisJCQkoKmYpLT5xdWV1ZWQgPSAwOworCisJCQkvKiBUYWtlIGEgcG9pbnRlciB0byB0aGUgbmV3IGZyYW1lIGZyb20gdGhlIEZJRk8gbGlzdC4KKwkJCSAgIElmIHRoZSBsaXN0IGlzIGVtcHR5LHdlJ2xsIHVzZSB0aGUgdGVtcG9yYXJ5IGZyYW1lKi8KKwkJCWlmICgqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUpCisJCQkJdzk5NjhjZl9wb3BfZnJhbWUoY2FtLCAmY2FtLT5mcmFtZV9jdXJyZW50KTsKKwkJCWVsc2UgeworCQkJCWNhbS0+ZnJhbWVfY3VycmVudCA9ICZjYW0tPmZyYW1lX3RtcDsKKwkJCQkoKmYpLT5zdGF0dXMgPSBGX1VOVVNFRDsKKwkJCX0KKworCQl9IGVsc2UgaWYgKCgqZiktPnN0YXR1cyA9PSBGX0VSUk9SKQorCQkJKCpmKS0+c3RhdHVzID0gRl9VTlVTRUQ7IC8qIGdyYWIgaXQgYWdhaW4gKi8KKworCQlQREJHRygiRnJhbWUgbGVuZ3RoICVsdSB8IHBhY2suIyV1IHwgcGFjay5sZW4uICV1IHwgc3RhdGUgJWQiLAorCQkgICAgICAodW5zaWduZWQgbG9uZykoKmYpLT5sZW5ndGgsIGksIGxlbiwgKCpmKS0+c3RhdHVzKQorCisJfSAvKiBlbmQgZm9yICovCisKKwkvKiBSZXN1Ym1pdCB0aGlzIFVSQiAqLworCXVyYi0+ZGV2ID0gY2FtLT51c2JkZXY7CisJdXJiLT5zdGF0dXMgPSAwOworCXNwaW5fbG9jaygmY2FtLT51cmJfbG9jayk7CisJaWYgKGNhbS0+c3RyZWFtaW5nKQorCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpKSB7CisJCQljYW0tPm1pc2NvbmZpZ3VyZWQgPSAxOworCQkJREJHKDEsICJDb3VsZG4ndCByZXN1Ym1pdCB0aGUgVVJCOiBlcnJvciAlZCwgJXMiLAorCQkJICAgIGVyciwgc3ltYm9saWModXJiX2Vycmxpc3QsIGVycikpCisJCX0KKwlzcGluX3VubG9jaygmY2FtLT51cmJfbG9jayk7CisKKwkvKiBXYWtlIHVwIHRoZSB1c2VyIHByb2Nlc3MgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9xdWV1ZSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU2V0dXAgdGhlIFVSQiBzdHJ1Y3R1cmVzIGZvciB0aGUgaXNvY2hyb25vdXMgdHJhbnNmZXIuCisgIFN1Ym1pdCB0aGUgVVJCcyBzbyB0aGF0IHRoZSBkYXRhIHRyYW5zZmVyIGJlZ2lucy4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7CisJc3RydWN0IHVyYiogdXJiOworCWNvbnN0IHUxNiBwX3NpemUgPSB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV07CisJdTE2IHcsIGgsIGQ7CisJaW50IHZpZGNhcHQ7CisJdTMyIHRfc2l6ZTsKKwlpbnQgZXJyID0gMDsKKwlzOCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IFc5OTY4Q0ZfVVJCUzsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoVzk5NjhDRl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7CisJCWNhbS0+dXJiW2ldID0gdXJiOworCQlpZiAoIXVyYikgeworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbal0pOworCQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSB0aGUgVVJCIHN0cnVjdHVyZXMiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1cmItPmRldiA9IHVkZXY7CisJCXVyYi0+Y29udGV4dCA9ICh2b2lkKiljYW07CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LCAxKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFc5OTY4Q0ZfSVNPX1BBQ0tFVFM7CisJCXVyYi0+Y29tcGxldGUgPSB3OTk2OGNmX3VyYl9jb21wbGV0ZTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcF9zaXplKlc5OTY4Q0ZfSVNPX1BBQ0tFVFM7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQlmb3IgKGogPSAwOyBqIDwgVzk5NjhDRl9JU09fUEFDS0VUUzsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IHBfc2l6ZSpqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwX3NpemU7CisJCX0KKwl9CisKKwkvKiBUcmFuc2ZlciBzaXplIHBlciBmcmFtZSwgaW4gV09SRCAhICovCisJZCA9IGNhbS0+aHdfZGVwdGg7CisJdyA9IGNhbS0+aHdfd2lkdGg7CisJaCA9IGNhbS0+aHdfaGVpZ2h0OworCisJdF9zaXplID0gKHcqaCpkKS8xNjsKKworCWVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhiZjE3LCAweDAwKTsgLyogcmVzZXQgZXZlcnl0aGluZyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4YmYxMCwgMHgwMCk7IC8qIG5vcm1hbCBvcGVyYXRpb24gKi8KKworCS8qIFRyYW5zZmVyIHNpemUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB0X3NpemUgJiAweGZmZmYsIDB4M2QpOyAvKiBsb3cgYml0cyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHRfc2l6ZSA+PiAxNiwgMHgzZSk7ICAgIC8qIGhpZ2ggYml0cyAqLworCisJaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikKKwkJZXJyICs9IHc5OTY4Y2ZfdXBsb2FkX3F1YW50aXphdGlvbnRhYmxlcyhjYW0pOworCisJdmlkY2FwdCA9IHc5OTY4Y2ZfcmVhZF9yZWcoY2FtLCAweDE2KTsgLyogcmVhZCBwaWN0dXJlIHNldHRpbmdzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdmlkY2FwdHwweDgwMDAsIDB4MTYpOyAvKiBjYXB0LiBlbmFibGUgKi8KKworCWVyciArPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCAwLCBjYW0tPmFsdHNldHRpbmcpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4OGEwNSwgMHgzYyk7IC8qIFVTQiBGSUZPIGVuYWJsZSAqLworCisJaWYgKGVyciB8fCAodmlkY2FwdCA8IDApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykKKwkJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltpXSk7CisJCURCRygxLCAiQ291bGRuJ3QgdGVsbCB0aGUgY2FtZXJhIHRvIHN0YXJ0IHRoZSBkYXRhIHRyYW5zZmVyIikKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl3OTk2OGNmX2luaXRfZnJhbWVsaXN0KGNhbSk7CisKKwkvKiBCZWdpbiB0byBncmFiIGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KKwljYW0tPmZyYW1lX3RtcC5zdGF0dXMgPSBGX1VOVVNFRDsKKwljYW0tPmZyYW1lX3RtcC5xdWV1ZWQgPSAwOworCWNhbS0+ZnJhbWVfY3VycmVudCA9ICZjYW0tPmZyYW1lX3RtcDsKKworCWlmICghKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikpCisJCURCRyg1LCAiSXNvY2hyb25vdXMgdHJhbnNmZXIgc2l6ZTogJWx1IGJ5dGVzL2ZyYW1lIiwgCisJCSAgICAodW5zaWduZWQgbG9uZyl0X3NpemUqMikKKworCURCRyg1LCAiU3RhcnRpbmcgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyLi4uIikKKworCWNhbS0+c3RyZWFtaW5nID0gMTsKKworCS8qIFN1Ym1pdCB0aGUgVVJCcyAqLworCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihjYW0tPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWNhbS0+c3RyZWFtaW5nID0gMDsKKwkJCWZvciAoaiA9IGktMTsgaiA+PSAwOyBqLS0pIHsKKwkJCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbal0pOworCQkJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltqXSk7CisJCQl9CisJCQlEQkcoMSwgIkNvdWxkbid0IHNlbmQgYSB0cmFuc2ZlciByZXF1ZXN0IHRvIHRoZSAiCisJCQkgICAgICAgIlVTQiBjb3JlIChlcnJvciAjJWQsICVzKSIsIGVyciwgCisJCQkgICAgc3ltYm9saWModXJiX2Vycmxpc3QsIGVycikpCisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdG9wIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBhbmQgc2V0IGFsdGVybmF0ZSBzZXR0aW5nIHRvIDAgKDBNYi9zKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNhbS0+dXNiZGV2OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgZXJyID0gMDsKKwlzOCBpOworCisJaWYgKCFjYW0tPnN0cmVhbWluZykKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGlzIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgd2l0aCB1c2Jfc3VibWl0X3VyYigpIAorCSAgIGluIHRoZSBVUkIgY29tcGxldGl0aW9uIGhhbmRsZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT51cmJfbG9jaywgbG9ja19mbGFncyk7CisJY2FtLT5zdHJlYW1pbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+dXJiX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJZm9yIChpID0gVzk5NjhDRl9VUkJTLTE7IGkgPj0gMDsgaS0tKQorCQlpZiAoY2FtLT51cmJbaV0pIHsKKwkJCXVzYl9raWxsX3VyYihjYW0tPnVyYltpXSk7CisJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOworCQkJY2FtLT51cmJbaV0gPSBOVUxMOworCQl9CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpCisJCWdvdG8gZXhpdDsKKworCWVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwYTA1LCAweDNjKTsgLyogc3RvcCBVU0IgdHJhbnNmZXIgKi8KKwllcnIgKz0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgMCk7IC8qIDAgTWIvcyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgzOSk7IC8qIGRpc2FibGUgSlBFRyBlbmNvZGVyICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDE2KTsgLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisKKwlpZiAoZXJyKSB7CisJCURCRygyLCAiRmFpbGVkIHRvIHRlbGwgdGhlIGNhbWVyYSB0byBzdG9wIHRoZSBpc29jaHJvbm91cyAiCisJCSAgICAgICAidHJhbnNmZXIuIEhvd2V2ZXIgdGhpcyBpcyBub3QgYSBjcml0aWNhbCBlcnJvci4iKQorCQlyZXR1cm4gLUVJTzsKKwl9CisKK2V4aXQ6CisJREJHKDUsICJJc29jaHJvbm91cyB0cmFuc2ZlciBzdG9wcGVkIikKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdyaXRlIGEgVzk5NjhDRiByZWdpc3Rlci4gCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwlpbnQgcmVzOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFc5OTY4Q0ZfVVNCX0NUUkxfVElNRU9VVCk7CisKKwlpZiAocmVzIDwgMCkKKwkJREJHKDQsICJGYWlsZWQgdG8gd3JpdGUgYSByZWdpc3RlciAiCisJCSAgICAgICAiKHZhbHVlIDB4JTA0WCwgaW5kZXggMHglMDJYLCBlcnJvciAjJWQsICVzKSIsCisJCSAgICB2YWx1ZSwgaW5kZXgsIHJlcywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJlcykpCisKKwlyZXR1cm4gKHJlcyA+PSAwKSA/IDAgOiAtMTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJlYWQgYSBXOTk2OENGIHJlZ2lzdGVyLiAKKyAgUmV0dXJuIHRoZSByZWdpc3RlciB2YWx1ZSBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2IGluZGV4KQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJdTE2KiBidWZmID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgcmVzOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMSwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIDAsIGluZGV4LCBidWZmLCAyLCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOworCisJaWYgKHJlcyA8IDApCisJCURCRyg0LCAiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAiCisJCSAgICAgICAiKGluZGV4IDB4JTAyWCwgZXJyb3IgIyVkLCAlcykiLAorCQkgICAgaW5kZXgsIHJlcywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJlcykpCisKKwlyZXR1cm4gKHJlcyA+PSAwKSA/IChpbnQpKCpidWZmKSA6IC0xOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV3JpdGUgNjQtYml0IGRhdGEgdG8gdGhlIGZhc3Qgc2VyaWFsIGJ1cyByZWdpc3RlcnMuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX2ZzYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2KiBkYXRhKQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJdTE2IHZhbHVlOworCWludCByZXM7CisKKwl2YWx1ZSA9ICpkYXRhKys7CisKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCAweDA2LCBkYXRhLCA2LCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOworCisJaWYgKHJlcyA8IDApCisJCURCRyg0LCAiRmFpbGVkIHRvIHdyaXRlIHRoZSBGU0IgcmVnaXN0ZXJzICIKKwkJICAgICAgICIoZXJyb3IgIyVkLCAlcykiLCByZXMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByZXMpKQorCisJcmV0dXJuIChyZXMgPj0gMCkgPyAwIDogLTE7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXcml0ZSBkYXRhIHRvIHRoZSBzZXJpYWwgYnVzIGNvbnRyb2wgcmVnaXN0ZXIuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1MTYgdmFsdWUpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHZhbHVlLCAweDAxKTsKKwl1ZGVsYXkoVzk5NjhDRl9JMkNfQlVTX0RFTEFZKTsKKworCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZWFkIGRhdGEgZnJvbSB0aGUgc2VyaWFsIGJ1cyBjb250cm9sIHJlZ2lzdGVyLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCB2ID0gMDsKKworCXYgPSB3OTk2OGNmX3JlYWRfcmVnKGNhbSwgMHgwMSk7CisJdWRlbGF5KFc5OTY4Q0ZfSTJDX0JVU19ERUxBWSk7CisKKwlyZXR1cm4gdjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVwbG9hZCBxdWFudGl6YXRpb24gdGFibGVzIGZvciB0aGUgSlBFRyBjb21wcmVzc2lvbi4KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdzk5NjhjZl9zdGFydF90cmFuc2ZlcigpLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl91cGxvYWRfcXVhbnRpemF0aW9udGFibGVzKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXUxNiBhLCBiOworCWludCBlcnIgPSAwLCBpLCBqOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDM5KTsgLyogSlBFRyBjbG9jayBlbmFibGUgKi8KKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKywgaiArPSAyKSB7CisJCWEgPSBZX1FVQU5UQUJMRVtqXSB8ICgodW5zaWduZWQpKFlfUVVBTlRBQkxFW2orMV0pIDw8IDgpOworCQliID0gVVZfUVVBTlRBQkxFW2pdIHwgKCh1bnNpZ25lZCkoVVZfUVVBTlRBQkxFW2orMV0pIDw8IDgpOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBhLCAweDQwK2kpOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBiLCAweDYwK2kpOworCX0KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMTIsIDB4MzkpOyAvKiBKUEVHIGVuY29kZXIgZW5hYmxlICovCisKKwlyZXR1cm4gZXJyOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExvdy1sZXZlbCBJMkMgSS9PIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIEkyQyB0cmFuc2ZlciBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgKgorICogaTJjX2FkYXBfZmFzdHdyaXRlX2J5dGVfZGF0YSgpIChhdCA0MDAga0h6IGJpdCBmcmVxdWVuY3kgb25seSkgICAgICAgICAgICoKKyAqIGkyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBpMmNfYWRhcF9yZWFkX2J5dGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdGFydChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDExKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfc3RvcChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDExKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEzKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MSAqLworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTggdikKK3sKKwl1OCBiaXQ7CisJaW50IGVyciA9IDAsIHNkYTsKKworCWZvciAoYml0ID0gMCA7IGJpdCA8IDggOyBiaXQrKykgeworCQlzZGEgPSAodiAmIDB4ODApID8gMiA6IDA7CisJCXYgPDw9IDE7CisJCS8qIFNERT0xLCBTREE9c2RhLCBTQ0w9MCAqLworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MTAgfCBzZGEpOworCQkvKiBTREU9MSwgU0RBPXNkYSwgU0NMPTEgKi8KKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDExIHwgc2RhKTsKKwkJLyogU0RFPTEsIFNEQT1zZGEsIFNDTD0wICovCisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgxMCB8IHNkYSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1OCogdikKK3sKKwl1OCBiaXQ7CisJaW50IGVyciA9IDA7CisKKwkqdiA9IDA7CisJZm9yIChiaXQgPSAwIDsgYml0IDwgOCA7IGJpdCsrKSB7CisJCSp2IDw8PSAxOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7CisJCSp2IHw9ICh3OTk2OGNmX3JlYWRfc2IoY2FtKSAmIDB4MDAwOCkgPyAxIDogMDsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDExKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDAsIHNkYTsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEzKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MSAqLworCXNkYSA9ICh3OTk2OGNmX3JlYWRfc2IoY2FtKSAmIDB4MDgpID8gMSA6IDA7IC8qIHNkYSA9IFNEQSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEyKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MCAqLworCWlmIChzZGEgPCAwKQorCQllcnIgKz0gc2RhOworCWlmIChzZGEgPT0gMSkgeworCQlEQkcoNiwgIkNvdWxkbid0IHJlY2VpdmUgdGhlIEFDSyIpCisJCWVyciArPSAtMTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFRoaXMgc2VlbXMgdG8gcmVmcmVzaCB0aGUgY29tbXVuaWNhdGlvbiB0aHJvdWdoIHRoZSBzZXJpYWwgYnVzICovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDAsIGo7CisKKwlmb3IgKGogPSAxOyBqIDw9IDEwOyBqKyspIHsKKwkJZXJyID0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMjAsIDB4MDEpOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCisvKiBTTUJ1cyBwcm90b2NvbDogUyBBZGRyIFdyIFtBXSBTdWJhZGRyIFtBXSBWYWx1ZSBbQV0gUCAqLworc3RhdGljIGludCAKK3c5OTY4Y2ZfaTJjX2FkYXBfZmFzdHdyaXRlX2J5dGVfZGF0YShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsdTggdmFsdWUpCit7CisJdTE2KiBkYXRhID0gY2FtLT5kYXRhX2J1ZmZlcjsKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSk7CisKKwkvKiBFbmFibGUgU0JVUyBvdXRwdXRzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMjApOworCisJZGF0YVswXSA9IDB4MDgyZiB8ICgoYWRkcmVzcyAmIDB4ODApID8gMHgxNTAwIDogMHgwKTsKKwlkYXRhWzBdIHw9IChhZGRyZXNzICYgMHg0MCkgPyAweDQwMDAgOiAweDA7CisJZGF0YVsxXSA9IDB4MjA4MiB8ICgoYWRkcmVzcyAmIDB4NDApID8gMHgwMDA1IDogMHgwKTsKKwlkYXRhWzFdIHw9IChhZGRyZXNzICYgMHgyMCkgPyAweDAxNTAgOiAweDA7CisJZGF0YVsxXSB8PSAoYWRkcmVzcyAmIDB4MTApID8gMHg1NDAwIDogMHgwOworCWRhdGFbMl0gPSAweDgyMDggfCAoKGFkZHJlc3MgJiAweDA4KSA/IDB4MDAxNSA6IDB4MCk7CisJZGF0YVsyXSB8PSAoYWRkcmVzcyAmIDB4MDQpID8gMHgwNTQwIDogMHgwOworCWRhdGFbMl0gfD0gKGFkZHJlc3MgJiAweDAyKSA/IDB4NTAwMCA6IDB4MDsKKwlkYXRhWzNdID0gMHgxZDIwIHwgKChhZGRyZXNzICYgMHgwMikgPyAweDAwMDEgOiAweDApOworCWRhdGFbM10gfD0gKGFkZHJlc3MgJiAweDAxKSA/IDB4MDA1NCA6IDB4MDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX2ZzYihjYW0sIGRhdGEpOworCisJZGF0YVswXSA9IDB4ODIwOCB8ICgoc3ViYWRkcmVzcyAmIDB4ODApID8gMHgwMDE1IDogMHgwKTsKKwlkYXRhWzBdIHw9IChzdWJhZGRyZXNzICYgMHg0MCkgPyAweDA1NDAgOiAweDA7CisJZGF0YVswXSB8PSAoc3ViYWRkcmVzcyAmIDB4MjApID8gMHg1MDAwIDogMHgwOworCWRhdGFbMV0gPSAweDA4MjAgfCAoKHN1YmFkZHJlc3MgJiAweDIwKSA/IDB4MDAwMSA6IDB4MCk7CisJZGF0YVsxXSB8PSAoc3ViYWRkcmVzcyAmIDB4MTApID8gMHgwMDU0IDogMHgwOworCWRhdGFbMV0gfD0gKHN1YmFkZHJlc3MgJiAweDA4KSA/IDB4MTUwMCA6IDB4MDsKKwlkYXRhWzFdIHw9IChzdWJhZGRyZXNzICYgMHgwNCkgPyAweDQwMDAgOiAweDA7CisJZGF0YVsyXSA9IDB4MjA4MiB8ICgoc3ViYWRkcmVzcyAmIDB4MDQpID8gMHgwMDA1IDogMHgwKTsKKwlkYXRhWzJdIHw9IChzdWJhZGRyZXNzICYgMHgwMikgPyAweDAxNTAgOiAweDA7CisJZGF0YVsyXSB8PSAoc3ViYWRkcmVzcyAmIDB4MDEpID8gMHg1NDAwIDogMHgwOworCWRhdGFbM10gPSAweDAwMWQ7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9mc2IoY2FtLCBkYXRhKTsKKworCWRhdGFbMF0gPSAweDgyMDggfCAoKHZhbHVlICYgMHg4MCkgPyAweDAwMTUgOiAweDApOworCWRhdGFbMF0gfD0gKHZhbHVlICYgMHg0MCkgPyAweDA1NDAgOiAweDA7CisJZGF0YVswXSB8PSAodmFsdWUgJiAweDIwKSA/IDB4NTAwMCA6IDB4MDsKKwlkYXRhWzFdID0gMHgwODIwIHwgKCh2YWx1ZSAmIDB4MjApID8gMHgwMDAxIDogMHgwKTsKKwlkYXRhWzFdIHw9ICh2YWx1ZSAmIDB4MTApID8gMHgwMDU0IDogMHgwOworCWRhdGFbMV0gfD0gKHZhbHVlICYgMHgwOCkgPyAweDE1MDAgOiAweDA7CisJZGF0YVsxXSB8PSAodmFsdWUgJiAweDA0KSA/IDB4NDAwMCA6IDB4MDsKKwlkYXRhWzJdID0gMHgyMDgyIHwgKCh2YWx1ZSAmIDB4MDQpID8gMHgwMDA1IDogMHgwKTsKKwlkYXRhWzJdIHw9ICh2YWx1ZSAmIDB4MDIpID8gMHgwMTUwIDogMHgwOworCWRhdGFbMl0gfD0gKHZhbHVlICYgMHgwMSkgPyAweDU0MDAgOiAweDA7CisJZGF0YVszXSA9IDB4ZmUxZDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX2ZzYihjYW0sIGRhdGEpOworCisJLyogRGlzYWJsZSBTQlVTIG91dHB1dHMgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAwMCk7CisKKwlpZiAoIWVycikKKwkJREJHKDUsICJJMkMgd3JpdGUgYnl0ZSBkYXRhIGRvbmUsIGFkZHIuMHglMDRYLCBzdWJhZGRyLjB4JTAyWCAiCisJCSAgICAgICAidmFsdWUgMHglMDJYIiwgYWRkcmVzcywgc3ViYWRkcmVzcywgdmFsdWUpCisJZWxzZQorCQlEQkcoNSwgIkkyQyB3cml0ZSBieXRlIGRhdGEgZmFpbGVkLCBhZGRyLjB4JTA0WCwgIgorCQkgICAgICAgInN1YmFkZHIuMHglMDJYLCB2YWx1ZSAweCUwMlgiLCAKKwkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsIHZhbHVlKQorCisJcmV0dXJuIGVycjsKK30KKworCisvKiBTTUJ1cyBwcm90b2NvbDogUyBBZGRyIFdyIFtBXSBTdWJhZGRyIFtBXSBQIFMgQWRkcisxIFJkIFtBXSBbVmFsdWVdIE5BIFAgKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCogdmFsdWUpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXJpYWwgZGF0YSBlbmFibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7IC8qIGRvbid0IGNoYW5nZSAhICovCisKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBzdWJhZGRyZXNzKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3N0b3AoY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzICsgMSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoY2FtLCB2YWx1ZSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYWNrKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RvcChjYW0pOworCisJLyogU2VyaWFsIGRhdGEgZGlzYWJsZSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDAwKTsKKworCWlmICghZXJyKQorCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZGF0YSBkb25lLCBhZGRyLjB4JTA0WCwgIgorCQkgICAgICAgInN1YmFkZHIuMHglMDJYLCB2YWx1ZSAweCUwMlgiLCAKKwkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsICp2YWx1ZSkKKwllbHNlCisJCURCRyg1LCAiSTJDIHJlYWQgYnl0ZSBkYXRhIGZhaWxlZCwgYWRkci4weCUwNFgsICIKKwkJICAgICAgICJzdWJhZGRyLjB4JTAyWCwgd3JvbmcgdmFsdWUgMHglMDJYIiwKKwkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsICp2YWx1ZSkKKworCXJldHVybiBlcnI7Cit9CisKKworLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkcisxIFJkIFtBXSBbVmFsdWVdIE5BIFAgKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXJpYWwgZGF0YSBlbmFibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7CisKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzICsgMSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoY2FtLCB2YWx1ZSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYWNrKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RvcChjYW0pOworIAorCS8qIFNlcmlhbCBkYXRhIGRpc2FibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAwMCk7CisKKwlpZiAoIWVycikKKwkJREJHKDUsICJJMkMgcmVhZCBieXRlIGRvbmUsIGFkZHIuMHglMDRYLCAiCisJCSAgICAgICAidmFsdWUgMHglMDJYIiwgYWRkcmVzcywgKnZhbHVlKQorCWVsc2UKKwkJREJHKDUsICJJMkMgcmVhZCBieXRlIGZhaWxlZCwgYWRkci4weCUwNFgsICIKKwkJICAgICAgICJ3cm9uZyB2YWx1ZSAweCUwMlgiLCBhZGRyZXNzLCAqdmFsdWUpCisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIgV3IgW0FdIFZhbHVlIFtBXSBQICovCitzdGF0aWMgaW50IAordzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSkKK3sKKwlEQkcoNCwgImkyY193cml0ZV9ieXRlKCkgaXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNmZXIgbW9kZSIpCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Cit3OTk2OGNmX2kyY19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTE2IGFkZHIsIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXU4IGk7CisJaW50IGVyciA9IDA7IAorCisJc3dpdGNoIChhZGRyKSB7CisJCWNhc2UgT1Y2eHgwX1NJRDoKKwkJY2FzZSBPVjd4eDBfU0lEOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkcoNCwgIlJlamVjdGVkIHNsYXZlIElEIDB4JTA0WCIsIGFkZHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURSkgeworCQkvKiBXaHkgYWRkciA8PD0gMT8gU2VlIE9WWFhYMF9TSUQgZGVmaW5lcyBpbiBvdmNhbWNoaXAuaCAqLworCQlhZGRyIDw8PSAxOworCisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKKyAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoY2FtLCBhZGRyLCBjb21tYW5kKTsKKwkJZWxzZSBpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgCisJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShjYW0sYWRkciwmZGF0YS0+Ynl0ZSk7CisKKwl9IGVsc2UgaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgeworCQlhZGRyIDw8PSAxOworCisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKKyAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoY2FtLCBhZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOworCQllbHNlIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7CisJCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgeworCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoY2FtLGFkZHIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCWlmICh3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSkpIHsKKwkJCQkJCWVyciA9IC1FSU87CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJfSBlbHNlIHsKKwkJREJHKDQsICJVbnN1cHBvcnRlZCBJMkMgdHJhbnNmZXIgbW9kZSAoJWQpIiwgc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKiBhZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSAgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEE7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX2kyY19hdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50KiBjbGllbnQpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CisJY29uc3QgY2hhciogY2xpZW50bmFtZSA9IGkyY19jbGllbnRuYW1lKGNsaWVudCk7CisJaW50IGlkID0gY2xpZW50LT5kcml2ZXItPmlkLCBlcnIgPSAwOworCisJaWYgKGlkID09IEkyQ19EUklWRVJJRF9PVkNBTUNISVApIHsKKwkJY2FtLT5zZW5zb3JfY2xpZW50ID0gY2xpZW50OworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9pbml0KGNhbSk7CisJCWlmIChlcnIpIHsKKwkJCWNhbS0+c2Vuc29yX2NsaWVudCA9IE5VTEw7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJREJHKDQsICJSZWplY3RlZCBjbGllbnQgWyVzXSB3aXRoIGRyaXZlciBbJXNdIiwgCisJCSAgICBjbGllbnRuYW1lLCBjbGllbnQtPmRyaXZlci0+bmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREJHKDUsICJJMkMgYXR0YWNoIGNsaWVudCBbJXNdIHdpdGggZHJpdmVyIFslc10iLAorCSAgICBjbGllbnRuYW1lLCBjbGllbnQtPmRyaXZlci0+bmFtZSkKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCWNvbnN0IGNoYXIqIGNsaWVudG5hbWUgPSBpMmNfY2xpZW50bmFtZShjbGllbnQpOworCisJaWYgKGNhbS0+c2Vuc29yX2NsaWVudCA9PSBjbGllbnQpCisJCWNhbS0+c2Vuc29yX2NsaWVudCA9IE5VTEw7CisKKwlEQkcoNSwgIkkyQyBkZXRhY2ggY2xpZW50IFslc10iLCBjbGllbnRuYW1lKQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCAKK3c5OTY4Y2ZfaTJjX2NvbnRyb2woc3RydWN0IGkyY19hZGFwdGVyKiBhZGFwdGVyLCB1bnNpZ25lZCBpbnQgY21kLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwlzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYWxnbyA9IHsKKwkJLm5hbWUgPSAgICAgICAgICAiVzk5Nls4N11DRiBhbGdvcml0aG0iLAorCQkuaWQgPSAgICAgICAgICAgIEkyQ19BTEdPX1NNQlVTLAorCQkuc21idXNfeGZlciA9ICAgIHc5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIsCisJCS5hbGdvX2NvbnRyb2wgPSAgdzk5NjhjZl9pMmNfY29udHJvbCwKKwkJLmZ1bmN0aW9uYWxpdHkgPSB3OTk2OGNmX2kyY19mdW5jLAorCX07CisKKwlzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGFkYXAgPSB7CisJCS5pZCA9ICAgICAgICAgICAgICAgIEkyQ19BTEdPX1NNQlVTIHwgSTJDX0hXX1NNQlVTX1c5OTY4Q0YsCisJCS5jbGFzcyA9ICAgICAgICAgICAgIEkyQ19DTEFTU19DQU1fRElHSVRBTCwKKwkJLm93bmVyID0gICAgICAgICAgICAgVEhJU19NT0RVTEUsCisJCS5jbGllbnRfcmVnaXN0ZXIgPSAgIHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0sCisJCS5jbGllbnRfdW5yZWdpc3RlciA9IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0sCisJCS5hbGdvID0gICAgICAgICAgICAgICZhbGdvLAorCX07CisKKwltZW1jcHkoJmNhbS0+aTJjX2FkYXB0ZXIsICZhZGFwLCBzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CisJc3RyY3B5KGNhbS0+aTJjX2FkYXB0ZXIubmFtZSwgInc5OTY4Y2YiKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjYW0tPmkyY19hZGFwdGVyLCBjYW0pOworCisJREJHKDYsICJSZWdpc3RlcmluZyBJMkMgYWRhcHRlciB3aXRoIGtlcm5lbC4uLiIpCisKKwllcnIgPSBpMmNfYWRkX2FkYXB0ZXIoJmNhbS0+aTJjX2FkYXB0ZXIpOworCWlmIChlcnIpCisJCURCRygxLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBJMkMgYWRhcHRlciIpCisJZWxzZQorCQlEQkcoNSwgIkkyQyBhZGFwdGVyIHJlZ2lzdGVyZWQiKQorCisJcmV0dXJuIGVycjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHVybiBvbiB0aGUgTEVEIG9uIHNvbWUgd2ViY2Ftcy4gQSBiZWVwIHNob3VsZCBiZSBoZWFyZCB0b28uCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3R1cm5fb25fbGVkKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhmZjAwLCAweDAwKTsgLyogcG93ZXItZG93biAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4YmYxNywgMHgwMCk7IC8qIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTAsIDB4MDApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDAxKTsgLyogc2VyaWFsIGJ1cywgU0RTIGhpZ2ggKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOyAvKiBzZXJpYWwgYnVzLCBTRFMgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDAxKTsgLyogLi5oaWdoICdiZWVwLWJlZXAnICovCisKKwlpZiAoZXJyKQorCQlEQkcoMiwgIkNvdWxkbid0IHR1cm4gb24gdGhlIExFRCIpCisKKwlEQkcoNSwgIkxFRCB0dXJuZWQgb24iKQorCisJcmV0dXJuIGVycjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdyaXRlIHNvbWUgcmVnaXN0ZXJzIGZvciB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIG9uIG9wZW4oKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfaW5pdF9jaGlwKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXVuc2lnbmVkIGxvbmcgaHdfYnVmc2l6ZSA9IGNhbS0+bWF4d2lkdGgqY2FtLT5tYXhoZWlnaHQqMiwKKwkgICAgICAgICAgICAgIHkwID0gMHgwMDAwLAorCSAgICAgICAgICAgICAgdTAgPSB5MCArIGh3X2J1ZnNpemUvMiwKKwkgICAgICAgICAgICAgIHYwID0gdTAgKyBod19idWZzaXplLzQsCisJICAgICAgICAgICAgICB5MSA9IHYwICsgaHdfYnVmc2l6ZS80LAorCSAgICAgICAgICAgICAgdTEgPSB5MSArIGh3X2J1ZnNpemUvMiwKKwkgICAgICAgICAgICAgIHYxID0gdTEgKyBod19idWZzaXplLzQ7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGZmMDAsIDB4MDApOyAvKiBwb3dlciBvZmYgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTAsIDB4MDApOyAvKiBwb3dlciBvbiAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHg0MDVkLCAweDAzKTsgLyogRFJBTSB0aW1pbmdzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDMwLCAweDA0KTsgLyogU0RSQU0gdGltaW5ncyAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTAgJiAweGZmZmYsIDB4MjApOyAvKiBZIGJ1Zi4wLCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MCA+PiAxNiwgMHgyMSk7ICAgIC8qIFkgYnVmLjAsIGhpZ2ggKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB1MCAmIDB4ZmZmZiwgMHgyNCk7IC8qIFUgYnVmLjAsIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHUwID4+IDE2LCAweDI1KTsgICAgLyogVSBidWYuMCwgaGlnaCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHYwICYgMHhmZmZmLCAweDI4KTsgLyogViBidWYuMCwgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdjAgPj4gMTYsIDB4MjkpOyAgICAvKiBWIGJ1Zi4wLCBoaWdoICovCisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSAmIDB4ZmZmZiwgMHgyMik7IC8qIFkgYnVmLjEsIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxID4+IDE2LCAweDIzKTsgICAgLyogWSBidWYuMSwgaGlnaCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHUxICYgMHhmZmZmLCAweDI2KTsgLyogVSBidWYuMSwgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdTEgPj4gMTYsIDB4MjcpOyAgICAvKiBVIGJ1Zi4xLCBoaWdoICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdjEgJiAweGZmZmYsIDB4MmEpOyAvKiBWIGJ1Zi4xLCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB2MSA+PiAxNiwgMHgyYik7ICAgIC8qIFYgYnVmLjEsIGhpZ2ggKi8KKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxICYgMHhmZmZmLCAweDMyKTsgLyogSlBFRyBidWYgMCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSA+PiAxNiwgMHgzMyk7ICAgIC8qIEpQRUcgYnVmIDAgaGlnaCAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTEgJiAweGZmZmYsIDB4MzQpOyAvKiBKUEVHIGJ1ZiAxIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxID4+IDE2LCAweDM1KTsgICAgLyogSlBFRyBidWcgMSBoaWdoICovCisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MzYpOy8qIEpQRUcgcmVzdGFydCBpbnRlcnZhbCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDgwNCwgMHgzNyk7LypKUEVHIFZMRSBGSUZPIHRocmVzaG9sZCovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDM4KTsvKiBkaXNhYmxlIGh3IHVwLXNjYWxpbmcgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4M2YpOyAvKiBKUEVHL01DVEwgdGVzdCBkYXRhICovCisKKwllcnIgKz0gdzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIGNhbS0+cGljdHVyZSk7IC8qIHRoaXMgYmVmb3JlICovCisJZXJyICs9IHc5OTY4Y2Zfc2V0X3dpbmRvdyhjYW0sIGNhbS0+d2luZG93KTsKKworCWlmIChlcnIpCisJCURCRygxLCAiQ2hpcCBpbml0aWFsaXphdGlvbiBmYWlsZWQiKQorCWVsc2UKKwkJREJHKDUsICJDaGlwIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCIpCisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBwYWxldHRlIGlzIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgdTE2IHc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZSh1MTYgcGFsZXR0ZSkKK3sKKwl1OCBpID0gMDsKKwl3aGlsZSAodzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUgIT0gMCkgeworCQlpZiAocGFsZXR0ZSA9PSB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0ucGFsZXR0ZSkKKwkJCXJldHVybiBwYWxldHRlOworCQlpKys7CisJfQorCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmV0dXJuIHRoZSBkZXB0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwYWxldHRlLgorICBQYWxldHRlIF9tdXN0XyBiZSBzdXBwb3J0ZWQgIQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX2RlcHRoKHUxNiBwYWxldHRlKQoreworCXU4IGk9MDsKKwl3aGlsZSAodzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUgIT0gcGFsZXR0ZSkKKwkJaSsrOworCisJcmV0dXJuIHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5kZXB0aDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJldHVybiBub24temVybyBpZiB0aGUgZm9ybWF0IHJlcXVpcmVzIGRlY29tcHJlc3Npb24sIDAgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHU4IHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHUxNiBwYWxldHRlKQoreworCXU4IGkgPSAwOworCXdoaWxlICh3OTk2OGNmX2Zvcm1hdGxpc3RbaV0ucGFsZXR0ZSAhPSAwKSB7CisJCWlmIChwYWxldHRlID09IHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5wYWxldHRlKQorCQkJcmV0dXJuIHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5jb21wcmVzc2lvbjsKKwkJaSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIENoYW5nZSB0aGUgcGljdHVyZSBzZXR0aW5ncyBvZiB0aGUgY2FtZXJhLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3c5OTY4Y2Zfc2V0X3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpCit7CisJdTE2IGZtdCwgaHdfZGVwdGgsIGh3X3BhbGV0dGUsIHJlZ192ID0gMHgwMDAwOworCWludCBlcnIgPSAwOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSB1c2luZyBhIHZhbGlkIGRlcHRoICovCisJcGljdC5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgocGljdC5wYWxldHRlKTsKKworCWZtdCA9IHBpY3QucGFsZXR0ZTsKKworCWh3X2RlcHRoID0gcGljdC5kZXB0aDsgLyogZGVwdGggdXNlZCBieSB0aGUgd2luYm9uZCBjaGlwICovCisJaHdfcGFsZXR0ZSA9IHBpY3QucGFsZXR0ZTsgLyogcGFsZXR0ZSB1c2VkIGJ5IHRoZSB3aW5ib25kIGNoaXAgKi8KKworCS8qIFZTICYgSFMgcG9sYXJpdGllcyAqLworCXJlZ192ID0gKGNhbS0+dnNfcG9sYXJpdHkgPDwgMTIpIHwgKGNhbS0+aHNfcG9sYXJpdHkgPDwgMTEpOworCisJc3dpdGNoIChmbXQpCisJeworCQljYXNlIFZJREVPX1BBTEVUVEVfVVlWWToKKwkJCXJlZ192IHw9IDB4MDAwMDsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIyUDoKKwkJCXJlZ192IHw9IDB4MDAwMjsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfREVDT01QUkVTU0lPTjsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwOgorCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDoKKwkJCXJlZ192IHw9IDB4MDAwMzsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfREVDT01QUkVTU0lPTjsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX1BBTEVUVEVfWVVZVjoKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMjoKKwkJCXJlZ192IHw9IDB4MDAwMDsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfU1dBUF9ZVVZfQllURVM7CisJCQlod19wYWxldHRlID0gVklERU9fUEFMRVRURV9VWVZZOworCQkJYnJlYWs7CisJCS8qIE9yaWdpbmFsIHZpZGVvIGlzIHVzZWQgaW5zdGVhZCBvZiBSR0JYIHBhbGV0dGVzLiAKKwkJICAgU29mdHdhcmUgY29udmVyc2lvbiBsYXRlci4gKi8KKwkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NTU6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0IyNDoKKwkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjMyOgorCQkJcmVnX3YgfD0gMHgwMDAwOyAvKiBVWVZZIDE2IGJpdCBpcyB1c2VkICovCisJCQlod19kZXB0aCA9IDE2OworCQkJaHdfcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfVVlWWTsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfVVlWWV9UT19SR0JYOworCQkJYnJlYWs7CisJfQorCisJLyogTk9URTogZHVlIHRvIG1lbW9yeSBpc3N1ZXMsIGl0IGlzIGJldHRlciB0byBkaXNhYmxlIHRoZSBoYXJkd2FyZQorCSAgICAgICAgIGRvdWJsZSBidWZmZXJpbmcgZHVyaW5nIGNvbXByZXNzaW9uICovCisJaWYgKGNhbS0+ZG91YmxlX2J1ZmZlciAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikpCisJCXJlZ192IHw9IDB4MDA4MDsKKworCWlmIChjYW0tPmNsYW1waW5nKQorCQlyZWdfdiB8PSAweDAwMjA7CisKKwlpZiAoY2FtLT5maWx0ZXJfdHlwZSA9PSAxKQorCQlyZWdfdiB8PSAweDAwMDg7CisJZWxzZSBpZiAoY2FtLT5maWx0ZXJfdHlwZSA9PSAyKQorCQlyZWdfdiB8PSAweDAwMGM7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgcmVnX3YsIDB4MTYpKSkKKwkJZ290byBlcnJvcjsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoY2FtLCBwaWN0KSkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJZiBhbGwgd2VudCB3ZWxsLCB1cGRhdGUgdGhlIGRldmljZSBkYXRhIHN0cnVjdHVyZSAqLworCW1lbWNweSgmY2FtLT5waWN0dXJlLCAmcGljdCwgc2l6ZW9mKHBpY3QpKTsKKwljYW0tPmh3X2RlcHRoID0gaHdfZGVwdGg7CisJY2FtLT5od19wYWxldHRlID0gaHdfcGFsZXR0ZTsKKworCS8qIFNldHRpbmdzIGNoYW5nZWQsIHNvIHdlIGNsZWFyIHRoZSBmcmFtZSBidWZmZXJzICovCisJbWVtc2V0KGNhbS0+ZnJhbWVbMF0uYnVmZmVyLCAwLCBjYW0tPm5idWZmZXJzKmNhbS0+ZnJhbWVbMF0uc2l6ZSk7CisKKwlEQkcoNCwgIlBhbGV0dGUgaXMgJXMsIGRlcHRoIGlzICV1IGJwcCIsCisJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksIHBpY3QuZGVwdGgpCisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJREJHKDEsICJGYWlsZWQgdG8gY2hhbmdlIHBpY3R1cmUgc2V0dGluZ3MiKQorCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDaGFuZ2UgdGhlIGNhcHR1cmUgYXJlYSBzaXplIG9mIHRoZSBjYW1lcmEuCisgIFRoaXMgZnVuY3Rpb24gX211c3RfIGJlIGNhbGxlZCBfYWZ0ZXJfIHc5OTY4Y2Zfc2V0X3BpY3R1cmUoKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50Cit3OTk2OGNmX3NldF93aW5kb3coc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHN0cnVjdCB2aWRlb193aW5kb3cgd2luKQoreworCXUxNiB4LCB5LCB3LCBoLCBzY3gsIHNjeSwgY3csIGNoLCBheCwgYXk7CisJdW5zaWduZWQgbG9uZyBmdywgZmg7CisJc3RydWN0IG92Y2FtY2hpcF93aW5kb3cgc193aW47CisJaW50IGVyciA9IDA7CisKKwkvKiBXb3JrIGFyb3VuZCB0byBhdm9pZCBGUCBhcml0aG1ldGljcyAqLworCSNkZWZpbmUgX19TQyh4KSAoKHgpIDw8IDEwKQorCSNkZWZpbmUgX19VTlNDKHgpICgoeCkgPj4gMTApCisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIHVzaW5nIGEgc3VwcG9ydGVkIHJlc29sdXRpb24gKi8KKwlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJndpbi53aWR0aCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2Kikmd2luLmhlaWdodCkpKQorCQlnb3RvIGVycm9yOworCisJLyogU2NhbGluZyBmYWN0b3JzICovCisJZncgPSBfX1NDKHdpbi53aWR0aCkgLyBjYW0tPm1heHdpZHRoOworCWZoID0gX19TQyh3aW4uaGVpZ2h0KSAvIGNhbS0+bWF4aGVpZ2h0OworCisJLyogU2V0IHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB1c2VkIGJ5IHRoZSBjaGlwICovCisJaWYgKCh3aW4ud2lkdGggPiBjYW0tPm1heHdpZHRoKSB8fCAod2luLmhlaWdodCA+IGNhbS0+bWF4aGVpZ2h0KSkgeworCQljYW0tPnZwcF9mbGFnIHw9IFZQUF9VUFNDQUxFOworCQkvKiBDYWxjdWxhdGUgbGFyZ2VzdCB3LGggbWFudGFpbmluZyB0aGUgc2FtZSB3L2ggcmF0aW8gKi8KKwkJdyA9IChmdyA+PSBmaCkgPyBjYW0tPm1heHdpZHRoIDogX19TQyh3aW4ud2lkdGgpL2ZoOworCQloID0gKGZ3ID49IGZoKSA/IF9fU0Mod2luLmhlaWdodCkvZncgOiBjYW0tPm1heGhlaWdodDsKKwkJaWYgKHcgPCBjYW0tPm1pbndpZHRoKSAvKiBqdXN0IGluIGNhc2UgKi8KKwkJCXcgPSBjYW0tPm1pbndpZHRoOworCQlpZiAoaCA8IGNhbS0+bWluaGVpZ2h0KSAvKiBqdXN0IGluIGNhc2UgKi8KKwkJCWggPSBjYW0tPm1pbmhlaWdodDsKKwl9IGVsc2UgeworCQljYW0tPnZwcF9mbGFnICY9IH5WUFBfVVBTQ0FMRTsKKwkJdyA9IHdpbi53aWR0aDsKKwkJaCA9IHdpbi5oZWlnaHQ7CisJfQorCisJLyogeCx5IG9mZnNldHMgb2YgdGhlIGNyb3BwZWQgYXJlYSAqLworCXNjeCA9IGNhbS0+c3RhcnRfY3JvcHg7CisJc2N5ID0gY2FtLT5zdGFydF9jcm9weTsKKworCS8qIENhbGN1bGF0ZSBjcm9wcGVkIGFyZWEgbWFudGVpbmluZyB0aGUgcmlnaHQgdy9oIHJhdGlvICovCisJaWYgKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkgeworCQljdyA9IChmdyA+PSBmaCkgPyBjYW0tPm1heHdpZHRoIDogX19TQyh3aW4ud2lkdGgpL2ZoOworCQljaCA9IChmdyA+PSBmaCkgPyBfX1NDKHdpbi5oZWlnaHQpL2Z3IDogY2FtLT5tYXhoZWlnaHQ7CisJfSBlbHNlIHsKKwkJY3cgPSB3OworCQljaCA9IGg7CisJfQorCisJLyogU2V0dXAgdGhlIHdpbmRvdyBvZiB0aGUgc2Vuc29yICovCisJc193aW4uZm9ybWF0ID0gVklERU9fUEFMRVRURV9VWVZZOworCXNfd2luLndpZHRoID0gY2FtLT5tYXh3aWR0aDsKKwlzX3dpbi5oZWlnaHQgPSBjYW0tPm1heGhlaWdodDsKKwlzX3dpbi5xdWFydGVyID0gMDsgLyogZnVsbCBwcm9ncmVzc2l2ZSB2aWRlbyAqLworCisJLyogQ2VudGVyIGl0ICovCisJc193aW4ueCA9IChzX3dpbi53aWR0aCAtIGN3KSAvIDI7CisJc193aW4ueSA9IChzX3dpbi5oZWlnaHQgLSBjaCkgLyAyOworCisJLyogQ2xvY2sgZGl2aXNvciAqLworCWlmIChjYW0tPmNsb2NrZGl2ID49IDApCisJCXNfd2luLmNsb2NrZGl2ID0gY2FtLT5jbG9ja2RpdjsgLyogbWFudWFsIG92ZXJyaWRlICovCisJZWxzZQorCQlzd2l0Y2ggKGNhbS0+c2Vuc29yKSB7CisJCQljYXNlIENDX09WNjYyMDoKKwkJCQlzX3dpbi5jbG9ja2RpdiA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIENDX09WNjYzMDoKKwkJCQlzX3dpbi5jbG9ja2RpdiA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIENDX09WNzZCRToKKwkJCWNhc2UgQ0NfT1Y3NjEwOgorCQkJY2FzZSBDQ19PVjc2MjA6CisJCQkJc193aW4uY2xvY2tkaXYgPSAwOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzX3dpbi5jbG9ja2RpdiA9IFc5OTY4Q0ZfREVGX0NMT0NLRElWSVNPUjsKKwkJfQorCisJLyogV2UgaGF2ZSB0byBzY2FsZSB3aW4ueCBhbmQgd2luLnkgb2Zmc2V0cyAqLworCWlmICggKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkKKwkgICAgIHx8IChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpICkgeworCQlheCA9IF9fU0Mod2luLngpL2Z3OworCQlheSA9IF9fU0Mod2luLnkpL2ZoOworCX0gZWxzZSB7CisJCWF4ID0gd2luLng7CisJCWF5ID0gd2luLnk7CisJfQorCisJaWYgKChheCArIGN3KSA+IGNhbS0+bWF4d2lkdGgpCisJCWF4ID0gY2FtLT5tYXh3aWR0aCAtIGN3OworCisJaWYgKChheSArIGNoKSA+IGNhbS0+bWF4aGVpZ2h0KQorCQlheSA9IGNhbS0+bWF4aGVpZ2h0IC0gY2g7CisKKwkvKiBBZGp1c3Qgd2luLngsIHdpbi55ICovCisJaWYgKCAoY2FtLT5sYXJnZXZpZXcgJiYgIShjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpKQorCSAgICAgfHwgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkgKSB7CisJCXdpbi54ID0gX19VTlNDKGF4KmZ3KTsKKwkJd2luLnkgPSBfX1VOU0MoYXkqZmgpOworCX0gZWxzZSB7CisJCXdpbi54ID0gYXg7CisJCXdpbi55ID0gYXk7CisJfQorCisJLyogT2Zmc2V0cyB1c2VkIGJ5IHRoZSBjaGlwICovCisJeCA9IGF4ICsgc193aW4ueDsKKwl5ID0gYXkgKyBzX3dpbi55OworCisJLyogR28gISAqLworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9TX01PREUsICZzX3dpbikpKQorCQlnb3RvIGVycm9yOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N4ICsgeCwgMHgxMCk7CisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N5ICsgeSwgMHgxMSk7CisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N4ICsgeCArIGN3LCAweDEyKTsKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBzY3kgKyB5ICsgY2gsIDB4MTMpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MTQpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGgsIDB4MTUpOworCisJLyogSlBFRyB3aWR0aCAmIGhlaWdodCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MzApOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGgsIDB4MzEpOworCisJLyogWSAmIFVWIGZyYW1lIGJ1ZmZlciBzdHJpZGVzIChpbiBXT1JEKSAqLworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdy8yLCAweDJjKTsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdy80LCAweDJkKTsKKwl9IGVsc2UKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdywgMHgyYyk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJLyogSWYgYWxsIHdlbnQgd2VsbCwgdXBkYXRlIHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkoJmNhbS0+d2luZG93LCAmd2luLCBzaXplb2Yod2luKSk7CisJY2FtLT5od193aWR0aCA9IHc7CisJY2FtLT5od19oZWlnaHQgPSBoOworCisJLyogU2V0dGluZ3MgY2hhbmdlZCwgc28gd2UgY2xlYXIgdGhlIGZyYW1lIGJ1ZmZlcnMgKi8KKwltZW1zZXQoY2FtLT5mcmFtZVswXS5idWZmZXIsIDAsIGNhbS0+bmJ1ZmZlcnMqY2FtLT5mcmFtZVswXS5zaXplKTsKKworCURCRyg0LCAiVGhlIGNhcHR1cmUgYXJlYSBpcyAlZHglZCwgT2Zmc2V0ICh4LHkpPSgldSwldSkiLCAKKwkgICAgd2luLndpZHRoLCB3aW4uaGVpZ2h0LCB3aW4ueCwgd2luLnkpCisKKwlQREJHRygieD0ldSAseT0ldSwgdz0ldSwgaD0ldSwgYXg9JXUsIGF5PSV1LCBzX3dpbi54PSV1LCBzX3dpbi55PSV1LCAiCisJICAgICAgImN3PSV1LCBjaD0ldSwgd2luLng9JXUsIHdpbi55PSV1LCB3aW4ud2lkdGg9JXUsIHdpbi5oZWlnaHQ9JXUiLAorCSAgICAgIHgsIHksIHcsIGgsIGF4LCBheSwgc193aW4ueCwgc193aW4ueSwgY3csIGNoLCB3aW4ueCwgd2luLnksCisJICAgICAgd2luLndpZHRoLCB3aW4uaGVpZ2h0KQorCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCURCRygxLCAiRmFpbGVkIHRvIGNoYW5nZSB0aGUgY2FwdHVyZSBhcmVhIHNpemUiKQorCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgQWRqdXN0IHRoZSBhc2tlZCB2YWx1ZXMgZm9yIHdpbmRvdyB3aWR0aCBhbmQgaGVpZ2h0LgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2KiB3aWR0aCwgdTE2KiBoZWlnaHQpCit7CisJdTE2IG1heHcsIG1heGg7CisKKwlpZiAoKCp3aWR0aCA8IGNhbS0+bWlud2lkdGgpIHx8ICgqaGVpZ2h0IDwgY2FtLT5taW5oZWlnaHQpKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCW1heHcgPSBjYW0tPnVwc2NhbGluZyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgJiYKKwkgICAgICAgdzk5NjhjZl92cHAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9XSURUSCwgY2FtLT5tYXh3aWR0aCkKKwkgICAgICAgICAgICAgICAgICAgOiBjYW0tPm1heHdpZHRoOworCW1heGggPSBjYW0tPnVwc2NhbGluZyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgJiYKKwkgICAgICAgdzk5NjhjZl92cHAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9IRUlHSFQsIGNhbS0+bWF4aGVpZ2h0KQorCSAgICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4aGVpZ2h0OworCisJaWYgKCp3aWR0aCA+IG1heHcpCisJCSp3aWR0aCA9IG1heHc7CisJaWYgKCpoZWlnaHQgPiBtYXhoKQorCQkqaGVpZ2h0ID0gbWF4aDsKKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJKndpZHRoICAmPSB+MTVMOyAvKiBtdWx0aXBsZSBvZiAxNiAqLworCQkqaGVpZ2h0ICY9IH4xNUw7CisJfQorCisJUERCR0coIldpbmRvdyBzaXplIGFkanVzdGVkIHc9JXUsIGg9JXUgIiwgKndpZHRoLCAqaGVpZ2h0KQorCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBJbml0aWFsaXplIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkIGZyYW1lcy4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9pbml0X2ZyYW1lbGlzdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPnJlcXVlc3RlZF9mcmFtZVtpXSA9IE5VTEw7CisJCWNhbS0+ZnJhbWVbaV0ucXVldWVkID0gMDsKKwkJY2FtLT5mcmFtZVtpXS5zdGF0dXMgPSBGX1VOVVNFRDsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBZGQgYSBmcmFtZSBpbiB0aGUgRklGTyBsaXN0IG9mIHJlcXVlc3RlZCBmcmFtZXMuCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9wdXNoX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1OCBmX251bSkKK3sKKwl1OCBmOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmZsaXN0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJZm9yIChmPTA7IGNhbS0+cmVxdWVzdGVkX2ZyYW1lW2ZdICE9IE5VTEw7IGYrKyk7CisJY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbZl0gPSAmY2FtLT5mcmFtZVtmX251bV07CisJY2FtLT5mcmFtZVtmX251bV0ucXVldWVkID0gMTsKKwljYW0tPmZyYW1lW2ZfbnVtXS5zdGF0dXMgPSBGX1VOVVNFRDsgLyogY2xlYXIgdGhlIHN0YXR1cyAqLworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5mbGlzdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCURCRyg2LCAiRnJhbWUgIyV1IHB1c2hlZCBpbnRvIHRoZSBGSUZPIGxpc3QuIFBvc2l0aW9uICV1IiwgZl9udW0sIGYpCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZWFkLCBzdG9yZSBhbmQgcmVtb3ZlIHRoZSBmaXJzdCBwb2ludGVyIGluIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkCisgIGZyYW1lcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIAordzk5NjhjZl9wb3BfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqKiBmcmFtZXApCit7CisJdTggaTsKKworCXNwaW5fbG9jaygmY2FtLT5mbGlzdF9sb2NrKTsKKworCSpmcmFtZXAgPSBjYW0tPnJlcXVlc3RlZF9mcmFtZVswXTsKKworCS8qIFNoaWZ0IHRoZSBsaXN0IG9mIHBvaW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnMtMTsgaSsrKQorCQljYW0tPnJlcXVlc3RlZF9mcmFtZVtpXSA9IGNhbS0+cmVxdWVzdGVkX2ZyYW1lW2krMV07CisJY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbaV0gPSBOVUxMOworCisJc3Bpbl91bmxvY2soJmNhbS0+Zmxpc3RfbG9jayk7CisKKwlEQkcoNiwiUG9wcGVkIGZyYW1lICMlZCBmcm9tIHRoZSBsaXN0IiwgKCpmcmFtZXApLT5udW1iZXIpCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIaWdoLWxldmVsIHZpZGVvIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lIG9uIGdyYWJiZWQgZnJhbWVzLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnIpCit7CisJdm9pZCAqcEluID0gZnItPmJ1ZmZlciwgKnBPdXQgPSBjYW0tPmZyYW1lX3ZwcC5idWZmZXIsICp0bXA7CisJdTE2IHcgPSBjYW0tPndpbmRvdy53aWR0aCwKKwkgICAgaCA9IGNhbS0+d2luZG93LmhlaWdodCwKKwkgICAgZCA9IGNhbS0+cGljdHVyZS5kZXB0aCwKKwkgICAgZm10ID0gY2FtLT5waWN0dXJlLnBhbGV0dGUsCisJICAgIHJnYiA9IGNhbS0+Zm9yY2VfcmdiLAorCSAgICBod193ID0gY2FtLT5od193aWR0aCwKKwkgICAgaHdfaCA9IGNhbS0+aHdfaGVpZ2h0LAorCSAgICBod19kID0gY2FtLT5od19kZXB0aDsKKwlpbnQgZXJyID0gMDsKKworCSNkZWZpbmUgX1BTV0FQKHBJbiwgcE91dCkge3RtcCA9IChwSW4pOyAocEluKSA9IChwT3V0KTsgKHBPdXQpID0gdG1wO30KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJbWVtY3B5KHBPdXQsIHBJbiwgZnItPmxlbmd0aCk7CisJCV9QU1dBUChwSW4sIHBPdXQpCisJCWVyciA9IHc5OTY4Y2ZfdnBwLT5kZWNvZGUocEluLCBmci0+bGVuZ3RoLCBod193LCBod19oLCBwT3V0KTsKKwkJUERCR0coIkNvbXByZXNzZWQgZnJhbWUgbGVuZ3RoOiAlbHUiLCh1bnNpZ25lZCBsb25nKWZyLT5sZW5ndGgpCisJCWZyLT5sZW5ndGggPSAoaHdfdypod19oKmh3X2QpLzg7CisJCV9QU1dBUChwSW4sIHBPdXQpCisJCWlmIChlcnIpIHsKKwkJCURCRyg0LCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGZyYW1lOiAiCisJCQkgICAgICAgIiVzIiwgc3ltYm9saWMoZGVjb2Rlcl9lcnJsaXN0LCBlcnIpKQorCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCisJCQlEQkcoNiwgIkZyYW1lIGRlY29kZWQiKQorCX0KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1NXQVBfWVVWX0JZVEVTKSB7CisJCXc5OTY4Y2ZfdnBwLT5zd2FwX3l1dmJ5dGVzKHBJbiwgZnItPmxlbmd0aCk7CisJCURCRyg2LCAiT3JpZ2luYWwgVVlWWSBjb21wb25lbnQgb3JkZXJpbmcgY2hhbmdlZCIpCisJfQorCisJaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkgeworCQl3OTk2OGNmX3ZwcC0+c2NhbGVfdXAocEluLCBwT3V0LCBod193LCBod19oLCBod19kLCB3LCBoKTsKKwkJZnItPmxlbmd0aCA9ICh3KmgqaHdfZCkvODsKKwkJX1BTV0FQKHBJbiwgcE91dCkKKwkJREJHKDYsICJWZXJ0aWNhbCB1cC1zY2FsaW5nIGRvbmU6ICV1LCV1LCV1YnBwLT4ldSwldSIsCisJCSAgICBod193LCBod19oLCBod19kLCB3LCBoKQorCX0KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1VZVllfVE9fUkdCWCkgeworCQl3OTk2OGNmX3ZwcC0+dXl2eV90b19yZ2J4KHBJbiwgZnItPmxlbmd0aCwgcE91dCwgZm10LCByZ2IpOworCQlmci0+bGVuZ3RoID0gKHcqaCpkKS84OworCQlfUFNXQVAocEluLCBwT3V0KQorCQlEQkcoNiwgIlVZVlktMTZiaXQgdG8gJXMgY29udmVyc2lvbiBkb25lIiwgCisJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBmbXQpKQorCX0KKworCWlmIChwT3V0ID09IGZyLT5idWZmZXIpCisJCW1lbWNweShmci0+YnVmZmVyLCBjYW0tPmZyYW1lX3ZwcC5idWZmZXIsIGZyLT5sZW5ndGgpOworCisJcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW1hZ2Ugc2Vuc29yIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IAordzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIGludCBjaWQsIGludCB2YWwpCit7CisJc3RydWN0IG92Y2FtY2hpcF9jb250cm9sIGN0bDsKKwlpbnQgZXJyOworCisJY3RsLmlkID0gY2lkOworCWN0bC52YWx1ZSA9IHZhbDsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfU19DVFJMLCAmY3RsKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCAKK3c5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBpbnQgY2lkLCBpbnQqIHZhbCkKK3sKKwlzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgY3RsOworCWludCBlcnI7CisKKwljdGwuaWQgPSBjaWQ7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9jbWQoY2FtLCBPVkNBTUNISVBfQ01EX0dfQ1RSTCwgJmN0bCk7CisJaWYgKCFlcnIpCisJCSp2YWwgPSBjdGwudmFsdWU7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQKK3c5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCogYXJnKQoreworCXN0cnVjdCBpMmNfY2xpZW50KiBjID0gY2FtLT5zZW5zb3JfY2xpZW50OworCWludCByYyA9IDA7CisKKwlpZiAoIWMgfHwgIWMtPmRyaXZlciB8fCAhYy0+ZHJpdmVyLT5jb21tYW5kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gYy0+ZHJpdmVyLT5jb21tYW5kKGMsIGNtZCwgYXJnKTsKKwkvKiBUaGUgSTJDIGRyaXZlciByZXR1cm5zIC1FUEVSTSBvbiBub24tc3VwcG9ydGVkIGNvbnRyb2xzICovCisJcmV0dXJuIChyYyA8IDAgJiYgcmMgIT0gLUVQRVJNKSA/IHJjIDogMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVwZGF0ZSBzb21lIHNldHRpbmdzIG9mIHRoZSBpbWFnZSBzZW5zb3IuCisgIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9zZXR0aW5ncyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCS8qIEF1dG8gYnJpZ2h0bmVzcyAqLworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hULCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmF1dG9fYnJ0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQXV0byBleHBvc3VyZSAqLworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9BVVRPRVhQLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmF1dG9fZXhwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQmFuZGluZyBmaWx0ZXIgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQkFOREZJTFQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YmFuZGZpbHQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBMaWdodCBmcmVxdWVuY3kgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfRlJFUSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmxpZ2h0ZnJlcSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEJhY2sgbGlnaHQgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hULAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YmFja2xpZ2h0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogTWlycm9yICovCisJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX01JUlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPm1pcnJvcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgR2V0IHNvbWUgY3VycmVudCBwaWN0dXJlIHNldHRpbmdzIGZyb20gdGhlIGltYWdlIHNlbnNvciBhbmQgdXBkYXRlIHRoZQorICBpbnRlcm5hbCAncGljdHVyZScgc3RydWN0dXJlIG9mIHRoZSBjYW1lcmEuCisgIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIsIHY7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQ09OVCwgJnYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FtLT5waWN0dXJlLmNvbnRyYXN0ID0gdjsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsICZ2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gdjsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9TQVQsICZ2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhbS0+cGljdHVyZS5jb2xvdXIgPSB2OworCisJZXJyID0gdzk5NjhjZl9zZW5zb3JfZ2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0hVRSwgJnYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FtLT5waWN0dXJlLmh1ZSA9IHY7CisKKwlEQkcoNSwgIkdvdCBwaWN0dXJlIHNldHRpbmdzIGZyb20gdGhlIGltYWdlIHNlbnNvciIpCisKKwlQREJHRygiQnJpZ2h0bmVzcywgY29udHJhc3QsIGh1ZSwgY29sb3VyLCB3aGl0ZW5lc3MgYXJlICIKKwkgICAgICAiJXUsJXUsJXUsJXUsJXUiLCBjYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcyxjYW0tPnBpY3R1cmUuY29udHJhc3QsCisJICAgICAgY2FtLT5waWN0dXJlLmh1ZSwgY2FtLT5waWN0dXJlLmNvbG91ciwgY2FtLT5waWN0dXJlLndoaXRlbmVzcykKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVXBkYXRlIHBpY3R1cmUgc2V0dGluZ3Mgb2YgdGhlIGltYWdlIHNlbnNvci4KKyAgUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3c5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkKKwkgICAgfHwgcGljdC5jb250cmFzdCAhPSBjYW0tPnBpY3R1cmUuY29udHJhc3QpIHsKKwkJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0NPTlQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY3QuY29udHJhc3QpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCQlEQkcoNCwgIkNvbnRyYXN0IGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuY29udHJhc3QsIHBpY3QuY29udHJhc3QpCisJCWNhbS0+cGljdHVyZS5jb250cmFzdCA9IHBpY3QuY29udHJhc3Q7CisJfQorCisJaWYgKCgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKSB8fCAKKwkgICAgcGljdC5icmlnaHRuZXNzICE9IGNhbS0+cGljdHVyZS5icmlnaHRuZXNzKSAmJiAoIWNhbS0+YXV0b19icnQpKSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0LmJyaWdodG5lc3MpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCQlEQkcoNCwgIkJyaWdodG5lc3MgY2hhbmdlZCBmcm9tICV1IHRvICV1IiwKKwkJICAgIGNhbS0+cGljdHVyZS5icmlnaHRuZXNzLCBwaWN0LmJyaWdodG5lc3MpCisJCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gcGljdC5icmlnaHRuZXNzOworCX0KKworCWlmICgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKSB8fCBwaWN0LmNvbG91ciAhPSBjYW0tPnBpY3R1cmUuY29sb3VyKSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9TQVQsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0LmNvbG91cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJCURCRyg0LCAiQ29sb3VyIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuY29sb3VyLCBwaWN0LmNvbG91cikKKwkJY2FtLT5waWN0dXJlLmNvbG91ciA9IHBpY3QuY29sb3VyOworCX0KKworCWlmICgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKSB8fCBwaWN0Lmh1ZSAhPSBjYW0tPnBpY3R1cmUuaHVlKSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9IVUUsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0Lmh1ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJCURCRyg0LCAiSHVlIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuaHVlLCBwaWN0Lmh1ZSkKKwkJY2FtLT5waWN0dXJlLmh1ZSA9IHBpY3QuaHVlOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCURCRyg0LCAiRmFpbGVkIHRvIGNoYW5nZSBzZW5zb3IgcGljdHVyZSBzZXR0aW5nIikKKwlyZXR1cm4gZXJyOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENhbWVyYSBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgc3VwcG9ydGVkIGltYWdlIHNlbnNvciBpcyBkZXRlY3RlZC4KKyAgUmV0dXJuIDAgaWYgdGhlIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FtLT5tb25vY2hyb21lKSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfUV9TVUJUWVBFLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FtLT5zZW5zb3IpKSkKKwkJZ290byBlcnJvcjsKKworCS8qIE5PVEU6IE1ha2Ugc3VyZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhIG11bHRpcGxlIG9mIDE2ICovCisJc3dpdGNoIChjYW0tPnNlbnNvcl9jbGllbnQtPmFkZHIpIHsKKwkJY2FzZSBPVjZ4eDBfU0lEOgorCQkJY2FtLT5tYXh3aWR0aCA9IDM1MjsKKwkJCWNhbS0+bWF4aGVpZ2h0ID0gMjg4OworCQkJY2FtLT5taW53aWR0aCA9IDY0OworCQkJY2FtLT5taW5oZWlnaHQgPSA0ODsKKwkJCWJyZWFrOworCQljYXNlIE9WN3h4MF9TSUQ6CisJCQljYW0tPm1heHdpZHRoID0gNjQwOworCQkJY2FtLT5tYXhoZWlnaHQgPSA0ODA7CisJCQljYW0tPm1pbndpZHRoID0gNjQ7CisJCQljYW0tPm1pbmhlaWdodCA9IDQ4OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkcoMSwgIk5vdCBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIGZvciAlcyIsCisJCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGVzZSB2YWx1ZXMgZGVwZW5kIG9uIHRoZSBvbmVzIGluIHRoZSBvdnh4eDAuYyBzb3VyY2VzICovCisJc3dpdGNoIChjYW0tPnNlbnNvcikgeworCQljYXNlIENDX09WNzYyMDoKKwkJCWNhbS0+c3RhcnRfY3JvcHggPSAyODc7CisJCQljYW0tPnN0YXJ0X2Nyb3B5ID0gMzU7CisJCQkvKiBTZWVtcyB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgaW1hZ2Ugc2Vuc29yICovCisJCQljYW0tPnZzX3BvbGFyaXR5ID0gMTsKKwkJCWNhbS0+aHNfcG9sYXJpdHkgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljYW0tPnN0YXJ0X2Nyb3B4ID0gMzIwOworCQkJY2FtLT5zdGFydF9jcm9weSA9IDM1OworCQkJY2FtLT52c19wb2xhcml0eSA9IDE7CisJCQljYW0tPmhzX3BvbGFyaXR5ID0gMDsKKwl9CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9zZXR0aW5ncyhjYW0pKSkKKwkJZ290byBlcnJvcjsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoY2FtLCBjYW0tPnBpY3R1cmUpKSkKKwkJZ290byBlcnJvcjsKKworCWNhbS0+c2Vuc29yX2luaXRpYWxpemVkID0gMTsKKworCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGluaXRpYWxpemVkIiwgc3ltYm9saWMoc2VubGlzdCwgY2FtLT5zZW5zb3IpKQorCXJldHVybiAwOworCitlcnJvcjoKKwljYW0tPnNlbnNvcl9pbml0aWFsaXplZCA9IDA7CisJY2FtLT5zZW5zb3IgPSBDQ19VTktOT1dOOworCURCRygxLCAiSW1hZ2Ugc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCBmb3IgJXMgKC9kZXYvdmlkZW8lZCkuICIKKwkgICAgICAgIlRyeSB0byBkZXRhY2ggYW5kIGF0dGFjaCB0aGlzIGRldmljZSBhZ2FpbiIsCisJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bWlub3IpCisJcmV0dXJuIGVycjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZpbGwgc29tZSBiYXNpYyBmaWVsZHMgaW4gdGhlIG1haW4gZGV2aWNlIGRhdGEgc3RydWN0dXJlLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIG9uIHc5OTY4Y2ZfdXNiX3Byb2JlKCkgZm9yIGVhY2ggcmVjb2duaXplZCAKKyAgY2FtZXJhLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAordzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdzk5NjhjZl9tb2RlbF9pZCBtb2RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV2X25yKQoreworCWluaXRfTVVURVgoJmNhbS0+ZmlsZW9wX3NlbSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT5vcGVuKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FtLT51cmJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhbS0+Zmxpc3RfbG9jayk7CisKKwljYW0tPnVzZXJzID0gMDsKKwljYW0tPmRpc2Nvbm5lY3RlZCA9IDA7CisJY2FtLT5pZCA9IG1vZF9pZDsKKwljYW0tPnNlbnNvciA9IENDX1VOS05PV047CisJY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQgPSAwOworCisJLyogQ2FsY3VsYXRlIHRoZSBhbHRlcm5hdGUgc2V0dGluZyBudW1iZXIgKGZyb20gMSB0byAxNikKKwkgICBhY2NvcmRpbmcgdG8gdGhlICdwYWNrZXRfc2l6ZScgbW9kdWxlIHBhcmFtZXRlciAqLworCWlmIChwYWNrZXRfc2l6ZVtkZXZfbnJdIDwgVzk5NjhDRl9NSU5fUEFDS0VUX1NJWkUpCisJCXBhY2tldF9zaXplW2Rldl9ucl0gPSBXOTk2OENGX01JTl9QQUNLRVRfU0laRTsKKwlmb3IgKGNhbS0+YWx0c2V0dGluZyA9IDE7CisJICAgICBwYWNrZXRfc2l6ZVtkZXZfbnJdIDwgd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdOworCSAgICAgY2FtLT5hbHRzZXR0aW5nKyspOworCisJY2FtLT5tYXhfYnVmZmVycyA9IChtYXhfYnVmZmVyc1tkZXZfbnJdIDwgMiB8fCAKKwkgICAgICAgICAgICAgICAgICAgIG1heF9idWZmZXJzW2Rldl9ucl0gPiBXOTk2OENGX01BWF9CVUZGRVJTKQorCSAgICAgICAgICAgICAgICAgICA/IFc5OTY4Q0ZfQlVGRkVSUyA6ICh1OCltYXhfYnVmZmVyc1tkZXZfbnJdOworCisJY2FtLT5kb3VibGVfYnVmZmVyID0gKGRvdWJsZV9idWZmZXJbZGV2X25yXSA9PSAwIHx8IAorCSAgICAgICAgICAgICAgICAgICAgICBkb3VibGVfYnVmZmVyW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgICAgICA/ICh1OClkb3VibGVfYnVmZmVyW2Rldl9ucl06Vzk5NjhDRl9ET1VCTEVfQlVGRkVSOworCisJY2FtLT5jbGFtcGluZyA9IChjbGFtcGluZ1tkZXZfbnJdID09IDAgfHwgY2xhbXBpbmdbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICA/ICh1OCljbGFtcGluZ1tkZXZfbnJdIDogVzk5NjhDRl9DTEFNUElORzsKKwkKKwljYW0tPmZpbHRlcl90eXBlID0gKGZpbHRlcl90eXBlW2Rldl9ucl0gPT0gMCB8fAorCSAgICAgICAgICAgICAgICAgICAgZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAxIHx8CisJICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfdHlwZVtkZXZfbnJdID09IDIpCisJICAgICAgICAgICAgICAgICAgID8gKHU4KWZpbHRlcl90eXBlW2Rldl9ucl0gOiBXOTk2OENGX0ZJTFRFUl9UWVBFOworCisJY2FtLT5jYXB0dXJlID0gMTsKKworCWNhbS0+bGFyZ2V2aWV3ID0gKGxhcmdldmlld1tkZXZfbnJdID09IDAgfHwgbGFyZ2V2aWV3W2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgID8gKHU4KWxhcmdldmlld1tkZXZfbnJdIDogVzk5NjhDRl9MQVJHRVZJRVc7CisKKwljYW0tPmRlY29tcHJlc3Npb24gPSAoZGVjb21wcmVzc2lvbltkZXZfbnJdID09IDAgfHwgCisJICAgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAxIHx8CisJICAgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAyKQorCSAgICAgICAgICAgICAgICAgICAgID8gKHU4KWRlY29tcHJlc3Npb25bZGV2X25yXTpXOTk2OENGX0RFQ09NUFJFU1NJT047CisKKwljYW0tPnVwc2NhbGluZyA9ICh1cHNjYWxpbmdbZGV2X25yXSA9PSAwIHx8IAorCSAgICAgICAgICAgICAgICAgIHVwc2NhbGluZ1tkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICA/ICh1OCl1cHNjYWxpbmdbZGV2X25yXSA6IFc5OTY4Q0ZfVVBTQ0FMSU5HOworCisJY2FtLT5hdXRvX2JydCA9IChhdXRvYnJpZ2h0W2Rldl9ucl0gPT0gMCB8fCBhdXRvYnJpZ2h0W2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgPyAodTgpYXV0b2JyaWdodFtkZXZfbnJdIDogVzk5NjhDRl9BVVRPQlJJR0hUOworCisJY2FtLT5hdXRvX2V4cCA9IChhdXRvZXhwW2Rldl9ucl0gPT0gMCB8fCBhdXRvZXhwW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgPyAodTgpYXV0b2V4cFtkZXZfbnJdIDogVzk5NjhDRl9BVVRPRVhQOworCisJY2FtLT5saWdodGZyZXEgPSAobGlnaHRmcmVxW2Rldl9ucl0gPT0gNTAgfHwgbGlnaHRmcmVxW2Rldl9ucl0gPT0gNjApCisJICAgICAgICAgICAgICAgICA/ICh1OClsaWdodGZyZXFbZGV2X25yXSA6IFc5OTY4Q0ZfTElHSFRGUkVROworCisJY2FtLT5iYW5kZmlsdCA9IChiYW5kaW5nZmlsdGVyW2Rldl9ucl0gPT0gMCB8fCAKKwkgICAgICAgICAgICAgICAgIGJhbmRpbmdmaWx0ZXJbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICA/ICh1OCliYW5kaW5nZmlsdGVyW2Rldl9ucl0gOiBXOTk2OENGX0JBTkRJTkdGSUxURVI7CisKKwljYW0tPmJhY2tsaWdodCA9IChiYWNrbGlnaHRbZGV2X25yXSA9PSAwIHx8IGJhY2tsaWdodFtkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICA/ICh1OCliYWNrbGlnaHRbZGV2X25yXSA6IFc5OTY4Q0ZfQkFDS0xJR0hUOworCisJY2FtLT5jbG9ja2RpdiA9IChjbG9ja2RpdltkZXZfbnJdID09IC0xIHx8IGNsb2NrZGl2W2Rldl9ucl0gPj0gMCkKKwkgICAgICAgICAgICAgICAgPyAoczgpY2xvY2tkaXZbZGV2X25yXSA6IFc5OTY4Q0ZfQ0xPQ0tESVY7CisKKwljYW0tPm1pcnJvciA9IChtaXJyb3JbZGV2X25yXSA9PSAwIHx8IG1pcnJvcltkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICA/ICh1OCltaXJyb3JbZGV2X25yXSA6IFc5OTY4Q0ZfTUlSUk9SOworCisJY2FtLT5tb25vY2hyb21lID0gKG1vbm9jaHJvbWVbZGV2X25yXSA9PSAwIHx8IG1vbm9jaHJvbWVbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICAgID8gbW9ub2Nocm9tZVtkZXZfbnJdIDogVzk5NjhDRl9NT05PQ0hST01FOworCisJY2FtLT5waWN0dXJlLmJyaWdodG5lc3MgPSAodTE2KWJyaWdodG5lc3NbZGV2X25yXTsKKwljYW0tPnBpY3R1cmUuaHVlID0gKHUxNilodWVbZGV2X25yXTsKKwljYW0tPnBpY3R1cmUuY29sb3VyID0gKHUxNiljb2xvdXJbZGV2X25yXTsKKwljYW0tPnBpY3R1cmUuY29udHJhc3QgPSAodTE2KWNvbnRyYXN0W2Rldl9ucl07CisJY2FtLT5waWN0dXJlLndoaXRlbmVzcyA9ICh1MTYpd2hpdGVuZXNzW2Rldl9ucl07CisJaWYgKHc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZSgodTE2KWZvcmNlX3BhbGV0dGVbZGV2X25yXSkpIHsKKwkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSAodTE2KWZvcmNlX3BhbGV0dGVbZGV2X25yXTsKKwkJY2FtLT5mb3JjZV9wYWxldHRlID0gMTsKKwl9IGVsc2UgeworCQljYW0tPmZvcmNlX3BhbGV0dGUgPSAwOworCQlpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApCisJCQljYW0tPnBpY3R1cmUucGFsZXR0ZSA9IFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT0ZGOworCQllbHNlIGlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMSkKKwkJCWNhbS0+cGljdHVyZS5wYWxldHRlID0gVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9GT1JDRTsKKwkJZWxzZQorCQkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSBXOTk2OENGX1BBTEVUVEVfREVDT01QX09OOworCX0KKwljYW0tPnBpY3R1cmUuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKGNhbS0+cGljdHVyZS5wYWxldHRlKTsKKworCWNhbS0+Zm9yY2VfcmdiID0gKGZvcmNlX3JnYltkZXZfbnJdID09IDAgfHwgZm9yY2VfcmdiW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgID8gKHU4KWZvcmNlX3JnYltkZXZfbnJdIDogVzk5NjhDRl9GT1JDRV9SR0I7CisKKwljYW0tPndpbmRvdy54ID0gMDsKKwljYW0tPndpbmRvdy55ID0gMDsKKwljYW0tPndpbmRvdy53aWR0aCA9IFc5OTY4Q0ZfV0lEVEg7CisJY2FtLT53aW5kb3cuaGVpZ2h0ID0gVzk5NjhDRl9IRUlHSFQ7CisJY2FtLT53aW5kb3cuY2hyb21ha2V5ID0gMDsKKwljYW0tPndpbmRvdy5jbGlwY291bnQgPSAwOworCWNhbS0+d2luZG93LmZsYWdzID0gMDsKKworCURCRygzLCAiJXMgY29uZmlndXJlZCB3aXRoIHNldHRpbmdzICMldToiLAorCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSwgZGV2X25yKQorCQorCURCRygzLCAiLSBEYXRhIHBhY2tldCBzaXplIGZvciBVU0IgaXNvY2hybm91cyB0cmFuc2ZlcjogJXUgYnl0ZXMiLAorCSAgICB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV0pCisJCisJREJHKDMsICItIE51bWJlciBvZiByZXF1ZXN0ZWQgdmlkZW8gZnJhbWUgYnVmZmVyczogJXUiLAorCSAgICBjYW0tPm1heF9idWZmZXJzKQorCisJaWYgKGNhbS0+ZG91YmxlX2J1ZmZlcikKKwkJREJHKDMsICItIEhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgZW5hYmxlZCIpCisJZWxzZSAKKwkJREJHKDMsICItIEhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMCkKKwkJREJHKDMsICItIFZpZGVvIGZpbHRlcmluZyBkaXNhYmxlZCIpCisJZWxzZSBpZiAoY2FtLT5maWx0ZXJfdHlwZSA9PSAxKQorCQlEQkcoMywgIi0gVmlkZW8gZmlsdGVyaW5nIGVuYWJsZWQ6IHR5cGUgMS0yLTEiKQorCWVsc2UgaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMikKKwkJREJHKDMsICItIFZpZGVvIGZpbHRlcmluZyBlbmFibGVkOiB0eXBlIDItMy02LTMtMiIpCisKKwlpZiAoY2FtLT5jbGFtcGluZykKKwkJREJHKDMsICItIFZpZGVvIGRhdGEgY2xhbXBpbmcgKENDSVItNjAxIGZvcm1hdCkgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gVmlkZW8gZGF0YSBjbGFtcGluZyAoQ0NJUi02MDEgZm9ybWF0KSBkaXNhYmxlZCIpCisKKwlpZiAoY2FtLT5sYXJnZXZpZXcpCisJCURCRygzLCAiLSBMYXJnZSB2aWV3IGVuYWJsZWQiKQorCWVsc2UKKwkJREJHKDMsICItIExhcmdlIHZpZXcgZGlzYWJsZWQiKQorCisJaWYgKChjYW0tPmRlY29tcHJlc3Npb24pID09IDAgJiYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpKQorCQlEQkcoMywgIi0gRGVjb21wcmVzc2lvbiBkaXNhYmxlZCIpCisJZWxzZSBpZiAoKGNhbS0+ZGVjb21wcmVzc2lvbikgPT0gMSAmJiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkpCisJCURCRygzLCAiLSBEZWNvbXByZXNzaW9uIGZvcmNlZCIpCisJZWxzZSBpZiAoKGNhbS0+ZGVjb21wcmVzc2lvbikgPT0gMiAmJiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkpCisJCURCRygzLCAiLSBEZWNvbXByZXNzaW9uIGFsbG93ZWQiKQorCisJaWYgKGNhbS0+dXBzY2FsaW5nKQorCQlEQkcoMywgIi0gU29mdHdhcmUgaW1hZ2Ugc2NhbGluZyBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBTb2Z0d2FyZSBpbWFnZSBzY2FsaW5nIGRpc2FibGVkIikKKworCWlmIChjYW0tPmZvcmNlX3BhbGV0dGUpCisJCURCRygzLCAiLSBJbWFnZSBwYWxldHRlIGZvcmNlZCB0byAlcyIsCisJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBjYW0tPnBpY3R1cmUucGFsZXR0ZSkpCisKKwlpZiAoY2FtLT5mb3JjZV9yZ2IpCisJCURCRygzLCAiLSBSR0IgY29tcG9uZW50IG9yZGVyaW5nIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIEJHUiIpCisKKwlpZiAoY2FtLT5hdXRvX2JydCkKKwkJREJHKDMsICItIEF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBBdXRvIGJyaWdodG5lc3MgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+YXV0b19leHApCisJCURCRygzLCAiLSBBdXRvIGV4cG9zdXJlIGVuYWJsZWQiKQorCWVsc2UKKwkJREJHKDMsICItIEF1dG8gZXhwb3N1cmUgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+YmFja2xpZ2h0KQorCQlEQkcoMywgIi0gQmFja2xpZ2h0IGV4cG9zdXJlIGFsZ29yaXRobSBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBCYWNrbGlnaHQgZXhwb3N1cmUgYWxnb3JpdGhtIGRpc2FibGVkIikKKworCWlmIChjYW0tPm1pcnJvcikKKwkJREJHKDMsICItIE1pcnJvciBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBNaXJyb3IgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+YmFuZGZpbHQpCisJCURCRygzLCAiLSBCYW5kaW5nIGZpbHRlciBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBCYW5kaW5nIGZpbHRlciBkaXNhYmxlZCIpCisKKwlEQkcoMywgIi0gUG93ZXIgbGlnaHRpbmcgZnJlcXVlbmN5OiAldSIsIGNhbS0+bGlnaHRmcmVxKQorCisJaWYgKGNhbS0+Y2xvY2tkaXYgPT0gLTEpCisJCURCRygzLCAiLSBBdXRvbWF0aWMgY2xvY2sgZGl2aXNvciBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBDbG9jayBkaXZpc29yOiAlZCIsIGNhbS0+Y2xvY2tkaXYpCisKKwlpZiAoY2FtLT5tb25vY2hyb21lKQorCQlEQkcoMywgIi0gSW1hZ2Ugc2Vuc29yIHVzZWQgYXMgbW9ub2Nocm9tZSIpCisJZWxzZQorCQlEQkcoMywgIi0gSW1hZ2Ugc2Vuc29yIG5vdCB1c2VkIGFzIG1vbm9jaHJvbWUiKQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSWYgdGhlIHZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgaXMgbm90IGxvYWRlZCwgc29tZSBwYXJhbWV0ZXJzCisgIG11c3QgYmUgb3ZlcnJpZGRlbi4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9hZGp1c3RfY29uZmlndXJhdGlvbihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpZiAoIXc5OTY4Y2ZfdnBwKSB7CisJCWlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMSkgeworCQkJY2FtLT5kZWNvbXByZXNzaW9uID0gMjsKKwkJCURCRygyLCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSBub3QgZm91bmQ6ICIKKwkJCSAgICAgICAiJ2RlY29tcHJlc3Npb24nIHBhcmFtZXRlciBmb3JjZWQgdG8gMiIpCisJCX0KKwkJaWYgKGNhbS0+dXBzY2FsaW5nKSB7CisJCQljYW0tPnVwc2NhbGluZyA9IDA7CisJCQlEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgbm90IGZvdW5kOiAiCisJCQkgICAgICAgIid1cHNjYWxpbmcnIHBhcmFtZXRlciBmb3JjZWQgdG8gMCIpCisJCX0KKwkJaWYgKGNhbS0+cGljdHVyZS5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfVVlWWSkgeworCQkJY2FtLT5mb3JjZV9wYWxldHRlID0gMDsKKwkJCURCRygyLCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSBub3QgZm91bmQ6ICIKKwkJCSAgICAgICAiJ2ZvcmNlX3BhbGV0dGUnIHBhcmFtZXRlciBmb3JjZWQgdG8gMCIpCisJCX0KKwkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1VZVlk7CisJCWNhbS0+cGljdHVyZS5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgoY2FtLT5waWN0dXJlLnBhbGV0dGUpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJlbGVhc2UgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBkcml2ZXIuCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGRpc2Nvbm5lY3QgCisgIChvciBvbiBjbG9zZSBpZiBkZWFsbG9jYXRpb24gaGFzIGJlZW4gZGVmZXJyZWQpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJZG93bigmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisKKwlEQkcoMiwgIlY0TCBkZXZpY2UgZGVyZWdpc3RlcmVkOiAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpCisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CisJbGlzdF9kZWwoJmNhbS0+djRsbGlzdCk7CisJaTJjX2RlbF9hZGFwdGVyKCZjYW0tPmkyY19hZGFwdGVyKTsKKwl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CisJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CisJa2ZyZWUoY2FtLT5kYXRhX2J1ZmZlcik7CisKKwl1cCgmdzk5NjhjZl9kZXZsaXN0X3NlbSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHc5OTY4Y2Zfb3BlbihzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCkKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKKwlpbnQgZXJyOworCisJLyogVGhpcyB0aGUgb25seSBzYWZlIHdheSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIGRpc2Nvbm5lY3QgKi8KKwlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOworCisJaWYgKGNhbS0+c2Vuc29yID09IENDX1VOS05PV04pIHsKKwkJREJHKDIsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGhhcyBiZWVuIGRldGVjdGVkIGJ5IHRoZSAiCisJCSAgICAgICAiJ292Y2FtY2hpcCcgbW9kdWxlIGZvciB0aGUgJXMgKC9kZXYvdmlkZW8lZCkuIE1ha2UgIgorCQkgICAgICAgInN1cmUgaXQgaXMgbG9hZGVkICpiZWZvcmUqIChyZSljb25uZWN0aW5nIHRoZSBjYW1lcmEuIiwKKwkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCXVwKCZjYW0tPmRldl9zZW0pOworCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT51c2VycykgeworCQlEQkcoMiwgIiVzICgvZGV2L3ZpZGVvJWQpIGhhcyBiZWVuIGFscmVhZHkgb2NjdXBpZWQgYnkgJyVzJyIsCisJCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSxjYW0tPnY0bGRldi0+bWlub3IsY2FtLT5jb21tYW5kKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKXx8KGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKKwkJCXVwKCZjYW0tPmRldl9zZW0pOworCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKwkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJCX0KKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2FtLT5vcGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNhbS0+dXNlcnMpOworCQlpZiAoZXJyKSB7CisJCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkb3duKCZjYW0tPmRldl9zZW0pOworCX0KKworCURCRyg1LCAiT3BlbmluZyAnJXMnLCAvZGV2L3ZpZGVvJWQgLi4uIiwKKwkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5taW5vcikKKworCWNhbS0+c3RyZWFtaW5nID0gMDsKKwljYW0tPm1pc2NvbmZpZ3VyZWQgPSAwOworCisJaWYgKCF3OTk2OGNmX3ZwcCkKKwkJaWYgKChlcnIgPSB3OTk2OGNmX3ZwcG1vZF9kZXRlY3QoY2FtKSkpCisJCQlnb3RvIG91dDsKKworCWlmICgoZXJyID0gdzk5NjhjZl9hbGxvY2F0ZV9tZW1vcnkoY2FtKSkpCisJCWdvdG8gZGVhbGxvY2F0ZV9tZW1vcnk7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2ZfaW5pdF9jaGlwKGNhbSkpKQorCQlnb3RvIGRlYWxsb2NhdGVfbWVtb3J5OworCisJaWYgKChlcnIgPSB3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpKQorCQlnb3RvIGRlYWxsb2NhdGVfbWVtb3J5OworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gY2FtOworCisJY2FtLT51c2VycysrOworCXN0cmNweShjYW0tPmNvbW1hbmQsIGN1cnJlbnQtPmNvbW0pOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X3F1ZXVlKTsKKworCURCRyg1LCAiVmlkZW8gZGV2aWNlIGlzIG9wZW4iKQorCisJdXAoJmNhbS0+ZGV2X3NlbSk7CisJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKworCXJldHVybiAwOworCitkZWFsbG9jYXRlX21lbW9yeToKKwl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CitvdXQ6CisJREJHKDIsICJGYWlsZWQgdG8gb3BlbiB0aGUgdmlkZW8gZGV2aWNlIikKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3JlbGVhc2Uoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHApCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisKKwljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCWRvd24oJmNhbS0+ZGV2X3NlbSk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLworCisJdzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSk7CisKKwl3OTk2OGNmX3ZwcG1vZF9yZWxlYXNlKGNhbSk7CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOworCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJa2ZyZWUoY2FtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FtLT51c2Vycy0tOworCXc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoY2FtKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+b3BlbiwgMSk7CisKKwlEQkcoNSwgIlZpZGVvIGRldmljZSBjbG9zZWQiKQorCXVwKCZjYW0tPmRldl9zZW0pOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzc2l6ZV90Cit3OTk2OGNmX3JlYWQoc3RydWN0IGZpbGUqIGZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCogZl9wb3MpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnI7CisJaW50IGVyciA9IDA7CisKKwljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJcmV0dXJuIC1FV09VTERCTE9DSzsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJREJHKDIsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+bWlzY29uZmlndXJlZCkgeworCQlEQkcoMiwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghY2FtLT5mcmFtZVswXS5xdWV1ZWQpCisJCXc5OTY4Y2ZfcHVzaF9mcmFtZShjYW0sIDApOworCisJaWYgKCFjYW0tPmZyYW1lWzFdLnF1ZXVlZCkKKwkJdzk5NjhjZl9wdXNoX2ZyYW1lKGNhbSwgMSk7CisKKwllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmZyYW1lWzBdLnN0YXR1cyA9PSBGX1JFQURZIHx8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZnJhbWVbMV0uc3RhdHVzID09IEZfUkVBRFkgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQpOworCWlmIChlcnIpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiBlcnI7CisJfQorCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgeworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZnIgPSAoY2FtLT5mcmFtZVswXS5zdGF0dXMgPT0gRl9SRUFEWSkgPyAmY2FtLT5mcmFtZVswXTomY2FtLT5mcmFtZVsxXTsKKworCWlmICh3OTk2OGNmX3ZwcCkKKwkJdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShjYW0sIGZyKTsKKworCWlmIChjb3VudCA+IGZyLT5sZW5ndGgpCisJCWNvdW50ID0gZnItPmxlbmd0aDsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBmci0+YnVmZmVyLCBjb3VudCkpIHsKKwkJZnItPnN0YXR1cyA9IEZfVU5VU0VEOworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCSpmX3BvcyArPSBjb3VudDsKKworCWZyLT5zdGF0dXMgPSBGX1VOVVNFRDsKKworCURCRyg1LCAiJXp1IGJ5dGVzIHJlYWQiLCBjb3VudCkKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfbW1hcChzdHJ1Y3QgZmlsZSogZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKikKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXVuc2lnbmVkIGxvbmcgdnNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJICAgICAgICAgICAgICBwc2l6ZSA9IGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLnNpemUsCisJICAgICAgICAgICAgICBzdGFydCA9IHZtYS0+dm1fc3RhcnQsCisJICAgICAgICAgICAgICBwb3MgPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lWzBdLmJ1ZmZlciwKKwkgICAgICAgICAgICAgIHBhZ2U7CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJREJHKDIsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT5taXNjb25maWd1cmVkKSB7CisJCURCRygyLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2FpbiIpCisJCXJldHVybiAtRUlPOworCX0KKworCVBEQkdHKCJtbWFwcGluZyAlbHUgYnl0ZXMuLi4iLCB2c2l6ZSkKKworCWlmICh2c2l6ZSA+IHBzaXplIC0gKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKHZzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgKyB2bWEtPnZtX3Bnb2ZmLAorCQkJCQkJUEFHRV9TSVpFLCB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQl2c2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJREJHKDUsICJtbWFwIG1ldGhvZCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit3OTk2OGNmX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKKwlpbnQgZXJyOworCisJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCURCRygyLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPm1pc2NvbmZpZ3VyZWQpIHsKKwkJREJHKDIsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSB3OTk2OGNmX3Y0bF9pb2N0bChpbm9kZSwgZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKKwljb25zdCBjaGFyKiB2NGwxX2lvY3Rsc1tdID0geworCQkiPyIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJTVFVORVIiLCAKKwkJIkdQSUNUIiwgIlNQSUNUIiwgIkNDQVBUVVJFIiwgIkdXSU4iLCAiU1dJTiIsICJHRkJVRiIsCisJCSJTRkJVRiIsICJLRVkiLCAiR0ZSRVEiLCAiU0ZSRVEiLCAiR0FVRElPIiwgIlNBVURJTyIsCisJCSJTWU5DIiwgIk1DQVBUVVJFIiwgIkdNQlVGIiwgIkdVTklUIiwgIkdDQVBUVVJFIiwgIlNDQVBUVVJFIiwKKwkJIlNQTEFZTU9ERSIsICJTV1JJVEVNT0RFIiwgIkdQTEFZSU5GTyIsICJTTUlDUk9DT0RFIiwgCisJCSJHVkJJRk1UIiwgIlNWQklGTVQiIAorCX07CisKKwkjZGVmaW5lIFY0TDFfSU9DVEwoY21kKSBcCisJICAgICAgICAoKF9JT0NfTlIoKGNtZCkpIDwgc2l6ZW9mKHY0bDFfaW9jdGxzKS9zaXplb2YoY2hhciopKSA/IFwKKwkgICAgICAgIHY0bDFfaW9jdGxzW19JT0NfTlIoKGNtZCkpXSA6ICI/IikKKworCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVklESU9DR0NBUDogLyogZ2V0IHZpZGVvIGNhcGFiaWxpdHkgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGNhcCA9IHsKKwkJCS50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NDQUxFUywKKwkJCS5jaGFubmVscyA9IDEsCisJCQkuYXVkaW9zID0gMCwKKwkJCS5taW53aWR0aCA9IGNhbS0+bWlud2lkdGgsCisJCQkubWluaGVpZ2h0ID0gY2FtLT5taW5oZWlnaHQsCisJCX07CisJCXNwcmludGYoY2FwLm5hbWUsICJXOTk2Wzg3XUNGIFVTQiBDYW1lcmEgIyVkIiwgCisJCSAgICAgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJY2FwLm1heHdpZHRoID0gKGNhbS0+dXBzY2FsaW5nICYmIHc5OTY4Y2ZfdnBwKQorCQkgICAgICAgICAgICAgICA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX1dJRFRILCBjYW0tPm1heHdpZHRoKSAKKwkJICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4d2lkdGg7CisJCWNhcC5tYXhoZWlnaHQgPSAoY2FtLT51cHNjYWxpbmcgJiYgdzk5NjhjZl92cHApCisJCSAgICAgICAgICAgICAgICA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX0hFSUdIVCwgY2FtLT5tYXhoZWlnaHQpCisJCSAgICAgICAgICAgICAgICAgIDogY2FtLT5tYXhoZWlnaHQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR0NBUCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NHQ0hBTjogLyogZ2V0IHZpZGVvIGNoYW5uZWwgaW5mb3JtYXRpb25zICovCisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjaGFuOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNoYW4sIGFyZywgc2l6ZW9mKGNoYW4pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChjaGFuLmNoYW5uZWwgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN0cmNweShjaGFuLm5hbWUsICJDYW1lcmEiKTsKKwkJY2hhbi50dW5lcnMgPSAwOworCQljaGFuLmZsYWdzID0gMDsKKwkJY2hhbi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCWNoYW4ubm9ybSA9IFZJREVPX01PREVfQVVUTzsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNoYW4sIHNpemVvZihjaGFuKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dDSEFOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ1NDSEFOOiAvKiBzZXQgYWN0aXZlIGNoYW5uZWwgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsIGNoYW47CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGFuLCBhcmcsIHNpemVvZihjaGFuKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoY2hhbi5jaGFubmVsICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlEQkcoNSwgIlZJRElPQ1NDSEFOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dQSUNUOiAvKiBnZXQgaW1hZ2UgcHJvcGVydGllcyBvZiB0aGUgcGljdHVyZSAqLworCXsKKwkJaWYgKHc5OTY4Y2Zfc2Vuc29yX2dldF9waWN0dXJlKGNhbSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNhbS0+cGljdHVyZSwgc2l6ZW9mKGNhbS0+cGljdHVyZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHUElDVCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTUElDVDogLyogY2hhbmdlIHBpY3R1cmUgc2V0dGluZ3MgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3Q7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGljdCwgYXJnLCBzaXplb2YocGljdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKCAoY2FtLT5mb3JjZV9wYWxldHRlIHx8ICF3OTk2OGNmX3ZwcCkgCisJCSAgICAgJiYgcGljdC5wYWxldHRlICE9IGNhbS0+cGljdHVyZS5wYWxldHRlICkgeworCQkJREJHKDQsICJQYWxldHRlICVzIHJlamVjdGVkOiBvbmx5ICVzIGlzIGFsbG93ZWQiLAorCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgY2FtLT5waWN0dXJlLnBhbGV0dGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoIXc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZShwaWN0LnBhbGV0dGUpKSB7CisJCQlEQkcoNCwgIlBhbGV0dGUgJXMgbm90IHN1cHBvcnRlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkgeworCQkgICBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApIHsKKwkJICAgICAgaWYgKHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHBpY3QucGFsZXR0ZSkpIHsKKwkJICAgICAgICAgREJHKDQsICJEZWNvbXByZXNzaW9uIGRpc2FibGVkOiBwYWxldHRlICVzIGlzIG5vdCAiCisJCSAgICAgICAgICAgICAgICAiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJICAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0gZWxzZSBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKKwkJICAgICAgaWYgKCF3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihwaWN0LnBhbGV0dGUpKSB7CisJCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBmb3JjZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKKwkJICAgICAgICAgICAgICAgICJhbGxvd2VkLiBWSURJT0NTUElDVCBmYWlsZWQiLAorCQkgICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKKwkJICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCSAgICAgIH0KKwkJICAgfQorCQl9CisKKwkJaWYgKHBpY3QuZGVwdGggIT0gdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpKSB7CisJCQlEQkcoNCwgIlJlcXVlc3RlZCBkZXB0aCAldSBicHAgaXMgbm90IHZhbGlkIGZvciAlcyAiCisJCQkgICAgICAgInBhbGV0dGU6IGlnbm9yZWQgYW5kIGNoYW5nZWQgdG8gJXUgYnBwIiwgCisJCQkgICAgcGljdC5kZXB0aCwgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSwKKwkJCSAgICB3OTk2OGNmX3ZhbGlkX2RlcHRoKHBpY3QucGFsZXR0ZSkpCisJCQlwaWN0LmRlcHRoID0gdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpOworCQl9CisKKwkJaWYgKHBpY3QucGFsZXR0ZSAhPSBjYW0tPnBpY3R1cmUucGFsZXR0ZSkgeworCQkJaWYoKmNhbS0+cmVxdWVzdGVkX2ZyYW1lCisJCQkgICB8fCBjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgeworCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQorCQkJCSAgICAgICggY2FtLT53YWl0X3F1ZXVlLAorCQkJCSAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCQkgICAgICAgICghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCisJCQkJICAgICAgICAgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKworCQkJaWYgKHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihjYW0pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQkJaWYgKHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBwaWN0KSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCX0gZWxzZSBpZiAodzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoY2FtLCBwaWN0KSkKKwkJCXJldHVybiAtRUlPOworCisKKwkJREJHKDUsICJWSURJT0NTUElDVCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTV0lOOiAvKiBzZXQgY2FwdHVyZSBhcmVhICovCisJeworCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHdpbjsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ3aW4sIGFyZywgc2l6ZW9mKHdpbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDYsICJWSURJT0NTV0lOIGNhbGxlZDogY2xpcGNvdW50PSVkLCBmbGFncz0ldSwgIgorCQkgICAgICAgIng9JXUsIHk9JXUsICV1eCV1Iiwgd2luLmNsaXBjb3VudCwgd2luLmZsYWdzLAorCQkgICAgd2luLngsIHdpbi55LCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCisKKwkJaWYgKHdpbi5jbGlwY291bnQgIT0gMCB8fCB3aW4uZmxhZ3MgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2Kikmd2luLndpZHRoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYqKSZ3aW4uaGVpZ2h0KSkpIHsKKwkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICgldXgldSkuICIKKwkJCSAgICAgICAiVklESU9DU1dJTiBmYWlsZWQiLCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKHdpbi54ICE9IGNhbS0+d2luZG93LnggfHwKKwkJICAgIHdpbi55ICE9IGNhbS0+d2luZG93LnkgfHwKKwkJICAgIHdpbi53aWR0aCAhPSBjYW0tPndpbmRvdy53aWR0aCB8fAorCQkgICAgd2luLmhlaWdodCAhPSBjYW0tPndpbmRvdy5oZWlnaHQpIHsKKwkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQorCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkgICAgICAoIGNhbS0+d2FpdF9xdWV1ZSwKKwkJCQkgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCQkJICAgICAgICAoISpjYW0tPnJlcXVlc3RlZF9mcmFtZSAmJgorCQkJCSAgICAgICAgICFjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisKKwkJCWlmICh3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCS8qIFRoaXMgX211c3RfIGJlIGNhbGxlZCBiZWZvcmUgc2V0X3dpbmRvdygpICovCisJCQlpZiAodzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIGNhbS0+cGljdHVyZSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQlpZiAodzk5NjhjZl9zZXRfd2luZG93KGNhbSwgd2luKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCQl9CisKKwkJREJHKDUsICJWSURJT0NTV0lOIHN1Y2Nlc3NmdWxseSBjYWxsZWQuICIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DR1dJTjogLyogZ2V0IGN1cnJlbnQgd2luZG93IHByb3BlcnRpZXMgKi8KKwl7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZjYW0tPndpbmRvdyxzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHV0lOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dNQlVGOiAvKiByZXF1ZXN0IGZvciBtZW1vcnkgKG1hcHBlZCkgYnVmZmVyICovCisJeworCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiBtYnVmOworCQl1OCBpOworCisJCW1idWYuc2l6ZSA9IGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLnNpemU7CisJCW1idWYuZnJhbWVzID0gY2FtLT5uYnVmZmVyczsKKwkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJCW1idWYub2Zmc2V0c1tpXSA9ICh1bnNpZ25lZCBsb25nKWNhbS0+ZnJhbWVbaV0uYnVmZmVyIC0KKwkJCSAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWNhbS0+ZnJhbWVbMF0uYnVmZmVyOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmbWJ1Ziwgc2l6ZW9mKG1idWYpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR01CVUYgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DTUNBUFRVUkU6IC8qIHN0YXJ0IHRoZSBjYXB0dXJlIHRvIGEgZnJhbWUgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwIG1tYXA7CisJCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIGZyOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJm1tYXAsIGFyZywgc2l6ZW9mKG1tYXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg2LCAiVklESU9DTUNBUFRVUkUgY2FsbGVkOiBmcmFtZSAjJXUsIGZvcm1hdD0lcywgJWR4JWQiLAorCQkgICAgbW1hcC5mcmFtZSwgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpLCAKKwkJICAgIG1tYXAud2lkdGgsIG1tYXAuaGVpZ2h0KQorCisJCWlmIChtbWFwLmZyYW1lID49IGNhbS0+bmJ1ZmZlcnMpIHsKKwkJCURCRyg0LCAiSW52YWxpZCBmcmFtZSBudW1iZXIgKCV1KS4gIgorCQkJICAgICAgICJWSURJT0NNQ0FQVFVSRSBmYWlsZWQiLCBtbWFwLmZyYW1lKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobW1hcC5mb3JtYXQhPWNhbS0+cGljdHVyZS5wYWxldHRlICYmIAorCQkgICAgKGNhbS0+Zm9yY2VfcGFsZXR0ZSB8fCAhdzk5NjhjZl92cHApKSB7CisJCQlEQkcoNCwgIlBhbGV0dGUgJXMgcmVqZWN0ZWQ6IG9ubHkgJXMgaXMgYWxsb3dlZCIsCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpLAorCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIGNhbS0+cGljdHVyZS5wYWxldHRlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCF3OTk2OGNmX3ZhbGlkX3BhbGV0dGUobW1hcC5mb3JtYXQpKSB7CisJCQlEQkcoNCwgIlBhbGV0dGUgJXMgbm90IHN1cHBvcnRlZC4gIgorCQkJICAgICAgICJWSURJT0NNQ0FQVFVSRSBmYWlsZWQiLCAKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICghY2FtLT5mb3JjZV9wYWxldHRlKSB7CisJCSAgIGlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMCkgeworCQkgICAgICBpZiAodzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24obW1hcC5mb3JtYXQpKSB7CisJCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBkaXNhYmxlZDogcGFsZXR0ZSAlcyBpcyBub3QgIgorCQkgICAgICAgICAgICAgICAgImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCSAgICAgICAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0gZWxzZSBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKKwkJICAgICAgaWYgKCF3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihtbWFwLmZvcm1hdCkpIHsKKwkJICAgICAgICAgREJHKDQsICJEZWNvbXByZXNzaW9uIGZvcmNlZDogcGFsZXR0ZSAlcyBpcyBub3QgIgorCQkgICAgICAgICAgICAgICAgImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCSAgICAgICAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0KKwkJfQorCisJCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2KikmbW1hcC53aWR0aCwgCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNiopJm1tYXAuaGVpZ2h0KSkpIHsKKwkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICglZHglZCkuICIKKwkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwKKwkJCSAgICBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCkKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlmciA9ICZjYW0tPmZyYW1lW21tYXAuZnJhbWVdOworCisJCWlmIChtbWFwLndpZHRoICAhPSBjYW0tPndpbmRvdy53aWR0aCB8fAorCQkgICAgbW1hcC5oZWlnaHQgIT0gY2FtLT53aW5kb3cuaGVpZ2h0IHx8CisJCSAgICBtbWFwLmZvcm1hdCAhPSBjYW0tPnBpY3R1cmUucGFsZXR0ZSkgeworCisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHdpbjsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3Q7CisKKwkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQorCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKKwkJCQlEQkcoNiwgIlZJRElPQ01DQVBUVVJFLiBDaGFuZ2Ugc2V0dGluZ3MgZm9yICIKKwkJCQkgICAgICAgImZyYW1lICMldTogJWR4JWQsIGZvcm1hdCAlcy4gV2FpdC4uLiIsCisJCQkJICAgIG1tYXAuZnJhbWUsIG1tYXAud2lkdGgsIG1tYXAuaGVpZ2h0LAorCQkJICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQorCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQorCQkJCSAgICAgICggY2FtLT53YWl0X3F1ZXVlLAorCQkJCSAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCQkgICAgICAgICghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCisJCQkJICAgICAgICAgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKworCQkJbWVtY3B5KCZ3aW4sICZjYW0tPndpbmRvdywgc2l6ZW9mKHdpbikpOworCQkJbWVtY3B5KCZwaWN0LCAmY2FtLT5waWN0dXJlLCBzaXplb2YocGljdCkpOworCQkJd2luLndpZHRoID0gbW1hcC53aWR0aDsKKwkJCXdpbi5oZWlnaHQgPSBtbWFwLmhlaWdodDsKKwkJCXBpY3QucGFsZXR0ZSA9IG1tYXAuZm9ybWF0OworCisJCQlpZiAodzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQkvKiBUaGlzIGJlZm9yZSBzZXRfd2luZG93ICovCisJCQlpZiAodzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIHBpY3QpKSAKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3NldF93aW5kb3coY2FtLCB3aW4pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQkJaWYgKHc5OTY4Y2Zfc3RhcnRfdHJhbnNmZXIoY2FtKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJfSBlbHNlIAlpZiAoZnItPnF1ZXVlZCkgeworCisJCQlEQkcoNiwgIldhaXQgdW50aWwgZnJhbWUgIyV1IGlzIGZyZWUiLCBtbWFwLmZyYW1lKQorCQkJCisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghZnItPnF1ZXVlZCkpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJdzk5NjhjZl9wdXNoX2ZyYW1lKGNhbSwgbW1hcC5mcmFtZSk7CisJCURCRyg1LCAiVklESU9DTUNBUFRVUkUoJXUpOiBzdWNjZXNzZnVsbHkgY2FsbGVkIiwgbW1hcC5mcmFtZSkKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTWU5DOiAvKiB3YWl0IHVudGlsIHRoZSBjYXB0dXJlIG9mIGEgZnJhbWUgaXMgZmluaXNoZWQgKi8KKwl7CisJCXVuc2lnbmVkIGludCBmX251bTsKKwkJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnI7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZl9udW0sIGFyZywgc2l6ZW9mKGZfbnVtKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZl9udW0gPj0gY2FtLT5uYnVmZmVycykgeworCQkJREJHKDQsICJJbnZhbGlkIGZyYW1lIG51bWJlciAoJXUpLiAiCisJCQkgICAgICAgIlZJRElPQ01DQVBUVVJFIGZhaWxlZCIsIGZfbnVtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlEQkcoNiwgIlZJRElPQ1NZTkMgY2FsbGVkIGZvciBmcmFtZSAjJXUiLCBmX251bSkKKworCQlmciA9ICZjYW0tPmZyYW1lW2ZfbnVtXTsKKworCQlzd2l0Y2ggKGZyLT5zdGF0dXMpIHsKKwkJY2FzZSBGX1VOVVNFRDoKKwkJCWlmICghZnItPnF1ZXVlZCkgeworCQkJCURCRyg0LCAiVklESU9TWU5DOiBGcmFtZSAjJXUgbm90IHJlcXVlc3RlZCEiLAorCQkJCSAgICBmX251bSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJY2FzZSBGX0VSUk9SOgorCQljYXNlIEZfR1JBQkJJTkc6CisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnItPnN0YXR1cyA9PSBGX1JFQURZKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNhbS0+ZGlzY29ubmVjdGVkKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQljYXNlIEZfUkVBRFk6CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3OTk2OGNmX3ZwcCkKKwkJCXc5OTY4Y2ZfcG9zdHByb2Nlc3NfZnJhbWUoY2FtLCBmcik7CisKKwkJZnItPnN0YXR1cyA9IEZfVU5VU0VEOworCisJCURCRyg1LCAiVklESU9DU1lOQygldSkgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIsIGZfbnVtKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dVTklUOi8qIHJlcG9ydCB0aGUgdW5pdCBudW1iZXJzIG9mIHRoZSBhc3NvY2lhdGVkIGRldmljZXMqLworCXsKKwkJc3RydWN0IHZpZGVvX3VuaXQgdW5pdCA9IHsKKwkJCS52aWRlbyA9IGNhbS0+djRsZGV2LT5taW5vciwKKwkJCS52YmkgPSBWSURFT19OT19VTklULAorCQkJLnJhZGlvID0gVklERU9fTk9fVU5JVCwKKwkJCS5hdWRpbyA9IFZJREVPX05PX1VOSVQsCisJCQkudGVsZXRleHQgPSBWSURFT19OT19VTklULAorCQl9OworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdW5pdCwgc2l6ZW9mKHVuaXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR1VOSVQgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DS0VZOgorCQlyZXR1cm4gMDsKKworCWNhc2UgVklESU9DR0ZCVUY6CisJeworCQlpZiAoY2xlYXJfdXNlcihhcmcsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYnVmZmVyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dGQlVGIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dUVU5FUjoKKwl7CisJCXN0cnVjdCB2aWRlb190dW5lciB0dW5lcjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0dW5lciwgYXJnLCBzaXplb2YodHVuZXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICh0dW5lci50dW5lciAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3RyY3B5KHR1bmVyLm5hbWUsICJub190dW5lciIpOworCQl0dW5lci5yYW5nZWxvdyA9IDA7CisJCXR1bmVyLnJhbmdlaGlnaCA9IDA7CisJCXR1bmVyLmZsYWdzID0gVklERU9fVFVORVJfTk9STTsKKwkJdHVuZXIubW9kZSA9IFZJREVPX01PREVfQVVUTzsKKwkJdHVuZXIuc2lnbmFsID0gMHhmZmZmOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdHVuZXIsIHNpemVvZih0dW5lcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHVFVORVIgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DU1RVTkVSOgorCXsKKwkJc3RydWN0IHZpZGVvX3R1bmVyIHR1bmVyOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnR1bmVyLCBhcmcsIHNpemVvZih0dW5lcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHR1bmVyLnR1bmVyICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAodHVuZXIubW9kZSAhPSBWSURFT19NT0RFX0FVVE8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlEQkcoNSwgIlZJRElPQ1NUVU5FUiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTRkJVRjoKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCWNhc2UgVklESU9DU1BMQVlNT0RFOgorCWNhc2UgVklESU9DU1dSSVRFTU9ERToKKwljYXNlIFZJRElPQ0dQTEFZSU5GTzoKKwljYXNlIFZJRElPQ1NNSUNST0NPREU6CisJY2FzZSBWSURJT0NHVkJJRk1UOgorCWNhc2UgVklESU9DU1ZCSUZNVDoKKwkJREJHKDQsICJVbnN1cHBvcnRlZCBWNEwxIElPQ3RsOiBWSURJT0MlcyAiCisJCSAgICAgICAiKHR5cGUgMHglMDFYLCAiCisJCSAgICAgICAibi4gMHglMDFYLCAiCisJCSAgICAgICAiZGlyLiAweCUwMVgsICIgCisJCSAgICAgICAic2l6ZSAweCUwMlgpIiwKKwkJICAgIFY0TDFfSU9DVEwoY21kKSwKKwkJICAgIF9JT0NfVFlQRShjbWQpLF9JT0NfTlIoY21kKSxfSU9DX0RJUihjbWQpLF9JT0NfU0laRShjbWQpKQorCisJCXJldHVybiAtRUlOVkFMOworCisJZGVmYXVsdDoKKwkJREJHKDQsICJJbnZhbGlkIFY0TDEgSU9DdGw6IFZJRElPQyVzICIKKwkJICAgICAgICJ0eXBlIDB4JTAxWCwgIgorCQkgICAgICAgIm4uIDB4JTAxWCwgIgorCQkgICAgICAgImRpci4gMHglMDFYLCAiCisJCSAgICAgICAic2l6ZSAweCUwMlgiLAorCQkgICAgVjRMMV9JT0NUTChjbWQpLAorCQkgICAgX0lPQ19UWVBFKGNtZCksX0lPQ19OUihjbWQpLF9JT0NfRElSKGNtZCksX0lPQ19TSVpFKGNtZCkpCisKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKworCX0gLyogZW5kIG9mIHN3aXRjaCAqLworCitpb2N0bF9mYWlsOgorCWNhbS0+bWlzY29uZmlndXJlZCA9IDE7CisJREJHKDEsICJWSURJT0MlcyBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gIgorCSAgICAgICAiVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIsIFY0TDFfSU9DVEwoY21kKSkKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3OTk2OGNmX2ZvcHMgPSB7CisJLm93bmVyID0gICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgIHc5OTY4Y2Zfb3BlbiwKKwkucmVsZWFzZSA9IHc5OTY4Y2ZfcmVsZWFzZSwKKwkucmVhZCA9ICAgIHc5OTY4Y2ZfcmVhZCwKKwkuaW9jdGwgPSAgIHc5OTY4Y2ZfaW9jdGwsCisJLm1tYXAgPSAgICB3OTk2OGNmX21tYXAsCisJLmxsc2VlayA9ICBub19sbHNlZWssCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQiBwcm9iZSBhbmQgVjRMIHJlZ2lzdHJhdGlvbiwgZGlzY29ubmVjdCBhbmQgaWRfdGFibGVbXSBkZWZpbml0aW9uICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAordzk5NjhjZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkKiBpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJaW50IGVyciA9IDA7CisJZW51bSB3OTk2OGNmX21vZGVsX2lkIG1vZF9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkKiBwdHI7CisJdTggc2MgPSAwOyAvKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KKwlzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGV2X25yID0gMDsgLyogd2UgYXJlIGhhbmRsaW5nIGRldmljZSBudW1iZXIgbiAqLworCisJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICA9PSB3aW5ib25kX2lkX3RhYmxlWzBdLmlkVmVuZG9yICYmCisJICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB3aW5ib25kX2lkX3RhYmxlWzBdLmlkUHJvZHVjdCkKKwkJbW9kX2lkID0gVzk5NjhDRl9NT0RfQ0xWQldHUDsgLyogc2VlIGNhbWxpc3RbXSB0YWJsZSAqLworCWVsc2UgaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICA9PSB3aW5ib25kX2lkX3RhYmxlWzFdLmlkVmVuZG9yICYmCisJICAgICAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMV0uaWRQcm9kdWN0KQorCQltb2RfaWQgPSBXOTk2OENGX01PRF9HRU5FUklDOyAvKiBzZWUgY2FtbGlzdFtdIHRhYmxlICovCisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKQorCSAgICAgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoY2FtLCAwLCBzaXplb2YoKmNhbSkpOworCisJaW5pdF9NVVRFWCgmY2FtLT5kZXZfc2VtKTsKKwlkb3duKCZjYW0tPmRldl9zZW0pOworCisJY2FtLT51c2JkZXYgPSB1ZGV2OworCS8qIE5PVEU6IGEgbG9jYWwgY29weSBpcyB1c2VkIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyAqLworCW1lbWNweSgmY2FtLT5kZXYsICZ1ZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CisKKwlEQkcoMiwgIiVzIGRldGVjdGVkIiwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSkKKworCWlmIChzaW1jYW1zID4gVzk5NjhDRl9NQVhfREVWSUNFUykKKwkJc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKKworCS8qIEhvdyBtYW55IGNhbWVyYXMgYXJlIGNvbm5lY3RlZCA/ICovCisJZG93bigmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisJbGlzdF9mb3JfZWFjaChwdHIsICZ3OTk2OGNmX2Rldl9saXN0KQorCQlzYysrOworCXVwKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKworCWlmIChzYyA+PSBzaW1jYW1zKSB7CisJCURCRygyLCAiRGV2aWNlIHJlamVjdGVkOiB0b28gbWFueSBjb25uZWN0ZWQgY2FtZXJhcyAiCisJCSAgICAgICAiKG1heC4gJXUpIiwgc2ltY2FtcykKKwkJZXJyID0gLUVQRVJNOworCQlnb3RvIGZhaWw7CisJfQorCisKKwkvKiBBbGxvY2F0ZSAyIGJ5dGVzIG9mIG1lbW9yeSBmb3IgY2FtZXJhIGNvbnRyb2wgVVNCIHRyYW5zZmVycyAqLworCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSAodTE2KilrbWFsbG9jKDIsIEdGUF9LRVJORUwpKSkgeworCQlEQkcoMSwiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjYW1lcmEgY29udHJvbCB0cmFuc2ZlcnMiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldChjYW0tPmNvbnRyb2xfYnVmZmVyLCAwLCAyKTsKKworCS8qIEFsbG9jYXRlIDggYnl0ZXMgb2YgbWVtb3J5IGZvciBVU0IgZGF0YSB0cmFuc2ZlcnMgdG8gdGhlIEZTQiAqLworCWlmICghKGNhbS0+ZGF0YV9idWZmZXIgPSAodTE2KilrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgeworCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSAiCisJCSAgICAgICAidHJhbnNmZXJzIHRvIHRoZSBGU0IiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldChjYW0tPmRhdGFfYnVmZmVyLCAwLCA4KTsKKworCS8qIFJlZ2lzdGVyIHRoZSBWNEwgZGV2aWNlICovCisJY2FtLT52NGxkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIWNhbS0+djRsZGV2KSB7CisJCURCRygxLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBWNEwgc3RydWN0dXJlIikKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSk7CisJY2FtLT52NGxkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2FtLT52NGxkZXYtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfU0NBTEVTOworCWNhbS0+djRsZGV2LT5oYXJkd2FyZSA9IFZJRF9IQVJEV0FSRV9XOTk2OENGOworCWNhbS0+djRsZGV2LT5mb3BzID0gJnc5OTY4Y2ZfZm9wczsKKwljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOworCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CisJY2FtLT52NGxkZXYtPmRldiA9ICZjYW0tPmRldjsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fbnJbZGV2X25yXSk7CisJaWYgKGVycikgeworCQlEQkcoMSwgIlY0TCBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCIpCisJCWlmIChlcnIgPT0gLUVORklMRSAmJiB2aWRlb19ucltkZXZfbnJdID09IC0xKQorCQkJREJHKDIsICJDb3VsZG4ndCBmaW5kIGEgZnJlZSAvZGV2L3ZpZGVvWCBub2RlIikKKwkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOworCQlkZXZfbnIgPSAoZGV2X25yIDwgVzk5NjhDRl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKwkJZ290byBmYWlsOworCX0KKworCURCRygyLCAiVjRMIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcikKKworCS8qIFNldCBzb21lIGJhc2ljIGNvbnN0YW50cyAqLworCXc5OTY4Y2ZfY29uZmlndXJlX2NhbWVyYShjYW0sIHVkZXYsIG1vZF9pZCwgZGV2X25yKTsKKworCS8qIEFkZCBhIG5ldyBlbnRyeSBpbnRvIHRoZSBsaXN0IG9mIFY0TCByZWdpc3RlcmVkIGRldmljZXMgKi8KKwlkb3duKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKwlsaXN0X2FkZCgmY2FtLT52NGxsaXN0LCAmdzk5NjhjZl9kZXZfbGlzdCk7CisJdXAoJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworCWRldl9uciA9IChkZXZfbnIgPCBXOTk2OENGX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOworCisJdzk5NjhjZl90dXJuX29uX2xlZChjYW0pOworCisJdzk5NjhjZl9pMmNfaW5pdChjYW0pOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOworCXVwKCZjYW0tPmRldl9zZW0pOworCXJldHVybiAwOworCitmYWlsOiAvKiBGcmVlIHVudXNlZCBtZW1vcnkgKi8KKwlpZiAoY2FtLT5jb250cm9sX2J1ZmZlcikKKwkJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CisJaWYgKGNhbS0+ZGF0YV9idWZmZXIpCisJCWtmcmVlKGNhbS0+ZGF0YV9idWZmZXIpOworCWlmIChjYW0tPnY0bGRldikKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOworCXVwKCZjYW0tPmRldl9zZW0pOworCWtmcmVlKGNhbSk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCB3OTk2OGNmX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gCisJICAgKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRvd25fd3JpdGUoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CisKKwlpZiAoY2FtKSB7CisJCS8qIFByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byBkYXRhICovCisJCWRvd24oJmNhbS0+ZGV2X3NlbSk7IAorCisJCWNhbS0+ZGlzY29ubmVjdGVkID0gMTsKKworCQlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSkKKworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjYW0tPm9wZW4pOworCisJCWlmIChjYW0tPnVzZXJzKSB7CisJCQlEQkcoMiwgIlRoZSBkZXZpY2UgaXMgb3BlbiAoL2Rldi92aWRlbyVkKSEgIgorCQkJICAgICAgICJQcm9jZXNzIG5hbWU6ICVzLiBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKKwkJCSAgICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS4iLAorCQkJICAgIGNhbS0+djRsZGV2LT5taW5vciwgY2FtLT5jb21tYW5kKQorCQkJY2FtLT5taXNjb25maWd1cmVkID0gMTsKKwkJCXc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihjYW0pOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfcXVldWUpOworCQl9IGVsc2UKKwkJCXc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKworCQl1cCgmY2FtLT5kZXZfc2VtKTsKKworCQlpZiAoIWNhbS0+dXNlcnMpCisJCQlrZnJlZShjYW0pOworCX0KKworCXVwX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3OTk2OGNmX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyID0gICAgICBUSElTX01PRFVMRSwKKwkubmFtZSA9ICAgICAgICJ3OTk2OGNmIiwKKwkuaWRfdGFibGUgPSAgIHdpbmJvbmRfaWRfdGFibGUsCisJLnByb2JlID0gICAgICB3OTk2OGNmX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHc5OTY4Y2ZfdXNiX2Rpc2Nvbm5lY3QsCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBpbml0LCBleGl0IGFuZCBpbnRlcm1vZHVsZSBjb21tdW5pY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB3OTk2OGNmX3ZwcG1vZF9kZXRlY3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaWYgKCF3OTk2OGNmX3ZwcCkKKwkJaWYgKHZwcG1vZF9sb2FkKQorCQkJcmVxdWVzdF9tb2R1bGUoInc5OTY4Y2YtdnBwIik7CisKKwlkb3duKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworCWlmICghdzk5NjhjZl92cHApIHsKKwkJREJHKDQsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIG5vdCBkZXRlY3RlZCIpCisJCXc5OTY4Y2ZfYWRqdXN0X2NvbmZpZ3VyYXRpb24oY2FtKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCF0cnlfbW9kdWxlX2dldCh3OTk2OGNmX3ZwcC0+b3duZXIpKSB7CisJCURCRygxLCAiQ291bGRuJ3QgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgIgorCQkgICAgICAgInRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIikKKwkJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwl3OTk2OGNmX3ZwcC0+YnVzeSsrOworCisJREJHKDUsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIGRldGVjdGVkIikKKworb3V0OgorCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB3OTk2OGNmX3ZwcG1vZF9yZWxlYXNlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWRvd24oJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCisJaWYgKHc5OTY4Y2ZfdnBwICYmIHc5OTY4Y2ZfdnBwLT5idXN5KSB7CisJCW1vZHVsZV9wdXQodzk5NjhjZl92cHAtPm93bmVyKTsKKwkJdzk5NjhjZl92cHAtPmJ1c3ktLTsKKwkJd2FrZV91cCgmdzk5NjhjZl92cHBtb2Rfd2FpdCk7CisJCURCRyg1LCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSByZWxlYXNlZCIpCisJfQorCisJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworfQorCisKK2ludCB3OTk2OGNmX3ZwcG1vZF9yZWdpc3RlcihzdHJ1Y3Qgdzk5NjhjZl92cHBfdCogdnBwKQoreworCWRvd24oJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCisJaWYgKHc5OTY4Y2ZfdnBwKSB7CisJCUtEQkcoMSwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgYWxyZWFkeSByZWdpc3RlcmVkIikKKwkJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3OTk2OGNmX3ZwcCA9IHZwcDsKKwl3OTk2OGNmX3ZwcC0+YnVzeSA9IDA7CisKKwlLREJHKDIsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIHJlZ2lzdGVyZWQiKQorCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgdzk5NjhjZl92cHBtb2RfZGVyZWdpc3RlcihzdHJ1Y3Qgdzk5NjhjZl92cHBfdCogdnBwKQoreworCWRvd24oJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCisJaWYgKCF3OTk2OGNmX3ZwcCkgeworCQl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3OTk2OGNmX3ZwcCAhPSB2cHApIHsKKwkJS0RCRygxLCAiT25seSB0aGUgb3duZXIgY2FuIHVucmVnaXN0ZXIgdGhlIHZpZGVvICIKKwkJICAgICAgICAicG9zdC1wcm9jZXNzaW5nIG1vZHVsZSIpCisJCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHc5OTY4Y2ZfdnBwLT5idXN5KSB7CisJCUtEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgYnVzeS4gV2FpdCBmb3IgaXQgdG8gYmUgIgorCQkgICAgICAgICJyZWxlYXNlZC4uLiIpCisJCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwkJd2FpdF9ldmVudCh3OTk2OGNmX3ZwcG1vZF93YWl0LCAhdzk5NjhjZl92cHAtPmJ1c3kpOworCQl3OTk2OGNmX3ZwcCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXc5OTY4Y2ZfdnBwID0gTlVMTDsKKworCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworb3V0OgorCUtEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgdW5yZWdpc3RlcmVkIikKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCB3OTk2OGNmX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgIlc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pCisJS0RCRygzLCBXOTk2OENGX01PRFVMRV9BVVRIT1IpCisKKwlpZiAob3Ztb2RfbG9hZCkKKwkJcmVxdWVzdF9tb2R1bGUoIm92Y2FtY2hpcCIpOworCisJaWYgKChlcnIgPSB1c2JfcmVnaXN0ZXIoJnc5OTY4Y2ZfdXNiX2RyaXZlcikpKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHc5OTY4Y2ZfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiB3OTk2OGNmX3VzYl9kaXNjb25uZWN0KCkgd2lsbCBiZSBjYWxsZWQgKi8KKwl1c2JfZGVyZWdpc3Rlcigmdzk5NjhjZl91c2JfZHJpdmVyKTsKKworCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgZGVyZWdpc3RlcmVkIikKK30KKworCittb2R1bGVfaW5pdCh3OTk2OGNmX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHc5OTY4Y2ZfbW9kdWxlX2V4aXQpOworCisKK0VYUE9SVF9TWU1CT0wodzk5NjhjZl92cHBtb2RfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTCh3OTk2OGNmX3ZwcG1vZF9kZXJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWNiZmUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5oCkBAIC0wLDAgKzEsMzM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWaWRlbzRMaW51eCBkcml2ZXIgZm9yIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwLiAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9XOTk2OENGX0hfCisjZGVmaW5lIF9XOTk2OENGX0hfCisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9vdmNhbWNoaXAuaD4KKworI2luY2x1ZGUgInc5OTY4Y2ZfdnBwLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmF1bHQgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBXOTk2OENGX09WTU9EX0xPQUQgICAgICAxICAvKiBhdXRvbWF0aWMgJ292Y2FtY2hpcCcgbW9kdWxlIGxvYWRpbmcgKi8KKyNkZWZpbmUgVzk5NjhDRl9WUFBNT0RfTE9BRCAgICAgMSAgLyogYXV0b21hdGljICd3OTk2OGNmLXZwcCcgbW9kdWxlIGxvYWRpbmcgKi8KKworLyogQ29tbWVudC91bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZS9kaXNhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworI2RlZmluZSBXOTk2OENGX0RFQlVHCisKKy8qIFRoZXNlIGhhdmUgZWZmZWN0IG9ubHkgaWYgVzk5NjhDRl9ERUJVRyBpcyBkZWZpbmVkICovCisjZGVmaW5lIFc5OTY4Q0ZfREVCVUdfTEVWRUwgICAgMiAvKiBmcm9tIDAgdG8gNi4gMCBmb3Igbm8gZGVidWcgaW5mb3JtYXRpb25zICovCisjZGVmaW5lIFc5OTY4Q0ZfU1BFQ0lGSUNfREVCVUcgMCAvKiAwIG9yIDEgKi8KKworI2RlZmluZSBXOTk2OENGX01BWF9ERVZJQ0VTICAgIDMyCisjZGVmaW5lIFc5OTY4Q0ZfU0lNQ0FNUyAgICAgICAgVzk5NjhDRl9NQVhfREVWSUNFUyAvKiBzaW11bHRhbmVvdXMgY2FtZXJhcyAqLworCisjZGVmaW5lIFc5OTY4Q0ZfTUFYX0JVRkZFUlMgICAzMgorI2RlZmluZSBXOTk2OENGX0JVRkZFUlMgICAgICAgMiAvKiBuLiBvZiBmcmFtZSBidWZmZXJzIGZyb20gMiB0byBNQVhfQlVGRkVSUyAqLworCisvKiBNYXhpbXVtIGRhdGEgcGF5bG9hZCBzaXplcyBpbiBieXRlcyBmb3IgYWx0ZXJuYXRlIHNldHRpbmdzICovCitzdGF0aWMgY29uc3QgdTE2IHdNYXhQYWNrZXRTaXplW10gPSB7MTAyMywgOTU5LCA4OTUsIDgzMSwgNzY3LCA3MDMsIDYzOSwgNTc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTEsIDQ0NywgMzgzLCAzMTksIDI1NSwgMTkxLCAxMjcsICA2M307CisjZGVmaW5lIFc5OTY4Q0ZfUEFDS0VUX1NJWkUgICAgICAxMDIzIC8qIGFjY29yZGluZyB0byB3TWF4UGFja2V0U2l6ZXNbXSAqLworI2RlZmluZSBXOTk2OENGX01JTl9QQUNLRVRfU0laRSAgNjMgLyogbWluaW11bSB2YWx1ZSAqLworI2RlZmluZSBXOTk2OENGX0lTT19QQUNLRVRTICAgICAgNSAvKiBuLm9mIHBhY2tldHMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLworI2RlZmluZSBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQgMTAwMCAvKiB0aW1lb3V0IChtcykgZm9yIHVzYiBjb250cm9sIGNvbW1hbmRzICovCisjZGVmaW5lIFc5OTY4Q0ZfVVJCUyAgICAgICAgICAgICAyIC8qIG4uIG9mIHNjaGVkdWxlZCBVUkJzIGZvciBJU08gdHJhbnNmZXIgKi8KKworI2RlZmluZSBXOTk2OENGX0kyQ19CVVNfREVMQVkgICAgNCAvKiBkZWxheSBpbiB1cyBmb3IgSTJDIGJpdCByL3cgb3BlcmF0aW9ucyAqLworI2RlZmluZSBXOTk2OENGX0kyQ19SV19SRVRSSUVTICAgMTUgLyogbnVtYmVyIG9mIG1heCBJMkMgci93IHJldHJpZXMgKi8KKworLyogQXZhaWxhYmxlIHZpZGVvIGZvcm1hdHMgKi8KK3N0cnVjdCB3OTk2OGNmX2Zvcm1hdCB7CisJY29uc3QgdTE2IHBhbGV0dGU7CisJY29uc3QgdTE2IGRlcHRoOworCWNvbnN0IHU4IGNvbXByZXNzaW9uOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3OTk2OGNmX2Zvcm1hdCB3OTk2OGNmX2Zvcm1hdGxpc3RbXSA9IHsKKwl7IFZJREVPX1BBTEVUVEVfVVlWWSwgICAgMTYsIDAgfSwgLyogb3JpZ2luYWwgdmlkZW8gKi8KKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwgMTYsIDEgfSwgLyogd2l0aCBKUEVHIGNvbXByZXNzaW9uICovCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMFAsIDEyLCAxIH0sIC8qIHdpdGggSlBFRyBjb21wcmVzc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9ZVVY0MjAsICAxMiwgMSB9LCAvKiBzYW1lIGFzIFlVVjQyMFAgKi8KKwl7IFZJREVPX1BBTEVUVEVfWVVZViwgICAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9ZVVY0MjIsICAxNiwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCisJeyBWSURFT19QQUxFVFRFX0dSRVksICAgICA4LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfUkdCNTU1LCAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9SR0I1NjUsICAxNiwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCisJeyBWSURFT19QQUxFVFRFX1JHQjI0LCAgIDI0LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfUkdCMzIsICAgMzIsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgMCwgICAgICAgICAgICAgICAgICAgICAgMCwgMCB9ICAvKiAwIGlzIGEgdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyNkZWZpbmUgVzk5NjhDRl9ERUNPTVBSRVNTSU9OICAgIDIgLyogZGVjb21wOjA9ZGlzYWJsZSwxPWZvcmNlLDI9YW55IGZvcm1hdHMgKi8KKyNkZWZpbmUgVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PRkYgICBWSURFT19QQUxFVFRFX1VZVlkgICAgLyogd2hlbiBkZWNvbXA9MCAqLworI2RlZmluZSBXOTk2OENGX1BBTEVUVEVfREVDT01QX0ZPUkNFIFZJREVPX1BBTEVUVEVfWVVWNDIwUCAvKiB3aGVuIGRlY29tcD0xICovCisjZGVmaW5lIFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT04gICAgVklERU9fUEFMRVRURV9VWVZZICAgIC8qIHdoZW4gZGVjb21wPTIgKi8KKworI2RlZmluZSBXOTk2OENGX0ZPUkNFX1JHQiAgICAgICAgMCAgLyogcmVhZCBSR0IgaW5zdGVhZCBvZiBCR1IsIHllcz0xL25vPTAgKi8KKworI2RlZmluZSBXOTk2OENGX01BWF9XSURUSCAgICAgIDgwMCAvKiBIYXMgZWZmZWN0IGlmIHVwLXNjYWxpbmcgaXMgb24gKi8KKyNkZWZpbmUgVzk5NjhDRl9NQVhfSEVJR0hUICAgICA2MDAgLyogSGFzIGVmZmVjdCBpZiB1cC1zY2FsaW5nIGlzIG9uICovCisjZGVmaW5lIFc5OTY4Q0ZfV0lEVEggICAgICAgICAgMzIwIC8qIGZyb20gMTI4IHRvIDM1MiwgbXVsdGlwbGUgb2YgMTYgKi8KKyNkZWZpbmUgVzk5NjhDRl9IRUlHSFQgICAgICAgICAyNDAgLyogZnJvbSAgOTYgdG8gMjg4LCBtdWx0aXBsZSBvZiAxNiAqLworCisjZGVmaW5lIFc5OTY4Q0ZfQ0xBTVBJTkcgICAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIHZpZGVvIGRhdGEgY2xhbXBpbmcgKi8KKyNkZWZpbmUgVzk5NjhDRl9GSUxURVJfVFlQRSAgICAwIC8qIDAgZGlzYWJsZSAgMSAoMS0yLTEpLCAyICgyLTMtNi0zLTIpICovCisjZGVmaW5lIFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUiAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGRvdWJsZSBidWZmZXIgKi8KKyNkZWZpbmUgVzk5NjhDRl9MQVJHRVZJRVcgICAgICAxIC8qIDAgZGlzYWJsZSwgMSBlbmFibGUgKi8KKyNkZWZpbmUgVzk5NjhDRl9VUFNDQUxJTkcgICAgICAwIC8qIDAgZGlzYWJsZSwgMSBlbmFibGUgKi8KKworI2RlZmluZSBXOTk2OENGX01PTk9DSFJPTUUgICAgIDAgLyogMCBub3QgbW9ub2Nocm9tZSwgMSBtb25vY2hyb21lIHNlbnNvciAqLworI2RlZmluZSBXOTk2OENGX0JSSUdIVE5FU1MgICAgIDMxMDAwIC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX0hVRSAgICAgICAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX0NPTE9VUiAgICAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX0NPTlRSQVNUICAgICAgIDUwMDAwIC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX1dISVRFTkVTUyAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLworCisjZGVmaW5lIFc5OTY4Q0ZfQVVUT0JSSUdIVCAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGF1dG9tYXRpYyBicmlnaHRuZXNzICovCisjZGVmaW5lIFc5OTY4Q0ZfQVVUT0VYUCAgICAgICAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGF1dG9tYXRpYyBleHBvc3VyZSAqLworI2RlZmluZSBXOTk2OENGX0xJR0hURlJFUSAgICAgIDUwIC8qIGxpZ2h0IGZyZXF1ZW5jeS4gNTBIeiAoRXVyb3BlKSBvciA2MEh6ICovCisjZGVmaW5lIFc5OTY4Q0ZfQkFORElOR0ZJTFRFUiAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGJhbmRpbmcgZmlsdGVyICovCisjZGVmaW5lIFc5OTY4Q0ZfQkFDS0xJR0hUICAgICAgMCAvKiAwIG9yIDEsIDE9b2JqZWN0IGlzIGxpdCBmcm9tIGJlaGluZCAqLworI2RlZmluZSBXOTk2OENGX01JUlJPUiAgICAgICAgIDAgLyogMCBvciAxIFtkb24ndF0gcmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHkqLworCisjZGVmaW5lIFc5OTY4Q0ZfQ0xPQ0tESVYgICAgICAgICAtMSAvKiAtMSA9IGF1dG9tYXRpYyBjbG9jayBkaXZpc29yICovCisjZGVmaW5lIFc5OTY4Q0ZfREVGX0NMT0NLRElWSVNPUiAgMCAvKiBkZWZhdWx0IHNlbnNvciBjbG9jayBkaXZpc29yIHZhbHVlICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdsb2JhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBXOTk2OENGX01PRFVMRV9OQU1FICAgICAiVjRMIGRyaXZlciBmb3IgVzk5Nls4N11DRiBKUEVHIFVTQiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1YWwgTW9kZSBDYW1lcmEgQ2hpcCIKKyNkZWZpbmUgVzk5NjhDRl9NT0RVTEVfVkVSU0lPTiAgIjE6MS4zMy1iYXNpYyIKKyNkZWZpbmUgVzk5NjhDRl9NT0RVTEVfQVVUSE9SICAgIihDKSAyMDAyLTIwMDQgTHVjYSBSaXNvbGlhIgorI2RlZmluZSBXOTk2OENGX0FVVEhPUl9FTUFJTCAgICAiPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IgorI2RlZmluZSBXOTk2OENGX01PRFVMRV9MSUNFTlNFICAiR1BMIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2luYm9uZF9pZF90YWJsZVtdID0geworCXsKKwkJLyogQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyBQbHVzICovCisJCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMDMpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykidzk5NjhjZiIsCisJfSwKKwl7CisJCS8qIEdlbmVyaWMgVzk5Nls4N11DRiBKUEVHIFVTQiBEdWFsIE1vZGUgQ2FtZXJhICovCisJCVVTQl9ERVZJQ0UoMHgxMDQ2LCAweDk5NjcpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykidzk5NjhjZiIsCisJfSwKKwl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qIFc5OTZbODddQ0YgY2FtZXJhIG1vZGVscywgaW50ZXJuYWwgaWRzOiAqLworZW51bSB3OTk2OGNmX21vZGVsX2lkIHsKKwlXOTk2OENGX01PRF9HRU5FUklDID0gMSwgLyogR2VuZXJpYyBXOTk2Wzg3XUNGIGJhc2VkIGRldmljZSAqLworCVc5OTY4Q0ZfTU9EX0NMVkJXR1AgPSAxMSwvKkNyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28gUGx1cyovCisJVzk5NjhDRl9NT0RfQURQVkRNQSA9IDIxLCAvKiBBcm9tYSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIEFERy01MDAwICovCisJVzk5ODZDRl9NT0RfQUFVID0gMzEsICAgICAvKiBBVmVyTWVkaWEgQVZlclRWIFVTQiAqLworCVc5OTY4Q0ZfTU9EX0NMVkJXRyA9IDM0LCAgLyogQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyAqLworCVc5OTY4Q0ZfTU9EX0xMID0gMzcsICAgICAgLyogTGVib24gTERDLTAzNUEgKi8KKwlXOTk2OENGX01PRF9FRUVNQyA9IDQwLCAgIC8qIEV6b25pY3MgRVotODAyIEVaTWVnYSBDYW0gKi8KKwlXOTk2OENGX01PRF9PT0UgPSA0MiwgICAgIC8qIE9tbmlWaXNpb24gT1Y4NjEwLUVERSAqLworCVc5OTY4Q0ZfTU9EX09EUFZETVBDID0gNDMsLyogT1BDT00gRGlnaSBQZW4gVkdBIER1YWwgTW9kZSBQZW4gQ2FtZXJhICovCisJVzk5NjhDRl9NT0RfUERQSUkgPSA0NiwgICAvKiBQcmV0ZWMgRGlnaSBQZW4tSUkgKi8KKwlXOTk2OENGX01PRF9QRFA0ODAgPSA0OSwgIC8qIFByZXRlYyBEaWdpUGVuLTQ4MCAqLworfTsKKworZW51bSB3OTk2OGNmX2ZyYW1lX3N0YXR1cyB7CisJRl9SRUFEWSwgICAgICAgICAgICAvKiBmaW5pc2hlZCBncmFiYmluZyAmIHJlYWR5IHRvIGJlIHJlYWQvc3luY2VkICovCisJRl9HUkFCQklORywgICAgICAgICAvKiBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGX0VSUk9SLCAgICAgICAgICAgIC8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworCUZfVU5VU0VEICAgICAgICAgICAgLyogdW51c2VkIChubyBWSURJT0NNQ0FQVFVSRSkgKi8KK307CisKK3N0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgeworCXZvaWQqIGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdTMyIGxlbmd0aDsKKwlpbnQgbnVtYmVyOworCWVudW0gdzk5NjhjZl9mcmFtZV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIG5leHQ7CisJdTggcXVldWVkOworfTsKKworZW51bSB3OTk2OGNmX3ZwcF9mbGFnIHsKKwlWUFBfTk9ORSA9IDB4MDAsCisJVlBQX1VQU0NBTEUgPSAweDAxLAorCVZQUF9TV0FQX1lVVl9CWVRFUyA9IDB4MDIsCisJVlBQX0RFQ09NUFJFU1NJT04gPSAweDA0LAorCVZQUF9VWVZZX1RPX1JHQlggPSAweDA4LAorfTsKKworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3ZwcF90KiB3OTk2OGNmX3ZwcDsKK3N0YXRpYyBERUNMQVJFX01VVEVYKHc5OTY4Y2ZfdnBwbW9kX2xvY2spOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHc5OTY4Y2ZfdnBwbW9kX3dhaXQpOworCitzdGF0aWMgTElTVF9IRUFEKHc5OTY4Y2ZfZGV2X2xpc3QpOyAvKiBoZWFkIG9mIFY0TCByZWdpc3RlcmVkIGNhbWVyYXMgbGlzdCAqLworc3RhdGljIERFQ0xBUkVfTVVURVgodzk5NjhjZl9kZXZsaXN0X3NlbSk7IC8qIHNlbWFwaG9yZSBmb3IgbGlzdCB0cmF2ZXJzYWwgKi8KKworc3RhdGljIERFQ0xBUkVfUldTRU0odzk5NjhjZl9kaXNjb25uZWN0KTsgLyogcHJldmVudCByYWNlcyB3aXRoIG9wZW4oKSAqLworCisvKiBNYWluIGRldmljZSBkcml2ZXIgc3RydWN0dXJlICovCitzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgZGV2OyAvKiBkZXZpY2Ugc3RydWN0dXJlICovCisKKwllbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgaWQ7ICAgLyogcHJpdmF0ZSBkZXZpY2UgaWRlbnRpZmllciAqLworCisJc3RydWN0IHZpZGVvX2RldmljZSogdjRsZGV2OyAvKiAtPiBWNEwgc3RydWN0dXJlICovCisJc3RydWN0IGxpc3RfaGVhZCB2NGxsaXN0OyAgICAvKiBlbnRyeSBvZiB0aGUgbGlzdCBvZiBWNEwgY2FtZXJhcyAqLworCisJc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsgICAgICAgICAgIC8qIC0+IG1haW4gVVNCIHN0cnVjdHVyZSAqLworCXN0cnVjdCB1cmIqIHVyYltXOTk2OENGX1VSQlNdOyAgICAgICAvKiAtPiBVU0IgcmVxdWVzdCBibG9jayBzdHJ1Y3RzICovCisJdm9pZCogdHJhbnNmZXJfYnVmZmVyW1c5OTY4Q0ZfVVJCU107IC8qIC0+IElTTyB0cmFuc2ZlciBidWZmZXJzICovCisJdTE2KiBjb250cm9sX2J1ZmZlcjsgICAgICAgICAgICAgICAgIC8qIC0+IGJ1ZmZlciBmb3IgY29udHJvbCByZXEuKi8KKwl1MTYqIGRhdGFfYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyogLT4gZGF0YSB0byBzZW5kIHRvIHRoZSBGU0IgKi8KKworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVbVzk5NjhDRl9NQVhfQlVGRkVSU107CisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCBmcmFtZV90bXA7IC8qIHRlbXBvcmFyeSBmcmFtZSAqLworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVfdnBwOyAvKiBoZWxwZXIgZnJhbWUuKi8KKwlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBmcmFtZV9jdXJyZW50OyAvKiAtPiBmcmFtZSBiZWluZyBncmFiYmVkICovCisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogcmVxdWVzdGVkX2ZyYW1lW1c5OTY4Q0ZfTUFYX0JVRkZFUlNdOworCisJdTggbWF4X2J1ZmZlcnMsICAgLyogbnVtYmVyIG9mIHJlcXVlc3RlZCBidWZmZXJzICovCisJICAgZm9yY2VfcGFsZXR0ZSwgLyogeWVzPTEvbm89MCAqLworCSAgIGZvcmNlX3JnYiwgICAgIC8qIHJlYWQgUkdCIGluc3RlYWQgb2YgQkdSLCB5ZXM9MSwgbm89MCAqLworCSAgIGRvdWJsZV9idWZmZXIsIC8qIGhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgeWVzPTEvbm89MCAqLworCSAgIGNsYW1waW5nLCAgICAgIC8qIHZpZGVvIGRhdGEgY2xhbXBpbmcgeWVzPTEvbm89MCAqLworCSAgIGZpbHRlcl90eXBlLCAgIC8qIDA9ZGlzYWJsZWQsIDE9MyB0YXAsIDI9NSB0YXAgZmlsdGVyICovCisJICAgY2FwdHVyZSwgICAgICAgLyogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCisJICAgbGFyZ2V2aWV3LCAgICAgLyogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCisJICAgZGVjb21wcmVzc2lvbiwgLyogMD1kaXNhYmxlZCwgMT1mb3JjZWQsIDI9YWxsb3dlZCAqLworCSAgIHVwc2NhbGluZzsgICAgIC8qIHNvZnR3YXJlIGltYWdlIHNjYWxpbmcsIDA9ZW5hYmxlZCwgMT1kaXNhYmxlZCAqLworCisJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdHVyZTsgLyogY3VycmVudCBwaWN0dXJlIHNldHRpbmdzICovCisJc3RydWN0IHZpZGVvX3dpbmRvdyB3aW5kb3c7ICAgLyogY3VycmVudCB3aW5kb3cgc2V0dGluZ3MgKi8KKworCXUxNiBod19kZXB0aCwgICAgLyogZGVwdGggKHVzZWQgYnkgdGhlIGNoaXApICovCisJICAgIGh3X3BhbGV0dGUsICAvKiBwYWxldHRlICh1c2VkIGJ5IHRoZSBjaGlwKSAqLworCSAgICBod193aWR0aCwgICAgLyogd2lkdGggKHVzZWQgYnkgdGhlIGNoaXApICovCisJICAgIGh3X2hlaWdodCwgICAvKiBoZWlnaHQgKHVzZWQgYnkgdGhlIGNoaXApICovCisJICAgIGhzX3BvbGFyaXR5LCAvKiAwPW5lZ2F0aXZlIHN5bmMgcHVsc2UsIDE9cG9zaXRpdmUgc3luYyBwdWxzZSAqLworCSAgICB2c19wb2xhcml0eSwgLyogMD1uZWdhdGl2ZSBzeW5jIHB1bHNlLCAxPXBvc2l0aXZlIHN5bmMgcHVsc2UgKi8KKwkgICAgc3RhcnRfY3JvcHgsIC8qIHBpeGVscyBmcm9tIEhTIGluYWN0aXZlIGVkZ2UgdG8gMXN0IGNyb3BwZWQgcGl4ZWwqLworCSAgICBzdGFydF9jcm9weTsgLyogcGl4ZWxzIGZyb20gVlMgaW5hY3RpdmUgZWRnZSB0byAxc3QgY3JvcHBlZCBwaXhlbCovCisKKwllbnVtIHc5OTY4Y2ZfdnBwX2ZsYWcgdnBwX2ZsYWc7IC8qIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lcyBpbiB1c2UgKi8KKworCXU4IG5idWZmZXJzLCAgICAgIC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgZnJhbWUgYnVmZmVycyAqLworCSAgIGFsdHNldHRpbmcsICAgIC8qIGNhbWVyYSBhbHRlcm5hdGUgc2V0dGluZyAqLworCSAgIGRpc2Nvbm5lY3RlZCwgIC8qIGZsYWc6IHllcz0xLCBubz0wICovCisJICAgbWlzY29uZmlndXJlZCwgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KKwkgICB1c2VycywgICAgICAgICAvKiBmbGFnOiBudW1iZXIgb2YgdXNlcnMgaG9sZGluZyB0aGUgZGV2aWNlICovCisJICAgc3RyZWFtaW5nOyAgICAgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KKworCXU4IHNlbnNvcl9pbml0aWFsaXplZDsgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KKworCS8qIERldGVybWluZWQgYnkgdGhlIGltYWdlIHNlbnNvciB0eXBlOiAqLworCWludCBzZW5zb3IsICAgICAgIC8qIHR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKENDXyopICovCisJICAgIG1vbm9jaHJvbWU7ICAgLyogaW1hZ2Ugc2Vuc29yIGlzIChwcm9iYWJseSkgbW9ub2Nocm9tZSAqLworCXUxNiBtYXh3aWR0aCwgICAgIC8qIG1heGltdW0gd2lkdGggc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KKwkgICAgbWF4aGVpZ2h0LCAgICAvKiBtYXhpbXVtIGhlaWdodCBzdXBwb3J0ZWQgYnkgdGhlIGltYWdlIHNlbnNvciAqLworCSAgICBtaW53aWR0aCwgICAgIC8qIG1pbmltdW0gd2lkdGggc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KKwkgICAgbWluaGVpZ2h0OyAgICAvKiBtaW5pbXVtIGhlaWdodCBzdXBwb3J0ZWQgYnkgdGhlIGltYWdlIHNlbnNvciAqLworCXU4ICBhdXRvX2JydCwgICAgIC8qIGF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIGZsYWcgKi8KKwkgICAgYXV0b19leHAsICAgICAvKiBhdXRvIGV4cG9zdXJlIGVuYWJsZWQgZmxhZyAqLworCSAgICBiYWNrbGlnaHQsICAgIC8qIGJhY2tsaWdodCBleHBvc3VyZSBhbGdvcml0aG0gZmxhZyAqLworCSAgICBtaXJyb3IsICAgICAgIC8qIGltYWdlIGlzIHJldmVyc2VkIGhvcml6b250YWxseSAqLworCSAgICBsaWdodGZyZXEsICAgIC8qIHBvd2VyIChsaWdodGluZykgZnJlcXVlbmN5ICovCisJICAgIGJhbmRmaWx0OyAgICAgLyogYmFuZGluZyBmaWx0ZXIgZW5hYmxlZCBmbGFnICovCisJczggIGNsb2NrZGl2OyAgICAgLyogY2xvY2sgZGl2aXNvciAqLworCisJLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQqIHNlbnNvcl9jbGllbnQ7CisKKwkvKiBMb2NrcyAqLworCXN0cnVjdCBzZW1hcGhvcmUgZGV2X3NlbSwgICAgLyogZm9yIHByb2JlLCBkaXNjb25uZWN0LG9wZW4gYW5kIGNsb3NlICovCisJICAgICAgICAgICAgICAgICBmaWxlb3Bfc2VtOyAvKiBmb3IgcmVhZCBhbmQgaW9jdGwgKi8KKwlzcGlubG9ja190IHVyYl9sb2NrLCAgIC8qIGZvciBzdWJtaXRfdXJiKCkgYW5kIHVubGlua191cmIoKSAqLworCSAgICAgICAgICAgZmxpc3RfbG9jazsgLyogZm9yIHJlcXVlc3RlZCBmcmFtZSBsaXN0IGFjY2Vzc2VzICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbiwgd2FpdF9xdWV1ZTsKKworCWNoYXIgY29tbWFuZFsxNl07IC8qIG5hbWUgb2YgdGhlIHByb2dyYW0gaG9sZGluZyB0aGUgZGV2aWNlICovCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgZm9yIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBEQkcKKyN1bmRlZiBLREJHCisjaWZkZWYgVzk5NjhDRl9ERUJVRworLyogRm9yIGRldmljZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KKyMJZGVmaW5lIERCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoICgoc3BlY2lmaWNfZGVidWcpICYmIChkZWJ1ZyA9PSAobGV2ZWwpKSkgfHwgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgKCghc3BlY2lmaWNfZGVidWcpICYmIChkZWJ1ZyA+PSAobGV2ZWwpKSkgKSB7ICAgICAgICAgICAgICAgICAgICBcCisJCWlmICgobGV2ZWwpID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2VycigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID09IDIgfHwgKGxldmVsKSA9PSAzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9pbmZvKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA9PSA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlkZXZfd2FybigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCisJCWVsc2UgaWYgKChsZXZlbCkgPj0gNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgXAorCQkJICAgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisvKiBGb3IgZ2VuZXJpYyBrZXJuZWwgKG5vdCBkZXZpY2Ugc3BlY2lmaWMpIG1lc3NhZ2VzICovCisjCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCAoKHNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPT0gKGxldmVsKSkpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICgoIXNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPj0gKGxldmVsKSkpICkgeyAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoKGxldmVsKSA+PSAxICYmIChsZXZlbCkgPD0gNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByX2luZm8oInc5OTY4Y2Y6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA+PSA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcl9kZWJ1Zygidzk5NjhjZjogWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sICBcCisJCQkgICAgICAgICBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisJLyogTm90IGRlYnVnZ2luZzogbm90aGluZyAqLworIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsKKyMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOworI2VuZGlmCisKKyN1bmRlZiBQREJHCisjZGVmaW5lIFBEQkcoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsKKworI3VuZGVmIFBEQkdHCisjZGVmaW5lIFBEQkdHKGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOyAvKiBub3RoaW5nOiBpdCdzIGEgcGxhY2Vob2xkZXIgKi8KKworI2VuZGlmIC8qIF9XOTk2OENGX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX2RlY29kZXIuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfZGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZmFjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX2RlY29kZXIuaApAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWaWRlbyBkZWNvZGVyIGZvciB0aGUgVzk5Nls4N11DRiBkcml2ZXIgZm9yIExpbnV4LiAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgMjAwNCBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9XOTk2OENGX0RFQ09ERVJfSF8KKyNkZWZpbmUgX1c5OTY4Q0ZfREVDT0RFUl9IXworCisvKiBDb21tZW50L3VuY29tbWVudCB0aGlzIGZvciBoaWdoL2xvdyBxdWFsaXR5IG9mIGNvbXByZXNzZWQgdmlkZW8gKi8KKyNkZWZpbmUgVzk5NjhDRl9ERUNfRkFTVF9MT1dRVUFMSVRZX1ZJREVPCisKKyNpZmRlZiBXOTk2OENGX0RFQ19GQVNUX0xPV1FVQUxJVFlfVklERU8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFlfUVVBTlRBQkxFWzY0XSA9IHsKKwkxNiwgIDExLCAgMTAsICAxNiwgIDI0LCAgNDAsICA1MSwgIDYxLAorCTEyLCAgMTIsICAxNCwgIDE5LCAgMjYsICA1OCwgIDYwLCAgNTUsCisJMTQsICAxMywgIDE2LCAgMjQsICA0MCwgIDU3LCAgNjksICA1NiwKKwkxNCwgIDE3LCAgMjIsICAyOSwgIDUxLCAgODcsICA4MCwgIDYyLAorCTE4LCAgMjIsICAzNywgIDU2LCAgNjgsIDEwOSwgMTAzLCAgNzcsCisJMjQsICAzNSwgIDU1LCAgNjQsICA4MSwgMTA0LCAxMTMsICA5MiwKKwk0OSwgIDY0LCAgNzgsICA4NywgMTAzLCAxMjEsIDEyMCwgMTAxLAorCTcyLCAgOTIsICA5NSwgIDk4LCAxMTIsIDEwMCwgMTAzLCAgOTkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFVWX1FVQU5UQUJMRVs2NF0gPSB7CisJMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwKKwkxOCwgIDIxLCAgMjYsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LAorCTI0LCAgMjYsICA1NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAorCTk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5Cit9OworI2Vsc2UKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFlfUVVBTlRBQkxFWzY0XSA9IHsKKwkgOCwgICA1LCAgIDUsICAgOCwgIDEyLCAgMjAsICAyNSwgIDMwLAorCSA2LCAgIDYsICAgNywgICA5LCAgMTMsICAyOSwgIDMwLCAgMjcsCisJIDcsICAgNiwgICA4LCAgMTIsICAyMCwgIDI4LCAgMzQsICAyOCwKKwkgNywgICA4LCAgMTEsICAxNCwgIDI1LCAgNDMsICA0MCwgIDMxLAorCSA5LCAgMTEsICAxOCwgIDI4LCAgMzQsICA1NCwgIDUxLCAgMzgsCisJMTIsICAxNywgIDI3LCAgMzIsICA0MCwgIDUyLCAgNTYsICA0NiwKKwkyNCwgIDMyLCAgMzksICA0MywgIDUxLCAgNjAsICA2MCwgIDUwLAorCTM2LCAgNDYsICA0NywgIDQ5LCAgNTYsICA1MCwgIDUxLCAgNDkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFVWX1FVQU5UQUJMRVs2NF0gPSB7CisJIDgsICAgOSwgIDEyLCAgMjMsICA0OSwgIDQ5LCAgNDksICA0OSwKKwkgOSwgIDEwLCAgMTMsICAzMywgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTEyLCAgMTMsICAyOCwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJMjMsICAzMywgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5Cit9OworI2VuZGlmCisKKyNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX0NPUlJVUFRFRF9EQVRBICAtMQorI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfQlVGX09WRVJGTE9XICAgIC0yCisjZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9OT19TT0kgICAgICAgICAgLTMKKyNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX05PX1NPRjAgICAgICAgICAtNAorI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfTk9fU09TICAgICAgICAgIC01CisjZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9OT19FT0kgICAgICAgICAgLTYKKworZXh0ZXJuIHZvaWQgdzk5NjhjZl9pbml0X2RlY29kZXIodm9pZCk7CitleHRlcm4gaW50IHc5OTY4Y2ZfY2hlY2tfaGVhZGVycyhjb25zdCB1bnNpZ25lZCBjaGFyKiBQaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBCVUZfU0laRSk7CitleHRlcm4gaW50IHc5OTY4Y2ZfZGVjb2RlKGNvbnN0IGNoYXIqIFBpbiwgY29uc3QgdW5zaWduZWQgbG9uZyBCVUZfU0laRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIFcsIGNvbnN0IHVuc2lnbmVkIEgsIGNoYXIqIFBvdXQpOworCisjZW5kaWYgLyogX1c5OTY4Q0ZfREVDT0RFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl92cHAuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfdnBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1MzE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfdnBwLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW50ZXJmYWNlIGZvciB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgZnVuY3Rpb25zIGZvciB0aGUgVzk5Nls4N11DRiBkcml2ZXIgKgorICogZm9yIExpbnV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVzk5NjhDRl9WUFBfSF8KKyNkZWZpbmUgX1c5OTY4Q0ZfVlBQX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IHc5OTY4Y2ZfdnBwX3QgeworCXN0cnVjdCBtb2R1bGUqIG93bmVyOworCWludCAoKmNoZWNrX2hlYWRlcnMpKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBjb25zdCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCpkZWNvZGUpKGNvbnN0IGNoYXIqLCBjb25zdCB1bnNpZ25lZCBsb25nLCBjb25zdCB1bnNpZ25lZCwKKwkgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkLCBjaGFyKik7CisJdm9pZCAoKnN3YXBfeXV2Ynl0ZXMpKHZvaWQqLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqdXl2eV90b19yZ2J4KSh1OCosIHVuc2lnbmVkIGxvbmcsIHU4KiwgdTE2LCB1OCk7CisJdm9pZCAoKnNjYWxlX3VwKSh1OCosIHU4KiwgdTE2LCB1MTYsIHUxNiwgdTE2LCB1MTYpOworCisJdTggYnVzeTsgLyogcmVhZC1vbmx5IGZsYWc6IG1vZHVsZSBpcy9pcyBub3QgaW4gdXNlICovCit9OworCitleHRlcm4gaW50IHc5OTY4Y2ZfdnBwbW9kX3JlZ2lzdGVyKHN0cnVjdCB3OTk2OGNmX3ZwcF90Kik7CitleHRlcm4gaW50IHc5OTY4Y2ZfdnBwbW9kX2RlcmVnaXN0ZXIoc3RydWN0IHc5OTY4Y2ZfdnBwX3QqKTsKKworI2VuZGlmIC8qIF9XOTk2OENGX1ZQUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODk2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKQEAgLTAsMCArMSwxNTIgQEAKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyMKK2NvbW1lbnQgIlVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9FTUk2MgorCXRyaXN0YXRlICJFTUkgNnwybSBVU0IgQXVkaW8gaW50ZXJmYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBsb2FkcyBmaXJtd2FyZSB0byBFbWFnaWMgRU1JIDZ8Mm0gbG93IGxhdGVuY3kgVVNCCisJICBBdWRpbyBhbmQgTWlkaSBpbnRlcmZhY2UuCisKKwkgIEFmdGVyIGZpcm13YXJlIGxvYWQgdGhlIGRldmljZSBpcyBoYW5kbGVkIHdpdGggc3RhbmRhcmQgbGludXgKKwkgIFVTQiBBdWRpbyBkcml2ZXIuCisKKwkgIFRoaXMgY29kZSBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKKwkgIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KS4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXVkaW8uIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYQorCSAgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KKworY29uZmlnIFVTQl9FTUkyNgorCXRyaXN0YXRlICJFTUkgMnw2IFVTQiBBdWRpbyBpbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGxvYWRzIGZpcm13YXJlIHRvIEVtYWdpYyBFTUkgMnw2IGxvdyBsYXRlbmN5IFVTQgorCSAgQXVkaW8gaW50ZXJmYWNlLgorCisJICBBZnRlciBmaXJtd2FyZSBsb2FkIHRoZSBkZXZpY2UgaXMgaGFuZGxlZCB3aXRoIHN0YW5kYXJkIGxpbnV4CisJICBVU0IgQXVkaW8gZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbWkyNi4KKworY29uZmlnIFVTQl9BVUVSU1dBTEQKKwl0cmlzdGF0ZSAiVVNCIEF1ZXJzd2FsZCBJU0ROIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIEF1ZXJzd2FsZCBVU0IgSVNETiBEZXZpY2UKKwkgIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXVlcnN3YWxkLgorCitjb25maWcgVVNCX1JJTzUwMAorCXRyaXN0YXRlICJVU0IgRGlhbW9uZCBSaW81MDAgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgUmlvNTAwIG1wMyBwbGF5ZXIgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gUGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcmlvLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByaW81MDAuCisKK2NvbmZpZyBVU0JfTEVHT1RPV0VSCisJdHJpc3RhdGUgIlVTQiBMZWdvIEluZnJhcmVkIFRvd2VyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIExlZ28gSW5mcmFyZWQgVG93ZXIgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVGhpcyBjb2RlIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQorCSAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsZWdvdXNidG93ZXIuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMKKwkgIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCisKK2NvbmZpZyBVU0JfTENECisJdHJpc3RhdGUgIlVTQiBMQ0QgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gVVNCTENEIHRvIHlvdXIgY29tcHV0ZXIncworCSAgVVNCIHBvcnQuIFRoZSBVU0JMQ0QgaXMgYSBzbWFsbCBVU0IgaW50ZXJmYWNlIGJvYXJkIGZvcgorCSAgYWxwaGFudW1lcmljIExDRCBtb2R1bGVzLiBTZWUgPGh0dHA6Ly93d3cudXNibGNkLmRlLz4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JsY2QuCisKK2NvbmZpZyBVU0JfTEVECisJdHJpc3RhdGUgIlVTQiBMRUQgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gVVNCTEVEIGRldmljZSB0byB5b3VyIAorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibGVkLgorCitjb25maWcgVVNCX0NZVEhFUk0KKwl0cmlzdGF0ZSAiQ3lwcmVzcyBVU0IgdGhlcm1vbWV0ZXIgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBDeXByZXNzIFVTQiB0aGVybW9tZXRlcgorCSAgZGV2aWNlIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBkZXZpY2UgaXMgYWxzbyBrbm93bgorCSAgYXMgdGhlIEN5cHJlc3MgVVNCIFN0YXJ0ZXIga2l0IG9yIGRlbW8gYm9hcmQuIFRoZSBFbGVrdG9yCisJICBtYWdhemluZSBwdWJsaXNoZWQgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgZGV2aWNlIGluIGlzc3VlIAorCSAgIzI5MS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3l0aGVybS4KKworY29uZmlnIFVTQl9QSElER0VUS0lUCisJdHJpc3RhdGUgIlVTQiBQaGlkZ2V0S2l0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0S2l0IFVTQiBkZXZpY2UgZnJvbQorCSAgUGhpZGdldHMgSW5jLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0a2l0LgorCitjb25maWcgVVNCX1BISURHRVRTRVJWTworCXRyaXN0YXRlICJVU0IgUGhpZGdldFNlcnZvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gMSBvciA0IE1vdG9yIFBoaWRnZXRTZXJ2byAKKwkgIHNlcnZvIGNvbnRyb2xsZXIgdmVyc2lvbiAyLjAgb3IgMy4wLgorCisJICBQaGlkZ2V0cyBJbmMuIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0c2Vydm8uCisKK2NvbmZpZyBVU0JfSURNT1VTRQorCXRyaXN0YXRlICJTaWVtZW5zIElEIFVTQiBNb3VzZSBGaW5nZXJwcmludCBzZW5zb3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBmaW5nZXJwcmludCBzZW5zb3Igb24KKwkgIHRoZSBTaWVtZW5zIElEIE1vdXNlLiBUaGVyZSBpcyBhbHNvIGEgU2llbWVucyBJRCBNb3VzZQorCSAgX1Byb2Zlc3Npb25hbF8sIHdoaWNoIGhhcyBub3QgYmVlbiB0ZXN0ZWQgd2l0aCB0aGlzIGRyaXZlciwKKwkgIGJ1dCB1c2VzIHRoZSBzYW1lIHNlbnNvciBhbmQgbWF5IHRoZXJlZm9yZSB3b3JrLgorCisJICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGVudHJ5ICIvZGV2L2lkbW91c2VYIiBvciAiL2Rldi91c2IvaWRtb3VzZVgiLAorCSAgd2hpY2ggY2FuIGJlIHVzZWQgYnksIGUuZy4sImNhdCAvZGV2L2lkbW91c2UwID4gZmluZ2VycHJpbnQucG5tIi4KKworCSAgU2VlIGFsc28gPGh0dHA6Ly93d3cuZnMudHVtLmRlL35lY2h0bGVyL2lkbW91c2UvPi4KKworc291cmNlICJkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9LY29uZmlnIgorCitjb25maWcgVVNCX1RFU1QKKwl0cmlzdGF0ZSAiVVNCIHRlc3RpbmcgZHJpdmVyIChERVZFTE9QTUVOVCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0RFVklDRUZTICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGlzIGZvciB0ZXN0aW5nIGhvc3QgY29udHJvbGxlciBzb2Z0d2FyZS4gIEl0IGlzIHVzZWQKKwkgIHdpdGggc3BlY2lhbGl6ZWQgZGV2aWNlIGZpcm13YXJlIGZvciByZWdyZXNzaW9uIGFuZCBzdHJlc3MgdGVzdGluZywKKwkgIHRvIGhlbHAgcHJldmVudCBwcm9ibGVtcyBmcm9tIGNyb3BwaW5nIHVwIHdpdGggInJlYWwiIGRyaXZlcnMuCisKKwkgIFNlZSA8aHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYnRlc3QvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiwKKwkgIGluY2x1ZGluZyBzYW1wbGUgdGVzdCBkZXZpY2UgZmlybXdhcmUgYW5kICJob3cgdG8gdXNlIGl0Ii4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzODE0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIFVTQiBkcml2ZXJzCisjICh0aGUgb25lcyB0aGF0IGRvbid0IGZpdCBpbnRvIGFueSBvdGhlciBjYXRlZ29yaWVzKQorIworCitvYmotJChDT05GSUdfVVNCX0FVRVJTV0FMRCkJKz0gYXVlcnN3YWxkLm8KK29iai0kKENPTkZJR19VU0JfQ1lUSEVSTSkJKz0gY3l0aGVybS5vCitvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gZW1pMjYubworb2JqLSQoQ09ORklHX1VTQl9FTUk2MikJCSs9IGVtaTYyLm8KK29iai0kKENPTkZJR19VU0JfSURNT1VTRSkJKz0gaWRtb3VzZS5vCitvYmotJChDT05GSUdfVVNCX0xDRCkJCSs9IHVzYmxjZC5vCitvYmotJChDT05GSUdfVVNCX0xFRCkJCSs9IHVzYmxlZC5vCitvYmotJChDT05GSUdfVVNCX0xFR09UT1dFUikJKz0gbGVnb3VzYnRvd2VyLm8KK29iai0kKENPTkZJR19VU0JfUEhJREdFVEtJVCkJKz0gcGhpZGdldGtpdC5vCitvYmotJChDT05GSUdfVVNCX1BISURHRVRTRVJWTykJKz0gcGhpZGdldHNlcnZvLm8KK29iai0kKENPTkZJR19VU0JfUklPNTAwKQkrPSByaW81MDAubworb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCitvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gdXNzNzIwLm8KKworb2JqLSQoQ09ORklHX1VTQl9TSVNVU0JWR0EpCSs9IHNpc3VzYnZnYS8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTMwYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtMCwwICsxLDIxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgICAgIGF1ZXJzd2FsZC5jICAtLSAgQXVlcnN3YWxkIFBCWC9TeXN0ZW0gVGVsZXBob25lIHVzYiBkcml2ZXIuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgIFdvbGZnYW5nIE3DvGVzICh3b2xmZ2FuZ0Bpa3N3LW11ZWVzLmRlKQorICoKKyAqICAgICAgVmVyeSBtdWNoIGNvZGUgb2YgdGhpcyBkcml2ZXIgaXMgYm9ycm93ZWQgZnJvbSBkYWJ1c2IuYyAoRGV0aSBGbGllZ2wpCisgKiAgICAgIGFuZCBmcm9tIHRoZSBVU0IgU2tlbGV0b24gZHJpdmVyIChHcmVnIEtyb2FoLUhhcnRtYW4pLiBUaGFuayB5b3UuCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTdGFuZGFyZCBMaW51eCBtb2R1bGUgaW5jbHVkZSBmaWxlcyAqLworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI3VuZGVmIERFQlVHICAgCQkvKiBpbmNsdWRlIGRlYnVnIG1hY3JvcyB1bnRpbCBpdCdzIGRvbmUJKi8KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlYnVnIHN1cHBvcnQgCQkJCQkJICAgICAqLworI2lmZGVmIERFQlVHCisjZGVmaW5lIGR1bXAoIGFkciwgbGVuKSBcCitkbyB7CQkJXAorCXVuc2lnbmVkIGludCB1OwlcCisJcHJpbnRrIChLRVJOX0RFQlVHKTsgXAorCWZvciAodSA9IDA7IHUgPCBsZW47IHUrKykgXAorCQlwcmludGsgKCIgJTAyWCIsIGFkclt1XSAmIDB4RkYpOyBcCisJcHJpbnRrICgiXG4iKTsgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGR1bXAoIGFkciwgbGVuKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjkuMTEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICJXb2xmZ2FuZyBNw7xlcyA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJBdWVyc3dhbGQgUEJYL1N5c3RlbSBUZWxlcGhvbmUgdXNiIGRyaXZlciIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBBdWVyc3dhbGQgVVNCIGRyaXZlciAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEF1ZXJzd2FsZCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgSURfQVVFUlNXQUxEICAJMHgwOUJGCisKKyNkZWZpbmUgQVVFUl9NSU5PUl9CQVNFCTExMgkvKiBhdWVyc3dhbGQgZHJpdmVyIG1pbm9yIG51bWJlciAqLworCisvKiB3ZSBjYW4gaGF2ZSB1cCB0byB0aGlzIG51bWJlciBvZiBkZXZpY2UgcGx1Z2dlZCBpbiBhdCBvbmNlICovCisjZGVmaW5lIEFVRVJfTUFYX0RFVklDRVMgMTYKKworCisvKiBOdW1iZXIgb2YgcmVhZCBidWZmZXJzIGZvciBlYWNoIGRldmljZSAqLworI2RlZmluZSBBVV9SQlVGRkVSUyAgICAgMTAKKworLyogTnVtYmVyIG9mIGNoYWluIGVsZW1lbnRzIGZvciBlYWNoIGNvbnRyb2wgY2hhaW4gKi8KKyNkZWZpbmUgQVVDSF9FTEVNRU5UUyAgIDIwCisKKy8qIE51bWJlciBvZiByZXRyaWVzIGluIGNvbW11bmljYXRpb24gKi8KKyNkZWZpbmUgQVVfUkVUUklFUwkxMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogdmVuZG9yIHNwZWNpZmljIHByb3RvY29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEhlYWRlciBCeXRlICovCisjZGVmaW5lIEFVSF9JTkRJUk1BU0sgICAweDgwICAgIC8qIG1hc2sgZm9yIGRpcmVjdC9pbmRpcmVjdCBiaXQgKi8KKyNkZWZpbmUgQVVIX0RJUkVDVCAgICAgIDB4MDAgICAgLyogZGF0YSBpcyBmb3IgVVNCIGRldmljZSAqLworI2RlZmluZSBBVUhfSU5ESVJFQ1QgICAgMHg4MCAgICAvKiBVU0IgZGV2aWNlIGlzIHJlbGF5ICovCisKKyNkZWZpbmUgQVVIX1NQTElUTUFTSyAgIDB4NDAgICAgLyogbWFzayBmb3Igc3BsaXQgYml0ICovCisjZGVmaW5lIEFVSF9VTlNQTElUICAgICAweDAwICAgIC8qIGRhdGEgYmxvY2sgaXMgZnVsbC1zaXplICovCisjZGVmaW5lIEFVSF9TUExJVCAgICAgICAweDQwICAgIC8qIGRhdGEgYmxvY2sgaXMgcGFydCBvZiBhIGxhcmdlciBvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LWJ5dGUgZm9sbG93cyAqLworCisjZGVmaW5lIEFVSF9UWVBFTUFTSyAgICAweDNGICAgIC8qIG1hc2sgZm9yIHR5cGUgb2YgZGF0YSB0cmFuc2ZlciAqLworI2RlZmluZSBBVUhfVFlQRVNJWkUgICAgMHg0MCAgICAvKiBkaWZmZXJlbnQgdHlwZXMgKi8KKyNkZWZpbmUgQVVIX0RDSEFOTkVMICAgIDB4MDAgICAgLyogRCBjaGFubmVsIGRhdGEgKi8KKyNkZWZpbmUgQVVIX0IxQ0hBTk5FTCAgIDB4MDEgICAgLyogQjEgY2hhbm5lbCB0cmFuc3BhcmVudCAqLworI2RlZmluZSBBVUhfQjJDSEFOTkVMICAgMHgwMiAgICAvKiBCMiBjaGFubmVsIHRyYW5zcGFyZW50ICovCisvKiAgICAgICAgICAgICAgICAweDAzLi4weDBGICAgICAgIHJlc2VydmVkIGZvciBkcml2ZXIgaW50ZXJuYWwgdXNlICovCisjZGVmaW5lIEFVSF9DT01NQU5EICAgICAweDEwICAgIC8qIENvbW1hbmQgY2hhbm5lbCAqLworI2RlZmluZSBBVUhfQlBST1QgICAgICAgMHgxMSAgICAvKiBDb25maWd1cmF0aW9uIGJsb2NrIHByb3RvY29sICovCisjZGVmaW5lIEFVSF9EUFJPVEFOQSAgICAweDEyICAgIC8qIEQgY2hhbm5lbCBwcm90b2NvbCBhbmFseXplciAqLworI2RlZmluZSBBVUhfVEFQSSAgICAgICAgMHgxMyAgICAvKiB0ZWxlcGhvbmUgYXBpIGRhdGEgKEFURCkgKi8KKy8qICAgICAgICAgICAgICAgIDB4MTQuLjB4M0YgICAgICAgcmVzZXJ2ZWQgZm9yIG90aGVyIHByb3RvY29scyAqLworI2RlZmluZSBBVUhfVU5BU1NJR05FRCAgMHhGRiAgICAvKiBpZiBjaGFyIGRldmljZSBoYXMgbm8gYXNzaWduZWQgc2VydmljZSAqLworI2RlZmluZSBBVUhfRklSU1RVU0VSQ0ggMHgxMSAgICAvKiBmaXJzdCBjaGFubmVsIHdoaWNoIGlzIGF2YWlsYWJsZSBmb3IgZHJpdmVyIHVzZXJzICovCisKKyNkZWZpbmUgQVVIX1NJWkUJMSAJLyogU2l6ZSBvZiBIZWFkZXIgQnl0ZSAqLworCisvKiBTcGxpdCBCeXRlLiBPbmx5IHByZXNlbnQgaWYgc3BsaXQgYml0IGluIGhlYWRlciBieXRlIHNldC4qLworI2RlZmluZSBBVVNfU1RBUlRNQVNLICAgMHg4MCAgICAvKiBtYXNrIGZvciBmaXJzdCBibG9jayBvZiBzcGxpdHRlZCBmcmFtZSAqLworI2RlZmluZSBBVVNfRklSU1QgICAgICAgMHg4MCAgICAvKiBmaXJzdCBibG9jayAqLworI2RlZmluZSBBVVNfRk9MTE9XICAgICAgMHgwMCAgICAvKiBmb2xsb3dpbmcgYmxvY2sgKi8KKworI2RlZmluZSBBVVNfRU5ETUFTSyAgICAgMHg0MCAgICAvKiBtYXNrIGZvciBsYXN0IGJsb2NrIG9mIHNwbGl0dGVkIGZyYW1lICovCisjZGVmaW5lIEFVU19FTkQgICAgICAgICAweDQwICAgIC8qIGxhc3QgYmxvY2sgKi8KKyNkZWZpbmUgQVVTX05PRU5EICAgICAgIDB4MDAgICAgLyogbm90IHRoZSBsYXN0IGJsb2NrICovCisKKyNkZWZpbmUgQVVTX0xFTk1BU0sgICAgIDB4M0YgICAgLyogbWFzayBmb3IgYmxvY2sgbGVuZ3RoIGluZm9ybWF0aW9uICovCisKKy8qIFJlcXVlc3QgdHlwZXMgKi8KKyNkZWZpbmUgQVVUX1JSRVEgICAgICAgIChVU0JfRElSX0lOICB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUikgICAvKiBSZWFkIFJlcXVlc3QgKi8KKyNkZWZpbmUgQVVUX1dSRVEgICAgICAgIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUikgICAvKiBXcml0ZSBSZXF1ZXN0ICovCisKKy8qIFZlbmRvciBSZXF1ZXN0cyAqLworI2RlZmluZSBBVVZfR0VUSU5GTyAgICAgMHgwMCAgICAvKiBHZXREZXZpY2VJbmZvICovCisjZGVmaW5lIEFVVl9XQkxPQ0sgICAgICAweDAxICAgIC8qIFdyaXRlIEJsb2NrICovCisjZGVmaW5lIEFVVl9SQkxPQ0sgICAgICAweDAyICAgIC8qIFJlYWQgQmxvY2sgKi8KKyNkZWZpbmUgQVVWX0NIQU5ORUxDVEwgIDB4MDMgICAgLyogQ2hhbm5lbCBDb250cm9sICovCisjZGVmaW5lIEFVVl9EVU1NWQkweDA0CS8qIER1bW15IE91dCBmb3IgcmV0cnkgKi8KKworLyogRGV2aWNlIEluZm8gVHlwZXMgKi8KKyNkZWZpbmUgQVVESV9OVU1CQ0ggICAgIDB4MDAwMCAgLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBCIGNoYW5uZWxzICovCisjZGVmaW5lIEFVRElfT1VURlNJWkUgICAweDAwMDEgIC8qIFNpemUgb2YgT1VUIEIgY2hhbm5lbCBmaWZvcyAqLworI2RlZmluZSBBVURJX01CQ1RSQU5TICAgMHgwMDAyICAvKiBtYXguIEJsb2NrbGVuZ3RoIG9mIGNvbnRyb2wgdHJhbnNmZXIgKi8KKworLyogSW50ZXJydXB0IGVuZHBvaW50IGRlZmluaXRpb25zICovCisjZGVmaW5lIEFVX0lSUUVORFAgICAgICAxICAgICAgIC8qIEVuZHBvaW50IG51bWJlciAqLworI2RlZmluZSBBVV9JUlFDTURJRCAgICAgMTYgICAgICAvKiBDb21tYW5kLWJsb2NrIElEICovCisjZGVmaW5lIEFVX0JMT0NLUkRZICAgICAwICAgICAgIC8qIENvbW1hbmQ6IEJsb2NrIGRhdGEgcmVhZHkgb24gY3RsIGVuZHBvaW50ICovCisjZGVmaW5lIEFVX0lSUU1JTlNJWkUJNQkvKiBOci4gb2YgYnl0ZXMgZGVjb2RlZCBpbiB0aGlzIGRyaXZlciAqLworCisvKiBEZXZpY2UgU3RyaW5nIERlc2NyaXB0b3JzICovCisjZGVmaW5lIEFVU0lfVkVORE9SICAgCTEJLyogIkF1ZXJzd2FsZCBHbWJIICYgQ28uIEtHIiAqLworI2RlZmluZSBBVVNJX0RFVklDRSAgIAkyCS8qIE5hbWUgb2YgdGhlIERldmljZSAqLworI2RlZmluZSBBVVNJX1NFUklBTE5SIAkzCS8qIFNlcmlhbCBOdW1iZXIgKi8KKyNkZWZpbmUgQVVTSV9NU04gICAgICAJNAkvKiAiTVNOIC4uLiIgKGZpcnN0KSBNdWx0aXBsZSBTdWJzY3JpYmVyIE51bWJlciAqLworCisjZGVmaW5lIEFVU0lfRExFTgkxMDAJLyogTWF4LiBMZW5ndGggb2YgRGV2aWNlIERlc2NyaXB0aW9uICovCisKKyNkZWZpbmUgQVVWX1JFVFJZCTB4MTAxCS8qIEZpcnN0IEZpcm13YXJlIHZlcnNpb24gd2hpY2ggY2FuIGRvIGNvbnRyb2wgcmV0cmllcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRXh0ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIC8gSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhciBfX3VzZXIgKmJ1ZjsJLyogcmV0dXJuIGJ1ZmZlciBmb3Igc3RyaW5nIGNvbnRlbnRzICovCisJdW5zaWduZWQgaW50IGJzaXplOwkvKiBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KK30gYXVkZXZpbmZvX3QsKnBhdWRldmluZm9fdDsKKworLyogSU8gY29udHJvbHMgKi8KKyNkZWZpbmUgSU9DVExfQVVfU0xFTgkgIF9JT1IoICdVJywgMHhGMCwgaW50KSAgICAgICAgIC8qIHJldHVybiB0aGUgbWF4LiBzdHJpbmcgZGVzY3JpcHRvciBsZW5ndGggKi8KKyNkZWZpbmUgSU9DVExfQVVfREVWSU5GTyAgX0lPV1IoJ1UnLCAweEYxLCBhdWRldmluZm9fdCkgLyogZ2V0IG5hbWUgb2YgYSBzcGVjaWZpYyBkZXZpY2UgKi8KKyNkZWZpbmUgSU9DVExfQVVfU0VSVlJFUSAgX0lPVyggJ1UnLCAweEYyLCBpbnQpIAkvKiByZXF1ZXN0IGEgc2VydmljZSBjaGFubmVsICovCisjZGVmaW5lIElPQ1RMX0FVX0JVRkxFTgkgIF9JT1IoICdVJywgMHhGMywgaW50KSAgICAgICAgIC8qIHJldHVybiB0aGUgbWF4LiBidWZmZXIgbGVuZ3RoIGZvciB0aGUgZGV2aWNlICovCisjZGVmaW5lIElPQ1RMX0FVX1JYQVZBSUwgIF9JT1IoICdVJywgMHhGNCwgaW50KSAgICAgICAgIC8qIHJldHVybiAhPSAwIGlmIFJlY2VpdmUgRGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgSU9DVExfQVVfQ09OTkVDVCAgX0lPUiggJ1UnLCAweEY1LCBpbnQpICAgICAgICAgLyogcmV0dXJuICE9IDAgaWYgY29ubmVjdGVkIHRvIGEgc2VydmljZSBjaGFubmVsICovCisjZGVmaW5lIElPQ1RMX0FVX1RYUkVBRFkgIF9JT1IoICdVJywgMHhGNiwgaW50KSAgICAgICAgIC8qIHJldHVybiAhPSAwIGlmIFRyYW5zbWl0dCBjaGFubmVsIHJlYWR5IHRvIHNlbmQgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1UnICAweEY3Li4weEZGIHJlc2V2ZWQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEludGVybmFsIGRhdGEgc3RydWN0dXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCisvKiB1cmIgY2hhaW4gZWxlbWVudCAqLworc3RydWN0ICBhdWVyY2hhaW47ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcndhcmQgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgc3RydWN0IGF1ZXJjaGFpbiAqY2hhaW47ICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBjaGFpbiB0byB3aGljaCB0aGlzIGVsZW1lbnQgYmVsb25ncyAqLworICAgICAgICBzdHJ1Y3QgdXJiICogdXJicDsgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhdHRhY2hlZCB1cmIgKi8KKyAgICAgICAgdm9pZCAqY29udGV4dDsgICAgICAgICAgICAgICAgICAvKiBzYXZlZCBVUkIgY29udGV4dCAqLworICAgICAgICB1c2JfY29tcGxldGVfdCBjb21wbGV0ZTsgICAgICAgIC8qIHNhdmVkIFVSQiBjb21wbGV0aW9uIGZ1bmN0aW9uICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgICAgICAgICAgLyogdG8gaW5jbHVkZSBlbGVtZW50IGludG8gYSBsaXN0ICovCit9IGF1ZXJjaGFpbmVsZW1lbnRfdCwqcGF1ZXJjaGFpbmVsZW1lbnRfdDsKKworLyogdXJiIGNoYWluICovCit0eXBlZGVmIHN0cnVjdCBhdWVyY2hhaW4KK3sKKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY3RpdmU7ICAgICAvKiBlbGVtZW50IHdoaWNoIGlzIHN1Ym1pdHRlZCB0byB1cmIgKi8KKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gYWdhaW5zIGludGVycnVwdHMgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB3YWl0aW5nX2xpc3Q7ICAvKiBsaXN0IG9mIHdhaXRpbmcgZWxlbWVudHMgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7ICAgICAvKiBsaXN0IG9mIGF2YWlsYWJsZSBlbGVtZW50cyAqLworfSBhdWVyY2hhaW5fdCwqcGF1ZXJjaGFpbl90OworCisvKiB1cmIgYmxvY2tpbmcgY29tcGxldGlvbiBoZWxwZXIgc3RydWN0ICovCit0eXBlZGVmIHN0cnVjdAoreworCXdhaXRfcXVldWVfaGVhZF90IHdxaDsgICAgCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgZG9uZTsJCS8qIGNvbXBsZXRpb24gZmxhZyAqLworfSBhdWVyY2hhaW5fY2hzX3QsKnBhdWVyY2hhaW5fY2hzX3Q7CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qLworLyogYnVmZmVyIGVsZW1lbnQgKi8KK3N0cnVjdCAgYXVlcmJ1ZmN0bDsgICAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJkICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICBjaGFyICpidWZwOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlZmVyZW5jZSB0byBhbGxvY2F0ZWQgZGF0YSBidWZmZXIgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGxlbjsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBkYXRhIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCByZXRyaWVzOwkJLyogZm9yIHVyYiByZXRyaWVzICovCisgICAgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOwkvKiBmb3Igc2V0dXAgZGF0YSBpbiBjb250cm9sIG1lc3NhZ2VzICovCisgICAgICAgIHN0cnVjdCB1cmIgKiB1cmJwOyAgICAgICAgICAgICAgICAgICAvKiBVU0IgdXJiICovCisgICAgICAgIHN0cnVjdCBhdWVyYnVmY3RsICpsaXN0OyAgICAgICAgLyogcG9pbnRlciB0byBsaXN0ICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYnVmZl9saXN0OyAgICAgLyogcmVmZXJlbmNlIHRvIG5leHQgYnVmZmVyIGluIGxpc3QgKi8KK30gYXVlcmJ1Zl90LCpwYXVlcmJ1Zl90OworCisvKiBidWZmZXIgbGlzdCBjb250cm9sIGJsb2NrICovCit0eXBlZGVmIHN0cnVjdCBhdWVyYnVmY3RsCit7CisgICAgICAgIHNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgICAgLyogcHJvdGVjdGlvbiBpbiBpbnRlcnJ1cHQgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmcmVlX2J1ZmZfbGlzdDsvKiBmcmVlIGJ1ZmZlcnMgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCByZWNfYnVmZl9saXN0OyAvKiBidWZmZXJzIHdpdGggcmVjZWl2ZSBkYXRhICovCit9IGF1ZXJidWZjdGxfdCwqcGF1ZXJidWZjdGxfdDsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCisvKiBzZXJ2aWNlIGNvbnRleHQgKi8KK3N0cnVjdCAgYXVlcnNjb247ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJkICovCit0eXBlZGVmIHZvaWQgKCphdWVyX2Rpc3BhdGNoX3QpKHN0cnVjdCBhdWVyc2NvbiosIHBhdWVyYnVmX3QpOwordHlwZWRlZiB2b2lkICgqYXVlcl9kaXNjb25uX3QpIChzdHJ1Y3QgYXVlcnNjb24qKTsKK3R5cGVkZWYgc3RydWN0IGF1ZXJzY29uCit7CisgICAgICAgIHVuc2lnbmVkIGludCBpZDsgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgc2VydmljZSBpZCBBVUhfeHh4eCAqLworICAgICAgICBhdWVyX2Rpc3BhdGNoX3QgZGlzcGF0Y2g7ICAgICAgIC8qIGRpc3BhdGNoIHJlYWQgYnVmZmVyICovCisJYXVlcl9kaXNjb25uX3QgZGlzY29ubmVjdDsJLyogZGlzY29ubmVjdCBmcm9tIGRldmljZSwgd2FrZSB1cCBhbGwgY2hhciByZWFkZXJzICovCit9IGF1ZXJzY29uX3QsKnBhdWVyc2Nvbl90OworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KKy8qIFVTQiBkZXZpY2UgY29udGV4dCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlzdHJ1Y3Qgc2VtYXBob3JlIAltdXRleDsgICAgICAgICAJICAgIC8qIHByb3RlY3Rpb24gaW4gdXNlciBjb250ZXh0ICovCisJY2hhciAJCQluYW1lWzIwXTsJICAgIC8qIG5hbWUgb2YgdGhlIC9kZXYvdXNiIGVudHJ5ICovCisJdW5zaWduZWQgaW50CQlkdGluZGV4OwkgICAgLyogaW5kZXggaW4gdGhlIGRldmljZSB0YWJsZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICoJdXNiZGV2OyAgICAgIAkgICAgLyogVVNCIGRldmljZSBoYW5kbGUgKi8KKwlpbnQJCQlvcGVuX2NvdW50OwkgICAgLyogY291bnQgdGhlIG51bWJlciBvZiBvcGVuIGNoYXJhY3RlciBjaGFubmVscyAqLworICAgICAgICBjaGFyIAkJCWRldl9kZXNjW0FVU0lfRExFTl07LyogZm9yIHN0b3JpbmcgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uICovCisgICAgICAgIHVuc2lnbmVkIGludCAJCW1heENvbnRyb2xMZW5ndGg7ICAgLyogbWF4LiBMZW5ndGggb2YgY29udHJvbCBwYWtldCAod2l0aG91dCBoZWFkZXIpICovCisgICAgICAgIHN0cnVjdCB1cmIgKiAJCWludHVyYnA7ICAgICAgICAgICAgLyogaW50ZXJydXB0IHVyYiAqLworICAgICAgICBjaGFyICoJCQlpbnRidWZwOyAgICAgICAgICAgIC8qIGRhdGEgYnVmZmVyIGZvciBpbnRlcnJ1cHQgdXJiICovCisJdW5zaWduZWQgaW50IAkJaXJxc2l6ZTsJICAgIC8qIHNpemUgb2YgaW50ZXJydXB0IGVuZHBvaW50IDEgKi8KKyAgICAgICAgc3RydWN0IGF1ZXJjaGFpbiAJY29udHJvbGNoYWluOyAgCSAgICAvKiBmb3IgY2hhaW5pbmcgb2YgY29udHJvbCBtZXNzYWdlcyAqLworCWF1ZXJidWZjdGxfdCAJCWJ1ZmN0bDsgICAgICAgICAgICAgLyogQnVmZmVyIGNvbnRyb2wgZm9yIGNvbnRyb2wgdHJhbnNmZXJzICovCisgICAgICAgIHBhdWVyc2Nvbl90IAkgICAgIAlzZXJ2aWNlc1tBVUhfVFlQRVNJWkVdOy8qIGNvbnRleHQgcG9pbnRlcnMgZm9yIGVhY2ggc2VydmljZSAqLworCXVuc2lnbmVkIGludAkJdmVyc2lvbjsJICAgIC8qIFZlcnNpb24gb2YgdGhlIGRldmljZSAqLworCXdhaXRfcXVldWVfaGVhZF90IAlidWZmZXJ3YWl0OyAgICAgICAgIC8qIHdhaXQgZm9yIGEgY29udHJvbCBidWZmZXIgKi8KK30gYXVlcnN3YWxkX3QsKnBhdWVyc3dhbGRfdDsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogY2hhcmFjdGVyIGRldmljZSBjb250ZXh0ICovCit0eXBlZGVmIHN0cnVjdAoreworCXN0cnVjdCBzZW1hcGhvcmUgbXV0ZXg7ICAgICAgICAgLyogcHJvdGVjdGlvbiBpbiB1c2VyIGNvbnRleHQgKi8KKwlwYXVlcnN3YWxkX3QgYXVlcmRldjsgICAgICAgICAgIC8qIGNvbnRleHQgcG9pbnRlciBvZiBhc3NpZ25lZCBkZXZpY2UgKi8KKyAgICAgICAgYXVlcmJ1ZmN0bF90IGJ1ZmN0bDsgICAgICAgICAgICAvKiBjb250cm9scyB0aGUgYnVmZmVyIGNoYWluICovCisgICAgICAgIGF1ZXJzY29uX3Qgc2NvbnRleHQ7ICAgICAgICAgICAgLyogc2VydmljZSBjb250ZXh0ICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZHdhaXQ7ICAgICAvKiBmb3Igc3luY2hyb25vdXMgcmVhZGluZyAqLworCXN0cnVjdCBzZW1hcGhvcmUgcmVhZG11dGV4OyAgICAgLyogcHJvdGVjdGlvbiBhZ2FpbnN0IG11bHRpcGxlIHJlYWRzICovCisJcGF1ZXJidWZfdCByZWFkYnVmOwkJLyogYnVmZmVyIGhlbGQgZm9yIHBhcnRpYWwgcmVhZGluZyAqLworCXVuc2lnbmVkIGludCByZWFkb2Zmc2V0OwkvKiBjdXJyZW50IG9mZnNldCBpbiByZWFkYnVmICovCisJdW5zaWduZWQgaW50IHJlbW92ZWQ7CQkvKiBpcyAhPSAwIGlmIGRldmljZSBpcyByZW1vdmVkICovCit9IGF1ZXJjaGFyX3QsKnBhdWVyY2hhcl90OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGb3J3YXJkcyAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2N0cmxyZWFkX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICogdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfcmVtb3Zlc2VydmljZSAocGF1ZXJzd2FsZF90IGNwLCBwYXVlcnNjb25fdCBzY3ApOworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF1ZXJzd2FsZF9kcml2ZXI7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVTQiBjaGFpbiBoZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBjb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBjaGFpbmVkIHVyYnMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICAvKiBnZXQgcG9pbnRlciB0byBlbGVtZW50IGFuZCB0byBjaGFpbiAqLworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXAgPSAocGF1ZXJjaGFpbmVsZW1lbnRfdCkgdXJiLT5jb250ZXh0OworICAgICAgICBwYXVlcmNoYWluX3QgICAgICAgICBhY3AgPSBhY2VwLT5jaGFpbjsKKworICAgICAgICAvKiByZXN0b3JlIG9yaWdpbmFsIGVudHJpZXMgaW4gdXJiICovCisgICAgICAgIHVyYi0+Y29udGV4dCAgPSBhY2VwLT5jb250ZXh0OworICAgICAgICB1cmItPmNvbXBsZXRlID0gYWNlcC0+Y29tcGxldGU7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX2NvbXBsZXRlIGNhbGxlZCIpOworCisgICAgICAgIC8qIGNhbGwgb3JpZ2luYWwgY29tcGxldGlvbiBmdW5jdGlvbgorICAgICAgICAgICBOT1RFOiB0aGlzIGZ1bmN0aW9uIG1heSBsZWFkIHRvIG1vcmUgdXJicyBzdWJtaXR0ZWQgaW50byB0aGUgY2hhaW4uCisgICAgICAgICAgICAgICAgIChubyBjaGFpbiBsb2NrIGF0IGNhbGxpbmcgY29tcGxldGUoKSEpCisgICAgICAgICAgICAgICAgIGFjcC0+YWN0aXZlICE9IE5VTEwgaXMgcHJvdGVjdGluZyB1cyBhZ2FpbnN0IHJlY3Vyc2lvbi4qLworICAgICAgICB1cmItPmNvbXBsZXRlICh1cmIsIHJlZ3MpOworCisgICAgICAgIC8qIGRldGFjaCBlbGVtZW50IGZyb20gY2hhaW4gZGF0YSBzdHJ1Y3R1cmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoYWNwLT5hY3RpdmUgIT0gYWNlcCkgLyogcGFyYW5vaWEgZGVidWcgY2hlY2sgKi8KKwkgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9jb21wbGV0ZTogY29tcGxldGlvbiBvbiBub24tYWN0aXZlIGVsZW1lbnQgY2FsbGVkISIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWNwLT5hY3RpdmUgPSBOVUxMOworCisgICAgICAgIC8qIGFkZCB0aGUgdXNlZCBjaGFpbiBlbGVtZW50IHRvIHRoZSBsaXN0IG9mIGZyZWUgZWxlbWVudHMgKi8KKwlsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKKyAgICAgICAgYWNlcCA9IE5VTEw7CisKKyAgICAgICAgLyogaXMgdGhlcmUgYSBuZXcgZWxlbWVudCB3YWl0aW5nIGluIHRoZSBjaGFpbj8gKi8KKyAgICAgICAgaWYgKCFhY3AtPmFjdGl2ZSAmJiAhbGlzdF9lbXB0eSAoJmFjcC0+d2FpdGluZ19saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+d2FpdGluZ19saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgICAgICAgICBhY3AtPmFjdGl2ZSA9IGFjZXA7CisgICAgICAgIH0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIHN1Ym1pdCB0aGUgbmV3IHVyYiAqLworICAgICAgICBpZiAoYWNlcCkgeworICAgICAgICAgICAgICAgIHVyYiAgICA9IGFjZXAtPnVyYnA7CisgICAgICAgICAgICAgICAgZGJnICgiYXVlcmNoYWluX2NvbXBsZXRlOiBzdWJtaXR0aW5nIG5leHQgdXJiIGZyb20gY2hhaW4iKTsKKwkJdXJiLT5zdGF0dXMgPSAwOwkvKiBuZWVkZWQhICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKyAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3Igc3VibWl0IGVycm9ycyAqLworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCJhdWVyY2hhaW5fY29tcGxldGU6IHVzYl9zdWJtaXRfdXJiIHdpdGggZXJyb3IgY29kZSAlZCIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZG8gZXJyb3IgaGFuZGxpbmcgdmlhICp0aGlzKiBjb21wbGV0aW9uIGZ1bmN0aW9uIChyZWN1cnNpdmUpICovCisgICAgICAgICAgICAgICAgICAgICAgICBhdWVyY2hhaW5fY29tcGxldGUoIHVyYiwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHNpbXBsZSByZXR1cm4gd2l0aG91dCBzdWJtaXR0aW5nIGEgbmV3IHVyYi4KKyAgICAgICAgICAgICAgICAgICBUaGUgZW1wdHkgY2hhaW4gaXMgZGV0ZWN0ZWQgd2l0aCBhY3AtPmFjdGl2ZSA9PSBOVUxMLiAqLworICAgICAgICB9OworfQorCisKKy8qIHN1Ym1pdCBmdW5jdGlvbiBmb3IgY2hhaW5lZCB1cmJzCisgICB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBjb21wbGV0aW9uIGNvbnRleHQgb3IgZnJvbSB1c2VyIHNwYWNlIQorICAgZWFybHkgPSAxIC0+IHN1Ym1pdCBpbiBmcm9udCBvZiBjaGFpbgorKi8KK3N0YXRpYyBpbnQgYXVlcmNoYWluX3N1Ym1pdF91cmJfbGlzdCAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVyYiAqIHVyYiwgaW50IGVhcmx5KQoreworICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXAgPSBOVUxMOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9zdWJtaXRfdXJiIGNhbGxlZCIpOworCisgICAgICAgIC8qIHRyeSB0byBnZXQgYSBjaGFpbiBlbGVtZW50ICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGlmICghbGlzdF9lbXB0eSAoJmFjcC0+ZnJlZV9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+ZnJlZV9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogaWYgbm8gY2hhaW4gZWxlbWVudCBhdmFpbGFibGU6IHJldHVybiB3aXRoIGVycm9yICovCisgICAgICAgIGlmICghYWNlcCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgLyogZmlsbCBpbiB0aGUgbmV3IGNoYWluIGVsZW1lbnQgdmFsdWVzICovCisgICAgICAgIGFjZXAtPmNoYWluICAgID0gYWNwOworICAgICAgICBhY2VwLT5jb250ZXh0ICA9IHVyYi0+Y29udGV4dDsKKyAgICAgICAgYWNlcC0+Y29tcGxldGUgPSB1cmItPmNvbXBsZXRlOworICAgICAgICBhY2VwLT51cmJwICAgICA9IHVyYjsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZhY2VwLT5saXN0KTsKKworICAgICAgICAvKiBtb2RpZnkgdXJiICovCisgICAgICAgIHVyYi0+Y29udGV4dCAgID0gYWNlcDsKKyAgICAgICAgdXJiLT5jb21wbGV0ZSAgPSBhdWVyY2hhaW5fY29tcGxldGU7CisgICAgICAgIHVyYi0+c3RhdHVzICAgID0gLUVJTlBST0dSRVNTOyAgICAvKiB1c2Jfc3VibWl0X3VyYiBkb2VzIHRoaXMsIHRvbyAqLworCisgICAgICAgIC8qIGFkZCBlbGVtZW50IHRvIGNoYWluIC0gb3Igc3RhcnQgaXQgaW1tZWRpYXRlbHkgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKGFjcC0+YWN0aXZlKSB7CisgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgdHJhZmZpYyBpbiB0aGUgY2hhaW4sIHNpbXBsZSBhZGQgZWxlbWVudCB0byBjaGFpbiAqLworCQlpZiAoZWFybHkpIHsKKwkJCWRiZyAoImFkZGluZyBuZXcgdXJiIHRvIGhlYWQgb2YgY2hhaW4iKTsKKwkJCWxpc3RfYWRkICgmYWNlcC0+bGlzdCwgJmFjcC0+d2FpdGluZ19saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWRiZyAoImFkZGluZyBuZXcgdXJiIHRvIGVuZCBvZiBjaGFpbiIpOworCQkJbGlzdF9hZGRfdGFpbCAoJmFjZXAtPmxpc3QsICZhY3AtPndhaXRpbmdfbGlzdCk7CisJCX0KKwkJYWNlcCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogdGhlIGNoYWluIGlzIGVtcHR5LiBQcmVwYXJlIHJlc3RhcnQgKi8KKyAgICAgICAgICAgICAgICBhY3AtPmFjdGl2ZSA9IGFjZXA7CisgICAgICAgIH0KKyAgICAgICAgLyogU3BpbiBoYXMgdG8gYmUgcmVtb3ZlZCBiZWZvcmUgdXNiX3N1Ym1pdF91cmIhICovCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKworICAgICAgICAvKiBTdWJtaXQgdXJiIGlmIGltbWVkaWF0ZSByZXN0YXJ0ICovCisgICAgICAgIGlmIChhY2VwKSB7CisgICAgICAgICAgICAgICAgZGJnKCJzdWJtaXR0aW5nIHVyYiBpbW1lZGlhdGUiKTsKKwkJdXJiLT5zdGF0dXMgPSAwOwkvKiBuZWVkZWQhICovCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3Igc3VibWl0IGVycm9ycyAqLworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCJhdWVyY2hhaW5fc3VibWl0X3VyYjogdXNiX3N1Ym1pdF91cmIgd2l0aCBlcnJvciBjb2RlICVkIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBkbyBlcnJvciBoYW5kbGluZyB2aWEgY29tcGxldGlvbiBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgYXVlcmNoYWluX2NvbXBsZXRlKCB1cmIsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorCisvKiBzdWJtaXQgZnVuY3Rpb24gZm9yIGNoYWluZWQgdXJicworICAgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gY29tcGxldGlvbiBjb250ZXh0IG9yIGZyb20gdXNlciBzcGFjZSEKKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9zdWJtaXRfdXJiIChwYXVlcmNoYWluX3QgYWNwLCBzdHJ1Y3QgdXJiICogdXJiKQoreworCXJldHVybiBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0IChhY3AsIHVyYiwgMCk7Cit9CisKKy8qIGNhbmNlbCBhbiB1cmIgd2hpY2ggaXMgc3VibWl0dGVkIHRvIHRoZSBjaGFpbgorICAgdGhlIHJlc3VsdCBpcyAwIGlmIHRoZSB1cmIgaXMgY2FuY2VsbGVkLCBvciAtRUlOUFJPR1JFU1MgaWYKKyAgIFVSQl9BU1lOQ19VTkxJTksgaXMgc2V0IGFuZCB0aGUgZnVuY3Rpb24gaXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuCisqLworc3RhdGljIGludCBhdWVyY2hhaW5fdW5saW5rX3VyYiAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVyYiAqIHVyYikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBzdHJ1Y3QgdXJiICogdXJicDsKKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY2VwOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX3VubGlua191cmIgY2FsbGVkIik7CisKKyAgICAgICAgLyogc2VhcmNoIHRoZSBjaGFpbiBvZiB3YWl0aW5nIGVsZW1lbnRzICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGxpc3RfZm9yX2VhY2ggKHRtcCwgJmFjcC0+d2FpdGluZ19saXN0KSB7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgICAgICAgICBpZiAoYWNlcC0+dXJicCA9PSB1cmIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5jb250ZXh0ID0gYWNlcC0+Y29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+Y29tcGxldGUgPSBhY2VwLT5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwgKCZhY2VwLT5saXN0LCAmYWNwLT5mcmVlX2xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgZGJnICgidW5saW5rIHdhaXRpbmcgdXJiIik7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnN0YXR1cyA9IC1FTk9FTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmNvbXBsZXRlICh1cmIsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIG5vdCBmb3VuZC4gKi8KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIGdldCB0aGUgYWN0aXZlIHVyYiAqLworICAgICAgICBhY2VwID0gYWNwLT5hY3RpdmU7CisgICAgICAgIGlmIChhY2VwKSB7CisgICAgICAgICAgICAgICAgdXJicCA9IGFjZXAtPnVyYnA7CisKKyAgICAgICAgICAgICAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRvIGNhbmNlbCB0aGUgYWN0aXZlIHVyYiAqLworICAgICAgICAgICAgICAgIGlmICh1cmJwID09IHVyYikgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90ZSB0aGF0IHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgY2hlY2sgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgdW5saW5rKCkgY2FsbCBiZWNhdXNlIG9mIG5vIGxvY2suIFRoaXMgcmFjZSBpcyBoYXJtbGVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHVzYiBtb2R1bGUgd2lsbCBkZXRlY3QgdGhlIHVubGluaygpIGFmdGVyIGNvbXBsZXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXZSBjYW4ndCB1c2UgdGhlIGFjcC0+bG9jayBoZXJlIGJlY2F1c2UgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIGdyYWIgaXQuCisJCQkqLworICAgICAgICAgICAgICAgICAgICAgICAgZGJnICgidW5saW5rIGFjdGl2ZSB1cmIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2JfdW5saW5rX3VyYiAodXJicCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogbm90IGZvdW5kIGFueXdheQorICAgICAgICAgICAuLi4gaXMgc29tZSBraW5kIG9mIHN1Y2Nlc3MKKwkqLworICAgICAgICBkYmcgKCJ1cmIgdG8gdW5saW5rIG5vdCBmb3VuZCBpbiBjaGFpbiIpOworICAgICAgICByZXR1cm4gMDsKK30KKworLyogY2FuY2VsIGFsbCB1cmJzIHdoaWNoIGFyZSBpbiB0aGUgY2hhaW4uCisgICB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBvciBjb21wbGV0aW9uIGhhbmRsZXIuCisqLworc3RhdGljIHZvaWQgYXVlcmNoYWluX3VubGlua19hbGwgKHBhdWVyY2hhaW5fdCBhY3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IHVyYiAqIHVyYnA7CisgICAgICAgIHBhdWVyY2hhaW5lbGVtZW50X3QgYWNlcDsKKworICAgICAgICBkYmcgKCJhdWVyY2hhaW5fdW5saW5rX2FsbCBjYWxsZWQiKTsKKworICAgICAgICAvKiBjbGVhciB0aGUgY2hhaW4gb2Ygd2FpdGluZyBlbGVtZW50cyAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICB3aGlsZSAoIWxpc3RfZW1wdHkgKCZhY3AtPndhaXRpbmdfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiBnZXQgdGhlIG5leHQgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBhY3AtPndhaXRpbmdfbGlzdC5uZXh0OworICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgIGFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAgdXJicCA9IGFjZXAtPnVyYnA7CisgICAgICAgICAgICAgICAgdXJicC0+Y29udGV4dCA9IGFjZXAtPmNvbnRleHQ7CisgICAgICAgICAgICAgICAgdXJicC0+Y29tcGxldGUgPSBhY2VwLT5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgICAgICAgICAgZGJnICgidW5saW5rIHdhaXRpbmcgdXJiIik7CisgICAgICAgICAgICAgICAgdXJicC0+c3RhdHVzID0gLUVOT0VOVDsKKyAgICAgICAgICAgICAgICB1cmJwLT5jb21wbGV0ZSAodXJicCwgTlVMTCk7CisgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogY2xlYXIgdGhlIGFjdGl2ZSB1cmIgKi8KKyAgICAgICAgYWNlcCA9IGFjcC0+YWN0aXZlOworICAgICAgICBpZiAoYWNlcCkgeworICAgICAgICAgICAgICAgIHVyYnAgPSBhY2VwLT51cmJwOworICAgICAgICAgICAgICAgIHVyYnAtPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfQVNZTkNfVU5MSU5LOworICAgICAgICAgICAgICAgIGRiZyAoInVubGluayBhY3RpdmUgdXJiIik7CisgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiICh1cmJwKTsKKyAgICAgICAgfQorfQorCisKKy8qIGZyZWUgdGhlIGNoYWluLgorICAgdGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgb3IgY29tcGxldGlvbiBoYW5kbGVyLgorKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9mcmVlIChwYXVlcmNoYWluX3QgYWNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHBhdWVyY2hhaW5lbGVtZW50X3QgYWNlcDsKKworICAgICAgICBkYmcgKCJhdWVyY2hhaW5fZnJlZSBjYWxsZWQiKTsKKworICAgICAgICAvKiBmaXJzdCwgY2FuY2VsIGFsbCBwZW5kaW5nIHVyYnMgKi8KKyAgICAgICAgYXVlcmNoYWluX3VubGlua19hbGwgKGFjcCk7CisKKyAgICAgICAgLyogZnJlZSB0aGUgZWxlbWVudHMgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgd2hpbGUgKCFsaXN0X2VtcHR5ICgmYWNwLT5mcmVlX2xpc3QpKSB7CisgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBuZXh0IGVudHJ5ICovCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gYWNwLT5mcmVlX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisJCWFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAga2ZyZWUgKGFjZXApOworCSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKwl9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKK30KKworCisvKiBJbml0IHRoZSBjaGFpbiBjb250cm9sIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgYXVlcmNoYWluX2luaXQgKHBhdWVyY2hhaW5fdCBhY3ApCit7CisgICAgICAgIC8qIGluaXQgdGhlIGNoYWluIGRhdGEgc3RydWN0dXJlICovCisgICAgICAgIGFjcC0+YWN0aXZlID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCAoJmFjcC0+bG9jayk7CisgICAgICAgIElOSVRfTElTVF9IRUFEICgmYWNwLT53YWl0aW5nX2xpc3QpOworICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmFjcC0+ZnJlZV9saXN0KTsKK30KKworLyogc2V0dXAgYSBjaGFpbi4KKyAgIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSB3aGlsZSBzZXR0aW5nIHVwIHRoZSBjaGFpbgorICAgcmVxdWlyZW1lbnQ6IGF1ZXJjaGFpbl9pbml0KCkKKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9zZXR1cCAocGF1ZXJjaGFpbl90IGFjcCwgdW5zaWduZWQgaW50IG51bUVsZW1lbnRzKQoreworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXA7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX3NldHVwIGNhbGxlZCB3aXRoICVkIGVsZW1lbnRzIiwgbnVtRWxlbWVudHMpOworCisgICAgICAgIC8qIGZpbGwgdGhlIGxpc3Qgb2YgZnJlZSBlbGVtZW50cyAqLworICAgICAgICBmb3IgKDtudW1FbGVtZW50czsgbnVtRWxlbWVudHMtLSkgeworICAgICAgICAgICAgICAgIGFjZXAgPSAocGF1ZXJjaGFpbmVsZW1lbnRfdCkga21hbGxvYyAoc2l6ZW9mIChhdWVyY2hhaW5lbGVtZW50X3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjZXApCisJCQlnb3RvIGFjX2ZhaWw7CisJCW1lbXNldCAoYWNlcCwgMCwgc2l6ZW9mIChhdWVyY2hhaW5lbGVtZW50X3QpKTsKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmFjZXAtPmxpc3QpOworICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwgKCZhY2VwLT5saXN0LCAmYWNwLT5mcmVlX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworCithY19mYWlsOi8qIGZyZWUgdGhlIGVsZW1lbnRzICovCisgICAgICAgIHdoaWxlICghbGlzdF9lbXB0eSAoJmFjcC0+ZnJlZV9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgbmV4dCBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+ZnJlZV9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgICAgICAgICBrZnJlZSAoYWNlcCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cit9CisKKworLyogY29tcGxldGlvbiBoYW5kbGVyIGZvciBzeW5jaHJvbm91cyBjaGFpbmVkIFVSQnMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9ibG9ja2luZ19jb21wbGV0aW9uIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBhdWVyY2hhaW5fY2hzX3QgcGNocyA9IChwYXVlcmNoYWluX2Noc190KXVyYi0+Y29udGV4dDsKKwlwY2hzLT5kb25lID0gMTsKKwl3bWIoKTsKKwl3YWtlX3VwICgmcGNocy0+d3FoKTsKK30KKworCisvKiBTdGFydHMgY2hhaW5lZCB1cmIgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIG9yIHRpbWVvdXQgKi8KK3N0YXRpYyBpbnQgYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiIChwYXVlcmNoYWluX3QgYWNwLCBzdHJ1Y3QgdXJiICp1cmIsIGludCB0aW1lb3V0LCBpbnQqIGFjdHVhbF9sZW5ndGgpCit7CisJYXVlcmNoYWluX2Noc190IGNoczsKKwlpbnQgc3RhdHVzOworCisJZGJnICgiYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiIGNhbGxlZCIpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZjaHMud3FoKTsKKwljaHMuZG9uZSA9IDA7CisKKwl1cmItPmNvbnRleHQgPSAmY2hzOworCXN0YXR1cyA9IGF1ZXJjaGFpbl9zdWJtaXRfdXJiIChhY3AsIHVyYik7CisJaWYgKHN0YXR1cykKKwkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJcmV0dXJuIHN0YXR1czsKKworCXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoY2hzLndxaCwgY2hzLmRvbmUsIHRpbWVvdXQpOworCisJaWYgKCF0aW1lb3V0ICYmICFjaHMuZG9uZSkgeworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CS8qIE5vIGNhbGxiYWNrPyEhICovCisJCQlkYmcgKCJhdWVyY2hhaW5fc3RhcnRfd2FpdF91cmI6IHJhY2VkIHRpbWVvdXQiKTsKKwkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQl9IGVsc2UgeworCQkJZGJnICgiYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiOiB0aW1lb3V0Iik7CisJCQlhdWVyY2hhaW5fdW5saW5rX3VyYiAoYWNwLCB1cmIpOyAgLyogcmVtb3ZlIHVyYiBzYWZlbHkgKi8KKwkJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCX0KKwl9IGVsc2UKKwkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKyAgCXJldHVybiBzdGF0dXM7Cit9CisKKworLyogYXVlcmNoYWluX2NvbnRyb2xfbXNnIC0gQnVpbGRzIGEgY29udHJvbCB1cmIsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24KKyAgIGFjcDogcG9pbnRlciB0byB0aGUgYXVlcmNoYWluCisgICBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworICAgcGlwZTogZW5kcG9pbnQgInBpcGUiIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAgIHJlcXVlc3Q6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUKKyAgIHJlcXVlc3R0eXBlOiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUKKyAgIHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZQorICAgaW5kZXg6IFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlCisgICBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQKKyAgIHNpemU6IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kCisgICB0aW1lb3V0OiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0IChpZiAwIHRoZSB3YWl0IGlzIGZvcmV2ZXIpCisKKyAgIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50CisgICBhbmQgd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LgorCisgICBJZiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHRoZSB0cmFuc2ZlcnJlZCBsZW5ndGgsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKworICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGxpa2UgYQorICAgYm90dG9tIGhhbGYgaGFuZGxlci4gIElmIHlvdSBuZWVkIGFuIGFzeW5jaHJvbm91cyBtZXNzYWdlLCBvciBuZWVkIHRvIHNlbmQKKyAgIGEgbWVzc2FnZSBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dCwgdXNlIGF1ZXJjaGFpbl9zdWJtaXRfdXJiKCkKKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9jb250cm9sX21zZyAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCwgX191OCByZXF1ZXN0dHlwZSwKKwkJCSAgICAgICAgICBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHZvaWQgKmRhdGEsIF9fdTE2IHNpemUsIGludCB0aW1lb3V0KQoreworCWludCByZXQ7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJc3RydWN0IHVyYiAqdXJiOworICAgICAgICBpbnQgbGVuZ3RoOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9jb250cm9sX21zZyIpOworICAgICAgICBkciA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghZHIpCisJCXJldHVybiAtRU5PTUVNOworCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisgICAgICAgIAlrZnJlZSAoZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCisJZHItPmJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSAgPSBjcHVfdG9fbGUxNiAodmFsdWUpOworCWRyLT53SW5kZXggID0gY3B1X3RvX2xlMTYgKGluZGV4KTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2IChzaXplKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiICh1cmIsIGRldiwgcGlwZSwgKHVuc2lnbmVkIGNoYXIqKWRyLCBkYXRhLCBzaXplLCAgICAvKiBidWlsZCB1cmIgKi8KKwkJICAgICAgICAgIGF1ZXJjaGFpbl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwlyZXQgPSBhdWVyY2hhaW5fc3RhcnRfd2FpdF91cmIgKGFjcCwgdXJiLCB0aW1lb3V0LCAmbGVuZ3RoKTsKKworCXVzYl9mcmVlX3VyYiAodXJiKTsKKwlrZnJlZSAoZHIpOworCisgICAgICAgIGlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIGxlbmd0aDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQnVmZmVyIExpc3QgaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogZnJlZSBhIHNpbmdsZSBhdWVyYnVmICovCitzdGF0aWMgdm9pZCBhdWVyYnVmX2ZyZWUgKHBhdWVyYnVmX3QgYnApCit7CisJaWYgKGJwLT5idWZwKSB7CisJCWtmcmVlIChicC0+YnVmcCk7CisJfQorCWlmIChicC0+ZHIpIHsKKwkJa2ZyZWUgKGJwLT5kcik7CisJfQorCWlmIChicC0+dXJicCkgeworCQl1c2JfZnJlZV91cmIgKGJwLT51cmJwKTsKKwl9CisJa2ZyZWUgKGJwKTsKK30KKworLyogZnJlZSB0aGUgYnVmZmVycyBmcm9tIGFuIGF1ZXJidWYgbGlzdCAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9mcmVlX2xpc3QgKHN0cnVjdCBsaXN0X2hlYWQgKnEpCit7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXBhdWVyYnVmX3QgYnA7CisKKwlkYmcgKCJhdWVyYnVmX2ZyZWVfbGlzdCIpOworCWZvciAocCA9IHEtPm5leHQ7IHAgIT0gcTspIHsKKwkJYnAgPSBsaXN0X2VudHJ5IChwLCBhdWVyYnVmX3QsIGJ1ZmZfbGlzdCk7CisJCXRtcCA9IHAtPm5leHQ7CisJCWxpc3RfZGVsIChwKTsKKwkJcCA9IHRtcDsKKwkJYXVlcmJ1Zl9mcmVlIChicCk7CisJfQorfQorCisvKiBpbml0IHRoZSBtZW1iZXJzIG9mIGEgbGlzdCBjb250cm9sIGJsb2NrICovCitzdGF0aWMgdm9pZCBhdWVyYnVmX2luaXQgKHBhdWVyYnVmY3RsX3QgYmNwKQoreworCWRiZyAoImF1ZXJidWZfaW5pdCIpOworCXNwaW5fbG9ja19pbml0ICgmYmNwLT5sb2NrKTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZiY3AtPmZyZWVfYnVmZl9saXN0KTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZiY3AtPnJlY19idWZmX2xpc3QpOworfQorCisvKiBmcmVlIGFsbCBidWZmZXJzIGZyb20gYW4gYXVlcmJ1ZiBjaGFpbiAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9mcmVlX2J1ZmZlcnMgKHBhdWVyYnVmY3RsX3QgYmNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZGJnICgiYXVlcmJ1Zl9mcmVlX2J1ZmZlcnMiKTsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmJjcC0+bG9jaywgZmxhZ3MpOworCisJYXVlcmJ1Zl9mcmVlX2xpc3QgKCZiY3AtPmZyZWVfYnVmZl9saXN0KTsKKwlhdWVyYnVmX2ZyZWVfbGlzdCAoJmJjcC0+cmVjX2J1ZmZfbGlzdCk7CisKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmJjcC0+bG9jaywgZmxhZ3MpOworfQorCisvKiBzZXR1cCBhIGxpc3Qgb2YgYnVmZmVycyAqLworLyogcmVxdWlyZW1lbnQ6IGF1ZXJidWZfaW5pdCgpICovCitzdGF0aWMgaW50IGF1ZXJidWZfc2V0dXAgKHBhdWVyYnVmY3RsX3QgYmNwLCB1bnNpZ25lZCBpbnQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGludCBidWZzaXplKQoreworICAgICAgICBwYXVlcmJ1Zl90IGJlcCA9IE5VTEw7CisKKyAgICAgICAgZGJnICgiYXVlcmJ1Zl9zZXR1cCBjYWxsZWQgd2l0aCAlZCBlbGVtZW50cyBvZiAlZCBieXRlcyIsIG51bUVsZW1lbnRzLCBidWZzaXplKTsKKworICAgICAgICAvKiBmaWxsIHRoZSBsaXN0IG9mIGZyZWUgZWxlbWVudHMgKi8KKyAgICAgICAgZm9yICg7bnVtRWxlbWVudHM7IG51bUVsZW1lbnRzLS0pIHsKKyAgICAgICAgICAgICAgICBiZXAgPSAocGF1ZXJidWZfdCkga21hbGxvYyAoc2l6ZW9mIChhdWVyYnVmX3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJlcCkKKwkJCWdvdG8gYmxfZmFpbDsKKwkgICAgICAgIG1lbXNldCAoYmVwLCAwLCBzaXplb2YgKGF1ZXJidWZfdCkpOworICAgICAgICAgICAgICAgIGJlcC0+bGlzdCA9IGJjcDsKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmJlcC0+YnVmZl9saXN0KTsKKyAgICAgICAgICAgICAgICBiZXAtPmJ1ZnAgPSAoY2hhciAqKSBrbWFsbG9jIChidWZzaXplLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJlcC0+YnVmcCkKKwkJCWdvdG8gYmxfZmFpbDsKKyAgICAgICAgICAgICAgICBiZXAtPmRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFiZXAtPmRyKQorCQkJZ290byBibF9mYWlsOworICAgICAgICAgICAgICAgIGJlcC0+dXJicCA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGlmICghYmVwLT51cmJwKQorCQkJZ290byBibF9mYWlsOworICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwgKCZiZXAtPmJ1ZmZfbGlzdCwgJmJjcC0+ZnJlZV9idWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworCitibF9mYWlsOi8qIG5vdCBlbm91Z2ggbWVtb3J5LiBGcmVlIGFsbG9jYXRlZCBlbGVtZW50cyAqLworICAgICAgICBkYmcgKCJhdWVyYnVmX3NldHVwOiBubyBtb3JlIG1lbW9yeSIpOworCWtmcmVlKGJlcCk7CisgICAgICAgIGF1ZXJidWZfZnJlZV9idWZmZXJzIChiY3ApOworICAgICAgICByZXR1cm4gLUVOT01FTTsKK30KKworLyogaW5zZXJ0IGEgdXNlZCBidWZmZXIgaW50byB0aGUgZnJlZSBsaXN0ICovCitzdGF0aWMgdm9pZCBhdWVyYnVmX3JlbGVhc2VidWYoIHBhdWVyYnVmX3QgYnApCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHBhdWVyYnVmY3RsX3QgYmNwID0gYnAtPmxpc3Q7CisJYnAtPnJldHJpZXMgPSAwOworCisgICAgICAgIGRiZyAoImF1ZXJidWZfcmVsZWFzZWJ1ZiBjYWxsZWQiKTsKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZiY3AtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsICgmYnAtPmJ1ZmZfbGlzdCwgJmJjcC0+ZnJlZV9idWZmX2xpc3QpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYmNwLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENvbXBsZXRpb24gaGFuZGxlcnMgKi8KKworLyogVmFsdWVzIG9mIHVyYi0+c3RhdHVzIG9yIHJlc3VsdHMgb2YgdXNiX3N1Ym1pdF91cmIoKToKKzAJCUluaXRpYWwsIE9LCistRUlOUFJPR1JFU1MJZHVyaW5nIHN1Ym1pc3Npb24gdW50aWwgZW5kCistRU5PRU5UCQlpZiB1cmIgaXMgdW5saW5rZWQKKy1FVElNRURPVVQJVHJhbnNmZXIgdGltZWQgb3V0LCBOQUsKKy1FTk9NRU0JCU1lbW9yeSBPdmVyZmxvdworLUVOT0RFVgkJU3BlY2lmaWVkIFVTQi1kZXZpY2Ugb3IgYnVzIGRvZXNuJ3QgZXhpc3QKKy1FTlhJTwkJVVJCIGFscmVhZHkgcXVldWVkCistRUlOVkFMCQlhKSBJbnZhbGlkIHRyYW5zZmVyIHR5cGUgc3BlY2lmaWVkIChvciBub3Qgc3VwcG9ydGVkKQorCQliKSBJbnZhbGlkIGludGVycnVwdCBpbnRlcnZhbCAoMG4yNTYpCistRUFHQUlOCQlhKSBTcGVjaWZpZWQgSVNPIHN0YXJ0IGZyYW1lIHRvbyBlYXJseQorCQliKSAodXNpbmcgSVNPLUFTQVApIFRvbyBtdWNoIHNjaGVkdWxlZCBmb3IgdGhlIGZ1dHVyZSB3YWl0IHNvbWUgdGltZSBhbmQgdHJ5IGFnYWluLgorLUVGQklHCQlUb28gbXVjaCBJU08gZnJhbWVzIHJlcXVlc3RlZCAoY3VycmVudGx5IHVoY2k5MDApCistRVBJUEUJCVNwZWNpZmllZCBwaXBlLWhhbmRsZS9FbmRwb2ludCBpcyBhbHJlYWR5IHN0YWxsZWQKKy1FTVNHU0laRQlFbmRwb2ludCBtZXNzYWdlIHNpemUgaXMgemVybywgZG8gaW50ZXJmYWNlL2FsdGVybmF0ZSBzZXR0aW5nCistRVBST1RPCQlhKSBCaXRzdHVmZiBlcnJvcgorCQliKSBVbmtub3duIFVTQiBlcnJvcgorLUVJTFNFUQkJQ1JDIG1pc21hdGNoCistRU5PU1IJCUJ1ZmZlciBlcnJvcgorLUVSRU1PVEVJTwlTaG9ydCBwYWNrZXQgZGV0ZWN0ZWQKKy1FWERFVgkJSVNPIHRyYW5zZmVyIG9ubHkgcGFydGlhbGx5IGNvbXBsZXRlZCBsb29rIGF0IGluZGl2aWR1YWwgZnJhbWUgc3RhdHVzIGZvciBkZXRhaWxzCistRUlOVkFMCQlJU08gbWFkbmVzcywgaWYgdGhpcyBoYXBwZW5zOiBMb2cgb2ZmIGFuZCBnbyBob21lCistRU9WRVJGTE9XCWJhYmJsZQorKi8KKworLyogY2hlY2sgaWYgYSBzdGF0dXMgY29kZSBhbGxvd3MgYSByZXRyeSAqLworc3RhdGljIGludCBhdWVyc3dhbGRfc3RhdHVzX3JldHJ5IChpbnQgc3RhdHVzKQoreworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAwOgorCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FT1ZFUkZMT1c6CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgLUVQSVBFOgorCWNhc2UgLUVQUk9UTzoKKwljYXNlIC1FSUxTRVE6CisJY2FzZSAtRU5PU1I6CisJY2FzZSAtRVJFTU9URUlPOgorCQlyZXR1cm4gMTsgLyogZG8gYSByZXRyeSAqLworCX0KKwlyZXR1cm4gMDsJLyogbm8gcmV0cnkgcG9zc2libGUgKi8KK30KKworLyogQ29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgd3JpdGUgYmxvY2sgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFyX2N0cmx3cml0ZV9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGF1ZXJidWZfdCBicCA9IChwYXVlcmJ1Zl90KSB1cmItPmNvbnRleHQ7CisJcGF1ZXJzd2FsZF90IGNwID0gKChwYXVlcnN3YWxkX3QpKChjaGFyICopKGJwLT5saXN0KS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJzd2FsZF90KTApLT5idWZjdGwpKSk7CisJZGJnICgiYXVlcmNoYXJfY3RybHdyaXRlX2NvbXBsZXRlIGNhbGxlZCIpOworCisJLyogcmV1c2UgdGhlIGJ1ZmZlciAqLworCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBhIGJ1ZmZlciAqLworCXdha2VfdXAgKCZjcC0+YnVmZmVyd2FpdCk7Cit9CisKKy8qIENvbXBsZXRpb24gaGFuZGxlciBmb3IgZHVtbXkgcmV0cnkgcGFja2V0ICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfY3RybHJlYWRfd3JldGNvbXBsZXRlIChzdHJ1Y3QgdXJiICogdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgcGF1ZXJidWZfdCBicCA9IChwYXVlcmJ1Zl90KSB1cmItPmNvbnRleHQ7CisgICAgICAgIHBhdWVyc3dhbGRfdCBjcDsKKwlpbnQgcmV0OworICAgICAgICBkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfd3JldGNvbXBsZXRlIGNhbGxlZCIpOworICAgICAgICBkYmcgKCJjb21wbGV0ZSB3aXRoIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJY3AgPSAoKHBhdWVyc3dhbGRfdCkoKGNoYXIgKikoYnAtPmxpc3QpLSh1bnNpZ25lZCBsb25nKSgmKChwYXVlcnN3YWxkX3QpMCktPmJ1ZmN0bCkpKTsKKworCS8qIGNoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGFkdmFuY2UgKi8KKwlpZiAoIWF1ZXJzd2FsZF9zdGF0dXNfcmV0cnkgKHVyYi0+c3RhdHVzKSB8fCAhY3AtPnVzYmRldikgeworCQkvKiByZXVzZSB0aGUgYnVmZmVyICovCisJCWVyciAoImNvbnRyb2wgZHVtbXk6IHRyYW5zbWlzc2lvbiBlcnJvciAlZCwgY2FuIG5vdCByZXRyeSIsIHVyYi0+c3RhdHVzKTsKKwkJYXVlcmJ1Zl9yZWxlYXNlYnVmIChicCk7CisJCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBhIGJ1ZmZlciAqLworCQl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCQlyZXR1cm47CisJfQorCisJLyogZmlsbCB0aGUgY29udHJvbCBtZXNzYWdlICovCisJYnAtPmRyLT5iUmVxdWVzdFR5cGUgPSBBVVRfUlJFUTsKKwlicC0+ZHItPmJSZXF1ZXN0ICAgICA9IEFVVl9SQkxPQ0s7CisJYnAtPmRyLT53TGVuZ3RoICAgICAgPSBicC0+ZHItPndWYWx1ZTsJLyogdGVtcG9yYXJ5IHN0b3JlZCAqLworCWJwLT5kci0+d1ZhbHVlICAgICAgID0gY3B1X3RvX2xlMTYgKDEpOwkvKiBSZXRyeSBGbGFnICovCisJLyogYnAtPmRyLT5pbmRleCAgICA9IGNoYW5uZWwgaWQ7ICAgICAgICAgIHJlbWFpbnMgKi8KKwl1c2JfZmlsbF9jb250cm9sX3VyYiAoYnAtPnVyYnAsIGNwLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCBsZTE2X3RvX2NwdSAoYnAtPmRyLT53TGVuZ3RoKSwKKwkJICAgICAgICAgIGF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSxicCk7CisKKwkvKiBzdWJtaXQgdGhlIGNvbnRyb2wgbXNnIGFzIG5leHQgcGFrZXQgKi8KKwlyZXQgPSBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0ICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnAsIDEpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgIAlkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGU6IG5vbnplcm8gcmVzdWx0IG9mIGF1ZXJjaGFpbl9zdWJtaXRfdXJiX2xpc3QgJWQiLCByZXQpOworICAgICAgICAJYnAtPnVyYnAtPnN0YXR1cyA9IHJldDsKKyAgICAgICAgCWF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSAoYnAtPnVyYnAsIE5VTEwpOworICAgIAl9Cit9CisKKy8qIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgcmVjZWl2aW5nIG9mIGNvbnRyb2wgbWVzc2FnZXMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHVuc2lnbmVkIGludCAgc2VydmljZWlkOworICAgICAgICBwYXVlcnN3YWxkX3QgIGNwOworICAgICAgICBwYXVlcnNjb25fdCAgIHNjcDsKKyAgICAgICAgcGF1ZXJidWZfdCAgICBicCAgPSAocGF1ZXJidWZfdCkgdXJiLT5jb250ZXh0OworCWludCByZXQ7CisgICAgICAgIGRiZyAoImF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSBjYWxsZWQiKTsKKworCWNwID0gKChwYXVlcnN3YWxkX3QpKChjaGFyICopKGJwLT5saXN0KS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJzd2FsZF90KTApLT5idWZjdGwpKSk7CisKKwkvKiBjaGVjayBpZiB0aGVyZSBpcyB2YWxpZCBkYXRhIGluIHRoaXMgdXJiICovCisgICAgICAgIGlmICh1cmItPnN0YXR1cykgeworCQlkYmcgKCJjb21wbGV0ZSB3aXRoIG5vbi16ZXJvIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJCS8qIHNob3VsZCB3ZSBkbyBhIHJldHJ5PyAqLworCQlpZiAoIWF1ZXJzd2FsZF9zdGF0dXNfcmV0cnkgKHVyYi0+c3RhdHVzKQorCQkgfHwgIWNwLT51c2JkZXYKKwkJIHx8IChjcC0+dmVyc2lvbiA8IEFVVl9SRVRSWSkKKyAgICAgICAgICAgICAgICAgfHwgKGJwLT5yZXRyaWVzID49IEFVX1JFVFJJRVMpKSB7CisJCQkvKiByZXVzZSB0aGUgYnVmZmVyICovCisJCQllcnIgKCJjb250cm9sIHJlYWQ6IHRyYW5zbWlzc2lvbiBlcnJvciAlZCwgY2FuIG5vdCByZXRyeSIsIHVyYi0+c3RhdHVzKTsKKwkJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJCQl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCQkJcmV0dXJuOworCQl9CisJCWJwLT5yZXRyaWVzKys7CisJCWRiZyAoIlJldHJ5IGNvdW50ID0gJWQiLCBicC0+cmV0cmllcyk7CisJCS8qIHNlbmQgYSBsb25nIGR1bW15IGNvbnRyb2wtd3JpdGUtbWVzc2FnZSB0byBhbGxvdyBkZXZpY2UgZmlybXdhcmUgdG8gcmVhY3QgKi8KKwkJYnAtPmRyLT5iUmVxdWVzdFR5cGUgPSBBVVRfV1JFUTsKKwkJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfRFVNTVk7CisJCWJwLT5kci0+d1ZhbHVlICAgICAgID0gYnAtPmRyLT53TGVuZ3RoOyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSAqLworCQkvLyBicC0+ZHItPndJbmRleCAgICBjaGFubmVsIElEIHJlbWFpbnMKKwkJYnAtPmRyLT53TGVuZ3RoICAgICAgPSBjcHVfdG9fbGUxNiAoMzIpOyAvKiA+PSA4IGJ5dGVzICovCisJCXVzYl9maWxsX2NvbnRyb2xfdXJiIChicC0+dXJicCwgY3AtPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlIChjcC0+dXNiZGV2LCAwKSwKKyAgCQkJKHVuc2lnbmVkIGNoYXIqKWJwLT5kciwgYnAtPmJ1ZnAsIDMyLAorCSAgIAkJYXVlcnN3YWxkX2N0cmxyZWFkX3dyZXRjb21wbGV0ZSxicCk7CisKKwkJLyogc3VibWl0IHRoZSBjb250cm9sIG1zZyBhcyBuZXh0IHBha2V0ICovCisgICAgICAgCQlyZXQgPSBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0ICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnAsIDEpOworICAgICAgIAkJaWYgKHJldCkgeworICAgICAgICAgICAgICAgCQlkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGU6IG5vbnplcm8gcmVzdWx0IG9mIGF1ZXJjaGFpbl9zdWJtaXRfdXJiX2xpc3QgJWQiLCByZXQpOworICAgICAgICAgICAgICAgCQlicC0+dXJicC0+c3RhdHVzID0gcmV0OworICAgICAgICAgICAgICAgCQlhdWVyc3dhbGRfY3RybHJlYWRfd3JldGNvbXBsZXRlIChicC0+dXJicCwgcmVncyk7CisJCX0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKiBnZXQgdGhlIGFjdHVhbCBieXRlY291bnQgKGluY2wuIGhlYWRlcmJ5dGUpICovCisgICAgICAgIGJwLT5sZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisgICAgICAgIHNlcnZpY2VpZCA9IGJwLT5idWZwWzBdICYgQVVIX1RZUEVNQVNLOworICAgICAgICBkYmcgKCJQYWtldCB3aXRoIHNlcnZpY2VpZCAlZCBhbmQgJWQgYnl0ZXMgcmVjZWl2ZWQiLCBzZXJ2aWNlaWQsIGJwLT5sZW4pOworCisgICAgICAgIC8qIGRpc3BhdGNoIHRoZSBwYWtldCAqLworICAgICAgICBzY3AgPSBjcC0+c2VydmljZXNbc2VydmljZWlkXTsKKyAgICAgICAgaWYgKHNjcCkgeworICAgICAgICAgICAgICAgIC8qIGxvb2ssIE1hLCBhIGxpc3RlbmVyISAqLworICAgICAgICAgICAgICAgIHNjcC0+ZGlzcGF0Y2ggKHNjcCwgYnApOworICAgICAgICB9CisKKyAgICAgICAgLyogcmVsZWFzZSB0aGUgcGFrZXQgKi8KKyAgICAgICAgYXVlcmJ1Zl9yZWxlYXNlYnVmIChicCk7CisJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEhhbmRsaW5nIG9mIEludGVycnVwdCBFbmRwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGlzIGludGVycnVwdCBFbmRwb2ludCBpcyB1c2VkIHRvIGluZm9ybSB0aGUgaG9zdCBhYm91dCB3YWl0aW5nCisgICBtZXNzYWdlcyBmcm9tIHRoZSBVU0IgZGV2aWNlLgorKi8KKy8qIGludCBjb21wbGV0aW9uIGhhbmRsZXIuICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfaW50X2NvbXBsZXRlIChzdHJ1Y3QgdXJiICogdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgdW5zaWduZWQgIGludCBjaGFubmVsaWQ7CisgICAgICAgIHVuc2lnbmVkICBpbnQgYnl0ZWNvdW50OworICAgICAgICBpbnQgcmV0OworICAgICAgICBwYXVlcmJ1Zl90ICAgYnAgPSBOVUxMOworICAgICAgICBwYXVlcnN3YWxkX3QgY3AgPSAocGF1ZXJzd2FsZF90KSB1cmItPmNvbnRleHQ7CisKKyAgICAgICAgZGJnICgiJXMgY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisgICAgICAgIC8qIGNoZWNrIGlmIGFsbCBuZWVkZWQgZGF0YSB3YXMgcmVjZWl2ZWQgKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgQVVfSVJRTUlOU0laRSkgeworICAgICAgICAgICAgICAgIGRiZyAoImludmFsaWQgZGF0YSBsZW5ndGggcmVjZWl2ZWQ6ICVkIGJ5dGVzIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGNvbW1hbmQgY29kZSAqLworICAgICAgICBpZiAoY3AtPmludGJ1ZnBbMF0gIT0gQVVfSVJRQ01ESUQpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGNvbW1hbmQgcmVjZWl2ZWQ6ICVkIiwgY3AtPmludGJ1ZnBbMF0pOworCQlnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayB0aGUgY29tbWFuZCB0eXBlICovCisgICAgICAgIGlmIChjcC0+aW50YnVmcFsxXSAhPSBBVV9CTE9DS1JEWSkgeworICAgICAgICAgICAgICAgIGRiZyAoImludmFsaWQgY29tbWFuZCB0eXBlIHJlY2VpdmVkOiAlZCIsIGNwLT5pbnRidWZwWzFdKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGV4dHJhY3QgdGhlIGluZm9ybWF0aW9uICovCisgICAgICAgIGNoYW5uZWxpZCA9IGNwLT5pbnRidWZwWzJdOworICAgICAgICBieXRlY291bnQgPSAodW5zaWduZWQgY2hhciljcC0+aW50YnVmcFszXTsKKyAgICAgICAgYnl0ZWNvdW50IHw9ICh1bnNpZ25lZCBjaGFyKWNwLT5pbnRidWZwWzRdIDw8IDg7CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGNoYW5uZWwgaWQgKi8KKyAgICAgICAgaWYgKGNoYW5uZWxpZCA+PSBBVUhfVFlQRVNJWkUpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGNoYW5uZWwgaWQgcmVjZWl2ZWQ6ICVkIiwgY2hhbm5lbGlkKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGJ5dGUgY291bnQgKi8KKyAgICAgICAgaWYgKGJ5dGVjb3VudCA+IChjcC0+bWF4Q29udHJvbExlbmd0aCtBVUhfU0laRSkpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGJ5dGUgY291bnQgcmVjZWl2ZWQ6ICVkIiwgYnl0ZWNvdW50KTsKKwkJZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGRiZyAoIlNlcnZpY2UgQ2hhbm5lbCA9ICVkIiwgY2hhbm5lbGlkKTsKKyAgICAgICAgZGJnICgiQnl0ZSBDb3VudCA9ICVkIiwgYnl0ZWNvdW50KTsKKworICAgICAgICAvKiBnZXQgYSBidWZmZXIgZm9yIHRoZSBuZXh0IGRhdGEgcGFrZXQgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5ICgmY3AtPmJ1ZmN0bC5mcmVlX2J1ZmZfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiB5ZXM6IGdldCB0aGUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYnAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJidWZfdCwgYnVmZl9saXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogaWYgbm8gYnVmZmVyIGF2YWlsYWJsZTogc2tpcCBpdCAqLworICAgICAgICBpZiAoIWJwKSB7CisgICAgICAgICAgICAgICAgZGJnICgiYXVlcnN3YWxkX2ludF9jb21wbGV0ZTogbm8gZGF0YSBidWZmZXIgYXZhaWxhYmxlIik7CisgICAgICAgICAgICAgICAgLyogY2FuIHdlIGRvIHNvbWV0aGluZyBtb3JlPworCQkgICBUaGlzIGlzIGEgYmlnIHByb2JsZW06IGlmIHRoaXMgaW50IHBhY2tldCBpcyBpZ25vcmVkLCB0aGUKKwkJICAgZGV2aWNlIHdpbGwgd2FpdCBmb3JldmVyIGFuZCBub3Qgc2lnbmFsIGFueSBtb3JlIGRhdGEuCisJCSAgIFRoZSBvbmx5IHJlYWwgc29sdXRpb24gaXM6IGhhdmluZyBlbm91Z2ggYnVmZmVycyEKKwkJICAgT3IgcGVyaGFwcyB0ZW1wb3JhcnkgZGlzYWJsaW5nIHRoZSBpbnQgZW5kcG9pbnQ/CisJCSovCisJCWdvdG8gZXhpdDsKKyAgICAgICAgfQorCisJLyogZmlsbCB0aGUgY29udHJvbCBtZXNzYWdlICovCisgICAgICAgIGJwLT5kci0+YlJlcXVlc3RUeXBlID0gQVVUX1JSRVE7CisJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfUkJMT0NLOworCWJwLT5kci0+d1ZhbHVlICAgICAgID0gY3B1X3RvX2xlMTYgKDApOworCWJwLT5kci0+d0luZGV4ICAgICAgID0gY3B1X3RvX2xlMTYgKGNoYW5uZWxpZCB8IEFVSF9ESVJFQ1QgfCBBVUhfVU5TUExJVCk7CisJYnAtPmRyLT53TGVuZ3RoICAgICAgPSBjcHVfdG9fbGUxNiAoYnl0ZWNvdW50KTsKKwl1c2JfZmlsbF9jb250cm9sX3VyYiAoYnAtPnVyYnAsIGNwLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCBieXRlY291bnQsCisJCSAgICAgICAgICBhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUsYnApOworCisgICAgICAgIC8qIHN1Ym1pdCB0aGUgY29udHJvbCBtc2cgKi8KKyAgICAgICAgcmV0ID0gYXVlcmNoYWluX3N1Ym1pdF91cmIgKCZjcC0+Y29udHJvbGNoYWluLCBicC0+dXJicCk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJhdWVyc3dhbGRfaW50X2NvbXBsZXRlOiBub256ZXJvIHJlc3VsdCBvZiBhdWVyY2hhaW5fc3VibWl0X3VyYiAlZCIsIHJldCk7CisgICAgICAgICAgICAgICAgYnAtPnVyYnAtPnN0YXR1cyA9IHJldDsKKyAgICAgICAgICAgICAgICBhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUoIGJwLT51cmJwLCBOVUxMKTsKKwkJLyogaGVyZSBhcHBsaWVzIHRoZSBzYW1lIHByb2JsZW0gYXMgYWJvdmU6IGRldmljZSBsb2NraW5nISAqLworICAgICAgICB9CitleGl0OgorCXJldCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHJldCk7Cit9CisKKy8qIGludCBtZW1vcnkgZGVhbGxvY2F0aW9uCisgICBOT1RFOiBubyBtdXRleCBwbGVhc2UhCisqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2ludF9mcmVlIChwYXVlcnN3YWxkX3QgY3ApCit7CisgICAgICAgIGlmIChjcC0+aW50dXJicCkgeworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYiAoY3AtPmludHVyYnApOworICAgICAgICAgICAgICAgIGNwLT5pbnR1cmJwID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3AtPmludGJ1ZnApIHsKKyAgICAgICAgICAgICAgICBrZnJlZSAoY3AtPmludGJ1ZnApOworICAgICAgICAgICAgICAgIGNwLT5pbnRidWZwID0gTlVMTDsKKyAgICAgICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhY3RpdmF0ZSB0aGUgaW50ZXJydXB0CisgICBlbmRwb2ludC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBhbiBlcnJvciBjb2RlLgorICAgTk9URTogbm8gbXV0ZXggcGxlYXNlIQorKi8KK3N0YXRpYyBpbnQgYXVlcnN3YWxkX2ludF9vcGVuIChwYXVlcnN3YWxkX3QgY3ApCit7CisgICAgICAgIGludCByZXQ7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlpbnQgaXJxc2l6ZTsKKwlkYmcgKCJhdWVyc3dhbGRfaW50X29wZW4iKTsKKworCWVwID0gY3AtPnVzYmRldi0+ZXBfaW5bQVVfSVJRRU5EUF07CisJaWYgKCFlcCkgeworCQlyZXQgPSAtRUZBVUxUOworICAJCWdvdG8gaW50b2VuZDsKKyAgICAJfQorCWlycXNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJY3AtPmlycXNpemUgPSBpcnFzaXplOworCisJLyogYWxsb2NhdGUgdGhlIHVyYiBhbmQgZGF0YSBidWZmZXIgKi8KKyAgICAgICAgaWYgKCFjcC0+aW50dXJicCkgeworICAgICAgICAgICAgICAgIGNwLT5pbnR1cmJwID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFjcC0+aW50dXJicCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50b2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjcC0+aW50YnVmcCkgeworICAgICAgICAgICAgICAgIGNwLT5pbnRidWZwID0gKGNoYXIgKikga21hbGxvYyAoaXJxc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFjcC0+aW50YnVmcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50b2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogc2V0dXAgdXJiICovCisgICAgICAgIHVzYl9maWxsX2ludF91cmIgKGNwLT5pbnR1cmJwLCBjcC0+dXNiZGV2LAorCQkJdXNiX3JjdmludHBpcGUgKGNwLT51c2JkZXYsQVVfSVJRRU5EUCksIGNwLT5pbnRidWZwLAorCQkJaXJxc2l6ZSwgYXVlcnN3YWxkX2ludF9jb21wbGV0ZSwgY3AsIGVwLT5kZXNjLmJJbnRlcnZhbCk7CisgICAgICAgIC8qIHN0YXJ0IHRoZSB1cmIgKi8KKwljcC0+aW50dXJicC0+c3RhdHVzID0gMDsJLyogbmVlZGVkISAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiIChjcC0+aW50dXJicCwgR0ZQX0tFUk5FTCk7CisKK2ludG9lbmQ6CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgLyogYWN0aXZhdGlvbiBvZiBpbnRlcnJ1cHQgZW5kcG9pbnQgaGFzIGZhaWxlZC4gTm93IGNsZWFuIHVwLiAqLworICAgICAgICAgICAgICAgIGRiZyAoImF1ZXJzd2FsZF9pbnRfb3BlbjogYWN0aXZhdGlvbiBvZiBpbnQgZW5kcG9pbnQgZmFpbGVkIik7CisKKyAgICAgICAgICAgICAgICAvKiBkZWFsbG9jYXRlIG1lbW9yeSAqLworICAgICAgICAgICAgICAgIGF1ZXJzd2FsZF9pbnRfZnJlZSAoY3ApOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRlYWN0aXZhdGUgdGhlIGludGVycnVwdAorICAgZW5kcG9pbnQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYW4gZXJyb3IgY29kZS4KKyAgIE5PVEU6IG5vIG11dGV4IHBsZWFzZSEKKyovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfaW50X3JlbGVhc2UgKHBhdWVyc3dhbGRfdCBjcCkKK3sKKyAgICAgICAgZGJnICgiYXVlcnN3YWxkX2ludF9yZWxlYXNlIik7CisKKyAgICAgICAgLyogc3RvcCB0aGUgaW50IGVuZHBvaW50ICovCisgICAgICAgIGlmIChjcC0+aW50dXJicCkKKyAgICAgICAgICAgICAgICB1c2Jfa2lsbF91cmIgKGNwLT5pbnR1cmJwKTsKKworICAgICAgICAvKiBkZWFsbG9jYXRlIG1lbW9yeSAqLworICAgICAgICBhdWVyc3dhbGRfaW50X2ZyZWUgKGNwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBIZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogd2FrZSB1cCB3YWl0aW5nIHJlYWRlcnMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFyX2Rpc2Nvbm5lY3QgKHBhdWVyc2Nvbl90IHNjcCkKK3sKKyAgICAgICAgcGF1ZXJjaGFyX3QgY2NwID0gKChwYXVlcmNoYXJfdCkoKGNoYXIgKikoc2NwKS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJjaGFyX3QpMCktPnNjb250ZXh0KSkpOworCWRiZyAoImF1ZXJjaGFyX2Rpc2Nvbm5lY3QgY2FsbGVkIik7CisJY2NwLT5yZW1vdmVkID0gMTsKKwl3YWtlX3VwICgmY2NwLT5yZWFkd2FpdCk7Cit9CisKKworLyogZGlzcGF0Y2ggYSByZWFkIHBha2V0IHRvIGEgd2FpdGluZyBjaGFyYWN0ZXIgZGV2aWNlICovCitzdGF0aWMgdm9pZCBhdWVyY2hhcl9jdHJscmVhZF9kaXNwYXRjaCAocGF1ZXJzY29uX3Qgc2NwLCBwYXVlcmJ1Zl90IGJwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHBhdWVyY2hhcl90IGNjcDsKKyAgICAgICAgcGF1ZXJidWZfdCBuZXdicCA9IE5VTEw7CisgICAgICAgIGNoYXIgKiBjaGFycDsKKyAgICAgICAgZGJnICgiYXVlcmNoYXJfY3RybHJlYWRfZGlzcGF0Y2ggY2FsbGVkIik7CisgICAgICAgIGNjcCA9ICgocGF1ZXJjaGFyX3QpKChjaGFyICopKHNjcCktKHVuc2lnbmVkIGxvbmcpKCYoKHBhdWVyY2hhcl90KTApLT5zY29udGV4dCkpKTsKKworICAgICAgICAvKiBnZXQgYSByZWFkIGJ1ZmZlciBmcm9tIGNoYXJhY3RlciBkZXZpY2UgY29udGV4dCAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmNjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5ICgmY2NwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QpKSB7CisgICAgICAgICAgICAgICAgLyogeWVzOiBnZXQgdGhlIGVudHJ5ICovCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gY2NwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBuZXdicCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgaWYgKCFuZXdicCkgeworICAgICAgICAgICAgICAgIGRiZyAoIk5vIHJlYWQgYnVmZmVyIGF2YWlsYWJsZSwgZGlzY2FyZCBwYWtldCEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAvKiBubyBidWZmZXIsIG5vIGRpc3BhdGNoICovCisgICAgICAgIH0KKworICAgICAgICAvKiBjb3B5IGluZm9ybWF0aW9uIHRvIG5ldyBidWZmZXIgZWxlbWVudAorICAgICAgICAgICAoYWxsIGJ1ZmZlcnMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgpICovCisgICAgICAgIGNoYXJwID0gbmV3YnAtPmJ1ZnA7CisgICAgICAgIG5ld2JwLT5idWZwID0gYnAtPmJ1ZnA7CisgICAgICAgIGJwLT5idWZwID0gY2hhcnA7CisgICAgICAgIG5ld2JwLT5sZW4gPSBicC0+bGVuOworCisgICAgICAgIC8qIGluc2VydCBuZXcgYnVmZmVyIGluIHJlYWQgbGlzdCAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmNjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsICgmbmV3YnAtPmJ1ZmZfbGlzdCwgJmNjcC0+YnVmY3RsLnJlY19idWZmX2xpc3QpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY2NwLT5idWZjdGwubG9jaywgZmxhZ3MpOworICAgICAgICBkYmcgKCJyZWFkIGJ1ZmZlciBhcHBlbmRlZCB0byByZWNfbGlzdCIpOworCisgICAgICAgIC8qIHdha2UgdXAgcGVuZGluZyBzeW5jaHJvbm91cyByZWFkcyAqLworCXdha2VfdXAgKCZjY3AtPnJlYWR3YWl0KTsKK30KKworCisvKiBEZWxldGUgYW4gYXVlcnN3YWxkIGRyaXZlciBjb250ZXh0ICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfZGVsZXRlKCBwYXVlcnN3YWxkX3QgY3ApCit7CisJZGJnKCAiYXVlcnN3YWxkX2RlbGV0ZSIpOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCisJLyogQ2xlYW5pbmcgdXAgKi8KKwlhdWVyc3dhbGRfaW50X3JlbGVhc2UgKGNwKTsKKwlhdWVyY2hhaW5fZnJlZSAoJmNwLT5jb250cm9sY2hhaW4pOworCWF1ZXJidWZfZnJlZV9idWZmZXJzICgmY3AtPmJ1ZmN0bCk7CisKKwkvKiByZWxlYXNlIHRoZSBtZW1vcnkgKi8KKwlrZnJlZSggY3ApOworfQorCisKKy8qIERlbGV0ZSBhbiBhdWVyc3dhbGQgY2hhcmFjdGVyIGNvbnRleHQgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFyX2RlbGV0ZSggcGF1ZXJjaGFyX3QgY2NwKQoreworCWRiZyAoImF1ZXJjaGFyX2RlbGV0ZSIpOworCWlmIChjY3AgPT0gTlVMTCkKKwkJcmV0dXJuOworCisgICAgICAgIC8qIHdha2UgdXAgcGVuZGluZyBzeW5jaHJvbm91cyByZWFkcyAqLworCWNjcC0+cmVtb3ZlZCA9IDE7CisJd2FrZV91cCAoJmNjcC0+cmVhZHdhaXQpOworCisJLyogcmVtb3ZlIHRoZSByZWFkIGJ1ZmZlciAqLworCWlmIChjY3AtPnJlYWRidWYpIHsKKwkJYXVlcmJ1Zl9yZWxlYXNlYnVmIChjY3AtPnJlYWRidWYpOworCQljY3AtPnJlYWRidWYgPSBOVUxMOworCX0KKworCS8qIHJlbW92ZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcnMgKi8KKwlhdWVyYnVmX2ZyZWVfYnVmZmVycyAoJmNjcC0+YnVmY3RsKTsKKworCS8qIHJlbGVhc2UgdGhlIG1lbW9yeSAqLworCWtmcmVlKCBjY3ApOworfQorCisKKy8qIGFkZCBhIG5ldyBzZXJ2aWNlIHRvIHRoZSBkZXZpY2UKKyAgIHNjcC0+aWQgbXVzdCBiZSBzZXQhCisgICByZXR1cm46IDAgaWYgT0ssIGVsc2UgZXJyb3IgY29kZQorKi8KK3N0YXRpYyBpbnQgYXVlcnN3YWxkX2FkZHNlcnZpY2UgKHBhdWVyc3dhbGRfdCBjcCwgcGF1ZXJzY29uX3Qgc2NwKQoreworCWludCByZXQ7CisKKwkvKiBpcyB0aGUgZGV2aWNlIGF2YWlsYWJsZT8gKi8KKwlpZiAoIWNwLT51c2JkZXYpIHsKKwkJZGJnICgidXNiZGV2ID09IE5VTEwiKTsKKwkJcmV0dXJuIC1FSU87CS8qbm86IGNhbiBub3QgYWRkIGEgc2VydmljZSwgc29ycnkqLworCX0KKworCS8qIGlzIHRoZSBzZXJ2aWNlIGF2YWlsYWJsZT8gKi8KKwlpZiAoY3AtPnNlcnZpY2VzW3NjcC0+aWRdKSB7CisJCWRiZyAoInNlcnZpY2UgaXMgYnVzeSIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisJfQorCisJLyogZGV2aWNlIGlzIGF2YWlsYWJsZSwgc2VydmljZSBpcyBmcmVlICovCisJY3AtPnNlcnZpY2VzW3NjcC0+aWRdID0gc2NwOworCisJLyogcmVnaXN0ZXIgc2VydmljZSBpbiBkZXZpY2UgKi8KKwlyZXQgPSBhdWVyY2hhaW5fY29udHJvbF9tc2coCisJCSZjcC0+Y29udHJvbGNoYWluLCAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGNvbnRyb2wgY2hhaW4gKi8KKwkJY3AtPnVzYmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gZGV2aWNlICovCisJCXVzYl9zbmRjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksICAgICAgICAvKiBwaXBlIHRvIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwkJQVVWX0NIQU5ORUxDVEwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUgKi8KKwkJQVVUX1dSRVEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHJlcXVlc3QgdHlwZSB2YWx1ZSAqLworCQkweDAxLCAgICAgICAgICAgICAgLyogb3BlbiAgICAgICAgICAgICAgICAgVVNCIG1lc3NhZ2UgdmFsdWUgKi8KKwkJc2NwLT5pZCwgICAgICAgICAgICAJCSAgICAgICAgLyogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWUgKi8KKwkJTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZCAqLworCQkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQgKi8KKwkJSFogKiAyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlkYmcgKCJhdWVyc3dhbGRfYWRkc2VydmljZTogYXVlcmNoYWluX2NvbnRyb2xfbXNnIHJldHVybmVkIGVycm9yIGNvZGUgJWQiLCByZXQpOworCQkvKiB1bmRvIGFib3ZlIGFjdGlvbnMgKi8KKwkJY3AtPnNlcnZpY2VzW3NjcC0+aWRdID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYmcgKCJhdWVyc3dhbGRfYWRkc2VydmljZTogY2hhbm5lbCBvcGVuIE9LIik7CisJcmV0dXJuIDA7Cit9CisKKworLyogcmVtb3ZlIGEgc2VydmljZSBmcm9tIHRoZSB0aGUgZGV2aWNlCisgICBzY3AtPmlkIG11c3QgYmUgc2V0ISAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2UgKHBhdWVyc3dhbGRfdCBjcCwgcGF1ZXJzY29uX3Qgc2NwKQoreworCWRiZyAoImF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIGNhbGxlZCIpOworCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBhIHNlcnZpY2UgYWxsb2NhdGVkICovCisJaWYgKHNjcC0+aWQgPT0gQVVIX1VOQVNTSUdORUQpCisJCXJldHVybjsKKworCS8qIElmIHRoZXJlIGlzIGEgZGV2aWNlOiBjbG9zZSB0aGUgY2hhbm5lbCAqLworCWlmIChjcC0+dXNiZGV2KSB7CisJCS8qIENsb3NlIHRoZSBzZXJ2aWNlIGNoYW5uZWwgaW5zaWRlIHRoZSBkZXZpY2UgKi8KKwkJaW50IHJldCA9IGF1ZXJjaGFpbl9jb250cm9sX21zZygKKwkJJmNwLT5jb250cm9sY2hhaW4sICAgICAgICAgICAgCQkvKiBwb2ludGVyIHRvIGNvbnRyb2wgY2hhaW4gKi8KKwkJY3AtPnVzYmRldiwgICAgICAgICAJCSAgICAgICAgLyogcG9pbnRlciB0byBkZXZpY2UgKi8KKwkJdXNiX3NuZGN0cmxwaXBlIChjcC0+dXNiZGV2LCAwKSwJLyogcGlwZSB0byBjb250cm9sIGVuZHBvaW50ICovCisJCUFVVl9DSEFOTkVMQ1RMLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlICovCisJCUFVVF9XUkVRLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUgKi8KKwkJMHgwMCwgICAgICAgICAgICAgIC8vIGNsb3NlICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHZhbHVlICovCisJCXNjcC0+aWQsICAgICAgICAgICAgCQkgICAgICAgIC8qIFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlICovCisJCU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQgKi8KKwkJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kICovCisJCUhaICogMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0ICovCisJCWlmIChyZXQgPCAwKSB7CisJCQlkYmcgKCJhdWVyc3dhbGRfcmVtb3Zlc2VydmljZTogYXVlcmNoYWluX2NvbnRyb2xfbXNnIHJldHVybmVkIGVycm9yIGNvZGUgJWQiLCByZXQpOworCQl9CisJCWVsc2UgeworCQkJZGJnICgiYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2U6IGNoYW5uZWwgY2xvc2UgT0siKTsKKwkJfQorCX0KKworCS8qIHJlbW92ZSB0aGUgc2VydmljZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwljcC0+c2VydmljZXNbc2NwLT5pZF0gPSBOVUxMOworCXNjcC0+aWQgPSBBVUhfVU5BU1NJR05FRDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENoYXIgZGV2aWNlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBPcGVuIGEgbmV3IGNoYXJhY3RlciBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgYXVlcmNoYXJfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IGR0aW5kZXggPSBpbWlub3IoaW5vZGUpOworCXBhdWVyc3dhbGRfdCBjcCA9IE5VTEw7CisJcGF1ZXJjaGFyX3QgY2NwID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICAvKiBtaW5vciBudW1iZXIgaW4gcmFuZ2U/ICovCisJaWYgKGR0aW5kZXggPCAwKSB7CisJCXJldHVybiAtRU5PREVWOworICAgICAgICB9CisJaW50ZiA9IHVzYl9maW5kX2ludGVyZmFjZSgmYXVlcnN3YWxkX2RyaXZlciwgZHRpbmRleCk7CisJaWYgKCFpbnRmKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHVzYiBkZXZpY2UgYXZhaWxhYmxlPyAqLworCWNwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJaWYgKGNwID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjcC0+bXV0ZXgpKSB7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIGRldmljZS4gTm93IGxldHMgYWxsb2NhdGUgbWVtb3J5ICovCisJY2NwID0gKHBhdWVyY2hhcl90KSBrbWFsbG9jKHNpemVvZihhdWVyY2hhcl90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNjcCA9PSBOVUxMKSB7CisJCWVyciAoIm91dCBvZiBtZW1vcnkiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvZmFpbDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGRldmljZSBkZXNjcmlwdG9yICovCisJbWVtc2V0KCBjY3AsIDAsIHNpemVvZihhdWVyY2hhcl90KSk7CisJaW5pdF9NVVRFWCggJmNjcC0+bXV0ZXgpOworCWluaXRfTVVURVgoICZjY3AtPnJlYWRtdXRleCk7CisgICAgICAgIGF1ZXJidWZfaW5pdCAoJmNjcC0+YnVmY3RsKTsKKyAgICAgICAgY2NwLT5zY29udGV4dC5pZCA9IEFVSF9VTkFTU0lHTkVEOworICAgICAgICBjY3AtPnNjb250ZXh0LmRpc3BhdGNoID0gYXVlcmNoYXJfY3RybHJlYWRfZGlzcGF0Y2g7CisJY2NwLT5zY29udGV4dC5kaXNjb25uZWN0ID0gYXVlcmNoYXJfZGlzY29ubmVjdDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmY2NwLT5yZWFkd2FpdCk7CisKKwlyZXQgPSBhdWVyYnVmX3NldHVwICgmY2NwLT5idWZjdGwsIEFVX1JCVUZGRVJTLCBjcC0+bWF4Q29udHJvbExlbmd0aCtBVUhfU0laRSk7CisgICAgICAgCWlmIChyZXQpIHsKKwkJZ290byBvZmFpbDsKKwl9CisKKwljcC0+b3Blbl9jb3VudCsrOworCWNjcC0+YXVlcmRldiA9IGNwOworCWRiZygib3BlbiAlcyBhcyAvZGV2LyVzIiwgY3AtPmRldl9kZXNjLCBjcC0+bmFtZSk7CisJdXAgKCZjcC0+bXV0ZXgpOworCisJLyogZmlsZSBJTyBzdHVmZiAqLworCWZpbGUtPmZfcG9zID0gMDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBjY3A7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCisJLyogRXJyb3IgZXhpdCAqLworb2ZhaWw6CXVwICgmY3AtPm11dGV4KTsKKwlhdWVyY2hhcl9kZWxldGUgKGNjcCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKiBJT0NUTCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgYXVlcmNoYXJfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlwYXVlcmNoYXJfdCBjY3AgPSAocGF1ZXJjaGFyX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKyAgICAgICAgYXVkZXZpbmZvX3QgZGV2aW5mbzsKKyAgICAgICAgcGF1ZXJzd2FsZF90IGNwID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdTsKKwl1bnNpZ25lZCBpbnQgX191c2VyICp1c2VyX2FyZyA9ICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnOworCisgICAgICAgIGRiZyAoImlvY3RsIik7CisKKwkvKiBnZXQgdGhlIG11dGV4ZXMgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJY3AgPSBjY3AtPmF1ZXJkZXY7CisJaWYgKCFjcCkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY3AtPm11dGV4KSkgeworCQl1cCgmY2NwLT5tdXRleCk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogQ2hlY2sgZm9yIHJlbW92YWwgKi8KKwlpZiAoIWNwLT51c2JkZXYpIHsKKwkJdXAoJmNwLT5tdXRleCk7CisJCXVwKCZjY3AtPm11dGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCisJLyogcmV0dXJuICE9IDAgaWYgVHJhbnNtaXR0IGNoYW5uZWwgcmVhZHkgdG8gc2VuZCAqLworCWNhc2UgSU9DVExfQVVfVFhSRUFEWToKKwkJZGJnICgiSU9DVExfQVVfVFhSRUFEWSIpOworCQl1ICAgPSBjY3AtPmF1ZXJkZXYKKwkJICAgJiYgKGNjcC0+c2NvbnRleHQuaWQgIT0gQVVIX1VOQVNTSUdORUQpCisJCSAgICYmICFsaXN0X2VtcHR5ICgmY3AtPmJ1ZmN0bC5mcmVlX2J1ZmZfbGlzdCk7CisJICAgICAgICByZXQgPSBwdXRfdXNlciAodSwgdXNlcl9hcmcpOworCQlicmVhazsKKworCS8qIHJldHVybiAhPSAwIGlmIGNvbm5lY3RlZCB0byBhIHNlcnZpY2UgY2hhbm5lbCAqLworCWNhc2UgSU9DVExfQVVfQ09OTkVDVDoKKwkJZGJnICgiSU9DVExfQVVfQ09OTkVDVCIpOworCQl1ID0gKGNjcC0+c2NvbnRleHQuaWQgIT0gQVVIX1VOQVNTSUdORUQpOworCSAgICAgICAgcmV0ID0gcHV0X3VzZXIgKHUsIHVzZXJfYXJnKTsKKwkJYnJlYWs7CisKKwkvKiByZXR1cm4gIT0gMCBpZiBSZWNlaXZlIERhdGEgYXZhaWxhYmxlICovCisJY2FzZSBJT0NUTF9BVV9SWEFWQUlMOgorCQlkYmcgKCJJT0NUTF9BVV9SWEFWQUlMIik7CisJCWlmIChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCQl1ID0gMDsJLyogbm8gZGF0YSAqLworCQlpZiAoY2NwLT5yZWFkYnVmKSB7CisJCQlpbnQgcmVzdGxlbiA9IGNjcC0+cmVhZGJ1Zi0+bGVuIC0gY2NwLT5yZWFkb2Zmc2V0OworCQkJaWYgKHJlc3RsZW4gPiAwKQorCQkJCXUgPSAxOworCQl9CisJCWlmICghdSkgeworICAgICAgICAJCWlmICghbGlzdF9lbXB0eSAoJmNjcC0+YnVmY3RsLnJlY19idWZmX2xpc3QpKSB7CisJCQkJdSA9IDE7CisJCQl9CisJCX0KKwkgICAgICAgIHJldCA9IHB1dF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJLyogcmV0dXJuIHRoZSBtYXguIGJ1ZmZlciBsZW5ndGggZm9yIHRoZSBkZXZpY2UgKi8KKwljYXNlIElPQ1RMX0FVX0JVRkxFTjoKKwkJZGJnICgiSU9DVExfQVVfQlVGTEVOIik7CisJCXUgPSBjcC0+bWF4Q29udHJvbExlbmd0aDsKKwkgICAgICAgIHJldCA9IHB1dF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJLyogcmVxdWVzdGluZyBhIHNlcnZpY2UgY2hhbm5lbCAqLworICAgICAgICBjYXNlIElPQ1RMX0FVX1NFUlZSRVE6CisJCWRiZyAoIklPQ1RMX0FVX1NFUlZSRVEiKTsKKyAgICAgICAgICAgICAgICAvKiByZXF1ZXN0aW5nIGEgc2VydmljZSBtZWFuczogcmVsZWFzZSB0aGUgcHJldmlvdXMgb25lIGZpcnN0ICovCisJCWF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIChjcCwgJmNjcC0+c2NvbnRleHQpOworCQkvKiBnZXQgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJCXJldCA9IGdldF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWlmIChyZXQpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmICgodSA8IEFVSF9GSVJTVFVTRVJDSCkgfHwgKHUgPj0gQVVIX1RZUEVTSVpFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYmcgKCJhdWVyY2hhciBzZXJ2aWNlIHJlcXVlc3QgcGFyYW1ldGVycyBhcmUgb2siKTsKKwkJY2NwLT5zY29udGV4dC5pZCA9IHU7CisKKwkJLyogcmVxdWVzdCB0aGUgc2VydmljZSBub3cgKi8KKwkJcmV0ID0gYXVlcnN3YWxkX2FkZHNlcnZpY2UgKGNwLCAmY2NwLT5zY29udGV4dCk7CisJCWlmIChyZXQpIHsKKwkJCS8qIG5vOiByZXZlcnQgc2VydmljZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIAljY3AtPnNjb250ZXh0LmlkID0gQVVIX1VOQVNTSUdORUQ7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBnZXQgYSBzdHJpbmcgZGVzY3JpcHRvciBmb3IgdGhlIGRldmljZSAqLworCWNhc2UgSU9DVExfQVVfREVWSU5GTzoKKwkJZGJnICgiSU9DVExfQVVfREVWSU5GTyIpOworICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlciAoJmRldmluZm8sICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZiAoYXVkZXZpbmZvX3QpKSkgeworICAgICAgICAJCXJldCA9IC1FRkFVTFQ7CisJICAgICAgICAJYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCQl1ID0gc3RybGVuKGNwLT5kZXZfZGVzYykrMTsKKwkJaWYgKHUgPiBkZXZpbmZvLmJzaXplKSB7CisJCQl1ID0gZGV2aW5mby5ic2l6ZTsKKwkJfQorCQlyZXQgPSBjb3B5X3RvX3VzZXIoZGV2aW5mby5idWYsIGNwLT5kZXZfZGVzYywgdSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CisKKwkvKiBnZXQgdGhlIG1heC4gc3RyaW5nIGRlc2NyaXB0b3IgbGVuZ3RoICovCisgICAgICAgIGNhc2UgSU9DVExfQVVfU0xFTjoKKwkJZGJnICgiSU9DVExfQVVfU0xFTiIpOworCQl1ID0gQVVTSV9ETEVOOworCSAgICAgICAgcmV0ID0gcHV0X3VzZXIgKHUsIHVzZXJfYXJnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkYmcgKCJJT0NUTF9BVV9VTktOT1dOIik7CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisgICAgICAgIH0KKwkvKiByZWxlYXNlIHRoZSBtdXRleGVzICovCisJdXAoJmNwLT5tdXRleCk7CisJdXAoJmNjcC0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJlYWQgZGF0YSBmcm9tIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBzc2l6ZV90IGF1ZXJjaGFyX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcGF1ZXJjaGFyX3QgY2NwID0gKHBhdWVyY2hhcl90KSBmaWxlLT5wcml2YXRlX2RhdGE7CisgICAgICAgIHBhdWVyYnVmX3QgICBicCA9IE5VTEw7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYXJfcmVhZCIpOworCisJLyogRXJyb3IgY2hlY2tpbmcgKi8KKwlpZiAoIWNjcCkKKwkJcmV0dXJuIC1FSU87CisJaWYgKCpwcG9zKQorIAkJcmV0dXJuIC1FU1BJUEU7CisgICAgICAgIGlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIGdldCB0aGUgbXV0ZXggKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBDYW4gd2UgZXhwZWN0IHRvIHJlYWQgc29tZXRoaW5nPyAqLworCWlmIChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB7CisJCXVwICgmY2NwLT5tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJfQorCisJLyogb25seSBvbmUgcmVhZGVyIHBlciBkZXZpY2UgYWxsb3dlZCAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPnJlYWRtdXRleCkpIHsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiByZWFkIGRhdGEgZnJvbSByZWFkYnVmLCBpZiBhdmFpbGFibGUgKi8KK2RvcmVhZGJ1ZjoKKwlicCA9IGNjcC0+cmVhZGJ1ZjsKKwlpZiAoYnApIHsKKwkJLyogcmVhZCB0aGUgbWF4aW11bSBieXRlcyAqLworCQlpbnQgcmVzdGxlbiA9IGJwLT5sZW4gLSBjY3AtPnJlYWRvZmZzZXQ7CisJCWlmIChyZXN0bGVuIDwgMCkKKwkJCXJlc3RsZW4gPSAwOworCQlpZiAoY291bnQgPiByZXN0bGVuKQorCQkJY291bnQgPSByZXN0bGVuOworCQlpZiAoY291bnQpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZiwgYnAtPmJ1ZnArY2NwLT5yZWFkb2Zmc2V0LCBjb3VudCkpIHsKKwkJCQlkYmcgKCJhdWVyc3dhbGRfcmVhZDogY29weV90b191c2VyIGZhaWxlZCIpOworCQkJCXVwICgmY2NwLT5yZWFkbXV0ZXgpOworCQkJCXVwICgmY2NwLT5tdXRleCk7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJLyogYWR2YW5jZSB0aGUgcmVhZCBvZmZzZXQgKi8KKwkJY2NwLT5yZWFkb2Zmc2V0ICs9IGNvdW50OworCQlyZXN0bGVuIC09IGNvdW50OworCQkvLyByZXVzZSB0aGUgcmVhZCBidWZmZXIKKwkJaWYgKHJlc3RsZW4gPD0gMCkgeworCQkJYXVlcmJ1Zl9yZWxlYXNlYnVmIChicCk7CisJCQljY3AtPnJlYWRidWYgPSBOVUxMOworCQl9CisJCS8qIHJldHVybiB3aXRoIG51bWJlciBvZiBieXRlcyByZWFkICovCisJCWlmIChjb3VudCkgeworCQkJdXAgKCZjY3AtPnJlYWRtdXRleCk7CisJCQl1cCAoJmNjcC0+bXV0ZXgpOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorCisJLyogYSByZWFkIGJ1ZmZlciBpcyBub3QgYXZhaWxhYmxlLiBUcnkgdG8gZ2V0IHRoZSBuZXh0IGRhdGEgYmxvY2suICovCitkb3JlYWRsaXN0OgorCS8qIFByZXBhcmluZyBmb3Igc2xlZXAgKi8KKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSAoJndhaXQsIGN1cnJlbnQpOworCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX0lOVEVSUlVQVElCTEUpOworCWFkZF93YWl0X3F1ZXVlICgmY2NwLT5yZWFkd2FpdCwgJndhaXQpOworCisJYnAgPSBOVUxMOworCXNwaW5fbG9ja19pcnFzYXZlICgmY2NwLT5idWZjdGwubG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoIWxpc3RfZW1wdHkgKCZjY3AtPmJ1ZmN0bC5yZWNfYnVmZl9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGNjcC0+YnVmY3RsLnJlY19idWZmX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBicCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKwkvKiBoYXZlIHdlIGdvdCBkYXRhPyAqLworCWlmIChicCkgeworCQljY3AtPnJlYWRidWYgPSBicDsKKwkJY2NwLT5yZWFkb2Zmc2V0ID0gQVVIX1NJWkU7IC8qIGZvciBoZWFkZXJieXRlICovCisJCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX1JVTk5JTkcpOworCQlyZW1vdmVfd2FpdF9xdWV1ZSAoJmNjcC0+cmVhZHdhaXQsICZ3YWl0KTsKKwkJZ290byBkb3JlYWRidWY7CQkgIC8qIG5vdyB3ZSBjYW4gcmVhZCEgKi8KKwl9CisKKwkvKiBubyBkYXRhIGF2YWlsYWJsZS4gU2hvdWxkIHdlIHdhaXQ/ICovCisJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisgICAgICAgICAgICAgICAgZGJnICgiTm8gcmVhZCBidWZmZXIgYXZhaWxhYmxlLCByZXR1cm5pbmcgLUVBR0FJTiIpOworCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUgKCZjY3AtPnJlYWR3YWl0LCAmd2FpdCk7CisJCXVwICgmY2NwLT5yZWFkbXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVBR0FJTjsgIC8qIG5vbmJsb2NraW5nLCBubyBkYXRhIGF2YWlsYWJsZSAqLworICAgICAgICB9CisKKwkvKiB5ZXMsIHdlIHNob3VsZCB3YWl0ISAqLworCXVwICgmY2NwLT5tdXRleCk7IC8qIGFsbG93IG90aGVyIG9wZXJhdGlvbnMgd2hpbGUgd2Ugd2FpdCAqLworCXNjaGVkdWxlKCk7CisJcmVtb3ZlX3dhaXRfcXVldWUgKCZjY3AtPnJlYWR3YWl0LCAmd2FpdCk7CisJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkvKiB3YWtlZCB1cCBieSBhIHNpZ25hbCAqLworCQl1cCAoJmNjcC0+cmVhZG11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiBBbnl0aGluZyBsZWZ0IHRvIHJlYWQ/ICovCisJaWYgKChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB8fCBjY3AtPnJlbW92ZWQpIHsKKwkJdXAgKCZjY3AtPnJlYWRtdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPm11dGV4KSkgeworCQl1cCAoJmNjcC0+cmVhZG11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiB0cnkgdG8gcmVhZCB0aGUgaW5jb21pbmcgZGF0YSBhZ2FpbiAqLworCWdvdG8gZG9yZWFkbGlzdDsKK30KKworCisvKiBXcml0ZSBhIGRhdGEgYmxvY2sgaW50byB0aGUgcmlnaHQgc2VydmljZSBjaGFubmVsIG9mIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBzc2l6ZV90IGF1ZXJjaGFyX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXBhdWVyY2hhcl90IGNjcCA9IChwYXVlcmNoYXJfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBwYXVlcnN3YWxkX3QgY3AgPSBOVUxMOworICAgICAgICBwYXVlcmJ1Zl90IGJwOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYXJfd3JpdGUgJWQgYnl0ZXMiLCBsZW4pOworCisJLyogRXJyb3IgY2hlY2tpbmcgKi8KKwlpZiAoIWNjcCkKKwkJcmV0dXJuIC1FSU87CisgICAgICAgIGlmICgqcHBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKword3JpdGVfYWdhaW46CisJLyogZ2V0IHRoZSBtdXRleCAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPm11dGV4KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIENhbiB3ZSBleHBlY3QgdG8gd3JpdGUgc29tZXRoaW5nPyAqLworCWlmIChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB7CisJCXVwICgmY2NwLT5tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJfQorCisJY3AgPSBjY3AtPmF1ZXJkZXY7CisJaWYgKCFjcCkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY3AtPm11dGV4KSkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlpZiAoIWNwLT51c2JkZXYpIHsKKwkJdXAgKCZjcC0+bXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogUHJlcGFyZSBmb3Igc2xlZXAgKi8KKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSAoJndhaXQsIGN1cnJlbnQpOworCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX0lOVEVSUlVQVElCTEUpOworCWFkZF93YWl0X3F1ZXVlICgmY3AtPmJ1ZmZlcndhaXQsICZ3YWl0KTsKKworCS8qIFRyeSB0byBnZXQgYSBidWZmZXIgZnJvbSB0aGUgZGV2aWNlIHBvb2wuCisJICAgV2UgY2FuJ3QgdXNlIGEgYnVmZmVyIGZyb20gY2NwLT5idWZjdGwgYmVjYXVzZSB0aGUgd3JpdGUKKwkgICBjb21tYW5kIHdpbGwgbGFzdCBiZW9uZCBhIHJlbGVhc2UoKSAqLworCWJwID0gTlVMTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmNwLT5idWZjdGwubG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoIWxpc3RfZW1wdHkgKCZjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGNwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBicCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKworCS8qIGFyZSB0aGVyZSBhbnkgYnVmZmVycyBsZWZ0PyAqLworCWlmICghYnApIHsKKwkJdXAgKCZjcC0+bXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCisJCS8qIE5PTkJMT0NLOiBkb24ndCB3YWl0ICovCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSAoJmNwLT5idWZmZXJ3YWl0LCAmd2FpdCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCS8qIEJMT0NLSU5HOiB3YWl0ICovCisJCXNjaGVkdWxlKCk7CisJCXJlbW92ZV93YWl0X3F1ZXVlICgmY3AtPmJ1ZmZlcndhaXQsICZ3YWl0KTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkJLyogd2FrZWQgdXAgYnkgYSBzaWduYWwgKi8KKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCX0KKwkJZ290byB3cml0ZV9hZ2FpbjsKKwl9IGVsc2UgeworCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUgKCZjcC0+YnVmZmVyd2FpdCwgJndhaXQpOworCX0KKworCS8qIHByb3RlY3QgYWdhaW5zdCB0b28gYmlnIHdyaXRlIHJlcXVlc3RzICovCisJaWYgKGxlbiA+IGNwLT5tYXhDb250cm9sTGVuZ3RoKQorCQlsZW4gPSBjcC0+bWF4Q29udHJvbExlbmd0aDsKKworCS8qIEZpbGwgdGhlIGJ1ZmZlciAqLworCWlmIChjb3B5X2Zyb21fdXNlciAoIGJwLT5idWZwK0FVSF9TSVpFLCBidWYsIGxlbikpIHsKKwkJZGJnICgiY29weV9mcm9tX3VzZXIgZmFpbGVkIik7CisJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJdXAgKCZjcC0+bXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBzZXQgdGhlIGhlYWRlciBieXRlICovCisgICAgICAgICooYnAtPmJ1ZnApID0gY2NwLT5zY29udGV4dC5pZCB8IEFVSF9ESVJFQ1QgfCBBVUhfVU5TUExJVDsKKworCS8qIFNldCB0aGUgdHJhbnNmZXIgUGFyYW1ldGVycyAqLworCWJwLT5sZW4gPSBsZW4rQVVIX1NJWkU7CisgICAgICAgIGJwLT5kci0+YlJlcXVlc3RUeXBlID0gQVVUX1dSRVE7CisJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfV0JMT0NLOworCWJwLT5kci0+d1ZhbHVlICAgICAgID0gY3B1X3RvX2xlMTYgKDApOworCWJwLT5kci0+d0luZGV4ICAgICAgID0gY3B1X3RvX2xlMTYgKGNjcC0+c2NvbnRleHQuaWQgfCBBVUhfRElSRUNUIHwgQVVIX1VOU1BMSVQpOworCWJwLT5kci0+d0xlbmd0aCAgICAgID0gY3B1X3RvX2xlMTYgKGxlbitBVUhfU0laRSk7CisJdXNiX2ZpbGxfY29udHJvbF91cmIgKGJwLT51cmJwLCBjcC0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUgKGNwLT51c2JkZXYsIDApLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCBsZW4rQVVIX1NJWkUsCisJCSAgICBhdWVyY2hhcl9jdHJsd3JpdGVfY29tcGxldGUsIGJwKTsKKwkvKiB1cCB3ZSBnbyAqLworCXJldCA9IGF1ZXJjaGFpbl9zdWJtaXRfdXJiICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnApOworCXVwICgmY3AtPm11dGV4KTsKKwlpZiAocmV0KSB7CisJCWRiZyAoImF1ZXJjaGFyX3dyaXRlOiBub256ZXJvIHJlc3VsdCBvZiBhdWVyY2hhaW5fc3VibWl0X3VyYiAlZCIsIHJldCk7CisJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWVsc2UgeworCQlkYmcgKCJhdWVyY2hhcl93cml0ZTogV3JpdGUgT0siKTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIGxlbjsKKwl9Cit9CisKKworLyogQ2xvc2UgYSBjaGFyYWN0ZXIgZGV2aWNlICovCitzdGF0aWMgaW50IGF1ZXJjaGFyX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXBhdWVyY2hhcl90IGNjcCA9IChwYXVlcmNoYXJfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBhdWVyc3dhbGRfdCBjcDsKKwlkYmcoInJlbGVhc2UiKTsKKworCS8qIGdldCB0aGUgbXV0ZXhlcyAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPm11dGV4KSkgeworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwljcCA9IGNjcC0+YXVlcmRldjsKKwlpZiAoY3ApIHsKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNwLT5tdXRleCkpIHsKKwkJCXVwICgmY2NwLT5tdXRleCk7CisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisJCS8qIHJlbW92ZSBhbiBvcGVuIHNlcnZpY2UgKi8KKwkJYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2UgKGNwLCAmY2NwLT5zY29udGV4dCk7CisJCS8qIGRldGFjaCBmcm9tIGRldmljZSAqLworCQlpZiAoKC0tY3AtPm9wZW5fY291bnQgPD0gMCkgJiYgKGNwLT51c2JkZXYgPT0gTlVMTCkpIHsKKwkJCS8qIHVzYiBkZXZpY2Ugd2FpdHMgZm9yIHJlbW92YWwgKi8KKwkJCXVwICgmY3AtPm11dGV4KTsKKwkJCWF1ZXJzd2FsZF9kZWxldGUgKGNwKTsKKwkJfSBlbHNlIHsKKwkJCXVwICgmY3AtPm11dGV4KTsKKwkJfQorCQljcCA9IE5VTEw7CisJCWNjcC0+YXVlcmRldiA9IE5VTEw7CisJfQorCXVwICgmY2NwLT5tdXRleCk7CisJYXVlcmNoYXJfZGVsZXRlIChjY3ApOworCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZpbGUgb3BlcmF0aW9uIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdWVyc3dhbGRfZm9wcyA9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkucmVhZCA9CQlhdWVyY2hhcl9yZWFkLAorCS53cml0ZSA9ICAgICAgICBhdWVyY2hhcl93cml0ZSwKKwkuaW9jdGwgPQlhdWVyY2hhcl9pb2N0bCwKKwkub3BlbiA9CQlhdWVyY2hhcl9vcGVuLAorCS5yZWxlYXNlID0JYXVlcmNoYXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBhdWVyc3dhbGRfY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYi9hdWVyJWQiLAorCS5mb3BzID0JCSZhdWVyc3dhbGRfZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sCisJLm1pbm9yX2Jhc2UgPQlBVUVSX01JTk9SX0JBU0UsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogU3BlY2lhbCBVU0IgZHJpdmVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFByb2JlIGlmIHRoaXMgZHJpdmVyIHdhbnRzIHRvIHNlcnZlIGFuIFVTQiBkZXZpY2UKKworICAgVGhpcyBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgZGV2aWNlIGlzIGF0dGFjaGVkIHRvIHRoZSBidXMuCisgICBUaGVuIHRoZSBkZXZpY2UgZHJpdmVyIGhhcyB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgaXRzIGludGVybmFsIGRhdGEKKyAgIHN0cnVjdHVyZXMgZm9yIHRoZSBuZXcgZGV2aWNlLgorCisgICBUaGUgIGRldiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRldmljZSBjb250ZXh0LCB3aGljaCBjb250YWlucyBwb2ludGVycworICAgdG8gYWxsIFVTQiBkZXNjcmlwdG9ycy4gVGhlICBpbnRlcmZhY2UgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gSWYgYSBVU0IgZHJpdmVyIHdhbnRzIHRvIGJpbmQgaXRzZWxmIHRvIGEgcGFydGljdWxhciBkZXZpY2UgYW5kCisgICBpbnRlcmZhY2UgaXQgaGFzIHRvIHJldHVybiBhIHBvaW50ZXIuIFRoaXMgcG9pbnRlciBub3JtYWxseSByZWZlcmVuY2VzCisgICB0aGUgZGV2aWNlIGRyaXZlcidzIGNvbnRleHQgc3RydWN0dXJlLgorCisgICBQcm9iaW5nIG5vcm1hbGx5IGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBpZGVudGlmaWNhdGlvbnMKKyAgIG9yIHRoZSBjbGFzcyBhbmQgc3ViY2xhc3MgZGVmaW5pdGlvbnMuIElmIHRoZXkgbWF0Y2ggdGhlIGludGVyZmFjZSBudW1iZXIKKyAgIGlzIGNvbXBhcmVkIHdpdGggdGhlIG9uZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuIFdoZW4gcHJvYmluZyBpcyBkb25lCisgICBjbGFzcyBiYXNlZCBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gcGFyc2Ugc29tZSBtb3JlIFVTQiBkZXNjcmlwdG9ycyBiZWNhdXNlCisgICB0aGUgZGV2aWNlIHByb3BlcnRpZXMgY2FuIGRpZmZlciBpbiBhIHdpZGUgcmFuZ2UuCisqLworc3RhdGljIGludCBhdWVyc3dhbGRfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlwYXVlcnN3YWxkX3QgY3AgPSBOVUxMOworCXVuc2lnbmVkIGludCB1ID0gMDsKKwlfX2xlMTYgKnBidWY7CisJaW50IHJldDsKKworCWRiZyAoInByb2JlOiB2ZW5kb3IgaWQgMHgleCwgZGV2aWNlIGlkIDB4JXgiLAorCSAgICAgbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworICAgICAgICAvKiB3ZSB1c2Ugb25seSB0aGUgZmlyc3QgLWFuZCBvbmx5LSBpbnRlcmZhY2UgKi8KKyAgICAgICAgaWYgKGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWNwID0ga21hbGxvYyAoc2l6ZW9mKGF1ZXJzd2FsZF90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNwID09IE5VTEwpIHsKKwkJZXJyICgib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIHBmYWlsOworCX0KKworCS8qIEluaXRpYWxpemUgZGV2aWNlIGRlc2NyaXB0b3IgKi8KKwltZW1zZXQgKGNwLCAwLCBzaXplb2YoYXVlcnN3YWxkX3QpKTsKKwlpbml0X01VVEVYICgmY3AtPm11dGV4KTsKKwljcC0+dXNiZGV2ID0gdXNiZGV2OworCWF1ZXJjaGFpbl9pbml0ICgmY3AtPmNvbnRyb2xjaGFpbik7CisgICAgICAgIGF1ZXJidWZfaW5pdCAoJmNwLT5idWZjdGwpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZjcC0+YnVmZmVyd2FpdCk7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZhdWVyc3dhbGRfY2xhc3MpOworCWlmIChyZXQpIHsKKwkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlnb3RvIHBmYWlsOworCX0KKworCS8qIEdpdmUgdGhlIGRldmljZSBhIG5hbWUgKi8KKwlzcHJpbnRmIChjcC0+bmFtZSwgInVzYi9hdWVyJWQiLCBpbnRmLT5taW5vcik7CisKKwkvKiBTdG9yZSB0aGUgaW5kZXggKi8KKwljcC0+ZHRpbmRleCA9IGludGYtPm1pbm9yOworCisJLyogR2V0IHRoZSB1c2IgdmVyc2lvbiBvZiB0aGUgZGV2aWNlICovCisJY3AtPnZlcnNpb24gPSBsZTE2X3RvX2NwdShjcC0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJZGJnICgiVmVyc2lvbiBpcyAlWCIsIGNwLT52ZXJzaW9uKTsKKworCS8qIGFsbG93IHNvbWUgdGltZSB0byBzZXR0bGUgdGhlIGRldmljZSAqLworCW1zbGVlcCgzMzQpOworCisJLyogVHJ5IHRvIGdldCBhIHN1aXRhYmxlIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIGRldmljZSAqLworCS8qIERldmljZSBuYW1lOiovCisJcmV0ID0gdXNiX3N0cmluZyggY3AtPnVzYmRldiwgQVVTSV9ERVZJQ0UsIGNwLT5kZXZfZGVzYywgQVVTSV9ETEVOLTEpOworCWlmIChyZXQgPj0gMCkgeworCQl1ICs9IHJldDsKKwkJLyogQXBwZW5kIFNlcmlhbCBOdW1iZXIgKi8KKwkJbWVtY3B5KCZjcC0+ZGV2X2Rlc2NbdV0sICIsU2VyIyAiLCA2KTsKKwkJdSArPSA2OworCQlyZXQgPSB1c2Jfc3RyaW5nKCBjcC0+dXNiZGV2LCBBVVNJX1NFUklBTE5SLCAmY3AtPmRldl9kZXNjW3VdLCBBVVNJX0RMRU4tdS0xKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQl1ICs9IHJldDsKKwkJCS8qIEFwcGVuZCBzdWJzY3JpYmVyIG51bWJlciAqLworCQkJbWVtY3B5KCZjcC0+ZGV2X2Rlc2NbdV0sICIsICIsIDIpOworCQkJdSArPSAyOworCQkJcmV0ID0gdXNiX3N0cmluZyggY3AtPnVzYmRldiwgQVVTSV9NU04sICZjcC0+ZGV2X2Rlc2NbdV0sIEFVU0lfRExFTi11LTEpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJdSArPSByZXQ7CisJCQl9CisJCX0KKwl9CisJY3AtPmRldl9kZXNjW3VdID0gJ1wwJzsKKwlpbmZvKCJkZXZpY2UgaXMgYSAlcyIsIGNwLT5kZXZfZGVzYyk7CisKKyAgICAgICAgLyogZ2V0IHRoZSBtYXhpbXVtIGFsbG93ZWQgY29udHJvbCB0cmFuc2ZlciBsZW5ndGggKi8KKyAgICAgICAgcGJ1ZiA9IChfX2xlMTYgKikga21hbGxvYyAoMiwgR0ZQX0tFUk5FTCk7ICAgIC8qIHVzZSBhbiBhbGxvY2F0ZWQgYnVmZmVyIGJlY2F1c2Ugb2YgdXJiIHRhcmdldCAqLworICAgICAgICBpZiAoIXBidWYpIHsKKwkJZXJyKCAib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIHBmYWlsOworCX0KKyAgICAgICAgcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGNwLT51c2JkZXYsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGRldmljZSAqLworICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZSggY3AtPnVzYmRldiwgMCApLCAgIC8qIHBpcGUgdG8gY29udHJvbCBlbmRwb2ludCAqLworICAgICAgICAgICAgICAgIEFVVl9HRVRJTkZPLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICBBVVRfUlJFUSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSB2YWx1ZSAqLworICAgICAgICAgICAgICAgIEFVRElfTUJDVFJBTlMsICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlICovCisgICAgICAgICAgICAgICAgcGJ1ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgIDIwMDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0ICovCisgICAgICAgIGlmIChyZXQgPT0gMikgeworCSAgICAgICAgY3AtPm1heENvbnRyb2xMZW5ndGggPSBsZTE2X3RvX2NwdXAocGJ1Zik7CisgICAgICAgICAgICAgICAga2ZyZWUocGJ1Zik7CisgICAgICAgICAgICAgICAgZGJnKCJzZXR1cDogbWF4LiBhbGxvd2VkIGNvbnRyb2wgdHJhbnNmZXJzaXplIGlzICVkIGJ5dGVzIiwgY3AtPm1heENvbnRyb2xMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGtmcmVlKHBidWYpOworICAgICAgICAgICAgICAgIGVycigic2V0dXA6IGdldHRpbmcgbWF4LiBhbGxvd2VkIGNvbnRyb2wgdHJhbnNmZXIgbGVuZ3RoIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgcmV0KTsKKwkJZ290byBwZmFpbDsKKyAgICAgICAgfQorCisJLyogYWxsb2NhdGUgYSBjaGFpbiBmb3IgdGhlIGNvbnRyb2wgbWVzc2FnZXMgKi8KKyAgICAgICAgaWYgKGF1ZXJjaGFpbl9zZXR1cCAoJmNwLT5jb250cm9sY2hhaW4sIEFVQ0hfRUxFTUVOVFMpKSB7CisJCWVyciAoIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBwZmFpbDsKKwl9CisKKyAgICAgICAgLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgY29udHJvbCBtZXNzYWdlcyAqLworCWlmIChhdWVyYnVmX3NldHVwICgmY3AtPmJ1ZmN0bCwgQVVfUkJVRkZFUlMsIGNwLT5tYXhDb250cm9sTGVuZ3RoK0FVSF9TSVpFKSkgeworCQllcnIgKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gcGZhaWw7CisJfQorCisJLyogc3RhcnQgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworCWlmIChhdWVyc3dhbGRfaW50X29wZW4gKGNwKSkgeworCQllcnIgKCJpbnQgZW5kcG9pbnQgZmFpbGVkIik7CisJCWdvdG8gcGZhaWw7CisJfQorCisJLyogYWxsIE9LICovCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgY3ApOworCXJldHVybiAwOworCisJLyogRXJyb3IgZXhpdDogY2xlYW4gdXAgdGhlIG1lbW9yeSAqLworcGZhaWw6CWF1ZXJzd2FsZF9kZWxldGUgKGNwKTsKKwlyZXR1cm4gLUVJTzsKK30KKworCisvKiBEaXNjb25uZWN0IGRyaXZlciBmcm9tIGEgc2VydmVkIGRldmljZQorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIGRldmljZSB3aGljaCB3YXMgc2VydmVkIGJ5IHRoaXMgZHJpdmVyCisgICBpcyBkaXNjb25uZWN0ZWQuCisKKyAgIFRoZSBhcmd1bWVudCAgZGV2IHNwZWNpZmllcyB0aGUgZGV2aWNlIGNvbnRleHQgYW5kIHRoZSAgZHJpdmVyX2NvbnRleHQKKyAgIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgIGRyaXZlcl9jb250ZXh0IG9mIHRoZQorICAgcHJvYmUgZnVuY3Rpb24uIEFmdGVyIHJldHVybmluZyBmcm9tIHRoZSBkaXNjb25uZWN0IGZ1bmN0aW9uIHRoZSBVU0IKKyAgIGZyYW1ld29yayBjb21wbGV0ZWx5IGRlYWxsb2NhdGVzIGFsbCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoCisgICB0aGlzIGRldmljZS4gU28gZXNwZWNpYWxseSB0aGUgdXNiX2RldmljZSBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgdXNlZAorICAgYW55IGxvbmdlciBieSB0aGUgdXNiIGRyaXZlci4KKyovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcGF1ZXJzd2FsZF90IGNwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdW5zaWduZWQgaW50IHU7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlpZiAoIWNwKQorCQlyZXR1cm47CisKKwlkb3duICgmY3AtPm11dGV4KTsKKwlpbmZvICgiZGV2aWNlIC9kZXYvJXMgbm93IGRpc2Nvbm5lY3RpbmciLCBjcC0+bmFtZSk7CisKKwkvKiBnaXZlIGJhY2sgb3VyIFVTQiBtaW5vciBudW1iZXIgKi8KKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJmF1ZXJzd2FsZF9jbGFzcyk7CisKKwkvKiBTdG9wIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlhdWVyc3dhbGRfaW50X3JlbGVhc2UgKGNwKTsKKworCS8qIHJlbW92ZSB0aGUgY29udHJvbCBjaGFpbiBhbGxvY2F0ZWQgaW4gYXVlcnN3YWxkX3Byb2JlCisJICAgVGhpcyBoYXMgdGhlIGJlbmVmaXQgb2YKKwkgICBhKSBhbGwgcGVuZGluZyAoYSlzeW5jaHJvbm91cyB1cmJzIGFyZSB1bmxpbmtlZAorCSAgIGIpIGFsbCBidWZmZXJzIGRlYWxpbmcgd2l0aCB1cmJzIGFyZSByZWNsYWltZWQKKwkqLworCWF1ZXJjaGFpbl9mcmVlICgmY3AtPmNvbnRyb2xjaGFpbik7CisKKwlpZiAoY3AtPm9wZW5fY291bnQgPT0gMCkgeworCQkvKiBub2JvZHkgaXMgdXNpbmcgdGhpcyBkZXZpY2UuIFNvIHdlIGNhbiBjbGVhbiB1cCBub3cgKi8KKwkJdXAgKCZjcC0+bXV0ZXgpOy8qIHVwKCkgaXMgcG9zc2libGUgaGVyZSBiZWNhdXNlIG5vIG90aGVyIHRhc2sKKwkJCQkgICBjYW4gb3BlbiB0aGUgZGV2aWNlIChzZWUgYWJvdmUpLiBJIGRvbid0IHdhbnQKKwkJCQkgICB0byBrZnJlZSgpIGEgbG9ja2VkIG11dGV4LiAqLworCQlhdWVyc3dhbGRfZGVsZXRlIChjcCk7CisJfSBlbHNlIHsKKwkJLyogZGV2aWNlIGlzIHVzZWQuIFJlbW92ZSB0aGUgcG9pbnRlciB0byB0aGUKKwkJICAgdXNiIGRldmljZSAoaXQncyBub3QgdmFsaWQgYW55IG1vcmUpLiBUaGUgbGFzdAorCQkgICByZWxlYXNlKCkgd2lsbCBkbyB0aGUgY2xlYW4gdXAgKi8KKwkJY3AtPnVzYmRldiA9IE5VTEw7CisJCXVwICgmY3AtPm11dGV4KTsKKwkJLyogVGVybWluYXRlIHdhaXRpbmcgd3JpdGVycyAqLworCQl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCQkvKiBJbmZvcm0gYWxsIHdhaXRpbmcgcmVhZGVycyAqLworCQlmb3IgKCB1ID0gMDsgdSA8IEFVSF9UWVBFU0laRTsgdSsrKSB7CisJCQlwYXVlcnNjb25fdCBzY3AgPSBjcC0+c2VydmljZXNbdV07CisJCQlpZiAoc2NwKQorCQkJCXNjcC0+ZGlzY29ubmVjdCggc2NwKTsKKwkJfQorCX0KK30KKworLyogRGVzY3JpcHRvciBmb3IgdGhlIGRldmljZXMgd2hpY2ggYXJlIHNlcnZlZCBieSB0aGlzIGRyaXZlci4KKyAgIE5PVEU6IHRoaXMgc3RydWN0IGlzIHBhcnNlZCBieSB0aGUgdXNibWFuYWdlciBpbnN0YWxsIHNjcmlwdHMuCisgICAgICAgICBEb24ndCBjaGFuZ2Ugd2l0aG91dCBjYXV0aW9uIQorKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdWVyc3dhbGRfaWRzIFtdID0geworCXsgVVNCX0RFVklDRSAoSURfQVVFUlNXQUxELCAweDAwQzApIH0sICAgICAgICAgIC8qIENPTXBhY3QgMjEwNCBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UgKElEX0FVRVJTV0FMRCwgMHgwMERCKSB9LCAgICAgICAgICAvKiBDT01wYWN0IDQ0MTAvMjIwNiBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UgKElEX0FVRVJTV0FMRCwgMHgwMEYxKSB9LCAgICAgICAgICAvKiBDb21mb3J0IDIwMDAgU3lzdGVtIFRlbGVwaG9uZSAqLworCXsgVVNCX0RFVklDRSAoSURfQVVFUlNXQUxELCAweDAwRjIpIH0sICAgICAgICAgIC8qIENvbWZvcnQgMTIwMCBTeXN0ZW0gVGVsZXBob25lICovCisgICAgICAgIHsgfQkJCSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBTdGFuZGFyZCBtb2R1bGUgZGV2aWNlIHRhYmxlICovCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGF1ZXJzd2FsZF9pZHMpOworCisvKiBTdGFuZGFyZCB1c2IgZHJpdmVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF1ZXJzd2FsZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImF1ZXJzd2FsZCIsCisJLnByb2JlID0JYXVlcnN3YWxkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JYXVlcnN3YWxkX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JYXVlcnN3YWxkX2lkcywKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNb2R1bGUgbG9hZGluZy91bmxvYWRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogRHJpdmVyIGluaXRpYWxpc2F0aW9uLiBDYWxsZWQgYWZ0ZXIgbW9kdWxlIGxvYWRpbmcuCisgICBOT1RFOiB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBhdCBfaW5pdAorKi8KK3N0YXRpYyBpbnQgX19pbml0IGF1ZXJzd2FsZF9pbml0ICh2b2lkKQoreworCWludCByZXN1bHQ7CisJZGJnICgiaW5pdCIpOworCisJLyogcmVnaXN0ZXIgZHJpdmVyIGF0IHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyICgmYXVlcnN3YWxkX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyICgiZHJpdmVyIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIERyaXZlciBkZWluaXQuIENhbGxlZCBiZWZvcmUgbW9kdWxlIHJlbW92YWwuCisgICBOT1RFOiB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBhdCBfY2xlYW51cAorKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBhdWVyc3dhbGRfY2xlYW51cCAodm9pZCkKK3sKKwlkYmcgKCJjbGVhbnVwIik7CisJdXNiX2RlcmVnaXN0ZXIgKCZhdWVyc3dhbGRfZHJpdmVyKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBMaW51eCBkZXZpY2UgZHJpdmVyIG1vZHVsZSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKK21vZHVsZV9pbml0IChhdWVyc3dhbGRfaW5pdCk7Cittb2R1bGVfZXhpdCAoYXVlcnN3YWxkX2NsZWFudXApOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZlMmIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKQEAgLTAsMCArMSw0MzAgQEAKKy8qIC0qLSBsaW51eC1jIC0qLQorICogQ3lwcmVzcyBVU0IgVGhlcm1vbWV0ZXIgZHJpdmVyIAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXJpayBSaWd0b3JwIDxlcmtraUBsaW51eC5udT4gPGVyaWtAcmlndG9ycC5jb20+CisgKiAKKyAqIFRoaXMgZHJpdmVyIHdvcmtzIHdpdGggRWxla3RvciBtYWdhemluZSBVU0IgSW50ZXJmYWNlIGFzIHB1Ymxpc2hlZCBpbiAKKyAqIGlzc3VlICMyOTEuIEl0IHNob3VsZCBhbHNvIHdvcmsgd2l0aCB0aGUgb3JpZ2luYWwgc3RhcnRlciBraXQvZGVtbyBib2FyZAorICogZnJvbSBDeXByZXNzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRXJpayBSaWd0b3JwIgorI2RlZmluZSBEUklWRVJfREVTQyAiQ3lwcmVzcyBVU0IgVGhlcm1vbWV0ZXIgZHJpdmVyIgorCisjZGVmaW5lIFVTQl9TS0VMX1ZFTkRPUl9JRAkweDA0YjQKKyNkZWZpbmUgVVNCX1NLRUxfUFJPRFVDVF9JRAkweDAwMDIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgdXNiX2N5dGhlcm0geworCXN0cnVjdCB1c2JfZGV2aWNlICAgICp1ZGV2OwkgLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7IC8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJaW50IGJyaWdodG5lc3M7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgY3l0aGVybV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCAKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgY3l0aGVybV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeXRoZXJtX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiY3l0aGVybSIsCisJLnByb2JlID0JY3l0aGVybV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWN5dGhlcm1fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKy8qIFZlbmRvciByZXF1ZXN0cyAqLworLyogVGhleSBhbGwgb3BlcmF0ZSBvbiBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgUElORyAgICAgICAweDAwCisjZGVmaW5lIFJFQURfUk9NICAgMHgwMSAvKiBSZWFkcyBmb3JtIFJPTSwgdmFsdWUgPSBhZGRyZXNzICovCisjZGVmaW5lIFJFQURfUkFNICAgMHgwMiAvKiBSZWFkcyBmb3JtIFJBTSwgdmFsdWUgPSBhZGRyZXNzICovCisjZGVmaW5lIFdSSVRFX1JBTSAgMHgwMyAvKiBXcml0ZSB0byBSQU0sIHZhbHVlID0gYWRkcmVzcywgaW5kZXggPSBkYXRhICovCisjZGVmaW5lIFJFQURfUE9SVCAgMHgwNCAvKiBSZWFkcyBmcm9tIHBvcnQsIHZhbHVlID0gYWRkcmVzcyAqLworI2RlZmluZSBXUklURV9QT1JUIDB4MDUgLyogV3JpdGUgdG8gcG9ydCwgdmFsdWUgPSBhZGRyZXNzLCBpbmRleCA9IGRhdGEgKi8gCisKKworLyogU2VuZCBhIHZlbmRvciBjb21tYW5kIHRvIGRldmljZSAqLworc3RhdGljIGludCB2ZW5kb3JfY29tbWFuZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIAorCQkJICB1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBjaGFyIGluZGV4LAorCQkJICB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgICByZXF1ZXN0LCAKKwkJCSAgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX09USEVSLAorCQkJICAgICAgIHZhbHVlLCAKKwkJCSAgICAgICBpbmRleCwgYnVmLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworCisKKyNkZWZpbmUgQlJJR0hUTkVTUyAweDJjICAgICAvKiBSQU0gbG9jYXRpb24gZm9yIGJyaWdodG5lc3MgdmFsdWUgKi8KKyNkZWZpbmUgQlJJR0hUTkVTU19TRU0gMHgyYiAvKiBSQU0gbG9jYXRpb24gZm9yIGJyaWdodG5lc3Mgc2VtYXBob3JlICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsgICAgCisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsgICAgIAorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWkiLCBjeXRoZXJtLT5icmlnaHRuZXNzKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2JyaWdodG5lc3Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIAorCQkJICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHJldHZhbDsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCWN5dGhlcm0tPmJyaWdodG5lc3MgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKyAgIAorCWlmIChjeXRoZXJtLT5icmlnaHRuZXNzID4gMHhGRikKKwkJY3l0aGVybS0+YnJpZ2h0bmVzcyA9IDB4RkY7CisJZWxzZSBpZiAoY3l0aGVybS0+YnJpZ2h0bmVzcyA8IDApCisJCWN5dGhlcm0tPmJyaWdodG5lc3MgPSAwOworICAgCisJLyogU2V0IGJyaWdodG5lc3MgKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBXUklURV9SQU0sIEJSSUdIVE5FU1MsIAorCQkJCWN5dGhlcm0tPmJyaWdodG5lc3MsIGJ1ZmZlciwgOCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY3l0aGVybS0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisJLyogSW5mb3JtILVDIHRoYXQgd2UgaGF2ZSBjaGFuZ2VkIHRoZSBicmlnaHRuZXNzIHNldHRpbmcgKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBXUklURV9SQU0sIEJSSUdIVE5FU1NfU0VNLAorCQkJCTB4MDEsIGJ1ZmZlciwgOCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY3l0aGVybS0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisgICAKKwlrZnJlZShidWZmZXIpOworICAgCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYnJpZ2h0bmVzcywgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQLCAKKwkJICAgc2hvd19icmlnaHRuZXNzLCBzZXRfYnJpZ2h0bmVzcyk7CisKKworI2RlZmluZSBURU1QIDB4MzMgLyogUkFNIGxvY2F0aW9uIGZvciB0ZW1wZXJhdHVyZSAqLworI2RlZmluZSBTSUdOIDB4MzQgLyogUkFNIGxvY2F0aW9uIGZvciB0ZW1wZXJhdHVyZSBzaWduICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWludCB0ZW1wLCBzaWduOworICAgCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogcmVhZCB0ZW1wZXJhdHVyZSAqLworCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFJFQURfUkFNLCBURU1QLCAwLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCXRlbXAgPSBidWZmZXJbMV07CisgICAKKwkvKiByZWFkIHNpZ24gKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBSRUFEX1JBTSwgU0lHTiwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKwlzaWduID0gYnVmZmVyWzFdOworCisJa2ZyZWUoYnVmZmVyKTsKKyAgIAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjJWkuJWkiLCBzaWduID8gJy0nIDogJysnLCB0ZW1wID4+IDEsCisJCSAgICAgICA1Kih0ZW1wIC0gKCh0ZW1wID4+IDEpIDw8IDEpKSk7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wLCBTX0lSVUdPLCBzaG93X3RlbXAsIHNldF90ZW1wKTsKKworCisjZGVmaW5lIEJVVFRPTiAweDdhCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnV0dG9uKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY2hlY2sgYnV0dG9uICovCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9SQU0sIEJVVFRPTiwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKyAgIAorCXJldHZhbCA9IGJ1ZmZlclsxXTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIxIik7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwIik7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2V0X2J1dHRvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJ1dHRvbiwgU19JUlVHTywgc2hvd19idXR0b24sIHNldF9idXR0b24pOworCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcG9ydDAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9QT1JULCAwLCAwLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCisJcmV0dmFsID0gYnVmZmVyWzFdOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcmV0dmFsKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzZXRfcG9ydDAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmN5dGhlcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWw7CisJaW50IHRtcDsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworICAgCisJaWYgKHRtcCA+IDB4RkYpCisJCXRtcCA9IDB4RkY7CisJZWxzZSBpZiAodG1wIDwgMCkKKwkJdG1wID0gMDsKKyAgIAorCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFdSSVRFX1BPUlQsIDAsCisJCQkJdG1wLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvcnQwLCBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlAsIHNob3dfcG9ydDAsIHNldF9wb3J0MCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcG9ydDEoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9QT1JULCAxLCAwLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworICAgCisJcmV0dmFsID0gYnVmZmVyWzFdOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcmV0dmFsKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzZXRfcG9ydDEoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmN5dGhlcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWw7CisJaW50IHRtcDsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworICAgCisJaWYgKHRtcCA+IDB4RkYpCisJCXRtcCA9IDB4RkY7CisJZWxzZSBpZiAodG1wIDwgMCkKKwkJdG1wID0gMDsKKyAgIAorCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFdSSVRFX1BPUlQsIDEsCisJCQkJdG1wLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvcnQxLCBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlAsIHNob3dfcG9ydDEsIHNldF9wb3J0MSk7CisKKworCitzdGF0aWMgaW50IGN5dGhlcm1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqZGV2ID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgdXNiX2N5dGhlcm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VyciAoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbXNldCAoZGV2LCAweDAwLCBzaXplb2YgKCpkZXYpKTsKKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBkZXYpOworCisJZGV2LT5icmlnaHRuZXNzID0gMHhGRjsKKworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9icmlnaHRuZXNzKTsgICAKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfdGVtcCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2J1dHRvbik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQwKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDEpOworCisJZGV2X2luZm8gKCZpbnRlcmZhY2UtPmRldiwgCisJCSAgIkN5cHJlc3MgdGhlcm1vbWV0ZXIgZGV2aWNlIG5vdyBhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlrZnJlZShkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGN5dGhlcm1fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfY3l0aGVybSAqZGV2OworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl90ZW1wKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYnV0dG9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDApOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MSk7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCisJa2ZyZWUoZGV2KTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkN5cHJlc3MgdGhlcm1vbWV0ZXIgbm93IGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgdXNiX2N5dGhlcm1faW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmN5dGhlcm1fZHJpdmVyKTsKKwlpZiAocmVzdWx0KSAKKwl7CQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2N5dGhlcm1fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjeXRoZXJtX2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQgKHVzYl9jeXRoZXJtX2luaXQpOworbW9kdWxlX2V4aXQgKHVzYl9jeXRoZXJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE1NTIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCkBAIC0wLDAgKzEsMjU1IEBACisvKiAKKyAqIEVtYWdpYyBFTUkgMnw2IHVzYiBhdWRpbyBpbnRlcmZhY2UgZmlybXdhcmUgbG9hZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDAyCisgKiAJVGFwaW8gTGF4c3Ry9m0gKHRhcGlvLmxheHN0cm9tQGlwdGltZS5maSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKiAKKyAqIGVtaTI2LmMsdiAxLjEzIDIwMDIvMDMvMDggMTM6MTA6MjYgdGFwaW8gRXhwCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgTUFYX0lOVEVMX0hFWF9SRUNPUkRfTEVOR1RIIDE2Cit0eXBlZGVmIHN0cnVjdCBfSU5URUxfSEVYX1JFQ09SRAoreworCV9fdTMyCWxlbmd0aDsKKwlfX3UzMglhZGRyZXNzOworCV9fdTMyCXR5cGU7CisJX191OAlkYXRhW01BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSF07Cit9IElOVEVMX0hFWF9SRUNPUkQsICpQSU5URUxfSEVYX1JFQ09SRDsKKworLyogaW5jbHVkZSBmaXJtd2FyZSAodmFyaWFibGVzKSAqLworI2luY2x1ZGUgImVtaTI2X2Z3LmgiCisKKyNkZWZpbmUgRU1JMjZfVkVORE9SX0lEIAkJMHgwODZhICAvKiBFbWFnaWMgU29mdC11bmQgSGFyZHdhcmUgR21CSCAqLworI2RlZmluZSBFTUkyNl9QUk9EVUNUX0lECQkweDAxMDAJLyogRU1JIDJ8NiB3aXRob3V0IGZpcm13YXJlICovCisjZGVmaW5lIEVNSTI2Ql9QUk9EVUNUX0lECQkweDAxMDIJLyogRU1JIDJ8NiB3aXRob3V0IGZpcm13YXJlICovCisKKyNkZWZpbmUgQU5DSE9SX0xPQURfSU5URVJOQUwJMHhBMAkvKiBWZW5kb3Igc3BlY2lmaWMgcmVxdWVzdCBjb2RlIGZvciBBbmNob3IgVXBsb2FkL0Rvd25sb2FkIChUaGlzIG9uZSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZSkgKi8KKyNkZWZpbmUgQU5DSE9SX0xPQURfRVhURVJOQUwJMHhBMwkvKiBUaGlzIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb3JlLiBSZXF1aXJlcyBmaXJtd2FyZSAqLworI2RlZmluZSBBTkNIT1JfTE9BRF9GUEdBCTB4QTUJLyogVGhpcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZS4gUmVxdWlyZXMgZmlybXdhcmUuIEVtYWdpYyBleHRlbnNpb24gKi8KKyNkZWZpbmUgTUFYX0lOVEVSTkFMX0FERFJFU1MJMHgxQjNGCS8qIFRoaXMgaXMgdGhlIGhpZ2hlc3QgaW50ZXJuYWwgUkFNIGFkZHJlc3MgZm9yIHRoZSBBTjIxMzFRICovCisjZGVmaW5lIENQVUNTX1JFRwkJMHg3RjkyICAvKiBFWi1VU0IgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLiAgQml0IDAgY29udHJvbHMgODA1MSByZXNldCAqLyAKKyNkZWZpbmUgSU5URVJOQUxfUkFNKGFkZHJlc3MpICAgKGFkZHJlc3MgPD0gTUFYX0lOVEVSTkFMX0FERFJFU1MpCisKK3N0YXRpYyBpbnQgZW1pMjZfd3JpdGVtZW1vcnkoIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IGJSZXF1ZXN0KTsKK3N0YXRpYyBpbnQgZW1pMjZfc2V0X3Jlc2V0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KTsKK3N0YXRpYyBpbnQgZW1pMjZfbG9hZF9maXJtd2FyZSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGVtaTI2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgZW1pMjZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IF9faW5pdCBlbWkyNl9pbml0ICh2b2lkKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbWkyNl9leGl0ICh2b2lkKTsKKworCisvKiB0aGFua3MgdG8gZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgY29kZSAqLworc3RhdGljIGludCBlbWkyNl93cml0ZW1lbW9yeSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggcmVxdWVzdCkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9ICBrbWFsbG9jIChsZW5ndGgsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWZmZXIpIHsKKwkJZXJyKCJlbWkyNjoga21hbGxvYyglZCkgZmFpbGVkLiIsIGxlbmd0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkgKGJ1ZmZlciwgZGF0YSwgbGVuZ3RoKTsKKwkvKiBOb3RlOiB1c2JfY29udHJvbF9tc2cgcmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciBvciBsZW5ndGggb2YgdGhlCisJICogCQkgZGF0YSB0aGF0IHdhcyB3cml0dGVuISAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgcmVxdWVzdCwgMHg0MCwgYWRkcmVzcywgMCwgYnVmZmVyLCBsZW5ndGgsIDMwMCk7CisJa2ZyZWUgKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogdGhhbmtzIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGNvZGUgKi8KK3N0YXRpYyBpbnQgZW1pMjZfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKK3sKKwlpbnQgcmVzcG9uc2U7CisJaW5mbygiJXMgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzZXRfYml0KTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiJXMgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzZXRfYml0KTsgKi8KKwlyZXNwb25zZSA9IGVtaTI2X3dyaXRlbWVtb3J5IChkZXYsIENQVUNTX1JFRywgJnJlc2V0X2JpdCwgMSwgMHhhMCk7CisJaWYgKHJlc3BvbnNlIDwgMCkgeworCQllcnIoImVtaTI2OiBzZXRfcmVzZXQgKCVkKSBmYWlsZWQiLCByZXNldF9iaXQpOworCX0KKwlyZXR1cm4gcmVzcG9uc2U7Cit9CisKKyNkZWZpbmUgRldfTE9BRF9TSVpFCQkxMDIzCisKK3N0YXRpYyBpbnQgZW1pMjZfbG9hZF9maXJtd2FyZSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCWludCBpOworCWludCBwb3MgPSAwOwkvKiBQb3NpdGlvbiBpbiBoZXggcmVjb3JkICovCisJX191MzIgYWRkcjsJLyogQWRkcmVzcyB0byB3cml0ZSAqLworCV9fdTggKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MoRldfTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIC1FTk9NRU0pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVyciggIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIDEuIFdlIG5lZWQgdG8gcHV0IHRoZSBsb2FkZXIgZm9yIHRoZSBGUEdBIGludG8gdGhlIEVaLVVTQiAqLworCWZvciAoaT0wOyBnX0xvYWRlcltpXS50eXBlID09IDA7IGkrKykgeworCQllcnIgPSBlbWkyNl93cml0ZW1lbW9yeShkZXYsIGdfTG9hZGVyW2ldLmFkZHJlc3MsIGdfTG9hZGVyW2ldLmRhdGEsIGdfTG9hZGVyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIHdyYXBlcnI7CisJCX0KKwl9CisKKwkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDApOworCisJLyogMi4gV2UgdXBsb2FkIHRoZSBGUEdBIGZpcm13YXJlIGludG8gdGhlIEVNSQorCSAqIE5vdGU6IGNvbGxlY3QgdXAgdG8gMTAyMyAoeWVzISkgYnl0ZXMgYW5kIHNlbmQgdGhlbSB3aXRoCisJICogYSBzaW5nbGUgcmVxdWVzdC4gVGhpcyBpcyBfbXVjaF8gZmFzdGVyISAqLworCWRvIHsKKwkJaSA9IDA7CisJCWFkZHIgPSBnX2JpdHN0cmVhbVtwb3NdLmFkZHJlc3M7CisKKwkJLyogaW50ZWwgaGV4IHJlY29yZHMgYXJlIHRlcm1pbmF0ZWQgd2l0aCB0eXBlIDAgZWxlbWVudCAqLworCQl3aGlsZSAoKGdfYml0c3RyZWFtW3Bvc10udHlwZSA9PSAwKSAmJiAoaSArIGdfYml0c3RyZWFtW3Bvc10ubGVuZ3RoIDwgRldfTE9BRF9TSVpFKSkgeworCQkJbWVtY3B5KGJ1ZiArIGksIGdfYml0c3RyZWFtW3Bvc10uZGF0YSwgZ19iaXRzdHJlYW1bcG9zXS5sZW5ndGgpOworCQkJaSArPSBnX2JpdHN0cmVhbVtwb3NdLmxlbmd0aDsKKwkJCXBvcysrOworCQl9CisJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgYWRkciwgYnVmLCBpLCBBTkNIT1JfTE9BRF9GUEdBKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byB3cmFwZXJyOworCQl9CisJfSB3aGlsZSAoaSA+IDApOworCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogMy4gV2UgbmVlZCB0byBwdXQgdGhlIGxvYWRlciBmb3IgdGhlIGZpcm13YXJlIGludG8gdGhlIEVaLVVTQiAoYWdhaW4uLi4pICovCisJZm9yIChpPTA7IGdfTG9hZGVyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgZ19Mb2FkZXJbaV0uYWRkcmVzcywgZ19Mb2FkZXJbaV0uZGF0YSwgZ19Mb2FkZXJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gd3JhcGVycjsKKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiA0LiBXZSBwdXQgdGhlIHBhcnQgb2YgdGhlIGZpcm13YXJlIHRoYXQgbGllcyBpbiB0aGUgZXh0ZXJuYWwgUkFNIGludG8gdGhlIEVaLVVTQiAqLworCWZvciAoaT0wOyBnX0Zpcm13YXJlW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWlmICghSU5URVJOQUxfUkFNKGdfRmlybXdhcmVbaV0uYWRkcmVzcykpIHsKKwkJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgZ19GaXJtd2FyZVtpXS5hZGRyZXNzLCBnX0Zpcm13YXJlW2ldLmRhdGEsIGdfRmlybXdhcmVbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9FWFRFUk5BTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKwkKKwkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLworCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwlmb3IgKGk9MDsgZ19GaXJtd2FyZVtpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoSU5URVJOQUxfUkFNKGdfRmlybXdhcmVbaV0uYWRkcmVzcykpIHsKKwkJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgZ19GaXJtd2FyZVtpXS5hZGRyZXNzLCBnX0Zpcm13YXJlW2ldLmRhdGEsIGdfRmlybXdhcmVbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiByZXR1cm4gMSB0byBmYWlsIHRoZSBkcml2ZXIgaW5pYWxpemF0aW9uCisJICogYW5kIGdpdmUgcmVhbCBkcml2ZXIgY2hhbmdlIHRvIGxvYWQgKi8KKwllcnIgPSAxOworCit3cmFwZXJyOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShFTUkyNl9WRU5ET1JfSUQsIEVNSTI2X1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEVNSTI2X1ZFTkRPUl9JRCwgRU1JMjZCX1BST0RVQ1RfSUQpIH0sCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgaW50IGVtaTI2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwlpbmZvKCIlcyBzdGFydCIsIF9fRlVOQ1RJT05fXyk7IAorCisJZW1pMjZfbG9hZF9maXJtd2FyZShkZXYpOworCisJLyogZG8gbm90IHJldHVybiB0aGUgZHJpdmVyIGNvbnRleHQsIGxldCByZWFsIGF1ZGlvIGRyaXZlciBkbyB0aGF0ICovCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGVtaTI2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbWkyNl9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJlbWkyNiAtIGZpcm13YXJlIGxvYWRlciIsCisJLnByb2JlCQk9IGVtaTI2X3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZW1pMjZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVtaTI2X2luaXQgKHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZW1pMjZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtaTI2X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZlbWkyNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlbWkyNl9pbml0KTsKK21vZHVsZV9leGl0KGVtaTI2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJ0YXBpbyBsYXhzdHL2bSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFbWFnaWMgRU1JIDJ8NiBmaXJtd2FyZSBsb2FkZXIuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHZpOmFpOnN5bnRheD1jOnN3PTg6dHM9ODp0dz04MAorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2X2Z3LmggYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZmYxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjZfZncuaApAQCAtMCwwICsxLDU3NzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gdGhyZWUgZGlmZmVyZW50IGZpbGVzLCBwcm92aWRlZCBieSBFbWFnaWMuCisgKi8KKy8qIGdlbmVyYXRlZCBGcmkgTWFyIDggMTU6MTE6MzUgRUVUIDIwMDIgKi8KKworLyoKKyAqIFRoaXMgZmlybXdhcmUgaXMgZm9yIHRoZSBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UKKyAqCisgKiBUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBpcyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBFbWFnaWMKKyAqIGFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZAorICogb3IgcHVibGljIGFjY2VzcyB0byB0aGlzIGZpcm13YXJlIHdoaWNoIGlzIGEgdHJhZGUgc2VjcmV0IG9mIEVtYWdpYywKKyAqIGFuZCB3aGljaCBtYXkgbm90IGJlIHJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8KKyAqIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IEVtYWdpYydzIHdyaXR0ZW4gY29uc2VudC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisgKiBpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisgKiBpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKyAqCisgKiBUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUKKyAqIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZS4gRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YKKyAqIGFueSBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwKKyAqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuCisgKi8KK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfYml0c3RyZWFtW109eworeyAgMTYsIDB4ODAxMCwgMCwgezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhhYSwweDk5LDB4NTUsMHg2NiwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDcgfSB9LAoreyAgMTYsIDB4ODAyMCwgMCwgezB4MzAsMHgwMSwweDYwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwYiwweDMwLDB4MDEsMHgyMCwweDAxLDB4MDAsMHg4MCwweDNmLDB4MmQgfSB9LAoreyAgMTYsIDB4ODAzMCwgMCwgezB4MzAsMHgwMCwweGMwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDkgfSB9LAoreyAgMTYsIDB4ODA0MCwgMCwgezB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ODA1MCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MDAsMHg1MCwweDAwLDB4M2UsMHgwNCwweDA4LDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODA4MCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4ODQgfSB9LAoreyAgMTYsIDB4ODBiMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODBlMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODExMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODE0MCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE3MCwgMCwgezB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODQgfSB9LAoreyAgMTYsIDB4ODFhMCwgMCwgezB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY3LDB4MTAsMHgwMSwweDE0LDB4MDAsMHgyNSwweDAwLDB4MDUgfSB9LAoreyAgMTYsIDB4ODFiMCwgMCwgezB4NDAsMHgwMSwweDUwLDB4MDAsMHg5NCwweDAwLDB4MTUsMHgwMCwweDA3LDB4NDAsMHgwMSwweGQwLDB4MDAsMHg5NCwweDAwLDB4MjUgfSB9LAoreyAgMTYsIDB4ODFjMCwgMCwgezB4ODAsMHgwMSwweDYwLDB4MDIsMHhkOCwweDAwLDB4ZjYsMHgwMCwweDJmLDB4ODAsMHgwMiwweGUwLDB4MDQsMHhkOCwweDM3LDB4NDQgfSB9LAoreyAgMTYsIDB4ODFkMCwgMCwgezB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMiwweDAwLDB4Y2MsMHg5MCwweDM5LDB4MjAgfSB9LAoreyAgMTYsIDB4ODFlMCwgMCwgezB4MGQsMHg5OCwweDAzLDB4ZDIsMHgwMCwweGU3LDB4ODAsMHgzNywweDA0LDB4MGUsMHhmMSwweDgzLDB4N2UsMHgwMCwweGRmLDB4OTAgfSB9LAoreyAgMTYsIDB4ODFmMCwgMCwgezB4MzEsMHhlNCwweDhmLDB4NzksMHgwMywweDdjLDB4MjAsMHhkZiwweDIyLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgyMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg2MiwweDAwLDB4ODAsMHgyNCwweDIyLDB4MjAgfSB9LAoreyAgMTYsIDB4ODIxMCwgMCwgezB4MDgsMHg5OCwweDEyLDB4ZTIsMHgwMCwweDhiLDB4ODEsMHgyMCwweDk0LDB4MDgsMHg3NCwweDAyLDB4MmUsMHgwMCwweDhhLDB4MDEgfSB9LAoreyAgMTYsIDB4ODIyMCwgMCwgezB4MjIsMHhjOCwweDA4LDB4OTIsMHgwMiwweDNkLDB4ODAsMHg4YiwweDYwLDB4MjIsMHg4MCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDAwLDB4YTAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI0MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzAsMHgwMCwweGExLDB4MDAsMHgyNCwweDA5LDB4NGEsMHgzMiwweDAyLDB4NDgsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI1MCwgMCwgezB4NjIsMHhjMCwweDA5LDB4YTAsMHg0NiwweGNjLDB4MjQsMHg5MywweDQ5LDB4MmEsMHg4MCwweDQ4LDB4MzAsMHgyMiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODI2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOCwweDEyLDB4YTgsMHgwMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI3MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZTAsMHgwMCwweDg5LDB4ODAsMHgyMiwweDQ0LDB4MDgsMHhiMCwweDEyLDB4YTgsMHgwMCwweGE5LDB4NDAgfSB9LAoreyAgMTYsIDB4ODI4MCwgMCwgezB4MjIsMHhjMCwweDA4LDB4OTAsMHg4MiwweGFjLDB4MDAsMHg5YiwweDA0LDB4MmEsMHhjNCwweDA4LDB4YjAsMHgwMiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg4NCwweDAwLDB4ZTksMHg4MCwweGIyLDB4NjQgfSB9LAoreyAgMTYsIDB4ODJhMCwgMCwgezB4NGQsMHhhMCwweDAzLDB4ZWEsMHgyMCwweGU5LDB4YzAsMHgzNiwweDQwLDB4MGUsMHhiMCwweDAzLDB4NDQsMHgwMCwweGZiLDB4OTAgfSB9LAoreyAgMTYsIDB4ODJiMCwgMCwgezB4YjIsMHg4OCwweDBkLDB4YmMsMHgwMywweGVjLDB4MDgsMHg1YiwweDAwLDB4MzgsMHg2MCwweDJjLDB4YjAsMHg2MywweDQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDI2LDB4ZGQsMHg5MCwweDM3LDB4NDAgfSB9LAoreyAgMTYsIDB4ODJkMCwgMCwgezB4NGYsMHhlMCwweDEzLDB4ZjIsMHg4MCwweGZkLDB4MDAsMHgzZCwweGEwLDB4MGQsMHg3MCwweDAzLDB4NzUsMHgwMCwweDVlLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJlMCwgMCwgezB4M2YsMHhhNCwweDBkLDB4ZjksMHgwMywweDVjLDB4MTAsMHhlYiwweDAwLDB4MzcsMHgyMCwweDBmLDB4MzAsMHgwMywweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZTksMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODMwMCwgMCwgezB4MGMsMHhhMSwweDgzLDB4ZTgsMHgwMCwweGU5LDB4MDAsMHgzMiwweDQyLDB4MGUsMHhiMCwweDAzLDB4YWMsMHg0OCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODMxMCwgMCwgezB4M2EsMHg4MCwweDBlLDB4YTQsMHgwMywweGVjLDB4MDAsMHhlYiwweDAwLDB4YjIsMHgwMywweDBlLDB4YjAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyZSwweDgwLDB4ODksMHhkMSwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ODMzMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4YzAsMHgwMCwweDgxLDB4ODAsMHgyMiwweDU4LDB4MDgsMHhmNSwweDAyLDB4MmYsMHg0MCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM0MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHg0MywweDdjLDB4MDAsMHg4NywweDAwLDB4MjIsMHg0MCwweDA4LDB4ZjAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MiwweDAxLDB4OWEsMHg0NCwweDI4LDB4YTIgfSB9LAoreyAgMTYsIDB4ODM2MCwgMCwgezB4MDgsMHgxOCwweDAyLDB4YzAsMHg4MCwweGExLDB4ODAsMHhhMCwweDAwLDB4MDgsMHgzMCwweDAyLDB4OGUsMHgwMCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM3MCwgMCwgezB4MmMsMHg0MCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjAsMHg0NCwweDBhLDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODM4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHgzMiwweDAwLDB4OTYsMHg4MiwweDJiLDB4YTIgfSB9LAoreyAgMTYsIDB4ODM5MCwgMCwgezB4ODgsMHg1YSwweDAyLDB4ZjIsMHgwMCwweDA1LDB4ODAsMHgyOSwweGEwLDB4MDgsMHg3OCwweDQyLDB4YmUsMHgwMCwweDhlLDB4ODQgfSB9LAoreyAgMTYsIDB4ODNhMCwgMCwgezB4MmYsMHg2MSwweDBhLDB4ZDgsMHgwMiwweDRlLDB4MTAsMHhhNywweDgwLDB4MjAsMHgyOCwweDA4LDB4NzgsMHgwMiwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODNiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4ZjIsMHgyNCwweDM4LDB4ODAgfSB9LAoreyAgMTYsIDB4ODNjMCwgMCwgezB4MmMsMHgxYSwweDAzLDB4YzQsMHgwMCwweGUwLDB4NTgsMHhhMCwweDgwLDB4MmUsMHgzMCwweDAzLDB4ODgsMHg0MSwweGUzLDB4MDIgfSB9LAoreyAgMTYsIDB4ODNkMCwgMCwgezB4M2MsMHg0MCwweDA2LDB4MjAsMHgwMywweDhjLDB4MDAsMHhlMywweDAwLDB4MTAsMHgwMCwweDBlLDB4MzEsMHg0MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ODNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5OCwweDAwLDB4ZWUsMHgwMSwweDM3LDB4ODQgfSB9LAoreyAgMTYsIDB4ODNmMCwgMCwgezB4OWYsMHhkOSwweDAzLDB4ZjAsMHg0OCwweGZkLDB4MTAsMHgzNywweGMwLDB4MDcsMHhiMCwweDAzLDB4NWMsMHgwMCwweGY2LDB4MTAgfSB9LAoreyAgMTYsIDB4ODQwMCwgMCwgezB4MzMsMHhjMCwweDBkLDB4ZTEsMHgwMywweGVkLDB4MjAsMHhkZiwweDEwLDB4M2YsMHg0OCwweDBmLDB4ZjAsMHgyMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ODQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAyLDB4Y2IsMHg4MCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODQyMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTIsMHgwMiwweGM5LDB4MDAsMHgzYSwweDQwLDB4MGQsMHhiNiwweDAzLDB4NjQsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQzMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVkLDB4MDAsMHhmYiwweDAxLDB4M2UsMHhlMCwweDBjLDB4YjAsMHgwMiwweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ODQ1MCwgMCwgezB4MjgsMHg2MCwweDAyLDB4ZDAsMHgwMCwweDg1LDB4MDAsMHgyZCwweDgwLDB4NDgsMHhmMCwweDgyLDB4MWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ2MCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NTAsMHgwMiwweGRjLDB4MDAsMHhiNywweGEwLDB4MmYsMHg4MCwweDI4LDB4N2EsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMxLDB4MDAsMHhiZSwweDAwLDB4ODcsMHg4MCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODQ4MCwgMCwgezB4MjgsMHg2OCwweDAyLDB4ZDcsMHgwMCwweDg0LDB4ODAsMHgyZCwweGUwLDB4NDksMHg3OSwweDA2LDB4NTMsMHgwOSwweGI1LDB4ODAgfSB9LAoreyAgMTYsIDB4ODQ5MCwgMCwgezB4MmQsMHhlMiwweDBiLDB4NzgsMHgwMiwweGRlLDB4ODAsMHhiNywweDkwLDB4MmQsMHhiMCwweDA4LDB4NzksMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDEwLDB4ODMsMHgwMSwweDI4LDB4YzggfSB9LAoreyAgMTYsIDB4ODRiMCwgMCwgezB4MDgsMHgyMCwweDAyLDB4YzIsMHgwNiwweDgxLDB4MDAsMHgyYywweGM4LDB4ODgsMHgzMCwweDYyLDB4MGUsMHgyMSwweGIzLDB4YTAgfSB9LAoreyAgMTYsIDB4ODRjMCwgMCwgezB4MmMsMHhjMSwweDBiLDB4YjYsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhlMCwweDA4LDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODRkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4Y2EsMHg0MCwweGIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ODRlMCwgMCwgezB4MGMsMHgyYywweDAyLDB4ZjgsMHgwMCwweGM2LDB4MjAsMHgzZiwweDkwLDB4MGQsMHhhMCwweDAzLDB4N2IsMHgwMSwweGVlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODRmMCwgMCwgezB4M2YsMHhiNCwweDBmLDB4ZWMsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2YsMHhhMCwweDBjLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMywweDAwLDB4ZjgsMHgwOSwweDI2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODUxMCwgMCwgezB4MGYsMHhjMSwweDgzLDB4ZTAsMHgxMCwweGY4LDB4NDAsMHgzYywweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMSwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODUyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDQsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODU0MCwgMCwgezB4NGYsMHg5MCwweDYzLDB4MjYsMHg4NCwweDM5LDB4MDIsMHhiMiwweDQwLDB4MGMsMHg5MSwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmMSwweDAwLDB4M2EsMHg0NCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODU2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg0NSwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODU3MCwgMCwgezB4MDgsMHg5MiwweDBhLDB4MjQsMHgwMCwweGI5LDB4MzEsMHgyMiwweDYwLDB4ODgsMHg5NCwweDhhLDB4MjQsMHgyMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg2OCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweGEwLDB4OGQsMHg4NCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4ODVhMCwgMCwgezB4MGIsMHhkMSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDRhLDB4MDgsMHgxMCwweDAyLDB4MmMsMHg0MCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODViMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgxNCwweDAwLDB4ODUsMHg4MCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4ODVkMCwgMCwgezB4MDgsMHg1MCwweDAyLDB4MDQsMHgwYywweGI5LDB4MDAsMHhhMCwweDUwLDB4MDgsMHgxNCwweDIyLDB4MDQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVlMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDI4LDB4MjAsMHg0YSwweDBiLDB4MTMsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzAsMHg1MCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ODYwMCwgMCwgezB4MGYsMHhjMCwweDQzLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzMCwweDAwLDB4MmMsMHg4MCwweDIzLDB4MjAsMHgwMCwweGY4LDB4NTEgfSB9LAoreyAgMTYsIDB4ODYxMCwgMCwgezB4M2UsMHgxNCwweDhmLDB4ODUsMHgwYiwweDIxLDB4NDAsMHhmOCwweDcwLDB4M2EsMHgwOCwweDBmLDB4ODQsMHg4MywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ODYyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhjNCwweDAwLDB4ZjksMHgwNCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODYzMCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZDQsMHgwMCwweGZkLDB4MDAsMHgzZiwweDUwLDB4MGYsMHg5NCwweDAzLDB4ZjQsMHgwNCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY0MCwgMCwgezB4M2YsMHg0MSwweDhmLDB4ZDAsMHg0MywweGU1LDB4MGMsMHhmOSwweDAyLDB4M2YsMHg0YSwweDBmLDB4OTIsMHgwMywweGU2LDB4MDIgfSB9LAoreyAgMTYsIDB4ODY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhkNCwweDAxLDB4ZmQsMHgwMCwweDNkLDB4NDAgfSB9LAoreyAgMTYsIDB4ODY2MCwgMCwgezB4MGMsMHhkMCwweDEzLDB4ZjQsMHgwMCwweGQ1LDB4MDAsMHgzMywweDZhLDB4MWMsMHhkYywweDgzLDB4MzQsMHgwMCwweGQxLDB4MDQgfSB9LAoreyAgMTYsIDB4ODY3MCwgMCwgezB4M2UsMHg1MCwweDBjLDB4OTEsMHgwMywweGU2LDB4YzAsMHhkZCwweGIwLDB4MzMsMHg2YSwweDJjLDB4OWMsMHg4MywweGU2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODY4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDA5LDB4ZjgsMHg4MCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY5MCwgMCwgezB4ODgsMHg4MCwweDAwLDB4ZTgsMHgwMCwweGJhLDB4MDAsMHgyMiwweGIwLDB4MDgsMHg4ZSwweDAyLDB4MjgsMHgwMCwweDg4LDB4YTggfSB9LAoreyAgMTYsIDB4ODZhMCwgMCwgezB4MjYsMHgyOCwweDA4LDB4OGEsMHgyMiwweGUyLDB4MDAsMHg4OCwweGU0LDB4MjIsMHgzMCwweDA4LDB4OGMsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ODZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgyOCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODZjMCwgMCwgezB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMCwweDk5LDB4MDAsMHgyMCwweDQyLDB4NDgsMHgxMCwweDAyLDB4NjQsMHgwMSwweDkxLDB4ODAgfSB9LAoreyAgMTYsIDB4ODZkMCwgMCwgezB4MmMsMHg0OCwweDA4LDB4MTAsMHgwMiwweGM0LDB4YzAsMHg4MSwweDQwLDB4MjAsMHg0YSwweDA4LDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODZlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDk0LDB4YTksMHgwMiwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODZmMCwgMCwgezB4MGEsMHg5MCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDAsMHg4MiwweDYwLDB4MDgsMHg5MCwweDAyLDB4NjYsMHgwMCwweDg5LDB4MTAgfSB9LAoreyAgMTYsIDB4ODcwMCwgMCwgezB4MjQsMHg2MiwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAyLDB4MjIsMHg0MCwweDE4LDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ODcxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDAwLDB4YjksMHgwNCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODcyMCwgMCwgezB4MGMsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGQxLDB4YzAsMHgxMiwweDUwLDB4MjgsMHg5MCwweDAzLDB4NDQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODczMCwgMCwgezB4M2UsMHg0MCwweDI4LDB4OTIsMHgwMywweGU0LDB4MDIsMHhkOSwweDAwLDB4MzIsMHg0MiwweDhjLDB4OTAsMHgxMiwweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODc0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNiwweDIwLDB4ZjksMHgwMCwweDNlLDB4NDEgfSB9LAoreyAgMTYsIDB4ODc1MCwgMCwgezB4MmQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSwweDQwLDB4NGYsMHg5MCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODc2MCwgMCwgezB4MzYsMHg0MCwweDhmLDB4OTIsMHgwNywweGU0LDB4MDAsMHhmMSwweDAwLDB4YmUsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MjAgfSB9LAoreyAgMTYsIDB4ODc4MCwgMCwgezB4MGMsMHg4MCwweDAzLDB4ZTAsMHg0MCwweGY4LDB4MDAsMHgzNiwweDEyLDB4MmMsMHgwMCwweDAzLDB4ZTAsMHhjMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODc5MCwgMCwgezB4MzIsMHgxMCwweDBkLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmOCwweDAyLDB4M2UsMHgwOCwweDBmLDB4ODAsMHgwMCwweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODdhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzYSwweDkwLDB4OGUsMHgwMCwweDJkLDB4YTAgfSB9LAoreyAgMTYsIDB4ODdiMCwgMCwgezB4ODAsMHhlOCwweDAyLDB4ZmEsMHgwMCwweGJlLDB4NDAsMHgyMywweDgwLDB4MDgsMHhlOCwweDAyLDB4ZmEsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdjMCwgMCwgezB4MzYsMHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDAsMHhiYSwweDAwLDB4MmYsMHg4MCwweDBiLDB4YTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0NiwweDAyLDB4ODMsMHgwMCwweDJjLDB4ODAgfSB9LAoreyAgMTYsIDB4ODdlMCwgMCwgezB4MDgsMHgyMiwweDQyLDB4YzYsMHg4MCwweGIxLDB4NjAsMHgyZSwweGY0LDB4MDgsMHgzOCwweDIyLDB4Y2UsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdmMCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGFjLDB4MDAsMHhiMSwweDAwLDB4MmUsMHg0MCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDAyLDB4ODUsMHgwMSwweDJkLDB4YzIgfSB9LAoreyAgMTYsIDB4ODgxMCwgMCwgezB4YTgsMHg0NCwweDAyLDB4ZDQsMHgwMCwweGJkLDB4MDEsMHgyOSwweDQwLDB4MTgsMHg2OCwweGQyLDB4ZGMsMHgwMCwweDhmLDB4ODAgfSB9LAoreyAgMTYsIDB4ODgyMCwgMCwgezB4MjUsMHhjYywweDI4LDB4NzMsMHg0MiwweGRjLDB4ODAsMHhiNSwweDMwLDB4MmQsMHhjMCwweDFiLDB4NzIsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODgzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDA0LDB4YzYsMHg4MiwweDNkLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODg0MCwgMCwgezB4MGMsMHg0OCwweDEyLDB4ZDYsMHgxMCwweGY1LDB4ODAsMHgzYywweGEwLDB4MGMsMHg3MCwweDAzLDB4ZGUsMHgwMCwweGU3LDB4OTAgfSB9LAoreyAgMTYsIDB4ODg1MCwgMCwgezB4MjMsMHhlYSwweDA0LDB4N2EsMHgwMywweDllLDB4MDAsMHhmNSwweDgwLDB4M2QsMHhlMCwweDBmLDB4N2EsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ODg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MGQsMHhhYywweDAwLDB4OWMsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ODg3MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTQsMHgxMCwweGY5LDB4MDAsMHgzNiwweDAxLDB4MGYsMHhhMCwweDAzLDB4YzAsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg4MCwgMCwgezB4M2UsMHhkOCwweDRlLDB4YjAsMHg4MywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjQsMHg0MywweDgyLDB4MDYgfSB9LAoreyAgMTYsIDB4ODg5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkZSwweDAwLDB4Y2YsMHg4NCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODhhMCwgMCwgezB4MGUsMHhjOCwweDQzLDB4ZDYsMHgwMCwweGNkLDB4ODAsMHgzMywweGUwLDB4Y2QsMHhkOSwweDAzLDB4M2EsMHgwMCwweGZmLDB4ODggfSB9LAoreyAgMTYsIDB4ODhiMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4ZjksMHgxMywweGZlLDB4MjQsMHhmZCwweDgwLDB4M2YsMHgyMCwweDBjLDB4ZjYsMHg4MywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ODUsMHgwMCwweDIxLDB4YzQgfSB9LAoreyAgMTYsIDB4ODhkMCwgMCwgezB4MjgsMHg0MCwweDgyLDB4ZDAsMHgwMCwweGQ1LDB4MDAsMHgyMywweDgwLDB4NDgsMHhjOSwweDAyLDB4MWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODhlMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzEsMHgwMiwweGRlLDB4ODAsMHhiNSwweDEwLDB4MmQsMHhjMCwweDI4LDB4ZjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODhmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg5YywweDAwLDB4OTYsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ODkwMCwgMCwgezB4MGEsMHg0MSwweDAyLDB4ZjUsMHg0MCwweDhkLDB4MDAsMHgyMSwweDQwLDB4MDksMHg1MiwweDAyLDB4OTgsMHgyMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODkxMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHgwNiwweGRjLDB4ODAsMHhiNSwweDAwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4ODkyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjYywweDEwLDB4OTgsMHgwMCwweDAwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODkzMCwgMCwgezB4ODgsMHgwNCwweDgyLDB4YzAsMHgwMCwweDkxLDB4MDQsMHgyMCwweDAzLDB4MDksMHgwMCwweDAyLDB4OGEsMHgwMCwweGIzLDB4MGEgfSB9LAoreyAgMTYsIDB4ODk0MCwgMCwgezB4MjAsMHhjNCwweDhiLDB4MzQsMHgwMiwweGNjLDB4MDAsMHhiOSwweDAwLDB4MmMsMHhjMCwweDAwLDB4MzAsMHgwMiwweDE4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODk1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MTUsMHhhYywweDAwLDB4ZGIsMHgwMCwweGIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODk2MCwgMCwgezB4MGUsMHg5YywweDAyLDB4YzUsMHgwMCwweGMxLDB4MTAsMHhiMiwweGMwLDB4MGQsMHhiMCwweDBiLDB4YTcsMHgwOCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk3MCwgMCwgezB4YjMsMHhjMCwweDBmLDB4ZmEsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4M2UsMHhkNCwweDBjLDB4ZjAsMHgwYiwweDJlLDB4MDQgfSB9LAoreyAgMTYsIDB4ODk4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDA0LDB4ZWQsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODk5MCwgMCwgezB4MGYsMHg4NCwweDAzLDB4ZTUsMHg0MCwweGY5LDB4NDAsMHgzZSwweDYwLDB4Y2UsMHhiNCwweDQzLDB4NjQsMHgwMCwweGZiLDB4ODAgfSB9LAoreyAgMTYsIDB4ODlhMCwgMCwgezB4M2UsMHhjMiwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhmOSwweDAyLDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGUxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODliMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MTAsMHhmZiwweDAwLDB4Y2UsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4ODljMCwgMCwgezB4MGUsMHhjMCwweDA3LDB4NzQsMHgwNCwweGVjLDB4MDAsMHgxMSwweDgwLDB4MGMsMHhjYSwweDAzLDB4ZmUsMHg2MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHg4MywweDNjLDB4MDAsMHhkZCwweDAwLDB4YjMsMHg1MCwweDJjLDB4ZjAsMHgwMywweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODllMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg0YywweDA0LDB4OGIsMHgwYiwweDIyLDB4NzAgfSB9LAoreyAgMTYsIDB4ODlmMCwgMCwgezB4MDgsMHgwOCwweDAzLDB4NjcsMHgyMCwweDhhLDB4ODgsMHhhMiwweDAwLDB4MjgsMHg4NCwweDAyLDB4ZTcsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEwMCwgMCwgezB4M2UsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MjIsMHg2MSwweDA4LDB4YjAsMHgwMywweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4OGExMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgyMCwweDIyLDB4ZTIgfSB9LAoreyAgMTYsIDB4OGEyMCwgMCwgezB4MGEsMHg4YywweDAyLDB4MjYsMHgwMCwweGE5LDB4ODAsMHgyYSwweGMwLDB4MDgsMHhiNCwweDQyLDB4ZWQsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEzMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MjAsMHg4MCwweDA4LDB4MzAsMHgwMiwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwZSwweDAxLDB4ODEsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4OGE1MCwgMCwgezB4MDgsMHg4MSwweDAyLDB4NDQsMHgwMCwweDgxLDB4MDAsMHgyOCwweDgxLDB4MDgsMHgzMiwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE2MCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4ODAsMHhiMSwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgxMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGQsMHg2YywweDAwLDB4YzIsMHgwMSwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4OGE4MCwgMCwgezB4MmUsMHg4MCwweDE2LDB4MmMsMHgwOCwweGU5LDB4MDAsMHgzYSwweDQwLDB4MGMsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGY3LDB4MDAgfSB9LAoreyAgMTYsIDB4OGE5MCwgMCwgezB4MmYsMHhjMCwweDBmLDB4ZjAsMHgwYiwweDJjLDB4MDAsMHhkOSwweDAwLDB4MzAsMHg0MCwweDBjLDB4ZjAsMHgwMywweDYwLDB4MDMgfSB9LAoreyAgMTYsIDB4OGFhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MGQsMHhmOCwweDA4LDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4OGFiMCwgMCwgezB4MGYsMHhjMiwweDE3LDB4ZmMsMHgwMCwweGY3LDB4MDAsMHgzNywweDAwLDB4MGYsMHg4NCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVkLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4OGFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4Y2YsMHgzMCwweDE3LDB4NDggfSB9LAoreyAgMTYsIDB4OGFlMCwgMCwgezB4MGMsMHg1OSwweDAzLDB4YjksMHgwMCwweGRmLDB4MjgsMHgzNSwweDI0LDB4MGQsMHg4MiwweGEzLDB4N2MsMHg4MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFmMCwgMCwgezB4M2YsMHhjOCwweDBmLDB4ZjIsMHgwMywweGU0LDB4YTAsMHhlZiwweDgwLDB4M2YsMHhlMSwweDhjLDB4ZDgsMHg0MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlZCwweDQ4LDB4ODksMHgzNCwweGEzLDB4NzAgfSB9LAoreyAgMTYsIDB4OGIxMCwgMCwgezB4MjgsMHhiMCwweDIzLDB4NjAsMHgwMCwweDhiLDB4YzAsMHgyMiwweDQwLDB4MDgsMHhiNCwweDgyLDB4MmYsMHg0MCwweGJmLDB4ZDEgfSB9LAoreyAgMTYsIDB4OGIyMCwgMCwgezB4NmYsMHhmNCwweDhlLDB4YmQsMHgwMiwweGU3LDB4MDAsMHhiYiwweDgwLDB4M2EsMHhlMCwweDA4LDB4OTgsMHgwYSwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweGIwLDB4OTEsMHgwMCwweGE4LDB4NTAgfSB9LAoreyAgMTYsIDB4OGI0MCwgMCwgezB4MDgsMHhiMiwweDAyLDB4YzgsMHg4NCwweDkzLDB4MDAsMHgyNCwweDQ5LDB4MGIsMHgwMiwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDQgfSB9LAoreyAgMTYsIDB4OGI1MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHg0MiwweDg0LDB4MDAsMHhiMywweDAwLDB4MmUsMHgwMCwweDBhLDB4YjAsMHgxMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGI2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhYywweDAyLDB4OTksMHgxOCwweDJhLDB4NDQgfSB9LAoreyAgMTYsIDB4OGI3MCwgMCwgezB4MDgsMHhiOCwweDgyLDB4YTIsMHgwMSwweGJiLDB4MDAsMHgyOCwweDYwLDB4MGEsMHhhMCwweDEyLDB4NmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI4MCwgMCwgezB4NmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU0LDB4MDAsMHhiYiwweDAwLDB4MmEsMHgwMCwweDJhLDB4YjAsMHgwMiwweDM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlNCwweDA4LDB4ZGEsMHhjMCwweDNhLDB4NjAgfSB9LAoreyAgMTYsIDB4OGJhMCwgMCwgezB4MGMsMHgxOCwweDBhLDB4ZWIsMHgwNCwweGRiLDB4MDAsMHgzNiwweGUwLDB4MDcsMHg4NSwweDgzLDB4NmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJiMCwgMCwgezB4MmUsMHhjMCwweDBmLDB4YjAsMHg0MywweGU0LDB4MDAsMHhlYiwweDAwLDB4M2UsMHg4OCwweDBlLDB4MTgsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4OGJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4NDEsMHg5YywweDEwLDB4ZTksMHgwMCwweDM3LDB4NjAgfSB9LAoreyAgMTYsIDB4OGJkMCwgMCwgezB4ODcsMHhmMCwweDE3LDB4NzAsMHgwMCwweGNmLDB4MDEsMHgzNywweGMwLDB4NGMsMHg5OCwweDAzLDB4YmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJlMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjAsMHgwMywweGU0LDB4MDAsMHhmZiwweDQwLDB4M2YsMHhlNCwweDBkLDB4ZDksMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNCwweDAwLDB4ZjQsMHgwMCwweDMwLDB4NDAgfSB9LAoreyAgMTYsIDB4OGMwMCwgMCwgezB4MGYsMHhiNCwweDAzLDB4OTksMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGQsMHgwNCwweDIzLDB4MmMsMHgwOCwweGZiLDB4ODggfSB9LAoreyAgMTYsIDB4OGMxMCwgMCwgezB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGU2LDB4MDAsMHhkYiwweDEwLDB4M2UsMHgwMiwweDBmLDB4YjAsMHg4MywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OGMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YjksMHg1MCwweGEyLDB4NDggfSB9LAoreyAgMTYsIDB4OGMzMCwgMCwgezB4OGIsMHhiMCwweDAzLDB4MjAsMHgwMCwweGQ3LDB4ODAsMHgyZSwweGQ4LDB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGJmLDB4ODAgfSB9LAoreyAgMTYsIDB4OGM0MCwgMCwgezB4MjMsMHhlOCwweDhiLDB4ZjAsMHgwMiwweGY0LDB4NDAsMHg4YiwweDQwLDB4MGMsMHg0MiwweDAzLDB4YjYsMHgwMiwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjIsMHg0NCwweDAwLDB4YzggfSB9LAoreyAgMTYsIDB4OGM2MCwgMCwgezB4MGIsMHgzMCwweDEyLDB4OGMsMHgwMCwweGEzLDB4ODAsMHgyNCwweGM4LDB4MGIsMHgwMCwweDBhLDB4Y2MsMHgwMCwweGIzLDB4NDQgfSB9LAoreyAgMTYsIDB4OGM3MCwgMCwgezB4MDQsMHhjMCwweDFiLDB4MzYsMHgwMiwweGM1LDB4MDEsMHg4MywweDBjLDB4MmMsMHhhMCwweDBiLDB4MzAsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGM4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDA4LDB4YjcsMHg5MCwweDIxLDB4NjQgfSB9LAoreyAgMTYsIDB4OGM5MCwgMCwgezB4MGIsMHhmOCwweDAyLDB4NGEsMHgwNCwweDk3LDB4ODEsMHgyZiwweGU0LDB4MGEsMHg3OCwweDAyLDB4OWUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OGNhMCwgMCwgezB4MjEsMHhlMCwweDhiLDB4NzgsMHg4MiwweGQ2LDB4ODYsMHg4NywweDg0LDB4MmQsMHhhMCwweDBiLDB4NzgsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwNCwweDAwLDB4ZjIsMHgwMCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4OGNjMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4OGMsMHgwMCwweGUzLDB4MGEsMHgzYywweGMwLDB4MGYsMHgxOCwweDAzLDB4OGMsMHgwMCwweGYzLDB4MDIgfSB9LAoreyAgMTYsIDB4OGNkMCwgMCwgezB4MzAsMHhjMCwweDFmLDB4MzAsMHgwMSwweGM2LDB4ODAsMHhjMywweDAwLDB4M2MsMHhjMCwweDBmLDB4MTIsMHgwMywweGRhLDB4MDIgfSB9LAoreyAgMTYsIDB4OGNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MGQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDEgfSB9LAoreyAgMTYsIDB4OGNmMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4YjgsMHgwOCwweGZmLDB4MDgsMHgzZiwweGMwLDB4MGQsMHhmMCwweDAzLDB4M2MsMHgyMCwweGZmLDB4MDggfSB9LAoreyAgMTYsIDB4OGQwMCwgMCwgezB4M2IsMHhkMiwweDBmLDB4ZjAsMHgwMywweGY0LDB4NDAsMHhlZiwweDAwLDB4M2YsMHhjNCwweDBmLDB4ZDAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OGQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZmUsMHgwMCwweDMyLDB4YzIgfSB9LAoreyAgMTYsIDB4OGQyMCwgMCwgezB4MGMsMHgzMCwweDBiLDB4MjYsMHgwMCwweGZiLDB4ODAsMHgzNiwweGMwLDB4MGQsMHhhMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4ZTAgfSB9LAoreyAgMTYsIDB4OGQzMCwgMCwgezB4MzIsMHhkMCwweDBmLDB4YjgsMHg0MywweDY0LDB4NDQsMHhkYiwweDA0LDB4M2UsMHg4MCwweDBmLDB4YjAsMHgwMywweGUyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweGExLDB4YzAgfSB9LAoreyAgMTYsIDB4OGQ1MCwgMCwgezB4ODgsMHg3MCwweDAzLDB4MTAsMHgwMCwweGI3LDB4MjAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg4MCwweGIzLDB4MzAgfSB9LAoreyAgMTYsIDB4OGQ2MCwgMCwgezB4MzEsMHhjOCwweDBiLDB4NzQsMHgwMiwweDE0LDB4MDAsMHg4NywweDQwLDB4MmQsMHhjMCwweDRiLDB4NzAsMHgwMiwweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5NiwweDIwLDB4YjYsMHg4MCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4OGQ4MCwgMCwgezB4MjgsMHhmOCwweDAyLDB4OTQsMHgxMCwweGI3LDB4ODEsMHgyNywweGUyLDB4MDksMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4YTAgfSB9LAoreyAgMTYsIDB4OGQ5MCwgMCwgezB4YTksMHhlOCwweDBiLDB4MzgsMHgwMiwweDc2LDB4MDAsMHg4NywweDgwLDB4MmQsMHhhMCwweDBiLDB4NTgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZSwweDEwLDB4YjMsMHgwMCwweDIwLDB4YzQgfSB9LAoreyAgMTYsIDB4OGRiMCwgMCwgezB4MDgsMHgyMCwweDAyLDB4ODAsMHgxMCwweGIzLDB4MDAsMHgyMiwweGM4LDB4MDgsMHhiMCwweDAyLDB4Y2MsMHgxMSwweGIzLDB4MDIgfSB9LAoreyAgMTYsIDB4OGRjMCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDA0LDB4MDAsMHg5MywweDgwLDB4MmMsMHhkMiwweDBiLDB4MTAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGRkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHg0MCwweDMyLDB4YTAgfSB9LAoreyAgMTYsIDB4OGRlMCwgMCwgezB4MGMsMHhlNCwweDAzLDB4OTgsMHg4MCwweGZhLDB4MDAsMHgzNywweGEwLDB4MGQsMHhlMCwweDgzLDB4ZTgsMHgwMCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRmMCwgMCwgezB4M2EsMHg4MCwweDBiLDB4YTAsMHgwMywweDY4LDB4MDAsMHhkOCwweGEwLDB4M2YsMHg5MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OGUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDA4LDB4ZjgsMHgwOCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUxMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGUyMCwgMCwgezB4MzAsMHgxMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDIsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGU0MCwgMCwgezB4MGUsMHg5MCwweDgzLDB4YTQsMHgwMCwweGM5LDB4ODAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGU1MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOCwweDAwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGU2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MCwweGEwLDB4NjIgfSB9LAoreyAgMTYsIDB4OGU3MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MjQsMHgxMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGU4MCwgMCwgezB4MmUsMHg1MiwweDA4LDB4OTQsMHgwMiwweGM0LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg0MCwweDBiLDB4MTAsMHgwMywweDYwLDB4MTAgfSB9LAoreyAgMTYsIDB4OGU5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgxOCwweDIyLDB4NDQgfSB9LAoreyAgMTYsIDB4OGVhMCwgMCwgezB4MGEsMHg5MCwweDAyLDB4YWMsMHgwMCwweDg5LDB4MTAsMHgyZSwweGMwLDB4MGEsMHg5MCwweDAyLDB4YTQsMHgwMCwweGI5LDB4ODAgfSB9LAoreyAgMTYsIDB4OGViMCwgMCwgezB4MmUsMHg2MCwweDA4LDB4OTgsMHgwMiwweGU2LDB4MDIsMHg4OSwweDA4LDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgyMCwweGEwLDB4NDggfSB9LAoreyAgMTYsIDB4OGVkMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOCwweDgxLDB4MjMsMHgyYywweDUwLDB4MDgsMHgxMCwweDAyLDB4MDQsMHg4MCwweGIxLDB4MjAgfSB9LAoreyAgMTYsIDB4OGVlMCwgMCwgezB4MmMsMHg0OCwweDI4LDB4MTIsMHgwMiwweGU0LDB4ODAsMHg4MSwweDIwLDB4MmMsMHg0MCwweDBiLDB4OTgsMHgwMiwweDQyLDB4MDUgfSB9LAoreyAgMTYsIDB4OGVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYwMCwgMCwgezB4MGUsMHg4NSwweDAzLDB4YTEsMHhlMCwweGNhLDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4NSwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGYxMCwgMCwgezB4MmUsMHgwMCwweDljLDB4YTAsMHgwMywweGUwLDB4MDAsMHhjOCwweDI4LDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDJlLDB4MDEgfSB9LAoreyAgMTYsIDB4OGYyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjUsMHgxMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4OGYzMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGYxLDB4MTAsMHgzZCwweDQwLDB4OGYsMHhkNCwweDAzLDB4ZTQsMHg1MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4OGY0MCwgMCwgezB4M2UsMHg0NSwweDBmLDB4OTEsMHgwMywweGQ0LDB4NDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDhmLDB4ZDAsMHgyMywweGU2LDB4MDQgfSB9LAoreyAgMTYsIDB4OGY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDIwLDB4Y2QsMHhhOCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4OGY2MCwgMCwgezB4OGQsMHhkMCwweDAzLDB4MjYsMHg4MCwweGNkLDB4MDAsMHgzZCwweDUwLDB4MGMsMHg5YSwweDAzLDB4NjQsMHgwMCwweGY5LDB4YTAgfSB9LAoreyAgMTYsIDB4OGY3MCwgMCwgezB4N2EsMHg2YSwweDBmLDB4OWEsMHg2MywweGU2LDB4ODAsMHhjOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDAwLDB4ODgsMHhlMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY5MCwgMCwgezB4MDgsMHg4MCwweDBhLDB4MjEsMHg0MiwweGM4LDB4MDAsMHgyZSwweDI5LDB4MGMsMHhhNCwweDQyLDB4MjAsMHgwMCwweGI4LDB4NDAgfSB9LAoreyAgMTYsIDB4OGZhMCwgMCwgezB4MmUsMHgwMCwweDBiLDB4ODEsMHgwMiwweGUxLDB4MDAsMHg4OCwweDAyLDB4M2EsMHgwMSwweDBiLDB4YzAsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4OGZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAyLDB4ODEsMHgwOCwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4OGZjMCwgMCwgezB4MDksMHgxMCwweDAyLDB4MDQsMHgwMCwweDkxLDB4MDAsMHgyYywweDQwLDB4NGIsMHgxNCwweDAyLDB4NDQsMHgwMCwweGI1LDB4MTAgfSB9LAoreyAgMTYsIDB4OGZkMCwgMCwgezB4MjksMHg0MCwweDBiLDB4NTAsMHgwMiwweGY1LDB4MDAsMHhiNSwweDAwLDB4MmQsMHg0MCwweDBiLDB4ZDAsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGZlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNiwweDAxLDB4ODksMHgwMCwweDI2LDB4NDAgfSB9LAoreyAgMTYsIDB4OGZmMCwgMCwgezB4MDgsMHg5NCwweDAyLDB4MjQsMHgwMSwweDg5LDB4MDAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDAyLDB4NmMsMHgwMCwweGJmLDB4MDIgfSB9LAoreyAgMTYsIDB4OTAwMCwgMCwgezB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGY0LDB4MDIsMHhiZCwweDgwLDB4MmIsMHg0MCwweDhiLDB4ZDgsMHgzYSwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4OTAxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwNSwweDM2LDB4NDEgfSB9LAoreyAgMTYsIDB4OTAyMCwgMCwgezB4MGQsMHgxYywweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQyLDB4MmYsMHg5NCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTAzMCwgMCwgezB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg3MCwweDBmLDB4MTAsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTA0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NCwweDA4LDB4ZjksMHgyNCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OTA1MCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQxLDB4MGQsMHgxMCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTA2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA4LDB4YzgsMHg4MCwweDMyLDB4MDIgfSB9LAoreyAgMTYsIDB4OTA4MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MDAsMHgwMCwweGM4LDB4MDgsMHgzYSwweDEwLDB4Y2UsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA5MCwgMCwgezB4M2YsMHgwMCwweDhmLDB4YzAsMHgwMywweGYwLDB4ODAsMHhmYywweDAwLDB4M2YsMHgxOCwweDBmLDB4YzAsMHg0MywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTBhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHgwMCwweGExLDB4ODAgfSB9LAoreyAgMTYsIDB4OTBiMCwgMCwgezB4MGIsMHhlMCwweDAyLDB4MjgsMHgwMCwweGRlLDB4YzIsMHgyMywweDkwLDB4MDAsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBjMCwgMCwgezB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhmYSwweDAwLDB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTksMHg4MSwweDYwLDB4YzAgfSB9LAoreyAgMTYsIDB4OTBlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweDkwLDB4MTAsMHgyYSwweGZjLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBmMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTEwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDgyLDB4OTUsMHg0MCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4OTExMCwgMCwgezB4MGIsMHg1MCwweDAyLDB4MWMsMHg4MCwweDkwLDB4ODAsMHgyMywweDAxLDB4MDksMHg3MiwweDEyLDB4ZGMsMHgwMCwweGI2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTEyMCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NDAsMHgwMiwweGQwLDB4MDAsMHhiNCwweDA5LDB4MmQsMHgwMCwweDRiLDB4NDAsMHg4MiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTEzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDgwLDB4ZGQsMHg4MCwweGIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTE0MCwgMCwgezB4MGYsMHhkYSwweDAzLDB4MGYsMHg4MCwweGQ0LDB4ODAsMHgzOSwweGUwLDB4MGIsMHg3YSwweDAzLDB4ZGUsMHgwMCwweGY1LDB4ODAgfSB9LAoreyAgMTYsIDB4OTE1MCwgMCwgezB4M2QsMHgyMCwweDBmLDB4NDgsMHgwMywweGQ2LDB4MTAsMHhmNiwweDgxLDB4M2QsMHhlMCwweDhmLDB4NjgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OTE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZWQsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OTE3MCwgMCwgezB4MGYsMHg5MSwweDBiLDB4ZWMsMHgxMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTE4MCwgMCwgezB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGU4LDB4MDAsMHhlOSwweDAxLDB4M2UsMHgwMCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OTE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDIwLDB4YmYsMHg4MSwweDMzLDB4YTQgfSB9LAoreyAgMTYsIDB4OTFhMCwgMCwgezB4OGMsMHgxOSwweDAzLDB4M2UsMHgwMCwweGNkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDgzLDB4M2UsMHgwMCwweGVmLDB4ODAgfSB9LAoreyAgMTYsIDB4OTFiMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4ZjksMHgxMywweGZhLDB4MTAsMHhmZCwweDgwLDB4M2YsMHhhNCwweDBmLDB4ZDgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTFjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YmYsMHgyMCwweDMxLDB4YzIgfSB9LAoreyAgMTYsIDB4OTFkMCwgMCwgezB4MDgsMHg1YSwweDAyLDB4M2MsMHgwMiwweDg3LDB4MDAsMHgyZCwweDk0LDB4MGIsMHg3MCwweDBhLDB4MWMsMHg0MCwweDg2LDB4MTAgfSB9LAoreyAgMTYsIDB4OTFlMCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NDAsMHgwMiwweGQ0LDB4MDAsMHhmNiwweDAwLDB4MmQsMHg0MCwweDRiLDB4NjAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTFmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgwMSwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OTIwMCwgMCwgezB4MjgsMHg1MCwweDAyLDB4MWMsMHgwMCwweDg0LDB4MDAsMHgyZCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MWMsMHgwMCwweGI1LDB4MDAgfSB9LAoreyAgMTYsIDB4OTIxMCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NDAsMHgwNiwweGQwLDB4NDAsMHhiNCwweDA4LDB4MmQsMHg4MCwweDBiLDB4NDgsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTIyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4YjMsMHgwOCwweGEwLDB4MjAgfSB9LAoreyAgMTYsIDB4OTIzMCwgMCwgezB4MDgsMHgxMSwweDhhLDB4MGUsMHgwMCwweDgwLDB4MDAsMHgyYywweDkwLDB4MGIsMHgzNywweDAyLDB4MGMsMHgwMCwweDkwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTI0MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHg0MiwweGNjLDB4MDQsMHhhMywweDgwLDB4MmMsMHg1MCwweDBiLDB4MzAsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTI1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZjksMHg4MCwweDMyLDB4NjAgfSB9LAoreyAgMTYsIDB4OTI2MCwgMCwgezB4MGMsMHhkNCwweDAzLDB4M2MsMHg4MCwweDg4LDB4MDAsMHgzZSwweGQwLDB4MGYsMHhmOCwweDAzLDB4MjgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTI3MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwNywweGVjLDB4MDEsMHhiYiwweDgwLDB4M2UsMHg1NCwweDBmLDB4YjAsMHgwNiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlZSwweDA4LDB4ZjksMHg4MCwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4OTI5MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4NDAsMHgzZSwweDU4LDB4MGYsMHhiMCwweDQzLDB4ZTksMHgwMCwweGViLDB4NDQgfSB9LAoreyAgMTYsIDB4OTJhMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MGQsMHhmOCwweDAwLDB4M2UsMHg4MCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4Y2YsMHgwMCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4OTJjMCwgMCwgezB4MGMsMHhkMCwweDAzLDB4M2MsMHgzMCwweGNjLDB4MDAsMHgzYiwweGMwLDB4MmQsMHhmMCwweDAzLDB4ZDgsMHgwMiwweGNjLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJkMCwgMCwgezB4M2QsMHgwMCwweDBjLDB4YzAsMHgwMywweGY0LDB4MDAsMHhlZSwweDAyLDB4MzcsMHg0MCwweDBjLDB4ZTAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4OTJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDE4LDB4ODMsMHg4NCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJmMCwgMCwgezB4NGEsMHgxMCwweDAyLDB4MGMsMHgwMCwweGE4LDB4NDgsMHgyZSwweDYwLDB4MDgsMHhiMCwweDAyLDB4ZTksMHgwMCwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4OTMwMCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweGU4LDB4MTAsMHhiMSwweDAxLDB4MjAsMHg4MCwweDBhLDB4OTAsMHgwMywweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTMxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHg4MiwweDIyLDB4MDggfSB9LAoreyAgMTYsIDB4OTMyMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MmMsMHgxNCwweDg4LDB4MDQsMHgyYywweDA4LDB4MDgsMHhiMCwweDEyLDB4ZTgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTMzMCwgMCwgezB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU4LDB4MDEsMHhiOSwweDAwLDB4MjYsMHgwNCwweDA4LDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHg4MCwweGEyLDB4YzAgfSB9LAoreyAgMTYsIDB4OTM1MCwgMCwgezB4MGEsMHg5MiwweDAyLDB4MmMsMHgwMCwweGEyLDB4MDAsMHgyYywweDAwLDB4MDgsMHgzNCwweDAyLDB4YzgsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM2MCwgMCwgezB4MmMsMHgwMCwweDI4LDB4MDAsMHgwMiwweGM0LDB4MDEsMHhiYSwweDAwLDB4MjIsMHhjMCwweDAyLDB4MjAsMHgwNiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2EsMHgwMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM4MCwgMCwgezB4MGMsMHg5MiwweDBiLDB4MmMsMHgwNCwweGM4LDB4MDQsMHgzYSwweDAwLDB4MGMsMHhiNCwweDAzLDB4ZTgsMHgwMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTM5MCwgMCwgezB4MmUsMHgwMCwweDBjLDB4ODAsMHgzMywweGUxLDB4NDAsMHhlOCwweDAwLDB4MzYsMHgwMCwweDBjLDB4ODAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4OTNhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNkLDB4MDAgfSB9LAoreyAgMTYsIDB4OTNiMCwgMCwgezB4MGYsMHhkMSwweDBiLDB4ZmMsMHgwMSwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZDgsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4OTNjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwNywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4OTNkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhmMywweDAwLDB4Y2YsMHg4MCwweDM1LDB4NjAgfSB9LAoreyAgMTYsIDB4OTNlMCwgMCwgezB4NGUsMHg2OCwweDQzLDB4NWMsMHgwMCwweGU3LDB4ODAsMHgzOSwweGMwLDB4MGMsMHhjMSwweDAzLDB4N2UsMHgwMCwweGNmLDB4MzQgfSB9LAoreyAgMTYsIDB4OTNmMCwgMCwgezB4MzUsMHhlMSwweDRkLDB4ZjIsMHgwMywweDdjLDB4MDAsMHhkZiwweDM4LDB4M2YsMHhjOCwweDBmLDB4ZjgsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTgsMHhjOCwweDAwLDB4ZGIsMHg4NCwweDIyLDB4NjAgfSB9LAoreyAgMTYsIDB4OTQxMCwgMCwgezB4MDgsMHhhYywweDBhLDB4MmMsMHgwMCwweDhiLDB4ODAsMHgyMiwweDMwLDB4MDgsMHg5MSwweDIyLDB4MmMsMHg5MCwweDI3LDB4NjEgfSB9LAoreyAgMTYsIDB4OTQyMCwgMCwgezB4MjIsMHhjYSwweDg4LDB4ZmMsMHgyMiwweGJmLDB4MDAsMHg4YiwweDYyLDB4MmYsMHhkMCwweDA5LDB4YjgsMHgwMywweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhlMiwweDgwLDB4YTksMHgwMiwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4OTQ0MCwgMCwgezB4ODIsMHgzNCwweDQyLDB4MDQsMHgwMCwweGE5LDB4MDAsMHgyOCwweGM1LDB4NDgsMHgzMiwweDAyLDB4NGMsMHgyMCwweDgzLDB4MzAgfSB9LAoreyAgMTYsIDB4OTQ1MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzEsMHgwMiwweDBkLDB4MDAsMHhiMywweDIwLDB4MmMsMHhjNCwweDBiLDB4MzAsMHgwMiwweGYyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhhYSwweDAyLDB4YjksMHgwNCwweDIyLDB4NjAgfSB9LAoreyAgMTYsIDB4OTQ3MCwgMCwgezB4MjgsMHhiMiwweDAyLDB4MjYsMHgwMCwweDg5LDB4ODgsMHgwMiwweGMwLDB4MDgsMHgzMSwweDEyLDB4ZWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQ4MCwgMCwgezB4MmEsMHhkMCwweDA4LDB4YjAsMHgwMiwweGFjLDB4MDAsMHgyYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhlMiwweDAwLDB4ZTMsMHgwMCwweDM2LDB4MjAgfSB9LAoreyAgMTYsIDB4OTRhMCwgMCwgezB4MGUsMHhhNCwweDYzLDB4NmUsMHgwMCwweGUxLDB4YzAsMHgxYSwweGMxLDB4MGMsMHg4MCwweDAzLDB4NjgsMHg3MCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRiMCwgMCwgezB4MzYsMHg4MCwweDBkLDB4YjAsMHgwMywweDRjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHhjMSwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDA0LDB4ZGYsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRkMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDAwLDB4MmIsMHg5OCwweDAzLDB4M2EsMHgwMCwweDc3LDB4MDAgfSB9LAoreyAgMTYsIDB4OTRlMCwgMCwgezB4MjcsMHhlNCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhkZiwweDAwLDB4M2UsMHhjMCwweDBkLDB4ZjAsMHg0MywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHhhNCwweDY4LDB4Y2IsMHgyMCwweDNhLDB4OTAgfSB9LAoreyAgMTYsIDB4OTUwMCwgMCwgezB4MGYsMHgyNCwweGEzLDB4YWMsMHgwMCwweGU5LDB4NTAsMHgzYSwweGMwLDB4MGUsMHhiNCwweDgzLDB4MmMsMHgwOCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4OTUxMCwgMCwgezB4M2EsMHg5MCwweDBlLDB4YjAsMHg4YiwweGVjLDB4ODAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDEsMHgwYSwweDAwLDB4OGIsMHhhMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4OTUzMCwgMCwgezB4MGQsMHhhOCwweDAyLDB4MmMsMHgwNCwweDg5LDB4NDAsMHgyOCwweGU4LDB4MDgsMHhiMiwweDAyLDB4MmMsMHgwMCwweGFmLDB4MDAgfSB9LAoreyAgMTYsIDB4OTU0MCwgMCwgezB4MDIsMHg4MCwweDA4LDB4N2MsMHgwMywweDNkLDB4ODAsMHgzZiwweDAwLDB4MmYsMHhjMCwweDA4LDB4YjAsMHgwMiwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OSwweDAwLDB4MDMsMHg0MCwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4OTU2MCwgMCwgezB4MmIsMHgyOCwweDRhLDB4MjgsMHgwMCwweGExLDB4MDAsMHg2OCwweGQyLDB4MGEsMHgyMCwweDQyLDB4YTQsMHgwMSwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTU3MCwgMCwgezB4MDIsMHg0MCwweDBhLDB4MzQsMHgwMiwweDBkLDB4MDAsMHgzMywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzAsMHgwMCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MDEsMHgxYSwweDAwLDB4ODcsMHg5MCwweDIxLDB4ZTQgfSB9LAoreyAgMTYsIDB4OTU5MCwgMCwgezB4MmIsMHhjOCwweDEyLDB4M2EsMHgwMCwweDg1LDB4YzAsMHgyYiwweDIxLDB4MjgsMHg2OCwweDAyLDB4YjYsMHgwMCwweGE3LDB4ODQgfSB9LAoreyAgMTYsIDB4OTVhMCwgMCwgezB4MjMsMHg2MCwweDA4LDB4MzgsMHg4MCwweDFlLDB4MDAsMHhiNywweDgwLDB4MmQsMHhlMCwweDA4LDB4NzgsMHgwMiwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4OTViMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4YzEsMHgwMCwweDM4LDB4NTQgfSB9LAoreyAgMTYsIDB4OTVjMCwgMCwgezB4MGYsMHgyNiwweDgzLDB4ODAsMHgwMCwweGUwLDB4MzQsMHgyOCwweGM4LDB4MGUsMHgyYywweDBiLDB4OGMsMHgwMCwweGUzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTVkMCwgMCwgezB4NzgsMHg0NSwweDBlLDB4MzAsMHgwMywweDhlLDB4ODAsMHhmMywweDAwLDB4M2MsMHhjOCwweDBlLDB4MzAsMHgwMywweDkyLDB4MDIgfSB9LAoreyAgMTYsIDB4OTVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiOCwweDAwLDB4ZjUsMHgwMiwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4OTVmMCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZjgsMHgwMCwweGJkLDB4MTQsMHgxZiwweGMwLDB4MGYsMHhlMSwweDIzLDB4NWMsMHg0NCwweDlmLDB4NDIgfSB9LAoreyAgMTYsIDB4OTYwMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjQsMHg4MiwweDdkLDB4NDAsMHhmZiwweDEwLDB4M2YsMHhjMCwweDRmLDB4NzAsMHgwNywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OTYxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAyLDB4Y2IsMHgwMCwweDM4LDB4YzAgfSB9LAoreyAgMTYsIDB4OTYyMCwgMCwgezB4M2MsMHhhMCwweDAzLDB4ZWMsMHgwMCwweGU5LDB4MDAsMHgzZSwweGMwLDB4MGMsMHhiMCwweDAzLDB4MjAsMHgwNCwweGZiLDB4MjEgfSB9LAoreyAgMTYsIDB4OTYzMCwgMCwgezB4M2UsMHg4MCwweDRmLDB4YjQsMHgwMywweGNmLDB4MDAsMHhjYiwweDAwLDB4M2UsMHhjYywweDRmLDB4YjAsMHg0MywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTY0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4OTEsMHg5OCwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4OTY1MCwgMCwgezB4MDgsMHg0MCwweDAyLDB4ZGMsMHgwNCwweGI1LDB4MDAsMHgyZCwweDAwLDB4MmQsMHg3MCwweDAyLDB4MWMsMHgxYywweGI3LDB4MDIgfSB9LAoreyAgMTYsIDB4OTY2MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzIsMHgwMiwweGRjLDB4MDAsMHg4NywweDQwLDB4MmQsMHhjYSwweDhiLDB4NzAsMHgwMiwweGYyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTY3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhiYSwweDAwLDB4ODcsMHg4OCwweDJiLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTY4MCwgMCwgezB4MTgsMHg3OCwweDIyLDB4ZDYsMHgxMSwweGE0LDB4ODIsMHgyZiwweGUwLDB4MDgsMHg3OCwweDAyLDB4MTIsMHgwMCwweGI3LDB4OTQgfSB9LAoreyAgMTYsIDB4OTY5MCwgMCwgezB4NmQsMHg2MCwweDRiLDB4N2EsMHgwMiwweGRlLDB4NDAsMHhiNywweGEwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwNiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjOSwweDEyLDB4ODMsMHg4MiwweDI4LDB4ZDQgfSB9LAoreyAgMTYsIDB4OTZiMCwgMCwgezB4OTgsMHgwMCwweDA2LDB4ZWYsMHgwNSwweGIxLDB4OTAsMHgyYywweGMxLDB4MDksMHhiNCwweDAyLDB4MGMsMHgwNCwweGIzLDB4MDEgfSB9LAoreyAgMTYsIDB4OTZjMCwgMCwgezB4NmMsMHhmMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTZkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDQwLDB4Y2EsMHg4MCwweDNiLDB4YTAgfSB9LAoreyAgMTYsIDB4OTZlMCwgMCwgezB4NGMsMHhlNSwweDAyLDB4ZjgsMHg4MCwweGVlLDB4MDAsMHgzZCwweDgwLDB4MmMsMHhlMCwweDBmLDB4MzgsMHg4MCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTZmMCwgMCwgezB4M2YsMHhhOSwweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhiYSwweDAyLDB4M2UsMHg4MCwweDhiLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTcwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDEwLDB4ZjgsMHgwMCwweDI2LDB4MDIgfSB9LAoreyAgMTYsIDB4OTcxMCwgMCwgezB4MGYsMHg4NCwweDAzLDB4ZTAsMHgyNCwweGY4LDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweGEzLDB4ZTAsMHgzMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTcyMCwgMCwgezB4MzYsMHgwMiwweDBmLDB4ODAsMHgyMywweGUwLDB4MDQsMHgwOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTczMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweGI2LDB4NDEgfSB9LAoreyAgMTYsIDB4OTc0MCwgMCwgezB4NGUsMHg5OSwweDBiLDB4YTQsMHgwMCwweDY5LDB4MTAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4YTQsMHgxMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTc1MCwgMCwgezB4M2UsMHg0MCwweDBkLDB4OTIsMHgwMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBlLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTc2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODEsMHgwMCwweDIwLDB4NDIgfSB9LAoreyAgMTYsIDB4OTc3MCwgMCwgezB4MDgsMHgxNCwweDlhLDB4MjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDUwLDB4MDAsMHg5MCwweDAyLDB4MjQsMHgxMCwweGQ5LDB4MDIgfSB9LAoreyAgMTYsIDB4OTc4MCwgMCwgezB4NmUsMHg0MCwweDBiLDB4OTQsMHgwMywweGE3LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTc5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNiwweDAwLDB4OTksMHgwMCwweGE2LDB4NDEgfSB9LAoreyAgMTYsIDB4OTdhMCwgMCwgezB4MGEsMHg5MCwweDA2LDB4MmMsMHgwMCwweGE5LDB4MDksMHg2ZSwweDUwLDB4MDgsMHg5MSwweDAyLDB4ODQsMHgwNCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTdiMCwgMCwgezB4MGUsMHg0MCwweDBiLDB4OTQsMHgwMiwweGU1LDB4NDksMHhiOSwweDAwLDB4MGEsMHg0MCwweDBhLDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTdjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNiwweDAwLDB4ODEsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OTdkMCwgMCwgezB4MDgsMHgxMiwweDIyLDB4MDQsMHg4MSwweGExLDB4MDAsMHgyYywweDQwLDB4MDgsMHgxNiwweDAyLDB4MDQsMHgwMCwweDkxLDB4MjAgfSB9LAoreyAgMTYsIDB4OTdlMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MTIsMHg0MiwweDg0LDB4ODksMHhiMSwweDIwLDB4MjAsMHg0OCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTgwMCwgMCwgezB4MGEsMHg4MCwweDAzLDB4YTEsMHg0MCwweGU4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHgwMCwweDIzLDB4YTEsMHg0MCwweGM4LDB4NTAgfSB9LAoreyAgMTYsIDB4OTgxMCwgMCwgezB4MmUsMHgxNCwweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDUwLDB4M2EsMHgwMCwweDBlLDB4ODAsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4OTgyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MWQsMHhkNCwweDAwLDB4ZjUsMHgwMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4OTgzMCwgMCwgezB4MGYsMHhkMSwweDAzLDB4ZjQsMHg0NCwweGRkLDB4MDIsMHgzZCwweDUwLDB4MmIsMHhkMSwweDIzLDB4ZjQsMHgwMCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4OTg0MCwgMCwgezB4M2YsMHg0MCwweDBkLDB4OTEsMHgwMywweGE0LDB4NDgsMHhmOSwweDEyLDB4M2UsMHg0ZSwweDFmLDB4OTAsMHgwMywweGE2LDB4MDIgfSB9LAoreyAgMTYsIDB4OTg1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNCwweDAwLDB4YzUsMHgwNCwweDNiLDB4NDAgfSB9LAoreyAgMTYsIDB4OTg2MCwgMCwgezB4MGYsMHhkOCwweDAzLDB4YTcsMHg4MCwweGZkLDB4MDAsMHhiMywweDY4LDB4MGQsMHhkOCwweDQzLDB4YTUsMHgxMCwweGM5LDB4YTAgfSB9LAoreyAgMTYsIDB4OTg3MCwgMCwgezB4MzIsMHg1MSwweDRmLDB4NWEsMHg0MywweDM2LDB4MDAsMHhjOSwweGEwLDB4N2EsMHg2OCwweDBiLDB4ZDAsMHgwMywweGM2LDB4MDEgfSB9LAoreyAgMTYsIDB4OTg4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDc4LDB4MTgsMHhjYSwweDg4LDB4ODgsMHgwMiwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTg5MCwgMCwgezB4OGQsMHg4NCwweDIyLDB4MjMsMHg0MiwweGY4LDB4MDAsMHgyMiwweDA0LDB4MjgsMHg4YSwweGEyLDB4YWEsMHg5NCwweDg4LDB4ZTkgfSB9LAoreyAgMTYsIDB4OThhMCwgMCwgezB4MjAsMHhhOCwweDBhLDB4ODAsMHgwYSwweDIxLDB4NDAsMHg4MCwweGUyLDB4MmUsMHgyOCwweDBiLDB4ODAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4OThiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDIwLDB4YTEsMHgwNCwweGE4LDB4YzAgfSB9LAoreyAgMTYsIDB4OThjMCwgMCwgezB4MGIsMHgxYywweDJhLDB4MjQsMHgwMCwweDM5LDB4MDQsMHgyMCwweDQwLDB4MmEsMHgxZSwweDAyLDB4ZTQsMHg4MCwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4OThkMCwgMCwgezB4MmEsMHg0OCwweDA5LDB4MTQsMHg0NiwweDA0LDB4MDAsMHg4MSwweDM4LDB4MmMsMHg1YiwweDBiLDB4MTAsMHgwMiwweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OThlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNCwweDEyLDB4YTksMHgyNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OThmMCwgMCwgezB4MjksMHg5MCwweDAyLDB4MjQsMHgwMCwweDM5LDB4MDAsMHgwMiwweDU4LDB4MDgsMHgxOCwweDEwLDB4ZTYsMHgwMSwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTkwMCwgMCwgezB4YWEsMHg0NCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MGUsMHg0MSwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4OTkxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4ZTEsMHgwMSwweDJhLDB4NjQgfSB9LAoreyAgMTYsIDB4OTkyMCwgMCwgezB4MmYsMHg5NCwweDEzLDB4MjQsMHgwMiwweDcxLDB4NjAsMHgxMiwweDYwLDB4NGQsMHg5MCwweDAwLDB4YzUsMHgwMiwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTkzMCwgMCwgezB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweDI0LDB4MDIsMHhjOSwweDAyLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMiwweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTk0MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDEsMHhhNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4OTk1MCwgMCwgezB4YWYsMHg5MCwweDgzLDB4NjQsMHg4OCwweGY5LDB4MjAsMHgzZSwweDYyLDB4MDMsMHg5MCwweDgzLDB4YTQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTk2MCwgMCwgezB4MzYsMHg2MCwweDBmLDB4MTAsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4N2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMSwweDAwLDB4YzgsMHg4MiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk4MCwgMCwgezB4NmYsMHgwMCwweDAzLDB4YTAsMHgwMCwweGQ4LDB4NDAsMHgzMCwweDAwLDB4MGUsMHg4MCwweDAzLDB4NjAsMHgwNCwweGY4LDB4MDEgfSB9LAoreyAgMTYsIDB4OTk5MCwgMCwgezB4M2UsMHgxMCwweDRmLDB4ODAsMHg4YiwweDIyLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwMSwweDBlLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTlhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHgzOCwweDAwLDB4MGUsMHgwMCwweGE5LDB4OTAgfSB9LAoreyAgMTYsIDB4OTliMCwgMCwgezB4MmYsMHhlNiwweDIwLDB4ODgsMHgwMCwweDllLDB4ODAsMHgyMywweDgwLDB4MGEsMHhlOCwweDAzLDB4MjgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTljMCwgMCwgezB4MTgsMHg4MCwweDBkLDB4ZWMsMHgwMiwweDM4LDB4ODAsMHhiYSwweDAwLDB4YTIsMHg4MCwweDA4LDB4YTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTlkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAyLDB4ODMsMHg4MCwweDIwLDB4YzggfSB9LAoreyAgMTYsIDB4OTllMCwgMCwgezB4MGIsMHgyMCwweDAyLDB4MGMsMHgwMSwweDkyLDB4MTAsMHg2OCwweGMwLDB4M2EsMHgzYywweDAyLDB4Y2MsMHgxMCwweDNiLDB4MDIgfSB9LAoreyAgMTYsIDB4OTlmMCwgMCwgezB4MGMsMHhjMCwweDI4LDB4M2MsMHgwMiwweDRlLDB4MDAsMHhiMywweDAwLDB4MjgsMHhjMCwweDI4LDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWEwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNCwweDAwLDB4ODcsMHg0MiwweDJiLDB4YzAgfSB9LAoreyAgMTYsIDB4OWExMCwgMCwgezB4MjksMHg3MCwweDIyLDB4OWMsMHgwMCwweGI2LDB4MDAsMHgyYiwweGMyLDB4MGEsMHg2MCwweDg2LDB4MWMsMHgwMCwweGI3LDB4MjEgfSB9LAoreyAgMTYsIDB4OWEyMCwgMCwgezB4MjksMHhjMCwweDAwLDB4NzQsMHgwMiwweDVjLDB4MDAsMHgzNywweDkxLDB4MDEsMHhlMCwweDA4LDB4NzQsMHgwMiwweGE4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWEzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4MCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWE0MCwgMCwgezB4MmYsMHg3OCwweDAyLDB4OWUsMHgwMCwweDk2LDB4ODAsMHgzOSwweGUwLDB4MmUsMHhmOCwweDAzLDB4ZGUsMHgzMCwweGY3LDB4ZDAgfSB9LAoreyAgMTYsIDB4OWE1MCwgMCwgezB4MmQsMHhmMiwweDAwLDB4NzgsMHgwMywweDUyLDB4MDAsMHhmNywweGEyLDB4M2IsMHhlMCwweDBlLDB4NzgsMHgwNywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OWE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhiNCwweDAwLDB4ZmIsMHgwMCwweDBjLDB4YzAgfSB9LAoreyAgMTYsIDB4OWE3MCwgMCwgezB4MGYsMHgzMCwweDAzLDB4ZWMsMHgxMCwweGQzLDB4MDAsMHhiNCwweGMwLDB4MmYsMHg4MCwweDAzLDB4NmMsMHg0OCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWE4MCwgMCwgezB4M2UsMHhjOCwweDRkLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmYiwweDIwLDB4MWUsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OWE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4Y2MsMHg4MCwweDJiLDB4MmMgfSB9LAoreyAgMTYsIDB4OWFhMCwgMCwgezB4MmYsMHhmOCwweDAzLDB4N2UsMHgwMCwweDZlLDB4ODAsMHgzYiwweGExLDB4MGQsMHhkOCwweDQzLDB4M2UsMHgwMCwweGZmLDB4OTAgfSB9LAoreyAgMTYsIDB4OWFiMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4ZTksMHgzMywweGZlLDB4MDAsMHhjZiwweGMwLDB4M2YsMHhlMiwweDBmLDB4ZDgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiNCwweDQwLDB4ODcsMHgwMCwweDIxLDB4MDQgfSB9LAoreyAgMTYsIDB4OWFkMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4MWMsMHgwMCwweDg2LDB4MDAsMHgyMSwweGMwLDB4MjgsMHg5MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MTAgfSB9LAoreyAgMTYsIDB4OWFlMCwgMCwgezB4MjEsMHhjMCwweDBmLDB4NzMsMHgwMiwweGNjLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5ZCwweDAwLDB4YTQsMHgwMCwweDI5LDB4NDggfSB9LAoreyAgMTYsIDB4OWIwMCwgMCwgezB4NmEsMHhmMCwweDgyLDB4NGMsMHgwMCwweGFlLDB4MDAsMHhhMSwweGM0LDB4MjksMHg3NCwweDAyLDB4NWMsMHg0MCwweGEzLDB4MTAgfSB9LAoreyAgMTYsIDB4OWIxMCwgMCwgezB4NjEsMHhjMiwweDBiLDB4NjAsMHgwNiwweGM4LDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWIyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhlNiwweDAxLDB4YTMsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWIzMCwgMCwgezB4MjgsMHgzYywweDAyLDB4MGMsMHgwMCwweDgzLDB4NDIsMHgyMCwweGM4LDB4MDgsMHgxMCwweDAyLDB4Y2QsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWI0MCwgMCwgezB4MjgsMHhmMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDEsMHg4MywweDA0LDB4MmMsMHhjMCwweDgzLDB4MTAsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OWI1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYSwweDgwLDB4ZWIsMHgwMCwweDM4LDB4YzAgfSB9LAoreyAgMTYsIDB4OWI2MCwgMCwgezB4MGEsMHg5MCwweDAzLDB4N2MsMHgyMiwweGEyLDB4NDAsMHgzMiwweDQ4LDB4MGQsMHhiMCwweDBiLDB4M2UsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWI3MCwgMCwgezB4MzMsMHhmNCwweDBmLDB4OTAsMHgwMywweGVjLDB4MDAsMHg4ZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4OTAsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OWI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlMCwweDAwLDB4ZDksMHgwMiwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OWI5MCwgMCwgezB4MGUsMHhiNiwweDAzLDB4ZWMsMHgwMCwweGZhLDB4MjAsMHgzZSwweGMwLDB4NGYsMHgyNCwweDIzLDB4YWMsMHg2MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWJhMCwgMCwgezB4YTYsMHhjMCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMSwweDBmLDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmOCwweDAyLDB4Y2YsMHgwMCwweDMzLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWJjMCwgMCwgezB4MmMsMHhmMCwweDEzLDB4YmMsMHgwMCwweDJlLDB4MTAsMHhiMSwweDY0LDB4MmUsMHhmMCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4OWJkMCwgMCwgezB4M2YsMHhjMSwweDRkLDB4ZWMsMHg2MywweGZlLDB4MDAsMHhiNywweDAwLDB4M2IsMHhjMCwweDBjLDB4ZDgsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4OWJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2YywweDI4LDB4ODEsMHg4MSwweDIyLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWJmMCwgMCwgezB4MGEsMHgzOCwweDAyLDB4M2MsMHgwNCwweGJhLDB4YzksMHgzMiwweGUwLDB4MjAsMHg4NCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMwMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4OWMsMHgwMiwweGU3LDB4ODEsMHhiYiwweDA0LDB4MjIsMHhjMCwweDBhLDB4OTksMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyOCwweDQwLDB4ODgsMHg4MCwweDIyLDB4ODggfSB9LAoreyAgMTYsIDB4OWMyMCwgMCwgezB4MjgsMHhiYywweDQyLDB4YWMsMHgwMCwweGJhLDB4MDAsMHgyYSwweDgwLDB4MDgsMHg4NCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMzMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHg4MiwweGU4LDB4OTAsMHhhYiwweDAwLDB4NjIsMHhjMCwweDA4LDB4YjAsMHgxMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAwLDB4ODksMHgwMCwweDJhLDB4ODAgfSB9LAoreyAgMTYsIDB4OWM1MCwgMCwgezB4MjgsMHhiMiwweDAyLDB4MGMsMHgwMCwweGJhLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgwMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM2MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgyMCwweDRjLDB4MTQsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2OCwweDAwLDB4YzgsMHgwMCwweGIyLDB4YzAgfSB9LAoreyAgMTYsIDB4OWM4MCwgMCwgezB4MmMsMHhiMiwweDAzLDB4YWMsMHgwMCwweGZhLDB4MDAsMHgzYSwweGMwLDB4NGUsMHhhNSwweDAzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM5MCwgMCwgezB4M2YsMHhjMCwweDA5LDB4YTAsMHgwMywweGU5LDB4MDQsMHhlZiwweDAwLDB4YmEsMHhjMCwweDBjLDB4YjAsMHgwMSwweGMwLDB4MDEgfSB9LAoreyAgMTYsIDB4OWNhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZjUsMHgwMCwweDM1LDB4YzAgfSB9LAoreyAgMTYsIDB4OWNiMCwgMCwgezB4YWYsMHgzNCwweDAzLDB4ZmMsMHgwMCwweGY0LDB4MDAsMHgzOSwweGMwLDB4MGYsMHhjMiwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4OWNjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4YTAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDUgfSB9LAoreyAgMTYsIDB4OWNkMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4ZmYsMHgyOSwweDNkLDB4MjAgfSB9LAoreyAgMTYsIDB4OWNlMCwgMCwgezB4OGUsMHhjMSwweDAzLDB4MzIsMHg0OCwweGRjLDB4ODAsMHgyMywweDI1LDB4MGUsMHhmMiwweDAzLDB4M2MsMHhjMCwweGRmLDB4ODQgfSB9LAoreyAgMTYsIDB4OWNmMCwgMCwgezB4MzMsMHhjOSwweDBmLDB4ZjIsMHgwMywweGZjLDB4MDAsMHhjZiwweDgwLDB4MzMsMHg0MCwweDBjLDB4ZjIsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweGMwLDB4YmIsMHg2MCwweDJlLDB4MDggfSB9LAoreyAgMTYsIDB4OWQxMCwgMCwgezB4MDgsMHg4MSwweDAyLDB4MjAsMHgwNCwweDg4LDB4MjAsMHgyMCwweDQ4LDB4MDgsMHhmMSwweDgyLDB4MmQsMHhjMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQyMCwgMCwgezB4MjIsMHhkNCwweDA5LDB4ZjUsMHgwMiwweGZjLDB4MDgsMHg4YiwweDAxLDB4MjIsMHg0MCwweDI4LDB4YjQsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDIwLDB4YjMsMHgwOSwweDJjLDB4ODIgfSB9LAoreyAgMTYsIDB4OWQ0MCwgMCwgezB4MDgsMHgxMCwweDE2LDB4YTAsMHgxMCwweDkwLDB4MDgsMHgyOCwweDQ4LDB4MGEsMHgzMiwweDAyLDB4MGMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQ1MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDIsMHg5MywweDAxLDB4MjAsMHgwMCwweDhhLDB4MzEsMHgyMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA0LDB4YmIsMHgwMCwweDJjLDB4ODAgfSB9LAoreyAgMTYsIDB4OWQ3MCwgMCwgezB4MDgsMHg4NiwweDAyLDB4YTAsMHgyMCwweGEwLDB4MDAsMHgyYSwweDYwLDB4MGEsMHhiMCwweDEwLDB4MmMsMHgwMCwweGFiLDB4MGMgfSB9LAoreyAgMTYsIDB4OWQ4MCwgMCwgezB4NmUsMHhjMCwweDA5LDB4YjAsMHgwMiwweGNjLDB4MDAsMHg5YiwweDAwLDB4MjIsMHg2MCwweDBhLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlYywweDAwLDB4YmIsMHgwMCwweDNlLDB4MzQgfSB9LAoreyAgMTYsIDB4OWRhMCwgMCwgezB4MDgsMHhhMCwweDBiLDB4ODMsMHgwMCwweGQ5LDB4MDIsMHgzYSwweGUwLDB4MmUsMHhiMCwweDBiLDB4MmMsMHgwMCwweGY4LDB4ODAgfSB9LAoreyAgMTYsIDB4OWRiMCwgMCwgezB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhjYSwweDQwLDB4YjIsMHg3MiwweDBlLDB4YjAsMHgwYiwweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDEwLDB4ZmIsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWRkMCwgMCwgezB4MGQsMHhmOCwweDEzLDB4NzAsMHg0OCwweGRkLDB4NDAsMHgzNywweGMyLDB4OGQsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGRkLDB4YzggfSB9LAoreyAgMTYsIDB4OWRlMCwgMCwgezB4MTMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZSwweDQwLDB4N2YsMHg0MCwweDBkLDB4NzAsMHgwMywweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMSwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4OWUwMCwgMCwgezB4MDQsMHgxMCwweDAzLDB4MjAsMHg0MCwweGU4LDB4MTAsMHgzYSwweGMwLDB4MGQsMHhiMCwweDAzLDB4YWMsMHgwOCwweGY4LDB4NDAgfSB9LAoreyAgMTYsIDB4OWUxMCwgMCwgezB4YjIsMHhjMCwweDJjLDB4YjAsMHgzMywweGE0LDB4ODIsMHhkYSwweDQwLDB4YmEsMHg0MCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzYywweDA4LDB4YmYsMHg4MCwweDIyLDB4YzggfSB9LAoreyAgMTYsIDB4OWUzMCwgMCwgezB4MDgsMHhiNywweDAwLDB4MjMsMHg0NCwweDg4LDB4ZDAsMHgyMiwweGQwLDB4MDgsMHg3MCwweDgyLDB4ZmMsMHgwMCwweGIyLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWU0MCwgMCwgezB4MDMsMHhmNCwweDA4LDB4ZjUsMHgwMiwweDM3LDB4MDQsMHg4YiwweGQxLDB4MjIsMHg2MCwweDRiLDB4ZmQsMHgwMiwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHgxMCwweGE0LDB4NDAgfSB9LAoreyAgMTYsIDB4OWU2MCwgMCwgezB4MDgsMHgwMCwweDAyLDB4NDgsMHgwMCwweGEwLDB4NDIsMHgyYSwweGQwLDB4MDEsMHgzMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OWU3MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzEsMHgwMiwweGNjLDB4MDAsMHg4OSwweDAwLDB4MjIsMHhlOCwweDAzLDB4MzgsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWU4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDI3LDB4NjQgfSB9LAoreyAgMTYsIDB4OWU5MCwgMCwgezB4NjgsMHg0YSwweDAyLDB4NTIsMHgwMCwweDhjLDB4ODAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OWVhMCwgMCwgezB4MmQsMHhlMiwweDE5LDB4MzksMHgwMiwweDVlLDB4MzAsMHg4NSwweDk4LDB4MjEsMHhlNCwweDBiLDB4NzksMHgwMiwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWViMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjMsMHgyMCwweDM0LDB4MDAgfSB9LAoreyAgMTYsIDB4OWVjMCwgMCwgezB4MGMsMHhiOCwweDAzLDB4NDgsMHg4MCwweGUyLDB4MjIsMHgzOCwweGMwLDB4MGQsMHgzMCwweDAzLDB4OGMsMHgwMCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWVkMCwgMCwgezB4M2UsMHhjMCwweDBkLDB4MzEsMHgwMywweGVjLDB4MDAsMHhjYiwweDAwLDB4MzgsMHgwNiwweDBmLDB4MzAsMHg4MywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4OWVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNiLDB4MDEgfSB9LAoreyAgMTYsIDB4OWVmMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4OTAsMHgwMCwweGY2LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDAxLDB4ZmMsMHgwMCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4OWYwMCwgMCwgezB4MzMsMHhjMiwweDBlLDB4ZjUsMHgxMywweGJjLDB4MDAsMHhlZCwweDAwLDB4M2YsMHhjNCwweDBmLDB4ZjAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OWYxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4OWYyMCwgMCwgezB4MGUsMHhhMCwweDAxLDB4NjQsMHgwMSwweGQ4LDB4MDAsMHgzMiwweGUwLDB4MmMsMHhiNSwweDAzLDB4MmMsMHgwMCwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWYzMCwgMCwgezB4N2EsMHhjMCwweDBkLDB4YjQsMHgwMywweDJkLDB4ODAsMHhjOSwweDAyLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWY0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDgwLDB4YjcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4OWY1MCwgMCwgezB4MGQsMHg2MCwweDAyLDB4ZDAsMHgwMSwweDg0LDB4MDAsMHgyMSwweGMwLDB4MDgsMHgzMCwweDAyLDB4MWQsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4OWY2MCwgMCwgezB4MjEsMHhjOCwweDBiLDB4ZjQsMHgwMywweDFlLDB4YzAsMHg4NiwweDAwLDB4MjEsMHhjMCwweDA4LDB4N2MsMHgwMywweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWY3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweGMwLDB4YjcsMHg5MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWY4MCwgMCwgezB4MDgsMHg3OCwweDA2LDB4ZDYsMHgwMSwweGI0LDB4ODIsMHgyMSwweGUwLDB4MDgsMHg3OCwweDBhLDB4MWUsMHgwMCwweGI1LDB4YzAgfSB9LAoreyAgMTYsIDB4OWY5MCwgMCwgezB4MjksMHhlOCwweDA5LDB4NzgsMHgwMiwweDM2LDB4YzEsMHg5NywweDgwLDB4MjgsMHhiMCwweDBhLDB4N2EsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YmIsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWZiMCwgMCwgezB4MDksMHgzNSwweDgyLDB4YzAsMHhjMSwweGEwLDB4NTEsMHgyMCwweGU0LDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweGJiLDB4YzQgfSB9LAoreyAgMTYsIDB4OWZjMCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDA2LDB4MDAsMHg5MywweDE4LDB4YWEsMHhiMCwweDJhLDB4MzAsMHgwYSwweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWZkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMSwweDNkLDB4YWMgfSB9LAoreyAgMTYsIDB4OWZlMCwgMCwgezB4NGMsMHhlYywweDEzLDB4NzgsMHgxMCwweGY2LDB4ODAsMHhiMywweDkwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgwMCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4OWZmMCwgMCwgezB4M2EsMHg4MSwweDBkLDB4YTAsMHgwZiwweDJhLDB4ODAsMHhkZSwweDA0LDB4M2IsMHhhMCwweDBlLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTAwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTAxMCwgMCwgezB4MGQsMHg4MCwweDAyLDB4ZTEsMHgwMCwweGQ4LDB4NDgsMHgzZSwweDEyLDB4MGYsMHg4MCwweDEzLDB4NjAsMHgwMCwweGY4LDB4NjAgfSB9LAoreyAgMTYsIDB4YTAyMCwgMCwgezB4M2UsMHgwMCwweDA3LDB4ODAsMHgwMywweGEwLDB4MDIsMHhlOCwweDA0LDB4MjYsMHgwOCwweDA1LDB4ODAsMHgwMywweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTAzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwNCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4YTA0MCwgMCwgezB4MGMsMHgxMiwweDAzLDB4MjQsMHg4MiwweGM5LDB4MDAsMHgzNiwweDQ0LDB4MGYsMHgxMCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTA1MCwgMCwgezB4MzYsMHg0MCwweDA0LDB4OTAsMHgwMywweDA0LDB4MDAsMHhjOSwweDAwLDB4MTIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTA2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg4MSwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTA3MCwgMCwgezB4MDgsMHg5MCwweDFhLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDY4LDB4MGIsMHg5OSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTA4MCwgMCwgezB4MjIsMHg0MCwweDY4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHg4OSwweDAwLDB4YTIsMHg0MCwweDA4LDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTA5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgxMCwweDIyLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTBhMCwgMCwgezB4MDgsMHg5NCwweDAwLDB4MDQsMHgwNCwweDhiLDB4MDgsMHgyNiwweGMwLDB4MGIsMHg5MCwweDAyLDB4MjQsMHgwNCwweGI5LDB4MGMgfSB9LAoreyAgMTYsIDB4YTBiMCwgMCwgezB4MjQsMHg0MCwweDBhLDB4MTAsMHgwMiwweDI0LDB4MDAsMHgyMywweDAyLDB4MmEsMHg0MCwweGE4LDB4MTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTBjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDkwLDB4YjEsMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTBkMCwgMCwgezB4MDgsMHgxMiwweDAyLDB4MGMsMHgxMCwweDgxLDB4MDIsMHhhMCwweDUwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweGIxLDB4MDUgfSB9LAoreyAgMTYsIDB4YTBlMCwgMCwgezB4MDAsMHg0OCwweDBhLDB4MTAsMHgwMiwweDA0LDB4YTAsMHhhMSwweDAwLDB4MjgsMHg0YSwweDA4LDB4MTIsMHgwMCwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg1MCwweGJhLDB4MTQgfSB9LAoreyAgMTYsIDB4YTEwMCwgMCwgezB4MGMsMHg4NSwweDAzLDB4MDEsMHg0MiwweGM4LDB4NTAsMHgzNCwweDAwLDB4MGYsMHg4NSwweDAzLDB4MjEsMHg0MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTExMCwgMCwgezB4MzYsMHgwMCwweDBlLDB4ODAsMHgxMywweDIwLDB4ODAsMHhlMCwweDAwLDB4MWEsMHgwOCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YTEyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDQ0LDB4ZjksMHgxMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YTEzMCwgMCwgezB4MmYsMHhkMSwweDEzLDB4ZjQsMHgwNCwweGY1LDB4MDAsMHgzZiwweDQwLDB4MGYsMHg5MSwweDBiLDB4ZTQsMHg0MCwweGZmLDB4MjggfSB9LAoreyAgMTYsIDB4YTE0MCwgMCwgezB4YmUsMHg0ZSwweDBkLDB4OTYsMHg4MywweGQ0LDB4YTIsMHhkZCwweDI4LDB4MzcsMHg0YSwweDBmLDB4OTMsMHg4MywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YTE1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MDUsMHhlNCwweDEwLDB4Y2QsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YTE2MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4MzUsMHgwMiwweDVkLDB4MDEsMHgzMSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTE3MCwgMCwgezB4MzIsMHg2MCwweDBjLDB4OTgsMHg4MywweGU2LDB4NDAsMHhkOSwweDAwLDB4MzYsMHg2YSwweDBjLDB4OWUsMHg4MywweDI2LDB4MDEgfSB9LAoreyAgMTYsIDB4YTE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4ODgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTE5MCwgMCwgezB4MGIsMHg4MCwweDQyLDB4MDIsMHg4MCwweDhhLDB4MDAsMHgyMiwweDIwLDB4ODgsMHg4MCwweDAzLDB4MjAsMHgwOCwweGI4LDB4ODIgfSB9LAoreyAgMTYsIDB4YTFhMCwgMCwgezB4MjIsMHgyMSwweDA4LDB4ODgsMHg4MiwweGUyLDB4NDIsMHg4OCwweGE4LDB4MjIsMHgyMCwweDA4LDB4Y2UsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YTFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAyLDB4ODEsMHgwMCwweDY4LDB4NDAgfSB9LAoreyAgMTYsIDB4YTFjMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4ODQsMHgwMSwweGI5LDB4MDAsMHgyMCwweDQwLDB4NDksMHgxMCwweDBhLDB4MDQsMHgwMCwweGI1LDB4MDggfSB9LAoreyAgMTYsIDB4YTFkMCwgMCwgezB4MjEsMHg0NiwweDA4LDB4NTAsMHgwMiwweGQ0LDB4MDAsMHg4ZCwweDIwLDB4MjUsMHg0YSwweDBiLDB4NTAsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4ODksMHgwNCwweDZlLDB4NTQgfSB9LAoreyAgMTYsIDB4YTFmMCwgMCwgezB4MGIsMHgxMCwweDEyLDB4YTQsMHgwMSwweGE5LDB4MDAsMHhhMiwweDQwLDB4MTgsMHg5MCwweDE2LDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTIwMCwgMCwgezB4MjMsMHg0MCwweDE4LDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDQwLDB4MjEsMHg0YSwweDBiLDB4ZDAsMHgwMiwweDQ2LDB4MDQgfSB9LAoreyAgMTYsIDB4YTIxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDNhLDB4NTAgfSB9LAoreyAgMTYsIDB4YTIyMCwgMCwgezB4OGYsMHg5NiwweDBiLDB4ODQsMHgwMiwweGYxLDB4MDEsMHgzMCwweDQ4LDB4OGQsMHg5MCwweDAzLDB4MjQsMHgxMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTIzMCwgMCwgezB4YjIsMHg0MCwweDJjLDB4OTAsMHgwMywweGU2LDB4NDAsMHhkMSwweGMwLDB4MzYsMHg1MCwweDJmLDB4OTAsMHgwYiwweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTI0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4YTI1MCwgMCwgezB4MGYsMHg5OSwweGMzLDB4NjQsMHgwMCwweGQ5LDB4MjgsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4YTI2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MjAsMHhmOSwweDQwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMSwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTI4MCwgMCwgezB4OGYsMHg4MCwweDAzLDB4ZTAsMHgwMiwweGY4LDB4MDQsMHgzMiwweDAwLDB4MGQsMHg4MCwweDQzLDB4MjAsMHgwMiwweGNjLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI5MCwgMCwgezB4M2YsMHgwMCwweDBmLDB4YzAsMHgxMywweDkwLDB4MDIsMHhkYywweDQwLDB4M2YsMHgxMCwweDRjLDB4YzAsMHgyMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTJhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YTJiMCwgMCwgezB4MGIsMHhlOCwweDIwLDB4ZjgsMHgwMCwweDRlLDB4YzAsMHgyMywweGEwLDB4MDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJjMCwgMCwgezB4MmUsMHg4MCwweDFmLDB4YTAsMHgwMiwweDJhLDB4MDYsMHg4YSwweDAwLDB4MmUsMHhhMCwweDAyLDB4NjAsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YTJlMCwgMCwgezB4MGIsMHgzZCwweDAyLDB4YzAsMHgwMywweDIzLDB4MDAsMHgyMCwweGUwLDB4MDEsMHhiMCwweDA2LDB4NGMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJmMCwgMCwgezB4MmUsMHhjMCwweDRiLDB4MzAsMHgwMiwweDhlLDB4MDgsMHg4MywweDgwLDB4MmMsMHhjNCwweDAwLDB4MzQsMHg4ZSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTMwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDgwLDB4YjUsMHg4MCwweDYxLDB4YzAgfSB9LAoreyAgMTYsIDB4YTMxMCwgMCwgezB4MGIsMHg0MCwweDAyLDB4ZDQsMHgwMCwweDg0LDB4MDgsMHgyMywweGMyLDB4MDgsMHg1MCwweDAyLDB4NWUsMHhjMCwweDg0LDB4MDEgfSB9LAoreyAgMTYsIDB4YTMyMCwgMCwgezB4MmQsMHgwMCwweDhhLDB4MDgsMHgwMiwweDEwLDB4MjQsMHg4NCwweDA4LDB4NmQsMHgwMCwweDBhLDB4MDMsMHgxMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTMzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjUsMHg4MiwweDIxLDB4NjAgfSB9LAoreyAgMTYsIDB4YTM0MCwgMCwgezB4MGYsMHg3OCwweDAzLDB4ZDYsMHgwNCwweGFlLDB4ODAsMHgzMSwweGUwLDB4MGQsMHg1OCwweDIzLDB4N2UsMHgwMCwweGM2LDB4ODAgfSB9LAoreyAgMTYsIDB4YTM1MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMywweDhlLDB4MDAsMHhkNywweDgyLDB4M2QsMHhmMCwweDBjLDB4N2EsMHgwMywweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YTM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjEsMHgwMCwweGJhLDB4ZDggfSB9LAoreyAgMTYsIDB4YTM3MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTQsMHgxMiwweGY4LDB4MDAsMHhiZSwweDgwLDB4MGUsMHgxMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTM4MCwgMCwgezB4M2UsMHgwMCwweDVmLDB4ODAsMHgwMywweGUwLDB4MDgsMHhmOCwweDA0LDB4M2MsMHgwMCwweDBmLDB4ODAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YTM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDIwLDB4ZmYsMHg4MCwweDNmLDB4ZjAgfSB9LAoreyAgMTYsIDB4YTNhMCwgMCwgezB4MGYsMHhmOCwweDAzLDB4ZDIsMHgwMCwweGVmLDB4ODQsMHhiMywweDYxLDB4MGMsMHhiOSwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4YTNiMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZjgsMHgxMywweDIyLDB4MTEsMHhjZCwweDkwLDB4M2YsMHg2MCwweDBjLDB4ZTgsMHgwMywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTNjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ZjUsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YTNkMCwgMCwgezB4MGIsMHgwMCwweDAyLDB4ZDQsMHgwNCwweDg0LDB4MjAsMHgyMywweDQwLDB4MDgsMHg1YSwweDAyLDB4ZGMsMHgwMCwweGI0LDB4MDAgfSB9LAoreyAgMTYsIDB4YTNlMCwgMCwgezB4MjEsMHgwMCwweDI4LDB4YzIsMHgwMiwweDFlLDB4MDQsMHg4NiwweDA0LDB4MmQsMHg4OCwweDA4LDB4ZDAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg5YywweDAwLDB4YjUsMHgwMCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQwMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZjQsMHgyMCwweGE3LDB4MDQsMHgyMSwweGMwLDB4MGEsMHg1MCwweDAyLDB4ZGMsMHgwMCwweGJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQxMCwgMCwgezB4MjEsMHhjMCwweDA4LDB4NzAsMHgxMiwweDAwLDB4MDAsMHg4NSwweDAwLDB4MmQsMHg0MCwweDg4LDB4NjgsMHgwYSwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4YTQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjYywweDAwLDB4YTEsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YTQzMCwgMCwgezB4MWIsMHgwOCwweDA2LDB4YzQsMHgyMCwweDgwLDB4MDAsMHgyMCwweDk4LDB4MWEsMHgxMCwweDAyLDB4Y2MsMHgwMCwweGIxLDB4MDggfSB9LAoreyAgMTYsIDB4YTQ0MCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDBjLDB4MDEsMHg4MiwweGMwLDB4MmMsMHhhYywweDI4LDB4OTAsMHgyMiwweDE4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTQ1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4YjMsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQ2MCwgMCwgezB4MGYsMHhiYSwweDAzLDB4ZTUsMHgwMiwweGU5LDB4MDQsMHgzMiwweDkwLDB4YWUsMHhiMCwweDAzLDB4ZmMsMHgxMCwweGZiLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQ3MCwgMCwgezB4YjIsMHgwMCwweDBjLDB4ODAsMHgwYiwweDJjLDB4MDIsMHg4MiwweDE4LDB4M2YsMHhhMCwweDBjLDB4ZDAsMHgwMywweDJlLDB4MDQgfSB9LAoreyAgMTYsIDB4YTQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHhlYywweDA0LDB4ZmIsMHgwMSwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQ5MCwgMCwgezB4MGYsMHhiNiwweDQzLDB4ZTQsMHgwMCwweGY4LDB4MDAsMHgzZSwweDgwLDB4MDEsMHg5MCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4ODEgfSB9LAoreyAgMTYsIDB4YTRhMCwgMCwgezB4M2UsMHhkMCwweDBkLDB4YjQsMHg1MywweGUwLDB4MDAsMHhmOSwweDQwLDB4M2UsMHg0MCwweDBmLDB4YTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhkYywweDAyLDB4Y2QsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4YTRjMCwgMCwgezB4MmMsMHhkYSwweDAzLDB4ZmMsMHgwMCwweGVjLDB4MDAsMHgzMywweDQwLDB4MGYsMHhmMiwweDAzLDB4N2MsMHgwNCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRkMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4YzgsMHgwMywweDNjLDB4MDAsMHhjZSwweDAwLDB4MzEsMHg4MCwweDBjLDB4ZDEsMHgwMywweDI0LDB4MDQgfSB9LAoreyAgMTYsIDB4YTRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkxLDB4MDQsMHg2YywweDAwLDB4MDksMHgwMCwweDJhLDB4NjQgfSB9LAoreyAgMTYsIDB4YTRmMCwgMCwgezB4MDgsMHg4ZSwweDAyLDB4YzIsMHgxMCwweGEwLDB4MTAsMHgzZSwweDEwLDB4MGIsMHg5OCwweDAyLDB4ZWMsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTUwMCwgMCwgezB4MDIsMHhkOCwweDA4LDB4YmUsMHgyMiwweDIwLDB4MDAsMHg4OSwweDAwLDB4MjIsMHg1MCwweDA4LDB4YTAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YTUxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4MGIsMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTUyMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4ZTUsMHg0MiwweGFiLDB4MDQsMHgyMiwweDE4LDB4MGIsMHhiMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTUzMCwgMCwgezB4MjAsMHgwNCwweDA4LDB4MDEsMHgwMiwweDAwLDB4MDQsMHhhOCwweDQwLDB4MjIsMHgxMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDA4LDB4ODMsMHgwMCwweDI4LDB4NDAgfSB9LAoreyAgMTYsIDB4YTU1MCwgMCwgezB4MDgsMHgwNCwweDAyLDB4YzQsMHgwMiwweGE4LDB4MDAsMHgyYywweDAwLDB4MGIsMHgxMiwweDAyLDB4Y2MsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU2MCwgMCwgezB4MjAsMHhjMCwweDQwLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwLDB4YTgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDAyLDB4MTEgfSB9LAoreyAgMTYsIDB4YTU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGQsMHg2YywweDAwLDB4YzksMHgwMCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4YTU4MCwgMCwgezB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMiwweGViLDB4MDAsMHgzMiwweDQwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU5MCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4ODAsMHhjOCwweDAwLDB4MzAsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDMgfSB9LAoreyAgMTYsIDB4YTVhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YTViMCwgMCwgezB4MGYsMHhjMiwweDEzLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgzZiwweDAwLDB4NGYsMHhkNCwweDAzLDB4ZmMsMHgwMCwweGY1LDB4MDAgfSB9LAoreyAgMTYsIDB4YTVjMCwgMCwgezB4M2YsMHhjMCwweDhmLDB4ZjAsMHgwMywweGZjLDB4NDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDJmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YTVkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweDAwLDB4Y2MsMHgwMCwweDMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTVlMCwgMCwgezB4MGUsMHhkMCwweDBiLDB4MzMsMHgwMCwweGNjLDB4MDAsMHgzMywweGUwLDB4MGYsMHhjMCwweDgzLDB4N2MsMHgwMCwweGNmLDB4MjAgfSB9LAoreyAgMTYsIDB4YTVmMCwgMCwgezB4N2IsMHgwOSwweDhjLDB4ZjgsMHgwMywweGZlLDB4NTAsMHhjZiwweDM4LDB4M2YsMHhlMSwweDBkLDB4YzIsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTYwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMiwweDAwLDB4OTgsMHgwOCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4YTYxMCwgMCwgezB4MDgsMHg5OCwweDAyLDB4MjAsMHgwMCwweDg4LDB4ZDAsMHgyMiwweGUwLDB4MGUsMHhiNCwweDIyLDB4N2QsMHgxOSwweDlmLDB4NjkgfSB9LAoreyAgMTYsIDB4YTYyMCwgMCwgezB4MmUsMHg5MCwweDA4LDB4MzAsMHg5MiwweDI4LDB4ODEsMHhkYiwweDY0LDB4MmUsMHhlMSwweDg4LDB4MTYsMHhhMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTYzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDAwLDB4OTAsMHgyNCwweDIwLDB4MDEgfSB9LAoreyAgMTYsIDB4YTY0MCwgMCwgezB4MDgsMHgxMCwweDE2LDB4MDAsMHg4MiwweDgzLDB4MDEsMHgyOCwweGMxLDB4MGIsMHgwMiwweDgyLDB4MGMsMHhlMCwweGEzLDB4MTAgfSB9LAoreyAgMTYsIDB4YTY1MCwgMCwgezB4MjgsMHgwZSwweDFiLDB4OTIsMHgwMiwweDg0LDB4ODQsMHg5MywweDIwLDB4MmUsMHhjMCwweDA4LDB4MzEsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTY2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOCwweDEwLDB4OTgsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YTY3MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MDAsMHg2MCwweDhhLDB4MTAsMHgyYSwweGMwLDB4MGEsMHgyMCwweDAyLDB4NmMsMHgxOCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTY4MCwgMCwgezB4NmUsMHg2MCwweDJiLDB4OTAsMHgwMiwweDQ2LDB4MjAsMHg4YiwweDAwLDB4MmUsMHhjMiwweDA4LDB4YjEsMHg4MiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTY5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlNCwweDAyLDB4Y2IsMHgwMCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTZhMCwgMCwgezB4MmMsMHg5MiwweDAzLDB4MjcsMHgwMCwweDg4LDB4MDAsMHhiYSwweGMwLDB4MGYsMHg4OCwweDAzLDB4MmMsMHgwMCwweGViLDB4MDQgfSB9LAoreyAgMTYsIDB4YTZiMCwgMCwgezB4M2EsMHhhMCwweGNmLDB4MmMsMHhhMywweGVkLDB4MDAsMHg5YiwweDAwLDB4M2MsMHhmMCwweDJkLDB4OGMsMHgzMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTZjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDA0LDB4ZWYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTZkMCwgMCwgezB4MGQsMHg1MSwweDAzLDB4ZjAsMHgwMCwweGYxLDB4ODEsMHgzNywweGMwLDB4MGUsMHhmNCwweDAzLDB4OWMsMHgxMCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTZlMCwgMCwgezB4M2QsMHg4MCwweDBjLDB4ZWMsMHgwNywweGI4LDB4MDgsMHhmZiwweDAyLDB4MWYsMHhjNCwweDBmLDB4YzgsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTZmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg5ZSwweDAwLDB4YzMsMHgwMCwweDM4LDB4NDAgfSB9LAoreyAgMTYsIDB4YTcwMCwgMCwgezB4MGMsMHg5MiwweDAzLDB4YTQsMHg4MCwweGZiLDB4MjAsMHgzYSwweGMwLDB4MGQsMHg5NCwweDAzLDB4MmMsMHg0MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTcxMCwgMCwgezB4M2UsMHgwMSwweDBmLDB4ODAsMHgwMywweGU1LDB4MDAsMHhlYiwweDAwLDB4M2EsMHhjMCwweDBkLDB4ODQsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTcyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDA4LDB4OGIsMHgwMiwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YTczMCwgMCwgezB4MDgsMHg5MiwweDAzLDB4MjEsMHgwMCwweDhiLDB4NDgsMHgyMiwweGMwLDB4MGIsMHhiNywweDAyLDB4M2QsMHg0MCwweDNmLDB4MDEgfSB9LAoreyAgMTYsIDB4YTc0MCwgMCwgezB4MjIsMHg3NCwweDBiLDB4OTAsMHgwMiwweDI4LDB4MDQsMHhiZiwweDAwLDB4YjIsMHhjMCwweDBiLDB4ODUsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTc1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MCwweDAxLDB4ODAsMHgwMCwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTc2MCwgMCwgezB4MDgsMHgyYywweDEyLDB4ODgsMHg0MCwweGIwLDB4NDAsMHgwOCwweGMwLDB4MGIsMHgxOCwweDAyLDB4MGUsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTc3MCwgMCwgezB4MjgsMHgyMCwweDExLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjQsMHgwMCwweDA5LDB4MDAsMHgwNiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTc4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxMiwweDAwLDB4ODQsMHg4MCwweDIxLDB4YTAgfSB9LAoreyAgMTYsIDB4YTc5MCwgMCwgezB4MjgsMHg2OCwweDEyLDB4M2EsMHgwMCwweDg0LDB4ODAsMHgyNSwweGUwLDB4OGIsMHg1OCwweDAyLDB4MWUsMHg0MCwweGI3LDB4ODIgfSB9LAoreyAgMTYsIDB4YTdhMCwgMCwgezB4MjEsMHhhNiwweDBiLDB4NzgsMHgwMiwweDFhLDB4MDAsMHhiNywweDgwLDB4MjEsMHgyMCwweDBiLDB4NTgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTdiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4YzgsMHgyMSwweDM4LDB4MDkgfSB9LAoreyAgMTYsIDB4YTdjMCwgMCwgezB4MGMsMHgyOCwweDAzLDB4ODAsMHgwMSwweGYxLDB4MDAsMHgzOCwweGMwLDB4MGQsMHg4NSwweDAyLDB4MGMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTdkMCwgMCwgezB4MzgsMHg4NSwweDBmLDB4MTAsMHgwMywweDhjLDB4MDAsMHhlYiwweDEwLDB4M2MsMHhjOCwweDBkLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YTdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5OCwweDAwLDB4ZmMsMHgwMSwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YTdmMCwgMCwgezB4MGYsMHg2OCwweDAzLDB4ZDAsMHg0MCwweGZjLDB4MDAsMHgzYiwweGMwLDB4MGQsMHhjMCwweDAzLDB4ZmMsMHgyMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTgwMCwgMCwgezB4M2IsMHhjNSwweDBmLDB4ZjAsMHgwYiwweGI0LDB4NDAsMHhmZiwweDE4LDB4M2YsMHgwMCwweDBmLDB4ZjEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YTgxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZWIsMHgwMCwweGIwLDB4NDEgfSB9LAoreyAgMTYsIDB4YTgyMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTAsMHgwNCwweGNhLDB4MDQsMHhiMCwweGUwLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGNiLDB4MjAgfSB9LAoreyAgMTYsIDB4YTgzMCwgMCwgezB4MzIsMHg4MSwweDBjLDB4YTAsMHgwMywweGVlLDB4MDAsMHhkYiwweDAwLDB4M2UsMHgwMCwweDBlLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTg0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDA0LDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4YTg1MCwgMCwgezB4NDgsMHg2MCwweDAyLDB4ZjAsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZmMsMHhhMCwweDgzLDB4MjggfSB9LAoreyAgMTYsIDB4YTg2MCwgMCwgezB4YTMsMHg4MCwweDA4LDB4NjAsMHgwMiwweGRjLDB4MDAsMHg4NywweDIwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTg3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YywweDAyLDB4YTMsMHg4MCwweDIxLDB4NjAgfSB9LAoreyAgMTYsIDB4YTg4MCwgMCwgezB4MDgsMHg2OCwweDAyLDB4ZDIsMHgwMCwweDg3LDB4ODAsMHgyMSwweGUwLDB4MjksMHg3OCwweDAyLDB4ZGUsMHg4MCwweDg3LDB4OTAgfSB9LAoreyAgMTYsIDB4YTg5MCwgMCwgezB4MjEsMHhhMCwweDE5LDB4NDgsMHgwMiwweGZlLDB4MDAsMHg5NywweDgwLDB4MmQsMHhlMCwweDBhLDB4MzgsMHg4MiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YThhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAxLDB4ODMsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YThiMCwgMCwgezB4MDgsMHgyMCwweDQyLDB4YzAsMHgzMCwweDgzLDB4NzAsMHhhMCwweGMwLDB4ODksMHgzNCwweDAyLDB4Y2MsMHgwMiwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YThjMCwgMCwgezB4NjAsMHhjMCwweDI5LDB4MDAsMHgwMiwweGNlLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjOCwweDBiLDB4YmMsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YThkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOSwweDAwLDB4ZWEsMHhlMiwweDMyLDB4OTAgfSB9LAoreyAgMTYsIDB4YThlMCwgMCwgezB4MmMsMHhlMCwweDAzLDB4ZmIsMHgwMiwweGNlLDB4YzAsMHgzMiwweDgwLDB4MGYsMHhlNCwweDAzLDB4ZTgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YThmMCwgMCwgezB4MzMsMHg4OCwweDBkLDB4NjQsMHhjMywweGZhLDB4MDAsMHhkYSwweDAwLDB4M2QsMHg5MCwweDBlLDB4ZTAsMHgwYiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTkwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhjMCwweDI0LDB4ZjgsMHgwOCwweDNlLDB4MTIgfSB9LAoreyAgMTYsIDB4YTkxMCwgMCwgezB4MGYsMHhjMCwweDAzLDB4ZTAsMHg0OCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDkzLDB4YzAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTkyMCwgMCwgezB4N2UsMHgwMSwweDBlLDB4ODAsMHhjMiwweGUwLDB4NDAsMHhmOCwweDAwLDB4N2UsMHgwMCwweDhmLDB4ODQsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTkzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNSwweDAwLDB4YzEsMHgwMSwweDMyLDB4NDggfSB9LAoreyAgMTYsIDB4YTk0MCwgMCwgezB4MGMsMHg5OCwweDAzLDB4ZTYsMHg0MCwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjYsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTk1MCwgMCwgezB4MTgsMHg2MSwweDBjLDB4OTAsMHgwMywweDY0LDB4MjAsMHhmOSwweDA1LDB4M2UsMHg0MCwweDBjLDB4OTAsMHg4MywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTk2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NiwweDIwLDB4ODksMHgwMCwweDIwLDB4NTIgfSB9LAoreyAgMTYsIDB4YTk3MCwgMCwgezB4MjgsMHgxMCwweGMyLDB4MjYsMHgwMiwweGE5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDBhLDB4MjcsMHgwMCwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTk4MCwgMCwgezB4MjIsMHg3MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDgsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBhLDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTk5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAyLDB4OGQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4YTlhMCwgMCwgezB4MDgsMHhkMSwweDAyLDB4ODQsMHgyMCwweDg5LDB4MDAsMHgyMiwweDYwLDB4MGIsMHgxMSwweGYyLDB4MjQsMHhiMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4YTliMCwgMCwgezB4MmEsMHg0NiwweDA4LDB4OTAsMHg0MiwweDY0LDB4MDgsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTIsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTljMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgxNCwweDgwLDB4ODUsMHgyMCwweDIzLDB4NDggfSB9LAoreyAgMTYsIDB4YTlkMCwgMCwgezB4MDgsMHg1MiwweDAyLDB4ODQsMHgwOCwweDgxLDB4MDAsMHgyMCwweDQwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4YTllMCwgMCwgezB4MjgsMHg0OSwweDI4LDB4OTAsMHgwMiwweDA0LDB4MDAsMHgzMSwweDIwLDB4MmUsMHg0MCwweDA4LDB4MzIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHg1MCwweGIyLDB4MTQgfSB9LAoreyAgMTYsIDB4YWEwMCwgMCwgezB4MGMsMHhjMCwweDAzLDB4YTEsMHg0MCwweGM4LDB4MDAsMHhiMiwweDAwLDB4MDcsMHg4NSwweDAzLDB4MjEsMHg0MCwweGM4LDB4NTAgfSB9LAoreyAgMTYsIDB4YWExMCwgMCwgezB4M2EsMHgxNSwweDBjLDB4ODUsMHgwMywweDYxLDB4NDAsMHhmOCwweDUxLDB4M2UsMHgwMCwweDJjLDB4ODUsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YWEyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhjNCwweDQ4LDB4ZjksMHgxMCwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4YWEzMCwgMCwgezB4NGYsMHg5MSwweDAzLDB4NzQsMHgwMCwweGY1LDB4NDQsMHgzZSwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YWE0MCwgMCwgezB4MzcsMHg0NCwweDBmLDB4ZDAsMHgwMywweGQ0LDB4MDAsMHhmOSwweDEwLDB4M2YsMHhjMCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YWE1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNiwweGEwLDB4ZGQsMHg4YywweDMzLDB4NzggfSB9LAoreyAgMTYsIDB4YWE2MCwgMCwgezB4MGUsMHhkYSwweDAzLDB4MzUsMHgwMCwweGNkLDB4YTAsMHgzMywweDQwLDB4MGQsMHhmOCwweDBiLDB4MzYsMHg4MSwweGU5LDB4ODAgfSB9LAoreyAgMTYsIDB4YWE3MCwgMCwgezB4MzMsMHg3MCwweDBjLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweGMwLDB4M2UsMHhjMCwweDBmLDB4ZGMsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4YWE4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDA0LDB4YjgsMHg0MCwweDIwLDB4M2MgfSB9LAoreyAgMTYsIDB4YWE5MCwgMCwgezB4MGMsMHg4NSwweDAyLDB4MDIsMHg4NCwweDhhLDB4NDAsMHgyMiwweDAwLDB4MDgsMHg4ZiwweDgyLDB4MjMsMHgwMCwweGI4LDB4ZTggfSB9LAoreyAgMTYsIDB4YWFhMCwgMCwgezB4MjIsMHgyMCwweDA4LDB4ODgsMHgwMiwweGUyLDB4MDAsMHhiOCwweGQwLDB4MmUsMHgwMCwweDBiLDB4OGMsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YWFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4OTEsMHgwMCwweDYwLDB4NDggfSB9LAoreyAgMTYsIDB4YWFjMCwgMCwgezB4NGIsMHgxMCwweDAyLDB4MDQsMHg4YSwweDgxLDB4NDAsMHg2MCwweDQwLDB4NDksMHgxMCwweDAyLDB4OGQsMHhhMCwweGExLDB4NDEgfSB9LAoreyAgMTYsIDB4YWFkMCwgMCwgezB4MjAsMHg1MCwweDA5LDB4MTIsMHgyMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4MmMsMHg0MCwweDRiLDB4M2UsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWFlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDA4LDB4YjksMHgwNCwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4YWFmMCwgMCwgezB4NDgsMHhiMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHg4MiwweDQwLDB4MDgsMHg5MCwweGE2LDB4YTQsMHgwMCwweGI5LDB4MDQgfSB9LAoreyAgMTYsIDB4YWIwMCwgMCwgezB4MjIsMHg1NCwweDI5LDB4OTUsMHgwMiwweGU1LDB4NDAsMHhiOSwweDAwLDB4NmUsMHg0MCwweDBiLDB4OTIsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YWIxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4OTEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YWIyMCwgMCwgezB4MGYsMHg5MCwweDA5LDB4MjQsMHgwMCwweDg5LDB4OTAsMHgzMiwweDQwLDB4MGQsMHg5NCwweDAzLDB4YTQsMHgwMCwweGU5LDB4MDIgfSB9LAoreyAgMTYsIDB4YWIzMCwgMCwgezB4NzIsMHg2MCwweDBkLDB4OTQsMHgwMywweGU0LDB4MDEsMHhmOSwweDAxLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWI0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDQwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YWI1MCwgMCwgezB4NGYsMHg5MCwweDAzLDB4ZTcsMHgxMCwweGY5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHgxMCwweDEzLDB4NjQsMHgwMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI2MCwgMCwgezB4YmUsMHg0MCwweDBlLDB4OTAsMHgwMywweGU2LDB4MDgsMHhmOSwweDAxLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDggfSB9LAoreyAgMTYsIDB4YWI4MCwgMCwgezB4MGMsMHgwMSwweDBiLDB4MjAsMHg0MCwweGM4LDB4NDAsMHgzMiwweDAwLDB4MGUsMHg4NCwweDgzLDB4MjAsMHgwMCwweGY4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWI5MCwgMCwgezB4M2UsMHgwNCwweDBmLDB4ODAsMHgwMywweDIxLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODgsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWJhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOCwweDAwLDB4M2UsMHgwNCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4YWJiMCwgMCwgezB4MDgsMHhlYywweDEyLDB4MzksMHg0NCwweGE2LDB4MDAsMHgyOCwweDgxLDB4MDgsMHhlMCwweDAwLDB4MzgsMHgwOCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJjMCwgMCwgezB4M2YsMHg4MCwweDBiLDB4YTAsMHgwMiwweGE4LDB4MDAsMHg4YSwweDAyLDB4MmUsMHg4MCwweDBiLDB4ZTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0OCwweDAwLDB4MzEsMHgwMCwweDI0LDB4ZDAgfSB9LAoreyAgMTYsIDB4YWJlMCwgMCwgezB4MDgsMHgzZSwweDEyLDB4YWUsMHgwOCwweDgxLDB4YTAsMHgyYywweGMwLDB4MGEsMHgzOCwweDAwLDB4NGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJmMCwgMCwgezB4NmUsMHhjMCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4NmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWMwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxOCwweDAwLDB4YjUsMHgxMCwweDI1LDB4YzAgfSB9LAoreyAgMTYsIDB4YWMxMCwgMCwgezB4MjgsMHg2MCwweDEyLDB4OTAsMHgxMCwweGE1LDB4MDgsMHgyZCwweGMyLDB4MDgsMHg2NCwweDIyLDB4NTgsMHgxOCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4YWMyMCwgMCwgezB4MmQsMHg4MCwweDBiLDB4NzksMHgwMiwweGJlLDB4YzAsMHg4NywweDAxLDB4NmQsMHhjMCwweDBiLDB4NjAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWMzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjUsMHg4NCwweDM1LDB4MjAgfSB9LAoreyAgMTYsIDB4YWM0MCwgMCwgezB4OGMsMHgxOCwweDAyLDB4OTIsMHgxMCwweGM1LDB4ODAsMHgzZCwweDYwLDB4MGUsMHhjOCwweDBiLDB4NWEsMHgwOCwweDc3LDB4ZjMgfSB9LAoreyAgMTYsIDB4YWM1MCwgMCwgezB4M2QsMHhhMCwweDBmLDB4ZjgsMHgwMywweDFlLDB4YjAsMHhlNywweDg1LDB4M2QsMHhlMCwweDBmLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4YWM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjEsMHgwNCwweGJhLDB4MDEgfSB9LAoreyAgMTYsIDB4YWM3MCwgMCwgezB4MGYsMHhhMCwweDQzLDB4NjAsMHgwOSwweGUxLDB4MDAsMHgzOCwweDQwLDB4MGUsMHhhMCwweDAzLDB4YTgsMHgxNCwweGZiLDB4MjAgfSB9LAoreyAgMTYsIDB4YWM4MCwgMCwgezB4M2EsMHg4MCwweDBmLDB4YjQsMHgxYiwweDRjLDB4ODAsMHhmYiwweDI5LDB4M2UsMHhjMCwweDBmLDB4YjAsMHgyMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YWM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYSwweDAwLDB4Y2QsMHg4MCwweDNiLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWNhMCwgMCwgezB4NGUsMHhmOCwweDAzLDB4ZjIsMHgwMiwweGQ0LDB4ODEsMHgzYiwweGUwLDB4OGUsMHg5OCwweDA3LDB4M2UsMHg0NCwweGVmLDB4OTEgfSB9LAoreyAgMTYsIDB4YWNiMCwgMCwgezB4M2YsMHhlMCwweDRmLDB4ZmMsMHgwNywweGVlLDB4ZDAsMHhjZiwweDk4LDB4MzMsMHhlNCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWNjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDEsMHg5OCwweDAwLDB4ODUsMHgxMCwweDJkLDB4YzQgfSB9LAoreyAgMTYsIDB4YWNkMCwgMCwgezB4MGQsMHgxMSwweDAyLDB4ZjAsMHgwMCwweDg1LDB4MjAsMHgzMSwweGM0LDB4MGIsMHg3YiwweDAwLDB4MzgsMHg0MCwweGQ3LDB4MTAgfSB9LAoreyAgMTYsIDB4YWNlMCwgMCwgezB4MmQsMHg4MCwweDBiLDB4NzAsMHg2MiwweGZlLDB4ZTEsMHg4NywweDE0LDB4MzksMHhjMCwweDBiLDB4NjAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhiYywweDQwLDB4YTUsMHgwMCwweDI5LDB4NDAgfSB9LAoreyAgMTYsIDB4YWQwMCwgMCwgezB4MGIsMHg1MCwweDgyLDB4ZGMsMHg0MCwweDg0LDB4MDQsMHgyZCwweGMwLDB4MGIsMHgxMCwweDA2LDB4NTgsMHg0NCwweGE3LDB4MTAgfSB9LAoreyAgMTYsIDB4YWQxMCwgMCwgezB4MmQsMHg4MCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MDAsMHg4NywweDA0LDB4MjEsMHhjMiwweDBiLDB4NTAsMHgwMiwweGMwLDB4MTAgfSB9LAoreyAgMTYsIDB4YWQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDBhLDB4YTEsMHgwMSwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4YWQzMCwgMCwgezB4ODksMHgxOCwweDAyLDB4YzEsMHgwMCwweGExLDB4MDgsMHgyMCwweGMwLDB4MGIsMHgzNCwweDA2LDB4NDAsMHgwMCwweDkzLDB4MDUgfSB9LAoreyAgMTYsIDB4YWQ0MCwgMCwgezB4MmMsMHgxNCwweDBiLDB4M2MsMHg4NiwweGNlLDB4MTAsMHg4MywweDAxLDB4MjgsMHhmMSwweDBiLDB4MTQsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWQ1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4ZWQsMHgwMCwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4YWQ2MCwgMCwgezB4MDcsMHhiYywweDYzLDB4ZWQsMHgwMCwweDgxLDB4NDAsMHgzZSwweGMwLDB4MGUsMHg4OCwweDAzLDB4NjQsMHgwMCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWQ3MCwgMCwgezB4N2UsMHg1MCwweDBmLDB4ZjAsMHgwMiwweGZkLDB4NDIsMHhjZiwweDAwLDB4NzIsMHhjMCwweDFmLDB4YjQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlOCwweDAwLDB4OTksMHgwMCwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWQ5MCwgMCwgezB4NGYsMHhiNCwweDgzLDB4ZWQsMHg5MCwweDA5LDB4NDAsMHgzZSwweGMwLDB4MGYsMHhhMSwweDgzLDB4YTgsMHgwMSwweGViLDB4MDEgfSB9LAoreyAgMTYsIDB4YWRhMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4YjEsMHgxMywweGVjLDB4MGMsMHhmYiwweDAwLDB4M2EsMHhjMCwweDVmLDB4MjAsMHgyMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWRiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmOCwweDAwLDB4ZmQsMHgwNCwweDNmLDB4YjAgfSB9LAoreyAgMTYsIDB4YWRjMCwgMCwgezB4MGQsMHg2MCwweDAzLDB4M2UsMHgwMCwweGNkLDB4MDAsMHgzMywweGYwLDB4MGYsMHhmMiwweDAxLDB4ZjAsMHgwMCwweGZmLDB4MDMgfSB9LAoreyAgMTYsIDB4YWRkMCwgMCwgezB4M2YsMHgwMywweDBmLDB4ZjAsMHgwMSwweGZjLDB4MDAsMHhmYiwweDAyLDB4MzMsMHhjMiwweDBmLDB4ZjAsMHhlMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YWRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YSwweDAwLDB4YjksMHgwMiwweDJlLDB4YTAgfSB9LAoreyAgMTYsIDB4YWRmMCwgMCwgezB4NGEsMHhhYywweDAyLDB4MGUsMHg4MCwweGY5LDB4YzAsMHgzNiwweGUxLDB4MGIsMHhhMCwweDAyLDB4MmEsMHgwOCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWUwMCwgMCwgezB4MmUsMHgyMCwweDBlLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhlYiwweDAwLDB4MjIsMHhjMCwweDhiLDB4YjAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YWUxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyMywweDAwLDB4YTksMHgwMCwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4YWUyMCwgMCwgezB4MDksMHhiMiwweDIyLDB4NmMsMHg0MCwweDg5LDB4ODksMHgyYSwweGMwLDB4MGIsMHgxNCwweDA2LDB4MjYsMHgwMCwweGFiLDB4MDIgfSB9LAoreyAgMTYsIDB4YWUzMCwgMCwgezB4NmUsMHhlMCwweDA5LDB4YjAsMHgwNiwweDZjLDB4MDAsMHhiMywweDAyLDB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWU0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwOCwweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YWU1MCwgMCwgezB4MGEsMHgzMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHg2NCwweGMwLDB4MGIsMHgzMiwweDBhLDB4MDgsMHgwMCwweDMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWU2MCwgMCwgezB4NmMsMHg4MCwweDAyLDB4MzAsMHg0NiwweGNjLDB4MTgsMHhhMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MjgsMHgwMiwweDAyLDB4MTEgfSB9LAoreyAgMTYsIDB4YWU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg2OCwweDAwLDB4ZTksMHgwMCwweDM4LDB4YzEgfSB9LAoreyAgMTYsIDB4YWU4MCwgMCwgezB4MGQsMHhiMSwweDBiLDB4MmMsMHgwMCwweDg5LDB4MDAsMHgzYSwweGMwLDB4MGIsMHg5MCwweDAzLDB4NjAsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4YWU5MCwgMCwgezB4M2UsMHg4MCwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODAsMHhmZiwweDAwLDB4MzIsMHhjMCwweDhmLDB4ODAsMHgwYiwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YWVhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhkOCwweDAwLDB4ZmQsMHgwNCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YWViMCwgMCwgezB4MmYsMHhmMiwweDAzLDB4ZmMsMHgxMSwweGVmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDQzLDB4NzAsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWVjMCwgMCwgezB4M2YsMHgwMCwweDQ2LDB4ZjAsMHgwMywweGZkLDB4MDAsMHhlZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YWVkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDNkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWVlMCwgMCwgezB4MGMsMHhmOSwweDEzLDB4ZGUsMHgwMCwweDdmLDB4ODAsMHhiMywweGUwLDB4MGYsMHhmYywweDAzLDB4YmUsMHg0MCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YWVmMCwgMCwgezB4MzMsMHhmMCwweDBmLDB4ZjgsMHgwMywweDdjLDB4MDQsMHhjYywweDgwLDB4MzMsMHhhMCwweDBjLDB4ZjAsMHgwYiwweDMwLDB4MDEgfSB9LAoreyAgMTYsIDB4YWYwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMCwweDIwLDB4ODgsMHgwMCwweDJlLDB4MjAgfSB9LAoreyAgMTYsIDB4YWYxMCwgMCwgezB4MDgsMHg4MiwweDEyLDB4ZTAsMHg4MCwweGE4LDB4ODEsMHgyMiwweDAyLDB4MGIsMHg4MCwweDAyLDB4MjAsMHg4MCwweGE4LDB4ODAgfSB9LAoreyAgMTYsIDB4YWYyMCwgMCwgezB4MjIsMHgwOCwweDBiLDB4ODAsMHgwMiwweDJjLDB4MDIsMHg4OCwweDA0LDB4YWEsMHgyMCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWYzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlYywweDAwLDB4YTMsMHgwOCwweDJjLDB4ODAgfSB9LAoreyAgMTYsIDB4YWY0MCwgMCwgezB4MDgsMHgzMiwweDAyLDB4YzQsMHgyMCwweGEzLDB4MDAsMHgyOCwweDQwLDB4MGIsMHg5MiwweDAyLDB4ODQsMHgwMCwweGE5LDB4MDEgfSB9LAoreyAgMTYsIDB4YWY1MCwgMCwgezB4MjgsMHhjOCwweDFiLDB4MTIsMHg4MiwweGNjLDB4NDAsMHhhOCwweDAwLDB4MjQsMHhlMCwweDBhLDB4MzAsMHg0MiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhOCwweDgwLDB4YTgsMHgwMiwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YWY3MCwgMCwgezB4NjgsMHg4MCwweDEwLDB4YzgsMHgwMCwweGI4LDB4NDAsMHgyYSwweDkwLDB4MGIsMHhhMCwweDAwLDB4MjgsMHgwMCwweGFhLDB4MDggfSB9LAoreyAgMTYsIDB4YWY4MCwgMCwgezB4MmEsMHgwMiwweDAzLDB4MjAsMHgwMiwweDhjLDB4MDAsMHhhOCwweDg4LDB4MmUsMHgyMCwweDBhLDB4YjAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWY5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlOCwweDA0LDB4ZmEsMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4YWZhMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGViLDB4MDAsMHgzYSwweGMwLDB4MGYsMHgyMCwweDUzLDB4YTgsMHgwMCwweGUzLDB4NDAgfSB9LAoreyAgMTYsIDB4YWZiMCwgMCwgezB4MmEsMHg0MCwweDBmLDB4YTAsMHgwMywweDZjLDB4MDAsMHhhOCwweDgwLDB4MzQsMHgyMCwweDFlLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWZjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDAwLDB4OWQsMHg5MSwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YWZkMCwgMCwgezB4MGYsMHhkYSwweDIzLDB4ZjQsMHgwMCwweGNjLDB4MjAsMHgzNywweDAwLDB4MDcsMHhkMCwweDEzLDB4NzQsMHgwMCwweGJjLDB4MDAgfSB9LAoreyAgMTYsIDB4YWZlMCwgMCwgezB4YjcsMHg4MCwweDBiLDB4ZDAsMHg0MywweDdjLDB4MDAsMHhkYywweDA0LDB4M2IsMHgwMCwweDZkLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWZmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhOCwweDAwLDB4ZmEsMHg4MCwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjAwMCwgMCwgezB4MmMsMHhhMCwweDBiLDB4MjAsMHgwMiwweGNiLDB4NjIsMHgzZSwweDUwLDB4MGUsMHg4OCwweDAzLDB4MjAsMHgwMCwweGQ5LDB4MTAgfSB9LAoreyAgMTYsIDB4YjAxMCwgMCwgezB4M2UsMHg3MCwweDhjLDB4ODAsMHgzMywweGVjLDB4ODAsMHhkOCwweDQwLDB4M2EsMHgwMiwweDBkLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjAyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDEsMHgwYywweDAwLDB4MzksMHg4MCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YjAzMCwgMCwgezB4MGMsMHg5ZCwweDgyLDB4MmMsMHgxMCwweGQwLDB4NDAsMHgyZSwweGEwLDB4MDgsMHhiOCwweDAzLDB4NGUsMHgwMiwweDhhLDB4NDAgfSB9LAoreyAgMTYsIDB4YjA0MCwgMCwgezB4MGUsMHhhMCwweDBkLDB4YjAsMHgwMywweDNkLDB4MDAsMHhkMCwweDkwLDB4MzYsMHgxMCwweDBiLDB4ZjAsMHgwMiwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4YjA1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjEsMHgwMCwweDYwLDB4YzAgfSB9LAoreyAgMTYsIDB4YjA2MCwgMCwgezB4OGEsMHgxOCwweDAyLDB4OGMsMHgwOCwweDgwLDB4NDAsMHgwYywweGEwLDB4MDIsMHgzMCwweDAyLDB4Y2UsMHgwMCwweDgyLDB4NDggfSB9LAoreyAgMTYsIDB4YjA3MCwgMCwgezB4MmMsMHg4MCwweDJiLDB4MzAsMHgwNiwweDhjLDB4MDAsMHg4MSwweDAyLDB4MjAsMHg5MCwweDA5LDB4YjAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjA4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxMiwweDAwLDB4YjYsMHg5MCwweGEzLDB4MzAgfSB9LAoreyAgMTYsIDB4YjA5MCwgMCwgezB4MDgsMHhlOCwweDIyLDB4YjIsMHgxNCwweDg3LDB4ODAsMHgyZCwweDYwLDB4MDgsMHg0OSwweDEyLDB4MTIsMHg2MSwweDk1LDB4OTAgfSB9LAoreyAgMTYsIDB4YjBhMCwgMCwgezB4MmQsMHg2MSwweDBhLDB4NDgsMHgxNiwweDFlLDB4ODAsMHg5NSwweDgwLDB4MjUsMHgyMCwweDBiLDB4NzgsMHgwMiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjBiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjEsMHgwMCwweDI4LDB4OGMgfSB9LAoreyAgMTYsIDB4YjBjMCwgMCwgezB4OGUsMHgxMCwweDAzLDB4ODQsMHg4MCwweDgwLDB4MDAsMHgyYywweDAyLDB4MGEsMHg5YSwweDAyLDB4ZTQsMHgwMCwweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjBkMCwgMCwgezB4M2UsMHg4MCwweDBiLDB4OTEsMHgwMywweDhlLDB4ODAsMHhjMiwweDA4LDB4MzgsMHg4MCwweDBkLDB4YjAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YjBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiMCwweDAwLDB4ZjYsMHgwMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4YjBmMCwgMCwgezB4MGYsMHgyMSwweDEzLDB4NzgsMHgwMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGYsMHhlMCwweDAzLDB4NzgsMHgwMCwweGVmLDB4MDQgfSB9LAoreyAgMTYsIDB4YjEwMCwgMCwgezB4M2YsMHg0MCwweDhkLDB4ZTgsMHgwMywweGRjLDB4MDQsMHhmNiwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHg4MywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YjExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAwLDB4ZTgsMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjEyMCwgMCwgezB4MGYsMHg4OCwweDBiLDB4MjgsMHgwMCwweDc4LDB4MDIsMHgzZSwweDgwLDB4MGUsMHgyOCwweDAzLDB4MjgsMHgwMCwweGNhLDB4ODAgfSB9LAoreyAgMTYsIDB4YjEzMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4YTAsMHgwMywweGVjLDB4MDAsMHhjOSwweDgwLDB4MzIsMHg4MCwweDBmLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg4YywweDAwLDB4OGYsMHgwMCwweGExLDB4ODAgfSB9LAoreyAgMTYsIDB4YjE1MCwgMCwgezB4MGIsMHg3MCwweDQyLDB4MTQsMHgwMCwweGI3LDB4MDAsMHgyZCwweDQxLDB4MGIsMHg1MCwweDQyLDB4MTQsMHgwMCwweGE1LDB4MDAgfSB9LAoreyAgMTYsIDB4YjE2MCwgMCwgezB4YTEsMHhjMCwweDBiLDB4NTAsMHgwMiwweGZjLDB4ODAsMHhhNSwweDAwLDB4MjEsMHgwMCwweDBiLDB4ZjIsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHhiYSwweDAwLDB4YTQsMHg4MCwweDI5LDB4MzAgfSB9LAoreyAgMTYsIDB4YjE4MCwgMCwgezB4NGIsMHg0OCwweDA2LDB4NTIsMHgwOCwweGI0LDB4ODAsMHgyZCwweDIwLDB4MGIsMHg0OCwweDQyLDB4MzIsMHgwMCwweDg0LDB4ODAgfSB9LAoreyAgMTYsIDB4YjE5MCwgMCwgezB4MjEsMHgyMCwweDBiLDB4NDgsMHgxMiwweGRlLDB4NDAsMHg4NiwweDgxLDB4MjksMHhhMCwweDBiLDB4NzgsMHgwYSwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwNSwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjFiMCwgMCwgezB4MGIsMHgzNCwweDAyLDB4NmMsMHgxMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzNiwweDRhLDB4MGQsMHgwZCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjFjMCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzQsMHg4MiwweGNjLDB4MDIsMHhhMiwweDAwLDB4MjgsMHgwMCwweDBiLDB4MzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjFkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOSwweDIwLDB4ZWEsMHg0MCwweDMwLDB4YTAgfSB9LAoreyAgMTYsIDB4YjFlMCwgMCwgezB4MDcsMHhhMCwweDQzLDB4NjksMHg0MCwweGZhLDB4MDAsMHgzYywweDgwLDB4MGYsMHhhMCwweDAzLDB4MDgsMHg0MCwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjFmMCwgMCwgezB4MzAsMHhhMCwweDBmLDB4YTQsMHgwMywweGU4LDB4MDAsMHhjZSwweDAwLDB4M2IsMHg5OCwweDBmLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhkMiwweDAwLDB4ZmMsMHgwOCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjIxMCwgMCwgezB4MGIsMHhjMiwweDAzLDB4YjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4YjIyMCwgMCwgezB4M2YsMHgwNCwweDBmLDB4YzAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4YjYsMHgwMiwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YjIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NjggfSB9LAoreyAgMTYsIDB4YjI0MCwgMCwgezB4NGMsMHg5MSwweDAxLDB4ZTQsMHgwOCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MmMsMHg5MiwweDAzLDB4ZTQsMHgwMiwweGM5LDB4YTAgfSB9LAoreyAgMTYsIDB4YjI1MCwgMCwgezB4M2UsMHg3MCwweDBlLDB4OTAsMHgwMywweGM2LDB4NDIsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4NiwweDBlLDB4NjAgfSB9LAoreyAgMTYsIDB4YjI3MCwgMCwgezB4MDgsMHg5OCwweDAyLDB4ZTQsMHgwOCwweDg5LDB4MTAsMHgyZSwweDYwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MGMgfSB9LAoreyAgMTYsIDB4YjI4MCwgMCwgezB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMiwweGU2LDB4ODgsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjI5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OWQsMHgxMCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4YjJhMCwgMCwgezB4MjgsMHhkMCwweDA2LDB4ZjQsMHgwMiwweGFkLDB4MDAsMHgyZiwweDYwLDB4MDgsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDAgfSB9LAoreyAgMTYsIDB4YjJiMCwgMCwgezB4MmYsMHg0MCwweDBhLDB4ZDAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg2MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjJjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgzNCwweDAwLDB4ODUsMHgwMCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4YjJkMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4ZDQsMHgwMCwweGE1LDB4MDIsMHgyZCwweDQwLDB4MDgsMHg1MCwweDAwLDB4ZDQsMHgwMCwweDg1LDB4MDAgfSB9LAoreyAgMTYsIDB4YjJlMCwgMCwgezB4MmQsMHg0MCwweDA4LDB4NTQsMHgwMiwweGM0LDB4ODAsMHg4MSwweDAwLDB4MmMsMHg2MCwweDBiLDB4MTQsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MiwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjMwMCwgMCwgezB4MGMsMHgwNSwweDAzLDB4ZTEsMHg0MCwweGU4LDB4MDQsMHgzZSwweDE0LDB4MGMsMHg4NSwweDAzLDB4ZTEsMHg0MCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjMxMCwgMCwgezB4M2UsMHgxNCwweDBlLDB4YzAsMHgwMywweGUwLDB4MDAsMHhjMCwweDAyLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgyMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YjMyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDAwLDB4ZjksMHgwMSwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YjMzMCwgMCwgezB4NGYsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgxZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzQsMHgxMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YjM0MCwgMCwgezB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4ZTAsMHhmZCwweDI4LDB4M2YsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YjM1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YjM2MCwgMCwgezB4NGQsMHg1MCwweDAyLDB4ZTQsMHgwMCwweDk1LDB4MDQsMHgzMywweDQwLDB4MjgsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4YjM3MCwgMCwgezB4MzMsMHg0MCwweDBmLDB4OTEsMHgwMywweDM0LDB4MDAsMHhjZCwweDQwLDB4MzMsMHg0MCwweDBmLDB4OTgsMHg4MSwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjM4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDEwLDB4YjgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjM5MCwgMCwgezB4MGIsMHg4MCwweDAyLDB4ZTAsMHgxMCwweGI4LDB4MDAsMHgyMiwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjNhMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4ODgsMHgwMywweGMyLDB4ODAsMHg4OCwweDgwLDB4MjIsMHgwMCwweDBiLDB4OGMsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YjNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YjNjMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGJiLDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMSwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjNkMCwgMCwgezB4MjAsMHg0MCwweDFiLDB4OTAsMHgwMiwweDA0LDB4MjIsMHg4OSwweDAwLDB4MjAsMHg2MCwweDBiLDB4MTIsMHg4MiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDQ0LDB4YjksMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YjNmMCwgMCwgezB4NGIsMHg5MCwweDAyLDB4ZTQsMHgxMCwweGI5LDB4MDIsMHgwMiwweDQwLDB4MDgsMHg5MSwweDQyLDB4ZTQsMHgwMCwweGI5LDB4ODAgfSB9LAoreyAgMTYsIDB4YjQwMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTIsMHgwMiwweGM0LDB4MDAsMHg5OSwweDQwLDB4MjIsMHg0MCwweDRiLDB4OTAsMHgxMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YjQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDAwLDB4YjksMHgwMSwweDNlLDB4NTggfSB9LAoreyAgMTYsIDB4YjQyMCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGQxLDB4MDAsMHgzMiwweDYwLDB4MGMsMHg5OCwweDAyLDB4ZTYsMHg0MCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjQzMCwgMCwgezB4YjIsMHg0MCwweDBmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhjOSwweDgwLDB4MzIsMHg1MCwweDBmLDB4OTAsMHgyMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDIgfSB9LAoreyAgMTYsIDB4YjQ1MCwgMCwgezB4MGIsMHg5MCwweDAzLDB4ZTcsMHgwOCwweGY5LDB4MDAsMHhiZSwweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTgsMHgwMywweGE0LDB4MDAsMHhlOSwweGEwLDB4YmUsMHg0MCwweDBmLDB4MTAsMHgwYiwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ4MCwgMCwgezB4MGYsMHg4MCwweDhiLDB4MjAsMHgwMCwweGY4LDB4MjAsMHgzZSwweDAxLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4YjQ5MCwgMCwgezB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAsMHhkOCwweDQwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgxMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHg4MCwweDJmLDB4OTEgfSB9LAoreyAgMTYsIDB4YjRiMCwgMCwgezB4MGIsMHhlZSwweDAyLDB4MjgsMHgwMSwweGJlLDB4MDAsMHgyMCwweDgwLDB4MGIsMHhhMCwweDAyLDB4ZWEsMHg4MCwweGI2LDB4NDggfSB9LAoreyAgMTYsIDB4YjRjMCwgMCwgezB4MjIsMHg4MCwweDBkLDB4YTAsMHgwMiwweGZhLDB4MDIsMHg4NiwweDQxLDB4YTMsMHhhNiwweDBiLDB4YTAsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHg4MCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YjRlMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MGMsMHgxMCwweGIzLDB4MDAsMHgyOCwweGMwLDB4MGIsMHgzOCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRmMCwgMCwgezB4MjgsMHhjMCwweDA5LDB4MzAsMHgwMiwweGM2LDB4MDEsMHg4MywweDYwLDB4MjAsMHg3MCwweDBiLDB4MzAsMHgwYSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjUwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgyZSwweDg4LDB4ODUsMHgwOCwweDJkLDB4ODAgfSB9LAoreyAgMTYsIDB4YjUxMCwgMCwgezB4NGIsMHhmOCwweDA2LDB4MWMsMHg4MCwweGI3LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg1MCwweDAyLDB4ZDQsMHgwMCwweGI2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjUyMCwgMCwgezB4MjksMHg2MCwweDA5LDB4NzAsMHgwMiwweGQwLDB4YTAsMHg4ZCwweDAwLDB4MjEsMHg0MCwweDBiLDB4MzIsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjUzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZDUsMHg4MCwweDNkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjU0MCwgMCwgezB4OGYsMHg3OCwweDAzLDB4MWUsMHg4NCwweGI3LDB4ODIsMHgzZCwweDYwLDB4MGYsMHg1OSwweDAzLDB4ZGUsMHgwMCwweGY3LDB4ODAgfSB9LAoreyAgMTYsIDB4YjU1MCwgMCwgezB4MjksMHg2MCwweDE1LDB4NzgsMHgwMywweGRlLDB4MDAsMHhjNywweDgwLDB4MzEsMHg2MCwweDBmLDB4N2MsMHgwMywweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YjU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDQwLDB4ZTksMHgwMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4YjU3MCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZWQsMHgzMCwweGZiLDB4MDAsMHgzNiwweGMxLDB4MGYsMHg5NiwweDAzLDB4ZTQsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjU4MCwgMCwgezB4MzQsMHg0MCwweDBmLDB4YjcsMHg4MywweGVjLDB4NDAsMHgyMSwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YjU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg4MSwweDMzLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjVhMCwgMCwgezB4MGYsMHhmOSwweDAzLDB4ZGUsMHgyMCwweGNmLDB4ODEsMHgzZiwweGUwLDB4MDcsMHg3OCwweDAzLDB4M2UsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4YjViMCwgMCwgezB4M2YsMHhlMCwweDA0LDB4ZjgsMHgxMywweGZlLDB4MDIsMHhkZSwweDgwLDB4MzMsMHg2MCwweDBmLDB4ZjgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzQgfSB9LAoreyAgMTYsIDB4YjVkMCwgMCwgezB4MGIsMHg1YSwweDAyLDB4ZGMsMHg0OCwweDg2LDB4NTAsMHgyZCwweGMwLDB4MGIsMHgzMSwweDAyLDB4OTQsMHg2MCwweGI0LDB4MTggfSB9LAoreyAgMTYsIDB4YjVlMCwgMCwgezB4MmQsMHg0MCwweDQ4LDB4NzAsMHgwMiwweGU4LDB4MDAsMHhhNSwweDEwLDB4MjEsMHg0MCwweDBiLDB4NzEsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YmQsMHgwMCwweDIxLDB4NDIgfSB9LAoreyAgMTYsIDB4YjYwMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZmMsMHgwMiwweDg1LDB4MDAsMHgyNSwweDQwLDB4MGIsMHg1MCwweDAyLDB4OWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4YjYxMCwgMCwgezB4MmYsMHg0MCwweDI4LDB4NzEsMHgwMiwweGRjLDB4MDAsMHhhNiwweDAwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHg2ZCwweDgwLDB4YjEsMHgyMCwweGEwLDB4NTAgfSB9LAoreyAgMTYsIDB4YjYzMCwgMCwgezB4MGIsMHhiMiwweDA2LDB4Y2UsMHgwMCwweGEwLDB4MzQsMHgyZSwweGYwLDB4MGIsMHgxOCwweDAyLDB4ODUsMHgyMCwweGIzLDB4NGEgfSB9LAoreyAgMTYsIDB4YjY0MCwgMCwgezB4MmMsMHg1NCwweDg4LDB4MzgsMHgwMiwweGNjLDB4MTAsMHhhMSwweDAwLDB4MjAsMHhiMCwweDBiLDB4MzAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjY1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZSwweDgwLDB4ZjMsMHgwOCwweDEwLDB4NTQgfSB9LAoreyAgMTYsIDB4YjY2MCwgMCwgezB4MGIsMHg4OCwweDEzLDB4ZmYsMHgwMCwweGMwLDB4ODAsMHgzZSwweDY0LDB4MGYsMHhiNCwweDgzLDB4MDcsMHgwMCwweGY5LDB4YzAgfSB9LAoreyAgMTYsIDB4YjY3MCwgMCwgezB4M2UsMHhmMCwweDBjLDB4ZmMsMHgxMywweGY0LDB4MDAsMHhlYSwweDAwLDB4MzIsMHg3MCwweDBmLDB4ZjAsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4MTAgfSB9LAoreyAgMTYsIDB4YjY5MCwgMCwgezB4MDcsMHg5MSwweDAzLDB4ZWMsMHhjMCwweDU4LDB4MDAsMHgzZSwweDQ0LDB4MGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjZhMCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjMsMHgwMywweGUwLDB4MDAsMHhiYiwweDAwLDB4YmUsMHg0NCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAyLDB4Y2QsMHgwNCwweDMzLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjZjMCwgMCwgezB4MGMsMHhjMCwweDAzLDB4M2MsMHgwOCwweGZlLDB4MDAsMHgzMywweDYwLDB4MmMsMHhkMCwweDAyLDB4YjQsMHg4MCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZkMCwgMCwgezB4M2YsMHg1MiwweDA3LDB4ZjAsMHgxMywweGZjLDB4MDAsMHhjZSwweDEwLDB4MzMsMHg0MiwweDBjLDB4YjAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4YjZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDAwLDB4ODksMHgwMCwweDJhLDB4YjAgfSB9LAoreyAgMTYsIDB4YjZmMCwgMCwgezB4MDgsMHg4OCwweDAyLDB4MmMsMHgwMCwweGJhLDB4MDAsMHgzNiwweDQ0LDB4MDgsMHg5MCwweDAwLDB4MjYsMHgwMCwweGRiLDB4YzAgfSB9LAoreyAgMTYsIDB4YjcwMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHg4MywweGMwLDB4MjgsMHg0MCwweDBhLDB4YjAsMHgwMiwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjcxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDIyLDB4MDggfSB9LAoreyAgMTYsIDB4YjcyMCwgMCwgezB4MWEsMHhhMiwweDAyLDB4MmMsMHgxMCwweGI5LDB4MjAsMHgyMiwweDQwLDB4MDgsMHgzMCwweDAyLDB4MmMsMHgwNCwweGFhLDB4NTQgfSB9LAoreyAgMTYsIDB4YjczMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHgxMiwweGNjLDB4MDAsMHg4YiwweDA4LDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwNCwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc1MCwgMCwgezB4MGEsMHgwOCwweDgyLDB4MGMsMHgwMCwweGI4LDB4MDAsMHg2NCwweDQwLDB4MDgsMHgzMCwweDAyLDB4YTQsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc2MCwgMCwgezB4MmMsMHhjMCwweDhiLDB4MzAsMHgxMCwweGM4LDB4MDIsMHg4YiwweDAwLDB4MmEsMHg0MCwweDBhLDB4MzAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yjc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YzksMHgwMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc4MCwgMCwgezB4MWEsMHg4MiwweDAzLDB4M2MsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHhkMSwweDAzLDB4YWMsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc5MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4ZjAsMHgwMywweGVkLDB4MDAsMHhjMywweDAwLDB4MzIsMHhjMCwweDhjLDB4YjAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4YjdhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZjUsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjdiMCwgMCwgezB4MGQsMHg4MCwweDRiLDB4ZmMsMHgwMCwweDdjLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMiwweDBiLDB4NzQsMHgwMCwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjdjMCwgMCwgezB4MWQsMHg0MCwweDhmLDB4ZjAsMHgwMywweGZjLDB4YTAsMHhmZiwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YjdkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4ZGYsMHg4NCwweDNiLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjdlMCwgMCwgezB4MGYsMHhmOCwweDBiLDB4M2UsMHgwMCwweGVjLDB4ODAsMHgzMywweGUxLDB4MGMsMHgzMCwweDAzLDB4M2MsMHg4MCwweGNmLDB4NDggfSB9LAoreyAgMTYsIDB4YjdmMCwgMCwgezB4MzcsMHhjMCwweDBlLDB4NDAsMHgwMywweGUwLDB4YzAsMHhjNywweDkxLDB4YjMsMHgwNCwweDBjLDB4ZjAsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjgwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlZiwweDA0LDB4OGIsMHg4MCwweDIyLDB4NDEgfSB9LAoreyAgMTYsIDB4YjgxMCwgMCwgezB4MGIsMHhiMCwweDgyLDB4MmUsMHgwMCwweDg4LDB4ODAsMHhhMiwweGUwLDB4MGEsMHhhMiwweDkyLDB4YWQsMHg4MCwweDg3LDB4NDIgfSB9LAoreyAgMTYsIDB4YjgyMCwgMCwgezB4MjMsMHhkOCwweDhhLDB4YWQsMHgwMiwweGUwLDB4YzAsMHg4YiwweDAwLDB4MjAsMHg0YywweDQ4LDB4YTQsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjgzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDU4LDB4YmIsMHgwMCwweDI4LDB4ODAgfSB9LAoreyAgMTYsIDB4Yjg0MCwgMCwgezB4MGIsMHhiMiwweDQyLDB4MjQsMHgwMCwweGE4LDB4MDAsMHgyYSwweGMwLDB4MGEsMHgxMCwweDAyLDB4MDQsMHg2MCwweGEzLDB4MjAgfSB9LAoreyAgMTYsIDB4Yjg1MCwgMCwgezB4MjQsMHhkMiwweDA4LDB4MDAsMHg0MiwweDhjLDB4ODMsMHg5YiwweDAxLDB4MjAsMHg0OSwweDA4LDB4MzMsMHhjMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yjg2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDAwLDB4YWIsMHg4OCwweDIyLDB4YTAgfSB9LAoreyAgMTYsIDB4Yjg3MCwgMCwgezB4MGIsMHhiOCwweDAyLDB4MjYsMHgwYywweGE4LDB4MDAsMHgyYSwweGMwLDB4MGEsMHg5MiwweDAyLDB4YTQsMHgwMCwweGFiLDB4MDYgfSB9LAoreyAgMTYsIDB4Yjg4MCwgMCwgezB4MjIsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU4LDB4MDAsMHg5YiwweDAwLDB4MDIsMHg0MCwweDA4LDB4YTAsMHg0MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjg5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZDMsMHg4MCwweDNhLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjhhMCwgMCwgezB4MGYsMHgxOCwweDAxLDB4MDYsMHgwMCwweGU4LDB4MzAsMHgzOCwweDY2LDB4MGUsMHhiOCwweDAzLDB4MmEsMHg0MCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YjhiMCwgMCwgezB4MzYsMHhjMSwweDBlLDB4OTYsMHgwMywweGUyLDB4ODAsMHhkYSwweDA4LDB4MzIsMHg4MCwweDJjLDB4YmIsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjhjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg5YywweDAwLDB4ZGYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YjhkMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGRjLDB4ODAsMHgzNywweDYwLDB4MGYsMHhlOCwweDAzLDB4ZmEsMHgwMCwweGRmLDB4MDEgfSB9LAoreyAgMTYsIDB4YjhlMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4YzAsMHg0MywweGU2LDB4NGMsMHhlZiwweGEwLDB4M2YsMHg0NCwweDBmLDB4YTAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjhmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDQwLDB4ZGIsMHgwMCwweDM2LDB4ODAgfSB9LAoreyAgMTYsIDB4YjkwMCwgMCwgezB4MGMsMHg5OCwweDAzLDB4MjYsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGUsMHgxOCwweDAzLDB4ODQsMHgwMiwweGUzLDB4MDEgfSB9LAoreyAgMTYsIDB4YjkxMCwgMCwgezB4MzgsMHhjMSwweDBlLDB4YjQsMHgwMywweGFjLDB4ODAsMHhjYSwweDE4LDB4M2EsMHhkMCwweDJjLDB4MzAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjkyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzZiwweDQwLDB4YjksMHg4OCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YjkzMCwgMCwgezB4MDgsMHhiYywweDAyLDB4YTMsMHgwMCwweGIwLDB4MDAsMHgwZSwweGMwLDB4MDgsMHhiMCwweDA2LDB4MjAsMHgwMCwweDhmLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjk0MCwgMCwgezB4MjMsMHhjMSwweDA4LDB4YjksMHgxMiwweDJmLDB4MDAsMHg4MywweDgwLDB4MzYsMHg0MCwweDA4LDB4YWQsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjIsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4Yjk2MCwgMCwgezB4MDksMHgzMiwweDAyLDB4ODQsMHgwMCwweDMzLDB4MDAsMHgyYywweGIyLDB4MGEsMHgzNiwweDEyLDB4OGMsMHgwOCwweDkzLDB4MDUgfSB9LAoreyAgMTYsIDB4Yjk3MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MTgsMHgwMiwweGVkLDB4MDAsMHg5MSwweDgwLDB4NmEsMHgwMCwweDA4LDB4MTAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4Yjk5MCwgMCwgezB4MDksMHg3OCwweDAyLDB4OTcsMHg0MCwweGI0LDB4ODAsMHgyZiwweGEwLDB4MDgsMHhlOCwweDAyLDB4MGUsMHg0MCwweDk3LDB4ODIgfSB9LAoreyAgMTYsIDB4YjlhMCwgMCwgezB4MjEsMHhlMCwweDk4LDB4NjgsMHg4MiwweDFhLDB4MTgsMHg5ZCwweDkwLDB4MmQsMHhhMSwweDE4LDB4NTgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjliMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweGMwLDB4ZjMsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YjljMCwgMCwgezB4MGQsMHhiMCwweDQzLDB4ODQsMHg0MCwweGYwLDB4MDAsMHgzYywweDgyLDB4MGUsMHgzOCwweDEyLDB4OGMsMHg0NCwweGYzLDB4MzAgfSB9LAoreyAgMTYsIDB4YjlkMCwgMCwgezB4YmEsMHhjMSwweDFlLDB4MTAsMHg0NywweDhlLDB4MjIsMHhkMSwweDEwLDB4MzgsMHgxOCwweDBjLDB4MzAsMHg4MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YjllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDQwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YjlmMCwgMCwgezB4MGUsMHhlMCwweDAzLDB4ZjQsMHg0MCwweGZjLDB4MDAsMHgzZCwweGM0LDB4MGYsMHhkMCwweDAxLDB4ZjQsMHg0MSwweGVmLDB4MTggfSB9LAoreyAgMTYsIDB4YmEwMCwgMCwgezB4M2YsMHhjNCwweDFmLDB4ZjAsMHgwMywweGY4LDB4NDgsMHhlZiwweDE0LDB4MzMsMHg4MCwweDBmLDB4YzEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YmExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmYywweDQwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YmEyMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4MjQsMHgwMCwweGNiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAzLDB4YTgsMHgwMCwweGRiLDB4MjggfSB9LAoreyAgMTYsIDB4YmEzMCwgMCwgezB4M2UsMHhjNCwweDFmLDB4OTAsMHgyMywweGVjLDB4MDAsMHhjYSwweDAwLDB4MzIsMHhlMCwweDBjLDB4OTAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDgwLDB4YjcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YmE1MCwgMCwgezB4NGIsMHg1MCwweDUyLDB4MTQsMHgwMCwweGQ0LDB4MDEsMHgyZCwweDgwLDB4MGIsMHg2MCwweDAyLDB4ZDgsMHgwMCwweGE3LDB4MjAgfSB9LAoreyAgMTYsIDB4YmE2MCwgMCwgezB4MmQsMHhjNSwweDBiLDB4NDAsMHgxNiwweGRjLDB4MDAsMHg4NCwweDAwLDB4MjMsMHhjMCwweDA4LDB4NDAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4YmE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDgwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmE4MCwgMCwgezB4MGIsMHg3OCwweDBhLDB4OTYsMHgwMCwweDk0LDB4ODAsMHgyZCwweDYwLDB4MWIsMHg3OCwweDA2LDB4ZDIsMHgwMCwweGE3LDB4ODAgfSB9LAoreyAgMTYsIDB4YmE5MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4NzgsMHgyMiwweGRlLDB4MDAsMHg4NywweDgyLDB4MjEsMHhlMCwweDA4LDB4NTgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHhlNCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YmFiMCwgMCwgezB4MWIsMHgyMSwweDAyLDB4ODEsMHgwMCwweDkwLDB4MDAsMHgyYywweGM4LDB4MGIsMHgzOSwweDAyLDB4Y2UsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmFjMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNkLDB4MDAsMHg4YiwweDIwLDB4MjAsMHhmMCwweDA4LDB4YjIsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4YmFkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHhhMCwweDNmLDB4ODIgfSB9LAoreyAgMTYsIDB4YmFlMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4OTgsMHgzMCwweGQ2LDB4MDAsMHgzZiwweGEwLDB4MGYsMHhlMCwweDAzLDB4YmEsMHhjMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmFmMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4ZWMsMHgzMywweGY4LDB4MDIsMHhjZSwweDAwLDB4YjMsMHhiOCwweDJjLDB4ZWMsMHg4MywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDE4LDB4ZjgsMHg0MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YmIxMCwgMCwgezB4MGYsMHg4MCwweDAyLDB4NjAsMHg4NCwweGY4LDB4MDUsMHgyZSwweDA0LDB4OGYsMHg4MCwweDQxLDB4ZTAsMHgwMCwweDc4LDB4MDIgfSB9LAoreyAgMTYsIDB4YmIyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODEsMHg4MywweGUwLDB4MjAsMHhmOCwweDAwLDB4YmUsMHgwMiwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNiwweDE4LDB4ZjksMHgyMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YmI0MCwgMCwgezB4MGYsMHg5YywweDAzLDB4ZTQsMHg0MCwweGM5LDB4MDAsMHgzMiwweDYxLDB4MGMsMHg5MCwweDEzLDB4YzQsMHgwOCwweGM5LDB4MDEgfSB9LAoreyAgMTYsIDB4YmI1MCwgMCwgezB4M2UsMHg0MSwweDBmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhjOSwweGEwLDB4MzIsMHg0MCwweDBmLDB4OTgsMHg0MywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YmI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NSwweDAwLDB4YjEsMHhjMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YmI3MCwgMCwgezB4MGIsMHg5YywweDAyLDB4ZTcsMHgxMCwweDg5LDB4MDAsMHgyOCwweDQ0LDB4MDgsMHg5NCwweDIyLDB4ZTQsMHgxMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmI4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OWYsMHgyMiwweDI2LDB4NjAsMHg4OSwweDgwLDB4MjIsMHg0MCwweDBiLDB4OTEsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmI5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDgwLDB4YjksMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YmJhMCwgMCwgezB4NGIsMHhiNCwweDAyLDB4ZTQsMHgyMCwweDg5LDB4MjAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4ZWMsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmJiMCwgMCwgezB4MmUsMHg0MSwweDBiLDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4OSwweDQwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YmJjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgwNCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YmJkMCwgMCwgezB4OGIsMHgxMCwweDAyLDB4ZTQsMHgwNSwweDgxLDB4MDAsMHgyOCwweDQwLDB4MjgsMHgxMiwweDEyLDB4YzQsMHg4MiwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4YmJlMCwgMCwgezB4MmMsMHg0OCwweDBiLDB4MTIsMHgwYSwweDA0LDB4ODIsMHg4MSwweDAwLDB4MjAsMHg0OCwweDBiLDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OCwweGEwLDB4ZmEsMHgwMiwweDNlLDB4MTQgfSB9LAoreyAgMTYsIDB4YmMwMCwgMCwgezB4MGYsMHg4NSwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4NSwweDAzLDB4YzEsMHg0MCwweGM4LDB4NTMgfSB9LAoreyAgMTYsIDB4YmMxMCwgMCwgezB4M2UsMHgxNCwweDBmLDB4ODAsMHgwMywweDAxLDB4NDgsMHhjMCwweDUwLDB4YjIsMHgxNCwweDBmLDB4ODUsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YmMyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDAwLDB4ZmQsMHgwMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4YmMzMCwgMCwgezB4MGYsMHg1MCwweDEzLDB4ZDQsMHgwMiwweGZkLDB4MDAsMHgyZiwweGMwLDB4MGYsMHhkMSwweDAzLDB4ZjQsMHg0MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YmM0MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGY0LDB4NDAsMHhmZiwweDAwLDB4YmYsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YmM1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweGEwLDB4ZmQsMHgwMSwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4YmM2MCwgMCwgezB4MGYsMHhkMSwweDAzLDB4ZDQsMHgwMCwweGM1LDB4MDAsMHgzMywweDQxLDB4MGYsMHhkYiwweDAzLDB4MjcsMHgyMCwweGQ5LDB4ZTAgfSB9LAoreyAgMTYsIDB4YmM3MCwgMCwgezB4YjIsMHg3MCwweDBkLDB4ZGEsMHg4MywweGY2LDB4NDAsMHhjZiwweDEwLDB4MzIsMHg3OCwweDJkLDB4ZGEsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YmM4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHgwMCwweDJlLDB4MjggfSB9LAoreyAgMTYsIDB4YmM5MCwgMCwgezB4MGIsMHg4OCwweDQyLDB4ZTAsMHgxMCwweGQ4LDB4MDAsMHgyMiwweDAwLDB4MGIsMHg4YywweDBhLDB4MjMsMHgwMCwweDg4LDB4YzAgfSB9LAoreyAgMTYsIDB4YmNhMCwgMCwgezB4MjIsMHgyOCwweDA4LDB4ODQsMHgwMiwweGMyLDB4ODAsMHg4MCwweGEwLDB4MjIsMHgzMCwweDQ4LDB4YWEsMHg4MiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YmNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4YmNjMCwgMCwgezB4OGIsMHgxMiwweDAyLDB4YzQsMHgwMCwweDk5LDB4MDIsMHgyOCwweDQwLDB4OGIsMHgxNiwweDAyLDB4ODQsMHg4MSwweDkxLDB4MzAgfSB9LAoreyAgMTYsIDB4YmNkMCwgMCwgezB4MjAsMHg1OCwweDA5LDB4MTAsMHgwMiwweGM1LDB4MDAsMHg4MSwweDAwLDB4NjQsMHg0ZCwweDA4LDB4MzQsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhYywweDBjLDB4YjksMHgwNCwweDJlLDB4NDggfSB9LAoreyAgMTYsIDB4YmNmMCwgMCwgezB4MGIsMHg5NCwweDA2LDB4ZTQsMHgwMCwweDk5LDB4NDAsMHhhYSwweDQwLDB4MGIsMHg5MiwweDIyLDB4YTQsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmQwMCwgMCwgezB4NjAsMHg0MCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHg4OSwweDgwLDB4YTYsMHg1MCwweDA4LDB4OTIsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YmQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg5OCwweDNlLDB4NDggfSB9LAoreyAgMTYsIDB4YmQyMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4ZTUsMHgyMCwweGQ5LDB4MDAsMHgzYSwweDY0LDB4MGYsMHg5NCwweDgzLDB4YTQsMHhjMCwweGQ5LDB4MDIgfSB9LAoreyAgMTYsIDB4YmQzMCwgMCwgezB4NzIsMHg0MCwweDRkLDB4OTAsMHg0MiwweGU0LDB4ODIsMHhjOSwweDQwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhYywweDI4LDB4ZjksMHg4OCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YmQ1MCwgMCwgezB4MGYsMHg5OSwweDEzLDB4ZTcsMHgwMCwweGY5LDB4YzAsMHgzNiwweDYwLDB4MGYsMHg5MCwweDAzLDB4NjYsMHgwMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ2MCwgMCwgezB4N2UsMHg0MCwweDBmLDB4OTksMHgwNywweGU0LDB4NjAsMHhmOSwweDAwLDB4MzgsMHg0MCwweDBmLDB4OTgsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgxMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ4MCwgMCwgezB4MGYsMHg4MiwweDBiLDB4MjEsMHgwMCwweGU4LDB4MDAsMHgzNiwweDA0LDB4MGMsMHg4NiwweDAzLDB4ZTEsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ5MCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDYxLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4MDAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDIwLDB4YmUsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YmRiMCwgMCwgezB4MjgsMHhlYywweDAyLDB4MTksMHgwNCwweDgyLDB4MDAsMHgwMywweDgwLDB4MGQsMHhlNCwweDgyLDB4ZTgsMHgwMCwweDhhLDB4MDEgfSB9LAoreyAgMTYsIDB4YmRjMCwgMCwgezB4YWEsMHg4MCwweDhiLDB4ZWQsMHg4MiwweDNiLDB4ODAsMHg4ZSwweDkwLDB4MzYsMHg4MCwweDBiLDB4ZTAsMHgwMywweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmRkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MiwweDAwLDB4YjMsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmRlMCwgMCwgezB4NmIsMHgzNCwweDE2LDB4NDAsMHhjMCwweDgzLDB4MTAsMHgyNCwweDcyLDB4ODgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmRmMCwgMCwgezB4MjQsMHhjMCwweDBiLDB4MDQsMHgwMiwweDZmLDB4MDksMHg5YiwweDAwLDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmUwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNCwweDAwLDB4YjcsMHg4MCwweDIzLDB4ZTQgfSB9LAoreyAgMTYsIDB4YmUxMCwgMCwgezB4MjgsMHg3OCwweDgyLDB4NzQsMHgxNCwweDhmLDB4MDAsMHg2MSwweGUwLDB4MDksMHg1MCwweDEyLDB4ZGMsMHgwNCwweDg3LDB4MjIgfSB9LAoreyAgMTYsIDB4YmUyMCwgMCwgezB4MjUsMHhjOCwweDFiLDB4NzgsMHgwMiwweDE0LDB4MDAsMHg5NCwweDQwLDB4YTUsMHhjMCwweDBiLDB4NjAsMHgyMiwweDY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YmUzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDIwLDB4YjcsMHg4MCwweGIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmU0MCwgMCwgezB4OGYsMHhmOCwweDAzLDB4MTIsMHgwMiwweGU3LDB4ODAsMHgzNSwweGUwLDB4MGMsMHg2OCwweDA2LDB4Y2YsMHhjMiwweGNmLDB4YjAgfSB9LAoreyAgMTYsIDB4YmU1MCwgMCwgezB4MjUsMHhmNCwweDBmLDB4NTgsMHgwMywweDVhLDB4MDIsMHhkNSwweDgwLDB4NzUsMHhmYSwweDRmLDB4ZjgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4YmU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhNSwweDkwLDB4ZjMsMHgwMCwweDNkLDB4YzAgfSB9LAoreyAgMTYsIDB4YmU3MCwgMCwgezB4NGYsMHhiMCwweDEzLDB4YTgsMHgwNCwweGZiLDB4MDAsMHgzYywweGMwLDB4MGYsMHg4MCwweDQzLDB4ZWMsMHg4MCwweGViLDB4NjAgfSB9LAoreyAgMTYsIDB4YmU4MCwgMCwgezB4M2EsMHhjOSwweDBmLDB4MzAsMHgwMywweGVjLDB4MDAsMHhlOSwweDAwLDB4M2UsMHhjOCwweDBmLDB4YTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YmU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4ZWUsMHg4MCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmVhMCwgMCwgezB4MGQsMHg4OSwweDAzLDB4ZDIsMHg0MCwweGU1LDB4ODEsMHgzOSwweGUwLDB4M2MsMHhmOSwweDA3LDB4ZmUsMHgwMCwweGNmLDB4ODggfSB9LAoreyAgMTYsIDB4YmViMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4ZTgsMHgwMywweGYyLDB4MDgsMHhjZSwweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5NCwweDQ0LDB4YzYsMHgwMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4YmVkMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4ZDAsMHhjNCwweDg1LDB4MjQsMHgyMSwweDkwLDB4MDgsMHg1NCwweDEyLDB4ZGMsMHg4MiwweDA3LDB4MDAgfSB9LAoreyAgMTYsIDB4YmVlMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHgwNiwweGQ0LDB4MDAsMHg4ZSwweDQ4LDB4MjEsMHhjMCwweDBhLDB4NjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTcsMHg0MCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YmYwMCwgMCwgezB4MDgsMHg0MiwweDAyLDB4ZDAsMHgwMCwweGFkLDB4MDAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDIyLDB4ZGMsMHgyOCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4YmYxMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDk4LDB4MDAsMHg5NywweDAwLDB4YTAsMHhjNCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDA4LDB4OTMsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmYzMCwgMCwgezB4MDgsMHgzYywweDIyLDB4YzEsMHgwMCwweDgxLDB4MDAsMHgyMCwweDgwLDB4ODgsMHgxNSwweDAyLDB4Y2UsMHgzMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmY0MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4M2MsMHgwMiwweGNjLDB4MDQsMHg5MywweGMwLDB4MjAsMHhmNCwweDRhLDB4MGMsMHg4MiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmY1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4ZTMsMHhjMCwweDFmLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmY2MCwgMCwgezB4NmMsMHgxMCwweDgzLDB4ZTAsMHgwNCwweGViLDB4MDAsMHgzYSwweDUyLDB4NGMsMHhiNCwweDAzLDB4ZmUsMHgwMiwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YmY3MCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ODQsMHg0MywweGUxLDB4MDIsMHhkOCwweGMyLDB4MzMsMHhjMCwweDBjLDB4ODQsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlOSwweDAwLDB4ZWIsMHgxMCwweDNlLDB4YzQgfSB9LAoreyAgMTYsIDB4YmY5MCwgMCwgezB4MGUsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGZiLDB4MTgsMHgzZSwweGMyLDB4MGYsMHhiNiwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDEgfSB9LAoreyAgMTYsIDB4YmZhMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4MzUsMHgwMywweGM0LDB4MjgsMHhlYSwweDQyLDB4M2UsMHhjMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDQwLDB4ZmYsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YmZjMCwgMCwgezB4MGMsMHhjMCwweGEzLDB4MzAsMHgyOCwweGNkLDB4YTAsMHgzMywweGMwLDB4MGMsMHhlOCwweDAzLDB4MGMsMHgwMCwweGVmLDB4MDUgfSB9LAoreyAgMTYsIDB4YmZkMCwgMCwgezB4M2QsMHhjMCwweDBjLDB4Y2EsMHg4MywweDNjLDB4MDAsMHhjZCwweDA4LDB4M2YsMHhjMiwweDBjLDB4YTAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4YmZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2NywweDAwLDB4YmIsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmZmMCwgMCwgezB4MDgsMHhhYSwweDAyLDB4MDgsMHgwMCwweGExLDB4MDEsMHgzNCwweGQxLDB4MDgsMHhhNCwweDEyLDB4MmMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzAwMCwgMCwgezB4NmUsMHhjMCwweDg4LDB4YjIsMHgwMiwweDJjLDB4MDgsMHg4OSwweDgwLDB4MmUsMHhjMCwweDBhLDB4YTgsMHgwMywweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzAxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmEsMHg4MCwweGEyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzAyMCwgMCwgezB4MDgsMHhhOCwweDBhLDB4YTAsMHgwMCwweDhiLDB4MDAsMHhhMiwweGMwLDB4NDgsMHgxMSwweDAyLDB4YWMsMHgwNCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzAzMCwgMCwgezB4MmUsMHhjMCwweDAwLDB4ODAsMHgxMiwweDJhLDB4MDgsMHg4YiwweDE0LDB4MmMsMHhjMCwweDA4LDB4ODgsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YjIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzA1MCwgMCwgezB4MDgsMHhiMiwweDEyLDB4ODAsMHgwMCwweGFiLDB4MDEsMHgyNCwweGMwLDB4MDgsMHgwMCwweDAyLDB4MGMsMHgwNCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA2MCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweDA3LDB4MDAsMHg4MiwweDAwLDB4MjQsMHhjMCwweDA4LDB4MDgsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZmIsMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzA4MCwgMCwgezB4MGMsMHhhMiwweDAzLDB4YTAsMHgwMCwweGM5LDB4MDAsMHgzMiwweGMwLDB4MjQsMHg5NCwweDAzLDB4M2MsMHgwMiwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA5MCwgMCwgezB4MmYsMHhjMCwweDA0LDB4ODAsMHgwYiwweDA5LDB4MDIsMHhjYiwweDAxLDB4M2YsMHhjMCwweDJjLDB4YTAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4YzBhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhkYywweDAwLDB4ZmQsMHgwMiwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YzBiMCwgMCwgezB4NGYsMHhlNCwweDEzLDB4NzAsMHgwMCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMiwweDgzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzBjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4YzBkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDIwLDB4ZWYsMHgzMCwweDNmLDB4MDQgfSB9LAoreyAgMTYsIDB4YzBlMCwgMCwgezB4NmMsMHg4OCwweDAzLDB4M2EsMHg0MiwweGU0LDB4OTEsMHgzZiwweDBkLDB4MGQsMHg0OCwweDAzLDB4M2MsMHhjMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4YzBmMCwgMCwgezB4MzMsMHg0NCwweDBjLDB4ZjQsMHgwMywweGZjLDB4ODIsMHhkZiwweDMwLDB4MzMsMHg2MCwweDBkLDB4ZjEsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzEwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhlZCwweDAwLDB4OGIsMHg3MCwweDJlLDB4MTggfSB9LAoreyAgMTYsIDB4YzExMCwgMCwgezB4ODgsMHgyMiwweDRhLDB4MmMsMHg4MiwweGVhLDB4MjYsMHgyZSwweDBjLDB4MGIsMHhiOCwweDQyLDB4M2QsMHg4MCwweGJmLDB4OTAgfSB9LAoreyAgMTYsIDB4YzEyMCwgMCwgezB4MmEsMHg1NCwweDI4LDB4YjQsMHgwMiwweGNkLDB4MDAsMHhkYiwweDQwLDB4MmEsMHg0YSwweDQ4LDB4MzAsMHgwMiwweGEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzEzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweGIwLDB4YTMsMHgwMCwweDZjLDB4MTAgfSB9LAoreyAgMTYsIDB4YzE0MCwgMCwgezB4MDksMHgwMCwweDgyLDB4MjAsMHg4MiwweGEwLDB4MjAsMHgyYywweDg4LDB4NGIsMHg4MCwweDAwLDB4MGMsMHg0MCwweGIzLDB4MDEgfSB9LAoreyAgMTYsIDB4YzE1MCwgMCwgezB4MjAsMHg0OCwweDBiLDB4MzYsMHgwMiwweDhjLDB4ZTAsMHg4MywweDY0LDB4MjQsMHg0MCwweDI4LDB4MzIsMHgwMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzE2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MTEsMHhhYywweDAwLDB4OGIsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzE3MCwgMCwgezB4MDksMHg4MCwweDgwLDB4YTYsMHgwMCwweGJhLDB4MTEsMHgyZSwweDg4LDB4MGIsMHhiMCwweDAwLDB4MmMsMHgwMCwweGJiLDB4MDIgfSB9LAoreyAgMTYsIDB4YzE4MCwgMCwgezB4MDIsMHg0MCwweDA5LDB4YjAsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAwLDB4MmMsMHhjOCwweDA4LDB4YjgsMHg4MiwweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4OTIgfSB9LAoreyAgMTYsIDB4YzFhMCwgMCwgezB4MGQsMHg4MCwweDAzLDB4MGEsMHgyMCwweGU5LDB4MDAsMHgzZSwweDUwLDB4NDUsMHg4MCwweDAxLDB4MmMsMHgwNCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFiMCwgMCwgezB4OTAsMHg2MCwweDA5LDB4YjAsMHgwMywweGVjLDB4MDAsMHg4YiwweDAyLDB4MjYsMHg1MCwweDhkLDB4YmMsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzFjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMiwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzFkMCwgMCwgezB4MGUsMHhmOSwweDAyLDB4N2MsMHgyMiwweGFmLDB4MDAsMHgzZiwweDYwLDB4MDMsMHhjMCwweDBiLDB4ZmMsMHgxMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFlMCwgMCwgezB4M2YsMHg0YSwweDRlLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNywweDAwLDB4MmIsMHg2MCwweDBmLDB4NzAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzFmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzIwMCwgMCwgezB4MGYsMHg4MiwweDBiLDB4YTksMHgwMCwweGM5LDB4MDAsMHgzMiwweGQyLDB4MGYsMHhhMCwweDgzLDB4YWMsMHgwMCwweGNiLDB4MTAgfSB9LAoreyAgMTYsIDB4YzIxMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhkYiwweDAwLDB4MzIsMHg1MCwweDJjLDB4OTUsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzIyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzYywweDA0LDB4YmYsMHgwMiwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YzIzMCwgMCwgezB4MGIsMHg5OCwweDAwLDB4MjksMHgwMCwweGNiLDB4NDAsMHgyMiwweGMwLDB4MGIsMHgyNCwweDAyLDB4M2MsMHgwOCwweDhmLDB4NTAgfSB9LAoreyAgMTYsIDB4YzI0MCwgMCwgezB4MmUsMHg1MCwweDBkLDB4ZjAsMHgwMiwweGZkLDB4NDIsMHg4ZiwweDU4LDB4MjIsMHhlMCwweDQ4LDB4YjUsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzI1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4YzI2MCwgMCwgezB4NGIsMHg5NCwweDAwLDB4NDksMHgwMCwweDkwLDB4ODAsMHgwNCwweDMwLDB4MDksMHgwMCwweDBlLDB4NGMsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4YzI3MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzAsMHgyMiwweDZlLDB4NDIsMHg4MywweDgwLDB4MjAsMHg0OCwweDA4LDB4MzgsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzI4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDY1LDB4MjAgfSB9LAoreyAgMTYsIDB4YzI5MCwgMCwgezB4MGIsMHg3OCwweDgyLDB4N2EsMHgwOCwweDhjLDB4YzAsMHgyNSwweGEzLDB4NGIsMHg3OCwweDAyLDB4NWUsMHgwNCwweDg3LDB4ODQgfSB9LAoreyAgMTYsIDB4YzJhMCwgMCwgezB4MmQsMHg2MSwweDg5LDB4NzgsMHgwMiwweGRlLDB4MDQsMHg4NywweDgwLDB4ZTksMHg2MiwweDA4LDB4NzgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzJiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZmIsMHgwMCwweDM0LDB4NDggfSB9LAoreyAgMTYsIDB4YzJjMCwgMCwgezB4MGYsMHgzYiwweDAzLDB4NDgsMHgwMCwweDkzLDB4NDgsMHgzNCwweDUwLDB4MGQsMHgwMCwweDAzLDB4NmMsMHgwMCwweGMzLDB4MTAgfSB9LAoreyAgMTYsIDB4YzJkMCwgMCwgezB4MWMsMHhjMiwweDA1LDB4MzAsMHgwMywweGNjLDB4NDAsMHhjYiwweDAwLDB4MzIsMHg0MCwweDBjLDB4MjAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YzJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDIwLDB4ZmYsMHgwMSwweDAzLDB4NDAgfSB9LAoreyAgMTYsIDB4YzJmMCwgMCwgezB4MGYsMHhmMCwweDIzLDB4MWMsMHgwMCwweGZmLDB4MDAsMHgzYiwweDgwLDB4MGYsMHhiMCwweDIzLDB4M2MsMHgwMiwweGZmLDB4NTAgfSB9LAoreyAgMTYsIDB4YzMwMCwgMCwgezB4M2QsMHhjNCwweDBmLDB4ZjEsMHgwMywweGVjLDB4MDAsMHhlZiwweDAwLDB4YjcsMHhjMCwweDBmLDB4ZTEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YzMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YzMyMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NDgsMHgwMiwweGM4LDB4ODEsMHgzMiwweDAwLDB4MGYsMHg5MCwweDQyLDB4ZWMsMHhhMCwweGZiLDB4MTAgfSB9LAoreyAgMTYsIDB4YzMzMCwgMCwgezB4M2UsMHhlMCwweDBjLDB4YjEsMHgwMywweGVjLDB4NDAsMHhmYiwweDEwLDB4MzIsMHg0MCwweDFmLDB4ZjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzM0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgyNCwweDJkLDB4ODAgfSB9LAoreyAgMTYsIDB4YzM1MCwgMCwgezB4MDgsMHg3MCwweDQyLDB4ZDgsMHgxMCwweDhjLDB4MDIsMHgyMSwweDQwLDB4MGIsMHg1MCwweDAyLDB4ZGQsMHgwMCwweGU3LDB4MjAgfSB9LAoreyAgMTYsIDB4YzM2MCwgMCwgezB4MmYsMHg0MCwweDA4LDB4NzAsMHgwMiwweGRjLDB4MDUsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzM3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg5MCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4YzM4MCwgMCwgezB4MGEsMHg2OCwweDAyLDB4N2EsMHgwMCwweDk3LDB4ODAsMHgyMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4YzM5MCwgMCwgezB4MmQsMHhlMCwweDA4LDB4NzgsMHgwNiwweGRlLDB4MDAsMHhiNywweGEwLDB4MjEsMHg2MCwweDBiLDB4NzgsMHg0MiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzNhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzNiMCwgMCwgezB4MGEsMHgzNCwweDAyLDB4YzgsMHgwMCwweDgzLDB4NGEsMHgyMCwweGY4LDB4MGIsMHgzMSwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzNjMCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhiMiwweDBiLDB4MjAsMHg0MiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzNkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4YmEsMHgwMCwweDNmLDB4ODggfSB9LAoreyAgMTYsIDB4YzNlMCwgMCwgezB4MmUsMHhlMCwweDQzLDB4NTksMHg4OCwweGRlLDB4MDAsMHgzMywweGIwLDB4MGYsMHg2YywweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzNmMCwgMCwgezB4M2UsMHg4MCwweDJjLDB4YTAsMHgwMywweGU4LDB4MDQsMHhmYSwweDAwLDB4MjMsMHhiOCwweDBmLDB4ZTAsMHg4YiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzQwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDA0LDB4ZjgsMHgwMSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQxMCwgMCwgezB4MDksMHg4MiwweDIxLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHhiZSwweDE0LDB4MGYsMHg4NCwweDgxLDB4ZTAsMHgwMCwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzQyMCwgMCwgezB4M2UsMHgwMCwweDFmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4YmUsMHgwMCwweDBmLDB4ODgsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZTEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQ0MCwgMCwgezB4MGMsMHg5MCwweDQzLDB4ZTQsMHgyMCwweGQ5LDB4MDAsMHgzYywweDQ0LDB4MDgsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDEgfSB9LAoreyAgMTYsIDB4YzQ1MCwgMCwgezB4M2UsMHg0OCwweDBmLDB4MTAsMHg0MywweDI1LDB4MDAsMHhjOSwweDAwLDB4YjIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzQ2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgwMCwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQ3MCwgMCwgezB4MDgsMHg5OCwweDAyLDB4ZTYsMHgwOCwweGE5LDB4NjAsMHgyZSwweDQ5LDB4MDgsMHg5NCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ4MCwgMCwgezB4MmUsMHg3MCwweDBiLDB4OTAsMHgwMiwweDI2LDB4MDIsMHg4OSwweDAwLDB4YTAsMHg0MCwweDBhLDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzRhMCwgMCwgezB4MDgsMHg5OCwweDA0LDB4ZTYsMHgwMCwweDk5LDB4ODAsMHgyZSwweDQwLDB4MGEsMHhiMSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzRiMCwgMCwgezB4MGUsMHg0MCwweDBiLDB4OTAsMHgwYSwweDA0LDB4MDAsMHg4MSwweDAxLDB4MjIsMHhjMCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzRjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgyMCwweDIyLDB4NDggfSB9LAoreyAgMTYsIDB4YzRkMCwgMCwgezB4MDgsMHgxOCwweDA2LDB4YzQsMHgwMCwweGExLDB4MDAsMHgyYywweDQ4LDB4MmEsMHgzMCwweDAyLDB4MDQsMHg4MCwweGIxLDB4MjIgfSB9LAoreyAgMTYsIDB4YzRlMCwgMCwgezB4MmMsMHg0OCwweDBiLDB4MTIsMHgwMiwweDA1LDB4ODAsMHg4MSwweDYwLDB4MjIsMHg1MCwweDBhLDB4MTQsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4YzUwMCwgMCwgezB4MGMsMHg4NSwweDAzLDB4ZTEsMHg0MCwweGQ4LDB4NTAsMHgzZSwweDE0LDB4MGUsMHg4MCwweDBiLDB4MjEsMHg0MCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzUxMCwgMCwgezB4M2UsMHg5NCwweDBmLDB4ODUsMHgwMywweDIwLDB4MDAsMHhjMCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YzUyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDQxLDB4ZjksMHgxMCwweDNkLDB4NDUgfSB9LAoreyAgMTYsIDB4YzUzMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQ1LDB4MGQsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YzU0MCwgMCwgezB4M2YsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDIsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4ZDQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YzU1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YzU2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4ZjQsMHgwOCwweDhkLDB4MDIsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHgwMCwweGNkLDB4MDAgfSB9LAoreyAgMTYsIDB4YzU3MCwgMCwgezB4MzMsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDRjLDB4OTgsMHgyMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzU4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzU5MCwgMCwgezB4NDgsMHg4MCwweDAyLDB4ZTgsMHgwMCwweGQwLDB4MDAsMHgyZSwweDgwLDB4MGIsMHg4MCwweDEyLDB4ZTAsMHgwMiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzVhMCwgMCwgezB4YTIsMHgwMCwweDBhLDB4ODAsMHgxMiwweDIyLDB4MDAsMHhiOCwweDgxLDB4MjIsMHgyOCwweDA4LDB4Y2YsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YzViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4YzVjMCwgMCwgezB4MjgsMHgxMCwweDAyLDB4YzQsMHgwMCwweDgxLDB4MDAsMHgyYywweDQwLDB4MGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweDkxLDB4MDAgfSB9LAoreyAgMTYsIDB4YzVkMCwgMCwgezB4MjYsMHg0MCwweDA5LDB4MTAsMHgwMiwweDU0LDB4YTAsMHhiNSwweDJjLDB4YTUsMHg0MiwweDA4LDB4NTAsMHg4MiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzVlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4YTksMHgwMCwweDJlLDB4NTAgfSB9LAoreyAgMTYsIDB4YzVmMCwgMCwgezB4NTgsMHg5MCwweDAyLDB4ZTQsMHg4MCwweDliLDB4MDAsMHgyZSwweDQ1LDB4OGIsMHg5MiwweDAyLDB4ZTQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzYwMCwgMCwgezB4MjYsMHg0NCwweDBiLDB4OTAsMHgwMiwweDY0LDB4MDgsMHhiNSwweDAwLDB4MjUsMHg0YSwweDA4LDB4NTEsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YzYxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NTQgfSB9LAoreyAgMTYsIDB4YzYyMCwgMCwgezB4MGMsMHg5MCwweDQzLDB4YzQsMHgwMCwweGM5LDB4OTAsMHgzZSwweDcwLDB4MGYsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzYzMCwgMCwgezB4MzQsMHg2MCwweDRkLDB4OTAsMHgwYSwweDY0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDJjLDB4OWUsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YzY0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4YzY1MCwgMCwgezB4MGYsMHg5YywweDAzLDB4ZTYsMHgzMCwweGY5LDB4MDAsMHgzZSwweDYyLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzY2MCwgMCwgezB4M2EsMHg0MCwweDRlLDB4OTAsMHgwMywweGE0LDB4MDAsMHg3OSwweDBjLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgxYiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY4MCwgMCwgezB4MGMsMHg4MSwweDEzLDB4ZTEsMHgwOCwweGM4LDB4NDgsMHgzMiwweDAwLDB4M2MsMHg4MCwweDAzLDB4YzAsMHgwMCwweGYwLDB4MTAgfSB9LAoreyAgMTYsIDB4YzY5MCwgMCwgezB4M2UsMHgwNiwweDBjLDB4ODAsMHgwMywweGYwLDB4MDgsMHhjYywweDAwLDB4MzMsMHgwNCwweDBjLDB4YzAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YzZiMCwgMCwgezB4MDgsMHhlYywweDQyLDB4ZmEsMHgyMCwweDhlLDB4MDAsMHgyMywweGEwLDB4MDgsMHhlOCwweDQyLDB4ZTgsMHgwMCwweGJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YzZjMCwgMCwgezB4MmYsMHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDAsMHhkYSwweDAwLDB4MjIsMHg4MCwweDQ4LDB4ZTAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzZlMCwgMCwgezB4MDksMHgzNCwweDgyLDB4YzksMHgwMCwweDgzLDB4ODAsMHgyMCwweGYwLDB4MDgsMHgzMCwweDgyLDB4Y2MsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4YzZmMCwgMCwgezB4MmMsMHhmMCwweDA4LDB4YjAsMHgwMiwweGMxLDB4MjAsMHg4MCwweDAwLDB4YTAsMHgzMiwweDA4LDB4MDAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzcwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweGMwLDB4YjcsMHgwMSwweDJmLDB4YzggfSB9LAoreyAgMTYsIDB4YzcxMCwgMCwgezB4ODksMHg1MCwweDAyLDB4ZDgsMHgwMiwweDg3LDB4YzQsMHgyMSwweGUyLDB4NDgsMHg3MCwweDgyLDB4ZGMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzcyMCwgMCwgezB4MmMsMHg0MCwweDA4LDB4NzIsMHgwMiwweGNlLDB4MDAsMHg5NywweDA4LDB4MjMsMHhjMCwweDA4LDB4NzAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzczMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjcsMHhlMSwweDNkLDB4ZTggfSB9LAoreyAgMTYsIDB4Yzc0MCwgMCwgezB4MmQsMHg2OCwweDAzLDB4ZjIsMHgwMCwweGM3LDB4ODAsMHhiMCwweGUwLDB4MDgsMHg2OCwweDAzLDB4ZGYsMHg4MCwweGY2LDB4ODAgfSB9LAoreyAgMTYsIDB4Yzc1MCwgMCwgezB4M2QsMHhlMCwweDhjLDB4N2UsMHgwMywweGRhLDB4MDAsMHhjYywweDgwLDB4MzEsMHgyMCwweDBjLDB4YzgsMHgwYiwweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4Yzc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDA4LDB4ZmIsMHgwMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzc3MCwgMCwgezB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc4MCwgMCwgezB4M2UsMHg0MCwweDJmLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMCwweDJmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4Yzc5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg5MiwweDdmLDB4ZWEgfSB9LAoreyAgMTYsIDB4YzdhMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4ZmUsMHgwMCwweGNjLDB4YTAsMHgzZiwweDIwLDB4MGQsMHhmOSwweDAzLDB4M2UsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzdiMCwgMCwgezB4MzMsMHg2MCwweDBmLDB4ZjgsMHgwMywweGY2LDB4MDAsMHhlZiwweDg0LDB4MzMsMHhlMCwweDJjLDB4YzgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzdjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweDJmLDB4YzggfSB9LAoreyAgMTYsIDB4YzdkMCwgMCwgezB4MDgsMHg1NCwweDAyLDB4ZDgsMHgwMCwweGQ2LDB4MDQsMHgyZCwweDAxLDB4MDgsMHg2OSwweDAyLDB4MWMsMHgwMCwweDg1LDB4MDAgfSB9LAoreyAgMTYsIDB4YzdlMCwgMCwgezB4MjEsMHg0MywweDBiLDB4NzAsMHgwMywweDlhLDB4YzAsMHg4YywweDAwLDB4YTMsMHgwMiwweDA4LDB4ZjEsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzdmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgwMSwweDJkLDB4Y2MgfSB9LAoreyAgMTYsIDB4YzgwMCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZDQsMHgwMCwweDk0LDB4MjgsMHgyZCwweGMyLDB4MDgsMHhjMiwweDAyLDB4NWMsMHgwMCwweDg2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzgxMCwgMCwgezB4MjEsMHg4MCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MDAsMHhhNywweDEwLDB4MjEsMHhjMCwweDA4LDB4NDgsMHgwMiwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzgyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDA4LDB4YjMsMHgwMCwweDJjLDB4ZjAgfSB9LAoreyAgMTYsIDB4YzgzMCwgMCwgezB4MDgsMHgwNSwweDAyLDB4YzAsMHgyMCwweDkwLDB4ODAsMHgyZSwweDAwLDB4MDgsMHgwMCwweDgyLDB4NGMsMHgwMiwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzg0MCwgMCwgezB4YTAsMHg2MSwweDBiLDB4MzAsMHgwMiwweGEwLDB4MDAsMHg4MCwweDAwLDB4YTAsMHgzMCwweDg4LDB4YjEsMHgwYSwweDQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4Yzg1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmYsMHgwMCwweDJkLDB4YzggfSB9LAoreyAgMTYsIDB4Yzg2MCwgMCwgezB4MGMsMHgzZCwweDAzLDB4ZTQsMHgwMCwweGRiLDB4MDIsMHgzZSwweGYwLDB4MmMsMHg5MCwweDRiLDB4N2MsMHgwMCwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzg3MCwgMCwgezB4MzIsMHgyMCwweDRmLDB4ZjAsMHgxMywweGUwLDB4MDAsMHhlOCwweDAxLDB4MzIsMHgwMCwweDhjLDB4YWMsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4Yzg4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4YzIgfSB9LAoreyAgMTYsIDB4Yzg5MCwgMCwgezB4NGYsMHhiMCwweDAzLDB4ZTAsMHgwNCwweGZhLDB4NDAsMHgzZSwweGMyLDB4NGUsMHg5OCwweDIzLDB4YWMsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzhhMCwgMCwgezB4M2UsMHg1MCwweDA3LDB4YjAsMHgxMywweGFjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMiwweDBmLDB4OTIsMHgwMywweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzhiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4Y2YsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhjMCwgMCwgezB4MGMsMHhjOCwweDIzLDB4MzYsMHg4MiwweGNmLDB4ODAsMHgzZiwweDgwLDB4MGMsMHhlMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4YzhkMCwgMCwgezB4MzMsMHhjMCwweDBlLDB4ZjAsMHgwMywweGY4LDB4MTAsMHhkYywweDAwLDB4MzMsMHgwMCwweDRjLDB4ZTgsMHgyMSwweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YzhlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhmMCwgMCwgezB4NGEsMHg4ZCwweDQyLDB4MjEsMHgwMCwweDhiLDB4NDIsMHgyZSwweGQyLDB4MDgsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGI4LDB4ODggfSB9LAoreyAgMTYsIDB4YzkwMCwgMCwgezB4MzQsMHg2MiwweDBkLDB4YjAsMHgwMiwweGU0LDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwYSwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzkxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzkyMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4MGQsMHgwMCwweDg5LDB4MTAsMHgyZSwweDA4LDB4MjgsMHg5MiwweDAyLDB4ZWMsMHgwNCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzkzMCwgMCwgezB4MjIsMHhhMCwweDA4LDB4YjAsMHgwMiwweDY0LDB4MDIsMHhiMywweDAyLDB4MjAsMHhjMCwweDA4LDB4YTIsMHgwMiwweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YTMsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzk1MCwgMCwgezB4MGEsMHg5MCwweDIyLDB4MGMsMHgxMCwweDgwLDB4MDAsMHgyYywweDAwLDB4MTgsMHgwMiwweDgyLDB4Y2MsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk2MCwgMCwgezB4MjYsMHg0MCwweDA5LDB4MzAsMHgwMiwweGM4LDB4MjAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MTAsMHgwNiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yzk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2IsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzk4MCwgMCwgezB4MGMsMHhhMSwweDAyLDB4MjQsMHgwMCwweDg4LDB4MDAsMHgzYywweDAwLDB4MGMsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk5MCwgMCwgezB4MzIsMHg4MCwweDBlLDB4YjAsMHgwMywweGNjLDB4ODAsMHhkYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4YTAsMHgwMywweDgwLDB4MDMgfSB9LAoreyAgMTYsIDB4YzlhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YzliMCwgMCwgezB4NGYsMHhjMiwweDEzLDB4ZDQsMHgxMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHgwMCwweDAzLDB4YmMsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4YzljMCwgMCwgezB4M2YsMHg0MCwweDBmLDB4ZjAsMHgyMywweGUwLDB4MTIsMHhmYywweDAxLDB4YmYsMHgwMCwweDBmLDB4ZDAsMHgwMywweDY4LDB4MDIgfSB9LAoreyAgMTYsIDB4YzlkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4YzcsMHg4MCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YzllMCwgMCwgezB4OGIsMHhiNCwweDAzLDB4YjAsMHhjMCwweGNmLDB4MmUsMHgxZiwweDBjLDB4NGYsMHhjMywweDAzLDB4MzAsMHg4MCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4YzlmMCwgMCwgezB4M2YsMHgwOCwweDBmLDB4ZjAsMHgwMCwweDdjLDB4MDAsMHhmZiwweDIxLDB4MzMsMHhlNCwweDBjLDB4ZTAsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2EwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlZSwweDAwLDB4OGIsMHg4MiwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4Y2ExMCwgMCwgezB4MGIsMHhiNSwweDEyLDB4MGQsMHg4OCwweDg4LDB4YzAsMHgwZSwweDk4LDB4MGIsMHg4NiwweDAyLDB4MjEsMHgwMCwweGJiLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2EyMCwgMCwgezB4MmUsMHhlNCwweDRiLDB4ZjcsMHg4MywweDJmLDB4NDQsMHhiZiwweDkwLDB4MjIsMHhjOCwweDQ4LDB4YTYsMHg4MiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2EzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDA5LDB4OGEsMHgwMCwweDIwLDB4NTAgfSB9LAoreyAgMTYsIDB4Y2E0MCwgMCwgezB4NGIsMHhiMiwweDBhLDB4ODAsMHhjYywweDgzLDB4MDEsMHgwYywweDhjLDB4MGIsMHgyMywweDBhLDB4MDQsMHg2MCwweGIzLDB4MTQgfSB9LAoreyAgMTYsIDB4Y2E1MCwgMCwgezB4MjQsMHg0MCwweDRiLDB4MzAsMHgwMiwweGNjLDB4MTAsMHhiMywweDAwLDB4MjAsMHhjOCwweGU5LDB4MTEsMHgwNiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2E2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDAxLDB4OGEsMHg4MCwweGEyLDB4NDQgfSB9LAoreyAgMTYsIDB4Y2E3MCwgMCwgezB4MGIsMHhiMCwweDAyLDB4YTEsMHgwNCwweDg4LDB4NDAsMHgyZSwweGEwLDB4MGIsMHgyMCwweDAyLDB4MjgsMHgyMCwweGJiLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2E4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDgsMHhiYiwweDAwLDB4MjIsMHhjMCwweDA5LDB4YjAsMHgwMiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2E5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YzMsMHg4MywweDMyLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2FhMCwgMCwgezB4OGYsMHgwMCwweDAzLDB4YTAsMHgwMiwweGNiLDB4YzQsMHgzZSwweDI4LDB4MDcsMHg4YiwweDAzLDB4MjEsMHgwMCwweGY5LDB4YzAgfSB9LAoreyAgMTYsIDB4Y2FiMCwgMCwgezB4M2UsMHgxMCwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHg3YiwweDAwLDB4MzIsMHhjMCwweDBkLDB4YTAsMHgwMywweDUwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2FjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg5YywweDAyLDB4ZmYsMHgwMCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2FkMCwgMCwgezB4MGYsMHhmNCwweDQzLDB4NWUsMHg4MCwweGZjLDB4OTQsMHgzZiwweDAwLDB4MGYsMHhjMCwweDJiLDB4ZjIsMHg1MCwweGZkLDB4MjEgfSB9LAoreyAgMTYsIDB4Y2FlMCwgMCwgezB4N2UsMHg4NCwweDhmLDB4ZjAsMHgwMywweDZjLDB4MGMsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBlLDB4NjIsMHgwMywweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2FmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZWIsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2IwMCwgMCwgezB4MmMsMHg4MCwweDAzLDB4NjksMHgwMCwweGNiLDB4MzAsMHhiMiwweDAwLDB4NGYsMHhiMywweDQzLDB4ZTUsMHgwMCwweGNiLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2IxMCwgMCwgezB4NzIsMHgxOCwweDJjLDB4YjAsMHgwMywweGVjLDB4MjgsMHhjMywweDIxLDB4M2EsMHhjMSwweDBmLDB4OTQsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2IyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzYywweDAwLDB4OGIsMHgyMCwweDIyLDB4NTAgfSB9LAoreyAgMTYsIDB4Y2IzMCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MjgsMHgwMCwweDg4LDB4YzAsMHgyYSwweDAwLDB4OGIsMHhiNCwweDAyLDB4ZTgsMHgwMCwweGRiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I0MCwgMCwgezB4NjIsMHgzMCwweDA4LDB4ZjAsMHgwMiwweGZjLDB4MDAsMHg4ZiwweDgwLDB4MjIsMHhjMCwweDBiLDB4OTUsMHg0NywweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjEsMHgwMCwweDIwLDB4YzIgfSB9LAoreyAgMTYsIDB4Y2I2MCwgMCwgezB4NDgsMHgzMCwweDAyLDB4NDksMHg4MCwweDgzLDB4NDIsMHg2MCwweDEyLDB4MGIsMHgzMCwweDAyLDB4YzgsMHgwMCwweDgyLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2I3MCwgMCwgezB4MmMsMHgzMCwweDA5LDB4YjAsMHgwMiwweGNmLDB4MDEsMHg4MywweDUwLDB4MmEsMHhjMCwweDBiLDB4MjAsMHgwMiwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4OWQsMHg4MCwweGEwLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2I5MCwgMCwgezB4MDgsMHg3OSwweDIyLDB4NWUsMHg2MCwweDg3LDB4OTAsMHgyOSwweGEwLDB4MGIsMHg3OCwweDAyLDB4YzYsMHgwMCwweDkyLDB4ODEgfSB9LAoreyAgMTYsIDB4Y2JhMCwgMCwgezB4MDUsMHhlMCwweDA5LDB4NzgsMHgwMiwweGRlLDB4NDAsMHg4NywweDgwLDB4MjEsMHhlMCwweDBiLDB4MjksMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQwLDB4ZjIsMHgwMCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2JjMCwgMCwgezB4MDgsMHgzYSwweDAzLDB4NDQsMHgwNCwweGMzLDB4MTQsMHgzMCwweGMwLDB4MGYsMHgyMiwweDAzLDB4Y2MsMHg4MCwweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JkMCwgMCwgezB4YTQsMHhkMiwweDBkLDB4MzAsMHgxMywweGNjLDB4MjAsMHhjMywweDAwLDB4MzgsMHhjNCwweDRmLDB4MDQsMHg0MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2JlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5YywweDAwLDB4ZWUsMHgwMCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2JmMCwgMCwgezB4MGYsMHg3MCwweDAzLDB4YjQsMHgwMiwweGY0LDB4MTAsMHgzZiwweGMwLDB4OGYsMHhhMCwweDAzLDB4ZmMsMHgwMCwweDdlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2MwMCwgMCwgezB4M2IsMHhjMCwweDBlLDB4ZjAsMHg4MywweGVjLDB4MDAsMHhmNywweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4Y2MxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2MyMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4YWEsMHgxMiwweGNiLDB4MDEsMHgzMiwweDgwLDB4MGYsMHhiMCwweDEzLDB4MjgsMHgxNCwweGY5LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2MzMCwgMCwgezB4M2EsMHg0MCwweDAzLDB4YjQsMHgwMywweGVjLDB4NDIsMHhjYiwweDE4LDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5ZCwweDAwLDB4YjUsMHgwMCwweDJkLDB4YzQgfSB9LAoreyAgMTYsIDB4Y2M1MCwgMCwgezB4MGIsMHg3MCwweDRiLDB4N2MsMHgwMCwweDg0LDB4MDAsMHgyMSwweDgwLDB4MGIsMHg3MCwweDAyLDB4OTQsMHgxMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M2MCwgMCwgezB4MjksMHhjMCwweDBiLDB4NzIsMHg4MiwweGRjLDB4MDAsMHg4NywweDIwLDB4MmQsMHhjMSwweDBlLDB4NzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2M3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2M4MCwgMCwgezB4MGIsMHg2OCwweDAyLDB4OWUsMHgwMCwweDgzLDB4ODAsMHgyMSwweGUwLDB4NWIsMHgzOCwweDAyLDB4MWUsMHgwMCwweGI0LDB4YzAgfSB9LAoreyAgMTYsIDB4Y2M5MCwgMCwgezB4MjUsMHhlMCwweDA5LDB4NzgsMHgzMiwweGNlLDB4MDAsMHg5NywweDgwLDB4MmQsMHhlMCwweDBiLDB4NWMsMHg0ZSwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2NhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHg0NCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2NiMCwgMCwgezB4MGIsMHgzYywweDAyLDB4Y2MsMHg0MCwweDkzLDB4MDgsMHgyMCwweGUwLDB4MGIsMHgzMCwweDAyLDB4OGMsMHgxMCwweGIzLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2NjMCwgMCwgezB4MjgsMHhkOCwweDFiLDB4MzAsMHgwMiwweGNjLDB4MDgsMHg5MywweDAxLDB4NmMsMHhjMCwweDBhLDB4YjgsMHg4MiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2NkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZjYsMHgxMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2NlMCwgMCwgezB4NGIsMHhlZCwweDgzLDB4YjgsMHgwMCwweGNlLDB4ZTQsMHhiMywweGEzLDB4MGYsMHhlMCwweDAzLDB4MzgsMHgwMCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2NmMCwgMCwgezB4M2IsMHg4MCwweDBkLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhkYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4ZTgsMHgwMiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2QwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDEwLDB4ZjgsMHg0MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2QxMCwgMCwgezB4MGYsMHg4MCwweDEzLDB4NjAsMHgwMCwweGUwLDB4MDAsMHgzZSwweDAwLDB4NDMsMHgwOCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4Y2QyMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDQwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgyMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2QzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAwLDB4ZDksMHhjMCwweGJlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2Q0MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MDEsMHg5YSwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4NDAsMHgwOSwweDEwLDB4MGUsMHg0MCwweDBmLDB4OWEsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Q2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA0LDB4ODksMHgwNCwweGEyLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2Q3MCwgMCwgezB4OGIsMHg5ZCwweDgwLDB4YTYsMHgwMCwweGI5LDB4ODAsMHgyMiwweDQwLDB4NDgsMHg5OCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q4MCwgMCwgezB4MmUsMHg0MCwweDhiLDB4OTAsMHgwMiwweGU0LDB4OTQsMHg4OSwweDYwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgwYiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OTksMHgwOCwweGFlLDB4NDggfSB9LAoreyAgMTYsIDB4Y2RhMCwgMCwgezB4NGIsMHgxMCwweDAyLDB4ZTUsMHg4MSwweGI5LDB4MTAsMHgyMCwweDQ0LDB4MWIsMHg5NCwweDAyLDB4MjQsMHgxMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RiMCwgMCwgezB4NmUsMHg2MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4ODksMHgwMCwweGEwLDB4NjggfSB9LAoreyAgMTYsIDB4Y2RkMCwgMCwgezB4MGIsMHgxMiwweDAyLDB4ODQsMHg4OSwweGIxLDB4MjAsMHgyMCwweDQ4LDB4MWEsMHgxMiwweDEyLDB4MDQsMHg4MCwweGIxLDB4MjIgfSB9LAoreyAgMTYsIDB4Y2RlMCwgMCwgezB4MGMsMHg0OCwweDBiLDB4MTIsMHgwMiwweGM0LDB4ODEsMHhhMSwweDIwLDB4MmMsMHg0MCwweDBiLDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2RmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZDgsMHgwMCwweGJlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2UwMCwgMCwgezB4MGYsMHgwNSwweDBiLDB4ZTEsMHg0MCwweGY4LDB4MDAsMHgzMiwweDE0LDB4MGYsMHg4NSwweDAzLDB4MjEsMHg0MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2UxMCwgMCwgezB4MmUsMHg4MCwweDBmLDB4ODUsMHgxMywweGUwLDB4MDIsMHhjOCwweDAwLDB4M2UsMHgxNCwweDBmLDB4MDUsMHgwMSwweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4Y2UyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDQwLDB4ZmQsMHgwMCwweGJmLDB4NDQgfSB9LAoreyAgMTYsIDB4Y2UzMCwgMCwgezB4MGYsMHhkMSwweDAzLDB4ZjQsMHg0MCwweDdkLDB4MTAsMHhiZiwweDQ0LDB4NDUsMHhmMSwweDJiLDB4ZjQsMHg0MCwweGZkLDB4MTAgfSB9LAoreyAgMTYsIDB4Y2U0MCwgMCwgezB4M2YsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhkOSwweDEwLDB4M2UsMHg0MCwweDBmLDB4ZDEsMHgwMywweGE2LDB4MDYgfSB9LAoreyAgMTYsIDB4Y2U1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDAwLDB4ZmQsMHgwMCwweDFmLDB4NjIgfSB9LAoreyAgMTYsIDB4Y2U2MCwgMCwgezB4MGYsMHhkOCwweDgyLDB4MzYsMHgwMCwweGJkLDB4YTAsMHgzYiwweDY4LDB4MGMsMHhkYywweDgzLDB4MjYsMHhjOCwweGQ5LDB4YTAgfSB9LAoreyAgMTYsIDB4Y2U3MCwgMCwgezB4MzMsMHg2MCwweDBkLDB4OTksMHg4MywweDU2LDB4MjAsMHhkNSwweGE4LDB4MmUsMHg0NCwweDBjLDB4ZDgsMHg4MywweDg2LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2U4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDQ4LDB4YjgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2U5MCwgMCwgezB4MGIsMHgwYSwweDgyLDB4MjIsMHgyMCwweGI4LDB4NTAsMHgyMiwweGJhLDB4MDgsMHg4YSwweDIyLDB4MjIsMHg4MCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2VhMCwgMCwgezB4MjIsMHgwMSwweDA4LDB4MGMsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MmUsMHgyOCwweDg4LDB4ODgsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2ViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2VjMCwgMCwgezB4MWIsMHgxMCwweDBhLDB4ODQsMHg0MCwweGIxLDB4MDAsMHgyOCwweDU4LDB4MGEsMHgzMiwweDAyLDB4MDUsMHgwMCwweDk5LDB4NDAgfSB9LAoreyAgMTYsIDB4Y2VkMCwgMCwgezB4MjAsMHg2NSwweDA5LDB4MTAsMHg0MiwweGM0LDB4MDAsMHg5MSwweDAwLDB4MmMsMHg0MCwweDBhLDB4MzAsMHg4MiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2VlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2VmMCwgMCwgezB4MWIsMHg5MCwweDAyLDB4YTUsMHg4MCwweGI5LDB4MTAsMHgyMiwweDQ4LDB4MDgsMHgxMCwweDQyLDB4MDQsMHgxMCwweDA5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2YwMCwgMCwgezB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5YiwweDAwLDB4MmMsMHg0MCwweDBhLDB4OTQsMHgyMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2YxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHgyMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2YyMCwgMCwgezB4MGYsMHg5MCwweDEzLDB4YTcsMHgxMCwweGY5LDB4NjAsMHhiYSwweDUwLDB4MmUsMHg5YywweDBhLDB4MjUsMHg4NCwweGQxLDB4ZjAgfSB9LAoreyAgMTYsIDB4Y2YzMCwgMCwgezB4YjIsMHg2MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweGE4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDBjLDB4ZjksMHg5MCwweDNlLDB4NmEgfSB9LAoreyAgMTYsIDB4Y2Y1MCwgMCwgezB4OGYsMHg5MCwweDIzLDB4NjYsMHgwMCwweGYxLDB4MDgsMHgzYywweDQwLDB4MGYsMHg5YywweDQzLDB4ZTQsMHg0MCwweGY5LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2Y2MCwgMCwgezB4M2EsMHg0NCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDQsMHhlOSwweDAyLDB4M2UsMHg0MCwweDJkLDB4OTEsMHgxMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZTgsMHgyMCwweDNlLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2Y4MCwgMCwgezB4MGMsMHgwMCwweDAzLDB4YTEsMHgyMCwweGU4LDB4NTAsMHgzMiwweDEwLDB4MmMsMHg4YywweDAzLDB4MjEsMHgwMCwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y5MCwgMCwgezB4MzIsMHgwMiwweDBmLDB4MDAsMHgxMywweDIwLDB4ODgsMHhjOCwweDA4LDB4MzIsMHgwMCwweDBmLDB4OGMsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDIwLDB4OGUsMHhlMywweDJmLDB4OTAgfSB9LAoreyAgMTYsIDB4Y2ZiMCwgMCwgezB4MGEsMHhlMCwweDA2LDB4M2IsMHgwMCwweGVlLDB4MDQsMHgyMywweDkwLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwOCwweDhhLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2ZjMCwgMCwgezB4NzUsMHg5MCwweDhiLDB4YTAsMHg0MSwweDU4LDB4OTAsMHg4ZSwweDgwLDB4MmEsMHg4MSwweDBiLDB4ZTAsMHgwMywweDhhLDB4MTAgfSB9LAoreyAgMTYsIDB4Y2ZkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZSwweDAwLDB4YTMsMHgwMCwweDZjLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2ZlMCwgMCwgezB4MDgsMHgzOCwweDFhLDB4OGUsMHg0MCwweGEwLDB4ODAsMHgyMCwweGNjLDB4MDksMHgzMCwweDAyLDB4MGMsMHgwNSwweGEzLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2ZmMCwgMCwgezB4MjgsMHhjNCwweDBiLDB4MzAsMHgwMiwweDBkLDB4MDEsMHg4MywweGMwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDA4LDB4ODcsMHgwMCwweDJkLDB4NjIgfSB9LAoreyAgMTYsIDB4ZDAxMCwgMCwgezB4MGIsMHg3MCwweDkyLDB4MWMsMHgwOCwweGEwLDB4MDAsMHg2MSwweGMwLDB4MDksMHg2MCwweDA2LDB4MWMsMHg4MCwweGE3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAyMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweDU4LDB4MDEsMHg4NywweDg4LDB4MjksMHhjMCwweDBiLDB4NjAsMHgxMiwweGE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZTYsMHg4MCwweDNkLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDA0MCwgMCwgezB4MGMsMHg3OCwweDQyLDB4OTYsMHgwMCwweGU0LDB4ODAsMHhhMywweDYwLDB4MGQsMHg3OCwweDAzLDB4M2YsMHgwMCwweGUzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDA1MCwgMCwgezB4MjEsMHhlMCwweDBmLDB4N2IsMHgwMywweDE2LDB4MDgsMHhjNywweDgwLDB4MzEsMHhlMiwweDRmLDB4NzgsMHg0MywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHg4YywweDAxLDB4ZjgsMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDA3MCwgMCwgezB4MGUsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGY4LDB4MDEsMHgzZSwweDQwLDB4NGUsMHgzMCwweDMzLDB4ZWQsMHgyMCwweGRiLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDA4MCwgMCwgezB4YmUsMHhjMCwweDBmLDB4YjQsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhkOCwweDBmLDB4YTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDA5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4YzcsMHg4NCwweDIzLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDBhMCwgMCwgezB4MGMsMHg3OCwweDBiLDB4YmUsMHgwMCwweGZkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhlYiwweDAzLDB4M2UsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDBiMCwgMCwgezB4M2IsMHgyNSwweDBjLDB4ZjgsMHg4MywweDdlLDB4NDAsMHhjZCwweDgwLDB4MzMsMHhlMiwweDBiLDB4ZjksMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAyLDB4ODcsMHgwMCwweDE1LDB4NDggfSB9LAoreyAgMTYsIDB4ZDBkMCwgMCwgezB4MDgsMHg3MCwweDAyLDB4MTQsMHgyMCwweGI2LDB4MDAsMHgzNSwweDlhLDB4NDksMHhjOCwweDAzLDB4OWMsMHg4NCwweGE3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBlMCwgMCwgezB4MzksMHhkMCwweDBhLDB4NzAsMHgwMiwweDFhLDB4MDgsMHhhNCwweDAwLDB4MjEsMHhjMCwweDA5LDB4NjEsMHg0MiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDBmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDEwMCwgMCwgezB4MDgsMHg3MSwweDAyLDB4OTQsMHgwMCwweGI1LDB4MDAsMHgyZCwweDQwLDB4MGIsMHhmMSwweDIyLDB4NWMsMHgwMiwweDA3LDB4MDggfSB9LAoreyAgMTYsIDB4ZDExMCwgMCwgezB4MmMsMHg1MCwweDA4LDB4NzAsMHgwMiwweDUwLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjNCwweDBiLDB4NTAsMHg0MiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDEyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMiwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDEzMCwgMCwgezB4MTgsMHgzZCwweDBhLDB4MDEsMHgwMCwweGIwLDB4NTgsMHgyNCwweDIwLDB4MDksMHgzMCwweDAyLDB4OGYsMHg0MCwweDgzLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDE0MCwgMCwgezB4MmMsMHhjMSwweDBhLDB4MzAsMHg0MiwweDA4LDB4MDAsMHhiMywweDAxLDB4NmMsMHhjMCwweDA5LDB4MDgsMHgxNiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDE1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4YywweDAwLDB4OGIsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDE2MCwgMCwgezB4MGMsMHgyNSwweDAzLDB4YTgsMHg0OCwweGY4LDB4ODEsMHgzZSwweDgwLDB4MGYsMHg4MCwweDYzLDB4N2MsMHgwMCwweGNiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDE3MCwgMCwgezB4M2EsMHhjMCwweDBjLDB4ZjAsMHgwMywweDZjLDB4MDAsMHhjYSwweDAyLDB4YmYsMHhjMCwweDBmLDB4OTgsMHg4YiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZDE5MCwgMCwgezB4MmYsMHhhNCwweDBiLDB4YzgsMHgwMCwweGYwLDB4NDAsMHgzZSwweGQwLDB4MGYsMHhhMCwweDMzLDB4ZWMsMHgyMCwweGZiLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDFhMCwgMCwgezB4N2EsMHhlMCwweDBmLDB4YjAsMHgwMywweGVkLDB4MDgsMHhlOSwweDAzLDB4MzIsMHhjMCwweDBkLDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlYywweDQwLDB4ZWUsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDFjMCwgMCwgezB4MGMsMHhkYSwweDAzLDB4NzAsMHgwNCwweGNjLDB4MDIsMHhiMSwweGEwLDB4MGUsMHhmMCwweDIzLDB4ZWMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDFkMCwgMCwgezB4MzcsMHgyMCwweGNkLDB4YjAsMHg3MywweGVjLDB4ODgsMHhmYiwweDgwLDB4M2YsMHhjMCwweDBmLDB4MzAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2ZSwweDAwLDB4ODgsMHg4MCwweDJjLDB4ZTEgfSB9LAoreyAgMTYsIDB4ZDFmMCwgMCwgezB4MDgsMHg5NCwweDBhLDB4YTksMHgwMiwweDg4LDB4NDAsMHgyMiwweGQwLDB4MDgsMHhiOSwweDQyLDB4ZWMsMHgwNCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDIwMCwgMCwgezB4MmMsMHhkNCwweDBkLDB4YjAsMHgwMiwweGVkLDB4MjAsMHhiYiwweGQwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDIxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNCwweDAwLDB4YWIsMHg4MCwweDJlLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZDIyMCwgMCwgezB4MjksMHhhMCwweDgyLDB4NmQsMHgwMCwweDg4LDB4MDgsMHgyMiwweDA0LDB4MDgsMHg5MCwweDQyLDB4ZWMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDIzMCwgMCwgezB4MmEsMHg4MSwweDA4LDB4YjAsMHgwMiwweGU0LDB4MDksMHhiYSwweDA0LDB4MmUsMHhjMSwweDRiLDB4OTgsMHg4MiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDI1MCwgMCwgezB4MGEsMHgyMSwweDAyLDB4ODQsMHgxMCwweDgyLDB4MDAsMHhlMCwweDAwLDB4MTgsMHgwYSwweDEyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI2MCwgMCwgezB4MGMsMHhjMCwweDA5LDB4MzAsMHgwMiwweGNjLDB4OTAsMHhiMCwweDAwLDB4MmMsMHhjMCwweDBiLDB4MTAsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4ZWIsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI4MCwgMCwgezB4MmMsMHhiNCwweDAzLDB4NjQsMHgwOCwweDg4LDB4MDAsMHhiMiwweDAwLDB4MGMsMHhiMiwweDQzLDB4ZmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI5MCwgMCwgezB4NTYsMHgwMCwweDBjLDB4ZjAsMHgwMSwweGU0LDB4MDAsMHhmYiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ODAsMHgwYiwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDJhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDJiMCwgMCwgezB4MmQsMHhmMCwweDYxLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgyNywweDAxLDB4MGQsMHhiMSwweDExLDB4ZmMsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDJjMCwgMCwgezB4MDcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVjLDB4NDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweDY4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNiwweDAwLDB4ZWYsMHg5MCwweDNkLDB4NGMgfSB9LAoreyAgMTYsIDB4ZDJlMCwgMCwgezB4MmMsMHhjMCwweDEzLDB4ZjQsMHgwOCwweGZkLDB4MjAsMHgzNywweDRjLDB4OGUsMHg4MiwweDgzLDB4NzQsMHg4NCwweGRjLDB4YzIgfSB9LAoreyAgMTYsIDB4ZDJmMCwgMCwgezB4M2YsMHhkOCwweDBkLDB4ZjIsMHgwMywweGVjLDB4YzAsMHhmZiwweDgxLDB4M2YsMHgwMCwweDBjLDB4ZjgsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDMwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlNiwweDAwLDB4OGIsMHgyNCwweDJlLDB4NWMgfSB9LAoreyAgMTYsIDB4ZDMxMCwgMCwgezB4MDgsMHg4ZCwweDAyLDB4ZmYsMHg0OCwweGI5LDB4OTAsMHgyZiwweDU0LDB4MGIsMHg4NCwweDgyLDB4M2UsMHg0MCwweGEwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDMyMCwgMCwgezB4MmUsMHhjNCwweDBhLDB4ZmMsMHg0MiwweGVkLDB4ODAsMHhiOSwweDgwLDB4MmUsMHg2MCwweDBhLDB4OTgsMHgxMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDMzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlNCwweDAxLDB4YTMsMHgwMCwweDI4LDB4NDggfSB9LAoreyAgMTYsIDB4ZDM0MCwgMCwgezB4MGEsMHgwMCwweDQyLDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQ5LDB4MGIsMHgwYSwweDQyLDB4MDQsMHhhMiwweDkxLDB4MjEgfSB9LAoreyAgMTYsIDB4ZDM1MCwgMCwgezB4MmMsMHhjOSwweDA4LDB4MzEsMHgwMiwweDhjLDB4YzEsMHhhMywweDAwLDB4MmMsMHg0MCwweDA4LDB4MTgsMHgwMiwweGEyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDM2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhMCwweDIwLDB4OGIsMHg4MiwweDJlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDM3MCwgMCwgezB4NTgsMHg4MCwweDAyLDB4ZTQsMHgwMCwweGJiLDB4MTAsMHgyZSwweDQwLDB4MGIsMHhhMSwweDEyLDB4MGMsMHgwMSwweDg5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDM4MCwgMCwgezB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGVjLDB4MDEsMHhiOCwweDgwLDB4MmUsMHhlMiwweDBhLDB4YTEsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYiwweDQwLDB4ZWIsMHg0MCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDNhMCwgMCwgezB4MGUsMHg4NywweDMzLDB4ZTQsMHgwMCwweGI5LDB4YTEsMHgzNiwweGMwLDB4MGUsMHhhOCwweDBiLDB4MjYsMHgwMCwweGRhLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDNiMCwgMCwgezB4M2UsMHhjMCwweDhkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDg1LDB4M2UsMHhlMSwweDA4LDB4YjgsMHgwMywweDkwLDB4MDUgfSB9LAoreyAgMTYsIDB4ZDNjMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDAwLDB4ZmYsMHgwMiwweDJmLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDNkMCwgMCwgezB4MDMsMHhlOCwweDgzLDB4ZmMsMHgxMCwweGZkLDB4ODAsMHgxZiwweDQwLDB4MWYsMHhkMCwweDEzLDB4YmUsMHg0MCwweGVlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDNlMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweGZjLDB4MDgsMHhmZCwweDAwLDB4M2MsMHhjMCwweDBmLDB4ZDAsMHgxMSwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNCwweDAwLDB4ZGIsMHgwMCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDQwMCwgMCwgezB4MGUsMHg5NCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHhiYSwweGMwLDB4MGMsMHgyMCwweDAzLDB4ZTQsMHg5MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQxMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDEsMHhmYSwweDAwLDB4M2UsMHhkMCwweDJjLDB4OTgsMHgwMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgwMywweDAwLDB4OGIsMHgwMCwweDIyLDB4NDggfSB9LAoreyAgMTYsIDB4ZDQzMCwgMCwgezB4MDgsMHg4NCwweDIyLDB4MmMsMHgwMCwweGI5LDB4MDAsMHgyMiwweGMwLDB4MDgsMHhhMCwweDAyLDB4ZWQsMHgwMCwweDhiLDB4YTAgfSB9LAoreyAgMTYsIDB4ZDQ0MCwgMCwgezB4MjEsMHhjMCwweDA4LDB4ZjAsMHgwMiwweGZjLDB4MDAsMHhiOSwweDgwLDB4MmUsMHhjMCwweDA4LDB4YTAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0NSwweDIwLDB4OTMsMHgwMCwweDIyLDB4ZjggfSB9LAoreyAgMTYsIDB4ZDQ2MCwgMCwgezB4MGIsMHgzMCwweDBhLDB4ODQsMHg0MCwweGIyLDB4MDAsMHgyMCwweDQwLDB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMCwweDgwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDQ3MCwgMCwgezB4MjgsMHhjMCwweDI4LDB4MzksMHgwMiwweDRjLDB4MDAsMHhiMSwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgzNiwweDAwLDB4OWYsMHg4MCwweDIxLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDQ5MCwgMCwgezB4MDksMHgzOCwweDAyLDB4OWUsMHgwMCwweGIyLDB4YzAsMHgyMCwweDYwLDB4NDgsMHg0OCwweDEyLDB4ZDYsMHhjNiwweDg2LDB4ZDAgfSB9LAoreyAgMTYsIDB4ZDRhMCwgMCwgezB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMCwweGRlLDB4ODAsMHhiNywweDgyLDB4MmQsMHhlMCwweDA4LDB4ZjgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDIwLDB4ZDMsMHgxMCwweDMwLDB4YzggfSB9LAoreyAgMTYsIDB4ZDRjMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4ODQsMHgwMCwweGYxLDB4MDAsMHgzMCwweDQwLDB4MjQsMHgxOSwweDAzLDB4ZTQsMHhjMCwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDRkMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4MzIsMHgwMywweGNlLDB4ODAsMHhiMSwweDI4LDB4M2MsMHhjMCwweDBjLDB4MzAsMHgxMywweDkyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5YywweDAwLDB4ZTYsMHgwMCwweDdmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDRmMCwgMCwgezB4MGUsMHhmMCwweDIzLDB4NzQsMHg0MCwweGZmLDB4MTAsMHgzZiwweDQwLDB4NGYsMHhkMCwweDAzLDB4ZmMsMHhkMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDUwMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwMywweGZjLDB4MDAsMHhmZSwweDAwLDB4M2YsMHhjMCwweDBmLDB4NzEsMHgwMywweGQwLDB4MTIgfSB9LAoreyAgMTYsIDB4ZDUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZSwweDAwLDB4Y2IsMHgwMCwweDE2LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDUyMCwgMCwgezB4MGQsMHg4MCwweDAzLDB4MjcsMHgyMCwweGNiLDB4MDAsMHgzZSwweGMyLDB4MGEsMHhiMCwweDUzLDB4ZTQsMHgyOCwweGMxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZDUzMCwgMCwgezB4MzIsMHhjMSwweDBlLDB4YjksMHgwMywweDJjLDB4MDAsMHhmMSwweDgwLDB4MzUsMHhlMCwweDBjLDB4YjgsMHgwMywweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDU0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAyLDB4ODcsMHgxMCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDU1MCwgMCwgezB4MDgsMHg3MCwweDAzLDB4NWMsMHgwMCwweGE3LDB4MDAsMHgyZCwweDQwLDB4MjgsMHg3MCwweDAyLDB4ZDQsMHgwNCwweDg3LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDU2MCwgMCwgezB4YTEsMHhkMCwweDBiLDB4NzIsMHgwMiwweDFkLDB4MDAsMHhmNywweDAwLDB4MjEsMHhjMCwweDBkLDB4NTAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDU3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4ODUsMHg4MCwweDI1LDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDU4MCwgMCwgezB4MDksMHg3OCwweDAyLDB4MzcsMHgwMywweDg3LDB4ODAsMHgyZiwweGUwLDB4MDgsMHg3OCwweDEyLDB4YzYsMHgxMCwweDhkLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDU5MCwgMCwgezB4MjUsMHhlOCwweDBiLDB4MzgsMHgwMiwweDFlLDB4ODAsMHhiYywweDg0LDB4MjUsMHhlMCwweDA4LDB4NTgsMHgwMiwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDVhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZCwweDgwLDB4ODMsMHg4OCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDViMCwgMCwgezB4MDgsMHgzYywweDAyLDB4NGUsMHgwMSwweGEzLDB4ZDIsMHgyZSwweGM0LDB4MDgsMHhiMSwweDAyLDB4Y2MsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDVjMCwgMCwgezB4MjQsMHhjMSwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDQwLDB4YTAsMHhkMiwweDA5LDB4MzAsMHgxMiwweDUyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDVkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDAwLDB4Y2EsMHhjMCwweDM2LDB4ODAgfSB9LAoreyAgMTYsIDB4ZDVlMCwgMCwgezB4MGQsMHg2NywweDEzLDB4MjgsMHgwMCwweGNlLDB4MDAsMHgzZSwweGEwLDB4MGMsMHhlZCwweDAzLDB4ZTgsMHgwMCwweGNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDVmMCwgMCwgezB4MzYsMHg4MCwweDFlLDB4YTAsMHgwYiwweDI4LDB4MDQsMHhmZSwweDAwLDB4YjcsMHhiMiwweDBjLDB4ZTAsMHgwYiwweDdhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDYwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDQwLDB4ZjgsMHgxMCwweDJlLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDYxMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMSwweGQ4LDB4MGEsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YzAsMHgwMiwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4ZDYyMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MTAsMHhlOCwweDIwLDB4YmUsMHgwMCwweDBmLDB4ODAsMHgxMywweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDYzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNSwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY0MCwgMCwgezB4MGMsMHg5MSwweDAzLDB4MjYsMHgwMCwweDYxLDB4ODAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY1MCwgMCwgezB4MWUsMHg0MCwweDBjLDB4OWMsMHgwMywweGU0LDB4MDEsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NywweDAwLDB4YjksMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY3MCwgMCwgezB4MDAsMHg5YywweDAyLDB4YTYsMHgwMCwweDc5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY4MCwgMCwgezB4MmMsMHg0NCwweDA4LDB4OTgsMHgwMiwweGU0LDB4MDAsMHhiOSwweDgwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YmIsMHgwMCwweDI2LDB4NTAgfSB9LAoreyAgMTYsIDB4ZDZhMCwgMCwgezB4MjgsMHg5MCwweDgyLDB4MjQsMHg4NCwweDk5LDB4MjAsMHgyMiwweDQwLDB4NDksMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZiMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDYwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDZjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNiwweDAwLDB4YjEsMHgwMCwweDJlLDB4NDggfSB9LAoreyAgMTYsIDB4ZDZkMCwgMCwgezB4MDgsMHgxMiwweDAyLDB4ODQsMHg4MCwweGIxLDB4MjAsMHhhMCwweDQ4LDB4MDksMHgxMiwweDBhLDB4MDQsMHg4MCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZlMCwgMCwgezB4MmMsMHg0OCwweDI4LDB4MTIsMHg0MiwweGM0LDB4ODgsMHgzMSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MTgsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHg1MCwweDM2LDB4MTQgfSB9LAoreyAgMTYsIDB4ZDcwMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGU4LDB4MDAsMHgzMiwweDE0LDB4MGMsMHg4NSwweDAzLDB4MjEsMHg0MCwweGM4LDB4NTAgfSB9LAoreyAgMTYsIDB4ZDcxMCwgMCwgezB4M2UsMHgxNCwweDBjLDB4ODAsMHgwMywweGUxLDB4NDAsMHgzOCwweDAwLDB4M2UsMHgwMCwweDhmLDB4ODAsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDcyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhkNCwweDAwLDB4ZmIsMHgwNCwweDNkLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDczMCwgMCwgezB4MGYsMHg1MSwweDIzLDB4ZDQsMHg0OCwweGVkLDB4MTAsMHgzZCwweDQ0LDB4NGUsMHhkMSwweDIzLDB4ZjQsMHg0MiwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc0MCwgMCwgezB4M2UsMHg0NCwweDhmLDB4OTEsMHgwMywweGU0LDB4NTgsMHhmZCwweDAwLDB4M2YsMHg1MCwweDBmLDB4NTAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDc1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNCwweDAwLDB4ZjksMHgwMCwweDNkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDc2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGRkLDB4MDIsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHg0MCwweGM5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDc3MCwgMCwgezB4MzcsMHg0MCwweDA3LDB4ZDAsMHgwNywweDI0LDB4MDAsMHhlNSwweDAwLDB4MmYsMHg2YSwweDBmLDB4NzAsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4YjgsMHgwMCwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc5MCwgMCwgezB4ODAsMHg4MCwweDAyLDB4ZTAsMHgwMCwweDg4LDB4MDAsMHgyZSwweDAwLDB4MGEsMHg4MCwweDUzLDB4YTIsMHg4MCwweDJjLDB4YTAgfSB9LAoreyAgMTYsIDB4ZDdhMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4ODAsMHgwYSwweDIwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgxMCwweDA5LDB4ODAsMHgwMywweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDdiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDZjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDdjMCwgMCwgezB4MmEsMHgxMCwweDAyLDB4ODQsMHgwMSwweDgxLDB4ODAsMHgyZSwweDQwLDB4MDksMHgxMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDdkMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDg0LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDBiLDB4OTgsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDdlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDIwLDB4YjksMHgwMCwweDJhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDdmMCwgMCwgezB4ODgsMHhiNCwweDAyLDB4ZTYsMHgwMSwweGE5LDB4MjAsMHgyZSwweDQ4LDB4MGEsMHg5MCwweDAwLDB4YTQsMHg0MCwweGFkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDgwMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTAsMHgxMiwweGE0LDB4MDQsMHhiOSwweDAxLDB4MmUsMHg0MSwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDgxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHhjMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDgyMCwgMCwgezB4MGMsMHg5NCwweDEzLDB4YTYsMHgwMiwweGQ5LDB4NDIsMHgxYywweDYwLDB4MGMsMHg5ZSwweDAxLDB4YzYsMHgwNCwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDgzMCwgMCwgezB4YjIsMHg0MCwweDFmLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhlOSwweDA4LDB4M2UsMHg2OCwweDRmLDB4OTgsMHgwYiwweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDg0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNiwweDQwLDB4ZjksMHgyMCwweDM4LDB4NzAgfSB9LAoreyAgMTYsIDB4ZDg1MCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5YywweDEzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDg2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMywweDY0LDB4MTAsMHhmOSwweDBhLDB4M2UsMHg1MCwweDBkLDB4OWEsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDg3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4ZDgsMHgwNCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDg4MCwgMCwgezB4MGMsMHg4MSwweDEzLDB4YzAsMHgwMiwweGQ4LDB4MjAsMHgzZSwweDAwLDB4MmQsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGNjLDB4MDggfSB9LAoreyAgMTYsIDB4ZDg5MCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MDAsMHhmOCwweDQxLDB4MzIsMHgwMCwweDA3LDB4ODEsMHg4YiwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDhhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzYSwweDYwLDB4OGEsMHgwMCwweDJmLDB4YTggfSB9LAoreyAgMTYsIDB4ZDhiMCwgMCwgezB4MGEsMHhlMCwweDIyLDB4ZTgsMHgwMiwweDdlLDB4NDgsMHgyZSwweDgwLDB4MDgsMHhhMCwweDQyLDB4ZTgsMHgwNCwweDhlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDhjMCwgMCwgezB4MjMsMHhhOCwweDBiLDB4YTgsMHg4MiwweGU4LDB4MDAsMHhlZSwweDAwLDB4YTIsMHg4MCwweDRiLDB4NjAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDhkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMCwweDZjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDhlMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDEzLDB4ODEsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2UsMHg0MCwweDgyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDhmMCwgMCwgezB4MjgsMHhlMCwweDBiLDB4MzgsMHgwMiwweGNjLDB4MDAsMHhiMywweDEwLDB4MjQsMHhjMCwweDhiLDB4MzgsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDAwLDB4ODcsMHgyMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDkxMCwgMCwgezB4MGEsMHg3MCwweDAyLDB4ZGMsMHgwYSwweGI2LDB4MDAsMHgyYywweGM4LDB4ODgsMHg3MiwweDA2LDB4ZDgsMHgwMCwweDg2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkyMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRjLDB4ODQsMHhhZiwweDgwLDB4YTUsMHhjMCwweDBiLDB4ZDAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZDcsMHg4MCwweDNkLDB4YTAgfSB9LAoreyAgMTYsIDB4ZDk0MCwgMCwgezB4MWMsMHg3OCwweDEzLDB4ZDYsMHgwMiwweGQ3LDB4ODAsMHgzZCwweGVjLDB4MDgsMHg3ZSwweDIzLDB4ZmUsMHgwMCwweGNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDk1MCwgMCwgezB4MzksMHg2MCwweDBmLDB4NzgsMHgwMywweGRmLDB4MDAsMHhmNiwweDgwLDB4NzUsMHhlMCwweDBmLDB4NzgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHg4YywweDAwLDB4ZmIsMHgxMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDk3MCwgMCwgezB4MWYsMHhhMCwweDIxLDB4Y2MsMHgwMCwweGZhLDB4MDAsMHgzZSwweGMwLDB4MGUsMHhiMCwweDAzLDB4ZTgsMHgwMiwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDk4MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhlYSwweDAxLDB4M2EsMHhjMCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDk5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYywweDAwLDB4ZmYsMHg4MCwweDNmLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDlhMCwgMCwgezB4MDgsMHg5OSwweDA3LDB4N2UsMHgwMCwweGRkLDB4ODAsMHgzZiwweGUyLDB4MGMsMHhmOCwweDAzLDB4ZjYsMHgwMiwweGRmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDliMCwgMCwgezB4YjMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDNlLDB4NDEsMHhjYywweDgwLDB4MzMsMHhlNCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDljMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDQwLDB4YjcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDlkMCwgMCwgezB4MGQsMHg1YSwweDIyLDB4ZGMsMHg4MCwweDc1LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg3MSwweDAyLDB4ZjAsMHgyMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDllMCwgMCwgezB4MjEsMHhjMCwweDBhLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhkNCwweDI4LDB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDlmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDQwLDB4YjcsMHgwMCwweDJkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGEwMCwgMCwgezB4MDgsMHg3MiwweDIyLDB4ZjQsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMyLDB4MDgsMHg3MCwweDAyLDB4ZDQsMHgwMCwweDg3LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGExMCwgMCwgezB4MjUsMHg0MCwweDA5LDB4MzAsMHgwMiwweDVjLDB4MDEsMHhhZCwweDAwLDB4MjksMHhkMCwweDRiLDB4NzAsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGEyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4YmIsMHhjOCwweDJjLDB4YTAgfSB9LAoreyAgMTYsIDB4ZGEzMCwgMCwgezB4MDksMHgyMCwweDAyLDB4Y2UsMHgwMCwweGEzLDB4MDAsMHgyYywweGUwLDB4YTgsMHgzZCwweDQyLDB4YzIsMHgwMCwweDhiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGE0MCwgMCwgezB4MjQsMHg0MCwweDBiLDB4MzAsMHgwYSwweDZjLDB4MDgsMHhhMywweDQwLDB4YTgsMHhlMCwweDBiLDB4MzQsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZGE1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZCwweDAwLDB4ZmYsMHg0OCwweDNjLDB4MjggfSB9LAoreyAgMTYsIDB4ZGE2MCwgMCwgezB4MGMsMHhhOSwweDIzLDB4NmMsMHg4MCwweDhiLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmYywweDAzLDB4ZWMsMHgwMCwweGQ4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGE3MCwgMCwgezB4MzQsMHg0MCwweDBkLDB4MzAsMHgwMywweDdjLDB4MDIsMHhhMywweDQwLDB4MzgsMHg2OCwweDBmLDB4MjQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlZCwweDg4LDB4ZmIsMHgwMCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZGE5MCwgMCwgezB4MGYsMHhhMSwweDAzLDB4ZWMsMHgwNCwweDNhLDB4YzAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDgzLDB4ZTgsMHgwMiwweGY4LDB4MTAgfSB9LAoreyAgMTYsIDB4ZGFhMCwgMCwgezB4M2EsMHg0MSwweDBlLDB4OTAsMHgwMywweGFjLDB4MDAsMHg5YiwweDA4LDB4YjYsMHg0MCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweGIzLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGFjMCwgMCwgezB4MGMsMHg1MCwweDEzLDB4MWMsMHgwOSwweGNkLDB4ODMsMHgzMywweGMwLDB4ODMsMHg3MCwweDAwLDB4M2MsMHgwMCwweGRjLDB4MTAgfSB9LAoreyAgMTYsIDB4ZGFkMCwgMCwgezB4MzIsMHg2MCwweDBlLDB4ZjEsMHg0MywweDJjLDB4MDAsMHhjZSwweDA0LDB4M2IsMHg3MCwweDBjLDB4ZjAsMHg4MywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZGFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2NywweDgwLDB4YmIsMHgwMSwweDYyLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGFmMCwgMCwgezB4OGEsMHg4OSwweDIwLDB4MmMsMHgwMCwweDgwLDB4ZTAsMHgyMiwweGMwLDB4MGIsMHhiMCwweDAzLDB4ZDgsMHgxMCwweDhjLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGIwMCwgMCwgezB4MjIsMHg0MCwweDA1LDB4OTAsMHgwMiwweGFjLDB4MDAsMHhkOCwweDgwLDB4MzYsMHg0MCwweDBhLDB4OTAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGIxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNiwweDAwLDB4YmIsMHgwMCwweDIyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZGIyMCwgMCwgezB4MDgsMHg4MCwweDAyLDB4MmUsMHgwMCwweDg4LDB4MjAsMHgyMiwweGMwLDB4MDksMHhiMCwweDAyLDB4YTQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGIzMCwgMCwgezB4NjIsMHhjNCwweDA4LDB4YjAsMHgwNiwweDJjLDB4MDAsMHg4OCwweDgwLDB4MjIsMHg0MSwweDA4LDB4YTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGI1MCwgMCwgezB4MGEsMHgwMCwweDgyLDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDIyLDB4YTAsMHgwMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI2MCwgMCwgezB4YTAsMHhjMCwweDA5LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg5MCwweDAwLDB4MjQsMHg0MCwweDBhLDB4MjgsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZmIsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI4MCwgMCwgezB4MmMsMHg5MiwweDAzLDB4MmMsMHgwMiwweDg4LDB4MDAsMHgzMSwweGMwLDB4MGIsMHhiNSwweDAyLDB4YTQsMHgwMCwweGQxLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGI5MCwgMCwgezB4MzIsMHg0MCwweDBlLDB4OTAsMHgwMywweDJjLDB4NDAsMHhjOSwweDAwLDB4M2EsMHg0MCwweDhjLDB4YTAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZGJhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDJmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJiMCwgMCwgezB4MGYsMHhjMCwweDAzLDB4ZGMsMHgwMCwweGZjLDB4MDAsMHgzZiwweGMxLDB4MGYsMHhmMCwweDQzLDB4ZjAsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJjMCwgMCwgezB4M2YsMHg0MCwweDRmLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmNSwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZGJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkOCwweDgwLDB4Y2MsMHgwMCwweGI3LDB4MDQgfSB9LAoreyAgMTYsIDB4ZGJlMCwgMCwgezB4NGUsMHhlMSwweDAzLDB4M2MsMHgyMCwweGRmLDB4MTAsMHgzMSwweDgwLDB4MDYsMHhmMCwweDAzLDB4N2YsMHgwMCwweGZmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGJmMCwgMCwgezB4M2IsMHhjMCwweDBlLDB4ZjIsMHgwMywweDVlLDB4MDAsMHhlZiwweDEwLDB4MzMsMHhkMCwweDJjLDB4ZjIsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHhlOSwweDAwLDB4ODgsMHhjNiwweDIwLDB4NWMgfSB9LAoreyAgMTYsIDB4ZGMxMCwgMCwgezB4MDgsMHhhNCwweDU3LDB4NjUsMHgwMCwweDhmLDB4NTIsMHgyYSwweGYwLDB4MDksMHhmYywweDAyLDB4MDQsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMyMCwgMCwgezB4MmQsMHhkOSwweDA5LDB4NzQsMHg4MywweDY0LDB4MjgsMHg4MywweDQ0LDB4MjIsMHg4NCwweDg4LDB4MDYsMHg4MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGMzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhjOSwweDAwLDB4ODAsMHgxMCwweDIwLDB4MDggfSB9LAoreyAgMTYsIDB4ZGM0MCwgMCwgezB4MDgsMHgzMSwweDEyLDB4MDQsMHhiMiwweGEzLDB4MDAsMHgyMCwweDg0LDB4MWIsMHgzNCwweDAyLDB4MGMsMHg4MCwweGIzLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGM1MCwgMCwgezB4MmMsMHhjNywweDA5LDB4MzYsMHgwMiwweDhjLDB4ODAsMHg5MywweDQwLDB4YWMsMHhjOCwweDA4LDB4MzEsMHgyOCwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGM2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOSwweDAwLDB4ODgsMHgwMCwweGEyLDB4NTAgfSB9LAoreyAgMTYsIDB4ZGM3MCwgMCwgezB4MDgsMHgzNSwweDAyLDB4MjQsMHgwMCwweDhiLDB4MDQsMHgyZSwweGMxLDB4MDksMHhiMCwweDAyLDB4MjQsMHg5NCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGM4MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGNjLDB4NjAsMHg4YiwweDAwLDB4MmUsMHg4MCwweDA4LDB4ODAsMHgwMCwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlNywweDAyLDB4Y2IsMHgxOCwweGIyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGNhMCwgMCwgezB4MmMsMHhhYywweDBhLDB4MmUsMHgwOCwweGViLDB4MDAsMHgzMiwweDEyLDB4NGUsMHhiMCwweDAzLDB4MmIsMHg4MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGNiMCwgMCwgezB4M2EsMHhjMCwweDBhLDB4YjAsMHgwMywweGFiLDB4MDgsMHhlYiwweDA0LDB4MmUsMHg0OCwweDBjLDB4YjgsMHg4MywweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGNjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNiwweDgwLDB4ZmYsMHg4MCwweDM5LDB4Y2EgfSB9LAoreyAgMTYsIDB4ZGNkMCwgMCwgezB4MGQsMHhlOCwweDAzLDB4ZDYsMHg0MCwweGU3LDB4MDQsMHgzYiwweDY2LDB4NGUsMHg3MCwweDAzLDB4YjgsMHgwMCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGNlMCwgMCwgezB4M2YsMHhjMCwweDZjLDB4ZjAsMHgwMywweDcwLDB4MDYsMHhlNywweDAwLDB4MzEsMHgwNCwweDBmLDB4YzEsMHg0MywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4NSwweDAwLDB4Y2IsMHg0MCwweDMyLDB4OTAgfSB9LAoreyAgMTYsIDB4ZGQwMCwgMCwgezB4MmYsMHhiMCwweDBiLDB4NjQsMHg4MCwweGZiLDB4MDgsMHhiYSwweDEwLDB4MGQsMHhiMCwweGE3LDB4MmQsMHgwMCwweGZiLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGQxMCwgMCwgezB4M2UsMHhjMCwweDhlLDB4YjAsMHgwMywweDZkLDB4MDAsMHhkYiwweDAxLDB4MzIsMHg0MCwweDhjLDB4MzMsMHgwMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHgyNCwweDAwLDB4ODMsMHhlMCwweGEyLDB4ZDAgfSB9LAoreyAgMTYsIDB4ZGQzMCwgMCwgezB4NDAsMHhiMCwweDAyLDB4MjUsMHgwNCwweGJmLDB4ODAsMHhhMCwweDUwLDB4MDgsMHhmOCwweDAyLDB4MjAsMHgwMCwweDhiLDB4MDIgfSB9LAoreyAgMTYsIDB4ZGQ0MCwgMCwgezB4MmYsMHhkMCwweDA4LDB4ZjAsMHgwMiwweDI0LDB4MDAsMHg4ZiwweDgwLDB4MzYsMHgwMSwweDA4LDB4ODQsMHg0MiwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGQ1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg0NCwweDAwLDB4ODMsMHg0OCwweDIwLDB4YzQgfSB9LAoreyAgMTYsIDB4ZGQ2MCwgMCwgezB4MDksMHgwMCwweDAyLDB4NDYsMHgwMCwweGIzLDB4MDEsMHhhOCwweDkwLDB4MTksMHgzMCwweDEyLDB4OGMsMHgwMCwweGEzLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGQ3MCwgMCwgezB4MmUsMHhlMiwweDBhLDB4YjAsMHgwMiwweDBjLDB4MDAsMHg4MywweDQ5LDB4MjgsMHhjMCwweDA5LDB4M2MsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGQ4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4MDEsMHgzNiwweDA0LDB4ODMsMHg4MCwweDIxLDB4ZTEgfSB9LAoreyAgMTYsIDB4ZGQ5MCwgMCwgezB4MDgsMHgzOCwweDEyLDB4MWUsMHgyOCwweGIzLDB4OTgsMHgyMSwweGEwLDB4MTksMHgzOCwweDgyLDB4OTYsMHgwMCwweDg3LDB4ODMgfSB9LAoreyAgMTYsIDB4ZGRhMCwgMCwgezB4MmQsMHhlMiwweDA4LDB4NzgsMHgyMiwweDM2LDB4OGMsMHg4NywweDgwLDB4MmQsMHhlMCwweDA5LDB4NzksMHgwMiwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGRiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwNCwweDAwLDB4YzMsMHgzMCwweDMwLDB4YzggfSB9LAoreyAgMTYsIDB4ZGRjMCwgMCwgezB4NGQsMHgwMCwweDBiLDB4NGMsMHg4MCwweGYzLDB4MTIsMHgzOCwweGMwLDB4MGQsMHgzYSwweDAyLDB4OGMsMHg4MCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGRkMCwgMCwgezB4M2MsMHhjMCwweDBlLDB4MzAsMHgwYiwweDBlLDB4MDAsMHhjMywweDBjLDB4M2EsMHhjMCwweDBkLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZGRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiNCwweDA2LDB4ZmYsMHgxMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGRmMCwgMCwgezB4MGYsMHhiMCwweDEzLDB4YmMsMHgwMCwweGZmLDB4MTAsMHg3ZiwweGMwLDB4MGUsMHhmMSwweGEzLDB4N2MsMHgwMCwweGZmLDB4MTIgfSB9LAoreyAgMTYsIDB4ZGUwMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjUsMHgyMywweGJjLDB4NDEsMHhlZiwweDE4LDB4MzcsMHg4MCwweGFlLDB4YzAsMHgwMywweDUwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZGUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZGIsMHgwMCwweDNlLDB4ZGEgfSB9LAoreyAgMTYsIDB4ZGUyMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NjYsMHgxMCwweDhiLDB4MDAsMHgzMiwweDgwLDB4OGMsMHhiNiwweDAzLDB4NGEsMHgwMCwweDRiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGUzMCwgMCwgezB4MzIsMHhjOCwweDBjLDB4YjQsMHgwMywweDBhLDB4MTAsMHhkYiwweDAwLDB4M2UsMHhjMSwweDBjLDB4YjAsMHg0MywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGU0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MTEsMHhiNCwweDAwLDB4ODcsMHgwNCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGU1MCwgMCwgezB4MGQsMHg3MCwweDAzLDB4MWMsMHgwOCwweDg3LDB4NDgsMHgyMCwweDgxLDB4MGQsMHg3MiwweDgyLDB4NWMsMHgwMCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGU2MCwgMCwgezB4MjEsMHhjYywweDI4LDB4ZjAsMHgwMiwweDFjLDB4MTAsMHg4NywweDIwLDB4MmMsMHgwMCwweDA4LDB4NDAsMHgwYSwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGU3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5NiwweDAwLDB4YjcsMHg4MSwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZGU4MCwgMCwgezB4MDgsMHg0OCwweDAyLDB4MGUsMHgwNCwweDg3LDB4ODAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4M2UsMHgwMSwweDg3LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGU5MCwgMCwgezB4MjEsMHhlMCwweDE4LDB4NzksMHgwMiwweDNhLDB4MDEsMHg5NywweGEwLDB4MmQsMHg2MCwweDA4LDB4MzgsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjNiwweDAwLDB4YTMsMHhjNiwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGViMCwgMCwgezB4MDksMHgzMCwweDAyLDB4MGMsMHgwMSwweDgzLDB4MDAsMHgyMCwweGUwLDB4MDksMHgzMCwweDAyLDB4NGUsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVjMCwgMCwgezB4MjAsMHhjMCwweDQ5LDB4MzAsMHgyMiwweDBmLDB4NjQsMHg4MywweDAyLDB4NmMsMHhkNCwweDI4LDB4MzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGVkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTEsMHhhYiwweDgwLDB4ZmEsMHhlMCwweDNjLDB4ODggfSB9LAoreyAgMTYsIDB4ZGVlMCwgMCwgezB4MGMsMHhlMCwweDAyLDB4MjgsMHgwMiwweGNhLDB4MDAsMHhiMywweGE5LDB4MGMsMHhhMCwweDAzLDB4M2IsMHgxMCwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVmMCwgMCwgezB4YTIsMHg4MCwweDBjLDB4YTAsMHgwYiwweDM4LDB4MDAsMHhkYSwweDAwLDB4M2YsMHhiMCwweDBjLDB4ZTYsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGYwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhjMCwweDIwLDB4OTgsMHgwOCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYxMCwgMCwgezB4MGYsMHg4MCwweDBiLDB4ZTEsMHgwMCwweGY4LDB4MDEsMHgzYywweDEwLDB4NGYsMHgwMCwweDAzLDB4YTAsMHg0MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYyMCwgMCwgezB4M2UsMHgxMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2MsMHgwMiwweDJmLDB4MDQsMHg5MywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzEsMHhjMSwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGY0MCwgMCwgezB4MGMsMHg5OCwweDAzLDB4MjYsMHg0MCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5OCwweDAzLDB4MjQsMHgyNCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY1MCwgMCwgezB4M2MsMHg2MCwweDBjLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDgyLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NTAgfSB9LAoreyAgMTYsIDB4ZGY3MCwgMCwgezB4MGQsMHg5OCwweDAyLDB4MjUsMHg4MCwweGI5LDB4MDAsMHgyMiwweDUyLDB4MGQsMHg5YywweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY4MCwgMCwgezB4MmUsMHg2MCwweDA4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSwweDQwLDB4MzYsMHg0MCwweDA4LDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OGQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGZhMCwgMCwgezB4MDgsMHgxMiwweDAyLDB4MjQsMHgwMCwweGExLDB4MTAsMHhhMiwweDYwLDB4MDgsMHg5MiwweDhhLDB4MjQsMHgwMCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4ZGZiMCwgMCwgezB4MmUsMHg0NiwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiMSwweDUwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHg4MiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGZjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDg0LDB4ODUsMHgyMCwweGExLDB4ZDggfSB9LAoreyAgMTYsIDB4ZGZkMCwgMCwgezB4MDksMHgxMCwweDAyLDB4MDQsMHg4MCwweGIzLDB4MjAsMHgyMCwweDQwLDB4MjksMHgxMiwweDA2LDB4MDQsMHgwMCwweGIxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGZlMCwgMCwgezB4MmMsMHg0OCwweDI4LDB4MTIsMHgwMiwweDA0LDB4MDAsMHhiMSwweDIwLDB4MjQsMHg0OCwweDA4LDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQyLDB4OGEsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTAwMCwgMCwgezB4MGMsMHgwNSwweDAzLDB4MjEsMHg0MCwweGUwLDB4NTAsMHhiMiwweDAwLDB4MmMsMHg4MCwweDAyLDB4MjEsMHg0MCwweGYwLDB4NTAgfSB9LAoreyAgMTYsIDB4ZTAxMCwgMCwgezB4M2MsMHgxNCwweDBjLDB4ODUsMHgxMywweGExLDB4NTAsMHhmOCwweDUwLDB4MzIsMHgxNCwweDBjLDB4ODUsMHgyMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZTAyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZTAzMCwgMCwgezB4MGYsMHhkNCwweDBiLDB4ZjQsMHg0NCwweGY5LDB4MTAsMHgzZiwweDUwLDB4NGYsMHgxMSwweDAzLDB4ZjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTA0MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4OTEsMHg1MywweGY0LDB4MTQsMHhmOSwweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDIgfSB9LAoreyAgMTYsIDB4ZTA1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MDUsMHhlNiwweGEwLDB4ZGQsMHg4OCwweGIzLDB4NjYgfSB9LAoreyAgMTYsIDB4ZTA2MCwgMCwgezB4MGMsMHhkYywweDgzLDB4MzYsMHg4OCwweGJkLDB4YTAsMHgzNywweDZhLDB4MGMsMHhkYSwweDBiLDB4MjUsMHgwMiwweGM5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZTA3MCwgMCwgezB4M2YsMHg3OCwweDRmLDB4OTgsMHhiMywweGU1LDB4MDQsMHhjZCwweGEwLDB4NzIsMHg3OCwweDBjLDB4ZDgsMHg4YiwweDI2LDB4MTQgfSB9LAoreyAgMTYsIDB4ZTA4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMywweDAwLDB4ODgsMHg0MiwweDIyLDB4MzEgfSB9LAoreyAgMTYsIDB4ZTA5MCwgMCwgezB4MDgsMHgwYSwweDAyLDB4MjIsMHhhMCwweGI4LDB4ZjksMHgyMiwweDEwLDB4MGQsMHg4NCwweDEyLDB4NmEsMHg4MCwweDg4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTBhMCwgMCwgezB4MmUsMHgyMCwweDBiLDB4MDgsMHgwMiwweGUyLDB4ODAsMHhhOCwweGE4LDB4YTIsMHgzOCwweDQ4LDB4YTgsMHgwMiwweDBlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweGEyLDB4ODEsMHgwMCwweDIwLDB4NDggfSB9LAoreyAgMTYsIDB4ZTBjMCwgMCwgezB4MDgsMHgxMiwweDQyLDB4NDUsMHgwMCwweGIxLDB4MDAsMHgyNCwweDQwLDB4MDksMHgxNCwweDAyLDB4MjQsMHgwMCwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTBkMCwgMCwgezB4MmMsMHg1OCwweDBiLDB4MTAsMHg4MiwweGM0LDB4MDQsMHg5MSwweDQwLDB4NjQsMHg2YywweDA4LDB4MzAsMHg4MiwweDEyLDB4MDUgfSB9LAoreyAgMTYsIDB4ZTBlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTBmMCwgMCwgezB4MDgsMHg5MCwweDhhLDB4NjQsMHg4MCwweGI5LDB4MDAsMHgyMiwweDUwLDB4MDksMHg5MCwweDA2LDB4NjQsMHgwOCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEwMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwNiwweGM0LDB4MDEsMHhiOSwweDAyLDB4MjYsMHg2MSwweDg4LDB4OTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTEyMCwgMCwgezB4MmMsMHg5NCwweDIzLDB4NjQsMHgwMCwweGI5LDB4MDAsMHgzNiwweDQwLDB4MDksMHg5MCwweDEzLDB4MDUsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEzMCwgMCwgezB4M2UsMHg0MCwweDRmLDB4OTAsMHgxMywweGU1LDB4YzAsMHhkOSwweDAwLDB4MjYsMHg0MCwweDJjLDB4OTQsMHgwMywweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDEsMHhhNCwweDAyLDB4ZTksMHgwOCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTE1MCwgMCwgezB4MGYsMHg5MCwweDBiLDB4YTQsMHgwMCwweGYxLDB4MDAsMHgzZSwweDQxLDB4MGYsMHg5MCwweDQzLDB4YTQsMHg4OCwweGU5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTE2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhlMSwweDAwLDB4M2EsMHg0MCwweDlmLDB4OTIsMHg2MywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MCwweDEwLDB4ZTAsMHgwMSwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE4MCwgMCwgezB4OGYsMHg4MCwweDAzLDB4MjAsMHgwMCwweGQ4LDB4MDgsMHgzMCwweDAxLDB4OGMsMHgwMCwweDAzLDB4ZTEsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTE5MCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwYiwweDIxLDB4MDAsMHhjOCwweDAwLDB4NzgsMHgwMCwweDBmLDB4ODYsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHg0MCwweDJiLDB4ODIgfSB9LAoreyAgMTYsIDB4ZTFiMCwgMCwgezB4MGIsMHhhMCwweDAyLDB4M2EsMHgwMCwweDhlLDB4ODAsMHgyMywweDgyLDB4MDgsMHhlMiwweDAyLDB4MjgsMHgxMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFjMCwgMCwgezB4MmYsMHg5OCwweDI4LDB4YTAsMHgxMiwweDI4LDB4MDAsMHg4ZSwweDIwLDB4MmUsMHg4MCwweDRiLDB4ZTQsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAyLDB4YTIsMHg0MCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTFlMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4NGUsMHg0MCwweDkzLDB4YzAsMHhhMCwweDIwLDB4MDgsMHgzNiwweDAyLDB4OGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFmMCwgMCwgezB4MmMsMHhlMiwweDA4LDB4MzAsMHgwNiwweDRjLDB4MTIsMHg5MywweDA4LDB4MjgsMHhjMCwweDBiLDB4YjAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDA4LDB4ODIsMHg0MCwweDI5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZTIxMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4NWUsMHgwOCwweDg0LDB4MDgsMHgyMywweDQwLDB4MDgsMHg3MCwweDA2LDB4MWMsMHg4MCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIyMCwgMCwgezB4MmQsMHgyMCwweDA4LDB4NzksMHgxMiwweDVjLDB4MDAsMHg5NCwweDAwLDB4MmQsMHhjMCwweDBiLDB4MzAsMHg0MiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDAwLDB4ZTQsMHg4MCwweDMxLDB4YTEgfSB9LAoreyAgMTYsIDB4ZTI0MCwgMCwgezB4MGYsMHg1OCwweDEzLDB4NzYsMHgwMCwweGQwLDB4ODAsMHgzMSwweGMwLDB4MGMsMHgzOCwweDAzLDB4YmUsMHg4MCwweGQ3LDB4ODEgfSB9LAoreyAgMTYsIDB4ZTI1MCwgMCwgezB4M2YsMHgyMCwweDhjLDB4NzksMHgwMywweDdmLDB4MDEsMHhkNiwweDgwLDB4MzksMHhlOCwweDRmLDB4NjgsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhiZSwweDAwLDB4ZmEsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI3MCwgMCwgezB4OGYsMHg5NiwweDBiLDB4YTQsMHgwMCwweGVhLDB4MDAsMHgzYywweGMwLDB4MGYsMHg5MCwweDAzLDB4YWMsMHgyMCwweGZiLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTI4MCwgMCwgezB4MmUsMHgwMCwweDBmLDB4YjIsMHgwMywweGFkLDB4YTAsMHhlYSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YTAsMHgxYiwweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDA4LDB4ZGUsMHg4MSwweDMzLDB4YTQgfSB9LAoreyAgMTYsIDB4ZTJhMCwgMCwgezB4MGUsMHhmYywweDEzLDB4M2UsMHgwMCwweGZjLDB4ODAsMHgxMywweDIwLDB4MGMsMHg2OCwweDAzLDB4M2UsMHgyMCwweGZmLDB4YzggfSB9LAoreyAgMTYsIDB4ZTJiMCwgMCwgezB4M2YsMHg2MCwweDFkLDB4ZjgsMHgwMywweDdlLDB4MDAsMHhjNywweDgwLDB4MzMsMHhlMiwweDBjLDB4ZDgsMHgwMywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ODYsMHg0MSwweDMxLDB4YzQgfSB9LAoreyAgMTYsIDB4ZTJkMCwgMCwgezB4MDgsMHg3OSwweDQyLDB4OWMsMHgwMCwweGJjLDB4MTAsMHgyMSwweDQwLDB4ODUsMHgzNSwweDAzLDB4NWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJlMCwgMCwgezB4MmQsMHhjMCwweDA4LDB4NzIsMHgwMiwweDJjLDB4MDAsMHhhNywweDAxLDB4MzcsMHhjMCwweDA4LDB4NTEsMHg0MiwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg4YywweDQwLDB4ODIsMHgwMCwweDI0LDB4ODEgfSB9LAoreyAgMTYsIDB4ZTMwMCwgMCwgezB4MDgsMHhkOCwweDAyLDB4MTQsMHgyMCwweGI1LDB4MDAsMHgyMCwweDQwLDB4MDksMHg2MCwweDAyLDB4MWMsMHg0MCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTMxMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MzAsMHgyMiwweGRjLDB4MDAsMHg5NywweDAwLDB4MjEsMHhjNCwweDA4LDB4NDAsMHgwMiwweDQ0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhlYywweDAwLDB4OTIsMHgwNiwweDIwLDB4OTAgfSB9LAoreyAgMTYsIDB4ZTMzMCwgMCwgezB4MzgsMHgxNSwweDAyLDB4ODYsMHgwMCwweGI4LDB4MDAsMHg2MCwweDUwLDB4MDksMHgzMCwweDAyLDB4NGUsMHgwMSwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM0MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4MzAsMHgwMiwweGNlLDB4MjAsMHhiMywweDAwLDB4MjQsMHhmMCwweDQ4LDB4MDIsMHgwYSwweDU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTM1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4Y2EsMHgwMCwweGE2LDB4OTQgfSB9LAoreyAgMTYsIDB4ZTM2MCwgMCwgezB4MmMsMHg5MCwweDAzLDB4MmUsMHgwMCwweGZiLDB4MDUsMHhiMiwweDg1LDB4MGQsMHg5MCwweDAzLDB4M2YsMHg5MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM3MCwgMCwgezB4N2UsMHg4MCwweDFmLDB4ZjAsMHg0MywweGZjLDB4MjEsMHg5YSwweDAwLDB4MzMsMHhjOCwweDNjLDB4YjIsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTM4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHhlYywweDAyLDB4ZWEsMHg0MCwweDNkLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTM5MCwgMCwgezB4MGYsMHgxMCwweDkzLDB4ZWQsMHgwMCwweGZiLDB4NDAsMHgzZSwweDkwLDB4OGYsMHgzMCwweDAzLDB4ZWMsMHg4MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNhMCwgMCwgezB4M2UsMHg5MSwweDFjLDB4YjAsMHgwMywweDJjLDB4MTAsMHhlOCwweDAwLDB4M2UsMHhjOCwweDFmLDB4OTAsMHgwMywweGE1LDB4MTAgfSB9LAoreyAgMTYsIDB4ZTNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhmYywweDAyLDB4ZTQsMHgwMCwweDczLDB4YTAgfSB9LAoreyAgMTYsIDB4ZTNjMCwgMCwgezB4MGMsMHhmYywweDAzLDB4N2MsMHgwMiwweGZmLDB4MTAsMHgxMywweGM0LDB4MWMsMHhjMCwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNkMCwgMCwgezB4MzcsMHhlMCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZCwweDgwLDB4MzEsMHhjMCwweDBjLDB4MzIsMHg2MywweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTNlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4MDAsMHg2YywweDAwLDB4OGEsMHhjMCwweDIyLDB4YjEgfSB9LAoreyAgMTYsIDB4ZTNmMCwgMCwgezB4OGEsMHhiOCwweDQzLDB4NGEsMHgxMCwweGRiLDB4MjAsMHgyMCwweGYwLDB4MGEsMHg5NCwweDAzLDB4NmMsMHgwMCwweGJiLDB4MDcgfSB9LAoreyAgMTYsIDB4ZTQwMCwgMCwgezB4MjIsMHhiOCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MTEsMHhlOCwweGMwLDB4YjIsMHhjMCwweDJhLDB4OTIsMHgxYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyYywweDAwLDB4YWEsMHg4MCwweDIyLDB4OTggfSB9LAoreyAgMTYsIDB4ZTQyMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MmYsMHgwMywweGJiLDB4MDEsMHgyYSwweDgzLDB4MDgsMHhiMiwweDRlLDB4MmMsMHgwNCwweGFiLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTQzMCwgMCwgezB4MjIsMHhjNCwweDI4LDB4YjAsMHgyMiwweGVjLDB4MDksMHhiMywweDUwLDB4NjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAxLDB4ODMsMHgwMCwweDYwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTQ1MCwgMCwgezB4MDgsMHgxMiwweDBhLDB4NDQsMHgwMCwweDkzLDB4MDAsMHgyYSwweDgwLDB4NGEsMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ2MCwgMCwgezB4NjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4NjAsMHhjMCwweDA4LDB4MDAsMHg0NiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGQsMHg2YywweDAwLDB4ZTgsMHgwMiwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTQ4MCwgMCwgezB4MmMsMHhmMiwweDQzLDB4MmMsMHgwMCwweGZiLDB4MDAsMHhiYSwweGMwLDB4MDgsMHhhNSwweDAyLDB4M2MsMHgwMCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ5MCwgMCwgezB4MzYsMHhjMCwweDRkLDB4ZjAsMHgxMywweGZkLDB4NTEsMHhmYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMywweDIwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTRhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4N2UsMHgwNCwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTRiMCwgMCwgezB4MGYsMHgzMSwweDQzLDB4ZjAsMHgwMiwweGZmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MTYgfSB9LAoreyAgMTYsIDB4ZTRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMiwweDQwLDB4ZmMsMHg4MCwweDNmLDB4MjQgfSB9LAoreyAgMTYsIDB4ZTRlMCwgMCwgezB4MGQsMHhkOCwweDUzLDB4ZDYsMHgwNCwweGRmLDB4MzIsMHgzZiwweGNjLDB4NGMsMHhjMCwweDQzLDB4ZmMsMHgwMCwweGRmLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTRmMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4YzQsMHgwMywweDdjLDB4ZDAsMHhkZiwweDIwLDB4MzMsMHhkOCwweDBkLDB4ZjgsMHg0MywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTUwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTgsMHhlOCwweDgwLDB4YjAsMHgwMSwweDJlLDB4MDggfSB9LAoreyAgMTYsIDB4ZTUxMCwgMCwgezB4ODgsMHg5MCwweDAyLDB4ZWMsMHgyMCwweDhiLDB4NzAsMHgyZiwweGNjLDB4MDgsMHhiMywweDgyLDB4ZmQsMHhlMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTUyMCwgMCwgezB4MjIsMHhkOCwweDBiLDB4OTMsMHgwMiwweGZkLDB4YzAsMHhhZiwweDEwLDB4MjgsMHhmMCwweDA4LDB4YmMsMHgxMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDAwLDB4YjAsMHgwMCwweDJlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTU0MCwgMCwgezB4MGEsMHgxMiwweDgyLDB4ZWMsMHg4MCwweGIzLDB4MDAsMHgyYywweGM4LDB4MGEsMHgwMCwweDMyLDB4OGMsMHgwMCwweGEzLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTU1MCwgMCwgezB4MjAsMHhkMiwweDA5LDB4MDAsMHgwMiwweDhjLDB4ODAsMHg4MywweDAwLDB4MjgsMHhkOCwweDBiLDB4MzQsMHgxMiwweGYyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTU2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhhYywweDAxLDB4YjgsMHgwMiwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU3MCwgMCwgezB4MGEsMHg5MCwweDEyLDB4ZWMsMHgxMCwweDhiLDB4MDAsMHgyZSwweGMwLDB4MGEsMHhiMCwweDAwLDB4ZWMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU4MCwgMCwgezB4MjIsMHhjMSwweDBiLDB4OTIsMHgwMiwweGNjLDB4MDEsMHhhYiwweDAwLDB4MmEsMHhjMCwweDAyLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMCwweDAwLDB4ZmEsMHgwYywweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTVhMCwgMCwgezB4MGYsMHhhMCwweDEzLDB4ZWUsMHgyMCwweGRiLDB4MDAsMHgzZSwweGMwLDB4MmUsMHg4OCwweDUzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTViMCwgMCwgezB4YjIsMHhjMCwweDhmLDB4YWMsMHg4MywweGFjLDB4MDgsMHhkYiwweDAwLDB4MWEsMHhjMCwweDRmLDB4YjAsMHgwMywweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDAwLDB4ZmUsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTVkMCwgMCwgezB4MmQsMHhlMCwweDAzLDB4ZmUsMHg4MCwweDdmLDB4MDAsMHgzZiwweGMwLDB4MGQsMHhkMiwweDAzLDB4ZmMsMHgwMCwweGJmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTVlMCwgMCwgezB4M2UsMHhjMCwweDBkLDB4YzgsMHgwMywweGZjLDB4MGMsMHhmZiwweDAwLDB4M2YsMHhjMCwweDA5LDB4ZjAsMHgyMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNCwweDAwLDB4ZmEsMHg0MCwweDMyLDB4YzEgfSB9LAoreyAgMTYsIDB4ZTYwMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4MjksMHgwOCwweGRiLDB4MDAsMHgzZSwweGMwLDB4MGUsMHg4NSwweDAzLDB4ZWMsMHgyMCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTYxMCwgMCwgezB4M2EsMHhjMCwweDBlLDB4YTQsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2EsMHhjMiwweDBlLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YmEsMHg2MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTYzMCwgMCwgezB4MGIsMHhhMCwweDAyLDB4MDgsMHgwMCwweGFmLDB4MDAsMHgyZiwweGQwLDB4MGIsMHhiNSwweDAyLDB4ZmUsMHgwMiwweDhmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY0MCwgMCwgezB4MmYsMHhjMCwweDBkLDB4ODAsMHgwYSwweDNjLDB4MDAsMHhiNywweDAwLDB4MjMsMHhjMiwweDA1LDB4ZjAsMHgyMiwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDQsMHg0MCwweDAwLDB4YjEsMHg4OCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY2MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyZSwweGM4LDB4MGIsMHgwOCwweDA2LDB4NGQsMHg0MCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY3MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHgwNiwweDBjLDB4MDgsMHg5MywweDIwLDB4MGEsMHhlMCwweDRhLDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTAsMHg1YSwweDAwLDB4YjUsMHg5MCwweDIxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTY5MCwgMCwgezB4MGIsMHg1OCwweDQyLDB4M2UsMHgwMCwweGE3LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg2OSwweDAyLDB4ZGUsMHg0MCwweDg3LDB4OTIgfSB9LAoreyAgMTYsIDB4ZTZhMCwgMCwgezB4MmQsMHhlMCwweDA5LDB4MTgsMHgwMiwweDllLDB4MDEsMHhiNywweDgwLDB4MjksMHhlMCwweDAzLDB4NzAsMHgwMiwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHg0NCwweDAwLDB4ZjEsMHgwMSwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZjMCwgMCwgezB4NWYsMHgxOCwweDAzLDB4MGMsMHgxMCwweDgzLDB4MDAsMHgzYywweGM0LDB4MGUsMHgwNCwweDAzLDB4ZWMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZkMCwgMCwgezB4MzAsMHhjNCwweDBjLDB4MzEsMHgwMywweDhjLDB4MDAsMHhmMywweDAwLDB4MzgsMHhjOCwweDBlLDB4MzEsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhiYywweDAwLDB4ZmQsMHgwNCwweGJmLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTZmMCwgMCwgezB4NGYsMHg1OCwweDAzLDB4ZjgsMHgwOCwweGVmLDB4MDgsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAxLDB4ZmMsMHgwMCwweGZmLDB4NGMgfSB9LAoreyAgMTYsIDB4ZTcwMCwgMCwgezB4M2YsMHhjMSwweDBmLDB4ZDAsMHgwMywweDNjLDB4MDAsMHhmNywweDAwLDB4MzcsMHhjMiwweDBkLDB4NzIsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZTcxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhlMiwweDAwLDB4ZGIsMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTcyMCwgMCwgezB4NGQsMHhhOCwweDAzLDB4MmMsMHgwOCwweGZiLDB4MDAsMHg3ZSwweGM4LDB4OGYsMHhiMCwweDBiLDB4NmYsMHg0NSwweGViLDB4YzIgfSB9LAoreyAgMTYsIDB4ZTczMCwgMCwgezB4MzYsMHhjMCwweDA3LDB4YTAsMHgwMywweGVmLDB4MjAsMHhjYiwweDUwLDB4YjIsMHhjMCwweDBjLDB4NzksMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTc0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTksMHg5OCwweDAwLDB4OGYsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTc1MCwgMCwgezB4MGIsMHg2MCwweDAzLDB4NWMsMHgwMCwweDM3LDB4MDAsMHgyZCwweGQyLDB4MGIsMHgzMCwweDAyLDB4MGMsMHhhOCwweDg3LDB4MjQgfSB9LAoreyAgMTYsIDB4ZTc2MCwgMCwgezB4MjEsMHhkMCwweDA5LDB4NzAsMHgwMiwweGRkLDB4ODgsMHg4NywweDJhLDB4MjMsMHhlOCwweDA4LDB4NzAsMHgwMiwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTc3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHhiNiwweDAwLDB4OTcsMHg4MCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZTc4MCwgMCwgezB4MGIsMHg2OCwweDAyLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyZCwweGU4LDB4OGIsMHg0OCwweDgyLDB4MWUsMHg4MCwweGEzLDB4ODQgfSB9LAoreyAgMTYsIDB4ZTc5MCwgMCwgezB4MjUsMHhlOCwweDBiLDB4NjgsMHgwMiwweGNlLDB4MDIsMHg4NywweDgwLDB4MjEsMHhlMCwweDA4LDB4N2EsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDQsMHhjYywweDA4LDB4ODMsMHg4MiwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZTdiMCwgMCwgezB4OGIsMHgyYSwweDAyLDB4NDgsMHg0MCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDgyLDB4MGMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdjMCwgMCwgezB4MDAsMHhjMSwweDA5LDB4MzEsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwYSwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTdkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhlOCwweDAwLDB4ZGEsMHhhMCwweDMyLDB4YTggfSB9LAoreyAgMTYsIDB4ZTdlMCwgMCwgezB4OGQsMHhhOCwweDAzLDB4M2IsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhlNCwweDAzLDB4NjgsMHgwMCwweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTdmMCwgMCwgezB4MzYsMHg4MCwweDBmLDB4ZTQsMHgwMywweGU4LDB4MDAsMHhjYSwweDAwLDB4MzIsMHg4MCwweDJjLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTgwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDEsMHhhMCwweDEwLDB4ZjgsMHgwMCwweGJlLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTgxMCwgMCwgezB4OGYsMHhjMSwweDAzLDB4ZTAsMHgyNCwweGY4LDB4MDAsMHgzZSwweDEwLDB4MGYsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZTgyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAxLDB4YmUsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTgzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZjksMHg0MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTg0MCwgMCwgezB4Y2YsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgwZSwweDUwLDB4MGYsMHgxYSwweDAzLDB4MjYsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTg1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHg4MSwweGU0LDB4MDAsMHhmOSwweDgwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTg2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA0LDB4YjEsMHgwNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTg3MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDUzLDB4MGIsMHg5MiwweDBhLDB4MjYsMHg0OCwweGI5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTg4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDgwLDB4MDIsMHg1MCwweDA4LDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTg5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDUsMHgyNCwweDAwLDB4YmQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZThhMCwgMCwgezB4MGIsMHhkMCwweDEyLDB4YzQsMHgwMCwweDg5LDB4MDIsMHgyZSwweDQwLDB4MGIsMHg5MCwweDIyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZThiMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiMSwweDIwLDB4MjAsMHg0MCwweDY4LDB4OTAsMHgyMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZThjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTQsMHgxNCwweDAwLDB4YmYsMHgxMiwweGExLDB4NDAgfSB9LAoreyAgMTYsIDB4ZThkMCwgMCwgezB4MGIsMHg1MCwweDAyLDB4YzQsMHgwMCwweGExLDB4MjAsMHgyYywweDQ4LDB4MGIsMHgxMiwweDAyLDB4MDQsMHgxMCwweGIxLDB4MTEgfSB9LAoreyAgMTYsIDB4ZThlMCwgMCwgezB4MmMsMHg0OCwweDBiLDB4MTMsMHgyMiwweGM0LDB4MDAsMHhiMSwweDQwLDB4MjAsMHg1YSwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZThmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg0MCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4ZTkwMCwgMCwgezB4MGYsMHg0NSwweDAzLDB4ZTEsMHg0MCwweGM4LDB4NTAsMHgzZSwweDE1LDB4OGYsMHg4NSwweDAzLDB4MjEsMHhlOCwweGY4LDB4NjggfSB9LAoreyAgMTYsIDB4ZTkxMCwgMCwgezB4M2UsMHgxNCwweDBmLDB4ODQsMHgwMywweGUxLDB4ZTAsMHhmMCwweDI4LDB4MzIsMHhhOCwweGNjLDB4ODAsMHgyMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZTkyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MTUsMHhjNCwweDEwLDB4ZjksMHgyMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTkzMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZjQsMHgwMCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHhkMSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTk0MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4ZDMsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4YmUsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZTk1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhlNCwweDAwLDB4ZmQsMHgxMCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTk2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzZiwweDQwLDB4NGMsMHhkMCwweDAzLDB4ZjYsMHgwMCwweGZkLDB4OTAgfSB9LAoreyAgMTYsIDB4ZTk3MCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweGU2LDB4YTAsMHhmZCwweGE4LDB4MzcsMHg2OCwweDBjLDB4ZDgsMHg4MywweDI2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTk4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDA4LDB4YzgsMHhhMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTk5MCwgMCwgezB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHg4MCwweDEyLDB4ZTAsMHgwMCwweGI4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTlhMCwgMCwgezB4MjIsMHgwMCwweDBkLDB4MGEsMHgwMiwweGUzLDB4ODAsMHhiMCwweGMwLDB4MjAsMHgzNCwweDA4LDB4ODQsMHgwMywweDRlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTliMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg4NCwweDA5LDB4YTEsMHgwMCwweDIwLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTljMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDkxLDB4MDAsMHgyYywweDQwLDB4MDgsMHgxMCwweDAyLDB4YzUsMHgwMCwweGIxLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTlkMCwgMCwgezB4MjAsMHg0MCwweDA4LDB4MTAsMHhhMiwweGM0LDB4MjAsMHhiMSwweDI4LDB4MjQsMHg0YSwweDA4LDB4MTAsMHgwMiwweDUyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTllMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTQsMHhhNCwweDAxLDB4ODEsMHgwMCwweGEyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTlmMCwgMCwgezB4YTgsMHg5MCwweDAwLDB4MjUsMHg0MCwweDg5LDB4MDEsMHgyYywweDQwLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWEwMCwgMCwgezB4MmEsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDA0LDB4MjIsMHg0MSwweDQ4LDB4OTAsMHgwMiwweDQ2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTQsMHhhNSwweDIwLDB4ZTksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWEyMCwgMCwgezB4NGMsMHgxMCwweDBiLDB4MjYsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MmMsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWEzMCwgMCwgezB4YjIsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDJjLDB4OTAsMHgwMywweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDEsMHhhNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWE1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE2MCwgMCwgezB4MzYsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhMSwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE4MCwgMCwgezB4MGYsMHg4MCwweDEzLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDA0LDB4OGMsMHg4MCwweDAzLDB4YTAsMHhjMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE5MCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjMCwweDA5LDB4MzIsMHgwMCwweDRjLDB4ODAsMHgwMSwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4YmUsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWFiMCwgMCwgezB4MGIsMHhlMCwweDAyLDB4ODgsMHgwMCwweGFhLDB4MDAsMHgwMywweGEwLDB4MGEsMHhlNiwweDAyLDB4ZmEsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFjMCwgMCwgezB4MzIsMHg4MCwweDBiLDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4ZSwweDgwLDB4YTMsMHg4MCwweDI4LDB4MjAsMHgwMiwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAwLDB4YjMsMHg0OCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWFlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzNCwweDgyLDB4OGUsMHgwNCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFmMCwgMCwgezB4MGEsMHhjMCwweDFiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg5MCwweDUwLDB4MjAsMHg2MCwweDA4LDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWIwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTEsMHgxYywweDgwLDB4YmQsMHgwYSwweDIxLDB4NDggfSB9LAoreyAgMTYsIDB4ZWIxMCwgMCwgezB4MGIsMHg1MiwweDAyLDB4OWMsMHg0MCwweGEzLDB4YTAsMHgyMCwweDgwLDB4MGEsMHg2MCwweDAyLDB4Y2UsMHgwMCwweDg1LDB4MjAgfSB9LAoreyAgMTYsIDB4ZWIyMCwgMCwgezB4MjEsMHhjNCwweDBiLDB4N2EsMHgwNiwweDFlLDB4ODAsMHg5NSwweDIwLDB4MjEsMHg5MCwweDA4LDB4NzAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWIzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDgsMHgxZSwweDgwLDB4ZjcsMHg4MCwweGIxLDB4NzkgfSB9LAoreyAgMTYsIDB4ZWI0MCwgMCwgezB4MGYsMHhkYiwweDAyLDB4M2UsMHgyMCwweGM3LDB4YTAsMHhiMSwweDYwLDB4Y2MsMHg3OCwweDEzLDB4OTYsMHgwMCwweGYxLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZWI1MCwgMCwgezB4MzksMHhlMiwweDBmLDB4N2IsMHgxMywweDBmLDB4MDAsMHhkNCwweGEwLDB4MzEsMHg2MCwweDJjLDB4NzAsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZWI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTUsMHhhYywweDAwLDB4ZjcsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWI3MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWQsMHg4MCwweGZiLDB4MTAsMHgzZSwweDQwLDB4MGIsMHhiMCwweDIzLDB4ZWMsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4ZWI4MCwgMCwgezB4M2EsMHhkOCwweDBmLDB4YjAsMHgwYiwweGVkLDB4ODEsMHhlZCwweDEwLDB4M2UsMHg4MCwweDBmLDB4MzAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZWI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHhiZSwweDIwLDB4ZWUsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4ZWJhMCwgMCwgezB4MGMsMHhkOCwweDgzLDB4MWUsMHgwMCwweDZmLDB4ODAsMHgzMywweGUwLDB4MGYsMHhiOCwweDExLDB4MzIsMHgwNCwweGY1LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWJiMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4ZjgsMHg4MywweDJmLDB4NDAsMHhmZSwweDgwLDB4YjMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTgsMHg5YywweDAwLDB4YmMsMHgwMCwweGExLDB4NDQgfSB9LAoreyAgMTYsIDB4ZWJkMCwgMCwgezB4MDgsMHgxMCwweDAzLDB4NWMsMHgwMCwweDhmLDB4MDAsMHgyMSwweDgwLDB4MGIsMHhlYSwweDIyLDB4MWMsMHg4MCwweGI1LDB4MDEgfSB9LAoreyAgMTYsIDB4ZWJlMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDFlLDB4ODAsMHhiZSwweDAwLDB4MjMsMHg4MCwweDJhLDB4NzAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDIwLDB4YTcsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWMwMCwgMCwgezB4MGIsMHg1MCwweDBhLDB4M2MsMHgwMCwweGE3LDB4MDAsMHgyNSwweGMwLDB4MGEsMHg0MywweDAyLDB4MTAsMHgwMCwweGI1LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWMxMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHg4MiwweDFjLDB4ODAsMHhiNCwweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDQsMHg4ZSwweDA0LDB4YjMsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWMzMCwgMCwgezB4MDksMHgxNCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgyNCwweDgyLDB4MDQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWM0MCwgMCwgezB4MjAsMHhjMCwweDhiLDB4M2EsMHgwMiwweDJjLDB4MDEsMHhiMCwweDAwLDB4MjAsMHg4MCwweDBhLDB4MzAsMHgwMiwweDFhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWM1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg5ZSwweDAwLDB4ZWIsMHgwNCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWM2MCwgMCwgezB4MmQsMHhkYywweDAzLDB4MWQsMHg2MCwweGVmLDB4MDAsMHgzMiwweDAwLDB4Y2YsMHg5YSwweDAzLDB4MjgsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWM3MCwgMCwgezB4MzMsMHhjMSwweDhiLDB4ZmMsMHgwYiwweDNjLDB4MDAsMHhmYywweDAwLDB4MzIsMHg4MCwweDBjLDB4OTAsMHgwMywweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWM4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhhYywweDEwLDB4ZjgsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWM5MCwgMCwgezB4MGUsMHg5OCwweDIzLDB4YWMsMHgwNCwweGZiLDB4MDAsMHgzYywweDAwLDB4MGYsMHg4NCwweDIwLDB4ZWQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNhMCwgMCwgezB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmZCwweDAwLDB4M2UsMHg4MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTAsMHhmYywweDAwLDB4Y2YsMHg4MCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWNjMCwgMCwgezB4MGMsMHhkMCwweDgzLDB4ZmMsMHgwMCwweGVmLDB4MDAsMHgzZiwweDQwLDB4MGMsMHhmMSwweDQxLDB4MzAsMHgxMCwweGNkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNkMCwgMCwgezB4M2YsMHhjMCwweDAwLDB4NzAsMHgxMywweDNjLDB4MDAsMHhlNCwweDAwLDB4YjEsMHhkMCwweDBjLDB4MTAsMHgwMywweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWNlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGExLDB4MDQsMHgyYywweDAwLDB4OGEsMHhlNCwweDJhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWNmMCwgMCwgezB4MjgsMHg5MCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDAsMHgzZSwweDAyLDB4MGEsMHg4MCwweDAyLDB4MmMsMHg4MiwweDg5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWQwMCwgMCwgezB4MmUsMHhjMSwweDBhLDB4YjAsMHgwYSwweDJjLDB4MDAsMHg4OSwweDAyLDB4MjIsMHhmMiwweDJhLDB4OTgsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAyLDB4ODAsMHgxNCwweDJhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWQyMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZWMsMHgwOCwweGFiLDB4MDQsMHgyZSwweDg0LDB4MDgsMHgxMCwweDgyLDB4ODAsMHgxMCwweDg5LDB4MDMgfSB9LAoreyAgMTYsIDB4ZWQzMCwgMCwgezB4MmMsMHhjMCwweDRhLDB4YjAsMHgyMiwweDJjLDB4MDAsMHhhYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4OTEsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTQsMHgyYywweDAwLDB4ODAsMHgwMCwweDI4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZWQ1MCwgMCwgezB4MDgsMHgxMSwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAsMHgyYywweDgxLDB4MGEsMHgwMCwweDVhLDB4ODgsMHgwMCwweDAxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ2MCwgMCwgezB4MmMsMHhjMCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDBhLDB4MTAsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YzksMHgwMCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWQ4MCwgMCwgezB4MGMsMHhkNCwweDAzLDB4ZmMsMHgwMCwweGViLDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MiwweDAzLDB4YTAsMHgwMCwweDRkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ5MCwgMCwgezB4M2YsMHhjMCwweDBlLDB4ZjAsMHgzMywweDNjLDB4ODAsMHhlOCwweDAwLDB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweDIwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZWRhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWRiMCwgMCwgezB4MGYsMHg1MCwweDAzLDB4ZmMsMHgwMiwweDNmLDB4MDQsMHgzYiwweDAxLDB4NGYsMHhjNCwweDEzLDB4NzAsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWRjMCwgMCwgezB4M2YsMHhjMCwweDFmLDB4ZjAsMHgwMSwweGZjLDB4NDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDBmLDB4ZDAsMHgxMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZWRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmOCwweGUwLDB4ZmYsMHg4MCwweDNkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWRlMCwgMCwgezB4MGQsMHhmMywweDgyLDB4ZjAsMHg4MCwweGZmLDB4NDAsMHgzMSwweGNiLDB4MGMsMHhmMywweDAzLDB4ZmQsMHgwNCwweGVmLDB4YzEgfSB9LAoreyAgMTYsIDB4ZWRmMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4NzksMHgwMywweGZlLDB4MDAsMHhjZiwweDQyLDB4MzMsMHhmMCwweDRjLDB4ZjgsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWUwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MTAsMHhlOSwweDA4LDB4YjksMHg4MSwweDJmLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZWUxMCwgMCwgezB4MDgsMHhmNCwweDUyLDB4ZTksMHgyMCwweGJmLDB4NDAsMHgyMywweGYwLDB4MGEsMHhmMywweDAyLDB4ZmQsMHgwOCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWUyMCwgMCwgezB4MzYsMHhlMCwweDBiLDB4ODAsMHgyMiwweGU4LDB4ODAsMHg4ZiwweDQwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHg4MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhjYywweDAwLDB4YjEsMHg4MCwweDJjLDB4YzUgfSB9LAoreyAgMTYsIDB4ZWU0MCwgMCwgezB4MDksMHgzMiwweDQyLDB4YzgsMHhjMCwweGIzLDB4MzEsMHgyMCwweGMxLDB4MDgsMHgzMiwweDAyLDB4Y2MsMHhkNCwweGJiLDB4MjAgfSB9LAoreyAgMTYsIDB4ZWU1MCwgMCwgezB4NjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MjAsMHg5MywweDYwLDB4MjAsMHg4OCwweDA4LDB4MzIsMHgwMiwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWU2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MTUsMHhhMCwweDAwLDB4YmIsMHg4MCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWU3MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4ZWEsMHgwMCwweGJiLDB4MDAsMHg2MiwweGMxLDB4MGEsMHhiMCwweDAyLDB4Y2MsMHgwMCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU4MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YTAsMHgwMCwweGU4LDB4MDAsMHg4MywweDAwLDB4MjIsMHhjMSwweDA4LDB4MzAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlOCwweDkwLDB4ZmIsMHg4MCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWVhMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZTIsMHgxMCwweGZiLDB4MDAsMHgzMiwweGMwLDB4NGMsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGU5LDB4NTQgfSB9LAoreyAgMTYsIDB4ZWViMCwgMCwgezB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGU2LDB4MDAsMHhjYiwweDAwLDB4YjIsMHg0MCwweDBjLDB4YjAsMHgwMywweDA0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWVkMCwgMCwgezB4OGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGY3LDB4MDIsMHhiZiwweGMxLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGRmLDB4MDYgfSB9LAoreyAgMTYsIDB4ZWVlMCwgMCwgezB4MzcsMHhjMCwweDhmLDB4YzksMHgwNywweGZhLDB4OTIsMHhmZiwweDA0LDB4M2YsMHg1MCwweDJmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MTAsMHhhYywweDAwLDB4YzksMHgwMCwweDNlLDB4YzIgfSB9LAoreyAgMTYsIDB4ZWYwMCwgMCwgezB4MGUsMHhiMCwweDIzLDB4ZTQsMHgwMCwweGViLDB4MDAsMHgzYSwweGM4LDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWYxMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGE0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHg4MCwweDBmLDB4YjAsMHg4MywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyOCwweDAwLDB4OGIsMHg3NCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWYzMCwgMCwgezB4MDgsMHhmMCwweDAyLDB4ZTQsMHgwMCwweDhmLDB4MDAsMHgyMSwweGYwLDB4MDgsMHhmMCwweDAyLDB4ZmMsMHgxMCwweGQzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY0MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4OTAsMHgxMiwweDJjLDB4MDAsMHhlZiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjYsMHgwMiwweGY2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg0OCwweDAwLDB4YTMsMHgwMCwweDJjLDB4YzQgfSB9LAoreyAgMTYsIDB4ZWY2MCwgMCwgezB4MGEsMHgzMCwweDAyLDB4YzAsMHgwMCwweGEzLDB4MDAsMHg2OCwweGYwLDB4MGEsMHgzMCwweDEyLDB4Y2MsMHgwNCwweGEyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY3MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGVjLDB4MDAsMHhiMywweDAxLDB4MmUsMHhjMCwweDBiLDB4MzQsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MDEsMHgwYywweDAwLDB4ODcsMHg4MCwweDJkLDB4ZTggfSB9LAoreyAgMTYsIDB4ZWY5MCwgMCwgezB4MDgsMHg3OCwweDQyLDB4ZGEsMHgwMCwweDg3LDB4ODAsMHgyNSwweGUwLDB4MDgsMHg3OSwweDAyLDB4Y2UsMHgwMCwweDk2LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWZhMCwgMCwgezB4MmQsMHhlMCwweDBiLDB4ZDksMHgwMiwweGRlLDB4MDAsMHhhNywweDgwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWZiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQwLDB4ZTMsMHgxMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWZjMCwgMCwgezB4MGEsMHgzOCwweDAzLDB4ZTgsMHgwMCwweGViLDB4MDAsMHgzOCwweGMyLDB4MGEsMHgzMCwweDAzLDB4Y2MsMHgwMCwweGUzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWZkMCwgMCwgezB4M2MsMHhjMCwweDBmLDB4MzQsMHgwMywweGNkLDB4MDAsMHhmMywweDIwLDB4M2MsMHg4OCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZWZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiNCwweDgwLDB4ZmYsMHgwNCwweDNmLDB4YzggfSB9LAoreyAgMTYsIDB4ZWZmMCwgMCwgezB4MGYsMHhmMCwweDgzLDB4ZjgsMHg0MCwweGZmLDB4MTgsMHgzYiwweGMwLDB4MGYsMHhmNCwweDgzLDB4ZmMsMHgwMCwweGVlLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjAwMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhlZiwweDA4LDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgxMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZjAxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlOCwweDAwLDB4Y2IsMHgwMCwweDNlLDB4ZjIgfSB9LAoreyAgMTYsIDB4ZjAyMCwgMCwgezB4NGQsMHhiMiwweDEzLDB4ZTgsMHgwNCwweGNiLDB4MDEsMHgzMiwweGY4LDB4NGQsMHhiMiwweDEzLDB4NmQsMHgyMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjAzMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4MzAsMHgwMywweDI0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDhmLDB4YjgsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjA0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MTEsMHg4YywweDAwLDB4ODYsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjA1MCwgMCwgezB4MDgsMHg3MywweDAyLDB4ZDgsMHgxMiwweDg3LDB4MzAsMHgyMCwweGNiLDB4MDgsMHhmMiwweDAyLDB4MWQsMHgwNSwweGI1LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjA2MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NjAsMHgwMywweDUwLDB4MTAsMHhiNywweDA5LDB4MmQsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjA3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4ZTQgfSB9LAoreyAgMTYsIDB4ZjA4MCwgMCwgezB4MDksMHg3YSwweDAyLDB4Y2UsMHgwMSwweDg3LDB4ODAsMHgyMSwweGVjLDB4MDksMHg3OCwweDAyLDB4NWUsMHg4MCwweGI3LDB4YzAgfSB9LAoreyAgMTYsIDB4ZjA5MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4ZjgsMHgwMiwweDFlLDB4MDAsMHhiNywweGEwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjBhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhlZSwweDAwLDB4ODIsMHg4MCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjBiMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjBjMCwgMCwgezB4MmMsMHhjMSwweDBiLDB4MzAsMHgwMiwweDRlLDB4MDAsMHhiMywweDAwLDB4MmMsMHhmMSwweDBiLDB4MzAsMHgwYSwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjBkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDgwLDB4YzYsMHgwMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjBlMCwgMCwgezB4MGQsMHhhMCwweDAzLDB4ZjgsMHg0MCwweGNhLDB4MDAsMHgzMiwweDgwLDB4MGQsMHhhMCwweDEzLDB4NjgsMHgwMCwweGZlLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjBmMCwgMCwgezB4N2UsMHg4MCwweDBmLDB4ZWQsMHg4MywweDM5LDB4MTAsMHhmYSwweDAwLDB4M2YsMHg4YywweDBmLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDEyLDB4ZjgsMHg5MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjExMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDUsMHgzZSwweDAwLDB4MGUsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZjEyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4NjAsMHhmOCwweDAwLDB4N2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjEzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzksMHg4MCwweDMyLDB4NjQgfSB9LAoreyAgMTYsIDB4ZjE0MCwgMCwgezB4MGYsMHg5MCwweDQzLDB4ZTQsMHgwNiwweGMxLDB4MDQsMHgzYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE1MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjMSwweDAxLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjE2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHhjMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjE3MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDUwLDB4MWIsMHg5MCwweDIyLDB4MjQsMHgwMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE4MCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTAsMHgyMiwweDI0LDB4MDgsMHhjOSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTQsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OTksMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjFhMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDU4LDB4MGIsMHg5MCwweDAyLDB4ODQsMHgwMCwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFiMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4MTAsMHgwYSwweDA0LDB4MDAsMHg5OSwweDAyLDB4MjIsMHhjMSwweDA4LDB4OTAsMHg4MiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4OTEsMHgwMiwweGEwLDB4YzggfSB9LAoreyAgMTYsIDB4ZjFkMCwgMCwgezB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjIsMHgyMCwweDQ4LDB4OWIsMHgxMiwweDAyLDB4MDQsMHg5MCwweDg5LDB4MDEgfSB9LAoreyAgMTYsIDB4ZjFlMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDA0LDB4MDIsMHg4MSwweDIyLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQyLDB4ZGEsMHgwMSwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjIwMCwgMCwgezB4MGYsMHg4NSwweDAzLDB4YTEsMHg0MCwweGMwLDB4NTAsMHgzYSwweDAxLDB4OGIsMHg4NSwweDIzLDB4YTEsMHg0NCwweGU4LDB4NTAgfSB9LAoreyAgMTYsIDB4ZjIxMCwgMCwgezB4YjIsMHgwMCwweDBmLDB4ODUsMHgwMywweDIxLDB4NDgsMHhkOCwweDUxLDB4MzIsMHgxNCwweDJjLDB4ODUsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZjIyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNSwweDAwLDB4ZWQsMHgwMiwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZjIzMCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZjQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI0MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhlOSwweDEwLDB4YmYsMHg0MCwweDBmLDB4OTAsMHgwMywweDY2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZjI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDIxLDB4YzUsMHgwMCwweDMzLDB4NjggfSB9LAoreyAgMTYsIDB4ZjI2MCwgMCwgezB4MGYsMHg5YSwweDAzLDB4NmYsMHg4OCwweGM5LDB4YzAsMHgzMywweDY4LDB4MGMsMHg5ZSwweDAzLDB4MjcsMHg4MCwweGQ5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZjI3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM1LDB4MTAsMHhkOSwweGU4LDB4MzYsMHg1MCwweDBjLDB4ZDAsMHgwMywweGU2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDA4LDB4ODgsMHgwMCwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI5MCwgMCwgezB4MGIsMHg4ZSwweDgyLDB4ZWIsMHhjOCwweDg4LDB4ZTAsMHgyMiwweDAwLDB4MjgsMHg4OCwweDQyLDB4YTIsMHg4MCwweDhhLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjJhMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4YWEsMHgwMiwweGUyLDB4MDAsMHg4OCwweGMwLDB4MjIsMHhhOSwweDA4LDB4OGEsMHgwMywweDhlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgwMCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ZjJjMCwgMCwgezB4MGIsMHgxMSwweDMyLDB4ODQsMHg4NCwweDgxLDB4NjAsMHg2MCwweDUwLDB4MDgsMHgxNiwweDA2LDB4MDUsMHgwMCwweDkxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZjJkMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTAsMHg4MiwweGU0LDB4MDksMHg5MSwweDIwLDB4MjQsMHg0MCwweDA4LDB4MTAsMHhjMiwweGQyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjJlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDA0LDB4ODksMHgwNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjJmMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4YzQsMHgwMCwweGE5LDB4MDAsMHgyMiwweDQxLDB4MDAsMHg5MCwweDAyLDB4YTQsMHgwMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMwMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTIsMHgyMiwweGU1LDB4ODAsMHg5OSwweDAxLDB4MjIsMHg2MSwweDA4LDB4OTAsMHgwMiwweDg2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTQsMHhhNSwweDgyLDB4ODEsMHg5MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjMyMCwgMCwgezB4MGYsMHg5MCwweDEzLDB4NjcsMHgwMiwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDIzLDB4MjQsMHgwNCwweGQ5LDB4YzAgfSB9LAoreyAgMTYsIDB4ZjMzMCwgMCwgezB4YjIsMHg0MCwweDBmLDB4OWMsMHgwMywweGU2LDB4MDAsMHhkOSwweDAwLDB4MzYsMHg1MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjM0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDAsMHhhNiwweDgwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjM1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTcsMHgwMCwweGQ5LDB4MDAsMHhiYywweDQyLDB4MGYsMHg5MCwweDUzLDB4ZTQsMHgwNCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZjM2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTgsMHgwMywweGU2LDB4MDQsMHhlMSwweDAwLDB4M2UsMHg0MCwweDJmLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjM3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MSwweDEwLDB4NDgsMHgxMCwweDMyLDB4MDggfSB9LAoreyAgMTYsIDB4ZjM4MCwgMCwgezB4MGMsMHg4MCwweDBmLDB4MjEsMHgwMiwweGM4LDB4MDAsMHgzYSwweDA0LDB4MGYsMHg4MCwweDA3LDB4NjAsMHgwMCwweGY4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZjM5MCwgMCwgezB4YjIsMHgwMCwweDBmLDB4ODQsMHgwYiwweDIwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgxMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjNhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDQsMHgyOCwweDA0LDB4OGUsMHg4MCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjNiMCwgMCwgezB4MDgsMHhhMCwweDQyLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMywweGEwLDB4NGIsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjNjMCwgMCwgezB4NzYsMHg4MCwweDBiLDB4YTAsMHgwMiwweDA4LDB4MDAsMHg4YSwweDAwLDB4MzIsMHg4MCwweDA4LDB4ZTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODIsMHgwMCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ZjNlMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweDliLDB4MDAsMHgyOCwweGMwLDB4MWEsMHhiMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjNmMCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjIsMHhjMCwweDI4LDB4MzQsMHg4MiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxYywweDAwLDB4ODcsMHgwMCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZjQxMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4MGMsMHgwMCwweDk3LDB4MjAsMHgyNSwweGMwLDB4MGIsMHg3MSwweDAyLDB4ZGMsMHg4MSwweGI3LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQyMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4N2EsMHg0MiwweDNjLDB4ODAsMHg4NywweDIwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgwZSwweDgyLDB4YzcsMHg4MCwweGIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZjQ0MCwgMCwgezB4MmMsMHhmYSwweDA2LDB4MWUsMHgwOCwweGQzLDB4YjEsMHgzOSwweDYwLDB4NGUsMHg3OCwweDEyLDB4NWUsMHhhMCwweGZmLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZjQ1MCwgMCwgezB4MjEsMHhlMCwweDBmLDB4ZjgsMHgwMywweDFmLDB4MDgsMHhlMywweGEwLDB4MzMsMHhlMCwweDBjLDB4NjgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDQwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjQ3MCwgMCwgezB4MGYsMHhiMiwweDAzLDB4ZWQsMHhhOCwweGViLDB4MTAsMHgzYSwweDgwLDB4MGYsMHhiMCwweGMzLDB4ZWMsMHg0MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQ4MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHg4MywweGVjLDB4ODAsMHhlYiwweDcwLDB4YmUsMHhjNCwweDBmLDB4YjAsMHgwMywweDgyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZjQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4Y2UsMHg4MCwweGIzLDB4NjAgfSB9LAoreyAgMTYsIDB4ZjRhMCwgMCwgezB4MGYsMHhmYywweDgzLDB4N2UsMHgyMCwweGVmLDB4YjAsMHgzYiwweGUwLDB4MGYsMHhiOCwweDAzLDB4M2UsMHgwMCwweGNmLDB4ODEgfSB9LAoreyAgMTYsIDB4ZjRiMCwgMCwgezB4M2YsMHhlMCwweDhmLDB4ZjgsMHg4MywweGVmLDB4NDAsMHhmZiwweGMyLDB4MzMsMHhlMSwweDBjLDB4ZjgsMHgwMywweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDgyLDB4ODcsMHgxOCwweDIxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjRkMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MWMsMHg2MCwweGQ3LDB4MTAsMHgyMSwweGQwLDB4MGIsMHg3YiwweDAyLDB4M2MsMHgwMCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRlMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRlLDB4MDAsMHhiZiwweDAwLDB4YTMsMHhjNCwweDA4LDB4NzAsMHgwMywweGFhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiYywweDExLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjUwMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MWMsMHgwMCwweDkzLDB4MjAsMHg2OSwweGMwLDB4MGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjUxMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MjAsMHhiNywweDEwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDg0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjZCwweDAwLDB4ODMsMHg0MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjUzMCwgMCwgezB4NGIsMHgzMCwweDAyLDB4MGMsMHgwMSwweDgzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjU0MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDEsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgyMiwweDk4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjU1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZiwweDIwLDB4Y2EsMHhjMCwweDMyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjU2MCwgMCwgezB4MGYsMHhmMCwweDAzLDB4M2UsMHgwMCwweDlmLDB4MDAsMHgzYSwweDgwLDB4MGYsMHhmMCwweDBiLDB4M2MsMHgwMCwweGNmLDB4OTggfSB9LAoreyAgMTYsIDB4ZjU3MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4ZjYsMHgwMywweGZmLDB4MDAsMHhmZiwweDAwLDB4MzEsMHhlMCwweDJjLDB4YjAsMHgwMywweGFlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhjYywweDgwLDB4ZmIsMHgwMCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZjU5MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4YWMsMHgwMiwweGZiLDB4MDAsMHg3ZSwweDUwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVhMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjIsMHgwMywweGVjLDB4MjAsMHhmMywweDAwLDB4M2UsMHhjNiwweDBmLDB4OTAsMHgwMywweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAyLDB4Y2YsMHg5OCwweDczLDB4YzggfSB9LAoreyAgMTYsIDB4ZjVjMCwgMCwgezB4MGYsMHg3MCwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzMywweDI4LDB4MGYsMHhiMCwweDAyLDB4MWMsMHgwMCwweDRmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAxLDB4MzMsMHhjMCwweDBjLDB4ZTQsMHgwMywweGU0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjVlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2YywweDAwLDB4ODMsMHg4MCwweGEyLDB4ZjggfSB9LAoreyAgMTYsIDB4ZjVmMCwgMCwgezB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgzMiwweDEwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwNCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYwMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHgxMiwweGVjLDB4MDQsMHhlYiwweDAwLDB4MjIsMHhjMCwweDRhLDB4OTQsMHg4MiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHg2YywweDAwLDB4OGEsMHgwMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYyMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4MDAsMHhhMiwweGMwLDB4MGIsMHgzMCwweDAyLDB4YWMsMHgwMCwweGFiLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjYzMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweGVjLDB4MDAsMHhiYiwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgyMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwYywweDAwLDB4OGIsMHgwMSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY1MCwgMCwgezB4MGIsMHgzMCwweDA2LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgzMiwweDBhLDB4Y2MsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY2MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAwLDB4MjIsMHhjMCwweDRhLDB4MDAsMHgxMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg2YywweDAwLDB4OGIsMHgwNCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjY4MCwgMCwgezB4MGYsMHhmMSwweDAzLDB4MWMsMHgwMCwweGZmLDB4MDQsMHgzMiwweGMwLDB4MGIsMHhmMiwweDAzLDB4YmMsMHgwMCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY5MCwgMCwgezB4M2UsMHhjMCwweDA3LDB4ZjAsMHgwMywweGZjLDB4ODAsMHhmZiwweDAwLDB4YjIsMHhjMCwweDBjLDB4YTAsMHgwMywweGUwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZjZhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhkYywweDAwLDB4ZjUsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjZiMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMSwweGZmLDB4MDIsMHgzYiwweGMwLDB4MGYsMHhmMSwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjZjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgxMywweGZjLDB4NDAsMHhlZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZjZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhmMiwweDQwLDB4Y2MsMHg4MCwweDM3LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjZlMCwgMCwgezB4MGMsMHhkOCwweDAzLDB4YjAsMHg0NCwweGZjLDB4MDgsMHgzZiwweDBlLDB4MGYsMHhjMSwweDAzLDB4ZmMsMHgwMCwweGNjLDB4OTQgfSB9LAoreyAgMTYsIDB4ZjZmMCwgMCwgezB4M2YsMHgwYSwweDJlLDB4YzQsMHgwMywweDdkLDB4ODAsMHhjZiwweDEwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHg4MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjcwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDgsMHhlMCwweDkwLDB4ODgsMHgwMiwweDIyLDB4ODEgfSB9LAoreyAgMTYsIDB4ZjcxMCwgMCwgezB4MDgsMHg5MiwweDEzLDB4YTQsMHg0MCwweDNiLDB4NjAsMHgyMiwweDE4LDB4MGIsMHg4MSwweDAyLDB4ZmMsMHhkNCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjcyMCwgMCwgezB4M2EsMHhiMCwweDBhLDB4OTQsMHgwMiwweDNkLDB4NDAsMHhhZiwweDYzLDB4MmYsMHhkZiwweDBiLDB4OTgsMHgwMCwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjczMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlMCwweDAwLDB4ODgsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4Zjc0MCwgMCwgezB4ODgsMHgzMCwweDgyLDB4YzAsMHgwMCwweGIwLDB4MDgsMHgyOCwweDgwLDB4MGEsMHgxMCwweDAyLDB4Y2MsMHgyMCwweDgwLDB4MDEgfSB9LAoreyAgMTYsIDB4Zjc1MCwgMCwgezB4MmMsMHg0MCwweDFiLDB4MDYsMHgwMiwweDhjLDB4OTAsMHg5MywweDYwLDB4NjgsMHhjMCwweDRhLDB4MDAsMHg0MiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4Zjc2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhhMCwweDAyLDB4ODgsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4Zjc3MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4ZTQsMHgyMCwweGJiLDB4ODgsMHgyNiwweDk4LDB4MGIsMHg4MCwweDQyLDB4Y2MsMHgxOCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc4MCwgMCwgezB4MmUsMHhjMiwweDFiLDB4OTgsMHgwMiwweGFjLDB4MDAsMHhhYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4OTgsMHg4MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4Zjc5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhlMywweGMwLDB4Y2IsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdhMCwgMCwgezB4MmMsMHg4MCwweDAzLDB4YWUsMHgwOCwweGI5LDB4MDAsMHgzZSwweDcwLDB4MGYsMHhiOSwweDAzLDB4ZWMsMHgwMiwweDQ4LDB4NDggfSB9LAoreyAgMTYsIDB4ZjdiMCwgMCwgezB4M2MsMHhjMCwweDBmLDB4OGMsMHg5MywweGVjLDB4MDAsMHhkYiwweDAwLDB4MWEsMHhjMCwweDBlLDB4YWMsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjdjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiMiwweDAwLDB4ZmYsMHgwMCwweGJiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjdkMCwgMCwgezB4MGYsMHhjMCwweDQzLDB4YjYsMHg0MCwweGJkLDB4MDAsMHgzYiwweDYwLDB4MGYsMHhlOCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4OTQgfSB9LAoreyAgMTYsIDB4ZjdlMCwgMCwgezB4M2IsMHhlNCwweDBlLDB4NjAsMHgwZiwweDZjLDB4MDgsMHhlZiwweDAxLDB4M2YsMHhjMCwweDBmLDB4NjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMSwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4ZjgwMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZWQsMHgwMCwweGY5LDB4NDAsMHgzYSwweDAwLDB4MGYsMHg5MCwweDAzLDB4ZWMsMHgwMiwweGM5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjgxMCwgMCwgezB4MzIsMHhkMCwweDBmLDB4OTAsMHgwMywweDJjLDB4MDgsMHhkYiwweDAwLDB4YjYsMHhjMCwweDBkLDB4YjQsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjgyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgwMCwweDAwLDB4YjMsMHg4OSwweDJlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZjgzMCwgMCwgezB4MGIsMHhhNCwweDAzLDB4YTQsMHgwMSwweGI5LDB4MDAsMHgyZSwweDAxLDB4MGIsMHg5MCwweDQyLDB4ZmMsMHgxMCwweDg5LDB4NTAgfSB9LAoreyAgMTYsIDB4Zjg0MCwgMCwgezB4YTIsMHhjMCwweDhkLDB4YjQsMHgwMiwweDNjLDB4NDQsMHg4ZiwweDAwLDB4MjMsMHhjMCwweDA4LDB4YjAsMHgwMiwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDQsMHgwYywweDAwLDB4YjAsMHg4MCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg2MCwgMCwgezB4MGIsMHgxMiwweDAyLDB4YzgsMHgwMCwweGJhLDB4MDAsMHgyYywweGMwLDB4MGIsMHgyMCwweDAyLDB4Y2MsMHgwMCwweGEyLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg3MCwgMCwgezB4MjAsMHgwMCwweDJiLDB4MmQsMHg5YSwweDJlLDB4NDIsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MjAsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgxZSwweDA0LDB4YjQsMHg4MCwweDJkLDB4YTAgfSB9LAoreyAgMTYsIDB4Zjg5MCwgMCwgezB4MGIsMHg1OCwweDAyLDB4OTIsMHgwMCwweGI2LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg2OCwweDAyLDB4ZGUsMHg0MCwweGE2LDB4ODAgfSB9LAoreyAgMTYsIDB4ZjhhMCwgMCwgezB4MjEsMHgyNCwweDI5LDB4NDgsMHgwMiwweDFlLDB4ODAsMHg4NywweDgwLDB4NjksMHhlMCwweDA4LDB4NjEsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTgsMHgwYywweDAwLDB4ZjAsMHgzMCwweDNjLDB4NGMgfSB9LAoreyAgMTYsIDB4ZjhjMCwgMCwgezB4MGYsMHgzMiwweDAzLDB4YzgsMHg4MCwweGIyLDB4MDAsMHgzOCwweDgwLDB4MGYsMHgxYiwweDAzLDB4ZWMsMHgwMCwweGUwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZjhkMCwgMCwgezB4MzAsMHgwNCwweDBmLDB4YjEsMHgwMywweDBlLDB4ODUsMHhjYiwweDAwLDB4M2EsMHhjMCwweDBjLDB4MzEsMHgwMywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWMsMHhiYywweDAwLDB4ZmMsMHgxMSwweDNmLDB4YzQgfSB9LAoreyAgMTYsIDB4ZjhmMCwgMCwgezB4MGYsMHhiOCwweDEzLDB4YjAsMHgwNCwweGZlLDB4MDIsMHgzZiwweDgwLDB4MGYsMHhjMCwweDAzLDB4ZmQsMHgwMCwweGRmLDB4MTIgfSB9LAoreyAgMTYsIDB4ZjkwMCwgMCwgezB4MWQsMHgwNCwweDBmLDB4ZDAsMHg0MywweGJjLDB4MDEsMHhlZiwweDEwLDB4MzMsMHhjNCwweDBlLDB4ZjMsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZjkxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhlZSwweDAwLDB4Y2IsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MjgsMHgwMCwweGY4LDB4MDAsMHgzZSwweDQwLDB4M2QsMHhiMCwweDAzLDB4ZWYsMHgwOCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkzMCwgMCwgezB4M2EsMHgwMCwweDBjLDB4YTAsMHgwMywweGVjLDB4OTgsMHhmYiwweDIwLDB4MzIsMHhkMiwweDBjLDB4YTgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4Zjk0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMSwweDJkLDB4ODAgfSB9LAoreyAgMTYsIDB4Zjk1MCwgMCwgezB4MGIsMHg0MCwweDQyLDB4MWMsMHgwNCwweDM3LDB4MDAsMHhhMSwweDQwLDB4MDgsMHg2MCwweDAyLDB4Y2MsMHg4MCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk2MCwgMCwgezB4MmQsMHg4MCwweDJlLDB4NzAsMHgwMiwweGRjLDB4YTksMHhiNywweDI4LDB4MjEsMHhkMCwweDA4LDB4NzAsMHgwMiwweDEyLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHhiZSwweDAyLDB4ODcsMHg4MCwweDJkLDB4NjAgfSB9LAoreyAgMTYsIDB4Zjk4MCwgMCwgezB4NGIsMHhlOCwweDAyLDB4NWEsMHgwMSwweGI0LDB4ODgsMHgyOCwweGUwLDB4ODgsMHg3OCwweGMyLDB4ZGUsMHg1MiwweDg2LDB4YzAgfSB9LAoreyAgMTYsIDB4Zjk5MCwgMCwgezB4MjksMHg2MCwweDA4LDB4NjgsMHgwMiwweGRlLDB4NDAsMHhiMywweDkyLDB4ZTEsMHhlOCwweDI4LDB4MjgsMHgwMiwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTQsMHhjYywweDAwLDB4OGIsMHg4MCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjliMCwgMCwgezB4MGIsMHgyMCwweDAyLDB4NGQsMHg4MCwweDliLDB4MjAsMHgyMCwweGUwLDB4MDgsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjljMCwgMCwgezB4MmMsMHhjMCwweDBhLDB4YjAsMHgwMiwweGNjLDB4MDgsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzEsMHgwMiwweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjlkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4Y2EsMHhlMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjllMCwgMCwgezB4MWYsMHhhNCwweDBiLDB4NzksMHgwMCwweGZlLDB4MDAsMHgzZiwweDgyLDB4MWQsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjlmMCwgMCwgezB4M2IsMHg4OCwweDJjLDB4ZTQsMHgwMywweGU4LDB4MDEsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4ZTgsMHgwMywweDdhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHhhMCwweDAwLDB4ZjgsMHgwOSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmExMCwgMCwgezB4OGYsMHhjMCwweDgzLDB4YTAsMHgxOCwweGY4LDB4MDAsMHgzYywweDIwLDB4MGYsMHg4OCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4ZmEyMCwgMCwgezB4M2UsMHgyMCwweDBlLDB4ODAsMHg4MywweGUxLDB4MDEsMHhmMCwweDAwLDB4M2MsMHgwMCwweDBmLDB4ODAsMHgwYiwweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmEzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZjksMHg0MiwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmE0MCwgMCwgezB4NGMsMHg5OCwweDAzLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDIzLDB4MjQsMHgwMCwweGI5LDB4ODEgfSB9LAoreyAgMTYsIDB4ZmE1MCwgMCwgezB4M2MsMHg0MCwweDBjLDB4OTIsMHgwMywweDI0LDB4MDAsMHhmOSwweDA1LDB4MzIsMHg0MCwweDZjLDB4OTAsMHhjMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmE2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHgyNCwweDE0LDB4YjksMHgwMCwweGEyLDB4NTQgfSB9LAoreyAgMTYsIDB4ZmE3MCwgMCwgezB4MDgsMHg5YiwweDFhLDB4MjQsMHgwMiwweDg5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDAyLDB4YTQsMHgwMCwweGI5LDB4OTAgfSB9LAoreyAgMTYsIDB4ZmE4MCwgMCwgezB4MmUsMHg0MCwweDI4LDB4OWMsMHg4MiwweDI1LDB4MDQsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTgsMHgxMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YWQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmFhMCwgMCwgezB4MDgsMHg1MCwweDAyLDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHgxMCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFiMCwgMCwgezB4NmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI1LDB4MDAsMHhhOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTEsMHgwNiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgxNCwweDAwLDB4YjUsMHgxMCwweGExLDB4NDQgfSB9LAoreyAgMTYsIDB4ZmFkMCwgMCwgezB4MjgsMHg1MCwweDAyLDB4NDQsMHg4MCwweDgxLDB4MzAsMHgyMCwweDQ4LDB4MDgsMHgxMiwweDAyLDB4ODQsMHg0MCwweGIxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmFlMCwgMCwgezB4NmMsMHhjOCwweDA4LDB4MTIsMHgwMiwweDA0LDB4ODAsMHhiMSwweDM0LDB4MjAsMHg0OCwweDA4LDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZTgsMHg0MCwweDMyLDB4OTAgfSB9LAoreyAgMTYsIDB4ZmIwMCwgMCwgezB4MGMsMHhjNSwweDAzLDB4NjEsMHg0MCwweGMwLDB4NDAsMHgzYSwweDE0LDB4MGYsMHg4NSwweDAzLDB4MjEsMHhiMCwweGY4LDB4NTAgfSB9LAoreyAgMTYsIDB4ZmIxMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODUsMHgwMywweDIxLDB4NDAsMHhmOCwweDQwLDB4YjAsMHgxNCwweDBjLDB4ODAsMHgwMywweGVlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmIyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MWQsMHhjNCwweDA0LDB4ZjksMHgyMiwweDBlLDB4NDggfSB9LAoreyAgMTYsIDB4ZmIzMCwgMCwgezB4MGYsMHgxMCwweDEzLDB4YjQsMHg0MCwweGZkLDB4MzAsMHgzZiwweDQ0LDB4NGYsMHhkMSwweDAwLDB4ZTQsMHg4NCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmI0MCwgMCwgezB4M2QsMHg0NCwweDBmLDB4ZDEsMHgwYiwweGU0LDB4NDAsMHhmOSwweDMwLDB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDUsMHhlNCwweDAwLDB4ZGQsMHg0MCwweDNmLDB4NTAgfSB9LAoreyAgMTYsIDB4ZmI2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4MmMsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHg5MCwweDEzLDB4MjcsMHgwNCwweGY1LDB4MDEgfSB9LAoreyAgMTYsIDB4ZmI3MCwgMCwgezB4MzcsMHg0MCwweDBjLDB4ZjAsMHgwMywweGY2LDB4MjAsMHhmOSwweGE4LDB4MzIsMHg2OCwweDBjLDB4ZDAsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHhlMCwweDAwLDB4ODgsMHhhMCwweDJlLDB4MjggfSB9LAoreyAgMTYsIDB4ZmI5MCwgMCwgezB4MjgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg4LDB4YTAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDBhLDB4NjIsMHg4MCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJhMCwgMCwgezB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGUxLDB4MDAsMHhiOCwweGUwLDB4MjIsMHgzYSwweDA4LDB4YTAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg4NCwweDAyLDB4ODEsMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmJjMCwgMCwgezB4MDgsMHgxMCwweDBhLDB4NDQsMHgwMiwweDgxLDB4MDgsMHgyNCwweDQwLDB4MGEsMHgxMCwweDAyLDB4NDUsMHg4MCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJkMCwgMCwgezB4MjQsMHg0MCwweDI5LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDA4LDB4MjQsMHg0NCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmJlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTQsMHhhNCwweDA0LDB4ODksMHgwMSwweDJlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZmJmMCwgMCwgezB4NDgsMHhiMiwweDAyLDB4NjQsMHgwMCwweDkxLDB4MDAsMHgyMiwweDQ2LDB4MGIsMHg5MCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4ZmMwMCwgMCwgezB4MjYsMHhjMCwweDA5LDB4YjAsMHgxMiwweGU0LDB4MDAsMHhiMSwweDAwLDB4MjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDQsMHhlNCwweDAwLDB4YzksMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmMyMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMCwweGM5LDB4MDIsMHgzNiwweDUwLDB4MGUsMHg5MywweDAzLDB4MjQsMHgwMCwweGY5LDB4OTAgfSB9LAoreyAgMTYsIDB4ZmMzMCwgMCwgezB4MzYsMHg0OCwweDBkLDB4OTQsMHg4MywweGU0LDB4MDgsMHhmOSwweDAwLDB4YjYsMHg0MCwweDBjLDB4OTQsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmM0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTAsMHhhNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmM1MCwgMCwgezB4MGYsMHg5MCwweDEzLDB4YTQsMHgwMCwweGU5LDB4MDIsMHgyZSwweDYxLDB4MDUsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM2MCwgMCwgezB4M2EsMHg0MCwweDBlLDB4OTAsMHg0MywweGU0LDB4MTAsMHhmOSwweDAwLDB4MzgsMHg0MCwweDJmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMSwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmM4MCwgMCwgezB4MGYsMHg4MCwweDQzLDB4YzAsMHgwMSwweGM4LDB4MDAsMHhiMiwweDAxLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGM4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZmM5MCwgMCwgezB4MzAsMHgwMCwweDhjLDB4ODQsMHg4MywweGUwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDZjLDB4ODQsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmNhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmNiMCwgMCwgezB4MGIsMHhlYSwweDAyLDB4ZTgsMHgwMCwweGFhLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDg2LDB4MjAgfSB9LAoreyAgMTYsIDB4ZmNjMCwgMCwgezB4MzcsMHhhMCwweDhkLDB4ZTQsMHgwMiwweGY4LDB4MDAsMHhkYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZmNlMCwgMCwgezB4MGIsMHhiOCwweDAyLDB4NGMsMHgwNCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4MGMsMHgwMiwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNmMCwgMCwgezB4MjAsMHg0MCwweDI4LDB4MzQsMHgwMiwweGNlLDB4OTAsMHg4MywweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxYywweGMwLDB4YjUsMHg4OCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmQxMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZGMsMHg4MCwweGEzLDB4MjAsMHgyMSwweGUwLDB4NDgsMHgzMiwweDQyLDB4MGUsMHg5MCwweDhlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmQyMCwgMCwgezB4NjUsMHg1MCwweDA5LDB4NzAsMHgwMiwweGRlLDB4MjAsMHg5MywweDIxLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTgsMHgxZSwweDAwLDB4ZmYsMHg4MCwweGIxLDB4YTAgfSB9LAoreyAgMTYsIDB4ZmQ0MCwgMCwgezB4MGYsMHg0OCwweDAyLDB4N2UsMHgwMCwweDg3LDB4YTAsMHgzMywweGUwLDB4MjgsMHg3YSwweDBiLDB4MWYsMHgwMCwweGM0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZmQ1MCwgMCwgezB4MzEsMHg2MCwweDhjLDB4NTgsMHgwMywweGZlLDB4MDAsMHhjNywweGM4LDB4MzMsMHhlOCwweDBjLDB4NTgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZmYsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ3MCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZWMsMHhhMCwweGZiLDB4NDAsMHgzZSwweGMwLDB4OGYsMHhiNSwweDAzLDB4ZWQsMHg4MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ4MCwgMCwgezB4M2MsMHg0MCwweDBmLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYiwweDAyLDB4M2UsMHhkMCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZmQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDQsMHhiZSwweDAwLDB4ZmYsMHg4MCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZmRhMCwgMCwgezB4MGYsMHhkOSwweDAzLDB4ZmUsMHgyMCwweGNmLDB4YzgsMHgzMywweGVhLDB4OGYsMHhmYywweDAzLDB4M2YsMHgwMCwweGZkLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmRiMCwgMCwgezB4M2YsMHg2MCwweDBlLDB4ZTgsMHgwMywweGYyLDB4MDAsMHhjZiwweDgwLDB4MmYsMHhmZSwweDBjLDB4NzgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDAsMHg5YywweDAwLDB4YjUsMHgwMiwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZmRkMCwgMCwgezB4MGIsMHg1OCwweDQyLDB4ZGMsMHg4MCwweGNmLDB4MDAsMHgyMSwweGMxLDB4MGIsMHgzMCwweDEyLDB4MWMsMHg0MCwweGI0LDB4MDIgfSB9LAoreyAgMTYsIDB4ZmRlMCwgMCwgezB4MmQsMHg0NiwweDA4LDB4NzEsMHgxMiwweGM4LDB4MDAsMHhlNywweDAwLDB4MmQsMHhjNCwweDA4LDB4NzAsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgwMCwweDJkLDB4MDIgfSB9LAoreyAgMTYsIDB4ZmUwMCwgMCwgezB4MGIsMHg0NiwweDAyLDB4ZGMsMHgwOCwweDk3LDB4MDAsMHgyMSwweGM5LDB4MGEsMHgzMCwweDIyLDB4MWMsMHgwMCwweGI0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUxMCwgMCwgezB4MmQsMHg0MCwweDBhLDB4NTAsMHg4MiwweGM0LDB4MDAsMHhiNywweDAwLDB4MmMsMHhjOCwweDI4LDB4NTAsMHgwMiwweDQwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZmUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTQsMHg4YywweDE4LDB4YjMsMHgwMCwweDJlLDB4MjAgfSB9LAoreyAgMTYsIDB4ZmUzMCwgMCwgezB4MGIsMHgxOCwweDAyLDB4Y2YsMHg0YSwweDgzLDB4YzIsMHgyMCwweGMxLDB4MGIsMHgzNCwweDIyLDB4MGMsMHgwNCwweGI4LDB4NTggfSB9LAoreyAgMTYsIDB4ZmU0MCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MjgsMHgwMiwweGM4LDB4MDAsMHhhMywweDAwLDB4MmMsMHhjMCwweDA4LDB4MTQsMHgwMiwweDQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmU1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhiYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmU2MCwgMCwgezB4MGYsMHhhMCwweDAyLDB4ZmMsMHgwMCwweGRmLDB4YTAsMHhiMywweGMwLDB4MGUsMHhmMCwweDBiLDB4M2MsMHgwMCwweGZiLDB4YzAgfSB9LAoreyAgMTYsIDB4ZmU3MCwgMCwgezB4M2MsMHhhMCwweDBlLDB4YmQsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBjLDB4MzAsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmU5MCwgMCwgezB4OGYsMHhiMSwweDQzLDB4ZWMsMHgwMCwweGYzLDB4MDAsMHgzZSwweGMwLDB4NGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVhMCwgMCwgezB4M2UsMHg4MCwweDBjLDB4ODQsMHgwMywweGUxLDB4MDAsMHg3MywweDAwLDB4M2UsMHhjMSwweDBmLDB4YjIsMHg0MywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NTAsMHhmYywweDEwLDB4ZmYsMHg4MCwweDM3LDB4YzAgfSB9LAoreyAgMTYsIDB4ZmVjMCwgMCwgezB4MGMsMHhlMCwweDAzLDB4ZmMsMHgyMCwweGZmLDB4MDgsMHgzMywweGMwLDB4MGYsMHhmMCwweDgzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVkMCwgMCwgezB4MzMsMHhjMCwweDJlLDB4NDAsMHgwMywweDFjLDB4MDEsMHhjZiwweDAwLDB4MTEsMHhjMCwweDRjLDB4ZDAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZmVlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDA0LDB4YjMsMHgwMiwweDIyLDB4NzIgfSB9LAoreyAgMTYsIDB4ZmVmMCwgMCwgezB4MDgsMHhhMSwweDE2LDB4ZWMsMHgwMCwweGJiLDB4MDQsMHgyMiwweGMwLDB4MGIsMHhiMCwweDQyLDB4ZWMsMHgwMCwweGJhLDB4MTkgfSB9LAoreyAgMTYsIDB4ZmYwMCwgMCwgezB4YjYsMHhkMCwweDA4LDB4OWMsMHg0YSwweDI2LDB4ODAsMHhkYiwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMywweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmYxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YjksMHgxMCwweDYyLDB4MjAgfSB9LAoreyAgMTYsIDB4ZmYyMCwgMCwgezB4NDgsMHhhMCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4MDAsMHgyMiwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZWMsMHgxMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYzMCwgMCwgezB4NjYsMHgwOCwweDBhLDB4YTgsMHgxMiwweDI2LDB4MTAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDI4LDB4YjAsMHgyNiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwYywweDAwLDB4YjksMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY1MCwgMCwgezB4MDgsMHgzMiwweDAyLDB4Y2MsMHgwNCwweGIzLDB4MDAsMHgyMCwweGMwLDB4NGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY2MCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAxLDB4MDAsMHg5MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwNiwweDQyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZmY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWMsMHg2YywweDAwLDB4ZjksMHgwMCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmY4MCwgMCwgezB4MGMsMHg4MiwweDAyLDB4ZGMsMHgwMSwweGZmLDB4MDAsMHhiMiwweGMwLDB4MGIsMHhmMSwweDAzLDB4YmMsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY5MCwgMCwgezB4MjYsMHg0MCwweDJlLDB4ODAsMHgwMywweDIxLDB4MDQsMHhjZiwweDAwLDB4YmIsMHhjMCwweDBjLDB4OTAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZmZhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmZiMCwgMCwgezB4MGYsMHg4MSwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZjMCwgMCwgezB4MmQsMHg0MCwweDJmLDB4YzAsMHgwMywweGYwLDB4ODgsMHhmZiwweDAwLDB4MzcsMHhjMCwweDhmLDB4ZDAsMHgwMywweGU4LDB4MDIgfSB9LAoreyAgMTYsIDB4ZmZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDQwLDB4ZmYsMHg4MCwweDMzLDB4YzIgfSB9LAoreyAgMTYsIDB4ZmZlMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4N2MsMHhhMCwweGZmLDB4OTAsMHgzZiwweGM0LDB4MmMsMHhiNCwweDAzLDB4YmMsMHg4MCwweGNmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmZmMCwgMCwgezB4MzcsMHhlMCwweDBmLDB4ZjEsMHg5MywweDZlLDB4NDQsMHhiZiwweDMwLDB4M2YsMHgyMCwweDJjLDB4ZjgsMHg2MywweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODAxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweDAwLDB4ZWIsMHgyMCwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4ODAyMCwgMCwgezB4MDgsMHhiOCwweDUyLDB4M2QsMHgwMCwweGIzLDB4MDAsMHgyZSwweGRjLDB4MDgsMHhmNCwweDQyLDB4MWMsMHg0MiwweDhiLDB4NDAgfSB9LAoreyAgMTYsIDB4ODAzMCwgMCwgezB4MjIsMHhjOCwweDBiLDB4ZjYsMHgwMywweDZjLDB4ODgsMHhiYiwweDMwLDB4MmUsMHgwMCwweDA4LDB4YjIsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODA0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YmIsMHgwOCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODA1MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4NGMsMHhhMCwweGIzLDB4MjAsMHgyNiwweDgwLDB4ODgsMHgzNiwweDAyLDB4Y2MsMHhhMCwweDkzLDB4NjAgfSB9LAoreyAgMTYsIDB4ODA2MCwgMCwgezB4YTQsMHhjMiwweDBhLDB4MzIsMHg0MiwweDRjLDB4OTAsMHhiMywweDIwLDB4MmMsMHgwYiwweDg4LDB4MzAsMHg4MiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODA3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA4LDB4YmIsMHgyMiwweGEyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODA4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweDkwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDliLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA5MCwgMCwgezB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiYiwweDAyLDB4MmUsMHgyMCwweDA4LDB4YjAsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YjEsMHg4MywweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODBiMCwgMCwgezB4MGMsMHgxYSwweDAzLDB4NmMsMHgxMCwweGZiLDB4MDAsMHgzNCwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwOCwweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBjMCwgMCwgezB4MzYsMHhjMCwweDBlLDB4YjAsMHgwYiwweDZjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHgyOCwweDBjLDB4YjAsMHgwMiwweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDAwLDB4ZWQsMHg4MCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ODBlMCwgMCwgezB4MGYsMHhkNCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGM4LDB4MGYsMHhiMCwweDAzLDB4M2MsMHgwMCwweGVlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODBmMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgyMCwweGIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODExMCwgMCwgezB4MGYsMHhiNCwweDAzLDB4YWMsMHgwMiwweGNiLDB4MDAsMHgzMiwweDkwLDB4MGUsMHhiMCwweDAzLDB4NmMsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEyMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg5MSwweDBmLDB4YjAsMHgwMywweDkwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YmIsMHg4MCwweDIzLDB4ZDcgfSB9LAoreyAgMTYsIDB4ODE0MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4M2MsMHgxNCwweDhiLDB4MDAsMHg2YSwweDA4LDB4MjgsMHhmMCwweDAwLDB4YmMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE1MCwgMCwgezB4YmUsMHhjMCwweDg4LDB4ZjAsMHgxMywweDJjLDB4MDAsMHhlZiwweDAwLDB4MmUsMHg4MCwweDBiLDB4YjAsMHgwNywweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHg0MCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODE3MCwgMCwgezB4MGIsMHgyOCwweDAyLDB4OGMsMHgwMCwweDgzLDB4MDEsMHgyMCwweGMwLDB4MWEsMHhiOCwweDAwLDB4NmMsMHgxMCwweGExLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE4MCwgMCwgezB4NjgsMHhjMCwweDJhLDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAyLDB4MmUsMHgwMCwweDRiLDB4MzAsMHgwMiwweGY4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODE5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHhhMCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODFhMCwgMCwgezB4MGIsMHhlYywweGMyLDB4MWUsMHgwNCwweDg3LDB4ODAsMHgyOSwweGU0LDB4MDgsMHg3OSwweDgyLDB4OWUsMHg0MCwweGFmLDB4OTAgfSB9LAoreyAgMTYsIDB4ODFiMCwgMCwgezB4MjksMHhlMCwweDBhLDB4MzgsMHgwMCwweDFlLDB4MDAsMHhhNywweDkwLDB4MmQsMHgyNCwweDBiLDB4NzgsMHgwMiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDUwLDB4ZmIsMHgwOSwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODFkMCwgMCwgezB4MGYsMHgyMCwweDAyLDB4OGMsMHg0MCwweGMzLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgzOCwweDAzLDB4NGMsMHg0NCwweGUxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFlMCwgMCwgezB4YWEsMHhjMCwweDBlLDB4MzEsMHg0MywweDhlLDB4MDAsMHhmMywweDAwLDB4M2MsMHgwMCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4ODFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NGQsMHhiYywweDAwLDB4ZmYsMHgyMCwweDNmLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODIwMCwgMCwgezB4NGYsMHg3MCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGYsMHhmMywweDQzLDB4ZmMsMHg0MCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODIxMCwgMCwgezB4YmYsMHhjMCwweDBkLDB4ZjQsMHhjMywweGZjLDB4NDAsMHhmZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ODIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMCwweDMyLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODIzMCwgMCwgezB4MGQsMHg5MCwweDAxLDB4ZWQsMHhjMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MWYsMHhiYSwweDAzLDB4YWMsMHhjMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODI0MCwgMCwgezB4MzIsMHhlMCwweDhkLDB4YjQsMHg0MywweGVjLDB4MDAsMHhmYiwweDAwLDB4MzYsMHhhMCwweDBjLDB4YjAsMHgwMywweDZhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzggfSB9LAoreyAgMTYsIDB4ODI2MCwgMCwgezB4MDgsMHg2MCwweDAyLDB4ZGMsMHgyMCwweGI3LDB4MDAsMHgyZCwweGMwLDB4MGYsMHg3NCwweGEyLDB4MWMsMHgyOCwweGQ2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODI3MCwgMCwgezB4MzUsMHhjMCwweDA4LDB4NzIsMHgwMiwweDVjLDB4MDgsMHhiNywweDQ0LDB4YTEsMHg4MCwweDQ4LDB4NzAsMHgwMiwweDEyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg4MCwweDIwLDB4ZTQgfSB9LAoreyAgMTYsIDB4ODI5MCwgMCwgezB4MDksMHg3OCwweDI2LDB4ZGUsMHgwMCwweGI3LDB4ODAsMHgyZCwweGUyLDB4MGEsMHg3MCwweDEyLDB4OGMsMHg4OCwweDgxLDB4ODAgfSB9LAoreyAgMTYsIDB4ODJhMCwgMCwgezB4MjEsMHhlMCwweDA5LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiMywweGEwLDB4MjUsMHhhMCwweDI4LDB4NzgsMHgwMiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAxLDB4YmIsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODJjMCwgMCwgezB4MDgsMHgzMCwweDQyLDB4ZWMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgzMCwweDIyLDB4MGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJkMCwgMCwgezB4MjQsMHhjMSwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhlMCwweDA4LDB4YjAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwOCwweGIyLDB4ODAgfSB9LAoreyAgMTYsIDB4ODJmMCwgMCwgezB4MGQsMHhlMiwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzZiwweDgwLDB4MGEsMHhhMCwweDAzLDB4YTgsMHgwMCwweGNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ODMwMCwgMCwgezB4MzIsMHg4MCwweDA1LDB4YTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4MzcsMHhhOCwweDBjLDB4YTAsMHgwMywweDdhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg2MCwweDA4LDB4ZjgsMHgwMCwweDNjLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMyMCwgMCwgezB4MGYsMHg4OCwweDAxLDB4ZTAsMHgwMCwweGY4LDB4MDQsMHgzYywweDAwLDB4NGYsMHgwMCwweDEzLDB4YzAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODMzMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDYwLDB4MDAsMHhmOCwweDAyLDB4M2UsMHgwMSwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHg5MCwweDEyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODM1MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YTQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDcwLDB4MGUsMHg5NCwweDMzLDB4MjQsMHgwOCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODM2MCwgMCwgezB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODM3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MiwweDIyLDB4NjAgfSB9LAoreyAgMTYsIDB4ODM4MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDMsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgwMSwweDgxLDB4MDQgfSB9LAoreyAgMTYsIDB4ODM5MCwgMCwgezB4M2UsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAyLDB4MjIsMHg0MCwweDBlLDB4OTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHg0MCwweDJhLDB4NGEgfSB9LAoreyAgMTYsIDB4ODNiMCwgMCwgezB4MDgsMHg5MSwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDBhLDB4MjQsMHgwNCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODNjMCwgMCwgezB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiMSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgwMSwweGE4LDB4NDggfSB9LAoreyAgMTYsIDB4ODNlMCwgMCwgezB4ODgsMHg5MCwweDAyLDB4MDQsMHg4MCwweDgxLDB4NDAsMHgyYywweDUwLDB4MTgsMHgxNCwweDBhLDB4ODQsMHgxMCwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4ODNmMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHgzMSwweDIwLDB4MjAsMHg0MCwweDBhLDB4MTAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjAsMHg1MCwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQxMCwgMCwgezB4MmMsMHhhMCwweDAyLDB4YTEsMHg0MiwweGM4LDB4MDAsMHgzZSwweDAwLDB4ZGUsMHgwMCwweDIzLDB4MjEsMHg0MiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODQyMCwgMCwgezB4MzgsMHgxNCwweDBmLDB4ODUsMHgwMywweGUxLDB4NDAsMHhmOCwweDUwLDB4MzgsMHgxNCwweDBmLDB4MDUsMHgwMywweDJlLDB4MDEgfSB9LAoreyAgMTYsIDB4ODQzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDA4LDB4ZmQsMHgwMCwweDM2LDB4NDQgfSB9LAoreyAgMTYsIDB4ODQ0MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4NjQsMHg0MCwweGY5LDB4MDAsMHgzZCwweDUwLDB4MGYsMHg5NCwweDAzLDB4ZTUsMHgwMCwweDdkLDB4NDAgfSB9LAoreyAgMTYsIDB4ODQ1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBlLDB4OTAsMHgwMywweGU2LDB4MDQgfSB9LAoreyAgMTYsIDB4ODQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNCwweDAwLDB4ZmQsMHg0MCwweDMzLDB4NjggfSB9LAoreyAgMTYsIDB4ODQ3MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4ZTcsMHg4MSwweGY5LDB4MDAsMHgzMywweDc4LDB4MGQsMHhkOCwweDEzLDB4MjYsMHhhMCwweGNkLDB4YTAgfSB9LAoreyAgMTYsIDB4ODQ4MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4OWIsMHgwMywweDI0LDB4MDAsMHhmOSwweGEwLDB4M2MsMHg0NCwweDJjLDB4OTAsMHgwNywweDg2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4YjgsMHhhMCwweGEyLDB4MTAgfSB9LAoreyAgMTYsIDB4ODRhMCwgMCwgezB4MTgsMHg4MCwweDAzLDB4ODIsMHg4NCwweGI4LDB4ODAsMHgzNiwweDJjLDB4MmUsMHgwZiwweDAyLDB4YTMsMHhhMCwweGQ4LDB4ZTAgfSB9LAoreyAgMTYsIDB4ODRiMCwgMCwgezB4MzYsMHgyMiwweDhiLDB4MDgsMHgwMywweDQyLDB4YTAsMHhmOCwweGUwLDB4MmUsMHgyOCwweDA4LDB4ODgsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ODRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweGEwLDB4NTAgfSB9LAoreyAgMTYsIDB4ODRkMCwgMCwgezB4MjgsMHgzMCwweDAyLDB4YzUsMHg4MCwweGIxLDB4MDgsMHgyMCwweDQwLDB4MDksMHgxMCwweGEyLDB4NDQsMHgwOCwweDgxLDB4NDggfSB9LAoreyAgMTYsIDB4ODRlMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTQsMHgwMiwweDA0LDB4ODAsMHhiMSwweDM4LDB4MmMsMHg0OCwweDA4LDB4MTIsMHg4MiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODRmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4YjEsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODUwMCwgMCwgezB4MDgsMHg5MiwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDIsMHgyNiwweDU4LDB4NGEsMHg5MCwweDAyLDB4ZTQsMHgwOCwweDk5LDB4NDAgfSB9LAoreyAgMTYsIDB4ODUxMCwgMCwgezB4MjYsMHg0MCwweDBiLDB4OTAsMHgwMiwweDY0LDB4MDgsMHhiOSwweDAxLDB4MmMsMHg0OCwweDA4LDB4OTAsMHgxMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ODUyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODUzMCwgMCwgezB4MDgsMHg5OCwweDgzLDB4ZTQsMHgwNCwweGI5LDB4MDEsMHgzMCwweDQwLDB4MGQsMHg5MCwweDBiLDB4NjQsMHgwMiwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU0MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MWUsMHg1OCwweDBjLDB4OTAsMHgwMywweGE4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODU1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgyMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ODU2MCwgMCwgezB4MGYsMHg5OCwweDAzLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgzZSwweDQyLDB4OGUsMHgxMCwweDRiLDB4ODQsMHgwNCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU3MCwgMCwgezB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMCwweDMyLDB4MDggfSB9LAoreyAgMTYsIDB4ODU5MCwgMCwgezB4MGYsMHg4NCwweDgzLDB4YTAsMHgwNCwweGM4LDB4MDQsMHgzZSwweDAwLDB4ODMsMHg4MCwweDAxLDB4MjAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVhMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4MDAsMHgwMywweGEwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgxMCwweDRlLDB4ODAsMHgxMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODViMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHg5MCwweGEzLDB4ODAgfSB9LAoreyAgMTYsIDB4ODVjMCwgMCwgezB4MGIsMHhlNCwweDAyLDB4MjgsMHgwMCwweGNhLDB4MDAsMHgyZiwweDgwLDB4NGEsMHhhMCwweDEzLDB4YTgsMHgwMCwweGFhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVkMCwgMCwgezB4MzYsMHg4MSwweDBiLDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHhjMCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODVmMCwgMCwgezB4MGIsMHgzNCwweDAyLDB4OGMsMHgwMCwweDhiLDB4MDAsMHgyYywweGYwLDB4OGIsMHgxOCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYwMCwgMCwgezB4NjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDIsMHg4MywweDAwLDB4MjgsMHhjMSwweDBhLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDAwLDB4YjQsMHgwYiwweDY5LDB4YzAgfSB9LAoreyAgMTYsIDB4ODYyMCwgMCwgezB4MDksMHg1OCwweDA2LDB4MWUsMHg4MCwweDk3LDB4MTAsMHgyZiwweGMyLDB4NDgsMHg3MCwweDgyLDB4OWMsMHg4MCwweGE3LDB4MDggfSB9LAoreyAgMTYsIDB4ODYzMCwgMCwgezB4MjUsMHhjYywweDBiLDB4NzAsMHgwMiwweDFlLDB4ODEsMHg4NywweGEyLDB4YWIsMHhjNCwweDA4LDB4NzMsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDEwLDB4ZGMsMHg4NCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODY1MCwgMCwgezB4MGYsMHg3OCwweDQyLDB4OWYsMHgwMiwweGM3LDB4ODgsMHgzZCwweGUwLDB4MmYsMHg3MSwweDAzLDB4NGUsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4ODY2MCwgMCwgezB4MjEsMHhlMiwweDBmLDB4NzgsMHg4MywweDllLDB4NDksMHhjZiwweGQwLDB4MzksMHhlOCwweDBlLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ODY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NGQsMHhhYywweDQwLDB4Y2EsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODY4MCwgMCwgezB4OGYsMHgzMCwweDIzLDB4ZWMsMHhhOCwweGViLDB4NDAsMHgzYywweGMwLDB4MGYsMHg5NiwweDQzLDB4ZWQsMHg4MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY5MCwgMCwgezB4M2UsMHhkOCwweDhmLDB4YjEsMHg0MywweGVkLDB4ODAsMHhmYiwweDIwLDB4MzYsMHhjYSwweDBmLDB4YjAsMHhhMywweDgyLDB4MDYgfSB9LAoreyAgMTYsIDB4ODZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDgwLDB4ZmMsMHg4MCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODZiMCwgMCwgezB4MDUsMHhhYSwweDEwLDB4ZmUsMHg0NCwweGZmLDB4OTAsMHgzZiwweGUxLDB4Y2YsMHhmOSwweDE3LDB4M2YsMHgyMCwweGQ3LDB4ODAgfSB9LAoreyAgMTYsIDB4ODZjMCwgMCwgezB4OGIsMHhlNCwweDBmLDB4ZjgsMHgwMywweDNlLDB4MzAsMHhmZiwweDgwLDB4MzcsMHhlMCwweDBmLDB4ZjgsMHgwMCwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YmQsMHgxMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ODZlMCwgMCwgezB4MDgsMHg0YSwweDAyLDB4ZGMsMHhjMCwweGI3LDB4MDAsMHgyZCwweGMyLDB4MGMsMHhkMywweDAyLDB4MWMsMHg4MCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODZmMCwgMCwgezB4MjksMHhjMCwweDRiLDB4NzIsMHgwMiwweDFjLDB4MDAsMHhiNywweDAxLDB4MjEsMHhjMCwweDBiLDB4ZjAsMHgxMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODcwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDkwLDB4MzQsMHgwMCwweDIxLDB4ODAgfSB9LAoreyAgMTYsIDB4ODcxMCwgMCwgezB4MDksMHg3MCwweDAwLDB4NWMsMHgwYywweGI3LDB4MDAsMHgyZCwweGM0LDB4MDgsMHg1MCwweDFhLDB4MGMsMHgwMCwweDk3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODcyMCwgMCwgezB4MjEsMHhjMCwweDRiLDB4MzAsMHgwMiwweDFjLDB4MDAsMHhiNywweDAwLDB4MjUsMHhjMCwweDBiLDB4NzAsMHgwMiwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODczMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4YjAsMHgwMCwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc0MCwgMCwgezB4MDgsMHgzZSwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDIsMHgwYywweGUwLDB4MmIsMHhiMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc1MCwgMCwgezB4MjgsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MTAsMHhiMywweDAwLDB4MjAsMHhkNiwweDAzLDB4MzAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODc2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmIsMHgwMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc3MCwgMCwgezB4MDUsMHhiZSwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAsMHgzZSwweDIwLDB4MGMsMHhiMCwweDAzLDB4M2MsMHgwMCwweGQ5LDB4ODAgfSB9LAoreyAgMTYsIDB4ODc4MCwgMCwgezB4MzMsMHhjMCwweDhiLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhlMCwweDBmLDB4ZjAsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODc5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdhMCwgMCwgezB4MGYsMHhhNCwweDIzLDB4Y2MsMHgwMCwweGZiLDB4MDAsMHgzZSwweDgxLDB4MDgsMHg5MCwweDAzLDB4ZWMsMHgwMCwweGU5LDB4MTQgfSB9LAoreyAgMTYsIDB4ODdiMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDM3LDB4ODAgfSB9LAoreyAgMTYsIDB4ODdkMCwgMCwgezB4MGYsMHhmYSwweDAzLDB4ZmMsMHgwMCwweGNmLDB4MDAsMHgzZiwweDkwLDB4MDYsMHhkYywweDIzLDB4M2MsMHgwMCwweGZkLDB4MTAgfSB9LAoreyAgMTYsIDB4ODdlMCwgMCwgezB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHg0MywweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4ODdmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg2YywweDA5LDB4YmIsMHgxOSwweDIyLDB4MzIgfSB9LAoreyAgMTYsIDB4ODgwMCwgMCwgezB4MGIsMHhiZSwweDAzLDB4NmMsMHgwMCwweDhiLDB4MDAsMHgyYywweDkwLDB4MGQsMHhiOCwweDAyLDB4YWMsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgxMCwgMCwgezB4ZjIsMHhjMCwweDBiLDB4YjAsMHgxMiwweGFjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMywweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4ODgyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDEwLDB4YjMsMHgwMCwweDI2LDB4MjAgfSB9LAoreyAgMTYsIDB4ODgzMCwgMCwgezB4MGIsMHg5MCwweDEyLDB4ZWMsMHgwMSwweDhiLDB4MDAsMHgyYSwweGMyLDB4MGEsMHg5MCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg0MCwgMCwgezB4YTIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAxLDB4YjMsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg2MCwgMCwgezB4MGIsMHgwMCwweDAyLDB4OGMsMHgwMCwweDgzLDB4MDAsMHgyZSwweGMwLDB4MGIsMHgzNCwweDAyLDB4OGMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg3MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBkLDB4MDAsMHhhMywweDAwLDB4YTAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YmIsMHgwNCwweDM2LDB4ODAgfSB9LAoreyAgMTYsIDB4ODg5MCwgMCwgezB4MGYsMHhiMiwweDAyLDB4ZmMsMHgwMiwweGNmLDB4MDIsMHgzOCwweGMwLDB4MGUsMHhmMCwweDAzLDB4M2MsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhhMCwgMCwgezB4MjMsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNkLDB4MDIsMHhlZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHg0MywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4ODhiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhjMCwgMCwgezB4MGYsMHhmNCwweDIzLDB4N2MsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGQsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhkMCwgMCwgezB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODgsMHhkZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4ODhlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweDUwLDB4Y2UsMHgxMiwweDMzLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODhmMCwgMCwgezB4NGMsMHg4NiwweDgzLDB4MzAsMHg4MCwweDVmLDB4NjgsMHgzMywweGM0LDB4MGYsMHhmMywweDgzLDB4M2MsMHhjMCwweGNjLDB4MzggfSB9LAoreyAgMTYsIDB4ODkwMCwgMCwgezB4YjMsMHgwOCwweDBjLDB4YzYsMHgwMywweGYxLDB4YTAsMHhmZiwweDAwLDB4MzMsMHgyNCwweDBjLDB4YzIsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweDgwLDB4ZDIsMHgyMCwweDIzLDB4ZDggfSB9LAoreyAgMTYsIDB4ODkyMCwgMCwgezB4MGQsMHg5NiwweDAyLDB4ODgsMHg2MCwweGFmLDB4NDAsMHgyMywweGRjLDB4MGIsMHhmNiwweDAyLDB4M2MsMHhjMiwweDg4LDB4NjAgfSB9LAoreyAgMTYsIDB4ODkzMCwgMCwgezB4MjIsMHg1MiwweDA4LDB4OTEsMHgyMiwweGUxLDB4MDAsMHhiNywweDI0LDB4YTIsMHg0OCwweDhhLDB4ODQsMHg4MiwweDYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODk0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgwMCwweGUwLDB4YzQgfSB9LAoreyAgMTYsIDB4ODk1MCwgMCwgezB4MGEsMHgwMCwweDAyLDB4MDQsMHg4MCwweGEzLDB4MjAsMHhhOCwweGMwLDB4MWIsMHgzMCwweDBhLDB4MGMsMHgwMCwweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk2MCwgMCwgezB4MjgsMHgwYywweDA5LDB4MDIsMHgwMiwweGM0LDB4ODAsMHhiMywweDFjLDB4MjIsMHgwOCwweDE5LDB4MDMsMHgwMiwweGUyLDB4MTEgfSB9LAoreyAgMTYsIDB4ODk3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhNCwweDAwLDB4OTksMHg4MCwweDYyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODk4MCwgMCwgezB4MGIsMHhhMCwweDMyLDB4YTQsMHg1MSwweGFiLDB4MDAsMHgyYSwweGMwLDB4OGIsMHhiMCwweDAwLDB4MGMsMHgwMCwweGE5LDB4YzAgfSB9LAoreyAgMTYsIDB4ODk5MCwgMCwgezB4MmEsMHgyMSwweDA4LDB4YjgsMHgyMiwweGUyLDB4MDAsMHhiYiwweDAwLDB4MjIsMHg4NCwweDFiLDB4YTgsMHg0MiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODlhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMiwweDAwLDB4Y2IsMHhjOSwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODliMCwgMCwgezB4MGUsMHg4YiwweDEzLDB4MjIsMHgxMCwweGRiLDB4MDEsMHgzMiwweGMwLDB4MGYsMHhiMCwweDBiLDB4MmMsMHgwMCwweDY4LDB4ODEgfSB9LAoreyAgMTYsIDB4ODljMCwgMCwgezB4M2EsMHgyMiwweDJjLDB4ODgsMHgyMywweGUzLDB4MDAsMHhmYiwweDAwLDB4MzAsMHgzMCwweDhkLDB4OWMsMHg4MywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODlkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYSwweDQwLDB4ZjcsMHgwNCwweDNlLDB4YzIgfSB9LAoreyAgMTYsIDB4ODllMCwgMCwgezB4MGQsMHhkOCwweDIzLDB4ZDgsMHgwMCwweDdiLDB4MDAsMHgzNywweGMwLDB4MGYsMHg3MCwweDMzLDB4ZmMsMHgxMCwweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlmMCwgMCwgezB4MzUsMHhjMCwweDhmLDB4YzAsMHgwMywweGY0LDB4MDAsMHhmNywweDAyLDB4M2YsMHhlMCwweDBlLDB4ODAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4MSwweDIwLDB4YzgsMHgwOCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4OGExMCwgMCwgezB4MGMsMHgwMCwweDgzLDB4MjQsMHg0MCwweGMzLDB4ODksMHgzYSwweGMwLDB4MGUsMHhiMCwweDBiLDB4MmMsMHgwOCwweGM5LDB4NDggfSB9LAoreyAgMTYsIDB4OGEyMCwgMCwgezB4NzIsMHg1NCwweDBmLDB4OTEsMHgwMywweGVkLDB4MDIsMHhlYiwweDhhLDB4M2EsMHg2MiwweDhjLDB4ODAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4OGEzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYiwweDA0LDB4ODgsMHg0MCwweGEzLDB4YzIgfSB9LAoreyAgMTYsIDB4OGE0MCwgMCwgezB4MDIsMHhhZSwweDEyLDB4MjcsMHg0MiwweDhmLDB4NDQsMHgyMywweGMyLDB4MGIsMHhmNCwweDAyLDB4M2QsMHgwMCwweDBhLDB4NDAgfSB9LAoreyAgMTYsIDB4OGE1MCwgMCwgezB4MjIsMHhlMCwweDBiLDB4YjUsMHgwMiwweGVjLDB4MjAsMHg4ZiwweDQ0LDB4YTIsMHg0MCwweDhkLDB4YmQsMHgyMywweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OSwweDQwLDB4ODMsMHg4MSwweDI0LDB4YzEgfSB9LAoreyAgMTYsIDB4OGE3MCwgMCwgezB4MDgsMHgyOCwweDAyLDB4MDEsMHgwMCwweDkzLDB4MDAsMHhhMCwweGU4LDB4MGEsMHgzMCwweDgyLDB4OGYsMHg2MCwweGIzLDB4OTAgfSB9LAoreyAgMTYsIDB4OGE4MCwgMCwgezB4NjAsMHhiOCwweDBiLDB4MjgsMHgxMiwweDRhLDB4MDAsMHg5MywweDAwLDB4MjAsMHg5MCwweDA5LDB4MjAsMHgwMiwweDc4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGE5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAyLDB4ODcsMHhhOCwweDI1LDB4ZTAgfSB9LAoreyAgMTYsIDB4OGFhMCwgMCwgezB4MGEsMHg3YiwweDAyLDB4MWEsMHgwNCwweDg3LDB4ODAsMHgyMSwweGU0LDB4MGIsMHg3OCwweDgyLDB4OGUsMHgwMiwweDk2LDB4OTEgfSB9LAoreyAgMTYsIDB4OGFiMCwgMCwgezB4MjEsMHgyMSwweDBiLDB4NjksMHg0MCwweGRiLDB4NDAsMHg5NywweDkyLDB4MjMsMHhhMCwweDg5LDB4NTgsMHg4MiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyNSwweDgyLDB4YzMsMHgwMCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4OGFkMCwgMCwgezB4MGMsMHg5YiwweDQzLDB4MDgsMHhkMCwweGQzLDB4MjAsMHgzOCwweGMwLDB4MGUsMHhiMCwweDAzLDB4OGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFlMCwgMCwgezB4MjAsMHg4MCwweDA3LDB4MTAsMHgwMywweGUwLDB4MDAsMHhkMywweDEwLDB4MzgsMHgxOCwweDBkLDB4MzAsMHgwMywweDUyLDB4MDIgfSB9LAoreyAgMTYsIDB4OGFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiNCwweDAwLDB4N2YsMHgyMCwweDFiLDB4ZDAgfSB9LAoreyAgMTYsIDB4OGIwMCwgMCwgezB4MGYsMHhmMSwweDAzLDB4ZjgsMHg0MCwweGVmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhiNCwweDAzLDB4N2MsMHgyMCwweGNmLDB4MDQgfSB9LAoreyAgMTYsIDB4OGIxMCwgMCwgezB4YmYsMHg0MCwweDBmLDB4ZjAsMHgwMywweGU0LDB4MTAsMHhlZiwweDE4LDB4M2QsMHhjMCwweDBmLDB4ZTAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OGIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAwLDB4ZTMsMHgwMCwweGIyLDB4YzQgfSB9LAoreyAgMTYsIDB4OGIzMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4MjQsMHgwMCwweGRiLDB4NjgsMHgzMiwweGM4LDB4MGMsMHhiNCwweDAzLDB4ZWMsMHg4MCwweGM4LDB4ODAgfSB9LAoreyAgMTYsIDB4OGI0MCwgMCwgezB4YjYsMHhlMCwweDBjLDB4YTAsMHgwMywweDJlLDB4MDAsMHhjYiwweGUwLDB4YjIsMHg2MCwweDBjLDB4YjgsMHgwYiwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAyLDB4ODcsMHgwMCwweGExLDB4YzggfSB9LAoreyAgMTYsIDB4OGI2MCwgMCwgezB4MDgsMHg3MCwweDAyLDB4MWMsMHgwOCwweDk3LDB4MDIsMHgyMSwweGQ0LDB4MDgsMHg3NCwweDAyLDB4ZGMsMHhjMCwweDA3LDB4MDAgfSB9LAoreyAgMTYsIDB4OGI3MCwgMCwgezB4MjEsMHhjMCwweDg4LDB4NzAsMHgwMiwweDE4LDB4MDAsMHg4MywweDA4LDB4MjEsMHhjMCwweDA4LDB4NTAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDIwLDB4YWQsMHg4MCwweDI5LDB4ZTAgfSB9LAoreyAgMTYsIDB4OGI5MCwgMCwgezB4MDgsMHg1OCwweDAyLDB4MWUsMHgwMCwweDk3LDB4YjAsMHgyMSwweGU4LDB4MDgsMHg3OCwweDAyLDB4ZGUsMHgxMCwweDE1LDB4ODAgfSB9LAoreyAgMTYsIDB4OGJhMCwgMCwgezB4MjEsMHhhMSwweDA4LDB4NDgsMHgwMiwweDVlLDB4MDAsMHg4NywweGE0LDB4NjUsMHhhMCwweDA4LDB4NzgsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZiwweDEwLDB4ODEsMHg3MCwweGE4LDB4YzAgfSB9LAoreyAgMTYsIDB4OGJjMCwgMCwgezB4MzgsMHgzMCwweDBhLDB4MGQsMHgwMCwweDkzLDB4MDAsMHhhMCwweGMxLDB4MjgsMHgzMCwweDAyLDB4Y2MsMHgwMiwweDgzLDB4ODggfSB9LAoreyAgMTYsIDB4OGJkMCwgMCwgezB4MjAsMHhlMCwweDM4LDB4MzQsMHgwYSwweDRkLDB4NzIsMHg4MywweDAwLDB4MjQsMHhlOCwweDI4LDB4MzQsMHg4MiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDQwLDB4ZWUsMHhjMCwweGJhLDB4ODAgfSB9LAoreyAgMTYsIDB4OGJmMCwgMCwgezB4MGMsMHhlMCwweDAzLDB4MzksMHgxMCwweGRhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGRlLDB4YzggfSB9LAoreyAgMTYsIDB4OGMwMCwgMCwgezB4MzMsMHhhMCwweDBjLDB4ZTAsMHgwMywweDdiLDB4MDAsMHhjYSwweDAwLDB4MzcsMHhiMSwweDBjLDB4ZTQsMHgyMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OGMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhjMSwweDAwLDB4ZjgsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGMyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YzAsMHgyMCwweDM4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDIgfSB9LAoreyAgMTYsIDB4OGMzMCwgMCwgezB4M2EsMHgyNCwweDBmLDB4ODAsMHg4MywweGEwLDB4MDEsMHhmOCwweDA0LDB4M2EsMHgwNCwweDBkLDB4ODAsMHgxMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDQ0LDB4YzEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGM1MCwgMCwgezB4MGMsMHg5MCwweDMyLDB4MjQsMHgwYywweGMxLDB4MDYsMHgzOCwweDQwLDB4MGQsMHg5MCwweDA5LDB4MDQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGM2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhmOSwweDAxLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGM3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA2LDB4ODksMHgwMCwweDJhLDB4NTAgfSB9LAoreyAgMTYsIDB4OGM4MCwgMCwgezB4MDgsMHg5NCwweDBhLDB4MjQsMHgwMCwweDg5LDB4NDIsMHgyMiwweDUwLDB4MGEsMHg5MCwweDEyLDB4MjUsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGM5MCwgMCwgezB4MmUsMHg1MCwweDBiLDB4OWMsMHgwYSwweDI1LDB4MTAsMHhiOSwweDAwLDB4MmUsMHg1MCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDIwLDB4ODksMHgwMCwweDIwLDB4NDIgfSB9LAoreyAgMTYsIDB4OGNiMCwgMCwgezB4MDgsMHgxMCwweGMyLDB4YWMsMHgxMCwweDg5LDB4MDgsMHgyYSwweDQyLDB4MDksMHg5MCwweDAyLDB4MjQsMHgyMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGNjMCwgMCwgezB4MmUsMHg0MiwweDBhLDB4YjEsMHg4MiwweDJjLDB4MjAsMHhiOSwweDAwLDB4NmUsMHg0MiwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4ODMsMHgwMCwweDI4LDB4NDggfSB9LAoreyAgMTYsIDB4OGNlMCwgMCwgezB4MDgsMHgxMiwweDYyLDB4OGMsMHg4MCwweDgxLDB4MDAsMHgyMCwweDQwLDB4MDIsMHgxMCwweDAyLDB4ODQsMHg4MCwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4OGNmMCwgMCwgezB4MmMsMHg0OSwweDBiLDB4MTIsMHgwNiwweDA0LDB4ODQsMHhiMywweDAyLDB4NmMsMHg0MCwweDBiLDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg0MSwweGUwLDB4YzgsMHg3OCwweDMwLDB4MTQgfSB9LAoreyAgMTYsIDB4OGQxMCwgMCwgezB4NGMsMHgwNSwweDEzLDB4YTEsMHg0MiwweGMwLDB4NzgsMHgzOCwweDFlLDB4MGQsMHg4NywweDgzLDB4MDEsMHg0MCwweGQwLDB4NTAgfSB9LAoreyAgMTYsIDB4OGQyMCwgMCwgezB4M2MsMHgxNCwweDBlLDB4MDUsMHgwMywweDAxLDB4NDAsMHhmOCwweDc4LDB4M2MsMHgxNCwweDBmLDB4MDUsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4OGQzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDBlLDB4NDQgfSB9LAoreyAgMTYsIDB4OGQ0MCwgMCwgezB4MmYsMHhmMSwweDAzLDB4NzQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHg0MCwweGZkLDB4MTAgfSB9LAoreyAgMTYsIDB4OGQ1MCwgMCwgezB4M2YsMHg0NCwweDBmLDB4ZDEsMHgwMSwweGY0LDB4NDAsMHhmOSwweDAxLDB4M2YsMHhjMCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4OGQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDIyLDB4ZTksMHg4OCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGQ3MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjQsMHgxNiwweGM5LDB4OGMsMHgzNiwweDdiLDB4OGYsMHg5YywweDgzLDB4YTcsMHg5MCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ4MCwgMCwgezB4M2UsMHg1MCwweDA0LDB4OTQsMHgxMywweDI0LDB4NTAsMHhjOSwweGUwLDB4M2UsMHg1MCwweDBmLDB4OTAsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMiwweDgwLDB4ODgsMHhhMCwweDIyLDB4MjggfSB9LAoreyAgMTYsIDB4OGRhMCwgMCwgezB4MGIsMHg4YSwweDAyLDB4MmEsMHg4MCwweDg4LDB4YTQsMHgyMiwweDMwLDB4MDgsMHg4ZSwweDBhLDB4MjIsMHgwMiwweDg4LDB4YTAgfSB9LAoreyAgMTYsIDB4OGRiMCwgMCwgezB4MmUsMHgyOCwweDg4LDB4YWEsMHgxMiwweDIyLDB4OTAsMHg4OCwweGY0LDB4MmUsMHgyMCwweDBiLDB4YzgsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4OGRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhkNCwweDIwLDB4YTUsMHgwOCwweDIxLDB4NDIgfSB9LAoreyAgMTYsIDB4OGRkMCwgMCwgezB4MGIsMHg1MCwweDgyLDB4MTQsMHgzMSwweDg1LDB4MDgsMHgyNSwweDQwLDB4MGEsMHg1MCwweDIyLDB4OTQsMHg0MCwweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4OGRlMCwgMCwgezB4NmQsMHg0MCwweDA4LDB4NTAsMHgwMiwweDU0LDB4MDIsMHg5NSwweDAwLDB4MmQsMHg0OCwweDBiLDB4NTAsMHg4MiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGRmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHg4NCwweDAwLDB4OGQsMHgxMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4OGUwMCwgMCwgezB4MGIsMHhkMCwweDAwLDB4MzQsMHgwMSwweDhkLDB4MDAsMHgyMywweDQxLDB4NTgsMHhkMCwweDAyLDB4MzQsMHgwMCwweDhkLDB4MDggfSB9LAoreyAgMTYsIDB4OGUxMCwgMCwgezB4MmYsMHg1MCwweDA4LDB4ZDIsMHgwMiwweDc0LDB4ODAsMHg5ZCwweDAwLDB4MmYsMHg0OCwweDBiLDB4ZGMsMHgwMiwweDQ2LDB4MDQgfSB9LAoreyAgMTYsIDB4OGUyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDQwLDB4ZTksMHhjMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGUzMCwgMCwgezB4MGYsMHg5MCwweDA5LDB4MjYsMHgwMCwweGM5LDB4MDQsMHgzNiwweDQwLDB4MWYsMHg5MCwweDIzLDB4YTQsMHgwOCwweGM5LDB4NDAgfSB9LAoreyAgMTYsIDB4OGU0MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTQsMHgwYiwweDY0LDB4MjAsMHhkOSwweDAyLDB4M2UsMHg0MSwweDBmLDB4OTQsMHgwMywweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGU1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHg4MCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OGU2MCwgMCwgezB4MGYsMHgxNCwweDAzLDB4YzUsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MWYsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGU3MCwgMCwgezB4M2MsMHg0MCwweGFmLDB4OTgsMHgwMywweDg2LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwYiwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhiMCwweDAwLDB4ZGMsMHg0MCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU5MCwgMCwgezB4MGYsMHhjMCwweDAzLDB4MzEsMHgwMiwweGM0LDB4MDQsMHhiMSwweDAwLDB4M2MsMHg0MCwweDAzLDB4MTAsMHgwMCwweGZjLDB4NDAgfSB9LAoreyAgMTYsIDB4OGVhMCwgMCwgezB4MzMsMHgwMCwweDBjLDB4YzQsMHgwMywweGIxLDB4MDAsMHhjYywweDAwLDB4YjMsMHgwMCwweDBjLDB4YzQsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OGViMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHg4MCwweDIyLDB4YTAgfSB9LAoreyAgMTYsIDB4OGVjMCwgMCwgezB4MGIsMHhhMCwweDAyLDB4MmEsMHgwMCwweDhhLDB4ODQsMHgyMiwweGExLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwOCwweGJhLDB4MDEgfSB9LAoreyAgMTYsIDB4OGVkMCwgMCwgezB4MjIsMHg4MCwweDA4LDB4YTAsMHgyYiwweDI4LDB4MDAsMHg4YSwweDgwLDB4MmEsMHg4MCwweDA4LDB4ZTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAyLDB4OWIsMHg4MSwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4OGVmMCwgMCwgezB4OGIsMHgzOCwweDA2LDB4Y2UsMHgwMCwweDkzLDB4ODAsMHgyMCwweGMwLDB4MDgsMHgzOCwweDAyLDB4MGMsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OGYwMCwgMCwgezB4NmMsMHhlMCwweDBhLDB4YjAsMHgwMiwweDRjLDB4MDAsMHg5MywweDAwLDB4MjAsMHhlMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxMCwweDA0LDB4ODAsMHgwOCwweDIxLDB4MDIgfSB9LAoreyAgMTYsIDB4OGYyMCwgMCwgezB4NGIsMHg0NCwweDA2LDB4ZDAsMHgyMCwweDkwLDB4MDgsMHgyMSwweDAyLDB4ODAsMHg0NCwweDAyLDB4MTAsMHgwMCwweGI0LDB4YzAgfSB9LAoreyAgMTYsIDB4OGYzMCwgMCwgezB4MmQsMHgxMCwweDQ4LDB4NDAsMHgwMiwweDAwLDB4MDAsMHg5NCwweDg5LDB4MjksMHgzMCwweDA4LDB4NDAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzMiwweDAwLDB4ZDYsMHg4MCwweDMxLDB4YTAgfSB9LAoreyAgMTYsIDB4OGY1MCwgMCwgezB4MGYsMHhlOCwweDBiLDB4Y2EsMHgwMCwweGQ2LDB4ODAsMHgyMywweGEwLDB4MDQsMHhmOCwweDBiLDB4MWEsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4OGY2MCwgMCwgezB4YmYsMHhhMCwweDJlLDB4YzgsMHgxMywweGRhLDB4MDIsMHg1ZSwweDgwLDB4NzMsMHhhMCwweDJjLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OGY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OGY4MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg4MCwweDAzLDB4ZTQsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY5MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4YjAsMHgwMywweGU0LDB4MDEsMHhlOSwweDA0LDB4MzYsMHg0MCwweDBmLDB4ODAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OGZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4Y2QsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4OGZiMCwgMCwgezB4MGMsMHhkOCwweDQzLDB4MzYsMHgwMCwweGNkLDB4ODAsMHgzMywweDYwLDB4MGMsMHhkOSwweDIzLDB4YmUsMHgwMCwweDRkLDB4ODAgfSB9LAoreyAgMTYsIDB4OGZjMCwgMCwgezB4MzMsMHg2MCwweDA4LDB4ZjgsMHgwYiwweDNlLDB4MDAsMHhmZCwweDg0LDB4M2YsMHg2MCwweDBmLDB4ZjksMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5MCwweDA0LDB4ZGUsMHgwMCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OGZlMCwgMCwgezB4MDgsMHg2MCwweDAyLDB4YjgsMHgyMCwweDhlLDB4MDQsMHgyMywweDgwLDB4MDgsMHg2OCwweDAyLDB4MTAsMHgwMCwweDhlLDB4MjAgfSB9LAoreyAgMTYsIDB4OGZmMCwgMCwgezB4MjMsMHg4MiwweDA4LDB4NDAsMHgwMiwweDEyLDB4MDAsMHhmNiwweDAwLDB4MmQsMHg4MCwweDBiLDB4NDEsMHhhMCwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTAwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ODQsMHgwMCwweDIxLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAxMCwgMCwgezB4MDgsMHg0MSwweDAyLDB4NTAsMHg0MCwweDk0LDB4MDAsMHgyMSwweDAwLDB4MGEsMHg1MiwweDAyLDB4ZDgsMHgwMCwweDg1LDB4MDIgfSB9LAoreyAgMTYsIDB4OTAyMCwgMCwgezB4MjUsMHgwNCwweDA4LDB4NDAsMHgyMiwweDE4LDB4MDgsMHhiNCwweDAwLDB4MmQsMHgxMCwweDBiLDB4NzgsMHg0MCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhlZSwweDIyLDB4OTMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4OTA0MCwgMCwgezB4MDgsMHgzOCwweDAyLDB4ZWMsMHgwMCwweDkzLDB4MDAsMHgyMCwweGMxLDB4MmEsMHgyMCwweDAyLDB4NjQsMHgwMiwweDgyLDB4MTAgfSB9LAoreyAgMTYsIDB4OTA1MCwgMCwgezB4MjQsMHhmMCwweDBhLDB4M2MsMHg0MiwweDI0LDB4MjgsMHhiMywweDAwLDB4MmMsMHhlMCwweDBiLDB4ODgsMHg4MiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTA2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZCwweDAwLDB4Y2IsMHgwMCwweGIyLDB4YzAgfSB9LAoreyAgMTYsIDB4OTA3MCwgMCwgezB4YWMsMHhiZSwweDAzLDB4NmUsMHgwMiwweGRiLDB4MDAsMHhiMiwweGMwLDB4MWUsMHhhMCwweDAzLDB4ZTQsMHgwMCwweGNhLDB4MTEgfSB9LAoreyAgMTYsIDB4OTA4MCwgMCwgezB4YjYsMHhkMCwweGFjLDB4YmMsMHgwMywweDI0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweGNmLDB4ODQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTA5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlMCwweDQwLDB4ZjgsMHgwMCwweDNjLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBhMCwgMCwgezB4MmYsMHg4MiwweDAzLDB4YTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MWQsMHg5MCwweDEzLDB4YTgsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTBiMCwgMCwgezB4M2EsMHgwMCwweDgxLDB4ODMsMHg0MywweGU4LDB4MDAsMHhlOCwweDAzLDB4M2UsMHgwNCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlMCwweDAwLDB4ZDYsMHgwMCwweDM3LDB4ODAgfSB9LAoreyAgMTYsIDB4OTBkMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZjgsMHgwMCwweGNlLDB4MDAsMHgzMywweDgwLDB4MGQsMHhhMCwweDEzLDB4MjAsMHgwOCwweGNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBlMCwgMCwgezB4MzMsMHg4MiwweDBjLDB4NDAsMHg3MywweDMwLDB4MTgsMHhjZSwweDAwLDB4MWYsMHg4MCwweDRmLDB4YzEsMHg0MywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4OTBmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg3YywweDAwLDB4OGQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4OTEwMCwgMCwgezB4MGEsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDAsMHgyMywweDQwLDB4MDgsMHhkNCwweDgwLDB4M2UsMHg0MiwweDhkLDB4NDAgfSB9LAoreyAgMTYsIDB4OTExMCwgMCwgezB4MjMsMHg0MCwweDA4LDB4ZjAsMHgwMiwweDNlLDB4NDAsMHg4ZCwweDAwLDB4MGYsMHg0MCwweDBiLDB4ZjQsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTEyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OTksMHgwMCwweGE2LDB4NDAgfSB9LAoreyAgMTYsIDB4OTEzMCwgMCwgezB4MDgsMHg5MCwweDA2LDB4ZTQsMHgwMCwweDkxLDB4MDAsMHgyMCwweDQwLDB4ODgsMHgwMCwweDAyLDB4MjQsMHgwOCwweDgwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTE0MCwgMCwgezB4MjAsMHg0MCwweDBhLDB4YjAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MGUsMHg0MCwweDBiLDB4ODQsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTE1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4OTE2MCwgMCwgezB4MGEsMHgyMSwweDA2LDB4YzgsMHgwMSwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgzMiwweDgyLDB4MDgsMHgwOCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTE3MCwgMCwgezB4NjAsMHg4MCwweDBhLDB4MDAsMHgxMiwweDA4LDB4ODAsMHg4MiwweDAwLDB4MmMsMHg4MCwweDBiLDB4MzAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTE5MCwgMCwgezB4MGMsMHg4NCwweDIzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGQsMHg4MiwweDBiLDB4MjAsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTFhMCwgMCwgezB4MzIsMHgwMCwweDBlLDB4MDAsMHgwMywweDIwLDB4MDIsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4OTFiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4YmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4OTFjMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHhiZiwweGMwLDB4OGYsMHhiMCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4OTFkMCwgMCwgezB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweGVkLDB4MDAsMHhmZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4OTFlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmMCwweDhjLDB4ZmYsMHgwMCwweDNkLDB4NjAgfSB9LAoreyAgMTYsIDB4OTFmMCwgMCwgezB4MmMsMHhiMiwweDgzLDB4N2MsMHg5MCwweGRmLDB4MzgsMHgzMSwweGUwLDB4MGYsMHhmOCwweDAzLDB4M2MsMHgwMCwweGZmLDB4MjAgfSB9LAoreyAgMTYsIDB4OTIwMCwgMCwgezB4M2YsMHhjNCwweDBlLDB4ZjQsMHgwMywweDdjLDB4MDAsMHhmNCwweDgwLDB4MzMsMHgwMCwweDBkLDB4ZjgsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTIxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMSwweDIwLDB4YmIsMHg2MiwweDJlLDB4NDIgfSB9LAoreyAgMTYsIDB4OTIyMCwgMCwgezB4MjgsMHhmNCwweDQyLDB4M2UsMHg0MCwweDhmLDB4NDQsMHgyMiwweGUwLDB4MGIsMHhiMCwweDgzLDB4N2YsMHg0NCwweGJmLDB4YzEgfSB9LAoreyAgMTYsIDB4OTIzMCwgMCwgezB4MmQsMHhkYywweDJhLDB4ZjYsMHgwMiwweDNmLDB4NDUsMHhiOCwweDgwLDB4MjIsMHg2MSwweDg4LDB4YjgsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTI0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNSwweDgwLDB4YjIsMHgxOCwweDJlLDB4YzggfSB9LAoreyAgMTYsIDB4OTI1MCwgMCwgezB4MjksMHgzMCwweDMyLDB4MGMsMHgwOCwweGIzLDB4MjAsMHgyMCwweGMwLDB4NGIsMHg5MiwweDAyLDB4MGMsMHgwMCwweGIzLDB4NDAgfSB9LAoreyAgMTYsIDB4OTI2MCwgMCwgezB4MmMsMHhjMCwweDg5LDB4MzQsMHgxMiwweDRjLDB4MDAsMHhiMCwweDAwLDB4MjQsMHhjMSwweDQ5LDB4MzAsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTI3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhNCwweDAwLDB4YmEsMHgwYywweDJlLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTI4MCwgMCwgezB4YTksMHhiMCwweDA2LDB4MmMsMHgwMCwweDhiLDB4MDAsMHhhMiwweGMwLDB4MGIsMHg5MCwweDAwLDB4NmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTI5MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweDZjLDB4MDAsMHhiYSwweDgwLDB4MjYsMHhmMCwweDA4LDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTJhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlZSwweDAwLDB4ZmIsMHhjNCwweDNlLDB4NzggfSB9LAoreyAgMTYsIDB4OTJiMCwgMCwgezB4MmQsMHhiMCwweDAzLDB4NmMsMHgwOCwweGZiLDB4MDAsMHgzMiwweGMwLDB4OGIsMHgyNCwweDgzLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJjMCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjAsMHgwYiwweDZjLDB4MDgsMHhiMiwweGUwLDB4MTYsMHg2MCwweDhkLDB4YjAsMHgyMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiZSwweDk4LDB4ZmYsMHg0MCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4OTJlMCwgMCwgezB4MGUsMHg3MCwweDAzLDB4ZGMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhlMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJmMCwgMCwgezB4M2YsMHhjMCwweDBlLDB4ZjAsMHgwMywweGFjLDB4MDAsMHhmZSwweDAwLDB4YjksMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTMwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhZCwweDAwLDB4ZmEsMHg0MCwweDNlLDB4ZDAgfSB9LAoreyAgMTYsIDB4OTMxMCwgMCwgezB4MGUsMHhiMiwweDAzLDB4ZWMsMHgwMCwweGMzLDB4MDAsMHgzZSwweGMwLDB4MGMsMHhhMCwweDAzLDB4MmMsMHgwMSwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTMyMCwgMCwgezB4M2MsMHhjMCwweDBlLDB4YjgsMHgwMywweGVjLDB4MDAsMHhkYSwweDAwLDB4M2EsMHhkMCwweDRmLDB4YjAsMHgyMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTMzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YmEsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4OTM0MCwgMCwgezB4MDgsMHhmNCwweDA3LDB4YmMsMHgxNCwweGRmLDB4MDAsMHgzZSwweGMwLDB4MWEsMHhhMCwweDUyLDB4YmMsMHgwMCwweGJmLDB4MDQgfSB9LAoreyAgMTYsIDB4OTM1MCwgMCwgezB4M2YsMHhjMCwweDhhLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhmYSwweDAwLDB4MjIsMHhjOCwweDBmLDB4YjAsMHgwMywweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OCwweDAxLDB4YjEsMHgwMCwweDZjLDB4YzIgfSB9LAoreyAgMTYsIDB4OTM3MCwgMCwgezB4MGEsMHgzMCwweDQyLDB4Y2MsMHgwMCwweDgzLDB4MDUsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMSwweGIzLDB4MDQgfSB9LAoreyAgMTYsIDB4OTM4MCwgMCwgezB4MmMsMHhjMCwweDBhLDB4MzAsMHgyMiwweDhjLDB4MDAsMHg4MCwweDgwLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgyMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTM5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDA4LDB4YjcsMHg4MCwweDZmLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTNhMCwgMCwgezB4MTgsMHg3OCwweDAyLDB4OGUsMHg0MCwweGI3LDB4ODAsMHgyZCwweGUwLDB4MGEsMHg3OCwweDAyLDB4OWUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OTNiMCwgMCwgezB4MjksMHhlMSwweDBhLDB4NzgsMHgwMiwweDllLDB4MDEsMHhiYywweDgwLDB4MjksMHhlNCwweDBiLDB4NzgsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTNjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOSwweDQwLDB4ZjEsMHgyMCwweDNjLDB4YzQgfSB9LAoreyAgMTYsIDB4OTNkMCwgMCwgezB4MGUsMHgzOSwweDAyLDB4Y2MsMHgwMCwweGMzLDB4MDAsMHgyYywweGM0LDB4MDgsMHg5MiwweDAzLDB4OGMsMHg4OCwweGIzLDB4MTAgfSB9LAoreyAgMTYsIDB4OTNlMCwgMCwgezB4MmMsMHhjNCwweDBlLDB4YjAsMHgwNywweDhjLDB4MDAsMHhjMiwweDA4LDB4MzgsMHhjMCwweDBmLDB4MzAsMHg0MywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4OTNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDEwLDB4ZmMsMHgwMCwweDdmLDB4YzAgfSB9LAoreyAgMTYsIDB4OTQwMCwgMCwgezB4MGYsMHhmMCwweDgzLDB4ZmMsMHgyMSwweGRmLDB4MDgsMHgzYiwweGMwLDB4OGYsMHg5MCwweDAxLDB4ZmMsMHgyMSwweGZmLDB4MGMgfSB9LAoreyAgMTYsIDB4OTQxMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjEsMHgwMywweGVjLDB4MDAsMHhlZiwweDAwLDB4NzcsMHhjMCwweDFlLDB4ZjAsMHgwMywweDkwLDB4MDYgfSB9LAoreyAgMTYsIDB4OTQyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAxLDB4ZjksMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4OTQzMCwgMCwgezB4MGYsMHhiMiwweDAzLDB4ZWUsMHg5MCwweGRiLDB4ZTEsMHgzYSwweGMwLDB4NGQsMHgzOCwweDEzLDB4MmQsMHgzMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQ0MCwgMCwgezB4M2UsMHhlMCwweDRmLDB4YmEsMHg0MywweDJjLDB4NDAsMHhmYSwweDAwLDB4M2YsMHhjMCwweDhjLDB4YjAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQ1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjEsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4OTQ2MCwgMCwgezB4MGIsMHg3MSwweDAyLDB4Y2MsMHgyMCwweGE3LDB4MjgsMHgyMSwweGMwLDB4MGIsMHg3MCwweDEzLDB4NWMsMHgwOCwweGI3LDB4MTAgfSB9LAoreyAgMTYsIDB4OTQ3MCwgMCwgezB4MmQsMHhjNCwweDRiLDB4MzQsMHg4MywweDFjLDB4YzEsMHhiNywweDAyLDB4MmQsMHhjMCwweDFhLDB4NzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDIwLDB4YjQsMHhjNCwweDI1LDB4YTIgfSB9LAoreyAgMTYsIDB4OTQ5MCwgMCwgezB4MGIsMHg3OCwweDA2LDB4ZGUsMHgwMCwweDgzLDB4ODAsMHgyOSwweGUwLDB4MWIsMHhmOCwweDAyLDB4NWUsMHg4MCwweGE3LDB4YTAgfSB9LAoreyAgMTYsIDB4OTRhMCwgMCwgezB4MmQsMHhjOCwweDBhLDB4NzIsMHgwMiwweDFlLDB4MDAsMHhhNiwweDgwLDB4MjgsMHhlMCwweDA4LDB4NzgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhlZCwweDAwLDB4YjMsMHg0MCwweDI0LDB4YzMgfSB9LAoreyAgMTYsIDB4OTRjMCwgMCwgezB4MGIsMHgzMCwweDQyLDB4Y2MsMHgwMCwweGEzLDB4MDAsMHgyMCwweGMwLDB4MWIsMHgzNCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRkMCwgMCwgezB4MmMsMHhjMCwweDRiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDg4LDB4MmMsMHhkNCwweDBhLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4ZmUsMHg0MCwweGI3LDB4YTAgfSB9LAoreyAgMTYsIDB4OTRmMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGRhLDB4MDAsMHgzYSwweDgwLDB4MGYsMHhlMiwweDAzLDB4NjgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTUwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwYiwweDI4LDB4MDAsMHhlZSwweGUwLDB4M2YsMHhiMCwweDA0LDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDA0LDB4ZjAsMHgwOCwweDNhLDB4MTAgfSB9LAoreyAgMTYsIDB4OTUyMCwgMCwgezB4MGYsMHg4NCwweDAzLDB4ZTAsMHgxMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTUzMCwgMCwgezB4M2MsMHgwMCwweDBmLDB4ODAsMHgwMywweDgwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwOSwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTU0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDIwLDB4ZTksMHgwMCwweDMyLDB4NDQgfSB9LAoreyAgMTYsIDB4OTU1MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU2MCwgMCwgezB4MWUsMHg0MCwweDBjLDB4MTAsMHgwMywweDI0LDB4MDAsMHhjOSwweGEwLDB4M2MsMHg2NCwweDBjLDB4OTAsMHgwMywweDgyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTU3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NjggfSB9LAoreyAgMTYsIDB4OTU4MCwgMCwgezB4MDgsMHgxMywweDAyLDB4MjQsMHgwOCwweGY5LDB4MDAsMHgyZSwweDQ4LDB4MWIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU5MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMiwweDI0LDB4MDgsMHhmOSwweDQwLDB4MmUsMHg2MCwweDBhLDB4OTAsMHgwNiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTVhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YTksMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTViMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDEsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTVjMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4OTIsMHgyMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTVkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMSwweGUwLDB4NTAgfSB9LAoreyAgMTYsIDB4OTVlMCwgMCwgezB4MjgsMHgxNiwweDBhLDB4MDQsMHg4MCwweGExLDB4NDAsMHgyYywweDQwLDB4NGIsMHgxNCwweDIyLDB4YzQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4OTVmMCwgMCwgezB4MmMsMHg1MCwweDA5LDB4MTQsMHgwMiwweDA0LDB4MDQsMHhiMSwweDAwLDB4MmMsMHg0MCwweDBhLDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZTgsMHg1MCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTYxMCwgMCwgezB4OGMsMHg4MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4MDAsMHgzZSwweDAwLDB4MGIsMHg4MCwweDMzLDB4ZTAsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTYyMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDgsMHhjYSwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGFlLDB4MDMgfSB9LAoreyAgMTYsIDB4OTYzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmYywweDQwLDB4ZmQsMHgxMCwweDJmLDB4NDEgfSB9LAoreyAgMTYsIDB4OTY0MCwgMCwgezB4NGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4NDAsMHgzZSwweDQwLDB4NGYsMHhkMCwweDYzLDB4ZTUsMHgwMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4OTY1MCwgMCwgezB4M2EsMHg1MCwweDJlLDB4OTQsMHgwMywweDY1LDB4MDAsMHhlZCwweDAwLDB4M2YsMHg1MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4OTY2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhlNiwweDAwLDB4ZjksMHhlMCwweDMzLDB4NTAgfSB9LAoreyAgMTYsIDB4OTY3MCwgMCwgezB4MGMsMHhkYSwweDAzLDB4YTYsMHgwMCwweGQ5LDB4ODAsMHgzZiwweDQwLDB4MGYsMHg5MSwweDAzLDB4YTYsMHgwMCwweGY5LDB4ODggfSB9LAoreyAgMTYsIDB4OTY4MCwgMCwgezB4M2UsMHg2OCwweDBjLDB4ZGUsMHgwMywweDY2LDB4MDAsMHhlZCwweDAwLDB4M2IsMHg2OSwweDBjLDB4OTAsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTY5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDA4LDB4YjgsMHhlMCwweDIwLDB4MjAgfSB9LAoreyAgMTYsIDB4OTZhMCwgMCwgezB4MTgsMHg4ZSwweDI2LDB4ZTEsMHgwMCwweDgwLDB4YTAsMHgyZSwweDAwLDB4NGIsMHg4OCwweDQyLDB4ZTEsMHg1MCwweGI4LDB4NDAgfSB9LAoreyAgMTYsIDB4OTZiMCwgMCwgezB4MmUsMHgyYSwweDBkLDB4MGEsMHgwMiwweDIwLDB4MDgsMHhiOCwweDAwLDB4MmUsMHgxNCwweDBkLDB4ODAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4OTZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHg2MCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTZkMCwgMCwgezB4MDgsMHgzMSwweGEyLDB4YzUsMHgwMCwweDkxLDB4NDgsMHgyYywweDQwLDB4MWIsMHgxMiwweDAyLDB4ODQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4OTZlMCwgMCwgezB4MmMsMHg1MCwweDA5LDB4MTYsMHgwMiwweDA1LDB4MDAsMHhhMywweDA0LDB4MjgsMHg0MCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTZmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNCwweDAwLDB4YjksMHgwOCwweDIwLDB4NzAgfSB9LAoreyAgMTYsIDB4OTcwMCwgMCwgezB4MjgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwOCwweGI5LDB4MDMgfSB9LAoreyAgMTYsIDB4OTcxMCwgMCwgezB4MmMsMHg0MCwweDI5LDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg2MiwweDA5LDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4OTcyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNSwweDAwLDB4ZjksMHhkMCwweGIyLDB4NzAgfSB9LAoreyAgMTYsIDB4OTczMCwgMCwgezB4MDgsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4MDQsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgxMCwweGY5LDB4MDIgfSB9LAoreyAgMTYsIDB4OTc0MCwgMCwgezB4M2UsMHg0MCwweDBkLDB4OTAsMHgyYiwweDY0LDB4MDAsMHhlOSwweDhkLDB4M2EsMHg2MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTc1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHg4MCwweDNlLDB4NDIgfSB9LAoreyAgMTYsIDB4OTc2MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTc3MCwgMCwgezB4M2UsMHg0MCwweDJmLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDIyLDB4M2MsMHg0MCwweDRmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTc4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjAsMHg0MCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTc5MCwgMCwgezB4MGMsMHg4MCwweDAzLDB4YzAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDIwLDB4MWYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTdhMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhjOCwweGMwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTdiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTUsMHgyOCwweDEwLDB4YmEsMHgwMCwweDIzLDB4YTAgfSB9LAoreyAgMTYsIDB4OTdjMCwgMCwgezB4MGEsMHhlNCwweDAyLDB4ZTgsMHgwMCwweGJhLDB4MDAsMHgyYiwweGExLDB4MGIsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGFhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTdkMCwgMCwgezB4MmEsMHg4MSwweDBhLDB4YTAsMHgwMywweGU4LDB4MDgsMHhkZSwweDAwLDB4MmUsMHg4MCwweDBhLDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTdlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwNCwweGEwLDB4YjEgfSB9LAoreyAgMTYsIDB4OTdmMCwgMCwgezB4MDgsMHgzNiwweDIyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweGU0LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTgwMCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MTgsMHgwMiwweDBjLDB4MDAsMHg5MSwweDAxLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwNiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTgxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweGM4LDB4YjMsMHgyMSwweDIxLDB4YzIgfSB9LAoreyAgMTYsIDB4OTgyMCwgMCwgezB4MmEsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4YTAsMHgyOSwweGMwLDB4MGIsMHg3MiwweDAyLDB4Y2UsMHgwMCwweGE3LDB4ODEgfSB9LAoreyAgMTYsIDB4OTgzMCwgMCwgezB4MjksMHhjMCwweDRhLDB4NzQsMHgwMiwweGZlLDB4MDAsMHg5NywweDAxLDB4MmMsMHhjMCwweDBhLDB4NzAsMHgxMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTg0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDgwLDB4ZjcsMHhjMCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTg1MCwgMCwgezB4MGMsMHg0OCwweDAzLDB4ZGUsMHgxMSwweGY3LDB4ODAsMHgyMSwweGUwLDB4MGIsMHg3YSwweDAzLDB4ZGUsMHgwMCwweGMzLDB4ODAgfSB9LAoreyAgMTYsIDB4OTg2MCwgMCwgezB4MzMsMHhkOCwweDZjLDB4NzgsMHgwMywweDNlLDB4MDAsMHhkNiwweDgwLDB4M2QsMHhlMCwweDBjLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OTg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MGQsMHhhYywweDA4LDB4ZmIsMHg4MCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OTg4MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZWMsMHgwNCwweGZiLDB4M2MsMHgzZSwweGMwLDB4MGYsMHhiNiwweDA3LDB4NmMsMHgwMSwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTg5MCwgMCwgezB4M2UsMHhkMCwweDBmLDB4OTQsMHgwNywweGVjLDB4MDEsMHhlYSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OThhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHhmZSwweDAwLDB4Y2YsMHhhNCwweDNiLDB4NjAgfSB9LAoreyAgMTYsIDB4OThiMCwgMCwgezB4MDgsMHhkOSwweDAzLDB4N2UsMHgwMCwweGNmLDB4ODAsMHgzZiwweDI1LDB4NGYsMHhmYywweDg3LDB4YmUsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4OThjMCwgMCwgezB4N2YsMHhmYywweDBjLDB4ZmMsMHgwMywweDdjLDB4MDAsMHhmNiwweDkwLDB4MzMsMHhlMCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OThkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDA4LDB4OGYsMHgyOCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4OThlMCwgMCwgezB4MDgsMHhkMCwweDAyLDB4MWMsMHg0MCwweGE3LDB4MjAsMHgzMSwweDA0LDB4MWIsMHg3OCwweDAyLDB4ZGMsMHg4MCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4OThmMCwgMCwgezB4MmYsMHhjNCwweDFhLDB4ZDAsMHgwMiwweDFlLDB4NDgsMHhiNiwweDAwLDB4NjEsMHhjMCwweDBiLDB4NzAsMHgwNiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTkwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YywweDAwLDB4ODcsMHgzMCwweDY5LDB4NDQgfSB9LAoreyAgMTYsIDB4OTkxMCwgMCwgezB4MDgsMHg1MCwweDIyLDB4MGMsMHgwMCwweDg3LDB4MDEsMHgyZCwweDQ0LDB4OGIsMHg3MCwweDA2LDB4OGMsMHgxMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4OTkyMCwgMCwgezB4MjksMHhjOSwweDA4LDB4NTAsMHgwMiwweDFjLDB4NDQsMHhhNiwweDAwLDB4NjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTkzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjZCwweDAwLDB4ODMsMHg4OCwweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTk0MCwgMCwgezB4MDAsMHgxMCwweDAyLDB4NGMsMHgwMCwweDJiLDB4MDAsMHgyYywweDQxLDB4MWIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk1MCwgMCwgezB4MmMsMHhjMCwweDBhLDB4MzAsMHg0MiwweDBjLDB4MDAsMHhiMiwweDQwLDB4MjAsMHhmMSwweDBiLDB4MzAsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTk2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZCwweDQxLDB4Y2YsMHhjMCwweGJhLDB4ZjAgfSB9LAoreyAgMTYsIDB4OTk3MCwgMCwgezB4MjgsMHg5MCwweDFiLDB4NmMsMHgwOCwweGNmLDB4MDAsMHgyYywweGMwLDB4MGYsMHhmMCwweDAzLDB4YWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk4MCwgMCwgezB4M2YsMHhjMCwweDZjLDB4YjAsMHg0YiwweDJjLDB4MDEsMHhmYiwweDQwLDB4MjIsMHhjOCwweDBmLDB4YjAsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTk5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDA0LDB4ZmIsMHgwNCwweDNmLDB4ZDQgfSB9LAoreyAgMTYsIDB4OTlhMCwgMCwgezB4MGYsMHgxMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzMiwweGMwLDB4NWYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDQgfSB9LAoreyAgMTYsIDB4OTliMCwgMCwgezB4M2UsMHhjMCwweDRmLDB4MTAsMHgxMywweGVjLDB4MDAsMHhmYiwweDg4LDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTljMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4YzcsMHgwMCwweDMzLDB4NjIgfSB9LAoreyAgMTYsIDB4OTlkMCwgMCwgezB4MGMsMHhjMCwweDBiLDB4M2MsMHgwMCwweGVmLDB4MDAsMHgzMywweGUwLDB4MWMsMHhmMCwweDEzLDB4M2MsMHgwOCwweGY3LDB4MDAgfSB9LAoreyAgMTYsIDB4OTllMCwgMCwgezB4MzEsMHhjMCwweDBlLDB4ZDgsMHgwMywweGJjLDB4MDAsMHhmZSwweDAwLDB4M2QsMHhjNiwweDBjLDB4ZjAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4OTlmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDAwLDB4Y2IsMHgwMywweDIyLDB4NDcgfSB9LAoreyAgMTYsIDB4OWEwMCwgMCwgezB4MDgsMHg5OCwweDQyLDB4MmMsMHgwMCwweDliLDB4MDAsMHgyYSwweGMwLDB4MGEsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDQgfSB9LAoreyAgMTYsIDB4OWExMCwgMCwgezB4MmEsMHhjMCwweDBhLDB4YjAsMHgwMiwweGFjLDB4MDgsMHhmYSwweDAwLDB4MmUsMHg2MCwweDA4LDB4YjAsMHgwMiwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWEyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OWIsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWEzMCwgMCwgezB4MDgsMHg5OCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyMiwweDg4LDB4MDgsMHgzMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWE0MCwgMCwgezB4MjIsMHhjMCwweDhhLDB4OTIsMHgwMiwweGFjLDB4MDAsMHhhYSwweDgwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwNiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWE1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwMCwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWE2MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyOCwweDgwLDB4MGEsMHgzMiwweDEyLDB4MGMsMHgwMCwweGIzLDB4MDQgfSB9LAoreyAgMTYsIDB4OWE3MCwgMCwgezB4MjgsMHhjMCwweDBhLDB4MzAsMHgyMiwweDhjLDB4MjAsMHhiMiwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAyLDB4Y2IsMHgwMCwweDMwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWE5MCwgMCwgezB4MWMsMHg5NCwweDAzLDB4MmMsMHgwMCwweGVmLDB4MDAsMHgzMiwweGMwLDB4ODgsMHhmMCwweDhiLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFhMCwgMCwgezB4MzMsMHhjMCwweGFlLDB4ZjAsMHgwMywweGFjLDB4ODAsMHhlYSwweDAxLDB4M2UsMHhjMCwweDJjLDB4YjAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4OWFiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWFjMCwgMCwgezB4MDcsMHhkMiwweDgzLDB4ZmMsMHgwMCwweGRmLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZDAsMHgwYiwweGVjLDB4MDAsMHhlZSwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4OWFlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNSwweDAwLDB4Y2YsMHgwOCwweDNmLDB4NDggfSB9LAoreyAgMTYsIDB4OWFmMCwgMCwgezB4MGYsMHhjMywweDkzLDB4NzAsMHhkMCwweGRjLDB4MzAsMHgzZiwweGQ4LDB4MGMsMHhiMiwweDAzLDB4M2MsMHhjMCwweGZmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWIwMCwgMCwgezB4MzMsMHhjNCwweDJjLDB4ZjEsMHgwMywweDYyLDB4NTAsMHhmYywweDM0LDB4MzMsMHgwMCwweDBmLDB4NWMsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWIxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhjNCwweDgwLDB4OGIsMHgwMCwweDJmLDB4NWEgfSB9LAoreyAgMTYsIDB4OWIyMCwgMCwgezB4MGIsMHhhNiwweDEyLDB4MjEsMHhjMCwweDg5LDB4NzAsMHgyZiwweGRjLDB4MDgsMHhmMiwweGMyLDB4M2QsMHhkMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWIzMCwgMCwgezB4MzcsMHhkYywweDg4LDB4ZjUsMHgwYSwweDIwLDB4ODAsMHhlOCwweDEwLDB4MmEsMHgxNiwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWI0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDAwLDB4ODMsMHgwOCwweDJjLDB4NDQgfSB9LAoreyAgMTYsIDB4OWI1MCwgMCwgezB4MGIsMHgwMiwweDAyLDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyYywweGM4LDB4MDgsMHgzMywweDQyLDB4OGMsMHg5MCwweGIzLDB4MzAgfSB9LAoreyAgMTYsIDB4OWI2MCwgMCwgezB4MjgsMHhjOCwweDRhLDB4MzIsMHgxMiwweDgwLDB4MGMsMHhiMCwweGEwLDB4MjgsMHgyOCwweDBiLDB4MTIsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWI3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhMiwweDAwLDB4OGIsMHgwMCwweDJlLDB4NDggfSB9LAoreyAgMTYsIDB4OWI4MCwgMCwgezB4MGIsMHhhMCwweDIyLDB4MjAsMHgyMCwweDg4LDB4ODAsMHgyZSwweGMwLDB4MjgsMHhiMCwweDBhLDB4YWMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWI5MCwgMCwgezB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGEwLDB4MDAsMHhhYiwweDgyLDB4MmEsMHhhMCwweDBiLDB4YjIsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWJhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlNywweDAwLDB4Y2IsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OWJiMCwgMCwgezB4Y2YsMHg5YywweDBiLDB4MjEsMHgwMCwweGQ4LDB4ODgsMHgzZSwweGMwLDB4MGMsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWJjMCwgMCwgezB4M2EsMHhjMCwweDBlLDB4YjAsMHg0MywweGU4LDB4NDAsMHhmOCwweDgwLDB4M2EsMHg2MCwweDBmLDB4OTgsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDAwLDB4ZmYsMHgwMCwweDBmLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWJlMCwgMCwgezB4MDcsMHhhMSwweDAzLDB4ZTgsMHgwMiwweGZiLDB4MDAsMHgzZiwweGMwLDB4MGYsMHg3MCwweDIzLDB4N2MsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4OWJmMCwgMCwgezB4MzUsMHhjMCwweDRkLDB4YjAsMHgwMywweDc0LDB4MjAsMHhmYywweDAxLDB4M2YsMHgwMCwweDBmLDB4ZjgsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWMwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNSwweDAwLDB4Y2IsMHgwMCwweGJhLDB4NDAgfSB9LAoreyAgMTYsIDB4OWMxMCwgMCwgezB4MGMsMHgxNCwweDBiLDB4MmYsMHgyMiwweGM5LDB4NDAsMHgzMiwweGMwLDB4OGUsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMyMCwgMCwgezB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHgwMCwweDJjLDB4OTAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWMzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDEsMHgyNCwweDAwLDB4OGYsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OWM0MCwgMCwgezB4MmMsMHhhNSwweDQyLDB4MjksMHgwMCwweDhiLDB4MDQsMHhhMywweGMxLDB4MGQsMHhmMCwweDBhLDB4M2MsMHgwMCwweGJmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM1MCwgMCwgezB4M2YsMHhjMCwweDA4LDB4ZjAsMHgwMSwweDY5LDB4MDAsMHhkYSwweDA1LDB4MjIsMHhkMCwweDA4LDB4OTQsMHgwMywweDcyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2MCwweDQwLDB4ODMsMHgwMSwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4OWM3MCwgMCwgezB4MDksMHgwMCwweDAyLDB4MjAsMHgwMCwweDgyLDB4NjAsMHgyMiwweGMwLDB4MDgsMHgzMCwweDQyLDB4NGMsMHgxMCwweGJiLDB4MDIgfSB9LAoreyAgMTYsIDB4OWM4MCwgMCwgezB4MmMsMHhjMCwweDA4LDB4YjAsMHgxMiwweDA1LDB4MDAsMHg5YiwweDAwLDB4MjAsMHg4MiwweDA5LDB4MzIsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWM5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDkwLDB4ODcsMHg4MCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWNhMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4MTYsMHgxNCwweDg0LDB4ODEsMHgyMSwweGUwLDB4MjksMHgzOSwweDAyLDB4NWUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OWNiMCwgMCwgezB4MjgsMHhlMCwweDA4LDB4NzgsMHgwMiwweDdhLDB4ODAsMHg5NiwweDgxLDB4MjEsMHhlMCwweDA5LDB4ZjgsMHgwMiwweDQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWNjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDA5LDB4OGIsMHgxMCwweDM4LDB4NDQgfSB9LAoreyAgMTYsIDB4OWNkMCwgMCwgezB4NGQsMHgyNSwweDEyLDB4MGMsMHgwMCwweGMyLDB4MTAsMHgyMiwweGM4LDB4MGEsMHgzOCwweDAzLDB4Y2MsMHgwMCwweGYzLDB4MTAgfSB9LAoreyAgMTYsIDB4OWNlMCwgMCwgezB4MmMsMHhjMCwweDBjLDB4MzAsMHgwMywweDhhLDB4YzAsMHhkOSwweDEwLDB4MzIsMHg0MCwweDJkLDB4MTAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4OWNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDgwLDB4ZmYsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWQwMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZjQsMHg0MCwweGVkLDB4MDAsMHgzZiwweGMwLDB4MGUsMHhmMywweDAzLDB4YmMsMHgwNCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQxMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjAsMHgwYiwweGQ0LDB4MDAsMHhmZiwweDEwLDB4YmYsMHg4MCwweDBlLDB4ZjAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OWQyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmYSwweDAwLDB4Y2IsMHgwMiwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OWQzMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YTAsMHgwMCwweGNiLDB4MDAsMHgzYSwweGNhLDB4MGMsMHhiMywweDEzLDB4YWYsMHgyNCwweGNiLDB4NDggfSB9LAoreyAgMTYsIDB4OWQ0MCwgMCwgezB4MWUsMHhjOCwweDBmLDB4YjYsMHgwMywweDJjLDB4MDAsMHhmYSwweDAwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQ1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDA4LDB4ODcsMHgyMCwweDJkLDB4YzQgfSB9LAoreyAgMTYsIDB4OWQ2MCwgMCwgezB4MGIsMHg1MCwweDEyLDB4ZGMsMHgwNCwweDg3LDB4MDAsMHgyYywweGMwLDB4MDgsMHg3MCwweGEyLDB4MWQsMHgwMCwweGE3LDB4NDAgfSB9LAoreyAgMTYsIDB4OWQ3MCwgMCwgezB4MjUsMHhjYiwweDhiLDB4NzQsMHg4MiwweDFjLDB4MDAsMHhiNywweDAwLDB4MmQsMHhjMSwweDBiLDB4NzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDAxLDB4ODcsMHg5MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWQ5MCwgMCwgezB4MGIsMHg3OCwweDAyLDB4Y2UsMHgwMCwweDg2LDB4ODAsMHgyZCwweGU0LDB4MjksMHg3YSwweDAyLDB4OWUsMHg4MCwweDg3LDB4YTAgfSB9LAoreyAgMTYsIDB4OWRhMCwgMCwgezB4NmQsMHhlOCwweDBiLDB4NzgsMHgwMiwweDFlLDB4MDAsMHhiNSwweDgwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWRiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZCwweDAwLDB4ODMsMHgwMiwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWRjMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4ZTAsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWRkMCwgMCwgezB4MjQsMHhjMCwweDBiLDB4YjAsMHgwMiwweDBlLDB4MjAsMHhiMywweDA4LDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDgyLDB4Y2EsMHgwMCwweDNlLDB4YTggfSB9LAoreyAgMTYsIDB4OWRmMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4ZjgsMHgwMiwweDhlLDB4ODAsMHgzZSwweDgwLDB4MGQsMHhhMCwweDViLDB4YTgsMHgwMCwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWUwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDNiLDB4ODAsMHhmZSwweDQyLDB4MmYsMHg4MCwweDBmLDB4YTgsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OWUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDIwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OWUyMCwgMCwgezB4MGYsMHgwNiwweDAzLDB4YzAsMHgwMCwweGY4LDB4MTEsMHgzZSwweDAwLDB4MGYsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWUzMCwgMCwgezB4MzYsMHgwMCwweDBmLDB4ODAsMHgwYiwweGUwLDB4MDAsMHhmOCwweDA0LDB4M2UsMHgyMCwweDBmLDB4ODEsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWU0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OWU1MCwgMCwgezB4MGMsMHg5YSwweDAzLDB4MjQsMHg0MCwweGM5LDB4YzAsMHgzZSwweDQwLDB4NGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OWU2MCwgMCwgezB4MzYsMHg0MCwweDA3LDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweDA0LDB4MzIsMHg2MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWU3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgwMiwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4OWU4MCwgMCwgezB4MGEsMHg5MiwweDAyLDB4MjUsMHgwMiwweDg5LDB4ZTAsMHgyZSwweDQwLDB4OTgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OWU5MCwgMCwgezB4MjIsMHg0MCwweDA5LDB4OTAsMHgwMiwweDA0LDB4MDAsMHhkOSwweDAwLDB4MjIsMHg0NCwweDBiLDB4OWMsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWVhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyYywweDAwLDB4YjksMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4OWViMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgyOCwweDg5LDB4MDAsMHgyYywweDQwLDB4NjgsMHg5MCwweDQyLDB4MjQsMHgwYywweGIxLDB4MDQgfSB9LAoreyAgMTYsIDB4OWVjMCwgMCwgezB4MjYsMHg0MCwweDBiLDB4OTAsMHgwYSwweDJjLDB4ODAsMHg4MSwweDAwLDB4MjIsMHg0MCwweGNiLDB4OTIsMHg4MiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OWVkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgyMCwweDJjLDB4NDggfSB9LAoreyAgMTYsIDB4OWVlMCwgMCwgezB4MGEsMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjEsMHgyYywweDRjLDB4MDgsMHgxMSwweDAyLDB4MDQsMHgwOCwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4OWVmMCwgMCwgezB4MjAsMHg0YywweDA5LDB4MTIsMHgwMiwweDI0LDB4MDEsMHg5MSwweDIwLDB4YTAsMHg0OCwweDBiLDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg0MSwweGUwLDB4ZjgsMHg1MCwweDNlLDB4MTQgfSB9LAoreyAgMTYsIDB4OWYxMCwgMCwgezB4MGMsMHg4NSwweDAzLDB4MjEsMHg0MCwweGM4LDB4NTAsMHgzZSwweDEwLDB4MDgsMHgwNiwweDgzLDB4MDEsMHhmMCwweGY4LDB4NjggfSB9LAoreyAgMTYsIDB4OWYyMCwgMCwgezB4MzYsMHgxMCwweDBmLDB4MDUsMHgwMywweDI5LDB4NDAsMHhjOCwweDUwLDB4MzIsMHg5NCwweDBmLDB4ODUsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4OWYzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDAwLDB4ZjksMHgxMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4OWY0MCwgMCwgezB4MGYsMHhkMSwweDBiLDB4ZjQsMHg0MCwweGZkLDB4MTIsMHgyZSwweDRjLDB4MDMsMHg5MiwweDBiLDB4ZTQsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4OWY1MCwgMCwgezB4M2UsMHg0YywweDBmLDB4OTEsMHgwMywweGZjLDB4MDAsMHhmZCwweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4OWY2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDIwLDB4YzksMHgwMSwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OWY3MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4M2MsMHgwMCwweGJkLDB4MDAsMHgzMiwweDYzLDB4MGMsMHg5ZSwweDQzLDB4MjcsMHgwMCwweGU5LDB4YzAgfSB9LAoreyAgMTYsIDB4OWY4MCwgMCwgezB4M2UsMHg2OCwweDBjLDB4OTgsMHgwMywweDM0LDB4MDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OWY5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhjMiwweDIwLDB4ZDgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4OWZhMCwgMCwgezB4MGIsMHg4MCwweDUyLDB4MjgsMHgwNCwweGI4LDB4MDAsMHgyMiwweDM4LDB4MDgsMHg4OCwweDAzLDB4NjIsMHgwMCwweDg4LDB4ZjAgfSB9LAoreyAgMTYsIDB4OWZiMCwgMCwgezB4MmUsMHgzYSwweDQ4LDB4OGYsMHgwYSwweDIwLDB4MDAsMHhiMCwweDgwLDB4MmUsMHgwMCwweDBiLDB4ODAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4OWZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4OWZkMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHgyMCwweDQyLDB4NDgsMHgxNCwweDQyLDB4MDUsMHg4MCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4OWZlMCwgMCwgezB4MmMsMHg0NCwweDA4LDB4MTAsMHg4MiwweDA0LDB4MDAsMHhiMSwweDIwLDB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWZmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNSwweDAxLDB4OTksMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTAwMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjQsMHg0MCwweGJiLDB4MDEsMHgyMiwweDQxLDB4MDgsMHg5MCwweDEyLDB4MjQsMHgwMCwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTAxMCwgMCwgezB4MmMsMHg0MCwweDA4LDB4MTAsMHg0MCwweDI0LDB4MDgsMHhiOSwweDQwLDB4NmUsMHg1MCwweDBiLDB4OTIsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YTAyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDE0LDB4YzksMHgwNSwweDNlLDB4NDEgfSB9LAoreyAgMTYsIDB4YTAzMCwgMCwgezB4MGYsMHg5MCwweDBiLDB4MjQsMHgwNCwweGY5LDB4MDgsMHhiMiwweDQwLDB4MmMsMHg5MCwweDBhLDB4MjQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTA0MCwgMCwgezB4M2UsMHg0MCwweDJjLDB4OTAsMHgwMywweDI3LDB4MDAsMHhmOSwweDgwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTA1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NCwweDg4LDB4ZjksMHgwMCwweDNlLDB4NDggfSB9LAoreyAgMTYsIDB4YTA2MCwgMCwgezB4MGYsMHg5OSwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDIsMHgzYywweDQwLDB4YWYsMHgxMCwweDAzLDB4ZTQsMHgxMiwweGQ5LDB4MDQgfSB9LAoreyAgMTYsIDB4YTA3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU1LDB4MDAsMHhmOSwweGMwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHg4MywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTA4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTA5MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MjEsMHgwMCwweGM4LDB4NDAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgxMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTBhMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4ODAsMHhmOCwweDA0LDB4MzIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTBiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4Y2EsMHgwMCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YTBjMCwgMCwgezB4MGIsMHhlOCwweDBhLDB4MzgsMHgxMCwweDhlLDB4YzAsMHgyMiwweDgwLDB4MGQsMHhhMCwweDAyLDB4MjgsMHgwMCwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTBkMCwgMCwgezB4MDIsMHg4MCwweDI4LDB4YTAsMHgwMiwweGZiLDB4MDAsMHhiYSwweDAwLDB4MzcsMHhiMCwweDQ4LDB4ZWEsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTBlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMSwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YTBmMCwgMCwgezB4OGIsMHhiMCwweDQyLDB4MGMsMHg5MCwweDliLDB4MjAsMHgyMCwweGMwLDB4NDgsMHgzMCwweDQyLDB4MmMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTEwMCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNkLDB4NDAsMHhiMywweDAwLDB4MjQsMHhjOCwweDA4LDB4MzgsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTExMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNCwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YTEyMCwgMCwgezB4MGIsMHgyNCwweDA2LDB4MTYsMHgwMCwweDkzLDB4MDgsMHgyMSwweGM4LDB4MDksMHgzMSwweDAyLDB4MGMsMHg4MCwweDg3LDB4YTAgfSB9LAoreyAgMTYsIDB4YTEzMCwgMCwgezB4MjEsMHhjMCwweDE4LDB4NzIsMHgwMiwweGRjLDB4MDAsMHhiNywweGI0LDB4MjQsMHhlMywweDA4LDB4NzgsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTE0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAyLDB4OTcsMHhhMCwweDNkLDB4ZjAgfSB9LAoreyAgMTYsIDB4YTE1MCwgMCwgezB4MGYsMHg0OCwweDAzLDB4M2UsMHgwMCwweGQ2LDB4ODAsMHgzMCwweGUwLDB4MmMsMHg3YSwweDAyLDB4MWUsMHg4MiwweGMzLDB4ZjAgfSB9LAoreyAgMTYsIDB4YTE2MCwgMCwgezB4MzMsMHhlYywweDBjLDB4N2MsMHgwMywweGQ2LDB4MDAsMHhmNywweDgwLDB4MzUsMHhlMCwweDBjLDB4ZDgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4YTE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTksMHhhNSwweGEwLDB4ZmIsMHgwMCwweDNlLDB4Y2EgfSB9LAoreyAgMTYsIDB4YTE4MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMiwweGVhLDB4MDAsMHgzZSwweGM2LDB4MGYsMHhiNCwweDBiLDB4ZWQsMHg0MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTE5MCwgMCwgezB4YmUsMHhjMCwweDBmLDB4YjYsMHg0MywweGUwLDB4MDAsMHhmYiwweDAyLDB4M2UsMHg4MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YTFhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAyLDB4Y2YsMHg4OCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTFiMCwgMCwgezB4MGMsMHhiOSwweDAzLDB4ZmUsMHgwMCwweGRkLDB4ODEsMHgzMywweGUwLDB4OGMsMHhmYywweDAzLDB4M2YsMHgwNCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YTFjMCwgMCwgezB4MzMsMHhlMiwweDRmLDB4ZmMsMHgwMywweDNlLDB4MDAsMHhjZiwweGMwLDB4MzMsMHg2NCwweDBjLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5NCwweDQwLDB4ODcsMHgwMCwweDJmLDB4YzEgfSB9LAoreyAgMTYsIDB4YTFlMCwgMCwgezB4MGQsMHg2OSwweGEyLDB4ZDAsMHg0MCwweGJjLDB4MDAsMHgyMywweGMwLDB4MDgsMHhmMCwweDAyLDB4OWMsMHgwMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4YTFmMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHgwYSwweDNjLDB4MDQsMHg4NywweDEwLDB4MjEsMHg0YywweDA4LDB4NjAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YTIxMCwgMCwgezB4MDksMHg2MiwweDAyLDB4ZDgsMHgwMCwweDk3LDB4MDAsMHgyMSwweGM0LDB4MDgsMHg3MCwweDAyLDB4MGMsMHg0MCwweDk3LDB4MDAgfSB9LAoreyAgMTYsIDB4YTIyMCwgMCwgezB4MjEsMHhjNCwweDBiLDB4MzAsMHgwMiwweDU4LDB4MDAsMHhhNywweDA4LDB4MjEsMHg4MCwweDA4LDB4NjAsMHg4MiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTIzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhlNCwweDI1LDB4ODMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YTI0MCwgMCwgezB4MDksMHgyMiwweDAyLDB4Y2MsMHgyMCwweGIyLDB4MDAsMHgyMCwweGMwLDB4MjgsMHhiMCwweDAyLDB4OGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI1MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHg0MiwweDZjLDB4MjAsMHg4MywweDA4LDB4MjAsMHhlMiwweDA4LDB4YjgsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhNCwweDAwLDB4Y2YsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTI3MCwgMCwgezB4MGQsMHg5YywweDAzLDB4ZTgsMHgwMCwweGRiLDB4ODAsMHgzMywweGMwLDB4MGMsMHhmMCwweDBiLDB4M2MsMHgwNiwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI4MCwgMCwgezB4YjMsMHhjMCwweDBiLDB4ZjAsMHgwNywweDY4LDB4MDAsMHhlZiwweDQwLDB4MzIsMHhhOCwweDBjLDB4YTgsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YTJhMCwgMCwgezB4MGYsMHg5NCwweDAzLDB4YzUsMHg0MCwweGZhLDB4MzAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJiMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4MzAsMHgxMywweGFkLDB4NDAsMHhmYiwweDAyLDB4M2UsMHhkMCwweDBmLDB4YjQsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlNCwweDAwLDB4YzcsMHgwMCwweDMxLDB4YzEgfSB9LAoreyAgMTYsIDB4YTJkMCwgMCwgezB4OGMsMHhkMCwweDAzLDB4MzQsMHgwMCwweGNkLDB4MDAsMHgzZCwweGMwLDB4MGMsMHhmMCwweDAxLDB4N2MsMHgwMCwweGRiLDB4MDEgfSB9LAoreyAgMTYsIDB4YTJlMCwgMCwgezB4M2QsMHhjMCwweDRjLDB4ZjAsMHgwYiwweDMwLDB4MDIsMHhjMywweDAwLDB4MzIsMHgwMCwweDBmLDB4ZDAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YTJmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2ZSwweDQwLDB4OGIsMHgwMCwweDJhLDB4YzAgfSB9LAoreyAgMTYsIDB4YTMwMCwgMCwgezB4MjgsMHg4NCwweDQyLDB4MjIsMHg4MCwweDg4LDB4ODAsMHgzYSwweGMwLDB4MGQsMHhiMCwweDAyLDB4YWMsMHgwOCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTMxMCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweDIzLDB4MjAsMHg4YiwweDAwLDB4MjIsMHgzMCwweDhiLDB4OGMsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YTMyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNCwweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YTMzMCwgMCwgezB4MDgsMHgzOCwweDg2LDB4MmEsMHgwMCwweDg5LDB4ODAsMHgyYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4Y2MsMHgwMCwweDliLDB4MDAgfSB9LAoreyAgMTYsIDB4YTM0MCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YjAsMHg0MiwweDI2LDB4MDAsMHg4YiwweDAwLDB4MjIsMHg3MSwweDBiLDB4OGMsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwMCwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4YTM2MCwgMCwgezB4MDgsMHgzMiwweDQyLDB4MDAsMHgwMCwweDgxLDB4MDAsMHgyOCwweGMwLDB4MDksMHgzMCwweDUyLDB4OGMsMHgwOCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTM3MCwgMCwgezB4MmMsMHhjMCwweDE4LDB4MzAsMHgwNiwweDAwLDB4MDAsMHg4MywweDAwLDB4YTAsMHgwMCwweDBiLDB4MDAsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3NCwweDAyLDB4OGIsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YTM5MCwgMCwgezB4MGMsMHg5MiwweDBiLDB4MjAsMHgwMiwweGM4LDB4MDAsMHgzYiwweGMwLDB4MGMsMHhmNSwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MDEgfSB9LAoreyAgMTYsIDB4YTNhMCwgMCwgezB4M2YsMHhjMSwweDA0LDB4ZjAsMHgzMywweDIxLDB4NDAsMHhjZiwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwYiwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YTNiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTNjMCwgMCwgezB4MGYsMHhjNCwweDAzLDB4ZjAsMHgwMCwweDljLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTNkMCwgMCwgezB4MmYsMHhjMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4ODAsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YTNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweGMwLDB4ZmYsMHhhMCwweDMxLDB4MjQgfSB9LAoreyAgMTYsIDB4YTNmMCwgMCwgezB4MGUsMHhmMCwweDYzLDB4MTAsMHgwNCwweGVmLDB4NjQsMHgzZiwweGMwLDB4NGMsMHhmMywweDAzLDB4MWMsMHg4MCwweGRmLDB4MDggfSB9LAoreyAgMTYsIDB4YTQwMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4YTAsMHhmYywweDAwLDB4MzEsMHgwOCwweDJjLDB4ZDIsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMSwweDAwLDB4YmIsMHhjMSwweDIyLDB4NDggfSB9LAoreyAgMTYsIDB4YTQyMCwgMCwgezB4MDgsMHhmZCwweDAyLDB4MmUsMHgwMCwweDk3LDB4MDAsMHgyZiwweGMyLDB4NDgsMHg3MSwweDIzLDB4N2UsMHg0MCwweGJmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQzMCwgMCwgezB4MjEsMHhjNSwweDRiLDB4ZjUsMHgwMiwweGVmLDB4MDAsMHhiYiwweDQwLDB4MzYsMHhlMCwweDA4LDB4YTgsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTQ0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNSwweDg0LDB4YjMsMHgxMSwweGEyLDB4YzkgfSB9LAoreyAgMTYsIDB4YTQ1MCwgMCwgezB4MGEsMHgzMCwweDAyLDB4MDAsMHgwMSwweGIzLDB4MzAsMHgyOCwweGM0LDB4MDgsMHgzMiwweDQyLDB4MGMsMHgwMCwweGEzLDB4MDggfSB9LAoreyAgMTYsIDB4YTQ2MCwgMCwgezB4YTAsMHhjYSwweDBhLDB4MzIsMHg4MiwweDgwLDB4MTAsMHhiMCwweDQxLDB4MjQsMHgxMSwweDA4LDB4MzEsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTQ3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhNSwweDAwLDB4YmIsMHgwMCwweDIyLDB4ZTEgfSB9LAoreyAgMTYsIDB4YTQ4MCwgMCwgezB4MjgsMHhiMCwweDAyLDB4MmMsMHg4MCwweDliLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQ5MCwgMCwgezB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMCwweGVjLDB4MjAsMHhiYiwweDAwLDB4MjYsMHhjMCwweDA4LDB4ODAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTRhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMywweDQwLDB4ZjcsMHgwNCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4YTRiMCwgMCwgezB4NGUsMHhiMCwweDIzLDB4MmUsMHgyMCwweGViLDB4MDAsMHgxZSwweGMwLDB4MGMsMHhiMCwweDAxLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRjMCwgMCwgezB4MzYsMHhjMCwweDFmLDB4YjAsMHgwMywweGUxLDB4NDAsMHhmYiwweDAwLDB4MzYsMHg5OCwweDBjLDB4OTAsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNiwweDA0LDB4ZmYsMHgwMiwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTRlMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZmUsMHgwMCwweGVmLDB4MDIsMHgzZCwweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRmMCwgMCwgezB4M2YsMHhjMCwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNCwweDAwLDB4M2IsMHg0MCwweDBmLDB4YTAsMHgxMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYSwweDIwLDB4ZWIsMHgxMCwweDM2LDB4YzAgfSB9LAoreyAgMTYsIDB4YTUxMCwgMCwgezB4MGQsMHhiMCwweDA3LDB4ZWMsMHgyMCwweGRiLDB4MDAsMHgzMiwweGMwLDB4MGMsMHhiMCwweDAyLDB4NmMsMHgyMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YTUyMCwgMCwgezB4M2UsMHhjMSwweDBkLDB4YjAsMHgwMywweGUwLDB4MjAsMHhkYiwweGEwLDB4MzIsMHg5MCwweDRjLDB4YjAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTUzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyZCwweDAwLDB4OGYsMHg4MCwweDIwLDB4YzEgfSB9LAoreyAgMTYsIDB4YTU0MCwgMCwgezB4MDgsMHg3MCwweDEyLDB4Y2YsMHgwMCwweDhmLDB4MDAsMHhhMywweGMwLDB4MGQsMHhmMCwweDAyLDB4M2MsMHgwMCwweDhmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU1MCwgMCwgezB4MzcsMHhjMCwweDg4LDB4ZjAsMHgwMiwweGVjLDB4MDAsMHg4OCwweDAwLDB4MjAsMHg0MCwweDA4LDB4ODAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YTMsMHg4MCwweDI0LDB4ODEgfSB9LAoreyAgMTYsIDB4YTU3MCwgMCwgezB4MDksMHgzMCwweDA2LDB4Y2MsMHg0MCwweDkzLDB4MDAsMHgyOCwweGMxLDB4MDgsMHhiMCwweDAyLDB4Y2YsMHg0MCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU4MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweGNkLDB4MDAsMHg5MCwweDQwLDB4NjAsMHg0MCwweDI4LDB4MTAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTU5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgwZSwweDAwLDB4ODcsMHg4MCwweDIzLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTVhMCwgMCwgezB4NDgsMHg3OSwweDAyLDB4ZGUsMHg0MSwweDk3LDB4ODAsMHgyOSwweGUwLDB4MTksMHg3OCwweDA2LDB4OWUsMHgwMCwweDg3LDB4ODAgfSB9LAoreyAgMTYsIDB4YTViMCwgMCwgezB4MjUsMHhlMCwweDA4LDB4NzgsMHgwMiwweGQyLDB4MDMsMHg4MywweDgwLDB4MjEsMHhhMCwweDA4LDB4NjgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4YTMsMHgwMCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4YTVkMCwgMCwgezB4MGQsMHgzMCwweDQyLDB4Y2MsMHgwMSwweGQzLDB4MTAsMHgzYSwweGM1LDB4MGMsMHgzOSwweDAzLDB4Y2MsMHgwMCwweGUzLDB4MDQgfSB9LAoreyAgMTYsIDB4YTVlMCwgMCwgezB4M2MsMHhjNCwweDBkLDB4MzAsMHgwMywweGNlLDB4MDAsMHhkMCwweDAwLDB4MzAsMHg0MCwweDBjLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YTVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4ZjcsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTYwMCwgMCwgezB4MWYsMHhmMCwweDUzLDB4ZmMsMHgwMCwweGVmLDB4MDgsMHgzNywweGQxLDB4MGYsMHhmMCwweDgzLDB4N2MsMHgwMCwweGY3LDB4NDAgfSB9LAoreyAgMTYsIDB4YTYxMCwgMCwgezB4M2YsMHhjMSwweDBmLDB4ZjEsMHgwMywweGQwLDB4MDAsMHhmZiwweDAwLDB4YmYsMHg4NCwweDBmLDB4YzgsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YTYyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlMCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTYzMCwgMCwgezB4MmMsMHhiZSwweDgzLDB4ZWMsMHgwMCwweGViLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhiNCwweDAzLDB4ZWQsMHgyMCwweGZiLDB4MTAgfSB9LAoreyAgMTYsIDB4YTY0MCwgMCwgezB4YjYsMHhkMiwweDBmLDB4YjQsMHg4MywweGVjLDB4MDAsMHhkYiwweDgwLDB4MzYsMHhjMSwweDBjLDB4OTAsMHgyMSwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAwLDB4YjcsMHgwMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTY2MCwgMCwgezB4MDgsMHgzNiwweDAyLDB4MGMsMHgwOCwweDg3LDB4MzAsMHgyZCwweGQ5LDB4OGIsMHg3MiwweDg2LDB4ZGQsMHgwMCwweGIzLDB4MjAgfSB9LAoreyAgMTYsIDB4YTY3MCwgMCwgezB4MjEsMHhjOCwweDBiLDB4NzQsMHgwMiwweGQwLDB4MDIsMHg4NCwweDAwLDB4YTAsMHgwMCwweDI4LDB4MjAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTY5MCwgMCwgezB4MDgsMHg3YSwweDAyLDB4OWQsMHgwMCwweGE3LDB4YTAsMHgyZCwweGUwLDB4MGIsMHg3OCwweDAyLDB4OWUsMHg4MCwweGE3LDB4ODAgfSB9LAoreyAgMTYsIDB4YTZhMCwgMCwgezB4MjEsMHhlNCwweDA4LDB4N2EsMHgyNiwweDllLDB4MTgsMHg4MywweDA0LDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwYSwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTZiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTZjMCwgMCwgezB4NTgsMHgzMCwweDEyLDB4MGUsMHg4MiwweDgzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMSwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTZkMCwgMCwgezB4MjAsMHhjMSwweDBiLDB4MzAsMHgwMiwweGMwLDB4MDgsMHg4OCwweGQyLDB4MjAsMHgyMCwweDA4LDB4MDAsMHgwMiwweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDYwLDB4ZmEsMHgwMCwweDNmLDB4ODIgfSB9LAoreyAgMTYsIDB4YTZmMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZmEsMHgwMCwweGFhLDB4MDAsMHgxZSwweDgwLDB4OGYsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTcwMCwgMCwgezB4MzIsMHg4MCwweDFmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkYSwweDAwLDB4MzYsMHg4OCwweGFjLDB4ZTAsMHgwMywweDdhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTcxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MjAgfSB9LAoreyAgMTYsIDB4YTcyMCwgMCwgezB4NGYsMHg4MCwweDAzLDB4ZTEsMHgwMCwweGYwLDB4MDAsMHgzYywweDAwLDB4MGIsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDIgfSB9LAoreyAgMTYsIDB4YTczMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHg0MywweGYxLDB4MDAsMHhmYywweDBhLDB4M2QsMHgwMCwweDBmLDB4YzAsMHgwMywweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTc0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNiwweDAwLDB4YzksMHg5MCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTc1MCwgMCwgezB4MGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzMiwweDQwLDB4MDQsMHg5MCwweDA3LDB4ZTcsMHgwMCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YTc2MCwgMCwgezB4MzAsMHg0MCwweDBjLDB4OTAsMHg0MywweGU0LDB4MDksMHhkOSwweDgwLDB4MjIsMHg0MCwweDJjLDB4MTAsMHgwYiwweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTc3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDYwLDB4ODksMHhjMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTc4MCwgMCwgezB4MGIsMHg5OCwweDI2LDB4YzUsMHg4MCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDEyLDB4ZTcsMHgxMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTc5MCwgMCwgezB4MzYsMHg0MCwweDI4LDB4OTAsMHgxMiwweGM1LDB4ODMsMHhjOSwweDgwLDB4YjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTdhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4ODksMHg0MCwweDJlLDB4NDEgfSB9LAoreyAgMTYsIDB4YTdiMCwgMCwgezB4NGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDk5LDB4MDAsMHhhMiwweDQwLDB4MGEsMHg5MCwweDAyLDB4ZTUsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTdjMCwgMCwgezB4ZTIsMHg0MSwweDA4LDB4OTAsMHg0MiwweGU0LDB4MDAsMHg5ZCwweDUwLDB4YWIsMHg0YSwweDA4LDB4ZDAsMHgyNiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTdkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgyLDB4ODEsMHgyMCwweDJjLDB4NTAgfSB9LAoreyAgMTYsIDB4YTdlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4ZTQsMHgwMCwweDgxLDB4NDAsMHgyMCwweDUwLDB4NGEsMHgxNCwweDMyLDB4YzQsMHgwMCwweGIxLDB4NDAgfSB9LAoreyAgMTYsIDB4YTdmMCwgMCwgezB4MjQsMHg1MSwweDE4LDB4MTQsMHgxMiwweGQ0LDB4MDAsMHg4NSwweDQwLDB4MmQsMHg0MCwweDA4LDB4NTAsMHgwNiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTgxMCwgMCwgezB4MGYsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGQ4LDB4MDAsMHgzMiwweDAwLDB4MGEsMHg4MCwweDAyLDB4ZTAsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTgyMCwgMCwgezB4MzIsMHgwMCwweDA0LDB4ODAsMHgwMywweGUwLDB4MDAsMHhkOCwweDAwLDB4M2EsMHgwMCwweDBjLDB4YzAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YTgzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NDEgfSB9LAoreyAgMTYsIDB4YTg0MCwgMCwgezB4MGYsMHg5NCwweDAzLDB4ZjUsMHgwMCwweGY5LDB4NDAsMHgzZSwweDUwLDB4MGQsMHg5NCwweDAzLDB4ZTUsMHgxMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4YTg1MCwgMCwgezB4M2UsMHg1MCwweDRmLDB4OTQsMHgwMywweGM1LDB4MDAsMHhlOSwweDQxLDB4MzYsMHg1MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YTg2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDAwLDB4ZmQsMHhhOCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4YTg3MCwgMCwgezB4MGMsMHhkOCwweDIzLDB4MzYsMHgwMCwweGU5LDB4YTAsMHgzZSwweDc4LDB4MGYsMHg5ZSwweDAzLDB4YjYsMHg4MCwweGNkLDB4ZTIgfSB9LAoreyAgMTYsIDB4YTg4MCwgMCwgezB4MzIsMHg2OCwweDBjLDB4OWIsMHgwMywweDM2LDB4ODIsMHg0ZCwweGEwLDB4MzcsMHg2OCwweDhjLDB4OTgsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTg5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlYiwweGEwLDB4YjgsMHg0MCwweDIwLDB4MjAgfSB9LAoreyAgMTYsIDB4YThhMCwgMCwgezB4MDgsMHg4NSwweDAyLDB4MjEsMHg1MSwweDg4LDB4YzAsMHgyZSwweDI5LDB4MGIsMHg4ZSwweDAyLDB4ZTEsMHgwMCwweGQ4LDB4ZTAgfSB9LAoreyAgMTYsIDB4YThiMCwgMCwgezB4MjIsMHgzMiwweDBkLDB4OGQsMHgyMywweDYxLDB4NDgsMHg5OCwweGQ0LDB4YTIsMHgxMCwweDI4LDB4ODQsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YThjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjMsMHgwMCwweDJhLDB4NGEgfSB9LAoreyAgMTYsIDB4YThkMCwgMCwgezB4MjgsMHgxMCwweDRlLDB4YTQsMHgwOCwweGExLDB4NjgsMHgyOCwweDQ0LDB4MGIsMHgxNCwweDAyLDB4YzUsMHgwMCwweDgxLDB4NDAgfSB9LAoreyAgMTYsIDB4YThlMCwgMCwgezB4YTAsMHg1MCwweDA4LDB4MTAsMHgwMiwweDA0LDB4MDIsMHg5MSwweDJhLDB4MjAsMHg0NCwweDI4LDB4MTQsMHg0YSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YThmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhYywweDgwLDB4YjksMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTkwMCwgMCwgezB4NDgsMHg5MCwweDA2LDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDIyLDB4ZTQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTkxMCwgMCwgezB4MjIsMHg0MCwweDA5LDB4MTAsMHgwMiwweDY0LDB4MDIsMHg5OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YTkyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM4LDB4NTggfSB9LAoreyAgMTYsIDB4YTkzMCwgMCwgezB4MGMsMHg5MCwweDUzLDB4ODQsMHgxNCwweGE5LDB4MDQsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTk0MCwgMCwgezB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDQsMHhkOSwweDAwLDB4YjYsMHg0MCwweDRjLDB4OTAsMHgwYiwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTk1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMiwweDNlLDB4NDkgfSB9LAoreyAgMTYsIDB4YTk2MCwgMCwgezB4MGYsMHgxMCwweDQzLDB4NjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGYxLDB4MDIgfSB9LAoreyAgMTYsIDB4YTk3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDIsMHhlOSwweDA0LDB4M2MsMHg0MCwweDBmLDB4MWMsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTk4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDgwLDB4YzgsMHgyMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTk5MCwgMCwgezB4OGMsMHg4MCwweDBiLDB4MjAsMHgwMCwweGU4LDB4MDIsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YTAsMHg4MiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTlhMCwgMCwgezB4NmMsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MTAsMHhjOCwweDAwLDB4MzIsMHgwMiwweDBjLDB4ODAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTliMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOCwweDAwLDB4ODYsMHgwMCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YTljMCwgMCwgezB4NjgsMHhhOCwweDgwLDB4M2EsMHgwMCwweDhhLDB4MDAsMHgyZSwweDgwLDB4MGIsMHhhMCwweDAyLDB4ZjgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTlkMCwgMCwgezB4MmUsMHg4MCwweDBiLDB4YTAsMHgwYSwweDNhLDB4MDAsMHg4ZSwweDEwLDB4MjMsMHg4MCwweDA4LDB4YTAsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTllMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZCwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YTlmMCwgMCwgezB4MDgsMHgzOCwweDAwLDB4MGMsMHg2MCwweDIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHg0MCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWEwMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4YSwweDgwLDB4YTAsMHhlMCwweDI4LDB4MzAsMHgwYSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWExMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNiwweDIwLDB4ODcsMHgwMiwweDJkLDB4YzEgfSB9LAoreyAgMTYsIDB4YWEyMCwgMCwgezB4NDgsMHg3MCwweDEyLDB4N2MsMHgwMCwweGE3LDB4MjAsMHgyZCwweGM5LDB4MGIsMHg3MiwweDAwLDB4ZGMsMHgwMCwweDg3LDB4MDggfSB9LAoreyAgMTYsIDB4YWEzMCwgMCwgezB4MmQsMHhjNCwweDFiLDB4MzIsMHgwMiwweDFkLDB4MDEsMHg4NywweDQyLDB4MjEsMHhjMiwweDA4LDB4NzAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWE0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDAyLDB4YzcsMHg4MCwweDNkLDB4ZWMgfSB9LAoreyAgMTYsIDB4YWE1MCwgMCwgezB4MGMsMHg1OCwweDAzLDB4MWUsMHgwMCwweGU3LDB4ODAsMHgzZCwweGVjLDB4MGYsMHg3ZiwweDAzLDB4OTYsMHgwMCwweGM3LDB4ODAgfSB9LAoreyAgMTYsIDB4YWE2MCwgMCwgezB4MmQsMHhlMiwweDA3LDB4NzksMHgwMywweDBhLDB4MDYsMHhjMywweDgwLDB4MzAsMHgyMCwweDhjLDB4MzgsMHgwMywweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YWE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YWE4MCwgMCwgezB4MGYsMHgxMCwweDQzLDB4OGMsMHgwMCwweGRiLDB4MzgsMHgzZSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4Y2MsMHgwNCwweGZiLDB4NDQgfSB9LAoreyAgMTYsIDB4YWE5MCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjYsMHgxMywweGVjLDB4MDIsMHhmZiwweDAyLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YWFhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYSwweDAwLDB4ZmYsMHg4MCwweDMxLDB4ZTMgfSB9LAoreyAgMTYsIDB4YWFiMCwgMCwgezB4MGUsMHhmOCwweDIzLDB4ZmUsMHgwMiwweGRmLDB4ODAsMHhiNywweGUyLDB4MGUsMHhmOCwweDAzLDB4N2UsMHgwMCwweDZkLDB4ZDAgfSB9LAoreyAgMTYsIDB4YWFjMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZjgsMHg5YiwweDc2LDB4YzAsMHhkZiwweDg0LDB4YjMsMHhlMCwweDA0LDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5MCwweDQwLDB4YjcsMHgwMiwweDIxLDB4YzQgfSB9LAoreyAgMTYsIDB4YWFlMCwgMCwgezB4MDgsMHg3YiwweDQyLDB4ZGMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGM0LDB4MGIsMHgzMCwweDAwLDB4MTAsMHg4MCwweDhkLDB4MDAgfSB9LAoreyAgMTYsIDB4YWFmMCwgMCwgezB4MjMsMHhjMCwweDBkLDB4ZjIsMHgwMiwweDA0LDB4NDIsMHg4ZiwweDAwLDB4MjksMHhjOCwweDI4LDB4NzAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDAwLDB4YjYsMHgwMCwweDIzLDB4YzAgfSB9LAoreyAgMTYsIDB4YWIxMCwgMCwgezB4MGEsMHg3MiwweDAyLDB4OGMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4MGEsMHgzMCwweDAyLDB4MDQsMHgwMSwweGE3LDB4MDIgfSB9LAoreyAgMTYsIDB4YWIyMCwgMCwgezB4MjEsMHhjMCwweDA4LDB4NzAsMHg0MiwweDAwLDB4OGEsMHg4NywweDAwLDB4MjEsMHhjMCwweDI4LDB4NzAsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWIzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjNSwweDAwLDB4YjAsMHgwMCwweGEwLDB4ZDAgfSB9LAoreyAgMTYsIDB4YWI0MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4YzksMHg0MiwweDhiLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDIyLDB4MDQsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI1MCwgMCwgezB4YTAsMHhjMCwweDQ5LDB4MzAsMHgwMiwweDQ1LDB4NDAsMHg5MywweGMwLDB4YTgsMHhkNCwweDAwLDB4MzUsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4YmIsMHgwMCwweDMxLDB4YzAgfSB9LAoreyAgMTYsIDB4YWI3MCwgMCwgezB4MGUsMHhiMCwweDIzLDB4Y2QsMHgwMCwweGRmLDB4MDAsMHgzNywweGMwLDB4MGUsMHhmMCwweDAxLDB4NjgsMHgwMCwweGUzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI4MCwgMCwgezB4MzMsMHhjMCwweDFjLDB4ZjAsMHgwMywweDQ1LDB4MDAsMHhkYSwweGM4LDB4OTIsMHhkNCwweDJjLDB4YjQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlNSwweDIwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YWJhMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4NGYsMHhiMCwweDAzLDB4YWQsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJiMCwgMCwgezB4N2UsMHhjMCwweDFmLDB4MzAsMHgwMywweGE0LDB4ODAsMHhlOSwweDIwLDB4M2MsMHhjMCwweDBmLDB4MzIsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4YzcsMHgwMCwweDMzLDB4YzIgfSB9LAoreyAgMTYsIDB4YWJkMCwgMCwgezB4MmMsMHhmMCwweDAzLDB4M2UsMHgyMCwweGRiLDB4MDAsMHgxMywweGMwLDB4MGMsMHg3MCwweDAzLDB4M2MsMHg4MCwweGVmLDB4MDQgfSB9LAoreyAgMTYsIDB4YWJlMCwgMCwgezB4NzMsMHhjMSwweDBmLDB4ZjAsMHgyMiwweDMwLDB4MDAsMHhjNiwweDAwLDB4YjIsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YWJmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg2OSwweDAwLDB4OGIsMHg0NCwweGEyLDB4YzEgfSB9LAoreyAgMTYsIDB4YWMwMCwgMCwgezB4ODgsMHhiMCwweDAzLDB4NmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwLDB4MjgsMHhiMCwweDBhLDB4MmQsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWMxMCwgMCwgezB4NjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDI2LDB4MDIsMHg4YiwweDgwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMywweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YWMyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyOCwweDAxLDB4OGEsMHgwOCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YWMzMCwgMCwgezB4MDgsMHhiMiwweDAyLDB4NmMsMHg0MCwweDliLDB4MDAsMHgyOCwweGMwLDB4NDgsMHhiMCwweDE2LDB4MjksMHgwNCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4YWM0MCwgMCwgezB4MjIsMHhjMCwweDQ5LDB4YjAsMHgwNiwweGFlLDB4MDksMHg4YiwweDgwLDB4MjIsMHhlMCwweDQ4LDB4YjAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAyLDB4ODIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YWM2MCwgMCwgezB4ODgsMHhiMCwweDAyLDB4NDQsMHgwMCwweDgzLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MDgsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4YWM3MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MywweDgwLDB4MjAsMHhlMCwweDA4LDB4MzAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4Y2EsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YWM5MCwgMCwgezB4MGMsMHhiMiwweDAzLDB4MmMsMHgwMCwweGRmLDB4MDAsMHgzYiwweGMwLDB4NGMsMHhmNSwweDEzLDB4MmMsMHgwNCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWNhMCwgMCwgezB4YTMsMHhjMCwweDBkLDB4ZjAsMHgwMywweGE4LDB4NDAsMHhjYiwweDAwLDB4YjIsMHgwMCwweDJjLDB4YjAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YWNiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmMCwweDAwLDB4ZjQsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YWNjMCwgMCwgezB4MGYsMHhiMSwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWNkMCwgMCwgezB4M2YsMHhjMCwweDA3LDB4ZjAsMHgwYiwweDdjLDB4MDgsMHhmZiwweDAxLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4YWNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweGM1LDB4ZWQsMHgzMywweDNiLDB4Y2MgfSB9LAoreyAgMTYsIDB4YWNmMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4MzAsMHg0MCwweGZmLDB4MjUsMHgzZiwweGNjLDB4MGMsMHhmMywweDgzLDB4M2MsMHhkMCwweGRmLDB4NDggfSB9LAoreyAgMTYsIDB4YWQwMCwgMCwgezB4MzcsMHgzMCwweDRjLDB4ZjMsMHgwMywweGZkLDB4ODAsMHhjZiwweDI4LDB4MzMsMHhkOCwweDBjLDB4ZjEsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWQxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweGQwLDB4YmIsMHgzMSwweDIwLDB4Y2MgfSB9LAoreyAgMTYsIDB4YWQyMCwgMCwgezB4ODgsMHhmMywweDQyLDB4MjAsMHg1MCwweGJmLDB4OTAsMHgyZiwweGM0LDB4MGEsMHhmNiwweDAyLDB4N2QsMHhjMCwweDhmLDB4NDAgfSB9LAoreyAgMTYsIDB4YWQzMCwgMCwgezB4MjYsMHg0MCwweDhmLDB4ZjYsMHgwMiwweGZkLDB4MDAsMHhmZiwweDA4LDB4MzksMHhjOCwweDA4LDB4ZjYsMHgwMiwweGEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWQ0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDgwLDB4YTEsMHgyMCwweDI4LDB4YzkgfSB9LAoreyAgMTYsIDB4YWQ1MCwgMCwgezB4MDgsMHgzMCwweDlhLDB4MDAsMHgwOSwweGIzLDB4MDAsMHgyYywweGMwLDB4MjAsMHgzMCwweDAyLDB4NGMsMHg5MCwweDgzLDB4MjAgfSB9LAoreyAgMTYsIDB4YWQ2MCwgMCwgezB4MDIsMHgwOCwweDBiLDB4MzMsMHgxMiwweGNkLDB4ODAsMHg5MywweDIwLDB4MjQsMHhkOCwweDA4LDB4MzQsMHgyMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWQ3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhZSwweDAwLDB4YmIsMHgxMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YWQ4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MjYsMHgwMSwweDNiLDB4MDEsMHg2ZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4NGMsMHgwOCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWQ5MCwgMCwgezB4YTIsMHg4OSwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhhYiwweDAwLDB4NmEsMHhjMSwweDI4LDB4YjAsMHgwMiwweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWRhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHg2ZSwweDAwLDB4ZTgsMHhjMSwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4YWRiMCwgMCwgezB4MmMsMHhiMCwweDQzLDB4MjYsMHgwMCwweGZiLDB4MDYsMHgzZSwweGMxLDB4MGMsMHhiMCwweDBiLDB4MmMsMHgwMiwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWRjMCwgMCwgezB4MzQsMHgyMiwweDlmLDB4YjAsMHg0MywweGVjLDB4MDAsMHg5YiwweDAyLDB4MzYsMHhjMSwweDhjLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDAwLDB4ZmMsMHg4MCwweDNkLDB4ZDAgfSB9LAoreyAgMTYsIDB4YWRlMCwgMCwgezB4MmYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZiLDB4MDAsMHgzZCwweGMwLDB4MDcsMHgzMCwweDAzLDB4YmMsMHgwMCwweGVmLDB4MDQgfSB9LAoreyAgMTYsIDB4YWRmMCwgMCwgezB4M2YsMHhlMCwweDVlLDB4YjAsMHgwMSwweGZjLDB4MDAsMHhmZiwweDAwLDB4MWIsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4Y2IsMHgwMSwweDNlLDB4YzkgfSB9LAoreyAgMTYsIDB4YWUxMCwgMCwgezB4MGMsMHhiMCwweDE3LDB4MjAsMHg4NCwweGViLDB4MDAsMHhiMiwweGMxLDB4MGQsMHhiMCwweDAzLDB4NmMsMHgwMCwweGMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWUyMCwgMCwgezB4MzIsMHg1MCwweDBmLDB4YjAsMHgwMywweDBjLDB4NDAsMHhjMywweDAwLDB4N2UsMHhjMCwweDBjLDB4MzAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWUzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4OGEsMHg1OCwweDJlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWU0MCwgMCwgezB4NDgsMHhmMCwweDAyLDB4MmQsMHgwMCwweGVmLDB4MDEsMHgyMywweGMwLDB4MDgsMHhmMCwweDIyLDB4M2MsMHgwNCwweDhmLDB4NjAgfSB9LAoreyAgMTYsIDB4YWU1MCwgMCwgezB4MzYsMHg1NCwweDBiLDB4ZjAsMHgwYSwweDNkLDB4NDAsMHg4ZiwweDAwLDB4MmYsMHhjMCwweDA4LDB4ZjAsMHgwMywweDcyLDB4MDAgfSB9LAoreyAgMTYsIDB4YWU2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MCwweDAwLDB4ODksMHg4MCwweDJjLDB4MTAgfSB9LAoreyAgMTYsIDB4YWU3MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4NDksMHgwMCwweGEzLDB4YTAsMHgyNCwweGMwLDB4MDksMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4YzkgfSB9LAoreyAgMTYsIDB4YWU4MCwgMCwgezB4MjAsMHg5MCwweDQyLDB4MzAsMHgxMiwweDRkLDB4MDAsMHg4MywweDAwLDB4NmEsMHhjMCwweDA5LDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWU5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDAwLDB4ODUsMHg4MCwweDZkLDB4NjIgfSB9LAoreyAgMTYsIDB4YWVhMCwgMCwgezB4MDgsMHg3ZSwweDAyLDB4NTYsMHg0MCwweDI3LDB4ODAsMHgyNSwweGUwLDB4MTksMHg3OCwweDA2LDB4MGUsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4YWViMCwgMCwgezB4NjEsMHhhMCwweDBiLDB4NzgsMHgwMiwweDRlLDB4MDAsMHg4NywweDgyLDB4NmQsMHhlMCwweDA5LDB4NzksMHgwMiwweDQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyYywweDAyLDB4YzMsMHg2MSwweDNjLDB4ODggfSB9LAoreyAgMTYsIDB4YWVkMCwgMCwgezB4MmMsMHhiYSwweDEyLDB4NDksMHgxMCwweGUzLDB4MmMsMHgzNiwweGMwLDB4MGQsMHgzMCwweDUzLDB4NGMsMHg0NCwweGMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWVlMCwgMCwgezB4MjAsMHgwMSwweDBmLDB4MzEsMHgwMywweDRjLDB4MDAsMHhjMywweDAxLDB4M2MsMHhjMCwweDJkLDB4YjEsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YWVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWYwMCwgMCwgezB4NGYsMHhmMSwweDA5LDB4YjAsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGUsMHhmNCwweDAxLDB4ZmQsMHgyNCwweGZmLDB4NDAgfSB9LAoreyAgMTYsIDB4YWYxMCwgMCwgezB4YmYsMHhjMCwweDA3LDB4ZjAsMHgwMywweGJjLDB4MDAsMHg2ZiwweDEwLDB4M2YsMHhjNCwweDFlLDB4ZjEsMHg4MywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YWYyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhjNCwweDAwLDB4ZTgsMHgwNCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YWYzMCwgMCwgezB4MGMsMHhiNiwweDAzLDB4ZTgsMHgwMiwweGNiLDB4MDAsMHgzNiwweGNhLDB4MGYsMHhiNSwweDAzLDB4YWQsMHgwMCwweGZiLDB4MjAgfSB9LAoreyAgMTYsIDB4YWY0MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4YjMsMHgwMywweGVjLDB4ODAsMHhmYiwweGE4LDB4MzIsMHhjNiwweDhjLDB4YjYsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAyLDB4ZTYsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWY2MCwgMCwgezB4MDgsMHg3MywweDAyLDB4ZGMsMHgwMCwweDg3LDB4NzAsMHgyZCwweGQwLDB4MGIsMHhmMCwweDAyLDB4MWMsMHg4NCwweGI3LDB4MjAgfSB9LAoreyAgMTYsIDB4YWY3MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHg4MiwweGRkLDB4MjQsMHhiNywweDQwLDB4MzQsMHhjOSwweDI4LDB4NzIsMHg4MiwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4YWY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHhiZSwweDAyLDB4YWMsMHg4MCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4YWY5MCwgMCwgezB4MDgsMHg3OSwweDAwLDB4Y2UsMHgwNCwweDg3LDB4ODAsMHg2NSwweGUwLDB4MGIsMHg3YSwweDAyLDB4OWUsMHgwMCwweGI3LDB4OTAgfSB9LAoreyAgMTYsIDB4YWZhMCwgMCwgezB4NmQsMHhhMCwweDBiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNywweDgwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWZiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhlZCwweDgyLDB4YWIsMHhlMCwweDIwLDB4ZTQgfSB9LAoreyAgMTYsIDB4YWZjMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4ZWUsMHgwNCwweDgzLDB4MDAsMHgyYywweGMxLDB4MWIsMHgzMCwweDAyLDB4MGMsMHgwOCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWZkMCwgMCwgezB4NjQsMHhmNiwweDBiLDB4YjAsMHgwMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjYsMHhjMCwweDA4LDB4MzAsMHgwMiwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4YWZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYiwweDgwLDB4ZWUsMHg0OSwweDMxLDB4YTAgfSB9LAoreyAgMTYsIDB4YWZmMCwgMCwgezB4MmMsMHhhMCwweDAzLDB4ZmEsMHgwMCwweGNhLDB4MDIsMHgzNiwweDgwLDB4MGYsMHhhMCwweDAzLDB4YTgsMHgwMCwweGZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YjAwMCwgMCwgezB4M2YsMHg5MCwweDBmLDB4YTAsMHg2MywweGU4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgyMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjAxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDBhLDB4ZTgsMHgwMCwweDNlLDB4MDggfSB9LAoreyAgMTYsIDB4YjAyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTMsMHg1MCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjAzMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDEsMHhmOCwweDAxLDB4N2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YjA0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDQwLDB4YzksMHhhMSwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjA1MCwgMCwgezB4MjAsMHgxMSwweDAxLDB4YTYsMHg0MCwweGM5LDB4ODQsMHgzNiwweDQwLDB4MGQsMHg5MCwweDAzLDB4NDQsMHgwMCwweDQxLDB4MDAgfSB9LAoreyAgMTYsIDB4YjA2MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTAsMHgwYiwweDI0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDRjLDB4MTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjA3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4MiwweGEyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjA4MCwgMCwgezB4MDgsMHg5YywweDAyLDB4MjUsMHgwMCwweDg5LDB4YzgsMHgyMiwweDQwLDB4MDgsMHg5MCwweDQyLDB4MjQsMHgwMCwweDg5LDB4MjAgfSB9LAoreyAgMTYsIDB4YjA5MCwgMCwgezB4MjIsMHg2MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MTAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMywweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjBhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHgwNCwweDIyLDB4Y2EgfSB9LAoreyAgMTYsIDB4YjBiMCwgMCwgezB4MGEsMHg5MCwweDBhLDB4MjUsMHgwMiwweDg5LDB4MjAsMHgyMCwweDQwLDB4MjgsMHgxMCwweDAyLDB4NjQsMHgwMSwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjBjMCwgMCwgezB4MjIsMHg0YiwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDEsMHhiOSwweDAwLDB4MmUsMHg0MSwweDI4LDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjBkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDkwLDB4ODEsMHhhMCwweDIwLDB4NDggfSB9LAoreyAgMTYsIDB4YjBlMCwgMCwgezB4MGEsMHgzMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MDAsMHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDQsMHhkMCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4YjBmMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTEsMHgwMiwweDA2LDB4MDAsMHhiMSwweDMxLDB4MmMsMHg0OCwweDA4LDB4MTQsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQyLDB4YzgsMHg1NCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4YjExMCwgMCwgezB4MGUsMHg4NSwweDAzLDB4MjEsMHg0NCwweGM4LDB4MjgsMHhiMiwweDFhLDB4NGMsMHg4NiwweDkzLDB4NjEsMHgxNCwweGU4LDB4NTAgfSB9LAoreyAgMTYsIDB4YjEyMCwgMCwgezB4MjIsMHgxNCwweDBmLDB4ODYsMHg4MywweDIxLDB4NDAsMHhmMCwweDQwLDB4MWUsMHgxNCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YjEzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHg3NCwweDQ0LDB4ZjUsMHgxMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4YjE0MCwgMCwgezB4MGQsMHg5MSwweDAzLDB4NzQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDQ4LDB4MGIsMHg5MiwweDAzLDB4ZTQsMHhjMiwweGQ5LDB4MTAgfSB9LAoreyAgMTYsIDB4YjE1MCwgMCwgezB4YmYsMHg0MCwweDBmLDB4OTIsMHgwMywweGU1LDB4MDQsMHhmOSwweDMwLDB4M2UsMHg0NCwweDBmLDB4OTQsMHg0MywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YjE2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDIyLDB4Y2QsMHhhMSwweDMzLDB4NjEgfSB9LAoreyAgMTYsIDB4YjE3MCwgMCwgezB4MGMsMHhkOCwweGQzLDB4MzQsMHgxMCwweGNkLDB4YTgsMHgzZSwweDYwLDB4OGUsMHg5YywweDkzLDB4YTcsMHgwOCwweGNkLDB4ODAgfSB9LAoreyAgMTYsIDB4YjE4MCwgMCwgezB4MzMsMHg0MCwweDBlLDB4OWEsMHhkMywweDM2LDB4YTAsMHhjOSwweDgwLDB4MzIsMHg2MCwweDBjLDB4OTksMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjE5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMywweDg4LDB4OGEsMHhhMCwweDIwLDB4MjggfSB9LAoreyAgMTYsIDB4YjFhMCwgMCwgezB4MDgsMHg4MCwweDIyLDB4MjAsMHgxMiwweDg4LDB4NDAsMHgyYywweDI4LDB4MDgsMHg4YSwweDAyLDB4MjIsMHgwMCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjFiMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4OGMsMHgwMywweDIxLDB4MDAsMHg4OCwweGQwLDB4YTIsMHgzZSwweDI4LDB4OGQsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YjFjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjZSwweDIwLDB4YTEsMHg0OCwweDIwLDB4NTIgfSB9LAoreyAgMTYsIDB4YjFkMCwgMCwgezB4MjksMHgxMCwweDAyLDB4MjQsMHgwMywweDgxLDB4MDAsMHgyYywweDUyLDB4MGEsMHgxMCwweDEyLDB4ODUsMHgxMCwweDkxLDB4NDAgfSB9LAoreyAgMTYsIDB4YjFlMCwgMCwgezB4YTQsMHg0MCwweDBhLDB4MTIsMHg4MiwweDQ0LDB4MDAsMHg5MSwweDI4LDB4MjQsMHg0MCwweDI4LDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjFmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4YTksMHgxNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjIwMCwgMCwgezB4MDksMHg5MCwweDAyLDB4YTQsMHgwMSwweDg5LDB4MDQsMHgyYywweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjIxMCwgMCwgezB4MjIsMHg0NCwweDRiLDB4MTAsMHg0MiwweDI0LDB4MTQsMHg5OSwweDAwLDB4MjYsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YjIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDQwLDB4ZTksMHg0MCwweGIyLDB4NzggfSB9LAoreyAgMTYsIDB4YjIzMCwgMCwgezB4MGQsMHg5MCwweDBiLDB4MjQsMHgyMiwweGM5LDB4MDMsMHgzZSwweDQxLDB4MGUsMHg5MCwweDAzLDB4YTQsMHgwMiwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjI0MCwgMCwgezB4MTYsMHg1OCwweDA2LDB4OTAsMHgwYiwweDY0LDB4MDIsMHhkOSwweDAwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NCwweDAwLDB4ZDksMHg4MCwweDNlLDB4NGEgfSB9LAoreyAgMTYsIDB4YjI2MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4NjQsMHgyMCwweGY5LDB4MDgsMHgzZSwweDQxLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGUxLDB4MDggfSB9LAoreyAgMTYsIDB4YjI3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhlMSwweDAwLDB4MzgsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA5LDB4ZjAsMHg0MCwweGIwLDB4MTAgfSB9LAoreyAgMTYsIDB4YjI5MCwgMCwgezB4NGMsMHgwMCwweDBiLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDAwLDB4MWMsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjJhMCwgMCwgezB4MzYsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4M2UsMHg4OCwweDIzLDB4YTIgfSB9LAoreyAgMTYsIDB4YjJjMCwgMCwgezB4NDgsMHhlMCwweDAwLDB4MTksMHg4MCwweGJlLDB4ODgsMHgyZSwweDgwLDB4MGQsMHhhMCwweDQyLDB4ZTgsMHgwMCwweDhlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjJkMCwgMCwgezB4MjMsMHg5MCwweDA4LDB4YTAsMHgwYSwweDNhLDB4MDAsMHhkYSwweDAwLDB4MzYsMHg4MCwweDBiLDB4YTAsMHgwYSwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjJlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHg4MCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjJmMCwgMCwgezB4MjgsMHgzMCwweGMyLDB4MGYsMHgxMCwweGIzLDB4NDAsMHgyOCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZWMsMHgxMSwweDgzLDB4NDAgfSB9LAoreyAgMTYsIDB4YjMwMCwgMCwgezB4MjgsMHhkMiwweDBhLDB4MzAsMHgwMiwweDBjLDB4YzAsMHg4MywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjMxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDAwLDB4YjYsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4YjMyMCwgMCwgezB4MDgsMHgyMCwweGMyLDB4MWMsMHgxMCwweGI1LDB4MDAsMHgyZCwweGM4LDB4MGEsMHg3MiwweDAyLDB4ZGMsMHg0MCwweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4YjMzMCwgMCwgezB4MjksMHhhMiwweDFhLDB4NzIsMHgyMiwweDBjLDB4MDAsMHg5MywweDMwLDB4MDUsMHhjNCwweDBiLDB4MzIsMHgyMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxNiwweDAwLDB4YjIsMHg4MCwweDMxLDB4MjAgfSB9LAoreyAgMTYsIDB4YjM1MCwgMCwgezB4MGMsMHg1OCwweDAzLDB4MWUsMHgwMCwweGY3LDB4ODAsMHgzOSwweGY4LDB4MGIsMHg3YywweDIyLDB4Y2UsMHg0MCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YjM2MCwgMCwgezB4OWIsMHg2MCwweDJlLDB4M2IsMHgwMywweDFhLDB4MDAsMHhjNywweGE4LDB4MTEsMHhlMCwweDBmLDB4NzgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4YjM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhNCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YjM4MCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZTgsMHgwMCwweGZiLDB4MDAsMHgzZSwweGQwLDB4MmQsMHhiNiwweDAzLDB4ZWQsMHgwMiwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjM5MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4YjAsMHgwNywweGVjLDB4MDAsMHhmYiwweDYwLDB4M2UsMHhjOCwweDBmLDB4YjUsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YjNhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDMzLDB4YTAgfSB9LAoreyAgMTYsIDB4YjNiMCwgMCwgezB4MGMsMHhmOCwweDBiLDB4MzIsMHg0MCwweGNlLDB4ODEsMHgzNywweGYwLDB4MGMsMHhiYywweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODQgfSB9LAoreyAgMTYsIDB4YjNjMCwgMCwgezB4MzMsMHhlMCwweDJjLDB4ZjgsMHg4MywweGU2LDB4MDIsMHhjZiwweDg1LDB4MzMsMHhmMCwweDBjLDB4ZmMsMHgwMywweDAwLDB4MTQgfSB9LAoreyAgMTYsIDB4YjNkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YmUsMHgwMCwweDM1LDB4YzYgfSB9LAoreyAgMTYsIDB4YjNlMCwgMCwgezB4MjgsMHgzMCwweDAyLDB4MzAsMHg0MCwweDg3LDB4MDAsMHgyMywweGMwLDB4MDgsMHg3YSwweDAyLDB4ZGMsMHgwMCwweGJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjNmMCwgMCwgezB4MjMsMHhjMCwweDA4LDB4NzAsMHgxMiwweGZlLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjQwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NSwweDIwLDB4YjYsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4YjQxMCwgMCwgezB4MDgsMHgzMSwweDAyLDB4NWMsMHgwMSwweDg3LDB4MDAsMHgyNSwweGMwLDB4MDgsMHg3MiwweDAyLDB4ZGMsMHgwMCwweGI2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjQyMCwgMCwgezB4MjEsMHhkMCwweDA5LDB4NzAsMHgwMiwweGQ0LDB4MDgsMHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjNCwweDAwLDB4YjAsMHhlMCwweDI0LDB4NjAgfSB9LAoreyAgMTYsIDB4YjQ0MCwgMCwgezB4MDgsMHgyMCwweDA2LDB4NDgsMHgwMSwweDgwLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwNCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ1MCwgMCwgezB4MjAsMHg4NCwweDBiLDB4MzAsMHgwMiwweGU4LDB4MDAsMHg5YiwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjQ2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4YjksMHhlMCwweDMyLDB4ODAgfSB9LAoreyAgMTYsIDB4YjQ3MCwgMCwgezB4NmMsMHhiMCwweDIzLDB4NmYsMHgwMCwweGMzLDB4MDAsMHgzNywweGMxLDB4M2MsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ4MCwgMCwgezB4YjAsMHhjMCwweDA5LDB4ZjAsMHgwMywweGVjLDB4MTAsMHhkZiwweDAwLDB4NzMsMHhjMCwweDBjLDB4ZjAsMHgwYiwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDEwLDB4ZjgsMHgwMCwweDNlLDB4NDIgfSB9LAoreyAgMTYsIDB4YjRhMCwgMCwgezB4MGYsMHgyNCwweDAzLDB4YTgsMHg2MCwweGY4LDB4MDAsMHgzYywweGMxLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4YjRiMCwgMCwgezB4M2UsMHg4MCwweDA0LDB4YjAsMHgyMywweGUxLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmNCwweDAwLDB4ZWUsMHgwMCwweDNkLDB4MzAgfSB9LAoreyAgMTYsIDB4YjRkMCwgMCwgezB4MGMsMHhjMCwweDAzLDB4MTQsMHgwMCwweGNjLDB4YTAsMHhiMywweGMwLDB4NGMsMHg3MCwweDAzLDB4NWMsMHgxMCwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRlMCwgMCwgezB4M2YsMHgwMCwweDBjLDB4ZjAsMHgwMywweGY4LDB4MDAsMHhjZiwweDAwLDB4MjMsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjRmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2NCwweDAwLDB4YmEsMHg4MSwweDJlLDB4NTggfSB9LAoreyAgMTYsIDB4YjUwMCwgMCwgezB4MDgsMHg4OCwweDAyLDB4MjcsMHg4MCwweDg5LDB4MjAsMHgyMiwweGMwLDB4MjgsMHhiMCwweDAyLDB4MmMsMHgwMCwweDg4LDB4ODMgfSB9LAoreyAgMTYsIDB4YjUxMCwgMCwgezB4MmUsMHgyMCwweDA1LDB4YjAsMHg2MiwweGUzLDB4MDAsMHg4YiwweDAwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMywweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjUyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNiwweDAwLDB4YjksMHg4MSwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YjUzMCwgMCwgezB4MDgsMHg4YywweDA2LDB4MjYsMHgwMCwweDg4LDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDE2LDB4NmMsMHgwMCwweDk4LDB4ODggfSB9LAoreyAgMTYsIDB4YjU0MCwgMCwgezB4MmUsMHgyMCwweDA4LDB4YjAsMHgwNCwweGUzLDB4MDEsMHgwYiwweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjAsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YjU2MCwgMCwgezB4MjgsMHgwMCwweDBlLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMiwweDAyLDB4MGMsMHgwMCwweDgwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjU3MCwgMCwgezB4MmUsMHgyMCwweDA5LDB4MzAsMHgwMiwweGM0LDB4MTIsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZmEsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjU5MCwgMCwgezB4MmMsMHg5MSwweDAzLDB4MjAsMHgwMCwweDhhLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDAzLDB4N2MsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjVhMCwgMCwgezB4MmUsMHg0MCwweDBjLDB4ZjAsMHgwMywweGUwLDB4ODAsMHhjZiwweDAwLDB4M2IsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YjViMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmMsMHgwMSwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YjVjMCwgMCwgezB4MGYsMHhjMCwweDEzLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMxLDB4MGYsMHhmNCwweDIzLDB4ZmMsMHgwOCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4YjVkMCwgMCwgezB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4NDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YjVlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDIwLDB4Y2QsMHgxMCwweDM5LDB4YzggfSB9LAoreyAgMTYsIDB4YjVmMCwgMCwgezB4MGQsMHhjMSwweDAzLDB4M2MsMHg4MCwweGVmLDB4OTAsMHgyMywweGQ4LDB4MGYsMHhmOCwweDAwLDB4ZmUsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YjYwMCwgMCwgezB4MWYsMHhkMCwweDBmLDB4ZjksMHgwMywweGZmLDB4MDAsMHhlNywweGMwLDB4MzMsMHhjNCwweDBmLDB4ZjAsMHgwMywweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjYxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHhmZSwweDAyLDB4ODksMHg0MCwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4YjYyMCwgMCwgezB4MDgsMHg4NSwweDEwLDB4M2MsMHgwMCwweDhiLDB4MDAsMHhhMywweGRjLDB4NGIsMHhiMiwweDgyLDB4ZWMsMHgyMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YjYzMCwgMCwgezB4MjYsMHhjMCwweDRiLDB4YjAsMHgwMiwweGVjLDB4MTAsMHhiOSwweDA0LDB4MmEsMHhjOSwweDBiLDB4YjUsMHg4MCwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjY0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhjYywweDAwLDB4ODEsMHg2NCwweDI4LDB4YzQgfSB9LAoreyAgMTYsIDB4YjY1MCwgMCwgezB4MDksMHhiMiwweDBhLDB4MGMsMHhmMCwweGEzLDB4MjAsMHgyMCwweGM4LDB4MGIsMHgzMiwweDAyLDB4ZWMsMHgwMiwweDgzLDB4MDggfSB9LAoreyAgMTYsIDB4YjY2MCwgMCwgezB4MmMsMHhjOCwweDA5LDB4MzIsMHgwMiwweGNjLDB4ODAsMHhhYiwweGEwLDB4MjAsMHhjOCwweDBiLDB4MzIsMHgwMCwweGIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjY3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDEwLDB4ODksMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YjY4MCwgMCwgezB4MDgsMHhiMiwweDEyLDB4MmMsMHgwMiwweDBiLDB4MDAsMHgyMiwweGMwLDB4MGIsMHhiOCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YjY5MCwgMCwgezB4MjYsMHhjMCwweDRiLDB4YjAsMHg0NiwweGVjLDB4MDAsMHhiOSwweDAwLDB4MGEsMHhjMCwweDBiLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQwLDB4MTUsMHhlYywweDEwLDB4YzksMHhlMCwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4YjZiMCwgMCwgezB4MGQsMHgyOCwweDAzLDB4MmMsMHgwMCwweGViLDB4MTAsMHgzMiwweGMwLDB4MGYsMHg4MiwweDAzLDB4YzQsMHgwMCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZjMCwgMCwgezB4M2UsMHhjMSwweDBmLDB4YjAsMHgwNiwweGVjLDB4MDgsMHhlOSwweDAwLDB4YjIsMHhjMCwweDBmLDB4YjAsMHgxMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg5YywweDAwLDB4ZjUsMHhhMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YjZlMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZmMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA0LDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjcwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MTAsMHhhYywweDAwLDB4ZjksMHg0MCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4YjcxMCwgMCwgezB4MGQsMHhiNCwweDAzLDB4MmMsMHgwMCwweGRiLDB4NDAsMHgzZSwweGMwLDB4MmMsMHg4MCwweDAzLDB4NjQsMHgwOCwweGZiLDB4MTAgfSB9LAoreyAgMTYsIDB4YjcyMCwgMCwgezB4M2UsMHhjNiwweDhmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDgwLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwYiwweDE0LDB4MDQgfSB9LAoreyAgMTYsIDB4YjczMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzZSwweDIwLDB4ZTksMHhjOCwweDM3LDB4ZDQgfSB9LAoreyAgMTYsIDB4Yjc0MCwgMCwgezB4NDgsMHhhYSwweDIyLDB4MWMsMHgwMCwweDhiLDB4MDAsMHg2ZiwweGUwLDB4MDgsMHg4NSwweDgyLDB4ZWQsMHg0MCwweGJiLDB4ODQgfSB9LAoreyAgMTYsIDB4Yjc1MCwgMCwgezB4MmYsMHhjMCwweDRiLDB4YjgsMHgwMywweGFkLDB4NDAsMHhiMywweDAwLDB4MjMsMHhkNCwweDA4LDB4ZjcsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg0YywweDAwLDB4YjEsMHg2NCwweGE0LDB4YzAgfSB9LAoreyAgMTYsIDB4Yjc3MCwgMCwgezB4MDksMHgyMCwweDBhLDB4MGMsMHgwNCwweGI4LDB4MDAsMHg2YywweGMwLDB4MDgsMHgzOCwweDAyLDB4YzgsMHg0MCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4Yjc4MCwgMCwgezB4MmMsMHhkMSwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MDEsMHgxZSwweDAwLDB4YTUsMHg4MCwweDI1LDB4ZTAgfSB9LAoreyAgMTYsIDB4YjdhMCwgMCwgezB4ODgsMHgzYSwweDEyLDB4MWUsMHgwMCwweGE2LDB4OTAsMHgyZCwweGUyLDB4MDgsMHg3OSwweDAyLDB4ZGEsMHgwMCwweGI3LDB4ODIgfSB9LAoreyAgMTYsIDB4YjdiMCwgMCwgezB4MmQsMHhlMCwweDAzLDB4NzgsMHg4MiwweDllLDB4MDAsMHhiYywweGMxLDB4MjksMHhlMCwweDA4LDB4NzgsMHgwMiwweDJjLDB4MTAgfSB9LAoreyAgMTYsIDB4YjdjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ5LDB4MDgsMHgwYywweDAwLDB4ZjMsMHgwMCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4YjdkMCwgMCwgezB4MGQsMHgzZSwweDAzLDB4MGMsMHgwMCwweGYwLDB4NDAsMHgyZSwweGMwLDB4MGMsMHgzMCwweDQzLDB4YzgsMHgwMCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjdlMCwgMCwgezB4M2MsMHhjMCwweDA3LDB4MzAsMHgwMywweGNjLDB4ODAsMHhmMiwweDAwLDB4MzgsMHhjMCwweDBjLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YjdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTksMHhiZCwweDIwLDB4ZjcsMHgwMCwweDNmLDB4YzIgfSB9LAoreyAgMTYsIDB4YjgwMCwgMCwgezB4MGYsMHhmMSwweDBiLDB4ZGMsMHgyMCwweGRlLDB4MDQsMHgzZiwweGQyLDB4MDcsMHhmMCwweDEzLDB4ZjgsMHg0MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjgxMCwgMCwgezB4M2YsMHhjMCwweDA3LDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4MzcsMHhjMCwweDBmLDB4NzAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YjgyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MDUsMHhjZiwweDAwLDB4ZGMsMHgwMCwweDNlLDB4Y2EgfSB9LAoreyAgMTYsIDB4YjgzMCwgMCwgezB4MGYsMHhhMCwweDAwLDB4YWMsMHg5MiwweGM5LDB4MDAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDExLDB4YTQsMHgwOCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjg0MCwgMCwgezB4MmUsMHhjMCwweDRmLDB4YjAsMHgyMywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHhjNCwweDBmLDB4YjAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjg1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4OTEsMHg5YywweDAwLDB4ODQsMHgwMCwweDAxLDB4YzAgfSB9LAoreyAgMTYsIDB4Yjg2MCwgMCwgezB4NGIsMHg3MCwweDIyLDB4MWMsMHhjMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4NGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweGI3LDB4MDEgfSB9LAoreyAgMTYsIDB4Yjg3MCwgMCwgezB4MjUsMHhkOCwweDBiLDB4NzAsMHgyMiwweGRjLDB4MDAsMHhiNiwweDAwLDB4MmQsMHhjMCwweDBiLDB4NzIsMHgyMiwweGYyLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjg4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDgwLDB4OTcsMHg4MCwweGE5LDB4ZTAgfSB9LAoreyAgMTYsIDB4Yjg5MCwgMCwgezB4MGIsMHhmOCwweDAyLDB4Y2UsMHgwOCwweDg1LDB4ODAsMHgyOSwweGU4LDB4MGIsMHhmYywweDAyLDB4MTcsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4YjhhMCwgMCwgezB4MmQsMHhlMCwweDhiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNCwweGMwLDB4MmQsMHhlOCwweDBiLDB4NzksMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjhiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwOCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4YjhjMCwgMCwgezB4OGIsMHgzYywweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwLDB4MWIsMHgzYywweDBhLDB4MGYsMHgyOSwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjhkMCwgMCwgezB4MjQsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDgwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjhlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZGUsMHgwMCwweDNhLDB4ODAgfSB9LAoreyAgMTYsIDB4YjhmMCwgMCwgezB4MGYsMHhlYSwweDAyLDB4ZTgsMHgwMCwweGNlLDB4MDAsMHgzYSwweDgwLDB4MGYsMHhlMCwweDAzLDB4MzgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjkwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmZSwweDAwLDB4M2UsMHg4MCwweDBiLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjkxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwNCwweGJhLDB4MDEgfSB9LAoreyAgMTYsIDB4YjkyMCwgMCwgezB4MGYsMHg4MiwweDBiLDB4ODAsMHgwNCwweGY4LDB4ODAsMHgzZSwweDAwLDB4MGYsMHg4NiwweDAzLDB4NjAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjkzMCwgMCwgezB4MzYsMHgwMCwweDBmLDB4ODAsMHgyMywweGUxLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAxLDB4ZjksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4Yjk1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweDQ5LDB4MDAsMHgzMiwweDQwLDB4MGIsMHg5MCwweDAzLDB4MjQsMHgwMCwweDQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk2MCwgMCwgezB4M2MsMHg0MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg2MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjk3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MCwweGEyLDB4NjQgfSB9LAoreyAgMTYsIDB4Yjk4MCwgMCwgezB4MGIsMHgxOCwweDAyLDB4MjUsMHgwMCwweGQxLDB4NTAsMHgzNiwweDUwLDB4NGUsMHg5MCwweDBhLDB4MjQsMHgwMiwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4Yjk5MCwgMCwgezB4M2EsMHg1MSwweDA4LDB4OTQsMHgwMiwweGU1LDB4MjIsMHg4OSwweDQ0LDB4MmUsMHg2MCwweDI4LDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjlhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YjEsMHgwOCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjliMCwgMCwgezB4NGIsMHg5MiwweDgyLDB4YTUsMHgwMCwweGE5LDB4MDgsMHgyMiwweDUwLDB4MGEsMHgxMCwweDAyLDB4MGMsMHgwMCwweGE5LDB4NDAgfSB9LAoreyAgMTYsIDB4YjljMCwgMCwgezB4NmUsMHg1MCwweDBiLDB4OTQsMHgwMiwweGM0LDB4MDQsMHg4OSwweDQ0LDB4NmMsMHg0OCwweDg4LDB4MTAsMHgwMiwweDQ2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjlkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwNCwweDAwLDB4YjEsMHg0MCwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjllMCwgMCwgezB4MWIsMHgxNCwweDBhLDB4MDQsMHgwMCwweGI5LDB4MDAsMHgyNCwweDQwLDB4MWEsMHgxMCwweDIyLDB4MDQsMHgwMCwweGExLDB4MDAgfSB9LAoreyAgMTYsIDB4YjlmMCwgMCwgezB4MjgsMHg0MCwweDBhLDB4MTAsMHgxMiwweGM0LDB4MDAsMHg4MSwweDAyLDB4NmMsMHg0MCwweDA4LDB4MTIsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDA4LDB4YjAsMHgwMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmExMCwgMCwgezB4NGYsMHg4MCwweDAyLDB4YTEsMHg1MCwweGUwLDB4NTAsMHgzMiwweDE0LDB4MGUsMHhhNSwweDIzLDB4MjEsMHg0MCwweGU4LDB4NTAgfSB9LAoreyAgMTYsIDB4YmEyMCwgMCwgezB4M2UsMHgxNCwweDBmLDB4ODUsMHgwMywweGUxLDB4NDAsMHhjOCwweDUwLDB4MWUsMHgxNCwweDBjLDB4ODUsMHg0MywweDZlLDB4MDMgfSB9LAoreyAgMTYsIDB4YmEzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ4LDB4MTksMHhlNSwweDAwLDB4ZmQsMHg0MCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4YmE0MCwgMCwgezB4MGYsMHg3NCwweDAzLDB4YTUsMHgwMCwweDVkLDB4MDAsMHgzZSwweDUwLDB4MGEsMHg1MCwweDEzLDB4ZjQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmE1MCwgMCwgezB4M2EsMHg1MCwweDBkLDB4OTAsMHgxMywweGU0LDB4MDAsMHhmZiwweDAwLDB4M2UsMHg1MCwweDBmLDB4OTEsMHgwMywweGE2LDB4MDYgfSB9LAoreyAgMTYsIDB4YmE2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDkwLDB4YmQsMHhlOCwweDIzLDB4NmIgfSB9LAoreyAgMTYsIDB4YmE3MCwgMCwgezB4MGIsMHhkYSwweDBiLDB4MzYsMHg4MCwweGM5LDB4MDAsMHgzMiwweDY4LDB4NDYsMHg5MCwweDQzLDB4ZTQsMHgwMCwweDQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmE4MCwgMCwgezB4MzIsMHg2OCwweDBjLDB4OTAsMHgwMywweDI0LDB4NDAsMHhmOSwweDAwLDB4MzIsMHg2MCwweDBjLDB4OWMsMHgwMywweGM2LDB4MDEgfSB9LAoreyAgMTYsIDB4YmE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDc4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHhlMCwweGEyLDB4MTEgfSB9LAoreyAgMTYsIDB4YmFhMCwgMCwgezB4MGIsMHg4ZSwweDBhLDB4MjMsMHgyMiwweDg4LDB4ODAsMHgyYSwweDMxLDB4MjgsMHg4OCwweDAyLDB4NjIsMHgwMCwweDg4LDB4ODAgfSB9LAoreyAgMTYsIDB4YmFiMCwgMCwgezB4YTIsMHgzMCwweDI4LDB4ODgsMHg4YSwweDIyLDB4MDAsMHhiOCwweGE4LDB4YTIsMHgzOSwweDA4LDB4Y2EsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YmFjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNSwweDA4LDB4MjEsMHgwMCwweDAwLDB4NDAgfSB9LAoreyAgMTYsIDB4YmFkMCwgMCwgezB4MDMsMHgxNCwweDgyLDB4ODUsMHg4MCwweGFkLDB4MDgsMHgyMSwweDUyLDB4OTgsMHg1MCwweDgyLDB4MzQsMHgyMywweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4YmFlMCwgMCwgezB4MjEsMHg1MiwweDA4LDB4NTAsMHgwNiwweDU0LDB4MDAsMHhiNSwweDIwLDB4MjEsMHg1YSwweDA5LDB4NTQsMHgwMiwweGQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmFmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4YjksMHg2MSwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YmIwMCwgMCwgezB4MGIsMHg5MCwweDA2LDB4MDQsMHgwMCwweGFkLDB4MDAsMHg2OSwweDQwLDB4MDgsMHhkMCwweDAyLDB4NzQsMHgwMCwweDg1LDB4MDAgfSB9LAoreyAgMTYsIDB4YmIxMCwgMCwgezB4MDEsMHg0MCwweDAwLDB4NzAsMHgwNiwweDc0LDB4MDQsMHhiNSwweDAwLDB4MjMsMHg0MCwweDA5LDB4ZDAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YmIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTQsMHhhNCwweDAwLDB4ZTksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YmIzMCwgMCwgezB4NGYsMHg5NSwweDBiLDB4YTQsMHgwMCwweGU5LDB4MDAsMHgzMiwweDQwLDB4OGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmI0MCwgMCwgezB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDY0LDB4MDgsMHhmOSwweDAwLDB4MzIsMHg0MCwweDNkLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDEsMHhhNCwweDA4LDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YmI2MCwgMCwgezB4NGYsMHg5MCwweDhiLDB4ZTQsMHgwNCwweGQ5LDB4MDEsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMCwweGQ5LDB4MDEgfSB9LAoreyAgMTYsIDB4YmI3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBlLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHg0MCwweDM2LDB4MjAgfSB9LAoreyAgMTYsIDB4YmI5MCwgMCwgezB4MTcsMHg4NCwweDAzLDB4MjAsMHgyMSwweGM4LDB4MDAsMHg3ZSwweDAyLDB4MmMsMHg4MCwweDQzLDB4MjAsMHgwMCwweGU4LDB4MDIgfSB9LAoreyAgMTYsIDB4YmJhMCwgMCwgezB4M2UsMHgwMSwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDQwLDB4MWUsMHgwMCwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyYSwweDg4LDB4YjYsMHgwMiwweDIzLDB4YTAgfSB9LAoreyAgMTYsIDB4YmJjMCwgMCwgezB4MGIsMHhlYywweDQyLDB4MmIsMHgwMCwweGQyLDB4ODAsMHg2ZSwweGIxLDB4MDgsMHhhMCwweDIyLDB4MDgsMHgwMCwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmJkMCwgMCwgezB4M2EsMHg4MCwweDlmLDB4YTAsMHgwMywweGE4LDB4MDAsMHg4YSwweDA0LDB4MmUsMHg4MCwweDBiLDB4YTgsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmJlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjIsMHgwMCwweGE0LDB4ZTEgfSB9LAoreyAgMTYsIDB4YmJmMCwgMCwgezB4OGIsMHhiNCwweDMyLDB4NDcsMHg0NSwweDgzLDB4OTAsMHgyYywweGY0LDB4NGIsMHgzOCwweDEyLDB4MGUsMHg0NCwweGEzLDB4MDEgfSB9LAoreyAgMTYsIDB4YmMwMCwgMCwgezB4MmMsMHhjMCwweDRiLDB4MzAsMHgwMiwweGNlLDB4MDAsMHg5MywweDAwLDB4NmMsMHhjMCwweDBiLDB4MzgsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmMxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDAwLDB4YjcsMHg0NCwweDIxLDB4YzIgfSB9LAoreyAgMTYsIDB4YmMyMCwgMCwgezB4MGIsMHg1NCwweDAyLDB4NTQsMHgwNSwweDg3LDB4MDAsMHgyYywweDQwLDB4OWIsMHg2YywweDAyLDB4MTgsMHgxMCwweGE3LDB4MDQgfSB9LAoreyAgMTYsIDB4YmMzMCwgMCwgezB4MjksMHhjMCwweDBhLDB4NzAsMHgwMiwweDliLDB4MDAsMHg5NywweDA0LDB4MGQsMHg4MCwweDBiLDB4NjAsMHg4MiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4YmM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjMsMHg4MCwweDM1LDB4ZTAgfSB9LAoreyAgMTYsIDB4YmM1MCwgMCwgezB4MGIsMHgzOCwweDAyLDB4NTIsMHgxMCwweDg0LDB4ODAsMHgyZCwweGEwLDB4MGYsMHhmOCwweDBiLDB4MWUsMHgwMCwweGU2LDB4ODAgfSB9LAoreyAgMTYsIDB4YmM2MCwgMCwgezB4MWQsMHhhMCwweDBiLDB4NjgsMHgwMywweGZlLDB4MDIsMHhkNiwweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4YmM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBhLDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzEgfSB9LAoreyAgMTYsIDB4YmM4MCwgMCwgezB4OGIsMHg5MCwweDBiLDB4ODAsMHgwYSwweGI4LDB4MDEsMHgyZSwweDAwLDB4MGMsMHhiMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmM5MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YTAsMHg0MywweGVjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTYsMHgyMywweGMyLDB4MDIgfSB9LAoreyAgMTYsIDB4YmNhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmUsMHg4MCwweDMzLDB4MjAgfSB9LAoreyAgMTYsIDB4YmNiMCwgMCwgezB4NGUsMHhjOSwweDEyLDB4ZjYsMHg1MCwweGVmLDB4OTAsMHgzZiwweGUwLDB4MGMsMHgxOSwweDAwLDB4YjYsMHg0MiwweGNmLDB4MjEgfSB9LAoreyAgMTYsIDB4YmNjMCwgMCwgezB4M2YsMHhlMCwweDBlLDB4ZjksMHgwMiwweGU2LDB4YzAsMHhmZiwweDgwLDB4M2YsMHhlMCwweDRjLDB4ZGMsMHgwMywweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmNkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MTEsMHg5NCwweDAwLDB4YjcsMHgwMCwweDgxLDB4NDAgfSB9LAoreyAgMTYsIDB4YmNlMCwgMCwgezB4MDgsMHgwMywweDAyLDB4MTQsMHhjNCwweDg3LDB4MDEsMHgyZCwweGM4LDB4MDgsMHg2YSwweDEyLDB4MzgsMHg0MCwweDg3LDB4MDIgfSB9LAoreyAgMTYsIDB4YmNmMCwgMCwgezB4MmQsMHhjMCwweDA4LDB4NzEsMHgxMiwweGQyLDB4ODAsMHhiNywweDAwLDB4MmQsMHg4MCwweDA4LDB4NjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmQwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgxMCwweDIxLDB4ODAgfSB9LAoreyAgMTYsIDB4YmQxMCwgMCwgezB4MDgsMHhmNCwweDEyLDB4OTQsMHgwNCwweGE2LDB4MDAsMHgyYywweGMwLDB4MTgsMHhkMiwweDAyLDB4MTQsMHg0OCwweDg2LDB4MTAgfSB9LAoreyAgMTYsIDB4YmQyMCwgMCwgezB4MmQsMHg4MCwweDBhLDB4NjEsMHgzMiwweGQ0LDB4MDAsMHhiNiwweDE4LDB4MmQsMHhjNCwweDA4LDB4NTgsMHgwMiwweDAwLDB4MTAgfSB9LAoreyAgMTYsIDB4YmQzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjNCwweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmQ0MCwgMCwgezB4NDAsMHhiMCwweDIyLDB4MDQsMHgwMCwweDgyLDB4ODEsMHgwYywweGMwLDB4MDgsMHgzMCwweDBhLDB4MGEsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ1MCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YTAsMHgwMiwweGM0LDB4MDAsMHhiYiwweDAwLDB4MmUsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmQ2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZmIsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmQ3MCwgMCwgezB4MjQsMHg5NCwweDIzLDB4YWMsMHgxMCwweGViLDB4YTAsMHgwZSwweGMwLDB4MGMsMHhiMCwweDAyLDB4MmUsMHgyMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ4MCwgMCwgezB4MmUsMHg0MCwweDBlLDB4OTAsMHgwMywweGVjLDB4MDAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDZjLDB4YTAsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhjYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YmRhMCwgMCwgezB4ODksMHg5MCwweDAzLDB4MmMsMHgwMCwweGZiLDB4MDIsMHgzZSwweDQwLDB4NGYsMHhhMCwweDAzLDB4NmQsMHgwMSwweGZiLDB4NDEgfSB9LAoreyAgMTYsIDB4YmRiMCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjQsMHgwMywweGU4LDB4MDAsMHhmYiwweDIwLDB4M2UsMHg1MCwweDBmLDB4YTQsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4YzMsMHgyMCwweGIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YmRkMCwgMCwgezB4MGQsMHhkMCwweDAzLDB4MzgsMHgwMCwweGNkLDB4MDAsMHgzZiwweDgwLDB4MGQsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDIgfSB9LAoreyAgMTYsIDB4YmRlMCwgMCwgezB4MzYsMHgwMCwweDBjLDB4ZDAsMHgwMywweDNmLDB4MDgsMHhmYywweDA0LDB4MTIsMHhjMCwweDBjLDB4YTAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4YmRmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2YywweDAyLDB4OGIsMHhjOCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YmUwMCwgMCwgezB4MDgsMHg5OCwweDBhLDB4MmEsMHg0MCwweDg5LDB4MjAsMHgyZSwweDAxLDB4OGUsMHhiMCwweDEyLDB4ZWMsMHg4MCwweGJiLDB4ZjAgfSB9LAoreyAgMTYsIDB4YmUxMCwgMCwgezB4MjIsMHhlNSwweDA4LDB4YmQsMHgwMiwweDJlLDB4MDAsMHhiYiwweDkwLDB4MjIsMHhlZCwweDA4LDB4YTIsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmUyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMSwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmUzMCwgMCwgezB4NDksMHhhOCwweDFlLDB4MDQsMHgwMCwweDhiLDB4MDEsMHgyZSwweGMwLDB4NDksMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmU0MCwgMCwgezB4MjIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MmEsMHg0MCwweDA4LDB4ODAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4ODEsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YmU2MCwgMCwgezB4MDgsMHgyMCwweDAyLDB4MDQsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgyMCwweDQyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmU3MCwgMCwgezB4MjAsMHhjMCwweDAyLDB4MzAsMHgwMiwweDA4LDB4ODQsMHhiMywweDA0LDB4MDgsMHg0MCwweDA4LDB4MjAsMHgwMiwweGMyLDB4MTEgfSB9LAoreyAgMTYsIDB4YmU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4OGIsMHgwMCwweGIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YmU5MCwgMCwgezB4MGQsMHhiMSwweDAzLDB4MjQsMHgwMiwweGNiLDB4MDEsMHgzZSwweGMwLDB4NGQsMHg5MCwweDQzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmVhMCwgMCwgezB4YjIsMHgwMCwweDJlLDB4OTAsMHgwYiwweDJjLDB4ODAsMHhmOCwweDAwLDB4YmEsMHhjMCwweDJjLDB4ODAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4YmViMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmNCwweDAwLDB4N2QsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YmVjMCwgMCwgezB4MGYsMHg3MiwweDAzLDB4ZDQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGUsMHhmMSwweDQ3LDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YmVkMCwgMCwgezB4M2IsMHhjMCwweDBkLDB4ZjAsMHgxMywweGZjLDB4NTAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YmVlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweGM0LDB4Y2MsMHgzMywweDNmLDB4MDQgfSB9LAoreyAgMTYsIDB4YmVmMCwgMCwgezB4MmMsMHhmNiwweDAzLDB4MzgsMHg2MCwweGNjLDB4OTAsMHhiMywweDIwLDB4MGYsMHhmMSwweDIzLDB4ZjAsMHg2MCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4YmYwMCwgMCwgezB4MjMsMHhjOCwweDBjLDB4ZjIsMHg4YSwweDNjLDB4ODEsMHhkZiwweDMwLDB4M2YsMHg2NCwweDBjLDB4ZDgsMHgwMywweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4YmYxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMCwweGMyLDB4OGEsMHgzMCwweDJlLDB4MTggfSB9LAoreyAgMTYsIDB4YmYyMCwgMCwgezB4MDgsMHhmNSwweDMwLDB4YTUsMHg5NCwweDU4LDB4MjIsMHgyMiwweDIxLDB4NGIsMHhmMywweDAyLDB4ZTEsMHgwMCwweDlmLDB4NzAgfSB9LAoreyAgMTYsIDB4YmYzMCwgMCwgezB4MmIsMHhlNCwweDBhLDB4ZjQsMHgxMiwweDFkLDB4NDAsMHhhZiwweDcyLDB4MmMsMHg0OSwweDJmLDB4MzAsMHg4MiwweGEwLDB4MDYgfSB9LAoreyAgMTYsIDB4YmY0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDgwLDB4ODAsMHhhMCwweDJjLDB4OTggfSB9LAoreyAgMTYsIDB4YmY1MCwgMCwgezB4MDgsMHgzMiwweDIyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyOCwweDAwLDB4MDMsMHgzMiwweDAyLDB4YzAsMHg4NCwweGIzLDB4MGMgfSB9LAoreyAgMTYsIDB4YmY2MCwgMCwgezB4MjAsMHhjMCwweDU4LDB4MzIsMHg5MiwweDhjLDB4MzAsMHhhMywweDIwLDB4MmUsMHhjMCwweDQ4LDB4MTIsMHg0MiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmY3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOCwweDAwLDB4OGIsMHgwMCwweDJlLDB4MjAgfSB9LAoreyAgMTYsIDB4YmY4MCwgMCwgezB4MDgsMHhiMCwweDBhLDB4MjAsMHgwMSwweDk4LDB4MDAsMHgyYSwweDIyLDB4MGIsMHhiMCwweDAyLDB4ZTYsMHgwMCwweDliLDB4MDAgfSB9LAoreyAgMTYsIDB4YmY5MCwgMCwgezB4MjIsMHhjMCwweDBhLDB4YjAsMHgxMiwweGFjLDB4MDQsMHhhYiwweDAwLDB4MmUsMHhjMCwweDAzLDB4YjAsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlNSwweDAwLDB4YzgsMHgwMCwweDNlLDB4YjAgfSB9LAoreyAgMTYsIDB4YmZiMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MjksMHgwMCwweGM4LDB4MDAsMHgzYSwweDIwLDB4NGYsMHhiMCwweDAzLDB4ZTIsMHgyMCwweGZiLDB4MDEgfSB9LAoreyAgMTYsIDB4YmZjMCwgMCwgezB4YjAsMHhjMCwweDBjLDB4YjAsMHgwMywweDJjLDB4MDAsMHhmYiwweDAyLDB4M2MsMHg0MSwweDBjLDB4OTAsMHg0MywweDQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhhMiwweDgwLDB4ZmUsMHg0MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZlMCwgMCwgezB4MGYsMHhmMCwweDYzLDB4ZWMsMHgwMCwweGJmLDB4YzQsMHgxNywweDQyLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZmMCwgMCwgezB4MWYsMHhjMSwweDBmLDB4YjAsMHgwMywweDVjLDB4MDAsMHhmYiwweDAwLDB4M2YsMHg0MCwweDRmLDB4ZjAsMHgwMCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzAwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNSwweDAyLDB4YzgsMHgwMCwweDNlLDB4OTAgfSB9LAoreyAgMTYsIDB4YzAxMCwgMCwgezB4MmMsMHhiMCwweDBiLDB4MDEsMHgwNiwweGNiLDB4MDEsMHgzZSwweDUwLDB4NWYsMHhiMCwweDEzLDB4MjEsMHgxMCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzAyMCwgMCwgezB4N2UsMHhjMCwweDBjLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhjYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzAzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyOCwweDAxLDB4OGIsMHhkMCwweDJjLDB4MzQgfSB9LAoreyAgMTYsIDB4YzA0MCwgMCwgezB4NDgsMHhmZiwweDAyLDB4MzAsMHgwMCwweGFhLDB4MDQsMHgyZSwweDY5LDB4MGYsMHhmMCwweDAzLDB4NjgsMHgxMCwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA1MCwgMCwgezB4MmYsMHhkNCwweDBkLDB4ZjAsMHgwMiwweDNlLDB4MDAsMHg1ZiwweDA0LDB4YjYsMHhjMCwweDA4LDB4YjAsMHgwMywweDcyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2OSwweDkwLDB4ODEsMHg4MCwweDJjLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA3MCwgMCwgezB4NDgsMHhiOCwweDAyLDB4MDgsMHgwOSwweDk5LDB4MDAsMHg0YywweGIwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA4MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4YjAsMHg0MCwweDBjLDB4NDAsMHg4MywweDAwLDB4MDAsMHg0MCwweDBhLDB4OTAsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDAwLDB4ODQsMHg4OCwweDJkLDB4ZTQgfSB9LAoreyAgMTYsIDB4YzBhMCwgMCwgezB4NDgsMHgzOSwweDAyLDB4MTYsMHgwMCwweGI0LDB4ODAsMHgyZCwweGUwLDB4MGEsMHg3YiwweDA2LDB4NWUsMHgwMCwweDk3LDB4ODAgfSB9LAoreyAgMTYsIDB4YzBiMCwgMCwgezB4MmQsMHhlMiwweDA5LDB4NzgsMHgwMiwweDFlLDB4OTAsMHg5NywweDgwLDB4MjUsMHg2NCwweDhhLDB4NzgsMHgwMiwweDQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzBjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwZCwweDAwLDB4ODEsMHgxMCwweDJjLDB4OTYgfSB9LAoreyAgMTYsIDB4YzBkMCwgMCwgezB4MDgsMHgzMSwweDIzLDB4MGMsMHgwMCwweDkwLDB4MjAsMHgzYywweGM0LDB4MWIsMHhiOCwweDAyLDB4MDgsMHg0MCwweGMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzBlMCwgMCwgezB4MmMsMHhjNCwweDBkLDB4MzAsMHgwMywweDBlLDB4NDAsMHhjMywweDEwLDB4MzAsMHhjMCwweDRlLDB4MTAsMHgwNywweDFhLDB4MTIgfSB9LAoreyAgMTYsIDB4YzBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4N2QsMHgwNSwweDNmLDB4YzUgfSB9LAoreyAgMTYsIDB4YzEwMCwgMCwgezB4MGYsMHhiMSwweDBiLDB4ZjQsMHgwMCwweGVmLDB4MDAsMHgxZiwweDQ1LDB4MGYsMHhmMCwweDQzLDB4ZmMsMHgwMSwweGZmLDB4NDAgfSB9LAoreyAgMTYsIDB4YzExMCwgMCwgezB4M2QsMHhjNCwweDFmLDB4ZjAsMHgwNiwweGZjLDB4MTAsMHhmZiwweDAwLDB4M2IsMHhjMSwweDJkLDB4ZjEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YzEyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDA0LDB4Y2IsMHgwNCwweDNlLDB4YTAgfSB9LAoreyAgMTYsIDB4YzEzMCwgMCwgezB4NDQsMHhiNiwweDAzLDB4MjgsMHgwNCwweGNiLDB4ODAsMHgzMiwweDgwLDB4MGYsMHhiMywweDkzLDB4NjAsMHgwOCwweGZiLDB4MjAgfSB9LAoreyAgMTYsIDB4YzE0MCwgMCwgezB4M2UsMHhkMiwweDFmLDB4YjMsMHgwMywweDJkLDB4ODAsMHhmYiwweDYxLDB4N2UsMHg0MCwweDhjLDB4OTgsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzE1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg4NCwweDBjLDB4ODYsMHgwNSwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YzE2MCwgMCwgezB4MDgsMHhmNCwweDgyLDB4OGMsMHg5MCwweDg1LDB4MDAsMHhhMSwweGMwLDB4MGIsMHhmMCwweDAyLDB4NWMsMHgwMCwweDM3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzE3MCwgMCwgezB4MmQsMHhkMCwweDBiLDB4NzEsMHgwMiwweDFjLDB4YzgsMHhiNywweDQ4LDB4MmQsMHg0MCwweDBhLDB4NzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4YTEgfSB9LAoreyAgMTYsIDB4YzE5MCwgMCwgezB4NjAsMHg3OCwweDRhLDB4MTYsMHhkMCwweGE3LDB4ODAsMHgyOSwweGUwLDB4MGIsMHg3OCwweDUyLDB4OTYsMHgwMSwweGI3LDB4OTAgfSB9LAoreyAgMTYsIDB4YzFhMCwgMCwgezB4MmQsMHhlOCwweDBiLDB4N2EsMHgyMiwweDVlLDB4NDAsMHhiNywweGEwLDB4MmYsMHhlMSwweDQ4LDB4NTAsMHgyMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDEwLDB4ODMsMHg4NCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzFjMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4YTQsMHgxMCwweDgzLDB4Y2IsMHgyOCwweGUwLDB4MGIsMHgzMCwweDJhLDB4NGYsMHg0MCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFkMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MTAsMHhiMywweDAyLDB4MmMsMHhjMCwweGFhLDB4MzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4Y2UsMHhhMCwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzFmMCwgMCwgezB4NGMsMHhhMCwweDJiLDB4M2EsMHgwMCwweGNlLDB4NDAsMHgzYiwweGI4LDB4MGYsMHhhMCwweDAzLDB4YjksMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzIwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDY4LDB4MDAsMHhmYSwweDAwLDB4N2UsMHg4MCwweDFjLDB4YTAsMHgwYiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzIxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAyLDB4ZjgsMHgwMCwweDNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YzIyMCwgMCwgezB4OGYsMHgwMCwweDAzLDB4ZTAsMHg0YSwweGY4LDB4MTAsMHgyNiwweDE4LDB4MGYsMHg4MCwweDAzLDB4YTAsMHg4MCwweGY4LDB4MDIgfSB9LAoreyAgMTYsIDB4YzIzMCwgMCwgezB4M2UsMHgwMCwweDhmLDB4MDAsMHgwYiwweGEwLDB4MDAsMHhmOCwweDAyLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgxMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzI0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDIwLDB4YzksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzI1MCwgMCwgezB4NGQsMHg5OSwweDAzLDB4MjQsMHgwMCwweGM5LDB4MDIsMHgzZSwweDY4LDB4MGYsMHg5MCwweDAyLDB4MjQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzI2MCwgMCwgezB4MzAsMHg0MCwweDhjLDB4OTAsMHgwMywweDA0LDB4NDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzI3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDIwLDB4ODksMHgwNiwweDIyLDB4NTAgfSB9LAoreyAgMTYsIDB4YzI4MCwgMCwgezB4OGIsMHg5YywweGMyLDB4MjQsMHgwMCwweGQ5LDB4MDEsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQyLDB4MjQsMHgwOCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4YzI5MCwgMCwgezB4MjIsMHg0NiwweDBkLDB4OTAsMHgwYSwweDI2LDB4MDIsMHg4OSwweDAwLDB4MmMsMHg0MCwweDBhLDB4MTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzJhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgwNiwweDAwLDB4OTEsMHg0MCwweDQyLDB4NzAgfSB9LAoreyAgMTYsIDB4YzJiMCwgMCwgezB4MGIsMHg5MCwweDEyLDB4MmMsMHgwMiwweDhiLDB4MDAsMHgyZSwweDQwLDB4MGIsMHgxMCwweDIyLDB4ZTQsMHgxMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4YzJjMCwgMCwgezB4YTIsMHg0MCwweDQ4LDB4OTAsMHgxMiwweDI0LDB4MDgsMHg5OSwweDAyLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzJkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDkyLDB4OTEsMHgyMCwweGUwLDB4NDggfSB9LAoreyAgMTYsIDB4YzJlMCwgMCwgezB4MGIsMHgxMiwweDAyLDB4MDQsMHgwMiwweDkxLDB4MTAsMHgyYywweGMwLDB4MGIsMHgxMCwweDA2LDB4ODQsMHhjMCwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4YzJmMCwgMCwgezB4MjAsMHg0OCwweDg5LDB4MTEsMHgwMiwweDA1LDB4ODAsMHg5MSwweDQwLDB4MmUsMHg0NCwweDJhLDB4OTQsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDMwLDB4MTQgfSB9LAoreyAgMTYsIDB4YzMxMCwgMCwgezB4MGYsMHg4NSwweDBiLDB4MjEsMHhlMCwweDgwLDB4NDAsMHgzZSwweDAwLDB4MGYsMHg4NywweDhiLDB4ZTEsMHgwYywweGY4LDB4NmMgfSB9LAoreyAgMTYsIDB4YzMyMCwgMCwgezB4MzIsMHgwMCwweDg0LDB4MDYsMHg4MywweDIwLDB4MDQsMHhkOCwweDI4LDB4M2UsMHgxMCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YzMzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4YWQsMHgxMCwweDNmLDB4NDUgfSB9LAoreyAgMTYsIDB4YzM0MCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZmMsMHgxOCwweDdkLDB4MjAsMHgxZiwweDQxLDB4MGYsMHg5MCwweDAzLDB4NzQsMHhjMCwweGY5LDB4MjEgfSB9LAoreyAgMTYsIDB4YzM1MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4OTIsMHgwMSwweGU0LDB4NDAsMHhlOSwweDAwLDB4M2QsMHg0OCwweDRmLDB4ZDAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YzM2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNywweDgwLDB4ZmQsMHhlMCwweDMzLDB4NzAgfSB9LAoreyAgMTYsIDB4YzM3MCwgMCwgezB4MGMsMHhkYSwweDAzLDB4MjYsMHgyMCwweGM5LDB4NDAsMHgzMSwweDQwLDB4MGUsMHg5YSwweDAzLDB4MjQsMHgwMCwweGY5LDB4ODAgfSB9LAoreyAgMTYsIDB4YzM4MCwgMCwgezB4M2IsMHg2MCwweDBmLDB4OWMsMHg4MywweDM2LDB4YTAsMHhmOSwweGExLDB4YjAsMHg0MCwweDBmLDB4OTEsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzM5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMiwweDkwLDB4YjgsMHhhMCwweDIyLDB4MjggfSB9LAoreyAgMTYsIDB4YzNhMCwgMCwgezB4MjgsMHg4OCwweDBhLDB4MjIsMHgwMiwweDg4LDB4YTAsMHgyMiwweDAwLDB4MDgsMHg4OCwweDAyLDB4YzIsMHg4MCwweGI4LDB4ODggfSB9LAoreyAgMTYsIDB4YzNiMCwgMCwgezB4MjIsMHgwNCwweDBiLDB4OGUsMHgwMywweDIyLDB4ODAsMHhiOCwweGQwLDB4MmEsMHgyMCwweDBiLDB4ODgsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YzNjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDgwLDB4YjEsMHg2MSwweDAwLDB4NTggfSB9LAoreyAgMTYsIDB4YzNkMCwgMCwgezB4NDgsMHgxNiwweDhhLDB4MDQsMHhhMCwweDg5LDB4MDEsMHgyMiwweDQwLDB4MWEsMHgxNCwweDg4LDB4MDQsMHgyMCwweGIxLDB4NDAgfSB9LAoreyAgMTYsIDB4YzNlMCwgMCwgezB4MjgsMHg0MCwweDBiLDB4MTAsMHgwYSwweDA0LDB4MjAsMHhiMSwweDJjLDB4MjAsMHg0YSwweDBiLDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzNmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNSwweDkwLDB4YmIsMHg0MCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQwMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHg0MCwweDg5LDB4NDIsMHg2MiwweDU4LDB4MDgsMHgxMCwweDAyLDB4ZTUsMHgwMCwweGI5LDB4MDMgfSB9LAoreyAgMTYsIDB4YzQxMCwgMCwgezB4MjIsMHhjMCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MTQsMHgzMSwweDAwLDB4MmEsMHg0NCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YzQyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhhNSwweDAwLDB4ZjksMHgwMSwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQzMCwgMCwgezB4OGMsMHg5MCwweDAzLDB4MjcsMHgwMCwweGMxLDB4OTQsMHgzMCwweDQwLDB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ0MCwgMCwgezB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg2MCwweDA3LDB4OTAsMHgyNywweGU4LDB4MDUgfSB9LAoreyAgMTYsIDB4YzQ1MCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhNCwweDE4LDB4ZjksMHgwMCwweGJlLDB4NDQgfSB9LAoreyAgMTYsIDB4YzQ2MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHhiZSwweDYxLDB4OGYsMHg5MCwweDAzLDB4YTQsMHgwMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ3MCwgMCwgezB4MWUsMHg0MCwweDBmLDB4MTAsMHgwMywweDI0LDB4MDgsMHhmOSwweDAwLDB4N2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ4MCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDgxLDB4ZjgsMHgwMCwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzQ5MCwgMCwgezB4MGMsMHgwMCwweGQzLDB4MjEsMHgwMCwweGQ4LDB4MDQsMHgzYSwweDE0LDB4OWMsMHg4MCwweDAzLDB4MjEsMHgwMSwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzRhMCwgMCwgezB4MzYsMHgwMCwweDBjLDB4ODAsMHgxMywweDIwLDB4MTAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDJjLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzRiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDQsMHgzYSwweDAwLDB4YmUsMHg4NCwweDIzLDB4ODUgfSB9LAoreyAgMTYsIDB4YzRjMCwgMCwgezB4MDgsMHhlYywweDgzLDB4NjgsMHgwNCwweDhhLDB4MDAsMHgyZiwweDkwLDB4NGQsMHhhMCwweDAyLDB4MjgsMHgwMSwweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzRkMCwgMCwgezB4MjMsMHhiMCwweDBhLDB4YTAsMHgwMiwweDJhLDB4MDgsMHhkYSwweDAxLDB4MjIsMHg4MCwweDBmLDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YmIsMHhmMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YzRmMCwgMCwgezB4MDgsMHgzYywweDBhLDB4MGMsMHgwMCwweDkzLDB4MDEsMHgyOCwweGM4LDB4ODksMHgzMCwweDA2LDB4NGMsMHgwMCwweDgzLDB4MDIgfSB9LAoreyAgMTYsIDB4YzUwMCwgMCwgezB4MmMsMHhmNiwweDA4LDB4MzAsMHgwMiwweDA0LDB4MDAsMHhhMywweDAwLDB4MjAsMHhjMCwweDBhLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzUxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZCwweDExLDB4YjMsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4YzUyMCwgMCwgezB4MDgsMHg1MCwweDAyLDB4NWMsMHgxMCwweDg3LDB4MDEsMHg2ZCwweDgxLDB4NDksMHgzMiwweDUyLDB4MWUsMHhjMywweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzUzMCwgMCwgezB4MjgsMHhlMCwweDBhLDB4MzIsMHgyNiwweDFmLDB4MDAsMHgzNywweDAwLDB4MjMsMHhlMCwweDBiLDB4NzIsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzU0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgxMiwweDAwLDB4YjcsMHg4MiwweDMxLDB4MjAgfSB9LAoreyAgMTYsIDB4YzU1MCwgMCwgezB4MDgsMHgwOCwweDM3LDB4MGYsMHgwOCwweGQ3LDB4ZTAsMHgzOSwweDYwLDB4MTksMHg3YSwweDBiLDB4NWUsMHgwYywweDgzLDB4YjIgfSB9LAoreyAgMTYsIDB4YzU2MCwgMCwgezB4N2QsMHhlMCwweDBjLDB4N2EsMHgwYiwweDNlLDB4MDIsMHhhZiwweGEwLDB4YjEsMHhlMCwweDBlLDB4N2EsMHgwMywweGNhLDB4MDIgfSB9LAoreyAgMTYsIDB4YzU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhMCwweDEwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzU4MCwgMCwgezB4NmYsMHhiMCwweDQzLDB4ZWMsMHgxMSwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiNSwweDAzLDB4ZWMsMHgyMCwweGZiLDB4NTAgfSB9LAoreyAgMTYsIDB4YzU5MCwgMCwgezB4MzYsMHgwMCwweDBmLDB4YjUsMHg0MywweGU1LDB4YTEsMHhkYiwweDc4LDB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YzVhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHhhMCwweDNmLDB4YTAgfSB9LAoreyAgMTYsIDB4YzViMCwgMCwgezB4MGQsMHhjOSwweDEzLDB4M2UsMHgwMCwweGNmLDB4ZDAsMHgzZCwweGU4LDB4MDIsMHhmZiwweDEzLDB4M2UsMHgwMCwweGNmLDB4ODIgfSB9LAoreyAgMTYsIDB4YzVjMCwgMCwgezB4M2YsMHg2MCwweDBjLDB4ZmMsMHgyMywweDNlLDB4MTAsMHhlZiwweDgwLDB4MzMsMHhmMiwweDBjLDB4ZmMsMHg4MywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzVkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDQwLDB4YjUsMHgwMSwweDJkLDB4ZDAgfSB9LAoreyAgMTYsIDB4YzVlMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4MWMsMHg0MCwweDU3LDB4MTAsMHgyZCwweDVhLDB4MjgsMHgzMSwweDAyLDB4YmMsMHgwMSwweDk3LDB4MTAgfSB9LAoreyAgMTYsIDB4YzVmMCwgMCwgezB4MmQsMHgwMCwweDBhLDB4NzAsMHgwMiwweDg0LDB4MDQsMHhjZiwweDAwLDB4MjksMHhjMCwweDBhLDB4ZjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzYwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4YjcsMHgyYSwweDJkLDB4ODIgfSB9LAoreyAgMTYsIDB4YzYxMCwgMCwgezB4MDgsMHg0MiwweDIyLDB4M2MsMHgwMCwweDg3LDB4MTEsMHgwZCwweGNjLDB4ODgsMHgzMiwweDAyLDB4MWQsMHgwMCwweDk3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzYyMCwgMCwgezB4MmMsMHhjNCwweDA4LDB4MzAsMHgwMiwweDE0LDB4MDAsMHhhNywweDAwLDB4MjMsMHhjMCwweDA5LDB4NzAsMHg4MiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzYzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjMCwweDIwLDB4YjAsMHgyMCwweDJjLDB4NTAgfSB9LAoreyAgMTYsIDB4YzY0MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MmQsMHhjMCwweDkzLDB4ZTIsMHgyYywweDIxLDB4MDgsMHgzMCwweDAyLDB4MGUsMHgwOCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY1MCwgMCwgezB4MmMsMHg0MCwweDBhLDB4MzAsMHgwMiwweDhjLDB4MDAsMHg5MywweDAwLDB4MmEsMHhjMCwweDBiLDB4MzAsMHgwMiwweDE4LDB4MDQgfSB9LAoreyAgMTYsIDB4YzY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZjgsMHhjMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4YzY3MCwgMCwgezB4MmMsMHhhMCwweDBiLDB4M2YsMHgwMCwweGM3LDB4NjAsMHgzZSwweGQwLDB4MGMsMHhmMCwweDBiLDB4M2MsMHgwMCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY4MCwgMCwgezB4M2UsMHg4MCwweDBjLDB4ZjAsMHgwYiwweDJjLDB4MDAsMHhlZiwweDAwLDB4MzMsMHhjMSwweDBkLDB4ZjAsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzY5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDQwLDB4ZjMsMHg0MCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4YzZhMCwgMCwgezB4OGUsMHhiNCwweDAzLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSwweDA5LDB4MGYsMHhiMCwweDEzLDB4ZWMsMHg0MiwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZiMCwgMCwgezB4M2MsMHgwMCwweDhmLDB4YjAsMHgxMywweGM0LDB4MTEsMHhlMywweDAwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmMsMHg4MCwweDMxLDB4MjIgfSB9LAoreyAgMTYsIDB4YzZkMCwgMCwgezB4MGMsMHhhOCwweDAzLDB4M2MsMHgwMCwweGNmLDB4MDAsMHgzMywweGEwLDB4MGUsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZlMCwgMCwgezB4MWYsMHhmMCwweDBjLDB4ZjAsMHgwMywweGY0LDB4MDAsMHhjZiwweDAyLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMiwweDAwLDB4NTQgfSB9LAoreyAgMTYsIDB4YzZmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2ZiwweDAwLDB4YmIsMHhjMCwweDIyLDB4NzAgfSB9LAoreyAgMTYsIDB4YzcwMCwgMCwgezB4MGEsMHhiOSwweDQyLDB4MmMsMHgxMCwweDhiLDB4MDAsMHg3NiwweDExLDB4ODMsMHhiMCwweDAyLDB4ZWMsMHgxMCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzcxMCwgMCwgezB4MmUsMHhiMCwweDBhLDB4YjAsMHgwMywweGVjLDB4MDQsMHg4YiwweDAwLDB4YTIsMHhjMCwweDI4LDB4YjAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzcyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHg2NSwweDQwLDB4YjgsMHgyMCwweDIyLDB4NDQgfSB9LAoreyAgMTYsIDB4YzczMCwgMCwgezB4NTgsMHgzNCwweDBhLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweDg0LDB4NGIsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc0MCwgMCwgezB4NmUsMHhjMCwweDA4LDB4YjAsMHg0MiwweGU2LDB4MDQsMHg4YiwweDAwLDB4MDIsMHhjMCwweDA4LDB4MzAsMHgwMiwweGEwLDB4MDEgfSB9LAoreyAgMTYsIDB4Yzc1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4YjEsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzc2MCwgMCwgezB4MGEsMHgzMCwweDBhLDB4MGMsMHgwMCwweDhiLDB4MDMsMHgyNCwweDgwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc3MCwgMCwgezB4NmMsMHgwMCwweDBhLDB4MzAsMHgwMiwweDhkLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDE4LDB4MzAsMHgwMiwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg2NCwweDAwLDB4ZjgsMHgwMCwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc5MCwgMCwgezB4NGMsMHhhMCwweDBiLDB4MmMsMHgwMiwweGNmLDB4MDAsMHgyMiwweDQwLDB4MGUsMHhmNSwweDAzLDB4ZmMsMHgwMCwweGNmLDB4MDEgfSB9LAoreyAgMTYsIDB4YzdhMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ZjAsMHgxMiwweGRkLDB4MDIsMHhjZiwweDAyLDB4MzMsMHhjMCwweDRjLDB4ZjAsMHgwYiwweDgwLDB4MDMgfSB9LAoreyAgMTYsIDB4YzdiMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE0LDB4MTksMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YzdjMCwgMCwgezB4MGYsMHhiMSwweDAzLDB4ZGMsMHgwMCwweGJmLDB4MDEsMHgzZiwweDAwLDB4MGYsMHhmMiwweDIzLDB4ZmMsMHgxMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzdkMCwgMCwgezB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMSwweGY0LDB4ODQsMHhmZiwweDAwLDB4M2QsMHhjMCwweDRmLDB4ZjAsMHgxMywweDY4LDB4MDYgfSB9LAoreyAgMTYsIDB4YzdlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDQwLDB4ZGYsMHg4MCwweDMzLDB4YzggfSB9LAoreyAgMTYsIDB4YzdmMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4M2MsMHgwYSwweDlmLDB4YzAsMHgzZiwweGYwLDB4MDgsMHhiOCwweDAyLDB4M2UsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzgwMCwgMCwgezB4M2YsMHhkOCwweDBjLDB4ZjksMHg2MSwweDJlLDB4NDAsMHg2ZiwweDkwLDB4M2YsMHhlNCwweDhmLDB4ZjEsMHg4MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzgxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweDA0LDB4OGIsMHg4MCwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4YzgyMCwgMCwgezB4MDgsMHhiOCwweDAyLDB4M2QsMHg0MCwweGFiLDB4MDAsMHgwZSwweDA4LDB4NDgsMHgyMiwweDgyLDB4NmMsMHgyMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzgzMCwgMCwgezB4MmYsMHhkMCwweDQ4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMSwweDBiLDB4YjAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4Yzg0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAyLDB4ODMsMHgwMSwweGEwLDB4YzUgfSB9LAoreyAgMTYsIDB4Yzg1MCwgMCwgezB4MDgsMHhiMCwweDRhLDB4NGMsMHhhMCwweDgwLDB4MjQsMHgyOCwweGM4LDB4MDksMHgzMiwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDggfSB9LAoreyAgMTYsIDB4Yzg2MCwgMCwgezB4MmUsMHhkMSwweDI5LDB4YjIsMHgzYSwweDBjLDB4ODQsMHhhMywweDIxLDB4MmMsMHhjOCwweDRiLDB4YjIsMHgwYSwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yzg3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA4LDB4OGIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzg4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4NGMsMHgwMCwweDg4LDB4MjEsMHgyNCwweDIxLDB4MDksMHhiMCwweDQ2LDB4NmMsMHgwMCwweGJiLDB4MDYgfSB9LAoreyAgMTYsIDB4Yzg5MCwgMCwgezB4MmUsMHhjMCwweDA5LDB4YjAsMHgwMiwweDJjLDB4MTAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzhhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4Y2IsMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhiMCwgMCwgezB4MGMsMHhiOSwweDAyLDB4NmMsMHgwMCwweGNiLDB4YzgsMHgzYSwweGMwLDB4MmQsMHg5MCwweDBiLDB4MmMsMHgwOCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzhjMCwgMCwgezB4M2UsMHhjMCwweDBkLDB4MzAsMHg0MiwweDJjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgxMywweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzhkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDAwLDB4ZWYsMHgwMCwweDNkLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhlMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4YmMsMHgwNiwweGVmLDB4ODIsMHgzZiwweDQwLDB4NGUsMHhjOSwweDgzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzhmMCwgMCwgezB4N2YsMHhjMCwweDFjLDB4ZjAsMHgxMywweDdjLDB4MDAsMHhmZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzkwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMiwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzkxMCwgMCwgezB4MGUsMHhiMCwweDAzLDB4YWMsMHgyMCwweGQ4LDB4NDAsMHgzZSwweGMwLDB4OGMsMHg5MCwweDBiLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzkyMCwgMCwgezB4M2UsMHhjOSwweDBkLDB4YjAsMHgzMywweGVjLDB4MDgsMHhmYiwweDAyLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwYiwweDU0LDB4MDQgfSB9LAoreyAgMTYsIDB4YzkzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YjMsMHgwMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzk0MCwgMCwgezB4MGIsMHgzMCwweDEyLDB4ZmMsMHgwMCwweDg4LDB4YTAsMHgyZSwweDQwLDB4MjgsMHg5NCwweDAyLDB4MmMsMHgxMCwweGJiLDB4MDQgfSB9LAoreyAgMTYsIDB4Yzk1MCwgMCwgezB4MmQsMHhjMCwweDI4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4NzIsMHgwNiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4Yzk3MCwgMCwgezB4MGEsMHgxMCwweDAyLDB4Y2QsMHgwMCwweDkzLDB4MDAsMHgyYywweGMwLDB4MDgsMHhiMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk4MCwgMCwgezB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDQwLDB4YjcsMHg4MCwweDJkLDB4ZTIgfSB9LAoreyAgMTYsIDB4YzlhMCwgMCwgezB4MGIsMHg1OCwweDAyLDB4ZGUsMHgwMiwweDk3LDB4ODEsMHgyZiwweGEwLDB4MDgsMHg2OCwweDAyLDB4NWUsMHgwMCwweGI3LDB4ODEgfSB9LAoreyAgMTYsIDB4YzliMCwgMCwgezB4MmYsMHhlMCwweDA4LDB4NzksMHgwMiwweGRlLDB4MDAsMHhiNywweDgxLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweDNjLDB4MDAgfSB9LAoreyAgMTYsIDB4YzljMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjMsMHgwMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzlkMCwgMCwgezB4MGUsMHgzMiwweDAzLDB4Y2MsMHg4MCwweGQzLDB4MDAsMHgzYywweGM0LDB4MGMsMHgzOSwweDAzLDB4NGMsMHgwOCwweGYzLDB4MWEgfSB9LAoreyAgMTYsIDB4YzllMCwgMCwgezB4M2MsMHhjNiwweDBkLDB4MzAsMHgwMywweGNlLDB4MjAsMHhmMywweDA4LDB4M2MsMHhjMCwweDBmLDB4MzAsMHgwMywweDUyLDB4MDIgfSB9LAoreyAgMTYsIDB4YzlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2EwMCwgMCwgezB4MGIsMHhiMCwweDAzLDB4Y2MsMHgyMCwweGViLDB4MDAsMHgzYywweDgwLDB4MGYsMHhiMCwweDQxLDB4YWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ExMCwgMCwgezB4M2MsMHhjMiwweDBmLDB4YjAsMHgwMywweGVjLDB4NDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4MzAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4Y2EyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZSwweDAyLDB4YzMsMHg4MCwweDMwLDB4Y2UgfSB9LAoreyAgMTYsIDB4Y2EzMCwgMCwgezB4MGQsMHg5OCwweDAzLDB4YWMsMHhhMCwweGMzLDB4ODAsMHhiMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2E0MCwgMCwgezB4M2UsMHhkMiwweDRmLDB4YjAsMHgwOSwweDJlLDB4MDgsMHg0YiwweDAxLDB4M2UsMHhjMCwweDI0LDB4YjAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2E1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMSwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2E2MCwgMCwgezB4NDgsMHg1MCwweDEyLDB4NGMsMHgwMCwweDg3LDB4MDAsMHgzNSwweGMwLDB4NGIsMHg2MCwweDAyLDB4ZGMsMHgwNCwweGI3LDB4MDEgfSB9LAoreyAgMTYsIDB4Y2E3MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMSwweDBjLDB4NzIsMHgwMiwweGYyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2E4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHg4MCwweDIzLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2E5MCwgMCwgezB4MDgsMHhmOCwweDAyLDB4ZGUsMHg4MCwweDhmLDB4ODEsMHgyMSwweGUwLDB4NGIsMHg3OCwweDEyLDB4ZGUsMHgwNCwweDM3LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2FhMCwgMCwgezB4MmQsMHhlOCwweDBiLDB4ZjgsMHgwMiwweDNlLDB4MTgsMHg4NywweDgwLDB4MmYsMHhlMCwweDA5LDB4NzksMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2FiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2FjMCwgMCwgezB4MjgsMHgzMCwweDQyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyNCwweGMwLDB4MGIsMHgzOCwweDA2LDB4Y2MsMHgwNCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2FkMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2FlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4Y2EsMHgwMCwweDMxLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2FmMCwgMCwgezB4MDgsMHhlMCwweDAyLDB4OTgsMHgwMiwweGNlLDB4MDAsMHgzMywweDg0LDB4MGIsMHhlYSwweDAzLDB4ZTgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2IwMCwgMCwgezB4M2YsMHg4MSwweDBmLDB4YTAsMHgwMywweDI4LDB4MDAsMHhjYSwweDAwLDB4M2UsMHg4MCwweDBkLDB4ZTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2IxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2IyMCwgMCwgezB4MGUsMHg4NCwweDIzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2IzMCwgMCwgezB4M2UsMHgxMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAxLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2I1MCwgMCwgezB4MGMsMHg5YSwweDEzLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5OCwweDIzLDB4ZTQsMHg4MCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I2MCwgMCwgezB4M2UsMHg0MCwweDJjLDB4OTgsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2I3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA0LDB4YjksMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2I4MCwgMCwgezB4NjgsMHg5YywweDIyLDB4ZTQsMHgwMiwweDg5LDB4MDEsMHg3YywweDUwLDB4OGQsMHg5OCwweDIyLDB4ZTQsMHg4MCwweGI5LDB4MjAgfSB9LAoreyAgMTYsIDB4Y2I5MCwgMCwgezB4MmUsMHg1MCwweDQ4LDB4MTAsMHgwYiwweDI1LDB4MDAsMHhiOSwweDQ0LDB4MmMsMHg0MCwweDI4LDB4OTAsMHgwMCwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NTAgfSB9LAoreyAgMTYsIDB4Y2JiMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwNCwweDg5LDB4MDAsMHgyZSwweDUwLDB4MGEsMHg5MiwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JjMCwgMCwgezB4MmMsMHg0MCwweDA4LDB4OTEsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNSwweDAwLDB4YjEsMHgwMSwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2JlMCwgMCwgezB4NDgsMHgzMCwweDAyLDB4ZTQsMHgwMCwweDgxLDB4MDAsMHgyYSwweDQwLDB4NGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JmMCwgMCwgezB4MGMsMHhjMCwweDA4LDB4OTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MmUsMHg0MCwweDQ4LDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2MwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YjgsMHgwMSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2MxMCwgMCwgezB4MWMsMHg4MCwweDA3LDB4ZTEsMHg1MCwweGM4LDB4NTAsMHgyZSwweDE0LDB4MWUsMHg4NSwweDAzLDB4ZTEsMHg0MSwweGY4LDB4NTAgfSB9LAoreyAgMTYsIDB4Y2MyMCwgMCwgezB4M2UsMHgxNCwweDBjLDB4ODUsMHgxMywweDIxLDB4NDgsMHhmOCwweDUwLDB4M2UsMHgxNCwweDBjLDB4ODUsMHg0MywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4Y2MzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MTksMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NTEgfSB9LAoreyAgMTYsIDB4Y2M0MCwgMCwgezB4MGYsMHg1MCwweDAzLDB4ZTUsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MWQsMHhkMCwweDAzLDB4ZjQsMHgxMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M1MCwgMCwgezB4M2UsMHg1MCwweDBmLDB4NTAsMHgwMCwweDk0LDB4MDAsMHhmOSwweDAwLDB4M2QsMHg0MCwweDBmLDB4OTEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4Y2M2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhlNCwweDUwLDB4Y2QsMHgwMCwweDMxLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2M3MCwgMCwgezB4MDQsMHhkMCwweDAzLDB4MzYsMHg4MCwweGMxLDB4NDIsMHgyZSwweDUwLDB4MWYsMHg5NCwweDAzLDB4ZTUsMHgwMCwweGU5LDB4MDIgfSB9LAoreyAgMTYsIDB4Y2M4MCwgMCwgezB4MmUsMHg3MiwweDBhLDB4OTAsMHgyMiwweDA1LDB4MDgsMHhlOSwweDQwLDB4M2UsMHg1MCwweDQwLDB4OWMsMHgwMywweDI2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhjMiwweDgyLDB4ODgsMHgwMCwweDIyLDB4MTUgfSB9LAoreyAgMTYsIDB4Y2NhMCwgMCwgezB4MDgsMHg4MCwweDAyLDB4MjMsMHg1OCwweDg4LDB4YTAsMHgyZSwweDI4LDB4MGIsMHhhYSwweDQyLDB4ZTIsMHg4MiwweDg4LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2NiMCwgMCwgezB4MmUsMHgzOCwweDI4LDB4ODgsMHgwMiwweDIyLDB4ODAsMHhiOCwweGEwLDB4M2EsMHgyOCwweDA4LDB4Y2QsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2NjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgwMCwweGE2LDB4NDAgfSB9LAoreyAgMTYsIDB4Y2NkMCwgMCwgezB4MjgsMHgxMCwweDBhLDB4MjQsMHgyNiwweDk1LDB4MDAsMHgwZCwweDQwLDB4MGIsMHg1MCwweDAyLDB4NzQsMHgwMCwweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4Y2NlMCwgMCwgezB4MmYsMHg0MCwweDc5LDB4ZDIsMHhhYSwweDE0LDB4MDAsMHhhNSwweDAxLDB4MmYsMHg0MCwweDM4LDB4NTAsMHgwMiwweDEyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2NmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDA0LDB4ODksMHgwMCwweDI2LDB4NDAgfSB9LAoreyAgMTYsIDB4Y2QwMCwgMCwgezB4MDgsMHg5MSwweDAyLDB4MjQsMHgxMCwweDlkLDB4MDgsMHgyZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2QxMCwgMCwgezB4MmYsMHg0MCwweDA5LDB4ZDAsMHgwMCwweDM0LDB4MDAsMHhiZCwweDAwLDB4MGIsMHg0MCwweDE4LDB4NzAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2QyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhjNCwweDAwLDB4YzksMHgwNSwweDM2LDB4NDEgfSB9LAoreyAgMTYsIDB4Y2QzMCwgMCwgezB4NGMsMHg5MCwweDYzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGIsMHg5MCwweDAzLDB4NDQsMHgwOCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q0MCwgMCwgezB4M2UsMHg0MCwweDE1LDB4MTAsMHgwMywweDI0LDB4MDAsMHhlOSwweDAwLDB4M2MsMHg0MCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Q1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDA0LDB4ZjksMHgwMCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2Q2MCwgMCwgezB4NGYsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4OTksMHgzZSwweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTQsMHgyMCwweGY5LDB4MGEgfSB9LAoreyAgMTYsIDB4Y2Q3MCwgMCwgezB4M2UsMHg0MCwweDBlLDB4OTAsMHg0MywweDY0LDB4MjQsMHhmOSwweDA4LDB4M2EsMHg0MiwweDBmLDB4OTAsMHg4YiwweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDEyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q5MCwgMCwgezB4MGMsMHg4MCwweDQzLDB4ZTAsMHgwMCwweGM4LDB4NDAsMHgzMiwweDAwLDB4MGYsMHg4NCwweDUzLDB4ZTAsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RhMCwgMCwgezB4M2UsMHgwMCwweDBkLDB4ODAsMHgyMywweDIwLDB4MDAsMHhkOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2RiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOCwweDAyLDB4ODIsMHgwMCwweGExLDB4ODggfSB9LAoreyAgMTYsIDB4Y2RjMCwgMCwgezB4MDgsMHg2MCwweDIyLDB4YzgsMHgwMCwweDhhLDB4NDAsMHgzNiwweGExLDB4MGIsMHhhMCwweDAyLDB4ZTksMHgxMCwweGJhLDB4NDQgfSB9LAoreyAgMTYsIDB4Y2RkMCwgMCwgezB4MmMsMHg4MCwweDBjLDB4YTQsMHgxMiwweDI5LDB4MDIsMHg4YSwweDQ0LDB4MmUsMHg5OCwweDBiLDB4YTQsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDEwLDB4ODMsMHgwMCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2RmMCwgMCwgezB4MTgsMHgzMCwweDkyLDB4YzQsMHgwOCwweDkzLDB4NDAsMHgyMCwweGUwLDB4MGIsMHgzMCwweDAyLDB4Y2QsMHgwMCwweGIzLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2UwMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4M2EsMHg0MiwweGNkLDB4MDAsMHg4MywweDQwLDB4MmMsMHhkMCwweDBiLDB4MzgsMHgwMiwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2UxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4NDEsMHgxYywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2UyMCwgMCwgezB4MjgsMHg3MCwweDAyLDB4ZDEsMHgwMCwweDlkLDB4ODAsMHgyNSwweGMyLDB4NGIsMHg2MCwweDAyLDB4ZGMsMHgwOCwweGI3LDB4MDIgfSB9LAoreyAgMTYsIDB4Y2UzMCwgMCwgezB4MmMsMHhjMCwweDBhLDB4NzQsMHgwMiwweGZlLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4MzQsMHgwMiwweDY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2U0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4NCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2U1MCwgMCwgezB4MGMsMHg2OCwweDAzLDB4ZDYsMHgwMCwweDk3LDB4ODAsMHgzMSwweGEwLDB4MGYsMHg1OCwweDEzLDB4ZGUsMHgwOCwweGY3LDB4ODIgfSB9LAoreyAgMTYsIDB4Y2U2MCwgMCwgezB4M2QsMHhhMCwweDBmLDB4ZjgsMHgwYiwweGRlLDB4MDAsMHhjNywweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHg4YiwweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2U3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhZCwweDgwLDB4ZjMsMHgwMCwweDNlLDB4YzEgfSB9LAoreyAgMTYsIDB4Y2U4MCwgMCwgezB4MGYsMHhhMCwweDIzLDB4YzAsMHgwMiwweGU5LDB4MDAsMHgzZSwweDgxLDB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2U5MCwgMCwgezB4M2UsMHhjMCwweDBkLDB4YjAsMHgxMywweDJjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDgyLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2VhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDMyLDB4YzcsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2ViMCwgMCwgezB4MGYsMHg3OCwweDAzLDB4M2UsMHhjOCwweDRlLDB4ODAsMHgyMywweDY0LDB4MGMsMHhmOCwweDAzLDB4M2EsMHgwMCwweGNlLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2VjMCwgMCwgezB4MTMsMHhlYywweDA2LDB4ZDgsMHgwMywweDNhLDB4MDAsMHhkZSwweDgwLDB4MzMsMHhhNCwweDBjLDB4YzgsMHgwMywweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2VkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgxMCwweDAxLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2VlMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4MTgsMHg1MCwweDg0LDB4MDAsMHgyYiwweDQ0LDB4MDgsMHg2MCwweDEyLDB4OTgsMHgwMCwweDg2LDB4MTMgfSB9LAoreyAgMTYsIDB4Y2VmMCwgMCwgezB4MjEsMHhjNCwweDg4LDB4NTAsMHgwMiwweDE4LDB4ODAsMHg4NiwweDAwLDB4MjEsMHg4MCwweDA4LDB4NjEsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2YwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2YxMCwgMCwgezB4MGIsMHhmMSwweDAyLDB4NWMsMHg4MCwweDA2LDB4MDAsMHgyMSwweDAwLDB4ODgsMHhkMCwweDAyLDB4NWMsMHgwMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2YyMCwgMCwgezB4MjAsMHg4OSwweDhhLDB4ZjEsMHgwMiwweDFjLDB4MDgsMHg4NywweDEwLDB4MjEsMHg4MSwweDg4LDB4NDgsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2YzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDEwLDB4ODMsMHgwNCwweGEwLDB4YzEgfSB9LAoreyAgMTYsIDB4Y2Y0MCwgMCwgezB4MGIsMHgzMCwweDBhLDB4NDgsMHgwYywweDg4LDB4MDYsMHg2MCwweDM4LDB4MDgsMHgwNCwweDQyLDB4ZWMsMHgwMSwweDhiLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Y1MCwgMCwgezB4MjIsMHhjMSwweDA4LDB4MzAsMHgwYSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHg4MCwweDAwLDB4MjAsMHgwMiwweGQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Y2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4YzMsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2Y3MCwgMCwgezB4OGYsMHg5MCwweDAzLDB4NjQsMHgwYSwweGNiLDB4MDIsMHhiMiwweGYyLDB4MjAsMHgzNSwweDEyLDB4NjQsMHgwYSwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y4MCwgMCwgezB4YjIsMHg0MCwweDBlLDB4YTAsMHgwMywweDI0LDB4MGEsMHhjOSwweDAwLDB4YTIsMHg0MCwweDJjLDB4YTAsMHgwMywweGVlLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Y5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2ZhMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YTUsMHgwMCwweGRiLDB4NDAsMHgzZSwweGQwLDB4NGQsMHhiNCwweDEzLDB4YTQsMHgwOCwweGZiLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2ZiMCwgMCwgezB4M2UsMHhjMCwweDFjLDB4YTAsMHgwMywweDZjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHg1MCwweDRmLDB4YTQsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2ZkMCwgMCwgezB4MGMsMHhlOCwweDQzLDB4MjYsMHgwMCwweGRmLDB4ODAsMHhiMywweGUwLDB4MGYsMHhmOCwweDAzLDB4N2MsMHgwMCwweGNkLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ZlMCwgMCwgezB4MzMsMHgwNCwweDBjLDB4ZTAsMHgyMywweDM0LDB4NDAsMHhjZCwweDAwLDB4MjMsMHg0MCwweDBjLDB4ZTAsMHgwMywweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2ZmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDEwLDB4YmIsMHgwMCwweGEyLDB4ZDIgfSB9LAoreyAgMTYsIDB4ZDAwMCwgMCwgezB4MDgsMHgyOCwweDAyLDB4MDQsMHg2MCwweDhiLDB4MTksMHgyMiwweGM2LDB4MGUsMHhiMSwweDhhLDB4MmUsMHg0MCwweDhiLDB4OTAgfSB9LAoreyAgMTYsIDB4ZDAxMCwgMCwgezB4MjIsMHhjMSwweDA4LDB4YTQsMHg4MiwweDJjLDB4MDAsMHg4YiwweDkwLDB4MjIsMHg2NCwweDQ4LDB4YTQsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmIsMHgwMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAzMCwgMCwgezB4MDgsMHg5MSwweDJlLDB4MjQsMHgwMCwweDliLDB4MDAsMHgyMiwweGMwLDB4OGIsMHhiMCwweDEyLDB4MjAsMHgwNCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDA0MCwgMCwgezB4MjIsMHg0MCwweDA4LDB4MTAsMHgyMiwweDIwLDB4MDAsMHg4OCwweDAxLDB4MmEsMHhkMCwweDA4LDB4ODAsMHg0MiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDA1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwNCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDA2MCwgMCwgezB4MDgsMHgxMCwweDA2LDB4MDQsMHgxMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4OGIsMHhiMCwweDEyLDB4MDAsMHgwMCwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDA3MCwgMCwgezB4MjAsMHhjMCwweDI4LDB4MTAsMHg0MiwweDA5LDB4MDYsMHg4MiwweDAwLDB4MjgsMHhjMCwweDA4LDB4MjAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4YmIsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDA5MCwgMCwgezB4MmMsMHhiMCwweDAzLDB4MjQsMHgwMCwweGQzLDB4MDAsMHgzMiwweGMwLDB4NWYsMHhiNSwweDAzLDB4MGMsMHgwMiwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBhMCwgMCwgezB4YjIsMHgwMCwweDBjLDB4YjAsMHgwYiwweDA1LDB4MDAsMHhjMSwweDAwLDB4YjgsMHhjMCwweDJjLDB4ODAsMHgxMywweGUwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDBiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhkYywweDAwLDB4ZmYsMHgwMCwweDFmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDBjMCwgMCwgezB4ODcsMHhmMCwweDAxLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGUsMHg3MCwweDQzLDB4ZmMsMHgxMCwweDdmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDBlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMSwweDg0LDB4ZmUsMHg2MSwweDMxLDB4ZDggfSB9LAoreyAgMTYsIDB4ZDBmMCwgMCwgezB4MGMsMHhiMiwweGMzLDB4ZmMsMHhlMCwweGNjLDB4ODAsMHg3YiwweGMwLDB4MGUsMHhmMSwweDAzLDB4N2MsMHhlMCwweGNjLDB4ODMgfSB9LAoreyAgMTYsIDB4ZDEwMCwgMCwgezB4M2YsMHgyMCwweDBmLDB4ZjAsMHhjYiwweDMyLDB4NDQsMHhkYywweDg0LDB4M2YsMHgyNSwweDRjLDB4ZjIsMHg0MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDExMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlNCwweDQ4LDB4YjAsMHgxMCwweDIyLDB4ZGMgfSB9LAoreyAgMTYsIDB4ZDEyMCwgMCwgezB4MDgsMHhiNiwweDAyLDB4ZmQsMHg5MiwweDg4LDB4ODUsMHgyMywweGY0LDB4NDAsMHhmMSwweDAyLDB4ZWQsMHgwMCwweDg4LDB4MmQgfSB9LAoreyAgMTYsIDB4ZDEzMCwgMCwgezB4MGUsMHg2MCwweDBiLDB4YmMsMHgxMiwweDJjLDB4MTAsMHhhOCwweDgyLDB4MmUsMHgwMCwweDBhLDB4ZmMsMHgyMiwweGEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDE0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDgwLDB4YjMsMHgyMiwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDE1MCwgMCwgezB4MDgsMHgzMCwweDgyLDB4Y2MsMHgwMSwweDg4LDB4MDAsMHgyYywweGMwLDB4NGEsMHgzMiwweDAyLDB4Y2MsMHgwMCwweDAxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDE2MCwgMCwgezB4MjgsMHgwMCwweDRiLDB4YjAsMHgwMiwweGEwLDB4MDAsMHg4MCwweDAwLDB4MmMsMHgwOSwweDA4LDB4MzQsMHgwMiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDE3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA0LDB4YjIsMHgxMCwweDJhLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDE4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4ZWMsMHgxMCwweDg5LDB4ODAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwOCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDE5MCwgMCwgezB4MmUsMHg0MCwweDgzLDB4YjAsMHgwMiwweGEwLDB4NDAsMHhiOSwweDgwLDB4MmMsMHgyMSwweDBhLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDFhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZmEsMHgwMCwweGJhLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDFiMCwgMCwgezB4MmMsMHhiMCwweDQzLDB4ZWMsMHgwMCwweGMwLDB4ODAsMHgzZSwweGMwLDB4OGUsMHhiMCwweDAzLDB4NGMsMHgwYywweGM4LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDFjMCwgMCwgezB4M2UsMHg4MCwweDhmLDB4YjAsMHgwMywweDgyLDB4MTAsMHhkOCwweDgyLDB4M2UsMHgyOCwweDBjLDB4YjAsMHgwYiwweDUwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNiwweDgwLDB4ZmQsMHgwMiwweDM3LDB4YzEgfSB9LAoreyAgMTYsIDB4ZDFlMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDUzLDB4ZmMsMHgwMiwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDFmMCwgMCwgezB4MmYsMHhhNCwweDhiLDB4ZjAsMHg4MywweDdjLDB4MDAsMHhhZCwweDAyLDB4MmYsMHg0MCwweDAzLDB4NzAsMHgwMywweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwNCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDIxMCwgMCwgezB4NGMsMHhiMCwweDIzLDB4MmMsMHgwMCwweGY4LDB4NDAsMHgzZSwweGMyLDB4MGMsMHhiMCwweDAzLDB4MmMsMHgwMCwweGZiLDB4NDEgfSB9LAoreyAgMTYsIDB4ZDIyMCwgMCwgezB4MzIsMHhjMiwweDBmLDB4YjAsMHg0MywweDJkLDB4MDAsMHhjOCwweDUwLDB4M2UsMHg0MCwweDBjLDB4YjAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDIzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyZiwweDkwLDB4YjksMHg1MCwweDAzLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDI0MCwgMCwgezB4MTgsMHhmMCwweDFhLDB4M2MsMHgwMCwweGI5LDB4MzIsMHgyZCwweGUwLDB4MzgsMHhmMCwweDYwLDB4M2MsMHgwNCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI1MCwgMCwgezB4M2UsMHhmMCwweDBiLDB4N2MsMHg4MCwweDJjLDB4MDAsMHhkOSwweGMwLDB4MmUsMHg0MCwweDBkLDB4ZjAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YiwweDI0LDB4YjIsMHgxMCwweDAyLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDI3MCwgMCwgezB4MjgsMHgzMCwweDAyLDB4NmMsMHgwNCwweGIyLDB4YzEsMHgyYywweGMwLDB4MDgsMHgzMCwweDAwLDB4MGMsMHgwMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI4MCwgMCwgezB4MjgsMHgyNCwweDAzLDB4M2MsMHgwYSwweDAwLDB4MDAsMHg4MiwweGM4LDB4MmMsMHhhMCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDAwLDB4YjQsMHg4MCwweDIxLDB4ZTQgfSB9LAoreyAgMTYsIDB4ZDJhMCwgMCwgezB4NDgsMHg3YiwweDAyLDB4NWUsMHgwMCwweGI2LDB4ODAsMHg2ZCwweGUyLDB4NDgsMHg3OSwweDIyLDB4MWUsMHg0MCwweGFjLDB4ODQgfSB9LAoreyAgMTYsIDB4ZDJiMCwgMCwgezB4MmQsMHhlMCwweDBiLDB4ZmEsMHgwMCwweDUyLDB4NDAsMHg5NiwweDgwLDB4MmQsMHhlOCwweDE5LDB4MzgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDJjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDQwLDB4ZjMsMHgxMCwweGIwLDB4YzQgfSB9LAoreyAgMTYsIDB4ZDJkMCwgMCwgezB4MDgsMHgzYSwweDAyLDB4NGMsMHg5MCwweGYzLDB4MTAsMHgzYywweGNjLDB4MDgsMHgzMSwweDAzLDB4MGMsMHg0OSwweGIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDJlMCwgMCwgezB4MzAsMHgwNSwweDBmLDB4MzAsMHgwNywweDIxLDB4NDAsMHg0MywweDAxLDB4M2UsMHhjMiwweDFjLDB4MzAsMHg0MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MGQsMHhiYywweDEwLDB4ZmMsMHgxMCwweDNmLDB4YzUgfSB9LAoreyAgMTYsIDB4ZDMwMCwgMCwgezB4MGYsMHhmMSwweDAxLDB4YmMsMHgwNCwweGZmLDB4MDQsMHgzZiwweGM0LDB4MGYsMHhiMSwweDRiLDB4ZmMsMHg2NCwweGY3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDMxMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4NzIsMHg1MywweGFjLDB4NDQsMHhmZiwweDAxLDB4M2YsMHhjOSwweDBmLDB4ZjQsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDMyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDA4LDB4ZmEsMHgwMCwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDMzMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MmMsMHgwMCwweGNiLDB4MDIsMHgzZSwweGNhLDB4MGYsMHhiMiwweDA3LDB4MmUsMHgwMCwweGRiLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDM0MCwgMCwgezB4MzIsMHgwOCwweDBmLDB4MzEsMHgwMywweDJjLDB4MDAsMHhjYiwweDA0LDB4M2UsMHg4MCwweDBjLDB4MzUsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDM1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAwLDB4YjUsMHgwMCwweDJkLDB4YzggfSB9LAoreyAgMTYsIDB4ZDM2MCwgMCwgezB4MDgsMHg3MCwweDBhLDB4MWMsMHgyMiwweDg3LDB4MDAsMHgyZCwweGM5LDB4MGIsMHhmMiwweDgyLDB4OWMsMHg4MCwweGE2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDM3MCwgMCwgezB4MDksMHg4YiwweDBiLDB4NzAsMHgwYSwweDFjLDB4MDIsMHg4NSwweDAwLDB4MmQsMHg0MCwweDA4LDB4NzAsMHgwMiwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDM4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg4MCwweDJjLDB4ZWMgfSB9LAoreyAgMTYsIDB4ZDM5MCwgMCwgezB4MDgsMHg3YiwweDAyLDB4NWUsMHg0MCwweDg1LDB4ODksMHgyZCwweGVjLDB4OGIsMHg3YiwweDAyLDB4NGUsMHg4NCwweDhmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDNhMCwgMCwgezB4MjUsMHg2NCwweDBiLDB4ZmEsMHgwMiwweDEyLDB4MDgsMHg5NywweDgwLDB4NmYsMHhlMSwweDA4LDB4N2EsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDNiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDIwLDB4YjMsMHg2NCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDNjMCwgMCwgezB4MDgsMHgzMCwweDA2LDB4MGMsMHgxMCwweDgzLDB4OGEsMHg2YywweGMwLDB4NWIsMHgzMCwweDQyLDB4Y2MsMHgwMCwweGFiLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDNkMCwgMCwgezB4MmMsMHhmMiwweDBiLDB4MzAsMHgwMiwweDBkLDB4MDAsMHg5MywweDA0LDB4MmMsMHhkNSwweDA4LDB4MzAsMHgwYSwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDNlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYiwweDAwLDB4ZmUsMHhjMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDNmMCwgMCwgezB4MmMsMHhhMCwweDAzLDB4NjgsMHgwMCwweGM2LDB4NDAsMHgzZiwweDgwLDB4MGYsMHhhMCwweDAyLDB4NjgsMHgwMCwweGNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDQwMCwgMCwgezB4MzYsMHg5MCwweDRmLDB4NjAsMHgwMywweDFiLDB4NzAsMHhkZSwweGQ4LDB4M2YsMHhhMCwweDBjLDB4MjAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDQwLDB4ZjgsMHgxMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YTAsMHgxMCwweGY4LDB4NDIsMHgzZSwweDEwLDB4MWYsMHg4MCwweDAzLDB4YTAsMHgwMCwweGU4LDB4MGMgfSB9LAoreyAgMTYsIDB4ZDQzMCwgMCwgezB4M2EsMHgwNCwweDFmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDQ1LDB4N2UsMHgwMiwweDJmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHg2NCwweDAwLDB4ZTksMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDQ1MCwgMCwgezB4MGYsMHg5MCwweDBiLDB4MDQsMHgwOCwweGQ5LDB4ODAsMHgzNiwweDQwLDB4MGYsMHgxMCwweDEzLDB4MjQsMHgwOCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ2MCwgMCwgezB4NzIsMHg3MCwweDBmLDB4OTEsMHgxMywweDI0LDB4MTAsMHhjOSwweDEwLDB4M2UsMHg2OSwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDQ3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA4LDB4YjksMHg4MCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDQ4MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4YzQsMHgyMiwweDUyLDB4MGIsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ5MCwgMCwgezB4MjIsMHhlMCwweDBiLDB4OTAsMHgxMiwweDI0LDB4MDQsMHhkOSwweDRhLDB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMywweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjEsMHgxOCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDRiMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjQsMHgwMCwweDhiLDB4MjAsMHgyNiwweDQ5LDB4MGIsMHg5MCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRjMCwgMCwgezB4YTIsMHg0MCwweDBiLDB4OTAsMHg4YSwweDI0LDB4MDAsMHg4YiwweDAwLDB4MmMsMHg0MCwweGE4LDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDg0LDB4YjEsMHgyMCwweGEwLDB4NDggfSB9LAoreyAgMTYsIDB4ZDRlMCwgMCwgezB4MGIsMHgxMSwweDA2LDB4MDQsMHgwMCwweDgzLDB4MDAsMHgwMCwweDQwLDB4NGIsMHgxMSwweDAyLDB4MDQsMHg0OSwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDRmMCwgMCwgezB4MjgsMHg0MCwweDBiLDB4MTAsMHgwMiwweDI0LDB4NDEsMHg5MSwweDAwLDB4MmMsMHg1MCwweDA4LDB4MTAsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OSwweDQwLDB4ZTgsMHg1MCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4ZDUxMCwgMCwgezB4MGYsMHg4NiwweDkzLDB4MjEsMHhlMiwweGM4LDB4MDAsMHgzNiwweDBhLDB4MGIsMHg4NiwweDhiLDB4NjEsMHhhOCwweGY4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDUyMCwgMCwgezB4MjIsMHg4MCwweDBmLDB4ODIsMHhhMywweDIxLDB4MDgsMHhjOCwweDAyLDB4M2UsMHgwMCwweDBjLDB4ODAsMHg0MywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDUzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQ4LDB4ZmQsMHgxMiwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDU0MCwgMCwgezB4MGYsMHgxMiwweDAzLDB4YzQsMHgwMCwweDdkLDB4MDEsMHgxZSwweDQwLDB4MGIsMHg5MiwweDAzLDB4ZTQsMHg4MCwweGY1LDB4MjAgfSB9LAoreyAgMTYsIDB4ZDU1MCwgMCwgezB4MzYsMHg0MCwweDBmLDB4OTAsMHgwMywweGQ0LDB4OTAsMHg3ZCwweDAwLDB4M2QsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDU2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmNiwweGMxLDB4ZGQsMHg4OCwweDMyLDB4NzIgfSB9LAoreyAgMTYsIDB4ZDU3MCwgMCwgezB4MGMsMHg5OCwweDAzLDB4MjYsMHgyMiwweGRkLDB4MDAsMHgzZiwweDYyLDB4MmMsMHg5OSwweDgzLDB4NDYsMHhhMCwweGM5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDU4MCwgMCwgezB4YjIsMHg0MCwweDBmLDB4ZDgsMHgwMywweDI0LDB4MDAsMHhmZCwweDAwLDB4MzMsMHg1MSwweDJjLDB4ZDgsMHg4MywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDU5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMywweGMyLDB4ODgsMHhjMCwweDIyLDB4MzAgfSB9LAoreyAgMTYsIDB4ZDVhMCwgMCwgezB4MDgsMHg4YywweDQyLDB4MjIsMHgxMSwweDhhLDB4MDEsMHgyZSwweDAwLDB4MDgsMHg4OCwweDUyLDB4MjMsMHgwMCwweDgwLDB4YTMgfSB9LAoreyAgMTYsIDB4ZDViMCwgMCwgezB4MmEsMHgwMCwweDRiLDB4ODAsMHg0MiwweDIyLDB4YTAsMHhiOCwweDAwLDB4MjIsMHgyOCwweDA4LDB4ODQsMHgwMiwweDhlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDVjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgyZCwweDIwLDB4NDggfSB9LAoreyAgMTYsIDB4ZDVkMCwgMCwgezB4NjgsMHgxNCwweDgwLDB4MDQsMHgyMCwweDgxLDB4MDAsMHgyZSwweDQwLDB4MGIsMHgxMiwweDEyLDB4MDQsMHgyNCwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZDVlMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4OTQsMHgzMiwweDA0LDB4OTAsMHhiOSwweDAwLDB4MjAsMHg0MCwweDQ4LDB4MTAsMHg0YSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDVmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDYwMCwgMCwgezB4MDgsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOCwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDYxMCwgMCwgezB4MjIsMHg1MCwweDBiLDB4YjAsMHgwMiwweDI0LDB4MjAsMHhiOSwweDA5LDB4YTIsMHg0NCwweDA4LDB4OTAsMHgwMiwweDg2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDYyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZDksMHgwOCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDYzMCwgMCwgezB4NGMsMHgxMCwweDIzLDB4MDQsMHgwNCwweGQ5LDB4YzEsMHgzZSwweDQwLDB4OGYsMHg5MCwweDBiLDB4MDQsMHgwOCwweGMxLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY0MCwgMCwgezB4MTIsMHg0MCwweDBmLDB4OTAsMHg0MywweDI0LDB4MDQsMHhmMSwweDQxLDB4MzAsMHg3OCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NiwweDY0LDB4ZjksMHg4MCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY2MCwgMCwgezB4MGYsMHg5MCwweDBiLDB4ZTQsMHgwMCwweGY5LDB4OTgsMHgzZSwweDQwLDB4MmYsMHgxMCwweDAzLDB4YTQsMHgwMiwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDY3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwYiwweGU2LDB4NDAsMHhmOSwweDkwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHg0MSwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY5MCwgMCwgezB4MGMsMHg4MCwweDA3LDB4MjAsMHgxMCwweGM4LDB4MTAsMHgzZSwweDBjLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwNCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZhMCwgMCwgezB4YmEsMHgwMCwweDBmLDB4ODEsMHg0MywweDIwLDB4MDAsMHhmOCwweDcwLDB4M2UsMHgwMCwweDBmLDB4MDAsMHgwYiwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDZiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOSwweDAyLDB4OGUsMHgyMCwweGEzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDZjMCwgMCwgezB4MjgsMHhlMCwweDBhLDB4MzgsMHgxMCwweGFlLDB4MDQsMHgzZCwweGExLDB4OGUsMHhlMCwweDAyLDB4ZjgsMHgwMCwweDhlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZkMCwgMCwgezB4NzYsMHg4MCwweDBiLDB4NjAsMHgwMywweDc4LDB4MDAsMHhiZSwweDQwLDB4MmYsMHg4MiwweDBiLDB4YTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZCwweDAwLDB4OGIsMHg4OCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDZmMCwgMCwgezB4MTgsMHgzMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4NDQsMHgyYywweGQwLDB4MWIsMHgzMCwweDEyLDB4Y2MsMHgwNiwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDcwMCwgMCwgezB4MjAsMHhjMSwweDBiLDB4MzAsMHg4MiwweDBjLDB4MDEsMHhiMywweDAwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDcxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDAwLDB4ODUsMHgwMCwweDIwLDB4Y2MgfSB9LAoreyAgMTYsIDB4ZDcyMCwgMCwgezB4MDgsMHg3MCwweDA2LDB4MWMsMHg4NCwweGE3LDB4MDEsMHgyOSwweGMwLDB4MGIsMHg3MiwweDIyLDB4ZGMsMHg4MCwweDg3LDB4MzQgfSB9LAoreyAgMTYsIDB4ZDczMCwgMCwgezB4NjEsMHg4MCwweDBiLDB4MTAsMHgwMiwweDVjLDB4MDAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgwZSwweDAwLDB4OGMsMHg4MCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDc1MCwgMCwgezB4MGMsMHhmZSwweDAyLDB4M2YsMHgwMCwweGM1LDB4ODAsMHgyZCwweGUwLDB4MGUsMHg3OCwweDAzLDB4ZGYsMHhhMCwweGM3LDB4YTAgfSB9LAoreyAgMTYsIDB4ZDc2MCwgMCwgezB4MjEsMHg2MCwweDBmLDB4NzgsMHgwMywweDFlLDB4ODAsMHhmNywweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDc4MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZhLDB4MDAsMHgzZSwweGMwLDB4MDYsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGZiLDB4MjggfSB9LAoreyAgMTYsIDB4ZDc5MCwgMCwgezB4MzYsMHhkOCwweDRmLDB4YTAsMHgwMywweGVjLDB4MTAsMHhmYSwweDAwLDB4M2UsMHg1MCwweDBmLDB4MzAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDdhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYSwweDAwLDB4Y2MsMHg4MCwweGIzLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDdiMCwgMCwgezB4MGYsMHhmOCwweDAzLDB4M2UsMHgwMCwweGNmLDB4OTAsMHgzZiwweDYwLDB4NGYsMHhmOCwweGMzLDB4M2UsMHgwMCwweGVmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDdjMCwgMCwgezB4MzMsMHhmMCwweDBjLDB4N2EsMHgwMywweDNlLDB4NzAsMHhjNSwweDkwLDB4MzMsMHhmMSwweDBjLDB4NzgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDdkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiOCwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDdlMCwgMCwgezB4MGIsMHg3MCwweDRhLDB4MWMsMHgwMCwweDg3LDB4MTAsMHgyZCwweGMwLDB4NGIsMHg3MSwweDBhLDB4M2MsMHg0NCwweDhmLDB4MTIgfSB9LAoreyAgMTYsIDB4ZDdmMCwgMCwgezB4MjEsMHg4NiwweDBkLDB4NzIsMHgwMiwweDFlLDB4MDAsMHg4NywweDAwLDB4MjMsMHg0MCwweDA4LDB4NzAsMHgwYSwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDgwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODQsMHgwMCwweDI1LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDgxMCwgMCwgezB4MGIsMHg3MSwweDBhLDB4MGMsMHgwMCwweGE3LDB4MTIsMHgyZCwweDg0LDB4MGIsMHg3MCwweDBhLDB4MWMsMHgwMCwweGI3LDB4MDggfSB9LAoreyAgMTYsIDB4ZDgyMCwgMCwgezB4MjMsMHg0MCwweDA5LDB4ZjMsMHgxYSwweDVjLDB4ODYsMHg5NywweDA4LDB4MjUsMHg0MCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDgzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDIwLDB4ODEsMHgyMCwweDI2LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDg0MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MmMsMHgwMCwweDgyLDB4NDIsMHgyYywweDgwLDB4MGIsMHgzMCwweDIyLDB4MGMsMHgwOCwweDliLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDg1MCwgMCwgezB4MjAsMHhlMCwweDA5LDB4MjAsMHgwMiwweDRkLDB4MDgsMHg5MiwweDAwLDB4MjQsMHhlNSwweDA4LDB4MzAsMHgwYSwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDg2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZSwweDgyLDB4Y2EsMHhlMCwweGI3LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDg3MCwgMCwgezB4MGYsMHhmMCwweDEzLDB4M2MsMHgwYSwweGM5LDB4YzgsMHgzZSwweDQwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwNCwweGZmLDB4ODQgfSB9LAoreyAgMTYsIDB4ZDg4MCwgMCwgezB4MzIsMHhjMCwweDBkLDB4OTAsMHgxMywweDdjLDB4MDAsMHhkOSwweDAwLDB4ZjYsMHhjMCwweDJjLDB4MTAsMHgwMywweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDg5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlNCwweDAwLDB4ZjMsMHgwMCwweDNhLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDhhMCwgMCwgezB4NGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDgsMHgzYywweDAwLDB4MGYsMHgzMCwweDEzLDB4ZWMsMHgwMCwweGViLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDhiMCwgMCwgezB4YmUsMHgxOCwweDBmLDB4OTAsMHgyMywweGFjLDB4NjAsMHhlOSwweDAyLDB4M2EsMHg0MCwweDRmLDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDhjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4Y2EsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDhkMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGNkLDB4MDIsMHg3ZiwweDQwLDB4MGMsMHhmMCwweDQyLDB4M2MsMHgwMCwweGNmLDB4MDggfSB9LAoreyAgMTYsIDB4ZDhlMCwgMCwgezB4MzcsMHgxMCwweDBmLDB4ZDAsMHgwMywweGZjLDB4MTAsMHhjZCwweDA4LDB4M2YsMHg2NiwweDJjLDB4ZDksMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDhmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2MywweDgwLDB4OGIsMHhlMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDkwMCwgMCwgezB4MDgsMHhiMCwweDIyLDB4ZWMsMHgwMCwweGQ4LDB4ODAsMHg2ZSwweDIwLDB4NjgsMHhiMCwweDFhLDB4MmMsMHgwMSwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkxMCwgMCwgezB4MjIsMHgxOCwweDBiLDB4ODgsMHg0MywweDRjLDB4MDAsMHg4OCwweGEwLDB4MmMsMHhjMCwweDFkLDB4OTAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDkyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgwOCwweDgwLDB4OGIsMHgyMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDkzMCwgMCwgezB4MDgsMHhiMCwweDIyLDB4ZWMsMHgwMCwweDg4LDB4ODgsMHgyZSwweDYyLDB4NDgsMHhiMCwweDFhLDB4Y2MsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDk0MCwgMCwgezB4MjYsMHhjMCwweDRhLDB4ODgsMHgwMiwweGVjLDB4MDAsMHgwOCwweDg0LDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDk1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAwLDB4ODMsMHgwMCwweDYwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDk2MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDkwLDB4MDYsMHg2YywweDAwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweGEzLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDk3MCwgMCwgezB4MjAsMHgwMCwweDhiLDB4MDAsMHgwNiwweDRjLDB4MjEsMHg4MCwweDAwLDB4NmMsMHhjMCwweDQ5LDB4MTAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2EsMHgwMCwweGIyLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDk5MCwgMCwgezB4ODgsMHhiNCwweDAzLDB4ZWMsMHgxMCwweGM4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHhiMCwweDBiLDB4YmMsMHgwOCwweDhmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDlhMCwgMCwgezB4MzYsMHgwMCwweDA2LDB4ODAsMHgwMywweGVjLDB4ODAsMHhjOCwweDAyLDB4M2YsMHhjMSwweDBjLDB4OTAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDliMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDljMCwgMCwgezB4MGYsMHg3MiwweDgzLDB4ZmMsMHgxOCwweGZjLDB4MDMsMHgzZiwweDAwLDB4OGYsMHg3MCwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDlkMCwgMCwgezB4M2QsMHgwMCwweDBmLDB4YzAsMHgyMywweDhjLDB4MDYsMHhmYywweDAwLDB4M2YsMHg0MCwweDBlLDB4ZDAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDllMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MSwweDAzLDB4NzAsMHg0MCwweGRjLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDlmMCwgMCwgezB4MzcsMHgwNCwweDBkLDB4YzEsMHgwMywweDcwLDB4NDAsMHhkYywweDEwLDB4MzcsMHgwNCwweDBkLDB4YzEsMHgwMSwweDcwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGEwMCwgMCwgezB4OWMsMHgxMCwweDE3LDB4MTQsMHgwNSwweGMxLDB4MDMsMHg3MCwweDQwLDB4ZGMsMHgxMCwweDE3LDB4MDQsMHgwZCwweGMwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGEyMCwgMCwgezB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDIxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwMSwweDcxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGEzMCwgMCwgezB4NWMsMHg0MCwweDE3LDB4MTAsMHgwNSwweGM0LDB4MDUsMHg3MSwweDA1LDB4NWMsMHg0MSwweDU3LDB4MTAsMHgxNSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGE0MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGE1MCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGE2MCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGE4MCwgMCwgezB4MTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4MTYsMHgwMCwweDA1LDB4ODAsMHgwNSwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGE5MCwgMCwgezB4NTgsMHgwMCwweDE2LDB4MTgsMHgwMSwweDgwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgwNSwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA1LDB4MjIsMHgwMSwweDFjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGFiMCwgMCwgezB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4NDEgfSB9LAoreyAgMTYsIDB4ZGFjMCwgMCwgezB4NWMsMHg4MCwweDU3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxNSwweGMwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGFkMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGFlMCwgMCwgezB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGFmMCwgMCwgezB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGIxMCwgMCwgezB4NDIsMHgyMCwweDEwLDB4ODgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwLDB4NDIsMHgyMCwweDEwLDB4ODAsMHgwNCwweDIzLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGIyMCwgMCwgezB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHgwMCwweDQyLDB4MjAsMHgxMCwweDgwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0YSwweDA1LDB4NDIsMHg4MSwweDUwLDB4YTAgfSB9LAoreyAgMTYsIDB4ZGI0MCwgMCwgezB4NDQsMHgyYywweDExLDB4MGIsMHgwNCwweDQyLDB4ODEsMHgxMCwweGUwLDB4NTQsMHgyOCwweDExLDB4MDIsMHgwMCwweDQyLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGI1MCwgMCwgezB4MTAsMHhhMCwweDQ0LDB4MzgsMHgxMSwweDBiLDB4MDUsMHg0MiwweDgxLDB4MTAsMHgyMSwweDE0LDB4MjgsMHgxNSwweDAwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGI2MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwYywweDAxLDB4NTcsMHgwMCwweDU0LDB4YzAgfSB9LAoreyAgMTYsIDB4ZGI3MCwgMCwgezB4MTUsMHgzMCwweDA0LDB4NGMsMHgwMSwweDEzLDB4MDAsMHg1NCwweGMwLDB4MTUsMHg3MCwweDA1LDB4NGMsMHgwMSwweDUzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI4MCwgMCwgezB4NTQsMHhjMCwweDE1LDB4MzAsMHg4NSwweDRjLDB4MDEsMHgxMywweDAwLDB4NTQsMHhjMCwweDE1LDB4MzAsMHgwNSwweDQwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGI5MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJhMCwgMCwgezB4MDQsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgxMCwweDYyLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwNCwweDQxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJiMCwgMCwgezB4MTAsMHgwMCwweDQ0LDB4MTgsMHgxMSwweDAwLDB4MDAsMHgxMCwweDAwLDB4MTAsMHg4MCwweDA0LDB4MDAsMHgwMSwweDAxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg2MCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJkMCwgMCwgezB4MjAsMHg4MCwweDA4LDB4NjAsMHgwMiwweDE4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMCwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGJlMCwgMCwgezB4ODIsMHgwMCwweDAwLDB4ODAsMHg4MCwweDIwLDB4MDIsMHgxOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDAxLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGJmMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDA1LDB4NjQsMHgwMSwweDU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMwMCwgMCwgezB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4NTYsMHg0MCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGMxMCwgMCwgezB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDc2LDB4MDAsMHgxNSwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMzMCwgMCwgezB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMywweDYwLDB4MDAsMHg5OCwweDAwLDB4MzYsMHgwMCwweDFkLDB4ODgsMHgwNSwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGM0MCwgMCwgezB4ZDgsMHgwMCwweDE2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHg4MCwweDQ2LDB4MDAsMHgwZCwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGM2MCwgMCwgezB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIyLDB4NDEsMHgwOCwweDE4LDB4YzIsMHgwNCwweDMwLDB4ODkgfSB9LAoreyAgMTYsIDB4ZGM3MCwgMCwgezB4MGMsMHgyMCwweDAzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZGM4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGM5MCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGNhMCwgMCwgezB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGNjMCwgMCwgezB4MTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzMsMHgwMSwweDMwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGNkMCwgMCwgezB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgzMCwweDEzLDB4MDgsMHgwNCwweGMwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA1LDB4NjAsMHg4MSwweDU4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGNmMCwgMCwgezB4NTYsMHgwOCwweDExLDB4ODIsMHgwNSwweDYwLDB4ODEsMHg1OCwweDIwLDB4NTYsMHgwOCwweDExLDB4ODMsMHgwMCwweDYwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGQwMCwgMCwgezB4NTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgzMCwweDU2LDB4MDgsMHgxNSwweDgwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZGQxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGQyMCwgMCwgezB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDMwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGQzMCwgMCwgezB4MDgsMHgyMCwweDAyLDB4MDAsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAzLDB4MDgsMHgwMCwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGQ1MCwgMCwgezB4NDYsMHg0OCwweDExLDB4OTIsMHgwNCwweDYwLDB4ODEsMHgxOSwweDIwLDB4NDYsMHgyOCwweDExLDB4ODIsMHgwMCwweDM0LDB4ODEgfSB9LAoreyAgMTYsIDB4ZGQ2MCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4NDgsMHgxMSwweDkyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCwweDQzLDB4MDgsMHgxMSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg2MCwweDA0LDB4NTgsMHgwMSwweDU2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGQ4MCwgMCwgezB4NTUsMHg4MCwweDE1LDB4NjAsMHgwNCwweDU4LDB4MDEsMHgxNiwweDAwLDB4NTUsMHg4MCwweDAxLDB4NjAsMHgwNCwweDE4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZGQ5MCwgMCwgezB4NTYsMHgwMCwweDQ1LDB4ODAsMHgxMSwweDYwLDB4MDQsMHg1OCwweDAxLDB4MTYsMHgwMCwweDQxLDB4ODAsMHgxMSwweDQwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGRhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNiwweDAxLDB4NDEsMHg4MCwweDUwLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGRiMCwgMCwgezB4MTQsMHgxOCwweDA1LDB4MDYsMHgwMSwweDQxLDB4ODAsMHg1MCwweDYwLDB4MDQsMHgxOCwweDA1LDB4MDYsMHgwMCwweDQxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGRjMCwgMCwgezB4MTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg0MSwweDgwLDB4NTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDAwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGRlMCwgMCwgezB4MTAsMHg0OCwweDA0LDB4MTIsMHgwMSwweDAwLDB4ODAsMHg0MSwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDA0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGRmMCwgMCwgezB4NDAsMHgyMCwweDUwLDB4NDgsMHgwNCwweDEyLDB4MDEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAgfSB9LAoreyAgMTYsIDB4ZGUxMCwgMCwgezB4MzAsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNSwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDA1LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGUyMCwgMCwgezB4ZDQsMHg2MCwweDE1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHgxMSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGUzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NiwweDA1LDB4NzEsMHg4MCwweDVjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGU0MCwgMCwgezB4OTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEsMHg1YywweDIwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwMywweDcwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGU1MCwgMCwgezB4NWMsMHg2MCwweDU3LDB4MTgsMHgxMSwweGM2LDB4MDUsMHgzMSwweDgxLDB4NWMsMHg2MCwweDc3LDB4MTgsMHgxNSwweGMwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0NiwweDAzLDB4NzEsMHg4MCwweGRjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGU3MCwgMCwgezB4MzcsMHgxOCwweDBkLDB4YzYsMHgwMywweDcxLDB4ODAsMHhkZCwweDYwLDB4MzcsMHgxOCwweDA1LDB4YzYsMHgwMSwweDc1LDB4ODEgfSB9LAoreyAgMTYsIDB4ZGU4MCwgMCwgezB4ZGMsMHg2MCwweDM3LDB4MTgsMHgwZCwweGM2LDB4MDMsMHg3MSwweDg0LDB4NWMsMHg2MCwweDE3LDB4MTgsMHgxOSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0NiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGVhMCwgMCwgezB4NTcsMHgxOCwweDE0LDB4ODYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDA1LDB4YzYsMHgwNCwweDMxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGViMCwgMCwgezB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgwLDB4NWMsMHg2MCwweDQzLDB4MTgsMHgxNSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGVjMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGVkMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDcwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGVlMCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDE3LDB4MDgsMHgwNCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAxLDB4NjEsMHg4MCwweDU4LDB4NjAgfSB9LAoreyAgMTYsIDB4ZGYwMCwgMCwgezB4MTYsMHgxOCwweDQxLDB4ODYsMHgwMSwweDYxLDB4ODAsMHgxOCwweDYwLDB4MDYsMHgzYywweDA1LDB4ODYsMHgwNCwweDYxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGYxMCwgMCwgezB4MTgsMHg2MCwweDE2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4NTgsMHg2MCwweDU2LDB4MTgsMHgxNSwweDgwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZGYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MCwweDA1LDB4NzAsMHgwMSwweDVjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYzMCwgMCwgezB4NTcsMHgwMCwweDE1LDB4YzAsMHgwNCwweDcwLDB4MDEsMHg1YywweDAwLDB4NTcsMHgwMCwweDEwLDB4YzAsMHgwNCwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY0MCwgMCwgezB4MWMsMHgwMCwweDQ3LDB4MDAsMHgxMSwweGMwLDB4MDQsMHg3MCwweDAxLDB4NWMsMHgwMCwweDQ3LDB4MDAsMHgwMSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGY1MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGY2MCwgMCwgezB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAwLDB4ODIsMHgwMCwweDYwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGY3MCwgMCwgezB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGY4MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGY5MCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGZhMCwgMCwgezB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgwMCwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDA1LDB4NDAsMHg4MSwweDUwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGZjMCwgMCwgezB4NTQsMHgwOCwweDE1LDB4MDIsMHgwNSwweDQwLDB4ODEsMHgxMCwweDIwLDB4NTQsMHgwYywweDE1LDB4NDIsMHgwMCwweDQwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGZkMCwgMCwgezB4NTAsMHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDUsMHg0MCwweDgxLDB4MTAsMHgyMCwweDE0LDB4MDgsMHgwNSwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGZlMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMywweDAxLDB4NTAsMHhjMCwweDU0LDB4MzAgfSB9LAoreyAgMTYsIDB4ZGZmMCwgMCwgezB4MTUsMHgwOCwweDA1LDB4NDIsMHgwMSwweDUwLDB4YzAsMHg1NCwweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSwweDUwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTAwMCwgMCwgezB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQyLDB4MDEsMHg1MCwweGMwLDB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTAyMCwgMCwgezB4MDQsMHgyMCwweDAxLDB4ODgsMHgwMCwweDYyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgwMCwweDExLDB4MDgsMHgwMCwweDQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTAzMCwgMCwgezB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAxLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTA1MCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDIwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgyOCwweDAwLDB4MDIsMHgwMiwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTA2MCwgMCwgezB4ODAsMHgyMCwweDIwLDB4MGEsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4MDAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTA3MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTA4MCwgMCwgezB4NTYsMHgwMCwweDA1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDA4LDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNywweDYwLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTA5MCwgMCwgezB4NTgsMHgwMCwweDU2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAzLDB4MTgsMHgwMCwweDc2LDB4MDAsMHgxNSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBiMCwgMCwgezB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMSwweDYwLDB4MDAsMHhkOCwweDBhLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNSwweDcwLDB4MDkgfSB9LAoreyAgMTYsIDB4ZTBjMCwgMCwgezB4ZDgsMHgwMSwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDU3LDB4MDAsMHgwZCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MzAsMHgwMSwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBlMCwgMCwgezB4NDMsMHgwMCwweDEwLDB4YzAsMHgwMCwweDMwLDB4MDEsMHgwYywweDAwLDB4NDMsMHgyMCwweDEwLDB4YzAsMHgwNCwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTBmMCwgMCwgezB4MGMsMHgwMCwweDQzLDB4NDAsMHg1MCwweGMxLDB4MDQsMHgzMCwweDAxLDB4MGMsMHgwMCwweDQ2LDB4MDAsMHgxMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTExMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4ZDAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEyMCwgMCwgezB4MGMsMHgwMCwweDAzLDB4NDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGQsMHgwMCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NTAgfSB9LAoreyAgMTYsIDB4ZTE0MCwgMCwgezB4MTMsMHgxMCwweDA0LDB4YzQsMHgwMSwweDMxLDB4NDAsMHg0YywweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgxMSwweDMxLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTE1MCwgMCwgezB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA1LDB4NjgsMHhjMSwweDVhLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTE3MCwgMCwgezB4NTYsMHg4YywweDExLDB4YTMsMHgwNCwweDY4LDB4YzEsMHgxYSwweDMwLDB4NTYsMHg4YywweDExLDB4YTMsMHgwNSwweDY4LDB4YzAgfSB9LAoreyAgMTYsIDB4ZTE4MCwgMCwgezB4NWEsMHgzMCwweDQ2LDB4OGMsMHgxMSwweGEzLDB4MDQsMHg2OCwweGMxLDB4NWEsMHgzMCwweDE2LDB4OGMsMHgxNSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFhMCwgMCwgezB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgyMCwweDAwLDB4OTAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFiMCwgMCwgezB4MDgsMHgwMCwweDAyLDB4NDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDksMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQ0LDB4NjIsMHgwMSwweDE4LDB4ODQgfSB9LAoreyAgMTYsIDB4ZTFkMCwgMCwgezB4NDYsMHgyMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDg0LDB4NDYsMHgwMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTFlMCwgMCwgezB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCwweDA2LDB4MjEsMHgxMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NTAsMHgxMSwweDU0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTIwMCwgMCwgezB4NTUsMHgwMSwweDExLDB4NDAsMHg0NSwweDUwLDB4MTEsMHgxNCwweDAwLDB4NDUsMHgwMSwweDExLDB4NDAsMHg0NCwweDUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIxMCwgMCwgezB4MTQsMHgwNCwweDQ1LDB4MDAsMHgxNSwweDQwLDB4NDQsMHg1MCwweDExLDB4MTQsMHgwNCwweDU1LDB4MDEsMHgxMSwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIgfSB9LAoreyAgMTYsIDB4ZTIzMCwgMCwgezB4MTQsMHgyMCwweDg1LDB4MDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyLDB4MDQsMHgyMCwweDg1LDB4MDgsMHgyMSwweDQyLDB4MDggfSB9LAoreyAgMTYsIDB4ZTI0MCwgMCwgezB4NTAsMHg4MiwweDE0LDB4MjAsMHgwNSwweDA4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4NSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAgfSB9LAoreyAgMTYsIDB4ZTI2MCwgMCwgezB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDQwLDB4MGEsMHgwMSwweDAyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTI3MCwgMCwgezB4NDAsMHhhMCwweDEwLDB4MjgsMHg0NCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAgfSB9LAoreyAgMTYsIDB4ZTI5MCwgMCwgezB4MzUsMHgzMCwweDBkLDB4NGMsMHgwMSwweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgxMCwweDBjLDB4NGMsMHgwMywweDUzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJhMCwgMCwgezB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDRjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4NzIsMHgwMSwweDVjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTJjMCwgMCwgezB4MTcsMHgyMCwweDA1LDB4YzgsMHgwNiwweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzgsMHgwMiwweDcyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTJkMCwgMCwgezB4NWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDUsMHg3MiwweDAxLDB4NWMsMHg4MCwweDM3LDB4MjAsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDE4LDB4NDAsMHhjNiwweDEyLDB4MzEgfSB9LAoreyAgMTYsIDB4ZTJmMCwgMCwgezB4ODQsMHg4YywweDIxLDB4MjMsMHgwOCwweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHgwYywweDYxLDB4MjMsMHgxMCwweDQ4LDB4YzIgfSB9LAoreyAgMTYsIDB4ZTMwMCwgMCwgezB4MTIsMHgzMSwweDg0LDB4OGMsMHgwMSwweDIzLDB4MDgsMHg0OCwweGM2LDB4MTIsMHgzMSwweDA0LDB4OGMsMHg2MSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTMyMCwgMCwgezB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTMzMCwgMCwgezB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweGRiLDB4MGYsMHhiNiwweGMyLDB4Y2QgfSB9LAoreyAgMTYsIDB4ZTM4MCwgMCwgezB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGRmLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4N2UgfSB9LAoreyAgMTYsIDB4ZTM5MCwgMCwgezB4YzIsMHhjZCwweGIwLDB4YjcsMHhmZCwweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDNjLDB4NGYsMHhjZiwweDEzLDB4MzMgfSB9LAoreyAgMTYsIDB4ZTNiMCwgMCwgezB4YzQsMHhjYywweGYxLDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMywweDNmLDB4YzQsMHhjYywweGYxLDB4MzMsMHgzYywweDRjLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTNjMCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2YsMHhmZCwweDMzLDB4M2MsMHg0YywweGNmLDB4MTMsMHgzMywweGM0LDB4Y2MsMHhmMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjcgfSB9LAoreyAgMTYsIDB4ZTNlMCwgMCwgezB4ZTQsMHhlYywweDc5LDB4M2IsMHgxZSwweDRlLDB4ZGYsMHg5MywweGJmLDB4ZTQsMHg4ZCwweGY5LDB4M2IsMHg3OCwweDRlLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTNmMCwgMCwgezB4OTMsMHhiNywweGU0LDB4ZWQsMHhmZCwweDNiLDB4MWUsMHg0ZSwweGRmLDB4OTMsMHhiNywweDg0LDB4ZWQsMHhmOSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAyLDB4NzAsMHg0MCwweDljLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTQxMCwgMCwgezB4MjcsMHgxYywweDA5LDB4YzEsMHgwMSwweDMwLDB4NDAsMHgxYywweDEwLDB4NjcsMHgwNCwweDA5LDB4YzEsMHgwMiwweDcwLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTQyMCwgMCwgezB4OWMsMHgxMSwweDA3LDB4MTQsMHgwMSwweGMxLDB4MDIsMHg3MCwweDQwLDB4OWMsMHg1MCwweDA3LDB4MWMsMHgwMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTQ0MCwgMCwgezB4NTcsMHgxMCwweDU1LDB4YzQsMHgwMSwweDMxLDB4MDAsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDcxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTQ1MCwgMCwgezB4ZGMsMHg0MCwweDE3LDB4MTgsMHgxZCwweGM0LDB4MDUsMHg3MSwweDA1LDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxZCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTQ3MCwgMCwgezB4MTIsMHgwMCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTQ4MCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHg2MCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRhMCwgMCwgezB4MDYsMHgwMCwweDQxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4NDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRiMCwgMCwgezB4MTAsMHgwMCwweDA2LDB4MTAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgyMCwweDQ2LDB4MTAsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTRkMCwgMCwgezB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4MDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDczLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRlMCwgMCwgezB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGNjLDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTUwMCwgMCwgezB4MDYsMHgwMCwweDAxLDB4ODQsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTUxMCwgMCwgezB4MTgsMHgwMCwweDA2LDB4MDQsMHgwMSwweDgxLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MTQsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTUzMCwgMCwgezB4NDIsMHg3MCwweDEwLDB4OGMsMHgwNCwweDIyLDB4MDEsMHgwOCwweGMwLDB4MDIsMHgyMCwweDEwLDB4ODgsMHgwNCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU0MCwgMCwgezB4MDgsMHg4MCwweDQyLDB4NTAsMHgxMCwweDA4LDB4MDQsMHgyMiwweDAxLDB4MDksMHgwMCwweDQyLDB4NDAsMHgxMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZSwweDA0LDB4NGEsMHg4MSwweDEyLDB4YTAgfSB9LAoreyAgMTYsIDB4ZTU2MCwgMCwgezB4NDQsMHhhOCwweDExLDB4MmEsMHgwNCwweDRhLDB4ODEsMHgxMiwweGEwLDB4MDQsMHhhOCwweDExLDB4MmEsMHgwNCwweDRiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTU3MCwgMCwgezB4MTIsMHhhMCwweDQ0LDB4ODgsMHgwMSwweDJlLDB4MDQsMHg0YSwweDgxLDB4MTIsMHgyMCwweDA0LDB4OTgsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHgwZSwweDAwLDB4NTMsMHgwMCwweDE0LDB4YzAgfSB9LAoreyAgMTYsIDB4ZTU5MCwgMCwgezB4MDUsMHgzMCwweDAxLDB4NGMsMHgwMCwweDUzLDB4MDAsMHgxNCwweGUwLDB4MDUsMHgzMCwweDAxLDB4NGMsMHgwMCwweDUzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVhMCwgMCwgezB4MDQsMHhjMCwweDA1LDB4MzAsMHgwMCwweDRjLDB4MDAsMHgwMywweDAwLDB4MTQsMHhjMCwweDA1LDB4MzAsMHgwMCwweDQwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHgwNCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVjMCwgMCwgezB4MDQsMHg1OCwweDAxLDB4MDQsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVkMCwgMCwgezB4MDQsMHgwMCwweDQ0LDB4NTgsMHgxMCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MTEsMHg4MCwweDA0LDB4NTAsMHgxMCwweDQwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHg0MCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVmMCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTYwMCwgMCwgezB4ODQsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDQwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHg0MCwweDAwLDB4NjAsMHgwMSwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTYyMCwgMCwgezB4NDYsMHgwMCwweDAxLDB4ODAsMHgwNiwweDYwLDB4MDEsMHg5OCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTYzMCwgMCwgezB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHgyMCwweDAxLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDEsMHg0MCwweDAwLDB4NjAsMHgwMCwweDk4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY1MCwgMCwgezB4MjYsMHgwMCwweDA5LDB4ODAsMHgwMiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MDYsMHgwMCwweDBjLDB4ODAsMHgwMiwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY2MCwgMCwgezB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHg4MCwweDA2LDB4MDAsMHgwMSwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDAwLDB4MzAsMHg4MSwweDBjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTY4MCwgMCwgezB4NDMsMHgwOCwweDEwLDB4YzIsMHgyNCwweDMwLDB4ODEsMHg4YywweDIwLDB4MDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTY5MCwgMCwgezB4MGMsMHgyMCwweDAzLDB4MDgsMHgxOCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxOCwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTZhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZiMCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHg0MCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4ODAsMHgwMCwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZjMCwgMCwgezB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMiwweDEwLDB4MzAsMHg4MCwweDBjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTZlMCwgMCwgezB4MDMsMHgwOCwweDAwLDB4YzIsMHgwMCwweDMwLDB4ODAsMHgwYywweDIwLDB4MDMsMHgwOCwweDAwLDB4YzIsMHgwMSwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTZmMCwgMCwgezB4MGMsMHgyMCwweDAzLDB4MmMsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgzMCwweDQzLDB4MmMsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTcwMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTcxMCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTcyMCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4MGMsMHgxMSwweGMyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgxMSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTczMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTc0MCwgMCwgezB4MDIsMHgyOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTc1MCwgMCwgezB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMSwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAzLDB4MDgsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDEsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTc3MCwgMCwgezB4NDYsMHgyOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTc4MCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMCwweDgyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCwweDQzLDB4MDgsMHgxMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdhMCwgMCwgezB4NDUsMHgwMCwweDExLDB4NDAsMHgyNSwweDAwLDB4MDAsMHgxNCwweDAwLDB4NDUsMHgwMCwweDExLDB4NDAsMHgwNCwweDUwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTdiMCwgMCwgezB4MTQsMHgwMCwweDQ1LDB4MDAsMHgwMCwweDQwLDB4MDQsMHg1MCwweDAxLDB4NDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTdjMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTdkMCwgMCwgezB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTdlMCwgMCwgezB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwMiwweDA1LDB4MDAsMHg4MCwweDQwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZTgwMCwgMCwgezB4MTAsMHgwOCwweDA0LDB4MDAsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTgxMCwgMCwgezB4NDAsMHgyMCwweDUwLDB4MDgsMHgxNCwweDAyLDB4MTEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgxNCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0NiwweDAxLDB4NTEsMHg4MCwweGQ0LDB4NjAgfSB9LAoreyAgMTYsIDB4ZTgzMCwgMCwgezB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwLDB4MTUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTg0MCwgMCwgezB4NTQsMHg2MCwweDE1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTg1MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0NiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTg2MCwgMCwgezB4NDUsMHgxOCwweDExLDB4ZDYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwLDB4NjcsMHgxOCwweDExLDB4YzYsMHgwNCwweDcxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTg3MCwgMCwgezB4OWMsMHg2MCwweDQ3LDB4MTgsMHgxMSwweGM2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDY3LDB4MTgsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHg0NiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTg5MCwgMCwgezB4MjcsMHgxOCwweDA5LDB4YzYsMHgwMCwweDcxLDB4ODAsMHg5YywweDYwLDB4NjcsMHgxOCwweDA5LDB4YzYsMHgwMiwweDcxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZThhMCwgMCwgezB4OWMsMHg2MSwweDI3LDB4MTgsMHgwMSwweGM2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCwweDA3LDB4MTgsMHgwMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZThiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4NDUsMHg0NiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZThjMCwgMCwgezB4NTcsMHgxOCwweDU1LDB4ZDYsMHgwMSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZThkMCwgMCwgezB4NWMsMHg2MCwweDU3LDB4MTgsMHgxOCwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDQzLDB4MTgsMHgxOCwweDgyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZThlMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHg1MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZThmMCwgMCwgezB4MTIsMHg0OCwweDA0LDB4OTAsMHgwMSwweDIwLDB4ODAsMHg0OSwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDI0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTkwMCwgMCwgezB4NDgsMHgyMCwweDEyLDB4NDgsMHgwMCwweDkyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDE3LDB4NDgsMHgwNCwweDgwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwNiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAgfSB9LAoreyAgMTYsIDB4ZTkyMCwgMCwgezB4MDYsMHgzYywweDAxLDB4ODYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwLDB4NDYsMHgxOCwweDAxLDB4ODYsMHgwMCwweDYxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTkzMCwgMCwgezB4MTgsMHg2MCwweDA2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDQ2LDB4MTgsMHgwMSwweDgwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHg2MCwweDA0LDB4NzgsMHgwMSwweDFlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTk1MCwgMCwgezB4NDcsMHg4MCwweDExLDB4ZTAsMHgyNCwweDc4LDB4MDEsMHgxZSwweDAwLDB4MDcsMHg4MCwweDExLDB4ZTAsMHgwNCwweDc4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZTk2MCwgMCwgezB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGUwLDB4MDQsMHgzOCwweDAxLDB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTk3MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgxMiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTk4MCwgMCwgezB4MDYsMHg0OCwweDAxLDB4OTIsMHgwMCwweDYwLDB4ODAsMHgxOSwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDY0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTk5MCwgMCwgezB4MTgsMHgyMCwweDA2LDB4NDgsMHgwMSwweDkzLDB4MDAsMHgyMCwweDgwLDB4MTgsMHgyMCwweDA2LDB4NDgsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTliMCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4MDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTljMCwgMCwgezB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDhhLDB4MDQsMHg2MCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTllMCwgMCwgezB4NDQsMHgwOCwweDExLDB4MDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4MDQsMHgwOCwweDExLDB4MDIsMHgwNCwweDQwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTlmMCwgMCwgezB4MTAsMHgyMSwweDQ0LDB4MDgsMHgwMSwweDAyLDB4MDQsMHg1MCwweDgxLDB4MTAsMHgyMCwweDA0LDB4MDgsMHgwMSwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWEwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAgfSB9LAoreyAgMTYsIDB4ZWExMCwgMCwgezB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWEyMCwgMCwgezB4MTQsMHgzMCwweDA1LDB4MDgsMHgwMSwweDRhLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MDgsMHgwMSwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWE0MCwgMCwgezB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE1MCwgMCwgezB4MTAsMHg4MCwweDA0LDB4MjAsMHgxMSwweDAwLDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgxMSwweDAwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWE2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZWE3MCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMCwweDAwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWE4MCwgMCwgezB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWE5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MCwweDAwLDB4NjAsMHgwMSwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFhMCwgMCwgezB4NDYsMHgwMCwweDExLDB4ODAsMHgwNiwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWFiMCwgMCwgezB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MCwweDAyLDB4NjQsMHgwMCwweDk4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFkMCwgMCwgezB4MjYsMHgwMCwweDA5LDB4OTAsMHgwNiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MjYsMHg0MCwweDA5LDB4ODAsMHgwMiwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFlMCwgMCwgezB4OTgsMHgwMCwweDI2LDB4MDAsMHgwMCwweDkwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHgwMCwweDA3LDB4MDAsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg2MCwweDA0LDB4MzgsMHgwNSwweDBlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWIwMCwgMCwgezB4NDMsMHg4MCwweDEwLDB4ZTAsMHg0NCwweDM4LDB4MDEsMHgwZSwweDAwLDB4NDMsMHg4MCwweDEwLDB4ZTAsMHgwNCwweDM4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZWIxMCwgMCwgezB4MGUsMHgwMCwweDQzLDB4ODAsMHgxOCwweGEwLDB4MDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQ2LDB4ODAsMHgxOCwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWIyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHgwMSwweDAwLDB4MzAsMHg0MCwweDBjLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWIzMCwgMCwgezB4MDMsMHgwNCwweDAwLDB4YzUsMHgwMCwweDMwLDB4NDAsMHgwYywweDEwLDB4MDMsMHgxNCwweDAwLDB4YzEsMHgwMCwweDMwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWI0MCwgMCwgezB4MGMsMHgxMCwweDAzLDB4MDQsMHgwMCwweDg3LDB4NDAsMHgzMCwweDQwLDB4MGMsMHgxMCwweDAyLDB4MDQsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwNSwweDAwLDB4MzUsMHg0MCwweDBjLDB4NTAgfSB9LAoreyAgMTYsIDB4ZWI2MCwgMCwgezB4MDMsMHgxNCwweDAwLDB4ZDUsMHgwNCwweDMxLDB4NDEsMHgwYywweDUwLDB4MDMsMHg1YywweDAwLDB4YzUsMHgwMCwweDMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWI3MCwgMCwgezB4MGMsMHg1MCwweDAzLDB4MTAsMHgwMCwweDk0LDB4MDAsMHgzMSwweDQwLDB4MGMsMHg1MCwweDQzLDB4MTAsMHgwMCwweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MywweDA1LDB4MjAsMHhjMSwweDE4LDB4MzAgfSB9LAoreyAgMTYsIDB4ZWI5MCwgMCwgezB4NDYsMHgwYywweDExLDB4OTcsMHgwMCwweDYwLDB4YzAsMHgxOCwweDMwLDB4NDYsMHgxYywweDExLDB4ODMsMHgwNCwweDYwLDB4YzEgfSB9LAoreyAgMTYsIDB4ZWJhMCwgMCwgezB4MTgsMHgzMCwweDUyLDB4MGMsMHgxMSwweDg3LDB4MDQsMHg2MCwweGMxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgxMSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWJiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMCwweDAwLDB4MjEsMHg0MCwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJjMCwgMCwgezB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJkMCwgMCwgezB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0OCwweDQ0LDB4MjIsMHgwMSwweDE4LDB4ODQgfSB9LAoreyAgMTYsIDB4ZWJmMCwgMCwgezB4NDYsMHgyMSwweDExLDB4OTgsMHgwMCwweDYyLDB4MTAsMHgxOCwweDg0LDB4NDQsMHgyMCwweDExLDB4ODgsMHg0NCwweDYyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWMwMCwgMCwgezB4MTgsMHg4NCwweDQyLDB4MjEsMHgxMSwweDgwLDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgxMSwweDE0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWMyMCwgMCwgezB4NDUsMHgwMCwweDExLDB4NDEsMHgwMCwweDUwLDB4MTAsMHgxNCwweDAwLDB4NDUsMHgwMSwweDExLDB4NDAsMHg0NCwweDUwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWMzMCwgMCwgezB4MTQsMHgwNCwweDQ1LDB4MDEsMHgwMSwweDQwLDB4NDQsMHg1MCwweDExLDB4MTQsMHgwNCwweDA1LDB4MDEsMHgwMSwweDQwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWM0MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIgfSB9LAoreyAgMTYsIDB4ZWM1MCwgMCwgezB4MDQsMHgyMCwweDAxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDggfSB9LAoreyAgMTYsIDB4ZWM2MCwgMCwgezB4MTAsMHg4MiwweDA0LDB4MjIsMHg4MSwweDA4LDB4MjAsMHg1MiwweDA4LDB4MTAsMHg4YSwweDA0LDB4MjIsMHg4MSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4NCwweDQwLDB4YTEgfSB9LAoreyAgMTYsIDB4ZWM4MCwgMCwgezB4MTAsMHgyOCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWM5MCwgMCwgezB4NDAsMHhhMCwweDEwLDB4MmMsMHgxNCwweDBhLDB4MDAsMHgwMiwweDgwLDB4NDAsMHhiMCwweDEwLDB4MmMsMHgxNCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDAgfSB9LAoreyAgMTYsIDB4ZWNiMCwgMCwgezB4MzUsMHgzMCwweDBjLDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwLDB4MzUsMHgzNCwweDBkLDB4NGQsMHgwMywweDUzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWNjMCwgMCwgezB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDRkLDB4MDIsMHgxMywweDQwLDB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDQwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWNkMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWNlMCwgMCwgezB4NDcsMHgyMCwweDE1LDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWNmMCwgMCwgezB4MWMsMHg4MCwweDQ3LDB4MjYsMHgxMSwweGM4LDB4NDQsMHg3MiwweDAxLDB4MWMsMHg5MCwweDY3LDB4MjYsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA4LDB4NDAsMHhjNiwweDEyLDB4MzEgfSB9LAoreyAgMTYsIDB4ZWQxMCwgMCwgezB4ODQsMHg4YywweDAxLDB4MDMsMHgwOCwweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHgwYywweDYxLDB4MjMsMHgxOCwweDQ4LDB4YzIgfSB9LAoreyAgMTYsIDB4ZWQyMCwgMCwgezB4MTIsMHgzMSwweDg0LDB4OGMsMHgwMSwweDAzLDB4MDgsMHg0OCwweGM2LDB4MTIsMHgzMSwweDA0LDB4OGMsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZWQ0MCwgMCwgezB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZWQ1MCwgMCwgezB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweGZiLDB4MGYsMHhiNiwweGMyLDB4Y2QgfSB9LAoreyAgMTYsIDB4ZWRhMCwgMCwgezB4YjAsMHhiNywweGZkLDB4M2YsMHhmYiwweDBiLDB4MzYsMHhjMiwweGRmLDB4YjAsMHhmYiwweDZjLDB4MmMsMHhkYiwweDBiLDB4N2UgfSB9LAoreyAgMTYsIDB4ZWRiMCwgMCwgezB4YzIsMHhjZCwweGIwLDB4YjcsMHhmZCwweDNmLDB4ZmIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGY0LDB4YjcsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweGZjLDB4NGYsMHhjZiwweDEzLDB4MzMgfSB9LAoreyAgMTYsIDB4ZWRkMCwgMCwgezB4YzQsMHhjZiwweGZkLDB4M2YsMHhmYywweDRjLDB4Y2YsMHgxMywweDNmLDB4YzQsMHhmYywweGYxLDB4MzMsMHgzYywweDRjLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZWRlMCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2YsMHhmZCwweDNmLDB4ZmMsMHg0YywweGNmLDB4MTMsMHgzMywweGY0LDB4Y2YsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjcgfSB9LAoreyAgMTYsIDB4ZWUwMCwgMCwgezB4ZTQsMHhlZCwweGY5LDB4M2YsMHhmZSwweDRlLDB4ZGYsMHg5MywweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4YzcgfSB9LAoreyAgMTYsIDB4ZWUxMCwgMCwgezB4OTMsMHhiNywweGU0LDB4ZWMsMHg2MSwweDIzLDB4MWUsMHg0ZSwweGRmLDB4OTMsMHhiNywweDg0LDB4ZWMsMHg2MSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4MjQsMHhhMSwweDRhLDB4MjQgfSB9LAoreyAgMTYsIDB4ZWUzMCwgMCwgezB4NjMsMHgwMSwweDE0LDB4MDIsMHg0NCwweDAwLDB4ODEsMHgwYiwweDI4LDB4NzEsMHgwMiwweDEwLDB4ODIsMHg0MCwweDM4LDB4MTEgfSB9LAoreyAgMTYsIDB4ZWU0MCwgMCwgezB4NDEsMHgwNCwweDUwLDB4MDgsMHgxOCwweDgyLDB4ODcsMHgzOCwweDMxLDB4YzMsMHgyYywweDUyLDB4MGEsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQ1LDB4MTIsMHg4MSwweDQ0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWU2MCwgMCwgezB4NzEsMHgyMSwweDFjLDB4MGEsMHgwNywweDFhLDB4ODEsMHgwMiwweGEwLDB4NTIsMHgyMCwweDE0LDB4NDgsMHgwNywweDEyLDB4ODEgfSB9LAoreyAgMTYsIDB4ZWU3MCwgMCwgezB4YzYsMHg4MCwweDYwLDB4MjAsMHgwOCwweDg4LDB4NDcsMHgwMiwweDAxLDB4NGEsMHg4MCwweDcwLDB4MjAsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweGM1LDB4MmMsMHgwMSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU5MCwgMCwgezB4NTIsMHgwOSwweDFjLDB4ODAsMHgwNywweDI0LDB4MjEsMHgwOCwweDA4LDB4NzEsMHgwMiwweDEwLDB4ODAsMHg0NSwweDIwLDB4YTEgfSB9LAoreyAgMTYsIDB4ZWVhMCwgMCwgezB4NDksMHgyOCwweDUyLDB4MDEsMHgxNCwweGMwLDB4NDUsMHgwMCwweDkxLDB4YzQsMHgwMCwweDcyLDB4MDIsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDA3LDB4MjAsMHgwMSwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWVjMCwgMCwgezB4NzEsMHgwOSwweDEwLDB4ODAsMHgwNywweDAwLDB4MDEsMHgwMSwweDAwLDB4NzAsMHgwOCwweDE4LDB4ODAsMHgwNywweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWVkMCwgMCwgezB4ODksMHgyMCwweDUyLDB4MDEsMHgwYywweDgwLDB4NDYsMHgzMCwweDgxLDB4NDUsMHgwNCwweDYwLDB4MDAsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMyLDB4MDIsMHgyMCwweDAwLDB4ODggfSB9LAoreyAgMTYsIDB4ZWVmMCwgMCwgezB4MjAsMHgyMiwweDAwLDB4MDgsMHhjMiwweDIyLDB4ODAsMHg0MCwweDg4LDB4MDIsMHgyMiwweDAwLDB4MDgsMHg4MiwweDBhLDB4YTAgfSB9LAoreyAgMTYsIDB4ZWYwMCwgMCwgezB4MGMsMHhhOCwweDAyLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwYSwweDAwLDB4ODAsMHg4YywweDAyLDB4MjIsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDQzLDB4MDAsMHgwMCwweDQwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZWYyMCwgMCwgezB4MzAsMHgwOCwweDA0LDB4NDAsMHg0MSwweDMwLDB4MTAsMHhjOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMywweDAwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWYzMCwgMCwgezB4YzAsMHgwMCwweDExLDB4MDgsMHgwMCwweGMyLDB4NDMsMHgxMCwweDgwLDB4YzAsMHgyMCwweDAxLDB4MDgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweGMzLDB4MGEsMHgyMCwweGMxLDB4OGMgfSB9LAoreyAgMTYsIDB4ZWY1MCwgMCwgezB4MTIsMHgyMiwweDA0LDB4ODgsMHgwMSwweDM2LDB4MjAsMHhjMywweDA4LDB4MTIsMHgyOCwweDA0LDB4MDgsMHgwMSwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY2MCwgMCwgezB4NGEsMHhhOCwweDIyLDB4MDEsMHgwNCwweGM4LDB4NDEsMHgyNiwweDMwLDB4YzAsMHg4OCwweDAyLDB4MjEsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAwLDB4MGEsMHgxMCwweGMxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWY4MCwgMCwgezB4MzIsMHgyMSwweDBjLDB4ODgsMHg0MywweDAyLDB4ODAsMHg0NCwweDgwLDB4MTIsMHgyOSwweDA0LDB4MDgsMHg0MiwweDBhLDB4OTAgfSB9LAoreyAgMTYsIDB4ZWY5MCwgMCwgezB4OGEsMHg4MCwweDAwLDB4MjAsMHgwNCwweDQ4LDB4MDMsMHgwYSwweDEwLDB4ODIsMHg4MCwweDAwLDB4MjAsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDg3LDB4MDIsMHhhMSwweDgwLDB4YWMgfSB9LAoreyAgMTYsIDB4ZWZiMCwgMCwgezB4NDMsMHgyOSwweDE0LDB4OGEsMHg4NCwweDAyLDB4YTEsMHgwMCwweGFjLDB4NDEsMHgyMCwweDEwLDB4MDgsMHgwNiwweDI2LDB4MzEgfSB9LAoreyAgMTYsIDB4ZWZjMCwgMCwgezB4ODAsMHhhNCwweDYwLDB4MjAsMHgxNCwweDRhLDB4NDQsMHgzMiwweDgxLDB4ODEsMHhhYywweDYwLDB4MmEsMHgxOCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA3LDB4MjIsMHgwMSwweGM1LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWZlMCwgMCwgezB4NzMsMHgyMSwweDFjLDB4YzgsMHgwNywweDJhLDB4MDEsMHgwYywweDgwLDB4NzIsMHgyMCwweDEwLDB4NDgsMHg0NywweDI2LDB4MTEgfSB9LAoreyAgMTYsIDB4ZWZmMCwgMCwgezB4YzUsMHg4MCwweDczLDB4MjAsMHgxYywweDg4LDB4MDcsMHgyYSwweDExLDB4NDksMHg4MCwweDcwLDB4MjAsMHgxNCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjAwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDQ1LDB4MTAsMHgzMSwweGM5LDB4MGMgfSB9LAoreyAgMTYsIDB4ZjAxMCwgMCwgezB4NzMsMHgwMiwweDFjLDB4YzAsMHg0NywweDA0LDB4MDEsMHgwYSwweDBjLDB4NTEsMHgwYSwweDEwLDB4ODIsMHg0NywweDIwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZjAyMCwgMCwgezB4YzgsMHgwMCwweDcyLDB4MDIsMHgxYywweDQwLDB4MDUsMHgzMCwweDExLDB4YzQsMHgwMCwweDcyLDB4MDEsMHgxOCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHgxMCwweDA2LDB4MjQsMHgwMSwweDQ1LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjA0MCwgMCwgezB4NTEsMHg4MSwweDE4LDB4OTAsMHg0NywweDE0LDB4MDEsMHgwNCwweDA0LDB4NzEsMHg4OCwweDEwLDB4MTIsMHgwNSwweDM0LDB4MDEgfSB9LAoreyAgMTYsIDB4ZjA1MCwgMCwgezB4NDQsMHgwNCwweDUxLDB4NDAsMHgxOCwweGQwLDB4MDcsMHgzOCwweDAxLDB4YzQsMHgwNCwweDUyLDB4MDEsMHgxNCwweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg3LDB4MDAsMHgyMSwweDg5LDB4MGMgfSB9LAoreyAgMTYsIDB4ZjA3MCwgMCwgezB4NjAsMHgwMSwweDFjLDB4ZDAsMHg0NSwweDI0LDB4MDEsMHhjMSwweDBjLDB4NDIsMHgwMSwweDAwLDB4MDAsMHhjNSwweDIwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZjA4MCwgMCwgezB4NDEsMHgwOCwweDQwLDB4MDAsMHgxOCwweDgwLDB4NDUsMHgwMCwweDIxLDB4NDEsMHgwYywweDcwLDB4NDIsMHgxYywweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MWMsMHg4MCwweGM0LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjBhMCwgMCwgezB4MzEsMHgwOCwweDEwLDB4NDIsMHg0MiwweDA4LDB4ODAsMHhjNiwweDIwLDB4MzEsMHgwOSwweDAwLDB4MjAsMHgwMywweDFjLDB4OTAgfSB9LAoreyAgMTYsIDB4ZjBiMCwgMCwgezB4YzQsMHgyMCwweDAxLDB4NDksMHgwYywweDQyLDB4NDMsMHgxMCwweDgwLDB4NDQsMHgyMCwweDMxLDB4MDgsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDgzLDB4MjAsMHgzMCwweDQ4LDB4MGMgfSB9LAoreyAgMTYsIDB4ZjBkMCwgMCwgezB4MzIsMHg0MCwweDEwLDB4OTAsMHg4MSwweDI0LDB4MjAsMHhjOCwweDA0LDB4MzIsMHg0MCwweDEwLDB4MjAsMHhjMywweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjBlMCwgMCwgezB4YzgsMHgwMCwweDAyLDB4NGEsMHgwYywweGEwLDB4MDEsMHgyNCwweDEwLDB4YzgsMHgwOCwweDMyLDB4NDEsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDAzLDB4MDAsMHgwMCwweGM5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjEwMCwgMCwgezB4MzAsMHg0MCwweDAwLDB4OTAsMHgwMCwweDIwLDB4MDAsMHg4MCwweDAwLDB4MTAsMHg0MCwweDEwLDB4MDAsMHg0MCwweDIwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZjExMCwgMCwgezB4YzIsMHgwMCwweDAwLDB4ODAsMHgwOCwweDIwLDB4NDMsMHgwOCwweDEwLDB4ODEsMHgwMCwweDMyLDB4NDAsMHgwYywweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjEyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjEzMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4ZjAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4ZjAsMHgxMCwweDgwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGYwLDB4MTAsMHg5MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4M2MsMHgxMCwweDgwLDB4OTAsMHg0MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE2MCwgMCwgezB4MDAsMHg4MCwweDEwLDB4OTAsMHhhMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhmLDB4MGYgfSB9LAoreyAgMTYsIDB4ZjE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweGM2LDB4YmEsMHgwNiwweGMwLDB4MWMgfSB9LAoreyAgMTYsIDB4ZjE5MCwgMCwgezB4NDksMHgyOCwweDYxLDB4MTQsMHgyYiwweDFjLDB4MGUsMHg0MCwweDNmLDB4ZDksMHhiZiwweGQ5LDB4YWEsMHhiYywweDFhLDB4NWYgfSB9LAoreyAgMTYsIDB4ZjFhMCwgMCwgezB4MDAsMHgxMCwweGE2LDB4NTAsMHgzYiwweDYxLDB4YjMsMHgyNSwweGJjLDB4NDAsMHgxOSwweGJmLDB4ZmYsMHhlOSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkyLDB4MTQsMHg5NCwweDgwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjFjMCwgMCwgezB4MDcsMHgzZiwweDJiLDB4OTQsMHg4NiwweDE0LDB4ODQsMHg4MCwweDI4LDB4MDAsMHgwMCwweDQ5LDB4MTQsMHgwNCwweDg2LDB4MTIgfSB9LAoreyAgMTYsIDB4ZjFkMCwgMCwgezB4ODAsMHgwMCwweDQxLDB4MjcsMHgzNCwweGQwLDB4OTAsMHg4NCwweDkyLDB4MDAsMHgyZCwweDhhLDB4MjEsMHgxZSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTIgfSB9LAoreyAgMTYsIDB4ZjFmMCwgMCwgezB4YjEsMHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg0LDB4YjEsMHg3OCwweDI4LDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjIwMCwgMCwgezB4MDgsMHhiMSwweDMyLDB4MTQsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhhOCwweDIzLDB4NTQsMHgyMSwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MmYsMHhmZiwweGZlLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhkNywweGZlLDB4ZWYgfSB9LAoreyAgMTYsIDB4ZjIzMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MGYsMHhlZiwweDc3LDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhmZiwweGZlLDB4ZWYgfSB9LAoreyAgMTYsIDB4ZjI2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhiZiwweGZmLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjI5MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4N2YsMHgyZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MWYsMHhmZiwweGZmLDB4ZWYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhlZiwweGVmLDB4ZWYgfSB9LAoreyAgMTYsIDB4ZjJjMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGVmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhhZiwweGRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjJmMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZWYsMHhmZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhkZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjMyMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweGM0LDB4MjQsMHhhMSwweDAwLDB4MmMgfSB9LAoreyAgMTYsIDB4ZjM0MCwgMCwgezB4NTIsMHgwYiwweDE4LDB4YzIsMHg4NiwweDJjLDB4YTEsMHg4MCwweDM4LDB4NjIsMHgwYSwweDA4LDB4NDAsMHhjNCwweDJjLDB4YTEgfSB9LAoreyAgMTYsIDB4ZjM1MCwgMCwgezB4MDgsMHgyOCwweDQyLDB4MGIsMHgxNCwweDAwLDB4ODUsMHgxNCwweGExLDB4MDgsMHgyOCwweDQzLDB4MGEsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MTIsMHgwMSwweDAzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjM3MCwgMCwgezB4NjEsMHgyMCwweDEwLDB4MDgsMHgwNywweDEyLDB4NDEsMHg0MiwweDgwLDB4NzAsMHgyMCwweDFjLDB4MDgsMHgwNCwweDFhLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjM4MCwgMCwgezB4ODQsMHg4MSwweDQwLDB4MjAsMHgxOCwweDA4LDB4NDYsMHgzNiwweDgxLDB4MDUsMHg4MCwweDYzLDB4MjAsMHgxMCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjM5MCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4MjQsMHgyMSwweDAwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjNhMCwgMCwgezB4NTIsMHgwMiwweDE0LDB4MDAsMHg4NywweDI4LDB4MjEsMHg4MSwweDA4LDB4NzIsMHgwNiwweDFjLDB4ODIsMHg4NCwweDIwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZjNiMCwgMCwgezB4NDgsMHgxOCwweDQyLDB4MDMsMHg1NCwweDgwLDB4NDUsMHgzMCwweDI1LDB4NGEsMHgxOCwweDUzLDB4MDIsMHgxMCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjNjMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjIsMHgwMSwweDAxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjNkMCwgMCwgezB4NDIsMHgyMCwweDE4LDB4YzgsMHg0NCwweDIyLDB4MDEsMHg4MCwweDg0LDB4NDIsMHgyMCwweDFjLDB4ODgsMHgwNCwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjNlMCwgMCwgezB4MDAsMHg4MCwweDQwLDB4MjAsMHgxMCwweDg4LDB4NDQsMHgzNiwweDAxLDB4NDAsMHg4MCwweDQxLDB4MDAsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDgsMHgyMCwweDAwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjQwMCwgMCwgezB4MjIsMHgwMywweDA0LDB4NDAsMHg4MSwweDAwLDB4MjAsMHg4NCwweDA4LDB4MDMsMHgwMCwweDAwLDB4ODAsMHhjMiwweDAwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQxMCwgMCwgezB4YzQsMHgwOCwweDAwLDB4MDMsMHgwOCwweDg4LDB4ODIsMHgxNiwweGEwLDB4NDAsMHg4OCwweDMyLDB4MjIsMHg4MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAxLDB4MDAsMHg4MCwweDA0LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQzMCwgMCwgezB4MTAsMHgwOCwweDBjLDB4YzIsMHgxMiwweDEwLDB4ODQsMHhjOCwweDIyLDB4MTIsMHgwOCwweDA0LDB4MDIsMHgwMywweDAwLDB4ODggfSB9LAoreyAgMTYsIDB4ZjQ0MCwgMCwgezB4MDAsMHgyMSwweDAwLDB4MGMsMHgwYywweDQwLDB4NDEsMHgzMCwweDAwLDB4ODQsMHgyMCwweDEwLDB4MDgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDgyLDB4MDYsMHgyMCwweDA4LDB4OGMgfSB9LAoreyAgMTYsIDB4ZjQ2MCwgMCwgezB4MzIsMHgyMiwweDBjLDB4ODgsMHg4MSwweDI2LDB4MjAsMHg0ZCwweDg4LDB4MjMsMHgyMiwweDgwLDB4ODgsMHg4MywweDA2LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQ3MCwgMCwgezB4MDgsMHg4OCwweDAwLDB4MjMsMHgwNCwweDhhLDB4ODEsMHgzNiwweDIwLDB4NGIsMHg4OCwweDMyLDB4MjIsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAyLDB4MDIsMHgwMCwweDA5LDB4ODAgfSB9LAoreyAgMTYsIDB4ZjQ5MCwgMCwgezB4MzIsMHgyMCwweDA0LDB4ODgsMHg2MCwweDIyLDB4MDAsMHg4OSwweDg0LDB4MDAsMHgyMCwweDA4LDB4OTgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRhMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDIsMHgzYSwweDgwLDB4NDgsMHg4MCwweDMwLDB4MjAsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwYSwweGM0LDB4MWEsMHhhMSwweDgwLDB4YTggfSB9LAoreyAgMTYsIDB4ZjRjMCwgMCwgezB4NDEsMHgyYSwweDEwLDB4Y2EsMHhjNywweDFhLDB4YTEsMHgwNCwweGFkLDB4NzEsMHgyYSwweDE4LDB4NGEsMHhkNCwweDA2LDB4YjEgfSB9LAoreyAgMTYsIDB4ZjRkMCwgMCwgezB4MDAsMHhhOCwweDcxLDB4MmEsMHgxMCwweDA4LDB4ODQsMHgyNiwweDI5LDB4MDYsMHhhYywweDUyLDB4MmEsMHgxMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MmEsMHgwMSwweDQxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjRmMCwgMCwgezB4NDIsMHgyMCwweDFjLDB4MDAsMHgwNCwweDBhLDB4MDEsMHgwOSwweDg0LDB4NTEsMHgyMCwweDFjLDB4ODgsMHg0NCwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjUwMCwgMCwgezB4MDgsMHg4MCwweDQwLDB4MjAsMHgxMCwweDRhLDB4NDcsMHgwMiwweDAxLDB4NDgsMHg4MCwweDYzLDB4MjAsMHgxMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjUxMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweGM0LDB4MTAsMHgyMSwweDgxLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjUyMCwgMCwgezB4NDEsMHgwMiwweDBjLDB4MDAsMHhjMCwweDIwLDB4NjEsMHgwZCwweDBlLDB4NzIsMHgwMiwweDFjLDB4NDAsMHhjNCwweDA4LDB4MzEgfSB9LAoreyAgMTYsIDB4ZjUzMCwgMCwgezB4MDQsMHgxOCwweDQyLDB4MDIsMHgxMCwweDgwLDB4ODcsMHgyMCwweGIxLDB4YzQsMHgwYywweDUzLDB4MDIsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHgyMCwweDA3LDB4MjQsMHgwMSwweGNjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjU1MCwgMCwgezB4NzIsMHg0MCwweDE0LDB4MDAsMHgwNCwweDI0LDB4MDEsMHgwOCwweDAwLDB4NzMsMHg0MSwweDEwLDB4YzAsMHgwNywweDMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZjU2MCwgMCwgezB4Y2MsMHgwMCwweDcxLDB4MDEsMHgxMCwweDAyLDB4MDQsMHgyMCwweDgxLDB4NDYsMHgxMCwweDQyLDB4NDAsMHgxMCwweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweGM1LDB4MTAsMHgyMSwweDAwLDB4MDggfSB9LAoreyAgMTYsIDB4ZjU4MCwgMCwgezB4NjIsMHgwMiwweDFjLDB4OTAsMHhjNSwweDI0LDB4MjEsMHgwMCwweDBjLDB4NzAsMHg4MiwweDFjLDB4MTAsMHhjNCwweDIwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZjU5MCwgMCwgezB4ODgsMHgwMiwweDQwLDB4MDYsMHgxYywweDAwLDB4ODUsMHgwMCwweGExLDB4MDAsMHgwYywweDQwLDB4NDIsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMiwweDA1LDB4MTQsMHg4MCwweDAxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZjViMCwgMCwgezB4MzAsMHgwOCwweDBjLDB4NDIsMHgwNiwweDAwLDB4ODAsMHgwMSwweDI0LDB4NTEsMHgwOCwweDBjLDB4MDIsMHg0MSwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjVjMCwgMCwgezB4NGMsMHgyMCwweDAwLDB4MDgsMHgwYywweDMwLDB4NDIsMHgwNCwweDAwLDB4MDQsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGM2LDB4MjQsMHgyMCwweDAwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjVlMCwgMCwgezB4MzIsMHhjMiwweDA0LDB4ODAsMHhjNywweDMwLDB4MjAsMHgwMCwweDBjLDB4NTMsMHhjMiwweDA0LDB4MTAsMHhjMiwweDI4LDB4NzAgfSB9LAoreyAgMTYsIDB4ZjVmMCwgMCwgezB4MGMsMHgwOSwweDAyLDB4MDIsMHg0YywweDgwLDB4ODEsMHgwNCwweDMwLDB4MDksMHgwYywweDAyLDB4NDIsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4MCwweDAxLDB4MzgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYxMCwgMCwgezB4MTIsMHg0MCwweDBjLDB4MjAsMHgwNywweDM0LDB4MDQsMHgwMiwweDAwLDB4NjMsMHgwMSwweDA4LDB4MTAsMHgwMCwweDI0LDB4MTAgfSB9LAoreyAgMTYsIDB4ZjYyMCwgMCwgezB4MDQsMHgwMCwweDAyLDB4MDEsMHgwNCwweDgyLDB4MDEsMHgwOCwweDgwLDB4MDksMHgxMCwweDAyLDB4NDAsMHgxMCwweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjYzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDIwLDB4MTAsMHg4MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY0MCwgMCwgezB4MjAsMHg4MCwweDAwLDB4ZjAsMHgyMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MjAsMHg4MCwweDAwLDB4ZDAsMHg4MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MTAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4M2MsMHgxMCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY3MCwgMCwgezB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDAwLDB4OTAgfSB9LAoreyAgMTYsIDB4ZjY4MCwgMCwgezB4ODAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgxMCwweDhjLDB4MDggfSB9LAoreyAgMTYsIDB4ZjY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDFhLDB4YmUsMHgxNywweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjZhMCwgMCwgezB4M2UsMHg0MCwweDI2LDB4NmYsMHhiYSwweGUzLDB4MjQsMHg4MCwweDAwLDB4MTYsMHg1OSwweGJkLDB4ODIsMHg4MSwweDgyLDB4ZDggfSB9LAoreyAgMTYsIDB4ZjZiMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MTksMHg5OSwweDg2LDB4ODAsMHg2NCwweDgwLDB4YzAsMHgzZiwweGQ5LDB4OTksMHg4MCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjZjMCwgMCwgezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDE2LDB4MDIsMHg5NCwweDAwLDB4MTYgfSB9LAoreyAgMTYsIDB4ZjZkMCwgMCwgezB4YzAsMHgxNiwweDk0LDB4ODIsMHg5MCwweDE2LDB4MTAsMHg4MCwweDIxLDB4MTgsMHgyOCwweDI4LDB4MDIsMHgwYSwweDAyLDB4MDggfSB9LAoreyAgMTYsIDB4ZjZlMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODIsMHg4MCwweDE0LDB4MDAsMHgwMSwweDE0LDB4MTEsMHhhMCwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODQgfSB9LAoreyAgMTYsIDB4ZjcwMCwgMCwgezB4MDIsMHg4NCwweGE4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDkxLDB4MjIsMHg4NCwweDQxLDB4YTIsMHgwOCwweDI0LDB4MDEgfSB9LAoreyAgMTYsIDB4ZjcxMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4NCwweDAxLDB4NDQsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2UsMHhmNywweGZmLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhlNywweGI3LDB4ZmYgfSB9LAoreyAgMTYsIDB4Zjc0MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmUsMHg3ZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MzYsMHhiZiwweGZlLDB4ZGYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHhmNywweGRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4Zjc3MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNkLDB4YjcsMHhiNywweGVmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MWYsMHhkZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHhkZiwweGRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjdhMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZWYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhiZiwweDdmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweDdmLDB4ZjcgfSB9LAoreyAgMTYsIDB4ZjdkMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHg3ZSwweGZmLDB4ZmYsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZSwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjgwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MzcsMHhmZiwweDZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjgzMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgyMCwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg4MCwgMCwgezB4MzAsMHgwMCwweDQzLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZjkwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZjljMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ZmE4MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTMsMHg2YiwweDAwLDB4YzAsMHgwMCwweGNmLDB4MmMgfSB9LAoreyAgMTYsIDB4ZmI0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmMwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmNjMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ZmQ4MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MzMsMHg1ZCwweDgwLDB4YzAsMHgwMCwweGZkLDB4YWMgfSB9LAoreyAgMTYsIDB4ZmU0MCwgMCwgezB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmYwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmZjMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODAyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ODA5MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTMsMHg3NCwweGMwLDB4YzAsMHgwMCwweGYwLDB4ZWMgfSB9LAoreyAgMTYsIDB4ODE1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ODIxMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTksMHg4NiwweDEwLDB4ODAsMHgzMCwweDgyLDB4M2QgfSB9LAoreyAgMTYsIDB4ODJkMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ODM5MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM3LDB4NjUsMHgyNSwweGU0LDB4ODAsMHgwMCwweGIwLDB4ODggfSB9LAoreyAgMTYsIDB4ODQ1MCwgMCwgezB4YWIsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDIsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODcxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODljMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDQsMHg3MiwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4OTBlMCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA1LDB4MzAsMHgwMCwweGEwLDB4MDEgfSB9LAoreyAgMTYsIDB4OTEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHhlMSwweDVhLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTIsIDB4OTEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDAgLCAweDAwMDAsIDEsIHswIH19Cit9OworLy8gVkVSU0lPTj0xLjEuMS4xMzEKKy8vIERBVEU9MjAwMWRlYzA2CisvLyBQUk9EVUNUPUVNSSAyfDYKKy8qCisgKiBUaGlzIGZpcm13YXJlIGlzIGZvciB0aGUgRW1hZ2ljIEVNSSAyfDYgQXVkaW8gSW50ZXJmYWNlCisgKgorICogVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gaXMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgRW1hZ2ljCisgKiBhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQKKyAqIG9yIHB1YmxpYyBhY2Nlc3MgdG8gdGhpcyBmaXJtd2FyZSB3aGljaCBpcyBhIHRyYWRlIHNlY3JldCBvZiBFbWFnaWMsCisgKiBhbmQgd2hpY2ggbWF5IG5vdCBiZSByZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvCisgKiBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCBFbWFnaWMncyB3cml0dGVuIGNvbnNlbnQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggdGhlCisgKiBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UuIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mCisgKiBhbnkgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsCisgKiByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LgorICovCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX0Zpcm13YXJlW10gPSB7Cit7ICAgMywweDAwMDAsMCx7MHgwMiwweDQzLDB4NTZ9IH0sCit7ICAgMywweDAwMDMsMCx7MHgwMiwweDRiLDB4Y2R9IH0sCit7ICAgMywweDAwMGIsMCx7MHgwMiwweDRiLDB4ZDJ9IH0sCit7ICAgMywweDAwMTMsMCx7MHgwMiwweDRiLDB4OTJ9IH0sCit7ICAgMywweDAwMWIsMCx7MHgwMiwweDRiLDB4ZDV9IH0sCit7ICAgMywweDAwMjMsMCx7MHgwMiwweDFiLDB4Mzl9IH0sCit7ICAgMywweDAwMmIsMCx7MHgwMiwweDQzLDB4ZTJ9IH0sCit7ICAgMywweDAwMzMsMCx7MHgwMiwweDNmLDB4ZjN9IH0sCit7ICAgMywweDAwM2IsMCx7MHgwMiwweDRiLDB4YzB9IH0sCit7ICAgMywweDAwNDMsMCx7MHgwMiwweDQ3LDB4MDB9IH0sCit7ICAgMywweDAwNGIsMCx7MHgwMiwweDNmLDB4ZmN9IH0sCit7ICAgMywweDAwNTMsMCx7MHgwMiwweDM3LDB4ZmF9IH0sCit7ICAgMywweDAwNWIsMCx7MHgwMiwweDRiLDB4Yzd9IH0sCit7ICAgMywweDAwNjMsMCx7MHgwMiwweDQ2LDB4ZmN9IH0sCit7ICAxNiwweDA1MDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MDUxMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4YjgsMHgwMSwweDAzLDB4MDEsMHgwMCwweDgwLDB4YTAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgwNTIwLDAsezB4MDEsMHgwMSwweDAwLDB4MDAsMHgwYSwweDI0LDB4MDEsMHgwMCwweDAxLDB4NTYsMHgwMCwweDAyLDB4MDEsMHgwMiwweDBjLDB4MjR9IH0sCit7ICAxNiwweDA1MzAsMCx7MHgwMiwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4MjQsMHgwNiwweDA1LDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MDU0MCwwLHsweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5fSB9LAoreyAgMTYsMHgwNTUwLDAsezB4MjQsMHgwMywweDAyLDB4MDQsMHgwMywweDAwLDB4MDUsMHgwMCwweDBjLDB4MjQsMHgwMiwweDAzLDB4MDEsMHgwMiwweDAwLDB4MDJ9IH0sCit7ICAxNiwweDA1NjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MjQsMHgwNiwweDA2LDB4MDMsMHgwMiwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MDU3MCwwLHsweDAwLDB4MDksMHgyNCwweDAzLDB4MDQsMHgwMSwweDAxLDB4MDAsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxLDB4MDAsMHgwMCwweDAxfSB9LAoreyAgMTYsMHgwNTgwLDAsezB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAxLDB4MDEsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDF9IH0sCit7ICAxNiwweDA1OTAsMCx7MHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYn0gfSwKK3sgIDE2LDB4MDVhMCwwLHsweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDBhLDB4MDUsMHg4NCwweDAxLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxfSB9LAoreyAgMTYsMHgwNWIwLDAsezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA2LDB4MDAsMHgwOSwweDA0LDB4MDF9IH0sCit7ICAxNiwweDA1YzAsMCx7MHgwMiwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMSwweDAwLDB4MDEsMHgwMCwweDBlLDB4MjQsMHgwMn0gfSwKK3sgIDE2LDB4MDVkMCwwLHsweDAxLDB4MDYsMHgwMiwweDEwLDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwOSwweDA1LDB4MGEsMHgwNSwweDRjfSB9LAoreyAgMTYsMHgwNWUwLDAsezB4MDIsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDUsMHg4ZiwweDAxLDB4MDN9IH0sCit7ICAxNiwweDA1ZjAsMCx7MHgwMCwweDAxLDB4MDYsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAzLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMX0gfSwKK3sgIDE2LDB4MDYwMCwwLHsweDAxLDB4MDAsMHgwMSwweDAwLDB4MGUsMHgyNCwweDAyLDB4MDEsMHgwNiwweDAzLDB4MTgsMHgwMiwweDQ0LDB4YWMsMHgwMCwweDgwfSB9LAoreyAgMTYsMHgwNjEwLDAsezB4YmIsMHgwMCwweDA5LDB4MDUsMHgwYSwweDA1LDB4NzIsMHgwMywweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMSwweDAxLDB4MDB9IH0sCit7ICAxNiwweDA2MjAsMCx7MHgwMCwweDAwLDB4MDksMHgwNSwweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxLDB4MDQsMHgwMn0gfSwKK3sgIDE2LDB4MDYzMCwwLHsweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMSwweDAyfSB9LAoreyAgMTYsMHgwNjQwLDAsezB4MDMsMHgxOCwweDAxLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDBhLDB4MDUsMHg0NiwweDAyLDB4MDEsMHgwMCwweDhmLDB4MDd9IH0sCit7ICAxNiwweDA2NTAsMCx7MHgyNSwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA2LDB4MDAsMHgwOX0gfSwKK3sgIDE2LDB4MDY2MCwwLHsweDA0LDB4MDIsMHgwMCwweDAwLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMiwweDAwfSB9LAoreyAgMTYsMHgwNjcwLDAsezB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxLDB4MDIsMHgwMiwweDEwLDB4MDN9IH0sCit7ICAxNiwweDA2ODAsMCx7MHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4OGMsMHgwNSwweDg0LDB4MDEsMHgwMX0gfSwKK3sgIDE2LDB4MDY5MCwwLHsweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMiwweDAyLDB4MDEsMHgwMSwweDAyfSB9LAoreyAgMTYsMHgwNmEwLDAsezB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDEsMHgwMiwweDAzLDB4MTh9IH0sCit7ICAxNiwweDA2YjAsMCx7MHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHg4YywweDA1LDB4NDYsMHgwMn0gfSwKK3sgIDE2LDB4MDZjMCwwLHsweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDUsMHgwYywweDA5LDB4MDEsMHhhMSwweDAxfSB9LAoreyAgMTYsMHgwNmQwLDAsezB4MDUsMHgwYywweDA5LDB4ZTksMHgwNSwweDBjLDB4MDksMHhlYSwweDE1LDB4MDAsMHgyNSwweDAxLDB4OTUsMHgwMiwweDc1LDB4MDF9IH0sCit7ICAxNiwweDA2ZTAsMCx7MHg4MSwweDQyLDB4OTUsMHgwMSwweDc1LDB4MDYsMHg4MSwweDAxLDB4MDUsMHgwYywweDA5LDB4MDAsMHgwNSwweDBjLDB4MDksMHgwMH0gfSwKK3sgIDE2LDB4MDZmMCwwLHsweDE1LDB4MDAsMHgyNSwweDAxLDB4OTUsMHgwMiwweDc1LDB4MDEsMHg5MSwweDA2LDB4OTUsMHgwMSwweDc1LDB4MDYsMHg5MSwweDAzfSB9LAoreyAgMTYsMHgwNzAwLDAsezB4YzAsMHgwNCwweDAzLDB4MDksMHgwNCwweDE4LDB4MDMsMHg0NSwweDAwLDB4NGQsMHgwMCwweDQxLDB4MDAsMHg0NywweDAwLDB4NDl9IH0sCit7ICAxNiwweDA3MTAsMCx7MHgwMCwweDQzLDB4MDAsMHgyMCwweDAwLDB4NDcsMHgwMCwweDZkLDB4MDAsMHg2MiwweDAwLDB4NDgsMHgwMCwweDFlLDB4MDMsMHg0NX0gfSwKK3sgIDE2LDB4MDcyMCwwLHsweDAwLDB4NmQsMHgwMCwweDYxLDB4MDAsMHg2NywweDAwLDB4NjksMHgwMCwweDYzLDB4MDAsMHgyMCwweDAwLDB4NDUsMHgwMCwweDRkfSB9LAoreyAgMTYsMHgwNzMwLDAsezB4MDAsMHg0OSwweDAwLDB4MjAsMHgwMCwweDMyLDB4MDAsMHg3YywweDAwLDB4MzYsMHgwMCwweDJhLDB4MDMsMHg0MywweDAwLDB4NmZ9IH0sCit7ICAxNiwweDA3NDAsMCx7MHgwMCwweDZlLDB4MDAsMHg2NiwweDAwLDB4NjksMHgwMCwweDY3LDB4MDAsMHg3NSwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg3NH0gfSwKK3sgIDE2LDB4MDc1MCwwLHsweDAwLDB4NjksMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5fSB9LAoreyAgMTYsMHgwNzYwLDAsezB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDIyLDB4MDMsMHg0OSwweDAwLDB4NmUsMHgwMCwweDc0LDB4MDAsMHg2NSwweDAwLDB4NzJ9IH0sCit7ICAxNiwweDA3NzAsMCx7MHgwMCwweDY2LDB4MDAsMHg2MSwweDAwLDB4NjMsMHgwMCwweDY1LDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3Mn0gfSwKK3sgICA5LDB4MDc4MCwwLHsweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MDc4OSwwLHsweDc0LDB4MDAsMHhmNSwweDg2LDB4OTAsMHhmZCwweGE1LDB4N2MsMHgwNSwweGEzLDB4ZTUsMHg4MiwweDQ1LDB4ODMsMHg3MCwweGY5fSB9LAoreyAgIDEsMHgwNzk5LDAsezB4MjJ9IH0sCit7ICAxNiwweDA3OWEsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4ODcsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMn0gfSwKK3sgIDE2LDB4MDdhYSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweDhkLDB4ZTAsMHhjMCwweGUwfSB9LAoreyAgMTYsMHgwN2JhLDAsezB4OGMsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweGU1LDB4MTh9IH0sCit7ICAxNiwweDA3Y2EsMCx7MHhiNCwweDAyLDB4MDMsMHgwMiwweDA3LDB4ZDksMHhiNCwweDAxLDB4MDMsMHgwMiwweDA3LDB4ZGUsMHgwMiwweDA3LDB4ZmEsMHg3ZH0gfSwKK3sgIDE2LDB4MDdkYSwwLHsweDAxLDB4MDIsMHgwOCwweDE2LDB4ZTUsMHgxOSwweDE0LDB4ZjUsMHgxOSwweGMzLDB4YjUsMHgxMywweDAzLDB4MDIsMHgwNywweGY1fSB9LAoreyAgMTYsMHgwN2VhLDAsezB4NTAsMHgwOSwweGI0LDB4MDAsMHhlYSwweDc1LDB4MTksMHgwYSwweDAyLDB4MDcsMHhkOSwweDdkLDB4MDAsMHgwMiwweDA4LDB4MTZ9IH0sCit7ICAxNiwweDA3ZmEsMCx7MHhlNSwweDE5LDB4MTQsMHhmNSwweDE5LDB4YzMsMHhiNSwweDE0LDB4MDMsMHgwMiwweDA4LDB4MTEsMHg1MCwweDA5LDB4YjQsMHgwMH0gfSwKK3sgIDE2LDB4MDgwYSwwLHsweGNlLDB4NzUsMHgxOSwweDBhLDB4MDIsMHgwNywweGQ5LDB4N2QsMHgwMiwweDAyLDB4MDgsMHgxNiwweDdjLDB4MDUsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwODFhLDAsezB4OTksMHhlMCwweDU0LDB4NDAsMHhkYywweDAzLDB4MDIsMHgwOCwweDQzLDB4YjQsMHgwMCwweDFkLDB4OTAsMHg3ZiwweGUzLDB4NzR9IH0sCit7ICAxNiwweDA4MmEsMCx7MHg3YiwweGYwLDB4YTMsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDQwLDB4ZjAsMHg5MCwweDdmLDB4ZTUsMHhmMH0gfSwKK3sgIDE2LDB4MDgzYSwwLHsweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDAyLDB4MDgsMHgxOCwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwfSB9LAoreyAgMTYsMHgwODRhLDAsezB4ZjAsMHg5MCwweDc5LDB4NjUsMHhlMCwweGI0LDB4MDEsMHgwMywweDAyLDB4MDgsMHg5ZSwweGI0LDB4MDIsMHgwMywweDAyLDB4MDh9IH0sCit7ICAxNiwweDA4NWEsMCx7MHg5NiwweGI0LDB4MDMsMHgwMywweDAyLDB4MDgsMHg4ZSwweGI0LDB4MDQsMHgwMywweDAyLDB4MDgsMHg4NiwweGI0LDB4MDUsMHgwM30gfSwKK3sgIDE2LDB4MDg2YSwwLHsweDAyLDB4MDgsMHg3ZSwweGI0LDB4MDYsMHgwMywweDAyLDB4MDgsMHg3NiwweDAyLDB4MDgsMHhmNCwweDA1LDB4ODYsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwODdhLDAsezB4NmMsMHgwMiwweDA4LDB4ZTksMHgwNSwweDg2LDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgwOCwweGRkLDB4MDUsMHg4NiwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDA4OGEsMCx7MHg2YywweDAyLDB4MDgsMHhjZiwweDA1LDB4ODYsMHg5MCwweDdmLDB4NmMsMHgwMiwweDA4LDB4YzAsMHgwNSwweDg2LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDg5YSwwLHsweDZjLDB4MDIsMHgwOCwweGIyLDB4MDUsMHg4NiwweDkwLDB4N2YsMHg2YywweGYwLDB4MDAsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGYwfSB9LAoreyAgMTYsMHgwOGFhLDAsezB4MGQsMHhlZCwweGI0LDB4MmQsMHhmNCwweDAyLDB4MDgsMHhmNCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweDBkLDB4ZWR9IH0sCit7ICAxNiwweDA4YmEsMCx7MHhiNCwweDJkLDB4ZjUsMHgwMiwweDA4LDB4ZjQsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGYwLDB4MDAsMHhmMCwweDBkLDB4ZWQsMHhiNH0gfSwKK3sgIDE2LDB4MDhjYSwwLHsweDMxLDB4ZjQsMHgwMiwweDA4LDB4ZjQsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwZCwweGVkLDB4YjQsMHgzMSwweGY1fSB9LAoreyAgMTYsMHgwOGRhLDAsezB4MDIsMHgwOCwweGY0LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwZCwweGVkLDB4YjQsMHg2MSwweGY3LDB4MDIsMHgwOCwweGY0LDB4ZjB9IH0sCit7ICAxNiwweDA4ZWEsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4MGQsMHhlZCwweGI0LDB4NjEsMHhmNSwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMH0gfSwKK3sgIDE2LDB4MDhmYSwwLHsweGQwLDB4ODUsMHhkMCwweDg0LDB4MDUsMHg4NiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZkfSB9LAoreyAgIDUsMHgwOTBhLDAsezB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMH0gfSwKK3sgICA2LDB4MDkwZiwwLHsweGZmLDB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn0gfSwKK3sgIDE2LDB4MDkxNSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHg5MCwweDdmLDB4NmYsMHhlNSwweDBjLDB4ZjAsMHhlNSwweDBkfSB9LAoreyAgMTMsMHgwOTI1LDAsezB4ZjAsMHhlNSwweDBlLDB4ZjAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDA5MzIsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4M30gfSwKK3sgIDE2LDB4MDk0MiwwLHsweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhiZiwweDAwLDB4MDMsMHgwMiwweDBhfSB9LAoreyAgMTYsMHgwOTUyLDAsezB4YjgsMHg5MCwweDdmLDB4OTYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDA5NjIsMCx7MHg2MiwweGUwLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHg3Zn0gfSwKK3sgIDE2LDB4MDk3MiwwLHsweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3OSwweDg4LDB4ZTAsMHhiNCwweDAxLDB4MDMsMHgwMiwweDA5fSB9LAoreyAgMTYsMHgwOTgyLDAsezB4YmUsMHhiNCwweDAyLDB4MDMsMHgwMiwweDA5LDB4YzMsMHhiNCwweDAzLDB4MDMsMHgwMiwweDA5LDB4YWMsMHhiNCwweDA0LDB4MDN9IH0sCit7ICAxNiwweDA5OTIsMCx7MHgwMiwweDA5LDB4OWEsMHgwNSwweDg2LDB4MDIsMHgwYSwweGIyLDB4ZWYsMHg1NCwweDAzLDB4ZmUsMHhlZiwweDAzLDB4MDMsMHg1NH0gfSwKK3sgIDE2LDB4MDlhMiwwLHsweDNmLDB4ZmYsMHg5MCwweDdmLDB4NjMsMHgwNSwweDg2LDB4MDIsMHgwOSwweGM5LDB4ZWYsMHg1NCwweDAzLDB4ZmUsMHhlZiwweDAzfSB9LAoreyAgMTYsMHgwOWIyLDAsezB4MDMsMHg1NCwweDNmLDB4ZmYsMHg5MCwweDdmLDB4NjMsMHgwNSwweDg2LDB4MDIsMHgwYSwweDM2LDB4MDUsMHg4NiwweDAyLDB4MGF9IH0sCit7ICAxNiwweDA5YzIsMCx7MHhhNSwweDA1LDB4ODYsMHgwMiwweDBhLDB4OGUsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMH0gfSwKK3sgIDE2LDB4MDlkMiwwLHsweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2fSB9LAoreyAgMTYsMHgwOWUyLDAsezB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDA5ZjIsMCx7MHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGRmLDB4Y2EsMHhlZSwweGI0LDB4MDAsMHgwM30gfSwKK3sgIDE2LDB4MGEwMiwwLHsweDAyLDB4MGEsMHhiMiwweGI0LDB4MDEsMHgwMywweDAyLDB4MGEsMHgyNSwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1fSB9LAoreyAgMTYsMHgwYTEyLDAsezB4ODYsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDBhMjIsMCx7MHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4Nn0gfSwKK3sgIDE2LDB4MGEzMiwwLHsweDAyLDB4MGEsMHhiMiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTMsMHgwYTQyLDAsezB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODZ9IH0sCit7ICAxNiwweDBhNGYsMCx7MHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZGYsMHhkNn0gfSwKK3sgIDE2LDB4MGE1ZiwwLHsweGVlLDB4YjQsMHgwMCwweDAzLDB4MDIsMHgwYSwweGIyLDB4YjQsMHgwMSwweDAzLDB4MDIsMHgwYSwweDgwLDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwYTZmLDAsezB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4MDV9IH0sCit7ICAxNiwweDBhN2YsMCx7MHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4MDIsMHgwYSwweGIyLDB4ZTAsMHhlMH0gfSwKK3sgIDE2LDB4MGE4ZiwwLHsweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwYTlmLDAsezB4ZGYsMHhlYywweDAyLDB4MGEsMHhiMiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDBhYWYsMCx7MHhlMCwweGRmLDB4ZjIsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMH0gfSwKK3sgIDE0LDB4MGFiZiwwLHsweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBhY2QsMCx7MHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHhlOCwweGMwLDB4ZTAsMHg3OCwweGQxLDB4ZTgsMHgxNCwweGY4LDB4NzAsMHhmYn0gfSwKK3sgIDEwLDB4MGFkZCwwLHsweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDIyfSB9LAoreyAgMTYsMHgwYWU3LDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4OGQsMHhlMCwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDBhZjcsMCx7MHg4YywweGUwLDB4YzAsMHhlMCwweDc1LDB4ODYsMHgwMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4MDUsMHg4NiwweGMwLDB4ODQsMHhjMH0gfSwKK3sgIDE2LDB4MGIwNywwLHsweDg1LDB4N2UsMHgwMCwweDkwLDB4NzksMHg4ZSwweGUwLDB4YjQsMHgwMCwweDE2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHgwNiwweGNhfSB9LAoreyAgMTYsMHgwYjE3LDAsezB4YTMsMHhhMywweGEzLDB4YTMsMHhhMywweGEzLDB4YTMsMHhlMCwweGZmLDB4OTAsMHg3OSwweDhkLDB4ZjAsMHgwMiwweDBiLDB4Mzl9IH0sCit7ICAxNiwweDBiMjcsMCx7MHg5MCwweDc5LDB4OGQsMHhlMCwweGZmLDB4OTAsMHg3OSwweDhmLDB4ZTAsMHhmZCwweDkwLDB4NzksMHg5MCwweGUwLDB4ZmMsMHgwMn0gfSwKK3sgIDE2LDB4MGIzNywwLHsweDBiLDB4NDYsMHg5MCwweDA2LDB4Y2EsMHgwNSwweDg2LDB4OTAsMHg3ZiwweDAwLDB4MDUsMHg4NiwweDAyLDB4MGIsMHg1MSwweDhkfSB9LAoreyAgMTYsMHgwYjQ3LDAsezB4ODQsMHg4YywweDg1LDB4MDUsMHg4NiwweDkwLDB4N2YsMHgwMCwweDA1LDB4ODYsMHhlMCwweGEzLDB4MDUsMHg4NiwweGYwLDB4YTN9IH0sCit7ICAxNiwweDBiNTcsMCx7MHgwZSwweGVlLDB4YjQsMHg0MCwweDAzLDB4MDIsMHgwYiwweDZjLDB4MDUsMHg4NiwweGRmLDB4ZWUsMHg5MCwweDc5LDB4OGUsMHg3NH0gfSwKK3sgIDE2LDB4MGI2NywwLHsweDAwLDB4ZjAsMHgwMiwweDBiLDB4ODIsMHgwNSwweDg2LDB4YWQsMHg4NCwweGFjLDB4ODUsMHg5MCwweDc5LDB4OGYsMHhlZCwweGYwfSB9LAoreyAgMTYsMHgwYjc3LDAsezB4OTAsMHg3OSwweDkwLDB4ZWMsMHhmMCwweDkwLDB4NzksMHg4ZCwweDFmLDB4ZWYsMHhmMCwweDkwLDB4N2YsMHhiNSwweGVlLDB4ZjB9IH0sCit7ICAxNiwweDBiODcsMCx7MHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmZH0gfSwKK3sgIDExLDB4MGI5NywwLHsweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBiYTIsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg1NCwweGUwLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MGJiMiwwLHsweDdmLDB4OTYsMHhlMCwweDQ0LDB4MDgsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4YmYsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgwYmMyLDAsezB4N2YsMHhlMywweDc0LDB4N2IsMHhmMCwweDkwLDB4N2YsMHhlNCwweDc0LDB4NDAsMHhmMCwweDkwLDB4NzksMHg3OCwweGUwLDB4OTB9IH0sCit7ICAxNiwweDBiZDIsMCx7MHg3YiwweDQwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDQ4LDB4ZjAsMHg5MCwweDdmLDB4ZTUsMHhlMCwweDkwLDB4N2YsMHhlMn0gfSwKK3sgIDE2LDB4MGJlMiwwLHsweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHhmNywweDQ0LDB4MDQsMHhmMCwweDkwLDB4N2YsMHhlMywweDc0fSB9LAoreyAgMTYsMHgwYmYyLDAsezB4N2IsMHhmMCwweDkwLDB4N2YsMHhlNCwweDc0LDB4NDAsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3YiwweDQwLDB4ZjB9IH0sCit7ICAxNiwweDBjMDIsMCx7MHg5MCwweDdmLDB4ZTIsMHg3NCwweDQ4LDB4ZjAsMHg5MCwweDdmLDB4ZTUsMHhlMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMH0gfSwKK3sgIDE2LDB4MGMxMiwwLHsweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHhmMywweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDFmLDB4ZjAsMHhkMCwweDgzfSB9LAoreyAgIDcsMHgwYzIyLDAsezB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBjMjksMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4OTAsMHg3OSwweDJmLDB4ZTAsMHg2NCwweGZmLDB4YzMsMHgyNH0gfSwKK3sgIDExLDB4MGMzOSwwLHsweDAxLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBjNDQsMCx7MHhiYiwweDAxLDB4MDYsMHg4OSwweDgyLDB4OGEsMHg4MywweGUwLDB4MjIsMHg1MCwweDAyLDB4ZTcsMHgyMiwweGJiLDB4ZmUsMHgwMn0gfSwKK3sgICA5LDB4MGM1NCwwLHsweGUzLDB4MjIsMHg4OSwweDgyLDB4OGEsMHg4MywweGU0LDB4OTMsMHgyMn0gfSwKK3sgIDE2LDB4MGM1ZCwwLHsweGJiLDB4MDEsMHgwYywweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTAsMHgyMiwweDUwfSB9LAoreyAgMTYsMHgwYzZkLDAsezB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGU2LDB4MjIsMHhiYiwweGZlLDB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4MjJ9IH0sCit7ICAxMywweDBjN2QsMCx7MHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGU0LDB4OTMsMHgyMn0gfSwKK3sgIDE2LDB4MGM4YSwwLHsweGJiLDB4MDEsMHgwNiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjAsMHgyMiwweDUwLDB4MDIsMHhmNywweDIyLDB4YmIsMHhmZSwweDAxfSB9LAoreyAgIDIsMHgwYzlhLDAsezB4ZjMsMHgyMn0gfSwKK3sgIDE2LDB4MGM5YywwLHsweGY4LDB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlOCwweGYwfSB9LAoreyAgMTYsMHgwY2FjLDAsezB4MjIsMHg1MCwweDA2LDB4ZTksMHgyNSwweDgyLDB4YzgsMHhmNiwweDIyLDB4YmIsMHhmZSwweDA1LDB4ZTksMHgyNSwweDgyLDB4Yzh9IH0sCit7ICAgMiwweDBjYmMsMCx7MHhmMiwweDIyfSB9LAoreyAgMTYsMHgwY2JlLDAsezB4YzIsMHhkNSwweGVjLDB4MzAsMHhlNywweDA5LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZCwweGZkLDB4ZTQsMHg5YywweGZjLDB4ZWV9IH0sCit7ICAxNiwweDBjY2UsMCx7MHgzMCwweGU3LDB4MTUsMHhiMiwweGQ1LDB4ZTQsMHhjMywweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgxMiwweDBlLDB4NDAsMHhjM30gfSwKK3sgIDE2LDB4MGNkZSwwLHsweGU0LDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweDgwLDB4MDMsMHgxMiwweDBlLDB4NDAsMHgzMCwweGQ1LDB4MDcsMHhjMywweGU0fSB9LAoreyAgIDYsMHgwY2VlLDAsezB4OWYsMHhmZiwweGU0LDB4OWUsMHhmZSwweDIyfSB9LAoreyAgMTYsMHgwY2Y0LDAsezB4YzUsMHhmMCwweGY4LDB4YTMsMHhlMCwweDI4LDB4ZjAsMHhjNSwweGYwLDB4ZjgsMHhlNSwweDgyLDB4MTUsMHg4MiwweDcwLDB4MDJ9IH0sCit7ICAgNiwweDBkMDQsMCx7MHgxNSwweDgzLDB4ZTAsMHgzOCwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDBkMGEsMCx7MHhiYiwweDAxLDB4MTAsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHhmMH0gfSwKK3sgIDE2LDB4MGQxYSwwLHsweGEzLDB4ZTAsMHgyMiwweDUwLDB4MDksMHhlOSwweDI1LDB4ODIsMHhmOCwweDg2LDB4ZjAsMHgwOCwweGU2LDB4MjIsMHhiYiwweGZlfSB9LAoreyAgMTYsMHgwZDJhLDAsezB4MGEsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4ZjUsMHhmMCwweDA4LDB4ZTIsMHgyMiwweGU1LDB4ODMsMHgyYSwweGY1LDB4ODN9IH0sCit7ICAgOCwweDBkM2EsMCx7MHhlOSwweDkzLDB4ZjUsMHhmMCwweGEzLDB4ZTksMHg5MywweDIyfSB9LAoreyAgMTYsMHgwZDQyLDAsezB4ZTgsMHg4ZiwweGYwLDB4YTQsMHhjYywweDhiLDB4ZjAsMHhhNCwweDJjLDB4ZmMsMHhlOSwweDhlLDB4ZjAsMHhhNCwweDJjLDB4ZmN9IH0sCit7ICAxNiwweDBkNTIsMCx7MHg4YSwweGYwLDB4ZWQsMHhhNCwweDJjLDB4ZmMsMHhlYSwweDhlLDB4ZjAsMHhhNCwweGNkLDB4YTgsMHhmMCwweDhiLDB4ZjAsMHhhNH0gfSwKK3sgIDE2LDB4MGQ2MiwwLHsweDJkLDB4Y2MsMHgzOCwweDI1LDB4ZjAsMHhmZCwweGU5LDB4OGYsMHhmMCwweGE0LDB4MmMsMHhjZCwweDM1LDB4ZjAsMHhmYywweGVifSB9LAoreyAgMTYsMHgwZDcyLDAsezB4OGUsMHhmMCwweGE0LDB4ZmUsMHhhOSwweGYwLDB4ZWIsMHg4ZiwweGYwLDB4YTQsMHhjZiwweGM1LDB4ZjAsMHgyZSwweGNkLDB4Mzl9IH0sCit7ICAxNSwweDBkODIsMCx7MHhmZSwweGU0LDB4M2MsMHhmYywweGVhLDB4YTQsMHgyZCwweGNlLDB4MzUsMHhmMCwweGZkLDB4ZTQsMHgzYywweGZjLDB4MjJ9IH0sCit7ICAxNiwweDBkOTEsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlOCwweDljLDB4NDUsMHhmMH0gfSwKK3sgICAxLDB4MGRhMSwwLHsweDIyfSB9LAoreyAgMTYsMHgwZGEyLDAsezB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHgwMiwweDBlLDB4YTF9IH0sCit7ICAxNiwweDBkYjIsMCx7MHg1MCwweDA3LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHgwMiwweDBlLDB4OTUsMHhiYiwweGZlLDB4MDcsMHhlOSwweDI1LDB4ODIsMHhmOH0gfSwKK3sgIDE2LDB4MGRjMiwwLHsweDAyLDB4MGUsMHhhZCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4MDIsMHgwZSwweGI5fSB9LAoreyAgMTYsMHgwZGQyLDAsezB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHgwMiwweDBlLDB4ZDV9IH0sCit7ICAxNiwweDBkZTIsMCx7MHg1MCwweDA3LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHgwMiwweDBlLDB4YzksMHhiYiwweGZlLDB4MDcsMHhlOSwweDI1LDB4ODIsMHhmOH0gfSwKK3sgICA0LDB4MGRmMiwwLHsweDAyLDB4MGUsMHhlMSwweDIyfSB9LAoreyAgMTYsMHgwZGY2LDAsezB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHgwMiwweDBmLDB4MDZ9IH0sCit7ICAxNiwweDBlMDYsMCx7MHg1MCwweDA3LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHgwMiwweDBlLDB4ZWQsMHhiYiwweGZlLDB4MDcsMHhlOSwweDI1LDB4ODIsMHhmOH0gfSwKK3sgICA0LDB4MGUxNiwwLHsweDAyLDB4MGYsMHgzNywweDIyfSB9LAoreyAgMTYsMHgwZTFhLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhmOCwweGU0LDB4OTMsMHg3MCwweDEyLDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwZCwweGEzLDB4YTN9IH0sCit7ICAxNiwweDBlMmEsMCx7MHg5MywweGY4LDB4NzQsMHgwMSwweDkzLDB4ZjUsMHg4MiwweDg4LDB4ODMsMHhlNCwweDczLDB4NzQsMHgwMiwweDkzLDB4NjgsMHg2MH0gfSwKK3sgICA2LDB4MGUzYSwwLHsweGVmLDB4YTMsMHhhMywweGEzLDB4ODAsMHhkZn0gfSwKK3sgIDE2LDB4MGU0MCwwLHsweGJjLDB4MDAsMHgwYiwweGJlLDB4MDAsMHgyOSwweGVmLDB4OGQsMHhmMCwweDg0LDB4ZmYsMHhhZCwweGYwLDB4MjIsMHhlNCwweGNjfSB9LAoreyAgMTYsMHgwZTUwLDAsezB4ZjgsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmLDB4ZmYsMHhlZSwweDMzLDB4ZmUsMHhlYywweDMzLDB4ZmMsMHhlZSwweDlkLDB4ZWN9IH0sCit7ICAxNiwweDBlNjAsMCx7MHg5OCwweDQwLDB4MDUsMHhmYywweGVlLDB4OWQsMHhmZSwweDBmLDB4ZDUsMHhmMCwweGU5LDB4ZTQsMHhjZSwweGZkLDB4MjIsMHhlZH0gfSwKK3sgIDE2LDB4MGU3MCwwLHsweGY4LDB4ZjUsMHhmMCwweGVlLDB4ODQsMHgyMCwweGQyLDB4MWMsMHhmZSwweGFkLDB4ZjAsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmfSB9LAoreyAgMTYsMHgwZTgwLDAsezB4ZmYsMHhlZCwweDMzLDB4ZmQsMHg0MCwweDA3LDB4OTgsMHg1MCwweDA2LDB4ZDUsMHhmMCwweGYyLDB4MjIsMHhjMywweDk4LDB4ZmR9IH0sCit7ICAgNSwweDBlOTAsMCx7MHgwZiwweGQ1LDB4ZjAsMHhlYSwweDIyfSB9LAoreyAgMTIsMHgwZTk1LDAsezB4ZTYsMHhmYywweDA4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmZSwweDA4LDB4ZTYsMHhmZiwweDIyfSB9LAoreyAgMTIsMHgwZWExLDAsezB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDIyfSB9LAoreyAgMTIsMHgwZWFkLDAsezB4ZTIsMHhmYywweDA4LDB4ZTIsMHhmZCwweDA4LDB4ZTIsMHhmZSwweDA4LDB4ZTIsMHhmZiwweDIyfSB9LAoreyAgMTYsMHgwZWI5LDAsezB4ZTQsMHg5MywweGZjLDB4YTMsMHhlNCwweDkzLDB4ZmQsMHhhMywweGU0LDB4OTMsMHhmZSwweGEzLDB4ZTQsMHg5MywweGZmLDB4MjJ9IH0sCit7ICAxMiwweDBlYzksMCx7MHhlYywweGY2LDB4MDgsMHhlZCwweGY2LDB4MDgsMHhlZSwweGY2LDB4MDgsMHhlZiwweGY2LDB4MjJ9IH0sCit7ICAxMiwweDBlZDUsMCx7MHhlYywweGYwLDB4YTMsMHhlZCwweGYwLDB4YTMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4MjJ9IH0sCit7ICAxMiwweDBlZTEsMCx7MHhlYywweGYyLDB4MDgsMHhlZCwweGYyLDB4MDgsMHhlZSwweGYyLDB4MDgsMHhlZiwweGYyLDB4MjJ9IH0sCit7ICAxNiwweDBlZWQsMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGU0LDB4OTMsMHhmNiwweDA4LDB4NzQsMHgwMSwweDkzLDB4ZjYsMHgwOCwweDc0LDB4MDIsMHg5M30gfSwKK3sgICA5LDB4MGVmZCwwLHsweGY2LDB4MDgsMHg3NCwweDAzLDB4OTMsMHhmNiwweDc0LDB4MDQsMHg3M30gfSwKK3sgIDE2LDB4MGYwNiwwLHsweGE4LDB4ODIsMHg4NSwweDgzLDB4ZjAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDEyLDB4MGYsMHgxZCwweDEyLDB4MGYsMHgxZCwweDEyfSB9LAoreyAgMTYsMHgwZjE2LDAsezB4MGYsMHgxZCwweDEyLDB4MGYsMHgxZCwweGU0LDB4NzMsMHhlNCwweDkzLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODN9IH0sCit7ICAxNiwweDBmMjYsMCx7MHhjOCwweGM1LDB4ODIsMHhjOCwweGYwLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODMsMHhjOCwweGM1LDB4ODIsMHhjOH0gfSwKK3sgICAxLDB4MGYzNiwwLHsweDIyfSB9LAoreyAgMTYsMHgwZjM3LDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhlNCwweDkzLDB4ZjIsMHgwOCwweDc0LDB4MDEsMHg5MywweGYyLDB4MDgsMHg3NCwweDAyLDB4OTN9IH0sCit7ICAgOSwweDBmNDcsMCx7MHhmMiwweDA4LDB4NzQsMHgwMywweDkzLDB4ZjIsMHg3NCwweDA0LDB4NzN9IH0sCit7ICAxNiwweDBmNTAsMCx7MHhjMiwweGFmLDB4ZDIsMHgyYywweDkwLDB4N2YsMHg5MywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5YywweDc0LDB4YmYsMHhmMH0gfSwKK3sgIDE2LDB4MGY2MCwwLHsweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDk0LDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDlkfSB9LAoreyAgMTYsMHgwZjcwLDAsezB4NzQsMHhjZiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweDk1LDB4NzQsMHhjYywweGYwLDB4ZTR9IH0sCit7ICAxNiwweDBmODAsMCx7MHg5MCwweDdmLDB4OWUsMHhmMCwweGMyLDB4MmQsMHhjMiwweDJhLDB4YzIsMHgyYiwweGMyLDB4MmUsMHg5MCwweDc5LDB4NzQsMHgwNH0gfSwKK3sgIDE2LDB4MGY5MCwwLHsweGYwLDB4MTIsMHgyZSwweDk0LDB4MTIsMHg0OSwweGUyLDB4MTIsMHg0YiwweGU2LDB4MTIsMHgzMiwweDBkLDB4MTIsMHgzYiwweDBkfSB9LAoreyAgMTYsMHgwZmEwLDAsezB4MTIsMHg0MSwweGZkLDB4MTIsMHgzZSwweDk5LDB4ZTUsMHgxZiwweDcwLDB4MTgsMHg3NSwweDFmLDB4MDEsMHgxMiwweDE3LDB4ZmZ9IH0sCit7ICAxNiwweDBmYjAsMCx7MHgxMiwweDJmLDB4ZmYsMHgxMiwweDQ5LDB4YzgsMHgxMiwweDRiLDB4ZDgsMHgxMiwweDRiLDB4ZGEsMHgxMiwweDQ5LDB4NmYsMHgxMn0gfSwKK3sgIDE2LDB4MGZjMCwwLHsweDFiLDB4NDAsMHgxMiwweDM5LDB4OGQsMHg5MCwweDdmLDB4YWYsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhhZSwweGUwfSB9LAoreyAgMTYsMHgwZmQwLDAsezB4NDQsMHgxZiwweGYwLDB4OTAsMHg3ZiwweGFjLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweGFkLDB4ZjAsMHg5MCwweDdmLDB4ZGV9IH0sCit7ICAxNiwweDBmZTAsMCx7MHhmMCwweDkwLDB4N2YsMHhkZiwweGYwLDB4OTAsMHg3ZiwweGFiLDB4ZjAsMHg5MCwweDdmLDB4YTksMHhmMCwweDkwLDB4N2YsMHhhYX0gfSwKK3sgIDE2LDB4MGZmMCwwLHsweGYwLDB4NTMsMHg5MSwweGVmLDB4NDMsMHhkOCwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDgsMHgyMCwweDQzLDB4YTgsMHg4MCwweDIyfSB9LAoreyAgMTYsMHgxMDAwLDAsezB4OTAsMHg3OSwweDYzLDB4ZTAsMHgxNCwweDYwLDB4NDQsMHgxNCwweDcwLDB4MDIsMHgyMSwweGQwLDB4MTQsMHg3MCwweDAyLDB4NDF9IH0sCit7ICAxNiwweDEwMTAsMCx7MHhkOSwweDE0LDB4NzAsMHgwMiwweDYxLDB4ZDcsMHgyNCwweDA0LDB4NjAsMHgwMiwweDgxLDB4NTYsMHhlNCwweDkwLDB4NzksMHg3OH0gfSwKK3sgIDE2LDB4MTAyMCwwLHsweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDQ0LDB4MDEsMHhmMCwweDU0LDB4ZmQsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxMDMwLDAsezB4NzksMHg3YiwweGYwLDB4ZTQsMHg5MCwweDc5LDB4ODgsMHhmMCwweGEyLDB4YWYsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTJ9IH0sCit7ICAxNiwweDEwNDAsMCx7MHgwYiwweGEyLDB4ZTUsMHgxMiwweDcwLDB4MDIsMHg4MSwweDU2LDB4ZDIsMHhhZiwweDIyLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NH0gfSwKK3sgIDE2LDB4MTA1MCwwLHsweDAxLDB4NzAsMHg3OSwweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweGZmfSB9LAoreyAgMTYsMHgxMDYwLDAsezB4NzQsMHhmYywweGYwLDB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjB9IH0sCit7ICAxNiwweDEwNzAsMCx7MHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMn0gfSwKK3sgIDE2LDB4MTA4MCwwLHsweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwfSB9LAoreyAgMTYsMHgxMDkwLDAsezB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmV9IH0sCit7ICAxNiwweDEwYTAsMCx7MHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZH0gfSwKK3sgIDE2LDB4MTBiMCwwLHsweGYwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NCwweDA0fSB9LAoreyAgMTYsMHgxMGMwLDAsezB4ZjAsMHg5MCwweDc5LDB4ODgsMHgxNCwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4OTAsMHg3OSwweDJkLDB4ZTB9IH0sCit7ICAxNiwweDEwZDAsMCx7MHg2NCwweDAyLDB4NzAsMHg3OSwweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzNCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTBlMCwwLHsweGZmLDB4NzQsMHhmYywweGYwLDB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5fSB9LAoreyAgMTYsMHgxMGYwLDAsezB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjV9IH0sCit7ICAxNiwweDExMDAsMCx7MHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMH0gfSwKK3sgIDE2LDB4MTExMCwwLHsweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0fSB9LAoreyAgMTYsMHgxMTIwLDAsezB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDR9IH0sCit7ICAxNiwweDExMzAsMCx7MHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NH0gfSwKK3sgIDE2LDB4MTE0MCwwLHsweDA0LDB4ZjAsMHg5MCwweDc5LDB4ODgsMHgxNCwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4OTAsMHg3OSwweDJkfSB9LAoreyAgMTYsMHgxMTUwLDAsezB4ZTAsMHg2NCwweDAzLDB4NjAsMHgwMiwweDgxLDB4NTYsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4NjR9IH0sCit7ICAxNiwweDExNjAsMCx7MHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMH0gfSwKK3sgIDE2LDB4MTE3MCwwLHsweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHgxMTgwLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDExOTAsMCx7MHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTFhMCwwLHsweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgxMWIwLDAsezB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzR9IH0sCit7ICAxNiwweDExYzAsMCx7MHgwNCwweGYwLDB4OTAsMHg3OSwweDg4LDB4MTQsMHhmMCwweGU1LDB4MTIsMHg3MCwweDAyLDB4ODEsMHg1NiwweGQyLDB4YWYsMHgyMn0gfSwKK3sgIDE2LDB4MTFkMCwwLHsweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMSwweDcwLDB4N2EsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0fSB9LAoreyAgMTYsMHgxMWUwLDAsezB4ODgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2J9IH0sCit7ICAxNiwweDExZjAsMCx7MHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NTQsMHhmZCwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMn0gfSwKK3sgIDE2LDB4MTIwMCwwLHsweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwfSB9LAoreyAgMTYsMHgxMjEwLDAsezB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTB9IH0sCit7ICAxNiwweDEyMjAsMCx7MHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MTIzMCwwLHsweDc5LDB4NzksMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyfSB9LAoreyAgMTYsMHgxMjQwLDAsezB4OTAsMHg3OSwweDgyLDB4NzQsMHgwYywweGYwLDB4OTAsMHg3OSwweDg4LDB4NzQsMHgwMSwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDJ9IH0sCit7ICAxNiwweDEyNTAsMCx7MHhkMiwweGFmLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAyLDB4NjAsMHgwMiwweDgxLDB4NTYsMHg5MCwweDdmLDB4ZjIsMHhmMH0gfSwKK3sgIDE2LDB4MTI2MCwwLHsweDkwLDB4N2YsMHhmMywweDc0LDB4OTQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4fSB9LAoreyAgMTYsMHgxMjcwLDAsezB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NTQsMHhmZCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDEyODAsMCx7MHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTI5MCwwLHsweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwfSB9LAoreyAgMTYsMHgxMmEwLDAsezB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTB9IH0sCit7ICAxNiwweDEyYjAsMCx7MHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NH0gfSwKK3sgIDE2LDB4MTJjMCwwLHsweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzQsMHgwYywweGYwLDB4OTAsMHg3OSwweDg4LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgxMmQwLDAsezB4ZTUsMHgxMiwweDcwLDB4MDIsMHg4MSwweDU2LDB4ZDIsMHhhZiwweDIyLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAxLDB4NzB9IH0sCit7ICAxNiwweDEyZTAsMCx7MHg3NywweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmY30gfSwKK3sgIDE2LDB4MTJmMCwwLHsweGYwLDB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg1NCwweGZjfSB9LAoreyAgMTYsMHgxMzAwLDAsezB4ZjAsMHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTJ9IH0sCit7ICAxNiwweDEzMTAsMCx7MHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTMyMCwwLHsweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgxMzMwLDAsezB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDEzNDAsMCx7MHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NCwweDEyLDB4ZjAsMHg5MCwweDc5LDB4ODgsMHg3NH0gfSwKK3sgIDE2LDB4MTM1MCwwLHsweDAyLDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDIsMHg3MCwweDc3fSB9LAoreyAgMTYsMHgxMzYwLDAsezB4OTAsMHg3ZiwweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweGUwLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjB9IH0sCit7ICAxNiwweDEzNzAsMCx7MHhlNCwweDkwLDB4NzksMHg3OCwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDU0LDB4ZmMsMHhmMH0gfSwKK3sgIDE2LDB4MTM4MCwwLHsweDkwLDB4NzksMHg3YiwweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwfSB9LAoreyAgMTYsMHgxMzkwLDAsezB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2Z9IH0sCit7ICAxNiwweDEzYTAsMCx7MHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MTNiMCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgxM2MwLDAsezB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg4MiwweDc0LDB4MTIsMHhmMCwweDkwLDB4NzksMHg4OCwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDEzZDAsMCx7MHhmMCwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMywweDcwLDB4NzcsMHg5MH0gfSwKK3sgIDE2LDB4MTNlMCwwLHsweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4OTQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0fSB9LAoreyAgMTYsMHgxM2YwLDAsezB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NTQsMHhmZSwweGYwLDB4NDR9IH0sCit7ICAxNiwweDE0MDAsMCx7MHgwMiwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4MTQxMCwwLHsweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxNDIwLDAsezB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTB9IH0sCit7ICAxNiwweDE0MzAsMCx7MHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzksMHg4NH0gfSwKK3sgIDE2LDB4MTQ0MCwwLHsweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3OSwweDg4LDB4NzQsMHgwNCwweGYwfSB9LAoreyAgIDcsMHgxNDUwLDAsezB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAxNiwweDE0NTcsMCx7MHhjMiwweDI4LDB4YzIsMHgyOSwweDkwLDB4N2YsMHhlOCwweGUwLDB4MTIsMHgwZSwweDFhLDB4MTQsMHg4NCwweDAwLDB4MTQsMHhlMH0gfSwKK3sgIDE2LDB4MTQ2NywwLHsweDAxLDB4MTQsMHhmNiwweDAyLDB4MTYsMHg3YywweDIxLDB4MTYsMHhiZSwweDIyLDB4MTUsMHg5MSwweDgwLDB4MTUsMHhkMSwweDgxfSB9LAoreyAgMTYsMHgxNDc3LDAsezB4MTYsMHgyZSwweDgyLDB4MTYsMHhjZiwweGExLDB4MTcsMHgwNSwweGEyLDB4MDAsMHgwMCwweDE3LDB4MGEsMHg5MCwweDdmLDB4ZTl9IH0sCit7ICAxNiwweDE0ODcsMCx7MHhlMCwweDE0LDB4NjAsMHgxMSwweDI0LDB4ZmUsMHg2MCwweDI4LDB4MjQsMHhmZSwweDYwLDB4M2IsMHgyNCwweGZjLDB4NzAsMHg0MH0gfSwKK3sgIDE2LDB4MTQ5NywwLHsweDEyLDB4NGEsMHgyYSwweGUxLDB4MTYsMHgxMiwweDRiLDB4ZTAsMHg0MCwweDAyLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhlYSwweGUwfSB9LAoreyAgMTYsMHgxNGE3LDAsezB4YjQsMHgwMSwweDA0LDB4YzIsMHgyYSwweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTZ9IH0sCit7ICAxNiwweDE0YjcsMCx7MHgxMiwweDRiLDB4ZTIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4MDEsMHgwNCwweGQyLDB4MmEsMHhlMSwweDE2LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTRjNywwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2fSB9LAoreyAgMTYsMHgxNGQ3LDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGY1LDB4NzB9IH0sCit7ICAxNiwweDE0ZTcsMCx7MHgwNSwweDEyLDB4NDcsMHg5YywweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MH0gfSwKK3sgIDE2LDB4MTRmNywwLHsweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmQsMHg2MCwweDU0LDB4MjQsMHgwMiwweDYwLDB4MDIsMHhhMSwweDg4LDB4MTIsMHg0YiwweGUwfSB9LAoreyAgMTYsMHgxNTA3LDAsezB4NDAsMHgwMiwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MzgsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTR9IH0sCit7ICAxNiwweDE1MTcsMCx7MHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4Mn0gfSwKK3sgIDE2LDB4MTUyNywwLHsweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg1NCwweDgwLDB4ZmYsMHgxMywweDEzfSB9LAoreyAgMTYsMHgxNTM3LDAsezB4MTMsMHg1NCwweDFmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDkwLDB4N2YsMHhkNywweGYwLDB4ZTAsMHg0NCwweDIwLDB4ZjB9IH0sCit7ICAxNiwweDE1NDcsMCx7MHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4MTIsMHg0YiwweGUyLDB4NDAsMHgwMn0gfSwKK3sgIDE2LDB4MTU1NywwLHsweGUxLDB4MTYsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MjAsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTQsMHg4MCwweGZmfSB9LAoreyAgMTYsMHgxNTY3LDAsezB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4MiwweGU0LDB4MzR9IH0sCit7ICAxNiwweDE1NzcsMCx7MHg3ZiwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMX0gfSwKK3sgIDE2LDB4MTU4NywwLHsweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHg2MCwweDEyfSB9LAoreyAgMTYsMHgxNTk3LDAsezB4MjQsMHhmOCwweDYwLDB4MDksMHgyNCwweDAyLDB4NzAsMHgyOSwweDEyLDB4MTcsMHgxZSwweGUxLDB4MTYsMHgxMiwweDRiLDB4YTB9IH0sCit7ICAxNiwweDE1YTcsMCx7MHhlMSwweDE2LDB4MTIsMHg0YiwweGRlLDB4YTIsMHgyYSwweGU0LDB4MzMsMHhmZiwweDI1LDB4ZTAsMHhmZiwweGEyLDB4MmIsMHhlNH0gfSwKK3sgIDE2LDB4MTViNywwLHsweDMzLDB4NGYsMHg5MCwweDdmLDB4MDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweGUxfSB9LAoreyAgMTYsMHgxNWM3LDAsezB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZTksMHhlMCwweDYwLDB4Mzd9IH0sCit7ICAxNiwweDE1ZDcsMCx7MHgyNCwweGY2LDB4NjAsMHgyZSwweDI0LDB4MDQsMHg3MCwweDQxLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgyNCwweGRlLDB4NjAsMHgwZX0gfSwKK3sgIDE2LDB4MTVlNywwLHsweDA0LDB4NzAsMHgxNiwweGQyLDB4MjksMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHhkMiwweDI5fSB9LAoreyAgMTYsMHgxNWY3LDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDE2MDcsMCx7MHhlMSwweDE2LDB4MTIsMHg0NCwweDYzLDB4ZTEsMHgxNiwweDEyLDB4NGIsMHhkZSwweGU0LDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhM30gfSwKK3sgIDE2LDB4MTYxNywwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4ZTEsMHgxNiwweDIwLDB4MjksMHgwNywweDkwLDB4N2YsMHhiNCwweGUwfSB9LAoreyAgMTYsMHgxNjI3LDAsezB4NDQsMHgwMSwweGYwLDB4YzIsMHgyOSwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZjQsMHg2MCwweDM0LDB4MjR9IH0sCit7ICAxNiwweDE2MzcsMCx7MHgwYywweDcwLDB4MzksMHgxMiwweDRiLDB4ZGUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTQsMHg4MCwweGZmLDB4YzQsMHg1NH0gfSwKK3sgIDE2LDB4MTY0NywwLHsweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSB9LAoreyAgMTYsMHgxNjU3LDAsezB4ODMsMHhlMCwweDU0LDB4ZmQsMHg5MCwweDdmLDB4MDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDE2NjcsMCx7MHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMH0gfSwKK3sgIDE2LDB4MTY3NywwLHsweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZjYsMHg2MCwweDEyLDB4MTQsMHg2MCwweDFhfSB9LAoreyAgMTYsMHgxNjg3LDAsezB4MjQsMHgwMiwweDcwLDB4MWQsMHhkMiwweDI4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDEyLDB4ZDJ9IH0sCit7ICAxNiwweDE2OTcsMCx7MHgyOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0gfSwKK3sgIDE2LDB4MTZhNywwLHsweGYwLDB4MjAsMHgyOCwweDBmLDB4OTAsMHg3OSwweDg1LDB4NzQsMHgwMSwweGYwLDB4MTIsMHg0OSwweDZmLDB4OTAsMHg3ZiwweGM1fSB9LAoreyAgMTYsMHgxNmI3LDAsezB4NzQsMHgwMiwweGYwLDB4YzIsMHgyOCwweDgwLDB4NTgsMHg5MCwweDc5LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHgxMiwweDQ5LDB4NmZ9IH0sCit7ICAxNiwweDE2YzcsMCx7MHg5MCwweDdmLDB4YzUsMHg3NCwweDAyLDB4ZjAsMHg4MCwweDQ3LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHgxMn0gfSwKK3sgIDE2LDB4MTZkNywwLHsweDE0LDB4NjAsMHgxYSwweDI0LDB4MDIsMHg3MCwweDFkLDB4ZDIsMHgyOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgxNmU3LDAsezB4ODAsMHgxMiwweGQyLDB4MjgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxNiwweDE2ZjcsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwLDB4MjgsMHgwMywweDEyLDB4MWEsMHg3YiwweGMyLDB4MjgsMHg4MCwweDExLDB4MTIsMHgyY30gfSwKK3sgIDE2LDB4MTcwNywwLHsweDJiLDB4ODAsMHgwYywweDEyLDB4NGIsMHhlNCwweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwfSB9LAoreyAgIDcsMHgxNzE3LDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMiwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDE3MWUsMCx7MHgxMiwweDRiLDB4ZGMsMHg0MCwweDAyLDB4ZTEsMHhlMywweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhmZSwweDYwLDB4MWUsMHgxNH0gfSwKK3sgIDE2LDB4MTcyZSwwLHsweDYwLDB4NDYsMHgxNCwweDYwLDB4NmUsMHgxNCwweDcwLDB4MDIsMHhlMSwweGQ0LDB4MjQsMHgwNCwweDYwLDB4MDIsMHhlMSwweGRjfSB9LAoreyAgMTYsMHgxNzNlLDAsezB4NzQsMHgwNSwweDkwLDB4N2YsMHhkNCwweGYwLDB4NzQsMHgwMCwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWF9IH0sCit7ICAxNiwweDE3NGUsMCx7MHhlMCwweGZmLDB4MTIsMHgzZiwweGEyLDB4OGIsMHgzMywweDhhLDB4MzQsMHg4OSwweDM1LDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZX0gfSwKK3sgIDE2LDB4MTc1ZSwwLHsweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyfSB9LAoreyAgMTYsMHgxNzZlLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHgxMiwweDQ4LDB4MDB9IH0sCit7ICAxNiwweDE3N2UsMCx7MHg4YiwweDMzLDB4OGEsMHgzNCwweDg5LDB4MzUsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZSwweGVlLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTc4ZSwwLHsweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSB9LAoreyAgMTYsMHgxNzllLDAsezB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmJ9IH0sCit7ICAxNiwweDE3YWUsMCx7MHgxMiwweDQ0LDB4ZDIsMHg4YiwweDMzLDB4OGEsMHgzNCwweDg5LDB4MzUsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZX0gfSwKK3sgIDE2LDB4MTdiZSwwLHsweGVlLDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgxN2NlLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9IH0sCit7ICAgNSwweDE3ZGUsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgxN2UzLDAsezB4MjJ9IH0sCit7ICAxNiwweDE3ZTQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg5MCwweDdmLDB4YzQsMHhlNCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3Zn0gfSwKK3sgIDExLDB4MTdmNCwwLHsweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAgMSwweDE3ZmYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MTgwMCwwLHsweGU0LDB4OTAsMHg3OCwweDE1LDB4ZjAsMHg3YiwweDAxLDB4OTAsMHg3OCwweDEyLDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwfSB9LAoreyAgMTYsMHgxODEwLDAsezB4YTMsMHg3NCwweDU4LDB4ZjAsMHg5MCwweDc4LDB4MTIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTB9IH0sCit7ICAxNiwweDE4MjAsMCx7MHgwMCwweDAxLDB4MTIsMHgwYywweDVkLDB4ZmYsMHg5MCwweDc5LDB4OWEsMHhlMCwweDZmLDB4NjAsMHgxOCwweDkwLDB4NzgsMHgxNX0gfSwKK3sgIDE2LDB4MTgzMCwwLHsweGUwLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwZiwweGUwLDB4MDQsMHhmMCwweDkwLDB4NzgsMHgxMywweGU0LDB4NzUsMHhmMCwweDBmfSB9LAoreyAgMTYsMHgxODQwLDAsezB4MTIsMHgwYywweGY0LDB4ODAsMHhjZiwweDkwLDB4NzgsMHgxNSwweGUwLDB4YjQsMHgwNiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTB9IH0sCit7ICAxNiwweDE4NTAsMCx7MHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMn0gfSwKK3sgIDE2LDB4MTg2MCwwLHsweDBjLDB4NDQsMHhmZiwweDI0LDB4YmYsMHg3MCwweDAyLDB4NDEsMHg3YSwweDI0LDB4ZTAsMHg3MCwweDAyLDB4NDEsMHg0YywweDI0fSB9LAoreyAgMTYsMHgxODcwLDAsezB4MjEsMHg2MCwweDAyLDB4NDEsMHg3MywweDkwLDB4NzksMHg5NywweGUwLDB4MjQsMHhmZSwweDcwLDB4MDIsMHgyMSwweDlhLDB4MTR9IH0sCit7ICAxNiwweDE4ODAsMCx7MHg3MCwweDAyLDB4MjEsMHhlZiwweDI0LDB4MDIsMHg2MCwweDAyLDB4NDEsMHg0NCwweDkwLDB4NzksMHgyZCwweGUwLDB4YTMsMHhmMH0gfSwKK3sgIDE2LDB4MTg5MCwwLHsweDkwLDB4NzksMHgyMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZiLDB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDBkfSB9LAoreyAgMTYsMHgxOGEwLDAsezB4NDIsMHhjOCwweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2EsMHhjYiwweGVmLDB4Y2IsMHg5MCwweDc5LDB4MjJ9IH0sCit7ICAxNiwweDE4YjAsMCx7MHhlMCwweGZlLDB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYSwweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOH0gfSwKK3sgIDE2LDB4MThjMCwwLHsweDkwLDB4NzksMHgyMSwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmLDB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkfSB9LAoreyAgMTYsMHgxOGQwLDAsezB4ZWMsMHgzOCwweGZjLDB4OTAsMHg3OCwweDEyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDB9IH0sCit7ICAxNiwweDE4ZTAsMCx7MHgwMiwweDEyLDB4MGQsMHhkMiwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHhhMiwweDdiLDB4NDQsMHg3YSwweGFjLDB4NzksMHgwMH0gfSwKK3sgIDE2LDB4MThmMCwwLHsweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MDUsMHg5MCwweDc5LDB4MmQsMHgwNCwweGYwLDB4OTAsMHg3OCwweDEyfSB9LAoreyAgMTYsMHgxOTAwLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHhhMiwweDdiLDB4ODB9IH0sCit7ICAxNiwweDE5MTAsMCx7MHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MDYsMHg5MCwweDc5LDB4MmQsMHg3NH0gfSwKK3sgIDE2LDB4MTkyMCwwLHsweDAyLDB4ZjAsMHg5MCwweDc4LDB4MTIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgxOTMwLDAsezB4MTIsMHgwZCwweGEyLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NzB9IH0sCit7ICAxNiwweDE5NDAsMCx7MHgwNiwweDkwLDB4NzksMHgyZCwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzksMHgyZCwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MDksMHg3NX0gfSwKK3sgIDE2LDB4MTk1MCwwLHsweDBjLDB4NjcsMHg3NSwweDBkLDB4MDYsMHg3NSwweDBlLDB4MGIsMHhlZiwweGI0LDB4MDIsMHgwOCwweGU0LDB4ZjUsMHgwYywweGY1fSB9LAoreyAgMTYsMHgxOTYwLDAsezB4MGQsMHg3NSwweDBlLDB4MGMsMHhlZiwweGI0LDB4MDMsMHgwOCwweGU0LDB4ZjUsMHgwYywweGY1LDB4MGQsMHg3NSwweDBlLDB4MTh9IH0sCit7ICAxNiwweDE5NzAsMCx7MHhlZiwweGI0LDB4MDMsMHgwZCwweDkwLDB4NzksMHgyZSwweGUwLDB4NjQsMHgwMywweDYwLDB4MDUsMHhkMiwweDJmLDB4MTIsMHgzZH0gfSwKK3sgIDE2LDB4MTk4MCwwLHsweDc5LDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAzLDB4NjAsMHgwYSwweGEzLDB4ZTAsMHhiNCwweDAzLDB4MDUsMHhjMiwweDJmfSB9LAoreyAgMTYsMHgxOTkwLDAsezB4MTIsMHgzZCwweDc5LDB4MTIsMHgxMCwweDAwLDB4MTIsMHgyOCwweDAxLDB4MjIsMHg5MCwweDc5LDB4MjMsMHhlMCwweGZmLDB4ZTR9IH0sCit7ICAxNiwweDE5YTAsMCx7MHhmYywweGZkLDB4ZmUsMHhmYiwweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgwZCwweDQyLDB4YzgsMHhlYywweGM4LDB4YzksMHhlZH0gfSwKK3sgIDE2LDB4MTliMCwwLHsweGM5LDB4Y2EsMHhlZSwweGNhLDB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3OSwweDIyLDB4ZTAsMHhmZSwweGU0LDB4ZmMsMHhmZCwweDJifSB9LAoreyAgMTYsMHgxOWMwLDAsezB4ZmIsMHhlYSwweDNlLDB4ZmEsMHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MCwweDc5LDB4MjEsMHhlMCwweGZmLDB4ZTR9IH0sCit7ICAxNiwweDE5ZDAsMCx7MHhmZSwweGViLDB4MmYsMHhmZiwweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjLDB4MzgsMHhmYywweDkwLDB4NzgsMHgxMn0gfSwKK3sgIDE2LDB4MTllMCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDYsMHgxMiwweDBkLDB4ZDIsMHgyMiwweDkwfSB9LAoreyAgMTYsMHgxOWYwLDAsezB4NzksMHgyMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZiLDB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDBkLDB4NDJ9IH0sCit7ICAxNiwweDFhMDAsMCx7MHhjOCwweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2EsMHhjYiwweGVmLDB4Y2IsMHg5MCwweDc5LDB4MjIsMHhlMH0gfSwKK3sgIDE2LDB4MWExMCwwLHsweGZlLDB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYSwweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOCwweDkwfSB9LAoreyAgMTYsMHgxYTIwLDAsezB4NzksMHgyMSwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmLDB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkLDB4ZWN9IH0sCit7ICAxNiwweDFhMzAsMCx7MHgzOCwweGZjLDB4OTAsMHg3OCwweDEyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwYX0gfSwKK3sgIDE2LDB4MWE0MCwwLHsweDEyLDB4MGQsMHhkMiwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzksMHg5NywweGUwfSB9LAoreyAgMTYsMHgxYTUwLDAsezB4MTQsMHg3MCwweDE4LDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZiwweDkwLDB4NzgsMHgxMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDFhNjAsMCx7MHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MGUsMHhlZiwweDEyLDB4MGMsMHg5YywweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0gfSwKK3sgIDEwLDB4MWE3MCwwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgxYTdhLDAsezB4MjJ9IH0sCit7ICAxNiwweDFhN2IsMCx7MHhlNCwweGZmLDB4ZmUsMHg3YiwweDAxLDB4OTAsMHg3OCwweDBmLDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NH0gfSwKK3sgIDE2LDB4MWE4YiwwLHsweDJiLDB4ZjAsMHg5MCwweDc4LDB4MGYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgxYTliLDAsezB4MTIsMHgwYywweDVkLDB4ZmQsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDZkLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA1LDB4NTB9IH0sCit7ICAxNiwweDFhYWIsMCx7MHgwZCwweDBmLDB4OTAsMHg3OCwweDEwLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4OGQsMHgzM30gfSwKK3sgIDE2LDB4MWFiYiwwLHsweDkwLDB4NzgsMHgwZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgxYWNiLDAsezB4NWQsMHhmZCwweDkwLDB4N2YsMHhlZCwweGUwLDB4NmQsMHg2MCwweDEzLDB4ZWUsMHhjMywweDk0LDB4MGIsMHg1MCwweDBkLDB4MGV9IH0sCit7ICAxNiwweDFhZGIsMCx7MHg5MCwweDc4LDB4MTAsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDgwLDB4ZDQsMHg5MCwweDdmLDB4ZWQsMHhlMH0gfSwKK3sgIDE2LDB4MWFlYiwwLHsweGY1LDB4MzQsMHhlZiwweDY0LDB4MDUsMHg2MCwweDAzLDB4YmUsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSB9LAoreyAgMTYsMHgxYWZiLDAsezB4ZjAsMHgyMiwweDkwLDB4NzgsMHgwZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDR9IH0sCit7ICAxNiwweDFiMGIsMCx7MHhmZiwweDI0LDB4ZjAsMHg2MCwweDA4LDB4MjQsMHgwZiwweDcwLDB4MGUsMHgxMiwweDQ5LDB4MmEsMHgyMiwweDEyLDB4NGIsMHg4M30gfSwKK3sgIDE0LDB4MWIxYiwwLHsweDkwLDB4NzksMHgyMCwweGU1LDB4MzQsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDFiMjksMCx7MHgyMn0gfSwKK3sgIDE1LDB4MWIyYSwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4YjQsMHhmZiwweDA0LDB4MTIsMHgzNCwweDE2LDB4MjIsMHgxMiwweDM4LDB4MDAsMHgyMn0gfSwKK3sgICA3LDB4MWIzOSwwLHsweDUzLDB4OTgsMHhmZSwweDUzLDB4OTgsMHhmZCwweDMyfSB9LAoreyAgMTYsMHgxYjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWM4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWNiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxY2MwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWNlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxY2YwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQ0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQ3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWRhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWRkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWUwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWUzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWU2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWU5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNCwweDFlYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlY2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmMmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgICAyLDB4MWYzZSwwLHsweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWY1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWY4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWZiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWZlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjAxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjA0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjA3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjBhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjBkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjEwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjEzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjE2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjE5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjFjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMWQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjFmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjIyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjI1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjI4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjJiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjJlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjMxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjM0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE0LDB4MjM3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzN2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjM4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzYWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjNiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyM2NlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjNlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyM2ZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQ0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQ3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjRhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNGJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjRkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNGVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjUwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjUzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjU2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjU5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNWFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjVjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNWRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjVmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjYyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjY1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjY4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjZiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNmNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE0LDB4MjZlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjcwYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzFjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3MmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjczYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzRjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3NWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4Mjc2YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzdjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3OGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4Mjc5YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyN2FjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3YmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjdjYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyN2RjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3ZWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgICA1LDB4MjdmYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9IH0sCit7ICAxNiwweDI4MDEsMCx7MHg5MCwweDc5LDB4NjQsMHhlMCwweDE0LDB4NjAsMHg0NiwweDE0LDB4NzAsMHgwMiwweDQxLDB4M2MsMHgyNCwweDAyLDB4NjAsMHgwMn0gfSwKK3sgIDE2LDB4MjgxMSwwLHsweDgxLDB4MmEsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyODIxLDAsezB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NTQsMHhmZCwweGYwLDB4NDR9IH0sCit7ICAxNiwweDI4MzEsMCx7MHgwMSwweGYwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4Mjg0MSwwLHsweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4ZTQsMHg5MCwweDc5LDB4N2EsMHhmMCwweDIyLDB4OTAsMHg3OSwweDJkfSB9LAoreyAgMTYsMHgyODUxLDAsezB4ZTAsMHg2NCwweDAxLDB4NjAsMHgwMiwweDAxLDB4ZjEsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmZ9IH0sCit7ICAxNiwweDI4NjEsMCx7MHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4Mjg3MSwwLHsweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdlLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyODgxLDAsezB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDI4OTEsMCx7MHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4MjhhMSwwLHsweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyOGIxLDAsezB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTB9IH0sCit7ICAxNiwweDI4YzEsMCx7MHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMH0gfSwKK3sgIDE2LDB4MjhkMSwwLHsweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDdhLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY1fSB9LAoreyAgMTYsMHgyOGUxLDAsezB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjB9IH0sCit7ICAxNiwweDI4ZjEsMCx7MHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDIsMHg2MCwweDAyLDB4MjEsMHg5NiwweDkwLDB4N2YsMHhmYywweDc0LDB4YzgsMHhmMH0gfSwKK3sgIDE2LDB4MjkwMSwwLHsweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwfSB9LAoreyAgMTYsMHgyOTExLDAsezB4OTAsMHg3OSwweDc5LDB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDF9IH0sCit7ICAxNiwweDI5MjEsMCx7MHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYn0gfSwKK3sgIDE2LDB4MjkzMSwwLHsweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyfSB9LAoreyAgMTYsMHgyOTQxLDAsezB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDI5NTEsMCx7MHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMH0gfSwKK3sgIDE2LDB4Mjk2MSwwLHsweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMiwweGYwfSB9LAoreyAgMTYsMHgyOTcxLDAsezB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDI5ODEsMCx7MHg5MCwweDc5LDB4NjUsMHg3NCwweDAzLDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4Y30gfSwKK3sgIDE2LDB4Mjk5MSwwLHsweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHgyYSwweDkwfSB9LAoreyAgMTYsMHgyOWExLDAsezB4N2YsMHhmYywweDc0LDB4OTgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDF9IH0sCit7ICAxNiwweDI5YjEsMCx7MHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MjljMSwwLHsweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwfSB9LAoreyAgMTYsMHgyOWQxLDAsezB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWZ9IH0sCit7ICAxNiwweDI5ZTEsMCx7MHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MjlmMSwwLHsweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYTAxLDAsezB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDJhMTEsMCx7MHg3OSwweGUwLDB4NTQsMHhmZCwweGYwLDB4NDQsMHgwNCwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MH0gfSwKK3sgIDE2LDB4MmEyMSwwLHsweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjUsMHg3NCwweDA1LDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyfSB9LAoreyAgMTYsMHgyYTMxLDAsezB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHgyMiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjR9IH0sCit7ICAxNiwweDJhNDEsMCx7MHgwMSwweDYwLDB4MDIsMHg0MSwweGUwLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhiNCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmY30gfSwKK3sgIDE2LDB4MmE1MSwwLHsweGYwLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDdjLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDU0fSB9LAoreyAgMTYsMHgyYTYxLDAsezB4ZmUsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg3ZSwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTB9IH0sCit7ICAxNiwweDJhNzEsMCx7MHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMH0gfSwKK3sgIDE2LDB4MmE4MSwwLHsweDkwLDB4NzksMHg3YywweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwfSB9LAoreyAgMTYsMHgyYTkxLDAsezB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2Z9IH0sCit7ICAxNiwweDJhYTEsMCx7MHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MmFiMSwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYWMxLDAsezB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3YSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2NSwweDA0LDB4ZjB9IH0sCit7ICAxNiwweDJhZDEsMCx7MHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MmFlMSwwLHsweDc5LDB4MmQsMHhlMCwweDY0LDB4MDIsMHg2MCwweDAyLDB4NjEsMHg4NSwweDkwLDB4N2YsMHhmYywweDc0LDB4YjAsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyYWYxLDAsezB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTB9IH0sCit7ICAxNiwweDJiMDEsMCx7MHg3OSwweDc5LDB4ZjAsMHg1NCwweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOX0gfSwKK3sgIDE2LDB4MmIxMSwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwfSB9LAoreyAgMTYsMHgyYjIxLDAsezB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWZ9IH0sCit7ICAxNiwweDJiMzEsMCx7MHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MmI0MSwwLHsweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwfSB9LAoreyAgMTYsMHgyYjUxLDAsezB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMiwweGYwLDB4NTR9IH0sCit7ICAxNiwweDJiNjEsMCx7MHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MmI3MSwwLHsweDc5LDB4NjUsMHg3NCwweDA0LDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwfSB9LAoreyAgMTYsMHgyYjgxLDAsezB4OTAsMHg3OSwweDhiLDB4ZjAsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHgyYSwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDJiOTEsMCx7MHhmYywweDc0LDB4NjgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MmJhMSwwLHsweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg1NCwweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYmIxLDAsezB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4Nzl9IH0sCit7ICAxNiwweDJiYzEsMCx7MHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNH0gfSwKK3sgIDE2LDB4MmJkMSwwLHsweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYmUxLDAsezB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDJiZjEsMCx7MHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MmMwMSwwLHsweGUwLDB4NTQsMHhmZCwweGYwLDB4NDQsMHgwNCwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYzExLDAsezB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjUsMHg3NCwweDA2LDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWZ9IH0sCit7ICAxMCwweDJjMjEsMCx7MHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MmMyYiwwLHsweGU0LDB4ZmYsMHg3YiwweDAxLDB4OTAsMHg3OCwweDE2LDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweDU4fSB9LAoreyAgMTYsMHgyYzNiLDAsezB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4MTJ9IH0sCit7ICAxNiwweDJjNGIsMCx7MHgwYywweDVkLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDZlLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwZH0gfSwKK3sgIDE2LDB4MmM1YiwwLHsweDBmLDB4OTAsMHg3OCwweDE3LDB4ZTQsMHg3NSwweGYwLDB4MGYsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4YmYsMHgwNiwweDA4fSB9LAoreyAgMTYsMHgyYzZiLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDJjN2IsMCx7MHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZiwweDI0LDB4OWYsMHg3MCwweDAyLDB4YzEsMHg2NiwweDI0LDB4MjEsMHg2MH0gfSwKK3sgIDE2LDB4MmM4YiwwLHsweDAyLDB4YzEsMHg4YywweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZSwweDcwLDB4MDIsMHhhMSwweDMwLDB4MTQsMHg3MCwweDAyfSB9LAoreyAgMTYsMHgyYzliLDAsezB4YTEsMHhjOCwweDI0LDB4MDIsMHg2MCwweDAyLDB4YzEsMHg1ZSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHhhMiwweDdiLDB4NDR9IH0sCit7ICAxNiwweDJjYWIsMCx7MHg3YSwweGFjLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NH0gfSwKK3sgIDE2LDB4MmNiYiwwLHsweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyY2NiLDAsezB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4YTJ9IH0sCit7ICAxNiwweDJjZGIsMCx7MHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDEzLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MmNlYiwwLHsweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzfSB9LAoreyAgMTYsMHgyY2ZiLDAsezB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyLDB4MTJ9IH0sCit7ICAxNiwweDJkMGIsMCx7MHgwZCwweGEyLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NjAsMHgwMn0gfSwKK3sgIDE2LDB4MmQxYiwwLHsweGMxLDB4OTMsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgyZDJiLDAsezB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDJkM2IsMCx7MHg5MCwweDAwLDB4MDYsMHgxMiwweDBkLDB4YTIsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMn0gfSwKK3sgIDE2LDB4MmQ0YiwwLHsweDBkLDB4OTEsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTMsMHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzfSB9LAoreyAgMTYsMHgyZDViLDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTN9IH0sCit7ICAxNiwweDJkNmIsMCx7MHhlMCwweGY5LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwZCwweGEyLDB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMH0gfSwKK3sgIDE2LDB4MmQ3YiwwLHsweGMzLDB4MTIsMHgwZCwweDkxLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwfSB9LAoreyAgMTYsMHgyZDhiLDAsezB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDJkOWIsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MGQsMHhhMiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMX0gfSwKK3sgIDE2LDB4MmRhYiwwLHsweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDYwLDB4MDIsMHhjMSwweDkzLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0fSB9LAoreyAgMTYsMHgyZGJiLDAsezB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDc4LDB4MTZ9IH0sCit7ICAxNiwweDJkY2IsMCx7MHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwZCwweGEyLDB4N2IsMHg0NH0gfSwKK3sgIDE2LDB4MmRkYiwwLHsweDdhLDB4YWMsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0fSB9LAoreyAgMTYsMHgyZGViLDAsezB4NDQsMHhmMCwweGEzLDB4NzQsMHhhYywweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTB9IH0sCit7ICAxNiwweDJkZmIsMCx7MHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGQsMHhhMn0gfSwKK3sgIDE2LDB4MmUwYiwwLHsweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MTMsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgyZTFiLDAsezB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDN9IH0sCit7ICAxNiwweDJlMmIsMCx7MHhmMCwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MGEsMHgxMn0gfSwKK3sgIDE2LDB4MmUzYiwwLHsweDBkLDB4YTIsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDQ4fSB9LAoreyAgMTYsMHgyZTRiLDAsezB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9IH0sCit7ICAxNiwweDJlNWIsMCx7MHgwMywweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNH0gfSwKK3sgIDE2LDB4MmU2YiwwLHsweDdmLDB4NzAsMHgxNiwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgMTYsMHgyZTdiLDAsezB4MGUsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgOCwweDJlOGIsMCx7MHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgyZTkzLDAsezB4MjJ9IH0sCit7ICAxNiwweDJlOTQsMCx7MHg3NSwweDM2LDB4MjUsMHg3NSwweDM3LDB4MjQsMHg5MCwweDc5LDB4NzQsMHhlMCwweDY0LDB4MDEsMHg3MCwweDU0LDB4ZjAsMHhmNX0gfSwKK3sgIDE2LDB4MmVhNCwwLHsweDM1LDB4NzUsMHgyMiwweDAxLDB4ZTUsMHgyMiwweDY0LDB4MDEsMHg3MCwweDQ4LDB4OTAsMHg3ZiwweGE1LDB4ZTAsMHg0NCwweDgwfSB9LAoreyAgMTYsMHgyZWI0LDAsezB4ZjAsMHg5MCwweDdmLDB4YTYsMHhlNSwweDM2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NCwweDRmLDB4MjUsMHgzNSwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDJlYzQsMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyLDB4NDYsMHhjMCwweDc0LDB4MzUsMHgyNX0gfSwKK3sgIDE2LDB4MmVkNCwwLHsweDM1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHhhNiwweGYwLDB4MTIsMHg0NiwweGMwfSB9LAoreyAgMTYsMHgyZWU0LDAsezB4OTAsMHg3ZiwweGE1LDB4NzQsMHg0MCwweGYwLDB4MTIsMHgwYSwweGNkLDB4MDUsMHgzNSwweGU1LDB4MzUsMHhjMywweDk0LDB4MGR9IH0sCit7ICAxNiwweDJlZjQsMCx7MHg0MCwweGIyLDB4OTAsMHg3OSwweDc1LDB4ZTAsMHg2NCwweDAxLDB4NjAsMHgwMiwweGUxLDB4ZGUsMHhmMCwweDkwLDB4NzksMHgyMH0gfSwKK3sgIDE2LDB4MmYwNCwwLHsweGUwLDB4NjQsMHgwNSwweDYwLDB4MDIsMHhlMSwweDhkLDB4N2IsMHgwMSwweDkwLDB4NzksMHg1YywweDA0LDB4ZjAsMHhhMywweDc0fSB9LAoreyAgMTYsMHgyZjE0LDAsezB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4NzUsMHgzMywweDA3LDB4OTAsMHg3OSwweDVjLDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDJmMjQsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDEyLDB4MGMsMHg1ZCwweDcwLDB4MGYsMHg5MCwweDAwLDB4MDQsMHgxMn0gfSwKK3sgIDE2LDB4MmYzNCwwLHsweDBjLDB4NWQsMHg5MCwweDc5LDB4MmYsMHhmMCwweDEyLDB4MGMsMHgyOSwweDgwLDB4MDYsMHg5MCwweDc5LDB4MmYsMHg3NCwweGZmfSB9LAoreyAgMTYsMHgyZjQ0LDAsezB4ZjAsMHhlNCwweGY1LDB4MzUsMHg3NSwweDIyLDB4MDEsMHg3NSwweDM0LDB4MDIsMHhlNSwweDIyLDB4NjQsMHgwMSwweDcwLDB4Mzl9IH0sCit7ICAxNiwweDJmNTQsMCx7MHg5MCwweDdmLDB4YTUsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhhNiwweGU1LDB4MzYsMHhmMCwweDEyLDB4NDYsMHhjMH0gfSwKK3sgIDE2LDB4MmY2NCwwLHsweGFmLDB4MzQsMHgwNSwweDM0LDB4OTAsMHg3ZiwweGE2LDB4ZWYsMHhmMCwweDEyLDB4NDYsMHhjMCwweDkwLDB4NzksMHgyZiwweGUwfSB9LAoreyAgMTYsMHgyZjc0LDAsezB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwLDB4ZjAsMHgxMiwweDBhLDB4Y2R9IH0sCit7ICAxNiwweDJmODQsMCx7MHgwNSwweDM1LDB4ZTUsMHgzNSwweGMzLDB4OTQsMHgwNiwweDQwLDB4YzEsMHg5MCwweDc5LDB4MjAsMHhlMCwweDY0LDB4MDYsMHg3MH0gfSwKK3sgIDE2LDB4MmY5NCwwLHsweDQ5LDB4N2IsMHgwMSwweDkwLDB4NzksMHg1ZiwweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwfSB9LAoreyAgMTYsMHgyZmE0LDAsezB4NzUsMHgzMywweDAzLDB4OTAsMHg3OSwweDVmLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDB9IH0sCit7ICAxNiwweDJmYjQsMCx7MHgwMSwweDEyLDB4MGMsMHg1ZCwweDcwLDB4MWMsMHg5MCwweDAwLDB4MDQsMHgxMiwweDBjLDB4NWQsMHg5MCwweDc5LDB4MzMsMHhmMH0gfSwKK3sgIDE2LDB4MmZjNCwwLHsweDcwLDB4MDMsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDc5LDB4MzMsMHhlMCwweDU0LDB4N2YsMHhmZiwweGYwLDB4MjUsMHhlMCwweGYwfSB9LAoreyAgMTAsMHgyZmQ0LDAsezB4ODAsMHgwNSwweGU0LDB4OTAsMHg3OSwweDMzLDB4ZjAsMHgxMiwweDQ3LDB4ZGZ9IH0sCit7ICAgMSwweDJmZGUsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MmZkZiwwLHsweDkwLDB4NzksMHg3OCwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzksMHg4MywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHgyZmVmLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAgMSwweDJmZmYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MzAwMCwwLHsweGU0LDB4ZmUsMHg5MCwweDc5LDB4MjAsMHhlMCwweGZkLDB4YjQsMHgwNSwweDExLDB4OTAsMHg3OCwweDI1LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgzMDEwLDAsezB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4YjIsMHhmMCwweDc1LDB4MzUsMHgwNywweGVkLDB4YjQsMHgwNiwweDExLDB4OTB9IH0sCit7ICAxNiwweDMwMjAsMCx7MHg3OCwweDI1LDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4ZmYsMHhmMCwweDc1LDB4MzUsMHgwM30gfSwKK3sgIDE2LDB4MzAzMCwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg2MCwweDExLDB4MTQsMHg2MCwweDViLDB4MjQsMHgwMiwweDYwLDB4MDIsMHg0MSwweDA1fSB9LAoreyAgMTYsMHgzMDQwLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4M2R9IH0sCit7ICAxNiwweDMwNTAsMCx7MHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDJmLDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzA2MCwwLHsweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NCwweDAwfSB9LAoreyAgMTYsMHgzMDcwLDAsezB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MCwweDc4LDB4MjYsMHhlNCwweDc1LDB4ZjB9IH0sCit7ICAxNiwweDMwODAsMCx7MHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhjYiwweDkwLDB4N2YsMHhiNSwweGVlLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNH0gfSwKK3sgIDE2LDB4MzA5MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2UsMHg2MCwweDY0LDB4MTQsMHg3MCwweDAyfSB9LAoreyAgMTYsMHgzMGEwLDAsezB4MjEsMHg1NSwweDE0LDB4NzAsMHgwMiwweDIxLDB4YTksMHgyNCwweDAzLDB4NjAsMHgwMiwweDIxLDB4ZmQsMHhlNCwweGZmLDB4ZWZ9IH0sCit7ICAxNiwweDMwYjAsMCx7MHhjMywweDk1LDB4MzUsMHg1MCwweDQ2LDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDE2LDB4MzBjMCwwLHsweDkwLDB4MDAsMHgwMywweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NCwweDAwLDB4MmMsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgzMGQwLDAsezB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MCwweDAwLDB4MDQsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWV9IH0sCit7ICAxNiwweDMwZTAsMCx7MHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzBmMCwwLHsweDI2LDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwfSB9LAoreyAgMTYsMHgzMTAwLDAsezB4MjIsMHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDQ2LDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMxMTAsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNSwweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NH0gfSwKK3sgIDE2LDB4MzEyMCwwLHsweDAwLDB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzMTMwLDAsezB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODN9IH0sCit7ICAxNiwweDMxNDAsMCx7MHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHg5MH0gfSwKK3sgIDE2LDB4MzE1MCwwLHsweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDQ2LDB4OTAsMHg3OCwweDI1fSB9LAoreyAgMTYsMHgzMTYwLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNywweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2N9IH0sCit7ICAxNiwweDMxNzAsMCx7MHhlZSwweGNjLDB4MGUsMHg3NCwweDAwLDB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MzE4MCwwLHsweDAwLDB4MDgsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAgMTYsMHgzMTkwLDAsezB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjR9IH0sCit7ICAxNiwweDMxYTAsMCx7MHgwZiwweDgwLDB4YjQsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MH0gfSwKK3sgIDE2LDB4MzFiMCwwLHsweDQ2LDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwOSwweDEyfSB9LAoreyAgMTYsMHgzMWMwLDAsezB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NCwweDAwLDB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjV9IH0sCit7ICAxNiwweDMxZDAsMCx7MHg4MywweGVkLDB4ZjAsMHg5MCwweDAwLDB4MGEsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMH0gfSwKK3sgIDE2LDB4MzFlMCwwLHsweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwfSB9LAoreyAgMTYsMHgzMWYwLDAsezB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxMiwweDMyMDAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDMyMGMsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MzIwZCwwLHsweDdiLDB4MDEsMHg3YSwweDc4LDB4NzksMHgyYiwweDkwLDB4NzgsMHgwMCwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5fSB9LAoreyAgMTYsMHgzMjFkLDAsezB4ZjAsMHg3NCwweDAxLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMyMmQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHhlNCwweDEyLDB4MGMsMHg5Y30gfSwKK3sgIDE2LDB4MzIzZCwwLHsweDkwLDB4NzgsMHgwMSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzfSB9LAoreyAgMTYsMHgzMjRkLDAsezB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDc0LDB4MTAsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDMyNWQsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwNSwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4MzI2ZCwwLHsweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzMjdkLDAsezB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMiwweDEyLDB4MGMsMHg4YSwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMyOGQsMCx7MHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDAyLDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4MzI5ZCwwLHsweDljLDB4OTAsMHgwMCwweDAyLDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyfSB9LAoreyAgMTYsMHgzMmFkLDAsezB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDAxLDB4MTJ9IH0sCit7ICAxNiwweDMyYmQsMCx7MHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMX0gfSwKK3sgIDE2LDB4MzJjZCwwLHsweDc0LDB4MDMsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwMSwweGU0fSB9LAoreyAgMTYsMHgzMmRkLDAsezB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMyZWQsMCx7MHhmOSwweDc0LDB4MTAsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMH0gfSwKK3sgIDE2LDB4MzJmZCwwLHsweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwNiwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweGU0LDB4MTIsMHgwYywweDljfSB9LAoreyAgMTYsMHgzMzBkLDAsezB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDMzMWQsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMiwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4MzMyZCwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgzMzNkLDAsezB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMzNGQsMCx7MHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDAyLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzM1ZCwwLHsweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDQsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzMzZkLDAsezB4OWMsMHg5MCwweDAwLDB4MDIsMHg3NCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDN9IH0sCit7ICAxNiwweDMzN2QsMCx7MHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMn0gfSwKK3sgIDE2LDB4MzM4ZCwwLHsweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgMTYsMHgzMzlkLDAsezB4MDEsMHg3NCwweDAzLDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgwNCwweDEyLDB4MGMsMHg5YywweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMzYWQsMCx7MHgwMSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzNiZCwwLHsweGEzLDB4ZTAsMHhmOSwweDc0LDB4MDIsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhfSB9LAoreyAgMTYsMHgzM2NkLDAsezB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwMiwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweDc0LDB4MDR9IH0sCit7ICAxNiwweDMzZGQsMCx7MHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMH0gfSwKK3sgIDE2LDB4MzNlZCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDAyLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwfSB9LAoreyAgMTYsMHgzM2ZkLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAgOCwweDM0MGQsMCx7MHg5MCwweDAwLDB4MDIsMHg3NCwweDA0LDB4MTIsMHgwYywweDljfSB9LAoreyAgIDEsMHgzNDE1LDAsezB4MjJ9IH0sCit7ICAxNiwweDM0MTYsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMSwweDkwLDB4NzgsMHgxZiwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzQyNiwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3NSwweDM1LDB4MDcsMHhlZCwweGI0LDB4MDYsMHgxMSwweDkwfSB9LAoreyAgMTYsMHgzNDM2LDAsezB4NzgsMHgxZiwweDc0LDB4MDEsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGZmLDB4ZjAsMHg3NSwweDM1LDB4MDN9IH0sCit7ICAxNiwweDM0NDYsMCx7MHg5MCwweDc5LDB4OTksMHhlMCwweDE0LDB4NjAsMHgxMSwweDE0LDB4NjAsMHg1YiwweDI0LDB4MDIsMHg2MCwweDAyLDB4YzEsMHgwNn0gfSwKK3sgIDE2LDB4MzQ1NiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc5LDB4OTcsMHhlMCwweDE0LDB4NzAsMHgzZSwweGU0fSB9LAoreyAgMTYsMHgzNDY2LDAsezB4ZmYsMHhlZiwweGMzLDB4OTUsMHgzNSwweDUwLDB4MmYsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjEsMHgyZCwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDM0NzYsMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHhmZCwweDkwLDB4NzgsMHgxZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhM30gfSwKK3sgIDE2LDB4MzQ4NiwwLHsweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHhlZCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgyMCwweGU0LDB4NzUsMHhmMCwweDBifSB9LAoreyAgMTYsMHgzNDk2LDAsezB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGNiLDB4OTAsMHg3OSwweDc1LDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxNiwweDM0YTYsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OSwweDk3LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHg2MywweDE0LDB4NzAsMHgwMn0gfSwKK3sgIDE2LDB4MzRiNiwwLHsweGExLDB4NjQsMHgxNCwweDcwLDB4MDIsMHhhMSwweGIyLDB4MjQsMHgwMywweDYwLDB4MDIsMHhhMSwweGZlLDB4ZTQsMHhmZiwweGVmfSB9LAoreyAgMTYsMHgzNGM2LDAsezB4YzMsMHg5NSwweDM1LDB4NTAsMHg0NCwweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMSwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzR9IH0sCit7ICAxNiwweDM0ZDYsMCx7MHg3OSwweGY1LDB4ODMsMHhlMCwweGZkLDB4OTAsMHg3OCwweDFmLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDE2LDB4MzRlNiwwLHsweDkwLDB4MDAsMHgwMywweGVkLDB4MTIsMHgwYywweDljLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxLDB4MmQsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgzNGY2LDAsezB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDIwLDB4ZTR9IH0sCit7ICAxNiwweDM1MDYsMCx7MHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjYsMHg5MCwweDc5LDB4NzUsMHg3NCwweDAxLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MzUxNiwwLHsweGU0LDB4ZmYsMHhlZiwweGMzLDB4OTUsMHgzNSwweDQwLDB4MDIsMHhjMSwweDBkLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxfSB9LAoreyAgMTYsMHgzNTI2LDAsezB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4ZmQsMHg5MCwweDc4LDB4MWYsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDM1MzYsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA1LDB4ZWQsMHgxMiwweDBjLDB4OWMsMHhjZCwweGVlLDB4Y2QsMHgwZX0gfSwKK3sgIDE2LDB4MzU0NiwwLHsweDc0LDB4MjEsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzNTU2LDAsezB4OWMsMHg5MCwweDc4LDB4MjAsMHhlNCwweDc1LDB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhiNCwweGU0LDB4ZmZ9IH0sCit7ICAxNiwweDM1NjYsMCx7MHhlZiwweGMzLDB4OTUsMHgzNSwweDQwLDB4MDIsMHhjMSwweDBkLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxLDB4MmQsMHhmNX0gfSwKK3sgIDE2LDB4MzU3NiwwLHsweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4ZmQsMHg5MCwweDc4LDB4MWYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhfSB9LAoreyAgMTYsMHgzNTg2LDAsezB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA3LDB4ZWQsMHgxMiwweDBjLDB4OWMsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjF9IH0sCit7ICAxNiwweDM1OTYsMCx7MHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDBjLDB4OWMsMHg5MH0gfSwKK3sgIDE2LDB4MzVhNiwwLHsweDc4LDB4MjAsMHhlNCwweDc1LDB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhiNCwweGU0LDB4ZmYsMHhlZiwweGMzfSB9LAoreyAgMTYsMHgzNWI2LDAsezB4OTUsMHgzNSwweDUwLDB4NTMsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjEsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4Nzl9IH0sCit7ICAxNiwweDM1YzYsMCx7MHhmNSwweDgzLDB4ZTAsMHhmZCwweDkwLDB4NzgsMHgxZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MH0gfSwKK3sgIDE2LDB4MzVkNiwwLHsweDAwLDB4MDksMHhlZCwweDEyLDB4MGMsMHg5YywweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMSwweDJkLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAgMTYsMHgzNWU2LDAsezB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgyMCwweGU0LDB4NzV9IH0sCit7ICAxNiwweDM1ZjYsMCx7MHhmMCwweDBiLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGI2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn0gfSwKK3sgICA3LDB4MzYwNiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgzNjBkLDAsezB4MjJ9IH0sCit7ICAxNiwweDM2MGUsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMCwweDkwLDB4NzgsMHgyOCwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzYxZSwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3ZiwweDA3LDB4ZWQsMHhiNCwweDA2LDB4MTAsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzNjJlLDAsezB4MjgsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwLDB4N2YsMHgwMywweDkwLDB4Nzh9IH0sCit7ICAxNiwweDM2M2UsMCx7MHgyOCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZCwweDkwLDB4N2YsMHhlYX0gfSwKK3sgIDE2LDB4MzY0ZSwwLHsweGUwLDB4NmQsMHg2MCwweDEyLDB4ZWUsMHhjMywweDlmLDB4NTAsMHgwZCwweDkwLDB4NzgsMHgyOSwweGU0LDB4NzUsMHhmMCwweDBifSB9LAoreyAgMTYsMHgzNjVlLDAsezB4MTIsMHgwYywweGY0LDB4MGUsMHg4MCwweGQ4LDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgxNCwweDYwLDB4NDZ9IH0sCit7ICAxNiwweDM2NmUsMCx7MHgyNCwweDAyLDB4NjAsMHgwMiwweGUxLDB4OWEsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MzY3ZSwwLHsweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgyOCwweGVlLDB4NmYsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSB9LAoreyAgMTYsMHgzNjhlLDAsezB4ZjAsMHgyMiwweDkwLDB4NzgsMHgyOCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDF9IH0sCit7ICAxNiwweDM2OWUsMCx7MHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MzZhZSwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZSwweDYwLDB4NDAsMHgxNCwweDYwfSB9LAoreyAgMTYsMHgzNmJlLDAsezB4NmYsMHgxNCwweDcwLDB4MDIsMHhlMSwweDYwLDB4MjQsMHgwMywweDYwLDB4MDIsMHhlMSwweDkyLDB4ZWUsMHg2ZiwweDcwLDB4MDh9IH0sCit7ICAxNiwweDM2Y2UsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OCwweDI4LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzZkZSwwLHsweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMywweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHgwMCwweDA0fSB9LAoreyAgMTYsMHgzNmVlLDAsezB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweGVlLDB4NmZ9IH0sCit7ICAxNiwweDM2ZmUsMCx7MHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgyOCwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4MzcwZSwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDUsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgzNzFlLDAsezB4MDAsMHgwNiwweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDM3MmUsMCx7MHhlZSwweDZmLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc4LDB4MjgsMHhlMH0gfSwKK3sgIDE2LDB4MzczZSwwLHsweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA3LDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAwfSB9LAoreyAgMTYsMHgzNzRlLDAsezB4ZjAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDM3NWUsMCx7MHhmMCwweDIyLDB4ZWUsMHg2ZiwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4Mzc2ZSwwLHsweDI4LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MGMsMHg1ZCwweDkwfSB9LAoreyAgMTYsMHgzNzdlLDAsezB4N2YsMHgwMCwweGYwLDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjV9IH0sCit7ICAxNiwweDM3OGUsMCx7MHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMH0gfSwKK3sgICAzLDB4Mzc5ZSwwLHsweDQ0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4MzdhMSwwLHsweDIyfSB9LAoreyAgMTYsMHgzN2EyLDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDM3YjIsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn0gfSwKK3sgIDE2LDB4MzdjMiwwLHsweGMwLDB4ZTAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDEwLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHhlMCwweDU0fSB9LAoreyAgMTYsMHgzN2QyLDAsezB4ZmQsMHhmMCwweDEyLDB4MmYsMHhkZiwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTB9IH0sCit7ICAxNiwweDM3ZTIsMCx7MHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMH0gfSwKK3sgICA4LDB4MzdmMiwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAgNiwweDM3ZmEsMCx7MHg1MywweDkxLDB4YmYsMHhkMiwweDI2LDB4MzJ9IH0sCit7ICAxNiwweDM4MDAsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMCwweDkwLDB4NzgsMHgyMiwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzgxMCwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3ZiwweDA3LDB4ZWQsMHhiNCwweDA2LDB4MTAsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzODIwLDAsezB4MjIsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwLDB4N2YsMHgwMywweDkwLDB4Nzh9IH0sCit7ICAxNiwweDM4MzAsMCx7MHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZCwweDkwLDB4NzksMHg5OH0gfSwKK3sgIDE2LDB4Mzg0MCwwLHsweGUwLDB4NmQsMHg2MCwweDEyLDB4ZWUsMHhjMywweDlmLDB4NTAsMHgwZCwweDkwLDB4NzgsMHgyMywweGU0LDB4NzUsMHhmMCwweDBifSB9LAoreyAgMTYsMHgzODUwLDAsezB4MTIsMHgwYywweGY0LDB4MGUsMHg4MCwweGQ4LDB4OTAsMHg3OSwweDk5LDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgxNCwweDYwLDB4NDh9IH0sCit7ICAxNiwweDM4NjAsMCx7MHgyNCwweDAyLDB4NjAsMHgwMiwweDIxLDB4ODUsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4Mzg3MCwwLHsweDk3LDB4ZTAsMHgxNCwweDcwLDB4MmIsMHhlZSwweDZmLDB4NzAsMHgwOSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgzODgwLDAsezB4ODAsMHgxNywweDkwLDB4NzksMHgyMSwweGUwLDB4ZmQsMHg5MCwweDc4LDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTN9IH0sCit7ICAxNiwweDM4OTAsMCx7MHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4ZWQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc5LDB4NzUsMHg3NCwweDAxLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MzhhMCwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc5LDB4OTcsMHhlMCwweDI0LDB4ZmUsMHg2MCwweDQzfSB9LAoreyAgMTYsMHgzOGIwLDAsezB4MTQsMHg2MCwweDZlLDB4MTQsMHg3MCwweDAyLDB4MjEsMHg0ZiwweDI0LDB4MDMsMHg2MCwweDAyLDB4MjEsMHg3ZCwweGVlLDB4NmZ9IH0sCit7ICAxNiwweDM4YzAsMCx7MHg3MCwweDA5LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDIxLDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZH0gfSwKK3sgIDE2LDB4MzhkMCwwLHsweDkwLDB4NzgsMHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDMsMHhlZCwweDEyfSB9LAoreyAgMTYsMHgzOGUwLDAsezB4MGMsMHg5YywweDkwLDB4NzksMHgyMiwweGUwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OSwweDc1LDB4NzR9IH0sCit7ICAxNiwweDM4ZjAsMCx7MHgwMSwweGYwLDB4MjIsMHhlZSwweDZmLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH0gfSwKK3sgIDE2LDB4MzkwMCwwLHsweDc5LDB4MjEsMHhlMCwweGZkLDB4OTAsMHg3OCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgzOTEwLDAsezB4MDAsMHgwNSwweGVkLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OSwweDIyLDB4ZTAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAxNiwweDM5MjAsMCx7MHgyMiwweGVlLDB4NmYsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzksMHgyMX0gfSwKK3sgIDE2LDB4MzkzMCwwLHsweGUwLDB4ZmQsMHg5MCwweDc4LDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA3fSB9LAoreyAgMTYsMHgzOTQwLDAsezB4ZWQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc5LDB4MjIsMHhlMCwweDkwLDB4MDAsMHgwOCwweDEyLDB4MGMsMHg5YywweDIyLDB4ZWV9IH0sCit7ICAxNiwweDM5NTAsMCx7MHg2ZiwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZX0gfSwKK3sgIDE2LDB4Mzk2MCwwLHsweDkwLDB4NzgsMHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDksMHhlZSwweDEyfSB9LAoreyAgMTYsMHgzOTcwLDAsezB4MGMsMHg5YywweDkwLDB4NzksMHgyMiwweGUwLDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwYywweDljLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxMiwweDM5ODAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDM5OGMsMCx7MHgyMn0gfSwKK3sgIDE2LDB4Mzk4ZCwwLHsweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGU0LDB4OTAsMHg3OSwweDgzLDB4ZjAsMHgxMiwweDJmLDB4ZGYsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgzOTlkLDAsezB4ZTAsMHg3NCwweDkwLDB4ZjAsMHg5MCwweDdmLDB4ZTEsMHg3NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4N2YsMHhkZCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDM5YWQsMCx7MHg3ZiwweGExLDB4ZjAsMHg1MywweDhlLDB4ZjgsMHg3NSwweDg4LDB4MDUsMHg3NSwweGI4LDB4MjAsMHg3NSwweGY4LDB4MDEsMHg0M30gfSwKK3sgIDE2LDB4MzliZCwwLHsweDhlLDB4MzAsMHhmNSwweGM4LDB4NzUsMHhjYSwweDdmLDB4NzUsMHhjYiwweGY4LDB4NDMsMHhhOCwweDIwLDB4OTAsMHg3OSwweDc0fSB9LAoreyAgMTYsMHgzOWNkLDAsezB4MDQsMHhmMCwweGMyLDB4MjIsMHhlNCwweGY1LDB4MGYsMHg5MCwweDc5LDB4NzgsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDc5LDB4NjJ9IH0sCit7ICAxNiwweDM5ZGQsMCx7MHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3OSwweDY2LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhM30gfSwKK3sgIDE2LDB4MzllZCwwLHsweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHg5MCwweDc5LDB4N2QsMHhmMCwweDkwLDB4NzksMHg3NSwweGYwLDB4YTMsMHhmMCwweGEzfSB9LAoreyAgMTYsMHgzOWZkLDAsezB4ZjAsMHhjMiwweDIzLDB4YzIsMHgyNCwweGMyLDB4MjUsMHhjMiwweDI2LDB4YzIsMHgyMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZjV9IH0sCit7ICAxNiwweDNhMGQsMCx7MHgwYSwweDU0LDB4MjAsMHhmNSwweDBhLDB4NzAsMHgwNiwweDkwLDB4NzksMHg3ZSwweGYwLDB4ODAsMHgwNiwweDkwLDB4NzksMHg3ZX0gfSwKK3sgIDE2LDB4M2ExZCwwLHsweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZjUsMHgwYSwweDU0LDB4MDIsMHhmNSwweDBhLDB4NzAsMHgwNiwweDkwfSB9LAoreyAgMTYsMHgzYTJkLDAsezB4NzksMHg3ZiwweGYwLDB4ODAsMHgwNiwweDkwLDB4NzksMHg3ZiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDNhM2QsMCx7MHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2YsMHhlMCwweGI0LDB4MDEsMHgwOX0gfSwKK3sgIDE2LDB4M2E0ZCwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgzYTVkLDAsezB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3OCwweDc0LDB4MDF9IH0sCit7ICAxNiwweDNhNmQsMCx7MHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOX0gfSwKK3sgIDE2LDB4M2E3ZCwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwfSB9LAoreyAgMTYsMHgzYThkLDAsezB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweDEyLDB4MGIsMHhhMiwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjB9IH0sCit7ICAxNiwweDNhOWQsMCx7MHhhMywweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzksMHg4OCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhkZH0gfSwKK3sgIDE2LDB4M2FhZCwwLHsweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMSwweGYwLDB4YTMsMHhmMCwweDEyfSB9LAoreyAgMTYsMHgzYWJkLDAsezB4MGIsMHhhMiwweGU0LDB4OTAsMHg3OSwweDdhLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHgwNCwweGYwLDB4MTIsMHgyZiwweGRmLDB4ZTR9IH0sCit7ICAxNiwweDNhY2QsMCx7MHg5MCwweDc5LDB4MzAsMHhmMCwweDkwLDB4NzksMHg4NSwweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHgxMiwweDJlLDB4OTQsMHg5MH0gfSwKK3sgIDE2LDB4M2FkZCwwLHsweDc5LDB4MmQsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODgsMHgxNCwweGYwLDB4YzIsMHgyZiwweGU0LDB4OTAsMHg3OSwweDY4fSB9LAoreyAgMTYsMHgzYWVkLDAsezB4ZjAsMHg5MCwweDc5LDB4OGEsMHhmMCwweDkwLDB4NzksMHg2YSwweGYwLDB4YTMsMHhmMCwweDc1LDB4MTMsMHgwOCwweDc1LDB4MTR9IH0sCit7ICAxNiwweDNhZmQsMCx7MHgwOCwweGY1LDB4MTYsMHhmNSwweDE1LDB4ZjUsMHgxNywweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4M2IwZCwwLHsweDdiLDB4MDEsMHg3YSwweDc4LDB4NzksMHg1OCwweDkwLDB4NzgsMHgwMywweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5fSB9LAoreyAgMTYsMHgzYjFkLDAsezB4ZjAsMHg3NCwweDQwLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDNiMmQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MGEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4ZjYsMHgwMH0gfSwKK3sgIDE2LDB4M2IzZCwwLHsweDAwLDB4YmIsMHg4MCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MGQsMHhmNiwweDAwLDB4MDAsMHhhYywweDQ0LDB4OTAsMHgwMCwweDBhfSB9LAoreyAgMTYsMHgzYjRkLDAsezB4MTIsMHgwZCwweGY2LDB4MDAsMHgwMSwweDc3LDB4MDAsMHg5MCwweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGN9IH0sCit7ICAxNiwweDNiNWQsMCx7MHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDQwLDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4M2I2ZCwwLHsweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0fSB9LAoreyAgMTYsMHgzYjdkLDAsezB4OGMsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4ZjYsMHgwMCwweDAwLDB4YmIsMHg4MCwweDkwLDB4MDB9IH0sCit7ICAxNiwweDNiOGQsMCx7MHgwNiwweDEyLDB4MGQsMHhmNiwweDAwLDB4MDAsMHhhYywweDQ0LDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwZCwweGY2LDB4MDAsMHgwMX0gfSwKK3sgIDE2LDB4M2I5ZCwwLHsweDc3LDB4MDAsMHg5MCwweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwfSB9LAoreyAgMTYsMHgzYmFkLDAsezB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDQwLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTB9IH0sCit7ICAxNiwweDNiYmQsMCx7MHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4OGYsMHgxMiwweDBjLDB4OWMsMHg5MH0gfSwKK3sgIDE2LDB4M2JjZCwwLHsweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYmRkLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDQxLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDNiZWQsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4ODQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDQsMHhlNH0gfSwKK3sgIDE2LDB4M2JmZCwwLHsweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYzBkLDAsezB4ZjksMHg3NCwweDYxLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDNjMWQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4ODEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZn0gfSwKK3sgIDE2LDB4M2MyZCwwLHsweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDYxfSB9LAoreyAgMTYsMHgzYzNkLDAsezB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDB9IH0sCit7ICAgNiwweDNjNGQsMCx7MHgwMSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAgMSwweDNjNTMsMCx7MHgyMn0gfSwKK3sgIDE2LDB4M2M1NCwwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfSB9LAoreyAgMTYsMHgzYzY0LDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9IH0sCit7ICAgMiwweDNjNzQsMCx7MHhjMCwweGUwfSB9LAoreyAgMTYsMHgzYzc2LDAsezB4OTAsMHg3ZiwweGEyLDB4ZTAsMHhmNSwweDBiLDB4OTAsMHg3ZiwweDc0LDB4ZTAsMHg5MCwweDc5LDB4NzAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDNjODYsMCx7MHg3NSwweGUwLDB4OTAsMHg3OSwweDcxLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHhlMCwweGZmLDB4ZmUsMHg1NCwweDAyLDB4ZmUsMHg3MH0gfSwKK3sgIDE2LDB4M2M5NiwwLHsweDBkLDB4ZWYsMHg0NCwweDAyLDB4ZjAsMHgxMiwweDJmLDB4ZGYsMHg5MCwweDc5LDB4NzQsMHg3NCwweDAxLDB4ZjAsMHhlNSwweDBifSB9LAoreyAgMTYsMHgzY2E2LDAsezB4MjAsMHhlMiwweDI4LDB4OTAsMHg3OSwweDcwLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHg3YywweDAwLDB4MjQsMHgwMCwweGY1LDB4MTF9IH0sCit7ICAxNiwweDNjYjYsMCx7MHhlYywweDNlLDB4ZjUsMHgxMCwweDkwLDB4NzksMHg4MiwweGUwLDB4ZmQsMHhhZSwweDEwLDB4YWYsMHgxMSwweDEyLDB4MGMsMHhiZX0gfSwKK3sgIDE2LDB4M2NjNiwwLHsweDkwLDB4NzksMHg3MCwweGVmLDB4ZjAsMHg5MCwweDc5LDB4ODksMHg3NCwweDAxLDB4ZjAsMHgxMiwweDQ4LDB4NDMsMHgxMiwweDQ4fSB9LAoreyAgMTYsMHgzY2Q2LDAsezB4NzYsMHg5MCwweDc5LDB4ODksMHhlMCwweDY0LDB4MDEsMHg3MCwweDMyLDB4MTIsMHg0MSwweDA4LDB4OTAsMHg3OSwweDg5LDB4ZTR9IH0sCit7ICAxNiwweDNjZTYsMCx7MHhmMCwweDkwLDB4N2YsMHg5OCwweGUwLDB4NDQsMHg0MCwweGYwLDB4OTAsMHg3ZiwweDllLDB4ZTAsMHg0NCwweDQwLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4M2NmNiwwLHsweDdmLDB4OTUsMHg3NCwweDgwLDB4ZjAsMHg3NSwweGU4LDB4MDEsMHgxMiwweDA5LDB4MzIsMHg3NSwweGU4LDB4MGQsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgzZDA2LDAsezB4OTUsMHg3NCwweGMwLDB4ZjAsMHg3NSwweGU4LDB4MGQsMHhkMiwweDIwLDB4ODAsMHgwNSwweDc1LDB4ZTgsMHgwMSwweGMyLDB4MjB9IH0sCit7ICAxNiwweDNkMTYsMCx7MHgyMCwweDIwLDB4MmIsMHg5MCwweDc5LDB4MmQsMHhlMCwweGZmLDB4YjQsMHgwMSwweDA5LDB4NzUsMHgwYywweDY3LDB4NzUsMHgwZH0gfSwKK3sgIDE2LDB4M2QyNiwwLHsweDA2LDB4NzUsMHgwZSwweDBiLDB4ZWYsMHhiNCwweDAyLDB4MDksMHg3NSwweDBjLDB4MDAsMHg3NSwweDBkLDB4MDAsMHg3NSwweDBlfSB9LAoreyAgMTYsMHgzZDM2LDAsezB4MGMsMHhlZiwweGI0LDB4MDMsMHgwOSwweDc1LDB4MGMsMHgwMCwweDc1LDB4MGQsMHgwMCwweDc1LDB4MGUsMHgxOCwweDc1LDB4Y2F9IH0sCit7ICAxNiwweDNkNDYsMCx7MHg2ZiwweDc1LDB4Y2IsMHhmZSwweGQyLDB4Y2EsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhmMH0gfSwKK3sgIDE2LDB4M2Q1NiwwLHsweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwfSB9LAoreyAgMTYsMHgzZDY2LDAsezB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjB9IH0sCit7ICAgMywweDNkNzYsMCx7MHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDNkNzksMCx7MHg3NSwweDMzLDB4MjUsMHg3NSwweDM0LDB4MjQsMHg5MCwweDc5LDB4NWMsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMH0gfSwKK3sgIDE2LDB4M2Q4OSwwLHsweGEzLDB4NzQsMHhiMiwweGYwLDB4MjAsMHgyZiwweDAyLDB4YzEsMHgxNywweGU0LDB4ZjUsMHgzNSwweDc1LDB4MjIsMHgwMSwweDkwfSB9LAoreyAgMTYsMHgzZDk5LDAsezB4NzksMHg1YywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDQsMHgxMiwweDBjLDB4NWR9IH0sCit7ICAxNiwweDNkYTksMCx7MHhmNSwweDM2LDB4NzUsMHgzNSwweDA2LDB4NzQsMHg0MiwweDI1LDB4MzUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4M30gfSwKK3sgIDE2LDB4M2RiOSwwLHsweGU1LDB4MzYsMHhmMCwweDA1LDB4MzUsMHhlNSwweDM1LDB4YjQsMHgwYywweGViLDB4ZTUsMHgzNSwweGMzLDB4OTQsMHgwZCwweDQwfSB9LAoreyAgMTYsMHgzZGM5LDAsezB4MDIsMHhjMSwweDk4LDB4ZTUsMHgyMiwweDY0LDB4MDEsMHg2MCwweDAyLDB4YzEsMHg5OCwweDkwLDB4N2YsMHhhNSwweGUwLDB4NDR9IH0sCit7ICAxNiwweDNkZDksMCx7MHg4MCwweGYwLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHgzMywweGYwLDB4MTIsMHg0NiwweGMwLDB4NzQsMHg0ZiwweDI1LDB4MzUsMHhmNX0gfSwKK3sgIDE2LDB4M2RlOSwwLHsweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NCwweDQyfSB9LAoreyAgMTYsMHgzZGY5LDAsezB4MjUsMHgzNSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyLDB4NDZ9IH0sCit7ICAxNiwweDNlMDksMCx7MHhjMCwweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMCwweDEyLDB4MGEsMHhjZCwweDA1LDB4MzUsMHg4MCwweGFjLDB4ZTQsMHhmNX0gfSwKK3sgIDE2LDB4M2UxOSwwLHsweDM1LDB4NzUsMHgyMiwweDAxLDB4OTAsMHg3OSwweDVjLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgzZTI5LDAsezB4MDAsMHgwNCwweDEyLDB4MGMsMHg1ZCwweGY1LDB4MzYsMHg3NSwweDM1LDB4MDYsMHg3NCwweDM1LDB4MjUsMHgzNSwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDNlMzksMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTUsMHgzNiwweGYwLDB4MDUsMHgzNSwweGU1LDB4MzUsMHhiNCwweDBjLDB4ZWIsMHhlNX0gfSwKK3sgIDE2LDB4M2U0OSwwLHsweDM1LDB4YzMsMHg5NCwweDBkLDB4NTAsMHg0OSwweGU1LDB4MjIsMHg2NCwweDAxLDB4NzAsMHg0MywweDkwLDB4N2YsMHhhNSwweGUwfSB9LAoreyAgMTYsMHgzZTU5LDAsezB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHgzMywweGYwLDB4MTIsMHg0NiwweGMwLDB4NzQsMHg0ZiwweDI1LDB4MzV9IH0sCit7ICAxNiwweDNlNjksMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NH0gfSwKK3sgIDE2LDB4M2U3OSwwLHsweDM1LDB4MjUsMHgzNSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyfSB9LAoreyAgMTUsMHgzZTg5LDAsezB4NDYsMHhjMCwweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMCwweDEyLDB4MGEsMHhjZCwweDA1LDB4MzUsMHg4MCwweGIwfSB9LAoreyAgIDEsMHgzZTk4LDAsezB4MjJ9IH0sCit7ICAxNiwweDNlOTksMCx7MHg5MCwweDc4LDB4MDksMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4ZTQsMHhmZn0gfSwKK3sgIDE2LDB4M2VhOSwwLHsweGZlLDB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweGVmLDB4MTIsMHgwYywweDhhfSB9LAoreyAgMTYsMHgzZWI5LDAsezB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweGU0LDB4MTJ9IH0sCit7ICAxNiwweDNlYzksMCx7MHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgxNSwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMywweGU0LDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4M2VkOSwwLHsweDljLDB4OTAsMHgwMCwweDA0LDB4NzQsMHhmZiwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNSwweGU0LDB4MTIsMHgwYywweDljfSB9LAoreyAgMTYsMHgzZWU5LDAsezB4OTAsMHgwMCwweDA2LDB4NzQsMHhjMywweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNywweGU0LDB4MTIsMHgwYywweDljLDB4OTB9IH0sCit7ICAxNiwweDNlZjksMCx7MHgwMCwweDA4LDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDksMHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwYX0gfSwKK3sgIDE2LDB4M2YwOSwwLHsweDc0LDB4MDEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MGEsMHhlNCwweDc1LDB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmfSB9LAoreyAgMTYsMHgzZjE5LDAsezB4MGUsMHhiZSwweDA3LDB4OGQsMHg5MCwweDc4LDB4MDksMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzR9IH0sCit7ICAxNiwweDNmMjksMCx7MHhmZiwweGYwLDB4ZTQsMHhmZiwweGZlLDB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDE2LDB4M2YzOSwwLHsweGVmLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgzZjQ5LDAsezB4MDAsMHgwMSwweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgxNSwweDEyLDB4MGMsMHg5YywweDkwLDB4MDB9IH0sCit7ICAxNiwweDNmNTksMCx7MHgwMywweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA0LDB4NzQsMHg4MCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNX0gfSwKK3sgIDE2LDB4M2Y2OSwwLHsweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA2LDB4NzQsMHhjMywweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNywweGU0fSB9LAoreyAgMTYsMHgzZjc5LDAsezB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA4LDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDksMHhlNCwweDEyLDB4MGN9IH0sCit7ICAxNiwweDNmODksMCx7MHg5YywweDkwLDB4MDAsMHgwYSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MGEsMHhlNCwweDc1LDB4ZjAsMHgwYn0gfSwKK3sgICA4LDB4M2Y5OSwwLHsweDEyLDB4MGMsMHhmNCwweDBmLDB4MGUsMHhiZSwweDAzLDB4OGR9IH0sCit7ICAgMSwweDNmYTEsMCx7MHgyMn0gfSwKK3sgIDE2LDB4M2ZhMiwwLHsweGU0LDB4ZmUsMHg3NSwweDNkLDB4ZmYsMHg3NSwweDNlLDB4MDUsMHg3NSwweDNmLDB4MTIsMHhhYiwweDNkLDB4YWEsMHgzZSwweGE5fSB9LAoreyAgMTYsMHgzZmIyLDAsezB4M2YsMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHg2NCwweDAyLDB4NzAsMHgyZiwweGNkLDB4ZWUsMHhjZCwweDBlLDB4ZWR9IH0sCit7ICAxNiwweDNmYzIsMCx7MHg2ZiwweDcwLDB4MDEsMHgyMiwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHgwYSwweDg1LDB4ZjAsMHgzYiwweGY1LDB4M2MsMHg2Mn0gfSwKK3sgIDE2LDB4M2ZkMiwwLHsweDNiLDB4ZTUsMHgzYiwweDYyLDB4M2MsMHhlNSwweDNjLDB4NjIsMHgzYiwweDI5LDB4ZmQsMHhlNSwweDNiLDB4M2EsMHhjOSwweGVkfSB9LAoreyAgMTYsMHgzZmUyLDAsezB4YzksMHg3NSwweDNkLDB4ZmYsMHhmNSwweDNlLDB4ODksMHgzZiwweDgwLDB4YzEsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9IH0sCit7ICAgMSwweDNmZjIsMCx7MHgyMn0gfSwKK3sgICA5LDB4M2ZmMywwLHsweDUzLDB4ZDgsMHhlZiwweDQzLDB4ZDgsMHgyMCwweGMyLDB4MmQsMHgzMn0gfSwKK3sgICA0LDB4M2ZmYywwLHsweDUzLDB4OTEsMHhkZiwweDMyfSB9LAoreyAgMTYsMHg0MDAwLDAsezB4OTAsMHg3OSwweDg3LDB4ZTAsMHhiNCwweDAxLDB4MWQsMHg5MCwweDc5LDB4ODUsMHhlMCwweGI0LDB4MDEsMHgwMywweDEyLDB4NDJ9IH0sCit7ICAxNiwweDQwMTAsMCx7MHhhYSwweDkwLDB4NzksMHg4NiwweGUwLDB4YjQsMHgwMSwweDAzLDB4MTIsMHgxOCwweDAwLDB4ZTQsMHg5MCwweDc5LDB4ODUsMHhmMH0gfSwKK3sgIDE2LDB4NDAyMCwwLHsweGEzLDB4ZjAsMHhhMywweGYwLDB4MTIsMHgyZSwweDk0LDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmNSwweDBhLDB4NTQsMHgwMiwweGY1fSB9LAoreyAgMTYsMHg0MDMwLDAsezB4MGEsMHg3MCwweDA0LDB4OTAsMHg3OSwweDdmLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweGY1LDB4MGEsMHg1NCwweDAyLDB4ZmZ9IH0sCit7ICAxNiwweDQwNDAsMCx7MHhmNSwweDBhLDB4YmYsMHgwMiwweDA2LDB4OTAsMHg3OSwweDdmLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmNX0gfSwKK3sgIDE2LDB4NDA1MCwwLHsweDBhLDB4NTQsMHgyMCwweGY1LDB4MGEsMHg3MCwweDA0LDB4OTAsMHg3OSwweDdlLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweGY1fSB9LAoreyAgMTYsMHg0MDYwLDAsezB4MGEsMHg1NCwweDIwLDB4ZmYsMHhmNSwweDBhLDB4YmYsMHgyMCwweDA2LDB4OTAsMHg3OSwweDdlLDB4NzQsMHgwMSwweGYwLDB4OTB9IH0sCit7ICAxNiwweDQwNzAsMCx7MHg3OSwweDdmLDB4ZTAsMHhmZiwweDkwLDB4NzksMHg4MSwweGUwLDB4NmYsMHg2MCwweDM4LDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMn0gfSwKK3sgIDE2LDB4NDA4MCwwLHsweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweGVmLDB4YjQsMHgwMSwweDA2LDB4ZTAsMHg1NCwweGZlfSB9LAoreyAgMTYsMHg0MDkwLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDQwYTAsMCx7MHg4NCwweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweGU1LDB4MTIsMHg2MH0gfSwKK3sgIDE2LDB4NDBiMCwwLHsweDAyLDB4ZDIsMHhhZiwweDkwLDB4NzksMHg3ZSwweGUwLDB4ZmYsMHg5MCwweDc5LDB4ODAsMHhlMCwweDZmLDB4NjAsMHgzOCwweDkwfSB9LAoreyAgMTYsMHg0MGMwLDAsezB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhlZiwweGI0LDB4MDF9IH0sCit7ICAxNiwweDQwZDAsMCx7MHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4NDBlMCwwLHsweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBifSB9LAoreyAgMTYsMHg0MGYwLDAsezB4YTIsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHg5MCwweDc5LDB4N2YsMHhlMCwweDkwLDB4NzksMHg4MSwweGYwLDB4OTB9IH0sCit7ICAgOCwweDQxMDAsMCx7MHg3OSwweDdlLDB4ZTAsMHg5MCwweDc5LDB4ODAsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0MTA4LDAsezB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgzNSwweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhkMywweDk0LDB4MmR9IH0sCit7ICAxNiwweDQxMTgsMCx7MHg0MCwweDJiLDB4OTAsMHg3OSwweDY5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY4LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkM30gfSwKK3sgIDE2LDB4NDEyOCwwLHsweDk0LDB4MGYsMHg0MCwweDE5LDB4ZTQsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgwOCwweDkwLDB4NzksMHgyZCwweDc0fSB9LAoreyAgMTYsMHg0MTM4LDAsezB4MDMsMHhmMCwweDgwLDB4MDYsMHg5MCwweDc5LDB4MmQsMHg3NCwweDAyLDB4ZjAsMHgxMiwweDEwLDB4MDAsMHg5MCwweDc5LDB4MmR9IH0sCit7ICAxNiwweDQxNDgsMCx7MHhlMCwweGI0LDB4MDIsMHgyYywweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhjMywweDk0LDB4MmYsMHg1MCwweDIyLDB4ZWYsMHhkM30gfSwKK3sgIDE2LDB4NDE1OCwwLHsweDk0LDB4MmEsMHg0MCwweDFjLDB4OTAsMHg3OSwweDY5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY4LDB4ZTAsMHgwNCwweGYwfSB9LAoreyAgMTYsMHg0MTY4LDAsezB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MCwweDBhLDB4ZTQsMHhmMCwweDkwLDB4NzksMHgyZCwweDA0LDB4ZjAsMHgxMiwweDEwLDB4MDB9IH0sCit7ICAxNiwweDQxNzgsMCx7MHg5MCwweDc5LDB4MmQsMHhlMCwweGI0LDB4MDIsMHgyNiwweDkwLDB4NzksMHg3MCwweGUwLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgxZH0gfSwKK3sgIDE2LDB4NDE4OCwwLHsweDkwLDB4NzksMHg2OSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2OCwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDMsMHg5NCwweDBmfSB9LAoreyAgMTYsMHg0MTk4LDAsezB4NDAsMHgwYiwweGU0LDB4ZjAsMHg5MCwweDc5LDB4MmQsMHg3NCwweDAzLDB4ZjAsMHgxMiwweDEwLDB4MDAsMHg5MCwweDc5LDB4MmR9IH0sCit7ICAxNiwweDQxYTgsMCx7MHhlMCwweDY0LDB4MDMsMHg3MCwweDNmLDB4OTAsMHg3OSwweDcwLDB4ZTAsMHhmZiwweGMzLDB4OTQsMHg1ZiwweDUwLDB4MzUsMHg5MH0gfSwKK3sgIDE2LDB4NDFiOCwwLHsweDc5LDB4NjksMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjgsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZiwweDQwfSB9LAoreyAgMTYsMHg0MWM4LDAsezB4MjMsMHhlNCwweGYwLDB4ZWYsMHhjMywweDk0LDB4MmYsMHg1MCwweDBjLDB4ZWYsMHhkMywweDk0LDB4MmEsMHg0MCwweDA2LDB4OTB9IH0sCit7ICAxNiwweDQxZDgsMCx7MHg3OSwweDJkLDB4NzQsMHgwMSwweGYwLDB4ZWYsMHhkMywweDk0LDB4MmYsMHg0MCwweDA2LDB4OTAsMHg3OSwweDJkLDB4NzQsMHgwMn0gfSwKK3sgIDE2LDB4NDFlOCwwLHsweGYwLDB4MTIsMHgxMCwweDAwLDB4OTAsMHg3OSwweDY5LDB4ZTAsMHg3MCwweDA1LDB4OTAsMHg3OSwweDY4LDB4ZjAsMHgyMiwweGU0fSB9LAoreyAgIDUsMHg0MWY4LDAsezB4OTAsMHg3OSwweDY5LDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDFmZCwwLHsweDdiLDB4MDEsMHg3YSwweDc4LDB4NzksMHg0YywweDkwLDB4NzgsMHgwNiwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5fSB9LAoreyAgMTYsMHg0MjBkLDAsezB4ZjAsMHhlNCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDQyMWQsMCx7MHg5MCwweDAwLDB4MDEsMHg3NCwweDAxLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDA3LDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMn0gfSwKK3sgIDE2LDB4NDIyZCwwLHsweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4ZTQsMHgxMiwweDBjfSB9LAoreyAgMTYsMHg0MjNkLDAsezB4OGEsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzR9IH0sCit7ICAxNiwweDQyNGQsMCx7MHgwMiwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwNywweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4NDI1ZCwwLHsweDA2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweGU0LDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDA2fSB9LAoreyAgMTYsMHg0MjZkLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDMsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAxNiwweDQyN2QsMCx7MHg5MCwweDc4LDB4MDcsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwNiwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4NDI4ZCwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHhlNCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwNiwweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTIsMHg0MjlkLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDA0LDB4MTIsMHgwYywweDljfSB9LAoreyAgIDEsMHg0MmE5LDAsezB4MjJ9IH0sCit7ICAxNiwweDQyYWEsMCx7MHhlNCwweGZmLDB4ZmUsMHg3YiwweDAxLDB4OTAsMHg3OCwweDBjLDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NH0gfSwKK3sgIDE2LDB4NDJiYSwwLHsweDJiLDB4ZjAsMHg5MCwweDc4LDB4MGMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHg0MmNhLDAsezB4MTIsMHgwYywweDVkLDB4ZmQsMHg5MCwweDc5LDB4OWEsMHhlMCwweDZkLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA1LDB4NTB9IH0sCit7ICAxNiwweDQyZGEsMCx7MHgwZCwweDBmLDB4OTAsMHg3OCwweDBkLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4OGQsMHgzM30gfSwKK3sgIDE2LDB4NDJlYSwwLHsweDkwLDB4NzgsMHgwYywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjfSB9LAoreyAgMTYsMHg0MmZhLDAsezB4NWQsMHhmZCwweDkwLDB4NzksMHg5YiwweGUwLDB4ZmMsMHg2ZCwweDYwLDB4MTMsMHhlZSwweGMzLDB4OTQsMHgwYiwweDUwLDB4MGR9IH0sCit7ICAxNiwweDQzMGEsMCx7MHgwZSwweDkwLDB4NzgsMHgwZCwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4ODAsMHhkMywweDhjLDB4MzQsMHhlZn0gfSwKK3sgIDE2LDB4NDMxYSwwLHsweDY0LDB4MDUsMHg2MCwweDAzLDB4YmUsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwfSB9LAoreyAgMTYsMHg0MzJhLDAsezB4NzgsMHgwYywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZiwweDI0LDB4ZjB9IH0sCit7ICAxNiwweDQzM2EsMCx7MHg2MCwweDA4LDB4MjQsMHgwZSwweDcwLDB4MGUsMHgxMiwweDQ5LDB4NGQsMHgyMiwweDkwLDB4NzksMHgyMCwweGU1LDB4MzQsMHhmMH0gfSwKK3sgIDExLDB4NDM0YSwwLHsweDEyLDB4MWIsMHgyYSwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDQzNTUsMCx7MHgyMn0gfSwKK3sgIDEyLDB4NDM1NiwwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgzZiwweDAyLDB4NDMsMHg5ZH0gfSwKK3sgIDE2LDB4NDM2MiwwLHsweDAyLDB4NDgsMHhhOSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfSB9LAoreyAgMTYsMHg0MzcyLDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9IH0sCit7ICAxNiwweDQzODIsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn0gfSwKK3sgIDE2LDB4NDM5MiwwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDQ2LDB4NjEsMHhlNCwweDdlfSB9LAoreyAgMTYsMHg0M2EyLDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9IH0sCit7ICAxNiwweDQzYjIsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM30gfSwKK3sgIDE2LDB4NDNjMiwwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfSB9LAoreyAgMTYsMHg0M2QyLDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9IH0sCit7ICAxNiwweDQzZTIsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH0gfSwKK3sgIDE2LDB4NDNmMiwwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfSB9LAoreyAgMTYsMHg0NDAyLDAsezB4YzAsMHhlMCwweGMyLDB4Y2EsMHhjMiwweGNmLDB4OTAsMHg3OSwweDdhLDB4ZTAsMHhiNCwweDAxLDB4MWYsMHgxMiwweDRiLDB4YWV9IH0sCit7ICAxNiwweDQ0MTIsMCx7MHgxMiwweDQ3LDB4NTgsMHg1MywweGE4LDB4YTAsMHg5MCwweDdmLDB4YWUsMHhlNCwweGYwLDB4MTIsMHgwNywweGFhLDB4MTIsMHg0Yn0gfSwKK3sgIDE2LDB4NDQyMiwwLHsweGI3LDB4OTAsMHg3ZiwweGFlLDB4NzQsMHgxZiwweGYwLDB4NDMsMHhhOCwweDA1LDB4ODAsMHgwMywweDUzLDB4YTgsMHhhMCwweDUzfSB9LAoreyAgMTYsMHg0NDMyLDAsezB4YTgsMHhmYSwweDc1LDB4ZTgsMHgwMSwweDEyLDB4MDksMHgxNSwweDc1LDB4ZTgsMHgwZCwweDQzLDB4YTgsMHgwNSwweGQwLDB4ZTB9IH0sCit7ICAxNiwweDQ0NDIsMCx7MHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4NDQ1MiwwLHsweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjAsMHhkMCwweGUwfSB9LAoreyAgIDEsMHg0NDYyLDAsezB4MzJ9IH0sCit7ICAxNiwweDQ0NjMsMCx7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGY1LDB4MDksMHgxNCwweDYwLDB4MWQsMHgxNCwweDYwLDB4MmEsMHgxNCwweDYwLDB4MzcsMHgxNH0gfSwKK3sgIDE2LDB4NDQ3MywwLHsweDYwLDB4NDQsMHgyNCwweDA0LDB4NzAsMHg1MCwweDkwLDB4NzksMHg2MiwweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHg0NDgzLDAsezB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDQ3LDB4OTAsMHg3OSwweDYzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDQ0OTMsMCx7MHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MzcsMHg5MCwweDc5LDB4NjQsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4NDRhMywwLHsweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgyNywweDkwLDB4NzksMHg2NiwweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHg0NGIzLDAsezB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDE3LDB4OTAsMHg3OSwweDY3LDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNSwweDQ0YzMsMCx7MHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGQzLDB4MjJ9IH0sCit7ICAgNCwweDQ0ZDIsMCx7MHg4ZCwweDM2LDB4OGIsMHgzN30gfSwKK3sgIDE2LDB4NDRkNiwwLHsweDEyLDB4M2YsMHhhMiwweGVhLDB4NDksMHg2MCwweDU3LDB4MTIsMHgwYywweDQ0LDB4N2UsMHgwMCwweDI5LDB4ZmYsMHhlZSwweDNhfSB9LAoreyAgMTYsMHg0NGU2LDAsezB4YzksMHhlZiwweGM5LDB4NzUsMHgzOCwweGZmLDB4ZjUsMHgzOSwweDg5LDB4M2EsMHhhYiwweDM4LDB4YWEsMHgzOSwweGE5LDB4M2F9IH0sCit7ICAxNiwweDQ0ZjYsMCx7MHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHhmZiwweDY0LDB4MDQsMHg2MCwweDA1LDB4ZWYsMHg2NCwweDA1LDB4NzAsMHgyZX0gfSwKK3sgIDE2LDB4NDUwNiwwLHsweGVmLDB4YjQsMHgwNCwweDE1LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwYywweDVkLDB4NjUsMHgzNiwweDcwLDB4MGIsMHg5MCwweDAwfSB9LAoreyAgMTYsMHg0NTE2LDAsezB4MDMsMHgxMiwweDBjLDB4NWQsMHg2NSwweDM3LDB4NzAsMHgwMSwweDIyLDB4MTIsMHgwYywweDQ0LDB4N2UsMHgwMCwweDI5LDB4ZmZ9IH0sCit7ICAxNiwweDQ1MjYsMCx7MHhlZSwweDNhLDB4YzksMHhlZiwweGM5LDB4NzUsMHgzOCwweGZmLDB4ZjUsMHgzOSwweDg5LDB4M2EsMHg4MCwweGJjLDB4N2IsMHgwMH0gfSwKK3sgICA0LDB4NDUzNiwwLHsweDdhLDB4MDAsMHg3OSwweDAwfSB9LAoreyAgIDEsMHg0NTNhLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ1M2IsMCx7MHhlNCwweGZmLDB4N2IsMHgwMSwweDkwLDB4NzgsMHgxYywweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHg0Y30gfSwKK3sgIDE2LDB4NDU0YiwwLHsweGYwLDB4OTAsMHg3OCwweDFjLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMiwweDEyfSB9LAoreyAgMTYsMHg0NTViLDAsezB4MGMsMHg1ZCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg2ZSwweDYwLDB4MTMsMHhlZiwweGMzLDB4OTQsMHgwNCwweDUwLDB4MGR9IH0sCit7ICAxNiwweDQ1NmIsMCx7MHg5MCwweDc4LDB4MWQsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhkNCwweGJmLDB4MDQsMHgwOX0gfSwKK3sgIDE2LDB4NDU3YiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxNCwweDkwLDB4NzksMHgyMSwweGUwLDB4ZmYsMHg5MCwweDc4fSB9LAoreyAgMTYsMHg0NThiLDAsezB4MWMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4ZWYsMHgxMiwweDBjLDB4OGEsMHg5MCwweDdmLDB4YzV9IH0sCit7ICAgMywweDQ1OWIsMCx7MHg3NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDQ1OWUsMCx7MHgyMn0gfSwKK3sgIDE0LDB4NDU5ZiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlZSwweGMwLDB4ZTAsMHhlZiwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDQ1YWQsMCx7MHg5MCwweDc5LDB4ODUsMHhlMCwweDY0LDB4MDEsMHg2MCwweDA1LDB4YTMsMHhlMCwweGI0LDB4MDEsMHgyZCwweDkwLDB4NzksMHg4N30gfSwKK3sgIDE2LDB4NDViZCwwLHsweDc0LDB4MDEsMHhmMCwweGU0LDB4ZmYsMHg5MCwweDdmLDB4YzUsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgxYiwweDc0fSB9LAoreyAgMTYsMHg0NWNkLDAsezB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MjEsMHgyZiwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDQ1ZGQsMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZWUsMHhmMCwweDBmLDB4ODAsMHhkYiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYX0gfSwKK3sgICA0LDB4NDVlZCwwLHsweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTUsMHg0NWYxLDAsezB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhkMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0NjAwLDAsezB4ZTQsMHhmZiwweDdiLDB4MDEsMHg5MCwweDc4LDB4MTksMHgwNCwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4NGN9IH0sCit7ICAxNiwweDQ2MTAsMCx7MHhmMCwweDkwLDB4NzgsMHgxOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDIsMHgxMn0gfSwKK3sgIDE2LDB4NDYyMCwwLHsweDBjLDB4NWQsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4NmUsMHg2MCwweDEzLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDBkfSB9LAoreyAgMTYsMHg0NjMwLDAsezB4OTAsMHg3OCwweDFhLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4ZDQsMHhiZiwweDA0LDB4MDh9IH0sCit7ICAxNiwweDQ2NDAsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OCwweDE5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4NDY1MCwwLHsweGEzLDB4ZTAsMHhmOSwweDEyLDB4MGMsMHg0NCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHg0NjYwLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ2NjEsMCx7MHgwMSwweDE4LDB4MDIsMHgwMSwweDE5LDB4MGEsMHgwMSwweDFjLDB4MDAsMHhjMSwweDI4LDB4YzEsMHgyOSwweDAxLDB4MWYsMHgwMX0gfSwKK3sgIDE1LDB4NDY3MSwwLHsweDQ0LDB4NzksMHg5ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHg3OSwweGEzLDB4MDAsMHg0MSwweDc5LDB4YTQsMHgwMH0gfSwKK3sgICA0LDB4NDY4MCwwLHsweDQxLDB4NzksMHg4OSwweDAwfSB9LAoreyAgMTYsMHg0Njg0LDAsezB4MDEsMHgyMiwweDAxLDB4NDEsMHg3OSwweDMxLDB4ZmYsMHg0MSwweDc5LDB4MzQsMHgwMCwweDRkLDB4NzksMHgzNSwweDNmLDB4M2Z9IH0sCit7ICAxNiwweDQ2OTQsMCx7MHgwMCwweDA4LDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4NGQsMHg3OSwweDQyLDB4M2YsMHgzZn0gfSwKK3sgIDE2LDB4NDZhNCwwLHsweDA2LDB4MDgsMHgwNCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHg0ZCwweDc5LDB4NGYsMHgwYSwweDBhfSB9LAoreyAgMTEsMHg0NmI0LDAsezB4MDksMHgwMCwweDAxLDB4MDksMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOH0gfSwKK3sgICAxLDB4NDZiZiwwLHsweDAwfSB9LAoreyAgMTYsMHg0NmMwLDAsezB4MTIsMHgwYSwweGNkLDB4OTAsMHg3ZiwweGE1LDB4ZTAsMHhmNSwweDIxLDB4ZTUsMHgyMSwweDU0LDB4MDEsMHhmNSwweDIxLDB4NjR9IH0sCit7ICAxNiwweDQ2ZDAsMCx7MHgwMSwweDYwLDB4MjgsMHhlNSwweDIyLDB4NjQsMHgwMSwweDcwLDB4MjIsMHg5MCwweDdmLDB4YTUsMHhlMCwweGY1LDB4MjEsMHg1NH0gfSwKK3sgIDE2LDB4NDZlMCwwLHsweDAyLDB4ZjUsMHgyMSwweDcwLDB4MDMsMHg3NSwweDIyLDB4MDEsMHg5MCwweDdmLDB4YTUsMHhlMCwweGY1LDB4MjEsMHg1NCwweDA0fSB9LAoreyAgMTIsMHg0NmYwLDAsezB4ZmYsMHhmNSwweDIxLDB4YmYsMHgwNCwweGQzLDB4NzUsMHgyMiwweDAxLDB4ODAsMHhjZSwweDIyfSB9LAoreyAgIDQsMHg0NmZjLDAsezB4NTMsMHhkOCwweGY3LDB4MzJ9IH0sCit7ICAxNiwweDQ3MDAsMCx7MHgwMiwweDQ5LDB4ZmEsMHgwMCwweDAyLDB4M2MsMHg1NCwweDAwLDB4MDIsMHgxNywweGU0LDB4MDAsMHgwMiwweDRhLDB4MTIsMHgwMH0gfSwKK3sgIDE2LDB4NDcxMCwwLHsweDAyLDB4MzcsMHhhMiwweDAwLDB4MDIsMHg0NywweGZmLDB4MDAsMHgwMiwweDRhLDB4NDEsMHgwMCwweDAyLDB4NDUsMHg5ZiwweDAwfSB9LAoreyAgMTYsMHg0NzIwLDAsezB4MDIsMHg0OSwweDhlLDB4MDAsMHgwMiwweDQ5LDB4YWIsMHgwMCwweDAyLDB4NGEsMHg1OCwweDAwLDB4MDIsMHg0YSwweDZmLDB4MDB9IH0sCit7ICAxNiwweDQ3MzAsMCx7MHgwMiwweDRhLDB4ODYsMHgwMCwweDAyLDB4NGEsMHg5ZCwweDAwLDB4MDIsMHg0YSwweGI0LDB4MDAsMHgwMiwweDRhLDB4Y2IsMHgwMH0gfSwKK3sgIDE2LDB4NDc0MCwwLHsweDAyLDB4NGEsMHhlMiwweDAwLDB4MDIsMHg0YSwweGY5LDB4MDAsMHgwMiwweDRiLDB4MTAsMHgwMCwweDAyLDB4NGIsMHgyNywweDAwfSB9LAoreyAgIDgsMHg0NzUwLDAsezB4MDIsMHg0YiwweDNlLDB4MDAsMHgwMiwweDRiLDB4NTUsMHgwMH0gfSwKK3sgIDE2LDB4NDc1OCwwLHsweGU1LDB4MTgsMHg3MCwweDE0LDB4OTAsMHg3OSwweDhjLDB4ZTAsMHgwNCwweGYwLDB4OTAsMHg3OSwweDhiLDB4ZTAsMHhjMywweDk0fSB9LAoreyAgMTYsMHg0NzY4LDAsezB4MDAsMHg0MCwweDE1LDB4ZTAsMHgxNCwweGYwLDB4ODAsMHgxMCwweDkwLDB4NzksMHg4YiwweGUwLDB4MDQsMHhmMCwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDQ3NzgsMCx7MHhjMywweDk0LDB4MDAsMHg0MCwweDAzLDB4ZTAsMHgxNCwweGYwLDB4OTAsMHg3OSwweDhiLDB4ZTAsMHhkMywweDk0LDB4MTQsMHg0MH0gfSwKK3sgIDE2LDB4NDc4OCwwLHsweDA0LDB4ZTQsMHhmNSwweDE4LDB4ZjAsMHg5MCwweDc5LDB4OGMsMHhlMCwweGQzLDB4OTQsMHgxNCwweDQwLDB4MDUsMHg3NSwweDE4fSB9LAoreyAgIDQsMHg0Nzk4LDAsezB4MDEsMHhlNCwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ3OWMsMCx7MHg5MCwweDdmLDB4ZDcsMHhlMCwweGY1LDB4MzMsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY1LDB4MDksMHgxNCwweDYwLDB4MTEsMHgxNH0gfSwKK3sgIDE2LDB4NDdhYywwLHsweDYwLDB4MWIsMHgyNCwweDAyLDB4NzAsMHgyNCwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3OSwweDYyLDB4ZjAsMHg4MCwweDIxfSB9LAoreyAgMTYsMHg0N2JjLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc5LDB4NjMsMHhmMCwweDEyLDB4MTAsMHgwMCwweDgwLDB4MTQsMHg5MCwweDdmLDB4ZWF9IH0sCit7ICAxNiwweDQ3Y2MsMCx7MHhlMCwweDkwLDB4NzksMHg2NCwweGYwLDB4MTIsMHgyOCwweDAxLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0gfSwKK3sgICAyLDB4NDdkYywwLHsweGYwLDB4ZDN9IH0sCit7ICAgMSwweDQ3ZGUsMCx7MHgyMn0gfSwKK3sgIDE2LDB4NDdkZiwwLHsweDkwLDB4NzksMHg3OCwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzksMHgzMywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHg0N2VmLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAgMSwweDQ3ZmYsMCx7MHgzMn0gfSwKK3sgICAyLDB4NDgwMCwwLHsweDhmLDB4MzZ9IH0sCit7ICAxNiwweDQ4MDIsMCx7MHhlNCwweGY1LDB4MzcsMHg3NSwweDM4LDB4ZmYsMHg3NSwweDM5LDB4MDcsMHg3NSwweDNhLDB4MDEsMHhhYiwweDM4LDB4YWEsMHgzOX0gfSwKK3sgIDE2LDB4NDgxMiwwLHsweGE5LDB4M2EsMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHhiNCwweDAzLDB4MWYsMHhhZiwweDM3LDB4MDUsMHgzNywweGVmfSB9LAoreyAgMTYsMHg0ODIyLDAsezB4NjUsMHgzNiwweDcwLDB4MDEsMHgyMiwweDEyLDB4MGMsMHg0NCwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYSwweGM5LDB4ZWZ9IH0sCit7ICAxNiwweDQ4MzIsMCx7MHhjOSwweDc1LDB4MzgsMHhmZiwweGY1LDB4MzksMHg4OSwweDNhLDB4ODAsMHhkMiwweDdiLDB4MDAsMHg3YSwweDAwLDB4NzksMHgwMH0gfSwKK3sgICAxLDB4NDg0MiwwLHsweDIyfSB9LAoreyAgMTYsMHg0ODQzLDAsezB4MzAsMHgyNiwweDJmLDB4YzIsMHgyNiwweDkwLDB4NzksMHgyZCwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MDksMHhlNCwweGY1LDB4MGN9IH0sCit7ICAxNiwweDQ4NTMsMCx7MHg3NSwweDBkLDB4ZjgsMHg3NSwweDBlLDB4MGEsMHhlZiwweGI0LDB4MDIsMHgwOSwweGU0LDB4ZjUsMHgwYywweDc1LDB4MGQsMHhmMH0gfSwKK3sgIDE2LDB4NDg2MywwLHsweDc1LDB4MGUsMHgwYiwweGVmLDB4YjQsMHgwMywweDA5LDB4ZTQsMHhmNSwweDBjLDB4NzUsMHgwZCwweGY4LDB4NzUsMHgwZSwweDE3fSB9LAoreyAgIDMsMHg0ODczLDAsezB4ZDIsMHgyMiwweDIyfSB9LAoreyAgMTYsMHg0ODc2LDAsezB4MzAsMHgyNSwweDJmLDB4YzIsMHgyNSwweDkwLDB4NzksMHgyZCwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MDksMHg3NSwweDBjLDB4YzB9IH0sCit7ICAxNiwweDQ4ODYsMCx7MHg3NSwweDBkLDB4MTQsMHg3NSwweDBlLDB4MGIsMHhlZiwweGI0LDB4MDIsMHgwOSwweGU0LDB4ZjUsMHgwYywweDc1LDB4MGQsMHgxMH0gfSwKK3sgIDE2LDB4NDg5NiwwLHsweDc1LDB4MGUsMHgwYywweGVmLDB4YjQsMHgwMywweDA5LDB4ZTQsMHhmNSwweDBjLDB4NzUsMHgwZCwweDE4LDB4NzUsMHgwZSwweDE4fSB9LAoreyAgIDMsMHg0OGE2LDAsezB4ZDIsMHgyMiwweDIyfSB9LAoreyAgMTYsMHg0OGE5LDAsezB4ZTQsMHhmNSwweDMyLDB4MTIsMHgwZiwweDUwLDB4MjAsMHgyZSwweDEwLDB4ZTUsMHgzMiwweGMzLDB4OTQsMHgwMiwweDUwLDB4MDl9IH0sCit7ICAxNiwweDQ4YjksMCx7MHgwNSwweDMyLDB4ZDIsMHgzMCwweDEyLDB4NDksMHgwNSwweDgwLDB4ZWQsMHgzMCwweDJlLDB4MDUsMHgxMiwweDE0LDB4NTcsMHhjMn0gfSwKK3sgIDE1LDB4NDhjOSwwLHsweDJlLDB4MzAsMHgyZCwweDA2LDB4MTIsMHgwNywweDlhLDB4MTIsMHg0OCwweGQ5LDB4MTIsMHg0MCwweDAwLDB4ODAsMHhlYX0gfSwKK3sgICAxLDB4NDhkOCwwLHsweDIyfSB9LAoreyAgMTYsMHg0OGQ5LDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHhmNSwweDFkLDB4NTQsMHg4MCwweGY1LDB4MWQsMHg2NCwweDgwLDB4NzAsMHgxZCwweGMyLDB4YWZ9IH0sCit7ICAxNiwweDQ4ZTksMCx7MHhlMCwweDQ0LDB4ODAsMHhmMCwweGUwLDB4NDQsMHgwMSwweGYwLDB4N2YsMHgwYywweDdlLDB4MDAsMHgxMiwweDRiLDB4NmMsMHg5MH0gfSwKK3sgIDEyLDB4NDhmOSwwLHsweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDUzLDB4ODcsMHhmZSwweGQyLDB4YWYsMHgyMn0gfSwKK3sgIDE2LDB4NDkwNSwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmYiwweGYwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgzMCwweDMwLDB4MDQsMHhlMCwweDQ0fSB9LAoreyAgMTYsMHg0OTE1LDAsezB4MDIsMHhmMCwweDdmLDB4ZGMsMHg3ZSwweDA1LDB4MTIsMHg0YiwweDZjLDB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGY3LDB4ZjB9IH0sCit7ICAgNSwweDQ5MjUsMCx7MHhlMCwweDQ0LDB4MDQsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0OTJhLDAsezB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDcwLDB4MTQsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDA0LDB4MTJ9IH0sCit7ICAxNiwweDQ5M2EsMCx7MHg0NiwweDAwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0gfSwKK3sgICAzLDB4NDk0YSwwLHsweDAxLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDk0ZCwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDEzLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgxNCwweDcwLDB4MDQsMHgxMiwweDQ1fSB9LAoreyAgMTYsMHg0OTVkLDAsezB4M2IsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9IH0sCit7ICAgMiwweDQ5NmQsMCx7MHhmMCwweDIyfSB9LAoreyAgMTYsMHg0OTZmLDAsezB4ZTQsMHhmZiwweDc0LDB4ZTgsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4OTZ9IH0sCit7ICAxNCwweDQ5N2YsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZWUsMHhmMCwweDBmLDB4YmYsMHgwOCwweGU0fSB9LAoreyAgIDEsMHg0OThkLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ5OGUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDIsMHhmMH0gfSwKK3sgIDEzLDB4NDk5ZSwwLHsweDkwLDB4N2YsMHhiNywweDc0LDB4MDMsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0OWFiLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDAyLDB4ZjB9IH0sCit7ICAxMywweDQ5YmIsMCx7MHg5MCwweDdmLDB4YzcsMHg3NCwweDAzLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NDljOCwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4MzAsMHhlNywweDEyLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3ZiwweDE0LDB4N2UsMHgwMCwweDEyfSB9LAoreyAgMTAsMHg0OWQ4LDAsezB4NGIsMHg2YywweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmZSwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ5ZTIsMCx7MHhlNCwweGY1LDB4MWEsMHg3NSwweDFiLDB4MDEsMHg5MCwweDc5LDB4OTEsMHgwNCwweGYwLDB4YTMsMHhmMCwweGU0LDB4YTMsMHhmMH0gfSwKK3sgICA4LDB4NDlmMiwwLHsweGEzLDB4NzQsMHgwYSwweGYwLDB4ZTQsMHhhMywweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ5ZmEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDJlLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX0gfSwKK3sgICA4LDB4NGEwYSwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhMTIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDJkLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOH0gfSwKK3sgICA4LDB4NGEyMiwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhMmEsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY1LDB4MDgsMHhlNCwweDkwLDB4NzksMHg2MiwweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHg5MH0gfSwKK3sgICA3LDB4NGEzYSwwLHsweDc5LDB4NjYsMHhmMCwweGEzLDB4ZjAsMHhkMywweDIyfSB9LAoreyAgMTYsMHg0YTQxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgNywweDRhNTEsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGE1OCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwNCwweGYwfSB9LAoreyAgIDcsMHg0YTY4LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhNmYsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDQsMHhmMH0gfSwKK3sgICA3LDB4NGE3ZiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YTg2LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDA4LDB4ZjB9IH0sCit7ICAgNywweDRhOTYsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGE5ZCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwOCwweGYwfSB9LAoreyAgIDcsMHg0YWFkLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhYjQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MTAsMHhmMH0gfSwKK3sgICA3LDB4NGFjNCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YWNiLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDEwLDB4ZjB9IH0sCit7ICAgNywweDRhZGIsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGFlMiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgyMCwweGYwfSB9LAoreyAgIDcsMHg0YWYyLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhZjksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MjAsMHhmMH0gfSwKK3sgICA3LDB4NGIwOSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YjEwLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDQwLDB4ZjB9IH0sCit7ICAgNywweDRiMjAsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGIyNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg0MCwweGYwfSB9LAoreyAgIDcsMHg0YjM3LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRiM2UsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4ODAsMHhmMH0gfSwKK3sgICA3LDB4NGI0ZSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YjU1LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDgwLDB4ZjB9IH0sCit7ICAgNywweDRiNjUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGI2YywwLHsweDhlLDB4MzMsMHg4ZiwweDM0LDB4ZTUsMHgzNCwweDE1LDB4MzQsMHhhZSwweDMzLDB4NzAsMHgwMiwweDE1LDB4MzMsMHg0ZSwweDYwfSB9LAoreyAgIDcsMHg0YjdjLDAsezB4MDUsMHgxMiwweDA3LDB4ODksMHg4MCwweGVlLDB4MjJ9IH0sCit7ICAxNSwweDRiODMsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4ZmYsMHgwNCwweDEyLDB4MzAsMHgwMCwweDIyLDB4MTIsMHgzNiwweDBlLDB4MjJ9IH0sCit7ICAxNCwweDRiOTIsMCx7MHhjMCwweGUwLDB4YzIsMHg4YiwweGQyLDB4MjQsMHgzMCwweDIzLDB4MDIsMHhjMiwweDIzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTQsMHg0YmEwLDAsezB4OTAsMHg3ZiwweDAwLDB4ZTUsMHgwOCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ZDMsMHgyMn0gfSwKK3sgICA5LDB4NGJhZSwwLHsweDMwLDB4MjQsMHgwNSwweGMyLDB4MjQsMHg3NSwweDE4LDB4MDEsMHgyMn0gfSwKK3sgICA5LDB4NGJiNywwLHsweDMwLDB4MjMsMHgwNSwweGMyLDB4MjMsMHhlNCwweGY1LDB4MTgsMHgyMn0gfSwKK3sgICA3LDB4NGJjMCwwLHsweDUzLDB4YzAsMHhmZSwweDUzLDB4YzAsMHhmZCwweDMyfSB9LAoreyAgIDYsMHg0YmM3LDAsezB4NTMsMHg5MSwweDdmLDB4ZDIsMHgyNSwweDMyfSB9LAoreyAgIDUsMHg0YmNkLDAsezB4YzIsMHg4OSwweGQyLDB4MjMsMHgzMn0gfSwKK3sgICAzLDB4NGJkMiwwLHsweGMyLDB4OGQsMHgzMn0gfSwKK3sgICAzLDB4NGJkNSwwLHsweGMyLDB4OGYsMHgzMn0gfSwKK3sgICAyLDB4NGJkOCwwLHsweGQzLDB4MjJ9IH0sCit7ICAgMiwweDRiZGEsMCx7MHhkMywweDIyfSB9LAoreyAgIDIsMHg0YmRjLDAsezB4ZDMsMHgyMn0gfSwKK3sgICAyLDB4NGJkZSwwLHsweGQzLDB4MjJ9IH0sCit7ICAgMiwweDRiZTAsMCx7MHhkMywweDIyfSB9LAoreyAgIDIsMHg0YmUyLDAsezB4ZDMsMHgyMn0gfSwKK3sgICAyLDB4NGJlNCwwLHsweGMzLDB4MjJ9IH0sCit7ICAgMSwweDRiZTYsMCx7MHgyMn0gfSwKK3sgICAwLDB4MDAwMCwxLHswIH19Cit9OworLyoKK1ZFUlNJT049MS4wLjIuOTE2CitEQVRFPTEyLjAyLjIwMDIKKyovCisvKgorICogVGhpcyBmaXJtd2FyZSBpcyBmb3IgdGhlIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZQorICoKKyAqIFRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGlzIENvcHlyaWdodCAoYykgMTk5OS0yMDAyIEVtYWdpYworICogYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkCisgKiBvciBwdWJsaWMgYWNjZXNzIHRvIHRoaXMgZmlybXdhcmUgd2hpY2ggaXMgYSB0cmFkZSBzZWNyZXQgb2YgRW1hZ2ljLAorICogYW5kIHdoaWNoIG1heSBub3QgYmUgcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0bworICogYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgRW1hZ2ljJ3Mgd3JpdHRlbiBjb25zZW50LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZQorICogRW1hZ2ljIEVNSSAyfDYgQXVkaW8gSW50ZXJmYWNlLiBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZgorICogYW55IGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LAorICogcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4KKyAqLworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19Mb2FkZXJbXSA9IHsKK3sgICAzLDB4MDAwMCwwLHsweDAyLDB4MDMsMHgxY30gfSwKK3sgICAzLDB4MDA0MywwLHsweDAyLDB4MDQsMHgwMH0gfSwKK3sgIDE2LDB4MDEwMCwwLHsweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg1YiwweDYwLDB4NjAsMHgyNCwweDAyLDB4NjAsMHgwMywweDAyLDB4MDEsMHhiZSwweDkwfSB9LAoreyAgMTYsMHgwMTEwLDAsezB4N2YsMHhlYSwweGUwLDB4NzUsMHgwYSwweDAwLDB4ZjUsMHgwYiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDBhLDB4OTB9IH0sCit7ICAxNiwweDAxMjAsMCx7MHg3ZiwweGVlLDB4ZTAsMHg3NSwweDE1LDB4MDAsMHhmNSwweDE2LDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MTUsMHhlNX0gfSwKK3sgIDE2LDB4MDEzMCwwLHsweDE2LDB4NDUsMHgxNSwweDcwLDB4MDMsMHgwMiwweDAxLDB4YmUsMHhlNCwweDkwLDB4N2YsMHhjNSwweGYwLDB4OTAsMHg3ZiwweGI0fSB9LAoreyAgMTYsMHgwMTQwLDAsezB4ZTAsMHgyMCwweGUzLDB4ZjksMHg5MCwweDdmLDB4YzUsMHhlMCwweGY1LDB4MGMsMHgxMiwweDAyLDB4NzcsMHhhZiwweDBjLDB4N2V9IH0sCit7ICAxNiwweDAxNTAsMCx7MHgwMCwweGVmLDB4MjUsMHgwYiwweGY1LDB4MGIsMHhlZSwweDM1LDB4MGEsMHhmNSwweDBhLDB4YzMsMHhlNSwweDE2LDB4OWYsMHhmNX0gfSwKK3sgIDE2LDB4MDE2MCwwLHsweDE2LDB4ZTUsMHgxNSwweDllLDB4ZjUsMHgxNSwweDgwLDB4YzcsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1fSB9LAoreyAgMTYsMHgwMTcwLDAsezB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwLDB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjV9IH0sCit7ICAxNiwweDAxODAsMCx7MHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTUsMHgxNiwweDQ1LDB4MTUsMHg2MCwweDMwLDB4ZTQsMHg5MH0gfSwKK3sgIDE2LDB4MDE5MCwwLHsweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjfSB9LAoreyAgMTYsMHgwMWEwLDAsezB4MTIsMHgwMiwweDhmLDB4YWYsMHgwYywweDdlLDB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjV9IH0sCit7ICAxNSwweDAxYjAsMCx7MHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjUsMHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGNhLDB4YzN9IH0sCit7ICAgMSwweDAxYmYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MDFjMCwwLHsweGMyLDB4MjAsMHhkMiwweGU4LDB4NDMsMHhkOCwweDIwLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweGE5fSB9LAoreyAgMTYsMHgwMWQwLDAsezB4ZjAsMHg5MCwweDdmLDB4YWEsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHg5NSwweGUwLDB4NDQsMHhjMCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDAxZTAsMCx7MHg3ZiwweDk4LDB4ZTAsMHg0NCwweGMwLDB4ZjAsMHg5MCwweDdmLDB4OWUsMHhlMCwweDQ0LDB4YzAsMHhmMCwweGU0LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDFmMCwwLHsweDk0LDB4ZjAsMHg5MCwweDdmLDB4OWQsMHhlMCwweDQ0LDB4MGYsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NTQsMHhmMCwweGYwfSB9LAoreyAgMTYsMHgwMjAwLDAsezB4OTAsMHg3ZiwweGFmLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMCwweDQ0LDB4MGQsMHhmMCwweGQyLDB4YWZ9IH0sCit7ICAxNiwweDAyMTAsMCx7MHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4ZjAsMHhmMCwweDIwLDB4MjAsMHg0MiwweDc1LDB4MTQsMHgwMCwweDc1LDB4MTMsMHgwMH0gfSwKK3sgIDE2LDB4MDIyMCwwLHsweDc1LDB4MTIsMHgwMCwweDc1LDB4MTEsMHgwMCwweDdmLDB4NDgsMHg3ZSwweDkyLDB4N2QsMHgwMCwweDdjLDB4MDAsMHhhYiwweDE0fSB9LAoreyAgMTYsMHgwMjMwLDAsezB4YWEsMHgxMywweGE5LDB4MTIsMHhhOCwweDExLDB4YzMsMHgxMiwweDA0LDB4OWEsMHg1MCwweGRiLDB4MjAsMHgyMCwweGQ4LDB4N2F9IH0sCit7ICAxNiwweDAyNDAsMCx7MHgwMCwweDc5LDB4MDAsMHg3OCwweDAwLDB4ZTUsMHgxNCwweDI0LDB4MDEsMHhmNSwweDE0LDB4ZWEsMHgzNSwweDEzLDB4ZjUsMHgxM30gfSwKK3sgIDE2LDB4MDI1MCwwLHsweGU5LDB4MzUsMHgxMiwweGY1LDB4MTIsMHhlOCwweDM1LDB4MTEsMHhmNSwweDExLDB4ODAsMHhjYSwweDMwLDB4MjAsMHhmZCwweDEyfSB9LAoreyAgMTYsMHgwMjYwLDAsezB4MDEsMHgwMCwweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9IH0sCit7ICAgNiwweDAyNzAsMCx7MHgwMiwweGYwLDB4YzIsMHgyMCwweDgwLDB4ZTZ9IH0sCit7ICAgMSwweDAyNzYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MDI3NywwLHsweGU1LDB4MGMsMHhmZiwweGU1LDB4MGIsMHhmNSwweDgyLDB4ZTUsMHgwYSwweGY1LDB4ODMsMHg3NSwweDkyLDB4N2UsMHg3NCwweGMwfSB9LAoreyAgIDgsMHgwMjg3LDAsezB4ZjgsMHhlMiwweDA4LDB4ZjAsMHhhMywweGRmLDB4ZmEsMHgyMn0gfSwKK3sgIDE2LDB4MDI4ZiwwLHsweDkwLDB4N2YsMHg5NiwweDg1LDB4ODMsMHg5MiwweGE4LDB4ODIsMHg3OSwweDAyLDB4OTAsMHgwMCwweDAwLDB4ZTAsMHhiNCwweDAwfSB9LAoreyAgMTYsMHgwMjlmLDAsezB4MzcsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OTMsMHhlMCwweDU0LDB4ZmMsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTR9IH0sCit7ICAxNiwweDAyYWYsMCx7MHhmYywweGYwLDB4OTAsMHg3ZiwweDljLDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4OTQsMHhlMCwweDU0LDB4N2YsMHhmMH0gfSwKK3sgIDE2LDB4MDJiZiwwLHsweDkwLDB4N2YsMHg5NywweGUwLDB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDlkLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwMmNmLDAsezB4OTcsMHhlMCwweDU0LDB4N2YsMHhmMCwweDQ0LDB4ODAsMHhmMCwweGU1LDB4MGMsMHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZjV9IH0sCit7ICAxNiwweDAyZGYsMCx7MHgyOCwweGU0LDB4YTIsMHg0NywweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQ2LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNH0gfSwKK3sgIDE2LDB4MDJlZiwwLHsweGEyLDB4NDUsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NCwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQzfSB9LAoreyAgMTYsMHgwMmZmLDAsezB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDIsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MSwweDMzLDB4ZjJ9IH0sCit7ICAxMywweDAzMGYsMCx7MHg2OSwweGYyLDB4ZTQsMHhhMiwweDQwLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhhMywweGRmLDB4YzIsMHgyMn0gfSwKK3sgIDEyLDB4MDMxYywwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgyOSwweDAyLDB4MDMsMHg2M30gfSwKK3sgIDE2LDB4MDMyOCwwLHsweDAyLDB4MDEsMHhjMCwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfSB9LAoreyAgMTYsMHgwMzM4LDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9IH0sCit7ICAxNiwweDAzNDgsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn0gfSwKK3sgIDE2LDB4MDM1OCwwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDA0LDB4ODQsMHhlNCwweDdlfSB9LAoreyAgMTYsMHgwMzY4LDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9IH0sCit7ICAxNiwweDAzNzgsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM30gfSwKK3sgIDE2LDB4MDM4OCwwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfSB9LAoreyAgMTYsMHgwMzk4LDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9IH0sCit7ICAxNiwweDAzYTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg5MCwweDdmLDB4YzQsMHhlNCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3Zn0gfSwKK3sgIDExLDB4MDNiOCwwLHsweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDAzYzMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDIwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX0gfSwKK3sgICA4LDB4MDNkMywwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDAzZGIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhkMH0gfSwKK3sgICA2LDB4MDNlYiwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgICAxLDB4MDNmMSwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2YyLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjMsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmNCwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2Y1LDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjYsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmNywwLHsweDMyfSB9LAoreyAgIDEsMHgwM2Y4LDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjksMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmYSwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2ZiLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZmMsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmZCwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2ZlLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZmYsMCx7MHgzMn0gfSwKK3sgIDE2LDB4MDQwMCwwLHsweDAyLDB4MDMsMHhjMywweDAwLDB4MDIsMHgwMywweGRiLDB4MDAsMHgwMiwweDAzLDB4YTgsMHgwMCwweDAyLDB4MDQsMHg2ZSwweDAwfSB9LAoreyAgMTYsMHgwNDEwLDAsezB4MDIsMHgwNCwweDU4LDB4MDAsMHgwMiwweDAzLDB4ZjEsMHgwMCwweDAyLDB4MDMsMHhmMiwweDAwLDB4MDIsMHgwMywweGYzLDB4MDB9IH0sCit7ICAxNiwweDA0MjAsMCx7MHgwMiwweDAzLDB4ZjQsMHgwMCwweDAyLDB4MDMsMHhmNSwweDAwLDB4MDIsMHgwMywweGY2LDB4MDAsMHgwMiwweDAzLDB4ZjcsMHgwMH0gfSwKK3sgIDE2LDB4MDQzMCwwLHsweDAyLDB4MDMsMHhmOCwweDAwLDB4MDIsMHgwMywweGY5LDB4MDAsMHgwMiwweDAzLDB4ZmEsMHgwMCwweDAyLDB4MDMsMHhmYiwweDAwfSB9LAoreyAgMTYsMHgwNDQwLDAsezB4MDIsMHgwMywweGZjLDB4MDAsMHgwMiwweDAzLDB4ZmQsMHgwMCwweDAyLDB4MDMsMHhmZSwweDAwLDB4MDIsMHgwMywweGZmLDB4MDB9IH0sCit7ICAgOCwweDA0NTAsMCx7MHgwMiwweDA0LDB4YWIsMHgwMCwweDAyLDB4MDQsMHhhYywweDAwfSB9LAoreyAgMTYsMHgwNDU4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4ZDB9IH0sCit7ICAgNiwweDA0NjgsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDA0NmUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA4LDB4ZjAsMHhkMH0gfSwKK3sgICA2LDB4MDQ3ZSwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4MDQ4NCwwLHsweDAyLDB4MGEsMHgwMCwweDBmLDB4MDEsMHgwYywweDExLDB4MDQsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHgwMCwweDAwfSB9LAoreyAgIDEsMHgwNDk0LDAsezB4MDB9IH0sCit7ICAgNCwweDA0OTUsMCx7MHgwMiwweDE3LDB4MDAsMHgwMH0gfSwKK3sgICAxLDB4MDQ5OSwwLHsweDAwfSB9LAoreyAgMTYsMHgwNDlhLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9IH0sCit7ICAgMSwweDA0YWEsMCx7MHgyMn0gfSwKK3sgICAxLDB4MDRhYiwwLHsweDMyfSB9LAoreyAgIDEsMHgwNGFjLDAsezB4MzJ9IH0sCit7ICAxNiwweDExMDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MTExMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4MjAsMHgwMCwweDAxLDB4MDEsMHgwMywweGEwLDB4MDAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgxMTIwLDAsezB4ZmYsMHgwMCwweDAwLDB4MDQsMHgwNywweDA1LDB4ODIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHgwMiwweDAyLDB4NDB9IH0sCit7ICAxNiwweDExMzAsMCx7MHgwMCwweDAwLDB4MDQsMHgwMywweDA5LDB4MDQsMHgyNiwweDAzLDB4NDEsMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4NjgsMHgwMH0gfSwKK3sgIDE2LDB4MTE0MCwwLHsweDZmLDB4MDAsMHg3MiwweDAwLDB4MjAsMHgwMCwweDQzLDB4MDAsMHg2OCwweDAwLDB4NjksMHgwMCwweDcwLDB4MDAsMHg3MywweDAwfSB9LAoreyAgMTYsMHgxMTUwLDAsezB4MmMsMHgwMCwweDIwLDB4MDAsMHg0OSwweDAwLDB4NmUsMHgwMCwweDYzLDB4MDAsMHgyZSwweDAwLDB4MjgsMHgwMywweDQ2LDB4MDB9IH0sCit7ICAxNiwweDExNjAsMCx7MHg2OSwweDAwLDB4NzIsMHgwMCwweDZkLDB4MDAsMHg3NywweDAwLDB4NjEsMHgwMCwweDcyLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMH0gfSwKK3sgIDE2LDB4MTE3MCwwLHsweDQ2LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDZkLDB4MDAsMHg2NSwweDAwLDB4NTcsMHgwMCwweDZmLDB4MDAsMHg3MiwweDAwfSB9LAoreyAgMTYsMHgxMTgwLDAsezB4NmIsMHgwMCwweDczLDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4NjYsMHgwMCwweDY5LDB4MDB9IH0sCit7ICAxNiwweDExOTAsMCx7MHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NzQsMHgwMCwweDY5LDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMH0gfSwKK3sgIDE2LDB4MTFhMCwwLHsweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgyMiwweDAzfSB9LAoreyAgMTYsMHgxMWIwLDAsezB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMCwweDcyLDB4MDAsMHg2NiwweDAwLDB4NjEsMHgwMCwweDYzLDB4MDB9IH0sCit7ICAxNiwweDExYzAsMCx7MHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMH0gfSwKK3sgICAyLDB4MTFkMCwwLHsweDAwLDB4MDB9IH0sCit7ICAgMCwweDAwMDAsMSx7MCB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODk5ODZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCkBAIC0wLDAgKzEsMjk4IEBACisvKiAKKyAqIEVtYWdpYyBFTUkgMnw2IHVzYiBhdWRpbyBpbnRlcmZhY2UgZmlybXdhcmUgbG9hZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDAyCisgKiAJVGFwaW8gTGF4c3Ry9m0gKHRhcGlvLmxheHN0cm9tQGlwdGltZS5maSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKiAKKyAqICRJZDogZW1pNjIuYyx2IDEuMTUgMjAwMi8wNC8yMyAwNjoxMzo1OSB0YXBpbyBFeHAgJAorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIE1BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSCAxNgordHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKK3sKKwlfX3UzMglsZW5ndGg7CisJX191MzIJYWRkcmVzczsKKwlfX3UzMgl0eXBlOworCV9fdTgJZGF0YVtNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEhdOworfSBJTlRFTF9IRVhfUkVDT1JELCAqUElOVEVMX0hFWF9SRUNPUkQ7CisKKy8qIGluY2x1ZGUgZmlybXdhcmUgKHZhcmlhYmxlcykqLworCisvKiBGSVhNRTogVGhpcyBpcyBxdWljayBhbmQgZGlydHkgc29sdXRpb24hICovCisjZGVmaW5lIFNQRElGCS8qIGlmIHlvdSB3YW50IFNQRElGIGNvbW1lbnQgbmV4dCBsaW5lICovCisvLyN1bmRlZiBTUERJRgkvKiBpZiB5b3Ugd2FudCBNSURJIHVuY29tbWVudCB0aGlzIGxpbmUgKi8gCisKKyNpZmRlZiBTUERJRgorIyAgaW5jbHVkZSAiZW1pNjJfZndfcy5oIiAvKiBzcGRpZiBmdyAqLworI2Vsc2UKKyMgIGluY2x1ZGUgImVtaTYyX2Z3X20uaCIgLyogbWlkaSBmdyAqLworI2VuZGlmCisKKyNkZWZpbmUgRU1JNjJfVkVORE9SX0lEIAkJMHgwODZhICAvKiBFbWFnaWMgU29mdC11bmQgSGFyZHdhcmUgR21CSCAqLworI2RlZmluZSBFTUk2Ml9QUk9EVUNUX0lECQkweDAxMTAJLyogRU1JIDZ8Mm0gd2l0aG91dCBmaXJtd2FyZSAqLworCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0lOVEVSTkFMCTB4QTAJLyogVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZSBmb3IgQW5jaG9yIFVwbG9hZC9Eb3dubG9hZCAoVGhpcyBvbmUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUpICovCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0VYVEVSTkFMCTB4QTMJLyogVGhpcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZS4gUmVxdWlyZXMgZmlybXdhcmUgKi8KKyNkZWZpbmUgQU5DSE9SX0xPQURfRlBHQQkweEE1CS8qIFRoaXMgY29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUuIFJlcXVpcmVzIGZpcm13YXJlLiBFbWFnaWMgZXh0ZW5zaW9uICovCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9BRERSRVNTCTB4MUIzRgkvKiBUaGlzIGlzIHRoZSBoaWdoZXN0IGludGVybmFsIFJBTSBhZGRyZXNzIGZvciB0aGUgQU4yMTMxUSAqLworI2RlZmluZSBDUFVDU19SRUcJCTB4N0Y5MiAgLyogRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQgKi8gCisjZGVmaW5lIElOVEVSTkFMX1JBTShhZGRyZXNzKSAgIChhZGRyZXNzIDw9IE1BWF9JTlRFUk5BTF9BRERSRVNTKQorCitzdGF0aWMgaW50IGVtaTYyX3dyaXRlbWVtb3J5KCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCwgX191OCBiUmVxdWVzdCk7CitzdGF0aWMgaW50IGVtaTYyX3NldF9yZXNldChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCk7CitzdGF0aWMgaW50IGVtaTYyX2xvYWRfZmlybXdhcmUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBlbWk2Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGVtaTYyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBfX2luaXQgZW1pNjJfaW5pdCAodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgZW1pNjJfZXhpdCAodm9pZCk7CisKKworLyogdGhhbmtzIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGNvZGUgKi8KK3N0YXRpYyBpbnQgZW1pNjJfd3JpdGVtZW1vcnkgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IHJlcXVlc3QpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAga21hbGxvYyAobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmZmVyKSB7CisJCWVycigiZW1pNjI6IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW5ndGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5IChidWZmZXIsIGRhdGEsIGxlbmd0aCk7CisJLyogTm90ZTogdXNiX2NvbnRyb2xfbXNnIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3Igb3IgbGVuZ3RoIG9mIHRoZQorCSAqIAkJIGRhdGEgdGhhdCB3YXMgd3JpdHRlbiEgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIHJlcXVlc3QsIDB4NDAsIGFkZHJlc3MsIDAsIGJ1ZmZlciwgbGVuZ3RoLCAzMDApOworCWtmcmVlIChidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHRoYW5rcyB0byBkcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBjb2RlICovCitzdGF0aWMgaW50IGVtaTYyX3NldF9yZXNldCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCit7CisJaW50IHJlc3BvbnNlOworCWluZm8oIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X2JpdCk7CisJCisJcmVzcG9uc2UgPSBlbWk2Ml93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOworCWlmIChyZXNwb25zZSA8IDApIHsKKwkJZXJyKCJlbWk2Mjogc2V0X3Jlc2V0ICglZCkgZmFpbGVkIiwgcmVzZXRfYml0KTsKKwl9CisJcmV0dXJuIHJlc3BvbnNlOworfQorCisjZGVmaW5lIEZXX0xPQURfU0laRQkJMTAyMworCitzdGF0aWMgaW50IGVtaTYyX2xvYWRfZmlybXdhcmUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlpbnQgaTsKKwlpbnQgcG9zID0gMDsJLyogUG9zaXRpb24gaW4gaGV4IHJlY29yZCAqLworCV9fdTMyIGFkZHI7CS8qIEFkZHJlc3MgdG8gd3JpdGUgKi8KKwlfX3U4ICpidWY7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgImxvYWRfZmlybXdhcmVcbiIpOworCWJ1ZiA9IGttYWxsb2MoRldfTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIC1FTk9NRU0pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogMS4gV2UgbmVlZCB0byBwdXQgdGhlIGxvYWRlciBmb3IgdGhlIEZQR0EgaW50byB0aGUgRVotVVNCICovCisJZm9yIChpPTA7IGdfZW1pNjJfbG9hZGVyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWVyciA9IGVtaTYyX3dyaXRlbWVtb3J5KGRldiwgZ19lbWk2Ml9sb2FkZXJbaV0uYWRkcmVzcywgZ19lbWk2Ml9sb2FkZXJbaV0uZGF0YSwgZ19lbWk2Ml9sb2FkZXJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gd3JhcGVycjsKKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMCk7CisKKwkvKiAyLiBXZSB1cGxvYWQgdGhlIEZQR0EgZmlybXdhcmUgaW50byB0aGUgRU1JCisJICogTm90ZTogY29sbGVjdCB1cCB0byAxMDIzICh5ZXMhKSBieXRlcyBhbmQgc2VuZCB0aGVtIHdpdGgKKwkgKiBhIHNpbmdsZSByZXF1ZXN0LiBUaGlzIGlzIF9tdWNoXyBmYXN0ZXIhICovCisJZG8geworCQlpID0gMDsKKwkJYWRkciA9IGdfZW1pNjJic1twb3NdLmFkZHJlc3M7CisKKwkJLyogaW50ZWwgaGV4IHJlY29yZHMgYXJlIHRlcm1pbmF0ZWQgd2l0aCB0eXBlIDAgZWxlbWVudCAqLworCQl3aGlsZSAoKGdfZW1pNjJic1twb3NdLnR5cGUgPT0gMCkgJiYgKGkgKyBnX2VtaTYyYnNbcG9zXS5sZW5ndGggPCBGV19MT0FEX1NJWkUpKSB7CisJCQltZW1jcHkoYnVmICsgaSwgZ19lbWk2MmJzW3Bvc10uZGF0YSwgZ19lbWk2MmJzW3Bvc10ubGVuZ3RoKTsKKwkJCWkgKz0gZ19lbWk2MmJzW3Bvc10ubGVuZ3RoOworCQkJcG9zKys7CisJCX0KKwkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBhZGRyLCBidWYsIGksIEFOQ0hPUl9MT0FEX0ZQR0EpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIHdyYXBlcnI7CisJCX0KKwl9IHdoaWxlIChpID4gMCk7CisKKwkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiAzLiBXZSBuZWVkIHRvIHB1dCB0aGUgbG9hZGVyIGZvciB0aGUgZmlybXdhcmUgaW50byB0aGUgRVotVVNCIChhZ2Fpbi4uLikgKi8KKwlmb3IgKGk9MDsgZ19lbWk2Ml9sb2FkZXJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBnX2VtaTYyX2xvYWRlcltpXS5hZGRyZXNzLCBnX2VtaTYyX2xvYWRlcltpXS5kYXRhLCBnX2VtaTYyX2xvYWRlcltpXS5sZW5ndGgsIEFOQ0hPUl9MT0FEX0lOVEVSTkFMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byB3cmFwZXJyOworCQl9CisJfQorCisJLyogRGUtYXNzZXJ0IHJlc2V0IChsZXQgdGhlIENQVSBydW4pICovCisJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwwKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIDQuIFdlIHB1dCB0aGUgcGFydCBvZiB0aGUgZmlybXdhcmUgdGhhdCBsaWVzIGluIHRoZSBleHRlcm5hbCBSQU0gaW50byB0aGUgRVotVVNCICovCisKKy8qIEZJWE1FOiBxdWljayBhbmQgZGlydHkgaWZkZWZzICovCisjaWZkZWYgU1BESUYKKwlmb3IgKGk9MDsgZ19IZXhTcGRpZkZ3NjJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKCFJTlRFUk5BTF9SQU0oZ19IZXhTcGRpZkZ3NjJbaV0uYWRkcmVzcykpIHsKKwkJCWVyciA9IGVtaTYyX3dyaXRlbWVtb3J5KGRldiwgZ19IZXhTcGRpZkZ3NjJbaV0uYWRkcmVzcywgZ19IZXhTcGRpZkZ3NjJbaV0uZGF0YSwgZ19IZXhTcGRpZkZ3NjJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9FWFRFUk5BTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKyNlbHNlIC8qIE1JREkgKi8KKwlmb3IgKGk9MDsgZ19IZXhNaWRpRnc2MltpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoIUlOVEVSTkFMX1JBTShnX0hleE1pZGlGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4TWlkaUZ3NjJbaV0uYWRkcmVzcywgZ19IZXhNaWRpRnc2MltpXS5kYXRhLCBnX0hleE1pZGlGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfRVhURVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorI2VuZGlmCQorCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCisJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwxKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworLyogRklYTUU6IHF1aWNrIGFuZCBkaXJ0eSBpZmRlZnMgKi8KKyNpZmRlZiBTUERJRgorCWZvciAoaT0wOyBnX0hleFNwZGlmRnc2MltpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoSU5URVJOQUxfUkFNKGdfSGV4U3BkaWZGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4U3BkaWZGdzYyW2ldLmFkZHJlc3MsIGdfSGV4U3BkaWZGdzYyW2ldLmRhdGEsIGdfSGV4U3BkaWZGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQl9CisJCX0KKwl9CisjZWxzZSAvKiBNSURJICovCisJZm9yIChpPTA7IGdfSGV4TWlkaUZ3NjJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKElOVEVSTkFMX1JBTShnX0hleE1pZGlGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4TWlkaUZ3NjJbaV0uYWRkcmVzcywgZ19IZXhNaWRpRnc2MltpXS5kYXRhLCBnX0hleE1pZGlGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCQorCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwlrZnJlZShidWYpOworCisJLyogcmV0dXJuIDEgdG8gZmFpbCB0aGUgZHJpdmVyIGluaWFsaXphdGlvbgorCSAqIGFuZCBnaXZlIHJlYWwgZHJpdmVyIGNoYW5nZSB0byBsb2FkICovCisJcmV0dXJuIDE7CisKK3dyYXBlcnI6CisJa2ZyZWUoYnVmKTsKKwlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRU1JNjJfVkVORE9SX0lELCBFTUk2Ml9QUk9EVUNUX0lEKSB9LAorCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIGludCBlbWk2Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWRldl9kYmcoJmludGYtPmRldiwgImVtaTYyX3Byb2JlXG4iKTsKKworCWluZm8oIiVzIHN0YXJ0IiwgX19GVU5DVElPTl9fKTsgCisKKwllbWk2Ml9sb2FkX2Zpcm13YXJlKGRldik7CisKKwkvKiBkbyBub3QgcmV0dXJuIHRoZSBkcml2ZXIgY29udGV4dCwgbGV0IHJlYWwgYXVkaW8gZHJpdmVyIGRvIHRoYXQgKi8KKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgZW1pNjJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtaTYyX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gImVtaTYyIC0gZmlybXdhcmUgbG9hZGVyIiwKKwkucHJvYmUJCT0gZW1pNjJfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBlbWk2Ml9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZW1pNjJfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlciAoJmVtaTYyX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcHJpbnRrKEtFUk5fRVJSICJhZGktZW1pOiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZW1pNjJfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmVtaTYyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVtaTYyX2luaXQpOworbW9kdWxlX2V4aXQoZW1pNjJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoInRhcGlvIGxheHN0cvZtIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVtYWdpYyBFTUkgNnwybSBmaXJtd2FyZSBsb2FkZXIuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHZpOmFpOnN5bnRheD1jOnN3PTg6dHM9ODp0dz04MAorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X20uaCBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjJfZndfbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjdjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X20uaApAQCAtMCwwICsxLDg4NTMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gdGhyZWUgZGlmZmVyZW50IGZpbGVzLCBwcm92aWRlZCBieSBFbWFnaWMuCisgKi8KKy8qIGdlbmVyYXRlZCBUdWUgSnVuIDMgMjE6MzY6MTEgRUVTVCAyMDAzICovCisKK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfZW1pNjJic1tdPXsKKyAgMTYsIDB4ODAxMCwgMCwgezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhhYSwweDk5LDB4NTUsMHg2NiwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDcgfSwKKyAgMTYsIDB4ODAyMCwgMCwgezB4MzAsMHgwMSwweDYwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwZCwweDMwLDB4MDEsMHgyMCwweDAxLDB4MDAsMHg4MCwweDNmLDB4MmQgfSwKKyAgMTYsIDB4ODAzMCwgMCwgezB4MzAsMHgwMCwweGMwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDkgfSwKKyAgMTYsIDB4ODA0MCwgMCwgezB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEgfSwKKyAgMTYsIDB4ODA1MCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MDAsMHg1MCwweDAwLDB4NTgsMHgxYSwweDgwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0MCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODA5MCwgMCwgezB4MDAsMHgxMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDggfSwKKyAgMTYsIDB4ODBjMCwgMCwgezB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODEwMCwgMCwgezB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODEzMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE3MCwgMCwgezB4ODAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFhMCwgMCwgezB4MDAsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFlMCwgMCwgezB4N2YsMHgxMCwweDAwLDB4MzQsMHgwMCwweDBkLDB4MDAsMHgwMywweDQwLDB4MDAsMHhkMCwweDAwLDB4MzQsMHgwMCwweDA1LDB4MDAgfSwKKyAgMTYsIDB4ODFmMCwgMCwgezB4MDcsMHg0MCwweDAxLDB4ZDAsMHgwMCwweDc0LDB4MDAsMHgxZCwweDAwLDB4MDcsMHg0MCwweDAxLDB4ZDAsMHgwMCwweDc0LDB4MDAgfSwKKyAgMTYsIDB4ODIwMCwgMCwgezB4MWQsMHg4MCwweDA3LDB4ZTAsMHgwMSwweGI4LDB4MDAsMHg2ZSwweDAwLDB4MWIsMHg4MCwweDA2LDB4ZTAsMHgwMSwweDM4LDB4MzcgfSwKKyAgMTYsIDB4ODIxMCwgMCwgezB4YzQsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDgwLDB4ZmIsMHgzMCwweDM2LDB4YzggfSwKKyAgMTYsIDB4ODIyMCwgMCwgezB4NGUsMHgwOSwweDAzLDB4ZmMsMHg4NCwweGZmLDB4MTAsMHgzYiwweGMwLDB4MGUsMHhjOCwweDA3LDB4MjIsMHg4MCwweGZmLDB4MjIgfSwKKyAgMTYsIDB4ODIzMCwgMCwgezB4MzMsMHhjMCwweDBmLDB4YzgsMHgzMywweDZlLDB4MDAsMHhmYiwweDgwLDB4M2YsMHgyMCwweDBkLDB4YzIsMHg1MywweGQ0LDB4ODAgfSwKKyAgMTYsIDB4ODI0MCwgMCwgezB4Y2MsMHgzYSwweDNmLDB4MDAsMHgwYywweGYxLDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODI1MCwgMCwgezB4ODAsMHgwMCwweGVkLDB4NjAsMHhiZiwweDYwLDB4MjMsMHhmMCwweDBkLDB4ODIsMHgxMiwweDNjLDB4NjAsMHg4ZiwweDcwLDB4MjMgfSwKKyAgMTYsIDB4ODI2MCwgMCwgezB4ZjAsMHgwOCwweDg4LDB4MDIsMHhhNSwweDQwLDB4YmYsMHhkMCwweDYzLDB4ZDYsMHgwYiwweDg4LDB4MDIsMHgyZSwweDBjLDB4YmIgfSwKKyAgMTYsIDB4ODI3MCwgMCwgezB4ODAsMHgyZSwweDIwLDB4ODgsMHg4ZCwweDAyLDB4ZTYsMHg0MCwweDgwLDB4NjAsMHgyZSwweDMwLDB4MGEsMHhiMSwweDEyLDB4MjAgfSwKKyAgMTYsIDB4ODI4MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDgwLDB4YTMsMHg0MCwweDJjLDB4YzQgfSwKKyAgMTYsIDB4ODI5MCwgMCwgezB4NGEsMHgwMCwweDEyLDB4OGMsMHg4OCwweGEzLDB4MjIsMHgyMCwweGM0LDB4MGEsMHg5MCwweDQyLDB4MDQsMHhhOSwweGEzLDB4MDAgfSwKKyAgMTYsIDB4ODJhMCwgMCwgezB4MjQsMHhjOCwweDhiLDB4ODAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmUsMHgwMSwweDA5LDB4MDgsMHgwMiwweDg0LDB4MDAgfSwKKyAgMTYsIDB4ODJiMCwgMCwgezB4ODAsMHgyMCwweDJjLDB4MTAsMHgwYSwweDMyLDB4NDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODJjMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDQsMHhiMywweDAwLDB4MmEsMHhjMCwweDA4LDB4MDgsMHhhMiwweDhjLDB4MDAsMHg4YiwweDAwLDB4YTIgfSwKKyAgMTYsIDB4ODJkMCwgMCwgezB4YzEsMHgxMCwweDk4LDB4NDIsMHhhNywweDAwLDB4YmIsMHgwMSwweDY2LDB4YzEsMHgwYiwweDgwLDB4MDIsMHhhYywweDA0LDB4YmIgfSwKKyAgMTYsIDB4ODJlMCwgMCwgezB4MDAsMHgyZSwweDAwLDB4MGIsMHhiOCwweDEyLDB4ZTQsMHgwMiwweDg5LDB4MDgsMHgwZSwweDQwLDB4MGEsMHhiMCwweDAyLDB4MzAgfSwKKyAgMTYsIDB4ODJmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhhYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ODMwMCwgMCwgezB4NGEsMHhiOCwweDIzLDB4ZWMsMHgxOCwweGViLDB4MDAsMHgzMiwweGMwLDB4MGUsMHgyYywweDEyLDB4MjIsMHgxMCwweGViLDB4MDAgfSwKKyAgMTYsIDB4ODMxMCwgMCwgezB4MjYsMHhjMCwweDRmLDB4MDAsMHg0MywweGVkLDB4MDAsMHhmYiwweDAwLDB4MmUsMHgyNCwweDBkLDB4ODAsMHgxMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4ODMyMCwgMCwgezB4YzgsMHhkMCwweDdjLDB4MTIsMHgwZSwweGIwLDB4MDMsMHg0MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODMzMCwgMCwgezB4ZTEsMHgwMCwweGJjLDB4MDAsMHhmZiwweDAwLDB4MzUsMHhjMCwweDRmLDB4ZTAsMHgwMywweDdjLDB4MDgsMHhmZiwweDAxLDB4MTcgfSwKKyAgMTYsIDB4ODM0MCwgMCwgezB4YzIsMHg0ZCwweGMwLDB4MDMsMHhmNCwweDA4LDB4ZjcsMHgwMCwweDNiLDB4YzAsMHgwNywweGMwLDB4MDMsMHg3YywweDgwLDB4ZmYgfSwKKyAgMTYsIDB4ODM1MCwgMCwgezB4MjQsMHgzZiwweDQwLDB4MGMsMHhmMCwweDAxLDB4ZjQsMHgwNCwweGJjLDB4MDgsMHgzZiwweDI4LDB4MGYsMHhmMCwweDAzLDB4NzggfSwKKyAgMTYsIDB4ODM2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDA4LDB4ZmIsMHgwNCwweDNhLDB4YzggfSwKKyAgMTYsIDB4ODM3MCwgMCwgezB4MGYsMHg5NCwweDAzLDB4ZWMsMHgxMCwweGYzLDB4MDAsMHgzNCwweGMwLDB4MGUsMHhiMCwweDAzLDB4NjEsMHgwNCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4ODM4MCwgMCwgezB4MzYsMHhjMCwweDBlLDB4YTMsMHgwMywweDJjLDB4ODAsMHhmYiwweDcyLDB4M2UsMHgwMiwweDBmLDB4OGEsMHgwMywweGU0LDB4MDIgfSwKKyAgMTYsIDB4ODM5MCwgMCwgezB4YzksMHg4MCwweDJhLDB4NTAsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODNhMCwgMCwgezB4Y2EsMHg0NCwweDNjLDB4MDAsMHhiZiwweDAwLDB4MDMsMHhjMCwweDA4LDB4ODAsMHgwMywweDdjLDB4MDAsMHhiZiwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ODNiMCwgMCwgezB4ZTIsMHgwOCwweDkwLDB4NDMsMHg2MCwweDAwLDB4YmYsMHgwMCwweDM3LDB4YzAsMHgwOCwweDkwLDB4MDEsMHg2ZCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4ODNjMCwgMCwgezB4NDAsMHgyYywweDEwLDB4MGIsMHhiMCwweDQyLDB4ZDcsMHhjMCwweDg5LDB4MDAsMHgyYSwweDdjLDB4MGIsMHhmMCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4ODNkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUyLDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4ZDUgfSwKKyAgMTYsIDB4ODNlMCwgMCwgezB4NGEsMHgwMCwweDAwLDB4MGMsMHgwNCwweDkzLDB4MDAsMHgwYywweGYwLDB4MGIsMHgwOSwweDAyLDB4MDgsMHgwMSwweGIzLDB4MjAgfSwKKyAgMTYsIDB4ODNmMCwgMCwgezB4MjgsMHhjMCwweDBhLDB4MGMsMHgwYSwweDBlLDB4MDAsMHhiMywweDAwLDB4MjQsMHgzMCwweDA5LDB4MDAsMHgwMiwweGM2LDB4MTAgfSwKKyAgMTYsIDB4ODQwMCwgMCwgezB4ODAsMHg0MiwweDIwLDB4MDAsMHg4YiwweGIwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODQxMCwgMCwgezB4MjIsMHgwMSwweDFlLDB4MDAsMHhiNywweDk0LDB4MjEsMHhlNCwweDQ4LDB4ZDksMHgxMiwweDVlLDB4NDAsMHhiNywweDkwLDB4MjkgfSwKKyAgMTYsIDB4ODQyMCwgMCwgezB4ZTAsMHg4YiwweDY5LDB4MTIsMHhkNiwweDgwLDB4MzcsMHg4MiwweDJjLDB4ZTgsMHgwOCwweDRhLDB4MDIsMHg1ZSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4ODQzMCwgMCwgezB4YTQsMHgyZCwweDIwLDB4MGIsMHg3OSwweDAyLDB4ZDYsMHgwOCwweDg2LDB4OTAsMHgyOSwweGEwLDB4MGIsMHg3OSwweDAyLDB4ZDggfSwKKyAgMTYsIDB4ODQ0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwYywweDAwLDB4ZmIsMHhhMCwweDI4LDB4ZTggfSwKKyAgMTYsIDB4ODQ1MCwgMCwgezB4MGUsMHgyYSwweDAyLDB4OGMsMHgwMCwweGQzLDB4MDAsMHg2NCwweGMwLDB4MGYsMHgwMCwweDQzLDB4MGUsMHhjNCwweGYzLDB4MDAgfSwKKyAgMTYsIDB4ODQ2MCwgMCwgezB4NzgsMHhlYywweDBlLDB4MGEsMHg0MywweDBlLDB4MjAsMHg3MywweGUwLDB4M2MsMHgwMiwweDRmLDB4MDAsMHgwMywweGM0LDB4NDAgfSwKKyAgMTYsIDB4ODQ3MCwgMCwgezB4YzMsMHgwMCwweDM4LDB4YzAsMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODQ4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDAwLDB4YmMsMHhjYywweDBlLDB4YjAsMHgwMywweGVjLDB4MjAsMHhmYiwweDAwLDB4M2MgfSwKKyAgMTYsIDB4ODQ5MCwgMCwgezB4YzIsMHgwYywweDIwLDB4MDMsMHg2YywweDUwLDB4ZjMsMHgwMCwweDM2LDB4YzQsMHgwZiwweDQwLDB4MDMsMHhmYywweDA4LDB4ZmYgfSwKKyAgMTYsIDB4ODRhMCwgMCwgezB4MWEsMHgzZiwweDgwLDB4MGYsMHhmMCwweDAxLDB4ZTQsMHgzMCwweGZmLDB4MDIsMHgzZiwweGMwLDB4MGYsMHhmMCwweDYzLDB4ZDAgfSwKKyAgMTYsIDB4ODRiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhlYywweDQwLDB4ZmIsMHgwMCwweGIyLDB4ZDggfSwKKyAgMTYsIDB4ODRjMCwgMCwgezB4MGMsMHhiMCwweDAxLDB4MmQsMHgyMCwweGRiLDB4MDEsMHgzYSwweGM4LDB4OGMsMHgzOCwweDAzLDB4YTgsMHgwMCwweGZiLDB4NDggfSwKKyAgMTYsIDB4ODRkMCwgMCwgezB4M2UsMHhjOSwweDBmLDB4ODAsMHgwMywweGVjLDB4NDAsMHhmYiwweDAxLDB4M2UsMHgwMCwweDBmLDB4MDgsMHgwMywweGE0LDB4MDggfSwKKyAgMTYsIDB4ODRlMCwgMCwgezB4ZmEsMHg4MCwweGIyLDB4ODAsMHgwZiwweGIxLDB4MDIsMHg2YSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODRmMCwgMCwgezB4NDgsMHgxOSwweDFjLDB4ODAsMHhiZiwweDMwLDB4MjEsMHhjYSwweDA4LDB4ZjAsMHgwYSwweDBjLDB4ODAsMHg4ZiwweDUwLDB4MjEgfSwKKyAgMTYsIDB4ODUwMCwgMCwgezB4YzIsMHgwOCwweDcwLDB4NTAsMHg5YywweDAwLDB4YjcsMHgwMCwweDM5LDB4YzQsMHgwYiwweDQwLDB4MDIsMHg5YywweDA0LDB4YjcgfSwKKyAgMTYsIDB4ODUxMCwgMCwgezB4MjAsMHgyNSwweDQwLDB4MGIsMHg3MCwweDAyLDB4MTQsMHg4MCwweGI2LDB4MDAsMHgyMSwweDgwLDB4MGIsMHhmOCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ODUyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHhiMCwweDIxLDB4ZWMgfSwKKyAgMTYsIDB4ODUzMCwgMCwgezB4MGIsMHg3OCwweDEyLDB4ZGUsMHg4NCwweDk3LDB4ODAsMHgwZCwweGUwLDB4MjgsMHhmOCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4OTAgfSwKKyAgMTYsIDB4ODU0MCwgMCwgezB4MmQsMHhlNCwweDBiLDB4NjgsMHg4MiwweDVlLDB4ODAsMHhiNywweGEwLDB4MjksMHgyMCwweDBiLDB4NDgsMHgwMiwweDk2LDB4MDAgfSwKKyAgMTYsIDB4ODU1MCwgMCwgezB4YjcsMHg4MCwweDIxLDB4ZTEsMHgwYiwweDdhLDB4MDIsMHg3MCwweDQwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODU2MCwgMCwgezB4NDgsMHgwNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzgsMHgwMiwweDhjLDB4MDQsMHg4MywweDAwLDB4MjggfSwKKyAgMTYsIDB4ODU3MCwgMCwgezB4YzAsMHg4OCwweDM5LDB4MDIsMHg0YywweDQwLDB4YjMsMHgwNCwweDI4LDB4YzAsMHgxYiwweDEwLDB4MDIsMHg4YywweDAxLDB4YjMgfSwKKyAgMTYsIDB4ODU4MCwgMCwgezB4MDQsMHgyNCwweDg4LDB4NGIsMHgzMSwweDAyLDB4MDQsMHgwMCwweGIzLDB4ODAsMHgyMCwweGYyLDB4MGIsMHgzMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4ODU5MCwgMCwgezB4MjQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4ODVhMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4ZTgsMHgwMCwweGRhLDB4MDEsMHgzYSwweDgwLDB4OGMsMHhlZCwweDAzLDB4ZmIsMHgwNCwweGZhLDB4MDAgfSwKKyAgMTYsIDB4ODViMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4NmMsMHgwMywweGZiLDB4YzgsMHhiZSwweGMyLDB4MWYsMHg4MCwweDBmLDB4ZTUsMHgwMywweGE4LDB4MDAgfSwKKyAgMTYsIDB4ODVjMCwgMCwgezB4ZmUsMHg0OCwweDMzLDB4ODAsMHg0ZiwweGEwLDB4MDMsMHg3YSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODVkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2MsMHgwMCwweDBjLDB4ODEsMHg5MywweDYwLDB4MDAsMHhmOCwweDAxLDB4MzYgfSwKKyAgMTYsIDB4ODVlMCwgMCwgezB4MTAsMHgwZiwweDgwLDB4MDMsMHhhMCwweDIwLDB4ZjgsMHgwMCwweDJhLDB4MDEsMHg4ZiwweDg0LDB4MTMsMHhlMSwweDAwLDB4ZjggfSwKKyAgMTYsIDB4ODVmMCwgMCwgezB4MTgsMHgzNiwweDAwLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MjAsMHgzZSwweDE0LDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ODYwMCwgMCwgezB4ODAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNCwweDAwLDB4ZjEsMHgwMCwweGFhLDB4NDAgfSwKKyAgMTYsIDB4ODYxMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGUxLDB4MDAsMHgzOCwweDQwLDB4MWMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4YTAgfSwKKyAgMTYsIDB4ODYyMCwgMCwgezB4M2EsMHg0MCwweDQ3LDB4OWEsMHg5MywweGEyLDB4ODAsMHhmOCwweDEwLDB4M2UsMHg0MCwweDBiLDB4OTQsMHgwMywweGU2LDB4NDAgfSwKKyAgMTYsIDB4ODYzMCwgMCwgezB4ZjksMHhjMCwweDNlLDB4NjgsMHgwYiwweDEwLDB4MDMsMHgwMiwweDg0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODY0MCwgMCwgezB4ODAsMHgwNCwweGU0LDB4MDQsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDQsMHg4OSwweDAwLDB4MzYgfSwKKyAgMTYsIDB4ODY1MCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDA0LDB4YjksMHg4MCwweDJlLDB4NDAsMHg0ZiwweDk0LDB4MDMsMHg2MSwweDEwLDB4ZTggfSwKKyAgMTYsIDB4ODY2MCwgMCwgezB4NDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQyLDB4ZTYsMHgwNCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ODY3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDQsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAgfSwKKyAgMTYsIDB4ODY4MCwgMCwgezB4MGEsMHgxMCwweDUyLDB4MDQsMHgwNCwweGE5LDB4MDQsMHgyYSwweDQwLDB4MDgsMHhiMCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MDAgfSwKKyAgMTYsIDB4ODY5MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGE4LDB4MGQsMHhiOCwweDQwLDB4MmUsMHg0MCwweDA5LDB4OTQsMHgwMiwweGU1LDB4MDAgfSwKKyAgMTYsIDB4ODZhMCwgMCwgezB4YjksMHgwNCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODZiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhiMSwweDIwLDB4MjAsMHhjOCwweDBhLDB4MTAsMHg0MiwweDA0LDB4OTAsMHg4MSwweDIwLDB4MDQgfSwKKyAgMTYsIDB4ODZjMCwgMCwgezB4YzgsMHgwOCwweDMwLDB4MjYsMHhjNCwweDAwLDB4YjEsMHgyMCwweDJjLDB4NDgsMHgwYiwweDkwLDB4MDIsMHg0NSwweDAxLDB4YjEgfSwKKyAgMTYsIDB4ODZkMCwgMCwgezB4NDAsMHgyYywweDQwLDB4MGIsMHgxMiwweDgyLDB4YzQsMHgwMCwweGIxLDB4MmIsMHgyYywweDRhLDB4MGIsMHgxMiwweDgyLDB4MDIgfSwKKyAgMTYsIDB4ODZlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MDgsMHgyMSwweDQ4LDB4ZjgsMHg1MCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4ODZmMCwgMCwgezB4NGUsMHg4NSwweDBiLDB4MjEsMHg0MCwweGE4LDB4NTIsMHgyYSwweDAwLDB4MDgsMHg4MCwweDIzLDB4ZTEsMHg0MCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4ODcwMCwgMCwgezB4M2EsMHgxNCwweDBmLDB4YTAsMHg0MywweGE4LDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODIsMHgwMywweGUwLDB4MDAgfSwKKyAgMTYsIDB4ODcxMCwgMCwgezB4ZjAsMHgyMCwweDNlLDB4ODgsMHg0ZiwweDgyLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODcyMCwgMCwgezB4OTgsMHgxOSwweGU0LDB4NDAsMHhmOSwweDExLDB4MzQsMHg0NCwweDJkLDB4ZDAsMHgwMywweGU0LDB4NTAsMHg3OSwweDEwLDB4MzggfSwKKyAgMTYsIDB4ODczMCwgMCwgezB4NDQsMHgyZiwweGQwLDB4MDMsMHhmNSwweDEwLDB4ZjksMHgxMCwweDNlLDB4NDUsMHgwNiwweDUwLDB4MDMsMHhlNSwweDAwLDB4ZTkgfSwKKyAgMTYsIDB4ODc0MCwgMCwgezB4NDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDQzLDB4ZjUsMHgwMCwweGZkLDB4MjgsMHgzZiwweDQwLDB4MGYsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4ODc1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDEsMHhlNiwweDAwLDB4ZDksMHg5MCwweDM3LDB4NjkgfSwKKyAgMTYsIDB4ODc2MCwgMCwgezB4NGQsMHg5MCwweDIzLDB4NjcsMHg4MCwweGQ5LDB4ZTAsMHgzNywweDY4LDB4MGUsMHhkMCwweDA3LDB4YTQsMHgwMCwweDA1LDB4ODYgfSwKKyAgMTYsIDB4ODc3MCwgMCwgezB4M2UsMHg2NiwweDBkLDB4NTAsMHgyMywweDI2LDB4MDAsMHhjOSwweDgyLDB4M2QsMHg0MCwweDBkLDB4ZDgsMHgwNywweDM2LDB4MDIgfSwKKyAgMTYsIDB4ODc4MCwgMCwgezB4Y2QsMHhjMCwweDMzLDB4NjAsMHgwYywweDljLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODc5MCwgMCwgezB4MzgsMHgxMCwweGUyLDB4ODAsMHg4OCwweGEyLDB4MjIsMHgxMCwweDI4LDB4OGEsMHg4MiwweDIzLDB4ODQsMHg4OCwweGEwLDB4MjIgfSwKKyAgMTYsIDB4ODdhMCwgMCwgezB4MTQsMHg0OCwweDgwLDB4NDIsMHg4MiwweDAwLDB4ODgsMHg0MCwweDJlLDB4MzAsMHgwOCwweDgwLDB4MDIsMHhhMiwweDAwLDB4ZDggfSwKKyAgMTYsIDB4ODdiMCwgMCwgezB4OTAsMHgyNiwweDAwLDB4MDgsMHg4NCwweDBhLDB4MjEsMHgwMCwweGM4LDB4YTAsMHhhMiwweDE0LDB4MjgsMHg4YywweDAyLDB4MGUgfSwKKyAgMTYsIDB4ODdjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDIwLDB4OTEsMHg0MCwweDJjLDB4NDQgfSwKKyAgMTYsIDB4ODdkMCwgMCwgezB4MTgsMHgxMCwweDAyLDB4ODUsMHgwNCwweGIxLDB4NDAsMHgwYywweDQwLDB4MGEsMHgxMCwweDA2LDB4ODQsMHgzMCwweDgxLDB4NDAgfSwKKyAgMTYsIDB4ODdlMCwgMCwgezB4MmMsMHg0OCwweDU5LDB4MTAsMHgxYSwweDA0LDB4NjAsMHg4MSwweDA5LDB4MmUsMHg0MCwweDFiLDB4MTQsMHgwMiwweDI1LDB4MDAgfSwKKyAgMTYsIDB4ODdmMCwgMCwgezB4OTEsMHhlMCwweDIwLDB4NjAsMHgwOCwweDE2LDB4MDIsMHgwMCwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODgwMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4MSwweDAwLDB4MmEsMHg0MSwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhhMSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ODgxMCwgMCwgezB4NDEsMHgwOCwweGIwLDB4ODIsMHgyNCwweDExLDB4OGIsMHgwMCwweDJlLDB4NDAsMHgxOCwweDkxLDB4MDIsMHhhMCwweDA0LDB4OTggfSwKKyAgMTYsIDB4ODgyMCwgMCwgezB4MjAsMHgyZSwweDU0LDB4MWIsMHg5MCwweDgyLDB4MmMsMHgwMCwweDg5LDB4MTAsMHgyMiwweDQ0LDB4ODgsMHg5MCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4ODgzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ODg0MCwgMCwgezB4NGMsMHg5MCwweDAzLDB4YTQsMHgxMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4OGUsMHgxMCwweDAyLDB4YTQsMHhjMiwweGM5LDB4MDAgfSwKKyAgMTYsIDB4ODg1MCwgMCwgezB4M2UsMHg0MCwweDBkLDB4MTYsMHgxMywweDAxLDB4ODQsMHhjOCwweDIwLDB4M2MsMHg2MCwweDBmLDB4OTAsMHgxMiwweDA0LDB4MDAgfSwKKyAgMTYsIDB4ODg2MCwgMCwgezB4ZDksMHg0MCwweDMyLDB4NTAsMHgwYywweDkwLDB4MDMsMHgyOCwweDg0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODg3MCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDRmLDB4OTksMHg0YSwweDQ0LDB4MDAsMHg5OSwweDAwLDB4YjQgfSwKKyAgMTYsIDB4ODg4MCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MTMsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlMywweDAwLDB4ZjggfSwKKyAgMTYsIDB4ODg5MCwgMCwgezB4MDEsMHgzNiwweDQwLDB4MGMsMHg5OSwweDAzLDB4ZTQsMHgwMiwweGY5LDB4ODAsMHgzZSwweDYwLDB4NGYsMHg5MCwweDBiLDB4Y2EgfSwKKyAgMTYsIDB4ODhhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMCwweDNjLDB4MDAgfSwKKyAgMTYsIDB4ODhiMCwgMCwgezB4MWQsMHg4MCwweDAzLDB4MjAsMHgwMCwweGU4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4NCwweDgzLDB4ZTAsMHgxMCwweGU4LDB4MjAgfSwKKyAgMTYsIDB4ODhjMCwgMCwgezB4MzIsMHgwMCwweDhlLDB4ODQsMHgwMywweDIxLDB4ODAsMHhjOCwweDAwLDB4M2EsMHgxOSwweDBmLDB4MDQsMHgwMywweGUwLDB4MjQgfSwKKyAgMTYsIDB4ODhkMCwgMCwgezB4ZjAsMHgwMiwweDNjLDB4MDAsMHgwZiwweDgwLDB4MTMsMHg4YSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODhlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDIsMHg4YSwweDAxLDB4MGYsMHhhMiwweDY4LDB4YTAsMHgwMCwweDI4LDB4MDAsMHg4YSwweDAwLDB4NzcgfSwKKyAgMTYsIDB4ODhmMCwgMCwgezB4ODAsMHg2OCwweGUwLDB4MTIsMHhlOCwweDAwLDB4ZGUsMHgwMCwweDM2LDB4ODEsMHgwOCwweGUwLDB4MDMsMHg3YSwweDA4LDB4YWUgfSwKKyAgMTYsIDB4ODkwMCwgMCwgezB4YzQsMHgyZiwweDgwLDB4MDgsMHhlZCwweDAyLDB4ZmEsMHgwMCwweGJlLDB4YTAsMHgzYiwweDgwLDB4MGIsMHhhMCwweDQyLDB4MGEgfSwKKyAgMTYsIDB4ODkxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4ODUsMHg0YywweDAwLDB4OTMsMHgwMCwweDJjLDB4YzAgfSwKKyAgMTYsIDB4ODkyMCwgMCwgezB4ODgsMHhiMCwweDAyLDB4MGMsMHgxNCwweGEzLDB4MDQsMHgyMCwweGM0LDB4MTgsMHgzOCwweDAyLDB4ZWMsMHgxMCwweDkzLDB4NTQgfSwKKyAgMTYsIDB4ODkzMCwgMCwgezB4MjgsMHhjMCwweDBhLDB4MDAsMHgwMiwweDRlLDB4MDAsMHg4MywweDQ5LDB4NjgsMHhjMCwweDAyLDB4MzksMHg0MiwweGNlLDB4NDAgfSwKKyAgMTYsIDB4ODk0MCwgMCwgezB4YjMsMHgwMCwweDJjLDB4ZTYsMHgwYiwweGIwLDB4MDIsMHg4YiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODk1MCwgMCwgezB4MjAsMHgwMSwweDFjLDB4MDgsMHg4NywweDIwLDB4MmMsMHg4MCwweDE4LDB4ZjIsMHgyMiwweDFjLDB4MDAsMHg4NywweDEwLDB4MjEgfSwKKyAgMTYsIDB4ODk2MCwgMCwgezB4YzAsMHgwOCwweDcwLDB4ODIsMHhkYywweDgwLDB4OTYsMHg4MCwweDJkLDB4YzAsMHgwYSwweDQwLDB4MDIsMHg3ZCwweDQwLDB4MjcgfSwKKyAgMTYsIDB4ODk3MCwgMCwgezB4NjQsMHg2ZCwweGQwLDB4NDgsMHg2MCwweDQyLDB4ZDgsMHgwNSwweGI2LDB4MDQsMHgyOSwweGMwLDB4NGIsMHg3MiwweDAyLDB4MjggfSwKKyAgMTYsIDB4ODk4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgzZSwweDg4LDB4ZDcsMHhlMCwweDNkLDB4ZTAgfSwKKyAgMTYsIDB4ODk5MCwgMCwgezB4MDgsMHg3YywweDQyLDB4M2UsMHgwMCwweGUzLDB4ODIsMHgyMCwweGUwLDB4MGMsMHg2OCwweDAzLDB4ZGYsMHgwNCwweGQ3LDB4ODAgfSwKKyAgMTYsIDB4ODlhMCwgMCwgezB4M2IsMHhlMCwweDRlLDB4NDgsMHgwYSwweDVlLDB4ODAsMHhjNywweGMyLDB4MTksMHhlMCwweDBlLDB4NzgsMHgwMywweGQ2LDB4MDggfSwKKyAgMTYsIDB4ODliMCwgMCwgezB4ZjcsMHg4MCwweDNkLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhhYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODljMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4NDAsMHhmYiwweDQwLDB4N2UsMHg4MCwweDBlLDB4MzYsMHg4MywweGVkLDB4NDAsMHhkYiwweDYwLDB4M2UgfSwKKyAgMTYsIDB4ODlkMCwgMCwgezB4ODAsMHgwZiwweGEwLDB4MDMsMHhlZCwweDI4LDB4ZGEsMHgwMCwweDMyLDB4YzQsMHgwYywweGIwLDB4MGIsMHhjYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4ODllMCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGUsMHg4MCwweDEzLDB4ZTAsMHgxMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiMSwweDUzLDB4YzIgfSwKKyAgMTYsIDB4ODlmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHhjMCwweDMzLDB4ZTAgfSwKKyAgMTYsIDB4OGEwMCwgMCwgezB4MGMsMHhmOSwweDAzLDB4N2YsMHgwNCwweGNmLDB4ZDAsMHgzZiwweGU0LDB4MGYsMHhiOCwweDAzLDB4ZmUsMHgwMCwweGZmLDB4OTQgfSwKKyAgMTYsIDB4OGExMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4YzgsMHgwMywweDdlLDB4MTAsMHhmMywweDgwLDB4M2IsMHhlMCwweDBmLDB4ZjgsMHgwMywweGZlLDB4NDggfSwKKyAgMTYsIDB4OGEyMCwgMCwgezB4ZWQsMHg4MCwweDMzLDB4MjQsMHgwNCwweGY4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGEzMCwgMCwgezB4YTgsMHgxMSwweDljLDB4ODAsMHhiZiwweDA0LDB4MjEsMHgyOCwweDA4LDB4ZjgsMHgwMiwweDFlLDB4YzAsMHhjZiwweDkwLDB4MjEgfSwKKyAgMTYsIDB4OGE0MCwgMCwgezB4NGMsMHgwYiwweDVhLDB4NDIsMHhkZSwweDAwLDB4YjcsMHg4MCwweDJjLDB4ZTgsMHgwYiwweDA0LDB4MDIsMHgxYywweDAwLDB4YjcgfSwKKyAgMTYsIDB4OGE1MCwgMCwgezB4YTAsMHgzNSwweDEwLDB4OGYsMHg3MSwweDEzLDB4ZGUsMHhjMCwweDg0LDB4MTAsMHgyMSwweDgwLDB4MGQsMHg3MSwweDAyLDB4MmEgfSwKKyAgMTYsIDB4OGE2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4NDAsMHg5YywweDA4LDB4YjcsMHgwMCwweDI1LDB4YzggfSwKKyAgMTYsIDB4OGE3MCwgMCwgezB4MDgsMHg3MSwweDAyLDB4Y2MsMHg4MCwweDk3LDB4MDAsMHgyOSwweGMwLDB4OGIsMHg3MiwweDA2LDB4ZGMsMHgwOCwweGI1LDB4MDAgfSwKKyAgMTYsIDB4OGE4MCwgMCwgezB4MmQsMHhjOCwweDBiLDB4NDAsMHgwMiwweDFjLDB4NDAsMHhiZiwweDEwLDB4MjEsMHhjMCwweDBiLDB4NzQsMHgwMiwweGQ0LDB4ODAgfSwKKyAgMTYsIDB4OGE5MCwgMCwgezB4YTcsMHg0MCwweDIxLDB4NDEsMHgwOCwweDcwLDB4MDIsMHgwNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGFhMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjQsMHgwMCwweDA4LDB4MzQsMHg4MiwweGFjLDB4MTEsMHg4MywweDAwLDB4MjAgfSwKKyAgMTYsIDB4OGFiMCwgMCwgezB4MDAsMHg0YiwweDE4LDB4MjYsMHhjZiwweDIwLDB4YjEsMHgwNiwweDJjLDB4YzEsMHgwYiwweDMyLDB4MDIsMHgwZSwweDA4LDB4YjMgfSwKKyAgMTYsIDB4OGFjMCwgMCwgezB4ODgsMHgyNCwweDMyLDB4MGEsMHgzMCwweDEyLDB4ODQsMHgwOCwweDgwLDB4MDAsMHhhMCwweDM0LDB4MjgsMHgzMCwweDAyLDB4MTggfSwKKyAgMTYsIDB4OGFkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiYywweDAwLDB4ZmYsMHgwMCwweGI2LDB4NDAgfSwKKyAgMTYsIDB4OGFlMCwgMCwgezB4MmMsMHhmNCwweDQzLDB4ZmMsMHgwMSwweGRmLDB4MDAsMHgzYSwweDAwLDB4MDMsMHg5MiwweDAzLDB4ZmYsMHg4OCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4OGFmMCwgMCwgezB4MmYsMHhjMCwweDFiLDB4MGUsMHg0YiwweDJlLDB4OTAsMHhmYiwweGUwLDB4MzAsMHgzMiwweDBiLDB4OTgsMHgwMiwweGVjLDB4MDggfSwKKyAgMTYsIDB4OGIwMCwgMCwgezB4NmIsMHhjMCwweDMyLDB4YzAsMHgwOCwweGYwLDB4MDksMHgzZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGIxMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmMywweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMSwweDZjLDB4MDAsMHhmYiwweDAwLDB4M2EgfSwKKyAgMTYsIDB4OGIyMCwgMCwgezB4MTAsMHgwZiwweGI0LDB4MDMsMHhlYywweDAwLDB4ZjAsMHgwMCwweDNjLDB4YzAsMHgwZiwweDgwLDB4MGIsMHhhZCwweDIwLDB4ZmIgfSwKKyAgMTYsIDB4OGIzMCwgMCwgezB4NDAsMHgzZSwweDEwLDB4MDcsMHhhOCwweDYzLDB4ZTAsMHgwMCwweGZiLDB4ODAsMHgzZSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4OGI0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDcyLDB4MDAgfSwKKyAgMTYsIDB4OGI1MCwgMCwgezB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhjMCwweDAzLDB4ZGMsMHgwMCwweDhmLDB4MDAgfSwKKyAgMTYsIDB4OGI2MCwgMCwgezB4MzMsMHhjMSwweDBjLDB4YzAsMHgwMywweGJlLDB4MDAsMHhmZiwweDkwLDB4M2IsMHgyOCwweDBlLDB4NTksMHgwMywweDJlLDB4MDAgfSwKKyAgMTYsIDB4OGI3MCwgMCwgezB4N2IsMHgwMCwweDMyLDB4YzQsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGI4MCwgMCwgezB4YzEsMHgwNCwweDZjLDB4MDAsMHhiYiwweDAwLDB4NjIsMHhhMCwweDBmLDB4YjAsMHgwMiwweGVjLDB4MDksMHg4YiwweDAwLDB4MmUgfSwKKyAgMTYsIDB4OGI5MCwgMCwgezB4MzAsMHgwYiwweGE4LDB4MDMsMHhhYywweDAwLDB4ZmEsMHhjMSwweDIyLDB4YzEsMHgwOCwweDhjLDB4MDIsMHgyYywweDAwLDB4YjMgfSwKKyAgMTYsIDB4OGJhMCwgMCwgezB4ODEsMHgyYSwweDAwLDB4MGQsMHg4OCwweGIyLDB4MjIsMHgwMCwweGIzLDB4YzAsMHgyMiwweGM4LDB4MGIsMHhiMCwweDQyLDB4NjEgfSwKKyAgMTYsIDB4OGJiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHg2YywweDAwLDB4YmIsMHgwMSwweDIyLDB4NjIgfSwKKyAgMTYsIDB4OGJjMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4ZWMsMHgwNCwweDhiLDB4MDAsMHgyZSwweGEyLDB4NDksMHg4OCwweDI2LDB4ZWMsMHgwMCwweGE4LDB4ODAgfSwKKyAgMTYsIDB4OGJkMCwgMCwgezB4MjIsMHhjMCwweDI4LDB4ODIsMHgwYSwweGFjLDB4YTAsMHhiYiwweDA4LDB4MjIsMHhjMCwweDA4LDB4ODAsMHgwYSwweDI4LDB4ODQgfSwKKyAgMTYsIDB4OGJlMCwgMCwgezB4YjksMHhjMCwweGEyLDB4MDAsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGJmMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMywweDEwLDB4MjAsMHg0OCwweDBhLDB4MzIsMHgwMiwweGNjLDB4ODAsMHg4MywweDAxLDB4MjQgfSwKKyAgMTYsIDB4OGMwMCwgMCwgezB4MDAsMHgwYiwweDAyLDB4MDYsMHg4YywweDYwLDB4YTAsMHgyMCwweDIwLDB4YzgsMHgwOCwweDAxLDB4MDIsMHgwYywweDAwLDB4YjMgfSwKKyAgMTYsIDB4OGMxMCwgMCwgezB4MDAsMHgyOCwweDAwLDB4MDksMHgyMCwweDAyLDB4MDgsMHg4MCwweGIxLDB4MDAsMHhhMCwweDgwLDB4MGIsMHgzMCwweDAyLDB4NDIgfSwKKyAgMTYsIDB4OGMyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHg2YywweDAwLDB4ZmYsMHgwMCwweGEyLDB4MGUgfSwKKyAgMTYsIDB4OGMzMCwgMCwgezB4MGIsMHhmMSwweDAzLDB4ZmMsMHgwOCwweGNmLDB4MjAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZmMsMHg4NCwweGE4LDB4MjAgfSwKKyAgMTYsIDB4OGM0MCwgMCwgezB4YjIsMHhjOCwweDhjLDB4ODAsMHgwMywweGFjLDB4NDQsMHhmYiwweDcwLDB4M2EsMHhjMCwweDBlLDB4OTAsMHgwMywweDJjLDB4YTQgfSwKKyAgMTYsIDB4OGM1MCwgMCwgezB4ZmIsMHgwMCwweGIyLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGM2MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmZiwweDI2LDB4M2UsMHgwMCwweDBmLDB4YjYsMHgxMywweGVkLDB4MDAsMHhmYiwweDEwLDB4M2YgfSwKKyAgMTYsIDB4OGM3MCwgMCwgezB4MDAsMHgwZiwweGMxLDB4MTMsMHhhYywweDgwLDB4ZjgsMHgxMiwweDNlLDB4YzYsMHg0ZiwweDQyLDB4NDMsMHhmYywweDA0LDB4ZmYgfSwKKyAgMTYsIDB4OGM4MCwgMCwgezB4MzEsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHhiZiwweGMwLDB4OGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4OGM5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDQwLDB4ZmMsMHg4MCwweDM2LDB4YzggfSwKKyAgMTYsIDB4OGNhMCwgMCwgezB4MGYsMHgwOSwweDAzLDB4YzIsMHgwMCwweGY4LDB4YzAsMHgzMywweGNjLDB4MmMsMHg0YywweDAzLDB4NjMsMHg5MCwweGUwLDB4OTAgfSwKKyAgMTYsIDB4OGNiMCwgMCwgezB4M2EsMHhjMCwweDBkLDB4NTAsMHgwYiwweDNjLDB4MDQsMHhkZiwweDY0LDB4M2YsMHhjOCwweDhkLDB4ZjEsMHg0MywweDJjLDB4MDAgfSwKKyAgMTYsIDB4OGNjMCwgMCwgezB4ZDUsMHgwMCwweDMzLDB4YzAsMHg0NSwweGYyLDB4MjMsMHg3MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGNkMCwgMCwgezB4ODAsMHgxMCwweGVkLDB4ODAsMHhiYSwweDAyLDB4MjEsMHhkZSwweDhiLDB4ODIsMHgyMiwweGUwLDB4MjAsMHhiMCwweDAwLDB4MmIgfSwKKyAgMTYsIDB4OGNlMCwgMCwgezB4ZWMsMHgwOSwweDgwLDB4MDIsMHhlMywweDQwLDB4YmEsMHgyMCwweDJmLDB4ZGMsMHgwOCwweDk4LDB4MTIsMHgyYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4OGNmMCwgMCwgezB4NTEsMHgyYSwweGQwLDB4MDgsMHg3MiwweDIyLDB4MmUsMHgwMCwweDhkLDB4ODAsMHgyMSwweGQwLDB4MDgsMHhiNiwweDgyLDB4MjAgfSwKKyAgMTYsIDB4OGQwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDQwLDB4YjksMHgyOCwweDI0LDB4YzAgfSwKKyAgMTYsIDB4OGQxMCwgMCwgezB4NGEsMHgxMiwweDEyLDB4ODgsMHg4NSwweGE4LDB4MjAsMHgyMCwweGMwLDB4MGIsMHgyMiwweDAyLDB4YzAsMHg5MSwweGExLDB4MDAgfSwKKyAgMTYsIDB4OGQyMCwgMCwgezB4MjgsMHhjMiwweDBiLDB4MDAsMHgxMiwweDhjLDB4NDAsMHhhMywweDIwLDB4MjAsMHhjNCwweDBiLDB4MzAsMHgwYSwweDBjLDB4MTEgfSwKKyAgMTYsIDB4OGQzMCwgMCwgezB4OTksMHgwMCwweDIwLDB4YzUsMHgwOSwweDAxLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGQ0MCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MDAsMHhiOCwweDgwLDB4MjIsMHhjMCwweDBiLDB4ODgsMHgwMiwweGVlLDB4MDEsMHhiOCwweGMxLDB4MmEgfSwKKyAgMTYsIDB4OGQ1MCwgMCwgezB4YzAsMHgxYiwweGE4LDB4MDYsMHhlMiwweDAwLDB4YmIsMHg4MCwweDJlLDB4YzAsMHg4YSwweDgwLDB4MDIsMHhhYywweDAwLDB4YWIgfSwKKyAgMTYsIDB4OGQ2MCwgMCwgezB4MDAsMHgyZSwweGMwLDB4MGEsMHhiMCwweDAyLDB4MmMsMHgwMCwweDk5LDB4MDAsMHgyNCwweGMwLDB4MDgsMHg4MCwweDAyLDB4MzAgfSwKKyAgMTYsIDB4OGQ3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YjAsMHg4MCwweDM2LDB4YzAgfSwKKyAgMTYsIDB4OGQ4MCwgMCwgezB4MGUsMHhhOCwweDEzLDB4ZTIsMHg4NSwweGYzLDB4YzAsMHgzMiwweGMwLDB4MGUsMHg5YywweDIzLDB4ZTcsMHgyNCwweGU4LDB4ODIgfSwKKyAgMTYsIDB4OGQ5MCwgMCwgezB4M2EsMHhjMSwweDBmLDB4OTQsMHgwMywweGFjLDB4MDIsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDJlLDB4MTAgfSwKKyAgMTYsIDB4OGRhMCwgMCwgezB4NTEsMHgwMCwweGIyLDB4YzAsMHgwZCwweGIwLDB4MDMsMHg1MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGRiMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4ZDAsMHgwMywweGYwLDB4MDQsMHhmZCwweDA0LDB4M2YgfSwKKyAgMTYsIDB4OGRjMCwgMCwgezB4YzAsMHg0YywweGMwLDB4MDMsMHhmMCwweDEwLDB4ZmMsMHgwMCwweDFmLDB4YzAsMHgwZCwweGQxLDB4MjMsMHgxYywweDAwLDB4YzcgfSwKKyAgMTYsIDB4OGRkMCwgMCwgezB4MDAsMHgzOSwweGMwLDB4MGQsMHhmMCwweDgzLDB4ZmUsMHg0NCwweGVkLDB4MDAsMHgzYiwweGMwLDB4MGYsMHg3NCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4OGRlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZjksMHgwMSwweGJhLDB4YzEgfSwKKyAgMTYsIDB4OGRmMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4YTEsMHgwOCwweGZhLDB4MDAsMHgzMCwweGM4LDB4OGYsMHg5NCwweDAzLDB4MjUsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4OGUwMCwgMCwgezB4M2MsMHhjMCwweDBmLDB4MDQsMHg4MywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhlMCwweDBmLDB4NzEsMHgwYiwweDJjLDB4NDAgfSwKKyAgMTYsIDB4OGUxMCwgMCwgezB4ZmQsMHgwOCwweDM3LDB4YzAsMHg0ZSwweDkxLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGUyMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHhiOSwweDAwLDB4MjMsMHhjMCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhjOCwweDAwLDB4MzcgfSwKKyAgMTYsIDB4OGUzMCwgMCwgezB4ZjAsMHgwYiwweDgwLDB4MDEsMHg2NCwweDAwLDB4NDksMHgwMiwweDMzLDB4YzAsMHg4NCwweDljLDB4MDMsMHgzYywweDAwLDB4YmYgfSwKKyAgMTYsIDB4OGU0MCwgMCwgezB4MDIsMHgwZiwweGQwLDB4MDgsMHhmNCwweDAyLDB4MGUsMHgxMCwweGJkLDB4ODAsMHgzMywweGUwLDB4MDgsMHg5MCwweDBhLDB4MzIgfSwKKyAgMTYsIDB4OGU1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjAsMHgwNiwweDIwLDB4YzAgfSwKKyAgMTYsIDB4OGU2MCwgMCwgezB4MDgsMHgwMCwweDQyLDB4ODQsMHgwMCwweGEwLDB4MDAsMHgyMCwweGYwLDB4MGIsMHgwMCwweDIyLDB4Y2MsMHgwMCwweDkwLDB4MDAgfSwKKyAgMTYsIDB4OGU3MCwgMCwgezB4MjgsMHhjMCwweDAyLDB4M2QsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMiwweDlhLDB4MzgsMHgwMiwweDA2LDB4MDQgfSwKKyAgMTYsIDB4OGU4MCwgMCwgezB4YjEsMHgxMiwweDIwLDB4ZTAsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGU5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNiwweDgwLDB4MjEsMHhlMCwweDI4LDB4ZWEsMHgwMiwweDM2LDB4ODAsMHg4NiwweDkwLDB4NjUgfSwKKyAgMTYsIDB4OGVhMCwgMCwgezB4ZTAsMHgxYiwweGRhLDB4MDYsMHg1ZSwweDAxLDB4OWUsMHg4NCwweDI1LDB4ZWMsMHgwYSwweDc4LDB4MDIsMHg1ZSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4OGViMCwgMCwgezB4ODAsMHgyZCwweGUwLDB4MDgsMHg3OSwweDRhLDB4MTYsMHg0MCwweGJkLDB4ODAsMHgyNSwweGUwLDB4MDgsMHgzOCwweDAyLDB4MDggfSwKKyAgMTYsIDB4OGVjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZmIsMHgwMCwweDI4LDB4ZTAgfSwKKyAgMTYsIDB4OGVkMCwgMCwgezB4MDgsMHgxOCwweDAyLDB4OGEsMHg4OCwweGExLDB4YTAsMHgyMCwweGMyLDB4MWYsMHgyYSwweDIzLDB4ZTYsMHhjOCwweGYwLDB4YzAgfSwKKyAgMTYsIDB4OGVlMCwgMCwgezB4M2EsMHhlZCwweDRlLDB4MzQsMHgwMiwweDhjLDB4MDgsMHhmMywweDgxLDB4MWUsMHhjMCwweDBlLDB4MzAsMHgwMywweDBlLDB4YzAgfSwKKyAgMTYsIDB4OGVmMCwgMCwgezB4ZjEsMHgwMCwweGIwLDB4Y2EsMHgwZSwweDIxLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGYwMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDgsMHhmZSwweDEwLDB4M2YsMHhkMiwweDBmLDB4ZTAsMHgwMywweGVjLDB4MDQsMHhmZiwweDE0LDB4N2UgfSwKKyAgMTYsIDB4OGYxMCwgMCwgezB4YzAsMHgwZiwweGIxLDB4MjMsMHhmYywweDAxLDB4ZWUsMHgwMCwweDNhLDB4YzQsMHgwZCwweGIwLDB4MTMsMHhiYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4OGYyMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGUsMHhmMCwweDgzLDB4ZmMsMHgwYywweGZkLDB4MTAsMHgzYiwweGMwLDB4MmYsMHhlMSwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4OGYzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDQwLDB4ZjAsMHg4MCwweDMyLDB4ZDAgfSwKKyAgMTYsIDB4OGY0MCwgMCwgezB4MGMsMHhhMCwweDAzLDB4NmMsMHgwMCwweGYzLDB4ODAsMHgzMiwweGRhLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4OGY1MCwgMCwgezB4M2UsMHhjYywweDRjLDB4OTgsMHgxMywweDJjLDB4MTAsMHhmYiwweDA0LDB4M2UsMHhjNCwweDBjLDB4ZjIsMHg4MywweGE2LDB4MTAgfSwKKyAgMTYsIDB4OGY2MCwgMCwgezB4ZGQsMHgyMCwweDNmLDB4ZDEsMHgwYywweGIwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGY3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4ODAsMHhiNywweDAwLDB4MjEsMHhjOCwweDBjLDB4NzAsMHgwMiwweGRjLDB4MDgsMHhiNywweDAwLDB4MjEgfSwKKyAgMTYsIDB4OGY4MCwgMCwgezB4YzgsMHgwZSwweDcwLDB4MjIsMHhkOCwweDAwLDB4YjcsMHgwMCwweDJjLDB4YzIsMHgwYSwweDcwLDB4MGEsMHgxZiwweDA4LDB4YjcgfSwKKyAgMTYsIDB4OGY5MCwgMCwgezB4MDAsMHgzOSwweGM4LDB4MGEsMHg3MCwweDAyLDB4MTQsMHgwMCwweGM1LDB4NjksMHgyYywweGNhLDB4MmEsMHg3MCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4OGZhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YmYsMHg4MSwweDY0LDB4ZTEgfSwKKyAgMTYsIDB4OGZiMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4NWEsMHgwMSwweGJmLDB4ODAsMHgyMSwweGVjLDB4NGIsMHg3OCwweDQ2LDB4OWYsMHgwOCwweDM3LDB4ODAgfSwKKyAgMTYsIDB4OGZjMCwgMCwgezB4MmQsMHhlOCwweDg4LDB4MTgsMHgwMiwweDFlLDB4ODEsMHhiNywweGIwLDB4MmQsMHhlMCwweDA5LDB4N2EsMHgwMiwweDhlLDB4MDAgfSwKKyAgMTYsIDB4OGZkMCwgMCwgezB4OTUsMHhhMCwweDJkLDB4ZTQsMHgwOCwweDc4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGZlMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MDAsMHhiMywweDYwLDB4MjAsMHhjMCwweDA4LDB4YjYsMHgwMiwweGNjLDB4MDAsMHhiMywweDAxLDB4MjAgfSwKKyAgMTYsIDB4OGZmMCwgMCwgezB4YzAsMHg4YSwweGIwLDB4ODYsMHhjZiwweDAwLDB4YmIsMHgxMCwweDZjLDB4YzEsMHgwYSwweDM4LDB4MDIsMHgwYywweDAxLDB4YjMgfSwKKyAgMTYsIDB4OTAwMCwgMCwgezB4MDIsMHgyOCwweGMwLDB4MGIsMHhiMCwweDBhLDB4MGMsMHgwMCwweDgxLDB4MDAsMHgyZSwweGMwLDB4MGEsMHhiNCwweDgyLDB4ZDIgfSwKKyAgMTYsIDB4OTAxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHg0MCwweGI2LDB4ODAgfSwKKyAgMTYsIDB4OTAyMCwgMCwgezB4MGMsMHhlNCwweDAzLDB4NzgsMHg4MCwweGZlLDB4NzQsMHgzMiwweDgwLDB4MGIsMHhlNiwweDAzLDB4ZjksMHgwMCwweGZlLDB4MDAgfSwKKyAgMTYsIDB4OTAzMCwgMCwgezB4M2UsMHg4MCwweDBjLDB4ZTAsMHgwMywweDI4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDRkLDB4YTAsMHgwMywweGE4LDB4MDAgfSwKKyAgMTYsIDB4OTA0MCwgMCwgezB4ZGEsMHgwNCwweDNlLDB4ODAsMHgwYywweGU0LDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTA1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDJlLDB4ODAsMHgyMywweGUwLDB4MDAsMHhmOCwweDAxLDB4M2MgfSwKKyAgMTYsIDB4OTA2MCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDIwLDB4ZjgsMHgyMCwweDNlLDB4MDEsMHg4ZiwweDg5LDB4MDMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4OTA3MCwgMCwgezB4MDAsMHgzYSwweDEwLDB4MGUsMHg4MCwweDAxLDB4ZTAsMHgwMCwweGU4LDB4NDAsMHg3ZSwweDAwLDB4NGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OTA4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMSwweDdlLDB4NDAgfSwKKyAgMTYsIDB4OTA5MCwgMCwgezB4MmMsMHg5MCwweDBiLDB4MjQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDY4LDB4MDUsMHg5MCwweDEzLDB4YTQsMHgwNCwweGQ5LDB4MDAgfSwKKyAgMTYsIDB4OTBhMCwgMCwgezB4MzIsMHg0MSwweDBlLDB4OTEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2MCwweDBlLDB4OTAsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4OTBiMCwgMCwgezB4ZjEsMHgwMCwweDMyLDB4NDAsMHg2OCwweDkwLDB4NDMsMHg4MiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTBjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MCwweDA4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4OTBkMCwgMCwgezB4NzAsMHg4OCwweDkwLDB4MDMsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk4LDB4MTIsMHhlNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4OTBlMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGEsMHg5MCwweDBhLDB4MjYsMHgwMCwweGI5LDB4ODAsMHhhMiwweDQwLDB4MDgsMHg5MCwweDEyLDB4MjAgfSwKKyAgMTYsIDB4OTBmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHgwNCwweDJjLDB4NDAgfSwKKyAgMTYsIDB4OTEwMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMSwweGI5LDB4MDAsMHgyYSwweDQwLDB4MGIsMHhiMCwweDAyLDB4YTQsMHgwMSwweGI5LDB4MDAgfSwKKyAgMTYsIDB4OTExMCwgMCwgezB4ZTAsMHg0MCwweDBhLDB4OTAsMHg4MiwweGE0LDB4MDAsMHhiOSwweDAwLDB4MmMsMHg0OCwweDBhLDB4OTgsMHgwMiwweDI0LDB4ODAgfSwKKyAgMTYsIDB4OTEyMCwgMCwgezB4MzksMHgyMCwweDIyLDB4NDAsMHgyYSwweDkwLDB4MDIsMHg4NiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTEzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDAwLDB4MmMsMHg0OCwweDA4LDB4MTAsMHgxMiwweDA0LDB4MTAsMHhiMSwweDA0LDB4MmMgfSwKKyAgMTYsIDB4OTE0MCwgMCwgezB4ZDgsMHgwYSwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjEsMHgwMCwweDIwLDB4NDgsMHgwOCwweDEwLDB4MDIsMHhjNCwweDgwLDB4YjEgfSwKKyAgMTYsIDB4OTE1MCwgMCwgezB4MjIsMHgyYywweDUwLDB4OGEsMHgzMiwweDgyLDB4MDUsMHhhMCwweGIxLDB4MmEsMHgyMCwweDRhLDB4MGEsMHgxMiwweDgyLDB4MDIgfSwKKyAgMTYsIDB4OTE2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDUwLDB4YzgsMHg1MiwweDJlLDB4MTQgfSwKKyAgMTYsIDB4OTE3MCwgMCwgezB4MGMsMHg4NSwweDAzLDB4MjEsMHg0MCwweGY4LDB4NTAsMHgzYSwweDAwLDB4MWYsMHg4NSwweDAzLDB4YTEsMHg0MCwweGY4LDB4NTAgfSwKKyAgMTYsIDB4OTE4MCwgMCwgezB4MzIsMHgxNCwweDBlLDB4ODAsMHgwMywweGExLDB4NDAsMHhmOCwweDUwLDB4M2MsMHg4MCwweDBlLDB4MDIsMHgwMywweDIwLDB4ODAgfSwKKyAgMTYsIDB4OTE5MCwgMCwgezB4ZmEsMHgyMCwweDMyLDB4MDgsMHgwZSwweDgyLDB4MTMsMHhhZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTFhMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NTAsMHhmZCwweDAwLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmZCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OTFiMCwgMCwgezB4NDQsMHg4ZCwweGQwLDB4MDEsMHhiZCwweDAwLDB4ZmQsMHgwMiwweDNlLDB4NDQsMHgwZiwweGQ0LDB4MDAsMHhlNCwweDQ4LDB4NzkgfSwKKyAgMTYsIDB4OTFjMCwgMCwgezB4MTQsMHgzZSwweDUwLDB4MGYsMHg5MiwweGEyLDB4ZjQsMHgwOCwweGZkLDB4MDAsMHgzZSwweDRhLDB4MGQsMHhkMiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4OTFkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNywweDAwLDB4ZjksMHgxMCwweDNhLDB4NmUgfSwKKyAgMTYsIDB4OTFlMCwgMCwgezB4MGMsMHhiMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4NDQsMHgzYiwweDYxLDB4OGUsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4NDAgfSwKKyAgMTYsIDB4OTFmMCwgMCwgezB4MzIsMHg2NiwweDBmLDB4ZGEsMHgwYiwweGE3LDB4MjgsMHhjOSwweGUwLDB4M2YsMHg2OCwweDBjLDB4ZGEsMHg4MywweGIzLDB4MjAgfSwKKyAgMTYsIDB4OTIwMCwgMCwgezB4ZWQsMHhhMCwweDMzLDB4NzksMHgwOCwweGQ4LDB4MDMsMHg0NiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTIxMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4MDAsMHhiOCwweGEwLDB4MmUsMHgzOCwweDA4LDB4OGEsMHgwMiwweGUyLDB4ODgsMHhlOCwweDgxLDB4MmUgfSwKKyAgMTYsIDB4OTIyMCwgMCwgezB4MTQsMHgwOSwweDBhLDB4MDMsMHhlMiwweDgwLDB4YjgsMHg4MCwweDMyLDB4MzAsMHgwYiwweDg1LDB4MDIsMHgyMSwweDAxLDB4YTggfSwKKyAgMTYsIDB4OTIzMCwgMCwgezB4ZjQsMHgzOCwweDJhLDB4MDgsMHgwZSwweGNhLDB4MjMsMHg5MCwweGM4LDB4NTQsMHgzNCwweDM4LDB4MDgsMHg4YSwweDkyLDB4MGUgfSwKKyAgMTYsIDB4OTI0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHgwMCwweDI4LDB4NDAgfSwKKyAgMTYsIDB4OTI1MCwgMCwgezB4MTksMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MjAsMHgyOCwweDQwLDB4MGIsMHgxMCwweDA2LDB4YzQsMHgyMCwweGExLDB4YTIgfSwKKyAgMTYsIDB4OTI2MCwgMCwgezB4NmMsMHg0OCwweDBiLDB4MTAsMHgwMiwweDg0LDB4MDgsMHg4MSwweDIwLDB4MmMsMHg1MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4MDQgfSwKKyAgMTYsIDB4OTI3MCwgMCwgezB4YjEsMHgwMCwweDI0LDB4NTgsMHgwOCwweDNjLDB4MDIsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTI4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDEsMHhiOSwweDIwLDB4MmMsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MTAsMHhhOSwweDQwLDB4MmUgfSwKKyAgMTYsIDB4OTI5MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDAwLDB4YjEsMHgwMSwweDJhLDB4NDAsMHgwYiwweDk0LDB4MDIsMHgyNCwweDAwLDB4YTkgfSwKKyAgMTYsIDB4OTJhMCwgMCwgezB4MDAsMHgyYSwweDQwLDB4MDEsMHgxMCwweDUyLDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyNiwweDQwLDB4MDAsMHg5OCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4OTJiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg2MSwweDNhLDB4NDAgfSwKKyAgMTYsIDB4OTJjMCwgMCwgezB4MGQsMHg5MCwweDgzLDB4ZTUsMHgyMCwweGY5LDB4MDEsMHgzYSwweDQwLDB4MmUsMHg5MCwweDAyLDB4ZTQsMHg0MCwweGU5LDB4MDEgfSwKKyAgMTYsIDB4OTJkMCwgMCwgezB4OWUsMHg0MCwweDBmLDB4OTQsMHgwMywweGE0LDB4MDAsMHg4OSwweDAwLDB4M2UsMHg0MCwweDJkLDB4OTAsMHgwMiwweGU2LDB4MDggfSwKKyAgMTYsIDB4OTJlMCwgMCwgezB4YjksMHgwMSwweDM2LDB4NDAsMHgyYywweDkwLDB4MDEsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTJmMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDJlLDB4OTAsMHgwMywweGU0LDB4ODAsMHhmOSwweDAwLDB4M2MgfSwKKyAgMTYsIDB4OTMwMCwgMCwgezB4NDAsMHgwYywweDljLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHgwZiwweDEwLDB4NDMsMHg4NCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4OTMxMCwgMCwgezB4MDIsMHgzZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4ODAsMHg4MCwweGY5LDB4MDAsMHgzYywweDQwLDB4MmYsMHg5MCwweDAzLDB4OGEgfSwKKyAgMTYsIDB4OTMyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHg0MCwweDM2LDB4MDEgfSwKKyAgMTYsIDB4OTMzMCwgMCwgezB4MGQsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGU4LDB4NDAsMHgzZSwweDA4LDB4MGMsMHg4MCwweDAzLDB4ZTEsMHgwMCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4OTM0MCwgMCwgezB4MzIsMHgwMCwweDhmLDB4ODAsMHgwMywweGEwLDB4MTAsMHhmOCwweDAwLDB4MzIsMHgwNCwweDBlLDB4ODAsMHg4MywweDYwLDB4MDAgfSwKKyAgMTYsIDB4OTM1MCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTM2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4YSwweDAxLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgyNCwweGU4LDB4MDAsMHgwYSwweDAwLDB4MmYgfSwKKyAgMTYsIDB4OTM3MCwgMCwgezB4ODAsMHgxYSwweGEwLDB4MDIsMHgyOCwweDAwLDB4YmEsMHgwMCwweDE2LDB4ODAsMHgwYiwweGUwLDB4MDMsMHgyOCwweDA4LDB4ZWEgfSwKKyAgMTYsIDB4OTM4MCwgMCwgezB4MDAsMHgzMywweDkwLDB4MDgsMHhlYywweDFiLDB4MjIsMHg4MCwweGM2LDB4MTQsMHgyZiwweDkxLDB4MDgsMHhhMCwweDQzLDB4NGEgfSwKKyAgMTYsIDB4OTM5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMCwweDI0LDB4YzAgfSwKKyAgMTYsIDB4OTNhMCwgMCwgezB4MDksMHgzMCwweDEyLDB4Y2MsMHgwNCwweGEzLDB4MDQsMHg2YywweGMwLDB4MDksMHgzMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4OTNiMCwgMCwgezB4MmMsMHhjMCwweDEzLDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwLDB4ZTYsMHhiOCwweDBhLDB4MzgsMHgwMiwweDQ0LDB4MDggfSwKKyAgMTYsIDB4OTNjMCwgMCwgezB4ODIsMHg1MCwweDJjLDB4ZDIsMHgzYSwweDMwLDB4MDIsMHg4YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTNkMCwgMCwgezB4YTAsMHgwMSwweDBlLDB4ODAsMHg5NywweGI0LDB4MjEsMHhjNCwweDQ5LDB4NzEsMHgwMiwweGRlLDB4ODEsMHg4NywweDIxLDB4MmQgfSwKKyAgMTYsIDB4OTNlMCwgMCwgezB4ZDAsMHgwYiwweDdiLDB4MDIsMHgxYywweDAxLDB4YmYsMHgyMCwweDI5LDB4YzQsMHgwYiwweDMwLDB4MDIsMHg1YywweDAwLDB4YTcgfSwKKyAgMTYsIDB4OTNmMCwgMCwgezB4YTEsMHgyMSwweGMwLDB4NGEsMHg3MCwweDhhLDB4MGMsMHg4MSwweDg0LDB4MDAsMHgyZCwweGQwLDB4MGEsMHg1MCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4OTQwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDgyLDB4ZGYsMHhhMCwweDM0LDB4ZWMgfSwKKyAgMTYsIDB4OTQxMCwgMCwgezB4MGQsMHg3OSwweDAyLDB4ZmUsMHg4MCwweGU3LDB4ZTgsMHgyZiwweGEwLDB4MDksMHg3YSwweDAyLDB4OWUsMHgwMCwweGY3LDB4YTIgfSwKKyAgMTYsIDB4OTQyMCwgMCwgezB4MjUsMHhlYSwweDBiLDB4NDgsMHgwMywweDllLDB4MDQsMHhmZiwweGMwLDB4NjUsMHhlNCwweDBlLDB4NjgsMHgwMywweDVmLDB4MDAgfSwKKyAgMTYsIDB4OTQzMCwgMCwgezB4ZTQsMHg4MCwweDNkLDB4ZTAsMHgwZSwweGY4LDB4MDMsMHhhYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTQ0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4NDgsMHhlYiwweDA1LDB4M2UsMHhkOSwweDBlLDB4YjIsMHgwMywweGVjLDB4MDAsMHhmYiwweDYwLDB4M2UgfSwKKyAgMTYsIDB4OTQ1MCwgMCwgezB4YzAsMHgwZSwweGIyLDB4ODMsMHhhYywweDAwLDB4ZjMsMHg1MCwweGE2LDB4YzAsMHg0ZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4OTQ2MCwgMCwgezB4ODAsMHgzZiwweGQ4LDB4MGQsMHhhMCwweDAzLDB4ZWMsMHgwYSwweGY5LDB4MDAsMHgzZSwweGMwLDB4MGQsMHg5MCwweDAzLDB4NDIgfSwKKyAgMTYsIDB4OTQ3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4YmIsMHg5MCwweDNlLDB4ZTAgfSwKKyAgMTYsIDB4OTQ4MCwgMCwgezB4MDgsMHgzOSwweDAzLDB4OWUsMHgyMCwweGNmLDB4ODIsMHg3NywweGUwLDB4MWYsMHhmOCwweDAzLDB4ZWUsMHgwMCwweGZmLDB4YzAgfSwKKyAgMTYsIDB4OTQ5MCwgMCwgezB4M2YsMHhlNSwweDBkLDB4ZjksMHgwMywweGVlLDB4MDAsMHhmYiwweDkwLDB4MzcsMHhhMCwweDA4LDB4ZjgsMHgwZiwweDFlLDB4MDAgfSwKKyAgMTYsIDB4OTRhMCwgMCwgezB4Y2MsMHg5NCwweDMzLDB4NjAsMHgwZCwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTRiMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhiNywweDkwLDB4MmYsMHhlNCwweDA4LDB4N2EsMHgwMiwweDFlLDB4MDAsMHg4ZiwweDEyLDB4MjUgfSwKKyAgMTYsIDB4OTRjMCwgMCwgezB4ZDgsMHgwYiwweGJiLDB4MDIsMHgxZSwweDAwLDB4YjcsMHgwMCwweDJkLDB4ZTgsMHgwOCwweDdkLDB4ODIsMHhkZSwweDQwLDB4YmIgfSwKKyAgMTYsIDB4OTRkMCwgMCwgezB4YTAsMHgyNywweDkwLDB4MGEsMHg3NiwweDAyLDB4NWMsMHg4MCwweDg1LDB4MDAsMHgzNywweGM0LDB4NGQsMHg3MSwweDAzLDB4ZWEgfSwKKyAgMTYsIDB4OTRlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgyMCwweDJkLDB4YzAgfSwKKyAgMTYsIDB4OTRmMCwgMCwgezB4MjksMHhmMiwweDIyLDB4YmMsMHg4MCwweDk3LDB4MDAsMHgyNSwweDQxLDB4MGIsMHg3MCwweDEyLDB4OWMsMHgwMCwweGI3LDB4MDggfSwKKyAgMTYsIDB4OTUwMCwgMCwgezB4MjksMHhjMCwweDA4LDB4NDIsMHgxMiwweGRjLDB4NDAsMHhiNywweDAwLDB4MjksMHhjMCwweDA5LDB4NjAsMHgyMiwweGRjLDB4MTAgfSwKKyAgMTYsIDB4OTUxMCwgMCwgezB4ODAsMHgwMCwweDIxLDB4NDAsMHgwOSwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTUyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHhiMywweGMwLDB4MmUsMHhjMCwweDA4LDB4MzQsMHg4MiwweDJkLDB4MDAsMHg5MywweDAwLDB4MjQgfSwKKyAgMTYsIDB4OTUzMCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MDIsMHgwZiwweDgwLDB4MTMsMHgwMCwweDJjLDB4YzAsMHgwYSwweDM0LDB4YTIsMHhlYywweDAwLDB4YjMgfSwKKyAgMTYsIDB4OTU0MCwgMCwgezB4MDAsMHgyOCwweGMwLDB4MGIsMHgwMCwweDAyLDB4Y2MsMHgwMCwweDgxLDB4MDAsMHgyMCwweGMwLDB4MDksMHgzMCwweDAyLDB4ODkgfSwKKyAgMTYsIDB4OTU1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiYywweDAwLDB4ZmYsMHhlMCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4OTU2MCwgMCwgezB4MGMsMHhmNCwweDgzLDB4YmQsMHgwMCwweGRmLDB4MDgsMHgzNiwweDQwLDB4MGIsMHg3NSwweDQyLDB4ZmMsMHgyMCwweGZmLDB4ODAgfSwKKyAgMTYsIDB4OTU3MCwgMCwgezB4M2IsMHhjMCwweDJjLDB4M2MsMHgwMywweGZjLDB4MDAsMHhiZiwweDAwLDB4YmUsMHhjMCwweDhkLDB4OTAsMHgwYiwweGFjLDB4MDIgfSwKKyAgMTYsIDB4OTU4MCwgMCwgezB4Y2EsMHgwMCwweDIyLDB4ODAsMHgwZCwweGIwLDB4MDIsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTU5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDA4LDB4MWUsMHhjMCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhlYiwweDAwLDB4M2EgfSwKKyAgMTYsIDB4OTVhMCwgMCwgezB4MTAsMHgwZiwweGIwLDB4MjMsMHhhYywweDAxLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgzYywweDg0LDB4MDMsMHhlYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4OTViMCwgMCwgezB4MDAsMHgyNiwweDQwLDB4MGUsMHg5NCwweDBiLDB4MmMsMHgwMCwweGY5LDB4NDAsMHgzZSwweDkwLDB4MGUsMHg5MCwweDEzLDB4ZTAgfSwKKyAgMTYsIDB4OTVjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAyLDB4Y2YsMHgwMCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4OTVkMCwgMCwgezB4MGQsMHhmMCwweDBiLDB4M2MsMHgyMCwweGNmLDB4MDAsMHgzZCwweDAwLDB4MGUsMHhmMCwweDA3LDB4OWMsMHgwMSwweGNmLDB4MDIgfSwKKyAgMTYsIDB4OTVlMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YzQsMHgwMywweDNjLDB4MDAsMHhjZiwweDAwLDB4MGYsMHhjMCwweDBlLDB4NDQsMHgwMywweDFmLDB4MDIgfSwKKyAgMTYsIDB4OTVmMCwgMCwgezB4Y2MsMHgwMCwweDNmLDB4ODAsMHgyYywweDcwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTYwMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDAyLDB4MmUsMHhjMCwweDBkLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhhYiwweDAwLDB4MDYgfSwKKyAgMTYsIDB4OTYxMCwgMCwgezB4MjAsMHgwOCwweGIwLDB4MDMsMHhmYywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAsMHgwZiwweDgwLDB4MDYsMHhiYywweDAwLDB4YWIgfSwKKyAgMTYsIDB4OTYyMCwgMCwgezB4MDQsMHgzYSwweGYwLDB4MGMsMHg4OCwweDAyLDB4MmMsMHgwMCwweGM5LDB4ODAsMHgzYSwweDkyLDB4MDgsMHg5MCwweDBhLDB4YTAgfSwKKyAgMTYsIDB4OTYzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAgfSwKKyAgMTYsIDB4OTY0MCwgMCwgezB4MDksMHgzMCwweDAyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyNiwweDYwLDB4MGIsMHhiMCwweDAyLDB4YWMsMHgwMCwweDhiLDB4MDAgfSwKKyAgMTYsIDB4OTY1MCwgMCwgezB4NmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHg5YiwweDAwLDB4NGMsMHhlMCwweDBhLDB4OTAsMHgyMiwweDJjLDB4MDAgfSwKKyAgMTYsIDB4OTY2MCwgMCwgezB4OGEsMHhjMiwweDJjLDB4NDAsMHgwOCwweGIwLDB4NDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTY3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHg4MywweDBkLDB4MmMsMHhjNiwweDA5LDB4MzEsMHgwMiwweDBkLDB4ODEsMHhhMywweDExLDB4MjQgfSwKKyAgMTYsIDB4OTY4MCwgMCwgezB4MDAsMHg4YSwweGIxLDB4ZTIsMHg0YywweDgwLDB4YTMsMHgwMCwweDJjLDB4Y2MsMHgwYiwweDAyLDB4MDIsMHg4YywweDgwLDB4YTMgfSwKKyAgMTYsIDB4OTY5MCwgMCwgezB4NDgsMHgwOCwweGMwLDB4MDgsMHgwMCwweDBhLDB4MGQsMHgwMCwweDgxLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ODIgfSwKKyAgMTYsIDB4OTZhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2IsMHgyMCwweDJmLDB4YzggfSwKKyAgMTYsIDB4OTZiMCwgMCwgezB4OGQsMHhmNiwweDEzLDB4MmQsMHhiMCwweDhmLDB4MDAsMHgzNiwweDQwLDB4MGYsMHhmMCwweDAyLDB4YWQsMHhhOCwweDhmLDB4MTAgfSwKKyAgMTYsIDB4OTZjMCwgMCwgezB4M2YsMHhjYSwweDBiLDB4ODAsMHg5MiwweDJjLDB4MTAsMHhkYiwweDQwLDB4M2YsMHhjMCwweDBlLDB4MDAsMHgwMywweDJkLDB4MDQgfSwKKyAgMTYsIDB4OTZkMCwgMCwgezB4YzgsMHgwMiwweDNlLDB4NDAsMHgwYywweGIwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTZlMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjOCwweDBlLDB4ZjEsMHgwMywweGVjLDB4ODQsMHhmZiwweDIwLDB4MzcgfSwKKyAgMTYsIDB4OTZmMCwgMCwgezB4MDAsMHgwZCwweGIyLDB4MDMsMHhiYywweGEwLDB4ZmYsMHgwMCwweDNlLDB4YzksMHgwZSwweDgwLDB4MDMsMHhmZCwweDExLDB4ZmYgfSwKKyAgMTYsIDB4OTcwMCwgMCwgezB4MDAsMHgzYiwweGMwLDB4MGUsMHhjMCwweDAzLDB4ZmMsMHg4MCwweGVkLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDQzLDB4NjggfSwKKyAgMTYsIDB4OTcxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDkwLDB4Y2MsMHg5MiwweDNiLDB4YzggfSwKKyAgMTYsIDB4OTcyMCwgMCwgezB4MGQsMHhmMCwweDgzLDB4NzMsMHgxMCwweGZmLDB4MjgsMHgzNywweGNhLDB4NGYsMHhiMiwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MjAgfSwKKyAgMTYsIDB4OTczMCwgMCwgezB4YjMsMHhjNCwweDBkLDB4NjgsMHg0MywweGZlLDB4MTQsMHhjYiwweDg0LDB4MzMsMHhlMCwweDBkLDB4NzgsMHgwMywweGJlLDB4MDAgfSwKKyAgMTYsIDB4OTc0MCwgMCwgezB4ZmYsMHg4MCwweDM3LDB4YTAsMHgwYywweGYzLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTc1MCwgMCwgezB4ODAsMHgwMCwweGZjLDB4NDgsMHg4MiwweDIxLDB4MDMsMHhmNCwweDBmLDB4ZjYsMHg0MiwweDIwLDB4MDQsMHg4YSwweDYwLDB4MmIgfSwKKyAgMTYsIDB4OTc2MCwgMCwgezB4ZGEsMHgwYiwweGY5LDB4MDIsMHgzZiwweDA0LDB4OGYsMHg1MiwweDIzLDB4ZDUsMHg0ZCwweDg4LDB4MDIsMHhhZSwweDAwLDB4ZGIgfSwKKyAgMTYsIDB4OTc3MCwgMCwgezB4ODAsMHgzNiwweGMwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwNCwweGI4LDB4MDAsMHgyMiwweDYwLDB4MGQsMHg3NCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4OTc4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweGEwLDB4ODAsMHgwMSwweDA4LDB4YzAgfSwKKyAgMTYsIDB4OTc5MCwgMCwgezB4NGIsMHgzMCwweDgyLDB4NDIsMHg5MCwweGEzLDB4MDgsMHgyYywweGM4LDB4MWEsMHgzMCwweDIyLDB4OGQsMHgwMCwweDkzLDB4MDAgfSwKKyAgMTYsIDB4OTdhMCwgMCwgezB4MjQsMHhjOCwweDA5LDB4YTAsMHgxMiwweDBjLDB4MDQsMHhhYiwweDAwLDB4NjIsMHhjMCwweDA5LDB4YjAsMHgwMiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4OTdiMCwgMCwgezB4YjMsMHgwMCwweDI4LDB4ODAsMHgwOCwweDM2LDB4MDYsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTdjMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHg4OCwweDA4LDB4MjIsMHhjMCwweDBhLDB4MzAsMHgxYSwweDAwLDB4MTEsMHg4MiwweDAwLDB4MGEgfSwKKyAgMTYsIDB4OTdkMCwgMCwgezB4YzAsMHgwYiwweGIwLDB4NDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDI2LDB4YzAsMHgwOSwweDkxLDB4MDIsMHhlYywweDIwLDB4YmIgfSwKKyAgMTYsIDB4OTdlMCwgMCwgezB4MjgsMHg2NiwweGMwLDB4MDgsMHg4MCwweDAyLDB4NjAsMHgwMCwweGI4LDB4MDAsMHgyYSwweDQwLDB4ODEsMHhiMCwweDA2LDB4ZjggfSwKKyAgMTYsIDB4OTdmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlYywweDAyLDB4YzgsMHgwNCwweDNhLDB4YzAgfSwKKyAgMTYsIDB4OTgwMCwgMCwgezB4ODksMHhiMCwweDAzLDB4NjgsMHgwMCwweGU5LDB4YzEsMHgxZSwweGMxLDB4MGUsMHgzMCwweDAzLDB4ZWMsMHgwMCwweGRiLDB4MDAgfSwKKyAgMTYsIDB4OTgxMCwgMCwgezB4MzYsMHhjMSwweDBkLDB4MDAsMHgyMywweDBlLDB4MDAsMHhlYiwweDgwLDB4MzIsMHhjOCwweGNkLDB4MzAsMHgzMiwweGVjLDB4MDggfSwKKyAgMTYsIDB4OTgyMCwgMCwgezB4ZjMsMHgwMCwweDNjLDB4ODAsMHgwYywweGIwLDB4MDYsMHg4MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTgzMCwgMCwgezB4ZTAsMHgwMSwweDljLDB4MDAsMHg3YywweDAwLDB4M2YsMHhjMCwweDBiLDB4YjAsMHg0MywweGZkLDB4MDAsMHhiZSwweGM0LDB4MzcgfSwKKyAgMTYsIDB4OTg0MCwgMCwgezB4YzAsMHgxZiwweGYwLDB4MDMsMHg1YywweDAwLDB4ZmYsMHgwMSwweDNiLDB4YzAsMHgwZSwweGM4LDB4MDMsMHhiZiwweDIwLDB4ZGYgfSwKKyAgMTYsIDB4OTg1MCwgMCwgezB4MDAsMHgzZiwweGQwLDB4MGYsMHhjMCwweDEzLDB4YjAsMHgwMCwweDdjLDB4MDAsMHhiNywweDQwLDB4MGYsMHhmMCwweDFiLDB4YjAgfSwKKyAgMTYsIDB4OTg2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDBjLDB4ZDgsMHg0MSwweDMyLDB4YzAgfSwKKyAgMTYsIDB4OTg3MCwgMCwgezB4MGUsMHhiMCwweDA3LDB4YTgsMHgwMSwweDY5LDB4NDAsMHhiMiwweGMwLDB4OGQsMHhiMCwweGEzLDB4ZWMsMHgwOCwweGYzLDB4MDAgfSwKKyAgMTYsIDB4OTg4MCwgMCwgezB4MzIsMHhjMCwweDBmLDB4ODAsMHgwMywweGVkLDB4MDAsMHhmYiwweDQ4LDB4M2EsMHhjMCwweDBkLDB4YjAsMHg4MywweDJjLDB4MDAgfSwKKyAgMTYsIDB4OTg5MCwgMCwgezB4ZmIsMHgyMCwweDNlLDB4ODAsMHgwZiwweDcwLDB4MjMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OThhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4OCwweDAwLDB4MjMsMHhjMCwweDA4LDB4ZjAsMHgwNiwweDJjLDB4MTAsMHg4OCwweDUxLDB4MzcgfSwKKyAgMTYsIDB4OThiMCwgMCwgezB4YzAsMHgwOCwweGYwLDB4MDcsMHg3ZCwweDYwLDB4OGYsMHgwMiwweDM3LDB4YzAsMHgwYiwweDhjLDB4MDAsMHgyZCwweDAwLDB4YjMgfSwKKyAgMTYsIDB4OThjMCwgMCwgezB4MDAsMHgzOCwweGMwLDB4MDgsMHg4MCwweDgyLDB4MjAsMHgwMCwweGI4LDB4MDAsMHgyZSwweDUwLDB4MGIsMHhmMCwweDAwLDB4MzIgfSwKKyAgMTYsIDB4OThkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4OTgsMHgwMCwweDI4LDB4YzAgfSwKKyAgMTYsIDB4OThlMCwgMCwgezB4MGEsMHgzMCwweDAyLDB4ODQsMHgwNCwweGEzLDB4MDAsMHgwMCwweGMwLDB4NjgsMHgzOSwweDA2LDB4MGMsMHgxMCwweDkzLDB4MjAgfSwKKyAgMTYsIDB4OThmMCwgMCwgezB4MjIsMHhjMCwweDliLDB4MDEsMHhhMCwweDhmLDB4MTQsMHgzMywweDE0LDB4MjgsMHhjMCwweDA5LDB4M2MsMHgwMiwweDBjLDB4MDEgfSwKKyAgMTYsIDB4OTkwMCwgMCwgezB4OTMsMHg0MCwweDJjLDB4ODgsMHgwYiwweDMwLDB4MDIsMHhiOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTkxMCwgMCwgezB4NjAsMHgwMSwweDFlLDB4MTAsMHg4NywweDgwLDB4MjksMHhlMCwweDA4LDB4NzgsMHgwMiwweDNlLDB4MDAsMHg4MywweDkwLDB4MjQgfSwKKyAgMTYsIDB4OTkyMCwgMCwgezB4ZTAsMHgwOCwweDc4LDB4MTAsMHhjZSwweDA0LDB4MDcsMHg5MSwweDI1LDB4ZTAsMHg4MywweGM5LDB4MDIsMHgxZSwweDA0LDB4YjcgfSwKKyAgMTYsIDB4OTkzMCwgMCwgezB4ODQsMHgyYiwweGE0LDB4MDgsMHg0OCwweDQyLDB4MTIsMHhjYywweGI0LDB4ODAsMHgyZCwweDY0LDB4MGIsMHg3OCwweDAyLDB4MTkgfSwKKyAgMTYsIDB4OTk0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgyYywweDAwLDB4ZDAsMHgxMCwweDI4LDB4YzggfSwKKyAgMTYsIDB4OTk1MCwgMCwgezB4MGUsMHgzYiwweDAyLDB4ODQsMHgwMCwweGUzLDB4NDAsMHgzMCwweGM4LDB4MGMsMHgzOCwweDYyLDB4OGMsMHgwMCwweDUzLDB4MDAgfSwKKyAgMTYsIDB4OTk2MCwgMCwgezB4MzAsMHhjNCwweDFmLDB4MDAsMHgyMywweDhjLDB4M2MsMHhmMywweDgwLDB4MTgsMHhjMCwweDBkLDB4MzAsMHgwMywweDBlLDB4ODAgfSwKKyAgMTYsIDB4OTk3MCwgMCwgezB4ZDMsMHgxMCwweDNjLDB4ODAsMHgwZiwweDMwLDB4MDMsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTk4MCwgMCwgezB4NDAsMHgxZCwweGJkLDB4MDAsMHhmOSwweDEyLDB4YjQsMHhjMCwweDA3LDB4YjAsMHgwMywweGNjLDB4MDAsMHg0YSwweDAwLDB4NzcgfSwKKyAgMTYsIDB4OTk5MCwgMCwgezB4YzAsMHgwZSwweDcxLDB4NDMsMHg2YywweDAwLDB4ZjMsMHgwMCwweDNmLDB4ZDAsMHgxZiwweGQwLDB4NTMsMHhhYywweDY4LDB4ZmIgfSwKKyAgMTYsIDB4OTlhMCwgMCwgezB4MTgsMHgzZCwweGMwLDB4MGYsMHhjMCwweDEzLDB4ZjAsMHg1MCwweGZjLDB4MDQsMHgzZiwweDQwLDB4MGYsMHhmNCwweDAzLDB4OTAgfSwKKyAgMTYsIDB4OTliMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZCwweDQwLDB4ZjgsMHgwNCwweDNlLDB4ZDIgfSwKKyAgMTYsIDB4OTljMCwgMCwgezB4MGYsMHhiMywweDEzLDB4ZTAsMHgxMCwweGY5LDB4MDAsMHhiMiwweGNjLDB4MGUsMHhiYSwweDAzLDB4NmQsMHg4MCwweGRiLDB4MDIgfSwKKyAgMTYsIDB4OTlkMCwgMCwgezB4MzIsMHhkYywweDRmLDB4MDAsMHgwMywweDZjLDB4MDQsMHhmMywweDAyLDB4MzYsMHg0MCwweDBlLDB4YjAsMHgwMywweGNjLDB4MDAgfSwKKyAgMTYsIDB4OTllMCwgMCwgezB4NGIsMHgwMCwweDNjLDB4ODAsMHgwYywweGYxLDB4MDMsMHg2MiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTlmMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNCwweDAwLDB4MmQsMHhjOSwweDBiLDB4NzAsMHg4MiwweGRjLDB4MDAsMHhiYywweDA0LDB4MjEgfSwKKyAgMTYsIDB4OWEwMCwgMCwgezB4YzQsMHg0YiwweDM3LDB4MDIsMHgwYywweGEwLDB4OGYsMHg3NCwweDIxLDB4YzAsMHgwYiwweDQwLDB4MDIsMHgxYywweDgxLDB4YjcgfSwKKyAgMTYsIDB4OWExMCwgMCwgezB4MjAsMHgyYiwweGMwLDB4MDgsMHg0MCwweDAyLDB4ZDAsMHgwMiwweDg0LDB4MDAsMHgyZCwweDQwLDB4MGEsMHhmMiwweDAyLDB4MTIgfSwKKyAgMTYsIDB4OWEyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDgwLDB4YjQsMHhjMCwweDJkLDB4ZTQgfSwKKyAgMTYsIDB4OWEzMCwgMCwgezB4MGIsMHg3YSwweDAyLDB4ZDIsMHgwMCwweGI1LDB4ODgsMHgyMSwweGU4LDB4MGEsMHg3OCwweDAyLDB4ZGUsMHg0MCwweDk3LDB4MDAgfSwKKyAgMTYsIDB4OWE0MCwgMCwgezB4MjEsMHhlOCwweDBiLDB4Y2MsMHg0NiwweDVlLDB4MjgsMHhiNywweGM0LDB4MjEsMHhmMCwweDBhLDB4NzgsMHgwMiwweGZlLDB4MDggfSwKKyAgMTYsIDB4OWE1MCwgMCwgezB4OTcsMHg4NCwweDJkLDB4YTAsMHgwOCwweDc4LDB4MDIsMHg3MCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWE2MCwgMCwgezB4MDgsMHgxNCwweGNjLDB4MDAsMHhiMCwweGMwLDB4MmMsMHhjMCwweDliLDB4YjAsMHgwMiwweGNjLDB4MjAsMHhiMywweDYwLDB4MjIgfSwKKyAgMTYsIDB4OWE3MCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMsMHgwMSwweDIwLDB4YzAsMHgxYiwweDA2LDB4MTYsMHg0ZiwweDAwLDB4YjMgfSwKKyAgMTYsIDB4OWE4MCwgMCwgezB4YTAsMHgyYSwweGYwLDB4MDgsMHgwMCwweDAyLDB4ZTAsMHgwMCwweDkwLDB4MDAsMHgyYywweDQwLDB4MGEsMHgzMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4OWE5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDEwLDB4ZmUsMHhjMCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4OWFhMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZjksMHgwOCwweGZlLDB4NDAsMHgyMiwweDgwLDB4MGUsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGQyLDB4MDAgfSwKKyAgMTYsIDB4OWFiMCwgMCwgezB4MzIsMHg4MCwweDhmLDB4ZTAsMHgwMywweDU4LDB4MDAsMHhmNiwweDAwLDB4MzMsMHhiMCwweDBlLDB4MjAsMHgwMiwweGU4LDB4MGMgfSwKKyAgMTYsIDB4OWFjMCwgMCwgezB4ZDIsMHgwMiwweDNjLDB4ODAsMHgwYywweGEwLDB4MDMsMHg3YSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWFkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDIwLDB4M2UsMHgwMSwweDBiLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmMCwweDQwLDB4M2UgfSwKKyAgMTYsIDB4OWFlMCwgMCwgezB4MDAsMHg1NywweDgwLDB4MjMsMHgwMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MDMsMHhhMCwweDMwLDB4MzggfSwKKyAgMTYsIDB4OWFmMCwgMCwgezB4MDAsMHgzYSwweDA4LDB4MGYsMHhjNCwweDAzLDB4ZjAsMHgwMCwweGVjLDB4MDAsMHgzZiwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OWIwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMSwweDNjLDB4NDggfSwKKyAgMTYsIDB4OWIxMCwgMCwgezB4NGMsMHg5MCwweDBiLDB4MjQsMHgwMSwweGM5LDB4YzAsMHgzMiwweDQwLDB4YWMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4NDAgfSwKKyAgMTYsIDB4OWIyMCwgMCwgezB4MzAsMHg0MCwweDBkLDB4OWEsMHgwMywweDIyLDB4ODQsMHhjOCwweDE0LDB4MzIsMHg0MCwweDBlLDB4OTAsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4OWIzMCwgMCwgezB4YzksMHgwMCwweDgyLDB4NjgsMHgyYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWI0MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgyMiwweDI0LDB4MDAsMHg4OSwweDAyLDB4ODIgfSwKKyAgMTYsIDB4OWI1MCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNywweDQwLDB4ODksMHg4MCwweDM2LDB4NDEsMHg4ZCwweDE4LDB4MDIsMHhhMCwweDI0LDB4YTggfSwKKyAgMTYsIDB4OWI2MCwgMCwgezB4MDQsMHg2MiwweDQwLDB4MDgsMHg5NCwweDgzLDB4MjQsMHgwMCwweDg5LDB4MDEsMHgyMiwweDcyLDB4MDgsMHg5MCwweDBiLDB4MjAgfSwKKyAgMTYsIDB4OWI3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4OTksMHgwMCwweDJhLDB4NDAgfSwKKyAgMTYsIDB4OWI4MCwgMCwgezB4MjgsMHg5MCwweDEyLDB4MDQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgyMCwweDk5LDB4MDAgfSwKKyAgMTYsIDB4OWI5MCwgMCwgezB4MjIsMHg0MCwweDE4LDB4OTAsMHgwNiwweDIwLDB4MDEsMHg4OCwweDA4LDB4NjIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDM0LDB4MTAgfSwKKyAgMTYsIDB4OWJhMCwgMCwgezB4OGQsMHg4MSwweDIzLDB4NDEsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWJiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDA0LDB4MmMsMHg0OCwweDA4LDB4MTIsMHgwMiwweDA0LDB4MDIsMHg4MywweDIwLDB4MjAgfSwKKyAgMTYsIDB4OWJjMCwgMCwgezB4NDgsMHgwOCwweDEyLDB4MDIsMHhjNCwweDgwLDB4ODMsMHg2MCwweDI0LDB4NDgsMHgxOSwweDM0LDB4NjIsMHhhNSwweDA0LDB4YTEgfSwKKyAgMTYsIDB4OWJkMCwgMCwgezB4MDIsMHg2MCwweDQwLDB4MDgsMHhkMCwweDAyLDB4NTQsMHgwMCwweDhkLDB4MDAsMHgyOSwweDQwLDB4MDgsMHgxMiwweDgyLDB4MDIgfSwKKyAgMTYsIDB4OWJlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDNhLDB4ODAgfSwKKyAgMTYsIDB4OWJmMCwgMCwgezB4MGMsMHg4NSwweDAyLDB4MjEsMHg0NCwweDg4LDB4NTAsMHgzMiwweDE0LDB4NGMsMHg4MCwweDQzLDB4ZTAsMHgwMCwweGQ4LDB4MDAgfSwKKyAgMTYsIDB4OWMwMCwgMCwgezB4MjIsMHgxNCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjOCwweDAwLDB4YTIsMHgwMCwweDBlLDB4ODAsMHgwMywweDIwLDB4MDAgfSwKKyAgMTYsIDB4OWMxMCwgMCwgezB4YzgsMHgwMCwweDMzLDB4MDAsMHgwYywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWMyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDQsMHhmZCwweDAwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4MTAsMHhmZiwweDEwLDB4M2UgfSwKKyAgMTYsIDB4OWMzMCwgMCwgezB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQsMHgwYiwweGYwLDB4MTMsMHhlNSwweDEwLDB4ZjkgfSwKKyAgMTYsIDB4OWM0MCwgMCwgezB4NDAsMHgzZiwweDRhLDB4MmYsMHg5MiwweDhhLDB4YTQsMHhhMiwweGY5LDB4MjgsMHgzNiwweDQwLDB4MGYsMHg5MiwweDgzLDB4YTYgfSwKKyAgMTYsIDB4OWM1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhlNiwweGMwLDB4YzEsMHgwMCwweDNmLDB4NjkgfSwKKyAgMTYsIDB4OWM2MCwgMCwgezB4MGMsMHg5YSwweDQzLDB4NmMsMHgwMCwweGZkLDB4YTAsMHgzZSwweDc4LDB4MmMsMHhkOCwweDA3LDB4ZDYsMHgwMiwweGQ1LDB4OTYgfSwKKyAgMTYsIDB4OWM3MCwgMCwgezB4MzIsMHg3OCwweDBkLDB4OTAsMHgwMywweDI3LDB4MDAsMHhmZCwweGEwLDB4MzUsMHg1MCwweDA2LDB4ZDQsMHgwMywweGU1LDB4MDAgfSwKKyAgMTYsIDB4OWM4MCwgMCwgezB4ZmQsMHg0MCwweGIzLDB4NDAsMHgwZiwweDk4LDB4YTMsMHg0NiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWM5MCwgMCwgezB4MzgsMHgxMCwweGUzLDB4YzIsMHg4OCwweDg4LDB4MmUsMHgxNCwweGE4LDB4OGEsMHhjMiwweDIyLDB4YTAsMHhiOCwweGMwLDB4MmMgfSwKKyAgMTYsIDB4OWNhMCwgMCwgezB4MjQsMHg0OCwweDg0LDB4MDIsMHhlMSwweDAwLDB4OTgsMHhjNCwweDIwLDB4M2MsMHgwOCwweDhhLDB4ODIsMHgyMywweDgwLDB4YjggfSwKKyAgMTYsIDB4OWNiMCwgMCwgezB4MDQsMHgyMiwweDIwLDB4MDgsMHg4OCwweDAzLDB4YTIsMHgwMCwweGI4LDB4YTAsMHgyMiwweDAwLDB4MGIsMHg4OCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4OWNjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4YTEsMHgyMCwweDZjLDB4NDAgfSwKKyAgMTYsIDB4OWNkMCwgMCwgezB4MGEsMHgxNCwweDAyLDB4NDQsMHgwNCwweGExLDB4NjgsMHgyYywweDQ4LDB4MDgsMHgxNCwweDAyLDB4YzUsMHgwMCwweDgxLDB4NjAgfSwKKyAgMTYsIDB4OWNlMCwgMCwgezB4MjAsMHg0OCwweDE5LDB4OTAsMHgwMiwweDg1LDB4ODEsMHhiMSwweDQwLDB4MjQsMHg2OCwweDBhLDB4MTIsMHg0MiwweGM0LDB4ODAgfSwKKyAgMTYsIDB4OWNmMCwgMCwgezB4YjksMHgyMCwweDIwLDB4NDAsMHg4YiwweDEwLDB4ODIsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWQwMCwgMCwgezB4MTgsMHgwNSwweGE0LDB4MTAsMHhhOSwweDAwLDB4NmUsMHhjMCwweDBhLDB4MTAsMHgwMiwweDI0LDB4MTQsMHhiOSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4OWQxMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MTIsMHhlNCwweDAwLDB4OTksMHgwMCwweDIyLDB4NDAsMHgwOCwweDgwLDB4MDYsMHhhMCwweDYwLDB4YjkgfSwKKyAgMTYsIDB4OWQyMCwgMCwgezB4MDksMHgyMiwweDYwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgwMiwweDQwLDB4MGIsMHgxMCwweDA2LDB4MDYgfSwKKyAgMTYsIDB4OWQzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4ZTksMHg4MCwweDNlLDB4NDEgfSwKKyAgMTYsIDB4OWQ0MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4NjQsMHgwMCwweGU5LDB4YzAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4OWQ1MCwgMCwgezB4MjIsMHg0MSwweDBkLDB4ODAsMHgwMiwweGEzLDB4MDQsMHhmMSwweDQwLDB4MzYsMHg0MCwweDBlLDB4OTAsMHgwMiwweGU0LDB4MDAgfSwKKyAgMTYsIDB4OWQ2MCwgMCwgezB4ZjEsMHgwMCwweDEyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWQ3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhkOSwweDIyLDB4M2UsMHg0MiwweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhiOSwweGM0LDB4M2MgfSwKKyAgMTYsIDB4OWQ4MCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMiwweGFlLDB4NDAsMHgwZiwweDgwLDB4NGIsMHg2MiwweDEwLDB4ZjkgfSwKKyAgMTYsIDB4OWQ5MCwgMCwgezB4MjAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDIsMHg3ZSwweDQxLDB4MGYsMHg5MCwweDEzLDB4Y2EgfSwKKyAgMTYsIDB4OWRhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHg4MCwweDAwLDB4YzgsMHgwMCwweDM4LDB4MDAgfSwKKyAgMTYsIDB4OWRiMCwgMCwgezB4MGYsMHg4MCwweDIwLDB4ZTAsMHgwMCwweGE4LDB4MjAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDA3LDB4ZTAsMHg4MCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4OWRjMCwgMCwgezB4MzgsMHgwMCwweDBkLDB4ODAsMHg4MywweDIxLDB4MTAsMHhmOCwweDYwLDB4MzIsMHgwMCwweDhlLDB4ODAsMHhiMywweDIwLDB4MDggfSwKKyAgMTYsIDB4OWRkMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWRlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDQsMHg4YSwweDAwLDB4MzMsMHg5MCwweDQzLDB4YTAsMHgyMiwweDI4LDB4MDAsMHg4ZSwweDgwLDB4NzYgfSwKKyAgMTYsIDB4OWRmMCwgMCwgezB4ODAsMHgwOCwweGUxLDB4MDMsMHgxOSwweDAwLDB4ODYsMHg4MCwweDIyLDB4ODAsMHgwZCwweDYwLDB4MDEsMHg3OCwweDAwLDB4YmUgfSwKKyAgMTYsIDB4OWUwMCwgMCwgezB4MDAsMHgzNiwweDgwLDB4MGMsMHhlNCwweDAyLDB4YTgsMHgxMCwweGJlLDB4YTAsMHgyZiwweDgwLDB4MGQsMHhhMCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4OWUxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTEsMHg0YywweDA0LDB4MDMsMHgwNCwweDJjLDB4ZDQgfSwKKyAgMTYsIDB4OWUyMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4NGMsMHgwMSwweGEzLDB4YzQsMHgyMCwweGMwLDB4MjgsMHgzNSwweDAyLDB4ODYsMHgwMCwweDgzLDB4ODAgfSwKKyAgMTYsIDB4OWUzMCwgMCwgezB4MjgsMHhjMCwweDA4LDB4MzgsMHgwNiwweDBlLDB4OTQsMHgzMCwweGMwLDB4YTIsMHhjMCwweDBiLDB4M2MsMHgwMiwweDBjLDB4MDAgfSwKKyAgMTYsIDB4OWU0MCwgMCwgezB4YjMsMHg4MCwweDJjLDB4NDgsMHgwOCwweDMwLDB4MDIsMHg4YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWU1MCwgMCwgezB4YTAsMHgwMSwweDBjLDB4MDQsMHg4ZiwweDgwLDB4MjEsMHhjMSwweDFiLDB4NzIsMHg0MiwweDFlLDB4YzAsMHg4MywweDg4LDB4MjEgfSwKKyAgMTYsIDB4OWU2MCwgMCwgezB4YzAsMHgxOCwweDI4LDB4MDYsMHgxMCwweDIxLDB4ODYsMHgzOCwweDIxLDB4YzAsMHgxOSwweGY3LDB4MDIsMHg1ZCwweGMwLDB4YjQgfSwKKyAgMTYsIDB4OWU3MCwgMCwgezB4NDEsMHgyNywweGQwLDB4MDgsMHg3OCwweGM2LDB4OWMsMHgwMCwweGI3LDB4MDAsMHgyZiwweDYwLDB4MDksMHg3MiwweDAyLDB4MjggfSwKKyAgMTYsIDB4OWU4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAyLDB4YzcsMHg4MCwweDJkLDB4YTAgfSwKKyAgMTYsIDB4OWU5MCwgMCwgezB4MGYsMHgzZSwweDAzLDB4ZmUsMHg4MCwweGE3LDB4ODAsMHhhMSwweGUwLDB4MGMsMHg3OCwweDAyLDB4OTQsMHgwMCwweDg1LDB4YTAgfSwKKyAgMTYsIDB4OWVhMCwgMCwgezB4MzksMHhlNCwweDBjLDB4NzgsMHgxMywweDFlLDB4OTAsMHhiNSwweDg0LDB4MzEsMHhlMCwweDBmLDB4ZjgsMHg4NywweDFlLDB4MDQgfSwKKyAgMTYsIDB4OWViMCwgMCwgezB4ZjcsMHg4MCwweDNkLDB4NjAsMHgwYywweDNiLDB4MDMsMHhhYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWVjMCwgMCwgezB4MDgsMHgxZCwweGFkLDB4ZTQsMHhmYiwweDU0LDB4M2UsMHg4MCwweDBmLDB4YjQsMHgyMywweGVjLDB4MzIsMHhmYiwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OWVkMCwgMCwgezB4ZDgsMHg0ZiwweGEwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZiwweDMwLDB4MzMsMHhlYywweDA0LDB4ZjIgfSwKKyAgMTYsIDB4OWVlMCwgMCwgezB4MDEsMHgzZSwweGMwLDB4MGYsMHhiMiwweDAzLDB4ZmUsMHgxMCwweGZiLDB4NjgsMHgzYywweDQxLDB4MGYsMHhmMCwweDQzLDB4ODIgfSwKKyAgMTYsIDB4OWVmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4Y2YsMHhlNCwweDNmLDB4ZTQgfSwKKyAgMTYsIDB4OWYwMCwgMCwgezB4MGMsMHhmYywweDAzLDB4N2UsMHg4MCwweGNmLDB4ODEsMHgzMywweGZhLDB4MGYsMHhmOCwweDAzLDB4ZjYsMHgwMCwweGZmLDB4ODAgfSwKKyAgMTYsIDB4OWYxMCwgMCwgezB4M2YsMHhlMiwweDBmLDB4NzksMHgwMywweDNlLDB4NDAsMHhmNCwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZTgsMHgwMywweDNlLDB4MDAgfSwKKyAgMTYsIDB4OWYyMCwgMCwgezB4ZmYsMHg4MCwweDMzLDB4NjAsMHgwYywweGY4LDB4ODMsMHg1MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWYzMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhkNywweGEwLDB4MmQsMHhjNCwweDA4LDB4YmEsMHgwMiwweDNjLDB4YTAsMHg4NywweDIwLDB4MjEgfSwKKyAgMTYsIDB4OWY0MCwgMCwgezB4YzAsMHgwZiwweDUyLDB4MDMsMHhkNCwweDAwLDB4YjYsMHgxMCwweDJkLDB4YzAsMHg4YiwweDczLDB4MDMsMHg1YywweDQwLDB4YjQgfSwKKyAgMTYsIDB4OWY1MCwgMCwgezB4YjAsMHgyYiwweDQ4LDB4MjgsMHg0MSwweDAyLDB4MGMsMHgwMCwweGJmLDB4MTgsMHgzNSwweDQ2LDB4MjgsMHg3MiwweDQyLDB4MmEgfSwKKyAgMTYsIDB4OWY2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHg5YywweDAwLDB4ODcsMHg0MSwweDJkLDB4NDQgfSwKKyAgMTYsIDB4OWY3MCwgMCwgezB4MGEsMHg3MywweDAyLDB4OWMsMHhjNCwweDgxLDB4MDAsMHg2ZCwweGM4LDB4OGIsMHg3MCwweDAyLDB4ZDQsMHgwMCwweGI3LDB4MDAgfSwKKyAgMTYsIDB4OWY4MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4ZjAsMHg0NiwweDljLDB4NTUsMHhiNCwweDIwLDB4MjUsMHg0MCwweDE4LDB4NjAsMHg4MiwweDFjLDB4MDAgfSwKKyAgMTYsIDB4OWY5MCwgMCwgezB4YjcsMHgwMCwweDIzLDB4NDAsMHgwOCwweDcwLDB4NDYsMHg0NCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWZhMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDAsMHg5MywweDAwLDB4MmMsMHg0MCwweDBiLDB4YjAsMHgwMiwweDBjLDB4ODIsMHg4MCwweGMwLDB4MjAgfSwKKyAgMTYsIDB4OWZiMCwgMCwgezB4YzAsMHgwYSwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgxYiwweDMwLDB4MDAsMHhjZCwweDAxLDB4YjAgfSwKKyAgMTYsIDB4OWZjMCwgMCwgezB4NDAsMHhhYywweDc4LDB4ODgsMHg4YywweDA2LDB4MGQsMHg2MCwweGIzLDB4NGMsMHgyNCwweDEyLDB4MDgsMHgzMCwweDBhLDB4MTggfSwKKyAgMTYsIDB4OWZkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MTUsMHhiYywweDAwLDB4YzcsMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4OWZlMCwgMCwgezB4MGUsMHhmMCwweDJhLDB4YmYsMHgwMCwweGM4LDB4YzgsMHhiZiwweGMwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwNCwweGJmLDB4MDAgfSwKKyAgMTYsIDB4OWZmMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4YjIsMHgwYSwweGFjLDB4MDAsMHhmOCwweDgwLDB4MzQsMHg0OSwweDBjLDB4YjksMHgwYiwweDNmLDB4MDAgfSwKKyAgMTYsIDB4YTAwMCwgMCwgezB4ZmIsMHhjMCwweDMwLDB4ZjAsMHgwYywweGYwLDB4MDMsMHg2ZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTAxMCwgMCwgezB4ODAsMHgwMCwweGNjLDB4MDAsMHhmYiwweDgwLDB4M2UsMHg0MSwweDJjLDB4YjAsMHgxMywweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTAyMCwgMCwgezB4YzEsMHgwZiwweGEwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHg0MCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MGIsMHg2ZCwweDQwLDB4ZjggfSwKKyAgMTYsIDB4YTAzMCwgMCwgezB4MTAsMHgzYSwweDQwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgxMCwweGZlLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTEgfSwKKyAgMTYsIDB4YTA0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhlYywweDBjLDB4ZGYsMHgwMCwweDNiLDB4ODAgfSwKKyAgMTYsIDB4YTA1MCwgMCwgezB4MGYsMHhmMCwweDBiLDB4M2MsMHgwOCwweGU3LDB4MDgsMHgzMywweGMwLDB4MGIsMHhkMCwweDIzLDB4NzQsMHgwMCwweDU0LDB4MDAgfSwKKyAgMTYsIDB4YTA2MCwgMCwgezB4MzMsMHhjMCwweDBmLDB4ZjAsMHg4MywweGJlLDB4MjAsMHhmZCwweDBjLDB4M2IsMHg2MCwweDJjLDB4ZTAsMHgwMywweDNjLDB4MDAgfSwKKyAgMTYsIDB4YTA3MCwgMCwgezB4Y2YsMHgxMiwweDMzLDB4NTAsMHgwYywweDMwLDB4MDMsMHg4MCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTA4MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDQsMHhhYiwweDAwLDB4MjIsMHhhMCwweDBiLDB4YjAsMHgwNiwweDBjLDB4MDAsMHhhYiwweDQwLDB4MzYgfSwKKyAgMTYsIDB4YTA5MCwgMCwgezB4YzAsMHgwYiwweGE4LDB4MDIsMHg2NiwweDAwLDB4YjgsMHgwMCwweDM2LDB4YzEsMHgwYiwweDM0LDB4NDMsMHhlZSwweDAwLDB4YjIgfSwKKyAgMTYsIDB4YTBhMCwgMCwgezB4MDAsMHgyMiwweDYwLDB4MDgsMHhiNCwweDgyLDB4OGMsMHgwNCwweDhhLDB4MjEsMHgyMiwweDQwLDB4MDgsMHhiMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YTBiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OWIsMHgwMCwweDJhLDB4MjAgfSwKKyAgMTYsIDB4YTBjMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweDg4LDB4YzUsMHgyMiwweGMwLDB4MGIsMHg4OCwweDgyLDB4ZTYsMHgwMSwweGJiLDB4MDggfSwKKyAgMTYsIDB4YTBkMCwgMCwgezB4MjIsMHhjMCwweDBhLDB4YjIsMHg4MiwweGFjLDB4NjAsMHhiOCwweDAyLDB4NGEsMHhjNCwweDA4LDB4YjEsMHgwMiwweDJjLDB4MDAgfSwKKyAgMTYsIDB4YTBlMCwgMCwgezB4ODMsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTBmMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhhYiwweDIwLDB4MjAsMHgwMSwweDBiLDB4MzIsMHgwNiwweDJjLDB4MDAsMHhhMCwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YTEwMCwgMCwgezB4YzAsMHgwOSwweDA0LDB4MjIsMHhjNCwweDAwLDB4YjIsMHgwMCwweDI0LDB4YzEsMHg4YiwweGIwLDB4MDIsMHg0YywweDAwLDB4YjAgfSwKKyAgMTYsIDB4YTExMCwgMCwgezB4MDAsMHg2MiwweGMwLDB4NDgsMHgzMCwweDAyLDB4YWMsMHgxMCwweDgyLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4YTEyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDA4LDB4ZGYsMHgyYSwweDNhLDB4MDAgfSwKKyAgMTYsIDB4YTEzMCwgMCwgezB4MGYsMHhmNSwweDEyLDB4M2MsMHgxMCwweGM5LDB4MDAsMHhhMywweGMwLDB4MGYsMHg4MCwweDUzLDB4ZWMsMHgwMSwweGRhLDB4MDAgfSwKKyAgMTYsIDB4YTE0MCwgMCwgezB4MzMsMHhjMCwweDBlLDB4YjAsMHgwMywweGFjLDB4MDQsMHhmOCwweDcwLDB4M2EsMHhjMCwweDBjLDB4NjAsMHg0MywweDJjLDB4NDIgfSwKKyAgMTYsIDB4YTE1MCwgMCwgezB4Y2QsMHgwMCwweGIyLDB4NDAsMHgyYywweGYwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTE2MCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmYiwweDAxLDB4M2QsMHgwMCwweDBmLDB4YjQsMHgxNywweGZjLDB4MDAsMHgzYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4YTE3MCwgMCwgezB4YzAsMHg0ZiwweGMwLDB4MDMsMHg3NCwweDA4LDB4ZmUsMHgwMCwweDNmLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhmYywweDA4LDB4ZjggfSwKKyAgMTYsIDB4YTE4MCwgMCwgezB4MzAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwNCwweGZjLDB4MDAsMHgzZCwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4YTE5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNCwweDkwLDB4ZWYsMHgwMCwweDNmLDB4ZDggfSwKKyAgMTYsIDB4YTFhMCwgMCwgezB4MGUsMHhmMywweDAzLDB4MmMsMHgwMSwweGQ0LDB4ODAsMHgzNywweGNjLDB4MGQsMHg4OSwweDQzLDB4MTIsMHg1MCwweGVjLDB4MmMgfSwKKyAgMTYsIDB4YTFiMCwgMCwgezB4MzIsMHgwNSwweDBkLDB4YjAsMHg1MywweDNjLDB4ZDQsMHhjNSwweDk0LDB4N2YsMHhhMCwweDhmLDB4ZjAsMHg0MywweDMwLDB4MDAgfSwKKyAgMTYsIDB4YTFjMCwgMCwgezB4ZGMsMHgwMCwweDMzLDB4MDAsMHgwYywweDQ4LDB4MDcsMHhmMCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTFkMCwgMCwgezB4ODAsMHgxMCwweGU2LDB4NDAsMHg4YiwweDcwLDB4MmYsMHhkYywweDA4LDB4ZjcsMHgwMiwweDBjLDB4ODAsMHg4YSwweDIwLDB4MDAgfSwKKyAgMTYsIDB4YTFlMCwgMCwgezB4YzgsMHg0YSwweDIyLDB4MDIsMHhhMCwweDAwLDB4OGEsMHg0OCwweDIyLDB4NTgsMHg4OCwweGZkLDB4MDIsMHhhZCwweDAyLDB4YTkgfSwKKyAgMTYsIDB4YTFmMCwgMCwgezB4MjAsMHgxZSwweGEwLDB4MDMsMHg4MCwweDAyLDB4MmMsMHgwNCwweDhiLDB4MDAsMHgyMiwweGMwLDB4NGMsMHg4OCwweDA3LDB4NjAgfSwKKyAgMTYsIDB4YTIwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDAwLDB4MjMsMHgyYywweDJjLDB4YzkgfSwKKyAgMTYsIDB4YTIxMCwgMCwgezB4MDIsMHgzMCwweDAyLDB4MGMsMHg2OCwweGEwLDB4MjgsMHgyYywweGQwLDB4MDksMHgxMiwweDAyLDB4ODQsMHgwMCwweGEwLDB4MjEgfSwKKyAgMTYsIDB4YTIyMCwgMCwgezB4MjAsMHgxOCwweDE5LDB4MzAsMHgyMiwweDgwLDB4ZDAsMHg4MywweDA2LDB4MGMsMHhhMCwweDBiLDB4YjAsMHgwNiwweDAwLDB4MTIgfSwKKyAgMTYsIDB4YTIzMCwgMCwgezB4YTAsMHgwMCwweDIwLDB4MDAsMHgyOSwweDAwLDB4MGUsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTI0MCwgMCwgezB4YzAsMHgxMSwweGE4LDB4MzAsMHg4YiwweDAwLDB4MmUsMHhjMCwweDRhLDB4MzAsMHgwYSwweDJjLDB4MTQsMHhhMCwweDgwLDB4MGEgfSwKKyAgMTYsIDB4YTI1MCwgMCwgezB4YzEsMHgwOCwweDg4LDB4ODYsMHg4NywweDAwLDB4ODMsMHgwMCwweDIyLDB4NDksMHgwOCwweGIwLDB4MDYsMHhhMCwweDQwLDB4YWIgfSwKKyAgMTYsIDB4YTI2MCwgMCwgezB4MjAsMHgyMiwweDIwLDB4MGIsMHg4MCwweDBhLDB4MGMsMHgwNCwweGFiLDB4MDIsMHgyMiwweGMwLDB4ODgsMHg4MCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4YTI3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlZiwweDQwLDB4ZWIsMHgwNiwweDNlLDB4YzAgfSwKKyAgMTYsIDB4YTI4MCwgMCwgezB4MGUsMHhiMCwweDAzLDB4MmMsMHgwMiwweGY5LDB4YTAsMHgzZSwweGMwLDB4MGQsMHg4YywweDAzLDB4YWEsMHgxMCwweGU5LDB4NDAgfSwKKyAgMTYsIDB4YTI5MCwgMCwgezB4YjIsMHg0OCwweDBkLDB4YjAsMHg0MywweGFkLDB4MDAsMHhjYiwweDg2LDB4MmUsMHgyMCwweDBmLDB4MzAsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTJhMCwgMCwgezB4ZjksMHg4MCwweDMyLDB4YzAsMHgwZCwweDBjLDB4YzIsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTJiMCwgMCwgezB4ZTAsMHgwMSwweDk0LDB4MDAsMHhmZiwweDAwLDB4M2QsMHhjMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhkZiwweDAwLDB4MzcgfSwKKyAgMTYsIDB4YTJjMCwgMCwgezB4YzAsMHgwZiwweGUwLDB4MDMsMHhmMCwweDAwLDB4ZmUsMHgyMCwweDNmLDB4NDAsMHgwZiwweDcwLDB4MDMsMHhmZSwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YTJkMCwgMCwgezB4ODIsMHg3ZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZjksMHgwNCwweGRlLDB4MjAsMHhiZCwweDAwLDB4MGYsMHhkOSwweDBiLDB4N2MgfSwKKyAgMTYsIDB4YTJlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAxLDB4Y2IsMHgwMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4YTJmMCwgMCwgezB4MmMsMHhiMCwweDBiLDB4MmMsMHgwMCwweGU4LDB4NDAsMHgzZSwweGMwLDB4MGYsMHg5NCwweDA3LDB4MjksMHgwMCwweGM5LDB4NDAgfSwKKyAgMTYsIDB4YTMwMCwgMCwgezB4YjIsMHhjMCwweDBmLDB4YjAsMHgwMywweDAxLDB4MDIsMHhjYiwweDAwLDB4MzIsMHgwNCwweDRmLDB4ZjAsMHg0MywweDM0LDB4YzAgfSwKKyAgMTYsIDB4YTMxMCwgMCwgezB4YjUsMHgxYSwweDNmLDB4YzEsMHgwZiwweDgwLDB4OTMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTMyMCwgMCwgezB4YzgsMHgwNSwweDI4LDB4MDAsMHg4ZiwweDAwLDB4MmYsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDNjLDB4MDQsMHhkOCwweDAwLDB4MmIgfSwKKyAgMTYsIDB4YTMzMCwgMCwgezB4YzAsMHgwYywweDgwLDB4NDUsMHg2MCwweDAwLDB4N2IsMHg1OCwweDIyLDB4YzgsMHgwYiwweGZhLDB4MDEsMHg2MSwweDQwLDB4OGIgfSwKKyAgMTYsIDB4YTM0MCwgMCwgezB4MDAsMHgzMiwweDA0LDB4NGIsMHhjZSwweDAyLDB4MjgsMHgwMCwweDNhLDB4NDAsMHgyZSwweDA3LDB4MGIsMHg5MCwweDAyLDB4MjYgfSwKKyAgMTYsIDB4YTM1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4ODMsMHgwMSwweDRjLDB4YzAgfSwKKyAgMTYsIDB4YTM2MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4ZWMsMHgxMCwweDkwLDB4MDAsMHgyYSwweGMwLDB4MGEsMHg4MCwweDA2LDB4YzAsMHgwNCwweDgzLDB4MDQgfSwKKyAgMTYsIDB4YTM3MCwgMCwgezB4YTIsMHg4OSwweDE5LDB4MzAsMHgwNiwweGNjLDB4MDAsMHg4MywweDAwLDB4MjAsMHg5MCwweDBiLDB4MzAsMHhjMiwweDQ4LDB4MDAgfSwKKyAgMTYsIDB4YTM4MCwgMCwgezB4YjIsMHg0MCwweDI0LDB4MjAsMHgwYiwweDA5LDB4MDAsMHhiOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTM5MCwgMCwgezB4MjAsMHgwMSwweDA2LDB4MDQsMHg4NywweGE0LDB4MmQsMHhlMCwweDA5LDB4MzgsMHgwMiwweGRlLDB4MDAsMHg5ZSwweDgxLDB4MjkgfSwKKyAgMTYsIDB4YTNhMCwgMCwgezB4ZTAsMHgwOCwweDc4LDB4NTIsMHhmYSwweGMwLDB4OTYsMHg4MCwweDAxLDB4YTAsMHg4YiwweDNhLDB4MjIsMHhjZSwweDQwLDB4OGYgfSwKKyAgMTYsIDB4YTNiMCwgMCwgezB4YjAsMHgyNSwweGEwLDB4MGIsMHgwOCwweDAyLDB4NTYsMHgwOCwweGI1LDB4OTAsMHgyZCwweGU0LDB4NGIsMHhkOCwweDIyLDB4MGMgfSwKKyAgMTYsIDB4YTNjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAyLDB4ODMsMHg4MCwweDJlLDB4ZTggfSwKKyAgMTYsIDB4YTNkMCwgMCwgezB4MGIsMHgzOCwweDEzLDB4Y2UsMHg0MSwweGQzLDB4MTAsMHgyOCwweGMwLDB4MGUsMHgzYSwweDAyLDB4YzYsMHgwOCwweDRiLDB4NDAgfSwKKyAgMTYsIDB4YTNlMCwgMCwgezB4MzAsMHg2MCwweDBkLDB4M2IsMHgyNywweGNmLDB4YzQsMHhjMywweGEwLDB4MzAsMHgwMCwweDBmLDB4MzAsMHg0MywweDQ4LDB4NDAgfSwKKyAgMTYsIDB4YTNmMCwgMCwgezB4ZjIsMHgwMCwweDNjLDB4MDQsMHgwZiwweDAyLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTQwMCwgMCwgezB4NDAsMHgxZCwweGI4LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjNCwweDBlLDB4ZjEsMHgwMywweDNjLDB4MDAsMHhmZiwweDAxLDB4MzMgfSwKKyAgMTYsIDB4YTQxMCwgMCwgezB4YzAsMHg0ZCwweGIxLDB4MDcsMHg3YywweDkwLDB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwMywweGYxLDB4MDMsMHg3MCwweDAwLDB4ZmIgfSwKKyAgMTYsIDB4YTQyMCwgMCwgezB4MTAsMHgzYiwweDAwLDB4MGYsMHhjMCwweDBiLDB4YjQsMHgwMCwweGZkLDB4MDAsMHgzZiwweGM0LDB4MGYsMHhkMCwweDAzLDB4OTAgfSwKKyAgMTYsIDB4YTQzMCwgMCwgezB4MDIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDA0LDB4ZmIsMHg4NCwweDNhLDB4YzIgfSwKKyAgMTYsIDB4YTQ0MCwgMCwgezB4NGMsMHhiNCwweDkzLDB4MmMsMHgwNCwweGU5LDB4MDAsMHgzYSwweGM0LDB4OGQsMHgwOCwweDAzLDB4MmUsMHgwMCwweGNiLDB4MDEgfSwKKyAgMTYsIDB4YTQ1MCwgMCwgezB4MzIsMHg4MCwweDhmLDB4YjIsMHg4MywweGVjLDB4MDAsMHhjYiwweDgwLDB4MzIsMHgwMCwweDBmLDB4ZjksMHgwMywweDNjLDB4MTAgfSwKKyAgMTYsIDB4YTQ2MCwgMCwgezB4ZGYsMHg4MSwweGIzLDB4ZTAsMHg4YywweGEwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTQ3MCwgMCwgezB4NDgsMHgxMSwweDk0LDB4MDgsMHhiNywweDA0LDB4MjQsMHhjOCwweDFhLDB4MzAsMHg0YSwweDFkLDB4MDAsMHhiNywweDAxLDB4MmQgfSwKKyAgMTYsIDB4YTQ4MCwgMCwgezB4YzAsMHg4OCwweDcwLDB4MDYsMHgxYywweDAwLDB4ODIsMHgwMCwweDIxLDB4ODAsMHg0YiwweDc2LDB4MTIsMHhkYywweDAwLDB4ODcgfSwKKyAgMTYsIDB4YTQ5MCwgMCwgezB4MDAsMHgyOSwweDQwLDB4OGIsMHg0MCwweDAyLDB4MTAsMHgwMCwweGJjLDB4MDAsMHgyMCwweDAxLDB4MjgsMHg3MCwweDAzLDB4YjIgfSwKKyAgMTYsIDB4YTRhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDAwLDB4YjMsMHg5MCwweDJkLDB4ZTQgfSwKKyAgMTYsIDB4YTRiMCwgMCwgezB4MDksMHg3OSwweDAyLDB4MWUsMHg4MCwweGE3LDB4ODAsMHgyYywweGU4LDB4MTksMHhmOCwweDEyLDB4NWUsMHgwMSwweDg3LDB4ODAgfSwKKyAgMTYsIDB4YTRjMCwgMCwgezB4MjUsMHhlMCwweDRiLDB4NzgsMHgwNiwweGQyLDB4MDAsMHg5NywweDgwLDB4MjEsMHg2MiwweDBiLDB4M2EsMHgwMiwweDFlLDB4MDAgfSwKKyAgMTYsIDB4YTRkMCwgMCwgezB4YjcsMHg4NiwweDI5LDB4ZjAsMHgwOCwweDY4LDB4MDYsMHhlMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTRlMCwgMCwgezB4NDgsMHgxNCwweGNmLDB4YzAsMHhiMywweDAwLDB4MjQsMHhjMCwweDhhLDB4MzAsMHgzMiwweDBjLDB4MDAsMHhiMywweDA4LDB4MmMgfSwKKyAgMTYsIDB4YTRmMCwgMCwgezB4YzAsMHgwOCwweDMwLDB4MTIsMHgwZSwweDIwLDB4ODMsMHgwMCwweDI0LDB4ZjEsMHgwYiwweDMwLDB4MDYsMHhjZSwweDAwLDB4ODMgfSwKKyAgMTYsIDB4YTUwMCwgMCwgezB4OTAsMHgyOCwweDYwLDB4MGIsMHgwMCwweDJhLDB4MjEsMHg4MCwweGIwLDB4MDgsMHgyOCwweDAwLDB4MDgsMHgzNywweDAyLDB4OTIgfSwKKyAgMTYsIDB4YTUxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4YTUyMCwgMCwgezB4NGQsMHhhMCwweDAzLDB4MjgsMHgwMCwweGVlLDB4NDEsMHgzZSwweDgwLDB4MGQsMHhlMCwweDAzLDB4NzgsMHgwMCwweDhlLDB4NDAgfSwKKyAgMTYsIDB4YTUzMCwgMCwgezB4MjcsMHhhOCwweDBiLDB4YTAsMHgwMywweGZiLDB4MDIsMHhjYSwweDgyLDB4MzMsMHhhMCwweDBmLDB4YTAsMHgxMywweDI5LDB4MDAgfSwKKyAgMTYsIDB4YTU0MCwgMCwgezB4ZmEsMHg0MCwweDNhLDB4ODAsMHgwYywweDZjLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTU1MCwgMCwgezB4NDgsMHgwMCwweGMwLDB4MDAsMHhmOCwweDAwLDB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDgsMHhmOCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTU2MCwgMCwgezB4MDAsMHg4ZiwweDgwLDB4MjMsMHhhMCwweDQyLDB4ZjgsMHgwOSwweGJhLDB4MTAsMHg0ZiwweDgwLDB4MDMsMHhlMCwweDYwLDB4ZjggfSwKKyAgMTYsIDB4YTU3MCwgMCwgezB4MDAsMHgzZSwweDIwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgyNywweDAwLDB4OGYsMHg4MCwweDAzLDB4OTIgfSwKKyAgMTYsIDB4YTU4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNSwweDAwLDB4ODksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4YTU5MCwgMCwgezB4NmUsMHg5MCwweDAzLDB4YTQsMHgwOCwweGM5LDB4MDAsMHgzYywweDQwLDB4MGQsMHg5MCwweDAzLDB4MjQsMHgxMCwweGY5LDB4YTAgfSwKKyAgMTYsIDB4YTVhMCwgMCwgezB4MzIsMHg0MiwweDBjLDB4OTAsMHgxMywweGM0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4NDAgfSwKKyAgMTYsIDB4YTViMCwgMCwgezB4YzksMHgyMCwweDNlLDB4NTIsMHhjZiwweDkwLDB4MDksMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTVjMCwgMCwgezB4ODAsMHgwNCwweDY2LDB4MDAsMHg4OSwweDA0LDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhkOSwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YTVkMCwgMCwgezB4NDEsMHgwOCwweDkwLDB4MDUsMHhhNCwweDAwLDB4YjksMHg0MCwweGEyLDB4NDAsMHgwZCwweDkwLDB4MDIsMHhlNSwweDQ2LDB4ODkgfSwKKyAgMTYsIDB4YTVlMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDEyLDB4ZTUsMHgwMCwweGE5LDB4YzgsMHgyZSwweDYxLDB4OGIsMHg5NCwweDQyLDB4MjAgfSwKKyAgMTYsIDB4YTVmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YTksMHgwMCwweDZjLDB4NDAgfSwKKyAgMTYsIDB4YTYwMCwgMCwgezB4NDgsMHgxMCwweDIyLDB4ODQsMHgwMywweGE5LDB4MDAsMHgyZSwweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwNCwweGIxLDB4MDggfSwKKyAgMTYsIDB4YTYxMCwgMCwgezB4MjgsMHg0MCwweDE4LDB4OTgsMHgwMiwweGU1LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGY0LDB4MjAgfSwKKyAgMTYsIDB4YTYyMCwgMCwgezB4OGQsMHgwMCwweDJmLDB4NDAsMHgwYiwweDk0LDB4NDIsMHg4NiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTYzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhhMSwweDI0LDB4MmMsMHg0OCwweDE4LDB4MTIsMHgwMiwweDA0LDB4ODAsMHhhMSwweDAwLDB4MjggfSwKKyAgMTYsIDB4YTY0MCwgMCwgezB4NDgsMHgwOCwweDEwLDB4MDIsMHg4NCwweDAwLDB4OTEsMHgyMCwweDIwLDB4NDgsMHgwOSwweDEyLDB4MDIsMHhjNCwweDk0LDB4ODEgfSwKKyAgMTYsIDB4YTY1MCwgMCwgezB4MDAsMHgyYywweDYxLDB4MGIsMHg1YSwweDgyLDB4ZDQsMHhhMCwweGE1LDB4MjgsMHgyZCwweDRhLDB4MGIsMHg5MCwweDAyLDB4ODIgfSwKKyAgMTYsIDB4YTY2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAyLDB4ZTgsMHg1MCwweDJlLDB4MTQgfSwKKyAgMTYsIDB4YTY3MCwgMCwgezB4MGUsMHg4NSwweDAzLDB4YTEsMHg0MCwweGE4LDB4NTAsMHgzZSwweDE0LDB4MGQsMHg4NSwweDAxLDB4ODEsMHg0MCwweGY4LDB4NTIgfSwKKyAgMTYsIDB4YTY4MCwgMCwgezB4MzIsMHg5NCwweDBjLDB4ODAsMHgxMywweGMxLDB4NDIsMHhjMCwweDUxLDB4M2UsMHgwMCwweDhmLDB4ODIsMHgwMywweGUwLDB4ODAgfSwKKyAgMTYsIDB4YTY5MCwgMCwgezB4YzgsMHgyMCwweDNmLDB4MDgsMHgwZiwweDgwLDB4MDMsMHhhZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTZhMCwgMCwgezB4OTgsMHgxOSwweGY0LDB4NTAsMHhkOSwweDExLDB4M2UsMHg0NCwweDhmLDB4OTEsMHg0MywweGU0LDB4NDAsMHhkZCwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YTZiMCwgMCwgezB4NDQsMHg0ZiwweGQwLDB4MjcsMHhiNCwweDAwLDB4ZmQsMHgxMiwweDNmLDB4NDQsMHg0ZiwweDkxLDB4NDMsMHhmNCwweDQwLDB4ZmQgfSwKKyAgMTYsIDB4YTZjMCwgMCwgezB4MDAsMHgzZiwweDQxLDB4MGYsMHg5MiwweDgzLDB4ZTQsMHhhMCwweGY5LDB4MjgsMHgzZSwweDRhLDB4MGYsMHhkMCwweDAzLDB4NjYgfSwKKyAgMTYsIDB4YTZkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhmNiwweDgwLDB4ZTksMHhjMCwweDNlLDB4NzggfSwKKyAgMTYsIDB4YTZlMCwgMCwgezB4OGYsMHg5YiwweDAzLDB4YTcsMHg4MCwweGM5LDB4NDAsMHgzNiwweDc4LDB4MGYsMHgxMCwweDIzLDB4ZTUsMHgwNCwweGRkLDB4YTQgfSwKKyAgMTYsIDB4YTZmMCwgMCwgezB4MzMsMHg2MiwweDBmLDB4ZGEsMHgwMywweGY2LDB4NjAsMHhjOSwweDEwLDB4MzMsMHg0MCwweDBlLDB4OTgsMHg5MywweGU2LDB4MzAgfSwKKyAgMTYsIDB4YTcwMCwgMCwgezB4YzksMHhjOSwweDMyLDB4NzgsMHg4YywweGQwLDB4MGIsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTcxMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDAsMHg4OCwweGUyLDB4MmUsMHgzMCwweDBiLDB4ODgsMHg0MiwweDIzLDB4NDAsMHhhMCwweGExLDB4MjIgfSwKKyAgMTYsIDB4YTcyMCwgMCwgezB4MzgsMHgwYiwweDhhLDB4MDIsMHhlMiwweDgwLDB4YWEsMHhlMCwweDIyLDB4MzAsMHgwYiwweDgwLDB4MjMsMHhhYiwweDAyLDB4ODggfSwKKyAgMTYsIDB4YTczMCwgMCwgezB4YTAsMHgyYSwweDAwLDB4MGIsMHg4YywweDAyLDB4ZTMsMHgwMCwweDg4LDB4ZTAsMHgyMywweDM4LDB4MDgsMHg4MCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4YTc0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YTEsMHg0NCwweDI4LDB4NTggfSwKKyAgMTYsIDB4YTc1MCwgMCwgezB4NDMsMHgxNiwweDIyLDB4ODQsMHg4MSwweDgxLDB4MjAsMHgyYywweDU4LDB4NDksMHgxMCwweDgwLDB4YzQsMHg4MSwweDkxLDB4NDggfSwKKyAgMTYsIDB4YTc2MCwgMCwgezB4NmMsMHg0YSwweDBiLDB4MTQsMHgwMiwweDQ0LDB4ODQsMHg4MSwweDAxLDB4NjAsMHg0MCwweDBhLDB4NTIsMHg4NiwweGQ0LDB4YTAgfSwKKyAgMTYsIDB4YTc3MCwgMCwgezB4ODUsMHgwMCwweGExLDB4NTAsMHg2OCwweDkwLDB4MDYsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTc4MCwgMCwgezB4MTgsMHgwNSwweGE2LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA0LDB4MDAsMHhhOSwweDYwLDB4MjIgfSwKKyAgMTYsIDB4YTc5MCwgMCwgezB4NDAsMHgwYiwweDk1LDB4MDIsMHhlNCwweDEwLDB4YjEsMHgwMCwweDRlLDB4NDAsMHgwYiwweDkwLDB4NjYsMHhhYywweDgwLDB4ODkgfSwKKyAgMTYsIDB4YTdhMCwgMCwgezB4MDAsMHgyYSwweDYwLDB4MGIsMHg5MCwweDUyLDB4ZjQsMHgwMCwweDg1LDB4MDAsMHgyMSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4YTdiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNiwweDIwLDB4ZTksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4YTdjMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YTQsMHgxMCwweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHg5NCwweDAxLDB4ZTUsMHgyMCwweGQ5LDB4NDAgfSwKKyAgMTYsIDB4YTdkMCwgMCwgezB4YmEsMHg2OCwweDhmLDB4OTAsMHgwNywweGU2LDB4MDAsMHhjOSwweDEwLDB4MzIsMHg2MiwweDBlLDB4OTAsMHgwMiwweGU0LDB4MTggfSwKKyAgMTYsIDB4YTdlMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTdmMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDA0LDB4M2UsMHg0MCwweDBiLDB4OTAsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTgwMCwgMCwgezB4NDAsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMiwweDcyLDB4NjgsMHgwZiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YTgxMCwgMCwgezB4MDEsMHgzZSwweDQyLDB4MGYsMHg5MCwweDAzLDB4YzQsMHgwMiwweGY5LDB4MDQsMHgzZSwweDQwLDB4NGYsMHg5MCwweDAzLDB4MWEgfSwKKyAgMTYsIDB4YTgyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHg4MCwweDAyLDB4YzgsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YTgzMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGM4LDB4NDAsMHgzNiwweDAwLDB4MGYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGQ4LDB4NTAgfSwKKyAgMTYsIDB4YTg0MCwgMCwgezB4YjIsMHgxMCwweDhjLDB4ODEsMHgwMywweGMxLDB4MjAsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YzAsMHgxMywweGYwLDB4MDQgfSwKKyAgMTYsIDB4YTg1MCwgMCwgezB4NGMsMHgwMCwweDNmLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTg2MCwgMCwgezB4MjgsMHgxNSwweDJhLDB4MDAsMHg4YSwweDA0LDB4MjIsMHg4MSwweDI4LDB4YTAsMHgxMiwweDI4LDB4MDAsMHg4YSwweDAxLDB4MzYgfSwKKyAgMTYsIDB4YTg3MCwgMCwgezB4ODAsMHgwYiwweGEwLDB4MTAsMHgyOCwweDEwLDB4Y2UsMHgwMSwweDIzLDB4ODEsMHgwYywweGE4LDB4MTIsMHhmYiwweDAwLDB4OGEgfSwKKyAgMTYsIDB4YTg4MCwgMCwgezB4MDEsMHgzYiwweDgwLDB4ODMsMHhhMCwweDQyLDB4ZTgsMHgxMCwweDhhLDB4MDAsMHgyZiwweDgwLDB4MGIsMHg2MCwweDQyLDB4MGEgfSwKKyAgMTYsIDB4YTg5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHgwMCwweGEwLDB4YzAgfSwKKyAgMTYsIDB4YThhMCwgMCwgezB4MTgsMHhiMCwweDAwLDB4Y2MsMHgwMCwweDliLDB4MDAsMHgyNCwweGMwLDB4MGIsMHgzMCwweDA2LDB4NmMsMHgwMCwweGEzLDB4MDggfSwKKyAgMTYsIDB4YThiMCwgMCwgezB4MjgsMHhjOCwweDA5LDB4MzAsMHgwMiwweGNjLDB4NDMsMHg4YiwweDAwLDB4MmMsMHg4MCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDIgfSwKKyAgMTYsIDB4YThjMCwgMCwgezB4ODMsMHgwMSwweDJjLDB4YzAsMHg0YiwweDMwLDB4MDAsMHg0YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YThkMCwgMCwgezB4YTAsMHgwMSwweDBjLDB4MjQsMHg4NywweDk0LDB4MjEsMHhlNCwweDE4LDB4MzEsMHgwMiwweGRjLDB4ODAsMHg5NywweDEwLDB4MjUgfSwKKyAgMTYsIDB4YThlMCwgMCwgezB4Y2QsMHgwYiwweGYyLDB4MDIsMHg3YywweDAwLDB4YTAsMHgwMCwweDI4LDB4ZTAsMHgxOCwweDcwLDB4MDIsMHhkYywweDAxLDB4ODcgfSwKKyAgMTYsIDB4YThmMCwgMCwgezB4MzQsMHgyOSwweDQwLDB4MDksMHg0MCwweDAyLDB4ZDAsMHgwNCwweDg0LDB4MDQsMHgyZCwweDAwLDB4NGIsMHhkMCwweDIyLDB4NjggfSwKKyAgMTYsIDB4YTkwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxNiwweDAwLDB4Y2YsMHhhMCwweDcwLDB4ZTkgfSwKKyAgMTYsIDB4YTkxMCwgMCwgezB4MTgsMHg3YiwweDAzLDB4ZmYsMHg0MCwweDk3LDB4YTAsMHgzNSwweGU4LDB4MGYsMHg3NCwweDAyLDB4NWUsMHgyMCwweGU0LDB4ODAgfSwKKyAgMTYsIDB4YTkyMCwgMCwgezB4MzksMHhhMCwweDJkLDB4NzgsMHgwMywweGZlLDB4MDAsMHhjNywweDgwLDB4M2QsMHhlMCwweDVmLDB4NjgsMHg0MywweGMyLDB4MDAgfSwKKyAgMTYsIDB4YTkzMCwgMCwgezB4YzQsMHg4NCwweDFkLDB4NjAsMHgwZiwweDc4LDB4MDMsMHg2YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTk0MCwgMCwgezB4MDgsMHgwZCwweGE0LDB4MDAsMHgzYiwweDAwLDB4MmUsMHhkOCwweDBmLDB4YjQsMHgwMywweDJkLDB4OGEsMHhlYiwweDYyLDB4M2EgfSwKKyAgMTYsIDB4YTk1MCwgMCwgezB4ZDAsMHgwZiwweGIyLDB4ODcsMHgwYywweGQwLDB4ZDgsMHgwMCwweDMyLDB4YzAsMHg0ZiwweDkwLDB4NDMsMHhlYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4YTk2MCwgMCwgezB4MDgsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDQsMHgzZiwweDgwLDB4MGYsMHgwMCwweDJiLDB4ODIgfSwKKyAgMTYsIDB4YTk3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4ZmYsMHhhMCwweDNlLDB4ZjQgfSwKKyAgMTYsIDB4YTk4MCwgMCwgezB4MGUsMHhiOCwweDAzLDB4ZWUsMHgwOCwweDRiLDB4ZjAsMHg3ZiwweGY0LDB4MGMsMHhmOSwweDIzLDB4ZWUsMHg0OCwweDc4LDB4OTAgfSwKKyAgMTYsIDB4YTk5MCwgMCwgezB4MzIsMHhlNCwweDBjLDB4ZjksMHgwMywweGZlLDB4MDAsMHhmZiwweDgwLDB4M2YsMHhlNCwweDFjLDB4NzksMHgwMywweDJlLDB4NDAgfSwKKyAgMTYsIDB4YTlhMCwgMCwgezB4ZmYsMHg4MCwweDMzLDB4ZTAsMHgyYywweDc4LDB4MDcsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTliMCwgMCwgezB4YTgsMHgxMSwweDk0LDB4MDAsMHhiMywweDAwLDB4MGMsMHhlNSwweDBiLDB4MzgsMHgwMiwweGZlLDB4ODAsMHg4ZiwweDgwLDB4NjEgfSwKKyAgMTYsIDB4YTljMCwgMCwgezB4YzQsMHgyOCwweDc4LDB4MDAsMHg0ZSwweDAwLDB4ZjQsMHg4NCwweDI1LDB4YTgsMHgwYywweDcwLDB4MDIsMHhjYywweDA0LDB4YjMgfSwKKyAgMTYsIDB4YTlkMCwgMCwgezB4OTAsMHgyNSwweDQwLDB4MGMsMHg0MSwweDgzLDB4NTIsMHg0MCwweGI0LDB4MTAsMHhhMywweDAwLDB4MGMsMHg1MiwweDAzLDB4NmEgfSwKKyAgMTYsIDB4YTllMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDAwLDB4YjcsMHgyMSwweDZkLDB4YzggfSwKKyAgMTYsIDB4YTlmMCwgMCwgezB4NGIsMHg3MCwweDAyLDB4ZGMsMHg0MiwweGE3LDB4MzEsMHgyOSwweGM0LDB4MDgsMHg3MiwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MjggfSwKKyAgMTYsIDB4YWEwMCwgMCwgezB4MjQsMHg4MCwweDA4LDB4NzAsMHgwNiwweGQ0LDB4MjAsMHhiNywweDAxLDB4MmQsMHhjMSwweDA4LDB4NjAsMHgwMiwweDUwLDB4ODAgfSwKKyAgMTYsIDB4YWExMCwgMCwgezB4YjQsMHgwOCwweDIxLDB4NjIsMHgwOSwweDc0LDB4MDYsMHg4MCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWEyMCwgMCwgezB4MjAsMHgxNCwweGM3LDB4MDQsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4YjAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAyLDB4NjAgfSwKKyAgMTYsIDB4YWEzMCwgMCwgezB4YzAsMHgwOCwweDM4LDB4MDIsMHg0ZSwweDQ0LDB4YTAsMHhjMCwweDI0LDB4OTEsMHgwOCwweDMwLDB4MDIsMHhjMCwweDAwLDB4YjMgfSwKKyAgMTYsIDB4YWE0MCwgMCwgezB4MDAsMHgyNCwweDYwLDB4MDgsMHgxYywweDAyLDB4NGMsMHg4OCwweGIzLDB4YzAsMHgyMCwweGEwLDB4MDgsMHgwMCwweDBhLDB4ODggfSwKKyAgMTYsIDB4YWE1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZmYsMHgwMCwweDJmLDB4YzAgfSwKKyAgMTYsIDB4YWE2MCwgMCwgezB4NGYsMHhmMCwweDEzLDB4ZmMsMHgwOCwweGU3LDB4OGEsMHgzZiwweGMwLDB4MGMsMHhmNSwweGMyLDB4ZmUsMHgxMCwweGJiLDB4YzAgfSwKKyAgMTYsIDB4YWE3MCwgMCwgezB4MzIsMHhkNCwweDBjLDB4MzAsMHgxMywweGUzLDB4MDQsMHhiZiwweDAwLDB4MmUsMHg2MiwweDA4LDB4YjksMHgwMiwweDZlLDB4MDAgfSwKKyAgMTYsIDB4YWE4MCwgMCwgezB4ZmIsMHgwMSwweDMyLDB4YTQsMHg0ZCwweDk0LDB4MDIsMHhhYiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWE5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4NjAsMHhmYiwweDAwLDB4MWUsMHhjMCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHg1YiwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YWFhMCwgMCwgezB4YzAsMHgwZiwweGIwLDB4NDEsMHhlYywweDAwLDB4N2IsMHg0NSwweGJhLDB4NDAsMHgyZSwweGIwLDB4MTUsMHhlMCwweDAxLDB4ZmIgfSwKKyAgMTYsIDB4YWFiMCwgMCwgezB4MDAsMHgzZSwweDUwLDB4MGUsMHhjMCwweDAzLDB4ZjAsMHg0MCwweGZjLDB4MjAsMHgzZiwweDUwLDB4OGYsMHg5MCwweDAxLDB4NjAgfSwKKyAgMTYsIDB4YWFjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4YWFkMCwgMCwgezB4OGYsMHhmMCwweDAzLDB4MWMsMHgwMiwweGNmLDB4MDAsMHgzNiwweGMwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHgwMCwweDdmLDB4MmEgfSwKKyAgMTYsIDB4YWFlMCwgMCwgezB4M2YsMHg4MCwweDBmLDB4ZjgsMHgxMywweDkwLDB4MjEsMHhjZiwweDAwLDB4M2YsMHg2MiwweDBjLDB4ZTAsMHgwMywweDMwLDB4MDAgfSwKKyAgMTYsIDB4YWFmMCwgMCwgezB4ZjgsMHgwMCwweDNmLDB4MDAsMHgwZiwweGQwLDB4MDMsMHg4MCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWIwMCwgMCwgezB4ODEsMHgwNCwweDY0LDB4MTEsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhkYiwweDA0LDB4MzIgfSwKKyAgMTYsIDB4YWIxMCwgMCwgezB4YzAsMHgwZSwweGIwLDB4MDIsMHhlYywweDAwLDB4YmIsMHg4NCwweDJlLDB4NDAsMHgwYiwweGI5LDB4NDIsMHgyMiwweDQyLDB4OGIgfSwKKyAgMTYsIDB4YWIyMCwgMCwgezB4MDEsMHgyYywweDcyLDB4MGEsMHg5MCwweDQyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMyLDB4OGYsMHg4OCwweDA2LDB4ZTAgfSwKKyAgMTYsIDB4YWIzMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyNCwweDAwLDB4YmIsMHgwMCwweDZlLDB4YzAgfSwKKyAgMTYsIDB4YWI0MCwgMCwgezB4NDgsMHhiMCwweDQyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyNiwweGMwLDB4MGEsMHhiMCwweDEyLDB4ZWMsMHgwMCwweGJiLDB4NDAgfSwKKyAgMTYsIDB4YWI1MCwgMCwgezB4MmUsMHhjOCwweDBiLDB4YjAsMHgxMiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MmUsMHg0OCwweDBhLDB4MzAsMHgwMiwweDZjLDB4MDAgfSwKKyAgMTYsIDB4YWI2MCwgMCwgezB4YmIsMHgwMCwweDJlLDB4ODAsMHg0YiwweDk4LDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWI3MCwgMCwgezB4MDgsMHgwNCwweDA0LDB4MDAsMHhiMywweDAwLDB4NmMsMHhjMiwweDRiLDB4MzEsMHgwMiwweDBjLDB4NTAsMHg5YiwweDIwLDB4MjAgfSwKKyAgMTYsIDB4YWI4MCwgMCwgezB4YzAsMHgwYSwweDMyLDB4MTIsMHhjYywweDgwLDB4YjMsMHgwMCwweDZjLDB4MGMsMHgwYiwweDMxLDB4MDIsMHgwYywweDQyLDB4ODMgfSwKKyAgMTYsIDB4YWI5MCwgMCwgezB4MDgsMHgyZSwweDQwLDB4MGEsMHgwMCwweDAyLDB4MDAsMHg4MCwweGIwLDB4MDAsMHgyYywweDQxLDB4MGIsMHgxMCwweDAyLDB4NDIgfSwKKyAgMTYsIDB4YWJhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4YmIsMHg0MCwweDNmLDB4Y2MgfSwKKyAgMTYsIDB4YWJiMCwgMCwgezB4MGUsMHhmMCwweDgzLDB4M2QsMHhhMCwweGNmLDB4MjAsMHgzNywweGMwLDB4MGMsMHhmNywweGMzLDB4ZmQsMHg0OCwweGYzLDB4MDAgfSwKKyAgMTYsIDB4YWJjMCwgMCwgezB4M2UsMHg4OCwweDBmLDB4YjQsMHgxMywweGE1LDB4MDAsMHg4ZiwweDMwLDB4M2UsMHg0MCwweDBjLDB4YTAsMHgwMywweDYwLDB4ODAgfSwKKyAgMTYsIDB4YWJkMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDkwLDB4MjMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWJlMCwgMCwgezB4YTAsMHgxOSwweGY0LDB4MDAsMHhmZiwweDI5LDB4M2YsMHhjOSwweDBmLDB4ZjAsMHgxMywweGZjLDB4OTQsMHhlZiwweDEyLDB4M2IgfSwKKyAgMTYsIDB4YWJmMCwgMCwgezB4YzAsMHg4ZSwweGIyLDB4MDcsMHhmZCwweDA0LDB4ZmYsMHgxMCwweDNmLDB4MGMsMHgwZiwweGYwLDB4MDMsMHhmMCwweDAwLDB4ZmIgfSwKKyAgMTYsIDB4YWMwMCwgMCwgezB4MjAsMHgzZCwweDQwLDB4MGYsMHhkMCwweDQzLDB4ZmMsMHg0MCwweGZmLDB4MDQsMHgzZiwweGMwLDB4MGUsMHhjMCwweDQzLDB4ZTggfSwKKyAgMTYsIDB4YWMxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweGEyLDB4YzcsMHgyMCwweDNmLDB4MjQgfSwKKyAgMTYsIDB4YWMyMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4M2MsMHg4MCwweGNjLDB4MDksMHgzMywweGQxLDB4MGMsMHhmMSwweDIzLDB4ZmMsMHgyMCwweGRmLDB4MzYgfSwKKyAgMTYsIDB4YWMzMCwgMCwgezB4M2YsMHhjMCwweDBlLDB4NDgsMHgwMywweGZlLDB4MDAsMHhmZiwweDgwLDB4MzcsMHhlNCwweDBkLDB4NzgsMHgwMywweDExLDB4YTAgfSwKKyAgMTYsIDB4YWM0MCwgMCwgezB4Y2YsMHgwMCwweDM3LDB4YzgsMHgwYywweGYwLDB4MDMsMHgzMCwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWM1MCwgMCwgezB4ODAsMHgxMCwweGZmLDB4MDAsMHg4ZiwweGQxLDB4MmUsMHgwOCwweDBkLDB4YjYsMHgxMiwweDNkLDB4NDUsMHhmOSwweDY0LDB4MjcgfSwKKyAgMTYsIDB4YWM2MCwgMCwgezB4ZDAsMHg4OCwweGJhLDB4MTQsMHhjYywweDA0LDB4OGYsMHg0MCwweDIzLDB4ZjAsMHgwYiwweDg4LDB4MDIsMHgyZSwweDA0LDB4YmIgfSwKKyAgMTYsIDB4YWM3MCwgMCwgezB4ODAsMHhhZSwweGMwLDB4MDgsMHhiOCwweDBhLDB4MjEsMHgwMCwweDg4LDB4ZDAsMHgyMiwweDIwLDB4MjgsMHhiMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YWM4MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4OTMsMHgwMCwweDJlLDB4MDAgfSwKKyAgMTYsIDB4YWM5MCwgMCwgezB4MGEsMHgzNCwweDgyLDB4OGMsMHhhMCwweGEwLDB4MDgsMHgyNCwweGQ4LDB4MDksMHgzMSwweDAyLDB4Y2MsMHgyMCwweGIzLDB4MzIgfSwKKyAgMTYsIDB4YWNhMCwgMCwgezB4MjgsMHhkMCwweDRhLDB4ODAsMHgwMiwweGNjLDB4MGMsMHhiYiwweDAwLDB4MjIsMHg0MCwweDg5LDB4YjAsMHgwMiwweDYwLDB4ODAgfSwKKyAgMTYsIDB4YWNiMCwgMCwgezB4OTMsMHgwMCwweDI0LDB4ZDAsMHgwYiwweDMwLDB4MDIsMHhhMiwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWNjMCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MDAsMHg5YiwweDAwLDB4MmUsMHgyMCwweDA5LDB4YjAsMHg0YSwweDJjLDB4MDIsMHhhMCwweDAwLDB4MDYgfSwKKyAgMTYsIDB4YWNkMCwgMCwgezB4YzAsMHgwOSwweGIwLDB4MDAsMHhlYywweDAwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwYiwweDg4LDB4MDIsMHg2YywweDAwLDB4YmIgfSwKKyAgMTYsIDB4YWNlMCwgMCwgezB4MjAsMHgyYSwweGUyLDB4NDEsMHhiOCwweDJhLDB4NjAsMHgwYSwweDk4LDB4MDAsMHgyNiwweDAwLDB4MGIsMHhiMCwweDAyLDB4YjggfSwKKyAgMTYsIDB4YWNmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDA4LDB4ZGIsMHgwMiwweDNlLDB4MjAgfSwKKyAgMTYsIDB4YWQwMCwgMCwgezB4NGMsMHhiMCwweDAzLDB4MmMsMHgwMiwweDhiLDB4MjAsMHgxMiwweGMwLDB4MjksMHhiMCwweDEyLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4YWQxMCwgMCwgezB4M2EsMHhjMCwweDBlLDB4ODgsMHgwMywweGVkLDB4MjAsMHhmYiwweGM4LDB4MzQsMHhmMCwweDBkLDB4YmEsMHgwMywweDQ3LDB4NjAgfSwKKyAgMTYsIDB4YWQyMCwgMCwgezB4YzksMHgwMCwweDM2LDB4NDAsMHgwZiwweGIwLDB4MGIsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWQzMCwgMCwgezB4ZTAsMHgwMSwweDljLDB4MDAsMHhlZiwweDAwLDB4MGYsMHgwMCwweDBmLDB4MzAsMHgwMCwweGZjLDB4MDAsMHhkZiwweDkwLDB4YmIgfSwKKyAgMTYsIDB4YWQ0MCwgMCwgezB4YzAsMHhjZSwweGYwLDB4MDMsMHhmYywweDA0LDB4Y2IsMHgwMCwweDE3LDB4YzAsMHgwZiwweGMwLDB4MDMsMHhiYywweDg0LDB4ZmYgfSwKKyAgMTYsIDB4YWQ1MCwgMCwgezB4MDAsMHgzNywweGMwLDB4MGUsMHhkMCwweDYzLDB4YjgsMHgwMCwweGVhLDB4MDAsMHgzYSwweDgwLDB4MGMsMHgzMCwweDAzLDB4NzAgfSwKKyAgMTYsIDB4YWQ2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMiwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YWQ3MCwgMCwgezB4MGYsMHhiMCwweDUzLDB4MmMsMHgwMCwweGZhLDB4MDAsMHgzMiwweGMwLDB4OGYsMHhiMCwweDA3LDB4MmMsMHgwMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4YWQ4MCwgMCwgezB4YjIsMHhjMCwweDBmLDB4ODAsMHgwNywweGFjLDB4ODAsMHhkYiwweDI0LDB4N2UsMHhkMCwweDBlLDB4YjAsMHgyMywweDc0LDB4MDQgfSwKKyAgMTYsIDB4YWQ5MCwgMCwgezB4ZGQsMHgwOCwweGI1LDB4NDAsMHgwYywweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWRhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHhiZiwweGMwLDB4YTAsMHgwMCwweDFiLDB4ZjAsMHgwMiwweDNmLDB4NjAsMHhlYSwweDUwLDB4MjMgfSwKKyAgMTYsIDB4YWRiMCwgMCwgezB4YzAsMHgwOCwweGZhLDB4MDcsMHhmYywweDAwLDB4ZGYsMHgwMCwweDYzLDB4YzAsMHg0OCwweDE4LDB4MDIsMHgyZCwweDAwLDB4YjMgfSwKKyAgMTYsIDB4YWRjMCwgMCwgezB4MDAsMHg2ZSwweGMwLDB4MGQsMHgzYSwweDAzLDB4MjQsMHgwMCwweDgyLDB4ODAsMHgzMiwweDgwLDB4MGQsMHhmMCwweDAzLDB4MzIgfSwKKyAgMTYsIDB4YWRkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDE0LDB4YjMsMHg1OSwweDIwLDB4ODAgfSwKKyAgMTYsIDB4YWRlMCwgMCwgezB4MDksMHgzMCwweDAyLDB4MmUsMHgwNSwweGIwLDB4NDQsMHgyZSwweGMwLDB4MDksMHgzNCwweDgyLDB4ZWMsMHgwMCwweGFiLDB4MDQgfSwKKyAgMTYsIDB4YWRmMCwgMCwgezB4MjAsMHhjMCwweDA5LDB4MjEsMHhiMiwweDhlLDB4MDQsMHg5MywweGMwLDB4MjQsMHhjMCwweDBhLDB4MTgsMHgwNiwweDRjLDB4MDAgfSwKKyAgMTYsIDB4YWUwMCwgMCwgezB4OTIsMHg1MCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg3MCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWUxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNywweDgwLDB4NjEsMHhlMCwweDBiLDB4NzgsMHgwYSwweDVlLDB4MDEsMHhiMSwweGEwLDB4MmQgfSwKKyAgMTYsIDB4YWUyMCwgMCwgezB4ZTAsMHgwYSwweDc4LDB4MDIsMHg1ZSwweDAwLDB4MDcsMHg5MCwweDIxLDB4ZTAsMHgxOCwweGM4LDB4MDIsMHgxZSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4YWUzMCwgMCwgezB4ODAsMHgyZCwweGUwLDB4OGEsMHhkOCwweDAyLDB4M2UsMHhjMCwweDg1LDB4ODAsMHgyMSwweDIwLDB4MTksMHg3OCwweDIyLDB4MDAgfSwKKyAgMTYsIDB4YWU0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjMsMHg5NCwweDIwLDB4MTAgfSwKKyAgMTYsIDB4YWU1MCwgMCwgezB4NGIsMHgzMCwweDA3LDB4MGMsMHgwMCwweGYzLDB4MDAsMHgzZSwweGM4LDB4MGYsMHgzMCwweDAzLDB4Y2MsMHgwMCwweDIzLDB4MTAgfSwKKyAgMTYsIDB4YWU2MCwgMCwgezB4MDAsMHhjYiwweDA1LDB4MjAsMHgwMiwweDhjLDB4NjAsMHg5MywweDBhLDB4MmUsMHhjNCwweDBhLDB4MDEsMHgwNywweDRjLDB4ODAgfSwKKyAgMTYsIDB4YWU3MCwgMCwgezB4ZDIsMHgwMSwweDMwLDB4YzAsMHgyYywweDMwLDB4MGIsMHg1YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWU4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDAxLDB4MGYsMHg0MCwweDBmLDB4ZjAsMHgxMywweGJjLDB4MDAsMHhlZiwweDI2LDB4NzMgfSwKKyAgMTYsIDB4YWU5MCwgMCwgezB4YzIsMHgwYywweGIwLDB4ODMsMHhiYywweDQwLDB4ZmYsMHgxOCwweDNkLDB4YzAsMHg0YSwweGMxLDB4MDMsMHhmYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4YWVhMCwgMCwgezB4MTIsMHgzZiwweGM0LDB4NGQsMHhjMSwweDBiLDB4ZmMsMHg4MSwweGZkLDB4MDAsMHgzZiwweDIwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4YWViMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDIwLDB4Y2IsMHg0OCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4YWVjMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MmQsMHgyMCwweGU5LDB4ODAsMHhmYSwweGM4LDB4MGQsMHhiMCwweDAzLDB4ZWUsMHgwMCwweGRiLDB4MjQgfSwKKyAgMTYsIDB4YWVkMCwgMCwgezB4NzYsMHhmMywweDhlLDB4ODAsMHgzMywweGVjLDB4NDQsMHhlYiwweDEwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgwMywweGU4LDB4MDQgfSwKKyAgMTYsIDB4YWVlMCwgMCwgezB4ZGMsMHgwMCwweGIzLDB4NjEsMHgwYywweGIwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWVmMCwgMCwgezB4NDgsMHgxMSwweDhkLDB4MDAsMHg4NywweDIwLDB4MmYsMHgwMSwweDI4LDB4NzAsMHgwMiwweDBjLDB4ODQsMHg4ZCwweDA0LDB4MzEgfSwKKyAgMTYsIDB4YWYwMCwgMCwgezB4Y2MsMHhjOSwweDcyLDB4MDIsMHhkZCwweDAwLDB4MzcsMHgzMywweDIxLDB4ZDgsMHgwOCwweDQwLDB4MDIsMHhkYywweDAwLDB4YjcgfSwKKyAgMTYsIDB4YWYxMCwgMCwgezB4MjAsMHgzZCwweGMwLDB4MDksMHg1MCwweDIyLDB4ZjAsMHgwMCwweDk3LDB4MDAsMHgyMSwweDgwLDB4MGEsMHhmYywweDAyLDB4OTIgfSwKKyAgMTYsIDB4YWYyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgxZSwweDgyLDB4ODcsMHhiMCwweDJkLDB4MjAgfSwKKyAgMTYsIDB4YWYzMCwgMCwgezB4MDgsMHgzOSwweDAyLDB4MWUsMHg0MSwweGE3LDB4ODAsMHgyNCwweGUwLDB4MDksMHg3YSwweDMyLDB4OGUsMHg4MiwweDA3LDB4YTAgfSwKKyAgMTYsIDB4YWY0MCwgMCwgezB4MjUsMHhlMCwweDhiLDB4NDgsMHgwMiwweDFlLDB4MDAsMHhhNywweGUxLDB4MmQsMHhlMCwweDRiLDB4NTgsMHgwMCwweGRhLDB4MDAgfSwKKyAgMTYsIDB4YWY1MCwgMCwgezB4YTAsMHg4MCwweDI0LDB4NjAsMHgwOCwweDdhLDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWY2MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4MywweDAwLDB4MmMsMHgwMCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg5MywweDAwLDB4MjIgfSwKKyAgMTYsIDB4YWY3MCwgMCwgezB4YzEsMHgwOSwweDMwLDB4NDIsMHhjYywweDAwLDB4ODMsMHgwMCwweDYwLDB4YzAsMHgwOCwweDFhLDB4MDIsMHhjZSwweDA0LDB4YjMgfSwKKyAgMTYsIDB4YWY4MCwgMCwgezB4ZTAsMHgyOCwweGEwLDB4MDksMHgxYywweDgyLDB4NGIsMHgwOCwweGEzLDB4ODAsMHgyNCwweGEwLDB4MmEsMHgzMCwweDAyLDB4OWEgfSwKKyAgMTYsIDB4YWY5MCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4Y2EsMHgwMCwweDJmLDB4ODggfSwKKyAgMTYsIDB4YWZhMCwgMCwgezB4MGMsMHhhMCwweDEzLDB4MjgsMHgwMCwweGVlLDB4MDAsMHgyZSwweDgwLDB4MmQsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGRhLDB4MDAgfSwKKyAgMTYsIDB4YWZiMCwgMCwgezB4NzYsMHg4MCwweDBlLDB4ZTgsMHgwMywweGJiLDB4ODAsMHhlZSwweDQwLDB4MmYsMHhhMiwweDhmLDB4ZTYsMHgwMywweGViLDB4ODYgfSwKKyAgMTYsIDB4YWZjMCwgMCwgezB4ZmEsMHg4MCwweDM3LDB4ODIsMHgwYywweDIwLDB4MDcsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWZkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDQwLDB4MWUsMHgwMCwweDBmLDB4ODAsMHgwYiwweDYxLDB4MDAsMHhlOCwweGMwLDB4M2EgfSwKKyAgMTYsIDB4YWZlMCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAxLDB4ZjgsMHgwMCwweDdlLDB4MTAsMHgxZSwweDgxLDB4MDMsMHhlMCwweDA4LDB4ZjggfSwKKyAgMTYsIDB4YWZmMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4YzAsMHgyOCwweGRjLDB4NTAsMHgzYiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4YjAwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDIgfSwKKyAgMTYsIDB4YjAxMCwgMCwgezB4MGYsMHgxMCwweDAzLDB4YTYsMHgwMCwweGM5LDB4MDEsMHgzYSwweDQwLDB4MGUsMHg5NCwweDAxLDB4ZTQsMHgxMCwweGYxLDB4MDQgfSwKKyAgMTYsIDB4YjAyMCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OWEsMHgyMywweDIwLDB4NjAsMHhmOCwweDA0LDB4MGEsMHg0MiwweDBlLDB4OTAsMHgxMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4YjAzMCwgMCwgezB4YzEsMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjA0MCwgMCwgezB4ODAsMHgwNCwweDY3LDB4MDgsMHhhOSwweDAwLDB4NmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI3LDB4ODIsMHg4OSwweDAwLDB4MjYgfSwKKyAgMTYsIDB4YjA1MCwgMCwgezB4NDAsMHgwOCwweDljLDB4MDMsMHhhNCwweDEwLDB4YjksMHgwMCwweDM2LDB4NDAsMHg5YiwweDFjLDB4MWEsMHgyMywweDA0LDB4YjggfSwKKyAgMTYsIDB4YjA2MCwgMCwgezB4MDAsMHgzYSwweDQwLDB4MGUsMHgxMCwweDAyLDB4MjQsMHgwMiwweGM5LDB4YTAsMHhhMiwweDQwLDB4MGIsMHg5MCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4YjA3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNSwweDgwLDB4ODksMHgwNCwweDJjLDB4NDAgfSwKKyAgMTYsIDB4YjA4MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ODQsMHg4MSwweDk5LDB4NDAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDA2LDB4ZTQsMHgwMSwweGI5LDB4MDAgfSwKKyAgMTYsIDB4YjA5MCwgMCwgezB4YTYsMHg0MSwweDFiLDB4OTAsMHg4MiwweDIxLDB4MDAsMHhiOCwweDEwLDB4MmUsMHg0MCwweDBhLDB4OTIsMHgwYSwweGE0LDB4MDEgfSwKKyAgMTYsIDB4YjBhMCwgMCwgezB4OGYsMHgyMiwweDIzLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjBiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhhMywweDIwLDB4MmMsMHg0MSwweDA5LDB4MTIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjQgfSwKKyAgMTYsIDB4YjBjMCwgMCwgezB4NDgsMHgwYSwweDM2LDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMCwweDA0LDB4YzgsMHg0YiwweDE0LDB4MDIsMHgwNSwweDAwLDB4YjEgfSwKKyAgMTYsIDB4YjBkMCwgMCwgezB4MDUsMHgyOCwweDUwLDB4MGEsMHg5MCwweDAyLDB4MDUsMHgwMiwweDg1LDB4MDAsMHgyMSwweDQwLDB4MGIsMHgxMiwweDAyLDB4MDIgfSwKKyAgMTYsIDB4YjBlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHgwMCwweDZlLDB4MTQgfSwKKyAgMTYsIDB4YjBmMCwgMCwgezB4MmMsMHg4NSwweDAyLDB4YTEsMHg0MCwweGM4LDB4NTAsMHgzYSwweDE0LDB4MGUsMHg4MCwweDAyLDB4ZTEsMHg0MCwweGIwLDB4NTAgfSwKKyAgMTYsIDB4YjEwMCwgMCwgezB4MzIsMHgwMCwweDBiLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmYSwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGEwLDB4MDIgfSwKKyAgMTYsIDB4YjExMCwgMCwgezB4YzgsMHgwMCwweDEzLDB4MDAsMHgwZiwweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjEyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDgsMHhmOSwweDE0LDB4M2YsMHg0MCwweDBjLDB4OTEsMHgwMywweGU0LDB4NDIsMHhmZCwweDEwLDB4MzYgfSwKKyAgMTYsIDB4YjEzMCwgMCwgezB4NDQsMHgwZCwweDkxLDB4MjMsMHhhNCwweDQ4LDB4ZjksMHgxMSwweDM4LDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNSwweDE0LDB4MzkgfSwKKyAgMTYsIDB4YjE0MCwgMCwgezB4NDIsMHg3YiwweDQwLDB4OGUsMHhkMCwweDAxLDB4ZjUsMHgwMCwweGE5LDB4NDAsMHgzZSwweDUwLDB4MDcsMHg5NiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4YjE1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmNiwweDgwLDB4ZGQsMHhhZSwweDNhLDB4NTAgfSwKKyAgMTYsIDB4YjE2MCwgMCwgezB4MGQsMHg5YSwweDBiLDB4NzYsMHg4MCwweGNmLDB4ODgsMHgzMiwweDcwLDB4MmQsMHhkYSwweDAzLDB4YTcsMHgwMSwweGU5LDB4OTIgfSwKKyAgMTYsIDB4YjE3MCwgMCwgezB4MzcsMHg2OCwweDBkLDB4OTQsMHgwMywweGU3LDB4MDAsMHhlZCwweGEwLDB4M2EsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU3LDB4MDIgfSwKKyAgMTYsIDB4YjE4MCwgMCwgezB4Y2QsMHg4MCwweDMzLDB4NjgsMHgwYywweGQ4LDB4ODMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjE5MCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MDAsMHg4OCwweDQwLDB4MjAsMHgyMCwweDBjLDB4OGMsMHgwMiwweDIzLDB4MDAsMHg4OCwweGUwLDB4MjIgfSwKKyAgMTYsIDB4YjFhMCwgMCwgezB4MzAsMHgwOCwweDg0LDB4MDIsMHhlMywweDAwLDB4YjgsMHhlMCwweDIyLDB4MTQsMHg4ZCwweDg4LDB4MDIsMHhlMywweDAwLDB4YjggfSwKKyAgMTYsIDB4YjFiMCwgMCwgezB4NTAsMHgyZSwweGE4LDB4OGIsMHg4MCwweDIyLDB4ZTMsMHg0OCwweDg4LDB4NTAsMHgyMiwweDAwLDB4MDgsMHg4YywweDAyLDB4MGUgfSwKKyAgMTYsIDB4YjFjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDQwLDB4OTEsMHgwMCwweDJhLDB4NDggfSwKKyAgMTYsIDB4YjFkMCwgMCwgezB4MDksMHgxNCwweDgyLDB4MDUsMHgyMCwweDgxLDB4MDgsMHgyMCwweDU4LDB4MDksMHgxMSwweDAyLDB4ODUsMHg4OCwweGIxLDB4NDAgfSwKKyAgMTYsIDB4YjFlMCwgMCwgezB4YTAsMHg0MCwweDA4LDB4MTIsMHgwMiwweGM1LDB4ODAsMHhhMSwweDAwLDB4MjgsMHg0MCwweDBiLDB4MTgsMHgwMiwweGM0LDB4ODQgfSwKKyAgMTYsIDB4YjFmMCwgMCwgezB4YTEsMHgwMCwweDI0LDB4NTAsMHgwOCwweDEwLDB4OTIsMHgwMywweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjIwMCwgMCwgezB4MTgsMHgxNSwweGFjLDB4MTAsMHg5YiwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MDYsMHg4OSwweDA0LDB4MjAgfSwKKyAgMTYsIDB4YjIxMCwgMCwgezB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwMiwweDIyLDB4NDEsMHg4OSwweGEwLDB4ODIsMHhlMCwweGEwLDB4YjkgfSwKKyAgMTYsIDB4YjIyMCwgMCwgezB4MjgsMHgyZSwweDQ0LDB4MGIsMHhiMCwweDAyLDB4ZTQsMHgwMiwweGI5LDB4MDAsMHgyNiwweDQwLDB4MjgsMHgxMCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4YjIzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZDksMHgwMCwweDM4LDB4NDAgfSwKKyAgMTYsIDB4YjI0MCwgMCwgezB4MGQsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4YTAsMHhhMiwweDQwLDB4OGQsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4YjI1MCwgMCwgezB4MzYsMHg0MCwweDBjLDB4ODQsMHgxMywweGUyLDB4MDAsMHhlOSwweDAwLDB4M2EsMHg1MCwweDBmLDB4OWMsMHgwMiwweGU2LDB4ODQgfSwKKyAgMTYsIDB4YjI2MCwgMCwgezB4ZTksMHgwMCwweGI2LDB4NDAsMHgwYywweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjI3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhlMSwweDAwLDB4M2UsMHg2OCwweDBlLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmMSwweDI4LDB4M2EgfSwKKyAgMTYsIDB4YjI4MCwgMCwgezB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDIsMHgwZiwweDgwLDB4MjMsMHhlMiwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YjI5MCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MSwweDIzLDB4ZTQsMHg0MCwweGMxLDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDBiLDB4Y2EgfSwKKyAgMTYsIDB4YjJhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YjJiMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4YTAsMHgyMCwweGM4LDB4NDAsMHgzZSwweDAwLDB4MGUsMHg4MSwweDYzLDB4NjAsMHgwMCwweGYwLDB4MDQgfSwKKyAgMTYsIDB4YjJjMCwgMCwgezB4M2MsMHgwMSwweDBjLDB4ODQsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGMxLDB4MDAgfSwKKyAgMTYsIDB4YjJkMCwgMCwgezB4ZDgsMHgxMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MjMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjJlMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4NjAsMHg4ZSwweDAwLDB4MjIsMHg4MCwweDBhLDB4YTAsMHgwMiwweDM4LDB4ODAsMHhiZSwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YjJmMCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDIsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIzLDB4OTgsMHgxOCwweGVjLDB4MDIsMHhmOCwweDIwLDB4YWUgfSwKKyAgMTYsIDB4YjMwMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MGIsMHhlNCwweDgyLDB4ZTgsMHgwMiwweGNlLDB4NDQsMHgyOCwweDgwLDB4MGQsMHhhMCwweDBhLDB4MGEgfSwKKyAgMTYsIDB4YjMxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MCwweDAwLDB4ODIsMHgwNCwweGEwLDB4YzAgfSwKKyAgMTYsIDB4YjMyMCwgMCwgezB4MDksMHgzMCwweDAyLDB4OGUsMHgwNCwweDgzLDB4NTAsMHg2YywweGMwLDB4MGEsMHgzMCwweDg2LDB4MGMsMHgwMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4YjMzMCwgMCwgezB4MjgsMHgzMCwweDBhLDB4MzYsMHgxMiwweGNjLDB4ODAsMHg4MSwweDAwLDB4MjQsMHhjMCwweDBiLDB4MzIsMHgwNiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4YjM0MCwgMCwgezB4ODAsMHg4OCwweDY0LDB4NjAsMHgyOCwweDEwLDB4MDIsMHgwMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjM1MCwgMCwgezB4YTAsMHgwMSwweDEwLDB4MTIsMHg4NCwweDQwLDB4MjEsMHhjOCwweDBhLDB4NzIsMHgwMiwweDEwLDB4MDAsMHhiNywweDAwLDB4MmQgfSwKKyAgMTYsIDB4YjM2MCwgMCwgezB4Y2MsMHgwOCwweDM4LDB4MTIsMHgxYywweDAwLDB4YjMsMHgzMCwweDIwLDB4MDAsMHgwOCwweDcxLDB4ODIsMHhmZSwweDAwLDB4YTQgfSwKKyAgMTYsIDB4YjM3MCwgMCwgezB4ODAsMHgyMSwweGM4LDB4MGIsMHg3MCwweDAyLDB4ZGMsMHgwMSwweDg3LDB4MDAsMHgyYywweDQyLDB4MDksMHg1MSwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YjM4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4YzIsMHg4MCwweDMxLDB4ZjggfSwKKyAgMTYsIDB4YjM5MCwgMCwgezB4NGMsMHhmYywweDEzLDB4OTIsMHgwOSwweGM3LDB4ODAsMHgzYywweGVkLDB4MWUsMHg3OCwweDI3LDB4MWUsMHgwMCwweGY3LDB4OGMgfSwKKyAgMTYsIDB4YjNhMCwgMCwgezB4NzksMHgyMCwweDA4LDB4N2EsMHgwMywweGRlLDB4ODEsMHg4NCwweDgwLDB4M2QsMHhlMCwweDBlLDB4NzgsMHgwMywweGZlLDB4MjAgfSwKKyAgMTYsIDB4YjNiMCwgMCwgezB4YzUsMHg4MSwweDM1LDB4NjAsMHgyYywweDU4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjNjMCwgMCwgezB4MDgsMHgxZCwweDgwLDB4MDAsMHhmOCwweDA0LDB4M2UsMHhkMCwweDBmLDB4YjAsMHgxMywweGUwLDB4MDAsMHhmYiwweDAyLDB4M2EgfSwKKyAgMTYsIDB4YjNkMCwgMCwgezB4ZDAsMHgwZiwweGEwLDB4MGIsMHhhYywweDQwLDB4ZmIsMHgwMCwweDNhLDB4MDAsMHgyZiwweGIwLDB4MDMsMHhjYywweDAwLDB4ZjAgfSwKKyAgMTYsIDB4YjNlMCwgMCwgezB4MDAsMHgzYSwweGM0LDB4MGYsMHhiMCwweDAzLDB4ZmMsMHg0MSwweGYzLDB4MDAsMHgzYSwweDQwLDB4MGYsMHg1MCwweDkzLDB4YzIgfSwKKyAgMTYsIDB4YjNmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4Y2MsMHg4MSwweDNmLDB4ZmMgfSwKKyAgMTYsIDB4YjQwMCwgMCwgezB4MWMsMHhmOCwweDAzLDB4NzYsMHg0MCwweGVmLDB4OTIsMHgzZiwweGU0LDB4OGMsMHhmOCwweDAzLDB4YmYsMHgxMCwweGZmLDB4ODAgfSwKKyAgMTYsIDB4YjQxMCwgMCwgezB4YjMsMHgyMCwweDBlLDB4ZjksMHgxMywweGZlLDB4MjQsMHhmZCwweDk0LDB4MzcsMHhlMCwweDFjLDB4ZjksMHgwMywweGVlLDB4MDAgfSwKKyAgMTYsIDB4YjQyMCwgMCwgezB4Y2QsMHg4MCwweGIzLDB4ZTAsMHgwYywweDU4LDB4MDIsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjQzMCwgMCwgezB4YTgsMHgxMSwweDk0LDB4NDAsMHg4MCwweDAwLDB4MmYsMHhjNCwweDA4LDB4NzIsMHgwMiwweGRkLDB4MDgsMHhkNywweDAwLDB4MmQgfSwKKyAgMTYsIDB4YjQ0MCwgMCwgezB4Y2MsMHgwOCwweGRlLDB4MDMsMHg1YywweDAwLDB4YjcsMHgwNCwweDIxLDB4ODAsMHhjOCwweDcwLDB4ODMsMHhkYywweDAwLDB4YjQgfSwKKyAgMTYsIDB4YjQ1MCwgMCwgezB4YTAsMHgyZiwweGMwLDB4MGMsMHg3MCwweDAyLDB4ZGUsMHg4MCwweDg3LDB4MDAsMHgyMSwweGMyLDB4MGEsMHg1MSwweDQyLDB4MmEgfSwKKyAgMTYsIDB4YjQ2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ODQsMHgwMCwweDJkLDB4YzggfSwKKyAgMTYsIDB4YjQ3MCwgMCwgezB4NDgsMHg3MCwweDAyLDB4NTQsMHgwYywweGE3LDB4MDAsMHgyYywweGMwLDB4ODksMHg3MiwweDAyLDB4NWMsMHgwMCwweGIzLDB4MTAgfSwKKyAgMTYsIDB4YjQ4MCwgMCwgezB4MjAsMHgwMCwweDBhLDB4NzAsMHgwNiwweGRjLDB4MDAsMHhiNCwweDIwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4ODAgfSwKKyAgMTYsIDB4YjQ5MCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDUwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjRhMCwgMCwgezB4MjAsMHgxNCwweGMwLDB4MDAsMHg4MCwweDAwLDB4MmUsMHhjMCwweDA4LDB4MzAsMHgwMiwweGM0LDB4MDgsMHhhMiwweDQyLDB4MmMgfSwKKyAgMTYsIDB4YjRiMCwgMCwgezB4YzEsMHgwOSwweDIwLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4ODAsMHgwOCwweDNjLDB4MjIsMHg4YywweDIwLDB4YjAgfSwKKyAgMTYsIDB4YjRjMCwgMCwgezB4MDgsMHgyZSwweGUwLDB4MDgsMHgzOCwweDEwLDB4Y2YsMHgwYSwweDkzLDB4NDAsMHhhMCwweGYwLDB4MGEsMHgxMCwweDAyLDB4MDggfSwKKyAgMTYsIDB4YjRkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhOCwweDAwLDB4YzEsMHgwMCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4YjRlMCwgMCwgezB4MmMsMHhmMCwweDAzLDB4NjgsMHgwMCwweGFhLDB4MDAsMHgzZiwweGMwLDB4MmQsMHg4MCwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAgfSwKKyAgMTYsIDB4YjRmMCwgMCwgezB4MzIsMHgwMCwweDBlLDB4YjAsMHgxMiwweGVkLDB4MjQsMHhmYSwweDA4LDB4MjcsMHhjOCwweDEwLDB4YjgsMHhhMiwweGZmLDB4NjAgfSwKKyAgMTYsIDB4YjUwMCwgMCwgezB4OTgsMHhhMCwweGEyLDB4ZTAsMHgwYywweDUwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjUxMCwgMCwgezB4ODAsMHgwMCwweGM5LDB4MDYsMHhmOCwweDQxLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGU5LDB4MTAsMHg1YSwweDIwLDB4M2UgfSwKKyAgMTYsIDB4YjUyMCwgMCwgezB4YzAsMHgwZSwweDgwLDB4MDMsMHhlYywweDAwLDB4ZjMsMHgwMCwweDdlLDB4MDEsMHgwZiwweGIwLDB4OTMsMHhlZCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4YjUzMCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGUsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGUzLDB4MDgsMHgzYywweGMyLDB4MGYsMHhkMCwweDEzLDB4ZTAgfSwKKyAgMTYsIDB4YjU0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMywweDAyLDB4Y2MsMHgwMCwweDNiLDB4YzIgfSwKKyAgMTYsIDB4YjU1MCwgMCwgezB4MGMsMHhmMCwweDIzLDB4YWUsMHg0MCwweGRmLDB4ODEsMHgzOSwweGMwLDB4MDYsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDQgfSwKKyAgMTYsIDB4YjU2MCwgMCwgezB4MzEsMHg0MSwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhjYywweGEwLDB4MzcsMHhjMiwweDBjLDB4ZjAsMHgwMywweDdjLDB4MDQgfSwKKyAgMTYsIDB4YjU3MCwgMCwgezB4Y2QsMHgwMCwweDMzLDB4ZjAsMHgwYywweGQwLDB4MDMsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjU4MCwgMCwgezB4ODEsMHgwNCwweDYwLDB4MDAsMHg4OCwweDgwLDB4MjIsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU5LDB4MDAsMHhhYiwweDQ0LDB4MmUgfSwKKyAgMTYsIDB4YjU5MCwgMCwgezB4YzAsMHgwOCwweDg4LDB4MDIsMHhlYywweDAwLDB4YmIsMHgwMCwweGEyLDB4NzAsMHgwYSwweGI0LDB4MDIsMHhjYywweDAwLDB4YTAgfSwKKyAgMTYsIDB4YjVhMCwgMCwgezB4MjAsMHgyMiwweGMwLDB4MGYsMHhiYywweDAyLDB4Y2MsMHgwYSwweDhiLDB4ODAsMHhhMiwweGMwLDB4MGQsMHg5MCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YjViMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyMCwweDAwLDB4ODksMHg4MCwweDJhLDB4YzAgfSwKKyAgMTYsIDB4YjVjMCwgMCwgezB4MDgsMHhiMCwweDAyLDB4Y2MsMHgwNiwweDg4LDB4NjAsMHgyZSwweGMwLDB4MGEsMHg5OCwweDA2LDB4ZWMsMHgwMSwweGJiLDB4MDAgfSwKKyAgMTYsIDB4YjVkMCwgMCwgezB4MjIsMHgzMSwweDAyLDB4YjIsMHgwMiwweGVjLDB4YTAsMHg4YSwweDAwLDB4MjYsMHhjMCwweDQ4LDB4YTgsMHgwMiwweGVjLDB4MDQgfSwKKyAgMTYsIDB4YjVlMCwgMCwgezB4YTksMHg4MCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjVmMCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHhjMCwweDBhLDB4MzAsMHg0MiwweGNjLDB4MDAsMHg4MCwweDAxLDB4MmMgfSwKKyAgMTYsIDB4YjYwMCwgMCwgezB4YzAsMHgxYSwweDEyLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4MDAsMHg0YSwweDMwLDB4MDIsMHhjYywweDAwLDB4YTAgfSwKKyAgMTYsIDB4YjYxMCwgMCwgezB4MDAsMHgwOCwweGMwLDB4MGIsMHgyMCwweDA2LDB4ZWMsMHhhMCwweGEzLDB4MDAsMHhhMCwweDQwLDB4MjksMHgxMCwweDAwLDB4MDIgfSwKKyAgMTYsIDB4YjYyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4YzgsMHg1MCwweDNiLDB4YzAgfSwKKyAgMTYsIDB4YjYzMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4YWMsMHgwMCwweGM5LDB4MDAsMHgzYiwweGMwLDB4MGUsMHg5MiwweDgzLDB4ZmMsMHgwMCwweGJmLDB4MDAgfSwKKyAgMTYsIDB4YjY0MCwgMCwgezB4MTIsMHgwMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHg4OCwweDI2LDB4MTYsMHhjMCwweDBjLDB4ODAsMHgxNywweDVjLDB4ODAgfSwKKyAgMTYsIDB4YjY1MCwgMCwgezB4ZTksMHgwMSwweDMyLDB4NDAsMHgyYywweGQwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjY2MCwgMCwgezB4YTAsMHgxZCwweGQwLDB4MDAsMHhmYywweDIwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4YjY3MCwgMCwgezB4YzAsMHgwZCwweDgwLDB4MDMsMHhmYywweDA4LDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmYywweDEwLDB4ZjggfSwKKyAgMTYsIDB4YjY4MCwgMCwgezB4NDAsMHgzNywweGMwLDB4MGUsMHhlMCwweDIxLDB4ZmMsMHgwOCwweGRmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YjY5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweGMwLDB4ZmYsMHgyMSwweDcxLDB4MjQgfSwKKyAgMTYsIDB4YjZhMCwgMCwgezB4MGYsMHhmMSwweDgzLDB4ZjIsMHg0MCwweGZmLDB4MDAsMHgzNywweGM0LDB4OWYsMHhmMiwweDQ3LDB4M2QsMHgwNCwweGM3LDB4MjAgfSwKKyAgMTYsIDB4YjZiMCwgMCwgezB4MzMsMHhjMCwweDBjLDB4NzgsMHgyMywweGZlLDB4NDAsMHhlOCwweDEwLDB4MjcsMHhjNCwweDBmLDB4ZjIsMHgxMywweDNjLDB4ODQgfSwKKyAgMTYsIDB4YjZjMCwgMCwgezB4YzQsMHg4MSwweDMzLDB4MjAsMHg0YywweGYwLDB4MjMsMHg3MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjZkMCwgMCwgezB4ODAsMHgxMCwweGVkLDB4NDAsMHhiZiwweDU0LDB4NjIsMHhjOCwweDBiLDB4ZjYsMHgwMiwweGUwLDB4MDAsMHhiYiwweGQwLDB4MjIgfSwKKyAgMTYsIDB4YjZlMCwgMCwgezB4ZjAsMHgxZiwweGY5LDB4MTIsMHgzZCwweDgwLDB4OWYsMHg4MSwweDJiLDB4ZTAsMHgwYSwweGI4LDB4MTIsMHhlOCwweDAwLDB4OGYgfSwKKyAgMTYsIDB4YjZmMCwgMCwgezB4MDQsMHgyMiwweGQwLDB4MDgsMHhiMywweDhhLDB4YmYsMHg0MiwweDhiLDB4ODIsMHgyMiwweGUwLDB4MjgsMHg4YywweDAyLDB4MjAgfSwKKyAgMTYsIDB4YjcwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YjMsMHgyOCwweDI4LDB4MDggfSwKKyAgMTYsIDB4YjcxMCwgMCwgezB4MGIsMHgzMCwweDA2LDB4ODAsMHg4MCwweGIzLDB4MDIsMHgyNCwweGQxLDB4MGIsMHgzMCwweDAyLDB4OGQsMHg4MCwweDkzLDB4MTAgfSwKKyAgMTYsIDB4YjcyMCwgMCwgezB4MjAsMHhjZSwweDhiLDB4MzAsMHgwMiwweGNjLDB4ODQsMHhhMSwweDIxLDB4MmMsMHhjYywweDBhLDB4MzAsMHgwYSwweDRjLDB4MDAgfSwKKyAgMTYsIDB4YjczMCwgMCwgezB4OTMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDNjLDB4MDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjc0MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MTAsMHhiYiwweDAyLDB4NmEsMHhlMCwweDBiLDB4YjAsMHgwMiwweGUxLDB4MDgsMHhiYiwweDA0LDB4MmEgfSwKKyAgMTYsIDB4Yjc1MCwgMCwgezB4YzAsMHgwYSwweGIwLDB4MTIsMHg4YywweDAwLDB4OWIsMHgwMCwweDJhLDB4YzAsMHgwYiwweGIxLDB4MDYsMHhjOCwweDgwLDB4OGIgfSwKKyAgMTYsIDB4Yjc2MCwgMCwgezB4ODIsMHg2YSwweGMxLDB4MGEsMHgzMCwweDAyLDB4YWMsMHgxOCwweDg4LDB4MTAsMHgyYSwweDQ4LDB4MDgsMHg4MCwweDAyLDB4MzAgfSwKKyAgMTYsIDB4Yjc3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZmIsMHgwMCwweGFhLDB4MzAgfSwKKyAgMTYsIDB4Yjc4MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4YTgsMHgwMCwweGYzLDB4MDEsMHhiNiwweGMxLDB4MGIsMHhiMCwweDAyLDB4YWMsMHgwOCwweDRiLDB4MDAgfSwKKyAgMTYsIDB4Yjc5MCwgMCwgezB4YjIsMHhjMCwweDBmLDB4YjgsMHgwMiwweGVjLDB4MTAsMHhhOSwweDgxLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDBjLDB4MDAgfSwKKyAgMTYsIDB4YjdhMCwgMCwgezB4Y2IsMHhhMCwweDE4LDB4ZDAsMHgwYywweGIwLDB4MDMsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjdiMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDgsMHhmNywweDAwLDB4MzcsMHgwMCwweDBmLDB4ZjAsMHgwMywweGZkLDB4MDAsMHhmZiwweDAwLDB4MzcgfSwKKyAgMTYsIDB4YjdjMCwgMCwgezB4YzAsMHgwZiwweGIwLDB4MDcsMHg3YywweDAwLDB4ZTcsMHgwMCwweDNlLDB4YzAsMHgwYSwweGYwLDB4MDMsMHhmZSwweDAwLDB4ZjcgfSwKKyAgMTYsIDB4YjdkMCwgMCwgezB4MDAsMHgzNiwweGMwLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4ODAsMHgzNywweGUwLDB4MGYsMHhhMCwweDAzLDB4YjggfSwKKyAgMTYsIDB4YjdlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZGIsMHgwMCwweDM2LDB4MDAgfSwKKyAgMTYsIDB4YjdmMCwgMCwgezB4MGUsMHhiMCwweDAzLDB4NjksMHgwMCwweGRiLDB4MDksMHgzYSwweGMwLDB4MWYsMHgzMCwweDIzLDB4ZWMsMHgwOCwweGNiLDB4MjAgfSwKKyAgMTYsIDB4YjgwMCwgMCwgezB4MzQsMHhjMCwweDJmLDB4YjAsMHgwMywweGVjLDB4NDAsMHhlYiwweDQ4LDB4M2UsMHhjNCwweDRkLDB4YjAsMHg4YiwweDZjLDB4MDAgfSwKKyAgMTYsIDB4YjgxMCwgMCwgezB4Y2IsMHgwMCwweDMyLDB4OTAsMHgwZiwweDMwLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjgyMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4ZiwweDAwLDB4MjIsMHgwMCwweDQ4LDB4ZjAsMHgyMiwweDJjLDB4MDAsMHg4ZiwweDAwLDB4MjMgfSwKKyAgMTYsIDB4YjgzMCwgMCwgezB4ZTAsMHg4YiwweGY1LDB4MTAsMHgzYywweDAwLDB4OGYsMHg4MCwweDIzLDB4ZjAsMHg4MCwweDk4LDB4MDMsMHgyZCwweDQ0LDB4ZGIgfSwKKyAgMTYsIDB4Yjg0MCwgMCwgezB4MDAsMHgyMywweGQ0LDB4MDgsMHhmOCwweDAyLDB4M2MsMHgwMCwweDgzLDB4MDAsMHgyMiwweGMwLDB4MGIsMHhhNCwweDgyLDB4MzIgfSwKKyAgMTYsIDB4Yjg1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMCwweDI0LDB4MDAgfSwKKyAgMTYsIDB4Yjg2MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4ODQsMHgwMCwweGIzLDB4MDEsMHgyOCwweGY2LDB4MDksMHgzNCwweDMyLDB4OGMsMHgwMSwweGIzLDB4ZDAgfSwKKyAgMTYsIDB4Yjg3MCwgMCwgezB4MjQsMHhlOCwweDBhLDB4MzEsMHgwYSwweDg2LDB4MDAsMHg4MywweDAwLDB4MmEsMHhlMCwweDAwLDB4MzAsMHgwMiwweDhjLDB4MDAgfSwKKyAgMTYsIDB4Yjg4MCwgMCwgezB4ODMsMHgwMCwweDI4LDB4YzAsMHg4OSwweDM4LDB4YTIsMHg3OCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjg5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHg5NywweDk0LDB4MjMsMHhlMCwweDA5LDB4MzgsMHgwMiwweDMyLDB4MDAsMHg5NywweGExLDB4MjEgfSwKKyAgMTYsIDB4YjhhMCwgMCwgezB4ZTQsMHgwYiwweDc4LDB4MDIsMHgxZSwweDQwLDB4YjcsMHhhMCwweDI1LDB4ZWMsMHgwOCwweGZjLDB4MDIsMHgzYSwweDAwLDB4OTMgfSwKKyAgMTYsIDB4YjhiMCwgMCwgezB4YjgsMHgyMSwweGUwLDB4MDgsMHg3OCwweDgyLDB4OWUsMHg0MCwweDg3LDB4YzAsMHgyOSwweGEwLDB4MGIsMHg1OCwweDAyLDB4NDggfSwKKyAgMTYsIDB4YjhjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyYywweDAwLDB4ZGIsMHgwMCwweDM0LDB4MjAgfSwKKyAgMTYsIDB4YjhkMCwgMCwgezB4MGYsMHgzYSwweDAzLDB4OGUsMHgwMCwweGYzLDB4YjAsMHgyOCwweGM0LDB4MGIsMHgzYSwweDAzLDB4YWUsMHg0MCwweGYzLDB4YTAgfSwKKyAgMTYsIDB4YjhlMCwgMCwgezB4MzQsMHhlZSwweDBmLDB4MzAsMHgyMywweDg0LDB4MDAsMHhlMywweGYwLDB4MzgsMHhjMCwweDBjLDB4YjAsMHgwYiwweDhlLDB4NDIgfSwKKyAgMTYsIDB4YjhmMCwgMCwgezB4YzMsMHgwMCwweDM4LDB4YzAsMHgwZiwweDMwLDB4NjMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjkwMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhlYiwweDQyLDB4M2EsMHhjNCwweDFlLDB4YjEsMHgwNywweDg4LDB4ZDEsMHhlMywweDAwLDB4M2YgfSwKKyAgMTYsIDB4YjkxMCwgMCwgezB4YzUsMHg4ZiwweGYxLDB4NjMsMHhhYywweDEwLDB4Y2IsMHg1MCwweDNiLDB4YzMsMHgwZiwweGQxLDB4MDMsMHhjOCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4YjkyMCwgMCwgezB4MjAsMHgzYiwweGMwLDB4MmUsMHhmMSwweDAzLDB4MWMsMHgwMCwweGZmLDB4MDAsMHgzNywweGMwLDB4NGYsMHhkMSwweDAzLDB4OTAgfSwKKyAgMTYsIDB4YjkzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDQwLDB4ZmIsMHg0NCwweGIyLDB4YzAgfSwKKyAgMTYsIDB4Yjk0MCwgMCwgezB4NGYsMHhiMywweDQzLDB4MjQsMHgwMCwweGRiLDB4MTAsMHgzNiwweGMwLDB4NGMsMHhiZSwweDIyLDB4NmQsMHgyMCwweGNiLDB4NTAgfSwKKyAgMTYsIDB4Yjk1MCwgMCwgezB4M2UsMHhjOSwweDRjLDB4YjAsMHgxMywweDI0LDB4MDAsMHhjZiwweDIwLDB4MzMsMHhjMCwweDNkLDB4ZjAsMHgyMywweDJjLDB4YzAgfSwKKyAgMTYsIDB4Yjk2MCwgMCwgezB4ZDgsMHgwMCwweDNlLDB4NDAsMHg4ZiwweDMwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjk3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDQsMHhiNywweDYwLDB4MjEsMHhjMSwweDhiLDB4ZjAsMHhhMiwweDE0LDB4MTAsMHg4NywweDAwLDB4MGYgfSwKKyAgMTYsIDB4Yjk4MCwgMCwgezB4YzgsMHgwZCwweDcxLDB4MGEsMHgxZCwweDAwLDB4ODcsMHgwMCwweDJjLDB4Y2MsMHg0OCwweDcwLDB4MmEsMHg5YywweDAwLDB4ODcgfSwKKyAgMTYsIDB4Yjk5MCwgMCwgezB4MGMsMHgyMSwweGMwLDB4MGMsMHg3MiwweDAyLDB4MGMsMHhhMiwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4YjlhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjMsMHg4MCwweDIxLDB4ZTAgfSwKKyAgMTYsIDB4YjliMCwgMCwgezB4MGIsMHg3YSwweDAyLDB4ZGUsMHgwMCwweGI3LDB4ODEsMHgwNSwweGU0LDB4MDgsMHg3OSwweDAyLDB4NWMsMHg4MCwweDg3LDB4YTAgfSwKKyAgMTYsIDB4YjljMCwgMCwgezB4MmQsMHhlMCwweDA4LDB4ZjgsMHgwNiwweGI2LDB4MDAsMHg4NywweDgwLDB4MjAsMHhlNCwweDBhLDB4N2IsMHgxMiwweDFlLDB4OTAgfSwKKyAgMTYsIDB4YjlkMCwgMCwgezB4OTcsMHg4OCwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MGUsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjllMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhkMCwweDBiLDB4YjAsMHgwMiwweDZlLDB4MzQsMHhhMywweDAwLDB4MmMgfSwKKyAgMTYsIDB4YjlmMCwgMCwgezB4YzEsMHgwOSwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAsMHg0OCwweDEwLDB4MDIsMHg4ZCwweDgwLDB4ODMgfSwKKyAgMTYsIDB4YmEwMCwgMCwgezB4YzAsMHgwMCwweGMwLDB4OGEsMHgzMCwweDEyLDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyYywweDE2LDB4MGIsMHgzOCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4YmExMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDMzLDB4ODggfSwKKyAgMTYsIDB4YmEyMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4NzksMHg5MCwweGZhLDB4MDEsMHgzNiwweDgwLDB4MWMsMHhhMCwweDAzLDB4NjgsMHgwMCwweGNhLDB4MDAgfSwKKyAgMTYsIDB4YmEzMCwgMCwgezB4M2UsMHg4MSwweDJjLDB4YTAsMHgwYiwweGI5LDB4MGMsMHhjZSwweGUyLDB4YjIsMHg4MCwweDhlLDB4YTAsMHgwYiwweDI4LDB4MDAgfSwKKyAgMTYsIDB4YmE0MCwgMCwgezB4ZGEsMHg4MCwweDNjLDB4YjAsMHgwZiwweGUwLDB4ODMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmE1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGEwLDB4MDAsMHhjOCwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YmE2MCwgMCwgezB4MDAsMHgwZiwweDg0LDB4MjMsMHhhMCwweDAwLDB4ZjAsMHg0MCwweDNlLDB4MTAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAyLDB4ZjggfSwKKyAgMTYsIDB4YmE3MCwgMCwgezB4NDgsMHgzZSwweDEwLDB4MGMsMHg4MCwweDAzLDB4YzAsMHgxMCwweGY4LDB4ODAsMHgzZSwweDAwLDB4MGYsMHgwMCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4YmE4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweDM2LDB4NDIgfSwKKyAgMTYsIDB4YmE5MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjQsMHgxOCwweGY5LDB4MTAsMHgzYywweDQ4LDB4NjgsMHg5MiwweDEzLDB4ZTQsMHgwMCwweGE5LDB4MTEgfSwKKyAgMTYsIDB4YmFhMCwgMCwgezB4YjIsMHg2MCwweDBlLDB4OTEsMHgwMywweDI2LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg2MCwweDBjLDB4MTAsMHgwMywweDI0LDB4MDggfSwKKyAgMTYsIDB4YmFiMCwgMCwgezB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MjMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmFjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDgsMHg4OSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YmFkMCwgMCwgezB4NDIsMHg0OCwweDk0LDB4MDIsMHhlNCwweDAwLDB4ODksMHg4MCwweDIyLDB4NzAsMHgwOCwweDE0LDB4MjIsMHhhNCwweDAyLDB4ODkgfSwKKyAgMTYsIDB4YmFlMCwgMCwgezB4NDIsMHgyYSwweDcwLDB4MjgsMHg5MCwweDBhLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDQwLDB4MjgsMHg5MCwweDAyLDB4YTAgfSwKKyAgMTYsIDB4YmFmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4OTksMHgwMCwweDI2LDB4YzAgfSwKKyAgMTYsIDB4YmIwMCwgMCwgezB4MDMsMHg5MCwweDAyLDB4MjQsMHgwMSwweGE5LDB4MDAsMHgwZSwweDQwLDB4MGEsMHg5MCwweDQ2LDB4YzQsMHgwYSwweDg5LDB4MDAgfSwKKyAgMTYsIDB4YmIxMCwgMCwgezB4MjAsMHg0OCwweDBhLDB4OTAsMHgwMiwweDA1LDB4ODAsMHg4MSwweDQxLDB4YTAsMHg1OCwweDg4LDB4OTAsMHgwMiwweDI0LDB4MDggfSwKKyAgMTYsIDB4YmIyMCwgMCwgezB4OGQsMHg4MCwweDJmLDB4YzAsMHgwOCwweDk4LDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmIzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0MCwweDBiLDB4MTIsMHgwMiwweDg0LDB4MDAsMHg4MSwweDI0LDB4MmMgfSwKKyAgMTYsIDB4YmI0MCwgMCwgezB4NTgsMHgwYSwweDMyLDB4MjIsMHhjNSwweDg0LDB4YTEsMHgwMCwweDIwLDB4NTAsMHgwOCwweGIwLDB4MDIsMHg4NSwweDA4LDB4ODEgfSwKKyAgMTYsIDB4YmI1MCwgMCwgezB4NDAsMHgyMCwweDVhLDB4MDgsMHgxNiwweDgyLDB4MDQsMHgwMCwweGE1LDB4MDAsMHgyZCwweDQwLDB4MDgsMHgxMiwweDgyLDB4ODIgfSwKKyAgMTYsIDB4YmI2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDM2LDB4MTQgfSwKKyAgMTYsIDB4YmI3MCwgMCwgezB4MGYsMHg4NSwweDIzLDB4MDEsMHg0MCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDQzLDB4YzAsMHgwOCwweGNhLDB4MDAgfSwKKyAgMTYsIDB4YmI4MCwgMCwgezB4MzIsMHg4MCwweDBlLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjMCwweDAwLDB4MzIsMHgwOCwweDJjLDB4MDIsMHgwMywweDIwLDB4MDggfSwKKyAgMTYsIDB4YmI5MCwgMCwgezB4YzgsMHgwMCwweDNmLDB4MDAsMHgwYywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmJhMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4OTEsMHg0MywweGY0LDB4MDQsMHhmOSwweDEwLDB4M2UgfSwKKyAgMTYsIDB4YmJiMCwgMCwgezB4NDQsMHgwZCwweDExLDB4MDMsMHhlNCwweDQ0LDB4NTksMHg0MCwweDNlLDB4NTAsMHg0ZiwweDUwLDB4NDMsMHhkNCwweDAyLDB4ZmQgfSwKKyAgMTYsIDB4YmJjMCwgMCwgezB4NDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDBiLDB4ZTUsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4NGYsMHhkMCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4YmJkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHg2NiwweDYwLDB4YzksMHhlMCwweDMyLDB4NDQgfSwKKyAgMTYsIDB4YmJlMCwgMCwgezB4MGYsMHg5YywweDAzLDB4ZTQsMHgwMCwweGRkLDB4ODQsMHgzZiwweDY4LDB4OGYsMHhkOCwweDQyLDB4ZTYsMHhhMCwweGRkLDB4YTQgfSwKKyAgMTYsIDB4YmJmMCwgMCwgezB4MzMsMHg2OCwweDBkLDB4NzAsMHgwMywweDI1LDB4MDAsMHhjOSwweGUwLDB4YjIsMHg2OCwweDBjLDB4OWEsMHhjMywweDI2LDB4MDAgfSwKKyAgMTYsIDB4YmMwMCwgMCwgezB4OTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDlhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmMxMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4MDAsMHg4OCwweDgwLDB4YWEsMHgyMCwweDhiLDB4ODgsMHgwMiwweGUyLDB4ODgsMHhiOCwweDAxLDB4MmUgfSwKKyAgMTYsIDB4YmMyMCwgMCwgezB4MDAsMHgwYiwweDg0LDB4MDIsMHhlMiwweGIwLDB4ODgsMHg1MCwweDIyLDB4MTQsMHgwOCwweDgwLDB4MDIsMHg4MiwweDgwLDB4ODggfSwKKyAgMTYsIDB4YmMzMCwgMCwgezB4ZTAsMHhiNiwweDNhLDB4MDgsMHhjZSwweGEyLDB4MjEsMHgwOCwweDg4LDB4MDAsMHgyZSwweDAwLDB4MGIsMHhjNCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4YmM0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHg2MCwweDY4LDB4NDggfSwKKyAgMTYsIDB4YmM1MCwgMCwgezB4NWIsMHgxNiwweDAyLDB4YzQsMHgyMCwweGExLDB4NDAsMHg2YywweDUwLDB4MGIsMHgxNCwweDAyLDB4YzQsMHgwMCwweGExLDB4MDAgfSwKKyAgMTYsIDB4YmM2MCwgMCwgezB4MjQsMHg0MCwweDBiLDB4OTAsMHgyMiwweDE0LDB4OTAsMHg4NSwweDQyLDB4MjEsMHg1MCwweDViLDB4NTAsMHgxYSwweDE1LDB4MDAgfSwKKyAgMTYsIDB4YmM3MCwgMCwgezB4OTUsMHgwMCwweDJkLDB4NDAsMHgwYiwweDUxLDB4MGEsMHg4MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmM4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDEsMHg4OSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHg0NiwweGU0LDB4MDAsMHhiOSwweDAxLDB4MmUgfSwKKyAgMTYsIDB4YmM5MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MjAsMHhlNCwweDAwLDB4YjksMHgwMCwweDI2LDB4NDAsMHgxOCwweGI4LDB4MDIsMHhhNCwweDAyLDB4OGQgfSwKKyAgMTYsIDB4YmNhMCwgMCwgezB4MDgsMHgyZiwweDQwLDB4OGIsMHhkMCwweDAyLDB4MjQsMHgwMCwweDhkLDB4MjAsMHgyZiwweDQ4LDB4MGIsMHhkMCwweDAyLDB4ODYgfSwKKyAgMTYsIDB4YmNiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDMyLDB4NDAgfSwKKyAgMTYsIDB4YmNjMCwgMCwgezB4MGYsMHg5MCwweDAyLDB4ZTQsMHgxMCwweDQ5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGU5LDB4MDEgfSwKKyAgMTYsIDB4YmNkMCwgMCwgezB4MzYsMHg0MCwweDBmLDB4MTgsMHgxMywweDI0LDB4MTAsMHhjOSwweDgyLDB4MzIsMHg0MCwweDdmLDB4OTAsMHgyMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4YmNlMCwgMCwgezB4ZDksMHgyMCwweDNlLDB4NzIsMHgwZiwweDkwLDB4MDMsMHhhOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmNmMCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MDIsMHhmMSwweDAxLDB4MTYsMHg0MCwweDRmLDB4OTAsMHgwMywweGU1LDB4MTAsMHhmOSwweDA4LDB4MmUgfSwKKyAgMTYsIDB4YmQwMCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MTMsMHhlNCwweDAwLDB4YzksMHgwMSwweDNhLDB4NDAsMHgxZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YmQxMCwgMCwgezB4MjAsMHgzNCwweDQwLDB4OGMsMHg5MCwweDAzLDB4YzQsMHgwOCwweGY5LDB4MDAsMHgzZSwweDYwLDB4MGYsMHgxMCwweDAzLDB4NGEgfSwKKyAgMTYsIDB4YmQyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA4LDB4ZjgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4YmQzMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAyLDB4NGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGQwLDB4MDAgfSwKKyAgMTYsIDB4YmQ0MCwgMCwgezB4M2UsMHgwMCwweDBlLDB4ODEsMHgwMywweDMwLDB4MDAsMHhjYywweDQwLDB4MzMsMHgwMCwweDBjLDB4YzAsMHgwYiwweDIwLDB4MjAgfSwKKyAgMTYsIDB4YmQ1MCwgMCwgezB4ZTgsMHgwMCwweDNlLDB4MTAsMHgwZiwweGMwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmQ2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDQsMHhiYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiZSwweGM4LDB4NmYgfSwKKyAgMTYsIDB4YmQ3MCwgMCwgezB4ODAsMHgwYiwweGUxLDB4MjIsMHhhOCwweDAwLDB4OGUsMHgyMCwweDJmLDB4ODAsMHgwYiwweGUwLDB4MjMsMHg2OCwweDAwLDB4OGEgfSwKKyAgMTYsIDB4YmQ4MCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MDgsMHhlMCwweDAyLDB4MjksMHgwMCwweDhhLDB4MDAsMHgyZSwweGE4LDB4MGIsMHhhMCwweDAwLDB4Y2EgfSwKKyAgMTYsIDB4YmQ5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAgfSwKKyAgMTYsIDB4YmRhMCwgMCwgezB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4YzEsMHgyYywweGUwLDB4MGIsMHgzOCwweDU2LDB4MmMsMHgxMCwweDEzLDB4MDAgfSwKKyAgMTYsIDB4YmRiMCwgMCwgezB4MmUsMHhjMCwweDBhLDB4MzgsMHg2YSwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjAsMHgwMCwweDA5LDB4ODAsMHgyMiwweDRjLDB4NDIgfSwKKyAgMTYsIDB4YmRjMCwgMCwgezB4YTMsMHgwMCwweDJjLDB4ZTAsMHgwYiwweDI0LDB4ODAsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmRkMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDgsMHhiNywweDI0LDB4MmYsMHhlMCwweDA5LDB4MzksMHgwMiwweDFjLDB4MDEsMHhiNiwweDAwLDB4MmQgfSwKKyAgMTYsIDB4YmRlMCwgMCwgezB4OTAsMHgwYiwweDYwLDB4OTIsMHg4ZSwweDAwLDB4ODYsMHg4MiwweDJkLDB4YzIsMHgwYiwweGYwLDB4MDIsMHg1YywweDA2LDB4ODcgfSwKKyAgMTYsIDB4YmRmMCwgMCwgezB4MDAsMHg2MCwweGMwLDB4MjksMHg3MCwweDAyLDB4NWMsMHgwMCwweDg2LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg2MCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4YmUwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZiwweDQwLDB4ZjMsMHhlNCwweDNkLDB4ZTggfSwKKyAgMTYsIDB4YmUxMCwgMCwgezB4MGQsMHg3OSwweDBiLDB4MWUsMHhjMCwweDY3LDB4ODAsMHgyZCwweGUwLDB4MGYsMHg3MCwweDQzLDB4MWQsMHg4MCwweGQ1LDB4MDAgfSwKKyAgMTYsIDB4YmUyMCwgMCwgezB4M2QsMHg2MCwweDBlLDB4NzgsMHgwMywweDFlLDB4MDAsMHhjZCwweDgwLDB4MzEsMHhlMCwweDBkLDB4YzgsMHgwMywweDRlLDB4MDAgfSwKKyAgMTYsIDB4YmUzMCwgMCwgezB4ZTUsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDQ4LDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmU0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4ODAsMHhmYiwweDAwLDB4NzAsMHhjMCwweDZlLDB4YjYsMHgxMywweGFkLDB4NDAsMHhmYSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YmU1MCwgMCwgezB4YzAsMHgwZiwweDIwLDB4NDMsMHgyZCwweDE4LDB4NTksMHgwMCwweDNlLDB4MDAsMHgwMywweGIwLDB4MGIsMHhlMCwweDAwLDB4ZmEgfSwKKyAgMTYsIDB4YmU2MCwgMCwgezB4MDAsMHhiZSwweDAwLDB4MGUsMHhiMCwweDEzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YmU3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDQwLDB4ZmYsMHg4MCwweDNmLDB4ZTYgfSwKKyAgMTYsIDB4YmU4MCwgMCwgezB4MGYsMHhmOCwweDIzLDB4MmUsMHgwNCwweGZmLDB4OTAsMHgzZiwweGU0LDB4MGQsMHhiYSwweDAzLDB4ZmYsMHg0MCwweGNmLDB4ODAgfSwKKyAgMTYsIDB4YmU5MCwgMCwgezB4MjIsMHhlMSwweDBjLDB4MzksMHg0MywweDMyLDB4MTAsMHhlYywweDkwLDB4MzMsMHgyMCwweDhlLDB4YzgsMHgwMywweGYyLDB4MDAgfSwKKyAgMTYsIDB4YmVhMCwgMCwgezB4ZGYsMHg4MCwweDNmLDB4NjAsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmViMCwgMCwgezB4YTgsMHgxMSwweDljLDB4NDAsMHhiNywweDkwLDB4M2MsMHhlMCwweDBiLDB4M2EsMHgwMywweDRlLDB4ODAsMHhmMywweGIxLDB4MmQgfSwKKyAgMTYsIDB4YmVjMCwgMCwgezB4MDQsMHg0YywweDM4LDB4MjMsMHhhZSwweDAwLDB4ODAsMHg4MCwweDM0LDB4ZTgsMHg0ZCwweDc4LDB4MDIsMHgzZSwweDgwLDB4ODcgfSwKKyAgMTYsIDB4YmVkMCwgMCwgezB4YTAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDAyLDB4YzAsMHg4MCwweDg2LDB4MDIsMHgyZCwweDQxLDB4MGIsMHg3MCwweDAyLDB4ZWEgfSwKKyAgMTYsIDB4YmVlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDQ4LDB4MzcsMHgwMSwweDJkLDB4YzkgfSwKKyAgMTYsIDB4YmVmMCwgMCwgezB4MGIsMHg3MiwweDIyLDB4MWMsMHg4NCwweGI1LDB4MTYsMHgwZCwweGM0LDB4MTksMHg0MCwweDQyLDB4ZGMsMHg4MCwweDg3LDB4MDAgfSwKKyAgMTYsIDB4YmYwMCwgMCwgezB4MjAsMHhjOCwweDg4LDB4NzMsMHgwYSwweDljLDB4ODAsMHhiNSwweDAwLDB4MjksMHhjMCwweDBhLDB4NDgsMHgwMiwweGMwLDB4MDIgfSwKKyAgMTYsIDB4YmYxMCwgMCwgezB4OTUsMHgwMCwweDJkLDB4NDIsMHgwYiwweDU4LDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmYyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MmEsMHhlMCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MjAsMHhhMSwweDAxLDB4MjQgfSwKKyAgMTYsIDB4YmYzMCwgMCwgezB4YzEsMHgwOCwweDAwLDB4MDIsMHg4YywweDAwLDB4ODEsMHgwMCwweDI0LDB4ODAsMHgwOSwweDM4LDB4MGEsMHg2MCwweDgwLDB4OTIgfSwKKyAgMTYsIDB4YmY0MCwgMCwgezB4NDAsMHgyYSwweDAwLDB4MGEsMHgzMCwweDAyLDB4YzAsMHgwMCwweDgwLDB4YzgsMHgyYywweDcyLDB4MGIsMHgxNCwweDAyLDB4YzggfSwKKyAgMTYsIDB4YmY1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmYsMHgwMCwweDJmLDB4ZjQgfSwKKyAgMTYsIDB4YmY2MCwgMCwgezB4OGYsMHhmMCwweDAzLDB4M2MsMHgwMCwweGI5LDB4MDAsMHgzZSwweDQwLDB4MDksMHg5MCwweDAzLDB4ZmMsMHgwMiwweGMzLDB4MDEgfSwKKyAgMTYsIDB4YmY3MCwgMCwgezB4MzIsMHhjMCwweDQ4LDB4YjgsMHgxMywweGExLDB4MDAsMHhiYSwweDAwLDB4MmEsMHgwMCwweDBhLDB4YTAsMHgwNywweGVjLDB4MDAgfSwKKyAgMTYsIDB4YmY4MCwgMCwgezB4ZGIsMHhjOCwweDNlLDB4OTAsMHgwZiwweGEyLDB4MDIsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmY5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAyLDB4M2UsMHhjNCwweDBmLDB4YjAsMHg2MywweGVjLDB4MDEsMHhmOCwweDQwLDB4M2UgfSwKKyAgMTYsIDB4YmZhMCwgMCwgezB4NDAsMHgwYiwweDgwLDB4MDMsMHhjYywweDAwLDB4ZmEsMHg0MiwweDNlLDB4YzAsMHgwZiwweGI1LDB4MDAsMHhhYywweDU4LDB4ZTkgfSwKKyAgMTYsIDB4YmZiMCwgMCwgezB4ODIsMHgzZSwweGMwLDB4MWQsMHg5MCwweDAzLDB4ZWMsMHgwNCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YmZjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDBjLDB4ZGYsMHgwMCwweDdmLDB4YzAgfSwKKyAgMTYsIDB4YmZkMCwgMCwgezB4MmMsMHhmMCwweDAzLDB4N2MsMHgwMSwweGM3LDB4MDAsMHgzMywweDQwLDB4OGYsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGQ4LDB4MDAgfSwKKyAgMTYsIDB4YmZlMCwgMCwgezB4MTUsMHg0NCwweDBjLDB4ZTAsMHgxYiwweDNjLDB4MDAsMHhjYiwweDBlLDB4MzMsMHhjMCwweDVjLDB4NjIsMHgwMiwweDFjLDB4MDIgfSwKKyAgMTYsIDB4YmZmMCwgMCwgezB4YzUsMHgwMCwweDJiLDB4ODAsMHgwZiwweGMwLDB4ODcsMHg4MCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzAwMCwgMCwgezB4ODEsMHg0NCwweDZjLDB4MTAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHg1MiwweDBjLDB4MDEsMHhmYSwweGM0LDB4MjIgfSwKKyAgMTYsIDB4YzAxMCwgMCwgezB4NjEsMHgwYiwweDg4LDB4MDMsMHg2YywweDAwLDB4ODgsMHg0NywweDJhLDB4MDAsMHgwZSwweDFjLDB4MDIsMHgyMCwweDAyLDB4ODggfSwKKyAgMTYsIDB4YzAyMCwgMCwgezB4MDAsMHhhYSwweDAwLDB4MjgsMHg5MCwweDBhLDB4MmMsMHgwNCwweGE4LDB4MDAsMHgyMiwweDkwLDB4MGIsMHg4MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YzAzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4YzEgfSwKKyAgMTYsIDB4YzA0MCwgMCwgezB4MDgsMHgzMCwweDEyLDB4NmMsMHgwMCwweDg4LDB4ODgsMHgyYSwweDMwLDB4MGIsMHhiOCwweDAyLDB4ZWMsMHgwMCwweDliLDB4MDggfSwKKyAgMTYsIDB4YzA1MCwgMCwgezB4MmEsMHg0MCwweDA4LDB4YjgsMHgwMiwweDIwLDB4MDAsMHg4MiwweDEwLDB4MjIsMHgwMCwweDA4LDB4YTAsMHgyMiwweGEwLDB4MDAgfSwKKyAgMTYsIDB4YzA2MCwgMCwgezB4OGIsMHgwMCwweDJhLDB4MDIsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzA3MCwgMCwgezB4MDgsMHgwMCwweDBjLDB4MDAsMHhiMywweDIwLDB4MmMsMHhjMiwweDA4LDB4MzYsMHgwMiwweDJjLDB4YzAsMHhhMCwweDA4LDB4MjAgfSwKKyAgMTYsIDB4YzA4MCwgMCwgezB4MDAsMHgwYiwweDMzLDB4NDYsMHhjZCwweDI4LDB4ODAsMHgyMCwweDI4LDB4YzAsMHgwYiwweDMyLDB4MDIsMHgwYywweDIwLDB4ODEgfSwKKyAgMTYsIDB4YzA5MCwgMCwgezB4MzAsMHgyOCwweGMwLDB4MDgsMHgxMCwweDAyLDB4ODEsMHgwMCwweGFhLDB4MDAsMHgyOCwweDAwLDB4MDMsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YzBhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHg3YywweDAwLDB4ZmIsMHgyOCwweDJlLDB4Y2MgfSwKKyAgMTYsIDB4YzBiMCwgMCwgezB4MGMsMHg3MCwweDUzLDB4N2QsMHgwOSwweDg4LDB4MDAsMHhiYSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZmQsMHg4MCwweGRhLDB4NjAgfSwKKyAgMTYsIDB4YzBjMCwgMCwgezB4M2EsMHg1MCwweDhjLDB4YTIsMHg4MywweDJjLDB4ODAsMHg0YiwweDIwLDB4MzAsMHhjMCwweDI4LDB4YTAsMHgwMywweGExLDB4MDAgfSwKKyAgMTYsIDB4YzBkMCwgMCwgezB4YzksMHgwMCwweDNhLDB4MDAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzBlMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDQsMHhmYiwweDAwLDB4N2UsMHhjOSwweDBiLDB4YjYsMHgwMywweGZjLDB4YzAsMHhmOCwweDBjLDB4M2YgfSwKKyAgMTYsIDB4YzBmMCwgMCwgezB4MDAsMHg0ZiwweGMzLDB4NDMsMHgyYywweDAwLDB4YjgsMHgzOCwweDNmLDB4OGUsMHg1ZSwweGYwLDB4NDMsMHhlMCwweDEwLDB4ZjggfSwKKyAgMTYsIDB4YzEwMCwgMCwgezB4MzAsMHgzZiwweDAxLDB4MGYsMHhkMCwweDAzLDB4NzAsMHgwMCwweGZjLDB4MDAsMHgzNywweDAwLDB4MGQsMHhkMCwweDA3LDB4ZTkgfSwKKyAgMTYsIDB4YzExMCwgMCwgezB4MDMsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweGUwLDB4Y2MsMHg4MCwweDMzLDB4YzAgfSwKKyAgMTYsIDB4YzEyMCwgMCwgezB4MGQsMHhmMCwweDgzLDB4ZmMsMHg4MCwweGRjLDB4OTQsMHgzMywweGMwLDB4MWMsMHhmMSwweDAzLDB4N2QsMHg4YywweGZmLDB4MzAgfSwKKyAgMTYsIDB4YzEzMCwgMCwgezB4M2YsMHgzMCwweDhmLDB4YzgsMHgwMywweDdlLDB4MTAsMHhjZiwweDkwLDB4MzksMHhhMCwweDhkLDB4ZjgsMHgwMywweGFlLDB4MDAgfSwKKyAgMTYsIDB4YzE0MCwgMCwgezB4ZDUsMHg4MCwweDEzLDB4ZTAsMHgwYywweDU4LDB4MDMsMHhmMCwweDAxLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzE1MCwgMCwgezB4ODAsMHgxMCwweGRkLDB4MDgsMHg4OCwweDAwLDB4MjMsMHhjNCwweDA4LDB4ZmMsMHgwMiwweGVjLDB4YTgsMHhjYiwweDIwLDB4MjEgfSwKKyAgMTYsIDB4YzE2MCwgMCwgezB4YzIsMHgwZCwweGY3LDB4MTIsMHgxYywweDQwLDB4ZGYsMHgzMCwweDIyLDB4YTAsMHgwYiwweDg4LDB4MDIsMHgyZSwweDA0LDB4ZGIgfSwKKyAgMTYsIDB4YzE3MCwgMCwgezB4MjEsMHgyMiwweGMwLDB4MDgsMHhiOCwweDIyLDB4MmUsMHgwMCwweGI5LDB4ODAsMHgyYSwweDYwLDB4MGEsMHg4OCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YzE4MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4NDUsMHhjYywweDEwLDB4ODAsMHgyYywweDI4LDB4Y2EgfSwKKyAgMTYsIDB4YzE5MCwgMCwgezB4NjgsMHgzMCwweDAyLDB4OGQsMHgwMCwweDliLDB4MjAsMHgyOCwweGM0LDB4MDgsMHgzMiwweDAyLDB4Y2MsMHgxMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4YzFhMCwgMCwgezB4MjQsMHgwOCwweDBiLDB4ODAsMHg0MiwweDZjLDB4MDAsMHg4MywweDAwLDB4MmEsMHhjYSwweDNhLDB4YjAsMHgwMiwweDhjLDB4MDQgfSwKKyAgMTYsIDB4YzFiMCwgMCwgezB4YjAsMHgwNCwweDI4LDB4YzAsMHgwOCwweDEwLDB4MDIsMHhlMywweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzFjMCwgMCwgezB4YzAsMHgxNSwweDhjLDB4MDIsMHg4MCwweDQwLDB4YWEsMHhjMCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHg5YiwweDIwLDB4MmEgfSwKKyAgMTYsIDB4YzFkMCwgMCwgezB4YzAsMHg4OCwweGIwLDB4MDIsMHhhYywweDAwLDB4OWIsMHgwMCwweDI2LDB4ZTAsMHgwMywweDgwLDB4ODIsMHgyYywweDI4LDB4OWIgfSwKKyAgMTYsIDB4YzFlMCwgMCwgezB4MjAsMHgyMiwweGUxLDB4MGIsMHhiMiwweDAyLDB4YWMsMHg4MCwweGI4LDB4ODAsMHgyYSwweGMxLDB4MGEsMHg5OCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4YzFmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YzgsMHg1MCwweDNhLDB4YzAgfSwKKyAgMTYsIDB4YzIwMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGRiLDB4ODgsMHhiYSwweGMwLDB4MDgsMHhiMCwweDAzLDB4NmMsMHgwOCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4YzIxMCwgMCwgezB4MzYsMHg2MCwweDBmLDB4OGMsMHg2MywweDZjLDB4MDAsMHhjYiwweGMwLDB4M2EsMHg4MCwweDBlLDB4YmUsMHgwMywweGFmLDB4ODQgfSwKKyAgMTYsIDB4YzIyMCwgMCwgezB4NzksMHg4MCwweDNhLDB4ODgsMHgwNCwweDk4LDB4MDEsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzIzMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmYywweDgwLDB4MzUsMHhjMCwweDRmLDB4ZjAsMHgwMywweGRjLDB4MDAsMHhlZiwweDAwLDB4MzcgfSwKKyAgMTYsIDB4YzI0MCwgMCwgezB4YzAsMHhhZiwweGYwLDB4MDMsMHgxYywweDAxLDB4NmYsMHgwMCwweDEzLDB4MDAsMHgwZiwweGMxLDB4MjMsMHhmYywweGI4LDB4ZmYgfSwKKyAgMTYsIDB4YzI1MCwgMCwgezB4MDQsMHgzNywweGMwLDB4MGMsMHhmOCwweDQzLDB4N2UsMHgwNCwweGZkLDB4MDAsMHgzZiwweDA0LDB4MGYsMHhkMCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4YzI2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4YzgsMHg0MCwweDNhLDB4YzAgfSwKKyAgMTYsIDB4YzI3MCwgMCwgezB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4NDAsMHgzOCwweGMxLDB4MGUsMHhiMCwweDQzLDB4MmMsMHgwOCwweGMzLDB4MDAgfSwKKyAgMTYsIDB4YzI4MCwgMCwgezB4M2UsMHg0MCwweDBlLDB4ODIsMHgwMywweDZkLDB4MDAsMHhkYiwweDQwLDB4MzIsMHhjMSwweDVmLDB4YjQsMHhhMywweGVkLDB4MjAgfSwKKyAgMTYsIDB4YzI5MCwgMCwgezB4YzksMHg0MCwweDMyLDB4ZTAsMHg4ZiwweDk4LDB4NDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzJhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4OCwweDAwLDB4MjMsMHhjMCwweDI4LDB4ZjUsMHhjMiwweGZjLDB4MDAsMHhiMywweDA0LDB4MjMgfSwKKyAgMTYsIDB4YzJiMCwgMCwgezB4YzEsMHg0OCwweGYwLDB4MjIsMHhiYywweDA2LDB4YWYsMHgwMCwweDBlLDB4NDAsMHgwOCwweDAwLDB4MDIsMHhjZCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4YzJjMCwgMCwgezB4MDEsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZWUsMHgwMCwweDgxLDB4ZTAsMHgzNCwweGEwLDB4MGIsMHg5MCwweDAyLDB4MzIgfSwKKyAgMTYsIDB4YzJkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAyLDB4ODAsMHgwMCwweDI4LDB4YzAgfSwKKyAgMTYsIDB4YzJlMCwgMCwgezB4MDksMHgzYywweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGEsMHhiMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDEgfSwKKyAgMTYsIDB4YzJmMCwgMCwgezB4MmMsMHgwMCwweDBhLDB4MDUsMHgwMiwweGNkLDB4NTgsMHhiYiwweDAwLDB4MjAsMHgwMCwweDBhLDB4M2QsMHgwMiwweGNmLDB4NDAgfSwKKyAgMTYsIDB4YzMwMCwgMCwgezB4MjEsMHgyMCwweDYwLDB4YzAsMHgwOSwweDEwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzMxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHg4NCwweDgwLDB4MjgsMHhlNCwweDg4LDB4NzgsMHg0MiwweGRlLDB4MDAsMHhiNywweDkwLDB4NjUgfSwKKyAgMTYsIDB4YzMyMCwgMCwgezB4ZTQsMHg4OCwweDdhLDB4NDIsMHg5ZSwweDQwLDB4YTcsMHg5MCwweDJkLDB4YTAsMHgwYSwweDQ4LDB4MjIsMHhkZSwweDA0LDB4YjcgfSwKKyAgMTYsIDB4YzMzMCwgMCwgezB4ODAsMHgyMywweDYwLDB4NDgsMHg3OCwweDQyLDB4ZmUsMHg4MCwweGFmLDB4OTAsMHg2NSwweGUwLDB4MGIsMHhlOCwweDAyLDB4YzggfSwKKyAgMTYsIDB4YzM0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4YzgsMHgwMCwweDM4LDB4YzAgfSwKKyAgMTYsIDB4YzM1MCwgMCwgezB4MGMsMHgzMCwweDAzLDB4Y2MsMHgwMCwweGZiLDB4MDAsMHgzYywweGMwLDB4MGUsMHhiYSwweDAzLDB4MGMsMHgwMCwweGMzLDB4MDAgfSwKKyAgMTYsIDB4YzM2MCwgMCwgezB4M2UsMHgwMCwweDRlLDB4MjIsMHgwMiwweGNjLDB4YzAsMHhmYiwweDQwLDB4MzAsMHhjMCwweDBhLDB4MzAsMHgwMywweGNlLDB4ODAgfSwKKyAgMTYsIDB4YzM3MCwgMCwgezB4ZTEsMHg0MSwweDMwLDB4YzksMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzM4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MjAsMHhmYywweDAwLDB4MzcsMHhjMiwweDBlLDB4ZjEsMHgyMywweGVjLDB4NDAsMHhmZiwweDA0LDB4M2EgfSwKKyAgMTYsIDB4YzM5MCwgMCwgezB4YzAsMHgwZiwweGIwLDB4MjMsMHhmYywweDAwLDB4ZmYsMHgwNCwweDNlLDB4YzAsMHgwZCwweGEwLDB4MDMsMHhmYywweDU4LDB4ZmYgfSwKKyAgMTYsIDB4YzNhMCwgMCwgezB4MDAsMHhiZiwweGMwLDB4MDYsMHhmMCwweDgzLDB4ZGMsMHg2MiwweGRmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4MTAgfSwKKyAgMTYsIDB4YzNiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZCwweDgwLDB4YzksMHgwMSwweDNlLDB4YzAgfSwKKyAgMTYsIDB4YzNjMCwgMCwgezB4OGMsMHhiMiwweDA3LDB4YWUsMHgwNCwweGNiLDB4ODAsMHgzYSwweGM4LDB4NGMsMHhiMiwweDAzLDB4MmMsMHg4NCwweGNiLDB4MzAgfSwKKyAgMTYsIDB4YzNkMCwgMCwgezB4YjAsMHhlMCwweDBkLDB4ODgsMHgwYiwweDJjLDB4MDAsMHhlYiwweDAwLDB4MzAsMHgwMCwweDBjLDB4YmMsMHg4MywweDJkLDB4ODAgfSwKKyAgMTYsIDB4YzNlMCwgMCwgezB4ZmIsMHgwMCwweDMyLDB4YzAsMHgwYywweDkwLDB4MDMsMHhlYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzNmMCwgMCwgezB4NDgsMHgxMSwweDljLDB4NDAsMHg4NywweDAwLDB4MmMsMHhjYywweDA4LDB4NzYsMHg4MiwweDNjLDB4ODIsMHg4NywweDAwLDB4MjEgfSwKKyAgMTYsIDB4YzQwMCwgMCwgezB4YzIsMHg4ZCwweDMyLDB4ODIsMHgwZCwweDRjLDB4YTcsMHgyOCwweDIxLDB4ODAsMHgwOCwweDQwLDB4MDIsMHgxZCwweDgwLDB4YmYgfSwKKyAgMTYsIDB4YzQxMCwgMCwgezB4MjAsMHgzNSwweDQwLDB4MDksMHg3MiwweDQzLDB4NWMsMHhhMCwweGI3LDB4MDAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4YzQyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4ODQsMHg4MCwweDJkLDB4ZTAgfSwKKyAgMTYsIDB4YzQzMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4ZGUsMHhjMCwweDhmLDB4ODAsMHgyOCwweGVjLDB4MjgsMHg3YiwweDBhLDB4OWUsMHg5NCwweDgzLDB4ODQgfSwKKyAgMTYsIDB4YzQ0MCwgMCwgezB4MjMsMHhlMCwweDA5LDB4NTgsMHg1MCwweDllLDB4MTAsMHhhNywweGIwLDB4MjMsMHhlMCwweDBiLDB4NzgsMHgwMiwweDFlLDB4MjAgfSwKKyAgMTYsIDB4YzQ1MCwgMCwgezB4YjcsMHg4MCwweDIxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzQ2MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDIsMHg4MiwweDFjLDB4MmMsMHhjMCwweDI4LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweGMwLDB4MjAgfSwKKyAgMTYsIDB4YzQ3MCwgMCwgezB4YzAsMHgwOCwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDYwLDB4ZDIsMHgwOCwweDFkLDB4MDIsMHgwZiwweDIwLDB4YmIgfSwKKyAgMTYsIDB4YzQ4MCwgMCwgezB4MjQsMHgyNCwweGMwLDB4MGIsMHgzYywweDAyLDB4NGYsMHgwMCwweGIzLDB4ODAsMHgyOCwweGQ4LDB4MDksMHgzMiwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4YzQ5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTEsMHhhOCwweDAwLDB4Y2UsMHg4NCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4YzRhMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGNlLDB4YzAsMHgzYSwweDgwLDB4MDgsMHhhMCwweDAzLDB4YTgsMHgwMCwweGNhLDB4MDAgfSwKKyAgMTYsIDB4YzRiMCwgMCwgezB4MzMsMHg4MCwweDBkLDB4ZWMsMHgwMywweDNiLDB4ODAsMHhlZSwweDgyLDB4MzMsMHg4MCwweDBhLDB4YzAsMHg4NywweDEwLDB4NDAgfSwKKyAgMTYsIDB4YzRjMCwgMCwgezB4ZjYsMHhjMCwweDMzLDB4OTAsMHhhZCwweDY0LDB4MDMsMHhmYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzRkMCwgMCwgezB4NDgsMHgwMCwweGMwLDB4MDIsMHhmOCwweDAwLDB4M2MsMHgwMCwweDFmLDB4MDQsMHgwMywweGEwLDB4MDQsMHhmOCwweDMwLDB4M2UgfSwKKyAgMTYsIDB4YzRlMCwgMCwgezB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDQsMHgwZiwweDgwLDB4OTMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4YzRmMCwgMCwgezB4MTAsMHgzZSwweDAwLDB4MmMsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MTgsMHgzZSwweDEwLDB4MGUsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4YzUwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4YzUxMCwgMCwgezB4MGUsMHg5MCwweDAzLDB4YTQsMHgxMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MDQsMHg5MCwweDAzLDB4MjQsMHgwMCwweDQxLDB4MDAgfSwKKyAgMTYsIDB4YzUyMCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTEsMHgxMywweGUxLDB4MDgsMHhmOCwweDAwLDB4MzIsMHg0MCwweDA4LDB4ODksMHg4MywweGEyLDB4MDAgfSwKKyAgMTYsIDB4YzUzMCwgMCwgezB4YzksMHg4MCwweDMyLDB4NDAsMHgwYywweDkwLDB4MGIsMHgwMiwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzU0MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDIsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBkLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YzU1MCwgMCwgezB4NDAsMHg0OCwweDkwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHg4YiwweDk0LDB4NDIsMHhlMiwweDIwLDB4YjggfSwKKyAgMTYsIDB4YzU2MCwgMCwgezB4MDAsMHhhMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4ZTUsMHgwNCwweGE5LDB4OTAsMHgzNCwweDYwLDB4MDgsMHg5MCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YzU3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDEwLDB4OTksMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4YzU4MCwgMCwgezB4MGEsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyNCwweDQwLDB4MGEsMHgxMCwweDAyLDB4MDQsMHgwMCwweGE5LDB4MDAgfSwKKyAgMTYsIDB4YzU5MCwgMCwgezB4MmEsMHg0MCwweDBiLDB4OTAsMHg4MiwweGUwLDB4MDEsMHhiOCwweDAwLDB4MjAsMHg0MCwweDNhLDB4OTAsMHgwMiwweGE0LDB4NDQgfSwKKyAgMTYsIDB4YzVhMCwgMCwgezB4ODksMHgwNCwweDIyLDB4NjIsMHgwOCwweDk4LDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzViMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4OGEsMHg4MSwweDAwLDB4MmMsMHg0OCwweDA5LDB4MzIsMHgwNiwweDQ0LDB4ODAsMHhiMSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4YzVjMCwgMCwgezB4NDgsMHgwYSwweDEyLDB4MDIsMHg4NCwweDgwLDB4YTEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4MDIsMHhjNSwweDAwLDB4YjEgfSwKKyAgMTYsIDB4YzVkMCwgMCwgezB4NDAsMHgyMCwweDUwLDB4MGEsMHgyNCwweDAyLDB4YzksMHgwMCwweGEzLDB4MDAsMHgyNCwweDQwLDB4MDgsMHgxMSwweDAyLDB4MDIgfSwKKyAgMTYsIDB4YzVlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDNlLDB4MTQgfSwKKyAgMTYsIDB4YzVmMCwgMCwgezB4MGUsMHg4MCwweDAzLDB4ZTEsMHg0MCwweGY4LDB4NTEsMHgzNiwweDE0LDB4MmUsMHg4NSwweDQzLDB4MjEsMHg0MiwweGU4LDB4NTAgfSwKKyAgMTYsIDB4YzYwMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgxMiwweGUwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwMCwweDFlLDB4ODAsMHg0MywweGEwLDB4MDAgfSwKKyAgMTYsIDB4YzYxMCwgMCwgezB4YzgsMHgwMSwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzYyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmZCwweDAwLDB4M2UsMHg0NCwweDRlLDB4MTEsMHgwMywweGE0LDB4NDAsMHhiNSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YzYzMCwgMCwgezB4NDQsMHgwZCwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZDksMHgxMCwweDNmLDB4NDAsMHgwZiwweDUwLDB4MDMsMHhlNSwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YzY0MCwgMCwgezB4NDAsMHgzZiwweDQwLDB4MGQsMHg0NCwweDAzLDB4ZjEsMHgwMCwweGY1LDB4MDIsMHgzZCwweGMwLDB4MmYsMHhkMiwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4YzY1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNywweDAwLDB4ZTksMHgwMCwweDM2LDB4NjAgfSwKKyAgMTYsIDB4YzY2MCwgMCwgezB4MGQsMHhkYSwweDAzLDB4ZTYsMHg0MCwweGY5LDB4NDAsMHgzZSwweDY4LDB4MGMsMHg5YSwweDAzLDB4NjYsMHgyMCwweDg5LDB4YTAgfSwKKyAgMTYsIDB4YzY3MCwgMCwgezB4MzMsMHg0MCwweDBlLDB4OTAsMHgwNywweGE2LDB4MDAsMHhmOSwweDgwLDB4M2UsMHg1MCwweDBjLDB4Y2EsMHgwMywweGYzLDB4ODAgfSwKKyAgMTYsIDB4YzY4MCwgMCwgezB4YzUsMHgwMiwweDMzLDB4NDAsMHgwYywweGMwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzY5MCwgMCwgezB4MzgsMHgxMCwweGUzLDB4MDQsMHg4OCwweGEyLDB4MjAsMHgzOCwweDA4LDB4ODAsMHgwMiwweGUzLDB4NDAsMHhiMCwweDgwLDB4MmUgfSwKKyAgMTYsIDB4YzZhMCwgMCwgezB4MjgsMHgwOCwweDhhLDB4ODIsMHgyMywweDgwLDB4ODgsMHg4MCwweDIyLDB4MDAsMHhkYiwweDg4LDB4MDIsMHg2MiwweDA0LDB4YjggfSwKKyAgMTYsIDB4YzZiMCwgMCwgezB4YjAsMHgyZSwweGE4LDB4ODgsMHg4ZSwweGEyLDB4ZWEsMHg4MCwweDg4LDB4MDAsMHgyYSwweDAwLDB4MjgsMHg4OCwweDAzLDB4OGUgfSwKKyAgMTYsIDB4YzZjMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDgyLDB4YTksMHgwOCwweDJjLDB4NTIgfSwKKyAgMTYsIDB4YzZkMCwgMCwgezB4MGIsMHgxNCwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjEsMHgwYywweDUyLDB4ODgsMHgxNCwweDAyLDB4NDQsMHgyMCwweDkxLDB4NjkgfSwKKyAgMTYsIDB4YzZlMCwgMCwgezB4MjAsMHg0MCwweDBhLDB4MTAsMHg4MiwweGM2LDB4ZTAsMHhiMSwweDBjLDB4MmMsMHg0OCwweDA4LDB4MDEsMHgwMiwweGUxLDB4OTMgfSwKKyAgMTYsIDB4YzZmMCwgMCwgezB4YTEsMHgwMSwweDI0LDB4NDEsMHgwYSwweDEwLDB4MDIsMHhjMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzcwMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4OSwweDA0LDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMCwweGU0LDB4MDAsMHgzOSwweDAyLDB4MGUgfSwKKyAgMTYsIDB4YzcxMCwgMCwgezB4NDAsMHgwOCwweDEwLDB4NjIsMHgyNCwweDAwLDB4OTEsMHgwMCwweDYyLDB4NDAsMHg4YiwweDgwLDB4MDIsMHhlMCwweDU0LDB4YjkgfSwKKyAgMTYsIDB4YzcyMCwgMCwgezB4MGMsMHgyZSwweDQwLDB4MDksMHhiNiwweDUyLDB4ZWMsMHgwMCwweGE5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5MiwweDgwLDB4ODYgfSwKKyAgMTYsIDB4YzczMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNCwweDAwLDB4ZTEsMHg2MCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4Yzc0MCwgMCwgezB4MGQsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MzAsMHgzZSwweDQwLDB4MmMsMHg5MCwweDQzLDB4NjQsMHgwNiwweGM5LDB4MDAgfSwKKyAgMTYsIDB4Yzc1MCwgMCwgezB4MzIsMHg0OSwweDBlLDB4OGQsMHg5MywweGUwLDB4MDAsMHhmOSwweDAwLDB4MmUsMHg0MCwweDJjLDB4OTQsMHgwMywweGM3LDB4NDAgfSwKKyAgMTYsIDB4Yzc2MCwgMCwgezB4ZTksMHgyMCwweDMwLDB4NTUsMHgwZSwweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzc3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDgwLDB4M2MgfSwKKyAgMTYsIDB4Yzc4MCwgMCwgezB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwNCwweGJlLDB4NDAsMHgwZiwweDg4LDB4MzMsMHg2MiwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4Yzc5MCwgMCwgezB4YzIsMHgzZSwweDQ4LDB4MmUsMHg4OCwweDMzLDB4ZTIsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDYwLDB4MGQsMHg4MCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4YzdhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4YzdiMCwgMCwgezB4MGQsMHg4MCwweDAzLDB4YTAsMHgwNCwweGU4LDB4NDAsMHhiYSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwNCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4YzdjMCwgMCwgezB4M2EsMHgwMCwweDBlLDB4OGMsMHgwMywweGUwLDB4MDAsMHhmOCwweDAyLDB4MzIsMHgwMCwweDBlLDB4ODAsMHgwMywweDYxLDB4MjAgfSwKKyAgMTYsIDB4YzdkMCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MTYsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzdlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4YSwweDAwLDB4MmUsMHg4MCwweDA4LDB4ZTIsMHgwMywweDI4LDB4MDAsMHg4YSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4YzdmMCwgMCwgezB4ODAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDA0LDB4OGEsMHgwMCwweDJlLDB4YTIsMHgwOSwweGU4LDB4MDIsMHhmYSwweDA0LDB4YmUgfSwKKyAgMTYsIDB4YzgwMCwgMCwgezB4MDAsMHhhMiwweDgwLDB4MDgsMHhjZCwweDgyLDB4MzMsMHgyMCwweGI2LDB4YzAsMHgzNywweGEwLDB4NGIsMHhjOCwweDgyLDB4Y2EgfSwKKyAgMTYsIDB4YzgxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAwLDB4ODMsMHgwMCwweDI2LDB4YzAgfSwKKyAgMTYsIDB4YzgyMCwgMCwgezB4MDksMHgzOCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4YzgzMCwgMCwgezB4MjgsMHhlMCwweDBiLDB4MzAsMHgwMiwweGNlLDB4ODEsMHhiMywweDAwLDB4NjIsMHhjMCwweDA4LDB4M2MsMHgwMiwweDRmLDB4MDAgfSwKKyAgMTYsIDB4Yzg0MCwgMCwgezB4YjMsMHhhMCwweDIwLDB4YjAsMHgwMywweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzg1MCwgMCwgezB4YTAsMHgwMSwweDBjLDB4NDEsMHg4NywweDM0LDB4MmQsMHhjMCwweDA4LDB4NjAsMHgwMiwweDllLDB4NDAsMHhiNywweGEwLDB4MmQgfSwKKyAgMTYsIDB4Yzg2MCwgMCwgezB4YzAsMHgwOCwweDczLDB4MDIsMHhkYywweDAwLDB4ODcsMHgyMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4ODIsMHhkZCwweDg1LDB4YmYgfSwKKyAgMTYsIDB4Yzg3MCwgMCwgezB4ODEsMHg2MywweGM4LDB4ODgsMHg3YiwweDAyLDB4MWMsMHgwMCwweGI3LDB4NDAsMHg2NSwweDAwLDB4MWIsMHg3MiwweDAyLDB4ZTggfSwKKyAgMTYsIDB4Yzg4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4MSwweDNkLDB4ZTAgfSwKKyAgMTYsIDB4Yzg5MCwgMCwgezB4ZGQsMHg3MCwweDAzLDB4ZmUsMHg4MCwweGY3LDB4OTAsMHgzZiwweGUwLDB4MmMsMHg3OSwweDAzLDB4ZmUsMHg4MCwweGM3LDB4YTAgfSwKKyAgMTYsIDB4YzhhMCwgMCwgezB4MzksMHhlMCwweDBmLDB4N2EsMHgwMiwweGRlLDB4ODQsMHhmNywweGMyLDB4MzEsMHhmMiwweDBjLDB4NzksMHgwMywweDVlLDB4MDQgfSwKKyAgMTYsIDB4YzhiMCwgMCwgezB4ZjcsMHg4NCwweDMxLDB4NjAsMHgwZiwweDdlLDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzhjMCwgMCwgezB4MDgsMHgxZCwweGFkLDB4MGEsMHhmYiwweDYwLDB4N2UsMHhkNCwweDBmLDB4MzAsMHgwMywweDZjLDB4MDAsMHhjYiwweDAwLDB4MzIgfSwKKyAgMTYsIDB4YzhkMCwgMCwgezB4ZGUsMHgyZiwweGIyLDB4MDMsMHhlZCwweDQyLDB4MWIsMHg2MCwweDNlLDB4YzEsMHgwZCwweGIxLDB4MDMsMHhlYywweDUwLDB4ZjcgfSwKKyAgMTYsIDB4YzhlMCwgMCwgezB4ODAsMHgzZCwweGQ4LDB4MmUsMHgzMiwweDAzLDB4ZWMsMHgzMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YzhmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDAwLDB4Y2IsMHhkMCwweDNmLDB4ZjAgfSwKKyAgMTYsIDB4YzkwMCwgMCwgezB4NGMsMHhmOCwweDEzLDB4ZmUsMHgwMCwweGNmLDB4ODgsMHgzZiwweGUwLDB4MGMsMHhmOCwweDQzLDB4M2YsMHgwMCwweGNmLDB4YzggfSwKKyAgMTYsIDB4YzkxMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMywweGZlLDB4MDAsMHhmZiwweDgwLDB4M2YsMHhlMCwweDJjLDB4ZjgsMHgwMywweGJlLDB4MjAgfSwKKyAgMTYsIDB4YzkyMCwgMCwgezB4YzcsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY4LDB4MDEsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzkzMCwgMCwgezB4YTgsMHgwMSwweGJjLDB4NDAsMHg4NywweDkwLDB4M2QsMHhjMCwweDA4LDB4NDAsMHgwMiwweGRjLDB4ODAsMHhkNywweDAwLDB4MmQgfSwKKyAgMTYsIDB4Yzk0MCwgMCwgezB4YzAsMHgwYywweDMwLDB4MDMsMHg3YywweDAwLDB4ODcsMHgxMCwweDIxLDB4YzQsMHgxZSwweDcwLDB4MjAsMHhkYywweDQ0LDB4YjcgfSwKKyAgMTYsIDB4Yzk1MCwgMCwgezB4MDAsMHgzOSwweGMwLDB4MGMsMHg3MSwweDAyLDB4MWMsMHg0MCwweGQ3LDB4MDIsMHgyOSwweDQwLDB4MDgsMHg3MCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4Yzk2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHgzMiwweDJkLDB4YzAgfSwKKyAgMTYsIDB4Yzk3MCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZGMsMHgwMSwweDg3LDB4MDAsMHgyYywweGMwLDB4MmIsMHg3MCwweDBhLDB4NWMsMHgwMCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4Yzk4MCwgMCwgezB4MjMsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRkLDB4MDAsMHhiNywweDAwLDB4MmQsMHhjNCwweDBiLDB4ZjAsMHgwMiwweDljLDB4MjAgfSwKKyAgMTYsIDB4Yzk5MCwgMCwgezB4ODcsMHgxOCwweDI5LDB4NDAsMHgwOCwweDcwLDB4ODIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzlhMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHg4MywweDAyLDB4MjgsMHhjMCwweDA4LDB4MTAsMHgwMiwweGNjLDB4MDgsMHg4MywweDQwLDB4MmUgfSwKKyAgMTYsIDB4YzliMCwgMCwgezB4YzAsMHgyYSwweDMwLDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCwweDIwLDB4ZjIsMHgwYSwweDMwLDB4MDIsMHhjZSwweDAwLDB4YjMgfSwKKyAgMTYsIDB4YzljMCwgMCwgezB4ODgsMHgyYSwweGQwLDB4MGEsMHgzMCwweDA2LDB4MGMsMHgwMCwweDkyLDB4MDAsMHgyOCwweDc4LDB4MDgsMHgzYywweDQyLDB4MDggfSwKKyAgMTYsIDB4YzlkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAyLDB4YzcsMHgwMCwweDJmLDB4YzAgfSwKKyAgMTYsIDB4YzllMCwgMCwgezB4MmMsMHg5MCwweDAyLDB4ZmMsMHgwMiwweDhmLDB4ZDgsMHgzZiwweGMwLDB4NGIsMHhmMCwweDAyLDB4N2MsMHgwMiwweGNmLDB4MDAgfSwKKyAgMTYsIDB4YzlmMCwgMCwgezB4MjAsMHhmMiwweDA4LDB4YjAsMHgxMywweGVlLDB4ODAsMHhmZiwweDAwLDB4M2YsMHhkNCwweDJlLDB4YmQsMHg4MywweGFjLDB4MDAgfSwKKyAgMTYsIDB4Y2EwMCwgMCwgezB4Y2IsMHg4MCwweDNhLDB4YTAsMHhhYywweGI4LDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2ExMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDEwLDB4M2UsMHhjMCwweDBmLDB4ODQsMHgwMywweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UgfSwKKyAgMTYsIDB4Y2EyMCwgMCwgezB4YzAsMHgwMSwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCwweGJlLDB4YzAsMHgwZSwweGIwLDB4MjMsMHhlYywweDA4LDB4ZmIgfSwKKyAgMTYsIDB4Y2EzMCwgMCwgezB4MTAsMHgzZiwweGMwLDB4MGQsMHhiNCwweDAzLDB4ZWQsMHgwNCwweGY5LDB4MDAsMHgxZSwweDE0LDB4Y2YsMHhiMCwweDgzLDB4ZTAgfSwKKyAgMTYsIDB4Y2E0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4Y2YsMHgwMCwweDMwLDB4YzAgfSwKKyAgMTYsIDB4Y2E1MCwgMCwgezB4MGMsMHg0MCwweDAzLDB4YWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MmMsMHhiMCwweDAzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSwKKyAgMTYsIDB4Y2E2MCwgMCwgezB4YjMsMHhlMCwweDBkLDB4ZmEsMHgwMywweDdlLDB4ODAsMHhjZiwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZmMsMHg0MywweGZmLDB4MjAgfSwKKyAgMTYsIDB4Y2E3MCwgMCwgezB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwOCwweGY4LDB4MDMsMHhjMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2E4MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MTAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDBhLDB4OGUsMHg0MiwweDJjLDB4MDQsMHhiYiwweDAwLDB4MmUgfSwKKyAgMTYsIDB4Y2E5MCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MDIsMHg2YywweDAwLDB4YmIsMHgwMCwweDNhLDB4YzAsMHgwZSwweDMwLDB4MDIsMHgwZCwweDA4LDB4ODMgfSwKKyAgMTYsIDB4Y2FhMCwgMCwgezB4MDIsMHgyMiwweGMwLDB4MGEsMHhiYywweDAyLDB4ZWYsMHgwMCwweGJiLDB4YzAsMHgyYywweDY4LDB4MGEsMHhiOSwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4Y2FiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwYywweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAgfSwKKyAgMTYsIDB4Y2FjMCwgMCwgezB4MDgsMHhiOCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDIsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4MDAgfSwKKyAgMTYsIDB4Y2FkMCwgMCwgezB4MjYsMHg0OCwweDE5LDB4YjAsMHgwMiwweDZkLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDBhLDB4YjAsMHgwMiwweGVjLDB4MDQgfSwKKyAgMTYsIDB4Y2FlMCwgMCwgezB4YmIsMHgxYywweDJlLDB4MjAsMHgwYSwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2FmMCwgMCwgezB4MDgsMHgxNCwweDBjLDB4MDAsMHhhYiwweDIwLDB4MjgsMHhjMCwweDBhLDB4MDAsMHgwMiwweDBjLDB4MDAsMHg5MywweDA0LDB4MmMgfSwKKyAgMTYsIDB4Y2IwMCwgMCwgezB4YzEsMHgwOCwweDMwLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDI0LDB4NDEsMHgwOSwweGI4LDB4MDIsMHgwYywweDAyLDB4ODMgfSwKKyAgMTYsIDB4Y2IxMCwgMCwgezB4MDEsMHhhMCwweGMwLDB4MGEsMHgzMCwweDAyLDB4Y2MsMHgxMCwweDkzLDB4MDAsMHgyYywweDAwLDB4MGEsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4Y2IyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg3YywweDAwLDB4Y2YsMHgyOCwweDMzLDB4YzAgfSwKKyAgMTYsIDB4Y2IzMCwgMCwgezB4MGMsMHhhMCwweDQ2LDB4YWMsMHgxMSwweGJmLDB4MDAsMHgzZiwweGMwLDB4NWMsMHhmMCwweDQzLDB4ZmMsMHgwMCwweGZmLDB4MDQgfSwKKyAgMTYsIDB4Y2I0MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4YjAsMHgwMywweDZjLDB4MDgsMHhjYiwweDA0LDB4MzEsMHhjMCwweDBjLDB4YjAsMHgzMywweGVkLDB4NDAgfSwKKyAgMTYsIDB4Y2I1MCwgMCwgezB4ZmIsMHgwNCwweDNlLDB4NDAsMHgwZSwweGIwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2I2MCwgMCwgezB4YTAsMHgxNSwweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgyMywweGZjLDB4MDEsMHhmZiwweDAwLDB4M2YgfSwKKyAgMTYsIDB4Y2I3MCwgMCwgezB4YzAsMHg0ZiwweGYwLDB4ODcsMHg3YywweDAwLDB4ZmYsMHgwMCwweDM5LDB4NDAsMHgwZSwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4Y2I4MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHg3MCwweDAzLDB4ZGMsMHg4MCwweGZmLDB4MDAsMHgzZCwweDQwLDB4MGYsMHg3MCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4Y2I5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDQwLDB4ZWIsMHg0OCwweDNlLDB4YzIgfSwKKyAgMTYsIDB4Y2JhMCwgMCwgezB4MGUsMHgwOSwweDAzLDB4YmMsMHg2MCwweGMwLDB4MjAsMHgzNSwweDI0LDB4MGUsMHhkMiwweDEzLDB4MmMsMHg2MCwweGZiLDB4NmEgfSwKKyAgMTYsIDB4Y2JiMCwgMCwgezB4MzMsMHhjMCwweDBmLDB4Y2EsMHgwMywweDIyLDB4MjAsMHhjMCwweDgwLDB4MzcsMHhjMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4MDAgfSwKKyAgMTYsIDB4Y2JjMCwgMCwgezB4ZWYsMHgwMCwweDMzLDB4MjQsMHgwZiwweGM4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2JkMCwgMCwgezB4ODAsMHgxMCwweGRkLDB4MDAsMHg4ZiwweDYwLDB4MmYsMHhkOCwweDA4LDB4YTIsMHgwMiwweGZkLDB4ODAsMHhjOCwweDcwLDB4MjIgfSwKKyAgMTYsIDB4Y2JlMCwgMCwgezB4MDAsMHgyYywweGZkLDB4MDcsMHhkYywweDg0LDB4YmYsMHg2MCwweDIzLDB4ZDIsMHgwYiwweGJkLDB4MDIsMHgyMywweDAwLDB4ODggfSwKKyAgMTYsIDB4Y2JmMCwgMCwgezB4ODAsMHhhMiwweDIwLDB4ODgsMHhiMCwweDIyLDB4MzQsMHgwMCwweGJiLDB4NTAsMHgyMiwweGM4LDB4MGIsMHhiMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4Y2MwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDQwLDB4YTMsMHgwMywweDJjLDB4YzIgfSwKKyAgMTYsIDB4Y2MxMCwgMCwgezB4MGEsMHgwMCwweDQyLDB4OGMsMHg4MiwweGEzLDB4MGEsMHgyNCwweDgwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHg5MCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4Y2MyMCwgMCwgezB4MjgsMHhkOCwweDBiLDB4MTAsMHgwMiwweDhjLDB4MDIsMHg5MCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MTAsMHg0MiwweDRjLDB4MDAgfSwKKyAgMTYsIDB4Y2MzMCwgMCwgezB4YjMsMHgwNCwweDI0LDB4YzAsMHgwYiwweDMwLDB4MGUsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2M0MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MTAsMHg5YiwweDA0LDB4MmMsMHhjMCwweGY4LDB4OTgsMHgwNiwweGVjLDB4MDAsMHhhYiwweDgwLDB4MjYgfSwKKyAgMTYsIDB4Y2M1MCwgMCwgezB4MjAsMHgwOCwweDkwLDB4MmEsMHhhYywweDEwLDB4YmIsMHgwMCwweDBhLDB4YzAsMHgxYiwweGIwLDB4MjIsMHhhZCwweDAwLDB4OTggfSwKKyAgMTYsIDB4Y2M2MCwgMCwgezB4NDAsMHgyYSwweDcwLDB4NGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4MDAsMHhhNiwweDg2LDB4MWIsMHhiMCwweDgyLDB4YjAgfSwKKyAgMTYsIDB4Y2M3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4Y2M4MCwgMCwgezB4OGUsMHg5OCwweDAzLDB4YWMsMHgwOCwweGU4LDB4YzAsMHgzNiwweDMwLDB4NGYsMHhiMCwweDQyLDB4ZWMsMHgwMCwweGY5LDB4ODAgfSwKKyAgMTYsIDB4Y2M5MCwgMCwgezB4M2EsMHhjMCwweDhmLDB4ODgsMHg0MiwweDIwLDB4MTAsMHhjOCwweDEwLDB4MzAsMHhmMCwweDBmLDB4MzAsMHgxMywweDZjLDB4MTAgfSwKKyAgMTYsIDB4Y2NhMCwgMCwgezB4ZWIsMHgwMCwweDM2LDB4ZjAsMHgwZiwweGJkLDB4MDMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2NiMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhlZiwweDA0LDB4N2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweGRjLDB4MDAsMHhjNCwweDAwLDB4M2IgfSwKKyAgMTYsIDB4Y2NjMCwgMCwgezB4NDAsMHg4YiwweGRjLDB4MDMsMHg3YywweDEwLDB4ZjksMHg5MCwweDM2LDB4YzIsMHg0ZiwweGY5LDB4MjMsMHg2MiwweDQxLDB4YWMgfSwKKyAgMTYsIDB4Y2NkMCwgMCwgezB4MDEsMHgxMywweDQwLDB4MDQsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhjMCwweDAzLDB4NzggfSwKKyAgMTYsIDB4Y2NlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4YywweDEyLDB4Y2IsMHgwMCwweGYyLDB4YzAgfSwKKyAgMTYsIDB4Y2NmMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YWMsMHgwOCwweGQ5LDB4MDAsMHgzYSwweDgwLDB4MGYsMHgxMiwweDAzLDB4YWMsMHgwMCwweGUxLDB4MDAgfSwKKyAgMTYsIDB4Y2QwMCwgMCwgezB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweGVkLDB4MDIsMHhjOCwweDQwLDB4M2UsMHhkMCwweDBmLDB4OTAsMHgxMywweDJjLDB4MDIgfSwKKyAgMTYsIDB4Y2QxMCwgMCwgezB4ZGIsMHgwMCwweDNlLDB4NTAsMHgwYywweGI0LDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2QyMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4ZiwweDAwLDB4MTcsMHhjMCwweDA4LDB4OTAsMHgwMiwweDNjLDB4MDgsMHg4ZCwweDAwLDB4MjIgfSwKKyAgMTYsIDB4Y2QzMCwgMCwgezB4NTQsMHgwOCwweGI0LDB4MDMsMHgzYywweDAwLDB4ODksMHgwMCwweDIzLDB4YzAsMHg0MCwweDM1LDB4MDIsMHhjYywweDI0LDB4ODAgfSwKKyAgMTYsIDB4Y2Q0MCwgMCwgezB4MDAsMHgyMiwweDc0LDB4NGMsMHhiMCwweDAyLDB4MmMsMHgwMCwweDhmLDB4MDAsMHgyZSwweGQ0LDB4MGEsMHhiMCwweDBhLDB4MzIgfSwKKyAgMTYsIDB4Y2Q1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg0YywweDAyLDB4ODMsMHgwMCwweDI0LDB4YzAgfSwKKyAgMTYsIDB4Y2Q2MCwgMCwgezB4MDksMHgwMCwweDAyLDB4OGMsMHgwMSwweDkwLDB4MDAsMHg2YSwweDQxLDB4MGEsMHgzMCwweDIwLDB4NGUsMHgxMCwweDMxLDB4MDIgfSwKKyAgMTYsIDB4Y2Q3MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MjAsMHgwNiwweGNlLDB4MDAsMHg4MCwweDAwLDB4NjAsMHhlMCwweDBhLDB4MzAsMHg4MiwweDBjLDB4MDggfSwKKyAgMTYsIDB4Y2Q4MCwgMCwgezB4ODMsMHgwOCwweDJjLDB4ZDAsMHgwOSwweGIwLDB4MDIsMHg3OCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2Q5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDQsMHg4NywweGIwLDB4MjAsMHhlYywweDA5LDB4ZTksMHgwMiwweDhlLDB4NTgsMHg5ZCwweGIwLDB4MmIgfSwKKyAgMTYsIDB4Y2RhMCwgMCwgezB4YTUsMHg0MCwweDViLDB4MDYsMHhkZSwweDQwLDB4OTUsMHg5NCwweDJkLDB4ZTQsMHgxOSwweDdiLDB4MDYsMHhkZSwweDAwLDB4ODQgfSwKKyAgMTYsIDB4Y2RiMCwgMCwgezB4ODAsMHg2MCwweGUwLDB4MGEsMHg3OCwweDBhLDB4MTYsMHgxMCwweDg3LDB4ODAsMHgyZCwweDY4LDB4MGIsMHg3OSwweDAyLDB4NDggfSwKKyAgMTYsIDB4Y2RjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4Y2IsMHhhMCwweDI0LDB4ZTAgfSwKKyAgMTYsIDB4Y2RkMCwgMCwgezB4MGYsMHgyYSwweDAzLDB4OGUsMHgwMCwweGQyLDB4ZDAsMHgzOCwweGZhLDB4MGYsMHgxOCwweGMzLDB4Y2UsMHgyNCwweDMxLDB4YjAgfSwKKyAgMTYsIDB4Y2RlMCwgMCwgezB4M2MsMHhlNSwweDBjLDB4M2IsMHgxNywweGNlLDB4MDQsMHhjMCwweDgyLDB4MzgsMHhjMiwweDllLDB4MTAsMHgwMywweDBjLDB4MDAgfSwKKyAgMTYsIDB4Y2RmMCwgMCwgezB4YzMsMHgwMSwweDNlLDB4YzAsMHgwZCwweDgxLDB4MDMsMHg1MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2UwMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhlZiwweDEwLDB4M2UsMHhjMiwweDBlLDB4YjEsMHgyMywweDJjLDB4YzEsMHhhYiwweDAxLDB4MzYgfSwKKyAgMTYsIDB4Y2UxMCwgMCwgezB4ODAsMHgwZiwweGIwLDB4MjMsMHgyZCwweDkwLDB4ZTksMHg4NCwweDcyLDB4YzgsMHg2MiwweGYxLDB4MTcsMHhmYywweDAwLDB4ZmMgfSwKKyAgMTYsIDB4Y2UyMCwgMCwgezB4MDAsMHgzYiwweGM0LDB4MWQsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGVmLDB4MDgsMHgzZiwweGM4LDB4MGUsMHhmMSwweDAzLDB4OTAgfSwKKyAgMTYsIDB4Y2UzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDgwLDB4ZmIsMHhhNCwweDNhLDB4YzggfSwKKyAgMTYsIDB4Y2U0MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4MmMsMHgwNCwweGNhLDB4MDAsMHgzMCwweDYwLDB4MmQsMHgxYSwweDI3LDB4NmMsMHg4NCwweGNiLDB4NjAgfSwKKyAgMTYsIDB4Y2U1MCwgMCwgezB4MzIsMHhkMiwweDBjLDB4YTAsMHgxMywweDJkLDB4ODQsMHhjYiwweDAyLDB4M2UsMHhjMCwweDBkLDB4YjgsMHgwMywweGFjLDB4ODAgfSwKKyAgMTYsIDB4Y2U2MCwgMCwgezB4Y2IsMHg4MSwweDMyLDB4ODAsMHgwYywweGIwLDB4MDMsMHhhYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2U3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4YTQsMHhiNywweDI4LDB4NzMsMHhjMiwweDA4LDB4ZjAsMHgwMiwweDNjLDB4YzAsMHg4ZiwweDAwLDB4MzEgfSwKKyAgMTYsIDB4Y2U4MCwgMCwgezB4YzAsMHgwOSwweDcwLDB4ODIsMHg5YywweDgwLDB4ODcsMHgwYywweDIwLDB4ZDgsMHgwOSwweDcwLDB4MjIsMHgxYywweDMwLDB4ODQgfSwKKyAgMTYsIDB4Y2U5MCwgMCwgezB4MDAsMHgzZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MTQsMHgyNCwweDg3LDB4YTAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDEyLDB4MTIgfSwKKyAgMTYsIDB4Y2VhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDQwLDB4YjMsMHg5NSwweDI5LDB4ZTkgfSwKKyAgMTYsIDB4Y2ViMCwgMCwgezB4MGEsMHg2OCwweDAyLDB4OWUsMHhkMCwweDg2LDB4ZjAsMHhhMywweGUwLDB4MDgsMHg3OCwweDEyLDB4OWUsMHg0NCwweGEzLDB4ODIgfSwKKyAgMTYsIDB4Y2VjMCwgMCwgezB4MjEsMHhlOCwweDBiLDB4MzgsMHgwMiwweDBlLDB4MTAsMHg4NywweDgwLDB4MmYsMHhlMCwweDBiLDB4MTgsMHgwMiwweDhlLDB4MDIgfSwKKyAgMTYsIDB4Y2VkMCwgMCwgezB4ODcsMHgwMCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2VlMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCwweDQ4LDB4MzAsMHgwMiwweDBjLDB4MDQsMHg4MywweDgwLDB4MjAgfSwKKyAgMTYsIDB4Y2VmMCwgMCwgezB4ZDAsMHgwOSwweDEwLDB4MDIsMHg4YywweDA2LDB4YTMsMHg4MCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDAyLDB4ODAgfSwKKyAgMTYsIDB4Y2YwMCwgMCwgezB4NDAsMHgyOCwweGQyLDB4MGEsMHgzMCwweDAyLDB4MGMsMHgwMSwweDgzLDB4MDAsMHgyMiwweDNjLDB4MDgsMHg4NywweDAyLDB4MTIgfSwKKyAgMTYsIDB4Y2YxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDE4LDB4ZmEsMHgwMCwweDNhLDB4ODAgfSwKKyAgMTYsIDB4Y2YyMCwgMCwgezB4OGUsMHhlNCwweDQyLDB4MjgsMHgwMiwweGNlLDB4ODAsMHgzMywweDgwLDB4NGQsMHhhMCwweDgzLDB4ZTgsMHgwMCwweGVhLDB4YTAgfSwKKyAgMTYsIDB4Y2YzMCwgMCwgezB4YjIsMHg4MCwweDBhLDB4YTAsMHgwYSwweDI4LDB4MDAsMHhjZSwweDE4LDB4MmYsMHg4MCwweDBmLDB4YTAsMHgxMywweGE4LDB4MDAgfSwKKyAgMTYsIDB4Y2Y0MCwgMCwgezB4Y2EsMHgwMCwweDMyLDB4OTAsMHgyYywweGFjLDB4MGIsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2Y1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDA0LDB4M2EsMHgwMCwweDBmLDB4ODAsMHg4MywweGMwLDB4MDgsMHhlOCwweDAzLDB4M2EgfSwKKyAgMTYsIDB4Y2Y2MCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MjIsMHhjMCwweDAwLDB4ZDAsMHgwMCwweDdlLDB4MTAsMHhhNCwweDgwLDB4MDMsMHhjMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4Y2Y3MCwgMCwgezB4MDAsMHgzZSwweDEwLDB4MGQsMHg4NCwweDAzLDB4YzAsMHgwMCwweGY4LDB4MDAsMHhiZSwweDAwLDB4MGYsMHg4MCwweDAxLDB4NTIgfSwKKyAgMTYsIDB4Y2Y4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAyLDB4YzksMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4Y2Y5MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMiwweDg5LDB4MDQsMHgzMiwweDQyLDB4MGQsMHg5MiwweDAzLDB4ZTYsMHg0MiwweGM5LDB4MDAgfSwKKyAgMTYsIDB4Y2ZhMCwgMCwgezB4MzIsMHg3MCwweDBlLDB4MTIsMHgwYiwweDI0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg0NSwweDBlLDB4OTksMHgwMywweGU0LDB4MDIgfSwKKyAgMTYsIDB4Y2ZiMCwgMCwgezB4YzEsMHgwMCwweDMyLDB4NTAsMHgwNCwweDk0LDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2ZjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4Y2ZkMCwgMCwgezB4NTQsMHgwYiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MGEsMHgyNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4Y2ZlMCwgMCwgezB4MDAsMHgzOCwweDQ4LDB4MDgsMHg5MCwweDgyLDB4ZTQsMHgwNCwweGQ5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4Y2ZmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHgwMSwweDJjLDB4NDAgfSwKKyAgMTYsIDB4ZDAwMCwgMCwgezB4MjgsMHgxMCwweDQyLDB4NjQsMHgwMCwweGExLDB4MDQsMHgyMiwweDUwLDB4MDEsMHg5MCwweDQyLDB4ZTQsMHgwMCwweDg5LDB4MDQgfSwKKyAgMTYsIDB4ZDAxMCwgMCwgezB4MjAsMHg0MiwweDBhLDB4OTAsMHg0MiwweDM0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MCwweDBhLDB4OTAsMHgwMCwweGU0LDB4MDAgfSwKKyAgMTYsIDB4ZDAyMCwgMCwgezB4ODksMHgwMCwweDIzLDB4NDAsMHgwYSwweGQwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDAzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDI0LDB4MmMsMHg0OCwweDA4LDB4MTAsMHgwMiwweDA0LDB4ODAsMHhhMSwweDIwLDB4MjggfSwKKyAgMTYsIDB4ZDA0MCwgMCwgezB4NDAsMHgwYiwweDEwLDB4MDIsMHg4NSwweDgwLDB4ODEsMHgyMCwweDIwLDB4NDgsMHgwOCwweDUwLDB4NjIsMHgxNCwweDAyLDB4ODEgfSwKKyAgMTYsIDB4ZDA1MCwgMCwgezB4MDMsMHgyZSwweDQwLDB4ODgsMHgxNiwweDgyLDB4YzQsMHhhMCwweDkxLDB4MjgsMHgyMSwweDQwLDB4MmEsMHg1MCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4ZDA2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzgsMHg1MCwweDJlLDB4MTQgfSwKKyAgMTYsIDB4ZDA3MCwgMCwgezB4MGMsMHg4NSwweDAzLDB4NjEsMHg0MCwweGU4LDB4NTAsMHhiMiwweDE1LDB4NGQsMHg4MCwweDAyLDB4YzAsMHgwMCwweDQ4LDB4NTAgfSwKKyAgMTYsIDB4ZDA4MCwgMCwgezB4YjIsMHgxNSwweDFhLDB4ODAsMHgxMywweDMwLDB4MDgsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODIsMHgwMywweGUwLDB4ODAgfSwKKyAgMTYsIDB4ZDA5MCwgMCwgezB4YzAsMHgyMCwweDMwLDB4MDAsMHgwZSwweDQwLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDBhMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDgsMHhkZCwweDEwLDB4MzcgfSwKKyAgMTYsIDB4ZDBiMCwgMCwgezB4NDAsMHgwZiwweGQ0LDB4MDcsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDNlLDB4NDUsMHgwZiwweDk0LDB4MDMsMHhlNSwweDA4LDB4ZmQgfSwKKyAgMTYsIDB4ZDBjMCwgMCwgezB4MDIsMHgzOSwweGQwLDB4MGYsMHhkMCwweDQzLDB4ZjQsMHhhMCwweGY5LDB4MjgsMHgzZSwweDRiLDB4MGQsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4ZDBkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDgwLDB4YzksMHhhNiwweDMyLDB4NjggfSwKKyAgMTYsIDB4ZDBlMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YTYsMHg4MSwweGU5LDB4ZTksMHgzYiwweDQwLDB4MGUsMHg1OCwweDAzLDB4MzYsMHgyMCwweGM5LDB4YTAgfSwKKyAgMTYsIDB4ZDBmMCwgMCwgezB4MzcsMHg3OCwweDBkLDB4ZGEsMHgwMywweDM2LDB4MjYsMHhjNSwweDAwLDB4MzcsMHg2OSwweDBlLDB4ZGUsMHgwMywweGE2LDB4ODIgfSwKKyAgMTYsIDB4ZDEwMCwgMCwgezB4Y2QsMHhjMCwweDMzLDB4NTAsMHgwZiwweGQwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDExMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4YTQsMHg4OCwweGE5LDB4MjIsMHgzYSwweDA4LDB4MDgsMHgwMCwweDIyLDB4YTAsMHhiOCwweGU1LDB4MzAgfSwKKyAgMTYsIDB4ZDEyMCwgMCwgezB4MjAsMHgyOCwweDgwLDB4MjIsMHg0MywweGEwLDB4MDgsMHhlOCwweDJhLDB4M2QsMHgwOCwweGE0LDB4NjIsMHgyMCwweDAwLDB4ODggfSwKKyAgMTYsIDB4ZDEzMCwgMCwgezB4MDAsMHgyZSwweDEwLDB4MDgsMHg4ZSwweDAzLDB4MjMsMHhhMCwweDg4LDB4YTAsMHgyMCwweDI4LDB4MGIsMHg4YSwweDgyLDB4MGUgfSwKKyAgMTYsIDB4ZDE0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDQwLDB4OTEsMHg0MCwweDIwLDB4NDQgfSwKKyAgMTYsIDB4ZDE1MCwgMCwgezB4MDgsMHg5MCwweGEyLDB4ODUsMHgxMCwweGExLDB4MjAsMHgyYywweDQyLDB4MGIsMHgxNCwweDEyLDB4OGMsMHgwMSwweDkxLDB4MTAgfSwKKyAgMTYsIDB4ZDE2MCwgMCwgezB4MmMsMHg0OCwweDA5LDB4MTEsMHgwYSwweGM0LDB4MDAsMHg4MSwweDAwLDB4MmMsMHg1MCwweDBiLDB4MTEsMHgxMiwweGM1LDB4MDEgfSwKKyAgMTYsIDB4ZDE3MCwgMCwgezB4YjEsMHg0MCwweDI0LDB4NDgsMHgwYiwweDE4LDB4MGUsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDE4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg5MSwweDAwLDB4MjIsMHg0MSwweDA4LDB4OTQsMHg0MiwweDI0LDB4MDAsMHhiMSwweDQwLDB4MjAgfSwKKyAgMTYsIDB4ZDE5MCwgMCwgezB4NDAsMHg0OSwweGIyLDB4NjIsMHgyNCwweDAwLDB4OTksMHgwMCwweDBhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNSwweDgwLDB4ODkgfSwKKyAgMTYsIDB4ZDFhMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MDksMHhiMCwweDAyLDB4MjQsMHg4MCwweGI5LDB4MDAsMHgyNiwweDUwLDB4NGIsMHg5MCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4ZDFiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAyLDB4ZDksMHgwMCwweGIyLDB4NDAgfSwKKyAgMTYsIDB4ZDFjMCwgMCwgezB4MmMsMHg5NSwweDEzLDB4YTQsMHgxMCwweGU5LDB4MDAsMHhiZSwweDYwLDB4OGYsMHg5MCwweDBiLDB4YTQsMHgxMCwweDU5LDB4MDAgfSwKKyAgMTYsIDB4ZDFkMCwgMCwgezB4MWUsMHg0MCwweDlkLDB4OTQsMHgyMywweGU0LDB4MDIsMHg4OSwweDAwLDB4MzQsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDggfSwKKyAgMTYsIDB4ZDFlMCwgMCwgezB4NzksMHgwMCwweGI2LDB4NDAsMHgwNywweDk4LDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDFmMCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MDAsMHhlOSwweDAyLDB4M2MsMHg0MCwweDJmLDB4OTgsMHgwMiwweGU0LDB4MDAsMHhmOSwweDQyLDB4M2EgfSwKKyAgMTYsIDB4ZDIwMCwgMCwgezB4NjgsMHgwYSwweDEwLDB4MDMsMHhlNCwweDEwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4MGYsMHgyNiwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZDIxMCwgMCwgezB4MDQsMHgzZSwweDQwLDB4MGUsMHgxYywweDAzLDB4ZTYsMHgwMCwweGMxLDB4MDAsMHgzYSwweDUwLDB4MGYsMHg5OSwweDgzLDB4Y2EgfSwKKyAgMTYsIDB4ZDIyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZTgsMHgwMCwweDNhLDB4MDAgfSwKKyAgMTYsIDB4ZDIzMCwgMCwgezB4MGMsMHg4NCwweDAzLDB4MjAsMHgwMCwweGQ4LDB4NDIsMHgzMiwweDA0LDB4MGMsMHg4OCwweDEzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4ZDI0MCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDQsMHgwYiwweDAwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDBlLDB4ODAsMHgyMywweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDI1MCwgMCwgezB4YzgsMHg4MCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDEsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDI2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MTAsMHg4YSwweDAwLDB4MmUsMHg4MCwweDI4LDB4MjAsMHgyMiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjMgfSwKKyAgMTYsIDB4ZDI3MCwgMCwgezB4YjAsMHg4OCwweGUwLDB4MDIsMHgyOCwweDEwLDB4ZGEsMHgwMCwweGEzLDB4YjQsMHgwOCwweGU4LDB4MTAsMHgyOCwweDAwLDB4OGUgfSwKKyAgMTYsIDB4ZDI4MCwgMCwgezB4MjAsMHgyMywweGEwLDB4NDgsMHhlZCwweDFhLDB4MjgsMHgwMCwweGRlLDB4MDAsMHgyMywweDkwLDB4MGEsMHhlMCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4ZDI5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YTMsMHgwMCwweDI4LDB4YzAgfSwKKyAgMTYsIDB4ZDJhMCwgMCwgezB4MDgsMHgzMCwweDBhLDB4MGMsMHgwMCwweDkzLDB4MDAsMHgyMCwweGMyLDB4MmEsMHgzMCwweDIyLDB4YTQsMHgwMCwweGJiLDB4MDAgfSwKKyAgMTYsIDB4ZDJiMCwgMCwgezB4MDgsMHhlMCwweDE4LDB4MDksMHgwYSwweDRjLDB4MDAsMHg5MywweDAyLDB4MjQsMHhlOCwweDAyLDB4MDgsMHgwNiwweDRjLDB4MDAgfSwKKyAgMTYsIDB4ZDJjMCwgMCwgezB4OTMsMHgwMCwweDIwLDB4ZDgsMHgwYSwweDkwLDB4MDIsMHg0YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDJkMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4ODAsMHg4NywweDA0LDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDBlLDB4MDAsMHg4NywweDEwLDB4MjUgfSwKKyAgMTYsIDB4ZDJlMCwgMCwgezB4MDAsMHgwYSwweDYwLDB4MDIsMHg1ZSwweDAwLDB4OTcsMHgwMCwweDI5LDB4ODIsMHgwOCwweDUwLDB4MTIsMHg1NCwweDAwLDB4OGYgfSwKKyAgMTYsIDB4ZDJmMCwgMCwgezB4ODAsMHg2MSwweGQwLDB4MDgsMHgwNCwweDAyLDB4NWMsMHgwMSwweGI3LDB4MDgsMHhhOSwweGEwLDB4MGEsMHg1MCwweDgyLDB4NjggfSwKKyAgMTYsIDB4ZDMwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDgwLDB4ZTcsMHg4MCwweDM4LDB4ZTQgfSwKKyAgMTYsIDB4ZDMxMCwgMCwgezB4MDgsMHg3ZSwweDAzLDB4MWYsMHgwMCwweGRmLDB4ODAsMHhiMSwweDIxLDB4MWUsMHg3OCwweDAzLDB4ZGMsMHgwNCwweGYzLDB4ODAgfSwKKyAgMTYsIDB4ZDMyMCwgMCwgezB4NWIsMHhlMSwweDA4LDB4MjgsMHgwMywweDVlLDB4MDAsMHhkNywweDgwLDB4MzUsMHg2MCwweDBlLDB4NjgsMHgwMywweDRlLDB4MDAgfSwKKyAgMTYsIDB4ZDMzMCwgMCwgezB4ZGYsMHg4MCwweDMxLDB4ZTAsMHgwZSwweGY4LDB4MGIsMHg2YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDM0MCwgMCwgezB4MDgsMHgxZCwweGFkLDB4MDIsMHhmYiwweDc0LDB4M2UsMHhkMCwweDRmLDB4YjIsMHg4MywweGVkLDB4MDAsMHg3YiwweDY4LDB4M2EgfSwKKyAgMTYsIDB4ZDM1MCwgMCwgezB4MDAsMHg4ZCwweDgwLDB4MDMsMHhhNCwweDIwLDB4ZGIsMHgwMSwweDM2LDB4ODAsMHg2ZiwweGIwLDB4NDEsMHg4NCwweDAwLDB4ZWIgfSwKKyAgMTYsIDB4ZDM2MCwgMCwgezB4MDAsMHgzYywweGMwLDB4MGYsMHhlNiwweDgzLDB4YmMsMHg0MCwweGRiLDB4MDAsMHhiNiwweDgwLDB4MGYsMHhiMCwweDAzLDB4ODIgfSwKKyAgMTYsIDB4ZDM3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDIwLDB4ZGYsMHhjMCwweDNiLDB4ZTYgfSwKKyAgMTYsIDB4ZDM4MCwgMCwgezB4MGUsMHhmOCwweDEzLDB4ZmYsMHg0NCwweGM3LDB4ODIsMHgzYiwweGUwLDB4MGYsMHhmOSwweDAzLDB4YmUsMHgxMCwweGNmLDB4YzggfSwKKyAgMTYsIDB4ZDM5MCwgMCwgezB4MzMsMHg2MCwweDhkLDB4ZWIsMHgwMywweDNlLDB4MDAsMHhkYiwweDgyLDB4M2YsMHhlMCwweDBjLDB4ZDgsMHgwMywweDNlLDB4NDAgfSwKKyAgMTYsIDB4ZDNhMCwgMCwgezB4Y2UsMHg4MCwweDMzLDB4ZTQsMHgwZiwweGY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDNiMCwgMCwgezB4YTgsMHgxMSwweGJjLDB4NDAsMHg4NywweDAwLDB4MjEsMHhlNCwweDBiLDB4NzgsMHhhMiwweGNlLDB4OTAsMHhjNywweGIwLDB4MjAgfSwKKyAgMTYsIDB4ZDNjMCwgMCwgezB4ZTgsMHgwYiwweDI4LDB4OTIsMHhiNiwweDg4LDB4ODcsMHhhMCwweDIwLDB4NjQsMHgwYiwweDM1LDB4MDMsMHgxNCwweDAwLDB4ODcgfSwKKyAgMTYsIDB4ZDNkMCwgMCwgezB4YjIsMHgzOSwweGMwLDB4MmMsMHhjMCwweDAzLDB4NWUsMHgwMiwweGNmLDB4MDAsMHgzMSwweGNlLDB4MGIsMHg3NiwweDEyLDB4MmEgfSwKKyAgMTYsIDB4ZDNlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTMsMHgxMCwweDI5LDB4YzggfSwKKyAgMTYsIDB4ZDNmMCwgMCwgezB4MGIsMHg3NCwweDAyLDB4ZGMsMHg4MCwweDhmLDB4MDAsMHgyOSwweGNjLDB4MGEsMHgzMCwweDA2LDB4MTQsMHg4MCwweDg3LDB4MTAgfSwKKyAgMTYsIDB4ZDQwMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NjYsMHgwMiwweDVjLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NTEsMHgwMiwweDFjLDB4ODAgfSwKKyAgMTYsIDB4ZDQxMCwgMCwgezB4OTYsMHgwMCwweDIxLDB4YzAsMHg1YiwweDc0LDB4ODIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDgsMHhhMywweDAwLDB4MjAsMHhjMCwweDBiLDB4YjgsMHgwMiwweGNjLDB4MDAsMHg4YiwweDQwLDB4YTggfSwKKyAgMTYsIDB4ZDQzMCwgMCwgezB4YzAsMHg4YiwweDA4LDB4MjIsMHg4YywweDAyLDB4ODMsMHgwMCwweDYwLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgwNCwweDAwLDB4ODMgfSwKKyAgMTYsIDB4ZDQ0MCwgMCwgezB4NDAsMHgyOCwweGZjLDB4OGEsMHgwMCwweDAyLDB4NmUsMHgwMCwweDgzLDB4MDAsMHhhMCwweGQwLDB4OGIsMHgzOCwweDAyLDB4MDggfSwKKyAgMTYsIDB4ZDQ1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiYywweDAyLDB4ZWYsMHgwMCwweDNiLDB4YzAgfSwKKyAgMTYsIDB4ZDQ2MCwgMCwgezB4NGYsMHhmOCwweDAyLDB4ZmMsMHgwMiwweGNmLDB4MDAsMHgzOCwweDEyLDB4MGUsMHg5OCwweDAyLDB4MmMsMHgwMCwweGNmLDB4MDAgfSwKKyAgMTYsIDB4ZDQ3MCwgMCwgezB4MzIsMHhjMCwweDA5LDB4OTAsMHgwMywweDY0LDB4MDIsMHg4MSwweGMwLDB4M2UsMHhkMCwweDBmLDB4OTAsMHgwNywweDNjLDB4MDMgfSwKKyAgMTYsIDB4ZDQ4MCwgMCwgezB4ZDksMHgwMCwweDMyLDB4NjAsMHgwZiwweDg4LDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQ5MCwgMCwgezB4ODAsMHgwMCwweGNjLDB4MDAsMHhkYiwweDAwLDB4M2UsMHhjMCwweDhmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAyLDB4MzYgfSwKKyAgMTYsIDB4ZDRhMCwgMCwgezB4YzAsMHg0ZiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZmIsMHgwMCwweGJlLDB4OTAsMHgwZiwweDljLDB4MTMsMHhlYywweDAwLDB4ZTkgfSwKKyAgMTYsIDB4ZDRiMCwgMCwgezB4MTgsMHgzYSwweGQwLDB4MDQsMHhkNSwweDAzLDB4ZWMsMHg0MCwweGU5LDB4MDAsMHgzYSwweDAwLDB4OGYsMHg4MCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4ZDRjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4Y2YsMHgwMCwweDNkLDB4YzEgfSwKKyAgMTYsIDB4ZDRkMCwgMCwgezB4OGMsMHhmMCwweDAzLDB4MmMsMHgwMCwweGVmLDB4MGEsMHhiMywweDEyLDB4MmMsMHg3MCwweDIzLDB4MTQsMHgwYSwweDRmLDB4MDAgfSwKKyAgMTYsIDB4ZDRlMCwgMCwgezB4MzUsMHg2MCwweDBkLDB4YjAsMHgwMywweDA0LDB4MDAsMHhjZCwweDgwLDB4MDcsMHhlOCwweDBjLDB4YzQsMHgwMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZDRmMCwgMCwgezB4Y2QsMHgwMCwweDMxLDB4ZTIsMHgyYywweGUwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDUwMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDIsMHhhYiwweDAyLDB4MmUsMHhjMCwweDBlLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MzIgfSwKKyAgMTYsIDB4ZDUxMCwgMCwgezB4MzAsMHgwMCwweDljLDB4MDMsMHg2YywweDAwLDB4OGIsMHgwNCwweDIyLDB4MzYsMHgwOCwweDM0LDB4NGEsMHgyYywweDA4LDB4ODkgfSwKKyAgMTYsIDB4ZDUyMCwgMCwgezB4OTAsMHgyMCwweGI4LDB4MGYsMHg4NCwweDAwLDB4YWMsMHgwMiwweDg5LDB4MDAsMHgzNiwweGEwLDB4MDgsMHhhNCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZDUzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4YzAgfSwKKyAgMTYsIDB4ZDU0MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGQxLDB4MDgsMHg4OCwweDEyLDB4MjYsMHgwMCwweGEzLDB4MDAgfSwKKyAgMTYsIDB4ZDU1MCwgMCwgezB4MjYsMHg0MCwweDBiLDB4YjAsMHgwMiwweDI2LDB4MDAsMHg4YiwweDAwLDB4MjYsMHhjMCwweDU4LDB4MTAsMHgxMiwweDJjLDB4MDQgfSwKKyAgMTYsIDB4ZDU2MCwgMCwgezB4ODIsMHg4MCwweDJhLDB4NDksMHgwOCwweDMwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDU3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhhMywweDE0LDB4MmMsMHhjOCwweDFhLDB4MzQsMHg4YSwweDBjLDB4ODQsMHg4MywweDQwLDB4MjIgfSwKKyAgMTYsIDB4ZDU4MCwgMCwgezB4YzgsMHgwOCwweDAzLDB4NjIsMHg0YywweGMwLDB4YTMsMHg2MCwweDIwLDB4NDAsMHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4ZDU5MCwgMCwgezB4NDUsMHgwOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4OGMsMHhhMCwweDgzLDB4MDAsMHgyNiwweDQwLDB4MDgsMHgzMCwweDBhLDB4MDIgfSwKKyAgMTYsIDB4ZDVhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4Y2YsMHg0MCwweDJmLDB4ZDIgfSwKKyAgMTYsIDB4ZDViMCwgMCwgezB4OGMsMHhmNiwweDAzLDB4M2MsMHgyMiwweGNmLDB4NDAsMHgzMiwweGQ2LDB4NGMsMHhhNiwweGMxLDB4M2QsMHhhMCwweDg3LDB4NDggfSwKKyAgMTYsIDB4ZDVjMCwgMCwgezB4MzYsMHgwZCwweDBmLDB4YjEsMHgwMiwweDI0LDB4NDIsMHhjYiwweDYwLDB4MTYsMHhjMCwweDBjLDB4ZDAsMHgwMywweDJjLDB4ODAgfSwKKyAgMTYsIDB4ZDVkMCwgMCwgezB4Y2EsMHgwMCwweDMyLDB4YzAsMHgwYywweDMwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDVlMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmZiwweDIwLDB4M2UsMHhjYSwweDBlLDB4YjAsMHgwMywweGVjLDB4MjAsMHhkYiwweDM0LDB4M2EgfSwKKyAgMTYsIDB4ZDVmMCwgMCwgezB4YzgsMHgwZiwweDgwLDB4MDMsMHhlNCwweDEwLDB4ZGIsMHgyMSwweDNlLDB4MTgsMHgwZCwweGYyLDB4MDMsMHhmYywweDgwLDB4ZmYgfSwKKyAgMTYsIDB4ZDYwMCwgMCwgezB4MzAsMHgzNSwweGMwLDB4MGYsMHhjMCwweDEzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZDYxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhmYywweDAwLDB4ZmIsMHgwYiwweDJmLDB4Y2EgfSwKKyAgMTYsIDB4ZDYyMCwgMCwgezB4OGQsMHhmMiwweDAzLDB4ZmEsMHgwMCwweDk2LDB4ODAsMHgzYiwweGM0LDB4MGQsMHhmMSwweDAzLDB4N2MsMHg4MCwweGVjLDB4ODAgfSwKKyAgMTYsIDB4ZDYzMCwgMCwgezB4M2IsMHgwOCwweDBjLDB4YzIsMHgwMywweDc0LDB4MDIsMHhjYywweDgwLDB4M2YsMHg0OCwweDBlLDB4ZjAsMHgwMywweDMwLDB4YTAgfSwKKyAgMTYsIDB4ZDY0MCwgMCwgezB4ZDUsMHg4MCwweDNmLDB4NDAsMHgwYywweGY4LDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDY1MCwgMCwgezB4ODAsMHgwOCwweGVlLDB4NDAsMHhiZiwweDgwLDB4MmYsMHhmMCwweDBiLDB4ZjcsMHgyMiwweGVlLDB4MjAsMHg4YSwweDgwLDB4MjMgfSwKKyAgMTYsIDB4ZDY2MCwgMCwgezB4ZmMsMHg4OCwweDc1LDB4MTIsMHgzZCwweDAwLDB4ODgsMHgwMCwweDIyLDB4MDAsMHgyOCwweDgwLDB4MDIsMHgyNCwweDA4LDB4ODggfSwKKyAgMTYsIDB4ZDY3MCwgMCwgezB4MDAsMHg2ZiwweDUwLDB4MDAsMHhmNSwweDAyLDB4MjksMHgwMCwweDg5LDB4MDAsMHgyZSwweDU0LDB4MGQsMHg5MCwweDExLDB4YTAgfSwKKyAgMTYsIDB4ZDY4MCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzEgfSwKKyAgMTYsIDB4ZDY5MCwgMCwgezB4MDksMHgzMCwweDgyLDB4Y2MsMHg4MiwweGJiLDB4MDAsMHgyOCwweGMwLDB4NDksMHgzMiwweDAyLDB4Y2QsMHgwMCwweGI4LDB4MDAgfSwKKyAgMTYsIDB4ZDZhMCwgMCwgezB4MmMsMHg1MCwweDA5LDB4MDEsMHgwMiwweDBjLDB4NDAsMHg4MCwweDAwLDB4NmMsMHg0NCwweDA5LDB4MzAsMHgwMiwweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZDZiMCwgMCwgezB4YjAsMHgwMCwweDJjLDB4NDAsMHgxOCwweDMwLDB4MDYsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDZjMCwgMCwgezB4YzAsMHgwMSwweGFjLDB4MDAsMHhiYiwweDAxLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGVlLDB4MDAsMHhhYSwweDAwLDB4NGEgfSwKKyAgMTYsIDB4ZDZkMCwgMCwgezB4YzAsMHgwOCwweGIwLDB4NTIsMHhlYywweDAwLDB4OTgsMHgwMiwweDI2LDB4NDAsMHgwOSwweDgwLDB4MDIsMHg2YywweDAxLDB4YWEgfSwKKyAgMTYsIDB4ZDZlMCwgMCwgezB4MDQsMHgyZSwweDQwLDB4MDksMHhiMCwweDAyLDB4MjIsMHgwMCwweGE5LDB4ODAsMHgyZSwweDQxLDB4MDksMHg5MCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4ZDZmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ZDcwMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4Y2UsMHg4NCwweGZhLDB4MDAsMHgxYSwweGMwLDB4OGQsMHhiMCwweDQzLDB4ZWMsMHgwMCwweGYwLDB4MDIgfSwKKyAgMTYsIDB4ZDcxMCwgMCwgezB4M2YsMHgwMCwweDBkLDB4ZDEsMHgwMywweDM1LDB4MDAsMHhjYiwweDQ4LDB4MmUsMHg0MCwweDJmLDB4YjAsMHgwOSwweDIyLDB4ODAgfSwKKyAgMTYsIDB4ZDcyMCwgMCwgezB4ZjksMHhjOCwweDFlLDB4ZTAsMHgwOCwweGIxLDB4ZTIsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDczMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHg3YiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhkZSwweDAwLDB4MjQgfSwKKyAgMTYsIDB4ZDc0MCwgMCwgezB4YzAsMHg0ZiwweGYwLDB4MDMsMHgyYywweDAwLDB4ZWMsMHgyMCwweDNiLDB4MDAsMHgwZSwweDk4LDB4MDMsMHg5NCwweDAyLDB4ZGQgfSwKKyAgMTYsIDB4ZDc1MCwgMCwgezB4MDAsMHgzZiwweDQwLDB4NGUsMHhmMCwweDAxLDB4ZjgsMHgwMCwweGRkLDB4MDAsMHgzYywweGU0LDB4MGYsMHhkOCwweDAzLDB4YjggfSwKKyAgMTYsIDB4ZDc2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhhYywweGMwLDB4ZmIsMHgyMCwweDMyLDB4YzggfSwKKyAgMTYsIDB4ZDc3MCwgMCwgezB4OGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzYSwweGMyLDB4MmMsMHgzMCwweDAzLDB4NmMsMHgwNCwweGQ4LDB4MDIgfSwKKyAgMTYsIDB4ZDc4MCwgMCwgezB4M2MsMHg0NCwweDhkLDB4MTAsMHgwMywweGFkLDB4MDMsMHhlYSwweDAwLDB4M2MsMHg0MCwweDBjLDB4NzAsMHgyMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4ZDc5MCwgMCwgezB4YzgsMHg0MCwweDNhLDB4YzAsMHgwZCwweGJjLDB4MDMsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDdhMCwgMCwgezB4YzgsMHgwMSwweDNkLDB4MDAsMHhiZiwweDQyLDB4MjMsMHhmMCwweDBkLDB4ZjAsMHgwMiwweGU1LDB4MDAsMHhlMiwweDAxLDB4MzcgfSwKKyAgMTYsIDB4ZDdiMCwgMCwgezB4ZjEsMHgwOCwweGYwLDB4MGUsMHgzZCwweGMwLDB4YTgsMHgwMCwweDJlLDB4NTQsMHgyOCwweDkwLDB4MDIsMHgyYywweDAwLDB4OGEgfSwKKyAgMTYsIDB4ZDdjMCwgMCwgezB4MDUsMHgzYiwweDQxLDB4NDgsMHhmNSwweDAzLDB4OGMsMHgwMCwweDg5LDB4MDAsMHgyMiwweGQ0LDB4MGUsMHg5NSwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4ZDdkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHgwNCwweDIwLDB4YzAgfSwKKyAgMTYsIDB4ZDdlMCwgMCwgezB4ODksMHgzMCwweDAyLDB4Y2MsMHg0MCwweGIyLDB4MDAsMHgyYywweGM0LDB4NDgsMHgzMCwweDAyLDB4MmMsMHgwMiwweGEyLDB4MDAgfSwKKyAgMTYsIDB4ZDdmMCwgMCwgezB4MmMsMHgyMCwweDE5LDB4MjAsMHgxYSwweDgwLDB4MDgsMHhiMCwweDAwLDB4NmMsMHg0MCwweDA4LDB4MzAsMHgwMiwweGM0LDB4MDAgfSwKKyAgMTYsIDB4ZDgwMCwgMCwgezB4ODEsMHgwMCwweDJjLDB4NDAsMHgwOCwweDMwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDgxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNywweGEwLDB4ZTEsMHhlMCwweDA5LDB4NzgsMHgwMiwweGRmLDB4MDQsMHhhZSwweDgwLDB4MmQgfSwKKyAgMTYsIDB4ZDgyMCwgMCwgezB4ZTAsMHgwOCwweDc5LDB4MDIsMHgxZSwweDEwLDB4ODcsMHg5MCwweDJjLDB4MjgsMHgyOSwweDY4LDB4MDIsMHg4MiwweDgxLDB4YjQgfSwKKyAgMTYsIDB4ZDgzMCwgMCwgezB4ODAsMHgyZCwweDYwLDB4MDgsMHg3OCwweDEwLDB4YmMsMHgwMCwweDhmLDB4ODAsMHgyZCwweDYwLDB4MGIsMHg2OCwweDAyLDB4YzggfSwKKyAgMTYsIDB4ZDg0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwYywweDA1LDB4ZjMsMHg5MiwweDMwLDB4Y2EgfSwKKyAgMTYsIDB4ZDg1MCwgMCwgezB4MGQsMHgzMCwweDAzLDB4Y2MsMHgwMCwweGYzLDB4MDAsMHgzYywweGMwLDB4MGMsMHgzMCwweDAyLDB4MGMsMHg4MCwweDcwLDB4MDAgfSwKKyAgMTYsIDB4ZDg2MCwgMCwgezB4MmMsMHg0MCwweDBkLDB4MjAsMHgwMywweDg5LDB4MDAsMHhiMSwweDAwLDB4M2UsMHg0MCwweDJjLDB4MzAsMHgwMywweGVjLDB4NTAgfSwKKyAgMTYsIDB4ZDg3MCwgMCwgezB4YzMsMHgyMCwweDNjLDB4NDAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDg4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2MsMHhjMCwweDBlLDB4YjAsMHg4MywweGVjLDB4NDAsMHhlYSwweDAwLDB4MzYgfSwKKyAgMTYsIDB4ZDg5MCwgMCwgezB4YzIsMHgwZiwweGIwLDB4ODMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlLDB4NDgsMHgwZSwweGUwLDB4MGIsMHg3YSwweDgwLDB4Y2YgfSwKKyAgMTYsIDB4ZDhhMCwgMCwgezB4MDAsMHgzYiwweDQ0LDB4MGYsMHhmMCwweDAzLDB4ZWMsMHhjMCwweGZmLDB4MDAsMHgwMywweDQ0LDB4MGUsMHhlMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZDhiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgyMywweDNlLDB4YzggfSwKKyAgMTYsIDB4ZDhjMCwgMCwgezB4MWQsMHhiMCwweDAzLDB4ZWUsMHgwMCwweGNhLDB4MDAsMHgzZSwweGM4LDB4MGMsMHhiMiwweDAzLDB4MmQsMHg5MCwweGM4LDB4ODQgfSwKKyAgMTYsIDB4ZDhkMCwgMCwgezB4MzYsMHgwMCwweDJkLDB4YjAsMHgwMywweDYwLDB4MTgsMHg5YiwweDgwLDB4MzMsMHg1MCwweDBjLDB4ZjIsMHgwMywweGUyLDB4MDAgfSwKKyAgMTYsIDB4ZDhlMCwgMCwgezB4YzksMHg4MCwweDMyLDB4NDAsMHgwYywweGI4LDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDhmMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNywweDI4LDB4MGMsMHhkMiwweDI4LDB4NzMsMHgwMiwweGZjLDB4MDAsMHg4NiwweDA0LDB4MmMgfSwKKyAgMTYsIDB4ZDkwMCwgMCwgezB4Y2MsMHgyOCwweDcwLDB4ODMsMHgwYywweDIwLDB4OTUsMHgwMSwweDIwLDB4MDAsMHgwOSwweDMwLDB4MTIsMHgxMCwweDA0LDB4ODUgfSwKKyAgMTYsIDB4ZDkxMCwgMCwgezB4MDAsMHgyMSwweDUyLDB4MDgsMHg3NSwweDAyLDB4ZDgsMHgwMCwweDg3LDB4MDAsMHgyMSwweDQwLDB4MDgsMHg2MCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZDkyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweGQ0LDB4YjcsMHhiMSwweDA5LDB4ZTEgfSwKKyAgMTYsIDB4ZDkzMCwgMCwgezB4MDgsMHg3OCwweDIyLDB4ZGUsMHgwMCwweDk1LDB4ODAsMHgyZCwweGUwLDB4MDgsMHg3OCwweDBhLDB4NWUsMHg0MiwweDk0LDB4YzAgfSwKKyAgMTYsIDB4ZDk0MCwgMCwgezB4MjEsMHg2MCwweDA4LDB4NzgsMHgwMiwweDVhLDB4MDAsMHg4NywweDgwLDB4MmQsMHg2OCwweDA4LDB4N2EsMHgwMiwweGQ3LDB4MDAgfSwKKyAgMTYsIDB4ZDk1MCwgMCwgezB4OTcsMHg4MCwweDIwLDB4NjAsMHgwOSwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDk2MCwgMCwgezB4NDgsMHgxMCwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDA4LDB4YjAsMHgwMiwweGNkLDB4ODAsMHg5MiwweDAwLDB4MmMgfSwKKyAgMTYsIDB4ZDk3MCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MDIsMHhjYywweDAwLDB4OTAsMHg4MCwweGEwLDB4NDAsMHgwOSwweDM2LDB4MDIsMHg0OCwweDAyLDB4ODMgfSwKKyAgMTYsIDB4ZDk4MCwgMCwgezB4YTAsMHhhYywweDQwLDB4MmEsMHgzMCwweDA2LDB4Y2UsMHgwMiwweDkzLDB4MDQsMHhhMCwweDQwLDB4MDksMHgyMCwweDBhLDB4MTIgfSwKKyAgMTYsIDB4ZDk5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDNhLDB4ODAgfSwKKyAgMTYsIDB4ZDlhMCwgMCwgezB4MGQsMHhhMCwweDAzLDB4ZmIsMHgwMiwweGRlLDB4ODAsMHgzZSwweDgwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgwMCwweGNlLDB4ODAgfSwKKyAgMTYsIDB4ZDliMCwgMCwgezB4MzIsMHg4MCwweDBjLDB4YTQsMHgwMywweDc4LDB4MDAsMHhjZSwweGE0LDB4M2YsMHg4MCwweDBjLDB4YTAsMHgwNywweGY5LDB4MDAgfSwKKyAgMTYsIDB4ZDljMCwgMCwgezB4ZGUsMHgwMCwweDMyLDB4ODAsMHgyZCwweGUwLDB4MDIsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDlkMCwgMCwgezB4NDgsMHgwMCwweGUxLDB4MDAsMHhmOCwweDAwLDB4N2MsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4NDAsMHhlOCwweDEwLDB4M2MgfSwKKyAgMTYsIDB4ZDllMCwgMCwgezB4MDEsMHhjZiwweDgwLDB4MGYsMHgyMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDA0LDB4MDMsMHg5MCwweDAwLDB4ZTggfSwKKyAgMTYsIDB4ZDlmMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MGQsMHg4MCwweDA3LDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDA0LDB4MGUsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ZGEwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgxMCwweDdlLDB4NDEgfSwKKyAgMTYsIDB4ZGExMCwgMCwgezB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDY4LDB4MGUsMHg5MCwweDBmLDB4YTQsMHgwOCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4ZGEyMCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI0LDB4MTIsMHhlOSwweDAwLDB4M2UsMHg0NCwweDJjLDB4OTAsMHgwMywweDY0LDB4MjQgfSwKKyAgMTYsIDB4ZGEzMCwgMCwgezB4ZjksMHgwMiwweDJlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGE0MCwgMCwgezB4ODAsMHgwNCwweDY1LDB4MTAsMHhiOSwweDgwLDB4M2UsMHg0MCwweDA4LDB4OTAsMHgwYSwweDI2LDB4MDAsMHhiMSwweDEwLDB4MmEgfSwKKyAgMTYsIDB4ZGE1MCwgMCwgezB4NzIsMHgwOCwweDkwLDB4MDcsMHg2NCwweDAyLDB4ODksMHg0MCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MTIsMHgyNSwweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZGE2MCwgMCwgezB4NDUsMHgzZSwweDUwLDB4MGQsMHg5MCwweDBhLDB4MjUsMHgwMCwweGI5LDB4NDAsMHgyZSwweDQwLDB4MjgsMHg5NCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4ZGE3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4ZGE4MCwgMCwgezB4NDgsMHg5MCwweDQyLDB4MjYsMHgwMSwweGI5LDB4NDAsMHgyNiwweDQwLDB4MGEsMHg5MCwweDQyLDB4ODQsMHgwMSwweDhiLDB4MDggfSwKKyAgMTYsIDB4ZGE5MCwgMCwgezB4MmMsMHg0MCwweDA5LDB4ZDAsMHg4MiwweDM0LDB4MzIsMHhhOSwweDA4LDB4NmUsMHg0MiwweDA4LDB4MTAsMHgwMiwweDI0LDB4MjAgfSwKKyAgMTYsIDB4ZGFhMCwgMCwgezB4YjksMHgwOCwweDJjLDB4NDAsMHgxOCwweDkwLDB4ODIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGFiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhiMywweDIwLDB4MjgsMHg0OCwweDA4LDB4MTIsMHgwMiwweDA0LDB4MDEsMHhiMSwweDAwLDB4MjggfSwKKyAgMTYsIDB4ZGFjMCwgMCwgezB4NTgsMHgwOCwweDEyLDB4MDIsMHgwNSwweDg5LDB4ODEsMHg0MCwweDJjLDB4NTgsMHgwOCwweDU2LDB4MDYsMHgxNSwweDgwLDB4ODEgfSwKKyAgMTYsIDB4ZGFkMCwgMCwgezB4NDAsMHgyOCwweDUwLDB4MDksMHgxNCwweDAyLDB4MDUsMHg4MCwweGIxLDB4NDAsMHgyYywweDVhLDB4MDgsMHgxNCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ZGFlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAgfSwKKyAgMTYsIDB4ZGFmMCwgMCwgezB4MmUsMHg4NSwweDAzLDB4MjEsMHg0OCwweGY4LDB4MDAsMHgzNiwweDAwLDB4OGUsMHgwNSwweDAyLDB4YTAsMHgwOCwweDgwLDB4MDAgfSwKKyAgMTYsIDB4ZGIwMCwgMCwgezB4M2UsMHgwMCwweDBkLDB4ODAsMHgwYiwweDEwLDB4MDQsMHhlMCwweDAwLDB4MmMsMHgwMCwweDRjLDB4ODAsMHgwMywweDQwLDB4MDAgfSwKKyAgMTYsIDB4ZGIxMCwgMCwgezB4ZjAsMHgwMCwweDNlLDB4MDgsMHgwYywweDAwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGIyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4MDAsMHhmZCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZGIzMCwgMCwgezB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgwMywweDNmLDB4NDQsMHgxZiwweDkxLDB4MWIsMHhlNCwweDQwLDB4ZmQgfSwKKyAgMTYsIDB4ZGI0MCwgMCwgezB4MDEsMHgzZiwweDUwLDB4MGUsMHg5NCwweDAzLDB4ZjQsMHg0MCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4YTYgfSwKKyAgMTYsIDB4ZGI1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNCwweDAwLDB4Y2QsMHhhMCwweDcxLDB4NjggfSwKKyAgMTYsIDB4ZGI2MCwgMCwgezB4OGQsMHg5OCwweDAzLDB4ZDQsMHgwMCwweGNkLDB4MDAsMHgzMywweDYwLDB4MGMsMHg5OCwweDhmLDB4MjcsMHgyMCwweGM5LDB4NDAgfSwKKyAgMTYsIDB4ZGI3MCwgMCwgezB4M2UsMHg3OCwweDBjLDB4OWUsMHg4YiwweDI3LDB4MjAsMHhkMSwweDExLDB4MzAsMHg2MCwweDhjLDB4OWMsMHgwMywweDI1LDB4MDAgfSwKKyAgMTYsIDB4ZGI4MCwgMCwgezB4ZjksMHg0MCwweDNlLDB4NzgsMHgwZiwweDkwLDB4MDMsMHg0NiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGI5MCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MTAsMHg4OCwweDAxLDB4MjIsMHgwMSwweDA4LDB4OGMsMHgyMiwweGU4LDB4MDAsMHg4OCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4ZGJhMCwgMCwgezB4MTQsMHgwOCwweDhjLDB4MGIsMHgyMywweDkwLDB4ODgsMHhhMCwweDJlLDB4YjAsMHgwOCwweDhjLDB4NDIsMHgyMywweDAwLDB4ODggfSwKKyAgMTYsIDB4ZGJiMCwgMCwgezB4YTAsMHgzNiwweDJhLDB4MTgsMHg4YSwweDAyLDB4MjIsMHgwMCwweGI4LDB4YTAsMHgyZSwweDM0LDB4MGIsMHhjYSwweDgyLDB4MGUgfSwKKyAgMTYsIDB4ZGJjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHg0MCwweDI0LDB4NTAgfSwKKyAgMTYsIDB4ZGJkMCwgMCwgezB4MDksMHgxNiwweDgyLDB4YzQsMHgwMCwweGE5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHgxMiwweDkyLDB4NTQsMHgwOCwweDg1LDB4MDAgfSwKKyAgMTYsIDB4ZGJlMCwgMCwgezB4MmYsMHg0YywweDA5LDB4NTIsMHgxMiwweDE0LDB4ODAsMHg5ZCwweDAwLDB4MjEsMHg1MCwweDA4LDB4NTQsMHgyMiwweDE0LDB4ODAgfSwKKyAgMTYsIDB4ZGJmMCwgMCwgezB4YjUsMHgwMCwweDJkLDB4NDgsMHgwYiwweGQwLDB4MDIsMHg0MiwweDA1LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGMwMCwgMCwgezB4MTgsMHgwNSwweGE0LDB4MDIsMHg4OSwweDAxLDB4YTIsMHg0MCwweDQ4LDB4OTAsMHgwMiwweGU0LDB4MDIsMHhhOSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ZGMxMCwgMCwgezB4NDAsMHg2OCwweDkwLDB4MDIsMHg2NCwweDEwLDB4YWQsMHgwMCwweDJmLDB4NDEsMHgyOCwweDUwLDB4MDIsMHgzNCwweDAwLDB4OGQgfSwKKyAgMTYsIDB4ZGMyMCwgMCwgezB4NDQsMHgyNywweDQwLDB4MzksMHhkMCwweDAyLDB4MzUsMHgwMCwweGJkLDB4MTQsMHgyZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4ZGMzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhjNCwweDAwLDB4YzksMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4ZGM0MCwgMCwgezB4MmQsMHg5MCwweDAzLDB4ZTcsMHgwMCwweGUxLDB4ZTAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDBiLDB4NjQsMHgwMiwweGM5LDB4MDggfSwKKyAgMTYsIDB4ZGM1MCwgMCwgezB4M2MsMHg1MCwweDBjLDB4OTAsMHgwMiwweDI2LDB4MDIsMHhkOSwweGMwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgxMywweDI3LDB4MDAgfSwKKyAgMTYsIDB4ZGM2MCwgMCwgezB4ZjksMHgyMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGM3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDIsMHhmOSwweDAwLDB4MzgsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4ODAsMHhkOSwweGEwLDB4M2MgfSwKKyAgMTYsIDB4ZGM4MCwgMCwgezB4NDAsMHgwZiwweDEwLDB4MDMsMHhhNCwweDAwLDB4ZDksMHgxMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNCwweDkyLDB4ZjkgfSwKKyAgMTYsIDB4ZGM5MCwgMCwgezB4MjEsMHgzYywweDQwLDB4MmUsMHg5MCwweDBmLDB4ZTYsMHg4MCwweGY5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfSwKKyAgMTYsIDB4ZGNhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDQwLDB4ZTgsMHgxMCwweDNlLDB4MDQgfSwKKyAgMTYsIDB4ZGNiMCwgMCwgezB4NGUsMHg4MCwweDAzLDB4MjAsMHg4MCwweGQ4LDB4NjAsMHgzYSwweDAyLDB4MGMsMHg4MCwweDEzLDB4MjAsMHgwMCwweGY4LDB4NDAgfSwKKyAgMTYsIDB4ZGNjMCwgMCwgezB4MzYsMHgxMCwweDJkLDB4ODAsMHgwMywweGEwLDB4MDgsMHhlOCwweDQwLDB4MzIsMHgwMCwweDBkLDB4MDAsMHgwMywweDIxLDB4MDIgfSwKKyAgMTYsIDB4ZGNkMCwgMCwgezB4YzgsMHg0MCwweGIyLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGNlMCwgMCwgezB4MjgsMHgxMSwweDNiLDB4MTAsMHg4NiwweDAxLDB4MmYsMHhhMCwweDBkLDB4YTAsMHgwMiwweDM4LDB4MDAsMHg4ZSwweGUwLDB4MjMgfSwKKyAgMTYsIDB4ZGNmMCwgMCwgezB4YTIsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4YmEsMHg4MCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ODIgfSwKKyAgMTYsIDB4ZGQwMCwgMCwgezB4MDAsMHgyYSwweDgwLDB4MjgsMHhhMCwweDAyLDB4MmEsMHgwNCwweDhhLDB4ODAsMHgyMiwweGEwLDB4MGIsMHg2MCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4ZGQxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MywweDgwLDB4YTIsMHgwMCwweDJjLDB4YTAgfSwKKyAgMTYsIDB4ZGQyMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MmUsMHgwMCwweDkyLDB4MDAsMHgyOCwweGMwLDB4MjgsMHgzMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4ODAgfSwKKyAgMTYsIDB4ZGQzMCwgMCwgezB4MjQsMHhjMCwweDA5LDB4MzAsMHgwYSwweDhjLDB4MDAsMHhhMywweDAwLDB4NjAsMHhjMCwweDA4LDB4MzAsMHgwYSwweDRjLDB4MDAgfSwKKyAgMTYsIDB4ZGQ0MCwgMCwgezB4ODMsMHgwMCwweDIwLDB4ZTAsMHgwYiwweDIwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGQ1MCwgMCwgezB4YTAsMHgwMSwweDEwLDB4MDAsMHg4NiwweDAwLDB4MmQsMHhjMCwweDA5LDB4M2EsMHgwMiwweDM1LDB4MDAsMHg4NiwweDAwLDB4MjEgfSwKKyAgMTYsIDB4ZGQ2MCwgMCwgezB4YzAsMHgwOCwweDczLDB4MDIsMHgxMCwweDAwLDB4YmYsMHg4OCwweDIxLDB4MDAsMHgwOCwweDcwLDB4MDIsMHgxYywweDA4LDB4OGYgfSwKKyAgMTYsIDB4ZGQ3MCwgMCwgezB4MDAsMHgyYiwweGMwLDB4MDgsMHgyMCwweDEyLDB4NWUsMHgyMCwweDg3LDB4ODgsMHgyMSwweDgzLDB4MGIsMHg2MCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4ZGQ4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4ZTUsMHg4MSwweDNkLDB4YTAgfSwKKyAgMTYsIDB4ZGQ5MCwgMCwgezB4MmMsMHg3YSwweDBiLDB4MWUsMHgwMCwweGQ0LDB4ODAsMHgzOCwweGUwLDB4MGMsMHhmYSwweDBiLDB4MWUsMHgwMCwweGY2LDB4ODAgfSwKKyAgMTYsIDB4ZGRhMCwgMCwgezB4MzQsMHhlMCwweDBkLDB4MjgsMHgwMywweDhhLDB4MDAsMHhlNiwweDgwLDB4MzEsMHgyMCwweDBjLDB4NzgsMHgwMywweDdhLDB4MDQgfSwKKyAgMTYsIDB4ZGRiMCwgMCwgezB4Y2UsMHg4NCwweDMxLDB4ZTAsMHg0ZiwweDc4LDB4NDMsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGRjMCwgMCwgezB4MDgsMHgwZCwweDgwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjUsMHgyMywweGU0LDB4MDAsMHhmMCwweDA0LDB4MzYgfSwKKyAgMTYsIDB4ZGRkMCwgMCwgezB4NDAsMHgwZiwweGI2LDB4ODcsMHhlMCwweDAwLDB4ZjIsMHgwMCwweDNlLDB4MDAsMHgxZiwweGEwLDB4MGIsMHhlOCwweDAwLDB4ZmEgfSwKKyAgMTYsIDB4ZGRlMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGUsMHhhMCwweDAzLDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZGRmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4Y2MsMHg4MCwweDMzLDB4YTAgfSwKKyAgMTYsIDB4ZGUwMCwgMCwgezB4MGMsMHhmYywweDAzLDB4M2UsMHgwMCwweGZjLDB4ODAsMHgzNywweGUwLDB4MGYsMHhiOSwweDIxLDB4M2UsMHgwMCwweGZkLDB4ODIgfSwKKyAgMTYsIDB4ZGUxMCwgMCwgezB4MzMsMHhlMCwweDJjLDB4ZjgsMHgwMywweDdlLDB4MTAsMHhkZiwweDg0LDB4M2QsMHhlMCwweDBjLDB4ZjgsMHgwMywweGY2LDB4MDAgfSwKKyAgMTYsIDB4ZGUyMCwgMCwgezB4ZmQsMHg4MCwweDNmLDB4NjAsMHgwYywweGU4LDB4MjMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGUzMCwgMCwgezB4YTgsMHgxMSwweDk4LDB4NDAsMHg4NCwweDEwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDEwLDB4ODAsMHhiNCwweDAwLDB4MjEgfSwKKyAgMTYsIDB4ZGU0MCwgMCwgezB4YzgsMHgwYiwweDdhLDB4MDIsMHgxMCwweDAwLDB4ZmQsMHgwMCwweDIxLDB4MDQsMHgwOCwweDcwLDB4MDIsMHgxYywweDQyLDB4ODcgfSwKKyAgMTYsIDB4ZGU1MCwgMCwgezB4MDAsMHgyZCwweGM0LDB4NDgsMHg2MSwweDAyLDB4ZDYsMHg4MCwweGI1LDB4MDAsMHgyZiwweDA0LDB4MDgsMHg2MSwweDgyLDB4MmEgfSwKKyAgMTYsIDB4ZGU2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ODEsMHgwMCwweDIxLDB4ODAgfSwKKyAgMTYsIDB4ZGU3MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MWMsMHgxMCwweGJjLDB4MDgsMHgyNSwweDgwLDB4NGIsMHgzMCwweDBlLDB4MWMsMHgwMCwweGI0LDB4MDAgfSwKKyAgMTYsIDB4ZGU4MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MjAsMHgwMiwweDU4LDB4MDAsMHg5NiwweDAwLDB4MmYsMHgwMCwweDBhLDB4NzAsMHgwMiwweGQwLDB4ODAgfSwKKyAgMTYsIDB4ZGU5MCwgMCwgezB4YjQsMHgxOCwweDJkLDB4NDAsMHgwOSwweGY4LDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGVhMCwgMCwgezB4MjAsMHgxNCwweGM4LDB4MDIsMHg4MCwweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgyMiwweDBiLDB4YzAsMHhiMCwweGMwLDB4MjIgfSwKKyAgMTYsIDB4ZGViMCwgMCwgezB4ODAsMHgwYiwweDMwLDB4MDIsMHgwMCwweDAwLDB4YTAsMHgwNCwweDIyLDB4MDAsMHgyOCwweGEwLDB4MDIsMHgyYiwweDAwLDB4OGEgfSwKKyAgMTYsIDB4ZGVjMCwgMCwgezB4MDAsMHgyYywweDAwLDB4MDgsMHhhMCwweDA2LDB4YzAsMHgwMCwweGIwLDB4YzIsMHgyYywweDAwLDB4MDksMHhiYywweDFhLDB4MDggfSwKKyAgMTYsIDB4ZGVkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4YzAgfSwKKyAgMTYsIDB4ZGVlMCwgMCwgezB4MGMsMHhmMCwweDBiLDB4MjYsMHgwMCwweGY5LDB4YzAsMHgzNiwweDAwLDB4MGYsMHhmMCwweDEzLDB4MmMsMHgxMCwweGJiLDB4NDAgfSwKKyAgMTYsIDB4ZGVmMCwgMCwgezB4ZjIsMHhjMCwweDA4LDB4OTAsMHgwMywweDY3LDB4MDAsMHhkOSwweDgwLDB4M2UsMHhjMCwweDA4LDB4OTAsMHgwMiwweGVjLDB4MDAgfSwKKyAgMTYsIDB4ZGYwMCwgMCwgezB4ZmIsMHhkMCwweDNlLDB4YzAsMHgyOSwweDhjLDB4MDAsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGYxMCwgMCwgezB4ODAsMHgwMCwweGUwLDB4MDAsMHhmOCwweDQ0LDB4M2MsMHhkMCwweDJmLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmOSwweDIwLDB4M2UgfSwKKyAgMTYsIDB4ZGYyMCwgMCwgezB4NDAsMHgwZiwweDMwLDB4MDMsMHhlMCwweDAwLDB4ZmIsMHgwOCwweDNlLDB4MDAsMHgwZiwweDkwLDB4MTMsMHhlNCwweDQyLDB4ZjkgfSwKKyAgMTYsIDB4ZGYzMCwgMCwgezB4MTAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWUsMHgwMCwweGZiLDB4MDAsMHgzZSwweDgwLDB4MGUsMHg4MiwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4ZGY0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlMCwweDA4LDB4ZmMsMHg4MCwweDMyLDB4ZTQgfSwKKyAgMTYsIDB4ZGY1MCwgMCwgezB4MGUsMHhmMCwweDAzLDB4NzQsMHgwMCwweGZjLDB4MDAsMHgzZiwweDQwLDB4MGMsMHhmMCwweDBiLDB4M2MsMHgwMCwweGZlLDB4MDAgfSwKKyAgMTYsIDB4ZGY2MCwgMCwgezB4M2YsMHhjMCwweDBkLDB4YzEsMHgwMywweDIwLDB4MjAsMHhjYywweDEwLDB4MzMsMHgwMCwweDBjLDB4ZDEsMHgwMywweDU4LDB4MDAgfSwKKyAgMTYsIDB4ZGY3MCwgMCwgezB4Y2UsMHgwMCwweDJmLDB4YzAsMHgwZiwweGQxLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGY4MCwgMCwgezB4ODEsMHg0NCwweDYyLDB4MDAsMHhiMCwweDQwLDB4MmEsMHhmMSwweDA4LDB4YjAsMHgxMiwweDI2LDB4MDgsMHhiOCwweGM4LDB4MmUgfSwKKyAgMTYsIDB4ZGY5MCwgMCwgezB4NzAsMHgwYSwweGIwLDB4MDIsMHgyMCwweDAwLDB4YmEsMHgwMCwweDJlLDB4MDAsMHgyOCwweDgwLDB4MDMsMHgyMiwweDQwLDB4ODggfSwKKyAgMTYsIDB4ZGZhMCwgMCwgezB4MDEsMHgyMCwweDAwLDB4MGEsMHg4MCwweDAyLDB4MjgsMHgwMCwweDhhLDB4MDEsMHgyZSwweDgwLDB4OGIsMHg5MCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZGZiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNiwweDAwLDB4YjgsMHgyOCwweDIyLDB4NDIgfSwKKyAgMTYsIDB4ZGZjMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4NjYsMHgwMCwweGI4LDB4ODAsMHgyZSwweDMwLDB4ODgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGI5LDB4MDEgfSwKKyAgMTYsIDB4ZGZkMCwgMCwgezB4MmUsMHhjMCwweDg4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MGMgfSwKKyAgMTYsIDB4ZGZlMCwgMCwgezB4ODksMHgwMSwweDJlLDB4NDAsMHgxYiwweDgwLDB4MDIsMHg2MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGZmMCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHhiMCwweDAwLDB4MjgsMHhjMCwweDI4LDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiMCwweDAwLDB4MmMgfSwKKyAgMTYsIDB4ZTAwMCwgMCwgezB4NDAsMHgwYSwweDMwLDB4MDIsMHgwMCwweDAwLDB4YjEsMHgwMCwweDJjLDB4MDAsMHgwOCwweDEwLDB4MGEsMHgwNCwweDAwLDB4ODEgfSwKKyAgMTYsIDB4ZTAxMCwgMCwgezB4MDEsMHhhMiwweGMwLDB4MDgsMHgwMCwweDBhLDB4MDQsMHg4MCwweDgxLDB4MDAsMHgyYywweDAwLDB4MWIsMHgwMCwweDBhLDB4MDIgfSwKKyAgMTYsIDB4ZTAyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4NDAgfSwKKyAgMTYsIDB4ZTAzMCwgMCwgezB4MGUsMHhmMCwweDIzLDB4NjQsMHgwOCwweGY4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHhmMCwweDAzLDB4MmMsMHgwMCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4ZTA0MCwgMCwgezB4M2UsMHhjMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDIsMHhjOCwweDA0LDB4MzIsMHgwMCwweDFjLDB4OTAsMHgwMywweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZTA1MCwgMCwgezB4YzgsMHgwMSwweDNlLDB4NDEsMHg5ZiwweDkwLDB4NDMsMHg0MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTA2MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDAsMHhmYywweDBjLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4MTAsMHhmNCwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZTA3MCwgMCwgezB4MDAsMHgwZiwweGY0LDB4MjMsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgwZSwweGMwLDB4MDMsMHhiMCwweDAwLDB4ZmMgfSwKKyAgMTYsIDB4ZTA4MCwgMCwgezB4MDAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZTEsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAxLDB4MWYsMHg1MCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZTA5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MGQsMHhmMCwweGQwLDB4ZmYsMHgyMCwweDNlLDB4ZDAgfSwKKyAgMTYsIDB4ZTBhMCwgMCwgezB4OGUsMHhiMCwweDAzLDB4ZWMsMHhhMCwweGRiLDB4MjgsMHgzZSwweGNjLDB4MGMsMHhiMywweDAzLDB4YWQsMHgwOCwweGY4LDB4M2MgfSwKKyAgMTYsIDB4ZTBiMCwgMCwgezB4MzIsMHgyMywweDBlLDB4NDgsMHgyMywweDdhLDB4MDAsMHhmZCwweDk0LDB4M2YsMHhlMCwweDBmLDB4NzgsMHgzMywweGVlLDB4MDggfSwKKyAgMTYsIDB4ZTBjMCwgMCwgezB4YmYsMHg4MCwweDNmLDB4ZTQsMHgwZiwweGY5LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBkMCwgMCwgezB4YTAsMHgwMCwweGVjLDB4YzgsMHhiZiwweGQxLDB4MGYsMHhjOCwweDBjLDB4MjYsMHg4MiwweGZkLDB4MjQsMHg4ZiwweDAwLDB4MmUgfSwKKyAgMTYsIDB4ZTBlMCwgMCwgezB4OTksMHgwYSwweGYyLDB4NjIsMHgxZCwweGQwLDB4OTksMHg2MSwweDIyLDB4NzEsMHg4OCwweDg4LDB4MDIsMHhhYywweDAwLDB4YjggfSwKKyAgMTYsIDB4ZTBmMCwgMCwgezB4MjIsMHgyZSwweDIwLDB4NGIsMHg4OCwweDAzLDB4YTAsMHgwMCwweDgwLDB4MDAsMHgyZSwweDA4LDB4MGIsMHg4MCwweDIzLDB4NjAgfSwKKyAgMTYsIDB4ZTEwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDA0LDB4YjMsMHgwMywweDBjLDB4Y2MgfSwKKyAgMTYsIDB4ZTExMCwgMCwgezB4MGEsMHgxMywweDEyLDB4Y2MsMHgxNCwweGEzLDB4MGUsMHgwYywweDU4LDB4MGEsMHgzMywweDAyLDB4OGMsMHgxMCwweGEzLDB4MjAgfSwKKyAgMTYsIDB4ZTEyMCwgMCwgezB4YTAsMHgwYSwweDE4LDB4OTAsMHgwMiwweDQ4LDB4YTAsMHhiMCwweDIwLDB4MjQsMHg4MCwweDBhLDB4MjAsMHgwMiwweGNjLDB4MDkgfSwKKyAgMTYsIDB4ZTEzMCwgMCwgezB4YTEsMHgwMCwweDJjLDB4ODAsMHgwYiwweDMyLDB4NDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE0MCwgMCwgezB4ZTAsMHgxMSwweGFjLDB4MjAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDRiLDB4ODAsMHhhMiwweGVjLDB4MDAsMHhhYiwweDAwLDB4NGUgfSwKKyAgMTYsIDB4ZTE1MCwgMCwgezB4NDYsMHgyYSwweGIwLDB4MDIsMHgyYywweDA0LDB4OWIsMHg4MCwweDJhLDB4NjAsMHg4YSwweDljLDB4MDIsMHhhYywweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZTE2MCwgMCwgezB4ODEsMHgyZSwweDQwLDB4MGIsMHg5OCwweDAyLDB4YTMsMHgwMCwweDhhLDB4MDAsMHgyZSwweDQwLDB4MGIsMHg4MCwweDA0LDB4ZjAgfSwKKyAgMTYsIDB4ZTE3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMSwweDAwLDB4ZmIsMHgwNCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ZTE4MCwgMCwgezB4MGUsMHhiNCwweDAzLDB4ZWMsMHgwYSwweGRiLDB4MDIsMHgyZSwweGQxLDB4MGUsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4ODIgfSwKKyAgMTYsIDB4ZTE5MCwgMCwgezB4MzIsMHgyOCwweDFlLDB4MGMsMHgwMywweDY4LDB4MDAsMHhiOSwweDAwLDB4M2UsMHg0MCwweDRmLDB4YjAsMHg0MywweGVkLDB4MDAgfSwKKyAgMTYsIDB4ZTFhMCwgMCwgezB4ZWEsMHgwMCwweDNlLDB4NDAsMHgwZiwweDgwLDB4MDMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFiMCwgMCwgezB4YzAsMHgwMSwweGI4LDB4MTgsMHhmZiwweDAyLDB4MWYsMHhjMCwweDBjLDB4ZTIsMHgwMywweGZjLDB4MDAsMHhkZiwweDAzLDB4MmYgfSwKKyAgMTYsIDB4ZTFjMCwgMCwgezB4YTEsMHgwZiwweDcwLDB4MDMsMHhmYywweDA0LDB4YWIsMHgwNCwweDM3LDB4NDIsMHgyZCwweGQwLDB4MDIsMHg3YywweDAwLDB4ZmMgfSwKKyAgMTYsIDB4ZTFkMCwgMCwgezB4MDAsMHgzZiwweDgwLDB4MGYsMHhjMCwweDAzLDB4YjAsMHgwMCwweGZkLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhmMCwweDAzLDB4NzggfSwKKyAgMTYsIDB4ZTFlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhOSwweDAwLDB4ZGIsMHgwMCwweDNjLDB4YzAgfSwKKyAgMTYsIDB4ZTFmMCwgMCwgezB4MmUsMHg5NCwweDAxLDB4NmMsMHgxMSwweGNiLDB4MDAsMHhiOCwweGMwLDB4MGMsMHhiMCwweDAzLDB4NmMsMHgwMCwweGViLDB4MDEgfSwKKyAgMTYsIDB4ZTIwMCwgMCwgezB4MzIsMHgxMCwweDA3LDB4OTIsMHgwMywweGE4LDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwYywweDA3LDB4YTIsMHgwMywweGFkLDB4MDAgfSwKKyAgMTYsIDB4ZTIxMCwgMCwgezB4ZDgsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTIyMCwgMCwgezB4YzgsMHgwNSwweDI4LDB4MDgsMHhiZiwweDAwLDB4MmYsMHhjMCwweDg4LDB4ODAsMHgwMiwweDNjLDB4MDgsMHhlZiwweDAzLDB4MjIgfSwKKyAgMTYsIDB4ZTIzMCwgMCwgezB4MDAsMHgwZCwweGY1LDB4MDAsMHgzYywweDAwLDB4OGIsMHg4MiwweDIyLDB4NjAsMHgwMywweDljLDB4MDIsMHgyYywweDEwLDB4YjkgfSwKKyAgMTYsIDB4ZTI0MCwgMCwgezB4YjAsMHgyMiwweGYwLDB4MGIsMHg5MCwweDAyLDB4MjAsMHgwMCwweGJiLDB4MDAsMHgyMiwweGUyLDB4MGQsMHhiMCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4ZTI1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MCwweDAwLDB4YjMsMHgwMiwweDJjLDB4YzAgfSwKKyAgMTYsIDB4ZTI2MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDksMHgzNCwweDA0LDB4ZWMsMHgwMCwweGE4LDB4MDAgfSwKKyAgMTYsIDB4ZTI3MCwgMCwgezB4MjIsMHhmMCwweDBiLDB4MDAsMHgwMiwweDg4LDB4MDAsMHhiMywweDAwLDB4MjgsMHhlMCwweDBiLDB4MTQsMHgwMiwweGEwLDB4MDAgfSwKKyAgMTYsIDB4ZTI4MCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDQsMHhiNywweDgwLDB4MmQsMHhlOCwweDA4LDB4NzgsMHgwMiwweDBlLDB4YzgsMHhhNywweDkwLDB4MjEgfSwKKyAgMTYsIDB4ZTJhMCwgMCwgezB4YTgsMHgxOSwweDM4LDB4NTIsMHg5ZSwweGMxLDB4ODcsMHg4MCwweDIxLDB4ZTIsMHgwYiwweGQ5LDB4ODIsMHg5ZSwweDAwLDB4YjYgfSwKKyAgMTYsIDB4ZTJiMCwgMCwgezB4YTAsMHgyZCwweDIwLDB4MGIsMHg2OCwweDAyLDB4MWUsMHgwMCwweGI0LDB4YzEsMHgyMSwweDIwLDB4MDksMHg0OCwweDAyLDB4YzggfSwKKyAgMTYsIDB4ZTJjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwYywweDgwLDB4YjMsMHgxMCwweDNlLDB4ZTAgfSwKKyAgMTYsIDB4ZTJkMCwgMCwgezB4MGUsMHgzYSwweDA3LDB4NGUsMHgwMCwweGNiLDB4OTAsMHgzYSwweDYxLDB4MGQsMHgzOCwweDAzLDB4Y2UsMHhkMSwweGUxLDB4OTggfSwKKyAgMTYsIDB4ZTJlMCwgMCwgezB4MzAsMHhhNCwweDhmLDB4MTAsMHgwMywweDg4LDB4MDAsMHhiYSwweGExLDB4M2MsMHg4NCwweDA3LDB4MDAsMHgwMywweDgyLDB4ZDQgfSwKKyAgMTYsIDB4ZTJmMCwgMCwgezB4ZDEsMHgwMCwweDcyLDB4ODAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTMwMCwgMCwgezB4NDAsMHgxNSwweGJjLDB4MDQsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzIsMHgyMywweGVjLDB4YjAsMHhmZiwweDAwLDB4MzIgfSwKKyAgMTYsIDB4ZTMxMCwgMCwgezB4MDQsMHgwNiwweGI0LDB4MjMsMHg3YywweDEwLDB4YmYsMHgwMCwweDNlLDB4ODQsMHgwZiwweGIwLDB4MDMsMHg3YywweDQwLDB4ZmYgfSwKKyAgMTYsIDB4ZTMyMCwgMCwgezB4MDAsMHgzMywweDQwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZlLDB4MDAsMHhiZiwweDQwLDB4MGYsMHhjOCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZTMzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlNCwweDAwLDB4Y2IsMHgzMywweDNlLDB4YzggfSwKKyAgMTYsIDB4ZTM0MCwgMCwgezB4NGMsMHhiMCwweDAzLDB4YWMsMHg5MCwweGRiLDB4YTAsMHgzNiwweGMwLDB4MGUsMHhiYSwweDQzLDB4NmMsMHgwMCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4ZTM1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4MDAsMHgwZiwweDI4LDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTgsMHg0MywweDYwLDB4MDAgfSwKKyAgMTYsIDB4ZTM2MCwgMCwgezB4ZmEsMHgwMCwweDNlLDB4NDAsMHg0ZiwweDA4LDB4MGIsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM3MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MTAsMHgwNywweDA4LDB4MmMsMHhjYSwweDA4LDB4MjAsMHgwMiwweDFjLDB4MjAsMHg4NywweDI4LDB4M2YgfSwKKyAgMTYsIDB4ZTM4MCwgMCwgezB4ODAsMHg4YSwweGYwLDB4MDIsMHgxZCwweDQwLDB4ODcsMHgwNCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgxYywweDAwLDB4YjYgfSwKKyAgMTYsIDB4ZTM5MCwgMCwgezB4MDAsMHgyZCwweDgwLDB4MGIsMHg2MCwweDAzLDB4MWMsMHgwMCwweGI1LDB4MDAsMHgyZCwweDgwLDB4MGIsMHg3MCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZTNhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4ODcsMHhhMCwweDJkLDB4ZTQgfSwKKyAgMTYsIDB4ZTNiMCwgMCwgezB4MGEsMHg1OCwweDAyLDB4MWUsMHgwMSwweDgzLDB4OTAsMHgyMSwweDcwLDB4MGIsMHg3OSwweDAyLDB4OWUsMHgwMSwweDg1LDB4YzAgfSwKKyAgMTYsIDB4ZTNjMCwgMCwgezB4MmQsMHhlMCwweDRiLDB4NTgsMHgxMiwweDFhLDB4MDAsMHhiNiwweDgwLDB4MmQsMHgyMCwweDBiLDB4NDgsMHgwMiwweDUyLDB4MDAgfSwKKyAgMTYsIDB4ZTNkMCwgMCwgezB4YjQsMHg4MCwweDJkLDB4MjAsMHgwYiwweDQ4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNlMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDg4LDB4MzYsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwLDB4NmMgfSwKKyAgMTYsIDB4ZTNmMCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MGEsMHhhYywweDAwLDB4OWIsMHhlMCwweDZjLDB4YzgsMHgwYiwweDMyLDB4MDIsMHgwYywweDAxLDB4YjMgfSwKKyAgMTYsIDB4ZTQwMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgxMCwweGIzLDB4NDAsMHgyYywweGMwLDB4MGIsMHgzYywweDgyLDB4MTIgfSwKKyAgMTYsIDB4ZTQxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAyLDB4Y2EsMHgwMCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4ZTQyMCwgMCwgezB4MGUsMHhlNCwweDhiLDB4MjgsMHgwMCwweGNhLDB4MDAsMHgzMywweDk1LDB4MGYsMHhhMCwweDA3LDB4YTgsMHgwMiwweGNlLDB4NDAgfSwKKyAgMTYsIDB4ZTQzMCwgMCwgezB4M2YsMHhiMCwweDBmLDB4ZTQsMHg4MiwweDI4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgyMywweDY4LDB4MDAgfSwKKyAgMTYsIDB4ZTQ0MCwgMCwgezB4ZmEsMHg0MCwweDNlLDB4ODEsMHg0ZiwweGE0LDB4ZTMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4ODAsMHhmMCwweDAwLDB4M2MsMHgwMCwweDJmLDB4MDAsMHgwMiwweDYwLDB4MDAsMHhlOCwweDAwLDB4M2MgfSwKKyAgMTYsIDB4ZTQ2MCwgMCwgezB4MDAsMHgwZSwweDgwLDB4MDEsMHgyMCwweDAwLDB4ZTgsMHgwNCwweDVlLDB4MDQsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZmMgfSwKKyAgMTYsIDB4ZTQ3MCwgMCwgezB4MDEsMHgzZiwweDEwLDB4MGYsMHhjNCwweDAzLDB4YjAsMHgwMCwweGZjLDB4MDksMHgzZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ZTQ4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YTksMHgyMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4ZTQ5MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4NDQsMHgwNCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwNCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4ZTRhMCwgMCwgezB4MzIsMHg0MCwweDhmLDB4OTAsMHgwYiwweGU0LDB4MDgsMHhmOSwweDAwLDB4M2UsMHg0NCwweDBlLDB4OTgsMHgwMywweGU2LDB4MDAgfSwKKyAgMTYsIDB4ZTRiMCwgMCwgezB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRjMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDE4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4ZTRkMCwgMCwgezB4NDAsMHgwOCwweDk0LDB4MDIsMHhlNCwweDAwLDB4ZDksMHgwNCwweDIyLDB4NDAsMHgwYiwweDFjLDB4MGIsMHg2NCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZTRlMCwgMCwgezB4OTQsMHgyYywweDUwLDB4MDgsMHg5YywweDAyLDB4ZTQsMHgxNCwweGI5LDB4OTAsMHgwZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZTRmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAyLDB4ODksMHgwMCwweDI2LDB4NDAgfSwKKyAgMTYsIDB4ZTUwMCwgMCwgezB4NGEsMHg5MCwweDAyLDB4NjQsMHgwMCwweDk5LDB4MDQsMHgyZSwweDQwLDB4MDgsMHg5OCwweDgyLDB4ZTQsMHgwMCwweDg5LDB4MDAgfSwKKyAgMTYsIDB4ZTUxMCwgMCwgezB4NmEsMHg0MCwweDBhLDB4OTIsMHg4MiwweGU0LDB4MDAsMHhiZCwweDAxLDB4MmYsMHg1MCwweDEyLDB4ZDYsMHgwMiwweGY0LDB4NDAgfSwKKyAgMTYsIDB4ZTUyMCwgMCwgezB4YmQsMHgwMCwweDBmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTUzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0OCwweDA4LDB4MTIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDIyLDB4MmMgfSwKKyAgMTYsIDB4ZTU0MCwgMCwgezB4NDgsMHhhOCwweDEyLDB4MDYsMHhjNCwweDkwLDB4OTEsMHgyMCwweDI4LDB4NTAsMHgwYiwweDkwLDB4MDIsMHg0NSwweDAwLDB4YjUgfSwKKyAgMTYsIDB4ZTU1MCwgMCwgezB4NDAsMHg2ZCwweDQwLDB4MDgsMHg1MCwweDEyLDB4ZDQsMHgwNCwweGI1LDB4MDIsMHgyZCwweDQwLDB4MGIsMHg1MCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ZTU2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzgsMHgwMCwweDM2LDB4MTQgfSwKKyAgMTYsIDB4ZTU3MCwgMCwgezB4MGEsMHg4NSwweDAzLDB4NDEsMHg0MCwweGQ4LDB4NTAsMHgyZSwweDE0LDB4MGMsMHg4NSwweDAzLDB4YzEsMHg0MCwweGM4LDB4NTAgfSwKKyAgMTYsIDB4ZTU4MCwgMCwgezB4YmEsMHgwMCwweDBlLDB4ODAsMHgyMywweGUwLDB4MDAsMHg3OCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDQgfSwKKyAgMTYsIDB4ZTU5MCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVhMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4NDAsMHhkOSwweDEwLDB4M2UsMHg0NCwweDA3LDB4ZjEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwLDB4M2YgfSwKKyAgMTYsIDB4ZTViMCwgMCwgezB4NDQsMHhhZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDM3LDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZTVjMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHhhMCwweGY5LDB4MjgsMHgzZSwweDRhLDB4MGYsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4ZTVkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweGQ0LDB4ZmQsMHhhMiwweDNhLDB4NzAgfSwKKyAgMTYsIDB4ZTVlMCwgMCwgezB4OGMsMHg5ZSwweDAzLDB4MjYsMHg4MCwweGM5LDB4YTAsMHgzMiwweDY4LDB4MGMsMHhkYiwweDQzLDB4MjcsMHg4MCwweDlkLDB4YTIgfSwKKyAgMTYsIDB4ZTVmMCwgMCwgezB4YjcsMHg0MCwweDBmLDB4NTAsMHgwMywweDY1LDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjMSwweDA3LDB4ZDAsMHgwMywweGY1LDB4MDQgfSwKKyAgMTYsIDB4ZTYwMCwgMCwgezB4ZmQsMHg0MCwweDJmLDB4YzAsMHgwYywweGQwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTYxMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4ODgsMHhiOCwweDUwLDB4MjIsMHgzOCwweDA4LDB4OGUsMHgwMCwweGEyLDB4YTAsMHg4OCwweGU4LDB4MjIgfSwKKyAgMTYsIDB4ZTYyMCwgMCwgezB4MzgsMHg0OCwweDg4LDB4MDMsMHg2MiwweDEwLDB4YTgsMHhlOCwweDNjLDB4MDAsMHgwYiwweDgwLDB4MDMsMHg2MiwweDgwLDB4YjggfSwKKyAgMTYsIDB4ZTYzMCwgMCwgezB4MDEsMHgyZSwweDgwLDB4MGIsMHg4MCwweDIxLDB4YTIsMHgwMCwweGIwLDB4ODQsMHgyZSwweDJhLDB4MjgsMHg4YSwweDgyLDB4Y2UgfSwKKyAgMTYsIDB4ZTY0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDQwLDB4YjEsMHgwMCwweDI4LDB4NTggfSwKKyAgMTYsIDB4ZTY1MCwgMCwgezB4ODAsMHgxMywweDQwLDB4MDUsMHgwMCwweDgxLDB4NDAsMHgyMCwweDUyLDB4MjgsMHgxNiwweDAyLDB4ODUsMHg4MCwweDliLDB4YzIgfSwKKyAgMTYsIDB4ZTY2MCwgMCwgezB4NjQsMHg0MSwweDhiLDB4OTgsMHgwMiwweDA0LDB4MDAsMHhiMSwweDA5LDB4MmMsMHg0MCwweDFiLDB4MTAsMHgyMCwweGM0LDB4MDAgfSwKKyAgMTYsIDB4ZTY3MCwgMCwgezB4YjEsMHgwMCwweDJjLDB4NDAsMHg0OCwweDEwLDB4MDIsMHhjMiwweDA1LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY4MCwgMCwgezB4MTgsMHgxNSwweGE1LDB4ODQsMHhiOSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHgwMSwweDAwLDB4MjAgfSwKKyAgMTYsIDB4ZTY5MCwgMCwgezB4NTAsMHgwOCwweDkwLDB4NDIsMHg2NCwweDAwLDB4YTksMHgxMCwweGFlLDB4NTgsMHgwMywweDk4LDB4MDIsMHg2NCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZTZhMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQ2LDB4YTQsMHgxMCwweGI5LDB4MDAsMHgyZSwweDQxLDB4MDgsMHg5MCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4ZTZiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNywweDAwLDB4ZjksMHgwMCwweDJhLDB4NDAgfSwKKyAgMTYsIDB4ZTZjMCwgMCwgezB4MmMsMHg5NCwweDBiLDB4MjQsMHgwMiwweGM5LDB4MDAsMHhiMiwweDQ0LDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwNCwweGQ5LDB4ODAgfSwKKyAgMTYsIDB4ZTZkMCwgMCwgezB4YjYsMHg0MSwweDhmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhmOSwweDYwLDB4M2UsMHg0MCwweDBmLDB4OTYsMHgwMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4ZTZlMCwgMCwgezB4ZjksMHg4MCwweDNlLDB4NDIsMHg4YywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZmMCwgMCwgezB4MjgsMHgwMSwweGE2LDB4MDAsMHhmMSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MWMsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZTcwMCwgMCwgezB4NDAsMHg4ZiwweDkwLDB4MjMsMHhjNCwweDEwLDB4ZjksMHgwMCwweGJlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZTcxMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MDcsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4ZTcyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4ZjgsMHgwMCwweGJlLDB4MDAgfSwKKyAgMTYsIDB4ZTczMCwgMCwgezB4MGUsMHg4NCwweDAzLDB4MjAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHgwMCwweDgzLDB4MjAsMHgwMCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4ZTc0MCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwLDB4MzYsMHgxMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MDggfSwKKyAgMTYsIDB4ZTc1MCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiYSwweDAwLDB4MjIsMHg4MCwweDQ4LDB4YTAsMHgwMywweDY4LDB4MDAsMHhhYSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ZTc3MCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDMsMHg2OCwweDAwLDB4ODIsMHgwMCwweDJmLDB4ODAsMHgwOCwweGU2LDB4MDIsMHgyOCwweDA0LDB4YmUgfSwKKyAgMTYsIDB4ZTc4MCwgMCwgezB4NDAsMHgyMywweDgwLDB4MGIsMHhlOCwweDAyLDB4ZWEsMHgwMCwweGJlLDB4MDEsMHgyMiwweDgwLDB4MGIsMHhlMCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4ZTc5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAxLDB4OTMsMHgwMSwweDIwLDB4YzEgfSwKKyAgMTYsIDB4ZTdhMCwgMCwgezB4MGEsMHgzMCwweDAyLDB4MGMsMHgwMCwweGEzLDB4MDAsMHgyMCwweGMwLDB4ODgsMHgzOCwweDQyLDB4MGMsMHgwMCwweGEzLDB4MDAgfSwKKyAgMTYsIDB4ZTdiMCwgMCwgezB4MjQsMHhjMCwweDBhLDB4M2UsMHg0MiwweDhjLDB4MDAsMHhiMiwweDRjLDB4MjQsMHhlMCwweDRiLDB4MzgsMHgwMiwweGM0LDB4NDEgfSwKKyAgMTYsIDB4ZTdjMCwgMCwgezB4YjMsMHgwMCwweDIyLDB4YzAsMHgwYiwweDEwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdkMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDAsMHhiNywweDAwLDB4MjAsMHhjOSwweDQ4LDB4NzAsMHgwMiwweGRjLDB4NDAsMHhhNywweDE0LDB4MmMgfSwKKyAgMTYsIDB4ZTdlMCwgMCwgezB4YzgsMHgyOCwweDMwLDB4ODIsMHg1YywweGMxLDB4ODUsMHgwMCwweDJkLDB4ZTAsMHgyYSwweGYwLDB4MTIsMHgxYywweDgwLDB4YjcgfSwKKyAgMTYsIDB4ZTdmMCwgMCwgezB4YTAsMHgyMSwweDgyLDB4MGIsMHg3MCwweDgyLDB4ZDQsMHgxMSwweGI2LDB4ODAsMHgyMSwweDQwLDB4NGIsMHg1MCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4ZTgwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDgwLDB4ZDUsMHg4MCwweDI5LDB4ZWEgfSwKKyAgMTYsIDB4ZTgxMCwgMCwgezB4NGUsMHgzYSwweDA3LDB4MGUsMHg4MCwweGUzLDB4YjAsMHgzMSwweGZjLDB4MGMsMHg0OCwweDAzLDB4MGUsMHg0MSwweGU3LDB4ODAgfSwKKyAgMTYsIDB4ZTgyMCwgMCwgezB4M2QsMHhlMCwweDBlLDB4NzgsMHgwMywweDllLDB4ODAsMHhmNCwweGM0LDB4MzUsMHhlMCwweDBmLDB4NzgsMHgyNywweGRlLDB4MDAgfSwKKyAgMTYsIDB4ZTgzMCwgMCwgezB4ZjUsMHg4MCwweGIxLDB4ZTAsMHgwZiwweDU4LDB4MDMsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHgzMSwweDA0LDB4M2EsMHhjNCwweDBmLDB4YjUsMHg5MywweDZkLDB4MDgsMHhmYiwweDQwLDB4M2EgfSwKKyAgMTYsIDB4ZTg1MCwgMCwgezB4YzgsMHg2MywweDgwLDB4MjMsMHhlYywweDk4LDB4ZTksMHgwMCwweDNlLDB4YzAsMHgwZCwweGIwLDB4NDMsMHhlYywweDAwLDB4ZjMgfSwKKyAgMTYsIDB4ZTg2MCwgMCwgezB4ODAsMHgzZSwweDQwLDB4NGYsMHhhMCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4NjgsMHgzZSwweDQwLDB4OGYsMHg5OCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZTg3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDYwLDB4ZWIsMHg5MCwweDNlLDB4ZTQgfSwKKyAgMTYsIDB4ZTg4MCwgMCwgezB4MGYsMHhiOCwweDAwLDB4M2YsMHg0MCwweGNiLDB4ODAsMHg3ZiwweGUwLDB4MGUsMHhmYiwweDAzLDB4MmUsMHg0MCwweGNiLDB4ODAgfSwKKyAgMTYsIDB4ZTg5MCwgMCwgezB4M2YsMHhlMCwweDBmLDB4NzksMHg0MywweDJlLDB4NjAsMHhjYSwweDgxLDB4MzMsMHg2NCwweDhmLDB4ZDksMHgwMywweGZlLDB4MDAgfSwKKyAgMTYsIDB4ZThhMCwgMCwgezB4ZmYsMHg4MSwweDMzLDB4ZTAsMHgwZiwweGQ5LDB4OGIsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThiMCwgMCwgezB4YTgsMHgwMSwweDljLDB4MDAsMHg4NywweDgxLDB4MTksMHhlNCwweDBiLDB4ZmEsMHgxMywweDVlLDB4ODAsMHg4NywweGIyLDB4MmQgfSwKKyAgMTYsIDB4ZThjMCwgMCwgezB4ZWMsMHgwZCwweDc5LDB4MDEsMHg5ZSwweDAwLDB4ZDUsMHg5MCwweDJkLDB4ZjgsMHgwYiwweDc4LDB4MDMsMHg3ZSwweDA4LDB4YWIgfSwKKyAgMTYsIDB4ZThkMCwgMCwgezB4OTEsMHgyOSwweDg1LDB4MGIsMHg1MSwweDAyLDB4ZGMsMHg0OCwweGI2LDB4NDAsMHgyMSwweDQwLDB4MGIsMHg1MCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4ZThlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YywweDE0LDB4YjUsMHgyMCwweDZkLDB4YzggfSwKKyAgMTYsIDB4ZThmMCwgMCwgezB4MGIsMHg3MiwweDAyLDB4NWMsMHg4MCwweDg3LDB4MjAsMHg2OSwweGMwLDB4ODgsMHg1MywweDAyLDB4Y2MsMHg4MSwweDk3LDB4NTAgfSwKKyAgMTYsIDB4ZTkwMCwgMCwgezB4MmQsMHhjOCwweDBiLDB4ZjcsMHgwYSwweGRjLDB4YzAsMHg4NCwweDAxLDB4MjEsMHg0NCwweDFiLDB4NzAsMHgyMiwweGRjLDB4MDAgfSwKKyAgMTYsIDB4ZTkxMCwgMCwgezB4YjUsMHgwMCwweDIxLDB4YzQsMHgwYiwweDUwLDB4ODYsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTkyMCwgMCwgezB4MjAsMHgxNCwweGNmLDB4MzAsMHg5MSwweDAwLDB4MmMsMHhjMCwweDBiLDB4MzQsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMgfSwKKyAgMTYsIDB4ZTkzMCwgMCwgezB4ZjIsMHgwYiwweDEwLDB4MjIsMHgwYywweDAwLDB4OTEsMHgwMCwweDJjLDB4YzgsMHgwYiwweDE4LDB4MGEsMHhjZCwweDAxLDB4YTMgfSwKKyAgMTYsIDB4ZTk0MCwgMCwgezB4MDAsMHgyOCwweDYwLDB4MGIsMHgyMSwweDAyLDB4Y2UsMHgyMCwweGI4LDB4NDAsMHhhMCwweDU0LDB4MGIsMHgxOCwweDAyLDB4MDggfSwKKyAgMTYsIDB4ZTk1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiZCwweDAwLDB4ZjksMHgwMCwweDJmLDB4YzAgfSwKKyAgMTYsIDB4ZTk2MCwgMCwgezB4MGYsMHhmNCwweDAyLDB4N2MsMHgxMiwweGNmLDB4MDMsMHgzZiwweGMyLDB4MGUsMHhiMCwweDAzLDB4ZmMsMHgwNCwweDliLDB4MDIgfSwKKyAgMTYsIDB4ZTk3MCwgMCwgezB4MmUsMHhmMiwweDBmLDB4YTQsMHgwYiwweGRjLDB4MDAsMHhjZSwweDAwLDB4YjAsMHhjOCwweDhmLDB4YTQsMHgwMywweGVmLDB4MDAgfSwKKyAgMTYsIDB4ZTk4MCwgMCwgezB4ZjgsMHg4MCwweDMyLDB4ZjUsMHgxZiwweGRkLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4NDAsMHhlOSwweDAwLDB4M2EsMHhjMCwweDBmLDB4YjEsMHgwMywweGNjLDB4MDAsMHhmMywweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZTlhMCwgMCwgezB4YzAsMHgwZCwweGI0LDB4MDksMHhlYywweDE4LDB4ZjksMHgxMCwweDNlLDB4MTAsMHg0ZiwweGIxLDB4MGEsMHg2YywweDgwLDB4ZjkgfSwKKyAgMTYsIDB4ZTliMCwgMCwgezB4ODksMHgzNiwweDgyLDB4MGIsMHhhNiwweDAzLDB4ZWMsMHg1MCwweGY5LDB4NTAsMHgzZSwweGMwLDB4MWYsMHg5MCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4ZTljMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmQsMHhhMCwweDNkLDB4YzAgfSwKKyAgMTYsIDB4ZTlkMCwgMCwgezB4MGMsMHg3MCwweDgzLDB4MmMsMHgwMCwweGVmLDB4MDIsMHgzNSwweGMwLDB4MGQsMHhlMiwweDAzLDB4ZmMsMHgwNCwweGZmLDB4MDIgfSwKKyAgMTYsIDB4ZTllMCwgMCwgezB4MmQsMHhlMCwweDhlLDB4ZjAsMHgwMywweDNjLDB4MTAsMHhkYywweDAwLDB4M2YsMHg4MCwweDBjLDB4ZDgsMHgwMywweGZjLDB4MDAgfSwKKyAgMTYsIDB4ZTlmMCwgMCwgezB4ZGUsMHgxOCwweDMzLDB4ZjAsMHg0ZiwweGQwLDB4MDMsMHhjMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWEwMCwgMCwgezB4ODEsMHgwMCwweDZjLDB4MDAsMHhiOSwweDAwLDB4MmUsMHhjMCwweDRjLDB4YjAsMHgwMywweDZjLDB4MDAsMHg4YiwweDAyLDB4MzYgfSwKKyAgMTYsIDB4ZWExMCwgMCwgezB4YzAsMHgwZCwweGFjLDB4MTIsMHhlYywweDAwLDB4NzksMHgwMCwweDJlLDB4MzAsMHgwZCwweDNkLDB4NDIsMHhhYywweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZWEyMCwgMCwgezB4ODgsMHgxYSwweDEwLDB4MGQsMHg4NiwweDAyLDB4ZWUsMHgwNCwweGJiLDB4NDAsMHgyMiwweGUwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZWEzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAxLDB4YjksMHgwMCwweDJlLDB4YzAgfSwKKyAgMTYsIDB4ZWE0MCwgMCwgezB4MDgsMHhiMCwweDQyLDB4YWMsMHgwMCwweDBiLDB4MDUsMHgyNiwweGMwLDB4MDksMHg5NCwweDIwLDB4ZWMsMHgwMCwweGI5LDB4ODAgfSwKKyAgMTYsIDB4ZWE1MCwgMCwgezB4NmUsMHhjNCwweDg4LDB4YjAsMHg4MiwweDJjLDB4MDAsMHg5YiwweDgyLDB4MmUsMHg0MiwweDA4LDB4ODEsMHgwMiwweGU0LDB4ODAgfSwKKyAgMTYsIDB4ZWE2MCwgMCwgezB4YjgsMHgwMCwweDIyLDB4YzEsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MTAsMHhiMSwweDI1LDB4MmMsMHhjYSwweDA4LDB4MzQsMHg0NiwweGNjLDB4MDgsMHg4MywweDAwLDB4MjQgfSwKKyAgMTYsIDB4ZWE4MCwgMCwgezB4YzIsMHgwYiwweDAyLDB4NTIsMHhjYywweDgxLDB4ODMsMHgwMCwweDJjLDB4MDAsMHgxOSwweGIyLDB4NDIsMHhhYywweDgwLDB4ODEgfSwKKyAgMTYsIDB4ZWE5MCwgMCwgezB4MDgsMHgyOCwweDgwLDB4MDksMHgwMCwweDAyLDB4YzQsMHg0MCwweGIxLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ZWFhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg2YywweDAwLDB4YjksMHgwMCwweDNmLDB4ZDAgfSwKKyAgMTYsIDB4ZWFiMCwgMCwgezB4MDgsMHhmNiwweDA3LDB4YmMsMHhjMiwweGFmLDB4MzAsMHg3NSwweGRjLDB4MGQsMHgxNiwweDAyLDB4ZmMsMHhlMCwweGI5LDB4NTAgfSwKKyAgMTYsIDB4ZWFjMCwgMCwgezB4M2UsMHhjYywweDBjLDB4YjAsMHgyMywweDJjLDB4MTAsMHhkOSwweDAwLDB4M2UsMHgwMCwweDBjLDB4OTAsMHgwMywweGVjLDB4MDAgfSwKKyAgMTYsIDB4ZWFkMCwgMCwgezB4ZGUsMHgwMSwweDMyLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFlMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmZCwweDEwLDB4M2YsMHhjYSwweDJlLDB4ZjYsMHgwMywweDZkLDB4OTQsMHg5ZiwweDMwLDB4M2EgfSwKKyAgMTYsIDB4ZWFmMCwgMCwgezB4YzksMHgwYywweDgzLDB4OTMsMHhmYywweDgwLDB4ZmYsMHgxMSwweDdlLDB4MTksMHgwYiwweGIxLDB4MDMsMHhmYywweDQwLDB4ZmQgfSwKKyAgMTYsIDB4ZWIwMCwgMCwgezB4MDgsMHgzYiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZmMsMHg4MCwweDc3LDB4MDAsMHhiZiwweGMwLDB4MGYsMHg1MCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZWIxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDAwLDB4ZjQsMHg5NCwweDM3LDB4YzggfSwKKyAgMTYsIDB4ZWIyMCwgMCwgezB4MGQsMHg2OSwweDYzLDB4N2MsMHgxMCwweGZmLDB4NjIsMHgzNywweGMwLDB4MGQsMHhiNCwweDAzLDB4N2MsMHg2MCwweGQ0LDB4ODAgfSwKKyAgMTYsIDB4ZWIzMCwgMCwgezB4M2YsMHg0MCwweDBmLDB4NDgsMHgyMywweDMyLDB4MDAsMHhjZSwweDAwLDB4YmYsMHg0MCwweDhmLDB4ZDEsMHgwMywweDMwLDB4ZTAgfSwKKyAgMTYsIDB4ZWI0MCwgMCwgezB4ZmYsMHgzMCwweDNiLDB4NjAsMHgwZiwweGQ4LDB4MDMsMHhiMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI1MCwgMCwgezB4ODAsMHgxMCwweGVkLDB4MjAsMHhiOCwweDI0LDB4MjMsMHhmNCwweDQ5LDB4YTIsMHgwMiwweDNmLDB4NDAsMHg4ZiwweDUxLDB4MjMgfSwKKyAgMTYsIDB4ZWI2MCwgMCwgezB4ZGEsMHgwOCwweGY2LDB4MTIsMHgzZCwweDgwLDB4OWIsMHg4MCwweDJlLDB4NDksMHg0YiwweDgwLDB4MDMsMHg0MCwweDAwLDB4ZDkgfSwKKyAgMTYsIDB4ZWI3MCwgMCwgezB4MDEsMHgyMiwweDc0LDB4MGIsMHhkNSwweDAyLDB4MjEsMHgwMCwweGJmLDB4NDIsMHgyZSwweDQ5LDB4MGIsMHg5YywweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZWI4MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjZCwweDgwLDB4YjgsMHgyMCwweDI4LDB4YzEgfSwKKyAgMTYsIDB4ZWI5MCwgMCwgezB4MWIsMHhhMCwweDAyLDB4NGMsMHgwMCwweDkzLDB4MjAsMHgyYywweGQ4LDB4MGIsMHgzNCwweDAyLDB4Y2MsMHgwMCwweDkwLDB4MDEgfSwKKyAgMTYsIDB4ZWJhMCwgMCwgezB4MmMsMHhjNiwweDFhLDB4YTAsMHgwMiwweDY4LDB4MDgsMHg4MywweDAwLDB4YTQsMHg0MCwweDBiLDB4MTAsMHgwMiwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJiMCwgMCwgezB4YjMsMHgxMCwweDI4LDB4NDIsMHgwYiwweDE0LDB4MDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJjMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHhiOCwweDYwLDB4MmEsMHhjMCwweDFiLDB4YTAsMHg4ZSwweGFjLDB4MDEsMHg5YiwweDA1LDB4MjYgfSwKKyAgMTYsIDB4ZWJkMCwgMCwgezB4YzAsMHgwMywweGIwLDB4NDIsMHg2YywweDAwLDB4OWIsMHg4MCwweDJlLDB4YzAsMHgwMywweGEwLDB4MDYsMHg2OSwweDAwLDB4OTkgfSwKKyAgMTYsIDB4ZWJlMCwgMCwgezB4ODAsMHhhYSwweGMwLDB4MGIsMHg5MCwweDAyLDB4NjMsMHgwMCwweDNiLDB4MDAsMHgyZSwweDU4LDB4NGIsMHg5MCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4ZWJmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlYywweDA0LDB4ZjgsMHg4MCwweGJhLDB4YzAgfSwKKyAgMTYsIDB4ZWMwMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4NmMsMHgxMCwweGRiLDB4MDMsMHgzNiwweGMwLDB4OGYsMHhiMCwweDAzLDB4ZWMsMHgwOCwweGQ4LDB4ODAgfSwKKyAgMTYsIDB4ZWMxMCwgMCwgezB4N2UsMHhlMCwweDA2LDB4ODgsMHgwMywweDQxLDB4MDgsMHhjYiwweGEwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwYiwweDJhLDB4MDAgfSwKKyAgMTYsIDB4ZWMyMCwgMCwgezB4N2IsMHgwMCwweDNhLDB4MDEsMHgwZiwweDkwLDB4MDMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWMzMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmYywweDg0LDB4MzIsMHhjMCwweDBjLDB4ZjksMHgwMywweDVjLDB4MTAsMHhlZiwweDAwLDB4M2IgfSwKKyAgMTYsIDB4ZWM0MCwgMCwgezB4YzAsMHgwYywweDcwLDB4MDMsMHg5YywweDAwLDB4ZWMsMHgwMSwweDNmLDB4ZTQsMHg0ZiwweGQxLDB4MDMsMHhmMSwweDAwLDB4ZjMgfSwKKyAgMTYsIDB4ZWM1MCwgMCwgezB4MDUsMHgzMywweDYwLDB4MGYsMHhkMCwweDAzLDB4YmMsMHgwNCwweGZmLDB4MDAsMHgzZiwweDIxLDB4MGYsMHhkMCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4ZWM2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4YzgsMHg0MCwweDNhLDB4YzYgfSwKKyAgMTYsIDB4ZWM3MCwgMCwgezB4MGQsMHhiNCwweDAzLDB4NmMsMHgwMCwweGYzLDB4MDAsMHgzNCwweGMwLDB4MGUsMHhiMCwweDAzLDB4NmMsMHgwMCwweGU5LDB4MTAgfSwKKyAgMTYsIDB4ZWM4MCwgMCwgezB4M2EsMHhjMCwweDBmLDB4ODQsMHgwMywweDJjLDB4NjAsMHhjYiwweDAwLDB4MzIsMHg2MCwweDBjLDB4NTAsMHgwMywweDYxLDB4MDAgfSwKKyAgMTYsIDB4ZWM5MCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4OTAsMHgwZSwweDkwLDB4YTMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNhMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDIsMHg4OCwweDAxLDB4MDEsMHhmMCwweDIwLDB4YjAsMHgwMSwweDNlLDB4MDAsMHgzZiwweDAwLDB4MzMgfSwKKyAgMTYsIDB4ZWNiMCwgMCwgezB4YzAsMHgwYiwweGYwLDB4MzIsMHgzYywweDA4LDB4ODksMHg4MCwweDIyLDB4YzAsMHgwMSwweDE1LDB4MTIsMHhhYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4ZWNjMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4NDgsMHhkYiwweDAyLDB4MmYsMHg0MCwweDhmLDB4MDAsMHgyZSwweDAxLDB4MDgsMHhkNCwweDgwLDB4MzIgfSwKKyAgMTYsIDB4ZWNkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4MDgsMHgwMCwweDA4LDB4ZjAgfSwKKyAgMTYsIDB4ZWNlMCwgMCwgezB4MDgsMHgwMCwweDEyLDB4NGMsMHgwMCwweDMzLDB4MDEsMHgyNCwweGMwLDB4NGEsMHgzMCwweDAyLDB4NGMsMHgwMCwweGEwLDB4MjAgfSwKKyAgMTYsIDB4ZWNmMCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MTAsMHgwMiwweDQ2LDB4MDQsMHg4MywweDA0LDB4MjAsMHhjMCwweDI5LDB4MTgsMHgwMiwweDA0LDB4NDAgfSwKKyAgMTYsIDB4ZWQwMCwgMCwgezB4YjMsMHgwMCwweDJjLDB4NDAsMHgwYSwweDFjLDB4NDIsMHhiMSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDEsMHg4ZCwweDgwLDB4MjEsMHhlMCwweDE4LDB4YzgsMHgwMiwweDFlLDB4MDAsMHhiMywweGEwLDB4MjEgfSwKKyAgMTYsIDB4ZWQyMCwgMCwgezB4ZTAsMHgxYiwweDM4LDB4MDIsMHgwZSwweDAxLDB4YTcsMHg4MCwweDIxLDB4ZTAsMHgwOSwweGQ4LDB4NDAsMHhkNiwweDQwLDB4ODcgfSwKKyAgMTYsIDB4ZWQzMCwgMCwgezB4ODAsMHgwMSwweGUwLDB4MDksMHg1OSwweDAyLDB4MTYsMHgwMCwweDk3LDB4ODQsMHgyZCwweDYwLDB4MDgsMHg1OCwweDQwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyYywweDQwLDB4YzAsMHgwMCwweDM4LDB4YzQgfSwKKyAgMTYsIDB4ZWQ1MCwgMCwgezB4MGMsMHgzMCwweDI3LDB4NGMsMHgyMCwweGYzLDB4MDEsMHgzNCwweGMxLDB4MGUsMHgzYSwweDAzLDB4NGMsMHhjNCwweGUwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ2MCwgMCwgezB4MTgsMHhjOCwweDBmLDB4MzQsMHgwMywweDQ0LDB4NDAsMHhjMywweDAwLDB4MzAsMHhjMCwweDBkLDB4OTAsMHgwMywweDJlLDB4MDAgfSwKKyAgMTYsIDB4ZWQ3MCwgMCwgezB4ZjMsMHgwMCwweDNlLDB4NDAsMHgwZSwweDEwLDB4MDEsMHg5YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmOSwweDAwLDB4MGUsMHhkNCwweDBlLDB4YjAsMHgwMywweGVjLDB4MjAsMHhmYiwweDIwLDB4M2YgfSwKKyAgMTYsIDB4ZWQ5MCwgMCwgezB4YzQsMHgwZiwweGYxLDB4MDMsMHhlYywweDYwLDB4ZGIsMHgxMCwweDNmLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhhNCwweDQ2LDB4ZmIgfSwKKyAgMTYsIDB4ZWRhMCwgMCwgezB4MDAsMHhiZCwweGMwLDB4MGUsMHhkMCwweDBiLDB4YjQsMHgwMCwweGVmLDB4NDgsMHgzZiwweDQwLDB4MGYsMHg1MCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZWRiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZjgsMHgwMCwweDMyLDB4ZDQgfSwKKyAgMTYsIDB4ZWRjMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YWQsMHgwMCwweGViLDB4MDgsMHgyMiwweGQyLDB4MGMsMHhiNiwweDAzLDB4NmMsMHgwMCwweGYyLDB4ODAgfSwKKyAgMTYsIDB4ZWRkMCwgMCwgezB4MzYsMHhjMCwweDBlLDB4YTAsMHgwMywweDI4LDB4MTAsMHhjYiwweDAwLDB4YjIsMHhjMCwweDBmLDB4ZDYsMHgwMywweDI4LDB4MTAgfSwKKyAgMTYsIDB4ZWRlMCwgMCwgezB4ZmIsMHgyMCwweDNlLDB4NDAsMHg0ZiwweDk5LDB4MTMsMHgyYiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRmMCwgMCwgezB4NDgsMHgxMSwweDlkLDB4MTAsMHhiNCwweDAxLDB4MjEsMHhjMSwweDhiLDB4YzAsMHgwMiwweDFjLDB4YTAsMHhiZiwweDA0LDB4MjcgfSwKKyAgMTYsIDB4ZWUwMCwgMCwgezB4YzgsMHgwOCwweDc1LDB4MDIsMHgxYywweGMwLDB4YjYsMHgwMCwweDIxLDB4YzAsMHgwOCwweGYwLDB4NDIsMHgxOCwweDEwLDB4OGYgfSwKKyAgMTYsIDB4ZWUxMCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MGIsMHg1NCwweGEyLDB4MWMsMHgwMCwweGI3LDB4MDQsMHgyZCwweDQxLDB4MGIsMHg1MiwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZWUyMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDgwLDB4YjYsMHg4OCwweGE1LDB4ZTAgfSwKKyAgMTYsIDB4ZWUzMCwgMCwgezB4MGIsMHg3OCwweDEyLDB4OWUsMHg4MSwweGE3LDB4OTAsMHgyNSwweGU0LDB4ODgsMHg3OCwweDAyLDB4MWUsMHg4MCwweGJmLDB4ODAgfSwKKyAgMTYsIDB4ZWU0MCwgMCwgezB4MjQsMHg2MCwweDBiLDB4NjgsMHgwMiwweDFlLDB4MDAsMHg4NywweDg0LDB4NjEsMHhlMCwweDBhLDB4MWEsMHgwYSwweDFhLDB4MDAgfSwKKyAgMTYsIDB4ZWU1MCwgMCwgezB4YjcsMHhhMCwweDJkLDB4ZTAsMHgwYiwweGRhLDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU2MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiYSwweGMwLDB4YTQsMHhjMCwweDBiLDB4MzQsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjQgfSwKKyAgMTYsIDB4ZWU3MCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MGUsMHgyYywweDAwLDB4YjMsMHg5OCwweDIwLDB4NjAsMHgwOSwweDMzLDB4MDIsMHgyYywweDAwLDB4YTMgfSwKKyAgMTYsIDB4ZWU4MCwgMCwgezB4YzgsMHgyMCwweGMwLDB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGYwLDB4MGIsMHgxMCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZWU5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHg4MCwweDM2LDB4ODEgfSwKKyAgMTYsIDB4ZWVhMCwgMCwgezB4MGIsMHhlMCwweDAzLDB4YTgsMHgwMCwweGVhLDB4MDAsMHhiMiwweDgwLDB4MDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweGZlLDB4MDAgfSwKKyAgMTYsIDB4ZWViMCwgMCwgezB4MzYsMHhhMCwweDFmLDB4ZTgsMHgxMywweDNiLDB4ODIsMHhjZSwweGUwLDB4MjIsMHg4MCwweDhlLDB4YTAsMHgwMywweDM4LDB4MDAgfSwKKyAgMTYsIDB4ZWVjMCwgMCwgezB4YmEsMHgwMCwweDNmLDB4YTIsMHgwZiwweGEwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDIwLDB4M2EsMHgxMCwweDA3LDB4ODAsMHgwMywweGMxLDB4MDAsMHhmOCwweDAwLDB4MzggfSwKKyAgMTYsIDB4ZWVlMCwgMCwgezB4MDAsMHgyZiwweDgwLDB4MDMsMHhhMCwweDAxLDB4ZjgsMHg0MiwweDNlLDB4MDUsMHgwZSwweDgwLDB4MGIsMHhlMCwweDgwLDB4ZDggfSwKKyAgMTYsIDB4ZWVmMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDBiLDB4ZDIgfSwKKyAgMTYsIDB4ZWYwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzksMHgwMCwweDNhLDB4NTAgfSwKKyAgMTYsIDB4ZWYxMCwgMCwgezB4OGYsMHg5MCwweDgzLDB4YTQsMHgwMiwweGQxLDB4MDAsMHhiMiwweDQwLDB4NGMsMHg5MCwweDIzLDB4MjQsMHgwOCwweGM5LDB4MDEgfSwKKyAgMTYsIDB4ZWYyMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjMSwweDAwLDB4MzIsMHg0MCwweDBmLDB4MTQsMHgwYSwweDI1LDB4MjAgfSwKKyAgMTYsIDB4ZWYzMCwgMCwgezB4ZTksMHgwMCwweDNlLDB4NDIsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY0MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MGEsMHg4OSwweDAwLDB4MjIsMHg3MCwweDBiLDB4OTAsMHgxMiwweDI1LDB4ODAsMHhjOSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZWY1MCwgMCwgezB4NDAsMHgwYSwweDkwLDB4MDMsMHg2NCwweDAwLDB4ODksMHgyMCwweDJjLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZWY2MCwgMCwgezB4YzEsMHgzMiwweDQwLDB4MGIsMHg5OCwweDAyLDB4MDYsMHgwMCwweDg5LDB4OTAsMHgyZSwweDQwLDB4MGIsMHg5NCwweDEyLDB4ZTAgfSwKKyAgMTYsIDB4ZWY3MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgwNCwweDAwLDB4ODksMHgwMCwweDZhLDB4NDIgfSwKKyAgMTYsIDB4ZWY4MCwgMCwgezB4MGEsMHgxMCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHhhMiwweDQwLDB4MGEsMHg5MCwweDAyLDB4MjQsMHgwMCwweDA5LDB4MDAgfSwKKyAgMTYsIDB4ZWY5MCwgMCwgezB4MmUsMHg0MCwweDU4LDB4MTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDgwLDB4YWEsMHg2MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDQgfSwKKyAgMTYsIDB4ZWZhMCwgMCwgezB4YTksMHgwMCwweDJlLDB4NDAsMHgwYiwweDk0LDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDAwLDB4NjAsMHg0OCwweDBiLDB4MTAsMHgwMiwweDA0LDB4ODEsMHg4MSwweDIwLDB4NjAgfSwKKyAgMTYsIDB4ZWZjMCwgMCwgezB4NDgsMHgwYSwweDEyLDB4MDIsMHg0NCwweDg4LDB4ODEsMHgwMCwweDBlLDB4NTksMHgwYSwweDE0LDB4MDIsMHgwNSwweDAwLDB4ODEgfSwKKyAgMTYsIDB4ZWZkMCwgMCwgezB4YzAsMHgyOCwweDUwLDB4NDksMHgzMCwweDAyLDB4OGMsMHg4NCwweDAxLDB4NjAsMHgyYywweDUwLDB4MGIsMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ZWZlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzAsMHg1NCwweDJhLDB4MDAgfSwKKyAgMTYsIDB4ZWZmMCwgMCwgezB4MGUsMHg4NSwweDAzLDB4YTAsMHgwMCwweGM4LDB4NTAsMHgzMiwweDE1LDB4MWUsMHgwNSwweDIyLDB4MjEsMHg0MiwweGM4LDB4MDAgfSwKKyAgMTYsIDB4ZjAwMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweDAwLDB4MDQsMHhjOCwweDAwLDB4M2EsMHgwMCwweDRmLDB4ODUsMHgwMywweGExLDB4NDAgfSwKKyAgMTYsIDB4ZjAxMCwgMCwgezB4NjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjAyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmZCwweDAzLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDgsMHhlOSwweDEwLDB4M2UgfSwKKyAgMTYsIDB4ZjAzMCwgMCwgezB4NDUsMHgwZiwweDkxLDB4MTMsMHhlNCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAyLDB4ZmQgfSwKKyAgMTYsIDB4ZjA0MCwgMCwgezB4NDAsMHgzMywweDUwLDB4MGYsMHhkNCwweDIzLDB4NzQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHg1NCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4ZjA1MCwgMCwgezB4MDIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNCwweDAwLDB4ZjksMHgwMSwweDMzLDB4NmEgfSwKKyAgMTYsIDB4ZjA2MCwgMCwgezB4MDksMHg5MCwweDAzLDB4YjYsMHgzNCwweGY5LDB4YzgsMHgzMiwweDY0LDB4MGMsMHg5YSwweDAzLDB4ZTYsMHhhMCwweGRkLDB4MDAgfSwKKyAgMTYsIDB4ZjA3MCwgMCwgezB4M2MsMHg3MCwweDBmLDB4OTAsMHgwMywweGE1LDB4MDAsMHg4OSwweDgwLDB4MzMsMHgzMiwweDBmLDB4ZDgsMHgxMywweDNjLDB4MDAgfSwKKyAgMTYsIDB4ZjA4MCwgMCwgezB4ZmQsMHgwMCwweDcwLDB4NTAsMHgwZiwweGQwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA5MCwgMCwgezB4MzgsMHgxMCwweGUyLDB4ODAsMHhiOCwweGE4LDB4MjIsMHgxMCwweDA4LDB4ODgsMHgwMiwweDIxLDB4MDAsMHhiOCwweGMwLDB4MjAgfSwKKyAgMTYsIDB4ZjBhMCwgMCwgezB4MzAsMHgwZCwweDhlLDB4ODcsMHg4MywweDg4LDB4ODgsMHgwMCwweDJlLDB4MzQsMHgwYiwweDhhLDB4ODIsMHgyMiwweDgwLDB4ZGMgfSwKKyAgMTYsIDB4ZjBiMCwgMCwgezB4ZTAsMHgyMiwweDM4LDB4MGIsMHg4MCwweDAyLDB4MjAsMHgwMCwweGY4LDB4YTgsMHgyYSwweDI4LDB4MGIsMHg4MCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4ZjBjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDIwLDB4YjEsMHgwMCwweDIwLDB4NDAgfSwKKyAgMTYsIDB4ZjBkMCwgMCwgezB4MGEsMHg5MiwweDkyLDB4ODQsMHgxMSwweGIxLDB4MjQsMHg2OCwweDU4LDB4MDksMHgxMSwweDAyLDB4YzQsMHgyMCwweDkxLDB4MDEgfSwKKyAgMTYsIDB4ZjBlMCwgMCwgezB4MmMsMHg0OCwweDFiLDB4NTAsMHgwMiwweDc0LDB4ODQsMHg5NSwweDQ4LDB4YWMsMHg0OCwweDBiLDB4OTQsMHgwMiwweDA0LDB4MDQgfSwKKyAgMTYsIDB4ZjBmMCwgMCwgezB4YjEsMHgwMiwweDI0LDB4NDgsMHgwYiwweDEwLDB4MDIsMHgwMiwweDA1LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjEwMCwgMCwgezB4MTgsMHgxMSwweGE0LDB4MDAsMHhiMSwweDIwLDB4MjIsMHg0MCwweDBhLDB4OTAsMHgwNiwweDJjLDB4MDEsMHhiOSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ZjExMCwgMCwgezB4NDAsMHgwOSwweDkwLDB4MDIsMHhhNCwweDAwLDB4OWIsMHgwOCwweDJlLDB4NDgsMHgwYiwweDEyLDB4MWEsMHg3NCwweDAwLDB4OTUgfSwKKyAgMTYsIDB4ZjEyMCwgMCwgezB4NDUsMHgyZSwweDYwLDB4MDMsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4ZjEzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg4MCwweDMwLDB4NDAgfSwKKyAgMTYsIDB4ZjE0MCwgMCwgezB4MGUsMHgxNiwweDAzLDB4YTQsMHgwMCwweGI5LDB4MDQsMHgzMiwweDQwLDB4MGQsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGQ5LDB4NDAgfSwKKyAgMTYsIDB4ZjE1MCwgMCwgezB4MmUsMHg0MCwweDFmLDB4OTgsMHgwMywweGU1LDB4ODAsMHhkOSwweDAwLDB4YWUsMHg2MCwweDA3LDB4MTAsMHgwYiwweDI2LDB4MDEgfSwKKyAgMTYsIDB4ZjE2MCwgMCwgezB4YjksMHgwMCwweGE2LDB4NDAsMHgwZiwweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4YmUsMHg0MCwweGFjLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4YjQgfSwKKyAgMTYsIDB4ZjE4MCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NjAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDgwLDB4ZjkgfSwKKyAgMTYsIDB4ZjE5MCwgMCwgezB4MDAsMHgzMiwweDAwLDB4MGYsMHg5MCwweDgzLDB4ZTYsMHg4NSwweGUxLDB4MDAsMHgzMiwweDQ0LDB4MGYsMHgxMCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4ZjFhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4ZjFiMCwgMCwgezB4MGYsMHg4MCwweDEzLDB4ZTAsMHg5NCwweGUwLDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4ZjFjMCwgMCwgezB4M2UsMHgwMCwweDBkLDB4ODAsMHg0MywweDIwLDB4MDgsMHhmOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4NDAgfSwKKyAgMTYsIDB4ZjFkMCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MDAsMHg0YywweDgwLDB4MjMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFlMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiYSwweDAwLDB4MjMsMHg4MCwweDBiLDB4YTAsMHgwMiwweGZiLDB4MDQsMHg2YSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZjFmMCwgMCwgezB4ODAsMHgwYSwweGEwLDB4MDMsMHg2OCwweDBhLDB4OGUsMHg4OCwweDNhLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgwOCwweDAwLDB4YmEgfSwKKyAgMTYsIDB4ZjIwMCwgMCwgezB4MDAsMHhiNywweDIyLDB4MDMsMHhlNCwweDAyLDB4ZmEsMHgwMCwweDhhLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhlOCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4ZjIxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDYwLDB4NDEgfSwKKyAgMTYsIDB4ZjIyMCwgMCwgezB4MDMsMHgzMCwweDAyLDB4Y2MsMHg0MSwweGEzLDB4MDAsMHgwNCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MmMsMHgwMCwweGEzLDB4ODAgfSwKKyAgMTYsIDB4ZjIzMCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzgsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4YTAsMHhjMCwweDBiLDB4MzQsMHgwMiwweGNjLDB4ODAgfSwKKyAgMTYsIDB4ZjI0MCwgMCwgezB4YTEsMHgwMCwweDIwLDB4YzAsMHgwOCwweDM4LDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI1MCwgMCwgezB4YTAsMHgwMSwweDFjLDB4NDAsMHhiNywweDAwLDB4NjEsMHgwMCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MDAsMHhhMywweDAwLDB4MjUgfSwKKyAgMTYsIDB4ZjI2MCwgMCwgezB4YzgsMHgxOSwweDM4LDB4MDIsMHg1YywweDgwLDB4YTcsMHgwMCwweDBmLDB4ZTgsMHgwOSwweDY0LDB4MjIsMHgxMCwweDAwLDB4YjMgfSwKKyAgMTYsIDB4ZjI3MCwgMCwgezB4MDAsMHgyNSwweGM4LDB4MGIsMHg2MCwweDAyLDB4ZjIsMHgwMCwweDg1LDB4MDEsMHgyMywweGU4LDB4MDgsMHg3MCwweDgyLDB4ZTggfSwKKyAgMTYsIDB4ZjI4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDIwLDB4ZmYsMHg4MCwweGExLDB4YTAgfSwKKyAgMTYsIDB4ZjI5MCwgMCwgezB4MGYsMHg3YSwweDQyLDB4ZGEsMHgwMCwweGU3LDB4ZTgsMHgzNSwweGYwLDB4MmYsMHg3YiwweDYyLDB4MWUsMHg4MiwweGU2LDB4ODAgfSwKKyAgMTYsIDB4ZjJhMCwgMCwgezB4MWQsMHhlMCwweDBkLDB4ZjgsMHgwYiwweDFlLDB4MDAsMHhmNywweDgwLDB4MzEsMHhmMCwweDBmLDB4NzgsMHgwMywweGRlLDB4MGMgfSwKKyAgMTYsIDB4ZjJiMCwgMCwgezB4ZWYsMHg4MCwweDMxLDB4ZjgsMHgyYywweDc4LDB4MDMsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJjMCwgMCwgezB4MDgsMHgxZCwweGFkLDB4ODQsMHhmYiwweDY4LDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYiwweDAwLDB4ZmEgfSwKKyAgMTYsIDB4ZjJkMCwgMCwgezB4ZDgsMHgwZSwweGI1LDB4MDMsMHhlZCwweDAwLDB4ZGIsMHgwMCwweDNhLDB4YzAsMHg4ZSwweGEwLDB4MDMsMHhlMCwweDAwLDB4ZmIgfSwKKyAgMTYsIDB4ZjJlMCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGIsMHhiMCwweDQzLDB4YzQsMHgwNCwweGVmLDB4MDIsMHhiZiwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZjJmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDQyLDB4YzcsMHgzOCwweDMzLDB4NjQgfSwKKyAgMTYsIDB4ZjMwMCwgMCwgezB4MGUsMHg3YywweDAzLDB4NWUsMHgwMCwweGRmLDB4YTAsMHgzNywweGYwLDB4MGQsMHhmOCwweDAzLDB4ZmYsMHgyMCwweGNmLDB4ODEgfSwKKyAgMTYsIDB4ZjMxMCwgMCwgezB4MzMsMHhlMiwweDBjLDB4ZDgsMHgwMywweGJlLDB4MDAsMHg3ZiwweGMwLDB4MzMsMHhlMCwweDBjLDB4ZjksMHgwMywweDdlLDB4MDAgfSwKKyAgMTYsIDB4ZjMyMCwgMCwgezB4ZmQsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjMzMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHg4NywweGEwLDB4MjEsMHgxNCwweDA4LDB4NzEsMHgwMiwweDE0LDB4MTAsMHhkNywweDIwLDB4MzUgfSwKKyAgMTYsIDB4ZjM0MCwgMCwgezB4YzAsMHgwYywweDcwLDB4MDMsMHhiYywweDAwLDB4ODUsMHgwOCwweDJiLDB4YzAsMHg0ZCwweDQ2LDB4MDIsMHhkMSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4ZjM1MCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAyLDB4MDgsMHg4MCwweGY1LDB4MjAsMHgzZCwweGNhLDB4MGYsMHg1NCwweDAzLDB4ZWEgfSwKKyAgMTYsIDB4ZjM2MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDExLDB4OGYsMHgwMSwweDIwLDB4ODQgfSwKKyAgMTYsIDB4ZjM3MCwgMCwgezB4MWEsMHhmMCwweDAyLDB4MTgsMHgwMCwweGE3LDB4MzQsMHg2NSwweGMwLDB4MDksMHg3MSwweDAyLDB4ZGMsMHgwMCwweDhlLDB4MDAgfSwKKyAgMTYsIDB4ZjM4MCwgMCwgezB4MjksMHhjMCwweDA4LDB4NTAsMHgwNiwweDljLDB4MDAsMHhiZiwweDg4LDB4MmQsMHhjNCwweDBhLDB4NjAsMHgyNiwweDU4LDB4MjQgfSwKKyAgMTYsIDB4ZjM5MCwgMCwgezB4OTcsMHgwMCwweDZkLDB4YzAsMHg5YiwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNhMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHg4YiwweDQwLDB4MjAsMHgwMCwweDE4LDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiYiwweDAyLDB4MjQgfSwKKyAgMTYsIDB4ZjNiMCwgMCwgezB4YzAsMHgwOCwweDMwLDB4MjAsMHhjYywweDAwLDB4ODEsMHhjMCwweDI4LDB4YzAsMHgwYiwweDA0LDB4ODIsMHhlMCwweDEwLDB4YmIgfSwKKyAgMTYsIDB4ZjNjMCwgMCwgezB4YTAsMHgyYywweGUwLDB4MGEsMHgyMCwweDA2LDB4MDAsMHgwMCwweGIzLDB4MDAsMHgyOCwweGMwLDB4MGEsMHgxMCwweDAyLDB4ODggfSwKKyAgMTYsIDB4ZjNkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4Y2YsMHgxMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4ZjNlMCwgMCwgezB4MGUsMHhmMCwweDBiLDB4MjQsMHgwMCwweGVmLDB4MDAsMHgzNywweGMwLDB4MGQsMHhmMCwweDAzLDB4ZmMsMHgwNiwweGMxLDB4NTAgfSwKKyAgMTYsIDB4ZjNmMCwgMCwgezB4M2IsMHhjMCwweDBjLDB4YjQsMHgwMywweGFjLDB4MDAsMHhmOCwweGMwLDB4YmUsMHhjOCwweDJlLDB4YjAsMHgwMywweDZlLDB4MDEgfSwKKyAgMTYsIDB4ZjQwMCwgMCwgezB4ZmIsMHgwMCwweDJkLDB4YzAsMHg0YiwweDkwLDB4MDIsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQxMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDQsMHhmYiwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGFkLDB4MDAsMHg5YiwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZjQyMCwgMCwgezB4YzAsMHgwZiwweDMwLDB4MDMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDJlLDB4YzAsMHgwNSwweGI0LDB4MDMsMHhlZCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4ZjQzMCwgMCwgezB4NDAsMHgzMiwweGMwLDB4MDksMHgwMCwweDAzLDB4ZTAsMHg5MSwweGUzLDB4MDAsMHgzZSwweGMwLDB4MGYsMHg5MCwweDExLDB4ZTAgfSwKKyAgMTYsIDB4ZjQ0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlYywweDAwLDB4ZWYsMHgwMCwweDMzLDB4MjAgfSwKKyAgMTYsIDB4ZjQ1MCwgMCwgezB4NGYsMHhmMCwweDAzLDB4YjQsMHgwMCwweGVmLDB4MDMsMHgzYSwweGMwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwMCwweGRjLDB4MDAgfSwKKyAgMTYsIDB4ZjQ2MCwgMCwgezB4MzEsMHhjMCwweDhkLDB4ZjgsMHgwMywweGZlLDB4MDQsMHhjZiwweDAwLDB4MzIsMHhjOCwweDBjLDB4ZjAsMHgwYiwweDFjLDB4MDAgfSwKKyAgMTYsIDB4ZjQ3MCwgMCwgezB4Y2YsMHg5MywweDMzLDB4YzAsMHg4YywweDQwLDB4MDIsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ4MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHhiYiwweDAwLDB4YTIsMHgwNCwweDBiLDB4MzAsMHgwMiwweDBlLDB4MDAsMHhhYiwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ZjQ5MCwgMCwgezB4YzAsMHgwOSwweGIwLDB4MDMsMHg2YywweDA4LDB4YTgsMHhjMCwweDM2LDB4YzAsMHgwOCwweGJjLDB4MDIsMHhlZiwweDAyLDB4YWIgfSwKKyAgMTYsIDB4ZjRhMCwgMCwgezB4ZDAsMHgyMCwweGUwLDB4MDgsMHhiOCwweDIyLDB4MjYsMHgxMCwweDhiLDB4MDAsMHgyMiwweGMwLDB4MjAsMHg5YywweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZjRiMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmIsMHgwMCwweDI2LDB4MDAgfSwKKyAgMTYsIDB4ZjRjMCwgMCwgezB4MGEsMHhiMCwweDAyLDB4YTIsMHgwOCwweGFiLDB4MDAsMHg2YSwweGMwLDB4MGIsMHhiMCwweDBhLDB4MGMsMHgwMCwweDhiLDB4ODAgfSwKKyAgMTYsIDB4ZjRkMCwgMCwgezB4MjIsMHhjMCwweDA5LDB4YjEsMHgwMiwweGVjLDB4NDAsMHg4OCwweDA4LDB4MjIsMHhjMCwweDA4LDB4YjgsMHgwMiwweDI2LDB4MDAgfSwKKyAgMTYsIDB4ZjRlMCwgMCwgezB4OGIsMHgwMCwweDIyLDB4YzAsMHgwOCwweDk4LDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRmMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMywweDAwLDB4MjQsMHgwMCwweDBiLDB4YjAsMHgwMiwweDAwLDB4MDEsMHg4MywweDAwLDB4MjAgfSwKKyAgMTYsIDB4ZjUwMCwgMCwgezB4YzAsMHgwOSwweDMwLDB4MDIsMHg0YywweDAwLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDYsMHg0YywweDAwLDB4ODAgfSwKKyAgMTYsIDB4ZjUxMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHg0MSwweDgzLDB4MDAsMHhhMiwweGMwLDB4MDgsMHgxMCwweDBhLDB4ODIgfSwKKyAgMTYsIDB4ZjUyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4ZWYsMHgwOCwweDI2LDB4MDAgfSwKKyAgMTYsIDB4ZjUzMCwgMCwgezB4MGUsMHhmMCwweDAyLDB4YTAsMHgwMCwweGU3LDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmNSwweDQzLDB4M2MsMHgwMiwweGRhLDB4MDAgfSwKKyAgMTYsIDB4ZjU0MCwgMCwgezB4MzIsMHhjMCwweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhjYiwweDAwLDB4YjIsMHhjMCwweDBjLDB4YTAsMHgwMywweDI4LDB4MTAgfSwKKyAgMTYsIDB4ZjU1MCwgMCwgezB4Y2IsMHgwMCwweDMyLDB4YzAsMHgwYywweDgwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU2MCwgMCwgezB4YTAsMHgwZCwweGZjLDB4MDAsMHhmYiwweDAwLDB4M2IsMHgwMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmZiwweDAyLDB4M2YgfSwKKyAgMTYsIDB4ZjU3MCwgMCwgezB4YzAsMHgwZCwweGYyLDB4MDMsMHhiYywweDAwLDB4ZjQsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZjcgfSwKKyAgMTYsIDB4ZjU4MCwgMCwgezB4MDAsMHgzMywweGMwLDB4MGYsMHg2MCwweDAzLDB4ZjAsMHg4OCwweGZmLDB4MDAsMHgzZiwweGMwLDB4NGYsMHhkMCwweDAzLDB4NjggfSwKKyAgMTYsIDB4ZjU5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDQwLDB4ZmMsMHgzMSwweDNiLDB4MDggfSwKKyAgMTYsIDB4ZjVhMCwgMCwgezB4NGYsMHhmOSwweDQzLDB4ZWYsMHgwMCwweGRmLDB4MzAsMHgzMiwweDIxLDB4MGYsMHg5NCwweDA3LDB4N2QsMHg4MCwweGVmLDB4MzggfSwKKyAgMTYsIDB4ZjViMCwgMCwgezB4MzIsMHgwOSwweDFjLDB4MzgsMHgwMywweGYyLDB4MjEsMHhmZCwweDAwLDB4MzMsMHhjNCwweDBjLDB4ZjAsMHgwMiwweGZjLDB4MDAgfSwKKyAgMTYsIDB4ZjVjMCwgMCwgezB4ZGYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVkMCwgMCwgezB4ODAsMHgxMCwweGVjLDB4ODgsMHg4YiwweDYwLDB4MjIsMHhlNSwweDBlLDB4YjIsMHgyMiwweGVjLDB4ODAsMHhhZiwweDExLDB4MmEgfSwKKyAgMTYsIDB4ZjVlMCwgMCwgezB4MjAsMHgwYiwweGIxLDB4MTMsMHhhYywweDQ4LDB4OGIsMHg0NSwweDM0LDB4Y2MsMHg0OCwweGIwLDB4MDIsMHg2YiwweDAwLDB4YmEgfSwKKyAgMTYsIDB4ZjVmMCwgMCwgezB4ODIsMHgzNiwweDAwLDB4MDgsMHg4OCwweDIyLDB4YzAsMHgwNCwweDg4LDB4MDAsMHhhMiwweDA4LDB4OGIsMHg4OCwweDYyLDB4MjAgfSwKKyAgMTYsIDB4ZjYwMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YTEsMHgzMCwweDI4LDB4MDAgfSwKKyAgMTYsIDB4ZjYxMCwgMCwgezB4MGIsMHgzMiwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MjIsMHgyYywweDAwLDB4OGIsMHgxMiwweDA2LDB4YzgsMHg4MCwweGEzLDB4MDAgfSwKKyAgMTYsIDB4ZjYyMCwgMCwgezB4MjAsMHgwMiwweGNhLDB4MzAsMHgwNiwweGM0LDB4MDEsMHhiMSwweDAwLDB4NjgsMHg4MCwweDA5LDB4MjAsMHgwMiwweDg4LDB4MDAgfSwKKyAgMTYsIDB4ZjYzMCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzIsMHgwYiwweDAwLDB4MGEsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY0MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHg4YiwweDYxLDB4NjIsMHhjMCwweDBiLDB4YjIsMHgwMiwweGU4LDB4MDAsMHhhYiwweDAyLDB4MmEgfSwKKyAgMTYsIDB4ZjY1MCwgMCwgezB4NjEsMHgxYiwweDkwLDB4MDIsMHhhOCwweDAwLDB4YWIsMHgwMCwweDIwLDB4YzAsMHgwYSwweGIwLDB4MDIsMHg2YywweDA0LDB4YmEgfSwKKyAgMTYsIDB4ZjY2MCwgMCwgezB4MDAsMHgyZSwweDQwLDB4ODksMHg5MCwweDAyLDB4ZTYsMHgwOCwweDk4LDB4MDAsMHgyMiwweDAwLDB4MGIsMHhiMCwweDAyLDB4YjAgfSwKKyAgMTYsIDB4ZjY3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlZSwweDAwLDB4ZjgsMHgwMSwweDNhLDB4MDQgfSwKKyAgMTYsIDB4ZjY4MCwgMCwgezB4MGYsMHhhYywweDAzLDB4ZWMsMHg5MCwweGZiLDB4MDIsMHgzZSwweGUwLDB4MGIsMHg5MCwweDQyLDB4NjcsMHg4MCwweGE4LDB4YzQgfSwKKyAgMTYsIDB4ZjY5MCwgMCwgezB4MjIsMHg0OCwweDIyLDB4ODYsMHgwMywweGUxLDB4NDAsMHhiOCwweDAyLDB4MmEsMHg0MCwweDI5LDB4OTAsMHgwMywweGVjLDB4MDIgfSwKKyAgMTYsIDB4ZjZhMCwgMCwgezB4YzksMHg0OCwweDMyLDB4NDAsMHgwZiwweGIwLDB4MTMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZiMCwgMCwgezB4ZTAsMHgwMSwweGFjLDB4NDAsMHhmYiwweDAwLDB4MWYsMHhhMiwweDBlLDB4ZjgsMHg4MiwweGZjLDB4MDgsMHhmZiwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZjZjMCwgMCwgezB4YzAsMHgwZiwweGZhLDB4NDMsMHg5NiwweDQ0LDB4ZDQsMHg5MSwweDNmLDB4NDAsMHgwZCwweGMwLDB4MDMsMHhmYSwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4ZjZkMCwgMCwgezB4MDgsMHgyNSwweDgwLDB4MGUsMHhlMCwweDAzLDB4ZDAsMHgwMCwweGVhLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhjMCwweDAzLDB4NzggfSwKKyAgMTYsIDB4ZjZlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZTEsMHgyMCwweDNhLDB4NTAgfSwKKyAgMTYsIDB4ZjZmMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MmMsMHgwMCwweGViLDB4MDgsMHg3NiwweDA1LDB4MGUsMHhiMCwweDI3LDB4ZTAsMHgxMCwweGVhLDB4NDAgfSwKKyAgMTYsIDB4ZjcwMCwgMCwgezB4YjIsMHhjMCwweDBjLDB4YTQsMHg0MywweDI1LDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwOCwweDBmLDB4ODAsMHg0MywweGU4LDB4MDAgfSwKKyAgMTYsIDB4ZjcxMCwgMCwgezB4ZDEsMHgwOCwweGVlLDB4NDAsMHgwZiwweDAwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjcyMCwgMCwgezB4YzgsMHgwNSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhkMCwweDBiLDB4OTAsMHg4MiwweDJjLDB4MDAsMHg4NywweDQwLDB4MjIgfSwKKyAgMTYsIDB4ZjczMCwgMCwgezB4NjAsMHg4YiwweGIwLDB4MDIsMHhlMCwweDAwLDB4ZDgsMHg1MCwweDIyLDB4ZDAsMHgwYywweGEwLDB4MDMsMHg2YywweDAwLDB4YjMgfSwKKyAgMTYsIDB4Zjc0MCwgMCwgezB4YzgsMHgzZSwweGQwLDB4MGIsMHhiOCwweDAyLDB4MjUsMHgwOCwweDhhLDB4MjAsMHgyYSwweDgwLDB4OGIsMHhiOCwweDgyLDB4ZjIgfSwKKyAgMTYsIDB4Zjc1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2NCwweDAwLDB4YTAsMHhjMCwweDI0LDB4YzAgfSwKKyAgMTYsIDB4Zjc2MCwgMCwgezB4MDksMHgzOCwweDAyLDB4MmMsMHgwMCwweDgzLDB4MDMsMHgyMCwweDAwLDB4MTAsMHgzMCwweDIyLDB4Y2MsMHgwMCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4Zjc3MCwgMCwgezB4NjAsMHgwOCwweDBhLDB4MzAsMHg4MiwweDRjLDB4MDAsMHhiMSwweGMwLDB4MDAsMHhkMSwweDBiLDB4MzgsMHgwMiwweDg0LDB4ODAgfSwKKyAgMTYsIDB4Zjc4MCwgMCwgezB4ODIsMHgwMSwweDIwLDB4ODAsMHgwMywweDM4LDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc5MCwgMCwgezB4MjAsMHgwMSwweDE2LDB4NDAsMHg4NCwweDk4LDB4MjUsMHhlMCwweDBiLDB4N2EsMHgwMiwweGZhLDB4NDgsMHhhMywweDIwLDB4NjEgfSwKKyAgMTYsIDB4ZjdhMCwgMCwgezB4MjQsMHgwYiwweDc5LDB4MDAsMHhjZSwweGMwLDB4OTMsMHhhNCwweDIxLDB4YTYsMHgwYiwweDc4LDB4MTIsMHhkZSwweDgwLDB4YjYgfSwKKyAgMTYsIDB4ZjdiMCwgMCwgezB4ODAsMHgyZCwweDI0LDB4MGIsMHg0YiwweDAyLDB4MWEsMHg0MCwweDg1LDB4ODEsMHgyMSwweDYwLDB4MGIsMHg0OCwweDAyLDB4YzggfSwKKyAgMTYsIDB4ZjdjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZTIsMHhhMCwweGI0LDB4ZmUgfSwKKyAgMTYsIDB4ZjdkMCwgMCwgezB4NGIsMHhiOCwweDBiLDB4MGUsMHgwMCwweGEzLDB4YjAsMHgyNCwweGE4LDB4MGUsMHgxYiwweDAyLDB4Y2UsMHhjMSwweGMzLDB4YzAgfSwKKyAgMTYsIDB4ZjdlMCwgMCwgezB4MzAsMHg2OCwweDJlLDB4M2EsMHg0NywweDRlLDB4ODAsMHhmMSwweDgwLDB4MzAsMHg4MCwweDBmLDB4MjIsMHg4MywweDgwLDB4MDAgfSwKKyAgMTYsIDB4ZjdmMCwgMCwgezB4YzIsMHgxMCwweDM4LDB4ODAsMHg0ZiwweDAwLDB4MDcsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjgwMCwgMCwgezB4NDAsMHgwZCwweGJjLDB4MTAsMHhmZSwweDA0LDB4M2IsMHhjMSwweDA3LDB4ZjAsMHgwMywweDFjLDB4YzgsMHhkZiwweDJhLDB4MGIgfSwKKyAgMTYsIDB4ZjgxMCwgMCwgezB4YzQsMHg4ZiwweGQxLDB4NDMsMHhmOCwweDAyLDB4N2YsMHgwMCwweDNmLDB4YzAsMHgwYywweGYxLDB4MGYsMHgzYywweDAwLDB4ZjIgfSwKKyAgMTYsIDB4ZjgyMCwgMCwgezB4MTEsMHgzZiwweDQxLDB4MWYsMHg1MiwweDAzLDB4YmMsMHgwZSwweGVkLDB4MTQsMHgzZiwweDQwLDB4MGYsMHhmOCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZjgzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZTksMHgwMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4Zjg0MCwgMCwgezB4MGUsMHhiZSwweDRiLDB4NmYsMHgwMCwweGNiLDB4ODIsMHg3YSwweGMwLDB4MmMsMHhiMCwweDAzLDB4MmMsMHgwMCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4Zjg1MCwgMCwgezB4MzIsMHgwMCwweDJjLDB4MTAsMHgwMywweDJjLDB4MDgsMHhjMCwweDAwLDB4MjYsMHg0MCwweDZjLDB4OTAsMHgxMywweDI0LDB4MTIgfSwKKyAgMTYsIDB4Zjg2MCwgMCwgezB4YzgsMHgwMSwweDNlLDB4MDAsMHgwZiwweGI4LDB4MGIsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg3MCwgMCwgezB4NDgsMHgxMSwweDk0LDB4MDAsMHg4ZCwweDAwLDB4MjEsMHg4MCwweDBiLDB4NzAsMHg4MiwweDNjLDB4MjAsMHg4MywweDMyLDB4MjkgfSwKKyAgMTYsIDB4Zjg4MCwgMCwgezB4YzAsMHgwOCwweGYwLDB4MjAsMHgxNCwweDAwLDB4ODAsMHgwMCwweDIzLDB4MDAsMHgwOCwweDUwLDB4MDYsMHg5YywweDA0LDB4ZDcgfSwKKyAgMTYsIDB4Zjg5MCwgMCwgezB4MDIsMHgyOCwweDgwLDB4MDgsMHg2MCwweDAyLDB4MDgsMHgxMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg0MCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZjhhMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YTcsMHg4MCwweDIxLDB4ZTAgfSwKKyAgMTYsIDB4ZjhiMCwgMCwgezB4MGIsMHg1YywweDEyLDB4MWUsMHgwNCwweDg3LDB4ODIsMHgwZCwweGEwLDB4MDksMHg3OCwweDE2LDB4MDIsMHgwMCwweGI0LDB4ODAgfSwKKyAgMTYsIDB4ZjhjMCwgMCwgezB4MjUsMHhlMCwweDBiLDB4NzgsMHgwMiwweDllLDB4MDAsMHg4NCwweDgwLDB4MjEsMHgyMiwweDA4LDB4MDgsMHgwMiwweDEyLDB4MDEgfSwKKyAgMTYsIDB4ZjhkMCwgMCwgezB4ODQsMHhjMCwweDJkLDB4MjAsMHgwYiwweDA4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhlMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4MywweDQyLDB4YTAsMHhkOCwweDBiLDB4MzQsMHg4MiwweDBjLDB4MDAsMHhhMywweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZjhmMCwgMCwgezB4ZTAsMHgwOCwweGIwLDB4MDIsMHgwYywweDg4LDB4YjMsMHgyMSwweDI0LDB4ZDgsMHgwYiwweDNlLDB4MDIsMHg4YywweDAwLDB4OTMgfSwKKyAgMTYsIDB4ZjkwMCwgMCwgezB4MDgsMHgyOCwweGMwLDB4MDgsMHgzOCwweDAyLDB4MmMsMHgwNSwweDhiLDB4MDEsMHgyYywweGUwLDB4MGIsMHgzMCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZjkxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZWUsMHgwMCwweDMzLDB4OTAgfSwKKyAgMTYsIDB4ZjkyMCwgMCwgezB4MGYsMHhhMCwweDBiLDB4NjgsMHgwMCwweGNhLDB4MDEsMHg3ZiwweGE4LDB4MGMsMHhhYSwweDAzLDB4M2EsMHgxMiwweGZlLDB4ZTIgfSwKKyAgMTYsIDB4ZjkzMCwgMCwgezB4MzcsMHhiMCwweDBmLDB4ZWUsMHgwMiwweDE4LDB4MDAsMHhjYSwweDQwLDB4MzYsMHhhMCwweDA4LDB4YTAsMHg4YiwweDI4LDB4MDAgfSwKKyAgMTYsIDB4Zjk0MCwgMCwgezB4Y2EsMHg4MSwweDJlLDB4YTAsMHgwZiwweGUwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDA4LDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGEyLDB4MDIsMHhkOCwweDQwLDB4M2UgfSwKKyAgMTYsIDB4Zjk2MCwgMCwgezB4MDgsMHgwZiwweDgwLDB4MTMsMHhlMCwweDQwLDB4NDgsMHg0MCwweGI4LDB4MDQsMHgwOCwweDg0LDB4MDMsMHg2MSwweDAwLDB4ZmMgfSwKKyAgMTYsIDB4Zjk3MCwgMCwgezB4MDAsMHgzZiwweDAwLDB4NGYsMHhjMCwweDAzLDB4ZjEsMHgwMCwweGZjLDB4MDAsMHgzZiwweDA0LDB4MGYsMHhjMCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4Zjk4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAwLDB4ZjksMHgwMCwweDMwLDB4NTAgfSwKKyAgMTYsIDB4Zjk5MCwgMCwgezB4NGMsMHhiOSwweDAzLDB4NmMsMHgxOCwweGY5LDB4MDAsMHgzNiwweDQwLDB4MGUsMHg5YywweDIzLDB4YTQsMHgwMiwweDQxLDB4MDAgfSwKKyAgMTYsIDB4ZjlhMCwgMCwgezB4YjIsMHg0NCwweDBlLDB4OWEsMHgwMywweGE2LDB4ODAsMHhjOSwweDAwLDB4M2EsMHg2MCwweDBhLDB4OTAsMHgwMywweGE0LDB4ODAgfSwKKyAgMTYsIDB4ZjliMCwgMCwgezB4YzksMHgwMCwweDM0LDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjljMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDQwLDB4MjIsMHg3OCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MTAsMHhiOSwweDAwLDB4M2MgfSwKKyAgMTYsIDB4ZjlkMCwgMCwgezB4NjIsMHgxOCwweDk0LDB4ODIsMHhhNCwweDAwLDB4ODksMHhjOCwweDIyLDB4NzAsMHg0OCwweDFlLDB4MDEsMHg2NywweDgwLDB4ZDEgfSwKKyAgMTYsIDB4ZjllMCwgMCwgezB4MDAsMHhiYywweDQyLDB4MDgsMHgxMCwweDAyLDB4MjUsMHgyMCwweDg5LDB4MDIsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZjlmMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjEsMHgyOCwweDIyLDB4NDAgfSwKKyAgMTYsIDB4ZmEwMCwgMCwgezB4MDgsMHhiMCwweDgyLDB4NjQsMHgwNCwweDM5LDB4NDEsMHgyZSwweDQ4LDB4MGEsMHg5MCwweDAyLDB4MDQsMHgxOCwweGE5LDB4MjAgfSwKKyAgMTYsIDB4ZmExMCwgMCwgezB4MjIsMHg0MiwweDRhLDB4OTAsMHgwMiwweDJjLDB4MDQsMHg4OSwweDA0LDB4MmIsMHg0OCwweDAyLDB4ZDAsMHgwMiwweGI0LDB4MGEgfSwKKyAgMTYsIDB4ZmEyMCwgMCwgezB4OGQsMHg4MCwweDIzLDB4YzAsMHg0OCwweGQwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmEzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4YTAsMHg0OCwweDI4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDI0LDB4MmEgfSwKKyAgMTYsIDB4ZmE0MCwgMCwgezB4NDAsMHgwOCwweDEyLDB4NDIsMHg4NSwweDgwLDB4YTEsMHgyMCwweGEwLDB4NDgsMHgwOCwweDkwLDB4MDIsMHg0NCwweDAwLDB4OTUgfSwKKyAgMTYsIDB4ZmE1MCwgMCwgezB4MmMsMHgyZCwweDVhLDB4MGEsMHg3MiwweDgyLDB4MTQsMHhhMCwweDg1LDB4YTgsMHgyMSwweDRhLDB4MDgsMHg1MiwweDgyLDB4YzIgfSwKKyAgMTYsIDB4ZmE2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg0MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4ZmE3MCwgMCwgezB4OGMsMHgwNSwweDAzLDB4NjEsMHg0MCwweGY4LDB4NTEsMHgyZSwweDAwLDB4MGEsMHg4NSwweDAyLDB4MjAsMHgwMCwweGU4LDB4NTAgfSwKKyAgMTYsIDB4ZmE4MCwgMCwgezB4MzIsMHgxNCwweDA2LDB4ODUsMHgxNywweGEwLDB4MDAsMHhjOCwweDIwLDB4M2EsMHgwOCwweDBlLDB4ODIsMHgwMywweGEwLDB4ODAgfSwKKyAgMTYsIDB4ZmE5MCwgMCwgezB4YzgsMHgyMCwweDMyLDB4MDgsMHgyYywweGMyLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFhMCwgMCwgezB4OTgsMHgxOSwweGY0LDB4NDAsMHhmZiwweDEwLDB4M2YsMHg0NCwweDBiLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmOSwweDEwLDB4M2QgfSwKKyAgMTYsIDB4ZmFiMCwgMCwgezB4NDAsMHgwZiwweGQxLDB4MDMsMHhmNCwweDU4LDB4OWQsMHgxMCwweDNmLDB4NDQsMHg0ZiwweGQwLDB4MDMsMHhkNSwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZmFjMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4OGQsMHg5MCwweDAzLDB4ZTQsMHhiOCwweGY5LDB4MjgsMHhiYSwweDZhLDB4MGYsMHg5MCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4ZmFkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhlNywweDAwLDB4ZmQsMHg4OCwweDNlLDB4NjAgfSwKKyAgMTYsIDB4ZmFlMCwgMCwgezB4OGYsMHhkMCwweDAzLDB4MjQsMHgwMSwweGRkLDB4ODAsMHg3MywweDQwLDB4MGYsMHhkOCwweDAzLDB4YTYsMHgwNCwweGNkLDB4YTIgfSwKKyAgMTYsIDB4ZmFmMCwgMCwgezB4MzMsMHg3OCwweDFjLDB4ZDAsMHgwMywweDM0LDB4MDEsMHhmNSwweDg4LDB4M2IsMHg2OCwweDBjLDB4ZGEsMHg0NywweDM3LDB4ODAgfSwKKyAgMTYsIDB4ZmIwMCwgMCwgezB4Y2QsMHg4OCwweDMyLDB4NjIsMHgwYywweGRhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmIxMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4ODAsMHhiOCwweDgwLDB4MmUsMHgxNCwweDBiLDB4MGEsMHg4MiwweDIyLDB4ODAsMHhiOCwweGY4LDB4YTIgfSwKKyAgMTYsIDB4ZmIyMCwgMCwgezB4MDAsMHgwYiwweDhmLDB4YTMsMHg4MywweGUwLDB4ODgsMHhlYiwweDIyLDB4YTksMHgwOCwweDg4LDB4MTIsMHhhMCwweDA1LDB4YjggfSwKKyAgMTYsIDB4ZmIzMCwgMCwgezB4MDAsMHgyYSwweGFhLDB4ODgsMHg4MCwweDEzLDB4NjIsMHg4MiwweDg4LDB4ODAsMHgyMiwweDI4LDB4ODgsMHhhNCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4ZmI0MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHgwYSwweDJjLDB4NDEgfSwKKyAgMTYsIDB4ZmI1MCwgMCwgezB4MGIsMHgxMCwweDA2LDB4MDQsMHgyMCwweGExLDB4MDAsMHgwMCwweDQwLDB4OGIsMHgxMCwweDQ2LDB4YzQsMHgwMSwweDkxLDB4MTEgfSwKKyAgMTYsIDB4ZmI2MCwgMCwgezB4MjQsMHg1OCwweDY4LDB4OTAsMHhjMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4YTgsMHg1MCwweDA5LDB4MTQsMHgwYSwweDA1LDB4OTUgfSwKKyAgMTYsIDB4ZmI3MCwgMCwgezB4YTEsMHgwOCwweGEwLDB4NDIsMHgyOCwweDExLDB4MGEsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MTgsMHhiOSwweDIwLDB4MmUsMHg1MCwweDBiLDB4OTAsMHgwNiwweDI0LDB4MDksMHhiOSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZmI5MCwgMCwgezB4NDAsMHg4YiwweDkxLDB4MDIsMHg4NCwweDAwLDB4OTksMHg2NCwweDI0LDB4NDAsMHg1OCwweDkwLDB4MDIsMHhhNCwweDIwLDB4YmIgfSwKKyAgMTYsIDB4ZmJhMCwgMCwgezB4MDAsMHgyYSwweDQwLDB4MDksMHhiMCwweDAyLDB4MDUsMHgwMSwweGE5LDB4MDAsMHgyMiwweDQwLDB4ODgsMHg5MiwweDAyLDB4MDYgfSwKKyAgMTYsIDB4ZmJiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDAwLDB4ZjksMHg0MCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ZmJjMCwgMCwgezB4NGYsMHg5OCwweDBiLDB4MjQsMHg4MCwweGQ5LDB4MDAsMHgyMiwweDcyLDB4MGIsMHg5OCwweDAzLDB4ZTQsMHg4NCwweGQ5LDB4MDAgfSwKKyAgMTYsIDB4ZmJkMCwgMCwgezB4YjYsMHg3MCwweDA4LDB4OTksMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmEsMHg0MCwweDBkLDB4OTQsMHhjMiwweDI1LDB4MDAgfSwKKyAgMTYsIDB4ZmJlMCwgMCwgezB4YTksMHgwMCwweDIyLDB4NDAsMHgwYywweDk0LDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJmMCwgMCwgezB4MjgsMHgwMSwweGE2LDB4ODAsMHhmOSwweDA4LDB4M2UsMHhjMCwweDBmLDB4OTEsMHg0MywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZmMwMCwgMCwgezB4NTAsMHgwZiwweDk4LDB4MDMsMHhhNSwweDAwLDB4ZTksMHgwMCwweDNhLDB4NjQsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZmMxMCwgMCwgezB4MDAsMHgzYywweDQwLDB4NmUsMHg5MCwweDAzLDB4ZTQsMHgyMCwweGQ5LDB4MDAsMHgzYywweDQwLDB4MGYsMHg5MCwweDgyLDB4Y2EgfSwKKyAgMTYsIDB4ZmMyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4ZmMzMCwgMCwgezB4NGYsMHg4NCwweDBiLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzNiwweDAxLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4NDAgfSwKKyAgMTYsIDB4ZmM0MCwgMCwgezB4MzIsMHgxMCwweDJkLDB4ODAsMHgwMywweGUwLDB4NTQsMHhjOCwweDAwLDB4MzYsMHgxMCwweDBmLDB4MDQsMHg4MywweGUwLDB4NTAgfSwKKyAgMTYsIDB4ZmM1MCwgMCwgezB4ZDgsMHgwNCwweDEyLDB4MDAsMHgwYywweDAwLDB4MGIsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM2MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4ZSwweDQyLDB4MmUsMHhhMiwweDhiLDB4ZWEsMHgwMiwweDI4LDB4MDgsMHhiZSwweDg5LDB4MzcgfSwKKyAgMTYsIDB4ZmM3MCwgMCwgezB4ODQsMHg0OCwweGUwLDB4MTIsMHgyOCwweDAyLDB4OGUsMHhjMCwweDIzLDB4YjAsMHg0ZCwweDYwLDB4NjIsMHhmOCwweDAwLDB4ODYgfSwKKyAgMTYsIDB4ZmM4MCwgMCwgezB4MDAsMHgyMywweDgwLDB4MGIsMHhlMCwweDAyLDB4ZjgsMHgwMCwweDBlLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhlNCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4ZmM5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YTMsMHgwMCwweDJjLDB4ODAgfSwKKyAgMTYsIDB4ZmNhMCwgMCwgezB4MWIsMHhiMCwweDlhLDB4NGMsMHgxMCwweDliLDB4ODAsMHgyNCwweGMwLDB4MGEsMHgzMCwweDAwLDB4MGMsMHgwNCwweDliLDB4MjAgfSwKKyAgMTYsIDB4ZmNiMCwgMCwgezB4MjAsMHhkNiwweDA4LDB4MzAsMHgwMiwweDhlLDB4MDgsMHhhMywweDA0LDB4MjQsMHhjMCwweDE5LDB4MzQsMHgwMiwweGM3LDB4MDcgfSwKKyAgMTYsIDB4ZmNjMCwgMCwgezB4YWEsMHhhNCwweGEwLDB4YzAsMHg0OCwweDM0LDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNkMCwgMCwgezB4YTAsMHgwMSwweDBlLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDVjLDB4NDAsMHhiMywweDE0LDB4MjUgfSwKKyAgMTYsIDB4ZmNlMCwgMCwgezB4ZTAsMHgwOCwweDdhLDB4MDIsMHg5ZSwweGMwLDB4OTIsMHg0MCwweGEwLDB4MDAsMHg0OSwweDYwLDB4MDIsMHhjZSwweDAyLDB4OGUgfSwKKyAgMTYsIDB4ZmNmMCwgMCwgezB4MDEsMHgyMSwweGMwLDB4OGIsMHg1NCwweDAyLDB4YzQsMHgwOCwweDg2LDB4NDAsMHgyMSwweGM4LDB4ODgsMHgxMCwweDAyLDB4MjggfSwKKyAgMTYsIDB4ZmQwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweGMwLDB4ZTQsMHg4MCwweDNkLDB4ZTIgfSwKKyAgMTYsIDB4ZmQxMCwgMCwgezB4MGYsMHg1OCwweDAzLDB4NWUsMHg5MCwweGI2LDB4YTIsMHgzNSwweGUwLDB4MGUsMHg3YywweDIzLDB4MWMsMHgwMCwweGQ2LDB4ODAgfSwKKyAgMTYsIDB4ZmQyMCwgMCwgezB4MzEsMHhlMCwweDg0LDB4NzgsMHgwMywweGRlLDB4MDAsMHhjNywweDgwLDB4MzUsMHhlMCwweDBmLDB4NjgsMHgwMywweGRlLDB4MDAgfSwKKyAgMTYsIDB4ZmQzMCwgMCwgezB4ZTMsMHg4MCwweDMzLDB4ZTgsMHgyYywweDc4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQ0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4OTAsMHhmYSwweDAwLDB4N2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGFjLDB4MDEsMHhmYiwweDAwLDB4M2MgfSwKKyAgMTYsIDB4ZmQ1MCwgMCwgezB4NDEsMHgwZiwweDMwLDB4MGIsMHgyZCwweDA0LDB4ZWIsMHgwMSwweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmEgfSwKKyAgMTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGU5LDB4NjAsMHgzZSwweGU0LDB4MGYsMHg5MCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZmQ3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDIwLDB4ZmYsMHg5MCwweDNlLDB4MjAgfSwKKyAgMTYsIDB4ZmQ4MCwgMCwgezB4MGMsMHhhOSwweDA3LDB4MmUsMHg0NCwweGM5LDB4OTEsMHgzMCwweGEwLDB4MGMsMHhiOCwweDYzLDB4MmYsMHg0NCwweGNiLDB4YTEgfSwKKyAgMTYsIDB4ZmQ5MCwgMCwgezB4MzYsMHgyMCwweDhjLDB4ZjgsMHgwMywweDM2LDB4MDAsMHhjZiwweDgyLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgyMywweDJlLDB4MDAgfSwKKyAgMTYsIDB4ZmRhMCwgMCwgezB4Y2UsMHhjMCwweDNiLDB4ZTAsMHgwYywweDY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmRiMCwgMCwgezB4YTgsMHgxMSwweDljLDB4ODQsMHhiMywweDU0LDB4MmMsMHhmNCwweDI4LDB4YmEsMHg4YSwweDNlLDB4NDAsMHg4MSwweGEwLDB4MjkgfSwKKyAgMTYsIDB4ZmRjMCwgMCwgezB4YjAsMHgwZiwweDc4LDB4NDIsMHhhZSwweDAwLDB4ODMsMHg5MCwweDMzLDB4ZTgsMHgwZCwweGUxLDB4MDAsMHg4NSwweDQwLDB4ODIgfSwKKyAgMTYsIDB4ZmRkMCwgMCwgezB4MjQsMHgyMywweGM2LDB4MGQsMHg3MSwweDAzLDB4NWUsMHhlMCwweDg3LDB4MDAsMHgyYiwweGMxLDB4MGQsMHg0NCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4ZmRlMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDA4LDB4MzUsMHgxNCwweDZkLDB4YzAgfSwKKyAgMTYsIDB4ZmRmMCwgMCwgezB4ODgsMHg3MiwweDMyLDB4NWMsMHg4MCwweDg0LDB4MzAsMHgyYiwweDg4LDB4MGEsMHg3MCwweDQyLDB4NWMsMHhhOCwweDkxLDB4MDggfSwKKyAgMTYsIDB4ZmUwMCwgMCwgezB4MjUsMHhjOCwweDA5LDB4NzAsMHgwMiwweDRjLDB4MjIsMHg4MywweDBhLDB4NjEsMHhjMCwweDA5LDB4MjAsMHgwMiwweDA0LDB4MDAgfSwKKyAgMTYsIDB4ZmUxMCwgMCwgezB4ODcsMHgwMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmUyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MTAsMHhiMywweDg1LDB4NmMsMHhkYywweDA4LDB4MzQsMHgwMiwweDRkLDB4MjEsMHg4MSwweDAwLDB4MjggfSwKKyAgMTYsIDB4ZmUzMCwgMCwgezB4MDIsMHg0YSwweDMxLDB4MTIsMHhlZiwweDBjLDB4OTEsMHhjMiwweDIwLDB4ZjAsMHgwOCwweDMwLDB4NDIsMHg4ZSwweDAwLDB4ODIgfSwKKyAgMTYsIDB4ZmU0MCwgMCwgezB4NDAsMHgyMCwweGM4LDB4MTksMHgyOCwweDAyLDB4MjIsMHg4MSwweDgzLDB4YzAsMHgyOCwweGQ0LDB4MDksMHgwMCwweDBhLDB4MDggfSwKKyAgMTYsIDB4ZmU1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmIsMHhhMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ZmU2MCwgMCwgezB4OGMsMHgwNCwweDEyLDB4N2QsMHgxMCwweGNmLDB4MDIsMHgzYSwweDUwLDB4MDgsMHhjMCwweDQyLDB4N2QsMHg1MiwweDU4LDB4MDEgfSwKKyAgMTYsIDB4ZmU3MCwgMCwgezB4MzYsMHgyMiwweDY5LDB4ZDAsMHgxMywweDJhLDB4MDAsMHg4OCwweDgyLDB4MzIsMHhmMCwweDA5LDB4YjgsMHg4MiwweDJmLDB4MDAgfSwKKyAgMTYsIDB4ZmU4MCwgMCwgezB4YzksMHhjOCwweDIzLDB4YzAsMHgwYywweDhhLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmU5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhiOSwweDQwLDB4M2MsMHg1MCwweDRmLDB4ODAsMHgyMywweGFjLDB4MTIsMHhmYiwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ZmVhMCwgMCwgezB4YzAsMHg2ZCwweDgwLDB4MTMsMHhhYywweDAwLDB4ZTgsMHgwNCwweGJhLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhlOCwweDAwLDB4ZjMgfSwKKyAgMTYsIDB4ZmViMCwgMCwgezB4MDgsMHgzYywweDgwLDB4MGYsMHg5MCwweDgzLDB4ZWMsMHgwNCwweGY5LDB4NjAsMHgyYywweGMyLDB4MGYsMHg4MCwweDgzLDB4ZTAgfSwKKyAgMTYsIDB4ZmVjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4ZWMsMHgyYywweDNmLDB4ZjAgfSwKKyAgMTYsIDB4ZmVkMCwgMCwgezB4OGMsMHhmYSwweDhiLDB4YmMsMHgwMCwweGZlLDB4MDAsMHgzZiwweDAwLDB4MGYsMHg3OSwweDAzLDB4M2MsMHgwMCwweGNlLDB4MDggfSwKKyAgMTYsIDB4ZmVlMCwgMCwgezB4MGIsMHhjMiwweDBjLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhmYywweDAwLDB4MzMsMHg0MCwweDhjLDB4N2EsMHgwMywweDNhLDB4MDAgfSwKKyAgMTYsIDB4ZmVmMCwgMCwgezB4YzUsMHgwMCwweDMzLDB4YzAsMHg0YywweGM4LDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmYwMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4OCwweGMwLDB4MmUsMHhlMCwweDA4LDB4OTQsMHgwMiwweDJjLDB4MDAsMHhiYiwweDgwLDB4NjYgfSwKKyAgMTYsIDB4ZmYxMCwgMCwgezB4MzAsMHgxNiwweGIwLDB4MDIsMHgyYywweDAwLDB4ZGEsMHg0YywweDIyLDB4ZjAsMHgwOCwweGYwLDB4MDMsMHhlYywweDAwLDB4ZWIgfSwKKyAgMTYsIDB4ZmYyMCwgMCwgezB4YzAsMHgyMiwweDY4LDB4MDAsMHg5NCwweDAyLDB4MmMsMHgwMiwweGE5LDB4ODAsMHgyMiwweGMwLDB4MDgsMHgwYywweDAyLDB4YTAgfSwKKyAgMTYsIDB4ZmYzMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YWIsMHgwNCwweDJlLDB4YzAgfSwKKyAgMTYsIDB4ZmY0MCwgMCwgezB4MDgsMHhhNCwweDA2LDB4MmMsMHgwNCwweGFiLDB4MTAsMHgyZSwweDYwLDB4NDMsMHg4MCwweDgyLDB4NmMsMHgwMSwweDgxLDB4ODAgfSwKKyAgMTYsIDB4ZmY1MCwgMCwgezB4MjgsMHgwYSwweDA4LDB4OTEsMHgwMCwweGUwLDB4MDAsMHhiOCwweDgwLDB4MDIsMHhlMCwweDA4LDB4ODAsMHgwMiwweDJkLDB4ODAgfSwKKyAgMTYsIDB4ZmY2MCwgMCwgezB4ODgsMHhjMCwweDIyLDB4YzAsMHgwOCwweDgyLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmY3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHg4MCwweDQ0LDB4MmMsMHhjOCwweDI4LDB4YTAsMHgyMiwweDBjLDB4MDQsMHhiMywweDI2LDB4MmMgfSwKKyAgMTYsIDB4ZmY4MCwgMCwgezB4YzgsMHg4OCwweDAxLDB4MDYsMHgwYywweGUwLDB4OTEsMHgyMCwweDIwLDB4MGMsMHgzOCwweDA0LDB4MjIsMHhjMCwweDQ4LDB4YTMgfSwKKyAgMTYsIDB4ZmY5MCwgMCwgezB4NDIsMHhhMCwweDgxLDB4MDgsMHgwMCwweDAyLDB4MGMsMHg4MCwweDgxLDB4MDAsMHgyMCwweGMwLDB4MjgsMHgwMCwweDAyLDB4ODIgfSwKKyAgMTYsIDB4ZmZhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4YTksMHg0MCwweDNlLDB4NDQgfSwKKyAgMTYsIDB4ZmZiMCwgMCwgezB4MDgsMHhiMSwweDAzLDB4MmMsMHg0MCwweGVhLDB4NDksMHgyZSwweDBkLDB4MGIsMHhiNiwweDEzLDB4N2QsMHg4MCwweGM5LDB4NDAgfSwKKyAgMTYsIDB4ZmZjMCwgMCwgezB4YmEsMHhkMCwweDBjLDB4YjQsMHgwMywweGFjLDB4MDAsMHhmOCwweDAwLDB4MzIsMHg0MCwweDBjLDB4ODAsMHgwYiwweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZmZkMCwgMCwgezB4YzUsMHgwMCwweGIyLDB4YzAsMHgwYywweDgwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmZlMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDQsMHhmYywweDAwLDB4M2QsMHhjNSwweDBiLDB4ZjEsMHgwMCwweGZjLDB4ZDAsMHg3NywweDI5LDB4MzcgfSwKKyAgMTYsIDB4ZmZmMCwgMCwgezB4MGMsMHg4ZSwweDc0LDB4MDMsMHhmYywweDA4LDB4ZmQsMHg2OSwweDNmLDB4ZDgsMHgwZiwweGYwLDB4MDMsMHhiYywweDAwLDB4ZWYgfSwKKyAgMTYsIDB4ODAxMCwgMCwgezB4MDAsMHgzZiwweDQwLDB4MDcsMHhjMCwweDAzLDB4ZjAsMHg0MCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ODAyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MGQsMHhmYywweGMwLDB4ZGMsMHg4MCwweDNmLDB4YzggfSwKKyAgMTYsIDB4ODAzMCwgMCwgezB4MGYsMHg0OCwweDAzLDB4N2MsMHgyMCwweGZmLDB4NjgsMHgzNywweGUwLDB4MGUsMHhmMSwweDAzLDB4OWMsMHgwMCwweGJmLDB4MjAgfSwKKyAgMTYsIDB4ODA0MCwgMCwgezB4MzcsMHhlMCwweDBjLDB4YzgsMHgxMywweDNjLDB4NDAsMHhlZCwweDYwLDB4YmIsMHhlNCwweDJjLDB4NDMsMHg0YiwweDcwLDB4YTAgfSwKKyAgMTYsIDB4ODA1MCwgMCwgezB4Y2MsMHgyYywweDNmLDB4MDksMHgwZiwweGQ4LDB4NDMsMHg3MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODA2MCwgMCwgezB4ODAsMHgwMCwweGVkLDB4YzAsMHhiOCwweDgwLDB4MmYsMHhmNCwweDBmLDB4OTgsMHgwMiwweDNmLDB4MDAsMHhiZiwweDQyLDB4MjIgfSwKKyAgMTYsIDB4ODA3MCwgMCwgezB4Y2EsMHgwOCwweGY0LDB4MDIsMHgzZSwweDAwLDB4YmYsMHhkMCwweDIyLDB4NjAsMHgyOCwweDg4LDB4MGEsMHgzZCwweDgwLDB4OGQgfSwKKyAgMTYsIDB4ODA4MCwgMCwgezB4NDAsMHgyMiwweGM4LDB4MDgsMHg4MSwweDAyLDB4MjEsMHg4MCwweGRiLDB4YzAsMHgyZSwweGE1LDB4MGIsMHg5OCwweDQyLDB4MjAgfSwKKyAgMTYsIDB4ODA5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDEwLDB4YjAsMHgwMCwweDJjLDB4YzAgfSwKKyAgMTYsIDB4ODBhMCwgMCwgezB4MGIsMHgyMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MjAsMHgyNiwweGMwLDB4OGEsMHgzNiwweDEyLDB4OGMsMHg0MSwweGIzLDB4MDAgfSwKKyAgMTYsIDB4ODBiMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4MDAsMHgwMiwweDBkLDB4ODEsMHhhMSwweDMwLDB4MjIsMHhjOCwweDg5LDB4YTIsMHg0MiwweDA4LDB4MjAgfSwKKyAgMTYsIDB4ODBjMCwgMCwgezB4YjAsMHgwMCwweDJjLDB4NDAsMHgwYiwweDkwLDB4MjYsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHhiOCwweDUwLDB4MmUsMHhjMCwweDBhLDB4OTAsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ODBlMCwgMCwgezB4YzAsMHgwOCwweGIwLDB4NjIsMHgyYywweDEwLDB4YmIsMHgwNCwweDJhLDB4ZjAsMHg0YSwweDg4LDB4MDIsMHgwYywweDAwLDB4ODEgfSwKKyAgMTYsIDB4ODBmMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDksMHhiOCwweDgwLDB4MjYsMHgwMCwweGI4LDB4ODAsMHgyZSwweDIxLDB4MGIsMHg5MCwweDAyLDB4MzAgfSwKKyAgMTYsIDB4ODEwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTUsMHhlYywweDAwLDB4ZDgsMHhjMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ODExMCwgMCwgezB4MGIsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzNiwweDgwLDB4MGUsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4ODEyMCwgMCwgezB4M2MsMHhlMCwweDBjLDB4MGMsMHgwMywweDJjLDB4MDAsMHhlOSwweDAwLDB4MTAsMHhjMCwweDBjLDB4OGMsMHgwMywweDA2LDB4MDAgfSwKKyAgMTYsIDB4ODEzMCwgMCwgezB4ZjgsMHhjZCwweDNlLDB4MjIsMHgwZiwweDE4LDB4MDMsMHg0MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhmNywweDAyLDB4M2YgfSwKKyAgMTYsIDB4ODE1MCwgMCwgezB4ZTQsMHgwZiwweDcwLDB4MDMsMHg3YywweDA0LDB4YjcsMHgwMCwweDM3LDB4NDAsMHgwZCwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmQgfSwKKyAgMTYsIDB4ODE2MCwgMCwgezB4MDAsMHgzNywweGQwLDB4MGUsMHhjMCwweDQzLDB4ZjQsMHgwMCwweGRmLDB4MDAsMHgzZiwweDgwLDB4OGYsMHhkYSwweDAzLDB4ZjggfSwKKyAgMTYsIDB4ODE3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZjgsMHgxMCwweDNhLDB4YzAgfSwKKyAgMTYsIDB4ODE4MCwgMCwgezB4NmQsMHhhNiwweDEzLDB4ZWMsMHgwMCwweGNiLDB4MDAsMHgzYSwweGQwLDB4MGYsMHhiMCwweDAzLDB4MmMsMHgxMCwweGRiLDB4MTAgfSwKKyAgMTYsIDB4ODE5MCwgMCwgezB4MzYsMHhkOCwweDBkLDB4ODQsMHgwMywweGVjLDB4MDYsMHhjOSwweDA4LDB4M2EsMHhjMCwweDBlLDB4ODYsMHgwMywweGE4LDB4NjAgfSwKKyAgMTYsIDB4ODFhMCwgMCwgezB4ZjgsMHgyMCwweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHg1NCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFiMCwgMCwgezB4OTgsMHgwNSwweDNjLDB4MDAsMHhiYiwweDQwLDB4MjMsMHhkMCwweDA4LDB4MzAsMHgwMiwweDNlLDB4MTAsMHhhZiwweDAwLDB4MjAgfSwKKyAgMTYsIDB4ODFjMCwgMCwgezB4YzAsMHgwYiwweGYwLDB4MDIsMHgzYywweDAwLDB4OGYsMHg1MCwweDJlLDB4YzgsMHgwNiwweDhhLDB4MDIsMHhmYywweDAwLDB4OGQgfSwKKyAgMTYsIDB4ODFkMCwgMCwgezB4MjQsMHg4MiwweGQ2LDB4MDgsMHgzMiwweDAyLDB4MmQsMHgwOCwweDNhLDB4NDAsMHgyMiwweDgwLDB4MGQsMHg5MCwweDAzLDB4NjIgfSwKKyAgMTYsIDB4ODFlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg0YywweDAwLDB4YjAsMHgyMCwweDI4LDB4YzIgfSwKKyAgMTYsIDB4ODFmMCwgMCwgezB4MDgsMHgwNCwweDAyLDB4OGMsMHgwMCwweDEzLDB4MDIsMHgyOCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgzMCwweDkzLDB4ODAgfSwKKyAgMTYsIDB4ODIwMCwgMCwgezB4MjQsMHhkMCwweDA5LDB4MjAsMHgwMiwweGNjLDB4MDAsMHg5MSwweDQwLDB4MDgsMHhjMCwweDJhLDB4MTQsMHgwMiwweDgxLDB4MDAgfSwKKyAgMTYsIDB4ODIxMCwgMCwgezB4OTAsMHgwMCwweDY4LDB4MDAsMHgwOCwweDE4LDB4MDIsMHgzYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODIyMCwgMCwgezB4NzAsMHgwMSwweDFlLDB4MDAsMHhiNCwweGEwLDB4MjEsMHhlMCwweDA4LDB4YzgsMHgxMiwweDllLDB4MDAsMHhiMywweDgyLDB4MjEgfSwKKyAgMTYsIDB4ODIzMCwgMCwgezB4ZTAsMHgwYiwweDdhLDB4MGEsMHgxZSwweDAwLDB4OTcsMHg4MCwweDJkLDB4ZTEsMHgwYSwweDQ4LDB4MDIsMHhjZSwweDQwLDB4OTUgfSwKKyAgMTYsIDB4ODI0MCwgMCwgezB4OTAsMHgyOSwweGU0LDB4MDgsMHg1OCwweDAyLDB4OWEsMHgwMCwweGI3LDB4ODgsMHgyMSwweGUwLDB4MDksMHg1OCwweDAyLDB4NWMgfSwKKyAgMTYsIDB4ODI1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDRhLDB4MDAsMHgwYywweDAwLDB4ZjAsMHg4MCwweDM4LDB4YzQgfSwKKyAgMTYsIDB4ODI2MCwgMCwgezB4MGMsMHgyNSwweDAzLDB4OGMsMHgyMCwweDkzLDB4MDAsMHgzOCwweGM0LDB4MGYsMHhiMCwweDAzLDB4MGMsMHg4MCwweGQzLDB4MDAgfSwKKyAgMTYsIDB4ODI3MCwgMCwgezB4MzQsMHhjMCwweDBkLDB4MDQsMHgxMywweGNjLDB4MDgsMHg5OSwweDAwLDB4MmEsMHhjMCwweDBlLDB4MjEsMHgwMywweDg4LDB4MDQgfSwKKyAgMTYsIDB4ODI4MCwgMCwgezB4ZjMsMHgwMCwweDM4LDB4YzAsMHgwYywweDExLDB4ODMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODI5MCwgMCwgezB4NDIsMHgxNSwweGJjLDB4MDAsMHhmNCwweDAwLDB4M2YsMHhjMywweDBlLDB4YzAsMHgwMywweDFjLDB4MDAsMHhhZiwweDRhLDB4N2YgfSwKKyAgMTYsIDB4ODJhMCwgMCwgezB4YzQsMHgwZiwweGIyLDB4MDMsMHhmZCwweDAxLDB4ZWYsMHgxMCwweDNmLDB4ODQsMHgwZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZTkgfSwKKyAgMTYsIDB4ODJiMCwgMCwgezB4MDAsMHgzNywweGMyLDB4MGUsMHhmMSwweDQ3LDB4N2MsMHgwMCwweGY3LDB4MDAsMHgzZCwweGMwLDB4MGYsMHg1MCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ODJjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MTUsMHhlYywweDA4LDB4ZjgsMHgwMCwweDNlLDB4Y2EgfSwKKyAgMTYsIDB4ODJkMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWYsMHgyMSwweGZiLDB4ODAsMHg3YSwweDQwLDB4OGYsMHhiMiwweGExLDB4MmYsMHgwMCwweGNiLDB4NjAgfSwKKyAgMTYsIDB4ODJlMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVkLDB4YTAsMHhlOSwweDMwLDB4MzIsMHhjMCwweDJkLDB4YjAsMHgwMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4ODJmMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODMwMCwgMCwgezB4YzgsMHg5MSwweDlkLDB4MDAsMHhiNCwweDAxLDB4MmQsMHhjOCwweDBiLDB4NzAsMHgwMiwweGNjLDB4ODAsMHg4ZiwweDIwLDB4MjEgfSwKKyAgMTYsIDB4ODMxMCwgMCwgezB4YzAsMHg4YiwweDc2LDB4MDMsMHg1ZCwweDAwLDB4ODcsMHgwYSwweDJkLDB4YzAsMHgwYiwweDQwLDB4MjIsMHhmZCwweDAwLDB4OGQgfSwKKyAgMTYsIDB4ODMyMCwgMCwgezB4MTAsMHgyMywweGM4LDB4MDgsMHg1MCwweDEyLDB4ZDQsMHgwMCwweGI3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4ODMzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg5ZSwweDAwLDB4YjQsMHg4MCwweDJkLDB4ZTAgfSwKKyAgMTYsIDB4ODM0MCwgMCwgezB4MGIsMHg3YywweDAyLDB4ZGUsMHg0MCwweGE3LDB4ODIsMHgyZCwweGUwLDB4MGIsMHgzYSwweDAyLDB4OGUsMHgwMCwweDg3LDB4OTAgfSwKKyAgMTYsIDB4ODM1MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4NTgsMHgwMiwweDVlLDB4MDAsMHhhNSwweGEyLDB4NjUsMHhlMCwweDA4LDB4NjgsMHg4MiwweGRhLDB4MDAgfSwKKyAgMTYsIDB4ODM2MCwgMCwgezB4OTUsMHg4MCwweDJkLDB4NjAsMHgwYiwweDc4LDB4MDIsMHhlMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODM3MCwgMCwgezB4MDgsMHg4NCwweGNjLDB4MDAsMHhiMCwweDA5LDB4MmMsMHhjMCwweDBiLDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwLDB4MmUgfSwKKyAgMTYsIDB4ODM4MCwgMCwgezB4YzAsMHgwYiwweDMwLDB4NDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4YTAsMHgwYiwweDA0LDB4MDIsMHhjYywweDAwLDB4ODEgfSwKKyAgMTYsIDB4ODM5MCwgMCwgezB4MDAsMHhhMCwweGMwLDB4MDgsMHhiMCwweDA2LDB4Y2YsMHg4MCwweGIzLDB4MTAsMHgyYywweGM0LDB4MGIsMHgzMSwweDAyLDB4YzMgfSwKKyAgMTYsIDB4ODNhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4ZmUsMHg4MCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4ODNiMCwgMCwgezB4MGYsMHhlOCwweDEzLDB4ZTgsMHgwMCwweGVhLDB4MDAsMHgzZiwweGIwLDB4MGYsMHhhMCwweDAzLDB4YTgsMHgwMiwweGMyLDB4MDAgfSwKKyAgMTYsIDB4ODNjMCwgMCwgezB4MmYsMHg4OCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhlYSwweDAwLDB4MzYsMHgwMCwweDBjLDB4ZTAsMHgwMywweGY5LDB4MjAgfSwKKyAgMTYsIDB4ODNkMCwgMCwgezB4ZGUsMHg4MCwweDNmLDB4YTAsMHg0ZiwweGE4LDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODNlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDEwLDB4M2MsMHgxMCwweDBmLDB4ODAsMHg4MywweGUxLDB4MDAsMHhlOCwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ODNmMCwgMCwgezB4MDYsMHgwZiwweDAwLDB4MTMsMHhlMCwweDAxLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4ODMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4ODQwMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDIzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ODQxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNCwweDAwLDB4ZjksMHgxMCwweDNlLDB4NDQgfSwKKyAgMTYsIDB4ODQyMCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDEyLDB4MjQsMHgwMCwweGY5LDB4MTAgfSwKKyAgMTYsIDB4ODQzMCwgMCwgezB4MzIsMHg0MCwweDhmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHgxMCwweDBjLDB4OWMsMHgwMSwweDI0LDB4MDAgfSwKKyAgMTYsIDB4ODQ0MCwgMCwgezB4ZjksMHgxMCwweDNlLDB4NzAsMHgwZiwweDkwLDB4MDIsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODQ1MCwgMCwgezB4ODAsMHgxNCwweDY0LDB4MDAsMHhiOSwweGMwLDB4MmUsMHg0OCwweDA4LDB4OTEsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4ODQ2MCwgMCwgezB4NDAsMHgwZCwweDkwLDB4MDMsMHg2NywweDAwLDB4YjksMHg4MCwweDJhLDB4NjAsMHgwYiwweDk5LDB4MDIsMHhlNCwweDAwLDB4ODEgfSwKKyAgMTYsIDB4ODQ3MCwgMCwgezB4MDAsMHgyMiwweDQwLDB4MmMsMHg5MCwweDEyLDB4MjUsMHgyMCwweGI5LDB4NDgsMHgyZSwweDUyLDB4MGIsMHg5NCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ODQ4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4ODQ5MCwgMCwgezB4NjgsMHg5MCwweDQ2LDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweGMwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHg2MCwweGI5LDB4MDAgfSwKKyAgMTYsIDB4ODRhMCwgMCwgezB4MjIsMHg0OCwweDBiLDB4OTAsMHgwNiwweGU0LDB4MDIsMHg4OSwweDAwLDB4YTAsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE2LDB4MTAgfSwKKyAgMTYsIDB4ODRiMCwgMCwgezB4YjksMHgwMCwweDBlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODRjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhiMSwweDAwLDB4MmMsMHg0OCwweDA4LDB4MTAsMHgwMiwweGM0LDB4ODQsMHhiMSwweDIwLDB4MmMgfSwKKyAgMTYsIDB4ODRkMCwgMCwgezB4NDAsMHgwOSwweDEyLDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMCwweDI4LDB4NDAsMHgwYiwweDEwLDB4MDIsMHhjNCwweDgwLDB4ODkgfSwKKyAgMTYsIDB4ODRlMCwgMCwgezB4MjAsMHgyMCwweDQwLDB4NGIsMHgxMiwweDBhLDB4ODQsMHg4NCwweGIxLDB4MjAsMHgyYywweDQ4LDB4OGIsMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ODRmMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YmEsMHgwMCwweDJlLDB4MDAgfSwKKyAgMTYsIDB4ODUwMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4ZTgsMHgwOCwweGY4LDB4NTAsMHgzZSwweDE0LDB4MGMsMHg4NSwweDAzLDB4MjAsMHgwMCwweGI4LDB4MDAgfSwKKyAgMTYsIDB4ODUxMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4YTAsMHgwMywweGUxLDB4NDAsMHhjOCwweDUwLDB4MzIsMHgxNCwweDBjLDB4YTUsMHgwMywweGExLDB4NDAgfSwKKyAgMTYsIDB4ODUyMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGEwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODUzMCwgMCwgezB4ODgsMHgwZCwweGU0LDB4NDAsMHhmZCwweDAwLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhiOSwweDExLDB4M2YgfSwKKyAgMTYsIDB4ODU0MCwgMCwgezB4NDAsMHgwZiwweDkxLDB4MDMsMHg2NCwweDQ0LDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4ZmQgfSwKKyAgMTYsIDB4ODU1MCwgMCwgezB4MTAsMHgzZiwweDEwLDB4OGMsMHhkMSwweDAzLDB4NzQsMHg0MCwweGZmLDB4MTAsMHgzZiwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4ODU2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHg2NiwweDIwLDB4ZWQsMHgwMCwweDMzLDB4NjkgfSwKKyAgMTYsIDB4ODU3MCwgMCwgezB4NGQsMHg1MCwweDQzLDB4NTYsMHgwMCwweGY5LDB4YTAsMHgzNCwweDQwLDB4MGYsMHg5YSwweDBiLDB4MzQsMHgwMCwweGRkLDB4ODAgfSwKKyAgMTYsIDB4ODU4MCwgMCwgezB4M2IsMHg0MCwweDBiLDB4NTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHhlMCwweDBlLDB4ZDAsMHgwMywweGY0LDB4MDAgfSwKKyAgMTYsIDB4ODU5MCwgMCwgezB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwYywweGQwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODVhMCwgMCwgezB4NzgsMHgxMCwweGUyLDB4ODAsMHg4OCwweDA0LDB4MjIsMHgxMCwweDBiLDB4ODAsMHgwMiwweDIwLDB4MDksMHhiOCwweGYwLDB4MjIgfSwKKyAgMTYsIDB4ODViMCwgMCwgezB4MDAsMHgwYiwweDhlLDB4MTIsMHhhMCwweDAwLDB4YjgsMHg1MiwweDJlLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhlMCwweDA1LDB4YjggfSwKKyAgMTYsIDB4ODVjMCwgMCwgezB4YWEsMHgyMywweDNlLDB4MGQsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgzYSwweDAwLDB4MDgsMHg4MCwweDAyLDB4Y2UgfSwKKyAgMTYsIDB4ODVkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDIwLDB4YTksMHgwMCwweGE0LDB4NDQgfSwKKyAgMTYsIDB4ODVlMCwgMCwgezB4MDksMHg5MCwweDAyLDB4YzUsMHgwMCwweGExLDB4MDgsMHgyYywweDQwLDB4MGIsMHgxMSwweDgyLDB4MDQsMHgwMCwweGIxLDB4MDAgfSwKKyAgMTYsIDB4ODVmMCwgMCwgezB4MjgsMHg0MCwweDBhLDB4MTAsMHg0MiwweGM0LDB4MDAsMHhiNSwweDAwLDB4YTEsMHg0MCwweDA4LDB4MTAsMHgwMiwweGM0LDB4MDAgfSwKKyAgMTYsIDB4ODYwMCwgMCwgezB4YjEsMHgwMSwweDJjLDB4NDAsMHgwOCwweDEwLDB4MjAsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODYxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4OSwweDA0LDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMCwweGFjLDB4MDAsMHgzOSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ODYyMCwgMCwgezB4NDAsMHgwYiwweDEwLDB4MDIsMHhhNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDgsMHgwYiwweDkwLDB4MTIsMHhlNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4ODYzMCwgMCwgezB4MDAsMHgyMSwweDYwLDB4MDksMHg5MiwweDIyLDB4ZTQsMHgyOCwweGI5LDB4MDAsMHgwYSwweDUwLDB4MDgsMHg5MCwweDA2LDB4YzYgfSwKKyAgMTYsIDB4ODY0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZTksMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4ODY1MCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQ4LDB4MGYsMHg5MCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAgfSwKKyAgMTYsIDB4ODY2MCwgMCwgezB4M2EsMHg3OCwweDBlLDB4OTgsMHgwMywweGU0LDB4MDAsMHhiOSwweDAwLDB4YjIsMHg0MCwweDBlLDB4OTIsMHgyMywweGU2LDB4MDAgfSwKKyAgMTYsIDB4ODY3MCwgMCwgezB4YjksMHg1MCwweDNlLDB4NzAsMHgyYywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODY4MCwgMCwgezB4NjgsMHgwMSwweDg0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDRmLDB4OWMsMHgyMywweDY0LDB4MDAsMHhmOSwweDA0LDB4MzYgfSwKKyAgMTYsIDB4ODY5MCwgMCwgezB4NDgsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjAsMHgwZiwweDkyLDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ODZhMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDgzLDB4ZTQsMHg0NCwweGY5LDB4MDAsMHg3OCwweDY0LDB4MGYsMHg5MCwweDAzLDB4ZGEgfSwKKyAgMTYsIDB4ODZiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4ODZjMCwgMCwgezB4MGYsMHg4MiwweDAzLDB4YTAsMHg0MCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4MjAsMHhjMCwweGM4LDB4ODAgfSwKKyAgMTYsIDB4ODZkMCwgMCwgezB4M2UsMHgxMiwweDBmLDB4ODAsMHgwMywweDYwLDB4MDAsMHg3YywweDAwLDB4MzMsMHgwMCwweDBkLDB4ODAsMHgxMywweGUwLDB4MTAgfSwKKyAgMTYsIDB4ODZlMCwgMCwgezB4YzgsMHg2NCwweDNlLDB4MDgsMHgwYywweDgyLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODZmMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiNiwweGUwLDB4MGYsMHhhMCwweDBiLDB4NjAsMHg4MiwweDM4LDB4MDAsMHhhYSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4ODcwMCwgMCwgezB4ODAsMHgwOCwweGEwLDB4NDIsMHhiYSwweDAwLDB4YWUsMHgyMCwweDJmLDB4ODgsMHgwYiwweGU1LDB4MDIsMHgyOCwweDAwLDB4YmEgfSwKKyAgMTYsIDB4ODcxMCwgMCwgezB4ZDgsMHgzNywweDgwLDB4MDgsMHhlYywweDAyLDB4ZjgsMHgwNCwweDhlLDB4MDAsMHgyZiwweDkwLDB4MGQsMHhlMCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4ODcyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjAsMHgyNCwweDJjLDB4NjAgfSwKKyAgMTYsIDB4ODczMCwgMCwgezB4MGIsMHgzOCwweDAyLDB4OGUsMHg4MCwweGFiLDB4MDAsMHgyYywweGMwLDB4MDksMHgzMCwweDAyLDB4MGQsMHgwOCwweDAwLDB4ODAgfSwKKyAgMTYsIDB4ODc0MCwgMCwgezB4NmMsMHhkMCwweDBiLDB4MzQsMHgwMiwweGNjLDB4MDAsMHhiOCwweGMwLDB4MjAsMHgwMCwweDQ4LDB4MzQsMHgxMiwweGNjLDB4NDAgfSwKKyAgMTYsIDB4ODc1MCwgMCwgezB4ODMsMHgwMCwweDJjLDB4ZTAsMHgwYSwweDM1LDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODc2MCwgMCwgezB4YTAsMHgwMSwweDFjLDB4NDAsMHhiNywweDAwLDB4MmQsMHgwMiwweDhiLDB4NjAsMHgwMiwweDllLDB4MDAsMHg4NywweDIwLDB4MmYgfSwKKyAgMTYsIDB4ODc3MCwgMCwgezB4ZTAsMHgwOCwweDcyLDB4MDIsMHg5ZSwweDAwLDB4YTQsMHgwMCwweDJkLDB4YzAsMHgwYiwweGY4LDB4MDIsMHg5YywweGMwLDB4YjMgfSwKKyAgMTYsIDB4ODc4MCwgMCwgezB4MDIsMHhhNSwweGMwLDB4MDgsMHg1MCwweDg2LDB4ZmUsMHgwMCwweDg3LDB4MDAsMHgyZiwweGQwLDB4MDksMHg3MCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4ODc5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjQsMHg4MCwweDNkLDB4MjAgfSwKKyAgMTYsIDB4ODdhMCwgMCwgezB4MGYsMHg1OCwweDAzLDB4OWUsMHgwMCwweDY3LDB4ODAsMHgzZCwweGY4LDB4MGQsMHgzOCwweDAyLDB4MWEsMHgxMCwweDQ0LDB4ODAgfSwKKyAgMTYsIDB4ODdiMCwgMCwgezB4M2QsMHhlMCwweDBmLDB4NTgsMHgwMywweGRlLDB4MjAsMHhiNCwweDgwLDB4MzMsMHhhMCwweDJjLDB4NjgsMHgwMywweGQ2LDB4MDAgfSwKKyAgMTYsIDB4ODdjMCwgMCwgezB4YzcsMHg4MSwweDNkLDB4ZTAsMHgwYywweDc4LDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODdkMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDgsMHhmOCwweDAwLDB4M2UsMHgwMCwweDhmLDB4ODAsMHgwMywweDZjLDB4MDAsMHgzYiwweDEyLDB4M2UgfSwKKyAgMTYsIDB4ODdlMCwgMCwgezB4Y2EsMHgwZiwweGI1LDB4MDMsMHhjOCwweDAwLDB4ZjgsMHgwNCwweDdlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHg2YywweDgwLDB4ZmIgfSwKKyAgMTYsIDB4ODdmMCwgMCwgezB4MDQsMHgzYSwweDQwLDB4MGYsMHg5MCwweDIzLDB4YzgsMHgwMCwweGY5LDB4MDEsMHgzYywweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ODgwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4YWMsMHg5MCwweDMxLDB4NDggfSwKKyAgMTYsIDB4ODgxMCwgMCwgezB4MDgsMHhmOCwweDAzLDB4ZmEsMHgwMCwweGNmLDB4ODAsMHgzZiwweGUwLDB4MGMsMHhmYywweDEzLDB4M2UsMHgwNCwweGZjLDB4ODAgfSwKKyAgMTYsIDB4ODgyMCwgMCwgezB4MzUsMHhhMCwweDBjLDB4NzgsMHgwMywweGJlLDB4MDAsMHhkZiwweDgwLDB4M2IsMHgyMCwweDI0LDB4ZjgsMHgwMywweDJlLDB4NDAgfSwKKyAgMTYsIDB4ODgzMCwgMCwgezB4Y2YsMHg4MCwweDMzLDB4ZTAsMHgwMywweGY5LDB4MDMsMHhkMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODg0MCwgMCwgezB4YTgsMHgxMSwweGJjLDB4MDAsMHg4MCwweDAwLDB4MDEsMHgwMCwweDA4LDB4NzIsMHgwMiwweGQwLDB4MDAsMHg4NywweDAwLDB4MmQgfSwKKyAgMTYsIDB4ODg1MCwgMCwgezB4YzgsMHgwYSwweGYwLDB4MDIsMHg5OCwweDQwLDB4ZjUsMHgwMCwweDYxLDB4NDEsMHgwMCwweDc0LDB4MDIsMHgxYywweDAwLDB4YjQgfSwKKyAgMTYsIDB4ODg2MCwgMCwgezB4MDAsMHgyMSwweGM4LDB4MDgsMHg2MCwweDAyLDB4M2UsMHgyMCwweDg2LDB4MDgsMHgyMSwweGQ4LDB4MGYsMHg1MCwweDAyLDB4ZWEgfSwKKyAgMTYsIDB4ODg3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHg5YywweDAwLDB4YTQsMHgwMCwweDIxLDB4MDAgfSwKKyAgMTYsIDB4ODg4MCwgMCwgezB4MDgsMHg1MCwweDAyLDB4ZDgsMHgwMCwweDk3LDB4MDAsMHgyZCwweGMwLDB4ODgsMHg3MSwweDAyLDB4MTQsMHgwMCwweGIwLDB4MDAgfSwKKyAgMTYsIDB4ODg5MCwgMCwgezB4MjUsMHg5MCwweDA4LDB4YzAsMHg4MiwweDljLDB4NDAsMHg5MywweDAwLDB4MjksMHhhMSwweDg4LDB4NjAsMHgwMiwweDE0LDB4MTIgfSwKKyAgMTYsIDB4ODhhMCwgMCwgezB4ODcsMHg0MCwweDI5LDB4NDAsMHgwYiwweDYwLDB4MDIsMHhjNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODhiMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDAsMHg4MCwweGQwLDB4YTAsMHgwMCwweDA4LDB4MWMsMHgwMiwweGMwLDB4MDAsMHg5MywweDAwLDB4MmMgfSwKKyAgMTYsIDB4ODhjMCwgMCwgezB4ZDAsMHgwYSwweGIwLDB4MjYsMHg4MCwweDAwLDB4YjMsMHgwMCwweDI0LDB4ZTQsMHgwOCwweDA4LDB4MDIsMHg4YywweDAwLDB4YjAgfSwKKyAgMTYsIDB4ODhkMCwgMCwgezB4MDIsMHgwMiwweDQxLDB4MDgsMHgwOCwweDAyLDB4MDMsMHgwMSwweDgxLDB4MDAsMHgyOCwweDQyLDB4MWEsMHgwMCwweDQyLDB4ZDggfSwKKyAgMTYsIDB4ODhlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MTUsMHhiYywweDAwLDB4ZTgsMHhjMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4ODhmMCwgMCwgezB4MGMsMHhiNSwweDAzLDB4ZTQsMHgwMCwweDlmLDB4MDAsMHgzZCwweGUwLDB4MGMsMHhmMCwweDBiLDB4MjQsMHgwMCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4ODkwMCwgMCwgezB4MzYsMHhlMCwweDBjLDB4MjUsMHgwMywweGJjLDB4MDUsMHhkOCwweDAyLDB4MmEsMHgwMCwweDA4LDB4YmEsMHgwMiwweDJhLDB4MDAgfSwKKyAgMTYsIDB4ODkxMCwgMCwgezB4YzEsMHgwMiwweDNhLDB4NTAsMHg4YiwweDkwLDB4MDMsMHhlZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODkyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDA4LDB4M2UsMHg4MCwweDBmLDB4YTEsMHgwMywweGVjLDB4MDQsMHhlYiwweDAyLDB4MmUgfSwKKyAgMTYsIDB4ODkzMCwgMCwgezB4YzYsMHgwZiwweGIwLDB4MTcsMHg0NCwweDAwLDB4ZTgsMHgwMCwweDNhLDB4NDAsMHgwZiwweDgwLDB4MDIsMHg2YywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4ODk0MCwgMCwgezB4MDAsMHgzZSwweGUwLDB4MGYsMHg5MCwweDkzLDB4ZTEsMHgwMCwweGQ5LDB4MDAsMHgyNiwweDcwLDB4OGYsMHg5MCwweDAxLDB4ZTEgfSwKKyAgMTYsIDB4ODk1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhmYywweDAwLDB4ZmMsMHgwMywweDM3LDB4MjQgfSwKKyAgMTYsIDB4ODk2MCwgMCwgezB4MGQsMHhmOCwweDAzLDB4ZTAsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMxLDB4OGQsMHhmMCwweDBiLDB4MzgsMHgwMCwweGNjLDB4MDAgfSwKKyAgMTYsIDB4ODk3MCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZmEsMHgwMywweDNjLDB4MGMsMHhmYywweDA0LDB4M2IsMHg4MCwweDBjLDB4YTAsMHgwMywweDk0LDB4MjAgfSwKKyAgMTYsIDB4ODk4MCwgMCwgezB4ODksMHgwNSwweDNiLDB4MDAsMHg0ZiwweGQwLDB4MjMsMHhjMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODk5MCwgMCwgezB4ODAsMHgwNCwweDZjLDB4MDAsMHhiMCwweDA2LDB4MjAsMHgxMywweDg4LDB4YTgsMHgwMiwweGViLDB4MDAsMHhiYiwweDAwLDB4MmUgfSwKKyAgMTYsIDB4ODlhMCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYSwweDAwLDB4YTgsMHg4MCwweDJlLDB4ZTAsMHgwYiwweDk0LDB4MWEsMHgyYywweDAwLDB4YmIgfSwKKyAgMTYsIDB4ODliMCwgMCwgezB4MDAsMHhhMiwweDQwLDB4MjksMHg5OCwweDAyLDB4ZTIsMHgwMCwweGE5LDB4ODQsMHgyMiwweDIwLDB4MGIsMHg5OCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ODljMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YjgsMHgwMCwweDIyLDB4MDAgfSwKKyAgMTYsIDB4ODlkMCwgMCwgezB4MDksMHg4MiwweDAyLDB4ZTYsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4MjYsMHgwMCwweDg4LDB4ODAgfSwKKyAgMTYsIDB4ODllMCwgMCwgezB4MmUsMHhhMCwweDBiLDB4YTAsMHgwMiwweDJjLDB4MDAsMHhiMywweDAwLDB4MmEsMHgwMCwweDA5LDB4OTgsMHgwMiwweGVhLDB4MjAgfSwKKyAgMTYsIDB4ODlmMCwgMCwgezB4YTksMHg4MCwweDJhLDB4NjAsMHg5YiwweDk4LDB4ODIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGEwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiOCwweDAwLDB4MjAsMHgwMCwweDA5LDB4MDgsMHgwMiwweGM0LDB4MDAsMHhiMywweDAwLDB4MjYgfSwKKyAgMTYsIDB4OGExMCwgMCwgezB4YzAsMHgwMCwweDMwLDB4MDIsMHgwMCwweDAwLDB4ODEsMHgwMCwweDJjLDB4NDEsMHgwYiwweDAwLDB4MDIsMHgwYywweDAwLDB4YjAgfSwKKyAgMTYsIDB4OGEyMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MGIsMHgwMCwweDAyLDB4YzgsMHg4MCwweGE4LDB4MDAsMHgyMCwweDQxLDB4MGIsMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4OGEzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDEwLDB4ZjgsMHg1MCwweGIyLDB4MDAgfSwKKyAgMTYsIDB4OGE0MCwgMCwgezB4MGQsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGZiLDB4MDAsMHgzZCwweGMwLDB4MGQsMHhmMCwweDEzLDB4MjQsMHgwMiwweGM4LDB4MDYgfSwKKyAgMTYsIDB4OGE1MCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDNjLDB4MDQsMHhmYiwweDAwLDB4NzgsMHg4MCwweDBjLDB4YTAsMHgwMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4OGE2MCwgMCwgezB4ZTksMHgwMCwweDFhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGE3MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmNCwweDIwLDB4M2YsMHgwMCwweDBlLDB4YzAsMHgwMiwweGYwLDB4MDEsMHhmZiwweDAwLDB4M2YgfSwKKyAgMTYsIDB4OGE4MCwgMCwgezB4YzAsMHgwZiwweGYwLDB4MjMsMHhmMCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmMgfSwKKyAgMTYsIDB4OGE5MCwgMCwgezB4MDAsMHgzZiwweDQwLDB4OWMsMHhjMCwweDAzLDB4ZjAsMHg0MCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDQzLDB4ZTggfSwKKyAgMTYsIDB4OGFhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweDAwLDB4ZWQsMHgyMywweGI3LDB4NDggfSwKKyAgMTYsIDB4OGFiMCwgMCwgezB4MGMsMHhlMSwweGMzLDB4N2MsMHhjMCwweGRkLDB4ODAsMHgzNywweGUwLDB4MGYsMHhjYiwweDAzLDB4ZmUsMHgwOCwweGZjLDB4MjggfSwKKyAgMTYsIDB4OGFjMCwgMCwgezB4M2YsMHhmMCwweDFjLDB4ZmIsMHgyMywweDdjLDB4MDEsMHhmZiwweDE0LDB4NzcsMHhlMiwweDRmLDB4ZTgsMHgyMywweDdjLDB4MDAgfSwKKyAgMTYsIDB4OGFkMCwgMCwgezB4YzQsMHg4MCwweDMzLDB4NDgsMHgyYywweGY4LDB4MjIsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGFlMCwgMCwgezB4ODAsMHgxMCwweGUwLDB4ZTAsMHhjOSwweGMwLDB4MjIsMHg1YiwweDg4LDB4OTYsMHgyMiwweDJkLDB4MDAsMHg4OSwweDIyLDB4MjIgfSwKKyAgMTYsIDB4OGFmMCwgMCwgezB4Y2EsMHgwYiwweDllLDB4MjIsMHhlMiwweGEwLDB4YjksMHg2MSwweDJjLDB4ZTAsMHg4OCwweDlmLDB4MDIsMHgzZCwweDg1LDB4YmYgfSwKKyAgMTYsIDB4OGIwMCwgMCwgezB4NjAsMHgyNiwweDUwLDB4NDgsMHhhMCwweDAyLDB4M2MsMHgwMCwweDg4LDB4MDAsMHgyMiwweDUwLDB4MDgsMHhiMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4OGIxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDgwLDB4YjEsMHgxMCwweDIwLDB4NDQgfSwKKyAgMTYsIDB4OGIyMCwgMCwgezB4MGIsMHhiMiwweDAyLDB4Y2UsMHhkMCwweDgxLDB4MDgsMHgyYywweGMwLDB4MGIsMHgwMSwweDAyLDB4OGMsMHgwOCwweGIzLDB4MDggfSwKKyAgMTYsIDB4OGIzMCwgMCwgezB4MmMsMHhjOSwweDA4LDB4MTAsMHg2MiwweDhjLDB4NjAsMHhiMywweDMyLDB4MjQsMHg4MCwweDBhLDB4YTAsMHgwMiwweDZjLDB4MDMgfSwKKyAgMTYsIDB4OGI0MCwgMCwgezB4OWEsMHgwMSwweDI2LDB4NDQsMHg0OCwweGIwLDB4NDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGI1MCwgMCwgezB4YzAsMHgxNSwweGE0LDB4YTAsMHg4YiwweDAyLDB4MjIsMHhlMCwweDBiLDB4YjAsMHg2MiwweGFjLDB4OTgsMHg5OSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4OGI2MCwgMCwgezB4YzIsMHgwYiwweDk4LDB4MDYsMHhlNCwweDAwLDB4YmIsMHgwMiwweDJlLDB4YzAsMHgwOCwweDkxLDB4NDIsMHgyYywweDEwLDB4YmIgfSwKKyAgMTYsIDB4OGI3MCwgMCwgezB4MDAsMHg2ZSwweDgwLDB4MGEsMHg4MCwweDAyLDB4NmMsMHgwMCwweDFiLDB4MDAsMHgwNiwweDQwLDB4NDgsMHhiOCwweDBhLDB4NzAgfSwKKyAgMTYsIDB4OGI4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhlNywweDAwLDB4YTEsMHgwMCwweDc2LDB4NzggfSwKKyAgMTYsIDB4OGI5MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZTgsMHgxMCwweGQ5LDB4MDAsMHgzZSwweGQwLDB4NGIsMHg5ZSwweDEzLDB4YWMsMHgwOCwweGI4LDB4YTAgfSwKKyAgMTYsIDB4OGJhMCwgMCwgezB4N2UsMHhjNiwweDA4LDB4YTgsMHgwMiwweDJjLDB4MDEsMHhiYiwweDAwLDB4MjYsMHgzMCwweDRlLDB4MjAsMHgwMywweDRjLDB4MTggfSwKKyAgMTYsIDB4OGJiMCwgMCwgezB4OTksMHg4MCwweGI0LDB4NDAsMHg0YywweDNhLDB4MDMsMHg0MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGJjMCwgMCwgezB4ZTAsMHgwMSwweGIyLDB4MDAsMHhmZCwweGM1LDB4M2IsMHhjMCwweDRjLDB4ZDAsMHgwMywweDZhLDB4MDIsMHhlZCwweDA2LDB4MzMgfSwKKyAgMTYsIDB4OGJkMCwgMCwgezB4YzQsMHgwZiwweGQwLDB4NTMsMHhmOCwweDAwLDB4ZmMsMHg5MCwweDdmLDB4YzEsMHgwZiwweDc4LDB4MDMsMHhiYywweDA0LDB4ZmYgfSwKKyAgMTYsIDB4OGJlMCwgMCwgezB4MDAsMHgzNywweDY0LDB4MGMsMHhmMSwweDAzLDB4YTQsMHgwMCwweGVkLDB4YTEsMHgzYiwweDQwLDB4MGIsMHhmMCwweDgzLDB4YjggfSwKKyAgMTYsIDB4OGJmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4YywweDAwLDB4Y2IsMHgyMCwweDNlLDB4NzEgfSwKKyAgMTYsIDB4OGMwMCwgMCwgezB4MGYsMHhiMywweDAzLDB4OTgsMHgwMiwweGZiLDB4MDIsMHgzNiwweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZWMsMHgyMCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4OGMxMCwgMCwgezB4M2UsMHhjYywweDA0LDB4ODQsMHgwMywweDJjLDB4MDAsMHhkYiwweDA0LDB4M2MsMHgxMCwweDBmLDB4YTAsMHgwMywweGVjLDB4MDAgfSwKKyAgMTYsIDB4OGMyMCwgMCwgezB4OWIsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGMzMCwgMCwgezB4ODgsMHgwNSwweDJjLDB4MDIsMHg4YiwweDQ4LDB4MmUsMHhlMCwweDBiLDB4MzQsMHgwMywweDZiLDB4MDAsMHg4YiwweGY1LDB4MjIgfSwKKyAgMTYsIDB4OGM0MCwgMCwgezB4ZjIsMHgwYiwweDljLDB4MDMsMHhhZiwweDAwLDB4YjgsMHg1MCwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHg3YywweDAwLDB4OGYgfSwKKyAgMTYsIDB4OGM1MCwgMCwgezB4MDAsMHgwZSwweDVkLDB4MGIsMHg4MCwweDAyLDB4ZjUsMHg0MCwweDgzLDB4NTAsMHgyMywweDU0LDB4MDgsMHg5YywweDAyLDB4ZTYgfSwKKyAgMTYsIDB4OGM2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDQsMHg0YywweDAwLDB4ODEsMHg4MSwweDJlLDB4NDAgfSwKKyAgMTYsIDB4OGM3MCwgMCwgezB4MDMsMHgyYywweDAyLDB4MDQsMHgzMywweDk5LDB4MDAsMHgyMCwweGYwLDB4NGEsMHgyOCwweDgwLDB4Y2MsMHg0MCwweGIwLDB4MDAgfSwKKyAgMTYsIDB4OGM4MCwgMCwgezB4MjYsMHgxMCwweDA4LDB4MjAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDA5LDB4MjAsMHgwMiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4OGM5MCwgMCwgezB4YTAsMHgwMiwweDI4LDB4NDAsMHgwOCwweDA4LDB4MDIsMHg3YSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGNhMCwgMCwgezB4MjAsMHgwMSwweDBhLDB4MDAsMHg4NSwweDgwLDB4MmQsMHhmOCwweDBiLDB4ZGEsMHgwMiwweGQ2LDB4NDAsMHg4NSwweGEwLDB4MjEgfSwKKyAgMTYsIDB4OGNiMCwgMCwgezB4ZTAsMHgwYiwweDQ4LDB4MDYsMHg5MiwweDA0LDB4YjUsMHg4MCwweDJkLDB4MjEsMHgwOCwweDAwLDB4MDIsMHg0ZSwweDAwLDB4ODcgfSwKKyAgMTYsIDB4OGNjMCwgMCwgezB4YTQsMHgyZCwweDYwLDB4MGIsMHg2OCwweDAyLDB4ZGUsMHhjMiwweGFkLDB4OTAsMHgyYiwweDYwLDB4MjgsMHg1OCwweDgyLDB4ZGMgfSwKKyAgMTYsIDB4OGNkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHg0YywweDQwLDB4YzMsMHgxMCwweDJjLDB4NmMgfSwKKyAgMTYsIDB4OGNlMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4ODYsMHhhMiwweGY5LDB4YjAsMHhiMCwweGUwLDB4MGYsMHgyOSwweDgzLDB4Y2UsMHg0NCwweGYzLDB4ODAgfSwKKyAgMTYsIDB4OGNmMCwgMCwgezB4M2MsMHhhYywweDBjLDB4MzAsMHgwMywweDBjLDB4MDAsMHhjMywweDAwLDB4M2MsMHhkNSwweDBmLDB4MjAsMHgwMywweGNlLDB4YzEgfSwKKyAgMTYsIDB4OGQwMCwgMCwgezB4ZTAsMHgxMCwweGI4LDB4NDAsMHgwYywweDAwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGQxMCwgMCwgezB4YzAsMHgxZCwweGJjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjYywweDBmLDB4MzIsMHgwMywweDY0LDB4MDgsMHhmOSwweDAwLDB4M2IgfSwKKyAgMTYsIDB4OGQyMCwgMCwgezB4OTAsMHgwZiwweGYwLDB4NDMsMHhlNCwweDQwLDB4ZmIsMHgzNCwweDNmLDB4ODEsMHgwNywweGQxLDB4MDMsMHhhZCwweDIwLDB4ZWIgfSwKKyAgMTYsIDB4OGQzMCwgMCwgezB4MjAsMHg3ZiwweGM0LDB4MGYsMHhlMSwweDAzLDB4ZmMsMHg1MCwweGNkLDB4MTAsMHgzNSwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4OGQ0MCwgMCwgezB4MDIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDA0LDB4ZmQsMHgwNCwweDNkLDB4NDAgfSwKKyAgMTYsIDB4OGQ1MCwgMCwgezB4MmQsMHgzMCwweDAyLDB4M2MsMHgwMCwweGM5LDB4MDEsMHgzZSwweGMwLDB4NGYsMHhiOCwweDQzLDB4ZWMsMHgxMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4OGQ2MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4YTAsMHgyMywweGVjLDB4ODAsMHhjYiwweDM2LDB4MzIsMHg4MCwweDRkLDB4YTgsMHgwMywweDJjLDB4MTAgfSwKKyAgMTYsIDB4OGQ3MCwgMCwgezB4Y2IsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHg2YSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGQ4MCwgMCwgezB4YzgsMHgxMSwweDkwLDB4MDgsMHhiNSwweDAwLDB4MmQsMHhjMCwweDA4LDB4NTAsMHgwMiwweGJjLDB4MDIsMHg4NSwweDA0LDB4MmQgfSwKKyAgMTYsIDB4OGQ5MCwgMCwgezB4YzAsMHg4ZSwweDYwLDB4MDYsMHhkOCwweDA0LDB4YjcsMHgwNCwweDIxLDB4NDAsMHgwYiwweDcwLDB4MDIsMHhmYywweDgwLDB4YWYgfSwKKyAgMTYsIDB4OGRhMCwgMCwgezB4MjgsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4MDYsMHg0MCwweDg3LDB4MDAsMHgyMSwweDUwLDB4MDgsMHg1MCwweDAyLDB4MzIgfSwKKyAgMTYsIDB4OGRiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDIwLDB4YjcsMHg4MCwweDJiLDB4NzAgfSwKKyAgMTYsIDB4OGRjMCwgMCwgezB4MDgsMHhmOCwweDA2LDB4MWUsMHgwMCwweDg3LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg3MCwweDMyLDB4ZGUsMHgwNCwweDM3LDB4ODQgfSwKKyAgMTYsIDB4OGRkMCwgMCwgezB4MjUsMHhlMCwweDBiLDB4NjgsMHgwNiwweGRlLDB4ODAsMHg4NywweDgwLDB4MjEsMHhhMSwweDFiLDB4NjgsMHgwMiwweDFlLDB4NDAgfSwKKyAgMTYsIDB4OGRlMCwgMCwgezB4OWYsMHg4MCwweDIwLDB4NjAsMHgwOCwweDU4LDB4MDIsMHgyMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGRmMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MjAsMHhiMywweDAwLDB4MmMsMHg4MCwweDg4LDB4YjQsMHgyMiwweDhkLDB4MDAsMHg4MywweDkwLDB4MmMgfSwKKyAgMTYsIDB4OGUwMCwgMCwgezB4YzAsMHgwYSwweDM4LDB4MDIsMHhjZSwweDA4LDB4YmIsMHgyMCwweDI0LDB4ZDAsMHgwYiwweGIzLDB4MDIsMHhjYywweDAwLDB4YTMgfSwKKyAgMTYsIDB4OGUxMCwgMCwgezB4MDAsMHg2MCwweGQyLDB4MGIsMHgyMCwweDJhLDB4MDQsMHgwOCwweDkzLDB4NTAsMHgyMCwweDQwLDB4MDgsMHgxNywweDBhLDB4MDIgfSwKKyAgMTYsIDB4OGUyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDAwLDB4YmEsMHhhMCwweDNmLDB4ODQgfSwKKyAgMTYsIDB4OGUzMCwgMCwgezB4MWMsMHhlMCwweDBiLDB4MzgsMHg0MCwweDhlLDB4MDYsMHgyZSwweDgwLDB4MGIsMHhlMywweDAzLDB4ZjgsMHg4MCwweGZlLDB4ZTQgfSwKKyAgMTYsIDB4OGU0MCwgMCwgezB4YjcsMHg5MCwweDBmLDB4ZWMsMHgwMiwweGU4LDB4MDAsMHg4YSwweDAwLDB4YTMsMHhhMCwweDA5LDB4ZTQsMHgwMywweDJhLDB4MDIgfSwKKyAgMTYsIDB4OGU1MCwgMCwgezB4ZGUsMHhjMCwweGYzLDB4ODAsMHgwYywweDZjLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGU2MCwgMCwgezB4NDgsMHgwMSwweGUwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwLDB4MmUgfSwKKyAgMTYsIDB4OGU3MCwgMCwgezB4MzAsMHgwYSwweDg0LDB4MDMsMHhlMCwweDA0LDB4ZjgsMHgwMCwweDNhLDB4MDIsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4OGU4MCwgMCwgezB4MDAsMHgzZSwweDA0LDB4MGQsMHg4MCwweDgzLDB4ZTAsMHg0MCwweGU4LDB4MjAsMHgzZSwweDAwLDB4MmYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OGU5MCwgMCwgezB4MTAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NjQgfSwKKyAgMTYsIDB4OGVhMCwgMCwgezB4NGUsMHg5MCwweDgzLDB4MjQsMHg4MCwweGM5LDB4MDAsMHgzMiwweGUwLDB4MGYsMHgxMCwweDAzLDB4MjUsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4OGViMCwgMCwgezB4MzIsMHg0NCwweDBmLDB4OTIsMHgyMywweDY0LDB4MDAsMHhjMSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgxMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4OGVjMCwgMCwgezB4YzksMHgwMCwweDIyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGVkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweDIwLDB4MmUsMHg0MCwweDQ4LDB4OTYsMHgyMiwweDI1LDB4MDAsMHhkOSwweGMwLDB4YTIgfSwKKyAgMTYsIDB4OGVlMCwgMCwgezB4NzAsMHgwYiwweDk4LDB4MDIsMHgyNCwweDAwLDB4YjksMHg0MCwweGEyLDB4NzAsMHg0YiwweDkwLDB4MDIsMHgyNCwweDAwLDB4ZDkgfSwKKyAgMTYsIDB4OGVmMCwgMCwgezB4MDAsMHhhMiwweDQwLDB4MmMsMHg5NCwweDIyLDB4ZTQsMHgwMiwweDg5LDB4MDAsMHhhMiwweDQwLDB4MjgsMHg5NCwweDEzLDB4MjAgfSwKKyAgMTYsIDB4OGYwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4OGYxMCwgMCwgezB4MGEsMHg5MCwweDAyLDB4MDQsMHgwMCwweDgxLDB4ODAsMHhhMiwweDQ0LDB4MGIsMHg5MSwweDAyLDB4MjUsMHgwMCwweDE5LDB4NDAgfSwKKyAgMTYsIDB4OGYyMCwgMCwgezB4NjIsMHg0MCwweDBiLDB4YjQsMHgwMiwweDQ0LDB4MDAsMHg4OSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTAsMHg4MiwweGM0LDB4MDEgfSwKKyAgMTYsIDB4OGYzMCwgMCwgezB4ODMsMHgwMiwweDI4LDB4NDAsMHg0OCwweDkwLDB4ODIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGY0MCwgMCwgezB4MDAsMHgwNCwweDA1LDB4ODAsMHhiMSwweDAwLDB4NmMsMHg1MSwweDA4LDB4MTQsMHgxYSwweDA1LDB4MDAsMHg5MywweDAwLDB4MjAgfSwKKyAgMTYsIDB4OGY1MCwgMCwgezB4NDAsMHg4YiwweDE0LDB4MDIsMHgwNSwweDAwLDB4YjEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4MDYsMHgwNCwweDgwLDB4OTEgfSwKKyAgMTYsIDB4OGY2MCwgMCwgezB4MjAsMHgyMCwweDQwLDB4MDksMHgxMCwweDAyLDB4YzQsMHhhOCwweDgxLDB4MDAsMHgyOCwweDRhLDB4MDgsMHg5MCwweDRhLDB4NDIgfSwKKyAgMTYsIDB4OGY3MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4OGY4MCwgMCwgezB4MGUsMHg4MCwweDAzLDB4MjgsMHgwMSwweGM4LDB4NTAsMHgzMiwweDk0LDB4OGIsMHhhMCwweDAzLDB4MjAsMHgwMCwweGIwLDB4NTAgfSwKKyAgMTYsIDB4OGY5MCwgMCwgezB4MzIsMHg4MCwweDBmLDB4ODAsMHgwNywweDYxLDB4NTEsMHhjOCwweDUwLDB4MjIsMHgwMCwweDBjLDB4MDAsMHgwMywweGUwLDB4ODQgfSwKKyAgMTYsIDB4OGZhMCwgMCwgezB4YzgsMHgwNCwweDNhLDB4MDgsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGZiMCwgMCwgezB4OTgsMHg5ZCwweGY0LDB4NDAsMHhiZCwweDQxLDB4M2YsMHg1MCwweDBmLDB4ZjQsMHgwMywweGY1LDB4MTAsMHhmZCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OGZjMCwgMCwgezB4NDAsMHgwZiwweGQ0LDB4MDMsMHhmNCwweDAwLDB4ZmYsMHgxMCwweDJmLDB4NDAsMHg0ZiwweGQ0LDB4NDAsMHhhNCwweDQ4LDB4ZjkgfSwKKyAgMTYsIDB4OGZkMCwgMCwgezB4MTIsMHgzZiwweDVhLDB4OGUsMHhkMiwweDgzLDB4ZjQsMHhhOCwweGY1LDB4MmMsMHgzNywweDRhLDB4MGYsMHhkMiwweDgzLDB4YTYgfSwKKyAgMTYsIDB4OGZlMCwgMCwgezB4MTIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDgwLDB4ZmQsMHgyOCwweDNmLDB4NGMgfSwKKyAgMTYsIDB4OGZmMCwgMCwgezB4MGYsMHg1MCwweDAzLDB4M2MsMHg0NCwweGNkLDB4NDAsMHgzZiwweGQwLDB4MGQsMHhkMCwweDAyLDB4MTQsMHgwMSwweGZkLDB4YTAgfSwKKyAgMTYsIDB4OTAwMCwgMCwgezB4MzEsMHg0MCwweDAzLDB4ZDAsMHgwMywweGU3LDB4ODksMHhmOSwweDkwLDB4N2UsMHg1MCwweDBjLDB4OTQsMHgwMywweGU2LDB4YzAgfSwKKyAgMTYsIDB4OTAxMCwgMCwgezB4YzksMHgxMCwweDMyLDB4NmQsMHgwZiwweDkxLDB4MDIsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTAyMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4ODAsMHhiOCwweDAxLDB4MmUsMHgwYywweDhiLDB4ODQsMHg4MiwweDIwLDB4NDIsMHg4OCwweGEwLDB4NmUgfSwKKyAgMTYsIDB4OTAzMCwgMCwgezB4MjAsMHgwOCwweDgwLDB4MDMsMHg2MCwweDAwLDB4OTgsMHhlOCwweDIyLDB4MDAsMHgwOSwweDgwLDB4MDIsMHhlMywweGMwLDB4ZTggfSwKKyAgMTYsIDB4OTA0MCwgMCwgezB4ZDAsMHgyZSwweDI4LDB4MDgsMHg4YSwweDIzLDB4ZTIsMHg4NCwweGQ4LDB4YTAsMHgyMiwweDNkLDB4MGIsMHhjOCwweDAyLDB4Y2UgfSwKKyAgMTYsIDB4OTA1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNSwweGIwLDB4YjEsMHgwMCwweDJjLDB4NDggfSwKKyAgMTYsIDB4OTA2MCwgMCwgezB4MGIsMHgxMywweDAyLDB4MDQsMHgwMiwweGIxLDB4MjAsMHgyZSwweDQwLDB4ODgsMHgxMCwweDIyLDB4YzQsMHgwMCwweGIxLDB4MTQgfSwKKyAgMTYsIDB4OTA3MCwgMCwgezB4MjQsMHg0MCwweDBiLDB4MTAsMHg1MiwweGM0LDB4MDAsMHhiMSwweDIxLDB4MmQsMHg0OCwweDBhLDB4NTIsMHgwMiwweGQ1LDB4MDAgfSwKKyAgMTYsIDB4OTA4MCwgMCwgezB4YmQsMHgwMCwweGFkLDB4NDAsMHgwYiwweDUyLDB4MDIsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTA5MCwgMCwgezB4MTgsMHg1NSwweGE1LDB4MDAsMHhiOSwweDgyLDB4MmUsMHg0OSwweDhiLDB4YjAsMHgxMiwweDI0LDB4MTAsMHg5OSwweDAyLDB4MmUgfSwKKyAgMTYsIDB4OTBhMCwgMCwgezB4NDAsMHgwOCwweGIyLDB4MDAsMHg2NSwweDAwLDB4OTksMHg4MCwweDI2LDB4NDQsMHgwOSwweDkxLDB4MDIsMHhlNCwweDA5LDB4YTkgfSwKKyAgMTYsIDB4OTBiMCwgMCwgezB4MDQsMHgyZSwweDQ2LDB4MGEsMHhkNCwweDAyLDB4YjQsMHgwMCwweGJkLDB4NDAsMHgyZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4OTBjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDQwLDB4ZjksMHg4MCwweDJlLDB4NjIgfSwKKyAgMTYsIDB4OTBkMCwgMCwgezB4MGYsMHg5YywweDQyLDB4MjQsMHgwMCwweDk5LDB4MDEsMHgyZSwweDY4LDB4MmMsMHg5MiwweDAyLDB4NjQsMHgwMCwweGI5LDB4NDAgfSwKKyAgMTYsIDB4OTBlMCwgMCwgezB4YjYsMHg2MCwweDBmLDB4OWEsMHgwMywweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg3MCwweDNlLDB4OTksMHgwNiwweGU0LDB4MDIgfSwKKyAgMTYsIDB4OTBmMCwgMCwgezB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDk4LDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTEwMCwgMCwgezB4NjgsMHgwMSwweGE2LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDFmLDB4MTIsMHhhYiwweGU0LDB4MDAsMHhlOSwweDkwLDB4M2UgfSwKKyAgMTYsIDB4OTExMCwgMCwgezB4NDksMHgwZSwweDk4LDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNhLDB4NDAsMHgwZCwweDk4LDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4OTEyMCwgMCwgezB4MDEsMHgzZSwweDYwLDB4MDUsMHg5MCwweDEzLDB4ZTQsMHgwMCwweDU5LDB4MjAsMHgzMiwweDQwLDB4OGYsMHg5MSwweDAzLDB4ZGEgfSwKKyAgMTYsIDB4OTEzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwOCwweDNlLDB4MDEgfSwKKyAgMTYsIDB4OTE0MCwgMCwgezB4MGYsMHg4NCwweDYzLDB4MDAsMHgyMiwweGU4LDB4MjAsMHgzZSwweDEzLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHhjMCwweGQ4LDB4NGMgfSwKKyAgMTYsIDB4OTE1MCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODQsMHg0MywweGUwLDB4MDAsMHhmOCwweDAwLDB4MjIsMHgxMCwweDBmLDB4ODQsMHgwMywweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTE2MCwgMCwgezB4YzgsMHgwMCwweGIyLDB4MDAsMHgwYywweGMwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTE3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4ZSwweDAwLDB4MmYsMHg4NiwweDRiLDB4ZTAsMHgwMiwweDM5LDB4MDgsMHg4ZSwweDIwLDB4MmQgfSwKKyAgMTYsIDB4OTE4MCwgMCwgezB4OTAsMHgwYiwweGVkLDB4OTIsMHhmOCwweDAyLDB4OGUsMHhlMCwweGEzLDB4OTgsMHgwOCwweGUwLDB4MDIsMHhlOCwweDA4LDB4YmEgfSwKKyAgMTYsIDB4OTE5MCwgMCwgezB4MDAsMHg2MiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDAyLDB4ODAsMHgwMiwweDgwLDB4NDgsMHhlMCwweDAzLDB4NGEgfSwKKyAgMTYsIDB4OTFhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDUsMHg0YywweDAwLDB4ODMsMHgxMCwweDJjLDB4ZjAgfSwKKyAgMTYsIDB4OTFiMCwgMCwgezB4MGEsMHgxNCwweDJhLDB4MGQsMHgxYSwweGIzLDB4MDEsMHgyNCwweGQwLDB4MGIsMHhiYywweDMyLDB4Y2MsMHgwOCwweDAzLDB4MDAgfSwKKyAgMTYsIDB4OTFjMCwgMCwgezB4MjAsMHhjOCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4MjIsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MTEgfSwKKyAgMTYsIDB4OTFkMCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzAsMHgyOCwweDIwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTFlMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDEsMHg4NSwweDAwLDB4MmQsMHgwMCwweDBiLDB4NzAsMHgwMiwweDE4LDB4MzIsMHg4NiwweDAwLDB4MmQgfSwKKyAgMTYsIDB4OTFmMCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MTYsMHhmZSwweDA0LDB4ODYsMHgwMCwweDI3LDB4YTAsMHg4YiwweDcwLDB4NDIsMHhkYywweDgwLDB4YjcgfSwKKyAgMTYsIDB4OTIwMCwgMCwgezB4ODAsMHgyMSwweDAxLDB4MDgsMHhmOCwweDBhLDB4MTgsMHgwMCwweDg2LDB4MDgsMHgyMCwweGEwLDB4MDgsMHhlOCwweDBhLDB4NjggfSwKKyAgMTYsIDB4OTIxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgzZSwweDAyLDB4YzYsMHg4MCwweDNkLDB4ZTAgfSwKKyAgMTYsIDB4OTIyMCwgMCwgezB4MGYsMHg0OCwweDAzLDB4MDYsMHgwNCwweGY1LDB4ODIsMHgzNSwweGUwLDB4MGYsMHg3OCwweDAzLDB4ZGEsMHgwMCwweGQzLDB4ODAgfSwKKyAgMTYsIDB4OTIzMCwgMCwgezB4MzEsMHg2MCwweDA3LDB4NzgsMHgwMywweGRlLDB4MjAsMHhmMywweGIwLDB4ODEsMHhlMCwweDRmLDB4NjgsMHgwNywweDBlLDB4MDIgfSwKKyAgMTYsIDB4OTI0MCwgMCwgezB4Y2YsMHg4MCwweDMxLDB4ZTAsMHgwYywweDc4LDB4MTMsMHgyYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTI1MCwgMCwgezB4MDgsMHgxZCwweGFkLDB4YTAsMHhmOSwweDAwLDB4M2YsMHgwMCwweDBmLDB4YjAsMHg1MywweGY4LDB4MTAsMHhhOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OTI2MCwgMCwgezB4MDAsMHgwZiwweDgwLDB4MDEsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNhLDB4YzAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4OTI3MCwgMCwgezB4NzQsMHgzYywweDAwLDB4MGYsMHgyMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHgzMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4OTI4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAyLDB4OGYsMHg4MCwweDM1LDB4ZTAgfSwKKyAgMTYsIDB4OTI5MCwgMCwgezB4OGQsMHhkOSwweDAzLDB4MmUsMHhjNCwweGY2LDB4ODAsMHgzMiwweGE0LDB4MGMsMHhiOCwweDAzLDB4ZGUsMHgwMCwweGNmLDB4OTAgfSwKKyAgMTYsIDB4OTJhMCwgMCwgezB4M2MsMHhlNCwweDBjLDB4YjgsMHgwMywweGZlLDB4NjUsMHhmZiwweDgwLDB4MGYsMHhlYywweDhmLDB4ZjgsMHgwMywweGZlLDB4MDAgfSwKKyAgMTYsIDB4OTJiMCwgMCwgezB4YzUsMHg4MCwweDMzLDB4ZTAsMHgwZiwweDY4LDB4MDMsMHgxMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTJjMCwgMCwgezB4YWEsMHgxMSwweDljLDB4ODAsMHg4NCwweGIwLDB4MjAsMHgyMCwweDI5LDB4NzMsMHgwYSwweDBlLDB4ODIsMHhhMiwweGEwLDB4YTIgfSwKKyAgMTYsIDB4OTJkMCwgMCwgezB4YTAsMHg0ZiwweDNiLDB4MDMsMHg4NywweDg0LDB4YjIsMHg4MCwweDJjLDB4YTAsMHgwYSwweDdkLDB4MDIsMHhkZSwweDgwLDB4ZjcgfSwKKyAgMTYsIDB4OTJlMCwgMCwgezB4MjAsMHgyNSwweDA2LDB4MDgsMHg3MCwweDAyLDB4YzgsMHg0MCwweDg0LDB4MDAsMHgzNSwweDgwLDB4MGIsMHg2MCwweDAzLDB4NmEgfSwKKyAgMTYsIDB4OTJmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDEwLDB4ODYsMHgzOCwweDI3LDB4YzAgfSwKKyAgMTYsIDB4OTMwMCwgMCwgezB4NDksMHg1NCwweDA2LDB4NTQsMHg0MCwweDFkLDB4MjAsMHgyMSwweGNhLDB4MDksMHg2MSwweDQwLDB4ZjgsMHg4MCwweGI3LDB4MjAgfSwKKyAgMTYsIDB4OTMxMCwgMCwgezB4MmYsMHgwMCwweDg5LDB4NzAsMHgxMiwweGRjLDB4ODEsMHhiNywweDA0LDB4MmQsMHhjOSwweDBhLDB4NjAsMHgwMiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4OTMyMCwgMCwgezB4OGQsMHgwMCwweDJkLDB4YzAsMHgwYiwweGY4LDB4MDIsMHgwNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTMzMCwgMCwgezB4NjAsMHgxNCwweGNkLDB4MjgsMHg4MCwweDAwLDB4MjQsMHgwMCwweDA5LDB4YjAsMHgyMiwweDRjLDB4MDIsMHhhMSwweDAxLDB4MjAgfSwKKyAgMTYsIDB4OTM0MCwgMCwgezB4MzAsMHgxYiwweDIzLDB4MDIsMHhhZiwweDIwLDB4YjMsMHgwOCwweDJjLDB4ODAsMHgxYiwweDMwLDB4MDAsMHhjYywweDA0LDB4YTMgfSwKKyAgMTYsIDB4OTM1MCwgMCwgezB4MDEsMHgyNiwweDMwLDB4MDgsMHhhYywweDIyLDB4ZTgsMHgwMiwweDgwLDB4MDgsMHgyZSwweDgwLDB4NGIsMHhiNCwweDAyLDB4NTggfSwKKyAgMTYsIDB4OTM2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDEwLDB4OGIsMHg4MCwweDM2LDB4ZjAgfSwKKyAgMTYsIDB4OTM3MCwgMCwgezB4MmQsMHhiYywweDBiLDB4NmMsMHgwMSwweGRhLDB4MDQsMHgyMiwweDQwLDB4N2QsMHg5NCwweDIyLDB4ZTQsMHgwMCwweGFiLDB4NDQgfSwKKyAgMTYsIDB4OTM4MCwgMCwgezB4MmUsMHhjMCwweDA5LDB4YjgsMHgwMiwweGZjLDB4MDAsMHhiZiwweDAwLDB4M2UsMHhmMCwweGNhLDB4OTIsMHgwMiwweGU0LDB4MDIgfSwKKyAgMTYsIDB4OTM5MCwgMCwgezB4Y2IsMHgwMCwweDZlLDB4NDAsMHgwZiwweDg0LDB4MDEsMHgyZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTNhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2EsMHhlMCwweDJlLDB4YmMsMHgwMywweDk4LDB4MDgsMHhlYSwweDQwLDB4MzYgfSwKKyAgMTYsIDB4OTNiMCwgMCwgezB4NDMsMHg4YywweDkwLDB4MDMsMHhhNCwweDQ0LDB4MmEsMHg0MCwweDNlLDB4MTAsMHgwZSwweGI1LDB4ODMsMHhlYywweDE0LDB4ZmIgfSwKKyAgMTYsIDB4OTNjMCwgMCwgezB4MDAsMHgyNiwweDAwLDB4MGUsMHg5MiwweDAzLDB4ZTAsMHg0MCwweGZhLDB4MDAsMHgxNiwweDAwLDB4MGYsMHg4MCwweDEzLDB4ZTAgfSwKKyAgMTYsIDB4OTNkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlYywweDAyLDB4ZmEsMHg4MCwweDNmLDB4ZTIgfSwKKyAgMTYsIDB4OTNlMCwgMCwgezB4MGYsMHhiMCwweDBiLDB4MjQsMHgwMCwweGVmLDB4OTIsMHhiYiwweGUwLDB4MWMsMHhkMCwweDAzLDB4NzQsMHgwMCwweGNmLDB4MDUgfSwKKyAgMTYsIDB4OTNmMCwgMCwgezB4M2IsMHg0MCwweDBmLDB4YzgsMHgwMywweDVjLDB4MDAsMHhjZiwweDAwLDB4MzIsMHhjMiwweDRkLDB4YzEsMHgyMywweDM0LDB4NDAgfSwKKyAgMTYsIDB4OTQwMCwgMCwgezB4Y2YsMHgwMCwweDE3LDB4NDQsMHgwYywweGQxLDB4ODMsMHgwMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTQxMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDg0LDB4MmUsMHg1NCwweDBiLDB4YmMsMHgwYSwweDI5LDB4ODAsMHg4YiwweDgwLDB4MzIgfSwKKyAgMTYsIDB4OTQyMCwgMCwgezB4MDAsMHgwOCwweDljLDB4MDMsMHhhNywweDAwLDB4YWIsMHg4NCwweDJlLDB4N2MsMHgwYiwweDgwLDB4MDIsMHgyYywweDEwLDB4ZGIgfSwKKyAgMTYsIDB4OTQzMCwgMCwgezB4MDEsMHgzNiwweDAwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDgyLDB4MDAsMHgyMiwweDAwLDB4MDgsMHg5MCwweDAyLDB4MjQgfSwKKyAgMTYsIDB4OTQ0MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwYywweDAwLDB4ODksMHgxMCwweDY2LDB4OTAgfSwKKyAgMTYsIDB4OTQ1MCwgMCwgezB4MGIsMHhiOCwweDAyLDB4NmUsMHgxMiwweGEzLDB4NDEsMHgyMCwweDA0LDB4MGEsMHg5OCwweDIyLDB4ZTIsMHgwMCwweDg5LDB4MTkgfSwKKyAgMTYsIDB4OTQ2MCwgMCwgezB4MmUsMHhjMCwweDRiLDB4MzEsMHgyMiwweDZjLDB4MDgsMHg4MywweDAwLDB4MjIsMHhjMCwweDA5LDB4OTAsMHgwMiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4OTQ3MCwgMCwgezB4ODksMHgwMCwweDJhLDB4NDAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTQ4MCwgMCwgezB4MDgsMHgxMCwweDBjLDB4MDAsMHg4MCwweDIwLDB4MmMsMHgwZSwweDFiLDB4MzAsMHgwMiwweDA0LDB4NDEsMHg4MCwweDIwLDB4MjAgfSwKKyAgMTYsIDB4OTQ5MCwgMCwgezB4MTIsMHgxOCwweDE2LDB4NDIsMHgwMCwweDUwLDB4YTAsMHg0MCwweDJjLDB4ODgsMHgxYiwweDMwLDB4MDIsMHgwYywweDgxLDB4OTMgfSwKKyAgMTYsIDB4OTRhMCwgMCwgezB4MDAsMHgyNCwweDAwLDB4MDgsMHgxMCwweDJhLDB4MDAsMHgwYSwweDg4LDB4MDAsMHgyOCwweDAwLDB4MjgsMHgwMCwweDBhLDB4MDIgfSwKKyAgMTYsIDB4OTRiMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHg3YywweDExLDB4ZTgsMHgwMCwweDI2LDB4OTggfSwKKyAgMTYsIDB4OTRjMCwgMCwgezB4MGYsMHhiMCwweDEzLDB4MjEsMHgwYywweGViLDB4NjAsMHgzYSwweGQ4LDB4MjgsMHg4NCwweGEyLDB4ZTEsMHg4MCwweGM4LDB4MjAgfSwKKyAgMTYsIDB4OTRkMCwgMCwgezB4M2UsMHg1ZSwweDFmLDB4ODIsMHgwMywweDdjLDB4MDAsMHhjZiwweDAwLDB4MzIsMHhjMCwweDRkLDB4ODAsMHgwNywweDI1LDB4MDAgfSwKKyAgMTYsIDB4OTRlMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTRmMCwgMCwgezB4YTEsMHgxMSwweGZjLDB4MDAsMHhmOCwweDEzLDB4MWUsMHgwMCwweDBiLDB4ZjAsMHgwMSwweGYwLDB4ZDAsMHhmOSwweDE5LDB4MWYgfSwKKyAgMTYsIDB4OTUwMCwgMCwgezB4MDgsMHg0ZiwweGMwLDB4MTMsMHhhMSwweDAwLDB4ZjgsMHg2MiwweDNmLDB4YzAsMHgwYiwweGM0LDB4MDcsMHhlZCwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4OTUxMCwgMCwgezB4MDAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDIzLDB4ZjAsMHhhMCwweGZjLDB4MDAsMHgzMywweDAwLDB4MGYsMHhkMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4OTUyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4ZmYsMHgwYywweDNmLDB4MjAgfSwKKyAgMTYsIDB4OTUzMCwgMCwgezB4MGMsMHhjOSwweDAzLDB4MzIsMHgwMCwweGNmLDB4MzgsMHgzZiwweGQwLDB4MGYsMHg0OCwweDAzLDB4ZmMsMHhhMCwweGNlLDB4MjIgfSwKKyAgMTYsIDB4OTU0MCwgMCwgezB4MzMsMHgwMCwweDBmLDB4YzEsMHgwMywweDNjLDB4MDAsMHhmZiwweDAwLDB4M2QsMHhjNCwweDRjLDB4YzAsMHgyMywweDhjLDB4ZTQgfSwKKyAgMTYsIDB4OTU1MCwgMCwgezB4ZmYsMHgxMCwweDM3LDB4MjAsMHgwOCwweGYxLDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTU2MCwgMCwgezB4ODAsMHgxMCwweGZlLDB4MDAsMHhiZiwweDgwLDB4MmUsMHg3NCwweDA1LDB4MjIsMHgwMiwweGEyLDB4MTAsMHhkZiwweDYxLDB4MmYgfSwKKyAgMTYsIDB4OTU3MCwgMCwgezB4ZDAsMHg4YiwweDkwLDB4MDIsMHgzZCwweGE0LDB4YWEsMHg5MCwweDIyLDB4ZjQsMHgwYiwweDA3LDB4MTIsMHgxZCwweDIwLDB4YmIgfSwKKyAgMTYsIDB4OTU4MCwgMCwgezB4YzAsMHgyZiwweGQ4LDB4ODgsMHg5NywweDgyLDB4ZmQsMHg4MCwweGVmLDB4NzIsMHgyMiwweDA4LDB4MjgsMHhmNiwweDIzLDB4ZTAgfSwKKyAgMTYsIDB4OTU5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDQwLDB4YjMsMHgwMCwweDJjLDB4MDAgfSwKKyAgMTYsIDB4OTVhMCwgMCwgezB4MDgsMHg4MiwweDAyLDB4MjIsMHgwMCwweDgzLDB4MDEsMHgwOCwweGNjLDB4OGIsMHgyMCwweDgyLDB4Y2MsMHgwMCwweDkwLDB4MDAgfSwKKyAgMTYsIDB4OTViMCwgMCwgezB4MjAsMHgwMCwweDRiLDB4MTIsMHgwMiwweDBkLDB4ODAsMHhiMywweDQwLDB4MmMsMHhkOCwweDA4LDB4MjAsMHg0MiwweDhjLDB4ODAgfSwKKyAgMTYsIDB4OTVjMCwgMCwgezB4YjMsMHgyMCwweDI2LDB4MDIsMHgxOCwweDMzLDB4MjYsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTVkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDksMHhiYiwweDAwLDB4MmUsMHg2MCwweDA4LDB4ODAsMHgwMiwweGEyLDB4MDAsMHg5YiwweDAwLDB4MmUgfSwKKyAgMTYsIDB4OTVlMCwgMCwgezB4YzAsMHgwYiwweGFjLDB4MDIsMHgyYywweDAwLDB4YmEsMHgwNiwweDIyLDB4YzIsMHgwYiwweDk0LDB4MDIsMHhhYywweDEwLDB4YmIgfSwKKyAgMTYsIDB4OTVmMCwgMCwgezB4MDAsMHgyZSwweGMxLDB4MDgsMHhhOCwweDAyLDB4ZWMsMHgwMCwweGFiLDB4MDAsMHgyMiwweDAwLDB4MDgsMHhiMCwweDA2LDB4ZjAgfSwKKyAgMTYsIDB4OTYwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MTUsMHhlYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4NjAgfSwKKyAgMTYsIDB4OTYxMCwgMCwgezB4MjgsMHg4MiwweDEzLDB4MGUsMHgwOCwweGNiLDB4MDAsMHgzYSwweGMwLDB4MGYsMHg4YywweDAzLDB4ZWMsMHgxMSwweGRiLDB4MjAgfSwKKyAgMTYsIDB4OTYyMCwgMCwgezB4YjIsMHg5MCwweDRiLDB4YTgsMHgwYiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmMsMHhjMCwweDBjLDB4ODgsMHgxMywweGFjLDB4MDAgfSwKKyAgMTYsIDB4OTYzMCwgMCwgezB4ZjMsMHgwMCwweDM2LDB4MDYsMHg0OCwweGIwLDB4MTIsMHhjNCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTY0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmYiwweDA4LDB4M2QsMHg0MCwweDhmLDB4ZWEsMHgwMSwweGY0LDB4MDAsMHhmZiwweDAxLDB4MmYgfSwKKyAgMTYsIDB4OTY1MCwgMCwgezB4YzAsMHgwZiwweGQwLDB4MjIsMHhmYywweDA0LDB4YWYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGU5LDB4MDMsMHg3YywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4OTY2MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHg5MCwweDQzLDB4ZmMsMHgyMCwweGVmLDB4MDIsMHgzZiwweDAwLDB4OGYsMHhmMCwweDAzLDB4YjggfSwKKyAgMTYsIDB4OTY3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MTAsMHhhYywweDA4LDB4ZWIsMHgwMCwweDEyLDB4NDAgfSwKKyAgMTYsIDB4OTY4MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjgsMHgyMCwweGFiLDB4MDAsMHgzYSwweGMwLDB4OGYsMHg4NSwweDgzLDB4YWMsMHgxMCwweGYzLDB4NTAgfSwKKyAgMTYsIDB4OTY5MCwgMCwgezB4MzIsMHg5MCwweDRjLDB4MzQsMHgxMywweDZjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBjLDB4OTgsMHgwMywweDJjLDB4NDAgfSwKKyAgMTYsIDB4OTZhMCwgMCwgezB4ZWIsMHg4MCwweDMyLDB4MTIsMHgwZCwweGIwLDB4MGIsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTZiMCwgMCwgezB4ODgsMHgwMSwweDNjLDB4MTAsMHgwZiwweDA1LDB4YTIsMHg1MCwweDBjLDB4MTAsMHgwMiwweDIyLDB4MTAsMHg4ZiwweDAwLDB4MjMgfSwKKyAgMTYsIDB4OTZjMCwgMCwgezB4YzAsMHgwYiwweDg4LDB4MTIsMHgzYywweDAwLDB4OWIsMHg4MiwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgzYywweDAwLDB4OGYgfSwKKyAgMTYsIDB4OTZkMCwgMCwgezB4YTAsMHgyZiwweGMwLDB4MDgsMHhiMCwweDAyLDB4M2MsMHgwOCwweDhmLDB4MDIsMHgyMCwweDAwLDB4MDgsMHhmMCwweDAzLDB4MjYgfSwKKyAgMTYsIDB4OTZlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0ZCwweDIwLDB4OTMsMHgwMCwweDIwLDB4YjIgfSwKKyAgMTYsIDB4OTZmMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MDEsMHgwMCwweGEzLDB4MDAsMHg2OCwweGMwLDB4MGIsMHg4NCwweDAyLDB4YWMsMHgwMCwweGIzLDB4ODAgfSwKKyAgMTYsIDB4OTcwMCwgMCwgezB4MjAsMHg0MCwweDBhLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhhMywweDA0LDB4MmMsMHhjMCwweDA4LDB4MDAsMHgwMiwweDBkLDB4MDAgfSwKKyAgMTYsIDB4OTcxMCwgMCwgezB4YTMsMHgwMCwweDIwLDB4MjQsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTcyMCwgMCwgezB4NzAsMHgwMSwweDFjLDB4MjAsMHg5NywweDgwLDB4MjMsMHg2MCwweDA4LDB4NzgsMHgxMiwweDNhLDB4MDAsMHg4MywweDkxLDB4MjkgfSwKKyAgMTYsIDB4OTczMCwgMCwgezB4ZTQsMHgwYiwweDU5LDB4MDIsMHgxZSwweDAwLDB4OTcsMHg5MCwweDIwLDB4ZmMsMHgwYSwweDc4LDB4MDIsMHgxZSwweDAwLDB4ODcgfSwKKyAgMTYsIDB4OTc0MCwgMCwgezB4OTAsMHgyZCwweGUwLDB4MTksMHg1OSwweDAyLDB4MWUsMHg4MCwweDgzLDB4ODAsMHg2MSwweGEwLDB4MDgsMHg3OCwweDAyLDB4MTggfSwKKyAgMTYsIDB4OTc1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQwLDB4ZDMsMHgzMiwweDMwLDB4MDYgfSwKKyAgMTYsIDB4OTc2MCwgMCwgezB4MGYsMHgzMCwweDAzLDB4MDQsMHg2NCwweGUzLDB4MDEsMHgzOCwweGM0LDB4MWYsMHgzMCwweDA3LDB4OGMsMHgxOCwweGYxLDB4MDAgfSwKKyAgMTYsIDB4OTc3MCwgMCwgezB4MzAsMHg0YywweDBlLDB4MzAsMHgwMywweDRjLDB4MDAsMHhlMywweDAwLDB4MmMsMHhjMCwweDBjLDB4MjAsMHgwMywweDBlLDB4MDAgfSwKKyAgMTYsIDB4OTc4MCwgMCwgezB4ZTMsMHgwMCwweDMyLDB4MDgsMHgwYywweGIxLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTc5MCwgMCwgezB4NDAsMHgxZCwweDljLDB4ODAsMHhlZiwweDEwLDB4M2QsMHg0NCwweDRmLDB4ZjEsMHgwNywweGNjLDB4MDAsMHhmZiwweDA4LDB4MzYgfSwKKyAgMTYsIDB4OTdhMCwgMCwgezB4YzYsMHhjZiwweGIwLDB4MDMsMHhmYywweDAwLDB4OTcsMHgwMCwweGJlLDB4Y2MsMHgwZCwweGIxLDB4MDMsMHhmZCwweDA0LDB4ZmYgfSwKKyAgMTYsIDB4OTdiMCwgMCwgezB4MGMsMHgzZiwweGQyLDB4OWUsMHhlMCwweDRiLDB4ZmQsMHgyMCwweGZmLDB4MDIsMHgzZiwweDgwLDB4MGUsMHhmMCwweDEzLDB4ZDAgfSwKKyAgMTYsIDB4OTdjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhlYywweGMwLDB4Y2IsMHgyOCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4OTdkMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDEsMHgzMiwweGU5LDB4MGMsMHgyOCwweDAzLDB4MmMsMHgwMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4OTdlMCwgMCwgezB4MzIsMHhjMCwweDBjLDB4YjQsMHg4MywweDJjLDB4MDEsMHhlZiwweDAwLDB4YjIsMHhjOCwweDBjLDB4MjAsMHgwMywweDZkLDB4MDAgfSwKKyAgMTYsIDB4OTdmMCwgMCwgezB4Y2IsMHgxMCwweDNlLDB4MDAsMHgwZiwweGIyLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTgwMCwgMCwgezB4YzgsMHg5MSwweDljLDB4YzQsMHg4NywweDYwLDB4MmQsMHhjMCwweDBiLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhiNywweDEyLDB4MjAgfSwKKyAgMTYsIDB4OTgxMCwgMCwgezB4Y2MsMHgwYSwweDcwLDB4MDIsMHgxYywweGMwLDB4YjMsMHgwMCwweGEwLDB4YzAsMHhjOCwweDcwLDB4MjIsMHgxYywweDgwLDB4YjcgfSwKKyAgMTYsIDB4OTgyMCwgMCwgezB4MjQsMHgyMSwweGM4LDB4NDgsMHg1MCwweDAyLDB4MGMsMHg4MCwweDg3LDB4MTAsMHgyZCwweDQwLDB4MGIsMHg3MiwweDgyLDB4ZjIgfSwKKyAgMTYsIDB4OTgzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg4ZSwweDAyLDB4ODcsMHg4MCwweDJkLDB4ZTAgfSwKKyAgMTYsIDB4OTg0MCwgMCwgezB4MGIsMHg3OCwweDEyLDB4ZGUsMHgwMCwweGI3LDB4YTAsMHgyMSwweGUwLDB4MDgsMHhmOCwweDhlLDB4MWUsMHg0MCwweGI3LDB4ODggfSwKKyAgMTYsIDB4OTg1MCwgMCwgezB4MjEsMHhlMCwweDA4LDB4MzgsMHgwMiwweDFlLDB4NDAsMHhiMywweGExLDB4MjAsMHhlOCwweDQ4LDB4ZjgsMHg4MiwweDVlLDB4MDIgfSwKKyAgMTYsIDB4OTg2MCwgMCwgezB4ODcsMHg4MCwweDJkLDB4MjIsMHgwYiwweDc5LDB4MDIsMHhlMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTg3MCwgMCwgezB4MDgsMHgwNCwweGNjLDB4MDQsMHg4MywweDAyLDB4MmMsMHhkNCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4YTAgfSwKKyAgMTYsIDB4OTg4MCwgMCwgezB4YzAsMHg4YSwweDM4LDB4MDYsMHgwYywweDAwLDB4YjMsMHg4MCwweDIwLDB4ZTEsMHg0OCwweDM5LDB4MTIsMHgyYywweDAwLDB4YjMgfSwKKyAgMTYsIDB4OTg5MCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDgyLDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyYywweDQ4LDB4MGIsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4OThhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4Y2EsMHgwMCwweDNmLDB4YTAgfSwKKyAgMTYsIDB4OThiMCwgMCwgezB4MGYsMHhlNCwweDAzLDB4ZDgsMHgwMCwweGZhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhlOCwweDAzLDB4MjgsMHgwMCwweGZhLDB4NDAgfSwKKyAgMTYsIDB4OThjMCwgMCwgezB4MzIsMHhhOCwweDJjLDB4YTAsMHgwOSwweDI4LDB4MDgsMHhmMiwweDAwLDB4MzIsMHg4MCwweDBjLDB4ZTQsMHgwMywweDY4LDB4MDAgfSwKKyAgMTYsIDB4OThkMCwgMCwgezB4Y2EsMHgwMCwweDNmLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OThlMCwgMCwgezB4NDgsMHgwMCwweGMwLDB4MDAsMHhmOCwweDAxLDB4M2UsMHgxMiwweDBiLDB4ODAsMHgwMywweGUwLDB4NDAsMHhmOCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OThmMCwgMCwgezB4MDAsMHg0ZiwweDg0LDB4MDMsMHhlMCwweDA0LDB4ZjAsMHgwOCwweDNlLDB4MDAsMHg0ZiwweDAwLDB4MDMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4OTkwMCwgMCwgezB4NDEsMHgzZSwweDAwLDB4MmYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OTkxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNiwweDAwLDB4YzksMHgxMiwweDNlLDB4NTAgfSwKKyAgMTYsIDB4OTkyMCwgMCwgezB4OGYsMHg5MCwweDgzLDB4ZTQsMHgyMCwweGMxLDB4MDAsMHgzYSwweDQxLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4OTkzMCwgMCwgezB4MzAsMHg2OCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwLDB4M2EsMHg0MCwweDBlLDB4OTgsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4OTk0MCwgMCwgezB4YzksMHg5MCwweDNlLDB4NjksMHgwYywweDEwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTk1MCwgMCwgezB4ODAsMHgwNCwweDY3LDB4NGEsMHg4OSwweDgwLDB4MmUsMHg1MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4ODAsMHhhOSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4OTk2MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMSwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDEwLDB4ODkgfSwKKyAgMTYsIDB4OTk3MCwgMCwgezB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MywweDAyLDB4MjQsMHgyMiwweDg5LDB4NDIsMHgyYywweDYwLDB4NDgsMHg5MCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4OTk4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHgyNCwweDAwLDB4OTksMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4OTk5MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSwKKyAgMTYsIDB4OTlhMCwgMCwgezB4MjMsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDI0LDB4MDAsMHg5OSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTAsMHgwNiwweDI0LDB4NDAgfSwKKyAgMTYsIDB4OTliMCwgMCwgezB4ODksMHg0MSwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTljMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4ODAsMHg5MSwweDIwLDB4MmMsMHg0OCwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHhhMSwweDIwLDB4MjAgfSwKKyAgMTYsIDB4OTlkMCwgMCwgezB4NDgsMHgwYiwweDEwLDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMCwweGExLDB4NDksMHgwOCwweDUyLDB4NGEsMHgwNCwweDgwLDB4ODEgfSwKKyAgMTYsIDB4OTllMCwgMCwgezB4MDAsMHgyMCwweDQ4LDB4NDgsMHgxMiwweDBhLDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyYywweDQwLDB4MjgsMHgxMiwweDAyLDB4MDIgfSwKKyAgMTYsIDB4OTlmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDA4LDB4ZDgsMHgwNCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4OWEwMCwgMCwgezB4MGYsMHg4NSwweDAzLDB4ZTAsMHgwMCwweGMwLDB4NTAsMHgzYSwweDE0LDB4MGYsMHhhNSwweDAzLDB4ZTEsMHg0MCwweGY4LDB4MDIgfSwKKyAgMTYsIDB4OWExMCwgMCwgezB4MzIsMHg4MCwweDJjLDB4YzUsMHgwMywweDIxLDB4NDAsMHhkYSwweDAwLDB4M2EsMHgxNCwweDBlLDB4ODUsMHg0MywweDIxLDB4NDAgfSwKKyAgMTYsIDB4OWEyMCwgMCwgezB4YzgsMHg1MiwweDNlLDB4MTQsMHgwYywweDg1LDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWEzMCwgMCwgezB4ODgsMHgxZCwweGU0LDB4NDQsMHhlOSwweDEwLDB4M2YsMHg0NCwweDRmLDB4ZDAsMHgwMiwweGZjLDB4MDAsMHhmOSwweDEyLDB4M2UgfSwKKyAgMTYsIDB4OWE0MCwgMCwgezB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDNlLDB4NDQsMHg0ZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZTkgfSwKKyAgMTYsIDB4OWE1MCwgMCwgezB4NDAsMHgzZSwweDQ0LDB4MGYsMHhkMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTIsMHgzZiwweDQwLDB4MGYsMHg5MSwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4OWE2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhmNiwweGEwLDB4ZmQsMHg4MCwweGIzLDB4NDAgfSwKKyAgMTYsIDB4OWE3MCwgMCwgezB4MGMsMHgxMCwweDAzLDB4MTQsMHgwMCwweGZkLDB4YTAsMHgzMiwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZTQsMHgwMCwweGY1LDB4ODYgfSwKKyAgMTYsIDB4OWE4MCwgMCwgezB4MzMsMHg2MCwweDJjLDB4OWEsMHg4MywweDI0LDB4MDQsMHhmZCwweGE4LDB4MjIsMHg0MCwweDBkLDB4NTAsMHg0MywweGY0LDB4MDAgfSwKKyAgMTYsIDB4OWE5MCwgMCwgezB4ZmQsMHgwMCwweDMzLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWFhMCwgMCwgezB4NzgsMHgxMCwweGUxLDB4MDAsMHhiOCwweDAwLDB4MjIsMHgwMCwweDI4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDAwLDB4YTIgfSwKKyAgMTYsIDB4OWFiMCwgMCwgezB4MDAsMHgwYiwweDhhLDB4MTIsMHhlMCwweDAwLDB4YjgsMHgwNCwweDIyLDB4MTQsMHgwOCwweDg0LDB4MDIsMHgyMCwweDAwLDB4YjggfSwKKyAgMTYsIDB4OWFjMCwgMCwgezB4NDAsMHgyMCwweDAwLDB4ODgsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHhhMiwweDAwLDB4MGIsMHg4MCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4OWFkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHg0MiwweDIwLDB4NDAgfSwKKyAgMTYsIDB4OWFlMCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIxLDB4NDAsMHgyMCwweDQwLDB4MGIsMHgxMCwweDA2LDB4YzQsMHgwMCwweGIxLDB4NDAgfSwKKyAgMTYsIDB4OWFmMCwgMCwgezB4MjQsMHg0MCwweDA4LDB4MTAsMHgwMiwweDQ0LDB4MDQsMHhiMSwweDAwLDB4NjAsMHg0MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4MDAgfSwKKyAgMTYsIDB4OWIwMCwgMCwgezB4YjEsMHgwMCwweDIwLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgxMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWIxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDAyLDB4MjIsMHg2MCwweDA4LDB4OTQsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAxLDB4MjIgfSwKKyAgMTYsIDB4OWIyMCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MDYsMHhlNCwweDAwLDB4YjksMHgyMCwweDI2LDB4NDAsMHgwOCwweDk0LDB4MDIsMHg2NCwweDA4LDB4YjkgfSwKKyAgMTYsIDB4OWIzMCwgMCwgezB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MiwweDAyLDB4ZWMsMHgwOCwweGI5LDB4MDQsMHgyMiwweDQxLDB4MGIsMHgxMCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4OWI0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDEwLDB4ZjEsMHgwMCwweDMyLDB4NjAgfSwKKyAgMTYsIDB4OWI1MCwgMCwgezB4MGMsMHg5NCwweDBiLDB4MjUsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4OGYsMHg5NCwweGQzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4OWI2MCwgMCwgezB4MzYsMHg0MCwweDRjLDB4OTAsMHgwYiwweDY0LDB4MDAsMHhmMSwweDAwLDB4MzIsMHg0MCwweDBkLDB4OTIsMHgxMiwweGU0LDB4MDAgfSwKKyAgMTYsIDB4OWI3MCwgMCwgezB4ZjksMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWI4MCwgMCwgezB4NjgsMHg0MSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDhmLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OWI5MCwgMCwgezB4NDAsMHgwZiwweDljLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweGJhLDB4NDAsMHgyZiwweDkwLDB4MjMsMHhhNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4OWJhMCwgMCwgezB4MDgsMHhiZSwweDQwLDB4Y2YsMHg5MCwweDAzLDB4ZTQsMHgxMCwweGYxLDB4MDEsMHgzZSwweDQxLDB4MGYsMHg5MCwweDAzLDB4ZGEgfSwKKyAgMTYsIDB4OWJiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweGM4LDB4ZjgsMHgwMCwweDNlLDB4MDMgfSwKKyAgMTYsIDB4OWJjMCwgMCwgezB4MGMsMHg4NCwweDAzLDB4YTEsMHgxMCwweGU4LDB4MDAsMHgzMiwweDAwLDB4OGMsMHg4NSwweDgzLDB4ZTAsMHgwMCwweGMwLDB4MDAgfSwKKyAgMTYsIDB4OWJkMCwgMCwgezB4MzgsMHgwYywweDJjLDB4MDAsMHgwMywweDYwLDB4MDAsMHhjOCwweDAwLDB4M2MsMHgwMCwweDBkLDB4ODAsMHgwMiwweDIwLDB4MTAgfSwKKyAgMTYsIDB4OWJlMCwgMCwgezB4YzgsMHgyMCwweGIyLDB4MDIsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWJmMCwgMCwgezB4MjgsMHgwNSwweDM5LDB4MTAsMHhiZSwweDA0LDB4NmYsMHhhMCwweDA4LDB4YTAsMHgwMiwweDNhLDB4MDAsMHg4MiwweDAwLDB4YTIgfSwKKyAgMTYsIDB4OWMwMCwgMCwgezB4ODAsMHg4ZCwweGVjLDB4MDMsMHhhOCwweDAwLDB4OGEsMHgwMCwweDIzLDB4ODAsMHgwOCwweGEwLDB4MjIsMHgyOCwweDAwLDB4OGUgfSwKKyAgMTYsIDB4OWMxMCwgMCwgezB4Y2MsMHgyZiwweDgwLDB4MDgsMHhlOCwweGMyLDB4YjgsMHgwMCwweDhlLDB4NjAsMHgyMywweDkwLDB4MGIsMHhhMCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4OWMyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZSwweDA4LDB4YjAsMHg3MiwweDJjLDB4ZDAgfSwKKyAgMTYsIDB4OWMzMCwgMCwgezB4MjgsMHhiMCwweDA2LDB4OGMsMHgwMSwweGExLDB4MDIsMHgyMCwweGMwLDB4MDgsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4OWM0MCwgMCwgezB4MjAsMHhjMCwweDI5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MSwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzIsMHgwMiwweDBjLDB4NDAgfSwKKyAgMTYsIDB4OWM1MCwgMCwgezB4ODMsMHgwMCwweDIwLDB4ZjQsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWM2MCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDAsMHhiNCwweDAwLDB4MmQsMHhkMCwweDQ4LDB4ZjIsMHgwMiwweDFlLDB4MjEsMHg4NSwweDIwLDB4MjAgfSwKKyAgMTYsIDB4OWM3MCwgMCwgezB4ZTgsMHgwOSwweDcyLDB4MDIsMHg4ZSwweDgwLDB4OGYsMHgwMSwweDIwLDB4YzAsMHgwOSwweDcyLDB4MDIsMHgwZSwweDgwLDB4ODcgfSwKKyAgMTYsIDB4OWM4MCwgMCwgezB4MDAsMHgyZCwweGNjLDB4MTgsMHg1OCwweDAyLDB4OGUsMHgwMCwweDg1LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg3MiwweDAyLDB4ZTggfSwKKyAgMTYsIDB4OWM5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YjQsMHg4MCwweDJkLDB4ZTAgfSwKKyAgMTYsIDB4OWNhMCwgMCwgezB4MGMsMHg3OCwweDgzLDB4OWEsMHgwMCwweGVkLDB4ZDAsMHgzMSwweGY0LDB4MGMsMHg2YSwweDAzLDB4ZGUsMHg4MiwweGM3LDB4ODAgfSwKKyAgMTYsIDB4OWNiMCwgMCwgezB4MzksMHhlMCwweDBkLDB4ZjgsMHg4MywweDVlLDB4YzIsMHhjNSwweDgwLDB4M2QsMHhlOCwweDBjLDB4NjgsMHgwMywweDEyLDB4MDAgfSwKKyAgMTYsIDB4OWNjMCwgMCwgezB4Y2YsMHg4MCwweDMxLDB4ZTAsMHgwZiwweDdlLDB4ODMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWNkMCwgMCwgezB4MDgsMHgwZCwweGFjLDB4MDgsMHhmOCwweDAwLDB4M2MsMHhjMCwweDBmLDB4YjMsMHgwMywweGVjLDB4MDAsMHhmOSwweDAyLDB4M2UgfSwKKyAgMTYsIDB4OWNlMCwgMCwgezB4YzgsMHgwZiwweGIwLDB4MDMsMHhlZCwweDQwLDB4ZmIsMHgwMCwweGJlLDB4ODAsMHgwZSwweGIzLDB4MDMsMHhlZCwweGMwLDB4ZmIgfSwKKyAgMTYsIDB4OWNmMCwgMCwgezB4MDAsMHgzZSwweGQyLDB4MmUsMHg4MCwweDAzLDB4ZWMsMHgwMiwweGY5LDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4OWQwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4ZjAsMHg5MSwweDMzLDB4ZTAgfSwKKyAgMTYsIDB4OWQxMCwgMCwgezB4OGYsMHhmOCwweDAzLDB4ZmUsMHgwMCwweGZkLDB4ODAsMHgzZiwweGUwLDB4MGMsMHg3OCwweDgzLDB4M2YsMHgwMCwweGNmLDB4ODAgfSwKKyAgMTYsIDB4OWQyMCwgMCwgezB4M2YsMHhhMCwweDBjLDB4ZjgsMHgwMywweDNlLDB4MDAsMHhjZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHgxMywweGZlLDB4MTAgfSwKKyAgMTYsIDB4OWQzMCwgMCwgezB4ZmYsMHg4MCwweDNmLDB4MjAsMHgwZiwweGY5LDB4NDMsMHhkMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWQ0MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhiNCwweGMxLDB4MzEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGQ0LDB4MTAsMHhlNSwweDIwLDB4MmYgfSwKKyAgMTYsIDB4OWQ1MCwgMCwgezB4YzgsMHgwZiwweDQwLDB4MDMsMHg1YywweDAwLDB4ODcsMHgwMCwweDJkLDB4ODAsMHgwOCwweDcwLDB4MDIsMHgxYywweDQwLDB4ODcgfSwKKyAgMTYsIDB4OWQ2MCwgMCwgezB4MTAsMHgyZCwweGMwLDB4MGIsMHg3NiwweDAyLDB4ZGMsMHg4MCwweGI3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZWEgfSwKKyAgMTYsIDB4OWQ3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg5YywweDAwLDB4YjYsMHgyMiwweDIxLDB4ZDAgfSwKKyAgMTYsIDB4OWQ4MCwgMCwgezB4MGIsMHg3MCwweDgyLDB4ZDgsMHg0MCwweGI1LDB4MDIsMHgyZCwweGMwLDB4ODgsMHg2NSwweDAyLDB4MGMsMHgwMCwweDg3LDB4MTggfSwKKyAgMTYsIDB4OWQ5MCwgMCwgezB4MmMsMHgwNCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDIsMHg4NSwweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHg0NiwweDkwLDB4MTAgfSwKKyAgMTYsIDB4OWRhMCwgMCwgezB4YjYsMHgwMCwweDJkLDB4MDAsMHgwYiwweDcwLDB4MjIsMHhjNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWRiMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDgsMHhiMiwweDAwLDB4YTQsMHhjMCwweDBiLDB4MzAsMHg0MiwweGM2LDB4MTAsMHhhMSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4OWRjMCwgMCwgezB4YzAsMHgwYSwweDAwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4MDgsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMgfSwKKyAgMTYsIDB4OWRkMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MGIsMHgxOCwweDgyLDB4YzQsMHgwMCwweGIwLDB4MDAsMHgyYywweDQwLDB4MGIsMHgzMCwweDEyLDB4ZDggfSwKKyAgMTYsIDB4OWRlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MTUsMHhhYywweDAwLDB4MzgsMHgwMCwweDMyLDB4NTAgfSwKKyAgMTYsIDB4OWRmMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZTYsMHgyMCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MDgsMHhkMCwweDAyLDB4M2MsMHgwMiwweGNiLDB4ODAgfSwKKyAgMTYsIDB4OWUwMCwgMCwgezB4M2MsMHg1MCwweDJjLDB4ZjAsMHgwYSwweGJjLDB4MDAsMHhjOSwweDAwLDB4M2YsMHhjMCwweDBmLDB4YmUsMHgwMywweGFjLDB4MDAgfSwKKyAgMTYsIDB4OWUxMCwgMCwgezB4ZmEsMHgwMiwweDJlLDB4ZjcsMHg0ZiwweGYwLDB4MDMsMHhlZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWUyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmMSwweDAwLDB4M2EsMHhmMCwweDBmLDB4YjAsMHgwMywweGU5LDB4MDAsMHhmOSwweDAxLDB4M2UgfSwKKyAgMTYsIDB4OWUzMCwgMCwgezB4YzAsMHgwZiwweDkwLDB4MTMsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4NTUsMHgwZiwweGIwLDB4MDEsMHg2YywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4OWU0MCwgMCwgezB4MDIsMHgzZSwweGMwLDB4MGYsMHg5MCwweDczLDB4ZTAsMHgwMCwweGY4LDB4NDEsMHgzZSwweDAwLDB4MGYsMHgzMCwweDAxLDB4ZTAgfSwKKyAgMTYsIDB4OWU1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhmYywweDAwLDB4ZmMsMHgwMCwweDMzLDB4YzAgfSwKKyAgMTYsIDB4OWU2MCwgMCwgezB4MWYsMHhmMCwweDEzLDB4ZjAsMHgwOCwweGZkLDB4MDIsMHgzZiwweGMwLDB4OGQsMHhjMCwweDAzLDB4M2MsMHgwMCwweGNmLDB4YTAgfSwKKyAgMTYsIDB4OWU3MCwgMCwgezB4M2YsMHg4MCwweDBjLDB4NzAsMHgwMywweDNjLDB4MTAsMHhmYywweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMywweGIwLDB4MDAgfSwKKyAgMTYsIDB4OWU4MCwgMCwgezB4ZmUsMHgwMCwweDNmLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwNCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWU5MCwgMCwgezB4ODQsMHgwNCwweDZlLDB4MDAsMHhiOSwweGMyLDB4YTIsMHhmMCwweDBiLDB4YjAsMHg0MiwweGViLDB4MDAsMHhiOSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4OWVhMCwgMCwgezB4YzAsMHgwZiwweDE4LDB4MDMsMHg2YywweDAwLDB4ZDksMHg4MSwweDJlLDB4YjAsMHgwYSwweGIwLDB4NDIsMHgyYywweDAwLDB4YmEgfSwKKyAgMTYsIDB4OWViMCwgMCwgezB4YzYsMHgyZSwweGMwLDB4MGIsMHg4YywweDAyLDB4ZTMsMHgwMCwweGI4LDB4YzAsMHgzYywweGEwLDB4MGQsMHhiMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4OWVjMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyZiwweDAwLDB4YjgsMHg4MCwweDIyLDB4ZTIgfSwKKyAgMTYsIDB4OWVkMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4ZTYsMHgyMCwweGI5LDB4MDAsMHgyYywweGMwLDB4MDgsMHhiOCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAgfSwKKyAgMTYsIDB4OWVlMCwgMCwgezB4MmUsMHgzMCwweDQ4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiOSwweGMwLDB4MmUsMHhjMSwweDBiLDB4ODgsMHgwMiwweGVlLDB4MTAgfSwKKyAgMTYsIDB4OWVmMCwgMCwgezB4YjksMHhjMCwweDJlLDB4MjAsMHgxOSwweGIwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWYwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwNiwweGMwLDB4MDAsMHg5MSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4OWYxMCwgMCwgezB4YzAsMHg0OSwweDgwLDB4MDIsMHg0YywweDA0LDB4OTEsMHgwMCwweDJjLDB4MDAsMHg4YSwweDMwLDB4MGEsMHgwYywweDA0LDB4YjEgfSwKKyAgMTYsIDB4OWYyMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MWIsMHgwMCwweDEyLDB4NDksMHgxMCwweGIxLDB4MDAsMHgyZSwweDIwLDB4MDksMHgzMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4OWYzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YjgsMHgyMCwweDIyLDB4YzAgfSwKKyAgMTYsIDB4OWY0MCwgMCwgezB4OGIsMHhmMCwweDAzLDB4ZTAsMHgwOCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhhMCwweDAzLDB4M2MsMHgwMCwweGNiLDB4MDAgfSwKKyAgMTYsIDB4OWY1MCwgMCwgezB4M2UsMHgwMCwweDRjLDB4ZjAsMHgwYSwweDNjLDB4MDAsMHhiOSwweDAwLDB4MzcsMHhjMSwweDBmLDB4YTAsMHgwMywweGUwLDB4MDAgfSwKKyAgMTYsIDB4OWY2MCwgMCwgezB4ZmEsMHgwMCwweDNlLDB4MDAsMHgwZCwweGYwLDB4MGIsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWY3MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDEsMHhmYywweDQwLDB4M2YsMHg4MCwweDRmLDB4ZjAsMHgwMiwweGYwLDB4MDAsMHhmZCwweDAwLDB4M2YgfSwKKyAgMTYsIDB4OWY4MCwgMCwgezB4YzEsMHgwZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4MDAsMHg0ZiwweGYwLDB4NjMsMHhmYywweDAwLDB4ZmQgfSwKKyAgMTYsIDB4OWY5MCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHg4MCwweGZjLDB4MDAsMHg3YiwweDAwLDB4MGYsMHhmMCwweDQzLDB4ZTggfSwKKyAgMTYsIDB4OWZhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmOCwweDAwLDB4YzgsMHgxMCwweDMzLDB4MDQgfSwKKyAgMTYsIDB4OWZiMCwgMCwgezB4MGMsMHg0MCwweDAyLDB4MzQsMHgwMCwweGM4LDB4ODUsMHgxZiwweGMwLDB4MmQsMHhkOSwweDAzLDB4ZmMsMHhjMCwweGRiLDB4MjggfSwKKyAgMTYsIDB4OWZjMCwgMCwgezB4MzcsMHg2NCwweDBmLDB4ZGIsMHgwMywweDNlLDB4MDAsMHhmZiwweDI1LDB4M2YsMHhjOCwweDBlLDB4ZjIsMHgwMywweGZlLDB4MjAgfSwKKyAgMTYsIDB4OWZkMCwgMCwgezB4ZmYsMHhhNCwweDM3LDB4YzQsMHgwYywweGM4LDB4MDMsMHgzMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWZlMCwgMCwgezB4ODAsMHgxMCwweGU4LDB4MDAsMHg4OCwweDIwLDB4MjIsMHgwMCwweDA4LDB4ODgsMHgxMiwweDI2LDB4MDQsMHg4OSwweDgyLDB4MmUgfSwKKyAgMTYsIDB4OWZmMCwgMCwgezB4ZjQsMHg0OCwweGI4LDB4MDIsMHhmYywweGM0LDB4OTgsMHhjMiwweDIyLDB4N2MsMHg0YiwweDlkLDB4NDIsMHgyNiwweDA4LDB4YmYgfSwKKyAgMTYsIDB4YTAwMCwgMCwgezB4MTgsMHg3NywweGU0LDB4MDgsMHhmMSwweDgyLDB4ZWYsMHgwMCwweGJiLDB4ZDAsMHgyMiwweGQ4LDB4MDgsMHg5MCwweDgzLDB4NjAgfSwKKyAgMTYsIDB4YTAxMCwgMCwgezB4MDIsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4NDUsMHhjOCwweDA0LDB4YTAsMHgwMCwweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTAyMCwgMCwgezB4MGEsMHgwMCwweDAyLDB4MGMsMHgwMCwweDgyLDB4MDQsMHgyYywweGUwLDB4MDgsMHgxMCwweDAyLDB4Y2MsMHg4MCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4YTAzMCwgMCwgezB4MjQsMHgwMCwweDBiLDB4MTAsMHgwNiwweGM4LDB4MDEsMHhiMywweDIwLDB4MmMsMHhjMCwweDI5LDB4MzIsMHgwMiwweGM4LDB4MDggfSwKKyAgMTYsIDB4YTA0MCwgMCwgezB4YjEsMHgwMCwweDI0LDB4ZDAsMHgwOCwweDgyLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTA1MCwgMCwgezB4YzAsMHgxNSwweGE4LDB4MDAsMHhhOCwweDBjLDB4MjYsMHgwMCwweDBhLDB4ODAsMHgwMiwweDJjLDB4MTQsMHg4YSwweDAyLDB4NmUgfSwKKyAgMTYsIDB4YTA2MCwgMCwgezB4ZTAsMHgwOCwweGIwLDB4MDIsMHg0YywweDA4LDB4YTgsMHgwMCwweDI2LDB4MjAsMHgwYiwweDljLDB4MDIsMHhlNCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4YTA3MCwgMCwgezB4MDQsMHgyMiwweGMwLDB4MTksMHhiMCwweDAyLDB4ZTgsMHgwMSwweGJiLDB4MTEsMHgwMiwweGMwLDB4ODgsMHg5MCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4YTA4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlYywweDAyLDB4ZWEsMHg0MCwweGI2LDB4NjAgfSwKKyAgMTYsIDB4YTA5MCwgMCwgezB4MmUsMHg5OCwweDBiLDB4MjAsMHgwMiwweGM4LDB4MDIsMHgzZSwweGMwLDB4MGQsMHg5OCwweDAzLDB4ZWMsMHgwMiwweGRiLDB4ODggfSwKKyAgMTYsIDB4YTBhMCwgMCwgezB4YjYsMHgyMSwweDBmLDB4ODgsMHgwMywweGFjLDB4MDgsMHhmYiwweDAwLDB4MmMsMHhjMCwweDBlLDB4YjAsMHg0MywweGU1LDB4ODAgfSwKKyAgMTYsIDB4YTBiMCwgMCwgezB4ZjAsMHg2MCwweDM2LDB4YzAsMHgwYywweDAxLDB4NDMsMHg0OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTBjMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhkNiwweDAxLDB4M2IsMHg2NCwweDg1LDB4ZDksMHgwMywweGYwLDB4MGMsMHhmZiwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTBkMCwgMCwgezB4YzEsMHgwZiwweGZjLDB4MjEsMHhlYywweDAwLDB4ZDcsMHg5MCwweDNiLDB4NDAsMHgwZiwweDUwLDB4MDMsMHgzYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YTBlMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4OGUsMHhmMCwweDAzLDB4ZjQsMHg0MCwweGZkLDB4ODgsMHgzZiwweGMwLDB4MmYsMHhkMCwweDAyLDB4NzggfSwKKyAgMTYsIDB4YTBmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4YywweDAwLDB4ZGEsMHg0MCwweDNjLDB4NDAgfSwKKyAgMTYsIDB4YTEwMCwgMCwgezB4MGYsMHgxMCwweDAzLDB4NDgsMHgwMCwweGY5LDB4MjIsMHgzYywweGMyLDB4MGUsMHg5MCwweDgzLDB4ZWMsMHgwMiwweGRiLDB4MDQgfSwKKyAgMTYsIDB4YTExMCwgMCwgezB4M2EsMHgwOCwweDBmLDB4ODQsMHg4NywweGU4LDB4MDAsMHhjYiwweDAwLDB4M2UsMHhjNCwweDBlLDB4YjAsMHgwMywweGVkLDB4MDAgfSwKKyAgMTYsIDB4YTEyMCwgMCwgezB4ZTgsMHg0MiwweDNhLDB4YzAsMHgwZiwweDgwLDB4MGIsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTEzMCwgMCwgezB4ODgsMHgwNSwweDJjLDB4MDgsMHg4YSwweDAwLDB4MmUsMHg0MiwweDhiLDB4OTAsMHgwMiwweDI4LDB4MTgsMHhiYiwweDQ5LDB4MjIgfSwKKyAgMTYsIDB4YTE0MCwgMCwgezB4ZDAsMHgzOCwweGJjLDB4ODIsMHhmYywweDAwLDB4ZTgsMHgwMiwweDIyLDB4NjIsMHhjYiwweDljLDB4MDAsMHhlZiwweDYwLDB4ZGYgfSwKKyAgMTYsIDB4YTE1MCwgMCwgezB4MDAsMHgyZiwweGMwLDB4MGIsMHhmMCwweDAyLDB4ZWMsMHgwMCwweDA5LDB4NDAsMHgzNywweGMwLDB4MGIsMHg5MCwweDAyLDB4MzIgfSwKKyAgMTYsIDB4YTE2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OCwweDEwLDB4MTEsMHgwMCwweDJjLDB4YTAgfSwKKyAgMTYsIDB4YTE3MCwgMCwgezB4MGIsMHgyMCwweDAyLDB4NDQsMHgwMCwweDkwLDB4YzAsMHg2NCwweDM0LDB4MjgsMHgzNCwweDAyLDB4Y2MsMHgwMCwweDkzLDB4ODQgfSwKKyAgMTYsIDB4YTE4MCwgMCwgezB4MjgsMHg0MCwweDBiLDB4MDgsMHgwMCwweGNlLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMiwweDBhLDB4MzAsMHgwMiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4YTE5MCwgMCwgezB4YjIsMHg0MCwweDIyLDB4YzAsMHgwYiwweDIwLDB4MDIsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTFhMCwgMCwgezB4NzAsMHgwMSwweDFhLDB4NDAsMHg4NSwweDgwLDB4MmQsMHhhMCwweDBiLDB4NjgsMHgwNiwweDE2LDB4ODAsMHhiZCwweDkwLDB4MjUgfSwKKyAgMTYsIDB4YTFiMCwgMCwgezB4MjQsMHgxOCwweDdiLDB4NDIsMHhkZSwweDQwLDB4YTAsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDY4LDB4MDIsMHhkNiwweDAwLDB4OTcgfSwKKyAgMTYsIDB4YTFjMCwgMCwgezB4OTAsMHgyZCwweGUwLDB4MGIsMHg3OCwweDAyLDB4Y2UsMHg0MCwweDkyLDB4ODAsMHg2ZCwweGU0LDB4MGIsMHg3OCwweDAyLDB4MDggfSwKKyAgMTYsIDB4YTFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyOCwweDAwLDB4ZDEsMHg4MCwweDNjLDB4ODggfSwKKyAgMTYsIDB4YTFlMCwgMCwgezB4MGIsMHgyMiwweDAzLDB4NGUsMHg4MCwweGYyLDB4YTEsMHgzYywweDI0LDB4MmEsMHgzOSwweDAzLDB4Y2MsMHg0MCwweGQzLDB4YWMgfSwKKyAgMTYsIDB4YTFmMCwgMCwgezB4MzgsMHhjNSwweDBmLDB4MzAsMHg4MiwweGM4LDB4MDAsMHhkMywweDAwLDB4M2MsMHhjMCwweDBlLDB4MzAsMHgxMywweGMwLDB4MDAgfSwKKyAgMTYsIDB4YTIwMCwgMCwgezB4ZjEsMHgwMCwweDM4LDB4YzAsMHgwZiwweGEwLDB4MDMsMHgxYSwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTIxMCwgMCwgezB4NDAsMHgxZCwweGI4LDB4MTAsMHhmZCwweDM0LDB4M2UsMHg4MCwweDBmLDB4ZTAsMHgwMywweGVlLDB4MDAsMHg3MiwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YTIyMCwgMCwgezB4MDAsMHgwZiwweGIwLDB4NjMsMHhlYywweDQwLDB4ZjgsMHgyMiwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkNCwweDQwLDB4ZmYgfSwKKyAgMTYsIDB4YTIzMCwgMCwgezB4MDAsMHgzZiwweGQyLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGNmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4YTI0MCwgMCwgezB4MDYsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZSwweDAwLDB4ZWIsMHgwMCwweDM2LDB4ZTAgfSwKKyAgMTYsIDB4YTI1MCwgMCwgezB4MGQsMHhiMCwweDAzLDB4MjAsMHgwMCwweGYwLDB4ODAsMHgzMywweGMwLDB4MDgsMHhiOCwweDAzLDB4MmMsMHg4MCwweGNiLDB4MDAgfSwKKyAgMTYsIDB4YTI2MCwgMCwgezB4MzIsMHg4MCwweDBmLDB4YTAsMHgxMywweDZlLDB4MDgsMHhjYiwweDI4LDB4MzIsMHhlMCwweDBkLDB4YjQsMHg4MywweGUyLDB4MDAgfSwKKyAgMTYsIDB4YTI3MCwgMCwgezB4Y2EsMHgwMCwweDNlLDB4ZTAsMHgwYywweGE4LDB4MDMsMHgwMiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTI4MCwgMCwgezB4YzgsMHgxMSwweDhjLDB4MDQsMHg4MywweDAwLDB4MjEsMHhjMCwweDQ4LDB4NzAsMHgwMiwweDEwLDB4MDAsMHhiNywweDAyLDB4MjEgfSwKKyAgMTYsIDB4YTI5MCwgMCwgezB4YzAsMHg0YSwweDcwLDB4MDIsMHgwZCwweDQ4LDB4ZDQsMHgwMCwweDM1LDB4YzAsMHgwZSwweDYwLDB4MDIsMHhkYywweDAwLDB4YTcgfSwKKyAgMTYsIDB4YTJhMCwgMCwgezB4NDAsMHgyOSwweGMwLDB4MDksMHg3MiwweDAyLDB4ZDQsMHgxMCwweGE2LDB4MDIsMHgyZiwweGM4LDB4MDgsMHg3MCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4YTJiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDAwLDB4YTcsMHg4MCwweDIwLDB4ZTAgfSwKKyAgMTYsIDB4YTJjMCwgMCwgezB4MGEsMHgzOCwweDAyLDB4MWEsMHgwMCwweGI1LDB4ODAsMHgyMSwweGUwLDB4MDgsMHhmOCwweDIyLDB4NWMsMHg4MSwweDgzLDB4ODAgfSwKKyAgMTYsIDB4YTJkMCwgMCwgezB4MjEsMHhhMSwweDBiLDB4NzgsMHg4MiwweDVhLDB4MTAsMHg4MywweGEwLDB4MjAsMHhlOCwweDBhLDB4N2IsMHgwMiwweGRhLDB4MDAgfSwKKyAgMTYsIDB4YTJlMCwgMCwgezB4OTcsMHhjMCwweDJkLDB4ZTQsMHgwOCwweGU4LDB4MDIsMHgwOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTJmMCwgMCwgezB4MDgsMHgxNCwweGNjLDB4MDAsMHg4MywweDEwLDB4MjAsMHhjMCwweDBhLDB4MzAsMHgwMiwweDA4LDB4MDgsMHhiMywweDcwLDB4MjAgfSwKKyAgMTYsIDB4YTMwMCwgMCwgezB4ZjgsMHgwYSwweDMwLDB4NDIsMHg0YywweDA0LDB4OTMsMHgxNCwweDI2LDB4YzQsMHgwYSwweDM4LDB4MDIsMHhjYywweDAwLDB4YTMgfSwKKyAgMTYsIDB4YTMxMCwgMCwgezB4MDAsMHgyOCwweGMwLDB4YWEsMHgzMCwweDAyLDB4Y2UsMHg0MCwweGIzLDB4ODgsMHgyYywweGMwLDB4MjgsMHgzMCwweDBhLDB4MTIgfSwKKyAgMTYsIDB4YTMyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOSwweDAwLDB4ZWEsMHg4MCwweGI2LDB4OTAgfSwKKyAgMTYsIDB4YTMzMCwgMCwgezB4MmYsMHgyNCwweDBiLDB4MzksMHgwNCwweGJlLDB4YzAsMHgzMywweDkyLDB4MGMsMHhhMCwweDBiLDB4NjgsMHgxOCwweGNlLDB4YzAgfSwKKyAgMTYsIDB4YTM0MCwgMCwgezB4MzMsMHg4MCwweDBmLDB4ZTksMHg0MywweDc4LDB4MDAsMHhjYSwweDAwLDB4MzIsMHg4MCwweDBmLDB4YTAsMHgxMywweGY4LDB4NDggfSwKKyAgMTYsIDB4YTM1MCwgMCwgezB4ZGUsMHgwMCwweDNlLDB4ODAsMHgwYywweGUwLDB4MDIsMHgzYSwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTM2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MjQsMHhmOCwweDAwLDB4M2UsMHgxMiwweDBkLDB4ODAsMHg5MywweGIwLDB4MjgsMHhmOCwweDAwLDB4YmMgfSwKKyAgMTYsIDB4YTM3MCwgMCwgezB4MDAsMHgwZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDIsMHgwZSwweDgwLDB4MDAsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4YTM4MCwgMCwgezB4MDEsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4YTM5MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMCwweGIyLDB4NzAgfSwKKyAgMTYsIDB4YTNhMCwgMCwgezB4MGYsMHg5MCwweDAxLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5OCwweDAzLDB4ZTQsMHgwNCwweGU5LDB4MDggfSwKKyAgMTYsIDB4YTNiMCwgMCwgezB4M2EsMHg0OCwweDBjLDB4OWEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDBiLDB4MTAsMHgwYiwweDI2LDB4ODAgfSwKKyAgMTYsIDB4YTNjMCwgMCwgezB4ZjEsMHg4MCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTNkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg2MSwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDgsMHg4OSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YTNlMCwgMCwgezB4NDAsMHgwZCwweDlhLDB4MDIsMHhlNCwweDA4LDB4YTksMHgwMCwweDIyLDB4NzgsMHgwZCwweDk0LDB4MDYsMHhlNCwweDEwLDB4YjkgfSwKKyAgMTYsIDB4YTNmMCwgMCwgezB4MDAsMHgyMiwweDUwLDB4MGIsMHg5MCwweDAyLDB4MjUsMHg4MCwweGI5LDB4ODAsMHgzNiwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YTQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjUsMHgwMCwweDIzLDB4NDIgfSwKKyAgMTYsIDB4YTQxMCwgMCwgezB4MGIsMHhkMCwweDBlLDB4YjQsMHgwMCwweDg5LDB4MDQsMHgyZSwweDYwLDB4MDgsMHg5MSwweDAyLDB4YzQsMHgwNCwweGI5LDB4MDQgfSwKKyAgMTYsIDB4YTQyMCwgMCwgezB4MmEsMHhjMCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MTAsMHhiMSwweDAwLDB4MjYsMHg0MiwweDBhLDB4OTAsMHgwMiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTQzMCwgMCwgezB4YjksMHgyMSwweDYyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTQ0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHhiNSwweDQwLDB4MjEsMHg1MCwweDRiLDB4NTAsMHgwNiwweDk0LDB4MDIsMHg4MSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4YTQ1MCwgMCwgezB4NjAsMHgyOSwweDE0LDB4MDYsMHhjNSwweDAwLDB4YTEsMHgyMiwweDIwLDB4NTEsMHg4OSwweDE0LDB4MDIsMHhjNCwweDAwLDB4YjEgfSwKKyAgMTYsIDB4YTQ2MCwgMCwgezB4MjAsMHgyMCwweDQ4LDB4MGIsMHgxNCwweDAyLDB4MDQsMHgwMSwweGIxLDB4MDAsMHgwNCwweDUwLDB4MGIsMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YTQ3MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDA4LDB4YjgsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YTQ4MCwgMCwgezB4OGYsMHg4MCwweDAzLDB4YjAsMHgwMCwweDg4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGU4LDB4MDQgfSwKKyAgMTYsIDB4YTQ5MCwgMCwgezB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhmOCwweDUwLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MDQgfSwKKyAgMTYsIDB4YTRhMCwgMCwgezB4ZjgsMHgwMSwweDEyLDB4MDAsMHg0ZiwweDgwLDB4MDcsMHhlZSwweDA3LDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTRiMCwgMCwgezB4OTgsMHgxZCwweGU1LDB4MTAsMHhmOSwweDQwLDB4M2UsMHg1MCwweDBmLDB4OTQsMHgwMiwweDY1LDB4MDEsMHhmZCwweDAxLDB4M2QgfSwKKyAgMTYsIDB4YTRjMCwgMCwgezB4NTAsMHg0ZiwweDUwLDB4MTMsMHhlNSwweDAwLDB4ZmQsMHgxMCwweDFmLDB4NTAsMHgwNywweGQ0LDB4NDMsMHhkNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YTRkMCwgMCwgezB4MTAsMHgxZSwweDQ0LDB4MGYsMHg5NCwweDAzLDB4ZDUsMHgwMCwweGZkLDB4NDAsMHgzZSwweDUwLDB4MGYsMHg1MiwweDgzLDB4ZWUgfSwKKyAgMTYsIDB4YTRlMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhlNCwweDQwLDB4ZjksMHg2MCwweDNmLDB4NDQgfSwKKyAgMTYsIDB4YTRmMCwgMCwgezB4MGYsMHhkMCwweGMzLDB4ZTQsMHgzMCwweGY5LDB4MDEsMHgzZSwweDQyLDB4MGMsMHhkMCwweDAzLDB4ZTcsMHg4MCwweGRkLDB4YTAgfSwKKyAgMTYsIDB4YTUwMCwgMCwgezB4MzMsMHg0MCwweDBjLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhjOSwweDkwLDB4M2YsMHg2OCwweDFlLDB4OTEsMHgwMywweDM0LDB4MDAgfSwKKyAgMTYsIDB4YTUxMCwgMCwgezB4ZmQsMHgwMCwweDNlLDB4NjgsMHgwYywweDk0LDB4MDMsMHgwZSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTUyMCwgMCwgezB4MzksMHgxMCwweGUwLDB4MDAsMHhiOCwweDQyLDB4MmUsMHgwOSwweDBiLDB4ODQsMHgwMiwweGUxLDB4MDQsMHhiZSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YTUzMCwgMCwgezB4MTAsMHgwOCwweDgwLDB4MjIsMHhjMiwweDgwLDB4ODgsMHg0MCwweDIyLDB4MDAsMHgwYSwweDgwLDB4MDIsMHhlMCwweDAwLDB4YTggfSwKKyAgMTYsIDB4YTU0MCwgMCwgezB4ZDAsMHgyZSwweDEwLDB4NGIsMHg4YSwweDAzLDB4NjAsMHgwMCwweGJhLDB4MDAsMHgyZSwweDMwLDB4MDgsMHg4YSwweDAyLDB4ODYgfSwKKyAgMTYsIDB4YTU1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhjNSwweDgwLDB4YjEsMHg2MCwweDZjLDB4ZDAgfSwKKyAgMTYsIDB4YTU2MCwgMCwgezB4MGIsMHgxMCwweDAwLDB4ZGMsMHgwYywweGI1LDB4MDAsMHgyYywweDQxLDB4MDgsMHgxMCwweDAyLDB4YzUsMHg4MCwweDkxLDB4MTAgfSwKKyAgMTYsIDB4YTU3MCwgMCwgezB4NjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweGU0LDB4MGMsMHg4MSwweDIyLDB4MmMsMHg1MCwweDA4LDB4MTAsMHg0MiwweDA0LDB4MDAgfSwKKyAgMTYsIDB4YTU4MCwgMCwgezB4YTEsMHgwMCwweDJjLDB4NWEsMHgyOCwweDkwLDB4MDIsMHg1MiwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTU5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MSwweDBiLDB4OTAsMHgxMiwweGY0LDB4ODAsMHhiZiwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YTVhMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YTksMHg2MCwweDYwLDB4NDIsMHgwYSwweDk0LDB4MTIsMHhlNSwweDAwLDB4YTkgfSwKKyAgMTYsIDB4YTViMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4NjQsMHgyMCwweGI5LDB4MDAsMHgwZSwweDQwLDB4MDksMHg5MCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4YTVjMCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDEgfSwKKyAgMTYsIDB4YTVkMCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwNCwweGQxLDB4YzAgfSwKKyAgMTYsIDB4YTVlMCwgMCwgezB4YmEsMHg3MCwweDBjLDB4OTgsMHgwMywweGM0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweDI1LDB4NDAgfSwKKyAgMTYsIDB4YTVmMCwgMCwgezB4ZTksMHg0MCwweDNlLDB4NDAsMHgwYywweDEwLDB4MDMsMHg2OCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTYwMCwgMCwgezB4NjgsMHgwMSwweGE0LDB4MTQsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgyMywweGU0LDB4MDgsMHhmOSwweGEwLDB4M2MgfSwKKyAgMTYsIDB4YTYxMCwgMCwgezB4YzIsMHgyZiwweDkwLDB4MDMsMHhjNCwweDAwLDB4ZDksMHg4MCwweDNlLDB4NzAsMHgwZiwweDkxLDB4NDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YTYyMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MWYsMHg5MCwweDEzLDB4ZTYsMHgyMCwweGY5LDB4YTAsMHgzYywweDQwLDB4NGUsMHg5MCwweDAzLDB4OWEgfSwKKyAgMTYsIDB4YTYzMCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDIgfSwKKyAgMTYsIDB4YTY0MCwgMCwgezB4MGYsMHg4MCwweDEzLDB4MjAsMHgwYywweGZjLDB4MDEsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4NTAgfSwKKyAgMTYsIDB4YTY1MCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwYiwweDIwLDB4MDgsMHhmOCwweDAwLDB4MzIsMHgwMCwweDJjLDB4ODAsMHg0MywweGUwLDB4NDAgfSwKKyAgMTYsIDB4YTY2MCwgMCwgezB4ZjgsMHgwMiwweDNhLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTY3MCwgMCwgezB4YTgsMHg4NSwweDI4LDB4MDgsMHgzYSwweDAwLDB4MGYsMHg4MCwweDRiLDB4YTEsMHgwMiwweDI4LDB4MDAsMHhiYSwweDgyLDB4MmUgfSwKKyAgMTYsIDB4YTY4MCwgMCwgezB4ODgsMHg0OCwweGU0LDB4MDIsMHhlOCwweDAwLDB4YWUsMHg5MCwweGEzLDB4OTAsMHgwYiwweGUwLDB4MDAsMHgzOCwweDAwLDB4YmEgfSwKKyAgMTYsIDB4YTY5MCwgMCwgezB4MDAsMHgzNywweGEwLDB4MDgsMHhhMCwweDAyLDB4ZjgsMHgwMCwweDllLDB4ZTAsMHgyMiwweDgwLDB4MGIsMHhhMCwweDIzLDB4NDIgfSwKKyAgMTYsIDB4YTZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDEwLDB4MzMsMHgwMCwweDJjLDB4ZDAgfSwKKyAgMTYsIDB4YTZiMCwgMCwgezB4MGIsMHgxNCwweDAyLDB4MGMsMHgwMCwweGIyLDB4OTEsMHgyYywweGQwLDB4MDgsMHgzZSwweDAyLDB4NGMsMHgwMCwweDgzLDB4NDAgfSwKKyAgMTYsIDB4YTZjMCwgMCwgezB4MjQsMHhjMiwweDBiLDB4MzYsMHgwMCwweDhjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDA5LDB4YjAsMHgwMiwweGNlLDB4MDAgfSwKKyAgMTYsIDB4YTZkMCwgMCwgezB4YjMsMHhjYywweDY4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTZlMCwgMCwgezB4ZTAsMHgwMSwweDFjLDB4ODgsMHhiNywweDI1LDB4MmQsMHhjMCwweDhiLDB4NTgsMHgxYSwweDFjLDB4MDgsMHhiNiwweDAwLDB4MmQgfSwKKyAgMTYsIDB4YTZmMCwgMCwgezB4YzAsMHgwOCwweDc0LDB4MDIsMHhkYywweDQwLDB4YTUsMHgwMCwweDI1LDB4YzAsMHgxYiwweDc4LDB4MDIsMHg5NCwweDA4LDB4YjcgfSwKKyAgMTYsIDB4YTcwMCwgMCwgezB4ODAsMHgyNSwweGUzLDB4MGEsMHg3MSwweDAyLDB4ZGMsMHgwMCwweDk3LDB4ODMsMHgyMSwweGM4LDB4OGIsMHhmMSwweDAyLDB4NDggfSwKKyAgMTYsIDB4YTcxMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZiwweDAwLDB4ZjcsMHhlMiwweDdkLDB4ZTAgfSwKKyAgMTYsIDB4YTcyMCwgMCwgezB4MGYsMHg1OCwweDQzLDB4MWUsMHgxOCwweGY2LDB4ODAsMHg3YywweGUwLDB4MmMsMHg2OCwweDAyLDB4NWUsMHg5MCwweGMzLDB4ODAgfSwKKyAgMTYsIDB4YTczMCwgMCwgezB4MzUsMHhlMCwweDBmLDB4ZjgsMHgwMywweDllLDB4MDQsMHhmZiwweGExLDB4MjAsMHhhMSwweDBkLDB4NzgsMHgwMywweGQ2LDB4MDAgfSwKKyAgMTYsIDB4YTc0MCwgMCwgezB4ZjcsMHg4MCwweDM5LDB4ZjgsMHgwZiwweDc4LDB4MDMsMHgwYSwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTc1MCwgMCwgezB4NDgsMHgxZCwweGFjLDB4MDAsMHhmYiwweDQwLDB4N2YsMHg0MSwweDBmLDB4MTAsMHgwMywweGVjLDB4MDQsMHhmYSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTc2MCwgMCwgezB4ZDAsMHgwZiwweGEwLDB4MDMsMHhlZCwweDAwLDB4ZTksMHgwMCwweDJhLDB4MDAsMHgwZiwweGIwLDB4MDMsMHg2NCwweDAwLDB4ZmIgfSwKKyAgMTYsIDB4YTc3MCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGQsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGQzLDB4MDAsMHgzNiwweGMwLDB4MGYsMHgzOCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YTc4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDQ4LDB4Y2YsMHhjMCwweDMzLDB4NjAgfSwKKyAgMTYsIDB4YTc5MCwgMCwgezB4OGMsMHhjOCwweDQzLDB4ZDYsMHgwMCwweGNjLDB4OTQsMHgzZiwweGIwLDB4MGQsMHhmOCwweDAzLDB4N2YsMHgwMCwweGRmLDB4ODAgfSwKKyAgMTYsIDB4YTdhMCwgMCwgezB4M2YsMHg2MCwweDBmLDB4ZDgsMHgwMywweGRlLDB4MDAsMHhjZiwweGNhLDB4M2QsMHg2MCwweDBjLDB4ZjgsMHgxMywweDNhLDB4NDQgfSwKKyAgMTYsIDB4YTdiMCwgMCwgezB4ZGQsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4NDMsMHgxOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTdjMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHg4ZiwweDExLDB4MzMsMHhjMCwweDQ4LDB4NDEsMHgxMiwweGM0LDB4NDgsMHg4NCwweDExLDB4MmMgfSwKKyAgMTYsIDB4YTdkMCwgMCwgezB4ZWMsMHgyYSwweGJhLDB4MDMsMHgzYywweDQwLDB4ZDcsMHg0OCwweDJkLDB4NDEsMHgwYiwweDYwLDB4MDIsMHhkNCwweDAwLDB4ZDcgfSwKKyAgMTYsIDB4YTdlMCwgMCwgezB4MDEsMHgzZCwweGMwLDB4MGQsMHhmMCwweDAzLDB4NWEsMHgwMCwweDg0LDB4MTgsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAzLDB4NmEgfSwKKyAgMTYsIDB4YTdmMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg4YywweDA4LDB4ODcsMHgwMCwweDIxLDB4NDAgfSwKKyAgMTYsIDB4YTgwMCwgMCwgezB4MDksMHg0MCwweDAyLDB4ZDQsMHgwMCwweGE0LDB4OTIsMHgyZCwweGM4LDB4MDksMHg2MiwweDgyLDB4NWMsMHgwMCwweDg3LDB4MDAgfSwKKyAgMTYsIDB4YTgxMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweGZjLDB4MDAsMHg4NywweDAwLDB4MmQsMHgwNCwweDA4LDB4NzAsMHgwMiwweDFjLDB4ODAgfSwKKyAgMTYsIDB4YTgyMCwgMCwgezB4YjUsMHgwMCwweDJkLDB4YzAsMHgwYiwweGYwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTgzMCwgMCwgezB4NjAsMHgxMCwweGNjLDB4MDAsMHg4MywweDAwLDB4MjAsMHg0MCwweDA5LDB4MDAsMHgyMiwweGM3LDB4MDAsMHhhMCwweDQxLDB4MmMgfSwKKyAgMTYsIDB4YTg0MCwgMCwgezB4YzEsMHg0YiwweDA4LDB4MDIsMHgyYywweDAwLDB4OTMsMHg0MCwweDJjLDB4N2MsMHgwYiwweDM4LDB4MDIsMHhjNywweDIwLDB4OTMgfSwKKyAgMTYsIDB4YTg1MCwgMCwgezB4MDAsMHgyYywweGMwLDB4MDksMHgzMCwweDAyLDB4NGYsMHg4NCwweGIwLDB4ODAsMHgyYywweGMwLDB4MGIsMHgzMiwweDEwLDB4NTAgfSwKKyAgMTYsIDB4YTg2MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MTUsMHhiYywweDAyLDB4Y2YsMHgwMCwweGIyLDB4NDAgfSwKKyAgMTYsIDB4YTg3MCwgMCwgezB4MGQsMHgxMCwweDAzLDB4ZTgsMHgyNCwweGViLDB4YzEsMHgzZSwweGMwLDB4MmQsMHg5OCwweDEzLDB4N2MsMHgwYSwweGMyLDB4NDMgfSwKKyAgMTYsIDB4YTg4MCwgMCwgezB4M2UsMHhiMCwweDBmLDB4YTksMHgwMywweGU5LDB4MjAsMHhjZiwweDAwLDB4M2UsMHhjMCwweDhjLDB4ZjAsMHgwMywweDBkLDB4MjAgfSwKKyAgMTYsIDB4YTg5MCwgMCwgezB4ZmEsMHhjMCwweDNmLDB4YzAsMHgwZiwweDc0LDB4MDEsMHgyYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YThhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAyLDB4M2EsMHg0MCwweDhlLDB4OTAsMHgwMywweGU4LDB4MTQsMHg1YiwweDUwLDB4M2MgfSwKKyAgMTYsIDB4YThiMCwgMCwgezB4NTAsMHg0ZSwweDg0LDB4MDMsMHhlYywweDAwLDB4ZjgsMHg0MCwweDNlLDB4ODAsMHgwNywweDgxLDB4MDMsMHhlYywweDA4LDB4ZjMgfSwKKyAgMTYsIDB4YThjMCwgMCwgezB4MDAsMHgzYSwweGMwLDB4OWYsMHgzMCwweDAzLDB4ZWMsMHgwMCwweGNiLDB4MjAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDIzLDB4ZTggfSwKKyAgMTYsIDB4YThkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4OTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDAgfSwKKyAgMTYsIDB4YThlMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4MzgsMHgyMCwweGNmLDB4MDgsMHgzMiwweGMxLDB4MGUsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGZlLDB4MDggfSwKKyAgMTYsIDB4YThmMCwgMCwgezB4MzEsMHhlNSwweDBlLDB4ZTQsMHgwMywweDNhLDB4MDAsMHhmZiwweDAwLDB4MzMsMHg4MCwweDBmLDB4ZjAsMHgyYiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTkwMCwgMCwgezB4Y2MsMHhhMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTkxMCwgMCwgezB4ODAsMHgwNCwweDZjLDB4MDAsMHhiYiwweDAwLDB4M2EsMHg2OSwweDBiLDB4OTAsMHg2ZSwweDA4LDB4MDAsMHg4MywweDQxLDB4MzYgfSwKKyAgMTYsIDB4YTkyMCwgMCwgezB4NDAsMHhjOCwweDg4LDB4YzYsMHhlYywweDAwLDB4ODgsMHg0MCwweDM2LDB4ODAsMHgwZCwweGE4LDB4MDMsMHg2ZSwweDUwLDB4YmIgfSwKKyAgMTYsIDB4YTkzMCwgMCwgezB4MDAsMHgzNiwweGMwLDB4MGIsMHhiMCwweDAyLDB4MjQsMHgwMCwweGQ5LDB4MDgsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YTk0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmIsMHgwMCwweDJlLDB4NjAgfSwKKyAgMTYsIDB4YTk1MCwgMCwgezB4MDMsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg5LDB4MDEsMHgyMiwweDU4LDB4MDgsMHg5OCwweDIyLDB4ZWMsMHgwMSwweGFiLDB4MDAgfSwKKyAgMTYsIDB4YTk2MCwgMCwgezB4MjIsMHgwMCwweDBhLDB4MTAsMHgwMiwweDI4LDB4MDAsMHhiYiwweDAwLDB4MjIsMHg0MCwweDBiLDB4YjAsMHgwMiwweDI4LDB4MDAgfSwKKyAgMTYsIDB4YTk3MCwgMCwgezB4OGEsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHgyMCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTk4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMywweDAwLDB4MjgsMHg0MCwweDhiLDB4MDAsMHgwMiwweDAyLDB4NDAsMHg4OSwweDAxLDB4MjQgfSwKKyAgMTYsIDB4YTk5MCwgMCwgezB4ZDIsMHgyOCwweDEwLDB4MDIsMHhjYywweDAwLDB4ODMsMHgxMCwweDI0LDB4MjAsMHgwOCwweDA4LDB4MDIsMHg0ZSwweDAwLDB4YjMgfSwKKyAgMTYsIDB4YTlhMCwgMCwgezB4MDQsMHhhMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MDgsMHg4OCwweDkyLDB4MDAsMHgyYywweGMwLDB4MGIsMHhiMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YTliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZmYsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4YTljMCwgMCwgezB4MGYsMHg4MCwweDAyLDB4MjAsMHgxMCwweDg5LDB4NTAsMHgyMiwweGQ4LDB4MmUsMHg5NiwweDIyLDB4ZmMsMHgwMCwweGViLDB4NDAgfSwKKyAgMTYsIDB4YTlkMCwgMCwgezB4MzIsMHhjMCwweDBhLDB4OTAsMHgwMywweDI4LDB4MDAsMHhmZiwweDAwLDB4MjIsMHgwMCwweDBmLDB4YjAsMHgwMywweDJjLDB4YTAgfSwKKyAgMTYsIDB4YTllMCwgMCwgezB4YzgsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgwMCwweDA2LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTlmMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmZiwweDBjLDB4M2IsMHgwMCwweDBmLDB4YzAsMHgwMiwweDcwLDB4OTAsMHhmZCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YWEwMCwgMCwgezB4YzksMHgwZiwweDk2LDB4YzMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDA0LDB4ZmYgfSwKKyAgMTYsIDB4YWExMCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGZjLDB4MDAsMHgzZiwweGMwLDB4MGYsMHg3MCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4YWEyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkYywweDgwLDB4ZmIsMHgyOCwweDNmLDB4MDAgfSwKKyAgMTYsIDB4YWEzMCwgMCwgezB4MGMsMHhjMSwweDBiLDB4ZjEsMHgwMiwweGVkLDB4MDAsMHgzNywweDMwLDB4MmMsMHhmMSwweDAzLDB4YjIsMHg0MCwweGZmLDB4MDAgfSwKKyAgMTYsIDB4YWE0MCwgMCwgezB4YmIsMHhjMCwweDBmLDB4NDgsMHgwNiwweGIyLDB4MDAsMHhmYywweDgwLDB4M2IsMHhjYywweDBjLDB4ZjAsMHgwMywweDcwLDB4ODAgfSwKKyAgMTYsIDB4YWE1MCwgMCwgezB4ZGYsMHgyOCwweDMzLDB4MDQsMHgwZiwweGY0LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWE2MCwgMCwgezB4ODAsMHgxMCwweGZmLDB4NDAsMHhiZiwweDYwLDB4MmUsMHgyMSwweDA4LDB4ODIsMHgwMiwweDIwLDB4MDAsMHhhOSwweDI4LDB4MmEgfSwKKyAgMTYsIDB4YWE3MCwgMCwgezB4MDAsMHgwOSwweGZhLDB4MDIsMHgyMCwweDAwLDB4YmYsMHg1MSwweDIzLDB4ZDgsMHgwOSwweDk4LDB4MDIsMHhlNCwweDMwLDB4YjAgfSwKKyAgMTYsIDB4YWE4MCwgMCwgezB4MDAsMHgyMywweGQwLDB4MDgsMHhmNSwweGEyLDB4MjUsMHhhNCwweDhmLDB4NDIsMHgzYywweDEwLDB4MGIsMHhiMCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4YWE5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YjMsMHgwOCwweDJjLDB4MDAgfSwKKyAgMTYsIDB4YWFhMCwgMCwgezB4MjgsMHgwMCwweDFhLDB4YzAsMHg4NCwweDIwLDB4MDAsMHgyNCwweGM4LDB4NGIsMHgzMSwweDQyLDB4YzAsMHgwMCwweDkzLDB4MDIgfSwKKyAgMTYsIDB4YWFiMCwgMCwgezB4MjAsMHhjNiwweDA4LDB4MDAsMHgwNiwweGMwLDB4ODEsMHhiMywweDAwLDB4MmMsMHhkOCwweDA5LDB4MzIsMHgwMiwweGEwLDB4NDAgfSwKKyAgMTYsIDB4YWFjMCwgMCwgezB4OTMsMHgwMSwweDI0LDB4NGMsMHgwYiwweDMyLDB4MDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWFkMCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MDAsMHhiYiwweDAyLDB4MmUsMHgwYSwweDA4LDB4ODAsMHg4MiwweDYwLDB4MDAsMHhhOCwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YWFlMCwgMCwgezB4ZTAsMHgxYiwweGIwLDB4MDIsMHg2MiwweDAxLDB4M2IsMHgwMCwweDIyLDB4YzEsMHgwOSwweDkwLDB4MDIsMHhlMiwweDAwLDB4YmIgfSwKKyAgMTYsIDB4YWFmMCwgMCwgezB4NjAsMHgyNiwweGMxLDB4MDgsMHhiMCwweDJhLDB4MjYsMHgwMCwweDliLDB4MDQsMHgyZSwweDIxLDB4MGIsMHhiMCwweDAyLDB4MzAgfSwKKyAgMTYsIDB4YWIwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlLDB4MTAgfSwKKyAgMTYsIDB4YWIxMCwgMCwgezB4MDgsMHg4NCwweDEzLDB4ZWMsMHgwMiwweGE5LDB4MDQsMHgzNiwweDIwLDB4MGYsMHhiMCwweDAzLDB4ZWUsMHg4MCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4YWIyMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4YTAsMHgwMywweGEyLDB4ODAsMHg3OSwweDQwLDB4MWUsMHhjMCwweDhjLDB4YjAsMHg2MywweDZhLDB4MTAgfSwKKyAgMTYsIDB4YWIzMCwgMCwgezB4ZDMsMHgwMCwweDM2LDB4YTIsMHgwNywweGIwLDB4MDMsMHgwMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWI0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHgyMCwweDRkLDB4NDEsMHgwMywweDljLDB4MDAsMHhmZCwweDIwLDB4YWIgfSwKKyAgMTYsIDB4YWI1MCwgMCwgezB4MDAsMHgwYywweGYwLDB4MDMsMHhiOCwweDAwLDB4ZjcsMHgwMCwweDNmLDB4YzAsMHg0ZCwweGM5LDB4MDMsMHhmNCwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YWI2MCwgMCwgezB4MDAsMHgzYiwweGMwLDB4MmUsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGVmLDB4MDAsMHgzZiwweDAwLDB4NGIsMHg3MCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4YWI3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDgwLDB4ZWIsMHgwMCwweDdlLDB4MTAgfSwKKyAgMTYsIDB4YWI4MCwgMCwgezB4MmUsMHg4NCwweDAzLDB4ZWMsMHgwMCwweGUwLDB4MDAsMHgzMiwweDUwLDB4MGYsMHhiMCwweDg2LDB4MjUsMHgwMCwweGRiLDB4MjAgfSwKKyAgMTYsIDB4YWI5MCwgMCwgezB4M2EsMHhjMCwweDBkLDB4YjAsMHg2MywweGUxLDB4MTAsMHhmYiwweDQ4LDB4MzgsMHhjMSwweDBmLDB4MzAsMHgwMywweDJjLDB4MDQgfSwKKyAgMTYsIDB4YWJhMCwgMCwgezB4ZmIsMHgwOCwweDMyLDB4YzAsMHgwYywweGIwLDB4MGIsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWJiMCwgMCwgezB4YzgsMHgwNSwweDNjLDB4MDAsMHg4ZiwweDAwLDB4NjQsMHgyOSwweDI4LDB4ODAsMHgwMywweGVjLDB4MDIsMHhlOCwweDA0LDB4YTggfSwKKyAgMTYsIDB4YWJjMCwgMCwgezB4NTYsMHgwOCwweGZjLDB4MDcsMHhlMCwweDAwLDB4MGYsMHhhMCwweGJmLDB4YzAsMHgwYiwweDk1LDB4MDIsMHhhMCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4YWJkMCwgMCwgezB4MDUsMHgzNywweGMwLDB4ODksMHhmMCwweDBhLDB4MGQsMHhjOCwweGJmLDB4MDgsMHgyYSwweDgwLDB4MDgsMHhmMCwweDAyLDB4MzIgfSwKKyAgMTYsIDB4YWJlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAxLDB4YjMsMHgwMiwweDI0LDB4ZTAgfSwKKyAgMTYsIDB4YWJmMCwgMCwgezB4MGEsMHgzMCwweDEyLDB4ODAsMHgwMywweGEzLDB4MDAsMHhhOCwweDAwLDB4MDIsMHhiOCwweDIyLDB4YzAsMHgwMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4YWMwMCwgMCwgezB4MjgsMHhjMSwweDBiLDB4MDQsMHgwMiwweDA4LDB4MDAsMHhiOSwweDQwLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDAzLDB4MDQgfSwKKyAgMTYsIDB4YWMxMCwgMCwgezB4YjMsMHg0NCwweDIwLDB4MDAsMHg0YSwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWMyMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MjAsMHgxNywweGEwLDB4NjUsMHhlYywweDA4LDB4MzgsMHgwMiwweGMyLDB4NDEsMHhiMywweDkyLDB4MmIgfSwKKyAgMTYsIDB4YWMzMCwgMCwgezB4NjQsMHgwYSwweDM4LDB4MDIsMHgzNiwweDAxLDB4YjcsMHg5MCwweDJkLDB4ZTAsMHgwMywweGY4LDB4MDAsMHg5YSwweDAwLDB4YjUgfSwKKyAgMTYsIDB4YWM0MCwgMCwgezB4ODAsMHgyZCwweGUwLDB4ODksMHg3OCwweDEyLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyOSwweGUwLDB4MGEsMHg3OCwweDAyLDB4MDggfSwKKyAgMTYsIDB4YWM1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4NzMsMHhiMCwweDI0LDB4YzggfSwKKyAgMTYsIDB4YWM2MCwgMCwgezB4NGUsMHgzMCwweDBhLDB4ODAsMHgwMiwweGUyLDB4MDAsMHgzOCwweDk0LDB4MGUsMHgzMSwweGEyLDB4YzgsMHgwMCwweDczLDB4MDAgfSwKKyAgMTYsIDB4YWM3MCwgMCwgezB4MTgsMHhjNCwweDA1LDB4MDAsMHgwMywweDAwLDB4MDAsMHhmMywweDAwLDB4MzgsMHhjMCwweDA3LDB4YjEsMHgwMywweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWM4MCwgMCwgezB4ZjMsMHgwMSwweDMwLDB4NDEsMHgwZSwweGIwLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWM5MCwgMCwgezB4NDAsMHgxZCwweGJkLDB4MDAsMHhlZiwweDEwLDB4MjYsMHhjOCwweDAzLDB4YjEsMHgwMywweGUwLDB4MDAsMHhlYSwweDgxLDB4NzggfSwKKyAgMTYsIDB4YWNhMCwgMCwgezB4YzUsMHgwYywweGI1LDB4ZTMsMHhkYywweDAwLDB4YzMsMHgwMCwweDNlLDB4YzEsMHgwZiwweGYwLDB4ODMsMHhiMCwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YWNiMCwgMCwgezB4MDAsMHgzNywweGMwLDB4MGQsMHhmNCwweDAzLDB4ZTQsMHgwMCwweGY3LDB4MDAsMHgzZiwweDQwLDB4MGQsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4YWNjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZCwweDEwLDB4Y2IsMHgyOCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4YWNkMCwgMCwgezB4MGQsMHhiMCwweDEzLDB4YWMsMHgxMCwweGZiLDB4MDAsMHgzYSwweDgwLDB4MDQsMHhiNCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDQgfSwKKyAgMTYsIDB4YWNlMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YTQsMHhiMywweGUwLDB4MDAsMHhmYiwweDgwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGU4LDB4MDAgfSwKKyAgMTYsIDB4YWNmMCwgMCwgezB4ZmIsMHg0OCwweGIyLDB4ODAsMHgwZiwweGIwLDB4NDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWQwMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDIsMHg4NywweDQ0LDB4MzgsMHhjMCwweDhkLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhmZiwweDAwLDB4MjEgfSwKKyAgMTYsIDB4YWQxMCwgMCwgezB4YzAsMHgwOCwweDcwLDB4MDMsMHg5YywweDAwLDB4YjMsMHg1MCwweDIxLDB4ZDQsMHg0ZSwweDYyLDB4MDIsMHhkMCwweDAwLDB4YmYgfSwKKyAgMTYsIDB4YWQyMCwgMCwgezB4MDAsMHgzNSwweGQ0LDB4MDksMHg3MCwweDIyLDB4ZDgsMHgwMCwweGJmLDB4MjIsMHgyMSwweGMwLDB4MGIsMHg3MiwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4YWQzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDQwLDB4ODcsMHg4MCwweDJkLDB4ZTAgfSwKKyAgMTYsIDB4YWQ0MCwgMCwgezB4MDksMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI2LDB4ODAsMHgyOSwweGExLDB4MjgsMHg3YSwweDMyLDB4ZGUsMHgwMCwweDM3LDB4YTAgfSwKKyAgMTYsIDB4YWQ1MCwgMCwgezB4MjUsMHhlMCwweDA5LDB4NzgsMHgwNiwweGQyLDB4MDAsMHhiNywweDgwLDB4MjEsMHhlOCwweDBiLDB4NzksMHgwMiwweGRlLDB4MDAgfSwKKyAgMTYsIDB4YWQ2MCwgMCwgezB4YjcsMHg5MCwweDIxLDB4ZTAsMHgwYiwweDc5LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWQ3MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDQsMHg4MywweDAxLDB4MjgsMHhjMCwweDg5LDB4YjAsMHgwYSwweDRmLDB4MDAsMHhiMiwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YWQ4MCwgMCwgezB4YzQsMHg4OCwweDMwLDB4MTYsMHhjZiwweDAwLDB4YmIsMHgwNCwweDIwLDB4YzEsMHgwYSwweDMyLDB4MDYsMHhjMiwweDAwLDB4YjMgfSwKKyAgMTYsIDB4YWQ5MCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MDksMHgzMCwweDQyLDB4ZWYsMHgxMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4YWRhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4NGEsMHgwMCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4YWRiMCwgMCwgezB4MmQsMHhhMCwweDBiLDB4YWEsMHg4MCwweGZlLDB4MDAsMHgyYiwweDgwLDB4MGMsMHhhMCwweDQzLDB4ZmIsMHgzMCwweGZhLDB4MDAgfSwKKyAgMTYsIDB4YWRjMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHg4MywweGZhLDB4MDQsMHhmZSwweDE4LDB4MjIsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4ODQgfSwKKyAgMTYsIDB4YWRkMCwgMCwgezB4ZjIsMHgwMCwweDMzLDB4YTIsMHgwZiwweGEwLDB4MDMsMHhmMiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWRlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDJmLDB4ODAsMHgwMywweGEwLDB4MjAsMHhmYywweDAyLDB4M2UgfSwKKyAgMTYsIDB4YWRmMCwgMCwgezB4MDAsMHgxZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MDEsMHhlMCwweDQwLDB4ZjggfSwKKyAgMTYsIDB4YWUwMCwgMCwgezB4NDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4YWUxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNiwweDAwLDB4ZDksMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4YWUyMCwgMCwgezB4MGYsMHg5MCwweDBiLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzNiwweDY4LDB4NmMsMHg5NCwweDAzLDB4ZTQsMHgyMCwweGI5LDB4OTAgfSwKKyAgMTYsIDB4YWUzMCwgMCwgezB4MzYsMHg0MCwweDBjLDB4OTQsMHgwMywweGU0LDB4MDAsMHgyOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MjAgfSwKKyAgMTYsIDB4YWU0MCwgMCwgezB4YzksMHgwMCwweDM2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWU1MCwgMCwgezB4ODAsMHgwNCwweDY2LDB4NTAsMHg4OSwweDAwLDB4MjAsMHg1MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDksMHhkOSwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YWU2MCwgMCwgezB4NDgsMHg0OCwweDkwLDB4MDYsMHhlNCwweDA0LDB4OTksMHhhMCwweDIyLDB4NDAsMHgwZCwweGI4LDB4MjIsMHg2NCwweDAwLDB4MDkgfSwKKyAgMTYsIDB4YWU3MCwgMCwgezB4NTAsMHgzMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4MjcsMHg5MCwweDg5LDB4NDAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YWU4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4OTksMHgwMCwweDY2LDB4NDIgfSwKKyAgMTYsIDB4YWU5MCwgMCwgezB4MGEsMHhkMCwweDEyLDB4MzQsMHgwMCwweDg1LDB4MDAsMHgyNiwweDQwLDB4NGEsMHg5MCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MDEgfSwKKyAgMTYsIDB4YWVhMCwgMCwgezB4MjQsMHg0MCwweDU4LDB4OTAsMHgxMiwweGM0LDB4MDAsMHgyOSwweDQwLDB4MmUsMHg0MCwweDBiLDB4MTAsMHgwYSwweDI0LDB4ODAgfSwKKyAgMTYsIDB4YWViMCwgMCwgezB4ODksMHgwNSwweDI2LDB4NDEsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWVjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4NjEsMHg0OCwweDA4LDB4NTIsMHgwMiwweDE0LDB4ODEsMHg5NSwweDIwLDB4MjAgfSwKKyAgMTYsIDB4YWVkMCwgMCwgezB4NDAsMHgwYSwweDM2LDB4MDIsMHhjNCwweDAwLDB4YjEsMHgyMCwweDAwLDB4NDgsMHg0MSwweDEwLDB4NDIsMHg0NCwweDAxLDB4YTEgfSwKKyAgMTYsIDB4YWVlMCwgMCwgezB4MDAsMHgyNCwweDQ4LDB4MGIsMHgxMiwweDEyLDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyOCwweDQ4LDB4MGIsMHgxMiwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4YWVmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZDgsMHg1MCwweDM2LDB4MDAgfSwKKyAgMTYsIDB4YWYwMCwgMCwgezB4MGUsMHg4NSwweDIzLDB4MjEsMHg0MiwweDhjLDB4NTQsMHgzNCwweDE0LDB4MGUsMHg4MCwweDAyLDB4ZTEsMHg0MCwweGY4LDB4NTAgfSwKKyAgMTYsIDB4YWYxMCwgMCwgezB4MzYsMHgxNCwweDA0LDB4ODAsMHgwMywweGUxLDB4NDQsMHhlOCwweDUwLDB4N2UsMHgxNSwweDBmLDB4ODUsMHgwMywweDIxLDB4NDIgfSwKKyAgMTYsIDB4YWYyMCwgMCwgezB4NGEsMHgwMCwweDM2LDB4MTQsMHgwZiwweDgwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWYzMCwgMCwgezB4OTgsMHgxZCwweGM0LDB4NDAsMHhmOSwweDEwLDB4MWUsMHg0NCwweDRlLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwLDB4M2YgfSwKKyAgMTYsIDB4YWY0MCwgMCwgezB4YzAsMHgwZCwweDkxLDB4MDMsMHhmNCwweDAwLDB4ZDksMHgxNCwweDNlLDB4NDQsMHgwZiwweDkwLDB4MDMsMHg3NCwweDAwLDB4ZGQgfSwKKyAgMTYsIDB4YWY1MCwgMCwgezB4MDAsMHg3YSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHg0MCwweGY5LDB4MzgsMHgzZiwweDQ0LDB4MGYsMHg5MywweDgzLDB4ZTcgfSwKKyAgMTYsIDB4YWY2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmNiwweDgwLDB4ZjksMHhhNCwweDNmLDB4NjggfSwKKyAgMTYsIDB4YWY3MCwgMCwgezB4MGUsMHg5ZSwweDQzLDB4NjcsMHg4MCwweGQ5LDB4ZTQsMHgzZiwweDQxLDB4MGYsMHhkOCwweDQzLDB4MDQsMHgwMCwweGVkLDB4YzAgfSwKKyAgMTYsIDB4YWY4MCwgMCwgezB4MzYsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhkNSwweDQwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGY0LDB4MDAgfSwKKyAgMTYsIDB4YWY5MCwgMCwgezB4ZGQsMHgwMCwweDMyLDB4NDAsMHgyYywweDlhLDB4MDMsMHhjNiwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWZhMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDAsMHhlOCwweGMwLDB4MmUsMHgxNCwweDRkLDB4OGYsMHgyMiwweDIzLDB4YzAsMHhmOCwweGYwLDB4YWEgfSwKKyAgMTYsIDB4YWZiMCwgMCwgezB4MDAsMHgwYywweDgwLDB4MDMsMHhhMiwweGEwLDB4ZDgsMHg4MiwweDIyLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlOCwweDAwLDB4ZDggfSwKKyAgMTYsIDB4YWZjMCwgMCwgezB4ODAsMHgyYSwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTgsMHgwOCwweDg4LDB4YTgsMHgzNiwweDAwLDB4NDgsMHg4YSwweDgyLDB4Y2UgfSwKKyAgMTYsIDB4YWZkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHg0OCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4YWZlMCwgMCwgezB4MGEsMHgxMiwweDIyLDB4NDQsMHgwMCwweDkxLDB4MDQsMHhhNCwweDQxLDB4MGEsMHg5NCwweDA2LDB4MjQsMHgwMCwweDkxLDB4NDIgfSwKKyAgMTYsIDB4YWZmMCwgMCwgezB4MjQsMHg0MSwweDA5LDB4MTAsMHgwMiwweGU0LDB4MDEsMHg5MSwweDIwLDB4MjQsMHg0MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4MDEgfSwKKyAgMTYsIDB4YjAwMCwgMCwgezB4OTEsMHgwMCwweDJjLDB4NDAsMHgwOSwweDE0LDB4MDIsMHhjMiwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjAxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhhOSwweDAwLDB4MmUsMHg0MCwweDQ4LDB4MTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDQwLDB4YWEgfSwKKyAgMTYsIDB4YjAyMCwgMCwgezB4NDAsMHgxOCwweGIwLDB4MDIsMHhlNCwweDA4LDB4OTksMHgwMCwweDIyLDB4NDAsMHgxOSwweDkwLDB4NDYsMHhlNCwweDgwLDB4OTkgfSwKKyAgMTYsIDB4YjAzMCwgMCwgezB4MDQsMHgyZSwweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwMSwweDk5LDB4MDQsMHgyNiwweDUwLDB4MDksMHg5MCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4YjA0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNCwweDAwLDB4ZjksMHgwNiwweDNjLDB4NDAgfSwKKyAgMTYsIDB4YjA1MCwgMCwgezB4MGEsMHg5MCwweDAzLDB4NjQsMHgwMiwweGQ5LDB4MDAsMHhiNiwweDUwLDB4MGUsMHg5MCwweDIzLDB4MjYsMHgwMSwweGY5LDB4MDAgfSwKKyAgMTYsIDB4YjA2MCwgMCwgezB4MzYsMHg0MCwweDI5LDB4OTQsMHg4MywweGU0LDB4MDAsMHhkOSwweDQ4LDB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMywweGM3LDB4MDAgfSwKKyAgMTYsIDB4YjA3MCwgMCwgezB4ZDEsMHgwNywweDNhLDB4NTAsMHhjZCwweDkwLDB4MDMsMHhlOCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjA4MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDgsMHhlOSwweDAwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGM0LDB4MDgsMHhmMSwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YjA5MCwgMCwgezB4NjgsMHg4ZiwweDkwLDB4MDMsMHhhNCwweDQxLDB4ZjksMHgwMCwweGJlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YjBhMCwgMCwgezB4YzAsMHgzOCwweDQwLDB4MmUsMHg5MCwweDAzLDB4ZTYsMHg0MCwweGU5LDB4MDAsMHgzZSwweDY4LDB4MDYsMHg5MCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4YjBiMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwNSwweDNlLDB4MDAgfSwKKyAgMTYsIDB4YjBjMCwgMCwgezB4MDcsMHg4MCwweDBiLDB4MjAsMHgwMCwweGU4LDB4NDAsMHgzZSwweDEwLDB4MGQsMHg4MiwweDAzLDB4NjAsMHgwMCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4YjBkMCwgMCwgezB4YjIsMHgwMCwweDhkLDB4ODMsMHgwMywweGUwLDB4MDAsMHhkOCwweDUwLDB4M2EsMHgwMCwweDFlLDB4ODAsMHgwMywweGUxLDB4MjQgfSwKKyAgMTYsIDB4YjBlMCwgMCwgezB4ZjgsMHgwMCwweGIyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjBmMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHg4YSwweDA0LDB4MmYsMHg4NCwweDZhLDB4YTAsMHgwYiwweGU4LDB4MDgsMHg4ZSwweDAwLDB4M2QgfSwKKyAgMTYsIDB4YjEwMCwgMCwgezB4ODAsMHg4OCwweGVjLDB4MDMsMHg2OCwweDEwLDB4YTYsMHgwMSwweDM2LDB4ODAsMHgwOCwweGE4LDB4MDAsMHhjOCwweDEwLDB4OGUgfSwKKyAgMTYsIDB4YjExMCwgMCwgezB4MTAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4ZmIsMHgyMCwweGJlLDB4NTEsMHgyYSwweDgwLDB4MGIsMHhhMCwweDAyLDB4ODIgfSwKKyAgMTYsIDB4YjEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MSwweDIxLDB4OTMsMHgwMCwweDJjLDB4ZjAgfSwKKyAgMTYsIDB4YjEzMCwgMCwgezB4MzksMHgzMCwweDA2LDB4MGMsMHgwMCwweGEzLDB4MDAsMHgyOCwweDA4LDB4MjgsMHhiYywweDAyLDB4MmMsMHgwMCwweDgzLDB4ODAgfSwKKyAgMTYsIDB4YjE0MCwgMCwgezB4MmEsMHhjMCwweDA4LDB4MzAsMHgwMCwweGNjLDB4MDAsMHg5YSwweDgwLDB4MjgsMHhjMCwweDBhLDB4MzAsMHgwMiwweGNkLDB4MDAgfSwKKyAgMTYsIDB4YjE1MCwgMCwgezB4YjMsMHgwNCwweDYyLDB4YzEsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjE2MCwgMCwgezB4YTAsMHgwMSwweDFlLDB4MDQsMHgwNywweDExLDB4MmMsMHhkMCwweDBhLDB4MzIsMHgyMiwweGRjLDB4YzEsMHg4NywweDAwLDB4NmQgfSwKKyAgMTYsIDB4YjE3MCwgMCwgezB4ZDAsMHgwOCwweDM0LDB4MDIsMHg3YywweDAwLDB4YTcsMHgwOCwweDI0LDB4YzgsMHgwOCwweDcwLDB4MDIsMHhkYywweDgwLDB4MGYgfSwKKyAgMTYsIDB4YjE4MCwgMCwgezB4MDAsMHgyMSwweGM0LDB4MDgsMHg3MywweDA2LDB4ZGMsMHgwMCwweGIyLDB4MDAsMHg2MSwweGM4LDB4MGIsMHgzYSwweDAyLDB4ODggfSwKKyAgMTYsIDB4YjE5MCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgwYSwweDAwLDB4NTcsMHg4MSwweDJkLDB4YTAgfSwKKyAgMTYsIDB4YjFhMCwgMCwgezB4MmQsMHg3YywweDAyLDB4M2UsMHg4MiwweGUzLDB4ZTAsMHgzYiwweGUwLDB4MGMsMHg3OCwweDAzLDB4MWUsMHgyMCwweGM3LDB4ODAgfSwKKyAgMTYsIDB4YjFiMCwgMCwgezB4YjksMHhlOCwweDJjLDB4NzgsMHgwMywweGZmLDB4ODAsMHhkNiwweDgwLDB4M2IsMHhlYywweDAyLDB4N2EsMHgwMywweGRlLDB4MDAgfSwKKyAgMTYsIDB4YjFjMCwgMCwgezB4ZjcsMHg4MSwweDMxLDB4ZWMsMHg4ZiwweDdjLDB4MDMsMHgwYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjFkMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhmYiwweDAwLDB4MWUsMHg4MCwweDIzLDB4YjYsMHg4MywweGVkLDB4YTAsMHhkYiwweDY0LDB4M2UgfSwKKyAgMTYsIDB4YjFlMCwgMCwgezB4YzAsMHgwZSwweGIwLDB4MDMsMHhlZCwweGMwLDB4ZjIsMHgwMCwweDNlLDB4ZDQsMHgwYSwweGIwLDB4MDMsMHhlYywweDMwLDB4ZWUgfSwKKyAgMTYsIDB4YjFmMCwgMCwgezB4NjQsMHgzZSwweGMwLDB4MDcsMHhiMCwweGMzLDB4ZTgsMHgwMCwweGZiLDB4MDEsMHgzZSwweGM4LDB4MGYsMHhiOCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YjIwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4ZWYsMHg4MCwweDNiLDB4ZTAgfSwKKyAgMTYsIDB4YjIxMCwgMCwgezB4MGYsMHhmOCwweDYzLDB4N2UsMHgwNCwweGNmLDB4YzAsMHhiNywweDIwLDB4MGUsMHhmOCwweDAzLDB4ZmMsMHgwMCwweGM3LDB4ODAgfSwKKyAgMTYsIDB4YjIyMCwgMCwgezB4MzMsMHhmMCwweDBjLDB4Y2MsMHgwMywweGZlLDB4MDgsMHhmNywweGMxLDB4MzMsMHhlMCwweDRmLDB4ZjgsMHgwMywweGIyLDB4NDAgfSwKKyAgMTYsIDB4YjIzMCwgMCwgezB4ZmYsMHhhMCwweDMxLDB4ZTYsMHgwYywweGY4LDB4MDMsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjI0MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhlZiwweDAyLDB4MjEsMHg0MCwweDJkLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhmNywweDEwLDB4MjkgfSwKKyAgMTYsIDB4YjI1MCwgMCwgezB4NDAsMHgwOCwweDcwLDB4MjIsMHhmYywweGMwLDB4YTcsMHgwMCwweDNkLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkYywweDAwLDB4YjcgfSwKKyAgMTYsIDB4YjI2MCwgMCwgezB4NDAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZGEsMHg4MCwweGI3LDB4MjQsMHgyOSwweGM2LDB4NDgsMHhmMCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4YjI3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTcsMHgwMCwweDI4LDB4ODQgfSwKKyAgMTYsIDB4YjI4MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4MDAsMHgyNSwweDgwLDB4MGEsMHg2MSwweDAyLDB4ZGMsMHgwMSwweGE3LDB4MTAgfSwKKyAgMTYsIDB4YjI5MCwgMCwgezB4MjQsMHhjMCwweDA4LDB4NDAsMHg4MiwweGRjLDB4MDAsMHg5ZiwweDAwLDB4MjUsMHhjNCwweDBiLDB4NzAsMHgwMiwweDk0LDB4MjUgfSwKKyAgMTYsIDB4YjJhMCwgMCwgezB4YjcsMHgzMiwweDIzLDB4YzQsMHgxYiwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjJiMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MGMsMHhhMywweDAwLDB4MjAsMHgwMCwweDI5LDB4MzAsMHgwYSwweDBjLDB4MDAsMHhhMywweDAwLDB4NmMgfSwKKyAgMTYsIDB4YjJjMCwgMCwgezB4MDAsMHgwOCwweDEwLDB4NDIsMHhjZCwweDEwLDB4YWEsMHgwMCwweGFjLDB4YzAsMHgwMCwweDA0LDB4MDIsMHhjZCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4YjJkMCwgMCwgezB4MTAsMHgyNCwweGMwLDB4MDMsMHgzMCwweDQyLDB4YzMsMHgwOSwweGIzLDB4MDAsMHgyYywweGQwLDB4MGEsMHgzMCwweDAyLDB4MTggfSwKKyAgMTYsIDB4YjJlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4MCwweDAwLDB4ZWYsMHgwMCwweDNhLDB4NDAgfSwKKyAgMTYsIDB4YjJmMCwgMCwgezB4MDcsMHhmMCwweDQzLDB4M2MsMHgwMCwweDlmLDB4YzAsMHhiNiwweDE0LDB4MGUsMHg4MCwweDA2LDB4ZmMsMHgwMSwweGNiLDB4MDEgfSwKKyAgMTYsIDB4YjMwMCwgMCwgezB4MzcsMHhjMCwweGFjLDB4YjQsMHgwMiwweGZjLDB4MDAsMHhkOSwweDAxLDB4MzcsMHhjMCwweDRiLDB4ZjAsMHgxMywweGFlLDB4MDggfSwKKyAgMTYsIDB4YjMxMCwgMCwgezB4ZmIsMHgwMCwweDMzLDB4ZDAsMHgyZSwweGYwLDB4MGIsMHgyYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjMyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDA1LDB4M2UsMHg0MCwweDBmLDB4MzAsMHgwMywweGFjLDB4MTQsMHhmYiwweGEwLDB4M2EgfSwKKyAgMTYsIDB4YjMzMCwgMCwgezB4YzAsMHgwZiwweDg0LDB4NDMsMHhlYywweDAxLDB4ZjksMHg0MCwweDNlLDB4YzAsMHgwZiwweGEyLDB4MDMsMHhlYywweDIxLDB4ZjkgfSwKKyAgMTYsIDB4YjM0MCwgMCwgezB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTQsMHgyMCwweGYwLDB4MDAsMHhiYSwweGMwLDB4MGQsMHhiMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YjM1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmOCwweDAwLDB4ZDcsMHgwMSwweDM1LDB4NjggfSwKKyAgMTYsIDB4YjM2MCwgMCwgezB4NmQsMHhmMCwweDAzLDB4M2MsMHgwMSwweGU3LDB4MDAsMHgzMywweGMwLDB4MGQsMHhjMCwweDAzLDB4ZmMsMHgyNCwweGNmLDB4MDIgfSwKKyAgMTYsIDB4YjM3MCwgMCwgezB4MzcsMHhjMCwweDBkLDB4ZDIsMHgwMiwweGZjLDB4MDAsMHhkZiwweDAxLDB4MzMsMHhjMCwweDVlLDB4NzAsMHgzMywweDFjLDB4MTggfSwKKyAgMTYsIDB4YjM4MCwgMCwgezB4Y2YsMHg0MSwweDMxLDB4YzIsMHgwYywweGYwLDB4MDMsMHg0MCwweDQwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjM5MCwgMCwgezB4ODEsMHgwMCwweDZjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHg1MiwweDJhLDB4YjAsMHgwMywweDZjLDB4MDAsMHhhYiwweDAwLDB4MjggfSwKKyAgMTYsIDB4YjNhMCwgMCwgezB4YzAsMHgwYSwweDhjLDB4MDIsMHhlYywweDEwLDB4OGIsMHhlMCwweDIyLDB4YzAsMHgwZiwweDgwLDB4MDIsMHhjYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4YjNiMCwgMCwgezB4ODAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmEsMHgxMCwweGQ5LDB4ODAsMHgyMiwweGMwLDB4YzgsMHhiMCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YjNjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNCwweDAxLDB4OWIsMHgwMCwweDI2LDB4ODAgfSwKKyAgMTYsIDB4YjNkMCwgMCwgezB4MjksMHhiMCwweDYyLDB4MGMsMHgwMCwweGFiLDB4MDEsMHg2YSwweDAwLDB4MDgsMHg5OCwweDAyLDB4Y2MsMHgwMCwweDliLDB4ODMgfSwKKyAgMTYsIDB4YjNlMCwgMCwgezB4MmUsMHhjMCwweGNiLDB4YjQsMHgxMiwweGVjLDB4MDMsMHg4YiwweDgwLDB4MjgsMHhjMCwweDBhLDB4YjAsMHgwNiwweGEyLDB4MDAgfSwKKyAgMTYsIDB4YjNmMCwgMCwgezB4OGIsMHgwMiwweDYyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlMCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjQwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDEsMHg4MywweDE0LDB4MjAsMHgwMCwweDBhLDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmEgfSwKKyAgMTYsIDB4YjQxMCwgMCwgezB4NDAsMHgwYSwweDEwLDB4MDAsMHhjYywweDAyLDB4OTMsMHgwMCwweDI4LDB4YzAsMHgwYSwweDIwLDB4MDIsMHhlYywweDAwLDB4MDMgfSwKKyAgMTYsIDB4YjQyMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDE2LDB4MDAsMHg4MCwweDkxLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YjQzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZGIsMHgwMCwweDM2LDB4ODAgfSwKKyAgMTYsIDB4YjQ0MCwgMCwgezB4MmQsMHhmMCwweDAzLDB4M2MsMHgwMCwweGFmLDB4MDAsMHgzYSwweDgwLDB4MGQsMHg4MCwweDAzLDB4ZmMsMHgwMCwweDViLDB4MDAgfSwKKyAgMTYsIDB4YjQ1MCwgMCwgezB4MzcsMHhjMCwweDA5LDB4OTAsMHgwMywweGZjLDB4MDAsMHhkZiwweDAwLDB4MzMsMHhjMCwweDBhLDB4ZjAsMHgwMywweGE0LDB4MjAgfSwKKyAgMTYsIDB4YjQ2MCwgMCwgezB4Y2IsMHgwMCwweGIzLDB4YzAsMHg4YywweGIwLDB4MDMsMHg0MCwweDAyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjQ3MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDQsMHhmZiwweDIwLDB4MGYsMHgwMCwweDI3LDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4MmQgfSwKKyAgMTYsIDB4YjQ4MCwgMCwgezB4MDAsMHgwYiwweGQwLDB4MjcsMHhmYywweDAwLDB4ZWYsMHgwMCwweDM3LDB4YzAsMHgwZiwweGMwLDB4NDMsMHhmYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YjQ5MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGQsMHhmMCwweDBiLDB4ZTAsMHgwMCwweGY1LDB4MDAsMHgzZiwweGMwLDB4MWYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4YjRhMCwgMCwgezB4MDcsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmNCwweGMwLDB4ZmMsMHgyMiwweDdmLDB4YzAgfSwKKyAgMTYsIDB4YjRiMCwgMCwgezB4MGMsMHhkMCwweDQzLDB4MzYsMHgwMCwweGM0LDB4ODEsMHgzNCwweGMwLDB4MWMsMHg4OSwweDA3LDB4ZjIsMHg4MCwweGNmLDB4ODAgfSwKKyAgMTYsIDB4YjRjMCwgMCwgezB4MzMsMHg2MCwweDBmLDB4NzksMHgwMywweDNjLDB4ZTAsMHhjZiwweDA4LDB4MzMsMHg0OCwweDBkLDB4YzQsMHgwMywweGYwLDB4NTAgfSwKKyAgMTYsIDB4YjRkMCwgMCwgezB4ZGMsMHg5MCwweDM3LDB4Y2MsMHgwZiwweGY4LDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjRlMCwgMCwgezB4ODAsMHgxMCwweGU5LDB4OTAsMHhiOCwweDgwLDB4N2UsMHhlNCwweDg4LDB4OTksMHgwYSwweDI2LDB4MDgsMHhhOSwweDgwLDB4MjIgfSwKKyAgMTYsIDB4YjRmMCwgMCwgezB4ZjQsMHgyYywweDk5LDB4MDMsMHhhNywweDAyLDB4ODksMHg4MCwweDIyLDB4MzQsMHgwYiwweDlhLDB4MDMsMHg3ZCwweDAwLDB4ZGYgfSwKKyAgMTYsIDB4YjUwMCwgMCwgezB4NDgsMHgyYiwweDYwLDB4MDgsMHgwNSwweDAyLDB4ZTUsMHgwMCwweDgyLDB4MjAsMHgyMiwweGM0LDB4OGIsMHhiMCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YjUxMCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNSwweDAwLDB4YjAsMHgxMCwweDJjLDB4YzAgfSwKKyAgMTYsIDB4YjUyMCwgMCwgezB4MmEsMHgwMCwweDAyLDB4YTQsMHgwOCwweGE4LDB4MDQsMHhlMCwweDgwLDB4MGIsMHgwMCwweDAyLDB4YzQsMHg0MSwweGIyLDB4MDQgfSwKKyAgMTYsIDB4YjUzMCwgMCwgezB4YTQsMHgwYSwweDBiLDB4YjAsMHgwMiwweDhjLDB4ODEsMHg4MywweDIwLDB4NjAsMHg1MCwweDk4LDB4MTIsMHgxMiwweDhiLDB4ODAgfSwKKyAgMTYsIDB4YjU0MCwgMCwgezB4ODksMHgwMCwweDJjLDB4YzgsMHgwYiwweDMwLDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjU1MCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MjAsMHhiYiwweDAyLDB4MmEsMHhjMCwweDBhLDB4ODgsMHgwMiwweGE0LDB4MDgsMHhhOSwweDgwLDB4YTIgfSwKKyAgMTYsIDB4YjU2MCwgMCwgezB4ZTEsMHgxYiwweDljLDB4MjIsMHhlNiwweDAwLDB4YjgsMHg0MCwweDI2LDB4MzAsMHgwYiwweDkwLDB4MDIsMHhjYywweDAxLDB4OTMgfSwKKyAgMTYsIDB4YjU3MCwgMCwgezB4MDQsMHgyYSwweDQwLDB4MzksMHg5OCwweDgyLDB4ZWMsMHgxNCwweDhiLDB4NjUsMHgyYSwweGMwLDB4MGIsMHhiMiwweDAyLDB4ZjggfSwKKyAgMTYsIDB4YjU4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlNywweDAwLDB4YjgsMHg0OCwweDJlLDB4MDAgfSwKKyAgMTYsIDB4YjU5MCwgMCwgezB4MGUsMHg4OCwweDQzLDB4ODQsMHgwMCwweGUzLDB4YzEsMHgzNiwweGU4LDB4MGYsMHg5YywweDEyLDB4ZTIsMHg4MCwweGYzLDB4YzAgfSwKKyAgMTYsIDB4YjVhMCwgMCwgezB4MzYsMHg3MCwweDVmLDB4YTgsMHgyMywweGFjLDB4MDEsMHhjYiwweDA0LDB4MjIsMHg0MCwweDRkLDB4ODQsMHgwMywweGUyLDB4MDAgfSwKKyAgMTYsIDB4YjViMCwgMCwgezB4ZDgsMHgwMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjVjMCwgMCwgezB4ZTAsMHgwMSwweGIzLDB4MDksMHhmZSwweDEwLDB4M2UsMHg4MSwweDBkLDB4YzAsMHgwMywweDc0LDB4MGMsMHhmZiwweDAwLDB4M2QgfSwKKyAgMTYsIDB4YjVkMCwgMCwgezB4YzEsMHg4YywweGQwLDB4ODMsMHgxNCwweDAwLDB4Y2QsMHgyMCwweDNhLDB4NDAsMHgwZCwweGNhLDB4MDEsMHg3YywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YjVlMCwgMCwgezB4MDAsMHgxZiwweDQwLDB4MGUsMHhjMCwweDIzLDB4ZjIsMHg0NiwweGZlLDB4ODQsMHgzNywweGMwLDB4MGYsMHhkOCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4YjVmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZGQsMHgwMiwweDNkLDB4NDAgfSwKKyAgMTYsIDB4YjYwMCwgMCwgezB4MGUsMHg5MCwweDAzLDB4YWMsMHgwMCwweGViLDB4NDgsMHgzZSwweGQwLDB4MGMsMHg4MCwweDYzLDB4YTIsMHgwOCwweGNhLDB4MDAgfSwKKyAgMTYsIDB4YjYxMCwgMCwgezB4MzIsMHgwOCwweDBjLDB4YjAsMHgwMywweGFjLDB4MDgsMHhlYiwweDAwLDB4M2UsMHg0MCwweDBjLDB4ZDQsMHg4MywweDU4LDB4MjAgfSwKKyAgMTYsIDB4YjYyMCwgMCwgezB4ZjksMHg0MiwweDMyLDB4YzAsMHgwYywweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjYzMCwgMCwgezB4YzgsMHgwNSwweDI4LDB4MDIsMHhkYiwweDAwLDB4MmUsMHhlMCwweDI4LDB4M2EsMHgwMiwweDJlLDB4MDAsMHhkYiwweDYwLDB4NzYgfSwKKyAgMTYsIDB4YjY0MCwgMCwgezB4ZTAsMHgwZCwweDhjLDB4MDIsMHhlMCwweDAwLDB4ODgsMHgwMiwweDM2LDB4NTgsMHg2OCwweDE1LDB4ODMsMHg3YywweDA4LDB4YmYgfSwKKyAgMTYsIDB4YjY1MCwgMCwgezB4MDAsMHgyZCwweDYwLDB4MDgsMHg5MCwweDAyLDB4YTksMHgwMCwweGIzLDB4MDUsMHgyMywweGMwLDB4MDgsMHhiMCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4YjY2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDEwLDB4ODAsMHgwMCwweDBjLDB4YzEgfSwKKyAgMTYsIDB4YjY3MCwgMCwgezB4MDgsMHgxYywweDgyLDB4MDYsMHgwMCwweDkzLDB4YzAsMHgyMCwweGY2LDB4MGEsMHgyMCwweDAyLDB4MDgsMHgwMCwweDkzLDB4MDAgfSwKKyAgMTYsIDB4YjY4MCwgMCwgezB4MjQsMHg2MCwweDA5LDB4M2MsMHgwMiwweDBjLDB4MDAsMHg4MywweDAwLDB4MmMsMHg2MCwweDA5LDB4MDEsMHgxMiwweDAwLDB4NDAgfSwKKyAgMTYsIDB4YjY5MCwgMCwgezB4YjAsMHgwMCwweGUwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg3MCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjZhMCwgMCwgezB4MjAsMHg0MSwweDBhLDB4NDAsMHg4NiwweDgxLDB4MmQsMHhlMCwweDU4LDB4MTgsMHgwYSwweDE2LDB4YTAsMHg5NywweDgwLDB4MjUgfSwKKyAgMTYsIDB4YjZiMCwgMCwgezB4ZTksMHgxOSwweDc4LDB4ODIsMHhkNiwweDAwLDB4OTcsMHg4MCwweDI1LDB4YTAsMHgxOSwweGY4LDB4MDIsMHg1ZSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4YjZjMCwgMCwgezB4ODAsMHgyZCwweDYwLDB4MjgsMHg0OCwweDEyLDB4OTYsMHgwMCwweGI0LDB4ODAsMHgyMSwweGUwLDB4MjgsMHg3OCwweDAyLDB4YzggfSwKKyAgMTYsIDB4YjZkMCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODEsMHgzMCwweDNjLDB4YzIgfSwKKyAgMTYsIDB4YjZlMCwgMCwgezB4MGUsMHgwMCwweDAyLDB4ODQsMHgwMCwweGUzLDB4NDAsMHgyOCwweGU4LDB4NGMsMHgyOSwweDAzLDB4MGMsMHgwMCwweGQzLDB4MDAgfSwKKyAgMTYsIDB4YjZmMCwgMCwgezB4MzQsMHhjNCwweDBkLDB4MzEsMHgwMywweDhjLDB4MDgsMHhlMywweDAwLDB4M2MsMHg0NiwweDBjLDB4MjAsMHgwMywweDAwLDB4ODAgfSwKKyAgMTYsIDB4YjcwMCwgMCwgezB4ZjIsMHgwMCwweDMyLDB4YzAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjcxMCwgMCwgezB4NDAsMHgxOSwweGI4LDB4MDAsMHhmZiwweDEwLDB4MmYsMHhjMCwweDBmLDB4YzAsMHgyMywweGM0LDB4ODAsMHg3ZiwweDEwLDB4M2UgfSwKKyAgMTYsIDB4YjcyMCwgMCwgezB4YzAsMHgwZiwweGIxLDB4MDMsMHhkYywweDAwLDB4ZTcsMHgwMCwweDNmLDB4ODAsMHgwNiwweGYxLDB4NDMsMHhmYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YjczMCwgMCwgezB4MDgsMHg3ZCwweDUwLDB4MGUsMHhlMSwweDIzLDB4YjQsMHgwOCwweGZlLDB4MTAsMHgzZiwweGM0LDB4MGYsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4Yjc0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAyLDB4Y2MsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4Yjc1MCwgMCwgezB4MmMsMHhjMCwweDAzLDB4MDQsMHgwMSwweGNiLDB4MDAsMHgzMywweDYwLDB4MmMsMHg5MCwweDEzLDB4ZTgsMHgwMCwweDczLDB4MDAgfSwKKyAgMTYsIDB4Yjc2MCwgMCwgezB4YjIsMHhjMSwweDBmLDB4YTAsMHgwMywweGVjLDB4ODAsMHhmYiwweDI4LDB4M2UsMHg1NCwweDFmLDB4ZDAsMHgwMywweGZlLDB4MDIgfSwKKyAgMTYsIDB4Yjc3MCwgMCwgezB4YzksMHg4MCwweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjc4MCwgMCwgezB4NDgsMHgxMSwweDgwLDB4MDAsMHg4NiwweDAwLDB4MmQsMHg4MCwweDA4LDB4MjAsMHgwMiwweDE0LDB4MDgsMHg4NywweDAwLDB4MjkgfSwKKyAgMTYsIDB4Yjc5MCwgMCwgezB4NDAsMHgwOCwweDcwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzAsMHgwYiwweDYwLDB4MDIsMHg1YywweGEwLDB4OTcgfSwKKyAgMTYsIDB4YjdhMCwgMCwgezB4MjAsMHgyZCwweDQ4LDB4MGIsMHg1MCwweDAyLDB4ZGMsMHgxMCwweDhkLDB4MDAsMHgyMSwweGM4LDB4MGIsMHg3MCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4YjdiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZiwweDAwLDB4ODUsMHg4MSwweDJjLDB4NjAgfSwKKyAgMTYsIDB4YjdjMCwgMCwgezB4MTgsMHg1OCwweDAyLDB4ZGUsMHgyMCwweGI3LDB4ODIsMHgyOCwweDYwLDB4NWEsMHg3OCwweDUyLDB4ZGUsMHgxMCwweGJmLDB4ODAgfSwKKyAgMTYsIDB4YjdkMCwgMCwgezB4MjEsMHhlMCwweDRiLDB4NzgsMHgwNiwweGRlLDB4NDAsMHhiNywweGEwLDB4MmQsMHg2OSwweDliLDB4NzgsMHgxMiwweGNlLDB4MDAgfSwKKyAgMTYsIDB4YjdlMCwgMCwgezB4ODcsMHg4MCwweGUxLDB4ZTQsMHgwYiwweDc4LDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjdmMCwgMCwgezB4NDgsMHgxNCwweGVlLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMiwweDA4LDB4MzYsMHgwMiwweDhjLDB4MDgsMHg4MywweGYwLDB4NjggfSwKKyAgMTYsIDB4YjgwMCwgMCwgezB4NDAsMHgwYSwweDNlLDB4MDIsMHhjZCwweDQwLDB4YjMsMHgwMCwweDIwLDB4ZTAsMHgwYiwweDMyLDB4MDYsMHg0YywweDAwLDB4OWIgfSwKKyAgMTYsIDB4YjgxMCwgMCwgezB4MDAsMHgwYywweDQwLDB4MGIsMHgzMCwweDAyLDB4Y2QsMHg4MCwweDgzLDB4MDgsMHgyMCwweGMwLDB4MGIsMHhiMSwweDAyLDB4ZGEgfSwKKyAgMTYsIDB4YjgyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4Y2UsMHgwOCwweDNmLDB4YjAgfSwKKyAgMTYsIDB4YjgzMCwgMCwgezB4MGMsMHhlNCwweDIzLDB4ZGEsMHgwMiwweGRlLDB4NDAsMHhiYiwweGIyLDB4MGUsMHhlMiwweDQzLDB4ZmEsMHgwMCwweGZlLDB4MDAgfSwKKyAgMTYsIDB4Yjg0MCwgMCwgezB4MzMsMHg5MCwweDBiLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MSwweDBiLDB4ZTAsMHgxMywweGY5LDB4MDggfSwKKyAgMTYsIDB4Yjg1MCwgMCwgezB4Y2UsMHg0MCwweDMyLDB4ODAsMHgwZiwweGE4LDB4MDMsMHhmYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjg2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MjQsMHg5OCwweDA4LDB4M2MsMHgwNCwweDBmLDB4MDAsMHgwYiwweDYwLDB4MDAsMHhmOCwweDQwLDB4MmUgfSwKKyAgMTYsIDB4Yjg3MCwgMCwgezB4MDMsMHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDYsMHgwYiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZDggfSwKKyAgMTYsIDB4Yjg4MCwgMCwgezB4MDAsMHgzYywweDAwLDB4MDMsMHg4YywweDIzLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHg3ZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4Yjg5MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4YjhhMCwgMCwgezB4OGMsMHg5MCwweDAzLDB4MjUsMHgwMCwweGU5LDB4ODAsMHgzMiwweDQ0LDB4MGYsMHg5NCwweDAyLDB4ZTQsMHgyMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4YjhiMCwgMCwgezB4MzIsMHg3MCwweDBmLDB4OWEsMHg0MywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4MTAsMHgzMywweDI0LDB4MTAgfSwKKyAgMTYsIDB4YjhjMCwgMCwgezB4ZjksMHgwMSwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjhkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDgyLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgwMiwweDI0LDB4ODIsMHg4MSwweGMwLDB4YTIgfSwKKyAgMTYsIDB4YjhlMCwgMCwgezB4NzAsMHgwYiwweDljLDB4MDIsMHhlNCwweDAwLDB4MzEsMHg0MiwweGEyLDB4NjAsMHgwYiwweDk0LDB4ODIsMHhlNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4YjhmMCwgMCwgezB4MDAsMHgyYSwweDQwLDB4MDgsMHg5NCwweGEyLDB4MjUsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4YjkwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHg2NCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4YjkxMCwgMCwgezB4MDgsMHg5MCwweDQyLDB4YTQsMHgwMCwweDg5LDB4NjAsMHgyMiwweDQyLDB4MGIsMHg5MCwweDAyLDB4ZTYsMHgwMCwweGI5LDB4ODAgfSwKKyAgMTYsIDB4YjkyMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDQsMHhiOSwweDAwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHgwMiwweDI0LDB4MDQgfSwKKyAgMTYsIDB4YjkzMCwgMCwgezB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwZSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjk0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4ODAsMHg4MSwweDAwLDB4MmMsMHhjMSwweDQ4LDB4MTAsMHgwMiwweGE0LDB4MDIsMHg4MSwweDAwLDB4MjAgfSwKKyAgMTYsIDB4Yjk1MCwgMCwgezB4NDAsMHg4MywweDM0LDB4MDIsMHhjNCwweDAwLDB4YmIsMHgwMCwweDIwLDB4ZDAsMHgwYiwweDE0LDB4MDIsMHhjNCwweDgwLDB4YjEgfSwKKyAgMTYsIDB4Yjk2MCwgMCwgezB4MjAsMHhhMCwweDY4LDB4MTgsMHgxNCwweDFhLDB4MGQsMHgwMCwweGIxLDB4NDAsMHgyYywweDUwLDB4MGIsMHgxMCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4Yjk3MCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4Yjk4MCwgMCwgezB4OGMsMHg4MCwweDBiLDB4YTAsMHgwNCwweGU4LDB4MDAsMHgzMiwweDAwLDB4MDcsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4Yjk5MCwgMCwgezB4MzIsMHgwMCwweDFmLDB4ODAsMHgwMywweGExLDB4NDAsMHhmOCwweDUwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAgfSwKKyAgMTYsIDB4YjlhMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjliMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4NDYsMHhmZCwweDQwLDB4M2YsMHg1MCwweDIzLDB4ZDQsMHgxMywweDc0LDB4MDQsMHhmNSwweDAyLDB4M2YgfSwKKyAgMTYsIDB4YjljMCwgMCwgezB4NTAsMHgwZiwweGQ0LDB4MDMsMHhmZCwweDAwLDB4YmQsMHgwMCwweDJmLDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4ZjkgfSwKKyAgMTYsIDB4YjlkMCwgMCwgezB4MTAsMHgzZiwweDQ0LDB4MGYsMHhkNCwweDAzLDB4ZjUsMHgwOCwweGZkLDB4MDYsMHgzZSwweDUwLDB4MGYsMHhkMiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4YjllMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDQwLDB4ZWQsMHgwNCwweDNlLDB4NDggfSwKKyAgMTYsIDB4YjlmMCwgMCwgezB4MGMsMHhiMiwweDgzLDB4ZjQsMHgwMCwweGMxLDB4MDAsMHgzMiwweDQwLDB4OGMsMHhkMCwweDAzLDB4MzQsMHgwMCwweGZkLDB4MDAgfSwKKyAgMTYsIDB4YmEwMCwgMCwgezB4MzcsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU2LDB4MjAsMHhmOSwweDg4LDB4M2QsMHg2MiwweDBjLDB4ZDgsMHgwMywweGZlLDB4MjQgfSwKKyAgMTYsIDB4YmExMCwgMCwgezB4YzEsMHgwMCwweDNlLDB4NzgsMHgwZiwweGQwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmEyMCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MDAsMHg4OCwweDQwLDB4MmUsMHgxMCwweDA4LDB4YzQsMHgyMywweGEwLDB4MDgsMHg4OCwweDA2LDB4MmEgfSwKKyAgMTYsIDB4YmEzMCwgMCwgezB4MTQsMHgwOCwweDgwLDB4MDMsMHg2MCwweDA0LDB4YjgsMHgwMCwweDIyLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhlMiwweDAwLDB4YjggfSwKKyAgMTYsIDB4YmE0MCwgMCwgezB4ODAsMHgyZSwweDAwLDB4MDgsMHg4YywweDAyLDB4ZTMsMHg4MCwweDg4LDB4MDIsMHgyZSwweDM4LDB4MGIsMHg4OCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4YmE1MCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDgwLDB4YTEsMHhjMCwweDJkLDB4NzAgfSwKKyAgMTYsIDB4YmE2MCwgMCwgezB4MDgsMHg1MCwweDQyLDB4YzQsMHgwMCwweGE5LDB4MDAsMHgyMCwweGUwLDB4MmEsMHgxMCwweDBhLDB4MDQsMHgxMCwweGIxLDB4MDAgfSwKKyAgMTYsIDB4YmE3MCwgMCwgezB4MjQsMHg0MCwweDRiLDB4MTAsMHgwNiwweGM0LDB4MjAsMHhiMSwweDA4LDB4NmUsMHg0MCwweDBiLDB4MTYsMHg4MiwweGM0LDB4MjAgfSwKKyAgMTYsIDB4YmE4MCwgMCwgezB4ODEsMHgwMCwweDJjLDB4NTAsMHgwYiwweDkyLDB4ODIsMHg1MiwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmE5MCwgMCwgezB4MTgsMHgxMSwweGE0LDB4MDAsMHhhOSwweDAxLDB4MmUsMHg0MCwweDI4LDB4ZDAsMHgyMCwweGE0LDB4MDQsMHhhOSwweDAwLDB4MmEgfSwKKyAgMTYsIDB4YmFhMCwgMCwgezB4NDAsMHgxYSwweGIwLDB4MTIsMHgyNCwweDAwLDB4YjksMHgwYywweDIyLDB4NDIsMHgwYiwweDk0LDB4MDIsMHhlNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4YmFiMCwgMCwgezB4MDAsMHg2ZSwweDQwLDB4MGIsMHg5NiwweDAyLDB4ZTQsMHgxMSwweDg5LDB4MjAsMHg2ZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4YmFjMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweGMwLDB4YTksMHhjMCwweDNlLDB4NTAgfSwKKyAgMTYsIDB4YmFkMCwgMCwgezB4MDgsMHg5YywweDgzLDB4ZTQsMHgwMiwweGU5LDB4MDAsMHhiMiwweDQwLDB4MmEsMHg5MiwweDEyLDB4MjYsMHg0MCwweGY5LDB4NDAgfSwKKyAgMTYsIDB4YmFlMCwgMCwgezB4MzYsMHg3MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDQsMHhmOSwweDAxLDB4M2MsMHg0MCwweDBmLDB4OTgsMHgwMywweGU2LDB4MDIgfSwKKyAgMTYsIDB4YmFmMCwgMCwgezB4YzksMHgyMiwweDNlLDB4NDAsMHgwZiwweDEwLDB4MDIsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmIwMCwgMCwgezB4MjgsMHgwMSwweDg2LDB4MDQsMHhkOSwweDQwLDB4MWMsMHg0MCwweDBmLDB4OTIsMHgyMywweGE0LDB4YjAsMHhkYiwweDA0LDB4M2MgfSwKKyAgMTYsIDB4YmIxMCwgMCwgezB4YzAsMHgwZCwweDlhLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDQsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YmIyMCwgMCwgezB4MDAsMHgzZSwweDQyLDB4MmMsMHg5MCwweDIzLDB4ZTQsMHg4MCwweGY5LDB4MDAsMHgzZSwweDQwLDB4OGYsMHg5MiwweDAzLDB4OTIgfSwKKyAgMTYsIDB4YmIzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4YzgsMHgyMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YmI0MCwgMCwgezB4NGMsMHhjMCwweDhiLDB4MjAsMHgwMiwweGM4LDB4MzEsMHgzMiwweDIwLDB4MmQsMHg4NCwweDAzLDB4ZTEsMHgwNCwweGY4LDB4NDggfSwKKyAgMTYsIDB4YmI1MCwgMCwgezB4YmEsMHgwMCwweDBmLDB4ODksMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBkLDB4ODEsMHgxMywweDIwLDB4MTAgfSwKKyAgMTYsIDB4YmI2MCwgMCwgezB4ZjgsMHgwMCwweDNhLDB4MDAsMHgwZiwweDgxLDB4MjMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmI3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHgwZSwweDQwLDB4MjIsMHg4MCwweDI4LDB4YTQsMHgwMiwweDE5LDB4MDAsMHg1MiwweDgwLDB4YTIgfSwKKyAgMTYsIDB4YmI4MCwgMCwgezB4ODAsMHg0ZCwweGVkLDB4ODIsMHhlOCwweDAwLDB4YjYsMHg0MiwweDIzLDB4YmQsMHgwYiwweGU4LDB4MDIsMHhlOCwweDA0LDB4ZGEgfSwKKyAgMTYsIDB4YmI5MCwgMCwgezB4MDAsMHgzNywweDgwLDB4MDgsMHhlMCwweDAyLDB4M2EsMHgyMCwweGJhLDB4MDAsMHgyMiwweDgwLDB4MGIsMHhhOCwweDBhLDB4MGEgfSwKKyAgMTYsIDB4YmJhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHg4MCwweDYwLDB4YzAgfSwKKyAgMTYsIDB4YmJiMCwgMCwgezB4MDgsMHgyOSwweDAyLDB4MGQsMHgwMCwweDkyLDB4NDAsMHgyNCwweGMwLDB4MDgsMHhiNCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4YmJjMCwgMCwgezB4NjgsMHhlMCwweDFiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg5MywweDAxLDB4MjQsMHhjMCwweDY5LDB4MzgsMHgwMiwweDZjLDB4MDAgfSwKKyAgMTYsIDB4YmJkMCwgMCwgezB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmJlMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4NDAsMHg4MywweGMwLDB4MjAsMHg0MCwweDA4LDB4MjgsMHgwNiwweDljLDB4MTgsMHg5YywweDAyLDB4MjQgfSwKKyAgMTYsIDB4YmJmMCwgMCwgezB4YzAsMHgwOSwweDcwLDB4MDIsMHhkNCwweDAwLDB4YjcsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhjZSwweDQwLDB4OTcgfSwKKyAgMTYsIDB4YmMwMCwgMCwgezB4YjAsMHgyNSwweDQwLDB4MDgsMHg3OCwweDFhLDB4NTgsMHgwMCwweGJmLDB4YTIsMHg2NSwweGM4LDB4MGIsMHg3OCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YmMxMCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgwZSwweDAyLDB4ODcsMHg4MCwweGIxLDB4YTAgfSwKKyAgMTYsIDB4YmMyMCwgMCwgezB4MGMsMHg2OCwweDAzLDB4MWEsMHgwOCwweGQ2LDB4OTIsMHgzNSwweGU0LDB4MjgsMHg3OCwweDQyLDB4ZDYsMHgxMCwweGY1LDB4ODAgfSwKKyAgMTYsIDB4YmMzMCwgMCwgezB4MzksMHhhMCwweDBmLDB4NzgsMHgyMywweGRlLDB4MzAsMHhkMywweGEyLDB4MzUsMHhhMCwweDRkLDB4ZTgsMHgwMywweDVlLDB4MDAgfSwKKyAgMTYsIDB4YmM0MCwgMCwgezB4ZjcsMHhkMCwweDNkLDB4ZjgsMHgwZiwweGYwLDB4MDMsMHgyMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmM1MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHgwMCwweDBiLDB4YTAsMHgwMywweDQ4LDB4MDQsMHhmYSwweDQxLDB4M2EgfSwKKyAgMTYsIDB4YmM2MCwgMCwgezB4NTAsMHgwZiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlZCwweDg4LDB4ZmIgfSwKKyAgMTYsIDB4YmM3MCwgMCwgezB4NGQsMHgzZSwweDAwLDB4MGYsMHhmMCwweDAzLDB4YmMsMHgwOCwweGZiLDB4MjAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YmM4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZGMsMHg4MCwweGIzLDB4ZTAgfSwKKyAgMTYsIDB4YmM5MCwgMCwgezB4MGMsMHhkOCwweDAzLDB4Y2UsMHgwMCwweGM4LDB4YTAsMHgzMSwweGEwLDB4OGQsMHhlOSwweDAzLDB4YmUsMHgwMCwweGIyLDB4ODAgfSwKKyAgMTYsIDB4YmNhMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZTgsMHg0MywweDdlLDB4MDQsMHgwZiwweDgxLDB4MzEsMHhlNCwweDBjLDB4ZDgsMHgwMywweGY2LDB4MDAgfSwKKyAgMTYsIDB4YmNiMCwgMCwgezB4ZmYsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHgwMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmNjMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhiNCwweDQwLDB4MzUsMHg0MCwweDA4LDB4NTAsMHg4MiwweGRlLDB4ODAsMHhkNCwweDkwLDB4MjEgfSwKKyAgMTYsIDB4YmNkMCwgMCwgezB4ZTAsMHgwZCwweDUxLDB4MDIsMHhkNCwweDQwLDB4YjYsMHhiMCwweDJiLDB4OTAsMHgwZSwweGU1LDB4MDIsMHg5YywweDQwLDB4ZDcgfSwKKyAgMTYsIDB4YmNlMCwgMCwgezB4MjIsMHgxOSwweDVjLDB4MGQsMHg3MCwweDAyLDB4ZDgsMHgwMCwweGI3LDB4MjAsMHgyZCwweGMwLDB4MGIsMHhmMCwweDAzLDB4NmEgfSwKKyAgMTYsIDB4YmNmMCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4OTMsMHgxMCwweDIxLDB4ODAgfSwKKyAgMTYsIDB4YmQwMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4ZGMsMHhjMCwweDk0LDB4MDAsMHgyMywweGQwLDB4MDgsMHg3MCwweGEwLDB4ZDQsMHgyMCwweGI1LDB4MDIgfSwKKyAgMTYsIDB4YmQxMCwgMCwgezB4MjksMHg4MCwweDA5LDB4NjAsMHg4MiwweDBjLDB4MDAsMHg4NywweDAyLDB4MjUsMHhjMCwweDE5LDB4NDAsMHgwMiwweGQ0LDB4MDAgfSwKKyAgMTYsIDB4YmQyMCwgMCwgezB4YjcsMHgwMCwweDZkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmQzMCwgMCwgezB4MjAsMHgxNCwweGVjLDB4MDAsMHhiMywweGMwLDB4MjAsMHgwMSwweDQ4LDB4MTgsMHgwMiwweGNjLDB4MDIsMHg4MSwweDQ0LDB4YTAgfSwKKyAgMTYsIDB4YmQ0MCwgMCwgezB4YzAsMHg4OSwweDM4LDB4MDIsMHhjNywweDgwLDB4YjEsMHgwMCwweDJjLDB4MDksMHg0YSwweDAwLDB4NjIsMHhhYywweDA5LDB4OTMgfSwKKyAgMTYsIDB4YmQ1MCwgMCwgezB4MDEsMHgyOCwweDQwLDB4MTksMHgzMCwweDAyLDB4Y2QsMHgxMCwweGIzLDB4OTAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4YzggfSwKKyAgMTYsIDB4YmQ2MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDIwLDB4ZGIsMHg2MiwweDIyLDB4ZTAgfSwKKyAgMTYsIDB4YmQ3MCwgMCwgezB4NmMsMHhhMCwweDAzLDB4ZTQsMHgwMCwweDk4LDB4MDAsMHgzMiwweGMwLDB4ZWMsMHg5OCwweDIzLDB4YWUsMHgwOCwweGZiLDB4MDggfSwKKyAgMTYsIDB4YmQ4MCwgMCwgezB4M2EsMHg3OCwweDA5LDB4OTAsMHgwMywweDdjLDB4MTAsMHhjZiwweDAwLDB4MjYsMHg0MCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAgfSwKKyAgMTYsIDB4YmQ5MCwgMCwgezB4ZmYsMHg4MCwweDNmLDB4YzAsMHgwZiwweDkwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmRhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MjAsMHhmYiwweDQ4LDB4M2MsMHg2MSwweDBmLDB4YTAsMHg0MywweGVkLDB4MDAsMHhmOCwweDI0LDB4M2UgfSwKKyAgMTYsIDB4YmRiMCwgMCwgezB4NTAsMHgwZiwweDkwLDB4ODMsMHhlNCwweDAwLDB4ZmIsMHgwMCwweDNhLDB4NTAsMHgwZiwweDgwLDB4NDMsMHhlYywweDA4LDB4ZmIgfSwKKyAgMTYsIDB4YmRjMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGYsMHg0MCwweDAzLDB4ZjAsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMxLDB4MGYsMHg5MCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4YmRkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZGQsMHhhMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4YmRlMCwgMCwgezB4MGMsMHhlMCwweDAxLDB4ZmMsMHgwMCwweGRjLDB4OTEsMHgzOSwweGMwLDB4M2MsMHg0MCwweDAzLDB4MzQsMHgwMCwweGZmLDB4ODAgfSwKKyAgMTYsIDB4YmRmMCwgMCwgezB4M2YsMHgwMCwweDBmLDB4ZDAsMHgwNywweGZjLDB4MDAsMHhjYiwweDAwLDB4M2QsMHg0MCwweDBjLDB4ZTAsMHgwMywweDM4LDB4MjAgfSwKKyAgMTYsIDB4YmUwMCwgMCwgezB4Y2YsMHgwMiwweDNkLDB4YzAsMHgwYywweGQwLDB4MDMsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmUxMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHgwMSwweDQwLDB4MjIsMHgwMCwweDI4LDB4YTAsMHgwMiwweGNlLDB4ODYsMHg4MywweDY0LDB4MjIgfSwKKyAgMTYsIDB4YmUyMCwgMCwgezB4ZjQsMHgwOCwweDhjLDB4MGYsMHg2NCwweDAwLDB4YmIsMHgxMCwweDJlLDB4NjAsMHgwYiwweDljLDB4MDMsMHhhYywweDAxLDB4ZGIgfSwKKyAgMTYsIDB4YmUzMCwgMCwgezB4MDAsMHgzZSwweDYwLDB4MDgsMHg4ZiwweDAyLDB4MjMsMHg0MCwweDhiLDB4MDAsMHgzYSwweGMwLDB4MGQsMHgxMCwweDQzLDB4NjggfSwKKyAgMTYsIDB4YmU0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OTksMHgwMCwweGEyLDB4YzAgfSwKKyAgMTYsIDB4YmU1MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4YTYsMHgwNywweDk4LDB4MDAsMHgwMiwweGMyLDB4NDgsMHg4OCwweDAyLDB4MmMsMHgwMCwweGJhLDB4MDIgfSwKKyAgMTYsIDB4YmU2MCwgMCwgezB4NmUsMHg2MCwweDBhLDB4OTgsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAxLDB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMiwweDA1LDB4MDAgfSwKKyAgMTYsIDB4YmU3MCwgMCwgezB4OGIsMHgwMCwweDJlLDB4YzAsMHgwOCwweGIxLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmU4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MTAsMHg4MSwweDAwLDB4MjAsMHg0MCwweDI4LDB4MTAsMHgyNiwweGNjLDB4ODAsMHg4MCwweDIwLDB4YTAgfSwKKyAgMTYsIDB4YmU5MCwgMCwgezB4Y2MsMHgxOCwweDE0LDB4NDIsMHgwNCwweDAwLDB4YjIsMHgyMCwweDZjLDB4NDAsMHgwYiwweDAwLDB4MDIsMHg4YywweDAwLDB4ODMgfSwKKyAgMTYsIDB4YmVhMCwgMCwgezB4MDAsMHgyOCwweDQwLDB4MjgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgzLDB4MDAsMHgyOCwweGMwLDB4MDksMHhiMCwweDAyLDB4NDIgfSwKKyAgMTYsIDB4YmViMCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZDksMHgwMCwweDIyLDB4ODAgfSwKKyAgMTYsIDB4YmVjMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YWMsMHg4MCwweGRhLDB4MjksMHgyYSwweGQyLDB4MjgsMHg4MCwweDAyLDB4MjQsMHgwMCwweGZiLDB4MjAgfSwKKyAgMTYsIDB4YmVkMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4OTAsMHgwMiwweGZjLDB4MDAsMHg4ZiwweDAwLDB4MmUsMHg0MCwweDBjLDB4ODAsMHgwYiwweDIwLDB4MDIgfSwKKyAgMTYsIDB4YmVlMCwgMCwgezB4Y2YsMHgwMCwweDNlLDB4YzAsMHgwYywweGIwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmVmMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZDAsMHg2MywweGZjLDB4NDksMHhmNSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YmYwMCwgMCwgezB4YzAsMHgwYiwweGMwLDB4MDEsMHhmNCwweDAwLDB4N2YsMHg0MCwweDNmLDB4NDAsMHgxZiwweGQwLDB4MDMsMHhiYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4YmYxMCwgMCwgezB4MDAsMHgzZiwweDQwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4YmYyMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmMiwweDQwLDB4ZWMsMHhhMCwweDNmLDB4ZTAgfSwKKyAgMTYsIDB4YmYzMCwgMCwgezB4MGQsMHg0OCwweDAzLDB4N2QsMHg4MCwweGY0LDB4ODAsMHgzMywweDZjLDB4MGUsMHhjOCwweDAzLDB4MzIsMHgwMCwweGRkLDB4OTAgfSwKKyAgMTYsIDB4YmY0MCwgMCwgezB4M2IsMHhhMCwweDJkLDB4ZjAsMHgwMywweGZjLDB4YzAsMHhmZiwweDAwLDB4M2IsMHhlMCwweDhlLDB4ZjAsMHgwMywweDNjLDB4MDQgfSwKKyAgMTYsIDB4YmY1MCwgMCwgezB4ZWMsMHg2MCwweDMxLDB4MDAsMHgwYywweGYwLDB4MDMsMHhiMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmY2MCwgMCwgezB4ODAsMHgxMCwweGVjLDB4MDAsMHhkOSwweGMxLDB4MmUsMHhlMSwweDBkLDB4ODgsMHgwMiwweDNjLDB4ODAsMHhmOCwweDgwLDB4MzYgfSwKKyAgMTYsIDB4YmY3MCwgMCwgezB4N2QsMHgxOCwweGEwLDB4MDIsMHgyOCwweGIwLDB4ZWEsMHgyMCwweDIyLDB4MjAsMHgwOCwweDc3LDB4MDIsMHhmZCwweDUwLDB4YmIgfSwKKyAgMTYsIDB4YmY4MCwgMCwgezB4ODAsMHgyMiwweDQwLDB4MGIsMHhmNCwweDQyLDB4M2QsMHg4MCwweDg4LDB4MzEsMHgyMiwweDEyLDB4MDgsMHhmNiwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4YmY5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4ODAsMHgxMSwweDJlLDB4YzEgfSwKKyAgMTYsIDB4YmZhMCwgMCwgezB4MDgsMHgwMCwweDAyLDB4NGQsMHg4MCwweGI4LDB4MDAsMHgyMCwweDAwLDB4MGEsMHgwMiwweDgyLDB4MDAsMHgwMCwweDk5LDB4MjAgfSwKKyAgMTYsIDB4YmZiMCwgMCwgezB4MjIsMHhjMCwweDA5LDB4MzAsMHg4MiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjgsMHhjYSwweDBiLDB4MzQsMHg4MiwweDBkLDB4MjAgfSwKKyAgMTYsIDB4YmZjMCwgMCwgezB4ODAsMHgwMCwweGEwLDB4OGMsMHgwOCwweDM0LDB4ODIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmZkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4NDAsMHg5OSwweDgwLDB4MmUsMHhjMiwweDA5LDB4OTQsMHgwMiwweDJjLDB4MDAsMHhhOSwweDgwLDB4MjYgfSwKKyAgMTYsIDB4YmZlMCwgMCwgezB4NjAsMHgwOCwweDM4LDB4NDIsMHgyMiwweDIwLDB4YmEsMHg0MSwweDYyLDB4NDYsMHgzYiwweGIwLDB4MDIsMHhlYywweDAxLDB4YmIgfSwKKyAgMTYsIDB4YmZmMCwgMCwgezB4ODAsMHgyMiwweDQwLDB4MGIsMHhiMCwweDQ2LDB4MGMsMHgxOCwweDg4LDB4YzAsMHgyMiwweDIyLDB4MDgsMHhiMCwweDA2LDB4ZjAgfSwKKyAgMTYsIDB4YzAwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhjYywweDAwLDB4YzksMHg4MSwweDNjLDB4YzEgfSwKKyAgMTYsIDB4YzAxMCwgMCwgezB4MGMsMHhhOSwweDIzLDB4NmMsMHgwMCwweGIyLDB4ODAsMHgzMiwweDc4LDB4MGEsMHg4YSwweDBiLDB4MjYsMHgwMCwweDk5LDB4MDEgfSwKKyAgMTYsIDB4YzAyMCwgMCwgezB4MzAsMHhlMCwweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhiOSwweDAwLDB4M2EsMHhjMCwweDFlLDB4YjAsMHgwMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4YzAzMCwgMCwgezB4Y2IsMHg4MCwweDMyLDB4NjEsMHgwYywweGIwLDB4MTMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzA0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MTAsMHhkZCwweDAwLDB4M2YsMHhjMiwweDBmLDB4ZTgsMHgwMywweGFjLDB4MDAsMHhmZSwweDAwLDB4M2QgfSwKKyAgMTYsIDB4YzA1MCwgMCwgezB4NDAsMHgwZiwweGMwLDB4NDMsMHhmOCwweDEwLDB4ZWYsMHgxNCwweGI3LDB4ZTAsMHgwYywweGYwLDB4MDMsMHhmYywweDAwLDB4ZjUgfSwKKyAgMTYsIDB4YzA2MCwgMCwgezB4MDIsMHgzZiwweDQ0LDB4NGYsMHhiMCwweDRiLDB4ZmMsMHgwMiwweGQ0LDB4MDQsMHgzZCwweDQwLDB4MmYsMHhmMCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4YzA3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZjksMHgwOCwweDNlLDB4NjAgfSwKKyAgMTYsIDB4YzA4MCwgMCwgezB4MGQsMHhhMCwweDAzLDB4YWMsMHgwMCwweGU4LDB4NTAsMHgzMiwweDAwLDB4MGMsMHg4NCwweDAzLDB4YTUsMHgwMCwweGU5LDB4MDAgfSwKKyAgMTYsIDB4YzA5MCwgMCwgezB4M2EsMHhkOCwweDBmLDB4YjAsMHgwMywweDJjLDB4MDAsMHhmOSwweDAwLDB4M2EsMHhjMCwweDBmLDB4MzAsMHgwMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4YzBhMCwgMCwgezB4Y2IsMHg0NCwweDNlLDB4ZDQsMHgwZSwweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzBiMCwgMCwgezB4YzgsMHgwNSwweDJjLDB4MDgsMHhiOSwweDgwLDB4MmUsMHhjMCwweDBhLDB4MzAsMHg0MiwweDNjLDB4MDAsMHg4OSwweDA0LDB4NzYgfSwKKyAgMTYsIDB4YzBjMCwgMCwgezB4NjAsMHgwOCwweDkwLDB4NjIsMHgyMCwweDAwLDB4ODIsMHgwNCwweDIyLDB4ZDAsMHgwOCwweGYwLDB4NDMsMHg3YywweDAwLDB4YmIgfSwKKyAgMTYsIDB4YzBkMCwgMCwgezB4ODIsMHgyMiwweDQwLDB4MGIsMHhmMCwweDQyLDB4M2MsMHgwMCwweDhhLDB4YzAsMHgyZSwweGMxLDB4MDgsMHhmMCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4YzBlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDEwLDB4YjIsMHhkMCwweDJjLDB4YzAgfSwKKyAgMTYsIDB4YzBmMCwgMCwgezB4MjksMHgxOCwweDAyLDB4OGMsMHgwNCwweGExLDB4MDAsMHgyNCwweDljLDB4MDgsMHgxMCwweDAyLDB4ODAsMHgwMCwweGExLDB4MDEgfSwKKyAgMTYsIDB4YzEwMCwgMCwgezB4MGMsMHhjMSwweDJiLDB4MzAsMHg1MiwweDhjLDB4MDQsMHhiMywweDAxLDB4MjgsMHg0MCwweDRiLDB4MzAsMHgwMiwweDRjLDB4MDAgfSwKKyAgMTYsIDB4YzExMCwgMCwgezB4OTAsMHgyMCwweDJjLDB4MjAsMHgwYSwweDMwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzEyMCwgMCwgezB4MjAsMHg0MSwweDFlLDB4MDAsMHhiNywweGEyLDB4MjUsMHhlOCwweDhhLDB4NjgsMHgwMiwweDFlLDB4MDAsMHg4NSwweDgwLDB4MjUgfSwKKyAgMTYsIDB4YzEzMCwgMCwgezB4ODAsMHg4OCwweGU4LDB4MDIsMHgzZSwweDAwLDB4ODUsMHg4MCwweDJmLDB4ZTQsMHgyOCwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4YzE0MCwgMCwgezB4ODAsMHg2MSwweGUwLDB4MDMsMHg3OCwweDAyLDB4NWUsMHg4MiwweGI3LDB4ODIsMHgyZCwweGUwLDB4MDgsMHg3OCwweDAyLDB4YzggfSwKKyAgMTYsIDB4YzE1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwZCwweDAwLDB4ZjAsMHgxMCwweDNjLDB4ODAgfSwKKyAgMTYsIDB4YzE2MCwgMCwgezB4MGQsMHgxMCwweDgzLDB4OGMsMHgwMCwweGUyLDB4NTAsMHgyNiwweDA0LDB4MGMsMHgxMSwweDAzLDB4ODgsMHg0MCwweGViLDB4MDAgfSwKKyAgMTYsIDB4YzE3MCwgMCwgezB4M2MsMHhjNCwweDBmLDB4MzAsMHgwMywweDhjLDB4MDAsMHhmMywweDA4LDB4MzgsMHg0MCwweDA3LDB4MzAsMHgwMywweDZlLDB4NDAgfSwKKyAgMTYsIDB4YzE4MCwgMCwgezB4ZDAsMHgwOCwweDNjLDB4ODgsMHgwZSwweDMwLDB4NDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzE5MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmYiwweDM0LDB4M2MsMHhjOSwweDRlLDB4YjAsMHgyMywweGVkLDB4MjAsMHhmYiwweDA0LDB4M2YgfSwKKyAgMTYsIDB4YzFhMCwgMCwgezB4YzgsMHg4ZiwweDcwLDB4NTMsMHg0YywweDAwLDB4ZWIsMHgxMCwweDMxLDB4YzUsMHgwZSwweGY0LDB4MDMsMHg2ZCwweDAwLDB4ZjMgfSwKKyAgMTYsIDB4YzFiMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDBiLDB4YmMsMHgwMCwweGNkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDgzLDB4ZDAgfSwKKyAgMTYsIDB4YzFjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhjZSwweDA0LDB4YzksMHgwNCwweGIwLDB4YzEgfSwKKyAgMTYsIDB4YzFkMCwgMCwgezB4MGYsMHg5OCwweDEzLDB4NmMsMHg5MCwweGNiLDB4MDIsMHgzZSwweGMwLDB4NGYsMHhiMCwweDYzLDB4ZTQsMHgwMCwweGYxLDB4ODAgfSwKKyAgMTYsIDB4YzFlMCwgMCwgezB4MTIsMHhjMCwweDBjLDB4YjUsMHgwMywweGVjLDB4YzAsMHhjZiwweDgzLDB4MzIsMHg0MCwweDBmLDB4YjMsMHgyMywweDJkLDB4YTQgfSwKKyAgMTYsIDB4YzFmMCwgMCwgezB4ZmIsMHgwMCwweDNlLDB4MDAsMHgwZiwweGI0LDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzIwMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjMCwweDJkLDB4NjAsMHgwMiwweDFjLDB4MDAsMHhkNywweDAwLDB4MzkgfSwKKyAgMTYsIDB4YzIxMCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MDIsMHhkYywweDAwLDB4YjUsMHgwMCwweDIxLDB4YzAsMHgyYSwweDcwLDB4MTIsMHhjYywweDgwLDB4ODcgfSwKKyAgMTYsIDB4YzIyMCwgMCwgezB4MDAsMHgzNSwweGMwLDB4MGIsMHg3MiwweDUyLDB4MWMsMHgwMCwweGI3LDB4MDAsMHgyZCwweDQxLDB4MGIsMHgzMiwweDAyLDB4MTIgfSwKKyAgMTYsIDB4YzIzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHhiZSwweDAwLDB4ODEsMHhjMCwweDIzLDB4MjAgfSwKKyAgMTYsIDB4YzI0MCwgMCwgezB4MGIsMHhkOCwweDAyLDB4NWUsMHgwMCwweDA2LDB4YzAsMHgyZCwweGEwLDB4MGIsMHg3YywweDEyLDB4ZGUsMHgwOCwweGJmLDB4ODAgfSwKKyAgMTYsIDB4YzI1MCwgMCwgezB4YTEsMHhlMiwweDJhLDB4N2EsMHgwMiwweGRlLDB4MDAsMHg5MywweDgwLDB4MjUsMHg2MCwweDBiLDB4NzgsMHgxZSwweDVlLDB4NTAgfSwKKyAgMTYsIDB4YzI2MCwgMCwgezB4YjcsMHg4MCwweDJkLDB4YTAsMHgwYiwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzI3MCwgMCwgezB4NDgsMHgxNCwweGNlLDB4MDAsMHg4MywweDYwLDB4MjAsMHhjMCwweDA5LDB4MzEsMHgwMiwweDJjLDB4MDAsMHg5MywweDAwLDB4MjggfSwKKyAgMTYsIDB4YzI4MCwgMCwgezB4YzAsMHgxYiwweGIwLDB4MDYsMHhjYywweDgwLDB4YjMsMHg0OCwweDIwLDB4ZjAsMHgwYSwweDMwLDB4MDIsMHhlYywweDAwLDB4OTMgfSwKKyAgMTYsIDB4YzI5MCwgMCwgezB4ODAsMHgyNCwweGMwLDB4MGIsMHhiMCwweDAyLDB4NGMsMHgxMCwweGIzLDB4YzgsMHgyYywweGQyLDB4OGIsMHgzMCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4YzJhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYiwweDAwLDB4YzYsMHhjNCwweDMxLDB4ODEgfSwKKyAgMTYsIDB4YzJiMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4NjgsMHgwMCwweGNlLDB4ODAsMHgzZiwweGEyLDB4MGIsMHhlOCwweDAzLDB4ZjksMHgwMCwweGZlLDB4NDAgfSwKKyAgMTYsIDB4YzJjMCwgMCwgezB4MzEsMHg4MCwweDZlLDB4YTAsMHgwNywweGU4LDB4MDAsMHhkYSwweDAwLDB4MjYsMHg4MSwweDBmLDB4YTAsMHgwMiwweDY4LDB4MDEgfSwKKyAgMTYsIDB4YzJkMCwgMCwgezB4ZjYsMHhlMCwweDNkLDB4OTIsMHgwZiwweGEwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzJlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4YzIsMHhmOCwweDA0LDB4M2UsMHgxNCwweDBmLDB4ODAsMHgxMywweGUwLDB4MTAsMHhmOCwweDAxLDB4M2UgfSwKKyAgMTYsIDB4YzJmMCwgMCwgezB4MTAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDAwLDB4YjgsMHgwMCwweDNlLDB4MDAsMHg0NywweDgwLDB4MDMsMHhlMCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4YzMwMCwgMCwgezB4MTAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDA3LDB4YTAsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwLDB4MGYsMHg4MCwweDBiLDB4ZDIgfSwKKyAgMTYsIDB4YzMxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMSwweDMyLDB4NDAgfSwKKyAgMTYsIDB4YzMyMCwgMCwgezB4OGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQyLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgwMCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4YzMzMCwgMCwgezB4M2UsMHg0MiwweDBkLDB4OTAsMHgwMywweDY0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwYiwweDY0LDB4MDAgfSwKKyAgMTYsIDB4YzM0MCwgMCwgezB4ZjksMHg5MCwweDMyLDB4NDEsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzM1MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweGM4LDB4YTIsMHg2MCwweDBhLDB4OTIsMHgwMiwweGU0LDB4MDAsMHg4OSwweDQwLDB4MmUgfSwKKyAgMTYsIDB4YzM2MCwgMCwgezB4NTgsMHgwYiwweDkwLDB4MDIsMHgwNCwweDAwLDB4ZDksMHgwMCwweDJlLDB4NDIsMHgwOCwweDkwLDB4MDIsMHhlNCwweDA0LDB4ODkgfSwKKyAgMTYsIDB4YzM3MCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDA2LDB4MjQsMHgwNCwweGI5LDB4MDgsMHgyYSwweDQwLDB4NDgsMHg5MCwweDEyLDB4MjAgfSwKKyAgMTYsIDB4YzM4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgxMCwweDIyLDB4NDQgfSwKKyAgMTYsIDB4YzM5MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQ1LDB4OGIsMHg5MCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAgfSwKKyAgMTYsIDB4YzNhMCwgMCwgezB4MmEsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5OSwweDgwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgyNiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4YzNiMCwgMCwgezB4YjksMHgwMSwweDIyLDB4NzAsMHgwOSwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzNjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4MDgsMHhiMSwweDIwLDB4MjAsMHg0MCwweDBhLDB4MTAsMHgwMiwweGM0LDB4ODAsMHg4MywweDAwLDB4MmMgfSwKKyAgMTYsIDB4YzNkMCwgMCwgezB4NTAsMHg0YiwweDEwLDB4MDIsMHgyNCwweDAwLDB4OTEsMHgwMCwweDJlLDB4NDAsMHgwOCwweDEyLDB4MDIsMHhjNCwweDgxLDB4ODEgfSwKKyAgMTYsIDB4YzNlMCwgMCwgezB4YTIsMHg2YywweDQwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweGI5LDB4MjAsMHgyYSwweDQ4LDB4MjksMHgxMiwweDAyLDB4MDIgfSwKKyAgMTYsIDB4YzNmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHgwMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4YzQwMCwgMCwgezB4MDgsMHg4MCwweDAzLDB4ZTEsMHg0MiwweGM4LDB4MDAsMHgzMiwweDAwLDB4MWYsMHg4NSwweDAzLDB4YTEsMHg0MCwweGM4LDB4NTAgfSwKKyAgMTYsIDB4YzQxMCwgMCwgezB4M2EsMHgwMCwweDhkLDB4ODUsMHgwMywweDYxLDB4NDAsMHhkOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4MDUsMHgwMywweDIxLDB4NDAgfSwKKyAgMTYsIDB4YzQyMCwgMCwgezB4ZjgsMHg1MCwweDMyLDB4MTQsMHgwZCwweDg1LDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzQzMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4MDQsMHhmZCwweDEwLDB4M2YsMHg0MCwweDBmLDB4NTAsMHgwMywweGM0LDB4NDAsMHhmZCwweDAwLDB4M2YgfSwKKyAgMTYsIDB4YzQ0MCwgMCwgezB4NTEsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZmYsMHgwMSwweDNkLDB4NDAsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQgfSwKKyAgMTYsIDB4YzQ1MCwgMCwgezB4MTAsMHgzZiwweDRhLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzZiwweDQ0LDB4MGUsMHg5MSwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4YzQ2MCwgMCwgezB4MDIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhjNSwweDAwLDB4Y2QsMHgwMCwweDMxLDB4NDAgfSwKKyAgMTYsIDB4YzQ3MCwgMCwgezB4MGQsMHhkMCwweDQzLDB4ZTQsMHgwMCwweGNkLDB4MDAsMHgzMywweDQwLDB4NGYsMHgxMSwweDAyLDB4ZTQsMHgwNCwweGMxLDB4MDAgfSwKKyAgMTYsIDB4YzQ4MCwgMCwgezB4M2QsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlZCwweGE0LDB4MzIsMHg1MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4YzQ5MCwgMCwgezB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzRhMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4MDgsMHhkOCwweDAwLDB4MzIsMHgwMSwweDAwLDB4ODAsMHgxMiwweGMwLDB4MDAsMHg0OCwweDAwLDB4MzYgfSwKKyAgMTYsIDB4YzRiMCwgMCwgezB4ODAsMHgwYiwweDhhLDB4MDIsMHhlMCwweDAwLDB4YTgsMHgwMCwweDJlLDB4MDAsMHgwZiwweDgwLDB4MDIsMHhlMCwweDAwLDB4ODggfSwKKyAgMTYsIDB4YzRjMCwgMCwgezB4NTAsMHgzNCwweDI4LDB4MGIsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgyZSwweDAwLDB4MGIsMHg4MCwweDAyLDB4Y2UgfSwKKyAgMTYsIDB4YzRkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHgwMCwweDI2LDB4NDAgfSwKKyAgMTYsIDB4YzRlMCwgMCwgezB4MDksMHgxOCwweDAyLDB4YzQsMHgwOCwweDIxLDB4MDAsMHgyOCwweDQwLDB4OGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MDEgfSwKKyAgMTYsIDB4YzRmMCwgMCwgezB4MmUsMHg0MCwweDE4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhhMSwweDAxLDB4MjAsMHg0OCwweDFiLDB4MTAsMHgwMiwweGM0LDB4MDAgfSwKKyAgMTYsIDB4YzUwMCwgMCwgezB4YjEsMHgwMCwweDZjLDB4NDAsMHgwYiwweDEwLDB4MTIsMHhjMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzUxMCwgMCwgezB4MTgsMHgxMSwweGE0LDB4MDAsMHg5OSwweDgwLDB4YTIsMHg0MiwweDQ4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhhOSwweDJhLDB4MjYgfSwKKyAgMTYsIDB4YzUyMCwgMCwgezB4NDQsMHgwYiwweDkwLDB4ODIsMHhjNCwweDgxLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4NDIsMHhjNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4YzUzMCwgMCwgezB4MDAsMHgyNiwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDEsMHgyZSwweDQxLDB4MGIsMHg5MCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4YzU0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhjNSwweDIwLDB4YzksMHg4NCwweDMwLDB4NzAgfSwKKyAgMTYsIDB4YzU1MCwgMCwgezB4MGQsMHg5MCwweDEzLDB4ZTQsMHgwMiwweGU5LDB4MDAsMHgzMiwweDcwLDB4MGYsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4NDAgfSwKKyAgMTYsIDB4YzU2MCwgMCwgezB4M2MsMHg0OCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlMSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMSwweGU0LDB4MDAgfSwKKyAgMTYsIDB4YzU3MCwgMCwgezB4ZjksMHg5MCwweDNlLDB4NjAsMHgwZiwweDkwLDB4MjYsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzU4MCwgMCwgezB4MjgsMHgwMSwweGE1LDB4MDAsMHhmMSwweDA0LDB4M2EsMHg0NCwweDhmLDB4OTAsMHgwMywweGU0LDB4MTAsMHhjOSwweDA0LDB4M2UgfSwKKyAgMTYsIDB4YzU5MCwgMCwgezB4NjAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTksMHgyMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDEwLDB4ZjkgfSwKKyAgMTYsIDB4YzVhMCwgMCwgezB4OTAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzZSwweDY0LDB4MGYsMHg5MCwweDA3LDB4Y2EgfSwKKyAgMTYsIDB4YzViMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4YzgsMHgwNCwweDNhLDB4MDAgfSwKKyAgMTYsIDB4YzVjMCwgMCwgezB4MWUsMHg4MCwweDAzLDB4ODAsMHgwMywweGM4LDB4NDAsMHgyYSwweDA0LDB4MWYsMHg4MCwweDAzLDB4MjAsMHgwMCwweDg4LDB4MDAgfSwKKyAgMTYsIDB4YzVkMCwgMCwgezB4MzIsMHgzMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAgfSwKKyAgMTYsIDB4YzVlMCwgMCwgezB4YzgsMHg4MCwweDNlLDB4MjAsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzVmMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHhhZSwweGQwLDB4MzcsMHg4MCwweDA4LDB4ZWMsMHg0NiwweDM4LDB4MDAsMHhkNiwweDA0LDB4MjMgfSwKKyAgMTYsIDB4YzYwMCwgMCwgezB4YTAsMHgwYiwweGEwLDB4NDEsMHg3OCwweDA0LDB4ZmEsMHgwMCwweDM3LDB4ODAsMHgwZCwweGEwLDB4MDIsMHhhOCwweDEwLDB4ZWUgfSwKKyAgMTYsIDB4YzYxMCwgMCwgezB4MjEsMHgyZSwweDgwLDB4MDgsMHhhMCwweDAyLDB4ZTgsMHgwOCwweDhlLDB4ODAsMHgyZiwweGEwLDB4OGIsMHhhMCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4YzYyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg0YywweDAyLDB4ODMsMHhjMCwweGE4LDB4ZTggfSwKKyAgMTYsIDB4YzYzMCwgMCwgezB4NGEsMHgzNiwweDAyLDB4OGMsMHgwMCwweDEzLDB4YTAsMHgyOCwweGMyLDB4MGIsMHgzMCwweDA2LDB4MGMsMHgwMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4YzY0MCwgMCwgezB4MjQsMHg4NCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDIwLDB4MjgsMHhjMCwweDA5LDB4MzAsMHgwMiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4YzY1MCwgMCwgezB4ODMsMHg4MCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzY2MCwgMCwgezB4YTAsMHgwMSwweDNjLDB4NDQsMHhhZiwweDQwLDB4MjUsMHhjMiwweDQ4LDB4ZjgsMHg4MiwweDFjLDB4YzgsMHg5ZiwweDA4LDB4MjEgfSwKKyAgMTYsIDB4YzY3MCwgMCwgezB4YzAsMHg4YiwweGY4LDB4MDIsMHg1YywweDAwLDB4YmYsMHhiMCwweDI3LDB4ODAsMHgwOSwweDNhLDB4MDIsMHg5YywweDAwLDB4YTUgfSwKKyAgMTYsIDB4YzY4MCwgMCwgezB4MDIsMHgyZCwweGU4LDB4MDksMHg3MCwweDAyLDB4Y2UsMHg4MCwweDg1LDB4MDgsMHgyZCwweGMyLDB4MGIsMHg3MywweDAyLDB4ZTggfSwKKyAgMTYsIDB4YzY5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4MiwweGE5LDB4ZTAgfSwKKyAgMTYsIDB4YzZhMCwgMCwgezB4MGEsMHg3OCwweDAyLDB4OWUsMHg0MCwweDk3LDB4ODQsMHgzOSwweGEwLDB4MGIsMHg3YSwweDgzLDB4M2YsMHg4MCwweGQ3LDB4OTEgfSwKKyAgMTYsIDB4YzZiMCwgMCwgezB4MzUsMHhhMCwweDBkLDB4N2EsMHgwOSwweDFlLDB4NDQsMHhmNywweDgwLDB4M2QsMHhlOCwweDJkLDB4N2EsMHgwMywweGRlLDB4ODIgfSwKKyAgMTYsIDB4YzZjMCwgMCwgezB4YzYsMHg4MCwweDNkLDB4MjAsMHg0YiwweDdiLDB4MjMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzZkMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhkMywweDAwLDB4M2UsMHhjMSwweDBmLDB4MzAsMHgwMywweGVkLDB4ODAsMHhlMywweDAwLDB4M2UgfSwKKyAgMTYsIDB4YzZlMCwgMCwgezB4ODAsMHgwZiwweGI2LDB4MjEsMHhlYywweDA4LDB4ZGIsMHgyMSwweDNlLDB4ODAsMHgwZiwweGI1LDB4MDMsMHg2YywweDQwLDB4ZjkgfSwKKyAgMTYsIDB4YzZmMCwgMCwgezB4MDAsMHgzZSwweGRjLDB4MGUsMHhiMiwweDAzLDB4ZWQsMHg0MCwweGY5LDB4MDIsMHgzZSwweDgwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YzcwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4Y2YsMHg4MCwweDNkLDB4ZTAgfSwKKyAgMTYsIDB4YzcxMCwgMCwgezB4MGYsMHhjOCwweDQzLDB4ZmUsMHgwMCwweGZlLDB4ODQsMHgzZiwweGUwLDB4MGQsMHhmOCwweGMzLDB4ZmYsMHgxMCwweGFmLDB4OTAgfSwKKyAgMTYsIDB4YzcyMCwgMCwgezB4MzUsMHhhMCwweDBjLDB4ZmMsMHgwMywweDNlLDB4MTQsMHhlYywweDg0LDB4M2YsMHhmMCwweDBlLDB4ZmMsMHhjMywweGZmLDB4MDggfSwKKyAgMTYsIDB4YzczMCwgMCwgezB4NGYsMHg4MCwweDMzLDB4ZTQsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzc0MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHhkNywweGEyLDB4MmQsMHhjNCwweDBjLDB4NDEsMHhjMiwweGRjLDB4MDAsMHg3NCwweDAwLDB4MjUgfSwKKyAgMTYsIDB4Yzc1MCwgMCwgezB4ODAsMHgwZiwweDcyLDB4NDIsMHhkYywweDkwLDB4ZDcsMHgzOCwweDJkLDB4OTgsMHgwYSwweDcwLDB4MDIsMHgxYywweDA0LDB4ODYgfSwKKyAgMTYsIDB4Yzc2MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGQsMHg3MCwweDAyLDB4Y2MsMHgwMCwweDg2LDB4MDgsMHgzNywweGM2LDB4MjgsMHg3MCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4Yzc3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHg2MCwweDJkLDB4YzIgfSwKKyAgMTYsIDB4Yzc4MCwgMCwgezB4MGEsMHg1MCwweDAyLDB4ZGMsMHgwMCwweGI2LDB4MTAsMHgyNSwweGMyLDB4MDksMHg3MCwweDg2LDB4ZGMsMHgzMCwweDk3LDB4MDAgfSwKKyAgMTYsIDB4Yzc5MCwgMCwgezB4MjUsMHg4MCwweDA4LDB4MzAsMHgwMiwweDVjLDB4MDAsMHg4NywweDA4LDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweGNjLDB4NDAgfSwKKyAgMTYsIDB4YzdhMCwgMCwgezB4ODYsMHgwMCwweDIxLDB4MDAsMHgwOSwweDcwLDB4MGEsMHgwMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzdiMCwgMCwgezB4MjAsMHgxNCwweGVkLDB4ODAsMHg5MywweDAwLDB4MGMsMHhlMSwweDI4LDB4MTgsMHgwMiwweGNjLDB4MDgsMHhhMCwweDAwLDB4MjQgfSwKKyAgMTYsIDB4YzdjMCwgMCwgezB4MTIsMHgxYSwweDM0LDB4MDIsMHhjZiwweDA0LDB4OTMsMHg0MCwweDJjLDB4ODAsMHgwYSwweGIwLDB4MjIsMHg0YywweDAyLDB4ODEgfSwKKyAgMTYsIDB4YzdkMCwgMCwgezB4ODAsMHgyOCwweGUwLDB4MjgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDg4LDB4ODIsMHgyNCwweDIwLDB4MDgsMHhiMCwweDAyLDB4MDggfSwKKyAgMTYsIDB4YzdlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZiwweDIwLDB4YzksMHhlMCwweDJjLDB4ZjEgfSwKKyAgMTYsIDB4YzdmMCwgMCwgezB4MGUsMHhiZCwweDAzLDB4ZmMsMHgwMCwweGI5LDB4NDAsMHgzNiwweDQwLDB4MDksMHhmNSwweDAyLDB4ZmQsMHg0MCwweGZmLDB4ODAgfSwKKyAgMTYsIDB4YzgwMCwgMCwgezB4MzYsMHhhMiwweDA4LDB4ZjAsMHgwYiwweDdjLDB4MDAsMHhlYiwweDgwLDB4MmYsMHhlMCwweDBhLDB4ZjAsMHg0MywweGZjLDB4MDIgfSwKKyAgMTYsIDB4YzgxMCwgMCwgezB4OGIsMHhkMCwweDMyLDB4ZjAsMHgwZCwweGYwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzgyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHhjOCwweDBmLDB4OTQsMHgxMywweGVjLDB4MDAsMHhmOSwweDQwLDB4MzYgfSwKKyAgMTYsIDB4YzgzMCwgMCwgezB4NDAsMHgxZiwweGIwLDB4MDMsMHhlYywweDEwLDB4ZmIsMHgwMSwweDNlLDB4ZDAsMHgwZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZjkgfSwKKyAgMTYsIDB4Yzg0MCwgMCwgezB4MDAsMHgzZSwweGM0LDB4MGYsMHhiMCwweDAxLDB4ZWMsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQ4LDB4MGYsMHhiMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4Yzg1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4Yzg2MCwgMCwgezB4MGMsMHhlMCwweDA3LDB4ZmMsMHgwMCwweGZjLDB4MGEsMHgyNywweDAwLDB4NGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDggfSwKKyAgMTYsIDB4Yzg3MCwgMCwgezB4MzMsMHg4MCwweDBjLDB4ZjAsMHgwMCwweDJjLDB4MDAsMHg1ZiwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMSwweGZjLDB4MDAgfSwKKyAgMTYsIDB4Yzg4MCwgMCwgezB4ZmUsMHgwMCwweDIzLDB4NDAsMHgwZiwweGIwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzg5MCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDg2LDB4MmUsMHhlMCwweDQ4LDB4OGYsMHgwMiwweGVjLDB4MDgsMHhiOCwweGEwLDB4MzYgfSwKKyAgMTYsIDB4YzhhMCwgMCwgezB4MzAsMHg0YiwweGIwLDB4MDMsMHhhYywweDBjLDB4OWIsMHgwMiwweDNjLDB4YTAsMHgwYywweGIwLDB4NDMsMHg2YywweDAwLDB4YjEgfSwKKyAgMTYsIDB4YzhiMCwgMCwgezB4MDAsMHgyOCwweGMwLDB4MGQsMHhiMCwweDEyLDB4ZWMsMHgxMCwweGI5LDB4ODAsMHhhMiwweDYxLDB4MGIsMHhiMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YzhjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OWIsMHg4OCwweDJlLDB4ZTAgfSwKKyAgMTYsIDB4YzhkMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4ZWMsMHgwMSwweGJiLDB4ODAsMHgyNiwweDYyLDB4MGIsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGIzLDB4MDEgfSwKKyAgMTYsIDB4YzhlMCwgMCwgezB4MmEsMHgyMSwweDA4LDB4YjAsMHgxMiwweDJjLDB4MDAsMHhiOCwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgxMiwweGVjLDB4MTQgfSwKKyAgMTYsIDB4YzhmMCwgMCwgezB4YjksMHg4NCwweDIyLDB4YTIsMHgwYiwweGIwLDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzkwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDQsMHg5MywweDAwLDB4MmMsMHhlMCwweDA4LDB4MDAsMHgwMiwweGNjLDB4MDksMHg5MSwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YzkxMCwgMCwgezB4NDAsMHgwYiwweDMwLDB4MDYsMHg0YywweDA0LDB4MTMsMHgwMCwweDI2LDB4MDAsMHgwOCwweDMwLDB4MDIsMHhjYywweDA0LDB4YjIgfSwKKyAgMTYsIDB4YzkyMCwgMCwgezB4MDAsMHgyYSwweGMwLDB4MDEsMHgzMCwweDAwLDB4Y2QsMHgwMCwweGIwLDB4MDAsMHgyMCwweDgwLDB4MGIsMHgzMCwweDBhLDB4MDIgfSwKKyAgMTYsIDB4YzkzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZGIsMHgyNCwweDZlLDB4YzAgfSwKKyAgMTYsIDB4Yzk0MCwgMCwgezB4MmMsMHhhMCwweDAyLDB4ZmMsMHgwMCwweGJhLDB4MDQsMHgyNiwweDQwLDB4NGYsMHhmMCwweDU3LDB4ZmMsMHgwMCwweDNmLDB4MDEgfSwKKyAgMTYsIDB4Yzk1MCwgMCwgezB4M2EsMHgwMCwweDJjLDB4ZjAsMHgwMSwweDNjLDB4MDAsMHhkYiwweDAwLDB4MzMsMHhjMCwweDg0LDB4ZjAsMHgwMywweGZkLDB4MDggfSwKKyAgMTYsIDB4Yzk2MCwgMCwgezB4ZmEsMHgwMCwweDMyLDB4MDAsMHgwZiwweGYwLDB4MDMsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzk3MCwgMCwgezB4YTAsMHgxOSwweGRjLDB4MDAsMHhlYSwweDQwLDB4M2YsMHgwMCwweDA3LDB4YzAsMHgwMywweGZjLDB4MDQsMHhmYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4Yzk4MCwgMCwgezB4NDAsMHgwZiwweGYwLDB4MDMsMHg5YywweDAwLDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZSwweGYwLDB4MDMsMHg3YywweDAwLDB4ZmQgfSwKKyAgMTYsIDB4Yzk5MCwgMCwgezB4MDAsMHgzZiwweGMxLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHg4NCwweGY0LDB4MDAsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4YzlhMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmMCwweDgwLDB4ZmYsMHgwMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YzliMCwgMCwgezB4MGYsMHhjMiwweDAzLDB4M2UsMHgwMCwweGRmLDB4YzAsMHgzZSwweGMwLDB4NGQsMHhkYiwweDAyLDB4YjAsMHhjMCwweGRjLDB4MzAgfSwKKyAgMTYsIDB4YzljMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4ZGIsMHgyMywweGY2LDB4MjAsMHhmZiwweDI2LDB4MzMsMHhlMCwweDBmLDB4NTIsMHgwMywweDVlLDB4MDAgfSwKKyAgMTYsIDB4YzlkMCwgMCwgezB4ZmYsMHg4MCwweDMzLDB4YzAsMHg0YywweDQ5LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzllMCwgMCwgezB4ODAsMHgxMCwweGUxLDB4ZTAsMHhiNywweDA4LDB4MjMsMHhmMCwweDBiLDB4YWQsMHgwYSwweDJlLDB4MDAsMHg5YSwweDA0LDB4MmUgfSwKKyAgMTYsIDB4YzlmMCwgMCwgezB4YjAsMHgwOSwweDhmLDB4MDMsMHhhMCwweDQwLDB4YjksMHgzMCwweDJlLDB4YTAsMHgwYiwweDlmLDB4MDMsMHhhNywweDAwLDB4YmIgfSwKKyAgMTYsIDB4Y2EwMCwgMCwgezB4ODAsMHgyNiwweGUwLDB4MGIsMHhkZCwweDAyLDB4MmUsMHgwMCwweGJiLDB4ODAsMHgyMiwweGY0LDB4MGEsMHg5MiwweDAyLDB4YTAgfSwKKyAgMTYsIDB4Y2ExMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDgwLDB4YjMsMHgxMCwweDI0LDB4YzAgfSwKKyAgMTYsIDB4Y2EyMCwgMCwgezB4MGIsMHg4MCwweDAyLDB4YWMsMHgwMCwweGEzLDB4MjQsMHgyYywweGQwLDB4MDgsMHgxMCwweDA2LDB4YzAsMHg4MCwweGIyLDB4MDEgfSwKKyAgMTYsIDB4Y2EzMCwgMCwgezB4MmMsMHhlYSwweDRiLDB4MDAsMHgxMiwweGMyLDB4MDQsMHhiMywweDEwLDB4MDgsMHhjMCwweDBhLDB4OTAsMHgwMiwweDBjLDB4MDAgfSwKKyAgMTYsIDB4Y2E0MCwgMCwgezB4OTMsMHgwNCwweDI0LDB4YzAsMHgwOSwweDgyLDB4MDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2E1MCwgMCwgezB4YzAsMHgxNSwweGE1LDB4MDAsMHhiYiwweDAwLDB4MjIsMHhjMCwweDBiLDB4ODAsMHgwMiwweGFjLDB4MDgsMHhiYiwweDE4LDB4MmUgfSwKKyAgMTYsIDB4Y2E2MCwgMCwgezB4ZTAsMHgxOCwweDg4LDB4MDIsMHhlYywweDAxLDB4YmEsMHgwMCwweDJlLDB4ODAsMHgwYiwweDk4LDB4ODYsMHhlMiwweDAwLDB4YmIgfSwKKyAgMTYsIDB4Y2E3MCwgMCwgezB4MDAsMHgyMiwweGM0LDB4MGIsMHg5MCwweDAyLDB4NmMsMHgwMCwweGJiLDB4MDAsMHhhNiwweGMwLDB4MGIsMHg5MCwweDAwLDB4YjAgfSwKKyAgMTYsIDB4Y2E4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlNywweDAwLDB4ZmIsMHgwMCwweGIyLDB4YzAgfSwKKyAgMTYsIDB4Y2E5MCwgMCwgezB4MGYsMHhhOCwweDAzLDB4YWMsMHgwMiwweGViLDB4MDAsMHgzZSwweDYwLDB4MGQsMHg5ZSwweDAzLDB4ZWMsMHgwMCwweGQ4LDB4NDAgfSwKKyAgMTYsIDB4Y2FhMCwgMCwgezB4M2UsMHg0MCwweDBmLDB4ODgsMHg0MywweGUyLDB4MDAsMHhmYiwweDIwLDB4MzIsMHhjMCwweDBmLDB4MTAsMHgwYiwweDZmLDB4OTAgfSwKKyAgMTYsIDB4Y2FiMCwgMCwgezB4NWIsMHg4MiwweDM2LDB4YzAsMHgyZCwweDA4LDB4MDEsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2FjMCwgMCwgezB4ZTAsMHgwMSwweGI3LDB4MDgsMHhmNywweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjksMHgwMywweDdjLDB4MDgsMHhjZiwweDgyLDB4M2MgfSwKKyAgMTYsIDB4Y2FkMCwgMCwgezB4MDAsMHhhZiwweGQwLDB4MjEsMHhiYywweDA4LDB4ZmQsMHgxMCwweDNmLDB4ODAsMHg4ZiwweGMwLDB4MDMsMHhhNCwweDAwLDB4ZjcgfSwKKyAgMTYsIDB4Y2FlMCwgMCwgezB4MDEsMHhiZiwweGMwLDB4MDcsMHhkMCwweDAzLDB4YmQsMHgzMCwweGZmLDB4YTQsMHgzOCwweGMwLDB4MGUsMHhkYSwweDAzLDB4ZjggfSwKKyAgMTYsIDB4Y2FmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhOCwweDAwLDB4ZmIsMHgwMCwweGIyLDB4YzEgfSwKKyAgMTYsIDB4Y2IwMCwgMCwgezB4MGUsMHg4MSwweDAzLDB4ZWMsMHg0MCwweGZiLDB4NDQsMHgzYSwweGMxLDB4MGUsMHg5NSwweDAzLDB4ZTAsMHgwMCwweGNiLDB4NDEgfSwKKyAgMTYsIDB4Y2IxMCwgMCwgezB4MzIsMHg0ZCwweDBmLDB4ODEsMHgwMywweGUwLDB4MjAsMHhjOSwweDAwLDB4NzIsMHhlOCwweDQ0LDB4OTEsMHgwMywweDZkLDB4MDAgfSwKKyAgMTYsIDB4Y2IyMCwgMCwgezB4Y2IsMHgwMiwweDNlLDB4YzAsMHgwYywweDgwLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2IzMCwgMCwgezB4YzgsMHgwNSwweDI0LDB4MDAsMHhiZiwweDAwLDB4MzMsMHhjNCwweDA4LDB4MWQsMHgwMywweDhjLDB4MDAsMHhiYiwweDk4LDB4MzYgfSwKKyAgMTYsIDB4Y2I0MCwgMCwgezB4NDgsMHg0ZCwweDk4LDB4MjIsMHhlZCwweDQwLDB4ZGIsMHgwMCwweDM2LDB4YjAsMHgwYiwweDk4LDB4MDIsMHhlMywweDAwLDB4ZGIgfSwKKyAgMTYsIDB4Y2I1MCwgMCwgezB4MDAsMHgzMiwweGUwLDB4ODgsMHhkOCwweDAyLDB4MmMsMHgwMiwweGMzLDB4ODAsMHgyZiwweGMwLDB4MDgsMHg5MCwweDAzLDB4NzIgfSwKKyAgMTYsIDB4Y2I2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg0NCwweDAwLDB4YjMsMHgwMCwweDIwLDB4ZjAgfSwKKyAgMTYsIDB4Y2I3MCwgMCwgezB4MTgsMHgwOCwweDAyLDB4NGYsMHg4NCwweGIxLDB4YzAsMHgyNCwweGMwLDB4ODksMHgwNiwweDAyLDB4YzQsMHgwMCwweDkxLDB4MDAgfSwKKyAgMTYsIDB4Y2I4MCwgMCwgezB4MjAsMHhmMCwweDFiLDB4MTgsMHg4MiwweGM2LDB4MDAsMHg5MywweDAwLDB4MmMsMHhkMSwweDA4LDB4MWUsMHgwMiwweDBlLDB4NDQgfSwKKyAgMTYsIDB4Y2I5MCwgMCwgezB4OTMsMHg5NCwweDJjLDB4YzAsMHgwOCwweDIwLDB4MDIsMHhiOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2JhMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDQsMHhiNywweDgwLDB4MjAsMHhlMiwweDA4LDB4NjgsMHgwNiwweDllLDB4ODAsMHhiZiwweDg0LDB4MjUgfSwKKyAgMTYsIDB4Y2JiMCwgMCwgezB4YTgsMHgwOSwweDY4LDB4MDIsMHhjNiwweDAwLDB4OTMsMHhhMCwweDY1LDB4ZTQsMHgwYiwweDc4LDB4MTIsMHhkZSwweDAwLDB4OTMgfSwKKyAgMTYsIDB4Y2JjMCwgMCwgezB4MDAsMHhhMSwweGUwLDB4MDgsMHhkOCwweDAyLDB4MWUsMHhkMCwweGE3LDB4ODAsMHgyZCwweGUwLDB4MDgsMHhmOCwweDAyLDB4NDggfSwKKyAgMTYsIDB4Y2JkMCwgMCwgezB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4YjMsMHgyMCwweDMwLDB4YzAgfSwKKyAgMTYsIDB4Y2JlMCwgMCwgezB4MGEsMHgyMiwweDAyLDB4Y2UsMHg0MCwweGYzLDB4YTAsMHgzYywweGU4LDB4MGIsMHgzMCwweDAyLDB4YzEsMHgwMCwweGQwLDB4YzEgfSwKKyAgMTYsIDB4Y2JmMCwgMCwgezB4MzAsMHhjMCwweDBiLDB4MjEsMHgxMywweGNjLDB4MjEsMHhkMywweDAwLDB4MmMsMHhjMCwweDJjLDB4MTAsMHgwYiwweDBjLDB4ODAgfSwKKyAgMTYsIDB4Y2MwMCwgMCwgezB4ZDMsMHg2MSwweDNjLDB4YzgsMHgyYywweDIwLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2MxMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDQwLDB4M2IsMHhjMCwweDBmLDB4ZTAsMHgwMywweGZjLDB4MDAsMHhmNywweDUwLDB4N2YgfSwKKyAgMTYsIDB4Y2MyMCwgMCwgezB4YzQsMHgyZSwweGYwLDB4MDMsMHhmYywweDQwLDB4ZmUsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4NDcsMHhmYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4Y2MzMCwgMCwgezB4MDAsMHg3ZCwweGMyLDB4MGYsMHhkMCwweDAxLDB4YmMsMHg4MCwweDVmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4Y2M0MCwgMCwgezB4MDIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZmIsMHhjMCwweDMyLDB4YzggfSwKKyAgMTYsIDB4Y2M1MCwgMCwgezB4MGUsMHhlMCwweDAzLDB4YWMsMHhhMCwweGViLDB4MjAsMHgzMiwweDQwLDB4OGMsMHhhMCwweDEzLDB4MmMsMHgwMCwweGQ5LDB4MDAgfSwKKyAgMTYsIDB4Y2M2MCwgMCwgezB4M2UsMHg2MCwweDBjLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYSwweDgwLDB4MzAsMHhjMCwweDNjLDB4OTIsMHgwMywweGVmLDB4NjAgfSwKKyAgMTYsIDB4Y2M3MCwgMCwgezB4YzMsMHgyMCwweDMxLDB4YzQsMHgwYywweGEwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2M4MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHgzMywweDIwLDB4MjEsMHhkYSwweDBiLDB4NzAsMHg0MywweDljLDB4MDEsMHhiNSwweDAwLDB4MjEgfSwKKyAgMTYsIDB4Y2M5MCwgMCwgezB4MDAsMHgwYSwweGUwLDB4MDIsMHgxYywweDAwLDB4YjcsMHgwMCwweDJmLDB4YzAsMHgwZCwweDcwLDB4MDMsMHg5YywweDAwLDB4YjYgfSwKKyAgMTYsIDB4Y2NhMCwgMCwgezB4MDAsMHgzMSwweGM4LDB4MDgsMHg1NywweDAyLDB4ZGMsMHgwMCwweDg3LDB4NTAsMHgyMSwweGMwLDB4MGEsMHg3MCwweDQyLDB4OTIgfSwKKyAgMTYsIDB4Y2NiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDExLDB4YjcsMHg5MCwweDIxLDB4ZTAgfSwKKyAgMTYsIDB4Y2NjMCwgMCwgezB4MGIsMHg2OCwweDgyLDB4ZGUsMHgwOCwweGE3LDB4ODAsMHgyNCwweDYwLDB4MDgsMHg3MCwweDEyLDB4MTIsMHgwOCwweDk1LDB4ODAgfSwKKyAgMTYsIDB4Y2NkMCwgMCwgezB4MmQsMHg2MCwweDA5LDB4NmMsMHgwMiwweGRlLDB4MDAsMHhiMSwweDgwLDB4MjMsMHhlMCwweDBhLDB4NTgsMHg2MiwweGZlLDB4MDAgfSwKKyAgMTYsIDB4Y2NlMCwgMCwgezB4OTcsMHhhMCwweDIxLDB4ZTgsMHgwOSwweGU4LDB4MDIsMHgzMCwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2NmMCwgMCwgezB4NDgsMHgxNCwweGNkLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDhiLDB4M2MsMHgwMiwweDhjLDB4MDAsMHhiYiwweDAwLDB4MjQgfSwKKyAgMTYsIDB4Y2QwMCwgMCwgezB4YzQsMHgxYSwweDNkLDB4MDIsMHgyZiwweDg4LDB4YjMsMHg0OCwweDJjLDB4ZTAsMHg4OSwweDNlLDB4MDIsMHg4ZCwweDgwLDB4OTMgfSwKKyAgMTYsIDB4Y2QxMCwgMCwgezB4ZDksMHhhNCwweDQwLDB4ODgsMHgxMCwweDAyLDB4Y2MsMHgwNCwweDkzLDB4YzgsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4OTIgfSwKKyAgMTYsIDB4Y2QyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDQwLDB4ZmEsMHgwMCwweGIyLDB4ODAgfSwKKyAgMTYsIDB4Y2QzMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGVhLDB4ODAsMHgzNywweGEwLDB4MGMsMHhlOCwweDEzLDB4M2IsMHgwOCwweGRlLDB4MDEgfSwKKyAgMTYsIDB4Y2Q0MCwgMCwgezB4M2YsMHg4MiwweDBjLDB4ZTAsMHg0MywweGZhLDB4ODAsMHhmZSwweDgwLDB4MzEsMHgyOCwweDBjLDB4YTAsMHgwMywweGYwLDB4MDIgfSwKKyAgMTYsIDB4Y2Q1MCwgMCwgezB4YzQsMHhjMCwweGIyLDB4ODAsMHgwZCwweGUwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2Q2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBiLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCwweDMwLDB4M2EgfSwKKyAgMTYsIDB4Y2Q3MCwgMCwgezB4MDAsMHg2ZCwweDgwLDB4ODMsMHhlMSwweDQ0LDB4YjgsMHgwNCwweDNlLDB4MTAsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4Y2Q4MCwgMCwgezB4MDAsMHgzYSwweDEwLDB4NGYsMHgwNCwweDAzLDB4ZTMsMHgwMCwweGU4LDB4MTAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4Y2Q5MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzksMHgwMCwweDM4LDB4NDAgfSwKKyAgMTYsIDB4Y2RhMCwgMCwgezB4MGYsMHgxYSwweDAzLDB4MmUsMHgwMCwweGZiLDB4YTAsMHgzNiwweDYwLDB4MGMsMHg5OCwweDAzLDB4ZTYsMHgwNCwweGQxLDB4MDAgfSwKKyAgMTYsIDB4Y2RiMCwgMCwgezB4MzYsMHg0OCwweDBlLDB4OTEsMHgwMiwweGU2LDB4MDAsMHhmOSwweDAwLDB4M2UsMHgwMCwweDBjLDB4OTksMHgwMywweDYyLDB4NDAgfSwKKyAgMTYsIDB4Y2RjMCwgMCwgezB4ZjgsMHgwMCwweGEwLDB4NjgsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2RkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDIsMHg4OSwweDA0LDB4MmUsMHg2NCwweDg4LDB4OTQsMHgwMiwweGE1LDB4MDAsMHhiOSwweDgwLDB4MjAgfSwKKyAgMTYsIDB4Y2RlMCwgMCwgezB4NjQsMHgwZCwweDljLDB4MDIsMHhlNiwweDQyLDB4ODksMHgwMCwweDIyLDB4NjAsMHgwYiwweDljLDB4MDIsMHhlNCwweDEwLDB4YjkgfSwKKyAgMTYsIDB4Y2RmMCwgMCwgezB4NDAsMHgzYSwweDUwLDB4MDgsMHg5YywweDAyLDB4MjcsMHgyMCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4Y2UwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAgfSwKKyAgMTYsIDB4Y2UxMCwgMCwgezB4MGEsMHg5MCwweDgyLDB4MjUsMHg0YywweGI5LDB4MDAsMHgwMiwweDQwLDB4MDgsMHg5NiwweDAyLDB4ZTQsMHgxMCwweDg5LDB4MDAgfSwKKyAgMTYsIDB4Y2UyMCwgMCwgezB4MjYsMHg1MCwweDEzLDB4OTQsMHgwMiwweGU0LDB4NDAsMHhiOSwweDA4LDB4MmUsMHg0MCwweDA4LDB4OTAsMHg4YSwweDI0LDB4MDAgfSwKKyAgMTYsIDB4Y2UzMCwgMCwgezB4YjksMHgwMSwweDJhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2U0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4ODAsMHg4MSwweDQwLDB4MmMsMHhjOCwweDA4LDB4MTAsMHgwNiwweDg0LDB4MDAsMHhiMSwweDA0LDB4MjAgfSwKKyAgMTYsIDB4Y2U1MCwgMCwgezB4NDksMHgwOSwweDE0LDB4NDIsMHhjYywweDg5LDB4ODEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4NDYsMHhjNCwweDAwLDB4YjEgfSwKKyAgMTYsIDB4Y2U2MCwgMCwgezB4MDAsMHgyYSwweGMwLDB4MjgsMHgxNCwweDAyLDB4MDEsMHgwMSwweGIwLDB4MDQsMHgyOCwweDQwLDB4MzgsMHg5NCwweDAyLDB4NDIgfSwKKyAgMTYsIDB4Y2U3MCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ODgsMHgwMCwweDNhLDB4MDAgfSwKKyAgMTYsIDB4Y2U4MCwgMCwgezB4MGUsMHg4MCwweDIzLDB4MjAsMHgwMCwweGY4LDB4NTAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDEyLDB4ZTEsMHg0MCwweGQ4LDB4NTAgfSwKKyAgMTYsIDB4Y2U5MCwgMCwgezB4MzYsMHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCwweDBjLDB4ODAsMHg1MywweDYwLDB4MDQgfSwKKyAgMTYsIDB4Y2VhMCwgMCwgezB4ZjgsMHgwMCwweDNhLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2ViMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4NDAsMHhmOSwweDQ0LDB4M2UsMHg0NCwweDBmLDB4ZDQsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2YgfSwKKyAgMTYsIDB4Y2VjMCwgMCwgezB4NDQsMHgwZiwweGQ0LDB4NTMsMHhmNCwweDQ0LDB4ZmQsMHgxMCwweDJmLDB4NDAsMHgwZiwweGY0LDB4MDMsMHhmZCwweDAwLDB4ZmQgfSwKKyAgMTYsIDB4Y2VkMCwgMCwgezB4NDAsMHgzYiwweDEwLDB4MGYsMHhkNCwweDIzLDB4ZDEsMHgwNCwweDdjLDB4NDMsMHgzNiwweDUwLDB4MGYsMHg1MCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4Y2VlMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNiwweDAwLDB4ZjksMHgxMCwweDJlLDB4NjIgfSwKKyAgMTYsIDB4Y2VmMCwgMCwgezB4MGYsMHhkMiwweDgzLDB4ZTQsMHgwMCwweGJkLDB4NDIsMHgzZSwweDYxLDB4MGYsMHhkMCwweDAzLDB4ZjYsMHhjMCwweGM5LDB4YTIgfSwKKyAgMTYsIDB4Y2YwMCwgMCwgezB4MmIsMHg0MCwweDBjLDB4ZDAsMHgwMywweDM0LDB4MDAsMHhmOSwweDgxLDB4M2UsMHg2OCwweDA4LDB4YzEsMHg0MywweGZhLDB4MDAgfSwKKyAgMTYsIDB4Y2YxMCwgMCwgezB4ZjUsMHg4MCwweDNmLDB4NjIsMHgwYywweDE0LDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2YyMCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MjAsMHg4OCwweDExLDB4MmUsMHgxMCwweDBiLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDgyLDB4MmUgfSwKKyAgMTYsIDB4Y2YzMCwgMCwgezB4MTAsMHgwYiwweDgwLDB4MDAsMHhlMywweGM0LDB4ODgsMHhmMCwweDIyLDB4MDAsMHgwYiwweDgwLDB4MGEsMHgyMCwweDAwLDB4ZTggfSwKKyAgMTYsIDB4Y2Y0MCwgMCwgezB4NDAsMHgyZiwweDE0LDB4MDgsMHg4OCwweDAyLDB4ZTIsMHgwMCwweGI4LDB4MDAsMHgyZSwweDAwLDB4MDgsMHg4OCwweDAyLDB4OGUgfSwKKyAgMTYsIDB4Y2Y1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHhjNSwweDAwLDB4YTEsMHgwMCwweDJjLDB4NDAgfSwKKyAgMTYsIDB4Y2Y2MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzQsMHgxOCwweGIxLDB4MjIsMHg2YywweGQxLDB4MGIsMHgxMCwweDI2LDB4YzQsMHgwMCwweDgxLDB4MDggfSwKKyAgMTYsIDB4Y2Y3MCwgMCwgezB4MmEsMHg0MCwweDg4LDB4MTAsMHgwMiwweDA0LDB4MDQsMHhiNSwweGMwLDB4MGYsMHg0MCwweDBiLDB4MDIsMHgwMiwweDQxLDB4YTAgfSwKKyAgMTYsIDB4Y2Y4MCwgMCwgezB4YjEsMHg0MCwweDJjLDB4NDAsMHgwOCwweDEyLDB4MDIsMHgwMiwweDExLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2Y5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4OSwweDA2LDB4MmUsMHg0MCwweDBiLDB4OTAsMHgxMiwweGU0LDB4MDAsMHhiOSwweDQwLDB4MmUgfSwKKyAgMTYsIDB4Y2ZhMCwgMCwgezB4NDAsMHgwYiwweGIwLDB4ODIsMHhjNCwweDAyLDB4ODksMHg0NCwweDIyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgyNCwweDAwLDB4YTkgfSwKKyAgMTYsIDB4Y2ZiMCwgMCwgezB4MDAsMHgyNywweDQ4LDB4MDksMHhiMCwweDEyLDB4ZWMsMHgxOCwweGI5LDB4MDEsMHgyZSwweDQwLDB4NDAsMHg5MCwweDAyLDB4ODYgfSwKKyAgMTYsIDB4Y2ZjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDg0LDB4ZTksMHgwMSwweDNlLDB4NDAgfSwKKyAgMTYsIDB4Y2ZkMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDcyLDB4MGYsMHg5MCwweDAzLDB4ZTcsMHg2MCwweDg5LDB4MTAgfSwKKyAgMTYsIDB4Y2ZlMCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDQ0LDB4M2MsMHg0MCwweDJkLDB4OTAsMHgwMywweGU3LDB4NjAgfSwKKyAgMTYsIDB4Y2ZmMCwgMCwgezB4ZjksMHg3MSwweDNlLDB4NDAsMHgyOCwweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDAwMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4NDgsMHhhOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4OWEsMHg0MywweGVjLDB4MDAsMHhmOSwweDIwLDB4N2UgfSwKKyAgMTYsIDB4ZDAxMCwgMCwgezB4YzgsMHgwZiwweDlhLDB4MDcsMHg2NiwweDAwLDB4NzksMHg4MCwweDdlLDB4NDAsMHgwZiwweDFjLDB4MDMsMHhlNywweDAwLDB4ZTkgfSwKKyAgMTYsIDB4ZDAyMCwgMCwgezB4YTAsMHgzZSwweDQwLDB4NDYsMHg4MCwweDAzLDB4ZTAsMHgyMCwweGY5LDB4MDAsMHgzYywweDQwLDB4MGYsMHg5MCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4ZDAzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MCwweDAwLDB4ZjgsMHgwMCwweDNhLDB4MDAgfSwKKyAgMTYsIDB4ZDA0MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YTAsMHgwOCwweGU4LDB4NDAsMHgzYSwweDEwLDB4MGMsMHg4MywweDAzLDB4YTEsMHhjMCwweGYwLDB4NDAgfSwKKyAgMTYsIDB4ZDA1MCwgMCwgezB4M2UsMHgwNiwweDBmLDB4ODQsMHgwMywweGUxLDB4MDAsMHhmOCwweDAwLDB4M2IsMHgwMCwweDBmLDB4ODEsMHgwMywweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZDA2MCwgMCwgezB4ZjgsMHgxMCwweGIyLDB4MDAsMHg0YywweDgwLDB4MGIsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDA3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHhiYSwweDAwLDB4MmUsMHhiMCwweDBiLDB4ZTgsMHgwMiwweGU5LDB4MDAsMHgzZSwweDkwLDB4MDIgfSwKKyAgMTYsIDB4ZDA4MCwgMCwgezB4ODEsMHgwOCwweGU0LDB4MTIsMHg3OCwweDAwLDB4YmEsMHgwMCwweDJkLDB4YjAsMHg4OSwweGU4LDB4MjIsMHhmOCwweDBjLDB4YmEgfSwKKyAgMTYsIDB4ZDA5MCwgMCwgezB4MDAsMHg2ZSwweDgwLDB4MDMsMHhjNSwweDAzLDB4MzAsMHgwMCwweGJhLDB4MDAsMHgyMiwweGE4LDB4MDgsMHhhMCwweDIyLDB4OGEgfSwKKyAgMTYsIDB4ZDBhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDI4LDB4ZTggfSwKKyAgMTYsIDB4ZDBiMCwgMCwgezB4MWIsMHgzMSwweDEyLDB4OGMsMHhjNCwweGEzLDB4OTIsMHgyYywweDQwLDB4ODgsMHgzNCwweDA2LDB4OGUsMHgwMCwweDkzLDB4MDAgfSwKKyAgMTYsIDB4ZDBjMCwgMCwgezB4MmMsMHhmMCwweDE5LDB4MzEsMHhhMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjgsMHg4MCwweDAxLDB4MzgsMHgwMiwweDRjLDB4MDAgfSwKKyAgMTYsIDB4ZDBkMCwgMCwgezB4YjMsMHg4MCwweDIwLDB4ZTAsMHgwYSwweGIwLDB4MTIsMHgwMiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDBlMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDAsMHhiNywweDE0LDB4MmQsMHg0MiwweDBiLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhiNywweDgxLDB4MjcgfSwKKyAgMTYsIDB4ZDBmMCwgMCwgezB4ZTAsMHgxOCwweDYwLDB4MDIsMHg1OCwweDE4LDB4YjcsMHgyMiwweDJkLDB4ODAsMHgwOSwweDcwLDB4MjIsMHhkYywweDAwLDB4YjcgfSwKKyAgMTYsIDB4ZDEwMCwgMCwgezB4MDAsMHgyZCwweDgwLDB4MGIsMHgzYiwweDAyLDB4MWQsMHhkMCwweGJmLDB4ODAsMHgyOCwweGMwLDB4OGEsMHhmMiwweDAyLDB4YTAgfSwKKyAgMTYsIDB4ZDExMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZiwweDgwLDB4ZjcsMHhhMCwweDM5LDB4ZTIgfSwKKyAgMTYsIDB4ZDEyMCwgMCwgezB4MGYsMHg2OCwweDAzLDB4OWUsMHgwMCwweGVkLDB4ODQsMHgzZCwweGUyLDB4NDQsMHg3OCwweDAzLDB4OWUsMHgwMCwweGY3LDB4YjQgfSwKKyAgMTYsIDB4ZDEzMCwgMCwgezB4MmQsMHhlMCwweDBkLDB4NjgsMHgwMywweGQ2LDB4MDAsMHhmNiwweDgwLDB4MzksMHhlMCwweDBmLDB4NzksMHgwMywweDVlLDB4OTAgfSwKKyAgMTYsIDB4ZDE0MCwgMCwgezB4ZjcsMHg4MSwweDMxLDB4NjAsMHgyZSwweDdjLDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDE1MCwgMCwgezB4MDgsMHgxZCwweGFkLDB4MDAsMHhmYiwweDQyLDB4M2UsMHhjOCwweDBmLDB4YTAsMHgwMywweGVkLDB4YTAsMHhiYiwweDAwLDB4MzggfSwKKyAgMTYsIDB4ZDE2MCwgMCwgezB4YzgsMHgwZiwweGIwLDB4MDMsMHg2OCwweDAwLDB4ZmIsMHgxMSwweDNlLDB4NDAsMHgwOSwweGIwLDB4NDEsMHhlYywweDAwLDB4ZmEgfSwKKyAgMTYsIDB4ZDE3MCwgMCwgezB4MDIsMHgzZSwweGMwLDB4MGYsMHhiMiwweDBiLDB4ZWQsMHg4MCwweDNiLDB4MDAsMHgzNiwweDQwLDB4MGQsMHhiMCwweDIzLDB4NDIgfSwKKyAgMTYsIDB4ZDE4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDAwLDB4Y2YsMHhkMCwweDMzLDB4ZTQgfSwKKyAgMTYsIDB4ZDE5MCwgMCwgezB4NGYsMHhmOSwweDAzLDB4ZGUsMHg0MCwweGRjLDB4ODAsMHgzNiwweGU0LDB4MGMsMHhiOSwweDEzLDB4ZmUsMHgwMCwweGNmLDB4OTAgfSwKKyAgMTYsIDB4ZDFhMCwgMCwgezB4MzcsMHhlNSwweDBmLDB4ZjgsMHg0MywweGZlLDB4MDAsMHhjZiwweDkyLDB4M2YsMHhhNCwweDBmLDB4NzgsMHgwMywweDFmLDB4MDAgfSwKKyAgMTYsIDB4ZDFiMCwgMCwgezB4YzUsMHg4MCwweDMzLDB4NjAsMHgwYywweGY4LDB4MjAsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDFjMCwgMCwgezB4YTgsMHgxMSwweGJjLDB4MDAsMHgwZiwweDEwLDB4MjEsMHg4MSwweDBiLDB4NjAsMHgwMywweDg0LDB4MDAsMHg4YiwweDA4LDB4MjEgfSwKKyAgMTYsIDB4ZDFkMCwgMCwgezB4NjAsMHgwYSwweDdiLDB4MDMsMHg5OCwweDAwLDB4OGIsMHgxMCwweDI5LDB4ODQsMHgwZSwweDY0LDB4MjIsMHhkYywweDQwLDB4ZDcgfSwKKyAgMTYsIDB4ZDFlMCwgMCwgezB4MDIsMHgyZCwweDg0LDB4MGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg1LDB4MTgsMHgyMSwweDQwLDB4MGEsMHhmMCwweDIyLDB4YWEgfSwKKyAgMTYsIDB4ZDFmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTcsMHgxNCwweDY5LDB4YzAgfSwKKyAgMTYsIDB4ZDIwMCwgMCwgezB4MWEsMHg2MCwweDEyLDB4ZmMsMHgwMSwweGE0LDB4MTAsMHgyZCwweGMwLDB4MGEsMHg1MiwweDAyLDB4NDUsMHg0MCwweDg3LDB4MGMgfSwKKyAgMTYsIDB4ZDIxMCwgMCwgezB4MjEsMHg4MCwweDFiLDB4NjAsMHg4MiwweGQ0LDB4MDAsMHg4NiwweDAzLDB4MjUsMHhlMCwweDFiLDB4NzAsMHgwMiwweDVjLDB4NDAgfSwKKyAgMTYsIDB4ZDIyMCwgMCwgezB4OWQsMHgwMCwweDI5LDB4NDAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDIzMCwgMCwgezB4MjAsMHgxNCwweGNkLDB4MDAsMHhhMywweDAwLDB4MjgsMHhjMCwweDFiLDB4MjAsMHgyMiwweDhjLDB4MTEsMHhhMywweDAwLDB4NjggfSwKKyAgMTYsIDB4ZDI0MCwgMCwgezB4ZjYsMHgwYSwweDNjLDB4MDYsMHg4MiwweDAwLDB4ODMsMHg4MCwweDI4LDB4ODQsMHgwYSwweDhjLDB4ODIsMHhjYywweDQ0LDB4OTIgfSwKKyAgMTYsIDB4ZDI1MCwgMCwgezB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4NGUsMHgwMCwweDkxLDB4MDAsMHgyOCwweDQwLDB4MGEsMHgzMCwweDAyLDB4ODggfSwKKyAgMTYsIDB4ZDI2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZSwweDIyLDB4ZWYsMHgwNCwweGJhLDB4YzAgfSwKKyAgMTYsIDB4ZDI3MCwgMCwgezB4MGYsMHgxNCwweDkzLDB4ZWMsMHgwMiwweGYxLDB4YzMsMHgzZSwweGYwLDB4MGUsMHg5MCwweDgzLDB4NjYsMHgwMCwweGNmLDB4ZDIgfSwKKyAgMTYsIDB4ZDI4MCwgMCwgezB4MzIsMHg1MCwweDBmLDB4OWMsMHgwMywweGNiLDB4MDAsMHhjOSwweDgwLDB4M2UsMHgyOCwweDBmLDB4YjAsMHgwMywweDRmLDB4MDAgfSwKKyAgMTYsIDB4ZDI5MCwgMCwgezB4ZDEsMHhjMCwweGFhLDB4YzAsMHgwYywweDcxLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDJhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MjAsMHhkYiwweDAwLDB4MjYsMHg4MCwweDBmLDB4YTAsMHgwMywweGVjLDB4MDgsMHgxYiwweDAwLDB4MzYgfSwKKyAgMTYsIDB4ZDJiMCwgMCwgezB4YzAsMHgwZiwweDg2LDB4MDEsMHhlNSwweDQwLDB4ZmIsMHgwMiwweDNhLDB4NDgsMHgwZSwweDk0LDB4MDMsMHhlYywweDgwLDB4ZjEgfSwKKyAgMTYsIDB4ZDJjMCwgMCwgezB4ODQsMHgzZSwweDAwLDB4NGYsMHhiMCwweDAzLDB4YWQsMHhjMCwweGViLDB4MjAsMHgzNiwweGMwLDB4MGYsMHhiMCwweDIzLDB4ZTAgfSwKKyAgMTYsIDB4ZDJkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4Y2YsMHgwMCwweDNmLDB4NjAgfSwKKyAgMTYsIDB4ZDJlMCwgMCwgezB4MGMsMHhlMCwweDgzLDB4M2UsMHg4MCwweGVkLDB4MDgsMHgzMywweGQwLDB4OGYsMHg1MCwweDAzLDB4OWUsMHgwMCwweGRmLDB4MDAgfSwKKyAgMTYsIDB4ZDJmMCwgMCwgezB4MzMsMHg0MCwweDBjLDB4YzAsMHgwMywweDMwLDB4MDAsMHhjYywweDEwLDB4MzMsMHg2OCwweDBjLDB4ZjAsMHgwMywweDNjLDB4ODQgfSwKKyAgMTYsIDB4ZDMwMCwgMCwgezB4OGQsMHg5MCwweDMwLDB4NDAsMHgwYywweGYwLDB4MDMsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDMxMCwgMCwgezB4ODEsMHgwNCwweDZjLDB4MDAsMHg4YiwweDAyLDB4MmMsMHhmNCwweDA4LDB4YTgsMHg2MiwweDBjLDB4ODAsMHg4YiwweDgwLDB4MmEgfSwKKyAgMTYsIDB4ZDMyMCwgMCwgezB4NjAsMHgwZiwweDljLDB4MDIsMHgyZSwweDAwLDB4OGIsMHgwMCwweDIwLDB4NjAsMHgwZCwweDk4LDB4MDIsMHgyYywweDgwLDB4ZDggfSwKKyAgMTYsIDB4ZDMzMCwgMCwgezB4MDAsMHgxNCwweDQwLDB4MDgsMHgzNCwweDEyLDB4MmUsMHgwMCwweDhiLDB4ODIsMHgzMiwweDQwLDB4MGQsMHhiMCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4ZDM0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4ZDAgfSwKKyAgMTYsIDB4ZDM1MCwgMCwgezB4MDgsMHhiOCwweDAyLDB4MmMsMHgwMCwweDhhLDB4ODQsMHgyMiwweGMwLDB4MGIsMHg4OCwweDAyLDB4ZTQsMHhhMCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4ZDM2MCwgMCwgezB4MjIsMHg2MiwweDBhLDB4OTgsMHgwMiwweDI4LDB4MDAsMHg4OSwweDAwLDB4MjIsMHgwMCwweDBhLDB4YjEsMHgwNiwweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZDM3MCwgMCwgezB4YWIsMHgwMCwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHg2MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDM4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDIsMHhhMywweDAwLDB4MmMsMHhjMSwweDA4LDB4MjAsMHgwMiwweDBjLDB4MDIsMHg4YiwweDAwLDB4MjggfSwKKyAgMTYsIDB4ZDM5MCwgMCwgezB4YzIsMHgwYSwweDAwLDB4MDIsMHg0NCwweDEwLDB4ODMsMHgxMCwweDIyLDB4NDAsMHgwYiwweDEwLDB4MDYsMHgwYywweDAwLDB4OTEgfSwKKyAgMTYsIDB4ZDNhMCwgMCwgezB4MDQsMHhhYSwweDAwLDB4MjgsMHgzMCwweDAyLDB4MmMsMHgwMCwweGExLDB4MDEsMHgyMCwweDQwLDB4MDksMHhiMCwweDAyLDB4NDIgfSwKKyAgMTYsIDB4ZDNiMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4OGYsMHgwMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ZDNjMCwgMCwgezB4MmMsMHhhMCwweDAzLDB4MjksMHg0MCwweGE4LDB4NDAsMHgzMiwweGNjLDB4OGIsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGNmLDB4NDAgfSwKKyAgMTYsIDB4ZDNkMCwgMCwgezB4MzIsMHgwMCwweDBlLDB4ODAsMHgwYSwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjIsMHg0MCwweDBjLDB4YjAsMHgwMywweDJjLDB4MDQgfSwKKyAgMTYsIDB4ZDNlMCwgMCwgezB4ZWIsMHgwMCwweGIyLDB4NDAsMHg4YywweGIwLDB4MDMsMHg0MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDNmMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZTAsMHgwMywweGZjLDB4ODAsMHhmZiwweDI4LDB4M2QgfSwKKyAgMTYsIDB4ZDQwMCwgMCwgezB4YzAsMHgwYiwweGMxLDB4MDMsMHhiMCwweDE0LDB4ZmYsMHgwMCwweDNmLDB4MDAsMHgwZCwweGQwLDB4MDMsMHhkYywweDAwLDB4ZmMgfSwKKyAgMTYsIDB4ZDQxMCwgMCwgezB4MDAsMHgzNywweDQwLDB4MGYsMHhmMCwweDIxLDB4ZmMsMHgwMCwweDFkLDB4MDAsMHg3YiwweDQwLDB4OGYsMHhmMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4ZDQyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkMiwweDAwLDB4ZGYsMHgwMCwweDMxLDB4YTAgfSwKKyAgMTYsIDB4ZDQzMCwgMCwgezB4NGQsMHhmMCwweDQzLDB4MzIsMHgwMCwweGNlLDB4MTQsMHgxYiwweDY4LDB4MGUsMHhkYSwweDIzLDB4YjIsMHhjMCwweDJmLDB4MDAgfSwKKyAgMTYsIDB4ZDQ0MCwgMCwgezB4M2YsMHhjMiwweDJjLDB4ZTgsMHgwMywweDNjLDB4NDAsMHhmZCwweDA4LDB4M2IsMHhjOCwweDRjLDB4ZjAsMHg4MywweDNjLDB4YTAgfSwKKyAgMTYsIDB4ZDQ1MCwgMCwgezB4Y2YsMHgwMCwweDMzLDB4YzQsMHgwYywweGYzLDB4MDcsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQ2MCwgMCwgezB4ODAsMHgxMCwweGUyLDB4MDAsMHg4ZiwweGMwLDB4MjIsMHhhMCwweDA4LDB4ZmQsMHg0MiwweDJmLDB4MDAsMHg4YiwweDcwLDB4MjIgfSwKKyAgMTYsIDB4ZDQ3MCwgMCwgezB4MWUsMHg0OCwweDg5LDB4MDIsMHgyNywweGMwLDB4OGYsMHg1YSwweDJlLDB4NTAsMHg0OCwweDMwLDB4MDIsMHhiZCwweGMwLDB4YmQgfSwKKyAgMTYsIDB4ZDQ4MCwgMCwgezB4NDAsMHgyMywweGM1LDB4NDgsMHhmNCwweDgyLDB4M2QsMHgyYywweDg3LDB4NzAsMHgyMiwweGMwLDB4MDgsMHhmMSwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4ZDQ5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlMCwweDAwLDB4OTMsMHgxMCwweDI2LDB4ODEgfSwKKyAgMTYsIDB4ZDRhMCwgMCwgezB4NDksMHgzMCwweDAyLDB4ODAsMHg0MCwweDgzLDB4MjAsMHgyOCwweDQwLDB4MGEsMHgxMCwweDAyLDB4ODAsMHgwMCwweGEzLDB4MjQgfSwKKyAgMTYsIDB4ZDRiMCwgMCwgezB4MmMsMHhjYSwweDA4LDB4MzIsMHg4MiwweDBjLDB4MDAsMHg5MSwweDI4LDB4MjAsMHhjYSwweDFiLDB4MzIsMHgwMiwweDBjLDB4ODggfSwKKyAgMTYsIDB4ZDRjMCwgMCwgezB4ODMsMHgwOSwweDIwLDB4YzgsMHgwOSwweDMyLDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDRkMCwgMCwgezB4YzAsMHgxNSwweGEzLDB4MTQsMHg4YiwweDA0LDB4MjYsMHg4OSwweDA4LDB4YjAsMHgwMiwweGFjLDB4MjIsMHg4YiwweDg4LDB4MmEgfSwKKyAgMTYsIDB4ZDRlMCwgMCwgezB4MjAsMHgwOCwweDk4LDB4ODIsMHhhNiwweDEwLDB4YWIsMHgwMCwweDJlLDB4Y2EsMHgwOCwweGIwLDB4ODIsMHhhYywweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZDRmMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MjksMHhiMCwweDBhLDB4MmMsMHgwMSwweDhiLDB4MDAsMHgyMiwweGMwLDB4MDksMHhiMCwweDIyLDB4ZjAgfSwKKyAgMTYsIDB4ZDUwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMywweDAwLDB4ZGIsMHgwMCwweDM0LDB4ZTIgfSwKKyAgMTYsIDB4ZDUxMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4YTMsMHgwMCwweGNhLDB4ODAsMHhiYSwweDcwLDB4MGUsMHg4OCwweDAzLDB4YTYsMHgwMCwweGViLDB4MDAgfSwKKyAgMTYsIDB4ZDUyMCwgMCwgezB4M2UsMHg5MCwweDBjLDB4YjUsMHgwMywweDJjLDB4MDAsMHhmYiwweDEwLDB4YmEsMHhjMCwweDBlLDB4YjAsMHgwMywweDJjLDB4MDIgfSwKKyAgMTYsIDB4ZDUzMCwgMCwgezB4Y2IsMHgwMiwweDMyLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDU0MCwgMCwgezB4ZTAsMHgwMSwweGIwLDB4MDgsMHhmZiwweDAwLDB4YmIsMHhlMCwweDBmLDB4NzAsMHgwMywweDY1LDB4MDAsMHhmNCwweDAwLDB4MzUgfSwKKyAgMTYsIDB4ZDU1MCwgMCwgezB4NDAsMHgwZiwweDQwLDB4MDMsMHg1NCwweDAwLDB4ZGYsMHgwMCwweDNlLDB4NDAsMHgwZiwweGY4LDB4MDMsMHhlYywweDAwLDB4ZjcgfSwKKyAgMTYsIDB4ZDU2MCwgMCwgezB4MDEsMHgzZCwweGMxLDB4MGUsMHgzMCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGUsMHhmMCwweDAzLDB4YjggfSwKKyAgMTYsIDB4ZDU3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMCwweDQwLDB4ZWIsMHgwOCwweDNlLDB4ODAgfSwKKyAgMTYsIDB4ZDU4MCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzYSwweDUxLDB4MGYsMHg4MiwweDAzLDB4NjQsMHgyMCwweGRiLDB4MDAgfSwKKyAgMTYsIDB4ZDU5MCwgMCwgezB4M2QsMHg4MiwweDBjLDB4YmMsMHgwMywweDJjLDB4MTAsMHhkYiwweDAwLDB4NzIsMHhjMCwweDBkLDB4YjEsMHgwMywweDBjLDB4MjAgfSwKKyAgMTYsIDB4ZDVhMCwgMCwgezB4ZDMsMHgwMCwweDMyLDB4YzAsMHgwZiwweGIwLDB4MGIsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDViMCwgMCwgezB4YzgsMHgwNSwweDAxLDB4MDAsMHg4NywweGMwLDB4MmUsMHhhOCwweDA4LDB4ZjEsMHgxMiwweGM1LDB4NDAsMHg4OCwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZDVjMCwgMCwgezB4NDAsMHgwYiwweDg0LDB4MDIsMHgyNywweDAwLDB4YWYsMHgwMCwweDJlLDB4YzAsMHgwOCwweGJjLDB4MTIsMHgzYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4ZDVkMCwgMCwgezB4MDEsMHgyMywweGMwLDB4MjgsMHhmNSwweDRhLDB4M2QsMHgyOCwweGRmLDB4MDAsMHgzMywweGMwLDB4NGIsMHhmMCwweDAzLDB4MzIgfSwKKyAgMTYsIDB4ZDVlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OCwweDgwLDB4YTMsMHg5MCwweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZDVmMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4YzEsMHgwMCwweDkyLDB4MDQsMHgyOCwweDAwLDB4MGIsMHgxNCwweDEyLDB4NDMsMHgwMCwweGIzLDB4MDQgfSwKKyAgMTYsIDB4ZDYwMCwgMCwgezB4MmMsMHgzMCwweDBhLDB4YjAsMHgwYSwweDhjLDB4MDAsMHg5MywweDAwLDB4NjAsMHhjMCwweDA4LDB4M2MsMHgwNiwweDBlLDB4MDEgfSwKKyAgMTYsIDB4ZDYxMCwgMCwgezB4YjMsMHgwMCwweDJlLDB4YzAsMHg4YiwweDMwLDB4MDYsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDYyMCwgMCwgezB4MjAsMHgwMSwweDEyLDB4MDAsMHg4NywweDgwLDB4MmQsMHgyNCwweDA4LDB4NzgsMHgwMiwweGQyLDB4MDAsMHg5NSwweDgwLDB4MjEgfSwKKyAgMTYsIDB4ZDYzMCwgMCwgezB4YTAsMHgwYiwweDY4LDB4MDIsMHg1YSwweDIwLDB4ODcsMHg4MCwweDJkLDB4NjYsMHgxYSwweDdjLDB4MDIsMHg5ZSwweDAwLDB4ODcgfSwKKyAgMTYsIDB4ZDY0MCwgMCwgezB4ODAsMHgyMSwweGUxLDB4MTgsMHg3OSwweDAyLDB4OWUsMHg0MCwweGI3LDB4ODAsMHhhMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4NDggfSwKKyAgMTYsIDB4ZDY1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwMCwweDAwLDB4ZTMsMHhhMCwweDNjLDB4NDAgfSwKKyAgMTYsIDB4ZDY2MCwgMCwgezB4MGMsMHgzMCwweDAzLDB4YzQsMHgyMiwweGQ5LDB4MDAsMHgzOCwweGQ0LDB4MGYsMHgzMCwweDgzLDB4NjgsMHg0MCwweGYzLDB4MDAgfSwKKyAgMTYsIDB4ZDY3MCwgMCwgezB4M2MsMHg4MCwweDBhLDB4MzIsMHgwMiwweDhjLDB4MDAsMHhkYiwweDAwLDB4YTIsMHhjNCwweDBjLDB4MzAsMHgwMywweDBjLDB4MDAgfSwKKyAgMTYsIDB4ZDY4MCwgMCwgezB4ZjMsMHgwMCwweDNjLDB4YzAsMHgwZiwweGIxLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDY5MCwgMCwgezB4NDAsMHgwZCwweGIwLDB4MDAsMHhmZiwweDEwLDB4M2YsMHg0MCwweDBlLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZCwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZDZhMCwgMCwgezB4YzAsMHgwZiwweDMwLDB4MTMsMHhiYywweDQwLDB4N2YsMHgxMCwweDNmLDB4YzEsMHgyZCwweGYwLDB4MDMsMHg3YywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4ZDZiMCwgMCwgezB4NDAsMHgzZiwweGMyLDB4MGUsMHhmNCwweDgzLDB4N2MsMHgwMCwweGRmLDB4MDAsMHgzZiwweGMyLDB4MGYsMHhmMCwweDAzLDB4OTAgfSwKKyAgMTYsIDB4ZDZjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZGIsMHhhMCwweDMyLDB4YzAgfSwKKyAgMTYsIDB4ZDZkMCwgMCwgezB4MGQsMHhiNywweDAzLDB4ZTAsMHgwMCwweGNhLDB4MDQsMHgzZSwweDgwLDB4MGYsMHhiOCwweDAzLDB4MmMsMHgxMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4ZDZlMCwgMCwgezB4MzMsMHgwMCwweDhkLDB4YjAsMHgwMywweDJjLDB4ODAsMHhlOSwweDQwLDB4M2UsMHhkMiwweDBmLDB4YjQsMHgwMywweDJkLDB4ODAgfSwKKyAgMTYsIDB4ZDZmMCwgMCwgezB4ZWIsMHgyMCwweGIyLDB4YzAsMHgwZiwweGIyLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDcwMCwgMCwgezB4NDgsMHgxMSwweDkwLDB4MDAsMHhiNywweDEwLDB4MTEsMHhjMCwweDA4LDB4NzAsMHg4MiwweGQ4LDB4MGEsMHg4NywweDAxLDB4MmQgfSwKKyAgMTYsIDB4ZDcxMCwgMCwgezB4ODAsMHg4OSwweDcwLDB4MDMsMHhkOCwweDA4LDB4YjcsMHgwYSwweDIxLDB4NDAsMHgyYywweDcwLDB4MDIsMHgwZCwweGMwLDB4ODUgfSwKKyAgMTYsIDB4ZDcyMCwgMCwgezB4MDEsMHg3OSwweGM4LDB4MGIsMHgzMiwweDAyLDB4MGQsMHgyMCwweDhmLDB4MjgsMHgyMSwweGMwLDB4MGIsMHg3MiwweDgyLDB4ZDIgfSwKKyAgMTYsIDB4ZDczMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4NDAsMHg5NiwweDEwLDB4OTcsMHg5MCwweDIzLDB4ZTAgfSwKKyAgMTYsIDB4ZDc0MCwgMCwgezB4MDksMHg3YSwweDAyLDB4ZDYsMHgwMCwweDk3LDB4ODAsMHgyZCwweGYwLDB4MGIsMHg3OCwweDgyLDB4MWUsMHgwMCwweGIzLDB4YjAgfSwKKyAgMTYsIDB4ZDc1MCwgMCwgezB4MjEsMHhhMCwweDA4LDB4NzgsMHgwMiwweDFlLDB4MDAsMHhhNSwweDgwLDB4MmQsMHhlMCwweDBiLDB4N2EsMHgwMiwweDFlLDB4ODAgfSwKKyAgMTYsIDB4ZDc2MCwgMCwgezB4YTcsMHhiMCwweDIxLDB4ZTgsMHgwYiwweDc5LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDc3MCwgMCwgezB4NDgsMHgxNCwweGMwLDB4MDAsMHhiMywweDAwLDB4MjAsMHhlMiwweDA4LDB4MzAsMHgwMiwweGM2LDB4NDAsMHg5MywweDcwLDB4MmMgfSwKKyAgMTYsIDB4ZDc4MCwgMCwgezB4YzAsMHgwOSwweDNjLDB4MDIsMHg4ZSwweDAwLDB4YjMsMHgwMCwweDIwLDB4ZDgsMHgwOCwweDE4LDB4MDIsMHgwYywweDAwLDB4ODEgfSwKKyAgMTYsIDB4ZDc5MCwgMCwgezB4OTAsMHgyZSwweGMwLDB4MGIsMHgzMCwweDJhLDB4MmMsMHgxMCwweDgzLDB4MDAsMHhhMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4ZDdhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTEsMHhiOSwweDAwLDB4ZGEsMHgwMiwweDMzLDB4YjggfSwKKyAgMTYsIDB4ZDdiMCwgMCwgezB4MGQsMHhhMCwweDAzLDB4ZjgsMHgwMCwweGRlLDB4YzAsMHgzZiwweGIwLDB4NGYsMHhlYywweDA2LDB4MzgsMHg0MCwweGZhLDB4MDAgfSwKKyAgMTYsIDB4ZDdjMCwgMCwgezB4YjMsMHg5MCwweDBjLDB4NmMsMHgwYiwweDI4LDB4MDgsMHhlYSwweDAxLDB4N2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDI4LDB4MDAgfSwKKyAgMTYsIDB4ZDdkMCwgMCwgezB4ZWEsMHgwMCwweDMyLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDdlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDQwLDB4M2EsMHgwMCwweDBmLDB4ODQsMHgwMywweGUxLDB4MDAsMHhlOCwweDAyLDB4M2UgfSwKKyAgMTYsIDB4ZDdmMCwgMCwgezB4MDAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDQwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4ZDgwMCwgMCwgezB4MDAsMHgzYSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ZDgxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDIwLDB4ZjksMHhjMCwweDNlLDB4NzAgfSwKKyAgMTYsIDB4ZDgyMCwgMCwgezB4MGUsMHg5MCwweDAyLDB4ZTQsMHg4MCwweGM5LDB4MDAsMHgzMiwweDQyLDB4MGMsMHg5OCwweDgzLDB4YTQsMHg4NCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4ZDgzMCwgMCwgezB4YjIsMHg2MCwweDBjLDB4OTAsMHg4MywweDI0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4MWEsMHgwMiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4ZDg0MCwgMCwgezB4YzEsMHgwMCwweGIyLDB4NDAsMHgwZiwweDkwLDB4MDEsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDg1MCwgMCwgezB4ODAsMHgwNCwweDY1LDB4MDAsMHhiOSwweDgxLDB4MmMsMHg2MCwweDBkLDB4OTQsMHhjMiwweGM3LDB4MDgsMHg4OSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZDg2MCwgMCwgezB4NDAsMHgwOCwweDk1LDB4YzcsMHhhNCwweDAwLDB4YjksMHgwMCwweDI4LDB4NzAsMHhhOCwweDk0LDB4MGEsMHgyNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZDg3MCwgMCwgezB4MDQsMHgyZSwweDQwLDB4MjgsMHg5MCwweDJhLDB4MjYsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZDg4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHg0MCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4ZDg5MCwgMCwgezB4MGEsMHg5MCwweDAyLDB4ZTUsMHgwMCwweDgxLDB4MDAsMHhhMCwweDQwLDB4MDksMHg5MCwweDQyLDB4ZWMsMHgwMCwweGIxLDB4MDAgfSwKKyAgMTYsIDB4ZDhhMCwgMCwgezB4MjIsMHg1OCwweDA4LDB4OTAsMHhhMiwweDA0LDB4MDIsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4YTAgfSwKKyAgMTYsIDB4ZDhiMCwgMCwgezB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDhjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4MDAsMHhiMSwweDIwLDB4MmUsMHhjMCwweDg5LDB4MTIsMHgwMiwweGM0LDB4ODAsMHg4MSwweDIwLDB4MjAgfSwKKyAgMTYsIDB4ZDhkMCwgMCwgezB4NDAsMHg2MSwweDEwLDB4NDIsMHhjNSwweDAwLDB4YjEsMHgyMCwweDI4LDB4NDgsMHgxOCwweDkwLDB4NDIsMHgwNCwweDgwLDB4ODEgfSwKKyAgMTYsIDB4ZDhlMCwgMCwgezB4MjgsMHgyYywweDQ4LDB4MDgsMHgxMiwweDgyLDB4ODQsMHhhMCwweDgxLDB4MjAsMHgyMCwweDQ4LDB4MGIsMHgxMiwweDgyLDB4YzIgfSwKKyAgMTYsIDB4ZDhmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAgfSwKKyAgMTYsIDB4ZDkwMCwgMCwgezB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwOCwweGM4LDB4NTAsMHgzMiwweDE0LDB4MGQsMHg4MCwweDE3LDB4ZTgsMHgwNCwweGY4LDB4NTAgfSwKKyAgMTYsIDB4ZDkxMCwgMCwgezB4MzIsMHgxNCwweDRjLDB4MDUsMHgwYiwweDIxLDB4NDAsMHhjOCwweDIwLDB4M2UsMHgwMCwweDBjLDB4ODcsMHgwMywweGExLDB4YzIgfSwKKyAgMTYsIDB4ZDkyMCwgMCwgezB4YzgsMHgwMCwweDMyLDB4MTQsMHg4ZiwweDgyLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDkzMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4MDAsMHhmMSwweDEwLDB4M2QsMHg0MCwweDBmLDB4OTEsMHgwMiwweGQ0LDB4NDIsMHhmZCwweDEwLDB4M2YgfSwKKyAgMTYsIDB4ZDk0MCwgMCwgezB4NTEsMHgwZSwweDU0LDB4MTMsMHhiNSwweDAwLDB4ZjksMHgxMCwweDM1LDB4NDQsMHgyZiwweGQwLDB4MDMsMHhlNCwweDUwLDB4ZmQgfSwKKyAgMTYsIDB4ZDk1MCwgMCwgezB4MjgsMHgzZSwweDRlLDB4MGYsMHg5MCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MzgsMHgzZSwweDQ0LDB4MGYsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4ZDk2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNCwweDAwLDB4ZmQsMHgwMCwweDNkLDB4NDAgfSwKKyAgMTYsIDB4ZDk3MCwgMCwgezB4MmMsMHhkMCwweDAzLDB4YjYsMHgwMCwweGY5LDB4ODIsMHgzZSwweDQwLDB4MGMsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGY5LDB4ODAgfSwKKyAgMTYsIDB4ZDk4MCwgMCwgezB4MzMsMHg3MCwweDBjLDB4NTAsMHgwMywweDM0LDB4MDAsMHhjOSwweGMwLDB4M2UsMHg0MCwweDBjLDB4ZGEsMHgwMywweDE2LDB4ODAgfSwKKyAgMTYsIDB4ZDk5MCwgMCwgezB4YzksMHg0MCwweDNlLDB4NjIsMHgyYywweDk4LDB4ODMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDlhMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgwMCwweDA4LDB4ODAsMHgwMiwweDI4LDB4MDAsMHhiOCwweDUwLDB4MjYgfSwKKyAgMTYsIDB4ZDliMCwgMCwgezB4MDAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDAwLDB4YjgsMHgwMCwweDJhLDB4MzQsMHgyYSwweGFhLDB4MGEsMHgyMCwweDAwLDB4ODggfSwKKyAgMTYsIDB4ZDljMCwgMCwgezB4YzAsMHgyZSwweDJhLDB4MDgsMHg4MCwweDIyLDB4MjEsMHgwMCwweGE4LDB4ODAsMHgyZSwweDAwLDB4MDgsMHg4MCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4ZDlkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4ZDllMCwgMCwgezB4NDgsMHgxMCwweDA2LDB4OGQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwLDB4MjgsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4NDAgfSwKKyAgMTYsIDB4ZDlmMCwgMCwgezB4MmMsMHg0OCwweDA4LDB4MTAsMHg4MiwweDQ0LDB4MDAsMHg4MSwweDYwLDB4MmMsMHg0MCwweDI4LDB4MTQsMHgwYSwweDA0LDB4NDAgfSwKKyAgMTYsIDB4ZGEwMCwgMCwgezB4ODEsMHgyMCwweDJjLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGExMCwgMCwgezB4MTgsMHgwNSwweGE0LDB4NDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4YjAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDI4LDB4MmUgfSwKKyAgMTYsIDB4ZGEyMCwgMCwgezB4NTAsMHgwOCwweDkwLDB4MjIsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NjAsMHgwYiwweDEyLDB4NDIsMHg2NCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZGEzMCwgMCwgezB4MDAsMHgyYywweDQwLDB4MDksMHg5MCwweDAyLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyYywweDQwLDB4MDgsMHgxMCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4ZGE0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDIgfSwKKyAgMTYsIDB4ZGE1MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YTcsMHg0MCwweGY5LDB4NDAsMHgzZSwweDcwLDB4MGMsMHg5OCwweDAyLDB4ZTUsMHg0MCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4ZGE2MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTgsMHgwMywweDY0LDB4MDYsMHhjOSwweDAxLDB4MmUsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDQgfSwKKyAgMTYsIDB4ZGE3MCwgMCwgezB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGE4MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHg4MywweGU2LDB4MTAsMHhmOSwweDAwLDB4MzYgfSwKKyAgMTYsIDB4ZGE5MCwgMCwgezB4NjgsMHgwZiwweDljLDB4MDMsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNhLDB4NDAsMHgwZSwweDk4LDB4OTMsMHhhNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZGFhMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDgzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfSwKKyAgMTYsIDB4ZGFiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDQgfSwKKyAgMTYsIDB4ZGFjMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4MjEsMHgwMiwweGM4LDB4NDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTEsMHgwMCwweGYwLDB4MDAgfSwKKyAgMTYsIDB4ZGFkMCwgMCwgezB4M2UsMHgwMiwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4MDAsMHgwMywweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZGFlMCwgMCwgezB4YzgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGFmMCwgMCwgezB4MjgsMHgxNSwweDNhLDB4MDAsMHhiZSwweDAyLDB4MmYsMHhiMCwweDA4LDB4NjgsMHgxMiwweDM4LDB4MDAsMHg4YSwweDA0LDB4MmEgfSwKKyAgMTYsIDB4ZGIwMCwgMCwgezB4ODAsMHgwYiwweGUwLDB4NDIsMHhmYiwweDIwLDB4YmEsMHgwMCwweDJmLDB4OTEsMHgwOCwweGUwLDB4MDIsMHgyOCwweDAwLDB4YmEgfSwKKyAgMTYsIDB4ZGIxMCwgMCwgezB4MDAsMHgyNiwweDgwLDB4MDgsMHhlZSwweDBhLDB4MzgsMHgwMCwweDhhLDB4MDAsMHgyMiwweDgwLDB4MGIsMHhhMCwweDAyLDB4OGEgfSwKKyAgMTYsIDB4ZGIyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MiwweDAwLDB4YjMsMHgwMCwweDJjLDB4YzIgfSwKKyAgMTYsIDB4ZGIzMCwgMCwgezB4MjgsMHgzOCwweDBhLDB4NDgsMHgwMCwweDgzLDB4MDQsMHgyMiwweGMwLDB4MGIsMHgxMCwweDAyLDB4Y2QsMHg4MCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4ZGI0MCwgMCwgezB4MmUsMHhjMCwweDA4LDB4MWMsMHgwMiwweDI0LDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzQsMHgxMiwweDBlLDB4NDAgfSwKKyAgMTYsIDB4ZGI1MCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MTIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGI2MCwgMCwgezB4YTAsMHgwMSwweDExLDB4MDAsMHhiNywweDAwLDB4MmYsMHhjMCwweDA4LDB4NzAsMHhhMiwweDRlLDB4MDAsMHg4ZiwweGIwLDB4MjEgfSwKKyAgMTYsIDB4ZGI3MCwgMCwgezB4Y2MsMHgwYiwweDYwLDB4MTIsMHhkYywweDEwLDB4YjcsMHgzMCwweDJkLDB4YzAsMHgwOCwweGQwLDB4ODIsMHgxNCwweDgwLDB4YjcgfSwKKyAgMTYsIDB4ZGI4MCwgMCwgezB4MTIsMHgyNSwweGM4LDB4MjgsMHg2MCwweDAyLDB4MTQsMHgwMCwweDg3LDB4YjIsMHgyMSwweGNjLDB4MGIsMHgzMSwweDAyLDB4YTggfSwKKyAgMTYsIDB4ZGI5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4ZjcsMHg4MCwweDNkLDB4ZTAgfSwKKyAgMTYsIDB4ZGJhMCwgMCwgezB4MGMsMHgzOCwweDAzLDB4NTYsMHgwMCwweGM3LDB4OTAsMHhiMSwweGU0LDB4MGYsMHg3OCwweDAzLDB4ZGUsMHgwMCwweGY3LDB4OTAgfSwKKyAgMTYsIDB4ZGJiMCwgMCwgezB4MWYsMHg2MCwweDJjLDB4NDgsMHgwYiwweDE2LDB4YTAsMHhmNywweDgwLDB4M2MsMHhmNCwweDBjLDB4MzgsMHgwMywweDFlLDB4MDAgfSwKKyAgMTYsIDB4ZGJjMCwgMCwgezB4Y2YsMHhhMCwweGIxLDB4ZTgsMHgwZiwweDdiLDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGJkMCwgMCwgezB4MDgsMHgwZCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBiLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmMywweDIxLDB4M2UgfSwKKyAgMTYsIDB4ZGJlMCwgMCwgezB4YzgsMHgwNywweGIwLDB4MDIsMHhlNCwweDAwLDB4ZmIsMHgyMCwweDNmLDB4NDAsMHgwZiwweDgwLDB4MDMsMHhlNCwweDgwLDB4ZmIgfSwKKyAgMTYsIDB4ZGJmMCwgMCwgezB4MDAsMHgzNiwweGQwLDB4MGYsMHhhMCwweDAzLDB4ZTAsMHgwOCwweGZiLDB4NDIsMHgzZSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZGMwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmMCwweDgwLDB4Y2YsMHg4MCwweDMxLDB4ZTEgfSwKKyAgMTYsIDB4ZGMxMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4ZGEsMHgxMCwweGVmLDB4ODAsMHgzZiwweGU0LDB4MGYsMHhkOCwweDAzLDB4ZmUsMHgxMCwweGZmLDB4ODIgfSwKKyAgMTYsIDB4ZGMyMCwgMCwgezB4M2YsMHhlMCwweDRjLDB4ZDgsMHgxYiwweDE2LDB4MjAsMHhjZiwweDgwLDB4M2YsMHhlMCwweDRjLDB4ZDgsMHgzMCwweGVlLDB4NDAgfSwKKyAgMTYsIDB4ZGMzMCwgMCwgezB4ZmYsMHhjMCwweGIzLDB4ZjQsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGM0MCwgMCwgezB4YTgsMHgwMSwweDk4LDB4MjAsMHg4MywweDQwLDB4MjEsMHhjMCwweDA4LDB4NzEsMHgwMiwweGRjLDB4ODQsMHg4NywweDIwLDB4MmQgfSwKKyAgMTYsIDB4ZGM1MCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MDIsMHhkOSwweDYwLDB4ZjcsMHgwMCwweDJkLDB4YzAsMHgwOCwweGYwLDB4ODIsMHgxNCwweDA0LDB4ODcgfSwKKyAgMTYsIDB4ZGM2MCwgMCwgezB4MDAsMHgyZCwweGMwLDB4MDgsMHhmMCwweDAzLDB4MWUsMHgwMCwweGI3LDB4MjAsMHgyMSwweGMwLDB4OGIsMHg3MCwweDAyLDB4ZWEgfSwKKyAgMTYsIDB4ZGM3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiMCwweDAwLDB4ODcsMHgwMCwweDIxLDB4ODAgfSwKKyAgMTYsIDB4ZGM4MCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZjUsMHgwNCwweDI3LDB4MDAsMHgyZCwweGMwLDB4OGIsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MDAgfSwKKyAgMTYsIDB4ZGM5MCwgMCwgezB4MmMsMHg1MCwweDA4LDB4NDAsMHgwMiwweDE0LDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDA4LDB4NTAsMHgwMiwweDVjLDB4MDQgfSwKKyAgMTYsIDB4ZGNhMCwgMCwgezB4YjcsMHgwMCwweGExLDB4YzAsMHg4YiwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGNiMCwgMCwgezB4MjAsMHgxNCwweGM4LDB4MDAsMHg4MCwweDAwLDB4MDAsMHg4MCwweDA4LDB4MzAsMHgwMiwweGNlLDB4MDAsMHg4MywweGMwLDB4MmMgfSwKKyAgMTYsIDB4ZGNjMCwgMCwgezB4ZDAsMHg0YiwweDMwLDB4MDIsMHhjZSwweDAwLDB4YWIsMHgwMiwweDJjLDB4NDAsMHg0OCwweGJjLDB4MDIsMHgwNCwweDAwLDB4ODMgfSwKKyAgMTYsIDB4ZGNkMCwgMCwgezB4MDAsMHgyYywweGMwLDB4MDgsMHgxMCwweDAyLDB4MDAsMHgwOCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MDksMHgzMCwweDAyLDB4YzggfSwKKyAgMTYsIDB4ZGNlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4MywweDQwLDB4YzgsMHgwMCwweDMwLDB4YzAgfSwKKyAgMTYsIDB4ZGNmMCwgMCwgezB4MmMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGVmLDB4ODgsMHgzZiwweGU2LDB4MDcsMHhiMSwweDgzLDB4ZTEsMHgwMCwweGJmLDB4MDAgfSwKKyAgMTYsIDB4ZGQwMCwgMCwgezB4M2UsMHhlMCwweDBjLDB4YjgsMHgwMywweDM0LDB4MDAsMHhjZiwweDAwLDB4M2YsMHhjMCwweDJjLDB4YjAsMHgwMywweDY4LDB4MTAgfSwKKyAgMTYsIDB4ZGQxMCwgMCwgezB4ZmYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGQyMCwgMCwgezB4ODAsMHgwMCwweGU0LDB4MDAsMHhmMSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGVkLDB4NDAsMHhmYiwweDA4LDB4M2UgfSwKKyAgMTYsIDB4ZGQzMCwgMCwgezB4YzAsMHgwZiwweGEwLDB4MDMsMHhlNSwweDIwLDB4ZmIsMHgwMCwweDNlLDB4ZTAsMHgwZCwweGIwLDB4ODMsMHhlNCwweDAwLDB4ZjMgfSwKKyAgMTYsIDB4ZGQ0MCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4YzQsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGYsMHgzMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4ZGQ1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4Y2EsMHgwMCwweDMzLDB4ZTAgfSwKKyAgMTYsIDB4ZGQ2MCwgMCwgezB4NGUsMHhmMCwweDAzLDB4MzQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhlOCwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDAgfSwKKyAgMTYsIDB4ZGQ3MCwgMCwgezB4YjEsMHg0MCwweDBjLDB4ZTAsMHgwMywweDM0LDB4MDAsMHhlZiwweDAwLDB4YjMsMHhjMCwweDBjLDB4ZjAsMHgwMywweDM4LDB4MDAgfSwKKyAgMTYsIDB4ZGQ4MCwgMCwgezB4Y2YsMHgwMCwweDNkLDB4YzAsMHgwYSwweGYwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGQ5MCwgMCwgezB4ODEsMHgwNCwweDYyLDB4MjIsMHg4OCwweDkwLDB4MjIsMHhlMCwweDA4LDB4M2MsMHgwMiwweDJlLDB4MDgsMHhiYiwweDAxLDB4MmUgfSwKKyAgMTYsIDB4ZGRhMCwgMCwgezB4YzAsMHgwYiwweGEwLDB4MDIsMHg2NiwweDAwLDB4YmIsMHgwMCwweDIyLDB4YTAsMHgwOCwweGE5LDB4MDIsMHgyNCwweDAwLDB4YmIgfSwKKyAgMTYsIDB4ZGRiMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MjgsMHgyYywweDAyLDB4YTIsMHgwMCwweGRiLDB4MDAsMHgyZSwweGMwLDB4MGEsMHhiMCwweDAyLDB4YTAgfSwKKyAgMTYsIDB4ZGRjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyMiwweDAwLDB4OTgsMHgwMCwweDIyLDB4YzggfSwKKyAgMTYsIDB4ZGRkMCwgMCwgezB4MGEsMHg5OCwweDAyLDB4MjcsMHgwNCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMSwweDAyLDB4ZTIsMHgwMCwweGJiLDB4MDAgfSwKKyAgMTYsIDB4ZGRlMCwgMCwgezB4MjIsMHhlMiwweDA4LDB4YjAsMHgwMiwweGE0LDB4MDAsMHhhYiwweDAwLDB4MjAsMHhjMCwweDBhLDB4ODgsMHg4MiwweDIzLDB4MDAgfSwKKyAgMTYsIDB4ZGRmMCwgMCwgezB4OGIsMHgwMCwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhhMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGUwMCwgMCwgezB4MDgsMHgxNCwweDA0LDB4MDAsMHg5MSwweDQwLDB4MjIsMHhjMCwweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MmMgfSwKKyAgMTYsIDB4ZGUxMCwgMCwgezB4YzAsMHg0YiwweDI4LDB4MjIsMHg0MCwweDA0LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgyOCwweDMwLDB4MGEsMHgwNCwweDA0LDB4YjMgfSwKKyAgMTYsIDB4ZGUyMCwgMCwgezB4MDAsMHg2MCwweGMwLDB4MDgsMHgwMCwweDAyLDB4ODQsMHgyMCwweDkzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgzMCwweDAyLDB4ODIgfSwKKyAgMTYsIDB4ZGUzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg2MCwweDAwLDB4ZGEsMHg0MCwweGIyLDB4ODAgfSwKKyAgMTYsIDB4ZGU0MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhhMCwweDAzLDB4ZTAsMHgwOSwweGZmLDB4MDAgfSwKKyAgMTYsIDB4ZGU1MCwgMCwgezB4MzIsMHg0MCwweDA4LDB4YTAsMHgwYiwweDM0LDB4MDAsMHhlYiwweDAwLDB4MzEsMHhjMCwweDBjLDB4ODAsMHgwMywweDI4LDB4ODAgfSwKKyAgMTYsIDB4ZGU2MCwgMCwgezB4YzcsMHgwMCwweDNmLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGU3MCwgMCwgezB4YTAsMHgxNSwweGQwLDB4MDAsMHhlYywweDIwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwYiwweGZjLDB4MTAsMHhmZiwweDAxLDB4M2YgfSwKKyAgMTYsIDB4ZGU4MCwgMCwgezB4YzAsMHgwZiwweGUwLDB4MDMsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmNCwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4ZGU5MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4NGYsMHhjMCwweDAxLDB4ZjAsMHgwOCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZGVhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4Y2MsMHg5MCwweDM3LDB4MjAgfSwKKyAgMTYsIDB4ZGViMCwgMCwgezB4MGUsMHhmMCwweDEzLDB4YmQsMHgwNCwweGQ0LDB4YzEsMHgzMywweDJjLDB4NGMsMHhkOSwweDIzLDB4MzIsMHg2MCwweGZmLDB4MjAgfSwKKyAgMTYsIDB4ZGVjMCwgMCwgezB4M2QsMHhlMCwweDRmLDB4YzEsMHgwMywweGI2LDB4NDAsMHhjZCwweDAwLDB4MzcsMHhlMCwweDBjLDB4ZTIsMHg4YiwweDEwLDB4YzAgfSwKKyAgMTYsIDB4ZGVkMCwgMCwgezB4Y2QsMHgwMCwweDMzLDB4YzYsMHgwZiwweGQ4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGVlMCwgMCwgezB4ODAsMHgxMCwweGVlLDB4MDgsMHg4YSwweDIwLDB4MjIsMHgwMCwweDA4LDB4YjcsMHgwMiwweDJkLDB4MDAsMHg4YSwweDAwLDB4YjYgfSwKKyAgMTYsIDB4ZGVmMCwgMCwgezB4M2MsMHgwOCwweDk5LDB4MDIsMHgyNywweDg0LDB4YmYsMHg2OCwweDJlLDB4ODIsMHgwYiwweDAxLDB4MDIsMHgyNCwweDQwLDB4ZDkgfSwKKyAgMTYsIDB4ZGYwMCwgMCwgezB4NDIsMHgyMCwweGMwLDB4OGEsMHhhYywweDAyLDB4MmQsMHhjMiwweDgyLDB4NDgsMHhhMiwweGQwLDB4MGIsMHg4MiwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZGYxMCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4ODgsMHgwNCwweDI2LDB4ODAgfSwKKyAgMTYsIDB4ZGYyMCwgMCwgezB4MmEsMHgzMCwweGMyLDB4YTUsMHg4MCwweGE5LDB4MjEsMHgyOCwweDAwLDB4OGEsMHgwMCwweDAyLDB4MDAsMHgwMCwweGEzLDB4MTAgfSwKKyAgMTYsIDB4ZGYzMCwgMCwgezB4MmMsMHhjOCwweDBiLDB4MDAsMHgwMiwweGM0LDB4OTAsMHg4MywweDQyLDB4MjQsMHhjMSwweDA4LDB4MDAsMHgwMiwweDQwLDB4ODggfSwKKyAgMTYsIDB4ZGY0MCwgMCwgezB4YTMsMHg2MCwweGE4LDB4YzAsMHgwYiwweDAwLDB4YzIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGY1MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDYsMHg4YSwweDAwLDB4MjIsMHhlMCwweDQ4LDB4YjAsMHgwMiwweDJlLDB4MDIsMHhhYiwweDgwLDB4MmUgfSwKKyAgMTYsIDB4ZGY2MCwgMCwgezB4MjAsMHg0YSwweDhjLDB4MDIsMHgyNiwweDIwLDB4YmIsMHgwMCwweDZlLDB4ODAsMHgwYiwweDMwLDB4YzIsMHg0NiwweDA0LDB4OWIgfSwKKyAgMTYsIDB4ZGY3MCwgMCwgezB4MGEsMHhhMiwweGMwLDB4MGEsMHg4MCwweDEyLDB4NmMsMHg0MCwweGE4LDB4MDAsMHgyYSwweGMwLDB4MGIsMHg4YywweDAyLDB4MzAgfSwKKyAgMTYsIDB4ZGY4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YzEsMHgwOSwweDM2LDB4NjEgfSwKKyAgMTYsIDB4ZGY5MCwgMCwgezB4MGUsMHgzMiwweDAzLDB4YWIsMHgyMCwweGY4LDB4ODQsMHgzYSwweDc4LDB4MmUsMHg5OCwweDAzLDB4MjYsMHgwMCwweGViLDB4MDAgfSwKKyAgMTYsIDB4ZGZhMCwgMCwgezB4M2UsMHg0MCwweDRmLDB4OTAsMHgwMywweGUyLDB4MDAsMHhjOSwweDQwLDB4MzYsMHhlMCwweDBjLDB4YjQsMHgwMywweDZlLDB4MDAgfSwKKyAgMTYsIDB4ZGZiMCwgMCwgezB4ZWIsMHgwMCwweDNhLDB4YzAsMHgwZiwweDg4LDB4MDMsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGZjMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZmEsMHgxMywweGY4LDB4MTAsMHhkYywweDA0LDB4MjcgfSwKKyAgMTYsIDB4ZGZkMCwgMCwgezB4NDAsMHgwZCwweDUwLDB4NDMsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQ5LDB4MDMsMHhiMCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZGZlMCwgMCwgezB4MDEsMHgzZiwweGYwLDB4MGYsMHhmMCwweDIzLDB4YjIsMHgwMCwweGQ0LDB4YTAsMHgzNywweGMwLDB4MGYsMHhjMCwweDBiLDB4ZjggfSwKKyAgMTYsIDB4ZGZmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDIwLDB4ZWIsMHgxMCwweGYyLDB4MDAgfSwKKyAgMTYsIDB4ZTAwMCwgMCwgezB4MGUsMHhiNCwweDAzLDB4MjEsMHg4MCwweGM5LDB4NDAsMHgzYSwweDQ4LDB4MGYsMHg5MCwweDEzLDB4ZTEsMHgyMCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4ZTAxMCwgMCwgezB4M2UsMHhjMCwweDBjLDB4ODQsMHgwMywweDI0LDB4MDAsMHhmYiwweDAxLDB4MzYsMHhlMCwweDBjLDB4NzQsMHgwYiwweDljLDB4MDAgfSwKKyAgMTYsIDB4ZTAyMCwgMCwgezB4Y2YsMHgwMCwweDMyLDB4ZTAsMHgwZiwweDg0LDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTAzMCwgMCwgezB4YzgsMHgwNSwweDFlLDB4MDAsMHg4YiwweDgwLDB4MjAsMHg0MCwweDA4LDB4YjgsMHgwMiwweDgzLDB4ODAsMHg4MSwweGEwLDB4MjIgfSwKKyAgMTYsIDB4ZTA0MCwgMCwgezB4NzgsMHgwYiwweDkxLDB4ODMsMHhlMywweDAwLDB4YmYsMHgwMCwweDBlLDB4YzEsMHgwYSwweGI0LDB4MDMsMHg2NCwweDA0LDB4YjkgfSwKKyAgMTYsIDB4ZTA1MCwgMCwgezB4NTAsMHgzMiwweGMwLDB4MGEsMHhiMiwweDAyLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMywweGQ0LDB4MGIsMHg4OCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4ZTA2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDQyLDB4YTAsMHg4MCwweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZTA3MCwgMCwgezB4NDgsMHgwMCwweDAyLDB4MGQsMHgwNiwweDgwLDB4ODAsMHgyYSwweGQwLDB4MDMsMHgwMCwweDAyLDB4YzgsMHgwMCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4ZTA4MCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MzYsMHgwMiwweDQwLDB4MDAsMHhiOSwweDAyLDB4MjIsMHhjMiwweDhiLDB4MjYsMHgwMiwweDBjLDB4MTAgfSwKKyAgMTYsIDB4ZTA5MCwgMCwgezB4MDEsMHgwMiwweDI0LDB4YzAsMHg0YiwweGExLDB4MDIsMHhmOCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBhMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDgsMHg4ZSwweDgwLDB4MjEsMHgyMSwweDA4LDB4MjgsMHhjMiwweDllLDB4MDAsMHg4ZSwweDgwLDB4MjEgfSwKKyAgMTYsIDB4ZTBiMCwgMCwgezB4NjAsMHgwYiwweDc4LDB4MDIsMHg5ZSwweDIwLDB4YjcsMHg4MiwweDJmLDB4YTEsMHgwYSwweDc4LDB4MDIsMHg1ZSwweDAwLDB4YjUgfSwKKyAgMTYsIDB4ZTBjMCwgMCwgezB4OTEsMHhhMSwweGUwLDB4MGIsMHgyOSwweDAyLDB4MzIsMHg0NCwweDg2LDB4ODAsMHhhNSwweGUwLDB4MGIsMHg0YywweDAyLDB4YzggfSwKKyAgMTYsIDB4ZTBkMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZTEsMHgwMCwweDIyLDB4ODAgfSwKKyAgMTYsIDB4ZTBlMCwgMCwgezB4MGUsMHgwMCwweDBiLDB4MjQsMHgwMCwweGMwLDB4NDQsMHgyOCwweGFkLDB4MGYsMHgyMCwweDAyLDB4YzgsMHgwMCwweGYzLDB4MDAgfSwKKyAgMTYsIDB4ZTBmMCwgMCwgezB4MWMsMHhjMCwweDBjLDB4MDEsMHgwMywweDQ4LDB4NGMsMHhmMiwweDA0LDB4MzAsMHhjMCwweDBmLDB4MTUsMHgwMywweDgwLDB4NDAgfSwKKyAgMTYsIDB4ZTEwMCwgMCwgezB4YzEsMHgwMCwweDE0LDB4YzgsMHgwZiwweDAwLDB4MDMsMHhkYSwweDAyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTExMCwgMCwgezB4NDAsMHgxZCwweDljLDB4NDAsMHhmNywweDAwLDB4M2YsMHhjMCwweDhmLDB4YzAsMHgwMywweGU0LDB4MDAsMHhmYSwweDAxLDB4M2YgfSwKKyAgMTYsIDB4ZTEyMCwgMCwgezB4YzAsMHgwZiwweGYwLDB4MjMsMHhmYywweDA4LDB4ZmIsMHgwMCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDEsMHhmYywweDEwLDB4ZmYgfSwKKyAgMTYsIDB4ZTEzMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGUsMHhkMSwweDAzLDB4ZmMsMHg0MiwweGZlLDB4ODAsMHgzYiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZTE0MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDQwLDB4YzgsMHgwMCwweDNlLDB4YzAgfSwKKyAgMTYsIDB4ZTE1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWUsMHgwOCwweGNiLDB4MDAsMHgzMiwweGMwLDB4MGYsMHhhMCwweDIzLDB4ZTYsMHgwMywweGNiLDB4NGMgfSwKKyAgMTYsIDB4ZTE2MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4YjAsMHgwNywweGU4LDB4MDAsMHhmOSwweDAwLDB4MTYsMHg0MCwweDBjLDB4YTAsMHgwYiwweDZjLDB4MDAgfSwKKyAgMTYsIDB4ZTE3MCwgMCwgezB4Y2YsMHgwMiwweDMyLDB4YzUsMHgwYywweDgwLDB4MDMsMHgwMiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE4MCwgMCwgezB4NDgsMHgxMSwweDljLDB4ODAsMHg4NCwweDA0LDB4MmQsMHhjMSwweDBiLDB4NDAsMHg0MCwweGRjLDB4MDAsMHg4NywweDA0LDB4MjEgfSwKKyAgMTYsIDB4ZTE5MCwgMCwgezB4YzAsMHg0YiwweDcwLDB4MTIsMHhmYywweDAxLDB4OGYsMHg2MCwweDI5LDB4NDAsMHgwYiwweDcwLDB4MTMsMHg5YywweDAwLDB4YjUgfSwKKyAgMTYsIDB4ZTFhMCwgMCwgezB4MDAsMHhhMywweDQwLDB4MGEsMHg2MCwweDAyLDB4MDAsMHgwMCwweDg0LDB4MDAsMHgyMSwweGMwLDB4MDgsMHg0MCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZTFiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4YTIgfSwKKyAgMTYsIDB4ZTFjMCwgMCwgezB4MGIsMHg0YywweDE2LDB4ZDYsMHgwOCwweDk3LDB4ODgsMHgyMSwweGEwLDB4NGIsMHg2OCwweDAyLDB4ZGUsMHgwNCwweGE3LDB4ODAgfSwKKyAgMTYsIDB4ZTFkMCwgMCwgezB4MjEsMHhlMCwweDBiLDB4NDgsMHgwMiwweGRhLDB4MDQsMHhiNiwweDgyLDB4MjUsMHg2MCwweDBhLDB4ZTgsMHg2MiwweDFlLDB4MDAgfSwKKyAgMTYsIDB4ZTFlMCwgMCwgezB4ODcsMHg4MCwweDIwLDB4ZTgsMHgwOCwweDQ4LDB4MDIsMHgwOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFmMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4YiwweDgwLDB4NmMsMHhmMCwweDBiLDB4M2MsMHgwMiwweGNlLDB4NDYsMHg5YiwweGMwLDB4MjAgfSwKKyAgMTYsIDB4ZTIwMCwgMCwgezB4ZTQsMHgwYiwweDNjLDB4MDIsMHhjYywweDIwLDB4YTMsMHgwMCwweDI4LDB4ZTAsMHgwYiwweDMwLDB4MDIsMHg4ZCwweDgwLDB4YjEgfSwKKyAgMTYsIDB4ZTIxMCwgMCwgezB4ODAsMHgyMiwweDQ0LDB4MGEsMHgyMSwweDBhLDB4MDMsMHg4MiwweDgwLDB4ODAsMHhhMCwweGMwLDB4MDgsMHgwNiwweDBhLDB4MTIgfSwKKyAgMTYsIDB4ZTIyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAyLDB4Y2UsMHg4MCwweDNmLDB4YTAgfSwKKyAgMTYsIDB4ZTIzMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4ZmEsMHg0MCwweGRlLDB4YzAsMHhiMywweDkwLDB4MGYsMHhlYSwweDEzLDB4ZjksMHgwOCwweGVhLDB4MDQgfSwKKyAgMTYsIDB4ZTI0MCwgMCwgezB4MzMsMHg4MiwweDhmLDB4ZTQsMHgwMywweGZiLDB4MDgsMHhmZSwweGEwLDB4MzYsMHhhMCwweDBjLDB4YWMsMHgwYiwweDZiLDB4ODIgfSwKKyAgMTYsIDB4ZTI1MCwgMCwgezB4YzYsMHhhMCwweDMyLDB4ODAsMHgyYywweGU0LDB4MDMsMHgzYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDkwLDB4M2UsMHgwMiwweDBmLDB4ODAsMHg4MywweGUxLDB4MDAsMHhlOCwweDIwLDB4M2UgfSwKKyAgMTYsIDB4ZTI3MCwgMCwgezB4MDMsMHgwZiwweDgyLDB4MDMsMHhlMSwweDQwLDB4ZDgsMHgwMCwweDNlLDB4MjAsMHgwZiwweDAwLDB4OTMsMHhhMCwweDQwLDB4ZjggfSwKKyAgMTYsIDB4ZTI4MCwgMCwgezB4MDAsMHgzZSwweDEwLDB4OGYsMHgwOCwweDBiLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ZTI5MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZTksMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4ZTJhMCwgMCwgezB4MGYsMHg5NCwweDA3LDB4ZTYsMHgwMCwweGY5LDB4ODAsMHhiMCwweDQwLDB4MGMsMHg5NCwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4ZTJiMCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTQsMHgwYiwweGE0LDB4MDAsMHg3MSwweGMwLDB4MzIsMHg0MCwweDJjLDB4OTQsMHgyMywweDI0LDB4MDIgfSwKKyAgMTYsIDB4ZTJjMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJkMCwgMCwgezB4ODAsMHgwNCwweDQ0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTgsMHgwMiwweGU2LDB4NjAsMHhiOSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZTJlMCwgMCwgezB4NjAsMHgwYSwweDljLDB4MDIsMHhlNiwweDI0LDB4YjksMHgwNCwweDM2LDB4NDAsMHgwYiwweDk4LDB4MDAsMHgyNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZTJmMCwgMCwgezB4ODAsMHhhMiwweDUyLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4NDAsMHgyMiwweDQwLDB4NjgsMHg5NCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZTMwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YTksMHgwMCwweDI2LDB4NDAgfSwKKyAgMTYsIDB4ZTMxMCwgMCwgezB4MDMsMHg5NCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MTAsMHgyMiwweDU1LDB4MDgsMHg5MCwweDIyLDB4ZTQsMHgwMCwweGIxLDB4MDAgfSwKKyAgMTYsIDB4ZTMyMCwgMCwgezB4MjYsMHg0MCwweDBiLDB4OTAsMHgwMCwweDJjLDB4MDksMHhiOSwweDAwLDB4MjIsMHg2MCwweDA4LDB4OTAsMHgwYSwweDFjLDB4MDQgfSwKKyAgMTYsIDB4ZTMzMCwgMCwgezB4OGQsMHgwOCwweGEwLDB4NDAsMHgwOCwweDEwLDB4ODIsMHgwZSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM0MCwgMCwgezB4MDgsMHgwNCwweDA2LDB4MDAsMHg4MSwweDAwLDB4MjAsMHg1MCwweDBiLDB4MTIsMHg0MiwweGM0LDB4ODAsMHhiMSwweDA0LDB4MjAgfSwKKyAgMTYsIDB4ZTM1MCwgMCwgezB4NTAsMHgwYSwweDE0LDB4MDIsMHhjNSwweDAwLDB4YjEsMHgyMiwweDI0LDB4NDAsMHgwYiwweDEyLDB4MjIsMHgwNCwweDAxLDB4YjEgfSwKKyAgMTYsIDB4ZTM2MCwgMCwgezB4NDAsMHgyMCwweDUwLDB4MDgsMHgxMCwweDBhLDB4MTUsMHgwMCwweDg1LDB4NDAsMHgyOCwweDUwLDB4MDgsMHgxNCwweDBhLDB4MGEgfSwKKyAgMTYsIDB4ZTM3MCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZTgsMHg1MCwweDM2LDB4MDAgfSwKKyAgMTYsIDB4ZTM4MCwgMCwgezB4MGYsMHg4NSwweDAyLDB4ZTEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwLDB4MGMsMHhhMCwweDIzLDB4ZTAsMHgxMCwweGY4LDB4NTAgfSwKKyAgMTYsIDB4ZTM5MCwgMCwgezB4YjIsMHgxNCwweDBmLDB4YTUsMHgwMywweGExLDB4NDgsMHhmYSwweDAwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDQgfSwKKyAgMTYsIDB4ZTNhMCwgMCwgezB4YzQsMHgwMiwweDMyLDB4MDAsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNiMCwgMCwgezB4OTgsMHgxZCwweGU1LDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDEsMHgwMywweGQ0LDB4NDQsMHhmNSwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZTNjMCwgMCwgezB4NTEsMHgwZiwweGQ0LDB4MDMsMHhmNSwweDAwLDB4ZjksMHgxMCwweDNiLDB4NDAsMHgwZiwweGQxLDB4MDAsMHhmNSwweDEwLDB4ZjUgfSwKKyAgMTYsIDB4ZTNkMCwgMCwgezB4NDAsMHg3ZiwweDQwLDB4MGYsMHg1NCwweDJiLDB4ZTUsMHgwMCwweGY5LDB4NDAsMHgzNiwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4ZTNlMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDEwLDB4YmQsMHg0MCwweDMzLDB4NDAgfSwKKyAgMTYsIDB4ZTNmMCwgMCwgezB4MGYsMHhkYSwweDAzLDB4MzcsMHg4MCwweGNkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGU5LDB4YTAgfSwKKyAgMTYsIDB4ZTQwMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4ZGUsMHgxNywweGE0LDB4MDgsMHhmZCwweGMwLDB4MzMsMHg0MSwweDhkLDB4ZGEsMHgxMywweDI2LDB4YTAgfSwKKyAgMTYsIDB4ZTQxMCwgMCwgezB4ZjksMHhhOCwweDMyLDB4NzgsMHgwYywweGI0LDB4MGIsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQyMCwgMCwgezB4MzgsMHgxMCwweGUxLDB4MDAsMHhiOCwweGEwLDB4MzYsMHgyMCwweDBiLDB4OGEsMHg4MiwweGEyLDB4ODAsMHgyYSwweGE4LDB4MmUgfSwKKyAgMTYsIDB4ZTQzMCwgMCwgezB4MDAsMHgwYiwweDgwLDB4MTIsMHhlMCwweDA0LDB4YjgsMHhhMSwweDJlLDB4MjgsMHg0YSwweDhlLDB4MDIsMHgyYSwweGEwLDB4YmEgfSwKKyAgMTYsIDB4ZTQ0MCwgMCwgezB4YzAsMHgyMiwweDI4LDB4MDgsMHg4NSwweDAyLDB4MjEsMHgwOCwweGI4LDB4ZTgsMHhhMiwweDNjLDB4MDgsMHhjOCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4ZTQ1MCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjksMHgwMCwweDIwLDB4NGEgfSwKKyAgMTYsIDB4ZTQ2MCwgMCwgezB4MGIsMHgxNCwweDAyLDB4MDUsMHg4MCwweDAxLDB4MDAsMHgyYywweDQxLDB4MGIsMHgxMCwweDAyLDB4YzQsMHgwNCwweGExLDB4NGEgfSwKKyAgMTYsIDB4ZTQ3MCwgMCwgezB4MmUsMHg0MiwweDA4LDB4MTQsMHgwMiwweDg0LDB4MTAsMHhiMSwweDYwLDB4YTAsMHg0YSwweDA5LDB4MTAsMHgwMiwweDQ0LDB4MDAgfSwKKyAgMTYsIDB4ZTQ4MCwgMCwgezB4YjUsMHgwMSwweDI5LDB4NDAsMHgxOCwweGQyLDB4MDIsMHgxMiwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDIxLDB4MjYsMHg0MCwweDBiLDB4OTYsMHgwMiwweGE0LDB4MTAsMHhhOSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4ZTRhMCwgMCwgezB4NDAsMHgwYiwweDk2LDB4MTIsMHhlNCwweDIwLDB4YjksMHgwMCwweDJlLDB4NDEsMHgwYSwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZTRiMCwgMCwgezB4MDAsMHgyMiwweDQxLDB4MDgsMHg5OCwweDIyLDB4NjQsMHgwMCwweGI5LDB4MjAsMHgyYiwweDQxLDB4MjgsMHhkNCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4ZTRjMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNCwweDAwLDB4ZjksMHhlMCwweDMyLDB4NTggfSwKKyAgMTYsIDB4ZTRkMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4MjYsMHg0MCwweGM5LDB4NDAsMHgzZSwweDU4LDB4MGYsMHg5YywweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAgfSwKKyAgMTYsIDB4ZTRlMCwgMCwgezB4NmUsMHg0MCwweDBjLDB4OWEsMHgwMiwweGE2LDB4MDAsMHhmOSwweDQ0LDB4MzIsMHg0MCwweDBkLDB4OWEsMHgwYiwweDY0LDB4ODQgfSwKKyAgMTYsIDB4ZTRmMCwgMCwgezB4ZjksMHgwMCwweGJhLDB4NDAsMHgwYywweDE4LDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTUwMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg1MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhmOSwweDA0LDB4M2UgfSwKKyAgMTYsIDB4ZTUxMCwgMCwgezB4NDgsMHgwZiwweDkwLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgwMCwweDNlLDB4NjUsMHgwZiwweDk5LDB4ODEsMHhlNCwweDUwLDB4ZjkgfSwKKyAgMTYsIDB4ZTUyMCwgMCwgezB4MjAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4YTQsMHg4MCwweGY5LDB4MDAsMHgzNCwweDQwLDB4MGYsMHg5MiwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ZTUzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MTAgfSwKKyAgMTYsIDB4ZTU0MCwgMCwgezB4MGUsMHg4NCwweDAzLDB4NjAsMHgwOCwweGM4LDB4MDAsMHgzZSwweDA4LDB4MGYsMHg4MCwweDgzLDB4ZTAsMHgyOCwweGU4LDB4MDQgfSwKKyAgMTYsIDB4ZTU1MCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODQsMHgwMywweDIxLDB4MWMsMHhmMCwweDQ4LDB4MzIsMHgwMCwweDBiLDB4MDAsMHgwMywweGUwLDB4MDIgfSwKKyAgMTYsIDB4ZTU2MCwgMCwgezB4YzAsMHgwMCwweDMyLDB4MDAsMHgwYywweGMwLDB4MGIsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU3MCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHhiMiwweDg4LDB4MmUsMHg4MCwweDA4LDB4ZTAsMHgwMywweDdhLDB4ODAsMHg4ZSwweDAwLDB4MmYgfSwKKyAgMTYsIDB4ZTU4MCwgMCwgezB4YTAsMHgwYiwweGU4LDB4MDIsMHhmOSwweDEwLDB4YmEsMHgwMCwweDJjLDB4ODAsMHgyOCwweGU0LDB4MDIsMHgyOCwweDAwLDB4YmUgfSwKKyAgMTYsIDB4ZTU5MCwgMCwgezB4NDAsMHgyMywweGI4LDB4MDgsMHhlOCwweDAyLDB4ZTgsMHgwNCwweGNhLDB4MjAsMHhhMiwweDgwLDB4MDgsMHhlOCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4ZTVhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAxLDB4YjMsMHgwMCwweDJjLDB4NDAgfSwKKyAgMTYsIDB4ZTViMCwgMCwgezB4MDgsMHhiOCwweDQyLDB4NmMsMHgwMiwweDgzLDB4MDAsMHgyYywweGUwLDB4MGIsMHgzOCwweDAwLDB4Y2YsMHg0MCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4ZTVjMCwgMCwgezB4MmMsMHhjMCwweDA4LDB4YjQsMHgwYSwweDBjLDB4MDAsMHhiMywweDQwLDB4YTIsMHg4MiwweDBhLDB4MzksMHgwMiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4ZTVkMCwgMCwgezB4OTMsMHg4MCwweGEwLDB4YzAsMHgyOSwweDIwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVlMCwgMCwgezB4YTAsMHgwMSwweDFkLDB4MDAsMHhiNywweDAwLDB4MmQsMHg2NCwweDI4LDB4NzQsMHgwMiwweDQwLDB4MDAsMHg4NywweDA1LDB4MmQgfSwKKyAgMTYsIDB4ZTVmMCwgMCwgezB4OTAsMHgwYiwweDc0LDB4MDIsMHhkYywweDEwLDB4YjcsMHgzMCwweDJkLDB4YzgsMHgwOCwweDM0LDB4MDYsMHgxYywweDgwLDB4YjcgfSwKKyAgMTYsIDB4ZTYwMCwgMCwgezB4MDAsMHhhMSwweGMwLDB4MGEsMHg3MCwweDAyLDB4ZGUsMHg4MCwweDgzLDB4MDAsMHgwMSwweDAwLDB4MDksMHg2MCwweDgyLDB4MjAgfSwKKyAgMTYsIDB4ZTYxMCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxYSwweDAwLDB4ZjcsMHg4MCwweDNkLDB4NjAgfSwKKyAgMTYsIDB4ZTYyMCwgMCwgezB4MGUsMHhkOCwweDBiLDB4NWUsMHgwMCwweGM3LDB4ODAsMHgzZCwweGUwLDB4MGYsMHg2OCwweDAzLDB4ZGUsMHgxMCwweGY3LDB4YTkgfSwKKyAgMTYsIDB4ZTYzMCwgMCwgezB4N2YsMHhlOCwweDQ4LDB4NzgsMHgwMywweDFmLDB4MzAsMHhmZiwweDk0LDB4MzMsMHhhMCwweDBlLDB4NzgsMHgwMywweGNmLDB4MjQgfSwKKyAgMTYsIDB4ZTY0MCwgMCwgezB4ZDYsMHg4MCwweGIxLDB4ZTAsMHgwZCwweGY4LDB4NDMsMHgyMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY1MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhiYiwweDAwLDB4MGMsMHg0MCwweDBmLDB4YjAsMHgwMywweGVjLDB4MDgsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZTY2MCwgMCwgezB4MDAsMHgwZiwweDkwLDB4NDEsMHhlYywweDAwLDB4ZmIsMHg2MSwweDdlLDB4ZDAsMHgwZiwweGIwLDB4MDMsMHhlYywweDgwLDB4ZmIgfSwKKyAgMTYsIDB4ZTY3MCwgMCwgezB4NDAsMHgzZiwweDliLDB4MGMsMHhiMCwweDAzLDB4ZWQsMHg5MCwweGZhLDB4MDAsMHgzYywweDAwLDB4MGUsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZTY4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhkZSwweDAwLDB4ZWYsMHg4MCwweDMzLDB4NjAgfSwKKyAgMTYsIDB4ZTY5MCwgMCwgezB4MGQsMHhkOCwweDAzLDB4MzYsMHg0MCwweGVmLDB4OTAsMHgzZSwweGUwLDB4MGYsMHhmOSwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAgfSwKKyAgMTYsIDB4ZTZhMCwgMCwgezB4MzMsMHhmZSwweDBjLDB4ZmEsMHgwMywweGZlLDB4MDAsMHhjZiwweDgwLDB4YjMsMHhlMCwweDBmLDB4ZjgsMHgwMywweGZlLDB4MDAgfSwKKyAgMTYsIDB4ZTZiMCwgMCwgezB4Y2QsMHg4MCwweDMzLDB4ZTAsMHgwZiwweGM4LDB4NDMsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZjMCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDAsMHg4NSwweDA4LDB4MzUsMHg0MCwweDA4LDB4NzAsMHgwMywweDUyLDB4MjAsMHg4NywweDExLDB4MmMgfSwKKyAgMTYsIDB4ZTZkMCwgMCwgezB4ZWMsMHgwYiwweDcxLDB4MDIsMHhkMCwweDAwLDB4ZTcsMHgwMCwweDM1LDB4YzQsMHgwOCwweDc0LDB4MDIsMHhkYywweDQwLDB4ODcgfSwKKyAgMTYsIDB4ZTZlMCwgMCwgezB4MTAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZmMsMHg4MCwweDg1LDB4MDgsMHgyMSwweDAwLDB4MGIsMHg0MSwweDgyLDB4ZWEgfSwKKyAgMTYsIDB4ZTZmMCwgMCwgezB4MDYsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDAwLDB4YWYsMHgwMCwweDIzLDB4NTAgfSwKKyAgMTYsIDB4ZTcwMCwgMCwgezB4MDksMHg1MCwweDAyLDB4MWMsMHg4MCwweGE3LDB4MDEsMHgyOSwweGMwLDB4MWIsMHg2MCwweDA2LDB4ZGMsMHg0MCwweGI3LDB4MTAgfSwKKyAgMTYsIDB4ZTcxMCwgMCwgezB4MjEsMHhjOCwweDRhLDB4NTIsMHgwMiwweGRjLDB4MDAsMHg4MywweDAwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRjLDB4MTMgfSwKKyAgMTYsIDB4ZTcyMCwgMCwgezB4ODQsMHgwMCwweDI1LDB4YzAsMHgwYiwweDU4LDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTczMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHg4MSwweDgwLDB4MjQsMHg0MCwweDA4LDB4M2UsMHgwMiwweDZlLDB4MDAsMHg4OSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4ZTc0MCwgMCwgezB4YzAsMHgwYiwweGI0LDB4MDIsMHhjYSwweDgwLDB4YTMsMHgwMCwweDI0LDB4YzAsMHgwYSwweDA0LDB4MDIsMHhlYywweDQwLDB4ODIgfSwKKyAgMTYsIDB4ZTc1MCwgMCwgezB4MGEsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2QsMHgxMCwweDgwLDB4YzAsMHhhNCwweDAwLDB4MGIsMHgxYywweDAyLDB4YzggfSwKKyAgMTYsIDB4ZTc2MCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4NCwweDAwLDB4ZWIsMHg4MCwweDMzLDB4NDAgfSwKKyAgMTYsIDB4ZTc3MCwgMCwgezB4MGQsMHg4YywweDgzLDB4MjYsMHgwMCwweGU5LDB4YTAsMHgzZSwweDc4LDB4OGYsMHg5MCwweDgzLDB4ZTEsMHgwMCwweGZmLDB4MDAgfSwKKyAgMTYsIDB4ZTc4MCwgMCwgezB4MzEsMHhkMSwweDBlLDB4ODQsMHgyMywweGZjLDB4MDAsMHhjYiwweDgyLDB4MzIsMHhjMCwweDhmLDB4YjAsMHgwMiwweGZkLDB4NDAgfSwKKyAgMTYsIDB4ZTc5MCwgMCwgezB4Y2IsMHg4MCwweGI2LDB4YzAsMHgwZiwweGE0LDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YTAsMHgwMywweGUwLDB4MDAsMHhmOSwweDAxLDB4M2UgfSwKKyAgMTYsIDB4ZTdiMCwgMCwgezB4NDIsMHgwZiwweDkwLDB4MDMsMHhlNSwweDU0LDB4ZTMsMHgwMCwweDNlLDB4YzgsMHgwNSwweDkzLDB4MDMsMHhlYywweDgwLDB4ZmIgfSwKKyAgMTYsIDB4ZTdjMCwgMCwgezB4YzEsMHgzZSwweGMwLDB4MGYsMHgyMCwweDAzLDB4Y2MsMHg0OCwweGYzLDB4MDgsMHgzYSwweDAwLDB4MGYsMHhhMCwweDQzLDB4ZTAgfSwKKyAgMTYsIDB4ZTdkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4Y2YsMHgwMCwweDNmLDB4NDAgfSwKKyAgMTYsIDB4ZTdlMCwgMCwgezB4MGYsMHgzMCwweDAxLDB4MmMsMHgwYSwweGNkLDB4MTAsMHgzMywweDAwLDB4MGYsMHhkMCwweDgzLDB4MTQsMHgwMCwweGNiLDB4MDIgfSwKKyAgMTYsIDB4ZTdmMCwgMCwgezB4MzMsMHhjMCwweDBjLDB4ZTEsMHgwMywweGVjLDB4MTAsMHhjZCwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgzMywweDNjLDB4MDAgfSwKKyAgMTYsIDB4ZTgwMCwgMCwgezB4ZWEsMHgwMCwweDMzLDB4YzAsMHgwYywweGYwLDB4ODMsMHhjOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTgxMCwgMCwgezB4ODEsMHgwNCwweDZlLDB4MDAsMHg4YiwweDAwLDB4MmUsMHg0MCwweDBiLDB4YmMsMHgwMiwweDJlLDB4MDAsMHgwYiwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZTgyMCwgMCwgezB4MzAsMHgwYiwweDljLDB4MDIsMHgyNywweDgwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwOCwweGI4LDB4MDIsMHhlYywweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZTgzMCwgMCwgezB4YzAsMHgyMCwweGUwLDB4MDgsMHhhZSwweDAyLDB4MmMsMHgwOCwweDhhLDB4MDAsMHgyMiwweDAwLDB4MDgsMHhiMCwweDQyLDB4ZTggfSwKKyAgMTYsIDB4ZTg0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyZSwweDAwLDB4OGIsMHgwNCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4ZTg1MCwgMCwgezB4OGIsMHg4YywweDAyLDB4YWUsMHgxMCwweDg5LDB4MDAsMHgyMiwweDcwLDB4MGIsMHg4YywweDAyLDB4YTIsMHgwMCwweDhiLDB4MDEgfSwKKyAgMTYsIDB4ZTg2MCwgMCwgezB4MjIsMHhjMCwweDA4LDB4ODAsMHgwMiwweGVjLDB4MTAsMHg4MiwweDg4LDB4YTIsMHg3MCwweDA5LDB4YjgsMHgwMiwweDJjLDB4MDggfSwKKyAgMTYsIDB4ZTg3MCwgMCwgezB4ODksMHgwMCwweDIwLDB4YzAsMHgyOCwweDgwLDB4MjIsMHhlMCwweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDQsMHg4MSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MjAsMHgwMiwweDgwLDB4MDAsMHg4MSwweDA0LDB4YTAgfSwKKyAgMTYsIDB4ZTg5MCwgMCwgezB4NTAsMHg0YiwweDAwLDB4MGEsMHg4MCwweDAwLDB4YTMsMHgwMSwweDJhLDB4YzEsMHgyMCwweDEwLDB4MDIsMHhjYywweDE0LDB4ODMgfSwKKyAgMTYsIDB4ZThhMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHgyMCwweDAyLDB4MGMsMHgwMCwweDgxLDB4MDAsMHhlMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ZThiMCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2OCwweDAwLDB4Y2IsMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ZThjMCwgMCwgezB4MGYsMHg5MCwweDBiLDB4YWMsMHg4MCwweGM5LDB4MDAsMHgzMiwweDEwLDB4MGYsMHg4MCwweDAzLDB4YTQsMHgwMCwweGNmLDB4MDIgfSwKKyAgMTYsIDB4ZThkMCwgMCwgezB4MzEsMHhjMCwweDBjLDB4ODAsMHgxMywweGZjLDB4MDIsMHhjZCwweDAwLDB4MzMsMHhjMCwweDJjLDB4OTAsMHgwMywweDNjLDB4MDIgfSwKKyAgMTYsIDB4ZThlMCwgMCwgezB4ZTgsMHgwMCwweGIyLDB4YzAsMHgwYywweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThmMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDIsMHhmNSwweDAwLDB4M2QsMHg0MCwweDhmLDB4ZjAsMHgyMywweDZkLDB4MDAsMHhmZiwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZTkwMCwgMCwgezB4MDQsMHgwZiwweGMwLDB4MDMsMHg3MCwweDFjLDB4ZmYsMHgwMSwweDNmLDB4YzAsMHg0ZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmQgfSwKKyAgMTYsIDB4ZTkxMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHhlMCwweDBmLDB4ZmMsMHgxOCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhkMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZTkyMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4ZDcsMHgwMiwweDBmLDB4MzAgfSwKKyAgMTYsIDB4ZTkzMCwgMCwgezB4MGMsMHhmMiwweDAxLDB4N2UsMHgwNiwweDQ0LDB4MzAsMHgzZiwweDIwLDB4MGUsMHhmMCwweDAyLDB4N2MsMHg4NCwweGZkLDB4MjAgfSwKKyAgMTYsIDB4ZTk0MCwgMCwgezB4MjcsMHgwOCwweDBjLDB4ZDAsMHgwMSwweDM2LDB4MDAsMHhmZiwweDYwLDB4MzMsMHhjYywweDBiLDB4ZjEsMHgxMywweDJjLDB4YzQgfSwKKyAgMTYsIDB4ZTk1MCwgMCwgezB4ZmYsMHgzMCwweDBmLDB4Y2QsMHgwYywweGY0LDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk2MCwgMCwgezB4ODAsMHgxMCwweGVlLDB4MDAsMHg4ZiwweGMwLDB4MmUsMHgwMCwweDA4LDB4ZmMsMHgwMiwweDJlLDB4MDAsMHg4YSwweDMwLDB4MjggfSwKKyAgMTYsIDB4ZTk3MCwgMCwgezB4NTIsMHgwOCwweGY2LDB4ODIsMHgzYywweDY4LDB4YmQsMHg5MCwweDMyLDB4MzQsMHg0OCwweDljLDB4MTIsMHgyNiwweDAwLDB4Y2YgfSwKKyAgMTYsIDB4ZTk4MCwgMCwgezB4NDAsMHgyMywweGNjLDB4MGIsMHhmNiwweDAyLDB4M2QsMHgwMCwweGJmLDB4MTAsMHgyZiwweGNjLDB4ODgsMHhmNiwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZTk5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4OTMsMHgxMCwweDJjLDB4MDggfSwKKyAgMTYsIDB4ZTlhMCwgMCwgezB4MDksMHgzMSwweDAyLDB4NGMsMHgwMCwweDliLDB4MjAsMHg2NCwweDU4LDB4MDMsMHgzMSwweDYyLDB4NGMsMHg4MSwweGExLDB4MDAgfSwKKyAgMTYsIDB4ZTliMCwgMCwgezB4MjAsMHgwMCwweDQ4LDB4MTQsMHgwMiwweDQ0LDB4MDAsMHg5MywweDMwLDB4MjQsMHhjMCwweDBiLDB4MzMsMHgwMiwweDhkLDB4ODQgfSwKKyAgMTYsIDB4ZTljMCwgMCwgezB4YjMsMHgyMCwweDZjLDB4YzAsMHgyYSwweDM2LDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTlkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MTAsMHg5YiwweDAyLDB4MmUsMHg0MSwweDBiLDB4YjAsMHgwMiwweGE0LDB4MDAsMHg5YSwweDAwLDB4NGEgfSwKKyAgMTYsIDB4ZTllMCwgMCwgezB4NjAsMHg4OCwweGIwLDB4NTIsMHg2YywweDAxLDB4YjksMHgwMCwweDI2LDB4MDAsMHgwOCwweDkxLDB4MjIsMHhlYywweDA4LDB4YmIgfSwKKyAgMTYsIDB4ZTlmMCwgMCwgezB4MDAsMHgyNiwweGMwLDB4MGIsMHhiMCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDUsMHg2ZSwweGMxLDB4MGEsMHhiMCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4ZWEwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZGIsMHgwMSwweDNlLDB4MzAgfSwKKyAgMTYsIDB4ZWExMCwgMCwgezB4MmQsMHgzMCwweDAzLDB4NDcsMHg2MCwweGQ4LDB4YTAsMHgxNiwweDM4LDB4OGYsMHhiMCwweDAzLDB4NmMsMHgwMCwweDc5LDB4MDIgfSwKKyAgMTYsIDB4ZWEyMCwgMCwgezB4MzEsMHg2MCwweDBjLDB4YzgsMHgwYSwweDY2LDB4MDAsMHhiYiwweDAwLDB4YjYsMHhjMCwweDBmLDB4YjAsMHgwYiwweGFjLDB4MDAgfSwKKyAgMTYsIDB4ZWEzMCwgMCwgezB4ZmIsMHgwMSwweDNlLDB4YzEsMHgwZSwweGIwLDB4MDMsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MTAsMHhlZiwweDA4LDB4M2YsMHgyNCwweDBjLDB4ZjAsMHgwMywweDc2LDB4MjAsMHhlZSwweDkwLDB4MzUgfSwKKyAgMTYsIDB4ZWE1MCwgMCwgezB4NDAsMHgwZSwweDcwLDB4MDMsMHhhYywweDAwLDB4ZmQsMHgwMCwweGJiLDB4NjQsMHgwZiwweDg4LDB4MTMsMHgzNCwweDgwLDB4Y2IgfSwKKyAgMTYsIDB4ZWE2MCwgMCwgezB4MDAsMHgzYiwweGMwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwOCwweGZmLDB4MDAsMHgzZSwweGMwLDB4MGQsMHhmMCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4ZWE3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAxLDB4ZmIsMHg4MCwweDMyLDB4MTAgfSwKKyAgMTYsIDB4ZWE4MCwgMCwgezB4MGUsMHhiMCwweDAzLDB4ZWQsMHgwMCwweGNiLDB4NTAsMHgzZSwweDQwLDB4OGMsMHhiMCwweDQzLDB4MmMsMHgxMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4ZWE5MCwgMCwgezB4MzIsMHg2MCwweDBjLDB4NDAsMHgwYiwweDI2LDB4MDAsMHhjMywweDA0LDB4MzYsMHhjMCwweDBjLDB4MzAsMHgwMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZWFhMCwgMCwgezB4OWIsMHgwMCwweGIwLDB4YzAsMHgwYywweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFiMCwgMCwgezB4YzgsMHgwNSwweDBlLDB4ODAsMHhiZiwweDA0LDB4MmEsMHg0MCwweDAwLDB4ZjUsMHgwMCwweGU2LDB4MDAsMHg4MiwweGQyLDB4MjIgfSwKKyAgMTYsIDB4ZWFjMCwgMCwgezB4NDAsMHgwZCwweGYwLDB4MjIsMHgzYywweDAwLDB4OTUsMHgwMiwweDM2LDB4NDAsMHgwYSwweDgwLDB4MDIsMHgyZSwweDAwLDB4OGYgfSwKKyAgMTYsIDB4ZWFkMCwgMCwgezB4MDAsMHgzNywweGMwLDB4MGEsMHhmMCwweDQyLDB4M2MsMHgwMCwweDhmLDB4MDAsMHgyMywweGMwLDB4MjgsMHhmMCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4ZWFlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0ZSwweDAwLDB4YjMsMHgwMCwweDIyLDB4MjAgfSwKKyAgMTYsIDB4ZWFmMCwgMCwgezB4NGEsMHgzMCwweDAwLDB4Y2MsMHgwMCwweDgxLDB4YzAsMHgyOCwweDAwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgxMCwweGExLDB4MDAgfSwKKyAgMTYsIDB4ZWIwMCwgMCwgezB4MjgsMHg4MCwweDE4LDB4MzAsMHgyMiwweDA0LDB4MDQsMHg4MywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDggfSwKKyAgMTYsIDB4ZWIxMCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDYsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWIyMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNywweDgwLDB4MjksMHhhMCwweDA4LDB4NzgsMHgwMiwweGZlLDB4MjAsMHg4ZCwweDgwLDB4MjkgfSwKKyAgMTYsIDB4ZWIzMCwgMCwgezB4ZTUsMHg1YiwweDM4LDB4NDIsMHgxZSwweDQwLDB4YTEsMHg4MSwweDI1LDB4YTgsMHgwOCwweDc5LDB4MDIsMHgzNywweDAwLDB4ODcgfSwKKyAgMTYsIDB4ZWI0MCwgMCwgezB4ODAsMHgyNSwweGUwLDB4MGEsMHg3OCwweDBhLDB4ZGUsMHg4MSwweDg3LDB4ODAsMHgyNSwweGU1LDB4NDgsMHg3OCwweDAyLDB4YzggfSwKKyAgMTYsIDB4ZWI1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4YjMsMHgxMCwweDMwLDB4MTIgfSwKKyAgMTYsIDB4ZWI2MCwgMCwgezB4MGUsMHgzMCwweDEyLDB4Y2MsMHhjMCwweGMzLDB4MDAsMHgzOCwweDgwLDB4MGMsMHgzMSwweDA2LDB4MGMsMHg0MCwweGYxLDB4MDAgfSwKKyAgMTYsIDB4ZWI3MCwgMCwgezB4MzgsMHg4MCwweDBjLDB4MzAsMHg0MywweDA0LDB4NDIsMHhjMywweDAwLDB4MzYsMHhjMCwweDBjLDB4MzIsMHgwMywweGNlLDB4YzAgfSwKKyAgMTYsIDB4ZWI4MCwgMCwgezB4ZGIsMHgwMCwweDMwLDB4YzAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI5MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDEwLDB4M2QsMHg4NCwweDRmLDB4ZjEsMHgwMywweGQwLDB4NDAsMHhmYywweDEwLDB4MzMgfSwKKyAgMTYsIDB4ZWJhMCwgMCwgezB4ODAsMHg1ZCwweGIxLDB4ODMsMHhmYywweDUwLDB4ZGQsMHgwYSwweDI1LDB4ODksMHgwZiwweGI4LDB4MDMsMHhkNCwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4ZWJiMCwgMCwgezB4MTAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDAzLDB4M2MsMHg0MCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZWJjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgyMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4ZWJkMCwgMCwgezB4MGYsMHhiNSwweDAzLDB4MjksMHgyMCwweGY5LDB4MDAsMHgzMiwweGEwLDB4MGMsMHhiMCwweDgzLDB4ZWMsMHgwMCwweDQ5LDB4YzggfSwKKyAgMTYsIDB4ZWJlMCwgMCwgezB4YjIsMHhjMCwweDhjLDB4YTAsMHgwMywweDY0LDB4MDAsMHhmYiwweDA4LDB4MTIsMHhlYSwweDBjLDB4YjAsMHgwYiwweDJjLDB4ODAgfSwKKyAgMTYsIDB4ZWJmMCwgMCwgezB4ZmIsMHgyMCwweDJlLDB4ZDIsMHg2YywweGI2LDB4NDMsMHhlYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWMwMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNywweDQ5LDB4MmQsMHgwMCwweDBiLDB4MzAsMHg4MiwweDEwLDB4MDEsMHhiNSwweDAyLDB4ODMgfSwKKyAgMTYsIDB4ZWMxMCwgMCwgezB4YzAsMHgxYSwweDcyLDB4MjIsMHhkZCwweDQxLDB4ODUsMHgwMCwweDYxLDB4YzAsMHgxOCwweDIwLDB4MjAsMHgxNCwweDAwLDB4YmYgfSwKKyAgMTYsIDB4ZWMyMCwgMCwgezB4NDAsMHgzNSwweGQwLDB4MGQsMHgzNCwweDAyLDB4MWQsMHgyMCwweGI3LDB4MjgsMHgyNSwweGMxLDB4MDgsMHg3NCwweDgyLDB4ZDIgfSwKKyAgMTYsIDB4ZWMzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDA0LDB4MzcsMHhhMCwweDJkLDB4MjAgfSwKKyAgMTYsIDB4ZWM0MCwgMCwgezB4MGIsMHg3YSwweDEyLDB4MTYsMHgwMSwweGIzLDB4ODAsMHgyMSwweGUyLDB4MDgsMHg3OCwweDQyLDB4OWUsMHgwMCwweDg1LDB4ODAgfSwKKyAgMTYsIDB4ZWM1MCwgMCwgezB4MjAsMHhlMSwweDE4LDB4NjgsMHgwMiwweDU2LDB4MDAsMHhiNywweGEwLDB4MjUsMHhlMCwweDA4LDB4N2EsMHgwMiwweDFlLDB4MDAgfSwKKyAgMTYsIDB4ZWM2MCwgMCwgezB4YjcsMHg5MCwweDJjLDB4ZTUsMHg4OCwweDdhLDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM3MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4NmMsMHgyNCwweDFiLDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiMCwweDAwLDB4MjAgfSwKKyAgMTYsIDB4ZWM4MCwgMCwgezB4ZjgsMHgwYSwweDMwLDB4MDIsMHhjYywweDAwLDB4ODEsMHgwMCwweDIwLDB4ZDgsMHgxOCwweDIwLDB4MDIsMHgwNCwweDAwLDB4YjMgfSwKKyAgMTYsIDB4ZWM5MCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyNiwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4ZWNhMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDNkLDB4ODAgfSwKKyAgMTYsIDB4ZWNiMCwgMCwgezB4MGYsMHgyMCwweDBiLDB4MjgsMHg4MCwweGZlLDB4MDAsMHgzMywweGEwLDB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMiwweGNhLDB4MDIgfSwKKyAgMTYsIDB4ZWNjMCwgMCwgezB4MzIsMHg5MCwweDJjLDB4ZTQsMHgwMywweDc4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgwMywweDI4LDB4MDAgfSwKKyAgMTYsIDB4ZWNkMCwgMCwgezB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwYywweGEwLDB4MDMsMHhmYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNlMCwgMCwgezB4NDgsMHgwMCwweGUxLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgwMywweGUwLDB4ODAsMHhmOCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZWNmMCwgMCwgezB4MDAsMHgwZiwweDgwLDB4MjMsMHhjMCwweDAwLDB4ZjgsMHgwMiwweDNjLDB4MDAsMHgwZiwweGMwLDB4ODMsMHg2MCwweDAwLDB4YjggfSwKKyAgMTYsIDB4ZWQwMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDIzLDB4ZTAsMHgxOCwweGY4LDB4MDEsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ZWQxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNiwweDAwLDB4ZjksMHgyMSwweDMyLDB4NjAgfSwKKyAgMTYsIDB4ZWQyMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MmMsMHg0NCwweGY5LDB4MDAsMHhiMiwweDQwLDB4MGYsMHg5MCwweDFiLDB4MjQsMHgwMCwweGU5LDB4MDAgfSwKKyAgMTYsIDB4ZWQzMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4MTAsMHgzMywweDI0LDB4MTAgfSwKKyAgMTYsIDB4ZWQ0MCwgMCwgezB4ZjEsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ1MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHhiOSwweDQwLDB4YTIsMHg0MSwweDA4LDB4OTAsMHgwMiwweDI0LDB4ODAsMHhlOSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZWQ2MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MTIsMHgyNCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDEsMHgxOCwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjkgfSwKKyAgMTYsIDB4ZWQ3MCwgMCwgezB4MDQsMHgyYSwweDQxLDB4MGIsMHg5MCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5MCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4ZWQ4MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDgwLDB4YjksMHg0MiwweDYyLDB4NDggfSwKKyAgMTYsIDB4ZWQ5MCwgMCwgezB4MjgsMHg5MCwweDBhLDB4MjQsMHgwMCwweGIxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHgxMCwweDAyLDB4MjQsMHgxMCwweGI5LDB4MDIgfSwKKyAgMTYsIDB4ZWRhMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4ZDAsMHgwMiwweGE0LDB4MDAsMHhiMSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDQgfSwKKyAgMTYsIDB4ZWRiMCwgMCwgezB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRjMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMSwweDIwLDB4NjAsMHg0MCwweDA4LDB4MTIsMHgwMiwweDA0LDB4MDAsMHhhMSwweDIwLDB4MjAgfSwKKyAgMTYsIDB4ZWRkMCwgMCwgezB4NDAsMHgwYiwweDEyLDB4MDIsMHgwNCwweDgwLDB4OTEsMHgyMCwweDJkLDB4NjgsMHgwOCwweDUyLDB4MTIsMHgwNCwweDAwLDB4YjEgfSwKKyAgMTYsIDB4ZWRlMCwgMCwgezB4MjgsMHgyOCwweDRhLDB4MDksMHgxMiwweDgyLDB4NDQsMHhhMCwweGIxLDB4MmMsMHgyOCwweDRhLDB4MGEsMHgxMiwweDgyLDB4MDIgfSwKKyAgMTYsIDB4ZWRmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MTQgfSwKKyAgMTYsIDB4ZWUwMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4NTAsMHgzMiwweDE0LDB4MGYsMHg4NSwweDAzLDB4MDEsMHg0MCwweGY4LDB4MDAgfSwKKyAgMTYsIDB4ZWUxMCwgMCwgezB4MmUsMHgwMCwweDI4LDB4YzAsMHgwMywweGEwLDB4MDAsMHhmOCwweDI0LDB4MzAsMHgwOCwweDBmLDB4ODIsMHgyMywweDIwLDB4ODAgfSwKKyAgMTYsIDB4ZWUyMCwgMCwgezB4ZjgsMHgyMCwweDMyLDB4MDgsMHgwYywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWUzMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4MDgsMHhmOSwweDEwLDB4M2YsMHg0MCwweDhmLDB4OTEsMHgxMywweGU0LDB4MDAsMHhlZCwweDEwLDB4M2YgfSwKKyAgMTYsIDB4ZWU0MCwgMCwgezB4NTAsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4YTUsMHgxMCwweDNlLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDA0LDB4ZjkgfSwKKyAgMTYsIDB4ZWU1MCwgMCwgezB4MjgsMHgzZSwweDRiLDB4MGIsMHg5MiwweGEzLDB4ZTQsMHhhMCwweGU5LDB4MjgsMHgzZSwweDRhLDB4MGYsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4ZWU2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNCwweDAwLDB4Y2QsMHgwMCwweDMzLDB4NDAgfSwKKyAgMTYsIDB4ZWU3MCwgMCwgezB4ODAsMHhkMCwweDAxLDB4ZjQsMHgwMCwweGE1LDB4MDAsMHgyNiwweDQwLDB4MGYsMHg5MCwweDAzLDB4MjYsMHgwMCwweGYxLDB4ODggfSwKKyAgMTYsIDB4ZWU4MCwgMCwgezB4M2UsMHg2OCwweDBkLDB4OTgsMHg4MywweDQ0LDB4MDAsMHhjOSwweGMwLDB4M2EsMHg0MCwweDBjLDB4OTgsMHgwMywweDI0LDB4MDggfSwKKyAgMTYsIDB4ZWU5MCwgMCwgezB4ZjksMHhhMCwweDMyLDB4NzgsMHgwZiwweDlhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVhMCwgMCwgezB4MzgsMHgxMCwweGUwLDB4MDIsMHg4OCwweDAwLDB4YTIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGUwLDB4MDAsMHgwYSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4ZWViMCwgMCwgezB4MDAsMHgwYiwweDgwLDB4MDIsMHgyMCwweDAwLDB4YjgsMHg0MCwweDJlLDB4MTQsMHgwOCwweDgwLDB4NDMsMHgzMCwweDAwLDB4ODggfSwKKyAgMTYsIDB4ZWVjMCwgMCwgezB4YTAsMHgyMiwweDJhLDB4MGEsMHg4YSwweDQyLDB4YTAsMHgwNSwweGI4LDB4NDIsMHgzMiwweDM4LDB4MGIsMHg4MCwweDAyLDB4MGUgfSwKKyAgMTYsIDB4ZWVkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAzLDB4OTEsMHgwMCwweDI0LDB4NDAgfSwKKyAgMTYsIDB4ZWVlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzQsMHgxMSwweGIxLDB4MDQsMHgyMCwweDQxLDB4MWIsMHgxMCwweDIyLDB4NDUsMHgwMCwweGI1LDB4MDAgfSwKKyAgMTYsIDB4ZWVmMCwgMCwgezB4MjUsMHg0MCwweDA5LDB4NTAsMHgwMiwweDU0LDB4MDEsMHg4MSwweDQwLDB4MmMsMHg0MCwweDA5LDB4MTQsMHg5MiwweDQ0LDB4MDAgfSwKKyAgMTYsIDB4ZWYwMCwgMCwgezB4YjEsMHg0MCwweDI0LDB4NGMsMHgwYiwweDE0LDB4MGEsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWYxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg5OSwweDAwLDB4MjQsMHg0MiwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDEsMHg5OSwweDIwLDB4MjYgfSwKKyAgMTYsIDB4ZWYyMCwgMCwgezB4NDAsMHhjYiwweDkwLDB4MDIsMHg2NCwweDAwLDB4YmIsMHgwMCwweDJmLDB4NDEsMHgwYSwweGQwLDB4MDIsMHgzNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4ZWYzMCwgMCwgezB4MDAsMHgyNiwweDQwLDB4MGIsMHgxMCwweDAyLDB4ZTQsMHgwMCwweDMxLDB4MDAsMHg2MiwweDQwLDB4MGIsMHg5MCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4ZWY0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhjNCwweDAwLDB4ZDksMHgwMSwweDM2LDB4NTAgfSwKKyAgMTYsIDB4ZWY1MCwgMCwgezB4MmYsMHg5MCwweDAzLDB4ZTYsMHg2MCwweGY5LDB4ODAsMHgzNiwweDUyLDB4MGIsMHg5MCwweDBhLDB4NjQsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4ZWY2MCwgMCwgezB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMywweDY0LDB4MDIsMHgwOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweDY0LDB4MDAgfSwKKyAgMTYsIDB4ZWY3MCwgMCwgezB4YjksMHgwMCwweGI2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY4MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhlMSwweDAwLDB4M2EsMHg0MSwweDBjLDB4OTAsMHgyMywweGU2LDB4MjAsMHhlOSwweDAwLDB4YmEgfSwKKyAgMTYsIDB4ZWY5MCwgMCwgezB4NzAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZCwweDEwLDB4MTMsMHhhNywweDAwLDB4ZjkgfSwKKyAgMTYsIDB4ZWZhMCwgMCwgezB4MDAsMHgzYSwweDQwLDB4MGUsMHg5MCwweDQzLDB4YTQsMHgwOCwweGY5LDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfSwKKyAgMTYsIDB4ZWZiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDIwLDB4ZjgsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4ZWZjMCwgMCwgezB4MGYsMHg4MCwweDgzLDB4MjEsMHgwMCwweGYwLDB4MDAsMHgzYSwweDExLDB4MDksMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDEgfSwKKyAgMTYsIDB4ZWZkMCwgMCwgezB4MzAsMHgwMSwweDBjLDB4ODAsMHgwMywweGIwLDB4MDAsMHhkMCwweDAwLDB4MzQsMHgwMCwweDBkLDB4ODAsMHgwMywweDIwLDB4MDAgfSwKKyAgMTYsIDB4ZWZlMCwgMCwgezB4YzgsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZmMCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDAsMHhiZSwweDAwLDB4MjIsMHg4MCwweDAzLDB4ZTgsMHgwMiwweDFhLDB4MDgsMHhiZSwweDQ4LDB4MjIgfSwKKyAgMTYsIDB4ZjAwMCwgMCwgezB4ODAsMHgwYSwweGEwLDB4MDMsMHhiOCwweDAwLDB4Y2EsMHgwOCwweDIyLDB4ODAsMHgwZiwweGE0LDB4MDIsMHgwOCwweDAwLDB4OGEgfSwKKyAgMTYsIDB4ZjAxMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4OGQsMHhhMCwweDAyLDB4MjgsMHgwMCwweGRhLDB4MDAsMHgyYSwweDgxLDB4MDgsMHhhMCwweDAyLDB4OGEgfSwKKyAgMTYsIDB4ZjAyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0NCwweDAwLDB4YjMsMHgwMCwweDIwLDB4NDAgfSwKKyAgMTYsIDB4ZjAzMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MDgsMHgwMCwweGIwLDB4NjQsMHg2OCwweGMxLDB4MDgsMHhiMCwweDIyLDB4Y2MsMHgwYywweDkzLDB4ODAgfSwKKyAgMTYsIDB4ZjA0MCwgMCwgezB4MDAsMHhjMCwweDQ4LDB4MzYsMHgwMiwweDg4LDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwNiwweDBjLDB4MDEgfSwKKyAgMTYsIDB4ZjA1MCwgMCwgezB4YTMsMHgwMiwweDJjLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA2MCwgMCwgezB4YTAsMHgwMSwweDE0LDB4MDgsMHhiNSwweDAwLDB4MjEsMHg0MCwweDBiLDB4MzgsMHg4MiwweDFjLDB4MjEsMHhiNywweDAwLDB4MjMgfSwKKyAgMTYsIDB4ZjA3MCwgMCwgezB4ZTgsMHg0YSwweDcyLDB4MjYsMHg5ZSwweDQwLDB4OGYsMHg4MSwweGFiLDB4NDAsMHg0MiwweDcwLDB4NTIsMHgzOCwweDAwLDB4YTMgfSwKKyAgMTYsIDB4ZjA4MCwgMCwgezB4MjIsMHgyMCwweGM0LDB4NDksMHgzMSwweDAyLDB4MWUsMHgwYSwweGI3LDB4MjIsMHgyZCwweGU4LDB4MDgsMHg3MiwweDAyLDB4YTggfSwKKyAgMTYsIDB4ZjA5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4ZjYsMHg4MCwweDIxLDB4ZTAgfSwKKyAgMTYsIDB4ZjBhMCwgMCwgezB4MGIsMHg3OCwweDBiLDB4MWUsMHgwMCwweGI0LDB4ODIsMHgzYiwweGU4LDB4NGMsMHg3YywweDEzLDB4ZmUsMHgwMiwweDk3LDB4ODAgfSwKKyAgMTYsIDB4ZjBiMCwgMCwgezB4MzMsMHhhMCwweDA4LDB4MzgsMHgwMywweDlhLDB4MDAsMHhmNywweDg4LDB4MzUsMHhlMiwweDBjLDB4NzgsMHhlMywweDBlLDB4MDAgfSwKKyAgMTYsIDB4ZjBjMCwgMCwgezB4ZTMsMHhlOCwweDM0LDB4ZjgsMHgwYywweDNjLDB4MjMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBkMCwgMCwgezB4MDgsMHgxZCwweGE4LDB4MDQsMHhmMSwweDAwLDB4M2UsMHg0MiwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhmYiwweDAwLDB4YmUgfSwKKyAgMTYsIDB4ZjBlMCwgMCwgezB4Y2MsMHgxZSwweGI2LDB4MDcsMHhlZCwweDgwLDB4ZmIsMHgwMCwweDM2LDB4MDAsMHgwZiwweGIwLDB4NDMsMHg2OCwweDAwLDB4Y2IgfSwKKyAgMTYsIDB4ZjBmMCwgMCwgezB4MzAsMHgzZSwweGQ4LDB4MGYsMHhiNiwweDBiLDB4ZWQsMHg0MCwweGNiLDB4MDAsMHgzYSwweGMwLDB4MmYsMHhiNiwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZjEwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmMiwweDQwLDB4ZmIsMHg5MSwweDNkLDB4NGMgfSwKKyAgMTYsIDB4ZjExMCwgMCwgezB4ODAsMHhmOCwweDAzLDB4ZGUsMHg0MCwweGM2LDB4ODAsMHgxYiwweGYwLDB4NGYsMHhmZCwweDA3LDB4ZmYsMHgwMCwweGNkLDB4ODAgfSwKKyAgMTYsIDB4ZjEyMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4NjgsMHgwMywweGJhLDB4MDAsMHhmZiwweDgwLDB4MzMsMHhlMCwweDA3LDB4ZjgsMHgwMywweDNmLDB4MTAgfSwKKyAgMTYsIDB4ZjEzMCwgMCwgezB4Y2YsMHg4MCwweDNmLDB4ZTAsMHgwYywweGZjLDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE0MCwgMCwgezB4YTgsMHgxMSwweDkwLDB4MDAsMHhiNSwweGMwLDB4MmQsMHg0MCwweDA4LDB4NjIsMHgwMiwweGRjLDB4MjAsMHhkNiwweDAyLDB4MjEgfSwKKyAgMTYsIDB4ZjE1MCwgMCwgezB4YzgsMHg4ZiwweDcwLDB4MDIsMHhkYywweDgxLDB4YjUsMHgwMCwweDgxLDB4NDQsMHgwZCwweDYxLDB4MjIsMHgxOCwweDA0LDB4YjcgfSwKKyAgMTYsIDB4ZjE2MCwgMCwgezB4MDAsMHgzNSwweGMwLDB4MGIsMHg3MCwweDAyLDB4YmMsMHgwMCwweGE3LDB4MDEsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAzLDB4ZWEgfSwKKyAgMTYsIDB4ZjE3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAxLDB4YjYsMHgwMSwweDJmLDB4YzAgfSwKKyAgMTYsIDB4ZjE4MCwgMCwgezB4MTgsMHg3MCwweDAyLDB4ZGMsMHgwYSwweDk2LDB4MTAsMHgyOSwweGMxLDB4NGIsMHg3MCwweDA2LDB4ZGMsMHgxMCwweDg1LDB4MDAgfSwKKyAgMTYsIDB4ZjE5MCwgMCwgezB4MjUsMHg4MCwweDA4LDB4NjAsMHg4MiwweDFhLDB4MjAsMHhhMywweDAwLDB4MjUsMHhjMCwweDBiLDB4MzEsMHgwMiwweDVjLDB4NDAgfSwKKyAgMTYsIDB4ZjFhMCwgMCwgezB4ODcsMHgwMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFiMCwgMCwgezB4MjAsMHgxNCwweGM4LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDg4LDB4MjAsMHgwMiwweGVkLDB4MDAsMHg4YSwweDYwLDB4MjAgfSwKKyAgMTYsIDB4ZjFjMCwgMCwgezB4YzAsMHgwYSwweDMwLDB4MDIsMHhjYywweDA0LDB4YjEsMHgwMCwweDI0LDB4MDAsMHgyOCwweDI0LDB4MDIsMHgwYSwweDAwLDB4MzMgfSwKKyAgMTYsIDB4ZjFkMCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MGIsMHhiMCwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDAsMHgyYywweGMwLDB4ODgsMHgzMCwweDAyLDB4ODggfSwKKyAgMTYsIDB4ZjFlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzYgfSwKKyAgMTYsIDB4ZjFmMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4ZTUsMHgwMCwweDA5LDB4YzgsMHhhYiwweGUyLDB4MGIsMHhmMCwweDAyLDB4ZmMsMHgwMCwweDRhLDB4MDAgfSwKKyAgMTYsIDB4ZjIwMCwgMCwgezB4MzYsMHhjMCwweDA4LDB4OTAsMHgwMywweGE2LDB4MDAsMHhmZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweDdjLDB4MDAgfSwKKyAgMTYsIDB4ZjIxMCwgMCwgezB4OGYsMHgwMCwweDJmLDB4YzAsMHgyOCwweGYwLDB4MDIsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjIyMCwgMCwgezB4ODAsMHgwMCwweGUxLDB4MDAsMHhmYSwweDAxLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmOSwweDQwLDB4M2UgfSwKKyAgMTYsIDB4ZjIzMCwgMCwgezB4YzAsMHgwNywweGIwLDB4MDMsMHhlYywweDAwLDB4ZmEsMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MjMsMHhlNSwweDAwLDB4ZmIgfSwKKyAgMTYsIDB4ZjI0MCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzYywweGMwLDB4MGYsMHhiMCwweDIzLDB4ZTAgfSwKKyAgMTYsIDB4ZjI1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4ZmMsMHgyMCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4ZjI2MCwgMCwgezB4MGMsMHhjOCwweDAzLDB4ZmMsMHgyMCwweGNkLDB4ODEsMHhiMywweGMyLDB4NGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGNhLDB4MDAgfSwKKyAgMTYsIDB4ZjI3MCwgMCwgezB4M2MsMHg4MCwweDBjLDB4ZDAsMHg4MiwweDM2LDB4MDEsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDggfSwKKyAgMTYsIDB4ZjI4MCwgMCwgezB4Y2YsMHgwNCwweDNhLDB4YzAsMHg1YywweGIwLDB4MDMsMHhjMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI5MCwgMCwgezB4ODEsMHgwNCwweDYyLDB4MDQsMHhiOCwweDQwLDB4MmMsMHg2MCwweDA4LDB4ODksMHgwMiwweGVlLDB4ODAsMHhhOSwweDYwLDB4MmEgfSwKKyAgMTYsIDB4ZjJhMCwgMCwgezB4YzAsMHgwYiwweGIwLDB4MDMsMHg4YywweDAwLDB4YWEsMHg0MCwweDJlLDB4MDAsMHgwOCwweDEwLDB4MDIsMHgyNiwweDgxLDB4ZWIgfSwKKyAgMTYsIDB4ZjJiMCwgMCwgezB4MDAsMHgyNiwweGMwLDB4OGIsMHhiMCwweDEzLDB4NmMsMHgwMCwweGRiLDB4MDAsMHgyZSwweGMwLDB4M2QsMHhiMCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZjJjMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyMywweDAwLDB4YmIsMHgwMywweDJlLDB4YzggfSwKKyAgMTYsIDB4ZjJkMCwgMCwgezB4MDksMHhiMCwweDAyLDB4ZWUsMHgwMCwweDhiLDB4MTAsMHgyNiwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGE4LDB4MDAgfSwKKyAgMTYsIDB4ZjJlMCwgMCwgezB4MmUsMHhjMCwweDA4LDB4ODgsMHgyMiwweGE0LDB4ODAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDRiLDB4YjAsMHgyMiwweDBjLDB4MDAgfSwKKyAgMTYsIDB4ZjJmMCwgMCwgezB4OGIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjMwMCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHhiMiwweDAwLDB4MmUsMHhjMCwweDI5LDB4MjgsMHgwMiwweGVjLDB4MDEsMHhhMCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZjMxMCwgMCwgezB4YzAsMHgwOSwweDMwLDB4MDIsMHhjYywweDAwLDB4YTAsMHgwMCwweDJjLDB4NDAsMHgwOCwweDAwLDB4NDIsMHg4NCwweDAwLDB4OTMgfSwKKyAgMTYsIDB4ZjMyMCwgMCwgezB4MDAsMHg2YywweGMwLDB4MGIsMHgzMCwweDA2LDB4NGQsMHgwMCwweDkzLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ZjMzMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgyMCwweDJmLDB4YzAgfSwKKyAgMTYsIDB4ZjM0MCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGNiLDB4MDAsMHgzMywweGMwLDB4MGIsMHhmMCwweDAzLDB4ZmMsMHgxOCwweGU4LDB4MDAgfSwKKyAgMTYsIDB4ZjM1MCwgMCwgezB4MmUsMHg4MCwweDA4LDB4ODAsMHgwMywweGE0LDB4MDAsMHhiZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweDNkLDB4MTEgfSwKKyAgMTYsIDB4ZjM2MCwgMCwgezB4Y2YsMHgwMywweDNlLDB4YzEsMHg1ZCwweGYwLDB4MjMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM3MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDAsMHhmYywweDEwLDB4M2YsMHg0MCwweDBlLDB4ZTAsMHgwMywweGZjLDB4MDAsMHhmYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZjM4MCwgMCwgezB4YzAsMHgwZiwweGYwLDB4MDMsMHhiYywweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgyZiwweGMwLDB4MDMsMHg3NCwweDAwLDB4ZWYgfSwKKyAgMTYsIDB4ZjM5MCwgMCwgezB4MDAsMHgyNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgxOCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZjNhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhmYywweDg4LDB4OWMsMHgyOSwweDNmLDB4MDggfSwKKyAgMTYsIDB4ZjNiMCwgMCwgezB4MGYsMHhkMiwweDgzLDB4ZWMsMHgwMCwweGZmLDB4MDgsMHgzZiwweDI4LDB4MGYsMHhjYSwweDAzLDB4M2MsMHg0MSwweGNmLDB4MjAgfSwKKyAgMTYsIDB4ZjNjMCwgMCwgezB4NzMsMHgyYywweDBjLDB4YzAsMHgwMywweDMwLDB4MjAsMHhjZiwweDYwLDB4MzMsMHhkOCwweDBmLDB4NzgsMHgwMywweDNmLDB4ODAgfSwKKyAgMTYsIDB4ZjNkMCwgMCwgezB4ZGQsMHg5MiwweDMzLDB4YzgsMHgwZiwweDUwLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNlMCwgMCwgezB4ODAsMHgxMCwweGU1LDB4NDAsMHg4OCwweDQwLDB4MmUsMHgwNCwweDhiLDB4OTQsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MGUgfSwKKyAgMTYsIDB4ZjNmMCwgMCwgezB4N2YsMHg4ZiwweDllLDB4ODMsMHg2NSwweDgyLDB4Y2YsMHg2OCwweDNlLDB4NTAsMHg4ZCwweDA0LDB4OTIsMHgyZiwweDA0LDB4ZDMgfSwKKyAgMTYsIDB4ZjQwMCwgMCwgezB4NDAsMHg3NCwweGRjLDB4MGQsMHhhMiwweDAyLDB4MjAsMHg0MCwweDg5LDB4MDAsMHgyMiwweGYwLDB4MGIsMHg5OCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZjQxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDA5LDB4YTAsMHg4NSwweDJjLDB4MDEgfSwKKyAgMTYsIDB4ZjQyMCwgMCwgezB4MGIsMHgwMCwweDEwLDB4Y2MsMHg0MCwweGEyLDB4MDgsMHgyYywweDAwLDB4ZGIsMHgxMSwweDAyLDB4ODksMHgwMCwweDkzLDB4MzAgfSwKKyAgMTYsIDB4ZjQzMCwgMCwgezB4MjAsMHgwNSwweDA4LDB4MTMsMHgwMiwweDgwLDB4MDgsMHhhMywweDYwLDB4NjAsMHhjMCwweDBhLDB4YjAsMHg4MiwweDA4LDB4ODQgfSwKKyAgMTYsIDB4ZjQ0MCwgMCwgezB4ODEsMHgyMCwweDIwLDB4ZDAsMHgwYiwweDEwLDB4MDIsMHhhMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ1MCwgMCwgezB4YzAsMHgxNSwweGE0LDB4MTIsMHg4OCwweDgwLDB4NmUsMHgyMCwweDBiLDB4ODgsMHg4MiwweGVlLDB4MDAsMHhiYSwweDgxLDB4MmUgfSwKKyAgMTYsIDB4ZjQ2MCwgMCwgezB4NjAsMHg1YSwweDk4LDB4MDIsMHhhMiwweDAwLDB4OGIsMHgwMCwweDJhLDB4NjAsMHgwOCwweDExLDB4MWEsMHgyYywweDAwLDB4YmIgfSwKKyAgMTYsIDB4ZjQ3MCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHhiOCwweDBhLDB4MjgsMHgwMCwweDgxLDB4MjAsMHgwMiwweGMwLDB4MGIsMHg5MCwweDAyLDB4YjAgfSwKKyAgMTYsIDB4ZjQ4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhlZCwweDAwLDB4ZDksMHg4MCwweDNlLDB4MjAgfSwKKyAgMTYsIDB4ZjQ5MCwgMCwgezB4NGYsMHg5OCwweDAwLDB4ZWIsMHgyMCwweGZiLDB4ZTAsMHgyZSwweDYwLDB4MGIsMHg4YywweDYyLDB4YWUsMHgyMCwweDhiLDB4MDAgfSwKKyAgMTYsIDB4ZjRhMCwgMCwgezB4MjIsMHg2MCwweDA4LDB4YmMsMHgwMywweGEwLDB4MjAsMHhlYiwweDAwLDB4MjIsMHhjMSwweDBhLDB4MTgsMHgwYiwweDI1LDB4MDAgfSwKKyAgMTYsIDB4ZjRiMCwgMCwgezB4ZDksMHgwMCwweGIyLDB4YzAsMHgwZiwweDkwLDB4MGIsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRjMCwgMCwgezB4ZTAsMHgwMSwweDk0LDB4ODgsMHhmZiwweDAwLDB4M2YsMHgwMSwweDBmLDB4ZDAsMHgwMSwweGYwLDB4MDgsMHhkZCwweDAxLDB4M2YgfSwKKyAgMTYsIDB4ZjRkMCwgMCwgezB4NDIsMHgwNywweDQwLDB4MDMsMHg1YywweDAwLDB4YWYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGY4LDB4MDAsMHhmMCwweDAwLDB4ZGYgfSwKKyAgMTYsIDB4ZjRlMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDIzLDB4ZjQsMHg1MCwweGZkLDB4ODAsMHgzZiwweGMwLDB4MGYsMHhkMCwweDAzLDB4NzggfSwKKyAgMTYsIDB4ZjRmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhhYywweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ZjUwMCwgMCwgezB4MGYsMHg5NCwweDAzLDB4YTgsMHgyMCwweGNhLDB4NDAsMHgzYSwweDQwLDB4MGYsMHg5NCwweDAzLDB4ZWEsMHgwOCwweGZiLDB4MDAgfSwKKyAgMTYsIDB4ZjUxMCwgMCwgezB4M2EsMHgwMCwweDRjLDB4ZjYsMHgyMywweDJjLDB4MzAsMHhjYiwweDAwLDB4MzYsMHhjMCwweDBkLDB4OTAsMHgwMywweGExLDB4MDIgfSwKKyAgMTYsIDB4ZjUyMCwgMCwgezB4ZDksMHgwMCwweGJhLDB4YzAsMHgwZiwweDk4LDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjUzMCwgMCwgezB4YzgsMHgwNSwweDI0LDB4MDAsMHg4YSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTUsMHgwMiwweGUwLDB4MDgsMHg4OCwweDgwLDB4MjIgfSwKKyAgMTYsIDB4ZjU0MCwgMCwgezB4NzAsMHg4ZiwweDhjLDB4MDIsMHhlMCwweDAwLDB4YmYsMHgwMiwweDIwLDB4MDAsMHgwOCwweGI4LDB4MDIsMHgwZSwweDAwLDB4ZGYgfSwKKyAgMTYsIDB4ZjU1MCwgMCwgezB4MDAsMHgyMywweGRkLDB4MDgsMHg5OCwweDgyLDB4MmEsMHgwMCwweDg5LDB4ODAsMHgyMywweGMwLDB4MGIsMHg1MCwweDFhLDB4MzIgfSwKKyAgMTYsIDB4ZjU2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0NCwweDAwLDB4ODMsMHgwNSwweDI0LDB4NDEgfSwKKyAgMTYsIDB4ZjU3MCwgMCwgezB4MDksMHgxMCwweDAyLDB4Y2UsMHgwMCwweDgzLDB4OTAsMHgyYywweDgwLDB4MWIsMHgyNCwweDgyLDB4Y2MsMHgwMCwweGJiLDB4MDAgfSwKKyAgMTYsIDB4ZjU4MCwgMCwgezB4MmMsMHg4MCwweDA4LDB4MDQsMHgwOCwweDA0LDB4MDEsMHg4YiwweDAwLDB4MjIsMHhjMCwweDI4LDB4MTIsMHgwMiwweDZjLDB4ODAgfSwKKyAgMTYsIDB4ZjU5MCwgMCwgezB4ODEsMHg0OCwweDI0LDB4YzQsMHgwYiwweDEwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVhMCwgMCwgezB4MjAsMHgwMSwweDNlLDB4NDIsMHg4NiwweDgwLDB4MmQsMHg2MCwweDBiLDB4NjgsMHgwMiwweGY2LDB4OTAsMHg4ZCwweDgwLDB4MjEgfSwKKyAgMTYsIDB4ZjViMCwgMCwgezB4MjIsMHgwYiwweDU4LDB4MDIsMHhkNywweDQwLDB4YjcsMHg5MCwweDIxLDB4ZTAsMHgwOCwweDQ5LDB4OTIsMHgxZSwweDUzLDB4OTcgfSwKKyAgMTYsIDB4ZjVjMCwgMCwgezB4ODEsMHgyMSwweGUwLDB4NDgsMHhjOCwweDBhLDB4NTIsMHgyMiwweDg1LDB4ODgsMHgyNSwweGUwLDB4MGIsMHg1OCwweDAyLDB4MDggfSwKKyAgMTYsIDB4ZjVkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODMsMHgwMCwweDM0LDB4YzAgfSwKKyAgMTYsIDB4ZjVlMCwgMCwgezB4MGYsMHgwMCwweDAzLDB4Y2UsMHgyMCwweGMzLDB4MzAsMHg3YywweDk0LDB4MGIsMHgzNCwweDgzLDB4Y2MsMHgxNCwweGYzLDB4MDIgfSwKKyAgMTYsIDB4ZjVmMCwgMCwgezB4M2MsMHg4MCwweDBjLDB4MDQsMHgwMywweDA0LDB4NjAsMHhjMywweDAwLDB4YjAsMHhjMCwweDBjLDB4MTAsMHgwMywweGVjLDB4MDAgfSwKKyAgMTYsIDB4ZjYwMCwgMCwgezB4YzksMHgwMCwweDNjLDB4YzQsMHgwZiwweDExLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjYxMCwgMCwgezB4NDAsMHgxZCwweDljLDB4MDAsMHhlZSwweDAxLDB4M2YsMHhjMCwweDRmLDB4ZTEsMHgwMywweGQ0LDB4NDAsMHhmNSwweDE2LDB4N2EgfSwKKyAgMTYsIDB4ZjYyMCwgMCwgezB4YzAsMHg0ZSwweGYwLDB4MDMsMHhmNCwweDEwLDB4MzcsMHgwNSwweDNkLDB4YzAsMHgwZiwweGMwLDB4MGIsMHhkYywweDQwLDB4ZmYgfSwKKyAgMTYsIDB4ZjYzMCwgMCwgezB4MDAsMHgzYiwweGMyLDB4MGUsMHhkMCwweDA3LDB4YmMsMHgwMiwweGVmLDB4MDAsMHgzYiwweGM2LDB4MGYsMHhkMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ZjY0MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmNCwweDAwLDB4ZGQsMHg4NCwweDMzLDB4ODAgfSwKKyAgMTYsIDB4ZjY1MCwgMCwgezB4MDQsMHhmMCwweDAzLDB4NmMsMHgwMiwweGNiLDB4MDIsMHg3ZSwweGMwLDB4MWYsMHhhMCwweDUzLDB4ZWMsMHgwMCwweGNiLDB4MjAgfSwKKyAgMTYsIDB4ZjY2MCwgMCwgezB4MzQsMHg0MCwweDBjLDB4ZDAsMHgwYiwweDIwLDB4MTAsMHhlYiwweDAwLDB4MWUsMHhlMCwweDBmLDB4MzAsMHgwYiwweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZjY3MCwgMCwgezB4YzEsMHgwMCwweDMyLDB4YzAsMHgwZiwweDkxLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY4MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHg4NywweDAwLDB4MjEsMHg4MCwweDA4LDB4NjAsMHgwMCwweDE0LDB4MDAsMHg4NSwweDAwLDB4MmQgfSwKKyAgMTYsIDB4ZjY5MCwgMCwgezB4ODAsMHgwYiwweDcwLDB4NTIsMHhkNCwweDA0LDB4ODMsMHgyOCwweDI5LDB4YzAsMHgyOCwweDUwLDB4MDMsMHg1MCwweDAwLDB4ODcgfSwKKyAgMTYsIDB4ZjZhMCwgMCwgezB4NDAsMHgyNSwweGM4LDB4MGYsMHg2MCwweDAyLDB4MDQsMHgwMCwweGE3LDB4MDAsMHgzZCwweGM4LDB4MGIsMHg1MiwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4ZjZiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg4ZSwweDAwLDB4OTUsMHg4MCwweDIxLDB4ZTAgfSwKKyAgMTYsIDB4ZjZjMCwgMCwgezB4MDksMHgzOCwweDAyLDB4MWUsMHgxMSwweGE3LDB4ODAsMHgyZCwweGYwLDB4MGIsMHg3OCwweDUyLDB4Y2UsMHgwYSwweDk3LDB4OTUgfSwKKyAgMTYsIDB4ZjZkMCwgMCwgezB4MjEsMHhlMCwweDE5LDB4NWMsMHgwMiwweDBlLDB4MDAsMHhhNywweDgwLDB4MjksMHhjOCwweDBiLDB4ZjgsMHgwMiwweDFlLDB4MjAgfSwKKyAgMTYsIDB4ZjZlMCwgMCwgezB4OGQsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDU4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZmMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4MiwweGUwLDB4YTAsMHhlOCwweDI5LDB4MzAsMHgwNiwweDBlLDB4NTAsMHhhYiwweDgwLDB4MmMgfSwKKyAgMTYsIDB4ZjcwMCwgMCwgezB4ZjAsMHgwYiwweDMxLDB4NDIsMHhjYywweDAwLDB4OTMsMHgwMCwweDI4LDB4YzQsMHgwOSwweDk4LDB4MDIsMHg0YywweDI4LDB4ODMgfSwKKyAgMTYsIDB4ZjcxMCwgMCwgezB4MDAsMHgyNCwweGMwLDB4MGEsMHhiMCwweDAyLDB4MGQsMHgwMCwweGEyLDB4NTgsMHgyOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4ZjcyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDAwLDB4ZGUsMHg4MCwweDMxLDB4YTAgfSwKKyAgMTYsIDB4ZjczMCwgMCwgezB4MDksMHhlMiwweDBiLDB4NzgsMHgwNCwweGVlLDB4YTQsMHgyZiwweGE0LDB4OGIsMHhlYywweDAyLDB4ZDgsMHgwMCwweGRhLDB4MDAgfSwKKyAgMTYsIDB4Zjc0MCwgMCwgezB4MjcsMHg4MSwweDBkLDB4ZWMsMHgwNiwweDFiLDB4MDAsMHhlYSwweDA0LDB4M2UsMHg4MCwweDBiLDB4ZTAsMHgwMywweDNiLDB4MDAgfSwKKyAgMTYsIDB4Zjc1MCwgMCwgezB4Y2UsMHhjMCwweDIyLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4ODAsMHhmOCwweDEwLDB4M2UsMHgwNSwweDBlLDB4ODgsMHgwMywweGUwLDB4MDgsMHg5OCwweDQwLDB4M2UgfSwKKyAgMTYsIDB4Zjc3MCwgMCwgezB4MDAsMHgwZiwweDg0LDB4ODMsMHhlMSwweDQwLDB4ZTgsMHgwMCwweDNhLDB4MDIsMHgwZSwweDgwLDB4NDMsMHhlMSwweDQwLDB4ZjggfSwKKyAgMTYsIDB4Zjc4MCwgMCwgezB4MDAsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgyMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4Zjc5MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ZjdhMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MDQsMHgyMCwweGU5LDB4OTAsMHgzMiwweDY4LDB4MGUsMHg5OCwweDAzLDB4YTQsMHgwMCwweGMxLDB4MDAgfSwKKyAgMTYsIDB4ZjdiMCwgMCwgezB4MzAsMHg0MCwweDBjLDB4OTQsMHg4MywweDI0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGE0LDB4MDAgfSwKKyAgMTYsIDB4ZjdjMCwgMCwgezB4YzksMHgwMCwweDMwLDB4NTAsMHgwYywweDFhLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdkMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg1MCwweDI4LDB4OTAsMHgwYSwweDI0LDB4MDgsMHg4OSwweDA2LDB4MTYgfSwKKyAgMTYsIDB4ZjdlMCwgMCwgezB4NjEsMHgwYiwweDljLDB4MDIsMHhlNCwweDIwLDB4YTksMHgwMCwweDM2LDB4NDAsMHgwZCwweDkwLDB4MDIsMHgyNywweDYwLDB4YTkgfSwKKyAgMTYsIDB4ZjdmMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MjgsMHg5MCwweDFhLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgzNiwweDQwLDB4MjgsMHg5OCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4ZjgwMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyYywweDAwLDB4YTksMHgwOCwweDJlLDB4YzIgfSwKKyAgMTYsIDB4ZjgxMCwgMCwgezB4MDksMHgxMCwweDAwLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgwNiwweDQwLDB4ODksMHg5NiwweDA2LDB4ZTYsMHgwMCwweDg5LDB4MDAgfSwKKyAgMTYsIDB4ZjgyMCwgMCwgezB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDIsMHg4OSwweDAwLDB4MjQsMHg0MCwweDA4LDB4OTAsMHgwMiwweDBjLDB4MDYgfSwKKyAgMTYsIDB4ZjgzMCwgMCwgezB4ODMsMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHg4MSwweDQ0LDB4MmMsMHg1MCwweDA4LDB4MTQsMHgwMiwweDA1LDB4ODAsMHg4MSwweDIwLDB4NjQgfSwKKyAgMTYsIDB4Zjg1MCwgMCwgezB4NzAsMHgxYiwweDE0LDB4MDIsMHhlNCwweDgwLDB4YTEsMHgyMCwweDY0LDB4NDAsMHgxOSwweDEyLDB4MGEsMHgwNCwweDgwLDB4YTEgfSwKKyAgMTYsIDB4Zjg2MCwgMCwgezB4MDAsMHgyYywweDUwLDB4MTgsMHgxNCwweDAyLDB4ODUsMHgwMCwweDgxLDB4NDAsMHgyNCwweDQwLDB4NDAsMHgxMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4Zjg3MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZTAsMHgwMCwweDNjLDB4MDAgfSwKKyAgMTYsIDB4Zjg4MCwgMCwgezB4MGQsMHg4MCwweDAyLDB4MDAsMHgwMCwweGFhLDB4NTAsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTEsMHg0MCwweGM4LDB4NTIgfSwKKyAgMTYsIDB4Zjg5MCwgMCwgezB4NzIsMHgxNCwweDBjLDB4MDUsMHgxNiwweDIwLDB4MDgsMHhjOCwweDUwLDB4M2UsMHgwMSwweDBjLDB4ODAsMHgwMywweGEwLDB4MDQgfSwKKyAgMTYsIDB4ZjhhMCwgMCwgezB4YzgsMHgwMCwweGIyLDB4MDAsMHgwYywweDgwLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhiMCwgMCwgezB4OTgsMHgxOSwweGY1LDB4MDIsMHhmZCwweDQwLDB4M2YsMHhkMCwweDBmLDB4ZDQsMHgyMywweGY0LDB4NDQsMHhmZCwweDE0LDB4N2YgfSwKKyAgMTYsIDB4ZjhjMCwgMCwgezB4NTAsMHgwZiwweGQ0LDB4MDcsMHhmNCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NTAsMHgwNywweGQxLDB4MjMsMHhmNCwweDQwLDB4ZjkgfSwKKyAgMTYsIDB4ZjhkMCwgMCwgezB4NDAsMHgxZSwweDUwLDB4MDcsMHhkMCwweDBiLDB4NzUsMHgwMCwweGZkLDB4MDIsMHgzZSwweDUwLDB4MGYsMHhkNCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4ZjhlMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDAwLDB4YzksMHhhOCwweDNlLDB4NzIgfSwKKyAgMTYsIDB4ZjhmMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4ZTYsMHhjMCwweGZkLDB4YTAsMHhiMywweDQwLDB4MGYsMHhkMCwweDAzLDB4NzcsMHg4MCwweGNkLDB4OTAgfSwKKyAgMTYsIDB4ZjkwMCwgMCwgezB4N2YsMHg0MCwweDBmLDB4ZGEsMHhhMywweDE2LDB4OTAsMHhhOSwweGMwLDB4MzIsMHg2MCwweDRjLDB4YjEsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4ZjkxMCwgMCwgezB4YzEsMHgwMCwweDMzLDB4NmEsMHgwYiwweGRhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjkyMCwgMCwgezB4MzgsMHgxMCwweGUzLDB4NDAsMHg4OCwweGUwLDB4MmUsMHgzMCwweDBiLDB4OGQsMHgwMiwweGYzLDB4NDAsMHhiOCwweGU4LDB4NzYgfSwKKyAgMTYsIDB4ZjkzMCwgMCwgezB4MDAsMHg0ZiwweDgwLDB4MGEsMHgyMiwweDgwLDB4ODgsMHg5MCwweDZlLDB4MjgsMHg4ZiwweDhhLDB4MDMsMHg2MSwweDQ0LDB4ZjggfSwKKyAgMTYsIDB4Zjk0MCwgMCwgezB4ZTEsMHgzZSwweDJhLDB4MDgsMHg4OCwweDAzLDB4NDIsMHhhMCwweGRjLDB4YTAsMHgzZSwweDEwLDB4MGIsMHg4NSwweDBhLDB4MGUgfSwKKyAgMTYsIDB4Zjk1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweGEwLDB4ODUsMHgwOCwweDJkLDB4NDggfSwKKyAgMTYsIDB4Zjk2MCwgMCwgezB4MWIsMHg1MiwweDgyLDB4ZDQsMHg4MCwweGIxLDB4MTQsMHgyMCwweDQwLDB4MGIsMHgxOCwweDAyLDB4MDUsMHg4MiwweDgxLDB4MDAgfSwKKyAgMTYsIDB4Zjk3MCwgMCwgezB4NmMsMHg0MiwweDBiLDB4MTIsMHg4MiwweDA0LDB4MDAsMHhhMSwweDYwLDB4MjEsMHg1MCwweDBiLDB4NTAsMHgwMiwweDE0LDB4OTAgfSwKKyAgMTYsIDB4Zjk4MCwgMCwgezB4OTUsMHgyYywweDI4LDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDEsMHg4ZCwweDQ0LDB4MmYsMHg0MCwweDBiLDB4ZDQsMHgwMiwweGY0LDB4MDQsMHhiOSwweDA4LDB4MjIgfSwKKyAgMTYsIDB4ZjlhMCwgMCwgezB4NDAsMHgwYSwweDkyLDB4MDIsMHgyYywweDg0LDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYSwweDE0LDB4MDIsMHg2YywweDgwLDB4YTkgfSwKKyAgMTYsIDB4ZjliMCwgMCwgezB4MDEsMHgyYSwweDQwLDB4MDksMHg1MCwweDBhLDB4NWMsMHgwMiwweDhkLDB4NjAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDQyLDB4MDYgfSwKKyAgMTYsIDB4ZjljMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDYyLDB4YzksMHgwMiwweDNlLDB4NTQgfSwKKyAgMTYsIDB4ZjlkMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4NDAsMHgyMiwweDQ2LDB4MGIsMHg5OCwweDAzLDB4NjcsMHgyMCwweGM5LDB4MDEgfSwKKyAgMTYsIDB4ZjllMCwgMCwgezB4MmUsMHg2OSwweDBiLDB4OTQsMHgwYiwweDI1LDB4MjAsMHhhOSwweDAwLDB4MjIsMHg0MCwweDJkLDB4OTIsMHgwYSwweDI2LDB4MjIgfSwKKyAgMTYsIDB4ZjlmMCwgMCwgezB4OTksMHgwMCwweDJhLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmEwMCwgMCwgezB4MjgsMHgwMSwweDg2LDB4MDIsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4ODAsMHhmMSwweGEwLDB4M2UgfSwKKyAgMTYsIDB4ZmExMCwgMCwgezB4NjIsMHgwZiwweDk4LDB4ODMsMHhjNiwweDIwLDB4ZjksMHgwMCwweDNlLDB4NDksMHgwZiwweDkwLDB4ODMsMHhlNCwweDAwLDB4NzEgfSwKKyAgMTYsIDB4ZmEyMCwgMCwgezB4MDIsMHgzZSwweDQwLDB4MGUsMHg5MCwweDBiLDB4ZTYsMHg4MCwweGY5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4ZmEzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDEwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4ZmE0MCwgMCwgezB4NGYsMHg4MCwweDQzLDB4YjAsMHgwMCwweGM4LDB4NDEsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjEsMHgwMiwweGM4LDB4MDIgfSwKKyAgMTYsIDB4ZmE1MCwgMCwgezB4M2UsMHgxMCwweDRjLDB4ODAsMHgwMywweDAxLDB4MjAsMHhjOCwweDAwLDB4M2IsMHgwMCwweDBjLDB4YzAsMHgwMywweGIwLDB4MDAgfSwKKyAgMTYsIDB4ZmE2MCwgMCwgezB4Y2MsMHgwNCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE3MCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDAsMHg4YSwweDgwLDB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGY4LDB4MDQsMHg4ZSwweDAwLDB4MjMgfSwKKyAgMTYsIDB4ZmE4MCwgMCwgezB4YjIsMHgwZSwweGUwLDB4ODIsMHhmOSwweDA0LDB4OGEsMHgwMCwweDJlLDB4ODEsMHgwYywweGUwLDB4MGEsMHgzYSwweDgwLDB4ZGEgfSwKKyAgMTYsIDB4ZmE5MCwgMCwgezB4MDAsMHgyMiwweGI2LDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDhlLDB4MDAsMHgyYSwweDgwLDB4MGIsMHg2MCwweDBiLDB4MGEgfSwKKyAgMTYsIDB4ZmFhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0NCwweDAyLDB4OTMsMHg4MSwweDJjLDB4YzAgfSwKKyAgMTYsIDB4ZmFiMCwgMCwgezB4NGIsMHgzMCwweDAyLDB4YzgsMHgwMCwweDgzLDB4Y2EsMHgyMCwweGUwLDB4MTksMHhiMCwweDA2LDB4OGMsMHgwMCwweDgxLDB4MDQgfSwKKyAgMTYsIDB4ZmFjMCwgMCwgezB4NDQsMHg0MCwweDA4LDB4MzQsMHgwMiwweDBkLDB4MDAsMHg4MywweDAwLDB4MmEsMHgwMCwweDA4LDB4MDAsMHgwYSwweDgwLDB4NDAgfSwKKyAgMTYsIDB4ZmFkMCwgMCwgezB4ODgsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0YiwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFlMCwgMCwgezB4YTAsMHgwMSwweDA0LDB4MDIsMHg5NywweDA4LDB4MmQsMHhjMCwweDBiLDB4NjAsMHgwNiwweGNhLDB4MDAsMHg4MywweDA5LDB4MjEgfSwKKyAgMTYsIDB4ZmFmMCwgMCwgezB4YzAsMHgwYSwweDcwLDB4MDIsMHhkYywweDAwLDB4ODUsMHgzMSwweDJkLDB4NjgsMHgwOSwweDMwLDB4MDIsMHgxYywweDE0LDB4OTMgfSwKKyAgMTYsIDB4ZmIwMCwgMCwgezB4MjAsMHgyMCwweGMwLDB4MDgsMHhmMCwweDQyLDB4OWMsMHgwMiwweDhmLDB4MDAsMHgyOSwweDQwLDB4MDMsMHg3MCwweDEyLDB4MjggfSwKKyAgMTYsIDB4ZmIxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxNiwweDAwLDB4OTYsMHg4NCwweDNkLDB4YTAgfSwKKyAgMTYsIDB4ZmIyMCwgMCwgezB4MGYsMHg3OCwweDAzLDB4OWEsMHgwMiwweDg3LDB4ODAsMHhiMSwweGUwLDB4MGIsMHg3OCwweDAzLDB4YjYsMHgwMCwweGM1LDB4YTAgfSwKKyAgMTYsIDB4ZmIzMCwgMCwgezB4MzUsMHg2MSwweDBjLDB4NzgsMHgxMywweDFlLDB4MDIsMHhjNywweDgwLDB4MjksMHgwMCwweDBjLDB4NDgsMHgwMywweDkwLDB4MDAgfSwKKyAgMTYsIDB4ZmI0MCwgMCwgezB4YzQsMHg4MCwweDMxLDB4NjAsMHgwZiwweDU4LDB4MDMsMHg2YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI1MCwgMCwgezB4MDgsMHgxZCwweGE0LDB4MDAsMHhlYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGU4LDB4MDgsMHhmYiwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ZmI2MCwgMCwgezB4ODAsMHgwZiwweDkwLDB4MTMsMHhlNCwweDA4LDB4ZjksMHgwMCwweDNjLDB4NTAsMHgyZSwweGYwLDB4MDMsMHhlOCwweDA4LDB4ZmIgfSwKKyAgMTYsIDB4ZmI3MCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGIsMHgzMCwweDEzLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHgzMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ZmI4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhkNiwweDAwLDB4Y2QsMHg4MCwweDMzLDB4ZTAgfSwKKyAgMTYsIDB4ZmI5MCwgMCwgezB4MGMsMHhmOCwweDAzLDB4ZmEsMHgwMCwweGZkLDB4ODAsMHgzZiwweGEwLDB4MGQsMHhmOCwweDAzLDB4ZmEsMHg0MCwweGNkLDB4ZDAgfSwKKyAgMTYsIDB4ZmJhMCwgMCwgezB4NzcsMHg3ZSwweDBjLDB4ZTgsMHg0MywweDFlLDB4MDAsMHhjZiwweGQ4LDB4M2YsMHhlMCwweDBjLDB4YzgsMHgwMywweDNhLDB4YzQgfSwKKyAgMTYsIDB4ZmJiMCwgMCwgezB4Y2MsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJjMCwgMCwgezB4YTgsMHgxMSwweDk0LDB4MDIsMHg4ZCwweDAwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMywweGQ4LDB4MTAsMHgzNSwweDIwLDB4OGIgfSwKKyAgMTYsIDB4ZmJkMCwgMCwgezB4ZDQsMHgwZCwweDY0LDB4MDMsMHhkOCwweGMwLDB4ODUsMHgwMCwweDJmLDB4NGUsMHgwNywweDY0LDB4MDIsMHg5YywweDAyLDB4ZDcgfSwKKyAgMTYsIDB4ZmJlMCwgMCwgezB4MzAsMHgyZiwweDA0LDB4MGQsMHhmMSwweDBiLDB4NTQsMHg0MCwweGFmLDB4MDAsMHgzNSwweDQwLDB4MDgsMHg3MCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4ZmJmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDQwLDB4ODQsMHgxOCwweDIxLDB4ODAgfSwKKyAgMTYsIDB4ZmMwMCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZGEsMHgyMCwweGI1LDB4MDAsMHgwOSwweDAwLDB4MDgsMHg3MCwweDAyLDB4ZDQsMHgwNCwweDg1LDB4MDAgfSwKKyAgMTYsIDB4ZmMxMCwgMCwgezB4NmQsMHg0YywweDg5LDB4NjAsMHgwMiwweDVjLDB4NDAsMHg5NywweDAwLDB4NmQsMHhjMCwweDA5LDB4NDAsMHgwMiwweDU4LDB4ODAgfSwKKyAgMTYsIDB4ZmMyMCwgMCwgezB4ODQsMHg4OCwweDI1LDB4NDAsMHgwOCwweGQwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmMzMCwgMCwgezB4MjAsMHgxNCwweGM2LDB4NDgsMHg4MCwweDAwLDB4MjAsMHg4MCwweDA4LDB4YWMsMHgwMiwweGE4LDB4MDAsMHhiMSwweDAwLDB4YTggfSwKKyAgMTYsIDB4ZmM0MCwgMCwgezB4ODgsMHgwOSwweDIyLDB4MDIsMHg4NiwweDQyLDB4ODEsMHgwMCwweDZjLDB4NTIsMHgwYiwweDIwLDB4MDIsMHhjNywweDUyLDB4ODMgfSwKKyAgMTYsIDB4ZmM1MCwgMCwgezB4MDAsMHgyYywweDAwLDB4MDgsMHgzNCwweDgyLDB4NjcsMHgwMCwweGEzLDB4ODAsMHgyMCwweDQwLDB4MDgsMHgzMCwweDAyLDB4MDggfSwKKyAgMTYsIDB4ZmM2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMywweDAwLDB4Y2IsMHhjMCwweGIyLDB4NDAgfSwKKyAgMTYsIDB4ZmM3MCwgMCwgezB4MmMsMHg5MCwweDgyLDB4ZTYsMHgwMCwweGJiLDB4ODAsMHhiZSwweDc4LDB4MDgsMHg4ZSwweDAyLDB4ZWUsMHgwMCwweDhkLDB4MDAgfSwKKyAgMTYsIDB4ZmM4MCwgMCwgezB4MjcsMHg2MCwweDBkLDB4OTAsMHgwYSwweDZmLDB4MDAsMHg5ZiwweDAyLDB4MmUsMHgwMCwweDA5LDB4YjQsMHgwMywweDY3LDB4ODAgfSwKKyAgMTYsIDB4ZmM5MCwgMCwgezB4Y2EsMHg0MCwweGU0LDB4YzAsMHgwYywweDMwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNhMCwgMCwgezB4ODAsMHgwMCwweGUwLDB4ODAsMHhmYiwweDIyLDB4M2UsMHg0MCwweDBmLDB4ODAsMHgxMywweGU0LDB4MDAsMHhmYiwweDgwLDB4M2UgfSwKKyAgMTYsIDB4ZmNiMCwgMCwgezB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNSwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZSwweDcwLDB4MjMsMHhhYywweDIwLDB4ZmIgfSwKKyAgMTYsIDB4ZmNjMCwgMCwgezB4MDAsMHgzZSwweGMwLDB4OGYsMHg4MCwweDAzLDB4ZTksMHgyMCwweGY5LDB4MDgsMHgzZSwweDQwLDB4MGYsMHhiMCwweDEzLDB4ZTAgfSwKKyAgMTYsIDB4ZmNkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4YzYsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4ZmNlMCwgMCwgezB4MGYsMHhkMSwweDgzLDB4MzQsMHg0MCwweGNmLDB4MDAsMHgzZCwweDQwLDB4MGMsMHhkMCwweDAzLDB4ZGUsMHg1MCwweDBkLDB4MDAgfSwKKyAgMTYsIDB4ZmNmMCwgMCwgezB4NzMsMHg0MCwweDBjLDB4ZDEsMHgwMywweDdjLDB4NDAsMHg4NywweDAyLDB4YjMsMHgwMCwweDBkLDB4ZjQsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4ZmQwMCwgMCwgezB4Y2UsMHgyMCwweDMyLDB4NDAsMHgwYywweGQwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQxMCwgMCwgezB4ODEsMHgwNCwweDYxLDB4MjIsMHg4YSwweDAwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHg0MCwweDI1LDB4MDAsMHg4OSwweGMzLDB4MmUgfSwKKyAgMTYsIDB4ZmQyMCwgMCwgezB4MjAsMHgwYSwweDk4LDB4MDMsMHhhMSwweDAwLDB4ODksMHgwMCwweDM2LDB4NDAsMHg4OCwweDk0LDB4MDIsMHgwZiwweDAxLDB4YWIgfSwKKyAgMTYsIDB4ZmQzMCwgMCwgezB4MDAsMHgzMiwweGMwLDB4MDgsMHgwNCwweDBhLDB4MjksMHgwMCwweGE5LDB4MDIsMHhhMiwweDQwLDB4MGQsMHhiMCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4ZmQ0MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwMCwweDAwLDB4ODksMHgwMCwweDIyLDB4NjEgfSwKKyAgMTYsIDB4ZmQ1MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjUsMHgwMSwweDliLDB4ODgsMHgyZSwweDYwLDB4MDgsMHg4OCwweDAyLDB4ZTgsMHgwMCwweGIxLDB4MDIgfSwKKyAgMTYsIDB4ZmQ2MCwgMCwgezB4MjQsMHg0MCwweDE4LDB4OTAsMHgwMiwweDJjLDB4MDAsMHhhYiwweDAxLDB4MjAsMHhjMSwweDA4LDB4YjQsMHg0MiwweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZmQ3MCwgMCwgezB4ODIsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQ4MCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MjAsMHg0MCwweDBiLDB4MDAsMHgwYSwweDA0LDB4NDYsMHg4MywweDAxLDB4MmMgfSwKKyAgMTYsIDB4ZmQ5MCwgMCwgezB4NDAsMHgxYSwweDAwLDB4MDYsMHg4MCwweDAwLDB4ODEsMHgwMCwweDI0LDB4NDAsMHgwOCwweDIwLDB4MGEsMHgwYywweDAxLDB4YTMgfSwKKyAgMTYsIDB4ZmRhMCwgMCwgezB4MDAsMHgyNCwweDAwLDB4MDgsMHg4MCwweDAyLDB4MDAsMHgwMCwweGExLDB4MDAsMHgyMCwweDQwLDB4MDksMHgzMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4ZmRiMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAyLDB4YzgsMHgwMCwweDIyLDB4MDAgfSwKKyAgMTYsIDB4ZmRjMCwgMCwgezB4MGYsMHg5MCwweDAyLDB4MjUsMHgwMCwweGRhLDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAyLDB4Y2MsMHgwMCwweGZkLDB4MDAgfSwKKyAgMTYsIDB4ZmRkMCwgMCwgezB4MzcsMHg0MCwweDBjLDB4MTAsMHgxMywweDJjLDB4MDIsMHhhZiwweDAwLDB4MzIsMHhjMCwweDBkLDB4YjAsMHgwMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZmRlMCwgMCwgezB4Y2EsMHgwMCwweDMyLDB4NDAsMHg0YywweDkwLDB4MGIsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmRmMCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDA3LDB4YzAsMHgwMywweGY0LDB4MWMsMHhmNCwweDAwLDB4M2YgfSwKKyAgMTYsIDB4ZmUwMCwgMCwgezB4MDAsMHgxZiwweGMwLDB4MjMsMHhiMCwweDAyLDB4OWQsMHgwMSwweDNmLDB4NDAsMHg4ZiwweGMwLDB4MDcsMHhmYywweDAyLDB4ZmYgfSwKKyAgMTYsIDB4ZmUxMCwgMCwgezB4MDAsMHg3YiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHg3MCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ZmUyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYSwweDAwLDB4Y2IsMHg4MCwweDNmLDB4MjQgfSwKKyAgMTYsIDB4ZmUzMCwgMCwgezB4MGEsMHhjMSwweDAzLDB4ZmMsMHgyNCwweGNkLDB4MjAsMHgzNywweDBhLDB4MGMsMHhjMiwweDgzLDB4MzAsMHg4MCwweGRjLDB4MDIgfSwKKyAgMTYsIDB4ZmU0MCwgMCwgezB4M2YsMHhjYywweDBkLDB4ZDksMHgwMywweDNjLDB4NTgsMHhkZiwweDMwLDB4MzMsMHhjOCwweDBkLDB4ZjQsMHgyMywweDNjLDB4NDAgfSwKKyAgMTYsIDB4ZmU1MCwgMCwgezB4ZmYsMHgwMCwweDNmLDB4YzUsMHg0ZiwweGYwLDB4MjMsMHhiMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmU2MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDIsMHgwYiwweDgyLDB4MmUsMHgwOCwweDBkLDB4YjcsMHgwMiwweGZkLDB4MDAsMHg4MywweDE4LDB4MGEgfSwKKyAgMTYsIDB4ZmU3MCwgMCwgezB4NTgsMHgwYSwweDg0LDB4YTIsMHhhNSwweGEwLDB4ODksMHgzMCwweDIyLDB4NTUsMHgwOCwweDEyLDB4NjIsMHhiZCwweDkwLDB4OGYgfSwKKyAgMTYsIDB4ZmU4MCwgMCwgezB4NjIsMHgyMSwweGQ2LDB4NDgsMHhmMywweDAyLDB4M2MsMHhjNSwweGJmLDB4NDgsMHgyZiwweGQ4LDB4NGIsMHhiNywweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ZmU5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlYywweDAwLDB4ODMsMHgwMCwweDJlLDB4ODkgfSwKKyAgMTYsIDB4ZmVhMCwgMCwgezB4MjgsMHgwMCwweDAyLDB4ZWMsMHhhMCwweDg5LDB4MjIsMHgyOCwweDgyLDB4MDgsMHgxMiwweDAyLDB4MjgsMHg0MCwweDlhLDB4MDggfSwKKyAgMTYsIDB4ZmViMCwgMCwgezB4MjgsMHhjOCwweDg4LDB4YjIsMHgwYSwweDBkLDB4MTAsMHg5MywweDEwLDB4YTAsMHhjOCwweDI4LDB4MzAsMHgwMiwweDRjLDB4MDAgfSwKKyAgMTYsIDB4ZmVjMCwgMCwgezB4YjMsMHg2MCwweDJjLDB4YzQsMHgwYiwweDMwLDB4YzIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmVkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4NDAsMHg4YiwweDAwLDB4MmUsMHg4MCwweDA4LDB4YjEsMHgwMiwweGVjLDB4MDIsMHg4YiwweDAwLDB4MjAgfSwKKyAgMTYsIDB4ZmVlMCwgMCwgezB4ZDAsMHgwYSwweDkwLDB4MDIsMHhhYywweDAwLDB4MGIsMHgwMSwweDI2LDB4NDAsMHgwOCwweDk0LDB4MDIsMHg4YywweDAwLDB4OGIgfSwKKyAgMTYsIDB4ZmVmMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgxMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4ZmYwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg4YywweDIwLDB4Y2IsMHgwMiwweDNlLDB4MmQgfSwKKyAgMTYsIDB4ZmYxMCwgMCwgezB4MDgsMHg4MCwweDAzLDB4ZWMsMHgwOCwweGM5LDB4ODAsMHgxZSwweDA0LDB4MGMsMHhiMCwweDAzLDB4MDEsMHgwOCwweDUwLDB4MTggfSwKKyAgMTYsIDB4ZmYyMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4MDQsMHgwMywweDJjLDB4MDAsMHhkYiwweDAxLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwYiwweDJjLDB4MDggfSwKKyAgMTYsIDB4ZmYzMCwgMCwgezB4YmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg4MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmY0MCwgMCwgezB4ZTEsMHgwMCwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHg2MCwweDBmLDB4YzAsMHgyMywweGVjLDB4MDAsMHhmZiwweGMwLDB4YmUgfSwKKyAgMTYsIDB4ZmY1MCwgMCwgezB4NjAsMHg4ZiwweGM5LDB4MjMsMHhmNiwweDUwLDB4ZWQsMHg4MCwweGI4LDB4NTAsMHhhZiwweGMwLDB4MDMsMHhmYywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4ZmY2MCwgMCwgezB4MDAsMHgzZiwweGMxLDB4MGUsMHhiMCwweDAzLDB4ZmMsMHgwNCwweGZmLDB4MDIsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4ZmY3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZWIsMHgwMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4ZmY4MCwgMCwgezB4MGQsMHg5MCwweDAzLDB4MmMsMHgwMCwweDg5LDB4MDAsMHgzZSwweDk4LDB4OGMsMHgzMCwweDAzLDB4NjEsMHg4MCwweGZhLDB4NDAgfSwKKyAgMTYsIDB4ZmY5MCwgMCwgezB4M2UsMHg0MCwweDJjLDB4YTUsMHgwMywweDJjLDB4MDAsMHhmYiwweDAxLDB4M2MsMHhjMCwweDJjLDB4MzAsMHgwMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4ZmZhMCwgMCwgezB4ZGIsMHgwMiwweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmZiMCwgMCwgezB4Y2EsMHgwMCwweDJlLDB4ODAsMHg4YiwweDgyLDB4YTAsMHhjMCwweDhjLDB4OTAsMHgwMiwweDNjLDB4MDAsMHg4YiwweGYwLDB4MjIgfSwKKyAgMTYsIDB4ZmZjMCwgMCwgezB4YzIsMHgwZCwweDgwLDB4MDIsMHgyNywweDAwLDB4OGIsMHgxMCwweDIyLDB4NDAsMHgwOCwweDgwLDB4MjIsMHgzYywweDAwLDB4YmYgfSwKKyAgMTYsIDB4ZmZkMCwgMCwgezB4MDAsMHgyZiwweGMwLDB4MDgsMHhmMCwweDAyLDB4M2MsMHgwMCwweGJmLDB4MDEsMHhhMywweGMwLDB4MGIsMHhmMCwweDEyLDB4ZjIgfSwKKyAgMTYsIDB4ZmZlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHgxYywweDIwLDB4NDAgfSwKKyAgMTYsIDB4ZmZmMCwgMCwgezB4MDgsMHgwMCwweDA2LDB4MmMsMHgwMCwweDliLDB4MDAsMHgyMCwweGQwLDB4MDgsMHgyMCwweDAyLDB4NGMsMHgwMCwweGEzLDB4MDAgfSwKKyAgMTYsIDB4ODAxMCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MTAsMHgwYSwweDBjLDB4MDAsMHhiYiwweDAwLDB4MjgsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAgfSwKKyAgMTYsIDB4ODAyMCwgMCwgezB4YjMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhmOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODAzMCwgMCwgezB4MjIsMHgxMSwweDFlLDB4MDAsMHg5NywweGEwLDB4MjEsMHhhMCwweDA4LDB4NzksMHgwMiwweDFlLDB4MDAsMHg5NywweDkwLDB4MjEgfSwKKyAgMTYsIDB4ODA0MCwgMCwgezB4NjAsMHgwOSwweGU4LDB4MjIsMHgzZSwweDAwLDB4YWYsMHg4NCwweDIxLDB4ZTQsMHg0OCwweDVjLDB4MDIsMHgxZSwweDAwLDB4YjcgfSwKKyAgMTYsIDB4ODA1MCwgMCwgezB4OTAsMHgyZCwweGUwLDB4MDksMHg3OCwweDAwLDB4MWUsMHgwOSwweGIzLDB4OTAsMHgyMSwweGU0LDB4MGIsMHg3OCwweDAyLDB4ZDggfSwKKyAgMTYsIDB4ODA2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTgsMHgyYywweDQwLDB4YjMsMHhiMCwweDMyLDB4NDAgfSwKKyAgMTYsIDB4ODA3MCwgMCwgezB4MmMsMHg4MSwweDEzLDB4MGMsMHg0MiwweGQxLDB4MDAsMHhiMCwweGMwLDB4OGMsMHgzMCwweDAzLDB4NDgsMHgyMCwweGUzLDB4MDEgfSwKKyAgMTYsIDB4ODA4MCwgMCwgezB4M2MsMHhjMCwweDBjLDB4MzAsMHgwMywweDBjLDB4MDAsMHhmMywweDEwLDB4M2MsMHhjMCwweGNkLDB4MzIsMHgwYiwweDBjLDB4NDAgfSwKKyAgMTYsIDB4ODA5MCwgMCwgezB4ZDMsMHgwMCwweDMwLDB4YzAsMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODBhMCwgMCwgezB4NDAsMHgxNSwweGJjLDB4MDAsMHhlNywweDAwLDB4M2YsMHg4MCwweDBiLDB4ZjEsMHgwMywweGZkLDB4MDAsMHg2ZCwweDAwLDB4MzIgfSwKKyAgMTYsIDB4ODBiMCwgMCwgezB4NDAsMHgxZiwweDcwLDB4MDcsMHhkOCwweDQxLDB4YzMsMHgxMCwweDNiLDB4YzAsMHgwZiwweGQxLDB4MDMsMHhmZCwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4ODBjMCwgMCwgezB4MTAsMHgzZiwweGMwLDB4MGUsMHhmMCwweDAzLDB4ZWMsMHgxMCwweGZmLDB4MDgsMHgzZiwweGMzLDB4MGYsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4ODBkMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhlYywweDA0LDB4ZmIsMHgwMiwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ODBlMCwgMCwgezB4MGIsMHhhMCwweDAzLDB4YWMsMHgwMCwweGRiLDB4MDAsMHgzNiwweDgwLDB4MGQsMHhiMCwweDAzLDB4YWMsMHgwMCwweGU4LDB4MDAgfSwKKyAgMTYsIDB4ODBmMCwgMCwgezB4MzYsMHhjMSwweDJlLDB4OTAsMHgwMywweDJjLDB4MDAsMHhjYiwweGEwLDB4MzYsMHhkYywweDBmLDB4YjAsMHgwMywweDJkLDB4NjggfSwKKyAgMTYsIDB4ODEwMCwgMCwgezB4ZmIsMHhhMCwweDkyLDB4YzIsMHgwYywweGIxLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODExMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDgsMHgzNywweDAwLDB4MmQsMHhjMCwweDBiLDB4ZTAsMHgwMiwweDFkLDB4ODAsMHhiNywweDA0LDB4MjMgfSwKKyAgMTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwYSwweDQwLDB4MDIsMHgxYywweDE4LDB4ODQsMHgwMCwweDI1LDB4YzAsMHgxOCwweDUwLDB4MzIsMHgwZCwweDgwLDB4YTMgfSwKKyAgMTYsIDB4ODEzMCwgMCwgezB4MzAsMHgyMSwweGNjLDB4MGIsMHgzNCwweDgyLDB4MWMsMHgxMCwweGI3LDB4MzAsMHgyMSwweGM4LDB4MDgsMHg3MCwweDAyLDB4ZDIgfSwKKyAgMTYsIDB4ODE0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDIwLDB4YjcsMHg4MCwweDJkLDB4NjAgfSwKKyAgMTYsIDB4ODE1MCwgMCwgezB4MGIsMHhmYywweDIyLDB4OWUsMHgwMCwweDhkLDB4ODAsMHgyNSwweGEwLDB4MDgsMHhmOCwweDIyLDB4OTIsMHgwMCwweGI0LDB4ODAgfSwKKyAgMTYsIDB4ODE2MCwgMCwgezB4MjUsMHhlMCwweDA4LDB4ZjgsMHgwMiwweDFlLDB4MDAsMHg4NywweGIwLDB4MjEsMHhlMCwweDA5LDB4N2EsMHgwMiwweDFlLDB4MTggfSwKKyAgMTYsIDB4ODE3MCwgMCwgezB4YjMsMHg4MCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHhmMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODE4MCwgMCwgezB4NDgsMHgwNCwweGM1LDB4MjAsMHhiMywweDAxLDB4MmMsMHhkOCwweDBiLDB4M2MsMHgwMiwweDJjLDB4MDgsMHhiOSwweDAwLDB4MjAgfSwKKyAgMTYsIDB4ODE5MCwgMCwgezB4MDMsMHgwYSwweDAwLDB4ODIsMHgyMiwweDA4LDB4OTAsMHgwZCwweDI2LDB4ZTQsMHgwOCwweDEwLDB4MDIsMHgwYywweDAwLDB4YTMgfSwKKyAgMTYsIDB4ODFhMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MGIsMHgzMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDAsMHgyMiwweGMwLDB4MjgsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ODFiMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg5OSwweDAwLDB4ZmEsMHgwMiwweDNmLDB4OTAgfSwKKyAgMTYsIDB4ODFjMCwgMCwgezB4MGYsMHhlYywweDIzLDB4YTgsMHgwMCwweGRhLDB4MDAsMHgzNSwweDgwLDB4MGQsMHhlMCwweDAyLDB4YmEsMHgwMiwweGZlLDB4YzIgfSwKKyAgMTYsIDB4ODFkMCwgMCwgezB4YjYsMHhhMCwweDBlLDB4ZTQsMHgwYiwweDI4LDB4MDAsMHhjYSwweDAwLDB4YjIsMHg4MCwweDBmLDB4YTAsMHgwYiwweDI4LDB4MDAgfSwKKyAgMTYsIDB4ODFlMCwgMCwgezB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGEwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODFmMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODIsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ODIwMCwgMCwgezB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDQwLDB4ZTgsMHgxMCwweDNhLDB4MDAsMHg0ZiwweDg0LDB4ODMsMHhlMCwweDAwLDB4ZjggfSwKKyAgMTYsIDB4ODIxMCwgMCwgezB4MDAsMHgzYSwweDAwLDB4MGYsMHgwMCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4ODIyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNSwweDAwLDB4YzksMHgwMiwweDNlLDB4NDAgfSwKKyAgMTYsIDB4ODIzMCwgMCwgezB4MGYsMHg5MCwweDIzLDB4MjQsMHgwMCwweGM5LDB4MDAsMHgzMiwweDY4LDB4MmYsMHgxMCwweDAzLDB4MjQsMHgwMCwweGU5LDB4MTQgfSwKKyAgMTYsIDB4ODI0MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4OTAsMHgwYiwweDA0LDB4MDAsMHhkOSwweDAwLDB4MWUsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4ODI1MCwgMCwgezB4YzksMHgwMCwweDM2LDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODI2MCwgMCwgezB4ODAsMHgxNCwweDY0LDB4MDAsMHg4OSwweDAxLDB4MmUsMHg0MCwweDRiLDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweGMyLDB4YTIgfSwKKyAgMTYsIDB4ODI3MCwgMCwgezB4NjAsMHg4OCwweDkwLDB4MDMsMHg2NCwweDAwLDB4ODksMHhjMSwweGEyLDB4NDAsMHg0OCwweDE2LDB4MDMsMHg2NCwweDAyLDB4ODkgfSwKKyAgMTYsIDB4ODI4MCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDIyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgzZSwweDQwLDB4MjgsMHg5MCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4ODI5MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDQsMHgyNCwweDAwLDB4ODksMHgwMiwweDJlLDB4NDAgfSwKKyAgMTYsIDB4ODJhMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MTAsMHgyMiwweDQwLDB4ODksMHg5MCwweDAyLDB4YWMsMHgwMCwweGExLDB4MDggfSwKKyAgMTYsIDB4ODJiMCwgMCwgezB4MjIsMHg0MCwweDA5LDB4OTgsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4ODJjMCwgMCwgezB4ODksMHgwMCwweDI2LDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODJkMCwgMCwgezB4MDgsMHgwMCwweDI0LDB4MDAsMHg4MSwweDAwLDB4MmMsMHg0MSwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODEsMHg4MSwweDIwLDB4MjIgfSwKKyAgMTYsIDB4ODJlMCwgMCwgezB4NDgsMHgwOCwweDEyLDB4MDIsMHhjNCwweDgxLDB4ODEsMHgyNCwweDAyLDB4NDgsMHgwYSwweDkwLDB4MDIsMHg4NCwweGEwLDB4ODEgfSwKKyAgMTYsIDB4ODJmMCwgMCwgezB4MjgsMHg2YywweDRhLDB4MDgsMHgxMiwweGQyLDB4MDQsMHhhMSwweDgxLDB4MjgsMHgyYywweDRhLDB4MDgsMHgxMiwweDgyLDB4MDIgfSwKKyAgMTYsIDB4ODMwMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MDgsMHg2MSwweDQwLDB4YzgsMHgwMCwweDJlLDB4MTQgfSwKKyAgMTYsIDB4ODMxMCwgMCwgezB4MGYsMHg4NSwweDBiLDB4MjEsMHg0MiwweGNhLDB4NTAsMHgyMiwweDE0LDB4MGQsMHg4NSwweDQzLDB4YTEsMHg0MCwweGU4LDB4NTAgfSwKKyAgMTYsIDB4ODMyMCwgMCwgezB4MzAsMHgwMCwweDBkLDB4ODUsMHgwMiwweGExLDB4YzAsMHhkOCwweDIwLDB4M2EsMHgwOCwweDJjLDB4ODIsMHgwYiwweDIwLDB4ODIgfSwKKyAgMTYsIDB4ODMzMCwgMCwgezB4YzgsMHgyMCwweDM0LDB4MDksMHg4YywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODM0MCwgMCwgezB4OTgsMHgwZCwweGZjLDB4MDIsMHhmOSwweDAwLDB4M2YsMHg0MCwweDRmLDB4ZDEsMHgwMywweGU0LDB4NDAsMHhmNSwweDE0LDB4YmYgfSwKKyAgMTYsIDB4ODM1MCwgMCwgezB4NDQsMHgwZCwweDUxLDB4MjMsMHg1YywweDQwLDB4ZjUsMHgxMCwweDFmLDB4NGUsMHg0ZCwweDUwLDB4MDMsMHg2NCwweDA4LDB4ZjkgfSwKKyAgMTYsIDB4ODM2MCwgMCwgezB4MjgsMHgzZSwweDRhLDB4OGYsMHg5MiwweDgzLDB4ZTQsMHhhMCwweGY5LDB4MjgsMHgzYSwweDRiLDB4MGYsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4ODM3MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhmNCwweDQwLDB4ZmQsMHgwMCwweDMwLDB4NDAgfSwKKyAgMTYsIDB4ODM4MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGRkLDB4MDAsMHgzYiwweDQwLDB4MGUsMHg5MCwweDAzLDB4NzQsMHgwMCwweDVkLDB4MDAgfSwKKyAgMTYsIDB4ODM5MCwgMCwgezB4MzYsMHg2NCwweDBkLDB4ZDAsMHgwMCwweGE2LDB4MDAsMHhmOSwweDQwLDB4MzIsMHg3OCwweDBjLDB4OTksMHgwMywweDI0LDB4NDAgfSwKKyAgMTYsIDB4ODNhMCwgMCwgezB4YzksMHg5MCwweDMyLDB4NTAsMHgwZiwweDliLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODNiMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4ODAsMHhiOCwweDAwLDB4MjIsMHgwMSwweDA4LDB4ODAsMHgwYSwweDIwLDB4MDAsMHg4OCwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ODNjMCwgMCwgezB4MDAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIyLDB4MjAsMHgwOCwweDhhLDB4OGIsMHhlMSwweDAwLDB4YjggfSwKKyAgMTYsIDB4ODNkMCwgMCwgezB4ODAsMHgyMiwweDMwLDB4MjgsMHgwZCwweDAyLDB4MjIsMHgwMCwweGQ4LDB4ZTQsMHgyMiwweDI4LDB4MGIsMHg4ZiwweDBhLDB4MGUgfSwKKyAgMTYsIDB4ODNlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4YjEsMHgwMCwweGEwLDB4NDAgfSwKKyAgMTYsIDB4ODNmMCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MDQsMHgwMCwweDg5LDB4MDAsMHgwOCwweDQwLDB4MGEsMHg5MCwweDQyLDB4NDQsMHgwMCwweDkxLDB4MDAgfSwKKyAgMTYsIDB4ODQwMCwgMCwgezB4MjAsMHg1OCwweDI4LDB4OTAsMHgwMiwweDg1LDB4MDAsMHg4MSwweDIwLDB4YTAsMHg0YywweDA5LDB4MTIsMHgwYSwweDA0LDB4ODAgfSwKKyAgMTYsIDB4ODQxMCwgMCwgezB4OTEsMHg0MCwweGEwLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODQyMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDAyLDB4MjAsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4OSwweDAxLDB4MjIgfSwKKyAgMTYsIDB4ODQzMCwgMCwgezB4NDAsMHgyOCwweDkwLDB4MjIsMHgwNCwweDAwLDB4ODksMHgxMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjEgfSwKKyAgMTYsIDB4ODQ0MCwgMCwgezB4MDAsMHgyMiwweDQwLDB4ODEsMHg5MCwweDAyLDB4MDQsMHgwMCwweDkxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4ODQ1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNSwweDAwLDB4ZjEsMHgwMCwweDMyLDB4NjAgfSwKKyAgMTYsIDB4ODQ2MCwgMCwgezB4MmMsMHg5MiwweDEzLDB4MjQsMHgwMiwweGQxLDB4MTAsMHgzYSwweDQwLDB4MGUsMHgxMiwweDAzLDB4NjYsMHgwNCwweGQ5LDB4MDAgfSwKKyAgMTYsIDB4ODQ3MCwgMCwgezB4YjYsMHg0MCwweDBkLDB4MTksMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDA5LDB4OTAsMHgwMSwweDI0LDB4MDAgfSwKKyAgMTYsIDB4ODQ4MCwgMCwgezB4ZDksMHgwMiwweDIyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODQ5MCwgMCwgezB4MmEsMHgwMSwweGE1LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2NCwweDBmLDB4MTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDgxLDB4M2UgfSwKKyAgMTYsIDB4ODRhMCwgMCwgezB4NjYsMHg4ZiwweDkwLDB4MjMsMHhlNCwweDgwLDB4ZjksMHgwNCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDA0LDB4ZjkgfSwKKyAgMTYsIDB4ODRiMCwgMCwgezB4MDAsMHgzYywweDQwLDB4MGUsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHgxMCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4ODRjMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJhLDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgyNCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4ODRkMCwgMCwgezB4MmMsMHg4NCwweDAzLDB4MjAsMHgwMCwweGI4LDB4MjAsMHgzZSwweDAwLDB4OGMsMHg4MCwweDAzLDB4YTAsMHgwMCwweDcwLDB4ODIgfSwKKyAgMTYsIDB4ODRlMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MDgsMHhmOCwweDAwLDB4MzIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDIwLDB4MDggfSwKKyAgMTYsIDB4ODRmMCwgMCwgezB4YzgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODUwMCwgMCwgezB4MjgsMHgwNSwweDI4LDB4MDQsMHhiZSwweDgwLDB4M2EsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDQsMHg4ZSwweDAwLDB4NmQgfSwKKyAgMTYsIDB4ODUxMCwgMCwgezB4OTAsMHgwZCwweGEwLDB4MDIsMHgzYSwweDAwLDB4OGUsMHg4MCwweGEyLDB4ODAsMHgwZSwweGUwLDB4MGIsMHg2OCwweDAwLDB4YmEgfSwKKyAgMTYsIDB4ODUyMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGRhLDB4MDAsMHgyZSwweDgwLDB4MDgsMHhhMCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4ODUzMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4ODEsMHg0YywweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAgfSwKKyAgMTYsIDB4ODU0MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MGMsMHgxOCwweGEzLDB4MDIsMHgyYywweDEwLDB4ODgsMHgzMCwweDA2LDB4ODIsMHg4MSwweGEwLDB4MDAgfSwKKyAgMTYsIDB4ODU1MCwgMCwgezB4MmEsMHhjMCwweDBiLDB4MzAsMHgwYSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDFhLDB4YjAsMHgwMiwweDhjLDB4MDEgfSwKKyAgMTYsIDB4ODU2MCwgMCwgezB4ODMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODU3MCwgMCwgezB4MjAsMHgwMSwweDFjLDB4MTAsMHhiNCwweDBhLDB4MmIsMHhjOCwweDA4LDB4MzEsMHgyNiwweDFjLDB4MDAsMHg4NiwweDAwLDB4MmQgfSwKKyAgMTYsIDB4ODU4MCwgMCwgezB4YzAsMHgwOSwweDcyLDB4MDIsMHgxZCwweDAwLDB4YTUsMHg0MCwweDI5LDB4YzAsMHgwYSwweDYwLDB4MDIsMHg1YywweDg4LDB4YjMgfSwKKyAgMTYsIDB4ODU5MCwgMCwgezB4MjAsMHgyNSwweGM4LDB4MGEsMHg3MiwweDAyLDB4OWMsMHg4MCwweDk3LDB4MjAsMHgyYywweGU4LDB4ODAsMHg3MiwweDAyLDB4ZTggfSwKKyAgMTYsIDB4ODVhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgxNiwweDAwLDB4YjUsMHg4MCwweDNkLDB4ZTIgfSwKKyAgMTYsIDB4ODViMCwgMCwgezB4MGMsMHg3YSwweDhiLDB4MGUsMHhjMCwweGE3LDB4ODEsMHgyYywweDIwLDB4MGMsMHhmYywweDAzLDB4OTIsMHgwMiwweGVmLDB4ODAgfSwKKyAgMTYsIDB4ODVjMCwgMCwgezB4MzksMHhlNCwweDBiLDB4ZDgsMHgwMSwweDFmLDB4MDAsMHhmNywweDgwLDB4YjMsMHhmNCwweDhlLDB4NzksMHgwMywweDhlLDB4MDAgfSwKKyAgMTYsIDB4ODVkMCwgMCwgezB4YzcsMHhjNCwweDNkLDB4ZTgsMHgyYywweDdiLDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODVlMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhkZCwweDg3LDB4YjYsMHgwMywweGVkLDB4Y2MsMHhlOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4ODVmMCwgMCwgezB4NDAsMHgwZiwweGIwLDB4MDcsMHhjYywweDEwLDB4MGIsMHgwMCwweDM2LDB4ZDgsMHgwZiwweDgwLDB4NDMsMHhhZCwweDgwLDB4ZmIgfSwKKyAgMTYsIDB4ODYwMCwgMCwgezB4MjgsMHgzYSwweGMwLDB4MGQsMHhiNCwweDAzLDB4NmMsMHhlMiwweGViLDB4NjAsMHgzZSwweGQ0LDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4ODYxMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4ZmUsMHg5MCwweDNmLDB4ZTUgfSwKKyAgMTYsIDB4ODYyMCwgMCwgezB4MGUsMHhmOCwweDAzLDB4M2UsMHgxMCwweGZmLDB4OTAsMHgxNywweDYwLDB4MGYsMHhmYywweDAzLDB4N2EsMHgwMCwweGVlLDB4ODAgfSwKKyAgMTYsIDB4ODYzMCwgMCwgezB4MzcsMHhlMiwweDBlLDB4NzgsMHgwZiwweGZmLDB4NDAsMHhlZiwweDg4LDB4MWYsMHhlMCwweDBjLDB4ZjgsMHg4MywweGZlLDB4ODAgfSwKKyAgMTYsIDB4ODY0MCwgMCwgezB4Y2YsMHhkMCwweGIzLDB4ZjAsMHgwYywweGY4LDB4YzMsMHgxMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODY1MCwgMCwgezB4YTgsMHgxMSwweDljLDB4NDAsMHhiNCwweDEwLDB4MGYsMHhjYywweDAwLDB4NzIsMHgwMiwweDFjLDB4MDAsMHhiNiwweDAyLDB4MDkgfSwKKyAgMTYsIDB4ODY2MCwgMCwgezB4YzAsMHgyOCwweGYwLDB4MDIsMHg5OCwweDAwLDB4YTYsMHgwMCwweDIxLDB4YzAsMHgwYiwweDYwLDB4MDMsMHhmYywweDAyLDB4ODcgfSwKKyAgMTYsIDB4ODY3MCwgMCwgezB4MDAsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGUsMHgwMCwweDhmLDB4MTAsMHgyMSwweGMwLDB4MDgsMHhmMCwweDAzLDB4NmEgfSwKKyAgMTYsIDB4ODY4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5NCwweDAwLDB4YjYsMHgwMiwweDJmLDB4YzIgfSwKKyAgMTYsIDB4ODY5MCwgMCwgezB4MWEsMHgzMCwweDgwLDB4MWMsMHgwMCwweGI2LDB4MDgsMHgwMSwweDQwLDB4MGEsMHhmMCwweDAyLDB4MTgsMHgwMCwweDg3LDB4MDAgfSwKKyAgMTYsIDB4ODZhMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4ZDAsMHgwMiwweDljLDB4MTAsMHg4NywweDAwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4NDQgfSwKKyAgMTYsIDB4ODZiMCwgMCwgezB4ODcsMHgxMCwweDY0LDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwNiwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODZjMCwgMCwgezB4NjAsMHgxNCwweGNlLDB4NjAsMHhiMCwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzQsMHgwYSwweDBjLDB4MDgsMHhiMCwweDA0LDB4MDAgfSwKKyAgMTYsIDB4ODZkMCwgMCwgezB4NDAsMHgwOCwweDMwLDB4YTIsMHg4OSwweDgwLDB4YTIsMHg2MiwweDIwLDB4ZTAsMHgwYiwweDAwLDB4MGEsMHhjYywweDA4LDB4ODMgfSwKKyAgMTYsIDB4ODZlMCwgMCwgezB4MDAsMHg2YywweGMwLDB4MDgsMHgzMCwweDUyLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NTggfSwKKyAgMTYsIDB4ODZmMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZSwweDAwLDB4ZjgsMHgwMCwweDNmLDB4ZDAgfSwKKyAgMTYsIDB4ODcwMCwgMCwgezB4MGUsMHhmYywweDAzLDB4M2MsMHgwMCwweGY5LDB4MDAsMHg5MiwweDg0LDB4MGYsMHhmYywweDAzLDB4NjQsMHgwMCwweDgwLDB4MDAgfSwKKyAgMTYsIDB4ODcxMCwgMCwgezB4YjcsMHhjMywweDBmLDB4YjgsMHg4MywweGJjLDB4MDQsMHhlZiwweDAwLDB4M2YsMHhjMCwweDNjLDB4ZjAsMHgwMywweGZjLDB4MDIgfSwKKyAgMTYsIDB4ODcyMCwgMCwgezB4Y2YsMHgwMCwweDM3LDB4YzAsMHgyOCwweGYwLDB4MTMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODczMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmOCwweDQxLDB4M2UsMHhjOCwweDBmLDB4MzIsMHgwMywweGVjLDB4MDAsMHhmOCwweDAwLDB4M2EgfSwKKyAgMTYsIDB4ODc0MCwgMCwgezB4YzQsMHgwZiwweGIxLDB4MDMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4YzAsMHgwZiwweGU0LDB4MGIsMHhlYywweDA0LDB4ZmIgfSwKKyAgMTYsIDB4ODc1MCwgMCwgezB4MDAsMHgzZSwweGMxLDB4MGYsMHhiMCwweDQzLDB4ZWMsMHgwNCwweGZiLDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTQgfSwKKyAgMTYsIDB4ODc2MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmNCwweDAwLDB4ZmMsMHg4MCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4ODc3MCwgMCwgezB4MWYsMHhmMCwweDAzLDB4M2MsMHgwOCwweGZiLDB4MDAsMHgzMywweDgwLDB4MmUsMHhmMCwweDEzLDB4YTQsMHgwNCwweGNiLDB4MDAgfSwKKyAgMTYsIDB4ODc4MCwgMCwgezB4YjksMHhjMCwweDJjLDB4ZDgsMHgwYiwweDNjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDA5LDB4NzAsMHgwMCwweDJjLDB4MDQgfSwKKyAgMTYsIDB4ODc5MCwgMCwgezB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODdhMCwgMCwgezB4YzEsMHgwMCwweDZjLDB4MDAsMHhiOCwweDgwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMywweDZjLDB4MDAsMHhiOSwweDE2LDB4MjggfSwKKyAgMTYsIDB4ODdiMCwgMCwgezB4NzIsMHgwOCwweGIwLDB4MjIsMHgyNywweDQwLDB4ZGIsMHgwMCwweDIyLDB4YzAsMHgwOCwweGJkLDB4ODIsMHgyYywweDA4LDB4YmIgfSwKKyAgMTYsIDB4ODdjMCwgMCwgezB4MDAsMHgyZSwweGMwLDB4NDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMxLDB4MGIsMHhiMCwweDAyLDB4ZTAgfSwKKyAgMTYsIDB4ODdkMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YjgsMHg2MCwweDJlLDB4YzAgfSwKKyAgMTYsIDB4ODdlMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGIxLDB4MDAsMHgyYSwweDg0LDB4NGEsMHgzMCwweDIyLDB4YWMsMHgyMCwweDk4LDB4ODAgfSwKKyAgMTYsIDB4ODdmMCwgMCwgezB4MmEsMHhjMCwweDA4LDB4MzAsMHgwMiwweGFjLDB4MDAsMHgzYiwweDAwLDB4MmMsMHhjMCwweDBhLDB4YjAsMHgwMiwweGFjLDB4MDggfSwKKyAgMTYsIDB4ODgwMCwgMCwgezB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODgxMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDEsMHhiMCwweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MDQsMHhiMCwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ODgyMCwgMCwgezB4ODAsMHgwOCwweDMwLDB4MDIsMHgwMCwweDAwLDB4MTAsMHgwNCwweDI4LDB4YzAsMHgwOCwweDIwLDB4NDIsMHg4YywweDAwLDB4YjMgfSwKKyAgMTYsIDB4ODgzMCwgMCwgezB4MDAsMHgyYywweGMwLDB4NDIsMHgzMCwweDBhLDB4OGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4OGIsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4ODg0MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4ZjgsMHg1MCwweDNmLDB4YzAgfSwKKyAgMTYsIDB4ODg1MCwgMCwgezB4MGIsMHhmMCwweDAzLDB4M2MsMHgwMCwweGZhLDB4MDQsMHgzMiwweDgwLDB4MGUsMHhmMCwweDIzLDB4YWMsMHgwMCwweGQ5LDB4MDAgfSwKKyAgMTYsIDB4ODg2MCwgMCwgezB4M2IsMHhjMCwweDBjLDB4OTAsMHgwMywweGJjLDB4MDQsMHhmZiwweDAwLDB4M2QsMHhjMCwweDJlLDB4ZjAsMHgwYiwweDNjLDB4MDAgfSwKKyAgMTYsIDB4ODg3MCwgMCwgezB4ZmYsMHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODg4MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDA3LDB4ZjAsMHgwMywweGZjLDB4MDQsMHg3YywweDAyLDB4YjUgfSwKKyAgMTYsIDB4ODg5MCwgMCwgezB4MDAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDM3LDB4YzAsMHgwZiwweGYwLDB4MTMsMHg3YywweDAwLDB4ZmYgfSwKKyAgMTYsIDB4ODhhMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGQsMHhmMCwweDAzLDB4NmQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MWYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4ODhiMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkMiwweDAwLDB4ZDUsMHg4MCwweDMzLDB4MGEgfSwKKyAgMTYsIDB4ODhjMCwgMCwgezB4NGMsMHhmOCwweDAzLDB4ZjIsMHgwMCwweGZjLDB4MDAsMHgzNywweDI2LDB4MWYsMHhjYSwweDAzLDB4YmMsMHhjNCwweGNmLDB4MjAgfSwKKyAgMTYsIDB4ODhkMCwgMCwgezB4MzMsMHhlNCwweDBmLDB4NzgsMHgwMywweDNlLDB4NDQsMHhjZiwweDAwLDB4M2IsMHhjZSwweDlmLDB4NjgsMHgxMywweGQwLDB4MDAgfSwKKyAgMTYsIDB4ODhlMCwgMCwgezB4Y2QsMHg4MCwweGIzLDB4NjAsMHgwZiwweGZhLDB4ODMsMHhmMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODhmMCwgMCwgezB4ODAsMHgxMCwweGUwLDB4ODAsMHhjOSwweDI4LDB4MjIsMHgzMCwweDA4LDB4YjIsMHgyMiwweGVhLDB4MDEsMHhiOCwweDgyLDB4MjAgfSwKKyAgMTYsIDB4ODkwMCwgMCwgezB4NTAsMHg0ZiwweDljLDB4MDAsMHhhOCwweGQxLDB4ZGIsMHgxMCwweGE2LDB4ZTAsMHgxNywweGI4LDB4MDMsMHhlYywweDgwLDB4ZGIgfSwKKyAgMTYsIDB4ODkxMCwgMCwgezB4MDgsMHgxZiwweGQwLDB4MGIsMHhiOCwweDAyLDB4ZjYsMHgwMCwweGZiLDB4ODAsMHgyMiwweDQwLDB4MGIsMHhiMCwweDAyLDB4NjAgfSwKKyAgMTYsIDB4ODkyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDIwLDB4ODEsMHg4MCwweDIwLDB4MDAgfSwKKyAgMTYsIDB4ODkzMCwgMCwgezB4OGIsMHgzMCwweDgyLDB4YzAsMHgwMCwweGIwLDB4MTAsMHgyOCwweDA4LDB4OGIsMHgxMSwweDMwLDB4YzQsMHg4NCwweDkwLDB4MjggfSwKKyAgMTYsIDB4ODk0MCwgMCwgezB4MjQsMHhjOCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweDEwLDB4MDQsMHhjOCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAgfSwKKyAgMTYsIDB4ODk1MCwgMCwgezB4YjMsMHgwMCwweDI0LDB4NDAsMHgwYiwweDMwLDB4MDIsMHhlMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODk2MCwgMCwgezB4YzAsMHgxNSwweGE2LDB4MDAsMHg4MSwweDAwLDB4MjIsMHgxMCwweDBiLDB4YjAsMHgxMiwweGVhLDB4MjAsMHhiYiwweDAwLDB4MmEgfSwKKyAgMTYsIDB4ODk3MCwgMCwgezB4NzAsMHgwYSwweDljLDB4MDIsMHg2MiwweDAwLDB4OTgsMHg4OCwweDI2LDB4YzgsMHgwMiwweGIyLDB4MDIsMHg4ZSwweDA4LDB4OGIgfSwKKyAgMTYsIDB4ODk4MCwgMCwgezB4MTgsMHgyMiwweGMwLDB4MGIsMHhhMCwweDAyLDB4ZWUsMHgyMCwweDNiLDB4MDAsMHgyNiwweDQwLDB4MGIsMHhiMCwweDAyLDB4NzAgfSwKKyAgMTYsIDB4ODk5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMCwweDAwLDB4Y2IsMHgwMCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4ODlhMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZTcsMHgwMCwweGI4LDB4NTIsMHgzZSwweDIwLDB4NGIsMHgwYywweDQzLDB4ZWYsMHg4MiwweDliLDB4YzAgfSwKKyAgMTYsIDB4ODliMCwgMCwgezB4MzIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDZjLDB4MDEsMHg4YiwweDgwLDB4MmUsMHhjMCwweDBiLDB4YTAsMHg4MywweGU2LDB4MDAgfSwKKyAgMTYsIDB4ODljMCwgMCwgezB4ZmIsMHgwMCwweDM2LDB4NDAsMHgwZiwweGYwLDB4MDMsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ODlkMCwgMCwgezB4ZTAsMHgwMSwweGIwLDB4MDIsMHhmZiwweDA0LDB4M2YsMHg5MCwweDBjLDB4ZjEsMHgwMSwweGY0LDB4MDgsMHg3ZCwweDgwLDB4MzcgfSwKKyAgMTYsIDB4ODllMCwgMCwgezB4MDAsMHgwZiwweGMwLDB4MjMsMHg5OCwweDAwLDB4ZjcsMHgwMCwweDJiLDB4ZTAsMHgwZiwweGY4LDB4MjMsMHhmYywweDA2LDB4ZmIgfSwKKyAgMTYsIDB4ODlmMCwgMCwgezB4ODMsMHhiZiwweGMwLDB4ODcsMHhkMCwweDAzLDB4ZGMsMHgwMCwweGVmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhiMCwweDAxLDB4ZjggfSwKKyAgMTYsIDB4OGEwMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNiwweDAwLDB4Y2IsMHgwMCwweDMzLDB4ODAgfSwKKyAgMTYsIDB4OGExMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZTEsMHgxMCwweGYyLDB4NDAsMHhiMiwweDAwLDB4M2QsMHg5NCwweDE3LDB4MmQsMHg0NCwweGZhLDB4NDEgfSwKKyAgMTYsIDB4OGEyMCwgMCwgezB4MzIsMHhjMCwweDlmLDB4YjAsMHgyMywweDJjLDB4MDIsMHhjYiwweDQwLDB4MzIsMHhjMCwweDRmLDB4OTAsMHgwMywweDNkLDB4MDAgfSwKKyAgMTYsIDB4OGEzMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGE0MCwgMCwgezB4ODgsMHgwNSwweDI2LDB4MDAsMHg4YiwweDcxLDB4MjAsMHhkNSwweDAzLDB4OTksMHgwMiwweGUwLDB4MDAsMHhiYiwweDgwLDB4MjIgfSwKKyAgMTYsIDB4OGE1MCwgMCwgezB4NjAsMHgxYywweDgwLDB4MDMsMHg2MCwweDAwLDB4YjgsMHgwMiwweDIyLDB4YzIsMHgwYiwweDMyLDB4MDIsMHgyYywweDAxLDB4OGYgfSwKKyAgMTYsIDB4OGE2MCwgMCwgezB4MDIsMHhkNywweGMwLDB4MGIsMHhhMCwweDAzLDB4NmQsMHg0MCwweDUzLDB4ODAsMHgyZSwweGMwLDB4MGUsMHhmMCwweDQzLDB4NzIgfSwKKyAgMTYsIDB4OGE3MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2OCwweDAyLDB4ODAsMHgwMCwweDI0LDB4MDAgfSwKKyAgMTYsIDB4OGE4MCwgMCwgezB4MGIsMHgzNSwweDI2LDB4YzIsMHgwMCwweGIwLDB4OTAsMHgyMCwweGMwLDB4ODgsMHgwMCwweDAyLDB4NGYsMHgyMCwweGIzLDB4MDIgfSwKKyAgMTYsIDB4OGE5MCwgMCwgezB4NjAsMHhlMiwweDFiLDB4MzgsMHgwMiwweDBjLDB4MDAsMHg4OCwweDAwLDB4NjAsMHhjMCwweDBiLDB4MzQsMHg4MiwweDRjLDB4MDIgfSwKKyAgMTYsIDB4OGFhMCwgMCwgezB4YTEsMHg5MCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHgzMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGFiMCwgMCwgezB4MjAsMHgwMSwweDNhLDB4MDgsMHg4YywweGEwLDB4MmQsMHgyMCwweDRiLDB4NzgsMHgwMiwweGRhLDB4MDAsMHhiMiwweDkwLDB4MjEgfSwKKyAgMTYsIDB4OGFjMCwgMCwgezB4NjYsMHg0OCwweDc5LDB4MDIsMHhkZSwweDQwLDB4YjcsMHg5MSwweGExLDB4ZTAsMHhkYiwweGY4LDB4MDIsMHgxZSwweDQwLDB4ODQgfSwKKyAgMTYsIDB4OGFkMCwgMCwgezB4OTAsMHgwMSwweGUwLDB4OGIsMHhmOSwweDAyLDB4NWUsMHgwMSwweDk3LDB4ODAsMHgyZCwweDYwLDB4MGEsMHg3OCwweDAwLDB4NDggfSwKKyAgMTYsIDB4OGFlMCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODAsMHgwMCwweDI0LDB4MDQgfSwKKyAgMTYsIDB4OGFmMCwgMCwgezB4MGYsMHgzMiwweDAzLDB4YzQsMHhhMCwweGYxLDB4NDIsMHgzMCwweGM0LDB4MmMsMHgzMSwweDAyLDB4NDQsMHgwMCwweGYxLDB4MTEgfSwKKyAgMTYsIDB4OGIwMCwgMCwgezB4YTAsMHhjMCwweDBiLDB4MzAsMHgwYiwweDBjLDB4NDIsMHg4MywweDAwLDB4MDAsMHhjMCwweDBmLDB4MzAsMHgwMywweDRjLDB4MDIgfSwKKyAgMTYsIDB4OGIxMCwgMCwgezB4ZTMsMHgwMCwweDNjLDB4NDAsMHgwYiwweDMwLDB4MDEsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGIyMCwgMCwgezB4YzAsMHgxZCwweGJjLDB4MDAsMHhmYywweGE1LDB4MzMsMHhjMCwweDBmLDB4ZDAsMHgwMywweGZjLDB4MDEsMHhiZiwweDAwLDB4M2YgfSwKKyAgMTYsIDB4OGIzMCwgMCwgezB4YzQsMHgwZSwweDcxLDB4MDMsMHg3NCwweDAwLDB4NzUsMHgxMCwweDNmLDB4YzAsMHgwNSwweGYwLDB4MDMsMHhkYywweDQwLDB4ZmYgfSwKKyAgMTYsIDB4OGI0MCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDQzLDB4ZmMsMHgwMCwweDdmLDB4MDAsMHgzZiwweDQwLDB4MGUsMHhmMCwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4OGI1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDQsMHhlOCwweDAwLDB4ZjIsMHgwNCwweGIzLDB4ODAgfSwKKyAgMTYsIDB4OGI2MCwgMCwgezB4MGYsMHhiOCwweDBiLDB4MmMsMHgwMCwweGViLDB4ODAsMHgzMiwweGMwLDB4MGMsMHgyMCwweDEzLDB4MmUsMHgwOCwweGNiLDB4MDEgfSwKKyAgMTYsIDB4OGI3MCwgMCwgezB4MzIsMHhjNSwweDBmLDB4YjEsMHgwMywweGVjLDB4NDgsMHhjOCwweDEwLDB4MzIsMHhmYSwweDhjLDB4MzgsMHgwMywweDNjLDB4OTAgfSwKKyAgMTYsIDB4OGI4MCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MTMsMHhjMiwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGI5MCwgMCwgezB4YzgsMHgxMCwweDk4LDB4MDAsMHhmNiwweDAwLDB4NjEsMHg4MSwweDBiLDB4ZjAsMHgwMiwweDFjLDB4MDAsMHhkNywweDAwLDB4YjcgfSwKKyAgMTYsIDB4OGJhMCwgMCwgezB4ODAsMHgwYywweDcwLDB4MDIsMHhiYywweDEwLDB4OGYsMHgwMCwweDIxLDB4YzgsMHg4YiwweDcyLDB4NDMsMHhmYywweDg4LDB4ZGMgfSwKKyAgMTYsIDB4OGJiMCwgMCwgezB4MDAsMHgzNywweGM4LDB4MGQsMHg1MCwweDAyLDB4MWMsMHgyMiwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZDMgfSwKKyAgMTYsIDB4OGJjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDAwLDB4YjYsMHg4MCwweGE5LDB4YTAgfSwKKyAgMTYsIDB4OGJkMCwgMCwgezB4NGIsMHg3YywweDAyLDB4NWUsMHgzMCwweGEzLDB4ODgsMHgyMSwweGYwLDB4MDgsMHg3OCwweDAyLDB4MTYsMHgwMCwweDg1LDB4ODAgfSwKKyAgMTYsIDB4OGJlMCwgMCwgezB4MjEsMHhlMCwweDBiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHg4NywweDgwLDB4YTEsMHhlNCwweDA4LDB4ZDgsMHgwMiwweDRlLDB4MDAgfSwKKyAgMTYsIDB4OGJmMCwgMCwgezB4OTcsMHg4MCwweDJkLDB4NzAsMHgwYiwweDc4LDB4MDIsMHhjOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGMwMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MDAsMHhiMiwweDAwLDB4MjgsMHhjMCwweDBiLDB4MTAsMHgwMiwweDRlLDB4OTAsMHg5MywweDAyLDB4MjIgfSwKKyAgMTYsIDB4OGMxMCwgMCwgezB4ZjAsMHgwOCwweDM4LDB4NDIsMHg4YywweDQyLDB4ODMsMHgwNCwweDIyLDB4ZTQsMHg0YiwweDM4LDB4MDIsMHg4ZSwweDQwLDB4ODMgfSwKKyAgMTYsIDB4OGMyMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MDksMHgzOCwweDIyLDB4NGUsMHgyMSwweDkzLDB4MDAsMHgyZSwweGUwLDB4MGIsMHgzMCwweDAyLDB4ZGIgfSwKKyAgMTYsIDB4OGMzMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAxLDB4ZmEsMHgwMCwweDNiLDB4ODkgfSwKKyAgMTYsIDB4OGM0MCwgMCwgezB4MGYsMHhhMCwweDAyLDB4NzgsMHgwOCwweGFlLDB4NDAsMHgyMywweDgwLDB4MmMsMHg2YywweDBiLDB4M2EsMHgwMCwweDhlLDB4OGMgfSwKKyAgMTYsIDB4OGM1MCwgMCwgezB4YjIsMHgwMCwweDBiLDB4ODAsMHg4MiwweGUwLDB4MDIsMHg4ZSwweDAwLDB4MjIsMHg4MCwweDBjLDB4ZTgsMHgwMiwweDdiLDB4ODAgfSwKKyAgMTYsIDB4OGM2MCwgMCwgezB4OWEsMHg4MCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGM3MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDksMHhlYywweDAwLDB4MzYsMHgyMSwweDBiLDB4ODAsMHgxMywweGExLDB4MDAsMHhmOCwweDYwLDB4M2UgfSwKKyAgMTYsIDB4OGM4MCwgMCwgezB4MDAsMHgwZiwweDgxLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDEwLDB4ZjggfSwKKyAgMTYsIDB4OGM5MCwgMCwgezB4MDAsMHhiZSwweDAwLDB4MGYsMHg4NSwweDBiLDB4ODAsMHgwMCwweGU4LDB4MTAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OGNhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMiwweDMwLDB4NDggfSwKKyAgMTYsIDB4OGNiMCwgMCwgezB4MGMsMHg5OSwweDEzLDB4YTQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQyLDB4MGMsMHg5MCwweDhmLDB4MjQsMHgwMCwweGY5LDB4MDAgfSwKKyAgMTYsIDB4OGNjMCwgMCwgezB4MzIsMHgyOCwweDBjLDB4ODgsMHgwMywweGUwLDB4MDAsMHhjOSwweDAwLDB4YjIsMHg0MCwweDBmLDB4OTAsMHgwMywweGU3LDB4MDAgfSwKKyAgMTYsIDB4OGNkMCwgMCwgezB4YzksMHgxMCwweDNlLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGNlMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDEsMHg4OSwweDgwLDB4YTIsMHg0OCwweDI4LDB4OTIsMHg0MiwweGM1LDB4MDAsMHg4OSwweDQwLDB4MmUgfSwKKyAgMTYsIDB4OGNmMCwgMCwgezB4NDAsMHgyYywweDkwLDB4MDYsMHgyNSwweDAwLDB4YjksMHgwMCwweDIyLDB4NTAsMHgwOCwweDk4LDB4MDIsMHhjNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4OGQwMCwgMCwgezB4MDEsMHg3NiwweDQwLDB4NGIsMHg5MiwweDAyLDB4ZTUsMHgwMiwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4OGQxMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDBjLDB4ODUsMHgyMCwweGEyLDB4NDAgfSwKKyAgMTYsIDB4OGQyMCwgMCwgezB4MDgsMHg5MCwweDA2LDB4ZTUsMHgwMCwweDg5LDB4NDAsMHgyZSwweDQwLDB4MDksMHg5MCwweDQyLDB4YTQsMHhhMCwweDMxLDB4MDAgfSwKKyAgMTYsIDB4OGQzMCwgMCwgezB4MjIsMHg1MCwweDE4LDB4OTEsMHgwMiwweGU0LDB4MDAsMHg4MSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwNiwweGU0LDB4MDAgfSwKKyAgMTYsIDB4OGQ0MCwgMCwgezB4ODksMHgwMCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHgwZSwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGQ1MCwgMCwgezB4MDAsMHgwNCwweDE1LDB4MDAsMHg4NSwweDQwLDB4MjAsMHg0MCwweDA4LDB4MTQsMHgyNiwweGU0LDB4MDAsMHg4MSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4OGQ2MCwgMCwgezB4NDAsMHgxOCwweDEwLDB4MDIsMHg4NCwweDgwLDB4YjEsMHgyMCwweGEwLDB4NTAsMHgwOCwweDE0LDB4MDIsMHhlNSwweDAyLDB4ODEgfSwKKyAgMTYsIDB4OGQ3MCwgMCwgezB4NDAsMHgyMCwweDQ4LDB4MGIsMHgxMCwweDA2LDB4Y2MsMHgwMCwweDgxLDB4MDEsMHgyYywweDUwLDB4MDksMHgxNCwweDAyLDB4NGEgfSwKKyAgMTYsIDB4OGQ4MCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4OGMsMHgwMCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4OGQ5MCwgMCwgezB4MGMsMHg4MCwweDIzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDE0LDB4MGQsMHg4MCwweDEyLDB4YTEsMHg0NCwweGY4LDB4NTEgfSwKKyAgMTYsIDB4OGRhMCwgMCwgezB4MzIsMHgwMCwweDJjLDB4ODAsMHgwMywweGUwLDB4MDAsMHg4OCwweDA0LDB4MjIsMHgxNCwweDBmLDB4ODAsMHgwNywweGUwLDB4MDAgfSwKKyAgMTYsIDB4OGRiMCwgMCwgezB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGRjMCwgMCwgezB4OTgsMHg5ZCwweGU0LDB4MDAsMHhmOSwweDAwLDB4M2YsMHg1MCwweDBmLDB4ZDAsMHgwMywweGRjLDB4MDEsMHhiZCwweDQyLDB4M2YgfSwKKyAgMTYsIDB4OGRkMCwgMCwgezB4NTAsMHg0ZiwweGQ0LDB4NDMsMHg3NCwweDQxLDB4ZmQsMHgxMCwweDNmLDB4MTAsMHgxZiwweGM0LDB4MTMsMHhmMSwweDAwLDB4ZmQgfSwKKyAgMTYsIDB4OGRlMCwgMCwgezB4NDAsMHg3ZSwweDQ0LDB4MGYsMHhkMCwweDQzLDB4ZjUsMHgwMSwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHg5NCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4OGRmMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNCwweDAwLDB4ZGYsMHgwNSwweDMzLDB4NjEgfSwKKyAgMTYsIDB4OGUwMCwgMCwgezB4MGYsMHg1MCwweDUzLDB4MzQsMHgxMCwweGZkLDB4MDQsMHgzMywweDQ0LDB4NGYsMHg1MCwweDAzLDB4NzYsMHhjMSwweGNkLDB4ZTAgfSwKKyAgMTYsIDB4OGUxMCwgMCwgezB4MzMsMHg2MCwweDBjLDB4Y2UsMHgwMywweGY2LDB4YzAsMHhlMSwweGMwLDB4YjYsMHg2NCwweDhmLDB4NTAsMHgwYiwweDM2LDB4ODIgfSwKKyAgMTYsIDB4OGUyMCwgMCwgezB4Y2QsMHgwMCwweDNlLDB4NDQsMHg0YywweDllLDB4YzMsMHhjNiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGUzMCwgMCwgezB4MzgsMHgxMCwweGVhLDB4MjgsMHg4MCwweGEwLDB4YjIsMHgwNCwweDBiLDB4OGEsMHg4MywweDYwLDB4MDAsMHhmYSwweDAwLDB4MzYgfSwKKyAgMTYsIDB4OGU0MCwgMCwgezB4MjgsMHg4YiwweDgwLDB4MDMsMHhlMywweGM4LDB4YzgsMHg4NCwweDIyLDB4MTQsMHgwOCwweDhhLDB4MDIsMHhlMiwweDgwLDB4ZDggfSwKKyAgMTYsIDB4OGU1MCwgMCwgezB4ODIsMHgzNCwweDM0LDB4MWIsMHg4MCwweDAzLDB4NjAsMHgwNCwweDg4LDB4MDAsMHgyZSwweDIwLDB4MGEsMHg4ZSwweDQyLDB4Y2UgfSwKKyAgMTYsIDB4OGU2MCwgMCwgezB4MDYsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHgwOCwweDA0LDB4NDEgfSwKKyAgMTYsIDB4OGU3MCwgMCwgezB4MGIsMHg5MiwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwLDB4MGIsMHgxOCwweDAyLDB4MjQsMHgwMCwweGIxLDB4NjAgfSwKKyAgMTYsIDB4OGU4MCwgMCwgezB4MjYsMHg0MCwweDBhLDB4MTYsMHgwMiwweGM1LDB4MDAsMHhhMSwweGMwLDB4MjAsMHg0OCwweDBiLDB4OTAsMHgwMiwweDQ3LDB4MDAgfSwKKyAgMTYsIDB4OGU5MCwgMCwgezB4OTEsMHgwMSwweDJjLDB4NDgsMHgxOCwweDEyLDB4MDIsMHhkMiwweDAxLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGVhMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MGMsMHg4YiwweDA0LDB4YTIsMHg1MCwweDBiLDB4OTEsMHgwMiwweDI0LDB4MDQsMHhhOSwweDAxLDB4MmUgfSwKKyAgMTYsIDB4OGViMCwgMCwgezB4NDIsMHgwYiwweDkwLDB4MDIsMHhhNCwweDAwLDB4YTksMHgwMCwweDI2LDB4NjAsMHgwYSwweDkwLDB4MDIsMHhlNiwweDAwLDB4ODEgfSwKKyAgMTYsIDB4OGVjMCwgMCwgezB4MDAsMHgyMiwweDQwLDB4OGIsMHhiMCwweDAyLDB4MjQsMHgwOCwweDk5LDB4MTAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDAyLDB4YzYgfSwKKyAgMTYsIDB4OGVkMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNSwweDAwLDB4YzksMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4OGVlMCwgMCwgezB4MGYsMHgxMCwweDAyLDB4MjUsMHgwMCwweGIxLDB4MDAsMHgyZSwweDYwLDB4MGYsMHgxMCwweDEyLDB4MjQsMHgwMiwweGI5LDB4YTAgfSwKKyAgMTYsIDB4OGVmMCwgMCwgezB4YTQsMHg0MCwweDJlLDB4OTEsMHgwMywweGU2LDB4MDAsMHhhOSwweDAwLDB4MjIsMHg0MCwweDBiLDB4MTksMHg4MCwweDY0LDB4MDQgfSwKKyAgMTYsIDB4OGYwMCwgMCwgezB4ZDksMHg4MSwweDJlLDB4NDAsMHg0YywweDkwLDB4MDMsMHhlOCwweDE0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGYxMCwgMCwgezB4NjgsMHgwMSwweGE0LDB4MGEsMHhlOSwweDAwLDB4YmUsMHg0OCwweDBmLDB4OTgsMHgwYiwweGU0LDB4MDAsMHhmOSwweGM0LDB4MzYgfSwKKyAgMTYsIDB4OGYyMCwgMCwgezB4NzAsMHgxZiwweDkyLDB4MDMsMHhlNiwweDkwLDB4YzEsMHg5MCwweDNhLDB4NDAsMHg4ZCwweDg4LDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4OGYzMCwgMCwgezB4OTAsMHgzZSwweDQwLDB4MGIsMHg5OCwweDAzLDB4ZTYsMHg0MCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OGY0MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTAsMHhhMSwweDAyLDB4ZDgsMHgyMCwweGIyLDB4MTAgfSwKKyAgMTYsIDB4OGY1MCwgMCwgezB4MGMsMHg4MCwweDgzLDB4MjEsMHg0MCwweGM4LDB4NTgsMHhiMiwweDEwLDB4NGMsMHg4MCwweDBiLDB4MjAsMHgwMCwweGY4LDB4NDIgfSwKKyAgMTYsIDB4OGY2MCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDIsMHhkOCwweDAwLDB4NzIsMHgwMCwweDFjLDB4ODAsMHgwMCwweDIwLDB4MDAgfSwKKyAgMTYsIDB4OGY3MCwgMCwgezB4ZjgsMHgwNCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGY4MCwgMCwgezB4MjgsMHgwNSwweDM4LDB4MDQsMHhjZSwweDQxLDB4MjMsMHg4MCwweDA4LDB4ZTAsMHgwMiwweDM5LDB4MTAsMHhhZSwweDQwLDB4MjIgfSwKKyAgMTYsIDB4OGY5MCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDIsMHgxYSwweDAwLDB4YmEsMHgwMCwweDJiLDB4YWQsMHgwMywweDgwLDB4MDIsMHhlOCwweDAwLDB4Y2EgfSwKKyAgMTYsIDB4OGZhMCwgMCwgezB4MDAsMHgyYSwweDgwLDB4MGEsMHhlMCwweDAyLDB4MTgsMHgwMCwweGJhLDB4MDAsMHgxYSwweDgwLDB4MGIsMHhhMCwweDAzLDB4NGEgfSwKKyAgMTYsIDB4OGZiMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDUsMHg2YywweDEyLDB4ODksMHgwMCwweGEwLDB4ZTAgfSwKKyAgMTYsIDB4OGZjMCwgMCwgezB4MDgsMHgzOCwweDAyLDB4MGQsMHg4OCwweDgzLDB4MDAsMHgwNCwweGUwLDB4MDgsMHgzOCwweDMyLDB4MGUsMHgyNSwweDMxLDB4MDEgfSwKKyAgMTYsIDB4OGZkMCwgMCwgezB4MjQsMHhlMCwweDhiLDB4MzgsMHgwMiwweGU0LDB4MDEsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAgfSwKKyAgMTYsIDB4OGZlMCwgMCwgezB4YjMsMHgwMCwweDJlLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OGZmMCwgMCwgezB4YTAsMHgwMSwweDE0LDB4MjAsMHg4NiwweDIwLDB4MjksMHhiMCwweDA4LDB4ZjAsMHg4MiwweDNlLDB4MDQsMHhhNywweDAwLDB4MjEgfSwKKyAgMTYsIDB4OTAwMCwgMCwgezB4NzAsMHg4OCwweDcwLDB4OTIsMHgxYywweDIwLDB4YmQsMHgwMCwweDY5LDB4YzAsMHgwYiwweDc2LDB4MDIsMHhkNCwweDgwLDB4OGYgfSwKKyAgMTYsIDB4OTAxMCwgMCwgezB4MjEsMHgyOSwweGUwLDB4MGEsMHg2MCwweDg2LDB4OTgsMHgwMSwweGI3LDB4MDAsMHgyZCwweGM4LDB4MGIsMHgzYiwweDAyLDB4NjAgfSwKKyAgMTYsIDB4OTAyMCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDAwLDB4YzcsMHhhMCwweGIwLDB4ZTAgfSwKKyAgMTYsIDB4OTAzMCwgMCwgezB4MmMsMHg3OCwweDBiLDB4MWEsMHgwMCwweGMzLDB4ODAsMHgzNywweGUwLDB4MjgsMHg3OCwweDAzLDB4MWEsMHgwOCwweGY1LDB4OTAgfSwKKyAgMTYsIDB4OTA0MCwgMCwgezB4MzUsMHhlMCwweDBmLDB4N2MsMHgxMiwweGQ2LDB4ODIsMHhjNywweDkwLDB4MjEsMHhlNCwweDA4LDB4NzgsMHgwMywweDllLDB4MDAgfSwKKyAgMTYsIDB4OTA1MCwgMCwgezB4ZjUsMHg4MCwweDNkLDB4ZjEsMHgwZiwweDc4LDB4MDMsMHgyMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTA2MCwgMCwgezB4MDgsMHgxOSwweGE0LDB4MDAsMHhlZSwweDgwLDB4MzYsMHhjMSwweDRmLDB4ZDAsMHgwMywweGM4LDB4MDAsMHhmYiwweDAwLDB4M2UgfSwKKyAgMTYsIDB4OTA3MCwgMCwgezB4NTEsMHgwZiwweGIwLDB4MDMsMHhlNCwweDA4LDB4ZjEsMHg2MCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjNSwweDAwLDB4ZWIgfSwKKyAgMTYsIDB4OTA4MCwgMCwgezB4MTAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDA5LDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4OTA5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHhmZSwweDAwLDB4ZmQsMHg4OCwweDMzLDB4NjAgfSwKKyAgMTYsIDB4OTBhMCwgMCwgezB4MGYsMHhmOSwweDAzLDB4Y2UsMHg0MCwweGQ3LDB4ODQsMHgzNywweDcwLDB4MGMsMHhkOCwweDIzLDB4MzYsMHgwMCwweGM1LDB4ODggfSwKKyAgMTYsIDB4OTBiMCwgMCwgezB4MzMsMHhlMCwweDRmLDB4ZjgsMHgxMywweGY3LDB4MjgsMHhkZiwweDgwLDB4MzcsMHhlMiwweDBjLDB4NTgsMHgwMywweDNlLDB4MDAgfSwKKyAgMTYsIDB4OTBjMCwgMCwgezB4ZmYsMHg5MCwweDNmLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTBkMCwgMCwgezB4YTksMHgxMSwweDljLDB4MDgsMHhmNiwweDAwLDB4YTEsMHgwMCwweDBiLDB4NjMsMHgwMiwweGQ2LDB4MzAsMHg4NSwweDQxLDB4MzEgfSwKKyAgMTYsIDB4OTBlMCwgMCwgezB4YzgsMHgwOCwweDUwLDB4MjMsMHgxYywweDAwLDB4ZDUsMHgyMCwweGIxLDB4ODAsMHgwZiwweDcwLDB4MDMsMHhiNCwweDAwLDB4YzcgfSwKKyAgMTYsIDB4OTBmMCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MGYsMHg0MCwweGEzLDB4NTgsMHg0MCwweGI3LDB4MDAsMHgzZiwweGM0LDB4MGEsMHhmMCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4OTEwMCwgMCwgezB4MDYsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDQwLDB4YjcsMHgxMCwweDIxLDB4ZDIgfSwKKyAgMTYsIDB4OTExMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZGMsMHg0MiwweDg2LDB4MDAsMHgyNSwweDYxLDB4MDgsMHg1MSwweDAyLDB4NTAsMHgwMCwweDk1LDB4MDAgfSwKKyAgMTYsIDB4OTEyMCwgMCwgezB4MjUsMHhjMCwweDA5LDB4NzAsMHg4MiwweGQ0LDB4MDAsMHg4NywweDAwLDB4MjQsMHhjMCwweDA4LDB4NTAsMHgwMiwweDVjLDB4MDAgfSwKKyAgMTYsIDB4OTEzMCwgMCwgezB4OTUsMHgwNCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTE0MCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDgsMHhiMiwweGQwLDB4MjAsMHhlMCwweDRiLDB4MDgsMHgwMiwweGM0LDB4MDAsMHg4MCwweDgwLDB4MjAgfSwKKyAgMTYsIDB4OTE1MCwgMCwgezB4ZjAsMHgwOCwweDFhLDB4MDIsMHg4NSwweDQ4LDB4ODEsMHgxMCwweDIwLDB4NDAsMHgwYSwweDMwLDB4MDIsMHhjNiwweDEwLDB4OTMgfSwKKyAgMTYsIDB4OTE2MCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MGEsMHgxYywweDAyLDB4MGQsMHg0MCwweGIzLDB4MDAsMHg2OCwweGM0LDB4MGEsMHhiMCwweDAyLDB4MDkgfSwKKyAgMTYsIDB4OTE3MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAxLDB4ZmUsMHgwMCwweDMyLDB4ZjAgfSwKKyAgMTYsIDB4OTE4MCwgMCwgezB4MGYsMHg4OCwweDAzLDB4ZTYsMHgwMCwweGM4LDB4YzgsMHgzNiwweGY2LDB4MjgsMHhhNiwweDBhLDB4NmQsMHgwMCwweDlkLDB4MDAgfSwKKyAgMTYsIDB4OTE5MCwgMCwgezB4MzIsMHgwMCwweDBiLDB4YjAsMHgwMywweGY2LDB4MDMsMHhjNywweDAwLDB4MzcsMHhjMCwweDA4LDB4OWMsMHgwYSwweDZlLDB4MDAgfSwKKyAgMTYsIDB4OTFhMCwgMCwgezB4YmIsMHgwMCwweDJmLDB4YzAsMHgwYywweGYwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTFiMCwgMCwgezB4ODAsMHgwMCwweGU0LDB4MDEsMHhlYiwweDQwLDB4M2UsMHg4MCwweDRmLDB4YzEsMHgwMywweGU0LDB4MDAsMHhiOCwweDA4LDB4M2EgfSwKKyAgMTYsIDB4OTFjMCwgMCwgezB4NDAsMHg4ZiwweGE0LDB4MTMsMHg2YywweDIwLDB4ZjksMHgwMCwweDNlLDB4NzAsMHgwZiwweGIwLDB4MDMsMHhhNCwweDQwLDB4ZWIgfSwKKyAgMTYsIDB4OTFkMCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGYsMHg5MiwweDIzLDB4ZTgsMHgwMCwweGY5LDB4ODAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDYzLDB4ZTAgfSwKKyAgMTYsIDB4OTFlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDA4LDB4Y2UsMHgwOCwweDMzLDB4YzAgfSwKKyAgMTYsIDB4OTFmMCwgMCwgezB4MGYsMHhkYSwweDAzLDB4MzAsMHgwMCwweGU0LDB4MDQsMHgzNSwweGMwLDB4MGQsMHhhMCwweDAzLDB4MjgsMHgwMCwweGM1LDB4MDAgfSwKKyAgMTYsIDB4OTIwMCwgMCwgezB4MzMsMHgwMCwweDBiLDB4ZmEsMHgwMywweGY0LDB4MDMsMHhjYiwweDAwLDB4MzEsMHhjMCwweDBjLDB4ZDQsMHgwMywweDE0LDB4MjAgfSwKKyAgMTYsIDB4OTIxMCwgMCwgezB4Y2QsMHg4MCwweDIzLDB4YzEsMHgwYywweGYwLDB4MDIsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTIyMCwgMCwgezB4ODEsMHgwNCwweDQ0LDB4MTAsMHhjYiwweGQwLDB4MjIsMHhjMCwweDBiLDB4OTQsMHgwMiwweDIyLDB4ODQsMHhiOCwweGM2LDB4MDIgfSwKKyAgMTYsIDB4OTIzMCwgMCwgezB4NDAsMHgwOCwweDI4LDB4MDIsMHhhNSwweDgwLDB4ODksMHgwMCwweDIyLDB4NjAsMHgwYiwweGI4LDB4MDIsMHg2NCwweDAwLDB4OGIgfSwKKyAgMTYsIDB4OTI0MCwgMCwgezB4MDAsMHgyYSwweGMwLDB4YzgsMHgwMCwweDAzLDB4NjYsMHgwMCwweDgxLDB4MDAsMHgwMCwweGMwLDB4MGQsMHhiMCwweDBhLDB4YTggfSwKKyAgMTYsIDB4OTI1MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4MTMsMHgwMCwweDIyLDB4NDAgfSwKKyAgMTYsIDB4OTI2MCwgMCwgezB4OGIsMHgyNCwweDAyLDB4MmEsMHgwMCwweGJiLDB4ODIsMHgyMiwweDQwLDB4MDAsMHhhYywweDAyLDB4ODQsMHgwMCwweDg5LDB4MDAgfSwKKyAgMTYsIDB4OTI3MCwgMCwgezB4MjIsMHgyMiwweDBiLDB4YjAsMHgwMiwweGM0LDB4MDAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJlLDB4MDAgfSwKKyAgMTYsIDB4OTI4MCwgMCwgezB4OGIsMHgxMCwweDJhLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhhMCwweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTI5MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MTAsMHg4MywweDAwLDB4MjAsMHgwMSwweDBiLDB4MjAsMHgwMiwweDAwLDB4ODAsMHhiMSwweDAwLDB4MjAgfSwKKyAgMTYsIDB4OTJhMCwgMCwgezB4YzEsMHgwOCwweDIwLDB4MDIsMHg4OCwweDAxLDB4ODEsMHgwMCwweGEwLDB4MDAsMHgwYiwweDMwLDB4MDIsMHg0NCwweDAxLDB4OWIgfSwKKyAgMTYsIDB4OTJiMCwgMCwgezB4MDAsMHgyOCwweGMwLDB4MDgsMHhiMCwweDAyLDB4NDgsMHgwNiwweDg5LDB4MDAsMHgyYSwweGMwLDB4MDksMHgzMCwweDAyLDB4ODIgfSwKKyAgMTYsIDB4OTJjMCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGQsMHg2YywweDAwLDB4YzMsMHgwMCwweGIyLDB4YzAgfSwKKyAgMTYsIDB4OTJkMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4MjgsMHgyMCwweGZhLDB4MDAsMHhiMSwweDQwLDB4MGQsMHhhMCwweDA3LDB4YTAsMHgwMCwweGNkLDB4MDAgfSwKKyAgMTYsIDB4OTJlMCwgMCwgezB4MjIsMHgwMCwweDBmLDB4YjAsMHgwMywweGY0LDB4MDAsMHg5ZiwweDAwLDB4M2IsMHhjMCwweDJjLDB4YjAsMHgwYiwweDI0LDB4MDAgfSwKKyAgMTYsIDB4OTJmMCwgMCwgezB4YzksMHgwMCwweGJhLDB4YzAsMHgwYywweGIwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTMwMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDYsMHhmZiwweDAyLDB4YWYsMHhjMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MTAsMHhmYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4OTMxMCwgMCwgezB4YzAsMHg5ZiwweGUwLDB4MTMsMHhmMCwweDAwLDB4ZmQsMHgwNCwweDNmLDB4NDAsMHg0ZiwweGYwLDB4MDMsMHg3NCwweDAwLDB4ZWYgfSwKKyAgMTYsIDB4OTMyMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4OGYsMHhlMCwweDAyLDB4YjQsMHgwMSwweGZkLDB4MDQsMHgzNywweGMwLDB4MGYsMHhmMCwweDQzLDB4NjggfSwKKyAgMTYsIDB4OTMzMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4YzcsMHgyMCwweGIzLDB4YzggfSwKKyAgMTYsIDB4OTM0MCwgMCwgezB4MWMsMHhmMSwweDAzLDB4N2MsMHgyMCwweGNmLDB4MGEsMHgzZiwweGQwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHg4MCwweDhmLDB4MzIgfSwKKyAgMTYsIDB4OTM1MCwgMCwgezB4MzMsMHhjNCwweDBmLDB4ZjEsMHg4MywweDNjLDB4ZTAsMHhjZiwweDEwLDB4MzMsMHhjNCwweDBkLDB4ZjIsMHg4MywweDNjLDB4ZTIgfSwKKyAgMTYsIDB4OTM2MCwgMCwgezB4YzcsMHg4MCwweDE3LDB4Y2MsMHg0YywweGYzLDB4ODMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTM3MCwgMCwgezB4ODAsMHgxMCwweGUzLDB4NDAsMHg4OCwweDY4LDB4MjIsMHgzMCwweDA4LDB4MDYsMHgwMiwweDAxLDB4YTEsMHg4OCwweGM0LDB4MGUgfSwKKyAgMTYsIDB4OTM4MCwgMCwgezB4MTQsMHgwOCwweDg3LDB4ODAsMHgwMSwweGMwLDB4MjgsMHg1MCwweDAyLDB4MDQsMHg4YiwweDg2LDB4MDIsMHhhMSwweDk4LDB4ODggfSwKKyAgMTYsIDB4OTM5MCwgMCwgezB4NDEsMHgyYSwweDA0LDB4MGEsMHg4NCwweDgyLDB4YmQsMHg4MCwweDhiLDB4MDgsMHgyYiwweGM0LDB4ODgsMHhmNCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4OTNhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDA4LDB4ODIsMHg0MCwweDIwLDB4MTAgfSwKKyAgMTYsIDB4OTNiMCwgMCwgezB4MDgsMHgyMSwweDEyLDB4NDQsMHgwNCwweDgyLDB4MDQsMHgyYywweDA4LDB4ODksMHg5MCwweDAyLDB4NDQsMHgyMSwweDhiLDB4MDAgfSwKKyAgMTYsIDB4OTNjMCwgMCwgezB4MjQsMHg4OCwweDhiLDB4YTAsMHgwMCwweDQwLDB4ODQsMHg4OSwweDMwLDB4MjIsMHg0OCwweDg4LDB4YjAsMHgwMiwweGNjLDB4MDggfSwKKyAgMTYsIDB4OTNkMCwgMCwgezB4ODgsMHgyMCwweGE0LDB4YzgsMHgwMCwweDMyLDB4MGEsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTNlMCwgMCwgezB4YzAsMHgxNSwweGEwLDB4MDAsMHg4OSwweDAwLDB4MjIsMHhjMSwweDg4LDB4OTAsMHg2MiwweDI4LDB4MDgsMHg4OSwweDA4LDB4MmUgfSwKKyAgMTYsIDB4OTNmMCwgMCwgezB4YzAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDA4LDB4YTgsMHgwMCwweDI2LDB4NDIsMHgwYiwweDkwLDB4MDIsMHhjYywweDUwLDB4OGEgfSwKKyAgMTYsIDB4OTQwMCwgMCwgezB4MjIsMHgyYSwweDg2LDB4MGEsMHg4MCwweDAyLDB4ZWMsMHgwMCwweDg4LDB4ODQsMHgyYSwweGMxLDB4MDgsMHhiMCwweDI2LDB4MzAgfSwKKyAgMTYsIDB4OTQxMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhmMCwweDAyLDB4Y2YsMHgwMCwweDMzLDB4YzAgfSwKKyAgMTYsIDB4OTQyMCwgMCwgezB4NDgsMHhmOCwweDQzLDB4NzksMHgwMCwweDhkLDB4YzAsMHgzZiwweDMwLDB4OGQsMHg2MCwweDgzLDB4NzgsMHg2MCwweGM0LDB4NTggfSwKKyAgMTYsIDB4OTQzMCwgMCwgezB4MzcsMHgyMCwweDBmLDB4NTgsMHgxMywweDdiLDB4MDIsMHhjYywweGM0LDB4MzEsMHgyMCwweDBjLDB4NDQsMHgwMywweGVjLDB4MDIgfSwKKyAgMTYsIDB4OTQ0MCwgMCwgezB4OGIsMHg4MCwweDM2LDB4YzAsMHgyNCwweGIwLDB4MTIsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTQ1MCwgMCwgezB4ZTAsMHgwMSwweDljLDB4MDAsMHhmNCwweDEwLDB4M2QsMHgwMCwweDZmLDB4YzksMHgxMywweGQ0LDB4MTIsMHhmZSwweDkwLDB4M2YgfSwKKyAgMTYsIDB4OTQ2MCwgMCwgezB4ZjAsMHgwZiwweGRhLDB4MjMsMHhmNCwweDE0LDB4ZmYsMHgwMiwweDNiLDB4ZjAsMHgwZiwweGVhLDB4MjMsMHhiNiwweDAwLDB4ZmYgfSwKKyAgMTYsIDB4OTQ3MCwgMCwgezB4ODIsMHgzZiwweGUxLDB4OGYsMHhmNCwweDAzLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4YWYsMHg3MCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4OTQ4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMCwweDAwLDB4Y2EsMHgwMCwweDMyLDB4MDggfSwKKyAgMTYsIDB4OTQ5MCwgMCwgezB4MWMsMHhhMCwweDAzLDB4YTUsMHgyMCwweGNiLDB4NDAsMHhiYSwweDEwLDB4MWYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGViLDB4MDAgfSwKKyAgMTYsIDB4OTRhMCwgMCwgezB4NzIsMHg5MCwweDBjLDB4YjQsMHgwMywweDI5LDB4MDQsMHhjOSwweDUyLDB4MzIsMHg1MCwweDBjLDB4YjQsMHgwMywweDBjLDB4MDAgfSwKKyAgMTYsIDB4OTRiMCwgMCwgezB4ZjgsMHg0MCwweDMyLDB4YzEsMHgwZSwweGIwLDB4MGIsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTRjMCwgMCwgezB4YzgsMHgwNSwweDJkLDB4ODAsMHg4OSwweDgwLDB4MjIsMHhkOSwweDA4LDB4OTAsMHgyMiwweDJhLDB4MDAsMHg4OCwweDU0LDB4MjIgfSwKKyAgMTYsIDB4OTRkMCwgMCwgezB4YzAsMHg4YiwweDgwLDB4MjIsMHgyMCwweDE5LDB4YzgsMHgwMCwweDIyLDB4NDAsMHg4ZCwweDgwLDB4MWEsMHgyNCwweDEwLDB4ZDIgfSwKKyAgMTYsIDB4OTRlMCwgMCwgezB4NDQsMHgyMiwweDgxLDB4MGQsMHg4MCwweDAzLDB4N2MsMHgwMCwweGIwLDB4MDAsMHgzNywweGMwLDB4ODgsMHhmMCwweDAyLDB4MzIgfSwKKyAgMTYsIDB4OTRmMCwgMCwgezB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0ZSwweDAwLDB4ODEsMHgwMCwweGEwLDB4ZjAgfSwKKyAgMTYsIDB4OTUwMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ODksMHgwMiwweDgwLDB4MDAsMHgyMiwweGMwLDB4MGIsMHgwMCwweDIyLDB4YTAsMHgwMCwweGIwLDB4MDAgfSwKKyAgMTYsIDB4OTUxMCwgMCwgezB4MjAsMHg0MCwweDA4LDB4MDAsMHgwMiwweDA0LDB4MDAsMHg4MiwweDYwLDB4MjAsMHg4MCwweDA4LDB4MDAsMHgwMiwweDBjLDB4MDggfSwKKyAgMTYsIDB4OTUyMCwgMCwgezB4YjIsMHgwMCwweDIyLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTUzMCwgMCwgezB4MjAsMHgwMSwweDAzLDB4MTAsMHg4ZSwweDkwLDB4MjMsMHgyNCwweDA4LDB4NmIsMHgwMiwweDE2LDB4NjAsMHg4ZiwweDgwLDB4MjEgfSwKKyAgMTYsIDB4OTU0MCwgMCwgezB4MjgsMHgwYiwweGY5LDB4MDYsMHgxZSwweDQwLDB4OGYsMHg4MCwweDIzLDB4YTQsMHg0OSwweDc5LDB4MDIsMHgzYSwweDQwLDB4OWQgfSwKKyAgMTYsIDB4OTU1MCwgMCwgezB4OTAsMHgyMywweDY0LDB4MDksMHhmOCwweDAyLDB4NWUsMHg0MCwweGJlLDB4OTAsMHgyNCwweGU0LDB4MjgsMHg3OSwweDAyLDB4MDggfSwKKyAgMTYsIDB4OTU2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQyLDB4YzAsMHgwOSwweDMwLDB4MDAgfSwKKyAgMTYsIDB4OTU3MCwgMCwgezB4MjgsMHgwMiwweDAzLDB4ODQsMHgwMCwweDhhLDB4MjAsMHgzMCwweGM0LDB4OGIsMHgxMSwweDAzLDB4ODQsMHg1MCwweGIzLDB4MDAgfSwKKyAgMTYsIDB4OTU4MCwgMCwgezB4MjAsMHhjMCwweDBjLDB4YTQsMHgyMiwweDA0LDB4MDAsMHhjYiwweDQwLDB4MzAsMHhjNSwweDBjLDB4MzAsMHgwMywweDBlLDB4NDAgfSwKKyAgMTYsIDB4OTU5MCwgMCwgezB4ZjMsMHgxMCwweDMwLDB4YzQsMHgwYywweGIwLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTVhMCwgMCwgezB4NDAsMHgxZCwweGIwLDB4MDQsMHhmYiwweDA0LDB4M2QsMHhjMCwweDBmLDB4ZjIsMHg0MywweGY4LDB4MDQsMHhmZCwweDAxLDB4M2YgfSwKKyAgMTYsIDB4OTViMCwgMCwgezB4MGMsMHgwZiwweDYxLDB4MDMsMHhmOCwweDQ4LDB4ZjQsMHgwMCwweDNkLDB4MDEsMHgwZiwweGQwLDB4MDMsMHhjOCwweDAwLDB4ZmMgfSwKKyAgMTYsIDB4OTVjMCwgMCwgezB4MDQsMHhiZCwweDA0LDB4MGIsMHg0OCwweDAzLDB4ZmMsMHgxOCwweGZmLDB4MTQsMHgzZiwweGQ1LDB4MGQsMHhmMCwweDAzLDB4OTAgfSwKKyAgMTYsIDB4OTVkMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlMCwweDAwLDB4ZjksMHgwMSwweDMyLDB4YzAgfSwKKyAgMTYsIDB4OTVlMCwgMCwgezB4OGUsMHg5MCwweDAzLDB4MjgsMHgwMiwweGQxLDB4MDAsMHgzMiwweGMwLDB4MGQsMHhhOCwweDBiLDB4MDgsMHgwMCwweGU4LDB4MDAgfSwKKyAgMTYsIDB4OTVmMCwgMCwgezB4MmUsMHg0MCwweDBjLDB4OTgsMHgwYiwweDJlLDB4MDIsMHhjYSwweDAwLDB4YjIsMHhhMCwweDZjLDB4ODAsMHgyMywweDJkLDB4ODAgfSwKKyAgMTYsIDB4OTYwMCwgMCwgezB4Y2EsMHg4MCwweDMyLDB4ZDAsMHgwYywweGJhLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTYxMCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHhiNiwweDAwLDB4YTMsMHgwMCwweDA4LDB4NjAsMHgwMiwweDA0LDB4MDAsMHg4NiwweDA0LDB4MjkgfSwKKyAgMTYsIDB4OTYyMCwgMCwgezB4MDAsMHgwOCwweDUwLDB4NDIsMHgxNCwweDA0LDB4YTcsMHgwMCwweDBkLDB4ODAsMHg0YSwweDYwLDB4MDIsMHgwMCwweDAwLDB4ODEgfSwKKyAgMTYsIDB4OTYzMCwgMCwgezB4MDAsMHgyMSwweDQwLDB4MDgsMHg3MCwweDAyLDB4OWQsMHg0MiwweDg2LDB4MDEsMHgyMCwweGMwLDB4MDgsMHgzMiwweDgyLDB4MTIgfSwKKyAgMTYsIDB4OTY0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5MiwweDAwLDB4YmMsMHg4MCwweDYzLDB4MjAgfSwKKyAgMTYsIDB4OTY1MCwgMCwgezB4ODIsMHgwOCwweDAyLDB4NTIsMHgwMCwweDg0LDB4YzIsMHgyMywweDIwLDB4ODgsMHgwYywweDAyLDB4MzMsMHgwMCwweDg0LDB4ODAgfSwKKyAgMTYsIDB4OTY2MCwgMCwgezB4MmYsMHgyMSwweDg5LDB4NGMsMHgwMiwweDEyLDB4MTQsMHg5NCwweGM1LDB4NjQsMHgyMSwweDA4LDB4NGMsMHgwMiwweDBlLDB4ODAgfSwKKyAgMTYsIDB4OTY3MCwgMCwgezB4OTcsMHg4MiwweGExLDB4ZWMsMHgwOCwweDc5LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTY4MCwgMCwgezB4NDgsMHgxNCwweGNkLDB4NDQsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDRkLDB4ODAsMHgwMywweDg4LDB4MjggfSwKKyAgMTYsIDB4OTY5MCwgMCwgezB4YzAsMHgwOCwweDNjLDB4MDYsMHgwZiwweDAwLDB4YTMsMHg0MywweDJjLDB4YzIsMHgxYiwweDM4LDB4MDIsMHgwZiwweDAwLDB4OWIgfSwKKyAgMTYsIDB4OTZhMCwgMCwgezB4ODgsMHg2NCwweGQwLDB4MDgsMHhiOCwweDAyLDB4OGMsMHgxMCwweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDBhLDB4MTIgfSwKKyAgMTYsIDB4OTZiMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhYSwweDAwLDB4ZmEsMHgwNSwweDMyLDB4ODAgfSwKKyAgMTYsIDB4OTZjMCwgMCwgezB4OGUsMHhhMCwweDBiLDB4NjksMHgwMCwweGNhLDB4NDAsMHgzMiwweGEwLDB4M2MsMHhhOCwweDAzLDB4MmEsMHgwMCwweGVhLDB4MjYgfSwKKyAgMTYsIDB4OTZkMCwgMCwgezB4M2UsMHhiMCwweDBkLDB4YTEsMHg2MywweDI4LDB4MjAsMHhjYSwweDQwLDB4MzYsMHhhMCwweDBjLDB4ZTAsMHgxMywweDI4LDB4MDkgfSwKKyAgMTYsIDB4OTZlMCwgMCwgezB4ZGUsMHgwMCwweDMyLDB4ODAsMHgyYywweGEwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTZmMCwgMCwgezB4NDgsMHgwMCwweGYwLDB4MjAsMHhmNCwweDAwLDB4M2YsMHgwMCwweDBmLDB4NDAsMHgyMywweGIwLDB4MDAsMHhlYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4OTcwMCwgMCwgezB4MDYsMHgxZSwweGMyLDB4MTMsMHhmMCwweDg4LDB4ZmMsMHgyMCwweDNmLDB4MDQsMHg4ZSwweGMwLDB4MDMsMHhmMCwweDgwLDB4ZWMgfSwKKyAgMTYsIDB4OTcxMCwgMCwgezB4NDAsMHgzYiwweDBjLDB4MGYsMHhjMCwweGEzLDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDAzLDB4ZDIgfSwKKyAgMTYsIDB4OTcyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAgfSwKKyAgMTYsIDB4OTczMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4ODAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDUzLDB4ZTQsMHgxMCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4OTc0MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDhmLDB4OTAsMHgwMywweDI0LDB4MTAgfSwKKyAgMTYsIDB4OTc1MCwgMCwgezB4YzksMHgwMSwweDNjLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTc2MCwgMCwgezB4ODAsMHgwNCwweDQ3LDB4NDQsMHg4OSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI1LDB4MGEsMHg4MSwweDEwLDB4MjIgfSwKKyAgMTYsIDB4OTc3MCwgMCwgezB4NDAsMHg0OCwweDkwLDB4MDMsMHhjNCwweDAwLDB4ODksMHgwMCwweDc2LDB4NDAsMHgyOCwweDkwLDB4MDIsMHhlNCwweDEwLDB4YjkgfSwKKyAgMTYsIDB4OTc4MCwgMCwgezB4NDAsMHhiMiwweDQwLDB4MGIsMHg5MCwweDAzLDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQxLDB4MDgsMHg5MCwweDQyLDB4ZTAgfSwKKyAgMTYsIDB4OTc5MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAyLDB4YmQsMHgwMCwweDIzLDB4NDggfSwKKyAgMTYsIDB4OTdhMCwgMCwgezB4MDgsMHhkMCwweDA2LDB4MWQsMHgwNCwweDhkLDB4MDAsMHgyOSwweGMwLDB4NGEsMHhkMCwweDIyLDB4ZjQsMHgwMCwweDg1LDB4MDAgfSwKKyAgMTYsIDB4OTdiMCwgMCwgezB4NjEsMHg0MCwweDE4LDB4ZDAsMHgxMiwweGZjLDB4MDAsMHhiZCwweDQwLDB4YTMsMHg0MCwweDRiLDB4ZjAsMHgwMiwweDA0LDB4MDEgfSwKKyAgMTYsIDB4OTdjMCwgMCwgezB4OGIsMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTdkMCwgMCwgezB4MDgsMHgwNCwweDM2LDB4ODAsMHg4NSwweDIwLDB4YTMsMHg0OCwweDA4LDB4NTIsMHgwYSwweDE0LDB4ODEsMHg4NSwweDIwLDB4MjkgfSwKKyAgMTYsIDB4OTdlMCwgMCwgezB4NDgsMHgwOCwweDUyLDB4MDIsMHhiNCwweDgwLDB4ODUsMHgyMCwweDI1LDB4NDgsMHg4OCwweDUyLDB4MDIsMHhkNCwweDgwLDB4YjUgfSwKKyAgMTYsIDB4OTdmMCwgMCwgezB4MjAsMHgyMSwweDQ4LDB4MGIsMHg1MiwweDAyLDB4NDQsMHhhMiwweDgxLDB4MDAsMHgyYywweDRhLDB4MDgsMHgxMiwweDgyLDB4YzIgfSwKKyAgMTYsIDB4OTgwMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHg1MSwweDIyLDB4MDAgfSwKKyAgMTYsIDB4OTgxMCwgMCwgezB4MmMsMHg4NSwweDAyLDB4MjEsMHg0OCwweGM4LDB4MDAsMHhiYSwweDE0LDB4MGYsMHg4NSwweDEyLDB4ZTEsMHg0MiwweGM4LDB4NTAgfSwKKyAgMTYsIDB4OTgyMCwgMCwgezB4MjIsMHgwMCwweDBjLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCwweDUwLDB4MzIsMHgwMCwweDA3LDB4NDUsMHgwMywweDIwLDB4ODAgfSwKKyAgMTYsIDB4OTgzMCwgMCwgezB4YzAsMHgwMSwweDNlLDB4MDgsMHgyYywweDgyLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTg0MCwgMCwgezB4OTgsMHgwZCwweGU0LDB4NDAsMHhmMSwweDEwLDB4M2UsMHg0NCwweDA3LDB4OTEsMHg0MywweGU0LDB4NTgsMHhmOSwweDExLDB4MzQgfSwKKyAgMTYsIDB4OTg1MCwgMCwgezB4NDQsMHg0ZiwweDkxLDB4MDIsMHhlNCwweDUwLDB4ZjksMHgxMCwweDNjLDB4NGYsMHgwZiwweDkzLDB4ODMsMHhlNCwweGYwLDB4ZjkgfSwKKyAgMTYsIDB4OTg2MCwgMCwgezB4MTEsMHgzYSwweDRmLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHhhMCwweGZkLDB4MjgsMHgzZSwweDRhLDB4MGYsMHg5MiwweDgzLDB4ZTYgfSwKKyAgMTYsIDB4OTg3MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweGEwLDB4Y2QsMHhhMCwweGIzLDB4NjggfSwKKyAgMTYsIDB4OTg4MCwgMCwgezB4OGMsMHg5YSwweDAzLDB4MzYsMHg4MCwweGM1LDB4YTAsMHgyMiwweDYwLDB4MGMsMHg5YSwweDIzLDB4MjYsMHgwNCwweGY5LDB4YTAgfSwKKyAgMTYsIDB4OTg5MCwgMCwgezB4MzIsMHg2NiwweDBjLDB4OWEsMHg4MywweDA2LDB4MjAsMHhjNSwweGEwLDB4MjIsMHg2MCwweDBjLDB4OWIsMHgwMywweDI2LDB4NDggfSwKKyAgMTYsIDB4OThhMCwgMCwgezB4YzksMHgwMCwweDNlLDB4NzgsMHgwYywweDlhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OThiMCwgMCwgezB4MzgsMHgwMCwweGUxLDB4MDAsMHg4OCwweDQ0LDB4MjIsMHg5NSwweDA4LDB4ODUsMHgxMiwweGExLDB4NDIsMHg4OCwweDQwLDB4MDIgfSwKKyAgMTYsIDB4OThjMCwgMCwgezB4OTAsMHgwOCwweDg0LDB4MDIsMHgyMywweGEwLDB4YmEsMHg0MCwweDIyLDB4YTAsMHgwOCwweDhlLDB4OTIsMHhhMywweGEwLDB4YTggfSwKKyAgMTYsIDB4OThkMCwgMCwgezB4NDAsMHgyYSwweDEwLDB4MDgsMHhhZSwweDAyLDB4MjMsMHg0MCwweDg4LDB4MDAsMHgyZSwweDM4LDB4MDgsMHg4NCwweDEyLDB4MGUgfSwKKyAgMTYsIDB4OThlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTUsMHhjNCwweDAwLDB4OGIsMHgxMiwweDIyLDB4NDAgfSwKKyAgMTYsIDB4OThmMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4NDQsMHgwMCwweDgxLDB4NDAsMHhhMCwweDUwLDB4MDgsMHgxMSwweDBhLDB4MDUsMHgwMCwweGIxLDB4MTAgfSwKKyAgMTYsIDB4OTkwMCwgMCwgezB4YTAsMHg0OCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4MSwweDQwLDB4MjAsMHg1MCwweDI4LDB4MTEsMHgwMiwweDQ0LDB4ODIgfSwKKyAgMTYsIDB4OTkxMCwgMCwgezB4ODEsMHgwMCwweDJjLDB4NTAsMHgwOCwweDExLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTkyMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDIsMHg4OSwweDQwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgxMiwweGE1LDB4MDAsMHg4OSwweDI4LDB4MjIgfSwKKyAgMTYsIDB4OTkzMCwgMCwgezB4NDksMHgwOCwweDk0LDB4MDIsMHgyNCwweDQ4LDB4YjksMHgxNCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHhhNCwweDQwLDB4YTEgfSwKKyAgMTYsIDB4OTk0MCwgMCwgezB4NTAsMHgyYSwweDUwLDB4MDgsMHg5MSwweDQyLDB4NjQsMHgwMCwweDg5LDB4NDAsMHgyZSwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDYgfSwKKyAgMTYsIDB4OTk1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDMwLDB4NzAgfSwKKyAgMTYsIDB4OTk2MCwgMCwgezB4MmMsMHgxMCwweDBiLDB4NjYsMHgwMCwweGM5LDB4NDAsMHgzMiwweDUwLDB4MGMsMHg5MCwweDAzLDB4MjYsMHgyMCwweGY5LDB4YzAgfSwKKyAgMTYsIDB4OTk3MCwgMCwgezB4MzIsMHg3MCwweDBjLDB4OTAsMHgwMywweDI2LDB4MjAsMHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OWMsMHgwMywweDY0LDB4MDAgfSwKKyAgMTYsIDB4OTk4MCwgMCwgezB4YzksMHg0MSwweDNlLDB4NDAsMHgyYywweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OTk5MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDA0LDB4M2UsMHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4ODgsMHhmOSwweDAwLDB4MzQgfSwKKyAgMTYsIDB4OTlhMCwgMCwgezB4NDEsMHgyZiwweDljLDB4MDMsMHhlNCwweDEwLDB4ZjksMHgwMCwweDNlLDB4NDQsMHgyZiwweDk5LDB4MDMsMHhlNCwweDEwLDB4ZjkgfSwKKyAgMTYsIDB4OTliMCwgMCwgezB4MDAsMHgzZSwweDUwLDB4MGYsMHgxMCwweDRiLDB4YTQsMHgxMCwweGY5LDB4MjAsMHgzYywweDQwLDB4MGYsMHg5MCwweDAzLDB4NGEgfSwKKyAgMTYsIDB4OTljMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MTAgfSwKKyAgMTYsIDB4OTlkMCwgMCwgezB4MmMsMHg4MCwweDAzLDB4MjAsMHgwMiwweGMwLDB4NDAsMHgzMiwweDAwLDB4MWMsMHgwNCwweDBmLDB4MjEsMHgwMCwweGMwLDB4MDQgfSwKKyAgMTYsIDB4OTllMCwgMCwgezB4MzgsMHgwMCwweDBmLDB4ODAsMHgwMywweDIxLDB4MDgsMHhjOCwweDYwLDB4MzAsMHgxMCwweDBmLDB4ODAsMHgwMiwweDIwLDB4MDAgfSwKKyAgMTYsIDB4OTlmMCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWEwMCwgMCwgezB4MjgsMHgwNSwweDFhLDB4MjAsMHg4MiwweDA0LDB4MmYsMHg4MCwweDA4LDB4YTAsMHgwMiwweDM4LDB4MDAsMHg4ZSwweDgwLDB4MjIgfSwKKyAgMTYsIDB4OWExMCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDIsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODEsMHgwYiwweDIwLDB4MDIsMHgyOCwweDAwLDB4ZGUgfSwKKyAgMTYsIDB4OWEyMCwgMCwgezB4ZTQsMHgzNiwweDgwLDB4MGIsMHhhMCwweDQyLDB4MjgsMHgwMCwweGJhLDB4MDQsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4Y2EgfSwKKyAgMTYsIDB4OWEzMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHgwMSwweDJjLDB4ODAgfSwKKyAgMTYsIDB4OWE0MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MmUsMHg2MCwweDgyLDB4OTAsMHhhMCwweGMwLDB4NDgsMHgzMCwweDAyLDB4MGMsMHgwMiwweDgzLDB4MDAgfSwKKyAgMTYsIDB4OWE1MCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MzAsMHgwYSwweDJjLDB4MDAsMHg4MywweGMyLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgyYSwweDJjLDB4MDAgfSwKKyAgMTYsIDB4OWE2MCwgMCwgezB4YjMsMHgwMCwweGEwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWE3MCwgMCwgezB4YTAsMHgwMSwweDNjLDB4MDAsMHg4NywweDAxLDB4MmQsMHhjMiwweDA4LDB4ZjMsMHgxMiwweDNjLDB4MDAsMHg4ZiwweDAxLDB4MjEgfSwKKyAgMTYsIDB4OWE4MCwgMCwgezB4YzgsMHg2OCwweDcyLDB4MjIsMHgxZSwweDA0LDB4ODcsMHgyMCwweDIxLDB4YzQsMHgwYiwweDcwLDB4MDIsMHgzYywweDg0LDB4OWYgfSwKKyAgMTYsIDB4OWE5MCwgMCwgezB4MDAsMHgyNSwweGM0LDB4NGIsMHg3MCwweDAyLDB4MWMsMHgwNCwweGI3LDB4ODEsMHgyMSwweGM4LDB4MDgsMHg3MiwweDAyLDB4ZTggfSwKKyAgMTYsIDB4OWFhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDAsMHgxZSwweDAwLDB4YzcsMHg4MSwweDNjLDB4YTAgfSwKKyAgMTYsIDB4OWFiMCwgMCwgezB4NGMsMHg3YSwweDBiLDB4MWEsMHgwMCwweGM2LDB4ODAsMHgzMCwweGUwLDB4MDgsMHhmOCwweDgyLDB4MGUsMHg0MCwweGNmLDB4ZjAgfSwKKyAgMTYsIDB4OWFjMCwgMCwgezB4MzksMHhlOCwweDBmLDB4M2EsMHgwMywweDFlLDB4MjAsMHhjNywweDgwLDB4MzEsMHhlMywweDBmLDB4MzgsMHgyMywweDFmLDB4MDggfSwKKyAgMTYsIDB4OWFkMCwgMCwgezB4ZmYsMHhjMCwweDMzLDB4ZjIsMHgwYywweDdlLDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWFlMCwgMCwgezB4MDgsMHgxNSwweDg4LDB4MGEsMHg3YiwweDAwLDB4M2UsMHhjMSwweDBiLDB4MzQsMHgyMywweGM4LDB4MTAsMHhmYiwweDAyLDB4M2UgfSwKKyAgMTYsIDB4OWFmMCwgMCwgezB4Y2EsMHgwZiwweGI3LDB4NDMsMHhlYywweDgwLDB4ZmIsMHgwMCwweDJlLDB4YzIsMHgwYiwweGI0LDB4ODMsMHhlZCwweGQwLDB4ZmEgfSwKKyAgMTYsIDB4OWIwMCwgMCwgezB4MDAsMHgzZSwweGQ5LDB4MGYsMHhiMywweDgzLDB4ZWMsMHg4MCwweGJiLDB4MjAsMHgzZSwweGQ4LDB4MmYsMHhiNCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4OWIxMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZjUsMHg5MSwweDMxLDB4YTAgfSwKKyAgMTYsIDB4OWIyMCwgMCwgezB4MGMsMHhmYywweDAzLDB4ZmUsMHgwMCwweGM0LDB4ODEsMHgzMSwweGVlLDB4OGQsMHhmOCwweDBhLDB4M2UsMHgzMCwweGNmLDB4ODQgfSwKKyAgMTYsIDB4OWIzMCwgMCwgezB4MzMsMHhlMCwweDJjLDB4ZjgsMHg4MywweGZlLDB4MTAsMHhmZSwweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjksMHgxOSwweDNmLDB4NDggfSwKKyAgMTYsIDB4OWI0MCwgMCwgezB4Y2YsMHhjMCwweDMzLDB4ZTAsMHgwNCwweGZjLDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWI1MCwgMCwgezB4YTgsMHgxMSwweDljLDB4MDgsMHhiNywweGExLDB4MjEsMHhjOCwweDA4LDB4NzEsMHgwMiwweGYwLDB4YTAsMHg4NSwweDIwLDB4MjEgfSwKKyAgMTYsIDB4OWI2MCwgMCwgezB4Y2UsMHgwOCwweDcwLDB4MDIsMHgzYywweDgwLDB4OGYsMHgwMCwweDJiLDB4YzUsMHgwOCwweDcxLDB4MDIsMHhkYywweDEwLDB4YjQgfSwKKyAgMTYsIDB4OWI3MCwgMCwgezB4MDAsMHgyMSwweGMxLDB4MGEsMHhmMywweDgyLDB4MGMsMHgwMCwweDg3LDB4MDEsMHgyOSwweGMwLDB4MDgsMHg3MSwweDAyLDB4NmEgfSwKKyAgMTYsIDB4OWI4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5ZCwweDAwLDB4YmQsMHgyMSwweDI3LDB4ODIgfSwKKyAgMTYsIDB4OWI5MCwgMCwgezB4MDAsMHg3MCwweDAyLDB4ZmMsMHgwNCwweDhjLDB4MDAsMHhhNywweGNjLDB4YTgsMHg3MCwweDAyLDB4M2MsMHgwOCwweGFmLDB4MDAgfSwKKyAgMTYsIDB4OWJhMCwgMCwgezB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweDAwLDB4MjEsMHhjNCwweDA4LDB4NzAsMHgxNiwweDFjLDB4MGEgfSwKKyAgMTYsIDB4OWJiMCwgMCwgezB4OGYsMHgwMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWJjMCwgMCwgezB4MjAsMHgxMCwweGM4LDB4MDAsMHhiYiwweDQ0LDB4MjQsMHhlMiwweDA4LDB4YjEsMHgwMiwweGMyLDB4ODAsMHgwMSwweDgwLDB4MjQgfSwKKyAgMTYsIDB4OWJkMCwgMCwgezB4ZDAsMHg4OCwweDMwLDB4MDIsMHgwZiwweDUyLDB4ODMsMHg5MSwweDI4LDB4ZTQsMHg4OCwweDNkLDB4MDIsMHhjZSwweGQwLDB4YjAgfSwKKyAgMTYsIDB4OWJlMCwgMCwgezB4YjIsMHhhMiwweGMwLDB4MGEsMHgzNCwweDEyLDB4MGMsMHgwMiwweDgzLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NDggfSwKKyAgMTYsIDB4OWJmMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZmIsMHgwMSwweGU0LDB4NDAgfSwKKyAgMTYsIDB4OWMwMCwgMCwgezB4MmMsMHhmMCwweDQzLDB4ZTUsMHgwMCwweDhhLDB4ODgsMHgzNywweGUwLDB4MDAsMHhmYSwweDAyLDB4M2QsMHgwMCwweGVmLDB4MDAgfSwKKyAgMTYsIDB4OWMxMCwgMCwgezB4MzMsMHhkMSwweDBjLDB4ZjQsMHgwMywweGZkLDB4MDAsMHhmOSwweDQwLDB4MzMsMHhlOCwweDBjLDB4ZmMsMHgwMSwweDNjLDB4MDQgfSwKKyAgMTYsIDB4OWMyMCwgMCwgezB4Y2YsMHgwMiwweDMzLDB4YzAsMHgyYywweGYwLDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWMzMCwgMCwgezB4ODAsMHgwMCwweGVlLDB4MDgsMHhmOSwweDEwLDB4M2EsMHhkMCwweDBmLDB4YjAsMHg5MywweGVjLDB4MDAsMHhmYiwweDBiLDB4M2EgfSwKKyAgMTYsIDB4OWM0MCwgMCwgezB4YzAsMHg4ZSwweGIwLDB4ODMsMHhlYywweDgwLDB4ZmIsMHgwOSwweDdlLDB4YzgsMHgwZiwweGIyLDB4MTMsMHhlYywweDAwLDB4ZjkgfSwKKyAgMTYsIDB4OWM1MCwgMCwgezB4MDAsMHgzZSwweGMyLDB4OGYsMHhiMiwweDRiLDB4Y2MsMHgwNCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4OWM2MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwOCwweDMzLDB4YzAgfSwKKyAgMTYsIDB4OWM3MCwgMCwgezB4MWMsMHhmMCwweDAzLDB4NzAsMHg0MCwweGM0LDB4YzAsMHgzMywweGMyLDB4MGYsMHhmMCwweDAzLDB4MWMsMHgxMCwweGM3LDB4MDAgfSwKKyAgMTYsIDB4OWM4MCwgMCwgezB4MzEsMHhjMCwweDBjLDB4NzAsMHgwMywweDFjLDB4MDAsMHhjNSwweDQxLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgyMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4OWM5MCwgMCwgezB4Y2YsMHgwMCwweGIzLDB4YzAsMHg2YywweGYwLDB4MDMsMHg4MCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWNhMCwgMCwgezB4ODEsMHgwNCwweDZhLDB4MDAsMHhiOSwweDkwLDB4MzIsMHhmMSwweDA4LDB4YjAsMHgwMiwweDBhLDB4MTAsMHhkOSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4OWNiMCwgMCwgezB4YzEsMHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4Y2IsMHgwNiwweDIyLDB4YzAsMHg4OCwweGIwLDB4MTIsMHgyYywweDAwLDB4ODggfSwKKyAgMTYsIDB4OWNjMCwgMCwgezB4ODAsMHgyMiwweGMxLDB4MGQsMHhiMCwweDAyLDB4MmMsMHgwMCwweDgzLDB4MDAsMHgyMiwweGMxLDB4MDgsMHhiMCwweDQ2LDB4ZTAgfSwKKyAgMTYsIDB4OWNkMCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyZSwweDAwLDB4YjksMHgwMCwweDIyLDB4ZjAgfSwKKyAgMTYsIDB4OWNlMCwgMCwgezB4MDgsMHhiMCwweDEyLDB4NjQsMHgwMCwweDhhLDB4MDAsMHgyMiwweGMwLDB4MGIsMHgzMCwweDQyLDB4MmMsMHgwMCwweDhiLDB4MDAgfSwKKyAgMTYsIDB4OWNmMCwgMCwgezB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4YSwweDAwLDB4MjIsMHhjMCwweDg4LDB4MzAsMHgwYSwweDJjLDB4MDAgfSwKKyAgMTYsIDB4OWQwMCwgMCwgezB4OGIsMHgwMCwweDIwLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWQxMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDQsMHhiMSwweDAyLDB4ZTQsMHhjMSwweDA4LDB4YjAsMHgyMiwweDIwLDB4MDIsMHg5MywweDAwLDB4MjAgfSwKKyAgMTYsIDB4OWQyMCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MTIsMHgwYywweDAyLDB4ODMsMHgwMiwweGEwLDB4YzAsMHgyOCwweDMwLDB4MGUsMHgwYywweDAyLDB4ODAgfSwKKyAgMTYsIDB4OWQzMCwgMCwgezB4MDAsMHhhMCwweGMwLDB4NDksMHgzMCwweDBhLDB4MGMsMHgwMiwweDhiLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4OWQ0MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZjksMHgyNCwweDMyLDB4YzAgfSwKKyAgMTYsIDB4OWQ1MCwgMCwgezB4MDgsMHhmMCwweDAzLDB4NjQsMHgwMCwweGM4LDB4MDAsMHhiMywweGMwLDB4MWYsMHhmMCwweDBiLDB4M2MsMHgwMCwweDhmLDB4MDAgfSwKKyAgMTYsIDB4OWQ2MCwgMCwgezB4MzMsMHhjMCwweDRjLDB4ZjAsMHg0MywweDNjLDB4MDgsMHhjMywweDAwLDB4MzEsMHhjMCwweDBjLDB4ZjAsMHgwMywweDNkLDB4NDggfSwKKyAgMTYsIDB4OWQ3MCwgMCwgezB4Y2YsMHgwMCwweDMxLDB4YzAsMHgwYywweGYwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWQ4MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDQsMHhmOSwweDQxLDB4M2IsMHhjMCwweDRmLDB4ZjAsMHgwMywweGYwLDB4MTEsMHhmZCwweDAwLDB4M2YgfSwKKyAgMTYsIDB4OWQ5MCwgMCwgezB4YzAsMHg4NywweDcwLDB4MjcsMHhmYywweDAwLDB4ZWYsMHgwNiwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDIsMHhmYywweDA4LDB4ZmMgfSwKKyAgMTYsIDB4OWRhMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4NDcsMHhmMCwweDQzLDB4ZmMsMHgwMCwweDc3LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4OWRiMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkMiwweDAwLDB4YzcsMHgwMSwweDM3LDB4MGMgfSwKKyAgMTYsIDB4OWRjMCwgMCwgezB4MGYsMHhlOCwweDIzLDB4MTAsMHg0YSwweGM0LDB4YzAsMHgzMSwweDMwLDB4MGMsMHhjOSwweDAzLDB4MzQsMHg0NiwweGNmLDB4MTAgfSwKKyAgMTYsIDB4OWRkMCwgMCwgezB4MzMsMHhkMCwweDBjLDB4ZjQsMHgwMywweDNjLDB4NTgsMHhjZiwweDAwLDB4MzMsMHhjMCwweDJkLDB4ZjEsMHgwMywweDNlLDB4MDIgfSwKKyAgMTYsIDB4OWRlMCwgMCwgezB4Y2YsMHgyMSwweDNmLDB4ZTQsMHgwZiwweGYyLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWRmMCwgMCwgezB4ODAsMHgxMCwweGU0LDB4ODQsMHgwYiwweDQwLDB4MjIsMHg0YywweDBiLDB4YTgsMHgwMiwweDJjLDB4YzAsMHg4YiwweDIwLDB4MjIgfSwKKyAgMTYsIDB4OWUwMCwgMCwgezB4YzgsMHg0YSwweDMyLDB4MDIsMHgyNCwweDgwLDB4ODMsMHgyMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgyMCwweDAwLDB4OGIgfSwKKyAgMTYsIDB4OWUxMCwgMCwgezB4MjEsMHgzMiwweGNhLDB4NDgsMHgzMiwweDAyLDB4MmMsMHgzMCwweDhmLDB4OTAsMHgyZSwweDg4LDB4MGIsMHhiZCwweDEyLDB4MjAgfSwKKyAgMTYsIDB4OWUyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjZSwweDIwLDB4YTMsMHg0MCwweGUwLDB4NDggfSwKKyAgMTYsIDB4OWUzMCwgMCwgezB4NGIsMHgyMCwweDIyLDB4MGMsMHgwMiwweDgyLDB4MDAsMHgyYSwweDAwLDB4MDgsMHgyMCwweDAyLDB4MDQsMHg4MCwweDgwLDB4MjAgfSwKKyAgMTYsIDB4OWU0MCwgMCwgezB4MjAsMHhjOCwweDA4LDB4MDIsMHgwMiwweDBjLDB4MDAsMHg4MCwweDBjLDB4NjAsMHgwMCwweDA4LDB4MjAsMHgxMiwweDJjLDB4ODggfSwKKyAgMTYsIDB4OWU1MCwgMCwgezB4ODMsMHgwMCwweDJjLDB4ZTgsMHgwYiwweDMwLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWU2MCwgMCwgezB4YzAsMHgxNSwweGFlLDB4MDAsMHhhYiwweDAxLDB4YTIsMHg2MCwweDBiLDB4YTAsMHgwMiwweDIwLDB4MDEsMHg4MSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4OWU3MCwgMCwgezB4YzAsMHgwYSwweDkwLDB4MTIsMHgwNCwweDIwLDB4OGEsMHgwOCwweDIyLDB4YzEsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ODggfSwKKyAgMTYsIDB4OWU4MCwgMCwgezB4MDAsMHgyNCwweDQ0LDB4MDgsMHhhMiwweDAyLDB4YWMsMHgwMCwweDhiLDB4MDQsMHgyZSwweDg4LDB4MDMsMHhiMCwweDAyLDB4NzAgfSwKKyAgMTYsIDB4OWU5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZWEsMHg5MCwweDMyLDB4MjggfSwKKyAgMTYsIDB4OWVhMCwgMCwgezB4MGYsMHhiNiwweDAzLDB4MjAsMHgwOCwweGM5LDB4MDQsMHgzYSwweGMwLDB4NGMsMHg5MCwweDIyLDB4MjQsMHgwMCwweGNiLDB4NDAgfSwKKyAgMTYsIDB4OWViMCwgMCwgezB4MzIsMHhhOCwweDBjLDB4YjIsMHgwMywweDJjLDB4MDAsMHhjYiwweDgwLDB4YjIsMHhlMCwweDBjLDB4YjAsMHgwYiwweDA0LDB4MDAgfSwKKyAgMTYsIDB4OWVjMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4YzAsMHg0ZiwweGIwLDB4MGIsMHg1MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWVkMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhkZiwweDgwLDB4M2IsMHg4MSwweDBmLDB4ZjAsMHhjMywweGZjLDB4MDAsMHhiZSwweDAxLDB4MWYgfSwKKyAgMTYsIDB4OWVlMCwgMCwgezB4MDAsMHgwZiwweGUwLDB4MjMsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YjAsMHg0ZiwweGYwLDB4NDMsMHhkNCwweDAyLDB4ZmYgfSwKKyAgMTYsIDB4OWVmMCwgMCwgezB4OTEsMHgzYSwweGUwLDB4NGUsMHhmMCwweDAzLDB4N2MsMHgwYywweGZmLDB4MDAsMHgyZiwweDgwLDB4MGYsMHgzMCwweDAzLDB4YjggfSwKKyAgMTYsIDB4OWYwMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAxLDB4Y2EsMHgwMCwweDcyLDB4NTAgfSwKKyAgMTYsIDB4OWYxMCwgMCwgezB4MDQsMHhiNCwweDAzLDB4MmMsMHg4MiwweGNiLDB4MDAsMHgzMiwweGUwLDB4MGMsMHhiOCwweDAzLDB4MjcsMHgwNCwweGM4LDB4YzggfSwKKyAgMTYsIDB4OWYyMCwgMCwgezB4YjIsMHhhMiwweDBjLDB4ODgsMHgwMywweDJjLDB4MDAsMHhjMSwweDAwLDB4M2UsMHgwMCwweDJjLDB4MzAsMHgxYiwweDJjLDB4MDQgfSwKKyAgMTYsIDB4OWYzMCwgMCwgezB4ZmIsMHgxMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWY0MCwgMCwgezB4YzgsMHgwNSwweDJjLDB4MDQsMHgwMywweDUwLDB4YTIsMHhlMCwweDA4LDB4MzQsMHg0MiwweDMzLDB4MDAsMHg4OCwweDAwLDB4MjAgfSwKKyAgMTYsIDB4OWY1MCwgMCwgezB4MTAsMHgwZCwweDg0LDB4MDMsMHgyNSwweDAwLDB4OGEsMHg0MCwweDIyLDB4OTAsMHgwOCwweGE1LDB4MDIsMHgyYywweDAwLDB4ODkgfSwKKyAgMTYsIDB4OWY2MCwgMCwgezB4YTQsMHgzYSwweDQwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJmLDB4ODQsMHgyZSwweDgwLDB4MGIsMHhmMCwweDUyLDB4MzIgfSwKKyAgMTYsIDB4OWY3MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2YywweDgwLDB4ODEsMHg4MCwweDI0LDB4ODggfSwKKyAgMTYsIDB4OWY4MCwgMCwgezB4ODksMHgzYywweDI2LDB4MjEsMHgwMCwweDkwLDB4MDAsMHgyMCwweDAyLDB4MDgsMHg4MCwweDgyLDB4MDAsMHgyMCwweDliLDB4MDAgfSwKKyAgMTYsIDB4OWY5MCwgMCwgezB4MjIsMHg0MCwweDg4LDB4YjAsMHgxMiwweDBjLDB4MDgsMHg4MywweDgwLDB4MmMsMHhjMCwweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAgfSwKKyAgMTYsIDB4OWZhMCwgMCwgezB4YjMsMHg4MCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4OWZiMCwgMCwgezB4MjAsMHgwMSwweDNlLDB4MGEsMHg4NSwweGEwLDB4YTUsMHg2MCwweDA4LDB4ZmIsMHg4MiwweDNlLDB4ODQsMHg5ZiwweDgxLDB4NjMgfSwKKyAgMTYsIDB4OWZjMCwgMCwgezB4ZTAsMHg4OSwweDc5LDB4MTIsMHg1MiwweDgwLDB4OTcsMHg4MiwweDIxLDB4NmMsMHgxOCwweDc4LDB4MDIsMHgxMiwweDAwLDB4ODcgfSwKKyAgMTYsIDB4OWZkMCwgMCwgezB4YTEsMHgyOSwweGUwLDB4MDgsMHg1YiwweDAyLDB4MWUsMHgwMCwweGI3LDB4YzAsMHgyZCwweDYwLDB4MGIsMHg3OCwweDAyLDB4MDggfSwKKyAgMTYsIDB4OWZlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODEsMHgwOCwweDI2LDB4YzIgfSwKKyAgMTYsIDB4OWZmMCwgMCwgezB4MmMsMHgzMiwweDEzLDB4MGUsMHhhNCwweGQyLDB4MDAsMHhiMCwweDAwLDB4MWMsMHgyMSwweDEyLDB4MjQsMHgwMiwweGQxLDB4MjAgfSwKKyAgMTYsIDB4YTAwMCwgMCwgezB4MzAsMHhjOCwweDBjLDB4MTAsMHgwMywweDBjLDB4MDAsMHhjMiwweDEwLDB4M2MsMHg4MCwweDBjLDB4MjMsMHgwMywweDBjLDB4NDAgfSwKKyAgMTYsIDB4YTAxMCwgMCwgezB4ZjMsMHgwMCwweDNjLDB4NDgsMHgwZiwweDMwLDB4MGIsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTAyMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZCwweDIwLDB4YmIsMHg0MCwweDA3LDB4NzIsMHgwMiwweGYwLDB4MTAsMHhlZCwweDEwLDB4M2YgfSwKKyAgMTYsIDB4YTAzMCwgMCwgezB4YzQsMHgwZiwweGQxLDB4NjMsMHhiNCwweDgwLDB4ZWYsMHgwMCwweDNmLDB4YzgsMHgwZiwweGYwLDB4MDMsMHhkOCwweDAwLDB4ZmUgfSwKKyAgMTYsIDB4YTA0MCwgMCwgezB4MzQsMHgzZiwweGM0LDB4MGYsMHhlYiwweDQzLDB4ZmMsMHgwMCwweGZmLDB4MDgsMHg3ZiwweDQwLDB4MGYsMHhmMSwweDgzLDB4ZDAgfSwKKyAgMTYsIDB4YTA1MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4YzgsMHgwMCwweDMzLDB4ODAgfSwKKyAgMTYsIDB4YTA2MCwgMCwgezB4OGYsMHgyOCwweDAzLDB4MjAsMHgwMCwweDQ5LDB4MDIsMHgzMiwweGMwLDB4MGYsMHg5MCwweDAzLDB4MjAsMHgwMCwweGNiLDB4MDAgfSwKKyAgMTYsIDB4YTA3MCwgMCwgezB4MzIsMHg0MCwweDRjLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhjYiwweDgwLDB4MzIsMHhjMCwweDBlLDB4OWUsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTA4MCwgMCwgezB4ZmIsMHgyMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTA5MCwgMCwgezB4NDgsMHgxMSwweDljLDB4MDAsMHg4ZCwweDAxLDB4MjEsMHhjMCwweDBiLDB4NjAsMHgwMiwweDFkLDB4MDAsMHhkNiwweDAwLDB4MjEgfSwKKyAgMTYsIDB4YTBhMCwgMCwgezB4MDAsMHgwYiwweGUwLDB4MDIsMHgwMCwweDAwLDB4ODMsMHgwNCwweDIwLDB4NDAsMHgwOCwweDcwLDB4NDIsMHgzNCwweDAyLDB4ODcgfSwKKyAgMTYsIDB4YTBiMCwgMCwgezB4MDEsMHgyMywweGMwLDB4MjgsMHg1MSwweDBhLDB4MWMsMHgwNCwweGI3LDB4MzAsMHgyZCwweGMwLDB4MGIsMHg3MiwweDAzLDB4OTIgfSwKKyAgMTYsIDB4YTBjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YTYsMHg0MCwweDIxLDB4YTAgfSwKKyAgMTYsIDB4YTBkMCwgMCwgezB4MGIsMHg2OCwweDAyLDB4MGUsMHgwMCwweDhmLDB4ODAsMHgyMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4MTYsMHgxMCwweGE1LDB4ODAgfSwKKyAgMTYsIDB4YTBlMCwgMCwgezB4MjEsMHhlMCwweDA4LDB4MTgsMHgwMiwweDFlLDB4MDAsMHg4MywweDgwLDB4MjEsMHhhMCwweDA4LDB4NzgsMHgwMiwweDFmLDB4MDAgfSwKKyAgMTYsIDB4YTBmMCwgMCwgezB4YjcsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDM4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTEwMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MTIsMHhhMSwweDY0LDB4MjAsMHhlNiwweDBiLDB4MjAsMHgwMiwweDAwLDB4MTAsMHg5MCwweDRhLDB4MjAgfSwKKyAgMTYsIDB4YTExMCwgMCwgezB4MjAsMHg0YiwweDAwLDB4NDIsMHgwNCwweDAwLDB4ODMsMHgwMCwweDIwLDB4YzIsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMgfSwKKyAgMTYsIDB4YTEyMCwgMCwgezB4MDQsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MGUsMHgwMCwweGIzLDB4MDAsMHgyYywweGUwLDB4NGIsMHgzMCwweDAyLDB4OTIgfSwKKyAgMTYsIDB4YTEzMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4ZWUsMHhjMCwweDMzLDB4OTAgfSwKKyAgMTYsIDB4YTE0MCwgMCwgezB4MGYsMHhhMCwweDFiLDB4MDgsMHgwMCwweGNhLDB4NDAsMHhiMiwweDgyLDB4MGYsMHhhMCwweDBiLDB4MjgsMHgwMiwweGNhLDB4MDAgfSwKKyAgMTYsIDB4YTE1MCwgMCwgezB4YjIsMHg5MCwweGFjLDB4YTAsMHgwMywweDI5LDB4MDAsMHhjYSwweDQwLDB4YjIsMHg4MCwweDhlLDB4YTQsMHgwMywweDJhLDB4MDAgfSwKKyAgMTYsIDB4YTE2MCwgMCwgezB4ZmEsMHgwMCwweDNmLDB4YTgsMHgwZiwweGEwLDB4MGIsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTE3MCwgMCwgezB4NDgsMHgwMCwweGUyLDB4MDIsMHg5MCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODgsMHgwMywweGYxLDB4MDAsMHhmYywweDAyLDB4M2YgfSwKKyAgMTYsIDB4YTE4MCwgMCwgezB4MjAsMHgwZiwweGM4LDB4MDMsMHhjMSwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHg4ZiwweDAwLDB4MDEsMHg2MCwweDAyLDB4ZjggfSwKKyAgMTYsIDB4YTE5MCwgMCwgezB4MDgsMHgzZSwweDAwLDB4MGYsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwLDB4OGYsMHg4MCwweDEzLDB4OTIgfSwKKyAgMTYsIDB4YTFhMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMCwweGIyLDB4NjQgfSwKKyAgMTYsIDB4YTFiMCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZTQsMHgwNCwweGM5LDB4MDAsMHgzMiwweDQwLDB4NmMsMHg5MCwweDAzLDB4MjUsMHgwMiwweGM5LDB4OTAgfSwKKyAgMTYsIDB4YTFjMCwgMCwgezB4YjAsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MjAsMHhjOSwweGEwLDB4M2UsMHg0MCwweDRjLDB4OTAsMHgyMywweGU0LDB4MDAgfSwKKyAgMTYsIDB4YTFkMCwgMCwgezB4ZjEsMHgwMCwweDkyLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTFlMCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDgwLDB4YTIsMHg0MCwweDBiLDB4OTYsMHg0MiwweGU1LDB4MDQsMHg4OSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4YTFmMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA4LDB4MDksMHg0MSwweDIyLDB4NDAsMHg0OCwweDkwLDB4NDIsMHgyNCwweDA0LDB4ODkgfSwKKyAgMTYsIDB4YTIwMCwgMCwgezB4ODAsMHgyNiwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YTIxMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNSwweDAwLDB4ODksMHgyMCwweDIyLDB4NDAgfSwKKyAgMTYsIDB4YTIyMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4ZjQsMHg4NCwweDg1LDB4MDAsMHgyMSwweDQwLDB4NDgsMHg1MCwweDAyLDB4MjQsMHgyMCwweDhkLDB4MDggfSwKKyAgMTYsIDB4YTIzMCwgMCwgezB4MjMsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDk0LDB4MDAsMHg4ZCwweDAwLDB4MjksMHg0MCwweDBhLDB4ZDAsMHgwMiwweGE0LDB4MDggfSwKKyAgMTYsIDB4YTI0MCwgMCwgezB4YjksMHgwMCwweDI4LDB4NDAsMHgxOCwweDkwLDB4YzIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTI1MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHg4MSwweDAwLDB4MjAsMHg1MSwweDBiLDB4MTAsMHgwMiwweGY1LDB4ODAsMHg4NSwweGMxLDB4YTEgfSwKKyAgMTYsIDB4YTI2MCwgMCwgezB4NTAsMHgwOCwweDU0LDB4MGEsMHgwNSwweDA2LDB4ODUsMHg0MCwweDIxLDB4NTAsMHg4OCwweDU0LDB4MDIsMHg5NSwweDAwLDB4ODUgfSwKKyAgMTYsIDB4YTI3MCwgMCwgezB4NDQsMHgyZCwweDUwLDB4MmEsMHg1NCwweDEyLDB4YzUsMHgwMSwweGIxLDB4MDAsMHgwOCwweDUwLDB4MDgsMHgxMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4YTI4MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4Y2EsMHg1MCwweDMyLDB4ODAgfSwKKyAgMTYsIDB4YTI5MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTgsMHgwMiwweGM4LDB4MDEsMHgzMiwweDAwLDB4MmMsMHhjMCwweDAzLDB4MjAsMHgwMCwweGM4LDB4MDIgfSwKKyAgMTYsIDB4YTJhMCwgMCwgezB4MzIsMHgwMCwweDJjLDB4ODAsMHgwYiwweGEwLDB4MDAsMHhjOCwweDAwLDB4M2EsMHgwMCwweDRlLDB4NDAsMHgyMywweGEwLDB4MDggfSwKKyAgMTYsIDB4YTJiMCwgMCwgezB4ZjgsMHgwMCwweDNhLDB4MDAsMHgyYywweDgwLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTJjMCwgMCwgezB4OTgsMHgxZCwweGRjLDB4MDQsMHhmZCwweDQwLDB4M2YsMHg1MCwweDRmLDB4OTAsMHg2MywweGU0LDB4NDAsMHhmMSwweDAyLDB4M2UgfSwKKyAgMTYsIDB4YTJkMCwgMCwgezB4NDEsMHgwZiwweDkwLDB4MTMsMHhmNSwweDA0LDB4ZjksMHg0MSwweDNlLDB4NTAsMHgwZiwweDk0LDB4NDMsMHg2NSwweDAyLDB4ZjkgfSwKKyAgMTYsIDB4YTJlMCwgMCwgezB4NDEsMHgzNiwweDUwLDB4NGQsMHg5NCwweDAzLDB4ZjQsMHgwMCwweGY5LDB4NDEsMHgzNywweDQwLDB4NGYsMHg5NCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4YTJmMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmYywweDAwLDB4Y2QsMHhhOCwweDMzLDB4NzAgfSwKKyAgMTYsIDB4YTMwMCwgMCwgezB4MGYsMHhkMCwweDEzLDB4ZjYsMHg4OCwweGNkLDB4MDAsMHgzMiwweDUwLDB4NGYsMHgxNCwweDIzLDB4MDcsMHhhMCwweGM5LDB4YzAgfSwKKyAgMTYsIDB4YTMxMCwgMCwgezB4MzIsMHg3OCwweDBjLDB4OWUsMHgwMywweDM3LDB4MDIsMHhjZCwweGMwLDB4MzIsMHg2NCwweDBmLDB4OTgsMHgwMywweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTMyMCwgMCwgezB4Y2QsMHgwMCwweDMyLDB4NDAsMHgyYywweGRhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTMzMCwgMCwgezB4MzgsMHgxMCwweGUyLDB4MDgsMHg4OCwweGViLDB4MjIsMHgzMCwweDBiLDB4ODAsMHgxMiwweGU4LDB4MDQsMHhhMCwweGEwLDB4MmEgfSwKKyAgMTYsIDB4YTM0MCwgMCwgezB4MjAsMHgwYiwweDhhLDB4MGEsMHgyMywweDAwLDB4ODgsMHg4MCwweDIyLDB4MjgsMHgwMCwweGM4LDB4NDIsMHgyMywweDgwLDB4ODAgfSwKKyAgMTYsIDB4YTM1MCwgMCwgezB4ZDQsMHgyMCwweDI4LDB4MDksMHg4MCwweDAyLDB4MjIsMHg5NCwweGE4LDB4MDAsMHgyYSwweDAwLDB4ODgsMHg4NSwweDAyLDB4MGUgfSwKKyAgMTYsIDB4YTM2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweGEwLDB4ODMsMHgwMCwweDI0LDB4ZDggfSwKKyAgMTYsIDB4YTM3MCwgMCwgezB4OGIsMHgxMCwweDAyLDB4ZTUsMHgxNCwweDg5LDB4MGEsMHgyMSwweDQ4LDB4MGIsMHg1MiwweDAyLDB4NTQsMHg4MCwweDg1LDB4NDAgfSwKKyAgMTYsIDB4YTM4MCwgMCwgezB4MjUsMHg1OCwweDA5LDB4NTYsMHgwMiwweDQ1LDB4MDIsMHg4MSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHgwMiwweDA0LDB4MzAgfSwKKyAgMTYsIDB4YTM5MCwgMCwgezB4ODEsMHgwMCwweDIwLDB4NDAsMHgwOCwweDEwLDB4MDIsMHg0MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTNhMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MTIsMHg4OSwweDAwLDB4YTYsMHg0MCwweDBiLDB4OTAsMHg0MiwweGU0LDB4OTgsMHhhOSwweDgwLDB4MmIgfSwKKyAgMTYsIDB4YTNiMCwgMCwgezB4NDAsMHgwYiwweDUxLDB4MDIsMHg1NSwweDAwLDB4OWQsMHgwOCwweDI3LDB4NDgsMHgwOSwweGY2LDB4MDIsMHg0NCwweDAwLDB4ODEgfSwKKyAgMTYsIDB4YTNjMCwgMCwgezB4MDQsMHgyMiwweDQwLDB4MTksMHg5MSwweDhhLDB4MjQsMHg4MCwweGE5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4YTNkMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDAyLDB4YzksMHgwNCwweDM2LDB4NTggfSwKKyAgMTYsIDB4YTNlMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YzUsMHgwMCwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDEzLDB4NjQsMHgwMiwweGM5LDB4MDAgfSwKKyAgMTYsIDB4YTNmMCwgMCwgezB4MzYsMHg0MCwweDJkLDB4OTAsMHgwYiwweDY2LDB4MDQsMHhjOSwweGUwLDB4YjIsMHg0OCwweDhmLDB4OTgsMHg0NywweDI0LDB4MDAgfSwKKyAgMTYsIDB4YTQwMCwgMCwgezB4YzksMHgwMCwweDcyLDB4NDAsMHgwYywweDEwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTQxMCwgMCwgezB4MjgsMHgwMSwweGE1LDB4MDgsMHhmOSwweDIxLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDQsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTQyMCwgMCwgezB4NDAsMHg0ZiwweDk4LDB4ODMsMHhhNCwweDAwLDB4ZTksMHg0MCwweGJhLDB4NjAsMHgwZSwweDkwLDB4MDMsMHhhNCwweDgwLDB4ZjkgfSwKKyAgMTYsIDB4YTQzMCwgMCwgezB4YTMsMHgzZSwweDQ4LDB4MGYsMHg5OCwweDBiLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgxZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfSwKKyAgMTYsIDB4YTQ0MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMiwweDQ4LDB4YzgsMHgyMCwweDMyLDB4MDggfSwKKyAgMTYsIDB4YTQ1MCwgMCwgezB4MWYsMHg4MCwweDgzLDB4ZTEsMHgyMiwweGM4LDB4MDEsMHgzMywweDAwLDB4MmMsMHhjMCwweDAzLDB4MzAsMHgwNCwweGNjLDB4NDAgfSwKKyAgMTYsIDB4YTQ2MCwgMCwgezB4YjEsMHgwMCwweDBjLDB4NDQsMHgwMywweDIwLDB4MTIsMHhjOCwweDQxLDB4MzIsMHgwMCwweDJkLDB4ODQsMHgwYiwweDYwLDB4MDAgfSwKKyAgMTYsIDB4YTQ3MCwgMCwgezB4ZjgsMHgwMCwweGIyLDB4MDAsMHg0YywweDgwLDB4MGIsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTQ4MCwgMCwgezB4MjgsMHgwNSwweDNhLDB4MDAsMHhhNiwweDAwLDB4MjMsMHg5MCwweDAzLDB4ZTQsMHg5MiwweGY4LDB4MDAsMHg4MiwweDAwLDB4MzYgfSwKKyAgMTYsIDB4YTQ5MCwgMCwgezB4ODAsMHgwOCwweGEwLDB4MDMsMHg2OCwweDAwLDB4Y2EsMHgwMCwweDIyLDB4ODMsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAzLDB4OGEgfSwKKyAgMTYsIDB4YTRhMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGI2LDB4ODAsMHgyMiwweDgwLDB4MGQsMHhlOCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4YTRiMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2ZSwweDAwLDB4ODIsMHg0MiwweDIwLDB4YzAgfSwKKyAgMTYsIDB4YTRjMCwgMCwgezB4MGIsMHgzNCwweDAyLDB4Y2QsMHgwOSwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMiwweDk4LDB4MDAgfSwKKyAgMTYsIDB4YTRkMCwgMCwgezB4MjAsMHgyMCwweDI4LDB4MDAsMHgwYSwweDA0LDB4MTAsMHg4MSwweDgwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAgfSwKKyAgMTYsIDB4YTRlMCwgMCwgezB4YjMsMHgwMCwweDIyLDB4YzAsMHgxOCwweDMxLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTRmMCwgMCwgezB4YTAsMHgwMSwweDM4LDB4MDIsMHhhMywweDAwLDB4MjEsMHg0MCwweDFiLDB4NzAsMHgwMiwweGRjLDB4MjAsMHg4NCwweDA1LDB4NjUgfSwKKyAgMTYsIDB4YTUwMCwgMCwgezB4ZTAsMHgwOCwweGYwLDB4MDIsMHg3YywweDEwLDB4OTcsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg1NCwweDg4LDB4ODcgfSwKKyAgMTYsIDB4YTUxMCwgMCwgezB4MDksMHgyMSwweGU4LDB4MDksMHgzMywweDAyLDB4MWMsMHg4MCwweGI2LDB4MDgsMHg2MywweGM4LDB4MDksMHgzOCwweDEyLDB4MjggfSwKKyAgMTYsIDB4YTUyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHhhMCwweGExLDB4ZTAgfSwKKyAgMTYsIDB4YTUzMCwgMCwgezB4MGIsMHg3OCwweDAzLDB4ZmUsMHgwMCwweGM1LDB4ODIsMHgzMywweDIwLDB4MGMsMHg0OCwweDAzLDB4MWUsMHgwMSwweGRmLDB4ODAgfSwKKyAgMTYsIDB4YTU0MCwgMCwgezB4MzEsMHgyMCwweDBjLDB4NDgsMHgwMywweDA2LDB4NDAsMHg4NywweDgyLDB4MzEsMHhmOCwweDBkLDB4N2IsMHgwMywweDVmLDB4MDAgfSwKKyAgMTYsIDB4YTU1MCwgMCwgezB4ZjMsMHg4MCwweDMxLDB4ZjIsMHgwYywweDYwLDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTU2MCwgMCwgezB4MDgsMHgxZCwweDljLDB4MDAsMHhmYiwweDAxLDB4MmYsMHg0MCwweDA3LDB4YjAsMHgwMywweGU4LDB4MDQsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YTU3MCwgMCwgezB4YzEsMHgwZiwweGIwLDB4MDMsMHhlMCwweDA2LDB4ZTgsMHgwMiwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDEsMHhhNCwweDEwLDB4ZjkgfSwKKyAgMTYsIDB4YTU4MCwgMCwgezB4NDAsMHhiZSwweGQwLDB4MDYsMHhiMCwweDAzLDB4ZWUsMHgwMCwweGZhLDB4MDAsMHgzYywweGQ4LDB4MGYsMHhhMCwweDAzLDB4YzIgfSwKKyAgMTYsIDB4YTU5MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4Y2YsMHg4OCwweDMzLDB4NjQgfSwKKyAgMTYsIDB4YTVhMCwgMCwgezB4MmMsMHhmOCwweDAzLDB4ZmUsMHgwMiwweGM0LDB4YjAsMHgzMywweDIwLDB4OGMsMHhkOCwweDAzLDB4MzIsMHgwMCwweGNjLDB4YjQgfSwKKyAgMTYsIDB4YTViMCwgMCwgezB4MzMsMHhhMCwweDBjLDB4YzgsMHgwMywweDE2LDB4MjAsMHhjZiwweGMwLDB4MzMsMHhmMCwweDBjLDB4ZjgsMHgwMywweGZlLDB4MDAgfSwKKyAgMTYsIDB4YTVjMCwgMCwgezB4Y2QsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGQ4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTVkMCwgMCwgezB4YTgsMHgxMSwweGI1LDB4MDQsMHg4NywweDEyLDB4YTEsMHg1MCwweDBhLDB4NzQsMHgxMiwweGM0LDB4NDAsMHg4NCwweDExLDB4MjMgfSwKKyAgMTYsIDB4YTVlMCwgMCwgezB4YzAsMHgyOCwweGUwLDB4MDIsMHgxYywweDAyLDB4YTcsMHgxMSwweDIxLDB4NTgsMHg0OCwweDcwLDB4MGEsMHgxNCwweDAwLDB4OGQgfSwKKyAgMTYsIDB4YTVmMCwgMCwgezB4MDAsMHgyMywweGMwLDB4MGIsMHg3MCwweDAyLDB4ZmMsMHg0MCwweDg2LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg1MCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4YTYwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NSwweDAwLDB4ODcsMHg0MCwweDIxLDB4MDAgfSwKKyAgMTYsIDB4YTYxMCwgMCwgezB4MTgsMHg3MSwweDAyLDB4ZGMsMHgwMCwweDk1LDB4MjgsMHhlMSwweDAyLDB4MDgsMHg1MCwweDAyLDB4M2MsMHg0MiwweGE3LDB4MjIgfSwKKyAgMTYsIDB4YTYyMCwgMCwgezB4MjEsMHg4MCwweDg4LDB4NDEsMHgwMiwweDE0LDB4MDAsMHg4NSwweDAwLDB4YTEsMHhjMCwweDA5LDB4NzEsMHgwMiwweGRjLDB4MDAgfSwKKyAgMTYsIDB4YTYzMCwgMCwgezB4YjUsMHgxMCwweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTY0MCwgMCwgezB4MjAsMHgxNCwweGM0LDB4MTAsMHg4MywweDg0LDB4MjAsMHgxMSwweDA4LDB4MzAsMHgwMiwweGMzLDB4MTAsMHg5MSwweDIwLDB4MjAgfSwKKyAgMTYsIDB4YTY1MCwgMCwgezB4YzAsMHgwOCwweDI4LDB4MTIsMHgwMCwweDAwLDB4YTAsMHg4NCwweDIwLDB4NDAsMHgwOCwweDMwLDB4MDIsMHgwNCwweDI2LDB4ODMgfSwKKyAgMTYsIDB4YTY2MCwgMCwgezB4MDAsMHgyMCwweGQwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIyLDB4MDAsMHgyYywweGMwLDB4MGIsMHgwMCwweDAyLDB4MDggfSwKKyAgMTYsIDB4YTY3MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZCwweDAwLDB4Y2YsMHg4OCwweGIyLDB4ZTggfSwKKyAgMTYsIDB4YTY4MCwgMCwgezB4MGMsMHgzMCwweDEzLDB4Y2UsMHhjMiwweGQwLDB4ODIsMHgzMiwweDAwLDB4MGMsMHgwZSwweDBiLDB4MjAsMHgwMCwweGM4LDB4ODggfSwKKyAgMTYsIDB4YTY5MCwgMCwgezB4YjIsMHg0MCwweDJjLDB4YmEsMHg0MywweDM3LDB4MDIsMHhjYiwweDAwLDB4YjMsMHhjMCwweDJjLDB4ZjAsMHgwMywweGZjLDB4MTIgfSwKKyAgMTYsIDB4YTZhMCwgMCwgezB4ZmIsMHgwMCwweDdmLDB4ZDEsMHgwZiwweDMwLDB4MGIsMHgyYiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTZiMCwgMCwgezB4ODAsMHgwMCwweGVkLDB4MDIsMHhmMSwweDQwLDB4M2UsMHg0MSwweDBmLDB4YjAsMHgyMywweGVkLDB4MDAsMHhlOCwweDAxLDB4M2UgfSwKKyAgMTYsIDB4YTZjMCwgMCwgezB4YzgsMHgwZiwweGIwLDB4MTMsMHhlYywweDA0LDB4ZGIsMHgwMCwweDNjLDB4ODAsMHgwZiwweDA0LDB4MDMsMHhlNCwweDQwLDB4ZjkgfSwKKyAgMTYsIDB4YTZkMCwgMCwgezB4MDAsMHgzYywweGMyLDB4MGUsMHhiMCwweDAzLDB4ZWUsMHgwMCwweDRiLDB4NDEsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YTZlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4NGIsMHgwMCwweDMyLDB4NDIgfSwKKyAgMTYsIDB4YTZmMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4MzYsMHg4MCwweGNkLDB4MDAsMHgzMywweDAwLDB4NGMsMHhjMCwweDgzLDB4M2MsMHgwNCwweGY3LDB4MDAgfSwKKyAgMTYsIDB4YTcwMCwgMCwgezB4MzIsMHg0MCwweDBjLDB4YjEsMHg0MywweDE0LDB4MDAsMHhjZCwweDgwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAgfSwKKyAgMTYsIDB4YTcxMCwgMCwgezB4ZmYsMHgwMCwweGIzLDB4YzIsMHgwYywweGEwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTcyMCwgMCwgezB4ODEsMHgwNCwweDRmLDB4MDIsMHg4YiwweDgwLDB4MjAsMHgzMCwweDA4LDB4YmMsMHgwMiwweDIwLDB4MTAsMHg4OSwweDAwLDB4MjIgfSwKKyAgMTYsIDB4YTczMCwgMCwgezB4YzAsMHgwMCwweGIwLDB4MDMsMHg2MCwweDA0LDB4YjgsMHgwMCwweGEyLDB4OTAsMHgyOCwweDhjLDB4MWEsMHgyNCwweDAyLDB4OGIgfSwKKyAgMTYsIDB4YTc0MCwgMCwgezB4ODMsMHgyMiwweGMxLDB4MDgsMHhiMCwweDAyLDB4ZmMsMHgwMCwweGIzLDB4NjAsMHgyMCwweGMwLDB4MGQsMHhhMCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YTc1MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyZSwweDAwLDB4YWIsMHhjMCwweDIyLDB4NjAgfSwKKyAgMTYsIDB4YTc2MCwgMCwgezB4MDgsMHhiOCwweDAyLDB4MjksMHgwMCwweDg4LDB4MDEsMHgyMCwweDAwLDB4MDgsMHg5MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4MDAgfSwKKyAgMTYsIDB4YTc3MCwgMCwgezB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGU0LDB4MDAsMHg4MSwweDI0LDB4YTIsMHhjMCwweDA5LDB4YjAsMHg0NiwweGVjLDB4MDAgfSwKKyAgMTYsIDB4YTc4MCwgMCwgezB4YjksMHgwMCwweDIyLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTc5MCwgMCwgezB4MDgsMHgwNCwweDJjLDB4MDAsMHhhMSwweDAwLDB4YTAsMHg0MSwweDA4LDB4YjAsMHgwYSwweDIwLDB4NTMsMHg4OCwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YTdhMCwgMCwgezB4YzAsMHgyOCwweGEwLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4MDAsMHg4OCwweDAwLDB4MDIsMHg4NCwweDAwLDB4ODMgfSwKKyAgMTYsIDB4YTdiMCwgMCwgezB4MDQsMHgyMCwweGMwLDB4MjgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDIsMHg2MiwweGMwLDB4MDksMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YTdjMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZTksMHgwMCwweDIyLDB4MDAgfSwKKyAgMTYsIDB4YTdkMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MDAsMHgwNCwweGM5LDB4MDAsMHhiMiwweDAwLDB4MGMsMHg5MCwweDAzLDB4MmMsMHgwMCwweGYzLDB4MDAgfSwKKyAgMTYsIDB4YTdlMCwgMCwgezB4YjIsMHhjMCwweDhjLDB4YjAsMHgwMywweGI0LDB4MDIsMHg4ZiwweDAwLDB4MjMsMHhjMCwweDA0LDB4ZjAsMHgwMywweGVjLDB4MDggfSwKKyAgMTYsIDB4YTdmMCwgMCwgezB4ZjksMHgwMCwweDMzLDB4YzAsMHgwYywweDgwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTgwMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MTAsMHhkZCwweDA0LDB4M2YsMHgwMCwweDBmLDB4YzAsMHgyMywweGYwLDB4OTAsMHhmZCwweDAwLDB4MmYgfSwKKyAgMTYsIDB4YTgxMCwgMCwgezB4YzAsMHgwZiwweGUwLDB4NDMsMHhkMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHg4ZiwweGMwLDB4MjIsMHg3NCwweDAwLDB4ZmQgfSwKKyAgMTYsIDB4YTgyMCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDYsMHgzZiwweGMwLDB4MGYsMHhjMCwweDQzLDB4ZTggfSwKKyAgMTYsIDB4YTgzMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDgwLDB4ZWYsMHgyMCwweDExLDB4YzAgfSwKKyAgMTYsIDB4YTg0MCwgMCwgezB4MGUsMHg3MiwweDAzLDB4YmQsMHhiMCwweGNmLDB4MzEsMHhiZiwweGNjLDB4MDIsMHhmMCwweDAzLDB4ZmMsMHhjNiwweGNmLDB4MDEgfSwKKyAgMTYsIDB4YTg1MCwgMCwgezB4MGIsMHhjNSwweDBmLDB4ZjEsMHgwMywweDNjLDB4MDQsMHhlZiwweDYxLDB4MzMsMHhkOCwweDA3LDB4ZjAsMHgwMywweDM0LDB4ODAgfSwKKyAgMTYsIDB4YTg2MCwgMCwgezB4Y2QsMHgzMCwweDczLDB4Y2MsMHgwZiwweGU4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTg3MCwgMCwgezB4ODAsMHgxOCwweGU5LDB4MDAsMHg4OCwweDY5LDB4MjIsMHgxMCwweDA4LDB4OGMsMHgwMCwweDIxLDB4ODQsMHg4OCwweDQxLDB4MjIgfSwKKyAgMTYsIDB4YTg4MCwgMCwgezB4MTAsMHg4OCwweDg2LDB4OTIsMHgwMSwweDAwLDB4ODgsMHg2MiwweDIyLDB4MTAsMHg0YiwweDg3LDB4MDIsMHgyMSwweGEwLDB4ODggfSwKKyAgMTYsIDB4YTg5MCwgMCwgezB4NjAsMHgyMCwweDEwLDB4MGIsMHg4NiwweGEyLDB4MzUsMHhhMCwweGFiLDB4NjAsMHhhMSwweGM0LDB4MGIsMHhiOCwweDAyLDB4MjAgfSwKKyAgMTYsIDB4YThhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjZCwweGE4LDB4MzMsMHg0MSwweDIwLDB4YzYgfSwKKyAgMTYsIDB4YThiMCwgMCwgezB4NGEsMHgzMSwweDAwLDB4OGMsMHgxMCwweDkzLDB4MzMsMHgyOCwweGNjLDB4MjksMHgzNCwweDEyLDB4OGMsMHg1MCwweDkzLDB4MWMgfSwKKyAgMTYsIDB4YThjMCwgMCwgezB4MjgsMHg4NCwweDAxLDB4MjAsMHg0YSwweDRjLDB4NDEsMHg4MywweDEwLDB4MjQsMHhjYywweDRiLDB4MzEsMHg0MiwweDRjLDB4NDAgfSwKKyAgMTYsIDB4YThkMCwgMCwgezB4OTEsMHgxMCwweDI0LDB4YzAsMHgwYiwweDgwLDB4MDIsMHgyMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YThlMCwgMCwgezB4YzAsMHgwNSwweGE4LDB4MjAsMHg5MCwweDAyLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMCwweDIwLDB4MzAsMHhiOCwweDA4LDB4MjYgfSwKKyAgMTYsIDB4YThmMCwgMCwgezB4MDAsMHgwMSwweDgwLDB4ODIsMHgyMCwweDIwLDB4MTgsMHgwOCwweDQyLDB4NDAsMHgwMywweDkxLDB4MDIsMHg2MCwweDAwLDB4MDggfSwKKyAgMTYsIDB4YTkwMCwgMCwgezB4MDEsMHhhNiwweDAwLDB4MGIsMHg4MCwweDAwLDB4NmMsMHgxMCwweGJiLDB4MDEsMHgyNiwweGMwLDB4NGIsMHg5MCwweDBhLDB4MzAgfSwKKyAgMTYsIDB4YTkxMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhmZCwweDAwLDB4ZmQsMHg0MSwweDMzLDB4YTEgfSwKKyAgMTYsIDB4YTkyMCwgMCwgezB4MGUsMHhkMiwweDAzLDB4YjUsMHgwMiwweGRmLDB4NDIsMHgzYiwweDAxLDB4MGYsMHhkNCwweDQzLDB4YjUsMHgwMCwweGNkLDB4NDAgfSwKKyAgMTYsIDB4YTkzMCwgMCwgezB4MWIsMHhjNCwweDBkLDB4NzgsMHgwMywweDcwLDB4MDIsMHhlYywweDAwLDB4MTcsMHhhMSwweDBmLDB4ZTgsMHgwYiwweDJjLDB4MDIgfSwKKyAgMTYsIDB4YTk0MCwgMCwgezB4ZDksMHg5MCwweDI2LDB4YzAsMHgwZiwweGFjLDB4MDMsMHgwMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTk1MCwgMCwgezB4ZTAsMHgwMSwweGI4LDB4MDAsMHhlZSwweDAwLDB4MWYsMHg2NCwweDRmLDB4ZTAsMHgwMywweGQ4LDB4MTAsMHhjNCwweDE4LDB4MzMgfSwKKyAgMTYsIDB4YTk2MCwgMCwgezB4YzAsMHgwYywweGEwLDB4YTEsMHhiOCwweDA5LDB4ZTYsMHgwOSwweDM2LDB4MjIsMHgwZiwweDg4LDB4MjMsMHhiYywweDAwLDB4ZmIgfSwKKyAgMTYsIDB4YTk3MCwgMCwgezB4MDAsMHgzYiwweDY0LDB4MGYsMHhkOSwweDAzLDB4OWMsMHgwMCwweGUzLDB4MDQsMHgzYiwweGMwLDB4MGYsMHhmNCwweDAzLDB4ZjggfSwKKyAgMTYsIDB4YTk4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4ZCwweDAwLDB4YzksMHg0MCwweGI2LDB4ODAgfSwKKyAgMTYsIDB4YTk5MCwgMCwgezB4MGYsMHgxMCwweDAzLDB4YTcsMHgyMCwweGZiLDB4NTAsMHhiNiwweDA4LDB4NGMsMHgxNCwweDAzLDB4NjUsMHgyMiwweGQ5LDB4NDAgfSwKKyAgMTYsIDB4YTlhMCwgMCwgezB4YjYsMHg4MCwweDBlLDB4YTAsMHgwYiwweDAwLDB4MDAsMHhkOCwweDAwLDB4NzYsMHg4MiwweDI4LDB4YTAsMHgyMywweDY0LDB4MDAgfSwKKyAgMTYsIDB4YTliMCwgMCwgezB4YzksMHgwNCwweDEyLDB4YzAsMHg4ZSwweDgwLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YTljMCwgMCwgezB4YzgsMHgwNSwweDJiLDB4NjAsMHg4YSwweDA5LDB4MjAsMHg1MCwweDA4LDB4YTAsMHgyMywweGU5LDB4MDAsMHhiOCwweGMwLDB4MjIgfSwKKyAgMTYsIDB4YTlkMCwgMCwgezB4ZjAsMHgwOCwweGFjLDB4MDIsMHgyOCwweDA0LDB4OGEsMHhjMiwweDIyLDB4NTAsMHgwOCwweDkwLDB4MDYsMHgyYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4YTllMCwgMCwgezB4MDQsMHgyMiwweDUxLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgwNCwweDhiLDB4MDQsMHgzNywweGMwLDB4MDgsMHgxOCwweDQyLDB4MjYgfSwKKyAgMTYsIDB4YTlmMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDQsMHg0YiwweDAwLDB4ODIsMHhjOCwweDI0LDB4NDMgfSwKKyAgMTYsIDB4YWEwMCwgMCwgezB4MGIsMHgyNiwweDBhLDB4ODgsMHgwMCwweGIwLDB4ODAsMHgyMiwweGU0LDB4MGIsMHgyMCwweDQyLDB4NjksMHgwMCwweGEyLDB4OTAgfSwKKyAgMTYsIDB4YWExMCwgMCwgezB4MjgsMHg0MCwweGU4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiYiwweDAwLDB4MjgsMHg1MCwweDg4LDB4OTAsMHg4MiwweGM0LDB4MDEgfSwKKyAgMTYsIDB4YWEyMCwgMCwgezB4ODMsMHgwMCwweDIwLDB4YzAsMHgwYSwweDEwLDB4MDIsMHhiYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWEzMCwgMCwgezB4MjAsMHgxMCwweDRlLDB4ODAsMHg4MSwweDAwLDB4MjEsMHhhOCwweDA4LDB4NTgsMHgwMiwweGQ2LDB4MDEsMHhiNywweDkwLDB4NjggfSwKKyAgMTYsIDB4YWE0MCwgMCwgezB4MjAsMHgwMywweDU5LDB4ODIsMHg1NiwweDAwLDB4YTUsMHg4NCwweDJkLDB4YTIsMHgxOCwweDY5LDB4MjIsMHgwMiwweDAwLDB4MzQgfSwKKyAgMTYsIDB4YWE1MCwgMCwgezB4ODAsMHgyOSwweGE4LDB4MDgsMHg2OCwweDA2LDB4YzYsMHgxNCwweDg1LDB4ODIsMHgyNSwweGUwLDB4MDgsMHg1OCwweDgyLDB4MWMgfSwKKyAgMTYsIDB4YWE2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHg0OCwweDAwLDB4YzIsMHhmMCwweDM0LDB4NDAgfSwKKyAgMTYsIDB4YWE3MCwgMCwgezB4MGYsMHgyMCwweDAzLDB4ODgsMHg4MCwweGY4LDB4MTAsMHgzMCwweGMwLDB4MjcsMHgyMSwweDBiLDB4NDgsMHg4MCwweGVhLDB4MjAgfSwKKyAgMTYsIDB4YWE4MCwgMCwgezB4MzgsMHgwMCwweDBjLDB4MDAsMHgxMiwweDBjLDB4MDgsMHg3MywweDAwLDB4YjgsMHg0MCwweDBjLDB4MTIsMHgyMywweDRjLDB4MDIgfSwKKyAgMTYsIDB4YWE5MCwgMCwgezB4NDMsMHgzNCwweDMwLDB4YzAsMHgwZSwweDExLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWFhMCwgMCwgezB4NDAsMHgxNSwweGFjLDB4OTAsMHhmOSwweDAxLDB4MmUsMHg4OCwweDRiLDB4OTAsMHgxMSwweDY0LDB4MDAsMHhmYiwweDEwLDB4MzIgfSwKKyAgMTYsIDB4YWFiMCwgMCwgezB4MDAsMHgwMCwweDkxLDB4MDMsMHhhNCwweDAwLDB4YzksMHgwMCwweDMyLDB4YzQsMHg0ZCwweGIwLDB4NDMsMHhlMCwweDA0LDB4YzggfSwKKyAgMTYsIDB4YWFjMCwgMCwgezB4MDAsMHgzNiwweDg5LDB4MGYsMHhhOCwweDAzLDB4ZWQsMHgwMCwweGY5LDB4MTQsMHgzZSwweGMwLDB4MGYsMHgxMCwweDQzLDB4ZDAgfSwKKyAgMTYsIDB4YWFkMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhlOCwweDAwLDB4YzgsMHgwMCwweDNhLDB4MDAgfSwKKyAgMTYsIDB4YWFlMCwgMCwgezB4MGMsMHgwMCwweDUzLDB4YTAsMHgwMCwweGU4LDB4MDEsMHgzMiwweDAxLDB4MGUsMHg4MCwweDUzLDB4MjAsMHgxMCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4YWFmMCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweDIwLDB4MTAsMHhlOCwweDA0LDB4YjYsMHgwMCwweDg0LDB4ODAsMHgwMywweDJkLDB4MTIgfSwKKyAgMTYsIDB4YWIwMCwgMCwgezB4Y2IsMHgwMCwweDJlLDB4Y2EsMHgwNCwweDkwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWIxMCwgMCwgezB4NGMsMHgxOSwweDhjLDB4MDAsMHg4NywweDAyLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDBjLDB4MDAsMHg4MywweDAwLDB4MjEgfSwKKyAgMTYsIDB4YWIyMCwgMCwgezB4YzAsMHgwOCwweDMwLDB4NjIsMHg0YywweDA0LDB4ODMsMHgwMCwweDIxLDB4ODAsMHg0OCwweGUwLDB4MTIsMHgzYywweDAwLDB4ODcgfSwKKyAgMTYsIDB4YWIzMCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg1LDB4MDEsMHgyNCwweGQwLDB4MGEsMHg1MCwweDAyLDB4ZjIgfSwKKyAgMTYsIDB4YWI0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHg5YSwweDAwLDB4ODAsMHg4MCwweDI4LDB4MjAgfSwKKyAgMTYsIDB4YWI1MCwgMCwgezB4MDgsMHg0YywweDIyLDB4ZDIsMHgwMCwweGE0LDB4ODAsMHgyNCwweDMwLDB4MGIsMHg0OCwweDAyLDB4NTIsMHgwMCwweDg0LDB4YzAgfSwKKyAgMTYsIDB4YWI2MCwgMCwgezB4MjEsMHgyMCwweDA5LDB4NDgsMHg2OCwweDEzLDB4MDAsMHhhNCwweDgwLDB4NjAsMHgyMCwweDA5LDB4MDgsMHgwMiwweDU2LDB4MDAgfSwKKyAgMTYsIDB4YWI3MCwgMCwgezB4OTcsMHg4MCwweDJkLDB4ZTAsMHg4OCwweDU4LDB4MDIsMHhlMCwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWI4MCwgMCwgezB4NmMsMHgwNCwweGNjLDB4MDAsMHg4MywweDgwLDB4MjAsMHhkOCwweDA4LDB4MzAsMHgwMiwweDRjLDB4NDAsMHg4MywweDAwLDB4MjQgfSwKKyAgMTYsIDB4YWI5MCwgMCwgezB4ZDEsMHgwOSwweGI5LDB4NDIsMHg0ZSwweDAwLDB4ODMsMHgwMCwweDIwLDB4YzEsMHg4OSwweDMwLDB4NDIsMHgwYywweDAwLDB4ODMgfSwKKyAgMTYsIDB4YWJhMCwgMCwgezB4ZjAsMHhhMCwweGQ5LDB4MTksMHgzNiwweDIyLDB4NjYsMHgwNiwweDkxLDB4MDAsMHgwYywweGMxLDB4MGEsMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YWJiMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhlOCwweDAyLDB4Y2EsMHhhNSwweDJhLDB4OTEgfSwKKyAgMTYsIDB4YWJjMCwgMCwgezB4MjgsMHhhOCwweDAzLDB4ZWEsMHgwMiwweGFhLDB4MDAsMHhiNiwweGEwLDB4MGYsMHhhMCwweDBhLDB4MmEsMHg5MiwweGNhLDB4ODMgfSwKKyAgMTYsIDB4YWJkMCwgMCwgezB4YmEsMHg4MCwweDI5LDB4YTAsMHgwMywweDJiLDB4MDAsMHhlYSwweDQwLDB4NjYsMHg5MCwweDJkLDB4ZTQsMHgwYiwweDZhLDB4ODAgfSwKKyAgMTYsIDB4YWJlMCwgMCwgezB4ZGEsMHgwMCwweDNlLDB4ODAsMHgwYywweGUwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWJmMCwgMCwgezB4NDgsMHgwMSwweDgwLDB4MDAsMHhmYywweDAwLDB4M2QsMHgwMCwweDBmLDB4YzAsMHgwMywweGIwLDB4MTQsMHhmYywweDAwLDB4M2IgfSwKKyAgMTYsIDB4YWMwMCwgMCwgezB4MTIsMHgwZSwweGMwLDB4NDMsMHhiMSwweDE0LDB4ZmMsMHgwMCwweDNkLDB4MDAsMHgwZSwweGMwLDB4MDMsMHhmMCwweDIwLDB4ZjQgfSwKKyAgMTYsIDB4YWMxMCwgMCwgezB4MDAsMHgzMSwweDAwLDB4MGUsMHg0NCwweDEzLDB4YTAsMHgwMCwweGU4LDB4MDYsMHgzNiwweDAwLDB4NGYsMHg4MCwweDEzLDB4ZDIgfSwKKyAgMTYsIDB4YWMyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZDEsMHgwMCwweDM2LDB4NjAgfSwKKyAgMTYsIDB4YWMzMCwgMCwgezB4MWMsMHgxOCwweDBiLDB4NDYsMHgwMCwweGQ5LDB4ODAsMHgzMCwweDQwLDB4MmMsMHg5OCwweDA1LDB4ODYsMHgwMCwweGMxLDB4ODAgfSwKKyAgMTYsIDB4YWM0MCwgMCwgezB4OTIsMHg0MCwweDBkLDB4MTAsMHgwMywweDQ0LDB4MDIsMHg4OSwweDAwLDB4MzIsMHg3MCwweDBjLDB4OTgsMHgwMSwweDI0LDB4MDAgfSwKKyAgMTYsIDB4YWM1MCwgMCwgezB4YzksMHgwNCwweDMwLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWM2MCwgMCwgezB4ODAsMHgwNCwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweDI0LDB4ODAsMHg4OSwweDAxLDB4MjIgfSwKKyAgMTYsIDB4YWM3MCwgMCwgezB4NDAsMHg0OCwweDkxLDB4MDIsMHgyNCwweDAwLDB4ZDksMHg5MCwweDIyLDB4NDEsMHgwOCwweDkwLDB4MTIsMHgyNCwweDEwLDB4ODkgfSwKKyAgMTYsIDB4YWM4MCwgMCwgezB4MDAsMHgzMiwweDQwLDB4MDgsMHg5NSwweDEyLDB4MjQsMHgwMiwweDgxLDB4MDAsMHhhMiwweDQxLDB4MGQsMHg5MCwweDQyLDB4ZTAgfSwKKyAgMTYsIDB4YWM5MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDUsMHgyNCwweDAyLDB4OWQsMHgwMCwweDIzLDB4NDQgfSwKKyAgMTYsIDB4YWNhMCwgMCwgezB4MDgsMHhkMiwweDA2LDB4NzQsMHg4MCwweGI1LDB4MjAsMHgyMywweDQwLDB4MWEsMHhkMCwweDA2LDB4MzUsMHg5MCwweDhkLDB4MDIgfSwKKyAgMTYsIDB4YWNiMCwgMCwgezB4MmYsMHg0NCwweDE5LDB4ZDAsMHgwMiwweDc0LDB4MDAsMHg4ZCwweDAwLDB4NjMsMHg0MCwweDE4LDB4ZDQsMHgwMiwweGE0LDB4MTEgfSwKKyAgMTYsIDB4YWNjMCwgMCwgezB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweGIwLDB4MDIsMHhjNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWNkMCwgMCwgezB4MjgsMHgxNCwweDA0LDB4ODAsMHg4NSwweDIwLDB4MjEsMHg2OCwweDA4LDB4NTIsMHgwMiwweDE0LDB4ODAsMHhhNSwweDIwLDB4YTEgfSwKKyAgMTYsIDB4YWNlMCwgMCwgezB4NDgsMHgwYSwweDcyLDB4MzgsMHgxNCwweDgwLDB4OTUsMHgyNCwweDJkLDB4NDgsMHgyOCwweDUyLDB4MDIsMHgxNCwweDgwLDB4ODUgfSwKKyAgMTYsIDB4YWNmMCwgMCwgezB4MjAsMHgyMSwweDQ4LDB4MDgsMHg1MiwweDA2LDB4ODQsMHg4MCwweDgxLDB4MjAsMHgyMCwweDRhLDB4MDksMHgxMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YWQwMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweGIyLDB4MTQgfSwKKyAgMTYsIDB4YWQxMCwgMCwgezB4MjgsMHhhMCwweDAzLDB4NjEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDk0LDB4NGUsMHg4NSwweDA0LDB4MjEsMHg0MiwweGM4LDB4NTAgfSwKKyAgMTYsIDB4YWQyMCwgMCwgezB4M2MsMHgxNCwweDBkLDB4ODAsMHgwMywweDYxLDB4NDAsMHg4OCwweDUwLDB4YjIsMHgxNCwweDJjLDB4YzUsMHgwOSwweGExLDB4NDAgfSwKKyAgMTYsIDB4YWQzMCwgMCwgezB4YzgsMHg1MCwweDMyLDB4MWMsMHgwYywweDgwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWQ0MCwgMCwgezB4OTgsMHgxNSwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2EsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhkOSwweDE0LDB4M2UgfSwKKyAgMTYsIDB4YWQ1MCwgMCwgezB4NDQsMHgwZCwweDkxLDB4NDMsMHg2NCwweDQwLDB4ZTksMHgxMCwweDMyLDB4NDQsMHgwNywweDkzLDB4YzMsMHhlNCwweDUwLDB4ZDEgfSwKKyAgMTYsIDB4YWQ2MCwgMCwgezB4MTAsMHg3ZSwweDQ0LDB4MDMsMHg5MSwweDAxLDB4NTQsMHg0NCwweGZkLDB4MTQsMHgzZSwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4YWQ3MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDgwLDB4ZGQsMHhhMCwweDMzLDB4NjggfSwKKyAgMTYsIDB4YWQ4MCwgMCwgezB4MWUsMHhkYSwweDAzLDB4MzYsMHg5MCwweGNkLDB4YTAsMHgzYiwweDY4LDB4MGEsMHhkOCwweDIzLDB4NzYsMHgwYywweGVkLDB4ODAgfSwKKyAgMTYsIDB4YWQ5MCwgMCwgezB4MmIsMHg2MiwweDBiLDB4OTksMHgwMiwweGE3LDB4ODAsMHhmOSwweGUxLDB4MzcsMHg2OCwweDBjLDB4ZGEsMHgwMywweDI3LDB4ODAgfSwKKyAgMTYsIDB4YWRhMCwgMCwgezB4YzksMHhhMiwweDIyLDB4NjgsMHg0YywweDUwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWRiMCwgMCwgezB4MzgsMHgxOCwweGUxLDB4NDAsMHg4OCwweDUwLDB4MjIsMHgxNCwweDA4LDB4ODAsMHgyMiwweDYwLDB4MDAsMHg4OCwweDA0LDB4MjIgfSwKKyAgMTYsIDB4YWRjMCwgMCwgezB4MDAsMHgwOCwweDA0LDB4MjYsMHgwMSwweDAwLDB4ODgsMHg1MCwweDIyLDB4MTAsMHgwOCwweGFmLDB4MDIsMHgyMywweDAwLDB4ODggfSwKKyAgMTYsIDB4YWRkMCwgMCwgezB4YzAsMHhhMCwweDEwLDB4ODgsMHg4NCwweDAyLDB4MjMsMHg4MCwweGEwLDB4NDAsMHgyYSwweDEwLDB4MDgsMHg4MCwweDEyLDB4NGUgfSwKKyAgMTYsIDB4YWRlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg4NCwweDAwLDB4ODEsMHgwMSwweDIwLDB4NDAgfSwKKyAgMTYsIDB4YWRmMCwgMCwgezB4MGEsMHgxNCwweDAyLDB4NDUsMHgwMCwweDgxLDB4NDEsMHgyYywweDUwLDB4MGIsMHgxNCwweDAyLDB4MDUsMHgwNCwweGExLDB4MDAgfSwKKyAgMTYsIDB4YWUwMCwgMCwgezB4MjgsMHg0MCwweDgyLDB4MTAsMHgwMiwweDg0LDB4NDAsMHhhMSwweDMyLDB4ODAsMHg1MCwweDA5LDB4MTQsMHgwMiwweDA0LDB4YzQgfSwKKyAgMTYsIDB4YWUxMCwgMCwgezB4OTEsMHgxMCwweDY0LDB4NDQsMHgyOCwweDEwLDB4MDIsMHhkMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWUyMCwgMCwgezB4MTgsMHgwNCwweGFjLDB4MDIsMHg4MSwweDAwLDB4MjIsMHhjMSwweDA4LDB4OTAsMHgwMiwweDQ0LDB4MDIsMHg4OSwweDAyLDB4MjYgfSwKKyAgMTYsIDB4YWUzMCwgMCwgezB4NDEsMHgwOSwweDkwLDB4MGEsMHgyNCwweDBjLDB4ODksMHgwNCwweDIyLDB4NTAsMHgwOCwweDkwLDB4MjYsMHgyNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4YWU0MCwgMCwgezB4MDAsMHgyMiwweDQxLDB4MDksMHgxMCwweDIyLDB4MjQsMHg0MCwweGI5LDB4MDEsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4YWU1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDEwLDB4ODksMHgwMCwweDMyLDB4NDAgfSwKKyAgMTYsIDB4YWU2MCwgMCwgezB4MGEsMHg5MCwweDBiLDB4MjQsMHgxMCwweDg5LDB4MDAsMHgxZSwweDQwLDB4OWIsMHg5MCwweDAyLDB4MjQsMHgxMCwweDI5LDB4MDAgfSwKKyAgMTYsIDB4YWU3MCwgMCwgezB4MWEsMHg0MCwweDBlLDB4OTQsMHg0MSwweGE0LDB4MDAsMHgyOSwweDAwLDB4MTIsMHg0MCwweDA1LDB4OTAsMHg0MSwweDI2LDB4MDAgfSwKKyAgMTYsIDB4YWU4MCwgMCwgezB4ZDksMHgwMCwweDI0LDB4NDAsMHgwYywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWU5MCwgMCwgezB4NDgsMHgwMSwweGE0LDB4MDIsMHhhOSwweDAwLDB4YmMsMHg0MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MDQsMHhmOSwweDAwLDB4M2EgfSwKKyAgMTYsIDB4YWVhMCwgMCwgezB4NDEsMHgwZSwweDkwLDB4ODMsMHg4NCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZSwweDkwLDB4MDIsMHhjNCwweDA4LDB4ZTkgfSwKKyAgMTYsIDB4YWViMCwgMCwgezB4MDAsMHgzYSwweDQwLDB4MmUsMHg5MCwweDBiLDB4ZTYsMHgwMCwweGUxLDB4MDQsMHgzYSwweDQwLDB4MGYsMHg5MiwweDAzLDB4NWEgfSwKKyAgMTYsIDB4YWVjMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhMCwweDIwLDB4ZDgsMHgwMCwweDM2LDB4MDIgfSwKKyAgMTYsIDB4YWVkMCwgMCwgezB4MGUsMHgwMCwweGEzLDB4ZTAsMHgxOCwweGMwLDB4MDAsMHgzMCwweDAzLDB4MGYsMHg4MCwweDMzLDB4MjAsMHgwMCwweDQwLDB4MDAgfSwKKyAgMTYsIDB4YWVlMCwgMCwgezB4MzIsMHgwZCwweDBmLDB4MDQsMHgwYiwweGEwLDB4MDIsMHhjOCwweDAyLDB4MzIsMHgwMiwweDhjLDB4ODIsMHgwMywweDIwLDB4MDIgfSwKKyAgMTYsIDB4YWVmMCwgMCwgezB4YzgsMHgwNCwweDE2LDB4MDAsMHg0ZSwweDgwLDB4MDEsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWYwMCwgMCwgezB4MjgsMHgwNSwweDNiLDB4MDAsMHg4ZSwweGQ4LDB4MjMsMHg4MCwweDA4LDB4ZTAsMHgwMiwweGY4LDB4ODAsMHg4ZSwweDEwLDB4MjMgfSwKKyAgMTYsIDB4YWYxMCwgMCwgezB4YTIsMHgwYiwweGUwLDB4ODIsMHg3YSwweDIwLDB4OGUsMHgzMCwweDIzLDB4YTEsMHgwYiwweGUwLDB4MDIsMHgyOCwweDAwLDB4OGUgfSwKKyAgMTYsIDB4YWYyMCwgMCwgezB4MDAsMHgyYiwweDg4LDB4MDgsMHhlNCwweDQyLDB4MzgsMHgwMCwweDhlLDB4MDQsMHgyMywweDgwLDB4MDgsMHhhMCwweDAyLDB4MGEgfSwKKyAgMTYsIDB4YWYzMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2ZiwweDQwLDB4OTMsMHhjNiwweDI0LDB4NDAgfSwKKyAgMTYsIDB4YWY0MCwgMCwgezB4MGEsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDEsMHhhYywweGYwLDB4MGIsMHhiNCwweDAyLDB4NGMsMHgwNCwweGEzLDB4ODAgfSwKKyAgMTYsIDB4YWY1MCwgMCwgezB4MjgsMHhkMCwweDRiLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhhYiwweDA0LDB4MmEsMHhjMCwweDJhLDB4MzAsMHgwYSwweGFjLDB4MTAgfSwKKyAgMTYsIDB4YWY2MCwgMCwgezB4OTMsMHgwMCwweDIwLDB4YzEsMHgwYSwweDMxLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWY3MCwgMCwgezB4ODAsMHgxMSwweDFjLDB4MDAsMHg4MiwweDAwLDB4MjEsMHg0MiwweDg4LDB4NzQsMHgwNiwweGRjLDB4MGIsMHg4NiwweDAyLDB4MmQgfSwKKyAgMTYsIDB4YWY4MCwgMCwgezB4ODAsMHgwYiwweDcwLDB4MmEsMHg1OCwweDAwLDB4YTYsMHgwMCwweGE5LDB4YzAsMHgwYiwweDcwLDB4MDIsMHg1YywweDg4LDB4YTcgfSwKKyAgMTYsIDB4YWY5MCwgMCwgezB4MjAsMHgyOSwweGMwLDB4MGEsMHg3MCwweDAyLDB4OWMsMHgxMCwweDk3LDB4MjAsMHhhMSwweGM4LDB4MDgsMHhkOCwweDAyLDB4MjggfSwKKyAgMTYsIDB4YWZhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDgsMHgwZSwweDAwLDB4ZDcsMHg4MCwweDM3LDB4NjAgfSwKKyAgMTYsIDB4YWZiMCwgMCwgezB4MGUsMHg2OCwweDEzLDB4ZmUsMHgwMCwweGNmLDB4ODAsMHgzZCwweGUwLDB4MGYsMHg3OCwweDIzLDB4MWUsMHgwMCwweGVmLDB4ODIgfSwKKyAgMTYsIDB4YWZjMCwgMCwgezB4MzEsMHhlMCwweDBmLDB4M2MsMHhjMywweDdlLDB4MDQsMHhlZiwweDgwLDB4YjEsMHhlMCwweDBlLDB4ZTgsMHgwMywweGJlLDB4ODAgfSwKKyAgMTYsIDB4YWZkMCwgMCwgezB4ZDcsMHhlMCwweDMzLDB4ZWEsMHgwZSwweDc4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YWZlMCwgMCwgezB4MDgsMHgxNSwweGFjLDB4MDAsMHhmYSwweDAxLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDQsMHhmOCwweDAwLDB4MzIgfSwKKyAgMTYsIDB4YWZmMCwgMCwgezB4ODAsMHgwZiwweDgwLDB4NDMsMHhhYywweDBhLDB4ZDgsMHgwMCwweDM2LDB4NDAsMHgwZiwweGIwLDB4MDMsMHgyYywweDBjLDB4ZGIgfSwKKyAgMTYsIDB4YjAwMCwgMCwgezB4MDAsMHgyNiwweGMxLDB4MDksMHhhMCwweDEzLDB4NmMsMHg0MCwweGViLDB4NDAsMHgzYSwweGRjLDB4MGYsMHg5MCwweDBiLDB4YzIgfSwKKyAgMTYsIDB4YjAxMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHhiZSwweDAwLDB4Y2YsMHg4MSwweDMzLDB4ZTkgfSwKKyAgMTYsIDB4YjAyMCwgMCwgezB4MWYsMHhmOSwweDEzLDB4YjYsMHg1MCwweGVmLDB4ODAsMHgxZiwweGU0LDB4MDQsMHhjOCwweDAzLDB4N2UsMHgwMCwweDZkLDB4ODEgfSwKKyAgMTYsIDB4YjAzMCwgMCwgezB4MzMsMHg2NCwweDBjLDB4ZjgsMHgxYiwweDNlLDB4MjAsMHgyZiwweDg4LDB4OTMsMHhlOCwweDBmLDB4ZmIsMHgwMywweDJlLDB4ODAgfSwKKyAgMTYsIDB4YjA0MCwgMCwgezB4Y2YsMHhjMCwweDczLDB4ZTAsMHgyYywweGQ5LDB4MDMsMHhkMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjA1MCwgMCwgezB4YTgsMHgxOCwweDkwLDB4NDIsMHg4OSwweDE4LDB4MjEsMHhjMCwweDFmLDB4NzEsMHgwMiwweDE0LDB4YzAsMHhmNywweDIwLDB4MjcgfSwKKyAgMTYsIDB4YjA2MCwgMCwgezB4NDAsMHg0MCwweDcxLDB4MTIsMHgxOCwweDAwLDB4ODcsMHgyMCwweDIxLDB4ODAsMHg0OCwweDcxLDB4MDIsMHgzYywweDA4LDB4ODcgfSwKKyAgMTYsIDB4YjA3MCwgMCwgezB4MjAsMHgyMSwweDgyLDB4MGIsMHg2MSwweGEyLDB4MWUsMHg0NCwweGRmLDB4MDEsMHgzMSwweGM4LDB4MDgsMHg3MywweDAyLDB4ZWEgfSwKKyAgMTYsIDB4YjA4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg4YywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzggfSwKKyAgMTYsIDB4YjA5MCwgMCwgezB4MGIsMHg3MCwweDAyLDB4OWMsMHgwOSwweDg3LDB4MDIsMHgyZCwweDgyLDB4OTksMHg0MCwweDAyLDB4MDQsMHgwMCwweGE1LDB4MDkgfSwKKyAgMTYsIDB4YjBhMCwgMCwgezB4MjEsMHg0MCwweDE5LDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDA1LDB4MjUsMHg0OCwweDRiLDB4NzIsMHgwMiwweDBjLDB4NDAgfSwKKyAgMTYsIDB4YjBiMCwgMCwgezB4ODcsMHgwMCwweGExLDB4YzAsMHg0OCwweDUwLDB4MDIsMHhjNCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjBjMCwgMCwgezB4NjgsMHgwNCwweGMxLDB4MjAsMHg4OSwweDRjLDB4YTAsMHhiNCwweDBhLDB4MzgsMHgwMiwweDIyLDB4MDAsMHhhMSwweGQwLDB4MjQgfSwKKyAgMTYsIDB4YjBkMCwgMCwgezB4MzAsMHgwOSwweDgwLDB4MDIsMHgyNywweDQ0LDB4ODEsMHhjNiwweDIyLDB4MTQsMHgwOSwweDNkLDB4MmEsMHgwZiwweDAyLDB4OGIgfSwKKyAgMTYsIDB4YjBlMCwgMCwgezB4YzAsMHhhNiwweDIwLDB4MGIsMHgyNCwweDAwLDB4MGMsMHgxMCwweDkzLDB4ODEsMHgyMCwweGMwLDB4NDgsMHgzMCwweDA2LDB4ZDggfSwKKyAgMTYsIDB4YjBmMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MTUsMHhhMSwweDAwLDB4ODksMHhjMSwweDMyLDB4ZDEgfSwKKyAgMTYsIDB4YjEwMCwgMCwgezB4MDMsMHhiYywweDAzLDB4YTksMHgyMCwweDg5LDB4NDEsMHgzZSwweDYwLDB4ODUsMHhiYywweDhiLDB4MjUsMHg0MCwweGViLDB4NDEgfSwKKyAgMTYsIDB4YjExMCwgMCwgezB4YTIsMHhhMCwweDBkLDB4ZjAsMHgxMywweDNlLDB4MjAsMHhjZiwweDkwLDB4MzYsMHgzMCwweDRmLDB4YmMsMHgwYiwweDNjLDB4MDAgfSwKKyAgMTYsIDB4YjEyMCwgMCwgezB4Y2YsMHg4MCwweDMzLDB4YzEsMHgwYywweGIxLDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjEzMCwgMCwgezB4ODAsMHgwMCwweGVkLDB4MDAsMHhmOCwweDAxLDB4M2MsMHhkMCwweDBmLDB4YjMsMHgwMywweGU4LDB4ODIsMHhkOCwweDIwLDB4MzYgfSwKKyAgMTYsIDB4YjE0MCwgMCwgezB4ODAsMHgyZSwweGIyLDB4MTMsMHhlMSwweDAwLDB4ZmEsMHgwMCwweDdlLDB4YzgsMHgyZSwweGIwLDB4MDMsMHhlYywweDgwLDB4ZGIgfSwKKyAgMTYsIDB4YjE1MCwgMCwgezB4MTAsMHgzYSwweDA4LDB4NGYsMHhiMiwweDIzLDB4Y2MsMHgwMiwweGZiLDB4MTAsMHgzYSwweGMwLDB4MGYsMHg5MCwweDAzLDB4ZTQgfSwKKyAgMTYsIDB4YjE2MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhmMCwweDAwLDB4Y2QsMHgxMCwweDMzLDB4NDIgfSwKKyAgMTYsIDB4YjE3MCwgMCwgezB4MGMsMHhjYSwweDIzLDB4N2MsMHgwMCwweGNmLDB4MDAsMHgzMywweDYyLDB4MDYsMHhmMCwweDAxLDB4M2EsMHgwMCwweGNmLDB4MDggfSwKKyAgMTYsIDB4YjE4MCwgMCwgezB4MzMsMHg4MCwweDFjLDB4ZjAsMHg4MSwweDNjLDB4MDAsMHhmZiwweDAwLDB4MzMsMHhhMCwweDBjLDB4Y2EsMHgwMSwweGZjLDB4MDQgfSwKKyAgMTYsIDB4YjE5MCwgMCwgezB4Y2YsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjFhMCwgMCwgezB4YTEsMHgwNCwweDZkLDB4NDAsMHg4OCwweDQ4LDB4YTIsMHgzMSwweDA4LDB4MTAsMHgwMiwweDIwLDB4MTAsMHg4OCwweGI0LDB4MjIgfSwKKyAgMTYsIDB4YjFiMCwgMCwgezB4YTAsMHgwOCwweDgwLDB4MDAsMHg2YSwweDg0LDB4ODgsMHgyMCwweDIyLDB4NTIsMHgwOCwweGIwLDB4MGEsMHgyYywweDEwLDB4YmIgfSwKKyAgMTYsIDB4YjFjMCwgMCwgezB4MDAsMHgzMiwweGIzLDB4ODgsMHg4MCwweDAyLDB4ZWMsMHgwMCwweGRiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHg5MCwweDEyLDB4ZTEgfSwKKyAgMTYsIDB4YjFkMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweDEwLDB4OGEsMHgwMSwweDIyLDB4YTAgfSwKKyAgMTYsIDB4YjFlMCwgMCwgezB4MDgsMHhiMCwweDQyLDB4NjAsMHgyMCwweDgwLDB4MDAsMHgyMCwweDQ0LDB4MWEsMHg4MCwweDFhLDB4ZTQsMHg0MiwweGEwLDB4MDYgfSwKKyAgMTYsIDB4YjFmMCwgMCwgezB4MjIsMHgwMCwweDc4LDB4MzAsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAwLDB4YTIsMHg0NCwweDA4LDB4YjAsMHgxMiwweGVjLDB4MDAgfSwKKyAgMTYsIDB4YjIwMCwgMCwgezB4OGIsMHgwMCwweDBlLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhlMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjIxMCwgMCwgezB4MDgsMHgxNCwweDAwLDB4MDgsMHg4MCwweDAwLDB4MjAsMHg4MSwweDA4LDB4MzAsMHgwMiwweDQwLDB4MTIsMHg4MCwweDAwLDB4YTAgfSwKKyAgMTYsIDB4YjIyMCwgMCwgezB4NDAsMHgwOCwweGIwLDB4MDIsMHhjMCwweDAwLDB4ODIsMHgwMCwweDAwLDB4ODAsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4YmIgfSwKKyAgMTYsIDB4YjIzMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDgsMHgyMCwweDAyLDB4Y2MsMHg4MCwweDkzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4YzIgfSwKKyAgMTYsIDB4YjI0MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4Y2EsMHgxNCwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YjI1MCwgMCwgezB4MGMsMHhiMCwweDAzLDB4NGMsMHgwMCwweGNhLDB4MDAsMHgzMiwweDAwLDB4MGUsMHgwMCwweDEyLDB4YTAsMHgwMCwweGMwLDB4MDAgfSwKKyAgMTYsIDB4YjI2MCwgMCwgezB4NzAsMHgwMCwweDI4LDB4ZjAsMHgxMywweGFjLDB4MDAsMHhmYiwweDAwLDB4MzIsMHg0MCwweDJjLDB4MTAsMHg0MywweGVjLDB4MDAgfSwKKyAgMTYsIDB4YjI3MCwgMCwgezB4Y2YsMHgwMCwweDNmLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjI4MCwgMCwgezB4MjAsMHgxNSwweGYwLDB4MDIsMHhmYywweDAwLDB4MWYsMHgwMCwweDY3LDB4NzAsMHgwMywweGIwLDB4MDAsMHhmYywweDAwLDB4M2YgfSwKKyAgMTYsIDB4YjI5MCwgMCwgezB4MDAsMHgyZCwweGMwLDB4MDMsMHgzMCwweDEwLDB4ZmMsMHgwMSwweGJmLDB4MDAsMHgwZiwweDcwLDB4MDMsMHg3YywweDAwLDB4ZjcgfSwKKyAgMTYsIDB4YjJhMCwgMCwgezB4MDQsMHgzYiwweDAwLDB4MGYsMHhjMCwweDEzLDB4ZmQsMHgxMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfSwKKyAgMTYsIDB4YjJiMCwgMCwgezB4MTIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNCwweGMwLDB4Y2YsMHg4MCwweDMzLDB4NjAgfSwKKyAgMTYsIDB4YjJjMCwgMCwgezB4MGUsMHhjOSwweDEzLDB4MzYsMHg1MCwweGNlLDB4ODYsMHgzZiwweDA4LDB4MGMsMHhjMCwweDAzLDB4M2UsMHgwMiwweGQ3LDB4ODAgfSwKKyAgMTYsIDB4YjJkMCwgMCwgezB4MzksMHhlMCwweDBmLDB4ZjgsMHgxMywweDNlLDB4NDAsMHhjNywweDMwLDB4M2IsMHhjZSwweDBkLDB4ZjYsMHgwMywweDNkLDB4ODggfSwKKyAgMTYsIDB4YjJlMCwgMCwgezB4Y2YsMHgzMSwweDMzLDB4ZTQsMHgwZiwweDc4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjJmMCwgMCwgezB4ODAsMHgxMCwweGU1LDB4ZDAsMHhkYiwweDgwLDB4NzIsMHg2MCwweDg4LDB4OTIsMHgwMiwweGU0LDB4MTAsMHg4YSwweDgwLDB4MmUgfSwKKyAgMTYsIDB4YjMwMCwgMCwgezB4MzQsMHg0YSwweDhjLDB4MDMsMHgyZSwweDAwLDB4YWIsMHg4MCwweDAyLDB4ZTAsMHgwYiwweGI4LDB4MDIsMHgyYywweDgwLDB4OGYgfSwKKyAgMTYsIDB4YjMxMCwgMCwgezB4NjAsMHgxMywweGQ4LDB4NGEsMHg3NiwweDAyLDB4OWQsMHg4NCwweGFmLDB4MzAsMHgyMiwweDQ4LDB4MGIsMHg4OCwweDEyLDB4YTAgfSwKKyAgMTYsIDB4YjMyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDAwLDB4OGIsMHgwMCwweDI0LDB4MDAgfSwKKyAgMTYsIDB4YjMzMCwgMCwgezB4NGEsMHgwMCwweDAyLDB4YWMsMHg4MCwweDgzLDB4MDAsMHgyYywweDAxLDB4MjgsMHgwNCwweDAyLDB4YWMsMHgwMCwweDhiLDB4MDEgfSwKKyAgMTYsIDB4YjM0MCwgMCwgezB4MjAsMHhjMCwweDAzLDB4YjAsMHgwMiwweDBjLDB4ODAsMHg4MywweDQwLDB4MjAsMHhjMSwweGE4LDB4MzQsMHgyMiwweDhkLDB4MTMgfSwKKyAgMTYsIDB4YjM1MCwgMCwgezB4ODMsMHgyMCwweGFjLDB4YzgsMHgwYiwweGIwLDB4MDIsMHg2MiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjM2MCwgMCwgezB4YzAsMHgxNSwweDg2LDB4MDAsMHg5YiwweDA0LDB4YWUsMHgwMCwweDBhLDB4OTAsMHgwMiwweGVjLDB4MDAsMHgwYiwweDE0LDB4MmUgfSwKKyAgMTYsIDB4YjM3MCwgMCwgezB4YzYsMHgwMiwweGIxLDB4MTIsMHg2YywweDAwLDB4YWIsMHgyMCwweDJhLDB4YzEsMHgwYiwweGIwLDB4NDIsMHgyYywweDAwLDB4OGIgfSwKKyAgMTYsIDB4YjM4MCwgMCwgezB4MDIsMHgyNiwweGMxLDB4MGEsMHhiMCwweDAyLDB4YWMsMHgwMCwweGFiLDB4MDQsMHgyYSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZjAgfSwKKyAgMTYsIDB4YjM5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhlNywweDAwLDB4YzMsMHgwMSwweDM2LDB4NDAgfSwKKyAgMTYsIDB4YjNhMCwgMCwgezB4MGUsMHg4OCwweDEzLDB4MjQsMHgwMiwweGNhLDB4MDAsMHgxZSwweDIwLDB4MmMsMHg4ZSwweDBiLDB4MmMsMHgwMCwweGNiLDB4MDAgfSwKKyAgMTYsIDB4YjNiMCwgMCwgezB4MmEsMHhjMCwweDBmLDB4YjgsMHgwMywweDJlLDB4MDYsMHhjYiwweDAwLDB4M2EsMHhjMCwweDRjLDB4YjAsMHgxMywweGFjLDB4MGMgfSwKKyAgMTYsIDB4YjNjMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4YzgsMHgwZiwweGIwLDB4NDMsMHg1MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjNkMCwgMCwgezB4ZTAsMHgwMSwweGI0LDB4MDgsMHhmZiwweDkxLDB4MzMsMHg0MCwweDA5LDB4ZGMsMHgwMSwweGY0LDB4MjAsMHg3ZSwweDAyLDB4MmUgfSwKKyAgMTYsIDB4YjNlMCwgMCwgezB4NDAsMHgwZCwweDk4LDB4MDEsMHhiYywweDgwLDB4ZWYsMHg4MCwweGI3LDB4ZTQsMHg4ZiwweGY0LDB4MGIsMHhmZSwweDQwLDB4N2YgfSwKKyAgMTYsIDB4YjNmMCwgMCwgezB4MDAsMHhiOSwweGMwLDB4NGUsMHhmMCwweDAzLDB4ZmMsMHgwOCwweGY3LDB4MDAsMHgzNywweGMwLDB4MGYsMHhlMCwweDAyLDB4YjggfSwKKyAgMTYsIDB4YjQwMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMSwweDQ0LDB4Y2IsMHgwMiwweDMyLDB4MDAgfSwKKyAgMTYsIDB4YjQxMCwgMCwgezB4MGQsMHg4MCwweDBhLDB4NmQsMHgwMCwweGViLDB4MDQsMHgxMCwweDkwLDB4MjgsMHgyMiwweDBiLDB4MmMsMHhjMiwweGNiLDB4MjAgfSwKKyAgMTYsIDB4YjQyMCwgMCwgezB4NzYsMHhjMCwweDBlLDB4YjEsMHgwMywweGVjLDB4MDEsMHhjYiwweDA2LDB4MzIsMHhjMSwweDBjLDB4MzAsMHgwMywweDJjLDB4MDIgfSwKKyAgMTYsIDB4YjQzMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4ZDAsMHgwYywweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjQ0MCwgMCwgezB4YzgsMHgwNSwweDIxLDB4NDgsMHhhYiwweDAwLDB4MjAsMHgwMCwweDAwLDB4OTUsMHgyMywweDRjLDB4MDgsMHhiYiwweDAxLDB4MjIgfSwKKyAgMTYsIDB4YjQ1MCwgMCwgezB4YzAsMHgwOCwweGIyLDB4MDIsMHgwYywweDA4LDB4ODMsMHg4OCwweDkyLDB4ZDUsMHgyOCwweDM0LDB4MDIsMHhlYywweDAyLDB4OGYgfSwKKyAgMTYsIDB4YjQ2MCwgMCwgezB4MjAsMHgyMywweGMwLDB4NGQsMHhmMCwweDAxLDB4N2MsMHgwMCwweGRmLDB4MDAsMHgyZSwweGMwLDB4MGQsMHgzMCwweDAzLDB4NzIgfSwKKyAgMTYsIDB4YjQ3MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0NCwweDAwLDB4ODMsMHgxMCwweDIwLDB4NjAgfSwKKyAgMTYsIDB4YjQ4MCwgMCwgezB4MDksMHgyNSwweDAyLDB4MDAsMHgwOCwweGEwLDB4MDAsMHg0YywweDAwLDB4MGIsMHgwYywweDIyLDB4NGYsMHgxMiwweDkzLDB4NDAgfSwKKyAgMTYsIDB4YjQ5MCwgMCwgezB4MDAsMHhjMCwweDA5LDB4M2UsMHgwMiwweGVjLDB4MDAsMHhhYiwweDgwLDB4YTQsMHhjMCwweDA5LDB4MzAsMHgyMiwweDJjLDB4MDggfSwKKyAgMTYsIDB4YjRhMCwgMCwgezB4YjMsMHgwMSwweDBjLDB4ODEsMHgwOCwweDMwLDB4MDIsMHgzOCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjRiMCwgMCwgezB4NjAsMHgwMSwweDE2LDB4MDksMHhiNywweDgwLDB4MjEsMHg2NCwweDA4LDB4NzgsMHgwNiwweDEyLDB4MDAsMHhiNCwweDgyLDB4MmQgfSwKKyAgMTYsIDB4YjRjMCwgMCwgezB4YTQsMHgxYiwweDY5LDB4MDYsMHg3ZSwweDA0LDB4MTcsMHg5MiwweDI1LDB4ZTYsMHgwOSwweDc4LDB4MDYsMHhkZSwweDgwLDB4YTcgfSwKKyAgMTYsIDB4YjRkMCwgMCwgezB4OTAsMHgyNSwweGUwLDB4MDksMHg3OSwweDUwLDB4NWUsMHgwNCwweGI3LDB4OTIsMHgyZiwweDYxLDB4MDksMHhjOCwweDAyLDB4NDggfSwKKyAgMTYsIDB4YjRlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyNSwweDAwLDB4YzMsMHgwMCwweGIwLDB4MDMgfSwKKyAgMTYsIDB4YjRmMCwgMCwgezB4MGQsMHhhMywweDQyLDB4MDksMHg0MCwweGUxLDB4MDAsMHhiYywweDQwLDB4MGYsMHgxMSwweDAzLDB4NGMsMHgwMCwweDEzLDB4MDAgfSwKKyAgMTYsIDB4YjUwMCwgMCwgezB4MjAsMHhjMCwweDA5LDB4MzIsMHgwMywweGNjLDB4MTAsMHhhMywweDAwLDB4MjYsMHhjNCwweDhkLDB4MzAsMHgyYiwweDBjLDB4ODAgfSwKKyAgMTYsIDB4YjUxMCwgMCwgezB4ZjMsMHgwMCwweDdjLDB4ODAsMHgwYywweDMwLDB4MDEsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjUyMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhlNywweDEwLDB4M2QsMHgwMSwweDJmLDB4ZjEsMHg0MiwweGU4LDB4MDAsMHhmNSwweDkwLDB4MDMgfSwKKyAgMTYsIDB4YjUzMCwgMCwgezB4YzEsMHgwYywweGYxLDB4NDMsMHg5YywweDA0LDB4ZWYsMHgwOCwweDNiLDB4YzIsMHgwYywweGYwLDB4ODEsMHhkYywweGEwLDB4ZGYgfSwKKyAgMTYsIDB4YjU0MCwgMCwgezB4MDAsMHgzYiwweGMzLDB4M2YsMHhmMCwweDgzLDB4ZmMsMHgwNSwweGRmLDB4MGMsMHgzZCwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZDAgfSwKKyAgMTYsIDB4YjU1MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmNCwweDAwLDB4Y2IsMHg4MCwweDMwLDB4NDAgfSwKKyAgMTYsIDB4YjU2MCwgMCwgezB4MmMsMHhhMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4ODAsMHgzMiwweGMwLDB4MmUsMHhiOCwweDBiLDB4MmMsMHg0NiwweGQzLDB4MDAgfSwKKyAgMTYsIDB4YjU3MCwgMCwgezB4MzAsMHhjMCwweDBjLDB4MzAsMHgwMywweDBjLDB4MDAsMHhkYiwweDQ4LDB4MzIsMHhjMCwweDFmLDB4YjQsMHgwMywweDJjLDB4ODggfSwKKyAgMTYsIDB4YjU4MCwgMCwgezB4Y2IsMHg0OCwweDMyLDB4ODAsMHgwYywweDMwLDB4MTMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjU5MCwgMCwgezB4NDgsMHgxMSwweGI0LDB4MDAsMHg4NywweDAxLDB4MjEsMHg0MCwweDA4LDB4NzAsMHg0MiwweGQwLDB4MDgsMHhiNCwweDAwLDB4MjkgfSwKKyAgMTYsIDB4YjVhMCwgMCwgezB4YzAsMHgwOCwweDcwLDB4MDIsMHgxYywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzgsMHgwYywweDcyLDB4MGEsMHgxYywweDg0LDB4OGYgfSwKKyAgMTYsIDB4YjViMCwgMCwgezB4NDAsMHgwOSwweGM0LDB4OGYsMHg3MywweDEyLDB4OWMsMHg0MCwweDgzLDB4MjAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAyLDB4OTIgfSwKKyAgMTYsIDB4YjVjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5NiwweDAxLDB4YWYsMHg4MCwweDIxLDB4MjAgfSwKKyAgMTYsIDB4YjVkMCwgMCwgezB4MDgsMHg2OCwweDAyLDB4ZGEsMHgwMCwweGJkLDB4ODAsMHgyMSwweGUwLDB4MDksMHg3OCwweDAyLDB4MWUsMHgwMCwweDhmLDB4ODggfSwKKyAgMTYsIDB4YjVlMCwgMCwgezB4ODMsMHhlMiwweDI5LDB4ZjgsMHg4MiwweDVmLDB4ODAsMHg4NywweGEwLDB4MjUsMHhlMCwweDBiLDB4M2EsMHgxMiwweDBlLDB4NTAgfSwKKyAgMTYsIDB4YjVmMCwgMCwgezB4OTcsMHhhNCwweDIxLDB4YTAsMHgyOSwweDc4LDB4MDIsMHgzMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjYwMCwgMCwgezB4MDgsMHgxNCwweGNjLDB4MDIsMHhhMSwweDgxLDB4MDAsMHgwMCwweDQ4LDB4NzAsMHgwMiwweGM4LDB4MDAsMHhiMSwweDAwLDB4MmMgfSwKKyAgMTYsIDB4YjYxMCwgMCwgezB4ZjgsMHgwOSwweDMxLDB4NDIsMHgwYywweDEwLDB4ODMsMHgwMCwweDIwLDB4ZTAsMHgwOCwweDM4LDB4MTIsMHg0ZSwweDAwLDB4ODMgfSwKKyAgMTYsIDB4YjYyMCwgMCwgezB4MDAsMHg2YSwweGMwLDB4MGIsMHgzMCwweDAyLDB4OGMsMHgwNCwweDkzLDB4MDAsMHgyMCwweGUwLDB4MDksMHgzOCwweDAyLDB4OTIgfSwKKyAgMTYsIDB4YjYzMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDQwLDB4ZWUsMHgyMCwweDMwLDB4ODAgfSwKKyAgMTYsIDB4YjY0MCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzMywweGIwLDB4MGQsMHhlNCwweDAzLDB4MzIsMHg4OCwweGNjLDB4ODAgfSwKKyAgMTYsIDB4YjY1MCwgMCwgezB4MjMsMHgwMCwweDBkLDB4YzAsMHgwMywweDYyLDB4MDIsMHhjYSwweDAwLDB4MzYsMHg4MCwweDBmLDB4YTAsMHg0MywweDI4LDB4MDYgfSwKKyAgMTYsIDB4YjY2MCwgMCwgezB4ZGEsMHgwMCwweDMzLDB4YTAsMHgwZCwweDZhLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjY3MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHg5OCwweDAxLDB4YmUsMHgwMCwweDBmLDB4ODAsMHgwMywweGYwLDB4MDAsMHhiYywweDAwLDB4MzggfSwKKyAgMTYsIDB4YjY4MCwgMCwgezB4MDQsMHgwOCwweDgwLDB4YTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MTMsMHhhMCwweDAwLDB4ZTAgfSwKKyAgMTYsIDB4YjY5MCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGUsMHgwMCwweDAzLDB4YzAsMHgwMCwweGU4LDB4MDAsMHhiZSwweDA0LDB4NGUsMHg4MCwweDA3LDB4ZDIgfSwKKyAgMTYsIDB4YjZhMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDgwLDB4YzksMHgwMCwweDNlLDB4NjggfSwKKyAgMTYsIDB4YjZiMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDQzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfSwKKyAgMTYsIDB4YjZjMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgxMywweDIwLDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwMywweDY0LDB4MDAgfSwKKyAgMTYsIDB4YjZkMCwgMCwgezB4ODEsMHgwMCwweDMyLDB4NDAsMHgwNCwweDkwLDB4MTMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjZlMCwgMCwgezB4ODAsMHgwNCwweDY1LDB4MDYsMHg4OSwweDQwLDB4MmUsMHg2MCwweDFhLDB4MTQsMHgyYSwweDA1LDB4MjAsMHg4OSwweDAwLDB4MmUgfSwKKyAgMTYsIDB4YjZmMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNCwweDA4LDB4YzEsMHgwMiwweDIwLDB4NDAsMHgwOCwweDEwLDB4MWEsMHgyNCwweDAwLDB4ODkgfSwKKyAgMTYsIDB4YjcwMCwgMCwgezB4MTAsMHgzMiwweDQxLDB4MDgsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDQsMHgzNiwweDQwLDB4ODgsMHg5NCwweDBhLDB4MjAgfSwKKyAgMTYsIDB4YjcxMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDIwLDB4ODksMHg1NSwweDJlLDB4NDAgfSwKKyAgMTYsIDB4YjcyMCwgMCwgezB4MDgsMHhkNSwweDAyLDB4MzQsMHgwMCwweDhkLDB4MDAsMHgyZSwweDQwLDB4MTgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDk5LDB4MDAgfSwKKyAgMTYsIDB4YjczMCwgMCwgezB4MjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MGEsMHg4OSwweDAwLDB4MjYsMHg0MCwweDM4LDB4OTAsMHgwYSwweDI0LDB4MDAgfSwKKyAgMTYsIDB4Yjc0MCwgMCwgezB4YTksMHgwMCwweDIwLDB4NDAsMHgwYSwweDkwLDB4ODIsMHgwNiwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjc1MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHg4MSwweDAwLDB4MmYsMHg0MCwweDBhLDB4ZDQsMHgwMiwweDM0LDB4MDAsMHg4NSwweDAxLDB4MmMgfSwKKyAgMTYsIDB4Yjc2MCwgMCwgezB4NDAsMHgwOCwweDEwLDB4NDIsMHhlNCwweDA2LDB4OTksMHgwMCwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNSwweDAwLDB4ODEgfSwKKyAgMTYsIDB4Yjc3MCwgMCwgezB4NDAsMHgyOCwweDUwLDB4MDgsMHgxNCwweDEyLDB4MDUsMHgwMCwweGExLDB4NDAsMHgyNCwweDUwLDB4NWEsMHgxMCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4Yjc4MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHgwNCwweDNlLDB4MDAgfSwKKyAgMTYsIDB4Yjc5MCwgMCwgezB4MDgsMHg4MCwweDAzLDB4MjEsMHg0MiwweGNjLDB4MDAsMHgzZSwweDAwLDB4MmMsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGQ4LDB4MDAgfSwKKyAgMTYsIDB4YjdhMCwgMCwgezB4YjYsMHgwMCwweDJjLDB4ODAsMHgwMiwweDIwLDB4MDIsMHhjOCwweDAwLDB4MzYsMHgwMCwweDBjLDB4ODAsMHgwMywweDYwLDB4MDIgfSwKKyAgMTYsIDB4YjdiMCwgMCwgezB4ZTgsMHgwMCwweDMyLDB4MDAsMHg4ZSwweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjdjMCwgMCwgezB4OTgsMHgxZCwweGY1LDB4MDAsMHhmNSwweDAwLDB4M2UsMHg0MCwweDg3LDB4OTAsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2QgfSwKKyAgMTYsIDB4YjdkMCwgMCwgezB4NTAsMHgwZiwweDU0LDB4MDMsMHhkMSwweDAwLDB4ZWMsMHg0MCwweDNmLDB4MTAsMHgwYiwweGM0LDB4NDMsMHhmMSwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YjdlMCwgMCwgezB4NDAsMHgzNiwweDUwLDB4MGYsMHg5NCwweDEzLDB4ZTUsMHgxMCwweGQ5LDB4NDQsMHgzZCwweDQwLDB4MmQsMHhkMCwweDAzLDB4ZTYgfSwKKyAgMTYsIDB4YjdmMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDYwLDB4Y2QsMHgwMiwweDNiLDB4NDAgfSwKKyAgMTYsIDB4YjgwMCwgMCwgezB4MGMsMHhkMCwweDAzLDB4YjQsMHg0MCwweGZkLDB4MDYsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4NjYsMHgwNCwweGM5LDB4ODIgfSwKKyAgMTYsIDB4YjgxMCwgMCwgezB4YjYsMHg2MiwweDBmLDB4MTgsMHgwYiwweDM2LDB4MDAsMHhjZCwweDQwLDB4MzIsMHg2MSwweDBjLDB4OTAsMHgyMywweDI0LDB4MGEgfSwKKyAgMTYsIDB4YjgyMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHg0YywweGQwLDB4NDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjgzMCwgMCwgezB4MzksMHgxMCwweGUzLDB4ODAsMHhkOCwweDAwLDB4MjIsMHgwMCwweDBkLDB4ODAsMHgwMiwweDIyLDB4OTQsMHhiOCwweDAwLDB4MmUgfSwKKyAgMTYsIDB4Yjg0MCwgMCwgezB4MDAsMHgwZCwweDgwLDB4MDMsMHgyMSwweDAwLDB4ODgsMHg0MCwweDIyLDB4MDAsMHgwYiwweGM0LDB4MjIsMHgyMSwweDUwLDB4ODggfSwKKyAgMTYsIDB4Yjg1MCwgMCwgezB4ODAsMHgyMiwweDIyLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgxMCwweDgwLDB4MDEsMHgyYSwweDAwLDB4MGEsMHg4MCwweDAzLDB4NGUgfSwKKyAgMTYsIDB4Yjg2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhjNiwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAgfSwKKyAgMTYsIDB4Yjg3MCwgMCwgezB4ODgsMHgxMCwweDBhLDB4ODQsMHgwOCwweGIxLDB4MDAsMHgyOSwweDQwLDB4MGEsMHg3MCwweDBhLDB4YjUsMHgwMCwweDhmLDB4NDAgfSwKKyAgMTYsIDB4Yjg4MCwgMCwgezB4MjksMHhjMCwweDBiLDB4ZjQsMHgwMiwweDI0LDB4MDAsMHg4MSwweDIwLDB4MjgsMHg0NCwweDg5LDB4MTAsMHgwMiwweDA0LDB4MDQgfSwKKyAgMTYsIDB4Yjg5MCwgMCwgezB4ODEsMHgwMiwweDJhLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwMiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjhhMCwgMCwgezB4MTgsMHgxNSwweGE2LDB4MDAsMHg5OSwweDIwLDB4MjIsMHg0MCwweDA5LDB4OTAsMHgxMiwweDI0LDB4ODAsMHhiOSwweDAwLDB4MmYgfSwKKyAgMTYsIDB4YjhiMCwgMCwgezB4NDQsMHgwMywweGQwLDB4MDIsMHhmNCwweDAwLDB4OGQsMHgwMCwweDJiLDB4NDEsMHgwYiwweGQwLDB4MDIsMHgyNiwweDEwLDB4ODkgfSwKKyAgMTYsIDB4YjhjMCwgMCwgezB4MDQsMHgyYSwweDQwLDB4MDksMHg5MCwweDZlLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5NCwweDAyLDB4NDYgfSwKKyAgMTYsIDB4YjhkMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4MTUsMHhlNiwweDAwLDB4YzksMHgwMCwweDM4LDB4NDIgfSwKKyAgMTYsIDB4YjhlMCwgMCwgezB4MGMsMHgxMCwweDEzLDB4YTYsMHgwNCwweDc5LDB4MDgsMHgzYSwweDc4LDB4MDYsMHg5MiwweDAzLDB4YTQsMHgwOCwweGM5LDB4MDAgfSwKKyAgMTYsIDB4YjhmMCwgMCwgezB4M2EsMHg2MCwweDhmLDB4OTgsMHgyMywweDA2LDB4MDIsMHhjOSwweDAyLDB4M2EsMHg0MCwweDBkLDB4OTAsMHgwMywweDA0LDB4MDAgfSwKKyAgMTYsIDB4YjkwMCwgMCwgezB4YzksMHgwMCwweDM4LDB4NDAsMHgwYywweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjkxMCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MTAsMHhmOSwweDgwLDB4YmUsMHg0MCwweDRmLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhmOSwweDAwLDB4M2MgfSwKKyAgMTYsIDB4YjkyMCwgMCwgezB4NjAsMHg4ZCwweDkyLDB4MDMsMHgyNCwweDQyLDB4ZTksMHgxMCwweDMyLDB4NTAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZjkgfSwKKyAgMTYsIDB4YjkzMCwgMCwgezB4MDAsMHhiNiwweDQxLDB4MmUsMHgxMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgyZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4Yjk0MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA4LDB4YzgsMHgwMCwweDNlLDB4MTAgfSwKKyAgMTYsIDB4Yjk1MCwgMCwgezB4MGYsMHg4OCwweDAzLDB4MjAsMHgwOCwweGY4LDB4YzAsMHgxZSwweDEwLDB4MmMsMHg0MCwweDAzLDB4ZjIsMHgwMCwweGNjLDB4MDAgfSwKKyAgMTYsIDB4Yjk2MCwgMCwgezB4M2YsMHgwMCwweDBjLDB4YzAsMHgxMywweDIwLDB4MDIsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4ODAsMHgyYiwweDIwLDB4MTAgfSwKKyAgMTYsIDB4Yjk3MCwgMCwgezB4YzAsMHgwNCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yjk4MCwgMCwgezB4YTgsMHgwNSwweDNhLDB4ODAsMHg4NiwweGUwLDB4MmYsMHhhMCwweDFiLDB4ZTAsMHgwMiwweDNhLDB4ODAsMHhiYSwweDA0LDB4MmUgfSwKKyAgMTYsIDB4Yjk5MCwgMCwgezB4ODAsMHgwOCwweGEwLDB4MDMsMHg4OCwweDA4LDB4YzIsMHgwMCwweDJlLDB4ODEsMHgwOCwweDYwLDB4MDIsMHgyOCwweDEwLDB4OGUgfSwKKyAgMTYsIDB4YjlhMCwgMCwgezB4ODEsMHgwMywweDgwLDB4MDgsMHhlMCwweDAxLDB4NzgsMHgwMCwweDhlLDB4MDQsMHgwMywweDgwLDB4MDksMHg2OCwweDAzLDB4Y2EgfSwKKyAgMTYsIDB4YjliMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODMsMHg2MCwweDJjLDB4NDQgfSwKKyAgMTYsIDB4YjljMCwgMCwgezB4MGIsMHgzOCwweDAyLDB4MGYsMHg4MCwweGIxLDB4MDAsMHgyYywweGU1LDB4MDMsMHgzMCwweDEwLDB4Y2MsMHgxMCwweDgzLDB4MDAgfSwKKyAgMTYsIDB4YjlkMCwgMCwgezB4MGMsMHhjMCwweDI5LDB4MzAsMHgyMiwweDA0LDB4MDksMHg5MSwweDEwLDB4MjQsMHhjMCwweGM4LDB4MzAsMHgwMCwweDRjLDB4MDQgfSwKKyAgMTYsIDB4YjllMCwgMCwgezB4OTMsMHgwMiwweDI0LDB4YzAsMHgwYiwweDMxLDB4MDIsMHgwYSwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YjlmMCwgMCwgezB4ZTAsMHgwMSwweDE4LDB4ODAsMHg4NywweDAwLDB4MmQsMHg0MCwweDBiLDB4NzQsMHg0MiwweDFjLDB4MDEsMHhiNSwweDAxLDB4MmMgfSwKKyAgMTYsIDB4YmEwMCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MDIsMHhiMCwweDAwLDB4OTQsMHgwNCwweDJmLDB4MjAsMHgwOSwweGMwLDB4MDIsMHgxNCwweDkwLDB4OTcgfSwKKyAgMTYsIDB4YmExMCwgMCwgezB4MDAsMHgyNSwweGM4LDB4MDgsMHg3MCwweDAyLDB4NGMsMHg4MCwweDk3LDB4MjAsMHgyNSwweGMwLDB4MDksMHg3MCwweDAyLDB4ZTggfSwKKyAgMTYsIDB4YmEyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzYSwweDgyLDB4YzYsMHg4MCwweDJkLDB4NjAgfSwKKyAgMTYsIDB4YmEzMCwgMCwgezB4MGIsMHhmOCwweDBiLDB4MWEsMHgwMCwweGY1LDB4ODAsMHgzZCwweGUwLDB4OGYsMHg3OCwweDAzLDB4ZGUsMHgwMiwweGM3LDB4ODAgfSwKKyAgMTYsIDB4YmE0MCwgMCwgezB4MmQsMHhlMCwweDBkLDB4NzgsMHgwYiwweDE3LDB4MDIsMHhkZiwweDgwLDB4MjQsMHhmOCwweDJjLDB4ZmQsMHgwMywweDVlLDB4MGMgfSwKKyAgMTYsIDB4YmE1MCwgMCwgezB4ZDcsMHhlMCwweDM1LDB4ZTAsMHgwZiwweDY4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmE2MCwgMCwgezB4NDgsMHgxZCwweGFlLDB4NDAsMHhmYSwweDA0LDB4M2UsMHg0MCwweDBmLDB4ODAsMHgxMywweGVjLDB4MDQsMHhmOSwweDAwLDB4M2UgfSwKKyAgMTYsIDB4YmE3MCwgMCwgezB4YzEsMHgwYywweGEwLDB4MTMsMHhjMCwweDEwLDB4ZTgsMHgwMCwweDNjLDB4MDAsMHg0ZSwweDgwLDB4NDMsMHhjNCwweDIwLDB4ODkgfSwKKyAgMTYsIDB4YmE4MCwgMCwgezB4MDAsMHhiYSwweGMwLDB4MDcsMHhiNiwweDIxLDB4ZWQsMHgwNiwweGViLDB4NjgsMHhiYSwweGNjLDB4MGYsMHgyMCwweDEzLDB4YzIgfSwKKyAgMTYsIDB4YmE5MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhiZSwweDAwLDB4YzYsMHg4MCwweDMxLDB4NjAgfSwKKyAgMTYsIDB4YmFhMCwgMCwgezB4MmQsMHg3OCwweDBiLDB4M2UsMHg0OCwweGVjLDB4OTIsMHgzZCwweDYwLDB4MGMsMHg1OCwweDAzLDB4NWEsMHg0MCwweGQ1LDB4ODAgfSwKKyAgMTYsIDB4YmFiMCwgMCwgezB4MzEsMHg2MSwweDBjLDB4NTgsMHgyMywweDM2LDB4MDAsMHhjZiwweDgyLDB4M2YsMHhlMCwweDBjLDB4ZjgsMHgwMywweGZmLDB4NjAgfSwKKyAgMTYsIDB4YmFjMCwgMCwgezB4Y2YsMHg5MCwweDMzLDB4ZjAsMHgwYywweDUyLDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmFkMCwgMCwgezB4YTgsMHgxMSwweGI4LDB4ODQsMHg4NiwweDE0LDB4YjUsMHhjMCwweDA4LDB4NzAsMHgwMiwweDFlLDB4YzAsMHhjNCwweDAwLDB4MmQgfSwKKyAgMTYsIDB4YmFlMCwgMCwgezB4NDAsMHgwOCwweDQwLDB4MDIsMHgxNCwweGQwLDB4ODYsMHgxMCwweDIxLDB4ODAsMHg0YywweDYyLDB4NDIsMHgzNCwweDQwLDB4YTUgfSwKKyAgMTYsIDB4YmFmMCwgMCwgezB4MDAsMHgzNSwweGMwLDB4MjgsMHg3MCwweDQyLDB4ZGMsMHhjMiwweDhmLDB4MzAsMHgyMywweGMwLDB4MDgsMHg1MCwweDAyLDB4MmEgfSwKKyAgMTYsIDB4YmIwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg5OCwweDI4LDB4OGUsMHgwMCwweGE1LDB4NDAgfSwKKyAgMTYsIDB4YmIxMCwgMCwgezB4MDgsMHhmMSwweDAyLDB4MTgsMHg2NCwweGI0LDB4MDAsMHg2ZCwweDQyLDB4MDgsMHg1MCwweDAyLDB4MTgsMHgwMSwweDg1LDB4MDggfSwKKyAgMTYsIDB4YmIyMCwgMCwgezB4MjEsMHg0MCwweDA5LDB4NTgsMHgyMiwweDU0LDB4MDAsMHg4NSwweDEwLDB4MmQsMHhjNCwweDA5LDB4NzAsMHgwMiwweGRjLDB4MDQgfSwKKyAgMTYsIDB4YmIzMCwgMCwgezB4OTcsMHgwMCwweDI1LDB4YzAsMHgwOCwweDQ0LDB4MDIsMHgwMCwweDEwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmI0MCwgMCwgezB4NjAsMHgxNCwweDhjLDB4MDAsMHg4MiwweDgwLDB4MjQsMHhjMCwweDA4LDB4ODAsMHgwMiwweDJkLDB4MDAsMHg4MCwweDRhLDB4MmMgfSwKKyAgMTYsIDB4YmI1MCwgMCwgezB4NDIsMHgwOCwweDBhLDB4NDIsMHgwNiwweDAwLDB4OTIsMHg4NCwweDIwLDB4YTAsMHg4OCwweDI4LDB4NDIsMHg0NCwweDAwLDB4YTMgfSwKKyAgMTYsIDB4YmI2MCwgMCwgezB4MDYsMHgyNCwweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgxMCwweDkzLDB4MDQsMHgyNCwweGMxLDB4MDksMHgwMCwweDAyLDB4MDggfSwKKyAgMTYsIDB4YmI3MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4Y2IsMHgwMCwweDM2LDB4NDAgfSwKKyAgMTYsIDB4YmI4MCwgMCwgezB4MGMsMHhiNCwweDEzLDB4MmMsMHgwMCwweGY5LDB4MDAsMHgzZSwweGEwLDB4MGMsMHhhMiwweDAzLDB4MDQsMHgwOCwweGMyLDB4ODAgfSwKKyAgMTYsIDB4YmI5MCwgMCwgezB4MzAsMHhhOCwweDBkLDB4MmEsMHgwMywweDU0LDB4MDAsMHhjYiwweDAwLDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDggfSwKKyAgMTYsIDB4YmJhMCwgMCwgezB4ZGYsMHgwMCwweDM3LDB4ZDAsMHgwYywweGIwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmJiMCwgMCwgezB4ODAsMHgwMCwweGUwLDB4MDAsMHhmYiwweDEwLDB4M2EsMHg0MCwweDBlLDB4YjAsMHgwMywweGVkLDB4OTAsMHhmOSwweDExLDB4N2UgfSwKKyAgMTYsIDB4YmJjMCwgMCwgezB4ODAsMHg0ZiwweGIwLDB4NTMsMHhlOCwweDQwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhNiwweDA4LDB4ZjkgfSwKKyAgMTYsIDB4YmJkMCwgMCwgezB4MDEsMHgzYSwweGMwLDB4MGMsMHhiMCwweDEzLDB4Y2MsMHgwMCwweGViLDB4MDIsMHgzYSwweGM2LDB4OGUsMHhiOCwweDAzLDB4ZTAgfSwKKyAgMTYsIDB4YmJlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDBjLDB4Y2UsMHgwMCwweDNmLDB4ZTAgfSwKKyAgMTYsIDB4YmJmMCwgMCwgezB4MmMsMHhmMCwweDgzLDB4M2EsMHg0OCwweGNkLDB4MDEsMHgzNSwweDgwLDB4MGMsMHg2MCwweDEyLDB4MzQsMHgwYSwweGNlLDB4MDAgfSwKKyAgMTYsIDB4YmMwMCwgMCwgezB4YjMsMHg4MCwweDJjLDB4ZTAsMHgwYiwweDc0LDB4MDAsMHhjOSwweDEwLDB4YjMsMHhjMSwweDBmLDB4ZjAsMHgxYiwweDNjLDB4MDAgfSwKKyAgMTYsIDB4YmMxMCwgMCwgezB4Y2YsMHgwMCwweGI3LDB4YzAsMHgyYywweGUwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmMyMCwgMCwgezB4ODEsMHgwNCwweDZlLDB4MTAsMHg4OCwweDgwLDB4MmMsMHhjMCwweDE4LDB4OTgsMHgwMiwweDJkLDB4ODAsMHg4MSwweDAwLDB4MzYgfSwKKyAgMTYsIDB4YmMzMCwgMCwgezB4OTEsMHgwOCwweGIwLDB4MDMsMHg2OCwweDAwLDB4YzksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODMgfSwKKyAgMTYsIDB4YmM0MCwgMCwgezB4ODAsMHgzNiwweGMwLDB4MGIsMHgzMCwweDAyLDB4MmMsMHgwMiwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgyMCwweDAzLDB4NjAgfSwKKyAgMTYsIDB4YmM1MCwgMCwgezB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgwNiwweDAwLDB4OGEsMHg4MCwweDJlLDB4NDUgfSwKKyAgMTYsIDB4YmM2MCwgMCwgezB4MjgsMHg4OCwweDAyLDB4MjQsMHgwMiwweDg4LDB4MDIsMHgwMiwweDAyLDB4MDgsMHg4MCwweDAyLDB4YTIsMHgwMCwweDk4LDB4MDAgfSwKKyAgMTYsIDB4YmM3MCwgMCwgezB4MjIsMHgwMCwweDA4LDB4ODAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDAxLDB4MjIsMHhjMSwweDBhLDB4YjAsMHgwMiwweDZjLDB4MDAgfSwKKyAgMTYsIDB4YmM4MCwgMCwgezB4YWIsMHgwMCwweDIyLDB4YzEsMHgwOCwweDkwLDB4MTIsMHg2MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmM5MCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MmMsMHhjMCwweDQ4LDB4MDgsMHgxMiwweDAwLDB4ODAsMHg4MCwweDAyLDB4MjQgfSwKKyAgMTYsIDB4YmNhMCwgMCwgezB4MDAsMHgwOCwweDE4LDB4NDIsMHhhYywweDAyLDB4OGIsMHg4MCwweDIyLDB4ZTAsMHgwOCwweGI4LDB4MTIsMHgwNCwweDAyLDB4ODMgfSwKKyAgMTYsIDB4YmNiMCwgMCwgezB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDQyLDB4MGMsMHgwMCwweGEzLDB4MDEsMHg2MCwweGMwLDB4NDgsMHgxMCwweDAyLDB4NDIgfSwKKyAgMTYsIDB4YmNjMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2OCwweDA4LDB4Y2EsMHgwMCwweDJlLDB4NDAgfSwKKyAgMTYsIDB4YmNkMCwgMCwgezB4MDgsMHg4MCwweDAzLDB4MDAsMHgwMCwweGM4LDB4MDYsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAyLDB4YTAsMHgwMCwweGQ4LDB4MDAgfSwKKyAgMTYsIDB4YmNlMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDc0LDB4MDAsMHhjYiwweDAwLDB4MjIsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDAgfSwKKyAgMTYsIDB4YmNmMCwgMCwgezB4ZWYsMHgwMCwweDM3LDB4YzAsMHgwYywweDgwLDB4MDEsMHg0MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmQwMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmYywweDA0LDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGUxLDB4MDAsMHhmYywweDAwLDB4M2IgfSwKKyAgMTYsIDB4YmQxMCwgMCwgezB4MDAsMHgwZiwweGQwLDB4MDMsMHg3YywweDAwLDB4ZWYsMHgwMCwweDJmLDB4YzAsMHgwZiwweGYwLDB4MTEsMHhmNCwweDEwLDB4ZmQgfSwKKyAgMTYsIDB4YmQyMCwgMCwgezB4MDIsMHgzZCwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGRmLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhjMCwweDQzLDB4ZTkgfSwKKyAgMTYsIDB4YmQzMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MSwweDAyLDB4NzAsMHgyMCwweGRjLDB4MTAgfSwKKyAgMTYsIDB4YmQ0MCwgMCwgezB4NjcsMHgwNCwweDBkLDB4YzEsMHgwMiwweDcwLDB4MjAsMHg5YywweDEwLDB4MzcsMHgwNCwweDBkLDB4YzEsMHgwNiwweDcwLDB4NDAgfSwKKyAgMTYsIDB4YmQ1MCwgMCwgezB4NGMsMHgxMCwweDM3LDB4MTQsMHgxNSwweGMxLDB4MDMsMHg3MCwweDQwLDB4ZGMsMHgxMCwweDEzLDB4MDQsMHgwZCwweGMxLDB4MDcgfSwKKyAgMTYsIDB4YmQ2MCwgMCwgezB4NzAsMHg0MCwweGRjLDB4MTAsMHgzNywweDA0LDB4MGQsMHhjMCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmQ3MCwgMCwgezB4MDAsMHhjNSwweDQ0LDB4MDUsMHg3MSwweDIxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDUsMHg3MSwweDA1LDB4NWMgfSwKKyAgMTYsIDB4YmQ4MCwgMCwgezB4NDAsMHg1NywweDEwLDB4MTUsMHhjNCwweDA2LDB4NzEsMHgwMSwweDRjLDB4NDAsMHg1NywweDEwLDB4MGQsMHhjNCwweDA1LDB4NzEgfSwKKyAgMTYsIDB4YmQ5MCwgMCwgezB4MDUsMHg1YywweDQwLDB4NTMsMHgxMCwweDE1LDB4YzQsMHgwNywweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzAgfSwKKyAgMTYsIDB4YmRhMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSwKKyAgMTYsIDB4YmRiMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSwKKyAgMTYsIDB4YmRjMCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEgfSwKKyAgMTYsIDB4YmRkMCwgMCwgezB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmRlMCwgMCwgezB4MDAsMHg4NCwweDAwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCwweDA0LDB4NTggfSwKKyAgMTYsIDB4YmRmMCwgMCwgezB4MDAsMHgxNiwweDAwLDB4MDUsMHg4MCwweDAxLDB4MjAsMHgwMSwweDU4LDB4MDAsMHgxNiwweDAwLDB4MDUsMHg4MCwweDAxLDB4NjAgfSwKKyAgMTYsIDB4YmUwMCwgMCwgezB4MDAsMHg1OCwweDAwLDB4NTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4MTYsMHgwMCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4YmUxMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA1LDB4NzIsMHgxMSwweDVjLDB4ODAgfSwKKyAgMTYsIDB4YmUyMCwgMCwgezB4MTcsMHgyMCwweDE1LDB4ZDgsMHgwNSwweDMyLDB4MTEsMHgxYywweDgwLDB4NDcsMHgyMCwweDE0LDB4ODgsMHgwMCwweDcyLDB4MDEgfSwKKyAgMTYsIDB4YmUzMCwgMCwgezB4MWMsMHg4MCwweDU3LDB4MjAsMHgwNSwweGM4LDB4MDQsMHg3MiwweDAxLDB4NWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDEgfSwKKyAgMTYsIDB4YmU0MCwgMCwgezB4NzIsMHgwMSwweDVjLDB4ODAsMHg1NywweDI0LDB4MTUsMHhjMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmU1MCwgMCwgezB4MDAsMHhjMSwweDQwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4NDAsMHgyMCwweDAwLDB4MTggfSwKKyAgMTYsIDB4YmU2MCwgMCwgezB4MDAsMHgwNiwweDAwLDB4MDEsMHg5MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4NDEsMHg4MCwweDAwLDB4NjAgfSwKKyAgMTYsIDB4YmU3MCwgMCwgezB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDEwLDB4MDYsMHgwMCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4YmU4MCwgMCwgezB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfSwKKyAgMTYsIDB4YmU5MCwgMCwgezB4MDIsMHgyMCwweDEwLDB4ODgsMHgwNCwweDYyLDB4MDEsMHgwOCwweDgwLDB4NDIsMHgyMCwweDEwLDB4ODgsMHgwMCwweDIwLDB4MDEgfSwKKyAgMTYsIDB4YmVhMCwgMCwgezB4MDgsMHg4MCwweDQyLDB4MjAsMHgwMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHgwMCwweDQyLDB4MjAsMHgxMCwweDg4LDB4MDAgfSwKKyAgMTYsIDB4YmViMCwgMCwgezB4MjIsMHgwMSwweDA4LDB4ODAsMHg0MiwweDMwLDB4MTAsMHg4MCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmVjMCwgMCwgezB4MDAsMHhjNSwweDRhLDB4MDUsMHg0MiwweDgxLDB4NTAsMHhhMCwweDA0LDB4MjgsMHgxNSwweDBhLDB4MDUsMHg1MiwweDgxLDB4MTAgfSwKKyAgMTYsIDB4YmVkMCwgMCwgezB4YTAsMHg0NCwweDI4LDB4MTEsMHgxYSwweDAwLDB4NDAsMHg4MCwweDEwLDB4YTAsMHg1NCwweDI4LDB4MDUsMHgwYSwweDA1LDB4NDIgfSwKKyAgMTYsIDB4YmVlMCwgMCwgezB4ODEsMHg1MSwweDIwLDB4MTQsMHgyOCwweDE1LDB4MGEsMHgwMSwweDQyLDB4ODEsMHg1MCwweGEwLDB4NTQsMHgyOCwweDE1LDB4MDAgfSwKKyAgMTYsIDB4YmVmMCwgMCwgezB4MzEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwYywweDAxLDB4NTMsMHg0MCwweDU0LDB4YzAgfSwKKyAgMTYsIDB4YmYwMCwgMCwgezB4MTUsMHgzMCwweDA1LDB4NWMsMHgwMSwweDU3LDB4NDAsMHg1NCwweGMwLDB4MTUsMHgzMCwweDA1LDB4NWMsMHgwMSwweDUzLDB4MDAgfSwKKyAgMTYsIDB4YmYxMCwgMCwgezB4NTUsMHhjMCwweDE1LDB4NzQsMHgwNSwweDRjLDB4MDEsMHg1MywweDAwLDB4NTUsMHhjMCwweDE1LDB4NzQsMHgwNSwweDRjLDB4MDEgfSwKKyAgMTYsIDB4YmYyMCwgMCwgezB4NTMsMHgwMCwweDU0LDB4YzAsMHgxMSwweDMwLDB4MDEsMHg0MCwweDIxLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmYzMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAgfSwKKyAgMTYsIDB4YmY0MCwgMCwgezB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MTEsMHgwMCwweDAwLDB4NDAgfSwKKyAgMTYsIDB4YmY1MCwgMCwgezB4MDAsMHgxMCwweGMxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDEsMHgxMCwweDAxLDB4MDEgfSwKKyAgMTYsIDB4YmY2MCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg2MCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAgfSwKKyAgMTYsIDB4YmY3MCwgMCwgezB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAgfSwKKyAgMTYsIDB4YmY4MCwgMCwgezB4ODIsMHgwMCwweDIwLDB4ODQsMHgwMCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODQsMHgwOCwweDIwLDB4MDIgfSwKKyAgMTYsIDB4YmY5MCwgMCwgezB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMSwweDgwLDB4MDgsMHgwMSwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YmZhMCwgMCwgezB4MDAsMHhjNSwweDQwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDk2LDB4MDAsMHgxNSwweDkwLDB4MDUsMHg2NCwweDAyLDB4NTggfSwKKyAgMTYsIDB4YmZiMCwgMCwgezB4MDAsMHg1NiwweDAwLDB4NTUsMHg5MCwweDA1LDB4NjAsMHgwMSwweGQ5LDB4MDAsMHgxNiwweDQwLDB4MTUsMHg4MCwweDA1LDB4NjAgfSwKKyAgMTYsIDB4YmZjMCwgMCwgezB4MDEsMHg1OSwweDAwLDB4NzYsMHg0MCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAgfSwKKyAgMTYsIDB4YmZkMCwgMCwgezB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzQsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfSwKKyAgMTYsIDB4YmZlMCwgMCwgezB4MzYsMHgwMCwweDRkLDB4ODAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNywweDYyLDB4MDAgfSwKKyAgMTYsIDB4YmZmMCwgMCwgezB4NTgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDcsMHg2MCwweDAwLDB4ZDgsMHg4MCwweDE2LDB4MDAsMHgwZCwweDgwLDB4MDMgfSwKKyAgMTYsIDB4YzAwMCwgMCwgezB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MWQsMHg4MCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzAxMCwgMCwgezB4MDAsMHhjNSwweDQyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMgfSwKKyAgMTYsIDB4YzAyMCwgMCwgezB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHhjMSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA2LDB4MzAgfSwKKyAgMTYsIDB4YzAzMCwgMCwgezB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDE4LDB4YzAgfSwKKyAgMTYsIDB4YzA0MCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSwKKyAgMTYsIDB4YzA1MCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHg0MCwweDMwLDB4MDAgfSwKKyAgMTYsIDB4YzA2MCwgMCwgezB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAgfSwKKyAgMTYsIDB4YzA3MCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzA4MCwgMCwgezB4MDAsMHg4MCwweDAyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMgfSwKKyAgMTYsIDB4YzA5MCwgMCwgezB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDI1LDB4MzAsMHg4MSwweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAgfSwKKyAgMTYsIDB4YzBhMCwgMCwgezB4ODAsMHg0YywweDMyLDB4NTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzAgfSwKKyAgMTYsIDB4YzBiMCwgMCwgezB4MjAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA1LDB4NjIsMHg4MSwweDU4LDB4MjAgfSwKKyAgMTYsIDB4YzBjMCwgMCwgezB4NTYsMHgwOCwweDE1LDB4ODIsMHgwNCwweDYwLDB4ODEsMHg1OCwweDIwLDB4NDYsMHgwOCwweDE1LDB4ODIsMHgwMSwweDYwLDB4YzEgfSwKKyAgMTYsIDB4YzBkMCwgMCwgezB4NTgsMHgyMCwweDQ2LDB4MDgsMHgxNSwweDgyLDB4MDEsMHg2MCwweDgxLDB4NTgsMHgzMCwweDU2LDB4MDgsMHgxNSwweDgyLDB4MDUgfSwKKyAgMTYsIDB4YzBlMCwgMCwgezB4NjAsMHg4MSwweDU4LDB4MjAsMHg1NiwweDA4LDB4MDUsMHg4MCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzBmMCwgMCwgezB4MDAsMHhjNSwweDQyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDggfSwKKyAgMTYsIDB4YzEwMCwgMCwgezB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDBjLDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YzExMCwgMCwgezB4ODAsMHgwOCwweDIwLDB4MDMsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODAgfSwKKyAgMTYsIDB4YzEyMCwgMCwgezB4MjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA0LDB4NjYsMHg4MSwweDE4LDB4MjAgfSwKKyAgMTYsIDB4YzEzMCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDY0LDB4ODEsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4ODEgfSwKKyAgMTYsIDB4YzE0MCwgMCwgezB4MGMsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweDgxLDB4MTksMHgyMCwweDQzLDB4MDgsMHgxMSwweDgyLDB4MDQgfSwKKyAgMTYsIDB4YzE1MCwgMCwgezB4NjAsMHg4MSwweDE5LDB4MjAsMHg0NiwweDQ4LDB4MDEsMHg4MCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzE2MCwgMCwgezB4MDAsMHhjNSwweDYwLDB4MDUsMHg1OCwweDAxLDB4NTYsMHgwMCwweDU1LDB4ODAsMHgxNSwweDYwLDB4MDQsMHg1OCwweDAxLDB4NTYgfSwKKyAgMTYsIDB4YzE3MCwgMCwgezB4MDAsMHg0NSwweDgwLDB4MTEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDA2LDB4MDAsMHg0NSwweDgwLDB4MTUsMHg2MCwweDAxLDB4NTggfSwKKyAgMTYsIDB4YzE4MCwgMCwgezB4MDEsMHgxNiwweDAwLDB4MDEsMHg4MCwweDE1LDB4NjAsMHgwNSwweDU4LDB4MDEsMHg1NiwweDAwLDB4NTUsMHg4MCwweDA1LDB4NDAgfSwKKyAgMTYsIDB4YzE5MCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNiwweDAxLDB4NDksMHg4MCwweDEwLDB4NjAgfSwKKyAgMTYsIDB4YzFhMCwgMCwgezB4MTQsMHgxOCwweDA1LDB4MDYsMHgwMSwweDc5LDB4ODAsMHg1MCwweDYwLDB4MTQsMHgxOCwweDAxLDB4MDYsMHgwMSwweDQxLDB4ODAgfSwKKyAgMTYsIDB4YzFiMCwgMCwgezB4NTAsMHg2MCwweDA0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg0MSwweDgwLDB4MTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEgfSwKKyAgMTYsIDB4YzFjMCwgMCwgezB4NDEsMHg4MCwweDUwLDB4NjAsMHgxNCwweDE4LDB4MDUsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzFkMCwgMCwgezB4MDAsMHg4MCwweDAyLDB4MDEsMHgwNCwweDgwLDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDAsMHgwNCwweDA0LDB4NDAgfSwKKyAgMTYsIDB4YzFlMCwgMCwgezB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAsMHg4NCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAgfSwKKyAgMTYsIDB4YzFmMCwgMCwgezB4ODAsMHg0MSwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgxMSwweDAwLDB4ODAsMHg0MSwweDIwLDB4MTAsMHg0OCwweDA0LDB4MDAgfSwKKyAgMTYsIDB4YzIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAgfSwKKyAgMTYsIDB4YzIxMCwgMCwgezB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMiwweDExLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDExLDB4ODAgfSwKKyAgMTYsIDB4YzIyMCwgMCwgezB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMgfSwKKyAgMTYsIDB4YzIzMCwgMCwgezB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0MCwweDMxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzI0MCwgMCwgezB4MDAsMHhjNSwweDQ2LDB4MDUsMHg3MCwweDgxLDB4NWMsMHg2MCwweDA3LDB4MTgsMHgxNSwweGM2LDB4MDQsMHg3MSwweDgxLDB4MWMgfSwKKyAgMTYsIDB4YzI1MCwgMCwgezB4NjAsMHgxNywweDE4LDB4MTUsMHhjNiwweDA1LDB4MzEsMHg4MSwweGRjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEgfSwKKyAgMTYsIDB4YzI2MCwgMCwgezB4ODAsMHgxYywweDYwLDB4NzcsMHgxOCwweDE1LDB4Y2UsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzAgfSwKKyAgMTYsIDB4YzI3MCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg0NiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjEgfSwKKyAgMTYsIDB4YzI4MCwgMCwgezB4NzcsMHgxOCwweDBkLDB4YzYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwLDB4MzcsMHgxOCwweDBkLDB4YzIsMHgwMywweDMxLDB4ODAgfSwKKyAgMTYsIDB4YzI5MCwgMCwgezB4NWMsMHg2MCwweDI3LDB4MTgsMHgwZCwweGM2LDB4MDMsMHg3MSwweDgwLDB4OWMsMHg2MCwweDE3LDB4MTgsMHgwZCwweGNlLDB4MDMgfSwKKyAgMTYsIDB4YzJhMCwgMCwgezB4NzEsMHg4MCwweGRjLDB4NjAsMHgzNywweDE4LDB4MGQsMHhjMCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzJiMCwgMCwgezB4MDAsMHg0NSwweDQ2LDB4MDUsMHg3NSwweDgxLDB4NWMsMHg2MCwweDc3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3NSwweDgxLDB4NWMgfSwKKyAgMTYsIDB4YzJjMCwgMCwgezB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4MzEsMHg4MSwweDBjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEgfSwKKyAgMTYsIDB4YzJkMCwgMCwgezB4ODEsMHg1YywweDYwLDB4NDMsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzAgfSwKKyAgMTYsIDB4YzJlMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSwKKyAgMTYsIDB4YzJmMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSwKKyAgMTYsIDB4YzMwMCwgMCwgezB4NWMsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgwMCwweDE3LDB4MDgsMHgwNCwweDgyLDB4MDEgfSwKKyAgMTYsIDB4YzMxMCwgMCwgezB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzMyMCwgMCwgezB4MDAsMHgwMCwweDA2LDB4MDEsMHg2MywweDgwLDB4NTgsMHg2MCwweDE2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSwweDgwLDB4NTggfSwKKyAgMTYsIDB4YzMzMCwgMCwgezB4NjAsMHgxNiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEsMHg4MSwweDU4LDB4NjAsMHgxNiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEgfSwKKyAgMTYsIDB4YzM0MCwgMCwgezB4ODAsMHg1OCwweDYwLDB4NTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxLDB4ODAsMHg1OCwweDYwLDB4MTYsMHgxOCwweDA1LDB4ODAgfSwKKyAgMTYsIDB4YzM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MCwweDA1LDB4NzAsMHgwMSwweDVjLDB4MDAgfSwKKyAgMTYsIDB4YzM2MCwgMCwgezB4MTcsMHgwMCwweDE1LDB4YzAsMHg4NSwweDc0LDB4MDEsMHgxYywweDAwLDB4NDcsMHgwMCwweDExLDB4YzAsMHgwNSwweDcwLDB4MDEgfSwKKyAgMTYsIDB4YzM3MCwgMCwgezB4NWMsMHgwMCwweDUzLDB4MDAsMHgxMCwweGMwLDB4MDUsMHg3MCwweDAxLDB4NWMsMHgwMCwweDU3LDB4MDAsMHgxNCwweGM5LDB4MDQgfSwKKyAgMTYsIDB4YzM4MCwgMCwgezB4NzAsMHgwMSwweDFjLDB4MDAsMHg1NywweDAwLDB4MTUsMHhjMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzM5MCwgMCwgezB4MDAsMHg0NSwweDQyLDB4MDAsMHg2MCwweGMwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTggfSwKKyAgMTYsIDB4YzNhMCwgMCwgezB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4MjAsMHg4MCwweDE4LDB4MzAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDEwLDB4NjAgfSwKKyAgMTYsIDB4YzNiMCwgMCwgezB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAwLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4YzNjMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfSwKKyAgMTYsIDB4YzNkMCwgMCwgezB4MDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEgfSwKKyAgMTYsIDB4YzNlMCwgMCwgezB4MDgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQgfSwKKyAgMTYsIDB4YzNmMCwgMCwgezB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzQwMCwgMCwgezB4MDAsMHg0NSwweDQyLDB4MDUsMHg0MCwweGM1LDB4NTAsMHgyMCwweDE0LDB4MDgsMHgxNSwweDAwLDB4MDQsMHg0MCwweDgxLDB4NTAgfSwKKyAgMTYsIDB4YzQxMCwgMCwgezB4MjAsMHg1NCwweDA4LDB4MTEsMHgwMiwweDA1LDB4MDAsMHg4MCwweDEwLDB4MjAsMHg0NSwweDBjLDB4MTEsMHg0MiwweDA0LDB4NDAgfSwKKyAgMTYsIDB4YzQyMCwgMCwgezB4ODEsMHg1MCwweDIwLDB4MTQsMHgwYywweDE1LDB4NDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4NTQsMHgwOCwweDE1LDB4MDAgfSwKKyAgMTYsIDB4YzQzMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMywweDAxLDB4NTAsMHhjMCwweDQ0LDB4MzAgfSwKKyAgMTYsIDB4YzQ0MCwgMCwgezB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSwweDUwLDB4YzAsMHg0YywweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgyMSwweDUwLDB4YzAgfSwKKyAgMTYsIDB4YzQ1MCwgMCwgezB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEsMHg1MCwweGMwLDB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEgfSwKKyAgMTYsIDB4YzQ2MCwgMCwgezB4NTAsMHhjMCwweDU0LDB4MjAsMHgxNSwweDBjLDB4MDUsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzQ3MCwgMCwgezB4MDAsMHgwMCwweDA4LDB4MDAsMHg0MiwweDAwLDB4MDQsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MDQgfSwKKyAgMTYsIDB4YzQ4MCwgMCwgezB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4MDIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4NDIgfSwKKyAgMTYsIDB4YzQ5MCwgMCwgezB4MDAsMHgxMCwweDgwLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDAgfSwKKyAgMTYsIDB4YzRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDg0LDB4MjAgfSwKKyAgMTYsIDB4YzRiMCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHg4NCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAgfSwKKyAgMTYsIDB4YzRjMCwgMCwgezB4ODAsMHhhMCwweDIwLDB4MjgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MjgsMHgwOCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4YzRkMCwgMCwgezB4MDAsMHg4MCwweDgwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzRlMCwgMCwgezB4MDAsMHg0NSwweDQwLDB4MDUsMHg2MCwweDQxLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTggfSwKKyAgMTYsIDB4YzRmMCwgMCwgezB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4MjAsMHgwMSwweGQ4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAgfSwKKyAgMTYsIDB4YzUwMCwgMCwgezB4MDEsMHg1OCwweDAwLDB4NzYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAgfSwKKyAgMTYsIDB4YzUxMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfSwKKyAgMTYsIDB4YzUyMCwgMCwgezB4MjYsMHgwMCwweDBkLDB4ODAsMHgwMiwweDYwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNywweDYwLDB4MDEgfSwKKyAgMTYsIDB4YzUzMCwgMCwgezB4NWMsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDU3LDB4MDAsMHgwZCwweDgwLDB4MDIgfSwKKyAgMTYsIDB4YzU0MCwgMCwgezB4NjAsMHgwMCwweDk4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDQsMHgzMCwweDIxLDB4MGMsMHgwMCwweDQzLDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCwweDAxLDB4MGMgfSwKKyAgMTYsIDB4YzU2MCwgMCwgezB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAsMHgwMSwweDE4LDB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAgfSwKKyAgMTYsIDB4YzU3MCwgMCwgezB4MDEsMHgwYywweDAwLDB4NDYsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwLDB4MDEsMHgwYywweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAgfSwKKyAgMTYsIDB4YzU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSwKKyAgMTYsIDB4YzU5MCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDM1LDB4MDgsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzYsMHgwMCwweDE0LDB4MDAgfSwKKyAgMTYsIDB4YzVhMCwgMCwgezB4MDgsMHgwMCwweDAzLDB4NDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGQsMHg0MCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAgfSwKKyAgMTYsIDB4YzViMCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzVjMCwgMCwgezB4MDAsMHgwMCwweDA1LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSwweGMwLDB4NGMgfSwKKyAgMTYsIDB4YzVkMCwgMCwgezB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDA1LDB4MzEsMHg0MSwweDRjLDB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEgfSwKKyAgMTYsIDB4YzVlMCwgMCwgezB4NDAsMHg0YywweDcwLDB4NTMsMHgxNCwweDA0LDB4YzUsMHgwMSwweDMxLDB4NDAsMHg0YywweDQwLDB4MTMsMHgxNCwweDA0LDB4YzAgfSwKKyAgMTYsIDB4YzVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA1LDB4NjgsMHhjMSwweDVhLDB4MzAgfSwKKyAgMTYsIDB4YzYwMCwgMCwgezB4NTYsMHg4YywweDE1LDB4YTMsMHgwNSwweDY5LDB4YzEsMHg1YSwweDMwLDB4NDYsMHg4YywweDExLDB4YTcsMHgwMSwweDY4LDB4YzAgfSwKKyAgMTYsIDB4YzYxMCwgMCwgezB4MWEsMHgzMCwweDU2LDB4OGMsMHgxMSwweGEzLDB4MDQsMHg2OCwweGMxLDB4MWEsMHgzMCwweDE2LDB4OGMsMHgxNSwweGEzLDB4MDQgfSwKKyAgMTYsIDB4YzYyMCwgMCwgezB4NjgsMHhjMSwweDVhLDB4MzAsMHg1NiwweDhjLDB4MTEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyNCwweDAwLDB4MDggfSwKKyAgMTYsIDB4YzY0MCwgMCwgezB4MDEsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjQsMHgwMCwweDA4LDB4ODAsMHgwMiwweDYwLDB4MDAsMHg4MCwweDAwLDB4MjAgfSwKKyAgMTYsIDB4YzY1MCwgMCwgezB4MDAsMHgwOSwweDQwLDB4MDIsMHgyMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAgfSwKKyAgMTYsIDB4YzY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODQgfSwKKyAgMTYsIDB4YzY3MCwgMCwgezB4NDYsMHgyMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MDksMHgxOCwweDg0LDB4NDYsMHgyMSwweDExLDB4ODgsMHg2MCwweDYyLDB4MTAgfSwKKyAgMTYsIDB4YzY4MCwgMCwgezB4MTgsMHgwNCwweDQ2LDB4MDEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4MCwweDA2LDB4MDEsMHgxMSwweDg4LDB4NDQgfSwKKyAgMTYsIDB4YzY5MCwgMCwgezB4NjIsMHgxMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4NDUsMHg1MCwweDExLDB4NTQsMHgwNCwweDU1LDB4MDEsMHgxNSwweDQwLDB4NDQsMHg1MCwweDExLDB4NTQgfSwKKyAgMTYsIDB4YzZiMCwgMCwgezB4MDQsMHg0NSwweDAxLDB4MTEsMHg0MCwweDQwLDB4NTAsMHgxMCwweDU0LDB4MDQsMHg0NSwweDAxLDB4MTUsMHg0MCwweDQ0LDB4NTAgfSwKKyAgMTYsIDB4YzZjMCwgMCwgezB4MTEsMHgxNCwweDAwLDB4MTUsMHgwMSwweDE1LDB4NDAsMHg0NCwweDUwLDB4MTEsMHg1NCwweDA0LDB4NTUsMHgwMCwweDExLDB4NDAgfSwKKyAgMTYsIDB4YzZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIgfSwKKyAgMTYsIDB4YzZlMCwgMCwgezB4MTQsMHgyMCwweDg1LDB4MDgsMHgyMSwweDQyLDB4MDAsMHg1MCwweDgyLDB4MTQsMHgyMCwweDg1LDB4MDgsMHgyMCwweDQyLDB4MDggfSwKKyAgMTYsIDB4YzZmMCwgMCwgezB4NTAsMHg4MiwweDE1LDB4MjAsMHgwNSwweDQ4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4MSwweDQwLDB4MjEgfSwKKyAgMTYsIDB4YzcwMCwgMCwgezB4NDIsMHgwOCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzcxMCwgMCwgezB4MDAsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDg0LDB4NDAgfSwKKyAgMTYsIDB4YzcyMCwgMCwgezB4YTEsMHgxMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgwMCwweDI4LDB4MDAsMHgwYSwweDAxLDB4MDIgfSwKKyAgMTYsIDB4YzczMCwgMCwgezB4ODAsMHg0MCwweGIwLDB4MTAsMHgyOCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MDAgfSwKKyAgMTYsIDB4Yzc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAgfSwKKyAgMTYsIDB4Yzc1MCwgMCwgezB4MzUsMHgzMCwweDBkLDB4NGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgzMCwweDBkLDB4NGMsMHgwMywweDUzLDB4MDAgfSwKKyAgMTYsIDB4Yzc2MCwgMCwgezB4ZDQsMHhjMCwweDIxLDB4MzAsMHgwOCwweDRjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwOCwweDRjLDB4MDMgfSwKKyAgMTYsIDB4Yzc3MCwgMCwgezB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MGQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzc4MCwgMCwgezB4MDAsMHgwMCwweDA4LDB4MDQsMHg3MCwweDAxLDB4NWMsMHg4MCwweDA3LDB4MjAsMHgyNSwweGM5LDB4MDQsMHg3MiwweDAxLDB4NWMgfSwKKyAgMTYsIDB4Yzc5MCwgMCwgezB4ODAsMHg0NywweDIwLDB4MTUsMHhjOCwweDAwLDB4NzIsMHgwNSwweGRjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjOCwweDA1LDB4NzIgfSwKKyAgMTYsIDB4YzdhMCwgMCwgezB4MDEsMHgxYywweDkwLDB4NjcsMHgyMCwweDE1LDB4YzgsMHgwNSwweDcyLDB4MDEsMHgxYywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzAgfSwKKyAgMTYsIDB4YzdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDE4LDB4NDgsMHhjMiwweDEyLDB4MzEgfSwKKyAgMTYsIDB4YzdjMCwgMCwgezB4ODQsMHg4YywweDYxLDB4MDMsMHgxOCwweDQwLDB4YzgsMHgxMiwweDMxLDB4ODQsMHg4YywweDYxLDB4MDMsMHgxOCwweDQ4LDB4YzQgfSwKKyAgMTYsIDB4YzdkMCwgMCwgezB4MTAsMHgzMSwweDg0LDB4MGMsMHg0MSwweDIzLDB4MTgsMHg0OCwweGM2LDB4MTAsMHgzMCwweDA0LDB4MGMsMHg2MSwweDIzLDB4MTggfSwKKyAgMTYsIDB4YzdlMCwgMCwgezB4NDgsMHhjNiwweDEyLDB4MzAsMHg4NCwweDhjLDB4MjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzdmMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMgfSwKKyAgMTYsIDB4YzgwMCwgMCwgezB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYgfSwKKyAgMTYsIDB4YzgxMCwgMCwgezB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGJkLDB4MDAgfSwKKyAgMTYsIDB4YzgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzg2MCwgMCwgezB4MDAsMHgwMCwweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwOSwweDM2LDB4YzIgfSwKKyAgMTYsIDB4Yzg3MCwgMCwgezB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIgfSwKKyAgMTYsIDB4Yzg4MCwgMCwgezB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDJjLDB4MDAgfSwKKyAgMTYsIDB4Yzg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDNjLDB4NGMsMHhjZiwweDEzLDB4MzMgfSwKKyAgMTYsIDB4YzhhMCwgMCwgezB4YzQsMHhjYywweGYxLDB4MzMsMHgzYywweDRkLDB4NGUsMHg5MywweDMzLDB4YzQsMHhjYywweGYxLDB4MmIsMHgzYywweDRjLDB4Y2YgfSwKKyAgMTYsIDB4YzhiMCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2MsMHhlOSwweDMzLDB4M2MsMHg0YywweGNmLDB4MTIsMHhiNSwweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2MgfSwKKyAgMTYsIDB4YzhjMCwgMCwgezB4NGMsMHhjZiwweDEzLDB4MzMsMHhjNCwweGNkLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzhkMCwgMCwgezB4MDAsMHgwMCwweDNiLDB4N2UsMHg0ZSwweGM3LDB4OTMsMHhiNywweGU0LDB4ZWQsMHhmOSwweDIzLDB4N2UsMHg0ZSwweDQ3LDB4OTMgfSwKKyAgMTYsIDB4YzhlMCwgMCwgezB4YjcsMHhlNCwweGVkLDB4ZjksMHgzZiwweDdlLDB4NGUsMHhkZSwweDEyLDB4MzcsMHhlNCwweDhkLDB4ZjksMHgzYiwweDdlLDB4NGUgfSwKKyAgMTYsIDB4YzhmMCwgMCwgezB4ZGYsMHg5MywweGY3LDB4ODQsMHg4ZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGIxLDB4ZTQsMHhlZCwweGI5LDB4MDAgfSwKKyAgMTYsIDB4YzkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAyLDB4NzAsMHg0MCwweDljLDB4MTEgfSwKKyAgMTYsIDB4YzkxMCwgMCwgezB4NjcsMHgwNCwweDE5LDB4YzMsMHgwMiwweDcwLDB4NDAsMHg5YywweDEwLDB4MjcsMHgwNCwweDA5LDB4YzEsMHgwMiwweDcwLDB4NDAgfSwKKyAgMTYsIDB4YzkyMCwgMCwgezB4MWMsMHgxMCwweDI3LDB4MTQsMHgwMSwweGMxLDB4MDIsMHg3MCwweDQwLDB4OWMsMHg1MCwweDA3LDB4MDQsMHgwOSwweGMxLDB4MDIgfSwKKyAgMTYsIDB4YzkzMCwgMCwgezB4NzAsMHg0MCwweDljLDB4MTAsMHg2NywweDE0LDB4MTEsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Yzk0MCwgMCwgezB4MDAsMHgwMCwweDA0LDB4MDUsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDUsMHg3MSwweDAxLDB4NWMgfSwKKyAgMTYsIDB4Yzk1MCwgMCwgezB4NDAsMHg1NywweDEwLDB4MTUsMHhjNiwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTAsMHhjNCwweDA1LDB4NzEgfSwKKyAgMTYsIDB4Yzk2MCwgMCwgezB4MDEsMHg1YywweDY0LDB4MDMsMHgxMCwweDU1LDB4YzQsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzAgfSwKKyAgMTYsIDB4Yzk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSwKKyAgMTYsIDB4Yzk4MCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIxLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgwMSwweDIwLDB4ODAgfSwKKyAgMTYsIDB4Yzk5MCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNSwweGMyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyNCwweDE3LDB4MDgsMHgwNCwweDgyLDB4MDEgfSwKKyAgMTYsIDB4YzlhMCwgMCwgezB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4YzliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDg0LDB4MDAsMHg2MCwweDAwLDB4MTggfSwKKyAgMTYsIDB4YzljMCwgMCwgezB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMSwweDE4LDB4MDAsMHgwNiwweDEwLDB4OTEsMHg4MCwweDAwLDB4NjAgfSwKKyAgMTYsIDB4YzlkMCwgMCwgezB4MDAsMHgxOCwweDQ2LDB4NDYsMHgxOCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgxMCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4YzllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4NzMsMHgwMSwweDFjLDB4ODAgfSwKKyAgMTYsIDB4YzlmMCwgMCwgezB4MDcsMHgyMCwweDAxLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEgfSwKKyAgMTYsIDB4Y2EwMCwgMCwgezB4MWMsMHg4MCwweDQ3LDB4MjIsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDA3LDB4MjAsMHgxMSwweGM4LDB4MDQgfSwKKyAgMTYsIDB4Y2ExMCwgMCwgezB4NzIsMHgwMSwweDFjLDB4ODAsMHgwNywweDI4LDB4MTEsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2EyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTggfSwKKyAgMTYsIDB4Y2EzMCwgMCwgezB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAgfSwKKyAgMTYsIDB4Y2E0MCwgMCwgezB4MDAsMHgxOCwweDAwLDB4NDYsMHgwNCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4Y2E1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfSwKKyAgMTYsIDB4Y2E2MCwgMCwgezB4MDIsMHgyMCwweDAwLDB4OTAsMHgwNCwweDI3LDB4ODEsMHgwOCwweDgwLDB4NDIsMHgyMCwweDEwLDB4OTgsMHgwNCwweDI0LDB4MDEgfSwKKyAgMTYsIDB4Y2E3MCwgMCwgezB4MDgsMHg4MCwweDQyLDB4NDgsMHgxMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDksMHg0MCwweDQyLDB4NjAsMHgxMCwweDg4LDB4MDQgfSwKKyAgMTYsIDB4Y2E4MCwgMCwgezB4MjIsMHgwMSwweDA4LDB4YzAsMHgwMiwweDQwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2E5MCwgMCwgezB4MDAsMHgwMCwweDJhLDB4MDQsMHg0YiwweDgxLDB4MTIsMHhhMCwweDA0LDB4YTgsMHgwMSwweDJhLDB4MDQsMHg0YSwweDgxLDB4MTIgfSwKKyAgMTYsIDB4Y2FhMCwgMCwgezB4YTAsMHg0NCwweGE4LDB4MTEsMHgyYSwweDA0LDB4NDgsMHg4MCwweDEyLDB4YTAsMHg0NCwweDg4LDB4MDEsMHgyYSwweDA0LDB4NGEgfSwKKyAgMTYsIDB4Y2FiMCwgMCwgezB4ODEsMHgxMiwweDIwLDB4MDQsMHhhYywweDExLDB4MmEsMHgwNCwweDRhLDB4ODEsMHgxMiwweGIwLDB4NDQsMHg5YywweDExLDB4MDAgfSwKKyAgMTYsIDB4Y2FjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHgwYywweDAwLDB4NTMsMHgwMCwweDE0LDB4YzAgfSwKKyAgMTYsIDB4Y2FkMCwgMCwgezB4MDUsMHgzMCwweDAxLDB4NDQsMHgwMCwweDUzLDB4MDAsMHgxNCwweGMwLDB4MDUsMHgzMCwweDA0LDB4MGMsMHgwMCwweDUzLDB4MDAgfSwKKyAgMTYsIDB4Y2FlMCwgMCwgezB4MTQsMHhjMCwweDA1LDB4YjAsMHgwMSwweDRjLDB4MDAsMHg1MywweDAwLDB4MTYsMHhjMCwweDAxLDB4MzAsMHgwMSwweDRjLDB4MDAgfSwKKyAgMTYsIDB4Y2FmMCwgMCwgezB4NTMsMHgwMCwweDE0LDB4YzAsMHgwMSwweDM4LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2IwMCwgMCwgezB4MDgsMHhjMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDEwLDB4MDAsMHg0NCwweDgwLDB4MTAgfSwKKyAgMTYsIDB4Y2IxMCwgMCwgezB4MDAsMHgwNCwweDAwLDB4MDEsMHgxMCwweDAwLDB4NDYsMHgwMCwweDAwLDB4MDAsMHgwNCwweDYwLDB4MDEsMHgwMCwweDAwLDB4NDAgfSwKKyAgMTYsIDB4Y2IyMCwgMCwgezB4MDAsMHgxMSwweDYwLDB4MDIsMHg0MCwweDAxLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgxMCwweDYwLDB4MDEsMHg1MCwweDEwLDB4NDAgfSwKKyAgMTYsIDB4Y2IzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHg0MCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSwKKyAgMTYsIDB4Y2I0MCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDgsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2I1MCwgMCwgezB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIgfSwKKyAgMTYsIDB4Y2I2MCwgMCwgezB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMSwweDAwLDB4MDgsMHg0MCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2I3MCwgMCwgezB4MDgsMHhjMCwweDQwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTggfSwKKyAgMTYsIDB4Y2I4MCwgMCwgezB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweGM4LDB4MDAsMHg0NiwweDAwLDB4MTksMHg4MCwweDAwLDB4NjAgfSwKKyAgMTYsIDB4Y2I5MCwgMCwgezB4MDAsMHgxOCwweDAwLDB4NjYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4MDYsMHgwMCwweDExLDB4ODAgfSwKKyAgMTYsIDB4Y2JhMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDEsMHgwMCwweDAyLDB4NjAsMHgwMCwweDk4LDB4MDAgfSwKKyAgMTYsIDB4Y2JiMCwgMCwgezB4MjYsMHgwMCwweDA5LDB4ODEsMHgwMiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MjYsMHgwMCwweDA5LDB4ODAsMHgwNiwweDYyLDB4MDAgfSwKKyAgMTYsIDB4Y2JjMCwgMCwgezB4NDgsMHgwMCwweDI2LDB4MjAsMHgwMSwweGMwLDB4MDIsMHg2MCwweDAxLDB4OTgsMHgwMCwweDA3LDB4MDAsMHgwOSwweDgwLDB4MDIgfSwKKyAgMTYsIDB4Y2JkMCwgMCwgezB4NjAsMHgwMCwweDk4LDB4MDAsMHgyNiwweDAwLDB4MTEsMHg4MiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2JlMCwgMCwgezB4NDAsMHg0NSwweDQyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDg1LDB4OGMgfSwKKyAgMTYsIDB4Y2JmMCwgMCwgezB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDQ4LDB4MTEsMHg4MiwweDA0LDB4MzAgfSwKKyAgMTYsIDB4Y2MwMCwgMCwgezB4ODEsMHg4ZCwweDIwLDB4NDYsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwYywweDEwLDB4YzAgfSwKKyAgMTYsIDB4Y2MxMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSwKKyAgMTYsIDB4Y2MyMCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDEwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAgfSwKKyAgMTYsIDB4Y2MzMCwgMCwgezB4MDgsMHgwMCwweDAzLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHg4MCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAgfSwKKyAgMTYsIDB4Y2M0MCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDIwLDB4MDAsMHhjMCwweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2M1MCwgMCwgezB4NDAsMHgwMCwweDAyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgyMSwweDAzLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMgfSwKKyAgMTYsIDB4Y2M2MCwgMCwgezB4MjAsMHgwMywweDA4LDB4MDAsMHhjMiwweDA0LDB4MzAsMHhjMSwweDBjLDB4MjAsMHgwMywweDBjLDB4MTAsMHhjMiwweDAwLDB4MzAgfSwKKyAgMTYsIDB4Y2M3MCwgMCwgezB4ODAsMHgwYywweGIwLDB4NDMsMHgwOCwweDAwLDB4YzIsMHgwMCwweDMwLDB4ODAsMHgwYywweDIwLDB4MDMsMHgyOCwweDEwLDB4YzAgfSwKKyAgMTYsIDB4Y2M4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSwKKyAgMTYsIDB4Y2M5MCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4ODEgfSwKKyAgMTYsIDB4Y2NhMCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgxMSwweDgyLDB4MDQgfSwKKyAgMTYsIDB4Y2NiMCwgMCwgezB4NjAsMHg4MSwweDE4LDB4MjAsMHg0NiwweDBjLDB4MTEsMHhjMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2NjMCwgMCwgezB4NDAsMHgwMSwweDQyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDggfSwKKyAgMTYsIDB4Y2NkMCwgMCwgezB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDBjLDB4MjAsMHgwMiwweDA4LDB4MDAsMHhjMiwweDAwLDB4MjAgfSwKKyAgMTYsIDB4Y2NlMCwgMCwgezB4ODAsMHgwOCwweDIwLDB4NDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4Y2NmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDEsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSwKKyAgMTYsIDB4Y2QwMCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4YzEgfSwKKyAgMTYsIDB4Y2QxMCwgMCwgezB4MGMsMHgyMCwweDQ2LDB4MGMsMHgxMCwweGMyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgzMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQgfSwKKyAgMTYsIDB4Y2QyMCwgMCwgezB4NjAsMHg4MSwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTAsMHg4MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2QzMCwgMCwgezB4NDAsMHg0NSwweDQwLDB4MDQsMHg1MCwweDAxLDB4MTQsMHgwMCwweDQ1LDB4MDAsMHgxMSwweDQwLDB4MDQsMHg1MCwweDAwLDB4MTQgfSwKKyAgMTYsIDB4Y2Q0MCwgMCwgezB4MDAsMHg0NSwweDAwLDB4MTEsMHg0MCwweDAwLDB4NTAsMHgwMCwweDA0LDB4MDAsMHg0NSwweDAwLDB4MDAsMHg0MCwweDA0LDB4NTAgfSwKKyAgMTYsIDB4Y2Q1MCwgMCwgezB4MDAsMHgxNCwweDAwLDB4MDEsMHgwMCwweDExLDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDAwLDB4NDUsMHgwMCwweDAwLDB4NDIgfSwKKyAgMTYsIDB4Y2Q2MCwgMCwgezB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAgfSwKKyAgMTYsIDB4Y2Q3MCwgMCwgezB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAgfSwKKyAgMTYsIDB4Y2Q4MCwgMCwgezB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAgfSwKKyAgMTYsIDB4Y2Q5MCwgMCwgezB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2RhMCwgMCwgezB4NDgsMHgwMCwweDAyLDB4MDEsMHgwMCwweDgwLDB4NDAsMHgyMSwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDgwLDB4NDAgfSwKKyAgMTYsIDB4Y2RiMCwgMCwgezB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwLDB4MjEsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAgfSwKKyAgMTYsIDB4Y2RjMCwgMCwgezB4ODAsMHg0MCwweDMwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgxMSwweDAwLDB4ODQsMHg0MCwweDIwLDB4MTAsMHgwOCwweDE0LDB4MDAgfSwKKyAgMTYsIDB4Y2RkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAgfSwKKyAgMTYsIDB4Y2RlMCwgMCwgezB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAgfSwKKyAgMTYsIDB4Y2RmMCwgMCwgezB4ZDQsMHg2MCwweDM1LDB4MTAsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg0MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMgfSwKKyAgMTYsIDB4Y2UwMCwgMCwgezB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0MCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2UxMCwgMCwgezB4MDAsMHgwMSwweDQ2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDA3LDB4MTgsMHgxMSwweGNlLDB4MDQsMHg3MSwweDgxLDB4MWMgfSwKKyAgMTYsIDB4Y2UyMCwgMCwgezB4NjAsMHg0NywweDE4LDB4MDEsMHhjNiwweDA0LDB4NzEsMHg4MSwweDljLDB4NjAsMHg0NywweDE4LDB4MTksMHhjNiwweDA0LDB4NzEgfSwKKyAgMTYsIDB4Y2UzMCwgMCwgezB4ODAsMHgxYywweDYwLDB4NjcsMHgxOCwweDExLDB4YzYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwLDB4NDcsMHgxOCwweDExLDB4YzAgfSwKKyAgMTYsIDB4Y2U0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHg0NiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAgfSwKKyAgMTYsIDB4Y2U1MCwgMCwgezB4MjcsMHgxOCwweDA5LDB4YzYsMHgwNiwweDcxLDB4ODAsMHgxYywweDYwLDB4MjcsMHgxOCwweDA5LDB4YzYsMHgwMSwweDMxLDB4ODAgfSwKKyAgMTYsIDB4Y2U2MCwgMCwgezB4MWMsMHg2MCwweDA3LDB4MTgsMHgwOSwweGM2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCwweDA3LDB4MTgsMHgwOSwweGM2LDB4MTIgfSwKKyAgMTYsIDB4Y2U3MCwgMCwgezB4NzEsMHg4MCwweDljLDB4NjAsMHgzMywweDE4LDB4MDEsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2U4MCwgMCwgezB4NTAsMHg0NSwweDQ2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgwLDB4NWMgfSwKKyAgMTYsIDB4Y2U5MCwgMCwgezB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDAxLDB4MzEsMHg4MSwweDBjLDB4NjAsMHgxNywweDE4LDB4MTAsMHhjNiwweDA1LDB4NzEgfSwKKyAgMTYsIDB4Y2VhMCwgMCwgezB4ODEsMHg1YywweDYwLDB4MDMsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTMsMHgxOCwweDE4LDB4ODIgfSwKKyAgMTYsIDB4Y2ViMCwgMCwgezB4MTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDAsMHgxMiwweDAxLDB4MjQsMHg4MCwweDQ4LDB4MjAgfSwKKyAgMTYsIDB4Y2VjMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDI0LDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSwKKyAgMTYsIDB4Y2VkMCwgMCwgezB4NTgsMHgyMCwweDUyLDB4MGMsMHgwNSwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDksMHgyMCwweDAyLDB4MDgsMHgwNCwweDgyLDB4MDEgfSwKKyAgMTYsIDB4Y2VlMCwgMCwgezB4MjAsMHg4MCwweDQ5LDB4MjAsMHgxMiwweDQ4LDB4MDQsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2VmMCwgMCwgezB4NDAsMHgwNCwweDA2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDA2LDB4MTgsMHgwMSwweDg2LDB4MDQsMHg2MSwweDgwLDB4MTggfSwKKyAgMTYsIDB4Y2YwMCwgMCwgezB4NjAsMHgwNiwweDE4LDB4MDEsMHg4NiwweDAwLDB4NjEsMHg4MSwweDQ4LDB4NjAsMHgwNiwweDE4LDB4MTQsMHg4NiwweDAwLDB4NjEgfSwKKyAgMTYsIDB4Y2YxMCwgMCwgezB4ODAsMHgxOCwweDYwLDB4NDIsMHgxOCwweDAxLDB4ODYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwLDB4MDYsMHgxOCwweDAwLDB4ODAgfSwKKyAgMTYsIDB4Y2YyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg2MCwweDA0LDB4NzgsMHgwMSwweDFlLDB4MDAgfSwKKyAgMTYsIDB4Y2YzMCwgMCwgezB4NDcsMHg4MCwweDExLDB4ZTgsMHgwMCwweDc4LDB4MDEsMHgxZSwweDAwLDB4NDcsMHg4MCwweDExLDB4ZTAsMHgwNCwweDc4LDB4MDEgfSwKKyAgMTYsIDB4Y2Y0MCwgMCwgezB4MWUsMHgwMCwweDQzLDB4ODAsMHgxMSwweGUwLDB4MDQsMHg3OCwweDAxLDB4MWUsMHgwMCwweDAzLDB4ODAsMHgxNSwweGUwLDB4MDQgfSwKKyAgMTYsIDB4Y2Y1MCwgMCwgezB4NzgsMHgwMSwweDFlLDB4MDAsMHg0NywweDgwLDB4MTEsMHhjMCwweDEwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2Y2MCwgMCwgezB4NDAsMHgwMSwweDEyLDB4MDAsMHg2NCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2NCwweDgwLDB4MTggfSwKKyAgMTYsIDB4Y2Y3MCwgMCwgezB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MzAsMHgwMiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAgfSwKKyAgMTYsIDB4Y2Y4MCwgMCwgezB4ODAsMHgxOSwweDMwLDB4NDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOSwweDIwLDB4MDYsMHg0OCwweDAxLDB4ODAgfSwKKyAgMTYsIDB4Y2Y5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfSwKKyAgMTYsIDB4Y2ZhMCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwMCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEgfSwKKyAgMTYsIDB4Y2ZiMCwgMCwgezB4MDgsMHgyMCwweDQ2LDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQgfSwKKyAgMTYsIDB4Y2ZjMCwgMCwgezB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Y2ZkMCwgMCwgezB4NDAsMHg0NSwweDQyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDAsMHg0MCwweDgxLDB4MTAgfSwKKyAgMTYsIDB4Y2ZlMCwgMCwgezB4MjAsMHg0NCwweDA4LDB4MTEsMHgwMiwweDA0LDB4NDAsMHg4MCwweDEwLDB4MjAsMHg0NSwweDA4LDB4MDEsMHgwMiwweDA0LDB4NDAgfSwKKyAgMTYsIDB4Y2ZmMCwgMCwgezB4ODEsMHgxMCwweDIxLDB4MDAsMHgwYywweDExLDB4MDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4NDQsMHgwOCwweDAxLDB4MDAgfSwKKyAgMTYsIDB4ZDAwMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAgfSwKKyAgMTYsIDB4ZDAxMCwgMCwgezB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAgfSwKKyAgMTYsIDB4ZDAyMCwgMCwgezB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAgfSwKKyAgMTYsIDB4ZDAzMCwgMCwgezB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDA0MCwgMCwgezB4NDAsMHgwMCwweDA4LDB4MDAsMHg0MiwweDA0LDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA5LDB4MDAsMHg0MiwweDAxLDB4MTAgfSwKKyAgMTYsIDB4ZDA1MCwgMCwgezB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIgfSwKKyAgMTYsIDB4ZDA2MCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgyMCwweDExLDB4MDAgfSwKKyAgMTYsIDB4ZDA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAgfSwKKyAgMTYsIDB4ZDA4MCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHgwMCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMCwweDAwLDB4ODAgfSwKKyAgMTYsIDB4ZDA5MCwgMCwgezB4ODAsMHhhMCwweDAwLDB4MGEsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgzNCwweDYyLDB4MjgsMHgwOCwweDAyLDB4MDIgfSwKKyAgMTYsIDB4ZDBhMCwgMCwgezB4MDAsMHg4MCwweDgwLDB4MzAsMHgyMCwweDBjLDB4MDgsMHgwMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDBiMCwgMCwgezB4NDAsMHgwMSwweDQwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAzLDB4MTggfSwKKyAgMTYsIDB4ZDBjMCwgMCwgezB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA2LDB4NjAsMHgwMSwweDk4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAgfSwKKyAgMTYsIDB4ZDBkMCwgMCwgezB4MDEsMHgxOCwweDAwLDB4NjYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAgfSwKKyAgMTYsIDB4ZDBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMCwweDAyLDB4NjAsMHgwMCwweDk4LDB4MDAgfSwKKyAgMTYsIDB4ZDBmMCwgMCwgezB4MjYsMHgwMCwweDA5LDB4ODAsMHgwMiwweDY0LDB4MDAsMHg5OCwweDAwLDB4MjYsMHgwMCwweDE5LDB4OTAsMHgwMiwweDYwLDB4MDAgfSwKKyAgMTYsIDB4ZDEwMCwgMCwgezB4MWQsMHgwMCwweDI2LDB4MDAsMHgwMSwweGMwLDB4MDIsMHg2MCwweDAwLDB4OTksMHgwMCwweDA2LDB4NDAsMHgxOSwweDgwLDB4MDIgfSwKKyAgMTYsIDB4ZDExMCwgMCwgezB4NjAsMHgwMCwweDk4LDB4MDAsMHg2NiwweDAwLDB4MDEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDEyMCwgMCwgezB4NDAsMHg0NSwweDYwLDB4MDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQzLDB4ODAsMHgxMCwweGUwLDB4MDQsMHgzOCwweDAxLDB4MGUgfSwKKyAgMTYsIDB4ZDEzMCwgMCwgezB4MDAsMHg0MywweDgwLDB4MTAsMHhlMCwweDA0LDB4MzgsMHgwMSwweDFhLDB4MDAsMHg0MywweDgwLDB4MTEsMHhhMCwweDA0LDB4MzggfSwKKyAgMTYsIDB4ZDE0MCwgMCwgezB4MDEsMHgwZSwweDAwLDB4MDIsMHg4MCwweDQwLDB4ZTAsMHgwNCwweDM4LDB4MDEsMHgwZSwweDAwLDB4NDMsMHg4MCwweDE4LDB4ODAgfSwKKyAgMTYsIDB4ZDE1MCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDQsMHgwMSwweDAwLDB4MzAsMHg0MCwweDBjLDB4MTAgfSwKKyAgMTYsIDB4ZDE2MCwgMCwgezB4MDMsMHgwNCwweDAwLDB4YzksMHgwMCwweDMwLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwNCwweDAwLDB4YzEsMHgwMCwweDMwLDB4NDAgfSwKKyAgMTYsIDB4ZDE3MCwgMCwgezB4MDgsMHgxMCwweDAzLDB4MDQsMHgwMCwweDgxLDB4MDAsMHgzMCwweDQwLDB4MGMsMHg3OCwweDAyLDB4MTQsMHgwMCwweGMxLDB4MDAgfSwKKyAgMTYsIDB4ZDE4MCwgMCwgezB4MzAsMHg0MCwweDBjLDB4MTAsMHgwMywweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDE5MCwgMCwgezB4NDAsMHgwMCwweDA1LDB4MDAsMHgzMSwweDQwLDB4MGMsMHg1MCwweDAzLDB4MTQsMHgwMCwweGM1LDB4MDAsMHgzNSwweDQwLDB4MGMgfSwKKyAgMTYsIDB4ZDFhMCwgMCwgezB4NTAsMHgwMywweDE0LDB4MTAsMHhkNSwweDAwLDB4MzEsMHg0MSwweDBkLDB4NTAsMHgwMywweDE0LDB4MTAsMHhjNSwweDAwLDB4MzEgfSwKKyAgMTYsIDB4ZDFiMCwgMCwgezB4NDAsMHgwZCwweDQ4LDB4NDMsMHg1NCwweDEwLDB4YzUsMHgwMCwweDMxLDB4NDAsMHgwYywweDQwLDB4NDMsMHgxMCwweDAwLDB4YzIgfSwKKyAgMTYsIDB4ZDFjMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MywweDA0LDB4NjAsMHhjMSwweDE4LDB4MzAgfSwKKyAgMTYsIDB4ZDFkMCwgMCwgezB4NDYsMHgwYywweDExLDB4ODMsMHgwNCwweDYxLDB4YzEsMHgxOCwweDMwLDB4NDYsMHgwYywweDAxLDB4ODcsMHgwNCwweDYwLDB4YzEgfSwKKyAgMTYsIDB4ZDFlMCwgMCwgezB4MTgsMHgzMCwweDQ2LDB4MDgsMHgxMSwweDgzLDB4MDQsMHg2MCwweGMxLDB4MTgsMHgyMCwweDA2LDB4MGMsMHgwMSwweDgzLDB4MDQgfSwKKyAgMTYsIDB4ZDFmMCwgMCwgezB4NjAsMHhjMSwweDE4LDB4MzAsMHg0NiwweDBjLDB4MTEsMHg4MCwweDEwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDIwMCwgMCwgezB4NDAsMHgwMSwweDQwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDggfSwKKyAgMTYsIDB4ZDIxMCwgMCwgezB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MSwweDAwLDB4MjAsMHgwMCwweDA4LDB4ODAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwLDB4MjAgfSwKKyAgMTYsIDB4ZDIyMCwgMCwgezB4MDAsMHgwOCwweDQwLDB4NDMsMHgzMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAgfSwKKyAgMTYsIDB4ZDIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0OCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODQgfSwKKyAgMTYsIDB4ZDI0MCwgMCwgezB4NDYsMHgyMSwweDExLDB4ODgsMHg0NCwweDYzLDB4MDEsMHgxOCwweDg0LDB4NDYsMHgyMSwweDAxLDB4ODgsMHgwNCwweDYyLDB4MTEgfSwKKyAgMTYsIDB4ZDI1MCwgMCwgezB4MTgsMHgwNCwweDQ2LDB4MjEsMHgxMCwweGM4LDB4NDQsMHg2MiwweDExLDB4MTgsMHgwNSwweDQzLDB4MDEsMHg4MSwweDg4LDB4NDQgfSwKKyAgMTYsIDB4ZDI2MCwgMCwgezB4NjIsMHgxMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDI3MCwgMCwgezB4NDAsMHg0NSwweDQwLDB4MDQsMHg1MCwweDAxLDB4MTQsMHgwNCwweDQ1LDB4MDEsMHgxMSwweDQwLDB4NDQsMHg1MCwweDAxLDB4MTQgfSwKKyAgMTYsIDB4ZDI4MCwgMCwgezB4MDQsMHg0NSwweDAxLDB4MDEsMHg0MCwweDQ1LDB4MDAsMHgxMCwweDE0LDB4MDQsMHg0NSwweDAzLDB4MDAsMHg0MCwweDQ0LDB4NTAgfSwKKyAgMTYsIDB4ZDI5MCwgMCwgezB4MTEsMHgxNCwweDA0LDB4MDEsMHgwNSwweDQxLDB4NDAsMHg0NCwweDUwLDB4MTEsMHgxNCwweDA0LDB4MDUsMHgwMSwweDAxLDB4NDAgfSwKKyAgMTYsIDB4ZDJhMCwgMCwgezB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIgfSwKKyAgMTYsIDB4ZDJiMCwgMCwgezB4MDQsMHgyMCwweDgxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgwMCwweDQyLDB4MDggfSwKKyAgMTYsIDB4ZDJjMCwgMCwgezB4MTAsMHg4MiwweDA1LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4YSwweDA1LDB4MjAsMHgwNSwweDA4LDB4MjAgfSwKKyAgMTYsIDB4ZDJkMCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIyLDB4ODEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDJlMCwgMCwgezB4MDAsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDAyLDB4MDEsMHgwMiwweDgwLDB4NDAgfSwKKyAgMTYsIDB4ZDJmMCwgMCwgezB4YTAsMHgxMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgwMCwweDI5LDB4MDQsMHgwYSwweDAxLDB4MDIgfSwKKyAgMTYsIDB4ZDMwMCwgMCwgezB4ODAsMHg0MCwweGE0LDB4MDAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGE4LDB4MTAsMHgyYiwweDE0LDB4MDAgfSwKKyAgMTYsIDB4ZDMxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDAgfSwKKyAgMTYsIDB4ZDMyMCwgMCwgezB4MzUsMHgzNCwweDBkLDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwLDB4MzUsMHgzNCwweDBkLDB4NGQsMHgwMywweDUzLDB4NDAgfSwKKyAgMTYsIDB4ZDMzMCwgMCwgezB4ZDQsMHhkMCwweDIxLDB4MzQsMHg0ZCwweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkOSwweDYxLDB4MzQsMHgwNCwweDBkLDB4MDMgfSwKKyAgMTYsIDB4ZDM0MCwgMCwgezB4NTMsMHg0MCwweGMwLDB4ZDgsMHgzNSwweDM3LDB4MGQsMHg0MCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDM1MCwgMCwgezB4NDAsMHgwMSwweDQ4LDB4MDQsMHg3MiwweDAwLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMgfSwKKyAgMTYsIDB4ZDM2MCwgMCwgezB4ODAsMHg0NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMCwweDljLDB4ODAsMHg0NywweDIwLDB4MTksMHhjOCwweDAwLDB4NzIgfSwKKyAgMTYsIDB4ZDM3MCwgMCwgezB4MDEsMHgxYywweDg4LDB4NjcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHg1YywweDgyLDB4NDcsMHgyMiwweDExLDB4YzAgfSwKKyAgMTYsIDB4ZDM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA4LDB4NDgsMHhjMiwweDEyLDB4MzEgfSwKKyAgMTYsIDB4ZDM5MCwgMCwgezB4ODQsMHg4YywweDYxLDB4MjMsMHgxMCwweDQwLDB4YzAsMHgxMiwweDMxLDB4ODQsMHg4YywweDYxLDB4MDMsMHgxMCwweDQ4LDB4YzQgfSwKKyAgMTYsIDB4ZDNhMCwgMCwgezB4MTAsMHgzMSwweDg0LDB4OGMsMHg0MSwweDIzLDB4MTgsMHg0OCwweGM2LDB4MTAsMHgzMCwweDA0LDB4MGMsMHg0MSwweDIzLDB4MTggfSwKKyAgMTYsIDB4ZDNiMCwgMCwgezB4NDgsMHhjNiwweDEyLDB4MzAsMHg4NCwweDhjLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDNjMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMgfSwKKyAgMTYsIDB4ZDNkMCwgMCwgezB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYgfSwKKyAgMTYsIDB4ZDNlMCwgMCwgezB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGRkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4MDAgfSwKKyAgMTYsIDB4ZDNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDQzMCwgMCwgezB4MDAsMHgwMCwweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIgfSwKKyAgMTYsIDB4ZDQ0MCwgMCwgezB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIgfSwKKyAgMTYsIDB4ZDQ1MCwgMCwgezB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDRjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MDAgfSwKKyAgMTYsIDB4ZDQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDVjLDB4NGMsMHhkNywweDEzLDB4MzMgfSwKKyAgMTYsIDB4ZDQ3MCwgMCwgezB4YzQsMHhjYywweGYxLDB4MzMsMHgzYSwweDRhLDB4ZDYsMHg5MywweDMzLDB4YzQsMHhjYywweGYxLDB4MmIsMHgzYSwweDRjLDB4Y2YgfSwKKyAgMTYsIDB4ZDQ4MCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2MsMHhlOSwweDMzLDB4M2MsMHg0YywweGNmLDB4MTIsMHhiNSwweGE0LDB4YWMsMHhjOSwweDMzLDB4M2MgfSwKKyAgMTYsIDB4ZDQ5MCwgMCwgezB4NGMsMHhjZiwweDEzLDB4MzUsMHhjNCwweGNkLDB4NjksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDRhMCwgMCwgezB4MDAsMHgwMCwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMsMHhiNywweGU0LDB4ZWQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMgfSwKKyAgMTYsIDB4ZDRiMCwgMCwgezB4YjcsMHhlNCwweGVkLDB4ZjksMHgzYiwweDdlLDB4NGUsMHhkZSwweDEyLDB4MzcsMHhlNCwweGVkLDB4ZTEsMHgzYiwweDdlLDB4NGUgfSwKKyAgMTYsIDB4ZDRjMCwgMCwgezB4ZGYsMHg5MiwweDMxLDB4ODQsMHg4ZCwweGQ5LDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGIxLDB4ZTQsMHhlYywweDYxLDB4MDAgfSwKKyAgMTYsIDB4ZDRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4MDQsMHhhMSwweDgzLDB4MmMgfSwKKyAgMTYsIDB4ZDRlMCwgMCwgezB4MDMsMHgwYSwweDEwLDB4ODIsMHhjMSwweDM0LDB4MTAsMHg4ZiwweDAwLDB4NDAsMHgwOSwweDE0LDB4MDIsMHgwMywweDE0LDB4OTEgfSwKKyAgMTYsIDB4ZDRmMCwgMCwgezB4MDAsMHgwOCwweDQyLDB4MGIsMHgxOCwweDgyLDB4YzQsMHgwMCwweDMxLDB4Y2EsMHgwYywweDUyLDB4MDIsMHgxMCwweDgwLDB4ODUgfSwKKyAgMTYsIDB4ZDUwMCwgMCwgezB4MDAsMHgyMSwweDgyLDB4MjgsMHg0MCwweDBhLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDUxMCwgMCwgezB4MDAsMHgwMCwweDBhLDB4MDQsMHgwMiwweDAxLDB4NDAsMHg4MCwweDczLDB4MjgsMHgxMCwweDQ4LDB4MDcsMHgwNiwweDAxLDB4MDQgfSwKKyAgMTYsIDB4ZDUyMCwgMCwgezB4YTQsMHg0MSwweDIxLDB4MTQsMHgwOCwweDQ0LDB4MDYsMHgxMSwweDQwLDB4ODAsMHg3MCwweDIwLDB4MTQsMHgwYSwweDA0LDB4MDIgfSwKKyAgMTYsIDB4ZDUzMCwgMCwgezB4MDAsMHhjOCwweDg0LDB4NDEsMHgyMSwweDFjLDB4MDgsMHgwNiwweDEyLDB4MDEsMHhjMCwweDgwLDB4NjAsMHgyMCwweDE0LDB4MDAgfSwKKyAgMTYsIDB4ZDU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDg0LDB4MDQsMHgyMSwweDgyLDB4MDggfSwKKyAgMTYsIDB4ZDU1MCwgMCwgezB4NTMsMHgwMiwweDEwLDB4ODAsMHhjNSwweDAwLDB4ODEsMHg0YSwweDA0LDB4NDIsMHgwMiwweDE0LDB4MDAsMHgwNCwweDIwLDB4MjEgfSwKKyAgMTYsIDB4ZDU2MCwgMCwgezB4ODAsMHhhOCwweDcyLDB4MjIsMHgxYywweDg4LDB4YzQsMHgwNiwweGExLDB4NDIsMHg4YywweDUyLDB4MjIsMHgxYywweDg4LDB4ODUgfSwKKyAgMTYsIDB4ZDU3MCwgMCwgezB4MjYsMHgyMSwweGMwLDB4ODgsMHg1MCwweDIyLDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDU4MCwgMCwgezB4MDAsMHgwMCwweDAyLDB4NDQsMHgwMCwweDAxLDB4MDEsMHgwMCwweDYyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDEgfSwKKyAgMTYsIDB4ZDU5MCwgMCwgezB4MjAsMHg0MCwweDAwLDB4MWMsMHgwMCwweDQ0LDB4MDQsMHgwMSwweDAyLDB4MjAsMHg2MiwweDAwLDB4MWMsMHg4MCwweDA0LDB4MDQgfSwKKyAgMTYsIDB4ZDVhMCwgMCwgezB4ODAsMHg4OSwweDIwLDB4NTAsMHgwOCwweDE0LDB4ODAsMHgwNCwweDI0LDB4MDEsMHhjMSwweDAwLDB4NTAsMHgwMCwweDE4LDB4MDAgfSwKKyAgMTYsIDB4ZDViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MzgsMHgyMCwweDA0LDB4MGMgfSwKKyAgMTYsIDB4ZDVjMCwgMCwgezB4MzEsMHgwYSwweDAwLDB4MDAsMHgwMiwweDE4LDB4MjAsMHg4YywweGE4LDB4MTAsMHgyOCwweDA4LDB4ODgsMHhjMSwweDE0LDB4MTAgfSwKKyAgMTYsIDB4ZDVkMCwgMCwgezB4YzYsMHgwMCwweDIyLDB4MDMsMHgwOCwweDAyLDB4MDEsMHgwOCwweGIwLDB4MDAsMHgwYywweDIxLDB4MDIsMHgwMCwweDgyLDB4ODAgfSwKKyAgMTYsIDB4ZDVlMCwgMCwgezB4MDgsMHgwMCwweDQ5LDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDgwLDB4MDgsMHgyMCwweDAzLDB4MDAsMHgwNCwweDAyLDB4NDMsMHgyMCwweDAwLDB4NDAgfSwKKyAgMTYsIDB4ZDYwMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDQsMHg0MiwweDAxLDB4MTAsMHg4MCwweDg0LDB4MjAsMHgxMSwweDA4LDB4MDQsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDYxMCwgMCwgezB4MDAsMHg0NCwweDI0LDB4MjAsMHgwOSwweDA4LDB4NDAsMHgwMywweDAwLDB4OTAsMHhjNCwweDIwLDB4MjAsMHgwOCwweDBjLDB4MDIgfSwKKyAgMTYsIDB4ZDYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDgxLDB4MDgsMHgyMCwweDA0LDB4ODggfSwKKyAgMTYsIDB4ZDYzMCwgMCwgezB4MDIsMHgyMiwweDA4LDB4MDgsMHhjMywweDJhLDB4OTAsMHg0MCwweDg0LDB4MTAsMHgyMCwweDA0LDB4ODAsMHhjMiwweDI2LDB4MjAgfSwKKyAgMTYsIDB4ZDY0MCwgMCwgezB4NDksMHg4OCwweDIyLDB4MjIsMHgwYywweDA4LDB4YzEsMHgyNiwweGEwLDB4YzksMHg4YywweDEyLDB4MmEsMHgwNCwweDg4LDB4NDMgfSwKKyAgMTYsIDB4ZDY1MCwgMCwgezB4MGUsMHhhMCwweGNiLDB4ODgsMHgxMCwweDIyLDB4MGMsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDY2MCwgMCwgezB4MDgsMHgwMCwweDBhLDB4NDAsMHgzMiwweDAwLDB4MDEsMHg4MCwweDMxLDB4MjgsMHgwMCwweDAwLDB4MDEsMHgxMiwweDgwLDB4OGQgfSwKKyAgMTYsIDB4ZDY3MCwgMCwgezB4ODQsMHgwMCwweDI4LDB4MGMsMHgwOCwweDAxLDB4MzIsMHgwMCwweDhjLDB4ODAsMHgwMiwweDIwLDB4MGMsMHgwOCwweDAxLDB4MmUgfSwKKyAgMTYsIDB4ZDY4MCwgMCwgezB4MDAsMHhjMywweDgwLDB4MDIsMHgyMCwweDA0LDB4MDgsMHg0MywweDAyLDB4MDAsMHg0MCwweDgwLDB4MTAsMHgyMCwweDA0LDB4MDIgfSwKKyAgMTYsIDB4ZDY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDg3LDB4MGEsMHgyMSwweDA0LDB4ODggfSwKKyAgMTYsIDB4ZDZhMCwgMCwgezB4MTEsMHgyYSwweDFjLDB4MGEsMHgwNiwweDIyLDB4MjEsMHg0MCwweGEwLDB4NDIsMHgyYSwweDEwLDB4ODgsMHg4NSwweDBhLDB4YTEgfSwKKyAgMTYsIDB4ZDZiMCwgMCwgezB4MDYsMHhhNCwweDYyLDB4MjIsMHgxYywweDBhLDB4YzQsMHgwMiwweDIxLDB4ODAsMHg4YywweDUyLDB4MjIsMHgxNCwweDQ4LDB4ODYgfSwKKyAgMTYsIDB4ZDZjMCwgMCwgezB4MjIsMHgyMCwweDA4LDB4YTgsMHg2MCwweDJhLDB4MTQsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDZkMCwgMCwgezB4MDAsMHgwMCwweDA4LDB4NDUsMHgwNiwweDAxLDB4ODksMHg4MCwweDYzLDB4MjAsMHgxYywweDg4LDB4NDAsMHgzNCwweDExLDB4MDEgfSwKKyAgMTYsIDB4ZDZlMCwgMCwgezB4YTQsMHg1MCwweDI4LDB4MTgsMHg0OCwweDA0LDB4MGUsMHgwMSwweDRiLDB4ODAsMHg3MywweDI4LDB4MWMsMHg4YSwweDA0LDB4MDYgfSwKKyAgMTYsIDB4ZDZmMCwgMCwgezB4OTEsMHg0OSwweDA0LDB4NjMsMHgyMCwweDFjLDB4OGEsMHgwNiwweDI2LDB4MDEsMHg4NSwweDgwLDB4NzAsMHgyMCwweDE4LDB4MDIgfSwKKyAgMTYsIDB4ZDcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDg1LDB4MDAsMHhiMSwweDQ1LDB4MmMgfSwKKyAgMTYsIDB4ZDcxMCwgMCwgezB4NzAsMHgwMiwweDE0LDB4YzAsMHgwNywweDA4LDB4MjEsMHg0OSwweDAwLDB4NDIsMHgwMSwweDE0LDB4ODIsMHgwNSwweDAwLDB4MTEgfSwKKyAgMTYsIDB4ZDcyMCwgMCwgezB4ODQsMHgwMCwweDUyLDB4MDIsMHgxYywweDAwLDB4YzQsMHgwMCwweDIxLDB4YzQsMHgyYywweDUzLDB4MDIsMHgxYywweDAyLDB4ODEgfSwKKyAgMTYsIDB4ZDczMCwgMCwgezB4MDQsMHhhMSwweGNkLDB4MDgsMHg1MCwweDAyLDB4MTQsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDc0MCwgMCwgezB4MDgsMHgxMCwweDEyLDB4MDQsMHgzNCwweDAxLDB4Y2MsMHgwMCwweDczLDB4NDAsMHgxYywweDkwLDB4NDUsMHgwNCwweDAxLDB4NDggfSwKKyAgMTYsIDB4ZDc1MCwgMCwgezB4MDQsMHg2MCwweDQxLDB4MTgsMHhjMCwweDQ0LDB4MDQsMHgwMSwweDA1LDB4MDQsMHg3MywweDQ4LDB4MTQsMHg1MCwweDQ3LDB4MzQgfSwKKyAgMTYsIDB4ZDc2MCwgMCwgezB4MDEsMHg0NSwweDIwLDB4NjIsMHgwOCwweDFjLDB4YzIsMHgwNCwweDBjLDB4ODEsMHhjNywweDAwLDB4NzMsMHg4MCwweDE4LDB4YzIgfSwKKyAgMTYsIDB4ZDc3MCwgMCwgezB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxMCwweDg0LDB4MTAsMHgyMSwweGNjLDB4MjggfSwKKyAgMTYsIDB4ZDc4MCwgMCwgezB4NDIsMHgwMiwweDE0LDB4MTIsMHhjNSwweDEwLDB4MjEsMHg4NCwweDA0LDB4NDAsMHgwMCwweDFjLDB4ODAsMHg4NCwweDAwLDB4OTEgfSwKKyAgMTYsIDB4ZDc5MCwgMCwgezB4MDAsMHgwOCwweDczLDB4ODIsMHgxYywweDkwLDB4MDUsMHgwYywweDAxLDB4Y2YsMHgwYywweDQwLDB4MDIsMHgxNCwweDMwLDB4NDUgfSwKKyAgMTYsIDB4ZDdhMCwgMCwgezB4MjAsMHhhMSwweGMwLDB4MDgsMHg1MCwweDAyLDB4MTAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4NDUsMHgwYywweDgxLDB4MDAsMHgwMCwweDAxLDB4MDgsMHgwOCwweDAwLDB4MDUsMHgxOCwweDkxLDB4MDUgfSwKKyAgMTYsIDB4ZDdjMCwgMCwgezB4MDQsMHgwMCwweDAxLDB4MDQsMHg0MCwweDA2LDB4MTgsMHgwMCwweDAyLDB4MjQsMHg3MCwweDQwLDB4MDQsMHgwMCwweDQwLDB4MDAgfSwKKyAgMTYsIDB4ZDdkMCwgMCwgezB4MDEsMHhjNCwweDI0LDB4MDAsMHg4OCwweDA0LDB4MDAsMHg0MywweDEwLDB4MDAsMHg0MCwweDIwLDB4MDAsMHg4OCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDg1LDB4MjQsMHgzMSwweDAyLDB4MGMgfSwKKyAgMTYsIDB4ZDdmMCwgMCwgezB4MDIsMHhjMiwweDA0LDB4MTAsMHhjNCwweDI4LDB4MjEsMHg0OSwweDBjLDB4MDIsMHhjMCwweDA0LDB4YjIsMHgwNiwweDFjLDB4MjAgfSwKKyAgMTYsIDB4ZDgwMCwgMCwgezB4MDMsMHgwOCwweDUwLDB4NDIsMHgwYywweDgwLDB4MDEsMHgwNCwweGExLDB4NDksMHgwYywweDAwLDB4YzIsMHgwYywweDEwLDB4NDMgfSwKKyAgMTYsIDB4ZDgxMCwgMCwgezB4MjQsMHhhMCwweGMxLDB4MDgsMHgxMCwweDQyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDgyMCwgMCwgezB4MDAsMHgxMCwweGEyLDB4MDAsMHgyMCwweDAwLDB4Y2QsMHgwMCwweDAwLDB4NDAsMHgwNCwweDIwLDB4MDEsMHgxMCwweDAwLDB4MDkgfSwKKyAgMTYsIDB4ZDgzMCwgMCwgezB4MDQsMHgwMiwweDQ5LDB4MGMsMHg5MiwweDA3LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgzMywweDA4LDB4MGMsMHg5MiwweDQxLDB4MDAgfSwKKyAgMTYsIDB4ZDg0MCwgMCwgezB4ODAsMHhjYywweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHg0MywweDI4LDB4ODAsMHhjMiwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDg1MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDEwLDB4NTAsMHg4MCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDg2MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4ZjAsMHgwMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZDAsMHg4MCwweDgwLDB4MDAgfSwKKyAgMTYsIDB4ZDg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDkwLDB4ODAgfSwKKyAgMTYsIDB4ZDg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDg5MCwgMCwgezB4M2MsMHgzYywweDEwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4YTAsMHg4MCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDhhMCwgMCwgezB4MDAsMHgwMCwweDQwLDB4MTAsMHg5MCwweDgwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHg5MCwweDgwLDB4YTAgfSwKKyAgMTYsIDB4ZDhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MjAsMHg4MCwweDEwLDB4OTAsMHhhMCwweGEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4OGYgfSwKKyAgMTYsIDB4ZDhjMCwgMCwgezB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweGMyLDB4ZTQsMHg4MSwweDgwLDB4M2YgfSwKKyAgMTYsIDB4ZDhkMCwgMCwgezB4ZDksMHhiZiwweGQ5LDB4OTgsMHg3MSwweDlkLDB4NDIsMHg4MCwweDAwLDB4MjYsMHg3ZiwweGU2LDB4NzIsMHhhYiwweDdjLDB4M2EgfSwKKyAgMTYsIDB4ZDhlMCwgMCwgezB4NDAsMHgwMCwweDE5LDB4ODAsMHgyNiwweDQ4LDB4ZGQsMHgzYywweDkxLDB4YzAsMHgyNiwweDQwLDB4MjYsMHg0MCwweDM4LDB4MzEgfSwKKyAgMTYsIDB4ZDhmMCwgMCwgezB4ZGIsMHg2MSwweGMwLDB4MTksMHg5OSwweGJmLDB4YzksMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDkwMCwgMCwgezB4MDAsMHgwMCwweDEwLDB4ODAsMHgxMCwweDE0LDB4ODAsMHgwNiwweDg0LDB4OTcsMHg5NiwweDg2LDB4OTYsMHgwNiwweDkwLDB4MDAgfSwKKyAgMTYsIDB4ZDkxMCwgMCwgezB4M2YsMHhhMSwweDI4LDB4MDEsMHgwMiwweDkwLDB4MTIsMHgwMCwweDgwLDB4MTcsMHg4OCwweDE2LDB4OWUsMHg5MCwweDkwLDB4MDQgfSwKKyAgMTYsIDB4ZDkyMCwgMCwgezB4MTAsMHgwMCwweDM2LDB4YmUsMHhiZSwweDllLDB4ODYsMHgxNiwweDEyLDB4ODQsMHg4MCwweDEzLDB4YmUsMHg5NywweGFlLDB4ODAgfSwKKyAgMTYsIDB4ZDkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODIgfSwKKyAgMTYsIDB4ZDk0MCwgMCwgezB4ODEsMHg4NCwweDIxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGExLDB4MzgsMHgwMSwweDc4LDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDk1MCwgMCwgezB4MDgsMHhiOCwweDIxLDB4NzIsMHg2OCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg5OCwweDQ0LDB4ODgsMHg2OCwweDgwLDB4MDAgfSwKKyAgMTYsIDB4ZDk2MCwgMCwgezB4MDAsMHgwMCwweDA4LDB4YjgsMHgwMSwweDc4LDB4MDEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDk3MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZjcsMHhhZiwweGZmLDB4YzAgfSwKKyAgMTYsIDB4ZDk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYgfSwKKyAgMTYsIDB4ZDk5MCwgMCwgezB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGJmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4ZDliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSwKKyAgMTYsIDB4ZDljMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYgfSwKKyAgMTYsIDB4ZDlkMCwgMCwgezB4MmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZDllMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4YzAgfSwKKyAgMTYsIDB4ZDlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYgfSwKKyAgMTYsIDB4ZGEwMCwgMCwgezB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4ZGEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGJmLDB4YmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhkZiwweGJmLDB4ZGYgfSwKKyAgMTYsIDB4ZGEzMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZWYsMHhmZiwweGZmLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYgfSwKKyAgMTYsIDB4ZGE0MCwgMCwgezB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGE1MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4M2UsMHhhZiwweGZmLDB4YzAgfSwKKyAgMTYsIDB4ZGE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGZmLDB4ZGYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGU3LDB4ZmUgfSwKKyAgMTYsIDB4ZGE3MCwgMCwgezB4ZWYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZGYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4ZGE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhmNywweGZmLDB4ZmYgfSwKKyAgMTYsIDB4ZGFhMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmYsMHhmZiwweGRmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZjcgfSwKKyAgMTYsIDB4ZGFiMCwgMCwgezB4ZGYsMHhmNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGFjMCwgMCwgezB4MDAsMHgwMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4YzMsMHgyYywweDUwLDB4MDksMHgxNCwweDgyLDB4YzQsMHgzMCwweDkxLDB4YzcgfSwKKyAgMTYsIDB4ZGFkMCwgMCwgezB4MjQsMHg2MCwweDA4LDB4MWMsMHg4MiwweDA3LDB4MzQsMHg5MSwweDRjLDB4MDQsMHg0MywweDBhLDB4MTAsMHhjMiwweDg0LDB4MDQgfSwKKyAgMTYsIDB4ZGFlMCwgMCwgezB4OTEsMHg4NCwweDI0LDB4NTIsMHgwYiwweDE4LDB4MDIsMHhjNCwweDI0LDB4YjEsMHhjMywweDJjLDB4NDAsMHgwYSwweDEwLDB4ODAgfSwKKyAgMTYsIDB4ZGFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4MDIsMHgwMSwweGM0LDB4ODAgfSwKKyAgMTYsIDB4ZGIwMCwgMCwgezB4NjAsMHgyMCwweDFjLDB4MDgsMHg0NCwweDIyLDB4MDEsMHhjMCwweDg0LDB4NTAsMHgwMSwweDljLDB4MDgsMHgwNywweDBhLDB4MDEgfSwKKyAgMTYsIDB4ZGIxMCwgMCwgezB4YzAsMHg4NCwweDcyLDB4MjAsMHgxYywweGM4LDB4MDQsMHgxMiwweDExLDB4NDQsMHg4MCwweDQxLDB4MDEsMHgxYywweDgwLDB4MDcgfSwKKyAgMTYsIDB4ZGIyMCwgMCwgezB4MDgsMHgxMSwweGM0LDB4MDAsMHg3MCwweDAwLDB4MTAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4ODYsMHgyYywweDIxLDB4NGEsMHgwYywweDUyLDB4MDIsMHgxYywweDgwLDB4MDQsMHgyMCwweDIxLDB4Y2EgfSwKKyAgMTYsIDB4ZGI0MCwgMCwgezB4MTAsMHg2MiwweDAyLDB4MWMsMHg4MSwweDQ3LDB4MDQsMHgyMSwweGMzLDB4MjAsMHg1MSwweDAxLDB4MWMsMHg4MCwweDA0LDB4MmMgfSwKKyAgMTYsIDB4ZGI1MCwgMCwgezB4MDEsMHhjYiwweDA0LDB4NTIsMHgwMywweDE0LDB4NDAsMHhjNywweDIwLDB4MzEsMHhjOCwweDBjLDB4NTAsMHgyMiwweDEwLDB4ODAgfSwKKyAgMTYsIDB4ZGI2MCwgMCwgezB4MDEsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MjAsMHgwMSwweDg5LDB4MDAgfSwKKyAgMTYsIDB4ZGI3MCwgMCwgezB4NTIsMHgwMCwweDE0LDB4ODAsMHgwNCwweDI4LDB4MDEsMHg0NSwweDA0LDB4NjIsMHgwMCwweDEwLDB4ODAsMHg0NiwweDMwLDB4MTEgfSwKKyAgMTYsIDB4ZGI4MCwgMCwgezB4MGQsMHgwMCwweDQyLDB4MDEsMHgxNCwweGMwLDB4NDQsMHgwMCwweDExLDB4MDUsMHgwMCwweDUwLDB4MDAsMHgxYywweDAwLDB4NDQgfSwKKyAgMTYsIDB4ZGI5MCwgMCwgezB4MjgsMHgwMSwweDQ5LDB4MDAsMHg3MCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGJhMCwgMCwgezB4MDAsMHgwMCwweDA4LDB4YzAsMHgwMiwweDMwLDB4MGMsMHg4YywweDMwLDB4MjIsMHgwOCwweDg4LDB4YzIsMHgyNiwweDAwLDB4MDggfSwKKyAgMTYsIDB4ZGJiMCwgMCwgezB4ODAsMHgyMCwweDIyLDB4MGMsMHg4OCwweDgxLDB4MDIsMHgxMCwweGM0LDB4ODAsMHgxMCwweDIyLDB4MGMsMHgwOCwweDQwLDB4MDIgfSwKKyAgMTYsIDB4ZGJjMCwgMCwgezB4MTAsMHg0OCwweDg4LDB4MDEsMHgyMywweDA0LDB4YzgsMHg0MiwweDAyLDB4MTAsMHg0NiwweDhjLDB4MTIsMHgyMiwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGJkMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweGM4LDB4MjAgfSwKKyAgMTYsIDB4ZGJlMCwgMCwgezB4MTEsMHgwOSwweDAwLDB4ODAsMHg0MSwweDEwLDB4OTAsMHgwOCwweDI0LDB4MzAsMHgwOCwweDA0LDB4NDIsMHg0MSwweDAwLDB4OTAgfSwKKyAgMTYsIDB4ZGJmMCwgMCwgezB4YzQsMHgyMCwweDAwLDB4MDgsMHgwNCwweDQyLDB4MDAsMHgxMCwweDgwLDB4NGMsMHgyMCwweDIzLDB4MDksMHgwNCwweGMyLDB4NDMgfSwKKyAgMTYsIDB4ZGMwMCwgMCwgezB4MzAsMHg4MCwweDQwLDB4MjAsMHgxMSwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGMxMCwgMCwgezB4MDgsMHgwMCwweDA4LDB4ODEsMHgwMiwweDIwLDB4YzksMHg4YywweDEyLDB4MjAsMHgwNCwweDQ4LDB4NDEsMHgyMiwweDAwLDB4MDkgfSwKKyAgMTYsIDB4ZGMyMCwgMCwgezB4ODgsMHgzMCwweDIwLDB4MGMsMHg4OCwweDAzLDB4MGUsMHgwMCwweDQ5LDB4OGMsMHgxMCwweDIyLDB4MGMsMHg4OCwweDQwLDB4MmUgfSwKKyAgMTYsIDB4ZGMzMCwgMCwgezB4MDAsMHhjOSwweDg0LDB4MTMsMHgyMSwweDA0LDB4YzgsMHhjMywweDIyLDB4MDAsMHhjYiwweDhjLDB4MzIsMHgyMiwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGM0MCwgMCwgezB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAxLDB4MDIsMHgwMCwweDRiLDB4ODAgfSwKKyAgMTYsIDB4ZGM1MCwgMCwgezB4MzIsMHgyMSwweDA4LDB4ODgsMHg0MSwweDAyLDB4MTAsMHgwZiwweDgwLDB4MTAsMHgyMSwweDhjLDB4MDgsMHg0MSwweDAyLDB4MDAgfSwKKyAgMTYsIDB4ZGM2MCwgMCwgezB4ODcsMHg4NCwweDEwLDB4MjAsMHgwNCwweDg4LDB4MDAsMHgwMiwweDAwLDB4NDcsMHg4MCwweDEwLDB4MjEsMHgwYywweDg4LDB4NDEgfSwKKyAgMTYsIDB4ZGM3MCwgMCwgezB4MTYsMHgxMCwweDQ2LDB4ODAsMHgzMCwweDIwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGM4MCwgMCwgezB4MDAsMHgwMCwweDBhLDB4YzQsMHgyMiwweGExLDB4MDgsMHhhNCwweDcyLDB4MmEsMHgxNCwweDBhLDB4ODUsMHgwMiwweDgxLDB4ODQgfSwKKyAgMTYsIDB4ZGM5MCwgMCwgezB4YTAsMHg0MiwweDI4LDB4MWMsMHgwYSwweGM1LDB4MDIsMHg5MSwweDQwLDB4YjgsMHg3MywweDI5LDB4MTAsMHhjYSwweGM0LDB4MDIgfSwKKyAgMTYsIDB4ZGNhMCwgMCwgezB4YTEsMHg4MCwweGE0LDB4NDIsMHgyYSwweDE0LDB4Y2EsMHg4NSwweDIyLDB4OTEsMHg4MCwweGE4LDB4NzAsMHgyYSwweDE4LDB4MDIgfSwKKyAgMTYsIDB4ZGNiMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MWUsMHgwMSwweGM4LDB4ODAgfSwKKyAgMTYsIDB4ZGNjMCwgMCwgezB4NDMsMHgyMCwweDE4LDB4MDgsMHg0NSwweDNlLDB4MDEsMHgwYywweDgwLDB4NjEsMHgyMCwweDljLDB4NDgsMHgwNiwweDEyLDB4ODEgfSwKKyAgMTYsIDB4ZGNkMCwgMCwgezB4YzAsMHg4MCwweDczLDB4MDAsMHgxMCwweDg4LDB4MDYsMHgwMiwweDAxLDB4YzgsMHgwMCwweDQyLDB4MjAsMHgxMCwweGM4LDB4MDcgfSwKKyAgMTYsIDB4ZGNlMCwgMCwgezB4MDIsMHgxMSwweGNkLDB4ODAsMHg1MSwweDIwLDB4MTQsMHg4MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGNmMCwgMCwgezB4MDgsMHgwMCwweDAwLDB4YzQsMHgyNCwweDIxLDB4YzgsMHgwYywweDQyLDB4MDEsMHgxNCwweDAwLDB4MDAsMHgyOCwweDEwLDB4NGMgfSwKKyAgMTYsIDB4ZGQwMCwgMCwgezB4MDgsMHg1MiwweDAyLDB4MTQsMHg4MCwweDQ1LDB4MjQsMHgyOSwweDQwLDB4MDQsMHg3MiwweDAwLDB4MTAsMHhjMCwweDA1LDB4MjQgfSwKKyAgMTYsIDB4ZGQxMCwgMCwgezB4MTEsMHg0NCwweDA4LDB4NDMsMHgwMSwweDE0LDB4YzAsMHg0NywweDI0LDB4MjAsMHg0OCwweDA4LDB4NzIsMHgwMiwweDEwLDB4MDAgfSwKKyAgMTYsIDB4ZGQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHgwMCwweDA3LDB4MTAsMHgxMSwweDA2LDB4MDAgfSwKKyAgMTYsIDB4ZGQzMCwgMCwgezB4NzIsMHgwMCwweDE4LDB4ZDAsMHg0NiwweDIwLDB4MDEsMHg0ZCwweDAwLDB4NzEsMHg0MCwweDEwLDB4NTAsMHgwNywweDMwLDB4MTEgfSwKKyAgMTYsIDB4ZGQ0MCwgMCwgezB4YzMsMHgwMCwweDcxLDB4NDEsMHgxMCwweGIwLDB4MDUsMHgyYywweDAxLDB4NDksMHgwMCwweDQzLDB4MDAsMHgxYywweDUwLDB4NDUgfSwKKyAgMTYsIDB4ZGQ1MCwgMCwgezB4MzAsMHgwMSwweDhjLDB4MDAsMHg2MSwweDQwLDB4MTgsMHg0MiwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGQ2MCwgMCwgezB4MDAsMHgwMCwweDMwLDB4YzUsMHgwMCwweDIxLDB4YzAsMHgwYywweDQwLDB4MDEsMHgxNCwweDEyLDB4NDQsMHgwNCwweDMxLDB4ODQgfSwKKyAgMTYsIDB4ZGQ3MCwgMCwgezB4MjQsMHg0MCwweDgwLDB4MTQsMHhhMSwweGM3LDB4MDAsMHgwMSwweDQwLDB4MDgsMHg0MCwweDAxLDB4MTQsMHgyMCwweDA1LDB4MjAgfSwKKyAgMTYsIDB4ZGQ4MCwgMCwgezB4MTEsMHhjMCwweDAyLDB4NjAsMHg4MiwweDE4LDB4MDAsMHg4NywweDI0LDB4MTEsMHg0MCwweDA4LDB4NDAsMHg0MiwweDEwLDB4MDIgfSwKKyAgMTYsIDB4ZGQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MGMsMHg4MCwweGM0LDB4MjQgfSwKKyAgMTYsIDB4ZGRhMCwgMCwgezB4MzEsMHg0OCwweDBjLDB4MDAsMHgwMSwweDA4LDB4YzEsMHg0MSwweDAwLDB4MDAsMHg0OSwweDAwLDB4NDIsMHgwMywweDA4LDB4MTAgfSwKKyAgMTYsIDB4ZGRiMCwgMCwgezB4ODAsMHgyMCwweDIxLDB4MDksMHgwYywweDAyLDB4MDIsMHgxOCwweDgwLDB4YzEsMHgyNCwweDMwLDB4MDgsMHgwYywweDQyLDB4MDEgfSwKKyAgMTYsIDB4ZGRjMCwgMCwgezB4MTAsMHg4MCwweDgzLDB4MjAsMHgxMSwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGRkMCwgMCwgezB4MDAsMHgwMCwweDEwLDB4YzEsMHgwNCwweDIwLDB4NDgsMHgwYywweDEyLDB4NDIsMHgwNCwweDAwLDB4ODMsMHgwMCwweDMxLDB4NDggfSwKKyAgMTYsIDB4ZGRlMCwgMCwgezB4MDAsMHgwMiwweDQxLDB4MDQsMHhhMCwweDA3LDB4MGMsMHgyMCwweDQwLDB4MDAsMHgxMiwweGMyLDB4MGMsMHg4MCwweGMxLDB4MjAgfSwKKyAgMTYsIDB4ZGRmMCwgMCwgezB4MjAsMHhjOCwweDAwLDB4MTIsMHhjMSwweDBjLDB4YjAsMHg0MSwweDIwLDB4MDAsMHg0OSwweDA4LDB4MDIsMHg0MiwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4MCwweDAxLDB4MDAsMHgxMCwweDgxLDB4MDAgfSwKKyAgMTYsIDB4ZGUxMCwgMCwgezB4MzAsMHg0MCwweDA4LDB4MjAsMHgwMywweDAwLDB4MTAsMHhjMSwweDIwLDB4MDIsMHgwMCwweDA0LDB4ODAsMHg0MCwweDMwLDB4OTAgfSwKKyAgMTYsIDB4ZGUyMCwgMCwgezB4MDEsMHgxNCwweDAyLDB4NDAsMHgwNCwweDgwLDB4NDAsMHgyMCwweDAwLDB4MDksMHgwNCwweDMyLDB4MDEsMHgwOCwweGEwLDB4MDMgfSwKKyAgMTYsIDB4ZGUzMCwgMCwgezB4MDQsMHgxMCwweDA4LDB4MDAsMHgyMiwweDQwLDB4MDAsMHgwMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGU0MCwgMCwgezB4MDAsMHgwMCwweDMwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGU1MCwgMCwgezB4MDAsMHgxMCwweDgwLDB4MDAsMHhmMCwweDAwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHhmMCwweDEwLDB4YTAgfSwKKyAgMTYsIDB4ZGU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4ZjAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHg4MCwweDAwLDB4Y2MgfSwKKyAgMTYsIDB4ZGU3MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4M2MsMHgxMCwweGEwLDB4ODAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGU4MCwgMCwgezB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweGMwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAgfSwKKyAgMTYsIDB4ZGU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAgfSwKKyAgMTYsIDB4ZGVhMCwgMCwgezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4YywweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGViMCwgMCwgezB4MDAsMHgwMCwweDA5LDB4NGQsMHhiMSwweGU5LDB4MDAsMHgyNiwweDQwLDB4MmEsMHg3ZiwweGUzLDB4ZjIsMHg1NCwweDk4LDB4YzAgfSwKKyAgMTYsIDB4ZGVjMCwgMCwgezB4M2YsMHhlNiwweDQwLDB4MDAsMHgwMSwweDQyLDB4OTEsMHhkMCwweGMwLDB4MTMsMHhlNSwweDg3LDB4NjMsMHg4MywweGI4LDB4Y2QgfSwKKyAgMTYsIDB4ZGVkMCwgMCwgezB4ZjksMHgwMCwweDI2LDB4N2YsMHgwMCwweDAwLDB4MzUsMHgyZSwweGQ1LDB4MDMsMHg0MCwweDNmLDB4ZDksMHhiZiwweGIxLDB4ODAgfSwKKyAgMTYsIDB4ZGVlMCwgMCwgezB4MDEsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAyLDB4MTYsMHgxNCwweDAwLDB4MWMgfSwKKyAgMTYsIDB4ZGVmMCwgMCwgezB4YTgsMHgzZiwweDg4LDB4MTYsMHgwMCwweDgwLDB4ODQsMHg4MCwweDM3LDB4OWUsMHhiYSwweGEwLDB4NTAsMHgxMCwweDAyLDB4MTIgfSwKKyAgMTYsIDB4ZGYwMCwgMCwgezB4MDAsMHgxNywweDk2LDB4OTcsMHgyNiwweDUwLDB4MTAsMHgxMCwweDgyLDB4ODAsMHgxZSwweDgwLDB4ZGUsMHhiZSwweDk0LDB4MTQgfSwKKyAgMTYsIDB4ZGYxMCwgMCwgezB4MDIsMHgxMCwweDgwLDB4MTcsMHhiZSwweDgxLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhhOCwweDQ0LDB4OTQsMHgyOCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDggfSwKKyAgMTYsIDB4ZGYzMCwgMCwgezB4OTQsMHgyMSwweDQ0LDB4NTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODQsMHg0MiwweDQxLDB4MDEsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGY0MCwgMCwgezB4MDAsMHgwOCwweGExLDB4NzIsMHgyMywweDQxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGI4LDB4MDEsMHg3OCwweDMyLDB4NDAgfSwKKyAgMTYsIDB4ZGY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4ZGY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmNywweGZlLDB4ZDcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGQ3LDB4ZGYgfSwKKyAgMTYsIDB4ZGY3MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM3LDB4N2YgfSwKKyAgMTYsIDB4ZGY4MCwgMCwgezB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGY5MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFlLDB4ZmYsMHhkZSwweDc3LDB4YzAgfSwKKyAgMTYsIDB4ZGZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGVmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYgfSwKKyAgMTYsIDB4ZGZiMCwgMCwgezB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZGZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4ZGZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MWYsMHhjZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4YmYgfSwKKyAgMTYsIDB4ZGZlMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGJmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYgfSwKKyAgMTYsIDB4ZGZmMCwgMCwgezB4ZmYsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTAwMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAgfSwKKyAgMTYsIDB4ZTAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGZmLDB4MWYgfSwKKyAgMTYsIDB4ZTAyMCwgMCwgezB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhkZiwweGZmLDB4Y2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSwKKyAgMTYsIDB4ZTA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhiZiwweGFmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSwKKyAgMTYsIDB4ZTA1MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNlLDB4ZGUsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYgfSwKKyAgMTYsIDB4ZTA2MCwgMCwgezB4ZmYsMHhmNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTA3MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4N2YsMHhmZiwweGZmLDB4YzAgfSwKKyAgMTYsIDB4ZTA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZlLDB4YmUgfSwKKyAgMTYsIDB4ZTA5MCwgMCwgezB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhmZiwweGQ3LDB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBlMCwgMCwgezB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg0MywweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTcxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZThmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTljMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZTlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDIsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQzLDB4ODAgfSwKKyAgMTYsIDB4ZWYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZWZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjAwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjAyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjcxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjhmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4Zjk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjljMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZjlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NWYsMHhhNywweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMgfSwKKyAgMTYsIDB4ZmQ0MCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMTYsIDB4ZmQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEgfSwKKyAgMTYsIDB4ZmQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDUsMHgzMCwweDAwLDB4YTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDEgfSwKKyAgMTYsIDB4ZmQ5MCwgMCwgezB4MDAsMHgwMCwweDZiLDB4OTcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgNCwgMHhmZGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAwICwgMHgwMDAwLCAxLCB7MH0KK307CisvLyBWRVJTSU9OPSAxLjAuMC4xOTEKKy8vIERBVEU9IDIwMDJvY3QyOAorc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19IZXhNaWRpRnc2MltdID0geworICAgMywweDAwMDAsMCx7MHgwMiwweDQ2LDB4Yjl9LAorICAgMywweDAwMDMsMCx7MHgwMiwweDBmLDB4ZmR9LAorICAgMywweDAwMGIsMCx7MHgwMiwweDRlLDB4MGZ9LAorICAgMywweDAwMTMsMCx7MHgwMiwweDE3LDB4ZmR9LAorICAgMywweDAwMWIsMCx7MHgwMiwweDRlLDB4MTJ9LAorICAgMywweDAwMjMsMCx7MHgwMiwweDRkLDB4ZWZ9LAorICAgMywweDAwMmIsMCx7MHgwMiwweDQ4LDB4MDB9LAorICAgMywweDAwMzMsMCx7MHgwMiwweDRkLDB4ZTZ9LAorICAgMywweDAwM2IsMCx7MHgwMiwweDRkLDB4ZjZ9LAorICAgMywweDAwNDMsMCx7MHgwMiwweDQ5LDB4MDB9LAorICAgMywweDAwNGIsMCx7MHgwMiwweDRlLDB4MDN9LAorICAgMywweDAwNTMsMCx7MHgwMiwweDQ4LDB4ZmF9LAorICAgMywweDAwNWIsMCx7MHgwMiwweDRkLDB4ZmR9LAorICAgMywweDAwNjMsMCx7MHgwMiwweDRlLDB4MDd9LAorICAxNiwweDA1MDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDExLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn0sCisgIDE2LDB4MDUxMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4MDgsMHgwMiwweDA1LDB4MDEsMHgwMCwweDgwLDB4MzIsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwNTIwLDAsezB4MDEsMHgwMSwweDAwLDB4MDAsMHgwYSwweDI0LDB4MDEsMHgwMCwweDAxLDB4NTYsMHgwMCwweDAyLDB4MDEsMHgwMiwweDBjLDB4MjR9LAorICAxNiwweDA1MzAsMCx7MHgwMiwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MjQsMHgwNiwweDA1LDB4MDEsMHgwMn0sCisgIDE2LDB4MDU0MCwwLHsweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgyNCwweDAzLDB4MDIsMHgwNCwweDAzLDB4MDAsMHgwNSwweDAwfSwKKyAgMTYsMHgwNTUwLDAsezB4MGMsMHgyNCwweDAyLDB4MDMsMHgwNSwweDAyLDB4MDAsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHgyNCwweDA2LDB4MDZ9LAorICAxNiwweDA1NjAsMCx7MHgwMywweDAyLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMH0sCisgIDE2LDB4MDU3MCwwLHsweDAwLDB4MDksMHgyNCwweDAzLDB4MDQsMHgwMSwweDAxLDB4MDAsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxLDB4MDAsMHgwMCwweDAxfSwKKyAgMTYsMHgwNTgwLDAsezB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAxLDB4MDEsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDF9LAorICAxNiwweDA1OTAsMCx7MHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYn0sCisgIDE2LDB4MDVhMCwwLHsweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDBhLDB4MDUsMHg4NCwweDAxLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxfSwKKyAgMTYsMHgwNWIwLDAsezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA1LDB4MDAsMHgwOSwweDA0LDB4MDF9LAorICAxNiwweDA1YzAsMCx7MHgwMiwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMSwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMn0sCisgIDE2LDB4MDVkMCwwLHsweDAxLDB4MDIsMHgwMywweDE4LDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1fSwKKyAgMTYsMHgwNWUwLDAsezB4MGEsMHgwNSwweDQ2LDB4MDIsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDV9LAorICAxNiwweDA1ZjAsMCx7MHg4ZiwweDAxLDB4MDMsMHgwMCwweDAxLDB4MDUsMHgwMCwweDA5LDB4MDQsMHgwMiwweDAwLDB4MDAsMHgwMSwweDAyLDB4MDAsMHgwMH0sCisgIDE2LDB4MDYwMCwwLHsweDA5LDB4MDQsMHgwMiwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwfSwKKyAgMTYsMHgwNjEwLDAsezB4MGUsMHgyNCwweDAyLDB4MDEsMHgwNiwweDAyLDB4MTAsMHgwMiwweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDA5LDB4MDV9LAorICAxNiwweDA2MjAsMCx7MHg4YywweDA1LDB4NGMsMHgwMiwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNH0sCisgIDE2LDB4MDYzMCwwLHsweDAyLDB4MDIsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwZSwweDI0fSwKKyAgMTYsMHgwNjQwLDAsezB4MDIsMHgwMSwweDA2LDB4MDMsMHgxOCwweDAyLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDksMHgwNSwweDhjLDB4MDV9LAorICAxNiwweDA2NTAsMCx7MHg3MiwweDAzLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwM30sCisgIDE2LDB4MDY2MCwwLHsweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxfSwKKyAgMTYsMHgwNjcwLDAsezB4MDIsMHgwMiwweDEwLDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4OGN9LAorICAxNiwweDA2ODAsMCx7MHgwNSwweDg0LDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMn0sCisgIDE2LDB4MDY5MCwwLHsweDA0LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyfSwKKyAgMTYsMHgwNmEwLDAsezB4MDEsMHgwMiwweDAzLDB4MTgsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDV9LAorICAxNiwweDA2YjAsMCx7MHg4YywweDA1LDB4NDYsMHgwMiwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNH0sCisgIDE2LDB4MDZjMCwwLHsweDAzLDB4MDAsMHgwMCwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDksMHgyNCwweDAxLDB4MDAsMHgwMSwweDA5LDB4MDAsMHgwMSwweDA0fSwKKyAgMTYsMHgwNmQwLDAsezB4MDksMHgwNCwweDA0LDB4MDAsMHgwMiwweDAxLDB4MDMsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDAsMHgwMSwweDI0LDB4MDB9LAorICAxNiwweDA2ZTAsMCx7MHgwNiwweDI0LDB4MDIsMHgwMSwweDA3LDB4MDAsMHgwOSwweDI0LDB4MDMsMHgwMiwweDA4LDB4MDEsMHgwNywweDAxLDB4MDAsMHgwNn0sCisgIDE2LDB4MDZmMCwwLHsweDI0LDB4MDIsMHgwMiwweDA5LDB4MDAsMHgwOSwweDI0LDB4MDMsMHgwMSwweDBhLDB4MDEsMHgwOSwweDAxLDB4MDAsMHgwOSwweDA1fSwKKyAgMTYsMHgwNzAwLDAsezB4MDEsMHgwMiwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDI1LDB4MDEsMHgwMSwweDA3LDB4MDksMHgwNSwweDgxLDB4MDJ9LAorICAxNiwweDA3MTAsMCx7MHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgyNSwweDAxLDB4MDEsMHgwYSwweDA0LDB4MDMsMHgwOSwweDA0LDB4MTgsMHgwM30sCisgIDE2LDB4MDcyMCwwLHsweDQ1LDB4MDAsMHg2ZCwweDAwLDB4NjEsMHgwMCwweDY3LDB4MDAsMHg2OSwweDAwLDB4NjMsMHgwMCwweDIwLDB4MDAsMHg0NywweDAwfSwKKyAgMTYsMHgwNzMwLDAsezB4NmQsMHgwMCwweDYyLDB4MDAsMHg0OCwweDAwLDB4MjIsMHgwMywweDQ1LDB4MDAsMHg2ZCwweDAwLDB4NjEsMHgwMCwweDY3LDB4MDB9LAorICAxNiwweDA3NDAsMCx7MHg2OSwweDAwLDB4NjMsMHgwMCwweDIwLDB4MDAsMHg0NSwweDAwLDB4NGQsMHgwMCwweDQ5LDB4MDAsMHgyMCwweDAwLDB4MzYsMHgwMH0sCisgIDE2LDB4MDc1MCwwLHsweDdjLDB4MDAsMHgzMiwweDAwLDB4MjAsMHgwMCwweDZkLDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwfSwKKyAgMTYsMHgwNzYwLDAsezB4NjYsMHgwMCwweDY5LDB4MDAsMHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NzQsMHgwMCwweDY5LDB4MDB9LAorICAxNiwweDA3NzAsMCx7MHg2ZiwweDAwLDB4NmUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMH0sCisgIDE2LDB4MDc4MCwwLHsweDY3LDB4MDAsMHgyMiwweDAzLDB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMCwweDcyLDB4MDAsMHg2NiwweDAwfSwKKyAgMTYsMHgwNzkwLDAsezB4NjEsMHgwMCwweDYzLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDB9LAorICAgNiwweDA3YTAsMCx7MHg2ZSwweDAwLDB4NjcsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDA3YTYsMCx7MHhlNCwweDkwLDB4NzYsMHg2NiwweGYwLDB4MTIsMHg0NCwweGFkLDB4MjAsMHgyNiwweDEzLDB4OTAsMHg3NiwweDY2LDB4ZTAsMHhjM30sCisgIDE2LDB4MDdiNiwwLHsweDk0LDB4MDIsMHg1MCwweDBhLDB4ZTAsMHgwNCwweGYwLDB4ZDIsMHg0MiwweDEyLDB4NGIsMHg3ZiwweDgwLDB4ZWEsMHgzMCwweDI2fSwKKyAgMTYsMHgwN2M2LDAsezB4MDUsMHgxMiwweDI4LDB4MDEsMHhjMiwweDI2LDB4MzAsMHgyNSwweDJiLDB4OTAsMHg3NiwweDk2LDB4ZTAsMHg1NCwweGZjLDB4ZjB9LAorICAxNiwweDA3ZDYsMCx7MHg5MCwweDgwLDB4MDMsMHhmMCwweDEyLDB4MTQsMHg5NiwweDkwLDB4NzYsMHg5NiwweGUwLDB4NDQsMHgwMywweGYwLDB4OTAsMHg4MH0sCisgIDE2LDB4MDdlNiwwLHsweDAzLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg2NywweGYwLDB4OTAsMHg3NiwweDY3LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhiNCwweDRifSwKKyAgMTAsMHgwN2Y2LDAsezB4ZjYsMHgxMiwweDQ3LDB4ZmEsMHgxMiwweDQxLDB4MWIsMHg4MCwweGM1LDB4MjJ9LAorICAxNiwweDA4MDAsMCx7MHhlNCwweDkwLDB4NzYsMHgzMSwweGYwLDB4OTAsMHg3NiwweDMxLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZn0sCisgIDE2LDB4MDgxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmQsMHhlZSwweDZkfSwKKyAgMTYsMHgwODIwLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDBiLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgzMSwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9LAorICAxNiwweDA4MzAsMCx7MHhlZiwweGI0LDB4MGIsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwM30sCisgIDE2LDB4MDg0MCwwLHsweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MzMsMHhmMCwweDI0fSwKKyAgMTYsMHgwODUwLDAsezB4ZjAsMHg2MCwweDBhLDB4MjQsMHgwZSwweDYwLDB4MDIsMHg4MSwweDg3LDB4MTIsMHg0YiwweGM3LDB4MjIsMHg5MCwweDdmLDB4ZWR9LAorICAxNiwweDA4NjAsMCx7MHhlMCwweDY0LDB4MDUsMHg3MCwweDUxLDB4OTAsMHg3NiwweDE4LDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3NiwweDM3LDB4NzQsMHgwMX0sCisgIDE2LDB4MDg3MCwwLHsweGYwLDB4OTAsMHg3NiwweDM5LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDIxLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgyMCwweGYwfSwKKyAgMTYsMHgwODgwLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwLDB4MmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9LAorICAxNiwweDA4OTAsMCx7MHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZH0sCisgIDE2LDB4MDhhMCwwLHsweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3NiwweDIxLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2fSwKKyAgMTYsMHgwOGIwLDAsezB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHg2NCwweDA2LDB4NzAsMHg1MiwweDkwLDB4NzZ9LAorICAxNiwweDA4YzAsMCx7MHgxOCwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzYsMHgzNywweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzOSwweDc0LDB4MGEsMHhmMH0sCisgIDE2LDB4MDhkMCwwLHsweDkwLDB4NzYsMHgyMSwweGYwLDB4OTAsMHg3NiwweDIwLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwfSwKKyAgMTYsMHgwOGUwLDAsezB4MmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDA4ZjAsMCx7MHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZCwweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3Nn0sCisgIDE2LDB4MDkwMCwwLHsweDIxLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxfSwKKyAgMTYsMHgwOTEwLDAsezB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDA5MjAsMCx7MHhmNSwweDgzLDB4ZTAsMHg5MCwweDcyLDB4MjksMHhmMCwweGU0LDB4OTAsMHg3NiwweDNiLDB4ZjAsMHg5MCwweDc2LDB4MjEsMHhlMH0sCisgIDE2LDB4MDkzMCwwLHsweGZlLDB4ZWYsMHg2ZSwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVifSwKKyAgMTYsMHgwOTQwLDAsezB4ZTAsMHgxNCwweDYwLDB4MTMsMHgxNCwweDcwLDB4MDIsMHgyMSwweGUyLDB4MjQsMHgwMiwweDYwLDB4MDIsMHg4MSwweDdmLDB4OTB9LAorICAxNiwweDA5NTAsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MTQsMHg3MCwweDdjLDB4OTAsMHg3Zn0sCisgIDE2LDB4MDk2MCwwLHsweGVhLDB4ZTAsMHhmNCwweDcwLDB4NDgsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3NiwweDM5fSwKKyAgMTYsMHgwOTcwLDAsezB4ZTAsMHhmZSwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmQsMHhjMywweDllLDB4NTAsMHgyYiwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmV9LAorICAxNiwweDA5ODAsMCx7MHgwNCwweGYwLDB4NzQsMHhjMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZlLDB4ZWQsMHg3NX0sCisgIDE2LDB4MDk5MCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg5MCwweDc2fSwKKyAgMTYsMHgwOWEwLDAsezB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGM3LDB4OTAsMHg3NiwweDNmLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdlLDB4YzB9LAorICAxNiwweDA5YjAsMCx7MHhlMCwweGZlLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4MDljMCwwLHsweGVlLDB4ZjAsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwLDB4NzYsMHgzZSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MDUsMHhlNCwweDkwfSwKKyAgMTYsMHgwOWQwLDAsezB4NzYsMHgzZSwweGYwLDB4OTAsMHg3NiwweDNmLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9LAorICAxNiwweDA5ZTAsMCx7MHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NzAsMHgwMiwweDQxLDB4YTMsMHgxNCwweDcwLDB4MDIsMHg2MX0sCisgIDE2LDB4MDlmMCwwLHsweDNmLDB4MTQsMHg3MCwweDAyLDB4NjEsMHhkYiwweDI0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHg3NywweDkwLDB4N2YsMHhlYSwweGUwfSwKKyAgMTYsMHgwYTAwLDAsezB4ZjQsMHg3MCwweDZiLDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOSwweGUwLDB4ZmZ9LAorICAxNiwweDBhMTAsMCx7MHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDUwLDB4NGUsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMH0sCisgIDE2LDB4MGEyMCwwLHsweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhfSwKKyAgMTYsMHgwYTMwLDAsezB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDNiLDB4ZTB9LAorICAxNiwweDBhNDAsMCx7MHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZX0sCisgIDE2LDB4MGE1MCwwLHsweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwfSwKKyAgMTYsMHgwYTYwLDAsezB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4NDAsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2V9LAorICAxNiwweDBhNzAsMCx7MHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4Mn0sCisgIDE2LDB4MGE4MCwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhfSwKKyAgMTYsMHgwYTkwLDAsezB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDQxLDB4NzR9LAorICAxNiwweDBhYTAsMCx7MHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2NiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3Nn0sCisgIDE2LDB4MGFiMCwwLHsweDIwLDB4ZjAsMHg5MCwweDc2LDB4MzksMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyfSwKKyAgMTYsMHgwYWMwLDAsezB4ODEsMHg4ZSwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDBhZDAsMCx7MHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MGFlMCwwLHsweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1fSwKKyAgMTYsMHgwYWYwLDAsezB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjV9LAorICAxNiwweDBiMDAsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhMn0sCisgIDE2LDB4MGIxMCwwLHsweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlfSwKKyAgMTYsMHgwYjIwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzV9LAorICAxNiwweDBiMzAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MH0sCisgIDE2LDB4MGI0MCwwLHsweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2NiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2fSwKKyAgMTYsMHgwYjUwLDAsezB4MzksMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyLDB4ODEsMHg4ZSwweDkwLDB4NzZ9LAorICAxNiwweDBiNjAsMCx7MHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMH0sCisgIDE2LDB4MGI3MCwwLHsweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmfSwKKyAgMTYsMHgwYjgwLDAsezB4ZjAsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2V9LAorICAxNiwweDBiOTAsMCx7MHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4MGJhMCwwLHsweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhMiwweDkwLDB4N2UsMHhjMCwweGUwfSwKKyAgMTYsMHgwYmIwLDAsezB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDBiYzAsMCx7MHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNH0sCisgIDE2LDB4MGJkMCwwLHsweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0fSwKKyAgMTYsMHgwYmUwLDAsezB4NzAsMHg2NiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2LDB4MzksMHhlMCwweGZmLDB4OTB9LAorICAxNiwweDBiZjAsMCx7MHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyLDB4ODEsMHg4ZSwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNH0sCisgIDE2LDB4MGMwMCwwLHsweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwfSwKKyAgMTYsMHgwYzEwLDAsezB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4M2J9LAorICAxNiwweDBjMjAsMCx7MHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZn0sCisgIDE2LDB4MGMzMCwwLHsweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwfSwKKyAgMTYsMHgwYzQwLDAsezB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhMiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjB9LAorICAxNiwweDBjNTAsMCx7MHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZn0sCisgIDE2LDB4MGM2MCwwLHsweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgwYzcwLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTB9LAorICAxNSwweDBjODAsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDBjOGYsMCx7MHg0MSwweDc2LDB4NjgsMHgwMSwweDQxLDB4NzYsMHg2YSwweDAyLDB4NDEsMHg3NiwweDZiLDB4MGEsMHhjMSwweDIwLDB4YzEsMHgyMX0sCisgICAyLDB4MGM5ZiwwLHsweGMxLDB4MmZ9LAorICAgNCwweDBjYTEsMCx7MHg0MSwweDc2LDB4MjMsMHgwMH0sCisgIDE2LDB4MGNhNSwwLHsweDQxLDB4NzIsMHgwMSwweDAxLDB4NDUsMHg3MiwweDA1LDB4MDAsMHgwMiwweGM5LDB4MDAsMHgwMCwweDQ1LDB4NzIsMHgwYSwweDAwfSwKKyAgMTYsMHgwY2I1LDAsezB4MDEsMHgwMiwweDAzLDB4MDQsMHg0ZCwweDcyLDB4MGYsMHhkMSwweDAwLDB4ZDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBjYzUsMCx7MHgyOCwweDI4LDB4MDksMHgwMCwweDRkLDB4NzIsMHgxYywweDAxLDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwN30sCisgIDE2LDB4MGNkNSwwLHsweDA4LDB4MDksMHgwYSwweDBiLDB4NDEsMHg3MiwweDJlLDB4MjIsMHg0MSwweDcyLDB4MmYsMHgyMywweDQxLDB4NzIsMHgzMCwweDIwfSwKKyAgMTYsMHgwY2U1LDAsezB4NDEsMHg3MiwweDMxLDB4MjEsMHg2MiwweGQyLDB4NzIsMHgzYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBjZjUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQwNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDE1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkMjUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQzNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDQ1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkNTUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQ2NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDc1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9LAorICAxNiwweDBkODUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX0sCisgIDE2LDB4MGQ5NSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfSwKKyAgMTYsMHgwZGE1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9LAorICAxNiwweDBkYjUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn0sCisgIDE2LDB4MGRjNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfSwKKyAgMTYsMHgwZGQ1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9LAorICAxNiwweDBkZTUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn0sCisgIDE2LDB4MGRmNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfSwKKyAgMTYsMHgwZTA1LDAsezB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9LAorICAxNiwweDBlMTUsMCx7MHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM30sCisgIDE2LDB4MGUyNSwwLHsweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfSwKKyAgMTYsMHgwZTM1LDAsezB4MDMsMHgwMywweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9LAorICAxNiwweDBlNDUsMCx7MHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH0sCisgIDE2LDB4MGU1NSwwLHsweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fSwKKyAgMTYsMHgwZTY1LDAsezB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9LAorICAxNiwweDBlNzUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNX0sCisgIDE2LDB4MGU4NSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1fSwKKyAgMTYsMHgwZTk1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDV9LAorICAxNiwweDBlYTUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDYsMHgwNn0sCisgIDE2LDB4MGViNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2fSwKKyAgMTYsMHgwZWM1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDZ9LAorICAxNiwweDBlZDUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNn0sCisgIDE2LDB4MGVlNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNywweDA3LDB4MDcsMHgwOCwweDA4fSwKKyAgMTYsMHgwZWY1LDAsezB4MDgsMHgwOSwweDA5LDB4MDksMHgwYSwweDBhLDB4MGEsMHgwYiwweDBiLDB4MGIsMHgwYywweDBjLDB4MGMsMHgwZCwweDBkLDB4MGR9LAorICAxNiwweDBmMDUsMCx7MHgwZSwweDBlLDB4MGUsMHgwZiwweDBmLDB4MGYsMHgxMCwweDEwLDB4MTAsMHgxMSwweDExLDB4MTEsMHgxMiwweDEyLDB4MTIsMHgxM30sCisgIDE2LDB4MGYxNSwwLHsweDEzLDB4MTMsMHgxNCwweDE0LDB4MTQsMHgxNSwweDE1LDB4MTUsMHgxNiwweDE2LDB4MTYsMHgxNywweDE3LDB4MTcsMHgxOCwweDE4fSwKKyAgMTYsMHgwZjI1LDAsezB4MTgsMHgxOSwweDE5LDB4MTksMHgxOSwweDFhLDB4MWEsMHgxYSwweDFhLDB4MWIsMHgxYiwweDFiLDB4MWIsMHgxYywweDFjLDB4MWN9LAorICAxNiwweDBmMzUsMCx7MHgxYywweDFkLDB4MWQsMHgxZCwweDFkLDB4MWUsMHgxZSwweDFlLDB4MWUsMHgxZiwweDFmLDB4MWYsMHgxZiwweDIwLDB4MjAsMHgyMH0sCisgIDE2LDB4MGY0NSwwLHsweDIxLDB4MjEsMHgyMSwweDIyLDB4MjIsMHgyMiwweDIzLDB4MjMsMHgyNCwweDI0LDB4MjUsMHgyNSwweDI2LDB4MjYsMHgyNywweDI3fSwKKyAgMTYsMHgwZjU1LDAsezB4MjgsMHgyOCwweDI5LDB4MjksMHgyYSwweDJhLDB4MmIsMHgyYiwweDJjLDB4MmMsMHgyZCwweDJkLDB4MmUsMHgyZSwweDJmLDB4MmZ9LAorICAxNiwweDBmNjUsMCx7MHgzMCwweDMwLDB4MzEsMHgzMSwweDMyLDB4MzIsMHgzMywweDMzLDB4MzQsMHgzNCwweDM1LDB4MzUsMHgzNiwweDM2LDB4MzcsMHgzN30sCisgIDE2LDB4MGY3NSwwLHsweDM4LDB4MzgsMHgzOSwweDM5LDB4M2EsMHgzYSwweDNiLDB4M2MsMHgzZCwweDNlLDB4M2YsMHg0MCwweDQxLDB4NDIsMHg0MywweDQ0fSwKKyAgMTYsMHgwZjg1LDAsezB4NDUsMHg0NiwweDQ3LDB4NDgsMHg0OSwweDQ5LDB4NGEsMHg0YiwweDRiLDB4NGMsMHg0ZCwweDRlLDB4NGYsMHg1MCwweDUxLDB4NTJ9LAorICAxNiwweDBmOTUsMCx7MHg1MywweDU0LDB4NTUsMHg1NSwweDU2LDB4NTYsMHg1NywweDU3LDB4NTgsMHg1YSwweDViLDB4NWQsMHg1ZSwweDVmLDB4NjEsMHg2Mn0sCisgIDE2LDB4MGZhNSwwLHsweDYzLDB4NjQsMHg2NSwweDY2LDB4NjcsMHg2OCwweDY5LDB4NmEsMHg2YiwweDZjLDB4NmQsMHg2ZiwweDcxLDB4NzIsMHg3MywweDc0fSwKKyAgMTYsMHgwZmI1LDAsezB4NzUsMHg3NiwweDc3LDB4NzgsMHg3OSwweDdhLDB4N2IsMHg3YywweDdlLDB4ODAsMHgwMSwweDM3LDB4MDEsMHgwMSwweDM4LDB4MDB9LAorICAgMSwweDBmYzUsMCx7MHgwMH0sCisgIDE2LDB4MGZjNiwwLHsweGU0LDB4ZmYsMHg3NCwweDQ2LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDIwfSwKKyAgMTYsMHgwZmQ2LDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDRlLDB4MmYsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDBmZTYsMCx7MHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4M30sCisgICA2LDB4MGZmNiwwLHsweGVlLDB4ZjAsMHgwZiwweGJmLDB4MDgsMHhjY30sCisgICAxLDB4MGZmYywwLHsweDIyfSwKKyAgIDMsMHgwZmZkLDAsezB4YzIsMHg4OSwweDMyfSwKKyAgMTYsMHgxMDAwLDAsezB4ZTQsMHg5MCwweDc2LDB4MmMsMHhmMCwweDkwLDB4NzYsMHgyYywweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGZ9LAorICAxNiwweDEwMTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWQsMHhlMCwweGZkLDB4ZWUsMHg2ZH0sCisgIDE2LDB4MTAyMCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwYiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MmMsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fSwKKyAgMTYsMHgxMDMwLDAsezB4ZWYsMHhiNCwweDBiLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MDN9LAorICAxNiwweDEwNDAsMCx7MHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDJlLDB4ZjAsMHgyNH0sCisgIDE2LDB4MTA1MCwwLHsweGYwLDB4NjAsMHgwYSwweDI0LDB4MGYsMHg2MCwweDAyLDB4ODEsMHg3ZCwweDEyLDB4NGIsMHhhNCwweDIyLDB4OTAsMHg3ZiwweGVkfSwKKyAgMTYsMHgxMDYwLDAsezB4ZTAsMHg2NCwweDA1LDB4NzAsMHg1MSwweDkwLDB4NzYsMHgxOCwweDc0LDB4MDUsMHhmMCwweDkwLDB4NzYsMHgzOCwweDc0LDB4MDF9LAorICAxNiwweDEwNzAsMCx7MHhmMCwweDkwLDB4NzYsMHgzYSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgxYywweGYwLDB4ZTQsMHg5MCwweDc2LDB4MWIsMHhmMH0sCisgIDE2LDB4MTA4MCwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MCwweDJmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fSwKKyAgMTYsMHgxMDkwLDAsezB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmR9LAorICAxNiwweDEwYTAsMCx7MHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzYsMHgxYywweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3Nn0sCisgIDE2LDB4MTBiMCwwLHsweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMSwweDkwLDB4N2YsMHhlZCwweGUwLDB4NjQsMHgwNiwweDcwLDB4NTIsMHg5MCwweDc2fSwKKyAgMTYsMHgxMGMwLDAsezB4MTgsMHg3NCwweDA2LDB4ZjAsMHg5MCwweDc2LDB4MzgsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4M2EsMHg3NCwweDBhLDB4ZjB9LAorICAxNiwweDEwZDAsMCx7MHg5MCwweDc2LDB4MWMsMHhmMCwweDkwLDB4NzYsMHgxYiwweDc0LDB4MDMsMHhmMCwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MH0sCisgIDE2LDB4MTBlMCwwLHsweDJmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgxMGYwLDAsezB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmQsMHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzZ9LAorICAxNiwweDExMDAsMCx7MHgxYywweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMX0sCisgIDE2LDB4MTExMCwwLHsweGU0LDB4OTAsMHg3NiwweDFlLDB4ZjAsMHg5MCwweDc2LDB4MWMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZSwweDZmfSwKKyAgMTYsMHgxMTIwLDAsezB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NjB9LAorICAxNiwweDExMzAsMCx7MHgxMywweDE0LDB4NzAsMHgwMiwweDIxLDB4YmYsMHgyNCwweDAyLDB4NjAsMHgwMiwweDgxLDB4NzUsMHg5MCwweDdmLDB4YjQsMHhlMH0sCisgIDE2LDB4MTE0MCwwLHsweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHg2YiwweDkwLDB4N2YsMHhlYSwweGUwfSwKKyAgMTYsMHgxMTUwLDAsezB4ZjQsMHg3MCwweDRhLDB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmZ9LAorICAxNiwweDExNjAsMCx7MHg5MCwweDc2LDB4MWIsMHhlMCwweGZkLDB4YzMsMHg5ZiwweDUwLDB4MmIsMHhlZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYn0sCisgIDE2LDB4MTE3MCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwfSwKKyAgMTYsMHgxMTgwLDAsezB4NzQsMHgwMCwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTB9LAorICAxNiwweDExOTAsMCx7MHgwNCwweGYwLDB4ODAsMHhjNywweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweGVlLDB4NzUsMHhmMH0sCisgIDE2LDB4MTFhMCwwLHsweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwfSwKKyAgMTYsMHgxMWIwLDAsezB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTB9LAorICAxNiwweDExYzAsMCx7MHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdlLDB4NzAsMHgwMiwweDQxLDB4N2UsMHgxNCwweDcwLDB4MDIsMHg2MSwweDIzLDB4MTQsMHg3MH0sCisgIDE2LDB4MTFkMCwwLHsweDAyLDB4NjEsMHhjOCwweDI0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHg2ZCwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkfSwKKyAgMTYsMHgxMWUwLDAsezB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWJ9LAorICAxNiwweDExZjAsMCx7MHhlMCwweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MTIwMCwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJkfSwKKyAgMTYsMHgxMjEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWR9LAorICAxNiwweDEyMjAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMH0sCisgIDE2LDB4MTIzMCwwLHsweDc0LDB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwfSwKKyAgMTYsMHgxMjQwLDAsezB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MWJ9LAorICAxNiwweDEyNTAsMCx7MHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMH0sCisgIDE2LDB4MTI2MCwwLHsweDkwLDB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgxMjcwLDAsezB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2Z9LAorICAxNiwweDEyODAsMCx7MHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkLDB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYX0sCisgIDE2LDB4MTI5MCwwLHsweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fSwKKyAgMTYsMHgxMmEwLDAsezB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmR9LAorICAxNiwweDEyYjAsMCx7MHgwNCwweGYwLDB4NzQsMHgwMCwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NX0sCisgIDE2LDB4MTJjMCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2fSwKKyAgMTYsMHgxMmQwLDAsezB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWZ9LAorICAxNiwweDEyZTAsMCx7MHhmMCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNX0sCisgIDE2LDB4MTJmMCwwLHsweGYwLDB4MjIsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgxMzAwLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWZ9LAorICAxNiwweDEzMTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NH0sCisgIDE2LDB4MTMyMCwwLHsweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkLDB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2fSwKKyAgMTYsMHgxMzMwLDAsezB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTB9LAorICAxNiwweDEzNDAsMCx7MHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZX0sCisgIDE2LDB4MTM1MCwwLHsweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSwKKyAgMTYsMHgxMzYwLDAsezB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDEzNzAsMCx7MHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MTM4MCwwLHsweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2fSwKKyAgMTYsMHgxMzkwLDAsezB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9LAorICAxNiwweDEzYTAsMCx7MHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NX0sCisgIDE2LDB4MTNiMCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAxfSwKKyAgMTYsMHgxM2MwLDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkLDB4OTB9LAorICAxNiwweDEzZDAsMCx7MHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMH0sCisgIDE2LDB4MTNlMCwwLHsweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgxM2YwLDAsezB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJkLDB4ZjV9LAorICAxNiwweDE0MDAsMCx7MHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNX0sCisgIDE2LDB4MTQxMCwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMCwweDc0fSwKKyAgMTYsMHgxNDIwLDAsezB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDR9LAorICAxNiwweDE0MzAsMCx7MHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MWIsMHhlMH0sCisgIDE2LDB4MTQ0MCwwLHsweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwfSwKKyAgMTYsMHgxNDUwLDAsezB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDE0NjAsMCx7MHg4MywweGUwLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNH0sCisgIDE2LDB4MTQ3MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0fSwKKyAgIDUsMHgxNDgwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4MTQ4NSwwLHsweDc0LDB4MDAsMHhmNSwweDg2LDB4OTAsMHhmZCwweGE1LDB4N2MsMHgwNSwweGEzLDB4ZTUsMHg4MiwweDQ1LDB4ODMsMHg3MCwweGY5fSwKKyAgIDEsMHgxNDk1LDAsezB4MjJ9LAorICAxNiwweDE0OTYsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4ODcsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMn0sCisgIDE2LDB4MTRhNiwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweDhkLDB4ZTAsMHhjMCwweGUwfSwKKyAgMTYsMHgxNGI2LDAsezB4OGMsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweDdkLDB4MDB9LAorICAxNiwweDE0YzYsMCx7MHg5MCwweDdmLDB4ZTMsMHg3NCwweDdiLDB4ZjAsMHhhMywweDc0LDB4ODAsMHhmMCwweDdjLDB4MTEsMHg5MCwweDdmLDB4OTksMHhlMH0sCisgIDE2LDB4MTRkNiwwLHsweDU0LDB4NDAsMHhkYywweDAzLDB4MDIsMHgxNCwweGYzLDB4YjQsMHgwMCwweDEzLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg0MCwweGYwfSwKKyAgMTYsMHgxNGU2LDAsezB4OTAsMHg3ZiwweGU1LDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHgwMiwweDE0LDB4ZDIsMHg5MCwweDc2LDB4OTB9LAorICAxNiwweDE0ZjYsMCx7MHhlMCwweGI0LDB4MDEsMHgxMiwweDkwLDB4NzYsMHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMH0sCisgIDE2LDB4MTUwNiwwLHsweDkwLDB4N2YsMHg2YywweDAyLDB4MTUsMHg1NywweGI0LDB4MDIsMHgxMiwweDkwLDB4NzYsMHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwfSwKKyAgMTYsMHgxNTE2LDAsezB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg2YywweDAyLDB4MTUsMHg5NiwweGI0LDB4MDMsMHgxMiwweDkwLDB4NzZ9LAorICAxNiwweDE1MjYsMCx7MHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg2YywweDAyLDB4MTUsMHhlMX0sCisgIDE2LDB4MTUzNiwwLHsweGI0LDB4MDQsMHgxMiwweDkwLDB4NzYsMHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwfSwKKyAgMTYsMHgxNTQ2LDAsezB4N2YsMHg2YywweDAyLDB4MTYsMHgxMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg2YywweDAyLDB4MTZ9LAorICAxNiwweDE1NTYsMCx7MHg0MCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZjIsMHg3ZH0sCisgIDE2LDB4MTU2NiwwLHsweDAyLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4NTQsMHgwNCwweGI0fSwKKyAgMTYsMHgxNTc2LDAsezB4MDAsMHgwNSwweDA1LDB4ODYsMHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjB9LAorICAxNiwweDE1ODYsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhkNCwweDAyLDB4MTYsMHg0MH0sCisgIDE2LDB4MTU5NiwwLHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSwKKyAgMTYsMHgxNWE2LDAsezB4ZjAsMHhmMCwweGRkLDB4ZWMsMHg3ZCwweDAyLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDE1YjYsMCx7MHg5YiwweGUwLDB4NTQsMHgwNCwweGI0LDB4MDAsMHgwNSwweDA1LDB4ODYsMHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NH0sCisgIDE2LDB4MTVjNiwwLHsweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSwKKyAgIDYsMHgxNWQ2LDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSwKKyAgMTYsMHgxNWRjLDAsezB4ZGQsMHhjZSwweDAyLDB4MTYsMHg0MCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhmYSwweDdkLDB4MDIsMHgwNSwweDg2LDB4OTB9LAorICAxNiwweDE1ZWMsMCx7MHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHg1NCwweDA0LDB4YjQsMHgwMCwweDA1LDB4MDUsMHg4Nn0sCisgIDE2LDB4MTVmYywwLHsweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkfSwKKyAgMTYsMHgxNjBjLDAsezB4ZGMsMHgwMiwweDE2LDB4NDAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGY4LDB4N2QsMHgwMiwweDA1LDB4ODZ9LAorICAxNiwweDE2MWMsMCx7MHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNCwweDAwLDB4MDUsMHgwNX0sCisgIDE2LDB4MTYyYywwLHsweDg2LDB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweGYwLDB4ZjAsMHhmMCwweGYwfSwKKyAgMTYsMHgxNjNjLDAsezB4ZjAsMHhmMCwweGRkLDB4ZGEsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODZ9LAorICAxNiwweDE2NGMsMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZn0sCisgICA1LDB4MTY1YywwLHsweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9LAorICAxNiwweDE2NjEsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4OTAsMHg3NiwweDdjLDB4ZTAsMHg5MCwweDdmLDB4NmYsMHhmMH0sCisgIDE2LDB4MTY3MSwwLHsweDkwLDB4NzYsMHg3ZCwweGUwLDB4OTAsMHg3ZiwweDZmLDB4ZjAsMHg5MCwweDc2LDB4N2UsMHhlMCwweDkwLDB4N2YsMHg2ZiwweGYwfSwKKyAgIDksMHgxNjgxLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSwKKyAgMTYsMHgxNjhhLDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODN9LAorICAxNiwweDE2OWEsMCx7MHgwNSwweDg2LDB4YzAsMHg4NCwweGMwLDB4ODUsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4YmYsMHgwMCwweDAzLDB4MDIsMHgxN30sCisgIDE2LDB4MTZhYSwwLHsweDAxLDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHgxNmJhLDAsezB4NjIsMHhlMCwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OTYsMHhlMCwweDU0LDB4N2Z9LAorICAxNiwweDE2Y2EsMCx7MHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4NzYsMHg4ZSwweGUwLDB4YjQsMHgwMSwweDA1LDB4MDUsMHg4Nn0sCisgIDE2LDB4MTZkYSwwLHsweDAyLDB4MTYsMHhmNiwweGI0LDB4MDIsMHgwNSwweDA1LDB4ODYsMHgwMiwweDE2LDB4ZWIsMHgwNSwweDg2LDB4MDIsMHgxNiwweGZifSwKKyAgMTYsMHgxNmVhLDAsezB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZGYsMHhmOCwweDAyLDB4MTYsMHhmYiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZGZ9LAorICAxNiwweDE2ZmEsMCx7MHhmYSwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweGQwLDB4ODUsMHhkMCwweDg0LDB4MDUsMHg4NiwweGQwLDB4ODMsMHhkMH0sCisgIDEyLDB4MTcwYSwwLHsweDgyLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn0sCisgIDE2LDB4MTcxNiwwLHsweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhlMCwweGU4LDB4YzAsMHhlMCwweDc4LDB4ZDEsMHhlOCwweDE0LDB4ZjgsMHg3MCwweGZifSwKKyAgMTAsMHgxNzI2LDAsezB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhlMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4MjJ9LAorICAxNiwweDE3MzAsMCx7MHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHhlOCwweGMwLDB4ZTAsMHg3OCwweDc4LDB4ZTgsMHgxNCwweGY4LDB4NzAsMHhmYn0sCisgIDEwLDB4MTc0MCwwLHsweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDIyfSwKKyAgIDcsMHgxNzRhLDAsezB4OTAsMHg3ZiwweGM1LDB4NzQsMHgwMiwweGYwLDB4MjJ9LAorICAxNiwweDE3NTEsMCx7MHg5MCwweDdlLDB4YzAsMHhlMCwweDkwLDB4NzYsMHg0NSwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHg5MCwweDc2LDB4NDQsMHhmMH0sCisgIDE2LDB4MTc2MSwwLHsweDkwLDB4N2UsMHhjMiwweGUwLDB4OTAsMHg3NiwweDQzLDB4ZjAsMHhiNCwweDAwLDB4MDMsMHgwMiwweDE3LDB4NzgsMHg5MCwweDc2fSwKKyAgMTYsMHgxNzcxLDAsezB4MTksMHg3NCwweDAzLDB4ZjAsMHgwMiwweDE3LDB4OGUsMHg5MCwweDc2LDB4NDQsMHhlMCwweGI0LDB4YmIsMHgwOSwweDkwLDB4NzZ9LAorICAxNiwweDE3ODEsMCx7MHgxOSwweDc0LDB4MDIsMHhmMCwweDAyLDB4MTcsMHg4ZSwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg0Mn0sCisgICAzLDB4MTc5MSwwLHsweGU0LDB4ZjAsMHgyMn0sCisgICA0LDB4MTc5NCwwLHsweDhkLDB4MjksMHg4YiwweDJhfSwKKyAgMTYsMHgxNzk4LDAsezB4MTIsMHg0YSwweDU1LDB4ZWEsMHg0OSwweDYwLDB4NTcsMHgxMiwweDM2LDB4OTIsMHg3ZSwweDAwLDB4MjksMHhmZiwweGVlLDB4M2F9LAorICAxNiwweDE3YTgsMCx7MHhjOSwweGVmLDB4YzksMHg3NSwweDJiLDB4ZmYsMHhmNSwweDJjLDB4ODksMHgyZCwweGFiLDB4MmIsMHhhYSwweDJjLDB4YTksMHgyZH0sCisgIDE2LDB4MTdiOCwwLHsweDkwLDB4MDAsMHgwMSwweDEyLDB4MzYsMHhhYiwweGZmLDB4NjQsMHgwNCwweDYwLDB4MDUsMHhlZiwweDY0LDB4MDUsMHg3MCwweDJlfSwKKyAgMTYsMHgxN2M4LDAsezB4ZWYsMHhiNCwweDA0LDB4MTUsMHg5MCwweDAwLDB4MDIsMHgxMiwweDM2LDB4YWIsMHg2NSwweDI5LDB4NzAsMHgwYiwweDkwLDB4MDB9LAorICAxNiwweDE3ZDgsMCx7MHgwMywweDEyLDB4MzYsMHhhYiwweDY1LDB4MmEsMHg3MCwweDAxLDB4MjIsMHgxMiwweDM2LDB4OTIsMHg3ZSwweDAwLDB4MjksMHhmZn0sCisgIDE2LDB4MTdlOCwwLHsweGVlLDB4M2EsMHhjOSwweGVmLDB4YzksMHg3NSwweDJiLDB4ZmYsMHhmNSwweDJjLDB4ODksMHgyZCwweDgwLDB4YmMsMHg3YiwweDAwfSwKKyAgIDQsMHgxN2Y4LDAsezB4N2EsMHgwMCwweDc5LDB4MDB9LAorICAgMSwweDE3ZmMsMCx7MHgyMn0sCisgICAzLDB4MTdmZCwwLHsweGMyLDB4OGIsMHgzMn0sCisgIDE2LDB4MTgwMCwwLHsweDkwLDB4NzYsMHg5MCwweGUwLDB4MTQsMHg2MCwweDM3LDB4MTQsMHg3MCwweDAyLDB4MDEsMHhkOCwweDE0LDB4NzAsMHgwMiwweDIxfSwKKyAgMTYsMHgxODEwLDAsezB4NzIsMHgxNCwweDcwLDB4MDIsMHg0MSwweDNiLDB4MjQsMHgwNCwweDYwLDB4MDIsMHg2MSwweDAzLDB4OTAsMHg3ZiwweGZjLDB4NzR9LAorICAxNiwweDE4MjAsMCx7MHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg1NH0sCisgIDE2LDB4MTgzMCwwLHsweDA1LDB4ZjAsMHg5MCwweDgwLDB4MDEsMHhmMCwweGU0LDB4OTAsMHg3NiwweDFhLDB4ZjAsMHhjMiwweDJlLDB4MjIsMHg5MCwweDc2fSwKKyAgMTYsMHgxODQwLDAsezB4OTUsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDMwLDB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODB9LAorICAxNiwweDE4NTAsMCx7MHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MH0sCisgIDE2LDB4MTg2MCwwLHsweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyMiwweDkwfSwKKyAgMTYsMHgxODcwLDAsezB4N2YsMHhmYywweDc0LDB4NzQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmJ9LAorICAxNiwweDE4ODAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MH0sCisgIDE2LDB4MTg5MCwwLHsweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjIsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDY4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjfSwKKyAgMTYsMHgxOGEwLDAsezB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDIsMHhmMCwweGU0LDB4OTB9LAorICAxNiwweDE4YjAsMCx7MHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZX0sCisgIDE2LDB4MThjMCwwLHsweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZifSwKKyAgMTYsMHgxOGQwLDAsezB4ZjAsMHg5MCwweDgwLDB4MDIsMHhmMCwweGQyLDB4MmUsMHgyMiwweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmZSwweGYwLDB4NDR9LAorICAxNiwweDE4ZTAsMCx7MHgwMiwweGYwLDB4MzAsMHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NH0sCisgIDE2LDB4MThmMCwwLHsweGZiLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxfSwKKyAgMTYsMHgxOTAwLDAsezB4ZjAsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDIyLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHgzMCwweGYwLDB4OTB9LAorICAxNiwweDE5MTAsMCx7MHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NH0sCisgIDE2LDB4MTkyMCwwLHsweGZkLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyMiwweDkwfSwKKyAgMTYsMHgxOTMwLDAsezB4N2YsMHhmYywweDc0LDB4MWMsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmZ9LAorICAxNiwweDE5NDAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MH0sCisgIDE2LDB4MTk1MCwwLHsweGYwLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3fSwKKyAgMTYsMHgxOTYwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4ZDJ9LAorICAxNiwweDE5NzAsMCx7MHgyZSwweDIyLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg0NCwweDA4LDB4ZjAsMHgzMH0sCisgIDE2LDB4MTk4MCwwLHsweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwfSwKKyAgMTYsMHgxOTkwLDAsezB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDkwLDB4NzZ9LAorICAxNiwweDE5YTAsMCx7MHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NH0sCisgIDE2LDB4MTliMCwwLHsweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJiLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0fSwKKyAgMTYsMHgxOWMwLDAsezB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMiwweDI1LDB4OTB9LAorICAxNiwweDE5ZDAsMCx7MHg3ZiwweGZjLDB4NzQsMHhjOCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZn0sCisgIDE2LDB4MTllMCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwfSwKKyAgMTYsMHgxOWYwLDAsezB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4OTgsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDFhMDAsMCx7MHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4NWYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZH0sCisgIDE2LDB4MWExMCwwLHsweGYwLDB4NDQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MzAsMHgzZiwweDA5fSwKKyAgMTYsMHgxYTIwLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAxNiwweDFhMzAsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4ZDIsMHgyZSwweDIyLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NH0sCisgIDE2LDB4MWE0MCwwLHsweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg0NCwweDA4LDB4ZjAsMHgzMCwweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwfSwKKyAgMTYsMHgxYTUwLDAsezB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTB9LAorICAxNiwweDFhNjAsMCx7MHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjUsMHg5MH0sCisgIDE2LDB4MWE3MCwwLHsweDdmLDB4ZmMsMHg3NCwweGI0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJifSwKKyAgMTYsMHgxYTgwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjB9LAorICAxNiwweDFhOTAsMCx7MHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMiwweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhiMCwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4MWFhMCwwLHsweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyfSwKKyAgMTYsMHgxYWIwLDAsezB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDN9LAorICAxNiwweDFhYzAsMCx7MHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4NjgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4Zn0sCisgIDE2LDB4MWFkMCwwLHsweDc0LDB4NWYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NDQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDc2fSwKKyAgMTYsMHgxYWUwLDAsezB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjB9LAorICAxNiwweDFhZjAsMCx7MHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMn0sCisgICA0LDB4MWIwMCwwLHsweGYwLDB4ZDIsMHgyZSwweDIyfSwKKyAgMTYsMHgxYjA0LDAsezB4MzAsMHgyYywweDM4LDB4YzIsMHgyYywweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGUsMHg5MCwweDc2LDB4N2N9LAorICAxNiwweDFiMTQsMCx7MHg3NCwweGMwLDB4ZjAsMHhhMywweDc0LDB4MTQsMHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGQsMHhlNH0sCisgIDE2LDB4MWIyNCwwLHsweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweDEwLDB4ZjAsMHhhMywweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBifSwKKyAgMTIsMHgxYjM0LDAsezB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHgxOCwweGYwLDB4YTMsMHhmMCwweDIyfSwKKyAgMTYsMHgxYjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWM4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWNiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxY2MwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWNlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxY2YwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQ0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQ3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWRhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWRkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWUwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWUzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWU2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWU5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNCwweDFlYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlY2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmMmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgICAyLDB4MWYzZSwwLHsweDAwLDB4MDB9LAorICAxNiwweDFmNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWY1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWY4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWZiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWZlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjAxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjA0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjA3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjBhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjBkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjEwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjEzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjE2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjE5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjFjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMWQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjFmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjIyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjI1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjI4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjJiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjJlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjMxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjM0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE0LDB4MjM3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzN2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjM4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzYWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjNiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyM2NlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjNlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyM2ZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQ0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQ3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjRhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNGJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjRkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNGVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjUwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjUzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjU2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjU5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNWFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjVjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNWRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjVmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjYyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjY1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjY4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjZiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNmNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE0LDB4MjZlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjcwYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzFjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3MmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjczYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzRjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3NWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4Mjc2YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzdjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3OGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4Mjc5YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyN2FjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3YmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjdjYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyN2RjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3ZWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgICA1LDB4MjdmYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9LAorICAxNiwweDI4MDEsMCx7MHhjMiwweDIwLDB4YzIsMHgyMSwweGMyLDB4MmEsMHg5MCwweDdmLDB4ZTgsMHhlMCwweDEyLDB4MzcsMHhmOSwweDI4LDB4MzAsMHgwMH0sCisgIDE2LDB4MjgxMSwwLHsweDI4LDB4OGMsMHgwMSwweDI4LDB4YTIsMHgwMiwweDJhLDB4MWYsMHgyMSwweDJhLDB4NmEsMHgyMiwweDI5LDB4M2QsMHg4MCwweDI5fSwKKyAgMTYsMHgyODIxLDAsezB4N2QsMHg4MSwweDI5LDB4ZDEsMHg4MiwweDJhLDB4ODQsMHhhMSwweDJhLDB4YmEsMHhhMiwweDAwLDB4MDAsMHgyYSwweGJmLDB4OTB9LAorICAxNiwweDI4MzEsMCx7MHg3ZiwweGU5LDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgyNCwweGZlLDB4NjAsMHgyOCwweDI0LDB4ZmUsMHg2MCwweDNiLDB4MjQsMHhmY30sCisgIDE2LDB4Mjg0MSwwLHsweDcwLDB4NDAsMHgxMiwweDNmLDB4ZTUsMHg0MSwweGNiLDB4MTIsMHg0ZSwweDFkLDB4NDAsMHgwMiwweDQxLDB4Y2IsMHg5MCwweDdmfSwKKyAgMTYsMHgyODUxLDAsezB4ZWEsMHhlMCwweGI0LDB4MDEsMHgwNCwweGMyLDB4MjIsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAxNiwweDI4NjEsMCx7MHg0MSwweGNiLDB4MTIsMHg0ZSwweDFmLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhiNCwweDAxLDB4MDQsMHhkMiwweDIyLDB4NDEsMHhjYn0sCisgIDE2LDB4Mjg3MSwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgMTYsMHgyODgxLDAsezB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjR9LAorICAxNiwweDI4OTEsMCx7MHhmNSwweDcwLDB4MDUsMHgxMiwweDQ4LDB4NjMsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MX0sCisgIDE2LDB4MjhhMSwwLHsweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZkLDB4NjAsMHg1NCwweDI0LDB4MDIsMHg2MCwweDAyLDB4MjEsMHgzNCwweDEyfSwKKyAgMTYsMHgyOGIxLDAsezB4NGUsMHgxZCwweDQwLDB4MDIsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3MCwweDM4LDB4OTAsMHg3ZiwweGVjLDB4ZTB9LAorICAxNiwweDI4YzEsMCx7MHhmNCwweDU0LDB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNH0sCisgIDE2LDB4MjhkMSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhlYywweGUwLDB4NTQsMHg4MCwweGZmfSwKKyAgMTYsMHgyOGUxLDAsezB4MTMsMHgxMywweDEzLDB4NTQsMHgxZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHg5MCwweDdmLDB4ZDcsMHhmMCwweGUwLDB4NDR9LAorICAxNiwweDI4ZjEsMCx7MHgyMCwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDEyLDB4NGUsMHgxZn0sCisgIDE2LDB4MjkwMSwwLHsweDQwLDB4MDIsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3MCwweDIwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0fSwKKyAgMTYsMHgyOTExLDAsezB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNCwweGY1LDB4ODJ9LAorICAxNiwweDI5MjEsMCx7MHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0sCisgIDE2LDB4MjkzMSwwLHsweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlOSwweGUwfSwKKyAgMTYsMHgyOTQxLDAsezB4NjAsMHgxMiwweDI0LDB4ZjgsMHg2MCwweDA5LDB4MjQsMHgwMiwweDcwLDB4MjksMHgxMiwweDQzLDB4ZTcsMHg0MSwweGNiLDB4MTJ9LAorICAxNiwweDI5NTEsMCx7MHg0ZCwweGNhLDB4NDEsMHhjYiwweDEyLDB4NGUsMHgxYiwweGEyLDB4MjIsMHhlNCwweDMzLDB4ZmYsMHgyNSwweGUwLDB4ZmYsMHhhMn0sCisgIDE2LDB4Mjk2MSwwLHsweDIzLDB4ZTQsMHgzMywweDRmLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyfSwKKyAgMTYsMHgyOTcxLDAsezB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTB9LAorICAxNiwweDI5ODEsMCx7MHg2MCwweDMzLDB4MjQsMHhmNiwweDYwLDB4MmEsMHgyNCwweDA0LDB4NzAsMHgzZCwweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhkZX0sCisgIDE2LDB4Mjk5MSwwLHsweDYwLDB4MGMsMHgwNCwweDcwLDB4MTIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmfSwKKyAgMTYsMHgyOWExLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2J9LAorICAxNiwweDI5YjEsMCx7MHgxMiwweDQ3LDB4NDUsMHg0MSwweGNiLDB4MTIsMHg0ZSwweDFiLDB4ZTQsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4ZjAsMHg5MH0sCisgIDE2LDB4MjljMSwwLHsweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNifSwKKyAgMTYsMHgyOWQxLDAsezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGY0LDB4NjAsMHgzNCwweDI0LDB4MGMsMHg3MCwweDM5LDB4MTIsMHg0ZSwweDFiLDB4OTB9LAorICAxNiwweDI5ZTEsMCx7MHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0LDB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNX0sCisgIDE2LDB4MjlmMSwwLHsweGUwLDB4MjQsMHhiNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGZkLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHgyYTAxLDAsezB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTB9LAorICAxNiwweDJhMTEsMCx7MHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3Zn0sCisgIDE2LDB4MmEyMSwwLHsweGU5LDB4ZTAsMHgyNCwweGY2LDB4NjAsMHgxMiwweDE0LDB4NjAsMHgxYSwweDI0LDB4MDIsMHg3MCwweDFkLDB4ZDIsMHgyMCwweDkwfSwKKyAgMTYsMHgyYTMxLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMiwweGQyLDB4MjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9LAorICAxNiwweDJhNDEsMCx7MHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwLDB4MjAsMHgxOCwweDkwLDB4N2YsMHhlZX0sCisgIDE2LDB4MmE1MSwwLHsweGUwLDB4NzAsMHgwNCwweGEzLDB4ZTAsMHg2MCwweDBiLDB4ZDIsMHgyOSwweGQyLDB4MjcsMHgxMiwweDE3LDB4NGEsMHhkMiwweDJhfSwKKyAgMTYsMHgyYTYxLDAsezB4ODAsMHgwMywweDEyLDB4MDgsMHgwMCwweGMyLDB4MjAsMHg4MCwweDYxLDB4OTAsMHg3ZiwweGVlLDB4ZTAsMHg3MCwweDA0LDB4YTN9LAorICAxNiwweDJhNzEsMCx7MHhlMCwweDYwLDB4MGIsMHhkMiwweDI5LDB4ZDIsMHgyOCwweDEyLDB4MTcsMHg0YSwweGQyLDB4MmEsMHg4MCwweDRjLDB4MTIsMHgzOH0sCisgIDE2LDB4MmE4MSwwLHsweDc0LDB4ODAsMHg0NywweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDYwLDB4MTIsMHgxNCwweDYwLDB4MWEsMHgyNCwweDAyfSwKKyAgMTYsMHgyYTkxLDAsezB4NzAsMHgxZCwweGQyLDB4MjEsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MTIsMHhkMiwweDIxLDB4OTB9LAorICAxNiwweDJhYTEsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMH0sCisgIDE2LDB4MmFiMSwwLHsweDIxLDB4MDMsMHgxMiwweDEwLDB4MDAsMHhjMiwweDIxLDB4ODAsMHgxMSwweDEyLDB4MmEsMHhkNiwweDgwLDB4MGMsMHgxMiwweDRlfSwKKyAgMTYsMHgyYWMxLDAsezB4MjEsMHg1MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMCwweDJhLDB4MDcsMHg5MCwweDdmLDB4YjR9LAorICAgNSwweDJhZDEsMCx7MHhlMCwweDQ0LDB4MDIsMHhmMCwweDIyfSwKKyAgMTYsMHgyYWQ2LDAsezB4ZTQsMHg5MCwweDc2LDB4MjcsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDJ9LAorICAxNiwweDJhZTYsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH0sCisgIDE2LDB4MmFmNiwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjcsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fSwKKyAgMTYsMHgyYjA2LDAsezB4ZWYsMHhiNCwweDA2LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MGZ9LAorICAxNiwweDJiMTYsMCx7MHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDI4LDB4ZjAsMHgyNH0sCisgIDE2LDB4MmIyNiwwLHsweDlmLDB4NzAsMHgwMiwweGExLDB4NzQsMHgyNCwweDIxLDB4NjAsMHgwMiwweGExLDB4YTEsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0fSwKKyAgMTYsMHgyYjM2LDAsezB4N2UsMHg3MCwweDAyLDB4NjEsMHhmYywweDE0LDB4NzAsMHgwMiwweDgxLDB4YjUsMHgyNCwweDAyLDB4NjAsMHgwMiwweGExLDB4NmN9LAorICAxNiwweDJiNDYsMCx7MHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmY30sCisgIDE2LDB4MmI1NiwwLHsweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4NDQsMHg3YSwweGFjLDB4NzksMHgwMCwweDc4fSwKKyAgMTYsMHgyYjY2LDAsezB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWN9LAorICAxNiwweDJiNzYsMCx7MHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMH0sCisgIDE2LDB4MmI4NiwwLHsweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkfSwKKyAgMTYsMHgyYjk2LDAsezB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTJ9LAorICAxNiwweDJiYTYsMCx7MHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwLDB4ZTQsMHhhM30sCisgIDE2LDB4MmJiNiwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0fSwKKyAgMTYsMHgyYmM2LDAsezB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmV9LAorICAxNiwweDJiZDYsMCx7MHhhMywweGUwLDB4ZmYsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg2MH0sCisgIDE2LDB4MmJlNiwwLHsweDAyLDB4YTEsMHhhOCwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwfSwKKyAgMTYsMHgyYmY2LDAsezB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDd9LAorICAxNiwweDJjMDYsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhM30sCisgIDE2LDB4MmMxNiwwLHsweGUwLDB4ZmYsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzfSwKKyAgMTYsMHgyYzI2LDAsezB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTMsMHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjV9LAorICAxNiwweDJjMzYsMCx7MHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MmM0NiwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdifSwKKyAgMTYsMHgyYzU2LDAsezB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDJjNjYsMCx7MHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMH0sCisgIDE2LDB4MmM3NiwwLHsweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgyYzg2LDAsezB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHgwMCwweDdhLDB4Nzd9LAorICAxNiwweDJjOTYsMCx7MHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NjAsMHgwMiwweGExLDB4YTgsMHg5MCwweDdmLDB4MDAsMHhmMH0sCisgIDE2LDB4MmNhNiwwLHsweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwfSwKKyAgMTYsMHgyY2I2LDAsezB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDJjYzYsMCx7MHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OX0sCisgIDE2LDB4MmNkNiwwLHsweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzfSwKKyAgMTYsMHgyY2U2LDAsezB4NzQsMHhhYywweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTB9LAorICAxNiwweDJjZjYsMCx7MHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhM30sCisgIDE2LDB4MmQwNiwwLHsweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwfSwKKyAgMTYsMHgyZDE2LDAsezB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjB9LAorICAxNiwweDJkMjYsMCx7MHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZn0sCisgIDE2LDB4MmQzNiwwLHsweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzfSwKKyAgMTYsMHgyZDQ2LDAsezB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4Mzd9LAorICAxNiwweDJkNTYsMCx7MHhhYiwweDcwLDB4NGYsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MH0sCisgIDE2LDB4MmQ2NiwwLHsweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfSwKKyAgMTYsMHgyZDc2LDAsezB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDFlLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGZ9LAorICAxNiwweDJkODYsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NH0sCisgIDE2LDB4MmQ5NiwwLHsweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSwKKyAgIDMsMHgyZGE2LDAsezB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHgyZGE5LDAsezB4ZTQsMHg5MCwweDc2LDB4MzYsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDJkYjksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4Mn0sCisgIDE2LDB4MmRjOSwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1fSwKKyAgMTYsMHgyZGQ5LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmZ9LAorICAxNiwweDJkZTksMCx7MHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MTAsMHhmMH0sCisgIDE2LDB4MmRmOSwwLHsweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA1fSwKKyAgMTYsMHgyZTA5LDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTR9LAorICAxNiwweDJlMTksMCx7MHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNX0sCisgIDE2LDB4MmUyOSwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmfSwKKyAgMTYsMHgyZTM5LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjR9LAorICAxNiwweDJlNDksMCx7MHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMH0sCisgIDE2LDB4MmU1OSwwLHsweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fSwKKyAgMTYsMHgyZTY5LDAsezB4MDEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDJlNzksMCx7MHg3NCwweDAzLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4MmU4OSwwLHsweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0fSwKKyAgMTYsMHgyZTk5LDAsezB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MTAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTR9LAorICAxNiwweDJlYTksMCx7MHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA2LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwM30sCisgIDE2LDB4MmViOSwwLHsweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwfSwKKyAgMTYsMHgyZWM5LDAsezB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDJlZDksMCx7MHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4MmVlOSwwLHsweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgyZWY5LDAsezB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDN9LAorICAxNiwweDJmMDksMCx7MHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMH0sCisgIDE2LDB4MmYxOSwwLHsweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA4LDB4ZjAsMHhlZiwweDc1fSwKKyAgMTYsMHgyZjI5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4OTB9LAorICAxNiwweDJmMzksMCx7MHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MmY0OSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyfSwKKyAgMTYsMHgyZjU5LDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MGEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjV9LAorICAxNiwweDJmNjksMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMH0sCisgIDE2LDB4MmY3OSwwLHsweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyfSwKKyAgMTYsMHgyZjg5LDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9LAorICAxNiwweDJmOTksMCx7MHgwOSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4MmZhOSwwLHsweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0fSwKKyAgMTYsMHgyZmI5LDAsezB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTR9LAorICAxNiwweDJmYzksMCx7MHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA3LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwM30sCisgIDE0LDB4MmZkOSwwLHsweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4MjJ9LAorICAxNiwweDJmZTcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDI2LDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX0sCisgICA4LDB4MmZmNywwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAgMSwweDJmZmYsMCx7MHgzMn0sCisgIDE2LDB4MzAwMCwwLHsweDkwLDB4N2YsMHhiNiwweGUwLDB4MjAsMHhlMSwweDAyLDB4YzIsMHgzZCwweGQyLDB4MzYsMHgyMCwweDM2LDB4MDIsMHg0MSwweDZlfSwKKyAgMTYsMHgzMDEwLDAsezB4MzAsMHgzZCwweDAyLDB4NDEsMHg2ZSwweDkwLDB4ODAsMHgwNywweGUwLDB4NjAsMHgwNCwweGQyLDB4MzYsMHg4MCwweDAyLDB4YzJ9LAorICAxNiwweDMwMjAsMCx7MHgzNiwweDIwLDB4MzYsMHgwMiwweDQxLDB4MmUsMHhkMiwweDM1LDB4ZTQsMHhmNSwweDFhLDB4OTAsMHg4MCwweDA0LDB4ZTAsMHhmNX0sCisgIDE2LDB4MzAzMCwwLHsweDE5LDB4NzQsMHgwOCwweDI1LDB4MGUsMHhmOCwweGE2LDB4MTksMHg4NSwweDE5LDB4MTgsMHhlNSwweDE4LDB4MjAsMHhlNywweDA0fSwKKyAgMTYsMHgzMDQwLDAsezB4ZDIsMHgzOCwweDgwLDB4MDIsMHhjMiwweDM4LDB4MzAsMHgzOCwweDAyLDB4MjEsMHhkNCwweGU0LDB4ZjUsMHgxNiwweGU1LDB4MTl9LAorICAxNiwweDMwNTAsMCx7MHhiNCwweGYwLDB4MGMsMHhkMiwweDM5LDB4NzUsMHgwOCwweDA0LDB4NzUsMHgwOSwweGYwLDB4MDUsMHgwZSwweDgwLDB4MDIsMHgwNX0sCisgIDE2LDB4MzA2MCwwLHsweDE2LDB4ZTUsMHgxOSwweDY0LDB4ZjcsMHg3MCwweDNkLDB4YzIsMHgzOSwweGU1LDB4MGUsMHgyNCwweGZlLDB4NjAsMHgxNywweDE0fSwKKyAgMTYsMHgzMDcwLDAsezB4NjAsMHgyMiwweDI0LDB4MDMsMHg3MCwweDI5LDB4NzUsMHgwOCwweDA1LDB4NzUsMHgwOSwweGY3LDB4ZTQsMHhmNSwweDBhLDB4ZjV9LAorICAxNiwweDMwODAsMCx7MHgwYiwweDc1LDB4MGUsMHgwNCwweDgwLDB4MjAsMHg3NSwweDA4LDB4MDYsMHg3NSwweDBhLDB4ZjcsMHhlNCwweGY1LDB4MGIsMHg3NX0sCisgIDE2LDB4MzA5MCwwLHsweDBlLDB4MDQsMHg4MCwweDEyLDB4NzUsMHgwOCwweDA3LDB4NzUsMHgwYiwweGY3LDB4NzUsMHgwZSwweDA0LDB4ODAsMHgwNywweDEyfSwKKyAgMTYsMHgzMGEwLDAsezB4NGQsMHhkYSwweDgwLDB4MDIsMHgwNSwweDE2LDB4ZTUsMHgxOSwweDU0LDB4ZjgsMHg2NCwweGY4LDB4NzAsMHgzYiwweGMyLDB4MzV9LAorICAxNiwweDMwYjAsMCx7MHhlNSwweDE5LDB4MjQsMHgwNywweDYwLDB4MGMsMHgyNCwweGZjLDB4NjAsMHgwOCwweDI0LDB4MDUsMHgyNCwweGY4LDB4NTAsMHgwNn0sCisgIDE2LDB4MzBjMCwwLHsweDgwLDB4MDgsMHhkMiwweDNhLDB4ODAsMHgwNiwweGMyLDB4M2EsMHg4MCwweDAyLDB4ZDIsMHgzYSwweDc1LDB4MWEsMHgwMSwweDIwfSwKKyAgMTYsMHgzMGQwLDAsezB4M2EsMHgxOSwweDkwLDB4N2UsMHg4MCwweDc0LDB4MGYsMHhmMCwweGEzLDB4ZTUsMHgxOSwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTN9LAorICAxNiwweDMwZTAsMCx7MHhmMCwweDkwLDB4N2YsMHhiNywweDc0LDB4MDQsMHhmMCwweDgwLDB4MDIsMHgwNSwweDE2LDB4MjAsMHgzOSwweDZkLDB4ZTUsMHgxOX0sCisgIDE2LDB4MzBmMCwwLHsweDY0LDB4ZjcsMHg2MCwweDY3LDB4ZTUsMHgxYSwweDcwLDB4NjMsMHhlNSwweDE4LDB4NTQsMHhmMCwweDY0LDB4ZjAsMHg3MCwweDU5fSwKKyAgMTYsMHgzMTAwLDAsezB4ODUsMHgxOCwweDE5LDB4ZjUsMHgwZSwweGU1LDB4MTksMHgyNCwweDBmLDB4NjAsMHgxYiwweDI0LDB4ZmUsMHg2MCwweDE3LDB4MjR9LAorICAxNiwweDMxMTAsMCx7MHhmZCwweDYwLDB4MjIsMHgxNCwweDYwLDB4MWYsMHgyNCwweDA1LDB4NzAsMHgyZiwweDc1LDB4MDgsMHgwMywweDA1LDB4MGUsMHg4NX0sCisgIDE2LDB4MzEyMCwwLHsweDE4LDB4MDksMHhkMiwweDM3LDB4ODAsMHgyOCwweDc1LDB4MDgsMHgwMiwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHg3NSwweDE0fSwKKyAgMTYsMHgzMTMwLDAsezB4MDEsMHhkMiwweDM3LDB4ODAsMHgxOSwweDc1LDB4MDgsMHgwNSwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHhlNCwweGY1LDB4MGF9LAorICAxNiwweDMxNDAsMCx7MHhmNSwweDBiLDB4NzUsMHgwZSwweDAzLDB4ZDIsMHgzNywweDgwLDB4MDUsMHgxMiwweDRkLDB4ZGEsMHhjMiwweDM1LDB4MzAsMHgzNX0sCisgIDE2LDB4MzE1MCwwLHsweDBhLDB4ODUsMHgwOCwweDEzLDB4ODUsMHgxOCwweDEyLDB4ODAsMHgwMiwweDA1LDB4MTYsMHg4NSwweDE4LDB4MTksMHhlNSwweDE2fSwKKyAgMTYsMHgzMTYwLDAsezB4NjQsMHgwNCwweDcwLDB4NjIsMHhmNSwweDBlLDB4ZTUsMHgxOSwweDU0LDB4ZjAsMHhmNSwweDE5LDB4ZjUsMHgxNSwweDg1LDB4MTh9LAorICAxNiwweDMxNzAsMCx7MHgxOSwweGU1LDB4MTUsMHgyNCwweDcwLDB4NjAsMHgxOCwweDI0LDB4ZjAsMHg2MCwweDE0LDB4MjQsMHhmMCwweDYwLDB4MTAsMHgyNH0sCisgIDE2LDB4MzE4MCwwLHsweGYwLDB4NjAsMHgxZSwweDI0LDB4ZjAsMHg2MCwweDFhLDB4MjQsMHhmMCwweDYwLDB4MDQsMHgyNCwweDYwLDB4NzAsMHgyNywweGU1fSwKKyAgMTYsMHgzMTkwLDAsezB4MTUsMHhjNCwweDU0LDB4MGYsMHhmNSwweDE5LDB4ZjUsMHgwOCwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHhkMiwweDM3LDB4ODB9LAorICAxNiwweDMxYTAsMCx7MHgxYSwweGU1LDB4MTUsMHhjNCwweDU0LDB4MGYsMHhmNSwweDE5LDB4ZjUsMHgwOCwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHg3NX0sCisgIDE2LDB4MzFiMCwwLHsweDE0LDB4MDEsMHhkMiwweDM3LDB4ODAsMHgwNSwweDEyLDB4NGQsMHhkYSwweGMyLDB4MzUsMHgzMCwweDM1LDB4MGEsMHg4NSwweDE5fSwKKyAgMTYsMHgzMWMwLDAsezB4MTMsMHg4NSwweDE4LDB4MTIsMHg4MCwweDAyLDB4MDUsMHgxNiwweGU1LDB4MTYsMHhkMywweDk0LDB4MDUsMHg0MCwweDU3LDB4MTJ9LAorICAxNiwweDMxZDAsMCx7MHg0ZCwweGRhLDB4ODAsMHg1MiwweDMwLDB4MzksMHgxNywweGU1LDB4MGUsMHg3MCwweDBhLDB4ODUsMHgwOCwweDA5LDB4NzUsMHgwOH0sCisgIDE2LDB4MzFlMCwwLHsweDA0LDB4MDUsMHgwZSwweDgwLDB4NDEsMHg3NCwweDA4LDB4MjUsMHgwZSwweGY4LDB4YTYsMHgxOSwweDgwLDB4MzgsMHgyMCwweDM3fSwKKyAgMTYsMHgzMWYwLDAsezB4MmEsMHhlNSwweDBlLDB4YjQsMHgwMSwweDBmLDB4ODUsMHgwOCwweDBhLDB4ODUsMHgwOSwweDBiLDB4ODUsMHgxMywweDA4LDB4ODV9LAorICAxNiwweDMyMDAsMCx7MHgxMiwweDA5LDB4NzUsMHgwZSwweDA0LDB4ZTUsMHgxNCwweGI0LDB4MDEsMHgxYywweDg1LDB4MDgsMHgwYSwweGU0LDB4ZjUsMHgwYn0sCisgIDE2LDB4MzIxMCwwLHsweDg1LDB4MTMsMHgwOCwweDg1LDB4MTIsMHgwOSwweDc1LDB4MGUsMHgwNCwweDgwLDB4MGIsMHhlNSwweDE0LDB4YjQsMHgwMSwweDA2fSwKKyAgMTYsMHgzMjIwLDAsezB4ZTQsMHhmNSwweDBiLDB4NzUsMHgwZSwweDA0LDB4ZTQsMHhmNSwweDFhLDB4MzAsMHgzNSwweDAyLDB4MDUsMHgwZSwweGU1LDB4MGV9LAorICAxNiwweDMyMzAsMCx7MHhkMywweDk0LDB4MDMsMHg1MCwweDAyLDB4MDEsMHgwYiwweGMyLDB4MzcsMHhlNCwweGY1LDB4MGUsMHhmNSwweDEwLDB4YzIsMHgzNn0sCisgIDE2LDB4MzI0MCwwLHsweGQyLDB4M2QsMHhmNSwweDE0LDB4NzQsMHgwOCwweDI1LDB4MTAsMHhmOCwweGU2LDB4ZmYsMHg3NCwweDgwLDB4MjUsMHgxMCwweGY1fSwKKyAgMTYsMHgzMjUwLDAsezB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDc0LDB4MDgsMHgyNSwweDEwLDB4ZjgsMHhlNCwweGY2LDB4MDV9LAorICAxNSwweDMyNjAsMCx7MHgxMCwweGU1LDB4MTAsMHhiNCwweDA0LDB4ZGUsMHg5MCwweDdmLDB4YjcsMHg3NCwweDA0LDB4ZjAsMHgwMSwweDBiLDB4MjJ9LAorICAxNiwweDMyNmYsMCx7MHg5MCwweDc2LDB4MTgsMHhlMCwweGZmLDB4NjQsMHgwNSwweDcwLDB4NDIsMHg5MCwweDc1LDB4YWIsMHhlMCwweGI0LDB4MDEsMHgxOX0sCisgIDE2LDB4MzI3ZiwwLHsweDkwLDB4NzIsMHgzNywweDc0LDB4MDEsMHhmMCwweGU0LDB4OTAsMHg4MCwweDIwLDB4ZjAsMHg5MCwweDgwLDB4MzEsMHhmMCwweDkwfSwKKyAgMTYsMHgzMjhmLDAsezB4ODAsMHgyOCwweGYwLDB4OTAsMHg4MCwweDM5LDB4ZjAsMHg4MCwweDIyLDB4ZTQsMHg5MCwweDcyLDB4MzcsMHhmMCwweDkwLDB4NzV9LAorICAxNiwweDMyOWYsMCx7MHhhZCwweGUwLDB4OTAsMHg3MiwweDJiLDB4ZjAsMHhlMCwweDI0LDB4ODAsMHhmMCwweGUwLDB4OTAsMHg4MCwweDIwLDB4ZjAsMHg5MH0sCisgIDE2LDB4MzJhZiwwLHsweDgwLDB4MzEsMHhmMCwweDkwLDB4ODAsMHgyOCwweGYwLDB4OTAsMHg4MCwweDM5LDB4ZjAsMHhlZiwweDY0LDB4MDYsMHg2MCwweDAyfSwKKyAgMTYsMHgzMmJmLDAsezB4ODEsMHg5OSwweDkwLDB4NzIsMHgzOSwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzIsMHgzOSwweGUwLDB4ZmYsMHgyNCwweGZlLDB4OTB9LAorICAxNiwweDMyY2YsMCx7MHg3MiwweDA0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4MzJkZiwwLHsweDgzLDB4ZTAsMHg2NCwweDAxLDB4NzAsMHg1NCwweDkwLDB4NzIsMHgzNiwweDA0LDB4ZjAsMHg5MCwweDcyLDB4MDQsMHhlMCwweGZmfSwKKyAgMTYsMHgzMmVmLDAsezB4MjQsMHhmZCwweDYwLDB4MjgsMHgyNCwweGZlLDB4NjAsMHgyNCwweDI0LDB4MDMsMHgyNCwweGZiLDB4NTAsMHgwNCwweDYwLDB4MWN9LAorICAxNiwweDMyZmYsMCx7MHg4MSwweDhjLDB4NzQsMHgyMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzQsMHgyOH0sCisgIDE2LDB4MzMwZiwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4ODEsMHg4YywweDkwLDB4NzIsMHgwNCwweGUwfSwKKyAgMTYsMHgzMzFmLDAsezB4ZmYsMHgyNCwweDMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzQsMHgzOCwweDJmLDB4ZjV9LAorICAxNiwweDMzMmYsMCx7MHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4ODEsMHg4YywweGU0LDB4OTAsMHg3MiwweDM2LDB4ZjAsMHg5MH0sCisgIDE2LDB4MzMzZiwwLHsweDcyLDB4MzksMHhlMCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgzMzRmLDAsezB4ZTAsMHhmZiwweDdlLDB4MDAsMHg5MCwweDc1LDB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4NzAsMHgwNiwweDkwLDB4NzJ9LAorICAxNiwweDMzNWYsMCx7MHgwMiwweDc0LDB4M2IsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg2NCwweDgwLDB4NGUsMHg3MH0sCisgIDE2LDB4MzM2ZiwwLHsweDA0LDB4OTAsMHg3MiwweDAyLDB4ZjAsMHhlZiwweDRlLDB4NzAsMHgwMiwweDgxLDB4MzUsMHhlZiwweDY0LDB4ODAsMHg0ZSwweDcwfSwKKyAgMTYsMHgzMzdmLDAsezB4MDIsMHg4MSwweDM1LDB4ZWYsMHhmOCwweGU0LDB4OTAsMHg3NSwweDBkLDB4ZjAsMHhlOCwweDkwLDB4NzUsMHgwYywweGYwLDB4OTB9LAorICAxNiwweDMzOGYsMCx7MHg3MiwweDM0LDB4ZTAsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4MzM5ZiwwLHsweGUwLDB4ZmYsMHg5MCwweDcyLDB4MDIsMHhmMCwweDkwLDB4NzUsMHgwZCwweGUwLDB4MmYsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwfSwKKyAgMTYsMHgzM2FmLDAsezB4MzQsMHgwMCwweGYwLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweDdiLDB4ZDYsMHg3YSwweGE1LDB4Zjl9LAorICAxNiwweDMzYmYsMCx7MHhmOCwweGQzLDB4MTIsMHgzNywweDk1LDB4NDAsMHgwYSwweDkwLDB4NzUsMHgwYywweDc0LDB4YTUsMHhmMCwweGEzLDB4NzQsMHhkNn0sCisgIDE2LDB4MzNjZiwwLHsweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTAsMHgyNCwweDJhLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweDM0LDB4NWEsMHhmMCwweGUwfSwKKyAgMTYsMHgzM2RmLDAsezB4ZmUsMHhhMywweGUwLDB4NzgsMHgwNSwweGNlLDB4YTIsMHhlNywweDEzLDB4Y2UsMHgxMywweGQ4LDB4ZjgsMHhmZiwweDkwLDB4NzV9LAorICAxNiwweDMzZWYsMCx7MHgwYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4ZDMsMHg5NH0sCisgIDE2LDB4MzNmZiwwLHsweGQyLDB4ZWUsMHg2NCwweDgwLDB4OTQsMHg4MiwweDQwLDB4MGEsMHg5MCwweDcyLDB4MmMsMHg3NCwweDAyLDB4ZjAsMHhhMywweDc0fSwKKyAgMTYsMHgzNDBmLDAsezB4ZDIsMHhmMCwweGMzLDB4OTAsMHg3MiwweDJjLDB4ZTAsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MDQsMHhlNCwweGYwLDB4YTN9LAorICAxNiwweDM0MWYsMCx7MHhmMCwweDkwLDB4NzIsMHgyYywweGUwLDB4ZmUsMHhhMywweGUwLDB4MjQsMHgzYSwweGY1LDB4ODIsMHhlZSwweDM0LDB4NzIsMHhmNX0sCisgIDE2LDB4MzQyZiwwLHsweDgzLDB4ZTAsMHg5MCwweDcyLDB4MDIsMHhmMCwweDkwLDB4NzIsMHgwNCwweGUwLDB4ZmYsMHgyNCwweGZkLDB4NjAsMHgyZCwweDI0fSwKKyAgMTYsMHgzNDNmLDAsezB4ZmUsMHg2MCwweDI5LDB4MjQsMHgwMywweDI0LDB4ZmIsMHg1MCwweDA0LDB4NjAsMHgyMSwweDgwLDB4NDAsMHg5MCwweDcyLDB4MDJ9LAorICAxNiwweDM0NGYsMCx7MHhlMCwweGZlLDB4NzQsMHgyMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHgyOH0sCisgIDE2LDB4MzQ1ZiwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4ODAsMHgyMSwweDkwLDB4NzIsMHgwMiwweGUwfSwKKyAgMTYsMHgzNDZmLDAsezB4ZmYsMHg5MCwweDcyLDB4MDQsMHhlMCwweGZlLDB4MjQsMHgzMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWZ9LAorICAxNiwweDM0N2YsMCx7MHhmMCwweDc0LDB4MzgsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzIsMHgzOX0sCisgIDExLDB4MzQ4ZiwwLHsweGUwLDB4MDQsMHhmMCwweGUwLDB4NjQsMHgwYSwweDYwLDB4MDIsMHg0MSwweGM3LDB4MjJ9LAorICAxNiwweDM0OWEsMCx7MHg5MCwweDc2LDB4MTgsMHhlMCwweGZmLDB4YjQsMHgwNSwweDIzLDB4OTAsMHg3MiwweDM3LDB4ZTAsMHg3MCwweDFkLDB4OTAsMHg3NX0sCisgIDE2LDB4MzRhYSwwLHsweGFkLDB4ZTAsMHg5MCwweDcyLDB4MmIsMHhmMCwweGUwLDB4MjQsMHg4MCwweGYwLDB4ZTAsMHg5MCwweDgwLDB4MjAsMHhmMCwweDkwfSwKKyAgMTYsMHgzNGJhLDAsezB4ODAsMHgzMSwweGYwLDB4OTAsMHg4MCwweDI4LDB4ZjAsMHg5MCwweDgwLDB4MzksMHhmMCwweGVmLDB4NjQsMHgwNiwweDYwLDB4MDJ9LAorICAxNiwweDM0Y2EsMCx7MHhjMSwweDkxLDB4OTAsMHg3MiwweDM2LDB4ZTAsMHg2MCwweDAyLDB4YzEsMHg5MSwweDkwLDB4NzYsMHg0MCwweGUwLDB4NzAsMHgzMX0sCisgIDE2LDB4MzRkYSwwLHsweDkwLDB4NzIsMHgwMywweDc0LDB4MDMsMHhmMCwweDkwLDB4NzIsMHgwMywweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0fSwKKyAgMTYsMHgzNGVhLDAsezB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDcyLDB4MjksMHhlMCwweGZkLDB4ZWV9LAorICAxNiwweDM0ZmEsMCx7MHg2ZCwweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwYSwweDUwLDB4MDgsMHg5MCwweDcyLDB4MDMsMHhlMCwweDA0LDB4ZjAsMHg4MH0sCisgIDE2LDB4MzUwYSwwLHsweGQ1LDB4OTAsMHg3MiwweDM5LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHg3MCwweDA4LDB4OTAsMHg3MiwweDAzfSwKKyAgMTYsMHgzNTFhLDAsezB4ZTAsMHg5MCwweDcyLDB4MzksMHhmMCwweDkwLDB4NzIsMHgzOSwweGUwLDB4ZmQsMHgyNCwweGZlLDB4OTAsMHg3MiwweDJhLDB4ZjB9LAorICAxNiwweDM1MmEsMCx7MHhlZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZn0sCisgIDE2LDB4MzUzYSwwLHsweDdlLDB4MDAsMHg5MCwweDc1LDB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4NzAsMHgwNiwweDkwLDB4NzIsMHgwMiwweDc0fSwKKyAgMTYsMHgzNTRhLDAsezB4ODAsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg2NCwweDgwLDB4NGUsMHg3MCwweDA0LDB4OTB9LAorICAxNiwweDM1NWEsMCx7MHg3MiwweDAyLDB4ZjAsMHhlZiwweDRlLDB4NzAsMHgwMiwweGMxLDB4MWIsMHhlZiwweDY0LDB4ODAsMHg0ZSwweDcwLDB4MDIsMHhjMX0sCisgIDE2LDB4MzU2YSwwLHsweDFiLDB4ZWYsMHhmOCwweGU0LDB4OTAsMHg3NSwweDBkLDB4ZjAsMHhlOCwweDkwLDB4NzUsMHgwYywweGYwLDB4ZWQsMHg3NSwweGYwfSwKKyAgMTYsMHgzNTdhLDAsezB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDcyLDB4MDJ9LAorICAxNiwweDM1OGEsMCx7MHhmMCwweDkwLDB4NzUsMHgwZCwweGUwLDB4MmYsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4MzQsMHgwMCwweGYwLDB4ZTAsMHhmZX0sCisgIDE2LDB4MzU5YSwwLHsweGEzLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweDdiLDB4ZDYsMHg3YSwweGE1LDB4ZjksMHhmOCwweGQzLDB4MTIsMHgzNywweDk1fSwKKyAgMTYsMHgzNWFhLDAsezB4NDAsMHgwYSwweDkwLDB4NzUsMHgwYywweDc0LDB4YTUsMHhmMCwweGEzLDB4NzQsMHhkNiwweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTB9LAorICAxNiwweDM1YmEsMCx7MHgyNCwweDJhLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweDM0LDB4NWEsMHhmMCwweGUwLDB4ZmUsMHhhMywweGUwLDB4NzgsMHgwNX0sCisgIDE2LDB4MzVjYSwwLHsweGNlLDB4YTIsMHhlNywweDEzLDB4Y2UsMHgxMywweGQ4LDB4ZjgsMHhmZiwweDkwLDB4NzUsMHgwYywweGVlLDB4ZjAsMHhhMywweGVmfSwKKyAgMTYsMHgzNWRhLDAsezB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4ZDMsMHg5NCwweGQyLDB4ZWUsMHg2NCwweDgwLDB4OTR9LAorICAxNiwweDM1ZWEsMCx7MHg4MiwweDQwLDB4MGEsMHg5MCwweDcyLDB4MmMsMHg3NCwweDAyLDB4ZjAsMHhhMywweDc0LDB4ZDIsMHhmMCwweGMzLDB4OTAsMHg3Mn0sCisgIDE2LDB4MzVmYSwwLHsweDJjLDB4ZTAsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MDQsMHhlNCwweGYwLDB4YTMsMHhmMCwweDkwLDB4NzIsMHgyYywweGUwfSwKKyAgMTYsMHgzNjBhLDAsezB4ZmUsMHhhMywweGUwLDB4MjQsMHgzYSwweGY1LDB4ODIsMHhlZSwweDM0LDB4NzIsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDcyLDB4MDJ9LAorICAxNiwweDM2MWEsMCx7MHhmMCwweDkwLDB4NzIsMHgyYSwweGUwLDB4ZmYsMHgyNCwweGZkLDB4NjAsMHgyZCwweDI0LDB4ZmUsMHg2MCwweDI5LDB4MjQsMHgwM30sCisgIDE2LDB4MzYyYSwwLHsweDI0LDB4ZmIsMHg1MCwweDA0LDB4NjAsMHgyMSwweDgwLDB4NDAsMHg5MCwweDcyLDB4MDIsMHhlMCwweGZlLDB4NzQsMHgyMCwweDJmfSwKKyAgMTYsMHgzNjNhLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHgyOCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDM2NGEsMCx7MHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4ODAsMHgyMSwweDkwLDB4NzIsMHgwMiwweGUwLDB4ZmYsMHg5MCwweDcyLDB4MmEsMHhlMH0sCisgIDE2LDB4MzY1YSwwLHsweGZlLDB4MjQsMHgzMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDc0LDB4MzgsMHgyZSwweGY1fSwKKyAgMTYsMHgzNjZhLDAsezB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHg0MCwweGUwLDB4NzAsMHgwNiwweDkwLDB4NzJ9LAorICAxNiwweDM2N2EsMCx7MHgzOSwweDc0LDB4MGEsMHhmMCwweDkwLDB4NzIsMHgzOSwweGUwLDB4MDQsMHhmMCwweGUwLDB4YzMsMHg5NCwweDBhLDB4NTAsMHgwMn0sCisgICA4LDB4MzY4YSwwLHsweGExLDB4MTEsMHhlNCwweDkwLDB4NzYsMHg0MCwweGYwLDB4MjJ9LAorICAxNiwweDM2OTIsMCx7MHhiYiwweDAxLDB4MDYsMHg4OSwweDgyLDB4OGEsMHg4MywweGUwLDB4MjIsMHg1MCwweDAyLDB4ZTcsMHgyMiwweGJiLDB4ZmUsMHgwMn0sCisgICA5LDB4MzZhMiwwLHsweGUzLDB4MjIsMHg4OSwweDgyLDB4OGEsMHg4MywweGU0LDB4OTMsMHgyMn0sCisgIDE2LDB4MzZhYiwwLHsweGJiLDB4MDEsMHgwYywweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTAsMHgyMiwweDUwfSwKKyAgMTYsMHgzNmJiLDAsezB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGU2LDB4MjIsMHhiYiwweGZlLDB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4MjJ9LAorICAxMywweDM2Y2IsMCx7MHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGU0LDB4OTMsMHgyMn0sCisgIDE2LDB4MzZkOCwwLHsweGMyLDB4ZDUsMHhlYywweDMwLDB4ZTcsMHgwOSwweGIyLDB4ZDUsMHhlNCwweGMzLDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweGVlfSwKKyAgMTYsMHgzNmU4LDAsezB4MzAsMHhlNywweDE1LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZiwweGZmLDB4ZTQsMHg5ZSwweGZlLDB4MTIsMHgzOCwweDFmLDB4YzN9LAorICAxNiwweDM2ZjgsMCx7MHhlNCwweDlkLDB4ZmQsMHhlNCwweDljLDB4ZmMsMHg4MCwweDAzLDB4MTIsMHgzOCwweDFmLDB4MzAsMHhkNSwweDA3LDB4YzMsMHhlNH0sCisgICA2LDB4MzcwOCwwLHsweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgyMn0sCisgIDE2LDB4MzcwZSwwLHsweGJiLDB4MDEsMHgxMCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTAsMHhmNSwweGYwfSwKKyAgMTYsMHgzNzFlLDAsezB4YTMsMHhlMCwweDIyLDB4NTAsMHgwOSwweGU5LDB4MjUsMHg4MiwweGY4LDB4ODYsMHhmMCwweDA4LDB4ZTYsMHgyMiwweGJiLDB4ZmV9LAorICAxNiwweDM3MmUsMCx7MHgwYSwweGU5LDB4MjUsMHg4MiwweGY4LDB4ZTIsMHhmNSwweGYwLDB4MDgsMHhlMiwweDIyLDB4ZTUsMHg4MywweDJhLDB4ZjUsMHg4M30sCisgICA4LDB4MzczZSwwLHsweGU5LDB4OTMsMHhmNSwweGYwLDB4YTMsMHhlOSwweDkzLDB4MjJ9LAorICAxNiwweDM3NDYsMCx7MHhlOCwweDhmLDB4ZjAsMHhhNCwweGNjLDB4OGIsMHhmMCwweGE0LDB4MmMsMHhmYywweGU5LDB4OGUsMHhmMCwweGE0LDB4MmMsMHhmY30sCisgIDE2LDB4Mzc1NiwwLHsweDhhLDB4ZjAsMHhlZCwweGE0LDB4MmMsMHhmYywweGVhLDB4OGUsMHhmMCwweGE0LDB4Y2QsMHhhOCwweGYwLDB4OGIsMHhmMCwweGE0fSwKKyAgMTYsMHgzNzY2LDAsezB4MmQsMHhjYywweDM4LDB4MjUsMHhmMCwweGZkLDB4ZTksMHg4ZiwweGYwLDB4YTQsMHgyYywweGNkLDB4MzUsMHhmMCwweGZjLDB4ZWJ9LAorICAxNiwweDM3NzYsMCx7MHg4ZSwweGYwLDB4YTQsMHhmZSwweGE5LDB4ZjAsMHhlYiwweDhmLDB4ZjAsMHhhNCwweGNmLDB4YzUsMHhmMCwweDJlLDB4Y2QsMHgzOX0sCisgIDE1LDB4Mzc4NiwwLHsweGZlLDB4ZTQsMHgzYywweGZjLDB4ZWEsMHhhNCwweDJkLDB4Y2UsMHgzNSwweGYwLDB4ZmQsMHhlNCwweDNjLDB4ZmMsMHgyMn0sCisgIDE2LDB4Mzc5NSwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGVjLDB4NjQsMHg4MCwweGM4fSwKKyAgIDYsMHgzN2E1LDAsezB4NjQsMHg4MCwweDk4LDB4NDUsMHhmMCwweDIyfSwKKyAgMTYsMHgzN2FiLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9LAorICAgMSwweDM3YmIsMCx7MHgyMn0sCisgIDEyLDB4MzdiYywwLHsweGVjLDB4ZjAsMHhhMywweGVkLDB4ZjAsMHhhMywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHgyMn0sCisgIDE2LDB4MzdjOCwwLHsweGE4LDB4ODIsMHg4NSwweDgzLDB4ZjAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDEyLDB4MzcsMHhkZiwweDEyLDB4MzcsMHhkZiwweDEyfSwKKyAgMTYsMHgzN2Q4LDAsezB4MzcsMHhkZiwweDEyLDB4MzcsMHhkZiwweGU0LDB4NzMsMHhlNCwweDkzLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODN9LAorICAxNiwweDM3ZTgsMCx7MHhjOCwweGM1LDB4ODIsMHhjOCwweGYwLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODMsMHhjOCwweGM1LDB4ODIsMHhjOH0sCisgICAxLDB4MzdmOCwwLHsweDIyfSwKKyAgMTYsMHgzN2Y5LDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhmOCwweGU0LDB4OTMsMHg3MCwweDEyLDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwZCwweGEzLDB4YTN9LAorICAxNiwweDM4MDksMCx7MHg5MywweGY4LDB4NzQsMHgwMSwweDkzLDB4ZjUsMHg4MiwweDg4LDB4ODMsMHhlNCwweDczLDB4NzQsMHgwMiwweDkzLDB4NjgsMHg2MH0sCisgICA2LDB4MzgxOSwwLHsweGVmLDB4YTMsMHhhMywweGEzLDB4ODAsMHhkZn0sCisgIDE2LDB4MzgxZiwwLHsweGJjLDB4MDAsMHgwYiwweGJlLDB4MDAsMHgyOSwweGVmLDB4OGQsMHhmMCwweDg0LDB4ZmYsMHhhZCwweGYwLDB4MjIsMHhlNCwweGNjfSwKKyAgMTYsMHgzODJmLDAsezB4ZjgsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmLDB4ZmYsMHhlZSwweDMzLDB4ZmUsMHhlYywweDMzLDB4ZmMsMHhlZSwweDlkLDB4ZWN9LAorICAxNiwweDM4M2YsMCx7MHg5OCwweDQwLDB4MDUsMHhmYywweGVlLDB4OWQsMHhmZSwweDBmLDB4ZDUsMHhmMCwweGU5LDB4ZTQsMHhjZSwweGZkLDB4MjIsMHhlZH0sCisgIDE2LDB4Mzg0ZiwwLHsweGY4LDB4ZjUsMHhmMCwweGVlLDB4ODQsMHgyMCwweGQyLDB4MWMsMHhmZSwweGFkLDB4ZjAsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmfSwKKyAgMTYsMHgzODVmLDAsezB4ZmYsMHhlZCwweDMzLDB4ZmQsMHg0MCwweDA3LDB4OTgsMHg1MCwweDA2LDB4ZDUsMHhmMCwweGYyLDB4MjIsMHhjMywweDk4LDB4ZmR9LAorICAgNSwweDM4NmYsMCx7MHgwZiwweGQ1LDB4ZjAsMHhlYSwweDIyfSwKKyAgMTYsMHgzODc0LDAsezB4ZTQsMHg5MCwweDc2LDB4MjksMHhmMCwweDkwLDB4NzYsMHgyOSwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDJ9LAorICAxNiwweDM4ODQsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH0sCisgIDE2LDB4Mzg5NCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjksMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fSwKKyAgMTYsMHgzOGE0LDAsezB4ZWYsMHhiNCwweDA2LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MGZ9LAorICAxNiwweDM4YjQsMCx7MHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDJhLDB4ZjAsMHgyNH0sCisgIDE2LDB4MzhjNCwwLHsweGJmLDB4NzAsMHgwMiwweDQxLDB4NDEsMHgyNCwweGUwLDB4NzAsMHgwMiwweDQxLDB4MTIsMHgyNCwweDIxLDB4NjAsMHgwMiwweDQxfSwKKyAgMTYsMHgzOGQ0LDAsezB4M2EsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmUsMHg2MCwweDdkLDB4MTQsMHg3MCwweDAyLDB4MjEsMHhiMiwweDI0LDB4MDJ9LAorICAxNiwweDM4ZTQsMCx7MHg2MCwweDAyLDB4NDEsMHgwYSwweDEyLDB4MTcsMHg1MSwweDkwLDB4NzYsMHg0MiwweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhM30sCisgIDE2LDB4MzhmNCwwLHsweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1fSwKKyAgMTYsMHgzOTA0LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGJjLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDF9LAorICAxNiwweDM5MTQsMCx7MHgxMiwweDkwLDB4NzYsMHg3YywweDc0LDB4NjcsMHhmMCwweDkwLDB4NzYsMHg3ZCwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzYsMHg3ZX0sCisgIDE2LDB4MzkyNCwwLHsweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBmLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweDkwLDB4NzYsMHg3ZCwweGYwfSwKKyAgMTYsMHgzOTM0LDAsezB4OTAsMHg3NiwweDdlLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGYsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4OTB9LAorICAxNiwweDM5NDQsMCx7MHg3NiwweDdkLDB4ZjAsMHg5MCwweDc2LDB4N2UsMHg3NCwweDE4LDB4ZjAsMHg5MCwweDc2LDB4MWEsMHg3NCwweDAxLDB4ZjAsMHgxMn0sCisgIDE2LDB4Mzk1NCwwLHsweDNlLDB4OWYsMHgxMiwweDE4LDB4MDAsMHgyMiwweDkwLDB4N2UsMHhjMiwweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZifSwKKyAgMTYsMHgzOTY0LDAsezB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDM3LDB4NDYsMHhjOCwweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2F9LAorICAxNiwweDM5NzQsMCx7MHhjYiwweGVmLDB4Y2IsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZlLDB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYX0sCisgIDE2LDB4Mzk4NCwwLHsweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOCwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmfSwKKyAgMTYsMHgzOTk0LDAsezB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkLDB4ZWMsMHgzOCwweGZjLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwLDB4MGZ9LAorICAxNiwweDM5YTQsMCx7MHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhiYywweDIyLDB4OTAsMHg3ZX0sCisgIDE2LDB4MzliNCwwLHsweGMyLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweGZlLDB4ZmIsMHhmYSwweDc5LDB4MDEsMHhmOCwweDEyLDB4MzcsMHg0NiwweGM4fSwKKyAgMTYsMHgzOWM0LDAsezB4ZWMsMHhjOCwweGM5LDB4ZWQsMHhjOSwweGNhLDB4ZWUsMHhjYSwweGNiLDB4ZWYsMHhjYiwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmV9LAorICAxNiwweDM5ZDQsMCx7MHhlNCwweGZjLDB4ZmQsMHgyYiwweGZiLDB4ZWEsMHgzZSwweGZhLDB4ZWQsMHgzOSwweGY5LDB4ZWMsMHgzOCwweGY4LDB4OTAsMHg3ZX0sCisgIDE2LDB4MzllNCwwLHsweGMwLDB4ZTAsMHhmZiwweGU0LDB4ZmUsMHhlYiwweDJmLDB4ZmYsMHhlZSwweDNhLDB4ZmUsMHhlZCwweDM5LDB4ZmQsMHhlYywweDM4fSwKKyAgMTYsMHgzOWY0LDAsezB4ZmMsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDNhMDQsMCx7MHhmNSwweDgzLDB4MTIsMHgzNywweGJjLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0sCisgIDE2LDB4M2ExNCwwLHsweGU5LDB4ZTAsMHgxNCwweDcwLDB4MTksMHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwfSwKKyAgMTYsMHgzYTI0LDAsezB4MGYsMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwLDB4N2Z9LAorICAxNCwweDNhMzQsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHgzYTQyLDAsezB4ZTQsMHg5MCwweDc2LDB4MzUsMHhmMCwweDkwLDB4NzYsMHgzNSwweGUwLDB4ZmYsMHhjMywweDk0LDB4MDMsMHg0MCwweDAyLDB4NDF9LAorICAxNiwweDNhNTIsMCx7MHhmZiwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZn0sCisgIDE2LDB4M2E2MiwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0fSwKKyAgMTYsMHgzYTcyLDAsezB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzR9LAorICAxNiwweDNhODIsMCx7MHhmMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4M2E5MiwwLHsweDc0LDB4ZmYsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgzYWEyLDAsezB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDNhYjIsMCx7MHg4MywweDc0LDB4ODAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4M2FjMiwwLHsweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgzYWQyLDAsezB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDNhZTIsMCx7MHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4M2FmMiwwLHsweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MzUsMHhlMCwweDA0LDB4ZjAsMHg0MSwweDQ3LDB4OTAsMHg3NiwweDNjfSwKKyAgMTYsMHgzYjAyLDAsezB4NzQsMHgwYSwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3NiwweDM1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDNjLDB4ZTB9LAorICAxNiwweDNiMTIsMCx7MHhmZiwweDkwLDB4NzYsMHgzNSwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMiwweDYxLDB4ZDIsMHg5MCwweDc2LDB4M2QsMHhlMH0sCisgIDE2LDB4M2IyMiwwLHsweGZmLDB4MDQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgzYjMyLDAsezB4ODMsMHhlZiwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDNiNDIsMCx7MHg4MywweGU0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4M2I1MiwwLHsweDgzLDB4NzQsMHg1ZSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgzYjYyLDAsezB4ZjUsMHg4MywweDc0LDB4YmEsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDNiNzIsMCx7MHg3NSwweGY1LDB4ODMsMHg3NCwweDA1LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4M2I4MiwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyfSwKKyAgMTYsMHgzYjkyLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODJ9LAorICAxNiwweDNiYTIsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4Mn0sCisgIDE2LDB4M2JiMiwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDE1LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1fSwKKyAgMTYsMHgzYmMyLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNSwweGUwLDB4MDQsMHhmMCwweDYxLDB4MGV9LAorICAgMSwweDNiZDIsMCx7MHgyMn0sCisgIDE2LDB4M2JkMywwLHsweGU0LDB4OTAsMHg3NiwweDM2LDB4ZjAsMHhlMCwweGZiLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgzYmUzLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQwLDB4ZjAsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODJ9LAorICAxNiwweDNiZjMsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwYSwweGYwLDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNX0sCisgIDE2LDB4M2MwMywwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDAsMHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwfSwKKyAgMTYsMHgzYzEzLDAsezB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDB9LAorICAxNiwweDNjMjMsMCx7MHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4M2MzMywwLHsweDEyLDB4MzcsMHhjOCwweDAwLDB4MDEsMHg3NywweDAwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmYiwweDc1fSwKKyAgMTYsMHgzYzQzLDAsezB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MCwweGYwLDB4ZWJ9LAorICAxNiwweDNjNTMsMCx7MHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4OGMsMHhmMH0sCisgIDE2LDB4M2M2MywwLHsweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3fSwKKyAgMTYsMHgzYzczLDAsezB4YzgsMHgwMCwweDAwLDB4YWMsMHg0NCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDNjODMsMCx7MHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAwLDB4YWMsMHg0NCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNH0sCisgIDE2LDB4M2M5MywwLHsweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAxLDB4NzcsMHgwMCwweDkwfSwKKyAgMTYsMHgzY2EzLDAsezB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDNjYjMsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4Mn0sCisgIDE2LDB4M2NjMywwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDhmLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmfSwKKyAgMTYsMHgzY2QzLDAsezB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQxLDB4ZjB9LAorICAxNiwweDNjZTMsMCx7MHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4NH0sCisgIDE2LDB4M2NmMywwLHsweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1fSwKKyAgMTYsMHgzZDAzLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg2MSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDJ9LAorICAxNiwweDNkMTMsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4ODEsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMH0sCisgIDE2LDB4M2QyMywwLHsweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fSwKKyAgMTYsMHgzZDMzLDAsezB4NjEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAgNCwweDNkNDMsMCx7MHg3NCwweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4M2Q0NywwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfSwKKyAgMTYsMHgzZDU3LDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9LAorICAxNiwweDNkNjcsMCx7MHhjMCwweGUwLDB4OTAsMHg3ZiwweGEyLDB4ZTAsMHg5MCwweDc2LDB4N2YsMHhmMCwweDkwLDB4N2YsMHg3NCwweGUwLDB4OTAsMHg3Nn0sCisgIDE2LDB4M2Q3NywwLHsweDg3LDB4ZjAsMHg5MCwweDdmLDB4NzUsMHhlMCwweDkwLDB4NzYsMHg4OCwweGYwLDB4OTAsMHg3ZiwweDk4LDB4ZTAsMHg0NCwweDAyfSwKKyAgMTYsMHgzZDg3LDAsezB4ZjAsMHg5MCwweDc2LDB4OTYsMHhlMCwweGZmLDB4MjAsMHhlMSwweDBjLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjB9LAorICAxNiwweDNkOTcsMCx7MHhkMiwweDMyLDB4MTIsMHg0YiwweDI4LDB4OTAsMHg3NiwweDdmLDB4ZTAsMHgyMCwweGUyLDB4NTAsMHg5MCwweDc2LDB4ODcsMHhlMH0sCisgIDE2LDB4M2RhNywwLHsweGZlLDB4YTMsMHhlMCwweDdjLDB4MDAsMHgyNCwweDAwLDB4ZjUsMHgzNCwweGVjLDB4M2UsMHhmNSwweDMzLDB4OTAsMHg3NiwweDk4fSwKKyAgMTYsMHgzZGI3LDAsezB4ZTAsMHhmZCwweGFlLDB4MzMsMHhhZiwweDM0LDB4MTIsMHgzNiwweGQ4LDB4OTAsMHg3NiwweDg3LDB4ZWYsMHhmMCwweGQyLDB4MmZ9LAorICAxNiwweDNkYzcsMCx7MHgzMCwweDMxLDB4MjksMHgyMCwweDNmLDB4MjYsMHhjMiwweDMxLDB4OTAsMHg3ZiwweDk0LDB4ZTAsMHg1NCwweGNmLDB4ZjAsMHg5MH0sCisgIDE2LDB4M2RkNywwLHsweDdmLDB4OWEsMHhlMCwweDMwLDB4ZTQsMHgwNCwweGQyLDB4MmQsMHhjMiwweDJjLDB4OTAsMHg3ZiwweDlhLDB4ZTAsMHgyMCwweGU1fSwKKyAgMTYsMHgzZGU3LDAsezB4MDQsMHhjMiwweDJkLDB4ZDIsMHgyYywweDkwLDB4N2YsMHg5NCwweGUwLDB4NDQsMHgzMCwweGYwLDB4MTIsMHg0OCwweGJkLDB4MTJ9LAorICAxNiwweDNkZjcsMCx7MHgxYiwweDA0LDB4MzAsMHgyZiwweDEyLDB4MTIsMHg0MiwweDFmLDB4YzIsMHgyZiwweDc1LDB4ZTgsMHgwMSwweDEyLDB4MTYsMHg4YX0sCisgIDE2LDB4M2UwNywwLHsweDc1LDB4ZTgsMHgwZCwweGQyLDB4MmIsMHg4MCwweDA1LDB4NzUsMHhlOCwweDAxLDB4YzIsMHgyYiwweDIwLDB4MmIsMHgzNCwweDkwfSwKKyAgMTYsMHgzZTE3LDAsezB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGUsMHg5MCwweDc2LDB4N2MsMHg3NCwweDY3LDB4ZjAsMHhhMywweDc0LDB4MDZ9LAorICAxNiwweDNlMjcsMCx7MHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGIsMHg5MCwweDc2LDB4N2MsMHhlNCwweGYwLDB4YTMsMHhmMH0sCisgIDE2LDB4M2UzNywwLHsweGEzLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGIsMHg5MCwweDc2LDB4N2MsMHhlNCwweGYwLDB4YTMsMHhmMCwweGEzfSwKKyAgMTYsMHgzZTQ3LDAsezB4NzQsMHgxOCwweGYwLDB4NzUsMHhjYSwweGQzLDB4NzUsMHhjYiwweGZlLDB4ZDIsMHhjYSwweDMwLDB4MzQsMHgwNCwweGMyLDB4MzR9LAorICAxNiwweDNlNTcsMCx7MHg4MCwweDAyLDB4ZDIsMHgzNCwweDMwLDB4MzQsMHgwZCwweDkwLDB4NzYsMHg4OSwweGUwLDB4YzMsMHg5NCwweDAzLDB4NDAsMHgwNH0sCisgIDE2LDB4M2U2NywwLHsweGUwLDB4MjQsMHhmZCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHgzZTc3LDAsezB4OTgsMHhlMCwweDU0LDB4ZmQsMHhmMCwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTB9LAorICAxNiwweDNlODcsMCx7MHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMH0sCisgICA4LDB4M2U5NywwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDNlOWYsMCx7MHg5MCwweDc2LDB4OTIsMHhlMCwweDE0LDB4NjAsMHgxZCwweDE0LDB4NzAsMHgwMiwweGUxLDB4NTQsMHgyNCwweDAyLDB4NjAsMHgwMn0sCisgIDE2LDB4M2VhZiwwLHsweGUxLDB4ZTQsMHg5MCwweDc2LDB4OTQsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDgwLDB4MDAsMHhmMCwweGU0LDB4OTAsMHg3NiwweDhlfSwKKyAgMTYsMHgzZWJmLDAsezB4ZjAsMHhkMiwweDMxLDB4MjIsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDFiLDB4ZTQsMHg5MCwweDdmLDB4ZjJ9LAorICAxNiwweDNlY2YsMCx7MHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5N30sCisgIDE2LDB4M2VkZiwwLHsweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MWIsMHhlNCwweDkwLDB4N2YsMHhmMiwweGYwfSwKKyAgMTYsMHgzZWVmLDAsezB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzNCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTB9LAorICAxNiwweDNlZmYsMCx7MHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgxOCwweGU0LDB4OTAsMHg3ZiwweGYyLDB4ZjAsMHg5MH0sCisgIDE2LDB4M2YwZiwwLHsweDdmLDB4ZjMsMHg3NCwweDY0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0fSwKKyAgMTYsMHgzZjFmLDAsezB4MDQsMHhmMCwweDkwLDB4NzYsMHg5NCwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg4MCwweDAwLDB4ZjAsMHgzMCwweDNmLDB4MDl9LAorICAxNiwweDNmMmYsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgIDE2LDB4M2YzZiwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHg5MCwweDc2LDB4OTgsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2fSwKKyAgMTYsMHgzZjRmLDAsezB4OGUsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MWIsMHhlNCwweDkwLDB4N2Z9LAorICAxNiwweDNmNWYsMCx7MHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHg0NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3Nn0sCisgIDE2LDB4M2Y2ZiwwLHsweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgxYiwweGU0LDB4OTAsMHg3ZiwweGYyfSwKKyAgMTYsMHgzZjdmLDAsezB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDRjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTd9LAorICAxNiwweDNmOGYsMCx7MHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMywweDE4LDB4ZTQsMHg5MCwweDdmLDB4ZjIsMHhmMH0sCisgIDE2LDB4M2Y5ZiwwLHsweDkwLDB4N2YsMHhmMywweDc0LDB4OTQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwfSwKKyAgMTYsMHgzZmFmLDAsezB4NDQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDk0LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg5MCwweDgwLDB4MDAsMHhmMCwweDMwLDB4M2Z9LAorICAxNiwweDNmYmYsMCx7MHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMX0sCisgIDE2LDB4M2ZjZiwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDkwLDB4NzYsMHg5OCwweDc0LDB4MDYsMHhmMCwweDkwfSwKKyAgIDYsMHgzZmRmLDAsezB4NzYsMHg4ZSwweDc0LDB4MDIsMHhmMCwweDIyfSwKKyAgMTYsMHgzZmU1LDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4ODIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDkxLDB4ZjAsMHg5MCwweDc2LDB4OTJ9LAorICAxMSwweDNmZjUsMCx7MHhmMCwweDkwLDB4NzYsMHg5MCwweGYwLDB4OTAsMHg3NiwweDkzLDB4ZjAsMHhkMywweDIyfSwKKyAgMTYsMHg0MDAwLDAsezB4ZTUsMHgxMSwweGQzLDB4OTQsMHgwMCwweDUwLDB4MDIsMHgyMSwweDA2LDB4OTAsMHg3NiwweDg5LDB4ZTAsMHhjMywweDk0LDB4MDh9LAorICAxNiwweDQwMTAsMCx7MHg0MCwweDAyLDB4MjEsMHgwNiwweDc0LDB4NDAsMHgyNSwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMH0sCisgIDE2LDB4NDAyMCwwLHsweGY1LDB4MTcsMHhlNSwweDBkLDB4NjAsMHgwZSwweDkwLDB4ODAsMHgwNSwweGU1LDB4MTcsMHhmMCwweDkwLDB4NzYsMHg4OSwweGUwfSwKKyAgMTYsMHg0MDMwLDAsezB4MDQsMHhmMCwweDAxLDB4ZGEsMHhlNSwweDE3LDB4MTIsMHgzNywweGY5LDB4NDAsMHhjMSwweDAyLDB4NDAsMHg2NywweDA1LDB4NDB9LAorICAxNiwweDQwNDAsMCx7MHg3YSwweDA2LDB4NDAsMHg5OCwweDA3LDB4NDAsMHhjMSwweDBjLDB4NDAsMHhjMSwweDBkLDB4NDAsMHhjNywweDBmLDB4NDAsMHhjYn0sCisgIDE2LDB4NDA1MCwwLHsweGY2LDB4NDAsMHhjYiwweGY4LDB4NDAsMHhjYiwweGZhLDB4NDAsMHhjYiwweGZiLDB4NDAsMHhjYiwweGZjLDB4NDAsMHhjYiwweGZlfSwKKyAgMTYsMHg0MDYwLDAsezB4NDAsMHhjYiwweGZmLDB4MDAsMHgwMCwweDQwLDB4ZGEsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTB9LAorICAxNiwweDQwNzAsMCx7MHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4ODAsMHg2MCwweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MH0sCisgIDE2LDB4NDA4MCwwLHsweDA1LDB4ZjAsMHg5MCwweDdlLDB4NDIsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwfSwKKyAgMTYsMHg0MDkwLDAsezB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4ODAsMHg0MiwweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjB9LAorICAxNiwweDQwYTAsMCx7MHg5MCwweDdlLDB4NDIsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3ZSwweDQzLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMH0sCisgIDE2LDB4NDBiMCwwLHsweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweGUwLDB4MDQsMHhmMCwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDgwfSwKKyAgMTYsMHg0MGMwLDAsezB4MTksMHhkMiwweDNiLDB4ZDIsMHgzYywweDgwLDB4MTMsMHhkMiwweDNiLDB4ODAsMHgwZiwweDkwLDB4ODAsMHgwNSwweGU1LDB4MTd9LAorICAxNiwweDQwZDAsMCx7MHhmMCwweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDIwLDB4M2IsMHgwNCwweDA1LDB4MGQsMHg4MH0sCisgIDE2LDB4NDBlMCwwLHsweDFmLDB4MzAsMHgzYywweDFjLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4N2UsMHg0MiwweGUwfSwKKyAgMTYsMHg0MGYwLDAsezB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDF9LAorICAxNiwweDQxMDAsMCx7MHgwNSwweDBmLDB4MTUsMHgxMSwweDAxLDB4MDAsMHhlNSwweDExLDB4NzAsMHgxMCwweGMyLDB4MzMsMHhmNSwweDBkLDB4ZjUsMHgwZn0sCisgIDExLDB4NDExMCwwLHsweDkwLDB4N2YsMHhjNywweDc0LDB4MDQsMHhmMCwweGMyLDB4M2IsMHhjMiwweDNjLDB4MjJ9LAorICAxNiwweDQxMWIsMCx7MHg5MCwweDc2LDB4OGQsMHhlMCwweDY0LDB4MDEsMHg3MCwweDI3LDB4MzAsMHgyNywweDA4LDB4YzIsMHgyNywweDEyLDB4MDgsMHgwMH0sCisgIDE2LDB4NDEyYiwwLHsweDEyLDB4MTcsMHg0YSwweDMwLDB4MjgsMHgwOCwweGMyLDB4MjgsMHgxMiwweDM4LDB4NzQsMHgxMiwweDE3LDB4NGEsMHgzMCwweDJhfSwKKyAgMTYsMHg0MTNiLDAsezB4MGUsMHhlNCwweDkwLDB4NzYsMHg4ZCwweGYwLDB4YzIsMHgyYSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMiwweGYwLDB4OTB9LAorICAxNiwweDQxNGIsMCx7MHg3NiwweDNmLDB4ZTAsMHhiNCwweDAxLDB4MDUsMHhlNCwweGYwLDB4MTIsMHgzMiwweDZmLDB4OTAsMHg3NiwweDQxLDB4ZTAsMHhiNH0sCisgIDE2LDB4NDE1YiwwLHsweDAxLDB4MDUsMHhlNCwweGYwLDB4MTIsMHgzNCwweDlhLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHhiNCwweDAxLDB4MDMsMHgxMiwweDM0fSwKKyAgMTYsMHg0MTZiLDAsezB4OWEsMHgxMiwweDMwLDB4MDAsMHgzMCwweDMzLDB4MDMsMHgxMiwweDQwLDB4MDAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDIwLDB4ZTR9LAorICAxNiwweDQxN2IsMCx7MHgwMiwweGMyLDB4M2YsMHg5MCwweDdmLDB4OWIsMHhlMCwweDMwLDB4ZTQsMHgwMiwweGQyLDB4M2YsMHg5MCwweDdmLDB4OWIsMHhlMH0sCisgIDE2LDB4NDE4YiwwLHsweDIwLDB4ZTUsMHgwMiwweGMyLDB4M2UsMHg5MCwweDdmLDB4OWIsMHhlMCwweDMwLDB4ZTUsMHgwMiwweGQyLDB4M2UsMHhhMiwweDQxfSwKKyAgMTYsMHg0MTliLDAsezB4MzAsMHgzZiwweDAxLDB4YjMsMHg1MCwweDFmLDB4YTIsMHgzZiwweDkyLDB4NDEsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTd9LAorICAxNiwweDQxYWIsMCx7MHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5N30sCisgIDE2LDB4NDFiYiwwLHsweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHgzMCwweDNmLDB4MzQsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBlfSwKKyAgMTYsMHg0MWNiLDAsezB4OTAsMHg3NiwweDdjLDB4NzQsMHg2NywweGYwLDB4YTMsMHg3NCwweDA2LDB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjR9LAorICAxNiwweDQxZGIsMCx7MHgwMiwweDBiLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4ZjAsMHhhMywweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwM30sCisgIDE2LDB4NDFlYiwwLHsweDBiLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4ZjAsMHhhMywweDc0LDB4MTgsMHhmMCwweGEyLDB4NDAsMHgzMCwweDNlfSwKKyAgMTYsMHg0MWZiLDAsezB4MDEsMHhiMywweDUwLDB4MWYsMHhhMiwweDNlLDB4OTIsMHg0MCwweDMwLDB4M2UsMHgwOSwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDR9LAorICAxNiwweDQyMGIsMCx7MHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MH0sCisgICA0LDB4NDIxYiwwLHsweDgwLDB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHg0MjFmLDAsezB4OTAsMHg3NiwweDE5LDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgzNSwweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhkMywweDk0LDB4MmR9LAorICAxNiwweDQyMmYsMCx7MHg0MCwweDJiLDB4OTAsMHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkM30sCisgIDE2LDB4NDIzZiwwLHsweDk0LDB4MGYsMHg0MCwweDE5LDB4ZTQsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgwOCwweDkwLDB4NzYsMHgxOSwweDc0fSwKKyAgMTYsMHg0MjRmLDAsezB4MDMsMHhmMCwweDgwLDB4MDYsMHg5MCwweDc2LDB4MTksMHg3NCwweDAyLDB4ZjAsMHgxMiwweDNlLDB4OWYsMHg5MCwweDc2LDB4MTl9LAorICAxNiwweDQyNWYsMCx7MHhlMCwweGI0LDB4MDIsMHgyYywweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhjMywweDk0LDB4MmYsMHg1MCwweDIyLDB4ZWYsMHhkM30sCisgIDE2LDB4NDI2ZiwwLHsweDk0LDB4MmEsMHg0MCwweDFjLDB4OTAsMHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwfSwKKyAgMTYsMHg0MjdmLDAsezB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MCwweDBhLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgxOSwweDA0LDB4ZjAsMHgxMiwweDNlLDB4OWZ9LAorICAxNiwweDQyOGYsMCx7MHg5MCwweDc2LDB4MTksMHhlMCwweGI0LDB4MDIsMHgyNiwweDkwLDB4NzYsMHg4NywweGUwLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgxZH0sCisgIDE2LDB4NDI5ZiwwLHsweDkwLDB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDMsMHg5NCwweDBmfSwKKyAgMTYsMHg0MmFmLDAsezB4NDAsMHgwYiwweGU0LDB4ZjAsMHg5MCwweDc2LDB4MTksMHg3NCwweDAzLDB4ZjAsMHgxMiwweDNlLDB4OWYsMHg5MCwweDc2LDB4MTl9LAorICAxNiwweDQyYmYsMCx7MHhlMCwweDY0LDB4MDMsMHg3MCwweDNmLDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGMzLDB4OTQsMHg1ZiwweDUwLDB4MzUsMHg5MH0sCisgIDE2LDB4NDJjZiwwLHsweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZiwweDQwfSwKKyAgMTYsMHg0MmRmLDAsezB4MjMsMHhlNCwweGYwLDB4ZWYsMHhjMywweDk0LDB4MmYsMHg1MCwweDBjLDB4ZWYsMHhkMywweDk0LDB4MmEsMHg0MCwweDA2LDB4OTB9LAorICAxNiwweDQyZWYsMCx7MHg3NiwweDE5LDB4NzQsMHgwMSwweGYwLDB4ZWYsMHhkMywweDk0LDB4MmYsMHg0MCwweDA2LDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMn0sCisgIDE2LDB4NDJmZiwwLHsweGYwLDB4MTIsMHgzZSwweDlmLDB4OTAsMHg3NiwweDg2LDB4ZTAsMHg3MCwweDA1LDB4OTAsMHg3NiwweDg1LDB4ZjAsMHgyMiwweGU0fSwKKyAgIDUsMHg0MzBmLDAsezB4OTAsMHg3NiwweDg2LDB4ZjAsMHgyMn0sCisgIDE2LDB4NDMxNCwwLHsweGU0LDB4OTAsMHg3NiwweDk2LDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweDkwLDB4N2YsMHhlMCwweDc0LDB4OTAsMHhmMCwweDkwfSwKKyAgMTYsMHg0MzI0LDAsezB4N2YsMHhlMSwweDc0LDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3ZiwweGRkLDB4ZjAsMHg5MCwweDdmLDB4YTEsMHhmMCwweDUzLDB4OGV9LAorICAxNiwweDQzMzQsMCx7MHhmOCwweDc1LDB4ODgsMHgwNSwweDc1LDB4YjgsMHgyMCwweDc1LDB4ZjgsMHgwMSwweDQzLDB4OGUsMHgzMCwweGY1LDB4YzgsMHg3NX0sCisgIDE2LDB4NDM0NCwwLHsweGNhLDB4N2YsMHg3NSwweGNiLDB4ZjgsMHg0MywweGE4LDB4MjAsMHgxMiwweDQ1LDB4NjUsMHhjMiwweDJjLDB4YzIsMHgyZCwweGMyfSwKKyAgMTYsMHg0MzU0LDAsezB4MmIsMHhjMiwweDJmLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhkZCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmZiwweGYwLDB4OTB9LAorICAxNiwweDQzNjQsMCx7MHg3ZiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MTksMHg3NCwweDAxLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4NX0sCisgIDE2LDB4NDM3NCwwLHsweGYwLDB4YTMsMHhmMCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgxMiwweDQ5LDB4YWUsMHgxMiwweDBmfSwKKyAgMTYsMHg0Mzg0LDAsezB4YzYsMHgxMiwweDRhLDB4ZjEsMHg5MCwweDdmLDB4OTcsMHhlMCwweDQ0LDB4MDgsMHhmMCwweGUwLDB4NTQsMHhiOSwweGYwLDB4ZDJ9LAorICAxNiwweDQzOTQsMCx7MHgzMCwweDIwLDB4MzAsMHgxOCwweDEyLDB4NGEsMHhhNiwweDEyLDB4MzAsMHgwMCwweDEyLDB4NDAsMHgwMCwweDEyLDB4NDIsMHgxZn0sCisgIDE2LDB4NDNhNCwwLHsweDEyLDB4NDgsMHhiZCwweDEyLDB4MWIsMHgwNCwweDEyLDB4MTYsMHg2MSwweDEyLDB4NDIsMHgxZiwweDEyLDB4NGEsMHhhNiwweGMyfSwKKyAgMTYsMHg0M2I0LDAsezB4MmYsMHhjMiwweDMxLDB4YzIsMHgzMiwweGMyLDB4MzQsMHhjMiwweDMzLDB4YzIsMHgyOSwweGMyLDB4MjcsMHhjMiwweDI4LDB4ZTR9LAorICAxNiwweDQzYzQsMCx7MHhmNSwweDExLDB4OTAsMHg3NiwweDg5LDB4ZjAsMHg5MCwweDc2LDB4M2YsMHhmMCwweDkwLDB4NzYsMHg0MSwweGYwLDB4OTAsMHg3Nn0sCisgIDE2LDB4NDNkNCwwLHsweDQwLDB4ZjAsMHg5MCwweDc2LDB4OGEsMHhmMCwweGEzLDB4ZjAsMHhhMywweDA0LDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDc2fSwKKyAgIDMsMHg0M2U0LDAsezB4OTksMHhmMCwweDIyfSwKKyAgMTYsMHg0M2U3LDAsezB4MTIsMHg0ZSwweDE5LDB4NDAsMHgwMiwweDgxLDB4YWMsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDI0LDB4ZmUsMHg2MCwweDFlLDB4MTR9LAorICAxNiwweDQzZjcsMCx7MHg2MCwweDQ2LDB4MTQsMHg2MCwweDZlLDB4MTQsMHg3MCwweDAyLDB4ODEsMHg5ZCwweDI0LDB4MDQsMHg2MCwweDAyLDB4ODEsMHhhNX0sCisgIDE2LDB4NDQwNywwLHsweDc0LDB4MDUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweDc0LDB4MDAsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhfSwKKyAgMTYsMHg0NDE3LDAsezB4ZTAsMHhmZiwweDEyLDB4NGEsMHg1NSwweDhiLDB4MjAsMHg4YSwweDIxLDB4ODksMHgyMiwweGVhLDB4NDksMHg2MCwweDExLDB4Y2V9LAorICAxNiwweDQ0MjcsMCx7MHhlYSwweGNlLDB4ZWUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMn0sCisgIDE2LDB4NDQzNywwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZmLDB4MTIsMHg0NywweGI3fSwKKyAgMTYsMHg0NDQ3LDAsezB4OGIsMHgyMCwweDhhLDB4MjEsMHg4OSwweDIyLDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZSwweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2Z9LAorICAxNiwweDQ0NTcsMCx7MHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0sCisgIDE2LDB4NDQ2NywwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZifSwKKyAgMTYsMHg0NDc3LDAsezB4MTIsMHgxNywweDk0LDB4OGIsMHgyMCwweDhhLDB4MjEsMHg4OSwweDIyLDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZSwweGVhLDB4Y2V9LAorICAxNiwweDQ0ODcsMCx7MHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3Zn0sCisgIDE2LDB4NDQ5NywwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfSwKKyAgIDUsMHg0NGE3LDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgICAxLDB4NDRhYywwLHsweDIyfSwKKyAgMTYsMHg0NGFkLDAsezB4YzIsMHhhZiwweGQyLDB4MjQsMHg5MCwweDdmLDB4OTMsMHg3NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4OWMsMHg3NCwweGJiLDB4ZjB9LAorICAxNiwweDQ0YmQsMCx7MHg5MCwweDdmLDB4OTYsMHhlMCwweDQ0LDB4MzAsMHhmMCwweGUwLDB4NTQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDk0LDB4NzQsMHgzMH0sCisgIDE2LDB4NDRjZCwwLHsweGYwLDB4OTAsMHg3ZiwweDlkLDB4NzQsMHhjZiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweDk1fSwKKyAgMTYsMHg0NGRkLDAsezB4NzQsMHhjMCwweGYwLDB4OTAsMHg3ZiwweDllLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweDk5LDB4ZTAsMHgzMCwweGUyLDB4MDl9LAorICAxNiwweDQ0ZWQsMCx7MHg5MCwweDA1LDB4MTksMHg3NCwweGEwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhjMiwweDI1LDB4YzIsMHgyMiwweGMyLDB4MjMsMHhjMn0sCisgIDE2LDB4NDRmZCwwLHsweDI2LDB4MTIsMHg0YiwweDI4LDB4MTIsMHgyZCwweGE5LDB4MTIsMHgzYiwweGQzLDB4MTIsMHg0NiwweDE5LDB4MTIsMHgzYSwweDQyfSwKKyAgMTYsMHg0NTBkLDAsezB4OTAsMHg3NiwweDY4LDB4NzQsMHgwMSwweGYwLDB4NzAsMHgwZiwweDEyLDB4NGMsMHgyOSwweDEyLDB4NGUsMHgxNSwweDEyLDB4NGV9LAorICAxNiwweDQ1MWQsMCx7MHgxNywweDEyLDB4MWIsMHg0MCwweDEyLDB4MTQsMHg5NiwweDEyLDB4NDMsMHgxNCwweDkwLDB4N2YsMHhhZiwweGUwLDB4NDQsMHgwMX0sCisgIDE2LDB4NDUyZCwwLHsweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDFmLDB4ZjAsMHg5MCwweDdmLDB4YWMsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHg0NTNkLDAsezB4YWQsMHhmMCwweDkwLDB4N2YsMHhkZSwweGYwLDB4OTAsMHg3ZiwweGRmLDB4ZjAsMHg5MCwweDdmLDB4YWIsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDQ1NGQsMCx7MHhhOSwweGYwLDB4OTAsMHg3ZiwweGFhLDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg0MywweGQ4LDB4MjAsMHhkMiwweGU4LDB4NDMsMHhkOH0sCisgICA4LDB4NDU1ZCwwLHsweDIwLDB4NTMsMHhhOCwweGEwLDB4NDMsMHhhOCwweDgwLDB4MjJ9LAorICAxNiwweDQ1NjUsMCx7MHg5MCwweDc2LDB4OWEsMHg3NCwweDAyLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg5MSwweGYwLDB4YTMsMHhmMCwweDkwLDB4NzYsMHg5MH0sCisgIDE2LDB4NDU3NSwwLHsweGYwLDB4OTAsMHg3NiwweDkzLDB4ZjAsMHg5MCwweDc2LDB4OTYsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweGU0fSwKKyAgMTYsMHg0NTg1LDAsezB4OTAsMHg3NiwweDk3LDB4ZjAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDkwLDB4NzYsMHg5NCwweDA0LDB4ZjAsMHg5MCwweDgwLDB4MDB9LAorICAxNiwweDQ1OTUsMCx7MHhmMCwweGU0LDB4OTAsMHg3NiwweDhlLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhmMCwweDkwLDB4NzYsMHg5NSwweDA0LDB4ZjAsMHhjMn0sCisgIDE2LDB4NDVhNSwwLHsweDJlLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmZiwweDU0LDB4MTAsMHhmZiwweDcwLDB4MDIsMHhjMiwweDNmLDB4OTAsMHg3ZiwweDlifSwKKyAgMTYsMHg0NWI1LDAsezB4ZTAsMHhmZiwweDU0LDB4MTAsMHhmZSwweGZmLDB4YmUsMHgxMCwweDAyLDB4ZDIsMHgzZiwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZmZ9LAorICAxNiwweDQ1YzUsMCx7MHg1NCwweDIwLDB4ZmYsMHg3MCwweDAyLDB4YzIsMHgzZSwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZmYsMHg1NCwweDIwLDB4ZmUsMHhmZn0sCisgIDE2LDB4NDVkNSwwLHsweGJlLDB4MjAsMHgwMiwweGQyLDB4M2UsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwfSwKKyAgMTYsMHg0NWU1LDAsezB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjB9LAorICAxNiwweDQ1ZjUsMCx7MHgzMCwweDNlLDB4MDksMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMH0sCisgIDE2LDB4NDYwNSwwLHsweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHhhMiwweDNlLDB4OTIsMHg0MCwweGEyfSwKKyAgIDMsMHg0NjE1LDAsezB4M2YsMHg5MiwweDQxfSwKKyAgIDEsMHg0NjE4LDAsezB4MjJ9LAorICAxNiwweDQ2MTksMCx7MHhlNCwweDkwLDB4NzYsMHgzNiwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4NDYyOSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHg0NjM5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzV9LAorICAxNiwweDQ2NDksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NX0sCisgIDE2LDB4NDY1OSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweDkwfSwKKyAgMTYsMHg0NjY5LDAsezB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDQ2NzksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4NDY4OSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1fSwKKyAgMTYsMHg0Njk5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzV9LAorICAxNiwweDQ2YTksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHgyMn0sCisgIDEyLDB4NDZiOSwwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgzOCwweDAyLDB4NDcsMHgwMH0sCisgIDE2LDB4NDZjNSwwLHsweDAyLDB4MDcsMHhhNiwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfSwKKyAgMTYsMHg0NmQ1LDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9LAorICAxNiwweDQ2ZTUsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn0sCisgIDE2LDB4NDZmNSwwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDBjLDB4OGYsMHhlNCwweDdlfSwKKyAgMTYsMHg0NzA1LDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9LAorICAxNiwweDQ3MTUsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM30sCisgIDE2LDB4NDcyNSwwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfSwKKyAgMTYsMHg0NzM1LDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9LAorICAxNiwweDQ3NDUsMCx7MHg5MCwweDdmLDB4ZWMsMHhlMCwweDkwLDB4NzYsMHg4MywweGYwLDB4ZTAsMHgxNCwweDYwLDB4MWQsMHgxNCwweDYwLDB4MmEsMHgxNH0sCisgIDE2LDB4NDc1NSwwLHsweDYwLDB4MzcsMHgxNCwweDYwLDB4NDQsMHgyNCwweDA0LDB4NzAsMHg1MCwweDkwLDB4NzYsMHg5MSwweGUwLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHg0NzY1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDQ3LDB4OTAsMHg3NiwweDkyLDB4ZTAsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDQ3NzUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MzcsMHg5MCwweDc2LDB4OTAsMHhlMCwweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4NDc4NSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgyNywweDkwLDB4NzYsMHg4NCwweGUwLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHg0Nzk1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDE3LDB4OTAsMHg3NiwweDkzLDB4ZTAsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDQ3YTUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgICAyLDB4NDdiNSwwLHsweGQzLDB4MjJ9LAorICAgMiwweDQ3YjcsMCx7MHg4ZiwweDJlfSwKKyAgMTYsMHg0N2I5LDAsezB4ZTQsMHhmNSwweDJmLDB4NzUsMHgzMCwweGZmLDB4NzUsMHgzMSwweDA3LDB4NzUsMHgzMiwweDFhLDB4YWIsMHgzMCwweGFhLDB4MzF9LAorICAxNiwweDQ3YzksMCx7MHhhOSwweDMyLDB4OTAsMHgwMCwweDAxLDB4MTIsMHgzNiwweGFiLDB4YjQsMHgwMywweDFmLDB4YWYsMHgyZiwweDA1LDB4MmYsMHhlZn0sCisgIDE2LDB4NDdkOSwwLHsweDY1LDB4MmUsMHg3MCwweDAxLDB4MjIsMHgxMiwweDM2LDB4OTIsMHg3ZSwweDAwLDB4MjksMHhmZiwweGVlLDB4M2EsMHhjOSwweGVmfSwKKyAgMTYsMHg0N2U5LDAsezB4YzksMHg3NSwweDMwLDB4ZmYsMHhmNSwweDMxLDB4ODksMHgzMiwweDgwLDB4ZDIsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9LAorICAgMSwweDQ3ZjksMCx7MHgyMn0sCisgICA2LDB4NDdmYSwwLHsweDEyLDB4NGIsMHgyOCwweGMyLDB4MzEsMHgyMn0sCisgIDE2LDB4NDgwMCwwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfSwKKyAgMTYsMHg0ODEwLDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9LAorICAxNiwweDQ4MjAsMCx7MHhjMCwweGUwLDB4YzIsMHhjYSwweGMyLDB4Y2YsMHg5MCwweDdmLDB4OTgsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDMwLDB4MmUsMHgwM30sCisgIDE2LDB4NDgzMCwwLHsweDEyLDB4MTQsMHhhNiwweDkwLDB4N2YsMHg5OCwweGUwLDB4NTQsMHhmZSwweGYwLDB4NTMsMHhhOCwweGZhLDB4MTIsMHgxNiwweDYxfSwKKyAgMTYsMHg0ODQwLDAsezB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDB9LAorICAxNiwweDQ4NTAsMCx7MHhlMCwweGZhLDB4ZDAsMHhlMCwweGY5LDB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhkMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhmMH0sCisgICAzLDB4NDg2MCwwLHsweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NDg2MywwLHsweDkwLDB4N2YsMHhlYywweGUwLDB4OTAsMHg3NiwweDgzLDB4ZjAsMHhlMCwweDE0LDB4NjAsMHgxNywweDE0LDB4NjAsMHgyMSwweDE0fSwKKyAgMTYsMHg0ODczLDAsezB4NjAsMHgyYiwweDE0LDB4NjAsMHgzMiwweDI0LDB4MDQsMHg3MCwweDM4LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTF9LAorICAxNiwweDQ4ODMsMCx7MHhmMCwweDgwLDB4MzUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MiwweGYwLDB4MTIsMHgzZSwweDlmLDB4ODAsMHgyOH0sCisgIDE2LDB4NDg5MywwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkwLDB4ZjAsMHgxMiwweDE4LDB4MDAsMHg4MCwweDFiLDB4OTAsMHg3ZiwweGVhfSwKKyAgMTYsMHg0OGEzLDAsezB4ZTAsMHg5MCwweDc2LDB4ODQsMHhmMCwweDgwLDB4MTEsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MywweGYwLDB4ODB9LAorICAxMCwweDQ4YjMsMCx7MHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZDMsMHgyMn0sCisgIDE2LDB4NDhiZCwwLHsweDMwLDB4MmQsMHgzOSwweGMyLDB4MmQsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBkLDB4ZTQsMHg5MCwweDc2fSwKKyAgMTYsMHg0OGNkLDAsezB4N2MsMHhmMCwweGEzLDB4NzQsMHhmOCwweGYwLDB4YTMsMHg3NCwweDBhLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwZCwweGU0LDB4OTB9LAorICAxNiwweDQ4ZGQsMCx7MHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4ZjAsMHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGQsMHhlNH0sCisgIDEzLDB4NDhlZCwwLHsweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweGY4LDB4ZjAsMHhhMywweDc0LDB4MTcsMHhmMCwweDIyfSwKKyAgIDYsMHg0OGZhLDAsezB4NTMsMHg5MSwweGJmLDB4ZDIsMHgyZCwweDMyfSwKKyAgMTYsMHg0OTAwLDAsezB4MDIsMHgyZiwweGU3LDB4MDAsMHgwMiwweDNkLDB4NDcsMHgwMCwweDAyLDB4NGQsMHhiNCwweDAwLDB4MDIsMHg0YywweDQzLDB4MDB9LAorICAxNiwweDQ5MTAsMCx7MHgwMiwweDRiLDB4ZTksMHgwMCwweDAyLDB4MmYsMHhmZiwweDAwLDB4MDIsMHg0YywweDViLDB4MDAsMHgwMiwweDRjLDB4MGEsMHgwMH0sCisgIDE2LDB4NDkyMCwwLHsweDAyLDB4NGMsMHg3MiwweDAwLDB4MDIsMHg0YiwweDVhLDB4MDAsMHgwMiwweDRjLDB4ODksMHgwMCwweDAyLDB4NGMsMHhhMCwweDAwfSwKKyAgMTYsMHg0OTMwLDAsezB4MDIsMHg0YywweGI3LDB4MDAsMHgwMiwweDRjLDB4Y2UsMHgwMCwweDAyLDB4NGMsMHhlNSwweDAwLDB4MDIsMHg0YywweGZjLDB4MDB9LAorICAxNiwweDQ5NDAsMCx7MHgwMiwweDRkLDB4MTMsMHgwMCwweDAyLDB4NGQsMHgyYSwweDAwLDB4MDIsMHg0ZCwweDQxLDB4MDAsMHgwMiwweDRkLDB4NTgsMHgwMH0sCisgICA4LDB4NDk1MCwwLHsweDAyLDB4NGQsMHg2ZiwweDAwLDB4MDIsMHg0ZCwweDg2LDB4MDB9LAorICAxNiwweDQ5NTgsMCx7MHhlNCwweDkwLDB4NzYsMHgyNiwweGYwLDB4OTAsMHg3NiwweDI2LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzNH0sCisgIDE2LDB4NDk2OCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfSwKKyAgMTYsMHg0OTc4LDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA0LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyNiwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9LAorICAxNiwweDQ5ODgsMCx7MHhlZiwweGI0LDB4MDQsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwM30sCisgIDE2LDB4NDk5OCwwLHsweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwfSwKKyAgIDYsMHg0OWE4LDAsezB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHg0OWFlLDAsezB4OTAsMHg3NiwweDQ2LDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTN9LAorICAxNiwweDQ5YmUsMCx7MHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMH0sCisgIDE2LDB4NDljZSwwLHsweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzfSwKKyAgMTYsMHg0OWRlLDAsezB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjB9LAorICAxNiwweDQ5ZWUsMCx7MHhhMywweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMH0sCisgICA1LDB4NDlmZSwwLHsweGEzLDB4ZjAsMHhhMywweGYwLDB4MjJ9LAorICAxNiwweDRhMDMsMCx7MHhlNCwweDkwLDB4NzYsMHgyNSwweGYwLDB4OTAsMHg3NiwweDI1LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzNH0sCisgIDE2LDB4NGExMywwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfSwKKyAgMTYsMHg0YTIzLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA0LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyNSwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9LAorICAxNiwweDRhMzMsMCx7MHhlZiwweGI0LDB4MDQsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdlLDB4YzAsMHhlMH0sCisgIDE2LDB4NGE0MywwLHsweGZlLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVlfSwKKyAgIDIsMHg0YTUzLDAsezB4ZjAsMHgyMn0sCisgIDE2LDB4NGE1NSwwLHsweGU0LDB4ZmUsMHg3NSwweDFkLDB4ZmYsMHg3NSwweDFlLDB4MDUsMHg3NSwweDFmLDB4MTIsMHhhYiwweDFkLDB4YWEsMHgxZSwweGE5fSwKKyAgMTYsMHg0YTY1LDAsezB4MWYsMHg5MCwweDAwLDB4MDEsMHgxMiwweDM2LDB4YWIsMHg2NCwweDAyLDB4NzAsMHgyZiwweGNkLDB4ZWUsMHhjZCwweDBlLDB4ZWR9LAorICAxNiwweDRhNzUsMCx7MHg2ZiwweDcwLDB4MDEsMHgyMiwweDkwLDB4MDAsMHgwMiwweDEyLDB4MzcsMHgwZSwweDg1LDB4ZjAsMHgxYiwweGY1LDB4MWMsMHg2Mn0sCisgIDE2LDB4NGE4NSwwLHsweDFiLDB4ZTUsMHgxYiwweDYyLDB4MWMsMHhlNSwweDFjLDB4NjIsMHgxYiwweDI5LDB4ZmQsMHhlNSwweDFiLDB4M2EsMHhjOSwweGVkfSwKKyAgMTYsMHg0YTk1LDAsezB4YzksMHg3NSwweDFkLDB4ZmYsMHhmNSwweDFlLDB4ODksMHgxZiwweDgwLDB4YzEsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9LAorICAgMSwweDRhYTUsMCx7MHgyMn0sCisgIDE2LDB4NGFhNiwwLHsweGU0LDB4OTAsMHg3NiwweDliLDB4ZjAsMHg5MCwweDc2LDB4OWIsMHhlMCwweGZmLDB4MDQsMHhmMCwweGVmLDB4NjAsMHgwOCwweGUwfSwKKyAgMTYsMHg0YWI2LDAsezB4MjQsMHgwOCwweGY4LDB4ZTQsMHhmNiwweDgwLDB4ZWUsMHg5MCwweDc2LDB4OTYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDQ0LDB4MDh9LAorICAxNiwweDRhYzYsMCx7MHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4ZTQsMHhmNSwweDE4LDB4ZDIsMHgzNSwweGY1LDB4MGUsMHhmNSwweDEwLDB4ZDIsMHgzNn0sCisgIDE2LDB4NGFkNiwwLHsweDc1LDB4MTIsMHgxMSwweDc1LDB4MTMsMHgyMiwweGMyLDB4MzcsMHhjMiwweDM5LDB4YzIsMHgzOCwweGY1LDB4MTYsMHhmNSwweDE0fSwKKyAgMTEsMHg0YWU2LDAsezB4ZjUsMHgxYSwweGY1LDB4MGQsMHhjMiwweDNiLDB4YzIsMHgzYywweGMyLDB4M2QsMHgyMn0sCisgIDE2LDB4NGFmMSwwLHsweGU0LDB4ZmYsMHg3NCwweDU2LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDI4fSwKKyAgMTYsMHg0YjAxLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDVlLDB4MmYsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDRiMTEsMCx7MHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDM4LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4M30sCisgICA2LDB4NGIyMSwwLHsweGVlLDB4ZjAsMHgwZiwweGJmLDB4MDgsMHhjY30sCisgICAxLDB4NGIyNywwLHsweDIyfSwKKyAgMTYsMHg0YjI4LDAsezB4ZTQsMHg5MCwweDcyLDB4MzYsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTB9LAorICAxNiwweDRiMzgsMCx7MHg3MiwweDMzLDB4ZjAsMHg5MCwweDcyLDB4MzIsMHhmMCwweDkwLDB4NzIsMHgwMSwweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzIsMHgzM30sCisgIDE2LDB4NGI0OCwwLHsweGYwLDB4OTAsMHg3MiwweDMyLDB4ZjAsMHg5MCwweDcyLDB4MDEsMHgwNCwweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg0NCwweDA0fSwKKyAgIDIsMHg0YjU4LDAsezB4ZjAsMHgyMn0sCisgIDE2LDB4NGI1YSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwMiwweGYwfSwKKyAgMTYsMHg0YjZhLDAsezB4OTAsMHg3ZiwweGM3LDB4ZTAsMHhmNSwweDExLDB4NzUsMHgwZiwweDAwLDB4NzUsMHgwZCwweDAwLDB4ZDIsMHgzMywweGQwLDB4ODJ9LAorICAgNSwweDRiN2EsMCx7MHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0YjdmLDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDMwLDB4NDIsMHgwNCwweGUwLDB4NDR9LAorICAxNiwweDRiOGYsMCx7MHgwMiwweGYwLDB4N2YsMHhkYywweDdlLDB4MDUsMHgxMiwweDRkLDB4OWQsMHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZjcsMHhmMH0sCisgICA1LDB4NGI5ZiwwLHsweGUwLDB4NDQsMHgwNCwweGYwLDB4MjJ9LAorICAxNiwweDRiYTQsMCx7MHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NzAsMHgxNCwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4MDQsMHgxMn0sCisgIDE2LDB4NGJiNCwwLHsweDQ5LDB4NTgsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSwKKyAgIDMsMHg0YmM0LDAsezB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHg0YmM3LDAsezB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDcwLDB4MTMsMHg5MCwweDdmLDB4ZTksMHhlMCwweDE0LDB4NzAsMHgwNCwweDEyLDB4NGF9LAorICAxNiwweDRiZDcsMCx7MHgwMywweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0sCisgICAyLDB4NGJlNywwLHsweGYwLDB4MjJ9LAorICAxNiwweDRiZTksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDEwLDB4ZjAsMHg5MH0sCisgIDE2LDB4NGJmOSwwLHsweDc2LDB4OTYsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwfSwKKyAgIDEsMHg0YzA5LDAsezB4MzJ9LAorICAxNiwweDRjMGEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgIDE1LDB4NGMxYSwwLHsweGMyLDB4MjksMHg5MCwweDc2LDB4OGQsMHg3NCwweDAxLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGMyOSwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4MzAsMHhlNywweDEyLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3ZiwweDE0LDB4N2UsMHgwMCwweDEyfSwKKyAgMTAsMHg0YzM5LDAsezB4NGQsMHg5ZCwweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmZSwweGYwLDB4MjJ9LAorICAxNiwweDRjNDMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDI1LDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOH0sCisgICA4LDB4NGM1MywwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjNWIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgICA3LDB4NGM2YiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0YzcyLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAyLDB4ZjB9LAorICAgNywweDRjODIsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGM4OSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwNCwweGYwfSwKKyAgIDcsMHg0Yzk5LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjYTAsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDQsMHhmMH0sCisgICA3LDB4NGNiMCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0Y2I3LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDA4LDB4ZjB9LAorICAgNywweDRjYzcsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGNjZSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwOCwweGYwfSwKKyAgIDcsMHg0Y2RlLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjZTUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MTAsMHhmMH0sCisgICA3LDB4NGNmNSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0Y2ZjLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDEwLDB4ZjB9LAorICAgNywweDRkMGMsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQxMywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgyMCwweGYwfSwKKyAgIDcsMHg0ZDIzLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkMmEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MjAsMHhmMH0sCisgICA3LDB4NGQzYSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDQxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDQwLDB4ZjB9LAorICAgNywweDRkNTEsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQ1OCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg0MCwweGYwfSwKKyAgIDcsMHg0ZDY4LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkNmYsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4ODAsMHhmMH0sCisgICA3LDB4NGQ3ZiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDg2LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDgwLDB4ZjB9LAorICAgNywweDRkOTYsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQ5ZCwwLHsweDhlLDB4MzUsMHg4ZiwweDM2LDB4ZTUsMHgzNiwweDE1LDB4MzYsMHhhZSwweDM1LDB4NzAsMHgwMiwweDE1LDB4MzUsMHg0ZSwweDYwfSwKKyAgIDcsMHg0ZGFkLDAsezB4MDUsMHgxMiwweDE0LDB4ODUsMHg4MCwweGVlLDB4MjJ9LAorICAxNiwweDRkYjQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA0LDB4ZjAsMHhkMH0sCisgICA2LDB4NGRjNCwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGRjYSwwLHsweDkwLDB4NzYsMHg4MiwweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHhkMywweDIyfSwKKyAgMTIsMHg0ZGRhLDAsezB4YzIsMHgzNywweGU0LDB4ZjUsMHgwZSwweGY1LDB4MTAsMHhjMiwweDM2LDB4ZjUsMHgxNCwweDIyfSwKKyAgIDksMHg0ZGU2LDAsezB4YzIsMHgyNSwweDUzLDB4ZDgsMHhlZiwweDQzLDB4ZDgsMHgyMCwweDMyfSwKKyAgIDcsMHg0ZGVmLDAsezB4NTMsMHg5OCwweGZlLDB4NTMsMHg5OCwweGZkLDB4MzJ9LAorICAgNywweDRkZjYsMCx7MHg1MywweGMwLDB4ZmUsMHg1MywweGMwLDB4ZmQsMHgzMn0sCisgICA2LDB4NGRmZCwwLHsweDUzLDB4OTEsMHg3ZiwweGQyLDB4MmMsMHgzMn0sCisgICA0LDB4NGUwMywwLHsweDUzLDB4OTEsMHhkZiwweDMyfSwKKyAgIDQsMHg0ZTA3LDAsezB4NTMsMHhkOCwweGY3LDB4MzJ9LAorICAgNCwweDRlMGIsMCx7MHgxMiwweDE3LDB4MzAsMHgyMn0sCisgICAzLDB4NGUwZiwwLHsweGMyLDB4OGQsMHgzMn0sCisgICAzLDB4NGUxMiwwLHsweGMyLDB4OGYsMHgzMn0sCisgICAyLDB4NGUxNSwwLHsweGQzLDB4MjJ9LAorICAgMiwweDRlMTcsMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0ZTE5LDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NGUxYiwwLHsweGQzLDB4MjJ9LAorICAgMiwweDRlMWQsMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0ZTFmLDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NGUyMSwwLHsweGMzLDB4MjJ9LAorICAgMCwweDAwMDAsMSx7MH0KK307CisvKiBTb3VyY2U6IEVNSTYyTUZXLkhFWCAKKzoxMDBDOEYwMDQxNzY2ODAxNDE3NjZBMDI0MTc2NkIwQUMxMjBDMTIxMjMKKzoxMDQ0QUQwMEMyQUZEMjI0OTA3RjkzNzQzMEYwOTA3RjlDNzRCQkYwOTgKKzoxMDQ0QkQwMDkwN0Y5NkUwNDQzMEYwRTA1NDMwRjA5MDdGOTQ3NDMwNkIKKzoxMDQ0Q0QwMEYwOTA3RjlENzRDRkYwOTA3Rjk3NzRBMEYwOTA3Rjk1QzIKKzoxMDQ0REQwMDc0QzBGMDkwN0Y5RTc0MDNGMDkwN0Y5OUUwMzBFMjA5RjQKKzoxMDQ0RUQwMDkwMDUxOTc0QTBGMEU0QTNGMEMyMjVDMjIyQzIyM0MyMjQKKzoxMDQ0RkQwMDI2MTI0QjI4MTIyREE5MTIzQkQzMTI0NjE5MTIzQTQyRkQKKzoxMDQ1MEQwMDkwNzY2ODc0MDFGMDcwMEYxMjRDMjkxMjRFMTUxMjRFRjAKKzoxMDQ1MUQwMDE3MTIxQjQwMTIxNDk2MTI0MzE0OTA3RkFGRTA0NDAxMDIKKzoxMDQ1MkQwMEYwOTA3RkFFRTA0NDFGRjA5MDdGQUM3NEZGRjA5MDdGNzEKKzoxMDQ1M0QwMEFERjA5MDdGREVGMDkwN0ZERkYwOTA3RkFCRjA5MDdGNUQKKzoxMDQ1NEQwMEE5RjA5MDdGQUFGMDUzOTFFRjQzRDgyMEQyRTg0M0Q4MzkKKzowODQ1NUQwMDIwNTNBOEEwNDNBODgwMjIwRQorOjEwMDdBNjAwRTQ5MDc2NjZGMDEyNDRBRDIwMjYxMzkwNzY2NkUwQzM5OAorOjEwMDdCNjAwOTQwMjUwMEFFMDA0RjBEMjQyMTI0QjdGODBFQTMwMjZCRgorOjEwMDdDNjAwMDUxMjI4MDFDMjI2MzAyNTJCOTA3Njk2RTA1NEZDRjBCRgorOjEwMDdENjAwOTA4MDAzRjAxMjE0OTY5MDc2OTZFMDQ0MDNGMDkwODA5MQorOjEwMDdFNjAwMDNGMEU0OTA3NjY3RjA5MDc2NjdFMDA0RjBFMEI0NEJBRgorOjBBMDdGNjAwRjYxMjQ3RkExMjQxMUI4MEM1MjJEQgorOjEwMjgwMTAwQzIyMEMyMjFDMjJBOTA3RkU4RTAxMjM3RjkyODMwMDBBNQorOjEwMjgxMTAwMjg4QzAxMjhBMjAyMkExRjIxMkE2QTIyMjkzRDgwMjkwNworOjEwMjgyMTAwN0Q4MTI5RDE4MjJBODRBMTJBQkFBMjAwMDAyQUJGOTBERgorOjEwMjgzMTAwN0ZFOUUwMTQ2MDExMjRGRTYwMjgyNEZFNjAzQjI0RkM0MworOjEwMjg0MTAwNzA0MDEyM0ZFNTQxQ0IxMjRFMUQ0MDAyNDFDQjkwN0ZCQgorOjEwMjg1MTAwRUFFMEI0MDEwNEMyMjI0MUNCOTA3RkI0RTA0NDAxRjAyQworOjEwMjg2MTAwNDFDQjEyNEUxRjkwN0ZFQUUwQjQwMTA0RDIyMjQxQ0I0QQorOjEwMjg3MTAwOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkI0RTA0NDAxRjA5QgorOjEwMjg4MTAwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZFOUUwMjQ1QgorOjEwMjg5MTAwRjU3MDA1MTI0ODYzNDFDQjkwN0ZCNEUwNDQwMUYwNDFFQgorOjEwMjhBMTAwQ0I5MDdGRTlFMDI0RkQ2MDU0MjQwMjYwMDIyMTM0MTJDMAorOjEwMjhCMTAwNEUxRDQwMDI0MUNCOTA3RkVBRTA3MDM4OTA3RkVDRTAwMgorOjEwMjhDMTAwRjQ1NDgwRkZDNDU0MEZGRkUwNTQwNzJGMjVFMDI0QjREMworOjEwMjhEMTAwRjU4MkU0MzQ3RkY1ODNFNEYwOTA3RkVDRTA1NDgwRkZFRgorOjEwMjhFMTAwMTMxMzEzNTQxRkZGRTA1NDA3MkY5MDdGRDdGMEUwNDREOAorOjEwMjhGMTAwMjBGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0IxMjRFMUY1OAorOjEwMjkwMTAwNDAwMjQxQ0I5MDdGRUFFMDcwMjA5MDdGRUNFMEY0NTRFQworOjEwMjkxMTAwODBGRkM0NTQwRkZGRTA1NDA3MkYyNUUwMjRCNEY1ODI1MworOjEwMjkyMTAwRTQzNDdGRjU4Mzc0MDFGMDQxQ0I5MDdGQjRFMDQ0MDEzRQorOjEwMjkzMTAwRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkU5RTBERQorOjEwMjk0MTAwNjAxMjI0Rjg2MDA5MjQwMjcwMjkxMjQzRTc0MUNCMTI3NgorOjEwMjk1MTAwNERDQTQxQ0IxMjRFMUJBMjIyRTQzM0ZGMjVFMEZGQTI1OAorOjEwMjk2MTAwMjNFNDMzNEY5MDdGMDBGMEU0QTNGMDkwN0ZCNTc0MDIyRAorOjEwMjk3MTAwRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkU5RTA5RQorOjEwMjk4MTAwNjAzMzI0RjY2MDJBMjQwNDcwM0Q5MDdGRUJFMDI0REU1RQorOjEwMjk5MTAwNjAwQzA0NzAxMjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0Y1MQorOjEwMjlBMTAwQjRFMDQ0MDFGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I2RAorOjEwMjlCMTAwMTI0NzQ1NDFDQjEyNEUxQkU0OTA3RjAwRjBBM0YwOTBFQgorOjEwMjlDMTAwN0ZCNTc0MDJGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I3QworOjEwMjlEMTAwOTA3RkU5RTAyNEY0NjAzNDI0MEM3MDM5MTI0RTFCOTA4RQorOjEwMjlFMTAwN0ZFQ0UwRjQ1NDgwRkZDNDU0MEZGRkUwNTQwNzJGMjUxRgorOjEwMjlGMTAwRTAyNEI0RjU4MkU0MzQ3RkY1ODNFMDU0RkQ5MDdGMDA1OAorOjEwMkEwMTAwRjBFNEEzRjA5MDdGQjU3NDAyRjA0MUNCOTA3RkI0RTA4NQorOjEwMkExMTAwNDQwMUYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0Y4MQorOjEwMkEyMTAwRTlFMDI0RjY2MDEyMTQ2MDFBMjQwMjcwMUREMjIwOTA4RAorOjEwMkEzMTAwN0ZCNEUwNDQwMUYwODAxMkQyMjA5MDdGQjRFMDQ0MDFFMQorOjEwMkE0MTAwRjA4MDA3OTA3RkI0RTA0NDAxRjAyMDIwMTg5MDdGRUVFMQorOjEwMkE1MTAwRTA3MDA0QTNFMDYwMEJEMjI5RDIyNzEyMTc0QUQyMkFEMAorOjEwMkE2MTAwODAwMzEyMDgwMEMyMjA4MDYxOTA3RkVFRTA3MDA0QTMxMQorOjEwMkE3MTAwRTA2MDBCRDIyOUQyMjgxMjE3NEFEMjJBODA0QzEyMzg5MAorOjEwMkE4MTAwNzQ4MDQ3OTA3RkU5RTAyNEZFNjAxMjE0NjAxQTI0MDJFQQorOjEwMkE5MTAwNzAxREQyMjE5MDdGQjRFMDQ0MDFGMDgwMTJEMjIxOTBDOAorOjEwMkFBMTAwN0ZCNEUwNDQwMUYwODAwNzkwN0ZCNEUwNDQwMUYwMjA1RQorOjEwMkFCMTAwMjEwMzEyMTAwMEMyMjE4MDExMTIyQUQ2ODAwQzEyNEU1RAorOjEwMkFDMTAwMjE1MDA3OTA3RkI0RTA0NDAxRjAyMDJBMDc5MDdGQjRBMQorOjA1MkFEMTAwRTA0NDAyRjAyMkM4Cis6MTA0M0U3MDAxMjRFMTk0MDAyODFBQzkwN0ZFQkUwMjRGRTYwMUUxNDUwCis6MTA0M0Y3MDA2MDQ2MTQ2MDZFMTQ3MDAyODE5RDI0MDQ2MDAyODFBNURBCis6MTA0NDA3MDA3NDA1OTA3RkQ0RjA3NDAwOTA3RkQ1RjAyMjkwN0ZFQUY2Cis6MTA0NDE3MDBFMEZGMTI0QTU1OEIyMDhBMjE4OTIyRUE0OTYwMTFDRTkyCis6MTA0NDI3MDBFQUNFRUU5MDdGRDRGMENGRTlDRkVGOTA3RkQ1RjAyMkEwCis6MTA0NDM3MDA5MDdGQjRFMDQ0MDFGMDIyOTA3RkVBRTBGRjEyNDdCNzkzCis6MTA0NDQ3MDA4QjIwOEEyMTg5MjJFQTQ5NjAxMUNFRUFDRUVFOTA3RjNECis6MTA0NDU3MDBENEYwQ0ZFOUNGRUY5MDdGRDVGMDIyOTA3RkI0RTA0NDNFCis6MTA0NDY3MDAwMUYwMjI5MDdGRUFFMEZGOTA3RUMwRTBGREEzRTBGQjMxCis6MTA0NDc3MDAxMjE3OTQ4QjIwOEEyMTg5MjJFQTQ5NjAxMUNFRUFDRTRECis6MTA0NDg3MDBFRTkwN0ZENEYwQ0ZFOUNGRUY5MDdGRDVGMDIyOTA3RkU5Cis6MTA0NDk3MDBCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RjIxCis6MDU0NEE3MDBCNEUwNDQwMUYwNDcKKzowMTQ0QUMwMDIyRUQKKzowMzAwMzMwMDAyNERFNjk1Cis6MDk0REU2MDBDMjI1NTNEOEVGNDNEODIwMzI1NgorOjAyMEM5RjAwQzEyRjYzCis6MDY0N0ZBMDAxMjRCMjhDMjMxMjIxRgorOjEwNDMxNDAwRTQ5MDc2OTZGMDkwODAwM0YwOTA3RkUwNzQ5MEYwOTBCMworOjEwNDMyNDAwN0ZFMTc0MDRGMEU0OTA3RkRERjA5MDdGQTFGMDUzOEU4MAorOjEwNDMzNDAwRjg3NTg4MDU3NUI4MjA3NUY4MDE0MzhFMzBGNUM4NzU5MQorOjEwNDM0NDAwQ0E3Rjc1Q0JGODQzQTgyMDEyNDU2NUMyMkNDMjJEQzI4MgorOjEwNDM1NDAwMkJDMjJGOTA3RkZDNzREREYwOTA3RkZGNzRGRkYwOTBGMAorOjEwNDM2NDAwN0Y5N0UwNDQwMUYwOTA3NjE5NzQwMUYwRTQ5MDc2ODUyQgorOjEwNDM3NDAwRjBBM0YwOTA3NjgxRjA5MDc2ODBGMDEyNDlBRTEyMEY5RgorOjEwNDM4NDAwQzYxMjRBRjE5MDdGOTdFMDQ0MDhGMEUwNTRCOUYwRDJBNQorOjEwNDM5NDAwMzAyMDMwMTgxMjRBQTYxMjMwMDAxMjQwMDAxMjQyMUY3OAorOjEwNDNBNDAwMTI0OEJEMTIxQjA0MTIxNjYxMTI0MjFGMTI0QUE2QzIwMQorOjEwNDNCNDAwMkZDMjMxQzIzMkMyMzRDMjMzQzIyOUMyMjdDMjI4RTQ1NgorOjEwNDNDNDAwRjUxMTkwNzY4OUYwOTA3NjNGRjA5MDc2NDFGMDkwNzZGMgorOjEwNDNENDAwNDBGMDkwNzY4QUYwQTNGMEEzMDRGMEU0QTNGMDkwNzY4MgorOjAzNDNFNDAwOTlGMDIyMkIKKzoxMDQ4QkQwMDMwMkQzOUMyMkQ5MDc2MTlFMEZGQjQwMTBERTQ5MDc2QkMKKzoxMDQ4Q0QwMDdDRjBBMzc0RjhGMEEzNzQwQUYwRUZCNDAyMERFNDkwMzkKKzoxMDQ4REQwMDc2N0NGMEEzNzRGMEYwQTM3NDBCRjBFRkI0MDMwREU0NDkKKzowRDQ4RUQwMDkwNzY3Q0YwQTM3NEY4RjBBMzc0MTdGMDIyMEQKKzoxMDFCMDQwMDMwMkMzOEMyMkM5MDc2MTlFMEZGQjQwMTBFOTA3NjdDMEMKKzoxMDFCMTQwMDc0QzBGMEEzNzQxNEYwQTM3NDBCRjBFRkI0MDIwREU0REEKKzoxMDFCMjQwMDkwNzY3Q0YwQTM3NDEwRjBBMzc0MENGMEVGQjQwMzBCNjQKKzowQzFCMzQwMEU0OTA3NjdDRjBBMzc0MThGMEEzRjAyMjdCCis6MTA0MTFCMDA5MDc2OERFMDY0MDE3MDI3MzAyNzA4QzIyNzEyMDgwMEMzCis6MTA0MTJCMDAxMjE3NEEzMDI4MDhDMjI4MTIzODc0MTIxNzRBMzAyQTNDCis6MTA0MTNCMDAwRUU0OTA3NjhERjBDMjJBOTA3RkI0RTA0NDAyRjA5MEFBCis6MTA0MTRCMDA3NjNGRTBCNDAxMDVFNEYwMTIzMjZGOTA3NjQxRTBCNEIzCis6MTA0MTVCMDAwMTA1RTRGMDEyMzQ5QTkwNzY0MEUwQjQwMTAzMTIzNDc2Cis6MTA0MTZCMDA5QTEyMzAwMDMwMzMwMzEyNDAwMDkwN0Y5QkUwMjBFNDIyCis6MTA0MTdCMDAwMkMyM0Y5MDdGOUJFMDMwRTQwMkQyM0Y5MDdGOUJFMEY2Cis6MTA0MThCMDAyMEU1MDJDMjNFOTA3RjlCRTAzMEU1MDJEMjNFQTI0MTg5Cis6MTA0MTlCMDAzMDNGMDFCMzUwMUZBMjNGOTI0MTMwM0YwOTkwNzY5N0I5Cis6MTA0MUFCMDBFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5NzBDCis6MTA0MUJCMDBFMDkwODAwMkYwMzAzRjM0OTA3NjE5RTBGRkI0MDEwRUFFCis6MTA0MUNCMDA5MDc2N0M3NDY3RjBBMzc0MDZGMEEzNzQwQkYwRUZCNEQ1Cis6MTA0MURCMDAwMjBCRTQ5MDc2N0NGMEEzRjBBMzc0MENGMEVGQjQwMzI1Cis6MTA0MUVCMDAwQkU0OTA3NjdDRjBBM0YwQTM3NDE4RjBBMjQwMzAzRTYxCis6MTA0MUZCMDAwMUIzNTAxRkEyM0U5MjQwMzAzRTA5OTA3Njk1RTA0NEE5Cis6MTA0MjBCMDAwNEYwODAwNzkwNzY5NUUwNTRGQkYwOTA3Njk1RTA5MDYzCis6MDQ0MjFCMDA4MDAxRjAyMjBDCis6MDI0RTE1MDBEMzIyQTYKKzowMjRFMTcwMEQzMjJBNAorOjAyNEUxOTAwRDMyMkEyCis6MTAzRkU1MDA5MDdGRUFFMDkwNzY4MkYwRTQ5MDc2OTFGMDkwNzY5Mjc4Cis6MEIzRkY1MDBGMDkwNzY5MEYwOTA3NjkzRjBEMzIyQ0QKKzoxMDREQ0EwMDkwNzY4MkUwOTA3RjAwRjA5MDdGQjU3NDAxRjBEMzIyNTQKKzoxMDQ4NjMwMDkwN0ZFQ0UwOTA3NjgzRjBFMDE0NjAxNzE0NjAyMTE0REQKKzoxMDQ4NzMwMDYwMkIxNDYwMzIyNDA0NzAzODkwN0ZFQUUwOTA3NjkxQzQKKzoxMDQ4ODMwMEYwODAzNTkwN0ZFQUUwOTA3NjkyRjAxMjNFOUY4MDI4ODgKKzoxMDQ4OTMwMDkwN0ZFQUUwOTA3NjkwRjAxMjE4MDA4MDFCOTA3RkVBRjgKKzoxMDQ4QTMwMEUwOTA3Njg0RjA4MDExOTA3RkVBRTA5MDc2OTNGMDgwMzgKKzowQTQ4QjMwMDA3OTA3RkI0RTA0NDAxRjBEMzIyMjcKKzoxMDQ3NDUwMDkwN0ZFQ0UwOTA3NjgzRjBFMDE0NjAxRDE0NjAyQTE0RUQKKzoxMDQ3NTUwMDYwMzcxNDYwNDQyNDA0NzA1MDkwNzY5MUUwOTA3RjAwOTcKKzoxMDQ3NjUwMEYwOTA3RkI1NzQwMUYwODA0NzkwNzY5MkUwOTA3RjAwREQKKzoxMDQ3NzUwMEYwOTA3RkI1NzQwMUYwODAzNzkwNzY5MEUwOTA3RjAwREYKKzoxMDQ3ODUwMEYwOTA3RkI1NzQwMUYwODAyNzkwNzY4NEUwOTA3RjAwRUIKKzoxMDQ3OTUwMEYwOTA3RkI1NzQwMUYwODAxNzkwNzY5M0UwOTA3RjAwREMKKzoxMDQ3QTUwMEYwOTA3RkI1NzQwMUYwODAwNzkwN0ZCNEUwNDQwMUYwOEMKKzowMjQ3QjUwMEQzMjIwRAorOjAyNEUxQjAwRDMyMkEwCis6MDI0RTFEMDBEMzIyOUUKKzowMjRFMUYwMEQzMjI5QworOjAyNEUyMTAwQzMyMkFBCis6MTAyRkU3MDBDMEUwQzA4M0MwODJEMjI2NTM5MUVGOTA3RkFCNzQwMUJCCis6MDgyRkY3MDBGMEQwODJEMDgzRDBFMDMyNUIKKzoxMDREQjQwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MDRGMEQwMDUKKzowNjREQzQwMDgyRDA4M0QwRTAzMjMyCis6MTAzRDQ3MDBDMEUwQzBGMEMwODNDMDgyQzBEMEU4QzBFMEU5QzBFMEY2Cis6MTAzRDU3MDBFQUMwRTBFQkMwRTBFQ0MwRTBFREMwRTBFRUMwRTBFRkIxCis6MTAzRDY3MDBDMEUwOTA3RkEyRTA5MDc2N0ZGMDkwN0Y3NEUwOTA3NjNECis6MTAzRDc3MDA4N0YwOTA3Rjc1RTA5MDc2ODhGMDkwN0Y5OEUwNDQwMjE2Cis6MTAzRDg3MDBGMDkwNzY5NkUwRkYyMEUxMEM0NDAyRjA5MDgwMDNGMDdCCis6MTAzRDk3MDBEMjMyMTI0QjI4OTA3NjdGRTAyMEUyNTA5MDc2ODdFMDZGCis6MTAzREE3MDBGRUEzRTA3QzAwMjQwMEY1MzRFQzNFRjUzMzkwNzY5OEQyCis6MTAzREI3MDBFMEZEQUUzM0FGMzQxMjM2RDg5MDc2ODdFRkYwRDIyRkNFCis6MTAzREM3MDAzMDMxMjkyMDNGMjZDMjMxOTA3Rjk0RTA1NENGRjA5MEM0Cis6MTAzREQ3MDA3RjlBRTAzMEU0MDREMjJEQzIyQzkwN0Y5QUUwMjBFNTUwCis6MTAzREU3MDAwNEMyMkREMjJDOTA3Rjk0RTA0NDMwRjAxMjQ4QkQxMkNCCis6MTAzREY3MDAxQjA0MzAyRjEyMTI0MjFGQzIyRjc1RTgwMTEyMTY4QUI4Cis6MTAzRTA3MDA3NUU4MEREMjJCODAwNTc1RTgwMUMyMkIyMDJCMzQ5MDY1Cis6MTAzRTE3MDA3NjE5RTBGRkI0MDEwRTkwNzY3Qzc0NjdGMEEzNzQwNjAwCis6MTAzRTI3MDBGMEEzNzQwQkYwRUZCNDAyMEI5MDc2N0NFNEYwQTNGMEYwCis6MTAzRTM3MDBBMzc0MENGMEVGQjQwMzBCOTA3NjdDRTRGMEEzRjBBMzJCCis6MTAzRTQ3MDA3NDE4RjA3NUNBRDM3NUNCRkVEMkNBMzAzNDA0QzIzNEE1Cis6MTAzRTU3MDA4MDAyRDIzNDMwMzQwRDkwNzY4OUUwQzM5NDAzNDAwNDU1Cis6MTAzRTY3MDBFMDI0RkRGMDUzOTFFRjkwN0ZBQjc0MDJGMEYwOTA3RjY4Cis6MTAzRTc3MDA5OEUwNTRGREYwRDBFMEZGRDBFMEZFRDBFMEZERDBFMEM4Cis6MTAzRTg3MDBGQ0QwRTBGQkQwRTBGQUQwRTBGOUQwRTBGOEQwRDBEMDE5Cis6MDgzRTk3MDA4MkQwODNEMEYwRDBFMDMyQUMKKzoxMDRCRTkwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MTBGMDkwMDYKKzoxMDRCRjkwMDc2OTZFMDU0RkRGMDkwODAwM0YwRDA4MkQwODNEMEUwMjcKKzowMTRDMDkwMDMyNzgKKzowMTJGRkYwMDMyOUYKKzoxMDRDNDMwMEMwRTBDMDgzQzA4MkQyMjU1MzkxRUY5MDdGQUI3NDA4M0MKKzowODRDNTMwMEYwRDA4MkQwODNEMEUwMzJFMgorOjEwNEM1QjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDAxRjA4NAorOjA3NEM2QjAwRDA4MkQwODNEMEUwMzJCQgorOjEwNEMwQTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDAxRjBENAorOjBGNEMxQTAwQzIyOTkwNzY4RDc0MDFGMEQwODJEMDgzRDBFMDMyMjEKKzoxMDRDNzIwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwMkYwNkMKKzowNzRDODIwMEQwODJEMDgzRDBFMDMyQTQKKzoxMDRCNUEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwMkYwODQKKzoxMDRCNkEwMDkwN0ZDN0UwRjUxMTc1MEYwMDc1MEQwMEQyMzNEMDgyMjIKKzowNTRCN0EwMEQwODNEMEUwMzIwMQorOjEwNEM4OTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDA0RjA1MworOjA3NEM5OTAwRDA4MkQwODNEMEUwMzI4RAorOjEwNENBMDAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDA0RjAzQgorOjA3NENCMDAwRDA4MkQwODNEMEUwMzI3NgorOjEwNENCNzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDA4RjAyMQorOjA3NENDNzAwRDA4MkQwODNEMEUwMzI1RgorOjEwNENDRTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDA4RjAwOQorOjA3NENERTAwRDA4MkQwODNEMEUwMzI0OAorOjEwNENFNTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDEwRjBFQgorOjA3NENGNTAwRDA4MkQwODNEMEUwMzIzMQorOjEwNENGQzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDEwRjBEMworOjA3NEQwQzAwRDA4MkQwODNEMEUwMzIxOQorOjEwNEQxMzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDIwRjBBQworOjA3NEQyMzAwRDA4MkQwODNEMEUwMzIwMgorOjEwNEQyQTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDIwRjA5NAorOjA3NEQzQTAwRDA4MkQwODNEMEUwMzJFQgorOjEwNEQ0MTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDQwRjA1RQorOjA3NEQ1MTAwRDA4MkQwODNEMEUwMzJENAorOjEwNEQ1ODAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDQwRjA0NgorOjA3NEQ2ODAwRDA4MkQwODNEMEUwMzJCRAorOjEwNEQ2RjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDgwRjBGMAorOjA3NEQ3RjAwRDA4MkQwODNEMEUwMzJBNgorOjEwNEQ4NjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDgwRjBEOAorOjA3NEQ5NjAwRDA4MkQwODNEMEUwMzI4RgorOjEwNDIxRjAwOTA3NjE5RTA2NDAxNzAzNTkwNzY4N0UwRkZEMzk0MkQ4NgorOjEwNDIyRjAwNDAyQjkwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEUwRDMxMQorOjEwNDIzRjAwOTQwRjQwMTlFNEYwRUZEMzk0MzE0MDA4OTA3NjE5NzQzRAorOjEwNDI0RjAwMDNGMDgwMDY5MDc2MTk3NDAyRjAxMjNFOUY5MDc2MTk1MworOjEwNDI1RjAwRTBCNDAyMkM5MDc2ODdFMEZGQzM5NDJGNTAyMkVGRDM2NworOjEwNDI2RjAwOTQyQTQwMUM5MDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBENQorOjEwNDI3RjAwRTBEMzk0MEY0MDBBRTRGMDkwNzYxOTA0RjAxMjNFOUZCOQorOjEwNDI4RjAwOTA3NjE5RTBCNDAyMjY5MDc2ODdFMEQzOTQzMTQwMURFMgorOjEwNDI5RjAwOTA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRTBEMzk0MEY2OQorOjEwNDJBRjAwNDAwQkU0RjA5MDc2MTk3NDAzRjAxMjNFOUY5MDc2MTk0QworOjEwNDJCRjAwRTA2NDAzNzAzRjkwNzY4N0UwRkZDMzk0NUY1MDM1OTBDMgorOjEwNDJDRjAwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEUwRDM5NDBGNDA4OQorOjEwNDJERjAwMjNFNEYwRUZDMzk0MkY1MDBDRUZEMzk0MkE0MDA2OTBCMQorOjEwNDJFRjAwNzYxOTc0MDFGMEVGRDM5NDJGNDAwNjkwNzYxOTc0MDI2QgorOjEwNDJGRjAwRjAxMjNFOUY5MDc2ODZFMDcwMDU5MDc2ODVGMDIyRTQ2RQorOjA1NDMwRjAwOTA3Njg2RjAyMjBCCis6MTA0NTY1MDA5MDc2OUE3NDAyRjBFNDkwNzY5MUYwQTNGMDkwNzY5MEFDCis6MTA0NTc1MDBGMDkwNzY5M0YwOTA3Njk2NzQwM0YwOTA4MDAzRjBFNEQzCis6MTA0NTg1MDA5MDc2OTdGMDkwODAwMkYwOTA3Njk0MDRGMDkwODAwMEY5Cis6MTA0NTk1MDBGMEU0OTA3NjhFRjA5MDc2MUFGMDkwNzY5NTA0RjBDMjVECis6MTA0NUE1MDAyRTkwN0Y5QkUwRkY1NDEwRkY3MDAyQzIzRjkwN0Y5QkNGCis6MTA0NUI1MDBFMEZGNTQxMEZFRkZCRTEwMDJEMjNGOTA3RjlCRTBGRjRDCis6MTA0NUM1MDA1NDIwRkY3MDAyQzIzRTkwN0Y5QkUwRkY1NDIwRkVGRjA3Cis6MTA0NUQ1MDBCRTIwMDJEMjNFMzAzRjA5OTA3Njk3RTA1NEZFRjA4MDJGCis6MTA0NUU1MDAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3RTA5MDgwMDJGMDhFCis6MTA0NUY1MDAzMDNFMDk5MDc2OTVFMDQ0MDRGMDgwMDc5MDc2OTVFMDhBCis6MTA0NjA1MDA1NEZCRjA5MDc2OTVFMDkwODAwMUYwQTIzRTkyNDBBMjk2Cis6MDM0NjE1MDAzRjkyNDE5MAorOjAxNDYxODAwMjI3RgorOjEwM0U5RjAwOTA3NjkyRTAxNDYwMUQxNDcwMDJFMTU0MjQwMjYwMDJDNworOjEwM0VBRjAwRTFFNDkwNzY5NDc0MDFGMDkwODAwMEYwRTQ5MDc2OEVDNworOjEwM0VCRjAwRjBEMjMxMjI5MDc2MTlFMEZGQjQwMTFCRTQ5MDdGRjIyQgorOjEwM0VDRjAwRjA5MDdGRjM3NDMwRjA5MDdGRkY3NEZDRjA5MDc2OTc1MgorOjEwM0VERjAwRTA1NEZERjA1NEZCRjBFRkI0MDIxQkU0OTA3RkYyRjBERQorOjEwM0VFRjAwOTA3RkYzNzQzNEYwOTA3RkZGNzRGQ0YwOTA3Njk3RTAzRQorOjEwM0VGRjAwNDQwMkYwNTRGQkYwRUZCNDAzMThFNDkwN0ZGMkYwOTAxQgorOjEwM0YwRjAwN0ZGMzc0NjRGMDkwN0ZGRjc0RkNGMDkwNzY5N0UwNDQzOQorOjEwM0YxRjAwMDRGMDkwNzY5NEUwNDQwMUYwOTA4MDAwRjAzMDNGMDk3NworOjEwM0YyRjAwOTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRjA4QQorOjEwM0YzRjAwOTA3Njk3RTA5MDgwMDJGMDkwNzY5ODc0MDRGMDkwNzZFNworOjEwM0Y0RjAwOEU3NDAxRjAyMjkwNzYxOUUwRkZCNDAxMUJFNDkwN0Y4QworOjEwM0Y1RjAwRjJGMDkwN0ZGMzc0NDRGMDkwN0ZGRjc0RkNGMDkwNzY1MgorOjEwM0Y2RjAwOTdFMDU0RkRGMDU0RkJGMEVGQjQwMjFCRTQ5MDdGRjJBNgorOjEwM0Y3RjAwRjA5MDdGRjM3NDRDRjA5MDdGRkY3NEZDRjA5MDc2OTc4NQorOjEwM0Y4RjAwRTA0NDAyRjA1NEZCRjBFRkI0MDMxOEU0OTA3RkYyRjAzQQorOjEwM0Y5RjAwOTA3RkYzNzQ5NEYwOTA3RkZGNzRGQ0YwOTA3Njk3RTAyRAorOjEwM0ZBRjAwNDQwNEYwOTA3Njk0RTA1NEZFRjA5MDgwMDBGMDMwM0Y5RgorOjEwM0ZCRjAwMDk5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFFMQorOjEwM0ZDRjAwRjA5MDc2OTdFMDkwODAwMkYwOTA3Njk4NzQwNkYwOTBEQgorOjA2M0ZERjAwNzY4RTc0MDJGMDIyNTAKKzoxMDE4MDAwMDkwNzY5MEUwMTQ2MDM3MTQ3MDAyMDFEODE0NzAwMjIxQjEKKzoxMDE4MTAwMDcyMTQ3MDAyNDEzQjI0MDQ2MDAyNjEwMzkwN0ZGQzc0RTcKKzoxMDE4MjAwMENDRjA5MDdGRkY3NEZDRjA5MDc2OTVFMDQ0MDFGMDU0OEEKKzoxMDE4MzAwMDA1RjA5MDgwMDFGMEU0OTA3NjFBRjBDMjJFMjI5MDc2QTYKKzoxMDE4NDAwMDk1RTA0NDAxRjA0NDAyRjAzMDNFMDZFMDQ0MDRGMDgwQUMKKzoxMDE4NTAwMDA3OTA3Njk1RTA1NEZCRjA5MDc2MUFFMEI0MDEwODkwN0EKKzoxMDE4NjAwMDc2OTVFMDkwODAwMUYwOTA3NjE5RTBGRkI0MDEyMjkwMjcKKzoxMDE4NzAwMDdGRkM3NDc0RjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJCNzMKKzoxMDE4ODAwMEYwOTA3Njk3RTA1NEZERjBFNDkwNzY4MUYwOTA3NjgwQzkKKzoxMDE4OTAwMEYwRUZCNDAyMjI5MDdGRkM3NDY4RjA5MDdGRkY3NEZDM0MKKzoxMDE4QTAwMEYwOTA3NjhGNzQyRkYwOTA3Njk3RTA0NDAyRjBFNDkwRjkKKzoxMDE4QjAwMDc2ODFGMDkwNzY4MEYwMzAzRjA5OTA3Njk3RTA1NEZFODQKKzoxMDE4QzAwMEYwODAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3RTA1NEZCMjMKKzoxMDE4RDAwMEYwOTA4MDAyRjBEMjJFMjI5MDc2OTVFMDU0RkVGMDQ0RjMKKzoxMDE4RTAwMDAyRjAzMDNFMDZFMDQ0MDRGMDgwMDc5MDc2OTVFMDU0MjQKKzoxMDE4RjAwMEZCRjA5MDc2MUFFMEI0MDEwODkwNzY5NUUwOTA4MDAxQjQKKzoxMDE5MDAwMEYwOTA3NjE5RTBGRkI0MDEyMjkwN0ZGQzc0MzBGMDkwRTMKKzoxMDE5MTAwMDdGRkY3NEZDRjA5MDc2OEY3NDJCRjA5MDc2OTdFMDU0RjQKKzoxMDE5MjAwMEZERjBFNDkwNzY4MUYwOTA3NjgwRjBFRkI0MDIyMjkwQTIKKzoxMDE5MzAwMDdGRkM3NDFDRjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJGMDYKKzoxMDE5NDAwMEYwOTA3Njk3RTA0NDAyRjBFNDkwNzY4MUYwOTA3NjgwMTMKKzoxMDE5NTAwMEYwMzAzRjA5OTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3M0MKKzoxMDE5NjAwMEUwNDQwMUYwOTA3Njk3RTA1NEZCRjA5MDgwMDJGMEQyRDIKKzoxMDE5NzAwMDJFMjI5MDc2OTVFMDQ0MDFGMDQ0MDJGMDQ0MDhGMDMwQzUKKzoxMDE5ODAwMDNFMDZFMDQ0MDRGMDgwMDc5MDc2OTVFMDU0RkJGMDkwMkEKKzoxMDE5OTAwMDc2MUFFMEI0MDEwODkwNzY5NUUwOTA4MDAxRjA5MDc2OTgKKzoxMDE5QTAwMDE5RTBGRkI0MDEyNTkwN0ZGQzc0Q0NGMDkwN0ZGRjc0QTgKKzoxMDE5QjAwMEZDRjA5MDc2OEY3NDJCRjA5MDc2OTdFMDU0RkRGMDU0MDUKKzoxMDE5QzAwMEZCRjBFNDkwNzY4MUYwOTA3NjgwRjBFRkI0MDIyNTkwMDEKKzoxMDE5RDAwMDdGRkM3NEM4RjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJGQkEKKzoxMDE5RTAwMEYwOTA3Njk3RTA0NDAyRjA1NEZCRjBFNDkwNzY4MUYwQkEKKzoxMDE5RjAwMDkwNzY4MEYwRUZCNDAzMjU5MDdGRkM3NDk4RjA5MDdGOTAKKzoxMDFBMDAwMEZGNzRGQ0YwOTA3NjhGNzQ1RkYwOTA3Njk3RTA1NEZENTEKKzoxMDFBMTAwMEYwNDQwNEYwRTQ5MDc2ODFGMDkwNzY4MEYwMzAzRjA5NTUKKzoxMDFBMjAwMDkwNzY5N0UwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUYwQkUKKzoxMDFBMzAwMDkwNzY5N0UwOTA4MDAyRjBEMjJFMjI5MDc2OTVFMDU0MzYKKzoxMDFBNDAwMEZFRjA0NDAyRjA0NDA4RjAzMDNFMDZFMDQ0MDRGMDgwMkEKKzoxMDFBNTAwMDA3OTA3Njk1RTA1NEZCRjA5MDc2MUFFMEI0MDEwODkwNzgKKzoxMDFBNjAwMDc2OTVFMDkwODAwMUYwOTA3NjE5RTBGRkI0MDEyNTkwMjIKKzoxMDFBNzAwMDdGRkM3NEI0RjA5MDdGRkY3NEZDRjA5MDc2OEY3NDJCMzEKKzoxMDFBODAwMEYwOTA3Njk3RTA1NEZERjA1NEZCRjBFNDkwNzY4MUYwMEUKKzoxMDFBOTAwMDkwNzY4MEYwRUZCNDAyMjU5MDdGRkM3NEIwRjA5MDdGRDgKKzoxMDFBQTAwMEZGNzRGQ0YwOTA3NjhGNzQyRkYwOTA3Njk3RTA0NDAyRUMKKzoxMDFBQjAwMEYwNTRGQkYwRTQ5MDc2ODFGMDkwNzY4MEYwRUZCNDAzODAKKzoxMDFBQzAwMDI1OTA3RkZDNzQ2OEYwOTA3RkZGNzRGQ0YwOTA3NjhGMTcKKzoxMDFBRDAwMDc0NUZGMDkwNzY5N0UwNTRGREYwNDQwNEYwRTQ5MDc2NjMKKzoxMDFBRTAwMDgxRjA5MDc2ODBGMDMwM0YwOTkwNzY5N0UwNTRGRUYwRDgKKzoxMDFBRjAwMDgwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5N0UwOTA4MDAyMUUKKzowNDFCMDAwMEYwRDIyRTIyQ0YKKzowNDBDQTEwMDQxNzYyMzAwNzUKKzoxMDJEQTkwMEU0OTA3NjM2RjBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0OTIKKzoxMDJEQjkwMDM0NzVGNTgzNzQwMUYwRUY3NUYwMDNBNDI0MEZGNTgyREYKKzoxMDJEQzkwMEU0MzQ3NUY1ODM3NDAxRjBFRjc1RjAwM0E0MjQxMEY1NkMKKzoxMDJERDkwMDgyRTQzNDc1RjU4M0U0RjA5MDc2MzZFMDA0RjBFMEZGQTAKKzoxMDJERTkwMDc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNTgzNzQxMEYwQUMKKzoxMDJERjkwMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODM3NDA1QTcKKzoxMDJFMDkwMEYwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDc1RjU4M0U0M0EKKzoxMDJFMTkwMEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQwRUY1OTcKKzoxMDJFMjkwMDgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQyNDBGN0UKKzoxMDJFMzkwMEY1ODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDI0ODgKKzoxMDJFNDkwMDEwRjU4MkU0MzQ3NUY1ODNFNEYwOTA3NjM2RTAwNEYwMDkKKzoxMDJFNTkwMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0NUMKKzoxMDJFNjkwMDAxRjBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzQkUKKzoxMDJFNzkwMDc0MDNGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1QkEKKzoxMDJFODkwMDgzRTRGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0QzMKKzoxMDJFOTkwMDBFRjU4MkU0MzQ3NUY1ODM3NDEwRjBFRjc1RjAwM0E0MzAKKzoxMDJFQTkwMDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDZGMEVGNzVGMDAzQTkKKzoxMDJFQjkwMEE0MjQxMEY1ODJFNDM0NzVGNTgzRTRGMDkwNzYzNkUwQzUKKzoxMDJFQzkwMDA0RjBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1RUYKKzoxMDJFRDkwMDgzNzQwMkYwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1Q0UKKzoxMDJFRTkwMEY1ODM3NDA0RjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0M0IKKzoxMDJFRjkwMDc1RjU4M0U0RjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQjEKKzoxMDJGMDkwMEE0MjQwRUY1ODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwQUMKKzoxMDJGMTkwMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODM3NDA4RjBFRjc1ODIKKzoxMDJGMjkwMEYwMDNBNDI0MTBGNTgyRTQzNDc1RjU4Mzc0MDRGMDkwNTkKKzoxMDJGMzkwMDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0OTAKKzoxMDJGNDkwMDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDI0MEZGNTgyNEMKKzoxMDJGNTkwMEU0MzQ3NUY1ODM3NDBBRjBFRjc1RjAwM0E0MjQxMEY1RDEKKzoxMDJGNjkwMDgyRTQzNDc1RjU4Mzc0MDRGMDkwNzYzNkUwMDRGMEUwNzkKKzoxMDJGNzkwMEZGNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDAyMTkKKzoxMDJGODkwMEYwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1RjU4Mzc0MkEKKzoxMDJGOTkwMDA5RjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0NzVGNTgzODQKKzoxMDJGQTkwMDc0MDRGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0OTEKKzoxMDJGQjkwMDBFRjU4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MUQKKzoxMDJGQzkwMDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDdGMEVGNzVGMDAzODcKKzowRTJGRDkwMEE0MjQxMEY1ODJFNDM0NzVGNTgzNzQwNEYwMjIwQworOjEwM0JEMzAwRTQ5MDc2MzZGMEUwRkI3NUYwMEZBNDI0NDFGNTgyRTQxRgorOjEwM0JFMzAwMzQ3NUY1ODM3NDQwRjBFQjc1RjAwRkE0MjQ0MkY1ODIyRAorOjEwM0JGMzAwRTQzNDc1RjU4Mzc0MEFGMEVCNzVGMDBGQTQyNDQzRjVGMAorOjEwM0MwMzAwODJFNDM0NzVGNTgzMTIzN0M4MDAwMEFDNDRFQjc1RjBEOQorOjEwM0MxMzAwMEZBNDI0NDdGNTgyRTQzNDc1RjU4MzEyMzdDODAwMDBGNgorOjEwM0MyMzAwQUM0NEVCNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NUY1ODNCMworOjEwM0MzMzAwMTIzN0M4MDAwMTc3MDA5MDc2MzZFMDA0RjBFMEZCNzU5OAorOjEwM0M0MzAwRjAwRkE0MjQ0MUY1ODJFNDM0NzVGNTgzNzQ0MEYwRUI1RQorOjEwM0M1MzAwNzVGMDBGQTQyNDQyRjU4MkU0MzQ3NUY1ODM3NDhDRjA3NworOjEwM0M2MzAwRUI3NUYwMEZBNDI0NDNGNTgyRTQzNDc1RjU4MzEyMzcyMgorOjEwM0M3MzAwQzgwMDAwQUM0NEVCNzVGMDBGQTQyNDQ3RjU4MkU0MzQ4QworOjEwM0M4MzAwNzVGNTgzMTIzN0M4MDAwMEFDNDRFQjc1RjAwRkE0MjQxQworOjEwM0M5MzAwNEJGNTgyRTQzNDc1RjU4MzEyMzdDODAwMDE3NzAwOTA0MQorOjEwM0NBMzAwNzYzNkUwMDRGMEUwRkY3NUYwMEZBNDI0NDFGNTgyRTREQQorOjEwM0NCMzAwMzQ3NUY1ODM3NDQwRjBFRjc1RjAwRkE0MjQ0MkY1ODI1OAorOjEwM0NDMzAwRTQzNDc1RjU4Mzc0OEZGMDkwNzYzNkUwMDRGMEUwRkYwQQorOjEwM0NEMzAwNzVGMDBGQTQyNDQxRjU4MkU0MzQ3NUY1ODM3NDQxRjA0MworOjEwM0NFMzAwRUY3NUYwMEZBNDI0NDJGNTgyRTQzNDc1RjU4Mzc0ODRGMAorOjEwM0NGMzAwRjA5MDc2MzZFMDA0RjBFMEZGNzVGMDBGQTQyNDQxRjU3MAorOjEwM0QwMzAwODJFNDM0NzVGNTgzNzQ2MUYwRUY3NUYwMEZBNDI0NDJGNworOjEwM0QxMzAwRjU4MkU0MzQ3NUY1ODM3NDgxRjA5MDc2MzZFMDA0RjAyRgorOjEwM0QyMzAwRTBGRjc1RjAwRkE0MjQ0MUY1ODJFNDM0NzVGNTgzNzQ0NAorOjEwM0QzMzAwNjFGMEVGNzVGMDBGQTQyNDQyRjU4MkU0MzQ3NUY1ODM0NgorOjA0M0Q0MzAwNzQwMUYwMjJGNQorOjEwNDYxOTAwRTQ5MDc2MzZGMEUwRkY3NUYwMDNBNDI0MzJGNTgyRTRFNQorOjEwNDYyOTAwMzQ3NUY1ODNFNEYwRUY3NUYwMDNBNDI0MzNGNTgyRTRERgorOjEwNDYzOTAwMzQ3NUY1ODM3NDAxRjA5MDc2MzZFMDA0RjBFMEZGNzU4NworOjEwNDY0OTAwRjAwM0E0MjQzMkY1ODJFNDM0NzVGNTgzRTRGMEVGNzVDMAorOjEwNDY1OTAwRjAwM0E0MjQzM0Y1ODJFNDM0NzVGNTgzNzQwMkYwOTBGMQorOjEwNDY2OTAwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0MzJGNTgyRTQyNQorOjEwNDY3OTAwMzQ3NUY1ODNFNEYwRUY3NUYwMDNBNDI0MzNGNTgyRTQ4RgorOjEwNDY4OTAwMzQ3NUY1ODM3NDAzRjA5MDc2MzZFMDA0RjBFMEZGNzUzNQorOjEwNDY5OTAwRjAwM0E0MjQzMkY1ODJFNDM0NzVGNTgzRTRGMEVGNzU3MAorOjEwNDZBOTAwRjAwM0E0MjQzM0Y1ODJFNDM0NzVGNTgzNzQwNEYwMjIwRAorOjEwM0E0MjAwRTQ5MDc2MzVGMDkwNzYzNUUwRkZDMzk0MDM0MDAyNDE2RQorOjEwM0E1MjAwRkZFRjc1RjAwQUE0MjRBQUY1ODJFNDM0NzVGNTgzRUYyQQorOjEwM0E2MjAwRjBFRjc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzRTQzMworOjEwM0E3MjAwRjBFRjc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzNzQ5MgorOjEwM0E4MjAwRjBGMEVGNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODMwNQorOjEwM0E5MjAwNzRGRkYwRUY3NUYwMEFBNDI0QUVGNTgyRTQzNDc1RjVGNAorOjEwM0FBMjAwODNFNEYwRUY3NUYwMEFBNDI0QUZGNTgyRTQzNDc1RjVFRgorOjEwM0FCMjAwODM3NDgwRjBFRjc1RjAwQUE0MjRCMEY1ODJFNDM0NzVDMworOjEwM0FDMjAwRjU4M0U0RjBFRjc1RjAwQUE0MjRCMUY1ODJFNDM0NzVDRAorOjEwM0FEMjAwRjU4M0U0RjBFRjc1RjAwQUE0MjRCMkY1ODJFNDM0NzVCQworOjEwM0FFMjAwRjU4M0U0RjBFRjc1RjAwQUE0MjRCM0Y1ODJFNDM0NzVBQgorOjEwM0FGMjAwRjU4Mzc0MDFGMDkwNzYzNUUwMDRGMDQxNDc5MDc2M0MwRQorOjEwM0IwMjAwNzQwQUYwRTRBM0YwOTA3NjM1NzQwM0YwOTA3NjNDRTAwQQorOjEwM0IxMjAwRkY5MDc2MzVFMEZFQzM5RjQwMDI2MUQyOTA3NjNERTA5MQorOjEwM0IyMjAwRkYwNEYwRUU3NUYwMEFBNDI0QUFGNTgyRTQzNDc1RjVEOAorOjEwM0IzMjAwODNFRkYwRUU3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjU1OAorOjEwM0I0MjAwODNFNEYwRUU3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU1MgorOjEwM0I1MjAwODM3NDVFRjBFRTc1RjAwQUE0MjRBREY1ODJFNDM0NzU0OAorOjEwM0I2MjAwRjU4Mzc0QkFGMEVFNzVGMDBBQTQyNEFFRjU4MkU0MzQ1QgorOjEwM0I3MjAwNzVGNTgzNzQwNUYwRUU3NUYwMEFBNDI0QUZGNTgyRTRCRQorOjEwM0I4MjAwMzQ3NUY1ODM3NDgwRjBFRTc1RjAwQUE0MjRCMEY1ODJFMgorOjEwM0I5MjAwRTQzNDc1RjU4M0U0RjBFRTc1RjAwQUE0MjRCMUY1ODJGRAorOjEwM0JBMjAwRTQzNDc1RjU4M0U0RjBFRTc1RjAwQUE0MjRCMkY1ODJFQworOjEwM0JCMjAwRTQzNDc1RjU4Mzc0MTVGMEVFNzVGMDBBQTQyNEIzRjVCOAorOjEwM0JDMjAwODJFNDM0NzVGNTgzRTRGMDkwNzYzNUUwMDRGMDYxMEUxQQorOjAxM0JEMjAwMjJEMAorOjEwMDgwMDAwRTQ5MDc2MzFGMDkwNzYzMUUwRkY3NUYwMDNBNDI0MEY4OAorOjEwMDgxMDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVERTBGREVFNkQ0QQorOjEwMDgyMDAwNjAwRUVGQzM5NDBCNTAwODkwNzYzMUUwMDRGMDgwRDU1MQorOjEwMDgzMDAwRUZCNDBCMDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMDNCMQorOjEwMDg0MDAwQTQyNDBFRjU4MkU0MzQ3NUY1ODNFMDkwNzYzM0YwMjQyOQorOjEwMDg1MDAwRjA2MDBBMjQwRTYwMDI4MTg3MTI0QkM3MjI5MDdGRUQ2MAorOjEwMDg2MDAwRTA2NDA1NzA1MTkwNzYxODc0MDVGMDkwNzYzNzc0MDE0NQorOjEwMDg3MDAwRjA5MDc2Mzk3NDAzRjA5MDc2MjFGMEU0OTA3NjIwRjBEMQorOjEwMDg4MDAwOTA3RkVBRTBGNDYwMkY5MDc2MjBFMEZGNzVGMDBBQTRGNAorOjEwMDg5MDAwMjRBQUY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQUUwRkQ1QQorOjEwMDhBMDAwRUU2RDYwMTI5MDc2MjFFMEZFRUZDMzlFNTAwODkwNzZDOAorOjEwMDhCMDAwMjBFMDA0RjA4MEQxOTA3RkVERTA2NDA2NzA1MjkwNzZFNQorOjEwMDhDMDAwMTg3NDA2RjA5MDc2Mzc3NDA0RjA5MDc2Mzk3NDBBRjA1NAorOjEwMDhEMDAwOTA3NjIxRjA5MDc2MjA3NDAzRjA5MDdGRUFFMEY0NjA0NworOjEwMDhFMDAwMkY5MDc2MjBFMEZGNzVGMDBBQTQyNEFBRjU4MkU0MzQ2NAorOjEwMDhGMDAwNzVGNTgzRTBGRTkwN0ZFQUUwRkRFRTZENjAxMjkwNzY4NAorOjEwMDkwMDAwMjFFMEZFRUZDMzlFNTAwODkwNzYyMEUwMDRGMDgwRDFGNQorOjEwMDkxMDAwOTA3NjIwRTBGRjc1RjAwQUE0MjRBQUY1ODJFNDM0NzVFRAorOjEwMDkyMDAwRjU4M0UwOTA3MjI5RjBFNDkwNzYzQkYwOTA3NjIxRTAzOAorOjEwMDkzMDAwRkVFRjZFNzAwODkwN0ZCNEUwNDQwMUYwMjI5MDdGRUJGMAorOjEwMDk0MDAwRTAxNDYwMTMxNDcwMDIyMUUyMjQwMjYwMDI4MTdGOTA5RgorOjEwMDk1MDAwN0ZCNEUwNDQwMUYwMjI5MDdGRTlFMDE0NzA3QzkwN0Y0NgorOjEwMDk2MDAwRUFFMEY0NzA0ODkwNzYzN0UwOTA3NjIwRjA5MDc2Mzk5RgorOjEwMDk3MDAwRTBGRTkwNzYyMEUwRkRDMzlFNTAyQjkwNzYzQkUwRkU5QgorOjEwMDk4MDAwMDRGMDc0QzAyRUY1ODJFNDM0N0VGNTgzRTBGRUVENzU0QworOjEwMDk5MDAwRjAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzRUVGMDkwNzY4QQorOjEwMDlBMDAwMjBFMDA0RjA4MEM3OTA3NjNGNzQwMUYwMjI5MDdFQzA3MgorOjEwMDlCMDAwRTBGRUVGNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODMwQworOjEwMDlDMDAwRUVGMEUwQjQwMTA4OTA3NjNFNzQwMUYwODAwNUU0OTAwQQorOjEwMDlEMDAwNzYzRUYwOTA3NjNGNzQwMUYwMjI5MDdGQjRFMDQ0MDFCRgorOjEwMDlFMDAwRjAyMjkwN0ZFOUUwMjRGRTcwMDI0MUEzMTQ3MDAyNjFCRQorOjEwMDlGMDAwM0YxNDcwMDI2MURCMjQwMzYwMDI4MTc3OTA3RkVBRTA5QworOjEwMEEwMDAwRjQ3MDZCOTA3NjM3RTA5MDc2MjBGMDkwNzYzOUUwRkZDNgorOjEwMEExMDAwOTA3NjIwRTBGRUMzOUY1MDRFOTA3NjNCRTBGRjA0RjBCRQorOjEwMEEyMDAwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGRUU3NUYwMEFBMgorOjEwMEEzMDAwQTQyNEFDRjU4MkU0MzQ3NUY1ODNFRkYwOTA3NjNCRTBDNgorOjEwMEE0MDAwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGRUVGRQorOjEwMEE1MDAwNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODNFRkYwOTBDNworOjEwMEE2MDAwNzYyMEUwMDRGMDgwQTQ5MDc2NDA3NDAxRjAyMjkwN0UxRAorOjEwMEE3MDAwQzBFMEZGOTA3NjIwRTBGRTc1RjAwQUE0MjRBQ0Y1ODI3OQorOjEwMEE4MDAwRTQzNDc1RjU4M0VGRjA5MDdFQzFFMEZGRUU3NUYwMEE3NworOjEwMEE5MDAwQTQyNEFERjU4MkU0MzQ3NUY1ODNFRkYwOTA3NjQxNzRDQgorOjEwMEFBMDAwMDFGMDIyOTA3RkVBRTBGNDcwNjY5MDc2MzdFMDkwNzY2RAorOjEwMEFCMDAwMjBGMDkwNzYzOUUwRkY5MDc2MjBFMEZFQzM5RjQwMDI2MAorOjEwMEFDMDAwODE4RTkwNzYzQkUwRkYwNEYwNzRDMDJGRjU4MkU0MzQxMQorOjEwMEFEMDAwN0VGNTgzRTBGRkVFNzVGMDBBQTQyNEFFRjU4MkU0MzRERgorOjEwMEFFMDAwNzVGNTgzRUZGMDkwNzYzQkUwRkYwNEYwNzRDMDJGRjVDRQorOjEwMEFGMDAwODJFNDM0N0VGNTgzRTBGRkVFNzVGMDBBQTQyNEFGRjVCRQorOjEwMEIwMDAwODJFNDM0NzVGNTgzRUZGMDkwNzYyMEUwMDRGMDgwQTI2MworOjEwMEIxMDAwOTA3RUMwRTBGRjkwNzYyMEUwRkU3NUYwMEFBNDI0QUUzRgorOjEwMEIyMDAwRjU4MkU0MzQ3NUY1ODNFRkYwOTA3RUMxRTBGRkVFNzU1OQorOjEwMEIzMDAwRjAwQUE0MjRBRkY1ODJFNDM0NzVGNTgzRUZGMDIyOTAzNworOjEwMEI0MDAwN0ZFQUUwRjQ3MDY2OTA3NjM3RTA5MDc2MjBGMDkwNzY1OQorOjEwMEI1MDAwMzlFMEZGOTA3NjIwRTBGRUMzOUY0MDAyODE4RTkwNzZDMAorOjEwMEI2MDAwM0JFMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBBRgorOjEwMEI3MDAwRkZFRTc1RjAwQUE0MjRCMEY1ODJFNDM0NzVGNTgzRUYzNgorOjEwMEI4MDAwRjA5MDc2M0JFMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGMQorOjEwMEI5MDAwRjU4M0UwRkZFRTc1RjAwQUE0MjRCMUY1ODJFNDM0NzUyNAorOjEwMEJBMDAwRjU4M0VGRjA5MDc2MjBFMDA0RjA4MEEyOTA3RUMwRTAyNAorOjEwMEJCMDAwRkY5MDc2MjBFMEZFNzVGMDBBQTQyNEIwRjU4MkU0MzRCQworOjEwMEJDMDAwNzVGNTgzRUZGMDkwN0VDMUUwRkZFRTc1RjAwQUE0MjQ4NgorOjEwMEJEMDAwQjFGNTgyRTQzNDc1RjU4M0VGRjAyMjkwN0ZFQUUwRjQxQQorOjEwMEJFMDAwNzA2NjkwNzYzN0UwOTA3NjIwRjA5MDc2MzlFMEZGOTA0RQorOjEwMEJGMDAwNzYyMEUwRkVDMzlGNDAwMjgxOEU5MDc2M0JFMEZGMDRBQQorOjEwMEMwMDAwRjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkZFRTc1RjBEQQorOjEwMEMxMDAwMEFBNDI0QjJGNTgyRTQzNDc1RjU4M0VGRjA5MDc2M0JCNAorOjEwMEMyMDAwRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkYyQQorOjEwMEMzMDAwRUU3NUYwMEFBNDI0QjNGNTgyRTQzNDc1RjU4M0VGRjA4MQorOjEwMEM0MDAwOTA3NjIwRTAwNEYwODBBMjkwN0VDMEUwRkY5MDc2MjBCNQorOjEwMEM1MDAwRTBGRTc1RjAwQUE0MjRCMkY1ODJFNDM0NzVGNTgzRUY2MgorOjEwMEM2MDAwRjA5MDdFQzFFMEZGRUU3NUYwMEFBNDI0QjNGNTgyRTRCMworOjEwMEM3MDAwMzQ3NUY1ODNFRkYwMjI5MDdGQjRFMDQ0MDFGMDIyOTBDOAorOjBGMEM4MDAwN0ZCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyMDEKKzoxMDEwMDAwMEU0OTA3NjJDRjA5MDc2MkNFMEZGNzVGMDAzQTQyNDBGOEEKKzoxMDEwMTAwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFREUwRkRFRTZENDIKKzoxMDEwMjAwMDYwMEVFRkMzOTQwQjUwMDg5MDc2MkNFMDA0RjA4MEQ1NEUKKzoxMDEwMzAwMEVGQjQwQjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDAzQTkKKzoxMDEwNDAwMEE0MjQwRUY1ODJFNDM0NzVGNTgzRTA5MDc2MkVGMDI0MjYKKzoxMDEwNTAwMEYwNjAwQTI0MEY2MDAyODE3RDEyNEJBNDIyOTA3RkVEODQKKzoxMDEwNjAwMEUwNjQwNTcwNTE5MDc2MTg3NDA1RjA5MDc2Mzg3NDAxM0MKKzoxMDEwNzAwMEYwOTA3NjNBNzQwM0YwOTA3NjFDRjBFNDkwNzYxQkYwRDIKKzoxMDEwODAwMDkwN0ZFQUUwRjQ2MDJGOTA3NjFCRTBGRjc1RjAwQUE0RjEKKzoxMDEwOTAwMDI0QUFGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUFFMEZENTIKKzoxMDEwQTAwMEVFNkQ2MDEyOTA3NjFDRTBGRUVGQzM5RTUwMDg5MDc2QzUKKzoxMDEwQjAwMDFCRTAwNEYwODBEMTkwN0ZFREUwNjQwNjcwNTI5MDc2RTIKKzoxMDEwQzAwMDE4NzQwNkYwOTA3NjM4NzQwNEYwOTA3NjNBNzQwQUYwNEEKKzoxMDEwRDAwMDkwNzYxQ0YwOTA3NjFCNzQwM0YwOTA3RkVBRTBGNDYwNDkKKzoxMDEwRTAwMDJGOTA3NjFCRTBGRjc1RjAwQUE0MjRBQUY1ODJFNDM0NjEKKzoxMDEwRjAwMDc1RjU4M0UwRkU5MDdGRUFFMEZERUU2RDYwMTI5MDc2N0MKKzoxMDExMDAwMDFDRTBGRUVGQzM5RTUwMDg5MDc2MUJFMDA0RjA4MEQxRjcKKzoxMDExMTAwMEU0OTA3NjFFRjA5MDc2MUNFMEZGOTA3NjFCRTBGRTZGNjgKKzoxMDExMjAwMDcwMDg5MDdGQjRFMDQ0MDFGMDIyOTA3RkVCRTAxNDYwRkYKKzoxMDExMzAwMDEzMTQ3MDAyMjFCRjI0MDI2MDAyODE3NTkwN0ZCNEUwMTUKKzoxMDExNDAwMDQ0MDFGMDIyOTA3RkU5RTAyNDdGNzA2QjkwN0ZFQUUwMTkKKzoxMDExNTAwMEY0NzA0QTkwNzYzOEUwOTA3NjFCRjA5MDc2M0FFMEZGOTMKKzoxMDExNjAwMDkwNzYxQkUwRkRDMzlGNTAyQkVENzVGMDBBQTQyNEFCRDUKKzoxMDExNzAwMEY1ODJFNDM0NzVGNTgzRTBGRjkwNzYxRUUwRkQwNEYwMUYKKzoxMDExODAwMDc0MDAyREY1ODJFNDM0N0ZGNTgzRUZGMDkwNzYxQkUwNTgKKzoxMDExOTAwMDA0RjA4MEM3OTA3NjFFRTA5MDdGQjVGMDIyRUU3NUYwRTcKKzoxMDExQTAwMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwNjcKKzoxMDExQjAwMDkwN0ZCNTc0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjkwNUEKKzoxMDExQzAwMDdGRTlFMDI0N0U3MDAyNDE3RTE0NzAwMjYxMjMxNDcwNzYKKzoxMDExRDAwMDAyNjFDODI0MDM2MDAyODE2RDkwN0ZFQUUwRjQ3MDZEQzMKKzoxMDExRTAwMDkwNzYzOEUwOTA3NjFCRjA5MDc2M0FFMEZGOTA3NjFCOTAKKzoxMDExRjAwMEUwQzM5RjUwNEZFMEZGNzVGMDBBQTQyNEFDRjU4MkU0RjEKKzoxMDEyMDAwMDM0NzVGNTgzRTBGRTkwNzYxRUUwRkQwNEYwNzQwMDJENDkKKzoxMDEyMTAwMEY1ODJFNDM0N0ZGNTgzRUVGMEVGNzVGMDBBQTQyNEFEOTcKKzoxMDEyMjAwMEY1ODJFNDM0NzVGNTgzRTBGRjkwNzYxRUUwRkUwNEYwNkQKKzoxMDEyMzAwMDc0MDAyRUY1ODJFNDM0N0ZGNTgzRUZGMDkwNzYxQkUwQTYKKzoxMDEyNDAwMDA0RjA4MEE0OTA3NjFFRTA5MDdGQjVGMDIyOTA3NjFCOEIKKzoxMDEyNTAwMEUwRkY3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU4M0UwNzAKKzoxMDEyNjAwMDkwN0YwMEYwRUY3NUYwMEFBNDI0QURGNTgyRTQzNDc1QTgKKzoxMDEyNzAwMEY1ODNFMDkwN0YwMUYwOTA3RkI1NzQwMkYwMjI5MDdGQkIKKzoxMDEyODAwMEVBRTBGNDcwNkQ5MDc2MzhFMDkwNzYxQkYwOTA3NjNBNTQKKzoxMDEyOTAwMEUwRkY5MDc2MUJFMEMzOUY1MDRGRTBGRjc1RjAwQUE0N0IKKzoxMDEyQTAwMDI0QUVGNTgyRTQzNDc1RjU4M0UwRkU5MDc2MUVFMEZEMTEKKzoxMDEyQjAwMDA0RjA3NDAwMkRGNTgyRTQzNDdGRjU4M0VFRjBFRjc1RDEKKzoxMDEyQzAwMEYwMEFBNDI0QUZGNTgyRTQzNDc1RjU4M0UwRkY5MDc2NEMKKzoxMDEyRDAwMDFFRTBGRTA0RjA3NDAwMkVGNTgyRTQzNDdGRjU4M0VGMDcKKzoxMDEyRTAwMEYwOTA3NjFCRTAwNEYwODBBNDkwNzYxRUUwOTA3RkI1MkQKKzoxMDEyRjAwMEYwMjI5MDc2MUJFMEZGNzVGMDBBQTQyNEFFRjU4MkU0OUMKKzoxMDEzMDAwMDM0NzVGNTgzRTA5MDdGMDBGMEVGNzVGMDBBQTQyNEFGMDgKKzoxMDEzMTAwMEY1ODJFNDM0NzVGNTgzRTA5MDdGMDFGMDkwN0ZCNTc0MzkKKzoxMDEzMjAwMDAyRjAyMjkwN0ZFQUUwRjQ3MDZEOTA3NjM4RTA5MDc2REIKKzoxMDEzMzAwMDFCRjA5MDc2M0FFMEZGOTA3NjFCRTBDMzlGNTA0RkUwQTEKKzoxMDEzNDAwMEZGNzVGMDBBQTQyNEIwRjU4MkU0MzQ3NUY1ODNFMEZFNUQKKzoxMDEzNTAwMDkwNzYxRUUwRkQwNEYwNzQwMDJERjU4MkU0MzQ3RkY1RjQKKzoxMDEzNjAwMDgzRUVGMEVGNzVGMDBBQTQyNEIxRjU4MkU0MzQ3NUY1NEMKKzoxMDEzNzAwMDgzRTBGRjkwNzYxRUUwRkUwNEYwNzQwMDJFRjU4MkU0MTgKKzoxMDEzODAwMDM0N0ZGNTgzRUZGMDkwNzYxQkUwMDRGMDgwQTQ5MDc2MzQKKzoxMDEzOTAwMDFFRTA5MDdGQjVGMDIyOTA3NjFCRTBGRjc1RjAwQUE0NjYKKzoxMDEzQTAwMDI0QjBGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjBFRjc1QUEKKzoxMDEzQjAwMEYwMEFBNDI0QjFGNTgyRTQzNDc1RjU4M0UwOTA3RjAxNEUKKzoxMDEzQzAwMEYwOTA3RkI1NzQwMkYwMjI5MDdGRUFFMEY0NzA2RDkwQTcKKzoxMDEzRDAwMDc2MzhFMDkwNzYxQkYwOTA3NjNBRTBGRjkwNzYxQkUwNEUKKzoxMDEzRTAwMEMzOUY1MDRGRTBGRjc1RjAwQUE0MjRCMkY1ODJFNDM0QTUKKzoxMDEzRjAwMDc1RjU4M0UwRkU5MDc2MUVFMEZEMDRGMDc0MDAyREY1OTcKKzoxMDE0MDAwMDgyRTQzNDdGRjU4M0VFRjBFRjc1RjAwQUE0MjRCM0Y1OUYKKzoxMDE0MTAwMDgyRTQzNDc1RjU4M0UwRkY5MDc2MUVFMEZFMDRGMDc0RkMKKzoxMDE0MjAwMDAwMkVGNTgyRTQzNDdGRjU4M0VGRjA5MDc2MUJFMDA0MjQKKzoxMDE0MzAwMEYwODBBNDkwNzYxRUUwOTA3RkI1RjAyMjkwNzYxQkUwQkQKKzoxMDE0NDAwMEZGNzVGMDBBQTQyNEIyRjU4MkU0MzQ3NUY1ODNFMDkwQzgKKzoxMDE0NTAwMDdGMDBGMEVGNzVGMDBBQTQyNEIzRjU4MkU0MzQ3NUY1NEIKKzoxMDE0NjAwMDgzRTA5MDdGMDFGMDkwN0ZCNTc0MDJGMDIyOTA3RkI0MEEKKzoxMDE0NzAwMEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RkI0NzgKKzowNTE0ODAwMEUwNDQwMUYwMjIzMAorOjEwMzg3NDAwRTQ5MDc2MjlGMDkwNzYyOUUwRkY3NUYwMEZBNDI0NDJCNQorOjEwMzg4NDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkRBNworOjEwMzg5NDAwNjAwRUVGQzM5NDA2NTAwODkwNzYyOUUwMDRGMDgwRDVCQQorOjEwMzhBNDAwRUZCNDA2MDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMEYwNgorOjEwMzhCNDAwQTQyNDQxRjU4MkU0MzQ3NUY1ODNFMDkwNzYyQUYwMjQ1QgorOjEwMzhDNDAwQkY3MDAyNDE0MTI0RTA3MDAyNDExMjI0MjE2MDAyNDE5MAorOjEwMzhENDAwM0E5MDdGRTlFMDI0RkU2MDdEMTQ3MDAyMjFCMjI0MDI1NAorOjEwMzhFNDAwNjAwMjQxMEExMjE3NTE5MDc2NDJFMEZDQTNFMEZEQTM2NgorOjEwMzhGNDAwRTBGRUEzRTBGRjkwNzYyOUUwNzVGMDBGQTQyNDQzRjVFMQorOjEwMzkwNDAwODJFNDM0NzVGNTgzMTIzN0JDOTA3NjE5RTBGRkI0MDE3NAorOjEwMzkxNDAwMTI5MDc2N0M3NDY3RjA5MDc2N0Q3NDA2RjA5MDc2N0VEMworOjEwMzkyNDAwNzQwQkYwRUZCNDAyMEZFNDkwNzY3Q0YwOTA3NjdERjBBNworOjEwMzkzNDAwOTA3NjdFNzQwQ0YwRUZCNDAzMEZFNDkwNzY3Q0YwOTBGNAorOjEwMzk0NDAwNzY3REYwOTA3NjdFNzQxOEYwOTA3NjFBNzQwMUYwMTJGOQorOjEwMzk1NDAwM0U5RjEyMTgwMDIyOTA3RUMyRTBGRkU0RkNGREZFRkJCNQorOjEwMzk2NDAwRkE3OTAxRjgxMjM3NDZDOEVDQzhDOUVEQzlDQUVFQ0FEQgorOjEwMzk3NDAwQ0JFRkNCOTA3RUMxRTBGRUU0RkNGRDJCRkJFQTNFRkFFQworOjEwMzk4NDAwRUQzOUY5RUMzOEY4OTA3RUMwRTBGRkU0RkVFQjJGRkY1MAorOjEwMzk5NDAwRUUzQUZFRUQzOUZERUMzOEZDOTA3NjI5RTA3NUYwMEYzNworOjEwMzlBNDAwQTQyNDQ3RjU4MkU0MzQ3NUY1ODMxMjM3QkMyMjkwN0U1MworOjEwMzlCNDAwQzJFMEZGRTRGQ0ZERkVGQkZBNzkwMUY4MTIzNzQ2QzhDOQorOjEwMzlDNDAwRUNDOEM5RURDOUNBRUVDQUNCRUZDQjkwN0VDMUUwRkUwQworOjEwMzlENDAwRTRGQ0ZEMkJGQkVBM0VGQUVEMzlGOUVDMzhGODkwN0U3NQorOjEwMzlFNDAwQzBFMEZGRTRGRUVCMkZGRkVFM0FGRUVEMzlGREVDMzhDQworOjEwMzlGNDAwRkM5MDc2MjlFMDc1RjAwRkE0MjQ0QkY1ODJFNDM0NzUyRAorOjEwM0EwNDAwRjU4MzEyMzdCQzIyOTA3RkI0RTA0NDAxRjAyMjkwN0YwQQorOjEwM0ExNDAwRTlFMDE0NzAxOTkwN0VDMEUwRkY5MDc2MjlFMDc1RjAxQgorOjEwM0EyNDAwMEZBNDI0NEZGNTgyRTQzNDc1RjU4M0VGRjAyMjkwN0ZFMAorOjBFM0EzNDAwQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjlGCis6MTAyQUQ2MDBFNDkwNzYyN0YwOTA3NjI3RTBGRjc1RjAwRkE0MjQ0MjY1Cis6MTAyQUU2MDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2RDUzCis6MTAyQUY2MDA2MDBFRUZDMzk0MDY1MDA4OTA3NjI3RTAwNEYwODBENTY4Cis6MTAyQjA2MDBFRkI0MDYwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwRkIxCis6MTAyQjE2MDBBNDI0NDFGNTgyRTQzNDc1RjU4M0UwOTA3NjI4RjAyNDA4Cis6MTAyQjI2MDA5RjcwMDJBMTc0MjQyMTYwMDJBMUExOTA3RkU5RTAyNDk0Cis6MTAyQjM2MDA3RTcwMDI2MUZDMTQ3MDAyODFCNTI0MDI2MDAyQTE2Q0YxCis6MTAyQjQ2MDBFRjc1RjAwRkE0MjQ0M0Y1ODJFNDM0NzVGNTgzRTBGQ0I5Cis6MTAyQjU2MDBBM0UwRkRBM0UwRkVBM0UwRkY3QjQ0N0FBQzc5MDA3ODE2Cis6MTAyQjY2MDAwMEMzMTIzN0FCNzAxMzkwN0YwMDc0NDRGMEEzNzRBQ0FCCis6MTAyQjc2MDBGMEU0QTNGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwNzVGMDRCCis6MTAyQjg2MDAwRkE0MjQ0M0Y1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGRDRECis6MTAyQjk2MDBBM0UwRkVBM0UwRkY3QjgwN0FCQjc5MDA3ODAwQzMxMjM2Cis6MTAyQkE2MDAzN0FCNzAxMzkwN0YwMDc0ODBGMEEzNzRCQkYwRTRBMzdFCis6MTAyQkI2MDBGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwNzVGMDBGQTQyNEFCCis6MTAyQkM2MDA0M0Y1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGREEzRTBGRTYzCis6MTAyQkQ2MDBBM0UwRkY3QjAwN0E3Nzc5MDE3ODAwQzMxMjM3QUI2MEY4Cis6MTAyQkU2MDAwMkExQTg5MDdGMDBGMEEzNzQ3N0YwQTM3NDAxRjA5MDdGCis6MTAyQkY2MDA3RkI1NzQwM0YwMjI5MDc2MjdFMDc1RjAwRkE0MjQ0NzgyCis6MTAyQzA2MDBGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkRBM0UwRkVBM0MyCis6MTAyQzE2MDBFMEZGN0I0NDdBQUM3OTAwNzgwMEMzMTIzN0FCNzAxM0JGCis6MTAyQzI2MDA5MDdGMDA3NDQ0RjBBMzc0QUNGMEU0QTNGMDkwN0ZCNUY5Cis6MTAyQzM2MDA3NDAzRjA5MDc2MjdFMDc1RjAwRkE0MjQ0N0Y1ODJFNDNDCis6MTAyQzQ2MDAzNDc1RjU4M0UwRkNBM0UwRkRBM0UwRkVBM0UwRkY3QjgzCis6MTAyQzU2MDA4MDdBQkI3OTAwNzgwMEMzMTIzN0FCNzAxMzkwN0YwMDdGCis6MTAyQzY2MDA3NDgwRjBBMzc0QkJGMEU0QTNGMDkwN0ZCNTc0MDNGMDE2Cis6MTAyQzc2MDA5MDc2MjdFMDc1RjAwRkE0MjQ0N0Y1ODJFNDM0NzVGNUM1Cis6MTAyQzg2MDA4M0UwRkNBM0UwRkRBM0UwRkVBM0UwRkY3QjAwN0E3N0YwCis6MTAyQzk2MDA3OTAxNzgwMEMzMTIzN0FCNjAwMkExQTg5MDdGMDBGMERCCis6MTAyQ0E2MDBBMzc0NzdGMEEzNzQwMUYwOTA3RkI1NzQwM0YwMjI5MEJCCis6MTAyQ0I2MDA3NjI3RTA3NUYwMEZBNDI0NEJGNTgyRTQzNDc1RjU4MzhFCis6MTAyQ0M2MDBFMEZDQTNFMEZEQTNFMEZFQTNFMEZGN0I0NDdBQUM3OTQxCis6MTAyQ0Q2MDAwMDc4MDBDMzEyMzdBQjcwMTM5MDdGMDA3NDQ0RjBBM0UyCis6MTAyQ0U2MDA3NEFDRjBFNEEzRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDFGCis6MTAyQ0Y2MDA3NUYwMEZBNDI0NEJGNTgyRTQzNDc1RjU4M0UwRkNBMzRDCis6MTAyRDA2MDBFMEZEQTNFMEZFQTNFMEZGN0I4MDdBQkI3OTAwNzgwMEJDCis6MTAyRDE2MDBDMzEyMzdBQjcwMTM5MDdGMDA3NDgwRjBBMzc0QkJGMEJFCis6MTAyRDI2MDBFNEEzRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDc1RjAwRjdBCis6MTAyRDM2MDBBNDI0NEJGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkRBM0ZGCis6MTAyRDQ2MDBFMEZFQTNFMEZGN0IwMDdBNzc3OTAxNzgwMEMzMTIzN0IzCis6MTAyRDU2MDBBQjcwNEY5MDdGMDBGMEEzNzQ3N0YwQTM3NDAxRjA5MEVFCis6MTAyRDY2MDA3RkI1NzQwM0YwMjI5MDdGQjRFMDQ0MDFGMDIyOTA3Rjk3Cis6MTAyRDc2MDBFOUUwMjQ3RjcwMUU5MDc2MjdFMDc1RjAwRkE0MjQ0RkJCCis6MTAyRDg2MDBGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjA5MDdGQjU3NEFBCis6MTAyRDk2MDAwMUYwODAwNzkwN0ZCNEUwNDQwMUYwOTA3RkI0RTA0NEY2Cis6MDMyREE2MDAwMUYwMjIxNworOjEwNEJBNDAwOTA3RkVCRTAxNDcwMTQ5MDdGRTlFMDI0N0Y3MDA0MTI4RQorOjEwNEJCNDAwNDk1ODIyOTA3RkI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQ0RAorOjAzNEJDNDAwMDFGMDIyREIKKzoxMDRCQzcwMDkwN0ZFQkUwMTQ3MDEzOTA3RkU5RTAxNDcwMDQxMjRBQjEKKzoxMDRCRDcwMDAzMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxQzcKKzowMjRCRTcwMEYwMjJCQQorOjEwNDk1ODAwRTQ5MDc2MjZGMDkwNzYyNkUwRkY3NUYwMDNBNDI0MzRFMAorOjEwNDk2ODAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkRCMgorOjEwNDk3ODAwNjAwRUVGQzM5NDA0NTAwODkwNzYyNkUwMDRGMDgwRDVDQQorOjEwNDk4ODAwRUZCNDA0MDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMDMxRgorOjEwNDk5ODAwQTQyNDMyRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwOTAyQQorOjA2NDlBODAwN0ZCNTc0MDFGMDIyNEUKKzoxMDRBMDMwMEU0OTA3NjI1RjA5MDc2MjVFMEZGNzVGMDAzQTQyNDM0MzYKKzoxMDRBMTMwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZEMDYKKzoxMDRBMjMwMDYwMEVFRkMzOTQwNDUwMDg5MDc2MjVFMDA0RjA4MEQ1MUYKKzoxMDRBMzMwMEVGQjQwNDA4OTA3RkI0RTA0NDAxRjAyMjkwN0VDMEUwMUMKKzoxMDRBNDMwMEZFRUY3NUYwMDNBNDI0MzJGNTgyRTQzNDc1RjU4M0VFQUEKKzowMjRBNTMwMEYwMjI0RgorOjAzMDAwMzAwMDIwRkZERUMKKzowMzBGRkQwMEMyODkzMjc0Cis6MDMwMDEzMDAwMjE3RkRENAorOjAzMTdGRDAwQzI4QjMyNkEKKzowMzAwNEIwMDAyNEUwMzVGCis6MDQ0RTAzMDA1MzkxREYzMkI2Cis6MDMwMDUzMDAwMjQ4RkE2NgorOjA2NDhGQTAwNTM5MUJGRDIyRDMyRTQKKzowMzAwNUIwMDAyNERGRDU2Cis6MDY0REZEMDA1MzkxN0ZEMjJDMzIxRAorOjAzMDA2MzAwMDI0RTA3NDMKKzowNDRFMDcwMDUzRDhGNzMyNTMKKzowMzAwMEIwMDAyNEUwRjkzCis6MDM0RTBGMDBDMjhEMzIxRgorOjAzMDAxQjAwMDI0RTEyODAKKzowMzRFMTIwMEMyOEYzMjFBCis6MDMwMDIzMDAwMjRERUY5QworOjA3NERFRjAwNTM5OEZFNTM5OEZEMzJCQQorOjAzMDAzQjAwMDI0REY2N0QKKzowNzRERjYwMDUzQzBGRTUzQzBGRDMyNjMKKzowMzAwMkIwMDAyNDgwMDg4Cis6MTA0ODAwMDBDMEUwQzBGMEMwODNDMDgyQzBEMEU4QzBFMEU5QzBFMDMyCis6MTA0ODEwMDBFQUMwRTBFQkMwRTBFQ0MwRTBFREMwRTBFRUMwRTBFRkVECis6MTA0ODIwMDBDMEUwQzJDQUMyQ0Y5MDdGOThFMDQ0MDFGMDMwMkUwM0FFCis6MTA0ODMwMDAxMjE0QTY5MDdGOThFMDU0RkVGMDUzQThGQTEyMTY2MTY1Cis6MTA0ODQwMDBEMEUwRkZEMEUwRkVEMEUwRkREMEUwRkNEMEUwRkJEMDM3Cis6MTA0ODUwMDBFMEZBRDBFMEY5RDBFMEY4RDBEMEQwODJEMDgzRDBGMDI4Cis6MDM0ODYwMDBEMEUwMzI3MworOjEwNEFBNjAwRTQ5MDc2OUJGMDkwNzY5QkUwRkYwNEYwRUY2MDA4RTBFMAorOjEwNEFCNjAwMjQwOEY4RTRGNjgwRUU5MDc2OTZFMDQ0MDRGMDQ0MDg4NAorOjEwNEFDNjAwRjA5MDgwMDNGMEU0RjUxOEQyMzVGNTBFRjUxMEQyMzZFNQorOjEwNEFENjAwNzUxMjExNzUxMzIyQzIzN0MyMzlDMjM4RjUxNkY1MTQ4QworOjBCNEFFNjAwRjUxQUY1MERDMjNCQzIzQ0MyM0QyMjk4Cis6MTAzMDAwMDA5MDdGQjZFMDIwRTEwMkMyM0REMjM2MjAzNjAyNDE2RTBBCis6MTAzMDEwMDAzMDNEMDI0MTZFOTA4MDA3RTA2MDA0RDIzNjgwMDJDMkVCCis6MTAzMDIwMDAzNjIwMzYwMjQxMkVEMjM1RTRGNTFBOTA4MDA0RTBGNUMwCis6MTAzMDMwMDAxOTc0MDgyNTBFRjhBNjE5ODUxOTE4RTUxODIwRTcwNDUzCis6MTAzMDQwMDBEMjM4ODAwMkMyMzgzMDM4MDIyMUQ0RTRGNTE2RTUxOUFFCis6MTAzMDUwMDBCNEYwMENEMjM5NzUwODA0NzUwOUYwMDUwRTgwMDIwNTJDCis6MTAzMDYwMDAxNkU1MTk2NEY3NzAzREMyMzlFNTBFMjRGRTYwMTcxNEE5Cis6MTAzMDcwMDA2MDIyMjQwMzcwMjk3NTA4MDU3NTA5RjdFNEY1MEFGNTNGCis6MTAzMDgwMDAwQjc1MEUwNDgwMjA3NTA4MDY3NTBBRjdFNEY1MEI3NUJDCis6MTAzMDkwMDAwRTA0ODAxMjc1MDgwNzc1MEJGNzc1MEUwNDgwMDcxMjcxCis6MTAzMEEwMDA0RERBODAwMjA1MTZFNTE5NTRGODY0Rjg3MDNCQzIzNTE0Cis6MTAzMEIwMDBFNTE5MjQwNzYwMEMyNEZDNjAwODI0MDUyNEY4NTAwNjU4Cis6MTAzMEMwMDA4MDA4RDIzQTgwMDZDMjNBODAwMkQyM0E3NTFBMDEyMEFDCis6MTAzMEQwMDAzQTE5OTA3RTgwNzQwRkYwQTNFNTE5RjBFNEEzRjBBM0YxCis6MTAzMEUwMDBGMDkwN0ZCNzc0MDRGMDgwMDIwNTE2MjAzOTZERTUxOTYxCis6MTAzMEYwMDA2NEY3NjA2N0U1MUE3MDYzRTUxODU0RjA2NEYwNzA1OTdFCis6MTAzMTAwMDA4NTE4MTlGNTBFRTUxOTI0MEY2MDFCMjRGRTYwMTcyNDlECis6MTAzMTEwMDBGRDYwMjIxNDYwMUYyNDA1NzAyRjc1MDgwMzA1MEU4NUJECis6MTAzMTIwMDAxODA5RDIzNzgwMjg3NTA4MDIwNTBFODUxODA5NzUxNDBDCis6MTAzMTMwMDAwMUQyMzc4MDE5NzUwODA1MDUwRTg1MTgwOUU0RjUwQUNFCis6MTAzMTQwMDBGNTBCNzUwRTAzRDIzNzgwMDUxMjREREFDMjM1MzAzNUQ2Cis6MTAzMTUwMDAwQTg1MDgxMzg1MTgxMjgwMDIwNTE2ODUxODE5RTUxNkM4Cis6MTAzMTYwMDA2NDA0NzA2MkY1MEVFNTE5NTRGMEY1MTlGNTE1ODUxODJCCis6MTAzMTcwMDAxOUU1MTUyNDcwNjAxODI0RjA2MDE0MjRGMDYwMTAyNDAwCis6MTAzMTgwMDBGMDYwMUUyNEYwNjAxQTI0RjA2MDA0MjQ2MDcwMjdFNUNCCis6MTAzMTkwMDAxNUM0NTQwRkY1MTlGNTA4MDUwRTg1MTgwOUQyMzc4MEE2Cis6MTAzMUEwMDAxQUU1MTVDNDU0MEZGNTE5RjUwODA1MEU4NTE4MDk3NUFCCis6MTAzMUIwMDAxNDAxRDIzNzgwMDUxMjREREFDMjM1MzAzNTBBODUxOTJGCis6MTAzMUMwMDAxMzg1MTgxMjgwMDIwNTE2RTUxNkQzOTQwNTQwNTcxMjkwCis6MTAzMUQwMDA0RERBODA1MjMwMzkxN0U1MEU3MDBBODUwODA5NzUwOEY2Cis6MTAzMUUwMDAwNDA1MEU4MDQxNzQwODI1MEVGOEE2MTk4MDM4MjAzNzkyCis6MTAzMUYwMDAyQUU1MEVCNDAxMEY4NTA4MEE4NTA5MEI4NTEzMDg4NTk5Cis6MTAzMjAwMDAxMjA5NzUwRTA0RTUxNEI0MDExQzg1MDgwQUU0RjUwQkQ3Cis6MTAzMjEwMDA4NTEzMDg4NTEyMDk3NTBFMDQ4MDBCRTUxNEI0MDEwNkE4Cis6MTAzMjIwMDBFNEY1MEI3NTBFMDRFNEY1MUEzMDM1MDIwNTBFRTUwRUQzCis6MTAzMjMwMDBEMzk0MDM1MDAyMDEwQkMyMzdFNEY1MEVGNTEwQzIzNkU5Cis6MTAzMjQwMDBEMjNERjUxNDc0MDgyNTEwRjhFNkZGNzQ4MDI1MTBGNUJBCis6MTAzMjUwMDA4MkU0MzQ3RUY1ODNFRkYwNzQwODI1MTBGOEU0RjYwNTc3Cis6MEYzMjYwMDAxMEU1MTBCNDA0REU5MDdGQjc3NDA0RjAwMTBCMjI2OAorOjBDNEREQTAwQzIzN0U0RjUwRUY1MTBDMjM2RjUxNDIyQzUKKzoxMDQwMDAwMEU1MTFEMzk0MDA1MDAyMjEwNjkwNzY4OUUwQzM5NDA4MEMKKzoxMDQwMTAwMDQwMDIyMTA2NzQ0MDI1MEZGNTgyRTQzNDdFRjU4M0UwRUEKKzoxMDQwMjAwMEY1MTdFNTBENjAwRTkwODAwNUU1MTdGMDkwNzY4OUUwQjQKKzoxMDQwMzAwMDA0RjAwMURBRTUxNzEyMzdGOTQwQzEwMjQwNjcwNTQwODQKKzoxMDQwNDAwMDdBMDY0MDk4MDc0MEMxMEM0MEMxMEQ0MEM3MEY0MENCRDUKKzoxMDQwNTAwMEY2NDBDQkY4NDBDQkZBNDBDQkZCNDBDQkZDNDBDQkZFNEMKKzoxMDQwNjAwMDQwQ0JGRjAwMDA0MERBOTA3RTQxRTA5MDgwMDVGMDkwNjgKKzoxMDQwNzAwMDc2ODlFMDA0RjA3NTExMDE4MDYwOTA3RTQxRTA5MDgwQzcKKzoxMDQwODAwMDA1RjA5MDdFNDJFMDkwODAwNUYwOTA3Njg5RTAwNEYwQTMKKzoxMDQwOTAwMEUwMDRGMDc1MTEwMTgwNDI5MDdFNDFFMDkwODAwNUYwQ0YKKzoxMDQwQTAwMDkwN0U0MkUwOTA4MDA1RjA5MDdFNDNFMDkwODAwNUYwQTUKKzoxMDQwQjAwMDkwNzY4OUUwMDRGMEUwMDRGMEUwMDRGMDc1MTEwMTgwRUUKKzoxMDQwQzAwMDE5RDIzQkQyM0M4MDEzRDIzQjgwMEY5MDgwMDVFNTE3N0MKKzoxMDQwRDAwMEYwOTA3Njg5RTAwNEYwNzUxMTAxMjAzQjA0MDUwRDgwMTUKKzoxMDQwRTAwMDFGMzAzQzFDOTA3RTQxRTA5MDgwMDVGMDkwN0U0MkUwQzUKKzoxMDQwRjAwMDkwODAwNUYwOTA3Njg5RTAwNEYwRTAwNEYwNzUxMTAxRkQKKzoxMDQxMDAwMDA1MEYxNTExMDEwMEU1MTE3MDEwQzIzM0Y1MERGNTBGMDMKKzowQjQxMTAwMDkwN0ZDNzc0MDRGMEMyM0JDMjNDMjI0OQorOjEwNEMyOTAwOTA3RkQ2RTAzMEU3MTJFMDQ0MDFGMDdGMTQ3RTAwMTI1NQorOjBBNEMzOTAwNEQ5RDkwN0ZENkUwNTRGRUYwMjI1RQorOjEwNEI3RjAwOTA3RkQ2RTA1NEZCRjBFMDQ0MDhGMDMwNDIwNEUwNDQ2QworOjEwNEI4RjAwMDJGMDdGREM3RTA1MTI0RDlEOTA3RkQ2RTA1NEY3RjA0QQorOjA1NEI5RjAwRTA0NDA0RjAyMkQ3Cis6MTA0RDlEMDA4RTM1OEYzNkU1MzYxNTM2QUUzNTcwMDIxNTM1NEU2MENCCis6MDc0REFEMDAwNTEyMTQ4NTgwRUUyMkJGCis6MTA0QTU1MDBFNEZFNzUxREZGNzUxRTA1NzUxRjEyQUIxREFBMUVBOTY3Cis6MTA0QTY1MDAxRjkwMDAwMTEyMzZBQjY0MDI3MDJGQ0RFRUNEMEVFRDE2Cis6MTA0QTc1MDA2RjcwMDEyMjkwMDAwMjEyMzcwRTg1RjAxQkY1MUM2MjQzCis6MTA0QTg1MDAxQkU1MUI2MjFDRTUxQzYyMUIyOUZERTUxQjNBQzlFREY0Cis6MTA0QTk1MDBDOTc1MURGRkY1MUU4OTFGODBDMTdCMDA3QTAwNzkwMDRECis6MDE0QUE1MDAyMkVFCis6MDQxNzk0MDA4RDI5OEIyQUU2Cis6MTAxNzk4MDAxMjRBNTVFQTQ5NjA1NzEyMzY5MjdFMDAyOUZGRUUzQUZFCis6MTAxN0E4MDBDOUVGQzk3NTJCRkZGNTJDODkyREFCMkJBQTJDQTkyREI4Cis6MTAxN0I4MDA5MDAwMDExMjM2QUJGRjY0MDQ2MDA1RUY2NDA1NzAyRURCCis6MTAxN0M4MDBFRkI0MDQxNTkwMDAwMjEyMzZBQjY1Mjk3MDBCOTAwMDM3Cis6MTAxN0Q4MDAwMzEyMzZBQjY1MkE3MDAxMjIxMjM2OTI3RTAwMjlGRjY5Cis6MTAxN0U4MDBFRTNBQzlFRkM5NzUyQkZGRjUyQzg5MkQ4MEJDN0IwMDFCCis6MDQxN0Y4MDA3QTAwNzkwMEZBCis6MDExN0ZDMDAyMkNBCis6MDI0N0I3MDA4RjJFNDMKKzoxMDQ3QjkwMEU0RjUyRjc1MzBGRjc1MzEwNzc1MzIxQUFCMzBBQTMxMjAKKzoxMDQ3QzkwMEE5MzI5MDAwMDExMjM2QUJCNDAzMUZBRjJGMDUyRkVGQUEKKzoxMDQ3RDkwMDY1MkU3MDAxMjIxMjM2OTI3RTAwMjlGRkVFM0FDOUVGNEEKKzoxMDQ3RTkwMEM5NzUzMEZGRjUzMTg5MzI4MEQyN0IwMDdBMDA3OTAwQjIKKzowMTQ3RjkwMDIyOUQKKzoxMDA1MDAwMDEyMDExMDAxMDAwMDAwNDA2QTA4MTEwMTAwMDEwMTAyRkYKKzoxMDA1MTAwMDAwMDEwOTAyMDgwMjA1MDEwMDgwMzIwOTA0MDAwMDAwMDAKKzoxMDA1MjAwMDAxMDEwMDAwMEEyNDAxMDAwMTU2MDAwMjAxMDIwQzI0MEUKKzoxMDA1MzAwMDAyMDEwMTAxMDAwMjAwMDAwMDAwMEQyNDA2MDUwMTAyNzUKKzoxMDA1NDAwMDAzMDAwMDAwMDAwMDAwMDkyNDAzMDIwNDAzMDAwNTAwNkEKKzoxMDA1NTAwMDBDMjQwMjAzMDUwMjAwMDYwMDAwMDAwMDE1MjQwNjA2MTQKKzoxMDA1NjAwMDAzMDIwMDAwMDMwMDAzMDAwMzAwMDMwMDAzMDAwMzAwNzQKKzoxMDA1NzAwMDAwMDkyNDAzMDQwMTAxMDAwNjAwMDkwNDAxMDAwMDAxMzAKKzoxMDA1ODAwMDAyMDAwMDA5MDQwMTAxMDIwMTAyMDAwMDA3MjQwMTAxMjgKKzoxMDA1OTAwMDAwMDEwMDExMjQwMjAxMDIwMjEwMDM0NEFDMDA4MEJCRTAKKzoxMDA1QTAwMDAwMDA3NzAxMDkwNTBBMDU4NDAxMDEwMDhGMDcyNTAxNzQKKzoxMDA1QjAwMDAxMDAwMDAwMDkwNThGMDEwMzAwMDEwNTAwMDkwNDAxODUKKzoxMDA1QzAwMDAyMDIwMTAyMDAwMDA3MjQwMTAxMDAwMTAwMTEyNDAyQkYKKzoxMDA1RDAwMDAxMDIwMzE4MDM0NEFDMDA4MEJCMDAwMDc3MDEwOTA1NDkKKzoxMDA1RTAwMDBBMDU0NjAyMDEwMDhGMDcyNTAxMDEwMDAwMDAwOTA1RTgKKzoxMDA1RjAwMDhGMDEwMzAwMDEwNTAwMDkwNDAyMDAwMDAxMDIwMDAwNTAKKzoxMDA2MDAwMDA5MDQwMjAxMDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwQTUKKzoxMDA2MTAwMDBFMjQwMjAxMDYwMjEwMDI0NEFDMDA4MEJCMDAwOTA1NTIKKzoxMDA2MjAwMDhDMDU0QzAyMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0QUUKKzoxMDA2MzAwMDAyMDIwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDAwRTI0NEYKKzoxMDA2NDAwMDAyMDEwNjAzMTgwMjQ0QUMwMDgwQkIwMDA5MDU4QzA1QkEKKzoxMDA2NTAwMDcyMDMwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDQwMjAzRTMKKzoxMDA2NjAwMDAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMDExMjQwMjAxMUQKKzoxMDA2NzAwMDAyMDIxMDAzNDRBQzAwODBCQjAwMDA3NzAxMDkwNThDMjYKKzoxMDA2ODAwMDA1ODQwMTAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNDAyQTEKKzoxMDA2OTAwMDA0MDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwMTEyNDAyRUEKKzoxMDA2QTAwMDAxMDIwMzE4MDM0NEFDMDA4MEJCMDAwMDc3MDEwOTA1NzgKKzoxMDA2QjAwMDhDMDU0NjAyMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0MjQKKzoxMDA2QzAwMDAzMDAwMDAxMDEwMDAwMDkyNDAxMDAwMTA5MDAwMTA0RTgKKzoxMDA2RDAwMDA5MDQwNDAwMDIwMTAzMDAwMDA3MjQwMTAwMDEyNDAwQjIKKzoxMDA2RTAwMDA2MjQwMjAxMDcwMDA5MjQwMzAyMDgwMTA3MDEwMDA2OEQKKzoxMDA2RjAwMDI0MDIwMjA5MDAwOTI0MDMwMTBBMDEwOTAxMDAwOTA1NzUKKzoxMDA3MDAwMDAxMDIwNDAwMDAwMDAwMDUyNTAxMDEwNzA5MDU4MTAyMUUKKzoxMDA3MTAwMDA0MDAwMDAwMDAwNTI1MDEwMTBBMDQwMzA5MDQxODAzNzAKKzoxMDA3MjAwMDQ1MDA2RDAwNjEwMDY3MDA2OTAwNjMwMDIwMDA0NzAwMUMKKzoxMDA3MzAwMDZEMDA2MjAwNDgwMDIyMDM0NTAwNkQwMDYxMDA2NzAwMDMKKzoxMDA3NDAwMDY5MDA2MzAwMjAwMDQ1MDA0RDAwNDkwMDIwMDAzNjAwOEMKKzoxMDA3NTAwMDdDMDAzMjAwMjAwMDZEMDAyQTAzNDMwMDZGMDA2RTAwMTEKKzoxMDA3NjAwMDY2MDA2OTAwNjcwMDc1MDA3MjAwNjEwMDc0MDA2OTAwMkUKKzoxMDA3NzAwMDZGMDA2RTAwMjAwMDUzMDA3NDAwNzIwMDY5MDA2RTAwNkMKKzoxMDA3ODAwMDY3MDAyMjAzNDkwMDZFMDA3NDAwNjUwMDcyMDA2NjAwNzUKKzoxMDA3OTAwMDYxMDA2MzAwNjUwMDIwMDA1MzAwNzQwMDcyMDA2OTAwNkUKKzowNjA3QTAwMDZFMDA2NzAwMDAwMDdFCis6MTAxNDg1MDA3NDAwRjU4NjkwRkRBNTdDMDVBM0U1ODI0NTgzNzBGOTdBCis6MDExNDk1MDAyMjM0Cis6MTAxNDk2MDA5MDdGRDZFMDQ0ODBGMDQzODcwMTAwMDAwMDAwMDAyMkUwCis6MTAxNEE2MDBDMEQwQzBFMDhGRTBDMEUwOEVFMEMwRTA4REUwQzBFMERDCis6MTAxNEI2MDA4Q0UwQzBFMEMwODJDMDgzMDU4NkMwODRDMDg1N0QwMDA0Cis6MTAxNEM2MDA5MDdGRTM3NDdCRjBBMzc0ODBGMDdDMTE5MDdGOTlFMEE5Cis6MTAxNEQ2MDA1NDQwREMwMzAyMTRGM0I0MDAxMzkwN0ZFMjc0NDBGMDJFCis6MTAxNEU2MDA5MDdGRTVGMDkwN0ZFMjc0MDBGMDAyMTREMjkwNzY5MDNGCis6MTAxNEY2MDBFMEI0MDExMjkwNzY4RkUwMkRGRDkwN0ZFMjc0ODBGMENCCis6MTAxNTA2MDA5MDdGNkMwMjE1NTdCNDAyMTI5MDc2OEZFMDJERkQ5MEY1Cis6MTAxNTE2MDA3RkUyNzQ4MEYwOTA3RjZDMDIxNTk2QjQwMzEyOTA3Njg5Cis6MTAxNTI2MDA4RkUwMkRGRDkwN0ZFMjc0ODBGMDkwN0Y2QzAyMTVFMUQ0Cis6MTAxNTM2MDBCNDA0MTI5MDc2OEZFMDJERkQ5MDdGRTI3NDgwRjA5MEQ3Cis6MTAxNTQ2MDA3RjZDMDIxNjEwOTA3RkUyNzQ4MEYwOTA3RjZDMDIxNjFBCis6MTAxNTU2MDA0MEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMERERjI3REI5Cis6MTAxNTY2MDAwMjA1ODY5MDdGRTI3NDAwRjA5MDdGOUJFMDU0MDRCNEZECis6MTAxNTc2MDAwMDA1MDU4NjAyMTY0MDkwN0ZFMjc0ODBGMDA1ODZGMDJECis6MTAxNTg2MDBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRERENDAyMTY0MEZDCis6MTAxNTk2MDBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMDQ1Cis6MTAxNUE2MDBGMEYwRERFQzdEMDIwNTg2OTA3RkUyNzQwMEYwOTA3RjFFCis6MTAxNUI2MDA5QkUwNTQwNEI0MDAwNTA1ODYwMjE2NDA5MDdGRTI3NDUxCis6MTAxNUM2MDA4MEYwMDU4NkYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMERBCis6MDYxNUQ2MDBGMEYwRjBGMEYwRjA2RgorOjEwMTVEQzAwRERDRTAyMTY0MEYwRjBGMEYwRERGQTdEMDIwNTg2OTBDQgorOjEwMTVFQzAwN0ZFMjc0MDBGMDkwN0Y5QkUwNTQwNEI0MDAwNTA1ODYwNAorOjEwMTVGQzAwMDIxNjQwOTA3RkUyNzQ4MEYwMDU4NkYwRjBGMEYwREQ4QQorOjEwMTYwQzAwREMwMjE2NDBGMEYwRjBGMEYwRjBEREY4N0QwMjA1ODYxQgorOjEwMTYxQzAwOTA3RkUyNzQwMEYwOTA3RjlCRTA1NDA0QjQwMDA1MDVDOQorOjEwMTYyQzAwODYwMjE2NDA5MDdGRTI3NDgwRjAwNTg2RjBGMEYwRjBCMAorOjEwMTYzQzAwRjBGMEREREE5MDdGRTI3NDAwRjBEMDg1RDA4NDA1ODY3RQorOjEwMTY0QzAwRDA4M0QwODJEMEUwRkNEMEUwRkREMEUwRkVEMEUwRkYzMworOjA1MTY1QzAwRDBFMEQwRDAyMjE3Cis6MTAxNjYxMDBDMEQwQzBFMEMwODJDMDgzOTA3NjdDRTA5MDdGNkZGMEY0Cis6MTAxNjcxMDA5MDc2N0RFMDkwN0Y2RkYwOTA3NjdFRTA5MDdGNkZGMEM2Cis6MDkxNjgxMDBEMDgzRDA4MkQwRTBEMEQwMjI0OQorOjEwMTY4QTAwQzBEMEMwRTA4RkUwQzBFMDhFRTBDMEUwQzA4MkMwODM3RQorOjEwMTY5QTAwMDU4NkMwODRDMDg1OTA3Njg3RTBGRkJGMDAwMzAyMTdFNQorOjEwMTZBQTAwMDE5MDdGOTZFMDQ0ODBGMDkwN0ZFMjc0ODBGMDkwN0YxMgorOjEwMTZCQTAwNjJFMDA1ODY5MDdGRTI3NDAwRjA5MDdGOTZFMDU0N0ZBNgorOjEwMTZDQTAwRjA5MDdGRTI3NDgwRjA5MDc2OEVFMEI0MDEwNTA1ODY5MgorOjEwMTZEQTAwMDIxNkY2QjQwMjA1MDU4NjAyMTZFQjA1ODYwMjE2RkIwQgorOjEwMTZFQTAwRTBFMEUwRTBFMEUwREZGODAyMTZGQkUwRTBFMEUwREY2NworOjEwMTZGQTAwRkE5MDdGRTI3NDAwRjBEMDg1RDA4NDA1ODZEMDgzRDAzQQorOjBDMTcwQTAwODJEMEUwRkVEMEUwRkZEMEUwRDBEMDIyODIKKzoxMDE3MTYwMEMwODJDMDgzQzBFMEU4QzBFMDc4RDFFODE0Rjg3MEZCNkUKKzowQTE3MjYwMEQwRTBGOEQwRTBEMDgzRDA4MjIyOUEKKzoxMDBDQTUwMDQxNzIwMTAxNDU3MjA1MDAwMkM5MDAwMDQ1NzIwQTAwNDIKKzoxMDBDQjUwMDAxMDIwMzA0NEQ3MjBGRDEwMEQxMDAwMDAwMDAwMDAwQjUKKzoxMDBDQzUwMDI4MjgwOTAwNEQ3MjFDMDEwMDAxMDIwMzA0MDUwNjA3Q0UKKzoxMDBDRDUwMDA4MDkwQTBCNDE3MjJFMjI0MTcyMkYyMzQxNzIzMDIwREUKKzoxMDBDRTUwMDQxNzIzMTIxNjJEMjcyM0EwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMDBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTAxMDEwMTAxNjgKKzoxMDBEODUwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNEUKKzoxMDBEOTUwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxM0UKKzoxMDBEQTUwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMkUKKzoxMDBEQjUwMDAxMDEwMTAxMDEwMTAxMDEwMjAyMDIwMjAyMDIwMjAyMTYKKzoxMDBEQzUwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyRkUKKzoxMDBERDUwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyRUUKKzoxMDBERTUwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyREUKKzoxMDBERjUwMDAyMDIwMjAyMDIwMzAzMDMwMzAzMDMwMzAzMDMwMzAzQzMKKzoxMDBFMDUwMDAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzQUQKKzoxMDBFMTUwMDAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzOUQKKzoxMDBFMjUwMDAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzOEQKKzoxMDBFMzUwMDAzMDMwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0NkYKKzoxMDBFNDUwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0NUQKKzoxMDBFNTUwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0NEQKKzoxMDBFNjUwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0M0QKKzoxMDBFNzUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MUQKKzoxMDBFODUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MEQKKzoxMDBFOTUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1RkQKKzoxMDBFQTUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNjA2RUIKKzoxMDBFQjUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2Q0QKKzoxMDBFQzUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2QkQKKzoxMDBFRDUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2QUQKKzoxMDBFRTUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNzA3MDcwODA4OTYKKzoxMDBFRjUwMDA4MDkwOTA5MEEwQTBBMEIwQjBCMEMwQzBDMEQwRDBENDAKKzoxMDBGMDUwMDBFMEUwRTBGMEYwRjEwMTAxMDExMTExMTEyMTIxMjEzRDkKKzoxMDBGMTUwMDEzMTMxNDE0MTQxNTE1MTUxNjE2MTYxNzE3MTcxODE4NzQKKzoxMDBGMjUwMDE4MTkxOTE5MTkxQTFBMUExQTFCMUIxQjFCMUMxQzFDMTgKKzoxMDBGMzUwMDFDMUQxRDFEMUQxRTFFMUUxRTFGMUYxRjFGMjAyMDIwQzgKKzoxMDBGNDUwMDIxMjEyMTIyMjIyMjIzMjMyNDI0MjUyNTI2MjYyNzI3NjEKKzoxMDBGNTUwMDI4MjgyOTI5MkEyQTJCMkIyQzJDMkQyRDJFMkUyRjJGRDQKKzoxMDBGNjUwMDMwMzAzMTMxMzIzMjMzMzMzNDM0MzUzNTM2MzYzNzM3NDQKKzoxMDBGNzUwMDM4MzgzOTM5M0EzQTNCM0MzRDNFM0Y0MDQxNDI0MzQ0OUIKKzoxMDBGODUwMDQ1NDY0NzQ4NDk0OTRBNEI0QjRDNEQ0RTRGNTA1MTUyQTcKKzoxMDBGOTUwMDUzNTQ1NTU1NTY1NjU3NTc1ODVBNUI1RDVFNUY2MTYyQjcKKzoxMDBGQTUwMDYzNjQ2NTY2Njc2ODY5NkE2QjZDNkQ2RjcxNzI3Mzc0OEIKKzoxMDBGQjUwMDc1NzY3Nzc4Nzk3QTdCN0M3RTgwMDEzNzAxMDEzODAwRjgKKzoxMDRCMjgwMEU0OTA3MjM2RjBBM0YwOTA3Rjk3RTA1NEZCRjBFNDkwQTUKKzoxMDRCMzgwMDcyMzNGMDkwNzIzMkYwOTA3MjAxMDRGMEU0OTA3MjMzQTQKKzoxMDRCNDgwMEYwOTA3MjMyRjA5MDcyMDEwNEYwOTA3Rjk3RTA0NDA0ODQKKzowMjRCNTgwMEYwMjI0OQorOjEwMzI2RjAwOTA3NjE4RTBGRjY0MDU3MDQyOTA3NUFCRTBCNDAxMTlEOQorOjEwMzI3RjAwOTA3MjM3NzQwMUYwRTQ5MDgwMjBGMDkwODAzMUYwOTBEQworOjEwMzI4RjAwODAyOEYwOTA4MDM5RjA4MDIyRTQ5MDcyMzdGMDkwNzVBQQorOjEwMzI5RjAwQURFMDkwNzIyQkYwRTAyNDgwRjBFMDkwODAyMEYwOTA3MQorOjEwMzJBRjAwODAzMUYwOTA4MDI4RjA5MDgwMzlGMEVGNjQwNjYwMDI1MgorOjEwMzJCRjAwODE5OTkwNzIzOTc0MDRGMDkwNzIzOUUwRkYyNEZFOTA3NgorOjEwMzJDRjAwNzIwNEYwRUY3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjVCRgorOjEwMzJERjAwODNFMDY0MDE3MDU0OTA3MjM2MDRGMDkwNzIwNEUwRkY0MgorOjEwMzJFRjAwMjRGRDYwMjgyNEZFNjAyNDI0MDMyNEZCNTAwNDYwMUM2QQorOjEwMzJGRjAwODE4Qzc0MjAyRkY1ODJFNDM0ODBGNTgzRTRGMDc0MjhGOAorOjEwMzMwRjAwMkZGNTgyRTQzNDgwRjU4M0U0RjA4MThDOTA3MjA0RTAzMQorOjEwMzMxRjAwRkYyNDMwRjU4MkU0MzQ4MEY1ODNFNEYwNzQzODJGRjUyMAorOjEwMzMyRjAwODJFNDM0ODBGNTgzRTRGMDgxOENFNDkwNzIzNkYwOTA3RgorOjEwMzMzRjAwNzIzOUUwNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODM5MworOjEwMzM0RjAwRTBGRjdFMDA5MDc1MENFRUYwQTNFRkYwNzAwNjkwNzIyOAorOjEwMzM1RjAwMDI3NDNCRjA5MDc1MENFMEZFQTNFMEZGNjQ4MDRFNzBBQQorOjEwMzM2RjAwMDQ5MDcyMDJGMEVGNEU3MDAyODEzNUVGNjQ4MDRFNzA2MAorOjEwMzM3RjAwMDI4MTM1RUZGOEU0OTA3NTBERjBFODkwNzUwQ0YwOTA0MAorOjEwMzM4RjAwNzIzNEUwNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODM0OQorOjEwMzM5RjAwRTBGRjkwNzIwMkYwOTA3NTBERTAyRkYwOTA3NTBDRTA0OQorOjEwMzNBRjAwMzQwMEYwRTBGRUEzRTBGRkU0RkNGRDdCRDY3QUE1Rjk0NAorOjEwMzNCRjAwRjhEMzEyMzc5NTQwMEE5MDc1MEM3NEE1RjBBMzc0RDYwNAorOjEwMzNDRjAwRjA5MDc1MERFMDI0MkFGMDkwNzUwQ0UwMzQ1QUYwRTA3RgorOjEwMzNERjAwRkVBM0UwNzgwNUNFQTJFNzEzQ0UxM0Q4RjhGRjkwNzVDMQorOjEwMzNFRjAwMENFRUYwQTNFRkYwOTA3MjJDRUVGMEEzRUZGMEQzOTQ2RAorOjEwMzNGRjAwRDJFRTY0ODA5NDgyNDAwQTkwNzIyQzc0MDJGMEEzNzQwRgorOjEwMzQwRjAwRDJGMEMzOTA3MjJDRTA2NDgwOTQ4MDUwMDRFNEYwQTM1NworOjEwMzQxRjAwRjA5MDcyMkNFMEZFQTNFMDI0M0FGNTgyRUUzNDcyRjVDMAorOjEwMzQyRjAwODNFMDkwNzIwMkYwOTA3MjA0RTBGRjI0RkQ2MDJEMjQ3RgorOjEwMzQzRjAwRkU2MDI5MjQwMzI0RkI1MDA0NjAyMTgwNDA5MDcyMDIxNworOjEwMzQ0RjAwRTBGRTc0MjAyRkY1ODJFNDM0ODBGNTgzRUVGMDc0MjhDQgorOjEwMzQ1RjAwMkZGNTgyRTQzNDgwRjU4M0VFRjA4MDIxOTA3MjAyRTA0NAorOjEwMzQ2RjAwRkY5MDcyMDRFMEZFMjQzMEY1ODJFNDM0ODBGNTgzRUZBMAorOjEwMzQ3RjAwRjA3NDM4MkVGNTgyRTQzNDgwRjU4M0VGRjA5MDcyMzlEMgorOjBCMzQ4RjAwRTAwNEYwRTA2NDBBNjAwMjQxQzcyMjg0Cis6MTAzNDlBMDA5MDc2MThFMEZGQjQwNTIzOTA3MjM3RTA3MDFEOTA3NTlFCis6MTAzNEFBMDBBREUwOTA3MjJCRjBFMDI0ODBGMEUwOTA4MDIwRjA5MDY0Cis6MTAzNEJBMDA4MDMxRjA5MDgwMjhGMDkwODAzOUYwRUY2NDA2NjAwMjQ1Cis6MTAzNENBMDBDMTkxOTA3MjM2RTA2MDAyQzE5MTkwNzY0MEUwNzAzMTBECis6MTAzNERBMDA5MDcyMDM3NDAzRjA5MDcyMDNFMEZGNzVGMDBBQTQyNDVCCis6MTAzNEVBMDBBQUY1ODJFNDM0NzVGNTgzRTBGRTkwNzIyOUUwRkRFRUQ4Cis6MTAzNEZBMDA2RDYwMEVFRkMzOTQwQTUwMDg5MDcyMDNFMDA0RjA4MEU2Cis6MTAzNTBBMDBENTkwNzIzOTc0MDRGMDkwNzY0MEUwNzAwODkwNzIwMzk2Cis6MTAzNTFBMDBFMDkwNzIzOUYwOTA3MjM5RTBGRDI0RkU5MDcyMkFGMDQwCis6MTAzNTJBMDBFRDc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzRTBGRjY1Cis6MTAzNTNBMDA3RTAwOTA3NTBDRUVGMEEzRUZGMDcwMDY5MDcyMDI3NEE0Cis6MTAzNTRBMDA4MEYwOTA3NTBDRTBGRUEzRTBGRjY0ODA0RTcwMDQ5MDVBCis6MTAzNTVBMDA3MjAyRjBFRjRFNzAwMkMxMUJFRjY0ODA0RTcwMDJDMTFFCis6MTAzNTZBMDAxQkVGRjhFNDkwNzUwREYwRTg5MDc1MENGMEVENzVGMDJFCis6MTAzNTdBMDAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzRTBGRjkwNzIwMjY0Cis6MTAzNThBMDBGMDkwNzUwREUwMkZGMDkwNzUwQ0UwMzQwMEYwRTBGRTNECis6MTAzNTlBMDBBM0UwRkZFNEZDRkQ3QkQ2N0FBNUY5RjhEMzEyMzc5NUIwCis6MTAzNUFBMDA0MDBBOTA3NTBDNzRBNUYwQTM3NEQ2RjA5MDc1MERFMERFCis6MTAzNUJBMDAyNDJBRjA5MDc1MENFMDM0NUFGMEUwRkVBM0UwNzgwNTc2Cis6MTAzNUNBMDBDRUEyRTcxM0NFMTNEOEY4RkY5MDc1MENFRUYwQTNFRjU2Cis6MTAzNURBMDBGMDkwNzIyQ0VFRjBBM0VGRjBEMzk0RDJFRTY0ODA5NEM0Cis6MTAzNUVBMDA4MjQwMEE5MDcyMkM3NDAyRjBBMzc0RDJGMEMzOTA3MkQzCis6MTAzNUZBMDAyQ0UwNjQ4MDk0ODA1MDA0RTRGMEEzRjA5MDcyMkNFMEY0Cis6MTAzNjBBMDBGRUEzRTAyNDNBRjU4MkVFMzQ3MkY1ODNFMDkwNzIwMjZBCis6MTAzNjFBMDBGMDkwNzIyQUUwRkYyNEZENjAyRDI0RkU2MDI5MjQwMzI1Cis6MTAzNjJBMDAyNEZCNTAwNDYwMjE4MDQwOTA3MjAyRTBGRTc0MjAyRjM3Cis6MTAzNjNBMDBGNTgyRTQzNDgwRjU4M0VFRjA3NDI4MkZGNTgyRTQzNEMxCis6MTAzNjRBMDA4MEY1ODNFRUYwODAyMTkwNzIwMkUwRkY5MDcyMkFFMDBBCis6MTAzNjVBMDBGRTI0MzBGNTgyRTQzNDgwRjU4M0VGRjA3NDM4MkVGNUQ5Cis6MTAzNjZBMDA4MkU0MzQ4MEY1ODNFRkYwOTA3NjQwRTA3MDA2OTA3MjQxCis6MTAzNjdBMDAzOTc0MEFGMDkwNzIzOUUwMDRGMEUwQzM5NDBBNTAwMkY3Cis6MDgzNjhBMDBBMTExRTQ5MDc2NDBGMDIyNEEKKzowNDRFMEIwMDEyMTczMDIyMjgKKzoxMDQ5QUUwMDkwNzY0Njc0ODBGMEU0QTNGMEEzRjBBM0YwQTNGMEEzRjYKKzoxMDQ5QkUwMEYwQTNGMEEzRjBBM0YwQTM3NDgwRjBFNEEzRjBBM0YwQUYKKzoxMDQ5Q0UwMEEzRjBBM0YwQTNGMEEzRjBBMzc0NDBGMEU0QTNGMEEzMkMKKzoxMDQ5REUwMDc0NDBGMEU0QTNGMEEzRjBBM0YwQTNGMEEzRjBBM0YwQ0YKKzoxMDQ5RUUwMEEzNzQ0MEYwRTRBM0YwQTM3NDQwRjBFNEEzRjBBM0YwQUEKKzowNTQ5RkUwMEEzRjBBM0YwMjI2QworOjEwMEZDNjAwRTRGRjc0NDYyRkY1ODJFNDM0NzZGNTgzRTBGRTc0MjA2MAorOjEwMEZENjAwMkZGNTgyRTQzNDgwRjU4M0VFRjA3NDRFMkZGNTgyRTQyQgorOjEwMEZFNjAwMzQ3NkY1ODNFMEZFNzQzMDJGRjU4MkU0MzQ4MEY1ODNBMQorOjA2MEZGNjAwRUVGMDBGQkYwOENDNzUKKzowMTBGRkMwMDIyRDIKKzoxMDRBRjEwMEU0RkY3NDU2MkZGNTgyRTQzNDc2RjU4M0UwRkU3NDI4RTIKKzoxMDRCMDEwMDJGRjU4MkU0MzQ4MEY1ODNFRUYwNzQ1RTJGRjU4MkU0QjQKKzoxMDRCMTEwMDM0NzZGNTgzRTBGRTc0MzgyRkY1ODJFNDM0ODBGNTgzMzIKKzowNjRCMjEwMEVFRjAwRkJGMDhDQzBFCis6MDE0QjI3MDAyMjZCCis6MTAxNzMwMDBDMDgyQzA4M0MwRTBFOEMwRTA3ODc4RTgxNEY4NzBGQkFECis6MEExNzQwMDBEMEUwRjhEMEUwRDA4M0QwODIyMjgwCis6MDMwMDQzMDAwMjQ5MDA2RgorOjEwNDkwMDAwMDIyRkU3MDAwMjNENDcwMDAyNERCNDAwMDI0QzQzMDA3NQorOjEwNDkxMDAwMDI0QkU5MDAwMjJGRkYwMDAyNEM1QjAwMDI0QzBBMDAzMAorOjEwNDkyMDAwMDI0QzcyMDAwMjRCNUEwMDAyNEM4OTAwMDI0Q0EwMDA1QgorOjEwNDkzMDAwMDI0Q0I3MDAwMjRDQ0UwMDAyNENFNTAwMDI0Q0ZDMDBEOQorOjEwNDk0MDAwMDI0RDEzMDAwMjREMkEwMDAyNEQ0MTAwMDI0RDU4MDA1NQorOjA4NDk1MDAwMDI0RDZGMDAwMjREODYwMENDCis6MTAxQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAxQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAxQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAxQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAxQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAxQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAxQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAxQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAxQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAxQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAxQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTAxQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTAxQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTAxQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTAxQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAxQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAxQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTAxQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAxQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAxQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAxQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAxQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAxQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAxRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAxRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTAxRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTAxRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAxRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTAxRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTAxRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAxRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAxRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTAxREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAxREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAxREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTAxREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTAxREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAxREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTAxRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAxRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTAxRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTAxRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTAxRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTAxRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTAxRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTAxRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAxRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTAxRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MEUxRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDFFQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDFFQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDFFREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDFFRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDFFRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDFGMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDFGMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDFGMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzowMjFGM0UwMDAwMDBBMQorOjEwMUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwMjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjBFMjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAyMzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAyMzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAyMzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAyM0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAyM0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAyM0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyM0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAyM0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAyM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAyNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAyNDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyNDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyNDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAyNDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAyNDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAyNDZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAyNDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyNDhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAyNDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyNEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAyNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAyNENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAyNERFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTAyNEVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAyNEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyNTJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyNTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyNTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyNTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAyNTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAyNTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyNThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAyNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAyNUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAyNUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAyNUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAyNURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAyNUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAyNUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAyNjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAyNjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTAyNjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTAyNjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyNjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAyNjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTAyNjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTAyNjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTAyNjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTAyNjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTAyNkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTAyNkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAyNkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTAyNkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MEUyNkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDI2RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI3MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI3MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDI3MkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDI3M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDI3NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDI3NUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDI3NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDI3N0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI3OEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDI3OUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDI3QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDI3QkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDI3Q0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDI3REMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDI3RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzowNTI3RkMwMDAwMDAwMDAwMjJCNgorOjA3MTc0QTAwOTA3RkM1NzQwMkYwMjIzQworOjEwMTc1MTAwOTA3RUMwRTA5MDc2NDVGMDkwN0VDMUUwOTA3NjQ0RjBCNgorOjEwMTc2MTAwOTA3RUMyRTA5MDc2NDNGMEI0MDAwMzAyMTc3ODkwNzY0MQorOjEwMTc3MTAwMTk3NDAzRjAwMjE3OEU5MDc2NDRFMEI0QkIwOTkwNzY5OQorOjEwMTc4MTAwMTk3NDAyRjAwMjE3OEU5MDc2MTk3NDAxRjA5MDc2NDI2NgorOjAzMTc5MTAwRTRGMDIyNUYKKzowMzAwMDAwMDAyNDZCOUZDCis6MEM0NkI5MDA3ODdGRTRGNkQ4RkQ3NTgxMzgwMjQ3MDBEOAorOjEwMzY5MjAwQkIwMTA2ODk4MjhBODNFMDIyNTAwMkU3MjJCQkZFMDIzNgorOjA5MzZBMjAwRTMyMjg5ODI4QTgzRTQ5MzIyNjkKKzoxMDM2QUIwMEJCMDEwQ0U1ODIyOUY1ODJFNTgzM0FGNTgzRTAyMjUwRDQKKzoxMDM2QkIwMDA2RTkyNTgyRjhFNjIyQkJGRTA2RTkyNTgyRjhFMjIyMUUKKzowRDM2Q0IwMEU1ODIyOUY1ODJFNTgzM0FGNTgzRTQ5MzIyMzgKKzoxMDM2RDgwMEMyRDVFQzMwRTcwOUIyRDVFNEMzOURGREU0OUNGQ0VFMEQKKzoxMDM2RTgwMDMwRTcxNUIyRDVFNEMzOUZGRkU0OUVGRTEyMzgxRkMzMkUKKzoxMDM2RjgwMEU0OURGREU0OUNGQzgwMDMxMjM4MUYzMEQ1MDdDM0U0MjkKKzowNjM3MDgwMDlGRkZFNDlFRkUyMjdCCis6MTAzNzBFMDBCQjAxMTBFNTgyMjlGNTgyRTU4MzNBRjU4M0UwRjVGMEY5Cis6MTAzNzFFMDBBM0UwMjI1MDA5RTkyNTgyRjg4NkYwMDhFNjIyQkJGRUQ2Cis6MTAzNzJFMDAwQUU5MjU4MkY4RTJGNUYwMDhFMjIyRTU4MzJBRjU4MzFDCis6MDgzNzNFMDBFOTkzRjVGMEEzRTk5MzIyRTEKKzoxMDM3NDYwMEU4OEZGMEE0Q0M4QkYwQTQyQ0ZDRTk4RUYwQTQyQ0ZDMjIKKzoxMDM3NTYwMDhBRjBFREE0MkNGQ0VBOEVGMEE0Q0RBOEYwOEJGMEE0QTAKKzoxMDM3NjYwMDJEQ0MzODI1RjBGREU5OEZGMEE0MkNDRDM1RjBGQ0VCRkYKKzoxMDM3NzYwMDhFRjBBNEZFQTlGMEVCOEZGMEE0Q0ZDNUYwMkVDRDM5QzQKKzowRjM3ODYwMEZFRTQzQ0ZDRUFBNDJEQ0UzNUYwRkRFNDNDRkMyMjMxCis6MTAzNzk1MDBFQjlGRjVGMEVBOUU0MkYwRTk5RDQyRjBFQzY0ODBDOEFCCis6MDYzN0E1MDA2NDgwOTg0NUYwMjI0QgorOjEwMzdBQjAwRUI5RkY1RjBFQTlFNDJGMEU5OUQ0MkYwRTg5QzQ1RjA3NAorOjAxMzdCQjAwMjJFQgorOjBDMzdCQzAwRUNGMEEzRURGMEEzRUVGMEEzRUZGMDIyODAKKzoxMDM3QzgwMEE4ODI4NTgzRjBEMDgzRDA4MjEyMzdERjEyMzdERjEyQzgKKzoxMDM3RDgwMDM3REYxMjM3REZFNDczRTQ5M0EzQzU4M0M1RjBDNTgzRUQKKzoxMDM3RTgwMEM4QzU4MkM4RjBBM0M1ODNDNUYwQzU4M0M4QzU4MkM4NEIKKzowMTM3RjgwMDIyQUUKKzoxMDM3RjkwMEQwODNEMDgyRjhFNDkzNzAxMjc0MDE5MzcwMERBM0EzNUYKKzoxMDM4MDkwMDkzRjg3NDAxOTNGNTgyODg4M0U0NzM3NDAyOTM2ODYwNzIKKzowNjM4MTkwMEVGQTNBM0EzODBERjcyCis6MTA0NkM1MDAwMjA3QTZFNDkzQTNGOEU0OTNBMzQwMDNGNjgwMDFGMjVFCis6MTA0NkQ1MDAwOERGRjQ4MDI5RTQ5M0EzRjg1NDA3MjQwQ0M4QzMzM0Y2Cis6MTA0NkU1MDBDNDU0MEY0NDIwQzg4MzQwMDRGNDU2ODAwMTQ2RjZERkM1Cis6MTA0NkY1MDBFNDgwMEIwMTAyMDQwODEwMjA0MDgwOTAwQzhGRTQ3RUJBCis6MTA0NzA1MDAwMTkzNjBCQ0EzRkY1NDNGMzBFNTA5NTQxRkZFRTQ5M0I5Cis6MTA0NzE1MDBBMzYwMDEwRUNGNTRDMDI1RTA2MEE4NDBCOEU0OTNBMzgwCis6MTA0NzI1MDBGQUU0OTNBM0Y4RTQ5M0EzQzhDNTgyQzhDQUM1ODNDQUFCCis6MTA0NzM1MDBGMEEzQzhDNTgyQzhDQUM1ODNDQURGRTlERUU3ODBCRTYzCis6MDEwRkM1MDAwMDJCCis6MTAzODFGMDBCQzAwMEJCRTAwMjlFRjhERjA4NEZGQURGMDIyRTRDQzhECis6MTAzODJGMDBGODc1RjAwOEVGMkZGRkVFMzNGRUVDMzNGQ0VFOURFQzU2Cis6MTAzODNGMDA5ODQwMDVGQ0VFOURGRTBGRDVGMEU5RTRDRUZEMjJFRDlDCis6MTAzODRGMDBGOEY1RjBFRTg0MjBEMjFDRkVBREYwNzVGMDA4RUYyRkU2Cis6MTAzODVGMDBGRkVEMzNGRDQwMDc5ODUwMDZENUYwRjIyMkMzOThGREQ3Cis6MDUzODZGMDAwRkQ1RjBFQTIyNzQKKzowMDAwMDAwMUZGCisvKgorVkVSU0lPTj0xLjA0LjA2MgorREFURT0xNi4xMC4yMDAyICAKKyovCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX2VtaTYyX2xvYWRlcltdID0geworICAgMywweDAwMDAsMCx7MHgwMiwweDAyLDB4ODd9LAorICAgMywweDAwNDMsMCx7MHgwMiwweDA0LDB4MDB9LAorICAxNiwweDAxMDAsMCx7MHhlNCwweGZmLDB4ZmUsMHhjMiwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDgsMHgyMCwweDkwLDB4N2YsMHhhYiwweDc0LDB4ZmYsMHhmMH0sCisgIDE2LDB4MDExMCwwLHsweDkwLDB4N2YsMHhhOSwweGYwLDB4OTAsMHg3ZiwweGFhLDB4ZjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4OTUsMHg3NCwweGMwfSwKKyAgMTYsMHgwMTIwLDAsezB4ZjAsMHg5MCwweDdmLDB4OWUsMHhmMCwweDkwLDB4N2YsMHg5OCwweGYwLDB4ZTQsMHg5MCwweDdmLDB4OTQsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDAxMzAsMCx7MHg5ZCwweDc0LDB4ZmYsMHhmMCwweDkwLDB4N2YsMHg5NywweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHg5MywweGUwLDB4NTQsMHhmY30sCisgIDE2LDB4MDE0MCwwLHsweGYwLDB4OTAsMHg3ZiwweDljLDB4NzQsMHgwMywweGYwLDB4ZTQsMHg5MCwweDdmLDB4OTYsMHhmMCwweDkwLDB4N2YsMHhhZiwweGUwfSwKKyAgMTYsMHgwMTUwLDAsezB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDBkLDB4ZjAsMHhkMiwweGFmLDB4MGYsMHhiZiwweDAwLDB4MDF9LAorICAxNiwweDAxNjAsMCx7MHgwZSwweGJlLDB4MDcsMHhmOCwweGJmLDB4MDgsMHhmNSwweDIwLDB4MjAsMHg0MiwweDc1LDB4MTQsMHgwMCwweDc1LDB4MTMsMHgwMH0sCisgIDE2LDB4MDE3MCwwLHsweDc1LDB4MTIsMHgwMCwweDc1LDB4MTEsMHgwMCwweDdmLDB4NDgsMHg3ZSwweDkyLDB4N2QsMHgwMCwweDdjLDB4MDAsMHhhYiwweDE0fSwKKyAgMTYsMHgwMTgwLDAsezB4YWEsMHgxMywweGE5LDB4MTIsMHhhOCwweDExLDB4YzMsMHgxMiwweDAzLDB4ZWQsMHg1MCwweGRiLDB4MjAsMHgyMCwweGQ4LDB4N2F9LAorICAxNiwweDAxOTAsMCx7MHgwMCwweDc5LDB4MDAsMHg3OCwweDAwLDB4ZTUsMHgxNCwweDI0LDB4MDEsMHhmNSwweDE0LDB4ZWEsMHgzNSwweDEzLDB4ZjUsMHgxM30sCisgIDE2LDB4MDFhMCwwLHsweGU5LDB4MzUsMHgxMiwweGY1LDB4MTIsMHhlOCwweDM1LDB4MTEsMHhmNSwweDExLDB4ODAsMHhjYSwweDMwLDB4MjAsMHhmZCwweDEyfSwKKyAgMTYsMHgwMWIwLDAsezB4MDEsMHhjNywweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9LAorICAgNiwweDAxYzAsMCx7MHgwMiwweGYwLDB4YzIsMHgyMCwweDgwLDB4ZTZ9LAorICAgMSwweDAxYzYsMCx7MHgyMn0sCisgIDE2LDB4MDFjNywwLHsweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg1YiwweDYwLDB4NjAsMHgyNCwweDAyLDB4NjAsMHgwMywweDAyLDB4MDIsMHg4NSwweDkwfSwKKyAgMTYsMHgwMWQ3LDAsezB4N2YsMHhlYSwweGUwLDB4NzUsMHgwYSwweDAwLDB4ZjUsMHgwYiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDBhLDB4OTB9LAorICAxNiwweDAxZTcsMCx7MHg3ZiwweGVlLDB4ZTAsMHg3NSwweDE1LDB4MDAsMHhmNSwweDE2LDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MTUsMHhlNX0sCisgIDE2LDB4MDFmNywwLHsweDE2LDB4NDUsMHgxNSwweDcwLDB4MDMsMHgwMiwweDAyLDB4ODUsMHhlNCwweDkwLDB4N2YsMHhjNSwweGYwLDB4OTAsMHg3ZiwweGI0fSwKKyAgMTYsMHgwMjA3LDAsezB4ZTAsMHgyMCwweGUzLDB4ZjksMHg5MCwweDdmLDB4YzUsMHhlMCwweGY1LDB4MGMsMHgxMiwweDAzLDB4MTMsMHhhZiwweDBjLDB4N2V9LAorICAxNiwweDAyMTcsMCx7MHgwMCwweGVmLDB4MjUsMHgwYiwweGY1LDB4MGIsMHhlZSwweDM1LDB4MGEsMHhmNSwweDBhLDB4YzMsMHhlNSwweDE2LDB4OWYsMHhmNX0sCisgIDE2LDB4MDIyNywwLHsweDE2LDB4ZTUsMHgxNSwweDllLDB4ZjUsMHgxNSwweDgwLDB4YzcsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1fSwKKyAgMTYsMHgwMjM3LDAsezB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwLDB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjV9LAorICAxNiwweDAyNDcsMCx7MHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTUsMHgxNiwweDQ1LDB4MTUsMHg2MCwweDMwLDB4ZTQsMHg5MH0sCisgIDE2LDB4MDI1NywwLHsweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjfSwKKyAgMTYsMHgwMjY3LDAsezB4MTIsMHgwMywweDJiLDB4YWYsMHgwYywweDdlLDB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjV9LAorICAxNSwweDAyNzcsMCx7MHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjUsMHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGNhLDB4YzN9LAorICAgMSwweDAyODYsMCx7MHgyMn0sCisgIDEyLDB4MDI4NywwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgyOSwweDAyLDB4MDIsMHhjZX0sCisgIDE2LDB4MDI5MywwLHsweDAyLDB4MDEsMHgwMCwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfSwKKyAgMTYsMHgwMmEzLDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9LAorICAxNiwweDAyYjMsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn0sCisgIDE2LDB4MDJjMywwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDA0LDB4NmUsMHhlNCwweDdlfSwKKyAgMTYsMHgwMmQzLDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9LAorICAxNiwweDAyZTMsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM30sCisgIDE2LDB4MDJmMywwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfSwKKyAgMTYsMHgwMzAzLDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9LAorICAxNiwweDAzMTMsMCx7MHhlNSwweDBjLDB4ZmYsMHhlNSwweDBiLDB4ZjUsMHg4MiwweGU1LDB4MGEsMHhmNSwweDgzLDB4NzUsMHg5MiwweDdlLDB4NzQsMHhjMH0sCisgICA4LDB4MDMyMywwLHsweGY4LDB4ZTIsMHgwOCwweGYwLDB4YTMsMHhkZiwweGZhLDB4MjJ9LAorICAxNiwweDAzMmIsMCx7MHg5MCwweDdmLDB4OTYsMHg4NSwweDgzLDB4OTIsMHhhOCwweDgyLDB4NzksMHgwMiwweDkwLDB4MDAsMHgwMCwweGUwLDB4YjQsMHgwMH0sCisgIDE2LDB4MDMzYiwwLHsweDBkLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg0NCwweDgwLDB4ZjAsMHhlNSwweDBjfSwKKyAgMTYsMHgwMzRiLDAsezB4ZmYsMHg5MCwweDdlLDB4YzAsMHhlMCwweGY1LDB4MjgsMHhlNCwweGEyLDB4NDcsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTJ9LAorICAxNiwweDAzNWIsMCx7MHg0NiwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQ1LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDQsMHgzM30sCisgIDE2LDB4MDM2YiwwLHsweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MywweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQyLDB4MzMsMHhmMiwweDY5fSwKKyAgMTYsMHgwMzdiLDAsezB4ZjIsMHhlNCwweGEyLDB4NDEsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MCwweDMzLDB4ZjIsMHg2OSwweGYyLDB4YTN9LAorICAgMywweDAzOGIsMCx7MHhkZiwweGMyLDB4MjJ9LAorICAxNiwweDAzOGUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg5MCwweDdmLDB4YzQsMHhlNCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3Zn0sCisgIDExLDB4MDM5ZSwwLHsweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDAzYTksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDIwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX0sCisgICA4LDB4MDNiOSwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDAzYzEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhkMH0sCisgICA2LDB4MDNkMSwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4MDNkNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MTAsMHhmMCwweGQwfSwKKyAgIDYsMHgwM2U3LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHgwM2VkLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9LAorICAgMSwweDAzZmQsMCx7MHgyMn0sCisgICAxLDB4MDNmZSwwLHsweDMyfSwKKyAgIDEsMHgwM2ZmLDAsezB4MzJ9LAorICAxNiwweDA0MDAsMCx7MHgwMiwweDAzLDB4YTksMHgwMCwweDAyLDB4MDMsMHhjMSwweDAwLDB4MDIsMHgwMywweDhlLDB4MDAsMHgwMiwweDA0LDB4NTgsMHgwMH0sCisgIDE2LDB4MDQxMCwwLHsweDAyLDB4MDMsMHhkNywweDAwLDB4MDIsMHgwMywweGZlLDB4MDAsMHgwMiwweDAzLDB4ZmYsMHgwMCwweDAyLDB4MDQsMHg4NCwweDAwfSwKKyAgMTYsMHgwNDIwLDAsezB4MDIsMHgwNCwweDg1LDB4MDAsMHgwMiwweDA0LDB4ODYsMHgwMCwweDAyLDB4MDQsMHg4NywweDAwLDB4MDIsMHgwNCwweDg4LDB4MDB9LAorICAxNiwweDA0MzAsMCx7MHgwMiwweDA0LDB4ODksMHgwMCwweDAyLDB4MDQsMHg4YSwweDAwLDB4MDIsMHgwNCwweDhiLDB4MDAsMHgwMiwweDA0LDB4OGMsMHgwMH0sCisgIDE2LDB4MDQ0MCwwLHsweDAyLDB4MDQsMHg4ZCwweDAwLDB4MDIsMHgwNCwweDhlLDB4MDAsMHgwMiwweDA0LDB4OGYsMHgwMCwweDAyLDB4MDQsMHg5MCwweDAwfSwKKyAgIDgsMHgwNDUwLDAsezB4MDIsMHgwNCwweDkxLDB4MDAsMHgwMiwweDA0LDB4OTIsMHgwMH0sCisgIDE2LDB4MDQ1OCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDgsMHhmMCwweGQwfSwKKyAgIDYsMHgwNDY4LDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHgwNDZlLDAsezB4MDIsMHgwYSwweDAwLDB4MGYsMHgwMSwweDBjLDB4MTEsMHgwNCwweDBkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MSwweDAwLDB4MDB9LAorICAgMSwweDA0N2UsMCx7MHgwMH0sCisgICA0LDB4MDQ3ZiwwLHsweDAyLDB4MTcsMHgwMCwweDAwfSwKKyAgIDEsMHgwNDgzLDAsezB4MDB9LAorICAgMSwweDA0ODQsMCx7MHgzMn0sCisgICAxLDB4MDQ4NSwwLHsweDMyfSwKKyAgIDEsMHgwNDg2LDAsezB4MzJ9LAorICAgMSwweDA0ODcsMCx7MHgzMn0sCisgICAxLDB4MDQ4OCwwLHsweDMyfSwKKyAgIDEsMHgwNDg5LDAsezB4MzJ9LAorICAgMSwweDA0OGEsMCx7MHgzMn0sCisgICAxLDB4MDQ4YiwwLHsweDMyfSwKKyAgIDEsMHgwNDhjLDAsezB4MzJ9LAorICAgMSwweDA0OGQsMCx7MHgzMn0sCisgICAxLDB4MDQ4ZSwwLHsweDMyfSwKKyAgIDEsMHgwNDhmLDAsezB4MzJ9LAorICAgMSwweDA0OTAsMCx7MHgzMn0sCisgICAxLDB4MDQ5MSwwLHsweDMyfSwKKyAgIDEsMHgwNDkyLDAsezB4MzJ9LAorICAxNiwweDExMDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn0sCisgIDE2LDB4MTExMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4MjAsMHgwMCwweDAxLDB4MDEsMHgwMywweGEwLDB4MDAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAyfSwKKyAgMTYsMHgxMTIwLDAsezB4ZmYsMHgwMCwweDAwLDB4MDQsMHgwNywweDA1LDB4ODIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHgwMiwweDAyLDB4NDB9LAorICAxNiwweDExMzAsMCx7MHgwMCwweDAwLDB4MDQsMHgwMywweDA5LDB4MDQsMHgyNiwweDAzLDB4NDEsMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4NjgsMHgwMH0sCisgIDE2LDB4MTE0MCwwLHsweDZmLDB4MDAsMHg3MiwweDAwLDB4MjAsMHgwMCwweDQzLDB4MDAsMHg2OCwweDAwLDB4NjksMHgwMCwweDcwLDB4MDAsMHg3MywweDAwfSwKKyAgMTYsMHgxMTUwLDAsezB4MmMsMHgwMCwweDIwLDB4MDAsMHg0OSwweDAwLDB4NmUsMHgwMCwweDYzLDB4MDAsMHgyZSwweDAwLDB4MjgsMHgwMywweDQ2LDB4MDB9LAorICAxNiwweDExNjAsMCx7MHg2OSwweDAwLDB4NzIsMHgwMCwweDZkLDB4MDAsMHg3NywweDAwLDB4NjEsMHgwMCwweDcyLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMH0sCisgIDE2LDB4MTE3MCwwLHsweDQ2LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDZkLDB4MDAsMHg2NSwweDAwLDB4NTcsMHgwMCwweDZmLDB4MDAsMHg3MiwweDAwfSwKKyAgMTYsMHgxMTgwLDAsezB4NmIsMHgwMCwweDczLDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4NjYsMHgwMCwweDY5LDB4MDB9LAorICAxNiwweDExOTAsMCx7MHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NzQsMHgwMCwweDY5LDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMH0sCisgIDE2LDB4MTFhMCwwLHsweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgyMiwweDAzfSwKKyAgMTYsMHgxMWIwLDAsezB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMCwweDcyLDB4MDAsMHg2NiwweDAwLDB4NjEsMHgwMCwweDYzLDB4MDB9LAorICAxNiwweDExYzAsMCx7MHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMH0sCisgICAyLDB4MTFkMCwwLHsweDAwLDB4MDB9LAorICAgMCwweDAwMDAsMSx7MH0KK307CisvKiBTb3VyY2U6IEVNSUxPQUQuSEVYIAorOjEwMDQ2RTAwMDIwQTAwMEYwMTBDMTEwNDBEMDAwMDAwMDA0MTAwMDBGMworOjAxMDQ3RTAwMDA3RAorOjEwMDFDNzAwOTA3RkU5RTAyNDVCNjA2MDI0MDI2MDAzMDIwMjg1OTA2RgorOjEwMDFENzAwN0ZFQUUwNzUwQTAwRjUwQkEzRTBGRUU0RUU0MjBBOTAyMQorOjEwMDFFNzAwN0ZFRUUwNzUxNTAwRjUxNkEzRTBGRUU0RUU0MjE1RTU5NworOjEwMDFGNzAwMTY0NTE1NzAwMzAyMDI4NUU0OTA3RkM1RjA5MDdGQjQyMQorOjEwMDIwNzAwRTAyMEUzRjk5MDdGQzVFMEY1MEMxMjAzMTNBRjBDN0VGNQorOjEwMDIxNzAwMDBFRjI1MEJGNTBCRUUzNTBBRjUwQUMzRTUxNjlGRjUzQQorOjEwMDIyNzAwMTZFNTE1OUVGNTE1ODBDNzkwN0ZFQUUwNzUwQTAwRjU3QgorOjEwMDIzNzAwMEJBM0UwRkVFNEVFNDIwQTkwN0ZFRUUwNzUxNTAwRjVCMQorOjEwMDI0NzAwMTZBM0UwRkVFNEVFNDIxNUU1MTY0NTE1NjAzMEU0OTA4RQorOjEwMDI1NzAwN0ZDNUYwOTA3RkI0RTAyMEUzRjk5MDdGQzVFMEY1MEMwRgorOjEwMDI2NzAwMTIwMzJCQUYwQzdFMDBFRjI1MEJGNTBCRUUzNTBBRjVDRAorOjBGMDI3NzAwMEFDM0U1MTY5RkY1MTZFNTE1OUVGNTE1ODBDQUMzNTcKKzowMTAyODYwMDIyNTUKKzoxMDAzQTkwMEMwRTBDMDgzQzA4MkQyMjA1MzkxRUY5MDdGQUI3NDAxMkIKKzowODAzQjkwMEYwRDA4MkQwODNEMEUwMzJDNQorOjEwMDM4RTAwQzBFMEMwODNDMDgyOTA3RkM0RTRGMDUzOTFFRjkwN0ZCMQorOjBCMDM5RTAwQUI3NDA0RjBEMDgyRDA4M0QwRTAzMkJBCis6MTAwM0MxMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDAyRjBEMDQ0Cis6MDYwM0QxMDA4MkQwODNEMEUwMzI2RgorOjEwMDNENzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQxMEYwRDAyMAorOjA2MDNFNzAwODJEMDgzRDBFMDMyNTkKKzowMTAzRkUwMDMyQ0MKKzoxMDA0NTgwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MDhGMEQwQTYKKzowNjA0NjgwMDgyRDA4M0QwRTAzMkQ3Cis6MDEwM0ZGMDAzMkNCCis6MDEwNDg0MDAzMjQ1Cis6MDEwNDg1MDAzMjQ0Cis6MDEwNDg2MDAzMjQzCis6MDEwNDg3MDAzMjQyCis6MDEwNDg4MDAzMjQxCis6MDEwNDg5MDAzMjQwCis6MDEwNDhBMDAzMjNGCis6MDEwNDhCMDAzMjNFCis6MDEwNDhDMDAzMjNECis6MDEwNDhEMDAzMjNDCis6MDEwNDhFMDAzMjNCCis6MDEwNDhGMDAzMjNBCis6MDEwNDkwMDAzMjM5Cis6MDEwNDkxMDAzMjM4Cis6MDEwNDkyMDAzMjM3Cis6MDQwNDdGMDAwMjE3MDAwMDYwCis6MTAwMTAwMDBFNEZGRkVDMjIwRDJFODQzRDgyMDkwN0ZBQjc0RkZGMDFBCis6MTAwMTEwMDA5MDdGQTlGMDkwN0ZBQUYwNTM5MUVGOTA3Rjk1NzRDMEUzCis6MTAwMTIwMDBGMDkwN0Y5RUYwOTA3Rjk4RjBFNDkwN0Y5NEYwOTA3RjI1Cis6MTAwMTMwMDA5RDc0RkZGMDkwN0Y5Nzc0QTBGMDkwN0Y5M0UwNTRGQzQzCis6MTAwMTQwMDBGMDkwN0Y5Qzc0MDNGMEU0OTA3Rjk2RjA5MDdGQUZFMDk2Cis6MTAwMTUwMDA0NDAxRjA5MDdGQUVFMDQ0MERGMEQyQUYwRkJGMDAwMTNDCis6MTAwMTYwMDAwRUJFMDdGOEJGMDhGNTIwMjA0Mjc1MTQwMDc1MTMwMDc1Cis6MTAwMTcwMDA3NTEyMDA3NTExMDA3RjQ4N0U5MjdEMDA3QzAwQUIxNEUzCis6MTAwMTgwMDBBQTEzQTkxMkE4MTFDMzEyMDNFRDUwREIyMDIwRDg3QUJDCis6MTAwMTkwMDAwMDc5MDA3ODAwRTUxNDI0MDFGNTE0RUEzNTEzRjUxMzBECis6MTAwMUEwMDBFOTM1MTJGNTEyRTgzNTExRjUxMTgwQ0EzMDIwRkQxMjNCCis6MTAwMUIwMDAwMUM3NTAwNzkwN0ZCNEUwNDQwMUYwOTA3RkI0RTA0NDYxCis6MDYwMUMwMDAwMkYwQzIyMDgwRTZGRgorOjAxMDFDNjAwMjIxNgorOjEwMTEwMDAwMTIwMTEwMDEwMDAwMDA0MDZBMDgwMTAxMDAwMTAxMDIwMworOjEwMTExMDAwMDAwMTA5MDIyMDAwMDEwMTAzQTAwMDA5MDQwMDAwMDJFRgorOjEwMTEyMDAwRkYwMDAwMDQwNzA1ODIwMjQwMDAwMDA3MDUwMjAyNDA5QworOjEwMTEzMDAwMDAwMDA0MDMwOTA0MjYwMzQxMDA2RTAwNjMwMDY4MDBGOAorOjEwMTE0MDAwNkYwMDcyMDAyMDAwNDMwMDY4MDA2OTAwNzAwMDczMDBBNworOjEwMTE1MDAwMkMwMDIwMDA0OTAwNkUwMDYzMDAyRTAwMjgwMzQ2MDA4QQorOjEwMTE2MDAwNjkwMDcyMDA2RDAwNzcwMDYxMDA3MjAwNjUwMDIwMDA2OAorOjEwMTE3MDAwNDYwMDcyMDA2MTAwNkQwMDY1MDA1NzAwNkYwMDcyMDA0QworOjEwMTE4MDAwNkIwMDczMDAyQTAzNDMwMDZGMDA2RTAwNjYwMDY5MDA2NQorOjEwMTE5MDAwNjcwMDc1MDA3MjAwNjEwMDc0MDA2OTAwNkYwMDZFMDBFNgorOjEwMTFBMDAwMjAwMDUzMDA3NDAwNzIwMDY5MDA2RTAwNjcwMDIyMDM4MworOjEwMTFCMDAwNDkwMDZFMDA3NDAwNjUwMDcyMDA2NjAwNjEwMDYzMDAwMworOjEwMTFDMDAwNjUwMDIwMDA1MzAwNzQwMDcyMDA2OTAwNkUwMDY3MDAyMworOjAyMTFEMDAwMDAwMDFECis6MTAwMzEzMDBFNTBDRkZFNTBCRjU4MkU1MEFGNTgzNzU5MjdFNzRDMDYzCis6MDgwMzIzMDBGOEUyMDhGMEEzREZGQTIyNjIKKzoxMDAzMkIwMDkwN0Y5Njg1ODM5MkE4ODI3OTAyOTAwMDAwRTBCNDAwQkEKKzoxMDAzM0IwMDBENzQwMUYwOTA3Rjk3RTA1NDdGRjA0NDgwRjBFNTBDNTIKKzoxMDAzNEIwMEZGOTA3RUMwRTBGNTI4RTRBMjQ3MzNGMjY5RjJFNEEyMDUKKzoxMDAzNUIwMDQ2MzNGMjY5RjJFNEEyNDUzM0YyNjlGMkU0QTI0NDMzODQKKzoxMDAzNkIwMEYyNjlGMkU0QTI0MzMzRjI2OUYyRTRBMjQyMzNGMjY5OTYKKzoxMDAzN0IwMEYyRTRBMjQxMzNGMjY5RjJFNEEyNDAzM0YyNjlGMkEzNTAKKzowMzAzOEIwMERGQzIyMkFDCis6MDMwMDQzMDAwMjA0MDBCNAorOjEwMDQwMDAwMDIwM0E5MDAwMjAzQzEwMDAyMDM4RTAwMDIwNDU4MDA4NworOjEwMDQxMDAwMDIwM0Q3MDAwMjAzRkUwMDAyMDNGRjAwMDIwNDg0MDA2RgorOjEwMDQyMDAwMDIwNDg1MDAwMjA0ODYwMDAyMDQ4NzAwMDIwNDg4MDA5QQorOjEwMDQzMDAwMDIwNDg5MDAwMjA0OEEwMDAyMDQ4QjAwMDIwNDhDMDA3QQorOjEwMDQ0MDAwMDIwNDhEMDAwMjA0OEUwMDAyMDQ4RjAwMDIwNDkwMDA1QQorOjA4MDQ1MDAwMDIwNDkxMDAwMjA0OTIwMDc1Cis6MDMwMDAwMDAwMjAyODc3MgorOjBDMDI4NzAwNzg3RkU0RjZEOEZENzU4MTI5MDIwMkNFRDQKKzoxMDAzRUQwMEVCOUZGNUYwRUE5RTQyRjBFOTlENDJGMEU4OUM0NUYwNjYKKzowMTAzRkQwMDIyREQKKzoxMDAyOTMwMDAyMDEwMEU0OTNBM0Y4RTQ5M0EzNDAwM0Y2ODAwMUYyODAKKzoxMDAyQTMwMDA4REZGNDgwMjlFNDkzQTNGODU0MDcyNDBDQzhDMzMzNkMKKzoxMDAyQjMwMEM0NTQwRjQ0MjBDODgzNDAwNEY0NTY4MDAxNDZGNkRGM0IKKzoxMDAyQzMwMEU0ODAwQjAxMDIwNDA4MTAyMDQwODA5MDA0NkVFNDdFNTkKKzoxMDAyRDMwMDAxOTM2MEJDQTNGRjU0M0YzMEU1MDk1NDFGRkVFNDkzMzAKKzoxMDAyRTMwMEEzNjAwMTBFQ0Y1NEMwMjVFMDYwQTg0MEI4RTQ5M0EzRjcKKzoxMDAyRjMwMEZBRTQ5M0EzRjhFNDkzQTNDOEM1ODJDOENBQzU4M0NBMjIKKzoxMDAzMDMwMEYwQTNDOEM1ODJDOENBQzU4M0NBREZFOURFRTc4MEJFRDkKKzowMTA0ODMwMDAwNzgKKzowMDAwMDAwMUZGCisvKgorVkVSU0lPTj0xLjAuMi4wMDIKK0RBVEU9MTAuMDEuMjAwMgorRU1JMjZfNjIKKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X3MuaCBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjJfZndfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjA1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X3MuaApAQCAtMCwwICsxLDg4MzcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gdGhyZWUgZGlmZmVyZW50IGZpbGVzLCBwcm92aWRlZCBieSBFbWFnaWMuCisgKi8KKy8qIGdlbmVyYXRlZCBUdWUgQXByIDE1IDIxOjU5OjQyIEVFU1QgMjAwMyAqLworCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX2VtaTYyYnNbXT17CisgezE2LCAweDgwMTAsIDAsIHsweGZmLDB4ZmYsMHhmZiwweGZmLDB4YWEsMHg5OSwweDU1LDB4NjYsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA3IH19LAorIHsxNiwgMHg4MDIwLCAwLCB7MHgzMCwweDAxLDB4NjAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDBkLDB4MzAsMHgwMSwweDIwLDB4MDEsMHgwMCwweDgwLDB4M2YsMHgyZCB9fSwKKyB7MTYsIDB4ODAzMCwgMCwgezB4MzAsMHgwMCwweGMwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDkgfX0sCisgezE2LCAweDgwNDAsIDAsIHsweDMwLDB4MDAsMHgyMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxIH19LAorIHsxNiwgMHg4MDUwLCAwLCB7MHgzMCwweDAwLDB4NDAsMHgwMCwweDUwLDB4MDAsMHg1OCwweDFhLDB4ODAsMHgxMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDQwLDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODA5MCwgMCwgezB4MDAsMHgxMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0OCB9fSwKKyB7MTYsIDB4ODBjMCwgMCwgezB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxMDAsIDAsIHsweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxMzAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTcwLCAwLCB7MHg4MCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWEwLCAwLCB7MHgwMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFlMCwgMCwgezB4N2YsMHgxMCwweDAwLDB4MzQsMHgwMCwweDBkLDB4MDAsMHgwMywweDQwLDB4MDAsMHhkMCwweDAwLDB4MzQsMHgwMCwweDA1LDB4MDAgfX0sCisgezE2LCAweDgxZjAsIDAsIHsweDA3LDB4NDAsMHgwMSwweGQwLDB4MDAsMHg3NCwweDAwLDB4MWQsMHgwMCwweDA3LDB4NDAsMHgwMSwweGQwLDB4MDAsMHg3NCwweDAwIH19LAorIHsxNiwgMHg4MjAwLCAwLCB7MHgxZCwweDgwLDB4MDcsMHhlMCwweDAxLDB4YjgsMHgwMCwweDZlLDB4MDAsMHgxYiwweDgwLDB4MDYsMHhlMCwweDAxLDB4MzgsMHgzNyB9fSwKKyB7MTYsIDB4ODIxMCwgMCwgezB4YzQsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDgwLDB4ZmIsMHgzMCwweDM2LDB4YzggfX0sCisgezE2LCAweDgyMjAsIDAsIHsweDRlLDB4MDksMHgwMywweGZjLDB4ODQsMHhmZiwweDEwLDB4M2IsMHhjMCwweDBlLDB4YzgsMHgwNywweDIyLDB4ODAsMHhmZiwweDIyIH19LAorIHsxNiwgMHg4MjMwLCAwLCB7MHgzMywweGMwLDB4MGYsMHhjOCwweDMzLDB4NmUsMHgwMCwweGZiLDB4ODAsMHgzZiwweDIwLDB4MGQsMHhjMiwweDUzLDB4ZDQsMHg4MCB9fSwKKyB7MTYsIDB4ODI0MCwgMCwgezB4Y2MsMHgzYSwweDNmLDB4MDAsMHgwYywweGYxLDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgyNTAsIDAsIHsweDgwLDB4MDAsMHhlZCwweDYwLDB4YmYsMHg2MCwweDIzLDB4ZjAsMHgwZCwweDgyLDB4MTIsMHgzYywweDYwLDB4OGYsMHg3MCwweDIzIH19LAorIHsxNiwgMHg4MjYwLCAwLCB7MHhmMCwweDA4LDB4ODgsMHgwMiwweGE1LDB4NDAsMHhiZiwweGQwLDB4NjMsMHhkNiwweDBiLDB4ODgsMHgwMiwweDJlLDB4MGMsMHhiYiB9fSwKKyB7MTYsIDB4ODI3MCwgMCwgezB4ODAsMHgyZSwweDIwLDB4ODgsMHg4ZCwweDAyLDB4ZTYsMHg0MCwweDgwLDB4NjAsMHgyZSwweDMwLDB4MGEsMHhiMSwweDEyLDB4MjAgfX0sCisgezE2LCAweDgyODAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg4MCwweGEzLDB4NDAsMHgyYywweGM0IH19LAorIHsxNiwgMHg4MjkwLCAwLCB7MHg0YSwweDAwLDB4MTIsMHg4YywweDg4LDB4YTMsMHgyMiwweDIwLDB4YzQsMHgwYSwweDkwLDB4NDIsMHgwNCwweGE5LDB4YTMsMHgwMCB9fSwKKyB7MTYsIDB4ODJhMCwgMCwgezB4MjQsMHhjOCwweDhiLDB4ODAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmUsMHgwMSwweDA5LDB4MDgsMHgwMiwweDg0LDB4MDAgfX0sCisgezE2LCAweDgyYjAsIDAsIHsweDgwLDB4MjAsMHgyYywweDEwLDB4MGEsMHgzMiwweDQyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MmMwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwNCwweGIzLDB4MDAsMHgyYSwweGMwLDB4MDgsMHgwOCwweGEyLDB4OGMsMHgwMCwweDhiLDB4MDAsMHhhMiB9fSwKKyB7MTYsIDB4ODJkMCwgMCwgezB4YzEsMHgxMCwweDk4LDB4NDIsMHhhNywweDAwLDB4YmIsMHgwMSwweDY2LDB4YzEsMHgwYiwweDgwLDB4MDIsMHhhYywweDA0LDB4YmIgfX0sCisgezE2LCAweDgyZTAsIDAsIHsweDAwLDB4MmUsMHgwMCwweDBiLDB4YjgsMHgxMiwweGU0LDB4MDIsMHg4OSwweDA4LDB4MGUsMHg0MCwweDBhLDB4YjAsMHgwMiwweDMwIH19LAorIHsxNiwgMHg4MmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGFjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ODMwMCwgMCwgezB4NGEsMHhiOCwweDIzLDB4ZWMsMHgxOCwweGViLDB4MDAsMHgzMiwweGMwLDB4MGUsMHgyYywweDEyLDB4MjIsMHgxMCwweGViLDB4MDAgfX0sCisgezE2LCAweDgzMTAsIDAsIHsweDI2LDB4YzAsMHg0ZiwweDAwLDB4NDMsMHhlZCwweDAwLDB4ZmIsMHgwMCwweDJlLDB4MjQsMHgwZCwweDgwLDB4MTMsMHhlNCwweDAwIH19LAorIHsxNiwgMHg4MzIwLCAwLCB7MHhjOCwweGQwLDB4N2MsMHgxMiwweDBlLDB4YjAsMHgwMywweDQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODMzMCwgMCwgezB4ZTEsMHgwMCwweGJjLDB4MDAsMHhmZiwweDAwLDB4MzUsMHhjMCwweDRmLDB4ZTAsMHgwMywweDdjLDB4MDgsMHhmZiwweDAxLDB4MTcgfX0sCisgezE2LCAweDgzNDAsIDAsIHsweGMyLDB4NGQsMHhjMCwweDAzLDB4ZjQsMHgwOCwweGY3LDB4MDAsMHgzYiwweGMwLDB4MDcsMHhjMCwweDAzLDB4N2MsMHg4MCwweGZmIH19LAorIHsxNiwgMHg4MzUwLCAwLCB7MHgyNCwweDNmLDB4NDAsMHgwYywweGYwLDB4MDEsMHhmNCwweDA0LDB4YmMsMHgwOCwweDNmLDB4MjgsMHgwZiwweGYwLDB4MDMsMHg3OCB9fSwKKyB7MTYsIDB4ODM2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDA4LDB4ZmIsMHgwNCwweDNhLDB4YzggfX0sCisgezE2LCAweDgzNzAsIDAsIHsweDBmLDB4OTQsMHgwMywweGVjLDB4MTAsMHhmMywweDAwLDB4MzQsMHhjMCwweDBlLDB4YjAsMHgwMywweDYxLDB4MDQsMHhmYiwweDAwIH19LAorIHsxNiwgMHg4MzgwLCAwLCB7MHgzNiwweGMwLDB4MGUsMHhhMywweDAzLDB4MmMsMHg4MCwweGZiLDB4NzIsMHgzZSwweDAyLDB4MGYsMHg4YSwweDAzLDB4ZTQsMHgwMiB9fSwKKyB7MTYsIDB4ODM5MCwgMCwgezB4YzksMHg4MCwweDJhLDB4NTAsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzYTAsIDAsIHsweGNhLDB4NDQsMHgzYywweDAwLDB4YmYsMHgwMCwweDAzLDB4YzAsMHgwOCwweDgwLDB4MDMsMHg3YywweDAwLDB4YmYsMHgwMCwweDNmIH19LAorIHsxNiwgMHg4M2IwLCAwLCB7MHhlMiwweDA4LDB4OTAsMHg0MywweDYwLDB4MDAsMHhiZiwweDAwLDB4MzcsMHhjMCwweDA4LDB4OTAsMHgwMSwweDZkLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4ODNjMCwgMCwgezB4NDAsMHgyYywweDEwLDB4MGIsMHhiMCwweDQyLDB4ZDcsMHhjMCwweDg5LDB4MDAsMHgyYSwweDdjLDB4MGIsMHhmMCwweDAyLDB4ZjIgfX0sCisgezE2LCAweDgzZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMiwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGQ1IH19LAorIHsxNiwgMHg4M2UwLCAwLCB7MHg0YSwweDAwLDB4MDAsMHgwYywweDA0LDB4OTMsMHgwMCwweDBjLDB4ZjAsMHgwYiwweDA5LDB4MDIsMHgwOCwweDAxLDB4YjMsMHgyMCB9fSwKKyB7MTYsIDB4ODNmMCwgMCwgezB4MjgsMHhjMCwweDBhLDB4MGMsMHgwYSwweDBlLDB4MDAsMHhiMywweDAwLDB4MjQsMHgzMCwweDA5LDB4MDAsMHgwMiwweGM2LDB4MTAgfX0sCisgezE2LCAweDg0MDAsIDAsIHsweDgwLDB4NDIsMHgyMCwweDAwLDB4OGIsMHhiMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NDEwLCAwLCB7MHgyMiwweDAxLDB4MWUsMHgwMCwweGI3LDB4OTQsMHgyMSwweGU0LDB4NDgsMHhkOSwweDEyLDB4NWUsMHg0MCwweGI3LDB4OTAsMHgyOSB9fSwKKyB7MTYsIDB4ODQyMCwgMCwgezB4ZTAsMHg4YiwweDY5LDB4MTIsMHhkNiwweDgwLDB4MzcsMHg4MiwweDJjLDB4ZTgsMHgwOCwweDRhLDB4MDIsMHg1ZSwweDAwLDB4YjcgfX0sCisgezE2LCAweDg0MzAsIDAsIHsweGE0LDB4MmQsMHgyMCwweDBiLDB4NzksMHgwMiwweGQ2LDB4MDgsMHg4NiwweDkwLDB4MjksMHhhMCwweDBiLDB4NzksMHgwMiwweGQ4IH19LAorIHsxNiwgMHg4NDQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDBjLDB4MDAsMHhmYiwweGEwLDB4MjgsMHhlOCB9fSwKKyB7MTYsIDB4ODQ1MCwgMCwgezB4MGUsMHgyYSwweDAyLDB4OGMsMHgwMCwweGQzLDB4MDAsMHg2NCwweGMwLDB4MGYsMHgwMCwweDQzLDB4MGUsMHhjNCwweGYzLDB4MDAgfX0sCisgezE2LCAweDg0NjAsIDAsIHsweDc4LDB4ZWMsMHgwZSwweDBhLDB4NDMsMHgwZSwweDIwLDB4NzMsMHhlMCwweDNjLDB4MDIsMHg0ZiwweDAwLDB4MDMsMHhjNCwweDQwIH19LAorIHsxNiwgMHg4NDcwLCAwLCB7MHhjMywweDAwLDB4MzgsMHhjMCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODQ4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDAwLDB4YmMsMHhjYywweDBlLDB4YjAsMHgwMywweGVjLDB4MjAsMHhmYiwweDAwLDB4M2MgfX0sCisgezE2LCAweDg0OTAsIDAsIHsweGMyLDB4MGMsMHgyMCwweDAzLDB4NmMsMHg1MCwweGYzLDB4MDAsMHgzNiwweGM0LDB4MGYsMHg0MCwweDAzLDB4ZmMsMHgwOCwweGZmIH19LAorIHsxNiwgMHg4NGEwLCAwLCB7MHgxYSwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDEsMHhlNCwweDMwLDB4ZmYsMHgwMiwweDNmLDB4YzAsMHgwZiwweGYwLDB4NjMsMHhkMCB9fSwKKyB7MTYsIDB4ODRiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhlYywweDQwLDB4ZmIsMHgwMCwweGIyLDB4ZDggfX0sCisgezE2LCAweDg0YzAsIDAsIHsweDBjLDB4YjAsMHgwMSwweDJkLDB4MjAsMHhkYiwweDAxLDB4M2EsMHhjOCwweDhjLDB4MzgsMHgwMywweGE4LDB4MDAsMHhmYiwweDQ4IH19LAorIHsxNiwgMHg4NGQwLCAwLCB7MHgzZSwweGM5LDB4MGYsMHg4MCwweDAzLDB4ZWMsMHg0MCwweGZiLDB4MDEsMHgzZSwweDAwLDB4MGYsMHgwOCwweDAzLDB4YTQsMHgwOCB9fSwKKyB7MTYsIDB4ODRlMCwgMCwgezB4ZmEsMHg4MCwweGIyLDB4ODAsMHgwZiwweGIxLDB4MDIsMHg2YSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0ZjAsIDAsIHsweDQ4LDB4MTksMHgxYywweDgwLDB4YmYsMHgzMCwweDIxLDB4Y2EsMHgwOCwweGYwLDB4MGEsMHgwYywweDgwLDB4OGYsMHg1MCwweDIxIH19LAorIHsxNiwgMHg4NTAwLCAwLCB7MHhjMiwweDA4LDB4NzAsMHg1MCwweDljLDB4MDAsMHhiNywweDAwLDB4MzksMHhjNCwweDBiLDB4NDAsMHgwMiwweDljLDB4MDQsMHhiNyB9fSwKKyB7MTYsIDB4ODUxMCwgMCwgezB4MjAsMHgyNSwweDQwLDB4MGIsMHg3MCwweDAyLDB4MTQsMHg4MCwweGI2LDB4MDAsMHgyMSwweDgwLDB4MGIsMHhmOCwweDAyLDB4MTIgfX0sCisgezE2LCAweDg1MjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGI3LDB4YjAsMHgyMSwweGVjIH19LAorIHsxNiwgMHg4NTMwLCAwLCB7MHgwYiwweDc4LDB4MTIsMHhkZSwweDg0LDB4OTcsMHg4MCwweDBkLDB4ZTAsMHgyOCwweGY4LDB4MDIsMHhkZSwweDAwLDB4YjcsMHg5MCB9fSwKKyB7MTYsIDB4ODU0MCwgMCwgezB4MmQsMHhlNCwweDBiLDB4NjgsMHg4MiwweDVlLDB4ODAsMHhiNywweGEwLDB4MjksMHgyMCwweDBiLDB4NDgsMHgwMiwweDk2LDB4MDAgfX0sCisgezE2LCAweDg1NTAsIDAsIHsweGI3LDB4ODAsMHgyMSwweGUxLDB4MGIsMHg3YSwweDAyLDB4NzAsMHg0MCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NTYwLCAwLCB7MHg0OCwweDA0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzOCwweDAyLDB4OGMsMHgwNCwweDgzLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4ODU3MCwgMCwgezB4YzAsMHg4OCwweDM5LDB4MDIsMHg0YywweDQwLDB4YjMsMHgwNCwweDI4LDB4YzAsMHgxYiwweDEwLDB4MDIsMHg4YywweDAxLDB4YjMgfX0sCisgezE2LCAweDg1ODAsIDAsIHsweDA0LDB4MjQsMHg4OCwweDRiLDB4MzEsMHgwMiwweDA0LDB4MDAsMHhiMywweDgwLDB4MjAsMHhmMiwweDBiLDB4MzAsMHgwMiwweDAyIH19LAorIHsxNiwgMHg4NTkwLCAwLCB7MHgyNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4ODVhMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4ZTgsMHgwMCwweGRhLDB4MDEsMHgzYSwweDgwLDB4OGMsMHhlZCwweDAzLDB4ZmIsMHgwNCwweGZhLDB4MDAgfX0sCisgezE2LCAweDg1YjAsIDAsIHsweDNlLDB4ODAsMHgwZiwweDZjLDB4MDMsMHhmYiwweGM4LDB4YmUsMHhjMiwweDFmLDB4ODAsMHgwZiwweGU1LDB4MDMsMHhhOCwweDAwIH19LAorIHsxNiwgMHg4NWMwLCAwLCB7MHhmZSwweDQ4LDB4MzMsMHg4MCwweDRmLDB4YTAsMHgwMywweDdhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODVkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2MsMHgwMCwweDBjLDB4ODEsMHg5MywweDYwLDB4MDAsMHhmOCwweDAxLDB4MzYgfX0sCisgezE2LCAweDg1ZTAsIDAsIHsweDEwLDB4MGYsMHg4MCwweDAzLDB4YTAsMHgyMCwweGY4LDB4MDAsMHgyYSwweDAxLDB4OGYsMHg4NCwweDEzLDB4ZTEsMHgwMCwweGY4IH19LAorIHsxNiwgMHg4NWYwLCAwLCB7MHgxOCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgyMCwweDNlLDB4MTQsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ODYwMCwgMCwgezB4ODAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNCwweDAwLDB4ZjEsMHgwMCwweGFhLDB4NDAgfX0sCisgezE2LCAweDg2MTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhlMSwweDAwLDB4MzgsMHg0MCwweDFjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweGEwIH19LAorIHsxNiwgMHg4NjIwLCAwLCB7MHgzYSwweDQwLDB4NDcsMHg5YSwweDkzLDB4YTIsMHg4MCwweGY4LDB4MTAsMHgzZSwweDQwLDB4MGIsMHg5NCwweDAzLDB4ZTYsMHg0MCB9fSwKKyB7MTYsIDB4ODYzMCwgMCwgezB4ZjksMHhjMCwweDNlLDB4NjgsMHgwYiwweDEwLDB4MDMsMHgwMiwweDg0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2NDAsIDAsIHsweDgwLDB4MDQsMHhlNCwweDA0LDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA0LDB4ODksMHgwMCwweDM2IH19LAorIHsxNiwgMHg4NjUwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDQsMHhiOSwweDgwLDB4MmUsMHg0MCwweDRmLDB4OTQsMHgwMywweDYxLDB4MTAsMHhlOCB9fSwKKyB7MTYsIDB4ODY2MCwgMCwgezB4NDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQyLDB4ZTYsMHgwNCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MjAgfX0sCisgezE2LCAweDg2NzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA0LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwIH19LAorIHsxNiwgMHg4NjgwLCAwLCB7MHgwYSwweDEwLDB4NTIsMHgwNCwweDA0LDB4YTksMHgwNCwweDJhLDB4NDAsMHgwOCwweGIwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwMCB9fSwKKyB7MTYsIDB4ODY5MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGE4LDB4MGQsMHhiOCwweDQwLDB4MmUsMHg0MCwweDA5LDB4OTQsMHgwMiwweGU1LDB4MDAgfX0sCisgezE2LCAweDg2YTAsIDAsIHsweGI5LDB4MDQsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NmIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGIxLDB4MjAsMHgyMCwweGM4LDB4MGEsMHgxMCwweDQyLDB4MDQsMHg5MCwweDgxLDB4MjAsMHgwNCB9fSwKKyB7MTYsIDB4ODZjMCwgMCwgezB4YzgsMHgwOCwweDMwLDB4MjYsMHhjNCwweDAwLDB4YjEsMHgyMCwweDJjLDB4NDgsMHgwYiwweDkwLDB4MDIsMHg0NSwweDAxLDB4YjEgfX0sCisgezE2LCAweDg2ZDAsIDAsIHsweDQwLDB4MmMsMHg0MCwweDBiLDB4MTIsMHg4MiwweGM0LDB4MDAsMHhiMSwweDJiLDB4MmMsMHg0YSwweDBiLDB4MTIsMHg4MiwweDAyIH19LAorIHsxNiwgMHg4NmUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwOCwweDIxLDB4NDgsMHhmOCwweDUwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4ODZmMCwgMCwgezB4NGUsMHg4NSwweDBiLDB4MjEsMHg0MCwweGE4LDB4NTIsMHgyYSwweDAwLDB4MDgsMHg4MCwweDIzLDB4ZTEsMHg0MCwweGY4LDB4MDAgfX0sCisgezE2LCAweDg3MDAsIDAsIHsweDNhLDB4MTQsMHgwZiwweGEwLDB4NDMsMHhhOCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgyLDB4MDMsMHhlMCwweDAwIH19LAorIHsxNiwgMHg4NzEwLCAwLCB7MHhmMCwweDIwLDB4M2UsMHg4OCwweDRmLDB4ODIsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODcyMCwgMCwgezB4OTgsMHgxOSwweGU0LDB4NDAsMHhmOSwweDExLDB4MzQsMHg0NCwweDJkLDB4ZDAsMHgwMywweGU0LDB4NTAsMHg3OSwweDEwLDB4MzggfX0sCisgezE2LCAweDg3MzAsIDAsIHsweDQ0LDB4MmYsMHhkMCwweDAzLDB4ZjUsMHgxMCwweGY5LDB4MTAsMHgzZSwweDQ1LDB4MDYsMHg1MCwweDAzLDB4ZTUsMHgwMCwweGU5IH19LAorIHsxNiwgMHg4NzQwLCAwLCB7MHg0MCwweDNmLDB4NDAsMHgwZiwweGQwLDB4NDMsMHhmNSwweDAwLDB4ZmQsMHgyOCwweDNmLDB4NDAsMHgwZiwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4ODc1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDEsMHhlNiwweDAwLDB4ZDksMHg5MCwweDM3LDB4NjkgfX0sCisgezE2LCAweDg3NjAsIDAsIHsweDRkLDB4OTAsMHgyMywweDY3LDB4ODAsMHhkOSwweGUwLDB4MzcsMHg2OCwweDBlLDB4ZDAsMHgwNywweGE0LDB4MDAsMHgwNSwweDg2IH19LAorIHsxNiwgMHg4NzcwLCAwLCB7MHgzZSwweDY2LDB4MGQsMHg1MCwweDIzLDB4MjYsMHgwMCwweGM5LDB4ODIsMHgzZCwweDQwLDB4MGQsMHhkOCwweDA3LDB4MzYsMHgwMiB9fSwKKyB7MTYsIDB4ODc4MCwgMCwgezB4Y2QsMHhjMCwweDMzLDB4NjAsMHgwYywweDljLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg3OTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDgwLDB4ODgsMHhhMiwweDIyLDB4MTAsMHgyOCwweDhhLDB4ODIsMHgyMywweDg0LDB4ODgsMHhhMCwweDIyIH19LAorIHsxNiwgMHg4N2EwLCAwLCB7MHgxNCwweDQ4LDB4ODAsMHg0MiwweDgyLDB4MDAsMHg4OCwweDQwLDB4MmUsMHgzMCwweDA4LDB4ODAsMHgwMiwweGEyLDB4MDAsMHhkOCB9fSwKKyB7MTYsIDB4ODdiMCwgMCwgezB4OTAsMHgyNiwweDAwLDB4MDgsMHg4NCwweDBhLDB4MjEsMHgwMCwweGM4LDB4YTAsMHhhMiwweDE0LDB4MjgsMHg4YywweDAyLDB4MGUgfX0sCisgezE2LCAweDg3YzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgyMCwweDkxLDB4NDAsMHgyYywweDQ0IH19LAorIHsxNiwgMHg4N2QwLCAwLCB7MHgxOCwweDEwLDB4MDIsMHg4NSwweDA0LDB4YjEsMHg0MCwweDBjLDB4NDAsMHgwYSwweDEwLDB4MDYsMHg4NCwweDMwLDB4ODEsMHg0MCB9fSwKKyB7MTYsIDB4ODdlMCwgMCwgezB4MmMsMHg0OCwweDU5LDB4MTAsMHgxYSwweDA0LDB4NjAsMHg4MSwweDA5LDB4MmUsMHg0MCwweDFiLDB4MTQsMHgwMiwweDI1LDB4MDAgfX0sCisgezE2LCAweDg3ZjAsIDAsIHsweDkxLDB4ZTAsMHgyMCwweDYwLDB4MDgsMHgxNiwweDAyLDB4MDAsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ODAwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDgxLDB4MDAsMHgyYSwweDQxLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgwMCwweGExLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ODgxMCwgMCwgezB4NDEsMHgwOCwweGIwLDB4ODIsMHgyNCwweDExLDB4OGIsMHgwMCwweDJlLDB4NDAsMHgxOCwweDkxLDB4MDIsMHhhMCwweDA0LDB4OTggfX0sCisgezE2LCAweDg4MjAsIDAsIHsweDIwLDB4MmUsMHg1NCwweDFiLDB4OTAsMHg4MiwweDJjLDB4MDAsMHg4OSwweDEwLDB4MjIsMHg0NCwweDg4LDB4OTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHg4ODMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ODg0MCwgMCwgezB4NGMsMHg5MCwweDAzLDB4YTQsMHgxMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4OGUsMHgxMCwweDAyLDB4YTQsMHhjMiwweGM5LDB4MDAgfX0sCisgezE2LCAweDg4NTAsIDAsIHsweDNlLDB4NDAsMHgwZCwweDE2LDB4MTMsMHgwMSwweDg0LDB4YzgsMHgyMCwweDNjLDB4NjAsMHgwZiwweDkwLDB4MTIsMHgwNCwweDAwIH19LAorIHsxNiwgMHg4ODYwLCAwLCB7MHhkOSwweDQwLDB4MzIsMHg1MCwweDBjLDB4OTAsMHgwMywweDI4LDB4ODQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODg3MCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDRmLDB4OTksMHg0YSwweDQ0LDB4MDAsMHg5OSwweDAwLDB4YjQgfX0sCisgezE2LCAweDg4ODAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDEzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTMsMHgwMCwweGY4IH19LAorIHsxNiwgMHg4ODkwLCAwLCB7MHgwMSwweDM2LDB4NDAsMHgwYywweDk5LDB4MDMsMHhlNCwweDAyLDB4ZjksMHg4MCwweDNlLDB4NjAsMHg0ZiwweDkwLDB4MGIsMHhjYSB9fSwKKyB7MTYsIDB4ODhhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMCwweDNjLDB4MDAgfX0sCisgezE2LCAweDg4YjAsIDAsIHsweDFkLDB4ODAsMHgwMywweDIwLDB4MDAsMHhlOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODQsMHg4MywweGUwLDB4MTAsMHhlOCwweDIwIH19LAorIHsxNiwgMHg4OGMwLCAwLCB7MHgzMiwweDAwLDB4OGUsMHg4NCwweDAzLDB4MjEsMHg4MCwweGM4LDB4MDAsMHgzYSwweDE5LDB4MGYsMHgwNCwweDAzLDB4ZTAsMHgyNCB9fSwKKyB7MTYsIDB4ODhkMCwgMCwgezB4ZjAsMHgwMiwweDNjLDB4MDAsMHgwZiwweDgwLDB4MTMsMHg4YSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4ZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAyLDB4OGEsMHgwMSwweDBmLDB4YTIsMHg2OCwweGEwLDB4MDAsMHgyOCwweDAwLDB4OGEsMHgwMCwweDc3IH19LAorIHsxNiwgMHg4OGYwLCAwLCB7MHg4MCwweDY4LDB4ZTAsMHgxMiwweGU4LDB4MDAsMHhkZSwweDAwLDB4MzYsMHg4MSwweDA4LDB4ZTAsMHgwMywweDdhLDB4MDgsMHhhZSB9fSwKKyB7MTYsIDB4ODkwMCwgMCwgezB4YzQsMHgyZiwweDgwLDB4MDgsMHhlZCwweDAyLDB4ZmEsMHgwMCwweGJlLDB4YTAsMHgzYiwweDgwLDB4MGIsMHhhMCwweDQyLDB4MGEgfX0sCisgezE2LCAweDg5MTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDg1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHgyYywweGMwIH19LAorIHsxNiwgMHg4OTIwLCAwLCB7MHg4OCwweGIwLDB4MDIsMHgwYywweDE0LDB4YTMsMHgwNCwweDIwLDB4YzQsMHgxOCwweDM4LDB4MDIsMHhlYywweDEwLDB4OTMsMHg1NCB9fSwKKyB7MTYsIDB4ODkzMCwgMCwgezB4MjgsMHhjMCwweDBhLDB4MDAsMHgwMiwweDRlLDB4MDAsMHg4MywweDQ5LDB4NjgsMHhjMCwweDAyLDB4MzksMHg0MiwweGNlLDB4NDAgfX0sCisgezE2LCAweDg5NDAsIDAsIHsweGIzLDB4MDAsMHgyYywweGU2LDB4MGIsMHhiMCwweDAyLDB4OGIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OTUwLCAwLCB7MHgyMCwweDAxLDB4MWMsMHgwOCwweDg3LDB4MjAsMHgyYywweDgwLDB4MTgsMHhmMiwweDIyLDB4MWMsMHgwMCwweDg3LDB4MTAsMHgyMSB9fSwKKyB7MTYsIDB4ODk2MCwgMCwgezB4YzAsMHgwOCwweDcwLDB4ODIsMHhkYywweDgwLDB4OTYsMHg4MCwweDJkLDB4YzAsMHgwYSwweDQwLDB4MDIsMHg3ZCwweDQwLDB4MjcgfX0sCisgezE2LCAweDg5NzAsIDAsIHsweDY0LDB4NmQsMHhkMCwweDQ4LDB4NjAsMHg0MiwweGQ4LDB4MDUsMHhiNiwweDA0LDB4MjksMHhjMCwweDRiLDB4NzIsMHgwMiwweDI4IH19LAorIHsxNiwgMHg4OTgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwOCwweDNlLDB4ODgsMHhkNywweGUwLDB4M2QsMHhlMCB9fSwKKyB7MTYsIDB4ODk5MCwgMCwgezB4MDgsMHg3YywweDQyLDB4M2UsMHgwMCwweGUzLDB4ODIsMHgyMCwweGUwLDB4MGMsMHg2OCwweDAzLDB4ZGYsMHgwNCwweGQ3LDB4ODAgfX0sCisgezE2LCAweDg5YTAsIDAsIHsweDNiLDB4ZTAsMHg0ZSwweDQ4LDB4MGEsMHg1ZSwweDgwLDB4YzcsMHhjMiwweDE5LDB4ZTAsMHgwZSwweDc4LDB4MDMsMHhkNiwweDA4IH19LAorIHsxNiwgMHg4OWIwLCAwLCB7MHhmNywweDgwLDB4M2QsMHhlMCwweDBmLDB4ZjgsMHgwMywweGFhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODljMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4NDAsMHhmYiwweDQwLDB4N2UsMHg4MCwweDBlLDB4MzYsMHg4MywweGVkLDB4NDAsMHhkYiwweDYwLDB4M2UgfX0sCisgezE2LCAweDg5ZDAsIDAsIHsweDgwLDB4MGYsMHhhMCwweDAzLDB4ZWQsMHgyOCwweGRhLDB4MDAsMHgzMiwweGM0LDB4MGMsMHhiMCwweDBiLDB4Y2MsMHgwMCwweGZiIH19LAorIHsxNiwgMHg4OWUwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZSwweDgwLDB4MTMsMHhlMCwweDEwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGIxLDB4NTMsMHhjMiB9fSwKKyB7MTYsIDB4ODlmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHhjMCwweDMzLDB4ZTAgfX0sCisgezE2LCAweDhhMDAsIDAsIHsweDBjLDB4ZjksMHgwMywweDdmLDB4MDQsMHhjZiwweGQwLDB4M2YsMHhlNCwweDBmLDB4YjgsMHgwMywweGZlLDB4MDAsMHhmZiwweDk0IH19LAorIHsxNiwgMHg4YTEwLCAwLCB7MHgzZiwweGUwLDB4MGYsMHhjOCwweDAzLDB4N2UsMHgxMCwweGYzLDB4ODAsMHgzYiwweGUwLDB4MGYsMHhmOCwweDAzLDB4ZmUsMHg0OCB9fSwKKyB7MTYsIDB4OGEyMCwgMCwgezB4ZWQsMHg4MCwweDMzLDB4MjQsMHgwNCwweGY4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhMzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDgwLDB4YmYsMHgwNCwweDIxLDB4MjgsMHgwOCwweGY4LDB4MDIsMHgxZSwweGMwLDB4Y2YsMHg5MCwweDIxIH19LAorIHsxNiwgMHg4YTQwLCAwLCB7MHg0YywweDBiLDB4NWEsMHg0MiwweGRlLDB4MDAsMHhiNywweDgwLDB4MmMsMHhlOCwweDBiLDB4MDQsMHgwMiwweDFjLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4OGE1MCwgMCwgezB4YTAsMHgzNSwweDEwLDB4OGYsMHg3MSwweDEzLDB4ZGUsMHhjMCwweDg0LDB4MTAsMHgyMSwweDgwLDB4MGQsMHg3MSwweDAyLDB4MmEgfX0sCisgezE2LCAweDhhNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDQwLDB4OWMsMHgwOCwweGI3LDB4MDAsMHgyNSwweGM4IH19LAorIHsxNiwgMHg4YTcwLCAwLCB7MHgwOCwweDcxLDB4MDIsMHhjYywweDgwLDB4OTcsMHgwMCwweDI5LDB4YzAsMHg4YiwweDcyLDB4MDYsMHhkYywweDA4LDB4YjUsMHgwMCB9fSwKKyB7MTYsIDB4OGE4MCwgMCwgezB4MmQsMHhjOCwweDBiLDB4NDAsMHgwMiwweDFjLDB4NDAsMHhiZiwweDEwLDB4MjEsMHhjMCwweDBiLDB4NzQsMHgwMiwweGQ0LDB4ODAgfX0sCisgezE2LCAweDhhOTAsIDAsIHsweGE3LDB4NDAsMHgyMSwweDQxLDB4MDgsMHg3MCwweDAyLDB4MDQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YWEwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyNCwweDAwLDB4MDgsMHgzNCwweDgyLDB4YWMsMHgxMSwweDgzLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4OGFiMCwgMCwgezB4MDAsMHg0YiwweDE4LDB4MjYsMHhjZiwweDIwLDB4YjEsMHgwNiwweDJjLDB4YzEsMHgwYiwweDMyLDB4MDIsMHgwZSwweDA4LDB4YjMgfX0sCisgezE2LCAweDhhYzAsIDAsIHsweDg4LDB4MjQsMHgzMiwweDBhLDB4MzAsMHgxMiwweDg0LDB4MDgsMHg4MCwweDAwLDB4YTAsMHgzNCwweDI4LDB4MzAsMHgwMiwweDE4IH19LAorIHsxNiwgMHg4YWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4YjYsMHg0MCB9fSwKKyB7MTYsIDB4OGFlMCwgMCwgezB4MmMsMHhmNCwweDQzLDB4ZmMsMHgwMSwweGRmLDB4MDAsMHgzYSwweDAwLDB4MDMsMHg5MiwweDAzLDB4ZmYsMHg4OCwweGY5LDB4MDAgfX0sCisgezE2LCAweDhhZjAsIDAsIHsweDJmLDB4YzAsMHgxYiwweDBlLDB4NGIsMHgyZSwweDkwLDB4ZmIsMHhlMCwweDMwLDB4MzIsMHgwYiwweDk4LDB4MDIsMHhlYywweDA4IH19LAorIHsxNiwgMHg4YjAwLCAwLCB7MHg2YiwweGMwLDB4MzIsMHhjMCwweDA4LDB4ZjAsMHgwOSwweDNlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGIxMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmMywweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMSwweDZjLDB4MDAsMHhmYiwweDAwLDB4M2EgfX0sCisgezE2LCAweDhiMjAsIDAsIHsweDEwLDB4MGYsMHhiNCwweDAzLDB4ZWMsMHgwMCwweGYwLDB4MDAsMHgzYywweGMwLDB4MGYsMHg4MCwweDBiLDB4YWQsMHgyMCwweGZiIH19LAorIHsxNiwgMHg4YjMwLCAwLCB7MHg0MCwweDNlLDB4MTAsMHgwNywweGE4LDB4NjMsMHhlMCwweDAwLDB4ZmIsMHg4MCwweDNlLDB4ZDgsMHgwZiwweGIwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4OGI0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDcyLDB4MDAgfX0sCisgezE2LCAweDhiNTAsIDAsIHsweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4YzAsMHgwMywweGRjLDB4MDAsMHg4ZiwweDAwIH19LAorIHsxNiwgMHg4YjYwLCAwLCB7MHgzMywweGMxLDB4MGMsMHhjMCwweDAzLDB4YmUsMHgwMCwweGZmLDB4OTAsMHgzYiwweDI4LDB4MGUsMHg1OSwweDAzLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4OGI3MCwgMCwgezB4N2IsMHgwMCwweDMyLDB4YzQsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiODAsIDAsIHsweGMxLDB4MDQsMHg2YywweDAwLDB4YmIsMHgwMCwweDYyLDB4YTAsMHgwZiwweGIwLDB4MDIsMHhlYywweDA5LDB4OGIsMHgwMCwweDJlIH19LAorIHsxNiwgMHg4YjkwLCAwLCB7MHgzMCwweDBiLDB4YTgsMHgwMywweGFjLDB4MDAsMHhmYSwweGMxLDB4MjIsMHhjMSwweDA4LDB4OGMsMHgwMiwweDJjLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4OGJhMCwgMCwgezB4ODEsMHgyYSwweDAwLDB4MGQsMHg4OCwweGIyLDB4MjIsMHgwMCwweGIzLDB4YzAsMHgyMiwweGM4LDB4MGIsMHhiMCwweDQyLDB4NjEgfX0sCisgezE2LCAweDhiYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4NmMsMHgwMCwweGJiLDB4MDEsMHgyMiwweDYyIH19LAorIHsxNiwgMHg4YmMwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHhlYywweDA0LDB4OGIsMHgwMCwweDJlLDB4YTIsMHg0OSwweDg4LDB4MjYsMHhlYywweDAwLDB4YTgsMHg4MCB9fSwKKyB7MTYsIDB4OGJkMCwgMCwgezB4MjIsMHhjMCwweDI4LDB4ODIsMHgwYSwweGFjLDB4YTAsMHhiYiwweDA4LDB4MjIsMHhjMCwweDA4LDB4ODAsMHgwYSwweDI4LDB4ODQgfX0sCisgezE2LCAweDhiZTAsIDAsIHsweGI5LDB4YzAsMHhhMiwweDAwLDB4MGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YmYwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MTAsMHgyMCwweDQ4LDB4MGEsMHgzMiwweDAyLDB4Y2MsMHg4MCwweDgzLDB4MDEsMHgyNCB9fSwKKyB7MTYsIDB4OGMwMCwgMCwgezB4MDAsMHgwYiwweDAyLDB4MDYsMHg4YywweDYwLDB4YTAsMHgyMCwweDIwLDB4YzgsMHgwOCwweDAxLDB4MDIsMHgwYywweDAwLDB4YjMgfX0sCisgezE2LCAweDhjMTAsIDAsIHsweDAwLDB4MjgsMHgwMCwweDA5LDB4MjAsMHgwMiwweDA4LDB4ODAsMHhiMSwweDAwLDB4YTAsMHg4MCwweDBiLDB4MzAsMHgwMiwweDQyIH19LAorIHsxNiwgMHg4YzIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDZjLDB4MDAsMHhmZiwweDAwLDB4YTIsMHgwZSB9fSwKKyB7MTYsIDB4OGMzMCwgMCwgezB4MGIsMHhmMSwweDAzLDB4ZmMsMHgwOCwweGNmLDB4MjAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZmMsMHg4NCwweGE4LDB4MjAgfX0sCisgezE2LCAweDhjNDAsIDAsIHsweGIyLDB4YzgsMHg4YywweDgwLDB4MDMsMHhhYywweDQ0LDB4ZmIsMHg3MCwweDNhLDB4YzAsMHgwZSwweDkwLDB4MDMsMHgyYywweGE0IH19LAorIHsxNiwgMHg4YzUwLCAwLCB7MHhmYiwweDAwLDB4YjIsMHg0MCwweDBmLDB4YjAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGM2MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmZiwweDI2LDB4M2UsMHgwMCwweDBmLDB4YjYsMHgxMywweGVkLDB4MDAsMHhmYiwweDEwLDB4M2YgfX0sCisgezE2LCAweDhjNzAsIDAsIHsweDAwLDB4MGYsMHhjMSwweDEzLDB4YWMsMHg4MCwweGY4LDB4MTIsMHgzZSwweGM2LDB4NGYsMHg0MiwweDQzLDB4ZmMsMHgwNCwweGZmIH19LAorIHsxNiwgMHg4YzgwLCAwLCB7MHgzMSwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhlYywweDAwLDB4ZmYsMHgwMCwweGJmLDB4YzAsMHg4ZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4OGM5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDQwLDB4ZmMsMHg4MCwweDM2LDB4YzggfX0sCisgezE2LCAweDhjYTAsIDAsIHsweDBmLDB4MDksMHgwMywweGMyLDB4MDAsMHhmOCwweGMwLDB4MzMsMHhjYywweDJjLDB4NGMsMHgwMywweDYzLDB4OTAsMHhlMCwweDkwIH19LAorIHsxNiwgMHg4Y2IwLCAwLCB7MHgzYSwweGMwLDB4MGQsMHg1MCwweDBiLDB4M2MsMHgwNCwweGRmLDB4NjQsMHgzZiwweGM4LDB4OGQsMHhmMSwweDQzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OGNjMCwgMCwgezB4ZDUsMHgwMCwweDMzLDB4YzAsMHg0NSwweGYyLDB4MjMsMHg3MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjZDAsIDAsIHsweDgwLDB4MTAsMHhlZCwweDgwLDB4YmEsMHgwMiwweDIxLDB4ZGUsMHg4YiwweDgyLDB4MjIsMHhlMCwweDIwLDB4YjAsMHgwMCwweDJiIH19LAorIHsxNiwgMHg4Y2UwLCAwLCB7MHhlYywweDA5LDB4ODAsMHgwMiwweGUzLDB4NDAsMHhiYSwweDIwLDB4MmYsMHhkYywweDA4LDB4OTgsMHgxMiwweDJjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4OGNmMCwgMCwgezB4NTEsMHgyYSwweGQwLDB4MDgsMHg3MiwweDIyLDB4MmUsMHgwMCwweDhkLDB4ODAsMHgyMSwweGQwLDB4MDgsMHhiNiwweDgyLDB4MjAgfX0sCisgezE2LCAweDhkMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg0MCwweGI5LDB4MjgsMHgyNCwweGMwIH19LAorIHsxNiwgMHg4ZDEwLCAwLCB7MHg0YSwweDEyLDB4MTIsMHg4OCwweDg1LDB4YTgsMHgyMCwweDIwLDB4YzAsMHgwYiwweDIyLDB4MDIsMHhjMCwweDkxLDB4YTEsMHgwMCB9fSwKKyB7MTYsIDB4OGQyMCwgMCwgezB4MjgsMHhjMiwweDBiLDB4MDAsMHgxMiwweDhjLDB4NDAsMHhhMywweDIwLDB4MjAsMHhjNCwweDBiLDB4MzAsMHgwYSwweDBjLDB4MTEgfX0sCisgezE2LCAweDhkMzAsIDAsIHsweDk5LDB4MDAsMHgyMCwweGM1LDB4MDksMHgwMSwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZDQwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgwMCwweGI4LDB4ODAsMHgyMiwweGMwLDB4MGIsMHg4OCwweDAyLDB4ZWUsMHgwMSwweGI4LDB4YzEsMHgyYSB9fSwKKyB7MTYsIDB4OGQ1MCwgMCwgezB4YzAsMHgxYiwweGE4LDB4MDYsMHhlMiwweDAwLDB4YmIsMHg4MCwweDJlLDB4YzAsMHg4YSwweDgwLDB4MDIsMHhhYywweDAwLDB4YWIgfX0sCisgezE2LCAweDhkNjAsIDAsIHsweDAwLDB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg5OSwweDAwLDB4MjQsMHhjMCwweDA4LDB4ODAsMHgwMiwweDMwIH19LAorIHsxNiwgMHg4ZDcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhiMCwweDgwLDB4MzYsMHhjMCB9fSwKKyB7MTYsIDB4OGQ4MCwgMCwgezB4MGUsMHhhOCwweDEzLDB4ZTIsMHg4NSwweGYzLDB4YzAsMHgzMiwweGMwLDB4MGUsMHg5YywweDIzLDB4ZTcsMHgyNCwweGU4LDB4ODIgfX0sCisgezE2LCAweDhkOTAsIDAsIHsweDNhLDB4YzEsMHgwZiwweDk0LDB4MDMsMHhhYywweDAyLDB4ZWIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgyZSwweDEwIH19LAorIHsxNiwgMHg4ZGEwLCAwLCB7MHg1MSwweDAwLDB4YjIsMHhjMCwweDBkLDB4YjAsMHgwMywweDUwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGRiMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4ZDAsMHgwMywweGYwLDB4MDQsMHhmZCwweDA0LDB4M2YgfX0sCisgezE2LCAweDhkYzAsIDAsIHsweGMwLDB4NGMsMHhjMCwweDAzLDB4ZjAsMHgxMCwweGZjLDB4MDAsMHgxZiwweGMwLDB4MGQsMHhkMSwweDIzLDB4MWMsMHgwMCwweGM3IH19LAorIHsxNiwgMHg4ZGQwLCAwLCB7MHgwMCwweDM5LDB4YzAsMHgwZCwweGYwLDB4ODMsMHhmZSwweDQ0LDB4ZWQsMHgwMCwweDNiLDB4YzAsMHgwZiwweDc0LDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4OGRlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZjksMHgwMSwweGJhLDB4YzEgfX0sCisgezE2LCAweDhkZjAsIDAsIHsweDBjLDB4YjAsMHgwMywweGExLDB4MDgsMHhmYSwweDAwLDB4MzAsMHhjOCwweDhmLDB4OTQsMHgwMywweDI1LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHg4ZTAwLCAwLCB7MHgzYywweGMwLDB4MGYsMHgwNCwweDgzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGUwLDB4MGYsMHg3MSwweDBiLDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4OGUxMCwgMCwgezB4ZmQsMHgwOCwweDM3LDB4YzAsMHg0ZSwweDkxLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhlMjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4YjksMHgwMCwweDIzLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4YzgsMHgwMCwweDM3IH19LAorIHsxNiwgMHg4ZTMwLCAwLCB7MHhmMCwweDBiLDB4ODAsMHgwMSwweDY0LDB4MDAsMHg0OSwweDAyLDB4MzMsMHhjMCwweDg0LDB4OWMsMHgwMywweDNjLDB4MDAsMHhiZiB9fSwKKyB7MTYsIDB4OGU0MCwgMCwgezB4MDIsMHgwZiwweGQwLDB4MDgsMHhmNCwweDAyLDB4MGUsMHgxMCwweGJkLDB4ODAsMHgzMywweGUwLDB4MDgsMHg5MCwweDBhLDB4MzIgfX0sCisgezE2LCAweDhlNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIwLDB4MDYsMHgyMCwweGMwIH19LAorIHsxNiwgMHg4ZTYwLCAwLCB7MHgwOCwweDAwLDB4NDIsMHg4NCwweDAwLDB4YTAsMHgwMCwweDIwLDB4ZjAsMHgwYiwweDAwLDB4MjIsMHhjYywweDAwLDB4OTAsMHgwMCB9fSwKKyB7MTYsIDB4OGU3MCwgMCwgezB4MjgsMHhjMCwweDAyLDB4M2QsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMiwweDlhLDB4MzgsMHgwMiwweDA2LDB4MDQgfX0sCisgezE2LCAweDhlODAsIDAsIHsweGIxLDB4MTIsMHgyMCwweGUwLDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZTkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI2LDB4ODAsMHgyMSwweGUwLDB4MjgsMHhlYSwweDAyLDB4MzYsMHg4MCwweDg2LDB4OTAsMHg2NSB9fSwKKyB7MTYsIDB4OGVhMCwgMCwgezB4ZTAsMHgxYiwweGRhLDB4MDYsMHg1ZSwweDAxLDB4OWUsMHg4NCwweDI1LDB4ZWMsMHgwYSwweDc4LDB4MDIsMHg1ZSwweDAwLDB4YjcgfX0sCisgezE2LCAweDhlYjAsIDAsIHsweDgwLDB4MmQsMHhlMCwweDA4LDB4NzksMHg0YSwweDE2LDB4NDAsMHhiZCwweDgwLDB4MjUsMHhlMCwweDA4LDB4MzgsMHgwMiwweDA4IH19LAorIHsxNiwgMHg4ZWMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhmYiwweDAwLDB4MjgsMHhlMCB9fSwKKyB7MTYsIDB4OGVkMCwgMCwgezB4MDgsMHgxOCwweDAyLDB4OGEsMHg4OCwweGExLDB4YTAsMHgyMCwweGMyLDB4MWYsMHgyYSwweDIzLDB4ZTYsMHhjOCwweGYwLDB4YzAgfX0sCisgezE2LCAweDhlZTAsIDAsIHsweDNhLDB4ZWQsMHg0ZSwweDM0LDB4MDIsMHg4YywweDA4LDB4ZjMsMHg4MSwweDFlLDB4YzAsMHgwZSwweDMwLDB4MDMsMHgwZSwweGMwIH19LAorIHsxNiwgMHg4ZWYwLCAwLCB7MHhmMSwweDAwLDB4YjAsMHhjYSwweDBlLDB4MjEsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGYwMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDgsMHhmZSwweDEwLDB4M2YsMHhkMiwweDBmLDB4ZTAsMHgwMywweGVjLDB4MDQsMHhmZiwweDE0LDB4N2UgfX0sCisgezE2LCAweDhmMTAsIDAsIHsweGMwLDB4MGYsMHhiMSwweDIzLDB4ZmMsMHgwMSwweGVlLDB4MDAsMHgzYSwweGM0LDB4MGQsMHhiMCwweDEzLDB4YmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHg4ZjIwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZSwweGYwLDB4ODMsMHhmYywweDBjLDB4ZmQsMHgxMCwweDNiLDB4YzAsMHgyZiwweGUxLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4OGYzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDQwLDB4ZjAsMHg4MCwweDMyLDB4ZDAgfX0sCisgezE2LCAweDhmNDAsIDAsIHsweDBjLDB4YTAsMHgwMywweDZjLDB4MDAsMHhmMywweDgwLDB4MzIsMHhkYSwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwIH19LAorIHsxNiwgMHg4ZjUwLCAwLCB7MHgzZSwweGNjLDB4NGMsMHg5OCwweDEzLDB4MmMsMHgxMCwweGZiLDB4MDQsMHgzZSwweGM0LDB4MGMsMHhmMiwweDgzLDB4YTYsMHgxMCB9fSwKKyB7MTYsIDB4OGY2MCwgMCwgezB4ZGQsMHgyMCwweDNmLDB4ZDEsMHgwYywweGIwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmNzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDgwLDB4YjcsMHgwMCwweDIxLDB4YzgsMHgwYywweDcwLDB4MDIsMHhkYywweDA4LDB4YjcsMHgwMCwweDIxIH19LAorIHsxNiwgMHg4ZjgwLCAwLCB7MHhjOCwweDBlLDB4NzAsMHgyMiwweGQ4LDB4MDAsMHhiNywweDAwLDB4MmMsMHhjMiwweDBhLDB4NzAsMHgwYSwweDFmLDB4MDgsMHhiNyB9fSwKKyB7MTYsIDB4OGY5MCwgMCwgezB4MDAsMHgzOSwweGM4LDB4MGEsMHg3MCwweDAyLDB4MTQsMHgwMCwweGM1LDB4NjksMHgyYywweGNhLDB4MmEsMHg3MCwweDAyLDB4ZDIgfX0sCisgezE2LCAweDhmYTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGJmLDB4ODEsMHg2NCwweGUxIH19LAorIHsxNiwgMHg4ZmIwLCAwLCB7MHgwOCwweDc4LDB4MDIsMHg1YSwweDAxLDB4YmYsMHg4MCwweDIxLDB4ZWMsMHg0YiwweDc4LDB4NDYsMHg5ZiwweDA4LDB4MzcsMHg4MCB9fSwKKyB7MTYsIDB4OGZjMCwgMCwgezB4MmQsMHhlOCwweDg4LDB4MTgsMHgwMiwweDFlLDB4ODEsMHhiNywweGIwLDB4MmQsMHhlMCwweDA5LDB4N2EsMHgwMiwweDhlLDB4MDAgfX0sCisgezE2LCAweDhmZDAsIDAsIHsweDk1LDB4YTAsMHgyZCwweGU0LDB4MDgsMHg3OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZmUwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgwMCwweGIzLDB4NjAsMHgyMCwweGMwLDB4MDgsMHhiNiwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDEsMHgyMCB9fSwKKyB7MTYsIDB4OGZmMCwgMCwgezB4YzAsMHg4YSwweGIwLDB4ODYsMHhjZiwweDAwLDB4YmIsMHgxMCwweDZjLDB4YzEsMHgwYSwweDM4LDB4MDIsMHgwYywweDAxLDB4YjMgfX0sCisgezE2LCAweDkwMDAsIDAsIHsweDAyLDB4MjgsMHhjMCwweDBiLDB4YjAsMHgwYSwweDBjLDB4MDAsMHg4MSwweDAwLDB4MmUsMHhjMCwweDBhLDB4YjQsMHg4MiwweGQyIH19LAorIHsxNiwgMHg5MDEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmZSwweDQwLDB4YjYsMHg4MCB9fSwKKyB7MTYsIDB4OTAyMCwgMCwgezB4MGMsMHhlNCwweDAzLDB4NzgsMHg4MCwweGZlLDB4NzQsMHgzMiwweDgwLDB4MGIsMHhlNiwweDAzLDB4ZjksMHgwMCwweGZlLDB4MDAgfX0sCisgezE2LCAweDkwMzAsIDAsIHsweDNlLDB4ODAsMHgwYywweGUwLDB4MDMsMHgyOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHg0ZCwweGEwLDB4MDMsMHhhOCwweDAwIH19LAorIHsxNiwgMHg5MDQwLCAwLCB7MHhkYSwweDA0LDB4M2UsMHg4MCwweDBjLDB4ZTQsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTA1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDJlLDB4ODAsMHgyMywweGUwLDB4MDAsMHhmOCwweDAxLDB4M2MgfX0sCisgezE2LCAweDkwNjAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgyMCwweGY4LDB4MjAsMHgzZSwweDAxLDB4OGYsMHg4OSwweDAzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHg5MDcwLCAwLCB7MHgwMCwweDNhLDB4MTAsMHgwZSwweDgwLDB4MDEsMHhlMCwweDAwLDB4ZTgsMHg0MCwweDdlLDB4MDAsMHg0ZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OTA4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMSwweDdlLDB4NDAgfX0sCisgezE2LCAweDkwOTAsIDAsIHsweDJjLDB4OTAsMHgwYiwweDI0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2OCwweDA1LDB4OTAsMHgxMywweGE0LDB4MDQsMHhkOSwweDAwIH19LAorIHsxNiwgMHg5MGEwLCAwLCB7MHgzMiwweDQxLDB4MGUsMHg5MSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDYwLDB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4OTBiMCwgMCwgezB4ZjEsMHgwMCwweDMyLDB4NDAsMHg2OCwweDkwLDB4NDMsMHg4MiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkwYzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDAsMHgwOCwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlIH19LAorIHsxNiwgMHg5MGQwLCAwLCB7MHg3MCwweDg4LDB4OTAsMHgwMywweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTgsMHgxMiwweGU0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4OTBlMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGEsMHg5MCwweDBhLDB4MjYsMHgwMCwweGI5LDB4ODAsMHhhMiwweDQwLDB4MDgsMHg5MCwweDEyLDB4MjAgfX0sCisgezE2LCAweDkwZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4MDQsMHgyYywweDQwIH19LAorIHsxNiwgMHg5MTAwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHgyNCwweDAxLDB4YjksMHgwMCwweDJhLDB4NDAsMHgwYiwweGIwLDB4MDIsMHhhNCwweDAxLDB4YjksMHgwMCB9fSwKKyB7MTYsIDB4OTExMCwgMCwgezB4ZTAsMHg0MCwweDBhLDB4OTAsMHg4MiwweGE0LDB4MDAsMHhiOSwweDAwLDB4MmMsMHg0OCwweDBhLDB4OTgsMHgwMiwweDI0LDB4ODAgfX0sCisgezE2LCAweDkxMjAsIDAsIHsweDM5LDB4MjAsMHgyMiwweDQwLDB4MmEsMHg5MCwweDAyLDB4ODYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MTMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MDAsMHgyYywweDQ4LDB4MDgsMHgxMCwweDEyLDB4MDQsMHgxMCwweGIxLDB4MDQsMHgyYyB9fSwKKyB7MTYsIDB4OTE0MCwgMCwgezB4ZDgsMHgwYSwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjEsMHgwMCwweDIwLDB4NDgsMHgwOCwweDEwLDB4MDIsMHhjNCwweDgwLDB4YjEgfX0sCisgezE2LCAweDkxNTAsIDAsIHsweDIyLDB4MmMsMHg1MCwweDhhLDB4MzIsMHg4MiwweDA1LDB4YTAsMHhiMSwweDJhLDB4MjAsMHg0YSwweDBhLDB4MTIsMHg4MiwweDAyIH19LAorIHsxNiwgMHg5MTYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NTAsMHhjOCwweDUyLDB4MmUsMHgxNCB9fSwKKyB7MTYsIDB4OTE3MCwgMCwgezB4MGMsMHg4NSwweDAzLDB4MjEsMHg0MCwweGY4LDB4NTAsMHgzYSwweDAwLDB4MWYsMHg4NSwweDAzLDB4YTEsMHg0MCwweGY4LDB4NTAgfX0sCisgezE2LCAweDkxODAsIDAsIHsweDMyLDB4MTQsMHgwZSwweDgwLDB4MDMsMHhhMSwweDQwLDB4ZjgsMHg1MCwweDNjLDB4ODAsMHgwZSwweDAyLDB4MDMsMHgyMCwweDgwIH19LAorIHsxNiwgMHg5MTkwLCAwLCB7MHhmYSwweDIwLDB4MzIsMHgwOCwweDBlLDB4ODIsMHgxMywweGFlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTFhMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NTAsMHhmZCwweDAwLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmZCwweDAwLDB4M2UgfX0sCisgezE2LCAweDkxYjAsIDAsIHsweDQ0LDB4OGQsMHhkMCwweDAxLDB4YmQsMHgwMCwweGZkLDB4MDIsMHgzZSwweDQ0LDB4MGYsMHhkNCwweDAwLDB4ZTQsMHg0OCwweDc5IH19LAorIHsxNiwgMHg5MWMwLCAwLCB7MHgxNCwweDNlLDB4NTAsMHgwZiwweDkyLDB4YTIsMHhmNCwweDA4LDB4ZmQsMHgwMCwweDNlLDB4NGEsMHgwZCwweGQyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4OTFkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNywweDAwLDB4ZjksMHgxMCwweDNhLDB4NmUgfX0sCisgezE2LCAweDkxZTAsIDAsIHsweDBjLDB4YjEsMHgwMywweGU0LDB4NDAsMHhmOSwweDQ0LDB4M2IsMHg2MSwweDhlLDB4OTQsMHgwMywweGU0LDB4MDAsMHhlOSwweDQwIH19LAorIHsxNiwgMHg5MWYwLCAwLCB7MHgzMiwweDY2LDB4MGYsMHhkYSwweDBiLDB4YTcsMHgyOCwweGM5LDB4ZTAsMHgzZiwweDY4LDB4MGMsMHhkYSwweDgzLDB4YjMsMHgyMCB9fSwKKyB7MTYsIDB4OTIwMCwgMCwgezB4ZWQsMHhhMCwweDMzLDB4NzksMHgwOCwweGQ4LDB4MDMsMHg0NiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyMTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDAwLDB4YjgsMHhhMCwweDJlLDB4MzgsMHgwOCwweDhhLDB4MDIsMHhlMiwweDg4LDB4ZTgsMHg4MSwweDJlIH19LAorIHsxNiwgMHg5MjIwLCAwLCB7MHgxNCwweDA5LDB4MGEsMHgwMywweGUyLDB4ODAsMHhiOCwweDgwLDB4MzIsMHgzMCwweDBiLDB4ODUsMHgwMiwweDIxLDB4MDEsMHhhOCB9fSwKKyB7MTYsIDB4OTIzMCwgMCwgezB4ZjQsMHgzOCwweDJhLDB4MDgsMHgwZSwweGNhLDB4MjMsMHg5MCwweGM4LDB4NTQsMHgzNCwweDM4LDB4MDgsMHg4YSwweDkyLDB4MGUgfX0sCisgezE2LCAweDkyNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4MDAsMHgyOCwweDQwIH19LAorIHsxNiwgMHg5MjUwLCAwLCB7MHgxOSwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgyMCwweDI4LDB4NDAsMHgwYiwweDEwLDB4MDYsMHhjNCwweDIwLDB4YTEsMHhhMiB9fSwKKyB7MTYsIDB4OTI2MCwgMCwgezB4NmMsMHg0OCwweDBiLDB4MTAsMHgwMiwweDg0LDB4MDgsMHg4MSwweDIwLDB4MmMsMHg1MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4MDQgfX0sCisgezE2LCAweDkyNzAsIDAsIHsweGIxLDB4MDAsMHgyNCwweDU4LDB4MDgsMHgzYywweDAyLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MjgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMSwweGI5LDB4MjAsMHgyYywweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgxMCwweGE5LDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4OTI5MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDAwLDB4YjEsMHgwMSwweDJhLDB4NDAsMHgwYiwweDk0LDB4MDIsMHgyNCwweDAwLDB4YTkgfX0sCisgezE2LCAweDkyYTAsIDAsIHsweDAwLDB4MmEsMHg0MCwweDAxLDB4MTAsMHg1MiwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjYsMHg0MCwweDAwLDB4OTgsMHgwMiwweDQ2IH19LAorIHsxNiwgMHg5MmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhmOSwweDYxLDB4M2EsMHg0MCB9fSwKKyB7MTYsIDB4OTJjMCwgMCwgezB4MGQsMHg5MCwweDgzLDB4ZTUsMHgyMCwweGY5LDB4MDEsMHgzYSwweDQwLDB4MmUsMHg5MCwweDAyLDB4ZTQsMHg0MCwweGU5LDB4MDEgfX0sCisgezE2LCAweDkyZDAsIDAsIHsweDllLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhhNCwweDAwLDB4ODksMHgwMCwweDNlLDB4NDAsMHgyZCwweDkwLDB4MDIsMHhlNiwweDA4IH19LAorIHsxNiwgMHg5MmUwLCAwLCB7MHhiOSwweDAxLDB4MzYsMHg0MCwweDJjLDB4OTAsMHgwMSwweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTJmMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDJlLDB4OTAsMHgwMywweGU0LDB4ODAsMHhmOSwweDAwLDB4M2MgfX0sCisgezE2LCAweDkzMDAsIDAsIHsweDQwLDB4MGMsMHg5YywweDIzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHgxMCwweDQzLDB4ODQsMHgwMCwweGY5IH19LAorIHsxNiwgMHg5MzEwLCAwLCB7MHgwMiwweDNlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHg4MCwweDgwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgyZiwweDkwLDB4MDMsMHg4YSB9fSwKKyB7MTYsIDB4OTMyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHg0MCwweDM2LDB4MDEgfX0sCisgezE2LCAweDkzMzAsIDAsIHsweDBkLDB4ODQsMHgwMywweGUxLDB4MDAsMHhlOCwweDQwLDB4M2UsMHgwOCwweDBjLDB4ODAsMHgwMywweGUxLDB4MDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHg5MzQwLCAwLCB7MHgzMiwweDAwLDB4OGYsMHg4MCwweDAzLDB4YTAsMHgxMCwweGY4LDB4MDAsMHgzMiwweDA0LDB4MGUsMHg4MCwweDgzLDB4NjAsMHgwMCB9fSwKKyB7MTYsIDB4OTM1MCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHgwMSwweDIyLDB4ODAsMHgwOCwweGEwLDB4MjQsMHhlOCwweDAwLDB4MGEsMHgwMCwweDJmIH19LAorIHsxNiwgMHg5MzcwLCAwLCB7MHg4MCwweDFhLDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiYSwweDAwLDB4MTYsMHg4MCwweDBiLDB4ZTAsMHgwMywweDI4LDB4MDgsMHhlYSB9fSwKKyB7MTYsIDB4OTM4MCwgMCwgezB4MDAsMHgzMywweDkwLDB4MDgsMHhlYywweDFiLDB4MjIsMHg4MCwweGM2LDB4MTQsMHgyZiwweDkxLDB4MDgsMHhhMCwweDQzLDB4NGEgfX0sCisgezE2LCAweDkzOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHgyNCwweGMwIH19LAorIHsxNiwgMHg5M2EwLCAwLCB7MHgwOSwweDMwLDB4MTIsMHhjYywweDA0LDB4YTMsMHgwNCwweDZjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4OTNiMCwgMCwgezB4MmMsMHhjMCwweDEzLDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwLDB4ZTYsMHhiOCwweDBhLDB4MzgsMHgwMiwweDQ0LDB4MDggfX0sCisgezE2LCAweDkzYzAsIDAsIHsweDgyLDB4NTAsMHgyYywweGQyLDB4M2EsMHgzMCwweDAyLDB4OGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5M2QwLCAwLCB7MHhhMCwweDAxLDB4MGUsMHg4MCwweDk3LDB4YjQsMHgyMSwweGM0LDB4NDksMHg3MSwweDAyLDB4ZGUsMHg4MSwweDg3LDB4MjEsMHgyZCB9fSwKKyB7MTYsIDB4OTNlMCwgMCwgezB4ZDAsMHgwYiwweDdiLDB4MDIsMHgxYywweDAxLDB4YmYsMHgyMCwweDI5LDB4YzQsMHgwYiwweDMwLDB4MDIsMHg1YywweDAwLDB4YTcgfX0sCisgezE2LCAweDkzZjAsIDAsIHsweGExLDB4MjEsMHhjMCwweDRhLDB4NzAsMHg4YSwweDBjLDB4ODEsMHg4NCwweDAwLDB4MmQsMHhkMCwweDBhLDB4NTAsMHgwMiwweGU4IH19LAorIHsxNiwgMHg5NDAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4ODIsMHhkZiwweGEwLDB4MzQsMHhlYyB9fSwKKyB7MTYsIDB4OTQxMCwgMCwgezB4MGQsMHg3OSwweDAyLDB4ZmUsMHg4MCwweGU3LDB4ZTgsMHgyZiwweGEwLDB4MDksMHg3YSwweDAyLDB4OWUsMHgwMCwweGY3LDB4YTIgfX0sCisgezE2LCAweDk0MjAsIDAsIHsweDI1LDB4ZWEsMHgwYiwweDQ4LDB4MDMsMHg5ZSwweDA0LDB4ZmYsMHhjMCwweDY1LDB4ZTQsMHgwZSwweDY4LDB4MDMsMHg1ZiwweDAwIH19LAorIHsxNiwgMHg5NDMwLCAwLCB7MHhlNCwweDgwLDB4M2QsMHhlMCwweDBlLDB4ZjgsMHgwMywweGFhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTQ0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4NDgsMHhlYiwweDA1LDB4M2UsMHhkOSwweDBlLDB4YjIsMHgwMywweGVjLDB4MDAsMHhmYiwweDYwLDB4M2UgfX0sCisgezE2LCAweDk0NTAsIDAsIHsweGMwLDB4MGUsMHhiMiwweDgzLDB4YWMsMHgwMCwweGYzLDB4NTAsMHhhNiwweGMwLDB4NGYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiIH19LAorIHsxNiwgMHg5NDYwLCAwLCB7MHg4MCwweDNmLDB4ZDgsMHgwZCwweGEwLDB4MDMsMHhlYywweDBhLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZCwweDkwLDB4MDMsMHg0MiB9fSwKKyB7MTYsIDB4OTQ3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4YmIsMHg5MCwweDNlLDB4ZTAgfX0sCisgezE2LCAweDk0ODAsIDAsIHsweDA4LDB4MzksMHgwMywweDllLDB4MjAsMHhjZiwweDgyLDB4NzcsMHhlMCwweDFmLDB4ZjgsMHgwMywweGVlLDB4MDAsMHhmZiwweGMwIH19LAorIHsxNiwgMHg5NDkwLCAwLCB7MHgzZiwweGU1LDB4MGQsMHhmOSwweDAzLDB4ZWUsMHgwMCwweGZiLDB4OTAsMHgzNywweGEwLDB4MDgsMHhmOCwweDBmLDB4MWUsMHgwMCB9fSwKKyB7MTYsIDB4OTRhMCwgMCwgezB4Y2MsMHg5NCwweDMzLDB4NjAsMHgwZCwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0YjAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4YjcsMHg5MCwweDJmLDB4ZTQsMHgwOCwweDdhLDB4MDIsMHgxZSwweDAwLDB4OGYsMHgxMiwweDI1IH19LAorIHsxNiwgMHg5NGMwLCAwLCB7MHhkOCwweDBiLDB4YmIsMHgwMiwweDFlLDB4MDAsMHhiNywweDAwLDB4MmQsMHhlOCwweDA4LDB4N2QsMHg4MiwweGRlLDB4NDAsMHhiYiB9fSwKKyB7MTYsIDB4OTRkMCwgMCwgezB4YTAsMHgyNywweDkwLDB4MGEsMHg3NiwweDAyLDB4NWMsMHg4MCwweDg1LDB4MDAsMHgzNywweGM0LDB4NGQsMHg3MSwweDAzLDB4ZWEgfX0sCisgezE2LCAweDk0ZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGI3LDB4MjAsMHgyZCwweGMwIH19LAorIHsxNiwgMHg5NGYwLCAwLCB7MHgyOSwweGYyLDB4MjIsMHhiYywweDgwLDB4OTcsMHgwMCwweDI1LDB4NDEsMHgwYiwweDcwLDB4MTIsMHg5YywweDAwLDB4YjcsMHgwOCB9fSwKKyB7MTYsIDB4OTUwMCwgMCwgezB4MjksMHhjMCwweDA4LDB4NDIsMHgxMiwweGRjLDB4NDAsMHhiNywweDAwLDB4MjksMHhjMCwweDA5LDB4NjAsMHgyMiwweGRjLDB4MTAgfX0sCisgezE2LCAweDk1MTAsIDAsIHsweDgwLDB4MDAsMHgyMSwweDQwLDB4MDksMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NTIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4YzAsMHgyZSwweGMwLDB4MDgsMHgzNCwweDgyLDB4MmQsMHgwMCwweDkzLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4OTUzMCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MDIsMHgwZiwweDgwLDB4MTMsMHgwMCwweDJjLDB4YzAsMHgwYSwweDM0LDB4YTIsMHhlYywweDAwLDB4YjMgfX0sCisgezE2LCAweDk1NDAsIDAsIHsweDAwLDB4MjgsMHhjMCwweDBiLDB4MDAsMHgwMiwweGNjLDB4MDAsMHg4MSwweDAwLDB4MjAsMHhjMCwweDA5LDB4MzAsMHgwMiwweDg5IH19LAorIHsxNiwgMHg5NTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJjLDB4MDAsMHhmZiwweGUwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4OTU2MCwgMCwgezB4MGMsMHhmNCwweDgzLDB4YmQsMHgwMCwweGRmLDB4MDgsMHgzNiwweDQwLDB4MGIsMHg3NSwweDQyLDB4ZmMsMHgyMCwweGZmLDB4ODAgfX0sCisgezE2LCAweDk1NzAsIDAsIHsweDNiLDB4YzAsMHgyYywweDNjLDB4MDMsMHhmYywweDAwLDB4YmYsMHgwMCwweGJlLDB4YzAsMHg4ZCwweDkwLDB4MGIsMHhhYywweDAyIH19LAorIHsxNiwgMHg5NTgwLCAwLCB7MHhjYSwweDAwLDB4MjIsMHg4MCwweDBkLDB4YjAsMHgwMiwweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTU5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDA4LDB4MWUsMHhjMCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhlYiwweDAwLDB4M2EgfX0sCisgezE2LCAweDk1YTAsIDAsIHsweDEwLDB4MGYsMHhiMCwweDIzLDB4YWMsMHgwMSwweGZiLDB4MDAsMHgzZSwweGMwLDB4M2MsMHg4NCwweDAzLDB4ZWMsMHgwMCwweGZiIH19LAorIHsxNiwgMHg5NWIwLCAwLCB7MHgwMCwweDI2LDB4NDAsMHgwZSwweDk0LDB4MGIsMHgyYywweDAwLDB4ZjksMHg0MCwweDNlLDB4OTAsMHgwZSwweDkwLDB4MTMsMHhlMCB9fSwKKyB7MTYsIDB4OTVjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAyLDB4Y2YsMHgwMCwweDNmLDB4YzAgfX0sCisgezE2LCAweDk1ZDAsIDAsIHsweDBkLDB4ZjAsMHgwYiwweDNjLDB4MjAsMHhjZiwweDAwLDB4M2QsMHgwMCwweDBlLDB4ZjAsMHgwNywweDljLDB4MDEsMHhjZiwweDAyIH19LAorIHsxNiwgMHg5NWUwLCAwLCB7MHgzZSwweGMwLDB4MGYsMHhjNCwweDAzLDB4M2MsMHgwMCwweGNmLDB4MDAsMHgwZiwweGMwLDB4MGUsMHg0NCwweDAzLDB4MWYsMHgwMiB9fSwKKyB7MTYsIDB4OTVmMCwgMCwgezB4Y2MsMHgwMCwweDNmLDB4ODAsMHgyYywweDcwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2MDAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHgwMiwweDJlLDB4YzAsMHgwZCwweGIwLDB4MDIsMHgyYywweDAwLDB4YWIsMHgwMCwweDA2IH19LAorIHsxNiwgMHg5NjEwLCAwLCB7MHgyMCwweDA4LDB4YjAsMHgwMywweGZjLDB4MDAsMHhhYiwweDAwLDB4MmUsMHhjMCwweDBmLDB4ODAsMHgwNiwweGJjLDB4MDAsMHhhYiB9fSwKKyB7MTYsIDB4OTYyMCwgMCwgezB4MDQsMHgzYSwweGYwLDB4MGMsMHg4OCwweDAyLDB4MmMsMHgwMCwweGM5LDB4ODAsMHgzYSwweDkyLDB4MDgsMHg5MCwweDBhLDB4YTAgfX0sCisgezE2LCAweDk2MzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGFiLDB4MDAsMHgyZSwweGMwIH19LAorIHsxNiwgMHg5NjQwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDI2LDB4NjAsMHgwYiwweGIwLDB4MDIsMHhhYywweDAwLDB4OGIsMHgwMCB9fSwKKyB7MTYsIDB4OTY1MCwgMCwgezB4NmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweDJjLDB4MDAsMHg5YiwweDAwLDB4NGMsMHhlMCwweDBhLDB4OTAsMHgyMiwweDJjLDB4MDAgfX0sCisgezE2LCAweDk2NjAsIDAsIHsweDhhLDB4YzIsMHgyYywweDQwLDB4MDgsMHhiMCwweDQyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NjcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweDgzLDB4MGQsMHgyYywweGM2LDB4MDksMHgzMSwweDAyLDB4MGQsMHg4MSwweGEzLDB4MTEsMHgyNCB9fSwKKyB7MTYsIDB4OTY4MCwgMCwgezB4MDAsMHg4YSwweGIxLDB4ZTIsMHg0YywweDgwLDB4YTMsMHgwMCwweDJjLDB4Y2MsMHgwYiwweDAyLDB4MDIsMHg4YywweDgwLDB4YTMgfX0sCisgezE2LCAweDk2OTAsIDAsIHsweDQ4LDB4MDgsMHhjMCwweDA4LDB4MDAsMHgwYSwweDBkLDB4MDAsMHg4MSwweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDgyIH19LAorIHsxNiwgMHg5NmEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhjYiwweDIwLDB4MmYsMHhjOCB9fSwKKyB7MTYsIDB4OTZiMCwgMCwgezB4OGQsMHhmNiwweDEzLDB4MmQsMHhiMCwweDhmLDB4MDAsMHgzNiwweDQwLDB4MGYsMHhmMCwweDAyLDB4YWQsMHhhOCwweDhmLDB4MTAgfX0sCisgezE2LCAweDk2YzAsIDAsIHsweDNmLDB4Y2EsMHgwYiwweDgwLDB4OTIsMHgyYywweDEwLDB4ZGIsMHg0MCwweDNmLDB4YzAsMHgwZSwweDAwLDB4MDMsMHgyZCwweDA0IH19LAorIHsxNiwgMHg5NmQwLCAwLCB7MHhjOCwweDAyLDB4M2UsMHg0MCwweDBjLDB4YjAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTZlMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjOCwweDBlLDB4ZjEsMHgwMywweGVjLDB4ODQsMHhmZiwweDIwLDB4MzcgfX0sCisgezE2LCAweDk2ZjAsIDAsIHsweDAwLDB4MGQsMHhiMiwweDAzLDB4YmMsMHhhMCwweGZmLDB4MDAsMHgzZSwweGM5LDB4MGUsMHg4MCwweDAzLDB4ZmQsMHgxMSwweGZmIH19LAorIHsxNiwgMHg5NzAwLCAwLCB7MHgwMCwweDNiLDB4YzAsMHgwZSwweGMwLDB4MDMsMHhmYywweDgwLDB4ZWQsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4NDMsMHg2OCB9fSwKKyB7MTYsIDB4OTcxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDkwLDB4Y2MsMHg5MiwweDNiLDB4YzggfX0sCisgezE2LCAweDk3MjAsIDAsIHsweDBkLDB4ZjAsMHg4MywweDczLDB4MTAsMHhmZiwweDI4LDB4MzcsMHhjYSwweDRmLDB4YjIsMHgwMywweGZjLDB4MDAsMHhkZiwweDIwIH19LAorIHsxNiwgMHg5NzMwLCAwLCB7MHhiMywweGM0LDB4MGQsMHg2OCwweDQzLDB4ZmUsMHgxNCwweGNiLDB4ODQsMHgzMywweGUwLDB4MGQsMHg3OCwweDAzLDB4YmUsMHgwMCB9fSwKKyB7MTYsIDB4OTc0MCwgMCwgezB4ZmYsMHg4MCwweDM3LDB4YTAsMHgwYywweGYzLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk3NTAsIDAsIHsweDgwLDB4MDAsMHhmYywweDQ4LDB4ODIsMHgyMSwweDAzLDB4ZjQsMHgwZiwweGY2LDB4NDIsMHgyMCwweDA0LDB4OGEsMHg2MCwweDJiIH19LAorIHsxNiwgMHg5NzYwLCAwLCB7MHhkYSwweDBiLDB4ZjksMHgwMiwweDNmLDB4MDQsMHg4ZiwweDUyLDB4MjMsMHhkNSwweDRkLDB4ODgsMHgwMiwweGFlLDB4MDAsMHhkYiB9fSwKKyB7MTYsIDB4OTc3MCwgMCwgezB4ODAsMHgzNiwweGMwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwNCwweGI4LDB4MDAsMHgyMiwweDYwLDB4MGQsMHg3NCwweDAzLDB4ZTAgfX0sCisgezE2LCAweDk3ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHhhMCwweDgwLDB4MDEsMHgwOCwweGMwIH19LAorIHsxNiwgMHg5NzkwLCAwLCB7MHg0YiwweDMwLDB4ODIsMHg0MiwweDkwLDB4YTMsMHgwOCwweDJjLDB4YzgsMHgxYSwweDMwLDB4MjIsMHg4ZCwweDAwLDB4OTMsMHgwMCB9fSwKKyB7MTYsIDB4OTdhMCwgMCwgezB4MjQsMHhjOCwweDA5LDB4YTAsMHgxMiwweDBjLDB4MDQsMHhhYiwweDAwLDB4NjIsMHhjMCwweDA5LDB4YjAsMHgwMiwweGNjLDB4MDAgfX0sCisgezE2LCAweDk3YjAsIDAsIHsweGIzLDB4MDAsMHgyOCwweDgwLDB4MDgsMHgzNiwweDA2LDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5N2MwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweDg4LDB4MDgsMHgyMiwweGMwLDB4MGEsMHgzMCwweDFhLDB4MDAsMHgxMSwweDgyLDB4MDAsMHgwYSB9fSwKKyB7MTYsIDB4OTdkMCwgMCwgezB4YzAsMHgwYiwweGIwLDB4NDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDI2LDB4YzAsMHgwOSwweDkxLDB4MDIsMHhlYywweDIwLDB4YmIgfX0sCisgezE2LCAweDk3ZTAsIDAsIHsweDI4LDB4NjYsMHhjMCwweDA4LDB4ODAsMHgwMiwweDYwLDB4MDAsMHhiOCwweDAwLDB4MmEsMHg0MCwweDgxLDB4YjAsMHgwNiwweGY4IH19LAorIHsxNiwgMHg5N2YwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweGVjLDB4MDIsMHhjOCwweDA0LDB4M2EsMHhjMCB9fSwKKyB7MTYsIDB4OTgwMCwgMCwgezB4ODksMHhiMCwweDAzLDB4NjgsMHgwMCwweGU5LDB4YzEsMHgxZSwweGMxLDB4MGUsMHgzMCwweDAzLDB4ZWMsMHgwMCwweGRiLDB4MDAgfX0sCisgezE2LCAweDk4MTAsIDAsIHsweDM2LDB4YzEsMHgwZCwweDAwLDB4MjMsMHgwZSwweDAwLDB4ZWIsMHg4MCwweDMyLDB4YzgsMHhjZCwweDMwLDB4MzIsMHhlYywweDA4IH19LAorIHsxNiwgMHg5ODIwLCAwLCB7MHhmMywweDAwLDB4M2MsMHg4MCwweDBjLDB4YjAsMHgwNiwweDgwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTgzMCwgMCwgezB4ZTAsMHgwMSwweDljLDB4MDAsMHg3YywweDAwLDB4M2YsMHhjMCwweDBiLDB4YjAsMHg0MywweGZkLDB4MDAsMHhiZSwweGM0LDB4MzcgfX0sCisgezE2LCAweDk4NDAsIDAsIHsweGMwLDB4MWYsMHhmMCwweDAzLDB4NWMsMHgwMCwweGZmLDB4MDEsMHgzYiwweGMwLDB4MGUsMHhjOCwweDAzLDB4YmYsMHgyMCwweGRmIH19LAorIHsxNiwgMHg5ODUwLCAwLCB7MHgwMCwweDNmLDB4ZDAsMHgwZiwweGMwLDB4MTMsMHhiMCwweDAwLDB4N2MsMHgwMCwweGI3LDB4NDAsMHgwZiwweGYwLDB4MWIsMHhiMCB9fSwKKyB7MTYsIDB4OTg2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDBjLDB4ZDgsMHg0MSwweDMyLDB4YzAgfX0sCisgezE2LCAweDk4NzAsIDAsIHsweDBlLDB4YjAsMHgwNywweGE4LDB4MDEsMHg2OSwweDQwLDB4YjIsMHhjMCwweDhkLDB4YjAsMHhhMywweGVjLDB4MDgsMHhmMywweDAwIH19LAorIHsxNiwgMHg5ODgwLCAwLCB7MHgzMiwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWQsMHgwMCwweGZiLDB4NDgsMHgzYSwweGMwLDB4MGQsMHhiMCwweDgzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OTg5MCwgMCwgezB4ZmIsMHgyMCwweDNlLDB4ODAsMHgwZiwweDcwLDB4MjMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4YTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4ODgsMHgwMCwweDIzLDB4YzAsMHgwOCwweGYwLDB4MDYsMHgyYywweDEwLDB4ODgsMHg1MSwweDM3IH19LAorIHsxNiwgMHg5OGIwLCAwLCB7MHhjMCwweDA4LDB4ZjAsMHgwNywweDdkLDB4NjAsMHg4ZiwweDAyLDB4MzcsMHhjMCwweDBiLDB4OGMsMHgwMCwweDJkLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4OThjMCwgMCwgezB4MDAsMHgzOCwweGMwLDB4MDgsMHg4MCwweDgyLDB4MjAsMHgwMCwweGI4LDB4MDAsMHgyZSwweDUwLDB4MGIsMHhmMCwweDAwLDB4MzIgfX0sCisgezE2LCAweDk4ZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDk4LDB4MDAsMHgyOCwweGMwIH19LAorIHsxNiwgMHg5OGUwLCAwLCB7MHgwYSwweDMwLDB4MDIsMHg4NCwweDA0LDB4YTMsMHgwMCwweDAwLDB4YzAsMHg2OCwweDM5LDB4MDYsMHgwYywweDEwLDB4OTMsMHgyMCB9fSwKKyB7MTYsIDB4OThmMCwgMCwgezB4MjIsMHhjMCwweDliLDB4MDEsMHhhMCwweDhmLDB4MTQsMHgzMywweDE0LDB4MjgsMHhjMCwweDA5LDB4M2MsMHgwMiwweDBjLDB4MDEgfX0sCisgezE2LCAweDk5MDAsIDAsIHsweDkzLDB4NDAsMHgyYywweDg4LDB4MGIsMHgzMCwweDAyLDB4YjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OTEwLCAwLCB7MHg2MCwweDAxLDB4MWUsMHgxMCwweDg3LDB4ODAsMHgyOSwweGUwLDB4MDgsMHg3OCwweDAyLDB4M2UsMHgwMCwweDgzLDB4OTAsMHgyNCB9fSwKKyB7MTYsIDB4OTkyMCwgMCwgezB4ZTAsMHgwOCwweDc4LDB4MTAsMHhjZSwweDA0LDB4MDcsMHg5MSwweDI1LDB4ZTAsMHg4MywweGM5LDB4MDIsMHgxZSwweDA0LDB4YjcgfX0sCisgezE2LCAweDk5MzAsIDAsIHsweDg0LDB4MmIsMHhhNCwweDA4LDB4NDgsMHg0MiwweDEyLDB4Y2MsMHhiNCwweDgwLDB4MmQsMHg2NCwweDBiLDB4NzgsMHgwMiwweDE5IH19LAorIHsxNiwgMHg5OTQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDJjLDB4MDAsMHhkMCwweDEwLDB4MjgsMHhjOCB9fSwKKyB7MTYsIDB4OTk1MCwgMCwgezB4MGUsMHgzYiwweDAyLDB4ODQsMHgwMCwweGUzLDB4NDAsMHgzMCwweGM4LDB4MGMsMHgzOCwweDYyLDB4OGMsMHgwMCwweDUzLDB4MDAgfX0sCisgezE2LCAweDk5NjAsIDAsIHsweDMwLDB4YzQsMHgxZiwweDAwLDB4MjMsMHg4YywweDNjLDB4ZjMsMHg4MCwweDE4LDB4YzAsMHgwZCwweDMwLDB4MDMsMHgwZSwweDgwIH19LAorIHsxNiwgMHg5OTcwLCAwLCB7MHhkMywweDEwLDB4M2MsMHg4MCwweDBmLDB4MzAsMHgwMywweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTk4MCwgMCwgezB4NDAsMHgxZCwweGJkLDB4MDAsMHhmOSwweDEyLDB4YjQsMHhjMCwweDA3LDB4YjAsMHgwMywweGNjLDB4MDAsMHg0YSwweDAwLDB4NzcgfX0sCisgezE2LCAweDk5OTAsIDAsIHsweGMwLDB4MGUsMHg3MSwweDQzLDB4NmMsMHgwMCwweGYzLDB4MDAsMHgzZiwweGQwLDB4MWYsMHhkMCwweDUzLDB4YWMsMHg2OCwweGZiIH19LAorIHsxNiwgMHg5OWEwLCAwLCB7MHgxOCwweDNkLDB4YzAsMHgwZiwweGMwLDB4MTMsMHhmMCwweDUwLDB4ZmMsMHgwNCwweDNmLDB4NDAsMHgwZiwweGY0LDB4MDMsMHg5MCB9fSwKKyB7MTYsIDB4OTliMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZCwweDQwLDB4ZjgsMHgwNCwweDNlLDB4ZDIgfX0sCisgezE2LCAweDk5YzAsIDAsIHsweDBmLDB4YjMsMHgxMywweGUwLDB4MTAsMHhmOSwweDAwLDB4YjIsMHhjYywweDBlLDB4YmEsMHgwMywweDZkLDB4ODAsMHhkYiwweDAyIH19LAorIHsxNiwgMHg5OWQwLCAwLCB7MHgzMiwweGRjLDB4NGYsMHgwMCwweDAzLDB4NmMsMHgwNCwweGYzLDB4MDIsMHgzNiwweDQwLDB4MGUsMHhiMCwweDAzLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4OTllMCwgMCwgezB4NGIsMHgwMCwweDNjLDB4ODAsMHgwYywweGYxLDB4MDMsMHg2MiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5ZjAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjQsMHgwMCwweDJkLDB4YzksMHgwYiwweDcwLDB4ODIsMHhkYywweDAwLDB4YmMsMHgwNCwweDIxIH19LAorIHsxNiwgMHg5YTAwLCAwLCB7MHhjNCwweDRiLDB4MzcsMHgwMiwweDBjLDB4YTAsMHg4ZiwweDc0LDB4MjEsMHhjMCwweDBiLDB4NDAsMHgwMiwweDFjLDB4ODEsMHhiNyB9fSwKKyB7MTYsIDB4OWExMCwgMCwgezB4MjAsMHgyYiwweGMwLDB4MDgsMHg0MCwweDAyLDB4ZDAsMHgwMiwweDg0LDB4MDAsMHgyZCwweDQwLDB4MGEsMHhmMiwweDAyLDB4MTIgfX0sCisgezE2LCAweDlhMjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg4MCwweGI0LDB4YzAsMHgyZCwweGU0IH19LAorIHsxNiwgMHg5YTMwLCAwLCB7MHgwYiwweDdhLDB4MDIsMHhkMiwweDAwLDB4YjUsMHg4OCwweDIxLDB4ZTgsMHgwYSwweDc4LDB4MDIsMHhkZSwweDQwLDB4OTcsMHgwMCB9fSwKKyB7MTYsIDB4OWE0MCwgMCwgezB4MjEsMHhlOCwweDBiLDB4Y2MsMHg0NiwweDVlLDB4MjgsMHhiNywweGM0LDB4MjEsMHhmMCwweDBhLDB4NzgsMHgwMiwweGZlLDB4MDggfX0sCisgezE2LCAweDlhNTAsIDAsIHsweDk3LDB4ODQsMHgyZCwweGEwLDB4MDgsMHg3OCwweDAyLDB4NzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YTYwLCAwLCB7MHgwOCwweDE0LDB4Y2MsMHgwMCwweGIwLDB4YzAsMHgyYywweGMwLDB4OWIsMHhiMCwweDAyLDB4Y2MsMHgyMCwweGIzLDB4NjAsMHgyMiB9fSwKKyB7MTYsIDB4OWE3MCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMsMHgwMSwweDIwLDB4YzAsMHgxYiwweDA2LDB4MTYsMHg0ZiwweDAwLDB4YjMgfX0sCisgezE2LCAweDlhODAsIDAsIHsweGEwLDB4MmEsMHhmMCwweDA4LDB4MDAsMHgwMiwweGUwLDB4MDAsMHg5MCwweDAwLDB4MmMsMHg0MCwweDBhLDB4MzAsMHgwMiwweDAyIH19LAorIHsxNiwgMHg5YTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MTAsMHhmZSwweGMwLDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4OWFhMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZjksMHgwOCwweGZlLDB4NDAsMHgyMiwweDgwLDB4MGUsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGQyLDB4MDAgfX0sCisgezE2LCAweDlhYjAsIDAsIHsweDMyLDB4ODAsMHg4ZiwweGUwLDB4MDMsMHg1OCwweDAwLDB4ZjYsMHgwMCwweDMzLDB4YjAsMHgwZSwweDIwLDB4MDIsMHhlOCwweDBjIH19LAorIHsxNiwgMHg5YWMwLCAwLCB7MHhkMiwweDAyLDB4M2MsMHg4MCwweDBjLDB4YTAsMHgwMywweDdhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWFkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDIwLDB4M2UsMHgwMSwweDBiLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmMCwweDQwLDB4M2UgfX0sCisgezE2LCAweDlhZTAsIDAsIHsweDAwLDB4NTcsMHg4MCwweDIzLDB4MDAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDAzLDB4YTAsMHgzMCwweDM4IH19LAorIHsxNiwgMHg5YWYwLCAwLCB7MHgwMCwweDNhLDB4MDgsMHgwZiwweGM0LDB4MDMsMHhmMCwweDAwLDB4ZWMsMHgwMCwweDNmLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OWIwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMSwweDNjLDB4NDggfX0sCisgezE2LCAweDliMTAsIDAsIHsweDRjLDB4OTAsMHgwYiwweDI0LDB4MDEsMHhjOSwweGMwLDB4MzIsMHg0MCwweGFjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhkOSwweDQwIH19LAorIHsxNiwgMHg5YjIwLCAwLCB7MHgzMCwweDQwLDB4MGQsMHg5YSwweDAzLDB4MjIsMHg4NCwweGM4LDB4MTQsMHgzMiwweDQwLDB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4OWIzMCwgMCwgezB4YzksMHgwMCwweDgyLDB4NjgsMHgyYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliNDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MjIsMHgyNCwweDAwLDB4ODksMHgwMiwweDgyIH19LAorIHsxNiwgMHg5YjUwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGU3LDB4NDAsMHg4OSwweDgwLDB4MzYsMHg0MSwweDhkLDB4MTgsMHgwMiwweGEwLDB4MjQsMHhhOCB9fSwKKyB7MTYsIDB4OWI2MCwgMCwgezB4MDQsMHg2MiwweDQwLDB4MDgsMHg5NCwweDgzLDB4MjQsMHgwMCwweDg5LDB4MDEsMHgyMiwweDcyLDB4MDgsMHg5MCwweDBiLDB4MjAgfX0sCisgezE2LCAweDliNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDk5LDB4MDAsMHgyYSwweDQwIH19LAorIHsxNiwgMHg5YjgwLCAwLCB7MHgyOCwweDkwLDB4MTIsMHgwNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhhNCwweDIwLDB4OTksMHgwMCB9fSwKKyB7MTYsIDB4OWI5MCwgMCwgezB4MjIsMHg0MCwweDE4LDB4OTAsMHgwNiwweDIwLDB4MDEsMHg4OCwweDA4LDB4NjIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDM0LDB4MTAgfX0sCisgezE2LCAweDliYTAsIDAsIHsweDhkLDB4ODEsMHgyMywweDQxLDB4MDgsMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YmIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MDQsMHgyYywweDQ4LDB4MDgsMHgxMiwweDAyLDB4MDQsMHgwMiwweDgzLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4OWJjMCwgMCwgezB4NDgsMHgwOCwweDEyLDB4MDIsMHhjNCwweDgwLDB4ODMsMHg2MCwweDI0LDB4NDgsMHgxOSwweDM0LDB4NjIsMHhhNSwweDA0LDB4YTEgfX0sCisgezE2LCAweDliZDAsIDAsIHsweDAyLDB4NjAsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDU0LDB4MDAsMHg4ZCwweDAwLDB4MjksMHg0MCwweDA4LDB4MTIsMHg4MiwweDAyIH19LAorIHsxNiwgMHg5YmUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4M2EsMHg4MCB9fSwKKyB7MTYsIDB4OWJmMCwgMCwgezB4MGMsMHg4NSwweDAyLDB4MjEsMHg0NCwweDg4LDB4NTAsMHgzMiwweDE0LDB4NGMsMHg4MCwweDQzLDB4ZTAsMHgwMCwweGQ4LDB4MDAgfX0sCisgezE2LCAweDljMDAsIDAsIHsweDIyLDB4MTQsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMCwweGEyLDB4MDAsMHgwZSwweDgwLDB4MDMsMHgyMCwweDAwIH19LAorIHsxNiwgMHg5YzEwLCAwLCB7MHhjOCwweDAwLDB4MzMsMHgwMCwweDBjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWMyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDQsMHhmZCwweDAwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4MTAsMHhmZiwweDEwLDB4M2UgfX0sCisgezE2LCAweDljMzAsIDAsIHsweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGIsMHhmMCwweDEzLDB4ZTUsMHgxMCwweGY5IH19LAorIHsxNiwgMHg5YzQwLCAwLCB7MHg0MCwweDNmLDB4NGEsMHgyZiwweDkyLDB4OGEsMHhhNCwweGEyLDB4ZjksMHgyOCwweDM2LDB4NDAsMHgwZiwweDkyLDB4ODMsMHhhNiB9fSwKKyB7MTYsIDB4OWM1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhlNiwweGMwLDB4YzEsMHgwMCwweDNmLDB4NjkgfX0sCisgezE2LCAweDljNjAsIDAsIHsweDBjLDB4OWEsMHg0MywweDZjLDB4MDAsMHhmZCwweGEwLDB4M2UsMHg3OCwweDJjLDB4ZDgsMHgwNywweGQ2LDB4MDIsMHhkNSwweDk2IH19LAorIHsxNiwgMHg5YzcwLCAwLCB7MHgzMiwweDc4LDB4MGQsMHg5MCwweDAzLDB4MjcsMHgwMCwweGZkLDB4YTAsMHgzNSwweDUwLDB4MDYsMHhkNCwweDAzLDB4ZTUsMHgwMCB9fSwKKyB7MTYsIDB4OWM4MCwgMCwgezB4ZmQsMHg0MCwweGIzLDB4NDAsMHgwZiwweDk4LDB4YTMsMHg0NiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDljOTAsIDAsIHsweDM4LDB4MTAsMHhlMywweGMyLDB4ODgsMHg4OCwweDJlLDB4MTQsMHhhOCwweDhhLDB4YzIsMHgyMiwweGEwLDB4YjgsMHhjMCwweDJjIH19LAorIHsxNiwgMHg5Y2EwLCAwLCB7MHgyNCwweDQ4LDB4ODQsMHgwMiwweGUxLDB4MDAsMHg5OCwweGM0LDB4MjAsMHgzYywweDA4LDB4OGEsMHg4MiwweDIzLDB4ODAsMHhiOCB9fSwKKyB7MTYsIDB4OWNiMCwgMCwgezB4MDQsMHgyMiwweDIwLDB4MDgsMHg4OCwweDAzLDB4YTIsMHgwMCwweGI4LDB4YTAsMHgyMiwweDAwLDB4MGIsMHg4OCwweDAyLDB4MGUgfX0sCisgezE2LCAweDljYzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweGExLDB4MjAsMHg2YywweDQwIH19LAorIHsxNiwgMHg5Y2QwLCAwLCB7MHgwYSwweDE0LDB4MDIsMHg0NCwweDA0LDB4YTEsMHg2OCwweDJjLDB4NDgsMHgwOCwweDE0LDB4MDIsMHhjNSwweDAwLDB4ODEsMHg2MCB9fSwKKyB7MTYsIDB4OWNlMCwgMCwgezB4MjAsMHg0OCwweDE5LDB4OTAsMHgwMiwweDg1LDB4ODEsMHhiMSwweDQwLDB4MjQsMHg2OCwweDBhLDB4MTIsMHg0MiwweGM0LDB4ODAgfX0sCisgezE2LCAweDljZjAsIDAsIHsweGI5LDB4MjAsMHgyMCwweDQwLDB4OGIsMHgxMCwweDgyLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZDAwLCAwLCB7MHgxOCwweDA1LDB4YTQsMHgxMCwweGE5LDB4MDAsMHg2ZSwweGMwLDB4MGEsMHgxMCwweDAyLDB4MjQsMHgxNCwweGI5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4OWQxMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MTIsMHhlNCwweDAwLDB4OTksMHgwMCwweDIyLDB4NDAsMHgwOCwweDgwLDB4MDYsMHhhMCwweDYwLDB4YjkgfX0sCisgezE2LCAweDlkMjAsIDAsIHsweDA5LDB4MjIsMHg2MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiOSwweDAwLDB4MDIsMHg0MCwweDBiLDB4MTAsMHgwNiwweDA2IH19LAorIHsxNiwgMHg5ZDMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU0LDB4MDAsMHhlOSwweDgwLDB4M2UsMHg0MSB9fSwKKyB7MTYsIDB4OWQ0MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4NjQsMHgwMCwweGU5LDB4YzAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGM5LDB4MDAgfX0sCisgezE2LCAweDlkNTAsIDAsIHsweDIyLDB4NDEsMHgwZCwweDgwLDB4MDIsMHhhMywweDA0LDB4ZjEsMHg0MCwweDM2LDB4NDAsMHgwZSwweDkwLDB4MDIsMHhlNCwweDAwIH19LAorIHsxNiwgMHg5ZDYwLCAwLCB7MHhmMSwweDAwLDB4MTIsMHg0MCwweDBmLDB4OTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWQ3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhkOSwweDIyLDB4M2UsMHg0MiwweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhiOSwweGM0LDB4M2MgfX0sCisgezE2LCAweDlkODAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDIsMHhhZSwweDQwLDB4MGYsMHg4MCwweDRiLDB4NjIsMHgxMCwweGY5IH19LAorIHsxNiwgMHg5ZDkwLCAwLCB7MHgyMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMiwweDdlLDB4NDEsMHgwZiwweDkwLDB4MTMsMHhjYSB9fSwKKyB7MTYsIDB4OWRhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHg4MCwweDAwLDB4YzgsMHgwMCwweDM4LDB4MDAgfX0sCisgezE2LCAweDlkYjAsIDAsIHsweDBmLDB4ODAsMHgyMCwweGUwLDB4MDAsMHhhOCwweDIwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwNywweGUwLDB4ODAsMHhjOCwweDAwIH19LAorIHsxNiwgMHg5ZGMwLCAwLCB7MHgzOCwweDAwLDB4MGQsMHg4MCwweDgzLDB4MjEsMHgxMCwweGY4LDB4NjAsMHgzMiwweDAwLDB4OGUsMHg4MCwweGIzLDB4MjAsMHgwOCB9fSwKKyB7MTYsIDB4OWRkMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDA0LDB4OGEsMHgwMCwweDMzLDB4OTAsMHg0MywweGEwLDB4MjIsMHgyOCwweDAwLDB4OGUsMHg4MCwweDc2IH19LAorIHsxNiwgMHg5ZGYwLCAwLCB7MHg4MCwweDA4LDB4ZTEsMHgwMywweDE5LDB4MDAsMHg4NiwweDgwLDB4MjIsMHg4MCwweDBkLDB4NjAsMHgwMSwweDc4LDB4MDAsMHhiZSB9fSwKKyB7MTYsIDB4OWUwMCwgMCwgezB4MDAsMHgzNiwweDgwLDB4MGMsMHhlNCwweDAyLDB4YTgsMHgxMCwweGJlLDB4YTAsMHgyZiwweDgwLDB4MGQsMHhhMCwweDAyLDB4MGEgfX0sCisgezE2LCAweDllMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDExLDB4NGMsMHgwNCwweDAzLDB4MDQsMHgyYywweGQ0IH19LAorIHsxNiwgMHg5ZTIwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHg0YywweDAxLDB4YTMsMHhjNCwweDIwLDB4YzAsMHgyOCwweDM1LDB4MDIsMHg4NiwweDAwLDB4ODMsMHg4MCB9fSwKKyB7MTYsIDB4OWUzMCwgMCwgezB4MjgsMHhjMCwweDA4LDB4MzgsMHgwNiwweDBlLDB4OTQsMHgzMCwweGMwLDB4YTIsMHhjMCwweDBiLDB4M2MsMHgwMiwweDBjLDB4MDAgfX0sCisgezE2LCAweDllNDAsIDAsIHsweGIzLDB4ODAsMHgyYywweDQ4LDB4MDgsMHgzMCwweDAyLDB4OGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZTUwLCAwLCB7MHhhMCwweDAxLDB4MGMsMHgwNCwweDhmLDB4ODAsMHgyMSwweGMxLDB4MWIsMHg3MiwweDQyLDB4MWUsMHhjMCwweDgzLDB4ODgsMHgyMSB9fSwKKyB7MTYsIDB4OWU2MCwgMCwgezB4YzAsMHgxOCwweDI4LDB4MDYsMHgxMCwweDIxLDB4ODYsMHgzOCwweDIxLDB4YzAsMHgxOSwweGY3LDB4MDIsMHg1ZCwweGMwLDB4YjQgfX0sCisgezE2LCAweDllNzAsIDAsIHsweDQxLDB4MjcsMHhkMCwweDA4LDB4NzgsMHhjNiwweDljLDB4MDAsMHhiNywweDAwLDB4MmYsMHg2MCwweDA5LDB4NzIsMHgwMiwweDI4IH19LAorIHsxNiwgMHg5ZTgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDIsMHhjNywweDgwLDB4MmQsMHhhMCB9fSwKKyB7MTYsIDB4OWU5MCwgMCwgezB4MGYsMHgzZSwweDAzLDB4ZmUsMHg4MCwweGE3LDB4ODAsMHhhMSwweGUwLDB4MGMsMHg3OCwweDAyLDB4OTQsMHgwMCwweDg1LDB4YTAgfX0sCisgezE2LCAweDllYTAsIDAsIHsweDM5LDB4ZTQsMHgwYywweDc4LDB4MTMsMHgxZSwweDkwLDB4YjUsMHg4NCwweDMxLDB4ZTAsMHgwZiwweGY4LDB4ODcsMHgxZSwweDA0IH19LAorIHsxNiwgMHg5ZWIwLCAwLCB7MHhmNywweDgwLDB4M2QsMHg2MCwweDBjLDB4M2IsMHgwMywweGFhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWVjMCwgMCwgezB4MDgsMHgxZCwweGFkLDB4ZTQsMHhmYiwweDU0LDB4M2UsMHg4MCwweDBmLDB4YjQsMHgyMywweGVjLDB4MzIsMHhmYiwweDAwLDB4M2UgfX0sCisgezE2LCAweDllZDAsIDAsIHsweGQ4LDB4NGYsMHhhMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweGMwLDB4MGYsMHgzMCwweDMzLDB4ZWMsMHgwNCwweGYyIH19LAorIHsxNiwgMHg5ZWUwLCAwLCB7MHgwMSwweDNlLDB4YzAsMHgwZiwweGIyLDB4MDMsMHhmZSwweDEwLDB4ZmIsMHg2OCwweDNjLDB4NDEsMHgwZiwweGYwLDB4NDMsMHg4MiB9fSwKKyB7MTYsIDB4OWVmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4Y2YsMHhlNCwweDNmLDB4ZTQgfX0sCisgezE2LCAweDlmMDAsIDAsIHsweDBjLDB4ZmMsMHgwMywweDdlLDB4ODAsMHhjZiwweDgxLDB4MzMsMHhmYSwweDBmLDB4ZjgsMHgwMywweGY2LDB4MDAsMHhmZiwweDgwIH19LAorIHsxNiwgMHg5ZjEwLCAwLCB7MHgzZiwweGUyLDB4MGYsMHg3OSwweDAzLDB4M2UsMHg0MCwweGY0LDB4ODAsMHgzMywweDYwLDB4MGMsMHhlOCwweDAzLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4OWYyMCwgMCwgezB4ZmYsMHg4MCwweDMzLDB4NjAsMHgwYywweGY4LDB4ODMsMHg1MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmMzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ZDcsMHhhMCwweDJkLDB4YzQsMHgwOCwweGJhLDB4MDIsMHgzYywweGEwLDB4ODcsMHgyMCwweDIxIH19LAorIHsxNiwgMHg5ZjQwLCAwLCB7MHhjMCwweDBmLDB4NTIsMHgwMywweGQ0LDB4MDAsMHhiNiwweDEwLDB4MmQsMHhjMCwweDhiLDB4NzMsMHgwMywweDVjLDB4NDAsMHhiNCB9fSwKKyB7MTYsIDB4OWY1MCwgMCwgezB4YjAsMHgyYiwweDQ4LDB4MjgsMHg0MSwweDAyLDB4MGMsMHgwMCwweGJmLDB4MTgsMHgzNSwweDQ2LDB4MjgsMHg3MiwweDQyLDB4MmEgfX0sCisgezE2LCAweDlmNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4OWMsMHgwMCwweDg3LDB4NDEsMHgyZCwweDQ0IH19LAorIHsxNiwgMHg5ZjcwLCAwLCB7MHgwYSwweDczLDB4MDIsMHg5YywweGM0LDB4ODEsMHgwMCwweDZkLDB4YzgsMHg4YiwweDcwLDB4MDIsMHhkNCwweDAwLDB4YjcsMHgwMCB9fSwKKyB7MTYsIDB4OWY4MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4ZjAsMHg0NiwweDljLDB4NTUsMHhiNCwweDIwLDB4MjUsMHg0MCwweDE4LDB4NjAsMHg4MiwweDFjLDB4MDAgfX0sCisgezE2LCAweDlmOTAsIDAsIHsweGI3LDB4MDAsMHgyMywweDQwLDB4MDgsMHg3MCwweDQ2LDB4NDQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZmEwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwMCwweDkzLDB4MDAsMHgyYywweDQwLDB4MGIsMHhiMCwweDAyLDB4MGMsMHg4MiwweDgwLDB4YzAsMHgyMCB9fSwKKyB7MTYsIDB4OWZiMCwgMCwgezB4YzAsMHgwYSwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgxYiwweDMwLDB4MDAsMHhjZCwweDAxLDB4YjAgfX0sCisgezE2LCAweDlmYzAsIDAsIHsweDQwLDB4YWMsMHg3OCwweDg4LDB4OGMsMHgwNiwweDBkLDB4NjAsMHhiMywweDRjLDB4MjQsMHgxMiwweDA4LDB4MzAsMHgwYSwweDE4IH19LAorIHsxNiwgMHg5ZmQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgxNSwweGJjLDB4MDAsMHhjNywweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4OWZlMCwgMCwgezB4MGUsMHhmMCwweDJhLDB4YmYsMHgwMCwweGM4LDB4YzgsMHhiZiwweGMwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwNCwweGJmLDB4MDAgfX0sCisgezE2LCAweDlmZjAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGIyLDB4MGEsMHhhYywweDAwLDB4ZjgsMHg4MCwweDM0LDB4NDksMHgwYywweGI5LDB4MGIsMHgzZiwweDAwIH19LAorIHsxNiwgMHhhMDAwLCAwLCB7MHhmYiwweGMwLDB4MzAsMHhmMCwweDBjLDB4ZjAsMHgwMywweDZlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTAxMCwgMCwgezB4ODAsMHgwMCwweGNjLDB4MDAsMHhmYiwweDgwLDB4M2UsMHg0MSwweDJjLDB4YjAsMHgxMywweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UgfX0sCisgezE2LCAweGEwMjAsIDAsIHsweGMxLDB4MGYsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDBiLDB4NmQsMHg0MCwweGY4IH19LAorIHsxNiwgMHhhMDMwLCAwLCB7MHgxMCwweDNhLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhlYywweDEwLDB4ZmUsMHg0MCwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlMSB9fSwKKyB7MTYsIDB4YTA0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhlYywweDBjLDB4ZGYsMHgwMCwweDNiLDB4ODAgfX0sCisgezE2LCAweGEwNTAsIDAsIHsweDBmLDB4ZjAsMHgwYiwweDNjLDB4MDgsMHhlNywweDA4LDB4MzMsMHhjMCwweDBiLDB4ZDAsMHgyMywweDc0LDB4MDAsMHg1NCwweDAwIH19LAorIHsxNiwgMHhhMDYwLCAwLCB7MHgzMywweGMwLDB4MGYsMHhmMCwweDgzLDB4YmUsMHgyMCwweGZkLDB4MGMsMHgzYiwweDYwLDB4MmMsMHhlMCwweDAzLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4YTA3MCwgMCwgezB4Y2YsMHgxMiwweDMzLDB4NTAsMHgwYywweDMwLDB4MDMsMHg4MCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwODAsIDAsIHsweDgxLDB4MDQsMHg2YywweDA0LDB4YWIsMHgwMCwweDIyLDB4YTAsMHgwYiwweGIwLDB4MDYsMHgwYywweDAwLDB4YWIsMHg0MCwweDM2IH19LAorIHsxNiwgMHhhMDkwLCAwLCB7MHhjMCwweDBiLDB4YTgsMHgwMiwweDY2LDB4MDAsMHhiOCwweDAwLDB4MzYsMHhjMSwweDBiLDB4MzQsMHg0MywweGVlLDB4MDAsMHhiMiB9fSwKKyB7MTYsIDB4YTBhMCwgMCwgezB4MDAsMHgyMiwweDYwLDB4MDgsMHhiNCwweDgyLDB4OGMsMHgwNCwweDhhLDB4MjEsMHgyMiwweDQwLDB4MDgsMHhiMCwweDAyLDB4MjAgfX0sCisgezE2LCAweGEwYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDliLDB4MDAsMHgyYSwweDIwIH19LAorIHsxNiwgMHhhMGMwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4ODgsMHhjNSwweDIyLDB4YzAsMHgwYiwweDg4LDB4ODIsMHhlNiwweDAxLDB4YmIsMHgwOCB9fSwKKyB7MTYsIDB4YTBkMCwgMCwgezB4MjIsMHhjMCwweDBhLDB4YjIsMHg4MiwweGFjLDB4NjAsMHhiOCwweDAyLDB4NGEsMHhjNCwweDA4LDB4YjEsMHgwMiwweDJjLDB4MDAgfX0sCisgezE2LCAweGEwZTAsIDAsIHsweDgzLDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMGYwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGFiLDB4MjAsMHgyMCwweDAxLDB4MGIsMHgzMiwweDA2LDB4MmMsMHgwMCwweGEwLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YTEwMCwgMCwgezB4YzAsMHgwOSwweDA0LDB4MjIsMHhjNCwweDAwLDB4YjIsMHgwMCwweDI0LDB4YzEsMHg4YiwweGIwLDB4MDIsMHg0YywweDAwLDB4YjAgfX0sCisgezE2LCAweGExMTAsIDAsIHsweDAwLDB4NjIsMHhjMCwweDQ4LDB4MzAsMHgwMiwweGFjLDB4MTAsMHg4MiwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDAyIH19LAorIHsxNiwgMHhhMTIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDgsMHhkZiwweDJhLDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4YTEzMCwgMCwgezB4MGYsMHhmNSwweDEyLDB4M2MsMHgxMCwweGM5LDB4MDAsMHhhMywweGMwLDB4MGYsMHg4MCwweDUzLDB4ZWMsMHgwMSwweGRhLDB4MDAgfX0sCisgezE2LCAweGExNDAsIDAsIHsweDMzLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhhYywweDA0LDB4ZjgsMHg3MCwweDNhLDB4YzAsMHgwYywweDYwLDB4NDMsMHgyYywweDQyIH19LAorIHsxNiwgMHhhMTUwLCAwLCB7MHhjZCwweDAwLDB4YjIsMHg0MCwweDJjLDB4ZjAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTE2MCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmYiwweDAxLDB4M2QsMHgwMCwweDBmLDB4YjQsMHgxNywweGZjLDB4MDAsMHgzYywweDAwLDB4M2YgfX0sCisgezE2LCAweGExNzAsIDAsIHsweGMwLDB4NGYsMHhjMCwweDAzLDB4NzQsMHgwOCwweGZlLDB4MDAsMHgzZiwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZmMsMHgwOCwweGY4IH19LAorIHsxNiwgMHhhMTgwLCAwLCB7MHgzMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDA0LDB4ZmMsMHgwMCwweDNkLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4YTE5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNCwweDkwLDB4ZWYsMHgwMCwweDNmLDB4ZDggfX0sCisgezE2LCAweGExYTAsIDAsIHsweDBlLDB4ZjMsMHgwMywweDJjLDB4MDEsMHhkNCwweDgwLDB4MzcsMHhjYywweDBkLDB4ODksMHg0MywweDEyLDB4NTAsMHhlYywweDJjIH19LAorIHsxNiwgMHhhMWIwLCAwLCB7MHgzMiwweDA1LDB4MGQsMHhiMCwweDUzLDB4M2MsMHhkNCwweGM1LDB4OTQsMHg3ZiwweGEwLDB4OGYsMHhmMCwweDQzLDB4MzAsMHgwMCB9fSwKKyB7MTYsIDB4YTFjMCwgMCwgezB4ZGMsMHgwMCwweDMzLDB4MDAsMHgwYywweDQ4LDB4MDcsMHhmMCwweDAwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExZDAsIDAsIHsweDgwLDB4MTAsMHhlNiwweDQwLDB4OGIsMHg3MCwweDJmLDB4ZGMsMHgwOCwweGY3LDB4MDIsMHgwYywweDgwLDB4OGEsMHgyMCwweDAwIH19LAorIHsxNiwgMHhhMWUwLCAwLCB7MHhjOCwweDRhLDB4MjIsMHgwMiwweGEwLDB4MDAsMHg4YSwweDQ4LDB4MjIsMHg1OCwweDg4LDB4ZmQsMHgwMiwweGFkLDB4MDIsMHhhOSB9fSwKKyB7MTYsIDB4YTFmMCwgMCwgezB4MjAsMHgxZSwweGEwLDB4MDMsMHg4MCwweDAyLDB4MmMsMHgwNCwweDhiLDB4MDAsMHgyMiwweGMwLDB4NGMsMHg4OCwweDA3LDB4NjAgfX0sCisgezE2LCAweGEyMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzAsMHgwMCwweDIzLDB4MmMsMHgyYywweGM5IH19LAorIHsxNiwgMHhhMjEwLCAwLCB7MHgwMiwweDMwLDB4MDIsMHgwYywweDY4LDB4YTAsMHgyOCwweDJjLDB4ZDAsMHgwOSwweDEyLDB4MDIsMHg4NCwweDAwLDB4YTAsMHgyMSB9fSwKKyB7MTYsIDB4YTIyMCwgMCwgezB4MjAsMHgxOCwweDE5LDB4MzAsMHgyMiwweDgwLDB4ZDAsMHg4MywweDA2LDB4MGMsMHhhMCwweDBiLDB4YjAsMHgwNiwweDAwLDB4MTIgfX0sCisgezE2LCAweGEyMzAsIDAsIHsweGEwLDB4MDAsMHgyMCwweDAwLDB4MjksMHgwMCwweDBlLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMjQwLCAwLCB7MHhjMCwweDExLDB4YTgsMHgzMCwweDhiLDB4MDAsMHgyZSwweGMwLDB4NGEsMHgzMCwweDBhLDB4MmMsMHgxNCwweGEwLDB4ODAsMHgwYSB9fSwKKyB7MTYsIDB4YTI1MCwgMCwgezB4YzEsMHgwOCwweDg4LDB4ODYsMHg4NywweDAwLDB4ODMsMHgwMCwweDIyLDB4NDksMHgwOCwweGIwLDB4MDYsMHhhMCwweDQwLDB4YWIgfX0sCisgezE2LCAweGEyNjAsIDAsIHsweDIwLDB4MjIsMHgyMCwweDBiLDB4ODAsMHgwYSwweDBjLDB4MDQsMHhhYiwweDAyLDB4MjIsMHhjMCwweDg4LDB4ODAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhhMjcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVmLDB4NDAsMHhlYiwweDA2LDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4YTI4MCwgMCwgezB4MGUsMHhiMCwweDAzLDB4MmMsMHgwMiwweGY5LDB4YTAsMHgzZSwweGMwLDB4MGQsMHg4YywweDAzLDB4YWEsMHgxMCwweGU5LDB4NDAgfX0sCisgezE2LCAweGEyOTAsIDAsIHsweGIyLDB4NDgsMHgwZCwweGIwLDB4NDMsMHhhZCwweDAwLDB4Y2IsMHg4NiwweDJlLDB4MjAsMHgwZiwweDMwLDB4MDMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhMmEwLCAwLCB7MHhmOSwweDgwLDB4MzIsMHhjMCwweDBkLDB4MGMsMHhjMiwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTJiMCwgMCwgezB4ZTAsMHgwMSwweDk0LDB4MDAsMHhmZiwweDAwLDB4M2QsMHhjMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhkZiwweDAwLDB4MzcgfX0sCisgezE2LCAweGEyYzAsIDAsIHsweGMwLDB4MGYsMHhlMCwweDAzLDB4ZjAsMHgwMCwweGZlLDB4MjAsMHgzZiwweDQwLDB4MGYsMHg3MCwweDAzLDB4ZmUsMHgwMCwweGZmIH19LAorIHsxNiwgMHhhMmQwLCAwLCB7MHg4MiwweDdmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhmOSwweDA0LDB4ZGUsMHgyMCwweGJkLDB4MDAsMHgwZiwweGQ5LDB4MGIsMHg3YyB9fSwKKyB7MTYsIDB4YTJlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAxLDB4Y2IsMHgwMCwweDNlLDB4YzAgfX0sCisgezE2LCAweGEyZjAsIDAsIHsweDJjLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhlOCwweDQwLDB4M2UsMHhjMCwweDBmLDB4OTQsMHgwNywweDI5LDB4MDAsMHhjOSwweDQwIH19LAorIHsxNiwgMHhhMzAwLCAwLCB7MHhiMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4MDEsMHgwMiwweGNiLDB4MDAsMHgzMiwweDA0LDB4NGYsMHhmMCwweDQzLDB4MzQsMHhjMCB9fSwKKyB7MTYsIDB4YTMxMCwgMCwgezB4YjUsMHgxYSwweDNmLDB4YzEsMHgwZiwweDgwLDB4OTMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEzMjAsIDAsIHsweGM4LDB4MDUsMHgyOCwweDAwLDB4OGYsMHgwMCwweDJmLDB4YzAsMHgwOCwweGYwLDB4MDIsMHgzYywweDA0LDB4ZDgsMHgwMCwweDJiIH19LAorIHsxNiwgMHhhMzMwLCAwLCB7MHhjMCwweDBjLDB4ODAsMHg0NSwweDYwLDB4MDAsMHg3YiwweDU4LDB4MjIsMHhjOCwweDBiLDB4ZmEsMHgwMSwweDYxLDB4NDAsMHg4YiB9fSwKKyB7MTYsIDB4YTM0MCwgMCwgezB4MDAsMHgzMiwweDA0LDB4NGIsMHhjZSwweDAyLDB4MjgsMHgwMCwweDNhLDB4NDAsMHgyZSwweDA3LDB4MGIsMHg5MCwweDAyLDB4MjYgfX0sCisgezE2LCAweGEzNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MDEsMHg0YywweGMwIH19LAorIHsxNiwgMHhhMzYwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHhlYywweDEwLDB4OTAsMHgwMCwweDJhLDB4YzAsMHgwYSwweDgwLDB4MDYsMHhjMCwweDA0LDB4ODMsMHgwNCB9fSwKKyB7MTYsIDB4YTM3MCwgMCwgezB4YTIsMHg4OSwweDE5LDB4MzAsMHgwNiwweGNjLDB4MDAsMHg4MywweDAwLDB4MjAsMHg5MCwweDBiLDB4MzAsMHhjMiwweDQ4LDB4MDAgfX0sCisgezE2LCAweGEzODAsIDAsIHsweGIyLDB4NDAsMHgyNCwweDIwLDB4MGIsMHgwOSwweDAwLDB4YjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMzkwLCAwLCB7MHgyMCwweDAxLDB4MDYsMHgwNCwweDg3LDB4YTQsMHgyZCwweGUwLDB4MDksMHgzOCwweDAyLDB4ZGUsMHgwMCwweDllLDB4ODEsMHgyOSB9fSwKKyB7MTYsIDB4YTNhMCwgMCwgezB4ZTAsMHgwOCwweDc4LDB4NTIsMHhmYSwweGMwLDB4OTYsMHg4MCwweDAxLDB4YTAsMHg4YiwweDNhLDB4MjIsMHhjZSwweDQwLDB4OGYgfX0sCisgezE2LCAweGEzYjAsIDAsIHsweGIwLDB4MjUsMHhhMCwweDBiLDB4MDgsMHgwMiwweDU2LDB4MDgsMHhiNSwweDkwLDB4MmQsMHhlNCwweDRiLDB4ZDgsMHgyMiwweDBjIH19LAorIHsxNiwgMHhhM2MwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDA4LDB4MDIsMHg4MywweDgwLDB4MmUsMHhlOCB9fSwKKyB7MTYsIDB4YTNkMCwgMCwgezB4MGIsMHgzOCwweDEzLDB4Y2UsMHg0MSwweGQzLDB4MTAsMHgyOCwweGMwLDB4MGUsMHgzYSwweDAyLDB4YzYsMHgwOCwweDRiLDB4NDAgfX0sCisgezE2LCAweGEzZTAsIDAsIHsweDMwLDB4NjAsMHgwZCwweDNiLDB4MjcsMHhjZiwweGM0LDB4YzMsMHhhMCwweDMwLDB4MDAsMHgwZiwweDMwLDB4NDMsMHg0OCwweDQwIH19LAorIHsxNiwgMHhhM2YwLCAwLCB7MHhmMiwweDAwLDB4M2MsMHgwNCwweDBmLDB4MDIsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTQwMCwgMCwgezB4NDAsMHgxZCwweGI4LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjNCwweDBlLDB4ZjEsMHgwMywweDNjLDB4MDAsMHhmZiwweDAxLDB4MzMgfX0sCisgezE2LCAweGE0MTAsIDAsIHsweGMwLDB4NGQsMHhiMSwweDA3LDB4N2MsMHg5MCwweGZmLDB4MDAsMHgzZiwweDQwLDB4MDMsMHhmMSwweDAzLDB4NzAsMHgwMCwweGZiIH19LAorIHsxNiwgMHhhNDIwLCAwLCB7MHgxMCwweDNiLDB4MDAsMHgwZiwweGMwLDB4MGIsMHhiNCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4YzQsMHgwZiwweGQwLDB4MDMsMHg5MCB9fSwKKyB7MTYsIDB4YTQzMCwgMCwgezB4MDIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDA0LDB4ZmIsMHg4NCwweDNhLDB4YzIgfX0sCisgezE2LCAweGE0NDAsIDAsIHsweDRjLDB4YjQsMHg5MywweDJjLDB4MDQsMHhlOSwweDAwLDB4M2EsMHhjNCwweDhkLDB4MDgsMHgwMywweDJlLDB4MDAsMHhjYiwweDAxIH19LAorIHsxNiwgMHhhNDUwLCAwLCB7MHgzMiwweDgwLDB4OGYsMHhiMiwweDgzLDB4ZWMsMHgwMCwweGNiLDB4ODAsMHgzMiwweDAwLDB4MGYsMHhmOSwweDAzLDB4M2MsMHgxMCB9fSwKKyB7MTYsIDB4YTQ2MCwgMCwgezB4ZGYsMHg4MSwweGIzLDB4ZTAsMHg4YywweGEwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0NzAsIDAsIHsweDQ4LDB4MTEsMHg5NCwweDA4LDB4YjcsMHgwNCwweDI0LDB4YzgsMHgxYSwweDMwLDB4NGEsMHgxZCwweDAwLDB4YjcsMHgwMSwweDJkIH19LAorIHsxNiwgMHhhNDgwLCAwLCB7MHhjMCwweDg4LDB4NzAsMHgwNiwweDFjLDB4MDAsMHg4MiwweDAwLDB4MjEsMHg4MCwweDRiLDB4NzYsMHgxMiwweGRjLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4YTQ5MCwgMCwgezB4MDAsMHgyOSwweDQwLDB4OGIsMHg0MCwweDAyLDB4MTAsMHgwMCwweGJjLDB4MDAsMHgyMCwweDAxLDB4MjgsMHg3MCwweDAzLDB4YjIgfX0sCisgezE2LCAweGE0YTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgwMCwweGIzLDB4OTAsMHgyZCwweGU0IH19LAorIHsxNiwgMHhhNGIwLCAwLCB7MHgwOSwweDc5LDB4MDIsMHgxZSwweDgwLDB4YTcsMHg4MCwweDJjLDB4ZTgsMHgxOSwweGY4LDB4MTIsMHg1ZSwweDAxLDB4ODcsMHg4MCB9fSwKKyB7MTYsIDB4YTRjMCwgMCwgezB4MjUsMHhlMCwweDRiLDB4NzgsMHgwNiwweGQyLDB4MDAsMHg5NywweDgwLDB4MjEsMHg2MiwweDBiLDB4M2EsMHgwMiwweDFlLDB4MDAgfX0sCisgezE2LCAweGE0ZDAsIDAsIHsweGI3LDB4ODYsMHgyOSwweGYwLDB4MDgsMHg2OCwweDA2LDB4ZTAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNGUwLCAwLCB7MHg0OCwweDE0LDB4Y2YsMHhjMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4OGEsMHgzMCwweDMyLDB4MGMsMHgwMCwweGIzLDB4MDgsMHgyYyB9fSwKKyB7MTYsIDB4YTRmMCwgMCwgezB4YzAsMHgwOCwweDMwLDB4MTIsMHgwZSwweDIwLDB4ODMsMHgwMCwweDI0LDB4ZjEsMHgwYiwweDMwLDB4MDYsMHhjZSwweDAwLDB4ODMgfX0sCisgezE2LCAweGE1MDAsIDAsIHsweDkwLDB4MjgsMHg2MCwweDBiLDB4MDAsMHgyYSwweDIxLDB4ODAsMHhiMCwweDA4LDB4MjgsMHgwMCwweDA4LDB4MzcsMHgwMiwweDkyIH19LAorIHsxNiwgMHhhNTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4YTUyMCwgMCwgezB4NGQsMHhhMCwweDAzLDB4MjgsMHgwMCwweGVlLDB4NDEsMHgzZSwweDgwLDB4MGQsMHhlMCwweDAzLDB4NzgsMHgwMCwweDhlLDB4NDAgfX0sCisgezE2LCAweGE1MzAsIDAsIHsweDI3LDB4YTgsMHgwYiwweGEwLDB4MDMsMHhmYiwweDAyLDB4Y2EsMHg4MiwweDMzLDB4YTAsMHgwZiwweGEwLDB4MTMsMHgyOSwweDAwIH19LAorIHsxNiwgMHhhNTQwLCAwLCB7MHhmYSwweDQwLDB4M2EsMHg4MCwweDBjLDB4NmMsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTU1MCwgMCwgezB4NDgsMHgwMCwweGMwLDB4MDAsMHhmOCwweDAwLDB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDgsMHhmOCwweDAwLDB4M2UgfX0sCisgezE2LCAweGE1NjAsIDAsIHsweDAwLDB4OGYsMHg4MCwweDIzLDB4YTAsMHg0MiwweGY4LDB4MDksMHhiYSwweDEwLDB4NGYsMHg4MCwweDAzLDB4ZTAsMHg2MCwweGY4IH19LAorIHsxNiwgMHhhNTcwLCAwLCB7MHgwMCwweDNlLDB4MjAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDI3LDB4MDAsMHg4ZiwweDgwLDB4MDMsMHg5MiB9fSwKKyB7MTYsIDB4YTU4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNSwweDAwLDB4ODksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGE1OTAsIDAsIHsweDZlLDB4OTAsMHgwMywweGE0LDB4MDgsMHhjOSwweDAwLDB4M2MsMHg0MCwweDBkLDB4OTAsMHgwMywweDI0LDB4MTAsMHhmOSwweGEwIH19LAorIHsxNiwgMHhhNWEwLCAwLCB7MHgzMiwweDQyLDB4MGMsMHg5MCwweDEzLDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHg0MCB9fSwKKyB7MTYsIDB4YTViMCwgMCwgezB4YzksMHgyMCwweDNlLDB4NTIsMHhjZiwweDkwLDB4MDksMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE1YzAsIDAsIHsweDgwLDB4MDQsMHg2NiwweDAwLDB4ODksMHgwNCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ZDksMHgwMCwweDNhIH19LAorIHsxNiwgMHhhNWQwLCAwLCB7MHg0MSwweDA4LDB4OTAsMHgwNSwweGE0LDB4MDAsMHhiOSwweDQwLDB4YTIsMHg0MCwweDBkLDB4OTAsMHgwMiwweGU1LDB4NDYsMHg4OSB9fSwKKyB7MTYsIDB4YTVlMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDEyLDB4ZTUsMHgwMCwweGE5LDB4YzgsMHgyZSwweDYxLDB4OGIsMHg5NCwweDQyLDB4MjAgfX0sCisgezE2LCAweGE1ZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGE5LDB4MDAsMHg2YywweDQwIH19LAorIHsxNiwgMHhhNjAwLCAwLCB7MHg0OCwweDEwLDB4MjIsMHg4NCwweDAzLDB4YTksMHgwMCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDA0LDB4YjEsMHgwOCB9fSwKKyB7MTYsIDB4YTYxMCwgMCwgezB4MjgsMHg0MCwweDE4LDB4OTgsMHgwMiwweGU1LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGY0LDB4MjAgfX0sCisgezE2LCAweGE2MjAsIDAsIHsweDhkLDB4MDAsMHgyZiwweDQwLDB4MGIsMHg5NCwweDQyLDB4ODYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNjMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGExLDB4MjQsMHgyYywweDQ4LDB4MTgsMHgxMiwweDAyLDB4MDQsMHg4MCwweGExLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4YTY0MCwgMCwgezB4NDgsMHgwOCwweDEwLDB4MDIsMHg4NCwweDAwLDB4OTEsMHgyMCwweDIwLDB4NDgsMHgwOSwweDEyLDB4MDIsMHhjNCwweDk0LDB4ODEgfX0sCisgezE2LCAweGE2NTAsIDAsIHsweDAwLDB4MmMsMHg2MSwweDBiLDB4NWEsMHg4MiwweGQ0LDB4YTAsMHhhNSwweDI4LDB4MmQsMHg0YSwweDBiLDB4OTAsMHgwMiwweDgyIH19LAorIHsxNiwgMHhhNjYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDIsMHhlOCwweDUwLDB4MmUsMHgxNCB9fSwKKyB7MTYsIDB4YTY3MCwgMCwgezB4MGUsMHg4NSwweDAzLDB4YTEsMHg0MCwweGE4LDB4NTAsMHgzZSwweDE0LDB4MGQsMHg4NSwweDAxLDB4ODEsMHg0MCwweGY4LDB4NTIgfX0sCisgezE2LCAweGE2ODAsIDAsIHsweDMyLDB4OTQsMHgwYywweDgwLDB4MTMsMHhjMSwweDQyLDB4YzAsMHg1MSwweDNlLDB4MDAsMHg4ZiwweDgyLDB4MDMsMHhlMCwweDgwIH19LAorIHsxNiwgMHhhNjkwLCAwLCB7MHhjOCwweDIwLDB4M2YsMHgwOCwweDBmLDB4ODAsMHgwMywweGFlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTZhMCwgMCwgezB4OTgsMHgxOSwweGY0LDB4NTAsMHhkOSwweDExLDB4M2UsMHg0NCwweDhmLDB4OTEsMHg0MywweGU0LDB4NDAsMHhkZCwweDAwLDB4M2EgfX0sCisgezE2LCAweGE2YjAsIDAsIHsweDQ0LDB4NGYsMHhkMCwweDI3LDB4YjQsMHgwMCwweGZkLDB4MTIsMHgzZiwweDQ0LDB4NGYsMHg5MSwweDQzLDB4ZjQsMHg0MCwweGZkIH19LAorIHsxNiwgMHhhNmMwLCAwLCB7MHgwMCwweDNmLDB4NDEsMHgwZiwweDkyLDB4ODMsMHhlNCwweGEwLDB4ZjksMHgyOCwweDNlLDB4NGEsMHgwZiwweGQwLDB4MDMsMHg2NiB9fSwKKyB7MTYsIDB4YTZkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhmNiwweDgwLDB4ZTksMHhjMCwweDNlLDB4NzggfX0sCisgezE2LCAweGE2ZTAsIDAsIHsweDhmLDB4OWIsMHgwMywweGE3LDB4ODAsMHhjOSwweDQwLDB4MzYsMHg3OCwweDBmLDB4MTAsMHgyMywweGU1LDB4MDQsMHhkZCwweGE0IH19LAorIHsxNiwgMHhhNmYwLCAwLCB7MHgzMywweDYyLDB4MGYsMHhkYSwweDAzLDB4ZjYsMHg2MCwweGM5LDB4MTAsMHgzMywweDQwLDB4MGUsMHg5OCwweDkzLDB4ZTYsMHgzMCB9fSwKKyB7MTYsIDB4YTcwMCwgMCwgezB4YzksMHhjOSwweDMyLDB4NzgsMHg4YywweGQwLDB4MGIsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3MTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAwLDB4ODgsMHhlMiwweDJlLDB4MzAsMHgwYiwweDg4LDB4NDIsMHgyMywweDQwLDB4YTAsMHhhMSwweDIyIH19LAorIHsxNiwgMHhhNzIwLCAwLCB7MHgzOCwweDBiLDB4OGEsMHgwMiwweGUyLDB4ODAsMHhhYSwweGUwLDB4MjIsMHgzMCwweDBiLDB4ODAsMHgyMywweGFiLDB4MDIsMHg4OCB9fSwKKyB7MTYsIDB4YTczMCwgMCwgezB4YTAsMHgyYSwweDAwLDB4MGIsMHg4YywweDAyLDB4ZTMsMHgwMCwweDg4LDB4ZTAsMHgyMywweDM4LDB4MDgsMHg4MCwweDAyLDB4MGUgfX0sCisgezE2LCAweGE3NDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGExLDB4NDQsMHgyOCwweDU4IH19LAorIHsxNiwgMHhhNzUwLCAwLCB7MHg0MywweDE2LDB4MjIsMHg4NCwweDgxLDB4ODEsMHgyMCwweDJjLDB4NTgsMHg0OSwweDEwLDB4ODAsMHhjNCwweDgxLDB4OTEsMHg0OCB9fSwKKyB7MTYsIDB4YTc2MCwgMCwgezB4NmMsMHg0YSwweDBiLDB4MTQsMHgwMiwweDQ0LDB4ODQsMHg4MSwweDAxLDB4NjAsMHg0MCwweDBhLDB4NTIsMHg4NiwweGQ0LDB4YTAgfX0sCisgezE2LCAweGE3NzAsIDAsIHsweDg1LDB4MDAsMHhhMSwweDUwLDB4NjgsMHg5MCwweDA2LDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNzgwLCAwLCB7MHgxOCwweDA1LDB4YTYsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDQsMHgwMCwweGE5LDB4NjAsMHgyMiB9fSwKKyB7MTYsIDB4YTc5MCwgMCwgezB4NDAsMHgwYiwweDk1LDB4MDIsMHhlNCwweDEwLDB4YjEsMHgwMCwweDRlLDB4NDAsMHgwYiwweDkwLDB4NjYsMHhhYywweDgwLDB4ODkgfX0sCisgezE2LCAweGE3YTAsIDAsIHsweDAwLDB4MmEsMHg2MCwweDBiLDB4OTAsMHg1MiwweGY0LDB4MDAsMHg4NSwweDAwLDB4MjEsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2IH19LAorIHsxNiwgMHhhN2IwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU2LDB4MjAsMHhlOSwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4YTdjMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YTQsMHgxMCwweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHg5NCwweDAxLDB4ZTUsMHgyMCwweGQ5LDB4NDAgfX0sCisgezE2LCAweGE3ZDAsIDAsIHsweGJhLDB4NjgsMHg4ZiwweDkwLDB4MDcsMHhlNiwweDAwLDB4YzksMHgxMCwweDMyLDB4NjIsMHgwZSwweDkwLDB4MDIsMHhlNCwweDE4IH19LAorIHsxNiwgMHhhN2UwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTdmMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDA0LDB4M2UsMHg0MCwweDBiLDB4OTAsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGE4MDAsIDAsIHsweDQwLDB4OGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDIsMHg3MiwweDY4LDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5IH19LAorIHsxNiwgMHhhODEwLCAwLCB7MHgwMSwweDNlLDB4NDIsMHgwZiwweDkwLDB4MDMsMHhjNCwweDAyLDB4ZjksMHgwNCwweDNlLDB4NDAsMHg0ZiwweDkwLDB4MDMsMHgxYSB9fSwKKyB7MTYsIDB4YTgyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHg4MCwweDAyLDB4YzgsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGE4MzAsIDAsIHsweDBjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhjOCwweDQwLDB4MzYsMHgwMCwweDBmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhkOCwweDUwIH19LAorIHsxNiwgMHhhODQwLCAwLCB7MHhiMiwweDEwLDB4OGMsMHg4MSwweDAzLDB4YzEsMHgyMCwweGM4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhjMCwweDEzLDB4ZjAsMHgwNCB9fSwKKyB7MTYsIDB4YTg1MCwgMCwgezB4NGMsMHgwMCwweDNmLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4NjAsIDAsIHsweDI4LDB4MTUsMHgyYSwweDAwLDB4OGEsMHgwNCwweDIyLDB4ODEsMHgyOCwweGEwLDB4MTIsMHgyOCwweDAwLDB4OGEsMHgwMSwweDM2IH19LAorIHsxNiwgMHhhODcwLCAwLCB7MHg4MCwweDBiLDB4YTAsMHgxMCwweDI4LDB4MTAsMHhjZSwweDAxLDB4MjMsMHg4MSwweDBjLDB4YTgsMHgxMiwweGZiLDB4MDAsMHg4YSB9fSwKKyB7MTYsIDB4YTg4MCwgMCwgezB4MDEsMHgzYiwweDgwLDB4ODMsMHhhMCwweDQyLDB4ZTgsMHgxMCwweDhhLDB4MDAsMHgyZiwweDgwLDB4MGIsMHg2MCwweDQyLDB4MGEgfX0sCisgezE2LCAweGE4OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwIH19LAorIHsxNiwgMHhhOGEwLCAwLCB7MHgxOCwweGIwLDB4MDAsMHhjYywweDAwLDB4OWIsMHgwMCwweDI0LDB4YzAsMHgwYiwweDMwLDB4MDYsMHg2YywweDAwLDB4YTMsMHgwOCB9fSwKKyB7MTYsIDB4YThiMCwgMCwgezB4MjgsMHhjOCwweDA5LDB4MzAsMHgwMiwweGNjLDB4NDMsMHg4YiwweDAwLDB4MmMsMHg4MCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDIgfX0sCisgezE2LCAweGE4YzAsIDAsIHsweDgzLDB4MDEsMHgyYywweGMwLDB4NGIsMHgzMCwweDAwLDB4NGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOGQwLCAwLCB7MHhhMCwweDAxLDB4MGMsMHgyNCwweDg3LDB4OTQsMHgyMSwweGU0LDB4MTgsMHgzMSwweDAyLDB4ZGMsMHg4MCwweDk3LDB4MTAsMHgyNSB9fSwKKyB7MTYsIDB4YThlMCwgMCwgezB4Y2QsMHgwYiwweGYyLDB4MDIsMHg3YywweDAwLDB4YTAsMHgwMCwweDI4LDB4ZTAsMHgxOCwweDcwLDB4MDIsMHhkYywweDAxLDB4ODcgfX0sCisgezE2LCAweGE4ZjAsIDAsIHsweDM0LDB4MjksMHg0MCwweDA5LDB4NDAsMHgwMiwweGQwLDB4MDQsMHg4NCwweDA0LDB4MmQsMHgwMCwweDRiLDB4ZDAsMHgyMiwweDY4IH19LAorIHsxNiwgMHhhOTAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDE2LDB4MDAsMHhjZiwweGEwLDB4NzAsMHhlOSB9fSwKKyB7MTYsIDB4YTkxMCwgMCwgezB4MTgsMHg3YiwweDAzLDB4ZmYsMHg0MCwweDk3LDB4YTAsMHgzNSwweGU4LDB4MGYsMHg3NCwweDAyLDB4NWUsMHgyMCwweGU0LDB4ODAgfX0sCisgezE2LCAweGE5MjAsIDAsIHsweDM5LDB4YTAsMHgyZCwweDc4LDB4MDMsMHhmZSwweDAwLDB4YzcsMHg4MCwweDNkLDB4ZTAsMHg1ZiwweDY4LDB4NDMsMHhjMiwweDAwIH19LAorIHsxNiwgMHhhOTMwLCAwLCB7MHhjNCwweDg0LDB4MWQsMHg2MCwweDBmLDB4NzgsMHgwMywweDZhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTk0MCwgMCwgezB4MDgsMHgwZCwweGE0LDB4MDAsMHgzYiwweDAwLDB4MmUsMHhkOCwweDBmLDB4YjQsMHgwMywweDJkLDB4OGEsMHhlYiwweDYyLDB4M2EgfX0sCisgezE2LCAweGE5NTAsIDAsIHsweGQwLDB4MGYsMHhiMiwweDg3LDB4MGMsMHhkMCwweGQ4LDB4MDAsMHgzMiwweGMwLDB4NGYsMHg5MCwweDQzLDB4ZWMsMHgwMCwweGZiIH19LAorIHsxNiwgMHhhOTYwLCAwLCB7MHgwOCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNCwweDNmLDB4ODAsMHgwZiwweDAwLDB4MmIsMHg4MiB9fSwKKyB7MTYsIDB4YTk3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4ZmYsMHhhMCwweDNlLDB4ZjQgfX0sCisgezE2LCAweGE5ODAsIDAsIHsweDBlLDB4YjgsMHgwMywweGVlLDB4MDgsMHg0YiwweGYwLDB4N2YsMHhmNCwweDBjLDB4ZjksMHgyMywweGVlLDB4NDgsMHg3OCwweDkwIH19LAorIHsxNiwgMHhhOTkwLCAwLCB7MHgzMiwweGU0LDB4MGMsMHhmOSwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzZiwweGU0LDB4MWMsMHg3OSwweDAzLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4YTlhMCwgMCwgezB4ZmYsMHg4MCwweDMzLDB4ZTAsMHgyYywweDc4LDB4MDcsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5YjAsIDAsIHsweGE4LDB4MTEsMHg5NCwweDAwLDB4YjMsMHgwMCwweDBjLDB4ZTUsMHgwYiwweDM4LDB4MDIsMHhmZSwweDgwLDB4OGYsMHg4MCwweDYxIH19LAorIHsxNiwgMHhhOWMwLCAwLCB7MHhjNCwweDI4LDB4NzgsMHgwMCwweDRlLDB4MDAsMHhmNCwweDg0LDB4MjUsMHhhOCwweDBjLDB4NzAsMHgwMiwweGNjLDB4MDQsMHhiMyB9fSwKKyB7MTYsIDB4YTlkMCwgMCwgezB4OTAsMHgyNSwweDQwLDB4MGMsMHg0MSwweDgzLDB4NTIsMHg0MCwweGI0LDB4MTAsMHhhMywweDAwLDB4MGMsMHg1MiwweDAzLDB4NmEgfX0sCisgezE2LCAweGE5ZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHgwMCwweGI3LDB4MjEsMHg2ZCwweGM4IH19LAorIHsxNiwgMHhhOWYwLCAwLCB7MHg0YiwweDcwLDB4MDIsMHhkYywweDQyLDB4YTcsMHgzMSwweDI5LDB4YzQsMHgwOCwweDcyLDB4MDIsMHhkYywweDAwLDB4YjcsMHgyOCB9fSwKKyB7MTYsIDB4YWEwMCwgMCwgezB4MjQsMHg4MCwweDA4LDB4NzAsMHgwNiwweGQ0LDB4MjAsMHhiNywweDAxLDB4MmQsMHhjMSwweDA4LDB4NjAsMHgwMiwweDUwLDB4ODAgfX0sCisgezE2LCAweGFhMTAsIDAsIHsweGI0LDB4MDgsMHgyMSwweDYyLDB4MDksMHg3NCwweDA2LDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYTIwLCAwLCB7MHgyMCwweDE0LDB4YzcsMHgwNCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHhiMCwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDIsMHg2MCB9fSwKKyB7MTYsIDB4YWEzMCwgMCwgezB4YzAsMHgwOCwweDM4LDB4MDIsMHg0ZSwweDQ0LDB4YTAsMHhjMCwweDI0LDB4OTEsMHgwOCwweDMwLDB4MDIsMHhjMCwweDAwLDB4YjMgfX0sCisgezE2LCAweGFhNDAsIDAsIHsweDAwLDB4MjQsMHg2MCwweDA4LDB4MWMsMHgwMiwweDRjLDB4ODgsMHhiMywweGMwLDB4MjAsMHhhMCwweDA4LDB4MDAsMHgwYSwweDg4IH19LAorIHsxNiwgMHhhYTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFjLDB4MDAsMHhmZiwweDAwLDB4MmYsMHhjMCB9fSwKKyB7MTYsIDB4YWE2MCwgMCwgezB4NGYsMHhmMCwweDEzLDB4ZmMsMHgwOCwweGU3LDB4OGEsMHgzZiwweGMwLDB4MGMsMHhmNSwweGMyLDB4ZmUsMHgxMCwweGJiLDB4YzAgfX0sCisgezE2LCAweGFhNzAsIDAsIHsweDMyLDB4ZDQsMHgwYywweDMwLDB4MTMsMHhlMywweDA0LDB4YmYsMHgwMCwweDJlLDB4NjIsMHgwOCwweGI5LDB4MDIsMHg2ZSwweDAwIH19LAorIHsxNiwgMHhhYTgwLCAwLCB7MHhmYiwweDAxLDB4MzIsMHhhNCwweDRkLDB4OTQsMHgwMiwweGFiLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWE5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4NjAsMHhmYiwweDAwLDB4MWUsMHhjMCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHg1YiwweDAwLDB4M2EgfX0sCisgezE2LCAweGFhYTAsIDAsIHsweGMwLDB4MGYsMHhiMCwweDQxLDB4ZWMsMHgwMCwweDdiLDB4NDUsMHhiYSwweDQwLDB4MmUsMHhiMCwweDE1LDB4ZTAsMHgwMSwweGZiIH19LAorIHsxNiwgMHhhYWIwLCAwLCB7MHgwMCwweDNlLDB4NTAsMHgwZSwweGMwLDB4MDMsMHhmMCwweDQwLDB4ZmMsMHgyMCwweDNmLDB4NTAsMHg4ZiwweDkwLDB4MDEsMHg2MCB9fSwKKyB7MTYsIDB4YWFjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfX0sCisgezE2LCAweGFhZDAsIDAsIHsweDhmLDB4ZjAsMHgwMywweDFjLDB4MDIsMHhjZiwweDAwLDB4MzYsMHhjMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4MDAsMHg3ZiwweDJhIH19LAorIHsxNiwgMHhhYWUwLCAwLCB7MHgzZiwweDgwLDB4MGYsMHhmOCwweDEzLDB4OTAsMHgyMSwweGNmLDB4MDAsMHgzZiwweDYyLDB4MGMsMHhlMCwweDAzLDB4MzAsMHgwMCB9fSwKKyB7MTYsIDB4YWFmMCwgMCwgezB4ZjgsMHgwMCwweDNmLDB4MDAsMHgwZiwweGQwLDB4MDMsMHg4MCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiMDAsIDAsIHsweDgxLDB4MDQsMHg2NCwweDExLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4ZGIsMHgwNCwweDMyIH19LAorIHsxNiwgMHhhYjEwLCAwLCB7MHhjMCwweDBlLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDg0LDB4MmUsMHg0MCwweDBiLDB4YjksMHg0MiwweDIyLDB4NDIsMHg4YiB9fSwKKyB7MTYsIDB4YWIyMCwgMCwgezB4MDEsMHgyYywweDcyLDB4MGEsMHg5MCwweDQyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMyLDB4OGYsMHg4OCwweDA2LDB4ZTAgfX0sCisgezE2LCAweGFiMzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MjQsMHgwMCwweGJiLDB4MDAsMHg2ZSwweGMwIH19LAorIHsxNiwgMHhhYjQwLCAwLCB7MHg0OCwweGIwLDB4NDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDI2LDB4YzAsMHgwYSwweGIwLDB4MTIsMHhlYywweDAwLDB4YmIsMHg0MCB9fSwKKyB7MTYsIDB4YWI1MCwgMCwgezB4MmUsMHhjOCwweDBiLDB4YjAsMHgxMiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MmUsMHg0OCwweDBhLDB4MzAsMHgwMiwweDZjLDB4MDAgfX0sCisgezE2LCAweGFiNjAsIDAsIHsweGJiLDB4MDAsMHgyZSwweDgwLDB4NGIsMHg5OCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYjcwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHgwMCwweGIzLDB4MDAsMHg2YywweGMyLDB4NGIsMHgzMSwweDAyLDB4MGMsMHg1MCwweDliLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4YWI4MCwgMCwgezB4YzAsMHgwYSwweDMyLDB4MTIsMHhjYywweDgwLDB4YjMsMHgwMCwweDZjLDB4MGMsMHgwYiwweDMxLDB4MDIsMHgwYywweDQyLDB4ODMgfX0sCisgezE2LCAweGFiOTAsIDAsIHsweDA4LDB4MmUsMHg0MCwweDBhLDB4MDAsMHgwMiwweDAwLDB4ODAsMHhiMCwweDAwLDB4MmMsMHg0MSwweDBiLDB4MTAsMHgwMiwweDQyIH19LAorIHsxNiwgMHhhYmEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY0LDB4MDAsMHhiYiwweDQwLDB4M2YsMHhjYyB9fSwKKyB7MTYsIDB4YWJiMCwgMCwgezB4MGUsMHhmMCwweDgzLDB4M2QsMHhhMCwweGNmLDB4MjAsMHgzNywweGMwLDB4MGMsMHhmNywweGMzLDB4ZmQsMHg0OCwweGYzLDB4MDAgfX0sCisgezE2LCAweGFiYzAsIDAsIHsweDNlLDB4ODgsMHgwZiwweGI0LDB4MTMsMHhhNSwweDAwLDB4OGYsMHgzMCwweDNlLDB4NDAsMHgwYywweGEwLDB4MDMsMHg2MCwweDgwIH19LAorIHsxNiwgMHhhYmQwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4OTAsMHgyMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWJlMCwgMCwgezB4YTAsMHgxOSwweGY0LDB4MDAsMHhmZiwweDI5LDB4M2YsMHhjOSwweDBmLDB4ZjAsMHgxMywweGZjLDB4OTQsMHhlZiwweDEyLDB4M2IgfX0sCisgezE2LCAweGFiZjAsIDAsIHsweGMwLDB4OGUsMHhiMiwweDA3LDB4ZmQsMHgwNCwweGZmLDB4MTAsMHgzZiwweDBjLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGZiIH19LAorIHsxNiwgMHhhYzAwLCAwLCB7MHgyMCwweDNkLDB4NDAsMHgwZiwweGQwLDB4NDMsMHhmYywweDQwLDB4ZmYsMHgwNCwweDNmLDB4YzAsMHgwZSwweGMwLDB4NDMsMHhlOCB9fSwKKyB7MTYsIDB4YWMxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweGEyLDB4YzcsMHgyMCwweDNmLDB4MjQgfX0sCisgezE2LCAweGFjMjAsIDAsIHsweDBjLDB4ZjAsMHgwMywweDNjLDB4ODAsMHhjYywweDA5LDB4MzMsMHhkMSwweDBjLDB4ZjEsMHgyMywweGZjLDB4MjAsMHhkZiwweDM2IH19LAorIHsxNiwgMHhhYzMwLCAwLCB7MHgzZiwweGMwLDB4MGUsMHg0OCwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzNywweGU0LDB4MGQsMHg3OCwweDAzLDB4MTEsMHhhMCB9fSwKKyB7MTYsIDB4YWM0MCwgMCwgezB4Y2YsMHgwMCwweDM3LDB4YzgsMHgwYywweGYwLDB4MDMsMHgzMCwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFjNTAsIDAsIHsweDgwLDB4MTAsMHhmZiwweDAwLDB4OGYsMHhkMSwweDJlLDB4MDgsMHgwZCwweGI2LDB4MTIsMHgzZCwweDQ1LDB4ZjksMHg2NCwweDI3IH19LAorIHsxNiwgMHhhYzYwLCAwLCB7MHhkMCwweDg4LDB4YmEsMHgxNCwweGNjLDB4MDQsMHg4ZiwweDQwLDB4MjMsMHhmMCwweDBiLDB4ODgsMHgwMiwweDJlLDB4MDQsMHhiYiB9fSwKKyB7MTYsIDB4YWM3MCwgMCwgezB4ODAsMHhhZSwweGMwLDB4MDgsMHhiOCwweDBhLDB4MjEsMHgwMCwweDg4LDB4ZDAsMHgyMiwweDIwLDB4MjgsMHhiMCwweDAyLDB4MjAgfX0sCisgezE2LCAweGFjODAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDkzLDB4MDAsMHgyZSwweDAwIH19LAorIHsxNiwgMHhhYzkwLCAwLCB7MHgwYSwweDM0LDB4ODIsMHg4YywweGEwLDB4YTAsMHgwOCwweDI0LDB4ZDgsMHgwOSwweDMxLDB4MDIsMHhjYywweDIwLDB4YjMsMHgzMiB9fSwKKyB7MTYsIDB4YWNhMCwgMCwgezB4MjgsMHhkMCwweDRhLDB4ODAsMHgwMiwweGNjLDB4MGMsMHhiYiwweDAwLDB4MjIsMHg0MCwweDg5LDB4YjAsMHgwMiwweDYwLDB4ODAgfX0sCisgezE2LCAweGFjYjAsIDAsIHsweDkzLDB4MDAsMHgyNCwweGQwLDB4MGIsMHgzMCwweDAyLDB4YTIsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhY2MwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgwMCwweDliLDB4MDAsMHgyZSwweDIwLDB4MDksMHhiMCwweDRhLDB4MmMsMHgwMiwweGEwLDB4MDAsMHgwNiB9fSwKKyB7MTYsIDB4YWNkMCwgMCwgezB4YzAsMHgwOSwweGIwLDB4MDAsMHhlYywweDAwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwYiwweDg4LDB4MDIsMHg2YywweDAwLDB4YmIgfX0sCisgezE2LCAweGFjZTAsIDAsIHsweDIwLDB4MmEsMHhlMiwweDQxLDB4YjgsMHgyYSwweDYwLDB4MGEsMHg5OCwweDAwLDB4MjYsMHgwMCwweDBiLDB4YjAsMHgwMiwweGI4IH19LAorIHsxNiwgMHhhY2YwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDgsMHhkYiwweDAyLDB4M2UsMHgyMCB9fSwKKyB7MTYsIDB4YWQwMCwgMCwgezB4NGMsMHhiMCwweDAzLDB4MmMsMHgwMiwweDhiLDB4MjAsMHgxMiwweGMwLDB4MjksMHhiMCwweDEyLDB4ZWMsMHgwMCwweGZiLDB4MDAgfX0sCisgezE2LCAweGFkMTAsIDAsIHsweDNhLDB4YzAsMHgwZSwweDg4LDB4MDMsMHhlZCwweDIwLDB4ZmIsMHhjOCwweDM0LDB4ZjAsMHgwZCwweGJhLDB4MDMsMHg0NywweDYwIH19LAorIHsxNiwgMHhhZDIwLCAwLCB7MHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4YjAsMHgwYiwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWQzMCwgMCwgezB4ZTAsMHgwMSwweDljLDB4MDAsMHhlZiwweDAwLDB4MGYsMHgwMCwweDBmLDB4MzAsMHgwMCwweGZjLDB4MDAsMHhkZiwweDkwLDB4YmIgfX0sCisgezE2LCAweGFkNDAsIDAsIHsweGMwLDB4Y2UsMHhmMCwweDAzLDB4ZmMsMHgwNCwweGNiLDB4MDAsMHgxNywweGMwLDB4MGYsMHhjMCwweDAzLDB4YmMsMHg4NCwweGZmIH19LAorIHsxNiwgMHhhZDUwLCAwLCB7MHgwMCwweDM3LDB4YzAsMHgwZSwweGQwLDB4NjMsMHhiOCwweDAwLDB4ZWEsMHgwMCwweDNhLDB4ODAsMHgwYywweDMwLDB4MDMsMHg3MCB9fSwKKyB7MTYsIDB4YWQ2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMiwweDMyLDB4MDAgfX0sCisgezE2LCAweGFkNzAsIDAsIHsweDBmLDB4YjAsMHg1MywweDJjLDB4MDAsMHhmYSwweDAwLDB4MzIsMHhjMCwweDhmLDB4YjAsMHgwNywweDJjLDB4MDAsMHhmYiwweDAwIH19LAorIHsxNiwgMHhhZDgwLCAwLCB7MHhiMiwweGMwLDB4MGYsMHg4MCwweDA3LDB4YWMsMHg4MCwweGRiLDB4MjQsMHg3ZSwweGQwLDB4MGUsMHhiMCwweDIzLDB4NzQsMHgwNCB9fSwKKyB7MTYsIDB4YWQ5MCwgMCwgezB4ZGQsMHgwOCwweGI1LDB4NDAsMHgwYywweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkYTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4YmYsMHhjMCwweGEwLDB4MDAsMHgxYiwweGYwLDB4MDIsMHgzZiwweDYwLDB4ZWEsMHg1MCwweDIzIH19LAorIHsxNiwgMHhhZGIwLCAwLCB7MHhjMCwweDA4LDB4ZmEsMHgwNywweGZjLDB4MDAsMHhkZiwweDAwLDB4NjMsMHhjMCwweDQ4LDB4MTgsMHgwMiwweDJkLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4YWRjMCwgMCwgezB4MDAsMHg2ZSwweGMwLDB4MGQsMHgzYSwweDAzLDB4MjQsMHgwMCwweDgyLDB4ODAsMHgzMiwweDgwLDB4MGQsMHhmMCwweDAzLDB4MzIgfX0sCisgezE2LCAweGFkZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgxNCwweGIzLDB4NTksMHgyMCwweDgwIH19LAorIHsxNiwgMHhhZGUwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHgyZSwweDA1LDB4YjAsMHg0NCwweDJlLDB4YzAsMHgwOSwweDM0LDB4ODIsMHhlYywweDAwLDB4YWIsMHgwNCB9fSwKKyB7MTYsIDB4YWRmMCwgMCwgezB4MjAsMHhjMCwweDA5LDB4MjEsMHhiMiwweDhlLDB4MDQsMHg5MywweGMwLDB4MjQsMHhjMCwweDBhLDB4MTgsMHgwNiwweDRjLDB4MDAgfX0sCisgezE2LCAweGFlMDAsIDAsIHsweDkyLDB4NTAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NzAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZTEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHg2MSwweGUwLDB4MGIsMHg3OCwweDBhLDB4NWUsMHgwMSwweGIxLDB4YTAsMHgyZCB9fSwKKyB7MTYsIDB4YWUyMCwgMCwgezB4ZTAsMHgwYSwweDc4LDB4MDIsMHg1ZSwweDAwLDB4MDcsMHg5MCwweDIxLDB4ZTAsMHgxOCwweGM4LDB4MDIsMHgxZSwweDAwLDB4YjcgfX0sCisgezE2LCAweGFlMzAsIDAsIHsweDgwLDB4MmQsMHhlMCwweDhhLDB4ZDgsMHgwMiwweDNlLDB4YzAsMHg4NSwweDgwLDB4MjEsMHgyMCwweDE5LDB4NzgsMHgyMiwweDAwIH19LAorIHsxNiwgMHhhZTQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhmMywweDk0LDB4MjAsMHgxMCB9fSwKKyB7MTYsIDB4YWU1MCwgMCwgezB4NGIsMHgzMCwweDA3LDB4MGMsMHgwMCwweGYzLDB4MDAsMHgzZSwweGM4LDB4MGYsMHgzMCwweDAzLDB4Y2MsMHgwMCwweDIzLDB4MTAgfX0sCisgezE2LCAweGFlNjAsIDAsIHsweDAwLDB4Y2IsMHgwNSwweDIwLDB4MDIsMHg4YywweDYwLDB4OTMsMHgwYSwweDJlLDB4YzQsMHgwYSwweDAxLDB4MDcsMHg0YywweDgwIH19LAorIHsxNiwgMHhhZTcwLCAwLCB7MHhkMiwweDAxLDB4MzAsMHhjMCwweDJjLDB4MzAsMHgwYiwweDVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWU4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDAxLDB4MGYsMHg0MCwweDBmLDB4ZjAsMHgxMywweGJjLDB4MDAsMHhlZiwweDI2LDB4NzMgfX0sCisgezE2LCAweGFlOTAsIDAsIHsweGMyLDB4MGMsMHhiMCwweDgzLDB4YmMsMHg0MCwweGZmLDB4MTgsMHgzZCwweGMwLDB4NGEsMHhjMSwweDAzLDB4ZmMsMHgwMCwweGZiIH19LAorIHsxNiwgMHhhZWEwLCAwLCB7MHgxMiwweDNmLDB4YzQsMHg0ZCwweGMxLDB4MGIsMHhmYywweDgxLDB4ZmQsMHgwMCwweDNmLDB4MjAsMHgwZiwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4YWViMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDIwLDB4Y2IsMHg0OCwweDNlLDB4MDAgfX0sCisgezE2LCAweGFlYzAsIDAsIHsweDBjLDB4YjAsMHgwMywweDJkLDB4MjAsMHhlOSwweDgwLDB4ZmEsMHhjOCwweDBkLDB4YjAsMHgwMywweGVlLDB4MDAsMHhkYiwweDI0IH19LAorIHsxNiwgMHhhZWQwLCAwLCB7MHg3NiwweGYzLDB4OGUsMHg4MCwweDMzLDB4ZWMsMHg0NCwweGViLDB4MTAsMHgzZSwweGMwLDB4MGYsMHg5MCwweDAzLDB4ZTgsMHgwNCB9fSwKKyB7MTYsIDB4YWVlMCwgMCwgezB4ZGMsMHgwMCwweGIzLDB4NjEsMHgwYywweGIwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlZjAsIDAsIHsweDQ4LDB4MTEsMHg4ZCwweDAwLDB4ODcsMHgyMCwweDJmLDB4MDEsMHgyOCwweDcwLDB4MDIsMHgwYywweDg0LDB4OGQsMHgwNCwweDMxIH19LAorIHsxNiwgMHhhZjAwLCAwLCB7MHhjYywweGM5LDB4NzIsMHgwMiwweGRkLDB4MDAsMHgzNywweDMzLDB4MjEsMHhkOCwweDA4LDB4NDAsMHgwMiwweGRjLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4YWYxMCwgMCwgezB4MjAsMHgzZCwweGMwLDB4MDksMHg1MCwweDIyLDB4ZjAsMHgwMCwweDk3LDB4MDAsMHgyMSwweDgwLDB4MGEsMHhmYywweDAyLDB4OTIgfX0sCisgezE2LCAweGFmMjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MWUsMHg4MiwweDg3LDB4YjAsMHgyZCwweDIwIH19LAorIHsxNiwgMHhhZjMwLCAwLCB7MHgwOCwweDM5LDB4MDIsMHgxZSwweDQxLDB4YTcsMHg4MCwweDI0LDB4ZTAsMHgwOSwweDdhLDB4MzIsMHg4ZSwweDgyLDB4MDcsMHhhMCB9fSwKKyB7MTYsIDB4YWY0MCwgMCwgezB4MjUsMHhlMCwweDhiLDB4NDgsMHgwMiwweDFlLDB4MDAsMHhhNywweGUxLDB4MmQsMHhlMCwweDRiLDB4NTgsMHgwMCwweGRhLDB4MDAgfX0sCisgezE2LCAweGFmNTAsIDAsIHsweGEwLDB4ODAsMHgyNCwweDYwLDB4MDgsMHg3YSwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZjYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyYywweDAwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweDkzLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4YWY3MCwgMCwgezB4YzEsMHgwOSwweDMwLDB4NDIsMHhjYywweDAwLDB4ODMsMHgwMCwweDYwLDB4YzAsMHgwOCwweDFhLDB4MDIsMHhjZSwweDA0LDB4YjMgfX0sCisgezE2LCAweGFmODAsIDAsIHsweGUwLDB4MjgsMHhhMCwweDA5LDB4MWMsMHg4MiwweDRiLDB4MDgsMHhhMywweDgwLDB4MjQsMHhhMCwweDJhLDB4MzAsMHgwMiwweDlhIH19LAorIHsxNiwgMHhhZjkwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhjYSwweDAwLDB4MmYsMHg4OCB9fSwKKyB7MTYsIDB4YWZhMCwgMCwgezB4MGMsMHhhMCwweDEzLDB4MjgsMHgwMCwweGVlLDB4MDAsMHgyZSwweDgwLDB4MmQsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGRhLDB4MDAgfX0sCisgezE2LCAweGFmYjAsIDAsIHsweDc2LDB4ODAsMHgwZSwweGU4LDB4MDMsMHhiYiwweDgwLDB4ZWUsMHg0MCwweDJmLDB4YTIsMHg4ZiwweGU2LDB4MDMsMHhlYiwweDg2IH19LAorIHsxNiwgMHhhZmMwLCAwLCB7MHhmYSwweDgwLDB4MzcsMHg4MiwweDBjLDB4MjAsMHgwNywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWZkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDQwLDB4MWUsMHgwMCwweDBmLDB4ODAsMHgwYiwweDYxLDB4MDAsMHhlOCwweGMwLDB4M2EgfX0sCisgezE2LCAweGFmZTAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwMSwweGY4LDB4MDAsMHg3ZSwweDEwLDB4MWUsMHg4MSwweDAzLDB4ZTAsMHgwOCwweGY4IH19LAorIHsxNiwgMHhhZmYwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHhjMCwweDI4LDB4ZGMsMHg1MCwweDNiLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4YjAwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDIgfX0sCisgezE2LCAweGIwMTAsIDAsIHsweDBmLDB4MTAsMHgwMywweGE2LDB4MDAsMHhjOSwweDAxLDB4M2EsMHg0MCwweDBlLDB4OTQsMHgwMSwweGU0LDB4MTAsMHhmMSwweDA0IH19LAorIHsxNiwgMHhiMDIwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHg5YSwweDIzLDB4MjAsMHg2MCwweGY4LDB4MDQsMHgwYSwweDQyLDB4MGUsMHg5MCwweDEzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YjAzMCwgMCwgezB4YzEsMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwNDAsIDAsIHsweDgwLDB4MDQsMHg2NywweDA4LDB4YTksMHgwMCwweDZlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNywweDgyLDB4ODksMHgwMCwweDI2IH19LAorIHsxNiwgMHhiMDUwLCAwLCB7MHg0MCwweDA4LDB4OWMsMHgwMywweGE0LDB4MTAsMHhiOSwweDAwLDB4MzYsMHg0MCwweDliLDB4MWMsMHgxYSwweDIzLDB4MDQsMHhiOCB9fSwKKyB7MTYsIDB4YjA2MCwgMCwgezB4MDAsMHgzYSwweDQwLDB4MGUsMHgxMCwweDAyLDB4MjQsMHgwMiwweGM5LDB4YTAsMHhhMiwweDQwLDB4MGIsMHg5MCwweDBhLDB4MjAgfX0sCisgezE2LCAweGIwNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjUsMHg4MCwweDg5LDB4MDQsMHgyYywweDQwIH19LAorIHsxNiwgMHhiMDgwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHg4NCwweDgxLDB4OTksMHg0MCwweDJlLDB4NDAsMHgxYSwweDkwLDB4MDYsMHhlNCwweDAxLDB4YjksMHgwMCB9fSwKKyB7MTYsIDB4YjA5MCwgMCwgezB4YTYsMHg0MSwweDFiLDB4OTAsMHg4MiwweDIxLDB4MDAsMHhiOCwweDEwLDB4MmUsMHg0MCwweDBhLDB4OTIsMHgwYSwweGE0LDB4MDEgfX0sCisgezE2LCAweGIwYTAsIDAsIHsweDhmLDB4MjIsMHgyMywweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMGIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGEzLDB4MjAsMHgyYywweDQxLDB4MDksMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyNCB9fSwKKyB7MTYsIDB4YjBjMCwgMCwgezB4NDgsMHgwYSwweDM2LDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMCwweDA0LDB4YzgsMHg0YiwweDE0LDB4MDIsMHgwNSwweDAwLDB4YjEgfX0sCisgezE2LCAweGIwZDAsIDAsIHsweDA1LDB4MjgsMHg1MCwweDBhLDB4OTAsMHgwMiwweDA1LDB4MDIsMHg4NSwweDAwLDB4MjEsMHg0MCwweDBiLDB4MTIsMHgwMiwweDAyIH19LAorIHsxNiwgMHhiMGUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjOCwweDAwLDB4NmUsMHgxNCB9fSwKKyB7MTYsIDB4YjBmMCwgMCwgezB4MmMsMHg4NSwweDAyLDB4YTEsMHg0MCwweGM4LDB4NTAsMHgzYSwweDE0LDB4MGUsMHg4MCwweDAyLDB4ZTEsMHg0MCwweGIwLDB4NTAgfX0sCisgezE2LCAweGIxMDAsIDAsIHsweDMyLDB4MDAsMHgwYiwweDgwLDB4MDMsMHgyMCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhhMCwweDAyIH19LAorIHsxNiwgMHhiMTEwLCAwLCB7MHhjOCwweDAwLDB4MTMsMHgwMCwweDBmLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjEyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDgsMHhmOSwweDE0LDB4M2YsMHg0MCwweDBjLDB4OTEsMHgwMywweGU0LDB4NDIsMHhmZCwweDEwLDB4MzYgfX0sCisgezE2LCAweGIxMzAsIDAsIHsweDQ0LDB4MGQsMHg5MSwweDIzLDB4YTQsMHg0OCwweGY5LDB4MTEsMHgzOCwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTUsMHgxNCwweDM5IH19LAorIHsxNiwgMHhiMTQwLCAwLCB7MHg0MiwweDdiLDB4NDAsMHg4ZSwweGQwLDB4MDEsMHhmNSwweDAwLDB4YTksMHg0MCwweDNlLDB4NTAsMHgwNywweDk2LDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4YjE1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmNiwweDgwLDB4ZGQsMHhhZSwweDNhLDB4NTAgfX0sCisgezE2LCAweGIxNjAsIDAsIHsweDBkLDB4OWEsMHgwYiwweDc2LDB4ODAsMHhjZiwweDg4LDB4MzIsMHg3MCwweDJkLDB4ZGEsMHgwMywweGE3LDB4MDEsMHhlOSwweDkyIH19LAorIHsxNiwgMHhiMTcwLCAwLCB7MHgzNywweDY4LDB4MGQsMHg5NCwweDAzLDB4ZTcsMHgwMCwweGVkLDB4YTAsMHgzYSwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTcsMHgwMiB9fSwKKyB7MTYsIDB4YjE4MCwgMCwgezB4Y2QsMHg4MCwweDMzLDB4NjgsMHgwYywweGQ4LDB4ODMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIxOTAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDAwLDB4ODgsMHg0MCwweDIwLDB4MjAsMHgwYywweDhjLDB4MDIsMHgyMywweDAwLDB4ODgsMHhlMCwweDIyIH19LAorIHsxNiwgMHhiMWEwLCAwLCB7MHgzMCwweDA4LDB4ODQsMHgwMiwweGUzLDB4MDAsMHhiOCwweGUwLDB4MjIsMHgxNCwweDhkLDB4ODgsMHgwMiwweGUzLDB4MDAsMHhiOCB9fSwKKyB7MTYsIDB4YjFiMCwgMCwgezB4NTAsMHgyZSwweGE4LDB4OGIsMHg4MCwweDIyLDB4ZTMsMHg0OCwweDg4LDB4NTAsMHgyMiwweDAwLDB4MDgsMHg4YywweDAyLDB4MGUgfX0sCisgezE2LCAweGIxYzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg0MCwweDkxLDB4MDAsMHgyYSwweDQ4IH19LAorIHsxNiwgMHhiMWQwLCAwLCB7MHgwOSwweDE0LDB4ODIsMHgwNSwweDIwLDB4ODEsMHgwOCwweDIwLDB4NTgsMHgwOSwweDExLDB4MDIsMHg4NSwweDg4LDB4YjEsMHg0MCB9fSwKKyB7MTYsIDB4YjFlMCwgMCwgezB4YTAsMHg0MCwweDA4LDB4MTIsMHgwMiwweGM1LDB4ODAsMHhhMSwweDAwLDB4MjgsMHg0MCwweDBiLDB4MTgsMHgwMiwweGM0LDB4ODQgfX0sCisgezE2LCAweGIxZjAsIDAsIHsweGExLDB4MDAsMHgyNCwweDUwLDB4MDgsMHgxMCwweDkyLDB4MDMsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMjAwLCAwLCB7MHgxOCwweDE1LDB4YWMsMHgxMCwweDliLDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwNiwweDg5LDB4MDQsMHgyMCB9fSwKKyB7MTYsIDB4YjIxMCwgMCwgezB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwMiwweDIyLDB4NDEsMHg4OSwweGEwLDB4ODIsMHhlMCwweGEwLDB4YjkgfX0sCisgezE2LCAweGIyMjAsIDAsIHsweDI4LDB4MmUsMHg0NCwweDBiLDB4YjAsMHgwMiwweGU0LDB4MDIsMHhiOSwweDAwLDB4MjYsMHg0MCwweDI4LDB4MTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHhiMjMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhkOSwweDAwLDB4MzgsMHg0MCB9fSwKKyB7MTYsIDB4YjI0MCwgMCwgezB4MGQsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4YTAsMHhhMiwweDQwLDB4OGQsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweGIyNTAsIDAsIHsweDM2LDB4NDAsMHgwYywweDg0LDB4MTMsMHhlMiwweDAwLDB4ZTksMHgwMCwweDNhLDB4NTAsMHgwZiwweDljLDB4MDIsMHhlNiwweDg0IH19LAorIHsxNiwgMHhiMjYwLCAwLCB7MHhlOSwweDAwLDB4YjYsMHg0MCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjI3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhlMSwweDAwLDB4M2UsMHg2OCwweDBlLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmMSwweDI4LDB4M2EgfX0sCisgezE2LCAweGIyODAsIDAsIHsweDQwLDB4MGUsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQyLDB4MGYsMHg4MCwweDIzLDB4ZTIsMHgwMCwweGY5IH19LAorIHsxNiwgMHhiMjkwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZiwweDkxLDB4MjMsMHhlNCwweDQwLDB4YzEsMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhjYSB9fSwKKyB7MTYsIDB4YjJhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGIyYjAsIDAsIHsweDBjLDB4ODAsMHgwMywweGEwLDB4MjAsMHhjOCwweDQwLDB4M2UsMHgwMCwweDBlLDB4ODEsMHg2MywweDYwLDB4MDAsMHhmMCwweDA0IH19LAorIHsxNiwgMHhiMmMwLCAwLCB7MHgzYywweDAxLDB4MGMsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4YzEsMHgwMCB9fSwKKyB7MTYsIDB4YjJkMCwgMCwgezB4ZDgsMHgxMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MjMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyZTAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDYwLDB4OGUsMHgwMCwweDIyLDB4ODAsMHgwYSwweGEwLDB4MDIsMHgzOCwweDgwLDB4YmUsMHgwMCwweDNhIH19LAorIHsxNiwgMHhiMmYwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDAsMHhiYSwweDAwLDB4MjMsMHg5OCwweDE4LDB4ZWMsMHgwMiwweGY4LDB4MjAsMHhhZSB9fSwKKyB7MTYsIDB4YjMwMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MGIsMHhlNCwweDgyLDB4ZTgsMHgwMiwweGNlLDB4NDQsMHgyOCwweDgwLDB4MGQsMHhhMCwweDBhLDB4MGEgfX0sCisgezE2LCAweGIzMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDAsMHgwMCwweDgyLDB4MDQsMHhhMCwweGMwIH19LAorIHsxNiwgMHhiMzIwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHg4ZSwweDA0LDB4ODMsMHg1MCwweDZjLDB4YzAsMHgwYSwweDMwLDB4ODYsMHgwYywweDAwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4YjMzMCwgMCwgezB4MjgsMHgzMCwweDBhLDB4MzYsMHgxMiwweGNjLDB4ODAsMHg4MSwweDAwLDB4MjQsMHhjMCwweDBiLDB4MzIsMHgwNiwweGNjLDB4MDAgfX0sCisgezE2LCAweGIzNDAsIDAsIHsweDgwLDB4ODgsMHg2NCwweDYwLDB4MjgsMHgxMCwweDAyLDB4MDIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMzUwLCAwLCB7MHhhMCwweDAxLDB4MTAsMHgxMiwweDg0LDB4NDAsMHgyMSwweGM4LDB4MGEsMHg3MiwweDAyLDB4MTAsMHgwMCwweGI3LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4YjM2MCwgMCwgezB4Y2MsMHgwOCwweDM4LDB4MTIsMHgxYywweDAwLDB4YjMsMHgzMCwweDIwLDB4MDAsMHgwOCwweDcxLDB4ODIsMHhmZSwweDAwLDB4YTQgfX0sCisgezE2LCAweGIzNzAsIDAsIHsweDgwLDB4MjEsMHhjOCwweDBiLDB4NzAsMHgwMiwweGRjLDB4MDEsMHg4NywweDAwLDB4MmMsMHg0MiwweDA5LDB4NTEsMHgwMiwweDIwIH19LAorIHsxNiwgMHhiMzgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhjMiwweDgwLDB4MzEsMHhmOCB9fSwKKyB7MTYsIDB4YjM5MCwgMCwgezB4NGMsMHhmYywweDEzLDB4OTIsMHgwOSwweGM3LDB4ODAsMHgzYywweGVkLDB4MWUsMHg3OCwweDI3LDB4MWUsMHgwMCwweGY3LDB4OGMgfX0sCisgezE2LCAweGIzYTAsIDAsIHsweDc5LDB4MjAsMHgwOCwweDdhLDB4MDMsMHhkZSwweDgxLDB4ODQsMHg4MCwweDNkLDB4ZTAsMHgwZSwweDc4LDB4MDMsMHhmZSwweDIwIH19LAorIHsxNiwgMHhiM2IwLCAwLCB7MHhjNSwweDgxLDB4MzUsMHg2MCwweDJjLDB4NTgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjNjMCwgMCwgezB4MDgsMHgxZCwweDgwLDB4MDAsMHhmOCwweDA0LDB4M2UsMHhkMCwweDBmLDB4YjAsMHgxMywweGUwLDB4MDAsMHhmYiwweDAyLDB4M2EgfX0sCisgezE2LCAweGIzZDAsIDAsIHsweGQwLDB4MGYsMHhhMCwweDBiLDB4YWMsMHg0MCwweGZiLDB4MDAsMHgzYSwweDAwLDB4MmYsMHhiMCwweDAzLDB4Y2MsMHgwMCwweGYwIH19LAorIHsxNiwgMHhiM2UwLCAwLCB7MHgwMCwweDNhLDB4YzQsMHgwZiwweGIwLDB4MDMsMHhmYywweDQxLDB4ZjMsMHgwMCwweDNhLDB4NDAsMHgwZiwweDUwLDB4OTMsMHhjMiB9fSwKKyB7MTYsIDB4YjNmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4Y2MsMHg4MSwweDNmLDB4ZmMgfX0sCisgezE2LCAweGI0MDAsIDAsIHsweDFjLDB4ZjgsMHgwMywweDc2LDB4NDAsMHhlZiwweDkyLDB4M2YsMHhlNCwweDhjLDB4ZjgsMHgwMywweGJmLDB4MTAsMHhmZiwweDgwIH19LAorIHsxNiwgMHhiNDEwLCAwLCB7MHhiMywweDIwLDB4MGUsMHhmOSwweDEzLDB4ZmUsMHgyNCwweGZkLDB4OTQsMHgzNywweGUwLDB4MWMsMHhmOSwweDAzLDB4ZWUsMHgwMCB9fSwKKyB7MTYsIDB4YjQyMCwgMCwgezB4Y2QsMHg4MCwweGIzLDB4ZTAsMHgwYywweDU4LDB4MDIsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0MzAsIDAsIHsweGE4LDB4MTEsMHg5NCwweDQwLDB4ODAsMHgwMCwweDJmLDB4YzQsMHgwOCwweDcyLDB4MDIsMHhkZCwweDA4LDB4ZDcsMHgwMCwweDJkIH19LAorIHsxNiwgMHhiNDQwLCAwLCB7MHhjYywweDA4LDB4ZGUsMHgwMywweDVjLDB4MDAsMHhiNywweDA0LDB4MjEsMHg4MCwweGM4LDB4NzAsMHg4MywweGRjLDB4MDAsMHhiNCB9fSwKKyB7MTYsIDB4YjQ1MCwgMCwgezB4YTAsMHgyZiwweGMwLDB4MGMsMHg3MCwweDAyLDB4ZGUsMHg4MCwweDg3LDB4MDAsMHgyMSwweGMyLDB4MGEsMHg1MSwweDQyLDB4MmEgfX0sCisgezE2LCAweGI0NjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDg0LDB4MDAsMHgyZCwweGM4IH19LAorIHsxNiwgMHhiNDcwLCAwLCB7MHg0OCwweDcwLDB4MDIsMHg1NCwweDBjLDB4YTcsMHgwMCwweDJjLDB4YzAsMHg4OSwweDcyLDB4MDIsMHg1YywweDAwLDB4YjMsMHgxMCB9fSwKKyB7MTYsIDB4YjQ4MCwgMCwgezB4MjAsMHgwMCwweDBhLDB4NzAsMHgwNiwweGRjLDB4MDAsMHhiNCwweDIwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4ODAgfX0sCisgezE2LCAweGI0OTAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHg1MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNGEwLCAwLCB7MHgyMCwweDE0LDB4YzAsMHgwMCwweDgwLDB4MDAsMHgyZSwweGMwLDB4MDgsMHgzMCwweDAyLDB4YzQsMHgwOCwweGEyLDB4NDIsMHgyYyB9fSwKKyB7MTYsIDB4YjRiMCwgMCwgezB4YzEsMHgwOSwweDIwLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4ODAsMHgwOCwweDNjLDB4MjIsMHg4YywweDIwLDB4YjAgfX0sCisgezE2LCAweGI0YzAsIDAsIHsweDA4LDB4MmUsMHhlMCwweDA4LDB4MzgsMHgxMCwweGNmLDB4MGEsMHg5MywweDQwLDB4YTAsMHhmMCwweDBhLDB4MTAsMHgwMiwweDA4IH19LAorIHsxNiwgMHhiNGQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGE4LDB4MDAsMHhjMSwweDAwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4YjRlMCwgMCwgezB4MmMsMHhmMCwweDAzLDB4NjgsMHgwMCwweGFhLDB4MDAsMHgzZiwweGMwLDB4MmQsMHg4MCwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAgfX0sCisgezE2LCAweGI0ZjAsIDAsIHsweDMyLDB4MDAsMHgwZSwweGIwLDB4MTIsMHhlZCwweDI0LDB4ZmEsMHgwOCwweDI3LDB4YzgsMHgxMCwweGI4LDB4YTIsMHhmZiwweDYwIH19LAorIHsxNiwgMHhiNTAwLCAwLCB7MHg5OCwweGEwLDB4YTIsMHhlMCwweDBjLDB4NTAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjUxMCwgMCwgezB4ODAsMHgwMCwweGM5LDB4MDYsMHhmOCwweDQxLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGU5LDB4MTAsMHg1YSwweDIwLDB4M2UgfX0sCisgezE2LCAweGI1MjAsIDAsIHsweGMwLDB4MGUsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGYzLDB4MDAsMHg3ZSwweDAxLDB4MGYsMHhiMCwweDkzLDB4ZWQsMHgwMCwweGY4IH19LAorIHsxNiwgMHhiNTMwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhmYywweDAwLDB4ZTMsMHgwOCwweDNjLDB4YzIsMHgwZiwweGQwLDB4MTMsMHhlMCB9fSwKKyB7MTYsIDB4YjU0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMywweDAyLDB4Y2MsMHgwMCwweDNiLDB4YzIgfX0sCisgezE2LCAweGI1NTAsIDAsIHsweDBjLDB4ZjAsMHgyMywweGFlLDB4NDAsMHhkZiwweDgxLDB4MzksMHhjMCwweDA2LDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA0IH19LAorIHsxNiwgMHhiNTYwLCAwLCB7MHgzMSwweDQxLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGNjLDB4YTAsMHgzNywweGMyLDB4MGMsMHhmMCwweDAzLDB4N2MsMHgwNCB9fSwKKyB7MTYsIDB4YjU3MCwgMCwgezB4Y2QsMHgwMCwweDMzLDB4ZjAsMHgwYywweGQwLDB4MDMsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1ODAsIDAsIHsweDgxLDB4MDQsMHg2MCwweDAwLDB4ODgsMHg4MCwweDIyLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlOSwweDAwLDB4YWIsMHg0NCwweDJlIH19LAorIHsxNiwgMHhiNTkwLCAwLCB7MHhjMCwweDA4LDB4ODgsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwLDB4YTIsMHg3MCwweDBhLDB4YjQsMHgwMiwweGNjLDB4MDAsMHhhMCB9fSwKKyB7MTYsIDB4YjVhMCwgMCwgezB4MjAsMHgyMiwweGMwLDB4MGYsMHhiYywweDAyLDB4Y2MsMHgwYSwweDhiLDB4ODAsMHhhMiwweGMwLDB4MGQsMHg5MCwweDAyLDB4MjAgfX0sCisgezE2LCAweGI1YjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjAsMHgwMCwweDg5LDB4ODAsMHgyYSwweGMwIH19LAorIHsxNiwgMHhiNWMwLCAwLCB7MHgwOCwweGIwLDB4MDIsMHhjYywweDA2LDB4ODgsMHg2MCwweDJlLDB4YzAsMHgwYSwweDk4LDB4MDYsMHhlYywweDAxLDB4YmIsMHgwMCB9fSwKKyB7MTYsIDB4YjVkMCwgMCwgezB4MjIsMHgzMSwweDAyLDB4YjIsMHgwMiwweGVjLDB4YTAsMHg4YSwweDAwLDB4MjYsMHhjMCwweDQ4LDB4YTgsMHgwMiwweGVjLDB4MDQgfX0sCisgezE2LCAweGI1ZTAsIDAsIHsweGE5LDB4ODAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNWYwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgzMCwweDQyLDB4Y2MsMHgwMCwweDgwLDB4MDEsMHgyYyB9fSwKKyB7MTYsIDB4YjYwMCwgMCwgezB4YzAsMHgxYSwweDEyLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4MDAsMHg0YSwweDMwLDB4MDIsMHhjYywweDAwLDB4YTAgfX0sCisgezE2LCAweGI2MTAsIDAsIHsweDAwLDB4MDgsMHhjMCwweDBiLDB4MjAsMHgwNiwweGVjLDB4YTAsMHhhMywweDAwLDB4YTAsMHg0MCwweDI5LDB4MTAsMHgwMCwweDAyIH19LAorIHsxNiwgMHhiNjIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhjOCwweDUwLDB4M2IsMHhjMCB9fSwKKyB7MTYsIDB4YjYzMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4YWMsMHgwMCwweGM5LDB4MDAsMHgzYiwweGMwLDB4MGUsMHg5MiwweDgzLDB4ZmMsMHgwMCwweGJmLDB4MDAgfX0sCisgezE2LCAweGI2NDAsIDAsIHsweDEyLDB4MDAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ODgsMHgyNiwweDE2LDB4YzAsMHgwYywweDgwLDB4MTcsMHg1YywweDgwIH19LAorIHsxNiwgMHhiNjUwLCAwLCB7MHhlOSwweDAxLDB4MzIsMHg0MCwweDJjLDB4ZDAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjY2MCwgMCwgezB4YTAsMHgxZCwweGQwLDB4MDAsMHhmYywweDIwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmYywweDAwLDB4M2YgfX0sCisgezE2LCAweGI2NzAsIDAsIHsweGMwLDB4MGQsMHg4MCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgxMCwweGY4IH19LAorIHsxNiwgMHhiNjgwLCAwLCB7MHg0MCwweDM3LDB4YzAsMHgwZSwweGUwLDB4MjEsMHhmYywweDA4LDB4ZGYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YjY5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweGMwLDB4ZmYsMHgyMSwweDcxLDB4MjQgfX0sCisgezE2LCAweGI2YTAsIDAsIHsweDBmLDB4ZjEsMHg4MywweGYyLDB4NDAsMHhmZiwweDAwLDB4MzcsMHhjNCwweDlmLDB4ZjIsMHg0NywweDNkLDB4MDQsMHhjNywweDIwIH19LAorIHsxNiwgMHhiNmIwLCAwLCB7MHgzMywweGMwLDB4MGMsMHg3OCwweDIzLDB4ZmUsMHg0MCwweGU4LDB4MTAsMHgyNywweGM0LDB4MGYsMHhmMiwweDEzLDB4M2MsMHg4NCB9fSwKKyB7MTYsIDB4YjZjMCwgMCwgezB4YzQsMHg4MSwweDMzLDB4MjAsMHg0YywweGYwLDB4MjMsMHg3MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2ZDAsIDAsIHsweDgwLDB4MTAsMHhlZCwweDQwLDB4YmYsMHg1NCwweDYyLDB4YzgsMHgwYiwweGY2LDB4MDIsMHhlMCwweDAwLDB4YmIsMHhkMCwweDIyIH19LAorIHsxNiwgMHhiNmUwLCAwLCB7MHhmMCwweDFmLDB4ZjksMHgxMiwweDNkLDB4ODAsMHg5ZiwweDgxLDB4MmIsMHhlMCwweDBhLDB4YjgsMHgxMiwweGU4LDB4MDAsMHg4ZiB9fSwKKyB7MTYsIDB4YjZmMCwgMCwgezB4MDQsMHgyMiwweGQwLDB4MDgsMHhiMywweDhhLDB4YmYsMHg0MiwweDhiLDB4ODIsMHgyMiwweGUwLDB4MjgsMHg4YywweDAyLDB4MjAgfX0sCisgezE2LCAweGI3MDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGIzLDB4MjgsMHgyOCwweDA4IH19LAorIHsxNiwgMHhiNzEwLCAwLCB7MHgwYiwweDMwLDB4MDYsMHg4MCwweDgwLDB4YjMsMHgwMiwweDI0LDB4ZDEsMHgwYiwweDMwLDB4MDIsMHg4ZCwweDgwLDB4OTMsMHgxMCB9fSwKKyB7MTYsIDB4YjcyMCwgMCwgezB4MjAsMHhjZSwweDhiLDB4MzAsMHgwMiwweGNjLDB4ODQsMHhhMSwweDIxLDB4MmMsMHhjYywweDBhLDB4MzAsMHgwYSwweDRjLDB4MDAgfX0sCisgezE2LCAweGI3MzAsIDAsIHsweDkzLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzYywweDAyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNzQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgxMCwweGJiLDB4MDIsMHg2YSwweGUwLDB4MGIsMHhiMCwweDAyLDB4ZTEsMHgwOCwweGJiLDB4MDQsMHgyYSB9fSwKKyB7MTYsIDB4Yjc1MCwgMCwgezB4YzAsMHgwYSwweGIwLDB4MTIsMHg4YywweDAwLDB4OWIsMHgwMCwweDJhLDB4YzAsMHgwYiwweGIxLDB4MDYsMHhjOCwweDgwLDB4OGIgfX0sCisgezE2LCAweGI3NjAsIDAsIHsweDgyLDB4NmEsMHhjMSwweDBhLDB4MzAsMHgwMiwweGFjLDB4MTgsMHg4OCwweDEwLDB4MmEsMHg0OCwweDA4LDB4ODAsMHgwMiwweDMwIH19LAorIHsxNiwgMHhiNzcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhmYiwweDAwLDB4YWEsMHgzMCB9fSwKKyB7MTYsIDB4Yjc4MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4YTgsMHgwMCwweGYzLDB4MDEsMHhiNiwweGMxLDB4MGIsMHhiMCwweDAyLDB4YWMsMHgwOCwweDRiLDB4MDAgfX0sCisgezE2LCAweGI3OTAsIDAsIHsweGIyLDB4YzAsMHgwZiwweGI4LDB4MDIsMHhlYywweDEwLDB4YTksMHg4MSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgwYywweDAwIH19LAorIHsxNiwgMHhiN2EwLCAwLCB7MHhjYiwweGEwLDB4MTgsMHhkMCwweDBjLDB4YjAsMHgwMywweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjdiMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDgsMHhmNywweDAwLDB4MzcsMHgwMCwweDBmLDB4ZjAsMHgwMywweGZkLDB4MDAsMHhmZiwweDAwLDB4MzcgfX0sCisgezE2LCAweGI3YzAsIDAsIHsweGMwLDB4MGYsMHhiMCwweDA3LDB4N2MsMHgwMCwweGU3LDB4MDAsMHgzZSwweGMwLDB4MGEsMHhmMCwweDAzLDB4ZmUsMHgwMCwweGY3IH19LAorIHsxNiwgMHhiN2QwLCAwLCB7MHgwMCwweDM2LDB4YzAsMHgwYywweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGEwLDB4MDMsMHhiOCB9fSwKKyB7MTYsIDB4YjdlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZGIsMHgwMCwweDM2LDB4MDAgfX0sCisgezE2LCAweGI3ZjAsIDAsIHsweDBlLDB4YjAsMHgwMywweDY5LDB4MDAsMHhkYiwweDA5LDB4M2EsMHhjMCwweDFmLDB4MzAsMHgyMywweGVjLDB4MDgsMHhjYiwweDIwIH19LAorIHsxNiwgMHhiODAwLCAwLCB7MHgzNCwweGMwLDB4MmYsMHhiMCwweDAzLDB4ZWMsMHg0MCwweGViLDB4NDgsMHgzZSwweGM0LDB4NGQsMHhiMCwweDhiLDB4NmMsMHgwMCB9fSwKKyB7MTYsIDB4YjgxMCwgMCwgezB4Y2IsMHgwMCwweDMyLDB4OTAsMHgwZiwweDMwLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI4MjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4OGYsMHgwMCwweDIyLDB4MDAsMHg0OCwweGYwLDB4MjIsMHgyYywweDAwLDB4OGYsMHgwMCwweDIzIH19LAorIHsxNiwgMHhiODMwLCAwLCB7MHhlMCwweDhiLDB4ZjUsMHgxMCwweDNjLDB4MDAsMHg4ZiwweDgwLDB4MjMsMHhmMCwweDgwLDB4OTgsMHgwMywweDJkLDB4NDQsMHhkYiB9fSwKKyB7MTYsIDB4Yjg0MCwgMCwgezB4MDAsMHgyMywweGQ0LDB4MDgsMHhmOCwweDAyLDB4M2MsMHgwMCwweDgzLDB4MDAsMHgyMiwweGMwLDB4MGIsMHhhNCwweDgyLDB4MzIgfX0sCisgezE2LCAweGI4NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHgyNCwweDAwIH19LAorIHsxNiwgMHhiODYwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHg4NCwweDAwLDB4YjMsMHgwMSwweDI4LDB4ZjYsMHgwOSwweDM0LDB4MzIsMHg4YywweDAxLDB4YjMsMHhkMCB9fSwKKyB7MTYsIDB4Yjg3MCwgMCwgezB4MjQsMHhlOCwweDBhLDB4MzEsMHgwYSwweDg2LDB4MDAsMHg4MywweDAwLDB4MmEsMHhlMCwweDAwLDB4MzAsMHgwMiwweDhjLDB4MDAgfX0sCisgezE2LCAweGI4ODAsIDAsIHsweDgzLDB4MDAsMHgyOCwweGMwLDB4ODksMHgzOCwweGEyLDB4NzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiODkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweDk3LDB4OTQsMHgyMywweGUwLDB4MDksMHgzOCwweDAyLDB4MzIsMHgwMCwweDk3LDB4YTEsMHgyMSB9fSwKKyB7MTYsIDB4YjhhMCwgMCwgezB4ZTQsMHgwYiwweDc4LDB4MDIsMHgxZSwweDQwLDB4YjcsMHhhMCwweDI1LDB4ZWMsMHgwOCwweGZjLDB4MDIsMHgzYSwweDAwLDB4OTMgfX0sCisgezE2LCAweGI4YjAsIDAsIHsweGI4LDB4MjEsMHhlMCwweDA4LDB4NzgsMHg4MiwweDllLDB4NDAsMHg4NywweGMwLDB4MjksMHhhMCwweDBiLDB4NTgsMHgwMiwweDQ4IH19LAorIHsxNiwgMHhiOGMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDJjLDB4MDAsMHhkYiwweDAwLDB4MzQsMHgyMCB9fSwKKyB7MTYsIDB4YjhkMCwgMCwgezB4MGYsMHgzYSwweDAzLDB4OGUsMHgwMCwweGYzLDB4YjAsMHgyOCwweGM0LDB4MGIsMHgzYSwweDAzLDB4YWUsMHg0MCwweGYzLDB4YTAgfX0sCisgezE2LCAweGI4ZTAsIDAsIHsweDM0LDB4ZWUsMHgwZiwweDMwLDB4MjMsMHg4NCwweDAwLDB4ZTMsMHhmMCwweDM4LDB4YzAsMHgwYywweGIwLDB4MGIsMHg4ZSwweDQyIH19LAorIHsxNiwgMHhiOGYwLCAwLCB7MHhjMywweDAwLDB4MzgsMHhjMCwweDBmLDB4MzAsMHg2MywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjkwMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhlYiwweDQyLDB4M2EsMHhjNCwweDFlLDB4YjEsMHgwNywweDg4LDB4ZDEsMHhlMywweDAwLDB4M2YgfX0sCisgezE2LCAweGI5MTAsIDAsIHsweGM1LDB4OGYsMHhmMSwweDYzLDB4YWMsMHgxMCwweGNiLDB4NTAsMHgzYiwweGMzLDB4MGYsMHhkMSwweDAzLDB4YzgsMHgwMCwweGJiIH19LAorIHsxNiwgMHhiOTIwLCAwLCB7MHgyMCwweDNiLDB4YzAsMHgyZSwweGYxLDB4MDMsMHgxYywweDAwLDB4ZmYsMHgwMCwweDM3LDB4YzAsMHg0ZiwweGQxLDB4MDMsMHg5MCB9fSwKKyB7MTYsIDB4YjkzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDQwLDB4ZmIsMHg0NCwweGIyLDB4YzAgfX0sCisgezE2LCAweGI5NDAsIDAsIHsweDRmLDB4YjMsMHg0MywweDI0LDB4MDAsMHhkYiwweDEwLDB4MzYsMHhjMCwweDRjLDB4YmUsMHgyMiwweDZkLDB4MjAsMHhjYiwweDUwIH19LAorIHsxNiwgMHhiOTUwLCAwLCB7MHgzZSwweGM5LDB4NGMsMHhiMCwweDEzLDB4MjQsMHgwMCwweGNmLDB4MjAsMHgzMywweGMwLDB4M2QsMHhmMCwweDIzLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4Yjk2MCwgMCwgezB4ZDgsMHgwMCwweDNlLDB4NDAsMHg4ZiwweDMwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5NzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDA0LDB4YjcsMHg2MCwweDIxLDB4YzEsMHg4YiwweGYwLDB4YTIsMHgxNCwweDEwLDB4ODcsMHgwMCwweDBmIH19LAorIHsxNiwgMHhiOTgwLCAwLCB7MHhjOCwweDBkLDB4NzEsMHgwYSwweDFkLDB4MDAsMHg4NywweDAwLDB4MmMsMHhjYywweDQ4LDB4NzAsMHgyYSwweDljLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4Yjk5MCwgMCwgezB4MGMsMHgyMSwweGMwLDB4MGMsMHg3MiwweDAyLDB4MGMsMHhhMiwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4MTIgfX0sCisgezE2LCAweGI5YTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGIzLDB4ODAsMHgyMSwweGUwIH19LAorIHsxNiwgMHhiOWIwLCAwLCB7MHgwYiwweDdhLDB4MDIsMHhkZSwweDAwLDB4YjcsMHg4MSwweDA1LDB4ZTQsMHgwOCwweDc5LDB4MDIsMHg1YywweDgwLDB4ODcsMHhhMCB9fSwKKyB7MTYsIDB4YjljMCwgMCwgezB4MmQsMHhlMCwweDA4LDB4ZjgsMHgwNiwweGI2LDB4MDAsMHg4NywweDgwLDB4MjAsMHhlNCwweDBhLDB4N2IsMHgxMiwweDFlLDB4OTAgfX0sCisgezE2LCAweGI5ZDAsIDAsIHsweDk3LDB4ODgsMHgyZCwweGUwLDB4MGIsMHg3OCwweDBlLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOWUwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweGQwLDB4MGIsMHhiMCwweDAyLDB4NmUsMHgzNCwweGEzLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4YjlmMCwgMCwgezB4YzEsMHgwOSwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAsMHg0OCwweDEwLDB4MDIsMHg4ZCwweDgwLDB4ODMgfX0sCisgezE2LCAweGJhMDAsIDAsIHsweGMwLDB4MDAsMHhjMCwweDhhLDB4MzAsMHgxMiwweDBjLDB4MDAsMHg4MCwweDAwLDB4MmMsMHgxNiwweDBiLDB4MzgsMHgwMiwweDEyIH19LAorIHsxNiwgMHhiYTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4MzMsMHg4OCB9fSwKKyB7MTYsIDB4YmEyMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4NzksMHg5MCwweGZhLDB4MDEsMHgzNiwweDgwLDB4MWMsMHhhMCwweDAzLDB4NjgsMHgwMCwweGNhLDB4MDAgfX0sCisgezE2LCAweGJhMzAsIDAsIHsweDNlLDB4ODEsMHgyYywweGEwLDB4MGIsMHhiOSwweDBjLDB4Y2UsMHhlMiwweGIyLDB4ODAsMHg4ZSwweGEwLDB4MGIsMHgyOCwweDAwIH19LAorIHsxNiwgMHhiYTQwLCAwLCB7MHhkYSwweDgwLDB4M2MsMHhiMCwweDBmLDB4ZTAsMHg4MywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmE1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGEwLDB4MDAsMHhjOCwweDAwLDB4MmUgfX0sCisgezE2LCAweGJhNjAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDIzLDB4YTAsMHgwMCwweGYwLDB4NDAsMHgzZSwweDEwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMiwweGY4IH19LAorIHsxNiwgMHhiYTcwLCAwLCB7MHg0OCwweDNlLDB4MTAsMHgwYywweDgwLDB4MDMsMHhjMCwweDEwLDB4ZjgsMHg4MCwweDNlLDB4MDAsMHgwZiwweDAwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4YmE4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweDM2LDB4NDIgfX0sCisgezE2LCAweGJhOTAsIDAsIHsweDBmLDB4OTAsMHgwMywweDI0LDB4MTgsMHhmOSwweDEwLDB4M2MsMHg0OCwweDY4LDB4OTIsMHgxMywweGU0LDB4MDAsMHhhOSwweDExIH19LAorIHsxNiwgMHhiYWEwLCAwLCB7MHhiMiwweDYwLDB4MGUsMHg5MSwweDAzLDB4MjYsMHgwMCwweGM5LDB4MDAsMHgzMiwweDYwLDB4MGMsMHgxMCwweDAzLDB4MjQsMHgwOCB9fSwKKyB7MTYsIDB4YmFiMCwgMCwgezB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MjMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJhYzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDA4LDB4ODksMHgwMCwweDJlIH19LAorIHsxNiwgMHhiYWQwLCAwLCB7MHg0MiwweDQ4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHg4OSwweDgwLDB4MjIsMHg3MCwweDA4LDB4MTQsMHgyMiwweGE0LDB4MDIsMHg4OSB9fSwKKyB7MTYsIDB4YmFlMCwgMCwgezB4NDIsMHgyYSwweDcwLDB4MjgsMHg5MCwweDBhLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDQwLDB4MjgsMHg5MCwweDAyLDB4YTAgfX0sCisgezE2LCAweGJhZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDk5LDB4MDAsMHgyNiwweGMwIH19LAorIHsxNiwgMHhiYjAwLCAwLCB7MHgwMywweDkwLDB4MDIsMHgyNCwweDAxLDB4YTksMHgwMCwweDBlLDB4NDAsMHgwYSwweDkwLDB4NDYsMHhjNCwweDBhLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4YmIxMCwgMCwgezB4MjAsMHg0OCwweDBhLDB4OTAsMHgwMiwweDA1LDB4ODAsMHg4MSwweDQxLDB4YTAsMHg1OCwweDg4LDB4OTAsMHgwMiwweDI0LDB4MDggfX0sCisgezE2LCAweGJiMjAsIDAsIHsweDhkLDB4ODAsMHgyZiwweGMwLDB4MDgsMHg5OCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYjMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyMCwweDQwLDB4MGIsMHgxMiwweDAyLDB4ODQsMHgwMCwweDgxLDB4MjQsMHgyYyB9fSwKKyB7MTYsIDB4YmI0MCwgMCwgezB4NTgsMHgwYSwweDMyLDB4MjIsMHhjNSwweDg0LDB4YTEsMHgwMCwweDIwLDB4NTAsMHgwOCwweGIwLDB4MDIsMHg4NSwweDA4LDB4ODEgfX0sCisgezE2LCAweGJiNTAsIDAsIHsweDQwLDB4MjAsMHg1YSwweDA4LDB4MTYsMHg4MiwweDA0LDB4MDAsMHhhNSwweDAwLDB4MmQsMHg0MCwweDA4LDB4MTIsMHg4MiwweDgyIH19LAorIHsxNiwgMHhiYjYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4MzYsMHgxNCB9fSwKKyB7MTYsIDB4YmI3MCwgMCwgezB4MGYsMHg4NSwweDIzLDB4MDEsMHg0MCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDQzLDB4YzAsMHgwOCwweGNhLDB4MDAgfX0sCisgezE2LCAweGJiODAsIDAsIHsweDMyLDB4ODAsMHgwZSwweDgwLDB4MDMsMHgyMCwweDAwLDB4YzAsMHgwMCwweDMyLDB4MDgsMHgyYywweDAyLDB4MDMsMHgyMCwweDA4IH19LAorIHsxNiwgMHhiYjkwLCAwLCB7MHhjOCwweDAwLDB4M2YsMHgwMCwweDBjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmJhMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4OTEsMHg0MywweGY0LDB4MDQsMHhmOSwweDEwLDB4M2UgfX0sCisgezE2LCAweGJiYjAsIDAsIHsweDQ0LDB4MGQsMHgxMSwweDAzLDB4ZTQsMHg0NCwweDU5LDB4NDAsMHgzZSwweDUwLDB4NGYsMHg1MCwweDQzLDB4ZDQsMHgwMiwweGZkIH19LAorIHsxNiwgMHhiYmMwLCAwLCB7MHg0MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHhlNSwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg0ZiwweGQwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4YmJkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHg2NiwweDYwLDB4YzksMHhlMCwweDMyLDB4NDQgfX0sCisgezE2LCAweGJiZTAsIDAsIHsweDBmLDB4OWMsMHgwMywweGU0LDB4MDAsMHhkZCwweDg0LDB4M2YsMHg2OCwweDhmLDB4ZDgsMHg0MiwweGU2LDB4YTAsMHhkZCwweGE0IH19LAorIHsxNiwgMHhiYmYwLCAwLCB7MHgzMywweDY4LDB4MGQsMHg3MCwweDAzLDB4MjUsMHgwMCwweGM5LDB4ZTAsMHhiMiwweDY4LDB4MGMsMHg5YSwweGMzLDB4MjYsMHgwMCB9fSwKKyB7MTYsIDB4YmMwMCwgMCwgezB4OTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDlhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjMTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDAwLDB4ODgsMHg4MCwweGFhLDB4MjAsMHg4YiwweDg4LDB4MDIsMHhlMiwweDg4LDB4YjgsMHgwMSwweDJlIH19LAorIHsxNiwgMHhiYzIwLCAwLCB7MHgwMCwweDBiLDB4ODQsMHgwMiwweGUyLDB4YjAsMHg4OCwweDUwLDB4MjIsMHgxNCwweDA4LDB4ODAsMHgwMiwweDgyLDB4ODAsMHg4OCB9fSwKKyB7MTYsIDB4YmMzMCwgMCwgezB4ZTAsMHhiNiwweDNhLDB4MDgsMHhjZSwweGEyLDB4MjEsMHgwOCwweDg4LDB4MDAsMHgyZSwweDAwLDB4MGIsMHhjNCwweDAyLDB4MGUgfX0sCisgezE2LCAweGJjNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweDgxLDB4NjAsMHg2OCwweDQ4IH19LAorIHsxNiwgMHhiYzUwLCAwLCB7MHg1YiwweDE2LDB4MDIsMHhjNCwweDIwLDB4YTEsMHg0MCwweDZjLDB4NTAsMHgwYiwweDE0LDB4MDIsMHhjNCwweDAwLDB4YTEsMHgwMCB9fSwKKyB7MTYsIDB4YmM2MCwgMCwgezB4MjQsMHg0MCwweDBiLDB4OTAsMHgyMiwweDE0LDB4OTAsMHg4NSwweDQyLDB4MjEsMHg1MCwweDViLDB4NTAsMHgxYSwweDE1LDB4MDAgfX0sCisgezE2LCAweGJjNzAsIDAsIHsweDk1LDB4MDAsMHgyZCwweDQwLDB4MGIsMHg1MSwweDBhLDB4ODIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYzgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMSwweDg5LDB4MDAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDQ2LDB4ZTQsMHgwMCwweGI5LDB4MDEsMHgyZSB9fSwKKyB7MTYsIDB4YmM5MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MjAsMHhlNCwweDAwLDB4YjksMHgwMCwweDI2LDB4NDAsMHgxOCwweGI4LDB4MDIsMHhhNCwweDAyLDB4OGQgfX0sCisgezE2LCAweGJjYTAsIDAsIHsweDA4LDB4MmYsMHg0MCwweDhiLDB4ZDAsMHgwMiwweDI0LDB4MDAsMHg4ZCwweDIwLDB4MmYsMHg0OCwweDBiLDB4ZDAsMHgwMiwweDg2IH19LAorIHsxNiwgMHhiY2IwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4YmNjMCwgMCwgezB4MGYsMHg5MCwweDAyLDB4ZTQsMHgxMCwweDQ5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGU5LDB4MDEgfX0sCisgezE2LCAweGJjZDAsIDAsIHsweDM2LDB4NDAsMHgwZiwweDE4LDB4MTMsMHgyNCwweDEwLDB4YzksMHg4MiwweDMyLDB4NDAsMHg3ZiwweDkwLDB4MjMsMHgyNCwweDAwIH19LAorIHsxNiwgMHhiY2UwLCAwLCB7MHhkOSwweDIwLDB4M2UsMHg3MiwweDBmLDB4OTAsMHgwMywweGE4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmNmMCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MDIsMHhmMSwweDAxLDB4MTYsMHg0MCwweDRmLDB4OTAsMHgwMywweGU1LDB4MTAsMHhmOSwweDA4LDB4MmUgfX0sCisgezE2LCAweGJkMDAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGM5LDB4MDEsMHgzYSwweDQwLDB4MWYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhiZDEwLCAwLCB7MHgyMCwweDM0LDB4NDAsMHg4YywweDkwLDB4MDMsMHhjNCwweDA4LDB4ZjksMHgwMCwweDNlLDB4NjAsMHgwZiwweDEwLDB4MDMsMHg0YSB9fSwKKyB7MTYsIDB4YmQyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA4LDB4ZjgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGJkMzAsIDAsIHsweDBjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMiwweDRmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhkMCwweDAwIH19LAorIHsxNiwgMHhiZDQwLCAwLCB7MHgzZSwweDAwLDB4MGUsMHg4MSwweDAzLDB4MzAsMHgwMCwweGNjLDB4NDAsMHgzMywweDAwLDB4MGMsMHhjMCwweDBiLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4YmQ1MCwgMCwgezB4ZTgsMHgwMCwweDNlLDB4MTAsMHgwZiwweGMwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDA0LDB4YmEsMHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4YmUsMHhjOCwweDZmIH19LAorIHsxNiwgMHhiZDcwLCAwLCB7MHg4MCwweDBiLDB4ZTEsMHgyMiwweGE4LDB4MDAsMHg4ZSwweDIwLDB4MmYsMHg4MCwweDBiLDB4ZTAsMHgyMywweDY4LDB4MDAsMHg4YSB9fSwKKyB7MTYsIDB4YmQ4MCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MDgsMHhlMCwweDAyLDB4MjksMHgwMCwweDhhLDB4MDAsMHgyZSwweGE4LDB4MGIsMHhhMCwweDAwLDB4Y2EgfX0sCisgezE2LCAweGJkOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwIH19LAorIHsxNiwgMHhiZGEwLCAwLCB7MHgwOSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHhjMSwweDJjLDB4ZTAsMHgwYiwweDM4LDB4NTYsMHgyYywweDEwLDB4MTMsMHgwMCB9fSwKKyB7MTYsIDB4YmRiMCwgMCwgezB4MmUsMHhjMCwweDBhLDB4MzgsMHg2YSwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjAsMHgwMCwweDA5LDB4ODAsMHgyMiwweDRjLDB4NDIgfX0sCisgezE2LCAweGJkYzAsIDAsIHsweGEzLDB4MDAsMHgyYywweGUwLDB4MGIsMHgyNCwweDgwLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZGQwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwOCwweGI3LDB4MjQsMHgyZiwweGUwLDB4MDksMHgzOSwweDAyLDB4MWMsMHgwMSwweGI2LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4YmRlMCwgMCwgezB4OTAsMHgwYiwweDYwLDB4OTIsMHg4ZSwweDAwLDB4ODYsMHg4MiwweDJkLDB4YzIsMHgwYiwweGYwLDB4MDIsMHg1YywweDA2LDB4ODcgfX0sCisgezE2LCAweGJkZjAsIDAsIHsweDAwLDB4NjAsMHhjMCwweDI5LDB4NzAsMHgwMiwweDVjLDB4MDAsMHg4NiwweDAwLDB4MmQsMHhjMCwweDBiLDB4NjAsMHgwMiwweGU4IH19LAorIHsxNiwgMHhiZTAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFmLDB4NDAsMHhmMywweGU0LDB4M2QsMHhlOCB9fSwKKyB7MTYsIDB4YmUxMCwgMCwgezB4MGQsMHg3OSwweDBiLDB4MWUsMHhjMCwweDY3LDB4ODAsMHgyZCwweGUwLDB4MGYsMHg3MCwweDQzLDB4MWQsMHg4MCwweGQ1LDB4MDAgfX0sCisgezE2LCAweGJlMjAsIDAsIHsweDNkLDB4NjAsMHgwZSwweDc4LDB4MDMsMHgxZSwweDAwLDB4Y2QsMHg4MCwweDMxLDB4ZTAsMHgwZCwweGM4LDB4MDMsMHg0ZSwweDAwIH19LAorIHsxNiwgMHhiZTMwLCAwLCB7MHhlNSwweDgwLDB4M2QsMHhlMCwweDBmLDB4NDgsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmU0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4ODAsMHhmYiwweDAwLDB4NzAsMHhjMCwweDZlLDB4YjYsMHgxMywweGFkLDB4NDAsMHhmYSwweDAwLDB4M2UgfX0sCisgezE2LCAweGJlNTAsIDAsIHsweGMwLDB4MGYsMHgyMCwweDQzLDB4MmQsMHgxOCwweDU5LDB4MDAsMHgzZSwweDAwLDB4MDMsMHhiMCwweDBiLDB4ZTAsMHgwMCwweGZhIH19LAorIHsxNiwgMHhiZTYwLCAwLCB7MHgwMCwweGJlLDB4MDAsMHgwZSwweGIwLDB4MTMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YmU3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDQwLDB4ZmYsMHg4MCwweDNmLDB4ZTYgfX0sCisgezE2LCAweGJlODAsIDAsIHsweDBmLDB4ZjgsMHgyMywweDJlLDB4MDQsMHhmZiwweDkwLDB4M2YsMHhlNCwweDBkLDB4YmEsMHgwMywweGZmLDB4NDAsMHhjZiwweDgwIH19LAorIHsxNiwgMHhiZTkwLCAwLCB7MHgyMiwweGUxLDB4MGMsMHgzOSwweDQzLDB4MzIsMHgxMCwweGVjLDB4OTAsMHgzMywweDIwLDB4OGUsMHhjOCwweDAzLDB4ZjIsMHgwMCB9fSwKKyB7MTYsIDB4YmVhMCwgMCwgezB4ZGYsMHg4MCwweDNmLDB4NjAsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlYjAsIDAsIHsweGE4LDB4MTEsMHg5YywweDQwLDB4YjcsMHg5MCwweDNjLDB4ZTAsMHgwYiwweDNhLDB4MDMsMHg0ZSwweDgwLDB4ZjMsMHhiMSwweDJkIH19LAorIHsxNiwgMHhiZWMwLCAwLCB7MHgwNCwweDRjLDB4MzgsMHgyMywweGFlLDB4MDAsMHg4MCwweDgwLDB4MzQsMHhlOCwweDRkLDB4NzgsMHgwMiwweDNlLDB4ODAsMHg4NyB9fSwKKyB7MTYsIDB4YmVkMCwgMCwgezB4YTAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDAyLDB4YzAsMHg4MCwweDg2LDB4MDIsMHgyZCwweDQxLDB4MGIsMHg3MCwweDAyLDB4ZWEgfX0sCisgezE2LCAweGJlZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHg0OCwweDM3LDB4MDEsMHgyZCwweGM5IH19LAorIHsxNiwgMHhiZWYwLCAwLCB7MHgwYiwweDcyLDB4MjIsMHgxYywweDg0LDB4YjUsMHgxNiwweDBkLDB4YzQsMHgxOSwweDQwLDB4NDIsMHhkYywweDgwLDB4ODcsMHgwMCB9fSwKKyB7MTYsIDB4YmYwMCwgMCwgezB4MjAsMHhjOCwweDg4LDB4NzMsMHgwYSwweDljLDB4ODAsMHhiNSwweDAwLDB4MjksMHhjMCwweDBhLDB4NDgsMHgwMiwweGMwLDB4MDIgfX0sCisgezE2LCAweGJmMTAsIDAsIHsweDk1LDB4MDAsMHgyZCwweDQyLDB4MGIsMHg1OCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZjIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYSwweGUwLDB4MGIsMHgzMCwweDAyLDB4NGMsMHgyMCwweGExLDB4MDEsMHgyNCB9fSwKKyB7MTYsIDB4YmYzMCwgMCwgezB4YzEsMHgwOCwweDAwLDB4MDIsMHg4YywweDAwLDB4ODEsMHgwMCwweDI0LDB4ODAsMHgwOSwweDM4LDB4MGEsMHg2MCwweDgwLDB4OTIgfX0sCisgezE2LCAweGJmNDAsIDAsIHsweDQwLDB4MmEsMHgwMCwweDBhLDB4MzAsMHgwMiwweGMwLDB4MDAsMHg4MCwweGM4LDB4MmMsMHg3MiwweDBiLDB4MTQsMHgwMiwweGM4IH19LAorIHsxNiwgMHhiZjUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhmZiwweDAwLDB4MmYsMHhmNCB9fSwKKyB7MTYsIDB4YmY2MCwgMCwgezB4OGYsMHhmMCwweDAzLDB4M2MsMHgwMCwweGI5LDB4MDAsMHgzZSwweDQwLDB4MDksMHg5MCwweDAzLDB4ZmMsMHgwMiwweGMzLDB4MDEgfX0sCisgezE2LCAweGJmNzAsIDAsIHsweDMyLDB4YzAsMHg0OCwweGI4LDB4MTMsMHhhMSwweDAwLDB4YmEsMHgwMCwweDJhLDB4MDAsMHgwYSwweGEwLDB4MDcsMHhlYywweDAwIH19LAorIHsxNiwgMHhiZjgwLCAwLCB7MHhkYiwweGM4LDB4M2UsMHg5MCwweDBmLDB4YTIsMHgwMiwweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmY5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAyLDB4M2UsMHhjNCwweDBmLDB4YjAsMHg2MywweGVjLDB4MDEsMHhmOCwweDQwLDB4M2UgfX0sCisgezE2LCAweGJmYTAsIDAsIHsweDQwLDB4MGIsMHg4MCwweDAzLDB4Y2MsMHgwMCwweGZhLDB4NDIsMHgzZSwweGMwLDB4MGYsMHhiNSwweDAwLDB4YWMsMHg1OCwweGU5IH19LAorIHsxNiwgMHhiZmIwLCAwLCB7MHg4MiwweDNlLDB4YzAsMHgxZCwweDkwLDB4MDMsMHhlYywweDA0LDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YmZjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDBjLDB4ZGYsMHgwMCwweDdmLDB4YzAgfX0sCisgezE2LCAweGJmZDAsIDAsIHsweDJjLDB4ZjAsMHgwMywweDdjLDB4MDEsMHhjNywweDAwLDB4MzMsMHg0MCwweDhmLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhkOCwweDAwIH19LAorIHsxNiwgMHhiZmUwLCAwLCB7MHgxNSwweDQ0LDB4MGMsMHhlMCwweDFiLDB4M2MsMHgwMCwweGNiLDB4MGUsMHgzMywweGMwLDB4NWMsMHg2MiwweDAyLDB4MWMsMHgwMiB9fSwKKyB7MTYsIDB4YmZmMCwgMCwgezB4YzUsMHgwMCwweDJiLDB4ODAsMHgwZiwweGMwLDB4ODcsMHg4MCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwMDAsIDAsIHsweDgxLDB4NDQsMHg2YywweDEwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwOCwweGIwLDB4NTIsMHgwYywweDAxLDB4ZmEsMHhjNCwweDIyIH19LAorIHsxNiwgMHhjMDEwLCAwLCB7MHg2MSwweDBiLDB4ODgsMHgwMywweDZjLDB4MDAsMHg4OCwweDQ3LDB4MmEsMHgwMCwweDBlLDB4MWMsMHgwMiwweDIwLDB4MDIsMHg4OCB9fSwKKyB7MTYsIDB4YzAyMCwgMCwgezB4MDAsMHhhYSwweDAwLDB4MjgsMHg5MCwweDBhLDB4MmMsMHgwNCwweGE4LDB4MDAsMHgyMiwweDkwLDB4MGIsMHg4MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGMwMzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMxIH19LAorIHsxNiwgMHhjMDQwLCAwLCB7MHgwOCwweDMwLDB4MTIsMHg2YywweDAwLDB4ODgsMHg4OCwweDJhLDB4MzAsMHgwYiwweGI4LDB4MDIsMHhlYywweDAwLDB4OWIsMHgwOCB9fSwKKyB7MTYsIDB4YzA1MCwgMCwgezB4MmEsMHg0MCwweDA4LDB4YjgsMHgwMiwweDIwLDB4MDAsMHg4MiwweDEwLDB4MjIsMHgwMCwweDA4LDB4YTAsMHgyMiwweGEwLDB4MDAgfX0sCisgezE2LCAweGMwNjAsIDAsIHsweDhiLDB4MDAsMHgyYSwweDAyLDB4MGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMDcwLCAwLCB7MHgwOCwweDAwLDB4MGMsMHgwMCwweGIzLDB4MjAsMHgyYywweGMyLDB4MDgsMHgzNiwweDAyLDB4MmMsMHhjMCwweGEwLDB4MDgsMHgyMCB9fSwKKyB7MTYsIDB4YzA4MCwgMCwgezB4MDAsMHgwYiwweDMzLDB4NDYsMHhjZCwweDI4LDB4ODAsMHgyMCwweDI4LDB4YzAsMHgwYiwweDMyLDB4MDIsMHgwYywweDIwLDB4ODEgfX0sCisgezE2LCAweGMwOTAsIDAsIHsweDMwLDB4MjgsMHhjMCwweDA4LDB4MTAsMHgwMiwweDgxLDB4MDAsMHhhYSwweDAwLDB4MjgsMHgwMCwweDAzLDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhjMGEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDdjLDB4MDAsMHhmYiwweDI4LDB4MmUsMHhjYyB9fSwKKyB7MTYsIDB4YzBiMCwgMCwgezB4MGMsMHg3MCwweDUzLDB4N2QsMHgwOSwweDg4LDB4MDAsMHhiYSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZmQsMHg4MCwweGRhLDB4NjAgfX0sCisgezE2LCAweGMwYzAsIDAsIHsweDNhLDB4NTAsMHg4YywweGEyLDB4ODMsMHgyYywweDgwLDB4NGIsMHgyMCwweDMwLDB4YzAsMHgyOCwweGEwLDB4MDMsMHhhMSwweDAwIH19LAorIHsxNiwgMHhjMGQwLCAwLCB7MHhjOSwweDAwLDB4M2EsMHgwMCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzBlMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDQsMHhmYiwweDAwLDB4N2UsMHhjOSwweDBiLDB4YjYsMHgwMywweGZjLDB4YzAsMHhmOCwweDBjLDB4M2YgfX0sCisgezE2LCAweGMwZjAsIDAsIHsweDAwLDB4NGYsMHhjMywweDQzLDB4MmMsMHgwMCwweGI4LDB4MzgsMHgzZiwweDhlLDB4NWUsMHhmMCwweDQzLDB4ZTAsMHgxMCwweGY4IH19LAorIHsxNiwgMHhjMTAwLCAwLCB7MHgzMCwweDNmLDB4MDEsMHgwZiwweGQwLDB4MDMsMHg3MCwweDAwLDB4ZmMsMHgwMCwweDM3LDB4MDAsMHgwZCwweGQwLDB4MDcsMHhlOSB9fSwKKyB7MTYsIDB4YzExMCwgMCwgezB4MDMsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweGUwLDB4Y2MsMHg4MCwweDMzLDB4YzAgfX0sCisgezE2LCAweGMxMjAsIDAsIHsweDBkLDB4ZjAsMHg4MywweGZjLDB4ODAsMHhkYywweDk0LDB4MzMsMHhjMCwweDFjLDB4ZjEsMHgwMywweDdkLDB4OGMsMHhmZiwweDMwIH19LAorIHsxNiwgMHhjMTMwLCAwLCB7MHgzZiwweDMwLDB4OGYsMHhjOCwweDAzLDB4N2UsMHgxMCwweGNmLDB4OTAsMHgzOSwweGEwLDB4OGQsMHhmOCwweDAzLDB4YWUsMHgwMCB9fSwKKyB7MTYsIDB4YzE0MCwgMCwgezB4ZDUsMHg4MCwweDEzLDB4ZTAsMHgwYywweDU4LDB4MDMsMHhmMCwweDAxLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMxNTAsIDAsIHsweDgwLDB4MTAsMHhkZCwweDA4LDB4ODgsMHgwMCwweDIzLDB4YzQsMHgwOCwweGZjLDB4MDIsMHhlYywweGE4LDB4Y2IsMHgyMCwweDIxIH19LAorIHsxNiwgMHhjMTYwLCAwLCB7MHhjMiwweDBkLDB4ZjcsMHgxMiwweDFjLDB4NDAsMHhkZiwweDMwLDB4MjIsMHhhMCwweDBiLDB4ODgsMHgwMiwweDJlLDB4MDQsMHhkYiB9fSwKKyB7MTYsIDB4YzE3MCwgMCwgezB4MjEsMHgyMiwweGMwLDB4MDgsMHhiOCwweDIyLDB4MmUsMHgwMCwweGI5LDB4ODAsMHgyYSwweDYwLDB4MGEsMHg4OCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGMxODAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDQ1LDB4Y2MsMHgxMCwweDgwLDB4MmMsMHgyOCwweGNhIH19LAorIHsxNiwgMHhjMTkwLCAwLCB7MHg2OCwweDMwLDB4MDIsMHg4ZCwweDAwLDB4OWIsMHgyMCwweDI4LDB4YzQsMHgwOCwweDMyLDB4MDIsMHhjYywweDEwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4YzFhMCwgMCwgezB4MjQsMHgwOCwweDBiLDB4ODAsMHg0MiwweDZjLDB4MDAsMHg4MywweDAwLDB4MmEsMHhjYSwweDNhLDB4YjAsMHgwMiwweDhjLDB4MDQgfX0sCisgezE2LCAweGMxYjAsIDAsIHsweGIwLDB4MDQsMHgyOCwweGMwLDB4MDgsMHgxMCwweDAyLDB4ZTMsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMWMwLCAwLCB7MHhjMCwweDE1LDB4OGMsMHgwMiwweDgwLDB4NDAsMHhhYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDliLDB4MjAsMHgyYSB9fSwKKyB7MTYsIDB4YzFkMCwgMCwgezB4YzAsMHg4OCwweGIwLDB4MDIsMHhhYywweDAwLDB4OWIsMHgwMCwweDI2LDB4ZTAsMHgwMywweDgwLDB4ODIsMHgyYywweDI4LDB4OWIgfX0sCisgezE2LCAweGMxZTAsIDAsIHsweDIwLDB4MjIsMHhlMSwweDBiLDB4YjIsMHgwMiwweGFjLDB4ODAsMHhiOCwweDgwLDB4MmEsMHhjMSwweDBhLDB4OTgsMHgwMiwweGYwIH19LAorIHsxNiwgMHhjMWYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhjOCwweDUwLDB4M2EsMHhjMCB9fSwKKyB7MTYsIDB4YzIwMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGRiLDB4ODgsMHhiYSwweGMwLDB4MDgsMHhiMCwweDAzLDB4NmMsMHgwOCwweGZiLDB4MDAgfX0sCisgezE2LCAweGMyMTAsIDAsIHsweDM2LDB4NjAsMHgwZiwweDhjLDB4NjMsMHg2YywweDAwLDB4Y2IsMHhjMCwweDNhLDB4ODAsMHgwZSwweGJlLDB4MDMsMHhhZiwweDg0IH19LAorIHsxNiwgMHhjMjIwLCAwLCB7MHg3OSwweDgwLDB4M2EsMHg4OCwweDA0LDB4OTgsMHgwMSwweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzIzMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmYywweDgwLDB4MzUsMHhjMCwweDRmLDB4ZjAsMHgwMywweGRjLDB4MDAsMHhlZiwweDAwLDB4MzcgfX0sCisgezE2LCAweGMyNDAsIDAsIHsweGMwLDB4YWYsMHhmMCwweDAzLDB4MWMsMHgwMSwweDZmLDB4MDAsMHgxMywweDAwLDB4MGYsMHhjMSwweDIzLDB4ZmMsMHhiOCwweGZmIH19LAorIHsxNiwgMHhjMjUwLCAwLCB7MHgwNCwweDM3LDB4YzAsMHgwYywweGY4LDB4NDMsMHg3ZSwweDA0LDB4ZmQsMHgwMCwweDNmLDB4MDQsMHgwZiwweGQwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4YzI2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4YzgsMHg0MCwweDNhLDB4YzAgfX0sCisgezE2LCAweGMyNzAsIDAsIHsweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDQwLDB4MzgsMHhjMSwweDBlLDB4YjAsMHg0MywweDJjLDB4MDgsMHhjMywweDAwIH19LAorIHsxNiwgMHhjMjgwLCAwLCB7MHgzZSwweDQwLDB4MGUsMHg4MiwweDAzLDB4NmQsMHgwMCwweGRiLDB4NDAsMHgzMiwweGMxLDB4NWYsMHhiNCwweGEzLDB4ZWQsMHgyMCB9fSwKKyB7MTYsIDB4YzI5MCwgMCwgezB4YzksMHg0MCwweDMyLDB4ZTAsMHg4ZiwweDk4LDB4NDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyYTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4ODgsMHgwMCwweDIzLDB4YzAsMHgyOCwweGY1LDB4YzIsMHhmYywweDAwLDB4YjMsMHgwNCwweDIzIH19LAorIHsxNiwgMHhjMmIwLCAwLCB7MHhjMSwweDQ4LDB4ZjAsMHgyMiwweGJjLDB4MDYsMHhhZiwweDAwLDB4MGUsMHg0MCwweDA4LDB4MDAsMHgwMiwweGNkLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YzJjMCwgMCwgezB4MDEsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZWUsMHgwMCwweDgxLDB4ZTAsMHgzNCwweGEwLDB4MGIsMHg5MCwweDAyLDB4MzIgfX0sCisgezE2LCAweGMyZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMiwweDgwLDB4MDAsMHgyOCwweGMwIH19LAorIHsxNiwgMHhjMmUwLCAwLCB7MHgwOSwweDNjLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYSwweGIwLDB4MDIsMHgwYywweDAwLDB4ODMsMHgwMSB9fSwKKyB7MTYsIDB4YzJmMCwgMCwgezB4MmMsMHgwMCwweDBhLDB4MDUsMHgwMiwweGNkLDB4NTgsMHhiYiwweDAwLDB4MjAsMHgwMCwweDBhLDB4M2QsMHgwMiwweGNmLDB4NDAgfX0sCisgezE2LCAweGMzMDAsIDAsIHsweDIxLDB4MjAsMHg2MCwweGMwLDB4MDksMHgxMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMzEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweDg0LDB4ODAsMHgyOCwweGU0LDB4ODgsMHg3OCwweDQyLDB4ZGUsMHgwMCwweGI3LDB4OTAsMHg2NSB9fSwKKyB7MTYsIDB4YzMyMCwgMCwgezB4ZTQsMHg4OCwweDdhLDB4NDIsMHg5ZSwweDQwLDB4YTcsMHg5MCwweDJkLDB4YTAsMHgwYSwweDQ4LDB4MjIsMHhkZSwweDA0LDB4YjcgfX0sCisgezE2LCAweGMzMzAsIDAsIHsweDgwLDB4MjMsMHg2MCwweDQ4LDB4NzgsMHg0MiwweGZlLDB4ODAsMHhhZiwweDkwLDB4NjUsMHhlMCwweDBiLDB4ZTgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhjMzQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhjOCwweDAwLDB4MzgsMHhjMCB9fSwKKyB7MTYsIDB4YzM1MCwgMCwgezB4MGMsMHgzMCwweDAzLDB4Y2MsMHgwMCwweGZiLDB4MDAsMHgzYywweGMwLDB4MGUsMHhiYSwweDAzLDB4MGMsMHgwMCwweGMzLDB4MDAgfX0sCisgezE2LCAweGMzNjAsIDAsIHsweDNlLDB4MDAsMHg0ZSwweDIyLDB4MDIsMHhjYywweGMwLDB4ZmIsMHg0MCwweDMwLDB4YzAsMHgwYSwweDMwLDB4MDMsMHhjZSwweDgwIH19LAorIHsxNiwgMHhjMzcwLCAwLCB7MHhlMSwweDQxLDB4MzAsMHhjOSwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzM4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MjAsMHhmYywweDAwLDB4MzcsMHhjMiwweDBlLDB4ZjEsMHgyMywweGVjLDB4NDAsMHhmZiwweDA0LDB4M2EgfX0sCisgezE2LCAweGMzOTAsIDAsIHsweGMwLDB4MGYsMHhiMCwweDIzLDB4ZmMsMHgwMCwweGZmLDB4MDQsMHgzZSwweGMwLDB4MGQsMHhhMCwweDAzLDB4ZmMsMHg1OCwweGZmIH19LAorIHsxNiwgMHhjM2EwLCAwLCB7MHgwMCwweGJmLDB4YzAsMHgwNiwweGYwLDB4ODMsMHhkYywweDYyLDB4ZGYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgxMCB9fSwKKyB7MTYsIDB4YzNiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZCwweDgwLDB4YzksMHgwMSwweDNlLDB4YzAgfX0sCisgezE2LCAweGMzYzAsIDAsIHsweDhjLDB4YjIsMHgwNywweGFlLDB4MDQsMHhjYiwweDgwLDB4M2EsMHhjOCwweDRjLDB4YjIsMHgwMywweDJjLDB4ODQsMHhjYiwweDMwIH19LAorIHsxNiwgMHhjM2QwLCAwLCB7MHhiMCwweGUwLDB4MGQsMHg4OCwweDBiLDB4MmMsMHgwMCwweGViLDB4MDAsMHgzMCwweDAwLDB4MGMsMHhiYywweDgzLDB4MmQsMHg4MCB9fSwKKyB7MTYsIDB4YzNlMCwgMCwgezB4ZmIsMHgwMCwweDMyLDB4YzAsMHgwYywweDkwLDB4MDMsMHhlYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzZjAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDQwLDB4ODcsMHgwMCwweDJjLDB4Y2MsMHgwOCwweDc2LDB4ODIsMHgzYywweDgyLDB4ODcsMHgwMCwweDIxIH19LAorIHsxNiwgMHhjNDAwLCAwLCB7MHhjMiwweDhkLDB4MzIsMHg4MiwweDBkLDB4NGMsMHhhNywweDI4LDB4MjEsMHg4MCwweDA4LDB4NDAsMHgwMiwweDFkLDB4ODAsMHhiZiB9fSwKKyB7MTYsIDB4YzQxMCwgMCwgezB4MjAsMHgzNSwweDQwLDB4MDksMHg3MiwweDQzLDB4NWMsMHhhMCwweGI3LDB4MDAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZDIgfX0sCisgezE2LCAweGM0MjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDg0LDB4ODAsMHgyZCwweGUwIH19LAorIHsxNiwgMHhjNDMwLCAwLCB7MHgwOCwweDc4LDB4MDIsMHhkZSwweGMwLDB4OGYsMHg4MCwweDI4LDB4ZWMsMHgyOCwweDdiLDB4MGEsMHg5ZSwweDk0LDB4ODMsMHg4NCB9fSwKKyB7MTYsIDB4YzQ0MCwgMCwgezB4MjMsMHhlMCwweDA5LDB4NTgsMHg1MCwweDllLDB4MTAsMHhhNywweGIwLDB4MjMsMHhlMCwweDBiLDB4NzgsMHgwMiwweDFlLDB4MjAgfX0sCisgezE2LCAweGM0NTAsIDAsIHsweGI3LDB4ODAsMHgyMSwweGUwLDB4MDksMHg3OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNDYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMiwweDgyLDB4MWMsMHgyYywweGMwLDB4MjgsMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4YzAsMHgyMCB9fSwKKyB7MTYsIDB4YzQ3MCwgMCwgezB4YzAsMHgwOCwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDYwLDB4ZDIsMHgwOCwweDFkLDB4MDIsMHgwZiwweDIwLDB4YmIgfX0sCisgezE2LCAweGM0ODAsIDAsIHsweDI0LDB4MjQsMHhjMCwweDBiLDB4M2MsMHgwMiwweDRmLDB4MDAsMHhiMywweDgwLDB4MjgsMHhkOCwweDA5LDB4MzIsMHgwMiwweGQyIH19LAorIHsxNiwgMHhjNDkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxMSwweGE4LDB4MDAsMHhjZSwweDg0LDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4YzRhMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGNlLDB4YzAsMHgzYSwweDgwLDB4MDgsMHhhMCwweDAzLDB4YTgsMHgwMCwweGNhLDB4MDAgfX0sCisgezE2LCAweGM0YjAsIDAsIHsweDMzLDB4ODAsMHgwZCwweGVjLDB4MDMsMHgzYiwweDgwLDB4ZWUsMHg4MiwweDMzLDB4ODAsMHgwYSwweGMwLDB4ODcsMHgxMCwweDQwIH19LAorIHsxNiwgMHhjNGMwLCAwLCB7MHhmNiwweGMwLDB4MzMsMHg5MCwweGFkLDB4NjQsMHgwMywweGZhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzRkMCwgMCwgezB4NDgsMHgwMCwweGMwLDB4MDIsMHhmOCwweDAwLDB4M2MsMHgwMCwweDFmLDB4MDQsMHgwMywweGEwLDB4MDQsMHhmOCwweDMwLDB4M2UgfX0sCisgezE2LCAweGM0ZTAsIDAsIHsweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDA0LDB4MGYsMHg4MCwweDkzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHhjNGYwLCAwLCB7MHgxMCwweDNlLDB4MDAsMHgyYywweDg0LDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgxOCwweDNlLDB4MTAsMHgwZSwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4YzUwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGM1MTAsIDAsIHsweDBlLDB4OTAsMHgwMywweGE0LDB4MTAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDA0LDB4OTAsMHgwMywweDI0LDB4MDAsMHg0MSwweDAwIH19LAorIHsxNiwgMHhjNTIwLCAwLCB7MHgzZSwweDQwLDB4MGYsMHg5MSwweDEzLDB4ZTEsMHgwOCwweGY4LDB4MDAsMHgzMiwweDQwLDB4MDgsMHg4OSwweDgzLDB4YTIsMHgwMCB9fSwKKyB7MTYsIDB4YzUzMCwgMCwgezB4YzksMHg4MCwweDMyLDB4NDAsMHgwYywweDkwLDB4MGIsMHgwMiwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1NDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAyLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwZCwweDkwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlIH19LAorIHsxNiwgMHhjNTUwLCAwLCB7MHg0MCwweDQ4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDhiLDB4OTQsMHg0MiwweGUyLDB4MjAsMHhiOCB9fSwKKyB7MTYsIDB4YzU2MCwgMCwgezB4MDAsMHhhMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4ZTUsMHgwNCwweGE5LDB4OTAsMHgzNCwweDYwLDB4MDgsMHg5MCwweDAyLDB4MjAgfX0sCisgezE2LCAweGM1NzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgxMCwweDk5LDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHhjNTgwLCAwLCB7MHgwYSwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDI0LDB4NDAsMHgwYSwweDEwLDB4MDIsMHgwNCwweDAwLDB4YTksMHgwMCB9fSwKKyB7MTYsIDB4YzU5MCwgMCwgezB4MmEsMHg0MCwweDBiLDB4OTAsMHg4MiwweGUwLDB4MDEsMHhiOCwweDAwLDB4MjAsMHg0MCwweDNhLDB4OTAsMHgwMiwweGE0LDB4NDQgfX0sCisgezE2LCAweGM1YTAsIDAsIHsweDg5LDB4MDQsMHgyMiwweDYyLDB4MDgsMHg5OCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNWIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4YSwweDgxLDB4MDAsMHgyYywweDQ4LDB4MDksMHgzMiwweDA2LDB4NDQsMHg4MCwweGIxLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4YzVjMCwgMCwgezB4NDgsMHgwYSwweDEyLDB4MDIsMHg4NCwweDgwLDB4YTEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4MDIsMHhjNSwweDAwLDB4YjEgfX0sCisgezE2LCAweGM1ZDAsIDAsIHsweDQwLDB4MjAsMHg1MCwweDBhLDB4MjQsMHgwMiwweGM5LDB4MDAsMHhhMywweDAwLDB4MjQsMHg0MCwweDA4LDB4MTEsMHgwMiwweDAyIH19LAorIHsxNiwgMHhjNWUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4M2UsMHgxNCB9fSwKKyB7MTYsIDB4YzVmMCwgMCwgezB4MGUsMHg4MCwweDAzLDB4ZTEsMHg0MCwweGY4LDB4NTEsMHgzNiwweDE0LDB4MmUsMHg4NSwweDQzLDB4MjEsMHg0MiwweGU4LDB4NTAgfX0sCisgezE2LCAweGM2MDAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4MTIsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgxZSwweDgwLDB4NDMsMHhhMCwweDAwIH19LAorIHsxNiwgMHhjNjEwLCAwLCB7MHhjOCwweDAxLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzYyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmZCwweDAwLDB4M2UsMHg0NCwweDRlLDB4MTEsMHgwMywweGE0LDB4NDAsMHhiNSwweDAwLDB4M2UgfX0sCisgezE2LCAweGM2MzAsIDAsIHsweDQ0LDB4MGQsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGQ5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHg1MCwweDAzLDB4ZTUsMHgwMCwweGY5IH19LAorIHsxNiwgMHhjNjQwLCAwLCB7MHg0MCwweDNmLDB4NDAsMHgwZCwweDQ0LDB4MDMsMHhmMSwweDAwLDB4ZjUsMHgwMiwweDNkLDB4YzAsMHgyZiwweGQyLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4YzY1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNywweDAwLDB4ZTksMHgwMCwweDM2LDB4NjAgfX0sCisgezE2LCAweGM2NjAsIDAsIHsweDBkLDB4ZGEsMHgwMywweGU2LDB4NDAsMHhmOSwweDQwLDB4M2UsMHg2OCwweDBjLDB4OWEsMHgwMywweDY2LDB4MjAsMHg4OSwweGEwIH19LAorIHsxNiwgMHhjNjcwLCAwLCB7MHgzMywweDQwLDB4MGUsMHg5MCwweDA3LDB4YTYsMHgwMCwweGY5LDB4ODAsMHgzZSwweDUwLDB4MGMsMHhjYSwweDAzLDB4ZjMsMHg4MCB9fSwKKyB7MTYsIDB4YzY4MCwgMCwgezB4YzUsMHgwMiwweDMzLDB4NDAsMHgwYywweGMwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM2OTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDA0LDB4ODgsMHhhMiwweDIwLDB4MzgsMHgwOCwweDgwLDB4MDIsMHhlMywweDQwLDB4YjAsMHg4MCwweDJlIH19LAorIHsxNiwgMHhjNmEwLCAwLCB7MHgyOCwweDA4LDB4OGEsMHg4MiwweDIzLDB4ODAsMHg4OCwweDgwLDB4MjIsMHgwMCwweGRiLDB4ODgsMHgwMiwweDYyLDB4MDQsMHhiOCB9fSwKKyB7MTYsIDB4YzZiMCwgMCwgezB4YjAsMHgyZSwweGE4LDB4ODgsMHg4ZSwweGEyLDB4ZWEsMHg4MCwweDg4LDB4MDAsMHgyYSwweDAwLDB4MjgsMHg4OCwweDAzLDB4OGUgfX0sCisgezE2LCAweGM2YzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHg4MiwweGE5LDB4MDgsMHgyYywweDUyIH19LAorIHsxNiwgMHhjNmQwLCAwLCB7MHgwYiwweDE0LDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMSwweDBjLDB4NTIsMHg4OCwweDE0LDB4MDIsMHg0NCwweDIwLDB4OTEsMHg2OSB9fSwKKyB7MTYsIDB4YzZlMCwgMCwgezB4MjAsMHg0MCwweDBhLDB4MTAsMHg4MiwweGM2LDB4ZTAsMHhiMSwweDBjLDB4MmMsMHg0OCwweDA4LDB4MDEsMHgwMiwweGUxLDB4OTMgfX0sCisgezE2LCAweGM2ZjAsIDAsIHsweGExLDB4MDEsMHgyNCwweDQxLDB4MGEsMHgxMCwweDAyLDB4YzIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNzAwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDQsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAwLDB4ZTQsMHgwMCwweDM5LDB4MDIsMHgwZSB9fSwKKyB7MTYsIDB4YzcxMCwgMCwgezB4NDAsMHgwOCwweDEwLDB4NjIsMHgyNCwweDAwLDB4OTEsMHgwMCwweDYyLDB4NDAsMHg4YiwweDgwLDB4MDIsMHhlMCwweDU0LDB4YjkgfX0sCisgezE2LCAweGM3MjAsIDAsIHsweDBjLDB4MmUsMHg0MCwweDA5LDB4YjYsMHg1MiwweGVjLDB4MDAsMHhhOSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTIsMHg4MCwweDg2IH19LAorIHsxNiwgMHhjNzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU0LDB4MDAsMHhlMSwweDYwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4Yzc0MCwgMCwgezB4MGQsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MzAsMHgzZSwweDQwLDB4MmMsMHg5MCwweDQzLDB4NjQsMHgwNiwweGM5LDB4MDAgfX0sCisgezE2LCAweGM3NTAsIDAsIHsweDMyLDB4NDksMHgwZSwweDhkLDB4OTMsMHhlMCwweDAwLDB4ZjksMHgwMCwweDJlLDB4NDAsMHgyYywweDk0LDB4MDMsMHhjNywweDQwIH19LAorIHsxNiwgMHhjNzYwLCAwLCB7MHhlOSwweDIwLDB4MzAsMHg1NSwweDBlLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzc3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDgwLDB4M2MgfX0sCisgezE2LCAweGM3ODAsIDAsIHsweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDQsMHhiZSwweDQwLDB4MGYsMHg4OCwweDMzLDB4NjIsMHgwMCwweGY5IH19LAorIHsxNiwgMHhjNzkwLCAwLCB7MHhjMiwweDNlLDB4NDgsMHgyZSwweDg4LDB4MzMsMHhlMiwweDAwLDB4ZDksMHgwMCwweDNlLDB4NjAsMHgwZCwweDgwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4YzdhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGM3YjAsIDAsIHsweDBkLDB4ODAsMHgwMywweGEwLDB4MDQsMHhlOCwweDQwLDB4YmEsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDQsMHhjOCwweDAwIH19LAorIHsxNiwgMHhjN2MwLCAwLCB7MHgzYSwweDAwLDB4MGUsMHg4YywweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDIsMHgzMiwweDAwLDB4MGUsMHg4MCwweDAzLDB4NjEsMHgyMCB9fSwKKyB7MTYsIDB4YzdkMCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MTYsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3ZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHgwMCwweDJlLDB4ODAsMHgwOCwweGUyLDB4MDMsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIyIH19LAorIHsxNiwgMHhjN2YwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDQsMHg4YSwweDAwLDB4MmUsMHhhMiwweDA5LDB4ZTgsMHgwMiwweGZhLDB4MDQsMHhiZSB9fSwKKyB7MTYsIDB4YzgwMCwgMCwgezB4MDAsMHhhMiwweDgwLDB4MDgsMHhjZCwweDgyLDB4MzMsMHgyMCwweGI2LDB4YzAsMHgzNywweGEwLDB4NGIsMHhjOCwweDgyLDB4Y2EgfX0sCisgezE2LCAweGM4MTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyNiwweGMwIH19LAorIHsxNiwgMHhjODIwLCAwLCB7MHgwOSwweDM4LDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhlYywweDAwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4YzgzMCwgMCwgezB4MjgsMHhlMCwweDBiLDB4MzAsMHgwMiwweGNlLDB4ODEsMHhiMywweDAwLDB4NjIsMHhjMCwweDA4LDB4M2MsMHgwMiwweDRmLDB4MDAgfX0sCisgezE2LCAweGM4NDAsIDAsIHsweGIzLDB4YTAsMHgyMCwweGIwLDB4MDMsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODUwLCAwLCB7MHhhMCwweDAxLDB4MGMsMHg0MSwweDg3LDB4MzQsMHgyZCwweGMwLDB4MDgsMHg2MCwweDAyLDB4OWUsMHg0MCwweGI3LDB4YTAsMHgyZCB9fSwKKyB7MTYsIDB4Yzg2MCwgMCwgezB4YzAsMHgwOCwweDczLDB4MDIsMHhkYywweDAwLDB4ODcsMHgyMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4ODIsMHhkZCwweDg1LDB4YmYgfX0sCisgezE2LCAweGM4NzAsIDAsIHsweDgxLDB4NjMsMHhjOCwweDg4LDB4N2IsMHgwMiwweDFjLDB4MDAsMHhiNywweDQwLDB4NjUsMHgwMCwweDFiLDB4NzIsMHgwMiwweGU4IH19LAorIHsxNiwgMHhjODgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhjNywweDgxLDB4M2QsMHhlMCB9fSwKKyB7MTYsIDB4Yzg5MCwgMCwgezB4ZGQsMHg3MCwweDAzLDB4ZmUsMHg4MCwweGY3LDB4OTAsMHgzZiwweGUwLDB4MmMsMHg3OSwweDAzLDB4ZmUsMHg4MCwweGM3LDB4YTAgfX0sCisgezE2LCAweGM4YTAsIDAsIHsweDM5LDB4ZTAsMHgwZiwweDdhLDB4MDIsMHhkZSwweDg0LDB4ZjcsMHhjMiwweDMxLDB4ZjIsMHgwYywweDc5LDB4MDMsMHg1ZSwweDA0IH19LAorIHsxNiwgMHhjOGIwLCAwLCB7MHhmNywweDg0LDB4MzEsMHg2MCwweDBmLDB4N2UsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzhjMCwgMCwgezB4MDgsMHgxZCwweGFkLDB4MGEsMHhmYiwweDYwLDB4N2UsMHhkNCwweDBmLDB4MzAsMHgwMywweDZjLDB4MDAsMHhjYiwweDAwLDB4MzIgfX0sCisgezE2LCAweGM4ZDAsIDAsIHsweGRlLDB4MmYsMHhiMiwweDAzLDB4ZWQsMHg0MiwweDFiLDB4NjAsMHgzZSwweGMxLDB4MGQsMHhiMSwweDAzLDB4ZWMsMHg1MCwweGY3IH19LAorIHsxNiwgMHhjOGUwLCAwLCB7MHg4MCwweDNkLDB4ZDgsMHgyZSwweDMyLDB4MDMsMHhlYywweDMwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YzhmMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDAwLDB4Y2IsMHhkMCwweDNmLDB4ZjAgfX0sCisgezE2LCAweGM5MDAsIDAsIHsweDRjLDB4ZjgsMHgxMywweGZlLDB4MDAsMHhjZiwweDg4LDB4M2YsMHhlMCwweDBjLDB4ZjgsMHg0MywweDNmLDB4MDAsMHhjZiwweGM4IH19LAorIHsxNiwgMHhjOTEwLCAwLCB7MHgzMywweGUwLDB4MGMsMHhmOCwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAsMHgzZiwweGUwLDB4MmMsMHhmOCwweDAzLDB4YmUsMHgyMCB9fSwKKyB7MTYsIDB4YzkyMCwgMCwgezB4YzcsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY4LDB4MDEsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5MzAsIDAsIHsweGE4LDB4MDEsMHhiYywweDQwLDB4ODcsMHg5MCwweDNkLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkYywweDgwLDB4ZDcsMHgwMCwweDJkIH19LAorIHsxNiwgMHhjOTQwLCAwLCB7MHhjMCwweDBjLDB4MzAsMHgwMywweDdjLDB4MDAsMHg4NywweDEwLDB4MjEsMHhjNCwweDFlLDB4NzAsMHgyMCwweGRjLDB4NDQsMHhiNyB9fSwKKyB7MTYsIDB4Yzk1MCwgMCwgezB4MDAsMHgzOSwweGMwLDB4MGMsMHg3MSwweDAyLDB4MWMsMHg0MCwweGQ3LDB4MDIsMHgyOSwweDQwLDB4MDgsMHg3MCwweDAyLDB4MmEgfX0sCisgezE2LCAweGM5NjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg3LDB4MzIsMHgyZCwweGMwIH19LAorIHsxNiwgMHhjOTcwLCAwLCB7MHgwOCwweDcwLDB4MDIsMHhkYywweDAxLDB4ODcsMHgwMCwweDJjLDB4YzAsMHgyYiwweDcwLDB4MGEsMHg1YywweDAwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4Yzk4MCwgMCwgezB4MjMsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRkLDB4MDAsMHhiNywweDAwLDB4MmQsMHhjNCwweDBiLDB4ZjAsMHgwMiwweDljLDB4MjAgfX0sCisgezE2LCAweGM5OTAsIDAsIHsweDg3LDB4MTgsMHgyOSwweDQwLDB4MDgsMHg3MCwweDgyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOWEwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MDIsMHgyOCwweGMwLDB4MDgsMHgxMCwweDAyLDB4Y2MsMHgwOCwweDgzLDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4YzliMCwgMCwgezB4YzAsMHgyYSwweDMwLDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCwweDIwLDB4ZjIsMHgwYSwweDMwLDB4MDIsMHhjZSwweDAwLDB4YjMgfX0sCisgezE2LCAweGM5YzAsIDAsIHsweDg4LDB4MmEsMHhkMCwweDBhLDB4MzAsMHgwNiwweDBjLDB4MDAsMHg5MiwweDAwLDB4MjgsMHg3OCwweDA4LDB4M2MsMHg0MiwweDA4IH19LAorIHsxNiwgMHhjOWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDIsMHhjNywweDAwLDB4MmYsMHhjMCB9fSwKKyB7MTYsIDB4YzllMCwgMCwgezB4MmMsMHg5MCwweDAyLDB4ZmMsMHgwMiwweDhmLDB4ZDgsMHgzZiwweGMwLDB4NGIsMHhmMCwweDAyLDB4N2MsMHgwMiwweGNmLDB4MDAgfX0sCisgezE2LCAweGM5ZjAsIDAsIHsweDIwLDB4ZjIsMHgwOCwweGIwLDB4MTMsMHhlZSwweDgwLDB4ZmYsMHgwMCwweDNmLDB4ZDQsMHgyZSwweGJkLDB4ODMsMHhhYywweDAwIH19LAorIHsxNiwgMHhjYTAwLCAwLCB7MHhjYiwweDgwLDB4M2EsMHhhMCwweGFjLDB4YjgsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2ExMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDEwLDB4M2UsMHhjMCwweDBmLDB4ODQsMHgwMywweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UgfX0sCisgezE2LCAweGNhMjAsIDAsIHsweGMwLDB4MDEsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHhiZSwweGMwLDB4MGUsMHhiMCwweDIzLDB4ZWMsMHgwOCwweGZiIH19LAorIHsxNiwgMHhjYTMwLCAwLCB7MHgxMCwweDNmLDB4YzAsMHgwZCwweGI0LDB4MDMsMHhlZCwweDA0LDB4ZjksMHgwMCwweDFlLDB4MTQsMHhjZiwweGIwLDB4ODMsMHhlMCB9fSwKKyB7MTYsIDB4Y2E0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4Y2YsMHgwMCwweDMwLDB4YzAgfX0sCisgezE2LCAweGNhNTAsIDAsIHsweDBjLDB4NDAsMHgwMywweGFjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDJjLDB4YjAsMHgwMywweGJjLDB4MDAsMHhmZiwweDAwIH19LAorIHsxNiwgMHhjYTYwLCAwLCB7MHhiMywweGUwLDB4MGQsMHhmYSwweDAzLDB4N2UsMHg4MCwweGNmLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmYywweDQzLDB4ZmYsMHgyMCB9fSwKKyB7MTYsIDB4Y2E3MCwgMCwgezB4ZmYsMHgwMCwweDNmLDB4NDAsMHgwOCwweGY4LDB4MDMsMHhjMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhODAsIDAsIHsweDgxLDB4MDQsMHg2YywweDEwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwYSwweDhlLDB4NDIsMHgyYywweDA0LDB4YmIsMHgwMCwweDJlIH19LAorIHsxNiwgMHhjYTkwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiYiwweDAwLDB4M2EsMHhjMCwweDBlLDB4MzAsMHgwMiwweDBkLDB4MDgsMHg4MyB9fSwKKyB7MTYsIDB4Y2FhMCwgMCwgezB4MDIsMHgyMiwweGMwLDB4MGEsMHhiYywweDAyLDB4ZWYsMHgwMCwweGJiLDB4YzAsMHgyYywweDY4LDB4MGEsMHhiOSwweDAyLDB4ZTAgfX0sCisgezE2LCAweGNhYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MGMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwIH19LAorIHsxNiwgMHhjYWMwLCAwLCB7MHgwOCwweGI4LDB4MDIsMHhhYywweDAwLDB4YmIsMHgwMiwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlYywweDAwLDB4YmIsMHgwMCB9fSwKKyB7MTYsIDB4Y2FkMCwgMCwgezB4MjYsMHg0OCwweDE5LDB4YjAsMHgwMiwweDZkLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDBhLDB4YjAsMHgwMiwweGVjLDB4MDQgfX0sCisgezE2LCAweGNhZTAsIDAsIHsweGJiLDB4MWMsMHgyZSwweDIwLDB4MGEsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYWYwLCAwLCB7MHgwOCwweDE0LDB4MGMsMHgwMCwweGFiLDB4MjAsMHgyOCwweGMwLDB4MGEsMHgwMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4MDQsMHgyYyB9fSwKKyB7MTYsIDB4Y2IwMCwgMCwgezB4YzEsMHgwOCwweDMwLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDI0LDB4NDEsMHgwOSwweGI4LDB4MDIsMHgwYywweDAyLDB4ODMgfX0sCisgezE2LCAweGNiMTAsIDAsIHsweDAxLDB4YTAsMHhjMCwweDBhLDB4MzAsMHgwMiwweGNjLDB4MTAsMHg5MywweDAwLDB4MmMsMHgwMCwweDBhLDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhjYjIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDdjLDB4MDAsMHhjZiwweDI4LDB4MzMsMHhjMCB9fSwKKyB7MTYsIDB4Y2IzMCwgMCwgezB4MGMsMHhhMCwweDQ2LDB4YWMsMHgxMSwweGJmLDB4MDAsMHgzZiwweGMwLDB4NWMsMHhmMCwweDQzLDB4ZmMsMHgwMCwweGZmLDB4MDQgfX0sCisgezE2LCAweGNiNDAsIDAsIHsweDMyLDB4NDAsMHgwZCwweGIwLDB4MDMsMHg2YywweDA4LDB4Y2IsMHgwNCwweDMxLDB4YzAsMHgwYywweGIwLDB4MzMsMHhlZCwweDQwIH19LAorIHsxNiwgMHhjYjUwLCAwLCB7MHhmYiwweDA0LDB4M2UsMHg0MCwweDBlLDB4YjAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2I2MCwgMCwgezB4YTAsMHgxNSwweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgyMywweGZjLDB4MDEsMHhmZiwweDAwLDB4M2YgfX0sCisgezE2LCAweGNiNzAsIDAsIHsweGMwLDB4NGYsMHhmMCwweDg3LDB4N2MsMHgwMCwweGZmLDB4MDAsMHgzOSwweDQwLDB4MGUsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHhjYjgwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweDcwLDB4MDMsMHhkYywweDgwLDB4ZmYsMHgwMCwweDNkLDB4NDAsMHgwZiwweDcwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4Y2I5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDQwLDB4ZWIsMHg0OCwweDNlLDB4YzIgfX0sCisgezE2LCAweGNiYTAsIDAsIHsweDBlLDB4MDksMHgwMywweGJjLDB4NjAsMHhjMCwweDIwLDB4MzUsMHgyNCwweDBlLDB4ZDIsMHgxMywweDJjLDB4NjAsMHhmYiwweDZhIH19LAorIHsxNiwgMHhjYmIwLCAwLCB7MHgzMywweGMwLDB4MGYsMHhjYSwweDAzLDB4MjIsMHgyMCwweGMwLDB4ODAsMHgzNywweGMwLDB4MGQsMHhmMCwweDAzLDB4N2MsMHgwMCB9fSwKKyB7MTYsIDB4Y2JjMCwgMCwgezB4ZWYsMHgwMCwweDMzLDB4MjQsMHgwZiwweGM4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiZDAsIDAsIHsweDgwLDB4MTAsMHhkZCwweDAwLDB4OGYsMHg2MCwweDJmLDB4ZDgsMHgwOCwweGEyLDB4MDIsMHhmZCwweDgwLDB4YzgsMHg3MCwweDIyIH19LAorIHsxNiwgMHhjYmUwLCAwLCB7MHgwMCwweDJjLDB4ZmQsMHgwNywweGRjLDB4ODQsMHhiZiwweDYwLDB4MjMsMHhkMiwweDBiLDB4YmQsMHgwMiwweDIzLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4Y2JmMCwgMCwgezB4ODAsMHhhMiwweDIwLDB4ODgsMHhiMCwweDIyLDB4MzQsMHgwMCwweGJiLDB4NTAsMHgyMiwweGM4LDB4MGIsMHhiMCwweDAyLDB4MjAgfX0sCisgezE2LCAweGNjMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg0MCwweGEzLDB4MDMsMHgyYywweGMyIH19LAorIHsxNiwgMHhjYzEwLCAwLCB7MHgwYSwweDAwLDB4NDIsMHg4YywweDgyLDB4YTMsMHgwYSwweDI0LDB4ODAsMHgwYiwweDMwLDB4MDIsMHhjYywweDkwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4Y2MyMCwgMCwgezB4MjgsMHhkOCwweDBiLDB4MTAsMHgwMiwweDhjLDB4MDIsMHg5MCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MTAsMHg0MiwweDRjLDB4MDAgfX0sCisgezE2LCAweGNjMzAsIDAsIHsweGIzLDB4MDQsMHgyNCwweGMwLDB4MGIsMHgzMCwweDBlLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYzQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgxMCwweDliLDB4MDQsMHgyYywweGMwLDB4ZjgsMHg5OCwweDA2LDB4ZWMsMHgwMCwweGFiLDB4ODAsMHgyNiB9fSwKKyB7MTYsIDB4Y2M1MCwgMCwgezB4MjAsMHgwOCwweDkwLDB4MmEsMHhhYywweDEwLDB4YmIsMHgwMCwweDBhLDB4YzAsMHgxYiwweGIwLDB4MjIsMHhhZCwweDAwLDB4OTggfX0sCisgezE2LCAweGNjNjAsIDAsIHsweDQwLDB4MmEsMHg3MCwweDRiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiMywweDAwLDB4YTYsMHg4NiwweDFiLDB4YjAsMHg4MiwweGIwIH19LAorIHsxNiwgMHhjYzcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4Y2M4MCwgMCwgezB4OGUsMHg5OCwweDAzLDB4YWMsMHgwOCwweGU4LDB4YzAsMHgzNiwweDMwLDB4NGYsMHhiMCwweDQyLDB4ZWMsMHgwMCwweGY5LDB4ODAgfX0sCisgezE2LCAweGNjOTAsIDAsIHsweDNhLDB4YzAsMHg4ZiwweDg4LDB4NDIsMHgyMCwweDEwLDB4YzgsMHgxMCwweDMwLDB4ZjAsMHgwZiwweDMwLDB4MTMsMHg2YywweDEwIH19LAorIHsxNiwgMHhjY2EwLCAwLCB7MHhlYiwweDAwLDB4MzYsMHhmMCwweDBmLDB4YmQsMHgwMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2NiMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhlZiwweDA0LDB4N2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweGRjLDB4MDAsMHhjNCwweDAwLDB4M2IgfX0sCisgezE2LCAweGNjYzAsIDAsIHsweDQwLDB4OGIsMHhkYywweDAzLDB4N2MsMHgxMCwweGY5LDB4OTAsMHgzNiwweGMyLDB4NGYsMHhmOSwweDIzLDB4NjIsMHg0MSwweGFjIH19LAorIHsxNiwgMHhjY2QwLCAwLCB7MHgwMSwweDEzLDB4NDAsMHgwNCwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGMwLDB4MDMsMHg3OCB9fSwKKyB7MTYsIDB4Y2NlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4YywweDEyLDB4Y2IsMHgwMCwweGYyLDB4YzAgfX0sCisgezE2LCAweGNjZjAsIDAsIHsweDBmLDB4ODAsMHgwMywweGFjLDB4MDgsMHhkOSwweDAwLDB4M2EsMHg4MCwweDBmLDB4MTIsMHgwMywweGFjLDB4MDAsMHhlMSwweDAwIH19LAorIHsxNiwgMHhjZDAwLCAwLCB7MHgzMiwweGMwLDB4MGMsMHg5MCwweDAzLDB4ZWQsMHgwMiwweGM4LDB4NDAsMHgzZSwweGQwLDB4MGYsMHg5MCwweDEzLDB4MmMsMHgwMiB9fSwKKyB7MTYsIDB4Y2QxMCwgMCwgezB4ZGIsMHgwMCwweDNlLDB4NTAsMHgwYywweGI0LDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNkMjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4OGYsMHgwMCwweDE3LDB4YzAsMHgwOCwweDkwLDB4MDIsMHgzYywweDA4LDB4OGQsMHgwMCwweDIyIH19LAorIHsxNiwgMHhjZDMwLCAwLCB7MHg1NCwweDA4LDB4YjQsMHgwMywweDNjLDB4MDAsMHg4OSwweDAwLDB4MjMsMHhjMCwweDQwLDB4MzUsMHgwMiwweGNjLDB4MjQsMHg4MCB9fSwKKyB7MTYsIDB4Y2Q0MCwgMCwgezB4MDAsMHgyMiwweDc0LDB4NGMsMHhiMCwweDAyLDB4MmMsMHgwMCwweDhmLDB4MDAsMHgyZSwweGQ0LDB4MGEsMHhiMCwweDBhLDB4MzIgfX0sCisgezE2LCAweGNkNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4NGMsMHgwMiwweDgzLDB4MDAsMHgyNCwweGMwIH19LAorIHsxNiwgMHhjZDYwLCAwLCB7MHgwOSwweDAwLDB4MDIsMHg4YywweDAxLDB4OTAsMHgwMCwweDZhLDB4NDEsMHgwYSwweDMwLDB4MjAsMHg0ZSwweDEwLDB4MzEsMHgwMiB9fSwKKyB7MTYsIDB4Y2Q3MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MjAsMHgwNiwweGNlLDB4MDAsMHg4MCwweDAwLDB4NjAsMHhlMCwweDBhLDB4MzAsMHg4MiwweDBjLDB4MDggfX0sCisgezE2LCAweGNkODAsIDAsIHsweDgzLDB4MDgsMHgyYywweGQwLDB4MDksMHhiMCwweDAyLDB4NzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZDkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwNCwweDg3LDB4YjAsMHgyMCwweGVjLDB4MDksMHhlOSwweDAyLDB4OGUsMHg1OCwweDlkLDB4YjAsMHgyYiB9fSwKKyB7MTYsIDB4Y2RhMCwgMCwgezB4YTUsMHg0MCwweDViLDB4MDYsMHhkZSwweDQwLDB4OTUsMHg5NCwweDJkLDB4ZTQsMHgxOSwweDdiLDB4MDYsMHhkZSwweDAwLDB4ODQgfX0sCisgezE2LCAweGNkYjAsIDAsIHsweDgwLDB4NjAsMHhlMCwweDBhLDB4NzgsMHgwYSwweDE2LDB4MTAsMHg4NywweDgwLDB4MmQsMHg2OCwweDBiLDB4NzksMHgwMiwweDQ4IH19LAorIHsxNiwgMHhjZGMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhjYiwweGEwLDB4MjQsMHhlMCB9fSwKKyB7MTYsIDB4Y2RkMCwgMCwgezB4MGYsMHgyYSwweDAzLDB4OGUsMHgwMCwweGQyLDB4ZDAsMHgzOCwweGZhLDB4MGYsMHgxOCwweGMzLDB4Y2UsMHgyNCwweDMxLDB4YjAgfX0sCisgezE2LCAweGNkZTAsIDAsIHsweDNjLDB4ZTUsMHgwYywweDNiLDB4MTcsMHhjZSwweDA0LDB4YzAsMHg4MiwweDM4LDB4YzIsMHg5ZSwweDEwLDB4MDMsMHgwYywweDAwIH19LAorIHsxNiwgMHhjZGYwLCAwLCB7MHhjMywweDAxLDB4M2UsMHhjMCwweDBkLDB4ODEsMHgwMywweDUyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2UwMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhlZiwweDEwLDB4M2UsMHhjMiwweDBlLDB4YjEsMHgyMywweDJjLDB4YzEsMHhhYiwweDAxLDB4MzYgfX0sCisgezE2LCAweGNlMTAsIDAsIHsweDgwLDB4MGYsMHhiMCwweDIzLDB4MmQsMHg5MCwweGU5LDB4ODQsMHg3MiwweGM4LDB4NjIsMHhmMSwweDE3LDB4ZmMsMHgwMCwweGZjIH19LAorIHsxNiwgMHhjZTIwLCAwLCB7MHgwMCwweDNiLDB4YzQsMHgxZCwweGYwLDB4MDMsMHhlYywweDAwLDB4ZWYsMHgwOCwweDNmLDB4YzgsMHgwZSwweGYxLDB4MDMsMHg5MCB9fSwKKyB7MTYsIDB4Y2UzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDgwLDB4ZmIsMHhhNCwweDNhLDB4YzggfX0sCisgezE2LCAweGNlNDAsIDAsIHsweDBlLDB4OTAsMHgwMywweDJjLDB4MDQsMHhjYSwweDAwLDB4MzAsMHg2MCwweDJkLDB4MWEsMHgyNywweDZjLDB4ODQsMHhjYiwweDYwIH19LAorIHsxNiwgMHhjZTUwLCAwLCB7MHgzMiwweGQyLDB4MGMsMHhhMCwweDEzLDB4MmQsMHg4NCwweGNiLDB4MDIsMHgzZSwweGMwLDB4MGQsMHhiOCwweDAzLDB4YWMsMHg4MCB9fSwKKyB7MTYsIDB4Y2U2MCwgMCwgezB4Y2IsMHg4MSwweDMyLDB4ODAsMHgwYywweGIwLDB4MDMsMHhhYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlNzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweGE0LDB4YjcsMHgyOCwweDczLDB4YzIsMHgwOCwweGYwLDB4MDIsMHgzYywweGMwLDB4OGYsMHgwMCwweDMxIH19LAorIHsxNiwgMHhjZTgwLCAwLCB7MHhjMCwweDA5LDB4NzAsMHg4MiwweDljLDB4ODAsMHg4NywweDBjLDB4MjAsMHhkOCwweDA5LDB4NzAsMHgyMiwweDFjLDB4MzAsMHg4NCB9fSwKKyB7MTYsIDB4Y2U5MCwgMCwgezB4MDAsMHgzZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MTQsMHgyNCwweDg3LDB4YTAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDEyLDB4MTIgfX0sCisgezE2LCAweGNlYTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg0MCwweGIzLDB4OTUsMHgyOSwweGU5IH19LAorIHsxNiwgMHhjZWIwLCAwLCB7MHgwYSwweDY4LDB4MDIsMHg5ZSwweGQwLDB4ODYsMHhmMCwweGEzLDB4ZTAsMHgwOCwweDc4LDB4MTIsMHg5ZSwweDQ0LDB4YTMsMHg4MiB9fSwKKyB7MTYsIDB4Y2VjMCwgMCwgezB4MjEsMHhlOCwweDBiLDB4MzgsMHgwMiwweDBlLDB4MTAsMHg4NywweDgwLDB4MmYsMHhlMCwweDBiLDB4MTgsMHgwMiwweDhlLDB4MDIgfX0sCisgezE2LCAweGNlZDAsIDAsIHsweDg3LDB4MDAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZWUwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4NDgsMHgzMCwweDAyLDB4MGMsMHgwNCwweDgzLDB4ODAsMHgyMCB9fSwKKyB7MTYsIDB4Y2VmMCwgMCwgezB4ZDAsMHgwOSwweDEwLDB4MDIsMHg4YywweDA2LDB4YTMsMHg4MCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDAyLDB4ODAgfX0sCisgezE2LCAweGNmMDAsIDAsIHsweDQwLDB4MjgsMHhkMiwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDEsMHg4MywweDAwLDB4MjIsMHgzYywweDA4LDB4ODcsMHgwMiwweDEyIH19LAorIHsxNiwgMHhjZjEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MTgsMHhmYSwweDAwLDB4M2EsMHg4MCB9fSwKKyB7MTYsIDB4Y2YyMCwgMCwgezB4OGUsMHhlNCwweDQyLDB4MjgsMHgwMiwweGNlLDB4ODAsMHgzMywweDgwLDB4NGQsMHhhMCwweDgzLDB4ZTgsMHgwMCwweGVhLDB4YTAgfX0sCisgezE2LCAweGNmMzAsIDAsIHsweGIyLDB4ODAsMHgwYSwweGEwLDB4MGEsMHgyOCwweDAwLDB4Y2UsMHgxOCwweDJmLDB4ODAsMHgwZiwweGEwLDB4MTMsMHhhOCwweDAwIH19LAorIHsxNiwgMHhjZjQwLCAwLCB7MHhjYSwweDAwLDB4MzIsMHg5MCwweDJjLDB4YWMsMHgwYiwweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2Y1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDA0LDB4M2EsMHgwMCwweDBmLDB4ODAsMHg4MywweGMwLDB4MDgsMHhlOCwweDAzLDB4M2EgfX0sCisgezE2LCAweGNmNjAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDIyLDB4YzAsMHgwMCwweGQwLDB4MDAsMHg3ZSwweDEwLDB4YTQsMHg4MCwweDAzLDB4YzAsMHgwMCwweGY4IH19LAorIHsxNiwgMHhjZjcwLCAwLCB7MHgwMCwweDNlLDB4MTAsMHgwZCwweDg0LDB4MDMsMHhjMCwweDAwLDB4ZjgsMHgwMCwweGJlLDB4MDAsMHgwZiwweDgwLDB4MDEsMHg1MiB9fSwKKyB7MTYsIDB4Y2Y4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAyLDB4YzksMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweGNmOTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDY0LDB4MDIsMHg4OSwweDA0LDB4MzIsMHg0MiwweDBkLDB4OTIsMHgwMywweGU2LDB4NDIsMHhjOSwweDAwIH19LAorIHsxNiwgMHhjZmEwLCAwLCB7MHgzMiwweDcwLDB4MGUsMHgxMiwweDBiLDB4MjQsMHgwOCwweGM5LDB4MDAsMHgzZSwweDQ1LDB4MGUsMHg5OSwweDAzLDB4ZTQsMHgwMiB9fSwKKyB7MTYsIDB4Y2ZiMCwgMCwgezB4YzEsMHgwMCwweDMyLDB4NTAsMHgwNCwweDk0LDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNmYzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgwMCwweDIyIH19LAorIHsxNiwgMHhjZmQwLCAwLCB7MHg1NCwweDBiLDB4OTAsMHgwMywweGU2LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4Y2ZlMCwgMCwgezB4MDAsMHgzOCwweDQ4LDB4MDgsMHg5MCwweDgyLDB4ZTQsMHgwNCwweGQ5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjAgfX0sCisgezE2LCAweGNmZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4MDEsMHgyYywweDQwIH19LAorIHsxNiwgMHhkMDAwLCAwLCB7MHgyOCwweDEwLDB4NDIsMHg2NCwweDAwLDB4YTEsMHgwNCwweDIyLDB4NTAsMHgwMSwweDkwLDB4NDIsMHhlNCwweDAwLDB4ODksMHgwNCB9fSwKKyB7MTYsIDB4ZDAxMCwgMCwgezB4MjAsMHg0MiwweDBhLDB4OTAsMHg0MiwweDM0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MCwweDBhLDB4OTAsMHgwMCwweGU0LDB4MDAgfX0sCisgezE2LCAweGQwMjAsIDAsIHsweDg5LDB4MDAsMHgyMywweDQwLDB4MGEsMHhkMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMDMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjQsMHgyYywweDQ4LDB4MDgsMHgxMCwweDAyLDB4MDQsMHg4MCwweGExLDB4MjAsMHgyOCB9fSwKKyB7MTYsIDB4ZDA0MCwgMCwgezB4NDAsMHgwYiwweDEwLDB4MDIsMHg4NSwweDgwLDB4ODEsMHgyMCwweDIwLDB4NDgsMHgwOCwweDUwLDB4NjIsMHgxNCwweDAyLDB4ODEgfX0sCisgezE2LCAweGQwNTAsIDAsIHsweDAzLDB4MmUsMHg0MCwweDg4LDB4MTYsMHg4MiwweGM0LDB4YTAsMHg5MSwweDI4LDB4MjEsMHg0MCwweDJhLDB4NTAsMHgwMiwweDAyIH19LAorIHsxNiwgMHhkMDYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhjOCwweDUwLDB4MmUsMHgxNCB9fSwKKyB7MTYsIDB4ZDA3MCwgMCwgezB4MGMsMHg4NSwweDAzLDB4NjEsMHg0MCwweGU4LDB4NTAsMHhiMiwweDE1LDB4NGQsMHg4MCwweDAyLDB4YzAsMHgwMCwweDQ4LDB4NTAgfX0sCisgezE2LCAweGQwODAsIDAsIHsweGIyLDB4MTUsMHgxYSwweDgwLDB4MTMsMHgzMCwweDA4LDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgyLDB4MDMsMHhlMCwweDgwIH19LAorIHsxNiwgMHhkMDkwLCAwLCB7MHhjMCwweDIwLDB4MzAsMHgwMCwweDBlLDB4NDAsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDBhMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDgsMHhkZCwweDEwLDB4MzcgfX0sCisgezE2LCAweGQwYjAsIDAsIHsweDQwLDB4MGYsMHhkNCwweDA3LDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzZSwweDQ1LDB4MGYsMHg5NCwweDAzLDB4ZTUsMHgwOCwweGZkIH19LAorIHsxNiwgMHhkMGMwLCAwLCB7MHgwMiwweDM5LDB4ZDAsMHgwZiwweGQwLDB4NDMsMHhmNCwweGEwLDB4ZjksMHgyOCwweDNlLDB4NGIsMHgwZCwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4ZDBkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDgwLDB4YzksMHhhNiwweDMyLDB4NjggfX0sCisgezE2LCAweGQwZTAsIDAsIHsweDBjLDB4OTAsMHgwMywweGE2LDB4ODEsMHhlOSwweGU5LDB4M2IsMHg0MCwweDBlLDB4NTgsMHgwMywweDM2LDB4MjAsMHhjOSwweGEwIH19LAorIHsxNiwgMHhkMGYwLCAwLCB7MHgzNywweDc4LDB4MGQsMHhkYSwweDAzLDB4MzYsMHgyNiwweGM1LDB4MDAsMHgzNywweDY5LDB4MGUsMHhkZSwweDAzLDB4YTYsMHg4MiB9fSwKKyB7MTYsIDB4ZDEwMCwgMCwgezB4Y2QsMHhjMCwweDMzLDB4NTAsMHgwZiwweGQwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxMTAsIDAsIHsweDM4LDB4MTAsMHhlMywweGE0LDB4ODgsMHhhOSwweDIyLDB4M2EsMHgwOCwweDA4LDB4MDAsMHgyMiwweGEwLDB4YjgsMHhlNSwweDMwIH19LAorIHsxNiwgMHhkMTIwLCAwLCB7MHgyMCwweDI4LDB4ODAsMHgyMiwweDQzLDB4YTAsMHgwOCwweGU4LDB4MmEsMHgzZCwweDA4LDB4YTQsMHg2MiwweDIwLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4ZDEzMCwgMCwgezB4MDAsMHgyZSwweDEwLDB4MDgsMHg4ZSwweDAzLDB4MjMsMHhhMCwweDg4LDB4YTAsMHgyMCwweDI4LDB4MGIsMHg4YSwweDgyLDB4MGUgfX0sCisgezE2LCAweGQxNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg0MCwweDkxLDB4NDAsMHgyMCwweDQ0IH19LAorIHsxNiwgMHhkMTUwLCAwLCB7MHgwOCwweDkwLDB4YTIsMHg4NSwweDEwLDB4YTEsMHgyMCwweDJjLDB4NDIsMHgwYiwweDE0LDB4MTIsMHg4YywweDAxLDB4OTEsMHgxMCB9fSwKKyB7MTYsIDB4ZDE2MCwgMCwgezB4MmMsMHg0OCwweDA5LDB4MTEsMHgwYSwweGM0LDB4MDAsMHg4MSwweDAwLDB4MmMsMHg1MCwweDBiLDB4MTEsMHgxMiwweGM1LDB4MDEgfX0sCisgezE2LCAweGQxNzAsIDAsIHsweGIxLDB4NDAsMHgyNCwweDQ4LDB4MGIsMHgxOCwweDBlLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMTgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDkxLDB4MDAsMHgyMiwweDQxLDB4MDgsMHg5NCwweDQyLDB4MjQsMHgwMCwweGIxLDB4NDAsMHgyMCB9fSwKKyB7MTYsIDB4ZDE5MCwgMCwgezB4NDAsMHg0OSwweGIyLDB4NjIsMHgyNCwweDAwLDB4OTksMHgwMCwweDBhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNSwweDgwLDB4ODkgfX0sCisgezE2LCAweGQxYTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDA5LDB4YjAsMHgwMiwweDI0LDB4ODAsMHhiOSwweDAwLDB4MjYsMHg1MCwweDRiLDB4OTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHhkMWIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDIsMHhkOSwweDAwLDB4YjIsMHg0MCB9fSwKKyB7MTYsIDB4ZDFjMCwgMCwgezB4MmMsMHg5NSwweDEzLDB4YTQsMHgxMCwweGU5LDB4MDAsMHhiZSwweDYwLDB4OGYsMHg5MCwweDBiLDB4YTQsMHgxMCwweDU5LDB4MDAgfX0sCisgezE2LCAweGQxZDAsIDAsIHsweDFlLDB4NDAsMHg5ZCwweDk0LDB4MjMsMHhlNCwweDAyLDB4ODksMHgwMCwweDM0LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDA4IH19LAorIHsxNiwgMHhkMWUwLCAwLCB7MHg3OSwweDAwLDB4YjYsMHg0MCwweDA3LDB4OTgsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDFmMCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MDAsMHhlOSwweDAyLDB4M2MsMHg0MCwweDJmLDB4OTgsMHgwMiwweGU0LDB4MDAsMHhmOSwweDQyLDB4M2EgfX0sCisgezE2LCAweGQyMDAsIDAsIHsweDY4LDB4MGEsMHgxMCwweDAzLDB4ZTQsMHgxMCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDBmLDB4MjYsMHgwMCwweGY5IH19LAorIHsxNiwgMHhkMjEwLCAwLCB7MHgwNCwweDNlLDB4NDAsMHgwZSwweDFjLDB4MDMsMHhlNiwweDAwLDB4YzEsMHgwMCwweDNhLDB4NTAsMHgwZiwweDk5LDB4ODMsMHhjYSB9fSwKKyB7MTYsIDB4ZDIyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZTgsMHgwMCwweDNhLDB4MDAgfX0sCisgezE2LCAweGQyMzAsIDAsIHsweDBjLDB4ODQsMHgwMywweDIwLDB4MDAsMHhkOCwweDQyLDB4MzIsMHgwNCwweDBjLDB4ODgsMHgxMywweGUwLDB4MDAsMHhjOCwweDAwIH19LAorIHsxNiwgMHhkMjQwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwNCwweDBiLDB4MDAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MGUsMHg4MCwweDIzLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDI1MCwgMCwgezB4YzgsMHg4MCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDEsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDEwLDB4OGEsMHgwMCwweDJlLDB4ODAsMHgyOCwweDIwLDB4MjIsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIzIH19LAorIHsxNiwgMHhkMjcwLCAwLCB7MHhiMCwweDg4LDB4ZTAsMHgwMiwweDI4LDB4MTAsMHhkYSwweDAwLDB4YTMsMHhiNCwweDA4LDB4ZTgsMHgxMCwweDI4LDB4MDAsMHg4ZSB9fSwKKyB7MTYsIDB4ZDI4MCwgMCwgezB4MjAsMHgyMywweGEwLDB4NDgsMHhlZCwweDFhLDB4MjgsMHgwMCwweGRlLDB4MDAsMHgyMywweDkwLDB4MGEsMHhlMCwweDAyLDB4MGEgfX0sCisgezE2LCAweGQyOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGEzLDB4MDAsMHgyOCwweGMwIH19LAorIHsxNiwgMHhkMmEwLCAwLCB7MHgwOCwweDMwLDB4MGEsMHgwYywweDAwLDB4OTMsMHgwMCwweDIwLDB4YzIsMHgyYSwweDMwLDB4MjIsMHhhNCwweDAwLDB4YmIsMHgwMCB9fSwKKyB7MTYsIDB4ZDJiMCwgMCwgezB4MDgsMHhlMCwweDE4LDB4MDksMHgwYSwweDRjLDB4MDAsMHg5MywweDAyLDB4MjQsMHhlOCwweDAyLDB4MDgsMHgwNiwweDRjLDB4MDAgfX0sCisgezE2LCAweGQyYzAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGQ4LDB4MGEsMHg5MCwweDAyLDB4NGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMmQwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg4MCwweDg3LDB4MDQsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MGUsMHgwMCwweDg3LDB4MTAsMHgyNSB9fSwKKyB7MTYsIDB4ZDJlMCwgMCwgezB4MDAsMHgwYSwweDYwLDB4MDIsMHg1ZSwweDAwLDB4OTcsMHgwMCwweDI5LDB4ODIsMHgwOCwweDUwLDB4MTIsMHg1NCwweDAwLDB4OGYgfX0sCisgezE2LCAweGQyZjAsIDAsIHsweDgwLDB4NjEsMHhkMCwweDA4LDB4MDQsMHgwMiwweDVjLDB4MDEsMHhiNywweDA4LDB4YTksMHhhMCwweDBhLDB4NTAsMHg4MiwweDY4IH19LAorIHsxNiwgMHhkMzAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDNlLDB4ODAsMHhlNywweDgwLDB4MzgsMHhlNCB9fSwKKyB7MTYsIDB4ZDMxMCwgMCwgezB4MDgsMHg3ZSwweDAzLDB4MWYsMHgwMCwweGRmLDB4ODAsMHhiMSwweDIxLDB4MWUsMHg3OCwweDAzLDB4ZGMsMHgwNCwweGYzLDB4ODAgfX0sCisgezE2LCAweGQzMjAsIDAsIHsweDViLDB4ZTEsMHgwOCwweDI4LDB4MDMsMHg1ZSwweDAwLDB4ZDcsMHg4MCwweDM1LDB4NjAsMHgwZSwweDY4LDB4MDMsMHg0ZSwweDAwIH19LAorIHsxNiwgMHhkMzMwLCAwLCB7MHhkZiwweDgwLDB4MzEsMHhlMCwweDBlLDB4ZjgsMHgwYiwweDZhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDM0MCwgMCwgezB4MDgsMHgxZCwweGFkLDB4MDIsMHhmYiwweDc0LDB4M2UsMHhkMCwweDRmLDB4YjIsMHg4MywweGVkLDB4MDAsMHg3YiwweDY4LDB4M2EgfX0sCisgezE2LCAweGQzNTAsIDAsIHsweDAwLDB4OGQsMHg4MCwweDAzLDB4YTQsMHgyMCwweGRiLDB4MDEsMHgzNiwweDgwLDB4NmYsMHhiMCwweDQxLDB4ODQsMHgwMCwweGViIH19LAorIHsxNiwgMHhkMzYwLCAwLCB7MHgwMCwweDNjLDB4YzAsMHgwZiwweGU2LDB4ODMsMHhiYywweDQwLDB4ZGIsMHgwMCwweGI2LDB4ODAsMHgwZiwweGIwLDB4MDMsMHg4MiB9fSwKKyB7MTYsIDB4ZDM3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDIwLDB4ZGYsMHhjMCwweDNiLDB4ZTYgfX0sCisgezE2LCAweGQzODAsIDAsIHsweDBlLDB4ZjgsMHgxMywweGZmLDB4NDQsMHhjNywweDgyLDB4M2IsMHhlMCwweDBmLDB4ZjksMHgwMywweGJlLDB4MTAsMHhjZiwweGM4IH19LAorIHsxNiwgMHhkMzkwLCAwLCB7MHgzMywweDYwLDB4OGQsMHhlYiwweDAzLDB4M2UsMHgwMCwweGRiLDB4ODIsMHgzZiwweGUwLDB4MGMsMHhkOCwweDAzLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ZDNhMCwgMCwgezB4Y2UsMHg4MCwweDMzLDB4ZTQsMHgwZiwweGY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzYjAsIDAsIHsweGE4LDB4MTEsMHhiYywweDQwLDB4ODcsMHgwMCwweDIxLDB4ZTQsMHgwYiwweDc4LDB4YTIsMHhjZSwweDkwLDB4YzcsMHhiMCwweDIwIH19LAorIHsxNiwgMHhkM2MwLCAwLCB7MHhlOCwweDBiLDB4MjgsMHg5MiwweGI2LDB4ODgsMHg4NywweGEwLDB4MjAsMHg2NCwweDBiLDB4MzUsMHgwMywweDE0LDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4ZDNkMCwgMCwgezB4YjIsMHgzOSwweGMwLDB4MmMsMHhjMCwweDAzLDB4NWUsMHgwMiwweGNmLDB4MDAsMHgzMSwweGNlLDB4MGIsMHg3NiwweDEyLDB4MmEgfX0sCisgezE2LCAweGQzZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGEzLDB4MTAsMHgyOSwweGM4IH19LAorIHsxNiwgMHhkM2YwLCAwLCB7MHgwYiwweDc0LDB4MDIsMHhkYywweDgwLDB4OGYsMHgwMCwweDI5LDB4Y2MsMHgwYSwweDMwLDB4MDYsMHgxNCwweDgwLDB4ODcsMHgxMCB9fSwKKyB7MTYsIDB4ZDQwMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NjYsMHgwMiwweDVjLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NTEsMHgwMiwweDFjLDB4ODAgfX0sCisgezE2LCAweGQ0MTAsIDAsIHsweDk2LDB4MDAsMHgyMSwweGMwLDB4NWIsMHg3NCwweDgyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwOCwweGEzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHhiOCwweDAyLDB4Y2MsMHgwMCwweDhiLDB4NDAsMHhhOCB9fSwKKyB7MTYsIDB4ZDQzMCwgMCwgezB4YzAsMHg4YiwweDA4LDB4MjIsMHg4YywweDAyLDB4ODMsMHgwMCwweDYwLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgwNCwweDAwLDB4ODMgfX0sCisgezE2LCAweGQ0NDAsIDAsIHsweDQwLDB4MjgsMHhmYywweDhhLDB4MDAsMHgwMiwweDZlLDB4MDAsMHg4MywweDAwLDB4YTAsMHhkMCwweDhiLDB4MzgsMHgwMiwweDA4IH19LAorIHsxNiwgMHhkNDUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJjLDB4MDIsMHhlZiwweDAwLDB4M2IsMHhjMCB9fSwKKyB7MTYsIDB4ZDQ2MCwgMCwgezB4NGYsMHhmOCwweDAyLDB4ZmMsMHgwMiwweGNmLDB4MDAsMHgzOCwweDEyLDB4MGUsMHg5OCwweDAyLDB4MmMsMHgwMCwweGNmLDB4MDAgfX0sCisgezE2LCAweGQ0NzAsIDAsIHsweDMyLDB4YzAsMHgwOSwweDkwLDB4MDMsMHg2NCwweDAyLDB4ODEsMHhjMCwweDNlLDB4ZDAsMHgwZiwweDkwLDB4MDcsMHgzYywweDAzIH19LAorIHsxNiwgMHhkNDgwLCAwLCB7MHhkOSwweDAwLDB4MzIsMHg2MCwweDBmLDB4ODgsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQ5MCwgMCwgezB4ODAsMHgwMCwweGNjLDB4MDAsMHhkYiwweDAwLDB4M2UsMHhjMCwweDhmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAyLDB4MzYgfX0sCisgezE2LCAweGQ0YTAsIDAsIHsweGMwLDB4NGYsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGZiLDB4MDAsMHhiZSwweDkwLDB4MGYsMHg5YywweDEzLDB4ZWMsMHgwMCwweGU5IH19LAorIHsxNiwgMHhkNGIwLCAwLCB7MHgxOCwweDNhLDB4ZDAsMHgwNCwweGQ1LDB4MDMsMHhlYywweDQwLDB4ZTksMHgwMCwweDNhLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4ZDRjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4Y2YsMHgwMCwweDNkLDB4YzEgfX0sCisgezE2LCAweGQ0ZDAsIDAsIHsweDhjLDB4ZjAsMHgwMywweDJjLDB4MDAsMHhlZiwweDBhLDB4YjMsMHgxMiwweDJjLDB4NzAsMHgyMywweDE0LDB4MGEsMHg0ZiwweDAwIH19LAorIHsxNiwgMHhkNGUwLCAwLCB7MHgzNSwweDYwLDB4MGQsMHhiMCwweDAzLDB4MDQsMHgwMCwweGNkLDB4ODAsMHgwNywweGU4LDB4MGMsMHhjNCwweDAzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZDRmMCwgMCwgezB4Y2QsMHgwMCwweDMxLDB4ZTIsMHgyYywweGUwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1MDAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAyLDB4YWIsMHgwMiwweDJlLDB4YzAsMHgwZSwweGIwLDB4MDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDMyIH19LAorIHsxNiwgMHhkNTEwLCAwLCB7MHgzMCwweDAwLDB4OWMsMHgwMywweDZjLDB4MDAsMHg4YiwweDA0LDB4MjIsMHgzNiwweDA4LDB4MzQsMHg0YSwweDJjLDB4MDgsMHg4OSB9fSwKKyB7MTYsIDB4ZDUyMCwgMCwgezB4OTAsMHgyMCwweGI4LDB4MGYsMHg4NCwweDAwLDB4YWMsMHgwMiwweDg5LDB4MDAsMHgzNiwweGEwLDB4MDgsMHhhNCwweDAyLDB4MjAgfX0sCisgezE2LCAweGQ1MzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweGMwIH19LAorIHsxNiwgMHhkNTQwLCAwLCB7MHgwOCwweGIwLDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCwweDIyLDB4ZDEsMHgwOCwweDg4LDB4MTIsMHgyNiwweDAwLDB4YTMsMHgwMCB9fSwKKyB7MTYsIDB4ZDU1MCwgMCwgezB4MjYsMHg0MCwweDBiLDB4YjAsMHgwMiwweDI2LDB4MDAsMHg4YiwweDAwLDB4MjYsMHhjMCwweDU4LDB4MTAsMHgxMiwweDJjLDB4MDQgfX0sCisgezE2LCAweGQ1NjAsIDAsIHsweDgyLDB4ODAsMHgyYSwweDQ5LDB4MDgsMHgzMCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNTcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGEzLDB4MTQsMHgyYywweGM4LDB4MWEsMHgzNCwweDhhLDB4MGMsMHg4NCwweDgzLDB4NDAsMHgyMiB9fSwKKyB7MTYsIDB4ZDU4MCwgMCwgezB4YzgsMHgwOCwweDAzLDB4NjIsMHg0YywweGMwLDB4YTMsMHg2MCwweDIwLDB4NDAsMHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4OGIgfX0sCisgezE2LCAweGQ1OTAsIDAsIHsweDQ1LDB4MDgsMHhjMCwweDBiLDB4MTAsMHgwMiwweDhjLDB4YTAsMHg4MywweDAwLDB4MjYsMHg0MCwweDA4LDB4MzAsMHgwYSwweDAyIH19LAorIHsxNiwgMHhkNWEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHhjZiwweDQwLDB4MmYsMHhkMiB9fSwKKyB7MTYsIDB4ZDViMCwgMCwgezB4OGMsMHhmNiwweDAzLDB4M2MsMHgyMiwweGNmLDB4NDAsMHgzMiwweGQ2LDB4NGMsMHhhNiwweGMxLDB4M2QsMHhhMCwweDg3LDB4NDggfX0sCisgezE2LCAweGQ1YzAsIDAsIHsweDM2LDB4MGQsMHgwZiwweGIxLDB4MDIsMHgyNCwweDQyLDB4Y2IsMHg2MCwweDE2LDB4YzAsMHgwYywweGQwLDB4MDMsMHgyYywweDgwIH19LAorIHsxNiwgMHhkNWQwLCAwLCB7MHhjYSwweDAwLDB4MzIsMHhjMCwweDBjLDB4MzAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDVlMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmZiwweDIwLDB4M2UsMHhjYSwweDBlLDB4YjAsMHgwMywweGVjLDB4MjAsMHhkYiwweDM0LDB4M2EgfX0sCisgezE2LCAweGQ1ZjAsIDAsIHsweGM4LDB4MGYsMHg4MCwweDAzLDB4ZTQsMHgxMCwweGRiLDB4MjEsMHgzZSwweDE4LDB4MGQsMHhmMiwweDAzLDB4ZmMsMHg4MCwweGZmIH19LAorIHsxNiwgMHhkNjAwLCAwLCB7MHgzMCwweDM1LDB4YzAsMHgwZiwweGMwLDB4MTMsMHhlYywweDAwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZDYxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhmYywweDAwLDB4ZmIsMHgwYiwweDJmLDB4Y2EgfX0sCisgezE2LCAweGQ2MjAsIDAsIHsweDhkLDB4ZjIsMHgwMywweGZhLDB4MDAsMHg5NiwweDgwLDB4M2IsMHhjNCwweDBkLDB4ZjEsMHgwMywweDdjLDB4ODAsMHhlYywweDgwIH19LAorIHsxNiwgMHhkNjMwLCAwLCB7MHgzYiwweDA4LDB4MGMsMHhjMiwweDAzLDB4NzQsMHgwMiwweGNjLDB4ODAsMHgzZiwweDQ4LDB4MGUsMHhmMCwweDAzLDB4MzAsMHhhMCB9fSwKKyB7MTYsIDB4ZDY0MCwgMCwgezB4ZDUsMHg4MCwweDNmLDB4NDAsMHgwYywweGY4LDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2NTAsIDAsIHsweDgwLDB4MDgsMHhlZSwweDQwLDB4YmYsMHg4MCwweDJmLDB4ZjAsMHgwYiwweGY3LDB4MjIsMHhlZSwweDIwLDB4OGEsMHg4MCwweDIzIH19LAorIHsxNiwgMHhkNjYwLCAwLCB7MHhmYywweDg4LDB4NzUsMHgxMiwweDNkLDB4MDAsMHg4OCwweDAwLDB4MjIsMHgwMCwweDI4LDB4ODAsMHgwMiwweDI0LDB4MDgsMHg4OCB9fSwKKyB7MTYsIDB4ZDY3MCwgMCwgezB4MDAsMHg2ZiwweDUwLDB4MDAsMHhmNSwweDAyLDB4MjksMHgwMCwweDg5LDB4MDAsMHgyZSwweDU0LDB4MGQsMHg5MCwweDExLDB4YTAgfX0sCisgezE2LCAweGQ2ODAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYywweGMxIH19LAorIHsxNiwgMHhkNjkwLCAwLCB7MHgwOSwweDMwLDB4ODIsMHhjYywweDgyLDB4YmIsMHgwMCwweDI4LDB4YzAsMHg0OSwweDMyLDB4MDIsMHhjZCwweDAwLDB4YjgsMHgwMCB9fSwKKyB7MTYsIDB4ZDZhMCwgMCwgezB4MmMsMHg1MCwweDA5LDB4MDEsMHgwMiwweDBjLDB4NDAsMHg4MCwweDAwLDB4NmMsMHg0NCwweDA5LDB4MzAsMHgwMiwweDIwLDB4MDAgfX0sCisgezE2LCAweGQ2YjAsIDAsIHsweGIwLDB4MDAsMHgyYywweDQwLDB4MTgsMHgzMCwweDA2LDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNmMwLCAwLCB7MHhjMCwweDAxLDB4YWMsMHgwMCwweGJiLDB4MDEsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZWUsMHgwMCwweGFhLDB4MDAsMHg0YSB9fSwKKyB7MTYsIDB4ZDZkMCwgMCwgezB4YzAsMHgwOCwweGIwLDB4NTIsMHhlYywweDAwLDB4OTgsMHgwMiwweDI2LDB4NDAsMHgwOSwweDgwLDB4MDIsMHg2YywweDAxLDB4YWEgfX0sCisgezE2LCAweGQ2ZTAsIDAsIHsweDA0LDB4MmUsMHg0MCwweDA5LDB4YjAsMHgwMiwweDIyLDB4MDAsMHhhOSwweDgwLDB4MmUsMHg0MSwweDA5LDB4OTAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhkNmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ZDcwMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4Y2UsMHg4NCwweGZhLDB4MDAsMHgxYSwweGMwLDB4OGQsMHhiMCwweDQzLDB4ZWMsMHgwMCwweGYwLDB4MDIgfX0sCisgezE2LCAweGQ3MTAsIDAsIHsweDNmLDB4MDAsMHgwZCwweGQxLDB4MDMsMHgzNSwweDAwLDB4Y2IsMHg0OCwweDJlLDB4NDAsMHgyZiwweGIwLDB4MDksMHgyMiwweDgwIH19LAorIHsxNiwgMHhkNzIwLCAwLCB7MHhmOSwweGM4LDB4MWUsMHhlMCwweDA4LDB4YjEsMHhlMiwweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDczMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHg3YiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhkZSwweDAwLDB4MjQgfX0sCisgezE2LCAweGQ3NDAsIDAsIHsweGMwLDB4NGYsMHhmMCwweDAzLDB4MmMsMHgwMCwweGVjLDB4MjAsMHgzYiwweDAwLDB4MGUsMHg5OCwweDAzLDB4OTQsMHgwMiwweGRkIH19LAorIHsxNiwgMHhkNzUwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHg0ZSwweGYwLDB4MDEsMHhmOCwweDAwLDB4ZGQsMHgwMCwweDNjLDB4ZTQsMHgwZiwweGQ4LDB4MDMsMHhiOCB9fSwKKyB7MTYsIDB4ZDc2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhhYywweGMwLDB4ZmIsMHgyMCwweDMyLDB4YzggfX0sCisgezE2LCAweGQ3NzAsIDAsIHsweDhkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2EsMHhjMiwweDJjLDB4MzAsMHgwMywweDZjLDB4MDQsMHhkOCwweDAyIH19LAorIHsxNiwgMHhkNzgwLCAwLCB7MHgzYywweDQ0LDB4OGQsMHgxMCwweDAzLDB4YWQsMHgwMywweGVhLDB4MDAsMHgzYywweDQwLDB4MGMsMHg3MCwweDIzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4ZDc5MCwgMCwgezB4YzgsMHg0MCwweDNhLDB4YzAsMHgwZCwweGJjLDB4MDMsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3YTAsIDAsIHsweGM4LDB4MDEsMHgzZCwweDAwLDB4YmYsMHg0MiwweDIzLDB4ZjAsMHgwZCwweGYwLDB4MDIsMHhlNSwweDAwLDB4ZTIsMHgwMSwweDM3IH19LAorIHsxNiwgMHhkN2IwLCAwLCB7MHhmMSwweDA4LDB4ZjAsMHgwZSwweDNkLDB4YzAsMHhhOCwweDAwLDB4MmUsMHg1NCwweDI4LDB4OTAsMHgwMiwweDJjLDB4MDAsMHg4YSB9fSwKKyB7MTYsIDB4ZDdjMCwgMCwgezB4MDUsMHgzYiwweDQxLDB4NDgsMHhmNSwweDAzLDB4OGMsMHgwMCwweDg5LDB4MDAsMHgyMiwweGQ0LDB4MGUsMHg5NSwweDAyLDB4ZjIgfX0sCisgezE2LCAweGQ3ZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDQsMHgyMCwweGMwIH19LAorIHsxNiwgMHhkN2UwLCAwLCB7MHg4OSwweDMwLDB4MDIsMHhjYywweDQwLDB4YjIsMHgwMCwweDJjLDB4YzQsMHg0OCwweDMwLDB4MDIsMHgyYywweDAyLDB4YTIsMHgwMCB9fSwKKyB7MTYsIDB4ZDdmMCwgMCwgezB4MmMsMHgyMCwweDE5LDB4MjAsMHgxYSwweDgwLDB4MDgsMHhiMCwweDAwLDB4NmMsMHg0MCwweDA4LDB4MzAsMHgwMiwweGM0LDB4MDAgfX0sCisgezE2LCAweGQ4MDAsIDAsIHsweDgxLDB4MDAsMHgyYywweDQwLDB4MDgsMHgzMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4YTAsMHhlMSwweGUwLDB4MDksMHg3OCwweDAyLDB4ZGYsMHgwNCwweGFlLDB4ODAsMHgyZCB9fSwKKyB7MTYsIDB4ZDgyMCwgMCwgezB4ZTAsMHgwOCwweDc5LDB4MDIsMHgxZSwweDEwLDB4ODcsMHg5MCwweDJjLDB4MjgsMHgyOSwweDY4LDB4MDIsMHg4MiwweDgxLDB4YjQgfX0sCisgezE2LCAweGQ4MzAsIDAsIHsweDgwLDB4MmQsMHg2MCwweDA4LDB4NzgsMHgxMCwweGJjLDB4MDAsMHg4ZiwweDgwLDB4MmQsMHg2MCwweDBiLDB4NjgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhkODQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDBjLDB4MDUsMHhmMywweDkyLDB4MzAsMHhjYSB9fSwKKyB7MTYsIDB4ZDg1MCwgMCwgezB4MGQsMHgzMCwweDAzLDB4Y2MsMHgwMCwweGYzLDB4MDAsMHgzYywweGMwLDB4MGMsMHgzMCwweDAyLDB4MGMsMHg4MCwweDcwLDB4MDAgfX0sCisgezE2LCAweGQ4NjAsIDAsIHsweDJjLDB4NDAsMHgwZCwweDIwLDB4MDMsMHg4OSwweDAwLDB4YjEsMHgwMCwweDNlLDB4NDAsMHgyYywweDMwLDB4MDMsMHhlYywweDUwIH19LAorIHsxNiwgMHhkODcwLCAwLCB7MHhjMywweDIwLDB4M2MsMHg0MCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2MsMHhjMCwweDBlLDB4YjAsMHg4MywweGVjLDB4NDAsMHhlYSwweDAwLDB4MzYgfX0sCisgezE2LCAweGQ4OTAsIDAsIHsweGMyLDB4MGYsMHhiMCwweDgzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSwweDQ4LDB4MGUsMHhlMCwweDBiLDB4N2EsMHg4MCwweGNmIH19LAorIHsxNiwgMHhkOGEwLCAwLCB7MHgwMCwweDNiLDB4NDQsMHgwZiwweGYwLDB4MDMsMHhlYywweGMwLDB4ZmYsMHgwMCwweDAzLDB4NDQsMHgwZSwweGUwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZDhiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgyMywweDNlLDB4YzggfX0sCisgezE2LCAweGQ4YzAsIDAsIHsweDFkLDB4YjAsMHgwMywweGVlLDB4MDAsMHhjYSwweDAwLDB4M2UsMHhjOCwweDBjLDB4YjIsMHgwMywweDJkLDB4OTAsMHhjOCwweDg0IH19LAorIHsxNiwgMHhkOGQwLCAwLCB7MHgzNiwweDAwLDB4MmQsMHhiMCwweDAzLDB4NjAsMHgxOCwweDliLDB4ODAsMHgzMywweDUwLDB4MGMsMHhmMiwweDAzLDB4ZTIsMHgwMCB9fSwKKyB7MTYsIDB4ZDhlMCwgMCwgezB4YzksMHg4MCwweDMyLDB4NDAsMHgwYywweGI4LDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4ZjAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgyOCwweDBjLDB4ZDIsMHgyOCwweDczLDB4MDIsMHhmYywweDAwLDB4ODYsMHgwNCwweDJjIH19LAorIHsxNiwgMHhkOTAwLCAwLCB7MHhjYywweDI4LDB4NzAsMHg4MywweDBjLDB4MjAsMHg5NSwweDAxLDB4MjAsMHgwMCwweDA5LDB4MzAsMHgxMiwweDEwLDB4MDQsMHg4NSB9fSwKKyB7MTYsIDB4ZDkxMCwgMCwgezB4MDAsMHgyMSwweDUyLDB4MDgsMHg3NSwweDAyLDB4ZDgsMHgwMCwweDg3LDB4MDAsMHgyMSwweDQwLDB4MDgsMHg2MCwweDAyLDB4MTIgfX0sCisgezE2LCAweGQ5MjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHhkNCwweGI3LDB4YjEsMHgwOSwweGUxIH19LAorIHsxNiwgMHhkOTMwLCAwLCB7MHgwOCwweDc4LDB4MjIsMHhkZSwweDAwLDB4OTUsMHg4MCwweDJkLDB4ZTAsMHgwOCwweDc4LDB4MGEsMHg1ZSwweDQyLDB4OTQsMHhjMCB9fSwKKyB7MTYsIDB4ZDk0MCwgMCwgezB4MjEsMHg2MCwweDA4LDB4NzgsMHgwMiwweDVhLDB4MDAsMHg4NywweDgwLDB4MmQsMHg2OCwweDA4LDB4N2EsMHgwMiwweGQ3LDB4MDAgfX0sCisgezE2LCAweGQ5NTAsIDAsIHsweDk3LDB4ODAsMHgyMCwweDYwLDB4MDksMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOTYwLCAwLCB7MHg0OCwweDEwLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MDgsMHhiMCwweDAyLDB4Y2QsMHg4MCwweDkyLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4ZDk3MCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MDIsMHhjYywweDAwLDB4OTAsMHg4MCwweGEwLDB4NDAsMHgwOSwweDM2LDB4MDIsMHg0OCwweDAyLDB4ODMgfX0sCisgezE2LCAweGQ5ODAsIDAsIHsweGEwLDB4YWMsMHg0MCwweDJhLDB4MzAsMHgwNiwweGNlLDB4MDIsMHg5MywweDA0LDB4YTAsMHg0MCwweDA5LDB4MjAsMHgwYSwweDEyIH19LAorIHsxNiwgMHhkOTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4M2EsMHg4MCB9fSwKKyB7MTYsIDB4ZDlhMCwgMCwgezB4MGQsMHhhMCwweDAzLDB4ZmIsMHgwMiwweGRlLDB4ODAsMHgzZSwweDgwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgwMCwweGNlLDB4ODAgfX0sCisgezE2LCAweGQ5YjAsIDAsIHsweDMyLDB4ODAsMHgwYywweGE0LDB4MDMsMHg3OCwweDAwLDB4Y2UsMHhhNCwweDNmLDB4ODAsMHgwYywweGEwLDB4MDcsMHhmOSwweDAwIH19LAorIHsxNiwgMHhkOWMwLCAwLCB7MHhkZSwweDAwLDB4MzIsMHg4MCwweDJkLDB4ZTAsMHgwMiwweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDlkMCwgMCwgezB4NDgsMHgwMCwweGUxLDB4MDAsMHhmOCwweDAwLDB4N2MsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4NDAsMHhlOCwweDEwLDB4M2MgfX0sCisgezE2LCAweGQ5ZTAsIDAsIHsweDAxLDB4Y2YsMHg4MCwweDBmLDB4MjAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHgwNCwweDAzLDB4OTAsMHgwMCwweGU4IH19LAorIHsxNiwgMHhkOWYwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwZCwweDgwLDB4MDcsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDQsMHgwZSwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ZGEwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgxMCwweDdlLDB4NDEgfX0sCisgezE2LCAweGRhMTAsIDAsIHsweDBlLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg2OCwweDBlLDB4OTAsMHgwZiwweGE0LDB4MDgsMHhjOSwweDAwIH19LAorIHsxNiwgMHhkYTIwLCAwLCB7MHgzYSwweDQwLDB4MGMsMHg5MCwweDBiLDB4MjQsMHgxMiwweGU5LDB4MDAsMHgzZSwweDQ0LDB4MmMsMHg5MCwweDAzLDB4NjQsMHgyNCB9fSwKKyB7MTYsIDB4ZGEzMCwgMCwgezB4ZjksMHgwMiwweDJlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhNDAsIDAsIHsweDgwLDB4MDQsMHg2NSwweDEwLDB4YjksMHg4MCwweDNlLDB4NDAsMHgwOCwweDkwLDB4MGEsMHgyNiwweDAwLDB4YjEsMHgxMCwweDJhIH19LAorIHsxNiwgMHhkYTUwLCAwLCB7MHg3MiwweDA4LDB4OTAsMHgwNywweDY0LDB4MDIsMHg4OSwweDQwLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgxMiwweDI1LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZGE2MCwgMCwgezB4NDUsMHgzZSwweDUwLDB4MGQsMHg5MCwweDBhLDB4MjUsMHgwMCwweGI5LDB4NDAsMHgyZSwweDQwLDB4MjgsMHg5NCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGRhNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHhkYTgwLCAwLCB7MHg0OCwweDkwLDB4NDIsMHgyNiwweDAxLDB4YjksMHg0MCwweDI2LDB4NDAsMHgwYSwweDkwLDB4NDIsMHg4NCwweDAxLDB4OGIsMHgwOCB9fSwKKyB7MTYsIDB4ZGE5MCwgMCwgezB4MmMsMHg0MCwweDA5LDB4ZDAsMHg4MiwweDM0LDB4MzIsMHhhOSwweDA4LDB4NmUsMHg0MiwweDA4LDB4MTAsMHgwMiwweDI0LDB4MjAgfX0sCisgezE2LCAweGRhYTAsIDAsIHsweGI5LDB4MDgsMHgyYywweDQwLDB4MTgsMHg5MCwweDgyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYWIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGIzLDB4MjAsMHgyOCwweDQ4LDB4MDgsMHgxMiwweDAyLDB4MDQsMHgwMSwweGIxLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4ZGFjMCwgMCwgezB4NTgsMHgwOCwweDEyLDB4MDIsMHgwNSwweDg5LDB4ODEsMHg0MCwweDJjLDB4NTgsMHgwOCwweDU2LDB4MDYsMHgxNSwweDgwLDB4ODEgfX0sCisgezE2LCAweGRhZDAsIDAsIHsweDQwLDB4MjgsMHg1MCwweDA5LDB4MTQsMHgwMiwweDA1LDB4ODAsMHhiMSwweDQwLDB4MmMsMHg1YSwweDA4LDB4MTQsMHgwMiwweGMyIH19LAorIHsxNiwgMHhkYWUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDY4LDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4ZGFmMCwgMCwgezB4MmUsMHg4NSwweDAzLDB4MjEsMHg0OCwweGY4LDB4MDAsMHgzNiwweDAwLDB4OGUsMHgwNSwweDAyLDB4YTAsMHgwOCwweDgwLDB4MDAgfX0sCisgezE2LCAweGRiMDAsIDAsIHsweDNlLDB4MDAsMHgwZCwweDgwLDB4MGIsMHgxMCwweDA0LDB4ZTAsMHgwMCwweDJjLDB4MDAsMHg0YywweDgwLDB4MDMsMHg0MCwweDAwIH19LAorIHsxNiwgMHhkYjEwLCAwLCB7MHhmMCwweDAwLDB4M2UsMHgwOCwweDBjLDB4MDAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGIyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4MDAsMHhmZCwweDAwLDB4M2UgfX0sCisgezE2LCAweGRiMzAsIDAsIHsweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MDMsMHgzZiwweDQ0LDB4MWYsMHg5MSwweDFiLDB4ZTQsMHg0MCwweGZkIH19LAorIHsxNiwgMHhkYjQwLCAwLCB7MHgwMSwweDNmLDB4NTAsMHgwZSwweDk0LDB4MDMsMHhmNCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhhNiB9fSwKKyB7MTYsIDB4ZGI1MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNCwweDAwLDB4Y2QsMHhhMCwweDcxLDB4NjggfX0sCisgezE2LCAweGRiNjAsIDAsIHsweDhkLDB4OTgsMHgwMywweGQ0LDB4MDAsMHhjZCwweDAwLDB4MzMsMHg2MCwweDBjLDB4OTgsMHg4ZiwweDI3LDB4MjAsMHhjOSwweDQwIH19LAorIHsxNiwgMHhkYjcwLCAwLCB7MHgzZSwweDc4LDB4MGMsMHg5ZSwweDhiLDB4MjcsMHgyMCwweGQxLDB4MTEsMHgzMCwweDYwLDB4OGMsMHg5YywweDAzLDB4MjUsMHgwMCB9fSwKKyB7MTYsIDB4ZGI4MCwgMCwgezB4ZjksMHg0MCwweDNlLDB4NzgsMHgwZiwweDkwLDB4MDMsMHg0NiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiOTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDEwLDB4ODgsMHgwMSwweDIyLDB4MDEsMHgwOCwweDhjLDB4MjIsMHhlOCwweDAwLDB4ODgsMHgwMiwweDJhIH19LAorIHsxNiwgMHhkYmEwLCAwLCB7MHgxNCwweDA4LDB4OGMsMHgwYiwweDIzLDB4OTAsMHg4OCwweGEwLDB4MmUsMHhiMCwweDA4LDB4OGMsMHg0MiwweDIzLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4ZGJiMCwgMCwgezB4YTAsMHgzNiwweDJhLDB4MTgsMHg4YSwweDAyLDB4MjIsMHgwMCwweGI4LDB4YTAsMHgyZSwweDM0LDB4MGIsMHhjYSwweDgyLDB4MGUgfX0sCisgezE2LCAweGRiYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweDgxLDB4NDAsMHgyNCwweDUwIH19LAorIHsxNiwgMHhkYmQwLCAwLCB7MHgwOSwweDE2LDB4ODIsMHhjNCwweDAwLDB4YTksMHgwMCwweDIwLDB4NDAsMHgwOCwweDEyLDB4OTIsMHg1NCwweDA4LDB4ODUsMHgwMCB9fSwKKyB7MTYsIDB4ZGJlMCwgMCwgezB4MmYsMHg0YywweDA5LDB4NTIsMHgxMiwweDE0LDB4ODAsMHg5ZCwweDAwLDB4MjEsMHg1MCwweDA4LDB4NTQsMHgyMiwweDE0LDB4ODAgfX0sCisgezE2LCAweGRiZjAsIDAsIHsweGI1LDB4MDAsMHgyZCwweDQ4LDB4MGIsMHhkMCwweDAyLDB4NDIsMHgwNSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYzAwLCAwLCB7MHgxOCwweDA1LDB4YTQsMHgwMiwweDg5LDB4MDEsMHhhMiwweDQwLDB4NDgsMHg5MCwweDAyLDB4ZTQsMHgwMiwweGE5LDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ZGMxMCwgMCwgezB4NDAsMHg2OCwweDkwLDB4MDIsMHg2NCwweDEwLDB4YWQsMHgwMCwweDJmLDB4NDEsMHgyOCwweDUwLDB4MDIsMHgzNCwweDAwLDB4OGQgfX0sCisgezE2LCAweGRjMjAsIDAsIHsweDQ0LDB4MjcsMHg0MCwweDM5LDB4ZDAsMHgwMiwweDM1LDB4MDAsMHhiZCwweDE0LDB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhkYzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGM0LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4ZGM0MCwgMCwgezB4MmQsMHg5MCwweDAzLDB4ZTcsMHgwMCwweGUxLDB4ZTAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDBiLDB4NjQsMHgwMiwweGM5LDB4MDggfX0sCisgezE2LCAweGRjNTAsIDAsIHsweDNjLDB4NTAsMHgwYywweDkwLDB4MDIsMHgyNiwweDAyLDB4ZDksMHhjMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MTMsMHgyNywweDAwIH19LAorIHsxNiwgMHhkYzYwLCAwLCB7MHhmOSwweDIwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGM3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDIsMHhmOSwweDAwLDB4MzgsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4ODAsMHhkOSwweGEwLDB4M2MgfX0sCisgezE2LCAweGRjODAsIDAsIHsweDQwLDB4MGYsMHgxMCwweDAzLDB4YTQsMHgwMCwweGQ5LDB4MTAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzQsMHg5MiwweGY5IH19LAorIHsxNiwgMHhkYzkwLCAwLCB7MHgyMSwweDNjLDB4NDAsMHgyZSwweDkwLDB4MGYsMHhlNiwweDgwLDB4ZjksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9fSwKKyB7MTYsIDB4ZGNhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDQwLDB4ZTgsMHgxMCwweDNlLDB4MDQgfX0sCisgezE2LCAweGRjYjAsIDAsIHsweDRlLDB4ODAsMHgwMywweDIwLDB4ODAsMHhkOCwweDYwLDB4M2EsMHgwMiwweDBjLDB4ODAsMHgxMywweDIwLDB4MDAsMHhmOCwweDQwIH19LAorIHsxNiwgMHhkY2MwLCAwLCB7MHgzNiwweDEwLDB4MmQsMHg4MCwweDAzLDB4YTAsMHgwOCwweGU4LDB4NDAsMHgzMiwweDAwLDB4MGQsMHgwMCwweDAzLDB4MjEsMHgwMiB9fSwKKyB7MTYsIDB4ZGNkMCwgMCwgezB4YzgsMHg0MCwweGIyLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjZTAsIDAsIHsweDI4LDB4MTEsMHgzYiwweDEwLDB4ODYsMHgwMSwweDJmLDB4YTAsMHgwZCwweGEwLDB4MDIsMHgzOCwweDAwLDB4OGUsMHhlMCwweDIzIH19LAorIHsxNiwgMHhkY2YwLCAwLCB7MHhhMiwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiYSwweDgwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4MiB9fSwKKyB7MTYsIDB4ZGQwMCwgMCwgezB4MDAsMHgyYSwweDgwLDB4MjgsMHhhMCwweDAyLDB4MmEsMHgwNCwweDhhLDB4ODAsMHgyMiwweGEwLDB4MGIsMHg2MCwweDAyLDB4Y2EgfX0sCisgezE2LCAweGRkMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDMsMHg4MCwweGEyLDB4MDAsMHgyYywweGEwIH19LAorIHsxNiwgMHhkZDIwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgyZSwweDAwLDB4OTIsMHgwMCwweDI4LDB4YzAsMHgyOCwweDMwLDB4MDIsMHgyYywweDAwLDB4YjMsMHg4MCB9fSwKKyB7MTYsIDB4ZGQzMCwgMCwgezB4MjQsMHhjMCwweDA5LDB4MzAsMHgwYSwweDhjLDB4MDAsMHhhMywweDAwLDB4NjAsMHhjMCwweDA4LDB4MzAsMHgwYSwweDRjLDB4MDAgfX0sCisgezE2LCAweGRkNDAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGUwLDB4MGIsMHgyMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZDUwLCAwLCB7MHhhMCwweDAxLDB4MTAsMHgwMCwweDg2LDB4MDAsMHgyZCwweGMwLDB4MDksMHgzYSwweDAyLDB4MzUsMHgwMCwweDg2LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4ZGQ2MCwgMCwgezB4YzAsMHgwOCwweDczLDB4MDIsMHgxMCwweDAwLDB4YmYsMHg4OCwweDIxLDB4MDAsMHgwOCwweDcwLDB4MDIsMHgxYywweDA4LDB4OGYgfX0sCisgezE2LCAweGRkNzAsIDAsIHsweDAwLDB4MmIsMHhjMCwweDA4LDB4MjAsMHgxMiwweDVlLDB4MjAsMHg4NywweDg4LDB4MjEsMHg4MywweDBiLDB4NjAsMHgwMiwweGU4IH19LAorIHsxNiwgMHhkZDgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhlNSwweDgxLDB4M2QsMHhhMCB9fSwKKyB7MTYsIDB4ZGQ5MCwgMCwgezB4MmMsMHg3YSwweDBiLDB4MWUsMHgwMCwweGQ0LDB4ODAsMHgzOCwweGUwLDB4MGMsMHhmYSwweDBiLDB4MWUsMHgwMCwweGY2LDB4ODAgfX0sCisgezE2LCAweGRkYTAsIDAsIHsweDM0LDB4ZTAsMHgwZCwweDI4LDB4MDMsMHg4YSwweDAwLDB4ZTYsMHg4MCwweDMxLDB4MjAsMHgwYywweDc4LDB4MDMsMHg3YSwweDA0IH19LAorIHsxNiwgMHhkZGIwLCAwLCB7MHhjZSwweDg0LDB4MzEsMHhlMCwweDRmLDB4NzgsMHg0MywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGRjMCwgMCwgezB4MDgsMHgwZCwweDgwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjUsMHgyMywweGU0LDB4MDAsMHhmMCwweDA0LDB4MzYgfX0sCisgezE2LCAweGRkZDAsIDAsIHsweDQwLDB4MGYsMHhiNiwweDg3LDB4ZTAsMHgwMCwweGYyLDB4MDAsMHgzZSwweDAwLDB4MWYsMHhhMCwweDBiLDB4ZTgsMHgwMCwweGZhIH19LAorIHsxNiwgMHhkZGUwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZSwweGEwLDB4MDMsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZGRmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4Y2MsMHg4MCwweDMzLDB4YTAgfX0sCisgezE2LCAweGRlMDAsIDAsIHsweDBjLDB4ZmMsMHgwMywweDNlLDB4MDAsMHhmYywweDgwLDB4MzcsMHhlMCwweDBmLDB4YjksMHgyMSwweDNlLDB4MDAsMHhmZCwweDgyIH19LAorIHsxNiwgMHhkZTEwLCAwLCB7MHgzMywweGUwLDB4MmMsMHhmOCwweDAzLDB4N2UsMHgxMCwweGRmLDB4ODQsMHgzZCwweGUwLDB4MGMsMHhmOCwweDAzLDB4ZjYsMHgwMCB9fSwKKyB7MTYsIDB4ZGUyMCwgMCwgezB4ZmQsMHg4MCwweDNmLDB4NjAsMHgwYywweGU4LDB4MjMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlMzAsIDAsIHsweGE4LDB4MTEsMHg5OCwweDQwLDB4ODQsMHgxMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxMCwweDgwLDB4YjQsMHgwMCwweDIxIH19LAorIHsxNiwgMHhkZTQwLCAwLCB7MHhjOCwweDBiLDB4N2EsMHgwMiwweDEwLDB4MDAsMHhmZCwweDAwLDB4MjEsMHgwNCwweDA4LDB4NzAsMHgwMiwweDFjLDB4NDIsMHg4NyB9fSwKKyB7MTYsIDB4ZGU1MCwgMCwgezB4MDAsMHgyZCwweGM0LDB4NDgsMHg2MSwweDAyLDB4ZDYsMHg4MCwweGI1LDB4MDAsMHgyZiwweDA0LDB4MDgsMHg2MSwweDgyLDB4MmEgfX0sCisgezE2LCAweGRlNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDgxLDB4MDAsMHgyMSwweDgwIH19LAorIHsxNiwgMHhkZTcwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgxYywweDEwLDB4YmMsMHgwOCwweDI1LDB4ODAsMHg0YiwweDMwLDB4MGUsMHgxYywweDAwLDB4YjQsMHgwMCB9fSwKKyB7MTYsIDB4ZGU4MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MjAsMHgwMiwweDU4LDB4MDAsMHg5NiwweDAwLDB4MmYsMHgwMCwweDBhLDB4NzAsMHgwMiwweGQwLDB4ODAgfX0sCisgezE2LCAweGRlOTAsIDAsIHsweGI0LDB4MTgsMHgyZCwweDQwLDB4MDksMHhmOCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZWEwLCAwLCB7MHgyMCwweDE0LDB4YzgsMHgwMiwweDgwLDB4MDAsMHhhMCwweGMwLDB4MDgsMHgzMCwweDIyLDB4MGIsMHhjMCwweGIwLDB4YzAsMHgyMiB9fSwKKyB7MTYsIDB4ZGViMCwgMCwgezB4ODAsMHgwYiwweDMwLDB4MDIsMHgwMCwweDAwLDB4YTAsMHgwNCwweDIyLDB4MDAsMHgyOCwweGEwLDB4MDIsMHgyYiwweDAwLDB4OGEgfX0sCisgezE2LCAweGRlYzAsIDAsIHsweDAwLDB4MmMsMHgwMCwweDA4LDB4YTAsMHgwNiwweGMwLDB4MDAsMHhiMCwweGMyLDB4MmMsMHgwMCwweDA5LDB4YmMsMHgxYSwweDA4IH19LAorIHsxNiwgMHhkZWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGEwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHhjMCB9fSwKKyB7MTYsIDB4ZGVlMCwgMCwgezB4MGMsMHhmMCwweDBiLDB4MjYsMHgwMCwweGY5LDB4YzAsMHgzNiwweDAwLDB4MGYsMHhmMCwweDEzLDB4MmMsMHgxMCwweGJiLDB4NDAgfX0sCisgezE2LCAweGRlZjAsIDAsIHsweGYyLDB4YzAsMHgwOCwweDkwLDB4MDMsMHg2NywweDAwLDB4ZDksMHg4MCwweDNlLDB4YzAsMHgwOCwweDkwLDB4MDIsMHhlYywweDAwIH19LAorIHsxNiwgMHhkZjAwLCAwLCB7MHhmYiwweGQwLDB4M2UsMHhjMCwweDI5LDB4OGMsMHgwMCwweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGYxMCwgMCwgezB4ODAsMHgwMCwweGUwLDB4MDAsMHhmOCwweDQ0LDB4M2MsMHhkMCwweDJmLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmOSwweDIwLDB4M2UgfX0sCisgezE2LCAweGRmMjAsIDAsIHsweDQwLDB4MGYsMHgzMCwweDAzLDB4ZTAsMHgwMCwweGZiLDB4MDgsMHgzZSwweDAwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHg0MiwweGY5IH19LAorIHsxNiwgMHhkZjMwLCAwLCB7MHgxMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlZSwweDAwLDB4ZmIsMHgwMCwweDNlLDB4ODAsMHgwZSwweDgyLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4ZGY0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlMCwweDA4LDB4ZmMsMHg4MCwweDMyLDB4ZTQgfX0sCisgezE2LCAweGRmNTAsIDAsIHsweDBlLDB4ZjAsMHgwMywweDc0LDB4MDAsMHhmYywweDAwLDB4M2YsMHg0MCwweDBjLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHhmZSwweDAwIH19LAorIHsxNiwgMHhkZjYwLCAwLCB7MHgzZiwweGMwLDB4MGQsMHhjMSwweDAzLDB4MjAsMHgyMCwweGNjLDB4MTAsMHgzMywweDAwLDB4MGMsMHhkMSwweDAzLDB4NTgsMHgwMCB9fSwKKyB7MTYsIDB4ZGY3MCwgMCwgezB4Y2UsMHgwMCwweDJmLDB4YzAsMHgwZiwweGQxLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmODAsIDAsIHsweDgxLDB4NDQsMHg2MiwweDAwLDB4YjAsMHg0MCwweDJhLDB4ZjEsMHgwOCwweGIwLDB4MTIsMHgyNiwweDA4LDB4YjgsMHhjOCwweDJlIH19LAorIHsxNiwgMHhkZjkwLCAwLCB7MHg3MCwweDBhLDB4YjAsMHgwMiwweDIwLDB4MDAsMHhiYSwweDAwLDB4MmUsMHgwMCwweDI4LDB4ODAsMHgwMywweDIyLDB4NDAsMHg4OCB9fSwKKyB7MTYsIDB4ZGZhMCwgMCwgezB4MDEsMHgyMCwweDAwLDB4MGEsMHg4MCwweDAyLDB4MjgsMHgwMCwweDhhLDB4MDEsMHgyZSwweDgwLDB4OGIsMHg5MCwweDAyLDB4MjAgfX0sCisgezE2LCAweGRmYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjYsMHgwMCwweGI4LDB4MjgsMHgyMiwweDQyIH19LAorIHsxNiwgMHhkZmMwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHg2NiwweDAwLDB4YjgsMHg4MCwweDJlLDB4MzAsMHg4OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YjksMHgwMSB9fSwKKyB7MTYsIDB4ZGZkMCwgMCwgezB4MmUsMHhjMCwweDg4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MGMgfX0sCisgezE2LCAweGRmZTAsIDAsIHsweDg5LDB4MDEsMHgyZSwweDQwLDB4MWIsMHg4MCwweDAyLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZmYwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweGIwLDB4MDAsMHgyOCwweGMwLDB4MjgsMHgzMCwweDAyLDB4MDAsMHgwMCwweGIwLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4ZTAwMCwgMCwgezB4NDAsMHgwYSwweDMwLDB4MDIsMHgwMCwweDAwLDB4YjEsMHgwMCwweDJjLDB4MDAsMHgwOCwweDEwLDB4MGEsMHgwNCwweDAwLDB4ODEgfX0sCisgezE2LCAweGUwMTAsIDAsIHsweDAxLDB4YTIsMHhjMCwweDA4LDB4MDAsMHgwYSwweDA0LDB4ODAsMHg4MSwweDAwLDB4MmMsMHgwMCwweDFiLDB4MDAsMHgwYSwweDAyIH19LAorIHsxNiwgMHhlMDIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4ZTAzMCwgMCwgezB4MGUsMHhmMCwweDIzLDB4NjQsMHgwOCwweGY4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHhmMCwweDAzLDB4MmMsMHgwMCwweGY4LDB4MDAgfX0sCisgezE2LCAweGUwNDAsIDAsIHsweDNlLDB4YzAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAyLDB4YzgsMHgwNCwweDMyLDB4MDAsMHgxYywweDkwLDB4MDMsMHgyMCwweDAwIH19LAorIHsxNiwgMHhlMDUwLCAwLCB7MHhjOCwweDAxLDB4M2UsMHg0MSwweDlmLDB4OTAsMHg0MywweDQwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTA2MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDAsMHhmYywweDBjLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4MTAsMHhmNCwweDAwLDB4M2YgfX0sCisgezE2LCAweGUwNzAsIDAsIHsweDAwLDB4MGYsMHhmNCwweDIzLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGUsMHhjMCwweDAzLDB4YjAsMHgwMCwweGZjIH19LAorIHsxNiwgMHhlMDgwLCAwLCB7MHgwMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhlMSwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDEsMHgxZiwweDUwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZTA5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MGQsMHhmMCwweGQwLDB4ZmYsMHgyMCwweDNlLDB4ZDAgfX0sCisgezE2LCAweGUwYTAsIDAsIHsweDhlLDB4YjAsMHgwMywweGVjLDB4YTAsMHhkYiwweDI4LDB4M2UsMHhjYywweDBjLDB4YjMsMHgwMywweGFkLDB4MDgsMHhmOCwweDNjIH19LAorIHsxNiwgMHhlMGIwLCAwLCB7MHgzMiwweDIzLDB4MGUsMHg0OCwweDIzLDB4N2EsMHgwMCwweGZkLDB4OTQsMHgzZiwweGUwLDB4MGYsMHg3OCwweDMzLDB4ZWUsMHgwOCB9fSwKKyB7MTYsIDB4ZTBjMCwgMCwgezB4YmYsMHg4MCwweDNmLDB4ZTQsMHgwZiwweGY5LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwZDAsIDAsIHsweGEwLDB4MDAsMHhlYywweGM4LDB4YmYsMHhkMSwweDBmLDB4YzgsMHgwYywweDI2LDB4ODIsMHhmZCwweDI0LDB4OGYsMHgwMCwweDJlIH19LAorIHsxNiwgMHhlMGUwLCAwLCB7MHg5OSwweDBhLDB4ZjIsMHg2MiwweDFkLDB4ZDAsMHg5OSwweDYxLDB4MjIsMHg3MSwweDg4LDB4ODgsMHgwMiwweGFjLDB4MDAsMHhiOCB9fSwKKyB7MTYsIDB4ZTBmMCwgMCwgezB4MjIsMHgyZSwweDIwLDB4NGIsMHg4OCwweDAzLDB4YTAsMHgwMCwweDgwLDB4MDAsMHgyZSwweDA4LDB4MGIsMHg4MCwweDIzLDB4NjAgfX0sCisgezE2LCAweGUxMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwNCwweGIzLDB4MDMsMHgwYywweGNjIH19LAorIHsxNiwgMHhlMTEwLCAwLCB7MHgwYSwweDEzLDB4MTIsMHhjYywweDE0LDB4YTMsMHgwZSwweDBjLDB4NTgsMHgwYSwweDMzLDB4MDIsMHg4YywweDEwLDB4YTMsMHgyMCB9fSwKKyB7MTYsIDB4ZTEyMCwgMCwgezB4YTAsMHgwYSwweDE4LDB4OTAsMHgwMiwweDQ4LDB4YTAsMHhiMCwweDIwLDB4MjQsMHg4MCwweDBhLDB4MjAsMHgwMiwweGNjLDB4MDkgfX0sCisgezE2LCAweGUxMzAsIDAsIHsweGExLDB4MDAsMHgyYywweDgwLDB4MGIsMHgzMiwweDQyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTQwLCAwLCB7MHhlMCwweDExLDB4YWMsMHgyMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4NGIsMHg4MCwweGEyLDB4ZWMsMHgwMCwweGFiLDB4MDAsMHg0ZSB9fSwKKyB7MTYsIDB4ZTE1MCwgMCwgezB4NDYsMHgyYSwweGIwLDB4MDIsMHgyYywweDA0LDB4OWIsMHg4MCwweDJhLDB4NjAsMHg4YSwweDljLDB4MDIsMHhhYywweDAwLDB4YjkgfX0sCisgezE2LCAweGUxNjAsIDAsIHsweDgxLDB4MmUsMHg0MCwweDBiLDB4OTgsMHgwMiwweGEzLDB4MDAsMHg4YSwweDAwLDB4MmUsMHg0MCwweDBiLDB4ODAsMHgwNCwweGYwIH19LAorIHsxNiwgMHhlMTcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGUxLDB4MDAsMHhmYiwweDA0LDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ZTE4MCwgMCwgezB4MGUsMHhiNCwweDAzLDB4ZWMsMHgwYSwweGRiLDB4MDIsMHgyZSwweGQxLDB4MGUsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4ODIgfX0sCisgezE2LCAweGUxOTAsIDAsIHsweDMyLDB4MjgsMHgxZSwweDBjLDB4MDMsMHg2OCwweDAwLDB4YjksMHgwMCwweDNlLDB4NDAsMHg0ZiwweGIwLDB4NDMsMHhlZCwweDAwIH19LAorIHsxNiwgMHhlMWEwLCAwLCB7MHhlYSwweDAwLDB4M2UsMHg0MCwweDBmLDB4ODAsMHgwMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFiMCwgMCwgezB4YzAsMHgwMSwweGI4LDB4MTgsMHhmZiwweDAyLDB4MWYsMHhjMCwweDBjLDB4ZTIsMHgwMywweGZjLDB4MDAsMHhkZiwweDAzLDB4MmYgfX0sCisgezE2LCAweGUxYzAsIDAsIHsweGExLDB4MGYsMHg3MCwweDAzLDB4ZmMsMHgwNCwweGFiLDB4MDQsMHgzNywweDQyLDB4MmQsMHhkMCwweDAyLDB4N2MsMHgwMCwweGZjIH19LAorIHsxNiwgMHhlMWQwLCAwLCB7MHgwMCwweDNmLDB4ODAsMHgwZiwweGMwLDB4MDMsMHhiMCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4ODAsMHgwZiwweGYwLDB4MDMsMHg3OCB9fSwKKyB7MTYsIDB4ZTFlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhOSwweDAwLDB4ZGIsMHgwMCwweDNjLDB4YzAgfX0sCisgezE2LCAweGUxZjAsIDAsIHsweDJlLDB4OTQsMHgwMSwweDZjLDB4MTEsMHhjYiwweDAwLDB4YjgsMHhjMCwweDBjLDB4YjAsMHgwMywweDZjLDB4MDAsMHhlYiwweDAxIH19LAorIHsxNiwgMHhlMjAwLCAwLCB7MHgzMiwweDEwLDB4MDcsMHg5MiwweDAzLDB4YTgsMHgwMCwweGY4LDB4MDAsMHgzZSwweDBjLDB4MDcsMHhhMiwweDAzLDB4YWQsMHgwMCB9fSwKKyB7MTYsIDB4ZTIxMCwgMCwgezB4ZDgsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyMjAsIDAsIHsweGM4LDB4MDUsMHgyOCwweDA4LDB4YmYsMHgwMCwweDJmLDB4YzAsMHg4OCwweDgwLDB4MDIsMHgzYywweDA4LDB4ZWYsMHgwMywweDIyIH19LAorIHsxNiwgMHhlMjMwLCAwLCB7MHgwMCwweDBkLDB4ZjUsMHgwMCwweDNjLDB4MDAsMHg4YiwweDgyLDB4MjIsMHg2MCwweDAzLDB4OWMsMHgwMiwweDJjLDB4MTAsMHhiOSB9fSwKKyB7MTYsIDB4ZTI0MCwgMCwgezB4YjAsMHgyMiwweGYwLDB4MGIsMHg5MCwweDAyLDB4MjAsMHgwMCwweGJiLDB4MDAsMHgyMiwweGUyLDB4MGQsMHhiMCwweDAyLDB4ZjIgfX0sCisgezE2LCAweGUyNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDAsMHgwMCwweGIzLDB4MDIsMHgyYywweGMwIH19LAorIHsxNiwgMHhlMjYwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHg2YywweDAwLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOSwweDM0LDB4MDQsMHhlYywweDAwLDB4YTgsMHgwMCB9fSwKKyB7MTYsIDB4ZTI3MCwgMCwgezB4MjIsMHhmMCwweDBiLDB4MDAsMHgwMiwweDg4LDB4MDAsMHhiMywweDAwLDB4MjgsMHhlMCwweDBiLDB4MTQsMHgwMiwweGEwLDB4MDAgfX0sCisgezE2LCAweGUyODAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjkwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwNCwweGI3LDB4ODAsMHgyZCwweGU4LDB4MDgsMHg3OCwweDAyLDB4MGUsMHhjOCwweGE3LDB4OTAsMHgyMSB9fSwKKyB7MTYsIDB4ZTJhMCwgMCwgezB4YTgsMHgxOSwweDM4LDB4NTIsMHg5ZSwweGMxLDB4ODcsMHg4MCwweDIxLDB4ZTIsMHgwYiwweGQ5LDB4ODIsMHg5ZSwweDAwLDB4YjYgfX0sCisgezE2LCAweGUyYjAsIDAsIHsweGEwLDB4MmQsMHgyMCwweDBiLDB4NjgsMHgwMiwweDFlLDB4MDAsMHhiNCwweGMxLDB4MjEsMHgyMCwweDA5LDB4NDgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhlMmMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDBjLDB4ODAsMHhiMywweDEwLDB4M2UsMHhlMCB9fSwKKyB7MTYsIDB4ZTJkMCwgMCwgezB4MGUsMHgzYSwweDA3LDB4NGUsMHgwMCwweGNiLDB4OTAsMHgzYSwweDYxLDB4MGQsMHgzOCwweDAzLDB4Y2UsMHhkMSwweGUxLDB4OTggfX0sCisgezE2LCAweGUyZTAsIDAsIHsweDMwLDB4YTQsMHg4ZiwweDEwLDB4MDMsMHg4OCwweDAwLDB4YmEsMHhhMSwweDNjLDB4ODQsMHgwNywweDAwLDB4MDMsMHg4MiwweGQ0IH19LAorIHsxNiwgMHhlMmYwLCAwLCB7MHhkMSwweDAwLDB4NzIsMHg4MCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTMwMCwgMCwgezB4NDAsMHgxNSwweGJjLDB4MDQsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzIsMHgyMywweGVjLDB4YjAsMHhmZiwweDAwLDB4MzIgfX0sCisgezE2LCAweGUzMTAsIDAsIHsweDA0LDB4MDYsMHhiNCwweDIzLDB4N2MsMHgxMCwweGJmLDB4MDAsMHgzZSwweDg0LDB4MGYsMHhiMCwweDAzLDB4N2MsMHg0MCwweGZmIH19LAorIHsxNiwgMHhlMzIwLCAwLCB7MHgwMCwweDMzLDB4NDAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmUsMHgwMCwweGJmLDB4NDAsMHgwZiwweGM4LDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZTMzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlNCwweDAwLDB4Y2IsMHgzMywweDNlLDB4YzggfX0sCisgezE2LCAweGUzNDAsIDAsIHsweDRjLDB4YjAsMHgwMywweGFjLDB4OTAsMHhkYiwweGEwLDB4MzYsMHhjMCwweDBlLDB4YmEsMHg0MywweDZjLDB4MDAsMHhjOSwweDAwIH19LAorIHsxNiwgMHhlMzUwLCAwLCB7MHgzZSwweDQwLDB4MGYsMHgwMCwweDBmLDB4MjgsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHgxOCwweDQzLDB4NjAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM2MCwgMCwgezB4ZmEsMHgwMCwweDNlLDB4NDAsMHg0ZiwweDA4LDB4MGIsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzNzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDEwLDB4MDcsMHgwOCwweDJjLDB4Y2EsMHgwOCwweDIwLDB4MDIsMHgxYywweDIwLDB4ODcsMHgyOCwweDNmIH19LAorIHsxNiwgMHhlMzgwLCAwLCB7MHg4MCwweDhhLDB4ZjAsMHgwMiwweDFkLDB4NDAsMHg4NywweDA0LDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhiNiB9fSwKKyB7MTYsIDB4ZTM5MCwgMCwgezB4MDAsMHgyZCwweDgwLDB4MGIsMHg2MCwweDAzLDB4MWMsMHgwMCwweGI1LDB4MDAsMHgyZCwweDgwLDB4MGIsMHg3MCwweDAyLDB4MTIgfX0sCisgezE2LCAweGUzYTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDg3LDB4YTAsMHgyZCwweGU0IH19LAorIHsxNiwgMHhlM2IwLCAwLCB7MHgwYSwweDU4LDB4MDIsMHgxZSwweDAxLDB4ODMsMHg5MCwweDIxLDB4NzAsMHgwYiwweDc5LDB4MDIsMHg5ZSwweDAxLDB4ODUsMHhjMCB9fSwKKyB7MTYsIDB4ZTNjMCwgMCwgezB4MmQsMHhlMCwweDRiLDB4NTgsMHgxMiwweDFhLDB4MDAsMHhiNiwweDgwLDB4MmQsMHgyMCwweDBiLDB4NDgsMHgwMiwweDUyLDB4MDAgfX0sCisgezE2LCAweGUzZDAsIDAsIHsweGI0LDB4ODAsMHgyZCwweDIwLDB4MGIsMHg0OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2UwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4ODgsMHgzNiwweDAyLDB4MGMsMHgwMiwweDgzLDB4MDAsMHg2YyB9fSwKKyB7MTYsIDB4ZTNmMCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MGEsMHhhYywweDAwLDB4OWIsMHhlMCwweDZjLDB4YzgsMHgwYiwweDMyLDB4MDIsMHgwYywweDAxLDB4YjMgfX0sCisgezE2LCAweGU0MDAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MTAsMHhiMywweDQwLDB4MmMsMHhjMCwweDBiLDB4M2MsMHg4MiwweDEyIH19LAorIHsxNiwgMHhlNDEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI4LDB4MDIsMHhjYSwweDAwLDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4ZTQyMCwgMCwgezB4MGUsMHhlNCwweDhiLDB4MjgsMHgwMCwweGNhLDB4MDAsMHgzMywweDk1LDB4MGYsMHhhMCwweDA3LDB4YTgsMHgwMiwweGNlLDB4NDAgfX0sCisgezE2LCAweGU0MzAsIDAsIHsweDNmLDB4YjAsMHgwZiwweGU0LDB4ODIsMHgyOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MjMsMHg2OCwweDAwIH19LAorIHsxNiwgMHhlNDQwLCAwLCB7MHhmYSwweDQwLDB4M2UsMHg4MSwweDRmLDB4YTQsMHhlMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4ODAsMHhmMCwweDAwLDB4M2MsMHgwMCwweDJmLDB4MDAsMHgwMiwweDYwLDB4MDAsMHhlOCwweDAwLDB4M2MgfX0sCisgezE2LCAweGU0NjAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDAxLDB4MjAsMHgwMCwweGU4LDB4MDQsMHg1ZSwweDA0LDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGZjIH19LAorIHsxNiwgMHhlNDcwLCAwLCB7MHgwMSwweDNmLDB4MTAsMHgwZiwweGM0LDB4MDMsMHhiMCwweDAwLDB4ZmMsMHgwOSwweDNmLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ZTQ4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YTksMHgyMCwweDM2LDB4NDAgfX0sCisgezE2LCAweGU0OTAsIDAsIHsweDBlLDB4OTAsMHgwMywweDQ0LDB4MDQsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDQsMHhjOSwweDAwIH19LAorIHsxNiwgMHhlNGEwLCAwLCB7MHgzMiwweDQwLDB4OGYsMHg5MCwweDBiLDB4ZTQsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQ0LDB4MGUsMHg5OCwweDAzLDB4ZTYsMHgwMCB9fSwKKyB7MTYsIDB4ZTRiMCwgMCwgezB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0YzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgxOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgwMCwweDJlIH19LAorIHsxNiwgMHhlNGQwLCAwLCB7MHg0MCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHhkOSwweDA0LDB4MjIsMHg0MCwweDBiLDB4MWMsMHgwYiwweDY0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZTRlMCwgMCwgezB4OTQsMHgyYywweDUwLDB4MDgsMHg5YywweDAyLDB4ZTQsMHgxNCwweGI5LDB4OTAsMHgwZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGU0ZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMiwweDg5LDB4MDAsMHgyNiwweDQwIH19LAorIHsxNiwgMHhlNTAwLCAwLCB7MHg0YSwweDkwLDB4MDIsMHg2NCwweDAwLDB4OTksMHgwNCwweDJlLDB4NDAsMHgwOCwweDk4LDB4ODIsMHhlNCwweDAwLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4ZTUxMCwgMCwgezB4NmEsMHg0MCwweDBhLDB4OTIsMHg4MiwweGU0LDB4MDAsMHhiZCwweDAxLDB4MmYsMHg1MCwweDEyLDB4ZDYsMHgwMiwweGY0LDB4NDAgfX0sCisgezE2LCAweGU1MjAsIDAsIHsweGJkLDB4MDAsMHgwZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHgyMCwweDQ4LDB4MDgsMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjIsMHgyYyB9fSwKKyB7MTYsIDB4ZTU0MCwgMCwgezB4NDgsMHhhOCwweDEyLDB4MDYsMHhjNCwweDkwLDB4OTEsMHgyMCwweDI4LDB4NTAsMHgwYiwweDkwLDB4MDIsMHg0NSwweDAwLDB4YjUgfX0sCisgezE2LCAweGU1NTAsIDAsIHsweDQwLDB4NmQsMHg0MCwweDA4LDB4NTAsMHgxMiwweGQ0LDB4MDQsMHhiNSwweDAyLDB4MmQsMHg0MCwweDBiLDB4NTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhlNTYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhjOCwweDAwLDB4MzYsMHgxNCB9fSwKKyB7MTYsIDB4ZTU3MCwgMCwgezB4MGEsMHg4NSwweDAzLDB4NDEsMHg0MCwweGQ4LDB4NTAsMHgyZSwweDE0LDB4MGMsMHg4NSwweDAzLDB4YzEsMHg0MCwweGM4LDB4NTAgfX0sCisgezE2LCAweGU1ODAsIDAsIHsweGJhLDB4MDAsMHgwZSwweDgwLDB4MjMsMHhlMCwweDAwLDB4NzgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDA0IH19LAorIHsxNiwgMHhlNTkwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YzAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVhMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4NDAsMHhkOSwweDEwLDB4M2UsMHg0NCwweDA3LDB4ZjEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwLDB4M2YgfX0sCisgezE2LCAweGU1YjAsIDAsIHsweDQ0LDB4YWYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzNywweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhlNWMwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweGEwLDB4ZjksMHgyOCwweDNlLDB4NGEsMHgwZiwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4ZTVkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweGQ0LDB4ZmQsMHhhMiwweDNhLDB4NzAgfX0sCisgezE2LCAweGU1ZTAsIDAsIHsweDhjLDB4OWUsMHgwMywweDI2LDB4ODAsMHhjOSwweGEwLDB4MzIsMHg2OCwweDBjLDB4ZGIsMHg0MywweDI3LDB4ODAsMHg5ZCwweGEyIH19LAorIHsxNiwgMHhlNWYwLCAwLCB7MHhiNywweDQwLDB4MGYsMHg1MCwweDAzLDB4NjUsMHgwMCwweGZkLDB4MDAsMHgzZiwweGMxLDB4MDcsMHhkMCwweDAzLDB4ZjUsMHgwNCB9fSwKKyB7MTYsIDB4ZTYwMCwgMCwgezB4ZmQsMHg0MCwweDJmLDB4YzAsMHgwYywweGQwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2MTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDg4LDB4YjgsMHg1MCwweDIyLDB4MzgsMHgwOCwweDhlLDB4MDAsMHhhMiwweGEwLDB4ODgsMHhlOCwweDIyIH19LAorIHsxNiwgMHhlNjIwLCAwLCB7MHgzOCwweDQ4LDB4ODgsMHgwMywweDYyLDB4MTAsMHhhOCwweGU4LDB4M2MsMHgwMCwweDBiLDB4ODAsMHgwMywweDYyLDB4ODAsMHhiOCB9fSwKKyB7MTYsIDB4ZTYzMCwgMCwgezB4MDEsMHgyZSwweDgwLDB4MGIsMHg4MCwweDIxLDB4YTIsMHgwMCwweGIwLDB4ODQsMHgyZSwweDJhLDB4MjgsMHg4YSwweDgyLDB4Y2UgfX0sCisgezE2LCAweGU2NDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg0MCwweGIxLDB4MDAsMHgyOCwweDU4IH19LAorIHsxNiwgMHhlNjUwLCAwLCB7MHg4MCwweDEzLDB4NDAsMHgwNSwweDAwLDB4ODEsMHg0MCwweDIwLDB4NTIsMHgyOCwweDE2LDB4MDIsMHg4NSwweDgwLDB4OWIsMHhjMiB9fSwKKyB7MTYsIDB4ZTY2MCwgMCwgezB4NjQsMHg0MSwweDhiLDB4OTgsMHgwMiwweDA0LDB4MDAsMHhiMSwweDA5LDB4MmMsMHg0MCwweDFiLDB4MTAsMHgyMCwweGM0LDB4MDAgfX0sCisgezE2LCAweGU2NzAsIDAsIHsweGIxLDB4MDAsMHgyYywweDQwLDB4NDgsMHgxMCwweDAyLDB4YzIsMHgwNSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjgwLCAwLCB7MHgxOCwweDE1LDB4YTUsMHg4NCwweGI5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDAxLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ZTY5MCwgMCwgezB4NTAsMHgwOCwweDkwLDB4NDIsMHg2NCwweDAwLDB4YTksMHgxMCwweGFlLDB4NTgsMHgwMywweDk4LDB4MDIsMHg2NCwweDAwLDB4YjkgfX0sCisgezE2LCAweGU2YTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0NiwweGE0LDB4MTAsMHhiOSwweDAwLDB4MmUsMHg0MSwweDA4LDB4OTAsMHgwMiwweGM2IH19LAorIHsxNiwgMHhlNmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU3LDB4MDAsMHhmOSwweDAwLDB4MmEsMHg0MCB9fSwKKyB7MTYsIDB4ZTZjMCwgMCwgezB4MmMsMHg5NCwweDBiLDB4MjQsMHgwMiwweGM5LDB4MDAsMHhiMiwweDQ0LDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwNCwweGQ5LDB4ODAgfX0sCisgezE2LCAweGU2ZDAsIDAsIHsweGI2LDB4NDEsMHg4ZiwweDE4LDB4MDMsMHgyNCwweDAwLDB4ZjksMHg2MCwweDNlLDB4NDAsMHgwZiwweDk2LDB4MDMsMHhlNCwweDAwIH19LAorIHsxNiwgMHhlNmUwLCAwLCB7MHhmOSwweDgwLDB4M2UsMHg0MiwweDhjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZmMCwgMCwgezB4MjgsMHgwMSwweGE2LDB4MDAsMHhmMSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MWMsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGU3MDAsIDAsIHsweDQwLDB4OGYsMHg5MCwweDIzLDB4YzQsMHgxMCwweGY5LDB4MDAsMHhiZSwweDQwLDB4MGYsMHg5MCwweDBiLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhlNzEwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwNywweDkwLDB4MjMsMHhlNCwweDAwLDB4ZjksMHgyMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4ZTcyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4ZjgsMHgwMCwweGJlLDB4MDAgfX0sCisgezE2LCAweGU3MzAsIDAsIHsweDBlLDB4ODQsMHgwMywweDIwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4MDAsMHg4MywweDIwLDB4MDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHhlNzQwLCAwLCB7MHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzNiwweDEwLDB4MGYsMHg4MCwweDQzLDB4ZTAsMHgwOCB9fSwKKyB7MTYsIDB4ZTc1MCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3NjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIyLDB4ODAsMHg0OCwweGEwLDB4MDMsMHg2OCwweDAwLDB4YWEsMHgwMCwweDJhIH19LAorIHsxNiwgMHhlNzcwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMywweDY4LDB4MDAsMHg4MiwweDAwLDB4MmYsMHg4MCwweDA4LDB4ZTYsMHgwMiwweDI4LDB4MDQsMHhiZSB9fSwKKyB7MTYsIDB4ZTc4MCwgMCwgezB4NDAsMHgyMywweDgwLDB4MGIsMHhlOCwweDAyLDB4ZWEsMHgwMCwweGJlLDB4MDEsMHgyMiwweDgwLDB4MGIsMHhlMCwweDAyLDB4Y2EgfX0sCisgezE2LCAweGU3OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMSwweDkzLDB4MDEsMHgyMCwweGMxIH19LAorIHsxNiwgMHhlN2EwLCAwLCB7MHgwYSwweDMwLDB4MDIsMHgwYywweDAwLDB4YTMsMHgwMCwweDIwLDB4YzAsMHg4OCwweDM4LDB4NDIsMHgwYywweDAwLDB4YTMsMHgwMCB9fSwKKyB7MTYsIDB4ZTdiMCwgMCwgezB4MjQsMHhjMCwweDBhLDB4M2UsMHg0MiwweDhjLDB4MDAsMHhiMiwweDRjLDB4MjQsMHhlMCwweDRiLDB4MzgsMHgwMiwweGM0LDB4NDEgfX0sCisgezE2LCAweGU3YzAsIDAsIHsweGIzLDB4MDAsMHgyMiwweGMwLDB4MGIsMHgxMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2QwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwMCwweGI3LDB4MDAsMHgyMCwweGM5LDB4NDgsMHg3MCwweDAyLDB4ZGMsMHg0MCwweGE3LDB4MTQsMHgyYyB9fSwKKyB7MTYsIDB4ZTdlMCwgMCwgezB4YzgsMHgyOCwweDMwLDB4ODIsMHg1YywweGMxLDB4ODUsMHgwMCwweDJkLDB4ZTAsMHgyYSwweGYwLDB4MTIsMHgxYywweDgwLDB4YjcgfX0sCisgezE2LCAweGU3ZjAsIDAsIHsweGEwLDB4MjEsMHg4MiwweDBiLDB4NzAsMHg4MiwweGQ0LDB4MTEsMHhiNiwweDgwLDB4MjEsMHg0MCwweDRiLDB4NTAsMHgwMiwweGU4IH19LAorIHsxNiwgMHhlODAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4ODAsMHhkNSwweDgwLDB4MjksMHhlYSB9fSwKKyB7MTYsIDB4ZTgxMCwgMCwgezB4NGUsMHgzYSwweDA3LDB4MGUsMHg4MCwweGUzLDB4YjAsMHgzMSwweGZjLDB4MGMsMHg0OCwweDAzLDB4MGUsMHg0MSwweGU3LDB4ODAgfX0sCisgezE2LCAweGU4MjAsIDAsIHsweDNkLDB4ZTAsMHgwZSwweDc4LDB4MDMsMHg5ZSwweDgwLDB4ZjQsMHhjNCwweDM1LDB4ZTAsMHgwZiwweDc4LDB4MjcsMHhkZSwweDAwIH19LAorIHsxNiwgMHhlODMwLCAwLCB7MHhmNSwweDgwLDB4YjEsMHhlMCwweDBmLDB4NTgsMHgwMywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHgzMSwweDA0LDB4M2EsMHhjNCwweDBmLDB4YjUsMHg5MywweDZkLDB4MDgsMHhmYiwweDQwLDB4M2EgfX0sCisgezE2LCAweGU4NTAsIDAsIHsweGM4LDB4NjMsMHg4MCwweDIzLDB4ZWMsMHg5OCwweGU5LDB4MDAsMHgzZSwweGMwLDB4MGQsMHhiMCwweDQzLDB4ZWMsMHgwMCwweGYzIH19LAorIHsxNiwgMHhlODYwLCAwLCB7MHg4MCwweDNlLDB4NDAsMHg0ZiwweGEwLDB4MDMsMHhlYywweDAwLDB4ZjgsMHg2OCwweDNlLDB4NDAsMHg4ZiwweDk4LDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZTg3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDYwLDB4ZWIsMHg5MCwweDNlLDB4ZTQgfX0sCisgezE2LCAweGU4ODAsIDAsIHsweDBmLDB4YjgsMHgwMCwweDNmLDB4NDAsMHhjYiwweDgwLDB4N2YsMHhlMCwweDBlLDB4ZmIsMHgwMywweDJlLDB4NDAsMHhjYiwweDgwIH19LAorIHsxNiwgMHhlODkwLCAwLCB7MHgzZiwweGUwLDB4MGYsMHg3OSwweDQzLDB4MmUsMHg2MCwweGNhLDB4ODEsMHgzMywweDY0LDB4OGYsMHhkOSwweDAzLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4ZThhMCwgMCwgezB4ZmYsMHg4MSwweDMzLDB4ZTAsMHgwZiwweGQ5LDB4OGIsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4YjAsIDAsIHsweGE4LDB4MDEsMHg5YywweDAwLDB4ODcsMHg4MSwweDE5LDB4ZTQsMHgwYiwweGZhLDB4MTMsMHg1ZSwweDgwLDB4ODcsMHhiMiwweDJkIH19LAorIHsxNiwgMHhlOGMwLCAwLCB7MHhlYywweDBkLDB4NzksMHgwMSwweDllLDB4MDAsMHhkNSwweDkwLDB4MmQsMHhmOCwweDBiLDB4NzgsMHgwMywweDdlLDB4MDgsMHhhYiB9fSwKKyB7MTYsIDB4ZThkMCwgMCwgezB4OTEsMHgyOSwweDg1LDB4MGIsMHg1MSwweDAyLDB4ZGMsMHg0OCwweGI2LDB4NDAsMHgyMSwweDQwLDB4MGIsMHg1MCwweDAyLDB4MmEgfX0sCisgezE2LCAweGU4ZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHgxNCwweGI1LDB4MjAsMHg2ZCwweGM4IH19LAorIHsxNiwgMHhlOGYwLCAwLCB7MHgwYiwweDcyLDB4MDIsMHg1YywweDgwLDB4ODcsMHgyMCwweDY5LDB4YzAsMHg4OCwweDUzLDB4MDIsMHhjYywweDgxLDB4OTcsMHg1MCB9fSwKKyB7MTYsIDB4ZTkwMCwgMCwgezB4MmQsMHhjOCwweDBiLDB4ZjcsMHgwYSwweGRjLDB4YzAsMHg4NCwweDAxLDB4MjEsMHg0NCwweDFiLDB4NzAsMHgyMiwweGRjLDB4MDAgfX0sCisgezE2LCAweGU5MTAsIDAsIHsweGI1LDB4MDAsMHgyMSwweGM0LDB4MGIsMHg1MCwweDg2LDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTIwLCAwLCB7MHgyMCwweDE0LDB4Y2YsMHgzMCwweDkxLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzNCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4ZTkzMCwgMCwgezB4ZjIsMHgwYiwweDEwLDB4MjIsMHgwYywweDAwLDB4OTEsMHgwMCwweDJjLDB4YzgsMHgwYiwweDE4LDB4MGEsMHhjZCwweDAxLDB4YTMgfX0sCisgezE2LCAweGU5NDAsIDAsIHsweDAwLDB4MjgsMHg2MCwweDBiLDB4MjEsMHgwMiwweGNlLDB4MjAsMHhiOCwweDQwLDB4YTAsMHg1NCwweDBiLDB4MTgsMHgwMiwweDA4IH19LAorIHsxNiwgMHhlOTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxMSwweGJkLDB4MDAsMHhmOSwweDAwLDB4MmYsMHhjMCB9fSwKKyB7MTYsIDB4ZTk2MCwgMCwgezB4MGYsMHhmNCwweDAyLDB4N2MsMHgxMiwweGNmLDB4MDMsMHgzZiwweGMyLDB4MGUsMHhiMCwweDAzLDB4ZmMsMHgwNCwweDliLDB4MDIgfX0sCisgezE2LCAweGU5NzAsIDAsIHsweDJlLDB4ZjIsMHgwZiwweGE0LDB4MGIsMHhkYywweDAwLDB4Y2UsMHgwMCwweGIwLDB4YzgsMHg4ZiwweGE0LDB4MDMsMHhlZiwweDAwIH19LAorIHsxNiwgMHhlOTgwLCAwLCB7MHhmOCwweDgwLDB4MzIsMHhmNSwweDFmLDB4ZGQsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4NDAsMHhlOSwweDAwLDB4M2EsMHhjMCwweDBmLDB4YjEsMHgwMywweGNjLDB4MDAsMHhmMywweDAwLDB4M2UgfX0sCisgezE2LCAweGU5YTAsIDAsIHsweGMwLDB4MGQsMHhiNCwweDA5LDB4ZWMsMHgxOCwweGY5LDB4MTAsMHgzZSwweDEwLDB4NGYsMHhiMSwweDBhLDB4NmMsMHg4MCwweGY5IH19LAorIHsxNiwgMHhlOWIwLCAwLCB7MHg4OSwweDM2LDB4ODIsMHgwYiwweGE2LDB4MDMsMHhlYywweDUwLDB4ZjksMHg1MCwweDNlLDB4YzAsMHgxZiwweDkwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4ZTljMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmQsMHhhMCwweDNkLDB4YzAgfX0sCisgezE2LCAweGU5ZDAsIDAsIHsweDBjLDB4NzAsMHg4MywweDJjLDB4MDAsMHhlZiwweDAyLDB4MzUsMHhjMCwweDBkLDB4ZTIsMHgwMywweGZjLDB4MDQsMHhmZiwweDAyIH19LAorIHsxNiwgMHhlOWUwLCAwLCB7MHgyZCwweGUwLDB4OGUsMHhmMCwweDAzLDB4M2MsMHgxMCwweGRjLDB4MDAsMHgzZiwweDgwLDB4MGMsMHhkOCwweDAzLDB4ZmMsMHgwMCB9fSwKKyB7MTYsIDB4ZTlmMCwgMCwgezB4ZGUsMHgxOCwweDMzLDB4ZjAsMHg0ZiwweGQwLDB4MDMsMHhjMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhMDAsIDAsIHsweDgxLDB4MDAsMHg2YywweDAwLDB4YjksMHgwMCwweDJlLDB4YzAsMHg0YywweGIwLDB4MDMsMHg2YywweDAwLDB4OGIsMHgwMiwweDM2IH19LAorIHsxNiwgMHhlYTEwLCAwLCB7MHhjMCwweDBkLDB4YWMsMHgxMiwweGVjLDB4MDAsMHg3OSwweDAwLDB4MmUsMHgzMCwweDBkLDB4M2QsMHg0MiwweGFjLDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZWEyMCwgMCwgezB4ODgsMHgxYSwweDEwLDB4MGQsMHg4NiwweDAyLDB4ZWUsMHgwNCwweGJiLDB4NDAsMHgyMiwweGUwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGVhMzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMSwweGI5LDB4MDAsMHgyZSwweGMwIH19LAorIHsxNiwgMHhlYTQwLCAwLCB7MHgwOCwweGIwLDB4NDIsMHhhYywweDAwLDB4MGIsMHgwNSwweDI2LDB4YzAsMHgwOSwweDk0LDB4MjAsMHhlYywweDAwLDB4YjksMHg4MCB9fSwKKyB7MTYsIDB4ZWE1MCwgMCwgezB4NmUsMHhjNCwweDg4LDB4YjAsMHg4MiwweDJjLDB4MDAsMHg5YiwweDgyLDB4MmUsMHg0MiwweDA4LDB4ODEsMHgwMiwweGU0LDB4ODAgfX0sCisgezE2LCAweGVhNjAsIDAsIHsweGI4LDB4MDAsMHgyMiwweGMxLDB4MGIsMHg5MCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgxMCwweGIxLDB4MjUsMHgyYywweGNhLDB4MDgsMHgzNCwweDQ2LDB4Y2MsMHgwOCwweDgzLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4ZWE4MCwgMCwgezB4YzIsMHgwYiwweDAyLDB4NTIsMHhjYywweDgxLDB4ODMsMHgwMCwweDJjLDB4MDAsMHgxOSwweGIyLDB4NDIsMHhhYywweDgwLDB4ODEgfX0sCisgezE2LCAweGVhOTAsIDAsIHsweDA4LDB4MjgsMHg4MCwweDA5LDB4MDAsMHgwMiwweGM0LDB4NDAsMHhiMSwweDAwLDB4MjAsMHhjMCwweDBiLDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhlYWEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDZjLDB4MDAsMHhiOSwweDAwLDB4M2YsMHhkMCB9fSwKKyB7MTYsIDB4ZWFiMCwgMCwgezB4MDgsMHhmNiwweDA3LDB4YmMsMHhjMiwweGFmLDB4MzAsMHg3NSwweGRjLDB4MGQsMHgxNiwweDAyLDB4ZmMsMHhlMCwweGI5LDB4NTAgfX0sCisgezE2LCAweGVhYzAsIDAsIHsweDNlLDB4Y2MsMHgwYywweGIwLDB4MjMsMHgyYywweDEwLDB4ZDksMHgwMCwweDNlLDB4MDAsMHgwYywweDkwLDB4MDMsMHhlYywweDAwIH19LAorIHsxNiwgMHhlYWQwLCAwLCB7MHhkZSwweDAxLDB4MzIsMHhjMCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFlMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmZCwweDEwLDB4M2YsMHhjYSwweDJlLDB4ZjYsMHgwMywweDZkLDB4OTQsMHg5ZiwweDMwLDB4M2EgfX0sCisgezE2LCAweGVhZjAsIDAsIHsweGM5LDB4MGMsMHg4MywweDkzLDB4ZmMsMHg4MCwweGZmLDB4MTEsMHg3ZSwweDE5LDB4MGIsMHhiMSwweDAzLDB4ZmMsMHg0MCwweGZkIH19LAorIHsxNiwgMHhlYjAwLCAwLCB7MHgwOCwweDNiLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhmYywweDgwLDB4NzcsMHgwMCwweGJmLDB4YzAsMHgwZiwweDUwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZWIxMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmYywweDAwLDB4ZjQsMHg5NCwweDM3LDB4YzggfX0sCisgezE2LCAweGViMjAsIDAsIHsweDBkLDB4NjksMHg2MywweDdjLDB4MTAsMHhmZiwweDYyLDB4MzcsMHhjMCwweDBkLDB4YjQsMHgwMywweDdjLDB4NjAsMHhkNCwweDgwIH19LAorIHsxNiwgMHhlYjMwLCAwLCB7MHgzZiwweDQwLDB4MGYsMHg0OCwweDIzLDB4MzIsMHgwMCwweGNlLDB4MDAsMHhiZiwweDQwLDB4OGYsMHhkMSwweDAzLDB4MzAsMHhlMCB9fSwKKyB7MTYsIDB4ZWI0MCwgMCwgezB4ZmYsMHgzMCwweDNiLDB4NjAsMHgwZiwweGQ4LDB4MDMsMHhiMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViNTAsIDAsIHsweDgwLDB4MTAsMHhlZCwweDIwLDB4YjgsMHgyNCwweDIzLDB4ZjQsMHg0OSwweGEyLDB4MDIsMHgzZiwweDQwLDB4OGYsMHg1MSwweDIzIH19LAorIHsxNiwgMHhlYjYwLCAwLCB7MHhkYSwweDA4LDB4ZjYsMHgxMiwweDNkLDB4ODAsMHg5YiwweDgwLDB4MmUsMHg0OSwweDRiLDB4ODAsMHgwMywweDQwLDB4MDAsMHhkOSB9fSwKKyB7MTYsIDB4ZWI3MCwgMCwgezB4MDEsMHgyMiwweDc0LDB4MGIsMHhkNSwweDAyLDB4MjEsMHgwMCwweGJmLDB4NDIsMHgyZSwweDQ5LDB4MGIsMHg5YywweDAyLDB4ZTAgfX0sCisgezE2LCAweGViODAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2QsMHg4MCwweGI4LDB4MjAsMHgyOCwweGMxIH19LAorIHsxNiwgMHhlYjkwLCAwLCB7MHgxYiwweGEwLDB4MDIsMHg0YywweDAwLDB4OTMsMHgyMCwweDJjLDB4ZDgsMHgwYiwweDM0LDB4MDIsMHhjYywweDAwLDB4OTAsMHgwMSB9fSwKKyB7MTYsIDB4ZWJhMCwgMCwgezB4MmMsMHhjNiwweDFhLDB4YTAsMHgwMiwweDY4LDB4MDgsMHg4MywweDAwLDB4YTQsMHg0MCwweDBiLDB4MTAsMHgwMiwweDAwLDB4MDAgfX0sCisgezE2LCAweGViYjAsIDAsIHsweGIzLDB4MTAsMHgyOCwweDQyLDB4MGIsMHgxNCwweDAyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmMwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweGI4LDB4NjAsMHgyYSwweGMwLDB4MWIsMHhhMCwweDhlLDB4YWMsMHgwMSwweDliLDB4MDUsMHgyNiB9fSwKKyB7MTYsIDB4ZWJkMCwgMCwgezB4YzAsMHgwMywweGIwLDB4NDIsMHg2YywweDAwLDB4OWIsMHg4MCwweDJlLDB4YzAsMHgwMywweGEwLDB4MDYsMHg2OSwweDAwLDB4OTkgfX0sCisgezE2LCAweGViZTAsIDAsIHsweDgwLDB4YWEsMHhjMCwweDBiLDB4OTAsMHgwMiwweDYzLDB4MDAsMHgzYiwweDAwLDB4MmUsMHg1OCwweDRiLDB4OTAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhlYmYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMSwweGVjLDB4MDQsMHhmOCwweDgwLDB4YmEsMHhjMCB9fSwKKyB7MTYsIDB4ZWMwMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4NmMsMHgxMCwweGRiLDB4MDMsMHgzNiwweGMwLDB4OGYsMHhiMCwweDAzLDB4ZWMsMHgwOCwweGQ4LDB4ODAgfX0sCisgezE2LCAweGVjMTAsIDAsIHsweDdlLDB4ZTAsMHgwNiwweDg4LDB4MDMsMHg0MSwweDA4LDB4Y2IsMHhhMCwweDNlLDB4NjQsMHgwZiwweDkwLDB4MGIsMHgyYSwweDAwIH19LAorIHsxNiwgMHhlYzIwLCAwLCB7MHg3YiwweDAwLDB4M2EsMHgwMSwweDBmLDB4OTAsMHgwMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWMzMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmYywweDg0LDB4MzIsMHhjMCwweDBjLDB4ZjksMHgwMywweDVjLDB4MTAsMHhlZiwweDAwLDB4M2IgfX0sCisgezE2LCAweGVjNDAsIDAsIHsweGMwLDB4MGMsMHg3MCwweDAzLDB4OWMsMHgwMCwweGVjLDB4MDEsMHgzZiwweGU0LDB4NGYsMHhkMSwweDAzLDB4ZjEsMHgwMCwweGYzIH19LAorIHsxNiwgMHhlYzUwLCAwLCB7MHgwNSwweDMzLDB4NjAsMHgwZiwweGQwLDB4MDMsMHhiYywweDA0LDB4ZmYsMHgwMCwweDNmLDB4MjEsMHgwZiwweGQwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4ZWM2MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4YzgsMHg0MCwweDNhLDB4YzYgfX0sCisgezE2LCAweGVjNzAsIDAsIHsweDBkLDB4YjQsMHgwMywweDZjLDB4MDAsMHhmMywweDAwLDB4MzQsMHhjMCwweDBlLDB4YjAsMHgwMywweDZjLDB4MDAsMHhlOSwweDEwIH19LAorIHsxNiwgMHhlYzgwLCAwLCB7MHgzYSwweGMwLDB4MGYsMHg4NCwweDAzLDB4MmMsMHg2MCwweGNiLDB4MDAsMHgzMiwweDYwLDB4MGMsMHg1MCwweDAzLDB4NjEsMHgwMCB9fSwKKyB7MTYsIDB4ZWM5MCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4OTAsMHgwZSwweDkwLDB4YTMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjYTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAyLDB4ODgsMHgwMSwweDAxLDB4ZjAsMHgyMCwweGIwLDB4MDEsMHgzZSwweDAwLDB4M2YsMHgwMCwweDMzIH19LAorIHsxNiwgMHhlY2IwLCAwLCB7MHhjMCwweDBiLDB4ZjAsMHgzMiwweDNjLDB4MDgsMHg4OSwweDgwLDB4MjIsMHhjMCwweDAxLDB4MTUsMHgxMiwweGFjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4ZWNjMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4NDgsMHhkYiwweDAyLDB4MmYsMHg0MCwweDhmLDB4MDAsMHgyZSwweDAxLDB4MDgsMHhkNCwweDgwLDB4MzIgfX0sCisgezE2LCAweGVjZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDA4LDB4MDAsMHgwOCwweGYwIH19LAorIHsxNiwgMHhlY2UwLCAwLCB7MHgwOCwweDAwLDB4MTIsMHg0YywweDAwLDB4MzMsMHgwMSwweDI0LDB4YzAsMHg0YSwweDMwLDB4MDIsMHg0YywweDAwLDB4YTAsMHgyMCB9fSwKKyB7MTYsIDB4ZWNmMCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MTAsMHgwMiwweDQ2LDB4MDQsMHg4MywweDA0LDB4MjAsMHhjMCwweDI5LDB4MTgsMHgwMiwweDA0LDB4NDAgfX0sCisgezE2LCAweGVkMDAsIDAsIHsweGIzLDB4MDAsMHgyYywweDQwLDB4MGEsMHgxYywweDQyLDB4YjEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMSwweDhkLDB4ODAsMHgyMSwweGUwLDB4MTgsMHhjOCwweDAyLDB4MWUsMHgwMCwweGIzLDB4YTAsMHgyMSB9fSwKKyB7MTYsIDB4ZWQyMCwgMCwgezB4ZTAsMHgxYiwweDM4LDB4MDIsMHgwZSwweDAxLDB4YTcsMHg4MCwweDIxLDB4ZTAsMHgwOSwweGQ4LDB4NDAsMHhkNiwweDQwLDB4ODcgfX0sCisgezE2LCAweGVkMzAsIDAsIHsweDgwLDB4MDEsMHhlMCwweDA5LDB4NTksMHgwMiwweDE2LDB4MDAsMHg5NywweDg0LDB4MmQsMHg2MCwweDA4LDB4NTgsMHg0MCwweDAwIH19LAorIHsxNiwgMHhlZDQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDJjLDB4NDAsMHhjMCwweDAwLDB4MzgsMHhjNCB9fSwKKyB7MTYsIDB4ZWQ1MCwgMCwgezB4MGMsMHgzMCwweDI3LDB4NGMsMHgyMCwweGYzLDB4MDEsMHgzNCwweGMxLDB4MGUsMHgzYSwweDAzLDB4NGMsMHhjNCwweGUwLDB4MDAgfX0sCisgezE2LCAweGVkNjAsIDAsIHsweDE4LDB4YzgsMHgwZiwweDM0LDB4MDMsMHg0NCwweDQwLDB4YzMsMHgwMCwweDMwLDB4YzAsMHgwZCwweDkwLDB4MDMsMHgyZSwweDAwIH19LAorIHsxNiwgMHhlZDcwLCAwLCB7MHhmMywweDAwLDB4M2UsMHg0MCwweDBlLDB4MTAsMHgwMSwweDlhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ4MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmOSwweDAwLDB4MGUsMHhkNCwweDBlLDB4YjAsMHgwMywweGVjLDB4MjAsMHhmYiwweDIwLDB4M2YgfX0sCisgezE2LCAweGVkOTAsIDAsIHsweGM0LDB4MGYsMHhmMSwweDAzLDB4ZWMsMHg2MCwweGRiLDB4MTAsMHgzZiwweGMwLDB4NGYsMHhmMCwweDAzLDB4YTQsMHg0NiwweGZiIH19LAorIHsxNiwgMHhlZGEwLCAwLCB7MHgwMCwweGJkLDB4YzAsMHgwZSwweGQwLDB4MGIsMHhiNCwweDAwLDB4ZWYsMHg0OCwweDNmLDB4NDAsMHgwZiwweDUwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZWRiMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZjgsMHgwMCwweDMyLDB4ZDQgfX0sCisgezE2LCAweGVkYzAsIDAsIHsweDBmLDB4ODAsMHgwMywweGFkLDB4MDAsMHhlYiwweDA4LDB4MjIsMHhkMiwweDBjLDB4YjYsMHgwMywweDZjLDB4MDAsMHhmMiwweDgwIH19LAorIHsxNiwgMHhlZGQwLCAwLCB7MHgzNiwweGMwLDB4MGUsMHhhMCwweDAzLDB4MjgsMHgxMCwweGNiLDB4MDAsMHhiMiwweGMwLDB4MGYsMHhkNiwweDAzLDB4MjgsMHgxMCB9fSwKKyB7MTYsIDB4ZWRlMCwgMCwgezB4ZmIsMHgyMCwweDNlLDB4NDAsMHg0ZiwweDk5LDB4MTMsMHgyYiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkZjAsIDAsIHsweDQ4LDB4MTEsMHg5ZCwweDEwLDB4YjQsMHgwMSwweDIxLDB4YzEsMHg4YiwweGMwLDB4MDIsMHgxYywweGEwLDB4YmYsMHgwNCwweDI3IH19LAorIHsxNiwgMHhlZTAwLCAwLCB7MHhjOCwweDA4LDB4NzUsMHgwMiwweDFjLDB4YzAsMHhiNiwweDAwLDB4MjEsMHhjMCwweDA4LDB4ZjAsMHg0MiwweDE4LDB4MTAsMHg4ZiB9fSwKKyB7MTYsIDB4ZWUxMCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MGIsMHg1NCwweGEyLDB4MWMsMHgwMCwweGI3LDB4MDQsMHgyZCwweDQxLDB4MGIsMHg1MiwweDAyLDB4MTIgfX0sCisgezE2LCAweGVlMjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg4MCwweGI2LDB4ODgsMHhhNSwweGUwIH19LAorIHsxNiwgMHhlZTMwLCAwLCB7MHgwYiwweDc4LDB4MTIsMHg5ZSwweDgxLDB4YTcsMHg5MCwweDI1LDB4ZTQsMHg4OCwweDc4LDB4MDIsMHgxZSwweDgwLDB4YmYsMHg4MCB9fSwKKyB7MTYsIDB4ZWU0MCwgMCwgezB4MjQsMHg2MCwweDBiLDB4NjgsMHgwMiwweDFlLDB4MDAsMHg4NywweDg0LDB4NjEsMHhlMCwweDBhLDB4MWEsMHgwYSwweDFhLDB4MDAgfX0sCisgezE2LCAweGVlNTAsIDAsIHsweGI3LDB4YTAsMHgyZCwweGUwLDB4MGIsMHhkYSwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGJhLDB4YzAsMHhhNCwweGMwLDB4MGIsMHgzNCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4ZWU3MCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MGUsMHgyYywweDAwLDB4YjMsMHg5OCwweDIwLDB4NjAsMHgwOSwweDMzLDB4MDIsMHgyYywweDAwLDB4YTMgfX0sCisgezE2LCAweGVlODAsIDAsIHsweGM4LDB4MjAsMHhjMCwweDBiLDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhmMCwweDBiLDB4MTAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhlZTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmZSwweDgwLDB4MzYsMHg4MSB9fSwKKyB7MTYsIDB4ZWVhMCwgMCwgezB4MGIsMHhlMCwweDAzLDB4YTgsMHgwMCwweGVhLDB4MDAsMHhiMiwweDgwLDB4MDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweGZlLDB4MDAgfX0sCisgezE2LCAweGVlYjAsIDAsIHsweDM2LDB4YTAsMHgxZiwweGU4LDB4MTMsMHgzYiwweDgyLDB4Y2UsMHhlMCwweDIyLDB4ODAsMHg4ZSwweGEwLDB4MDMsMHgzOCwweDAwIH19LAorIHsxNiwgMHhlZWMwLCAwLCB7MHhiYSwweDAwLDB4M2YsMHhhMiwweDBmLDB4YTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVkMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDIwLDB4M2EsMHgxMCwweDA3LDB4ODAsMHgwMywweGMxLDB4MDAsMHhmOCwweDAwLDB4MzggfX0sCisgezE2LCAweGVlZTAsIDAsIHsweDAwLDB4MmYsMHg4MCwweDAzLDB4YTAsMHgwMSwweGY4LDB4NDIsMHgzZSwweDA1LDB4MGUsMHg4MCwweDBiLDB4ZTAsMHg4MCwweGQ4IH19LAorIHsxNiwgMHhlZWYwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MGIsMHhkMiB9fSwKKyB7MTYsIDB4ZWYwMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzksMHgwMCwweDNhLDB4NTAgfX0sCisgezE2LCAweGVmMTAsIDAsIHsweDhmLDB4OTAsMHg4MywweGE0LDB4MDIsMHhkMSwweDAwLDB4YjIsMHg0MCwweDRjLDB4OTAsMHgyMywweDI0LDB4MDgsMHhjOSwweDAxIH19LAorIHsxNiwgMHhlZjIwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGMxLDB4MDAsMHgzMiwweDQwLDB4MGYsMHgxNCwweDBhLDB4MjUsMHgyMCB9fSwKKyB7MTYsIDB4ZWYzMCwgMCwgezB4ZTksMHgwMCwweDNlLDB4NDIsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmNDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDBhLDB4ODksMHgwMCwweDIyLDB4NzAsMHgwYiwweDkwLDB4MTIsMHgyNSwweDgwLDB4YzksMHgwMCwweDIyIH19LAorIHsxNiwgMHhlZjUwLCAwLCB7MHg0MCwweDBhLDB4OTAsMHgwMywweDY0LDB4MDAsMHg4OSwweDIwLDB4MmMsMHg0MCwweDBhLDB4OTAsMHgwYSwweDI0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZWY2MCwgMCwgezB4YzEsMHgzMiwweDQwLDB4MGIsMHg5OCwweDAyLDB4MDYsMHgwMCwweDg5LDB4OTAsMHgyZSwweDQwLDB4MGIsMHg5NCwweDEyLDB4ZTAgfX0sCisgezE2LCAweGVmNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MDQsMHgwMCwweDg5LDB4MDAsMHg2YSwweDQyIH19LAorIHsxNiwgMHhlZjgwLCAwLCB7MHgwYSwweDEwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweGEyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgyNCwweDAwLDB4MDksMHgwMCB9fSwKKyB7MTYsIDB4ZWY5MCwgMCwgezB4MmUsMHg0MCwweDU4LDB4MTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDgwLDB4YWEsMHg2MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDQgfX0sCisgezE2LCAweGVmYTAsIDAsIHsweGE5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5NCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmIwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MDAsMHg2MCwweDQ4LDB4MGIsMHgxMCwweDAyLDB4MDQsMHg4MSwweDgxLDB4MjAsMHg2MCB9fSwKKyB7MTYsIDB4ZWZjMCwgMCwgezB4NDgsMHgwYSwweDEyLDB4MDIsMHg0NCwweDg4LDB4ODEsMHgwMCwweDBlLDB4NTksMHgwYSwweDE0LDB4MDIsMHgwNSwweDAwLDB4ODEgfX0sCisgezE2LCAweGVmZDAsIDAsIHsweGMwLDB4MjgsMHg1MCwweDQ5LDB4MzAsMHgwMiwweDhjLDB4ODQsMHgwMSwweDYwLDB4MmMsMHg1MCwweDBiLDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhlZmUwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhjMCwweDU0LDB4MmEsMHgwMCB9fSwKKyB7MTYsIDB4ZWZmMCwgMCwgezB4MGUsMHg4NSwweDAzLDB4YTAsMHgwMCwweGM4LDB4NTAsMHgzMiwweDE1LDB4MWUsMHgwNSwweDIyLDB4MjEsMHg0MiwweGM4LDB4MDAgfX0sCisgezE2LCAweGYwMDAsIDAsIHsweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHgwMCwweDA0LDB4YzgsMHgwMCwweDNhLDB4MDAsMHg0ZiwweDg1LDB4MDMsMHhhMSwweDQwIH19LAorIHsxNiwgMHhmMDEwLCAwLCB7MHg2OCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjAyMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4NDAsMHhmZCwweDAzLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDgsMHhlOSwweDEwLDB4M2UgfX0sCisgezE2LCAweGYwMzAsIDAsIHsweDQ1LDB4MGYsMHg5MSwweDEzLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHgzZiwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMiwweGZkIH19LAorIHsxNiwgMHhmMDQwLCAwLCB7MHg0MCwweDMzLDB4NTAsMHgwZiwweGQ0LDB4MjMsMHg3NCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweDU0LDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4ZjA1MCwgMCwgezB4MDIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNCwweDAwLDB4ZjksMHgwMSwweDMzLDB4NmEgfX0sCisgezE2LCAweGYwNjAsIDAsIHsweDA5LDB4OTAsMHgwMywweGI2LDB4MzQsMHhmOSwweGM4LDB4MzIsMHg2NCwweDBjLDB4OWEsMHgwMywweGU2LDB4YTAsMHhkZCwweDAwIH19LAorIHsxNiwgMHhmMDcwLCAwLCB7MHgzYywweDcwLDB4MGYsMHg5MCwweDAzLDB4YTUsMHgwMCwweDg5LDB4ODAsMHgzMywweDMyLDB4MGYsMHhkOCwweDEzLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4ZjA4MCwgMCwgezB4ZmQsMHgwMCwweDcwLDB4NTAsMHgwZiwweGQwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwOTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDgwLDB4YjgsMHhhOCwweDIyLDB4MTAsMHgwOCwweDg4LDB4MDIsMHgyMSwweDAwLDB4YjgsMHhjMCwweDIwIH19LAorIHsxNiwgMHhmMGEwLCAwLCB7MHgzMCwweDBkLDB4OGUsMHg4NywweDgzLDB4ODgsMHg4OCwweDAwLDB4MmUsMHgzNCwweDBiLDB4OGEsMHg4MiwweDIyLDB4ODAsMHhkYyB9fSwKKyB7MTYsIDB4ZjBiMCwgMCwgezB4ZTAsMHgyMiwweDM4LDB4MGIsMHg4MCwweDAyLDB4MjAsMHgwMCwweGY4LDB4YTgsMHgyYSwweDI4LDB4MGIsMHg4MCwweDAyLDB4MGUgfX0sCisgezE2LCAweGYwYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgyMCwweGIxLDB4MDAsMHgyMCwweDQwIH19LAorIHsxNiwgMHhmMGQwLCAwLCB7MHgwYSwweDkyLDB4OTIsMHg4NCwweDExLDB4YjEsMHgyNCwweDY4LDB4NTgsMHgwOSwweDExLDB4MDIsMHhjNCwweDIwLDB4OTEsMHgwMSB9fSwKKyB7MTYsIDB4ZjBlMCwgMCwgezB4MmMsMHg0OCwweDFiLDB4NTAsMHgwMiwweDc0LDB4ODQsMHg5NSwweDQ4LDB4YWMsMHg0OCwweDBiLDB4OTQsMHgwMiwweDA0LDB4MDQgfX0sCisgezE2LCAweGYwZjAsIDAsIHsweGIxLDB4MDIsMHgyNCwweDQ4LDB4MGIsMHgxMCwweDAyLDB4MDIsMHgwNSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTAwLCAwLCB7MHgxOCwweDExLDB4YTQsMHgwMCwweGIxLDB4MjAsMHgyMiwweDQwLDB4MGEsMHg5MCwweDA2LDB4MmMsMHgwMSwweGI5LDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ZjExMCwgMCwgezB4NDAsMHgwOSwweDkwLDB4MDIsMHhhNCwweDAwLDB4OWIsMHgwOCwweDJlLDB4NDgsMHgwYiwweDEyLDB4MWEsMHg3NCwweDAwLDB4OTUgfX0sCisgezE2LCAweGYxMjAsIDAsIHsweDQ1LDB4MmUsMHg2MCwweDAzLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHhmMTMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhmOSwweDgwLDB4MzAsMHg0MCB9fSwKKyB7MTYsIDB4ZjE0MCwgMCwgezB4MGUsMHgxNiwweDAzLDB4YTQsMHgwMCwweGI5LDB4MDQsMHgzMiwweDQwLDB4MGQsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGQ5LDB4NDAgfX0sCisgezE2LCAweGYxNTAsIDAsIHsweDJlLDB4NDAsMHgxZiwweDk4LDB4MDMsMHhlNSwweDgwLDB4ZDksMHgwMCwweGFlLDB4NjAsMHgwNywweDEwLDB4MGIsMHgyNiwweDAxIH19LAorIHsxNiwgMHhmMTYwLCAwLCB7MHhiOSwweDAwLDB4YTYsMHg0MCwweDBmLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE3MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4YmUsMHg0MCwweGFjLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4YjQgfX0sCisgezE2LCAweGYxODAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDYwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHg4MCwweGY5IH19LAorIHsxNiwgMHhmMTkwLCAwLCB7MHgwMCwweDMyLDB4MDAsMHgwZiwweDkwLDB4ODMsMHhlNiwweDg1LDB4ZTEsMHgwMCwweDMyLDB4NDQsMHgwZiwweDEwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4ZjFhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGYxYjAsIDAsIHsweDBmLDB4ODAsMHgxMywweGUwLDB4OTQsMHhlMCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhjOCwweDAwIH19LAorIHsxNiwgMHhmMWMwLCAwLCB7MHgzZSwweDAwLDB4MGQsMHg4MCwweDQzLDB4MjAsMHgwOCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHg0MCB9fSwKKyB7MTYsIDB4ZjFkMCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MDAsMHg0YywweDgwLDB4MjMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIzLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhmYiwweDA0LDB4NmEsMHgwMCwweDIyIH19LAorIHsxNiwgMHhmMWYwLCAwLCB7MHg4MCwweDBhLDB4YTAsMHgwMywweDY4LDB4MGEsMHg4ZSwweDg4LDB4M2EsMHg4MCwweDA4LDB4YTAsMHgwMiwweDA4LDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4ZjIwMCwgMCwgezB4MDAsMHhiNywweDIyLDB4MDMsMHhlNCwweDAyLDB4ZmEsMHgwMCwweDhhLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhlOCwweDAyLDB4Y2EgfX0sCisgezE2LCAweGYyMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHg2MCwweDQxIH19LAorIHsxNiwgMHhmMjIwLCAwLCB7MHgwMywweDMwLDB4MDIsMHhjYywweDQxLDB4YTMsMHgwMCwweDA0LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgyYywweDAwLDB4YTMsMHg4MCB9fSwKKyB7MTYsIDB4ZjIzMCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzgsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4YTAsMHhjMCwweDBiLDB4MzQsMHgwMiwweGNjLDB4ODAgfX0sCisgezE2LCAweGYyNDAsIDAsIHsweGExLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzOCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjUwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg0MCwweGI3LDB4MDAsMHg2MSwweDAwLDB4MGIsMHg3MSwweDAyLDB4ZGMsMHgwMCwweGEzLDB4MDAsMHgyNSB9fSwKKyB7MTYsIDB4ZjI2MCwgMCwgezB4YzgsMHgxOSwweDM4LDB4MDIsMHg1YywweDgwLDB4YTcsMHgwMCwweDBmLDB4ZTgsMHgwOSwweDY0LDB4MjIsMHgxMCwweDAwLDB4YjMgfX0sCisgezE2LCAweGYyNzAsIDAsIHsweDAwLDB4MjUsMHhjOCwweDBiLDB4NjAsMHgwMiwweGYyLDB4MDAsMHg4NSwweDAxLDB4MjMsMHhlOCwweDA4LDB4NzAsMHg4MiwweGU4IH19LAorIHsxNiwgMHhmMjgwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MjAsMHhmZiwweDgwLDB4YTEsMHhhMCB9fSwKKyB7MTYsIDB4ZjI5MCwgMCwgezB4MGYsMHg3YSwweDQyLDB4ZGEsMHgwMCwweGU3LDB4ZTgsMHgzNSwweGYwLDB4MmYsMHg3YiwweDYyLDB4MWUsMHg4MiwweGU2LDB4ODAgfX0sCisgezE2LCAweGYyYTAsIDAsIHsweDFkLDB4ZTAsMHgwZCwweGY4LDB4MGIsMHgxZSwweDAwLDB4ZjcsMHg4MCwweDMxLDB4ZjAsMHgwZiwweDc4LDB4MDMsMHhkZSwweDBjIH19LAorIHsxNiwgMHhmMmIwLCAwLCB7MHhlZiwweDgwLDB4MzEsMHhmOCwweDJjLDB4NzgsMHgwMywweGVhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJjMCwgMCwgezB4MDgsMHgxZCwweGFkLDB4ODQsMHhmYiwweDY4LDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYiwweDAwLDB4ZmEgfX0sCisgezE2LCAweGYyZDAsIDAsIHsweGQ4LDB4MGUsMHhiNSwweDAzLDB4ZWQsMHgwMCwweGRiLDB4MDAsMHgzYSwweGMwLDB4OGUsMHhhMCwweDAzLDB4ZTAsMHgwMCwweGZiIH19LAorIHsxNiwgMHhmMmUwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwYiwweGIwLDB4NDMsMHhjNCwweDA0LDB4ZWYsMHgwMiwweGJmLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZjJmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDQyLDB4YzcsMHgzOCwweDMzLDB4NjQgfX0sCisgezE2LCAweGYzMDAsIDAsIHsweDBlLDB4N2MsMHgwMywweDVlLDB4MDAsMHhkZiwweGEwLDB4MzcsMHhmMCwweDBkLDB4ZjgsMHgwMywweGZmLDB4MjAsMHhjZiwweDgxIH19LAorIHsxNiwgMHhmMzEwLCAwLCB7MHgzMywweGUyLDB4MGMsMHhkOCwweDAzLDB4YmUsMHgwMCwweDdmLDB4YzAsMHgzMywweGUwLDB4MGMsMHhmOSwweDAzLDB4N2UsMHgwMCB9fSwKKyB7MTYsIDB4ZjMyMCwgMCwgezB4ZmQsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzMzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ODcsMHhhMCwweDIxLDB4MTQsMHgwOCwweDcxLDB4MDIsMHgxNCwweDEwLDB4ZDcsMHgyMCwweDM1IH19LAorIHsxNiwgMHhmMzQwLCAwLCB7MHhjMCwweDBjLDB4NzAsMHgwMywweGJjLDB4MDAsMHg4NSwweDA4LDB4MmIsMHhjMCwweDRkLDB4NDYsMHgwMiwweGQxLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4ZjM1MCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAyLDB4MDgsMHg4MCwweGY1LDB4MjAsMHgzZCwweGNhLDB4MGYsMHg1NCwweDAzLDB4ZWEgfX0sCisgezE2LCAweGYzNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgxMSwweDhmLDB4MDEsMHgyMCwweDg0IH19LAorIHsxNiwgMHhmMzcwLCAwLCB7MHgxYSwweGYwLDB4MDIsMHgxOCwweDAwLDB4YTcsMHgzNCwweDY1LDB4YzAsMHgwOSwweDcxLDB4MDIsMHhkYywweDAwLDB4OGUsMHgwMCB9fSwKKyB7MTYsIDB4ZjM4MCwgMCwgezB4MjksMHhjMCwweDA4LDB4NTAsMHgwNiwweDljLDB4MDAsMHhiZiwweDg4LDB4MmQsMHhjNCwweDBhLDB4NjAsMHgyNiwweDU4LDB4MjQgfX0sCisgezE2LCAweGYzOTAsIDAsIHsweDk3LDB4MDAsMHg2ZCwweGMwLDB4OWIsMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2EwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweDhiLDB4NDAsMHgyMCwweDAwLDB4MTgsMHgzMCwweDAyLDB4MDAsMHgwMCwweGJiLDB4MDIsMHgyNCB9fSwKKyB7MTYsIDB4ZjNiMCwgMCwgezB4YzAsMHgwOCwweDMwLDB4MjAsMHhjYywweDAwLDB4ODEsMHhjMCwweDI4LDB4YzAsMHgwYiwweDA0LDB4ODIsMHhlMCwweDEwLDB4YmIgfX0sCisgezE2LCAweGYzYzAsIDAsIHsweGEwLDB4MmMsMHhlMCwweDBhLDB4MjAsMHgwNiwweDAwLDB4MDAsMHhiMywweDAwLDB4MjgsMHhjMCwweDBhLDB4MTAsMHgwMiwweDg4IH19LAorIHsxNiwgMHhmM2QwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhjZiwweDEwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4ZjNlMCwgMCwgezB4MGUsMHhmMCwweDBiLDB4MjQsMHgwMCwweGVmLDB4MDAsMHgzNywweGMwLDB4MGQsMHhmMCwweDAzLDB4ZmMsMHgwNiwweGMxLDB4NTAgfX0sCisgezE2LCAweGYzZjAsIDAsIHsweDNiLDB4YzAsMHgwYywweGI0LDB4MDMsMHhhYywweDAwLDB4ZjgsMHhjMCwweGJlLDB4YzgsMHgyZSwweGIwLDB4MDMsMHg2ZSwweDAxIH19LAorIHsxNiwgMHhmNDAwLCAwLCB7MHhmYiwweDAwLDB4MmQsMHhjMCwweDRiLDB4OTAsMHgwMiwweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQxMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDQsMHhmYiwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGFkLDB4MDAsMHg5YiwweDAwLDB4M2UgfX0sCisgezE2LCAweGY0MjAsIDAsIHsweGMwLDB4MGYsMHgzMCwweDAzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgyZSwweGMwLDB4MDUsMHhiNCwweDAzLDB4ZWQsMHgwMCwweGY4IH19LAorIHsxNiwgMHhmNDMwLCAwLCB7MHg0MCwweDMyLDB4YzAsMHgwOSwweDAwLDB4MDMsMHhlMCwweDkxLDB4ZTMsMHgwMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MTEsMHhlMCB9fSwKKyB7MTYsIDB4ZjQ0MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlYywweDAwLDB4ZWYsMHgwMCwweDMzLDB4MjAgfX0sCisgezE2LCAweGY0NTAsIDAsIHsweDRmLDB4ZjAsMHgwMywweGI0LDB4MDAsMHhlZiwweDAzLDB4M2EsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhkYywweDAwIH19LAorIHsxNiwgMHhmNDYwLCAwLCB7MHgzMSwweGMwLDB4OGQsMHhmOCwweDAzLDB4ZmUsMHgwNCwweGNmLDB4MDAsMHgzMiwweGM4LDB4MGMsMHhmMCwweDBiLDB4MWMsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ3MCwgMCwgezB4Y2YsMHg5MywweDMzLDB4YzAsMHg4YywweDQwLDB4MDIsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0ODAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4YmIsMHgwMCwweGEyLDB4MDQsMHgwYiwweDMwLDB4MDIsMHgwZSwweDAwLDB4YWIsMHgwMCwweDJhIH19LAorIHsxNiwgMHhmNDkwLCAwLCB7MHhjMCwweDA5LDB4YjAsMHgwMywweDZjLDB4MDgsMHhhOCwweGMwLDB4MzYsMHhjMCwweDA4LDB4YmMsMHgwMiwweGVmLDB4MDIsMHhhYiB9fSwKKyB7MTYsIDB4ZjRhMCwgMCwgezB4ZDAsMHgyMCwweGUwLDB4MDgsMHhiOCwweDIyLDB4MjYsMHgxMCwweDhiLDB4MDAsMHgyMiwweGMwLDB4MjAsMHg5YywweDAyLDB4MjAgfX0sCisgezE2LCAweGY0YjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyNiwweDAwIH19LAorIHsxNiwgMHhmNGMwLCAwLCB7MHgwYSwweGIwLDB4MDIsMHhhMiwweDA4LDB4YWIsMHgwMCwweDZhLDB4YzAsMHgwYiwweGIwLDB4MGEsMHgwYywweDAwLDB4OGIsMHg4MCB9fSwKKyB7MTYsIDB4ZjRkMCwgMCwgezB4MjIsMHhjMCwweDA5LDB4YjEsMHgwMiwweGVjLDB4NDAsMHg4OCwweDA4LDB4MjIsMHhjMCwweDA4LDB4YjgsMHgwMiwweDI2LDB4MDAgfX0sCisgezE2LCAweGY0ZTAsIDAsIHsweDhiLDB4MDAsMHgyMiwweGMwLDB4MDgsMHg5OCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGYwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweDAwLDB4MGIsMHhiMCwweDAyLDB4MDAsMHgwMSwweDgzLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ZjUwMCwgMCwgezB4YzAsMHgwOSwweDMwLDB4MDIsMHg0YywweDAwLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDYsMHg0YywweDAwLDB4ODAgfX0sCisgezE2LCAweGY1MTAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4NDEsMHg4MywweDAwLDB4YTIsMHhjMCwweDA4LDB4MTAsMHgwYSwweDgyIH19LAorIHsxNiwgMHhmNTIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHhlZiwweDA4LDB4MjYsMHgwMCB9fSwKKyB7MTYsIDB4ZjUzMCwgMCwgezB4MGUsMHhmMCwweDAyLDB4YTAsMHgwMCwweGU3LDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmNSwweDQzLDB4M2MsMHgwMiwweGRhLDB4MDAgfX0sCisgezE2LCAweGY1NDAsIDAsIHsweDMyLDB4YzAsMHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgwMCwweGIyLDB4YzAsMHgwYywweGEwLDB4MDMsMHgyOCwweDEwIH19LAorIHsxNiwgMHhmNTUwLCAwLCB7MHhjYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4ODAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU2MCwgMCwgezB4YTAsMHgwZCwweGZjLDB4MDAsMHhmYiwweDAwLDB4M2IsMHgwMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmZiwweDAyLDB4M2YgfX0sCisgezE2LCAweGY1NzAsIDAsIHsweGMwLDB4MGQsMHhmMiwweDAzLDB4YmMsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGY3IH19LAorIHsxNiwgMHhmNTgwLCAwLCB7MHgwMCwweDMzLDB4YzAsMHgwZiwweDYwLDB4MDMsMHhmMCwweDg4LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg0ZiwweGQwLDB4MDMsMHg2OCB9fSwKKyB7MTYsIDB4ZjU5MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDQwLDB4ZmMsMHgzMSwweDNiLDB4MDggfX0sCisgezE2LCAweGY1YTAsIDAsIHsweDRmLDB4ZjksMHg0MywweGVmLDB4MDAsMHhkZiwweDMwLDB4MzIsMHgyMSwweDBmLDB4OTQsMHgwNywweDdkLDB4ODAsMHhlZiwweDM4IH19LAorIHsxNiwgMHhmNWIwLCAwLCB7MHgzMiwweDA5LDB4MWMsMHgzOCwweDAzLDB4ZjIsMHgyMSwweGZkLDB4MDAsMHgzMywweGM0LDB4MGMsMHhmMCwweDAyLDB4ZmMsMHgwMCB9fSwKKyB7MTYsIDB4ZjVjMCwgMCwgezB4ZGYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1ZDAsIDAsIHsweDgwLDB4MTAsMHhlYywweDg4LDB4OGIsMHg2MCwweDIyLDB4ZTUsMHgwZSwweGIyLDB4MjIsMHhlYywweDgwLDB4YWYsMHgxMSwweDJhIH19LAorIHsxNiwgMHhmNWUwLCAwLCB7MHgyMCwweDBiLDB4YjEsMHgxMywweGFjLDB4NDgsMHg4YiwweDQ1LDB4MzQsMHhjYywweDQ4LDB4YjAsMHgwMiwweDZiLDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4ZjVmMCwgMCwgezB4ODIsMHgzNiwweDAwLDB4MDgsMHg4OCwweDIyLDB4YzAsMHgwNCwweDg4LDB4MDAsMHhhMiwweDA4LDB4OGIsMHg4OCwweDYyLDB4MjAgfX0sCisgezE2LCAweGY2MDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGExLDB4MzAsMHgyOCwweDAwIH19LAorIHsxNiwgMHhmNjEwLCAwLCB7MHgwYiwweDMyLDB4MDIsMHhjYywweDAwLDB4YTMsMHgyMiwweDJjLDB4MDAsMHg4YiwweDEyLDB4MDYsMHhjOCwweDgwLDB4YTMsMHgwMCB9fSwKKyB7MTYsIDB4ZjYyMCwgMCwgezB4MjAsMHgwMiwweGNhLDB4MzAsMHgwNiwweGM0LDB4MDEsMHhiMSwweDAwLDB4NjgsMHg4MCwweDA5LDB4MjAsMHgwMiwweDg4LDB4MDAgfX0sCisgezE2LCAweGY2MzAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMyLDB4MGIsMHgwMCwweDBhLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweDhiLDB4NjEsMHg2MiwweGMwLDB4MGIsMHhiMiwweDAyLDB4ZTgsMHgwMCwweGFiLDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4ZjY1MCwgMCwgezB4NjEsMHgxYiwweDkwLDB4MDIsMHhhOCwweDAwLDB4YWIsMHgwMCwweDIwLDB4YzAsMHgwYSwweGIwLDB4MDIsMHg2YywweDA0LDB4YmEgfX0sCisgezE2LCAweGY2NjAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDg5LDB4OTAsMHgwMiwweGU2LDB4MDgsMHg5OCwweDAwLDB4MjIsMHgwMCwweDBiLDB4YjAsMHgwMiwweGIwIH19LAorIHsxNiwgMHhmNjcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVlLDB4MDAsMHhmOCwweDAxLDB4M2EsMHgwNCB9fSwKKyB7MTYsIDB4ZjY4MCwgMCwgezB4MGYsMHhhYywweDAzLDB4ZWMsMHg5MCwweGZiLDB4MDIsMHgzZSwweGUwLDB4MGIsMHg5MCwweDQyLDB4NjcsMHg4MCwweGE4LDB4YzQgfX0sCisgezE2LCAweGY2OTAsIDAsIHsweDIyLDB4NDgsMHgyMiwweDg2LDB4MDMsMHhlMSwweDQwLDB4YjgsMHgwMiwweDJhLDB4NDAsMHgyOSwweDkwLDB4MDMsMHhlYywweDAyIH19LAorIHsxNiwgMHhmNmEwLCAwLCB7MHhjOSwweDQ4LDB4MzIsMHg0MCwweDBmLDB4YjAsMHgxMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZiMCwgMCwgezB4ZTAsMHgwMSwweGFjLDB4NDAsMHhmYiwweDAwLDB4MWYsMHhhMiwweDBlLDB4ZjgsMHg4MiwweGZjLDB4MDgsMHhmZiwweDAwLDB4M2YgfX0sCisgezE2LCAweGY2YzAsIDAsIHsweGMwLDB4MGYsMHhmYSwweDQzLDB4OTYsMHg0NCwweGQ0LDB4OTEsMHgzZiwweDQwLDB4MGQsMHhjMCwweDAzLDB4ZmEsMHgwMCwweGZmIH19LAorIHsxNiwgMHhmNmQwLCAwLCB7MHgwOCwweDI1LDB4ODAsMHgwZSwweGUwLDB4MDMsMHhkMCwweDAwLDB4ZWEsMHgwMCwweDNmLDB4ODAsMHgwZiwweGMwLDB4MDMsMHg3OCB9fSwKKyB7MTYsIDB4ZjZlMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZTEsMHgyMCwweDNhLDB4NTAgfX0sCisgezE2LCAweGY2ZjAsIDAsIHsweDBmLDB4OTAsMHgwMywweDJjLDB4MDAsMHhlYiwweDA4LDB4NzYsMHgwNSwweDBlLDB4YjAsMHgyNywweGUwLDB4MTAsMHhlYSwweDQwIH19LAorIHsxNiwgMHhmNzAwLCAwLCB7MHhiMiwweGMwLDB4MGMsMHhhNCwweDQzLDB4MjUsMHgwMCwweGY4LDB4MDAsMHgzMiwweDA4LDB4MGYsMHg4MCwweDQzLDB4ZTgsMHgwMCB9fSwKKyB7MTYsIDB4ZjcxMCwgMCwgezB4ZDEsMHgwOCwweGVlLDB4NDAsMHgwZiwweDAwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3MjAsIDAsIHsweGM4LDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDIyLDB4ZDAsMHgwYiwweDkwLDB4ODIsMHgyYywweDAwLDB4ODcsMHg0MCwweDIyIH19LAorIHsxNiwgMHhmNzMwLCAwLCB7MHg2MCwweDhiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHhkOCwweDUwLDB4MjIsMHhkMCwweDBjLDB4YTAsMHgwMywweDZjLDB4MDAsMHhiMyB9fSwKKyB7MTYsIDB4Zjc0MCwgMCwgezB4YzgsMHgzZSwweGQwLDB4MGIsMHhiOCwweDAyLDB4MjUsMHgwOCwweDhhLDB4MjAsMHgyYSwweDgwLDB4OGIsMHhiOCwweDgyLDB4ZjIgfX0sCisgezE2LCAweGY3NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NjQsMHgwMCwweGEwLDB4YzAsMHgyNCwweGMwIH19LAorIHsxNiwgMHhmNzYwLCAwLCB7MHgwOSwweDM4LDB4MDIsMHgyYywweDAwLDB4ODMsMHgwMywweDIwLDB4MDAsMHgxMCwweDMwLDB4MjIsMHhjYywweDAwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4Zjc3MCwgMCwgezB4NjAsMHgwOCwweDBhLDB4MzAsMHg4MiwweDRjLDB4MDAsMHhiMSwweGMwLDB4MDAsMHhkMSwweDBiLDB4MzgsMHgwMiwweDg0LDB4ODAgfX0sCisgezE2LCAweGY3ODAsIDAsIHsweDgyLDB4MDEsMHgyMCwweDgwLDB4MDMsMHgzOCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzkwLCAwLCB7MHgyMCwweDAxLDB4MTYsMHg0MCwweDg0LDB4OTgsMHgyNSwweGUwLDB4MGIsMHg3YSwweDAyLDB4ZmEsMHg0OCwweGEzLDB4MjAsMHg2MSB9fSwKKyB7MTYsIDB4ZjdhMCwgMCwgezB4MjQsMHgwYiwweDc5LDB4MDAsMHhjZSwweGMwLDB4OTMsMHhhNCwweDIxLDB4YTYsMHgwYiwweDc4LDB4MTIsMHhkZSwweDgwLDB4YjYgfX0sCisgezE2LCAweGY3YjAsIDAsIHsweDgwLDB4MmQsMHgyNCwweDBiLDB4NGIsMHgwMiwweDFhLDB4NDAsMHg4NSwweDgxLDB4MjEsMHg2MCwweDBiLDB4NDgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhmN2MwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhlMiwweGEwLDB4YjQsMHhmZSB9fSwKKyB7MTYsIDB4ZjdkMCwgMCwgezB4NGIsMHhiOCwweDBiLDB4MGUsMHgwMCwweGEzLDB4YjAsMHgyNCwweGE4LDB4MGUsMHgxYiwweDAyLDB4Y2UsMHhjMSwweGMzLDB4YzAgfX0sCisgezE2LCAweGY3ZTAsIDAsIHsweDMwLDB4NjgsMHgyZSwweDNhLDB4NDcsMHg0ZSwweDgwLDB4ZjEsMHg4MCwweDMwLDB4ODAsMHgwZiwweDIyLDB4ODMsMHg4MCwweDAwIH19LAorIHsxNiwgMHhmN2YwLCAwLCB7MHhjMiwweDEwLDB4MzgsMHg4MCwweDRmLDB4MDAsMHgwNywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjgwMCwgMCwgezB4NDAsMHgwZCwweGJjLDB4MTAsMHhmZSwweDA0LDB4M2IsMHhjMSwweDA3LDB4ZjAsMHgwMywweDFjLDB4YzgsMHhkZiwweDJhLDB4MGIgfX0sCisgezE2LCAweGY4MTAsIDAsIHsweGM0LDB4OGYsMHhkMSwweDQzLDB4ZjgsMHgwMiwweDdmLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmMSwweDBmLDB4M2MsMHgwMCwweGYyIH19LAorIHsxNiwgMHhmODIwLCAwLCB7MHgxMSwweDNmLDB4NDEsMHgxZiwweDUyLDB4MDMsMHhiYywweDBlLDB4ZWQsMHgxNCwweDNmLDB4NDAsMHgwZiwweGY4LDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZjgzMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZTksMHgwMCwweDMyLDB4ODAgfX0sCisgezE2LCAweGY4NDAsIDAsIHsweDBlLDB4YmUsMHg0YiwweDZmLDB4MDAsMHhjYiwweDgyLDB4N2EsMHhjMCwweDJjLDB4YjAsMHgwMywweDJjLDB4MDAsMHhjOSwweDAwIH19LAorIHsxNiwgMHhmODUwLCAwLCB7MHgzMiwweDAwLDB4MmMsMHgxMCwweDAzLDB4MmMsMHgwOCwweGMwLDB4MDAsMHgyNiwweDQwLDB4NmMsMHg5MCwweDEzLDB4MjQsMHgxMiB9fSwKKyB7MTYsIDB4Zjg2MCwgMCwgezB4YzgsMHgwMSwweDNlLDB4MDAsMHgwZiwweGI4LDB4MGIsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4NzAsIDAsIHsweDQ4LDB4MTEsMHg5NCwweDAwLDB4OGQsMHgwMCwweDIxLDB4ODAsMHgwYiwweDcwLDB4ODIsMHgzYywweDIwLDB4ODMsMHgzMiwweDI5IH19LAorIHsxNiwgMHhmODgwLCAwLCB7MHhjMCwweDA4LDB4ZjAsMHgyMCwweDE0LDB4MDAsMHg4MCwweDAwLDB4MjMsMHgwMCwweDA4LDB4NTAsMHgwNiwweDljLDB4MDQsMHhkNyB9fSwKKyB7MTYsIDB4Zjg5MCwgMCwgezB4MDIsMHgyOCwweDgwLDB4MDgsMHg2MCwweDAyLDB4MDgsMHgxMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg0MCwweDAyLDB4MTIgfX0sCisgezE2LCAweGY4YTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGE3LDB4ODAsMHgyMSwweGUwIH19LAorIHsxNiwgMHhmOGIwLCAwLCB7MHgwYiwweDVjLDB4MTIsMHgxZSwweDA0LDB4ODcsMHg4MiwweDBkLDB4YTAsMHgwOSwweDc4LDB4MTYsMHgwMiwweDAwLDB4YjQsMHg4MCB9fSwKKyB7MTYsIDB4ZjhjMCwgMCwgezB4MjUsMHhlMCwweDBiLDB4NzgsMHgwMiwweDllLDB4MDAsMHg4NCwweDgwLDB4MjEsMHgyMiwweDA4LDB4MDgsMHgwMiwweDEyLDB4MDEgfX0sCisgezE2LCAweGY4ZDAsIDAsIHsweDg0LDB4YzAsMHgyZCwweDIwLDB4MGIsMHgwOCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGUwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4NDIsMHhhMCwweGQ4LDB4MGIsMHgzNCwweDgyLDB4MGMsMHgwMCwweGEzLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZjhmMCwgMCwgezB4ZTAsMHgwOCwweGIwLDB4MDIsMHgwYywweDg4LDB4YjMsMHgyMSwweDI0LDB4ZDgsMHgwYiwweDNlLDB4MDIsMHg4YywweDAwLDB4OTMgfX0sCisgezE2LCAweGY5MDAsIDAsIHsweDA4LDB4MjgsMHhjMCwweDA4LDB4MzgsMHgwMiwweDJjLDB4MDUsMHg4YiwweDAxLDB4MmMsMHhlMCwweDBiLDB4MzAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhmOTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhlZSwweDAwLDB4MzMsMHg5MCB9fSwKKyB7MTYsIDB4ZjkyMCwgMCwgezB4MGYsMHhhMCwweDBiLDB4NjgsMHgwMCwweGNhLDB4MDEsMHg3ZiwweGE4LDB4MGMsMHhhYSwweDAzLDB4M2EsMHgxMiwweGZlLDB4ZTIgfX0sCisgezE2LCAweGY5MzAsIDAsIHsweDM3LDB4YjAsMHgwZiwweGVlLDB4MDIsMHgxOCwweDAwLDB4Y2EsMHg0MCwweDM2LDB4YTAsMHgwOCwweGEwLDB4OGIsMHgyOCwweDAwIH19LAorIHsxNiwgMHhmOTQwLCAwLCB7MHhjYSwweDgxLDB4MmUsMHhhMCwweDBmLDB4ZTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk1MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDA4LDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGEyLDB4MDIsMHhkOCwweDQwLDB4M2UgfX0sCisgezE2LCAweGY5NjAsIDAsIHsweDA4LDB4MGYsMHg4MCwweDEzLDB4ZTAsMHg0MCwweDQ4LDB4NDAsMHhiOCwweDA0LDB4MDgsMHg4NCwweDAzLDB4NjEsMHgwMCwweGZjIH19LAorIHsxNiwgMHhmOTcwLCAwLCB7MHgwMCwweDNmLDB4MDAsMHg0ZiwweGMwLDB4MDMsMHhmMSwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDQsMHgwZiwweGMwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4Zjk4MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAwLDB4ZjksMHgwMCwweDMwLDB4NTAgfX0sCisgezE2LCAweGY5OTAsIDAsIHsweDRjLDB4YjksMHgwMywweDZjLDB4MTgsMHhmOSwweDAwLDB4MzYsMHg0MCwweDBlLDB4OWMsMHgyMywweGE0LDB4MDIsMHg0MSwweDAwIH19LAorIHsxNiwgMHhmOWEwLCAwLCB7MHhiMiwweDQ0LDB4MGUsMHg5YSwweDAzLDB4YTYsMHg4MCwweGM5LDB4MDAsMHgzYSwweDYwLDB4MGEsMHg5MCwweDAzLDB4YTQsMHg4MCB9fSwKKyB7MTYsIDB4ZjliMCwgMCwgezB4YzksMHgwMCwweDM0LDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5YzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg0MCwweDIyLDB4NzgsMHgwOCwweDk0LDB4MDIsMHhlNCwweDEwLDB4YjksMHgwMCwweDNjIH19LAorIHsxNiwgMHhmOWQwLCAwLCB7MHg2MiwweDE4LDB4OTQsMHg4MiwweGE0LDB4MDAsMHg4OSwweGM4LDB4MjIsMHg3MCwweDQ4LDB4MWUsMHgwMSwweDY3LDB4ODAsMHhkMSB9fSwKKyB7MTYsIDB4ZjllMCwgMCwgezB4MDAsMHhiYywweDQyLDB4MDgsMHgxMCwweDAyLDB4MjUsMHgyMCwweDg5LDB4MDIsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGY5ZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGIxLDB4MjgsMHgyMiwweDQwIH19LAorIHsxNiwgMHhmYTAwLCAwLCB7MHgwOCwweGIwLDB4ODIsMHg2NCwweDA0LDB4MzksMHg0MSwweDJlLDB4NDgsMHgwYSwweDkwLDB4MDIsMHgwNCwweDE4LDB4YTksMHgyMCB9fSwKKyB7MTYsIDB4ZmExMCwgMCwgezB4MjIsMHg0MiwweDRhLDB4OTAsMHgwMiwweDJjLDB4MDQsMHg4OSwweDA0LDB4MmIsMHg0OCwweDAyLDB4ZDAsMHgwMiwweGI0LDB4MGEgfX0sCisgezE2LCAweGZhMjAsIDAsIHsweDhkLDB4ODAsMHgyMywweGMwLDB4NDgsMHhkMCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHhhMCwweDQ4LDB4MjgsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MjQsMHgyYSB9fSwKKyB7MTYsIDB4ZmE0MCwgMCwgezB4NDAsMHgwOCwweDEyLDB4NDIsMHg4NSwweDgwLDB4YTEsMHgyMCwweGEwLDB4NDgsMHgwOCwweDkwLDB4MDIsMHg0NCwweDAwLDB4OTUgfX0sCisgezE2LCAweGZhNTAsIDAsIHsweDJjLDB4MmQsMHg1YSwweDBhLDB4NzIsMHg4MiwweDE0LDB4YTAsMHg4NSwweGE4LDB4MjEsMHg0YSwweDA4LDB4NTIsMHg4MiwweGMyIH19LAorIHsxNiwgMHhmYTYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDQxLDB4NDAsMHhmOCwweDUwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4ZmE3MCwgMCwgezB4OGMsMHgwNSwweDAzLDB4NjEsMHg0MCwweGY4LDB4NTEsMHgyZSwweDAwLDB4MGEsMHg4NSwweDAyLDB4MjAsMHgwMCwweGU4LDB4NTAgfX0sCisgezE2LCAweGZhODAsIDAsIHsweDMyLDB4MTQsMHgwNiwweDg1LDB4MTcsMHhhMCwweDAwLDB4YzgsMHgyMCwweDNhLDB4MDgsMHgwZSwweDgyLDB4MDMsMHhhMCwweDgwIH19LAorIHsxNiwgMHhmYTkwLCAwLCB7MHhjOCwweDIwLDB4MzIsMHgwOCwweDJjLDB4YzIsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFhMCwgMCwgezB4OTgsMHgxOSwweGY0LDB4NDAsMHhmZiwweDEwLDB4M2YsMHg0NCwweDBiLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmOSwweDEwLDB4M2QgfX0sCisgezE2LCAweGZhYjAsIDAsIHsweDQwLDB4MGYsMHhkMSwweDAzLDB4ZjQsMHg1OCwweDlkLDB4MTAsMHgzZiwweDQ0LDB4NGYsMHhkMCwweDAzLDB4ZDUsMHgwMCwweGY5IH19LAorIHsxNiwgMHhmYWMwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHg4ZCwweDkwLDB4MDMsMHhlNCwweGI4LDB4ZjksMHgyOCwweGJhLDB4NmEsMHgwZiwweDkwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4ZmFkMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhlNywweDAwLDB4ZmQsMHg4OCwweDNlLDB4NjAgfX0sCisgezE2LCAweGZhZTAsIDAsIHsweDhmLDB4ZDAsMHgwMywweDI0LDB4MDEsMHhkZCwweDgwLDB4NzMsMHg0MCwweDBmLDB4ZDgsMHgwMywweGE2LDB4MDQsMHhjZCwweGEyIH19LAorIHsxNiwgMHhmYWYwLCAwLCB7MHgzMywweDc4LDB4MWMsMHhkMCwweDAzLDB4MzQsMHgwMSwweGY1LDB4ODgsMHgzYiwweDY4LDB4MGMsMHhkYSwweDQ3LDB4MzcsMHg4MCB9fSwKKyB7MTYsIDB4ZmIwMCwgMCwgezB4Y2QsMHg4OCwweDMyLDB4NjIsMHgwYywweGRhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiMTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDgwLDB4YjgsMHg4MCwweDJlLDB4MTQsMHgwYiwweDBhLDB4ODIsMHgyMiwweDgwLDB4YjgsMHhmOCwweGEyIH19LAorIHsxNiwgMHhmYjIwLCAwLCB7MHgwMCwweDBiLDB4OGYsMHhhMywweDgzLDB4ZTAsMHg4OCwweGViLDB4MjIsMHhhOSwweDA4LDB4ODgsMHgxMiwweGEwLDB4MDUsMHhiOCB9fSwKKyB7MTYsIDB4ZmIzMCwgMCwgezB4MDAsMHgyYSwweGFhLDB4ODgsMHg4MCwweDEzLDB4NjIsMHg4MiwweDg4LDB4ODAsMHgyMiwweDI4LDB4ODgsMHhhNCwweDAyLDB4MGUgfX0sCisgezE2LCAweGZiNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4MGEsMHgyYywweDQxIH19LAorIHsxNiwgMHhmYjUwLCAwLCB7MHgwYiwweDEwLDB4MDYsMHgwNCwweDIwLDB4YTEsMHgwMCwweDAwLDB4NDAsMHg4YiwweDEwLDB4NDYsMHhjNCwweDAxLDB4OTEsMHgxMSB9fSwKKyB7MTYsIDB4ZmI2MCwgMCwgezB4MjQsMHg1OCwweDY4LDB4OTAsMHhjMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4YTgsMHg1MCwweDA5LDB4MTQsMHgwYSwweDA1LDB4OTUgfX0sCisgezE2LCAweGZiNzAsIDAsIHsweGExLDB4MDgsMHhhMCwweDQyLDB4MjgsMHgxMSwweDBhLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjgwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgxOCwweGI5LDB4MjAsMHgyZSwweDUwLDB4MGIsMHg5MCwweDA2LDB4MjQsMHgwOSwweGI5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZmI5MCwgMCwgezB4NDAsMHg4YiwweDkxLDB4MDIsMHg4NCwweDAwLDB4OTksMHg2NCwweDI0LDB4NDAsMHg1OCwweDkwLDB4MDIsMHhhNCwweDIwLDB4YmIgfX0sCisgezE2LCAweGZiYTAsIDAsIHsweDAwLDB4MmEsMHg0MCwweDA5LDB4YjAsMHgwMiwweDA1LDB4MDEsMHhhOSwweDAwLDB4MjIsMHg0MCwweDg4LDB4OTIsMHgwMiwweDA2IH19LAorIHsxNiwgMHhmYmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU2LDB4MDAsMHhmOSwweDQwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ZmJjMCwgMCwgezB4NGYsMHg5OCwweDBiLDB4MjQsMHg4MCwweGQ5LDB4MDAsMHgyMiwweDcyLDB4MGIsMHg5OCwweDAzLDB4ZTQsMHg4NCwweGQ5LDB4MDAgfX0sCisgezE2LCAweGZiZDAsIDAsIHsweGI2LDB4NzAsMHgwOCwweDk5LDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJhLDB4NDAsMHgwZCwweDk0LDB4YzIsMHgyNSwweDAwIH19LAorIHsxNiwgMHhmYmUwLCAwLCB7MHhhOSwweDAwLDB4MjIsMHg0MCwweDBjLDB4OTQsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJmMCwgMCwgezB4MjgsMHgwMSwweGE2LDB4ODAsMHhmOSwweDA4LDB4M2UsMHhjMCwweDBmLDB4OTEsMHg0MywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGZjMDAsIDAsIHsweDUwLDB4MGYsMHg5OCwweDAzLDB4YTUsMHgwMCwweGU5LDB4MDAsMHgzYSwweDY0LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhmYzEwLCAwLCB7MHgwMCwweDNjLDB4NDAsMHg2ZSwweDkwLDB4MDMsMHhlNCwweDIwLDB4ZDksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4ODIsMHhjYSB9fSwKKyB7MTYsIDB4ZmMyMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGZjMzAsIDAsIHsweDRmLDB4ODQsMHgwYiwweDIwLDB4MDAsMHhmOCwweDAwLDB4MzYsMHgwMSwweDBlLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDQwIH19LAorIHsxNiwgMHhmYzQwLCAwLCB7MHgzMiwweDEwLDB4MmQsMHg4MCwweDAzLDB4ZTAsMHg1NCwweGM4LDB4MDAsMHgzNiwweDEwLDB4MGYsMHgwNCwweDgzLDB4ZTAsMHg1MCB9fSwKKyB7MTYsIDB4ZmM1MCwgMCwgezB4ZDgsMHgwNCwweDEyLDB4MDAsMHgwYywweDAwLDB4MGIsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHg0MiwweDJlLDB4YTIsMHg4YiwweGVhLDB4MDIsMHgyOCwweDA4LDB4YmUsMHg4OSwweDM3IH19LAorIHsxNiwgMHhmYzcwLCAwLCB7MHg4NCwweDQ4LDB4ZTAsMHgxMiwweDI4LDB4MDIsMHg4ZSwweGMwLDB4MjMsMHhiMCwweDRkLDB4NjAsMHg2MiwweGY4LDB4MDAsMHg4NiB9fSwKKyB7MTYsIDB4ZmM4MCwgMCwgezB4MDAsMHgyMywweDgwLDB4MGIsMHhlMCwweDAyLDB4ZjgsMHgwMCwweDBlLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhlNCwweDAyLDB4MGEgfX0sCisgezE2LCAweGZjOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGEzLDB4MDAsMHgyYywweDgwIH19LAorIHsxNiwgMHhmY2EwLCAwLCB7MHgxYiwweGIwLDB4OWEsMHg0YywweDEwLDB4OWIsMHg4MCwweDI0LDB4YzAsMHgwYSwweDMwLDB4MDAsMHgwYywweDA0LDB4OWIsMHgyMCB9fSwKKyB7MTYsIDB4ZmNiMCwgMCwgezB4MjAsMHhkNiwweDA4LDB4MzAsMHgwMiwweDhlLDB4MDgsMHhhMywweDA0LDB4MjQsMHhjMCwweDE5LDB4MzQsMHgwMiwweGM3LDB4MDcgfX0sCisgezE2LCAweGZjYzAsIDAsIHsweGFhLDB4YTQsMHhhMCwweGMwLDB4NDgsMHgzNCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2QwLCAwLCB7MHhhMCwweDAxLDB4MGUsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg0MCwweDAyLDB4NWMsMHg0MCwweGIzLDB4MTQsMHgyNSB9fSwKKyB7MTYsIDB4ZmNlMCwgMCwgezB4ZTAsMHgwOCwweDdhLDB4MDIsMHg5ZSwweGMwLDB4OTIsMHg0MCwweGEwLDB4MDAsMHg0OSwweDYwLDB4MDIsMHhjZSwweDAyLDB4OGUgfX0sCisgezE2LCAweGZjZjAsIDAsIHsweDAxLDB4MjEsMHhjMCwweDhiLDB4NTQsMHgwMiwweGM0LDB4MDgsMHg4NiwweDQwLDB4MjEsMHhjOCwweDg4LDB4MTAsMHgwMiwweDI4IH19LAorIHsxNiwgMHhmZDAwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4YzAsMHhlNCwweDgwLDB4M2QsMHhlMiB9fSwKKyB7MTYsIDB4ZmQxMCwgMCwgezB4MGYsMHg1OCwweDAzLDB4NWUsMHg5MCwweGI2LDB4YTIsMHgzNSwweGUwLDB4MGUsMHg3YywweDIzLDB4MWMsMHgwMCwweGQ2LDB4ODAgfX0sCisgezE2LCAweGZkMjAsIDAsIHsweDMxLDB4ZTAsMHg4NCwweDc4LDB4MDMsMHhkZSwweDAwLDB4YzcsMHg4MCwweDM1LDB4ZTAsMHgwZiwweDY4LDB4MDMsMHhkZSwweDAwIH19LAorIHsxNiwgMHhmZDMwLCAwLCB7MHhlMywweDgwLDB4MzMsMHhlOCwweDJjLDB4NzgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQ0MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4OTAsMHhmYSwweDAwLDB4N2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGFjLDB4MDEsMHhmYiwweDAwLDB4M2MgfX0sCisgezE2LCAweGZkNTAsIDAsIHsweDQxLDB4MGYsMHgzMCwweDBiLDB4MmQsMHgwNCwweGViLDB4MDEsMHgzZSwweGMwLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZhIH19LAorIHsxNiwgMHhmZDYwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZTksMHg2MCwweDNlLDB4ZTQsMHgwZiwweDkwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZmQ3MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDIwLDB4ZmYsMHg5MCwweDNlLDB4MjAgfX0sCisgezE2LCAweGZkODAsIDAsIHsweDBjLDB4YTksMHgwNywweDJlLDB4NDQsMHhjOSwweDkxLDB4MzAsMHhhMCwweDBjLDB4YjgsMHg2MywweDJmLDB4NDQsMHhjYiwweGExIH19LAorIHsxNiwgMHhmZDkwLCAwLCB7MHgzNiwweDIwLDB4OGMsMHhmOCwweDAzLDB4MzYsMHgwMCwweGNmLDB4ODIsMHgzMywweGUwLDB4MGMsMHhmOCwweDIzLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4ZmRhMCwgMCwgezB4Y2UsMHhjMCwweDNiLDB4ZTAsMHgwYywweDY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkYjAsIDAsIHsweGE4LDB4MTEsMHg5YywweDg0LDB4YjMsMHg1NCwweDJjLDB4ZjQsMHgyOCwweGJhLDB4OGEsMHgzZSwweDQwLDB4ODEsMHhhMCwweDI5IH19LAorIHsxNiwgMHhmZGMwLCAwLCB7MHhiMCwweDBmLDB4NzgsMHg0MiwweGFlLDB4MDAsMHg4MywweDkwLDB4MzMsMHhlOCwweDBkLDB4ZTEsMHgwMCwweDg1LDB4NDAsMHg4MiB9fSwKKyB7MTYsIDB4ZmRkMCwgMCwgezB4MjQsMHgyMywweGM2LDB4MGQsMHg3MSwweDAzLDB4NWUsMHhlMCwweDg3LDB4MDAsMHgyYiwweGMxLDB4MGQsMHg0NCwweDAyLDB4MmEgfX0sCisgezE2LCAweGZkZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwOCwweDM1LDB4MTQsMHg2ZCwweGMwIH19LAorIHsxNiwgMHhmZGYwLCAwLCB7MHg4OCwweDcyLDB4MzIsMHg1YywweDgwLDB4ODQsMHgzMCwweDJiLDB4ODgsMHgwYSwweDcwLDB4NDIsMHg1YywweGE4LDB4OTEsMHgwOCB9fSwKKyB7MTYsIDB4ZmUwMCwgMCwgezB4MjUsMHhjOCwweDA5LDB4NzAsMHgwMiwweDRjLDB4MjIsMHg4MywweDBhLDB4NjEsMHhjMCwweDA5LDB4MjAsMHgwMiwweDA0LDB4MDAgfX0sCisgezE2LCAweGZlMTAsIDAsIHsweDg3LDB4MDAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZTIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgxMCwweGIzLDB4ODUsMHg2YywweGRjLDB4MDgsMHgzNCwweDAyLDB4NGQsMHgyMSwweDgxLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4ZmUzMCwgMCwgezB4MDIsMHg0YSwweDMxLDB4MTIsMHhlZiwweDBjLDB4OTEsMHhjMiwweDIwLDB4ZjAsMHgwOCwweDMwLDB4NDIsMHg4ZSwweDAwLDB4ODIgfX0sCisgezE2LCAweGZlNDAsIDAsIHsweDQwLDB4MjAsMHhjOCwweDE5LDB4MjgsMHgwMiwweDIyLDB4ODEsMHg4MywweGMwLDB4MjgsMHhkNCwweDA5LDB4MDAsMHgwYSwweDA4IH19LAorIHsxNiwgMHhmZTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhmYiwweGEwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ZmU2MCwgMCwgezB4OGMsMHgwNCwweDEyLDB4N2QsMHgxMCwweGNmLDB4MDIsMHgzYSwweDUwLDB4MDgsMHhjMCwweDQyLDB4N2QsMHg1MiwweDU4LDB4MDEgfX0sCisgezE2LCAweGZlNzAsIDAsIHsweDM2LDB4MjIsMHg2OSwweGQwLDB4MTMsMHgyYSwweDAwLDB4ODgsMHg4MiwweDMyLDB4ZjAsMHgwOSwweGI4LDB4ODIsMHgyZiwweDAwIH19LAorIHsxNiwgMHhmZTgwLCAwLCB7MHhjOSwweGM4LDB4MjMsMHhjMCwweDBjLDB4OGEsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmU5MCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhiOSwweDQwLDB4M2MsMHg1MCwweDRmLDB4ODAsMHgyMywweGFjLDB4MTIsMHhmYiwweDAwLDB4MmEgfX0sCisgezE2LCAweGZlYTAsIDAsIHsweGMwLDB4NmQsMHg4MCwweDEzLDB4YWMsMHgwMCwweGU4LDB4MDQsMHhiYSwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZTgsMHgwMCwweGYzIH19LAorIHsxNiwgMHhmZWIwLCAwLCB7MHgwOCwweDNjLDB4ODAsMHgwZiwweDkwLDB4ODMsMHhlYywweDA0LDB4ZjksMHg2MCwweDJjLDB4YzIsMHgwZiwweDgwLDB4ODMsMHhlMCB9fSwKKyB7MTYsIDB4ZmVjMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4ZWMsMHgyYywweDNmLDB4ZjAgfX0sCisgezE2LCAweGZlZDAsIDAsIHsweDhjLDB4ZmEsMHg4YiwweGJjLDB4MDAsMHhmZSwweDAwLDB4M2YsMHgwMCwweDBmLDB4NzksMHgwMywweDNjLDB4MDAsMHhjZSwweDA4IH19LAorIHsxNiwgMHhmZWUwLCAwLCB7MHgwYiwweGMyLDB4MGMsMHhmMCwweDAzLDB4YmMsMHgwMCwweGZjLDB4MDAsMHgzMywweDQwLDB4OGMsMHg3YSwweDAzLDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4ZmVmMCwgMCwgezB4YzUsMHgwMCwweDMzLDB4YzAsMHg0YywweGM4LDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZmMDAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4ODgsMHhjMCwweDJlLDB4ZTAsMHgwOCwweDk0LDB4MDIsMHgyYywweDAwLDB4YmIsMHg4MCwweDY2IH19LAorIHsxNiwgMHhmZjEwLCAwLCB7MHgzMCwweDE2LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhkYSwweDRjLDB4MjIsMHhmMCwweDA4LDB4ZjAsMHgwMywweGVjLDB4MDAsMHhlYiB9fSwKKyB7MTYsIDB4ZmYyMCwgMCwgezB4YzAsMHgyMiwweDY4LDB4MDAsMHg5NCwweDAyLDB4MmMsMHgwMiwweGE5LDB4ODAsMHgyMiwweGMwLDB4MDgsMHgwYywweDAyLDB4YTAgfX0sCisgezE2LCAweGZmMzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGFiLDB4MDQsMHgyZSwweGMwIH19LAorIHsxNiwgMHhmZjQwLCAwLCB7MHgwOCwweGE0LDB4MDYsMHgyYywweDA0LDB4YWIsMHgxMCwweDJlLDB4NjAsMHg0MywweDgwLDB4ODIsMHg2YywweDAxLDB4ODEsMHg4MCB9fSwKKyB7MTYsIDB4ZmY1MCwgMCwgezB4MjgsMHgwYSwweDA4LDB4OTEsMHgwMCwweGUwLDB4MDAsMHhiOCwweDgwLDB4MDIsMHhlMCwweDA4LDB4ODAsMHgwMiwweDJkLDB4ODAgfX0sCisgezE2LCAweGZmNjAsIDAsIHsweDg4LDB4YzAsMHgyMiwweGMwLDB4MDgsMHg4MiwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZjcwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweDgwLDB4NDQsMHgyYywweGM4LDB4MjgsMHhhMCwweDIyLDB4MGMsMHgwNCwweGIzLDB4MjYsMHgyYyB9fSwKKyB7MTYsIDB4ZmY4MCwgMCwgezB4YzgsMHg4OCwweDAxLDB4MDYsMHgwYywweGUwLDB4OTEsMHgyMCwweDIwLDB4MGMsMHgzOCwweDA0LDB4MjIsMHhjMCwweDQ4LDB4YTMgfX0sCisgezE2LCAweGZmOTAsIDAsIHsweDQyLDB4YTAsMHg4MSwweDA4LDB4MDAsMHgwMiwweDBjLDB4ODAsMHg4MSwweDAwLDB4MjAsMHhjMCwweDI4LDB4MDAsMHgwMiwweDgyIH19LAorIHsxNiwgMHhmZmEwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHhhOSwweDQwLDB4M2UsMHg0NCB9fSwKKyB7MTYsIDB4ZmZiMCwgMCwgezB4MDgsMHhiMSwweDAzLDB4MmMsMHg0MCwweGVhLDB4NDksMHgyZSwweDBkLDB4MGIsMHhiNiwweDEzLDB4N2QsMHg4MCwweGM5LDB4NDAgfX0sCisgezE2LCAweGZmYzAsIDAsIHsweGJhLDB4ZDAsMHgwYywweGI0LDB4MDMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDMyLDB4NDAsMHgwYywweDgwLDB4MGIsMHgyMCwweDAwIH19LAorIHsxNiwgMHhmZmQwLCAwLCB7MHhjNSwweDAwLDB4YjIsMHhjMCwweDBjLDB4ODAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmZlMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDQsMHhmYywweDAwLDB4M2QsMHhjNSwweDBiLDB4ZjEsMHgwMCwweGZjLDB4ZDAsMHg3NywweDI5LDB4MzcgfX0sCisgezE2LCAweGZmZjAsIDAsIHsweDBjLDB4OGUsMHg3NCwweDAzLDB4ZmMsMHgwOCwweGZkLDB4NjksMHgzZiwweGQ4LDB4MGYsMHhmMCwweDAzLDB4YmMsMHgwMCwweGVmIH19LAorIHsxNiwgMHg4MDEwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHgwNywweGMwLDB4MDMsMHhmMCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ODAyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MGQsMHhmYywweGMwLDB4ZGMsMHg4MCwweDNmLDB4YzggfX0sCisgezE2LCAweDgwMzAsIDAsIHsweDBmLDB4NDgsMHgwMywweDdjLDB4MjAsMHhmZiwweDY4LDB4MzcsMHhlMCwweDBlLDB4ZjEsMHgwMywweDljLDB4MDAsMHhiZiwweDIwIH19LAorIHsxNiwgMHg4MDQwLCAwLCB7MHgzNywweGUwLDB4MGMsMHhjOCwweDEzLDB4M2MsMHg0MCwweGVkLDB4NjAsMHhiYiwweGU0LDB4MmMsMHg0MywweDRiLDB4NzAsMHhhMCB9fSwKKyB7MTYsIDB4ODA1MCwgMCwgezB4Y2MsMHgyYywweDNmLDB4MDksMHgwZiwweGQ4LDB4NDMsMHg3MCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwNjAsIDAsIHsweDgwLDB4MDAsMHhlZCwweGMwLDB4YjgsMHg4MCwweDJmLDB4ZjQsMHgwZiwweDk4LDB4MDIsMHgzZiwweDAwLDB4YmYsMHg0MiwweDIyIH19LAorIHsxNiwgMHg4MDcwLCAwLCB7MHhjYSwweDA4LDB4ZjQsMHgwMiwweDNlLDB4MDAsMHhiZiwweGQwLDB4MjIsMHg2MCwweDI4LDB4ODgsMHgwYSwweDNkLDB4ODAsMHg4ZCB9fSwKKyB7MTYsIDB4ODA4MCwgMCwgezB4NDAsMHgyMiwweGM4LDB4MDgsMHg4MSwweDAyLDB4MjEsMHg4MCwweGRiLDB4YzAsMHgyZSwweGE1LDB4MGIsMHg5OCwweDQyLDB4MjAgfX0sCisgezE2LCAweDgwOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgxMCwweGIwLDB4MDAsMHgyYywweGMwIH19LAorIHsxNiwgMHg4MGEwLCAwLCB7MHgwYiwweDIwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgyMCwweDI2LDB4YzAsMHg4YSwweDM2LDB4MTIsMHg4YywweDQxLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4ODBiMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4MDAsMHgwMiwweDBkLDB4ODEsMHhhMSwweDMwLDB4MjIsMHhjOCwweDg5LDB4YTIsMHg0MiwweDA4LDB4MjAgfX0sCisgezE2LCAweDgwYzAsIDAsIHsweGIwLDB4MDAsMHgyYywweDQwLDB4MGIsMHg5MCwweDI2LDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwMCwweGI4LDB4NTAsMHgyZSwweGMwLDB4MGEsMHg5MCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ODBlMCwgMCwgezB4YzAsMHgwOCwweGIwLDB4NjIsMHgyYywweDEwLDB4YmIsMHgwNCwweDJhLDB4ZjAsMHg0YSwweDg4LDB4MDIsMHgwYywweDAwLDB4ODEgfX0sCisgezE2LCAweDgwZjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA5LDB4YjgsMHg4MCwweDI2LDB4MDAsMHhiOCwweDgwLDB4MmUsMHgyMSwweDBiLDB4OTAsMHgwMiwweDMwIH19LAorIHsxNiwgMHg4MTAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxNSwweGVjLDB4MDAsMHhkOCwweGMwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ODExMCwgMCwgezB4MGIsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzNiwweDgwLDB4MGUsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAgfX0sCisgezE2LCAweDgxMjAsIDAsIHsweDNjLDB4ZTAsMHgwYywweDBjLDB4MDMsMHgyYywweDAwLDB4ZTksMHgwMCwweDEwLDB4YzAsMHgwYywweDhjLDB4MDMsMHgwNiwweDAwIH19LAorIHsxNiwgMHg4MTMwLCAwLCB7MHhmOCwweGNkLDB4M2UsMHgyMiwweDBmLDB4MTgsMHgwMywweDQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhmNywweDAyLDB4M2YgfX0sCisgezE2LCAweDgxNTAsIDAsIHsweGU0LDB4MGYsMHg3MCwweDAzLDB4N2MsMHgwNCwweGI3LDB4MDAsMHgzNywweDQwLDB4MGQsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZkIH19LAorIHsxNiwgMHg4MTYwLCAwLCB7MHgwMCwweDM3LDB4ZDAsMHgwZSwweGMwLDB4NDMsMHhmNCwweDAwLDB4ZGYsMHgwMCwweDNmLDB4ODAsMHg4ZiwweGRhLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4ODE3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZjgsMHgxMCwweDNhLDB4YzAgfX0sCisgezE2LCAweDgxODAsIDAsIHsweDZkLDB4YTYsMHgxMywweGVjLDB4MDAsMHhjYiwweDAwLDB4M2EsMHhkMCwweDBmLDB4YjAsMHgwMywweDJjLDB4MTAsMHhkYiwweDEwIH19LAorIHsxNiwgMHg4MTkwLCAwLCB7MHgzNiwweGQ4LDB4MGQsMHg4NCwweDAzLDB4ZWMsMHgwNiwweGM5LDB4MDgsMHgzYSwweGMwLDB4MGUsMHg4NiwweDAzLDB4YTgsMHg2MCB9fSwKKyB7MTYsIDB4ODFhMCwgMCwgezB4ZjgsMHgyMCwweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHg1NCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxYjAsIDAsIHsweDk4LDB4MDUsMHgzYywweDAwLDB4YmIsMHg0MCwweDIzLDB4ZDAsMHgwOCwweDMwLDB4MDIsMHgzZSwweDEwLDB4YWYsMHgwMCwweDIwIH19LAorIHsxNiwgMHg4MWMwLCAwLCB7MHhjMCwweDBiLDB4ZjAsMHgwMiwweDNjLDB4MDAsMHg4ZiwweDUwLDB4MmUsMHhjOCwweDA2LDB4OGEsMHgwMiwweGZjLDB4MDAsMHg4ZCB9fSwKKyB7MTYsIDB4ODFkMCwgMCwgezB4MjQsMHg4MiwweGQ2LDB4MDgsMHgzMiwweDAyLDB4MmQsMHgwOCwweDNhLDB4NDAsMHgyMiwweDgwLDB4MGQsMHg5MCwweDAzLDB4NjIgfX0sCisgezE2LCAweDgxZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4NGMsMHgwMCwweGIwLDB4MjAsMHgyOCwweGMyIH19LAorIHsxNiwgMHg4MWYwLCAwLCB7MHgwOCwweDA0LDB4MDIsMHg4YywweDAwLDB4MTMsMHgwMiwweDI4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDMwLDB4OTMsMHg4MCB9fSwKKyB7MTYsIDB4ODIwMCwgMCwgezB4MjQsMHhkMCwweDA5LDB4MjAsMHgwMiwweGNjLDB4MDAsMHg5MSwweDQwLDB4MDgsMHhjMCwweDJhLDB4MTQsMHgwMiwweDgxLDB4MDAgfX0sCisgezE2LCAweDgyMTAsIDAsIHsweDkwLDB4MDAsMHg2OCwweDAwLDB4MDgsMHgxOCwweDAyLDB4M2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MjIwLCAwLCB7MHg3MCwweDAxLDB4MWUsMHgwMCwweGI0LDB4YTAsMHgyMSwweGUwLDB4MDgsMHhjOCwweDEyLDB4OWUsMHgwMCwweGIzLDB4ODIsMHgyMSB9fSwKKyB7MTYsIDB4ODIzMCwgMCwgezB4ZTAsMHgwYiwweDdhLDB4MGEsMHgxZSwweDAwLDB4OTcsMHg4MCwweDJkLDB4ZTEsMHgwYSwweDQ4LDB4MDIsMHhjZSwweDQwLDB4OTUgfX0sCisgezE2LCAweDgyNDAsIDAsIHsweDkwLDB4MjksMHhlNCwweDA4LDB4NTgsMHgwMiwweDlhLDB4MDAsMHhiNywweDg4LDB4MjEsMHhlMCwweDA5LDB4NTgsMHgwMiwweDVjIH19LAorIHsxNiwgMHg4MjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGEsMHgwMCwweDBjLDB4MDAsMHhmMCwweDgwLDB4MzgsMHhjNCB9fSwKKyB7MTYsIDB4ODI2MCwgMCwgezB4MGMsMHgyNSwweDAzLDB4OGMsMHgyMCwweDkzLDB4MDAsMHgzOCwweGM0LDB4MGYsMHhiMCwweDAzLDB4MGMsMHg4MCwweGQzLDB4MDAgfX0sCisgezE2LCAweDgyNzAsIDAsIHsweDM0LDB4YzAsMHgwZCwweDA0LDB4MTMsMHhjYywweDA4LDB4OTksMHgwMCwweDJhLDB4YzAsMHgwZSwweDIxLDB4MDMsMHg4OCwweDA0IH19LAorIHsxNiwgMHg4MjgwLCAwLCB7MHhmMywweDAwLDB4MzgsMHhjMCwweDBjLDB4MTEsMHg4MywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODI5MCwgMCwgezB4NDIsMHgxNSwweGJjLDB4MDAsMHhmNCwweDAwLDB4M2YsMHhjMywweDBlLDB4YzAsMHgwMywweDFjLDB4MDAsMHhhZiwweDRhLDB4N2YgfX0sCisgezE2LCAweDgyYTAsIDAsIHsweGM0LDB4MGYsMHhiMiwweDAzLDB4ZmQsMHgwMSwweGVmLDB4MTAsMHgzZiwweDg0LDB4MGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGU5IH19LAorIHsxNiwgMHg4MmIwLCAwLCB7MHgwMCwweDM3LDB4YzIsMHgwZSwweGYxLDB4NDcsMHg3YywweDAwLDB4ZjcsMHgwMCwweDNkLDB4YzAsMHgwZiwweDUwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ODJjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MTUsMHhlYywweDA4LDB4ZjgsMHgwMCwweDNlLDB4Y2EgfX0sCisgezE2LCAweDgyZDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGVmLDB4MjEsMHhmYiwweDgwLDB4N2EsMHg0MCwweDhmLDB4YjIsMHhhMSwweDJmLDB4MDAsMHhjYiwweDYwIH19LAorIHsxNiwgMHg4MmUwLCAwLCB7MHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZWQsMHhhMCwweGU5LDB4MzAsMHgzMiwweGMwLDB4MmQsMHhiMCwweDAzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4ODJmMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzMDAsIDAsIHsweGM4LDB4OTEsMHg5ZCwweDAwLDB4YjQsMHgwMSwweDJkLDB4YzgsMHgwYiwweDcwLDB4MDIsMHhjYywweDgwLDB4OGYsMHgyMCwweDIxIH19LAorIHsxNiwgMHg4MzEwLCAwLCB7MHhjMCwweDhiLDB4NzYsMHgwMywweDVkLDB4MDAsMHg4NywweDBhLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgyMiwweGZkLDB4MDAsMHg4ZCB9fSwKKyB7MTYsIDB4ODMyMCwgMCwgezB4MTAsMHgyMywweGM4LDB4MDgsMHg1MCwweDEyLDB4ZDQsMHgwMCwweGI3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZjIgfX0sCisgezE2LCAweDgzMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4OWUsMHgwMCwweGI0LDB4ODAsMHgyZCwweGUwIH19LAorIHsxNiwgMHg4MzQwLCAwLCB7MHgwYiwweDdjLDB4MDIsMHhkZSwweDQwLDB4YTcsMHg4MiwweDJkLDB4ZTAsMHgwYiwweDNhLDB4MDIsMHg4ZSwweDAwLDB4ODcsMHg5MCB9fSwKKyB7MTYsIDB4ODM1MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4NTgsMHgwMiwweDVlLDB4MDAsMHhhNSwweGEyLDB4NjUsMHhlMCwweDA4LDB4NjgsMHg4MiwweGRhLDB4MDAgfX0sCisgezE2LCAweDgzNjAsIDAsIHsweDk1LDB4ODAsMHgyZCwweDYwLDB4MGIsMHg3OCwweDAyLDB4ZTAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MzcwLCAwLCB7MHgwOCwweDg0LDB4Y2MsMHgwMCwweGIwLDB4MDksMHgyYywweGMwLDB4MGIsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ODM4MCwgMCwgezB4YzAsMHgwYiwweDMwLDB4NDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4YTAsMHgwYiwweDA0LDB4MDIsMHhjYywweDAwLDB4ODEgfX0sCisgezE2LCAweDgzOTAsIDAsIHsweDAwLDB4YTAsMHhjMCwweDA4LDB4YjAsMHgwNiwweGNmLDB4ODAsMHhiMywweDEwLDB4MmMsMHhjNCwweDBiLDB4MzEsMHgwMiwweGMzIH19LAorIHsxNiwgMHg4M2EwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweGE4LDB4MDAsMHhmZSwweDgwLDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4ODNiMCwgMCwgezB4MGYsMHhlOCwweDEzLDB4ZTgsMHgwMCwweGVhLDB4MDAsMHgzZiwweGIwLDB4MGYsMHhhMCwweDAzLDB4YTgsMHgwMiwweGMyLDB4MDAgfX0sCisgezE2LCAweDgzYzAsIDAsIHsweDJmLDB4ODgsMHgwZiwweGUwLDB4MDMsMHhlOCwweDAwLDB4ZWEsMHgwMCwweDM2LDB4MDAsMHgwYywweGUwLDB4MDMsMHhmOSwweDIwIH19LAorIHsxNiwgMHg4M2QwLCAwLCB7MHhkZSwweDgwLDB4M2YsMHhhMCwweDRmLDB4YTgsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODNlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDEwLDB4M2MsMHgxMCwweDBmLDB4ODAsMHg4MywweGUxLDB4MDAsMHhlOCwweDAwLDB4MjIgfX0sCisgezE2LCAweDgzZjAsIDAsIHsweDA2LDB4MGYsMHgwMCwweDEzLDB4ZTAsMHgwMSwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHg4NDAwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MjMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MTAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ODQxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNCwweDAwLDB4ZjksMHgxMCwweDNlLDB4NDQgfX0sCisgezE2LCAweDg0MjAsIDAsIHsweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgxMiwweDI0LDB4MDAsMHhmOSwweDEwIH19LAorIHsxNiwgMHg4NDMwLCAwLCB7MHgzMiwweDQwLDB4OGYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzMiwweDEwLDB4MGMsMHg5YywweDAxLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ODQ0MCwgMCwgezB4ZjksMHgxMCwweDNlLDB4NzAsMHgwZiwweDkwLDB4MDIsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0NTAsIDAsIHsweDgwLDB4MTQsMHg2NCwweDAwLDB4YjksMHhjMCwweDJlLDB4NDgsMHgwOCwweDkxLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlIH19LAorIHsxNiwgMHg4NDYwLCAwLCB7MHg0MCwweDBkLDB4OTAsMHgwMywweDY3LDB4MDAsMHhiOSwweDgwLDB4MmEsMHg2MCwweDBiLDB4OTksMHgwMiwweGU0LDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4ODQ3MCwgMCwgezB4MDAsMHgyMiwweDQwLDB4MmMsMHg5MCwweDEyLDB4MjUsMHgyMCwweGI5LDB4NDgsMHgyZSwweDUyLDB4MGIsMHg5NCwweDAyLDB4ZTAgfX0sCisgezE2LCAweDg0ODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHg4NDkwLCAwLCB7MHg2OCwweDkwLDB4NDYsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlLDB4YzAsMHgwOCwweDkwLDB4MDIsMHhhNCwweDYwLDB4YjksMHgwMCB9fSwKKyB7MTYsIDB4ODRhMCwgMCwgezB4MjIsMHg0OCwweDBiLDB4OTAsMHgwNiwweGU0LDB4MDIsMHg4OSwweDAwLDB4YTAsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE2LDB4MTAgfX0sCisgezE2LCAweDg0YjAsIDAsIHsweGI5LDB4MDAsMHgwZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NGMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweGIxLDB4MDAsMHgyYywweDQ4LDB4MDgsMHgxMCwweDAyLDB4YzQsMHg4NCwweGIxLDB4MjAsMHgyYyB9fSwKKyB7MTYsIDB4ODRkMCwgMCwgezB4NDAsMHgwOSwweDEyLDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMCwweDI4LDB4NDAsMHgwYiwweDEwLDB4MDIsMHhjNCwweDgwLDB4ODkgfX0sCisgezE2LCAweDg0ZTAsIDAsIHsweDIwLDB4MjAsMHg0MCwweDRiLDB4MTIsMHgwYSwweDg0LDB4ODQsMHhiMSwweDIwLDB4MmMsMHg0OCwweDhiLDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHg4NGYwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhiYSwweDAwLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4ODUwMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4ZTgsMHgwOCwweGY4LDB4NTAsMHgzZSwweDE0LDB4MGMsMHg4NSwweDAzLDB4MjAsMHgwMCwweGI4LDB4MDAgfX0sCisgezE2LCAweDg1MTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweGEwLDB4MDMsMHhlMSwweDQwLDB4YzgsMHg1MCwweDMyLDB4MTQsMHgwYywweGE1LDB4MDMsMHhhMSwweDQwIH19LAorIHsxNiwgMHg4NTIwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YTAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODUzMCwgMCwgezB4ODgsMHgwZCwweGU0LDB4NDAsMHhmZCwweDAwLDB4M2UsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhiOSwweDExLDB4M2YgfX0sCisgezE2LCAweDg1NDAsIDAsIHsweDQwLDB4MGYsMHg5MSwweDAzLDB4NjQsMHg0NCwweGY5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGZkIH19LAorIHsxNiwgMHg4NTUwLCAwLCB7MHgxMCwweDNmLDB4MTAsMHg4YywweGQxLDB4MDMsMHg3NCwweDQwLDB4ZmYsMHgxMCwweDNmLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4ODU2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHg2NiwweDIwLDB4ZWQsMHgwMCwweDMzLDB4NjkgfX0sCisgezE2LCAweDg1NzAsIDAsIHsweDRkLDB4NTAsMHg0MywweDU2LDB4MDAsMHhmOSwweGEwLDB4MzQsMHg0MCwweDBmLDB4OWEsMHgwYiwweDM0LDB4MDAsMHhkZCwweDgwIH19LAorIHsxNiwgMHg4NTgwLCAwLCB7MHgzYiwweDQwLDB4MGIsMHg1MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweGUwLDB4MGUsMHhkMCwweDAzLDB4ZjQsMHgwMCB9fSwKKyB7MTYsIDB4ODU5MCwgMCwgezB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwYywweGQwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1YTAsIDAsIHsweDc4LDB4MTAsMHhlMiwweDgwLDB4ODgsMHgwNCwweDIyLDB4MTAsMHgwYiwweDgwLDB4MDIsMHgyMCwweDA5LDB4YjgsMHhmMCwweDIyIH19LAorIHsxNiwgMHg4NWIwLCAwLCB7MHgwMCwweDBiLDB4OGUsMHgxMiwweGEwLDB4MDAsMHhiOCwweDUyLDB4MmUsMHgwMCwweDBiLDB4ODAsMHgwMiwweGUwLDB4MDUsMHhiOCB9fSwKKyB7MTYsIDB4ODVjMCwgMCwgezB4YWEsMHgyMywweDNlLDB4MGQsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgzYSwweDAwLDB4MDgsMHg4MCwweDAyLDB4Y2UgfX0sCisgezE2LCAweDg1ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHgyMCwweGE5LDB4MDAsMHhhNCwweDQ0IH19LAorIHsxNiwgMHg4NWUwLCAwLCB7MHgwOSwweDkwLDB4MDIsMHhjNSwweDAwLDB4YTEsMHgwOCwweDJjLDB4NDAsMHgwYiwweDExLDB4ODIsMHgwNCwweDAwLDB4YjEsMHgwMCB9fSwKKyB7MTYsIDB4ODVmMCwgMCwgezB4MjgsMHg0MCwweDBhLDB4MTAsMHg0MiwweGM0LDB4MDAsMHhiNSwweDAwLDB4YTEsMHg0MCwweDA4LDB4MTAsMHgwMiwweGM0LDB4MDAgfX0sCisgezE2LCAweDg2MDAsIDAsIHsweGIxLDB4MDEsMHgyYywweDQwLDB4MDgsMHgxMCwweDIwLDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NjEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDQsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAwLDB4YWMsMHgwMCwweDM5LDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ODYyMCwgMCwgezB4NDAsMHgwYiwweDEwLDB4MDIsMHhhNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDgsMHgwYiwweDkwLDB4MTIsMHhlNCwweDAwLDB4YjkgfX0sCisgezE2LCAweDg2MzAsIDAsIHsweDAwLDB4MjEsMHg2MCwweDA5LDB4OTIsMHgyMiwweGU0LDB4MjgsMHhiOSwweDAwLDB4MGEsMHg1MCwweDA4LDB4OTAsMHgwNiwweGM2IH19LAorIHsxNiwgMHg4NjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhlOSwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4ODY1MCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQ4LDB4MGYsMHg5MCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAgfX0sCisgezE2LCAweDg2NjAsIDAsIHsweDNhLDB4NzgsMHgwZSwweDk4LDB4MDMsMHhlNCwweDAwLDB4YjksMHgwMCwweGIyLDB4NDAsMHgwZSwweDkyLDB4MjMsMHhlNiwweDAwIH19LAorIHsxNiwgMHg4NjcwLCAwLCB7MHhiOSwweDUwLDB4M2UsMHg3MCwweDJjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODY4MCwgMCwgezB4NjgsMHgwMSwweDg0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDRmLDB4OWMsMHgyMywweDY0LDB4MDAsMHhmOSwweDA0LDB4MzYgfX0sCisgezE2LCAweDg2OTAsIDAsIHsweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDYwLDB4MGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHg4NmEwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4ODMsMHhlNCwweDQ0LDB4ZjksMHgwMCwweDc4LDB4NjQsMHgwZiwweDkwLDB4MDMsMHhkYSB9fSwKKyB7MTYsIDB4ODZiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweDg2YzAsIDAsIHsweDBmLDB4ODIsMHgwMywweGEwLDB4NDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweDIwLDB4YzAsMHhjOCwweDgwIH19LAorIHsxNiwgMHg4NmQwLCAwLCB7MHgzZSwweDEyLDB4MGYsMHg4MCwweDAzLDB4NjAsMHgwMCwweDdjLDB4MDAsMHgzMywweDAwLDB4MGQsMHg4MCwweDEzLDB4ZTAsMHgxMCB9fSwKKyB7MTYsIDB4ODZlMCwgMCwgezB4YzgsMHg2NCwweDNlLDB4MDgsMHgwYywweDgyLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2ZjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YjYsMHhlMCwweDBmLDB4YTAsMHgwYiwweDYwLDB4ODIsMHgzOCwweDAwLDB4YWEsMHgwMCwweDJlIH19LAorIHsxNiwgMHg4NzAwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHg0MiwweGJhLDB4MDAsMHhhZSwweDIwLDB4MmYsMHg4OCwweDBiLDB4ZTUsMHgwMiwweDI4LDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4ODcxMCwgMCwgezB4ZDgsMHgzNywweDgwLDB4MDgsMHhlYywweDAyLDB4ZjgsMHgwNCwweDhlLDB4MDAsMHgyZiwweDkwLDB4MGQsMHhlMCwweDAyLDB4Y2EgfX0sCisgezE2LCAweDg3MjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIwLDB4MjQsMHgyYywweDYwIH19LAorIHsxNiwgMHg4NzMwLCAwLCB7MHgwYiwweDM4LDB4MDIsMHg4ZSwweDgwLDB4YWIsMHgwMCwweDJjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwZCwweDA4LDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4ODc0MCwgMCwgezB4NmMsMHhkMCwweDBiLDB4MzQsMHgwMiwweGNjLDB4MDAsMHhiOCwweGMwLDB4MjAsMHgwMCwweDQ4LDB4MzQsMHgxMiwweGNjLDB4NDAgfX0sCisgezE2LCAweDg3NTAsIDAsIHsweDgzLDB4MDAsMHgyYywweGUwLDB4MGEsMHgzNSwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NzYwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg0MCwweGI3LDB4MDAsMHgyZCwweDAyLDB4OGIsMHg2MCwweDAyLDB4OWUsMHgwMCwweDg3LDB4MjAsMHgyZiB9fSwKKyB7MTYsIDB4ODc3MCwgMCwgezB4ZTAsMHgwOCwweDcyLDB4MDIsMHg5ZSwweDAwLDB4YTQsMHgwMCwweDJkLDB4YzAsMHgwYiwweGY4LDB4MDIsMHg5YywweGMwLDB4YjMgfX0sCisgezE2LCAweDg3ODAsIDAsIHsweDAyLDB4YTUsMHhjMCwweDA4LDB4NTAsMHg4NiwweGZlLDB4MDAsMHg4NywweDAwLDB4MmYsMHhkMCwweDA5LDB4NzAsMHgwMiwweGU4IH19LAorIHsxNiwgMHg4NzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhmNCwweDgwLDB4M2QsMHgyMCB9fSwKKyB7MTYsIDB4ODdhMCwgMCwgezB4MGYsMHg1OCwweDAzLDB4OWUsMHgwMCwweDY3LDB4ODAsMHgzZCwweGY4LDB4MGQsMHgzOCwweDAyLDB4MWEsMHgxMCwweDQ0LDB4ODAgfX0sCisgezE2LCAweDg3YjAsIDAsIHsweDNkLDB4ZTAsMHgwZiwweDU4LDB4MDMsMHhkZSwweDIwLDB4YjQsMHg4MCwweDMzLDB4YTAsMHgyYywweDY4LDB4MDMsMHhkNiwweDAwIH19LAorIHsxNiwgMHg4N2MwLCAwLCB7MHhjNywweDgxLDB4M2QsMHhlMCwweDBjLDB4NzgsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODdkMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDgsMHhmOCwweDAwLDB4M2UsMHgwMCwweDhmLDB4ODAsMHgwMywweDZjLDB4MDAsMHgzYiwweDEyLDB4M2UgfX0sCisgezE2LCAweDg3ZTAsIDAsIHsweGNhLDB4MGYsMHhiNSwweDAzLDB4YzgsMHgwMCwweGY4LDB4MDQsMHg3ZSwweGMwLDB4MGYsMHg5MCwweDAzLDB4NmMsMHg4MCwweGZiIH19LAorIHsxNiwgMHg4N2YwLCAwLCB7MHgwNCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MjMsMHhjOCwweDAwLDB4ZjksMHgwMSwweDNjLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ODgwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4YWMsMHg5MCwweDMxLDB4NDggfX0sCisgezE2LCAweDg4MTAsIDAsIHsweDA4LDB4ZjgsMHgwMywweGZhLDB4MDAsMHhjZiwweDgwLDB4M2YsMHhlMCwweDBjLDB4ZmMsMHgxMywweDNlLDB4MDQsMHhmYywweDgwIH19LAorIHsxNiwgMHg4ODIwLCAwLCB7MHgzNSwweGEwLDB4MGMsMHg3OCwweDAzLDB4YmUsMHgwMCwweGRmLDB4ODAsMHgzYiwweDIwLDB4MjQsMHhmOCwweDAzLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ODgzMCwgMCwgezB4Y2YsMHg4MCwweDMzLDB4ZTAsMHgwMywweGY5LDB4MDMsMHhkMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4NDAsIDAsIHsweGE4LDB4MTEsMHhiYywweDAwLDB4ODAsMHgwMCwweDAxLDB4MDAsMHgwOCwweDcyLDB4MDIsMHhkMCwweDAwLDB4ODcsMHgwMCwweDJkIH19LAorIHsxNiwgMHg4ODUwLCAwLCB7MHhjOCwweDBhLDB4ZjAsMHgwMiwweDk4LDB4NDAsMHhmNSwweDAwLDB4NjEsMHg0MSwweDAwLDB4NzQsMHgwMiwweDFjLDB4MDAsMHhiNCB9fSwKKyB7MTYsIDB4ODg2MCwgMCwgezB4MDAsMHgyMSwweGM4LDB4MDgsMHg2MCwweDAyLDB4M2UsMHgyMCwweDg2LDB4MDgsMHgyMSwweGQ4LDB4MGYsMHg1MCwweDAyLDB4ZWEgfX0sCisgezE2LCAweDg4NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4OWMsMHgwMCwweGE0LDB4MDAsMHgyMSwweDAwIH19LAorIHsxNiwgMHg4ODgwLCAwLCB7MHgwOCwweDUwLDB4MDIsMHhkOCwweDAwLDB4OTcsMHgwMCwweDJkLDB4YzAsMHg4OCwweDcxLDB4MDIsMHgxNCwweDAwLDB4YjAsMHgwMCB9fSwKKyB7MTYsIDB4ODg5MCwgMCwgezB4MjUsMHg5MCwweDA4LDB4YzAsMHg4MiwweDljLDB4NDAsMHg5MywweDAwLDB4MjksMHhhMSwweDg4LDB4NjAsMHgwMiwweDE0LDB4MTIgfX0sCisgezE2LCAweDg4YTAsIDAsIHsweDg3LDB4NDAsMHgyOSwweDQwLDB4MGIsMHg2MCwweDAyLDB4YzQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OGIwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwMCwweDgwLDB4ZDAsMHhhMCwweDAwLDB4MDgsMHgxYywweDAyLDB4YzAsMHgwMCwweDkzLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4ODhjMCwgMCwgezB4ZDAsMHgwYSwweGIwLDB4MjYsMHg4MCwweDAwLDB4YjMsMHgwMCwweDI0LDB4ZTQsMHgwOCwweDA4LDB4MDIsMHg4YywweDAwLDB4YjAgfX0sCisgezE2LCAweDg4ZDAsIDAsIHsweDAyLDB4MDIsMHg0MSwweDA4LDB4MDgsMHgwMiwweDAzLDB4MDEsMHg4MSwweDAwLDB4MjgsMHg0MiwweDFhLDB4MDAsMHg0MiwweGQ4IH19LAorIHsxNiwgMHg4OGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjgsMHgxNSwweGJjLDB4MDAsMHhlOCwweGMwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4ODhmMCwgMCwgezB4MGMsMHhiNSwweDAzLDB4ZTQsMHgwMCwweDlmLDB4MDAsMHgzZCwweGUwLDB4MGMsMHhmMCwweDBiLDB4MjQsMHgwMCwweGY4LDB4MDAgfX0sCisgezE2LCAweDg5MDAsIDAsIHsweDM2LDB4ZTAsMHgwYywweDI1LDB4MDMsMHhiYywweDA1LDB4ZDgsMHgwMiwweDJhLDB4MDAsMHgwOCwweGJhLDB4MDIsMHgyYSwweDAwIH19LAorIHsxNiwgMHg4OTEwLCAwLCB7MHhjMSwweDAyLDB4M2EsMHg1MCwweDhiLDB4OTAsMHgwMywweGVlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODkyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDA4LDB4M2UsMHg4MCwweDBmLDB4YTEsMHgwMywweGVjLDB4MDQsMHhlYiwweDAyLDB4MmUgfX0sCisgezE2LCAweDg5MzAsIDAsIHsweGM2LDB4MGYsMHhiMCwweDE3LDB4NDQsMHgwMCwweGU4LDB4MDAsMHgzYSwweDQwLDB4MGYsMHg4MCwweDAyLDB4NmMsMHgwMCwweGZiIH19LAorIHsxNiwgMHg4OTQwLCAwLCB7MHgwMCwweDNlLDB4ZTAsMHgwZiwweDkwLDB4OTMsMHhlMSwweDAwLDB4ZDksMHgwMCwweDI2LDB4NzAsMHg4ZiwweDkwLDB4MDEsMHhlMSB9fSwKKyB7MTYsIDB4ODk1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhmYywweDAwLDB4ZmMsMHgwMywweDM3LDB4MjQgfX0sCisgezE2LCAweDg5NjAsIDAsIHsweDBkLDB4ZjgsMHgwMywweGUwLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMSwweDhkLDB4ZjAsMHgwYiwweDM4LDB4MDAsMHhjYywweDAwIH19LAorIHsxNiwgMHg4OTcwLCAwLCB7MHgzZiwweGMwLDB4MGYsMHhmYSwweDAzLDB4M2MsMHgwYywweGZjLDB4MDQsMHgzYiwweDgwLDB4MGMsMHhhMCwweDAzLDB4OTQsMHgyMCB9fSwKKyB7MTYsIDB4ODk4MCwgMCwgezB4ODksMHgwNSwweDNiLDB4MDAsMHg0ZiwweGQwLDB4MjMsMHhjMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg5OTAsIDAsIHsweDgwLDB4MDQsMHg2YywweDAwLDB4YjAsMHgwNiwweDIwLDB4MTMsMHg4OCwweGE4LDB4MDIsMHhlYiwweDAwLDB4YmIsMHgwMCwweDJlIH19LAorIHsxNiwgMHg4OWEwLCAwLCB7MHhjMCwweDA4LDB4YjAsMHgwMiwweDJhLDB4MDAsMHhhOCwweDgwLDB4MmUsMHhlMCwweDBiLDB4OTQsMHgxYSwweDJjLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4ODliMCwgMCwgezB4MDAsMHhhMiwweDQwLDB4MjksMHg5OCwweDAyLDB4ZTIsMHgwMCwweGE5LDB4ODQsMHgyMiwweDIwLDB4MGIsMHg5OCwweDAyLDB4ZTAgfX0sCisgezE2LCAweDg5YzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGI4LDB4MDAsMHgyMiwweDAwIH19LAorIHsxNiwgMHg4OWQwLCAwLCB7MHgwOSwweDgyLDB4MDIsMHhlNiwweDAwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyNiwweDAwLDB4ODgsMHg4MCB9fSwKKyB7MTYsIDB4ODllMCwgMCwgezB4MmUsMHhhMCwweDBiLDB4YTAsMHgwMiwweDJjLDB4MDAsMHhiMywweDAwLDB4MmEsMHgwMCwweDA5LDB4OTgsMHgwMiwweGVhLDB4MjAgfX0sCisgezE2LCAweDg5ZjAsIDAsIHsweGE5LDB4ODAsMHgyYSwweDYwLDB4OWIsMHg5OCwweDgyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YTAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGI4LDB4MDAsMHgyMCwweDAwLDB4MDksMHgwOCwweDAyLDB4YzQsMHgwMCwweGIzLDB4MDAsMHgyNiB9fSwKKyB7MTYsIDB4OGExMCwgMCwgezB4YzAsMHgwMCwweDMwLDB4MDIsMHgwMCwweDAwLDB4ODEsMHgwMCwweDJjLDB4NDEsMHgwYiwweDAwLDB4MDIsMHgwYywweDAwLDB4YjAgfX0sCisgezE2LCAweDhhMjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDBiLDB4MDAsMHgwMiwweGM4LDB4ODAsMHhhOCwweDAwLDB4MjAsMHg0MSwweDBiLDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHg4YTMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MTAsMHhmOCwweDUwLDB4YjIsMHgwMCB9fSwKKyB7MTYsIDB4OGE0MCwgMCwgezB4MGQsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGZiLDB4MDAsMHgzZCwweGMwLDB4MGQsMHhmMCwweDEzLDB4MjQsMHgwMiwweGM4LDB4MDYgfX0sCisgezE2LCAweDhhNTAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHgzYywweDA0LDB4ZmIsMHgwMCwweDc4LDB4ODAsMHgwYywweGEwLDB4MDMsMHhlNCwweDAwIH19LAorIHsxNiwgMHg4YTYwLCAwLCB7MHhlOSwweDAwLDB4MWEsMHg0MCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGE3MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmNCwweDIwLDB4M2YsMHgwMCwweDBlLDB4YzAsMHgwMiwweGYwLDB4MDEsMHhmZiwweDAwLDB4M2YgfX0sCisgezE2LCAweDhhODAsIDAsIHsweGMwLDB4MGYsMHhmMCwweDIzLDB4ZjAsMHgwMCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZjIH19LAorIHsxNiwgMHg4YTkwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHg5YywweGMwLDB4MDMsMHhmMCwweDQwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4NDMsMHhlOCB9fSwKKyB7MTYsIDB4OGFhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweDAwLDB4ZWQsMHgyMywweGI3LDB4NDggfX0sCisgezE2LCAweDhhYjAsIDAsIHsweDBjLDB4ZTEsMHhjMywweDdjLDB4YzAsMHhkZCwweDgwLDB4MzcsMHhlMCwweDBmLDB4Y2IsMHgwMywweGZlLDB4MDgsMHhmYywweDI4IH19LAorIHsxNiwgMHg4YWMwLCAwLCB7MHgzZiwweGYwLDB4MWMsMHhmYiwweDIzLDB4N2MsMHgwMSwweGZmLDB4MTQsMHg3NywweGUyLDB4NGYsMHhlOCwweDIzLDB4N2MsMHgwMCB9fSwKKyB7MTYsIDB4OGFkMCwgMCwgezB4YzQsMHg4MCwweDMzLDB4NDgsMHgyYywweGY4LDB4MjIsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhZTAsIDAsIHsweDgwLDB4MTAsMHhlMCwweGUwLDB4YzksMHhjMCwweDIyLDB4NWIsMHg4OCwweDk2LDB4MjIsMHgyZCwweDAwLDB4ODksMHgyMiwweDIyIH19LAorIHsxNiwgMHg4YWYwLCAwLCB7MHhjYSwweDBiLDB4OWUsMHgyMiwweGUyLDB4YTAsMHhiOSwweDYxLDB4MmMsMHhlMCwweDg4LDB4OWYsMHgwMiwweDNkLDB4ODUsMHhiZiB9fSwKKyB7MTYsIDB4OGIwMCwgMCwgezB4NjAsMHgyNiwweDUwLDB4NDgsMHhhMCwweDAyLDB4M2MsMHgwMCwweDg4LDB4MDAsMHgyMiwweDUwLDB4MDgsMHhiMCwweDAyLDB4MjAgfX0sCisgezE2LCAweDhiMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzAsMHg4MCwweGIxLDB4MTAsMHgyMCwweDQ0IH19LAorIHsxNiwgMHg4YjIwLCAwLCB7MHgwYiwweGIyLDB4MDIsMHhjZSwweGQwLDB4ODEsMHgwOCwweDJjLDB4YzAsMHgwYiwweDAxLDB4MDIsMHg4YywweDA4LDB4YjMsMHgwOCB9fSwKKyB7MTYsIDB4OGIzMCwgMCwgezB4MmMsMHhjOSwweDA4LDB4MTAsMHg2MiwweDhjLDB4NjAsMHhiMywweDMyLDB4MjQsMHg4MCwweDBhLDB4YTAsMHgwMiwweDZjLDB4MDMgfX0sCisgezE2LCAweDhiNDAsIDAsIHsweDlhLDB4MDEsMHgyNiwweDQ0LDB4NDgsMHhiMCwweDQyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YjUwLCAwLCB7MHhjMCwweDE1LDB4YTQsMHhhMCwweDhiLDB4MDIsMHgyMiwweGUwLDB4MGIsMHhiMCwweDYyLDB4YWMsMHg5OCwweDk5LDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4OGI2MCwgMCwgezB4YzIsMHgwYiwweDk4LDB4MDYsMHhlNCwweDAwLDB4YmIsMHgwMiwweDJlLDB4YzAsMHgwOCwweDkxLDB4NDIsMHgyYywweDEwLDB4YmIgfX0sCisgezE2LCAweDhiNzAsIDAsIHsweDAwLDB4NmUsMHg4MCwweDBhLDB4ODAsMHgwMiwweDZjLDB4MDAsMHgxYiwweDAwLDB4MDYsMHg0MCwweDQ4LDB4YjgsMHgwYSwweDcwIH19LAorIHsxNiwgMHg4YjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweGU3LDB4MDAsMHhhMSwweDAwLDB4NzYsMHg3OCB9fSwKKyB7MTYsIDB4OGI5MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZTgsMHgxMCwweGQ5LDB4MDAsMHgzZSwweGQwLDB4NGIsMHg5ZSwweDEzLDB4YWMsMHgwOCwweGI4LDB4YTAgfX0sCisgezE2LCAweDhiYTAsIDAsIHsweDdlLDB4YzYsMHgwOCwweGE4LDB4MDIsMHgyYywweDAxLDB4YmIsMHgwMCwweDI2LDB4MzAsMHg0ZSwweDIwLDB4MDMsMHg0YywweDE4IH19LAorIHsxNiwgMHg4YmIwLCAwLCB7MHg5OSwweDgwLDB4YjQsMHg0MCwweDRjLDB4M2EsMHgwMywweDQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGJjMCwgMCwgezB4ZTAsMHgwMSwweGIyLDB4MDAsMHhmZCwweGM1LDB4M2IsMHhjMCwweDRjLDB4ZDAsMHgwMywweDZhLDB4MDIsMHhlZCwweDA2LDB4MzMgfX0sCisgezE2LCAweDhiZDAsIDAsIHsweGM0LDB4MGYsMHhkMCwweDUzLDB4ZjgsMHgwMCwweGZjLDB4OTAsMHg3ZiwweGMxLDB4MGYsMHg3OCwweDAzLDB4YmMsMHgwNCwweGZmIH19LAorIHsxNiwgMHg4YmUwLCAwLCB7MHgwMCwweDM3LDB4NjQsMHgwYywweGYxLDB4MDMsMHhhNCwweDAwLDB4ZWQsMHhhMSwweDNiLDB4NDAsMHgwYiwweGYwLDB4ODMsMHhiOCB9fSwKKyB7MTYsIDB4OGJmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4YywweDAwLDB4Y2IsMHgyMCwweDNlLDB4NzEgfX0sCisgezE2LCAweDhjMDAsIDAsIHsweDBmLDB4YjMsMHgwMywweDk4LDB4MDIsMHhmYiwweDAyLDB4MzYsMHg0OCwweDBmLDB4OTAsMHgwMywweGVjLDB4MjAsMHhmOCwweDAwIH19LAorIHsxNiwgMHg4YzEwLCAwLCB7MHgzZSwweGNjLDB4MDQsMHg4NCwweDAzLDB4MmMsMHgwMCwweGRiLDB4MDQsMHgzYywweDEwLDB4MGYsMHhhMCwweDAzLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4OGMyMCwgMCwgezB4OWIsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjMzAsIDAsIHsweDg4LDB4MDUsMHgyYywweDAyLDB4OGIsMHg0OCwweDJlLDB4ZTAsMHgwYiwweDM0LDB4MDMsMHg2YiwweDAwLDB4OGIsMHhmNSwweDIyIH19LAorIHsxNiwgMHg4YzQwLCAwLCB7MHhmMiwweDBiLDB4OWMsMHgwMywweGFmLDB4MDAsMHhiOCwweDUwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweDdjLDB4MDAsMHg4ZiB9fSwKKyB7MTYsIDB4OGM1MCwgMCwgezB4MDAsMHgwZSwweDVkLDB4MGIsMHg4MCwweDAyLDB4ZjUsMHg0MCwweDgzLDB4NTAsMHgyMywweDU0LDB4MDgsMHg5YywweDAyLDB4ZTYgfX0sCisgezE2LCAweDhjNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA0LDB4NGMsMHgwMCwweDgxLDB4ODEsMHgyZSwweDQwIH19LAorIHsxNiwgMHg4YzcwLCAwLCB7MHgwMywweDJjLDB4MDIsMHgwNCwweDMzLDB4OTksMHgwMCwweDIwLDB4ZjAsMHg0YSwweDI4LDB4ODAsMHhjYywweDQwLDB4YjAsMHgwMCB9fSwKKyB7MTYsIDB4OGM4MCwgMCwgezB4MjYsMHgxMCwweDA4LDB4MjAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDA5LDB4MjAsMHgwMiwweGNjLDB4MDAgfX0sCisgezE2LCAweDhjOTAsIDAsIHsweGEwLDB4MDIsMHgyOCwweDQwLDB4MDgsMHgwOCwweDAyLDB4N2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4Y2EwLCAwLCB7MHgyMCwweDAxLDB4MGEsMHgwMCwweDg1LDB4ODAsMHgyZCwweGY4LDB4MGIsMHhkYSwweDAyLDB4ZDYsMHg0MCwweDg1LDB4YTAsMHgyMSB9fSwKKyB7MTYsIDB4OGNiMCwgMCwgezB4ZTAsMHgwYiwweDQ4LDB4MDYsMHg5MiwweDA0LDB4YjUsMHg4MCwweDJkLDB4MjEsMHgwOCwweDAwLDB4MDIsMHg0ZSwweDAwLDB4ODcgfX0sCisgezE2LCAweDhjYzAsIDAsIHsweGE0LDB4MmQsMHg2MCwweDBiLDB4NjgsMHgwMiwweGRlLDB4YzIsMHhhZCwweDkwLDB4MmIsMHg2MCwweDI4LDB4NTgsMHg4MiwweGRjIH19LAorIHsxNiwgMHg4Y2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDRjLDB4NDAsMHhjMywweDEwLDB4MmMsMHg2YyB9fSwKKyB7MTYsIDB4OGNlMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4ODYsMHhhMiwweGY5LDB4YjAsMHhiMCwweGUwLDB4MGYsMHgyOSwweDgzLDB4Y2UsMHg0NCwweGYzLDB4ODAgfX0sCisgezE2LCAweDhjZjAsIDAsIHsweDNjLDB4YWMsMHgwYywweDMwLDB4MDMsMHgwYywweDAwLDB4YzMsMHgwMCwweDNjLDB4ZDUsMHgwZiwweDIwLDB4MDMsMHhjZSwweGMxIH19LAorIHsxNiwgMHg4ZDAwLCAwLCB7MHhlMCwweDEwLDB4YjgsMHg0MCwweDBjLDB4MDAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGQxMCwgMCwgezB4YzAsMHgxZCwweGJjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjYywweDBmLDB4MzIsMHgwMywweDY0LDB4MDgsMHhmOSwweDAwLDB4M2IgfX0sCisgezE2LCAweDhkMjAsIDAsIHsweDkwLDB4MGYsMHhmMCwweDQzLDB4ZTQsMHg0MCwweGZiLDB4MzQsMHgzZiwweDgxLDB4MDcsMHhkMSwweDAzLDB4YWQsMHgyMCwweGViIH19LAorIHsxNiwgMHg4ZDMwLCAwLCB7MHgyMCwweDdmLDB4YzQsMHgwZiwweGUxLDB4MDMsMHhmYywweDUwLDB4Y2QsMHgxMCwweDM1LDB4NDAsMHgwZiwweGQwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4OGQ0MCwgMCwgezB4MDIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDA0LDB4ZmQsMHgwNCwweDNkLDB4NDAgfX0sCisgezE2LCAweDhkNTAsIDAsIHsweDJkLDB4MzAsMHgwMiwweDNjLDB4MDAsMHhjOSwweDAxLDB4M2UsMHhjMCwweDRmLDB4YjgsMHg0MywweGVjLDB4MTAsMHhmYiwweDAwIH19LAorIHsxNiwgMHg4ZDYwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHhhMCwweDIzLDB4ZWMsMHg4MCwweGNiLDB4MzYsMHgzMiwweDgwLDB4NGQsMHhhOCwweDAzLDB4MmMsMHgxMCB9fSwKKyB7MTYsIDB4OGQ3MCwgMCwgezB4Y2IsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHg2YSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkODAsIDAsIHsweGM4LDB4MTEsMHg5MCwweDA4LDB4YjUsMHgwMCwweDJkLDB4YzAsMHgwOCwweDUwLDB4MDIsMHhiYywweDAyLDB4ODUsMHgwNCwweDJkIH19LAorIHsxNiwgMHg4ZDkwLCAwLCB7MHhjMCwweDhlLDB4NjAsMHgwNiwweGQ4LDB4MDQsMHhiNywweDA0LDB4MjEsMHg0MCwweDBiLDB4NzAsMHgwMiwweGZjLDB4ODAsMHhhZiB9fSwKKyB7MTYsIDB4OGRhMCwgMCwgezB4MjgsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4MDYsMHg0MCwweDg3LDB4MDAsMHgyMSwweDUwLDB4MDgsMHg1MCwweDAyLDB4MzIgfX0sCisgezE2LCAweDhkYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgyMCwweGI3LDB4ODAsMHgyYiwweDcwIH19LAorIHsxNiwgMHg4ZGMwLCAwLCB7MHgwOCwweGY4LDB4MDYsMHgxZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDcwLDB4MzIsMHhkZSwweDA0LDB4MzcsMHg4NCB9fSwKKyB7MTYsIDB4OGRkMCwgMCwgezB4MjUsMHhlMCwweDBiLDB4NjgsMHgwNiwweGRlLDB4ODAsMHg4NywweDgwLDB4MjEsMHhhMSwweDFiLDB4NjgsMHgwMiwweDFlLDB4NDAgfX0sCisgezE2LCAweDhkZTAsIDAsIHsweDlmLDB4ODAsMHgyMCwweDYwLDB4MDgsMHg1OCwweDAyLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZGYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgyMCwweGIzLDB4MDAsMHgyYywweDgwLDB4ODgsMHhiNCwweDIyLDB4OGQsMHgwMCwweDgzLDB4OTAsMHgyYyB9fSwKKyB7MTYsIDB4OGUwMCwgMCwgezB4YzAsMHgwYSwweDM4LDB4MDIsMHhjZSwweDA4LDB4YmIsMHgyMCwweDI0LDB4ZDAsMHgwYiwweGIzLDB4MDIsMHhjYywweDAwLDB4YTMgfX0sCisgezE2LCAweDhlMTAsIDAsIHsweDAwLDB4NjAsMHhkMiwweDBiLDB4MjAsMHgyYSwweDA0LDB4MDgsMHg5MywweDUwLDB4MjAsMHg0MCwweDA4LDB4MTcsMHgwYSwweDAyIH19LAorIHsxNiwgMHg4ZTIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGJhLDB4MDAsMHhiYSwweGEwLDB4M2YsMHg4NCB9fSwKKyB7MTYsIDB4OGUzMCwgMCwgezB4MWMsMHhlMCwweDBiLDB4MzgsMHg0MCwweDhlLDB4MDYsMHgyZSwweDgwLDB4MGIsMHhlMywweDAzLDB4ZjgsMHg4MCwweGZlLDB4ZTQgfX0sCisgezE2LCAweDhlNDAsIDAsIHsweGI3LDB4OTAsMHgwZiwweGVjLDB4MDIsMHhlOCwweDAwLDB4OGEsMHgwMCwweGEzLDB4YTAsMHgwOSwweGU0LDB4MDMsMHgyYSwweDAyIH19LAorIHsxNiwgMHg4ZTUwLCAwLCB7MHhkZSwweGMwLDB4ZjMsMHg4MCwweDBjLDB4NmMsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGU2MCwgMCwgezB4NDgsMHgwMSwweGUwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwLDB4MmUgfX0sCisgezE2LCAweDhlNzAsIDAsIHsweDMwLDB4MGEsMHg4NCwweDAzLDB4ZTAsMHgwNCwweGY4LDB4MDAsMHgzYSwweDAyLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHg4ZTgwLCAwLCB7MHgwMCwweDNlLDB4MDQsMHgwZCwweDgwLDB4ODMsMHhlMCwweDQwLDB4ZTgsMHgyMCwweDNlLDB4MDAsMHgyZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OGU5MCwgMCwgezB4MTAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NjQgfX0sCisgezE2LCAweDhlYTAsIDAsIHsweDRlLDB4OTAsMHg4MywweDI0LDB4ODAsMHhjOSwweDAwLDB4MzIsMHhlMCwweDBmLDB4MTAsMHgwMywweDI1LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHg4ZWIwLCAwLCB7MHgzMiwweDQ0LDB4MGYsMHg5MiwweDIzLDB4NjQsMHgwMCwweGMxLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDEzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4OGVjMCwgMCwgezB4YzksMHgwMCwweDIyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhlZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgyMCwweDJlLDB4NDAsMHg0OCwweDk2LDB4MjIsMHgyNSwweDAwLDB4ZDksMHhjMCwweGEyIH19LAorIHsxNiwgMHg4ZWUwLCAwLCB7MHg3MCwweDBiLDB4OTgsMHgwMiwweDI0LDB4MDAsMHhiOSwweDQwLDB4YTIsMHg3MCwweDRiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhkOSB9fSwKKyB7MTYsIDB4OGVmMCwgMCwgezB4MDAsMHhhMiwweDQwLDB4MmMsMHg5NCwweDIyLDB4ZTQsMHgwMiwweDg5LDB4MDAsMHhhMiwweDQwLDB4MjgsMHg5NCwweDEzLDB4MjAgfX0sCisgezE2LCAweDhmMDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHg4ZjEwLCAwLCB7MHgwYSwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODEsMHg4MCwweGEyLDB4NDQsMHgwYiwweDkxLDB4MDIsMHgyNSwweDAwLDB4MTksMHg0MCB9fSwKKyB7MTYsIDB4OGYyMCwgMCwgezB4NjIsMHg0MCwweDBiLDB4YjQsMHgwMiwweDQ0LDB4MDAsMHg4OSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTAsMHg4MiwweGM0LDB4MDEgfX0sCisgezE2LCAweDhmMzAsIDAsIHsweDgzLDB4MDIsMHgyOCwweDQwLDB4NDgsMHg5MCwweDgyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZjQwLCAwLCB7MHgwMCwweDA0LDB4MDUsMHg4MCwweGIxLDB4MDAsMHg2YywweDUxLDB4MDgsMHgxNCwweDFhLDB4MDUsMHgwMCwweDkzLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4OGY1MCwgMCwgezB4NDAsMHg4YiwweDE0LDB4MDIsMHgwNSwweDAwLDB4YjEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4MDYsMHgwNCwweDgwLDB4OTEgfX0sCisgezE2LCAweDhmNjAsIDAsIHsweDIwLDB4MjAsMHg0MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4YTgsMHg4MSwweDAwLDB4MjgsMHg0YSwweDA4LDB4OTAsMHg0YSwweDQyIH19LAorIHsxNiwgMHg4ZjcwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4OGY4MCwgMCwgezB4MGUsMHg4MCwweDAzLDB4MjgsMHgwMSwweGM4LDB4NTAsMHgzMiwweDk0LDB4OGIsMHhhMCwweDAzLDB4MjAsMHgwMCwweGIwLDB4NTAgfX0sCisgezE2LCAweDhmOTAsIDAsIHsweDMyLDB4ODAsMHgwZiwweDgwLDB4MDcsMHg2MSwweDUxLDB4YzgsMHg1MCwweDIyLDB4MDAsMHgwYywweDAwLDB4MDMsMHhlMCwweDg0IH19LAorIHsxNiwgMHg4ZmEwLCAwLCB7MHhjOCwweDA0LDB4M2EsMHgwOCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGZiMCwgMCwgezB4OTgsMHg5ZCwweGY0LDB4NDAsMHhiZCwweDQxLDB4M2YsMHg1MCwweDBmLDB4ZjQsMHgwMywweGY1LDB4MTAsMHhmZCwweDAwLDB4M2UgfX0sCisgezE2LCAweDhmYzAsIDAsIHsweDQwLDB4MGYsMHhkNCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MTAsMHgyZiwweDQwLDB4NGYsMHhkNCwweDQwLDB4YTQsMHg0OCwweGY5IH19LAorIHsxNiwgMHg4ZmQwLCAwLCB7MHgxMiwweDNmLDB4NWEsMHg4ZSwweGQyLDB4ODMsMHhmNCwweGE4LDB4ZjUsMHgyYywweDM3LDB4NGEsMHgwZiwweGQyLDB4ODMsMHhhNiB9fSwKKyB7MTYsIDB4OGZlMCwgMCwgezB4MTIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDgwLDB4ZmQsMHgyOCwweDNmLDB4NGMgfX0sCisgezE2LCAweDhmZjAsIDAsIHsweDBmLDB4NTAsMHgwMywweDNjLDB4NDQsMHhjZCwweDQwLDB4M2YsMHhkMCwweDBkLDB4ZDAsMHgwMiwweDE0LDB4MDEsMHhmZCwweGEwIH19LAorIHsxNiwgMHg5MDAwLCAwLCB7MHgzMSwweDQwLDB4MDMsMHhkMCwweDAzLDB4ZTcsMHg4OSwweGY5LDB4OTAsMHg3ZSwweDUwLDB4MGMsMHg5NCwweDAzLDB4ZTYsMHhjMCB9fSwKKyB7MTYsIDB4OTAxMCwgMCwgezB4YzksMHgxMCwweDMyLDB4NmQsMHgwZiwweDkxLDB4MDIsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkwMjAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDgwLDB4YjgsMHgwMSwweDJlLDB4MGMsMHg4YiwweDg0LDB4ODIsMHgyMCwweDQyLDB4ODgsMHhhMCwweDZlIH19LAorIHsxNiwgMHg5MDMwLCAwLCB7MHgyMCwweDA4LDB4ODAsMHgwMywweDYwLDB4MDAsMHg5OCwweGU4LDB4MjIsMHgwMCwweDA5LDB4ODAsMHgwMiwweGUzLDB4YzAsMHhlOCB9fSwKKyB7MTYsIDB4OTA0MCwgMCwgezB4ZDAsMHgyZSwweDI4LDB4MDgsMHg4YSwweDIzLDB4ZTIsMHg4NCwweGQ4LDB4YTAsMHgyMiwweDNkLDB4MGIsMHhjOCwweDAyLDB4Y2UgfX0sCisgezE2LCAweDkwNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzUsMHhiMCwweGIxLDB4MDAsMHgyYywweDQ4IH19LAorIHsxNiwgMHg5MDYwLCAwLCB7MHgwYiwweDEzLDB4MDIsMHgwNCwweDAyLDB4YjEsMHgyMCwweDJlLDB4NDAsMHg4OCwweDEwLDB4MjIsMHhjNCwweDAwLDB4YjEsMHgxNCB9fSwKKyB7MTYsIDB4OTA3MCwgMCwgezB4MjQsMHg0MCwweDBiLDB4MTAsMHg1MiwweGM0LDB4MDAsMHhiMSwweDIxLDB4MmQsMHg0OCwweDBhLDB4NTIsMHgwMiwweGQ1LDB4MDAgfX0sCisgezE2LCAweDkwODAsIDAsIHsweGJkLDB4MDAsMHhhZCwweDQwLDB4MGIsMHg1MiwweDAyLDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MDkwLCAwLCB7MHgxOCwweDU1LDB4YTUsMHgwMCwweGI5LDB4ODIsMHgyZSwweDQ5LDB4OGIsMHhiMCwweDEyLDB4MjQsMHgxMCwweDk5LDB4MDIsMHgyZSB9fSwKKyB7MTYsIDB4OTBhMCwgMCwgezB4NDAsMHgwOCwweGIyLDB4MDAsMHg2NSwweDAwLDB4OTksMHg4MCwweDI2LDB4NDQsMHgwOSwweDkxLDB4MDIsMHhlNCwweDA5LDB4YTkgfX0sCisgezE2LCAweDkwYjAsIDAsIHsweDA0LDB4MmUsMHg0NiwweDBhLDB4ZDQsMHgwMiwweGI0LDB4MDAsMHhiZCwweDQwLDB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGM2IH19LAorIHsxNiwgMHg5MGMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU3LDB4NDAsMHhmOSwweDgwLDB4MmUsMHg2MiB9fSwKKyB7MTYsIDB4OTBkMCwgMCwgezB4MGYsMHg5YywweDQyLDB4MjQsMHgwMCwweDk5LDB4MDEsMHgyZSwweDY4LDB4MmMsMHg5MiwweDAyLDB4NjQsMHgwMCwweGI5LDB4NDAgfX0sCisgezE2LCAweDkwZTAsIDAsIHsweGI2LDB4NjAsMHgwZiwweDlhLDB4MDMsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NzAsMHgzZSwweDk5LDB4MDYsMHhlNCwweDAyIH19LAorIHsxNiwgMHg5MGYwLCAwLCB7MHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTgsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTEwMCwgMCwgezB4NjgsMHgwMSwweGE2LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDFmLDB4MTIsMHhhYiwweGU0LDB4MDAsMHhlOSwweDkwLDB4M2UgfX0sCisgezE2LCAweDkxMTAsIDAsIHsweDQ5LDB4MGUsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzYSwweDQwLDB4MGQsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHg5MTIwLCAwLCB7MHgwMSwweDNlLDB4NjAsMHgwNSwweDkwLDB4MTMsMHhlNCwweDAwLDB4NTksMHgyMCwweDMyLDB4NDAsMHg4ZiwweDkxLDB4MDMsMHhkYSB9fSwKKyB7MTYsIDB4OTEzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwOCwweDNlLDB4MDEgfX0sCisgezE2LCAweDkxNDAsIDAsIHsweDBmLDB4ODQsMHg2MywweDAwLDB4MjIsMHhlOCwweDIwLDB4M2UsMHgxMywweDBmLDB4ODQsMHgwMywweGUxLDB4YzAsMHhkOCwweDRjIH19LAorIHsxNiwgMHg5MTUwLCAwLCB7MHgzMiwweDAwLDB4MGMsMHg4NCwweDQzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyMiwweDEwLDB4MGYsMHg4NCwweDAzLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTE2MCwgMCwgezB4YzgsMHgwMCwweGIyLDB4MDAsMHgwYywweGMwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHgwMCwweDJmLDB4ODYsMHg0YiwweGUwLDB4MDIsMHgzOSwweDA4LDB4OGUsMHgyMCwweDJkIH19LAorIHsxNiwgMHg5MTgwLCAwLCB7MHg5MCwweDBiLDB4ZWQsMHg5MiwweGY4LDB4MDIsMHg4ZSwweGUwLDB4YTMsMHg5OCwweDA4LDB4ZTAsMHgwMiwweGU4LDB4MDgsMHhiYSB9fSwKKyB7MTYsIDB4OTE5MCwgMCwgezB4MDAsMHg2MiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDAyLDB4ODAsMHgwMiwweDgwLDB4NDgsMHhlMCwweDAzLDB4NGEgfX0sCisgezE2LCAweDkxYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MTAsMHgyYywweGYwIH19LAorIHsxNiwgMHg5MWIwLCAwLCB7MHgwYSwweDE0LDB4MmEsMHgwZCwweDFhLDB4YjMsMHgwMSwweDI0LDB4ZDAsMHgwYiwweGJjLDB4MzIsMHhjYywweDA4LDB4MDMsMHgwMCB9fSwKKyB7MTYsIDB4OTFjMCwgMCwgezB4MjAsMHhjOCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4MjIsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MTEgfX0sCisgezE2LCAweDkxZDAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMwLDB4MjgsMHgyMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MWUwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMSwweDg1LDB4MDAsMHgyZCwweDAwLDB4MGIsMHg3MCwweDAyLDB4MTgsMHgzMiwweDg2LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4OTFmMCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MTYsMHhmZSwweDA0LDB4ODYsMHgwMCwweDI3LDB4YTAsMHg4YiwweDcwLDB4NDIsMHhkYywweDgwLDB4YjcgfX0sCisgezE2LCAweDkyMDAsIDAsIHsweDgwLDB4MjEsMHgwMSwweDA4LDB4ZjgsMHgwYSwweDE4LDB4MDAsMHg4NiwweDA4LDB4MjAsMHhhMCwweDA4LDB4ZTgsMHgwYSwweDY4IH19LAorIHsxNiwgMHg5MjEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwOCwweDNlLDB4MDIsMHhjNiwweDgwLDB4M2QsMHhlMCB9fSwKKyB7MTYsIDB4OTIyMCwgMCwgezB4MGYsMHg0OCwweDAzLDB4MDYsMHgwNCwweGY1LDB4ODIsMHgzNSwweGUwLDB4MGYsMHg3OCwweDAzLDB4ZGEsMHgwMCwweGQzLDB4ODAgfX0sCisgezE2LCAweDkyMzAsIDAsIHsweDMxLDB4NjAsMHgwNywweDc4LDB4MDMsMHhkZSwweDIwLDB4ZjMsMHhiMCwweDgxLDB4ZTAsMHg0ZiwweDY4LDB4MDcsMHgwZSwweDAyIH19LAorIHsxNiwgMHg5MjQwLCAwLCB7MHhjZiwweDgwLDB4MzEsMHhlMCwweDBjLDB4NzgsMHgxMywweDJhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTI1MCwgMCwgezB4MDgsMHgxZCwweGFkLDB4YTAsMHhmOSwweDAwLDB4M2YsMHgwMCwweDBmLDB4YjAsMHg1MywweGY4LDB4MTAsMHhhOSwweDAwLDB4M2UgfX0sCisgezE2LCAweDkyNjAsIDAsIHsweDAwLDB4MGYsMHg4MCwweDAxLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzYSwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiIH19LAorIHsxNiwgMHg5MjcwLCAwLCB7MHg3NCwweDNjLDB4MDAsMHgwZiwweDIwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweDMwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4OTI4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAyLDB4OGYsMHg4MCwweDM1LDB4ZTAgfX0sCisgezE2LCAweDkyOTAsIDAsIHsweDhkLDB4ZDksMHgwMywweDJlLDB4YzQsMHhmNiwweDgwLDB4MzIsMHhhNCwweDBjLDB4YjgsMHgwMywweGRlLDB4MDAsMHhjZiwweDkwIH19LAorIHsxNiwgMHg5MmEwLCAwLCB7MHgzYywweGU0LDB4MGMsMHhiOCwweDAzLDB4ZmUsMHg2NSwweGZmLDB4ODAsMHgwZiwweGVjLDB4OGYsMHhmOCwweDAzLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4OTJiMCwgMCwgezB4YzUsMHg4MCwweDMzLDB4ZTAsMHgwZiwweDY4LDB4MDMsMHgxMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyYzAsIDAsIHsweGFhLDB4MTEsMHg5YywweDgwLDB4ODQsMHhiMCwweDIwLDB4MjAsMHgyOSwweDczLDB4MGEsMHgwZSwweDgyLDB4YTIsMHhhMCwweGEyIH19LAorIHsxNiwgMHg5MmQwLCAwLCB7MHhhMCwweDRmLDB4M2IsMHgwMywweDg3LDB4ODQsMHhiMiwweDgwLDB4MmMsMHhhMCwweDBhLDB4N2QsMHgwMiwweGRlLDB4ODAsMHhmNyB9fSwKKyB7MTYsIDB4OTJlMCwgMCwgezB4MjAsMHgyNSwweDA2LDB4MDgsMHg3MCwweDAyLDB4YzgsMHg0MCwweDg0LDB4MDAsMHgzNSwweDgwLDB4MGIsMHg2MCwweDAzLDB4NmEgfX0sCisgezE2LCAweDkyZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgxMCwweDg2LDB4MzgsMHgyNywweGMwIH19LAorIHsxNiwgMHg5MzAwLCAwLCB7MHg0OSwweDU0LDB4MDYsMHg1NCwweDQwLDB4MWQsMHgyMCwweDIxLDB4Y2EsMHgwOSwweDYxLDB4NDAsMHhmOCwweDgwLDB4YjcsMHgyMCB9fSwKKyB7MTYsIDB4OTMxMCwgMCwgezB4MmYsMHgwMCwweDg5LDB4NzAsMHgxMiwweGRjLDB4ODEsMHhiNywweDA0LDB4MmQsMHhjOSwweDBhLDB4NjAsMHgwMiwweGNjLDB4MDAgfX0sCisgezE2LCAweDkzMjAsIDAsIHsweDhkLDB4MDAsMHgyZCwweGMwLDB4MGIsMHhmOCwweDAyLDB4MDQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MzMwLCAwLCB7MHg2MCwweDE0LDB4Y2QsMHgyOCwweDgwLDB4MDAsMHgyNCwweDAwLDB4MDksMHhiMCwweDIyLDB4NGMsMHgwMiwweGExLDB4MDEsMHgyMCB9fSwKKyB7MTYsIDB4OTM0MCwgMCwgezB4MzAsMHgxYiwweDIzLDB4MDIsMHhhZiwweDIwLDB4YjMsMHgwOCwweDJjLDB4ODAsMHgxYiwweDMwLDB4MDAsMHhjYywweDA0LDB4YTMgfX0sCisgezE2LCAweDkzNTAsIDAsIHsweDAxLDB4MjYsMHgzMCwweDA4LDB4YWMsMHgyMiwweGU4LDB4MDIsMHg4MCwweDA4LDB4MmUsMHg4MCwweDRiLDB4YjQsMHgwMiwweDU4IH19LAorIHsxNiwgMHg5MzYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MTAsMHg4YiwweDgwLDB4MzYsMHhmMCB9fSwKKyB7MTYsIDB4OTM3MCwgMCwgezB4MmQsMHhiYywweDBiLDB4NmMsMHgwMSwweGRhLDB4MDQsMHgyMiwweDQwLDB4N2QsMHg5NCwweDIyLDB4ZTQsMHgwMCwweGFiLDB4NDQgfX0sCisgezE2LCAweDkzODAsIDAsIHsweDJlLDB4YzAsMHgwOSwweGI4LDB4MDIsMHhmYywweDAwLDB4YmYsMHgwMCwweDNlLDB4ZjAsMHhjYSwweDkyLDB4MDIsMHhlNCwweDAyIH19LAorIHsxNiwgMHg5MzkwLCAwLCB7MHhjYiwweDAwLDB4NmUsMHg0MCwweDBmLDB4ODQsMHgwMSwweDJlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTNhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2EsMHhlMCwweDJlLDB4YmMsMHgwMywweDk4LDB4MDgsMHhlYSwweDQwLDB4MzYgfX0sCisgezE2LCAweDkzYjAsIDAsIHsweDQzLDB4OGMsMHg5MCwweDAzLDB4YTQsMHg0NCwweDJhLDB4NDAsMHgzZSwweDEwLDB4MGUsMHhiNSwweDgzLDB4ZWMsMHgxNCwweGZiIH19LAorIHsxNiwgMHg5M2MwLCAwLCB7MHgwMCwweDI2LDB4MDAsMHgwZSwweDkyLDB4MDMsMHhlMCwweDQwLDB4ZmEsMHgwMCwweDE2LDB4MDAsMHgwZiwweDgwLDB4MTMsMHhlMCB9fSwKKyB7MTYsIDB4OTNkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlYywweDAyLDB4ZmEsMHg4MCwweDNmLDB4ZTIgfX0sCisgezE2LCAweDkzZTAsIDAsIHsweDBmLDB4YjAsMHgwYiwweDI0LDB4MDAsMHhlZiwweDkyLDB4YmIsMHhlMCwweDFjLDB4ZDAsMHgwMywweDc0LDB4MDAsMHhjZiwweDA1IH19LAorIHsxNiwgMHg5M2YwLCAwLCB7MHgzYiwweDQwLDB4MGYsMHhjOCwweDAzLDB4NWMsMHgwMCwweGNmLDB4MDAsMHgzMiwweGMyLDB4NGQsMHhjMSwweDIzLDB4MzQsMHg0MCB9fSwKKyB7MTYsIDB4OTQwMCwgMCwgezB4Y2YsMHgwMCwweDE3LDB4NDQsMHgwYywweGQxLDB4ODMsMHgwMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0MTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHg4NCwweDJlLDB4NTQsMHgwYiwweGJjLDB4MGEsMHgyOSwweDgwLDB4OGIsMHg4MCwweDMyIH19LAorIHsxNiwgMHg5NDIwLCAwLCB7MHgwMCwweDA4LDB4OWMsMHgwMywweGE3LDB4MDAsMHhhYiwweDg0LDB4MmUsMHg3YywweDBiLDB4ODAsMHgwMiwweDJjLDB4MTAsMHhkYiB9fSwKKyB7MTYsIDB4OTQzMCwgMCwgezB4MDEsMHgzNiwweDAwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDgyLDB4MDAsMHgyMiwweDAwLDB4MDgsMHg5MCwweDAyLDB4MjQgfX0sCisgezE2LCAweDk0NDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MGMsMHgwMCwweDg5LDB4MTAsMHg2NiwweDkwIH19LAorIHsxNiwgMHg5NDUwLCAwLCB7MHgwYiwweGI4LDB4MDIsMHg2ZSwweDEyLDB4YTMsMHg0MSwweDIwLDB4MDQsMHgwYSwweDk4LDB4MjIsMHhlMiwweDAwLDB4ODksMHgxOSB9fSwKKyB7MTYsIDB4OTQ2MCwgMCwgezB4MmUsMHhjMCwweDRiLDB4MzEsMHgyMiwweDZjLDB4MDgsMHg4MywweDAwLDB4MjIsMHhjMCwweDA5LDB4OTAsMHgwMiwweDI0LDB4MDAgfX0sCisgezE2LCAweDk0NzAsIDAsIHsweDg5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NDgwLCAwLCB7MHgwOCwweDEwLDB4MGMsMHgwMCwweDgwLDB4MjAsMHgyYywweDBlLDB4MWIsMHgzMCwweDAyLDB4MDQsMHg0MSwweDgwLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4OTQ5MCwgMCwgezB4MTIsMHgxOCwweDE2LDB4NDIsMHgwMCwweDUwLDB4YTAsMHg0MCwweDJjLDB4ODgsMHgxYiwweDMwLDB4MDIsMHgwYywweDgxLDB4OTMgfX0sCisgezE2LCAweDk0YTAsIDAsIHsweDAwLDB4MjQsMHgwMCwweDA4LDB4MTAsMHgyYSwweDAwLDB4MGEsMHg4OCwweDAwLDB4MjgsMHgwMCwweDI4LDB4MDAsMHgwYSwweDAyIH19LAorIHsxNiwgMHg5NGIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDdjLDB4MTEsMHhlOCwweDAwLDB4MjYsMHg5OCB9fSwKKyB7MTYsIDB4OTRjMCwgMCwgezB4MGYsMHhiMCwweDEzLDB4MjEsMHgwYywweGViLDB4NjAsMHgzYSwweGQ4LDB4MjgsMHg4NCwweGEyLDB4ZTEsMHg4MCwweGM4LDB4MjAgfX0sCisgezE2LCAweDk0ZDAsIDAsIHsweDNlLDB4NWUsMHgxZiwweDgyLDB4MDMsMHg3YywweDAwLDB4Y2YsMHgwMCwweDMyLDB4YzAsMHg0ZCwweDgwLDB4MDcsMHgyNSwweDAwIH19LAorIHsxNiwgMHg5NGUwLCAwLCB7MHhjOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTRmMCwgMCwgezB4YTEsMHgxMSwweGZjLDB4MDAsMHhmOCwweDEzLDB4MWUsMHgwMCwweDBiLDB4ZjAsMHgwMSwweGYwLDB4ZDAsMHhmOSwweDE5LDB4MWYgfX0sCisgezE2LCAweDk1MDAsIDAsIHsweDA4LDB4NGYsMHhjMCwweDEzLDB4YTEsMHgwMCwweGY4LDB4NjIsMHgzZiwweGMwLDB4MGIsMHhjNCwweDA3LDB4ZWQsMHgwMCwweGZmIH19LAorIHsxNiwgMHg5NTEwLCAwLCB7MHgwMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MjMsMHhmMCwweGEwLDB4ZmMsMHgwMCwweDMzLDB4MDAsMHgwZiwweGQwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4OTUyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4ZmYsMHgwYywweDNmLDB4MjAgfX0sCisgezE2LCAweDk1MzAsIDAsIHsweDBjLDB4YzksMHgwMywweDMyLDB4MDAsMHhjZiwweDM4LDB4M2YsMHhkMCwweDBmLDB4NDgsMHgwMywweGZjLDB4YTAsMHhjZSwweDIyIH19LAorIHsxNiwgMHg5NTQwLCAwLCB7MHgzMywweDAwLDB4MGYsMHhjMSwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzZCwweGM0LDB4NGMsMHhjMCwweDIzLDB4OGMsMHhlNCB9fSwKKyB7MTYsIDB4OTU1MCwgMCwgezB4ZmYsMHgxMCwweDM3LDB4MjAsMHgwOCwweGYxLDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk1NjAsIDAsIHsweDgwLDB4MTAsMHhmZSwweDAwLDB4YmYsMHg4MCwweDJlLDB4NzQsMHgwNSwweDIyLDB4MDIsMHhhMiwweDEwLDB4ZGYsMHg2MSwweDJmIH19LAorIHsxNiwgMHg5NTcwLCAwLCB7MHhkMCwweDhiLDB4OTAsMHgwMiwweDNkLDB4YTQsMHhhYSwweDkwLDB4MjIsMHhmNCwweDBiLDB4MDcsMHgxMiwweDFkLDB4MjAsMHhiYiB9fSwKKyB7MTYsIDB4OTU4MCwgMCwgezB4YzAsMHgyZiwweGQ4LDB4ODgsMHg5NywweDgyLDB4ZmQsMHg4MCwweGVmLDB4NzIsMHgyMiwweDA4LDB4MjgsMHhmNiwweDIzLDB4ZTAgfX0sCisgezE2LCAweDk1OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg0MCwweGIzLDB4MDAsMHgyYywweDAwIH19LAorIHsxNiwgMHg5NWEwLCAwLCB7MHgwOCwweDgyLDB4MDIsMHgyMiwweDAwLDB4ODMsMHgwMSwweDA4LDB4Y2MsMHg4YiwweDIwLDB4ODIsMHhjYywweDAwLDB4OTAsMHgwMCB9fSwKKyB7MTYsIDB4OTViMCwgMCwgezB4MjAsMHgwMCwweDRiLDB4MTIsMHgwMiwweDBkLDB4ODAsMHhiMywweDQwLDB4MmMsMHhkOCwweDA4LDB4MjAsMHg0MiwweDhjLDB4ODAgfX0sCisgezE2LCAweDk1YzAsIDAsIHsweGIzLDB4MjAsMHgyNiwweDAyLDB4MTgsMHgzMywweDI2LDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NWQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwOSwweGJiLDB4MDAsMHgyZSwweDYwLDB4MDgsMHg4MCwweDAyLDB4YTIsMHgwMCwweDliLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4OTVlMCwgMCwgezB4YzAsMHgwYiwweGFjLDB4MDIsMHgyYywweDAwLDB4YmEsMHgwNiwweDIyLDB4YzIsMHgwYiwweDk0LDB4MDIsMHhhYywweDEwLDB4YmIgfX0sCisgezE2LCAweDk1ZjAsIDAsIHsweDAwLDB4MmUsMHhjMSwweDA4LDB4YTgsMHgwMiwweGVjLDB4MDAsMHhhYiwweDAwLDB4MjIsMHgwMCwweDA4LDB4YjAsMHgwNiwweGYwIH19LAorIHsxNiwgMHg5NjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgxNSwweGVjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHg2MCB9fSwKKyB7MTYsIDB4OTYxMCwgMCwgezB4MjgsMHg4MiwweDEzLDB4MGUsMHgwOCwweGNiLDB4MDAsMHgzYSwweGMwLDB4MGYsMHg4YywweDAzLDB4ZWMsMHgxMSwweGRiLDB4MjAgfX0sCisgezE2LCAweDk2MjAsIDAsIHsweGIyLDB4OTAsMHg0YiwweGE4LDB4MGIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJjLDB4YzAsMHgwYywweDg4LDB4MTMsMHhhYywweDAwIH19LAorIHsxNiwgMHg5NjMwLCAwLCB7MHhmMywweDAwLDB4MzYsMHgwNiwweDQ4LDB4YjAsMHgxMiwweGM0LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTY0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmYiwweDA4LDB4M2QsMHg0MCwweDhmLDB4ZWEsMHgwMSwweGY0LDB4MDAsMHhmZiwweDAxLDB4MmYgfX0sCisgezE2LCAweDk2NTAsIDAsIHsweGMwLDB4MGYsMHhkMCwweDIyLDB4ZmMsMHgwNCwweGFmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhlOSwweDAzLDB4N2MsMHgwMCwweGZmIH19LAorIHsxNiwgMHg5NjYwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweDkwLDB4NDMsMHhmYywweDIwLDB4ZWYsMHgwMiwweDNmLDB4MDAsMHg4ZiwweGYwLDB4MDMsMHhiOCB9fSwKKyB7MTYsIDB4OTY3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MTAsMHhhYywweDA4LDB4ZWIsMHgwMCwweDEyLDB4NDAgfX0sCisgezE2LCAweDk2ODAsIDAsIHsweDBmLDB4OTAsMHgwMywweDI4LDB4MjAsMHhhYiwweDAwLDB4M2EsMHhjMCwweDhmLDB4ODUsMHg4MywweGFjLDB4MTAsMHhmMywweDUwIH19LAorIHsxNiwgMHg5NjkwLCAwLCB7MHgzMiwweDkwLDB4NGMsMHgzNCwweDEzLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGMsMHg5OCwweDAzLDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4OTZhMCwgMCwgezB4ZWIsMHg4MCwweDMyLDB4MTIsMHgwZCwweGIwLDB4MGIsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2YjAsIDAsIHsweDg4LDB4MDEsMHgzYywweDEwLDB4MGYsMHgwNSwweGEyLDB4NTAsMHgwYywweDEwLDB4MDIsMHgyMiwweDEwLDB4OGYsMHgwMCwweDIzIH19LAorIHsxNiwgMHg5NmMwLCAwLCB7MHhjMCwweDBiLDB4ODgsMHgxMiwweDNjLDB4MDAsMHg5YiwweDgyLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDNjLDB4MDAsMHg4ZiB9fSwKKyB7MTYsIDB4OTZkMCwgMCwgezB4YTAsMHgyZiwweGMwLDB4MDgsMHhiMCwweDAyLDB4M2MsMHgwOCwweDhmLDB4MDIsMHgyMCwweDAwLDB4MDgsMHhmMCwweDAzLDB4MjYgfX0sCisgezE2LCAweDk2ZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGQsMHgyMCwweDkzLDB4MDAsMHgyMCwweGIyIH19LAorIHsxNiwgMHg5NmYwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHgwMSwweDAwLDB4YTMsMHgwMCwweDY4LDB4YzAsMHgwYiwweDg0LDB4MDIsMHhhYywweDAwLDB4YjMsMHg4MCB9fSwKKyB7MTYsIDB4OTcwMCwgMCwgezB4MjAsMHg0MCwweDBhLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhhMywweDA0LDB4MmMsMHhjMCwweDA4LDB4MDAsMHgwMiwweDBkLDB4MDAgfX0sCisgezE2LCAweDk3MTAsIDAsIHsweGEzLDB4MDAsMHgyMCwweDI0LDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NzIwLCAwLCB7MHg3MCwweDAxLDB4MWMsMHgyMCwweDk3LDB4ODAsMHgyMywweDYwLDB4MDgsMHg3OCwweDEyLDB4M2EsMHgwMCwweDgzLDB4OTEsMHgyOSB9fSwKKyB7MTYsIDB4OTczMCwgMCwgezB4ZTQsMHgwYiwweDU5LDB4MDIsMHgxZSwweDAwLDB4OTcsMHg5MCwweDIwLDB4ZmMsMHgwYSwweDc4LDB4MDIsMHgxZSwweDAwLDB4ODcgfX0sCisgezE2LCAweDk3NDAsIDAsIHsweDkwLDB4MmQsMHhlMCwweDE5LDB4NTksMHgwMiwweDFlLDB4ODAsMHg4MywweDgwLDB4NjEsMHhhMCwweDA4LDB4NzgsMHgwMiwweDE4IH19LAorIHsxNiwgMHg5NzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4NDAsMHhkMywweDMyLDB4MzAsMHgwNiB9fSwKKyB7MTYsIDB4OTc2MCwgMCwgezB4MGYsMHgzMCwweDAzLDB4MDQsMHg2NCwweGUzLDB4MDEsMHgzOCwweGM0LDB4MWYsMHgzMCwweDA3LDB4OGMsMHgxOCwweGYxLDB4MDAgfX0sCisgezE2LCAweDk3NzAsIDAsIHsweDMwLDB4NGMsMHgwZSwweDMwLDB4MDMsMHg0YywweDAwLDB4ZTMsMHgwMCwweDJjLDB4YzAsMHgwYywweDIwLDB4MDMsMHgwZSwweDAwIH19LAorIHsxNiwgMHg5NzgwLCAwLCB7MHhlMywweDAwLDB4MzIsMHgwOCwweDBjLDB4YjEsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTc5MCwgMCwgezB4NDAsMHgxZCwweDljLDB4ODAsMHhlZiwweDEwLDB4M2QsMHg0NCwweDRmLDB4ZjEsMHgwNywweGNjLDB4MDAsMHhmZiwweDA4LDB4MzYgfX0sCisgezE2LCAweDk3YTAsIDAsIHsweGM2LDB4Y2YsMHhiMCwweDAzLDB4ZmMsMHgwMCwweDk3LDB4MDAsMHhiZSwweGNjLDB4MGQsMHhiMSwweDAzLDB4ZmQsMHgwNCwweGZmIH19LAorIHsxNiwgMHg5N2IwLCAwLCB7MHgwYywweDNmLDB4ZDIsMHg5ZSwweGUwLDB4NGIsMHhmZCwweDIwLDB4ZmYsMHgwMiwweDNmLDB4ODAsMHgwZSwweGYwLDB4MTMsMHhkMCB9fSwKKyB7MTYsIDB4OTdjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhlYywweGMwLDB4Y2IsMHgyOCwweDNlLDB4YzAgfX0sCisgezE2LCAweDk3ZDAsIDAsIHsweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAxLDB4MzIsMHhlOSwweDBjLDB4MjgsMHgwMywweDJjLDB4MDAsMHhmYiwweDAwIH19LAorIHsxNiwgMHg5N2UwLCAwLCB7MHgzMiwweGMwLDB4MGMsMHhiNCwweDgzLDB4MmMsMHgwMSwweGVmLDB4MDAsMHhiMiwweGM4LDB4MGMsMHgyMCwweDAzLDB4NmQsMHgwMCB9fSwKKyB7MTYsIDB4OTdmMCwgMCwgezB4Y2IsMHgxMCwweDNlLDB4MDAsMHgwZiwweGIyLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4MDAsIDAsIHsweGM4LDB4OTEsMHg5YywweGM0LDB4ODcsMHg2MCwweDJkLDB4YzAsMHgwYiwweDYwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgxMiwweDIwIH19LAorIHsxNiwgMHg5ODEwLCAwLCB7MHhjYywweDBhLDB4NzAsMHgwMiwweDFjLDB4YzAsMHhiMywweDAwLDB4YTAsMHhjMCwweGM4LDB4NzAsMHgyMiwweDFjLDB4ODAsMHhiNyB9fSwKKyB7MTYsIDB4OTgyMCwgMCwgezB4MjQsMHgyMSwweGM4LDB4NDgsMHg1MCwweDAyLDB4MGMsMHg4MCwweDg3LDB4MTAsMHgyZCwweDQwLDB4MGIsMHg3MiwweDgyLDB4ZjIgfX0sCisgezE2LCAweDk4MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4OGUsMHgwMiwweDg3LDB4ODAsMHgyZCwweGUwIH19LAorIHsxNiwgMHg5ODQwLCAwLCB7MHgwYiwweDc4LDB4MTIsMHhkZSwweDAwLDB4YjcsMHhhMCwweDIxLDB4ZTAsMHgwOCwweGY4LDB4OGUsMHgxZSwweDQwLDB4YjcsMHg4OCB9fSwKKyB7MTYsIDB4OTg1MCwgMCwgezB4MjEsMHhlMCwweDA4LDB4MzgsMHgwMiwweDFlLDB4NDAsMHhiMywweGExLDB4MjAsMHhlOCwweDQ4LDB4ZjgsMHg4MiwweDVlLDB4MDIgfX0sCisgezE2LCAweDk4NjAsIDAsIHsweDg3LDB4ODAsMHgyZCwweDIyLDB4MGIsMHg3OSwweDAyLDB4ZTAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ODcwLCAwLCB7MHgwOCwweDA0LDB4Y2MsMHgwNCwweDgzLDB4MDIsMHgyYywweGQ0LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHhhMCB9fSwKKyB7MTYsIDB4OTg4MCwgMCwgezB4YzAsMHg4YSwweDM4LDB4MDYsMHgwYywweDAwLDB4YjMsMHg4MCwweDIwLDB4ZTEsMHg0OCwweDM5LDB4MTIsMHgyYywweDAwLDB4YjMgfX0sCisgezE2LCAweDk4OTAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHg4MiwweDZjLDB4MDAsMHg4MywweDAwLDB4MmMsMHg0OCwweDBiLDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHg5OGEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweGE4LDB4MDAsMHhjYSwweDAwLDB4M2YsMHhhMCB9fSwKKyB7MTYsIDB4OThiMCwgMCwgezB4MGYsMHhlNCwweDAzLDB4ZDgsMHgwMCwweGZhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhlOCwweDAzLDB4MjgsMHgwMCwweGZhLDB4NDAgfX0sCisgezE2LCAweDk4YzAsIDAsIHsweDMyLDB4YTgsMHgyYywweGEwLDB4MDksMHgyOCwweDA4LDB4ZjIsMHgwMCwweDMyLDB4ODAsMHgwYywweGU0LDB4MDMsMHg2OCwweDAwIH19LAorIHsxNiwgMHg5OGQwLCAwLCB7MHhjYSwweDAwLDB4M2YsMHg4MCwweDBmLDB4YTAsMHgwMywweGZiLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OThlMCwgMCwgezB4NDgsMHgwMCwweGMwLDB4MDAsMHhmOCwweDAxLDB4M2UsMHgxMiwweDBiLDB4ODAsMHgwMywweGUwLDB4NDAsMHhmOCwweDAwLDB4M2UgfX0sCisgezE2LCAweDk4ZjAsIDAsIHsweDAwLDB4NGYsMHg4NCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4MDgsMHgzZSwweDAwLDB4NGYsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHg5OTAwLCAwLCB7MHg0MSwweDNlLDB4MDAsMHgyZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OTkxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNiwweDAwLDB4YzksMHgxMiwweDNlLDB4NTAgfX0sCisgezE2LCAweDk5MjAsIDAsIHsweDhmLDB4OTAsMHg4MywweGU0LDB4MjAsMHhjMSwweDAwLDB4M2EsMHg0MSwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHg5OTMwLCAwLCB7MHgzMCwweDY4LDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzYSwweDQwLDB4MGUsMHg5OCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4OTk0MCwgMCwgezB4YzksMHg5MCwweDNlLDB4NjksMHgwYywweDEwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5NTAsIDAsIHsweDgwLDB4MDQsMHg2NywweDRhLDB4ODksMHg4MCwweDJlLDB4NTAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDgwLDB4YTksMHgwMCwweDIyIH19LAorIHsxNiwgMHg5OTYwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAxLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MTAsMHg4OSB9fSwKKyB7MTYsIDB4OTk3MCwgMCwgezB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MywweDAyLDB4MjQsMHgyMiwweDg5LDB4NDIsMHgyYywweDYwLDB4NDgsMHg5MCwweDAyLDB4MjAgfX0sCisgezE2LCAweDk5ODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4MjQsMHgwMCwweDk5LDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHg5OTkwLCAwLCB7MHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCB9fSwKKyB7MTYsIDB4OTlhMCwgMCwgezB4MjMsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDI0LDB4MDAsMHg5OSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTAsMHgwNiwweDI0LDB4NDAgfX0sCisgezE2LCAweDk5YjAsIDAsIHsweDg5LDB4NDEsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OWMwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHg4MCwweDkxLDB4MjAsMHgyYywweDQ4LDB4MGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGExLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4OTlkMCwgMCwgezB4NDgsMHgwYiwweDEwLDB4MDIsMHhjNCwweDgwLDB4YjEsMHgyMCwweGExLDB4NDksMHgwOCwweDUyLDB4NGEsMHgwNCwweDgwLDB4ODEgfX0sCisgezE2LCAweDk5ZTAsIDAsIHsweDAwLDB4MjAsMHg0OCwweDQ4LDB4MTIsMHgwYSwweDA0LDB4ODAsMHg4MSwweDIwLDB4MmMsMHg0MCwweDI4LDB4MTIsMHgwMiwweDAyIH19LAorIHsxNiwgMHg5OWYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDgsMHhkOCwweDA0LDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4OWEwMCwgMCwgezB4MGYsMHg4NSwweDAzLDB4ZTAsMHgwMCwweGMwLDB4NTAsMHgzYSwweDE0LDB4MGYsMHhhNSwweDAzLDB4ZTEsMHg0MCwweGY4LDB4MDIgfX0sCisgezE2LCAweDlhMTAsIDAsIHsweDMyLDB4ODAsMHgyYywweGM1LDB4MDMsMHgyMSwweDQwLDB4ZGEsMHgwMCwweDNhLDB4MTQsMHgwZSwweDg1LDB4NDMsMHgyMSwweDQwIH19LAorIHsxNiwgMHg5YTIwLCAwLCB7MHhjOCwweDUyLDB4M2UsMHgxNCwweDBjLDB4ODUsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWEzMCwgMCwgezB4ODgsMHgxZCwweGU0LDB4NDQsMHhlOSwweDEwLDB4M2YsMHg0NCwweDRmLDB4ZDAsMHgwMiwweGZjLDB4MDAsMHhmOSwweDEyLDB4M2UgfX0sCisgezE2LCAweDlhNDAsIDAsIHsweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzZSwweDQ0LDB4NGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGU5IH19LAorIHsxNiwgMHg5YTUwLCAwLCB7MHg0MCwweDNlLDB4NDQsMHgwZiwweGQxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMiwweDNmLDB4NDAsMHgwZiwweDkxLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4OWE2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhmNiwweGEwLDB4ZmQsMHg4MCwweGIzLDB4NDAgfX0sCisgezE2LCAweDlhNzAsIDAsIHsweDBjLDB4MTAsMHgwMywweDE0LDB4MDAsMHhmZCwweGEwLDB4MzIsMHg0MCwweDBmLDB4ZDEsMHgwMywweGU0LDB4MDAsMHhmNSwweDg2IH19LAorIHsxNiwgMHg5YTgwLCAwLCB7MHgzMywweDYwLDB4MmMsMHg5YSwweDgzLDB4MjQsMHgwNCwweGZkLDB4YTgsMHgyMiwweDQwLDB4MGQsMHg1MCwweDQzLDB4ZjQsMHgwMCB9fSwKKyB7MTYsIDB4OWE5MCwgMCwgezB4ZmQsMHgwMCwweDMzLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhYTAsIDAsIHsweDc4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHgwMCwweDIyLDB4MDAsMHgyOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4YjgsMHgwMCwweGEyIH19LAorIHsxNiwgMHg5YWIwLCAwLCB7MHgwMCwweDBiLDB4OGEsMHgxMiwweGUwLDB4MDAsMHhiOCwweDA0LDB4MjIsMHgxNCwweDA4LDB4ODQsMHgwMiwweDIwLDB4MDAsMHhiOCB9fSwKKyB7MTYsIDB4OWFjMCwgMCwgezB4NDAsMHgyMCwweDAwLDB4ODgsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHhhMiwweDAwLDB4MGIsMHg4MCwweDAyLDB4MGUgfX0sCisgezE2LCAweDlhZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHgwMCwweGIxLDB4NDIsMHgyMCwweDQwIH19LAorIHsxNiwgMHg5YWUwLCAwLCB7MHgwOCwweDEwLDB4MDIsMHgwNCwweDAwLDB4YjEsMHg0MCwweDIwLDB4NDAsMHgwYiwweDEwLDB4MDYsMHhjNCwweDAwLDB4YjEsMHg0MCB9fSwKKyB7MTYsIDB4OWFmMCwgMCwgezB4MjQsMHg0MCwweDA4LDB4MTAsMHgwMiwweDQ0LDB4MDQsMHhiMSwweDAwLDB4NjAsMHg0MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4MDAgfX0sCisgezE2LCAweDliMDAsIDAsIHsweGIxLDB4MDAsMHgyMCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YjEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MDIsMHgyMiwweDYwLDB4MDgsMHg5NCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDEsMHgyMiB9fSwKKyB7MTYsIDB4OWIyMCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MDYsMHhlNCwweDAwLDB4YjksMHgyMCwweDI2LDB4NDAsMHgwOCwweDk0LDB4MDIsMHg2NCwweDA4LDB4YjkgfX0sCisgezE2LCAweDliMzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDA4LDB4OTIsMHgwMiwweGVjLDB4MDgsMHhiOSwweDA0LDB4MjIsMHg0MSwweDBiLDB4MTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHg5YjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MTAsMHhmMSwweDAwLDB4MzIsMHg2MCB9fSwKKyB7MTYsIDB4OWI1MCwgMCwgezB4MGMsMHg5NCwweDBiLDB4MjUsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4OGYsMHg5NCwweGQzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweDliNjAsIDAsIHsweDM2LDB4NDAsMHg0YywweDkwLDB4MGIsMHg2NCwweDAwLDB4ZjEsMHgwMCwweDMyLDB4NDAsMHgwZCwweDkyLDB4MTIsMHhlNCwweDAwIH19LAorIHsxNiwgMHg5YjcwLCAwLCB7MHhmOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWI4MCwgMCwgezB4NjgsMHg0MSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDhmLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweDliOTAsIDAsIHsweDQwLDB4MGYsMHg5YywweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHhiYSwweDQwLDB4MmYsMHg5MCwweDIzLDB4YTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHg5YmEwLCAwLCB7MHgwOCwweGJlLDB4NDAsMHhjZiwweDkwLDB4MDMsMHhlNCwweDEwLDB4ZjEsMHgwMSwweDNlLDB4NDEsMHgwZiwweDkwLDB4MDMsMHhkYSB9fSwKKyB7MTYsIDB4OWJiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweGM4LDB4ZjgsMHgwMCwweDNlLDB4MDMgfX0sCisgezE2LCAweDliYzAsIDAsIHsweDBjLDB4ODQsMHgwMywweGExLDB4MTAsMHhlOCwweDAwLDB4MzIsMHgwMCwweDhjLDB4ODUsMHg4MywweGUwLDB4MDAsMHhjMCwweDAwIH19LAorIHsxNiwgMHg5YmQwLCAwLCB7MHgzOCwweDBjLDB4MmMsMHgwMCwweDAzLDB4NjAsMHgwMCwweGM4LDB4MDAsMHgzYywweDAwLDB4MGQsMHg4MCwweDAyLDB4MjAsMHgxMCB9fSwKKyB7MTYsIDB4OWJlMCwgMCwgezB4YzgsMHgyMCwweGIyLDB4MDIsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliZjAsIDAsIHsweDI4LDB4MDUsMHgzOSwweDEwLDB4YmUsMHgwNCwweDZmLDB4YTAsMHgwOCwweGEwLDB4MDIsMHgzYSwweDAwLDB4ODIsMHgwMCwweGEyIH19LAorIHsxNiwgMHg5YzAwLCAwLCB7MHg4MCwweDhkLDB4ZWMsMHgwMywweGE4LDB4MDAsMHg4YSwweDAwLDB4MjMsMHg4MCwweDA4LDB4YTAsMHgyMiwweDI4LDB4MDAsMHg4ZSB9fSwKKyB7MTYsIDB4OWMxMCwgMCwgezB4Y2MsMHgyZiwweDgwLDB4MDgsMHhlOCwweGMyLDB4YjgsMHgwMCwweDhlLDB4NjAsMHgyMywweDkwLDB4MGIsMHhhMCwweDAyLDB4Y2EgfX0sCisgezE2LCAweDljMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGUsMHgwOCwweGIwLDB4NzIsMHgyYywweGQwIH19LAorIHsxNiwgMHg5YzMwLCAwLCB7MHgyOCwweGIwLDB4MDYsMHg4YywweDAxLDB4YTEsMHgwMiwweDIwLDB4YzAsMHgwOCwweDM4LDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4OWM0MCwgMCwgezB4MjAsMHhjMCwweDI5LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MSwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzIsMHgwMiwweDBjLDB4NDAgfX0sCisgezE2LCAweDljNTAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGY0LDB4MGIsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YzYwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwMCwweGI0LDB4MDAsMHgyZCwweGQwLDB4NDgsMHhmMiwweDAyLDB4MWUsMHgyMSwweDg1LDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4OWM3MCwgMCwgezB4ZTgsMHgwOSwweDcyLDB4MDIsMHg4ZSwweDgwLDB4OGYsMHgwMSwweDIwLDB4YzAsMHgwOSwweDcyLDB4MDIsMHgwZSwweDgwLDB4ODcgfX0sCisgezE2LCAweDljODAsIDAsIHsweDAwLDB4MmQsMHhjYywweDE4LDB4NTgsMHgwMiwweDhlLDB4MDAsMHg4NSwweDAwLDB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweGU4IH19LAorIHsxNiwgMHg5YzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhiNCwweDgwLDB4MmQsMHhlMCB9fSwKKyB7MTYsIDB4OWNhMCwgMCwgezB4MGMsMHg3OCwweDgzLDB4OWEsMHgwMCwweGVkLDB4ZDAsMHgzMSwweGY0LDB4MGMsMHg2YSwweDAzLDB4ZGUsMHg4MiwweGM3LDB4ODAgfX0sCisgezE2LCAweDljYjAsIDAsIHsweDM5LDB4ZTAsMHgwZCwweGY4LDB4ODMsMHg1ZSwweGMyLDB4YzUsMHg4MCwweDNkLDB4ZTgsMHgwYywweDY4LDB4MDMsMHgxMiwweDAwIH19LAorIHsxNiwgMHg5Y2MwLCAwLCB7MHhjZiwweDgwLDB4MzEsMHhlMCwweDBmLDB4N2UsMHg4MywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWNkMCwgMCwgezB4MDgsMHgwZCwweGFjLDB4MDgsMHhmOCwweDAwLDB4M2MsMHhjMCwweDBmLDB4YjMsMHgwMywweGVjLDB4MDAsMHhmOSwweDAyLDB4M2UgfX0sCisgezE2LCAweDljZTAsIDAsIHsweGM4LDB4MGYsMHhiMCwweDAzLDB4ZWQsMHg0MCwweGZiLDB4MDAsMHhiZSwweDgwLDB4MGUsMHhiMywweDAzLDB4ZWQsMHhjMCwweGZiIH19LAorIHsxNiwgMHg5Y2YwLCAwLCB7MHgwMCwweDNlLDB4ZDIsMHgyZSwweDgwLDB4MDMsMHhlYywweDAyLDB4ZjksMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4OWQwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4ZjAsMHg5MSwweDMzLDB4ZTAgfX0sCisgezE2LCAweDlkMTAsIDAsIHsweDhmLDB4ZjgsMHgwMywweGZlLDB4MDAsMHhmZCwweDgwLDB4M2YsMHhlMCwweDBjLDB4NzgsMHg4MywweDNmLDB4MDAsMHhjZiwweDgwIH19LAorIHsxNiwgMHg5ZDIwLCAwLCB7MHgzZiwweGEwLDB4MGMsMHhmOCwweDAzLDB4M2UsMHgwMCwweGNkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDEzLDB4ZmUsMHgxMCB9fSwKKyB7MTYsIDB4OWQzMCwgMCwgezB4ZmYsMHg4MCwweDNmLDB4MjAsMHgwZiwweGY5LDB4NDMsMHhkMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkNDAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4YjQsMHhjMSwweDMxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkNCwweDEwLDB4ZTUsMHgyMCwweDJmIH19LAorIHsxNiwgMHg5ZDUwLCAwLCB7MHhjOCwweDBmLDB4NDAsMHgwMywweDVjLDB4MDAsMHg4NywweDAwLDB4MmQsMHg4MCwweDA4LDB4NzAsMHgwMiwweDFjLDB4NDAsMHg4NyB9fSwKKyB7MTYsIDB4OWQ2MCwgMCwgezB4MTAsMHgyZCwweGMwLDB4MGIsMHg3NiwweDAyLDB4ZGMsMHg4MCwweGI3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZWEgfX0sCisgezE2LCAweDlkNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OWMsMHgwMCwweGI2LDB4MjIsMHgyMSwweGQwIH19LAorIHsxNiwgMHg5ZDgwLCAwLCB7MHgwYiwweDcwLDB4ODIsMHhkOCwweDQwLDB4YjUsMHgwMiwweDJkLDB4YzAsMHg4OCwweDY1LDB4MDIsMHgwYywweDAwLDB4ODcsMHgxOCB9fSwKKyB7MTYsIDB4OWQ5MCwgMCwgezB4MmMsMHgwNCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDIsMHg4NSwweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHg0NiwweDkwLDB4MTAgfX0sCisgezE2LCAweDlkYTAsIDAsIHsweGI2LDB4MDAsMHgyZCwweDAwLDB4MGIsMHg3MCwweDIyLDB4YzQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZGIwLCAwLCB7MHg2MCwweDE0LDB4Y2MsMHgwOCwweGIyLDB4MDAsMHhhNCwweGMwLDB4MGIsMHgzMCwweDQyLDB4YzYsMHgxMCwweGExLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4OWRjMCwgMCwgezB4YzAsMHgwYSwweDAwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4MDgsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMgfX0sCisgezE2LCAweDlkZDAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDBiLDB4MTgsMHg4MiwweGM0LDB4MDAsMHhiMCwweDAwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgxMiwweGQ4IH19LAorIHsxNiwgMHg5ZGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjgsMHgxNSwweGFjLDB4MDAsMHgzOCwweDAwLDB4MzIsMHg1MCB9fSwKKyB7MTYsIDB4OWRmMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZTYsMHgyMCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MDgsMHhkMCwweDAyLDB4M2MsMHgwMiwweGNiLDB4ODAgfX0sCisgezE2LCAweDllMDAsIDAsIHsweDNjLDB4NTAsMHgyYywweGYwLDB4MGEsMHhiYywweDAwLDB4YzksMHgwMCwweDNmLDB4YzAsMHgwZiwweGJlLDB4MDMsMHhhYywweDAwIH19LAorIHsxNiwgMHg5ZTEwLCAwLCB7MHhmYSwweDAyLDB4MmUsMHhmNywweDRmLDB4ZjAsMHgwMywweGVlLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWUyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmMSwweDAwLDB4M2EsMHhmMCwweDBmLDB4YjAsMHgwMywweGU5LDB4MDAsMHhmOSwweDAxLDB4M2UgfX0sCisgezE2LCAweDllMzAsIDAsIHsweGMwLDB4MGYsMHg5MCwweDEzLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweDU1LDB4MGYsMHhiMCwweDAxLDB4NmMsMHgwMCwweGZiIH19LAorIHsxNiwgMHg5ZTQwLCAwLCB7MHgwMiwweDNlLDB4YzAsMHgwZiwweDkwLDB4NzMsMHhlMCwweDAwLDB4ZjgsMHg0MSwweDNlLDB4MDAsMHgwZiwweDMwLDB4MDEsMHhlMCB9fSwKKyB7MTYsIDB4OWU1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhmYywweDAwLDB4ZmMsMHgwMCwweDMzLDB4YzAgfX0sCisgezE2LCAweDllNjAsIDAsIHsweDFmLDB4ZjAsMHgxMywweGYwLDB4MDgsMHhmZCwweDAyLDB4M2YsMHhjMCwweDhkLDB4YzAsMHgwMywweDNjLDB4MDAsMHhjZiwweGEwIH19LAorIHsxNiwgMHg5ZTcwLCAwLCB7MHgzZiwweDgwLDB4MGMsMHg3MCwweDAzLDB4M2MsMHgxMCwweGZjLDB4MDAsMHgzNywweGMwLDB4MGYsMHhlMCwweDAzLDB4YjAsMHgwMCB9fSwKKyB7MTYsIDB4OWU4MCwgMCwgezB4ZmUsMHgwMCwweDNmLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwNCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDllOTAsIDAsIHsweDg0LDB4MDQsMHg2ZSwweDAwLDB4YjksMHhjMiwweGEyLDB4ZjAsMHgwYiwweGIwLDB4NDIsMHhlYiwweDAwLDB4YjksMHgwMCwweDJlIH19LAorIHsxNiwgMHg5ZWEwLCAwLCB7MHhjMCwweDBmLDB4MTgsMHgwMywweDZjLDB4MDAsMHhkOSwweDgxLDB4MmUsMHhiMCwweDBhLDB4YjAsMHg0MiwweDJjLDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4OWViMCwgMCwgezB4YzYsMHgyZSwweGMwLDB4MGIsMHg4YywweDAyLDB4ZTMsMHgwMCwweGI4LDB4YzAsMHgzYywweGEwLDB4MGQsMHhiMCwweDAyLDB4MjAgfX0sCisgezE2LCAweDllYzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmYsMHgwMCwweGI4LDB4ODAsMHgyMiwweGUyIH19LAorIHsxNiwgMHg5ZWQwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHhlNiwweDIwLDB4YjksMHgwMCwweDJjLDB4YzAsMHgwOCwweGI4LDB4MDIsMHgwYywweDAwLDB4OGIsMHgwMCB9fSwKKyB7MTYsIDB4OWVlMCwgMCwgezB4MmUsMHgzMCwweDQ4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiOSwweGMwLDB4MmUsMHhjMSwweDBiLDB4ODgsMHgwMiwweGVlLDB4MTAgfX0sCisgezE2LCAweDllZjAsIDAsIHsweGI5LDB4YzAsMHgyZSwweDIwLDB4MTksMHhiMCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZjAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIwLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDA2LDB4YzAsMHgwMCwweDkxLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4OWYxMCwgMCwgezB4YzAsMHg0OSwweDgwLDB4MDIsMHg0YywweDA0LDB4OTEsMHgwMCwweDJjLDB4MDAsMHg4YSwweDMwLDB4MGEsMHgwYywweDA0LDB4YjEgfX0sCisgezE2LCAweDlmMjAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDFiLDB4MDAsMHgxMiwweDQ5LDB4MTAsMHhiMSwweDAwLDB4MmUsMHgyMCwweDA5LDB4MzAsMHgwMiwweDAyIH19LAorIHsxNiwgMHg5ZjMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhiOCwweDIwLDB4MjIsMHhjMCB9fSwKKyB7MTYsIDB4OWY0MCwgMCwgezB4OGIsMHhmMCwweDAzLDB4ZTAsMHgwOCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhhMCwweDAzLDB4M2MsMHgwMCwweGNiLDB4MDAgfX0sCisgezE2LCAweDlmNTAsIDAsIHsweDNlLDB4MDAsMHg0YywweGYwLDB4MGEsMHgzYywweDAwLDB4YjksMHgwMCwweDM3LDB4YzEsMHgwZiwweGEwLDB4MDMsMHhlMCwweDAwIH19LAorIHsxNiwgMHg5ZjYwLCAwLCB7MHhmYSwweDAwLDB4M2UsMHgwMCwweDBkLDB4ZjAsMHgwYiwweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWY3MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDEsMHhmYywweDQwLDB4M2YsMHg4MCwweDRmLDB4ZjAsMHgwMiwweGYwLDB4MDAsMHhmZCwweDAwLDB4M2YgfX0sCisgezE2LCAweDlmODAsIDAsIHsweGMxLDB4MGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDAwLDB4NGYsMHhmMCwweDYzLDB4ZmMsMHgwMCwweGZkIH19LAorIHsxNiwgMHg5ZjkwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDgwLDB4ZmMsMHgwMCwweDdiLDB4MDAsMHgwZiwweGYwLDB4NDMsMHhlOCB9fSwKKyB7MTYsIDB4OWZhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmOCwweDAwLDB4YzgsMHgxMCwweDMzLDB4MDQgfX0sCisgezE2LCAweDlmYjAsIDAsIHsweDBjLDB4NDAsMHgwMiwweDM0LDB4MDAsMHhjOCwweDg1LDB4MWYsMHhjMCwweDJkLDB4ZDksMHgwMywweGZjLDB4YzAsMHhkYiwweDI4IH19LAorIHsxNiwgMHg5ZmMwLCAwLCB7MHgzNywweDY0LDB4MGYsMHhkYiwweDAzLDB4M2UsMHgwMCwweGZmLDB4MjUsMHgzZiwweGM4LDB4MGUsMHhmMiwweDAzLDB4ZmUsMHgyMCB9fSwKKyB7MTYsIDB4OWZkMCwgMCwgezB4ZmYsMHhhNCwweDM3LDB4YzQsMHgwYywweGM4LDB4MDMsMHgzMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmZTAsIDAsIHsweDgwLDB4MTAsMHhlOCwweDAwLDB4ODgsMHgyMCwweDIyLDB4MDAsMHgwOCwweDg4LDB4MTIsMHgyNiwweDA0LDB4ODksMHg4MiwweDJlIH19LAorIHsxNiwgMHg5ZmYwLCAwLCB7MHhmNCwweDQ4LDB4YjgsMHgwMiwweGZjLDB4YzQsMHg5OCwweGMyLDB4MjIsMHg3YywweDRiLDB4OWQsMHg0MiwweDI2LDB4MDgsMHhiZiB9fSwKKyB7MTYsIDB4YTAwMCwgMCwgezB4MTgsMHg3NywweGU0LDB4MDgsMHhmMSwweDgyLDB4ZWYsMHgwMCwweGJiLDB4ZDAsMHgyMiwweGQ4LDB4MDgsMHg5MCwweDgzLDB4NjAgfX0sCisgezE2LCAweGEwMTAsIDAsIHsweDAyLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDQ1LDB4YzgsMHgwNCwweGEwLDB4MDAsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhMDIwLCAwLCB7MHgwYSwweDAwLDB4MDIsMHgwYywweDAwLDB4ODIsMHgwNCwweDJjLDB4ZTAsMHgwOCwweDEwLDB4MDIsMHhjYywweDgwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4YTAzMCwgMCwgezB4MjQsMHgwMCwweDBiLDB4MTAsMHgwNiwweGM4LDB4MDEsMHhiMywweDIwLDB4MmMsMHhjMCwweDI5LDB4MzIsMHgwMiwweGM4LDB4MDggfX0sCisgezE2LCAweGEwNDAsIDAsIHsweGIxLDB4MDAsMHgyNCwweGQwLDB4MDgsMHg4MiwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMDUwLCAwLCB7MHhjMCwweDE1LDB4YTgsMHgwMCwweGE4LDB4MGMsMHgyNiwweDAwLDB4MGEsMHg4MCwweDAyLDB4MmMsMHgxNCwweDhhLDB4MDIsMHg2ZSB9fSwKKyB7MTYsIDB4YTA2MCwgMCwgezB4ZTAsMHgwOCwweGIwLDB4MDIsMHg0YywweDA4LDB4YTgsMHgwMCwweDI2LDB4MjAsMHgwYiwweDljLDB4MDIsMHhlNCwweDAwLDB4YmIgfX0sCisgezE2LCAweGEwNzAsIDAsIHsweDA0LDB4MjIsMHhjMCwweDE5LDB4YjAsMHgwMiwweGU4LDB4MDEsMHhiYiwweDExLDB4MDIsMHhjMCwweDg4LDB4OTAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhhMDgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweGVjLDB4MDIsMHhlYSwweDQwLDB4YjYsMHg2MCB9fSwKKyB7MTYsIDB4YTA5MCwgMCwgezB4MmUsMHg5OCwweDBiLDB4MjAsMHgwMiwweGM4LDB4MDIsMHgzZSwweGMwLDB4MGQsMHg5OCwweDAzLDB4ZWMsMHgwMiwweGRiLDB4ODggfX0sCisgezE2LCAweGEwYTAsIDAsIHsweGI2LDB4MjEsMHgwZiwweDg4LDB4MDMsMHhhYywweDA4LDB4ZmIsMHgwMCwweDJjLDB4YzAsMHgwZSwweGIwLDB4NDMsMHhlNSwweDgwIH19LAorIHsxNiwgMHhhMGIwLCAwLCB7MHhmMCwweDYwLDB4MzYsMHhjMCwweDBjLDB4MDEsMHg0MywweDQ4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTBjMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhkNiwweDAxLDB4M2IsMHg2NCwweDg1LDB4ZDksMHgwMywweGYwLDB4MGMsMHhmZiwweDAwLDB4M2UgfX0sCisgezE2LCAweGEwZDAsIDAsIHsweGMxLDB4MGYsMHhmYywweDIxLDB4ZWMsMHgwMCwweGQ3LDB4OTAsMHgzYiwweDQwLDB4MGYsMHg1MCwweDAzLDB4M2MsMHgwMCwweGZmIH19LAorIHsxNiwgMHhhMGUwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg4ZSwweGYwLDB4MDMsMHhmNCwweDQwLDB4ZmQsMHg4OCwweDNmLDB4YzAsMHgyZiwweGQwLDB4MDIsMHg3OCB9fSwKKyB7MTYsIDB4YTBmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4YywweDAwLDB4ZGEsMHg0MCwweDNjLDB4NDAgfX0sCisgezE2LCAweGExMDAsIDAsIHsweDBmLDB4MTAsMHgwMywweDQ4LDB4MDAsMHhmOSwweDIyLDB4M2MsMHhjMiwweDBlLDB4OTAsMHg4MywweGVjLDB4MDIsMHhkYiwweDA0IH19LAorIHsxNiwgMHhhMTEwLCAwLCB7MHgzYSwweDA4LDB4MGYsMHg4NCwweDg3LDB4ZTgsMHgwMCwweGNiLDB4MDAsMHgzZSwweGM0LDB4MGUsMHhiMCwweDAzLDB4ZWQsMHgwMCB9fSwKKyB7MTYsIDB4YTEyMCwgMCwgezB4ZTgsMHg0MiwweDNhLDB4YzAsMHgwZiwweDgwLDB4MGIsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExMzAsIDAsIHsweDg4LDB4MDUsMHgyYywweDA4LDB4OGEsMHgwMCwweDJlLDB4NDIsMHg4YiwweDkwLDB4MDIsMHgyOCwweDE4LDB4YmIsMHg0OSwweDIyIH19LAorIHsxNiwgMHhhMTQwLCAwLCB7MHhkMCwweDM4LDB4YmMsMHg4MiwweGZjLDB4MDAsMHhlOCwweDAyLDB4MjIsMHg2MiwweGNiLDB4OWMsMHgwMCwweGVmLDB4NjAsMHhkZiB9fSwKKyB7MTYsIDB4YTE1MCwgMCwgezB4MDAsMHgyZiwweGMwLDB4MGIsMHhmMCwweDAyLDB4ZWMsMHgwMCwweDA5LDB4NDAsMHgzNywweGMwLDB4MGIsMHg5MCwweDAyLDB4MzIgfX0sCisgezE2LCAweGExNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDgsMHgxMCwweDExLDB4MDAsMHgyYywweGEwIH19LAorIHsxNiwgMHhhMTcwLCAwLCB7MHgwYiwweDIwLDB4MDIsMHg0NCwweDAwLDB4OTAsMHhjMCwweDY0LDB4MzQsMHgyOCwweDM0LDB4MDIsMHhjYywweDAwLDB4OTMsMHg4NCB9fSwKKyB7MTYsIDB4YTE4MCwgMCwgezB4MjgsMHg0MCwweDBiLDB4MDgsMHgwMCwweGNlLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMiwweDBhLDB4MzAsMHgwMiwweGMwLDB4MDAgfX0sCisgezE2LCAweGExOTAsIDAsIHsweGIyLDB4NDAsMHgyMiwweGMwLDB4MGIsMHgyMCwweDAyLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMWEwLCAwLCB7MHg3MCwweDAxLDB4MWEsMHg0MCwweDg1LDB4ODAsMHgyZCwweGEwLDB4MGIsMHg2OCwweDA2LDB4MTYsMHg4MCwweGJkLDB4OTAsMHgyNSB9fSwKKyB7MTYsIDB4YTFiMCwgMCwgezB4MjQsMHgxOCwweDdiLDB4NDIsMHhkZSwweDQwLDB4YTAsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDY4LDB4MDIsMHhkNiwweDAwLDB4OTcgfX0sCisgezE2LCAweGExYzAsIDAsIHsweDkwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweGNlLDB4NDAsMHg5MiwweDgwLDB4NmQsMHhlNCwweDBiLDB4NzgsMHgwMiwweDA4IH19LAorIHsxNiwgMHhhMWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDI4LDB4MDAsMHhkMSwweDgwLDB4M2MsMHg4OCB9fSwKKyB7MTYsIDB4YTFlMCwgMCwgezB4MGIsMHgyMiwweDAzLDB4NGUsMHg4MCwweGYyLDB4YTEsMHgzYywweDI0LDB4MmEsMHgzOSwweDAzLDB4Y2MsMHg0MCwweGQzLDB4YWMgfX0sCisgezE2LCAweGExZjAsIDAsIHsweDM4LDB4YzUsMHgwZiwweDMwLDB4ODIsMHhjOCwweDAwLDB4ZDMsMHgwMCwweDNjLDB4YzAsMHgwZSwweDMwLDB4MTMsMHhjMCwweDAwIH19LAorIHsxNiwgMHhhMjAwLCAwLCB7MHhmMSwweDAwLDB4MzgsMHhjMCwweDBmLDB4YTAsMHgwMywweDFhLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTIxMCwgMCwgezB4NDAsMHgxZCwweGI4LDB4MTAsMHhmZCwweDM0LDB4M2UsMHg4MCwweDBmLDB4ZTAsMHgwMywweGVlLDB4MDAsMHg3MiwweDAwLDB4M2EgfX0sCisgezE2LCAweGEyMjAsIDAsIHsweDAwLDB4MGYsMHhiMCwweDYzLDB4ZWMsMHg0MCwweGY4LDB4MjIsMHgzZSwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDQsMHg0MCwweGZmIH19LAorIHsxNiwgMHhhMjMwLCAwLCB7MHgwMCwweDNmLDB4ZDIsMHgwZiwweGYwLDB4MDMsMHhlYywweDAwLDB4Y2YsMHgwMCwweDM3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4YTI0MCwgMCwgezB4MDYsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZSwweDAwLDB4ZWIsMHgwMCwweDM2LDB4ZTAgfX0sCisgezE2LCAweGEyNTAsIDAsIHsweDBkLDB4YjAsMHgwMywweDIwLDB4MDAsMHhmMCwweDgwLDB4MzMsMHhjMCwweDA4LDB4YjgsMHgwMywweDJjLDB4ODAsMHhjYiwweDAwIH19LAorIHsxNiwgMHhhMjYwLCAwLCB7MHgzMiwweDgwLDB4MGYsMHhhMCwweDEzLDB4NmUsMHgwOCwweGNiLDB4MjgsMHgzMiwweGUwLDB4MGQsMHhiNCwweDgzLDB4ZTIsMHgwMCB9fSwKKyB7MTYsIDB4YTI3MCwgMCwgezB4Y2EsMHgwMCwweDNlLDB4ZTAsMHgwYywweGE4LDB4MDMsMHgwMiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyODAsIDAsIHsweGM4LDB4MTEsMHg4YywweDA0LDB4ODMsMHgwMCwweDIxLDB4YzAsMHg0OCwweDcwLDB4MDIsMHgxMCwweDAwLDB4YjcsMHgwMiwweDIxIH19LAorIHsxNiwgMHhhMjkwLCAwLCB7MHhjMCwweDRhLDB4NzAsMHgwMiwweDBkLDB4NDgsMHhkNCwweDAwLDB4MzUsMHhjMCwweDBlLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhhNyB9fSwKKyB7MTYsIDB4YTJhMCwgMCwgezB4NDAsMHgyOSwweGMwLDB4MDksMHg3MiwweDAyLDB4ZDQsMHgxMCwweGE2LDB4MDIsMHgyZiwweGM4LDB4MDgsMHg3MCwweDAyLDB4MTIgfX0sCisgezE2LCAweGEyYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgwMCwweGE3LDB4ODAsMHgyMCwweGUwIH19LAorIHsxNiwgMHhhMmMwLCAwLCB7MHgwYSwweDM4LDB4MDIsMHgxYSwweDAwLDB4YjUsMHg4MCwweDIxLDB4ZTAsMHgwOCwweGY4LDB4MjIsMHg1YywweDgxLDB4ODMsMHg4MCB9fSwKKyB7MTYsIDB4YTJkMCwgMCwgezB4MjEsMHhhMSwweDBiLDB4NzgsMHg4MiwweDVhLDB4MTAsMHg4MywweGEwLDB4MjAsMHhlOCwweDBhLDB4N2IsMHgwMiwweGRhLDB4MDAgfX0sCisgezE2LCAweGEyZTAsIDAsIHsweDk3LDB4YzAsMHgyZCwweGU0LDB4MDgsMHhlOCwweDAyLDB4MDgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMmYwLCAwLCB7MHgwOCwweDE0LDB4Y2MsMHgwMCwweDgzLDB4MTAsMHgyMCwweGMwLDB4MGEsMHgzMCwweDAyLDB4MDgsMHgwOCwweGIzLDB4NzAsMHgyMCB9fSwKKyB7MTYsIDB4YTMwMCwgMCwgezB4ZjgsMHgwYSwweDMwLDB4NDIsMHg0YywweDA0LDB4OTMsMHgxNCwweDI2LDB4YzQsMHgwYSwweDM4LDB4MDIsMHhjYywweDAwLDB4YTMgfX0sCisgezE2LCAweGEzMTAsIDAsIHsweDAwLDB4MjgsMHhjMCwweGFhLDB4MzAsMHgwMiwweGNlLDB4NDAsMHhiMywweDg4LDB4MmMsMHhjMCwweDI4LDB4MzAsMHgwYSwweDEyIH19LAorIHsxNiwgMHhhMzIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE5LDB4MDAsMHhlYSwweDgwLDB4YjYsMHg5MCB9fSwKKyB7MTYsIDB4YTMzMCwgMCwgezB4MmYsMHgyNCwweDBiLDB4MzksMHgwNCwweGJlLDB4YzAsMHgzMywweDkyLDB4MGMsMHhhMCwweDBiLDB4NjgsMHgxOCwweGNlLDB4YzAgfX0sCisgezE2LCAweGEzNDAsIDAsIHsweDMzLDB4ODAsMHgwZiwweGU5LDB4NDMsMHg3OCwweDAwLDB4Y2EsMHgwMCwweDMyLDB4ODAsMHgwZiwweGEwLDB4MTMsMHhmOCwweDQ4IH19LAorIHsxNiwgMHhhMzUwLCAwLCB7MHhkZSwweDAwLDB4M2UsMHg4MCwweDBjLDB4ZTAsMHgwMiwweDNhLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTM2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MjQsMHhmOCwweDAwLDB4M2UsMHgxMiwweDBkLDB4ODAsMHg5MywweGIwLDB4MjgsMHhmOCwweDAwLDB4YmMgfX0sCisgezE2LCAweGEzNzAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAyLDB4MGUsMHg4MCwweDAwLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHhhMzgwLCAwLCB7MHgwMSwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4YTM5MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMCwweGIyLDB4NzAgfX0sCisgezE2LCAweGEzYTAsIDAsIHsweDBmLDB4OTAsMHgwMSwweDA0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTgsMHgwMywweGU0LDB4MDQsMHhlOSwweDA4IH19LAorIHsxNiwgMHhhM2IwLCAwLCB7MHgzYSwweDQ4LDB4MGMsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4MGIsMHgxMCwweDBiLDB4MjYsMHg4MCB9fSwKKyB7MTYsIDB4YTNjMCwgMCwgezB4ZjEsMHg4MCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEzZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgwMCwweDIyLDB4NjEsMHgwYiwweDkwLDB4MDIsMHgyNCwweDA4LDB4ODksMHgwMCwweDJlIH19LAorIHsxNiwgMHhhM2UwLCAwLCB7MHg0MCwweDBkLDB4OWEsMHgwMiwweGU0LDB4MDgsMHhhOSwweDAwLDB4MjIsMHg3OCwweDBkLDB4OTQsMHgwNiwweGU0LDB4MTAsMHhiOSB9fSwKKyB7MTYsIDB4YTNmMCwgMCwgezB4MDAsMHgyMiwweDUwLDB4MGIsMHg5MCwweDAyLDB4MjUsMHg4MCwweGI5LDB4ODAsMHgzNiwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGE0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI1LDB4MDAsMHgyMywweDQyIH19LAorIHsxNiwgMHhhNDEwLCAwLCB7MHgwYiwweGQwLDB4MGUsMHhiNCwweDAwLDB4ODksMHgwNCwweDJlLDB4NjAsMHgwOCwweDkxLDB4MDIsMHhjNCwweDA0LDB4YjksMHgwNCB9fSwKKyB7MTYsIDB4YTQyMCwgMCwgezB4MmEsMHhjMCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MTAsMHhiMSwweDAwLDB4MjYsMHg0MiwweDBhLDB4OTAsMHgwMiwweDI0LDB4MDAgfX0sCisgezE2LCAweGE0MzAsIDAsIHsweGI5LDB4MjEsMHg2MiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNDQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweGI1LDB4NDAsMHgyMSwweDUwLDB4NGIsMHg1MCwweDA2LDB4OTQsMHgwMiwweDgxLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4YTQ1MCwgMCwgezB4NjAsMHgyOSwweDE0LDB4MDYsMHhjNSwweDAwLDB4YTEsMHgyMiwweDIwLDB4NTEsMHg4OSwweDE0LDB4MDIsMHhjNCwweDAwLDB4YjEgfX0sCisgezE2LCAweGE0NjAsIDAsIHsweDIwLDB4MjAsMHg0OCwweDBiLDB4MTQsMHgwMiwweDA0LDB4MDEsMHhiMSwweDAwLDB4MDQsMHg1MCwweDBiLDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhhNDcwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDgsMHhiOCwweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YTQ4MCwgMCwgezB4OGYsMHg4MCwweDAzLDB4YjAsMHgwMCwweDg4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGU4LDB4MDQgfX0sCisgezE2LCAweGE0OTAsIDAsIHsweDNhLDB4MDAsMHgwYywweDgwLDB4MDIsMHhlMCwweDAwLDB4ZjgsMHg1MCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMCwweDA0IH19LAorIHsxNiwgMHhhNGEwLCAwLCB7MHhmOCwweDAxLDB4MTIsMHgwMCwweDRmLDB4ODAsMHgwNywweGVlLDB4MDcsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTRiMCwgMCwgezB4OTgsMHgxZCwweGU1LDB4MTAsMHhmOSwweDQwLDB4M2UsMHg1MCwweDBmLDB4OTQsMHgwMiwweDY1LDB4MDEsMHhmZCwweDAxLDB4M2QgfX0sCisgezE2LCAweGE0YzAsIDAsIHsweDUwLDB4NGYsMHg1MCwweDEzLDB4ZTUsMHgwMCwweGZkLDB4MTAsMHgxZiwweDUwLDB4MDcsMHhkNCwweDQzLDB4ZDQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhhNGQwLCAwLCB7MHgxMCwweDFlLDB4NDQsMHgwZiwweDk0LDB4MDMsMHhkNSwweDAwLDB4ZmQsMHg0MCwweDNlLDB4NTAsMHgwZiwweDUyLDB4ODMsMHhlZSB9fSwKKyB7MTYsIDB4YTRlMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhlNCwweDQwLDB4ZjksMHg2MCwweDNmLDB4NDQgfX0sCisgezE2LCAweGE0ZjAsIDAsIHsweDBmLDB4ZDAsMHhjMywweGU0LDB4MzAsMHhmOSwweDAxLDB4M2UsMHg0MiwweDBjLDB4ZDAsMHgwMywweGU3LDB4ODAsMHhkZCwweGEwIH19LAorIHsxNiwgMHhhNTAwLCAwLCB7MHgzMywweDQwLDB4MGMsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGM5LDB4OTAsMHgzZiwweDY4LDB4MWUsMHg5MSwweDAzLDB4MzQsMHgwMCB9fSwKKyB7MTYsIDB4YTUxMCwgMCwgezB4ZmQsMHgwMCwweDNlLDB4NjgsMHgwYywweDk0LDB4MDMsMHgwZSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE1MjAsIDAsIHsweDM5LDB4MTAsMHhlMCwweDAwLDB4YjgsMHg0MiwweDJlLDB4MDksMHgwYiwweDg0LDB4MDIsMHhlMSwweDA0LDB4YmUsMHgwMCwweDJlIH19LAorIHsxNiwgMHhhNTMwLCAwLCB7MHgxMCwweDA4LDB4ODAsMHgyMiwweGMyLDB4ODAsMHg4OCwweDQwLDB4MjIsMHgwMCwweDBhLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhhOCB9fSwKKyB7MTYsIDB4YTU0MCwgMCwgezB4ZDAsMHgyZSwweDEwLDB4NGIsMHg4YSwweDAzLDB4NjAsMHgwMCwweGJhLDB4MDAsMHgyZSwweDMwLDB4MDgsMHg4YSwweDAyLDB4ODYgfX0sCisgezE2LCAweGE1NTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4YzUsMHg4MCwweGIxLDB4NjAsMHg2YywweGQwIH19LAorIHsxNiwgMHhhNTYwLCAwLCB7MHgwYiwweDEwLDB4MDAsMHhkYywweDBjLDB4YjUsMHgwMCwweDJjLDB4NDEsMHgwOCwweDEwLDB4MDIsMHhjNSwweDgwLDB4OTEsMHgxMCB9fSwKKyB7MTYsIDB4YTU3MCwgMCwgezB4NjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweGU0LDB4MGMsMHg4MSwweDIyLDB4MmMsMHg1MCwweDA4LDB4MTAsMHg0MiwweDA0LDB4MDAgfX0sCisgezE2LCAweGE1ODAsIDAsIHsweGExLDB4MDAsMHgyYywweDVhLDB4MjgsMHg5MCwweDAyLDB4NTIsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNTkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQxLDB4MGIsMHg5MCwweDEyLDB4ZjQsMHg4MCwweGJmLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YTVhMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YTksMHg2MCwweDYwLDB4NDIsMHgwYSwweDk0LDB4MTIsMHhlNSwweDAwLDB4YTkgfX0sCisgezE2LCAweGE1YjAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDY0LDB4MjAsMHhiOSwweDAwLDB4MGUsMHg0MCwweDA5LDB4OTAsMHgwMiwweGM2IH19LAorIHsxNiwgMHhhNWMwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MSB9fSwKKyB7MTYsIDB4YTVkMCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwNCwweGQxLDB4YzAgfX0sCisgezE2LCAweGE1ZTAsIDAsIHsweGJhLDB4NzAsMHgwYywweDk4LDB4MDMsMHhjNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHgyNSwweDQwIH19LAorIHsxNiwgMHhhNWYwLCAwLCB7MHhlOSwweDQwLDB4M2UsMHg0MCwweDBjLDB4MTAsMHgwMywweDY4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTYwMCwgMCwgezB4NjgsMHgwMSwweGE0LDB4MTQsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgyMywweGU0LDB4MDgsMHhmOSwweGEwLDB4M2MgfX0sCisgezE2LCAweGE2MTAsIDAsIHsweGMyLDB4MmYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDcwLDB4MGYsMHg5MSwweDQzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhhNjIwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgxZiwweDkwLDB4MTMsMHhlNiwweDIwLDB4ZjksMHhhMCwweDNjLDB4NDAsMHg0ZSwweDkwLDB4MDMsMHg5YSB9fSwKKyB7MTYsIDB4YTYzMCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDIgfX0sCisgezE2LCAweGE2NDAsIDAsIHsweDBmLDB4ODAsMHgxMywweDIwLDB4MGMsMHhmYywweDAxLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDUwIH19LAorIHsxNiwgMHhhNjUwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHg4MCwweDBiLDB4MjAsMHgwOCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MmMsMHg4MCwweDQzLDB4ZTAsMHg0MCB9fSwKKyB7MTYsIDB4YTY2MCwgMCwgezB4ZjgsMHgwMiwweDNhLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2NzAsIDAsIHsweGE4LDB4ODUsMHgyOCwweDA4LDB4M2EsMHgwMCwweDBmLDB4ODAsMHg0YiwweGExLDB4MDIsMHgyOCwweDAwLDB4YmEsMHg4MiwweDJlIH19LAorIHsxNiwgMHhhNjgwLCAwLCB7MHg4OCwweDQ4LDB4ZTQsMHgwMiwweGU4LDB4MDAsMHhhZSwweDkwLDB4YTMsMHg5MCwweDBiLDB4ZTAsMHgwMCwweDM4LDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4YTY5MCwgMCwgezB4MDAsMHgzNywweGEwLDB4MDgsMHhhMCwweDAyLDB4ZjgsMHgwMCwweDllLDB4ZTAsMHgyMiwweDgwLDB4MGIsMHhhMCwweDIzLDB4NDIgfX0sCisgezE2LCAweGE2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgxMCwweDMzLDB4MDAsMHgyYywweGQwIH19LAorIHsxNiwgMHhhNmIwLCAwLCB7MHgwYiwweDE0LDB4MDIsMHgwYywweDAwLDB4YjIsMHg5MSwweDJjLDB4ZDAsMHgwOCwweDNlLDB4MDIsMHg0YywweDAwLDB4ODMsMHg0MCB9fSwKKyB7MTYsIDB4YTZjMCwgMCwgezB4MjQsMHhjMiwweDBiLDB4MzYsMHgwMCwweDhjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDA5LDB4YjAsMHgwMiwweGNlLDB4MDAgfX0sCisgezE2LCAweGE2ZDAsIDAsIHsweGIzLDB4Y2MsMHg2OCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MDIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNmUwLCAwLCB7MHhlMCwweDAxLDB4MWMsMHg4OCwweGI3LDB4MjUsMHgyZCwweGMwLDB4OGIsMHg1OCwweDFhLDB4MWMsMHgwOCwweGI2LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4YTZmMCwgMCwgezB4YzAsMHgwOCwweDc0LDB4MDIsMHhkYywweDQwLDB4YTUsMHgwMCwweDI1LDB4YzAsMHgxYiwweDc4LDB4MDIsMHg5NCwweDA4LDB4YjcgfX0sCisgezE2LCAweGE3MDAsIDAsIHsweDgwLDB4MjUsMHhlMywweDBhLDB4NzEsMHgwMiwweGRjLDB4MDAsMHg5NywweDgzLDB4MjEsMHhjOCwweDhiLDB4ZjEsMHgwMiwweDQ4IH19LAorIHsxNiwgMHhhNzEwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFmLDB4MDAsMHhmNywweGUyLDB4N2QsMHhlMCB9fSwKKyB7MTYsIDB4YTcyMCwgMCwgezB4MGYsMHg1OCwweDQzLDB4MWUsMHgxOCwweGY2LDB4ODAsMHg3YywweGUwLDB4MmMsMHg2OCwweDAyLDB4NWUsMHg5MCwweGMzLDB4ODAgfX0sCisgezE2LCAweGE3MzAsIDAsIHsweDM1LDB4ZTAsMHgwZiwweGY4LDB4MDMsMHg5ZSwweDA0LDB4ZmYsMHhhMSwweDIwLDB4YTEsMHgwZCwweDc4LDB4MDMsMHhkNiwweDAwIH19LAorIHsxNiwgMHhhNzQwLCAwLCB7MHhmNywweDgwLDB4MzksMHhmOCwweDBmLDB4NzgsMHgwMywweDBhLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTc1MCwgMCwgezB4NDgsMHgxZCwweGFjLDB4MDAsMHhmYiwweDQwLDB4N2YsMHg0MSwweDBmLDB4MTAsMHgwMywweGVjLDB4MDQsMHhmYSwweDAwLDB4M2UgfX0sCisgezE2LCAweGE3NjAsIDAsIHsweGQwLDB4MGYsMHhhMCwweDAzLDB4ZWQsMHgwMCwweGU5LDB4MDAsMHgyYSwweDAwLDB4MGYsMHhiMCwweDAzLDB4NjQsMHgwMCwweGZiIH19LAorIHsxNiwgMHhhNzcwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwZCwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZDMsMHgwMCwweDM2LDB4YzAsMHgwZiwweDM4LDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YTc4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDQ4LDB4Y2YsMHhjMCwweDMzLDB4NjAgfX0sCisgezE2LCAweGE3OTAsIDAsIHsweDhjLDB4YzgsMHg0MywweGQ2LDB4MDAsMHhjYywweDk0LDB4M2YsMHhiMCwweDBkLDB4ZjgsMHgwMywweDdmLDB4MDAsMHhkZiwweDgwIH19LAorIHsxNiwgMHhhN2EwLCAwLCB7MHgzZiwweDYwLDB4MGYsMHhkOCwweDAzLDB4ZGUsMHgwMCwweGNmLDB4Y2EsMHgzZCwweDYwLDB4MGMsMHhmOCwweDEzLDB4M2EsMHg0NCB9fSwKKyB7MTYsIDB4YTdiMCwgMCwgezB4ZGQsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4NDMsMHgxOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3YzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4OGYsMHgxMSwweDMzLDB4YzAsMHg0OCwweDQxLDB4MTIsMHhjNCwweDQ4LDB4ODQsMHgxMSwweDJjIH19LAorIHsxNiwgMHhhN2QwLCAwLCB7MHhlYywweDJhLDB4YmEsMHgwMywweDNjLDB4NDAsMHhkNywweDQ4LDB4MmQsMHg0MSwweDBiLDB4NjAsMHgwMiwweGQ0LDB4MDAsMHhkNyB9fSwKKyB7MTYsIDB4YTdlMCwgMCwgezB4MDEsMHgzZCwweGMwLDB4MGQsMHhmMCwweDAzLDB4NWEsMHgwMCwweDg0LDB4MTgsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAzLDB4NmEgfX0sCisgezE2LCAweGE3ZjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4OGMsMHgwOCwweDg3LDB4MDAsMHgyMSwweDQwIH19LAorIHsxNiwgMHhhODAwLCAwLCB7MHgwOSwweDQwLDB4MDIsMHhkNCwweDAwLDB4YTQsMHg5MiwweDJkLDB4YzgsMHgwOSwweDYyLDB4ODIsMHg1YywweDAwLDB4ODcsMHgwMCB9fSwKKyB7MTYsIDB4YTgxMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweGZjLDB4MDAsMHg4NywweDAwLDB4MmQsMHgwNCwweDA4LDB4NzAsMHgwMiwweDFjLDB4ODAgfX0sCisgezE2LCAweGE4MjAsIDAsIHsweGI1LDB4MDAsMHgyZCwweGMwLDB4MGIsMHhmMCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhODMwLCAwLCB7MHg2MCwweDEwLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHgyMCwweDQwLDB4MDksMHgwMCwweDIyLDB4YzcsMHgwMCwweGEwLDB4NDEsMHgyYyB9fSwKKyB7MTYsIDB4YTg0MCwgMCwgezB4YzEsMHg0YiwweDA4LDB4MDIsMHgyYywweDAwLDB4OTMsMHg0MCwweDJjLDB4N2MsMHgwYiwweDM4LDB4MDIsMHhjNywweDIwLDB4OTMgfX0sCisgezE2LCAweGE4NTAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweDRmLDB4ODQsMHhiMCwweDgwLDB4MmMsMHhjMCwweDBiLDB4MzIsMHgxMCwweDUwIH19LAorIHsxNiwgMHhhODYwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWEsMHgxNSwweGJjLDB4MDIsMHhjZiwweDAwLDB4YjIsMHg0MCB9fSwKKyB7MTYsIDB4YTg3MCwgMCwgezB4MGQsMHgxMCwweDAzLDB4ZTgsMHgyNCwweGViLDB4YzEsMHgzZSwweGMwLDB4MmQsMHg5OCwweDEzLDB4N2MsMHgwYSwweGMyLDB4NDMgfX0sCisgezE2LCAweGE4ODAsIDAsIHsweDNlLDB4YjAsMHgwZiwweGE5LDB4MDMsMHhlOSwweDIwLDB4Y2YsMHgwMCwweDNlLDB4YzAsMHg4YywweGYwLDB4MDMsMHgwZCwweDIwIH19LAorIHsxNiwgMHhhODkwLCAwLCB7MHhmYSwweGMwLDB4M2YsMHhjMCwweDBmLDB4NzQsMHgwMSwweDJhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YThhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAyLDB4M2EsMHg0MCwweDhlLDB4OTAsMHgwMywweGU4LDB4MTQsMHg1YiwweDUwLDB4M2MgfX0sCisgezE2LCAweGE4YjAsIDAsIHsweDUwLDB4NGUsMHg4NCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4NDAsMHgzZSwweDgwLDB4MDcsMHg4MSwweDAzLDB4ZWMsMHgwOCwweGYzIH19LAorIHsxNiwgMHhhOGMwLCAwLCB7MHgwMCwweDNhLDB4YzAsMHg5ZiwweDMwLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgyMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MjMsMHhlOCB9fSwKKyB7MTYsIDB4YThkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4OTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDAgfX0sCisgezE2LCAweGE4ZTAsIDAsIHsweDBmLDB4ZDAsMHgwMywweDM4LDB4MjAsMHhjZiwweDA4LDB4MzIsMHhjMSwweDBlLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmZSwweDA4IH19LAorIHsxNiwgMHhhOGYwLCAwLCB7MHgzMSwweGU1LDB4MGUsMHhlNCwweDAzLDB4M2EsMHgwMCwweGZmLDB4MDAsMHgzMywweDgwLDB4MGYsMHhmMCwweDJiLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTkwMCwgMCwgezB4Y2MsMHhhMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5MTAsIDAsIHsweDgwLDB4MDQsMHg2YywweDAwLDB4YmIsMHgwMCwweDNhLDB4NjksMHgwYiwweDkwLDB4NmUsMHgwOCwweDAwLDB4ODMsMHg0MSwweDM2IH19LAorIHsxNiwgMHhhOTIwLCAwLCB7MHg0MCwweGM4LDB4ODgsMHhjNiwweGVjLDB4MDAsMHg4OCwweDQwLDB4MzYsMHg4MCwweDBkLDB4YTgsMHgwMywweDZlLDB4NTAsMHhiYiB9fSwKKyB7MTYsIDB4YTkzMCwgMCwgezB4MDAsMHgzNiwweGMwLDB4MGIsMHhiMCwweDAyLDB4MjQsMHgwMCwweGQ5LDB4MDgsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGE5NDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweDYwIH19LAorIHsxNiwgMHhhOTUwLCAwLCB7MHgwMywweDgwLDB4MDIsMHgyMCwweDAwLDB4ODksMHgwMSwweDIyLDB4NTgsMHgwOCwweDk4LDB4MjIsMHhlYywweDAxLDB4YWIsMHgwMCB9fSwKKyB7MTYsIDB4YTk2MCwgMCwgezB4MjIsMHgwMCwweDBhLDB4MTAsMHgwMiwweDI4LDB4MDAsMHhiYiwweDAwLDB4MjIsMHg0MCwweDBiLDB4YjAsMHgwMiwweDI4LDB4MDAgfX0sCisgezE2LCAweGE5NzAsIDAsIHsweDhhLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDQyLDB4MjAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOTgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyOCwweDQwLDB4OGIsMHgwMCwweDAyLDB4MDIsMHg0MCwweDg5LDB4MDEsMHgyNCB9fSwKKyB7MTYsIDB4YTk5MCwgMCwgezB4ZDIsMHgyOCwweDEwLDB4MDIsMHhjYywweDAwLDB4ODMsMHgxMCwweDI0LDB4MjAsMHgwOCwweDA4LDB4MDIsMHg0ZSwweDAwLDB4YjMgfX0sCisgezE2LCAweGE5YTAsIDAsIHsweDA0LDB4YTAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDA4LDB4ODgsMHg5MiwweDAwLDB4MmMsMHhjMCwweDBiLDB4YjAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhhOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4YTljMCwgMCwgezB4MGYsMHg4MCwweDAyLDB4MjAsMHgxMCwweDg5LDB4NTAsMHgyMiwweGQ4LDB4MmUsMHg5NiwweDIyLDB4ZmMsMHgwMCwweGViLDB4NDAgfX0sCisgezE2LCAweGE5ZDAsIDAsIHsweDMyLDB4YzAsMHgwYSwweDkwLDB4MDMsMHgyOCwweDAwLDB4ZmYsMHgwMCwweDIyLDB4MDAsMHgwZiwweGIwLDB4MDMsMHgyYywweGEwIH19LAorIHsxNiwgMHhhOWUwLCAwLCB7MHhjOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDAwLDB4MDYsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTlmMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmZiwweDBjLDB4M2IsMHgwMCwweDBmLDB4YzAsMHgwMiwweDcwLDB4OTAsMHhmZCwweDAwLDB4M2UgfX0sCisgezE2LCAweGFhMDAsIDAsIHsweGM5LDB4MGYsMHg5NiwweGMzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwNCwweGZmIH19LAorIHsxNiwgMHhhYTEwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlYywweDAwLDB4ZmMsMHgwMCwweDNmLDB4YzAsMHgwZiwweDcwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4YWEyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkYywweDgwLDB4ZmIsMHgyOCwweDNmLDB4MDAgfX0sCisgezE2LCAweGFhMzAsIDAsIHsweDBjLDB4YzEsMHgwYiwweGYxLDB4MDIsMHhlZCwweDAwLDB4MzcsMHgzMCwweDJjLDB4ZjEsMHgwMywweGIyLDB4NDAsMHhmZiwweDAwIH19LAorIHsxNiwgMHhhYTQwLCAwLCB7MHhiYiwweGMwLDB4MGYsMHg0OCwweDA2LDB4YjIsMHgwMCwweGZjLDB4ODAsMHgzYiwweGNjLDB4MGMsMHhmMCwweDAzLDB4NzAsMHg4MCB9fSwKKyB7MTYsIDB4YWE1MCwgMCwgezB4ZGYsMHgyOCwweDMzLDB4MDQsMHgwZiwweGY0LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFhNjAsIDAsIHsweDgwLDB4MTAsMHhmZiwweDQwLDB4YmYsMHg2MCwweDJlLDB4MjEsMHgwOCwweDgyLDB4MDIsMHgyMCwweDAwLDB4YTksMHgyOCwweDJhIH19LAorIHsxNiwgMHhhYTcwLCAwLCB7MHgwMCwweDA5LDB4ZmEsMHgwMiwweDIwLDB4MDAsMHhiZiwweDUxLDB4MjMsMHhkOCwweDA5LDB4OTgsMHgwMiwweGU0LDB4MzAsMHhiMCB9fSwKKyB7MTYsIDB4YWE4MCwgMCwgezB4MDAsMHgyMywweGQwLDB4MDgsMHhmNSwweGEyLDB4MjUsMHhhNCwweDhmLDB4NDIsMHgzYywweDEwLDB4MGIsMHhiMCwweDBhLDB4MjAgfX0sCisgezE2LCAweGFhOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGIzLDB4MDgsMHgyYywweDAwIH19LAorIHsxNiwgMHhhYWEwLCAwLCB7MHgyOCwweDAwLDB4MWEsMHhjMCwweDg0LDB4MjAsMHgwMCwweDI0LDB4YzgsMHg0YiwweDMxLDB4NDIsMHhjMCwweDAwLDB4OTMsMHgwMiB9fSwKKyB7MTYsIDB4YWFiMCwgMCwgezB4MjAsMHhjNiwweDA4LDB4MDAsMHgwNiwweGMwLDB4ODEsMHhiMywweDAwLDB4MmMsMHhkOCwweDA5LDB4MzIsMHgwMiwweGEwLDB4NDAgfX0sCisgezE2LCAweGFhYzAsIDAsIHsweDkzLDB4MDEsMHgyNCwweDRjLDB4MGIsMHgzMiwweDAyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYWQwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgwMCwweGJiLDB4MDIsMHgyZSwweDBhLDB4MDgsMHg4MCwweDgyLDB4NjAsMHgwMCwweGE4LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YWFlMCwgMCwgezB4ZTAsMHgxYiwweGIwLDB4MDIsMHg2MiwweDAxLDB4M2IsMHgwMCwweDIyLDB4YzEsMHgwOSwweDkwLDB4MDIsMHhlMiwweDAwLDB4YmIgfX0sCisgezE2LCAweGFhZjAsIDAsIHsweDYwLDB4MjYsMHhjMSwweDA4LDB4YjAsMHgyYSwweDI2LDB4MDAsMHg5YiwweDA0LDB4MmUsMHgyMSwweDBiLDB4YjAsMHgwMiwweDMwIH19LAorIHsxNiwgMHhhYjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMSwweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHgxMCB9fSwKKyB7MTYsIDB4YWIxMCwgMCwgezB4MDgsMHg4NCwweDEzLDB4ZWMsMHgwMiwweGE5LDB4MDQsMHgzNiwweDIwLDB4MGYsMHhiMCwweDAzLDB4ZWUsMHg4MCwweGZiLDB4MDAgfX0sCisgezE2LCAweGFiMjAsIDAsIHsweDNhLDB4YzAsMHgwYywweGEwLDB4MDMsMHhhMiwweDgwLDB4NzksMHg0MCwweDFlLDB4YzAsMHg4YywweGIwLDB4NjMsMHg2YSwweDEwIH19LAorIHsxNiwgMHhhYjMwLCAwLCB7MHhkMywweDAwLDB4MzYsMHhhMiwweDA3LDB4YjAsMHgwMywweDAwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWI0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2UsMHgyMCwweDRkLDB4NDEsMHgwMywweDljLDB4MDAsMHhmZCwweDIwLDB4YWIgfX0sCisgezE2LCAweGFiNTAsIDAsIHsweDAwLDB4MGMsMHhmMCwweDAzLDB4YjgsMHgwMCwweGY3LDB4MDAsMHgzZiwweGMwLDB4NGQsMHhjOSwweDAzLDB4ZjQsMHgwMCwweGZmIH19LAorIHsxNiwgMHhhYjYwLCAwLCB7MHgwMCwweDNiLDB4YzAsMHgyZSwweGYwLDB4MDAsMHhmMCwweDAwLDB4ZWYsMHgwMCwweDNmLDB4MDAsMHg0YiwweDcwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4YWI3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDgwLDB4ZWIsMHgwMCwweDdlLDB4MTAgfX0sCisgezE2LCAweGFiODAsIDAsIHsweDJlLDB4ODQsMHgwMywweGVjLDB4MDAsMHhlMCwweDAwLDB4MzIsMHg1MCwweDBmLDB4YjAsMHg4NiwweDI1LDB4MDAsMHhkYiwweDIwIH19LAorIHsxNiwgMHhhYjkwLCAwLCB7MHgzYSwweGMwLDB4MGQsMHhiMCwweDYzLDB4ZTEsMHgxMCwweGZiLDB4NDgsMHgzOCwweGMxLDB4MGYsMHgzMCwweDAzLDB4MmMsMHgwNCB9fSwKKyB7MTYsIDB4YWJhMCwgMCwgezB4ZmIsMHgwOCwweDMyLDB4YzAsMHgwYywweGIwLDB4MGIsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiYjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4OGYsMHgwMCwweDY0LDB4MjksMHgyOCwweDgwLDB4MDMsMHhlYywweDAyLDB4ZTgsMHgwNCwweGE4IH19LAorIHsxNiwgMHhhYmMwLCAwLCB7MHg1NiwweDA4LDB4ZmMsMHgwNywweGUwLDB4MDAsMHgwZiwweGEwLDB4YmYsMHhjMCwweDBiLDB4OTUsMHgwMiwweGEwLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YWJkMCwgMCwgezB4MDUsMHgzNywweGMwLDB4ODksMHhmMCwweDBhLDB4MGQsMHhjOCwweGJmLDB4MDgsMHgyYSwweDgwLDB4MDgsMHhmMCwweDAyLDB4MzIgfX0sCisgezE2LCAweGFiZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMSwweGIzLDB4MDIsMHgyNCwweGUwIH19LAorIHsxNiwgMHhhYmYwLCAwLCB7MHgwYSwweDMwLDB4MTIsMHg4MCwweDAzLDB4YTMsMHgwMCwweGE4LDB4MDAsMHgwMiwweGI4LDB4MjIsMHhjMCwweDAwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4YWMwMCwgMCwgezB4MjgsMHhjMSwweDBiLDB4MDQsMHgwMiwweDA4LDB4MDAsMHhiOSwweDQwLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDAzLDB4MDQgfX0sCisgezE2LCAweGFjMTAsIDAsIHsweGIzLDB4NDQsMHgyMCwweDAwLDB4NGEsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYzIwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgyMCwweDE3LDB4YTAsMHg2NSwweGVjLDB4MDgsMHgzOCwweDAyLDB4YzIsMHg0MSwweGIzLDB4OTIsMHgyYiB9fSwKKyB7MTYsIDB4YWMzMCwgMCwgezB4NjQsMHgwYSwweDM4LDB4MDIsMHgzNiwweDAxLDB4YjcsMHg5MCwweDJkLDB4ZTAsMHgwMywweGY4LDB4MDAsMHg5YSwweDAwLDB4YjUgfX0sCisgezE2LCAweGFjNDAsIDAsIHsweDgwLDB4MmQsMHhlMCwweDg5LDB4NzgsMHgxMiwweDFlLDB4MDAsMHhiNywweDgwLDB4MjksMHhlMCwweDBhLDB4NzgsMHgwMiwweDA4IH19LAorIHsxNiwgMHhhYzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg3MywweGIwLDB4MjQsMHhjOCB9fSwKKyB7MTYsIDB4YWM2MCwgMCwgezB4NGUsMHgzMCwweDBhLDB4ODAsMHgwMiwweGUyLDB4MDAsMHgzOCwweDk0LDB4MGUsMHgzMSwweGEyLDB4YzgsMHgwMCwweDczLDB4MDAgfX0sCisgezE2LCAweGFjNzAsIDAsIHsweDE4LDB4YzQsMHgwNSwweDAwLDB4MDMsMHgwMCwweDAwLDB4ZjMsMHgwMCwweDM4LDB4YzAsMHgwNywweGIxLDB4MDMsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYzgwLCAwLCB7MHhmMywweDAxLDB4MzAsMHg0MSwweDBlLDB4YjAsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWM5MCwgMCwgezB4NDAsMHgxZCwweGJkLDB4MDAsMHhlZiwweDEwLDB4MjYsMHhjOCwweDAzLDB4YjEsMHgwMywweGUwLDB4MDAsMHhlYSwweDgxLDB4NzggfX0sCisgezE2LCAweGFjYTAsIDAsIHsweGM1LDB4MGMsMHhiNSwweGUzLDB4ZGMsMHgwMCwweGMzLDB4MDAsMHgzZSwweGMxLDB4MGYsMHhmMCwweDgzLDB4YjAsMHgwMCwweGZmIH19LAorIHsxNiwgMHhhY2IwLCAwLCB7MHgwMCwweDM3LDB4YzAsMHgwZCwweGY0LDB4MDMsMHhlNCwweDAwLDB4ZjcsMHgwMCwweDNmLDB4NDAsMHgwZCwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4YWNjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZCwweDEwLDB4Y2IsMHgyOCwweDNlLDB4YzAgfX0sCisgezE2LCAweGFjZDAsIDAsIHsweDBkLDB4YjAsMHgxMywweGFjLDB4MTAsMHhmYiwweDAwLDB4M2EsMHg4MCwweDA0LDB4YjQsMHgwMywweGFjLDB4MDAsMHhmYiwweDA0IH19LAorIHsxNiwgMHhhY2UwLCAwLCB7MHgzZSwweGMwLDB4MGYsMHhhNCwweGIzLDB4ZTAsMHgwMCwweGZiLDB4ODAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTgsMHgwMCB9fSwKKyB7MTYsIDB4YWNmMCwgMCwgezB4ZmIsMHg0OCwweGIyLDB4ODAsMHgwZiwweGIwLDB4NDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkMDAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAyLDB4ODcsMHg0NCwweDM4LDB4YzAsMHg4ZCwweDMwLDB4MDIsMHg0YywweDAwLDB4ZmYsMHgwMCwweDIxIH19LAorIHsxNiwgMHhhZDEwLCAwLCB7MHhjMCwweDA4LDB4NzAsMHgwMywweDljLDB4MDAsMHhiMywweDUwLDB4MjEsMHhkNCwweDRlLDB4NjIsMHgwMiwweGQwLDB4MDAsMHhiZiB9fSwKKyB7MTYsIDB4YWQyMCwgMCwgezB4MDAsMHgzNSwweGQ0LDB4MDksMHg3MCwweDIyLDB4ZDgsMHgwMCwweGJmLDB4MjIsMHgyMSwweGMwLDB4MGIsMHg3MiwweDAyLDB4ZDIgfX0sCisgezE2LCAweGFkMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg0MCwweDg3LDB4ODAsMHgyZCwweGUwIH19LAorIHsxNiwgMHhhZDQwLCAwLCB7MHgwOSwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjYsMHg4MCwweDI5LDB4YTEsMHgyOCwweDdhLDB4MzIsMHhkZSwweDAwLDB4MzcsMHhhMCB9fSwKKyB7MTYsIDB4YWQ1MCwgMCwgezB4MjUsMHhlMCwweDA5LDB4NzgsMHgwNiwweGQyLDB4MDAsMHhiNywweDgwLDB4MjEsMHhlOCwweDBiLDB4NzksMHgwMiwweGRlLDB4MDAgfX0sCisgezE2LCAweGFkNjAsIDAsIHsweGI3LDB4OTAsMHgyMSwweGUwLDB4MGIsMHg3OSwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZDcwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwNCwweDgzLDB4MDEsMHgyOCwweGMwLDB4ODksMHhiMCwweDBhLDB4NGYsMHgwMCwweGIyLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YWQ4MCwgMCwgezB4YzQsMHg4OCwweDMwLDB4MTYsMHhjZiwweDAwLDB4YmIsMHgwNCwweDIwLDB4YzEsMHgwYSwweDMyLDB4MDYsMHhjMiwweDAwLDB4YjMgfX0sCisgezE2LCAweGFkOTAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDA5LDB4MzAsMHg0MiwweGVmLDB4MTAsMHhiMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHhhZGEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHg0YSwweDAwLDB4M2UsMHg4MCB9fSwKKyB7MTYsIDB4YWRiMCwgMCwgezB4MmQsMHhhMCwweDBiLDB4YWEsMHg4MCwweGZlLDB4MDAsMHgyYiwweDgwLDB4MGMsMHhhMCwweDQzLDB4ZmIsMHgzMCwweGZhLDB4MDAgfX0sCisgezE2LCAweGFkYzAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4ODMsMHhmYSwweDA0LDB4ZmUsMHgxOCwweDIyLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDg0IH19LAorIHsxNiwgMHhhZGQwLCAwLCB7MHhmMiwweDAwLDB4MzMsMHhhMiwweDBmLDB4YTAsMHgwMywweGYyLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWRlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDJmLDB4ODAsMHgwMywweGEwLDB4MjAsMHhmYywweDAyLDB4M2UgfX0sCisgezE2LCAweGFkZjAsIDAsIHsweDAwLDB4MWYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDAxLDB4ZTAsMHg0MCwweGY4IH19LAorIHsxNiwgMHhhZTAwLCAwLCB7MHg0MCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4YWUxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNiwweDAwLDB4ZDksMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweGFlMjAsIDAsIHsweDBmLDB4OTAsMHgwYiwweDA0LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg2OCwweDZjLDB4OTQsMHgwMywweGU0LDB4MjAsMHhiOSwweDkwIH19LAorIHsxNiwgMHhhZTMwLCAwLCB7MHgzNiwweDQwLDB4MGMsMHg5NCwweDAzLDB4ZTQsMHgwMCwweDI5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4MjQsMHgyMCB9fSwKKyB7MTYsIDB4YWU0MCwgMCwgezB4YzksMHgwMCwweDM2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlNTAsIDAsIHsweDgwLDB4MDQsMHg2NiwweDUwLDB4ODksMHgwMCwweDIwLDB4NTAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA5LDB4ZDksMHgwMCwweDIwIH19LAorIHsxNiwgMHhhZTYwLCAwLCB7MHg0OCwweDQ4LDB4OTAsMHgwNiwweGU0LDB4MDQsMHg5OSwweGEwLDB4MjIsMHg0MCwweDBkLDB4YjgsMHgyMiwweDY0LDB4MDAsMHgwOSB9fSwKKyB7MTYsIDB4YWU3MCwgMCwgezB4NTAsMHgzMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4MjcsMHg5MCwweDg5LDB4NDAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGFlODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweDk5LDB4MDAsMHg2NiwweDQyIH19LAorIHsxNiwgMHhhZTkwLCAwLCB7MHgwYSwweGQwLDB4MTIsMHgzNCwweDAwLDB4ODUsMHgwMCwweDI2LDB4NDAsMHg0YSwweDkwLDB4MDIsMHhlNCwweDAxLDB4YjksMHgwMSB9fSwKKyB7MTYsIDB4YWVhMCwgMCwgezB4MjQsMHg0MCwweDU4LDB4OTAsMHgxMiwweGM0LDB4MDAsMHgyOSwweDQwLDB4MmUsMHg0MCwweDBiLDB4MTAsMHgwYSwweDI0LDB4ODAgfX0sCisgezE2LCAweGFlYjAsIDAsIHsweDg5LDB4MDUsMHgyNiwweDQxLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZWMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHg4MCwweDgxLDB4MjAsMHg2MSwweDQ4LDB4MDgsMHg1MiwweDAyLDB4MTQsMHg4MSwweDk1LDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4YWVkMCwgMCwgezB4NDAsMHgwYSwweDM2LDB4MDIsMHhjNCwweDAwLDB4YjEsMHgyMCwweDAwLDB4NDgsMHg0MSwweDEwLDB4NDIsMHg0NCwweDAxLDB4YTEgfX0sCisgezE2LCAweGFlZTAsIDAsIHsweDAwLDB4MjQsMHg0OCwweDBiLDB4MTIsMHgxMiwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjgsMHg0OCwweDBiLDB4MTIsMHgwMiwweGNhIH19LAorIHsxNiwgMHhhZWYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhkOCwweDUwLDB4MzYsMHgwMCB9fSwKKyB7MTYsIDB4YWYwMCwgMCwgezB4MGUsMHg4NSwweDIzLDB4MjEsMHg0MiwweDhjLDB4NTQsMHgzNCwweDE0LDB4MGUsMHg4MCwweDAyLDB4ZTEsMHg0MCwweGY4LDB4NTAgfX0sCisgezE2LCAweGFmMTAsIDAsIHsweDM2LDB4MTQsMHgwNCwweDgwLDB4MDMsMHhlMSwweDQ0LDB4ZTgsMHg1MCwweDdlLDB4MTUsMHgwZiwweDg1LDB4MDMsMHgyMSwweDQyIH19LAorIHsxNiwgMHhhZjIwLCAwLCB7MHg0YSwweDAwLDB4MzYsMHgxNCwweDBmLDB4ODAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWYzMCwgMCwgezB4OTgsMHgxZCwweGM0LDB4NDAsMHhmOSwweDEwLDB4MWUsMHg0NCwweDRlLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwLDB4M2YgfX0sCisgezE2LCAweGFmNDAsIDAsIHsweGMwLDB4MGQsMHg5MSwweDAzLDB4ZjQsMHgwMCwweGQ5LDB4MTQsMHgzZSwweDQ0LDB4MGYsMHg5MCwweDAzLDB4NzQsMHgwMCwweGRkIH19LAorIHsxNiwgMHhhZjUwLCAwLCB7MHgwMCwweDdhLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDQwLDB4ZjksMHgzOCwweDNmLDB4NDQsMHgwZiwweDkzLDB4ODMsMHhlNyB9fSwKKyB7MTYsIDB4YWY2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmNiwweDgwLDB4ZjksMHhhNCwweDNmLDB4NjggfX0sCisgezE2LCAweGFmNzAsIDAsIHsweDBlLDB4OWUsMHg0MywweDY3LDB4ODAsMHhkOSwweGU0LDB4M2YsMHg0MSwweDBmLDB4ZDgsMHg0MywweDA0LDB4MDAsMHhlZCwweGMwIH19LAorIHsxNiwgMHhhZjgwLCAwLCB7MHgzNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGQ1LDB4NDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZjQsMHgwMCB9fSwKKyB7MTYsIDB4YWY5MCwgMCwgezB4ZGQsMHgwMCwweDMyLDB4NDAsMHgyYywweDlhLDB4MDMsMHhjNiwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmYTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAwLDB4ZTgsMHhjMCwweDJlLDB4MTQsMHg0ZCwweDhmLDB4MjIsMHgyMywweGMwLDB4ZjgsMHhmMCwweGFhIH19LAorIHsxNiwgMHhhZmIwLCAwLCB7MHgwMCwweDBjLDB4ODAsMHgwMywweGEyLDB4YTAsMHhkOCwweDgyLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGU4LDB4MDAsMHhkOCB9fSwKKyB7MTYsIDB4YWZjMCwgMCwgezB4ODAsMHgyYSwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTgsMHgwOCwweDg4LDB4YTgsMHgzNiwweDAwLDB4NDgsMHg4YSwweDgyLDB4Y2UgfX0sCisgezE2LCAweGFmZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4NDgsMHgyZSwweDQwIH19LAorIHsxNiwgMHhhZmUwLCAwLCB7MHgwYSwweDEyLDB4MjIsMHg0NCwweDAwLDB4OTEsMHgwNCwweGE0LDB4NDEsMHgwYSwweDk0LDB4MDYsMHgyNCwweDAwLDB4OTEsMHg0MiB9fSwKKyB7MTYsIDB4YWZmMCwgMCwgezB4MjQsMHg0MSwweDA5LDB4MTAsMHgwMiwweGU0LDB4MDEsMHg5MSwweDIwLDB4MjQsMHg0MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4MDEgfX0sCisgezE2LCAweGIwMDAsIDAsIHsweDkxLDB4MDAsMHgyYywweDQwLDB4MDksMHgxNCwweDAyLDB4YzIsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMDEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDQwLDB4NDgsMHgxMCwweDAyLDB4MjQsMHgwMCwweGI5LDB4NDAsMHhhYSB9fSwKKyB7MTYsIDB4YjAyMCwgMCwgezB4NDAsMHgxOCwweGIwLDB4MDIsMHhlNCwweDA4LDB4OTksMHgwMCwweDIyLDB4NDAsMHgxOSwweDkwLDB4NDYsMHhlNCwweDgwLDB4OTkgfX0sCisgezE2LCAweGIwMzAsIDAsIHsweDA0LDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDEsMHg5OSwweDA0LDB4MjYsMHg1MCwweDA5LDB4OTAsMHgwMiwweGM2IH19LAorIHsxNiwgMHhiMDQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU0LDB4MDAsMHhmOSwweDA2LDB4M2MsMHg0MCB9fSwKKyB7MTYsIDB4YjA1MCwgMCwgezB4MGEsMHg5MCwweDAzLDB4NjQsMHgwMiwweGQ5LDB4MDAsMHhiNiwweDUwLDB4MGUsMHg5MCwweDIzLDB4MjYsMHgwMSwweGY5LDB4MDAgfX0sCisgezE2LCAweGIwNjAsIDAsIHsweDM2LDB4NDAsMHgyOSwweDk0LDB4ODMsMHhlNCwweDAwLDB4ZDksMHg0OCwweDM2LDB4NDAsMHgwZCwweDkwLDB4MDMsMHhjNywweDAwIH19LAorIHsxNiwgMHhiMDcwLCAwLCB7MHhkMSwweDA3LDB4M2EsMHg1MCwweGNkLDB4OTAsMHgwMywweGU4LDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjA4MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDgsMHhlOSwweDAwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGM0LDB4MDgsMHhmMSwweDAwLDB4M2EgfX0sCisgezE2LCAweGIwOTAsIDAsIHsweDY4LDB4OGYsMHg5MCwweDAzLDB4YTQsMHg0MSwweGY5LDB4MDAsMHhiZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhiMGEwLCAwLCB7MHhjMCwweDM4LDB4NDAsMHgyZSwweDkwLDB4MDMsMHhlNiwweDQwLDB4ZTksMHgwMCwweDNlLDB4NjgsMHgwNiwweDkwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4YjBiMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwNSwweDNlLDB4MDAgfX0sCisgezE2LCAweGIwYzAsIDAsIHsweDA3LDB4ODAsMHgwYiwweDIwLDB4MDAsMHhlOCwweDQwLDB4M2UsMHgxMCwweDBkLDB4ODIsMHgwMywweDYwLDB4MDAsMHhjOCwweDAwIH19LAorIHsxNiwgMHhiMGQwLCAwLCB7MHhiMiwweDAwLDB4OGQsMHg4MywweDAzLDB4ZTAsMHgwMCwweGQ4LDB4NTAsMHgzYSwweDAwLDB4MWUsMHg4MCwweDAzLDB4ZTEsMHgyNCB9fSwKKyB7MTYsIDB4YjBlMCwgMCwgezB4ZjgsMHgwMCwweGIyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwZjAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4OGEsMHgwNCwweDJmLDB4ODQsMHg2YSwweGEwLDB4MGIsMHhlOCwweDA4LDB4OGUsMHgwMCwweDNkIH19LAorIHsxNiwgMHhiMTAwLCAwLCB7MHg4MCwweDg4LDB4ZWMsMHgwMywweDY4LDB4MTAsMHhhNiwweDAxLDB4MzYsMHg4MCwweDA4LDB4YTgsMHgwMCwweGM4LDB4MTAsMHg4ZSB9fSwKKyB7MTYsIDB4YjExMCwgMCwgezB4MTAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4ZmIsMHgyMCwweGJlLDB4NTEsMHgyYSwweDgwLDB4MGIsMHhhMCwweDAyLDB4ODIgfX0sCisgezE2LCAweGIxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDEsMHgyMSwweDkzLDB4MDAsMHgyYywweGYwIH19LAorIHsxNiwgMHhiMTMwLCAwLCB7MHgzOSwweDMwLDB4MDYsMHgwYywweDAwLDB4YTMsMHgwMCwweDI4LDB4MDgsMHgyOCwweGJjLDB4MDIsMHgyYywweDAwLDB4ODMsMHg4MCB9fSwKKyB7MTYsIDB4YjE0MCwgMCwgezB4MmEsMHhjMCwweDA4LDB4MzAsMHgwMCwweGNjLDB4MDAsMHg5YSwweDgwLDB4MjgsMHhjMCwweDBhLDB4MzAsMHgwMiwweGNkLDB4MDAgfX0sCisgezE2LCAweGIxNTAsIDAsIHsweGIzLDB4MDQsMHg2MiwweGMxLDB4MGIsMHgzMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMTYwLCAwLCB7MHhhMCwweDAxLDB4MWUsMHgwNCwweDA3LDB4MTEsMHgyYywweGQwLDB4MGEsMHgzMiwweDIyLDB4ZGMsMHhjMSwweDg3LDB4MDAsMHg2ZCB9fSwKKyB7MTYsIDB4YjE3MCwgMCwgezB4ZDAsMHgwOCwweDM0LDB4MDIsMHg3YywweDAwLDB4YTcsMHgwOCwweDI0LDB4YzgsMHgwOCwweDcwLDB4MDIsMHhkYywweDgwLDB4MGYgfX0sCisgezE2LCAweGIxODAsIDAsIHsweDAwLDB4MjEsMHhjNCwweDA4LDB4NzMsMHgwNiwweGRjLDB4MDAsMHhiMiwweDAwLDB4NjEsMHhjOCwweDBiLDB4M2EsMHgwMiwweDg4IH19LAorIHsxNiwgMHhiMTkwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDBhLDB4MDAsMHg1NywweDgxLDB4MmQsMHhhMCB9fSwKKyB7MTYsIDB4YjFhMCwgMCwgezB4MmQsMHg3YywweDAyLDB4M2UsMHg4MiwweGUzLDB4ZTAsMHgzYiwweGUwLDB4MGMsMHg3OCwweDAzLDB4MWUsMHgyMCwweGM3LDB4ODAgfX0sCisgezE2LCAweGIxYjAsIDAsIHsweGI5LDB4ZTgsMHgyYywweDc4LDB4MDMsMHhmZiwweDgwLDB4ZDYsMHg4MCwweDNiLDB4ZWMsMHgwMiwweDdhLDB4MDMsMHhkZSwweDAwIH19LAorIHsxNiwgMHhiMWMwLCAwLCB7MHhmNywweDgxLDB4MzEsMHhlYywweDhmLDB4N2MsMHgwMywweDBhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjFkMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhmYiwweDAwLDB4MWUsMHg4MCwweDIzLDB4YjYsMHg4MywweGVkLDB4YTAsMHhkYiwweDY0LDB4M2UgfX0sCisgezE2LCAweGIxZTAsIDAsIHsweGMwLDB4MGUsMHhiMCwweDAzLDB4ZWQsMHhjMCwweGYyLDB4MDAsMHgzZSwweGQ0LDB4MGEsMHhiMCwweDAzLDB4ZWMsMHgzMCwweGVlIH19LAorIHsxNiwgMHhiMWYwLCAwLCB7MHg2NCwweDNlLDB4YzAsMHgwNywweGIwLDB4YzMsMHhlOCwweDAwLDB4ZmIsMHgwMSwweDNlLDB4YzgsMHgwZiwweGI4LDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YjIwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4ZWYsMHg4MCwweDNiLDB4ZTAgfX0sCisgezE2LCAweGIyMTAsIDAsIHsweDBmLDB4ZjgsMHg2MywweDdlLDB4MDQsMHhjZiwweGMwLDB4YjcsMHgyMCwweDBlLDB4ZjgsMHgwMywweGZjLDB4MDAsMHhjNywweDgwIH19LAorIHsxNiwgMHhiMjIwLCAwLCB7MHgzMywweGYwLDB4MGMsMHhjYywweDAzLDB4ZmUsMHgwOCwweGY3LDB4YzEsMHgzMywweGUwLDB4NGYsMHhmOCwweDAzLDB4YjIsMHg0MCB9fSwKKyB7MTYsIDB4YjIzMCwgMCwgezB4ZmYsMHhhMCwweDMxLDB4ZTYsMHgwYywweGY4LDB4MDMsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyNDAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ZWYsMHgwMiwweDIxLDB4NDAsMHgyZCwweDcwLDB4MDIsMHgxYywweDAwLDB4ZjcsMHgxMCwweDI5IH19LAorIHsxNiwgMHhiMjUwLCAwLCB7MHg0MCwweDA4LDB4NzAsMHgyMiwweGZjLDB4YzAsMHhhNywweDAwLDB4M2QsMHhjMCwweDA4LDB4NDAsMHgwMiwweGRjLDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4YjI2MCwgMCwgezB4NDAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZGEsMHg4MCwweGI3LDB4MjQsMHgyOSwweGM2LDB4NDgsMHhmMCwweDAyLDB4MmEgfX0sCisgezE2LCAweGIyNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGE3LDB4MDAsMHgyOCwweDg0IH19LAorIHsxNiwgMHhiMjgwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHgwYywweDAwLDB4OTMsMHgwMCwweDI1LDB4ODAsMHgwYSwweDYxLDB4MDIsMHhkYywweDAxLDB4YTcsMHgxMCB9fSwKKyB7MTYsIDB4YjI5MCwgMCwgezB4MjQsMHhjMCwweDA4LDB4NDAsMHg4MiwweGRjLDB4MDAsMHg5ZiwweDAwLDB4MjUsMHhjNCwweDBiLDB4NzAsMHgwMiwweDk0LDB4MjUgfX0sCisgezE2LCAweGIyYTAsIDAsIHsweGI3LDB4MzIsMHgyMywweGM0LDB4MWIsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMmIwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwYywweGEzLDB4MDAsMHgyMCwweDAwLDB4MjksMHgzMCwweDBhLDB4MGMsMHgwMCwweGEzLDB4MDAsMHg2YyB9fSwKKyB7MTYsIDB4YjJjMCwgMCwgezB4MDAsMHgwOCwweDEwLDB4NDIsMHhjZCwweDEwLDB4YWEsMHgwMCwweGFjLDB4YzAsMHgwMCwweDA0LDB4MDIsMHhjZCwweDAwLDB4YmIgfX0sCisgezE2LCAweGIyZDAsIDAsIHsweDEwLDB4MjQsMHhjMCwweDAzLDB4MzAsMHg0MiwweGMzLDB4MDksMHhiMywweDAwLDB4MmMsMHhkMCwweDBhLDB4MzAsMHgwMiwweDE4IH19LAorIHsxNiwgMHhiMmUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweDgwLDB4MDAsMHhlZiwweDAwLDB4M2EsMHg0MCB9fSwKKyB7MTYsIDB4YjJmMCwgMCwgezB4MDcsMHhmMCwweDQzLDB4M2MsMHgwMCwweDlmLDB4YzAsMHhiNiwweDE0LDB4MGUsMHg4MCwweDA2LDB4ZmMsMHgwMSwweGNiLDB4MDEgfX0sCisgezE2LCAweGIzMDAsIDAsIHsweDM3LDB4YzAsMHhhYywweGI0LDB4MDIsMHhmYywweDAwLDB4ZDksMHgwMSwweDM3LDB4YzAsMHg0YiwweGYwLDB4MTMsMHhhZSwweDA4IH19LAorIHsxNiwgMHhiMzEwLCAwLCB7MHhmYiwweDAwLDB4MzMsMHhkMCwweDJlLDB4ZjAsMHgwYiwweDJhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjMyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDA1LDB4M2UsMHg0MCwweDBmLDB4MzAsMHgwMywweGFjLDB4MTQsMHhmYiwweGEwLDB4M2EgfX0sCisgezE2LCAweGIzMzAsIDAsIHsweGMwLDB4MGYsMHg4NCwweDQzLDB4ZWMsMHgwMSwweGY5LDB4NDAsMHgzZSwweGMwLDB4MGYsMHhhMiwweDAzLDB4ZWMsMHgyMSwweGY5IH19LAorIHsxNiwgMHhiMzQwLCAwLCB7MHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlNCwweDIwLDB4ZjAsMHgwMCwweGJhLDB4YzAsMHgwZCwweGIwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YjM1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmOCwweDAwLDB4ZDcsMHgwMSwweDM1LDB4NjggfX0sCisgezE2LCAweGIzNjAsIDAsIHsweDZkLDB4ZjAsMHgwMywweDNjLDB4MDEsMHhlNywweDAwLDB4MzMsMHhjMCwweDBkLDB4YzAsMHgwMywweGZjLDB4MjQsMHhjZiwweDAyIH19LAorIHsxNiwgMHhiMzcwLCAwLCB7MHgzNywweGMwLDB4MGQsMHhkMiwweDAyLDB4ZmMsMHgwMCwweGRmLDB4MDEsMHgzMywweGMwLDB4NWUsMHg3MCwweDMzLDB4MWMsMHgxOCB9fSwKKyB7MTYsIDB4YjM4MCwgMCwgezB4Y2YsMHg0MSwweDMxLDB4YzIsMHgwYywweGYwLDB4MDMsMHg0MCwweDQwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIzOTAsIDAsIHsweDgxLDB4MDAsMHg2YywweDAwLDB4OGIsMHgwMCwweDIyLDB4NTIsMHgyYSwweGIwLDB4MDMsMHg2YywweDAwLDB4YWIsMHgwMCwweDI4IH19LAorIHsxNiwgMHhiM2EwLCAwLCB7MHhjMCwweDBhLDB4OGMsMHgwMiwweGVjLDB4MTAsMHg4YiwweGUwLDB4MjIsMHhjMCwweDBmLDB4ODAsMHgwMiwweGNjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4YjNiMCwgMCwgezB4ODAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MmEsMHgxMCwweGQ5LDB4ODAsMHgyMiwweGMwLDB4YzgsMHhiMCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGIzYzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjQsMHgwMSwweDliLDB4MDAsMHgyNiwweDgwIH19LAorIHsxNiwgMHhiM2QwLCAwLCB7MHgyOSwweGIwLDB4NjIsMHgwYywweDAwLDB4YWIsMHgwMSwweDZhLDB4MDAsMHgwOCwweDk4LDB4MDIsMHhjYywweDAwLDB4OWIsMHg4MyB9fSwKKyB7MTYsIDB4YjNlMCwgMCwgezB4MmUsMHhjMCwweGNiLDB4YjQsMHgxMiwweGVjLDB4MDMsMHg4YiwweDgwLDB4MjgsMHhjMCwweDBhLDB4YjAsMHgwNiwweGEyLDB4MDAgfX0sCisgezE2LCAweGIzZjAsIDAsIHsweDhiLDB4MDIsMHg2MiwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNDAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMSwweDgzLDB4MTQsMHgyMCwweDAwLDB4MGEsMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4YjQxMCwgMCwgezB4NDAsMHgwYSwweDEwLDB4MDAsMHhjYywweDAyLDB4OTMsMHgwMCwweDI4LDB4YzAsMHgwYSwweDIwLDB4MDIsMHhlYywweDAwLDB4MDMgfX0sCisgezE2LCAweGI0MjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgxNiwweDAwLDB4ODAsMHg5MSwweDAwLDB4NjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhiNDMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhkYiwweDAwLDB4MzYsMHg4MCB9fSwKKyB7MTYsIDB4YjQ0MCwgMCwgezB4MmQsMHhmMCwweDAzLDB4M2MsMHgwMCwweGFmLDB4MDAsMHgzYSwweDgwLDB4MGQsMHg4MCwweDAzLDB4ZmMsMHgwMCwweDViLDB4MDAgfX0sCisgezE2LCAweGI0NTAsIDAsIHsweDM3LDB4YzAsMHgwOSwweDkwLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgwMCwweDMzLDB4YzAsMHgwYSwweGYwLDB4MDMsMHhhNCwweDIwIH19LAorIHsxNiwgMHhiNDYwLCAwLCB7MHhjYiwweDAwLDB4YjMsMHhjMCwweDhjLDB4YjAsMHgwMywweDQwLDB4MDIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjQ3MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDQsMHhmZiwweDIwLDB4MGYsMHgwMCwweDI3LDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4MmQgfX0sCisgezE2LCAweGI0ODAsIDAsIHsweDAwLDB4MGIsMHhkMCwweDI3LDB4ZmMsMHgwMCwweGVmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhjMCwweDQzLDB4ZmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHhiNDkwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZCwweGYwLDB4MGIsMHhlMCwweDAwLDB4ZjUsMHgwMCwweDNmLDB4YzAsMHgxZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4YjRhMCwgMCwgezB4MDcsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmNCwweGMwLDB4ZmMsMHgyMiwweDdmLDB4YzAgfX0sCisgezE2LCAweGI0YjAsIDAsIHsweDBjLDB4ZDAsMHg0MywweDM2LDB4MDAsMHhjNCwweDgxLDB4MzQsMHhjMCwweDFjLDB4ODksMHgwNywweGYyLDB4ODAsMHhjZiwweDgwIH19LAorIHsxNiwgMHhiNGMwLCAwLCB7MHgzMywweDYwLDB4MGYsMHg3OSwweDAzLDB4M2MsMHhlMCwweGNmLDB4MDgsMHgzMywweDQ4LDB4MGQsMHhjNCwweDAzLDB4ZjAsMHg1MCB9fSwKKyB7MTYsIDB4YjRkMCwgMCwgezB4ZGMsMHg5MCwweDM3LDB4Y2MsMHgwZiwweGY4LDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0ZTAsIDAsIHsweDgwLDB4MTAsMHhlOSwweDkwLDB4YjgsMHg4MCwweDdlLDB4ZTQsMHg4OCwweDk5LDB4MGEsMHgyNiwweDA4LDB4YTksMHg4MCwweDIyIH19LAorIHsxNiwgMHhiNGYwLCAwLCB7MHhmNCwweDJjLDB4OTksMHgwMywweGE3LDB4MDIsMHg4OSwweDgwLDB4MjIsMHgzNCwweDBiLDB4OWEsMHgwMywweDdkLDB4MDAsMHhkZiB9fSwKKyB7MTYsIDB4YjUwMCwgMCwgezB4NDgsMHgyYiwweDYwLDB4MDgsMHgwNSwweDAyLDB4ZTUsMHgwMCwweDgyLDB4MjAsMHgyMiwweGM0LDB4OGIsMHhiMCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGI1MTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzUsMHgwMCwweGIwLDB4MTAsMHgyYywweGMwIH19LAorIHsxNiwgMHhiNTIwLCAwLCB7MHgyYSwweDAwLDB4MDIsMHhhNCwweDA4LDB4YTgsMHgwNCwweGUwLDB4ODAsMHgwYiwweDAwLDB4MDIsMHhjNCwweDQxLDB4YjIsMHgwNCB9fSwKKyB7MTYsIDB4YjUzMCwgMCwgezB4YTQsMHgwYSwweDBiLDB4YjAsMHgwMiwweDhjLDB4ODEsMHg4MywweDIwLDB4NjAsMHg1MCwweDk4LDB4MTIsMHgxMiwweDhiLDB4ODAgfX0sCisgezE2LCAweGI1NDAsIDAsIHsweDg5LDB4MDAsMHgyYywweGM4LDB4MGIsMHgzMCwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNTUwLCAwLCB7MHhjMCwweDExLDB4YWMsMHgyMCwweGJiLDB4MDIsMHgyYSwweGMwLDB4MGEsMHg4OCwweDAyLDB4YTQsMHgwOCwweGE5LDB4ODAsMHhhMiB9fSwKKyB7MTYsIDB4YjU2MCwgMCwgezB4ZTEsMHgxYiwweDljLDB4MjIsMHhlNiwweDAwLDB4YjgsMHg0MCwweDI2LDB4MzAsMHgwYiwweDkwLDB4MDIsMHhjYywweDAxLDB4OTMgfX0sCisgezE2LCAweGI1NzAsIDAsIHsweDA0LDB4MmEsMHg0MCwweDM5LDB4OTgsMHg4MiwweGVjLDB4MTQsMHg4YiwweDY1LDB4MmEsMHhjMCwweDBiLDB4YjIsMHgwMiwweGY4IH19LAorIHsxNiwgMHhiNTgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGU3LDB4MDAsMHhiOCwweDQ4LDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4YjU5MCwgMCwgezB4MGUsMHg4OCwweDQzLDB4ODQsMHgwMCwweGUzLDB4YzEsMHgzNiwweGU4LDB4MGYsMHg5YywweDEyLDB4ZTIsMHg4MCwweGYzLDB4YzAgfX0sCisgezE2LCAweGI1YTAsIDAsIHsweDM2LDB4NzAsMHg1ZiwweGE4LDB4MjMsMHhhYywweDAxLDB4Y2IsMHgwNCwweDIyLDB4NDAsMHg0ZCwweDg0LDB4MDMsMHhlMiwweDAwIH19LAorIHsxNiwgMHhiNWIwLCAwLCB7MHhkOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgwMywweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjVjMCwgMCwgezB4ZTAsMHgwMSwweGIzLDB4MDksMHhmZSwweDEwLDB4M2UsMHg4MSwweDBkLDB4YzAsMHgwMywweDc0LDB4MGMsMHhmZiwweDAwLDB4M2QgfX0sCisgezE2LCAweGI1ZDAsIDAsIHsweGMxLDB4OGMsMHhkMCwweDgzLDB4MTQsMHgwMCwweGNkLDB4MjAsMHgzYSwweDQwLDB4MGQsMHhjYSwweDAxLDB4N2MsMHgwMCwweGZmIH19LAorIHsxNiwgMHhiNWUwLCAwLCB7MHgwMCwweDFmLDB4NDAsMHgwZSwweGMwLDB4MjMsMHhmMiwweDQ2LDB4ZmUsMHg4NCwweDM3LDB4YzAsMHgwZiwweGQ4LDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4YjVmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZGQsMHgwMiwweDNkLDB4NDAgfX0sCisgezE2LCAweGI2MDAsIDAsIHsweDBlLDB4OTAsMHgwMywweGFjLDB4MDAsMHhlYiwweDQ4LDB4M2UsMHhkMCwweDBjLDB4ODAsMHg2MywweGEyLDB4MDgsMHhjYSwweDAwIH19LAorIHsxNiwgMHhiNjEwLCAwLCB7MHgzMiwweDA4LDB4MGMsMHhiMCwweDAzLDB4YWMsMHgwOCwweGViLDB4MDAsMHgzZSwweDQwLDB4MGMsMHhkNCwweDgzLDB4NTgsMHgyMCB9fSwKKyB7MTYsIDB4YjYyMCwgMCwgezB4ZjksMHg0MiwweDMyLDB4YzAsMHgwYywweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2MzAsIDAsIHsweGM4LDB4MDUsMHgyOCwweDAyLDB4ZGIsMHgwMCwweDJlLDB4ZTAsMHgyOCwweDNhLDB4MDIsMHgyZSwweDAwLDB4ZGIsMHg2MCwweDc2IH19LAorIHsxNiwgMHhiNjQwLCAwLCB7MHhlMCwweDBkLDB4OGMsMHgwMiwweGUwLDB4MDAsMHg4OCwweDAyLDB4MzYsMHg1OCwweDY4LDB4MTUsMHg4MywweDdjLDB4MDgsMHhiZiB9fSwKKyB7MTYsIDB4YjY1MCwgMCwgezB4MDAsMHgyZCwweDYwLDB4MDgsMHg5MCwweDAyLDB4YTksMHgwMCwweGIzLDB4MDUsMHgyMywweGMwLDB4MDgsMHhiMCwweDAyLDB4ZjIgfX0sCisgezE2LCAweGI2NjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgxMCwweDgwLDB4MDAsMHgwYywweGMxIH19LAorIHsxNiwgMHhiNjcwLCAwLCB7MHgwOCwweDFjLDB4ODIsMHgwNiwweDAwLDB4OTMsMHhjMCwweDIwLDB4ZjYsMHgwYSwweDIwLDB4MDIsMHgwOCwweDAwLDB4OTMsMHgwMCB9fSwKKyB7MTYsIDB4YjY4MCwgMCwgezB4MjQsMHg2MCwweDA5LDB4M2MsMHgwMiwweDBjLDB4MDAsMHg4MywweDAwLDB4MmMsMHg2MCwweDA5LDB4MDEsMHgxMiwweDAwLDB4NDAgfX0sCisgezE2LCAweGI2OTAsIDAsIHsweGIwLDB4MDAsMHhlMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NzAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNmEwLCAwLCB7MHgyMCwweDQxLDB4MGEsMHg0MCwweDg2LDB4ODEsMHgyZCwweGUwLDB4NTgsMHgxOCwweDBhLDB4MTYsMHhhMCwweDk3LDB4ODAsMHgyNSB9fSwKKyB7MTYsIDB4YjZiMCwgMCwgezB4ZTksMHgxOSwweDc4LDB4ODIsMHhkNiwweDAwLDB4OTcsMHg4MCwweDI1LDB4YTAsMHgxOSwweGY4LDB4MDIsMHg1ZSwweDAwLDB4YjcgfX0sCisgezE2LCAweGI2YzAsIDAsIHsweDgwLDB4MmQsMHg2MCwweDI4LDB4NDgsMHgxMiwweDk2LDB4MDAsMHhiNCwweDgwLDB4MjEsMHhlMCwweDI4LDB4NzgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhiNmQwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MSwweDMwLDB4M2MsMHhjMiB9fSwKKyB7MTYsIDB4YjZlMCwgMCwgezB4MGUsMHgwMCwweDAyLDB4ODQsMHgwMCwweGUzLDB4NDAsMHgyOCwweGU4LDB4NGMsMHgyOSwweDAzLDB4MGMsMHgwMCwweGQzLDB4MDAgfX0sCisgezE2LCAweGI2ZjAsIDAsIHsweDM0LDB4YzQsMHgwZCwweDMxLDB4MDMsMHg4YywweDA4LDB4ZTMsMHgwMCwweDNjLDB4NDYsMHgwYywweDIwLDB4MDMsMHgwMCwweDgwIH19LAorIHsxNiwgMHhiNzAwLCAwLCB7MHhmMiwweDAwLDB4MzIsMHhjMCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjcxMCwgMCwgezB4NDAsMHgxOSwweGI4LDB4MDAsMHhmZiwweDEwLDB4MmYsMHhjMCwweDBmLDB4YzAsMHgyMywweGM0LDB4ODAsMHg3ZiwweDEwLDB4M2UgfX0sCisgezE2LCAweGI3MjAsIDAsIHsweGMwLDB4MGYsMHhiMSwweDAzLDB4ZGMsMHgwMCwweGU3LDB4MDAsMHgzZiwweDgwLDB4MDYsMHhmMSwweDQzLDB4ZmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHhiNzMwLCAwLCB7MHgwOCwweDdkLDB4NTAsMHgwZSwweGUxLDB4MjMsMHhiNCwweDA4LDB4ZmUsMHgxMCwweDNmLDB4YzQsMHgwZiwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4Yjc0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAyLDB4Y2MsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGI3NTAsIDAsIHsweDJjLDB4YzAsMHgwMywweDA0LDB4MDEsMHhjYiwweDAwLDB4MzMsMHg2MCwweDJjLDB4OTAsMHgxMywweGU4LDB4MDAsMHg3MywweDAwIH19LAorIHsxNiwgMHhiNzYwLCAwLCB7MHhiMiwweGMxLDB4MGYsMHhhMCwweDAzLDB4ZWMsMHg4MCwweGZiLDB4MjgsMHgzZSwweDU0LDB4MWYsMHhkMCwweDAzLDB4ZmUsMHgwMiB9fSwKKyB7MTYsIDB4Yjc3MCwgMCwgezB4YzksMHg4MCwweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3ODAsIDAsIHsweDQ4LDB4MTEsMHg4MCwweDAwLDB4ODYsMHgwMCwweDJkLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgxNCwweDA4LDB4ODcsMHgwMCwweDI5IH19LAorIHsxNiwgMHhiNzkwLCAwLCB7MHg0MCwweDA4LDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4NjAsMHgwMiwweDVjLDB4YTAsMHg5NyB9fSwKKyB7MTYsIDB4YjdhMCwgMCwgezB4MjAsMHgyZCwweDQ4LDB4MGIsMHg1MCwweDAyLDB4ZGMsMHgxMCwweDhkLDB4MDAsMHgyMSwweGM4LDB4MGIsMHg3MCwweDAyLDB4ZDIgfX0sCisgezE2LCAweGI3YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWYsMHgwMCwweDg1LDB4ODEsMHgyYywweDYwIH19LAorIHsxNiwgMHhiN2MwLCAwLCB7MHgxOCwweDU4LDB4MDIsMHhkZSwweDIwLDB4YjcsMHg4MiwweDI4LDB4NjAsMHg1YSwweDc4LDB4NTIsMHhkZSwweDEwLDB4YmYsMHg4MCB9fSwKKyB7MTYsIDB4YjdkMCwgMCwgezB4MjEsMHhlMCwweDRiLDB4NzgsMHgwNiwweGRlLDB4NDAsMHhiNywweGEwLDB4MmQsMHg2OSwweDliLDB4NzgsMHgxMiwweGNlLDB4MDAgfX0sCisgezE2LCAweGI3ZTAsIDAsIHsweDg3LDB4ODAsMHhlMSwweGU0LDB4MGIsMHg3OCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiN2YwLCAwLCB7MHg0OCwweDE0LDB4ZWUsMHgwMCwweDgzLDB4MDAsMHgyYywweGMyLDB4MDgsMHgzNiwweDAyLDB4OGMsMHgwOCwweDgzLDB4ZjAsMHg2OCB9fSwKKyB7MTYsIDB4YjgwMCwgMCwgezB4NDAsMHgwYSwweDNlLDB4MDIsMHhjZCwweDQwLDB4YjMsMHgwMCwweDIwLDB4ZTAsMHgwYiwweDMyLDB4MDYsMHg0YywweDAwLDB4OWIgfX0sCisgezE2LCAweGI4MTAsIDAsIHsweDAwLDB4MGMsMHg0MCwweDBiLDB4MzAsMHgwMiwweGNkLDB4ODAsMHg4MywweDA4LDB4MjAsMHhjMCwweDBiLDB4YjEsMHgwMiwweGRhIH19LAorIHsxNiwgMHhiODIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI4LDB4MDAsMHhjZSwweDA4LDB4M2YsMHhiMCB9fSwKKyB7MTYsIDB4YjgzMCwgMCwgezB4MGMsMHhlNCwweDIzLDB4ZGEsMHgwMiwweGRlLDB4NDAsMHhiYiwweGIyLDB4MGUsMHhlMiwweDQzLDB4ZmEsMHgwMCwweGZlLDB4MDAgfX0sCisgezE2LCAweGI4NDAsIDAsIHsweDMzLDB4OTAsMHgwYiwweGUwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODEsMHgwYiwweGUwLDB4MTMsMHhmOSwweDA4IH19LAorIHsxNiwgMHhiODUwLCAwLCB7MHhjZSwweDQwLDB4MzIsMHg4MCwweDBmLDB4YTgsMHgwMywweGZhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjg2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MjQsMHg5OCwweDA4LDB4M2MsMHgwNCwweDBmLDB4MDAsMHgwYiwweDYwLDB4MDAsMHhmOCwweDQwLDB4MmUgfX0sCisgezE2LCAweGI4NzAsIDAsIHsweDAzLDB4MGQsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDA2LDB4MGIsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGQ4IH19LAorIHsxNiwgMHhiODgwLCAwLCB7MHgwMCwweDNjLDB4MDAsMHgwMywweDhjLDB4MjMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDdlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4Yjg5MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGI4YTAsIDAsIHsweDhjLDB4OTAsMHgwMywweDI1LDB4MDAsMHhlOSwweDgwLDB4MzIsMHg0NCwweDBmLDB4OTQsMHgwMiwweGU0LDB4MjAsMHhmOSwweDAwIH19LAorIHsxNiwgMHhiOGIwLCAwLCB7MHgzMiwweDcwLDB4MGYsMHg5YSwweDQzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHgxMCwweDMzLDB4MjQsMHgxMCB9fSwKKyB7MTYsIDB4YjhjMCwgMCwgezB4ZjksMHgwMSwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI4ZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4MiwweDJlLDB4NDAsMHgyOCwweDkwLDB4MDIsMHgyNCwweDgyLDB4ODEsMHhjMCwweGEyIH19LAorIHsxNiwgMHhiOGUwLCAwLCB7MHg3MCwweDBiLDB4OWMsMHgwMiwweGU0LDB4MDAsMHgzMSwweDQyLDB4YTIsMHg2MCwweDBiLDB4OTQsMHg4MiwweGU0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4YjhmMCwgMCwgezB4MDAsMHgyYSwweDQwLDB4MDgsMHg5NCwweGEyLDB4MjUsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDBhLDB4MjAgfX0sCisgezE2LCAweGI5MDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4NjQsMHgyZSwweDQwIH19LAorIHsxNiwgMHhiOTEwLCAwLCB7MHgwOCwweDkwLDB4NDIsMHhhNCwweDAwLDB4ODksMHg2MCwweDIyLDB4NDIsMHgwYiwweDkwLDB4MDIsMHhlNiwweDAwLDB4YjksMHg4MCB9fSwKKyB7MTYsIDB4YjkyMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MDQsMHhiOSwweDAwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHgwMiwweDI0LDB4MDQgfX0sCisgezE2LCAweGI5MzAsIDAsIHsweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MGUsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOTQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHg4MCwweDgxLDB4MDAsMHgyYywweGMxLDB4NDgsMHgxMCwweDAyLDB4YTQsMHgwMiwweDgxLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4Yjk1MCwgMCwgezB4NDAsMHg4MywweDM0LDB4MDIsMHhjNCwweDAwLDB4YmIsMHgwMCwweDIwLDB4ZDAsMHgwYiwweDE0LDB4MDIsMHhjNCwweDgwLDB4YjEgfX0sCisgezE2LCAweGI5NjAsIDAsIHsweDIwLDB4YTAsMHg2OCwweDE4LDB4MTQsMHgxYSwweDBkLDB4MDAsMHhiMSwweDQwLDB4MmMsMHg1MCwweDBiLDB4MTAsMHgwMiwweDBhIH19LAorIHsxNiwgMHhiOTcwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4Yjk4MCwgMCwgezB4OGMsMHg4MCwweDBiLDB4YTAsMHgwNCwweGU4LDB4MDAsMHgzMiwweDAwLDB4MDcsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfX0sCisgezE2LCAweGI5OTAsIDAsIHsweDMyLDB4MDAsMHgxZiwweDgwLDB4MDMsMHhhMSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwIH19LAorIHsxNiwgMHhiOWEwLCAwLCB7MHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjliMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4NDYsMHhmZCwweDQwLDB4M2YsMHg1MCwweDIzLDB4ZDQsMHgxMywweDc0LDB4MDQsMHhmNSwweDAyLDB4M2YgfX0sCisgezE2LCAweGI5YzAsIDAsIHsweDUwLDB4MGYsMHhkNCwweDAzLDB4ZmQsMHgwMCwweGJkLDB4MDAsMHgyZiwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGY5IH19LAorIHsxNiwgMHhiOWQwLCAwLCB7MHgxMCwweDNmLDB4NDQsMHgwZiwweGQ0LDB4MDMsMHhmNSwweDA4LDB4ZmQsMHgwNiwweDNlLDB4NTAsMHgwZiwweGQyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4YjllMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDQwLDB4ZWQsMHgwNCwweDNlLDB4NDggfX0sCisgezE2LCAweGI5ZjAsIDAsIHsweDBjLDB4YjIsMHg4MywweGY0LDB4MDAsMHhjMSwweDAwLDB4MzIsMHg0MCwweDhjLDB4ZDAsMHgwMywweDM0LDB4MDAsMHhmZCwweDAwIH19LAorIHsxNiwgMHhiYTAwLCAwLCB7MHgzNywweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTYsMHgyMCwweGY5LDB4ODgsMHgzZCwweDYyLDB4MGMsMHhkOCwweDAzLDB4ZmUsMHgyNCB9fSwKKyB7MTYsIDB4YmExMCwgMCwgezB4YzEsMHgwMCwweDNlLDB4NzgsMHgwZiwweGQwLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJhMjAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDAwLDB4ODgsMHg0MCwweDJlLDB4MTAsMHgwOCwweGM0LDB4MjMsMHhhMCwweDA4LDB4ODgsMHgwNiwweDJhIH19LAorIHsxNiwgMHhiYTMwLCAwLCB7MHgxNCwweDA4LDB4ODAsMHgwMywweDYwLDB4MDQsMHhiOCwweDAwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHgwMiwweGUyLDB4MDAsMHhiOCB9fSwKKyB7MTYsIDB4YmE0MCwgMCwgezB4ODAsMHgyZSwweDAwLDB4MDgsMHg4YywweDAyLDB4ZTMsMHg4MCwweDg4LDB4MDIsMHgyZSwweDM4LDB4MGIsMHg4OCwweDAyLDB4MGUgfX0sCisgezE2LCAweGJhNTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHg4MCwweGExLDB4YzAsMHgyZCwweDcwIH19LAorIHsxNiwgMHhiYTYwLCAwLCB7MHgwOCwweDUwLDB4NDIsMHhjNCwweDAwLDB4YTksMHgwMCwweDIwLDB4ZTAsMHgyYSwweDEwLDB4MGEsMHgwNCwweDEwLDB4YjEsMHgwMCB9fSwKKyB7MTYsIDB4YmE3MCwgMCwgezB4MjQsMHg0MCwweDRiLDB4MTAsMHgwNiwweGM0LDB4MjAsMHhiMSwweDA4LDB4NmUsMHg0MCwweDBiLDB4MTYsMHg4MiwweGM0LDB4MjAgfX0sCisgezE2LCAweGJhODAsIDAsIHsweDgxLDB4MDAsMHgyYywweDUwLDB4MGIsMHg5MiwweDgyLDB4NTIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYTkwLCAwLCB7MHgxOCwweDExLDB4YTQsMHgwMCwweGE5LDB4MDEsMHgyZSwweDQwLDB4MjgsMHhkMCwweDIwLDB4YTQsMHgwNCwweGE5LDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4YmFhMCwgMCwgezB4NDAsMHgxYSwweGIwLDB4MTIsMHgyNCwweDAwLDB4YjksMHgwYywweDIyLDB4NDIsMHgwYiwweDk0LDB4MDIsMHhlNCwweDAwLDB4YjkgfX0sCisgezE2LCAweGJhYjAsIDAsIHsweDAwLDB4NmUsMHg0MCwweDBiLDB4OTYsMHgwMiwweGU0LDB4MTEsMHg4OSwweDIwLDB4NmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhiYWMwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4YzAsMHhhOSwweGMwLDB4M2UsMHg1MCB9fSwKKyB7MTYsIDB4YmFkMCwgMCwgezB4MDgsMHg5YywweDgzLDB4ZTQsMHgwMiwweGU5LDB4MDAsMHhiMiwweDQwLDB4MmEsMHg5MiwweDEyLDB4MjYsMHg0MCwweGY5LDB4NDAgfX0sCisgezE2LCAweGJhZTAsIDAsIHsweDM2LDB4NzAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDA0LDB4ZjksMHgwMSwweDNjLDB4NDAsMHgwZiwweDk4LDB4MDMsMHhlNiwweDAyIH19LAorIHsxNiwgMHhiYWYwLCAwLCB7MHhjOSwweDIyLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMiwweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmIwMCwgMCwgezB4MjgsMHgwMSwweDg2LDB4MDQsMHhkOSwweDQwLDB4MWMsMHg0MCwweDBmLDB4OTIsMHgyMywweGE0LDB4YjAsMHhkYiwweDA0LDB4M2MgfX0sCisgezE2LCAweGJiMTAsIDAsIHsweGMwLDB4MGQsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQ0LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhiYjIwLCAwLCB7MHgwMCwweDNlLDB4NDIsMHgyYywweDkwLDB4MjMsMHhlNCwweDgwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg4ZiwweDkyLDB4MDMsMHg5MiB9fSwKKyB7MTYsIDB4YmIzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4YzgsMHgyMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGJiNDAsIDAsIHsweDRjLDB4YzAsMHg4YiwweDIwLDB4MDIsMHhjOCwweDMxLDB4MzIsMHgyMCwweDJkLDB4ODQsMHgwMywweGUxLDB4MDQsMHhmOCwweDQ4IH19LAorIHsxNiwgMHhiYjUwLCAwLCB7MHhiYSwweDAwLDB4MGYsMHg4OSwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGQsMHg4MSwweDEzLDB4MjAsMHgxMCB9fSwKKyB7MTYsIDB4YmI2MCwgMCwgezB4ZjgsMHgwMCwweDNhLDB4MDAsMHgwZiwweDgxLDB4MjMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4MGUsMHg0MCwweDIyLDB4ODAsMHgyOCwweGE0LDB4MDIsMHgxOSwweDAwLDB4NTIsMHg4MCwweGEyIH19LAorIHsxNiwgMHhiYjgwLCAwLCB7MHg4MCwweDRkLDB4ZWQsMHg4MiwweGU4LDB4MDAsMHhiNiwweDQyLDB4MjMsMHhiZCwweDBiLDB4ZTgsMHgwMiwweGU4LDB4MDQsMHhkYSB9fSwKKyB7MTYsIDB4YmI5MCwgMCwgezB4MDAsMHgzNywweDgwLDB4MDgsMHhlMCwweDAyLDB4M2EsMHgyMCwweGJhLDB4MDAsMHgyMiwweDgwLDB4MGIsMHhhOCwweDBhLDB4MGEgfX0sCisgezE2LCAweGJiYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4ODAsMHg2MCwweGMwIH19LAorIHsxNiwgMHhiYmIwLCAwLCB7MHgwOCwweDI5LDB4MDIsMHgwZCwweDAwLDB4OTIsMHg0MCwweDI0LDB4YzAsMHgwOCwweGI0LDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4YmJjMCwgMCwgezB4NjgsMHhlMCwweDFiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHg5MywweDAxLDB4MjQsMHhjMCwweDY5LDB4MzgsMHgwMiwweDZjLDB4MDAgfX0sCisgezE2LCAweGJiZDAsIDAsIHsweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYmUwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHg0MCwweDgzLDB4YzAsMHgyMCwweDQwLDB4MDgsMHgyOCwweDA2LDB4OWMsMHgxOCwweDljLDB4MDIsMHgyNCB9fSwKKyB7MTYsIDB4YmJmMCwgMCwgezB4YzAsMHgwOSwweDcwLDB4MDIsMHhkNCwweDAwLDB4YjcsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhjZSwweDQwLDB4OTcgfX0sCisgezE2LCAweGJjMDAsIDAsIHsweGIwLDB4MjUsMHg0MCwweDA4LDB4NzgsMHgxYSwweDU4LDB4MDAsMHhiZiwweGEyLDB4NjUsMHhjOCwweDBiLDB4NzgsMHgwMiwweDIwIH19LAorIHsxNiwgMHhiYzEwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDBlLDB4MDIsMHg4NywweDgwLDB4YjEsMHhhMCB9fSwKKyB7MTYsIDB4YmMyMCwgMCwgezB4MGMsMHg2OCwweDAzLDB4MWEsMHgwOCwweGQ2LDB4OTIsMHgzNSwweGU0LDB4MjgsMHg3OCwweDQyLDB4ZDYsMHgxMCwweGY1LDB4ODAgfX0sCisgezE2LCAweGJjMzAsIDAsIHsweDM5LDB4YTAsMHgwZiwweDc4LDB4MjMsMHhkZSwweDMwLDB4ZDMsMHhhMiwweDM1LDB4YTAsMHg0ZCwweGU4LDB4MDMsMHg1ZSwweDAwIH19LAorIHsxNiwgMHhiYzQwLCAwLCB7MHhmNywweGQwLDB4M2QsMHhmOCwweDBmLDB4ZjAsMHgwMywweDIyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmM1MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHgwMCwweDBiLDB4YTAsMHgwMywweDQ4LDB4MDQsMHhmYSwweDQxLDB4M2EgfX0sCisgezE2LCAweGJjNjAsIDAsIHsweDUwLDB4MGYsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZWQsMHg4OCwweGZiIH19LAorIHsxNiwgMHhiYzcwLCAwLCB7MHg0ZCwweDNlLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhiYywweDA4LDB4ZmIsMHgyMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YmM4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZGMsMHg4MCwweGIzLDB4ZTAgfX0sCisgezE2LCAweGJjOTAsIDAsIHsweDBjLDB4ZDgsMHgwMywweGNlLDB4MDAsMHhjOCwweGEwLDB4MzEsMHhhMCwweDhkLDB4ZTksMHgwMywweGJlLDB4MDAsMHhiMiwweDgwIH19LAorIHsxNiwgMHhiY2EwLCAwLCB7MHgzMywweGUwLDB4MGMsMHhlOCwweDQzLDB4N2UsMHgwNCwweDBmLDB4ODEsMHgzMSwweGU0LDB4MGMsMHhkOCwweDAzLDB4ZjYsMHgwMCB9fSwKKyB7MTYsIDB4YmNiMCwgMCwgezB4ZmYsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHgwMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjYzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4YjQsMHg0MCwweDM1LDB4NDAsMHgwOCwweDUwLDB4ODIsMHhkZSwweDgwLDB4ZDQsMHg5MCwweDIxIH19LAorIHsxNiwgMHhiY2QwLCAwLCB7MHhlMCwweDBkLDB4NTEsMHgwMiwweGQ0LDB4NDAsMHhiNiwweGIwLDB4MmIsMHg5MCwweDBlLDB4ZTUsMHgwMiwweDljLDB4NDAsMHhkNyB9fSwKKyB7MTYsIDB4YmNlMCwgMCwgezB4MjIsMHgxOSwweDVjLDB4MGQsMHg3MCwweDAyLDB4ZDgsMHgwMCwweGI3LDB4MjAsMHgyZCwweGMwLDB4MGIsMHhmMCwweDAzLDB4NmEgfX0sCisgezE2LCAweGJjZjAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDkzLDB4MTAsMHgyMSwweDgwIH19LAorIHsxNiwgMHhiZDAwLCAwLCB7MHgwOCwweDU4LDB4MDIsMHhkYywweGMwLDB4OTQsMHgwMCwweDIzLDB4ZDAsMHgwOCwweDcwLDB4YTAsMHhkNCwweDIwLDB4YjUsMHgwMiB9fSwKKyB7MTYsIDB4YmQxMCwgMCwgezB4MjksMHg4MCwweDA5LDB4NjAsMHg4MiwweDBjLDB4MDAsMHg4NywweDAyLDB4MjUsMHhjMCwweDE5LDB4NDAsMHgwMiwweGQ0LDB4MDAgfX0sCisgezE2LCAweGJkMjAsIDAsIHsweGI3LDB4MDAsMHg2ZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZDMwLCAwLCB7MHgyMCwweDE0LDB4ZWMsMHgwMCwweGIzLDB4YzAsMHgyMCwweDAxLDB4NDgsMHgxOCwweDAyLDB4Y2MsMHgwMiwweDgxLDB4NDQsMHhhMCB9fSwKKyB7MTYsIDB4YmQ0MCwgMCwgezB4YzAsMHg4OSwweDM4LDB4MDIsMHhjNywweDgwLDB4YjEsMHgwMCwweDJjLDB4MDksMHg0YSwweDAwLDB4NjIsMHhhYywweDA5LDB4OTMgfX0sCisgezE2LCAweGJkNTAsIDAsIHsweDAxLDB4MjgsMHg0MCwweDE5LDB4MzAsMHgwMiwweGNkLDB4MTAsMHhiMywweDkwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGM4IH19LAorIHsxNiwgMHhiZDYwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MjAsMHhkYiwweDYyLDB4MjIsMHhlMCB9fSwKKyB7MTYsIDB4YmQ3MCwgMCwgezB4NmMsMHhhMCwweDAzLDB4ZTQsMHgwMCwweDk4LDB4MDAsMHgzMiwweGMwLDB4ZWMsMHg5OCwweDIzLDB4YWUsMHgwOCwweGZiLDB4MDggfX0sCisgezE2LCAweGJkODAsIDAsIHsweDNhLDB4NzgsMHgwOSwweDkwLDB4MDMsMHg3YywweDEwLDB4Y2YsMHgwMCwweDI2LDB4NDAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwIH19LAorIHsxNiwgMHhiZDkwLCAwLCB7MHhmZiwweDgwLDB4M2YsMHhjMCwweDBmLDB4OTAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmRhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MjAsMHhmYiwweDQ4LDB4M2MsMHg2MSwweDBmLDB4YTAsMHg0MywweGVkLDB4MDAsMHhmOCwweDI0LDB4M2UgfX0sCisgezE2LCAweGJkYjAsIDAsIHsweDUwLDB4MGYsMHg5MCwweDgzLDB4ZTQsMHgwMCwweGZiLDB4MDAsMHgzYSwweDUwLDB4MGYsMHg4MCwweDQzLDB4ZWMsMHgwOCwweGZiIH19LAorIHsxNiwgMHhiZGMwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZiwweDQwLDB4MDMsMHhmMCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzEsMHgwZiwweDkwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4YmRkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZGQsMHhhMCwweDMyLDB4ODAgfX0sCisgezE2LCAweGJkZTAsIDAsIHsweDBjLDB4ZTAsMHgwMSwweGZjLDB4MDAsMHhkYywweDkxLDB4MzksMHhjMCwweDNjLDB4NDAsMHgwMywweDM0LDB4MDAsMHhmZiwweDgwIH19LAorIHsxNiwgMHhiZGYwLCAwLCB7MHgzZiwweDAwLDB4MGYsMHhkMCwweDA3LDB4ZmMsMHgwMCwweGNiLDB4MDAsMHgzZCwweDQwLDB4MGMsMHhlMCwweDAzLDB4MzgsMHgyMCB9fSwKKyB7MTYsIDB4YmUwMCwgMCwgezB4Y2YsMHgwMiwweDNkLDB4YzAsMHgwYywweGQwLDB4MDMsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlMTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4MDEsMHg0MCwweDIyLDB4MDAsMHgyOCwweGEwLDB4MDIsMHhjZSwweDg2LDB4ODMsMHg2NCwweDIyIH19LAorIHsxNiwgMHhiZTIwLCAwLCB7MHhmNCwweDA4LDB4OGMsMHgwZiwweDY0LDB4MDAsMHhiYiwweDEwLDB4MmUsMHg2MCwweDBiLDB4OWMsMHgwMywweGFjLDB4MDEsMHhkYiB9fSwKKyB7MTYsIDB4YmUzMCwgMCwgezB4MDAsMHgzZSwweDYwLDB4MDgsMHg4ZiwweDAyLDB4MjMsMHg0MCwweDhiLDB4MDAsMHgzYSwweGMwLDB4MGQsMHgxMCwweDQzLDB4NjggfX0sCisgezE2LCAweGJlNDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDk5LDB4MDAsMHhhMiwweGMwIH19LAorIHsxNiwgMHhiZTUwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHhhNiwweDA3LDB4OTgsMHgwMCwweDAyLDB4YzIsMHg0OCwweDg4LDB4MDIsMHgyYywweDAwLDB4YmEsMHgwMiB9fSwKKyB7MTYsIDB4YmU2MCwgMCwgezB4NmUsMHg2MCwweDBhLDB4OTgsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAxLDB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMiwweDA1LDB4MDAgfX0sCisgezE2LCAweGJlNzAsIDAsIHsweDhiLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMSwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZTgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgxMCwweDgxLDB4MDAsMHgyMCwweDQwLDB4MjgsMHgxMCwweDI2LDB4Y2MsMHg4MCwweDgwLDB4MjAsMHhhMCB9fSwKKyB7MTYsIDB4YmU5MCwgMCwgezB4Y2MsMHgxOCwweDE0LDB4NDIsMHgwNCwweDAwLDB4YjIsMHgyMCwweDZjLDB4NDAsMHgwYiwweDAwLDB4MDIsMHg4YywweDAwLDB4ODMgfX0sCisgezE2LCAweGJlYTAsIDAsIHsweDAwLDB4MjgsMHg0MCwweDI4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MywweDAwLDB4MjgsMHhjMCwweDA5LDB4YjAsMHgwMiwweDQyIH19LAorIHsxNiwgMHhiZWIwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhkOSwweDAwLDB4MjIsMHg4MCB9fSwKKyB7MTYsIDB4YmVjMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YWMsMHg4MCwweGRhLDB4MjksMHgyYSwweGQyLDB4MjgsMHg4MCwweDAyLDB4MjQsMHgwMCwweGZiLDB4MjAgfX0sCisgezE2LCAweGJlZDAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDkwLDB4MDIsMHhmYywweDAwLDB4OGYsMHgwMCwweDJlLDB4NDAsMHgwYywweDgwLDB4MGIsMHgyMCwweDAyIH19LAorIHsxNiwgMHhiZWUwLCAwLCB7MHhjZiwweDAwLDB4M2UsMHhjMCwweDBjLDB4YjAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmVmMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZDAsMHg2MywweGZjLDB4NDksMHhmNSwweDAwLDB4M2UgfX0sCisgezE2LCAweGJmMDAsIDAsIHsweGMwLDB4MGIsMHhjMCwweDAxLDB4ZjQsMHgwMCwweDdmLDB4NDAsMHgzZiwweDQwLDB4MWYsMHhkMCwweDAzLDB4YmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHhiZjEwLCAwLCB7MHgwMCwweDNmLDB4NDAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDAwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4YmYyMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmMiwweDQwLDB4ZWMsMHhhMCwweDNmLDB4ZTAgfX0sCisgezE2LCAweGJmMzAsIDAsIHsweDBkLDB4NDgsMHgwMywweDdkLDB4ODAsMHhmNCwweDgwLDB4MzMsMHg2YywweDBlLDB4YzgsMHgwMywweDMyLDB4MDAsMHhkZCwweDkwIH19LAorIHsxNiwgMHhiZjQwLCAwLCB7MHgzYiwweGEwLDB4MmQsMHhmMCwweDAzLDB4ZmMsMHhjMCwweGZmLDB4MDAsMHgzYiwweGUwLDB4OGUsMHhmMCwweDAzLDB4M2MsMHgwNCB9fSwKKyB7MTYsIDB4YmY1MCwgMCwgezB4ZWMsMHg2MCwweDMxLDB4MDAsMHgwYywweGYwLDB4MDMsMHhiMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJmNjAsIDAsIHsweDgwLDB4MTAsMHhlYywweDAwLDB4ZDksMHhjMSwweDJlLDB4ZTEsMHgwZCwweDg4LDB4MDIsMHgzYywweDgwLDB4ZjgsMHg4MCwweDM2IH19LAorIHsxNiwgMHhiZjcwLCAwLCB7MHg3ZCwweDE4LDB4YTAsMHgwMiwweDI4LDB4YjAsMHhlYSwweDIwLDB4MjIsMHgyMCwweDA4LDB4NzcsMHgwMiwweGZkLDB4NTAsMHhiYiB9fSwKKyB7MTYsIDB4YmY4MCwgMCwgezB4ODAsMHgyMiwweDQwLDB4MGIsMHhmNCwweDQyLDB4M2QsMHg4MCwweDg4LDB4MzEsMHgyMiwweDEyLDB4MDgsMHhmNiwweDAyLDB4ZTAgfX0sCisgezE2LCAweGJmOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDgwLDB4MTEsMHgyZSwweGMxIH19LAorIHsxNiwgMHhiZmEwLCAwLCB7MHgwOCwweDAwLDB4MDIsMHg0ZCwweDgwLDB4YjgsMHgwMCwweDIwLDB4MDAsMHgwYSwweDAyLDB4ODIsMHgwMCwweDAwLDB4OTksMHgyMCB9fSwKKyB7MTYsIDB4YmZiMCwgMCwgezB4MjIsMHhjMCwweDA5LDB4MzAsMHg4MiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjgsMHhjYSwweDBiLDB4MzQsMHg4MiwweDBkLDB4MjAgfX0sCisgezE2LCAweGJmYzAsIDAsIHsweDgwLDB4MDAsMHhhMCwweDhjLDB4MDgsMHgzNCwweDgyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZmQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHg0MCwweDk5LDB4ODAsMHgyZSwweGMyLDB4MDksMHg5NCwweDAyLDB4MmMsMHgwMCwweGE5LDB4ODAsMHgyNiB9fSwKKyB7MTYsIDB4YmZlMCwgMCwgezB4NjAsMHgwOCwweDM4LDB4NDIsMHgyMiwweDIwLDB4YmEsMHg0MSwweDYyLDB4NDYsMHgzYiwweGIwLDB4MDIsMHhlYywweDAxLDB4YmIgfX0sCisgezE2LCAweGJmZjAsIDAsIHsweDgwLDB4MjIsMHg0MCwweDBiLDB4YjAsMHg0NiwweDBjLDB4MTgsMHg4OCwweGMwLDB4MjIsMHgyMiwweDA4LDB4YjAsMHgwNiwweGYwIH19LAorIHsxNiwgMHhjMDAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGNjLDB4MDAsMHhjOSwweDgxLDB4M2MsMHhjMSB9fSwKKyB7MTYsIDB4YzAxMCwgMCwgezB4MGMsMHhhOSwweDIzLDB4NmMsMHgwMCwweGIyLDB4ODAsMHgzMiwweDc4LDB4MGEsMHg4YSwweDBiLDB4MjYsMHgwMCwweDk5LDB4MDEgfX0sCisgezE2LCAweGMwMjAsIDAsIHsweDMwLDB4ZTAsMHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4YjksMHgwMCwweDNhLDB4YzAsMHgxZSwweGIwLDB4MDMsMHgyYywweDAwIH19LAorIHsxNiwgMHhjMDMwLCAwLCB7MHhjYiwweDgwLDB4MzIsMHg2MSwweDBjLDB4YjAsMHgxMywweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzA0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MTAsMHhkZCwweDAwLDB4M2YsMHhjMiwweDBmLDB4ZTgsMHgwMywweGFjLDB4MDAsMHhmZSwweDAwLDB4M2QgfX0sCisgezE2LCAweGMwNTAsIDAsIHsweDQwLDB4MGYsMHhjMCwweDQzLDB4ZjgsMHgxMCwweGVmLDB4MTQsMHhiNywweGUwLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGY1IH19LAorIHsxNiwgMHhjMDYwLCAwLCB7MHgwMiwweDNmLDB4NDQsMHg0ZiwweGIwLDB4NGIsMHhmYywweDAyLDB4ZDQsMHgwNCwweDNkLDB4NDAsMHgyZiwweGYwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4YzA3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZjksMHgwOCwweDNlLDB4NjAgfX0sCisgezE2LCAweGMwODAsIDAsIHsweDBkLDB4YTAsMHgwMywweGFjLDB4MDAsMHhlOCwweDUwLDB4MzIsMHgwMCwweDBjLDB4ODQsMHgwMywweGE1LDB4MDAsMHhlOSwweDAwIH19LAorIHsxNiwgMHhjMDkwLCAwLCB7MHgzYSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4MmMsMHgwMCwweGY5LDB4MDAsMHgzYSwweGMwLDB4MGYsMHgzMCwweDAzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4YzBhMCwgMCwgezB4Y2IsMHg0NCwweDNlLDB4ZDQsMHgwZSwweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwYjAsIDAsIHsweGM4LDB4MDUsMHgyYywweDA4LDB4YjksMHg4MCwweDJlLDB4YzAsMHgwYSwweDMwLDB4NDIsMHgzYywweDAwLDB4ODksMHgwNCwweDc2IH19LAorIHsxNiwgMHhjMGMwLCAwLCB7MHg2MCwweDA4LDB4OTAsMHg2MiwweDIwLDB4MDAsMHg4MiwweDA0LDB4MjIsMHhkMCwweDA4LDB4ZjAsMHg0MywweDdjLDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YzBkMCwgMCwgezB4ODIsMHgyMiwweDQwLDB4MGIsMHhmMCwweDQyLDB4M2MsMHgwMCwweDhhLDB4YzAsMHgyZSwweGMxLDB4MDgsMHhmMCwweDAyLDB4ZjIgfX0sCisgezE2LCAweGMwZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgxMCwweGIyLDB4ZDAsMHgyYywweGMwIH19LAorIHsxNiwgMHhjMGYwLCAwLCB7MHgyOSwweDE4LDB4MDIsMHg4YywweDA0LDB4YTEsMHgwMCwweDI0LDB4OWMsMHgwOCwweDEwLDB4MDIsMHg4MCwweDAwLDB4YTEsMHgwMSB9fSwKKyB7MTYsIDB4YzEwMCwgMCwgezB4MGMsMHhjMSwweDJiLDB4MzAsMHg1MiwweDhjLDB4MDQsMHhiMywweDAxLDB4MjgsMHg0MCwweDRiLDB4MzAsMHgwMiwweDRjLDB4MDAgfX0sCisgezE2LCAweGMxMTAsIDAsIHsweDkwLDB4MjAsMHgyYywweDIwLDB4MGEsMHgzMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMTIwLCAwLCB7MHgyMCwweDQxLDB4MWUsMHgwMCwweGI3LDB4YTIsMHgyNSwweGU4LDB4OGEsMHg2OCwweDAyLDB4MWUsMHgwMCwweDg1LDB4ODAsMHgyNSB9fSwKKyB7MTYsIDB4YzEzMCwgMCwgezB4ODAsMHg4OCwweGU4LDB4MDIsMHgzZSwweDAwLDB4ODUsMHg4MCwweDJmLDB4ZTQsMHgyOCwweDc4LDB4MDIsMHhkZSwweDAwLDB4YjcgfX0sCisgezE2LCAweGMxNDAsIDAsIHsweDgwLDB4NjEsMHhlMCwweDAzLDB4NzgsMHgwMiwweDVlLDB4ODIsMHhiNywweDgyLDB4MmQsMHhlMCwweDA4LDB4NzgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhjMTUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBkLDB4MDAsMHhmMCwweDEwLDB4M2MsMHg4MCB9fSwKKyB7MTYsIDB4YzE2MCwgMCwgezB4MGQsMHgxMCwweDgzLDB4OGMsMHgwMCwweGUyLDB4NTAsMHgyNiwweDA0LDB4MGMsMHgxMSwweDAzLDB4ODgsMHg0MCwweGViLDB4MDAgfX0sCisgezE2LCAweGMxNzAsIDAsIHsweDNjLDB4YzQsMHgwZiwweDMwLDB4MDMsMHg4YywweDAwLDB4ZjMsMHgwOCwweDM4LDB4NDAsMHgwNywweDMwLDB4MDMsMHg2ZSwweDQwIH19LAorIHsxNiwgMHhjMTgwLCAwLCB7MHhkMCwweDA4LDB4M2MsMHg4OCwweDBlLDB4MzAsMHg0MywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzE5MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmYiwweDM0LDB4M2MsMHhjOSwweDRlLDB4YjAsMHgyMywweGVkLDB4MjAsMHhmYiwweDA0LDB4M2YgfX0sCisgezE2LCAweGMxYTAsIDAsIHsweGM4LDB4OGYsMHg3MCwweDUzLDB4NGMsMHgwMCwweGViLDB4MTAsMHgzMSwweGM1LDB4MGUsMHhmNCwweDAzLDB4NmQsMHgwMCwweGYzIH19LAorIHsxNiwgMHhjMWIwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweGY0LDB4MGIsMHhiYywweDAwLDB4Y2QsMHgwMCwweDNmLDB4YzAsMHgwZiwweGY0LDB4ODMsMHhkMCB9fSwKKyB7MTYsIDB4YzFjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhjZSwweDA0LDB4YzksMHgwNCwweGIwLDB4YzEgfX0sCisgezE2LCAweGMxZDAsIDAsIHsweDBmLDB4OTgsMHgxMywweDZjLDB4OTAsMHhjYiwweDAyLDB4M2UsMHhjMCwweDRmLDB4YjAsMHg2MywweGU0LDB4MDAsMHhmMSwweDgwIH19LAorIHsxNiwgMHhjMWUwLCAwLCB7MHgxMiwweGMwLDB4MGMsMHhiNSwweDAzLDB4ZWMsMHhjMCwweGNmLDB4ODMsMHgzMiwweDQwLDB4MGYsMHhiMywweDIzLDB4MmQsMHhhNCB9fSwKKyB7MTYsIDB4YzFmMCwgMCwgezB4ZmIsMHgwMCwweDNlLDB4MDAsMHgwZiwweGI0LDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyMDAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAsMHgyZCwweDYwLDB4MDIsMHgxYywweDAwLDB4ZDcsMHgwMCwweDM5IH19LAorIHsxNiwgMHhjMjEwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhiNSwweDAwLDB4MjEsMHhjMCwweDJhLDB4NzAsMHgxMiwweGNjLDB4ODAsMHg4NyB9fSwKKyB7MTYsIDB4YzIyMCwgMCwgezB4MDAsMHgzNSwweGMwLDB4MGIsMHg3MiwweDUyLDB4MWMsMHgwMCwweGI3LDB4MDAsMHgyZCwweDQxLDB4MGIsMHgzMiwweDAyLDB4MTIgfX0sCisgezE2LCAweGMyMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4YmUsMHgwMCwweDgxLDB4YzAsMHgyMywweDIwIH19LAorIHsxNiwgMHhjMjQwLCAwLCB7MHgwYiwweGQ4LDB4MDIsMHg1ZSwweDAwLDB4MDYsMHhjMCwweDJkLDB4YTAsMHgwYiwweDdjLDB4MTIsMHhkZSwweDA4LDB4YmYsMHg4MCB9fSwKKyB7MTYsIDB4YzI1MCwgMCwgezB4YTEsMHhlMiwweDJhLDB4N2EsMHgwMiwweGRlLDB4MDAsMHg5MywweDgwLDB4MjUsMHg2MCwweDBiLDB4NzgsMHgxZSwweDVlLDB4NTAgfX0sCisgezE2LCAweGMyNjAsIDAsIHsweGI3LDB4ODAsMHgyZCwweGEwLDB4MGIsMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMjcwLCAwLCB7MHg0OCwweDE0LDB4Y2UsMHgwMCwweDgzLDB4NjAsMHgyMCwweGMwLDB4MDksMHgzMSwweDAyLDB4MmMsMHgwMCwweDkzLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4YzI4MCwgMCwgezB4YzAsMHgxYiwweGIwLDB4MDYsMHhjYywweDgwLDB4YjMsMHg0OCwweDIwLDB4ZjAsMHgwYSwweDMwLDB4MDIsMHhlYywweDAwLDB4OTMgfX0sCisgezE2LCAweGMyOTAsIDAsIHsweDgwLDB4MjQsMHhjMCwweDBiLDB4YjAsMHgwMiwweDRjLDB4MTAsMHhiMywweGM4LDB4MmMsMHhkMiwweDhiLDB4MzAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhjMmEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGJiLDB4MDAsMHhjNiwweGM0LDB4MzEsMHg4MSB9fSwKKyB7MTYsIDB4YzJiMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4NjgsMHgwMCwweGNlLDB4ODAsMHgzZiwweGEyLDB4MGIsMHhlOCwweDAzLDB4ZjksMHgwMCwweGZlLDB4NDAgfX0sCisgezE2LCAweGMyYzAsIDAsIHsweDMxLDB4ODAsMHg2ZSwweGEwLDB4MDcsMHhlOCwweDAwLDB4ZGEsMHgwMCwweDI2LDB4ODEsMHgwZiwweGEwLDB4MDIsMHg2OCwweDAxIH19LAorIHsxNiwgMHhjMmQwLCAwLCB7MHhmNiwweGUwLDB4M2QsMHg5MiwweDBmLDB4YTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzJlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4YzIsMHhmOCwweDA0LDB4M2UsMHgxNCwweDBmLDB4ODAsMHgxMywweGUwLDB4MTAsMHhmOCwweDAxLDB4M2UgfX0sCisgezE2LCAweGMyZjAsIDAsIHsweDEwLDB4MGYsMHg4MCwweDQzLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgzZSwweDAwLDB4NDcsMHg4MCwweDAzLDB4ZTAsMHgwMiwweGU4IH19LAorIHsxNiwgMHhjMzAwLCAwLCB7MHgxMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDcsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAsMHgwZiwweDgwLDB4MGIsMHhkMiB9fSwKKyB7MTYsIDB4YzMxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMSwweDMyLDB4NDAgfX0sCisgezE2LCAweGMzMjAsIDAsIHsweDhjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MiwweDBmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhjOSwweDAwIH19LAorIHsxNiwgMHhjMzMwLCAwLCB7MHgzZSwweDQyLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDBiLDB4NjQsMHgwMCB9fSwKKyB7MTYsIDB4YzM0MCwgMCwgezB4ZjksMHg5MCwweDMyLDB4NDEsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzNTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHhjOCwweGEyLDB4NjAsMHgwYSwweDkyLDB4MDIsMHhlNCwweDAwLDB4ODksMHg0MCwweDJlIH19LAorIHsxNiwgMHhjMzYwLCAwLCB7MHg1OCwweDBiLDB4OTAsMHgwMiwweDA0LDB4MDAsMHhkOSwweDAwLDB4MmUsMHg0MiwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDQsMHg4OSB9fSwKKyB7MTYsIDB4YzM3MCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDA2LDB4MjQsMHgwNCwweGI5LDB4MDgsMHgyYSwweDQwLDB4NDgsMHg5MCwweDEyLDB4MjAgfX0sCisgezE2LCAweGMzODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MTAsMHgyMiwweDQ0IH19LAorIHsxNiwgMHhjMzkwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDUsMHg4YiwweDkwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4YzNhMCwgMCwgezB4MmEsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5OSwweDgwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgyNiwweDI0LDB4MDAgfX0sCisgezE2LCAweGMzYjAsIDAsIHsweGI5LDB4MDEsMHgyMiwweDcwLDB4MDksMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjM2MwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHgwOCwweGIxLDB4MjAsMHgyMCwweDQwLDB4MGEsMHgxMCwweDAyLDB4YzQsMHg4MCwweDgzLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4YzNkMCwgMCwgezB4NTAsMHg0YiwweDEwLDB4MDIsMHgyNCwweDAwLDB4OTEsMHgwMCwweDJlLDB4NDAsMHgwOCwweDEyLDB4MDIsMHhjNCwweDgxLDB4ODEgfX0sCisgezE2LCAweGMzZTAsIDAsIHsweGEyLDB4NmMsMHg0MCwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHhiOSwweDIwLDB4MmEsMHg0OCwweDI5LDB4MTIsMHgwMiwweDAyIH19LAorIHsxNiwgMHhjM2YwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYxLDB4NDAsMHhmOCwweDAwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4YzQwMCwgMCwgezB4MDgsMHg4MCwweDAzLDB4ZTEsMHg0MiwweGM4LDB4MDAsMHgzMiwweDAwLDB4MWYsMHg4NSwweDAzLDB4YTEsMHg0MCwweGM4LDB4NTAgfX0sCisgezE2LCAweGM0MTAsIDAsIHsweDNhLDB4MDAsMHg4ZCwweDg1LDB4MDMsMHg2MSwweDQwLDB4ZDgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDA1LDB4MDMsMHgyMSwweDQwIH19LAorIHsxNiwgMHhjNDIwLCAwLCB7MHhmOCwweDUwLDB4MzIsMHgxNCwweDBkLDB4ODUsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzQzMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4MDQsMHhmZCwweDEwLDB4M2YsMHg0MCwweDBmLDB4NTAsMHgwMywweGM0LDB4NDAsMHhmZCwweDAwLDB4M2YgfX0sCisgezE2LCAweGM0NDAsIDAsIHsweDUxLDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MDEsMHgzZCwweDQwLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkIH19LAorIHsxNiwgMHhjNDUwLCAwLCB7MHgxMCwweDNmLDB4NGEsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZmQsMHgxMCwweDNmLDB4NDQsMHgwZSwweDkxLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4YzQ2MCwgMCwgezB4MDIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhjNSwweDAwLDB4Y2QsMHgwMCwweDMxLDB4NDAgfX0sCisgezE2LCAweGM0NzAsIDAsIHsweDBkLDB4ZDAsMHg0MywweGU0LDB4MDAsMHhjZCwweDAwLDB4MzMsMHg0MCwweDRmLDB4MTEsMHgwMiwweGU0LDB4MDQsMHhjMSwweDAwIH19LAorIHsxNiwgMHhjNDgwLCAwLCB7MHgzZCwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGVkLDB4YTQsMHgzMiwweDUwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4YzQ5MCwgMCwgezB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0YTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDA4LDB4ZDgsMHgwMCwweDMyLDB4MDEsMHgwMCwweDgwLDB4MTIsMHhjMCwweDAwLDB4NDgsMHgwMCwweDM2IH19LAorIHsxNiwgMHhjNGIwLCAwLCB7MHg4MCwweDBiLDB4OGEsMHgwMiwweGUwLDB4MDAsMHhhOCwweDAwLDB4MmUsMHgwMCwweDBmLDB4ODAsMHgwMiwweGUwLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4YzRjMCwgMCwgezB4NTAsMHgzNCwweDI4LDB4MGIsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgyZSwweDAwLDB4MGIsMHg4MCwweDAyLDB4Y2UgfX0sCisgezE2LCAweGM0ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweDgxLDB4MDAsMHgyNiwweDQwIH19LAorIHsxNiwgMHhjNGUwLCAwLCB7MHgwOSwweDE4LDB4MDIsMHhjNCwweDA4LDB4MjEsMHgwMCwweDI4LDB4NDAsMHg4YiwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgwMSB9fSwKKyB7MTYsIDB4YzRmMCwgMCwgezB4MmUsMHg0MCwweDE4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhhMSwweDAxLDB4MjAsMHg0OCwweDFiLDB4MTAsMHgwMiwweGM0LDB4MDAgfX0sCisgezE2LCAweGM1MDAsIDAsIHsweGIxLDB4MDAsMHg2YywweDQwLDB4MGIsMHgxMCwweDEyLDB4YzIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNTEwLCAwLCB7MHgxOCwweDExLDB4YTQsMHgwMCwweDk5LDB4ODAsMHhhMiwweDQyLDB4NDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGE5LDB4MmEsMHgyNiB9fSwKKyB7MTYsIDB4YzUyMCwgMCwgezB4NDQsMHgwYiwweDkwLDB4ODIsMHhjNCwweDgxLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4NDIsMHhjNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGM1MzAsIDAsIHsweDAwLDB4MjYsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAxLDB4MmUsMHg0MSwweDBiLDB4OTAsMHgwMiwweGM2IH19LAorIHsxNiwgMHhjNTQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGM1LDB4MjAsMHhjOSwweDg0LDB4MzAsMHg3MCB9fSwKKyB7MTYsIDB4YzU1MCwgMCwgezB4MGQsMHg5MCwweDEzLDB4ZTQsMHgwMiwweGU5LDB4MDAsMHgzMiwweDcwLDB4MGYsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4NDAgfX0sCisgezE2LCAweGM1NjAsIDAsIHsweDNjLDB4NDgsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTEsMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MDEsMHhlNCwweDAwIH19LAorIHsxNiwgMHhjNTcwLCAwLCB7MHhmOSwweDkwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgyNiwweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzU4MCwgMCwgezB4MjgsMHgwMSwweGE1LDB4MDAsMHhmMSwweDA0LDB4M2EsMHg0NCwweDhmLDB4OTAsMHgwMywweGU0LDB4MTAsMHhjOSwweDA0LDB4M2UgfX0sCisgezE2LCAweGM1OTAsIDAsIHsweDYwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MjAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgxMCwweGY5IH19LAorIHsxNiwgMHhjNWEwLCAwLCB7MHg5MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg4MCwweDNlLDB4NjQsMHgwZiwweDkwLDB4MDcsMHhjYSB9fSwKKyB7MTYsIDB4YzViMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4YzgsMHgwNCwweDNhLDB4MDAgfX0sCisgezE2LCAweGM1YzAsIDAsIHsweDFlLDB4ODAsMHgwMywweDgwLDB4MDMsMHhjOCwweDQwLDB4MmEsMHgwNCwweDFmLDB4ODAsMHgwMywweDIwLDB4MDAsMHg4OCwweDAwIH19LAorIHsxNiwgMHhjNWQwLCAwLCB7MHgzMiwweDMwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZTAsMHgwMCB9fSwKKyB7MTYsIDB4YzVlMCwgMCwgezB4YzgsMHg4MCwweDNlLDB4MjAsMHgwZiwweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1ZjAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4YWUsMHhkMCwweDM3LDB4ODAsMHgwOCwweGVjLDB4NDYsMHgzOCwweDAwLDB4ZDYsMHgwNCwweDIzIH19LAorIHsxNiwgMHhjNjAwLCAwLCB7MHhhMCwweDBiLDB4YTAsMHg0MSwweDc4LDB4MDQsMHhmYSwweDAwLDB4MzcsMHg4MCwweDBkLDB4YTAsMHgwMiwweGE4LDB4MTAsMHhlZSB9fSwKKyB7MTYsIDB4YzYxMCwgMCwgezB4MjEsMHgyZSwweDgwLDB4MDgsMHhhMCwweDAyLDB4ZTgsMHgwOCwweDhlLDB4ODAsMHgyZiwweGEwLDB4OGIsMHhhMCwweDAyLDB4Y2EgfX0sCisgezE2LCAweGM2MjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4NGMsMHgwMiwweDgzLDB4YzAsMHhhOCwweGU4IH19LAorIHsxNiwgMHhjNjMwLCAwLCB7MHg0YSwweDM2LDB4MDIsMHg4YywweDAwLDB4MTMsMHhhMCwweDI4LDB4YzIsMHgwYiwweDMwLDB4MDYsMHgwYywweDAwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4YzY0MCwgMCwgezB4MjQsMHg4NCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDIwLDB4MjgsMHhjMCwweDA5LDB4MzAsMHgwMiwweGNjLDB4MDAgfX0sCisgezE2LCAweGM2NTAsIDAsIHsweDgzLDB4ODAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2EsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNjYwLCAwLCB7MHhhMCwweDAxLDB4M2MsMHg0NCwweGFmLDB4NDAsMHgyNSwweGMyLDB4NDgsMHhmOCwweDgyLDB4MWMsMHhjOCwweDlmLDB4MDgsMHgyMSB9fSwKKyB7MTYsIDB4YzY3MCwgMCwgezB4YzAsMHg4YiwweGY4LDB4MDIsMHg1YywweDAwLDB4YmYsMHhiMCwweDI3LDB4ODAsMHgwOSwweDNhLDB4MDIsMHg5YywweDAwLDB4YTUgfX0sCisgezE2LCAweGM2ODAsIDAsIHsweDAyLDB4MmQsMHhlOCwweDA5LDB4NzAsMHgwMiwweGNlLDB4ODAsMHg4NSwweDA4LDB4MmQsMHhjMiwweDBiLDB4NzMsMHgwMiwweGU4IH19LAorIHsxNiwgMHhjNjkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhjNywweDgyLDB4YTksMHhlMCB9fSwKKyB7MTYsIDB4YzZhMCwgMCwgezB4MGEsMHg3OCwweDAyLDB4OWUsMHg0MCwweDk3LDB4ODQsMHgzOSwweGEwLDB4MGIsMHg3YSwweDgzLDB4M2YsMHg4MCwweGQ3LDB4OTEgfX0sCisgezE2LCAweGM2YjAsIDAsIHsweDM1LDB4YTAsMHgwZCwweDdhLDB4MDksMHgxZSwweDQ0LDB4ZjcsMHg4MCwweDNkLDB4ZTgsMHgyZCwweDdhLDB4MDMsMHhkZSwweDgyIH19LAorIHsxNiwgMHhjNmMwLCAwLCB7MHhjNiwweDgwLDB4M2QsMHgyMCwweDRiLDB4N2IsMHgyMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzZkMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhkMywweDAwLDB4M2UsMHhjMSwweDBmLDB4MzAsMHgwMywweGVkLDB4ODAsMHhlMywweDAwLDB4M2UgfX0sCisgezE2LCAweGM2ZTAsIDAsIHsweDgwLDB4MGYsMHhiNiwweDIxLDB4ZWMsMHgwOCwweGRiLDB4MjEsMHgzZSwweDgwLDB4MGYsMHhiNSwweDAzLDB4NmMsMHg0MCwweGY5IH19LAorIHsxNiwgMHhjNmYwLCAwLCB7MHgwMCwweDNlLDB4ZGMsMHgwZSwweGIyLDB4MDMsMHhlZCwweDQwLDB4ZjksMHgwMiwweDNlLDB4ODAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YzcwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4Y2YsMHg4MCwweDNkLDB4ZTAgfX0sCisgezE2LCAweGM3MTAsIDAsIHsweDBmLDB4YzgsMHg0MywweGZlLDB4MDAsMHhmZSwweDg0LDB4M2YsMHhlMCwweDBkLDB4ZjgsMHhjMywweGZmLDB4MTAsMHhhZiwweDkwIH19LAorIHsxNiwgMHhjNzIwLCAwLCB7MHgzNSwweGEwLDB4MGMsMHhmYywweDAzLDB4M2UsMHgxNCwweGVjLDB4ODQsMHgzZiwweGYwLDB4MGUsMHhmYywweGMzLDB4ZmYsMHgwOCB9fSwKKyB7MTYsIDB4YzczMCwgMCwgezB4NGYsMHg4MCwweDMzLDB4ZTQsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3NDAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ZDcsMHhhMiwweDJkLDB4YzQsMHgwYywweDQxLDB4YzIsMHhkYywweDAwLDB4NzQsMHgwMCwweDI1IH19LAorIHsxNiwgMHhjNzUwLCAwLCB7MHg4MCwweDBmLDB4NzIsMHg0MiwweGRjLDB4OTAsMHhkNywweDM4LDB4MmQsMHg5OCwweDBhLDB4NzAsMHgwMiwweDFjLDB4MDQsMHg4NiB9fSwKKyB7MTYsIDB4Yzc2MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGQsMHg3MCwweDAyLDB4Y2MsMHgwMCwweDg2LDB4MDgsMHgzNywweGM2LDB4MjgsMHg3MCwweDAyLDB4MmEgfX0sCisgezE2LCAweGM3NzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg3LDB4NjAsMHgyZCwweGMyIH19LAorIHsxNiwgMHhjNzgwLCAwLCB7MHgwYSwweDUwLDB4MDIsMHhkYywweDAwLDB4YjYsMHgxMCwweDI1LDB4YzIsMHgwOSwweDcwLDB4ODYsMHhkYywweDMwLDB4OTcsMHgwMCB9fSwKKyB7MTYsIDB4Yzc5MCwgMCwgezB4MjUsMHg4MCwweDA4LDB4MzAsMHgwMiwweDVjLDB4MDAsMHg4NywweDA4LDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweGNjLDB4NDAgfX0sCisgezE2LCAweGM3YTAsIDAsIHsweDg2LDB4MDAsMHgyMSwweDAwLDB4MDksMHg3MCwweDBhLDB4MDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjN2IwLCAwLCB7MHgyMCwweDE0LDB4ZWQsMHg4MCwweDkzLDB4MDAsMHgwYywweGUxLDB4MjgsMHgxOCwweDAyLDB4Y2MsMHgwOCwweGEwLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4YzdjMCwgMCwgezB4MTIsMHgxYSwweDM0LDB4MDIsMHhjZiwweDA0LDB4OTMsMHg0MCwweDJjLDB4ODAsMHgwYSwweGIwLDB4MjIsMHg0YywweDAyLDB4ODEgfX0sCisgezE2LCAweGM3ZDAsIDAsIHsweDgwLDB4MjgsMHhlMCwweDI4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHg4OCwweDgyLDB4MjQsMHgyMCwweDA4LDB4YjAsMHgwMiwweDA4IH19LAorIHsxNiwgMHhjN2UwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJmLDB4MjAsMHhjOSwweGUwLDB4MmMsMHhmMSB9fSwKKyB7MTYsIDB4YzdmMCwgMCwgezB4MGUsMHhiZCwweDAzLDB4ZmMsMHgwMCwweGI5LDB4NDAsMHgzNiwweDQwLDB4MDksMHhmNSwweDAyLDB4ZmQsMHg0MCwweGZmLDB4ODAgfX0sCisgezE2LCAweGM4MDAsIDAsIHsweDM2LDB4YTIsMHgwOCwweGYwLDB4MGIsMHg3YywweDAwLDB4ZWIsMHg4MCwweDJmLDB4ZTAsMHgwYSwweGYwLDB4NDMsMHhmYywweDAyIH19LAorIHsxNiwgMHhjODEwLCAwLCB7MHg4YiwweGQwLDB4MzIsMHhmMCwweDBkLDB4ZjAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzgyMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHhjOCwweDBmLDB4OTQsMHgxMywweGVjLDB4MDAsMHhmOSwweDQwLDB4MzYgfX0sCisgezE2LCAweGM4MzAsIDAsIHsweDQwLDB4MWYsMHhiMCwweDAzLDB4ZWMsMHgxMCwweGZiLDB4MDEsMHgzZSwweGQwLDB4MGYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGY5IH19LAorIHsxNiwgMHhjODQwLCAwLCB7MHgwMCwweDNlLDB4YzQsMHgwZiwweGIwLDB4MDEsMHhlYywweDAwLDB4ZjksMHgwNCwweDNlLDB4NDgsMHgwZiwweGIwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4Yzg1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNmLDB4YzAgfX0sCisgezE2LCAweGM4NjAsIDAsIHsweDBjLDB4ZTAsMHgwNywweGZjLDB4MDAsMHhmYywweDBhLDB4MjcsMHgwMCwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA4IH19LAorIHsxNiwgMHhjODcwLCAwLCB7MHgzMywweDgwLDB4MGMsMHhmMCwweDAwLDB4MmMsMHgwMCwweDVmLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDAxLDB4ZmMsMHgwMCB9fSwKKyB7MTYsIDB4Yzg4MCwgMCwgezB4ZmUsMHgwMCwweDIzLDB4NDAsMHgwZiwweGIwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4OTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHg4NiwweDJlLDB4ZTAsMHg0OCwweDhmLDB4MDIsMHhlYywweDA4LDB4YjgsMHhhMCwweDM2IH19LAorIHsxNiwgMHhjOGEwLCAwLCB7MHgzMCwweDRiLDB4YjAsMHgwMywweGFjLDB4MGMsMHg5YiwweDAyLDB4M2MsMHhhMCwweDBjLDB4YjAsMHg0MywweDZjLDB4MDAsMHhiMSB9fSwKKyB7MTYsIDB4YzhiMCwgMCwgezB4MDAsMHgyOCwweGMwLDB4MGQsMHhiMCwweDEyLDB4ZWMsMHgxMCwweGI5LDB4ODAsMHhhMiwweDYxLDB4MGIsMHhiMCwweDAyLDB4MjAgfX0sCisgezE2LCAweGM4YzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDliLDB4ODgsMHgyZSwweGUwIH19LAorIHsxNiwgMHhjOGQwLCAwLCB7MHgwOCwweGEwLDB4MDIsMHhlYywweDAxLDB4YmIsMHg4MCwweDI2LDB4NjIsMHgwYiwweGIwLDB4MDIsMHhlYywweDAwLDB4YjMsMHgwMSB9fSwKKyB7MTYsIDB4YzhlMCwgMCwgezB4MmEsMHgyMSwweDA4LDB4YjAsMHgxMiwweDJjLDB4MDAsMHhiOCwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgxMiwweGVjLDB4MTQgfX0sCisgezE2LCAweGM4ZjAsIDAsIHsweGI5LDB4ODQsMHgyMiwweGEyLDB4MGIsMHhiMCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOTAwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwNCwweDkzLDB4MDAsMHgyYywweGUwLDB4MDgsMHgwMCwweDAyLDB4Y2MsMHgwOSwweDkxLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YzkxMCwgMCwgezB4NDAsMHgwYiwweDMwLDB4MDYsMHg0YywweDA0LDB4MTMsMHgwMCwweDI2LDB4MDAsMHgwOCwweDMwLDB4MDIsMHhjYywweDA0LDB4YjIgfX0sCisgezE2LCAweGM5MjAsIDAsIHsweDAwLDB4MmEsMHhjMCwweDAxLDB4MzAsMHgwMCwweGNkLDB4MDAsMHhiMCwweDAwLDB4MjAsMHg4MCwweDBiLDB4MzAsMHgwYSwweDAyIH19LAorIHsxNiwgMHhjOTMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhkYiwweDI0LDB4NmUsMHhjMCB9fSwKKyB7MTYsIDB4Yzk0MCwgMCwgezB4MmMsMHhhMCwweDAyLDB4ZmMsMHgwMCwweGJhLDB4MDQsMHgyNiwweDQwLDB4NGYsMHhmMCwweDU3LDB4ZmMsMHgwMCwweDNmLDB4MDEgfX0sCisgezE2LCAweGM5NTAsIDAsIHsweDNhLDB4MDAsMHgyYywweGYwLDB4MDEsMHgzYywweDAwLDB4ZGIsMHgwMCwweDMzLDB4YzAsMHg4NCwweGYwLDB4MDMsMHhmZCwweDA4IH19LAorIHsxNiwgMHhjOTYwLCAwLCB7MHhmYSwweDAwLDB4MzIsMHgwMCwweDBmLDB4ZjAsMHgwMywweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzk3MCwgMCwgezB4YTAsMHgxOSwweGRjLDB4MDAsMHhlYSwweDQwLDB4M2YsMHgwMCwweDA3LDB4YzAsMHgwMywweGZjLDB4MDQsMHhmYywweDAwLDB4M2YgfX0sCisgezE2LCAweGM5ODAsIDAsIHsweDQwLDB4MGYsMHhmMCwweDAzLDB4OWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDAwLDB4MGUsMHhmMCwweDAzLDB4N2MsMHgwMCwweGZkIH19LAorIHsxNiwgMHhjOTkwLCAwLCB7MHgwMCwweDNmLDB4YzEsMHgwZiwweGYwLDB4MDMsMHhmYywweDg0LDB4ZjQsMHgwMCwweDNmLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4YzlhMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmMCwweDgwLDB4ZmYsMHgwMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGM5YjAsIDAsIHsweDBmLDB4YzIsMHgwMywweDNlLDB4MDAsMHhkZiwweGMwLDB4M2UsMHhjMCwweDRkLDB4ZGIsMHgwMiwweGIwLDB4YzAsMHhkYywweDMwIH19LAorIHsxNiwgMHhjOWMwLCAwLCB7MHgzZiwweGUwLDB4MGYsMHhkYiwweDIzLDB4ZjYsMHgyMCwweGZmLDB4MjYsMHgzMywweGUwLDB4MGYsMHg1MiwweDAzLDB4NWUsMHgwMCB9fSwKKyB7MTYsIDB4YzlkMCwgMCwgezB4ZmYsMHg4MCwweDMzLDB4YzAsMHg0YywweDQ5LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5ZTAsIDAsIHsweDgwLDB4MTAsMHhlMSwweGUwLDB4YjcsMHgwOCwweDIzLDB4ZjAsMHgwYiwweGFkLDB4MGEsMHgyZSwweDAwLDB4OWEsMHgwNCwweDJlIH19LAorIHsxNiwgMHhjOWYwLCAwLCB7MHhiMCwweDA5LDB4OGYsMHgwMywweGEwLDB4NDAsMHhiOSwweDMwLDB4MmUsMHhhMCwweDBiLDB4OWYsMHgwMywweGE3LDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4Y2EwMCwgMCwgezB4ODAsMHgyNiwweGUwLDB4MGIsMHhkZCwweDAyLDB4MmUsMHgwMCwweGJiLDB4ODAsMHgyMiwweGY0LDB4MGEsMHg5MiwweDAyLDB4YTAgfX0sCisgezE2LCAweGNhMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzgsMHg4MCwweGIzLDB4MTAsMHgyNCwweGMwIH19LAorIHsxNiwgMHhjYTIwLCAwLCB7MHgwYiwweDgwLDB4MDIsMHhhYywweDAwLDB4YTMsMHgyNCwweDJjLDB4ZDAsMHgwOCwweDEwLDB4MDYsMHhjMCwweDgwLDB4YjIsMHgwMSB9fSwKKyB7MTYsIDB4Y2EzMCwgMCwgezB4MmMsMHhlYSwweDRiLDB4MDAsMHgxMiwweGMyLDB4MDQsMHhiMywweDEwLDB4MDgsMHhjMCwweDBhLDB4OTAsMHgwMiwweDBjLDB4MDAgfX0sCisgezE2LCAweGNhNDAsIDAsIHsweDkzLDB4MDQsMHgyNCwweGMwLDB4MDksMHg4MiwweDAyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYTUwLCAwLCB7MHhjMCwweDE1LDB4YTUsMHgwMCwweGJiLDB4MDAsMHgyMiwweGMwLDB4MGIsMHg4MCwweDAyLDB4YWMsMHgwOCwweGJiLDB4MTgsMHgyZSB9fSwKKyB7MTYsIDB4Y2E2MCwgMCwgezB4ZTAsMHgxOCwweDg4LDB4MDIsMHhlYywweDAxLDB4YmEsMHgwMCwweDJlLDB4ODAsMHgwYiwweDk4LDB4ODYsMHhlMiwweDAwLDB4YmIgfX0sCisgezE2LCAweGNhNzAsIDAsIHsweDAwLDB4MjIsMHhjNCwweDBiLDB4OTAsMHgwMiwweDZjLDB4MDAsMHhiYiwweDAwLDB4YTYsMHhjMCwweDBiLDB4OTAsMHgwMCwweGIwIH19LAorIHsxNiwgMHhjYTgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMSwweGU3LDB4MDAsMHhmYiwweDAwLDB4YjIsMHhjMCB9fSwKKyB7MTYsIDB4Y2E5MCwgMCwgezB4MGYsMHhhOCwweDAzLDB4YWMsMHgwMiwweGViLDB4MDAsMHgzZSwweDYwLDB4MGQsMHg5ZSwweDAzLDB4ZWMsMHgwMCwweGQ4LDB4NDAgfX0sCisgezE2LCAweGNhYTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDg4LDB4NDMsMHhlMiwweDAwLDB4ZmIsMHgyMCwweDMyLDB4YzAsMHgwZiwweDEwLDB4MGIsMHg2ZiwweDkwIH19LAorIHsxNiwgMHhjYWIwLCAwLCB7MHg1YiwweDgyLDB4MzYsMHhjMCwweDJkLDB4MDgsMHgwMSwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2FjMCwgMCwgezB4ZTAsMHgwMSwweGI3LDB4MDgsMHhmNywweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjksMHgwMywweDdjLDB4MDgsMHhjZiwweDgyLDB4M2MgfX0sCisgezE2LCAweGNhZDAsIDAsIHsweDAwLDB4YWYsMHhkMCwweDIxLDB4YmMsMHgwOCwweGZkLDB4MTAsMHgzZiwweDgwLDB4OGYsMHhjMCwweDAzLDB4YTQsMHgwMCwweGY3IH19LAorIHsxNiwgMHhjYWUwLCAwLCB7MHgwMSwweGJmLDB4YzAsMHgwNywweGQwLDB4MDMsMHhiZCwweDMwLDB4ZmYsMHhhNCwweDM4LDB4YzAsMHgwZSwweGRhLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4Y2FmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhOCwweDAwLDB4ZmIsMHgwMCwweGIyLDB4YzEgfX0sCisgezE2LCAweGNiMDAsIDAsIHsweDBlLDB4ODEsMHgwMywweGVjLDB4NDAsMHhmYiwweDQ0LDB4M2EsMHhjMSwweDBlLDB4OTUsMHgwMywweGUwLDB4MDAsMHhjYiwweDQxIH19LAorIHsxNiwgMHhjYjEwLCAwLCB7MHgzMiwweDRkLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgyMCwweGM5LDB4MDAsMHg3MiwweGU4LDB4NDQsMHg5MSwweDAzLDB4NmQsMHgwMCB9fSwKKyB7MTYsIDB4Y2IyMCwgMCwgezB4Y2IsMHgwMiwweDNlLDB4YzAsMHgwYywweDgwLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiMzAsIDAsIHsweGM4LDB4MDUsMHgyNCwweDAwLDB4YmYsMHgwMCwweDMzLDB4YzQsMHgwOCwweDFkLDB4MDMsMHg4YywweDAwLDB4YmIsMHg5OCwweDM2IH19LAorIHsxNiwgMHhjYjQwLCAwLCB7MHg0OCwweDRkLDB4OTgsMHgyMiwweGVkLDB4NDAsMHhkYiwweDAwLDB4MzYsMHhiMCwweDBiLDB4OTgsMHgwMiwweGUzLDB4MDAsMHhkYiB9fSwKKyB7MTYsIDB4Y2I1MCwgMCwgezB4MDAsMHgzMiwweGUwLDB4ODgsMHhkOCwweDAyLDB4MmMsMHgwMiwweGMzLDB4ODAsMHgyZiwweGMwLDB4MDgsMHg5MCwweDAzLDB4NzIgfX0sCisgezE2LCAweGNiNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4NDQsMHgwMCwweGIzLDB4MDAsMHgyMCwweGYwIH19LAorIHsxNiwgMHhjYjcwLCAwLCB7MHgxOCwweDA4LDB4MDIsMHg0ZiwweDg0LDB4YjEsMHhjMCwweDI0LDB4YzAsMHg4OSwweDA2LDB4MDIsMHhjNCwweDAwLDB4OTEsMHgwMCB9fSwKKyB7MTYsIDB4Y2I4MCwgMCwgezB4MjAsMHhmMCwweDFiLDB4MTgsMHg4MiwweGM2LDB4MDAsMHg5MywweDAwLDB4MmMsMHhkMSwweDA4LDB4MWUsMHgwMiwweDBlLDB4NDQgfX0sCisgezE2LCAweGNiOTAsIDAsIHsweDkzLDB4OTQsMHgyYywweGMwLDB4MDgsMHgyMCwweDAyLDB4YjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYmEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwNCwweGI3LDB4ODAsMHgyMCwweGUyLDB4MDgsMHg2OCwweDA2LDB4OWUsMHg4MCwweGJmLDB4ODQsMHgyNSB9fSwKKyB7MTYsIDB4Y2JiMCwgMCwgezB4YTgsMHgwOSwweDY4LDB4MDIsMHhjNiwweDAwLDB4OTMsMHhhMCwweDY1LDB4ZTQsMHgwYiwweDc4LDB4MTIsMHhkZSwweDAwLDB4OTMgfX0sCisgezE2LCAweGNiYzAsIDAsIHsweDAwLDB4YTEsMHhlMCwweDA4LDB4ZDgsMHgwMiwweDFlLDB4ZDAsMHhhNywweDgwLDB4MmQsMHhlMCwweDA4LDB4ZjgsMHgwMiwweDQ4IH19LAorIHsxNiwgMHhjYmQwLCAwLCB7MHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDA4LDB4MDAsMHhiMywweDIwLDB4MzAsMHhjMCB9fSwKKyB7MTYsIDB4Y2JlMCwgMCwgezB4MGEsMHgyMiwweDAyLDB4Y2UsMHg0MCwweGYzLDB4YTAsMHgzYywweGU4LDB4MGIsMHgzMCwweDAyLDB4YzEsMHgwMCwweGQwLDB4YzEgfX0sCisgezE2LCAweGNiZjAsIDAsIHsweDMwLDB4YzAsMHgwYiwweDIxLDB4MTMsMHhjYywweDIxLDB4ZDMsMHgwMCwweDJjLDB4YzAsMHgyYywweDEwLDB4MGIsMHgwYywweDgwIH19LAorIHsxNiwgMHhjYzAwLCAwLCB7MHhkMywweDYxLDB4M2MsMHhjOCwweDJjLDB4MjAsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2MxMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDQwLDB4M2IsMHhjMCwweDBmLDB4ZTAsMHgwMywweGZjLDB4MDAsMHhmNywweDUwLDB4N2YgfX0sCisgezE2LCAweGNjMjAsIDAsIHsweGM0LDB4MmUsMHhmMCwweDAzLDB4ZmMsMHg0MCwweGZlLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDQ3LDB4ZmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHhjYzMwLCAwLCB7MHgwMCwweDdkLDB4YzIsMHgwZiwweGQwLDB4MDEsMHhiYywweDgwLDB4NWYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4Y2M0MCwgMCwgezB4MDIsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZmIsMHhjMCwweDMyLDB4YzggfX0sCisgezE2LCAweGNjNTAsIDAsIHsweDBlLDB4ZTAsMHgwMywweGFjLDB4YTAsMHhlYiwweDIwLDB4MzIsMHg0MCwweDhjLDB4YTAsMHgxMywweDJjLDB4MDAsMHhkOSwweDAwIH19LAorIHsxNiwgMHhjYzYwLCAwLCB7MHgzZSwweDYwLDB4MGMsMHhiMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4ODAsMHgzMCwweGMwLDB4M2MsMHg5MiwweDAzLDB4ZWYsMHg2MCB9fSwKKyB7MTYsIDB4Y2M3MCwgMCwgezB4YzMsMHgyMCwweDMxLDB4YzQsMHgwYywweGEwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjODAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4MzMsMHgyMCwweDIxLDB4ZGEsMHgwYiwweDcwLDB4NDMsMHg5YywweDAxLDB4YjUsMHgwMCwweDIxIH19LAorIHsxNiwgMHhjYzkwLCAwLCB7MHgwMCwweDBhLDB4ZTAsMHgwMiwweDFjLDB4MDAsMHhiNywweDAwLDB4MmYsMHhjMCwweDBkLDB4NzAsMHgwMywweDljLDB4MDAsMHhiNiB9fSwKKyB7MTYsIDB4Y2NhMCwgMCwgezB4MDAsMHgzMSwweGM4LDB4MDgsMHg1NywweDAyLDB4ZGMsMHgwMCwweDg3LDB4NTAsMHgyMSwweGMwLDB4MGEsMHg3MCwweDQyLDB4OTIgfX0sCisgezE2LCAweGNjYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgxMSwweGI3LDB4OTAsMHgyMSwweGUwIH19LAorIHsxNiwgMHhjY2MwLCAwLCB7MHgwYiwweDY4LDB4ODIsMHhkZSwweDA4LDB4YTcsMHg4MCwweDI0LDB4NjAsMHgwOCwweDcwLDB4MTIsMHgxMiwweDA4LDB4OTUsMHg4MCB9fSwKKyB7MTYsIDB4Y2NkMCwgMCwgezB4MmQsMHg2MCwweDA5LDB4NmMsMHgwMiwweGRlLDB4MDAsMHhiMSwweDgwLDB4MjMsMHhlMCwweDBhLDB4NTgsMHg2MiwweGZlLDB4MDAgfX0sCisgezE2LCAweGNjZTAsIDAsIHsweDk3LDB4YTAsMHgyMSwweGU4LDB4MDksMHhlOCwweDAyLDB4MzAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjY2YwLCAwLCB7MHg0OCwweDE0LDB4Y2QsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4OGIsMHgzYywweDAyLDB4OGMsMHgwMCwweGJiLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4Y2QwMCwgMCwgezB4YzQsMHgxYSwweDNkLDB4MDIsMHgyZiwweDg4LDB4YjMsMHg0OCwweDJjLDB4ZTAsMHg4OSwweDNlLDB4MDIsMHg4ZCwweDgwLDB4OTMgfX0sCisgezE2LCAweGNkMTAsIDAsIHsweGQ5LDB4YTQsMHg0MCwweDg4LDB4MTAsMHgwMiwweGNjLDB4MDQsMHg5MywweGM4LDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDkyIH19LAorIHsxNiwgMHhjZDIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4NDAsMHhmYSwweDAwLDB4YjIsMHg4MCB9fSwKKyB7MTYsIDB4Y2QzMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGVhLDB4ODAsMHgzNywweGEwLDB4MGMsMHhlOCwweDEzLDB4M2IsMHgwOCwweGRlLDB4MDEgfX0sCisgezE2LCAweGNkNDAsIDAsIHsweDNmLDB4ODIsMHgwYywweGUwLDB4NDMsMHhmYSwweDgwLDB4ZmUsMHg4MCwweDMxLDB4MjgsMHgwYywweGEwLDB4MDMsMHhmMCwweDAyIH19LAorIHsxNiwgMHhjZDUwLCAwLCB7MHhjNCwweGMwLDB4YjIsMHg4MCwweDBkLDB4ZTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2Q2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBiLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCwweDMwLDB4M2EgfX0sCisgezE2LCAweGNkNzAsIDAsIHsweDAwLDB4NmQsMHg4MCwweDgzLDB4ZTEsMHg0NCwweGI4LDB4MDQsMHgzZSwweDEwLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHhjZDgwLCAwLCB7MHgwMCwweDNhLDB4MTAsMHg0ZiwweDA0LDB4MDMsMHhlMywweDAwLDB4ZTgsMHgxMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4Y2Q5MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzksMHgwMCwweDM4LDB4NDAgfX0sCisgezE2LCAweGNkYTAsIDAsIHsweDBmLDB4MWEsMHgwMywweDJlLDB4MDAsMHhmYiwweGEwLDB4MzYsMHg2MCwweDBjLDB4OTgsMHgwMywweGU2LDB4MDQsMHhkMSwweDAwIH19LAorIHsxNiwgMHhjZGIwLCAwLCB7MHgzNiwweDQ4LDB4MGUsMHg5MSwweDAyLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg5OSwweDAzLDB4NjIsMHg0MCB9fSwKKyB7MTYsIDB4Y2RjMCwgMCwgezB4ZjgsMHgwMCwweGEwLDB4NjgsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNkZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAyLDB4ODksMHgwNCwweDJlLDB4NjQsMHg4OCwweDk0LDB4MDIsMHhhNSwweDAwLDB4YjksMHg4MCwweDIwIH19LAorIHsxNiwgMHhjZGUwLCAwLCB7MHg2NCwweDBkLDB4OWMsMHgwMiwweGU2LDB4NDIsMHg4OSwweDAwLDB4MjIsMHg2MCwweDBiLDB4OWMsMHgwMiwweGU0LDB4MTAsMHhiOSB9fSwKKyB7MTYsIDB4Y2RmMCwgMCwgezB4NDAsMHgzYSwweDUwLDB4MDgsMHg5YywweDAyLDB4MjcsMHgyMCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAzLDB4NjAgfX0sCisgezE2LCAweGNlMDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwIH19LAorIHsxNiwgMHhjZTEwLCAwLCB7MHgwYSwweDkwLDB4ODIsMHgyNSwweDRjLDB4YjksMHgwMCwweDAyLDB4NDAsMHgwOCwweDk2LDB4MDIsMHhlNCwweDEwLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4Y2UyMCwgMCwgezB4MjYsMHg1MCwweDEzLDB4OTQsMHgwMiwweGU0LDB4NDAsMHhiOSwweDA4LDB4MmUsMHg0MCwweDA4LDB4OTAsMHg4YSwweDI0LDB4MDAgfX0sCisgezE2LCAweGNlMzAsIDAsIHsweGI5LDB4MDEsMHgyYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZTQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHg4MCwweDgxLDB4NDAsMHgyYywweGM4LDB4MDgsMHgxMCwweDA2LDB4ODQsMHgwMCwweGIxLDB4MDQsMHgyMCB9fSwKKyB7MTYsIDB4Y2U1MCwgMCwgezB4NDksMHgwOSwweDE0LDB4NDIsMHhjYywweDg5LDB4ODEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4NDYsMHhjNCwweDAwLDB4YjEgfX0sCisgezE2LCAweGNlNjAsIDAsIHsweDAwLDB4MmEsMHhjMCwweDI4LDB4MTQsMHgwMiwweDAxLDB4MDEsMHhiMCwweDA0LDB4MjgsMHg0MCwweDM4LDB4OTQsMHgwMiwweDQyIH19LAorIHsxNiwgMHhjZTcwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHg4OCwweDAwLDB4M2EsMHgwMCB9fSwKKyB7MTYsIDB4Y2U4MCwgMCwgezB4MGUsMHg4MCwweDIzLDB4MjAsMHgwMCwweGY4LDB4NTAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDEyLDB4ZTEsMHg0MCwweGQ4LDB4NTAgfX0sCisgezE2LCAweGNlOTAsIDAsIHsweDM2LDB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAsMHgwYywweDgwLDB4NTMsMHg2MCwweDA0IH19LAorIHsxNiwgMHhjZWEwLCAwLCB7MHhmOCwweDAwLDB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2ViMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4NDAsMHhmOSwweDQ0LDB4M2UsMHg0NCwweDBmLDB4ZDQsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2YgfX0sCisgezE2LCAweGNlYzAsIDAsIHsweDQ0LDB4MGYsMHhkNCwweDUzLDB4ZjQsMHg0NCwweGZkLDB4MTAsMHgyZiwweDQwLDB4MGYsMHhmNCwweDAzLDB4ZmQsMHgwMCwweGZkIH19LAorIHsxNiwgMHhjZWQwLCAwLCB7MHg0MCwweDNiLDB4MTAsMHgwZiwweGQ0LDB4MjMsMHhkMSwweDA0LDB4N2MsMHg0MywweDM2LDB4NTAsMHgwZiwweDUwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4Y2VlMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNiwweDAwLDB4ZjksMHgxMCwweDJlLDB4NjIgfX0sCisgezE2LCAweGNlZjAsIDAsIHsweDBmLDB4ZDIsMHg4MywweGU0LDB4MDAsMHhiZCwweDQyLDB4M2UsMHg2MSwweDBmLDB4ZDAsMHgwMywweGY2LDB4YzAsMHhjOSwweGEyIH19LAorIHsxNiwgMHhjZjAwLCAwLCB7MHgyYiwweDQwLDB4MGMsMHhkMCwweDAzLDB4MzQsMHgwMCwweGY5LDB4ODEsMHgzZSwweDY4LDB4MDgsMHhjMSwweDQzLDB4ZmEsMHgwMCB9fSwKKyB7MTYsIDB4Y2YxMCwgMCwgezB4ZjUsMHg4MCwweDNmLDB4NjIsMHgwYywweDE0LDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNmMjAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDIwLDB4ODgsMHgxMSwweDJlLDB4MTAsMHgwYiwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHg4MiwweDJlIH19LAorIHsxNiwgMHhjZjMwLCAwLCB7MHgxMCwweDBiLDB4ODAsMHgwMCwweGUzLDB4YzQsMHg4OCwweGYwLDB4MjIsMHgwMCwweDBiLDB4ODAsMHgwYSwweDIwLDB4MDAsMHhlOCB9fSwKKyB7MTYsIDB4Y2Y0MCwgMCwgezB4NDAsMHgyZiwweDE0LDB4MDgsMHg4OCwweDAyLDB4ZTIsMHgwMCwweGI4LDB4MDAsMHgyZSwweDAwLDB4MDgsMHg4OCwweDAyLDB4OGUgfX0sCisgezE2LCAweGNmNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4YzUsMHgwMCwweGExLDB4MDAsMHgyYywweDQwIH19LAorIHsxNiwgMHhjZjYwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHhjNCwweDE4LDB4YjEsMHgyMiwweDZjLDB4ZDEsMHgwYiwweDEwLDB4MjYsMHhjNCwweDAwLDB4ODEsMHgwOCB9fSwKKyB7MTYsIDB4Y2Y3MCwgMCwgezB4MmEsMHg0MCwweDg4LDB4MTAsMHgwMiwweDA0LDB4MDQsMHhiNSwweGMwLDB4MGYsMHg0MCwweDBiLDB4MDIsMHgwMiwweDQxLDB4YTAgfX0sCisgezE2LCAweGNmODAsIDAsIHsweGIxLDB4NDAsMHgyYywweDQwLDB4MDgsMHgxMiwweDAyLDB4MDIsMHgxMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZjkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDg5LDB4MDYsMHgyZSwweDQwLDB4MGIsMHg5MCwweDEyLDB4ZTQsMHgwMCwweGI5LDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4Y2ZhMCwgMCwgezB4NDAsMHgwYiwweGIwLDB4ODIsMHhjNCwweDAyLDB4ODksMHg0NCwweDIyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgyNCwweDAwLDB4YTkgfX0sCisgezE2LCAweGNmYjAsIDAsIHsweDAwLDB4MjcsMHg0OCwweDA5LDB4YjAsMHgxMiwweGVjLDB4MTgsMHhiOSwweDAxLDB4MmUsMHg0MCwweDQwLDB4OTAsMHgwMiwweDg2IH19LAorIHsxNiwgMHhjZmMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU3LDB4ODQsMHhlOSwweDAxLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4Y2ZkMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDcyLDB4MGYsMHg5MCwweDAzLDB4ZTcsMHg2MCwweDg5LDB4MTAgfX0sCisgezE2LCAweGNmZTAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHg0NCwweDNjLDB4NDAsMHgyZCwweDkwLDB4MDMsMHhlNywweDYwIH19LAorIHsxNiwgMHhjZmYwLCAwLCB7MHhmOSwweDcxLDB4M2UsMHg0MCwweDI4LDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDAwMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4NDgsMHhhOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4OWEsMHg0MywweGVjLDB4MDAsMHhmOSwweDIwLDB4N2UgfX0sCisgezE2LCAweGQwMTAsIDAsIHsweGM4LDB4MGYsMHg5YSwweDA3LDB4NjYsMHgwMCwweDc5LDB4ODAsMHg3ZSwweDQwLDB4MGYsMHgxYywweDAzLDB4ZTcsMHgwMCwweGU5IH19LAorIHsxNiwgMHhkMDIwLCAwLCB7MHhhMCwweDNlLDB4NDAsMHg0NiwweDgwLDB4MDMsMHhlMCwweDIwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4ZDAzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MCwweDAwLDB4ZjgsMHgwMCwweDNhLDB4MDAgfX0sCisgezE2LCAweGQwNDAsIDAsIHsweDBmLDB4ODAsMHgwMywweGEwLDB4MDgsMHhlOCwweDQwLDB4M2EsMHgxMCwweDBjLDB4ODMsMHgwMywweGExLDB4YzAsMHhmMCwweDQwIH19LAorIHsxNiwgMHhkMDUwLCAwLCB7MHgzZSwweDA2LDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHgzYiwweDAwLDB4MGYsMHg4MSwweDAzLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZDA2MCwgMCwgezB4ZjgsMHgxMCwweGIyLDB4MDAsMHg0YywweDgwLDB4MGIsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDJlLDB4YjAsMHgwYiwweGU4LDB4MDIsMHhlOSwweDAwLDB4M2UsMHg5MCwweDAyIH19LAorIHsxNiwgMHhkMDgwLCAwLCB7MHg4MSwweDA4LDB4ZTQsMHgxMiwweDc4LDB4MDAsMHhiYSwweDAwLDB4MmQsMHhiMCwweDg5LDB4ZTgsMHgyMiwweGY4LDB4MGMsMHhiYSB9fSwKKyB7MTYsIDB4ZDA5MCwgMCwgezB4MDAsMHg2ZSwweDgwLDB4MDMsMHhjNSwweDAzLDB4MzAsMHgwMCwweGJhLDB4MDAsMHgyMiwweGE4LDB4MDgsMHhhMCwweDIyLDB4OGEgfX0sCisgezE2LCAweGQwYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyOCwweGU4IH19LAorIHsxNiwgMHhkMGIwLCAwLCB7MHgxYiwweDMxLDB4MTIsMHg4YywweGM0LDB4YTMsMHg5MiwweDJjLDB4NDAsMHg4OCwweDM0LDB4MDYsMHg4ZSwweDAwLDB4OTMsMHgwMCB9fSwKKyB7MTYsIDB4ZDBjMCwgMCwgezB4MmMsMHhmMCwweDE5LDB4MzEsMHhhMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjgsMHg4MCwweDAxLDB4MzgsMHgwMiwweDRjLDB4MDAgfX0sCisgezE2LCAweGQwZDAsIDAsIHsweGIzLDB4ODAsMHgyMCwweGUwLDB4MGEsMHhiMCwweDEyLDB4MDIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMGUwLCAwLCB7MHhhMCwweDAxLDB4MWMsMHgwMCwweGI3LDB4MTQsMHgyZCwweDQyLDB4MGIsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4ODEsMHgyNyB9fSwKKyB7MTYsIDB4ZDBmMCwgMCwgezB4ZTAsMHgxOCwweDYwLDB4MDIsMHg1OCwweDE4LDB4YjcsMHgyMiwweDJkLDB4ODAsMHgwOSwweDcwLDB4MjIsMHhkYywweDAwLDB4YjcgfX0sCisgezE2LCAweGQxMDAsIDAsIHsweDAwLDB4MmQsMHg4MCwweDBiLDB4M2IsMHgwMiwweDFkLDB4ZDAsMHhiZiwweDgwLDB4MjgsMHhjMCwweDhhLDB4ZjIsMHgwMiwweGEwIH19LAorIHsxNiwgMHhkMTEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFmLDB4ODAsMHhmNywweGEwLDB4MzksMHhlMiB9fSwKKyB7MTYsIDB4ZDEyMCwgMCwgezB4MGYsMHg2OCwweDAzLDB4OWUsMHgwMCwweGVkLDB4ODQsMHgzZCwweGUyLDB4NDQsMHg3OCwweDAzLDB4OWUsMHgwMCwweGY3LDB4YjQgfX0sCisgezE2LCAweGQxMzAsIDAsIHsweDJkLDB4ZTAsMHgwZCwweDY4LDB4MDMsMHhkNiwweDAwLDB4ZjYsMHg4MCwweDM5LDB4ZTAsMHgwZiwweDc5LDB4MDMsMHg1ZSwweDkwIH19LAorIHsxNiwgMHhkMTQwLCAwLCB7MHhmNywweDgxLDB4MzEsMHg2MCwweDJlLDB4N2MsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDE1MCwgMCwgezB4MDgsMHgxZCwweGFkLDB4MDAsMHhmYiwweDQyLDB4M2UsMHhjOCwweDBmLDB4YTAsMHgwMywweGVkLDB4YTAsMHhiYiwweDAwLDB4MzggfX0sCisgezE2LCAweGQxNjAsIDAsIHsweGM4LDB4MGYsMHhiMCwweDAzLDB4NjgsMHgwMCwweGZiLDB4MTEsMHgzZSwweDQwLDB4MDksMHhiMCwweDQxLDB4ZWMsMHgwMCwweGZhIH19LAorIHsxNiwgMHhkMTcwLCAwLCB7MHgwMiwweDNlLDB4YzAsMHgwZiwweGIyLDB4MGIsMHhlZCwweDgwLDB4M2IsMHgwMCwweDM2LDB4NDAsMHgwZCwweGIwLDB4MjMsMHg0MiB9fSwKKyB7MTYsIDB4ZDE4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDAwLDB4Y2YsMHhkMCwweDMzLDB4ZTQgfX0sCisgezE2LCAweGQxOTAsIDAsIHsweDRmLDB4ZjksMHgwMywweGRlLDB4NDAsMHhkYywweDgwLDB4MzYsMHhlNCwweDBjLDB4YjksMHgxMywweGZlLDB4MDAsMHhjZiwweDkwIH19LAorIHsxNiwgMHhkMWEwLCAwLCB7MHgzNywweGU1LDB4MGYsMHhmOCwweDQzLDB4ZmUsMHgwMCwweGNmLDB4OTIsMHgzZiwweGE0LDB4MGYsMHg3OCwweDAzLDB4MWYsMHgwMCB9fSwKKyB7MTYsIDB4ZDFiMCwgMCwgezB4YzUsMHg4MCwweDMzLDB4NjAsMHgwYywweGY4LDB4MjAsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxYzAsIDAsIHsweGE4LDB4MTEsMHhiYywweDAwLDB4MGYsMHgxMCwweDIxLDB4ODEsMHgwYiwweDYwLDB4MDMsMHg4NCwweDAwLDB4OGIsMHgwOCwweDIxIH19LAorIHsxNiwgMHhkMWQwLCAwLCB7MHg2MCwweDBhLDB4N2IsMHgwMywweDk4LDB4MDAsMHg4YiwweDEwLDB4MjksMHg4NCwweDBlLDB4NjQsMHgyMiwweGRjLDB4NDAsMHhkNyB9fSwKKyB7MTYsIDB4ZDFlMCwgMCwgezB4MDIsMHgyZCwweDg0LDB4MGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg1LDB4MTgsMHgyMSwweDQwLDB4MGEsMHhmMCwweDIyLDB4YWEgfX0sCisgezE2LCAweGQxZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGE3LDB4MTQsMHg2OSwweGMwIH19LAorIHsxNiwgMHhkMjAwLCAwLCB7MHgxYSwweDYwLDB4MTIsMHhmYywweDAxLDB4YTQsMHgxMCwweDJkLDB4YzAsMHgwYSwweDUyLDB4MDIsMHg0NSwweDQwLDB4ODcsMHgwYyB9fSwKKyB7MTYsIDB4ZDIxMCwgMCwgezB4MjEsMHg4MCwweDFiLDB4NjAsMHg4MiwweGQ0LDB4MDAsMHg4NiwweDAzLDB4MjUsMHhlMCwweDFiLDB4NzAsMHgwMiwweDVjLDB4NDAgfX0sCisgezE2LCAweGQyMjAsIDAsIHsweDlkLDB4MDAsMHgyOSwweDQwLDB4MDgsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMjMwLCAwLCB7MHgyMCwweDE0LDB4Y2QsMHgwMCwweGEzLDB4MDAsMHgyOCwweGMwLDB4MWIsMHgyMCwweDIyLDB4OGMsMHgxMSwweGEzLDB4MDAsMHg2OCB9fSwKKyB7MTYsIDB4ZDI0MCwgMCwgezB4ZjYsMHgwYSwweDNjLDB4MDYsMHg4MiwweDAwLDB4ODMsMHg4MCwweDI4LDB4ODQsMHgwYSwweDhjLDB4ODIsMHhjYywweDQ0LDB4OTIgfX0sCisgezE2LCAweGQyNTAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRlLDB4MDAsMHg5MSwweDAwLDB4MjgsMHg0MCwweDBhLDB4MzAsMHgwMiwweDg4IH19LAorIHsxNiwgMHhkMjYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJlLDB4MjIsMHhlZiwweDA0LDB4YmEsMHhjMCB9fSwKKyB7MTYsIDB4ZDI3MCwgMCwgezB4MGYsMHgxNCwweDkzLDB4ZWMsMHgwMiwweGYxLDB4YzMsMHgzZSwweGYwLDB4MGUsMHg5MCwweDgzLDB4NjYsMHgwMCwweGNmLDB4ZDIgfX0sCisgezE2LCAweGQyODAsIDAsIHsweDMyLDB4NTAsMHgwZiwweDljLDB4MDMsMHhjYiwweDAwLDB4YzksMHg4MCwweDNlLDB4MjgsMHgwZiwweGIwLDB4MDMsMHg0ZiwweDAwIH19LAorIHsxNiwgMHhkMjkwLCAwLCB7MHhkMSwweGMwLDB4YWEsMHhjMCwweDBjLDB4NzEsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDJhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MjAsMHhkYiwweDAwLDB4MjYsMHg4MCwweDBmLDB4YTAsMHgwMywweGVjLDB4MDgsMHgxYiwweDAwLDB4MzYgfX0sCisgezE2LCAweGQyYjAsIDAsIHsweGMwLDB4MGYsMHg4NiwweDAxLDB4ZTUsMHg0MCwweGZiLDB4MDIsMHgzYSwweDQ4LDB4MGUsMHg5NCwweDAzLDB4ZWMsMHg4MCwweGYxIH19LAorIHsxNiwgMHhkMmMwLCAwLCB7MHg4NCwweDNlLDB4MDAsMHg0ZiwweGIwLDB4MDMsMHhhZCwweGMwLDB4ZWIsMHgyMCwweDM2LDB4YzAsMHgwZiwweGIwLDB4MjMsMHhlMCB9fSwKKyB7MTYsIDB4ZDJkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4Y2YsMHgwMCwweDNmLDB4NjAgfX0sCisgezE2LCAweGQyZTAsIDAsIHsweDBjLDB4ZTAsMHg4MywweDNlLDB4ODAsMHhlZCwweDA4LDB4MzMsMHhkMCwweDhmLDB4NTAsMHgwMywweDllLDB4MDAsMHhkZiwweDAwIH19LAorIHsxNiwgMHhkMmYwLCAwLCB7MHgzMywweDQwLDB4MGMsMHhjMCwweDAzLDB4MzAsMHgwMCwweGNjLDB4MTAsMHgzMywweDY4LDB4MGMsMHhmMCwweDAzLDB4M2MsMHg4NCB9fSwKKyB7MTYsIDB4ZDMwMCwgMCwgezB4OGQsMHg5MCwweDMwLDB4NDAsMHgwYywweGYwLDB4MDMsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzMTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHgwMiwweDJjLDB4ZjQsMHgwOCwweGE4LDB4NjIsMHgwYywweDgwLDB4OGIsMHg4MCwweDJhIH19LAorIHsxNiwgMHhkMzIwLCAwLCB7MHg2MCwweDBmLDB4OWMsMHgwMiwweDJlLDB4MDAsMHg4YiwweDAwLDB4MjAsMHg2MCwweDBkLDB4OTgsMHgwMiwweDJjLDB4ODAsMHhkOCB9fSwKKyB7MTYsIDB4ZDMzMCwgMCwgezB4MDAsMHgxNCwweDQwLDB4MDgsMHgzNCwweDEyLDB4MmUsMHgwMCwweDhiLDB4ODIsMHgzMiwweDQwLDB4MGQsMHhiMCwweDAzLDB4NjAgfX0sCisgezE2LCAweGQzNDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweGQwIH19LAorIHsxNiwgMHhkMzUwLCAwLCB7MHgwOCwweGI4LDB4MDIsMHgyYywweDAwLDB4OGEsMHg4NCwweDIyLDB4YzAsMHgwYiwweDg4LDB4MDIsMHhlNCwweGEwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4ZDM2MCwgMCwgezB4MjIsMHg2MiwweDBhLDB4OTgsMHgwMiwweDI4LDB4MDAsMHg4OSwweDAwLDB4MjIsMHgwMCwweDBhLDB4YjEsMHgwNiwweDJjLDB4MDAgfX0sCisgezE2LCAweGQzNzAsIDAsIHsweGFiLDB4MDAsMHgyMiwweDQwLDB4MDgsMHhiMCwweDAyLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMzgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMiwweGEzLDB4MDAsMHgyYywweGMxLDB4MDgsMHgyMCwweDAyLDB4MGMsMHgwMiwweDhiLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4ZDM5MCwgMCwgezB4YzIsMHgwYSwweDAwLDB4MDIsMHg0NCwweDEwLDB4ODMsMHgxMCwweDIyLDB4NDAsMHgwYiwweDEwLDB4MDYsMHgwYywweDAwLDB4OTEgfX0sCisgezE2LCAweGQzYTAsIDAsIHsweDA0LDB4YWEsMHgwMCwweDI4LDB4MzAsMHgwMiwweDJjLDB4MDAsMHhhMSwweDAxLDB4MjAsMHg0MCwweDA5LDB4YjAsMHgwMiwweDQyIH19LAorIHsxNiwgMHhkM2IwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDdjLDB4MDAsMHg4ZiwweDAwLDB4M2UsMHhjMCB9fSwKKyB7MTYsIDB4ZDNjMCwgMCwgezB4MmMsMHhhMCwweDAzLDB4MjksMHg0MCwweGE4LDB4NDAsMHgzMiwweGNjLDB4OGIsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGNmLDB4NDAgfX0sCisgezE2LCAweGQzZDAsIDAsIHsweDMyLDB4MDAsMHgwZSwweDgwLDB4MGEsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIyLDB4NDAsMHgwYywweGIwLDB4MDMsMHgyYywweDA0IH19LAorIHsxNiwgMHhkM2UwLCAwLCB7MHhlYiwweDAwLDB4YjIsMHg0MCwweDhjLDB4YjAsMHgwMywweDQwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDNmMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZTAsMHgwMywweGZjLDB4ODAsMHhmZiwweDI4LDB4M2QgfX0sCisgezE2LCAweGQ0MDAsIDAsIHsweGMwLDB4MGIsMHhjMSwweDAzLDB4YjAsMHgxNCwweGZmLDB4MDAsMHgzZiwweDAwLDB4MGQsMHhkMCwweDAzLDB4ZGMsMHgwMCwweGZjIH19LAorIHsxNiwgMHhkNDEwLCAwLCB7MHgwMCwweDM3LDB4NDAsMHgwZiwweGYwLDB4MjEsMHhmYywweDAwLDB4MWQsMHgwMCwweDdiLDB4NDAsMHg4ZiwweGYwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4ZDQyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkMiwweDAwLDB4ZGYsMHgwMCwweDMxLDB4YTAgfX0sCisgezE2LCAweGQ0MzAsIDAsIHsweDRkLDB4ZjAsMHg0MywweDMyLDB4MDAsMHhjZSwweDE0LDB4MWIsMHg2OCwweDBlLDB4ZGEsMHgyMywweGIyLDB4YzAsMHgyZiwweDAwIH19LAorIHsxNiwgMHhkNDQwLCAwLCB7MHgzZiwweGMyLDB4MmMsMHhlOCwweDAzLDB4M2MsMHg0MCwweGZkLDB4MDgsMHgzYiwweGM4LDB4NGMsMHhmMCwweDgzLDB4M2MsMHhhMCB9fSwKKyB7MTYsIDB4ZDQ1MCwgMCwgezB4Y2YsMHgwMCwweDMzLDB4YzQsMHgwYywweGYzLDB4MDcsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0NjAsIDAsIHsweDgwLDB4MTAsMHhlMiwweDAwLDB4OGYsMHhjMCwweDIyLDB4YTAsMHgwOCwweGZkLDB4NDIsMHgyZiwweDAwLDB4OGIsMHg3MCwweDIyIH19LAorIHsxNiwgMHhkNDcwLCAwLCB7MHgxZSwweDQ4LDB4ODksMHgwMiwweDI3LDB4YzAsMHg4ZiwweDVhLDB4MmUsMHg1MCwweDQ4LDB4MzAsMHgwMiwweGJkLDB4YzAsMHhiZCB9fSwKKyB7MTYsIDB4ZDQ4MCwgMCwgezB4NDAsMHgyMywweGM1LDB4NDgsMHhmNCwweDgyLDB4M2QsMHgyYywweDg3LDB4NzAsMHgyMiwweGMwLDB4MDgsMHhmMSwweDAzLDB4ZTAgfX0sCisgezE2LCAweGQ0OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTAsMHgwMCwweDkzLDB4MTAsMHgyNiwweDgxIH19LAorIHsxNiwgMHhkNGEwLCAwLCB7MHg0OSwweDMwLDB4MDIsMHg4MCwweDQwLDB4ODMsMHgyMCwweDI4LDB4NDAsMHgwYSwweDEwLDB4MDIsMHg4MCwweDAwLDB4YTMsMHgyNCB9fSwKKyB7MTYsIDB4ZDRiMCwgMCwgezB4MmMsMHhjYSwweDA4LDB4MzIsMHg4MiwweDBjLDB4MDAsMHg5MSwweDI4LDB4MjAsMHhjYSwweDFiLDB4MzIsMHgwMiwweDBjLDB4ODggfX0sCisgezE2LCAweGQ0YzAsIDAsIHsweDgzLDB4MDksMHgyMCwweGM4LDB4MDksMHgzMiwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNGQwLCAwLCB7MHhjMCwweDE1LDB4YTMsMHgxNCwweDhiLDB4MDQsMHgyNiwweDg5LDB4MDgsMHhiMCwweDAyLDB4YWMsMHgyMiwweDhiLDB4ODgsMHgyYSB9fSwKKyB7MTYsIDB4ZDRlMCwgMCwgezB4MjAsMHgwOCwweDk4LDB4ODIsMHhhNiwweDEwLDB4YWIsMHgwMCwweDJlLDB4Y2EsMHgwOCwweGIwLDB4ODIsMHhhYywweDAwLDB4YjkgfX0sCisgezE2LCAweGQ0ZjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDI5LDB4YjAsMHgwYSwweDJjLDB4MDEsMHg4YiwweDAwLDB4MjIsMHhjMCwweDA5LDB4YjAsMHgyMiwweGYwIH19LAorIHsxNiwgMHhkNTAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGUzLDB4MDAsMHhkYiwweDAwLDB4MzQsMHhlMiB9fSwKKyB7MTYsIDB4ZDUxMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4YTMsMHgwMCwweGNhLDB4ODAsMHhiYSwweDcwLDB4MGUsMHg4OCwweDAzLDB4YTYsMHgwMCwweGViLDB4MDAgfX0sCisgezE2LCAweGQ1MjAsIDAsIHsweDNlLDB4OTAsMHgwYywweGI1LDB4MDMsMHgyYywweDAwLDB4ZmIsMHgxMCwweGJhLDB4YzAsMHgwZSwweGIwLDB4MDMsMHgyYywweDAyIH19LAorIHsxNiwgMHhkNTMwLCAwLCB7MHhjYiwweDAyLDB4MzIsMHhjMCwweDA5LDB4YjAsMHgwMiwweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDU0MCwgMCwgezB4ZTAsMHgwMSwweGIwLDB4MDgsMHhmZiwweDAwLDB4YmIsMHhlMCwweDBmLDB4NzAsMHgwMywweDY1LDB4MDAsMHhmNCwweDAwLDB4MzUgfX0sCisgezE2LCAweGQ1NTAsIDAsIHsweDQwLDB4MGYsMHg0MCwweDAzLDB4NTQsMHgwMCwweGRmLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhmOCwweDAzLDB4ZWMsMHgwMCwweGY3IH19LAorIHsxNiwgMHhkNTYwLCAwLCB7MHgwMSwweDNkLDB4YzEsMHgwZSwweDMwLDB4MDMsMHhlYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZSwweGYwLDB4MDMsMHhiOCB9fSwKKyB7MTYsIDB4ZDU3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMCwweDQwLDB4ZWIsMHgwOCwweDNlLDB4ODAgfX0sCisgezE2LCAweGQ1ODAsIDAsIHsweDBkLDB4YjAsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4M2EsMHg1MSwweDBmLDB4ODIsMHgwMywweDY0LDB4MjAsMHhkYiwweDAwIH19LAorIHsxNiwgMHhkNTkwLCAwLCB7MHgzZCwweDgyLDB4MGMsMHhiYywweDAzLDB4MmMsMHgxMCwweGRiLDB4MDAsMHg3MiwweGMwLDB4MGQsMHhiMSwweDAzLDB4MGMsMHgyMCB9fSwKKyB7MTYsIDB4ZDVhMCwgMCwgezB4ZDMsMHgwMCwweDMyLDB4YzAsMHgwZiwweGIwLDB4MGIsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1YjAsIDAsIHsweGM4LDB4MDUsMHgwMSwweDAwLDB4ODcsMHhjMCwweDJlLDB4YTgsMHgwOCwweGYxLDB4MTIsMHhjNSwweDQwLDB4ODgsMHgwMCwweDIyIH19LAorIHsxNiwgMHhkNWMwLCAwLCB7MHg0MCwweDBiLDB4ODQsMHgwMiwweDI3LDB4MDAsMHhhZiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YmMsMHgxMiwweDNjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4ZDVkMCwgMCwgezB4MDEsMHgyMywweGMwLDB4MjgsMHhmNSwweDRhLDB4M2QsMHgyOCwweGRmLDB4MDAsMHgzMywweGMwLDB4NGIsMHhmMCwweDAzLDB4MzIgfX0sCisgezE2LCAweGQ1ZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDgsMHg4MCwweGEzLDB4OTAsMHgyYywweDAwIH19LAorIHsxNiwgMHhkNWYwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHhjMSwweDAwLDB4OTIsMHgwNCwweDI4LDB4MDAsMHgwYiwweDE0LDB4MTIsMHg0MywweDAwLDB4YjMsMHgwNCB9fSwKKyB7MTYsIDB4ZDYwMCwgMCwgezB4MmMsMHgzMCwweDBhLDB4YjAsMHgwYSwweDhjLDB4MDAsMHg5MywweDAwLDB4NjAsMHhjMCwweDA4LDB4M2MsMHgwNiwweDBlLDB4MDEgfX0sCisgezE2LCAweGQ2MTAsIDAsIHsweGIzLDB4MDAsMHgyZSwweGMwLDB4OGIsMHgzMCwweDA2LDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNjIwLCAwLCB7MHgyMCwweDAxLDB4MTIsMHgwMCwweDg3LDB4ODAsMHgyZCwweDI0LDB4MDgsMHg3OCwweDAyLDB4ZDIsMHgwMCwweDk1LDB4ODAsMHgyMSB9fSwKKyB7MTYsIDB4ZDYzMCwgMCwgezB4YTAsMHgwYiwweDY4LDB4MDIsMHg1YSwweDIwLDB4ODcsMHg4MCwweDJkLDB4NjYsMHgxYSwweDdjLDB4MDIsMHg5ZSwweDAwLDB4ODcgfX0sCisgezE2LCAweGQ2NDAsIDAsIHsweDgwLDB4MjEsMHhlMSwweDE4LDB4NzksMHgwMiwweDllLDB4NDAsMHhiNywweDgwLDB4YTEsMHhlMCwweDBiLDB4NzgsMHgwMiwweDQ4IH19LAorIHsxNiwgMHhkNjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDAwLDB4MDAsMHhlMywweGEwLDB4M2MsMHg0MCB9fSwKKyB7MTYsIDB4ZDY2MCwgMCwgezB4MGMsMHgzMCwweDAzLDB4YzQsMHgyMiwweGQ5LDB4MDAsMHgzOCwweGQ0LDB4MGYsMHgzMCwweDgzLDB4NjgsMHg0MCwweGYzLDB4MDAgfX0sCisgezE2LCAweGQ2NzAsIDAsIHsweDNjLDB4ODAsMHgwYSwweDMyLDB4MDIsMHg4YywweDAwLDB4ZGIsMHgwMCwweGEyLDB4YzQsMHgwYywweDMwLDB4MDMsMHgwYywweDAwIH19LAorIHsxNiwgMHhkNjgwLCAwLCB7MHhmMywweDAwLDB4M2MsMHhjMCwweDBmLDB4YjEsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDY5MCwgMCwgezB4NDAsMHgwZCwweGIwLDB4MDAsMHhmZiwweDEwLDB4M2YsMHg0MCwweDBlLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZCwweDAwLDB4M2YgfX0sCisgezE2LCAweGQ2YTAsIDAsIHsweGMwLDB4MGYsMHgzMCwweDEzLDB4YmMsMHg0MCwweDdmLDB4MTAsMHgzZiwweGMxLDB4MmQsMHhmMCwweDAzLDB4N2MsMHgwMCwweGZiIH19LAorIHsxNiwgMHhkNmIwLCAwLCB7MHg0MCwweDNmLDB4YzIsMHgwZSwweGY0LDB4ODMsMHg3YywweDAwLDB4ZGYsMHgwMCwweDNmLDB4YzIsMHgwZiwweGYwLDB4MDMsMHg5MCB9fSwKKyB7MTYsIDB4ZDZjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZGIsMHhhMCwweDMyLDB4YzAgfX0sCisgezE2LCAweGQ2ZDAsIDAsIHsweDBkLDB4YjcsMHgwMywweGUwLDB4MDAsMHhjYSwweDA0LDB4M2UsMHg4MCwweDBmLDB4YjgsMHgwMywweDJjLDB4MTAsMHhmYiwweDAwIH19LAorIHsxNiwgMHhkNmUwLCAwLCB7MHgzMywweDAwLDB4OGQsMHhiMCwweDAzLDB4MmMsMHg4MCwweGU5LDB4NDAsMHgzZSwweGQyLDB4MGYsMHhiNCwweDAzLDB4MmQsMHg4MCB9fSwKKyB7MTYsIDB4ZDZmMCwgMCwgezB4ZWIsMHgyMCwweGIyLDB4YzAsMHgwZiwweGIyLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3MDAsIDAsIHsweDQ4LDB4MTEsMHg5MCwweDAwLDB4YjcsMHgxMCwweDExLDB4YzAsMHgwOCwweDcwLDB4ODIsMHhkOCwweDBhLDB4ODcsMHgwMSwweDJkIH19LAorIHsxNiwgMHhkNzEwLCAwLCB7MHg4MCwweDg5LDB4NzAsMHgwMywweGQ4LDB4MDgsMHhiNywweDBhLDB4MjEsMHg0MCwweDJjLDB4NzAsMHgwMiwweDBkLDB4YzAsMHg4NSB9fSwKKyB7MTYsIDB4ZDcyMCwgMCwgezB4MDEsMHg3OSwweGM4LDB4MGIsMHgzMiwweDAyLDB4MGQsMHgyMCwweDhmLDB4MjgsMHgyMSwweGMwLDB4MGIsMHg3MiwweDgyLDB4ZDIgfX0sCisgezE2LCAweGQ3MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDQwLDB4OTYsMHgxMCwweDk3LDB4OTAsMHgyMywweGUwIH19LAorIHsxNiwgMHhkNzQwLCAwLCB7MHgwOSwweDdhLDB4MDIsMHhkNiwweDAwLDB4OTcsMHg4MCwweDJkLDB4ZjAsMHgwYiwweDc4LDB4ODIsMHgxZSwweDAwLDB4YjMsMHhiMCB9fSwKKyB7MTYsIDB4ZDc1MCwgMCwgezB4MjEsMHhhMCwweDA4LDB4NzgsMHgwMiwweDFlLDB4MDAsMHhhNSwweDgwLDB4MmQsMHhlMCwweDBiLDB4N2EsMHgwMiwweDFlLDB4ODAgfX0sCisgezE2LCAweGQ3NjAsIDAsIHsweGE3LDB4YjAsMHgyMSwweGU4LDB4MGIsMHg3OSwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNzcwLCAwLCB7MHg0OCwweDE0LDB4YzAsMHgwMCwweGIzLDB4MDAsMHgyMCwweGUyLDB4MDgsMHgzMCwweDAyLDB4YzYsMHg0MCwweDkzLDB4NzAsMHgyYyB9fSwKKyB7MTYsIDB4ZDc4MCwgMCwgezB4YzAsMHgwOSwweDNjLDB4MDIsMHg4ZSwweDAwLDB4YjMsMHgwMCwweDIwLDB4ZDgsMHgwOCwweDE4LDB4MDIsMHgwYywweDAwLDB4ODEgfX0sCisgezE2LCAweGQ3OTAsIDAsIHsweDkwLDB4MmUsMHhjMCwweDBiLDB4MzAsMHgyYSwweDJjLDB4MTAsMHg4MywweDAwLDB4YTAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHhkN2EwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxMSwweGI5LDB4MDAsMHhkYSwweDAyLDB4MzMsMHhiOCB9fSwKKyB7MTYsIDB4ZDdiMCwgMCwgezB4MGQsMHhhMCwweDAzLDB4ZjgsMHgwMCwweGRlLDB4YzAsMHgzZiwweGIwLDB4NGYsMHhlYywweDA2LDB4MzgsMHg0MCwweGZhLDB4MDAgfX0sCisgezE2LCAweGQ3YzAsIDAsIHsweGIzLDB4OTAsMHgwYywweDZjLDB4MGIsMHgyOCwweDA4LDB4ZWEsMHgwMSwweDdlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHgyOCwweDAwIH19LAorIHsxNiwgMHhkN2QwLCAwLCB7MHhlYSwweDAwLDB4MzIsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDdlMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDQwLDB4M2EsMHgwMCwweDBmLDB4ODQsMHgwMywweGUxLDB4MDAsMHhlOCwweDAyLDB4M2UgfX0sCisgezE2LCAweGQ3ZjAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHg0MCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHhkODAwLCAwLCB7MHgwMCwweDNhLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ZDgxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDIwLDB4ZjksMHhjMCwweDNlLDB4NzAgfX0sCisgezE2LCAweGQ4MjAsIDAsIHsweDBlLDB4OTAsMHgwMiwweGU0LDB4ODAsMHhjOSwweDAwLDB4MzIsMHg0MiwweDBjLDB4OTgsMHg4MywweGE0LDB4ODQsMHhmOSwweDAwIH19LAorIHsxNiwgMHhkODMwLCAwLCB7MHhiMiwweDYwLDB4MGMsMHg5MCwweDgzLDB4MjQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHgxYSwweDAyLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ZDg0MCwgMCwgezB4YzEsMHgwMCwweGIyLDB4NDAsMHgwZiwweDkwLDB4MDEsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4NTAsIDAsIHsweDgwLDB4MDQsMHg2NSwweDAwLDB4YjksMHg4MSwweDJjLDB4NjAsMHgwZCwweDk0LDB4YzIsMHhjNywweDA4LDB4ODksMHgwMCwweDIyIH19LAorIHsxNiwgMHhkODYwLCAwLCB7MHg0MCwweDA4LDB4OTUsMHhjNywweGE0LDB4MDAsMHhiOSwweDAwLDB4MjgsMHg3MCwweGE4LDB4OTQsMHgwYSwweDI0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZDg3MCwgMCwgezB4MDQsMHgyZSwweDQwLDB4MjgsMHg5MCwweDJhLDB4MjYsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGQ4ODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4NDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHhkODkwLCAwLCB7MHgwYSwweDkwLDB4MDIsMHhlNSwweDAwLDB4ODEsMHgwMCwweGEwLDB4NDAsMHgwOSwweDkwLDB4NDIsMHhlYywweDAwLDB4YjEsMHgwMCB9fSwKKyB7MTYsIDB4ZDhhMCwgMCwgezB4MjIsMHg1OCwweDA4LDB4OTAsMHhhMiwweDA0LDB4MDIsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4YTAgfX0sCisgezE2LCAweGQ4YjAsIDAsIHsweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOGMwLCAwLCB7MHgwOCwweDA0LDB4MDQsMHgwMCwweGIxLDB4MjAsMHgyZSwweGMwLDB4ODksMHgxMiwweDAyLDB4YzQsMHg4MCwweDgxLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4ZDhkMCwgMCwgezB4NDAsMHg2MSwweDEwLDB4NDIsMHhjNSwweDAwLDB4YjEsMHgyMCwweDI4LDB4NDgsMHgxOCwweDkwLDB4NDIsMHgwNCwweDgwLDB4ODEgfX0sCisgezE2LCAweGQ4ZTAsIDAsIHsweDI4LDB4MmMsMHg0OCwweDA4LDB4MTIsMHg4MiwweDg0LDB4YTAsMHg4MSwweDIwLDB4MjAsMHg0OCwweDBiLDB4MTIsMHg4MiwweGMyIH19LAorIHsxNiwgMHhkOGYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDY4LDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4ZDkwMCwgMCwgezB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwOCwweGM4LDB4NTAsMHgzMiwweDE0LDB4MGQsMHg4MCwweDE3LDB4ZTgsMHgwNCwweGY4LDB4NTAgfX0sCisgezE2LCAweGQ5MTAsIDAsIHsweDMyLDB4MTQsMHg0YywweDA1LDB4MGIsMHgyMSwweDQwLDB4YzgsMHgyMCwweDNlLDB4MDAsMHgwYywweDg3LDB4MDMsMHhhMSwweGMyIH19LAorIHsxNiwgMHhkOTIwLCAwLCB7MHhjOCwweDAwLDB4MzIsMHgxNCwweDhmLDB4ODIsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDkzMCwgMCwgezB4OTgsMHgxZCwweGY0LDB4MDAsMHhmMSwweDEwLDB4M2QsMHg0MCwweDBmLDB4OTEsMHgwMiwweGQ0LDB4NDIsMHhmZCwweDEwLDB4M2YgfX0sCisgezE2LCAweGQ5NDAsIDAsIHsweDUxLDB4MGUsMHg1NCwweDEzLDB4YjUsMHgwMCwweGY5LDB4MTAsMHgzNSwweDQ0LDB4MmYsMHhkMCwweDAzLDB4ZTQsMHg1MCwweGZkIH19LAorIHsxNiwgMHhkOTUwLCAwLCB7MHgyOCwweDNlLDB4NGUsMHgwZiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZjksMHgzOCwweDNlLDB4NDQsMHgwZiwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4ZDk2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNCwweDAwLDB4ZmQsMHgwMCwweDNkLDB4NDAgfX0sCisgezE2LCAweGQ5NzAsIDAsIHsweDJjLDB4ZDAsMHgwMywweGI2LDB4MDAsMHhmOSwweDgyLDB4M2UsMHg0MCwweDBjLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmOSwweDgwIH19LAorIHsxNiwgMHhkOTgwLCAwLCB7MHgzMywweDcwLDB4MGMsMHg1MCwweDAzLDB4MzQsMHgwMCwweGM5LDB4YzAsMHgzZSwweDQwLDB4MGMsMHhkYSwweDAzLDB4MTYsMHg4MCB9fSwKKyB7MTYsIDB4ZDk5MCwgMCwgezB4YzksMHg0MCwweDNlLDB4NjIsMHgyYywweDk4LDB4ODMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5YTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4MDAsMHgwOCwweDgwLDB4MDIsMHgyOCwweDAwLDB4YjgsMHg1MCwweDI2IH19LAorIHsxNiwgMHhkOWIwLCAwLCB7MHgwMCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDAsMHhiOCwweDAwLDB4MmEsMHgzNCwweDJhLDB4YWEsMHgwYSwweDIwLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4ZDljMCwgMCwgezB4YzAsMHgyZSwweDJhLDB4MDgsMHg4MCwweDIyLDB4MjEsMHgwMCwweGE4LDB4ODAsMHgyZSwweDAwLDB4MDgsMHg4MCwweDAyLDB4MGUgfX0sCisgezE2LCAweGQ5ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyZSwweDQwIH19LAorIHsxNiwgMHhkOWUwLCAwLCB7MHg0OCwweDEwLDB4MDYsMHg4ZCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHgyOCwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHg0MCB9fSwKKyB7MTYsIDB4ZDlmMCwgMCwgezB4MmMsMHg0OCwweDA4LDB4MTAsMHg4MiwweDQ0LDB4MDAsMHg4MSwweDYwLDB4MmMsMHg0MCwweDI4LDB4MTQsMHgwYSwweDA0LDB4NDAgfX0sCisgezE2LCAweGRhMDAsIDAsIHsweDgxLDB4MjAsMHgyYywweDQwLDB4MDgsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYTEwLCAwLCB7MHgxOCwweDA1LDB4YTQsMHg0MCwweGI5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHhiMCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MjgsMHgyZSB9fSwKKyB7MTYsIDB4ZGEyMCwgMCwgezB4NTAsMHgwOCwweDkwLDB4MjIsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NjAsMHgwYiwweDEyLDB4NDIsMHg2NCwweDAwLDB4ODkgfX0sCisgezE2LCAweGRhMzAsIDAsIHsweDAwLDB4MmMsMHg0MCwweDA5LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhhOSwweDAwLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhkYTQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwNSwweGU2LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MiB9fSwKKyB7MTYsIDB4ZGE1MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YTcsMHg0MCwweGY5LDB4NDAsMHgzZSwweDcwLDB4MGMsMHg5OCwweDAyLDB4ZTUsMHg0MCwweGY5LDB4MDAgfX0sCisgezE2LCAweGRhNjAsIDAsIHsweDNlLDB4NDAsMHgwYywweDk4LDB4MDMsMHg2NCwweDA2LDB4YzksMHgwMSwweDJlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDA0IH19LAorIHsxNiwgMHhkYTcwLCAwLCB7MHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGE4MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHg4MywweGU2LDB4MTAsMHhmOSwweDAwLDB4MzYgfX0sCisgezE2LCAweGRhOTAsIDAsIHsweDY4LDB4MGYsMHg5YywweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzYSwweDQwLDB4MGUsMHg5OCwweDkzLDB4YTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhkYWEwLCAwLCB7MHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4ODMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9fSwKKyB7MTYsIDB4ZGFiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDQgfX0sCisgezE2LCAweGRhYzAsIDAsIHsweDBjLDB4ODAsMHgwMywweDIxLDB4MDIsMHhjOCwweDQwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGUxLDB4MDAsMHhmMCwweDAwIH19LAorIHsxNiwgMHhkYWQwLCAwLCB7MHgzZSwweDAyLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZGFlMCwgMCwgezB4YzgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhZjAsIDAsIHsweDI4LDB4MTUsMHgzYSwweDAwLDB4YmUsMHgwMiwweDJmLDB4YjAsMHgwOCwweDY4LDB4MTIsMHgzOCwweDAwLDB4OGEsMHgwNCwweDJhIH19LAorIHsxNiwgMHhkYjAwLCAwLCB7MHg4MCwweDBiLDB4ZTAsMHg0MiwweGZiLDB4MjAsMHhiYSwweDAwLDB4MmYsMHg5MSwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4ZGIxMCwgMCwgezB4MDAsMHgyNiwweDgwLDB4MDgsMHhlZSwweDBhLDB4MzgsMHgwMCwweDhhLDB4MDAsMHgyMiwweDgwLDB4MGIsMHhhMCwweDAyLDB4OGEgfX0sCisgezE2LCAweGRiMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDIsMHgwMCwweGIzLDB4MDAsMHgyYywweGMyIH19LAorIHsxNiwgMHhkYjMwLCAwLCB7MHgyOCwweDM4LDB4MGEsMHg0OCwweDAwLDB4ODMsMHgwNCwweDIyLDB4YzAsMHgwYiwweDEwLDB4MDIsMHhjZCwweDgwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4ZGI0MCwgMCwgezB4MmUsMHhjMCwweDA4LDB4MWMsMHgwMiwweDI0LDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzQsMHgxMiwweDBlLDB4NDAgfX0sCisgezE2LCAweGRiNTAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDEyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYjYwLCAwLCB7MHhhMCwweDAxLDB4MTEsMHgwMCwweGI3LDB4MDAsMHgyZiwweGMwLDB4MDgsMHg3MCwweGEyLDB4NGUsMHgwMCwweDhmLDB4YjAsMHgyMSB9fSwKKyB7MTYsIDB4ZGI3MCwgMCwgezB4Y2MsMHgwYiwweDYwLDB4MTIsMHhkYywweDEwLDB4YjcsMHgzMCwweDJkLDB4YzAsMHgwOCwweGQwLDB4ODIsMHgxNCwweDgwLDB4YjcgfX0sCisgezE2LCAweGRiODAsIDAsIHsweDEyLDB4MjUsMHhjOCwweDI4LDB4NjAsMHgwMiwweDE0LDB4MDAsMHg4NywweGIyLDB4MjEsMHhjYywweDBiLDB4MzEsMHgwMiwweGE4IH19LAorIHsxNiwgMHhkYjkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhmNywweDgwLDB4M2QsMHhlMCB9fSwKKyB7MTYsIDB4ZGJhMCwgMCwgezB4MGMsMHgzOCwweDAzLDB4NTYsMHgwMCwweGM3LDB4OTAsMHhiMSwweGU0LDB4MGYsMHg3OCwweDAzLDB4ZGUsMHgwMCwweGY3LDB4OTAgfX0sCisgezE2LCAweGRiYjAsIDAsIHsweDFmLDB4NjAsMHgyYywweDQ4LDB4MGIsMHgxNiwweGEwLDB4ZjcsMHg4MCwweDNjLDB4ZjQsMHgwYywweDM4LDB4MDMsMHgxZSwweDAwIH19LAorIHsxNiwgMHhkYmMwLCAwLCB7MHhjZiwweGEwLDB4YjEsMHhlOCwweDBmLDB4N2IsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGJkMCwgMCwgezB4MDgsMHgwZCwweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBiLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmMywweDIxLDB4M2UgfX0sCisgezE2LCAweGRiZTAsIDAsIHsweGM4LDB4MDcsMHhiMCwweDAyLDB4ZTQsMHgwMCwweGZiLDB4MjAsMHgzZiwweDQwLDB4MGYsMHg4MCwweDAzLDB4ZTQsMHg4MCwweGZiIH19LAorIHsxNiwgMHhkYmYwLCAwLCB7MHgwMCwweDM2LDB4ZDAsMHgwZiwweGEwLDB4MDMsMHhlMCwweDA4LDB4ZmIsMHg0MiwweDNlLDB4ZDgsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZGMwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmMCwweDgwLDB4Y2YsMHg4MCwweDMxLDB4ZTEgfX0sCisgezE2LCAweGRjMTAsIDAsIHsweDBjLDB4ZjgsMHgwMywweGRhLDB4MTAsMHhlZiwweDgwLDB4M2YsMHhlNCwweDBmLDB4ZDgsMHgwMywweGZlLDB4MTAsMHhmZiwweDgyIH19LAorIHsxNiwgMHhkYzIwLCAwLCB7MHgzZiwweGUwLDB4NGMsMHhkOCwweDFiLDB4MTYsMHgyMCwweGNmLDB4ODAsMHgzZiwweGUwLDB4NGMsMHhkOCwweDMwLDB4ZWUsMHg0MCB9fSwKKyB7MTYsIDB4ZGMzMCwgMCwgezB4ZmYsMHhjMCwweGIzLDB4ZjQsMHgwZiwweGY4LDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjNDAsIDAsIHsweGE4LDB4MDEsMHg5OCwweDIwLDB4ODMsMHg0MCwweDIxLDB4YzAsMHgwOCwweDcxLDB4MDIsMHhkYywweDg0LDB4ODcsMHgyMCwweDJkIH19LAorIHsxNiwgMHhkYzUwLCAwLCB7MHhjMCwweDBiLDB4NjAsMHgwMiwweGQ5LDB4NjAsMHhmNywweDAwLDB4MmQsMHhjMCwweDA4LDB4ZjAsMHg4MiwweDE0LDB4MDQsMHg4NyB9fSwKKyB7MTYsIDB4ZGM2MCwgMCwgezB4MDAsMHgyZCwweGMwLDB4MDgsMHhmMCwweDAzLDB4MWUsMHgwMCwweGI3LDB4MjAsMHgyMSwweGMwLDB4OGIsMHg3MCwweDAyLDB4ZWEgfX0sCisgezE2LCAweGRjNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjAsMHgwMCwweDg3LDB4MDAsMHgyMSwweDgwIH19LAorIHsxNiwgMHhkYzgwLCAwLCB7MHgwOCwweDcwLDB4MDIsMHhmNSwweDA0LDB4MjcsMHgwMCwweDJkLDB4YzAsMHg4YiwweDcwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgwMCB9fSwKKyB7MTYsIDB4ZGM5MCwgMCwgezB4MmMsMHg1MCwweDA4LDB4NDAsMHgwMiwweDE0LDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDA4LDB4NTAsMHgwMiwweDVjLDB4MDQgfX0sCisgezE2LCAweGRjYTAsIDAsIHsweGI3LDB4MDAsMHhhMSwweGMwLDB4OGIsMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkY2IwLCAwLCB7MHgyMCwweDE0LDB4YzgsMHgwMCwweDgwLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgzMCwweDAyLDB4Y2UsMHgwMCwweDgzLDB4YzAsMHgyYyB9fSwKKyB7MTYsIDB4ZGNjMCwgMCwgezB4ZDAsMHg0YiwweDMwLDB4MDIsMHhjZSwweDAwLDB4YWIsMHgwMiwweDJjLDB4NDAsMHg0OCwweGJjLDB4MDIsMHgwNCwweDAwLDB4ODMgfX0sCisgezE2LCAweGRjZDAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDA4LDB4MTAsMHgwMiwweDAwLDB4MDgsMHhiMywweDAwLDB4MjAsMHhjMCwweDA5LDB4MzAsMHgwMiwweGM4IH19LAorIHsxNiwgMHhkY2UwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweDgzLDB4NDAsMHhjOCwweDAwLDB4MzAsMHhjMCB9fSwKKyB7MTYsIDB4ZGNmMCwgMCwgezB4MmMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGVmLDB4ODgsMHgzZiwweGU2LDB4MDcsMHhiMSwweDgzLDB4ZTEsMHgwMCwweGJmLDB4MDAgfX0sCisgezE2LCAweGRkMDAsIDAsIHsweDNlLDB4ZTAsMHgwYywweGI4LDB4MDMsMHgzNCwweDAwLDB4Y2YsMHgwMCwweDNmLDB4YzAsMHgyYywweGIwLDB4MDMsMHg2OCwweDEwIH19LAorIHsxNiwgMHhkZDEwLCAwLCB7MHhmZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGQyMCwgMCwgezB4ODAsMHgwMCwweGU0LDB4MDAsMHhmMSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGVkLDB4NDAsMHhmYiwweDA4LDB4M2UgfX0sCisgezE2LCAweGRkMzAsIDAsIHsweGMwLDB4MGYsMHhhMCwweDAzLDB4ZTUsMHgyMCwweGZiLDB4MDAsMHgzZSwweGUwLDB4MGQsMHhiMCwweDgzLDB4ZTQsMHgwMCwweGYzIH19LAorIHsxNiwgMHhkZDQwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhjNCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweDMwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4ZGQ1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4Y2EsMHgwMCwweDMzLDB4ZTAgfX0sCisgezE2LCAweGRkNjAsIDAsIHsweDRlLDB4ZjAsMHgwMywweDM0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4ZTgsMHgwMywweGYwLDB4MDAsMHhmZiwweDAwIH19LAorIHsxNiwgMHhkZDcwLCAwLCB7MHhiMSwweDQwLDB4MGMsMHhlMCwweDAzLDB4MzQsMHgwMCwweGVmLDB4MDAsMHhiMywweGMwLDB4MGMsMHhmMCwweDAzLDB4MzgsMHgwMCB9fSwKKyB7MTYsIDB4ZGQ4MCwgMCwgezB4Y2YsMHgwMCwweDNkLDB4YzAsMHgwYSwweGYwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRkOTAsIDAsIHsweDgxLDB4MDQsMHg2MiwweDIyLDB4ODgsMHg5MCwweDIyLDB4ZTAsMHgwOCwweDNjLDB4MDIsMHgyZSwweDA4LDB4YmIsMHgwMSwweDJlIH19LAorIHsxNiwgMHhkZGEwLCAwLCB7MHhjMCwweDBiLDB4YTAsMHgwMiwweDY2LDB4MDAsMHhiYiwweDAwLDB4MjIsMHhhMCwweDA4LDB4YTksMHgwMiwweDI0LDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4ZGRiMCwgMCwgezB4MDAsMHgyMiwweGMwLDB4MjgsMHgyYywweDAyLDB4YTIsMHgwMCwweGRiLDB4MDAsMHgyZSwweGMwLDB4MGEsMHhiMCwweDAyLDB4YTAgfX0sCisgezE2LCAweGRkYzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjIsMHgwMCwweDk4LDB4MDAsMHgyMiwweGM4IH19LAorIHsxNiwgMHhkZGQwLCAwLCB7MHgwYSwweDk4LDB4MDIsMHgyNywweDA0LDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIxLDB4MDIsMHhlMiwweDAwLDB4YmIsMHgwMCB9fSwKKyB7MTYsIDB4ZGRlMCwgMCwgezB4MjIsMHhlMiwweDA4LDB4YjAsMHgwMiwweGE0LDB4MDAsMHhhYiwweDAwLDB4MjAsMHhjMCwweDBhLDB4ODgsMHg4MiwweDIzLDB4MDAgfX0sCisgezE2LCAweGRkZjAsIDAsIHsweDhiLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTAwLCAwLCB7MHgwOCwweDE0LDB4MDQsMHgwMCwweDkxLDB4NDAsMHgyMiwweGMwLDB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4ZGUxMCwgMCwgezB4YzAsMHg0YiwweDI4LDB4MjIsMHg0MCwweDA0LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgyOCwweDMwLDB4MGEsMHgwNCwweDA0LDB4YjMgfX0sCisgezE2LCAweGRlMjAsIDAsIHsweDAwLDB4NjAsMHhjMCwweDA4LDB4MDAsMHgwMiwweDg0LDB4MjAsMHg5MywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzAsMHgwMiwweDgyIH19LAorIHsxNiwgMHhkZTMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDYwLDB4MDAsMHhkYSwweDQwLDB4YjIsMHg4MCB9fSwKKyB7MTYsIDB4ZGU0MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhhMCwweDAzLDB4ZTAsMHgwOSwweGZmLDB4MDAgfX0sCisgezE2LCAweGRlNTAsIDAsIHsweDMyLDB4NDAsMHgwOCwweGEwLDB4MGIsMHgzNCwweDAwLDB4ZWIsMHgwMCwweDMxLDB4YzAsMHgwYywweDgwLDB4MDMsMHgyOCwweDgwIH19LAorIHsxNiwgMHhkZTYwLCAwLCB7MHhjNywweDAwLDB4M2YsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGU3MCwgMCwgezB4YTAsMHgxNSwweGQwLDB4MDAsMHhlYywweDIwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwYiwweGZjLDB4MTAsMHhmZiwweDAxLDB4M2YgfX0sCisgezE2LCAweGRlODAsIDAsIHsweGMwLDB4MGYsMHhlMCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZjQsMHgwMCwweGZmIH19LAorIHsxNiwgMHhkZTkwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg0ZiwweGMwLDB4MDEsMHhmMCwweDA4LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZGVhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4Y2MsMHg5MCwweDM3LDB4MjAgfX0sCisgezE2LCAweGRlYjAsIDAsIHsweDBlLDB4ZjAsMHgxMywweGJkLDB4MDQsMHhkNCwweGMxLDB4MzMsMHgyYywweDRjLDB4ZDksMHgyMywweDMyLDB4NjAsMHhmZiwweDIwIH19LAorIHsxNiwgMHhkZWMwLCAwLCB7MHgzZCwweGUwLDB4NGYsMHhjMSwweDAzLDB4YjYsMHg0MCwweGNkLDB4MDAsMHgzNywweGUwLDB4MGMsMHhlMiwweDhiLDB4MTAsMHhjMCB9fSwKKyB7MTYsIDB4ZGVkMCwgMCwgezB4Y2QsMHgwMCwweDMzLDB4YzYsMHgwZiwweGQ4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlZTAsIDAsIHsweDgwLDB4MTAsMHhlZSwweDA4LDB4OGEsMHgyMCwweDIyLDB4MDAsMHgwOCwweGI3LDB4MDIsMHgyZCwweDAwLDB4OGEsMHgwMCwweGI2IH19LAorIHsxNiwgMHhkZWYwLCAwLCB7MHgzYywweDA4LDB4OTksMHgwMiwweDI3LDB4ODQsMHhiZiwweDY4LDB4MmUsMHg4MiwweDBiLDB4MDEsMHgwMiwweDI0LDB4NDAsMHhkOSB9fSwKKyB7MTYsIDB4ZGYwMCwgMCwgezB4NDIsMHgyMCwweGMwLDB4OGEsMHhhYywweDAyLDB4MmQsMHhjMiwweDgyLDB4NDgsMHhhMiwweGQwLDB4MGIsMHg4MiwweDAyLDB4MjAgfX0sCisgezE2LCAweGRmMTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDg4LDB4MDQsMHgyNiwweDgwIH19LAorIHsxNiwgMHhkZjIwLCAwLCB7MHgyYSwweDMwLDB4YzIsMHhhNSwweDgwLDB4YTksMHgyMSwweDI4LDB4MDAsMHg4YSwweDAwLDB4MDIsMHgwMCwweDAwLDB4YTMsMHgxMCB9fSwKKyB7MTYsIDB4ZGYzMCwgMCwgezB4MmMsMHhjOCwweDBiLDB4MDAsMHgwMiwweGM0LDB4OTAsMHg4MywweDQyLDB4MjQsMHhjMSwweDA4LDB4MDAsMHgwMiwweDQwLDB4ODggfX0sCisgezE2LCAweGRmNDAsIDAsIHsweGEzLDB4NjAsMHhhOCwweGMwLDB4MGIsMHgwMCwweGMyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZjUwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgwNiwweDhhLDB4MDAsMHgyMiwweGUwLDB4NDgsMHhiMCwweDAyLDB4MmUsMHgwMiwweGFiLDB4ODAsMHgyZSB9fSwKKyB7MTYsIDB4ZGY2MCwgMCwgezB4MjAsMHg0YSwweDhjLDB4MDIsMHgyNiwweDIwLDB4YmIsMHgwMCwweDZlLDB4ODAsMHgwYiwweDMwLDB4YzIsMHg0NiwweDA0LDB4OWIgfX0sCisgezE2LCAweGRmNzAsIDAsIHsweDBhLDB4YTIsMHhjMCwweDBhLDB4ODAsMHgxMiwweDZjLDB4NDAsMHhhOCwweDAwLDB4MmEsMHhjMCwweDBiLDB4OGMsMHgwMiwweDMwIH19LAorIHsxNiwgMHhkZjgwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhjMSwweDA5LDB4MzYsMHg2MSB9fSwKKyB7MTYsIDB4ZGY5MCwgMCwgezB4MGUsMHgzMiwweDAzLDB4YWIsMHgyMCwweGY4LDB4ODQsMHgzYSwweDc4LDB4MmUsMHg5OCwweDAzLDB4MjYsMHgwMCwweGViLDB4MDAgfX0sCisgezE2LCAweGRmYTAsIDAsIHsweDNlLDB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlMiwweDAwLDB4YzksMHg0MCwweDM2LDB4ZTAsMHgwYywweGI0LDB4MDMsMHg2ZSwweDAwIH19LAorIHsxNiwgMHhkZmIwLCAwLCB7MHhlYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4ODgsMHgwMywweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGZjMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZmEsMHgxMywweGY4LDB4MTAsMHhkYywweDA0LDB4MjcgfX0sCisgezE2LCAweGRmZDAsIDAsIHsweDQwLDB4MGQsMHg1MCwweDQzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkOSwweDAzLDB4YjAsMHgwMCwweGY5IH19LAorIHsxNiwgMHhkZmUwLCAwLCB7MHgwMSwweDNmLDB4ZjAsMHgwZiwweGYwLDB4MjMsMHhiMiwweDAwLDB4ZDQsMHhhMCwweDM3LDB4YzAsMHgwZiwweGMwLDB4MGIsMHhmOCB9fSwKKyB7MTYsIDB4ZGZmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDIwLDB4ZWIsMHgxMCwweGYyLDB4MDAgfX0sCisgezE2LCAweGUwMDAsIDAsIHsweDBlLDB4YjQsMHgwMywweDIxLDB4ODAsMHhjOSwweDQwLDB4M2EsMHg0OCwweDBmLDB4OTAsMHgxMywweGUxLDB4MjAsMHhmYiwweDAwIH19LAorIHsxNiwgMHhlMDEwLCAwLCB7MHgzZSwweGMwLDB4MGMsMHg4NCwweDAzLDB4MjQsMHgwMCwweGZiLDB4MDEsMHgzNiwweGUwLDB4MGMsMHg3NCwweDBiLDB4OWMsMHgwMCB9fSwKKyB7MTYsIDB4ZTAyMCwgMCwgezB4Y2YsMHgwMCwweDMyLDB4ZTAsMHgwZiwweDg0LDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwMzAsIDAsIHsweGM4LDB4MDUsMHgxZSwweDAwLDB4OGIsMHg4MCwweDIwLDB4NDAsMHgwOCwweGI4LDB4MDIsMHg4MywweDgwLDB4ODEsMHhhMCwweDIyIH19LAorIHsxNiwgMHhlMDQwLCAwLCB7MHg3OCwweDBiLDB4OTEsMHg4MywweGUzLDB4MDAsMHhiZiwweDAwLDB4MGUsMHhjMSwweDBhLDB4YjQsMHgwMywweDY0LDB4MDQsMHhiOSB9fSwKKyB7MTYsIDB4ZTA1MCwgMCwgezB4NTAsMHgzMiwweGMwLDB4MGEsMHhiMiwweDAyLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMywweGQ0LDB4MGIsMHg4OCwweDAyLDB4ZjIgfX0sCisgezE2LCAweGUwNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHg0MiwweGEwLDB4ODAsMHgyMCwweDAwIH19LAorIHsxNiwgMHhlMDcwLCAwLCB7MHg0OCwweDAwLDB4MDIsMHgwZCwweDA2LDB4ODAsMHg4MCwweDJhLDB4ZDAsMHgwMywweDAwLDB4MDIsMHhjOCwweDAwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4ZTA4MCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MzYsMHgwMiwweDQwLDB4MDAsMHhiOSwweDAyLDB4MjIsMHhjMiwweDhiLDB4MjYsMHgwMiwweDBjLDB4MTAgfX0sCisgezE2LCAweGUwOTAsIDAsIHsweDAxLDB4MDIsMHgyNCwweGMwLDB4NGIsMHhhMSwweDAyLDB4ZjgsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGEwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwOCwweDhlLDB4ODAsMHgyMSwweDIxLDB4MDgsMHgyOCwweGMyLDB4OWUsMHgwMCwweDhlLDB4ODAsMHgyMSB9fSwKKyB7MTYsIDB4ZTBiMCwgMCwgezB4NjAsMHgwYiwweDc4LDB4MDIsMHg5ZSwweDIwLDB4YjcsMHg4MiwweDJmLDB4YTEsMHgwYSwweDc4LDB4MDIsMHg1ZSwweDAwLDB4YjUgfX0sCisgezE2LCAweGUwYzAsIDAsIHsweDkxLDB4YTEsMHhlMCwweDBiLDB4MjksMHgwMiwweDMyLDB4NDQsMHg4NiwweDgwLDB4YTUsMHhlMCwweDBiLDB4NGMsMHgwMiwweGM4IH19LAorIHsxNiwgMHhlMGQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhlMSwweDAwLDB4MjIsMHg4MCB9fSwKKyB7MTYsIDB4ZTBlMCwgMCwgezB4MGUsMHgwMCwweDBiLDB4MjQsMHgwMCwweGMwLDB4NDQsMHgyOCwweGFkLDB4MGYsMHgyMCwweDAyLDB4YzgsMHgwMCwweGYzLDB4MDAgfX0sCisgezE2LCAweGUwZjAsIDAsIHsweDFjLDB4YzAsMHgwYywweDAxLDB4MDMsMHg0OCwweDRjLDB4ZjIsMHgwNCwweDMwLDB4YzAsMHgwZiwweDE1LDB4MDMsMHg4MCwweDQwIH19LAorIHsxNiwgMHhlMTAwLCAwLCB7MHhjMSwweDAwLDB4MTQsMHhjOCwweDBmLDB4MDAsMHgwMywweGRhLDB4MDIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTExMCwgMCwgezB4NDAsMHgxZCwweDljLDB4NDAsMHhmNywweDAwLDB4M2YsMHhjMCwweDhmLDB4YzAsMHgwMywweGU0LDB4MDAsMHhmYSwweDAxLDB4M2YgfX0sCisgezE2LCAweGUxMjAsIDAsIHsweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwOCwweGZiLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhmMCwweDAxLDB4ZmMsMHgxMCwweGZmIH19LAorIHsxNiwgMHhlMTMwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZSwweGQxLDB4MDMsMHhmYywweDQyLDB4ZmUsMHg4MCwweDNiLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZTE0MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDQwLDB4YzgsMHgwMCwweDNlLDB4YzAgfX0sCisgezE2LCAweGUxNTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGVlLDB4MDgsMHhjYiwweDAwLDB4MzIsMHhjMCwweDBmLDB4YTAsMHgyMywweGU2LDB4MDMsMHhjYiwweDRjIH19LAorIHsxNiwgMHhlMTYwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHhiMCwweDA3LDB4ZTgsMHgwMCwweGY5LDB4MDAsMHgxNiwweDQwLDB4MGMsMHhhMCwweDBiLDB4NmMsMHgwMCB9fSwKKyB7MTYsIDB4ZTE3MCwgMCwgezB4Y2YsMHgwMiwweDMyLDB4YzUsMHgwYywweDgwLDB4MDMsMHgwMiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxODAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDgwLDB4ODQsMHgwNCwweDJkLDB4YzEsMHgwYiwweDQwLDB4NDAsMHhkYywweDAwLDB4ODcsMHgwNCwweDIxIH19LAorIHsxNiwgMHhlMTkwLCAwLCB7MHhjMCwweDRiLDB4NzAsMHgxMiwweGZjLDB4MDEsMHg4ZiwweDYwLDB4MjksMHg0MCwweDBiLDB4NzAsMHgxMywweDljLDB4MDAsMHhiNSB9fSwKKyB7MTYsIDB4ZTFhMCwgMCwgezB4MDAsMHhhMywweDQwLDB4MGEsMHg2MCwweDAyLDB4MDAsMHgwMCwweDg0LDB4MDAsMHgyMSwweGMwLDB4MDgsMHg0MCwweDAyLDB4MTIgfX0sCisgezE2LCAweGUxYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDg3LDB4ODAsMHgyZCwweGEyIH19LAorIHsxNiwgMHhlMWMwLCAwLCB7MHgwYiwweDRjLDB4MTYsMHhkNiwweDA4LDB4OTcsMHg4OCwweDIxLDB4YTAsMHg0YiwweDY4LDB4MDIsMHhkZSwweDA0LDB4YTcsMHg4MCB9fSwKKyB7MTYsIDB4ZTFkMCwgMCwgezB4MjEsMHhlMCwweDBiLDB4NDgsMHgwMiwweGRhLDB4MDQsMHhiNiwweDgyLDB4MjUsMHg2MCwweDBhLDB4ZTgsMHg2MiwweDFlLDB4MDAgfX0sCisgezE2LCAweGUxZTAsIDAsIHsweDg3LDB4ODAsMHgyMCwweGU4LDB4MDgsMHg0OCwweDAyLDB4MDgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDhiLDB4ODAsMHg2YywweGYwLDB4MGIsMHgzYywweDAyLDB4Y2UsMHg0NiwweDliLDB4YzAsMHgyMCB9fSwKKyB7MTYsIDB4ZTIwMCwgMCwgezB4ZTQsMHgwYiwweDNjLDB4MDIsMHhjYywweDIwLDB4YTMsMHgwMCwweDI4LDB4ZTAsMHgwYiwweDMwLDB4MDIsMHg4ZCwweDgwLDB4YjEgfX0sCisgezE2LCAweGUyMTAsIDAsIHsweDgwLDB4MjIsMHg0NCwweDBhLDB4MjEsMHgwYSwweDAzLDB4ODIsMHg4MCwweDgwLDB4YTAsMHhjMCwweDA4LDB4MDYsMHgwYSwweDEyIH19LAorIHsxNiwgMHhlMjIwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDIsMHhjZSwweDgwLDB4M2YsMHhhMCB9fSwKKyB7MTYsIDB4ZTIzMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4ZmEsMHg0MCwweGRlLDB4YzAsMHhiMywweDkwLDB4MGYsMHhlYSwweDEzLDB4ZjksMHgwOCwweGVhLDB4MDQgfX0sCisgezE2LCAweGUyNDAsIDAsIHsweDMzLDB4ODIsMHg4ZiwweGU0LDB4MDMsMHhmYiwweDA4LDB4ZmUsMHhhMCwweDM2LDB4YTAsMHgwYywweGFjLDB4MGIsMHg2YiwweDgyIH19LAorIHsxNiwgMHhlMjUwLCAwLCB7MHhjNiwweGEwLDB4MzIsMHg4MCwweDJjLDB4ZTQsMHgwMywweDNhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDkwLDB4M2UsMHgwMiwweDBmLDB4ODAsMHg4MywweGUxLDB4MDAsMHhlOCwweDIwLDB4M2UgfX0sCisgezE2LCAweGUyNzAsIDAsIHsweDAzLDB4MGYsMHg4MiwweDAzLDB4ZTEsMHg0MCwweGQ4LDB4MDAsMHgzZSwweDIwLDB4MGYsMHgwMCwweDkzLDB4YTAsMHg0MCwweGY4IH19LAorIHsxNiwgMHhlMjgwLCAwLCB7MHgwMCwweDNlLDB4MTAsMHg4ZiwweDA4LDB4MGIsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ZTI5MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZTksMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweGUyYTAsIDAsIHsweDBmLDB4OTQsMHgwNywweGU2LDB4MDAsMHhmOSwweDgwLDB4YjAsMHg0MCwweDBjLDB4OTQsMHgwMywweGU0LDB4NDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHhlMmIwLCAwLCB7MHgzMiwweDQwLDB4MGYsMHg5NCwweDBiLDB4YTQsMHgwMCwweDcxLDB4YzAsMHgzMiwweDQwLDB4MmMsMHg5NCwweDIzLDB4MjQsMHgwMiB9fSwKKyB7MTYsIDB4ZTJjMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyZDAsIDAsIHsweDgwLDB4MDQsMHg0NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDk4LDB4MDIsMHhlNiwweDYwLDB4YjksMHgwMCwweDIyIH19LAorIHsxNiwgMHhlMmUwLCAwLCB7MHg2MCwweDBhLDB4OWMsMHgwMiwweGU2LDB4MjQsMHhiOSwweDA0LDB4MzYsMHg0MCwweDBiLDB4OTgsMHgwMCwweDI0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZTJmMCwgMCwgezB4ODAsMHhhMiwweDUyLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4NDAsMHgyMiwweDQwLDB4NjgsMHg5NCwweDAyLDB4MjAgfX0sCisgezE2LCAweGUzMDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyNiwweDQwIH19LAorIHsxNiwgMHhlMzEwLCAwLCB7MHgwMywweDk0LDB4MDIsMHhlNCwweDAxLDB4YjksMHgxMCwweDIyLDB4NTUsMHgwOCwweDkwLDB4MjIsMHhlNCwweDAwLDB4YjEsMHgwMCB9fSwKKyB7MTYsIDB4ZTMyMCwgMCwgezB4MjYsMHg0MCwweDBiLDB4OTAsMHgwMCwweDJjLDB4MDksMHhiOSwweDAwLDB4MjIsMHg2MCwweDA4LDB4OTAsMHgwYSwweDFjLDB4MDQgfX0sCisgezE2LCAweGUzMzAsIDAsIHsweDhkLDB4MDgsMHhhMCwweDQwLDB4MDgsMHgxMCwweDgyLDB4MGUsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzQwLCAwLCB7MHgwOCwweDA0LDB4MDYsMHgwMCwweDgxLDB4MDAsMHgyMCwweDUwLDB4MGIsMHgxMiwweDQyLDB4YzQsMHg4MCwweGIxLDB4MDQsMHgyMCB9fSwKKyB7MTYsIDB4ZTM1MCwgMCwgezB4NTAsMHgwYSwweDE0LDB4MDIsMHhjNSwweDAwLDB4YjEsMHgyMiwweDI0LDB4NDAsMHgwYiwweDEyLDB4MjIsMHgwNCwweDAxLDB4YjEgfX0sCisgezE2LCAweGUzNjAsIDAsIHsweDQwLDB4MjAsMHg1MCwweDA4LDB4MTAsMHgwYSwweDE1LDB4MDAsMHg4NSwweDQwLDB4MjgsMHg1MCwweDA4LDB4MTQsMHgwYSwweDBhIH19LAorIHsxNiwgMHhlMzcwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhlOCwweDUwLDB4MzYsMHgwMCB9fSwKKyB7MTYsIDB4ZTM4MCwgMCwgezB4MGYsMHg4NSwweDAyLDB4ZTEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwLDB4MGMsMHhhMCwweDIzLDB4ZTAsMHgxMCwweGY4LDB4NTAgfX0sCisgezE2LCAweGUzOTAsIDAsIHsweGIyLDB4MTQsMHgwZiwweGE1LDB4MDMsMHhhMSwweDQ4LDB4ZmEsMHgwMCwweGIyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDA0IH19LAorIHsxNiwgMHhlM2EwLCAwLCB7MHhjNCwweDAyLDB4MzIsMHgwMCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNiMCwgMCwgezB4OTgsMHgxZCwweGU1LDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDEsMHgwMywweGQ0LDB4NDQsMHhmNSwweDAwLDB4M2YgfX0sCisgezE2LCAweGUzYzAsIDAsIHsweDUxLDB4MGYsMHhkNCwweDAzLDB4ZjUsMHgwMCwweGY5LDB4MTAsMHgzYiwweDQwLDB4MGYsMHhkMSwweDAwLDB4ZjUsMHgxMCwweGY1IH19LAorIHsxNiwgMHhlM2QwLCAwLCB7MHg0MCwweDdmLDB4NDAsMHgwZiwweDU0LDB4MmIsMHhlNSwweDAwLDB4ZjksMHg0MCwweDM2LDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4ZTNlMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDEwLDB4YmQsMHg0MCwweDMzLDB4NDAgfX0sCisgezE2LCAweGUzZjAsIDAsIHsweDBmLDB4ZGEsMHgwMywweDM3LDB4ODAsMHhjZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhlOSwweGEwIH19LAorIHsxNiwgMHhlNDAwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHhkZSwweDE3LDB4YTQsMHgwOCwweGZkLDB4YzAsMHgzMywweDQxLDB4OGQsMHhkYSwweDEzLDB4MjYsMHhhMCB9fSwKKyB7MTYsIDB4ZTQxMCwgMCwgezB4ZjksMHhhOCwweDMyLDB4NzgsMHgwYywweGI0LDB4MGIsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0MjAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHhhMCwweDM2LDB4MjAsMHgwYiwweDhhLDB4ODIsMHhhMiwweDgwLDB4MmEsMHhhOCwweDJlIH19LAorIHsxNiwgMHhlNDMwLCAwLCB7MHgwMCwweDBiLDB4ODAsMHgxMiwweGUwLDB4MDQsMHhiOCwweGExLDB4MmUsMHgyOCwweDRhLDB4OGUsMHgwMiwweDJhLDB4YTAsMHhiYSB9fSwKKyB7MTYsIDB4ZTQ0MCwgMCwgezB4YzAsMHgyMiwweDI4LDB4MDgsMHg4NSwweDAyLDB4MjEsMHgwOCwweGI4LDB4ZTgsMHhhMiwweDNjLDB4MDgsMHhjOCwweDAyLDB4MGUgfX0sCisgezE2LCAweGU0NTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGI5LDB4MDAsMHgyMCwweDRhIH19LAorIHsxNiwgMHhlNDYwLCAwLCB7MHgwYiwweDE0LDB4MDIsMHgwNSwweDgwLDB4MDEsMHgwMCwweDJjLDB4NDEsMHgwYiwweDEwLDB4MDIsMHhjNCwweDA0LDB4YTEsMHg0YSB9fSwKKyB7MTYsIDB4ZTQ3MCwgMCwgezB4MmUsMHg0MiwweDA4LDB4MTQsMHgwMiwweDg0LDB4MTAsMHhiMSwweDYwLDB4YTAsMHg0YSwweDA5LDB4MTAsMHgwMiwweDQ0LDB4MDAgfX0sCisgezE2LCAweGU0ODAsIDAsIHsweGI1LDB4MDEsMHgyOSwweDQwLDB4MTgsMHhkMiwweDAyLDB4MTIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MjEsMHgyNiwweDQwLDB4MGIsMHg5NiwweDAyLDB4YTQsMHgxMCwweGE5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ZTRhMCwgMCwgezB4NDAsMHgwYiwweDk2LDB4MTIsMHhlNCwweDIwLDB4YjksMHgwMCwweDJlLDB4NDEsMHgwYSwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjkgfX0sCisgezE2LCAweGU0YjAsIDAsIHsweDAwLDB4MjIsMHg0MSwweDA4LDB4OTgsMHgyMiwweDY0LDB4MDAsMHhiOSwweDIwLDB4MmIsMHg0MSwweDI4LDB4ZDQsMHgwMiwweDA2IH19LAorIHsxNiwgMHhlNGMwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxMSwweGU0LDB4MDAsMHhmOSwweGUwLDB4MzIsMHg1OCB9fSwKKyB7MTYsIDB4ZTRkMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4MjYsMHg0MCwweGM5LDB4NDAsMHgzZSwweDU4LDB4MGYsMHg5YywweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAgfX0sCisgezE2LCAweGU0ZTAsIDAsIHsweDZlLDB4NDAsMHgwYywweDlhLDB4MDIsMHhhNiwweDAwLDB4ZjksMHg0NCwweDMyLDB4NDAsMHgwZCwweDlhLDB4MGIsMHg2NCwweDg0IH19LAorIHsxNiwgMHhlNGYwLCAwLCB7MHhmOSwweDAwLDB4YmEsMHg0MCwweDBjLDB4MTgsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTUwMCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg1MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhmOSwweDA0LDB4M2UgfX0sCisgezE2LCAweGU1MTAsIDAsIHsweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDY1LDB4MGYsMHg5OSwweDgxLDB4ZTQsMHg1MCwweGY5IH19LAorIHsxNiwgMHhlNTIwLCAwLCB7MHgyMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhhNCwweDgwLDB4ZjksMHgwMCwweDM0LDB4NDAsMHgwZiwweDkyLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ZTUzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MTAgfX0sCisgezE2LCAweGU1NDAsIDAsIHsweDBlLDB4ODQsMHgwMywweDYwLDB4MDgsMHhjOCwweDAwLDB4M2UsMHgwOCwweDBmLDB4ODAsMHg4MywweGUwLDB4MjgsMHhlOCwweDA0IH19LAorIHsxNiwgMHhlNTUwLCAwLCB7MHgzZSwweDAwLDB4MGMsMHg4NCwweDAzLDB4MjEsMHgxYywweGYwLDB4NDgsMHgzMiwweDAwLDB4MGIsMHgwMCwweDAzLDB4ZTAsMHgwMiB9fSwKKyB7MTYsIDB4ZTU2MCwgMCwgezB4YzAsMHgwMCwweDMyLDB4MDAsMHgwYywweGMwLDB4MGIsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1NzAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4YjIsMHg4OCwweDJlLDB4ODAsMHgwOCwweGUwLDB4MDMsMHg3YSwweDgwLDB4OGUsMHgwMCwweDJmIH19LAorIHsxNiwgMHhlNTgwLCAwLCB7MHhhMCwweDBiLDB4ZTgsMHgwMiwweGY5LDB4MTAsMHhiYSwweDAwLDB4MmMsMHg4MCwweDI4LDB4ZTQsMHgwMiwweDI4LDB4MDAsMHhiZSB9fSwKKyB7MTYsIDB4ZTU5MCwgMCwgezB4NDAsMHgyMywweGI4LDB4MDgsMHhlOCwweDAyLDB4ZTgsMHgwNCwweGNhLDB4MjAsMHhhMiwweDgwLDB4MDgsMHhlOCwweDAyLDB4MGEgfX0sCisgezE2LCAweGU1YTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMSwweGIzLDB4MDAsMHgyYywweDQwIH19LAorIHsxNiwgMHhlNWIwLCAwLCB7MHgwOCwweGI4LDB4NDIsMHg2YywweDAyLDB4ODMsMHgwMCwweDJjLDB4ZTAsMHgwYiwweDM4LDB4MDAsMHhjZiwweDQwLDB4YjMsMHgwMCB9fSwKKyB7MTYsIDB4ZTVjMCwgMCwgezB4MmMsMHhjMCwweDA4LDB4YjQsMHgwYSwweDBjLDB4MDAsMHhiMywweDQwLDB4YTIsMHg4MiwweDBhLDB4MzksMHgwMiwweGNjLDB4MDAgfX0sCisgezE2LCAweGU1ZDAsIDAsIHsweDkzLDB4ODAsMHhhMCwweGMwLDB4MjksMHgyMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWUwLCAwLCB7MHhhMCwweDAxLDB4MWQsMHgwMCwweGI3LDB4MDAsMHgyZCwweDY0LDB4MjgsMHg3NCwweDAyLDB4NDAsMHgwMCwweDg3LDB4MDUsMHgyZCB9fSwKKyB7MTYsIDB4ZTVmMCwgMCwgezB4OTAsMHgwYiwweDc0LDB4MDIsMHhkYywweDEwLDB4YjcsMHgzMCwweDJkLDB4YzgsMHgwOCwweDM0LDB4MDYsMHgxYywweDgwLDB4YjcgfX0sCisgezE2LCAweGU2MDAsIDAsIHsweDAwLDB4YTEsMHhjMCwweDBhLDB4NzAsMHgwMiwweGRlLDB4ODAsMHg4MywweDAwLDB4MDEsMHgwMCwweDA5LDB4NjAsMHg4MiwweDIwIH19LAorIHsxNiwgMHhlNjEwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFhLDB4MDAsMHhmNywweDgwLDB4M2QsMHg2MCB9fSwKKyB7MTYsIDB4ZTYyMCwgMCwgezB4MGUsMHhkOCwweDBiLDB4NWUsMHgwMCwweGM3LDB4ODAsMHgzZCwweGUwLDB4MGYsMHg2OCwweDAzLDB4ZGUsMHgxMCwweGY3LDB4YTkgfX0sCisgezE2LCAweGU2MzAsIDAsIHsweDdmLDB4ZTgsMHg0OCwweDc4LDB4MDMsMHgxZiwweDMwLDB4ZmYsMHg5NCwweDMzLDB4YTAsMHgwZSwweDc4LDB4MDMsMHhjZiwweDI0IH19LAorIHsxNiwgMHhlNjQwLCAwLCB7MHhkNiwweDgwLDB4YjEsMHhlMCwweDBkLDB4ZjgsMHg0MywweDIyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY1MCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhiYiwweDAwLDB4MGMsMHg0MCwweDBmLDB4YjAsMHgwMywweGVjLDB4MDgsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGU2NjAsIDAsIHsweDAwLDB4MGYsMHg5MCwweDQxLDB4ZWMsMHgwMCwweGZiLDB4NjEsMHg3ZSwweGQwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGZiIH19LAorIHsxNiwgMHhlNjcwLCAwLCB7MHg0MCwweDNmLDB4OWIsMHgwYywweGIwLDB4MDMsMHhlZCwweDkwLDB4ZmEsMHgwMCwweDNjLDB4MDAsMHgwZSwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZTY4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhkZSwweDAwLDB4ZWYsMHg4MCwweDMzLDB4NjAgfX0sCisgezE2LCAweGU2OTAsIDAsIHsweDBkLDB4ZDgsMHgwMywweDM2LDB4NDAsMHhlZiwweDkwLDB4M2UsMHhlMCwweDBmLDB4ZjksMHgwMywweGZlLDB4MDAsMHhmZiwweDgwIH19LAorIHsxNiwgMHhlNmEwLCAwLCB7MHgzMywweGZlLDB4MGMsMHhmYSwweDAzLDB4ZmUsMHgwMCwweGNmLDB4ODAsMHhiMywweGUwLDB4MGYsMHhmOCwweDAzLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4ZTZiMCwgMCwgezB4Y2QsMHg4MCwweDMzLDB4ZTAsMHgwZiwweGM4LDB4NDMsMHhjMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2YzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ODUsMHgwOCwweDM1LDB4NDAsMHgwOCwweDcwLDB4MDMsMHg1MiwweDIwLDB4ODcsMHgxMSwweDJjIH19LAorIHsxNiwgMHhlNmQwLCAwLCB7MHhlYywweDBiLDB4NzEsMHgwMiwweGQwLDB4MDAsMHhlNywweDAwLDB4MzUsMHhjNCwweDA4LDB4NzQsMHgwMiwweGRjLDB4NDAsMHg4NyB9fSwKKyB7MTYsIDB4ZTZlMCwgMCwgezB4MTAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZmMsMHg4MCwweDg1LDB4MDgsMHgyMSwweDAwLDB4MGIsMHg0MSwweDgyLDB4ZWEgfX0sCisgezE2LCAweGU2ZjAsIDAsIHsweDA2LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTgsMHgwMCwweGFmLDB4MDAsMHgyMywweDUwIH19LAorIHsxNiwgMHhlNzAwLCAwLCB7MHgwOSwweDUwLDB4MDIsMHgxYywweDgwLDB4YTcsMHgwMSwweDI5LDB4YzAsMHgxYiwweDYwLDB4MDYsMHhkYywweDQwLDB4YjcsMHgxMCB9fSwKKyB7MTYsIDB4ZTcxMCwgMCwgezB4MjEsMHhjOCwweDRhLDB4NTIsMHgwMiwweGRjLDB4MDAsMHg4MywweDAwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRjLDB4MTMgfX0sCisgezE2LCAweGU3MjAsIDAsIHsweDg0LDB4MDAsMHgyNSwweGMwLDB4MGIsMHg1OCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzMwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwMCwweDgxLDB4ODAsMHgyNCwweDQwLDB4MDgsMHgzZSwweDAyLDB4NmUsMHgwMCwweDg5LDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4ZTc0MCwgMCwgezB4YzAsMHgwYiwweGI0LDB4MDIsMHhjYSwweDgwLDB4YTMsMHgwMCwweDI0LDB4YzAsMHgwYSwweDA0LDB4MDIsMHhlYywweDQwLDB4ODIgfX0sCisgezE2LCAweGU3NTAsIDAsIHsweDBhLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNkLDB4MTAsMHg4MCwweGMwLDB4YTQsMHgwMCwweDBiLDB4MWMsMHgwMiwweGM4IH19LAorIHsxNiwgMHhlNzYwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweDg0LDB4MDAsMHhlYiwweDgwLDB4MzMsMHg0MCB9fSwKKyB7MTYsIDB4ZTc3MCwgMCwgezB4MGQsMHg4YywweDgzLDB4MjYsMHgwMCwweGU5LDB4YTAsMHgzZSwweDc4LDB4OGYsMHg5MCwweDgzLDB4ZTEsMHgwMCwweGZmLDB4MDAgfX0sCisgezE2LCAweGU3ODAsIDAsIHsweDMxLDB4ZDEsMHgwZSwweDg0LDB4MjMsMHhmYywweDAwLDB4Y2IsMHg4MiwweDMyLDB4YzAsMHg4ZiwweGIwLDB4MDIsMHhmZCwweDQwIH19LAorIHsxNiwgMHhlNzkwLCAwLCB7MHhjYiwweDgwLDB4YjYsMHhjMCwweDBmLDB4YTQsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdhMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YTAsMHgwMywweGUwLDB4MDAsMHhmOSwweDAxLDB4M2UgfX0sCisgezE2LCAweGU3YjAsIDAsIHsweDQyLDB4MGYsMHg5MCwweDAzLDB4ZTUsMHg1NCwweGUzLDB4MDAsMHgzZSwweGM4LDB4MDUsMHg5MywweDAzLDB4ZWMsMHg4MCwweGZiIH19LAorIHsxNiwgMHhlN2MwLCAwLCB7MHhjMSwweDNlLDB4YzAsMHgwZiwweDIwLDB4MDMsMHhjYywweDQ4LDB4ZjMsMHgwOCwweDNhLDB4MDAsMHgwZiwweGEwLDB4NDMsMHhlMCB9fSwKKyB7MTYsIDB4ZTdkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4Y2YsMHgwMCwweDNmLDB4NDAgfX0sCisgezE2LCAweGU3ZTAsIDAsIHsweDBmLDB4MzAsMHgwMSwweDJjLDB4MGEsMHhjZCwweDEwLDB4MzMsMHgwMCwweDBmLDB4ZDAsMHg4MywweDE0LDB4MDAsMHhjYiwweDAyIH19LAorIHsxNiwgMHhlN2YwLCAwLCB7MHgzMywweGMwLDB4MGMsMHhlMSwweDAzLDB4ZWMsMHgxMCwweGNkLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDMzLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4ZTgwMCwgMCwgezB4ZWEsMHgwMCwweDMzLDB4YzAsMHgwYywweGYwLDB4ODMsMHhjOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4MTAsIDAsIHsweDgxLDB4MDQsMHg2ZSwweDAwLDB4OGIsMHgwMCwweDJlLDB4NDAsMHgwYiwweGJjLDB4MDIsMHgyZSwweDAwLDB4MGIsMHgwMCwweDIyIH19LAorIHsxNiwgMHhlODIwLCAwLCB7MHgzMCwweDBiLDB4OWMsMHgwMiwweDI3LDB4ODAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDA4LDB4YjgsMHgwMiwweGVjLDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4ZTgzMCwgMCwgezB4YzAsMHgyMCwweGUwLDB4MDgsMHhhZSwweDAyLDB4MmMsMHgwOCwweDhhLDB4MDAsMHgyMiwweDAwLDB4MDgsMHhiMCwweDQyLDB4ZTggfX0sCisgezE2LCAweGU4NDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmUsMHgwMCwweDhiLDB4MDQsMHgyZSwweDQwIH19LAorIHsxNiwgMHhlODUwLCAwLCB7MHg4YiwweDhjLDB4MDIsMHhhZSwweDEwLDB4ODksMHgwMCwweDIyLDB4NzAsMHgwYiwweDhjLDB4MDIsMHhhMiwweDAwLDB4OGIsMHgwMSB9fSwKKyB7MTYsIDB4ZTg2MCwgMCwgezB4MjIsMHhjMCwweDA4LDB4ODAsMHgwMiwweGVjLDB4MTAsMHg4MiwweDg4LDB4YTIsMHg3MCwweDA5LDB4YjgsMHgwMiwweDJjLDB4MDggfX0sCisgezE2LCAweGU4NzAsIDAsIHsweDg5LDB4MDAsMHgyMCwweGMwLDB4MjgsMHg4MCwweDIyLDB4ZTAsMHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODgwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwNCwweDgxLDB4MDAsMHgyYywweDQwLDB4MGIsMHgyMCwweDAyLDB4ODAsMHgwMCwweDgxLDB4MDQsMHhhMCB9fSwKKyB7MTYsIDB4ZTg5MCwgMCwgezB4NTAsMHg0YiwweDAwLDB4MGEsMHg4MCwweDAwLDB4YTMsMHgwMSwweDJhLDB4YzEsMHgyMCwweDEwLDB4MDIsMHhjYywweDE0LDB4ODMgfX0sCisgezE2LCAweGU4YTAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4MjAsMHgwMiwweDBjLDB4MDAsMHg4MSwweDAwLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhlOGIwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY4LDB4MDAsMHhjYiwweDAwLDB4M2UsMHg0MCB9fSwKKyB7MTYsIDB4ZThjMCwgMCwgezB4MGYsMHg5MCwweDBiLDB4YWMsMHg4MCwweGM5LDB4MDAsMHgzMiwweDEwLDB4MGYsMHg4MCwweDAzLDB4YTQsMHgwMCwweGNmLDB4MDIgfX0sCisgezE2LCAweGU4ZDAsIDAsIHsweDMxLDB4YzAsMHgwYywweDgwLDB4MTMsMHhmYywweDAyLDB4Y2QsMHgwMCwweDMzLDB4YzAsMHgyYywweDkwLDB4MDMsMHgzYywweDAyIH19LAorIHsxNiwgMHhlOGUwLCAwLCB7MHhlOCwweDAwLDB4YjIsMHhjMCwweDBjLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThmMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDIsMHhmNSwweDAwLDB4M2QsMHg0MCwweDhmLDB4ZjAsMHgyMywweDZkLDB4MDAsMHhmZiwweDAwLDB4M2YgfX0sCisgezE2LCAweGU5MDAsIDAsIHsweDA0LDB4MGYsMHhjMCwweDAzLDB4NzAsMHgxYywweGZmLDB4MDEsMHgzZiwweGMwLDB4NGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZkIH19LAorIHsxNiwgMHhlOTEwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweGUwLDB4MGYsMHhmYywweDE4LDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgwZiwweGQwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZTkyMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4ZDcsMHgwMiwweDBmLDB4MzAgfX0sCisgezE2LCAweGU5MzAsIDAsIHsweDBjLDB4ZjIsMHgwMSwweDdlLDB4MDYsMHg0NCwweDMwLDB4M2YsMHgyMCwweDBlLDB4ZjAsMHgwMiwweDdjLDB4ODQsMHhmZCwweDIwIH19LAorIHsxNiwgMHhlOTQwLCAwLCB7MHgyNywweDA4LDB4MGMsMHhkMCwweDAxLDB4MzYsMHgwMCwweGZmLDB4NjAsMHgzMywweGNjLDB4MGIsMHhmMSwweDEzLDB4MmMsMHhjNCB9fSwKKyB7MTYsIDB4ZTk1MCwgMCwgezB4ZmYsMHgzMCwweDBmLDB4Y2QsMHgwYywweGY0LDB4MDMsMHhmMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5NjAsIDAsIHsweDgwLDB4MTAsMHhlZSwweDAwLDB4OGYsMHhjMCwweDJlLDB4MDAsMHgwOCwweGZjLDB4MDIsMHgyZSwweDAwLDB4OGEsMHgzMCwweDI4IH19LAorIHsxNiwgMHhlOTcwLCAwLCB7MHg1MiwweDA4LDB4ZjYsMHg4MiwweDNjLDB4NjgsMHhiZCwweDkwLDB4MzIsMHgzNCwweDQ4LDB4OWMsMHgxMiwweDI2LDB4MDAsMHhjZiB9fSwKKyB7MTYsIDB4ZTk4MCwgMCwgezB4NDAsMHgyMywweGNjLDB4MGIsMHhmNiwweDAyLDB4M2QsMHgwMCwweGJmLDB4MTAsMHgyZiwweGNjLDB4ODgsMHhmNiwweDAyLDB4ZTAgfX0sCisgezE2LCAweGU5OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDkzLDB4MTAsMHgyYywweDA4IH19LAorIHsxNiwgMHhlOWEwLCAwLCB7MHgwOSwweDMxLDB4MDIsMHg0YywweDAwLDB4OWIsMHgyMCwweDY0LDB4NTgsMHgwMywweDMxLDB4NjIsMHg0YywweDgxLDB4YTEsMHgwMCB9fSwKKyB7MTYsIDB4ZTliMCwgMCwgezB4MjAsMHgwMCwweDQ4LDB4MTQsMHgwMiwweDQ0LDB4MDAsMHg5MywweDMwLDB4MjQsMHhjMCwweDBiLDB4MzMsMHgwMiwweDhkLDB4ODQgfX0sCisgezE2LCAweGU5YzAsIDAsIHsweGIzLDB4MjAsMHg2YywweGMwLDB4MmEsMHgzNiwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHgxMCwweDliLDB4MDIsMHgyZSwweDQxLDB4MGIsMHhiMCwweDAyLDB4YTQsMHgwMCwweDlhLDB4MDAsMHg0YSB9fSwKKyB7MTYsIDB4ZTllMCwgMCwgezB4NjAsMHg4OCwweGIwLDB4NTIsMHg2YywweDAxLDB4YjksMHgwMCwweDI2LDB4MDAsMHgwOCwweDkxLDB4MjIsMHhlYywweDA4LDB4YmIgfX0sCisgezE2LCAweGU5ZjAsIDAsIHsweDAwLDB4MjYsMHhjMCwweDBiLDB4YjAsMHgwMiwweGFjLDB4MDAsMHhiYiwweDA1LDB4NmUsMHhjMSwweDBhLDB4YjAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhlYTAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhkYiwweDAxLDB4M2UsMHgzMCB9fSwKKyB7MTYsIDB4ZWExMCwgMCwgezB4MmQsMHgzMCwweDAzLDB4NDcsMHg2MCwweGQ4LDB4YTAsMHgxNiwweDM4LDB4OGYsMHhiMCwweDAzLDB4NmMsMHgwMCwweDc5LDB4MDIgfX0sCisgezE2LCAweGVhMjAsIDAsIHsweDMxLDB4NjAsMHgwYywweGM4LDB4MGEsMHg2NiwweDAwLDB4YmIsMHgwMCwweGI2LDB4YzAsMHgwZiwweGIwLDB4MGIsMHhhYywweDAwIH19LAorIHsxNiwgMHhlYTMwLCAwLCB7MHhmYiwweDAxLDB4M2UsMHhjMSwweDBlLDB4YjAsMHgwMywweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE0MCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MTAsMHhlZiwweDA4LDB4M2YsMHgyNCwweDBjLDB4ZjAsMHgwMywweDc2LDB4MjAsMHhlZSwweDkwLDB4MzUgfX0sCisgezE2LCAweGVhNTAsIDAsIHsweDQwLDB4MGUsMHg3MCwweDAzLDB4YWMsMHgwMCwweGZkLDB4MDAsMHhiYiwweDY0LDB4MGYsMHg4OCwweDEzLDB4MzQsMHg4MCwweGNiIH19LAorIHsxNiwgMHhlYTYwLCAwLCB7MHgwMCwweDNiLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg2YywweDA4LDB4ZmYsMHgwMCwweDNlLDB4YzAsMHgwZCwweGYwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4ZWE3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAxLDB4ZmIsMHg4MCwweDMyLDB4MTAgfX0sCisgezE2LCAweGVhODAsIDAsIHsweDBlLDB4YjAsMHgwMywweGVkLDB4MDAsMHhjYiwweDUwLDB4M2UsMHg0MCwweDhjLDB4YjAsMHg0MywweDJjLDB4MTAsMHhmOSwweDAwIH19LAorIHsxNiwgMHhlYTkwLCAwLCB7MHgzMiwweDYwLDB4MGMsMHg0MCwweDBiLDB4MjYsMHgwMCwweGMzLDB4MDQsMHgzNiwweGMwLDB4MGMsMHgzMCwweDAzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZWFhMCwgMCwgezB4OWIsMHgwMCwweGIwLDB4YzAsMHgwYywweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhYjAsIDAsIHsweGM4LDB4MDUsMHgwZSwweDgwLDB4YmYsMHgwNCwweDJhLDB4NDAsMHgwMCwweGY1LDB4MDAsMHhlNiwweDAwLDB4ODIsMHhkMiwweDIyIH19LAorIHsxNiwgMHhlYWMwLCAwLCB7MHg0MCwweDBkLDB4ZjAsMHgyMiwweDNjLDB4MDAsMHg5NSwweDAyLDB4MzYsMHg0MCwweDBhLDB4ODAsMHgwMiwweDJlLDB4MDAsMHg4ZiB9fSwKKyB7MTYsIDB4ZWFkMCwgMCwgezB4MDAsMHgzNywweGMwLDB4MGEsMHhmMCwweDQyLDB4M2MsMHgwMCwweDhmLDB4MDAsMHgyMywweGMwLDB4MjgsMHhmMCwweDAyLDB4ZjIgfX0sCisgezE2LCAweGVhZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGUsMHgwMCwweGIzLDB4MDAsMHgyMiwweDIwIH19LAorIHsxNiwgMHhlYWYwLCAwLCB7MHg0YSwweDMwLDB4MDAsMHhjYywweDAwLDB4ODEsMHhjMCwweDI4LDB4MDAsMHgwOCwweDMwLDB4MDIsMHgwYywweDEwLDB4YTEsMHgwMCB9fSwKKyB7MTYsIDB4ZWIwMCwgMCwgezB4MjgsMHg4MCwweDE4LDB4MzAsMHgyMiwweDA0LDB4MDQsMHg4MywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDggfX0sCisgezE2LCAweGViMTAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDA2LDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjIwLCAwLCB7MHgyMCwweDAxLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyOSwweGEwLDB4MDgsMHg3OCwweDAyLDB4ZmUsMHgyMCwweDhkLDB4ODAsMHgyOSB9fSwKKyB7MTYsIDB4ZWIzMCwgMCwgezB4ZTUsMHg1YiwweDM4LDB4NDIsMHgxZSwweDQwLDB4YTEsMHg4MSwweDI1LDB4YTgsMHgwOCwweDc5LDB4MDIsMHgzNywweDAwLDB4ODcgfX0sCisgezE2LCAweGViNDAsIDAsIHsweDgwLDB4MjUsMHhlMCwweDBhLDB4NzgsMHgwYSwweGRlLDB4ODEsMHg4NywweDgwLDB4MjUsMHhlNSwweDQ4LDB4NzgsMHgwMiwweGM4IH19LAorIHsxNiwgMHhlYjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHhiMywweDEwLDB4MzAsMHgxMiB9fSwKKyB7MTYsIDB4ZWI2MCwgMCwgezB4MGUsMHgzMCwweDEyLDB4Y2MsMHhjMCwweGMzLDB4MDAsMHgzOCwweDgwLDB4MGMsMHgzMSwweDA2LDB4MGMsMHg0MCwweGYxLDB4MDAgfX0sCisgezE2LCAweGViNzAsIDAsIHsweDM4LDB4ODAsMHgwYywweDMwLDB4NDMsMHgwNCwweDQyLDB4YzMsMHgwMCwweDM2LDB4YzAsMHgwYywweDMyLDB4MDMsMHhjZSwweGMwIH19LAorIHsxNiwgMHhlYjgwLCAwLCB7MHhkYiwweDAwLDB4MzAsMHhjMCwweDBjLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI5MCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZiwweDEwLDB4M2QsMHg4NCwweDRmLDB4ZjEsMHgwMywweGQwLDB4NDAsMHhmYywweDEwLDB4MzMgfX0sCisgezE2LCAweGViYTAsIDAsIHsweDgwLDB4NWQsMHhiMSwweDgzLDB4ZmMsMHg1MCwweGRkLDB4MGEsMHgyNSwweDg5LDB4MGYsMHhiOCwweDAzLDB4ZDQsMHgwMCwweGZmIH19LAorIHsxNiwgMHhlYmIwLCAwLCB7MHgxMCwweDNmLDB4YzAsMHgwZiwweGY0LDB4MDMsMHgzYywweDQwLDB4ZmYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZWJjMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgyMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGViZDAsIDAsIHsweDBmLDB4YjUsMHgwMywweDI5LDB4MjAsMHhmOSwweDAwLDB4MzIsMHhhMCwweDBjLDB4YjAsMHg4MywweGVjLDB4MDAsMHg0OSwweGM4IH19LAorIHsxNiwgMHhlYmUwLCAwLCB7MHhiMiwweGMwLDB4OGMsMHhhMCwweDAzLDB4NjQsMHgwMCwweGZiLDB4MDgsMHgxMiwweGVhLDB4MGMsMHhiMCwweDBiLDB4MmMsMHg4MCB9fSwKKyB7MTYsIDB4ZWJmMCwgMCwgezB4ZmIsMHgyMCwweDJlLDB4ZDIsMHg2YywweGI2LDB4NDMsMHhlYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjMDAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHg0OSwweDJkLDB4MDAsMHgwYiwweDMwLDB4ODIsMHgxMCwweDAxLDB4YjUsMHgwMiwweDgzIH19LAorIHsxNiwgMHhlYzEwLCAwLCB7MHhjMCwweDFhLDB4NzIsMHgyMiwweGRkLDB4NDEsMHg4NSwweDAwLDB4NjEsMHhjMCwweDE4LDB4MjAsMHgyMCwweDE0LDB4MDAsMHhiZiB9fSwKKyB7MTYsIDB4ZWMyMCwgMCwgezB4NDAsMHgzNSwweGQwLDB4MGQsMHgzNCwweDAyLDB4MWQsMHgyMCwweGI3LDB4MjgsMHgyNSwweGMxLDB4MDgsMHg3NCwweDgyLDB4ZDIgfX0sCisgezE2LCAweGVjMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwNCwweDM3LDB4YTAsMHgyZCwweDIwIH19LAorIHsxNiwgMHhlYzQwLCAwLCB7MHgwYiwweDdhLDB4MTIsMHgxNiwweDAxLDB4YjMsMHg4MCwweDIxLDB4ZTIsMHgwOCwweDc4LDB4NDIsMHg5ZSwweDAwLDB4ODUsMHg4MCB9fSwKKyB7MTYsIDB4ZWM1MCwgMCwgezB4MjAsMHhlMSwweDE4LDB4NjgsMHgwMiwweDU2LDB4MDAsMHhiNywweGEwLDB4MjUsMHhlMCwweDA4LDB4N2EsMHgwMiwweDFlLDB4MDAgfX0sCisgezE2LCAweGVjNjAsIDAsIHsweGI3LDB4OTAsMHgyYywweGU1LDB4ODgsMHg3YSwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzcwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHg2YywweDI0LDB4MWIsMHgzMCwweDAyLDB4MDAsMHgwMCwweGIwLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ZWM4MCwgMCwgezB4ZjgsMHgwYSwweDMwLDB4MDIsMHhjYywweDAwLDB4ODEsMHgwMCwweDIwLDB4ZDgsMHgxOCwweDIwLDB4MDIsMHgwNCwweDAwLDB4YjMgfX0sCisgezE2LCAweGVjOTAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjYsMHhjMCwweDA4LDB4MzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHhlY2EwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDAsMHhmYSwweDAwLDB4M2QsMHg4MCB9fSwKKyB7MTYsIDB4ZWNiMCwgMCwgezB4MGYsMHgyMCwweDBiLDB4MjgsMHg4MCwweGZlLDB4MDAsMHgzMywweGEwLDB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMiwweGNhLDB4MDIgfX0sCisgezE2LCAweGVjYzAsIDAsIHsweDMyLDB4OTAsMHgyYywweGU0LDB4MDMsMHg3OCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGEwLDB4MDMsMHgyOCwweDAwIH19LAorIHsxNiwgMHhlY2QwLCAwLCB7MHhmYSwweDAwLDB4M2UsMHg4MCwweDBjLDB4YTAsMHgwMywweGZhLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNlMCwgMCwgezB4NDgsMHgwMCwweGUxLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgwMywweGUwLDB4ODAsMHhmOCwweDAwLDB4M2UgfX0sCisgezE2LCAweGVjZjAsIDAsIHsweDAwLDB4MGYsMHg4MCwweDIzLDB4YzAsMHgwMCwweGY4LDB4MDIsMHgzYywweDAwLDB4MGYsMHhjMCwweDgzLDB4NjAsMHgwMCwweGI4IH19LAorIHsxNiwgMHhlZDAwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MjMsMHhlMCwweDE4LDB4ZjgsMHgwMSwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ZWQxMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNiwweDAwLDB4ZjksMHgyMSwweDMyLDB4NjAgfX0sCisgezE2LCAweGVkMjAsIDAsIHsweDBjLDB4OTAsMHgwMywweDJjLDB4NDQsMHhmOSwweDAwLDB4YjIsMHg0MCwweDBmLDB4OTAsMHgxYiwweDI0LDB4MDAsMHhlOSwweDAwIH19LAorIHsxNiwgMHhlZDMwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHgxMCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHgxMCwweDMzLDB4MjQsMHgxMCB9fSwKKyB7MTYsIDB4ZWQ0MCwgMCwgezB4ZjEsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkNTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MCwweGEyLDB4NDEsMHgwOCwweDkwLDB4MDIsMHgyNCwweDgwLDB4ZTksMHgwMCwweDIyIH19LAorIHsxNiwgMHhlZDYwLCAwLCB7MHg0MCwweDBiLDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4NmUsMHg0MSwweDE4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSB9fSwKKyB7MTYsIDB4ZWQ3MCwgMCwgezB4MDQsMHgyYSwweDQxLDB4MGIsMHg5MCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MDAsMHgyYSwweDQwLDB4MGEsMHg5MCwweDBhLDB4MjAgfX0sCisgezE2LCAweGVkODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHg4MCwweGI5LDB4NDIsMHg2MiwweDQ4IH19LAorIHsxNiwgMHhlZDkwLCAwLCB7MHgyOCwweDkwLDB4MGEsMHgyNCwweDAwLDB4YjEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDEwLDB4MDIsMHgyNCwweDEwLDB4YjksMHgwMiB9fSwKKyB7MTYsIDB4ZWRhMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4ZDAsMHgwMiwweGE0LDB4MDAsMHhiMSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDQgfX0sCisgezE2LCAweGVkYjAsIDAsIHsweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGMwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMCwweGIxLDB4MjAsMHg2MCwweDQwLDB4MDgsMHgxMiwweDAyLDB4MDQsMHgwMCwweGExLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4ZWRkMCwgMCwgezB4NDAsMHgwYiwweDEyLDB4MDIsMHgwNCwweDgwLDB4OTEsMHgyMCwweDJkLDB4NjgsMHgwOCwweDUyLDB4MTIsMHgwNCwweDAwLDB4YjEgfX0sCisgezE2LCAweGVkZTAsIDAsIHsweDI4LDB4MjgsMHg0YSwweDA5LDB4MTIsMHg4MiwweDQ0LDB4YTAsMHhiMSwweDJjLDB4MjgsMHg0YSwweDBhLDB4MTIsMHg4MiwweDAyIH19LAorIHsxNiwgMHhlZGYwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgxNCB9fSwKKyB7MTYsIDB4ZWUwMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4NTAsMHgzMiwweDE0LDB4MGYsMHg4NSwweDAzLDB4MDEsMHg0MCwweGY4LDB4MDAgfX0sCisgezE2LCAweGVlMTAsIDAsIHsweDJlLDB4MDAsMHgyOCwweGMwLDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgyNCwweDMwLDB4MDgsMHgwZiwweDgyLDB4MjMsMHgyMCwweDgwIH19LAorIHsxNiwgMHhlZTIwLCAwLCB7MHhmOCwweDIwLDB4MzIsMHgwOCwweDBjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWUzMCwgMCwgezB4OTgsMHgxZCwweGU0LDB4MDgsMHhmOSwweDEwLDB4M2YsMHg0MCwweDhmLDB4OTEsMHgxMywweGU0LDB4MDAsMHhlZCwweDEwLDB4M2YgfX0sCisgezE2LCAweGVlNDAsIDAsIHsweDUwLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGE1LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHgwNCwweGY5IH19LAorIHsxNiwgMHhlZTUwLCAwLCB7MHgyOCwweDNlLDB4NGIsMHgwYiwweDkyLDB4YTMsMHhlNCwweGEwLDB4ZTksMHgyOCwweDNlLDB4NGEsMHgwZiwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4ZWU2MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNCwweDAwLDB4Y2QsMHgwMCwweDMzLDB4NDAgfX0sCisgezE2LCAweGVlNzAsIDAsIHsweDgwLDB4ZDAsMHgwMSwweGY0LDB4MDAsMHhhNSwweDAwLDB4MjYsMHg0MCwweDBmLDB4OTAsMHgwMywweDI2LDB4MDAsMHhmMSwweDg4IH19LAorIHsxNiwgMHhlZTgwLCAwLCB7MHgzZSwweDY4LDB4MGQsMHg5OCwweDgzLDB4NDQsMHgwMCwweGM5LDB4YzAsMHgzYSwweDQwLDB4MGMsMHg5OCwweDAzLDB4MjQsMHgwOCB9fSwKKyB7MTYsIDB4ZWU5MCwgMCwgezB4ZjksMHhhMCwweDMyLDB4NzgsMHgwZiwweDlhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlYTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAyLDB4ODgsMHgwMCwweGEyLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlMCwweDAwLDB4MGEsMHgwMCwweDIyIH19LAorIHsxNiwgMHhlZWIwLCAwLCB7MHgwMCwweDBiLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDQwLDB4MmUsMHgxNCwweDA4LDB4ODAsMHg0MywweDMwLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4ZWVjMCwgMCwgezB4YTAsMHgyMiwweDJhLDB4MGEsMHg4YSwweDQyLDB4YTAsMHgwNSwweGI4LDB4NDIsMHgzMiwweDM4LDB4MGIsMHg4MCwweDAyLDB4MGUgfX0sCisgezE2LCAweGVlZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMywweDkxLDB4MDAsMHgyNCwweDQwIH19LAorIHsxNiwgMHhlZWUwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHhjNCwweDExLDB4YjEsMHgwNCwweDIwLDB4NDEsMHgxYiwweDEwLDB4MjIsMHg0NSwweDAwLDB4YjUsMHgwMCB9fSwKKyB7MTYsIDB4ZWVmMCwgMCwgezB4MjUsMHg0MCwweDA5LDB4NTAsMHgwMiwweDU0LDB4MDEsMHg4MSwweDQwLDB4MmMsMHg0MCwweDA5LDB4MTQsMHg5MiwweDQ0LDB4MDAgfX0sCisgezE2LCAweGVmMDAsIDAsIHsweGIxLDB4NDAsMHgyNCwweDRjLDB4MGIsMHgxNCwweDBhLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweDk5LDB4MDAsMHgyNCwweDQyLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMSwweDk5LDB4MjAsMHgyNiB9fSwKKyB7MTYsIDB4ZWYyMCwgMCwgezB4NDAsMHhjYiwweDkwLDB4MDIsMHg2NCwweDAwLDB4YmIsMHgwMCwweDJmLDB4NDEsMHgwYSwweGQwLDB4MDIsMHgzNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGVmMzAsIDAsIHsweDAwLDB4MjYsMHg0MCwweDBiLDB4MTAsMHgwMiwweGU0LDB4MDAsMHgzMSwweDAwLDB4NjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhlZjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGM0LDB4MDAsMHhkOSwweDAxLDB4MzYsMHg1MCB9fSwKKyB7MTYsIDB4ZWY1MCwgMCwgezB4MmYsMHg5MCwweDAzLDB4ZTYsMHg2MCwweGY5LDB4ODAsMHgzNiwweDUyLDB4MGIsMHg5MCwweDBhLDB4NjQsMHgwMCwweGY5LDB4MDAgfX0sCisgezE2LCAweGVmNjAsIDAsIHsweDM2LDB4NDAsMHgwZCwweDkwLDB4MDMsMHg2NCwweDAyLDB4MDksMHgwMCwweDNlLDB4NDAsMHgwZCwweDkwLDB4MDMsMHg2NCwweDAwIH19LAorIHsxNiwgMHhlZjcwLCAwLCB7MHhiOSwweDAwLDB4YjYsMHg0MCwweDBmLDB4OTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY4MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhlMSwweDAwLDB4M2EsMHg0MSwweDBjLDB4OTAsMHgyMywweGU2LDB4MjAsMHhlOSwweDAwLDB4YmEgfX0sCisgezE2LCAweGVmOTAsIDAsIHsweDcwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHgxMCwweDEzLDB4YTcsMHgwMCwweGY5IH19LAorIHsxNiwgMHhlZmEwLCAwLCB7MHgwMCwweDNhLDB4NDAsMHgwZSwweDkwLDB4NDMsMHhhNCwweDA4LDB4ZjksMHgwMCwweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9fSwKKyB7MTYsIDB4ZWZiMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDIwLDB4ZjgsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGVmYzAsIDAsIHsweDBmLDB4ODAsMHg4MywweDIxLDB4MDAsMHhmMCwweDAwLDB4M2EsMHgxMSwweDA5LDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDAxIH19LAorIHsxNiwgMHhlZmQwLCAwLCB7MHgzMCwweDAxLDB4MGMsMHg4MCwweDAzLDB4YjAsMHgwMCwweGQwLDB4MDAsMHgzNCwweDAwLDB4MGQsMHg4MCwweDAzLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZlMCwgMCwgezB4YzgsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmZjAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4YmUsMHgwMCwweDIyLDB4ODAsMHgwMywweGU4LDB4MDIsMHgxYSwweDA4LDB4YmUsMHg0OCwweDIyIH19LAorIHsxNiwgMHhmMDAwLCAwLCB7MHg4MCwweDBhLDB4YTAsMHgwMywweGI4LDB4MDAsMHhjYSwweDA4LDB4MjIsMHg4MCwweDBmLDB4YTQsMHgwMiwweDA4LDB4MDAsMHg4YSB9fSwKKyB7MTYsIDB4ZjAxMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4OGQsMHhhMCwweDAyLDB4MjgsMHgwMCwweGRhLDB4MDAsMHgyYSwweDgxLDB4MDgsMHhhMCwweDAyLDB4OGEgfX0sCisgezE2LCAweGYwMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDQsMHgwMCwweGIzLDB4MDAsMHgyMCwweDQwIH19LAorIHsxNiwgMHhmMDMwLCAwLCB7MHgwYiwweDMwLDB4MDIsMHgwOCwweDAwLDB4YjAsMHg2NCwweDY4LDB4YzEsMHgwOCwweGIwLDB4MjIsMHhjYywweDBjLDB4OTMsMHg4MCB9fSwKKyB7MTYsIDB4ZjA0MCwgMCwgezB4MDAsMHhjMCwweDQ4LDB4MzYsMHgwMiwweDg4LDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwNiwweDBjLDB4MDEgfX0sCisgezE2LCAweGYwNTAsIDAsIHsweGEzLDB4MDIsMHgyYywweGMwLDB4MDgsMHhiMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDYwLCAwLCB7MHhhMCwweDAxLDB4MTQsMHgwOCwweGI1LDB4MDAsMHgyMSwweDQwLDB4MGIsMHgzOCwweDgyLDB4MWMsMHgyMSwweGI3LDB4MDAsMHgyMyB9fSwKKyB7MTYsIDB4ZjA3MCwgMCwgezB4ZTgsMHg0YSwweDcyLDB4MjYsMHg5ZSwweDQwLDB4OGYsMHg4MSwweGFiLDB4NDAsMHg0MiwweDcwLDB4NTIsMHgzOCwweDAwLDB4YTMgfX0sCisgezE2LCAweGYwODAsIDAsIHsweDIyLDB4MjAsMHhjNCwweDQ5LDB4MzEsMHgwMiwweDFlLDB4MGEsMHhiNywweDIyLDB4MmQsMHhlOCwweDA4LDB4NzIsMHgwMiwweGE4IH19LAorIHsxNiwgMHhmMDkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDEyLDB4MDAsMHhmNiwweDgwLDB4MjEsMHhlMCB9fSwKKyB7MTYsIDB4ZjBhMCwgMCwgezB4MGIsMHg3OCwweDBiLDB4MWUsMHgwMCwweGI0LDB4ODIsMHgzYiwweGU4LDB4NGMsMHg3YywweDEzLDB4ZmUsMHgwMiwweDk3LDB4ODAgfX0sCisgezE2LCAweGYwYjAsIDAsIHsweDMzLDB4YTAsMHgwOCwweDM4LDB4MDMsMHg5YSwweDAwLDB4ZjcsMHg4OCwweDM1LDB4ZTIsMHgwYywweDc4LDB4ZTMsMHgwZSwweDAwIH19LAorIHsxNiwgMHhmMGMwLCAwLCB7MHhlMywweGU4LDB4MzQsMHhmOCwweDBjLDB4M2MsMHgyMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBkMCwgMCwgezB4MDgsMHgxZCwweGE4LDB4MDQsMHhmMSwweDAwLDB4M2UsMHg0MiwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhmYiwweDAwLDB4YmUgfX0sCisgezE2LCAweGYwZTAsIDAsIHsweGNjLDB4MWUsMHhiNiwweDA3LDB4ZWQsMHg4MCwweGZiLDB4MDAsMHgzNiwweDAwLDB4MGYsMHhiMCwweDQzLDB4NjgsMHgwMCwweGNiIH19LAorIHsxNiwgMHhmMGYwLCAwLCB7MHgzMCwweDNlLDB4ZDgsMHgwZiwweGI2LDB4MGIsMHhlZCwweDQwLDB4Y2IsMHgwMCwweDNhLDB4YzAsMHgyZiwweGI2LDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZjEwMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmMiwweDQwLDB4ZmIsMHg5MSwweDNkLDB4NGMgfX0sCisgezE2LCAweGYxMTAsIDAsIHsweDgwLDB4ZjgsMHgwMywweGRlLDB4NDAsMHhjNiwweDgwLDB4MWIsMHhmMCwweDRmLDB4ZmQsMHgwNywweGZmLDB4MDAsMHhjZCwweDgwIH19LAorIHsxNiwgMHhmMTIwLCAwLCB7MHgzMywweGUwLDB4MGMsMHg2OCwweDAzLDB4YmEsMHgwMCwweGZmLDB4ODAsMHgzMywweGUwLDB4MDcsMHhmOCwweDAzLDB4M2YsMHgxMCB9fSwKKyB7MTYsIDB4ZjEzMCwgMCwgezB4Y2YsMHg4MCwweDNmLDB4ZTAsMHgwYywweGZjLDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxNDAsIDAsIHsweGE4LDB4MTEsMHg5MCwweDAwLDB4YjUsMHhjMCwweDJkLDB4NDAsMHgwOCwweDYyLDB4MDIsMHhkYywweDIwLDB4ZDYsMHgwMiwweDIxIH19LAorIHsxNiwgMHhmMTUwLCAwLCB7MHhjOCwweDhmLDB4NzAsMHgwMiwweGRjLDB4ODEsMHhiNSwweDAwLDB4ODEsMHg0NCwweDBkLDB4NjEsMHgyMiwweDE4LDB4MDQsMHhiNyB9fSwKKyB7MTYsIDB4ZjE2MCwgMCwgezB4MDAsMHgzNSwweGMwLDB4MGIsMHg3MCwweDAyLDB4YmMsMHgwMCwweGE3LDB4MDEsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAzLDB4ZWEgfX0sCisgezE2LCAweGYxNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMSwweGI2LDB4MDEsMHgyZiwweGMwIH19LAorIHsxNiwgMHhmMTgwLCAwLCB7MHgxOCwweDcwLDB4MDIsMHhkYywweDBhLDB4OTYsMHgxMCwweDI5LDB4YzEsMHg0YiwweDcwLDB4MDYsMHhkYywweDEwLDB4ODUsMHgwMCB9fSwKKyB7MTYsIDB4ZjE5MCwgMCwgezB4MjUsMHg4MCwweDA4LDB4NjAsMHg4MiwweDFhLDB4MjAsMHhhMywweDAwLDB4MjUsMHhjMCwweDBiLDB4MzEsMHgwMiwweDVjLDB4NDAgfX0sCisgezE2LCAweGYxYTAsIDAsIHsweDg3LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWIwLCAwLCB7MHgyMCwweDE0LDB4YzgsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwLDB4ODgsMHgyMCwweDAyLDB4ZWQsMHgwMCwweDhhLDB4NjAsMHgyMCB9fSwKKyB7MTYsIDB4ZjFjMCwgMCwgezB4YzAsMHgwYSwweDMwLDB4MDIsMHhjYywweDA0LDB4YjEsMHgwMCwweDI0LDB4MDAsMHgyOCwweDI0LDB4MDIsMHgwYSwweDAwLDB4MzMgfX0sCisgezE2LCAweGYxZDAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDBiLDB4YjAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAwLDB4MmMsMHhjMCwweDg4LDB4MzAsMHgwMiwweDg4IH19LAorIHsxNiwgMHhmMWUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGEwLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjNiB9fSwKKyB7MTYsIDB4ZjFmMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4ZTUsMHgwMCwweDA5LDB4YzgsMHhhYiwweGUyLDB4MGIsMHhmMCwweDAyLDB4ZmMsMHgwMCwweDRhLDB4MDAgfX0sCisgezE2LCAweGYyMDAsIDAsIHsweDM2LDB4YzAsMHgwOCwweDkwLDB4MDMsMHhhNiwweDAwLDB4ZmYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHg3YywweDAwIH19LAorIHsxNiwgMHhmMjEwLCAwLCB7MHg4ZiwweDAwLDB4MmYsMHhjMCwweDI4LDB4ZjAsMHgwMiwweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjIyMCwgMCwgezB4ODAsMHgwMCwweGUxLDB4MDAsMHhmYSwweDAxLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmOSwweDQwLDB4M2UgfX0sCisgezE2LCAweGYyMzAsIDAsIHsweGMwLDB4MDcsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZhLDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDIzLDB4ZTUsMHgwMCwweGZiIH19LAorIHsxNiwgMHhmMjQwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAsMHgwZiwweGIwLDB4MjMsMHhlMCB9fSwKKyB7MTYsIDB4ZjI1MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4ZmMsMHgyMCwweDNmLDB4YzAgfX0sCisgezE2LCAweGYyNjAsIDAsIHsweDBjLDB4YzgsMHgwMywweGZjLDB4MjAsMHhjZCwweDgxLDB4YjMsMHhjMiwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhjYSwweDAwIH19LAorIHsxNiwgMHhmMjcwLCAwLCB7MHgzYywweDgwLDB4MGMsMHhkMCwweDgyLDB4MzYsMHgwMSwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwOCB9fSwKKyB7MTYsIDB4ZjI4MCwgMCwgezB4Y2YsMHgwNCwweDNhLDB4YzAsMHg1YywweGIwLDB4MDMsMHhjMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyOTAsIDAsIHsweDgxLDB4MDQsMHg2MiwweDA0LDB4YjgsMHg0MCwweDJjLDB4NjAsMHgwOCwweDg5LDB4MDIsMHhlZSwweDgwLDB4YTksMHg2MCwweDJhIH19LAorIHsxNiwgMHhmMmEwLCAwLCB7MHhjMCwweDBiLDB4YjAsMHgwMywweDhjLDB4MDAsMHhhYSwweDQwLDB4MmUsMHgwMCwweDA4LDB4MTAsMHgwMiwweDI2LDB4ODEsMHhlYiB9fSwKKyB7MTYsIDB4ZjJiMCwgMCwgezB4MDAsMHgyNiwweGMwLDB4OGIsMHhiMCwweDEzLDB4NmMsMHgwMCwweGRiLDB4MDAsMHgyZSwweGMwLDB4M2QsMHhiMCwweDAyLDB4ZTAgfX0sCisgezE2LCAweGYyYzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjMsMHgwMCwweGJiLDB4MDMsMHgyZSwweGM4IH19LAorIHsxNiwgMHhmMmQwLCAwLCB7MHgwOSwweGIwLDB4MDIsMHhlZSwweDAwLDB4OGIsMHgxMCwweDI2LDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlYywweDAwLDB4YTgsMHgwMCB9fSwKKyB7MTYsIDB4ZjJlMCwgMCwgezB4MmUsMHhjMCwweDA4LDB4ODgsMHgyMiwweGE0LDB4ODAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDRiLDB4YjAsMHgyMiwweDBjLDB4MDAgfX0sCisgezE2LCAweGYyZjAsIDAsIHsweDhiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzAwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweGIyLDB4MDAsMHgyZSwweGMwLDB4MjksMHgyOCwweDAyLDB4ZWMsMHgwMSwweGEwLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4ZjMxMCwgMCwgezB4YzAsMHgwOSwweDMwLDB4MDIsMHhjYywweDAwLDB4YTAsMHgwMCwweDJjLDB4NDAsMHgwOCwweDAwLDB4NDIsMHg4NCwweDAwLDB4OTMgfX0sCisgezE2LCAweGYzMjAsIDAsIHsweDAwLDB4NmMsMHhjMCwweDBiLDB4MzAsMHgwNiwweDRkLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhmMzMwLCAwLCB7MHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhmOCwweDIwLDB4MmYsMHhjMCB9fSwKKyB7MTYsIDB4ZjM0MCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGNiLDB4MDAsMHgzMywweGMwLDB4MGIsMHhmMCwweDAzLDB4ZmMsMHgxOCwweGU4LDB4MDAgfX0sCisgezE2LCAweGYzNTAsIDAsIHsweDJlLDB4ODAsMHgwOCwweDgwLDB4MDMsMHhhNCwweDAwLDB4YmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHgzZCwweDExIH19LAorIHsxNiwgMHhmMzYwLCAwLCB7MHhjZiwweDAzLDB4M2UsMHhjMSwweDVkLDB4ZjAsMHgyMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM3MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDAsMHhmYywweDEwLDB4M2YsMHg0MCwweDBlLDB4ZTAsMHgwMywweGZjLDB4MDAsMHhmYywweDAwLDB4M2YgfX0sCisgezE2LCAweGYzODAsIDAsIHsweGMwLDB4MGYsMHhmMCwweDAzLDB4YmMsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MmYsMHhjMCwweDAzLDB4NzQsMHgwMCwweGVmIH19LAorIHsxNiwgMHhmMzkwLCAwLCB7MHgwMCwweDI3LDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDE4LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZjNhMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhmYywweDg4LDB4OWMsMHgyOSwweDNmLDB4MDggfX0sCisgezE2LCAweGYzYjAsIDAsIHsweDBmLDB4ZDIsMHg4MywweGVjLDB4MDAsMHhmZiwweDA4LDB4M2YsMHgyOCwweDBmLDB4Y2EsMHgwMywweDNjLDB4NDEsMHhjZiwweDIwIH19LAorIHsxNiwgMHhmM2MwLCAwLCB7MHg3MywweDJjLDB4MGMsMHhjMCwweDAzLDB4MzAsMHgyMCwweGNmLDB4NjAsMHgzMywweGQ4LDB4MGYsMHg3OCwweDAzLDB4M2YsMHg4MCB9fSwKKyB7MTYsIDB4ZjNkMCwgMCwgezB4ZGQsMHg5MiwweDMzLDB4YzgsMHgwZiwweDUwLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzZTAsIDAsIHsweDgwLDB4MTAsMHhlNSwweDQwLDB4ODgsMHg0MCwweDJlLDB4MDQsMHg4YiwweDk0LDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDBlIH19LAorIHsxNiwgMHhmM2YwLCAwLCB7MHg3ZiwweDhmLDB4OWUsMHg4MywweDY1LDB4ODIsMHhjZiwweDY4LDB4M2UsMHg1MCwweDhkLDB4MDQsMHg5MiwweDJmLDB4MDQsMHhkMyB9fSwKKyB7MTYsIDB4ZjQwMCwgMCwgezB4NDAsMHg3NCwweGRjLDB4MGQsMHhhMiwweDAyLDB4MjAsMHg0MCwweDg5LDB4MDAsMHgyMiwweGYwLDB4MGIsMHg5OCwweDAyLDB4MjAgfX0sCisgezE2LCAweGY0MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzgsMHgwOSwweGEwLDB4ODUsMHgyYywweDAxIH19LAorIHsxNiwgMHhmNDIwLCAwLCB7MHgwYiwweDAwLDB4MTAsMHhjYywweDQwLDB4YTIsMHgwOCwweDJjLDB4MDAsMHhkYiwweDExLDB4MDIsMHg4OSwweDAwLDB4OTMsMHgzMCB9fSwKKyB7MTYsIDB4ZjQzMCwgMCwgezB4MjAsMHgwNSwweDA4LDB4MTMsMHgwMiwweDgwLDB4MDgsMHhhMywweDYwLDB4NjAsMHhjMCwweDBhLDB4YjAsMHg4MiwweDA4LDB4ODQgfX0sCisgezE2LCAweGY0NDAsIDAsIHsweDgxLDB4MjAsMHgyMCwweGQwLDB4MGIsMHgxMCwweDAyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDUwLCAwLCB7MHhjMCwweDE1LDB4YTQsMHgxMiwweDg4LDB4ODAsMHg2ZSwweDIwLDB4MGIsMHg4OCwweDgyLDB4ZWUsMHgwMCwweGJhLDB4ODEsMHgyZSB9fSwKKyB7MTYsIDB4ZjQ2MCwgMCwgezB4NjAsMHg1YSwweDk4LDB4MDIsMHhhMiwweDAwLDB4OGIsMHgwMCwweDJhLDB4NjAsMHgwOCwweDExLDB4MWEsMHgyYywweDAwLDB4YmIgfX0sCisgezE2LCAweGY0NzAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4YjgsMHgwYSwweDI4LDB4MDAsMHg4MSwweDIwLDB4MDIsMHhjMCwweDBiLDB4OTAsMHgwMiwweGIwIH19LAorIHsxNiwgMHhmNDgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGVkLDB4MDAsMHhkOSwweDgwLDB4M2UsMHgyMCB9fSwKKyB7MTYsIDB4ZjQ5MCwgMCwgezB4NGYsMHg5OCwweDAwLDB4ZWIsMHgyMCwweGZiLDB4ZTAsMHgyZSwweDYwLDB4MGIsMHg4YywweDYyLDB4YWUsMHgyMCwweDhiLDB4MDAgfX0sCisgezE2LCAweGY0YTAsIDAsIHsweDIyLDB4NjAsMHgwOCwweGJjLDB4MDMsMHhhMCwweDIwLDB4ZWIsMHgwMCwweDIyLDB4YzEsMHgwYSwweDE4LDB4MGIsMHgyNSwweDAwIH19LAorIHsxNiwgMHhmNGIwLCAwLCB7MHhkOSwweDAwLDB4YjIsMHhjMCwweDBmLDB4OTAsMHgwYiwweDkwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRjMCwgMCwgezB4ZTAsMHgwMSwweDk0LDB4ODgsMHhmZiwweDAwLDB4M2YsMHgwMSwweDBmLDB4ZDAsMHgwMSwweGYwLDB4MDgsMHhkZCwweDAxLDB4M2YgfX0sCisgezE2LCAweGY0ZDAsIDAsIHsweDQyLDB4MDcsMHg0MCwweDAzLDB4NWMsMHgwMCwweGFmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhmOCwweDAwLDB4ZjAsMHgwMCwweGRmIH19LAorIHsxNiwgMHhmNGUwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MjMsMHhmNCwweDUwLDB4ZmQsMHg4MCwweDNmLDB4YzAsMHgwZiwweGQwLDB4MDMsMHg3OCB9fSwKKyB7MTYsIDB4ZjRmMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhhYywweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGY1MDAsIDAsIHsweDBmLDB4OTQsMHgwMywweGE4LDB4MjAsMHhjYSwweDQwLDB4M2EsMHg0MCwweDBmLDB4OTQsMHgwMywweGVhLDB4MDgsMHhmYiwweDAwIH19LAorIHsxNiwgMHhmNTEwLCAwLCB7MHgzYSwweDAwLDB4NGMsMHhmNiwweDIzLDB4MmMsMHgzMCwweGNiLDB4MDAsMHgzNiwweGMwLDB4MGQsMHg5MCwweDAzLDB4YTEsMHgwMiB9fSwKKyB7MTYsIDB4ZjUyMCwgMCwgezB4ZDksMHgwMCwweGJhLDB4YzAsMHgwZiwweDk4LDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1MzAsIDAsIHsweGM4LDB4MDUsMHgyNCwweDAwLDB4OGEsMHgwMCwweDJlLDB4NDAsMHgwYiwweDk1LDB4MDIsMHhlMCwweDA4LDB4ODgsMHg4MCwweDIyIH19LAorIHsxNiwgMHhmNTQwLCAwLCB7MHg3MCwweDhmLDB4OGMsMHgwMiwweGUwLDB4MDAsMHhiZiwweDAyLDB4MjAsMHgwMCwweDA4LDB4YjgsMHgwMiwweDBlLDB4MDAsMHhkZiB9fSwKKyB7MTYsIDB4ZjU1MCwgMCwgezB4MDAsMHgyMywweGRkLDB4MDgsMHg5OCwweDgyLDB4MmEsMHgwMCwweDg5LDB4ODAsMHgyMywweGMwLDB4MGIsMHg1MCwweDFhLDB4MzIgfX0sCisgezE2LCAweGY1NjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDQsMHgwMCwweDgzLDB4MDUsMHgyNCwweDQxIH19LAorIHsxNiwgMHhmNTcwLCAwLCB7MHgwOSwweDEwLDB4MDIsMHhjZSwweDAwLDB4ODMsMHg5MCwweDJjLDB4ODAsMHgxYiwweDI0LDB4ODIsMHhjYywweDAwLDB4YmIsMHgwMCB9fSwKKyB7MTYsIDB4ZjU4MCwgMCwgezB4MmMsMHg4MCwweDA4LDB4MDQsMHgwOCwweDA0LDB4MDEsMHg4YiwweDAwLDB4MjIsMHhjMCwweDI4LDB4MTIsMHgwMiwweDZjLDB4ODAgfX0sCisgezE2LCAweGY1OTAsIDAsIHsweDgxLDB4NDgsMHgyNCwweGM0LDB4MGIsMHgxMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWEwLCAwLCB7MHgyMCwweDAxLDB4M2UsMHg0MiwweDg2LDB4ODAsMHgyZCwweDYwLDB4MGIsMHg2OCwweDAyLDB4ZjYsMHg5MCwweDhkLDB4ODAsMHgyMSB9fSwKKyB7MTYsIDB4ZjViMCwgMCwgezB4MjIsMHgwYiwweDU4LDB4MDIsMHhkNywweDQwLDB4YjcsMHg5MCwweDIxLDB4ZTAsMHgwOCwweDQ5LDB4OTIsMHgxZSwweDUzLDB4OTcgfX0sCisgezE2LCAweGY1YzAsIDAsIHsweDgxLDB4MjEsMHhlMCwweDQ4LDB4YzgsMHgwYSwweDUyLDB4MjIsMHg4NSwweDg4LDB4MjUsMHhlMCwweDBiLDB4NTgsMHgwMiwweDA4IH19LAorIHsxNiwgMHhmNWQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MywweDAwLDB4MzQsMHhjMCB9fSwKKyB7MTYsIDB4ZjVlMCwgMCwgezB4MGYsMHgwMCwweDAzLDB4Y2UsMHgyMCwweGMzLDB4MzAsMHg3YywweDk0LDB4MGIsMHgzNCwweDgzLDB4Y2MsMHgxNCwweGYzLDB4MDIgfX0sCisgezE2LCAweGY1ZjAsIDAsIHsweDNjLDB4ODAsMHgwYywweDA0LDB4MDMsMHgwNCwweDYwLDB4YzMsMHgwMCwweGIwLDB4YzAsMHgwYywweDEwLDB4MDMsMHhlYywweDAwIH19LAorIHsxNiwgMHhmNjAwLCAwLCB7MHhjOSwweDAwLDB4M2MsMHhjNCwweDBmLDB4MTEsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjYxMCwgMCwgezB4NDAsMHgxZCwweDljLDB4MDAsMHhlZSwweDAxLDB4M2YsMHhjMCwweDRmLDB4ZTEsMHgwMywweGQ0LDB4NDAsMHhmNSwweDE2LDB4N2EgfX0sCisgezE2LCAweGY2MjAsIDAsIHsweGMwLDB4NGUsMHhmMCwweDAzLDB4ZjQsMHgxMCwweDM3LDB4MDUsMHgzZCwweGMwLDB4MGYsMHhjMCwweDBiLDB4ZGMsMHg0MCwweGZmIH19LAorIHsxNiwgMHhmNjMwLCAwLCB7MHgwMCwweDNiLDB4YzIsMHgwZSwweGQwLDB4MDcsMHhiYywweDAyLDB4ZWYsMHgwMCwweDNiLDB4YzYsMHgwZiwweGQwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ZjY0MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmNCwweDAwLDB4ZGQsMHg4NCwweDMzLDB4ODAgfX0sCisgezE2LCAweGY2NTAsIDAsIHsweDA0LDB4ZjAsMHgwMywweDZjLDB4MDIsMHhjYiwweDAyLDB4N2UsMHhjMCwweDFmLDB4YTAsMHg1MywweGVjLDB4MDAsMHhjYiwweDIwIH19LAorIHsxNiwgMHhmNjYwLCAwLCB7MHgzNCwweDQwLDB4MGMsMHhkMCwweDBiLDB4MjAsMHgxMCwweGViLDB4MDAsMHgxZSwweGUwLDB4MGYsMHgzMCwweDBiLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZjY3MCwgMCwgezB4YzEsMHgwMCwweDMyLDB4YzAsMHgwZiwweDkxLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2ODAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4ODAsMHgwOCwweDYwLDB4MDAsMHgxNCwweDAwLDB4ODUsMHgwMCwweDJkIH19LAorIHsxNiwgMHhmNjkwLCAwLCB7MHg4MCwweDBiLDB4NzAsMHg1MiwweGQ0LDB4MDQsMHg4MywweDI4LDB4MjksMHhjMCwweDI4LDB4NTAsMHgwMywweDUwLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4ZjZhMCwgMCwgezB4NDAsMHgyNSwweGM4LDB4MGYsMHg2MCwweDAyLDB4MDQsMHgwMCwweGE3LDB4MDAsMHgzZCwweGM4LDB4MGIsMHg1MiwweDAyLDB4ZDIgfX0sCisgezE2LCAweGY2YjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDk1LDB4ODAsMHgyMSwweGUwIH19LAorIHsxNiwgMHhmNmMwLCAwLCB7MHgwOSwweDM4LDB4MDIsMHgxZSwweDExLDB4YTcsMHg4MCwweDJkLDB4ZjAsMHgwYiwweDc4LDB4NTIsMHhjZSwweDBhLDB4OTcsMHg5NSB9fSwKKyB7MTYsIDB4ZjZkMCwgMCwgezB4MjEsMHhlMCwweDE5LDB4NWMsMHgwMiwweDBlLDB4MDAsMHhhNywweDgwLDB4MjksMHhjOCwweDBiLDB4ZjgsMHgwMiwweDFlLDB4MjAgfX0sCisgezE2LCAweGY2ZTAsIDAsIHsweDhkLDB4ODAsMHgyMSwweGUwLDB4MGIsMHg1OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmYwLCAwLCB7MHg0OCwweDE0LDB4Y2MsMHgwMCwweDgyLDB4ZTAsMHhhMCwweGU4LDB4MjksMHgzMCwweDA2LDB4MGUsMHg1MCwweGFiLDB4ODAsMHgyYyB9fSwKKyB7MTYsIDB4ZjcwMCwgMCwgezB4ZjAsMHgwYiwweDMxLDB4NDIsMHhjYywweDAwLDB4OTMsMHgwMCwweDI4LDB4YzQsMHgwOSwweDk4LDB4MDIsMHg0YywweDI4LDB4ODMgfX0sCisgezE2LCAweGY3MTAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDBhLDB4YjAsMHgwMiwweDBkLDB4MDAsMHhhMiwweDU4LDB4MjgsMHhjMCwweDBiLDB4MTAsMHgwMiwweGQyIH19LAorIHsxNiwgMHhmNzIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4MDAsMHhkZSwweDgwLDB4MzEsMHhhMCB9fSwKKyB7MTYsIDB4ZjczMCwgMCwgezB4MDksMHhlMiwweDBiLDB4NzgsMHgwNCwweGVlLDB4YTQsMHgyZiwweGE0LDB4OGIsMHhlYywweDAyLDB4ZDgsMHgwMCwweGRhLDB4MDAgfX0sCisgezE2LCAweGY3NDAsIDAsIHsweDI3LDB4ODEsMHgwZCwweGVjLDB4MDYsMHgxYiwweDAwLDB4ZWEsMHgwNCwweDNlLDB4ODAsMHgwYiwweGUwLDB4MDMsMHgzYiwweDAwIH19LAorIHsxNiwgMHhmNzUwLCAwLCB7MHhjZSwweGMwLDB4MjIsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc2MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4ODAsMHhmOCwweDEwLDB4M2UsMHgwNSwweDBlLDB4ODgsMHgwMywweGUwLDB4MDgsMHg5OCwweDQwLDB4M2UgfX0sCisgezE2LCAweGY3NzAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDgzLDB4ZTEsMHg0MCwweGU4LDB4MDAsMHgzYSwweDAyLDB4MGUsMHg4MCwweDQzLDB4ZTEsMHg0MCwweGY4IH19LAorIHsxNiwgMHhmNzgwLCAwLCB7MHgwMCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDIwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4Zjc5MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGY3YTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDA0LDB4MjAsMHhlOSwweDkwLDB4MzIsMHg2OCwweDBlLDB4OTgsMHgwMywweGE0LDB4MDAsMHhjMSwweDAwIH19LAorIHsxNiwgMHhmN2IwLCAwLCB7MHgzMCwweDQwLDB4MGMsMHg5NCwweDgzLDB4MjQsMHgwOCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4YTQsMHgwMCB9fSwKKyB7MTYsIDB4ZjdjMCwgMCwgezB4YzksMHgwMCwweDMwLDB4NTAsMHgwYywweDFhLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3ZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg0MCwweDJlLDB4NTAsMHgyOCwweDkwLDB4MGEsMHgyNCwweDA4LDB4ODksMHgwNiwweDE2IH19LAorIHsxNiwgMHhmN2UwLCAwLCB7MHg2MSwweDBiLDB4OWMsMHgwMiwweGU0LDB4MjAsMHhhOSwweDAwLDB4MzYsMHg0MCwweDBkLDB4OTAsMHgwMiwweDI3LDB4NjAsMHhhOSB9fSwKKyB7MTYsIDB4ZjdmMCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MjgsMHg5MCwweDFhLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgzNiwweDQwLDB4MjgsMHg5OCwweDAyLDB4MjAgfX0sCisgezE2LCAweGY4MDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MmMsMHgwMCwweGE5LDB4MDgsMHgyZSwweGMyIH19LAorIHsxNiwgMHhmODEwLCAwLCB7MHgwOSwweDEwLDB4MDAsMHgyNCwweDAwLDB4YTksMHgwMCwweDA2LDB4NDAsMHg4OSwweDk2LDB4MDYsMHhlNiwweDAwLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4ZjgyMCwgMCwgezB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDIsMHg4OSwweDAwLDB4MjQsMHg0MCwweDA4LDB4OTAsMHgwMiwweDBjLDB4MDYgfX0sCisgezE2LCAweGY4MzAsIDAsIHsweDgzLDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODQwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweDgxLDB4NDQsMHgyYywweDUwLDB4MDgsMHgxNCwweDAyLDB4MDUsMHg4MCwweDgxLDB4MjAsMHg2NCB9fSwKKyB7MTYsIDB4Zjg1MCwgMCwgezB4NzAsMHgxYiwweDE0LDB4MDIsMHhlNCwweDgwLDB4YTEsMHgyMCwweDY0LDB4NDAsMHgxOSwweDEyLDB4MGEsMHgwNCwweDgwLDB4YTEgfX0sCisgezE2LCAweGY4NjAsIDAsIHsweDAwLDB4MmMsMHg1MCwweDE4LDB4MTQsMHgwMiwweDg1LDB4MDAsMHg4MSwweDQwLDB4MjQsMHg0MCwweDQwLDB4MTAsMHgwMiwweDAyIH19LAorIHsxNiwgMHhmODcwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhlMCwweDAwLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4Zjg4MCwgMCwgezB4MGQsMHg4MCwweDAyLDB4MDAsMHgwMCwweGFhLDB4NTAsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTEsMHg0MCwweGM4LDB4NTIgfX0sCisgezE2LCAweGY4OTAsIDAsIHsweDcyLDB4MTQsMHgwYywweDA1LDB4MTYsMHgyMCwweDA4LDB4YzgsMHg1MCwweDNlLDB4MDEsMHgwYywweDgwLDB4MDMsMHhhMCwweDA0IH19LAorIHsxNiwgMHhmOGEwLCAwLCB7MHhjOCwweDAwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhiMCwgMCwgezB4OTgsMHgxOSwweGY1LDB4MDIsMHhmZCwweDQwLDB4M2YsMHhkMCwweDBmLDB4ZDQsMHgyMywweGY0LDB4NDQsMHhmZCwweDE0LDB4N2YgfX0sCisgezE2LCAweGY4YzAsIDAsIHsweDUwLDB4MGYsMHhkNCwweDA3LDB4ZjQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDUwLDB4MDcsMHhkMSwweDIzLDB4ZjQsMHg0MCwweGY5IH19LAorIHsxNiwgMHhmOGQwLCAwLCB7MHg0MCwweDFlLDB4NTAsMHgwNywweGQwLDB4MGIsMHg3NSwweDAwLDB4ZmQsMHgwMiwweDNlLDB4NTAsMHgwZiwweGQ0LDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4ZjhlMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDAwLDB4YzksMHhhOCwweDNlLDB4NzIgfX0sCisgezE2LCAweGY4ZjAsIDAsIHsweDBmLDB4OTgsMHgwMywweGU2LDB4YzAsMHhmZCwweGEwLDB4YjMsMHg0MCwweDBmLDB4ZDAsMHgwMywweDc3LDB4ODAsMHhjZCwweDkwIH19LAorIHsxNiwgMHhmOTAwLCAwLCB7MHg3ZiwweDQwLDB4MGYsMHhkYSwweGEzLDB4MTYsMHg5MCwweGE5LDB4YzAsMHgzMiwweDYwLDB4NGMsMHhiMSwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ZjkxMCwgMCwgezB4YzEsMHgwMCwweDMzLDB4NmEsMHgwYiwweGRhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5MjAsIDAsIHsweDM4LDB4MTAsMHhlMywweDQwLDB4ODgsMHhlMCwweDJlLDB4MzAsMHgwYiwweDhkLDB4MDIsMHhmMywweDQwLDB4YjgsMHhlOCwweDc2IH19LAorIHsxNiwgMHhmOTMwLCAwLCB7MHgwMCwweDRmLDB4ODAsMHgwYSwweDIyLDB4ODAsMHg4OCwweDkwLDB4NmUsMHgyOCwweDhmLDB4OGEsMHgwMywweDYxLDB4NDQsMHhmOCB9fSwKKyB7MTYsIDB4Zjk0MCwgMCwgezB4ZTEsMHgzZSwweDJhLDB4MDgsMHg4OCwweDAzLDB4NDIsMHhhMCwweGRjLDB4YTAsMHgzZSwweDEwLDB4MGIsMHg4NSwweDBhLDB4MGUgfX0sCisgezE2LCAweGY5NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHhhMCwweDg1LDB4MDgsMHgyZCwweDQ4IH19LAorIHsxNiwgMHhmOTYwLCAwLCB7MHgxYiwweDUyLDB4ODIsMHhkNCwweDgwLDB4YjEsMHgxNCwweDIwLDB4NDAsMHgwYiwweDE4LDB4MDIsMHgwNSwweDgyLDB4ODEsMHgwMCB9fSwKKyB7MTYsIDB4Zjk3MCwgMCwgezB4NmMsMHg0MiwweDBiLDB4MTIsMHg4MiwweDA0LDB4MDAsMHhhMSwweDYwLDB4MjEsMHg1MCwweDBiLDB4NTAsMHgwMiwweDE0LDB4OTAgfX0sCisgezE2LCAweGY5ODAsIDAsIHsweDk1LDB4MmMsMHgyOCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTkwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMSwweDhkLDB4NDQsMHgyZiwweDQwLDB4MGIsMHhkNCwweDAyLDB4ZjQsMHgwNCwweGI5LDB4MDgsMHgyMiB9fSwKKyB7MTYsIDB4ZjlhMCwgMCwgezB4NDAsMHgwYSwweDkyLDB4MDIsMHgyYywweDg0LDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYSwweDE0LDB4MDIsMHg2YywweDgwLDB4YTkgfX0sCisgezE2LCAweGY5YjAsIDAsIHsweDAxLDB4MmEsMHg0MCwweDA5LDB4NTAsMHgwYSwweDVjLDB4MDIsMHg4ZCwweDYwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHg0MiwweDA2IH19LAorIHsxNiwgMHhmOWMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU2LDB4NjIsMHhjOSwweDAyLDB4M2UsMHg1NCB9fSwKKyB7MTYsIDB4ZjlkMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4NDAsMHgyMiwweDQ2LDB4MGIsMHg5OCwweDAzLDB4NjcsMHgyMCwweGM5LDB4MDEgfX0sCisgezE2LCAweGY5ZTAsIDAsIHsweDJlLDB4NjksMHgwYiwweDk0LDB4MGIsMHgyNSwweDIwLDB4YTksMHgwMCwweDIyLDB4NDAsMHgyZCwweDkyLDB4MGEsMHgyNiwweDIyIH19LAorIHsxNiwgMHhmOWYwLCAwLCB7MHg5OSwweDAwLDB4MmEsMHg0MCwweDhmLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmEwMCwgMCwgezB4MjgsMHgwMSwweDg2LDB4MDIsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4ODAsMHhmMSwweGEwLDB4M2UgfX0sCisgezE2LCAweGZhMTAsIDAsIHsweDYyLDB4MGYsMHg5OCwweDgzLDB4YzYsMHgyMCwweGY5LDB4MDAsMHgzZSwweDQ5LDB4MGYsMHg5MCwweDgzLDB4ZTQsMHgwMCwweDcxIH19LAorIHsxNiwgMHhmYTIwLCAwLCB7MHgwMiwweDNlLDB4NDAsMHgwZSwweDkwLDB4MGIsMHhlNiwweDgwLDB4ZjksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4ZmEzMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDEwLDB4YzgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGZhNDAsIDAsIHsweDRmLDB4ODAsMHg0MywweGIwLDB4MDAsMHhjOCwweDQxLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDIxLDB4MDIsMHhjOCwweDAyIH19LAorIHsxNiwgMHhmYTUwLCAwLCB7MHgzZSwweDEwLDB4NGMsMHg4MCwweDAzLDB4MDEsMHgyMCwweGM4LDB4MDAsMHgzYiwweDAwLDB4MGMsMHhjMCwweDAzLDB4YjAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE2MCwgMCwgezB4Y2MsMHgwNCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHg4MCwweDJlLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhmOCwweDA0LDB4OGUsMHgwMCwweDIzIH19LAorIHsxNiwgMHhmYTgwLCAwLCB7MHhiMiwweDBlLDB4ZTAsMHg4MiwweGY5LDB4MDQsMHg4YSwweDAwLDB4MmUsMHg4MSwweDBjLDB4ZTAsMHgwYSwweDNhLDB4ODAsMHhkYSB9fSwKKyB7MTYsIDB4ZmE5MCwgMCwgezB4MDAsMHgyMiwweGI2LDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDhlLDB4MDAsMHgyYSwweDgwLDB4MGIsMHg2MCwweDBiLDB4MGEgfX0sCisgezE2LCAweGZhYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDQsMHgwMiwweDkzLDB4ODEsMHgyYywweGMwIH19LAorIHsxNiwgMHhmYWIwLCAwLCB7MHg0YiwweDMwLDB4MDIsMHhjOCwweDAwLDB4ODMsMHhjYSwweDIwLDB4ZTAsMHgxOSwweGIwLDB4MDYsMHg4YywweDAwLDB4ODEsMHgwNCB9fSwKKyB7MTYsIDB4ZmFjMCwgMCwgezB4NDQsMHg0MCwweDA4LDB4MzQsMHgwMiwweDBkLDB4MDAsMHg4MywweDAwLDB4MmEsMHgwMCwweDA4LDB4MDAsMHgwYSwweDgwLDB4NDAgfX0sCisgezE2LCAweGZhZDAsIDAsIHsweDg4LDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4NGIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWUwLCAwLCB7MHhhMCwweDAxLDB4MDQsMHgwMiwweDk3LDB4MDgsMHgyZCwweGMwLDB4MGIsMHg2MCwweDA2LDB4Y2EsMHgwMCwweDgzLDB4MDksMHgyMSB9fSwKKyB7MTYsIDB4ZmFmMCwgMCwgezB4YzAsMHgwYSwweDcwLDB4MDIsMHhkYywweDAwLDB4ODUsMHgzMSwweDJkLDB4NjgsMHgwOSwweDMwLDB4MDIsMHgxYywweDE0LDB4OTMgfX0sCisgezE2LCAweGZiMDAsIDAsIHsweDIwLDB4MjAsMHhjMCwweDA4LDB4ZjAsMHg0MiwweDljLDB4MDIsMHg4ZiwweDAwLDB4MjksMHg0MCwweDAzLDB4NzAsMHgxMiwweDI4IH19LAorIHsxNiwgMHhmYjEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDE2LDB4MDAsMHg5NiwweDg0LDB4M2QsMHhhMCB9fSwKKyB7MTYsIDB4ZmIyMCwgMCwgezB4MGYsMHg3OCwweDAzLDB4OWEsMHgwMiwweDg3LDB4ODAsMHhiMSwweGUwLDB4MGIsMHg3OCwweDAzLDB4YjYsMHgwMCwweGM1LDB4YTAgfX0sCisgezE2LCAweGZiMzAsIDAsIHsweDM1LDB4NjEsMHgwYywweDc4LDB4MTMsMHgxZSwweDAyLDB4YzcsMHg4MCwweDI5LDB4MDAsMHgwYywweDQ4LDB4MDMsMHg5MCwweDAwIH19LAorIHsxNiwgMHhmYjQwLCAwLCB7MHhjNCwweDgwLDB4MzEsMHg2MCwweDBmLDB4NTgsMHgwMywweDZhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI1MCwgMCwgezB4MDgsMHgxZCwweGE0LDB4MDAsMHhlYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGU4LDB4MDgsMHhmYiwweDAwLDB4M2UgfX0sCisgezE2LCAweGZiNjAsIDAsIHsweDgwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHgwOCwweGY5LDB4MDAsMHgzYywweDUwLDB4MmUsMHhmMCwweDAzLDB4ZTgsMHgwOCwweGZiIH19LAorIHsxNiwgMHhmYjcwLCAwLCB7MHg0MCwweDNlLDB4YzAsMHgwYiwweDMwLDB4MTMsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweDMwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ZmI4MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhkNiwweDAwLDB4Y2QsMHg4MCwweDMzLDB4ZTAgfX0sCisgezE2LCAweGZiOTAsIDAsIHsweDBjLDB4ZjgsMHgwMywweGZhLDB4MDAsMHhmZCwweDgwLDB4M2YsMHhhMCwweDBkLDB4ZjgsMHgwMywweGZhLDB4NDAsMHhjZCwweGQwIH19LAorIHsxNiwgMHhmYmEwLCAwLCB7MHg3NywweDdlLDB4MGMsMHhlOCwweDQzLDB4MWUsMHgwMCwweGNmLDB4ZDgsMHgzZiwweGUwLDB4MGMsMHhjOCwweDAzLDB4M2EsMHhjNCB9fSwKKyB7MTYsIDB4ZmJiMCwgMCwgezB4Y2MsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiYzAsIDAsIHsweGE4LDB4MTEsMHg5NCwweDAyLDB4OGQsMHgwMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDMsMHhkOCwweDEwLDB4MzUsMHgyMCwweDhiIH19LAorIHsxNiwgMHhmYmQwLCAwLCB7MHhkNCwweDBkLDB4NjQsMHgwMywweGQ4LDB4YzAsMHg4NSwweDAwLDB4MmYsMHg0ZSwweDA3LDB4NjQsMHgwMiwweDljLDB4MDIsMHhkNyB9fSwKKyB7MTYsIDB4ZmJlMCwgMCwgezB4MzAsMHgyZiwweDA0LDB4MGQsMHhmMSwweDBiLDB4NTQsMHg0MCwweGFmLDB4MDAsMHgzNSwweDQwLDB4MDgsMHg3MCwweDAyLDB4MmEgfX0sCisgezE2LCAweGZiZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHg0MCwweDg0LDB4MTgsMHgyMSwweDgwIH19LAorIHsxNiwgMHhmYzAwLCAwLCB7MHgwOCwweDcwLDB4MDIsMHhkYSwweDIwLDB4YjUsMHgwMCwweDA5LDB4MDAsMHgwOCwweDcwLDB4MDIsMHhkNCwweDA0LDB4ODUsMHgwMCB9fSwKKyB7MTYsIDB4ZmMxMCwgMCwgezB4NmQsMHg0YywweDg5LDB4NjAsMHgwMiwweDVjLDB4NDAsMHg5NywweDAwLDB4NmQsMHhjMCwweDA5LDB4NDAsMHgwMiwweDU4LDB4ODAgfX0sCisgezE2LCAweGZjMjAsIDAsIHsweDg0LDB4ODgsMHgyNSwweDQwLDB4MDgsMHhkMCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzMwLCAwLCB7MHgyMCwweDE0LDB4YzYsMHg0OCwweDgwLDB4MDAsMHgyMCwweDgwLDB4MDgsMHhhYywweDAyLDB4YTgsMHgwMCwweGIxLDB4MDAsMHhhOCB9fSwKKyB7MTYsIDB4ZmM0MCwgMCwgezB4ODgsMHgwOSwweDIyLDB4MDIsMHg4NiwweDQyLDB4ODEsMHgwMCwweDZjLDB4NTIsMHgwYiwweDIwLDB4MDIsMHhjNywweDUyLDB4ODMgfX0sCisgezE2LCAweGZjNTAsIDAsIHsweDAwLDB4MmMsMHgwMCwweDA4LDB4MzQsMHg4MiwweDY3LDB4MDAsMHhhMywweDgwLDB4MjAsMHg0MCwweDA4LDB4MzAsMHgwMiwweDA4IH19LAorIHsxNiwgMHhmYzYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGEzLDB4MDAsMHhjYiwweGMwLDB4YjIsMHg0MCB9fSwKKyB7MTYsIDB4ZmM3MCwgMCwgezB4MmMsMHg5MCwweDgyLDB4ZTYsMHgwMCwweGJiLDB4ODAsMHhiZSwweDc4LDB4MDgsMHg4ZSwweDAyLDB4ZWUsMHgwMCwweDhkLDB4MDAgfX0sCisgezE2LCAweGZjODAsIDAsIHsweDI3LDB4NjAsMHgwZCwweDkwLDB4MGEsMHg2ZiwweDAwLDB4OWYsMHgwMiwweDJlLDB4MDAsMHgwOSwweGI0LDB4MDMsMHg2NywweDgwIH19LAorIHsxNiwgMHhmYzkwLCAwLCB7MHhjYSwweDQwLDB4ZTQsMHhjMCwweDBjLDB4MzAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNhMCwgMCwgezB4ODAsMHgwMCwweGUwLDB4ODAsMHhmYiwweDIyLDB4M2UsMHg0MCwweDBmLDB4ODAsMHgxMywweGU0LDB4MDAsMHhmYiwweDgwLDB4M2UgfX0sCisgezE2LCAweGZjYjAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTUsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg3MCwweDIzLDB4YWMsMHgyMCwweGZiIH19LAorIHsxNiwgMHhmY2MwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHg4ZiwweDgwLDB4MDMsMHhlOSwweDIwLDB4ZjksMHgwOCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MTMsMHhlMCB9fSwKKyB7MTYsIDB4ZmNkMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDAwLDB4YzYsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGZjZTAsIDAsIHsweDBmLDB4ZDEsMHg4MywweDM0LDB4NDAsMHhjZiwweDAwLDB4M2QsMHg0MCwweDBjLDB4ZDAsMHgwMywweGRlLDB4NTAsMHgwZCwweDAwIH19LAorIHsxNiwgMHhmY2YwLCAwLCB7MHg3MywweDQwLDB4MGMsMHhkMSwweDAzLDB4N2MsMHg0MCwweDg3LDB4MDIsMHhiMywweDAwLDB4MGQsMHhmNCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ZmQwMCwgMCwgezB4Y2UsMHgyMCwweDMyLDB4NDAsMHgwYywweGQwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkMTAsIDAsIHsweDgxLDB4MDQsMHg2MSwweDIyLDB4OGEsMHgwMCwweDIyLDB4MDAsMHgwYiwweDgwLDB4NDAsMHgyNSwweDAwLDB4ODksMHhjMywweDJlIH19LAorIHsxNiwgMHhmZDIwLCAwLCB7MHgyMCwweDBhLDB4OTgsMHgwMywweGExLDB4MDAsMHg4OSwweDAwLDB4MzYsMHg0MCwweDg4LDB4OTQsMHgwMiwweDBmLDB4MDEsMHhhYiB9fSwKKyB7MTYsIDB4ZmQzMCwgMCwgezB4MDAsMHgzMiwweGMwLDB4MDgsMHgwNCwweDBhLDB4MjksMHgwMCwweGE5LDB4MDIsMHhhMiwweDQwLDB4MGQsMHhiMCwweDBhLDB4MjAgfX0sCisgezE2LCAweGZkNDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MDAsMHgwMCwweDg5LDB4MDAsMHgyMiwweDYxIH19LAorIHsxNiwgMHhmZDUwLCAwLCB7MHgwYiwweDkwLDB4MDIsMHgyNSwweDAxLDB4OWIsMHg4OCwweDJlLDB4NjAsMHgwOCwweDg4LDB4MDIsMHhlOCwweDAwLDB4YjEsMHgwMiB9fSwKKyB7MTYsIDB4ZmQ2MCwgMCwgezB4MjQsMHg0MCwweDE4LDB4OTAsMHgwMiwweDJjLDB4MDAsMHhhYiwweDAxLDB4MjAsMHhjMSwweDA4LDB4YjQsMHg0MiwweDJjLDB4MDAgfX0sCisgezE2LCAweGZkNzAsIDAsIHsweDgyLDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDgwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyMCwweDQwLDB4MGIsMHgwMCwweDBhLDB4MDQsMHg0NiwweDgzLDB4MDEsMHgyYyB9fSwKKyB7MTYsIDB4ZmQ5MCwgMCwgezB4NDAsMHgxYSwweDAwLDB4MDYsMHg4MCwweDAwLDB4ODEsMHgwMCwweDI0LDB4NDAsMHgwOCwweDIwLDB4MGEsMHgwYywweDAxLDB4YTMgfX0sCisgezE2LCAweGZkYTAsIDAsIHsweDAwLDB4MjQsMHgwMCwweDA4LDB4ODAsMHgwMiwweDAwLDB4MDAsMHhhMSwweDAwLDB4MjAsMHg0MCwweDA5LDB4MzAsMHgwMiwweDAyIH19LAorIHsxNiwgMHhmZGIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDIsMHhjOCwweDAwLDB4MjIsMHgwMCB9fSwKKyB7MTYsIDB4ZmRjMCwgMCwgezB4MGYsMHg5MCwweDAyLDB4MjUsMHgwMCwweGRhLDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAyLDB4Y2MsMHgwMCwweGZkLDB4MDAgfX0sCisgezE2LCAweGZkZDAsIDAsIHsweDM3LDB4NDAsMHgwYywweDEwLDB4MTMsMHgyYywweDAyLDB4YWYsMHgwMCwweDMyLDB4YzAsMHgwZCwweGIwLDB4MDMsMHgyYywweDAwIH19LAorIHsxNiwgMHhmZGUwLCAwLCB7MHhjYSwweDAwLDB4MzIsMHg0MCwweDRjLDB4OTAsMHgwYiwweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmRmMCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDA3LDB4YzAsMHgwMywweGY0LDB4MWMsMHhmNCwweDAwLDB4M2YgfX0sCisgezE2LCAweGZlMDAsIDAsIHsweDAwLDB4MWYsMHhjMCwweDIzLDB4YjAsMHgwMiwweDlkLDB4MDEsMHgzZiwweDQwLDB4OGYsMHhjMCwweDA3LDB4ZmMsMHgwMiwweGZmIH19LAorIHsxNiwgMHhmZTEwLCAwLCB7MHgwMCwweDdiLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweDcwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ZmUyMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYSwweDAwLDB4Y2IsMHg4MCwweDNmLDB4MjQgfX0sCisgezE2LCAweGZlMzAsIDAsIHsweDBhLDB4YzEsMHgwMywweGZjLDB4MjQsMHhjZCwweDIwLDB4MzcsMHgwYSwweDBjLDB4YzIsMHg4MywweDMwLDB4ODAsMHhkYywweDAyIH19LAorIHsxNiwgMHhmZTQwLCAwLCB7MHgzZiwweGNjLDB4MGQsMHhkOSwweDAzLDB4M2MsMHg1OCwweGRmLDB4MzAsMHgzMywweGM4LDB4MGQsMHhmNCwweDIzLDB4M2MsMHg0MCB9fSwKKyB7MTYsIDB4ZmU1MCwgMCwgezB4ZmYsMHgwMCwweDNmLDB4YzUsMHg0ZiwweGYwLDB4MjMsMHhiMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZlNjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAyLDB4MGIsMHg4MiwweDJlLDB4MDgsMHgwZCwweGI3LDB4MDIsMHhmZCwweDAwLDB4ODMsMHgxOCwweDBhIH19LAorIHsxNiwgMHhmZTcwLCAwLCB7MHg1OCwweDBhLDB4ODQsMHhhMiwweGE1LDB4YTAsMHg4OSwweDMwLDB4MjIsMHg1NSwweDA4LDB4MTIsMHg2MiwweGJkLDB4OTAsMHg4ZiB9fSwKKyB7MTYsIDB4ZmU4MCwgMCwgezB4NjIsMHgyMSwweGQ2LDB4NDgsMHhmMywweDAyLDB4M2MsMHhjNSwweGJmLDB4NDgsMHgyZiwweGQ4LDB4NGIsMHhiNywweDAyLDB4ZTAgfX0sCisgezE2LCAweGZlOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZWMsMHgwMCwweDgzLDB4MDAsMHgyZSwweDg5IH19LAorIHsxNiwgMHhmZWEwLCAwLCB7MHgyOCwweDAwLDB4MDIsMHhlYywweGEwLDB4ODksMHgyMiwweDI4LDB4ODIsMHgwOCwweDEyLDB4MDIsMHgyOCwweDQwLDB4OWEsMHgwOCB9fSwKKyB7MTYsIDB4ZmViMCwgMCwgezB4MjgsMHhjOCwweDg4LDB4YjIsMHgwYSwweDBkLDB4MTAsMHg5MywweDEwLDB4YTAsMHhjOCwweDI4LDB4MzAsMHgwMiwweDRjLDB4MDAgfX0sCisgezE2LCAweGZlYzAsIDAsIHsweGIzLDB4NjAsMHgyYywweGM0LDB4MGIsMHgzMCwweGMyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZWQwLCAwLCB7MHhjMCwweDE1LDB4YWMsMHg0MCwweDhiLDB4MDAsMHgyZSwweDgwLDB4MDgsMHhiMSwweDAyLDB4ZWMsMHgwMiwweDhiLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ZmVlMCwgMCwgezB4ZDAsMHgwYSwweDkwLDB4MDIsMHhhYywweDAwLDB4MGIsMHgwMSwweDI2LDB4NDAsMHgwOCwweDk0LDB4MDIsMHg4YywweDAwLDB4OGIgfX0sCisgezE2LCAweGZlZjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MTAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhmZjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDhjLDB4MjAsMHhjYiwweDAyLDB4M2UsMHgyZCB9fSwKKyB7MTYsIDB4ZmYxMCwgMCwgezB4MDgsMHg4MCwweDAzLDB4ZWMsMHgwOCwweGM5LDB4ODAsMHgxZSwweDA0LDB4MGMsMHhiMCwweDAzLDB4MDEsMHgwOCwweDUwLDB4MTggfX0sCisgezE2LCAweGZmMjAsIDAsIHsweDNlLDB4NDAsMHgwYywweDA0LDB4MDMsMHgyYywweDAwLDB4ZGIsMHgwMSwweDMyLDB4YzAsMHgwYywweGIwLDB4MGIsMHgyYywweDA4IH19LAorIHsxNiwgMHhmZjMwLCAwLCB7MHhiYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDgwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmY0MCwgMCwgezB4ZTEsMHgwMCwweGJjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHg2MCwweDBmLDB4YzAsMHgyMywweGVjLDB4MDAsMHhmZiwweGMwLDB4YmUgfX0sCisgezE2LCAweGZmNTAsIDAsIHsweDYwLDB4OGYsMHhjOSwweDIzLDB4ZjYsMHg1MCwweGVkLDB4ODAsMHhiOCwweDUwLDB4YWYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZmIH19LAorIHsxNiwgMHhmZjYwLCAwLCB7MHgwMCwweDNmLDB4YzEsMHgwZSwweGIwLDB4MDMsMHhmYywweDA0LDB4ZmYsMHgwMiwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4ZmY3MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZWIsMHgwMCwweDMyLDB4ODAgfX0sCisgezE2LCAweGZmODAsIDAsIHsweDBkLDB4OTAsMHgwMywweDJjLDB4MDAsMHg4OSwweDAwLDB4M2UsMHg5OCwweDhjLDB4MzAsMHgwMywweDYxLDB4ODAsMHhmYSwweDQwIH19LAorIHsxNiwgMHhmZjkwLCAwLCB7MHgzZSwweDQwLDB4MmMsMHhhNSwweDAzLDB4MmMsMHgwMCwweGZiLDB4MDEsMHgzYywweGMwLDB4MmMsMHgzMCwweDAzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZmZhMCwgMCwgezB4ZGIsMHgwMiwweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhkMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZmYjAsIDAsIHsweGNhLDB4MDAsMHgyZSwweDgwLDB4OGIsMHg4MiwweGEwLDB4YzAsMHg4YywweDkwLDB4MDIsMHgzYywweDAwLDB4OGIsMHhmMCwweDIyIH19LAorIHsxNiwgMHhmZmMwLCAwLCB7MHhjMiwweDBkLDB4ODAsMHgwMiwweDI3LDB4MDAsMHg4YiwweDEwLDB4MjIsMHg0MCwweDA4LDB4ODAsMHgyMiwweDNjLDB4MDAsMHhiZiB9fSwKKyB7MTYsIDB4ZmZkMCwgMCwgezB4MDAsMHgyZiwweGMwLDB4MDgsMHhmMCwweDAyLDB4M2MsMHgwMCwweGJmLDB4MDEsMHhhMywweGMwLDB4MGIsMHhmMCwweDEyLDB4ZjIgfX0sCisgezE2LCAweGZmZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MWMsMHgyMCwweDQwIH19LAorIHsxNiwgMHhmZmYwLCAwLCB7MHgwOCwweDAwLDB4MDYsMHgyYywweDAwLDB4OWIsMHgwMCwweDIwLDB4ZDAsMHgwOCwweDIwLDB4MDIsMHg0YywweDAwLDB4YTMsMHgwMCB9fSwKKyB7MTYsIDB4ODAxMCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MTAsMHgwYSwweDBjLDB4MDAsMHhiYiwweDAwLDB4MjgsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAgfX0sCisgezE2LCAweDgwMjAsIDAsIHsweGIzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MDMwLCAwLCB7MHgyMiwweDExLDB4MWUsMHgwMCwweDk3LDB4YTAsMHgyMSwweGEwLDB4MDgsMHg3OSwweDAyLDB4MWUsMHgwMCwweDk3LDB4OTAsMHgyMSB9fSwKKyB7MTYsIDB4ODA0MCwgMCwgezB4NjAsMHgwOSwweGU4LDB4MjIsMHgzZSwweDAwLDB4YWYsMHg4NCwweDIxLDB4ZTQsMHg0OCwweDVjLDB4MDIsMHgxZSwweDAwLDB4YjcgfX0sCisgezE2LCAweDgwNTAsIDAsIHsweDkwLDB4MmQsMHhlMCwweDA5LDB4NzgsMHgwMCwweDFlLDB4MDksMHhiMywweDkwLDB4MjEsMHhlNCwweDBiLDB4NzgsMHgwMiwweGQ4IH19LAorIHsxNiwgMHg4MDYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgxOCwweDJjLDB4NDAsMHhiMywweGIwLDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4ODA3MCwgMCwgezB4MmMsMHg4MSwweDEzLDB4MGMsMHg0MiwweGQxLDB4MDAsMHhiMCwweGMwLDB4OGMsMHgzMCwweDAzLDB4NDgsMHgyMCwweGUzLDB4MDEgfX0sCisgezE2LCAweDgwODAsIDAsIHsweDNjLDB4YzAsMHgwYywweDMwLDB4MDMsMHgwYywweDAwLDB4ZjMsMHgxMCwweDNjLDB4YzAsMHhjZCwweDMyLDB4MGIsMHgwYywweDQwIH19LAorIHsxNiwgMHg4MDkwLCAwLCB7MHhkMywweDAwLDB4MzAsMHhjMCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBhMCwgMCwgezB4NDAsMHgxNSwweGJjLDB4MDAsMHhlNywweDAwLDB4M2YsMHg4MCwweDBiLDB4ZjEsMHgwMywweGZkLDB4MDAsMHg2ZCwweDAwLDB4MzIgfX0sCisgezE2LCAweDgwYjAsIDAsIHsweDQwLDB4MWYsMHg3MCwweDA3LDB4ZDgsMHg0MSwweGMzLDB4MTAsMHgzYiwweGMwLDB4MGYsMHhkMSwweDAzLDB4ZmQsMHgwMCwweGZmIH19LAorIHsxNiwgMHg4MGMwLCAwLCB7MHgxMCwweDNmLDB4YzAsMHgwZSwweGYwLDB4MDMsMHhlYywweDEwLDB4ZmYsMHgwOCwweDNmLDB4YzMsMHgwZiwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4ODBkMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhlYywweDA0LDB4ZmIsMHgwMiwweDNlLDB4NDAgfX0sCisgezE2LCAweDgwZTAsIDAsIHsweDBiLDB4YTAsMHgwMywweGFjLDB4MDAsMHhkYiwweDAwLDB4MzYsMHg4MCwweDBkLDB4YjAsMHgwMywweGFjLDB4MDAsMHhlOCwweDAwIH19LAorIHsxNiwgMHg4MGYwLCAwLCB7MHgzNiwweGMxLDB4MmUsMHg5MCwweDAzLDB4MmMsMHgwMCwweGNiLDB4YTAsMHgzNiwweGRjLDB4MGYsMHhiMCwweDAzLDB4MmQsMHg2OCB9fSwKKyB7MTYsIDB4ODEwMCwgMCwgezB4ZmIsMHhhMCwweDkyLDB4YzIsMHgwYywweGIxLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxMTAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDA4LDB4MzcsMHgwMCwweDJkLDB4YzAsMHgwYiwweGUwLDB4MDIsMHgxZCwweDgwLDB4YjcsMHgwNCwweDIzIH19LAorIHsxNiwgMHg4MTIwLCAwLCB7MHgwMCwweDBhLDB4NDAsMHgwMiwweDFjLDB4MTgsMHg4NCwweDAwLDB4MjUsMHhjMCwweDE4LDB4NTAsMHgzMiwweDBkLDB4ODAsMHhhMyB9fSwKKyB7MTYsIDB4ODEzMCwgMCwgezB4MzAsMHgyMSwweGNjLDB4MGIsMHgzNCwweDgyLDB4MWMsMHgxMCwweGI3LDB4MzAsMHgyMSwweGM4LDB4MDgsMHg3MCwweDAyLDB4ZDIgfX0sCisgezE2LCAweDgxNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgyMCwweGI3LDB4ODAsMHgyZCwweDYwIH19LAorIHsxNiwgMHg4MTUwLCAwLCB7MHgwYiwweGZjLDB4MjIsMHg5ZSwweDAwLDB4OGQsMHg4MCwweDI1LDB4YTAsMHgwOCwweGY4LDB4MjIsMHg5MiwweDAwLDB4YjQsMHg4MCB9fSwKKyB7MTYsIDB4ODE2MCwgMCwgezB4MjUsMHhlMCwweDA4LDB4ZjgsMHgwMiwweDFlLDB4MDAsMHg4NywweGIwLDB4MjEsMHhlMCwweDA5LDB4N2EsMHgwMiwweDFlLDB4MTggfX0sCisgezE2LCAweDgxNzAsIDAsIHsweGIzLDB4ODAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTgwLCAwLCB7MHg0OCwweDA0LDB4YzUsMHgyMCwweGIzLDB4MDEsMHgyYywweGQ4LDB4MGIsMHgzYywweDAyLDB4MmMsMHgwOCwweGI5LDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ODE5MCwgMCwgezB4MDMsMHgwYSwweDAwLDB4ODIsMHgyMiwweDA4LDB4OTAsMHgwZCwweDI2LDB4ZTQsMHgwOCwweDEwLDB4MDIsMHgwYywweDAwLDB4YTMgfX0sCisgezE2LCAweDgxYTAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDBiLDB4MzAsMHgwMiwweDZjLDB4MDAsMHhiMywweDAwLDB4MjIsMHhjMCwweDI4LDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHg4MWIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweDk5LDB4MDAsMHhmYSwweDAyLDB4M2YsMHg5MCB9fSwKKyB7MTYsIDB4ODFjMCwgMCwgezB4MGYsMHhlYywweDIzLDB4YTgsMHgwMCwweGRhLDB4MDAsMHgzNSwweDgwLDB4MGQsMHhlMCwweDAyLDB4YmEsMHgwMiwweGZlLDB4YzIgfX0sCisgezE2LCAweDgxZDAsIDAsIHsweGI2LDB4YTAsMHgwZSwweGU0LDB4MGIsMHgyOCwweDAwLDB4Y2EsMHgwMCwweGIyLDB4ODAsMHgwZiwweGEwLDB4MGIsMHgyOCwweDAwIH19LAorIHsxNiwgMHg4MWUwLCAwLCB7MHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFmMCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODIsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UgfX0sCisgezE2LCAweDgyMDAsIDAsIHsweDAwLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHg0MCwweGU4LDB4MTAsMHgzYSwweDAwLDB4NGYsMHg4NCwweDgzLDB4ZTAsMHgwMCwweGY4IH19LAorIHsxNiwgMHg4MjEwLCAwLCB7MHgwMCwweDNhLDB4MDAsMHgwZiwweDAwLDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4ODIyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlNSwweDAwLDB4YzksMHgwMiwweDNlLDB4NDAgfX0sCisgezE2LCAweDgyMzAsIDAsIHsweDBmLDB4OTAsMHgyMywweDI0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg2OCwweDJmLDB4MTAsMHgwMywweDI0LDB4MDAsMHhlOSwweDE0IH19LAorIHsxNiwgMHg4MjQwLCAwLCB7MHgzMiwweDQwLDB4MGQsMHg5MCwweDBiLDB4MDQsMHgwMCwweGQ5LDB4MDAsMHgxZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ODI1MCwgMCwgezB4YzksMHgwMCwweDM2LDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgyNjAsIDAsIHsweDgwLDB4MTQsMHg2NCwweDAwLDB4ODksMHgwMSwweDJlLDB4NDAsMHg0YiwweDkwLDB4MTIsMHgyNCwweDAwLDB4ODksMHhjMiwweGEyIH19LAorIHsxNiwgMHg4MjcwLCAwLCB7MHg2MCwweDg4LDB4OTAsMHgwMywweDY0LDB4MDAsMHg4OSwweGMxLDB4YTIsMHg0MCwweDQ4LDB4MTYsMHgwMywweDY0LDB4MDIsMHg4OSB9fSwKKyB7MTYsIDB4ODI4MCwgMCwgezB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDIyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgzZSwweDQwLDB4MjgsMHg5MCwweDBhLDB4MjAgfX0sCisgezE2LCAweDgyOTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA0LDB4MjQsMHgwMCwweDg5LDB4MDIsMHgyZSwweDQwIH19LAorIHsxNiwgMHg4MmEwLCAwLCB7MHgwYiwweDEwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgxMCwweDIyLDB4NDAsMHg4OSwweDkwLDB4MDIsMHhhYywweDAwLDB4YTEsMHgwOCB9fSwKKyB7MTYsIDB4ODJiMCwgMCwgezB4MjIsMHg0MCwweDA5LDB4OTgsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAgfX0sCisgezE2LCAweDgyYzAsIDAsIHsweDg5LDB4MDAsMHgyNiwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MmQwLCAwLCB7MHgwOCwweDAwLDB4MjQsMHgwMCwweDgxLDB4MDAsMHgyYywweDQxLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MSwweDgxLDB4MjAsMHgyMiB9fSwKKyB7MTYsIDB4ODJlMCwgMCwgezB4NDgsMHgwOCwweDEyLDB4MDIsMHhjNCwweDgxLDB4ODEsMHgyNCwweDAyLDB4NDgsMHgwYSwweDkwLDB4MDIsMHg4NCwweGEwLDB4ODEgfX0sCisgezE2LCAweDgyZjAsIDAsIHsweDI4LDB4NmMsMHg0YSwweDA4LDB4MTIsMHhkMiwweDA0LDB4YTEsMHg4MSwweDI4LDB4MmMsMHg0YSwweDA4LDB4MTIsMHg4MiwweDAyIH19LAorIHsxNiwgMHg4MzAwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwOCwweDYxLDB4NDAsMHhjOCwweDAwLDB4MmUsMHgxNCB9fSwKKyB7MTYsIDB4ODMxMCwgMCwgezB4MGYsMHg4NSwweDBiLDB4MjEsMHg0MiwweGNhLDB4NTAsMHgyMiwweDE0LDB4MGQsMHg4NSwweDQzLDB4YTEsMHg0MCwweGU4LDB4NTAgfX0sCisgezE2LCAweDgzMjAsIDAsIHsweDMwLDB4MDAsMHgwZCwweDg1LDB4MDIsMHhhMSwweGMwLDB4ZDgsMHgyMCwweDNhLDB4MDgsMHgyYywweDgyLDB4MGIsMHgyMCwweDgyIH19LAorIHsxNiwgMHg4MzMwLCAwLCB7MHhjOCwweDIwLDB4MzQsMHgwOSwweDhjLDB4ODIsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODM0MCwgMCwgezB4OTgsMHgwZCwweGZjLDB4MDIsMHhmOSwweDAwLDB4M2YsMHg0MCwweDRmLDB4ZDEsMHgwMywweGU0LDB4NDAsMHhmNSwweDE0LDB4YmYgfX0sCisgezE2LCAweDgzNTAsIDAsIHsweDQ0LDB4MGQsMHg1MSwweDIzLDB4NWMsMHg0MCwweGY1LDB4MTAsMHgxZiwweDRlLDB4NGQsMHg1MCwweDAzLDB4NjQsMHgwOCwweGY5IH19LAorIHsxNiwgMHg4MzYwLCAwLCB7MHgyOCwweDNlLDB4NGEsMHg4ZiwweDkyLDB4ODMsMHhlNCwweGEwLDB4ZjksMHgyOCwweDNhLDB4NGIsMHgwZiwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4ODM3MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhmNCwweDQwLDB4ZmQsMHgwMCwweDMwLDB4NDAgfX0sCisgezE2LCAweDgzODAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhkZCwweDAwLDB4M2IsMHg0MCwweDBlLDB4OTAsMHgwMywweDc0LDB4MDAsMHg1ZCwweDAwIH19LAorIHsxNiwgMHg4MzkwLCAwLCB7MHgzNiwweDY0LDB4MGQsMHhkMCwweDAwLDB4YTYsMHgwMCwweGY5LDB4NDAsMHgzMiwweDc4LDB4MGMsMHg5OSwweDAzLDB4MjQsMHg0MCB9fSwKKyB7MTYsIDB4ODNhMCwgMCwgezB4YzksMHg5MCwweDMyLDB4NTAsMHgwZiwweDliLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzYjAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDgwLDB4YjgsMHgwMCwweDIyLDB4MDEsMHgwOCwweDgwLDB4MGEsMHgyMCwweDAwLDB4ODgsMHgwMCwweDJhIH19LAorIHsxNiwgMHg4M2MwLCAwLCB7MHgwMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjIsMHgyMCwweDA4LDB4OGEsMHg4YiwweGUxLDB4MDAsMHhiOCB9fSwKKyB7MTYsIDB4ODNkMCwgMCwgezB4ODAsMHgyMiwweDMwLDB4MjgsMHgwZCwweDAyLDB4MjIsMHgwMCwweGQ4LDB4ZTQsMHgyMiwweDI4LDB4MGIsMHg4ZiwweDBhLDB4MGUgfX0sCisgezE2LCAweDgzZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweGIxLDB4MDAsMHhhMCwweDQwIH19LAorIHsxNiwgMHg4M2YwLCAwLCB7MHgwOCwweDEwLDB4MDIsMHgwNCwweDAwLDB4ODksMHgwMCwweDA4LDB4NDAsMHgwYSwweDkwLDB4NDIsMHg0NCwweDAwLDB4OTEsMHgwMCB9fSwKKyB7MTYsIDB4ODQwMCwgMCwgezB4MjAsMHg1OCwweDI4LDB4OTAsMHgwMiwweDg1LDB4MDAsMHg4MSwweDIwLDB4YTAsMHg0YywweDA5LDB4MTIsMHgwYSwweDA0LDB4ODAgfX0sCisgezE2LCAweDg0MTAsIDAsIHsweDkxLDB4NDAsMHhhMCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NDIwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMCwweGI5LDB4MDIsMHgyMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDQsMHgwMCwweDg5LDB4MDEsMHgyMiB9fSwKKyB7MTYsIDB4ODQzMCwgMCwgezB4NDAsMHgyOCwweDkwLDB4MjIsMHgwNCwweDAwLDB4ODksMHgxMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjEgfX0sCisgezE2LCAweDg0NDAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDgxLDB4OTAsMHgwMiwweDA0LDB4MDAsMHg5MSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHg4NDUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU1LDB4MDAsMHhmMSwweDAwLDB4MzIsMHg2MCB9fSwKKyB7MTYsIDB4ODQ2MCwgMCwgezB4MmMsMHg5MiwweDEzLDB4MjQsMHgwMiwweGQxLDB4MTAsMHgzYSwweDQwLDB4MGUsMHgxMiwweDAzLDB4NjYsMHgwNCwweGQ5LDB4MDAgfX0sCisgezE2LCAweDg0NzAsIDAsIHsweGI2LDB4NDAsMHgwZCwweDE5LDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHgwOSwweDkwLDB4MDEsMHgyNCwweDAwIH19LAorIHsxNiwgMHg4NDgwLCAwLCB7MHhkOSwweDAyLDB4MjIsMHg0MCwweDBmLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODQ5MCwgMCwgezB4MmEsMHgwMSwweGE1LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2NCwweDBmLDB4MTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDgxLDB4M2UgfX0sCisgezE2LCAweDg0YTAsIDAsIHsweDY2LDB4OGYsMHg5MCwweDIzLDB4ZTQsMHg4MCwweGY5LDB4MDQsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4ZTQsMHgwNCwweGY5IH19LAorIHsxNiwgMHg4NGIwLCAwLCB7MHgwMCwweDNjLDB4NDAsMHgwZSwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDEwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4ODRjMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJhLDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgyNCwweDNlLDB4MDAgfX0sCisgezE2LCAweDg0ZDAsIDAsIHsweDJjLDB4ODQsMHgwMywweDIwLDB4MDAsMHhiOCwweDIwLDB4M2UsMHgwMCwweDhjLDB4ODAsMHgwMywweGEwLDB4MDAsMHg3MCwweDgyIH19LAorIHsxNiwgMHg4NGUwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjAsMHgwOCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MmMsMHg4MCwweDBiLDB4MjAsMHgwOCB9fSwKKyB7MTYsIDB4ODRmMCwgMCwgezB4YzgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1MDAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDA0LDB4YmUsMHg4MCwweDNhLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDA0LDB4OGUsMHgwMCwweDZkIH19LAorIHsxNiwgMHg4NTEwLCAwLCB7MHg5MCwweDBkLDB4YTAsMHgwMiwweDNhLDB4MDAsMHg4ZSwweDgwLDB4YTIsMHg4MCwweDBlLDB4ZTAsMHgwYiwweDY4LDB4MDAsMHhiYSB9fSwKKyB7MTYsIDB4ODUyMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGRhLDB4MDAsMHgyZSwweDgwLDB4MDgsMHhhMCwweDAyLDB4Y2EgfX0sCisgezE2LCAweDg1MzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDgxLDB4NGMsMHgwMCwweGIxLDB4MDAsMHgyYywweGMwIH19LAorIHsxNiwgMHg4NTQwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgwYywweDE4LDB4YTMsMHgwMiwweDJjLDB4MTAsMHg4OCwweDMwLDB4MDYsMHg4MiwweDgxLDB4YTAsMHgwMCB9fSwKKyB7MTYsIDB4ODU1MCwgMCwgezB4MmEsMHhjMCwweDBiLDB4MzAsMHgwYSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDFhLDB4YjAsMHgwMiwweDhjLDB4MDEgfX0sCisgezE2LCAweDg1NjAsIDAsIHsweDgzLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NTcwLCAwLCB7MHgyMCwweDAxLDB4MWMsMHgxMCwweGI0LDB4MGEsMHgyYiwweGM4LDB4MDgsMHgzMSwweDI2LDB4MWMsMHgwMCwweDg2LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4ODU4MCwgMCwgezB4YzAsMHgwOSwweDcyLDB4MDIsMHgxZCwweDAwLDB4YTUsMHg0MCwweDI5LDB4YzAsMHgwYSwweDYwLDB4MDIsMHg1YywweDg4LDB4YjMgfX0sCisgezE2LCAweDg1OTAsIDAsIHsweDIwLDB4MjUsMHhjOCwweDBhLDB4NzIsMHgwMiwweDljLDB4ODAsMHg5NywweDIwLDB4MmMsMHhlOCwweDgwLDB4NzIsMHgwMiwweGU4IH19LAorIHsxNiwgMHg4NWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwOCwweDE2LDB4MDAsMHhiNSwweDgwLDB4M2QsMHhlMiB9fSwKKyB7MTYsIDB4ODViMCwgMCwgezB4MGMsMHg3YSwweDhiLDB4MGUsMHhjMCwweGE3LDB4ODEsMHgyYywweDIwLDB4MGMsMHhmYywweDAzLDB4OTIsMHgwMiwweGVmLDB4ODAgfX0sCisgezE2LCAweDg1YzAsIDAsIHsweDM5LDB4ZTQsMHgwYiwweGQ4LDB4MDEsMHgxZiwweDAwLDB4ZjcsMHg4MCwweGIzLDB4ZjQsMHg4ZSwweDc5LDB4MDMsMHg4ZSwweDAwIH19LAorIHsxNiwgMHg4NWQwLCAwLCB7MHhjNywweGM0LDB4M2QsMHhlOCwweDJjLDB4N2IsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODVlMCwgMCwgezB4MDgsMHgxZCwweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhkZCwweDg3LDB4YjYsMHgwMywweGVkLDB4Y2MsMHhlOSwweDAwLDB4M2UgfX0sCisgezE2LCAweDg1ZjAsIDAsIHsweDQwLDB4MGYsMHhiMCwweDA3LDB4Y2MsMHgxMCwweDBiLDB4MDAsMHgzNiwweGQ4LDB4MGYsMHg4MCwweDQzLDB4YWQsMHg4MCwweGZiIH19LAorIHsxNiwgMHg4NjAwLCAwLCB7MHgyOCwweDNhLDB4YzAsMHgwZCwweGI0LDB4MDMsMHg2YywweGUyLDB4ZWIsMHg2MCwweDNlLDB4ZDQsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4ODYxMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4ZmUsMHg5MCwweDNmLDB4ZTUgfX0sCisgezE2LCAweDg2MjAsIDAsIHsweDBlLDB4ZjgsMHgwMywweDNlLDB4MTAsMHhmZiwweDkwLDB4MTcsMHg2MCwweDBmLDB4ZmMsMHgwMywweDdhLDB4MDAsMHhlZSwweDgwIH19LAorIHsxNiwgMHg4NjMwLCAwLCB7MHgzNywweGUyLDB4MGUsMHg3OCwweDBmLDB4ZmYsMHg0MCwweGVmLDB4ODgsMHgxZiwweGUwLDB4MGMsMHhmOCwweDgzLDB4ZmUsMHg4MCB9fSwKKyB7MTYsIDB4ODY0MCwgMCwgezB4Y2YsMHhkMCwweGIzLDB4ZjAsMHgwYywweGY4LDB4YzMsMHgxMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2NTAsIDAsIHsweGE4LDB4MTEsMHg5YywweDQwLDB4YjQsMHgxMCwweDBmLDB4Y2MsMHgwMCwweDcyLDB4MDIsMHgxYywweDAwLDB4YjYsMHgwMiwweDA5IH19LAorIHsxNiwgMHg4NjYwLCAwLCB7MHhjMCwweDI4LDB4ZjAsMHgwMiwweDk4LDB4MDAsMHhhNiwweDAwLDB4MjEsMHhjMCwweDBiLDB4NjAsMHgwMywweGZjLDB4MDIsMHg4NyB9fSwKKyB7MTYsIDB4ODY3MCwgMCwgezB4MDAsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGUsMHgwMCwweDhmLDB4MTAsMHgyMSwweGMwLDB4MDgsMHhmMCwweDAzLDB4NmEgfX0sCisgezE2LCAweDg2ODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OTQsMHgwMCwweGI2LDB4MDIsMHgyZiwweGMyIH19LAorIHsxNiwgMHg4NjkwLCAwLCB7MHgxYSwweDMwLDB4ODAsMHgxYywweDAwLDB4YjYsMHgwOCwweDAxLDB4NDAsMHgwYSwweGYwLDB4MDIsMHgxOCwweDAwLDB4ODcsMHgwMCB9fSwKKyB7MTYsIDB4ODZhMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4ZDAsMHgwMiwweDljLDB4MTAsMHg4NywweDAwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4NDQgfX0sCisgezE2LCAweDg2YjAsIDAsIHsweDg3LDB4MTAsMHg2NCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MDYsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NmMwLCAwLCB7MHg2MCwweDE0LDB4Y2UsMHg2MCwweGIwLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzNCwweDBhLDB4MGMsMHgwOCwweGIwLDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4ODZkMCwgMCwgezB4NDAsMHgwOCwweDMwLDB4YTIsMHg4OSwweDgwLDB4YTIsMHg2MiwweDIwLDB4ZTAsMHgwYiwweDAwLDB4MGEsMHhjYywweDA4LDB4ODMgfX0sCisgezE2LCAweDg2ZTAsIDAsIHsweDAwLDB4NmMsMHhjMCwweDA4LDB4MzAsMHg1MiwweGNjLDB4MDAsMHg4MywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweDU4IH19LAorIHsxNiwgMHg4NmYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFlLDB4MDAsMHhmOCwweDAwLDB4M2YsMHhkMCB9fSwKKyB7MTYsIDB4ODcwMCwgMCwgezB4MGUsMHhmYywweDAzLDB4M2MsMHgwMCwweGY5LDB4MDAsMHg5MiwweDg0LDB4MGYsMHhmYywweDAzLDB4NjQsMHgwMCwweDgwLDB4MDAgfX0sCisgezE2LCAweDg3MTAsIDAsIHsweGI3LDB4YzMsMHgwZiwweGI4LDB4ODMsMHhiYywweDA0LDB4ZWYsMHgwMCwweDNmLDB4YzAsMHgzYywweGYwLDB4MDMsMHhmYywweDAyIH19LAorIHsxNiwgMHg4NzIwLCAwLCB7MHhjZiwweDAwLDB4MzcsMHhjMCwweDI4LDB4ZjAsMHgxMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODczMCwgMCwgezB4ODAsMHgwMCwweGVjLDB4MDAsMHhmOCwweDQxLDB4M2UsMHhjOCwweDBmLDB4MzIsMHgwMywweGVjLDB4MDAsMHhmOCwweDAwLDB4M2EgfX0sCisgezE2LCAweDg3NDAsIDAsIHsweGM0LDB4MGYsMHhiMSwweDAzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzNiwweGMwLDB4MGYsMHhlNCwweDBiLDB4ZWMsMHgwNCwweGZiIH19LAorIHsxNiwgMHg4NzUwLCAwLCB7MHgwMCwweDNlLDB4YzEsMHgwZiwweGIwLDB4NDMsMHhlYywweDA0LDB4ZmIsMHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlNCB9fSwKKyB7MTYsIDB4ODc2MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmNCwweDAwLDB4ZmMsMHg4MCwweDNmLDB4YzAgfX0sCisgezE2LCAweDg3NzAsIDAsIHsweDFmLDB4ZjAsMHgwMywweDNjLDB4MDgsMHhmYiwweDAwLDB4MzMsMHg4MCwweDJlLDB4ZjAsMHgxMywweGE0LDB4MDQsMHhjYiwweDAwIH19LAorIHsxNiwgMHg4NzgwLCAwLCB7MHhiOSwweGMwLDB4MmMsMHhkOCwweDBiLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MDksMHg3MCwweDAwLDB4MmMsMHgwNCB9fSwKKyB7MTYsIDB4ODc5MCwgMCwgezB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg3YTAsIDAsIHsweGMxLDB4MDAsMHg2YywweDAwLDB4YjgsMHg4MCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDMsMHg2YywweDAwLDB4YjksMHgxNiwweDI4IH19LAorIHsxNiwgMHg4N2IwLCAwLCB7MHg3MiwweDA4LDB4YjAsMHgyMiwweDI3LDB4NDAsMHhkYiwweDAwLDB4MjIsMHhjMCwweDA4LDB4YmQsMHg4MiwweDJjLDB4MDgsMHhiYiB9fSwKKyB7MTYsIDB4ODdjMCwgMCwgezB4MDAsMHgyZSwweGMwLDB4NDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMxLDB4MGIsMHhiMCwweDAyLDB4ZTAgfX0sCisgezE2LCAweDg3ZDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGI4LDB4NjAsMHgyZSwweGMwIH19LAorIHsxNiwgMHg4N2UwLCAwLCB7MHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4YjEsMHgwMCwweDJhLDB4ODQsMHg0YSwweDMwLDB4MjIsMHhhYywweDIwLDB4OTgsMHg4MCB9fSwKKyB7MTYsIDB4ODdmMCwgMCwgezB4MmEsMHhjMCwweDA4LDB4MzAsMHgwMiwweGFjLDB4MDAsMHgzYiwweDAwLDB4MmMsMHhjMCwweDBhLDB4YjAsMHgwMiwweGFjLDB4MDggfX0sCisgezE2LCAweDg4MDAsIDAsIHsweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDQyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ODEwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwMSwweGIwLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4NGMsMHgwNCwweGIwLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ODgyMCwgMCwgezB4ODAsMHgwOCwweDMwLDB4MDIsMHgwMCwweDAwLDB4MTAsMHgwNCwweDI4LDB4YzAsMHgwOCwweDIwLDB4NDIsMHg4YywweDAwLDB4YjMgfX0sCisgezE2LCAweDg4MzAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDQyLDB4MzAsMHgwYSwweDhjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDhiLDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHg4ODQwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY0LDB4MDAsMHhmOCwweDUwLDB4M2YsMHhjMCB9fSwKKyB7MTYsIDB4ODg1MCwgMCwgezB4MGIsMHhmMCwweDAzLDB4M2MsMHgwMCwweGZhLDB4MDQsMHgzMiwweDgwLDB4MGUsMHhmMCwweDIzLDB4YWMsMHgwMCwweGQ5LDB4MDAgfX0sCisgezE2LCAweDg4NjAsIDAsIHsweDNiLDB4YzAsMHgwYywweDkwLDB4MDMsMHhiYywweDA0LDB4ZmYsMHgwMCwweDNkLDB4YzAsMHgyZSwweGYwLDB4MGIsMHgzYywweDAwIH19LAorIHsxNiwgMHg4ODcwLCAwLCB7MHhmZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODg4MCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDA3LDB4ZjAsMHgwMywweGZjLDB4MDQsMHg3YywweDAyLDB4YjUgfX0sCisgezE2LCAweDg4OTAsIDAsIHsweDAwLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDEzLDB4N2MsMHgwMCwweGZmIH19LAorIHsxNiwgMHg4OGEwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHgwZCwweGYwLDB4MDMsMHg2ZCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgxZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4ODhiMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkMiwweDAwLDB4ZDUsMHg4MCwweDMzLDB4MGEgfX0sCisgezE2LCAweDg4YzAsIDAsIHsweDRjLDB4ZjgsMHgwMywweGYyLDB4MDAsMHhmYywweDAwLDB4MzcsMHgyNiwweDFmLDB4Y2EsMHgwMywweGJjLDB4YzQsMHhjZiwweDIwIH19LAorIHsxNiwgMHg4OGQwLCAwLCB7MHgzMywweGU0LDB4MGYsMHg3OCwweDAzLDB4M2UsMHg0NCwweGNmLDB4MDAsMHgzYiwweGNlLDB4OWYsMHg2OCwweDEzLDB4ZDAsMHgwMCB9fSwKKyB7MTYsIDB4ODhlMCwgMCwgezB4Y2QsMHg4MCwweGIzLDB4NjAsMHgwZiwweGZhLDB4ODMsMHhmMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4ZjAsIDAsIHsweDgwLDB4MTAsMHhlMCwweDgwLDB4YzksMHgyOCwweDIyLDB4MzAsMHgwOCwweGIyLDB4MjIsMHhlYSwweDAxLDB4YjgsMHg4MiwweDIwIH19LAorIHsxNiwgMHg4OTAwLCAwLCB7MHg1MCwweDRmLDB4OWMsMHgwMCwweGE4LDB4ZDEsMHhkYiwweDEwLDB4YTYsMHhlMCwweDE3LDB4YjgsMHgwMywweGVjLDB4ODAsMHhkYiB9fSwKKyB7MTYsIDB4ODkxMCwgMCwgezB4MDgsMHgxZiwweGQwLDB4MGIsMHhiOCwweDAyLDB4ZjYsMHgwMCwweGZiLDB4ODAsMHgyMiwweDQwLDB4MGIsMHhiMCwweDAyLDB4NjAgfX0sCisgezE2LCAweDg5MjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHgyMCwweDgxLDB4ODAsMHgyMCwweDAwIH19LAorIHsxNiwgMHg4OTMwLCAwLCB7MHg4YiwweDMwLDB4ODIsMHhjMCwweDAwLDB4YjAsMHgxMCwweDI4LDB4MDgsMHg4YiwweDExLDB4MzAsMHhjNCwweDg0LDB4OTAsMHgyOCB9fSwKKyB7MTYsIDB4ODk0MCwgMCwgezB4MjQsMHhjOCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweDEwLDB4MDQsMHhjOCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAgfX0sCisgezE2LCAweDg5NTAsIDAsIHsweGIzLDB4MDAsMHgyNCwweDQwLDB4MGIsMHgzMCwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OTYwLCAwLCB7MHhjMCwweDE1LDB4YTYsMHgwMCwweDgxLDB4MDAsMHgyMiwweDEwLDB4MGIsMHhiMCwweDEyLDB4ZWEsMHgyMCwweGJiLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ODk3MCwgMCwgezB4NzAsMHgwYSwweDljLDB4MDIsMHg2MiwweDAwLDB4OTgsMHg4OCwweDI2LDB4YzgsMHgwMiwweGIyLDB4MDIsMHg4ZSwweDA4LDB4OGIgfX0sCisgezE2LCAweDg5ODAsIDAsIHsweDE4LDB4MjIsMHhjMCwweDBiLDB4YTAsMHgwMiwweGVlLDB4MjAsMHgzYiwweDAwLDB4MjYsMHg0MCwweDBiLDB4YjAsMHgwMiwweDcwIH19LAorIHsxNiwgMHg4OTkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGUwLDB4MDAsMHhjYiwweDAwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4ODlhMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZTcsMHgwMCwweGI4LDB4NTIsMHgzZSwweDIwLDB4NGIsMHgwYywweDQzLDB4ZWYsMHg4MiwweDliLDB4YzAgfX0sCisgezE2LCAweDg5YjAsIDAsIHsweDMyLDB4YzAsMHgwYiwweGIwLDB4MDIsMHg2YywweDAxLDB4OGIsMHg4MCwweDJlLDB4YzAsMHgwYiwweGEwLDB4ODMsMHhlNiwweDAwIH19LAorIHsxNiwgMHg4OWMwLCAwLCB7MHhmYiwweDAwLDB4MzYsMHg0MCwweDBmLDB4ZjAsMHgwMywweGQwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODlkMCwgMCwgezB4ZTAsMHgwMSwweGIwLDB4MDIsMHhmZiwweDA0LDB4M2YsMHg5MCwweDBjLDB4ZjEsMHgwMSwweGY0LDB4MDgsMHg3ZCwweDgwLDB4MzcgfX0sCisgezE2LCAweDg5ZTAsIDAsIHsweDAwLDB4MGYsMHhjMCwweDIzLDB4OTgsMHgwMCwweGY3LDB4MDAsMHgyYiwweGUwLDB4MGYsMHhmOCwweDIzLDB4ZmMsMHgwNiwweGZiIH19LAorIHsxNiwgMHg4OWYwLCAwLCB7MHg4MywweGJmLDB4YzAsMHg4NywweGQwLDB4MDMsMHhkYywweDAwLDB4ZWYsMHgwMCwweDNiLDB4YzAsMHgwZiwweGIwLDB4MDEsMHhmOCB9fSwKKyB7MTYsIDB4OGEwMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNiwweDAwLDB4Y2IsMHgwMCwweDMzLDB4ODAgfX0sCisgezE2LCAweDhhMTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGUxLDB4MTAsMHhmMiwweDQwLDB4YjIsMHgwMCwweDNkLDB4OTQsMHgxNywweDJkLDB4NDQsMHhmYSwweDQxIH19LAorIHsxNiwgMHg4YTIwLCAwLCB7MHgzMiwweGMwLDB4OWYsMHhiMCwweDIzLDB4MmMsMHgwMiwweGNiLDB4NDAsMHgzMiwweGMwLDB4NGYsMHg5MCwweDAzLDB4M2QsMHgwMCB9fSwKKyB7MTYsIDB4OGEzMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhNDAsIDAsIHsweDg4LDB4MDUsMHgyNiwweDAwLDB4OGIsMHg3MSwweDIwLDB4ZDUsMHgwMywweDk5LDB4MDIsMHhlMCwweDAwLDB4YmIsMHg4MCwweDIyIH19LAorIHsxNiwgMHg4YTUwLCAwLCB7MHg2MCwweDFjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhiOCwweDAyLDB4MjIsMHhjMiwweDBiLDB4MzIsMHgwMiwweDJjLDB4MDEsMHg4ZiB9fSwKKyB7MTYsIDB4OGE2MCwgMCwgezB4MDIsMHhkNywweGMwLDB4MGIsMHhhMCwweDAzLDB4NmQsMHg0MCwweDUzLDB4ODAsMHgyZSwweGMwLDB4MGUsMHhmMCwweDQzLDB4NzIgfX0sCisgezE2LCAweDhhNzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NjgsMHgwMiwweDgwLDB4MDAsMHgyNCwweDAwIH19LAorIHsxNiwgMHg4YTgwLCAwLCB7MHgwYiwweDM1LDB4MjYsMHhjMiwweDAwLDB4YjAsMHg5MCwweDIwLDB4YzAsMHg4OCwweDAwLDB4MDIsMHg0ZiwweDIwLDB4YjMsMHgwMiB9fSwKKyB7MTYsIDB4OGE5MCwgMCwgezB4NjAsMHhlMiwweDFiLDB4MzgsMHgwMiwweDBjLDB4MDAsMHg4OCwweDAwLDB4NjAsMHhjMCwweDBiLDB4MzQsMHg4MiwweDRjLDB4MDIgfX0sCisgezE2LCAweDhhYTAsIDAsIHsweGExLDB4OTAsMHgyYywweDQwLDB4MGIsMHgzMCwweDAyLDB4MzAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YWIwLCAwLCB7MHgyMCwweDAxLDB4M2EsMHgwOCwweDhjLDB4YTAsMHgyZCwweDIwLDB4NGIsMHg3OCwweDAyLDB4ZGEsMHgwMCwweGIyLDB4OTAsMHgyMSB9fSwKKyB7MTYsIDB4OGFjMCwgMCwgezB4NjYsMHg0OCwweDc5LDB4MDIsMHhkZSwweDQwLDB4YjcsMHg5MSwweGExLDB4ZTAsMHhkYiwweGY4LDB4MDIsMHgxZSwweDQwLDB4ODQgfX0sCisgezE2LCAweDhhZDAsIDAsIHsweDkwLDB4MDEsMHhlMCwweDhiLDB4ZjksMHgwMiwweDVlLDB4MDEsMHg5NywweDgwLDB4MmQsMHg2MCwweDBhLDB4NzgsMHgwMCwweDQ4IH19LAorIHsxNiwgMHg4YWUwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MCwweDAwLDB4MjQsMHgwNCB9fSwKKyB7MTYsIDB4OGFmMCwgMCwgezB4MGYsMHgzMiwweDAzLDB4YzQsMHhhMCwweGYxLDB4NDIsMHgzMCwweGM0LDB4MmMsMHgzMSwweDAyLDB4NDQsMHgwMCwweGYxLDB4MTEgfX0sCisgezE2LCAweDhiMDAsIDAsIHsweGEwLDB4YzAsMHgwYiwweDMwLDB4MGIsMHgwYywweDQyLDB4ODMsMHgwMCwweDAwLDB4YzAsMHgwZiwweDMwLDB4MDMsMHg0YywweDAyIH19LAorIHsxNiwgMHg4YjEwLCAwLCB7MHhlMywweDAwLDB4M2MsMHg0MCwweDBiLDB4MzAsMHgwMSwweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGIyMCwgMCwgezB4YzAsMHgxZCwweGJjLDB4MDAsMHhmYywweGE1LDB4MzMsMHhjMCwweDBmLDB4ZDAsMHgwMywweGZjLDB4MDEsMHhiZiwweDAwLDB4M2YgfX0sCisgezE2LCAweDhiMzAsIDAsIHsweGM0LDB4MGUsMHg3MSwweDAzLDB4NzQsMHgwMCwweDc1LDB4MTAsMHgzZiwweGMwLDB4MDUsMHhmMCwweDAzLDB4ZGMsMHg0MCwweGZmIH19LAorIHsxNiwgMHg4YjQwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHhmYywweDAwLDB4N2YsMHgwMCwweDNmLDB4NDAsMHgwZSwweGYwLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4OGI1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDQsMHhlOCwweDAwLDB4ZjIsMHgwNCwweGIzLDB4ODAgfX0sCisgezE2LCAweDhiNjAsIDAsIHsweDBmLDB4YjgsMHgwYiwweDJjLDB4MDAsMHhlYiwweDgwLDB4MzIsMHhjMCwweDBjLDB4MjAsMHgxMywweDJlLDB4MDgsMHhjYiwweDAxIH19LAorIHsxNiwgMHg4YjcwLCAwLCB7MHgzMiwweGM1LDB4MGYsMHhiMSwweDAzLDB4ZWMsMHg0OCwweGM4LDB4MTAsMHgzMiwweGZhLDB4OGMsMHgzOCwweDAzLDB4M2MsMHg5MCB9fSwKKyB7MTYsIDB4OGI4MCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4NDAsMHgwZiwweGIwLDB4MTMsMHhjMiwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiOTAsIDAsIHsweGM4LDB4MTAsMHg5OCwweDAwLDB4ZjYsMHgwMCwweDYxLDB4ODEsMHgwYiwweGYwLDB4MDIsMHgxYywweDAwLDB4ZDcsMHgwMCwweGI3IH19LAorIHsxNiwgMHg4YmEwLCAwLCB7MHg4MCwweDBjLDB4NzAsMHgwMiwweGJjLDB4MTAsMHg4ZiwweDAwLDB4MjEsMHhjOCwweDhiLDB4NzIsMHg0MywweGZjLDB4ODgsMHhkYyB9fSwKKyB7MTYsIDB4OGJiMCwgMCwgezB4MDAsMHgzNywweGM4LDB4MGQsMHg1MCwweDAyLDB4MWMsMHgyMiwweDg3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZDMgfX0sCisgezE2LCAweDhiYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgwMCwweGI2LDB4ODAsMHhhOSwweGEwIH19LAorIHsxNiwgMHg4YmQwLCAwLCB7MHg0YiwweDdjLDB4MDIsMHg1ZSwweDMwLDB4YTMsMHg4OCwweDIxLDB4ZjAsMHgwOCwweDc4LDB4MDIsMHgxNiwweDAwLDB4ODUsMHg4MCB9fSwKKyB7MTYsIDB4OGJlMCwgMCwgezB4MjEsMHhlMCwweDBiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHg4NywweDgwLDB4YTEsMHhlNCwweDA4LDB4ZDgsMHgwMiwweDRlLDB4MDAgfX0sCisgezE2LCAweDhiZjAsIDAsIHsweDk3LDB4ODAsMHgyZCwweDcwLDB4MGIsMHg3OCwweDAyLDB4YzgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YzAwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgwMCwweGIyLDB4MDAsMHgyOCwweGMwLDB4MGIsMHgxMCwweDAyLDB4NGUsMHg5MCwweDkzLDB4MDIsMHgyMiB9fSwKKyB7MTYsIDB4OGMxMCwgMCwgezB4ZjAsMHgwOCwweDM4LDB4NDIsMHg4YywweDQyLDB4ODMsMHgwNCwweDIyLDB4ZTQsMHg0YiwweDM4LDB4MDIsMHg4ZSwweDQwLDB4ODMgfX0sCisgezE2LCAweDhjMjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDA5LDB4MzgsMHgyMiwweDRlLDB4MjEsMHg5MywweDAwLDB4MmUsMHhlMCwweDBiLDB4MzAsMHgwMiwweGRiIH19LAorIHsxNiwgMHg4YzMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGE4LDB4MDEsMHhmYSwweDAwLDB4M2IsMHg4OSB9fSwKKyB7MTYsIDB4OGM0MCwgMCwgezB4MGYsMHhhMCwweDAyLDB4NzgsMHgwOCwweGFlLDB4NDAsMHgyMywweDgwLDB4MmMsMHg2YywweDBiLDB4M2EsMHgwMCwweDhlLDB4OGMgfX0sCisgezE2LCAweDhjNTAsIDAsIHsweGIyLDB4MDAsMHgwYiwweDgwLDB4ODIsMHhlMCwweDAyLDB4OGUsMHgwMCwweDIyLDB4ODAsMHgwYywweGU4LDB4MDIsMHg3YiwweDgwIH19LAorIHsxNiwgMHg4YzYwLCAwLCB7MHg5YSwweDgwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGM3MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDksMHhlYywweDAwLDB4MzYsMHgyMSwweDBiLDB4ODAsMHgxMywweGExLDB4MDAsMHhmOCwweDYwLDB4M2UgfX0sCisgezE2LCAweDhjODAsIDAsIHsweDAwLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDQzLDB4ZTAsMHgxMCwweGY4IH19LAorIHsxNiwgMHg4YzkwLCAwLCB7MHgwMCwweGJlLDB4MDAsMHgwZiwweDg1LDB4MGIsMHg4MCwweDAwLDB4ZTgsMHgxMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OGNhMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMiwweDMwLDB4NDggfX0sCisgezE2LCAweDhjYjAsIDAsIHsweDBjLDB4OTksMHgxMywweGE0LDB4MDIsMHhjOSwweDAwLDB4M2UsMHg0MiwweDBjLDB4OTAsMHg4ZiwweDI0LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHg4Y2MwLCAwLCB7MHgzMiwweDI4LDB4MGMsMHg4OCwweDAzLDB4ZTAsMHgwMCwweGM5LDB4MDAsMHhiMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTcsMHgwMCB9fSwKKyB7MTYsIDB4OGNkMCwgMCwgezB4YzksMHgxMCwweDNlLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjZTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAxLDB4ODksMHg4MCwweGEyLDB4NDgsMHgyOCwweDkyLDB4NDIsMHhjNSwweDAwLDB4ODksMHg0MCwweDJlIH19LAorIHsxNiwgMHg4Y2YwLCAwLCB7MHg0MCwweDJjLDB4OTAsMHgwNiwweDI1LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg1MCwweDA4LDB4OTgsMHgwMiwweGM0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4OGQwMCwgMCwgezB4MDEsMHg3NiwweDQwLDB4NGIsMHg5MiwweDAyLDB4ZTUsMHgwMiwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjAgfX0sCisgezE2LCAweDhkMTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwYywweDg1LDB4MjAsMHhhMiwweDQwIH19LAorIHsxNiwgMHg4ZDIwLCAwLCB7MHgwOCwweDkwLDB4MDYsMHhlNSwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAsMHgwOSwweDkwLDB4NDIsMHhhNCwweGEwLDB4MzEsMHgwMCB9fSwKKyB7MTYsIDB4OGQzMCwgMCwgezB4MjIsMHg1MCwweDE4LDB4OTEsMHgwMiwweGU0LDB4MDAsMHg4MSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwNiwweGU0LDB4MDAgfX0sCisgezE2LCAweDhkNDAsIDAsIHsweDg5LDB4MDAsMHgyZSwweDQwLDB4MDksMHg5MCwweDAyLDB4MGUsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZDUwLCAwLCB7MHgwMCwweDA0LDB4MTUsMHgwMCwweDg1LDB4NDAsMHgyMCwweDQwLDB4MDgsMHgxNCwweDI2LDB4ZTQsMHgwMCwweDgxLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4OGQ2MCwgMCwgezB4NDAsMHgxOCwweDEwLDB4MDIsMHg4NCwweDgwLDB4YjEsMHgyMCwweGEwLDB4NTAsMHgwOCwweDE0LDB4MDIsMHhlNSwweDAyLDB4ODEgfX0sCisgezE2LCAweDhkNzAsIDAsIHsweDQwLDB4MjAsMHg0OCwweDBiLDB4MTAsMHgwNiwweGNjLDB4MDAsMHg4MSwweDAxLDB4MmMsMHg1MCwweDA5LDB4MTQsMHgwMiwweDRhIH19LAorIHsxNiwgMHg4ZDgwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHg4YywweDAwLDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4OGQ5MCwgMCwgezB4MGMsMHg4MCwweDIzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDE0LDB4MGQsMHg4MCwweDEyLDB4YTEsMHg0NCwweGY4LDB4NTEgfX0sCisgezE2LCAweDhkYTAsIDAsIHsweDMyLDB4MDAsMHgyYywweDgwLDB4MDMsMHhlMCwweDAwLDB4ODgsMHgwNCwweDIyLDB4MTQsMHgwZiwweDgwLDB4MDcsMHhlMCwweDAwIH19LAorIHsxNiwgMHg4ZGIwLCAwLCB7MHhjOCwweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGRjMCwgMCwgezB4OTgsMHg5ZCwweGU0LDB4MDAsMHhmOSwweDAwLDB4M2YsMHg1MCwweDBmLDB4ZDAsMHgwMywweGRjLDB4MDEsMHhiZCwweDQyLDB4M2YgfX0sCisgezE2LCAweDhkZDAsIDAsIHsweDUwLDB4NGYsMHhkNCwweDQzLDB4NzQsMHg0MSwweGZkLDB4MTAsMHgzZiwweDEwLDB4MWYsMHhjNCwweDEzLDB4ZjEsMHgwMCwweGZkIH19LAorIHsxNiwgMHg4ZGUwLCAwLCB7MHg0MCwweDdlLDB4NDQsMHgwZiwweGQwLDB4NDMsMHhmNSwweDAxLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4OGRmMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNCwweDAwLDB4ZGYsMHgwNSwweDMzLDB4NjEgfX0sCisgezE2LCAweDhlMDAsIDAsIHsweDBmLDB4NTAsMHg1MywweDM0LDB4MTAsMHhmZCwweDA0LDB4MzMsMHg0NCwweDRmLDB4NTAsMHgwMywweDc2LDB4YzEsMHhjZCwweGUwIH19LAorIHsxNiwgMHg4ZTEwLCAwLCB7MHgzMywweDYwLDB4MGMsMHhjZSwweDAzLDB4ZjYsMHhjMCwweGUxLDB4YzAsMHhiNiwweDY0LDB4OGYsMHg1MCwweDBiLDB4MzYsMHg4MiB9fSwKKyB7MTYsIDB4OGUyMCwgMCwgezB4Y2QsMHgwMCwweDNlLDB4NDQsMHg0YywweDllLDB4YzMsMHhjNiwweDAxLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhlMzAsIDAsIHsweDM4LDB4MTAsMHhlYSwweDI4LDB4ODAsMHhhMCwweGIyLDB4MDQsMHgwYiwweDhhLDB4ODMsMHg2MCwweDAwLDB4ZmEsMHgwMCwweDM2IH19LAorIHsxNiwgMHg4ZTQwLCAwLCB7MHgyOCwweDhiLDB4ODAsMHgwMywweGUzLDB4YzgsMHhjOCwweDg0LDB4MjIsMHgxNCwweDA4LDB4OGEsMHgwMiwweGUyLDB4ODAsMHhkOCB9fSwKKyB7MTYsIDB4OGU1MCwgMCwgezB4ODIsMHgzNCwweDM0LDB4MWIsMHg4MCwweDAzLDB4NjAsMHgwNCwweDg4LDB4MDAsMHgyZSwweDIwLDB4MGEsMHg4ZSwweDQyLDB4Y2UgfX0sCisgezE2LCAweDhlNjAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHg4MCwweDgxLDB4MDgsMHgwNCwweDQxIH19LAorIHsxNiwgMHg4ZTcwLCAwLCB7MHgwYiwweDkyLDB4MDIsMHgwNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHgwYiwweDE4LDB4MDIsMHgyNCwweDAwLDB4YjEsMHg2MCB9fSwKKyB7MTYsIDB4OGU4MCwgMCwgezB4MjYsMHg0MCwweDBhLDB4MTYsMHgwMiwweGM1LDB4MDAsMHhhMSwweGMwLDB4MjAsMHg0OCwweDBiLDB4OTAsMHgwMiwweDQ3LDB4MDAgfX0sCisgezE2LCAweDhlOTAsIDAsIHsweDkxLDB4MDEsMHgyYywweDQ4LDB4MTgsMHgxMiwweDAyLDB4ZDIsMHgwMSwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZWEwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwYywweDhiLDB4MDQsMHhhMiwweDUwLDB4MGIsMHg5MSwweDAyLDB4MjQsMHgwNCwweGE5LDB4MDEsMHgyZSB9fSwKKyB7MTYsIDB4OGViMCwgMCwgezB4NDIsMHgwYiwweDkwLDB4MDIsMHhhNCwweDAwLDB4YTksMHgwMCwweDI2LDB4NjAsMHgwYSwweDkwLDB4MDIsMHhlNiwweDAwLDB4ODEgfX0sCisgezE2LCAweDhlYzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDhiLDB4YjAsMHgwMiwweDI0LDB4MDgsMHg5OSwweDEwLDB4MmUsMHg0MCwweDFhLDB4OTAsMHgwMiwweGM2IH19LAorIHsxNiwgMHg4ZWQwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU1LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4OGVlMCwgMCwgezB4MGYsMHgxMCwweDAyLDB4MjUsMHgwMCwweGIxLDB4MDAsMHgyZSwweDYwLDB4MGYsMHgxMCwweDEyLDB4MjQsMHgwMiwweGI5LDB4YTAgfX0sCisgezE2LCAweDhlZjAsIDAsIHsweGE0LDB4NDAsMHgyZSwweDkxLDB4MDMsMHhlNiwweDAwLDB4YTksMHgwMCwweDIyLDB4NDAsMHgwYiwweDE5LDB4ODAsMHg2NCwweDA0IH19LAorIHsxNiwgMHg4ZjAwLCAwLCB7MHhkOSwweDgxLDB4MmUsMHg0MCwweDRjLDB4OTAsMHgwMywweGU4LDB4MTQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGYxMCwgMCwgezB4NjgsMHgwMSwweGE0LDB4MGEsMHhlOSwweDAwLDB4YmUsMHg0OCwweDBmLDB4OTgsMHgwYiwweGU0LDB4MDAsMHhmOSwweGM0LDB4MzYgfX0sCisgezE2LCAweDhmMjAsIDAsIHsweDcwLDB4MWYsMHg5MiwweDAzLDB4ZTYsMHg5MCwweGMxLDB4OTAsMHgzYSwweDQwLDB4OGQsMHg4OCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHg4ZjMwLCAwLCB7MHg5MCwweDNlLDB4NDAsMHgwYiwweDk4LDB4MDMsMHhlNiwweDQwLDB4ZTksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OGY0MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTAsMHhhMSwweDAyLDB4ZDgsMHgyMCwweGIyLDB4MTAgfX0sCisgezE2LCAweDhmNTAsIDAsIHsweDBjLDB4ODAsMHg4MywweDIxLDB4NDAsMHhjOCwweDU4LDB4YjIsMHgxMCwweDRjLDB4ODAsMHgwYiwweDIwLDB4MDAsMHhmOCwweDQyIH19LAorIHsxNiwgMHg4ZjYwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMiwweGQ4LDB4MDAsMHg3MiwweDAwLDB4MWMsMHg4MCwweDAwLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4OGY3MCwgMCwgezB4ZjgsMHgwNCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwMiwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmODAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDA0LDB4Y2UsMHg0MSwweDIzLDB4ODAsMHgwOCwweGUwLDB4MDIsMHgzOSwweDEwLDB4YWUsMHg0MCwweDIyIH19LAorIHsxNiwgMHg4ZjkwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMiwweDFhLDB4MDAsMHhiYSwweDAwLDB4MmIsMHhhZCwweDAzLDB4ODAsMHgwMiwweGU4LDB4MDAsMHhjYSB9fSwKKyB7MTYsIDB4OGZhMCwgMCwgezB4MDAsMHgyYSwweDgwLDB4MGEsMHhlMCwweDAyLDB4MTgsMHgwMCwweGJhLDB4MDAsMHgxYSwweDgwLDB4MGIsMHhhMCwweDAzLDB4NGEgfX0sCisgezE2LCAweDhmYjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDA1LDB4NmMsMHgxMiwweDg5LDB4MDAsMHhhMCwweGUwIH19LAorIHsxNiwgMHg4ZmMwLCAwLCB7MHgwOCwweDM4LDB4MDIsMHgwZCwweDg4LDB4ODMsMHgwMCwweDA0LDB4ZTAsMHgwOCwweDM4LDB4MzIsMHgwZSwweDI1LDB4MzEsMHgwMSB9fSwKKyB7MTYsIDB4OGZkMCwgMCwgezB4MjQsMHhlMCwweDhiLDB4MzgsMHgwMiwweGU0LDB4MDEsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAgfX0sCisgezE2LCAweDhmZTAsIDAsIHsweGIzLDB4MDAsMHgyZSwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZmYwLCAwLCB7MHhhMCwweDAxLDB4MTQsMHgyMCwweDg2LDB4MjAsMHgyOSwweGIwLDB4MDgsMHhmMCwweDgyLDB4M2UsMHgwNCwweGE3LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4OTAwMCwgMCwgezB4NzAsMHg4OCwweDcwLDB4OTIsMHgxYywweDIwLDB4YmQsMHgwMCwweDY5LDB4YzAsMHgwYiwweDc2LDB4MDIsMHhkNCwweDgwLDB4OGYgfX0sCisgezE2LCAweDkwMTAsIDAsIHsweDIxLDB4MjksMHhlMCwweDBhLDB4NjAsMHg4NiwweDk4LDB4MDEsMHhiNywweDAwLDB4MmQsMHhjOCwweDBiLDB4M2IsMHgwMiwweDYwIH19LAorIHsxNiwgMHg5MDIwLCAwLCB7MHgwNCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDNlLDB4MDAsMHhjNywweGEwLDB4YjAsMHhlMCB9fSwKKyB7MTYsIDB4OTAzMCwgMCwgezB4MmMsMHg3OCwweDBiLDB4MWEsMHgwMCwweGMzLDB4ODAsMHgzNywweGUwLDB4MjgsMHg3OCwweDAzLDB4MWEsMHgwOCwweGY1LDB4OTAgfX0sCisgezE2LCAweDkwNDAsIDAsIHsweDM1LDB4ZTAsMHgwZiwweDdjLDB4MTIsMHhkNiwweDgyLDB4YzcsMHg5MCwweDIxLDB4ZTQsMHgwOCwweDc4LDB4MDMsMHg5ZSwweDAwIH19LAorIHsxNiwgMHg5MDUwLCAwLCB7MHhmNSwweDgwLDB4M2QsMHhmMSwweDBmLDB4NzgsMHgwMywweDIyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTA2MCwgMCwgezB4MDgsMHgxOSwweGE0LDB4MDAsMHhlZSwweDgwLDB4MzYsMHhjMSwweDRmLDB4ZDAsMHgwMywweGM4LDB4MDAsMHhmYiwweDAwLDB4M2UgfX0sCisgezE2LCAweDkwNzAsIDAsIHsweDUxLDB4MGYsMHhiMCwweDAzLDB4ZTQsMHgwOCwweGYxLDB4NjAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzUsMHgwMCwweGViIH19LAorIHsxNiwgMHg5MDgwLCAwLCB7MHgxMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDksMHg2YywweDAwLDB4ZmIsMHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4OTA5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHhmZSwweDAwLDB4ZmQsMHg4OCwweDMzLDB4NjAgfX0sCisgezE2LCAweDkwYTAsIDAsIHsweDBmLDB4ZjksMHgwMywweGNlLDB4NDAsMHhkNywweDg0LDB4MzcsMHg3MCwweDBjLDB4ZDgsMHgyMywweDM2LDB4MDAsMHhjNSwweDg4IH19LAorIHsxNiwgMHg5MGIwLCAwLCB7MHgzMywweGUwLDB4NGYsMHhmOCwweDEzLDB4ZjcsMHgyOCwweGRmLDB4ODAsMHgzNywweGUyLDB4MGMsMHg1OCwweDAzLDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4OTBjMCwgMCwgezB4ZmYsMHg5MCwweDNmLDB4ZTAsMHgwYywweGY4LDB4MDMsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkwZDAsIDAsIHsweGE5LDB4MTEsMHg5YywweDA4LDB4ZjYsMHgwMCwweGExLDB4MDAsMHgwYiwweDYzLDB4MDIsMHhkNiwweDMwLDB4ODUsMHg0MSwweDMxIH19LAorIHsxNiwgMHg5MGUwLCAwLCB7MHhjOCwweDA4LDB4NTAsMHgyMywweDFjLDB4MDAsMHhkNSwweDIwLDB4YjEsMHg4MCwweDBmLDB4NzAsMHgwMywweGI0LDB4MDAsMHhjNyB9fSwKKyB7MTYsIDB4OTBmMCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MGYsMHg0MCwweGEzLDB4NTgsMHg0MCwweGI3LDB4MDAsMHgzZiwweGM0LDB4MGEsMHhmMCwweDAyLDB4MmEgfX0sCisgezE2LCAweDkxMDAsIDAsIHsweDA2LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHg0MCwweGI3LDB4MTAsMHgyMSwweGQyIH19LAorIHsxNiwgMHg5MTEwLCAwLCB7MHgwYiwweDcwLDB4MDIsMHhkYywweDQyLDB4ODYsMHgwMCwweDI1LDB4NjEsMHgwOCwweDUxLDB4MDIsMHg1MCwweDAwLDB4OTUsMHgwMCB9fSwKKyB7MTYsIDB4OTEyMCwgMCwgezB4MjUsMHhjMCwweDA5LDB4NzAsMHg4MiwweGQ0LDB4MDAsMHg4NywweDAwLDB4MjQsMHhjMCwweDA4LDB4NTAsMHgwMiwweDVjLDB4MDAgfX0sCisgezE2LCAweDkxMzAsIDAsIHsweDk1LDB4MDQsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MTQwLCAwLCB7MHgyMCwweDE0LDB4Y2MsMHgwOCwweGIyLDB4ZDAsMHgyMCwweGUwLDB4NGIsMHgwOCwweDAyLDB4YzQsMHgwMCwweDgwLDB4ODAsMHgyMCB9fSwKKyB7MTYsIDB4OTE1MCwgMCwgezB4ZjAsMHgwOCwweDFhLDB4MDIsMHg4NSwweDQ4LDB4ODEsMHgxMCwweDIwLDB4NDAsMHgwYSwweDMwLDB4MDIsMHhjNiwweDEwLDB4OTMgfX0sCisgezE2LCAweDkxNjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDBhLDB4MWMsMHgwMiwweDBkLDB4NDAsMHhiMywweDAwLDB4NjgsMHhjNCwweDBhLDB4YjAsMHgwMiwweDA5IH19LAorIHsxNiwgMHg5MTcwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFjLDB4MDEsMHhmZSwweDAwLDB4MzIsMHhmMCB9fSwKKyB7MTYsIDB4OTE4MCwgMCwgezB4MGYsMHg4OCwweDAzLDB4ZTYsMHgwMCwweGM4LDB4YzgsMHgzNiwweGY2LDB4MjgsMHhhNiwweDBhLDB4NmQsMHgwMCwweDlkLDB4MDAgfX0sCisgezE2LCAweDkxOTAsIDAsIHsweDMyLDB4MDAsMHgwYiwweGIwLDB4MDMsMHhmNiwweDAzLDB4YzcsMHgwMCwweDM3LDB4YzAsMHgwOCwweDljLDB4MGEsMHg2ZSwweDAwIH19LAorIHsxNiwgMHg5MWEwLCAwLCB7MHhiYiwweDAwLDB4MmYsMHhjMCwweDBjLDB4ZjAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTFiMCwgMCwgezB4ODAsMHgwMCwweGU0LDB4MDEsMHhlYiwweDQwLDB4M2UsMHg4MCwweDRmLDB4YzEsMHgwMywweGU0LDB4MDAsMHhiOCwweDA4LDB4M2EgfX0sCisgezE2LCAweDkxYzAsIDAsIHsweDQwLDB4OGYsMHhhNCwweDEzLDB4NmMsMHgyMCwweGY5LDB4MDAsMHgzZSwweDcwLDB4MGYsMHhiMCwweDAzLDB4YTQsMHg0MCwweGViIH19LAorIHsxNiwgMHg5MWQwLCAwLCB7MHgwMCwweDNlLDB4YzAsMHgwZiwweDkyLDB4MjMsMHhlOCwweDAwLDB4ZjksMHg4MCwweDNlLDB4YzAsMHgwZiwweGIwLDB4NjMsMHhlMCB9fSwKKyB7MTYsIDB4OTFlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDA4LDB4Y2UsMHgwOCwweDMzLDB4YzAgfX0sCisgezE2LCAweDkxZjAsIDAsIHsweDBmLDB4ZGEsMHgwMywweDMwLDB4MDAsMHhlNCwweDA0LDB4MzUsMHhjMCwweDBkLDB4YTAsMHgwMywweDI4LDB4MDAsMHhjNSwweDAwIH19LAorIHsxNiwgMHg5MjAwLCAwLCB7MHgzMywweDAwLDB4MGIsMHhmYSwweDAzLDB4ZjQsMHgwMywweGNiLDB4MDAsMHgzMSwweGMwLDB4MGMsMHhkNCwweDAzLDB4MTQsMHgyMCB9fSwKKyB7MTYsIDB4OTIxMCwgMCwgezB4Y2QsMHg4MCwweDIzLDB4YzEsMHgwYywweGYwLDB4MDIsMHgwOCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyMjAsIDAsIHsweDgxLDB4MDQsMHg0NCwweDEwLDB4Y2IsMHhkMCwweDIyLDB4YzAsMHgwYiwweDk0LDB4MDIsMHgyMiwweDg0LDB4YjgsMHhjNiwweDAyIH19LAorIHsxNiwgMHg5MjMwLCAwLCB7MHg0MCwweDA4LDB4MjgsMHgwMiwweGE1LDB4ODAsMHg4OSwweDAwLDB4MjIsMHg2MCwweDBiLDB4YjgsMHgwMiwweDY0LDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4OTI0MCwgMCwgezB4MDAsMHgyYSwweGMwLDB4YzgsMHgwMCwweDAzLDB4NjYsMHgwMCwweDgxLDB4MDAsMHgwMCwweGMwLDB4MGQsMHhiMCwweDBhLDB4YTggfX0sCisgezE2LCAweDkyNTAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDEzLDB4MDAsMHgyMiwweDQwIH19LAorIHsxNiwgMHg5MjYwLCAwLCB7MHg4YiwweDI0LDB4MDIsMHgyYSwweDAwLDB4YmIsMHg4MiwweDIyLDB4NDAsMHgwMCwweGFjLDB4MDIsMHg4NCwweDAwLDB4ODksMHgwMCB9fSwKKyB7MTYsIDB4OTI3MCwgMCwgezB4MjIsMHgyMiwweDBiLDB4YjAsMHgwMiwweGM0LDB4MDAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJlLDB4MDAgfX0sCisgezE2LCAweDkyODAsIDAsIHsweDhiLDB4MTAsMHgyYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4YTAsMHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MjkwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgxMCwweDgzLDB4MDAsMHgyMCwweDAxLDB4MGIsMHgyMCwweDAyLDB4MDAsMHg4MCwweGIxLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4OTJhMCwgMCwgezB4YzEsMHgwOCwweDIwLDB4MDIsMHg4OCwweDAxLDB4ODEsMHgwMCwweGEwLDB4MDAsMHgwYiwweDMwLDB4MDIsMHg0NCwweDAxLDB4OWIgfX0sCisgezE2LCAweDkyYjAsIDAsIHsweDAwLDB4MjgsMHhjMCwweDA4LDB4YjAsMHgwMiwweDQ4LDB4MDYsMHg4OSwweDAwLDB4MmEsMHhjMCwweDA5LDB4MzAsMHgwMiwweDgyIH19LAorIHsxNiwgMHg5MmMwLCAwLCB7MHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZCwweDZjLDB4MDAsMHhjMywweDAwLDB4YjIsMHhjMCB9fSwKKyB7MTYsIDB4OTJkMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4MjgsMHgyMCwweGZhLDB4MDAsMHhiMSwweDQwLDB4MGQsMHhhMCwweDA3LDB4YTAsMHgwMCwweGNkLDB4MDAgfX0sCisgezE2LCAweDkyZTAsIDAsIHsweDIyLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhmNCwweDAwLDB4OWYsMHgwMCwweDNiLDB4YzAsMHgyYywweGIwLDB4MGIsMHgyNCwweDAwIH19LAorIHsxNiwgMHg5MmYwLCAwLCB7MHhjOSwweDAwLDB4YmEsMHhjMCwweDBjLDB4YjAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTMwMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MDYsMHhmZiwweDAyLDB4YWYsMHhjMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MTAsMHhmYywweDAwLDB4M2YgfX0sCisgezE2LCAweDkzMTAsIDAsIHsweGMwLDB4OWYsMHhlMCwweDEzLDB4ZjAsMHgwMCwweGZkLDB4MDQsMHgzZiwweDQwLDB4NGYsMHhmMCwweDAzLDB4NzQsMHgwMCwweGVmIH19LAorIHsxNiwgMHg5MzIwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg4ZiwweGUwLDB4MDIsMHhiNCwweDAxLDB4ZmQsMHgwNCwweDM3LDB4YzAsMHgwZiwweGYwLDB4NDMsMHg2OCB9fSwKKyB7MTYsIDB4OTMzMCwgMCwgezB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4YzcsMHgyMCwweGIzLDB4YzggfX0sCisgezE2LCAweDkzNDAsIDAsIHsweDFjLDB4ZjEsMHgwMywweDdjLDB4MjAsMHhjZiwweDBhLDB4M2YsMHhkMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4ODAsMHg4ZiwweDMyIH19LAorIHsxNiwgMHg5MzUwLCAwLCB7MHgzMywweGM0LDB4MGYsMHhmMSwweDgzLDB4M2MsMHhlMCwweGNmLDB4MTAsMHgzMywweGM0LDB4MGQsMHhmMiwweDgzLDB4M2MsMHhlMiB9fSwKKyB7MTYsIDB4OTM2MCwgMCwgezB4YzcsMHg4MCwweDE3LDB4Y2MsMHg0YywweGYzLDB4ODMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzNzAsIDAsIHsweDgwLDB4MTAsMHhlMywweDQwLDB4ODgsMHg2OCwweDIyLDB4MzAsMHgwOCwweDA2LDB4MDIsMHgwMSwweGExLDB4ODgsMHhjNCwweDBlIH19LAorIHsxNiwgMHg5MzgwLCAwLCB7MHgxNCwweDA4LDB4ODcsMHg4MCwweDAxLDB4YzAsMHgyOCwweDUwLDB4MDIsMHgwNCwweDhiLDB4ODYsMHgwMiwweGExLDB4OTgsMHg4OCB9fSwKKyB7MTYsIDB4OTM5MCwgMCwgezB4NDEsMHgyYSwweDA0LDB4MGEsMHg4NCwweDgyLDB4YmQsMHg4MCwweDhiLDB4MDgsMHgyYiwweGM0LDB4ODgsMHhmNCwweDAzLDB4NjAgfX0sCisgezE2LCAweDkzYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwOCwweDgyLDB4NDAsMHgyMCwweDEwIH19LAorIHsxNiwgMHg5M2IwLCAwLCB7MHgwOCwweDIxLDB4MTIsMHg0NCwweDA0LDB4ODIsMHgwNCwweDJjLDB4MDgsMHg4OSwweDkwLDB4MDIsMHg0NCwweDIxLDB4OGIsMHgwMCB9fSwKKyB7MTYsIDB4OTNjMCwgMCwgezB4MjQsMHg4OCwweDhiLDB4YTAsMHgwMCwweDQwLDB4ODQsMHg4OSwweDMwLDB4MjIsMHg0OCwweDg4LDB4YjAsMHgwMiwweGNjLDB4MDggfX0sCisgezE2LCAweDkzZDAsIDAsIHsweDg4LDB4MjAsMHhhNCwweGM4LDB4MDAsMHgzMiwweDBhLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5M2UwLCAwLCB7MHhjMCwweDE1LDB4YTAsMHgwMCwweDg5LDB4MDAsMHgyMiwweGMxLDB4ODgsMHg5MCwweDYyLDB4MjgsMHgwOCwweDg5LDB4MDgsMHgyZSB9fSwKKyB7MTYsIDB4OTNmMCwgMCwgezB4YzAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDA4LDB4YTgsMHgwMCwweDI2LDB4NDIsMHgwYiwweDkwLDB4MDIsMHhjYywweDUwLDB4OGEgfX0sCisgezE2LCAweDk0MDAsIDAsIHsweDIyLDB4MmEsMHg4NiwweDBhLDB4ODAsMHgwMiwweGVjLDB4MDAsMHg4OCwweDg0LDB4MmEsMHhjMSwweDA4LDB4YjAsMHgyNiwweDMwIH19LAorIHsxNiwgMHg5NDEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGYwLDB4MDIsMHhjZiwweDAwLDB4MzMsMHhjMCB9fSwKKyB7MTYsIDB4OTQyMCwgMCwgezB4NDgsMHhmOCwweDQzLDB4NzksMHgwMCwweDhkLDB4YzAsMHgzZiwweDMwLDB4OGQsMHg2MCwweDgzLDB4NzgsMHg2MCwweGM0LDB4NTggfX0sCisgezE2LCAweDk0MzAsIDAsIHsweDM3LDB4MjAsMHgwZiwweDU4LDB4MTMsMHg3YiwweDAyLDB4Y2MsMHhjNCwweDMxLDB4MjAsMHgwYywweDQ0LDB4MDMsMHhlYywweDAyIH19LAorIHsxNiwgMHg5NDQwLCAwLCB7MHg4YiwweDgwLDB4MzYsMHhjMCwweDI0LDB4YjAsMHgxMiwweDEwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTQ1MCwgMCwgezB4ZTAsMHgwMSwweDljLDB4MDAsMHhmNCwweDEwLDB4M2QsMHgwMCwweDZmLDB4YzksMHgxMywweGQ0LDB4MTIsMHhmZSwweDkwLDB4M2YgfX0sCisgezE2LCAweDk0NjAsIDAsIHsweGYwLDB4MGYsMHhkYSwweDIzLDB4ZjQsMHgxNCwweGZmLDB4MDIsMHgzYiwweGYwLDB4MGYsMHhlYSwweDIzLDB4YjYsMHgwMCwweGZmIH19LAorIHsxNiwgMHg5NDcwLCAwLCB7MHg4MiwweDNmLDB4ZTEsMHg4ZiwweGY0LDB4MDMsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHhhZiwweDcwLDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4OTQ4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMCwweDAwLDB4Y2EsMHgwMCwweDMyLDB4MDggfX0sCisgezE2LCAweDk0OTAsIDAsIHsweDFjLDB4YTAsMHgwMywweGE1LDB4MjAsMHhjYiwweDQwLDB4YmEsMHgxMCwweDFmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhlYiwweDAwIH19LAorIHsxNiwgMHg5NGEwLCAwLCB7MHg3MiwweDkwLDB4MGMsMHhiNCwweDAzLDB4MjksMHgwNCwweGM5LDB4NTIsMHgzMiwweDUwLDB4MGMsMHhiNCwweDAzLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4OTRiMCwgMCwgezB4ZjgsMHg0MCwweDMyLDB4YzEsMHgwZSwweGIwLDB4MGIsMHg1MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0YzAsIDAsIHsweGM4LDB4MDUsMHgyZCwweDgwLDB4ODksMHg4MCwweDIyLDB4ZDksMHgwOCwweDkwLDB4MjIsMHgyYSwweDAwLDB4ODgsMHg1NCwweDIyIH19LAorIHsxNiwgMHg5NGQwLCAwLCB7MHhjMCwweDhiLDB4ODAsMHgyMiwweDIwLDB4MTksMHhjOCwweDAwLDB4MjIsMHg0MCwweDhkLDB4ODAsMHgxYSwweDI0LDB4MTAsMHhkMiB9fSwKKyB7MTYsIDB4OTRlMCwgMCwgezB4NDQsMHgyMiwweDgxLDB4MGQsMHg4MCwweDAzLDB4N2MsMHgwMCwweGIwLDB4MDAsMHgzNywweGMwLDB4ODgsMHhmMCwweDAyLDB4MzIgfX0sCisgezE2LCAweDk0ZjAsIDAsIHsweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGUsMHgwMCwweDgxLDB4MDAsMHhhMCwweGYwIH19LAorIHsxNiwgMHg5NTAwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHg4OSwweDAyLDB4ODAsMHgwMCwweDIyLDB4YzAsMHgwYiwweDAwLDB4MjIsMHhhMCwweDAwLDB4YjAsMHgwMCB9fSwKKyB7MTYsIDB4OTUxMCwgMCwgezB4MjAsMHg0MCwweDA4LDB4MDAsMHgwMiwweDA0LDB4MDAsMHg4MiwweDYwLDB4MjAsMHg4MCwweDA4LDB4MDAsMHgwMiwweDBjLDB4MDggfX0sCisgezE2LCAweDk1MjAsIDAsIHsweGIyLDB4MDAsMHgyMiwweGMwLDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NTMwLCAwLCB7MHgyMCwweDAxLDB4MDMsMHgxMCwweDhlLDB4OTAsMHgyMywweDI0LDB4MDgsMHg2YiwweDAyLDB4MTYsMHg2MCwweDhmLDB4ODAsMHgyMSB9fSwKKyB7MTYsIDB4OTU0MCwgMCwgezB4MjgsMHgwYiwweGY5LDB4MDYsMHgxZSwweDQwLDB4OGYsMHg4MCwweDIzLDB4YTQsMHg0OSwweDc5LDB4MDIsMHgzYSwweDQwLDB4OWQgfX0sCisgezE2LCAweDk1NTAsIDAsIHsweDkwLDB4MjMsMHg2NCwweDA5LDB4ZjgsMHgwMiwweDVlLDB4NDAsMHhiZSwweDkwLDB4MjQsMHhlNCwweDI4LDB4NzksMHgwMiwweDA4IH19LAorIHsxNiwgMHg5NTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4NDIsMHhjMCwweDA5LDB4MzAsMHgwMCB9fSwKKyB7MTYsIDB4OTU3MCwgMCwgezB4MjgsMHgwMiwweDAzLDB4ODQsMHgwMCwweDhhLDB4MjAsMHgzMCwweGM0LDB4OGIsMHgxMSwweDAzLDB4ODQsMHg1MCwweGIzLDB4MDAgfX0sCisgezE2LCAweDk1ODAsIDAsIHsweDIwLDB4YzAsMHgwYywweGE0LDB4MjIsMHgwNCwweDAwLDB4Y2IsMHg0MCwweDMwLDB4YzUsMHgwYywweDMwLDB4MDMsMHgwZSwweDQwIH19LAorIHsxNiwgMHg5NTkwLCAwLCB7MHhmMywweDEwLDB4MzAsMHhjNCwweDBjLDB4YjAsMHgwMywweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTVhMCwgMCwgezB4NDAsMHgxZCwweGIwLDB4MDQsMHhmYiwweDA0LDB4M2QsMHhjMCwweDBmLDB4ZjIsMHg0MywweGY4LDB4MDQsMHhmZCwweDAxLDB4M2YgfX0sCisgezE2LCAweDk1YjAsIDAsIHsweDBjLDB4MGYsMHg2MSwweDAzLDB4ZjgsMHg0OCwweGY0LDB4MDAsMHgzZCwweDAxLDB4MGYsMHhkMCwweDAzLDB4YzgsMHgwMCwweGZjIH19LAorIHsxNiwgMHg5NWMwLCAwLCB7MHgwNCwweGJkLDB4MDQsMHgwYiwweDQ4LDB4MDMsMHhmYywweDE4LDB4ZmYsMHgxNCwweDNmLDB4ZDUsMHgwZCwweGYwLDB4MDMsMHg5MCB9fSwKKyB7MTYsIDB4OTVkMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlMCwweDAwLDB4ZjksMHgwMSwweDMyLDB4YzAgfX0sCisgezE2LCAweDk1ZTAsIDAsIHsweDhlLDB4OTAsMHgwMywweDI4LDB4MDIsMHhkMSwweDAwLDB4MzIsMHhjMCwweDBkLDB4YTgsMHgwYiwweDA4LDB4MDAsMHhlOCwweDAwIH19LAorIHsxNiwgMHg5NWYwLCAwLCB7MHgyZSwweDQwLDB4MGMsMHg5OCwweDBiLDB4MmUsMHgwMiwweGNhLDB4MDAsMHhiMiwweGEwLDB4NmMsMHg4MCwweDIzLDB4MmQsMHg4MCB9fSwKKyB7MTYsIDB4OTYwMCwgMCwgezB4Y2EsMHg4MCwweDMyLDB4ZDAsMHgwYywweGJhLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2MTAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjYsMHgwMCwweGEzLDB4MDAsMHgwOCwweDYwLDB4MDIsMHgwNCwweDAwLDB4ODYsMHgwNCwweDI5IH19LAorIHsxNiwgMHg5NjIwLCAwLCB7MHgwMCwweDA4LDB4NTAsMHg0MiwweDE0LDB4MDQsMHhhNywweDAwLDB4MGQsMHg4MCwweDRhLDB4NjAsMHgwMiwweDAwLDB4MDAsMHg4MSB9fSwKKyB7MTYsIDB4OTYzMCwgMCwgezB4MDAsMHgyMSwweDQwLDB4MDgsMHg3MCwweDAyLDB4OWQsMHg0MiwweDg2LDB4MDEsMHgyMCwweGMwLDB4MDgsMHgzMiwweDgyLDB4MTIgfX0sCisgezE2LCAweDk2NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OTIsMHgwMCwweGJjLDB4ODAsMHg2MywweDIwIH19LAorIHsxNiwgMHg5NjUwLCAwLCB7MHg4MiwweDA4LDB4MDIsMHg1MiwweDAwLDB4ODQsMHhjMiwweDIzLDB4MjAsMHg4OCwweDBjLDB4MDIsMHgzMywweDAwLDB4ODQsMHg4MCB9fSwKKyB7MTYsIDB4OTY2MCwgMCwgezB4MmYsMHgyMSwweDg5LDB4NGMsMHgwMiwweDEyLDB4MTQsMHg5NCwweGM1LDB4NjQsMHgyMSwweDA4LDB4NGMsMHgwMiwweDBlLDB4ODAgfX0sCisgezE2LCAweDk2NzAsIDAsIHsweDk3LDB4ODIsMHhhMSwweGVjLDB4MDgsMHg3OSwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NjgwLCAwLCB7MHg0OCwweDE0LDB4Y2QsMHg0NCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NGQsMHg4MCwweDAzLDB4ODgsMHgyOCB9fSwKKyB7MTYsIDB4OTY5MCwgMCwgezB4YzAsMHgwOCwweDNjLDB4MDYsMHgwZiwweDAwLDB4YTMsMHg0MywweDJjLDB4YzIsMHgxYiwweDM4LDB4MDIsMHgwZiwweDAwLDB4OWIgfX0sCisgezE2LCAweDk2YTAsIDAsIHsweDg4LDB4NjQsMHhkMCwweDA4LDB4YjgsMHgwMiwweDhjLDB4MTAsMHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwYSwweDEyIH19LAorIHsxNiwgMHg5NmIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGFhLDB4MDAsMHhmYSwweDA1LDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4OTZjMCwgMCwgezB4OGUsMHhhMCwweDBiLDB4NjksMHgwMCwweGNhLDB4NDAsMHgzMiwweGEwLDB4M2MsMHhhOCwweDAzLDB4MmEsMHgwMCwweGVhLDB4MjYgfX0sCisgezE2LCAweDk2ZDAsIDAsIHsweDNlLDB4YjAsMHgwZCwweGExLDB4NjMsMHgyOCwweDIwLDB4Y2EsMHg0MCwweDM2LDB4YTAsMHgwYywweGUwLDB4MTMsMHgyOCwweDA5IH19LAorIHsxNiwgMHg5NmUwLCAwLCB7MHhkZSwweDAwLDB4MzIsMHg4MCwweDJjLDB4YTAsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTZmMCwgMCwgezB4NDgsMHgwMCwweGYwLDB4MjAsMHhmNCwweDAwLDB4M2YsMHgwMCwweDBmLDB4NDAsMHgyMywweGIwLDB4MDAsMHhlYywweDAwLDB4M2YgfX0sCisgezE2LCAweDk3MDAsIDAsIHsweDA2LDB4MWUsMHhjMiwweDEzLDB4ZjAsMHg4OCwweGZjLDB4MjAsMHgzZiwweDA0LDB4OGUsMHhjMCwweDAzLDB4ZjAsMHg4MCwweGVjIH19LAorIHsxNiwgMHg5NzEwLCAwLCB7MHg0MCwweDNiLDB4MGMsMHgwZiwweGMwLDB4YTMsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MDMsMHhkMiB9fSwKKyB7MTYsIDB4OTcyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAgfX0sCisgezE2LCAweDk3MzAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweDgwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHg1MywweGU0LDB4MTAsMHhjOSwweDAwIH19LAorIHsxNiwgMHg5NzQwLCAwLCB7MHgzMiwweDQwLDB4MGQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4OGYsMHg5MCwweDAzLDB4MjQsMHgxMCB9fSwKKyB7MTYsIDB4OTc1MCwgMCwgezB4YzksMHgwMSwweDNjLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk3NjAsIDAsIHsweDgwLDB4MDQsMHg0NywweDQ0LDB4ODksMHgwMCwweDIwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNSwweDBhLDB4ODEsMHgxMCwweDIyIH19LAorIHsxNiwgMHg5NzcwLCAwLCB7MHg0MCwweDQ4LDB4OTAsMHgwMywweGM0LDB4MDAsMHg4OSwweDAwLDB4NzYsMHg0MCwweDI4LDB4OTAsMHgwMiwweGU0LDB4MTAsMHhiOSB9fSwKKyB7MTYsIDB4OTc4MCwgMCwgezB4NDAsMHhiMiwweDQwLDB4MGIsMHg5MCwweDAzLDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQxLDB4MDgsMHg5MCwweDQyLDB4ZTAgfX0sCisgezE2LCAweDk3OTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMiwweGJkLDB4MDAsMHgyMywweDQ4IH19LAorIHsxNiwgMHg5N2EwLCAwLCB7MHgwOCwweGQwLDB4MDYsMHgxZCwweDA0LDB4OGQsMHgwMCwweDI5LDB4YzAsMHg0YSwweGQwLDB4MjIsMHhmNCwweDAwLDB4ODUsMHgwMCB9fSwKKyB7MTYsIDB4OTdiMCwgMCwgezB4NjEsMHg0MCwweDE4LDB4ZDAsMHgxMiwweGZjLDB4MDAsMHhiZCwweDQwLDB4YTMsMHg0MCwweDRiLDB4ZjAsMHgwMiwweDA0LDB4MDEgfX0sCisgezE2LCAweDk3YzAsIDAsIHsweDhiLDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5N2QwLCAwLCB7MHgwOCwweDA0LDB4MzYsMHg4MCwweDg1LDB4MjAsMHhhMywweDQ4LDB4MDgsMHg1MiwweDBhLDB4MTQsMHg4MSwweDg1LDB4MjAsMHgyOSB9fSwKKyB7MTYsIDB4OTdlMCwgMCwgezB4NDgsMHgwOCwweDUyLDB4MDIsMHhiNCwweDgwLDB4ODUsMHgyMCwweDI1LDB4NDgsMHg4OCwweDUyLDB4MDIsMHhkNCwweDgwLDB4YjUgfX0sCisgezE2LCAweDk3ZjAsIDAsIHsweDIwLDB4MjEsMHg0OCwweDBiLDB4NTIsMHgwMiwweDQ0LDB4YTIsMHg4MSwweDAwLDB4MmMsMHg0YSwweDA4LDB4MTIsMHg4MiwweGMyIH19LAorIHsxNiwgMHg5ODAwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhmOCwweDUxLDB4MjIsMHgwMCB9fSwKKyB7MTYsIDB4OTgxMCwgMCwgezB4MmMsMHg4NSwweDAyLDB4MjEsMHg0OCwweGM4LDB4MDAsMHhiYSwweDE0LDB4MGYsMHg4NSwweDEyLDB4ZTEsMHg0MiwweGM4LDB4NTAgfX0sCisgezE2LCAweDk4MjAsIDAsIHsweDIyLDB4MDAsMHgwYywweDAwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHg1MCwweDMyLDB4MDAsMHgwNywweDQ1LDB4MDMsMHgyMCwweDgwIH19LAorIHsxNiwgMHg5ODMwLCAwLCB7MHhjMCwweDAxLDB4M2UsMHgwOCwweDJjLDB4ODIsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTg0MCwgMCwgezB4OTgsMHgwZCwweGU0LDB4NDAsMHhmMSwweDEwLDB4M2UsMHg0NCwweDA3LDB4OTEsMHg0MywweGU0LDB4NTgsMHhmOSwweDExLDB4MzQgfX0sCisgezE2LCAweDk4NTAsIDAsIHsweDQ0LDB4NGYsMHg5MSwweDAyLDB4ZTQsMHg1MCwweGY5LDB4MTAsMHgzYywweDRmLDB4MGYsMHg5MywweDgzLDB4ZTQsMHhmMCwweGY5IH19LAorIHsxNiwgMHg5ODYwLCAwLCB7MHgxMSwweDNhLDB4NGYsMHgwZiwweDkxLDB4MDMsMHhlNCwweGEwLDB4ZmQsMHgyOCwweDNlLDB4NGEsMHgwZiwweDkyLDB4ODMsMHhlNiB9fSwKKyB7MTYsIDB4OTg3MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweGEwLDB4Y2QsMHhhMCwweGIzLDB4NjggfX0sCisgezE2LCAweDk4ODAsIDAsIHsweDhjLDB4OWEsMHgwMywweDM2LDB4ODAsMHhjNSwweGEwLDB4MjIsMHg2MCwweDBjLDB4OWEsMHgyMywweDI2LDB4MDQsMHhmOSwweGEwIH19LAorIHsxNiwgMHg5ODkwLCAwLCB7MHgzMiwweDY2LDB4MGMsMHg5YSwweDgzLDB4MDYsMHgyMCwweGM1LDB4YTAsMHgyMiwweDYwLDB4MGMsMHg5YiwweDAzLDB4MjYsMHg0OCB9fSwKKyB7MTYsIDB4OThhMCwgMCwgezB4YzksMHgwMCwweDNlLDB4NzgsMHgwYywweDlhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4YjAsIDAsIHsweDM4LDB4MDAsMHhlMSwweDAwLDB4ODgsMHg0NCwweDIyLDB4OTUsMHgwOCwweDg1LDB4MTIsMHhhMSwweDQyLDB4ODgsMHg0MCwweDAyIH19LAorIHsxNiwgMHg5OGMwLCAwLCB7MHg5MCwweDA4LDB4ODQsMHgwMiwweDIzLDB4YTAsMHhiYSwweDQwLDB4MjIsMHhhMCwweDA4LDB4OGUsMHg5MiwweGEzLDB4YTAsMHhhOCB9fSwKKyB7MTYsIDB4OThkMCwgMCwgezB4NDAsMHgyYSwweDEwLDB4MDgsMHhhZSwweDAyLDB4MjMsMHg0MCwweDg4LDB4MDAsMHgyZSwweDM4LDB4MDgsMHg4NCwweDEyLDB4MGUgfX0sCisgezE2LCAweDk4ZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDE1LDB4YzQsMHgwMCwweDhiLDB4MTIsMHgyMiwweDQwIH19LAorIHsxNiwgMHg5OGYwLCAwLCB7MHgwOCwweDkwLDB4MDIsMHg0NCwweDAwLDB4ODEsMHg0MCwweGEwLDB4NTAsMHgwOCwweDExLDB4MGEsMHgwNSwweDAwLDB4YjEsMHgxMCB9fSwKKyB7MTYsIDB4OTkwMCwgMCwgezB4YTAsMHg0OCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4MSwweDQwLDB4MjAsMHg1MCwweDI4LDB4MTEsMHgwMiwweDQ0LDB4ODIgfX0sCisgezE2LCAweDk5MTAsIDAsIHsweDgxLDB4MDAsMHgyYywweDUwLDB4MDgsMHgxMSwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OTIwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgwMiwweDg5LDB4NDAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDEyLDB4YTUsMHgwMCwweDg5LDB4MjgsMHgyMiB9fSwKKyB7MTYsIDB4OTkzMCwgMCwgezB4NDksMHgwOCwweDk0LDB4MDIsMHgyNCwweDQ4LDB4YjksMHgxNCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHhhNCwweDQwLDB4YTEgfX0sCisgezE2LCAweDk5NDAsIDAsIHsweDUwLDB4MmEsMHg1MCwweDA4LDB4OTEsMHg0MiwweDY0LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2IH19LAorIHsxNiwgMHg5OTUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MDAsMHhjOSwweDAwLDB4MzAsMHg3MCB9fSwKKyB7MTYsIDB4OTk2MCwgMCwgezB4MmMsMHgxMCwweDBiLDB4NjYsMHgwMCwweGM5LDB4NDAsMHgzMiwweDUwLDB4MGMsMHg5MCwweDAzLDB4MjYsMHgyMCwweGY5LDB4YzAgfX0sCisgezE2LCAweDk5NzAsIDAsIHsweDMyLDB4NzAsMHgwYywweDkwLDB4MDMsMHgyNiwweDIwLDB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDljLDB4MDMsMHg2NCwweDAwIH19LAorIHsxNiwgMHg5OTgwLCAwLCB7MHhjOSwweDQxLDB4M2UsMHg0MCwweDJjLDB4OTAsMHgwYiwweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTk5MCwgMCwgezB4MjgsMHgwMSwweGE0LDB4MDAsMHhmOSwweDA0LDB4M2UsMHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4ODgsMHhmOSwweDAwLDB4MzQgfX0sCisgezE2LCAweDk5YTAsIDAsIHsweDQxLDB4MmYsMHg5YywweDAzLDB4ZTQsMHgxMCwweGY5LDB4MDAsMHgzZSwweDQ0LDB4MmYsMHg5OSwweDAzLDB4ZTQsMHgxMCwweGY5IH19LAorIHsxNiwgMHg5OWIwLCAwLCB7MHgwMCwweDNlLDB4NTAsMHgwZiwweDEwLDB4NGIsMHhhNCwweDEwLDB4ZjksMHgyMCwweDNjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg0YSB9fSwKKyB7MTYsIDB4OTljMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MTAgfX0sCisgezE2LCAweDk5ZDAsIDAsIHsweDJjLDB4ODAsMHgwMywweDIwLDB4MDIsMHhjMCwweDQwLDB4MzIsMHgwMCwweDFjLDB4MDQsMHgwZiwweDIxLDB4MDAsMHhjMCwweDA0IH19LAorIHsxNiwgMHg5OWUwLCAwLCB7MHgzOCwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjEsMHgwOCwweGM4LDB4NjAsMHgzMCwweDEwLDB4MGYsMHg4MCwweDAyLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4OTlmMCwgMCwgezB4ZjgsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHhjYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhMDAsIDAsIHsweDI4LDB4MDUsMHgxYSwweDIwLDB4ODIsMHgwNCwweDJmLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgzOCwweDAwLDB4OGUsMHg4MCwweDIyIH19LAorIHsxNiwgMHg5YTEwLCAwLCB7MHg4MCwweDA4LDB4ZTAsMHgwMiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MSwweDBiLDB4MjAsMHgwMiwweDI4LDB4MDAsMHhkZSB9fSwKKyB7MTYsIDB4OWEyMCwgMCwgezB4ZTQsMHgzNiwweDgwLDB4MGIsMHhhMCwweDQyLDB4MjgsMHgwMCwweGJhLDB4MDQsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4Y2EgfX0sCisgezE2LCAweDlhMzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MDEsMHgyYywweDgwIH19LAorIHsxNiwgMHg5YTQwLCAwLCB7MHgwOCwweDMwLDB4MDIsMHgyZSwweDYwLDB4ODIsMHg5MCwweGEwLDB4YzAsMHg0OCwweDMwLDB4MDIsMHgwYywweDAyLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4OWE1MCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MzAsMHgwYSwweDJjLDB4MDAsMHg4MywweGMyLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgyYSwweDJjLDB4MDAgfX0sCisgezE2LCAweDlhNjAsIDAsIHsweGIzLDB4MDAsMHhhMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YTcwLCAwLCB7MHhhMCwweDAxLDB4M2MsMHgwMCwweDg3LDB4MDEsMHgyZCwweGMyLDB4MDgsMHhmMywweDEyLDB4M2MsMHgwMCwweDhmLDB4MDEsMHgyMSB9fSwKKyB7MTYsIDB4OWE4MCwgMCwgezB4YzgsMHg2OCwweDcyLDB4MjIsMHgxZSwweDA0LDB4ODcsMHgyMCwweDIxLDB4YzQsMHgwYiwweDcwLDB4MDIsMHgzYywweDg0LDB4OWYgfX0sCisgezE2LCAweDlhOTAsIDAsIHsweDAwLDB4MjUsMHhjNCwweDRiLDB4NzAsMHgwMiwweDFjLDB4MDQsMHhiNywweDgxLDB4MjEsMHhjOCwweDA4LDB4NzIsMHgwMiwweGU4IH19LAorIHsxNiwgMHg5YWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwMCwweDFlLDB4MDAsMHhjNywweDgxLDB4M2MsMHhhMCB9fSwKKyB7MTYsIDB4OWFiMCwgMCwgezB4NGMsMHg3YSwweDBiLDB4MWEsMHgwMCwweGM2LDB4ODAsMHgzMCwweGUwLDB4MDgsMHhmOCwweDgyLDB4MGUsMHg0MCwweGNmLDB4ZjAgfX0sCisgezE2LCAweDlhYzAsIDAsIHsweDM5LDB4ZTgsMHgwZiwweDNhLDB4MDMsMHgxZSwweDIwLDB4YzcsMHg4MCwweDMxLDB4ZTMsMHgwZiwweDM4LDB4MjMsMHgxZiwweDA4IH19LAorIHsxNiwgMHg5YWQwLCAwLCB7MHhmZiwweGMwLDB4MzMsMHhmMiwweDBjLDB4N2UsMHgwMywweGVhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWFlMCwgMCwgezB4MDgsMHgxNSwweDg4LDB4MGEsMHg3YiwweDAwLDB4M2UsMHhjMSwweDBiLDB4MzQsMHgyMywweGM4LDB4MTAsMHhmYiwweDAyLDB4M2UgfX0sCisgezE2LCAweDlhZjAsIDAsIHsweGNhLDB4MGYsMHhiNywweDQzLDB4ZWMsMHg4MCwweGZiLDB4MDAsMHgyZSwweGMyLDB4MGIsMHhiNCwweDgzLDB4ZWQsMHhkMCwweGZhIH19LAorIHsxNiwgMHg5YjAwLCAwLCB7MHgwMCwweDNlLDB4ZDksMHgwZiwweGIzLDB4ODMsMHhlYywweDgwLDB4YmIsMHgyMCwweDNlLDB4ZDgsMHgyZiwweGI0LDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4OWIxMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZjUsMHg5MSwweDMxLDB4YTAgfX0sCisgezE2LCAweDliMjAsIDAsIHsweDBjLDB4ZmMsMHgwMywweGZlLDB4MDAsMHhjNCwweDgxLDB4MzEsMHhlZSwweDhkLDB4ZjgsMHgwYSwweDNlLDB4MzAsMHhjZiwweDg0IH19LAorIHsxNiwgMHg5YjMwLCAwLCB7MHgzMywweGUwLDB4MmMsMHhmOCwweDgzLDB4ZmUsMHgxMCwweGZlLDB4ODAsMHgzMywweGUwLDB4MGMsMHhmOSwweDE5LDB4M2YsMHg0OCB9fSwKKyB7MTYsIDB4OWI0MCwgMCwgezB4Y2YsMHhjMCwweDMzLDB4ZTAsMHgwNCwweGZjLDB4MDMsMHhjMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliNTAsIDAsIHsweGE4LDB4MTEsMHg5YywweDA4LDB4YjcsMHhhMSwweDIxLDB4YzgsMHgwOCwweDcxLDB4MDIsMHhmMCwweGEwLDB4ODUsMHgyMCwweDIxIH19LAorIHsxNiwgMHg5YjYwLCAwLCB7MHhjZSwweDA4LDB4NzAsMHgwMiwweDNjLDB4ODAsMHg4ZiwweDAwLDB4MmIsMHhjNSwweDA4LDB4NzEsMHgwMiwweGRjLDB4MTAsMHhiNCB9fSwKKyB7MTYsIDB4OWI3MCwgMCwgezB4MDAsMHgyMSwweGMxLDB4MGEsMHhmMywweDgyLDB4MGMsMHgwMCwweDg3LDB4MDEsMHgyOSwweGMwLDB4MDgsMHg3MSwweDAyLDB4NmEgfX0sCisgezE2LCAweDliODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWQsMHgwMCwweGJkLDB4MjEsMHgyNywweDgyIH19LAorIHsxNiwgMHg5YjkwLCAwLCB7MHgwMCwweDcwLDB4MDIsMHhmYywweDA0LDB4OGMsMHgwMCwweGE3LDB4Y2MsMHhhOCwweDcwLDB4MDIsMHgzYywweDA4LDB4YWYsMHgwMCB9fSwKKyB7MTYsIDB4OWJhMCwgMCwgezB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweDAwLDB4MjEsMHhjNCwweDA4LDB4NzAsMHgxNiwweDFjLDB4MGEgfX0sCisgezE2LCAweDliYjAsIDAsIHsweDhmLDB4MDAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YmMwLCAwLCB7MHgyMCwweDEwLDB4YzgsMHgwMCwweGJiLDB4NDQsMHgyNCwweGUyLDB4MDgsMHhiMSwweDAyLDB4YzIsMHg4MCwweDAxLDB4ODAsMHgyNCB9fSwKKyB7MTYsIDB4OWJkMCwgMCwgezB4ZDAsMHg4OCwweDMwLDB4MDIsMHgwZiwweDUyLDB4ODMsMHg5MSwweDI4LDB4ZTQsMHg4OCwweDNkLDB4MDIsMHhjZSwweGQwLDB4YjAgfX0sCisgezE2LCAweDliZTAsIDAsIHsweGIyLDB4YTIsMHhjMCwweDBhLDB4MzQsMHgxMiwweDBjLDB4MDIsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDQ4IH19LAorIHsxNiwgMHg5YmYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFjLDB4MDAsMHhmYiwweDAxLDB4ZTQsMHg0MCB9fSwKKyB7MTYsIDB4OWMwMCwgMCwgezB4MmMsMHhmMCwweDQzLDB4ZTUsMHgwMCwweDhhLDB4ODgsMHgzNywweGUwLDB4MDAsMHhmYSwweDAyLDB4M2QsMHgwMCwweGVmLDB4MDAgfX0sCisgezE2LCAweDljMTAsIDAsIHsweDMzLDB4ZDEsMHgwYywweGY0LDB4MDMsMHhmZCwweDAwLDB4ZjksMHg0MCwweDMzLDB4ZTgsMHgwYywweGZjLDB4MDEsMHgzYywweDA0IH19LAorIHsxNiwgMHg5YzIwLCAwLCB7MHhjZiwweDAyLDB4MzMsMHhjMCwweDJjLDB4ZjAsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWMzMCwgMCwgezB4ODAsMHgwMCwweGVlLDB4MDgsMHhmOSwweDEwLDB4M2EsMHhkMCwweDBmLDB4YjAsMHg5MywweGVjLDB4MDAsMHhmYiwweDBiLDB4M2EgfX0sCisgezE2LCAweDljNDAsIDAsIHsweGMwLDB4OGUsMHhiMCwweDgzLDB4ZWMsMHg4MCwweGZiLDB4MDksMHg3ZSwweGM4LDB4MGYsMHhiMiwweDEzLDB4ZWMsMHgwMCwweGY5IH19LAorIHsxNiwgMHg5YzUwLCAwLCB7MHgwMCwweDNlLDB4YzIsMHg4ZiwweGIyLDB4NGIsMHhjYywweDA0LDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg2MCB9fSwKKyB7MTYsIDB4OWM2MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwOCwweDMzLDB4YzAgfX0sCisgezE2LCAweDljNzAsIDAsIHsweDFjLDB4ZjAsMHgwMywweDcwLDB4NDAsMHhjNCwweGMwLDB4MzMsMHhjMiwweDBmLDB4ZjAsMHgwMywweDFjLDB4MTAsMHhjNywweDAwIH19LAorIHsxNiwgMHg5YzgwLCAwLCB7MHgzMSwweGMwLDB4MGMsMHg3MCwweDAzLDB4MWMsMHgwMCwweGM1LDB4NDEsMHgzMywweGMwLDB4MGMsMHhmMCwweDIzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OWM5MCwgMCwgezB4Y2YsMHgwMCwweGIzLDB4YzAsMHg2YywweGYwLDB4MDMsMHg4MCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDljYTAsIDAsIHsweDgxLDB4MDQsMHg2YSwweDAwLDB4YjksMHg5MCwweDMyLDB4ZjEsMHgwOCwweGIwLDB4MDIsMHgwYSwweDEwLDB4ZDksMHgwMCwweDIyIH19LAorIHsxNiwgMHg5Y2IwLCAwLCB7MHhjMSwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhjYiwweDA2LDB4MjIsMHhjMCwweDg4LDB4YjAsMHgxMiwweDJjLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4OWNjMCwgMCwgezB4ODAsMHgyMiwweGMxLDB4MGQsMHhiMCwweDAyLDB4MmMsMHgwMCwweDgzLDB4MDAsMHgyMiwweGMxLDB4MDgsMHhiMCwweDQ2LDB4ZTAgfX0sCisgezE2LCAweDljZDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MmUsMHgwMCwweGI5LDB4MDAsMHgyMiwweGYwIH19LAorIHsxNiwgMHg5Y2UwLCAwLCB7MHgwOCwweGIwLDB4MTIsMHg2NCwweDAwLDB4OGEsMHgwMCwweDIyLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgyYywweDAwLDB4OGIsMHgwMCB9fSwKKyB7MTYsIDB4OWNmMCwgMCwgezB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4YSwweDAwLDB4MjIsMHhjMCwweDg4LDB4MzAsMHgwYSwweDJjLDB4MDAgfX0sCisgezE2LCAweDlkMDAsIDAsIHsweDhiLDB4MDAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZDEwLCAwLCB7MHgwOCwweDA0LDB4MGMsMHgwNCwweGIxLDB4MDIsMHhlNCwweGMxLDB4MDgsMHhiMCwweDIyLDB4MjAsMHgwMiwweDkzLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4OWQyMCwgMCwgezB4YzAsMHgwYiwweDMwLDB4MTIsMHgwYywweDAyLDB4ODMsMHgwMiwweGEwLDB4YzAsMHgyOCwweDMwLDB4MGUsMHgwYywweDAyLDB4ODAgfX0sCisgezE2LCAweDlkMzAsIDAsIHsweDAwLDB4YTAsMHhjMCwweDQ5LDB4MzAsMHgwYSwweDBjLDB4MDIsMHg4YiwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHg5ZDQwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhmOSwweDI0LDB4MzIsMHhjMCB9fSwKKyB7MTYsIDB4OWQ1MCwgMCwgezB4MDgsMHhmMCwweDAzLDB4NjQsMHgwMCwweGM4LDB4MDAsMHhiMywweGMwLDB4MWYsMHhmMCwweDBiLDB4M2MsMHgwMCwweDhmLDB4MDAgfX0sCisgezE2LCAweDlkNjAsIDAsIHsweDMzLDB4YzAsMHg0YywweGYwLDB4NDMsMHgzYywweDA4LDB4YzMsMHgwMCwweDMxLDB4YzAsMHgwYywweGYwLDB4MDMsMHgzZCwweDQ4IH19LAorIHsxNiwgMHg5ZDcwLCAwLCB7MHhjZiwweDAwLDB4MzEsMHhjMCwweDBjLDB4ZjAsMHgwMywweDgwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWQ4MCwgMCwgezB4YTAsMHgxZCwweGYwLDB4MDQsMHhmOSwweDQxLDB4M2IsMHhjMCwweDRmLDB4ZjAsMHgwMywweGYwLDB4MTEsMHhmZCwweDAwLDB4M2YgfX0sCisgezE2LCAweDlkOTAsIDAsIHsweGMwLDB4ODcsMHg3MCwweDI3LDB4ZmMsMHgwMCwweGVmLDB4MDYsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAyLDB4ZmMsMHgwOCwweGZjIH19LAorIHsxNiwgMHg5ZGEwLCAwLCB7MHgwMCwweDNmLDB4YzAsMHg0NywweGYwLDB4NDMsMHhmYywweDAwLDB4NzcsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4OWRiMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkMiwweDAwLDB4YzcsMHgwMSwweDM3LDB4MGMgfX0sCisgezE2LCAweDlkYzAsIDAsIHsweDBmLDB4ZTgsMHgyMywweDEwLDB4NGEsMHhjNCwweGMwLDB4MzEsMHgzMCwweDBjLDB4YzksMHgwMywweDM0LDB4NDYsMHhjZiwweDEwIH19LAorIHsxNiwgMHg5ZGQwLCAwLCB7MHgzMywweGQwLDB4MGMsMHhmNCwweDAzLDB4M2MsMHg1OCwweGNmLDB4MDAsMHgzMywweGMwLDB4MmQsMHhmMSwweDAzLDB4M2UsMHgwMiB9fSwKKyB7MTYsIDB4OWRlMCwgMCwgezB4Y2YsMHgyMSwweDNmLDB4ZTQsMHgwZiwweGYyLDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkZjAsIDAsIHsweDgwLDB4MTAsMHhlNCwweDg0LDB4MGIsMHg0MCwweDIyLDB4NGMsMHgwYiwweGE4LDB4MDIsMHgyYywweGMwLDB4OGIsMHgyMCwweDIyIH19LAorIHsxNiwgMHg5ZTAwLCAwLCB7MHhjOCwweDRhLDB4MzIsMHgwMiwweDI0LDB4ODAsMHg4MywweDIwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDIwLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4OWUxMCwgMCwgezB4MjEsMHgzMiwweGNhLDB4NDgsMHgzMiwweDAyLDB4MmMsMHgzMCwweDhmLDB4OTAsMHgyZSwweDg4LDB4MGIsMHhiZCwweDEyLDB4MjAgfX0sCisgezE2LCAweDllMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2UsMHgyMCwweGEzLDB4NDAsMHhlMCwweDQ4IH19LAorIHsxNiwgMHg5ZTMwLCAwLCB7MHg0YiwweDIwLDB4MjIsMHgwYywweDAyLDB4ODIsMHgwMCwweDJhLDB4MDAsMHgwOCwweDIwLDB4MDIsMHgwNCwweDgwLDB4ODAsMHgyMCB9fSwKKyB7MTYsIDB4OWU0MCwgMCwgezB4MjAsMHhjOCwweDA4LDB4MDIsMHgwMiwweDBjLDB4MDAsMHg4MCwweDBjLDB4NjAsMHgwMCwweDA4LDB4MjAsMHgxMiwweDJjLDB4ODggfX0sCisgezE2LCAweDllNTAsIDAsIHsweDgzLDB4MDAsMHgyYywweGU4LDB4MGIsMHgzMCwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZTYwLCAwLCB7MHhjMCwweDE1LDB4YWUsMHgwMCwweGFiLDB4MDEsMHhhMiwweDYwLDB4MGIsMHhhMCwweDAyLDB4MjAsMHgwMSwweDgxLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4OWU3MCwgMCwgezB4YzAsMHgwYSwweDkwLDB4MTIsMHgwNCwweDIwLDB4OGEsMHgwOCwweDIyLDB4YzEsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ODggfX0sCisgezE2LCAweDllODAsIDAsIHsweDAwLDB4MjQsMHg0NCwweDA4LDB4YTIsMHgwMiwweGFjLDB4MDAsMHg4YiwweDA0LDB4MmUsMHg4OCwweDAzLDB4YjAsMHgwMiwweDcwIH19LAorIHsxNiwgMHg5ZTkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxNSwweGVjLDB4MDAsMHhlYSwweDkwLDB4MzIsMHgyOCB9fSwKKyB7MTYsIDB4OWVhMCwgMCwgezB4MGYsMHhiNiwweDAzLDB4MjAsMHgwOCwweGM5LDB4MDQsMHgzYSwweGMwLDB4NGMsMHg5MCwweDIyLDB4MjQsMHgwMCwweGNiLDB4NDAgfX0sCisgezE2LCAweDllYjAsIDAsIHsweDMyLDB4YTgsMHgwYywweGIyLDB4MDMsMHgyYywweDAwLDB4Y2IsMHg4MCwweGIyLDB4ZTAsMHgwYywweGIwLDB4MGIsMHgwNCwweDAwIH19LAorIHsxNiwgMHg5ZWMwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwYiwweDUwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWVkMCwgMCwgezB4ZTAsMHgwMSwweGJjLDB4MDAsMHhkZiwweDgwLDB4M2IsMHg4MSwweDBmLDB4ZjAsMHhjMywweGZjLDB4MDAsMHhiZSwweDAxLDB4MWYgfX0sCisgezE2LCAweDllZTAsIDAsIHsweDAwLDB4MGYsMHhlMCwweDIzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGIwLDB4NGYsMHhmMCwweDQzLDB4ZDQsMHgwMiwweGZmIH19LAorIHsxNiwgMHg5ZWYwLCAwLCB7MHg5MSwweDNhLDB4ZTAsMHg0ZSwweGYwLDB4MDMsMHg3YywweDBjLDB4ZmYsMHgwMCwweDJmLDB4ODAsMHgwZiwweDMwLDB4MDMsMHhiOCB9fSwKKyB7MTYsIDB4OWYwMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAxLDB4Y2EsMHgwMCwweDcyLDB4NTAgfX0sCisgezE2LCAweDlmMTAsIDAsIHsweDA0LDB4YjQsMHgwMywweDJjLDB4ODIsMHhjYiwweDAwLDB4MzIsMHhlMCwweDBjLDB4YjgsMHgwMywweDI3LDB4MDQsMHhjOCwweGM4IH19LAorIHsxNiwgMHg5ZjIwLCAwLCB7MHhiMiwweGEyLDB4MGMsMHg4OCwweDAzLDB4MmMsMHgwMCwweGMxLDB4MDAsMHgzZSwweDAwLDB4MmMsMHgzMCwweDFiLDB4MmMsMHgwNCB9fSwKKyB7MTYsIDB4OWYzMCwgMCwgezB4ZmIsMHgxMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmNDAsIDAsIHsweGM4LDB4MDUsMHgyYywweDA0LDB4MDMsMHg1MCwweGEyLDB4ZTAsMHgwOCwweDM0LDB4NDIsMHgzMywweDAwLDB4ODgsMHgwMCwweDIwIH19LAorIHsxNiwgMHg5ZjUwLCAwLCB7MHgxMCwweDBkLDB4ODQsMHgwMywweDI1LDB4MDAsMHg4YSwweDQwLDB4MjIsMHg5MCwweDA4LDB4YTUsMHgwMiwweDJjLDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4OWY2MCwgMCwgezB4YTQsMHgzYSwweDQwLDB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJmLDB4ODQsMHgyZSwweDgwLDB4MGIsMHhmMCwweDUyLDB4MzIgfX0sCisgezE2LCAweDlmNzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NmMsMHg4MCwweDgxLDB4ODAsMHgyNCwweDg4IH19LAorIHsxNiwgMHg5ZjgwLCAwLCB7MHg4OSwweDNjLDB4MjYsMHgyMSwweDAwLDB4OTAsMHgwMCwweDIwLDB4MDIsMHgwOCwweDgwLDB4ODIsMHgwMCwweDIwLDB4OWIsMHgwMCB9fSwKKyB7MTYsIDB4OWY5MCwgMCwgezB4MjIsMHg0MCwweDg4LDB4YjAsMHgxMiwweDBjLDB4MDgsMHg4MywweDgwLDB4MmMsMHhjMCwweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAgfX0sCisgezE2LCAweDlmYTAsIDAsIHsweGIzLDB4ODAsMHgyYywweDQwLDB4MGIsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZmIwLCAwLCB7MHgyMCwweDAxLDB4M2UsMHgwYSwweDg1LDB4YTAsMHhhNSwweDYwLDB4MDgsMHhmYiwweDgyLDB4M2UsMHg4NCwweDlmLDB4ODEsMHg2MyB9fSwKKyB7MTYsIDB4OWZjMCwgMCwgezB4ZTAsMHg4OSwweDc5LDB4MTIsMHg1MiwweDgwLDB4OTcsMHg4MiwweDIxLDB4NmMsMHgxOCwweDc4LDB4MDIsMHgxMiwweDAwLDB4ODcgfX0sCisgezE2LCAweDlmZDAsIDAsIHsweGExLDB4MjksMHhlMCwweDA4LDB4NWIsMHgwMiwweDFlLDB4MDAsMHhiNywweGMwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweDA4IH19LAorIHsxNiwgMHg5ZmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDBjLDB4MDAsMHg4MSwweDA4LDB4MjYsMHhjMiB9fSwKKyB7MTYsIDB4OWZmMCwgMCwgezB4MmMsMHgzMiwweDEzLDB4MGUsMHhhNCwweGQyLDB4MDAsMHhiMCwweDAwLDB4MWMsMHgyMSwweDEyLDB4MjQsMHgwMiwweGQxLDB4MjAgfX0sCisgezE2LCAweGEwMDAsIDAsIHsweDMwLDB4YzgsMHgwYywweDEwLDB4MDMsMHgwYywweDAwLDB4YzIsMHgxMCwweDNjLDB4ODAsMHgwYywweDIzLDB4MDMsMHgwYywweDQwIH19LAorIHsxNiwgMHhhMDEwLCAwLCB7MHhmMywweDAwLDB4M2MsMHg0OCwweDBmLDB4MzAsMHgwYiwweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTAyMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhmZCwweDIwLDB4YmIsMHg0MCwweDA3LDB4NzIsMHgwMiwweGYwLDB4MTAsMHhlZCwweDEwLDB4M2YgfX0sCisgezE2LCAweGEwMzAsIDAsIHsweGM0LDB4MGYsMHhkMSwweDYzLDB4YjQsMHg4MCwweGVmLDB4MDAsMHgzZiwweGM4LDB4MGYsMHhmMCwweDAzLDB4ZDgsMHgwMCwweGZlIH19LAorIHsxNiwgMHhhMDQwLCAwLCB7MHgzNCwweDNmLDB4YzQsMHgwZiwweGViLDB4NDMsMHhmYywweDAwLDB4ZmYsMHgwOCwweDdmLDB4NDAsMHgwZiwweGYxLDB4ODMsMHhkMCB9fSwKKyB7MTYsIDB4YTA1MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4YzgsMHgwMCwweDMzLDB4ODAgfX0sCisgezE2LCAweGEwNjAsIDAsIHsweDhmLDB4MjgsMHgwMywweDIwLDB4MDAsMHg0OSwweDAyLDB4MzIsMHhjMCwweDBmLDB4OTAsMHgwMywweDIwLDB4MDAsMHhjYiwweDAwIH19LAorIHsxNiwgMHhhMDcwLCAwLCB7MHgzMiwweDQwLDB4NGMsMHhiMCwweDBiLDB4MmMsMHgwMCwweGNiLDB4ODAsMHgzMiwweGMwLDB4MGUsMHg5ZSwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTA4MCwgMCwgezB4ZmIsMHgyMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwOTAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4OGQsMHgwMSwweDIxLDB4YzAsMHgwYiwweDYwLDB4MDIsMHgxZCwweDAwLDB4ZDYsMHgwMCwweDIxIH19LAorIHsxNiwgMHhhMGEwLCAwLCB7MHgwMCwweDBiLDB4ZTAsMHgwMiwweDAwLDB4MDAsMHg4MywweDA0LDB4MjAsMHg0MCwweDA4LDB4NzAsMHg0MiwweDM0LDB4MDIsMHg4NyB9fSwKKyB7MTYsIDB4YTBiMCwgMCwgezB4MDEsMHgyMywweGMwLDB4MjgsMHg1MSwweDBhLDB4MWMsMHgwNCwweGI3LDB4MzAsMHgyZCwweGMwLDB4MGIsMHg3MiwweDAzLDB4OTIgfX0sCisgezE2LCAweGEwYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGE2LDB4NDAsMHgyMSwweGEwIH19LAorIHsxNiwgMHhhMGQwLCAwLCB7MHgwYiwweDY4LDB4MDIsMHgwZSwweDAwLDB4OGYsMHg4MCwweDIxLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHgxNiwweDEwLDB4YTUsMHg4MCB9fSwKKyB7MTYsIDB4YTBlMCwgMCwgezB4MjEsMHhlMCwweDA4LDB4MTgsMHgwMiwweDFlLDB4MDAsMHg4MywweDgwLDB4MjEsMHhhMCwweDA4LDB4NzgsMHgwMiwweDFmLDB4MDAgfX0sCisgezE2LCAweGEwZjAsIDAsIHsweGI3LDB4ODAsMHgyZCwweGUwLDB4MGIsMHgzOCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMTAwLCAwLCB7MHg0OCwweDE0LDB4ZWMsMHgxMiwweGExLDB4NjQsMHgyMCwweGU2LDB4MGIsMHgyMCwweDAyLDB4MDAsMHgxMCwweDkwLDB4NGEsMHgyMCB9fSwKKyB7MTYsIDB4YTExMCwgMCwgezB4MjAsMHg0YiwweDAwLDB4NDIsMHgwNCwweDAwLDB4ODMsMHgwMCwweDIwLDB4YzIsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4ODMgfX0sCisgezE2LCAweGExMjAsIDAsIHsweDA0LDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDBlLDB4MDAsMHhiMywweDAwLDB4MmMsMHhlMCwweDRiLDB4MzAsMHgwMiwweDkyIH19LAorIHsxNiwgMHhhMTMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI4LDB4MDAsMHhlZSwweGMwLDB4MzMsMHg5MCB9fSwKKyB7MTYsIDB4YTE0MCwgMCwgezB4MGYsMHhhMCwweDFiLDB4MDgsMHgwMCwweGNhLDB4NDAsMHhiMiwweDgyLDB4MGYsMHhhMCwweDBiLDB4MjgsMHgwMiwweGNhLDB4MDAgfX0sCisgezE2LCAweGExNTAsIDAsIHsweGIyLDB4OTAsMHhhYywweGEwLDB4MDMsMHgyOSwweDAwLDB4Y2EsMHg0MCwweGIyLDB4ODAsMHg4ZSwweGE0LDB4MDMsMHgyYSwweDAwIH19LAorIHsxNiwgMHhhMTYwLCAwLCB7MHhmYSwweDAwLDB4M2YsMHhhOCwweDBmLDB4YTAsMHgwYiwweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTE3MCwgMCwgezB4NDgsMHgwMCwweGUyLDB4MDIsMHg5MCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODgsMHgwMywweGYxLDB4MDAsMHhmYywweDAyLDB4M2YgfX0sCisgezE2LCAweGExODAsIDAsIHsweDIwLDB4MGYsMHhjOCwweDAzLDB4YzEsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4OGYsMHgwMCwweDAxLDB4NjAsMHgwMiwweGY4IH19LAorIHsxNiwgMHhhMTkwLCAwLCB7MHgwOCwweDNlLDB4MDAsMHgwZiwweDgwLDB4ODMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAsMHg4ZiwweDgwLDB4MTMsMHg5MiB9fSwKKyB7MTYsIDB4YTFhMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMCwweGIyLDB4NjQgfX0sCisgezE2LCAweGExYjAsIDAsIHsweDBmLDB4OTEsMHgwMywweGU0LDB4MDQsMHhjOSwweDAwLDB4MzIsMHg0MCwweDZjLDB4OTAsMHgwMywweDI1LDB4MDIsMHhjOSwweDkwIH19LAorIHsxNiwgMHhhMWMwLCAwLCB7MHhiMCwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgyMCwweGM5LDB4YTAsMHgzZSwweDQwLDB4NGMsMHg5MCwweDIzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4YTFkMCwgMCwgezB4ZjEsMHgwMCwweDkyLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExZTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4MCwweGEyLDB4NDAsMHgwYiwweDk2LDB4NDIsMHhlNSwweDA0LDB4ODksMHgwMCwweDIyIH19LAorIHsxNiwgMHhhMWYwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDgsMHgwOSwweDQxLDB4MjIsMHg0MCwweDQ4LDB4OTAsMHg0MiwweDI0LDB4MDQsMHg4OSB9fSwKKyB7MTYsIDB4YTIwMCwgMCwgezB4ODAsMHgyNiwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4MjAgfX0sCisgezE2LCAweGEyMTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjUsMHgwMCwweDg5LDB4MjAsMHgyMiwweDQwIH19LAorIHsxNiwgMHhhMjIwLCAwLCB7MHgwYiwweDkwLDB4MDIsMHhmNCwweDg0LDB4ODUsMHgwMCwweDIxLDB4NDAsMHg0OCwweDUwLDB4MDIsMHgyNCwweDIwLDB4OGQsMHgwOCB9fSwKKyB7MTYsIDB4YTIzMCwgMCwgezB4MjMsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDk0LDB4MDAsMHg4ZCwweDAwLDB4MjksMHg0MCwweDBhLDB4ZDAsMHgwMiwweGE0LDB4MDggfX0sCisgezE2LCAweGEyNDAsIDAsIHsweGI5LDB4MDAsMHgyOCwweDQwLDB4MTgsMHg5MCwweGMyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMjUwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweDgxLDB4MDAsMHgyMCwweDUxLDB4MGIsMHgxMCwweDAyLDB4ZjUsMHg4MCwweDg1LDB4YzEsMHhhMSB9fSwKKyB7MTYsIDB4YTI2MCwgMCwgezB4NTAsMHgwOCwweDU0LDB4MGEsMHgwNSwweDA2LDB4ODUsMHg0MCwweDIxLDB4NTAsMHg4OCwweDU0LDB4MDIsMHg5NSwweDAwLDB4ODUgfX0sCisgezE2LCAweGEyNzAsIDAsIHsweDQ0LDB4MmQsMHg1MCwweDJhLDB4NTQsMHgxMiwweGM1LDB4MDEsMHhiMSwweDAwLDB4MDgsMHg1MCwweDA4LDB4MTAsMHgwMiwweDAyIH19LAorIHsxNiwgMHhhMjgwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjYSwweDUwLDB4MzIsMHg4MCB9fSwKKyB7MTYsIDB4YTI5MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTgsMHgwMiwweGM4LDB4MDEsMHgzMiwweDAwLDB4MmMsMHhjMCwweDAzLDB4MjAsMHgwMCwweGM4LDB4MDIgfX0sCisgezE2LCAweGEyYTAsIDAsIHsweDMyLDB4MDAsMHgyYywweDgwLDB4MGIsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNhLDB4MDAsMHg0ZSwweDQwLDB4MjMsMHhhMCwweDA4IH19LAorIHsxNiwgMHhhMmIwLCAwLCB7MHhmOCwweDAwLDB4M2EsMHgwMCwweDJjLDB4ODAsMHgwYiwweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTJjMCwgMCwgezB4OTgsMHgxZCwweGRjLDB4MDQsMHhmZCwweDQwLDB4M2YsMHg1MCwweDRmLDB4OTAsMHg2MywweGU0LDB4NDAsMHhmMSwweDAyLDB4M2UgfX0sCisgezE2LCAweGEyZDAsIDAsIHsweDQxLDB4MGYsMHg5MCwweDEzLDB4ZjUsMHgwNCwweGY5LDB4NDEsMHgzZSwweDUwLDB4MGYsMHg5NCwweDQzLDB4NjUsMHgwMiwweGY5IH19LAorIHsxNiwgMHhhMmUwLCAwLCB7MHg0MSwweDM2LDB4NTAsMHg0ZCwweDk0LDB4MDMsMHhmNCwweDAwLDB4ZjksMHg0MSwweDM3LDB4NDAsMHg0ZiwweDk0LDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4YTJmMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmYywweDAwLDB4Y2QsMHhhOCwweDMzLDB4NzAgfX0sCisgezE2LCAweGEzMDAsIDAsIHsweDBmLDB4ZDAsMHgxMywweGY2LDB4ODgsMHhjZCwweDAwLDB4MzIsMHg1MCwweDRmLDB4MTQsMHgyMywweDA3LDB4YTAsMHhjOSwweGMwIH19LAorIHsxNiwgMHhhMzEwLCAwLCB7MHgzMiwweDc4LDB4MGMsMHg5ZSwweDAzLDB4MzcsMHgwMiwweGNkLDB4YzAsMHgzMiwweDY0LDB4MGYsMHg5OCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTMyMCwgMCwgezB4Y2QsMHgwMCwweDMyLDB4NDAsMHgyYywweGRhLDB4MDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEzMzAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDA4LDB4ODgsMHhlYiwweDIyLDB4MzAsMHgwYiwweDgwLDB4MTIsMHhlOCwweDA0LDB4YTAsMHhhMCwweDJhIH19LAorIHsxNiwgMHhhMzQwLCAwLCB7MHgyMCwweDBiLDB4OGEsMHgwYSwweDIzLDB4MDAsMHg4OCwweDgwLDB4MjIsMHgyOCwweDAwLDB4YzgsMHg0MiwweDIzLDB4ODAsMHg4MCB9fSwKKyB7MTYsIDB4YTM1MCwgMCwgezB4ZDQsMHgyMCwweDI4LDB4MDksMHg4MCwweDAyLDB4MjIsMHg5NCwweGE4LDB4MDAsMHgyYSwweDAwLDB4ODgsMHg4NSwweDAyLDB4MGUgfX0sCisgezE2LCAweGEzNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHhhMCwweDgzLDB4MDAsMHgyNCwweGQ4IH19LAorIHsxNiwgMHhhMzcwLCAwLCB7MHg4YiwweDEwLDB4MDIsMHhlNSwweDE0LDB4ODksMHgwYSwweDIxLDB4NDgsMHgwYiwweDUyLDB4MDIsMHg1NCwweDgwLDB4ODUsMHg0MCB9fSwKKyB7MTYsIDB4YTM4MCwgMCwgezB4MjUsMHg1OCwweDA5LDB4NTYsMHgwMiwweDQ1LDB4MDIsMHg4MSwweDIwLDB4MjAsMHg1MCwweDBiLDB4MTQsMHgwMiwweDA0LDB4MzAgfX0sCisgezE2LCAweGEzOTAsIDAsIHsweDgxLDB4MDAsMHgyMCwweDQwLDB4MDgsMHgxMCwweDAyLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhM2EwLCAwLCB7MHgxOCwweDE1LDB4YTQsMHgxMiwweDg5LDB4MDAsMHhhNiwweDQwLDB4MGIsMHg5MCwweDQyLDB4ZTQsMHg5OCwweGE5LDB4ODAsMHgyYiB9fSwKKyB7MTYsIDB4YTNiMCwgMCwgezB4NDAsMHgwYiwweDUxLDB4MDIsMHg1NSwweDAwLDB4OWQsMHgwOCwweDI3LDB4NDgsMHgwOSwweGY2LDB4MDIsMHg0NCwweDAwLDB4ODEgfX0sCisgezE2LCAweGEzYzAsIDAsIHsweDA0LDB4MjIsMHg0MCwweDE5LDB4OTEsMHg4YSwweDI0LDB4ODAsMHhhOSwweDAwLDB4MmEsMHg0MCwweDA4LDB4OTAsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhhM2QwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU3LDB4MDIsMHhjOSwweDA0LDB4MzYsMHg1OCB9fSwKKyB7MTYsIDB4YTNlMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YzUsMHgwMCwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDEzLDB4NjQsMHgwMiwweGM5LDB4MDAgfX0sCisgezE2LCAweGEzZjAsIDAsIHsweDM2LDB4NDAsMHgyZCwweDkwLDB4MGIsMHg2NiwweDA0LDB4YzksMHhlMCwweGIyLDB4NDgsMHg4ZiwweDk4LDB4NDcsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhNDAwLCAwLCB7MHhjOSwweDAwLDB4NzIsMHg0MCwweDBjLDB4MTAsMHgwMywweDY4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTQxMCwgMCwgezB4MjgsMHgwMSwweGE1LDB4MDgsMHhmOSwweDIxLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDQsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGE0MjAsIDAsIHsweDQwLDB4NGYsMHg5OCwweDgzLDB4YTQsMHgwMCwweGU5LDB4NDAsMHhiYSwweDYwLDB4MGUsMHg5MCwweDAzLDB4YTQsMHg4MCwweGY5IH19LAorIHsxNiwgMHhhNDMwLCAwLCB7MHhhMywweDNlLDB4NDgsMHgwZiwweDk4LDB4MGIsMHhlNCwweDAwLDB4ZjksMHgwMCwweDFlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg4YSB9fSwKKyB7MTYsIDB4YTQ0MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMiwweDQ4LDB4YzgsMHgyMCwweDMyLDB4MDggfX0sCisgezE2LCAweGE0NTAsIDAsIHsweDFmLDB4ODAsMHg4MywweGUxLDB4MjIsMHhjOCwweDAxLDB4MzMsMHgwMCwweDJjLDB4YzAsMHgwMywweDMwLDB4MDQsMHhjYywweDQwIH19LAorIHsxNiwgMHhhNDYwLCAwLCB7MHhiMSwweDAwLDB4MGMsMHg0NCwweDAzLDB4MjAsMHgxMiwweGM4LDB4NDEsMHgzMiwweDAwLDB4MmQsMHg4NCwweDBiLDB4NjAsMHgwMCB9fSwKKyB7MTYsIDB4YTQ3MCwgMCwgezB4ZjgsMHgwMCwweGIyLDB4MDAsMHg0YywweDgwLDB4MGIsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0ODAsIDAsIHsweDI4LDB4MDUsMHgzYSwweDAwLDB4YTYsMHgwMCwweDIzLDB4OTAsMHgwMywweGU0LDB4OTIsMHhmOCwweDAwLDB4ODIsMHgwMCwweDM2IH19LAorIHsxNiwgMHhhNDkwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHgwMywweDY4LDB4MDAsMHhjYSwweDAwLDB4MjIsMHg4MywweDA4LDB4YTAsMHgwMiwweDI4LDB4MDMsMHg4YSB9fSwKKyB7MTYsIDB4YTRhMCwgMCwgezB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGI2LDB4ODAsMHgyMiwweDgwLDB4MGQsMHhlOCwweDAyLDB4MGEgfX0sCisgezE2LCAweGE0YjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmUsMHgwMCwweDgyLDB4NDIsMHgyMCwweGMwIH19LAorIHsxNiwgMHhhNGMwLCAwLCB7MHgwYiwweDM0LDB4MDIsMHhjZCwweDA5LDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAyLDB4OTgsMHgwMCB9fSwKKyB7MTYsIDB4YTRkMCwgMCwgezB4MjAsMHgyMCwweDI4LDB4MDAsMHgwYSwweDA0LDB4MTAsMHg4MSwweDgwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAgfX0sCisgezE2LCAweGE0ZTAsIDAsIHsweGIzLDB4MDAsMHgyMiwweGMwLDB4MTgsMHgzMSwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNGYwLCAwLCB7MHhhMCwweDAxLDB4MzgsMHgwMiwweGEzLDB4MDAsMHgyMSwweDQwLDB4MWIsMHg3MCwweDAyLDB4ZGMsMHgyMCwweDg0LDB4MDUsMHg2NSB9fSwKKyB7MTYsIDB4YTUwMCwgMCwgezB4ZTAsMHgwOCwweGYwLDB4MDIsMHg3YywweDEwLDB4OTcsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg1NCwweDg4LDB4ODcgfX0sCisgezE2LCAweGE1MTAsIDAsIHsweDA5LDB4MjEsMHhlOCwweDA5LDB4MzMsMHgwMiwweDFjLDB4ODAsMHhiNiwweDA4LDB4NjMsMHhjOCwweDA5LDB4MzgsMHgxMiwweDI4IH19LAorIHsxNiwgMHhhNTIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDFlLDB4MDAsMHhjNywweGEwLDB4YTEsMHhlMCB9fSwKKyB7MTYsIDB4YTUzMCwgMCwgezB4MGIsMHg3OCwweDAzLDB4ZmUsMHgwMCwweGM1LDB4ODIsMHgzMywweDIwLDB4MGMsMHg0OCwweDAzLDB4MWUsMHgwMSwweGRmLDB4ODAgfX0sCisgezE2LCAweGE1NDAsIDAsIHsweDMxLDB4MjAsMHgwYywweDQ4LDB4MDMsMHgwNiwweDQwLDB4ODcsMHg4MiwweDMxLDB4ZjgsMHgwZCwweDdiLDB4MDMsMHg1ZiwweDAwIH19LAorIHsxNiwgMHhhNTUwLCAwLCB7MHhmMywweDgwLDB4MzEsMHhmMiwweDBjLDB4NjAsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTU2MCwgMCwgezB4MDgsMHgxZCwweDljLDB4MDAsMHhmYiwweDAxLDB4MmYsMHg0MCwweDA3LDB4YjAsMHgwMywweGU4LDB4MDQsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGE1NzAsIDAsIHsweGMxLDB4MGYsMHhiMCwweDAzLDB4ZTAsMHgwNiwweGU4LDB4MDIsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAxLDB4YTQsMHgxMCwweGY5IH19LAorIHsxNiwgMHhhNTgwLCAwLCB7MHg0MCwweGJlLDB4ZDAsMHgwNiwweGIwLDB4MDMsMHhlZSwweDAwLDB4ZmEsMHgwMCwweDNjLDB4ZDgsMHgwZiwweGEwLDB4MDMsMHhjMiB9fSwKKyB7MTYsIDB4YTU5MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4Y2YsMHg4OCwweDMzLDB4NjQgfX0sCisgezE2LCAweGE1YTAsIDAsIHsweDJjLDB4ZjgsMHgwMywweGZlLDB4MDIsMHhjNCwweGIwLDB4MzMsMHgyMCwweDhjLDB4ZDgsMHgwMywweDMyLDB4MDAsMHhjYywweGI0IH19LAorIHsxNiwgMHhhNWIwLCAwLCB7MHgzMywweGEwLDB4MGMsMHhjOCwweDAzLDB4MTYsMHgyMCwweGNmLDB4YzAsMHgzMywweGYwLDB4MGMsMHhmOCwweDAzLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4YTVjMCwgMCwgezB4Y2QsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGQ4LDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE1ZDAsIDAsIHsweGE4LDB4MTEsMHhiNSwweDA0LDB4ODcsMHgxMiwweGExLDB4NTAsMHgwYSwweDc0LDB4MTIsMHhjNCwweDQwLDB4ODQsMHgxMSwweDIzIH19LAorIHsxNiwgMHhhNWUwLCAwLCB7MHhjMCwweDI4LDB4ZTAsMHgwMiwweDFjLDB4MDIsMHhhNywweDExLDB4MjEsMHg1OCwweDQ4LDB4NzAsMHgwYSwweDE0LDB4MDAsMHg4ZCB9fSwKKyB7MTYsIDB4YTVmMCwgMCwgezB4MDAsMHgyMywweGMwLDB4MGIsMHg3MCwweDAyLDB4ZmMsMHg0MCwweDg2LDB4MDAsMHgyZCwweGMwLDB4MGIsMHg1MCwweDAyLDB4MmEgfX0sCisgezE2LCAweGE2MDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTUsMHgwMCwweDg3LDB4NDAsMHgyMSwweDAwIH19LAorIHsxNiwgMHhhNjEwLCAwLCB7MHgxOCwweDcxLDB4MDIsMHhkYywweDAwLDB4OTUsMHgyOCwweGUxLDB4MDIsMHgwOCwweDUwLDB4MDIsMHgzYywweDQyLDB4YTcsMHgyMiB9fSwKKyB7MTYsIDB4YTYyMCwgMCwgezB4MjEsMHg4MCwweDg4LDB4NDEsMHgwMiwweDE0LDB4MDAsMHg4NSwweDAwLDB4YTEsMHhjMCwweDA5LDB4NzEsMHgwMiwweGRjLDB4MDAgfX0sCisgezE2LCAweGE2MzAsIDAsIHsweGI1LDB4MTAsMHgyZCwweGMwLDB4MGIsMHg0MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNjQwLCAwLCB7MHgyMCwweDE0LDB4YzQsMHgxMCwweDgzLDB4ODQsMHgyMCwweDExLDB4MDgsMHgzMCwweDAyLDB4YzMsMHgxMCwweDkxLDB4MjAsMHgyMCB9fSwKKyB7MTYsIDB4YTY1MCwgMCwgezB4YzAsMHgwOCwweDI4LDB4MTIsMHgwMCwweDAwLDB4YTAsMHg4NCwweDIwLDB4NDAsMHgwOCwweDMwLDB4MDIsMHgwNCwweDI2LDB4ODMgfX0sCisgezE2LCAweGE2NjAsIDAsIHsweDAwLDB4MjAsMHhkMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMiwweDAwLDB4MmMsMHhjMCwweDBiLDB4MDAsMHgwMiwweDA4IH19LAorIHsxNiwgMHhhNjcwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGFkLDB4MDAsMHhjZiwweDg4LDB4YjIsMHhlOCB9fSwKKyB7MTYsIDB4YTY4MCwgMCwgezB4MGMsMHgzMCwweDEzLDB4Y2UsMHhjMiwweGQwLDB4ODIsMHgzMiwweDAwLDB4MGMsMHgwZSwweDBiLDB4MjAsMHgwMCwweGM4LDB4ODggfX0sCisgezE2LCAweGE2OTAsIDAsIHsweGIyLDB4NDAsMHgyYywweGJhLDB4NDMsMHgzNywweDAyLDB4Y2IsMHgwMCwweGIzLDB4YzAsMHgyYywweGYwLDB4MDMsMHhmYywweDEyIH19LAorIHsxNiwgMHhhNmEwLCAwLCB7MHhmYiwweDAwLDB4N2YsMHhkMSwweDBmLDB4MzAsMHgwYiwweDJiLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTZiMCwgMCwgezB4ODAsMHgwMCwweGVkLDB4MDIsMHhmMSwweDQwLDB4M2UsMHg0MSwweDBmLDB4YjAsMHgyMywweGVkLDB4MDAsMHhlOCwweDAxLDB4M2UgfX0sCisgezE2LCAweGE2YzAsIDAsIHsweGM4LDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwNCwweGRiLDB4MDAsMHgzYywweDgwLDB4MGYsMHgwNCwweDAzLDB4ZTQsMHg0MCwweGY5IH19LAorIHsxNiwgMHhhNmQwLCAwLCB7MHgwMCwweDNjLDB4YzIsMHgwZSwweGIwLDB4MDMsMHhlZSwweDAwLDB4NGIsMHg0MSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YTZlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4NGIsMHgwMCwweDMyLDB4NDIgfX0sCisgezE2LCAweGE2ZjAsIDAsIHsweDBjLDB4ZjAsMHgwMywweDM2LDB4ODAsMHhjZCwweDAwLDB4MzMsMHgwMCwweDRjLDB4YzAsMHg4MywweDNjLDB4MDQsMHhmNywweDAwIH19LAorIHsxNiwgMHhhNzAwLCAwLCB7MHgzMiwweDQwLDB4MGMsMHhiMSwweDQzLDB4MTQsMHgwMCwweGNkLDB4ODAsMHgzMywweGMwLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCB9fSwKKyB7MTYsIDB4YTcxMCwgMCwgezB4ZmYsMHgwMCwweGIzLDB4YzIsMHgwYywweGEwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3MjAsIDAsIHsweDgxLDB4MDQsMHg0ZiwweDAyLDB4OGIsMHg4MCwweDIwLDB4MzAsMHgwOCwweGJjLDB4MDIsMHgyMCwweDEwLDB4ODksMHgwMCwweDIyIH19LAorIHsxNiwgMHhhNzMwLCAwLCB7MHhjMCwweDAwLDB4YjAsMHgwMywweDYwLDB4MDQsMHhiOCwweDAwLDB4YTIsMHg5MCwweDI4LDB4OGMsMHgxYSwweDI0LDB4MDIsMHg4YiB9fSwKKyB7MTYsIDB4YTc0MCwgMCwgezB4ODMsMHgyMiwweGMxLDB4MDgsMHhiMCwweDAyLDB4ZmMsMHgwMCwweGIzLDB4NjAsMHgyMCwweGMwLDB4MGQsMHhhMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGE3NTAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmUsMHgwMCwweGFiLDB4YzAsMHgyMiwweDYwIH19LAorIHsxNiwgMHhhNzYwLCAwLCB7MHgwOCwweGI4LDB4MDIsMHgyOSwweDAwLDB4ODgsMHgwMSwweDIwLDB4MDAsMHgwOCwweDkwLDB4MDIsMHgyMCwweDAwLDB4YjgsMHgwMCB9fSwKKyB7MTYsIDB4YTc3MCwgMCwgezB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGU0LDB4MDAsMHg4MSwweDI0LDB4YTIsMHhjMCwweDA5LDB4YjAsMHg0NiwweGVjLDB4MDAgfX0sCisgezE2LCAweGE3ODAsIDAsIHsweGI5LDB4MDAsMHgyMiwweGMwLDB4MDgsMHg5MCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNzkwLCAwLCB7MHgwOCwweDA0LDB4MmMsMHgwMCwweGExLDB4MDAsMHhhMCwweDQxLDB4MDgsMHhiMCwweDBhLDB4MjAsMHg1MywweDg4LDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YTdhMCwgMCwgezB4YzAsMHgyOCwweGEwLDB4MDIsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4MDAsMHg4OCwweDAwLDB4MDIsMHg4NCwweDAwLDB4ODMgfX0sCisgezE2LCAweGE3YjAsIDAsIHsweDA0LDB4MjAsMHhjMCwweDI4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4NjIsMHhjMCwweDA5LDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhhN2MwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDZjLDB4MDAsMHhlOSwweDAwLDB4MjIsMHgwMCB9fSwKKyB7MTYsIDB4YTdkMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MDAsMHgwNCwweGM5LDB4MDAsMHhiMiwweDAwLDB4MGMsMHg5MCwweDAzLDB4MmMsMHgwMCwweGYzLDB4MDAgfX0sCisgezE2LCAweGE3ZTAsIDAsIHsweGIyLDB4YzAsMHg4YywweGIwLDB4MDMsMHhiNCwweDAyLDB4OGYsMHgwMCwweDIzLDB4YzAsMHgwNCwweGYwLDB4MDMsMHhlYywweDA4IH19LAorIHsxNiwgMHhhN2YwLCAwLCB7MHhmOSwweDAwLDB4MzMsMHhjMCwweDBjLDB4ODAsMHgwMywweDAwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTgwMCwgMCwgezB4YTAsMHgxZCwweGZjLDB4MTAsMHhkZCwweDA0LDB4M2YsMHgwMCwweDBmLDB4YzAsMHgyMywweGYwLDB4OTAsMHhmZCwweDAwLDB4MmYgfX0sCisgezE2LCAweGE4MTAsIDAsIHsweGMwLDB4MGYsMHhlMCwweDQzLDB4ZDAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4OGYsMHhjMCwweDIyLDB4NzQsMHgwMCwweGZkIH19LAorIHsxNiwgMHhhODIwLCAwLCB7MHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNiwweDNmLDB4YzAsMHgwZiwweGMwLDB4NDMsMHhlOCB9fSwKKyB7MTYsIDB4YTgzMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDgwLDB4ZWYsMHgyMCwweDExLDB4YzAgfX0sCisgezE2LCAweGE4NDAsIDAsIHsweDBlLDB4NzIsMHgwMywweGJkLDB4YjAsMHhjZiwweDMxLDB4YmYsMHhjYywweDAyLDB4ZjAsMHgwMywweGZjLDB4YzYsMHhjZiwweDAxIH19LAorIHsxNiwgMHhhODUwLCAwLCB7MHgwYiwweGM1LDB4MGYsMHhmMSwweDAzLDB4M2MsMHgwNCwweGVmLDB4NjEsMHgzMywweGQ4LDB4MDcsMHhmMCwweDAzLDB4MzQsMHg4MCB9fSwKKyB7MTYsIDB4YTg2MCwgMCwgezB4Y2QsMHgzMCwweDczLDB4Y2MsMHgwZiwweGU4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4NzAsIDAsIHsweDgwLDB4MTgsMHhlOSwweDAwLDB4ODgsMHg2OSwweDIyLDB4MTAsMHgwOCwweDhjLDB4MDAsMHgyMSwweDg0LDB4ODgsMHg0MSwweDIyIH19LAorIHsxNiwgMHhhODgwLCAwLCB7MHgxMCwweDg4LDB4ODYsMHg5MiwweDAxLDB4MDAsMHg4OCwweDYyLDB4MjIsMHgxMCwweDRiLDB4ODcsMHgwMiwweDIxLDB4YTAsMHg4OCB9fSwKKyB7MTYsIDB4YTg5MCwgMCwgezB4NjAsMHgyMCwweDEwLDB4MGIsMHg4NiwweGEyLDB4MzUsMHhhMCwweGFiLDB4NjAsMHhhMSwweGM0LDB4MGIsMHhiOCwweDAyLDB4MjAgfX0sCisgezE2LCAweGE4YTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2QsMHhhOCwweDMzLDB4NDEsMHgyMCwweGM2IH19LAorIHsxNiwgMHhhOGIwLCAwLCB7MHg0YSwweDMxLDB4MDAsMHg4YywweDEwLDB4OTMsMHgzMywweDI4LDB4Y2MsMHgyOSwweDM0LDB4MTIsMHg4YywweDUwLDB4OTMsMHgxYyB9fSwKKyB7MTYsIDB4YThjMCwgMCwgezB4MjgsMHg4NCwweDAxLDB4MjAsMHg0YSwweDRjLDB4NDEsMHg4MywweDEwLDB4MjQsMHhjYywweDRiLDB4MzEsMHg0MiwweDRjLDB4NDAgfX0sCisgezE2LCAweGE4ZDAsIDAsIHsweDkxLDB4MTAsMHgyNCwweGMwLDB4MGIsMHg4MCwweDAyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOGUwLCAwLCB7MHhjMCwweDA1LDB4YTgsMHgyMCwweDkwLDB4MDIsMHgyMiwweDAwLDB4MDgsMHg4MCwweDAwLDB4MjAsMHgzMCwweGI4LDB4MDgsMHgyNiB9fSwKKyB7MTYsIDB4YThmMCwgMCwgezB4MDAsMHgwMSwweDgwLDB4ODIsMHgyMCwweDIwLDB4MTgsMHgwOCwweDQyLDB4NDAsMHgwMywweDkxLDB4MDIsMHg2MCwweDAwLDB4MDggfX0sCisgezE2LCAweGE5MDAsIDAsIHsweDAxLDB4YTYsMHgwMCwweDBiLDB4ODAsMHgwMCwweDZjLDB4MTAsMHhiYiwweDAxLDB4MjYsMHhjMCwweDRiLDB4OTAsMHgwYSwweDMwIH19LAorIHsxNiwgMHhhOTEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweGZkLDB4MDAsMHhmZCwweDQxLDB4MzMsMHhhMSB9fSwKKyB7MTYsIDB4YTkyMCwgMCwgezB4MGUsMHhkMiwweDAzLDB4YjUsMHgwMiwweGRmLDB4NDIsMHgzYiwweDAxLDB4MGYsMHhkNCwweDQzLDB4YjUsMHgwMCwweGNkLDB4NDAgfX0sCisgezE2LCAweGE5MzAsIDAsIHsweDFiLDB4YzQsMHgwZCwweDc4LDB4MDMsMHg3MCwweDAyLDB4ZWMsMHgwMCwweDE3LDB4YTEsMHgwZiwweGU4LDB4MGIsMHgyYywweDAyIH19LAorIHsxNiwgMHhhOTQwLCAwLCB7MHhkOSwweDkwLDB4MjYsMHhjMCwweDBmLDB4YWMsMHgwMywweDAwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTk1MCwgMCwgezB4ZTAsMHgwMSwweGI4LDB4MDAsMHhlZSwweDAwLDB4MWYsMHg2NCwweDRmLDB4ZTAsMHgwMywweGQ4LDB4MTAsMHhjNCwweDE4LDB4MzMgfX0sCisgezE2LCAweGE5NjAsIDAsIHsweGMwLDB4MGMsMHhhMCwweGExLDB4YjgsMHgwOSwweGU2LDB4MDksMHgzNiwweDIyLDB4MGYsMHg4OCwweDIzLDB4YmMsMHgwMCwweGZiIH19LAorIHsxNiwgMHhhOTcwLCAwLCB7MHgwMCwweDNiLDB4NjQsMHgwZiwweGQ5LDB4MDMsMHg5YywweDAwLDB4ZTMsMHgwNCwweDNiLDB4YzAsMHgwZiwweGY0LDB4MDMsMHhmOCB9fSwKKyB7MTYsIDB4YTk4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4ZCwweDAwLDB4YzksMHg0MCwweGI2LDB4ODAgfX0sCisgezE2LCAweGE5OTAsIDAsIHsweDBmLDB4MTAsMHgwMywweGE3LDB4MjAsMHhmYiwweDUwLDB4YjYsMHgwOCwweDRjLDB4MTQsMHgwMywweDY1LDB4MjIsMHhkOSwweDQwIH19LAorIHsxNiwgMHhhOWEwLCAwLCB7MHhiNiwweDgwLDB4MGUsMHhhMCwweDBiLDB4MDAsMHgwMCwweGQ4LDB4MDAsMHg3NiwweDgyLDB4MjgsMHhhMCwweDIzLDB4NjQsMHgwMCB9fSwKKyB7MTYsIDB4YTliMCwgMCwgezB4YzksMHgwNCwweDEyLDB4YzAsMHg4ZSwweDgwLDB4MDMsMHg5MCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5YzAsIDAsIHsweGM4LDB4MDUsMHgyYiwweDYwLDB4OGEsMHgwOSwweDIwLDB4NTAsMHgwOCwweGEwLDB4MjMsMHhlOSwweDAwLDB4YjgsMHhjMCwweDIyIH19LAorIHsxNiwgMHhhOWQwLCAwLCB7MHhmMCwweDA4LDB4YWMsMHgwMiwweDI4LDB4MDQsMHg4YSwweGMyLDB4MjIsMHg1MCwweDA4LDB4OTAsMHgwNiwweDJjLDB4MDAsMHg4YiB9fSwKKyB7MTYsIDB4YTllMCwgMCwgezB4MDQsMHgyMiwweDUxLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgwNCwweDhiLDB4MDQsMHgzNywweGMwLDB4MDgsMHgxOCwweDQyLDB4MjYgfX0sCisgezE2LCAweGE5ZjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA0LDB4NGIsMHgwMCwweDgyLDB4YzgsMHgyNCwweDQzIH19LAorIHsxNiwgMHhhYTAwLCAwLCB7MHgwYiwweDI2LDB4MGEsMHg4OCwweDAwLDB4YjAsMHg4MCwweDIyLDB4ZTQsMHgwYiwweDIwLDB4NDIsMHg2OSwweDAwLDB4YTIsMHg5MCB9fSwKKyB7MTYsIDB4YWExMCwgMCwgezB4MjgsMHg0MCwweGU4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiYiwweDAwLDB4MjgsMHg1MCwweDg4LDB4OTAsMHg4MiwweGM0LDB4MDEgfX0sCisgezE2LCAweGFhMjAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgxMCwweDAyLDB4YmEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYTMwLCAwLCB7MHgyMCwweDEwLDB4NGUsMHg4MCwweDgxLDB4MDAsMHgyMSwweGE4LDB4MDgsMHg1OCwweDAyLDB4ZDYsMHgwMSwweGI3LDB4OTAsMHg2OCB9fSwKKyB7MTYsIDB4YWE0MCwgMCwgezB4MjAsMHgwMywweDU5LDB4ODIsMHg1NiwweDAwLDB4YTUsMHg4NCwweDJkLDB4YTIsMHgxOCwweDY5LDB4MjIsMHgwMiwweDAwLDB4MzQgfX0sCisgezE2LCAweGFhNTAsIDAsIHsweDgwLDB4MjksMHhhOCwweDA4LDB4NjgsMHgwNiwweGM2LDB4MTQsMHg4NSwweDgyLDB4MjUsMHhlMCwweDA4LDB4NTgsMHg4MiwweDFjIH19LAorIHsxNiwgMHhhYTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDQ4LDB4MDAsMHhjMiwweGYwLDB4MzQsMHg0MCB9fSwKKyB7MTYsIDB4YWE3MCwgMCwgezB4MGYsMHgyMCwweDAzLDB4ODgsMHg4MCwweGY4LDB4MTAsMHgzMCwweGMwLDB4MjcsMHgyMSwweDBiLDB4NDgsMHg4MCwweGVhLDB4MjAgfX0sCisgezE2LCAweGFhODAsIDAsIHsweDM4LDB4MDAsMHgwYywweDAwLDB4MTIsMHgwYywweDA4LDB4NzMsMHgwMCwweGI4LDB4NDAsMHgwYywweDEyLDB4MjMsMHg0YywweDAyIH19LAorIHsxNiwgMHhhYTkwLCAwLCB7MHg0MywweDM0LDB4MzAsMHhjMCwweDBlLDB4MTEsMHgwMywweDkyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWFhMCwgMCwgezB4NDAsMHgxNSwweGFjLDB4OTAsMHhmOSwweDAxLDB4MmUsMHg4OCwweDRiLDB4OTAsMHgxMSwweDY0LDB4MDAsMHhmYiwweDEwLDB4MzIgfX0sCisgezE2LCAweGFhYjAsIDAsIHsweDAwLDB4MDAsMHg5MSwweDAzLDB4YTQsMHgwMCwweGM5LDB4MDAsMHgzMiwweGM0LDB4NGQsMHhiMCwweDQzLDB4ZTAsMHgwNCwweGM4IH19LAorIHsxNiwgMHhhYWMwLCAwLCB7MHgwMCwweDM2LDB4ODksMHgwZiwweGE4LDB4MDMsMHhlZCwweDAwLDB4ZjksMHgxNCwweDNlLDB4YzAsMHgwZiwweDEwLDB4NDMsMHhkMCB9fSwKKyB7MTYsIDB4YWFkMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhlOCwweDAwLDB4YzgsMHgwMCwweDNhLDB4MDAgfX0sCisgezE2LCAweGFhZTAsIDAsIHsweDBjLDB4MDAsMHg1MywweGEwLDB4MDAsMHhlOCwweDAxLDB4MzIsMHgwMSwweDBlLDB4ODAsMHg1MywweDIwLDB4MTAsMHhjOCwweDAwIH19LAorIHsxNiwgMHhhYWYwLCAwLCB7MHgzYSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjAsMHgxMCwweGU4LDB4MDQsMHhiNiwweDAwLDB4ODQsMHg4MCwweDAzLDB4MmQsMHgxMiB9fSwKKyB7MTYsIDB4YWIwMCwgMCwgezB4Y2IsMHgwMCwweDJlLDB4Y2EsMHgwNCwweDkwLDB4MDMsMHhlYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiMTAsIDAsIHsweDRjLDB4MTksMHg4YywweDAwLDB4ODcsMHgwMiwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwYywweDAwLDB4ODMsMHgwMCwweDIxIH19LAorIHsxNiwgMHhhYjIwLCAwLCB7MHhjMCwweDA4LDB4MzAsMHg2MiwweDRjLDB4MDQsMHg4MywweDAwLDB4MjEsMHg4MCwweDQ4LDB4ZTAsMHgxMiwweDNjLDB4MDAsMHg4NyB9fSwKKyB7MTYsIDB4YWIzMCwgMCwgezB4MDAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg1LDB4MDEsMHgyNCwweGQwLDB4MGEsMHg1MCwweDAyLDB4ZjIgfX0sCisgezE2LCAweGFiNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4OWEsMHgwMCwweDgwLDB4ODAsMHgyOCwweDIwIH19LAorIHsxNiwgMHhhYjUwLCAwLCB7MHgwOCwweDRjLDB4MjIsMHhkMiwweDAwLDB4YTQsMHg4MCwweDI0LDB4MzAsMHgwYiwweDQ4LDB4MDIsMHg1MiwweDAwLDB4ODQsMHhjMCB9fSwKKyB7MTYsIDB4YWI2MCwgMCwgezB4MjEsMHgyMCwweDA5LDB4NDgsMHg2OCwweDEzLDB4MDAsMHhhNCwweDgwLDB4NjAsMHgyMCwweDA5LDB4MDgsMHgwMiwweDU2LDB4MDAgfX0sCisgezE2LCAweGFiNzAsIDAsIHsweDk3LDB4ODAsMHgyZCwweGUwLDB4ODgsMHg1OCwweDAyLDB4ZTAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYjgwLCAwLCB7MHg2YywweDA0LDB4Y2MsMHgwMCwweDgzLDB4ODAsMHgyMCwweGQ4LDB4MDgsMHgzMCwweDAyLDB4NGMsMHg0MCwweDgzLDB4MDAsMHgyNCB9fSwKKyB7MTYsIDB4YWI5MCwgMCwgezB4ZDEsMHgwOSwweGI5LDB4NDIsMHg0ZSwweDAwLDB4ODMsMHgwMCwweDIwLDB4YzEsMHg4OSwweDMwLDB4NDIsMHgwYywweDAwLDB4ODMgfX0sCisgezE2LCAweGFiYTAsIDAsIHsweGYwLDB4YTAsMHhkOSwweDE5LDB4MzYsMHgyMiwweDY2LDB4MDYsMHg5MSwweDAwLDB4MGMsMHhjMSwweDBhLDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhhYmIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGU4LDB4MDIsMHhjYSwweGE1LDB4MmEsMHg5MSB9fSwKKyB7MTYsIDB4YWJjMCwgMCwgezB4MjgsMHhhOCwweDAzLDB4ZWEsMHgwMiwweGFhLDB4MDAsMHhiNiwweGEwLDB4MGYsMHhhMCwweDBhLDB4MmEsMHg5MiwweGNhLDB4ODMgfX0sCisgezE2LCAweGFiZDAsIDAsIHsweGJhLDB4ODAsMHgyOSwweGEwLDB4MDMsMHgyYiwweDAwLDB4ZWEsMHg0MCwweDY2LDB4OTAsMHgyZCwweGU0LDB4MGIsMHg2YSwweDgwIH19LAorIHsxNiwgMHhhYmUwLCAwLCB7MHhkYSwweDAwLDB4M2UsMHg4MCwweDBjLDB4ZTAsMHgwMywweGZhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWJmMCwgMCwgezB4NDgsMHgwMSwweDgwLDB4MDAsMHhmYywweDAwLDB4M2QsMHgwMCwweDBmLDB4YzAsMHgwMywweGIwLDB4MTQsMHhmYywweDAwLDB4M2IgfX0sCisgezE2LCAweGFjMDAsIDAsIHsweDEyLDB4MGUsMHhjMCwweDQzLDB4YjEsMHgxNCwweGZjLDB4MDAsMHgzZCwweDAwLDB4MGUsMHhjMCwweDAzLDB4ZjAsMHgyMCwweGY0IH19LAorIHsxNiwgMHhhYzEwLCAwLCB7MHgwMCwweDMxLDB4MDAsMHgwZSwweDQ0LDB4MTMsMHhhMCwweDAwLDB4ZTgsMHgwNiwweDM2LDB4MDAsMHg0ZiwweDgwLDB4MTMsMHhkMiB9fSwKKyB7MTYsIDB4YWMyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZDEsMHgwMCwweDM2LDB4NjAgfX0sCisgezE2LCAweGFjMzAsIDAsIHsweDFjLDB4MTgsMHgwYiwweDQ2LDB4MDAsMHhkOSwweDgwLDB4MzAsMHg0MCwweDJjLDB4OTgsMHgwNSwweDg2LDB4MDAsMHhjMSwweDgwIH19LAorIHsxNiwgMHhhYzQwLCAwLCB7MHg5MiwweDQwLDB4MGQsMHgxMCwweDAzLDB4NDQsMHgwMiwweDg5LDB4MDAsMHgzMiwweDcwLDB4MGMsMHg5OCwweDAxLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YWM1MCwgMCwgezB4YzksMHgwNCwweDMwLDB4NDAsMHgwYywweDkwLDB4MDMsMHhjMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFjNjAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHgyNCwweDgwLDB4ODksMHgwMSwweDIyIH19LAorIHsxNiwgMHhhYzcwLCAwLCB7MHg0MCwweDQ4LDB4OTEsMHgwMiwweDI0LDB4MDAsMHhkOSwweDkwLDB4MjIsMHg0MSwweDA4LDB4OTAsMHgxMiwweDI0LDB4MTAsMHg4OSB9fSwKKyB7MTYsIDB4YWM4MCwgMCwgezB4MDAsMHgzMiwweDQwLDB4MDgsMHg5NSwweDEyLDB4MjQsMHgwMiwweDgxLDB4MDAsMHhhMiwweDQxLDB4MGQsMHg5MCwweDQyLDB4ZTAgfX0sCisgezE2LCAweGFjOTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDA1LDB4MjQsMHgwMiwweDlkLDB4MDAsMHgyMywweDQ0IH19LAorIHsxNiwgMHhhY2EwLCAwLCB7MHgwOCwweGQyLDB4MDYsMHg3NCwweDgwLDB4YjUsMHgyMCwweDIzLDB4NDAsMHgxYSwweGQwLDB4MDYsMHgzNSwweDkwLDB4OGQsMHgwMiB9fSwKKyB7MTYsIDB4YWNiMCwgMCwgezB4MmYsMHg0NCwweDE5LDB4ZDAsMHgwMiwweDc0LDB4MDAsMHg4ZCwweDAwLDB4NjMsMHg0MCwweDE4LDB4ZDQsMHgwMiwweGE0LDB4MTEgfX0sCisgezE2LCAweGFjYzAsIDAsIHsweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHhiMCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhY2QwLCAwLCB7MHgyOCwweDE0LDB4MDQsMHg4MCwweDg1LDB4MjAsMHgyMSwweDY4LDB4MDgsMHg1MiwweDAyLDB4MTQsMHg4MCwweGE1LDB4MjAsMHhhMSB9fSwKKyB7MTYsIDB4YWNlMCwgMCwgezB4NDgsMHgwYSwweDcyLDB4MzgsMHgxNCwweDgwLDB4OTUsMHgyNCwweDJkLDB4NDgsMHgyOCwweDUyLDB4MDIsMHgxNCwweDgwLDB4ODUgfX0sCisgezE2LCAweGFjZjAsIDAsIHsweDIwLDB4MjEsMHg0OCwweDA4LDB4NTIsMHgwNiwweDg0LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0YSwweDA5LDB4MTAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhhZDAwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzgsMHgwZCwweDYxLDB4NDAsMHhkOCwweDUwLDB4YjIsMHgxNCB9fSwKKyB7MTYsIDB4YWQxMCwgMCwgezB4MjgsMHhhMCwweDAzLDB4NjEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDk0LDB4NGUsMHg4NSwweDA0LDB4MjEsMHg0MiwweGM4LDB4NTAgfX0sCisgezE2LCAweGFkMjAsIDAsIHsweDNjLDB4MTQsMHgwZCwweDgwLDB4MDMsMHg2MSwweDQwLDB4ODgsMHg1MCwweGIyLDB4MTQsMHgyYywweGM1LDB4MDksMHhhMSwweDQwIH19LAorIHsxNiwgMHhhZDMwLCAwLCB7MHhjOCwweDUwLDB4MzIsMHgxYywweDBjLDB4ODAsMHgwMywweGVlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWQ0MCwgMCwgezB4OTgsMHgxNSwweGU0LDB4NDAsMHhmOSwweDEwLDB4M2EsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhkOSwweDE0LDB4M2UgfX0sCisgezE2LCAweGFkNTAsIDAsIHsweDQ0LDB4MGQsMHg5MSwweDQzLDB4NjQsMHg0MCwweGU5LDB4MTAsMHgzMiwweDQ0LDB4MDcsMHg5MywweGMzLDB4ZTQsMHg1MCwweGQxIH19LAorIHsxNiwgMHhhZDYwLCAwLCB7MHgxMCwweDdlLDB4NDQsMHgwMywweDkxLDB4MDEsMHg1NCwweDQ0LDB4ZmQsMHgxNCwweDNlLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4YWQ3MCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDgwLDB4ZGQsMHhhMCwweDMzLDB4NjggfX0sCisgezE2LCAweGFkODAsIDAsIHsweDFlLDB4ZGEsMHgwMywweDM2LDB4OTAsMHhjZCwweGEwLDB4M2IsMHg2OCwweDBhLDB4ZDgsMHgyMywweDc2LDB4MGMsMHhlZCwweDgwIH19LAorIHsxNiwgMHhhZDkwLCAwLCB7MHgyYiwweDYyLDB4MGIsMHg5OSwweDAyLDB4YTcsMHg4MCwweGY5LDB4ZTEsMHgzNywweDY4LDB4MGMsMHhkYSwweDAzLDB4MjcsMHg4MCB9fSwKKyB7MTYsIDB4YWRhMCwgMCwgezB4YzksMHhhMiwweDIyLDB4NjgsMHg0YywweDUwLDB4MDMsMHhjNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkYjAsIDAsIHsweDM4LDB4MTgsMHhlMSwweDQwLDB4ODgsMHg1MCwweDIyLDB4MTQsMHgwOCwweDgwLDB4MjIsMHg2MCwweDAwLDB4ODgsMHgwNCwweDIyIH19LAorIHsxNiwgMHhhZGMwLCAwLCB7MHgwMCwweDA4LDB4MDQsMHgyNiwweDAxLDB4MDAsMHg4OCwweDUwLDB4MjIsMHgxMCwweDA4LDB4YWYsMHgwMiwweDIzLDB4MDAsMHg4OCB9fSwKKyB7MTYsIDB4YWRkMCwgMCwgezB4YzAsMHhhMCwweDEwLDB4ODgsMHg4NCwweDAyLDB4MjMsMHg4MCwweGEwLDB4NDAsMHgyYSwweDEwLDB4MDgsMHg4MCwweDEyLDB4NGUgfX0sCisgezE2LCAweGFkZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ODQsMHgwMCwweDgxLDB4MDEsMHgyMCwweDQwIH19LAorIHsxNiwgMHhhZGYwLCAwLCB7MHgwYSwweDE0LDB4MDIsMHg0NSwweDAwLDB4ODEsMHg0MSwweDJjLDB4NTAsMHgwYiwweDE0LDB4MDIsMHgwNSwweDA0LDB4YTEsMHgwMCB9fSwKKyB7MTYsIDB4YWUwMCwgMCwgezB4MjgsMHg0MCwweDgyLDB4MTAsMHgwMiwweDg0LDB4NDAsMHhhMSwweDMyLDB4ODAsMHg1MCwweDA5LDB4MTQsMHgwMiwweDA0LDB4YzQgfX0sCisgezE2LCAweGFlMTAsIDAsIHsweDkxLDB4MTAsMHg2NCwweDQ0LDB4MjgsMHgxMCwweDAyLDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZTIwLCAwLCB7MHgxOCwweDA0LDB4YWMsMHgwMiwweDgxLDB4MDAsMHgyMiwweGMxLDB4MDgsMHg5MCwweDAyLDB4NDQsMHgwMiwweDg5LDB4MDIsMHgyNiB9fSwKKyB7MTYsIDB4YWUzMCwgMCwgezB4NDEsMHgwOSwweDkwLDB4MGEsMHgyNCwweDBjLDB4ODksMHgwNCwweDIyLDB4NTAsMHgwOCwweDkwLDB4MjYsMHgyNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGFlNDAsIDAsIHsweDAwLDB4MjIsMHg0MSwweDA5LDB4MTAsMHgyMiwweDI0LDB4NDAsMHhiOSwweDAxLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhhZTUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgxNSwweGU0LDB4MTAsMHg4OSwweDAwLDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4YWU2MCwgMCwgezB4MGEsMHg5MCwweDBiLDB4MjQsMHgxMCwweDg5LDB4MDAsMHgxZSwweDQwLDB4OWIsMHg5MCwweDAyLDB4MjQsMHgxMCwweDI5LDB4MDAgfX0sCisgezE2LCAweGFlNzAsIDAsIHsweDFhLDB4NDAsMHgwZSwweDk0LDB4NDEsMHhhNCwweDAwLDB4MjksMHgwMCwweDEyLDB4NDAsMHgwNSwweDkwLDB4NDEsMHgyNiwweDAwIH19LAorIHsxNiwgMHhhZTgwLCAwLCB7MHhkOSwweDAwLDB4MjQsMHg0MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWU5MCwgMCwgezB4NDgsMHgwMSwweGE0LDB4MDIsMHhhOSwweDAwLDB4YmMsMHg0MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MDQsMHhmOSwweDAwLDB4M2EgfX0sCisgezE2LCAweGFlYTAsIDAsIHsweDQxLDB4MGUsMHg5MCwweDgzLDB4ODQsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwLDB4MGUsMHg5MCwweDAyLDB4YzQsMHgwOCwweGU5IH19LAorIHsxNiwgMHhhZWIwLCAwLCB7MHgwMCwweDNhLDB4NDAsMHgyZSwweDkwLDB4MGIsMHhlNiwweDAwLDB4ZTEsMHgwNCwweDNhLDB4NDAsMHgwZiwweDkyLDB4MDMsMHg1YSB9fSwKKyB7MTYsIDB4YWVjMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhMCwweDIwLDB4ZDgsMHgwMCwweDM2LDB4MDIgfX0sCisgezE2LCAweGFlZDAsIDAsIHsweDBlLDB4MDAsMHhhMywweGUwLDB4MTgsMHhjMCwweDAwLDB4MzAsMHgwMywweDBmLDB4ODAsMHgzMywweDIwLDB4MDAsMHg0MCwweDAwIH19LAorIHsxNiwgMHhhZWUwLCAwLCB7MHgzMiwweDBkLDB4MGYsMHgwNCwweDBiLDB4YTAsMHgwMiwweGM4LDB4MDIsMHgzMiwweDAyLDB4OGMsMHg4MiwweDAzLDB4MjAsMHgwMiB9fSwKKyB7MTYsIDB4YWVmMCwgMCwgezB4YzgsMHgwNCwweDE2LDB4MDAsMHg0ZSwweDgwLDB4MDEsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmMDAsIDAsIHsweDI4LDB4MDUsMHgzYiwweDAwLDB4OGUsMHhkOCwweDIzLDB4ODAsMHgwOCwweGUwLDB4MDIsMHhmOCwweDgwLDB4OGUsMHgxMCwweDIzIH19LAorIHsxNiwgMHhhZjEwLCAwLCB7MHhhMiwweDBiLDB4ZTAsMHg4MiwweDdhLDB4MjAsMHg4ZSwweDMwLDB4MjMsMHhhMSwweDBiLDB4ZTAsMHgwMiwweDI4LDB4MDAsMHg4ZSB9fSwKKyB7MTYsIDB4YWYyMCwgMCwgezB4MDAsMHgyYiwweDg4LDB4MDgsMHhlNCwweDQyLDB4MzgsMHgwMCwweDhlLDB4MDQsMHgyMywweDgwLDB4MDgsMHhhMCwweDAyLDB4MGEgfX0sCisgezE2LCAweGFmMzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmYsMHg0MCwweDkzLDB4YzYsMHgyNCwweDQwIH19LAorIHsxNiwgMHhhZjQwLCAwLCB7MHgwYSwweDM4LDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMSwweGFjLDB4ZjAsMHgwYiwweGI0LDB4MDIsMHg0YywweDA0LDB4YTMsMHg4MCB9fSwKKyB7MTYsIDB4YWY1MCwgMCwgezB4MjgsMHhkMCwweDRiLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhhYiwweDA0LDB4MmEsMHhjMCwweDJhLDB4MzAsMHgwYSwweGFjLDB4MTAgfX0sCisgezE2LCAweGFmNjAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMxLDB4MGEsMHgzMSwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZjcwLCAwLCB7MHg4MCwweDExLDB4MWMsMHgwMCwweDgyLDB4MDAsMHgyMSwweDQyLDB4ODgsMHg3NCwweDA2LDB4ZGMsMHgwYiwweDg2LDB4MDIsMHgyZCB9fSwKKyB7MTYsIDB4YWY4MCwgMCwgezB4ODAsMHgwYiwweDcwLDB4MmEsMHg1OCwweDAwLDB4YTYsMHgwMCwweGE5LDB4YzAsMHgwYiwweDcwLDB4MDIsMHg1YywweDg4LDB4YTcgfX0sCisgezE2LCAweGFmOTAsIDAsIHsweDIwLDB4MjksMHhjMCwweDBhLDB4NzAsMHgwMiwweDljLDB4MTAsMHg5NywweDIwLDB4YTEsMHhjOCwweDA4LDB4ZDgsMHgwMiwweDI4IH19LAorIHsxNiwgMHhhZmEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwOCwweDBlLDB4MDAsMHhkNywweDgwLDB4MzcsMHg2MCB9fSwKKyB7MTYsIDB4YWZiMCwgMCwgezB4MGUsMHg2OCwweDEzLDB4ZmUsMHgwMCwweGNmLDB4ODAsMHgzZCwweGUwLDB4MGYsMHg3OCwweDIzLDB4MWUsMHgwMCwweGVmLDB4ODIgfX0sCisgezE2LCAweGFmYzAsIDAsIHsweDMxLDB4ZTAsMHgwZiwweDNjLDB4YzMsMHg3ZSwweDA0LDB4ZWYsMHg4MCwweGIxLDB4ZTAsMHgwZSwweGU4LDB4MDMsMHhiZSwweDgwIH19LAorIHsxNiwgMHhhZmQwLCAwLCB7MHhkNywweGUwLDB4MzMsMHhlYSwweDBlLDB4NzgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWZlMCwgMCwgezB4MDgsMHgxNSwweGFjLDB4MDAsMHhmYSwweDAxLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDQsMHhmOCwweDAwLDB4MzIgfX0sCisgezE2LCAweGFmZjAsIDAsIHsweDgwLDB4MGYsMHg4MCwweDQzLDB4YWMsMHgwYSwweGQ4LDB4MDAsMHgzNiwweDQwLDB4MGYsMHhiMCwweDAzLDB4MmMsMHgwYywweGRiIH19LAorIHsxNiwgMHhiMDAwLCAwLCB7MHgwMCwweDI2LDB4YzEsMHgwOSwweGEwLDB4MTMsMHg2YywweDQwLDB4ZWIsMHg0MCwweDNhLDB4ZGMsMHgwZiwweDkwLDB4MGIsMHhjMiB9fSwKKyB7MTYsIDB4YjAxMCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHhiZSwweDAwLDB4Y2YsMHg4MSwweDMzLDB4ZTkgfX0sCisgezE2LCAweGIwMjAsIDAsIHsweDFmLDB4ZjksMHgxMywweGI2LDB4NTAsMHhlZiwweDgwLDB4MWYsMHhlNCwweDA0LDB4YzgsMHgwMywweDdlLDB4MDAsMHg2ZCwweDgxIH19LAorIHsxNiwgMHhiMDMwLCAwLCB7MHgzMywweDY0LDB4MGMsMHhmOCwweDFiLDB4M2UsMHgyMCwweDJmLDB4ODgsMHg5MywweGU4LDB4MGYsMHhmYiwweDAzLDB4MmUsMHg4MCB9fSwKKyB7MTYsIDB4YjA0MCwgMCwgezB4Y2YsMHhjMCwweDczLDB4ZTAsMHgyYywweGQ5LDB4MDMsMHhkMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwNTAsIDAsIHsweGE4LDB4MTgsMHg5MCwweDQyLDB4ODksMHgxOCwweDIxLDB4YzAsMHgxZiwweDcxLDB4MDIsMHgxNCwweGMwLDB4ZjcsMHgyMCwweDI3IH19LAorIHsxNiwgMHhiMDYwLCAwLCB7MHg0MCwweDQwLDB4NzEsMHgxMiwweDE4LDB4MDAsMHg4NywweDIwLDB4MjEsMHg4MCwweDQ4LDB4NzEsMHgwMiwweDNjLDB4MDgsMHg4NyB9fSwKKyB7MTYsIDB4YjA3MCwgMCwgezB4MjAsMHgyMSwweDgyLDB4MGIsMHg2MSwweGEyLDB4MWUsMHg0NCwweGRmLDB4MDEsMHgzMSwweGM4LDB4MDgsMHg3MywweDAyLDB4ZWEgfX0sCisgezE2LCAweGIwODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OGMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGM4IH19LAorIHsxNiwgMHhiMDkwLCAwLCB7MHgwYiwweDcwLDB4MDIsMHg5YywweDA5LDB4ODcsMHgwMiwweDJkLDB4ODIsMHg5OSwweDQwLDB4MDIsMHgwNCwweDAwLDB4YTUsMHgwOSB9fSwKKyB7MTYsIDB4YjBhMCwgMCwgezB4MjEsMHg0MCwweDE5LDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDA1LDB4MjUsMHg0OCwweDRiLDB4NzIsMHgwMiwweDBjLDB4NDAgfX0sCisgezE2LCAweGIwYjAsIDAsIHsweDg3LDB4MDAsMHhhMSwweGMwLDB4NDgsMHg1MCwweDAyLDB4YzQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMGMwLCAwLCB7MHg2OCwweDA0LDB4YzEsMHgyMCwweDg5LDB4NGMsMHhhMCwweGI0LDB4MGEsMHgzOCwweDAyLDB4MjIsMHgwMCwweGExLDB4ZDAsMHgyNCB9fSwKKyB7MTYsIDB4YjBkMCwgMCwgezB4MzAsMHgwOSwweDgwLDB4MDIsMHgyNywweDQ0LDB4ODEsMHhjNiwweDIyLDB4MTQsMHgwOSwweDNkLDB4MmEsMHgwZiwweDAyLDB4OGIgfX0sCisgezE2LCAweGIwZTAsIDAsIHsweGMwLDB4YTYsMHgyMCwweDBiLDB4MjQsMHgwMCwweDBjLDB4MTAsMHg5MywweDgxLDB4MjAsMHhjMCwweDQ4LDB4MzAsMHgwNiwweGQ4IH19LAorIHsxNiwgMHhiMGYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgxNSwweGExLDB4MDAsMHg4OSwweGMxLDB4MzIsMHhkMSB9fSwKKyB7MTYsIDB4YjEwMCwgMCwgezB4MDMsMHhiYywweDAzLDB4YTksMHgyMCwweDg5LDB4NDEsMHgzZSwweDYwLDB4ODUsMHhiYywweDhiLDB4MjUsMHg0MCwweGViLDB4NDEgfX0sCisgezE2LCAweGIxMTAsIDAsIHsweGEyLDB4YTAsMHgwZCwweGYwLDB4MTMsMHgzZSwweDIwLDB4Y2YsMHg5MCwweDM2LDB4MzAsMHg0ZiwweGJjLDB4MGIsMHgzYywweDAwIH19LAorIHsxNiwgMHhiMTIwLCAwLCB7MHhjZiwweDgwLDB4MzMsMHhjMSwweDBjLDB4YjEsMHgwMywweGVhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjEzMCwgMCwgezB4ODAsMHgwMCwweGVkLDB4MDAsMHhmOCwweDAxLDB4M2MsMHhkMCwweDBmLDB4YjMsMHgwMywweGU4LDB4ODIsMHhkOCwweDIwLDB4MzYgfX0sCisgezE2LCAweGIxNDAsIDAsIHsweDgwLDB4MmUsMHhiMiwweDEzLDB4ZTEsMHgwMCwweGZhLDB4MDAsMHg3ZSwweGM4LDB4MmUsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGRiIH19LAorIHsxNiwgMHhiMTUwLCAwLCB7MHgxMCwweDNhLDB4MDgsMHg0ZiwweGIyLDB4MjMsMHhjYywweDAyLDB4ZmIsMHgxMCwweDNhLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhlNCB9fSwKKyB7MTYsIDB4YjE2MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhmMCwweDAwLDB4Y2QsMHgxMCwweDMzLDB4NDIgfX0sCisgezE2LCAweGIxNzAsIDAsIHsweDBjLDB4Y2EsMHgyMywweDdjLDB4MDAsMHhjZiwweDAwLDB4MzMsMHg2MiwweDA2LDB4ZjAsMHgwMSwweDNhLDB4MDAsMHhjZiwweDA4IH19LAorIHsxNiwgMHhiMTgwLCAwLCB7MHgzMywweDgwLDB4MWMsMHhmMCwweDgxLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzMywweGEwLDB4MGMsMHhjYSwweDAxLDB4ZmMsMHgwNCB9fSwKKyB7MTYsIDB4YjE5MCwgMCwgezB4Y2YsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIxYTAsIDAsIHsweGExLDB4MDQsMHg2ZCwweDQwLDB4ODgsMHg0OCwweGEyLDB4MzEsMHgwOCwweDEwLDB4MDIsMHgyMCwweDEwLDB4ODgsMHhiNCwweDIyIH19LAorIHsxNiwgMHhiMWIwLCAwLCB7MHhhMCwweDA4LDB4ODAsMHgwMCwweDZhLDB4ODQsMHg4OCwweDIwLDB4MjIsMHg1MiwweDA4LDB4YjAsMHgwYSwweDJjLDB4MTAsMHhiYiB9fSwKKyB7MTYsIDB4YjFjMCwgMCwgezB4MDAsMHgzMiwweGIzLDB4ODgsMHg4MCwweDAyLDB4ZWMsMHgwMCwweGRiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHg5MCwweDEyLDB4ZTEgfX0sCisgezE2LCAweGIxZDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHgxMCwweDhhLDB4MDEsMHgyMiwweGEwIH19LAorIHsxNiwgMHhiMWUwLCAwLCB7MHgwOCwweGIwLDB4NDIsMHg2MCwweDIwLDB4ODAsMHgwMCwweDIwLDB4NDQsMHgxYSwweDgwLDB4MWEsMHhlNCwweDQyLDB4YTAsMHgwNiB9fSwKKyB7MTYsIDB4YjFmMCwgMCwgezB4MjIsMHgwMCwweDc4LDB4MzAsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAwLDB4YTIsMHg0NCwweDA4LDB4YjAsMHgxMiwweGVjLDB4MDAgfX0sCisgezE2LCAweGIyMDAsIDAsIHsweDhiLDB4MDAsMHgwZSwweGMwLDB4MGIsMHg5MCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMjEwLCAwLCB7MHgwOCwweDE0LDB4MDAsMHgwOCwweDgwLDB4MDAsMHgyMCwweDgxLDB4MDgsMHgzMCwweDAyLDB4NDAsMHgxMiwweDgwLDB4MDAsMHhhMCB9fSwKKyB7MTYsIDB4YjIyMCwgMCwgezB4NDAsMHgwOCwweGIwLDB4MDIsMHhjMCwweDAwLDB4ODIsMHgwMCwweDAwLDB4ODAsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4YmIgfX0sCisgezE2LCAweGIyMzAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDA4LDB4MjAsMHgwMiwweGNjLDB4ODAsMHg5MywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGMyIH19LAorIHsxNiwgMHhiMjQwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDYwLDB4MDAsMHhjYSwweDE0LDB4MzIsMHgwMCB9fSwKKyB7MTYsIDB4YjI1MCwgMCwgezB4MGMsMHhiMCwweDAzLDB4NGMsMHgwMCwweGNhLDB4MDAsMHgzMiwweDAwLDB4MGUsMHgwMCwweDEyLDB4YTAsMHgwMCwweGMwLDB4MDAgfX0sCisgezE2LCAweGIyNjAsIDAsIHsweDcwLDB4MDAsMHgyOCwweGYwLDB4MTMsMHhhYywweDAwLDB4ZmIsMHgwMCwweDMyLDB4NDAsMHgyYywweDEwLDB4NDMsMHhlYywweDAwIH19LAorIHsxNiwgMHhiMjcwLCAwLCB7MHhjZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4OTAsMHgwMywweGMwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjI4MCwgMCwgezB4MjAsMHgxNSwweGYwLDB4MDIsMHhmYywweDAwLDB4MWYsMHgwMCwweDY3LDB4NzAsMHgwMywweGIwLDB4MDAsMHhmYywweDAwLDB4M2YgfX0sCisgezE2LCAweGIyOTAsIDAsIHsweDAwLDB4MmQsMHhjMCwweDAzLDB4MzAsMHgxMCwweGZjLDB4MDEsMHhiZiwweDAwLDB4MGYsMHg3MCwweDAzLDB4N2MsMHgwMCwweGY3IH19LAorIHsxNiwgMHhiMmEwLCAwLCB7MHgwNCwweDNiLDB4MDAsMHgwZiwweGMwLDB4MTMsMHhmZCwweDEwLDB4ZmYsMHgwMCwweDNkLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlOCB9fSwKKyB7MTYsIDB4YjJiMCwgMCwgezB4MTIsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNCwweGMwLDB4Y2YsMHg4MCwweDMzLDB4NjAgfX0sCisgezE2LCAweGIyYzAsIDAsIHsweDBlLDB4YzksMHgxMywweDM2LDB4NTAsMHhjZSwweDg2LDB4M2YsMHgwOCwweDBjLDB4YzAsMHgwMywweDNlLDB4MDIsMHhkNywweDgwIH19LAorIHsxNiwgMHhiMmQwLCAwLCB7MHgzOSwweGUwLDB4MGYsMHhmOCwweDEzLDB4M2UsMHg0MCwweGM3LDB4MzAsMHgzYiwweGNlLDB4MGQsMHhmNiwweDAzLDB4M2QsMHg4OCB9fSwKKyB7MTYsIDB4YjJlMCwgMCwgezB4Y2YsMHgzMSwweDMzLDB4ZTQsMHgwZiwweDc4LDB4MDMsMHgzMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyZjAsIDAsIHsweDgwLDB4MTAsMHhlNSwweGQwLDB4ZGIsMHg4MCwweDcyLDB4NjAsMHg4OCwweDkyLDB4MDIsMHhlNCwweDEwLDB4OGEsMHg4MCwweDJlIH19LAorIHsxNiwgMHhiMzAwLCAwLCB7MHgzNCwweDRhLDB4OGMsMHgwMywweDJlLDB4MDAsMHhhYiwweDgwLDB4MDIsMHhlMCwweDBiLDB4YjgsMHgwMiwweDJjLDB4ODAsMHg4ZiB9fSwKKyB7MTYsIDB4YjMxMCwgMCwgezB4NjAsMHgxMywweGQ4LDB4NGEsMHg3NiwweDAyLDB4OWQsMHg4NCwweGFmLDB4MzAsMHgyMiwweDQ4LDB4MGIsMHg4OCwweDEyLDB4YTAgfX0sCisgezE2LCAweGIzMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHgwMCwweDhiLDB4MDAsMHgyNCwweDAwIH19LAorIHsxNiwgMHhiMzMwLCAwLCB7MHg0YSwweDAwLDB4MDIsMHhhYywweDgwLDB4ODMsMHgwMCwweDJjLDB4MDEsMHgyOCwweDA0LDB4MDIsMHhhYywweDAwLDB4OGIsMHgwMSB9fSwKKyB7MTYsIDB4YjM0MCwgMCwgezB4MjAsMHhjMCwweDAzLDB4YjAsMHgwMiwweDBjLDB4ODAsMHg4MywweDQwLDB4MjAsMHhjMSwweGE4LDB4MzQsMHgyMiwweDhkLDB4MTMgfX0sCisgezE2LCAweGIzNTAsIDAsIHsweDgzLDB4MjAsMHhhYywweGM4LDB4MGIsMHhiMCwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMzYwLCAwLCB7MHhjMCwweDE1LDB4ODYsMHgwMCwweDliLDB4MDQsMHhhZSwweDAwLDB4MGEsMHg5MCwweDAyLDB4ZWMsMHgwMCwweDBiLDB4MTQsMHgyZSB9fSwKKyB7MTYsIDB4YjM3MCwgMCwgezB4YzYsMHgwMiwweGIxLDB4MTIsMHg2YywweDAwLDB4YWIsMHgyMCwweDJhLDB4YzEsMHgwYiwweGIwLDB4NDIsMHgyYywweDAwLDB4OGIgfX0sCisgezE2LCAweGIzODAsIDAsIHsweDAyLDB4MjYsMHhjMSwweDBhLDB4YjAsMHgwMiwweGFjLDB4MDAsMHhhYiwweDA0LDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGYwIH19LAorIHsxNiwgMHhiMzkwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMSwweGU3LDB4MDAsMHhjMywweDAxLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4YjNhMCwgMCwgezB4MGUsMHg4OCwweDEzLDB4MjQsMHgwMiwweGNhLDB4MDAsMHgxZSwweDIwLDB4MmMsMHg4ZSwweDBiLDB4MmMsMHgwMCwweGNiLDB4MDAgfX0sCisgezE2LCAweGIzYjAsIDAsIHsweDJhLDB4YzAsMHgwZiwweGI4LDB4MDMsMHgyZSwweDA2LDB4Y2IsMHgwMCwweDNhLDB4YzAsMHg0YywweGIwLDB4MTMsMHhhYywweDBjIH19LAorIHsxNiwgMHhiM2MwLCAwLCB7MHhjYiwweDAwLDB4M2UsMHhjOCwweDBmLDB4YjAsMHg0MywweDUwLDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjNkMCwgMCwgezB4ZTAsMHgwMSwweGI0LDB4MDgsMHhmZiwweDkxLDB4MzMsMHg0MCwweDA5LDB4ZGMsMHgwMSwweGY0LDB4MjAsMHg3ZSwweDAyLDB4MmUgfX0sCisgezE2LCAweGIzZTAsIDAsIHsweDQwLDB4MGQsMHg5OCwweDAxLDB4YmMsMHg4MCwweGVmLDB4ODAsMHhiNywweGU0LDB4OGYsMHhmNCwweDBiLDB4ZmUsMHg0MCwweDdmIH19LAorIHsxNiwgMHhiM2YwLCAwLCB7MHgwMCwweGI5LDB4YzAsMHg0ZSwweGYwLDB4MDMsMHhmYywweDA4LDB4ZjcsMHgwMCwweDM3LDB4YzAsMHgwZiwweGUwLDB4MDIsMHhiOCB9fSwKKyB7MTYsIDB4YjQwMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMSwweDQ0LDB4Y2IsMHgwMiwweDMyLDB4MDAgfX0sCisgezE2LCAweGI0MTAsIDAsIHsweDBkLDB4ODAsMHgwYSwweDZkLDB4MDAsMHhlYiwweDA0LDB4MTAsMHg5MCwweDI4LDB4MjIsMHgwYiwweDJjLDB4YzIsMHhjYiwweDIwIH19LAorIHsxNiwgMHhiNDIwLCAwLCB7MHg3NiwweGMwLDB4MGUsMHhiMSwweDAzLDB4ZWMsMHgwMSwweGNiLDB4MDYsMHgzMiwweGMxLDB4MGMsMHgzMCwweDAzLDB4MmMsMHgwMiB9fSwKKyB7MTYsIDB4YjQzMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4ZDAsMHgwYywweGIwLDB4MDMsMHgxMCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0NDAsIDAsIHsweGM4LDB4MDUsMHgyMSwweDQ4LDB4YWIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDk1LDB4MjMsMHg0YywweDA4LDB4YmIsMHgwMSwweDIyIH19LAorIHsxNiwgMHhiNDUwLCAwLCB7MHhjMCwweDA4LDB4YjIsMHgwMiwweDBjLDB4MDgsMHg4MywweDg4LDB4OTIsMHhkNSwweDI4LDB4MzQsMHgwMiwweGVjLDB4MDIsMHg4ZiB9fSwKKyB7MTYsIDB4YjQ2MCwgMCwgezB4MjAsMHgyMywweGMwLDB4NGQsMHhmMCwweDAxLDB4N2MsMHgwMCwweGRmLDB4MDAsMHgyZSwweGMwLDB4MGQsMHgzMCwweDAzLDB4NzIgfX0sCisgezE2LCAweGI0NzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDQsMHgwMCwweDgzLDB4MTAsMHgyMCwweDYwIH19LAorIHsxNiwgMHhiNDgwLCAwLCB7MHgwOSwweDI1LDB4MDIsMHgwMCwweDA4LDB4YTAsMHgwMCwweDRjLDB4MDAsMHgwYiwweDBjLDB4MjIsMHg0ZiwweDEyLDB4OTMsMHg0MCB9fSwKKyB7MTYsIDB4YjQ5MCwgMCwgezB4MDAsMHhjMCwweDA5LDB4M2UsMHgwMiwweGVjLDB4MDAsMHhhYiwweDgwLDB4YTQsMHhjMCwweDA5LDB4MzAsMHgyMiwweDJjLDB4MDggfX0sCisgezE2LCAweGI0YTAsIDAsIHsweGIzLDB4MDEsMHgwYywweDgxLDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNGIwLCAwLCB7MHg2MCwweDAxLDB4MTYsMHgwOSwweGI3LDB4ODAsMHgyMSwweDY0LDB4MDgsMHg3OCwweDA2LDB4MTIsMHgwMCwweGI0LDB4ODIsMHgyZCB9fSwKKyB7MTYsIDB4YjRjMCwgMCwgezB4YTQsMHgxYiwweDY5LDB4MDYsMHg3ZSwweDA0LDB4MTcsMHg5MiwweDI1LDB4ZTYsMHgwOSwweDc4LDB4MDYsMHhkZSwweDgwLDB4YTcgfX0sCisgezE2LCAweGI0ZDAsIDAsIHsweDkwLDB4MjUsMHhlMCwweDA5LDB4NzksMHg1MCwweDVlLDB4MDQsMHhiNywweDkyLDB4MmYsMHg2MSwweDA5LDB4YzgsMHgwMiwweDQ4IH19LAorIHsxNiwgMHhiNGUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwOCwweDI1LDB4MDAsMHhjMywweDAwLDB4YjAsMHgwMyB9fSwKKyB7MTYsIDB4YjRmMCwgMCwgezB4MGQsMHhhMywweDQyLDB4MDksMHg0MCwweGUxLDB4MDAsMHhiYywweDQwLDB4MGYsMHgxMSwweDAzLDB4NGMsMHgwMCwweDEzLDB4MDAgfX0sCisgezE2LCAweGI1MDAsIDAsIHsweDIwLDB4YzAsMHgwOSwweDMyLDB4MDMsMHhjYywweDEwLDB4YTMsMHgwMCwweDI2LDB4YzQsMHg4ZCwweDMwLDB4MmIsMHgwYywweDgwIH19LAorIHsxNiwgMHhiNTEwLCAwLCB7MHhmMywweDAwLDB4N2MsMHg4MCwweDBjLDB4MzAsMHgwMSwweDEyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjUyMCwgMCwgezB4NDAsMHgxZCwweGJjLDB4MDAsMHhlNywweDEwLDB4M2QsMHgwMSwweDJmLDB4ZjEsMHg0MiwweGU4LDB4MDAsMHhmNSwweDkwLDB4MDMgfX0sCisgezE2LCAweGI1MzAsIDAsIHsweGMxLDB4MGMsMHhmMSwweDQzLDB4OWMsMHgwNCwweGVmLDB4MDgsMHgzYiwweGMyLDB4MGMsMHhmMCwweDgxLDB4ZGMsMHhhMCwweGRmIH19LAorIHsxNiwgMHhiNTQwLCAwLCB7MHgwMCwweDNiLDB4YzMsMHgzZiwweGYwLDB4ODMsMHhmYywweDA1LDB4ZGYsMHgwYywweDNkLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhkMCB9fSwKKyB7MTYsIDB4YjU1MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmNCwweDAwLDB4Y2IsMHg4MCwweDMwLDB4NDAgfX0sCisgezE2LCAweGI1NjAsIDAsIHsweDJjLDB4YTAsMHgwMywweGUwLDB4MDAsMHhmOCwweDgwLDB4MzIsMHhjMCwweDJlLDB4YjgsMHgwYiwweDJjLDB4NDYsMHhkMywweDAwIH19LAorIHsxNiwgMHhiNTcwLCAwLCB7MHgzMCwweGMwLDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCwweGRiLDB4NDgsMHgzMiwweGMwLDB4MWYsMHhiNCwweDAzLDB4MmMsMHg4OCB9fSwKKyB7MTYsIDB4YjU4MCwgMCwgezB4Y2IsMHg0OCwweDMyLDB4ODAsMHgwYywweDMwLDB4MTMsMHgyYSwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1OTAsIDAsIHsweDQ4LDB4MTEsMHhiNCwweDAwLDB4ODcsMHgwMSwweDIxLDB4NDAsMHgwOCwweDcwLDB4NDIsMHhkMCwweDA4LDB4YjQsMHgwMCwweDI5IH19LAorIHsxNiwgMHhiNWEwLCAwLCB7MHhjMCwweDA4LDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjOCwweDBjLDB4NzIsMHgwYSwweDFjLDB4ODQsMHg4ZiB9fSwKKyB7MTYsIDB4YjViMCwgMCwgezB4NDAsMHgwOSwweGM0LDB4OGYsMHg3MywweDEyLDB4OWMsMHg0MCwweDgzLDB4MjAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAyLDB4OTIgfX0sCisgezE2LCAweGI1YzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OTYsMHgwMSwweGFmLDB4ODAsMHgyMSwweDIwIH19LAorIHsxNiwgMHhiNWQwLCAwLCB7MHgwOCwweDY4LDB4MDIsMHhkYSwweDAwLDB4YmQsMHg4MCwweDIxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHgxZSwweDAwLDB4OGYsMHg4OCB9fSwKKyB7MTYsIDB4YjVlMCwgMCwgezB4ODMsMHhlMiwweDI5LDB4ZjgsMHg4MiwweDVmLDB4ODAsMHg4NywweGEwLDB4MjUsMHhlMCwweDBiLDB4M2EsMHgxMiwweDBlLDB4NTAgfX0sCisgezE2LCAweGI1ZjAsIDAsIHsweDk3LDB4YTQsMHgyMSwweGEwLDB4MjksMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNjAwLCAwLCB7MHgwOCwweDE0LDB4Y2MsMHgwMiwweGExLDB4ODEsMHgwMCwweDAwLDB4NDgsMHg3MCwweDAyLDB4YzgsMHgwMCwweGIxLDB4MDAsMHgyYyB9fSwKKyB7MTYsIDB4YjYxMCwgMCwgezB4ZjgsMHgwOSwweDMxLDB4NDIsMHgwYywweDEwLDB4ODMsMHgwMCwweDIwLDB4ZTAsMHgwOCwweDM4LDB4MTIsMHg0ZSwweDAwLDB4ODMgfX0sCisgezE2LCAweGI2MjAsIDAsIHsweDAwLDB4NmEsMHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDQsMHg5MywweDAwLDB4MjAsMHhlMCwweDA5LDB4MzgsMHgwMiwweDkyIH19LAorIHsxNiwgMHhiNjMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgxNSwweGI5LDB4NDAsMHhlZSwweDIwLDB4MzAsMHg4MCB9fSwKKyB7MTYsIDB4YjY0MCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzMywweGIwLDB4MGQsMHhlNCwweDAzLDB4MzIsMHg4OCwweGNjLDB4ODAgfX0sCisgezE2LCAweGI2NTAsIDAsIHsweDIzLDB4MDAsMHgwZCwweGMwLDB4MDMsMHg2MiwweDAyLDB4Y2EsMHgwMCwweDM2LDB4ODAsMHgwZiwweGEwLDB4NDMsMHgyOCwweDA2IH19LAorIHsxNiwgMHhiNjYwLCAwLCB7MHhkYSwweDAwLDB4MzMsMHhhMCwweDBkLDB4NmEsMHgwMywweDNhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjY3MCwgMCwgezB4NDgsMHgwMCwweGUwLDB4MDAsMHg5OCwweDAxLDB4YmUsMHgwMCwweDBmLDB4ODAsMHgwMywweGYwLDB4MDAsMHhiYywweDAwLDB4MzggfX0sCisgezE2LCAweGI2ODAsIDAsIHsweDA0LDB4MDgsMHg4MCwweGEzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDEzLDB4YTAsMHgwMCwweGUwIH19LAorIHsxNiwgMHhiNjkwLCAwLCB7MHgwMCwweDNlLDB4MDAsMHgwZSwweDAwLDB4MDMsMHhjMCwweDAwLDB4ZTgsMHgwMCwweGJlLDB4MDQsMHg0ZSwweDgwLDB4MDcsMHhkMiB9fSwKKyB7MTYsIDB4YjZhMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDgwLDB4YzksMHgwMCwweDNlLDB4NjggfX0sCisgezE2LCAweGI2YjAsIDAsIHsweDBjLDB4OTAsMHgwMywweDY0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHg0MywweGUwLDB4MDAsMHhjOCwweDAwIH19LAorIHsxNiwgMHhiNmMwLCAwLCB7MHgzMiwweDAwLDB4MGMsMHg4MCwweDEzLDB4MjAsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMCB9fSwKKyB7MTYsIDB4YjZkMCwgMCwgezB4ODEsMHgwMCwweDMyLDB4NDAsMHgwNCwweDkwLDB4MTMsMHgwMiwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2ZTAsIDAsIHsweDgwLDB4MDQsMHg2NSwweDA2LDB4ODksMHg0MCwweDJlLDB4NjAsMHgxYSwweDE0LDB4MmEsMHgwNSwweDIwLDB4ODksMHgwMCwweDJlIH19LAorIHsxNiwgMHhiNmYwLCAwLCB7MHg0MCwweDA4LDB4OTAsMHgwMiwweGM0LDB4MDgsMHhjMSwweDAyLDB4MjAsMHg0MCwweDA4LDB4MTAsMHgxYSwweDI0LDB4MDAsMHg4OSB9fSwKKyB7MTYsIDB4YjcwMCwgMCwgezB4MTAsMHgzMiwweDQxLDB4MDgsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDQsMHgzNiwweDQwLDB4ODgsMHg5NCwweDBhLDB4MjAgfX0sCisgezE2LCAweGI3MTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgyMCwweDg5LDB4NTUsMHgyZSwweDQwIH19LAorIHsxNiwgMHhiNzIwLCAwLCB7MHgwOCwweGQ1LDB4MDIsMHgzNCwweDAwLDB4OGQsMHgwMCwweDJlLDB4NDAsMHgxOCwweDkwLDB4MDIsMHhlNCwweDAwLDB4OTksMHgwMCB9fSwKKyB7MTYsIDB4YjczMCwgMCwgezB4MjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MGEsMHg4OSwweDAwLDB4MjYsMHg0MCwweDM4LDB4OTAsMHgwYSwweDI0LDB4MDAgfX0sCisgezE2LCAweGI3NDAsIDAsIHsweGE5LDB4MDAsMHgyMCwweDQwLDB4MGEsMHg5MCwweDgyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNzUwLCAwLCB7MHgwOCwweDA0LDB4MDUsMHgwMCwweDgxLDB4MDAsMHgyZiwweDQwLDB4MGEsMHhkNCwweDAyLDB4MzQsMHgwMCwweDg1LDB4MDEsMHgyYyB9fSwKKyB7MTYsIDB4Yjc2MCwgMCwgezB4NDAsMHgwOCwweDEwLDB4NDIsMHhlNCwweDA2LDB4OTksMHgwMCwweDIyLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNSwweDAwLDB4ODEgfX0sCisgezE2LCAweGI3NzAsIDAsIHsweDQwLDB4MjgsMHg1MCwweDA4LDB4MTQsMHgxMiwweDA1LDB4MDAsMHhhMSwweDQwLDB4MjQsMHg1MCwweDVhLDB4MTAsMHgwMiwweDAyIH19LAorIHsxNiwgMHhiNzgwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwZCwweDYwLDB4MDAsMHhjOCwweDA0LDB4M2UsMHgwMCB9fSwKKyB7MTYsIDB4Yjc5MCwgMCwgezB4MDgsMHg4MCwweDAzLDB4MjEsMHg0MiwweGNjLDB4MDAsMHgzZSwweDAwLDB4MmMsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGQ4LDB4MDAgfX0sCisgezE2LCAweGI3YTAsIDAsIHsweGI2LDB4MDAsMHgyYywweDgwLDB4MDIsMHgyMCwweDAyLDB4YzgsMHgwMCwweDM2LDB4MDAsMHgwYywweDgwLDB4MDMsMHg2MCwweDAyIH19LAorIHsxNiwgMHhiN2IwLCAwLCB7MHhlOCwweDAwLDB4MzIsMHgwMCwweDhlLDB4ODAsMHgwMywweDJlLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjdjMCwgMCwgezB4OTgsMHgxZCwweGY1LDB4MDAsMHhmNSwweDAwLDB4M2UsMHg0MCwweDg3LDB4OTAsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2QgfX0sCisgezE2LCAweGI3ZDAsIDAsIHsweDUwLDB4MGYsMHg1NCwweDAzLDB4ZDEsMHgwMCwweGVjLDB4NDAsMHgzZiwweDEwLDB4MGIsMHhjNCwweDQzLDB4ZjEsMHgwMCwweGY5IH19LAorIHsxNiwgMHhiN2UwLCAwLCB7MHg0MCwweDM2LDB4NTAsMHgwZiwweDk0LDB4MTMsMHhlNSwweDEwLDB4ZDksMHg0NCwweDNkLDB4NDAsMHgyZCwweGQwLDB4MDMsMHhlNiB9fSwKKyB7MTYsIDB4YjdmMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDYwLDB4Y2QsMHgwMiwweDNiLDB4NDAgfX0sCisgezE2LCAweGI4MDAsIDAsIHsweDBjLDB4ZDAsMHgwMywweGI0LDB4NDAsMHhmZCwweDA2LDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDY2LDB4MDQsMHhjOSwweDgyIH19LAorIHsxNiwgMHhiODEwLCAwLCB7MHhiNiwweDYyLDB4MGYsMHgxOCwweDBiLDB4MzYsMHgwMCwweGNkLDB4NDAsMHgzMiwweDYxLDB4MGMsMHg5MCwweDIzLDB4MjQsMHgwYSB9fSwKKyB7MTYsIDB4YjgyMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHg0YywweGQwLDB4NDMsMHgwNiwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI4MzAsIDAsIHsweDM5LDB4MTAsMHhlMywweDgwLDB4ZDgsMHgwMCwweDIyLDB4MDAsMHgwZCwweDgwLDB4MDIsMHgyMiwweDk0LDB4YjgsMHgwMCwweDJlIH19LAorIHsxNiwgMHhiODQwLCAwLCB7MHgwMCwweDBkLDB4ODAsMHgwMywweDIxLDB4MDAsMHg4OCwweDQwLDB4MjIsMHgwMCwweDBiLDB4YzQsMHgyMiwweDIxLDB4NTAsMHg4OCB9fSwKKyB7MTYsIDB4Yjg1MCwgMCwgezB4ODAsMHgyMiwweDIyLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgxMCwweDgwLDB4MDEsMHgyYSwweDAwLDB4MGEsMHg4MCwweDAzLDB4NGUgfX0sCisgezE2LCAweGI4NjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4YzYsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwIH19LAorIHsxNiwgMHhiODcwLCAwLCB7MHg4OCwweDEwLDB4MGEsMHg4NCwweDA4LDB4YjEsMHgwMCwweDI5LDB4NDAsMHgwYSwweDcwLDB4MGEsMHhiNSwweDAwLDB4OGYsMHg0MCB9fSwKKyB7MTYsIDB4Yjg4MCwgMCwgezB4MjksMHhjMCwweDBiLDB4ZjQsMHgwMiwweDI0LDB4MDAsMHg4MSwweDIwLDB4MjgsMHg0NCwweDg5LDB4MTAsMHgwMiwweDA0LDB4MDQgfX0sCisgezE2LCAweGI4OTAsIDAsIHsweDgxLDB4MDIsMHgyYSwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOGEwLCAwLCB7MHgxOCwweDE1LDB4YTYsMHgwMCwweDk5LDB4MjAsMHgyMiwweDQwLDB4MDksMHg5MCwweDEyLDB4MjQsMHg4MCwweGI5LDB4MDAsMHgyZiB9fSwKKyB7MTYsIDB4YjhiMCwgMCwgezB4NDQsMHgwMywweGQwLDB4MDIsMHhmNCwweDAwLDB4OGQsMHgwMCwweDJiLDB4NDEsMHgwYiwweGQwLDB4MDIsMHgyNiwweDEwLDB4ODkgfX0sCisgezE2LCAweGI4YzAsIDAsIHsweDA0LDB4MmEsMHg0MCwweDA5LDB4OTAsMHg2ZSwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTQsMHgwMiwweDQ2IH19LAorIHsxNiwgMHhiOGQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHgxNSwweGU2LDB4MDAsMHhjOSwweDAwLDB4MzgsMHg0MiB9fSwKKyB7MTYsIDB4YjhlMCwgMCwgezB4MGMsMHgxMCwweDEzLDB4YTYsMHgwNCwweDc5LDB4MDgsMHgzYSwweDc4LDB4MDYsMHg5MiwweDAzLDB4YTQsMHgwOCwweGM5LDB4MDAgfX0sCisgezE2LCAweGI4ZjAsIDAsIHsweDNhLDB4NjAsMHg4ZiwweDk4LDB4MjMsMHgwNiwweDAyLDB4YzksMHgwMiwweDNhLDB4NDAsMHgwZCwweDkwLDB4MDMsMHgwNCwweDAwIH19LAorIHsxNiwgMHhiOTAwLCAwLCB7MHhjOSwweDAwLDB4MzgsMHg0MCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjkxMCwgMCwgezB4MjgsMHgwMSwweDg0LDB4MTAsMHhmOSwweDgwLDB4YmUsMHg0MCwweDRmLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhmOSwweDAwLDB4M2MgfX0sCisgezE2LCAweGI5MjAsIDAsIHsweDYwLDB4OGQsMHg5MiwweDAzLDB4MjQsMHg0MiwweGU5LDB4MTAsMHgzMiwweDUwLDB4MGYsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGY5IH19LAorIHsxNiwgMHhiOTMwLCAwLCB7MHgwMCwweGI2LDB4NDEsMHgyZSwweDEwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDJlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjYSB9fSwKKyB7MTYsIDB4Yjk0MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA4LDB4YzgsMHgwMCwweDNlLDB4MTAgfX0sCisgezE2LCAweGI5NTAsIDAsIHsweDBmLDB4ODgsMHgwMywweDIwLDB4MDgsMHhmOCwweGMwLDB4MWUsMHgxMCwweDJjLDB4NDAsMHgwMywweGYyLDB4MDAsMHhjYywweDAwIH19LAorIHsxNiwgMHhiOTYwLCAwLCB7MHgzZiwweDAwLDB4MGMsMHhjMCwweDEzLDB4MjAsMHgwMiwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHg4MCwweDJiLDB4MjAsMHgxMCB9fSwKKyB7MTYsIDB4Yjk3MCwgMCwgezB4YzAsMHgwNCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgwYSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5ODAsIDAsIHsweGE4LDB4MDUsMHgzYSwweDgwLDB4ODYsMHhlMCwweDJmLDB4YTAsMHgxYiwweGUwLDB4MDIsMHgzYSwweDgwLDB4YmEsMHgwNCwweDJlIH19LAorIHsxNiwgMHhiOTkwLCAwLCB7MHg4MCwweDA4LDB4YTAsMHgwMywweDg4LDB4MDgsMHhjMiwweDAwLDB4MmUsMHg4MSwweDA4LDB4NjAsMHgwMiwweDI4LDB4MTAsMHg4ZSB9fSwKKyB7MTYsIDB4YjlhMCwgMCwgezB4ODEsMHgwMywweDgwLDB4MDgsMHhlMCwweDAxLDB4NzgsMHgwMCwweDhlLDB4MDQsMHgwMywweDgwLDB4MDksMHg2OCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGI5YjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4NjAsMHgyYywweDQ0IH19LAorIHsxNiwgMHhiOWMwLCAwLCB7MHgwYiwweDM4LDB4MDIsMHgwZiwweDgwLDB4YjEsMHgwMCwweDJjLDB4ZTUsMHgwMywweDMwLDB4MTAsMHhjYywweDEwLDB4ODMsMHgwMCB9fSwKKyB7MTYsIDB4YjlkMCwgMCwgezB4MGMsMHhjMCwweDI5LDB4MzAsMHgyMiwweDA0LDB4MDksMHg5MSwweDEwLDB4MjQsMHhjMCwweGM4LDB4MzAsMHgwMCwweDRjLDB4MDQgfX0sCisgezE2LCAweGI5ZTAsIDAsIHsweDkzLDB4MDIsMHgyNCwweGMwLDB4MGIsMHgzMSwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOWYwLCAwLCB7MHhlMCwweDAxLDB4MTgsMHg4MCwweDg3LDB4MDAsMHgyZCwweDQwLDB4MGIsMHg3NCwweDQyLDB4MWMsMHgwMSwweGI1LDB4MDEsMHgyYyB9fSwKKyB7MTYsIDB4YmEwMCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MDIsMHhiMCwweDAwLDB4OTQsMHgwNCwweDJmLDB4MjAsMHgwOSwweGMwLDB4MDIsMHgxNCwweDkwLDB4OTcgfX0sCisgezE2LCAweGJhMTAsIDAsIHsweDAwLDB4MjUsMHhjOCwweDA4LDB4NzAsMHgwMiwweDRjLDB4ODAsMHg5NywweDIwLDB4MjUsMHhjMCwweDA5LDB4NzAsMHgwMiwweGU4IH19LAorIHsxNiwgMHhiYTIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwOCwweDNhLDB4ODIsMHhjNiwweDgwLDB4MmQsMHg2MCB9fSwKKyB7MTYsIDB4YmEzMCwgMCwgezB4MGIsMHhmOCwweDBiLDB4MWEsMHgwMCwweGY1LDB4ODAsMHgzZCwweGUwLDB4OGYsMHg3OCwweDAzLDB4ZGUsMHgwMiwweGM3LDB4ODAgfX0sCisgezE2LCAweGJhNDAsIDAsIHsweDJkLDB4ZTAsMHgwZCwweDc4LDB4MGIsMHgxNywweDAyLDB4ZGYsMHg4MCwweDI0LDB4ZjgsMHgyYywweGZkLDB4MDMsMHg1ZSwweDBjIH19LAorIHsxNiwgMHhiYTUwLCAwLCB7MHhkNywweGUwLDB4MzUsMHhlMCwweDBmLDB4NjgsMHgwMywweDJhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmE2MCwgMCwgezB4NDgsMHgxZCwweGFlLDB4NDAsMHhmYSwweDA0LDB4M2UsMHg0MCwweDBmLDB4ODAsMHgxMywweGVjLDB4MDQsMHhmOSwweDAwLDB4M2UgfX0sCisgezE2LCAweGJhNzAsIDAsIHsweGMxLDB4MGMsMHhhMCwweDEzLDB4YzAsMHgxMCwweGU4LDB4MDAsMHgzYywweDAwLDB4NGUsMHg4MCwweDQzLDB4YzQsMHgyMCwweDg5IH19LAorIHsxNiwgMHhiYTgwLCAwLCB7MHgwMCwweGJhLDB4YzAsMHgwNywweGI2LDB4MjEsMHhlZCwweDA2LDB4ZWIsMHg2OCwweGJhLDB4Y2MsMHgwZiwweDIwLDB4MTMsMHhjMiB9fSwKKyB7MTYsIDB4YmE5MCwgMCwgezB4MDYsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhiZSwweDAwLDB4YzYsMHg4MCwweDMxLDB4NjAgfX0sCisgezE2LCAweGJhYTAsIDAsIHsweDJkLDB4NzgsMHgwYiwweDNlLDB4NDgsMHhlYywweDkyLDB4M2QsMHg2MCwweDBjLDB4NTgsMHgwMywweDVhLDB4NDAsMHhkNSwweDgwIH19LAorIHsxNiwgMHhiYWIwLCAwLCB7MHgzMSwweDYxLDB4MGMsMHg1OCwweDIzLDB4MzYsMHgwMCwweGNmLDB4ODIsMHgzZiwweGUwLDB4MGMsMHhmOCwweDAzLDB4ZmYsMHg2MCB9fSwKKyB7MTYsIDB4YmFjMCwgMCwgezB4Y2YsMHg5MCwweDMzLDB4ZjAsMHgwYywweDUyLDB4MDMsMHgwMCwweDAwLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJhZDAsIDAsIHsweGE4LDB4MTEsMHhiOCwweDg0LDB4ODYsMHgxNCwweGI1LDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxZSwweGMwLDB4YzQsMHgwMCwweDJkIH19LAorIHsxNiwgMHhiYWUwLCAwLCB7MHg0MCwweDA4LDB4NDAsMHgwMiwweDE0LDB4ZDAsMHg4NiwweDEwLDB4MjEsMHg4MCwweDRjLDB4NjIsMHg0MiwweDM0LDB4NDAsMHhhNSB9fSwKKyB7MTYsIDB4YmFmMCwgMCwgezB4MDAsMHgzNSwweGMwLDB4MjgsMHg3MCwweDQyLDB4ZGMsMHhjMiwweDhmLDB4MzAsMHgyMywweGMwLDB4MDgsMHg1MCwweDAyLDB4MmEgfX0sCisgezE2LCAweGJiMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4OTgsMHgyOCwweDhlLDB4MDAsMHhhNSwweDQwIH19LAorIHsxNiwgMHhiYjEwLCAwLCB7MHgwOCwweGYxLDB4MDIsMHgxOCwweDY0LDB4YjQsMHgwMCwweDZkLDB4NDIsMHgwOCwweDUwLDB4MDIsMHgxOCwweDAxLDB4ODUsMHgwOCB9fSwKKyB7MTYsIDB4YmIyMCwgMCwgezB4MjEsMHg0MCwweDA5LDB4NTgsMHgyMiwweDU0LDB4MDAsMHg4NSwweDEwLDB4MmQsMHhjNCwweDA5LDB4NzAsMHgwMiwweGRjLDB4MDQgfX0sCisgezE2LCAweGJiMzAsIDAsIHsweDk3LDB4MDAsMHgyNSwweGMwLDB4MDgsMHg0NCwweDAyLDB4MDAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYjQwLCAwLCB7MHg2MCwweDE0LDB4OGMsMHgwMCwweDgyLDB4ODAsMHgyNCwweGMwLDB4MDgsMHg4MCwweDAyLDB4MmQsMHgwMCwweDgwLDB4NGEsMHgyYyB9fSwKKyB7MTYsIDB4YmI1MCwgMCwgezB4NDIsMHgwOCwweDBhLDB4NDIsMHgwNiwweDAwLDB4OTIsMHg4NCwweDIwLDB4YTAsMHg4OCwweDI4LDB4NDIsMHg0NCwweDAwLDB4YTMgfX0sCisgezE2LCAweGJiNjAsIDAsIHsweDA2LDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MTAsMHg5MywweDA0LDB4MjQsMHhjMSwweDA5LDB4MDAsMHgwMiwweDA4IH19LAorIHsxNiwgMHhiYjcwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgxNSwweGJjLDB4MDAsMHhjYiwweDAwLDB4MzYsMHg0MCB9fSwKKyB7MTYsIDB4YmI4MCwgMCwgezB4MGMsMHhiNCwweDEzLDB4MmMsMHgwMCwweGY5LDB4MDAsMHgzZSwweGEwLDB4MGMsMHhhMiwweDAzLDB4MDQsMHgwOCwweGMyLDB4ODAgfX0sCisgezE2LCAweGJiOTAsIDAsIHsweDMwLDB4YTgsMHgwZCwweDJhLDB4MDMsMHg1NCwweDAwLDB4Y2IsMHgwMCwweDNmLDB4YzAsMHgwZCwweGYwLDB4MDMsMHhmYywweDA4IH19LAorIHsxNiwgMHhiYmEwLCAwLCB7MHhkZiwweDAwLDB4MzcsMHhkMCwweDBjLDB4YjAsMHgwMywweDJhLDB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmJiMCwgMCwgezB4ODAsMHgwMCwweGUwLDB4MDAsMHhmYiwweDEwLDB4M2EsMHg0MCwweDBlLDB4YjAsMHgwMywweGVkLDB4OTAsMHhmOSwweDExLDB4N2UgfX0sCisgezE2LCAweGJiYzAsIDAsIHsweDgwLDB4NGYsMHhiMCwweDUzLDB4ZTgsMHg0MCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YTYsMHgwOCwweGY5IH19LAorIHsxNiwgMHhiYmQwLCAwLCB7MHgwMSwweDNhLDB4YzAsMHgwYywweGIwLDB4MTMsMHhjYywweDAwLDB4ZWIsMHgwMiwweDNhLDB4YzYsMHg4ZSwweGI4LDB4MDMsMHhlMCB9fSwKKyB7MTYsIDB4YmJlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmMCwweDBjLDB4Y2UsMHgwMCwweDNmLDB4ZTAgfX0sCisgezE2LCAweGJiZjAsIDAsIHsweDJjLDB4ZjAsMHg4MywweDNhLDB4NDgsMHhjZCwweDAxLDB4MzUsMHg4MCwweDBjLDB4NjAsMHgxMiwweDM0LDB4MGEsMHhjZSwweDAwIH19LAorIHsxNiwgMHhiYzAwLCAwLCB7MHhiMywweDgwLDB4MmMsMHhlMCwweDBiLDB4NzQsMHgwMCwweGM5LDB4MTAsMHhiMywweGMxLDB4MGYsMHhmMCwweDFiLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4YmMxMCwgMCwgezB4Y2YsMHgwMCwweGI3LDB4YzAsMHgyYywweGUwLDB4MDMsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjMjAsIDAsIHsweDgxLDB4MDQsMHg2ZSwweDEwLDB4ODgsMHg4MCwweDJjLDB4YzAsMHgxOCwweDk4LDB4MDIsMHgyZCwweDgwLDB4ODEsMHgwMCwweDM2IH19LAorIHsxNiwgMHhiYzMwLCAwLCB7MHg5MSwweDA4LDB4YjAsMHgwMywweDY4LDB4MDAsMHhjOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4MyB9fSwKKyB7MTYsIDB4YmM0MCwgMCwgezB4ODAsMHgzNiwweGMwLDB4MGIsMHgzMCwweDAyLDB4MmMsMHgwMiwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgyMCwweDAzLDB4NjAgfX0sCisgezE2LCAweGJjNTAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MDYsMHgwMCwweDhhLDB4ODAsMHgyZSwweDQ1IH19LAorIHsxNiwgMHhiYzYwLCAwLCB7MHgyOCwweDg4LDB4MDIsMHgyNCwweDAyLDB4ODgsMHgwMiwweDAyLDB4MDIsMHgwOCwweDgwLDB4MDIsMHhhMiwweDAwLDB4OTgsMHgwMCB9fSwKKyB7MTYsIDB4YmM3MCwgMCwgezB4MjIsMHgwMCwweDA4LDB4ODAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDAxLDB4MjIsMHhjMSwweDBhLDB4YjAsMHgwMiwweDZjLDB4MDAgfX0sCisgezE2LCAweGJjODAsIDAsIHsweGFiLDB4MDAsMHgyMiwweGMxLDB4MDgsMHg5MCwweDEyLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYzkwLCAwLCB7MHgwOCwweDA0LDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyYywweGMwLDB4NDgsMHgwOCwweDEyLDB4MDAsMHg4MCwweDgwLDB4MDIsMHgyNCB9fSwKKyB7MTYsIDB4YmNhMCwgMCwgezB4MDAsMHgwOCwweDE4LDB4NDIsMHhhYywweDAyLDB4OGIsMHg4MCwweDIyLDB4ZTAsMHgwOCwweGI4LDB4MTIsMHgwNCwweDAyLDB4ODMgfX0sCisgezE2LCAweGJjYjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHg0MiwweDBjLDB4MDAsMHhhMywweDAxLDB4NjAsMHhjMCwweDQ4LDB4MTAsMHgwMiwweDQyIH19LAorIHsxNiwgMHhiY2MwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDY4LDB4MDgsMHhjYSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4YmNkMCwgMCwgezB4MDgsMHg4MCwweDAzLDB4MDAsMHgwMCwweGM4LDB4MDYsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAyLDB4YTAsMHgwMCwweGQ4LDB4MDAgfX0sCisgezE2LCAweGJjZTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHg3NCwweDAwLDB4Y2IsMHgwMCwweDIyLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDAwIH19LAorIHsxNiwgMHhiY2YwLCAwLCB7MHhlZiwweDAwLDB4MzcsMHhjMCwweDBjLDB4ODAsMHgwMSwweDQwLDB4MDMsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmQwMCwgMCwgezB4YTAsMHgxOSwweGZjLDB4MDAsMHhmYywweDA0LDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGUxLDB4MDAsMHhmYywweDAwLDB4M2IgfX0sCisgezE2LCAweGJkMTAsIDAsIHsweDAwLDB4MGYsMHhkMCwweDAzLDB4N2MsMHgwMCwweGVmLDB4MDAsMHgyZiwweGMwLDB4MGYsMHhmMCwweDExLDB4ZjQsMHgxMCwweGZkIH19LAorIHsxNiwgMHhiZDIwLCAwLCB7MHgwMiwweDNkLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhkYywweDAwLDB4ZGYsMHgwNCwweDNmLDB4YzAsMHgwZiwweGMwLDB4NDMsMHhlOSB9fSwKKyB7MTYsIDB4YmQzMCwgMCwgezB4MDYsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MSwweDAyLDB4NzAsMHgyMCwweGRjLDB4MTAgfX0sCisgezE2LCAweGJkNDAsIDAsIHsweDY3LDB4MDQsMHgwZCwweGMxLDB4MDIsMHg3MCwweDIwLDB4OWMsMHgxMCwweDM3LDB4MDQsMHgwZCwweGMxLDB4MDYsMHg3MCwweDQwIH19LAorIHsxNiwgMHhiZDUwLCAwLCB7MHg0YywweDEwLDB4MzcsMHgxNCwweDE1LDB4YzEsMHgwMywweDcwLDB4NDAsMHhkYywweDEwLDB4MTMsMHgwNCwweDBkLDB4YzEsMHgwNyB9fSwKKyB7MTYsIDB4YmQ2MCwgMCwgezB4NzAsMHg0MCwweGRjLDB4MTAsMHgzNywweDA0LDB4MGQsMHhjMCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkNzAsIDAsIHsweDAwLDB4YzUsMHg0NCwweDA1LDB4NzEsMHgyMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjNCwweDA1LDB4NzEsMHgwNSwweDVjIH19LAorIHsxNiwgMHhiZDgwLCAwLCB7MHg0MCwweDU3LDB4MTAsMHgxNSwweGM0LDB4MDYsMHg3MSwweDAxLDB4NGMsMHg0MCwweDU3LDB4MTAsMHgwZCwweGM0LDB4MDUsMHg3MSB9fSwKKyB7MTYsIDB4YmQ5MCwgMCwgezB4MDUsMHg1YywweDQwLDB4NTMsMHgxMCwweDE1LDB4YzQsMHgwNywweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzAgfX0sCisgezE2LCAweGJkYTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH19LAorIHsxNiwgMHhiZGIwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4YmRjMCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEgfX0sCisgezE2LCAweGJkZDAsIDAsIHsweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZGUwLCAwLCB7MHgwMCwweDg0LDB4MDAsMHgwMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4NTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwLDB4MDQsMHg1OCB9fSwKKyB7MTYsIDB4YmRmMCwgMCwgezB4MDAsMHgxNiwweDAwLDB4MDUsMHg4MCwweDAxLDB4MjAsMHgwMSwweDU4LDB4MDAsMHgxNiwweDAwLDB4MDUsMHg4MCwweDAxLDB4NjAgfX0sCisgezE2LCAweGJlMDAsIDAsIHsweDAwLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDE2LDB4MDAsMHgwMSwweDgwIH19LAorIHsxNiwgMHhiZTEwLCAwLCB7MHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQ4LDB4MDUsMHg3MiwweDExLDB4NWMsMHg4MCB9fSwKKyB7MTYsIDB4YmUyMCwgMCwgezB4MTcsMHgyMCwweDE1LDB4ZDgsMHgwNSwweDMyLDB4MTEsMHgxYywweDgwLDB4NDcsMHgyMCwweDE0LDB4ODgsMHgwMCwweDcyLDB4MDEgfX0sCisgezE2LCAweGJlMzAsIDAsIHsweDFjLDB4ODAsMHg1NywweDIwLDB4MDUsMHhjOCwweDA0LDB4NzIsMHgwMSwweDVjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjOCwweDAxIH19LAorIHsxNiwgMHhiZTQwLCAwLCB7MHg3MiwweDAxLDB4NWMsMHg4MCwweDU3LDB4MjQsMHgxNSwweGMwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmU1MCwgMCwgezB4MDAsMHhjMSwweDQwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4NDAsMHgyMCwweDAwLDB4MTggfX0sCisgezE2LCAweGJlNjAsIDAsIHsweDAwLDB4MDYsMHgwMCwweDAxLDB4OTAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgwMCwweDYwIH19LAorIHsxNiwgMHhiZTcwLCAwLCB7MHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MTAsMHgwNiwweDAwLDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4YmU4MCwgMCwgezB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfX0sCisgezE2LCAweGJlOTAsIDAsIHsweDAyLDB4MjAsMHgxMCwweDg4LDB4MDQsMHg2MiwweDAxLDB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDg4LDB4MDAsMHgyMCwweDAxIH19LAorIHsxNiwgMHhiZWEwLCAwLCB7MHgwOCwweDgwLDB4NDIsMHgyMCwweDAwLDB4ODgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgyMCwweDEwLDB4ODgsMHgwMCB9fSwKKyB7MTYsIDB4YmViMCwgMCwgezB4MjIsMHgwMSwweDA4LDB4ODAsMHg0MiwweDMwLDB4MTAsMHg4MCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlYzAsIDAsIHsweDAwLDB4YzUsMHg0YSwweDA1LDB4NDIsMHg4MSwweDUwLDB4YTAsMHgwNCwweDI4LDB4MTUsMHgwYSwweDA1LDB4NTIsMHg4MSwweDEwIH19LAorIHsxNiwgMHhiZWQwLCAwLCB7MHhhMCwweDQ0LDB4MjgsMHgxMSwweDFhLDB4MDAsMHg0MCwweDgwLDB4MTAsMHhhMCwweDU0LDB4MjgsMHgwNSwweDBhLDB4MDUsMHg0MiB9fSwKKyB7MTYsIDB4YmVlMCwgMCwgezB4ODEsMHg1MSwweDIwLDB4MTQsMHgyOCwweDE1LDB4MGEsMHgwMSwweDQyLDB4ODEsMHg1MCwweGEwLDB4NTQsMHgyOCwweDE1LDB4MDAgfX0sCisgezE2LCAweGJlZjAsIDAsIHsweDMxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGMsMHgwMSwweDUzLDB4NDAsMHg1NCwweGMwIH19LAorIHsxNiwgMHhiZjAwLCAwLCB7MHgxNSwweDMwLDB4MDUsMHg1YywweDAxLDB4NTcsMHg0MCwweDU0LDB4YzAsMHgxNSwweDMwLDB4MDUsMHg1YywweDAxLDB4NTMsMHgwMCB9fSwKKyB7MTYsIDB4YmYxMCwgMCwgezB4NTUsMHhjMCwweDE1LDB4NzQsMHgwNSwweDRjLDB4MDEsMHg1MywweDAwLDB4NTUsMHhjMCwweDE1LDB4NzQsMHgwNSwweDRjLDB4MDEgfX0sCisgezE2LCAweGJmMjAsIDAsIHsweDUzLDB4MDAsMHg1NCwweGMwLDB4MTEsMHgzMCwweDAxLDB4NDAsMHgyMSwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZjMwLCAwLCB7MHgwMCwweDgwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgxMCB9fSwKKyB7MTYsIDB4YmY0MCwgMCwgezB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MTEsMHgwMCwweDAwLDB4NDAgfX0sCisgezE2LCAweGJmNTAsIDAsIHsweDAwLDB4MTAsMHhjMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDAxLDB4MTAsMHgwMSwweDAxIH19LAorIHsxNiwgMHhiZjYwLCAwLCB7MHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDYwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCB9fSwKKyB7MTYsIDB4YmY3MCwgMCwgezB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAgfX0sCisgezE2LCAweGJmODAsIDAsIHsweDgyLDB4MDAsMHgyMCwweDg0LDB4MDAsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDg0LDB4MDgsMHgyMCwweDAyIH19LAorIHsxNiwgMHhiZjkwLCAwLCB7MHgwOCwweDAwLDB4ODIsMHgwMCwweDIxLDB4ODAsMHgwOCwweDAxLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmZhMCwgMCwgezB4MDAsMHhjNSwweDQwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDk2LDB4MDAsMHgxNSwweDkwLDB4MDUsMHg2NCwweDAyLDB4NTggfX0sCisgezE2LCAweGJmYjAsIDAsIHsweDAwLDB4NTYsMHgwMCwweDU1LDB4OTAsMHgwNSwweDYwLDB4MDEsMHhkOSwweDAwLDB4MTYsMHg0MCwweDE1LDB4ODAsMHgwNSwweDYwIH19LAorIHsxNiwgMHhiZmMwLCAwLCB7MHgwMSwweDU5LDB4MDAsMHg3NiwweDQwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCB9fSwKKyB7MTYsIDB4YmZkMCwgMCwgezB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzQsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfX0sCisgezE2LCAweGJmZTAsIDAsIHsweDM2LDB4MDAsMHg0ZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDcsMHg2MiwweDAwIH19LAorIHsxNiwgMHhiZmYwLCAwLCB7MHg1OCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNywweDYwLDB4MDAsMHhkOCwweDgwLDB4MTYsMHgwMCwweDBkLDB4ODAsMHgwMyB9fSwKKyB7MTYsIDB4YzAwMCwgMCwgezB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MWQsMHg4MCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwMTAsIDAsIHsweDAwLDB4YzUsMHg0MiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjIH19LAorIHsxNiwgMHhjMDIwLCAwLCB7MHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweGMxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDYsMHgzMCB9fSwKKyB7MTYsIDB4YzAzMCwgMCwgezB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDE4LDB4YzAgfX0sCisgezE2LCAweGMwNDAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH19LAorIHsxNiwgMHhjMDUwLCAwLCB7MHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDQwLDB4MzAsMHgwMCB9fSwKKyB7MTYsIDB4YzA2MCwgMCwgezB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAgfX0sCisgezE2LCAweGMwNzAsIDAsIHsweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMDgwLCAwLCB7MHgwMCwweDgwLDB4MDIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwLDB4ODAsMHg0YyB9fSwKKyB7MTYsIDB4YzA5MCwgMCwgezB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDI1LDB4MzAsMHg4MSwweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAgfX0sCisgezE2LCAweGMwYTAsIDAsIHsweDgwLDB4NGMsMHgzMiwweDUzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMwIH19LAorIHsxNiwgMHhjMGIwLCAwLCB7MHgyMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQyLDB4MDUsMHg2MiwweDgxLDB4NTgsMHgyMCB9fSwKKyB7MTYsIDB4YzBjMCwgMCwgezB4NTYsMHgwOCwweDE1LDB4ODIsMHgwNCwweDYwLDB4ODEsMHg1OCwweDIwLDB4NDYsMHgwOCwweDE1LDB4ODIsMHgwMSwweDYwLDB4YzEgfX0sCisgezE2LCAweGMwZDAsIDAsIHsweDU4LDB4MjAsMHg0NiwweDA4LDB4MTUsMHg4MiwweDAxLDB4NjAsMHg4MSwweDU4LDB4MzAsMHg1NiwweDA4LDB4MTUsMHg4MiwweDA1IH19LAorIHsxNiwgMHhjMGUwLCAwLCB7MHg2MCwweDgxLDB4NTgsMHgyMCwweDU2LDB4MDgsMHgwNSwweDgwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzBmMCwgMCwgezB4MDAsMHhjNSwweDQyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDggfX0sCisgezE2LCAweGMxMDAsIDAsIHsweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwYywweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwIH19LAorIHsxNiwgMHhjMTEwLCAwLCB7MHg4MCwweDA4LDB4MjAsMHgwMywweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4YzEyMCwgMCwgezB4MjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA0LDB4NjYsMHg4MSwweDE4LDB4MjAgfX0sCisgezE2LCAweGMxMzAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2NCwweDgxLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweDgxIH19LAorIHsxNiwgMHhjMTQwLCAwLCB7MHgwYywweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4ODEsMHgxOSwweDIwLDB4NDMsMHgwOCwweDExLDB4ODIsMHgwNCB9fSwKKyB7MTYsIDB4YzE1MCwgMCwgezB4NjAsMHg4MSwweDE5LDB4MjAsMHg0NiwweDQ4LDB4MDEsMHg4MCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMxNjAsIDAsIHsweDAwLDB4YzUsMHg2MCwweDA1LDB4NTgsMHgwMSwweDU2LDB4MDAsMHg1NSwweDgwLDB4MTUsMHg2MCwweDA0LDB4NTgsMHgwMSwweDU2IH19LAorIHsxNiwgMHhjMTcwLCAwLCB7MHgwMCwweDQ1LDB4ODAsMHgxMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4MDYsMHgwMCwweDQ1LDB4ODAsMHgxNSwweDYwLDB4MDEsMHg1OCB9fSwKKyB7MTYsIDB4YzE4MCwgMCwgezB4MDEsMHgxNiwweDAwLDB4MDEsMHg4MCwweDE1LDB4NjAsMHgwNSwweDU4LDB4MDEsMHg1NiwweDAwLDB4NTUsMHg4MCwweDA1LDB4NDAgfX0sCisgezE2LCAweGMxOTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDYsMHgwMSwweDQ5LDB4ODAsMHgxMCwweDYwIH19LAorIHsxNiwgMHhjMWEwLCAwLCB7MHgxNCwweDE4LDB4MDUsMHgwNiwweDAxLDB4NzksMHg4MCwweDUwLDB4NjAsMHgxNCwweDE4LDB4MDEsMHgwNiwweDAxLDB4NDEsMHg4MCB9fSwKKyB7MTYsIDB4YzFiMCwgMCwgezB4NTAsMHg2MCwweDA0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg0MSwweDgwLDB4MTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEgfX0sCisgezE2LCAweGMxYzAsIDAsIHsweDQxLDB4ODAsMHg1MCwweDYwLDB4MTQsMHgxOCwweDA1LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMWQwLCAwLCB7MHgwMCwweDgwLDB4MDIsMHgwMSwweDA0LDB4ODAsMHg0MCwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMCwweDA0LDB4MDQsMHg0MCB9fSwKKyB7MTYsIDB4YzFlMCwgMCwgezB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAsMHg4NCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAgfX0sCisgezE2LCAweGMxZjAsIDAsIHsweDgwLDB4NDEsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MTEsMHgwMCwweDgwLDB4NDEsMHgyMCwweDEwLDB4NDgsMHgwNCwweDAwIH19LAorIHsxNiwgMHhjMjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCB9fSwKKyB7MTYsIDB4YzIxMCwgMCwgezB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMiwweDExLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDExLDB4ODAgfX0sCisgezE2LCAweGMyMjAsIDAsIHsweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzIH19LAorIHsxNiwgMHhjMjMwLCAwLCB7MHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MzEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzI0MCwgMCwgezB4MDAsMHhjNSwweDQ2LDB4MDUsMHg3MCwweDgxLDB4NWMsMHg2MCwweDA3LDB4MTgsMHgxNSwweGM2LDB4MDQsMHg3MSwweDgxLDB4MWMgfX0sCisgezE2LCAweGMyNTAsIDAsIHsweDYwLDB4MTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDMxLDB4ODEsMHhkYywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxIH19LAorIHsxNiwgMHhjMjYwLCAwLCB7MHg4MCwweDFjLDB4NjAsMHg3NywweDE4LDB4MTUsMHhjZSwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjMCB9fSwKKyB7MTYsIDB4YzI3MCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg0NiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjEgfX0sCisgezE2LCAweGMyODAsIDAsIHsweDc3LDB4MTgsMHgwZCwweGM2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCwweDM3LDB4MTgsMHgwZCwweGMyLDB4MDMsMHgzMSwweDgwIH19LAorIHsxNiwgMHhjMjkwLCAwLCB7MHg1YywweDYwLDB4MjcsMHgxOCwweDBkLDB4YzYsMHgwMywweDcxLDB4ODAsMHg5YywweDYwLDB4MTcsMHgxOCwweDBkLDB4Y2UsMHgwMyB9fSwKKyB7MTYsIDB4YzJhMCwgMCwgezB4NzEsMHg4MCwweGRjLDB4NjAsMHgzNywweDE4LDB4MGQsMHhjMCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyYjAsIDAsIHsweDAwLDB4NDUsMHg0NiwweDA1LDB4NzUsMHg4MSwweDVjLDB4NjAsMHg3NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzUsMHg4MSwweDVjIH19LAorIHsxNiwgMHhjMmMwLCAwLCB7MHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHgzMSwweDgxLDB4MGMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSB9fSwKKyB7MTYsIDB4YzJkMCwgMCwgezB4ODEsMHg1YywweDYwLDB4NDMsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzAgfX0sCisgezE2LCAweGMyZTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH19LAorIHsxNiwgMHhjMmYwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4YzMwMCwgMCwgezB4NWMsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgwMCwweDE3LDB4MDgsMHgwNCwweDgyLDB4MDEgfX0sCisgezE2LCAweGMzMTAsIDAsIHsweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMzIwLCAwLCB7MHgwMCwweDAwLDB4MDYsMHgwMSwweDYzLDB4ODAsMHg1OCwweDYwLDB4MTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxLDB4ODAsMHg1OCB9fSwKKyB7MTYsIDB4YzMzMCwgMCwgezB4NjAsMHgxNiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEsMHg4MSwweDU4LDB4NjAsMHgxNiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEgfX0sCisgezE2LCAweGMzNDAsIDAsIHsweDgwLDB4NTgsMHg2MCwweDU2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSwweDgwLDB4NTgsMHg2MCwweDE2LDB4MTgsMHgwNSwweDgwIH19LAorIHsxNiwgMHhjMzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDQwLDB4MDUsMHg3MCwweDAxLDB4NWMsMHgwMCB9fSwKKyB7MTYsIDB4YzM2MCwgMCwgezB4MTcsMHgwMCwweDE1LDB4YzAsMHg4NSwweDc0LDB4MDEsMHgxYywweDAwLDB4NDcsMHgwMCwweDExLDB4YzAsMHgwNSwweDcwLDB4MDEgfX0sCisgezE2LCAweGMzNzAsIDAsIHsweDVjLDB4MDAsMHg1MywweDAwLDB4MTAsMHhjMCwweDA1LDB4NzAsMHgwMSwweDVjLDB4MDAsMHg1NywweDAwLDB4MTQsMHhjOSwweDA0IH19LAorIHsxNiwgMHhjMzgwLCAwLCB7MHg3MCwweDAxLDB4MWMsMHgwMCwweDU3LDB4MDAsMHgxNSwweGMwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzM5MCwgMCwgezB4MDAsMHg0NSwweDQyLDB4MDAsMHg2MCwweGMwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTggfX0sCisgezE2LCAweGMzYTAsIDAsIHsweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgxOCwweDMwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgxMCwweDYwIH19LAorIHsxNiwgMHhjM2IwLCAwLCB7MHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDAsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4YzNjMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfX0sCisgezE2LCAweGMzZDAsIDAsIHsweDAyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxIH19LAorIHsxNiwgMHhjM2UwLCAwLCB7MHgwOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCB9fSwKKyB7MTYsIDB4YzNmMCwgMCwgezB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0MDAsIDAsIHsweDAwLDB4NDUsMHg0MiwweDA1LDB4NDAsMHhjNSwweDUwLDB4MjAsMHgxNCwweDA4LDB4MTUsMHgwMCwweDA0LDB4NDAsMHg4MSwweDUwIH19LAorIHsxNiwgMHhjNDEwLCAwLCB7MHgyMCwweDU0LDB4MDgsMHgxMSwweDAyLDB4MDUsMHgwMCwweDgwLDB4MTAsMHgyMCwweDQ1LDB4MGMsMHgxMSwweDQyLDB4MDQsMHg0MCB9fSwKKyB7MTYsIDB4YzQyMCwgMCwgezB4ODEsMHg1MCwweDIwLDB4MTQsMHgwYywweDE1LDB4NDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4NTQsMHgwOCwweDE1LDB4MDAgfX0sCisgezE2LCAweGM0MzAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDMsMHgwMSwweDUwLDB4YzAsMHg0NCwweDMwIH19LAorIHsxNiwgMHhjNDQwLCAwLCB7MHgxNSwweDBjLDB4MDUsMHg0MywweDAxLDB4NTAsMHhjMCwweDRjLDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MywweDIxLDB4NTAsMHhjMCB9fSwKKyB7MTYsIDB4YzQ1MCwgMCwgezB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEsMHg1MCwweGMwLDB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEgfX0sCisgezE2LCAweGM0NjAsIDAsIHsweDUwLDB4YzAsMHg1NCwweDIwLDB4MTUsMHgwYywweDA1LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNDcwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgwNCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgwNCB9fSwKKyB7MTYsIDB4YzQ4MCwgMCwgezB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4MDIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4NDIgfX0sCisgezE2LCAweGM0OTAsIDAsIHsweDAwLDB4MTAsMHg4MCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDAwIH19LAorIHsxNiwgMHhjNGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDQyLDB4MDIsMHgwMCwweDgwLDB4ODQsMHgyMCB9fSwKKyB7MTYsIDB4YzRiMCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHg4NCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAgfX0sCisgezE2LCAweGM0YzAsIDAsIHsweDgwLDB4YTAsMHgyMCwweDI4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAsMHgyMCwweDI4LDB4MDgsMHgwMiwweDAyIH19LAorIHsxNiwgMHhjNGQwLCAwLCB7MHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzRlMCwgMCwgezB4MDAsMHg0NSwweDQwLDB4MDUsMHg2MCwweDQxLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTggfX0sCisgezE2LCAweGM0ZjAsIDAsIHsweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDIwLDB4MDEsMHhkOCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwIH19LAorIHsxNiwgMHhjNTAwLCAwLCB7MHgwMSwweDU4LDB4MDAsMHg3NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCB9fSwKKyB7MTYsIDB4YzUxMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfX0sCisgezE2LCAweGM1MjAsIDAsIHsweDI2LDB4MDAsMHgwZCwweDgwLDB4MDIsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDcsMHg2MCwweDAxIH19LAorIHsxNiwgMHhjNTMwLCAwLCB7MHg1YywweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwLDB4NTcsMHgwMCwweDBkLDB4ODAsMHgwMiB9fSwKKyB7MTYsIDB4YzU0MCwgMCwgezB4NjAsMHgwMCwweDk4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDA0LDB4MzAsMHgyMSwweDBjLDB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAsMHgwMSwweDBjIH19LAorIHsxNiwgMHhjNTYwLCAwLCB7MHgwMCwweDQzLDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCwweDAxLDB4MTgsMHgwMCwweDQzLDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCB9fSwKKyB7MTYsIDB4YzU3MCwgMCwgezB4MDEsMHgwYywweDAwLDB4NDYsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwLDB4MDEsMHgwYywweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAgfX0sCisgezE2LCAweGM1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH19LAorIHsxNiwgMHhjNTkwLCAwLCB7MHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzUsMHgwOCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjNiwweDAwLDB4MTQsMHgwMCB9fSwKKyB7MTYsIDB4YzVhMCwgMCwgezB4MDgsMHgwMCwweDAzLDB4NDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGQsMHg0MCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAgfX0sCisgezE2LCAweGM1YjAsIDAsIHsweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNWMwLCAwLCB7MHgwMCwweDAwLDB4MDUsMHgwMSwweDMxLDB4NDAsMHg0YywweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgwMSwweDMxLDB4YzAsMHg0YyB9fSwKKyB7MTYsIDB4YzVkMCwgMCwgezB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDA1LDB4MzEsMHg0MSwweDRjLDB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEgfX0sCisgezE2LCAweGM1ZTAsIDAsIHsweDQwLDB4NGMsMHg3MCwweDUzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg0MCwweDEzLDB4MTQsMHgwNCwweGMwIH19LAorIHsxNiwgMHhjNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MDUsMHg2OCwweGMxLDB4NWEsMHgzMCB9fSwKKyB7MTYsIDB4YzYwMCwgMCwgezB4NTYsMHg4YywweDE1LDB4YTMsMHgwNSwweDY5LDB4YzEsMHg1YSwweDMwLDB4NDYsMHg4YywweDExLDB4YTcsMHgwMSwweDY4LDB4YzAgfX0sCisgezE2LCAweGM2MTAsIDAsIHsweDFhLDB4MzAsMHg1NiwweDhjLDB4MTEsMHhhMywweDA0LDB4NjgsMHhjMSwweDFhLDB4MzAsMHgxNiwweDhjLDB4MTUsMHhhMywweDA0IH19LAorIHsxNiwgMHhjNjIwLCAwLCB7MHg2OCwweGMxLDB4NWEsMHgzMCwweDU2LDB4OGMsMHgxMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyNCwweDAwLDB4MDggfX0sCisgezE2LCAweGM2NDAsIDAsIHsweDAxLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDI0LDB4MDAsMHgwOCwweDgwLDB4MDIsMHg2MCwweDAwLDB4ODAsMHgwMCwweDIwIH19LAorIHsxNiwgMHhjNjUwLCAwLCB7MHgwMCwweDA5LDB4NDAsMHgwMiwweDIwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4YzY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODQgfX0sCisgezE2LCAweGM2NzAsIDAsIHsweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDA5LDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDg4LDB4NjAsMHg2MiwweDEwIH19LAorIHsxNiwgMHhjNjgwLCAwLCB7MHgxOCwweDA0LDB4NDYsMHgwMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDgwLDB4MDYsMHgwMSwweDExLDB4ODgsMHg0NCB9fSwKKyB7MTYsIDB4YzY5MCwgMCwgezB4NjIsMHgxMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDQ1LDB4NTAsMHgxMSwweDU0LDB4MDQsMHg1NSwweDAxLDB4MTUsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDU0IH19LAorIHsxNiwgMHhjNmIwLCAwLCB7MHgwNCwweDQ1LDB4MDEsMHgxMSwweDQwLDB4NDAsMHg1MCwweDEwLDB4NTQsMHgwNCwweDQ1LDB4MDEsMHgxNSwweDQwLDB4NDQsMHg1MCB9fSwKKyB7MTYsIDB4YzZjMCwgMCwgezB4MTEsMHgxNCwweDAwLDB4MTUsMHgwMSwweDE1LDB4NDAsMHg0NCwweDUwLDB4MTEsMHg1NCwweDA0LDB4NTUsMHgwMCwweDExLDB4NDAgfX0sCisgezE2LCAweGM2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyIH19LAorIHsxNiwgMHhjNmUwLCAwLCB7MHgxNCwweDIwLDB4ODUsMHgwOCwweDIxLDB4NDIsMHgwMCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODUsMHgwOCwweDIwLDB4NDIsMHgwOCB9fSwKKyB7MTYsIDB4YzZmMCwgMCwgezB4NTAsMHg4MiwweDE1LDB4MjAsMHgwNSwweDQ4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4MSwweDQwLDB4MjEgfX0sCisgezE2LCAweGM3MDAsIDAsIHsweDQyLDB4MDgsMHg1MCwweDgyLDB4MTQsMHgyMCwweDg1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNzEwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODQsMHg0MCB9fSwKKyB7MTYsIDB4YzcyMCwgMCwgezB4YTEsMHgxMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgwMCwweDI4LDB4MDAsMHgwYSwweDAxLDB4MDIgfX0sCisgezE2LCAweGM3MzAsIDAsIHsweDgwLDB4NDAsMHhiMCwweDEwLDB4MjgsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDAwIH19LAorIHsxNiwgMHhjNzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCB9fSwKKyB7MTYsIDB4Yzc1MCwgMCwgezB4MzUsMHgzMCwweDBkLDB4NGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgzMCwweDBkLDB4NGMsMHgwMywweDUzLDB4MDAgfX0sCisgezE2LCAweGM3NjAsIDAsIHsweGQ0LDB4YzAsMHgyMSwweDMwLDB4MDgsMHg0YywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MDgsMHg0YywweDAzIH19LAorIHsxNiwgMHhjNzcwLCAwLCB7MHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzc4MCwgMCwgezB4MDAsMHgwMCwweDA4LDB4MDQsMHg3MCwweDAxLDB4NWMsMHg4MCwweDA3LDB4MjAsMHgyNSwweGM5LDB4MDQsMHg3MiwweDAxLDB4NWMgfX0sCisgezE2LCAweGM3OTAsIDAsIHsweDgwLDB4NDcsMHgyMCwweDE1LDB4YzgsMHgwMCwweDcyLDB4MDUsMHhkYywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzgsMHgwNSwweDcyIH19LAorIHsxNiwgMHhjN2EwLCAwLCB7MHgwMSwweDFjLDB4OTAsMHg2NywweDIwLDB4MTUsMHhjOCwweDA1LDB4NzIsMHgwMSwweDFjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjMCB9fSwKKyB7MTYsIDB4YzdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDE4LDB4NDgsMHhjMiwweDEyLDB4MzEgfX0sCisgezE2LCAweGM3YzAsIDAsIHsweDg0LDB4OGMsMHg2MSwweDAzLDB4MTgsMHg0MCwweGM4LDB4MTIsMHgzMSwweDg0LDB4OGMsMHg2MSwweDAzLDB4MTgsMHg0OCwweGM0IH19LAorIHsxNiwgMHhjN2QwLCAwLCB7MHgxMCwweDMxLDB4ODQsMHgwYywweDQxLDB4MjMsMHgxOCwweDQ4LDB4YzYsMHgxMCwweDMwLDB4MDQsMHgwYywweDYxLDB4MjMsMHgxOCB9fSwKKyB7MTYsIDB4YzdlMCwgMCwgezB4NDgsMHhjNiwweDEyLDB4MzAsMHg4NCwweDhjLDB4MjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3ZjAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzIH19LAorIHsxNiwgMHhjODAwLCAwLCB7MHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiB9fSwKKyB7MTYsIDB4YzgxMCwgMCwgezB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGJkLDB4MDAgfX0sCisgezE2LCAweGM4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODYwLCAwLCB7MHgwMCwweDAwLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDA5LDB4MzYsMHhjMiB9fSwKKyB7MTYsIDB4Yzg3MCwgMCwgezB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIgfX0sCisgezE2LCAweGM4ODAsIDAsIHsweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHgyYywweDAwIH19LAorIHsxNiwgMHhjODkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMzLDB4M2MsMHg0YywweGNmLDB4MTMsMHgzMyB9fSwKKyB7MTYsIDB4YzhhMCwgMCwgezB4YzQsMHhjYywweGYxLDB4MzMsMHgzYywweDRkLDB4NGUsMHg5MywweDMzLDB4YzQsMHhjYywweGYxLDB4MmIsMHgzYywweDRjLDB4Y2YgfX0sCisgezE2LCAweGM4YjAsIDAsIHsweDEzLDB4MzMsMHhjNCwweGNjLDB4ZTksMHgzMywweDNjLDB4NGMsMHhjZiwweDEyLDB4YjUsMHhjNCwweGNjLDB4ZjEsMHgzMywweDNjIH19LAorIHsxNiwgMHhjOGMwLCAwLCB7MHg0YywweGNmLDB4MTMsMHgzMywweGM0LDB4Y2QsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzhkMCwgMCwgezB4MDAsMHgwMCwweDNiLDB4N2UsMHg0ZSwweGM3LDB4OTMsMHhiNywweGU0LDB4ZWQsMHhmOSwweDIzLDB4N2UsMHg0ZSwweDQ3LDB4OTMgfX0sCisgezE2LCAweGM4ZTAsIDAsIHsweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2YsMHg3ZSwweDRlLDB4ZGUsMHgxMiwweDM3LDB4ZTQsMHg4ZCwweGY5LDB4M2IsMHg3ZSwweDRlIH19LAorIHsxNiwgMHhjOGYwLCAwLCB7MHhkZiwweDkzLDB4ZjcsMHg4NCwweDhkLDB4ZjksMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjEsMHhlNCwweGVkLDB4YjksMHgwMCB9fSwKKyB7MTYsIDB4YzkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAyLDB4NzAsMHg0MCwweDljLDB4MTEgfX0sCisgezE2LCAweGM5MTAsIDAsIHsweDY3LDB4MDQsMHgxOSwweGMzLDB4MDIsMHg3MCwweDQwLDB4OWMsMHgxMCwweDI3LDB4MDQsMHgwOSwweGMxLDB4MDIsMHg3MCwweDQwIH19LAorIHsxNiwgMHhjOTIwLCAwLCB7MHgxYywweDEwLDB4MjcsMHgxNCwweDAxLDB4YzEsMHgwMiwweDcwLDB4NDAsMHg5YywweDUwLDB4MDcsMHgwNCwweDA5LDB4YzEsMHgwMiB9fSwKKyB7MTYsIDB4YzkzMCwgMCwgezB4NzAsMHg0MCwweDljLDB4MTAsMHg2NywweDE0LDB4MTEsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5NDAsIDAsIHsweDAwLDB4MDAsMHgwNCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjNCwweDA1LDB4NzEsMHgwMSwweDVjIH19LAorIHsxNiwgMHhjOTUwLCAwLCB7MHg0MCwweDU3LDB4MTAsMHgxNSwweGM2LDB4MDUsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxMCwweGM0LDB4MDUsMHg3MSB9fSwKKyB7MTYsIDB4Yzk2MCwgMCwgezB4MDEsMHg1YywweDY0LDB4MDMsMHgxMCwweDU1LDB4YzQsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzAgfX0sCisgezE2LCAweGM5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH19LAorIHsxNiwgMHhjOTgwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjEsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MCwweDAxLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4Yzk5MCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNSwweGMyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyNCwweDE3LDB4MDgsMHgwNCwweDgyLDB4MDEgfX0sCisgezE2LCAweGM5YTAsIDAsIHsweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODQsMHgwMCwweDYwLDB4MDAsMHgxOCB9fSwKKyB7MTYsIDB4YzljMCwgMCwgezB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMSwweDE4LDB4MDAsMHgwNiwweDEwLDB4OTEsMHg4MCwweDAwLDB4NjAgfX0sCisgezE2LCAweGM5ZDAsIDAsIHsweDAwLDB4MTgsMHg0NiwweDQ2LDB4MTgsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MTAsMHgwMSwweDgwIH19LAorIHsxNiwgMHhjOWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHg3MywweDAxLDB4MWMsMHg4MCB9fSwKKyB7MTYsIDB4YzlmMCwgMCwgezB4MDcsMHgyMCwweDAxLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEgfX0sCisgezE2LCAweGNhMDAsIDAsIHsweDFjLDB4ODAsMHg0NywweDIyLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAsMHgwNywweDIwLDB4MTEsMHhjOCwweDA0IH19LAorIHsxNiwgMHhjYTEwLCAwLCB7MHg3MiwweDAxLDB4MWMsMHg4MCwweDA3LDB4MjgsMHgxMSwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2EyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTggfX0sCisgezE2LCAweGNhMzAsIDAsIHsweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwIH19LAorIHsxNiwgMHhjYTQwLCAwLCB7MHgwMCwweDE4LDB4MDAsMHg0NiwweDA0LDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4Y2E1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfX0sCisgezE2LCAweGNhNjAsIDAsIHsweDAyLDB4MjAsMHgwMCwweDkwLDB4MDQsMHgyNywweDgxLDB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDk4LDB4MDQsMHgyNCwweDAxIH19LAorIHsxNiwgMHhjYTcwLCAwLCB7MHgwOCwweDgwLDB4NDIsMHg0OCwweDEwLDB4ODgsMHgwNCwweDIyLDB4MDEsMHgwOSwweDQwLDB4NDIsMHg2MCwweDEwLDB4ODgsMHgwNCB9fSwKKyB7MTYsIDB4Y2E4MCwgMCwgezB4MjIsMHgwMSwweDA4LDB4YzAsMHgwMiwweDQwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhOTAsIDAsIHsweDAwLDB4MDAsMHgyYSwweDA0LDB4NGIsMHg4MSwweDEyLDB4YTAsMHgwNCwweGE4LDB4MDEsMHgyYSwweDA0LDB4NGEsMHg4MSwweDEyIH19LAorIHsxNiwgMHhjYWEwLCAwLCB7MHhhMCwweDQ0LDB4YTgsMHgxMSwweDJhLDB4MDQsMHg0OCwweDgwLDB4MTIsMHhhMCwweDQ0LDB4ODgsMHgwMSwweDJhLDB4MDQsMHg0YSB9fSwKKyB7MTYsIDB4Y2FiMCwgMCwgezB4ODEsMHgxMiwweDIwLDB4MDQsMHhhYywweDExLDB4MmEsMHgwNCwweDRhLDB4ODEsMHgxMiwweGIwLDB4NDQsMHg5YywweDExLDB4MDAgfX0sCisgezE2LCAweGNhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4MGMsMHgwMCwweDUzLDB4MDAsMHgxNCwweGMwIH19LAorIHsxNiwgMHhjYWQwLCAwLCB7MHgwNSwweDMwLDB4MDEsMHg0NCwweDAwLDB4NTMsMHgwMCwweDE0LDB4YzAsMHgwNSwweDMwLDB4MDQsMHgwYywweDAwLDB4NTMsMHgwMCB9fSwKKyB7MTYsIDB4Y2FlMCwgMCwgezB4MTQsMHhjMCwweDA1LDB4YjAsMHgwMSwweDRjLDB4MDAsMHg1MywweDAwLDB4MTYsMHhjMCwweDAxLDB4MzAsMHgwMSwweDRjLDB4MDAgfX0sCisgezE2LCAweGNhZjAsIDAsIHsweDUzLDB4MDAsMHgxNCwweGMwLDB4MDEsMHgzOCwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYjAwLCAwLCB7MHgwOCwweGMwLDB4MDAsMHgxMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MTAsMHgwMCwweDQ0LDB4ODAsMHgxMCB9fSwKKyB7MTYsIDB4Y2IxMCwgMCwgezB4MDAsMHgwNCwweDAwLDB4MDEsMHgxMCwweDAwLDB4NDYsMHgwMCwweDAwLDB4MDAsMHgwNCwweDYwLDB4MDEsMHgwMCwweDAwLDB4NDAgfX0sCisgezE2LCAweGNiMjAsIDAsIHsweDAwLDB4MTEsMHg2MCwweDAyLDB4NDAsMHgwMSwweDAwLDB4MTAsMHg0MCwweDAwLDB4MTAsMHg2MCwweDAxLDB4NTAsMHgxMCwweDQwIH19LAorIHsxNiwgMHhjYjMwLCAwLCB7MHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhjMCwweDQwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4Y2I0MCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDgsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiNTAsIDAsIHsweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyIH19LAorIHsxNiwgMHhjYjYwLCAwLCB7MHgwMCwweDAwLDB4ODAsMHgwMCwweDIxLDB4MDAsMHgwOCwweDQwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2I3MCwgMCwgezB4MDgsMHhjMCwweDQwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTggfX0sCisgezE2LCAweGNiODAsIDAsIHsweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHhjOCwweDAwLDB4NDYsMHgwMCwweDE5LDB4ODAsMHgwMCwweDYwIH19LAorIHsxNiwgMHhjYjkwLCAwLCB7MHgwMCwweDE4LDB4MDAsMHg2NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHgwNiwweDAwLDB4MTEsMHg4MCB9fSwKKyB7MTYsIDB4Y2JhMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDEsMHgwMCwweDAyLDB4NjAsMHgwMCwweDk4LDB4MDAgfX0sCisgezE2LCAweGNiYjAsIDAsIHsweDI2LDB4MDAsMHgwOSwweDgxLDB4MDIsMHg2MCwweDAxLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgwOSwweDgwLDB4MDYsMHg2MiwweDAwIH19LAorIHsxNiwgMHhjYmMwLCAwLCB7MHg0OCwweDAwLDB4MjYsMHgyMCwweDAxLDB4YzAsMHgwMiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MDcsMHgwMCwweDA5LDB4ODAsMHgwMiB9fSwKKyB7MTYsIDB4Y2JkMCwgMCwgezB4NjAsMHgwMCwweDk4LDB4MDAsMHgyNiwweDAwLDB4MTEsMHg4MiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiZTAsIDAsIHsweDQwLDB4NDUsMHg0MiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4NSwweDhjIH19LAorIHsxNiwgMHhjYmYwLCAwLCB7MHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4NDgsMHgxMSwweDgyLDB4MDQsMHgzMCB9fSwKKyB7MTYsIDB4Y2MwMCwgMCwgezB4ODEsMHg4ZCwweDIwLDB4NDYsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwYywweDEwLDB4YzAgfX0sCisgezE2LCAweGNjMTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH19LAorIHsxNiwgMHhjYzIwLCAwLCB7MHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MTAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCB9fSwKKyB7MTYsIDB4Y2MzMCwgMCwgezB4MDgsMHgwMCwweDAzLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHg4MCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAgfX0sCisgezE2LCAweGNjNDAsIDAsIHsweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgyMCwweDAwLDB4YzAsMHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYzUwLCAwLCB7MHg0MCwweDAwLDB4MDIsMHgwMCwweDMwLDB4ODAsMHgwYywweDIxLDB4MDMsMHgwOCwweDAwLDB4YzIsMHgwMCwweDMwLDB4ODAsMHgwYyB9fSwKKyB7MTYsIDB4Y2M2MCwgMCwgezB4MjAsMHgwMywweDA4LDB4MDAsMHhjMiwweDA0LDB4MzAsMHhjMSwweDBjLDB4MjAsMHgwMywweDBjLDB4MTAsMHhjMiwweDAwLDB4MzAgfX0sCisgezE2LCAweGNjNzAsIDAsIHsweDgwLDB4MGMsMHhiMCwweDQzLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgyMCwweDAzLDB4MjgsMHgxMCwweGMwIH19LAorIHsxNiwgMHhjYzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCB9fSwKKyB7MTYsIDB4Y2M5MCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwMCwweDYwLDB4ODEgfX0sCisgezE2LCAweGNjYTAsIDAsIHsweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MTEsMHg4MiwweDA0IH19LAorIHsxNiwgMHhjY2IwLCAwLCB7MHg2MCwweDgxLDB4MTgsMHgyMCwweDQ2LDB4MGMsMHgxMSwweGMwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2NjMCwgMCwgezB4NDAsMHgwMSwweDQyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDggfX0sCisgezE2LCAweGNjZDAsIDAsIHsweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwYywweDIwLDB4MDIsMHgwOCwweDAwLDB4YzIsMHgwMCwweDIwIH19LAorIHsxNiwgMHhjY2UwLCAwLCB7MHg4MCwweDA4LDB4MjAsMHg0MiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4Y2NmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDEsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfX0sCisgezE2LCAweGNkMDAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweGMxIH19LAorIHsxNiwgMHhjZDEwLCAwLCB7MHgwYywweDIwLDB4NDYsMHgwYywweDEwLDB4YzIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDMwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCB9fSwKKyB7MTYsIDB4Y2QyMCwgMCwgezB4NjAsMHg4MSwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTAsMHg4MCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNkMzAsIDAsIHsweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDAsMHg0NSwweDAwLDB4MTEsMHg0MCwweDA0LDB4NTAsMHgwMCwweDE0IH19LAorIHsxNiwgMHhjZDQwLCAwLCB7MHgwMCwweDQ1LDB4MDAsMHgxMSwweDQwLDB4MDAsMHg1MCwweDAwLDB4MDQsMHgwMCwweDQ1LDB4MDAsMHgwMCwweDQwLDB4MDQsMHg1MCB9fSwKKyB7MTYsIDB4Y2Q1MCwgMCwgezB4MDAsMHgxNCwweDAwLDB4MDEsMHgwMCwweDExLDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDAwLDB4NDUsMHgwMCwweDAwLDB4NDIgfX0sCisgezE2LCAweGNkNjAsIDAsIHsweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwIH19LAorIHsxNiwgMHhjZDcwLCAwLCB7MHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCB9fSwKKyB7MTYsIDB4Y2Q4MCwgMCwgezB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAgfX0sCisgezE2LCAweGNkOTAsIDAsIHsweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZGEwLCAwLCB7MHg0OCwweDAwLDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIxLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCB9fSwKKyB7MTYsIDB4Y2RiMCwgMCwgezB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwLDB4MjEsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAgfX0sCisgezE2LCAweGNkYzAsIDAsIHsweDgwLDB4NDAsMHgzMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MTEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgxNCwweDAwIH19LAorIHsxNiwgMHhjZGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCB9fSwKKyB7MTYsIDB4Y2RlMCwgMCwgezB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAgfX0sCisgezE2LCAweGNkZjAsIDAsIHsweGQ0LDB4NjAsMHgzNSwweDEwLDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NDAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzIH19LAorIHsxNiwgMHhjZTAwLCAwLCB7MHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2UxMCwgMCwgezB4MDAsMHgwMSwweDQ2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDA3LDB4MTgsMHgxMSwweGNlLDB4MDQsMHg3MSwweDgxLDB4MWMgfX0sCisgezE2LCAweGNlMjAsIDAsIHsweDYwLDB4NDcsMHgxOCwweDAxLDB4YzYsMHgwNCwweDcxLDB4ODEsMHg5YywweDYwLDB4NDcsMHgxOCwweDE5LDB4YzYsMHgwNCwweDcxIH19LAorIHsxNiwgMHhjZTMwLCAwLCB7MHg4MCwweDFjLDB4NjAsMHg2NywweDE4LDB4MTEsMHhjNiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAsMHg0NywweDE4LDB4MTEsMHhjMCB9fSwKKyB7MTYsIDB4Y2U0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHg0NiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAgfX0sCisgezE2LCAweGNlNTAsIDAsIHsweDI3LDB4MTgsMHgwOSwweGM2LDB4MDYsMHg3MSwweDgwLDB4MWMsMHg2MCwweDI3LDB4MTgsMHgwOSwweGM2LDB4MDEsMHgzMSwweDgwIH19LAorIHsxNiwgMHhjZTYwLCAwLCB7MHgxYywweDYwLDB4MDcsMHgxOCwweDA5LDB4YzYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwLDB4MDcsMHgxOCwweDA5LDB4YzYsMHgxMiB9fSwKKyB7MTYsIDB4Y2U3MCwgMCwgezB4NzEsMHg4MCwweDljLDB4NjAsMHgzMywweDE4LDB4MDEsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlODAsIDAsIHsweDUwLDB4NDUsMHg0NiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MCwweDVjIH19LAorIHsxNiwgMHhjZTkwLCAwLCB7MHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDEsMHgzMSwweDgxLDB4MGMsMHg2MCwweDE3LDB4MTgsMHgxMCwweGM2LDB4MDUsMHg3MSB9fSwKKyB7MTYsIDB4Y2VhMCwgMCwgezB4ODEsMHg1YywweDYwLDB4MDMsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTMsMHgxOCwweDE4LDB4ODIgfX0sCisgezE2LCAweGNlYjAsIDAsIHsweDEwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQwLDB4MTIsMHgwMSwweDI0LDB4ODAsMHg0OCwweDIwIH19LAorIHsxNiwgMHhjZWMwLCAwLCB7MHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjQsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4Y2VkMCwgMCwgezB4NTgsMHgyMCwweDUyLDB4MGMsMHgwNSwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDksMHgyMCwweDAyLDB4MDgsMHgwNCwweDgyLDB4MDEgfX0sCisgezE2LCAweGNlZTAsIDAsIHsweDIwLDB4ODAsMHg0OSwweDIwLDB4MTIsMHg0OCwweDA0LDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZWYwLCAwLCB7MHg0MCwweDA0LDB4MDYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwLDB4MDYsMHgxOCwweDAxLDB4ODYsMHgwNCwweDYxLDB4ODAsMHgxOCB9fSwKKyB7MTYsIDB4Y2YwMCwgMCwgezB4NjAsMHgwNiwweDE4LDB4MDEsMHg4NiwweDAwLDB4NjEsMHg4MSwweDQ4LDB4NjAsMHgwNiwweDE4LDB4MTQsMHg4NiwweDAwLDB4NjEgfX0sCisgezE2LCAweGNmMTAsIDAsIHsweDgwLDB4MTgsMHg2MCwweDQyLDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDA2LDB4MTgsMHgwMCwweDgwIH19LAorIHsxNiwgMHhjZjIwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NSwweDYwLDB4MDQsMHg3OCwweDAxLDB4MWUsMHgwMCB9fSwKKyB7MTYsIDB4Y2YzMCwgMCwgezB4NDcsMHg4MCwweDExLDB4ZTgsMHgwMCwweDc4LDB4MDEsMHgxZSwweDAwLDB4NDcsMHg4MCwweDExLDB4ZTAsMHgwNCwweDc4LDB4MDEgfX0sCisgezE2LCAweGNmNDAsIDAsIHsweDFlLDB4MDAsMHg0MywweDgwLDB4MTEsMHhlMCwweDA0LDB4NzgsMHgwMSwweDFlLDB4MDAsMHgwMywweDgwLDB4MTUsMHhlMCwweDA0IH19LAorIHsxNiwgMHhjZjUwLCAwLCB7MHg3OCwweDAxLDB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGMwLDB4MTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2Y2MCwgMCwgezB4NDAsMHgwMSwweDEyLDB4MDAsMHg2NCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2NCwweDgwLDB4MTggfX0sCisgezE2LCAweGNmNzAsIDAsIHsweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDMwLDB4MDIsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwIH19LAorIHsxNiwgMHhjZjgwLCAwLCB7MHg4MCwweDE5LDB4MzAsMHg0MiwweDA4LDB4MDAsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE5LDB4MjAsMHgwNiwweDQ4LDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4Y2Y5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfX0sCisgezE2LCAweGNmYTAsIDAsIHsweDQyLDB4MDgsMHgxMCwweDgyLDB4MDAsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxIH19LAorIHsxNiwgMHhjZmIwLCAwLCB7MHgwOCwweDIwLDB4NDYsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCB9fSwKKyB7MTYsIDB4Y2ZjMCwgMCwgezB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNmZDAsIDAsIHsweDQwLDB4NDUsMHg0MiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAsMHg0NCwweDA4LDB4MTEsMHgwMiwweDAwLDB4NDAsMHg4MSwweDEwIH19LAorIHsxNiwgMHhjZmUwLCAwLCB7MHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDQsMHg0MCwweDgwLDB4MTAsMHgyMCwweDQ1LDB4MDgsMHgwMSwweDAyLDB4MDQsMHg0MCB9fSwKKyB7MTYsIDB4Y2ZmMCwgMCwgezB4ODEsMHgxMCwweDIxLDB4MDAsMHgwYywweDExLDB4MDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4NDQsMHgwOCwweDAxLDB4MDAgfX0sCisgezE2LCAweGQwMDAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwIH19LAorIHsxNiwgMHhkMDEwLCAwLCB7MHgwNSwweDBjLDB4MDEsMHg0MywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MywweDAwLDB4NTAsMHhjMCB9fSwKKyB7MTYsIDB4ZDAyMCwgMCwgezB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAgfX0sCisgezE2LCAweGQwMzAsIDAsIHsweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMDQwLCAwLCB7MHg0MCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MDQsMHgxMCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDksMHgwMCwweDQyLDB4MDEsMHgxMCB9fSwKKyB7MTYsIDB4ZDA1MCwgMCwgezB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIgfX0sCisgezE2LCAweGQwNjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgxMSwweDAwIH19LAorIHsxNiwgMHhkMDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgyMCB9fSwKKyB7MTYsIDB4ZDA4MCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHgwMCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMCwweDAwLDB4ODAgfX0sCisgezE2LCAweGQwOTAsIDAsIHsweDgwLDB4YTAsMHgwMCwweDBhLDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MzQsMHg2MiwweDI4LDB4MDgsMHgwMiwweDAyIH19LAorIHsxNiwgMHhkMGEwLCAwLCB7MHgwMCwweDgwLDB4ODAsMHgzMCwweDIwLDB4MGMsMHgwOCwweDAwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDBiMCwgMCwgezB4NDAsMHgwMSwweDQwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAzLDB4MTggfX0sCisgezE2LCAweGQwYzAsIDAsIHsweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNiwweDYwLDB4MDEsMHg5OCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwIH19LAorIHsxNiwgMHhkMGQwLCAwLCB7MHgwMSwweDE4LDB4MDAsMHg2NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCB9fSwKKyB7MTYsIDB4ZDBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMCwweDAyLDB4NjAsMHgwMCwweDk4LDB4MDAgfX0sCisgezE2LCAweGQwZjAsIDAsIHsweDI2LDB4MDAsMHgwOSwweDgwLDB4MDIsMHg2NCwweDAwLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgxOSwweDkwLDB4MDIsMHg2MCwweDAwIH19LAorIHsxNiwgMHhkMTAwLCAwLCB7MHgxZCwweDAwLDB4MjYsMHgwMCwweDAxLDB4YzAsMHgwMiwweDYwLDB4MDAsMHg5OSwweDAwLDB4MDYsMHg0MCwweDE5LDB4ODAsMHgwMiB9fSwKKyB7MTYsIDB4ZDExMCwgMCwgezB4NjAsMHgwMCwweDk4LDB4MDAsMHg2NiwweDAwLDB4MDEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxMjAsIDAsIHsweDQwLDB4NDUsMHg2MCwweDA0LDB4MzgsMHgwMSwweDBlLDB4MDAsMHg0MywweDgwLDB4MTAsMHhlMCwweDA0LDB4MzgsMHgwMSwweDBlIH19LAorIHsxNiwgMHhkMTMwLCAwLCB7MHgwMCwweDQzLDB4ODAsMHgxMCwweGUwLDB4MDQsMHgzOCwweDAxLDB4MWEsMHgwMCwweDQzLDB4ODAsMHgxMSwweGEwLDB4MDQsMHgzOCB9fSwKKyB7MTYsIDB4ZDE0MCwgMCwgezB4MDEsMHgwZSwweDAwLDB4MDIsMHg4MCwweDQwLDB4ZTAsMHgwNCwweDM4LDB4MDEsMHgwZSwweDAwLDB4NDMsMHg4MCwweDE4LDB4ODAgfX0sCisgezE2LCAweGQxNTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDA0LDB4MDEsMHgwMCwweDMwLDB4NDAsMHgwYywweDEwIH19LAorIHsxNiwgMHhkMTYwLCAwLCB7MHgwMywweDA0LDB4MDAsMHhjOSwweDAwLDB4MzAsMHg0MCwweDBjLDB4MTAsMHgwMywweDA0LDB4MDAsMHhjMSwweDAwLDB4MzAsMHg0MCB9fSwKKyB7MTYsIDB4ZDE3MCwgMCwgezB4MDgsMHgxMCwweDAzLDB4MDQsMHgwMCwweDgxLDB4MDAsMHgzMCwweDQwLDB4MGMsMHg3OCwweDAyLDB4MTQsMHgwMCwweGMxLDB4MDAgfX0sCisgezE2LCAweGQxODAsIDAsIHsweDMwLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwNCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMTkwLCAwLCB7MHg0MCwweDAwLDB4MDUsMHgwMCwweDMxLDB4NDAsMHgwYywweDUwLDB4MDMsMHgxNCwweDAwLDB4YzUsMHgwMCwweDM1LDB4NDAsMHgwYyB9fSwKKyB7MTYsIDB4ZDFhMCwgMCwgezB4NTAsMHgwMywweDE0LDB4MTAsMHhkNSwweDAwLDB4MzEsMHg0MSwweDBkLDB4NTAsMHgwMywweDE0LDB4MTAsMHhjNSwweDAwLDB4MzEgfX0sCisgezE2LCAweGQxYjAsIDAsIHsweDQwLDB4MGQsMHg0OCwweDQzLDB4NTQsMHgxMCwweGM1LDB4MDAsMHgzMSwweDQwLDB4MGMsMHg0MCwweDQzLDB4MTAsMHgwMCwweGMyIH19LAorIHsxNiwgMHhkMWMwLCAwLCB7MHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDQzLDB4MDQsMHg2MCwweGMxLDB4MTgsMHgzMCB9fSwKKyB7MTYsIDB4ZDFkMCwgMCwgezB4NDYsMHgwYywweDExLDB4ODMsMHgwNCwweDYxLDB4YzEsMHgxOCwweDMwLDB4NDYsMHgwYywweDAxLDB4ODcsMHgwNCwweDYwLDB4YzEgfX0sCisgezE2LCAweGQxZTAsIDAsIHsweDE4LDB4MzAsMHg0NiwweDA4LDB4MTEsMHg4MywweDA0LDB4NjAsMHhjMSwweDE4LDB4MjAsMHgwNiwweDBjLDB4MDEsMHg4MywweDA0IH19LAorIHsxNiwgMHhkMWYwLCAwLCB7MHg2MCwweGMxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgxMSwweDgwLDB4MTAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDIwMCwgMCwgezB4NDAsMHgwMSwweDQwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDggfX0sCisgezE2LCAweGQyMTAsIDAsIHsweDAwLDB4MDIsMHgwMCwweDAwLDB4ODEsMHgwMCwweDIwLDB4MDAsMHgwOCwweDgwLDB4MDIsMHgwMCwweDAwLDB4YzAsMHgwMCwweDIwIH19LAorIHsxNiwgMHhkMjIwLCAwLCB7MHgwMCwweDA4LDB4NDAsMHg0MywweDMwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4ZDIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0OCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODQgfX0sCisgezE2LCAweGQyNDAsIDAsIHsweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MywweDAxLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgwMSwweDg4LDB4MDQsMHg2MiwweDExIH19LAorIHsxNiwgMHhkMjUwLCAwLCB7MHgxOCwweDA0LDB4NDYsMHgyMSwweDEwLDB4YzgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDA1LDB4NDMsMHgwMSwweDgxLDB4ODgsMHg0NCB9fSwKKyB7MTYsIDB4ZDI2MCwgMCwgezB4NjIsMHgxMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyNzAsIDAsIHsweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDQsMHg0NSwweDAxLDB4MTEsMHg0MCwweDQ0LDB4NTAsMHgwMSwweDE0IH19LAorIHsxNiwgMHhkMjgwLCAwLCB7MHgwNCwweDQ1LDB4MDEsMHgwMSwweDQwLDB4NDUsMHgwMCwweDEwLDB4MTQsMHgwNCwweDQ1LDB4MDMsMHgwMCwweDQwLDB4NDQsMHg1MCB9fSwKKyB7MTYsIDB4ZDI5MCwgMCwgezB4MTEsMHgxNCwweDA0LDB4MDEsMHgwNSwweDQxLDB4NDAsMHg0NCwweDUwLDB4MTEsMHgxNCwweDA0LDB4MDUsMHgwMSwweDAxLDB4NDAgfX0sCisgezE2LCAweGQyYTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyIH19LAorIHsxNiwgMHhkMmIwLCAwLCB7MHgwNCwweDIwLDB4ODEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDAwLDB4NDIsMHgwOCB9fSwKKyB7MTYsIDB4ZDJjMCwgMCwgezB4MTAsMHg4MiwweDA1LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4YSwweDA1LDB4MjAsMHgwNSwweDA4LDB4MjAgfX0sCisgezE2LCAweGQyZDAsIDAsIHsweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMiwweDgxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMmUwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MDIsMHgwMSwweDAyLDB4ODAsMHg0MCB9fSwKKyB7MTYsIDB4ZDJmMCwgMCwgezB4YTAsMHgxMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgwMCwweDI5LDB4MDQsMHgwYSwweDAxLDB4MDIgfX0sCisgezE2LCAweGQzMDAsIDAsIHsweDgwLDB4NDAsMHhhNCwweDAwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhOCwweDEwLDB4MmIsMHgxNCwweDAwIH19LAorIHsxNiwgMHhkMzEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0NSwweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkMCB9fSwKKyB7MTYsIDB4ZDMyMCwgMCwgezB4MzUsMHgzNCwweDBkLDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwLDB4MzUsMHgzNCwweDBkLDB4NGQsMHgwMywweDUzLDB4NDAgfX0sCisgezE2LCAweGQzMzAsIDAsIHsweGQ0LDB4ZDAsMHgyMSwweDM0LDB4NGQsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDksMHg2MSwweDM0LDB4MDQsMHgwZCwweDAzIH19LAorIHsxNiwgMHhkMzQwLCAwLCB7MHg1MywweDQwLDB4YzAsMHhkOCwweDM1LDB4MzcsMHgwZCwweDQwLDB4MTEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDM1MCwgMCwgezB4NDAsMHgwMSwweDQ4LDB4MDQsMHg3MiwweDAwLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMgfX0sCisgezE2LCAweGQzNjAsIDAsIHsweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDAsMHg5YywweDgwLDB4NDcsMHgyMCwweDE5LDB4YzgsMHgwMCwweDcyIH19LAorIHsxNiwgMHhkMzcwLCAwLCB7MHgwMSwweDFjLDB4ODgsMHg2NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDVjLDB4ODIsMHg0NywweDIyLDB4MTEsMHhjMCB9fSwKKyB7MTYsIDB4ZDM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA4LDB4NDgsMHhjMiwweDEyLDB4MzEgfX0sCisgezE2LCAweGQzOTAsIDAsIHsweDg0LDB4OGMsMHg2MSwweDIzLDB4MTAsMHg0MCwweGMwLDB4MTIsMHgzMSwweDg0LDB4OGMsMHg2MSwweDAzLDB4MTAsMHg0OCwweGM0IH19LAorIHsxNiwgMHhkM2EwLCAwLCB7MHgxMCwweDMxLDB4ODQsMHg4YywweDQxLDB4MjMsMHgxOCwweDQ4LDB4YzYsMHgxMCwweDMwLDB4MDQsMHgwYywweDQxLDB4MjMsMHgxOCB9fSwKKyB7MTYsIDB4ZDNiMCwgMCwgezB4NDgsMHhjNiwweDEyLDB4MzAsMHg4NCwweDhjLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzYzAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzIH19LAorIHsxNiwgMHhkM2QwLCAwLCB7MHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiB9fSwKKyB7MTYsIDB4ZDNlMCwgMCwgezB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGRkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4MDAgfX0sCisgezE2LCAweGQzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDMwLCAwLCB7MHgwMCwweDAwLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiB9fSwKKyB7MTYsIDB4ZDQ0MCwgMCwgezB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIgfX0sCisgezE2LCAweGQ0NTAsIDAsIHsweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg0YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDAwIH19LAorIHsxNiwgMHhkNDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMzLDB4NWMsMHg0YywweGQ3LDB4MTMsMHgzMyB9fSwKKyB7MTYsIDB4ZDQ3MCwgMCwgezB4YzQsMHhjYywweGYxLDB4MzMsMHgzYSwweDRhLDB4ZDYsMHg5MywweDMzLDB4YzQsMHhjYywweGYxLDB4MmIsMHgzYSwweDRjLDB4Y2YgfX0sCisgezE2LCAweGQ0ODAsIDAsIHsweDEzLDB4MzMsMHhjNCwweGNjLDB4ZTksMHgzMywweDNjLDB4NGMsMHhjZiwweDEyLDB4YjUsMHhhNCwweGFjLDB4YzksMHgzMywweDNjIH19LAorIHsxNiwgMHhkNDkwLCAwLCB7MHg0YywweGNmLDB4MTMsMHgzNSwweGM0LDB4Y2QsMHg2OSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDRhMCwgMCwgezB4MDAsMHgwMCwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMsMHhiNywweGU0LDB4ZWQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMgfX0sCisgezE2LCAweGQ0YjAsIDAsIHsweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4ZGUsMHgxMiwweDM3LDB4ZTQsMHhlZCwweGUxLDB4M2IsMHg3ZSwweDRlIH19LAorIHsxNiwgMHhkNGMwLCAwLCB7MHhkZiwweDkyLDB4MzEsMHg4NCwweDhkLDB4ZDksMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjEsMHhlNCwweGVjLDB4NjEsMHgwMCB9fSwKKyB7MTYsIDB4ZDRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4MDQsMHhhMSwweDgzLDB4MmMgfX0sCisgezE2LCAweGQ0ZTAsIDAsIHsweDAzLDB4MGEsMHgxMCwweDgyLDB4YzEsMHgzNCwweDEwLDB4OGYsMHgwMCwweDQwLDB4MDksMHgxNCwweDAyLDB4MDMsMHgxNCwweDkxIH19LAorIHsxNiwgMHhkNGYwLCAwLCB7MHgwMCwweDA4LDB4NDIsMHgwYiwweDE4LDB4ODIsMHhjNCwweDAwLDB4MzEsMHhjYSwweDBjLDB4NTIsMHgwMiwweDEwLDB4ODAsMHg4NSB9fSwKKyB7MTYsIDB4ZDUwMCwgMCwgezB4MDAsMHgyMSwweDgyLDB4MjgsMHg0MCwweDBhLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1MTAsIDAsIHsweDAwLDB4MDAsMHgwYSwweDA0LDB4MDIsMHgwMSwweDQwLDB4ODAsMHg3MywweDI4LDB4MTAsMHg0OCwweDA3LDB4MDYsMHgwMSwweDA0IH19LAorIHsxNiwgMHhkNTIwLCAwLCB7MHhhNCwweDQxLDB4MjEsMHgxNCwweDA4LDB4NDQsMHgwNiwweDExLDB4NDAsMHg4MCwweDcwLDB4MjAsMHgxNCwweDBhLDB4MDQsMHgwMiB9fSwKKyB7MTYsIDB4ZDUzMCwgMCwgezB4MDAsMHhjOCwweDg0LDB4NDEsMHgyMSwweDFjLDB4MDgsMHgwNiwweDEyLDB4MDEsMHhjMCwweDgwLDB4NjAsMHgyMCwweDE0LDB4MDAgfX0sCisgezE2LCAweGQ1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4NCwweDA0LDB4MjEsMHg4MiwweDA4IH19LAorIHsxNiwgMHhkNTUwLCAwLCB7MHg1MywweDAyLDB4MTAsMHg4MCwweGM1LDB4MDAsMHg4MSwweDRhLDB4MDQsMHg0MiwweDAyLDB4MTQsMHgwMCwweDA0LDB4MjAsMHgyMSB9fSwKKyB7MTYsIDB4ZDU2MCwgMCwgezB4ODAsMHhhOCwweDcyLDB4MjIsMHgxYywweDg4LDB4YzQsMHgwNiwweGExLDB4NDIsMHg4YywweDUyLDB4MjIsMHgxYywweDg4LDB4ODUgfX0sCisgezE2LCAweGQ1NzAsIDAsIHsweDI2LDB4MjEsMHhjMCwweDg4LDB4NTAsMHgyMiwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNTgwLCAwLCB7MHgwMCwweDAwLDB4MDIsMHg0NCwweDAwLDB4MDEsMHgwMSwweDAwLDB4NjIsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMSB9fSwKKyB7MTYsIDB4ZDU5MCwgMCwgezB4MjAsMHg0MCwweDAwLDB4MWMsMHgwMCwweDQ0LDB4MDQsMHgwMSwweDAyLDB4MjAsMHg2MiwweDAwLDB4MWMsMHg4MCwweDA0LDB4MDQgfX0sCisgezE2LCAweGQ1YTAsIDAsIHsweDgwLDB4ODksMHgyMCwweDUwLDB4MDgsMHgxNCwweDgwLDB4MDQsMHgyNCwweDAxLDB4YzEsMHgwMCwweDUwLDB4MDAsMHgxOCwweDAwIH19LAorIHsxNiwgMHhkNWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgzOCwweDIwLDB4MDQsMHgwYyB9fSwKKyB7MTYsIDB4ZDVjMCwgMCwgezB4MzEsMHgwYSwweDAwLDB4MDAsMHgwMiwweDE4LDB4MjAsMHg4YywweGE4LDB4MTAsMHgyOCwweDA4LDB4ODgsMHhjMSwweDE0LDB4MTAgfX0sCisgezE2LCAweGQ1ZDAsIDAsIHsweGM2LDB4MDAsMHgyMiwweDAzLDB4MDgsMHgwMiwweDAxLDB4MDgsMHhiMCwweDAwLDB4MGMsMHgyMSwweDAyLDB4MDAsMHg4MiwweDgwIH19LAorIHsxNiwgMHhkNWUwLCAwLCB7MHgwOCwweDAwLDB4NDksMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDgwLDB4MDgsMHgyMCwweDAzLDB4MDAsMHgwNCwweDAyLDB4NDMsMHgyMCwweDAwLDB4NDAgfX0sCisgezE2LCAweGQ2MDAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDA0LDB4NDIsMHgwMSwweDEwLDB4ODAsMHg4NCwweDIwLDB4MTEsMHgwOCwweDA0LDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNjEwLCAwLCB7MHgwMCwweDQ0LDB4MjQsMHgyMCwweDA5LDB4MDgsMHg0MCwweDAzLDB4MDAsMHg5MCwweGM0LDB4MjAsMHgyMCwweDA4LDB4MGMsMHgwMiB9fSwKKyB7MTYsIDB4ZDYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDgxLDB4MDgsMHgyMCwweDA0LDB4ODggfX0sCisgezE2LCAweGQ2MzAsIDAsIHsweDAyLDB4MjIsMHgwOCwweDA4LDB4YzMsMHgyYSwweDkwLDB4NDAsMHg4NCwweDEwLDB4MjAsMHgwNCwweDgwLDB4YzIsMHgyNiwweDIwIH19LAorIHsxNiwgMHhkNjQwLCAwLCB7MHg0OSwweDg4LDB4MjIsMHgyMiwweDBjLDB4MDgsMHhjMSwweDI2LDB4YTAsMHhjOSwweDhjLDB4MTIsMHgyYSwweDA0LDB4ODgsMHg0MyB9fSwKKyB7MTYsIDB4ZDY1MCwgMCwgezB4MGUsMHhhMCwweGNiLDB4ODgsMHgxMCwweDIyLDB4MGMsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2NjAsIDAsIHsweDA4LDB4MDAsMHgwYSwweDQwLDB4MzIsMHgwMCwweDAxLDB4ODAsMHgzMSwweDI4LDB4MDAsMHgwMCwweDAxLDB4MTIsMHg4MCwweDhkIH19LAorIHsxNiwgMHhkNjcwLCAwLCB7MHg4NCwweDAwLDB4MjgsMHgwYywweDA4LDB4MDEsMHgzMiwweDAwLDB4OGMsMHg4MCwweDAyLDB4MjAsMHgwYywweDA4LDB4MDEsMHgyZSB9fSwKKyB7MTYsIDB4ZDY4MCwgMCwgezB4MDAsMHhjMywweDgwLDB4MDIsMHgyMCwweDA0LDB4MDgsMHg0MywweDAyLDB4MDAsMHg0MCwweDgwLDB4MTAsMHgyMCwweDA0LDB4MDIgfX0sCisgezE2LCAweGQ2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHg4NywweDBhLDB4MjEsMHgwNCwweDg4IH19LAorIHsxNiwgMHhkNmEwLCAwLCB7MHgxMSwweDJhLDB4MWMsMHgwYSwweDA2LDB4MjIsMHgyMSwweDQwLDB4YTAsMHg0MiwweDJhLDB4MTAsMHg4OCwweDg1LDB4MGEsMHhhMSB9fSwKKyB7MTYsIDB4ZDZiMCwgMCwgezB4MDYsMHhhNCwweDYyLDB4MjIsMHgxYywweDBhLDB4YzQsMHgwMiwweDIxLDB4ODAsMHg4YywweDUyLDB4MjIsMHgxNCwweDQ4LDB4ODYgfX0sCisgezE2LCAweGQ2YzAsIDAsIHsweDIyLDB4MjAsMHgwOCwweGE4LDB4NjAsMHgyYSwweDE0LDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNmQwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHg0NSwweDA2LDB4MDEsMHg4OSwweDgwLDB4NjMsMHgyMCwweDFjLDB4ODgsMHg0MCwweDM0LDB4MTEsMHgwMSB9fSwKKyB7MTYsIDB4ZDZlMCwgMCwgezB4YTQsMHg1MCwweDI4LDB4MTgsMHg0OCwweDA0LDB4MGUsMHgwMSwweDRiLDB4ODAsMHg3MywweDI4LDB4MWMsMHg4YSwweDA0LDB4MDYgfX0sCisgezE2LCAweGQ2ZjAsIDAsIHsweDkxLDB4NDksMHgwNCwweDYzLDB4MjAsMHgxYywweDhhLDB4MDYsMHgyNiwweDAxLDB4ODUsMHg4MCwweDcwLDB4MjAsMHgxOCwweDAyIH19LAorIHsxNiwgMHhkNzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4ODUsMHgwMCwweGIxLDB4NDUsMHgyYyB9fSwKKyB7MTYsIDB4ZDcxMCwgMCwgezB4NzAsMHgwMiwweDE0LDB4YzAsMHgwNywweDA4LDB4MjEsMHg0OSwweDAwLDB4NDIsMHgwMSwweDE0LDB4ODIsMHgwNSwweDAwLDB4MTEgfX0sCisgezE2LCAweGQ3MjAsIDAsIHsweDg0LDB4MDAsMHg1MiwweDAyLDB4MWMsMHgwMCwweGM0LDB4MDAsMHgyMSwweGM0LDB4MmMsMHg1MywweDAyLDB4MWMsMHgwMiwweDgxIH19LAorIHsxNiwgMHhkNzMwLCAwLCB7MHgwNCwweGExLDB4Y2QsMHgwOCwweDUwLDB4MDIsMHgxNCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDc0MCwgMCwgezB4MDgsMHgxMCwweDEyLDB4MDQsMHgzNCwweDAxLDB4Y2MsMHgwMCwweDczLDB4NDAsMHgxYywweDkwLDB4NDUsMHgwNCwweDAxLDB4NDggfX0sCisgezE2LCAweGQ3NTAsIDAsIHsweDA0LDB4NjAsMHg0MSwweDE4LDB4YzAsMHg0NCwweDA0LDB4MDEsMHgwNSwweDA0LDB4NzMsMHg0OCwweDE0LDB4NTAsMHg0NywweDM0IH19LAorIHsxNiwgMHhkNzYwLCAwLCB7MHgwMSwweDQ1LDB4MjAsMHg2MiwweDA4LDB4MWMsMHhjMiwweDA0LDB4MGMsMHg4MSwweGM3LDB4MDAsMHg3MywweDgwLDB4MTgsMHhjMiB9fSwKKyB7MTYsIDB4ZDc3MCwgMCwgezB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgxMCwweDg0LDB4MTAsMHgyMSwweGNjLDB4MjggfX0sCisgezE2LCAweGQ3ODAsIDAsIHsweDQyLDB4MDIsMHgxNCwweDEyLDB4YzUsMHgxMCwweDIxLDB4ODQsMHgwNCwweDQwLDB4MDAsMHgxYywweDgwLDB4ODQsMHgwMCwweDkxIH19LAorIHsxNiwgMHhkNzkwLCAwLCB7MHgwMCwweDA4LDB4NzMsMHg4MiwweDFjLDB4OTAsMHgwNSwweDBjLDB4MDEsMHhjZiwweDBjLDB4NDAsMHgwMiwweDE0LDB4MzAsMHg0NSB9fSwKKyB7MTYsIDB4ZDdhMCwgMCwgezB4MjAsMHhhMSwweGMwLDB4MDgsMHg1MCwweDAyLDB4MTAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDQ1LDB4MGMsMHg4MSwweDAwLDB4MDAsMHgwMSwweDA4LDB4MDgsMHgwMCwweDA1LDB4MTgsMHg5MSwweDA1IH19LAorIHsxNiwgMHhkN2MwLCAwLCB7MHgwNCwweDAwLDB4MDEsMHgwNCwweDQwLDB4MDYsMHgxOCwweDAwLDB4MDIsMHgyNCwweDcwLDB4NDAsMHgwNCwweDAwLDB4NDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDdkMCwgMCwgezB4MDEsMHhjNCwweDI0LDB4MDAsMHg4OCwweDA0LDB4MDAsMHg0MywweDEwLDB4MDAsMHg0MCwweDIwLDB4MDAsMHg4OCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHg4NSwweDI0LDB4MzEsMHgwMiwweDBjIH19LAorIHsxNiwgMHhkN2YwLCAwLCB7MHgwMiwweGMyLDB4MDQsMHgxMCwweGM0LDB4MjgsMHgyMSwweDQ5LDB4MGMsMHgwMiwweGMwLDB4MDQsMHhiMiwweDA2LDB4MWMsMHgyMCB9fSwKKyB7MTYsIDB4ZDgwMCwgMCwgezB4MDMsMHgwOCwweDUwLDB4NDIsMHgwYywweDgwLDB4MDEsMHgwNCwweGExLDB4NDksMHgwYywweDAwLDB4YzIsMHgwYywweDEwLDB4NDMgfX0sCisgezE2LCAweGQ4MTAsIDAsIHsweDI0LDB4YTAsMHhjMSwweDA4LDB4MTAsMHg0MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODIwLCAwLCB7MHgwMCwweDEwLDB4YTIsMHgwMCwweDIwLDB4MDAsMHhjZCwweDAwLDB4MDAsMHg0MCwweDA0LDB4MjAsMHgwMSwweDEwLDB4MDAsMHgwOSB9fSwKKyB7MTYsIDB4ZDgzMCwgMCwgezB4MDQsMHgwMiwweDQ5LDB4MGMsMHg5MiwweDA3LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgzMywweDA4LDB4MGMsMHg5MiwweDQxLDB4MDAgfX0sCisgezE2LCAweGQ4NDAsIDAsIHsweDgwLDB4Y2MsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4NDMsMHgyOCwweDgwLDB4YzIsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODUwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MTAsMHg1MCwweDgwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg2MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4ZjAsMHgwMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4ZDAsMHg4MCwweDgwLDB4MDAgfX0sCisgezE2LCAweGQ4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg5MCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg5MCwweDgwIH19LAorIHsxNiwgMHhkODgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg5MCwgMCwgezB4M2MsMHgzYywweDEwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4YTAsMHg4MCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4YTAsIDAsIHsweDAwLDB4MDAsMHg0MCwweDEwLDB4OTAsMHg4MCwweGEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4OTAsMHg4MCwweGEwIH19LAorIHsxNiwgMHhkOGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgyMCwweDgwLDB4MTAsMHg5MCwweGEwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg4ZiB9fSwKKyB7MTYsIDB4ZDhjMCwgMCwgezB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweGMyLDB4ZTQsMHg4MSwweDgwLDB4M2YgfX0sCisgezE2LCAweGQ4ZDAsIDAsIHsweGQ5LDB4YmYsMHhkOSwweDk4LDB4NzEsMHg5ZCwweDQyLDB4ODAsMHgwMCwweDI2LDB4N2YsMHhlNiwweDcyLDB4YWIsMHg3YywweDNhIH19LAorIHsxNiwgMHhkOGUwLCAwLCB7MHg0MCwweDAwLDB4MTksMHg4MCwweDI2LDB4NDgsMHhkZCwweDNjLDB4OTEsMHhjMCwweDI2LDB4NDAsMHgyNiwweDQwLDB4MzgsMHgzMSB9fSwKKyB7MTYsIDB4ZDhmMCwgMCwgezB4ZGIsMHg2MSwweGMwLDB4MTksMHg5OSwweGJmLDB4YzksMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5MDAsIDAsIHsweDAwLDB4MDAsMHgxMCwweDgwLDB4MTAsMHgxNCwweDgwLDB4MDYsMHg4NCwweDk3LDB4OTYsMHg4NiwweDk2LDB4MDYsMHg5MCwweDAwIH19LAorIHsxNiwgMHhkOTEwLCAwLCB7MHgzZiwweGExLDB4MjgsMHgwMSwweDAyLDB4OTAsMHgxMiwweDAwLDB4ODAsMHgxNywweDg4LDB4MTYsMHg5ZSwweDkwLDB4OTAsMHgwNCB9fSwKKyB7MTYsIDB4ZDkyMCwgMCwgezB4MTAsMHgwMCwweDM2LDB4YmUsMHhiZSwweDllLDB4ODYsMHgxNiwweDEyLDB4ODQsMHg4MCwweDEzLDB4YmUsMHg5NywweGFlLDB4ODAgfX0sCisgezE2LCAweGQ5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDgyIH19LAorIHsxNiwgMHhkOTQwLCAwLCB7MHg4MSwweDg0LDB4MjEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTEsMHgzOCwweDAxLDB4NzgsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDk1MCwgMCwgezB4MDgsMHhiOCwweDIxLDB4NzIsMHg2OCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg5OCwweDQ0LDB4ODgsMHg2OCwweDgwLDB4MDAgfX0sCisgezE2LCAweGQ5NjAsIDAsIHsweDAwLDB4MDAsMHgwOCwweGI4LDB4MDEsMHg3OCwweDAxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOTcwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmNywweGFmLDB4ZmYsMHhjMCB9fSwKKyB7MTYsIDB4ZDk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYgfX0sCisgezE2LCAweGQ5OTAsIDAsIHsweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhiZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4ZDliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfX0sCisgezE2LCAweGQ5YzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmIH19LAorIHsxNiwgMHhkOWQwLCAwLCB7MHgyZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDllMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4YzAgfX0sCisgezE2LCAweGQ5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmIH19LAorIHsxNiwgMHhkYTAwLCAwLCB7MHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfX0sCisgezE2LCAweGRhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhiZiwweGJmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYsMHhiZiwweGRmIH19LAorIHsxNiwgMHhkYTMwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhlZiwweGZmLDB4ZmYsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhkZiB9fSwKKyB7MTYsIDB4ZGE0MCwgMCwgezB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhNTAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDNlLDB4YWYsMHhmZiwweGMwIH19LAorIHsxNiwgMHhkYTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZTcsMHhmZSB9fSwKKyB7MTYsIDB4ZGE3MCwgMCwgezB4ZWYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZGYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH19LAorIHsxNiwgMHhkYTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGY3LDB4ZmYsMHhmZiB9fSwKKyB7MTYsIDB4ZGFhMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmYsMHhmZiwweGRmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZjcgfX0sCisgezE2LCAweGRhYjAsIDAsIHsweGRmLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYWMwLCAwLCB7MHgwMCwweDAwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHhjMywweDJjLDB4NTAsMHgwOSwweDE0LDB4ODIsMHhjNCwweDMwLDB4OTEsMHhjNyB9fSwKKyB7MTYsIDB4ZGFkMCwgMCwgezB4MjQsMHg2MCwweDA4LDB4MWMsMHg4MiwweDA3LDB4MzQsMHg5MSwweDRjLDB4MDQsMHg0MywweDBhLDB4MTAsMHhjMiwweDg0LDB4MDQgfX0sCisgezE2LCAweGRhZTAsIDAsIHsweDkxLDB4ODQsMHgyNCwweDUyLDB4MGIsMHgxOCwweDAyLDB4YzQsMHgyNCwweGIxLDB4YzMsMHgyYywweDQwLDB4MGEsMHgxMCwweDgwIH19LAorIHsxNiwgMHhkYWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHgwMiwweDAxLDB4YzQsMHg4MCB9fSwKKyB7MTYsIDB4ZGIwMCwgMCwgezB4NjAsMHgyMCwweDFjLDB4MDgsMHg0NCwweDIyLDB4MDEsMHhjMCwweDg0LDB4NTAsMHgwMSwweDljLDB4MDgsMHgwNywweDBhLDB4MDEgfX0sCisgezE2LCAweGRiMTAsIDAsIHsweGMwLDB4ODQsMHg3MiwweDIwLDB4MWMsMHhjOCwweDA0LDB4MTIsMHgxMSwweDQ0LDB4ODAsMHg0MSwweDAxLDB4MWMsMHg4MCwweDA3IH19LAorIHsxNiwgMHhkYjIwLCAwLCB7MHgwOCwweDExLDB4YzQsMHgwMCwweDcwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4ODYsMHgyYywweDIxLDB4NGEsMHgwYywweDUyLDB4MDIsMHgxYywweDgwLDB4MDQsMHgyMCwweDIxLDB4Y2EgfX0sCisgezE2LCAweGRiNDAsIDAsIHsweDEwLDB4NjIsMHgwMiwweDFjLDB4ODEsMHg0NywweDA0LDB4MjEsMHhjMywweDIwLDB4NTEsMHgwMSwweDFjLDB4ODAsMHgwNCwweDJjIH19LAorIHsxNiwgMHhkYjUwLCAwLCB7MHgwMSwweGNiLDB4MDQsMHg1MiwweDAzLDB4MTQsMHg0MCwweGM3LDB4MjAsMHgzMSwweGM4LDB4MGMsMHg1MCwweDIyLDB4MTAsMHg4MCB9fSwKKyB7MTYsIDB4ZGI2MCwgMCwgezB4MDEsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MjAsMHgwMSwweDg5LDB4MDAgfX0sCisgezE2LCAweGRiNzAsIDAsIHsweDUyLDB4MDAsMHgxNCwweDgwLDB4MDQsMHgyOCwweDAxLDB4NDUsMHgwNCwweDYyLDB4MDAsMHgxMCwweDgwLDB4NDYsMHgzMCwweDExIH19LAorIHsxNiwgMHhkYjgwLCAwLCB7MHgwZCwweDAwLDB4NDIsMHgwMSwweDE0LDB4YzAsMHg0NCwweDAwLDB4MTEsMHgwNSwweDAwLDB4NTAsMHgwMCwweDFjLDB4MDAsMHg0NCB9fSwKKyB7MTYsIDB4ZGI5MCwgMCwgezB4MjgsMHgwMSwweDQ5LDB4MDAsMHg3MCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiYTAsIDAsIHsweDAwLDB4MDAsMHgwOCwweGMwLDB4MDIsMHgzMCwweDBjLDB4OGMsMHgzMCwweDIyLDB4MDgsMHg4OCwweGMyLDB4MjYsMHgwMCwweDA4IH19LAorIHsxNiwgMHhkYmIwLCAwLCB7MHg4MCwweDIwLDB4MjIsMHgwYywweDg4LDB4ODEsMHgwMiwweDEwLDB4YzQsMHg4MCwweDEwLDB4MjIsMHgwYywweDA4LDB4NDAsMHgwMiB9fSwKKyB7MTYsIDB4ZGJjMCwgMCwgezB4MTAsMHg0OCwweDg4LDB4MDEsMHgyMywweDA0LDB4YzgsMHg0MiwweDAyLDB4MTAsMHg0NiwweDhjLDB4MTIsMHgyMiwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiZDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHhjOCwweDIwIH19LAorIHsxNiwgMHhkYmUwLCAwLCB7MHgxMSwweDA5LDB4MDAsMHg4MCwweDQxLDB4MTAsMHg5MCwweDA4LDB4MjQsMHgzMCwweDA4LDB4MDQsMHg0MiwweDQxLDB4MDAsMHg5MCB9fSwKKyB7MTYsIDB4ZGJmMCwgMCwgezB4YzQsMHgyMCwweDAwLDB4MDgsMHgwNCwweDQyLDB4MDAsMHgxMCwweDgwLDB4NGMsMHgyMCwweDIzLDB4MDksMHgwNCwweGMyLDB4NDMgfX0sCisgezE2LCAweGRjMDAsIDAsIHsweDMwLDB4ODAsMHg0MCwweDIwLDB4MTEsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYzEwLCAwLCB7MHgwOCwweDAwLDB4MDgsMHg4MSwweDAyLDB4MjAsMHhjOSwweDhjLDB4MTIsMHgyMCwweDA0LDB4NDgsMHg0MSwweDIyLDB4MDAsMHgwOSB9fSwKKyB7MTYsIDB4ZGMyMCwgMCwgezB4ODgsMHgzMCwweDIwLDB4MGMsMHg4OCwweDAzLDB4MGUsMHgwMCwweDQ5LDB4OGMsMHgxMCwweDIyLDB4MGMsMHg4OCwweDQwLDB4MmUgfX0sCisgezE2LCAweGRjMzAsIDAsIHsweDAwLDB4YzksMHg4NCwweDEzLDB4MjEsMHgwNCwweGM4LDB4YzMsMHgyMiwweDAwLDB4Y2IsMHg4YywweDMyLDB4MjIsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYzQwLCAwLCB7MHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4MDEsMHgwMiwweDAwLDB4NGIsMHg4MCB9fSwKKyB7MTYsIDB4ZGM1MCwgMCwgezB4MzIsMHgyMSwweDA4LDB4ODgsMHg0MSwweDAyLDB4MTAsMHgwZiwweDgwLDB4MTAsMHgyMSwweDhjLDB4MDgsMHg0MSwweDAyLDB4MDAgfX0sCisgezE2LCAweGRjNjAsIDAsIHsweDg3LDB4ODQsMHgxMCwweDIwLDB4MDQsMHg4OCwweDAwLDB4MDIsMHgwMCwweDQ3LDB4ODAsMHgxMCwweDIxLDB4MGMsMHg4OCwweDQxIH19LAorIHsxNiwgMHhkYzcwLCAwLCB7MHgxNiwweDEwLDB4NDYsMHg4MCwweDMwLDB4MjAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGM4MCwgMCwgezB4MDAsMHgwMCwweDBhLDB4YzQsMHgyMiwweGExLDB4MDgsMHhhNCwweDcyLDB4MmEsMHgxNCwweDBhLDB4ODUsMHgwMiwweDgxLDB4ODQgfX0sCisgezE2LCAweGRjOTAsIDAsIHsweGEwLDB4NDIsMHgyOCwweDFjLDB4MGEsMHhjNSwweDAyLDB4OTEsMHg0MCwweGI4LDB4NzMsMHgyOSwweDEwLDB4Y2EsMHhjNCwweDAyIH19LAorIHsxNiwgMHhkY2EwLCAwLCB7MHhhMSwweDgwLDB4YTQsMHg0MiwweDJhLDB4MTQsMHhjYSwweDg1LDB4MjIsMHg5MSwweDgwLDB4YTgsMHg3MCwweDJhLDB4MTgsMHgwMiB9fSwKKyB7MTYsIDB4ZGNiMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MWUsMHgwMSwweGM4LDB4ODAgfX0sCisgezE2LCAweGRjYzAsIDAsIHsweDQzLDB4MjAsMHgxOCwweDA4LDB4NDUsMHgzZSwweDAxLDB4MGMsMHg4MCwweDYxLDB4MjAsMHg5YywweDQ4LDB4MDYsMHgxMiwweDgxIH19LAorIHsxNiwgMHhkY2QwLCAwLCB7MHhjMCwweDgwLDB4NzMsMHgwMCwweDEwLDB4ODgsMHgwNiwweDAyLDB4MDEsMHhjOCwweDAwLDB4NDIsMHgyMCwweDEwLDB4YzgsMHgwNyB9fSwKKyB7MTYsIDB4ZGNlMCwgMCwgezB4MDIsMHgxMSwweGNkLDB4ODAsMHg1MSwweDIwLDB4MTQsMHg4MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjZjAsIDAsIHsweDA4LDB4MDAsMHgwMCwweGM0LDB4MjQsMHgyMSwweGM4LDB4MGMsMHg0MiwweDAxLDB4MTQsMHgwMCwweDAwLDB4MjgsMHgxMCwweDRjIH19LAorIHsxNiwgMHhkZDAwLCAwLCB7MHgwOCwweDUyLDB4MDIsMHgxNCwweDgwLDB4NDUsMHgyNCwweDI5LDB4NDAsMHgwNCwweDcyLDB4MDAsMHgxMCwweGMwLDB4MDUsMHgyNCB9fSwKKyB7MTYsIDB4ZGQxMCwgMCwgezB4MTEsMHg0NCwweDA4LDB4NDMsMHgwMSwweDE0LDB4YzAsMHg0NywweDI0LDB4MjAsMHg0OCwweDA4LDB4NzIsMHgwMiwweDEwLDB4MDAgfX0sCisgezE2LCAweGRkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4MDAsMHgwNywweDEwLDB4MTEsMHgwNiwweDAwIH19LAorIHsxNiwgMHhkZDMwLCAwLCB7MHg3MiwweDAwLDB4MTgsMHhkMCwweDQ2LDB4MjAsMHgwMSwweDRkLDB4MDAsMHg3MSwweDQwLDB4MTAsMHg1MCwweDA3LDB4MzAsMHgxMSB9fSwKKyB7MTYsIDB4ZGQ0MCwgMCwgezB4YzMsMHgwMCwweDcxLDB4NDEsMHgxMCwweGIwLDB4MDUsMHgyYywweDAxLDB4NDksMHgwMCwweDQzLDB4MDAsMHgxYywweDUwLDB4NDUgfX0sCisgezE2LCAweGRkNTAsIDAsIHsweDMwLDB4MDEsMHg4YywweDAwLDB4NjEsMHg0MCwweDE4LDB4NDIsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZDYwLCAwLCB7MHgwMCwweDAwLDB4MzAsMHhjNSwweDAwLDB4MjEsMHhjMCwweDBjLDB4NDAsMHgwMSwweDE0LDB4MTIsMHg0NCwweDA0LDB4MzEsMHg4NCB9fSwKKyB7MTYsIDB4ZGQ3MCwgMCwgezB4MjQsMHg0MCwweDgwLDB4MTQsMHhhMSwweGM3LDB4MDAsMHgwMSwweDQwLDB4MDgsMHg0MCwweDAxLDB4MTQsMHgyMCwweDA1LDB4MjAgfX0sCisgezE2LCAweGRkODAsIDAsIHsweDExLDB4YzAsMHgwMiwweDYwLDB4ODIsMHgxOCwweDAwLDB4ODcsMHgyNCwweDExLDB4NDAsMHgwOCwweDQwLDB4NDIsMHgxMCwweDAyIH19LAorIHsxNiwgMHhkZDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwYywweDgwLDB4YzQsMHgyNCB9fSwKKyB7MTYsIDB4ZGRhMCwgMCwgezB4MzEsMHg0OCwweDBjLDB4MDAsMHgwMSwweDA4LDB4YzEsMHg0MSwweDAwLDB4MDAsMHg0OSwweDAwLDB4NDIsMHgwMywweDA4LDB4MTAgfX0sCisgezE2LCAweGRkYjAsIDAsIHsweDgwLDB4MjAsMHgyMSwweDA5LDB4MGMsMHgwMiwweDAyLDB4MTgsMHg4MCwweGMxLDB4MjQsMHgzMCwweDA4LDB4MGMsMHg0MiwweDAxIH19LAorIHsxNiwgMHhkZGMwLCAwLCB7MHgxMCwweDgwLDB4ODMsMHgyMCwweDExLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGRkMCwgMCwgezB4MDAsMHgwMCwweDEwLDB4YzEsMHgwNCwweDIwLDB4NDgsMHgwYywweDEyLDB4NDIsMHgwNCwweDAwLDB4ODMsMHgwMCwweDMxLDB4NDggfX0sCisgezE2LCAweGRkZTAsIDAsIHsweDAwLDB4MDIsMHg0MSwweDA0LDB4YTAsMHgwNywweDBjLDB4MjAsMHg0MCwweDAwLDB4MTIsMHhjMiwweDBjLDB4ODAsMHhjMSwweDIwIH19LAorIHsxNiwgMHhkZGYwLCAwLCB7MHgyMCwweGM4LDB4MDAsMHgxMiwweGMxLDB4MGMsMHhiMCwweDQxLDB4MjAsMHgwMCwweDQ5LDB4MDgsMHgwMiwweDQyLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4MCwweDAxLDB4MDAsMHgxMCwweDgxLDB4MDAgfX0sCisgezE2LCAweGRlMTAsIDAsIHsweDMwLDB4NDAsMHgwOCwweDIwLDB4MDMsMHgwMCwweDEwLDB4YzEsMHgyMCwweDAyLDB4MDAsMHgwNCwweDgwLDB4NDAsMHgzMCwweDkwIH19LAorIHsxNiwgMHhkZTIwLCAwLCB7MHgwMSwweDE0LDB4MDIsMHg0MCwweDA0LDB4ODAsMHg0MCwweDIwLDB4MDAsMHgwOSwweDA0LDB4MzIsMHgwMSwweDA4LDB4YTAsMHgwMyB9fSwKKyB7MTYsIDB4ZGUzMCwgMCwgezB4MDQsMHgxMCwweDA4LDB4MDAsMHgyMiwweDQwLDB4MDAsMHgwMCwweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlNDAsIDAsIHsweDAwLDB4MDAsMHgzMCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTUwLCAwLCB7MHgwMCwweDEwLDB4ODAsMHgwMCwweGYwLDB4MDAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweGYwLDB4MTAsMHhhMCB9fSwKKyB7MTYsIDB4ZGU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4ZjAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHg4MCwweDAwLDB4Y2MgfX0sCisgezE2LCAweGRlNzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDNjLDB4MTAsMHhhMCwweDgwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTgwLCAwLCB7MHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4YzAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4ZGU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAgfX0sCisgezE2LCAweGRlYTAsIDAsIHsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OGMsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZWIwLCAwLCB7MHgwMCwweDAwLDB4MDksMHg0ZCwweGIxLDB4ZTksMHgwMCwweDI2LDB4NDAsMHgyYSwweDdmLDB4ZTMsMHhmMiwweDU0LDB4OTgsMHhjMCB9fSwKKyB7MTYsIDB4ZGVjMCwgMCwgezB4M2YsMHhlNiwweDQwLDB4MDAsMHgwMSwweDQyLDB4OTEsMHhkMCwweGMwLDB4MTMsMHhlNSwweDg3LDB4NjMsMHg4MywweGI4LDB4Y2QgfX0sCisgezE2LCAweGRlZDAsIDAsIHsweGY5LDB4MDAsMHgyNiwweDdmLDB4MDAsMHgwMCwweDM1LDB4MmUsMHhkNSwweDAzLDB4NDAsMHgzZiwweGQ5LDB4YmYsMHhiMSwweDgwIH19LAorIHsxNiwgMHhkZWUwLCAwLCB7MHgwMSwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDIsMHgxNiwweDE0LDB4MDAsMHgxYyB9fSwKKyB7MTYsIDB4ZGVmMCwgMCwgezB4YTgsMHgzZiwweDg4LDB4MTYsMHgwMCwweDgwLDB4ODQsMHg4MCwweDM3LDB4OWUsMHhiYSwweGEwLDB4NTAsMHgxMCwweDAyLDB4MTIgfX0sCisgezE2LCAweGRmMDAsIDAsIHsweDAwLDB4MTcsMHg5NiwweDk3LDB4MjYsMHg1MCwweDEwLDB4MTAsMHg4MiwweDgwLDB4MWUsMHg4MCwweGRlLDB4YmUsMHg5NCwweDE0IH19LAorIHsxNiwgMHhkZjEwLCAwLCB7MHgwMiwweDEwLDB4ODAsMHgxNywweGJlLDB4ODEsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhhOCwweDQ0LDB4OTQsMHgyOCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDggfX0sCisgezE2LCAweGRmMzAsIDAsIHsweDk0LDB4MjEsMHg0NCwweDUxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg0LDB4NDIsMHg0MSwweDAxLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZjQwLCAwLCB7MHgwMCwweDA4LDB4YTEsMHg3MiwweDIzLDB4NDEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YjgsMHgwMSwweDc4LDB4MzIsMHg0MCB9fSwKKyB7MTYsIDB4ZGY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfX0sCisgezE2LCAweGRmNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZjcsMHhmZSwweGQ3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhkNywweGRmIH19LAorIHsxNiwgMHhkZjcwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweDdmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzcsMHg3ZiB9fSwKKyB7MTYsIDB4ZGY4MCwgMCwgezB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmOTAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZSwweGZmLDB4ZGUsMHg3NywweGMwIH19LAorIHsxNiwgMHhkZmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZWYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiB9fSwKKyB7MTYsIDB4ZGZiMCwgMCwgezB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH19LAorIHsxNiwgMHhkZmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgxZiwweGNmLDB4ZGYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhiZiB9fSwKKyB7MTYsIDB4ZGZlMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGJmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYgfX0sCisgezE2LCAweGRmZjAsIDAsIHsweGZmLDB4YmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMDAwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCB9fSwKKyB7MTYsIDB4ZTAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGZmLDB4MWYgfX0sCisgezE2LCAweGUwMjAsIDAsIHsweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZGYsMHhmZiwweGNmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4ZTA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhiZiwweGFmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfX0sCisgezE2LCAweGUwNTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZSwweGRlLDB4N2YsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmIH19LAorIHsxNiwgMHhlMDYwLCAwLCB7MHhmZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTA3MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4N2YsMHhmZiwweGZmLDB4YzAgfX0sCisgezE2LCAweGUwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZSwweGJlIH19LAorIHsxNiwgMHhlMDkwLCAwLCB7MHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZSwweGZmLDB4ZDcsMHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwZTAsIDAsIHsweDMwLDB4MDAsMHgyMCwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4NDMsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMiwweDAyLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg0MywweDgwIH19LAorIHsxNiwgMHhlZjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjAwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjljMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDVmLDB4YTcsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzIH19LAorIHsxNiwgMHhmZDQwLCAwLCB7MHgzMCwweDAwLDB4NDAsMHgwZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSB9fSwKKyB7MTYsIDB4ZmQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDUsMHgzMCwweDAwLDB4YTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDEgfX0sCisgezE2LCAweGZkOTAsIDAsIHsweDAwLDB4MDAsMHg2YiwweDk3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHs0LCAweGZkYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHswICwgMHgwMDAwLCAxLCB7MH19Cit9OworLy8gVkVSU0lPTj0gMS4wLjAuMTkxCisvLyBEQVRFPSAyMDAyb2N0MjgKK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfSGV4U3BkaWZGdzYyW10gPSB7CisgIHszLDB4MDAwMCwwLHsweDAyLDB4NDUsMHhmOX19LAorIHsgMywweDAwMDMsMCx7MHgwMiwweDBmLDB4ZmR9fSwKKyB7IDMsMHgwMDBiLDAsezB4MDIsMHg0ZCwweDlifX0sCisgeyAzLDB4MDAxMywwLHsweDAyLDB4MTcsMHhmZH19LAorIHsgMywweDAwMWIsMCx7MHgwMiwweDRkLDB4OWV9fSwKKyB7IDMsMHgwMDIzLDAsezB4MDIsMHg0ZCwweDc1fX0sCisgeyAzLDB4MDAyYiwwLHsweDAyLDB4NDYsMHhmN319LAorIHsgMywweDAwMzMsMCx7MHgwMiwweDRkLDB4NmN9fSwKKyB7IDMsMHgwMDNiLDAsezB4MDIsMHg0ZCwweDdjfX0sCisgeyAzLDB4MDA0MywwLHsweDAyLDB4NDksMHgwMH19LAorIHsgMywweDAwNGIsMCx7MHgwMiwweDRkLDB4OGZ9fSwKKyB7IDMsMHgwMDUzLDAsezB4MDIsMHg0ZCwweDgzfX0sCisgeyAzLDB4MDA1YiwwLHsweDAyLDB4NGQsMHg4OX19LAorIHsgMywweDAwNjMsMCx7MHgwMiwweDRkLDB4OTN9fSwKKyB7MTYsMHgwNTAwLDAsezB4MTIsMHgwMSwweDEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDZhLDB4MDgsMHgxMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDJ9fSwKKyB7MTYsMHgwNTEwLDAsezB4MDAsMHgwMSwweDA5LDB4MDIsMHhhYywweDAxLDB4MDMsMHgwMSwweDAwLDB4ODAsMHgzMiwweDA5LDB4MDQsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwNTIwLDAsezB4MDEsMHgwMSwweDAwLDB4MDAsMHgwYSwweDI0LDB4MDEsMHgwMCwweDAxLDB4NTYsMHgwMCwweDAyLDB4MDEsMHgwMiwweDBjLDB4MjR9fSwKKyB7MTYsMHgwNTMwLDAsezB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDI0LDB4MDYsMHgwNSwweDAxLDB4MDJ9fSwKKyB7MTYsMHgwNTQwLDAsezB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDI0LDB4MDMsMHgwMiwweDA0LDB4MDMsMHgwMCwweDA1LDB4MDB9fSwKKyB7MTYsMHgwNTUwLDAsezB4MGMsMHgyNCwweDAyLDB4MDMsMHgwNSwweDAyLDB4MDAsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHgyNCwweDA2LDB4MDZ9fSwKKyB7MTYsMHgwNTYwLDAsezB4MDMsMHgwMiwweDAwLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDB9fSwKKyB7MTYsMHgwNTcwLDAsezB4MDAsMHgwOSwweDI0LDB4MDMsMHgwNCwweDAxLDB4MDEsMHgwMCwweDA2LDB4MDAsMHgwOSwweDA0LDB4MDEsMHgwMCwweDAwLDB4MDF9fSwKKyB7MTYsMHgwNTgwLDAsezB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAxLDB4MDEsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDF9fSwKKyB7MTYsMHgwNTkwLDAsezB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDEsMHgwMiwweDAyLDB4MTAsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmJ9fSwKKyB7MTYsMHgwNWEwLDAsezB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4MGEsMHgwNSwweDg0LDB4MDEsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDF9fSwKKyB7MTYsMHgwNWIwLDAsezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA1LDB4MDAsMHgwOSwweDA0LDB4MDF9fSwKKyB7MTYsMHgwNWMwLDAsezB4MDIsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDJ9fSwKKyB7MTYsMHgwNWQwLDAsezB4MDEsMHgwMiwweDAzLDB4MTgsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDV9fSwKKyB7MTYsMHgwNWUwLDAsezB4MGEsMHgwNSwweDQ2LDB4MDIsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDV9fSwKKyB7MTYsMHgwNWYwLDAsezB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA1LDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwMCwweDAwLDB4MDEsMHgwMiwweDAwLDB4MDB9fSwKKyB7MTYsMHgwNjAwLDAsezB4MDksMHgwNCwweDAyLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDB9fSwKKyB7MTYsMHgwNjEwLDAsezB4MGUsMHgyNCwweDAyLDB4MDEsMHgwNiwweDAyLDB4MTAsMHgwMiwweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDA5LDB4MDV9fSwKKyB7MTYsMHgwNjIwLDAsezB4OGMsMHgwNSwweDRjLDB4MDIsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDR9fSwKKyB7MTYsMHgwNjMwLDAsezB4MDIsMHgwMiwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDBlLDB4MjR9fSwKKyB7MTYsMHgwNjQwLDAsezB4MDIsMHgwMSwweDA2LDB4MDMsMHgxOCwweDAyLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDksMHgwNSwweDhjLDB4MDV9fSwKKyB7MTYsMHgwNjUwLDAsezB4NzIsMHgwMywweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyLDB4MDN9fSwKKyB7MTYsMHgwNjYwLDAsezB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDF9fSwKKyB7MTYsMHgwNjcwLDAsezB4MDIsMHgwMiwweDEwLDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4OGN9fSwKKyB7MTYsMHgwNjgwLDAsezB4MDUsMHg4NCwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDJ9fSwKKyB7MTYsMHgwNjkwLDAsezB4MDQsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDJ9fSwKKyB7MTYsMHgwNmEwLDAsezB4MDEsMHgwMiwweDAzLDB4MTgsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDV9fSwKKyB7MTYsMHgwNmIwLDAsezB4OGMsMHgwNSwweDQ2LDB4MDIsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA0LDB4MDN9fSwKKyB7MTYsMHgwNmMwLDAsezB4MDksMHgwNCwweDE4LDB4MDMsMHg0NSwweDAwLDB4NmQsMHgwMCwweDYxLDB4MDAsMHg2NywweDAwLDB4NjksMHgwMCwweDYzLDB4MDB9fSwKKyB7MTYsMHgwNmQwLDAsezB4MjAsMHgwMCwweDQ3LDB4MDAsMHg2ZCwweDAwLDB4NjIsMHgwMCwweDQ4LDB4MDAsMHgyMiwweDAzLDB4NDUsMHgwMCwweDZkLDB4MDB9fSwKKyB7MTYsMHgwNmUwLDAsezB4NjEsMHgwMCwweDY3LDB4MDAsMHg2OSwweDAwLDB4NjMsMHgwMCwweDIwLDB4MDAsMHg0NSwweDAwLDB4NGQsMHgwMCwweDQ5LDB4MDB9fSwKKyB7MTYsMHgwNmYwLDAsezB4MjAsMHgwMCwweDM2LDB4MDAsMHg3YywweDAwLDB4MzIsMHgwMCwweDIwLDB4MDAsMHg2ZCwweDAwLDB4MmEsMHgwMywweDQzLDB4MDB9fSwKKyB7MTYsMHgwNzAwLDAsezB4NmYsMHgwMCwweDZlLDB4MDAsMHg2NiwweDAwLDB4NjksMHgwMCwweDY3LDB4MDAsMHg3NSwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDB9fSwKKyB7MTYsMHgwNzEwLDAsezB4NzQsMHgwMCwweDY5LDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDB9fSwKKyB7MTYsMHgwNzIwLDAsezB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MjIsMHgwMywweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NzQsMHgwMCwweDY1LDB4MDB9fSwKKyB7MTYsMHgwNzMwLDAsezB4NzIsMHgwMCwweDY2LDB4MDAsMHg2MSwweDAwLDB4NjMsMHgwMCwweDY1LDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDB9fSwKKyB7MTAsMHgwNzQwLDAsezB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwNzRhLDAsezB4OTAsMHg3NiwweDlhLDB4NzQsMHgwMiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4OTEsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4OTB9fSwKKyB7MTYsMHgwNzVhLDAsezB4ZjAsMHg5MCwweDc2LDB4OTMsMHhmMCwweDkwLDB4NzYsMHg5NiwweDc0LDB4MDMsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwLDB4ZTR9fSwKKyB7MTYsMHgwNzZhLDAsezB4OTAsMHg3NiwweDk3LDB4ZjAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDkwLDB4NzYsMHg5NCwweDA0LDB4ZjAsMHg5MCwweDgwLDB4MDB9fSwKKyB7MTYsMHgwNzdhLDAsezB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4ZSwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHgwNCwweGYwLDB4YzJ9fSwKKyB7MTYsMHgwNzhhLDAsezB4MmUsMHg5MCwweDdmLDB4OWIsMHhlMCwweGZmLDB4NTQsMHgxMCwweGZmLDB4NzAsMHgwMiwweGMyLDB4M2YsMHg5MCwweDdmLDB4OWJ9fSwKKyB7MTYsMHgwNzlhLDAsezB4ZTAsMHhmZiwweDU0LDB4MTAsMHhmZSwweGZmLDB4YmUsMHgxMCwweDAyLDB4ZDIsMHgzZiwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZmZ9fSwKKyB7MTYsMHgwN2FhLDAsezB4NTQsMHgyMCwweGZmLDB4NzAsMHgwMiwweGMyLDB4M2UsMHg5MCwweDdmLDB4OWIsMHhlMCwweGZmLDB4NTQsMHgyMCwweGZlLDB4ZmZ9fSwKKyB7MTYsMHgwN2JhLDAsezB4YmUsMHgyMCwweDAyLDB4ZDIsMHgzZSwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODB9fSwKKyB7MTYsMHgwN2NhLDAsezB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjB9fSwKKyB7MTYsMHgwN2RhLDAsezB4MzAsMHgzZSwweDA5LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTB9fSwKKyB7MTYsMHgwN2VhLDAsezB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweGEyLDB4M2UsMHg5MiwweDQwLDB4YTJ9fSwKKyB7IDMsMHgwN2ZhLDAsezB4M2YsMHg5MiwweDQxfX0sCisgeyAxLDB4MDdmZCwwLHsweDIyfX0sCisgeyAyLDB4MDdmZSwwLHsweGQzLDB4MjJ9fSwKKyB7MTYsMHgwODAwLDAsezB4ZTQsMHg5MCwweDc2LDB4MzEsMHhmMCwweDkwLDB4NzYsMHgzMSwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGZ9fSwKKyB7MTYsMHgwODEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHhmZCwweGVlLDB4NmR9fSwKKyB7MTYsMHgwODIwLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDBiLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgzMSwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9fSwKKyB7MTYsMHgwODMwLDAsezB4ZWYsMHhiNCwweDBiLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MDN9fSwKKyB7MTYsMHgwODQwLDAsezB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgzMywweGYwLDB4MjR9fSwKKyB7MTYsMHgwODUwLDAsezB4ZjAsMHg2MCwweDBhLDB4MjQsMHgwZSwweDYwLDB4MDIsMHg4MSwweDg3LDB4MTIsMHg0YiwweDNlLDB4MjIsMHg5MCwweDdmLDB4ZWR9fSwKKyB7MTYsMHgwODYwLDAsezB4ZTAsMHg2NCwweDA1LDB4NzAsMHg1MSwweDkwLDB4NzYsMHgxOCwweDc0LDB4MDUsMHhmMCwweDkwLDB4NzYsMHgzNywweDc0LDB4MDF9fSwKKyB7MTYsMHgwODcwLDAsezB4ZjAsMHg5MCwweDc2LDB4MzksMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjEsMHhmMCwweGU0LDB4OTAsMHg3NiwweDIwLDB4ZjB9fSwKKyB7MTYsMHgwODgwLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwLDB4MmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9fSwKKyB7MTYsMHgwODkwLDAsezB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmR9fSwKKyB7MTYsMHgwOGEwLDAsezB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2LDB4MjEsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwOGIwLDAsezB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHg2NCwweDA2LDB4NzAsMHg1MiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwOGMwLDAsezB4MTgsMHg3NCwweDA2LDB4ZjAsMHg5MCwweDc2LDB4MzcsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4MzksMHg3NCwweDBhLDB4ZjB9fSwKKyB7MTYsMHgwOGQwLDAsezB4OTAsMHg3NiwweDIxLDB4ZjAsMHg5MCwweDc2LDB4MjAsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjB9fSwKKyB7MTYsMHgwOGUwLDAsezB4MmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgwOGYwLDAsezB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmQsMHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwOTAwLDAsezB4MjEsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDF9fSwKKyB7MTYsMHgwOTEwLDAsezB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgwOTIwLDAsezB4ZjUsMHg4MywweGUwLDB4OTAsMHg3MiwweDI5LDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgzYiwweGYwLDB4OTAsMHg3NiwweDIxLDB4ZTB9fSwKKyB7MTYsMHgwOTMwLDAsezB4ZmUsMHhlZiwweDZlLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWJ9fSwKKyB7MTYsMHgwOTQwLDAsezB4ZTAsMHgxNCwweDYwLDB4MTMsMHgxNCwweDcwLDB4MDIsMHgyMSwweGUyLDB4MjQsMHgwMiwweDYwLDB4MDIsMHg4MSwweDdmLDB4OTB9fSwKKyB7MTYsMHgwOTUwLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDE0LDB4NzAsMHg3YywweDkwLDB4N2Z9fSwKKyB7MTYsMHgwOTYwLDAsezB4ZWEsMHhlMCwweGY0LDB4NzAsMHg0OCwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2LDB4Mzl9fSwKKyB7MTYsMHgwOTcwLDAsezB4ZTAsMHhmZSwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmQsMHhjMywweDllLDB4NTAsMHgyYiwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmV9fSwKKyB7MTYsMHgwOTgwLDAsezB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZSwweGVkLDB4NzV9fSwKKyB7MTYsMHgwOTkwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwOWEwLDAsezB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGM3LDB4OTAsMHg3NiwweDNmLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdlLDB4YzB9fSwKKyB7MTYsMHgwOWIwLDAsezB4ZTAsMHhmZSwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgwOWMwLDAsezB4ZWUsMHhmMCwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTAsMHg3NiwweDNlLDB4NzQsMHgwMSwweGYwLDB4ODAsMHgwNSwweGU0LDB4OTB9fSwKKyB7MTYsMHgwOWQwLDAsezB4NzYsMHgzZSwweGYwLDB4OTAsMHg3NiwweDNmLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9fSwKKyB7MTYsMHgwOWUwLDAsezB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDcwLDB4MDIsMHg0MSwweGEzLDB4MTQsMHg3MCwweDAyLDB4NjF9fSwKKyB7MTYsMHgwOWYwLDAsezB4M2YsMHgxNCwweDcwLDB4MDIsMHg2MSwweGRiLDB4MjQsMHgwMywweDYwLDB4MDIsMHg4MSwweDc3LDB4OTAsMHg3ZiwweGVhLDB4ZTB9fSwKKyB7MTYsMHgwYTAwLDAsezB4ZjQsMHg3MCwweDZiLDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOSwweGUwLDB4ZmZ9fSwKKyB7MTYsMHgwYTEwLDAsezB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg1MCwweDRlLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjB9fSwKKyB7MTYsMHgwYTIwLDAsezB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGF9fSwKKyB7MTYsMHgwYTMwLDAsezB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDNiLDB4ZTB9fSwKKyB7MTYsMHgwYTQwLDAsezB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWV9fSwKKyB7MTYsMHgwYTUwLDAsezB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTB9fSwKKyB7MTYsMHgwYTYwLDAsezB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4NDAsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2V9fSwKKyB7MTYsMHgwYTcwLDAsezB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODJ9fSwKKyB7MTYsMHgwYTgwLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGF9fSwKKyB7MTYsMHgwYTkwLDAsezB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDQxLDB4NzR9fSwKKyB7MTYsMHgwYWEwLDAsezB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NjYsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwYWIwLDAsezB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDJ9fSwKKyB7MTYsMHgwYWMwLDAsezB4ODEsMHg4ZSwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgwYWQwLDAsezB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgwYWUwLDAsezB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjV9fSwKKyB7MTYsMHgwYWYwLDAsezB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjV9fSwKKyB7MTYsMHgwYjAwLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTJ9fSwKKyB7MTYsMHgwYjEwLDAsezB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWV9fSwKKyB7MTYsMHgwYjIwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzV9fSwKKyB7MTYsMHgwYjMwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTB9fSwKKyB7MTYsMHgwYjQwLDAsezB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDY2LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwYjUwLDAsezB4MzksMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyLDB4ODEsMHg4ZSwweDkwLDB4NzZ9fSwKKyB7MTYsMHgwYjYwLDAsezB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTB9fSwKKyB7MTYsMHgwYjcwLDAsezB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWZ9fSwKKyB7MTYsMHgwYjgwLDAsezB4ZjAsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2V9fSwKKyB7MTYsMHgwYjkwLDAsezB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgwYmEwLDAsezB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGEyLDB4OTAsMHg3ZSwweGMwLDB4ZTB9fSwKKyB7MTYsMHgwYmIwLDAsezB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgwYmMwLDAsezB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjR9fSwKKyB7MTYsMHgwYmQwLDAsezB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjR9fSwKKyB7MTYsMHgwYmUwLDAsezB4NzAsMHg2NiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2LDB4MzksMHhlMCwweGZmLDB4OTB9fSwKKyB7MTYsMHgwYmYwLDAsezB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMiwweDgxLDB4OGUsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDR9fSwKKyB7MTYsMHgwYzAwLDAsezB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjB9fSwKKyB7MTYsMHgwYzEwLDAsezB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4M2J9fSwKKyB7MTYsMHgwYzIwLDAsezB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmZ9fSwKKyB7MTYsMHgwYzMwLDAsezB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjB9fSwKKyB7MTYsMHgwYzQwLDAsezB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhMiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjB9fSwKKyB7MTYsMHgwYzUwLDAsezB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWZ9fSwKKyB7MTYsMHgwYzYwLDAsezB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgwYzcwLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTB9fSwKKyB7MTUsMHgwYzgwLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4MGM4ZiwwLHsweDQxLDB4NzYsMHg2OCwweDAxLDB4NDEsMHg3NiwweDZhLDB4MDIsMHg0MSwweDc2LDB4NmIsMHgwYSwweGMxLDB4MjAsMHhjMSwweDIxfX0sCisgeyAyLDB4MGM5ZiwwLHsweGMxLDB4MmZ9fSwKKyB7IDQsMHgwY2ExLDAsezB4NDEsMHg3NiwweDIzLDB4MDB9fSwKKyB7MTYsMHgwY2E1LDAsezB4NDEsMHg3MiwweDAxLDB4MDEsMHg0NSwweDcyLDB4MDUsMHgwMCwweDAyLDB4YzksMHgwMCwweDAwLDB4NDUsMHg3MiwweDBhLDB4MDB9fSwKKyB7MTYsMHgwY2I1LDAsezB4MDEsMHgwMiwweDAzLDB4MDQsMHg0ZCwweDcyLDB4MGYsMHhkMSwweDAwLDB4ZDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwY2M1LDAsezB4MjgsMHgyOCwweDA5LDB4MDAsMHg0ZCwweDcyLDB4MWMsMHgwMSwweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDd9fSwKKyB7MTYsMHgwY2Q1LDAsezB4MDgsMHgwOSwweDBhLDB4MGIsMHg0MSwweDcyLDB4MmUsMHgyMiwweDQxLDB4NzIsMHgyZiwweDIzLDB4NDEsMHg3MiwweDMwLDB4MjB9fSwKKyB7MTYsMHgwY2U1LDAsezB4NDEsMHg3MiwweDMxLDB4MjEsMHg2MiwweGQyLDB4NzIsMHgzYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwY2Y1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDA1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDE1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDI1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDM1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDQ1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDU1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDY1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgwZDc1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9fSwKKyB7MTYsMHgwZDg1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9fSwKKyB7MTYsMHgwZDk1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9fSwKKyB7MTYsMHgwZGE1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9fSwKKyB7MTYsMHgwZGI1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9fSwKKyB7MTYsMHgwZGM1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9fSwKKyB7MTYsMHgwZGQ1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9fSwKKyB7MTYsMHgwZGU1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9fSwKKyB7MTYsMHgwZGY1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9fSwKKyB7MTYsMHgwZTA1LDAsezB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9fSwKKyB7MTYsMHgwZTE1LDAsezB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9fSwKKyB7MTYsMHgwZTI1LDAsezB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9fSwKKyB7MTYsMHgwZTM1LDAsezB4MDMsMHgwMywweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9fSwKKyB7MTYsMHgwZTQ1LDAsezB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9fSwKKyB7MTYsMHgwZTU1LDAsezB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9fSwKKyB7MTYsMHgwZTY1LDAsezB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9fSwKKyB7MTYsMHgwZTc1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDV9fSwKKyB7MTYsMHgwZTg1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDV9fSwKKyB7MTYsMHgwZTk1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDV9fSwKKyB7MTYsMHgwZWE1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA2LDB4MDZ9fSwKKyB7MTYsMHgwZWI1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDZ9fSwKKyB7MTYsMHgwZWM1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDZ9fSwKKyB7MTYsMHgwZWQ1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDZ9fSwKKyB7MTYsMHgwZWU1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA3LDB4MDcsMHgwNywweDA4LDB4MDh9fSwKKyB7MTYsMHgwZWY1LDAsezB4MDgsMHgwOSwweDA5LDB4MDksMHgwYSwweDBhLDB4MGEsMHgwYiwweDBiLDB4MGIsMHgwYywweDBjLDB4MGMsMHgwZCwweDBkLDB4MGR9fSwKKyB7MTYsMHgwZjA1LDAsezB4MGUsMHgwZSwweDBlLDB4MGYsMHgwZiwweDBmLDB4MTAsMHgxMCwweDEwLDB4MTEsMHgxMSwweDExLDB4MTIsMHgxMiwweDEyLDB4MTN9fSwKKyB7MTYsMHgwZjE1LDAsezB4MTMsMHgxMywweDE0LDB4MTQsMHgxNCwweDE1LDB4MTUsMHgxNSwweDE2LDB4MTYsMHgxNiwweDE3LDB4MTcsMHgxNywweDE4LDB4MTh9fSwKKyB7MTYsMHgwZjI1LDAsezB4MTgsMHgxOSwweDE5LDB4MTksMHgxOSwweDFhLDB4MWEsMHgxYSwweDFhLDB4MWIsMHgxYiwweDFiLDB4MWIsMHgxYywweDFjLDB4MWN9fSwKKyB7MTYsMHgwZjM1LDAsezB4MWMsMHgxZCwweDFkLDB4MWQsMHgxZCwweDFlLDB4MWUsMHgxZSwweDFlLDB4MWYsMHgxZiwweDFmLDB4MWYsMHgyMCwweDIwLDB4MjB9fSwKKyB7MTYsMHgwZjQ1LDAsezB4MjEsMHgyMSwweDIxLDB4MjIsMHgyMiwweDIyLDB4MjMsMHgyMywweDI0LDB4MjQsMHgyNSwweDI1LDB4MjYsMHgyNiwweDI3LDB4Mjd9fSwKKyB7MTYsMHgwZjU1LDAsezB4MjgsMHgyOCwweDI5LDB4MjksMHgyYSwweDJhLDB4MmIsMHgyYiwweDJjLDB4MmMsMHgyZCwweDJkLDB4MmUsMHgyZSwweDJmLDB4MmZ9fSwKKyB7MTYsMHgwZjY1LDAsezB4MzAsMHgzMCwweDMxLDB4MzEsMHgzMiwweDMyLDB4MzMsMHgzMywweDM0LDB4MzQsMHgzNSwweDM1LDB4MzYsMHgzNiwweDM3LDB4Mzd9fSwKKyB7MTYsMHgwZjc1LDAsezB4MzgsMHgzOCwweDM5LDB4MzksMHgzYSwweDNhLDB4M2IsMHgzYywweDNkLDB4M2UsMHgzZiwweDQwLDB4NDEsMHg0MiwweDQzLDB4NDR9fSwKKyB7MTYsMHgwZjg1LDAsezB4NDUsMHg0NiwweDQ3LDB4NDgsMHg0OSwweDQ5LDB4NGEsMHg0YiwweDRiLDB4NGMsMHg0ZCwweDRlLDB4NGYsMHg1MCwweDUxLDB4NTJ9fSwKKyB7MTYsMHgwZjk1LDAsezB4NTMsMHg1NCwweDU1LDB4NTUsMHg1NiwweDU2LDB4NTcsMHg1NywweDU4LDB4NWEsMHg1YiwweDVkLDB4NWUsMHg1ZiwweDYxLDB4NjJ9fSwKKyB7MTYsMHgwZmE1LDAsezB4NjMsMHg2NCwweDY1LDB4NjYsMHg2NywweDY4LDB4NjksMHg2YSwweDZiLDB4NmMsMHg2ZCwweDZmLDB4NzEsMHg3MiwweDczLDB4NzR9fSwKKyB7MTYsMHgwZmI1LDAsezB4NzUsMHg3NiwweDc3LDB4NzgsMHg3OSwweDdhLDB4N2IsMHg3YywweDdlLDB4ODAsMHgwMSwweDM3LDB4MDEsMHgwMSwweDM4LDB4MDB9fSwKKyB7IDEsMHgwZmM1LDAsezB4MDB9fSwKKyB7MTYsMHgwZmM2LDAsezB4ZTQsMHhmZiwweDc0LDB4NDYsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MjB9fSwKKyB7MTYsMHgwZmQ2LDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDRlLDB4MmYsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgwZmU2LDAsezB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgzMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODN9fSwKKyB7IDYsMHgwZmY2LDAsezB4ZWUsMHhmMCwweDBmLDB4YmYsMHgwOCwweGNjfX0sCisgeyAxLDB4MGZmYywwLHsweDIyfX0sCisgeyAzLDB4MGZmZCwwLHsweGMyLDB4ODksMHgzMn19LAorIHsxNiwweDEwMDAsMCx7MHhlNCwweDkwLDB4NzYsMHgyYywweGYwLDB4OTAsMHg3NiwweDJjLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZn19LAorIHsxNiwweDEwMTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWQsMHhlMCwweGZkLDB4ZWUsMHg2ZH19LAorIHsxNiwweDEwMjAsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MGIsMHg1MCwweDA4LDB4OTAsMHg3NiwweDJjLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX19LAorIHsxNiwweDEwMzAsMCx7MHhlZiwweGI0LDB4MGIsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwM319LAorIHsxNiwweDEwNDAsMCx7MHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDJlLDB4ZjAsMHgyNH19LAorIHsxNiwweDEwNTAsMCx7MHhmMCwweDYwLDB4MGEsMHgyNCwweDBmLDB4NjAsMHgwMiwweDgxLDB4N2QsMHgxMiwweDRiLDB4MWIsMHgyMiwweDkwLDB4N2YsMHhlZH19LAorIHsxNiwweDEwNjAsMCx7MHhlMCwweDY0LDB4MDUsMHg3MCwweDUxLDB4OTAsMHg3NiwweDE4LDB4NzQsMHgwNSwweGYwLDB4OTAsMHg3NiwweDM4LDB4NzQsMHgwMX19LAorIHsxNiwweDEwNzAsMCx7MHhmMCwweDkwLDB4NzYsMHgzYSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgxYywweGYwLDB4ZTQsMHg5MCwweDc2LDB4MWIsMHhmMH19LAorIHsxNiwweDEwODAsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjAsMHgyZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH19LAorIHsxNiwweDEwOTAsMCx7MHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZH19LAorIHsxNiwweDEwYTAsMCx7MHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzYsMHgxYywweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3Nn19LAorIHsxNiwweDEwYjAsMCx7MHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDEsMHg5MCwweDdmLDB4ZWQsMHhlMCwweDY0LDB4MDYsMHg3MCwweDUyLDB4OTAsMHg3Nn19LAorIHsxNiwweDEwYzAsMCx7MHgxOCwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzYsMHgzOCwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzYSwweDc0LDB4MGEsMHhmMH19LAorIHsxNiwweDEwZDAsMCx7MHg5MCwweDc2LDB4MWMsMHhmMCwweDkwLDB4NzYsMHgxYiwweDc0LDB4MDMsMHhmMCwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MH19LAorIHsxNiwweDEwZTAsMCx7MHgyZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDEwZjAsMCx7MHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZCwweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3Nn19LAorIHsxNiwweDExMDAsMCx7MHgxYywweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMX19LAorIHsxNiwweDExMTAsMCx7MHhlNCwweDkwLDB4NzYsMHgxZSwweGYwLDB4OTAsMHg3NiwweDFjLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmUsMHg2Zn19LAorIHsxNiwweDExMjAsMCx7MHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg2MH19LAorIHsxNiwweDExMzAsMCx7MHgxMywweDE0LDB4NzAsMHgwMiwweDIxLDB4YmYsMHgyNCwweDAyLDB4NjAsMHgwMiwweDgxLDB4NzUsMHg5MCwweDdmLDB4YjQsMHhlMH19LAorIHsxNiwweDExNDAsMCx7MHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4NmIsMHg5MCwweDdmLDB4ZWEsMHhlMH19LAorIHsxNiwweDExNTAsMCx7MHhmNCwweDcwLDB4NGEsMHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZn19LAorIHsxNiwweDExNjAsMCx7MHg5MCwweDc2LDB4MWIsMHhlMCwweGZkLDB4YzMsMHg5ZiwweDUwLDB4MmIsMHhlZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYn19LAorIHsxNiwweDExNzAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMH19LAorIHsxNiwweDExODAsMCx7MHg3NCwweDAwLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMH19LAorIHsxNiwweDExOTAsMCx7MHgwNCwweGYwLDB4ODAsMHhjNywweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweGVlLDB4NzUsMHhmMH19LAorIHsxNiwweDExYTAsMCx7MHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMH19LAorIHsxNiwweDExYjAsMCx7MHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH19LAorIHsxNiwweDExYzAsMCx7MHg3ZiwweGU5LDB4ZTAsMHgyNCwweDdlLDB4NzAsMHgwMiwweDQxLDB4N2UsMHgxNCwweDcwLDB4MDIsMHg2MSwweDIzLDB4MTQsMHg3MH19LAorIHsxNiwweDExZDAsMCx7MHgwMiwweDYxLDB4YzgsMHgyNCwweDAzLDB4NjAsMHgwMiwweDgxLDB4NmQsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZH19LAorIHsxNiwweDExZTAsMCx7MHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzYsMHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYn19LAorIHsxNiwweDExZjAsMCx7MHhlMCwweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDEyMDAsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZH19LAorIHsxNiwweDEyMTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZH19LAorIHsxNiwweDEyMjAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMH19LAorIHsxNiwweDEyMzAsMCx7MHg3NCwweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMH19LAorIHsxNiwweDEyNDAsMCx7MHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzYsMHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYn19LAorIHsxNiwweDEyNTAsMCx7MHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMH19LAorIHsxNiwweDEyNjAsMCx7MHg5MCwweDdmLDB4MDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDEyNzAsMCx7MHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyLDB4OTAsMHg3Zn19LAorIHsxNiwweDEyODAsMCx7MHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkLDB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYX19LAorIHsxNiwweDEyOTAsMCx7MHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhjMywweDlmLDB4NTAsMHg0ZiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH19LAorIHsxNiwweDEyYTAsMCx7MHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZH19LAorIHsxNiwweDEyYjAsMCx7MHgwNCwweGYwLDB4NzQsMHgwMCwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NX19LAorIHsxNiwweDEyYzAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3Nn19LAorIHsxNiwweDEyZDAsMCx7MHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZn19LAorIHsxNiwweDEyZTAsMCx7MHhmMCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNX19LAorIHsxNiwweDEyZjAsMCx7MHhmMCwweDIyLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDEzMDAsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZn19LAorIHsxNiwweDEzMTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NH19LAorIHsxNiwweDEzMjAsMCx7MHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZCwweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3Nn19LAorIHsxNiwweDEzMzAsMCx7MHgxYiwweGYwLDB4OTAsMHg3NiwweDNhLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMH19LAorIHsxNiwweDEzNDAsMCx7MHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZX19LAorIHsxNiwweDEzNTAsMCx7MHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNX19LAorIHsxNiwweDEzNjAsMCx7MHg4MywweGVlLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDEzNzAsMCx7MHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDEzODAsMCx7MHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3Nn19LAorIHsxNiwweDEzOTAsMCx7MHgxZSwweGUwLDB4OTAsMHg3ZiwweGI1LDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH19LAorIHsxNiwweDEzYTAsMCx7MHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NX19LAorIHsxNiwweDEzYjAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMX19LAorIHsxNiwweDEzYzAsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmQsMHg5MH19LAorIHsxNiwweDEzZDAsMCx7MHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMH19LAorIHsxNiwweDEzZTAsMCx7MHhjMywweDlmLDB4NTAsMHg0ZiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDEzZjAsMCx7MHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmQsMHhmNX19LAorIHsxNiwweDE0MDAsMCx7MHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNX19LAorIHsxNiwweDE0MTAsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjAsMHg3NH19LAorIHsxNiwweDE0MjAsMCx7MHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNH19LAorIHsxNiwweDE0MzAsMCx7MHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MWIsMHhlMH19LAorIHsxNiwweDE0NDAsMCx7MHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MH19LAorIHsxNiwweDE0NTAsMCx7MHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDE0NjAsMCx7MHg4MywweGUwLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNH19LAorIHsxNiwweDE0NzAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNH19LAorIHsgNSwweDE0ODAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4MTQ4NSwwLHsweDc0LDB4MDAsMHhmNSwweDg2LDB4OTAsMHhmZCwweGE1LDB4N2MsMHgwNSwweGEzLDB4ZTUsMHg4MiwweDQ1LDB4ODMsMHg3MCwweGY5fX0sCisgeyAxLDB4MTQ5NSwwLHsweDIyfX0sCisgezE2LDB4MTQ5NiwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4NDQsMHg4MCwweGYwLDB4NDMsMHg4NywweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIyfX0sCisgezE2LDB4MTRhNiwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweDhkLDB4ZTAsMHhjMCwweGUwfX0sCisgezE2LDB4MTRiNiwwLHsweDhjLDB4ZTAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHgwNSwweDg2LDB4YzAsMHg4NCwweGMwLDB4ODUsMHg3ZCwweDAwfX0sCisgezE2LDB4MTRjNiwwLHsweDkwLDB4N2YsMHhlMywweDc0LDB4N2IsMHhmMCwweGEzLDB4NzQsMHg4MCwweGYwLDB4N2MsMHgxMSwweDkwLDB4N2YsMHg5OSwweGUwfX0sCisgezE2LDB4MTRkNiwwLHsweDU0LDB4NDAsMHhkYywweDAzLDB4MDIsMHgxNCwweGYzLDB4YjQsMHgwMCwweDEzLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg0MCwweGYwfX0sCisgezE2LDB4MTRlNiwwLHsweDkwLDB4N2YsMHhlNSwweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4MDIsMHgxNCwweGQyLDB4OTAsMHg3NiwweDkwfX0sCisgezE2LDB4MTRmNiwwLHsweGUwLDB4YjQsMHgwMSwweDEyLDB4OTAsMHg3NiwweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwfX0sCisgezE2LDB4MTUwNiwwLHsweDkwLDB4N2YsMHg2YywweDAyLDB4MTUsMHg1NywweGI0LDB4MDIsMHgxMiwweDkwLDB4NzYsMHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwfX0sCisgezE2LDB4MTUxNiwwLHsweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NmMsMHgwMiwweDE1LDB4OTYsMHhiNCwweDAzLDB4MTIsMHg5MCwweDc2fX0sCisgezE2LDB4MTUyNiwwLHsweDhmLDB4ZTAsMHgyZCwweGZkLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNSwweGUxfX0sCisgezE2LDB4MTUzNiwwLHsweGI0LDB4MDQsMHgxMiwweDkwLDB4NzYsMHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwfX0sCisgezE2LDB4MTU0NiwwLHsweDdmLDB4NmMsMHgwMiwweDE2LDB4MTAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NmMsMHgwMiwweDE2fX0sCisgezE2LDB4MTU1NiwwLHsweDQwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhmMiwweDdkfX0sCisgezE2LDB4MTU2NiwwLHsweDAyLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4NTQsMHgwNCwweGI0fX0sCisgezE2LDB4MTU3NiwwLHsweDAwLDB4MDUsMHgwNSwweDg2LDB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweGYwfX0sCisgezE2LDB4MTU4NiwwLHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGQ0LDB4MDIsMHgxNiwweDQwfX0sCisgezE2LDB4MTU5NiwwLHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfX0sCisgezE2LDB4MTVhNiwwLHsweGYwLDB4ZjAsMHhkZCwweGVjLDB4N2QsMHgwMiwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4MTViNiwwLHsweDliLDB4ZTAsMHg1NCwweDA0LDB4YjQsMHgwMCwweDA1LDB4MDUsMHg4NiwweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0fX0sCisgezE2LDB4MTVjNiwwLHsweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfX0sCisgeyA2LDB4MTVkNiwwLHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH19LAorIHsxNiwweDE1ZGMsMCx7MHhkZCwweGNlLDB4MDIsMHgxNiwweDQwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGZhLDB4N2QsMHgwMiwweDA1LDB4ODYsMHg5MH19LAorIHsxNiwweDE1ZWMsMCx7MHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHg1NCwweDA0LDB4YjQsMHgwMCwweDA1LDB4MDUsMHg4Nn19LAorIHsxNiwweDE1ZmMsMCx7MHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZH19LAorIHsxNiwweDE2MGMsMCx7MHhkYywweDAyLDB4MTYsMHg0MCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZjgsMHg3ZCwweDAyLDB4MDUsMHg4Nn19LAorIHsxNiwweDE2MWMsMCx7MHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNCwweDAwLDB4MDUsMHgwNX19LAorIHsxNiwweDE2MmMsMCx7MHg4NiwweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMCwweGYwLDB4ZjAsMHhmMH19LAorIHsxNiwweDE2M2MsMCx7MHhmMCwweGYwLDB4ZGQsMHhkYSwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweGQwLDB4ODUsMHhkMCwweDg0LDB4MDUsMHg4Nn19LAorIHsxNiwweDE2NGMsMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZn19LAorIHsgNSwweDE2NWMsMCx7MHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfX0sCisgezE2LDB4MTY2MSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHg5MCwweDc2LDB4N2MsMHhlMCwweDkwLDB4N2YsMHg2ZiwweGYwfX0sCisgezE2LDB4MTY3MSwwLHsweDkwLDB4NzYsMHg3ZCwweGUwLDB4OTAsMHg3ZiwweDZmLDB4ZjAsMHg5MCwweDc2LDB4N2UsMHhlMCwweDkwLDB4N2YsMHg2ZiwweGYwfX0sCisgeyA5LDB4MTY4MSwwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn19LAorIHsxNiwweDE2OGEsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4M319LAorIHsxNiwweDE2OWEsMCx7MHgwNSwweDg2LDB4YzAsMHg4NCwweGMwLDB4ODUsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4YmYsMHgwMCwweDAzLDB4MDIsMHgxN319LAorIHsxNiwweDE2YWEsMCx7MHgwMSwweDkwLDB4N2YsMHg5NiwweGUwLDB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDE2YmEsMCx7MHg2MiwweGUwLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHg3Zn19LAorIHsxNiwweDE2Y2EsMCx7MHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4NzYsMHg4ZSwweGUwLDB4YjQsMHgwMSwweDA1LDB4MDUsMHg4Nn19LAorIHsxNiwweDE2ZGEsMCx7MHgwMiwweDE2LDB4ZjYsMHhiNCwweDAyLDB4MDUsMHgwNSwweDg2LDB4MDIsMHgxNiwweGViLDB4MDUsMHg4NiwweDAyLDB4MTYsMHhmYn19LAorIHsxNiwweDE2ZWEsMCx7MHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhkZiwweGY4LDB4MDIsMHgxNiwweGZiLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhkZn19LAorIHsxNiwweDE2ZmEsMCx7MHhmYSwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweGQwLDB4ODUsMHhkMCwweDg0LDB4MDUsMHg4NiwweGQwLDB4ODMsMHhkMH19LAorIHsxMiwweDE3MGEsMCx7MHg4MiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9fSwKKyB7MTYsMHgxNzE2LDAsezB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGUwLDB4ZTgsMHhjMCwweGUwLDB4NzgsMHhkMSwweGU4LDB4MTQsMHhmOCwweDcwLDB4ZmJ9fSwKKyB7MTAsMHgxNzI2LDAsezB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhlMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4MjJ9fSwKKyB7MTYsMHgxNzMwLDAsezB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGUwLDB4ZTgsMHhjMCwweGUwLDB4NzgsMHg3OCwweGU4LDB4MTQsMHhmOCwweDcwLDB4ZmJ9fSwKKyB7MTAsMHgxNzQwLDAsezB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhlMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4MjJ9fSwKKyB7IDcsMHgxNzRhLDAsezB4OTAsMHg3ZiwweGM1LDB4NzQsMHgwMiwweGYwLDB4MjJ9fSwKKyB7MTYsMHgxNzUxLDAsezB4OTAsMHg3ZSwweGMwLDB4ZTAsMHg5MCwweDc2LDB4NDUsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4OTAsMHg3NiwweDQ0LDB4ZjB9fSwKKyB7MTYsMHgxNzYxLDAsezB4OTAsMHg3ZSwweGMyLDB4ZTAsMHg5MCwweDc2LDB4NDMsMHhmMCwweGI0LDB4MDAsMHgwMywweDAyLDB4MTcsMHg3OCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxNzcxLDAsezB4MTksMHg3NCwweDAzLDB4ZjAsMHgwMiwweDE3LDB4OGUsMHg5MCwweDc2LDB4NDQsMHhlMCwweGI0LDB4YmIsMHgwOSwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxNzgxLDAsezB4MTksMHg3NCwweDAyLDB4ZjAsMHgwMiwweDE3LDB4OGUsMHg5MCwweDc2LDB4MTksMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4NDJ9fSwKKyB7IDMsMHgxNzkxLDAsezB4ZTQsMHhmMCwweDIyfX0sCisgeyA0LDB4MTc5NCwwLHsweDhkLDB4MjksMHg4YiwweDJhfX0sCisgezE2LDB4MTc5OCwwLHsweDEyLDB4NDksMHhmZiwweGVhLDB4NDksMHg2MCwweDU3LDB4MTIsMHgzNiwweDkyLDB4N2UsMHgwMCwweDI5LDB4ZmYsMHhlZSwweDNhfX0sCisgezE2LDB4MTdhOCwwLHsweGM5LDB4ZWYsMHhjOSwweDc1LDB4MmIsMHhmZiwweGY1LDB4MmMsMHg4OSwweDJkLDB4YWIsMHgyYiwweGFhLDB4MmMsMHhhOSwweDJkfX0sCisgezE2LDB4MTdiOCwwLHsweDkwLDB4MDAsMHgwMSwweDEyLDB4MzYsMHhhYiwweGZmLDB4NjQsMHgwNCwweDYwLDB4MDUsMHhlZiwweDY0LDB4MDUsMHg3MCwweDJlfX0sCisgezE2LDB4MTdjOCwwLHsweGVmLDB4YjQsMHgwNCwweDE1LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgzNiwweGFiLDB4NjUsMHgyOSwweDcwLDB4MGIsMHg5MCwweDAwfX0sCisgezE2LDB4MTdkOCwwLHsweDAzLDB4MTIsMHgzNiwweGFiLDB4NjUsMHgyYSwweDcwLDB4MDEsMHgyMiwweDEyLDB4MzYsMHg5MiwweDdlLDB4MDAsMHgyOSwweGZmfX0sCisgezE2LDB4MTdlOCwwLHsweGVlLDB4M2EsMHhjOSwweGVmLDB4YzksMHg3NSwweDJiLDB4ZmYsMHhmNSwweDJjLDB4ODksMHgyZCwweDgwLDB4YmMsMHg3YiwweDAwfX0sCisgeyA0LDB4MTdmOCwwLHsweDdhLDB4MDAsMHg3OSwweDAwfX0sCisgeyAxLDB4MTdmYywwLHsweDIyfX0sCisgeyAzLDB4MTdmZCwwLHsweGMyLDB4OGIsMHgzMn19LAorIHsxNiwweDE4MDAsMCx7MHg5MCwweDc2LDB4OTAsMHhlMCwweDE0LDB4NjAsMHgzNywweDE0LDB4NzAsMHgwMiwweDAxLDB4ZDgsMHgxNCwweDcwLDB4MDIsMHgyMX19LAorIHsxNiwweDE4MTAsMCx7MHg3MiwweDE0LDB4NzAsMHgwMiwweDQxLDB4M2IsMHgyNCwweDA0LDB4NjAsMHgwMiwweDYxLDB4MDMsMHg5MCwweDdmLDB4ZmMsMHg3NH19LAorIHsxNiwweDE4MjAsMCx7MHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg1NH19LAorIHsxNiwweDE4MzAsMCx7MHgwNSwweGYwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgxYSwweGYwLDB4YzIsMHgyZSwweDIyLDB4OTAsMHg3Nn19LAorIHsxNiwweDE4NDAsMCx7MHg5NSwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4MzAsMHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MH19LAorIHsxNiwweDE4NTAsMCx7MHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MH19LAorIHsxNiwweDE4NjAsMCx7MHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjIsMHg5MH19LAorIHsxNiwweDE4NzAsMCx7MHg3ZiwweGZjLDB4NzQsMHg3NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYn19LAorIHsxNiwweDE4ODAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MH19LAorIHsxNiwweDE4OTAsMCx7MHhmMCwweGVmLDB4YjQsMHgwMiwweDIyLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHg2OCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmY319LAorIHsxNiwweDE4YTAsMCx7MHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMiwweGYwLDB4ZTQsMHg5MH19LAorIHsxNiwweDE4YjAsMCx7MHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZX19LAorIHsxNiwweDE4YzAsMCx7MHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmYn19LAorIHsxNiwweDE4ZDAsMCx7MHhmMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4ZDIsMHgyZSwweDIyLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg0NH19LAorIHsxNiwweDE4ZTAsMCx7MHgwMiwweGYwLDB4MzAsMHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NH19LAorIHsxNiwweDE4ZjAsMCx7MHhmYiwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMX19LAorIHsxNiwweDE5MDAsMCx7MHhmMCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjIsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDMwLDB4ZjAsMHg5MH19LAorIHsxNiwweDE5MTAsMCx7MHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NH19LAorIHsxNiwweDE5MjAsMCx7MHhmZCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjIsMHg5MH19LAorIHsxNiwweDE5MzAsMCx7MHg3ZiwweGZjLDB4NzQsMHgxYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZn19LAorIHsxNiwweDE5NDAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MH19LAorIHsxNiwweDE5NTAsMCx7MHhmMCwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5N319LAorIHsxNiwweDE5NjAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHhkMn19LAorIHsxNiwweDE5NzAsMCx7MHgyZSwweDIyLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg0NCwweDA4LDB4ZjAsMHgzMH19LAorIHsxNiwweDE5ODAsMCx7MHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MH19LAorIHsxNiwweDE5OTAsMCx7MHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4OTAsMHg3Nn19LAorIHsxNiwweDE5YTAsMCx7MHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NH19LAorIHsxNiwweDE5YjAsMCx7MHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NH19LAorIHsxNiwweDE5YzAsMCx7MHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjUsMHg5MH19LAorIHsxNiwweDE5ZDAsMCx7MHg3ZiwweGZjLDB4NzQsMHhjOCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZn19LAorIHsxNiwweDE5ZTAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMH19LAorIHsxNiwweDE5ZjAsMCx7MHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMywweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHg5OCwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDFhMDAsMCx7MHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4NWYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZH19LAorIHsxNiwweDFhMTAsMCx7MHhmMCwweDQ0LDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDMwLDB4M2YsMHgwOX19LAorIHsxNiwweDFhMjAsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsxNiwweDFhMzAsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4ZDIsMHgyZSwweDIyLDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NH19LAorIHsxNiwweDFhNDAsMCx7MHhmZSwweGYwLDB4NDQsMHgwMiwweGYwLDB4NDQsMHgwOCwweGYwLDB4MzAsMHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MH19LAorIHsxNiwweDFhNTAsMCx7MHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MH19LAorIHsxNiwweDFhNjAsMCx7MHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjUsMHg5MH19LAorIHsxNiwweDFhNzAsMCx7MHg3ZiwweGZjLDB4NzQsMHhiNCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYn19LAorIHsxNiwweDFhODAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMH19LAorIHsxNiwweDFhOTAsMCx7MHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMiwweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhiMCwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDFhYTAsMCx7MHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMn19LAorIHsxNiwweDFhYjAsMCx7MHhmMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwM319LAorIHsxNiwweDFhYzAsMCx7MHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4NjgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4Zn19LAorIHsxNiwweDFhZDAsMCx7MHg3NCwweDVmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDQ0LDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3Nn19LAorIHsxNiwweDFhZTAsMCx7MHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMH19LAorIHsxNiwweDFhZjAsMCx7MHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMn19LAorIHsgNCwweDFiMDAsMCx7MHhmMCwweGQyLDB4MmUsMHgyMn19LAorIHsxNiwweDFiMDQsMCx7MHgzMCwweDJjLDB4MzgsMHhjMiwweDJjLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZSwweDkwLDB4NzYsMHg3Y319LAorIHsxNiwweDFiMTQsMCx7MHg3NCwweGMwLDB4ZjAsMHhhMywweDc0LDB4MTQsMHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGQsMHhlNH19LAorIHsxNiwweDFiMjQsMCx7MHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHgxMCwweGYwLDB4YTMsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwYn19LAorIHsxMiwweDFiMzQsMCx7MHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweDE4LDB4ZjAsMHhhMywweGYwLDB4MjJ9fSwKKyB7MTYsMHgxYjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxYzkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxY2EwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxY2IwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxY2MwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxY2QwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxY2UwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxY2YwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZDkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZGEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZGMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZGQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZGYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZTkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTQsMHgxZWIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlYmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlY2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFlZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmMGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmMWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmMmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsgMiwweDFmM2UsMCx7MHgwMCwweDAwfX0sCisgezE2LDB4MWY0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWY1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWY2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWY3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWY4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWY5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWZhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWZiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWZjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWZkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWZlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWZmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjAwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjAxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjAyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjAzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjA0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjA1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjA2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjA3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjA4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjA5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjBhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjBiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjBjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjBkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjBlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjBmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjEwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjExMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjEyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjEzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjE0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjE1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjE2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjE3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjE4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjE5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjFhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjFiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjFjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjFkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjFlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjFmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjIwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjIxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjIyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjIzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjI0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjI1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjI3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjI4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjJhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjJiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjJkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjJlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjMwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjMxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjMzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjM0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjM2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE0LDB4MjM3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyMzllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyM2FlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyM2JlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyM2NlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyM2RlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyM2VlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyM2ZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNDllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNGFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNGJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNGNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNGRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNGVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNGZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNThlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNTllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNWFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNWNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNWRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNWZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNjllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNmFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNmJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNmNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNmRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTQsMHgyNmVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI2ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3MGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3MWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3MmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3M2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3NGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3NWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3NmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3N2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3OGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3OWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3YWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3YmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3Y2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3ZGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDI3ZWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsgNSwweDI3ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDIyfX0sCisgezE2LDB4MjgwMSwwLHsweGMyLDB4MjAsMHhjMiwweDIxLDB4YzIsMHgyYSwweDkwLDB4N2YsMHhlOCwweGUwLDB4MTIsMHgzNywweGY5LDB4MjgsMHgzMCwweDAwfX0sCisgezE2LDB4MjgxMSwwLHsweDI4LDB4OGMsMHgwMSwweDI4LDB4YTIsMHgwMiwweDJhLDB4MWYsMHgyMSwweDJhLDB4NmEsMHgyMiwweDI5LDB4M2QsMHg4MCwweDI5fX0sCisgezE2LDB4MjgyMSwwLHsweDdkLDB4ODEsMHgyOSwweGQxLDB4ODIsMHgyYSwweDg0LDB4YTEsMHgyYSwweGJhLDB4YTIsMHgwMCwweDAwLDB4MmEsMHhiZiwweDkwfX0sCisgezE2LDB4MjgzMSwwLHsweDdmLDB4ZTksMHhlMCwweDE0LDB4NjAsMHgxMSwweDI0LDB4ZmUsMHg2MCwweDI4LDB4MjQsMHhmZSwweDYwLDB4M2IsMHgyNCwweGZjfX0sCisgezE2LDB4Mjg0MSwwLHsweDcwLDB4NDAsMHgxMiwweDRiLDB4YTAsMHg0MSwweGNiLDB4MTIsMHg0ZCwweGE3LDB4NDAsMHgwMiwweDQxLDB4Y2IsMHg5MCwweDdmfX0sCisgezE2LDB4Mjg1MSwwLHsweGVhLDB4ZTAsMHhiNCwweDAxLDB4MDQsMHhjMiwweDIyLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgezE2LDB4Mjg2MSwwLHsweDQxLDB4Y2IsMHgxMiwweDRkLDB4YTksMHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4MDEsMHgwNCwweGQyLDB4MjIsMHg0MSwweGNifX0sCisgezE2LDB4Mjg3MSwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgezE2LDB4Mjg4MSwwLHsweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0fX0sCisgezE2LDB4Mjg5MSwwLHsweGY1LDB4NzAsMHgwNSwweDEyLDB4NDgsMHgwMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxfX0sCisgezE2LDB4MjhhMSwwLHsweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZkLDB4NjAsMHg1NCwweDI0LDB4MDIsMHg2MCwweDAyLDB4MjEsMHgzNCwweDEyfX0sCisgezE2LDB4MjhiMSwwLHsweDRkLDB4YTcsMHg0MCwweDAyLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlYSwweGUwLDB4NzAsMHgzOCwweDkwLDB4N2YsMHhlYywweGUwfX0sCisgezE2LDB4MjhjMSwwLHsweGY0LDB4NTQsMHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0fX0sCisgezE2LDB4MjhkMSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhlYywweGUwLDB4NTQsMHg4MCwweGZmfX0sCisgezE2LDB4MjhlMSwwLHsweDEzLDB4MTMsMHgxMywweDU0LDB4MWYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4OTAsMHg3ZiwweGQ3LDB4ZjAsMHhlMCwweDQ0fX0sCisgezE2LDB4MjhmMSwwLHsweDIwLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4MTIsMHg0ZCwweGE5fX0sCisgezE2LDB4MjkwMSwwLHsweDQwLDB4MDIsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3MCwweDIwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0fX0sCisgezE2LDB4MjkxMSwwLHsweDgwLDB4ZmYsMHhjNCwweDU0LDB4MGYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4MjUsMHhlMCwweDI0LDB4YjQsMHhmNSwweDgyfX0sCisgezE2LDB4MjkyMSwwLHsweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfX0sCisgezE2LDB4MjkzMSwwLHsweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlOSwweGUwfX0sCisgezE2LDB4Mjk0MSwwLHsweDYwLDB4MTIsMHgyNCwweGY4LDB4NjAsMHgwOSwweDI0LDB4MDIsMHg3MCwweDI5LDB4MTIsMHg0MywweGRiLDB4NDEsMHhjYiwweDEyfX0sCisgezE2LDB4Mjk1MSwwLHsweDRkLDB4NWMsMHg0MSwweGNiLDB4MTIsMHg0ZCwweGE1LDB4YTIsMHgyMiwweGU0LDB4MzMsMHhmZiwweDI1LDB4ZTAsMHhmZiwweGEyfX0sCisgezE2LDB4Mjk2MSwwLHsweDIzLDB4ZTQsMHgzMywweDRmLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyfX0sCisgezE2LDB4Mjk3MSwwLHsweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlOSwweGUwfX0sCisgezE2LDB4Mjk4MSwwLHsweDYwLDB4MzMsMHgyNCwweGY2LDB4NjAsMHgyYSwweDI0LDB4MDQsMHg3MCwweDNkLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgyNCwweGRlfX0sCisgezE2LDB4Mjk5MSwwLHsweDYwLDB4MGMsMHgwNCwweDcwLDB4MTIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmfX0sCisgezE2LDB4MjlhMSwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNifX0sCisgezE2LDB4MjliMSwwLHsweDEyLDB4NDYsMHg4NSwweDQxLDB4Y2IsMHgxMiwweDRkLDB4YTUsMHhlNCwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHhmMCwweDkwfX0sCisgezE2LDB4MjljMSwwLHsweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNifX0sCisgezE2LDB4MjlkMSwwLHsweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmNCwweDYwLDB4MzQsMHgyNCwweDBjLDB4NzAsMHgzOSwweDEyLDB4NGQsMHhhNSwweDkwfX0sCisgezE2LDB4MjllMSwwLHsweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTQsMHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1fX0sCisgezE2LDB4MjlmMSwwLHsweGUwLDB4MjQsMHhiNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGZkLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4MmEwMSwwLHsweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwfX0sCisgezE2LDB4MmExMSwwLHsweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmfX0sCisgezE2LDB4MmEyMSwwLHsweGU5LDB4ZTAsMHgyNCwweGY2LDB4NjAsMHgxMiwweDE0LDB4NjAsMHgxYSwweDI0LDB4MDIsMHg3MCwweDFkLDB4ZDIsMHgyMCwweDkwfX0sCisgezE2LDB4MmEzMSwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MTIsMHhkMiwweDIwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfX0sCisgezE2LDB4MmE0MSwwLHsweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjAsMHgyMCwweDE4LDB4OTAsMHg3ZiwweGVlfX0sCisgezE2LDB4MmE1MSwwLHsweGUwLDB4NzAsMHgwNCwweGEzLDB4ZTAsMHg2MCwweDBiLDB4ZDIsMHgyOSwweGQyLDB4MjcsMHgxMiwweDE3LDB4NGEsMHhkMiwweDJhfX0sCisgezE2LDB4MmE2MSwwLHsweDgwLDB4MDMsMHgxMiwweDA4LDB4MDAsMHhjMiwweDIwLDB4ODAsMHg2MSwweDkwLDB4N2YsMHhlZSwweGUwLDB4NzAsMHgwNCwweGEzfX0sCisgezE2LDB4MmE3MSwwLHsweGUwLDB4NjAsMHgwYiwweGQyLDB4MjksMHhkMiwweDI4LDB4MTIsMHgxNywweDRhLDB4ZDIsMHgyYSwweDgwLDB4NGMsMHgxMiwweDM4fX0sCisgezE2LDB4MmE4MSwwLHsweDc0LDB4ODAsMHg0NywweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDYwLDB4MTIsMHgxNCwweDYwLDB4MWEsMHgyNCwweDAyfX0sCisgezE2LDB4MmE5MSwwLHsweDcwLDB4MWQsMHhkMiwweDIxLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDEyLDB4ZDIsMHgyMSwweDkwfX0sCisgezE2LDB4MmFhMSwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwfX0sCisgezE2LDB4MmFiMSwwLHsweDIxLDB4MDMsMHgxMiwweDEwLDB4MDAsMHhjMiwweDIxLDB4ODAsMHgxMSwweDEyLDB4MmEsMHhkNiwweDgwLDB4MGMsMHgxMiwweDRkfX0sCisgezE2LDB4MmFjMSwwLHsweGFiLDB4NTAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjAsMHgyYSwweDA3LDB4OTAsMHg3ZiwweGI0fX0sCisgeyA1LDB4MmFkMSwwLHsweGUwLDB4NDQsMHgwMiwweGYwLDB4MjJ9fSwKKyB7MTYsMHgyYWQ2LDAsezB4ZTQsMHg5MCwweDc2LDB4MjcsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDJ9fSwKKyB7MTYsMHgyYWU2LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9fSwKKyB7MTYsMHgyYWY2LDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyNywweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9fSwKKyB7MTYsMHgyYjA2LDAsezB4ZWYsMHhiNCwweDA2LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MGZ9fSwKKyB7MTYsMHgyYjE2LDAsezB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgyOCwweGYwLDB4MjR9fSwKKyB7MTYsMHgyYjI2LDAsezB4OWYsMHg3MCwweDAyLDB4YTEsMHg3NCwweDI0LDB4MjEsMHg2MCwweDAyLDB4YTEsMHhhMSwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjR9fSwKKyB7MTYsMHgyYjM2LDAsezB4N2UsMHg3MCwweDAyLDB4NjEsMHhmYywweDE0LDB4NzAsMHgwMiwweDgxLDB4YjUsMHgyNCwweDAyLDB4NjAsMHgwMiwweGExLDB4NmN9fSwKKyB7MTYsMHgyYjQ2LDAsezB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmN9fSwKKyB7MTYsMHgyYjU2LDAsezB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OSwweDAwLDB4Nzh9fSwKKyB7MTYsMHgyYjY2LDAsezB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWN9fSwKKyB7MTYsMHgyYjc2LDAsezB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjB9fSwKKyB7MTYsMHgyYjg2LDAsezB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmR9fSwKKyB7MTYsMHgyYjk2LDAsezB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTJ9fSwKKyB7MTYsMHgyYmE2LDAsezB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMCwweGU0LDB4YTN9fSwKKyB7MTYsMHgyYmI2LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjR9fSwKKyB7MTYsMHgyYmM2LDAsezB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmV9fSwKKyB7MTYsMHgyYmQ2LDAsezB4YTMsMHhlMCwweGZmLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NjB9fSwKKyB7MTYsMHgyYmU2LDAsezB4MDIsMHhhMSwweGE4LDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTB9fSwKKyB7MTYsMHgyYmY2LDAsezB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDd9fSwKKyB7MTYsMHgyYzA2LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTN9fSwKKyB7MTYsMHgyYzE2LDAsezB4ZTAsMHhmZiwweDdiLDB4NDQsMHg3YSwweGFjLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTN9fSwKKyB7MTYsMHgyYzI2LDAsezB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTMsMHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjV9fSwKKyB7MTYsMHgyYzM2LDAsezB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgyYzQ2LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2J9fSwKKyB7MTYsMHgyYzU2LDAsezB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHgyYzY2LDAsezB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjB9fSwKKyB7MTYsMHgyYzc2LDAsezB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgyYzg2LDAsezB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHgwMCwweDdhLDB4Nzd9fSwKKyB7MTYsMHgyYzk2LDAsezB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDYwLDB4MDIsMHhhMSwweGE4LDB4OTAsMHg3ZiwweDAwLDB4ZjB9fSwKKyB7MTYsMHgyY2E2LDAsezB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTB9fSwKKyB7MTYsMHgyY2I2LDAsezB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgyY2M2LDAsezB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4NDQsMHg3YSwweGFjLDB4Nzl9fSwKKyB7MTYsMHgyY2Q2LDAsezB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTN9fSwKKyB7MTYsMHgyY2U2LDAsezB4NzQsMHhhYywweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTB9fSwKKyB7MTYsMHgyY2Y2LDAsezB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTN9fSwKKyB7MTYsMHgyZDA2LDAsezB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDB9fSwKKyB7MTYsMHgyZDE2LDAsezB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjB9fSwKKyB7MTYsMHgyZDI2LDAsezB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGZ9fSwKKyB7MTYsMHgyZDM2LDAsezB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTN9fSwKKyB7MTYsMHgyZDQ2LDAsezB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4Mzd9fSwKKyB7MTYsMHgyZDU2LDAsezB4YWIsMHg3MCwweDRmLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTB9fSwKKyB7MTYsMHgyZDY2LDAsezB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9fSwKKyB7MTYsMHgyZDc2LDAsezB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDFlLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGZ9fSwKKyB7MTYsMHgyZDg2LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9fSwKKyB7MTYsMHgyZDk2LDAsezB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9fSwKKyB7IDMsMHgyZGE2LDAsezB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4MmRhOSwwLHsweGU0LDB4OTAsMHg3NiwweDM2LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MmRiOSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyfX0sCisgezE2LDB4MmRjOSwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1fX0sCisgezE2LDB4MmRkOSwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmfX0sCisgezE2LDB4MmRlOSwwLHsweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgxMCwweGYwfX0sCisgezE2LDB4MmRmOSwwLHsweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA1fX0sCisgezE2LDB4MmUwOSwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0fX0sCisgezE2LDB4MmUxOSwwLHsweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1fX0sCisgezE2LDB4MmUyOSwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmfX0sCisgezE2LDB4MmUzOSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0fX0sCisgezE2LDB4MmU0OSwwLHsweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwfX0sCisgezE2LDB4MmU1OSwwLHsweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fX0sCisgezE2LDB4MmU2OSwwLHsweDAxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4MmU3OSwwLHsweDc0LDB4MDMsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4MmU4OSwwLHsweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0fX0sCisgezE2LDB4MmU5OSwwLHsweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDEwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0fX0sCisgezE2LDB4MmVhOSwwLHsweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDYsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzfX0sCisgezE2LDB4MmViOSwwLHsweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwfX0sCisgezE2LDB4MmVjOSwwLHsweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4MmVkOSwwLHsweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4MmVlOSwwLHsweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MmVmOSwwLHsweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzfX0sCisgezE2LDB4MmYwOSwwLHsweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwfX0sCisgezE2LDB4MmYxOSwwLHsweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA4LDB4ZjAsMHhlZiwweDc1fX0sCisgezE2LDB4MmYyOSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDkwfX0sCisgezE2LDB4MmYzOSwwLHsweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MmY0OSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyfX0sCisgezE2LDB4MmY1OSwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDBhLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1fX0sCisgezE2LDB4MmY2OSwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwfX0sCisgezE2LDB4MmY3OSwwLHsweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyfX0sCisgezE2LDB4MmY4OSwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fX0sCisgezE2LDB4MmY5OSwwLHsweDA5LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4MmZhOSwwLHsweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0fX0sCisgezE2LDB4MmZiOSwwLHsweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0fX0sCisgezE2LDB4MmZjOSwwLHsweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDcsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzfX0sCisgezE0LDB4MmZkOSwwLHsweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4MjJ9fSwKKyB7MTYsMHgyZmU3LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyNiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDF9fSwKKyB7IDgsMHgyZmY3LDAsezB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsgMSwweDJmZmYsMCx7MHgzMn19LAorIHsxNiwweDMwMDAsMCx7MHg5MCwweDdmLDB4YjYsMHhlMCwweDIwLDB4ZTEsMHgwMiwweGMyLDB4M2QsMHhkMiwweDM2LDB4MjAsMHgzNiwweDAyLDB4NDEsMHg2ZX19LAorIHsxNiwweDMwMTAsMCx7MHgzMCwweDNkLDB4MDIsMHg0MSwweDZlLDB4OTAsMHg4MCwweDA3LDB4ZTAsMHg2MCwweDA0LDB4ZDIsMHgzNiwweDgwLDB4MDIsMHhjMn19LAorIHsxNiwweDMwMjAsMCx7MHgzNiwweDIwLDB4MzYsMHgwMiwweDQxLDB4MmUsMHhkMiwweDM1LDB4ZTQsMHhmNSwweDFhLDB4OTAsMHg4MCwweDA0LDB4ZTAsMHhmNX19LAorIHsxNiwweDMwMzAsMCx7MHgxOSwweDc0LDB4MDgsMHgyNSwweDBlLDB4ZjgsMHhhNiwweDE5LDB4ODUsMHgxOSwweDE4LDB4ZTUsMHgxOCwweDIwLDB4ZTcsMHgwNH19LAorIHsxNiwweDMwNDAsMCx7MHhkMiwweDM4LDB4ODAsMHgwMiwweGMyLDB4MzgsMHgzMCwweDM4LDB4MDIsMHgyMSwweGQ0LDB4ZTQsMHhmNSwweDE2LDB4ZTUsMHgxOX19LAorIHsxNiwweDMwNTAsMCx7MHhiNCwweGYwLDB4MGMsMHhkMiwweDM5LDB4NzUsMHgwOCwweDA0LDB4NzUsMHgwOSwweGYwLDB4MDUsMHgwZSwweDgwLDB4MDIsMHgwNX19LAorIHsxNiwweDMwNjAsMCx7MHgxNiwweGU1LDB4MTksMHg2NCwweGY3LDB4NzAsMHgzZCwweGMyLDB4MzksMHhlNSwweDBlLDB4MjQsMHhmZSwweDYwLDB4MTcsMHgxNH19LAorIHsxNiwweDMwNzAsMCx7MHg2MCwweDIyLDB4MjQsMHgwMywweDcwLDB4MjksMHg3NSwweDA4LDB4MDUsMHg3NSwweDA5LDB4ZjcsMHhlNCwweGY1LDB4MGEsMHhmNX19LAorIHsxNiwweDMwODAsMCx7MHgwYiwweDc1LDB4MGUsMHgwNCwweDgwLDB4MjAsMHg3NSwweDA4LDB4MDYsMHg3NSwweDBhLDB4ZjcsMHhlNCwweGY1LDB4MGIsMHg3NX19LAorIHsxNiwweDMwOTAsMCx7MHgwZSwweDA0LDB4ODAsMHgxMiwweDc1LDB4MDgsMHgwNywweDc1LDB4MGIsMHhmNywweDc1LDB4MGUsMHgwNCwweDgwLDB4MDcsMHgxMn19LAorIHsxNiwweDMwYTAsMCx7MHg0OCwweGYzLDB4ODAsMHgwMiwweDA1LDB4MTYsMHhlNSwweDE5LDB4NTQsMHhmOCwweDY0LDB4ZjgsMHg3MCwweDNiLDB4YzIsMHgzNX19LAorIHsxNiwweDMwYjAsMCx7MHhlNSwweDE5LDB4MjQsMHgwNywweDYwLDB4MGMsMHgyNCwweGZjLDB4NjAsMHgwOCwweDI0LDB4MDUsMHgyNCwweGY4LDB4NTAsMHgwNn19LAorIHsxNiwweDMwYzAsMCx7MHg4MCwweDA4LDB4ZDIsMHgzYSwweDgwLDB4MDYsMHhjMiwweDNhLDB4ODAsMHgwMiwweGQyLDB4M2EsMHg3NSwweDFhLDB4MDEsMHgyMH19LAorIHsxNiwweDMwZDAsMCx7MHgzYSwweDE5LDB4OTAsMHg3ZSwweDgwLDB4NzQsMHgwZiwweGYwLDB4YTMsMHhlNSwweDE5LDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhM319LAorIHsxNiwweDMwZTAsMCx7MHhmMCwweDkwLDB4N2YsMHhiNywweDc0LDB4MDQsMHhmMCwweDgwLDB4MDIsMHgwNSwweDE2LDB4MjAsMHgzOSwweDZkLDB4ZTUsMHgxOX19LAorIHsxNiwweDMwZjAsMCx7MHg2NCwweGY3LDB4NjAsMHg2NywweGU1LDB4MWEsMHg3MCwweDYzLDB4ZTUsMHgxOCwweDU0LDB4ZjAsMHg2NCwweGYwLDB4NzAsMHg1OX19LAorIHsxNiwweDMxMDAsMCx7MHg4NSwweDE4LDB4MTksMHhmNSwweDBlLDB4ZTUsMHgxOSwweDI0LDB4MGYsMHg2MCwweDFiLDB4MjQsMHhmZSwweDYwLDB4MTcsMHgyNH19LAorIHsxNiwweDMxMTAsMCx7MHhmZCwweDYwLDB4MjIsMHgxNCwweDYwLDB4MWYsMHgyNCwweDA1LDB4NzAsMHgyZiwweDc1LDB4MDgsMHgwMywweDA1LDB4MGUsMHg4NX19LAorIHsxNiwweDMxMjAsMCx7MHgxOCwweDA5LDB4ZDIsMHgzNywweDgwLDB4MjgsMHg3NSwweDA4LDB4MDIsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4NzUsMHgxNH19LAorIHsxNiwweDMxMzAsMCx7MHgwMSwweGQyLDB4MzcsMHg4MCwweDE5LDB4NzUsMHgwOCwweDA1LDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweGU0LDB4ZjUsMHgwYX19LAorIHsxNiwweDMxNDAsMCx7MHhmNSwweDBiLDB4NzUsMHgwZSwweDAzLDB4ZDIsMHgzNywweDgwLDB4MDUsMHgxMiwweDQ4LDB4ZjMsMHhjMiwweDM1LDB4MzAsMHgzNX19LAorIHsxNiwweDMxNTAsMCx7MHgwYSwweDg1LDB4MDgsMHgxMywweDg1LDB4MTgsMHgxMiwweDgwLDB4MDIsMHgwNSwweDE2LDB4ODUsMHgxOCwweDE5LDB4ZTUsMHgxNn19LAorIHsxNiwweDMxNjAsMCx7MHg2NCwweDA0LDB4NzAsMHg2MiwweGY1LDB4MGUsMHhlNSwweDE5LDB4NTQsMHhmMCwweGY1LDB4MTksMHhmNSwweDE1LDB4ODUsMHgxOH19LAorIHsxNiwweDMxNzAsMCx7MHgxOSwweGU1LDB4MTUsMHgyNCwweDcwLDB4NjAsMHgxOCwweDI0LDB4ZjAsMHg2MCwweDE0LDB4MjQsMHhmMCwweDYwLDB4MTAsMHgyNH19LAorIHsxNiwweDMxODAsMCx7MHhmMCwweDYwLDB4MWUsMHgyNCwweGYwLDB4NjAsMHgxYSwweDI0LDB4ZjAsMHg2MCwweDA0LDB4MjQsMHg2MCwweDcwLDB4MjcsMHhlNX19LAorIHsxNiwweDMxOTAsMCx7MHgxNSwweGM0LDB4NTQsMHgwZiwweGY1LDB4MTksMHhmNSwweDA4LDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweGQyLDB4MzcsMHg4MH19LAorIHsxNiwweDMxYTAsMCx7MHgxYSwweGU1LDB4MTUsMHhjNCwweDU0LDB4MGYsMHhmNSwweDE5LDB4ZjUsMHgwOCwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHg3NX19LAorIHsxNiwweDMxYjAsMCx7MHgxNCwweDAxLDB4ZDIsMHgzNywweDgwLDB4MDUsMHgxMiwweDQ4LDB4ZjMsMHhjMiwweDM1LDB4MzAsMHgzNSwweDBhLDB4ODUsMHgxOX19LAorIHsxNiwweDMxYzAsMCx7MHgxMywweDg1LDB4MTgsMHgxMiwweDgwLDB4MDIsMHgwNSwweDE2LDB4ZTUsMHgxNiwweGQzLDB4OTQsMHgwNSwweDQwLDB4NTcsMHgxMn19LAorIHsxNiwweDMxZDAsMCx7MHg0OCwweGYzLDB4ODAsMHg1MiwweDMwLDB4MzksMHgxNywweGU1LDB4MGUsMHg3MCwweDBhLDB4ODUsMHgwOCwweDA5LDB4NzUsMHgwOH19LAorIHsxNiwweDMxZTAsMCx7MHgwNCwweDA1LDB4MGUsMHg4MCwweDQxLDB4NzQsMHgwOCwweDI1LDB4MGUsMHhmOCwweGE2LDB4MTksMHg4MCwweDM4LDB4MjAsMHgzN319LAorIHsxNiwweDMxZjAsMCx7MHgyYSwweGU1LDB4MGUsMHhiNCwweDAxLDB4MGYsMHg4NSwweDA4LDB4MGEsMHg4NSwweDA5LDB4MGIsMHg4NSwweDEzLDB4MDgsMHg4NX19LAorIHsxNiwweDMyMDAsMCx7MHgxMiwweDA5LDB4NzUsMHgwZSwweDA0LDB4ZTUsMHgxNCwweGI0LDB4MDEsMHgxYywweDg1LDB4MDgsMHgwYSwweGU0LDB4ZjUsMHgwYn19LAorIHsxNiwweDMyMTAsMCx7MHg4NSwweDEzLDB4MDgsMHg4NSwweDEyLDB4MDksMHg3NSwweDBlLDB4MDQsMHg4MCwweDBiLDB4ZTUsMHgxNCwweGI0LDB4MDEsMHgwNn19LAorIHsxNiwweDMyMjAsMCx7MHhlNCwweGY1LDB4MGIsMHg3NSwweDBlLDB4MDQsMHhlNCwweGY1LDB4MWEsMHgzMCwweDM1LDB4MDIsMHgwNSwweDBlLDB4ZTUsMHgwZX19LAorIHsxNiwweDMyMzAsMCx7MHhkMywweDk0LDB4MDMsMHg1MCwweDAyLDB4MDEsMHgwYiwweGMyLDB4MzcsMHhlNCwweGY1LDB4MGUsMHhmNSwweDEwLDB4YzIsMHgzNn19LAorIHsxNiwweDMyNDAsMCx7MHhkMiwweDNkLDB4ZjUsMHgxNCwweDc0LDB4MDgsMHgyNSwweDEwLDB4ZjgsMHhlNiwweGZmLDB4NzQsMHg4MCwweDI1LDB4MTAsMHhmNX19LAorIHsxNiwweDMyNTAsMCx7MHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlZiwweGYwLDB4NzQsMHgwOCwweDI1LDB4MTAsMHhmOCwweGU0LDB4ZjYsMHgwNX19LAorIHsxNSwweDMyNjAsMCx7MHgxMCwweGU1LDB4MTAsMHhiNCwweDA0LDB4ZGUsMHg5MCwweDdmLDB4YjcsMHg3NCwweDA0LDB4ZjAsMHgwMSwweDBiLDB4MjJ9fSwKKyB7MTYsMHgzMjZmLDAsezB4OTAsMHg3NiwweDE4LDB4ZTAsMHhmZiwweDY0LDB4MDUsMHg3MCwweDQyLDB4OTAsMHg3NSwweGFiLDB4ZTAsMHhiNCwweDAxLDB4MTl9fSwKKyB7MTYsMHgzMjdmLDAsezB4OTAsMHg3MiwweDM3LDB4NzQsMHgwMSwweGYwLDB4ZTQsMHg5MCwweDgwLDB4MjAsMHhmMCwweDkwLDB4ODAsMHgzMSwweGYwLDB4OTB9fSwKKyB7MTYsMHgzMjhmLDAsezB4ODAsMHgyOCwweGYwLDB4OTAsMHg4MCwweDM5LDB4ZjAsMHg4MCwweDIyLDB4ZTQsMHg5MCwweDcyLDB4MzcsMHhmMCwweDkwLDB4NzV9fSwKKyB7MTYsMHgzMjlmLDAsezB4YWQsMHhlMCwweDkwLDB4NzIsMHgyYiwweGYwLDB4ZTAsMHgyNCwweDgwLDB4ZjAsMHhlMCwweDkwLDB4ODAsMHgyMCwweGYwLDB4OTB9fSwKKyB7MTYsMHgzMmFmLDAsezB4ODAsMHgzMSwweGYwLDB4OTAsMHg4MCwweDI4LDB4ZjAsMHg5MCwweDgwLDB4MzksMHhmMCwweGVmLDB4NjQsMHgwNiwweDYwLDB4MDJ9fSwKKyB7MTYsMHgzMmJmLDAsezB4ODEsMHg5OSwweDkwLDB4NzIsMHgzOSwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzIsMHgzOSwweGUwLDB4ZmYsMHgyNCwweGZlLDB4OTB9fSwKKyB7MTYsMHgzMmNmLDAsezB4NzIsMHgwNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgzMmRmLDAsezB4ODMsMHhlMCwweDY0LDB4MDEsMHg3MCwweDU0LDB4OTAsMHg3MiwweDM2LDB4MDQsMHhmMCwweDkwLDB4NzIsMHgwNCwweGUwLDB4ZmZ9fSwKKyB7MTYsMHgzMmVmLDAsezB4MjQsMHhmZCwweDYwLDB4MjgsMHgyNCwweGZlLDB4NjAsMHgyNCwweDI0LDB4MDMsMHgyNCwweGZiLDB4NTAsMHgwNCwweDYwLDB4MWN9fSwKKyB7MTYsMHgzMmZmLDAsezB4ODEsMHg4YywweDc0LDB4MjAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc0LDB4Mjh9fSwKKyB7MTYsMHgzMzBmLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg4MSwweDhjLDB4OTAsMHg3MiwweDA0LDB4ZTB9fSwKKyB7MTYsMHgzMzFmLDAsezB4ZmYsMHgyNCwweDMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzQsMHgzOCwweDJmLDB4ZjV9fSwKKyB7MTYsMHgzMzJmLDAsezB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDgxLDB4OGMsMHhlNCwweDkwLDB4NzIsMHgzNiwweGYwLDB4OTB9fSwKKyB7MTYsMHgzMzNmLDAsezB4NzIsMHgzOSwweGUwLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgzMzRmLDAsezB4ZTAsMHhmZiwweDdlLDB4MDAsMHg5MCwweDc1LDB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4NzAsMHgwNiwweDkwLDB4NzJ9fSwKKyB7MTYsMHgzMzVmLDAsezB4MDIsMHg3NCwweDNiLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4NjQsMHg4MCwweDRlLDB4NzB9fSwKKyB7MTYsMHgzMzZmLDAsezB4MDQsMHg5MCwweDcyLDB4MDIsMHhmMCwweGVmLDB4NGUsMHg3MCwweDAyLDB4ODEsMHgzNSwweGVmLDB4NjQsMHg4MCwweDRlLDB4NzB9fSwKKyB7MTYsMHgzMzdmLDAsezB4MDIsMHg4MSwweDM1LDB4ZWYsMHhmOCwweGU0LDB4OTAsMHg3NSwweDBkLDB4ZjAsMHhlOCwweDkwLDB4NzUsMHgwYywweGYwLDB4OTB9fSwKKyB7MTYsMHgzMzhmLDAsezB4NzIsMHgzNCwweGUwLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9fSwKKyB7MTYsMHgzMzlmLDAsezB4ZTAsMHhmZiwweDkwLDB4NzIsMHgwMiwweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTAsMHgyZiwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTB9fSwKKyB7MTYsMHgzM2FmLDAsezB4MzQsMHgwMCwweGYwLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweDdiLDB4ZDYsMHg3YSwweGE1LDB4Zjl9fSwKKyB7MTYsMHgzM2JmLDAsezB4ZjgsMHhkMywweDEyLDB4MzcsMHg5NSwweDQwLDB4MGEsMHg5MCwweDc1LDB4MGMsMHg3NCwweGE1LDB4ZjAsMHhhMywweDc0LDB4ZDZ9fSwKKyB7MTYsMHgzM2NmLDAsezB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMCwweDI0LDB4MmEsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4MzQsMHg1YSwweGYwLDB4ZTB9fSwKKyB7MTYsMHgzM2RmLDAsezB4ZmUsMHhhMywweGUwLDB4NzgsMHgwNSwweGNlLDB4YTIsMHhlNywweDEzLDB4Y2UsMHgxMywweGQ4LDB4ZjgsMHhmZiwweDkwLDB4NzV9fSwKKyB7MTYsMHgzM2VmLDAsezB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4OTAsMHg3MiwweDJjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweGQzLDB4OTR9fSwKKyB7MTYsMHgzM2ZmLDAsezB4ZDIsMHhlZSwweDY0LDB4ODAsMHg5NCwweDgyLDB4NDAsMHgwYSwweDkwLDB4NzIsMHgyYywweDc0LDB4MDIsMHhmMCwweGEzLDB4NzR9fSwKKyB7MTYsMHgzNDBmLDAsezB4ZDIsMHhmMCwweGMzLDB4OTAsMHg3MiwweDJjLDB4ZTAsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MDQsMHhlNCwweGYwLDB4YTN9fSwKKyB7MTYsMHgzNDFmLDAsezB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlMCwweGZlLDB4YTMsMHhlMCwweDI0LDB4M2EsMHhmNSwweDgyLDB4ZWUsMHgzNCwweDcyLDB4ZjV9fSwKKyB7MTYsMHgzNDJmLDAsezB4ODMsMHhlMCwweDkwLDB4NzIsMHgwMiwweGYwLDB4OTAsMHg3MiwweDA0LDB4ZTAsMHhmZiwweDI0LDB4ZmQsMHg2MCwweDJkLDB4MjR9fSwKKyB7MTYsMHgzNDNmLDAsezB4ZmUsMHg2MCwweDI5LDB4MjQsMHgwMywweDI0LDB4ZmIsMHg1MCwweDA0LDB4NjAsMHgyMSwweDgwLDB4NDAsMHg5MCwweDcyLDB4MDJ9fSwKKyB7MTYsMHgzNDRmLDAsezB4ZTAsMHhmZSwweDc0LDB4MjAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4Mjh9fSwKKyB7MTYsMHgzNDVmLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg4MCwweDIxLDB4OTAsMHg3MiwweDAyLDB4ZTB9fSwKKyB7MTYsMHgzNDZmLDAsezB4ZmYsMHg5MCwweDcyLDB4MDQsMHhlMCwweGZlLDB4MjQsMHgzMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWZ9fSwKKyB7MTYsMHgzNDdmLDAsezB4ZjAsMHg3NCwweDM4LDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDcyLDB4Mzl9fSwKKyB7MTEsMHgzNDhmLDAsezB4ZTAsMHgwNCwweGYwLDB4ZTAsMHg2NCwweDBhLDB4NjAsMHgwMiwweDQxLDB4YzcsMHgyMn19LAorIHsxNiwweDM0OWEsMCx7MHg5MCwweDc2LDB4MTgsMHhlMCwweGZmLDB4YjQsMHgwNSwweDIzLDB4OTAsMHg3MiwweDM3LDB4ZTAsMHg3MCwweDFkLDB4OTAsMHg3NX19LAorIHsxNiwweDM0YWEsMCx7MHhhZCwweGUwLDB4OTAsMHg3MiwweDJiLDB4ZjAsMHhlMCwweDI0LDB4ODAsMHhmMCwweGUwLDB4OTAsMHg4MCwweDIwLDB4ZjAsMHg5MH19LAorIHsxNiwweDM0YmEsMCx7MHg4MCwweDMxLDB4ZjAsMHg5MCwweDgwLDB4MjgsMHhmMCwweDkwLDB4ODAsMHgzOSwweGYwLDB4ZWYsMHg2NCwweDA2LDB4NjAsMHgwMn19LAorIHsxNiwweDM0Y2EsMCx7MHhjMSwweDkxLDB4OTAsMHg3MiwweDM2LDB4ZTAsMHg2MCwweDAyLDB4YzEsMHg5MSwweDkwLDB4NzYsMHg0MCwweGUwLDB4NzAsMHgzMX19LAorIHsxNiwweDM0ZGEsMCx7MHg5MCwweDcyLDB4MDMsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDcyLDB4MDMsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNH19LAorIHsxNiwweDM0ZWEsMCx7MHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzIsMHgyOSwweGUwLDB4ZmQsMHhlZX19LAorIHsxNiwweDM0ZmEsMCx7MHg2ZCwweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwYSwweDUwLDB4MDgsMHg5MCwweDcyLDB4MDMsMHhlMCwweDA0LDB4ZjAsMHg4MH19LAorIHsxNiwweDM1MGEsMCx7MHhkNSwweDkwLDB4NzIsMHgzOSwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHg0MCwweGUwLDB4NzAsMHgwOCwweDkwLDB4NzIsMHgwM319LAorIHsxNiwweDM1MWEsMCx7MHhlMCwweDkwLDB4NzIsMHgzOSwweGYwLDB4OTAsMHg3MiwweDM5LDB4ZTAsMHhmZCwweDI0LDB4ZmUsMHg5MCwweDcyLDB4MmEsMHhmMH19LAorIHsxNiwweDM1MmEsMCx7MHhlZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZn19LAorIHsxNiwweDM1M2EsMCx7MHg3ZSwweDAwLDB4OTAsMHg3NSwweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDcwLDB4MDYsMHg5MCwweDcyLDB4MDIsMHg3NH19LAorIHsxNiwweDM1NGEsMCx7MHg4MCwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDY0LDB4ODAsMHg0ZSwweDcwLDB4MDQsMHg5MH19LAorIHsxNiwweDM1NWEsMCx7MHg3MiwweDAyLDB4ZjAsMHhlZiwweDRlLDB4NzAsMHgwMiwweGMxLDB4MWIsMHhlZiwweDY0LDB4ODAsMHg0ZSwweDcwLDB4MDIsMHhjMX19LAorIHsxNiwweDM1NmEsMCx7MHgxYiwweGVmLDB4ZjgsMHhlNCwweDkwLDB4NzUsMHgwZCwweGYwLDB4ZTgsMHg5MCwweDc1LDB4MGMsMHhmMCwweGVkLDB4NzUsMHhmMH19LAorIHsxNiwweDM1N2EsMCx7MHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzIsMHgwMn19LAorIHsxNiwweDM1OGEsMCx7MHhmMCwweDkwLDB4NzUsMHgwZCwweGUwLDB4MmYsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4MzQsMHgwMCwweGYwLDB4ZTAsMHhmZX19LAorIHsxNiwweDM1OWEsMCx7MHhhMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHg3YiwweGQ2LDB4N2EsMHhhNSwweGY5LDB4ZjgsMHhkMywweDEyLDB4MzcsMHg5NX19LAorIHsxNiwweDM1YWEsMCx7MHg0MCwweDBhLDB4OTAsMHg3NSwweDBjLDB4NzQsMHhhNSwweGYwLDB4YTMsMHg3NCwweGQ2LDB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMH19LAorIHsxNiwweDM1YmEsMCx7MHgyNCwweDJhLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweDM0LDB4NWEsMHhmMCwweGUwLDB4ZmUsMHhhMywweGUwLDB4NzgsMHgwNX19LAorIHsxNiwweDM1Y2EsMCx7MHhjZSwweGEyLDB4ZTcsMHgxMywweGNlLDB4MTMsMHhkOCwweGY4LDB4ZmYsMHg5MCwweDc1LDB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZn19LAorIHsxNiwweDM1ZGEsMCx7MHhmMCwweDkwLDB4NzIsMHgyYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHhkMywweDk0LDB4ZDIsMHhlZSwweDY0LDB4ODAsMHg5NH19LAorIHsxNiwweDM1ZWEsMCx7MHg4MiwweDQwLDB4MGEsMHg5MCwweDcyLDB4MmMsMHg3NCwweDAyLDB4ZjAsMHhhMywweDc0LDB4ZDIsMHhmMCwweGMzLDB4OTAsMHg3Mn19LAorIHsxNiwweDM1ZmEsMCx7MHgyYywweGUwLDB4NjQsMHg4MCwweDk0LDB4ODAsMHg1MCwweDA0LDB4ZTQsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlMH19LAorIHsxNiwweDM2MGEsMCx7MHhmZSwweGEzLDB4ZTAsMHgyNCwweDNhLDB4ZjUsMHg4MiwweGVlLDB4MzQsMHg3MiwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzIsMHgwMn19LAorIHsxNiwweDM2MWEsMCx7MHhmMCwweDkwLDB4NzIsMHgyYSwweGUwLDB4ZmYsMHgyNCwweGZkLDB4NjAsMHgyZCwweDI0LDB4ZmUsMHg2MCwweDI5LDB4MjQsMHgwM319LAorIHsxNiwweDM2MmEsMCx7MHgyNCwweGZiLDB4NTAsMHgwNCwweDYwLDB4MjEsMHg4MCwweDQwLDB4OTAsMHg3MiwweDAyLDB4ZTAsMHhmZSwweDc0LDB4MjAsMHgyZn19LAorIHsxNiwweDM2M2EsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDI4LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDM2NGEsMCx7MHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4ODAsMHgyMSwweDkwLDB4NzIsMHgwMiwweGUwLDB4ZmYsMHg5MCwweDcyLDB4MmEsMHhlMH19LAorIHsxNiwweDM2NWEsMCx7MHhmZSwweDI0LDB4MzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg3NCwweDM4LDB4MmUsMHhmNX19LAorIHsxNiwweDM2NmEsMCx7MHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHg3MCwweDA2LDB4OTAsMHg3Mn19LAorIHsxNiwweDM2N2EsMCx7MHgzOSwweDc0LDB4MGEsMHhmMCwweDkwLDB4NzIsMHgzOSwweGUwLDB4MDQsMHhmMCwweGUwLDB4YzMsMHg5NCwweDBhLDB4NTAsMHgwMn19LAorIHsgOCwweDM2OGEsMCx7MHhhMSwweDExLDB4ZTQsMHg5MCwweDc2LDB4NDAsMHhmMCwweDIyfX0sCisgezE2LDB4MzY5MiwwLHsweGJiLDB4MDEsMHgwNiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZTAsMHgyMiwweDUwLDB4MDIsMHhlNywweDIyLDB4YmIsMHhmZSwweDAyfX0sCisgeyA5LDB4MzZhMiwwLHsweGUzLDB4MjIsMHg4OSwweDgyLDB4OGEsMHg4MywweGU0LDB4OTMsMHgyMn19LAorIHsxNiwweDM2YWIsMCx7MHhiYiwweDAxLDB4MGMsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4MjIsMHg1MH19LAorIHsxNiwweDM2YmIsMCx7MHgwNiwweGU5LDB4MjUsMHg4MiwweGY4LDB4ZTYsMHgyMiwweGJiLDB4ZmUsMHgwNiwweGU5LDB4MjUsMHg4MiwweGY4LDB4ZTIsMHgyMn19LAorIHsxMywweDM2Y2IsMCx7MHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGU0LDB4OTMsMHgyMn19LAorIHsxNiwweDM2ZDgsMCx7MHhjMiwweGQ1LDB4ZWMsMHgzMCwweGU3LDB4MDksMHhiMiwweGQ1LDB4ZTQsMHhjMywweDlkLDB4ZmQsMHhlNCwweDljLDB4ZmMsMHhlZX19LAorIHsxNiwweDM2ZTgsMCx7MHgzMCwweGU3LDB4MTUsMHhiMiwweGQ1LDB4ZTQsMHhjMywweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgxMiwweDM4LDB4MWYsMHhjM319LAorIHsxNiwweDM2ZjgsMCx7MHhlNCwweDlkLDB4ZmQsMHhlNCwweDljLDB4ZmMsMHg4MCwweDAzLDB4MTIsMHgzOCwweDFmLDB4MzAsMHhkNSwweDA3LDB4YzMsMHhlNH19LAorIHsgNiwweDM3MDgsMCx7MHg5ZiwweGZmLDB4ZTQsMHg5ZSwweGZlLDB4MjJ9fSwKKyB7MTYsMHgzNzBlLDAsezB4YmIsMHgwMSwweDEwLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlMCwweGY1LDB4ZjB9fSwKKyB7MTYsMHgzNzFlLDAsezB4YTMsMHhlMCwweDIyLDB4NTAsMHgwOSwweGU5LDB4MjUsMHg4MiwweGY4LDB4ODYsMHhmMCwweDA4LDB4ZTYsMHgyMiwweGJiLDB4ZmV9fSwKKyB7MTYsMHgzNzJlLDAsezB4MGEsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4ZjUsMHhmMCwweDA4LDB4ZTIsMHgyMiwweGU1LDB4ODMsMHgyYSwweGY1LDB4ODN9fSwKKyB7IDgsMHgzNzNlLDAsezB4ZTksMHg5MywweGY1LDB4ZjAsMHhhMywweGU5LDB4OTMsMHgyMn19LAorIHsxNiwweDM3NDYsMCx7MHhlOCwweDhmLDB4ZjAsMHhhNCwweGNjLDB4OGIsMHhmMCwweGE0LDB4MmMsMHhmYywweGU5LDB4OGUsMHhmMCwweGE0LDB4MmMsMHhmY319LAorIHsxNiwweDM3NTYsMCx7MHg4YSwweGYwLDB4ZWQsMHhhNCwweDJjLDB4ZmMsMHhlYSwweDhlLDB4ZjAsMHhhNCwweGNkLDB4YTgsMHhmMCwweDhiLDB4ZjAsMHhhNH19LAorIHsxNiwweDM3NjYsMCx7MHgyZCwweGNjLDB4MzgsMHgyNSwweGYwLDB4ZmQsMHhlOSwweDhmLDB4ZjAsMHhhNCwweDJjLDB4Y2QsMHgzNSwweGYwLDB4ZmMsMHhlYn19LAorIHsxNiwweDM3NzYsMCx7MHg4ZSwweGYwLDB4YTQsMHhmZSwweGE5LDB4ZjAsMHhlYiwweDhmLDB4ZjAsMHhhNCwweGNmLDB4YzUsMHhmMCwweDJlLDB4Y2QsMHgzOX19LAorIHsxNSwweDM3ODYsMCx7MHhmZSwweGU0LDB4M2MsMHhmYywweGVhLDB4YTQsMHgyZCwweGNlLDB4MzUsMHhmMCwweGZkLDB4ZTQsMHgzYywweGZjLDB4MjJ9fSwKKyB7MTYsMHgzNzk1LDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZWMsMHg2NCwweDgwLDB4Yzh9fSwKKyB7IDYsMHgzN2E1LDAsezB4NjQsMHg4MCwweDk4LDB4NDUsMHhmMCwweDIyfX0sCisgezE2LDB4MzdhYiwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGU4LDB4OWMsMHg0NSwweGYwfX0sCisgeyAxLDB4MzdiYiwwLHsweDIyfX0sCisgezEyLDB4MzdiYywwLHsweGVjLDB4ZjAsMHhhMywweGVkLDB4ZjAsMHhhMywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHgyMn19LAorIHsxNiwweDM3YzgsMCx7MHhhOCwweDgyLDB4ODUsMHg4MywweGYwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgxMiwweDM3LDB4ZGYsMHgxMiwweDM3LDB4ZGYsMHgxMn19LAorIHsxNiwweDM3ZDgsMCx7MHgzNywweGRmLDB4MTIsMHgzNywweGRmLDB4ZTQsMHg3MywweGU0LDB4OTMsMHhhMywweGM1LDB4ODMsMHhjNSwweGYwLDB4YzUsMHg4M319LAorIHsxNiwweDM3ZTgsMCx7MHhjOCwweGM1LDB4ODIsMHhjOCwweGYwLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODMsMHhjOCwweGM1LDB4ODIsMHhjOH19LAorIHsgMSwweDM3ZjgsMCx7MHgyMn19LAorIHsxNiwweDM3ZjksMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGY4LDB4ZTQsMHg5MywweDcwLDB4MTIsMHg3NCwweDAxLDB4OTMsMHg3MCwweDBkLDB4YTMsMHhhM319LAorIHsxNiwweDM4MDksMCx7MHg5MywweGY4LDB4NzQsMHgwMSwweDkzLDB4ZjUsMHg4MiwweDg4LDB4ODMsMHhlNCwweDczLDB4NzQsMHgwMiwweDkzLDB4NjgsMHg2MH19LAorIHsgNiwweDM4MTksMCx7MHhlZiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGZ9fSwKKyB7MTYsMHgzODFmLDAsezB4YmMsMHgwMCwweDBiLDB4YmUsMHgwMCwweDI5LDB4ZWYsMHg4ZCwweGYwLDB4ODQsMHhmZiwweGFkLDB4ZjAsMHgyMiwweGU0LDB4Y2N9fSwKKyB7MTYsMHgzODJmLDAsezB4ZjgsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmLDB4ZmYsMHhlZSwweDMzLDB4ZmUsMHhlYywweDMzLDB4ZmMsMHhlZSwweDlkLDB4ZWN9fSwKKyB7MTYsMHgzODNmLDAsezB4OTgsMHg0MCwweDA1LDB4ZmMsMHhlZSwweDlkLDB4ZmUsMHgwZiwweGQ1LDB4ZjAsMHhlOSwweGU0LDB4Y2UsMHhmZCwweDIyLDB4ZWR9fSwKKyB7MTYsMHgzODRmLDAsezB4ZjgsMHhmNSwweGYwLDB4ZWUsMHg4NCwweDIwLDB4ZDIsMHgxYywweGZlLDB4YWQsMHhmMCwweDc1LDB4ZjAsMHgwOCwweGVmLDB4MmZ9fSwKKyB7MTYsMHgzODVmLDAsezB4ZmYsMHhlZCwweDMzLDB4ZmQsMHg0MCwweDA3LDB4OTgsMHg1MCwweDA2LDB4ZDUsMHhmMCwweGYyLDB4MjIsMHhjMywweDk4LDB4ZmR9fSwKKyB7IDUsMHgzODZmLDAsezB4MGYsMHhkNSwweGYwLDB4ZWEsMHgyMn19LAorIHsxNiwweDM4NzQsMCx7MHhlNCwweDkwLDB4NzYsMHgyOSwweGYwLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Mn19LAorIHsxNiwweDM4ODQsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH19LAorIHsxNiwweDM4OTQsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDYsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI5LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX19LAorIHsxNiwweDM4YTQsMCx7MHhlZiwweGI0LDB4MDYsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwZn19LAorIHsxNiwweDM4YjQsMCx7MHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDJhLDB4ZjAsMHgyNH19LAorIHsxNiwweDM4YzQsMCx7MHhiZiwweDcwLDB4MDIsMHg0MSwweDQxLDB4MjQsMHhlMCwweDcwLDB4MDIsMHg0MSwweDEyLDB4MjQsMHgyMSwweDYwLDB4MDIsMHg0MX19LAorIHsxNiwweDM4ZDQsMCx7MHgzYSwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDYwLDB4N2QsMHgxNCwweDcwLDB4MDIsMHgyMSwweGIyLDB4MjQsMHgwMn19LAorIHsxNiwweDM4ZTQsMCx7MHg2MCwweDAyLDB4NDEsMHgwYSwweDEyLDB4MTcsMHg1MSwweDkwLDB4NzYsMHg0MiwweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhM319LAorIHsxNiwweDM4ZjQsMCx7MHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNX19LAorIHsxNiwweDM5MDQsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YmMsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMX19LAorIHsxNiwweDM5MTQsMCx7MHgxMiwweDkwLDB4NzYsMHg3YywweDc0LDB4NjcsMHhmMCwweDkwLDB4NzYsMHg3ZCwweDc0LDB4MDYsMHhmMCwweDkwLDB4NzYsMHg3ZX19LAorIHsxNiwweDM5MjQsMCx7MHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwZiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHg5MCwweDc2LDB4N2QsMHhmMH19LAorIHsxNiwweDM5MzQsMCx7MHg5MCwweDc2LDB4N2UsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwZiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHg5MH19LAorIHsxNiwweDM5NDQsMCx7MHg3NiwweDdkLDB4ZjAsMHg5MCwweDc2LDB4N2UsMHg3NCwweDE4LDB4ZjAsMHg5MCwweDc2LDB4MWEsMHg3NCwweDAxLDB4ZjAsMHgxMn19LAorIHsxNiwweDM5NTQsMCx7MHgzZSwweDhmLDB4MTIsMHgxOCwweDAwLDB4MjIsMHg5MCwweDdlLDB4YzIsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4ZmUsMHhmYn19LAorIHsxNiwweDM5NjQsMCx7MHhmYSwweDc5LDB4MDEsMHhmOCwweDEyLDB4MzcsMHg0NiwweGM4LDB4ZWMsMHhjOCwweGM5LDB4ZWQsMHhjOSwweGNhLDB4ZWUsMHhjYX19LAorIHsxNiwweDM5NzQsMCx7MHhjYiwweGVmLDB4Y2IsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZlLDB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYX19LAorIHsxNiwweDM5ODQsMCx7MHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4ZTQsMHhmZSwweGViLDB4MmYsMHhmZn19LAorIHsxNiwweDM5OTQsMCx7MHhlZSwweDNhLDB4ZmUsMHhlZCwweDM5LDB4ZmQsMHhlYywweDM4LDB4ZmMsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjAsMHgwZn19LAorIHsxNiwweDM5YTQsMCx7MHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhiYywweDIyLDB4OTAsMHg3ZX19LAorIHsxNiwweDM5YjQsMCx7MHhjMiwweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZiLDB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDM3LDB4NDYsMHhjOH19LAorIHsxNiwweDM5YzQsMCx7MHhlYywweGM4LDB4YzksMHhlZCwweGM5LDB4Y2EsMHhlZSwweGNhLDB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZX19LAorIHsxNiwweDM5ZDQsMCx7MHhlNCwweGZjLDB4ZmQsMHgyYiwweGZiLDB4ZWEsMHgzZSwweGZhLDB4ZWQsMHgzOSwweGY5LDB4ZWMsMHgzOCwweGY4LDB4OTAsMHg3ZX19LAorIHsxNiwweDM5ZTQsMCx7MHhjMCwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmLDB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkLDB4ZWMsMHgzOH19LAorIHsxNiwweDM5ZjQsMCx7MHhmYywweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDNhMDQsMCx7MHhmNSwweDgzLDB4MTIsMHgzNywweGJjLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn19LAorIHsxNiwweDNhMTQsMCx7MHhlOSwweGUwLDB4MTQsMHg3MCwweDE5LDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMH19LAorIHsxNiwweDNhMjQsMCx7MHgwZiwweGE0LDB4MjQsMHg0ZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTAsMHg3Zn19LAorIHsxNCwweDNhMzQsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4M2E0MiwwLHsweGU0LDB4OTAsMHg3NiwweDM1LDB4ZjAsMHg5MCwweDc2LDB4MzUsMHhlMCwweGZmLDB4YzMsMHg5NCwweDAzLDB4NDAsMHgwMiwweDQxfX0sCisgezE2LDB4M2E1MiwwLHsweGZmLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmfX0sCisgezE2LDB4M2E2MiwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0fX0sCisgezE2LDB4M2E3MiwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fX0sCisgezE2LDB4M2E4MiwwLHsweGYwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4M2E5MiwwLHsweDc0LDB4ZmYsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4M2FhMiwwLHsweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4M2FiMiwwLHsweDgzLDB4NzQsMHg4MCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4M2FjMiwwLHsweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4M2FkMiwwLHsweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4M2FlMiwwLHsweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4M2FmMiwwLHsweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MzUsMHhlMCwweDA0LDB4ZjAsMHg0MSwweDQ3LDB4OTAsMHg3NiwweDNjfX0sCisgezE2LDB4M2IwMiwwLHsweDc0LDB4MGEsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4NzYsMHgzNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgzYywweGUwfX0sCisgezE2LDB4M2IxMiwwLHsweGZmLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyLDB4NjEsMHhkMiwweDkwLDB4NzYsMHgzZCwweGUwfX0sCisgezE2LDB4M2IyMiwwLHsweGZmLDB4MDQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4M2IzMiwwLHsweDgzLDB4ZWYsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4M2I0MiwwLHsweDgzLDB4ZTQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4M2I1MiwwLHsweDgzLDB4NzQsMHg1ZSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4M2I2MiwwLHsweGY1LDB4ODMsMHg3NCwweGJhLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4M2I3MiwwLHsweDc1LDB4ZjUsMHg4MywweDc0LDB4MDUsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4M2I4MiwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyfX0sCisgezE2LDB4M2I5MiwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyfX0sCisgezE2LDB4M2JhMiwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyfX0sCisgezE2LDB4M2JiMiwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDE1LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1fX0sCisgezE2LDB4M2JjMiwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzUsMHhlMCwweDA0LDB4ZjAsMHg2MSwweDBlfX0sCisgeyAxLDB4M2JkMiwwLHsweDIyfX0sCisgezE2LDB4M2JkMywwLHsweGU0LDB4OTAsMHg3NiwweDM2LDB4ZjAsMHhlMCwweGZiLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4M2JlMywwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MCwweGYwLDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyfX0sCisgezE2LDB4M2JmMywwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDBhLDB4ZjAsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1fX0sCisgezE2LDB4M2MwMywwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDAsMHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwfX0sCisgezE2LDB4M2MxMywwLHsweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAwfX0sCisgezE2LDB4M2MyMywwLHsweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4M2MzMywwLHsweDEyLDB4MzcsMHhjOCwweDAwLDB4MDEsMHg3NywweDAwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmYiwweDc1fX0sCisgezE2LDB4M2M0MywwLHsweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDAsMHhmMCwweGVifX0sCisgezE2LDB4M2M1MywwLHsweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4YywweGYwfX0sCisgezE2LDB4M2M2MywwLHsweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3fX0sCisgezE2LDB4M2M3MywwLHsweGM4LDB4MDAsMHgwMCwweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4M2M4MywwLHsweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhjOCwweDAwLDB4MDAsMHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0fX0sCisgezE2LDB4M2M5MywwLHsweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAxLDB4NzcsMHgwMCwweDkwfX0sCisgezE2LDB4M2NhMywwLHsweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4M2NiMywwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyfX0sCisgezE2LDB4M2NjMywwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDhmLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmfX0sCisgezE2LDB4M2NkMywwLHsweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MSwweGYwfX0sCisgezE2LDB4M2NlMywwLHsweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDg0fX0sCisgezE2LDB4M2NmMywwLHsweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1fX0sCisgezE2LDB4M2QwMywwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NjEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyfX0sCisgezE2LDB4M2QxMywwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4MSwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwfX0sCisgezE2LDB4M2QyMywwLHsweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fX0sCisgezE2LDB4M2QzMywwLHsweDYxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgeyA0LDB4M2Q0MywwLHsweDc0LDB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4M2Q0NywwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfX0sCisgezE2LDB4M2Q1NywwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfX0sCisgezE2LDB4M2Q2NywwLHsweGMwLDB4ZTAsMHg5MCwweDdmLDB4YTIsMHhlMCwweDkwLDB4NzYsMHg3ZiwweGYwLDB4OTAsMHg3ZiwweDc0LDB4ZTAsMHg5MCwweDc2fX0sCisgezE2LDB4M2Q3NywwLHsweDg3LDB4ZjAsMHg5MCwweDdmLDB4NzUsMHhlMCwweDkwLDB4NzYsMHg4OCwweGYwLDB4OTAsMHg3ZiwweDk4LDB4ZTAsMHg0NCwweDAyfX0sCisgezE2LDB4M2Q4NywwLHsweGYwLDB4OTAsMHg3NiwweDk2LDB4ZTAsMHhmZiwweDIwLDB4ZTEsMHgwYywweDQ0LDB4MDIsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwfX0sCisgezE2LDB4M2Q5NywwLHsweGQyLDB4MzIsMHgxMiwweDRhLDB4YzQsMHg5MCwweDc2LDB4N2YsMHhlMCwweDIwLDB4ZTIsMHg1MCwweDkwLDB4NzYsMHg4NywweGUwfX0sCisgezE2LDB4M2RhNywwLHsweGZlLDB4YTMsMHhlMCwweDdjLDB4MDAsMHgyNCwweDAwLDB4ZjUsMHgzNCwweGVjLDB4M2UsMHhmNSwweDMzLDB4OTAsMHg3NiwweDk4fX0sCisgezE2LDB4M2RiNywwLHsweGUwLDB4ZmQsMHhhZSwweDMzLDB4YWYsMHgzNCwweDEyLDB4MzYsMHhkOCwweDkwLDB4NzYsMHg4NywweGVmLDB4ZjAsMHhkMiwweDJmfX0sCisgezE2LDB4M2RjNywwLHsweDMwLDB4MzEsMHgyOSwweDIwLDB4M2YsMHgyNiwweGMyLDB4MzEsMHg5MCwweDdmLDB4OTQsMHhlMCwweDU0LDB4Y2YsMHhmMCwweDkwfX0sCisgezE2LDB4M2RkNywwLHsweDdmLDB4OWEsMHhlMCwweDMwLDB4ZTQsMHgwNCwweGQyLDB4MmQsMHhjMiwweDJjLDB4OTAsMHg3ZiwweDlhLDB4ZTAsMHgyMCwweGU1fX0sCisgezE2LDB4M2RlNywwLHsweDA0LDB4YzIsMHgyZCwweGQyLDB4MmMsMHg5MCwweDdmLDB4OTQsMHhlMCwweDQ0LDB4MzAsMHhmMCwweDEyLDB4NGEsMHg1MCwweDEyfX0sCisgezE2LDB4M2RmNywwLHsweDFiLDB4MDQsMHgzMCwweDJmLDB4MTIsMHgxMiwweDQyLDB4MTYsMHhjMiwweDJmLDB4NzUsMHhlOCwweDAxLDB4MTIsMHgxNiwweDhhfX0sCisgezE2LDB4M2UwNywwLHsweDc1LDB4ZTgsMHgwZCwweGQyLDB4MmIsMHg4MCwweDA1LDB4NzUsMHhlOCwweDAxLDB4YzIsMHgyYiwweDIwLDB4MmIsMHgzNCwweDkwfX0sCisgezE2LDB4M2UxNywwLHsweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBlLDB4OTAsMHg3NiwweDdjLDB4NzQsMHg2NywweGYwLDB4YTMsMHg3NCwweDA2fX0sCisgezE2LDB4M2UyNywwLHsweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwYiwweDkwLDB4NzYsMHg3YywweGU0LDB4ZjAsMHhhMywweGYwfX0sCisgezE2LDB4M2UzNywwLHsweGEzLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGIsMHg5MCwweDc2LDB4N2MsMHhlNCwweGYwLDB4YTMsMHhmMCwweGEzfX0sCisgezE2LDB4M2U0NywwLHsweDc0LDB4MTgsMHhmMCwweDc1LDB4Y2EsMHhkMywweDc1LDB4Y2IsMHhmZSwweGQyLDB4Y2EsMHgzMCwweDM0LDB4MDQsMHhjMiwweDM0fX0sCisgezE2LDB4M2U1NywwLHsweDgwLDB4MDIsMHhkMiwweDM0LDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4M2U2NywwLHsweDk4LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwfX0sCisgezE2LDB4M2U3NywwLHsweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDAsMHhlMCwweGZhLDB4ZDAsMHhlMCwweGY5LDB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhkMCwweGQwfX0sCisgeyA4LDB4M2U4NywwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHgzZThmLDAsezB4OTAsMHg3NiwweDkyLDB4ZTAsMHgxNCwweDYwLDB4MWQsMHgxNCwweDcwLDB4MDIsMHhlMSwweDQ0LDB4MjQsMHgwMiwweDYwLDB4MDJ9fSwKKyB7MTYsMHgzZTlmLDAsezB4ZTEsMHhkNCwweDkwLDB4NzYsMHg5NCwweDc0LDB4MDEsMHhmMCwweDkwLDB4ODAsMHgwMCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4OGV9fSwKKyB7MTYsMHgzZWFmLDAsezB4ZjAsMHhkMiwweDMxLDB4MjIsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDFiLDB4ZTQsMHg5MCwweDdmLDB4ZjJ9fSwKKyB7MTYsMHgzZWJmLDAsezB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTd9fSwKKyB7MTYsMHgzZWNmLDAsezB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgxYiwweGU0LDB4OTAsMHg3ZiwweGYyLDB4ZjB9fSwKKyB7MTYsMHgzZWRmLDAsezB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzNCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTB9fSwKKyB7MTYsMHgzZWVmLDAsezB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MTgsMHhlNCwweDkwLDB4N2YsMHhmMiwweGYwLDB4OTB9fSwKKyB7MTYsMHgzZWZmLDAsezB4N2YsMHhmMywweDc0LDB4NjQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDR9fSwKKyB7MTYsMHgzZjBmLDAsezB4MDQsMHhmMCwweDkwLDB4NzYsMHg5NCwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg4MCwweDAwLDB4ZjAsMHgzMCwweDNmLDB4MDl9fSwKKyB7MTYsMHgzZjFmLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7MTYsMHgzZjJmLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDkwLDB4NzYsMHg5OCwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgzZjNmLDAsezB4OGUsMHg3NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MWIsMHhlNCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgzZjRmLDAsezB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4NDQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgzZjVmLDAsezB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDFiLDB4ZTQsMHg5MCwweDdmLDB4ZjJ9fSwKKyB7MTYsMHgzZjZmLDAsezB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDRjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTd9fSwKKyB7MTYsMHgzZjdmLDAsezB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgxOCwweGU0LDB4OTAsMHg3ZiwweGYyLDB4ZjB9fSwKKyB7MTYsMHgzZjhmLDAsezB4OTAsMHg3ZiwweGYzLDB4NzQsMHg5NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTB9fSwKKyB7MTYsMHgzZjlmLDAsezB4NDQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDk0LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg5MCwweDgwLDB4MDAsMHhmMCwweDMwLDB4M2Z9fSwKKyB7MTYsMHgzZmFmLDAsezB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDF9fSwKKyB7MTYsMHgzZmJmLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4OTAsMHg3NiwweDk4LDB4NzQsMHgwNiwweGYwLDB4OTB9fSwKKyB7IDYsMHgzZmNmLDAsezB4NzYsMHg4ZSwweDc0LDB4MDIsMHhmMCwweDIyfX0sCisgezE2LDB4M2ZkNSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwMiwweGYwfX0sCisgezE2LDB4M2ZlNSwwLHsweDkwLDB4N2YsMHhjNywweGUwLDB4ZjUsMHgxMSwweDc1LDB4MGYsMHgwMCwweDc1LDB4MGQsMHgwMCwweGQyLDB4MzMsMHhkMCwweDgyfX0sCisgeyA1LDB4M2ZmNSwwLHsweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7IDYsMHgzZmZhLDAsezB4MTIsMHg0YSwweGM0LDB4YzIsMHgzMSwweDIyfX0sCisgezE2LDB4NDAwMCwwLHsweGU1LDB4MTEsMHhkMywweDk0LDB4MDAsMHg1MCwweDAyLDB4MjEsMHgwNiwweDkwLDB4NzYsMHg4OSwweGUwLDB4YzMsMHg5NCwweDA4fX0sCisgezE2LDB4NDAxMCwwLHsweDQwLDB4MDIsMHgyMSwweDA2LDB4NzQsMHg0MCwweDI1LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwfX0sCisgezE2LDB4NDAyMCwwLHsweGY1LDB4MTcsMHhlNSwweDBkLDB4NjAsMHgwZSwweDkwLDB4ODAsMHgwNSwweGU1LDB4MTcsMHhmMCwweDkwLDB4NzYsMHg4OSwweGUwfX0sCisgezE2LDB4NDAzMCwwLHsweDA0LDB4ZjAsMHgwMSwweGRhLDB4ZTUsMHgxNywweDEyLDB4MzcsMHhmOSwweDQwLDB4YzEsMHgwMiwweDQwLDB4NjcsMHgwNSwweDQwfX0sCisgezE2LDB4NDA0MCwwLHsweDdhLDB4MDYsMHg0MCwweDk4LDB4MDcsMHg0MCwweGMxLDB4MGMsMHg0MCwweGMxLDB4MGQsMHg0MCwweGM3LDB4MGYsMHg0MCwweGNifX0sCisgezE2LDB4NDA1MCwwLHsweGY2LDB4NDAsMHhjYiwweGY4LDB4NDAsMHhjYiwweGZhLDB4NDAsMHhjYiwweGZiLDB4NDAsMHhjYiwweGZjLDB4NDAsMHhjYiwweGZlfX0sCisgezE2LDB4NDA2MCwwLHsweDQwLDB4Y2IsMHhmZiwweDAwLDB4MDAsMHg0MCwweGRhLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwfX0sCisgezE2LDB4NDA3MCwwLHsweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHg4MCwweDYwLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwfX0sCisgezE2LDB4NDA4MCwwLHsweDA1LDB4ZjAsMHg5MCwweDdlLDB4NDIsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwfX0sCisgezE2LDB4NDA5MCwwLHsweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDgwLDB4NDIsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwfX0sCisgezE2LDB4NDBhMCwwLHsweDkwLDB4N2UsMHg0MiwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDdlLDB4NDMsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwfX0sCisgezE2LDB4NDBiMCwwLHsweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweGUwLDB4MDQsMHhmMCwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDgwfX0sCisgezE2LDB4NDBjMCwwLHsweDE5LDB4ZDIsMHgzYiwweGQyLDB4M2MsMHg4MCwweDEzLDB4ZDIsMHgzYiwweDgwLDB4MGYsMHg5MCwweDgwLDB4MDUsMHhlNSwweDE3fX0sCisgezE2LDB4NDBkMCwwLHsweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4MjAsMHgzYiwweDA0LDB4MDUsMHgwZCwweDgwfX0sCisgezE2LDB4NDBlMCwwLHsweDFmLDB4MzAsMHgzYywweDFjLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4N2UsMHg0MiwweGUwfX0sCisgezE2LDB4NDBmMCwwLHsweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxfX0sCisgezE2LDB4NDEwMCwwLHsweDA1LDB4MGYsMHgxNSwweDExLDB4MDEsMHgwMCwweGU1LDB4MTEsMHg3MCwweDEwLDB4YzIsMHgzMywweGY1LDB4MGQsMHhmNSwweDBmfX0sCisgezExLDB4NDExMCwwLHsweDkwLDB4N2YsMHhjNywweDc0LDB4MDQsMHhmMCwweGMyLDB4M2IsMHhjMiwweDNjLDB4MjJ9fSwKKyB7MTYsMHg0MTFiLDAsezB4OTAsMHg3NiwweDhkLDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgyNywweDMwLDB4MjcsMHgwOCwweGMyLDB4MjcsMHgxMiwweDA4LDB4MDB9fSwKKyB7MTYsMHg0MTJiLDAsezB4MTIsMHgxNywweDRhLDB4MzAsMHgyOCwweDA4LDB4YzIsMHgyOCwweDEyLDB4MzgsMHg3NCwweDEyLDB4MTcsMHg0YSwweDMwLDB4MmF9fSwKKyB7MTYsMHg0MTNiLDAsezB4MGUsMHhlNCwweDkwLDB4NzYsMHg4ZCwweGYwLDB4YzIsMHgyYSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMiwweGYwLDB4OTB9fSwKKyB7MTYsMHg0MTRiLDAsezB4NzYsMHgzZiwweGUwLDB4YjQsMHgwMSwweDA1LDB4ZTQsMHhmMCwweDEyLDB4MzIsMHg2ZiwweDkwLDB4NzYsMHg0MSwweGUwLDB4YjR9fSwKKyB7MTYsMHg0MTViLDAsezB4MDEsMHgwNSwweGU0LDB4ZjAsMHgxMiwweDM0LDB4OWEsMHg5MCwweDc2LDB4NDAsMHhlMCwweGI0LDB4MDEsMHgwMywweDEyLDB4MzR9fSwKKyB7MTYsMHg0MTZiLDAsezB4OWEsMHg5MCwweDdmLDB4OWIsMHhlMCwweDIwLDB4ZTQsMHgwMiwweGMyLDB4M2YsMHg5MCwweDdmLDB4OWIsMHhlMCwweDMwLDB4ZTR9fSwKKyB7MTYsMHg0MTdiLDAsezB4MDIsMHhkMiwweDNmLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHgyMCwweGU1LDB4MDIsMHhjMiwweDNlLDB4OTAsMHg3ZiwweDliLDB4ZTB9fSwKKyB7MTYsMHg0MThiLDAsezB4MzAsMHhlNSwweDAyLDB4ZDIsMHgzZSwweGEyLDB4NDEsMHgzMCwweDNmLDB4MDEsMHhiMywweDUwLDB4MWYsMHhhMiwweDNmLDB4OTJ9fSwKKyB7MTYsMHg0MTliLDAsezB4NDEsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTd9fSwKKyB7MTYsMHg0MWFiLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4MzAsMHgzZiwweDM0LDB4OTB9fSwKKyB7MTYsMHg0MWJiLDAsezB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGUsMHg5MCwweDc2LDB4N2MsMHg3NCwweDY3LDB4ZjAsMHhhMywweDc0LDB4MDZ9fSwKKyB7MTYsMHg0MWNiLDAsezB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBiLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4ZjB9fSwKKyB7MTYsMHg0MWRiLDAsezB4YTMsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwYiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweGYwLDB4YTN9fSwKKyB7MTYsMHg0MWViLDAsezB4NzQsMHgxOCwweGYwLDB4YTIsMHg0MCwweDMwLDB4M2UsMHgwMSwweGIzLDB4NTAsMHgxZiwweGEyLDB4M2UsMHg5MiwweDQwLDB4MzB9fSwKKyB7MTYsMHg0MWZiLDAsezB4M2UsMHgwOSwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTR9fSwKKyB7MTEsMHg0MjBiLDAsezB4ZmIsMHhmMCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDQyMTYsMCx7MHg5MCwweDc2LDB4MTksMHhlMCwweDY0LDB4MDEsMHg3MCwweDM1LDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGQzLDB4OTQsMHgyZH19LAorIHsxNiwweDQyMjYsMCx7MHg0MCwweDJiLDB4OTAsMHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkM319LAorIHsxNiwweDQyMzYsMCx7MHg5NCwweDBmLDB4NDAsMHgxOSwweGU0LDB4ZjAsMHhlZiwweGQzLDB4OTQsMHgzMSwweDQwLDB4MDgsMHg5MCwweDc2LDB4MTksMHg3NH19LAorIHsxNiwweDQyNDYsMCx7MHgwMywweGYwLDB4ODAsMHgwNiwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDIsMHhmMCwweDEyLDB4M2UsMHg4ZiwweDkwLDB4NzYsMHgxOX19LAorIHsxNiwweDQyNTYsMCx7MHhlMCwweGI0LDB4MDIsMHgyYywweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhjMywweDk0LDB4MmYsMHg1MCwweDIyLDB4ZWYsMHhkM319LAorIHsxNiwweDQyNjYsMCx7MHg5NCwweDJhLDB4NDAsMHgxYywweDkwLDB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMH19LAorIHsxNiwweDQyNzYsMCx7MHhlMCwweGQzLDB4OTQsMHgwZiwweDQwLDB4MGEsMHhlNCwweGYwLDB4OTAsMHg3NiwweDE5LDB4MDQsMHhmMCwweDEyLDB4M2UsMHg4Zn19LAorIHsxNiwweDQyODYsMCx7MHg5MCwweDc2LDB4MTksMHhlMCwweGI0LDB4MDIsMHgyNiwweDkwLDB4NzYsMHg4NywweGUwLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgxZH19LAorIHsxNiwweDQyOTYsMCx7MHg5MCwweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZn19LAorIHsxNiwweDQyYTYsMCx7MHg0MCwweDBiLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDMsMHhmMCwweDEyLDB4M2UsMHg4ZiwweDkwLDB4NzYsMHgxOX19LAorIHsxNiwweDQyYjYsMCx7MHhlMCwweDY0LDB4MDMsMHg3MCwweDNmLDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGMzLDB4OTQsMHg1ZiwweDUwLDB4MzUsMHg5MH19LAorIHsxNiwweDQyYzYsMCx7MHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MH19LAorIHsxNiwweDQyZDYsMCx7MHgyMywweGU0LDB4ZjAsMHhlZiwweGMzLDB4OTQsMHgyZiwweDUwLDB4MGMsMHhlZiwweGQzLDB4OTQsMHgyYSwweDQwLDB4MDYsMHg5MH19LAorIHsxNiwweDQyZTYsMCx7MHg3NiwweDE5LDB4NzQsMHgwMSwweGYwLDB4ZWYsMHhkMywweDk0LDB4MmYsMHg0MCwweDA2LDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMn19LAorIHsxNiwweDQyZjYsMCx7MHhmMCwweDEyLDB4M2UsMHg4ZiwweDkwLDB4NzYsMHg4NiwweGUwLDB4NzAsMHgwNSwweDkwLDB4NzYsMHg4NSwweGYwLDB4MjIsMHhlNH19LAorIHsgNSwweDQzMDYsMCx7MHg5MCwweDc2LDB4ODYsMHhmMCwweDIyfX0sCisgezE2LDB4NDMwYiwwLHsweGU0LDB4OTAsMHg3NiwweDk2LDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweDkwLDB4N2YsMHhlMCwweDc0LDB4OTAsMHhmMCwweDkwfX0sCisgezE2LDB4NDMxYiwwLHsweDdmLDB4ZTEsMHg3NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4N2YsMHhkZCwweGYwLDB4OTAsMHg3ZiwweGExLDB4ZjAsMHg1MywweDhlfX0sCisgezE2LDB4NDMyYiwwLHsweGY4LDB4NzUsMHg4OCwweDA1LDB4NzUsMHhiOCwweDIwLDB4NzUsMHhmOCwweDAxLDB4NDMsMHg4ZSwweDMwLDB4ZjUsMHhjOCwweDc1fX0sCisgezE2LDB4NDMzYiwwLHsweGNhLDB4N2YsMHg3NSwweGNiLDB4ZjgsMHg0MywweGE4LDB4MjAsMHgxMiwweDA3LDB4NGEsMHhjMiwweDJjLDB4YzIsMHgyZCwweGMyfX0sCisgezE2LDB4NDM0YiwwLHsweDJiLDB4YzIsMHgyZiwweDkwLDB4N2YsMHhmYywweDc0LDB4ZGQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmYsMHhmMCwweDkwfX0sCisgezE2LDB4NDM1YiwwLHsweDdmLDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDEsMHhmMCwweGU0LDB4OTAsMHg3NiwweDg1fX0sCisgezE2LDB4NDM2YiwwLHsweGYwLDB4YTMsMHhmMCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgxMiwweDQ5LDB4NTgsMHgxMiwweDBmfX0sCisgezE2LDB4NDM3YiwwLHsweGM2LDB4MTIsMHg0YSwweDhkLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHhlMCwweDU0LDB4YjksMHhmMCwweGQyfX0sCisgezE2LDB4NDM4YiwwLHsweDMwLDB4MjAsMHgzMCwweDE4LDB4MTIsMHg0NywweGI0LDB4MTIsMHgzMCwweDAwLDB4MTIsMHg0MCwweDAwLDB4MTIsMHg0MiwweDE2fX0sCisgezE2LDB4NDM5YiwwLHsweDEyLDB4NGEsMHg1MCwweDEyLDB4MWIsMHgwNCwweDEyLDB4MTYsMHg2MSwweDEyLDB4NDIsMHgxNiwweGMyLDB4MmYsMHhjMiwweDMxfX0sCisgezE2LDB4NDNhYiwwLHsweGMyLDB4MzIsMHhjMiwweDM0LDB4YzIsMHgzMywweGMyLDB4MjksMHhjMiwweDI3LDB4YzIsMHgyOCwweGU0LDB4ZjUsMHgxMSwweDkwfX0sCisgezE2LDB4NDNiYiwwLHsweDc2LDB4ODksMHhmMCwweDkwLDB4NzYsMHgzZiwweGYwLDB4OTAsMHg3NiwweDQxLDB4ZjAsMHg5MCwweDc2LDB4NDAsMHhmMCwweDkwfX0sCisgezE2LDB4NDNjYiwwLHsweDc2LDB4OGEsMHhmMCwweGEzLDB4ZjAsMHhhMywweDA0LDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4OTksMHhmMCwweDIyfX0sCisgezE2LDB4NDNkYiwwLHsweDEyLDB4NGQsMHhhMywweDQwLDB4MDIsMHg4MSwweGEwLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgyNCwweGZlLDB4NjAsMHgxZSwweDE0fX0sCisgezE2LDB4NDNlYiwwLHsweDYwLDB4NDYsMHgxNCwweDYwLDB4NmUsMHgxNCwweDcwLDB4MDIsMHg4MSwweDkxLDB4MjQsMHgwNCwweDYwLDB4MDIsMHg4MSwweDk5fX0sCisgezE2LDB4NDNmYiwwLHsweDc0LDB4MDUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweDc0LDB4MDAsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhfX0sCisgezE2LDB4NDQwYiwwLHsweGUwLDB4ZmYsMHgxMiwweDQ5LDB4ZmYsMHg4YiwweDIwLDB4OGEsMHgyMSwweDg5LDB4MjIsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlfX0sCisgezE2LDB4NDQxYiwwLHsweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyfX0sCisgezE2LDB4NDQyYiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZmLDB4MTIsMHg0OCwweGIwfX0sCisgezE2LDB4NDQzYiwwLHsweDhiLDB4MjAsMHg4YSwweDIxLDB4ODksMHgyMiwweGVhLDB4NDksMHg2MCwweDExLDB4Y2UsMHhlYSwweGNlLDB4ZWUsMHg5MCwweDdmfX0sCisgezE2LDB4NDQ0YiwwLHsweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fX0sCisgezE2LDB4NDQ1YiwwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZifX0sCisgezE2LDB4NDQ2YiwwLHsweDEyLDB4MTcsMHg5NCwweDhiLDB4MjAsMHg4YSwweDIxLDB4ODksMHgyMiwweGVhLDB4NDksMHg2MCwweDExLDB4Y2UsMHhlYSwweGNlfX0sCisgezE2LDB4NDQ3YiwwLHsweGVlLDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmfX0sCisgezE2LDB4NDQ4YiwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfX0sCisgeyA1LDB4NDQ5YiwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7IDEsMHg0NGEwLDAsezB4MjJ9fSwKKyB7MTYsMHg0NGExLDAsezB4YzIsMHhhZiwweGQyLDB4MjQsMHg5MCwweDdmLDB4OTMsMHg3NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4OWMsMHg3NCwweGJiLDB4ZjB9fSwKKyB7MTYsMHg0NGIxLDAsezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg0NCwweDMwLDB4ZjAsMHhlMCwweDU0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5NCwweDc0LDB4MzB9fSwKKyB7MTYsMHg0NGMxLDAsezB4ZjAsMHg5MCwweDdmLDB4OWQsMHg3NCwweGNmLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4OTV9fSwKKyB7MTYsMHg0NGQxLDAsezB4NzQsMHhjMCwweGYwLDB4OTAsMHg3ZiwweDllLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweDk5LDB4ZTAsMHgzMCwweGUyLDB4MDl9fSwKKyB7MTYsMHg0NGUxLDAsezB4OTAsMHgwNSwweDE5LDB4NzQsMHhhMCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YzIsMHgyNSwweGMyLDB4MjIsMHhjMiwweDIzLDB4YzJ9fSwKKyB7MTYsMHg0NGYxLDAsezB4MjYsMHgxMiwweDRhLDB4YzQsMHgxMiwweDJkLDB4YTksMHgxMiwweDNiLDB4ZDMsMHgxMiwweDQ1LDB4NTksMHgxMiwweDNhLDB4NDJ9fSwKKyB7MTYsMHg0NTAxLDAsezB4OTAsMHg3NiwweDY4LDB4NzQsMHgwMSwweGYwLDB4NzAsMHgwZiwweDEyLDB4NGIsMHhiYiwweDEyLDB4MDcsMHhmZSwweDEyLDB4NGR9fSwKKyB7MTYsMHg0NTExLDAsezB4YTEsMHgxMiwweDFiLDB4NDAsMHgxMiwweDE0LDB4OTYsMHgxMiwweDQzLDB4MGIsMHg5MCwweDdmLDB4YWYsMHhlMCwweDQ0LDB4MDF9fSwKKyB7MTYsMHg0NTIxLDAsezB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMCwweDQ0LDB4MWYsMHhmMCwweDkwLDB4N2YsMHhhYywweDc0LDB4ZmYsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHg0NTMxLDAsezB4YWQsMHhmMCwweDkwLDB4N2YsMHhkZSwweGYwLDB4OTAsMHg3ZiwweGRmLDB4ZjAsMHg5MCwweDdmLDB4YWIsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHg0NTQxLDAsezB4YTksMHhmMCwweDkwLDB4N2YsMHhhYSwweGYwLDB4NTMsMHg5MSwweGVmLDB4NDMsMHhkOCwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDh9fSwKKyB7IDgsMHg0NTUxLDAsezB4MjAsMHg1MywweGE4LDB4YTAsMHg0MywweGE4LDB4ODAsMHgyMn19LAorIHsxNiwweDQ1NTksMCx7MHhlNCwweDkwLDB4NzYsMHgzNiwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDQ1NjksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDQ1NzksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NX19LAorIHsxNiwweDQ1ODksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NX19LAorIHsxNiwweDQ1OTksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHg5MH19LAorIHsxNiwweDQ1YTksMCx7MHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDQ1YjksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDQ1YzksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NX19LAorIHsxNiwweDQ1ZDksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NX19LAorIHsxNiwweDQ1ZTksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHgyMn19LAorIHsxMiwweDQ1ZjksMCx7MHg3OCwweDdmLDB4ZTQsMHhmNiwweGQ4LDB4ZmQsMHg3NSwweDgxLDB4MzgsMHgwMiwweDQ2LDB4NDB9fSwKKyB7MTYsMHg0NjA1LDAsezB4MDIsMHg0NywweDVhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHg0MCwweDAzLDB4ZjYsMHg4MCwweDAxLDB4ZjJ9fSwKKyB7MTYsMHg0NjE1LDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9fSwKKyB7MTYsMHg0NjI1LDAsezB4YzQsMHg1NCwweDBmLDB4NDQsMHgyMCwweGM4LDB4ODMsMHg0MCwweDA0LDB4ZjQsMHg1NiwweDgwLDB4MDEsMHg0NiwweGY2LDB4ZGZ9fSwKKyB7MTYsMHg0NjM1LDAsezB4ZTQsMHg4MCwweDBiLDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MCwweDkwLDB4MGMsMHg4ZiwweGU0LDB4N2V9fSwKKyB7MTYsMHg0NjQ1LDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9fSwKKyB7MTYsMHg0NjU1LDAsezB4YTMsMHg2MCwweDAxLDB4MGUsMHhjZiwweDU0LDB4YzAsMHgyNSwweGUwLDB4NjAsMHhhOCwweDQwLDB4YjgsMHhlNCwweDkzLDB4YTN9fSwKKyB7MTYsMHg0NjY1LDAsezB4ZmEsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2F9fSwKKyB7MTYsMHg0Njc1LDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9fSwKKyB7MTYsMHg0Njg1LDAsezB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg5MCwweDc2LDB4ODMsMHhmMCwweGUwLDB4MTQsMHg2MCwweDFkLDB4MTQsMHg2MCwweDJhLDB4MTR9fSwKKyB7MTYsMHg0Njk1LDAsezB4NjAsMHgzNywweDE0LDB4NjAsMHg0NCwweDI0LDB4MDQsMHg3MCwweDUwLDB4OTAsMHg3NiwweDkxLDB4ZTAsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHg0NmE1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDQ3LDB4OTAsMHg3NiwweDkyLDB4ZTAsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHg0NmI1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDM3LDB4OTAsMHg3NiwweDkwLDB4ZTAsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHg0NmM1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDI3LDB4OTAsMHg3NiwweDg0LDB4ZTAsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHg0NmQ1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDE3LDB4OTAsMHg3NiwweDkzLDB4ZTAsMHg5MCwweDdmLDB4MDB9fSwKKyB7MTYsMHg0NmU1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7IDIsMHg0NmY1LDAsezB4ZDMsMHgyMn19LAorIHsxNiwweDQ2ZjcsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH19LAorIHsxNiwweDQ3MDcsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn19LAorIHsxNiwweDQ3MTcsMCx7MHhjMCwweGUwLDB4YzIsMHhjYSwweGMyLDB4Y2YsMHg5MCwweDdmLDB4OTgsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDMwLDB4MmUsMHgwM319LAorIHsxNiwweDQ3MjcsMCx7MHgxMiwweDE0LDB4YTYsMHg5MCwweDdmLDB4OTgsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDUzLDB4YTgsMHhmYSwweDEyLDB4MTYsMHg2MX19LAorIHsxNiwweDQ3MzcsMCx7MHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMH19LAorIHsxNiwweDQ3NDcsMCx7MHhlMCwweGZhLDB4ZDAsMHhlMCwweGY5LDB4ZDAsMHhlMCwweGY4LDB4ZDAsMHhkMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhmMH19LAorIHsgMywweDQ3NTcsMCx7MHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0NzVhLDAsezB4ZTQsMHg5MCwweDc2LDB4NjYsMHhmMCwweDEyLDB4NDQsMHhhMSwweDIwLDB4MjYsMHgxMywweDkwLDB4NzYsMHg2NiwweGUwLDB4YzN9fSwKKyB7MTYsMHg0NzZhLDAsezB4OTQsMHgwMiwweDUwLDB4MGEsMHhlMCwweDA0LDB4ZjAsMHhkMiwweDQyLDB4MTIsMHg0YSwweGY2LDB4ODAsMHhlYSwweDMwLDB4MjZ9fSwKKyB7MTYsMHg0NzdhLDAsezB4MDUsMHgxMiwweDI4LDB4MDEsMHhjMiwweDI2LDB4MzAsMHgyNSwweDJiLDB4OTAsMHg3NiwweDk2LDB4ZTAsMHg1NCwweGZjLDB4ZjB9fSwKKyB7MTYsMHg0NzhhLDAsezB4OTAsMHg4MCwweDAzLDB4ZjAsMHgxMiwweDE0LDB4OTYsMHg5MCwweDc2LDB4OTYsMHhlMCwweDQ0LDB4MDMsMHhmMCwweDkwLDB4ODB9fSwKKyB7MTYsMHg0NzlhLDAsezB4MDMsMHhmMCwweGU0LDB4OTAsMHg3NiwweDY3LDB4ZjAsMHg5MCwweDc2LDB4NjcsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGI0LDB4NGJ9fSwKKyB7MTAsMHg0N2FhLDAsezB4ZjYsMHgxMiwweDNmLDB4ZmEsMHgxMiwweDQxLDB4MWIsMHg4MCwweGM1LDB4MjJ9fSwKKyB7MTYsMHg0N2I0LDAsezB4ZTQsMHg5MCwweDc2LDB4OWIsMHhmMCwweDkwLDB4NzYsMHg5YiwweGUwLDB4ZmYsMHgwNCwweGYwLDB4ZWYsMHg2MCwweDA4LDB4ZTB9fSwKKyB7MTYsMHg0N2M0LDAsezB4MjQsMHgwOCwweGY4LDB4ZTQsMHhmNiwweDgwLDB4ZWUsMHg5MCwweDc2LDB4OTYsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDU0LDB4Zjd9fSwKKyB7MTYsMHg0N2Q0LDAsezB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweGU0LDB4ZjUsMHgxOCwweGQyLDB4MzUsMHhmNSwweDBlLDB4ZjUsMHgxMCwweGQyLDB4MzZ9fSwKKyB7MTYsMHg0N2U0LDAsezB4NzUsMHgxMiwweDExLDB4NzUsMHgxMywweDIyLDB4YzIsMHgzNywweGMyLDB4MzksMHhjMiwweDM4LDB4ZjUsMHgxNiwweGY1LDB4MTR9fSwKKyB7MTEsMHg0N2Y0LDAsezB4ZjUsMHgxYSwweGY1LDB4MGQsMHhjMiwweDNiLDB4YzIsMHgzYywweGMyLDB4M2QsMHgyMn19LAorIHsxNiwweDQ4MDAsMCx7MHg5MCwweDdmLDB4ZWMsMHhlMCwweDkwLDB4NzYsMHg4MywweGYwLDB4ZTAsMHgxNCwweDYwLDB4MTcsMHgxNCwweDYwLDB4MjEsMHgxNH19LAorIHsxNiwweDQ4MTAsMCx7MHg2MCwweDJiLDB4MTQsMHg2MCwweDMyLDB4MjQsMHgwNCwweDcwLDB4MzgsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MX19LAorIHsxNiwweDQ4MjAsMCx7MHhmMCwweDgwLDB4MzUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MiwweGYwLDB4MTIsMHgzZSwweDhmLDB4ODAsMHgyOH19LAorIHsxNiwweDQ4MzAsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MCwweGYwLDB4MTIsMHgxOCwweDAwLDB4ODAsMHgxYiwweDkwLDB4N2YsMHhlYX19LAorIHsxNiwweDQ4NDAsMCx7MHhlMCwweDkwLDB4NzYsMHg4NCwweGYwLDB4ODAsMHgxMSwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkzLDB4ZjAsMHg4MH19LAorIHsxMCwweDQ4NTAsMCx7MHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ZDMsMHgyMn19LAorIHsxNiwweDQ4NWEsMCx7MHhlNCwweDkwLDB4NzYsMHgyNiwweGYwLDB4OTAsMHg3NiwweDI2LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzNH19LAorIHsxNiwweDQ4NmEsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH19LAorIHsxNiwweDQ4N2EsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI2LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX19LAorIHsxNiwweDQ4OGEsMCx7MHhlZiwweGI0LDB4MDQsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHhlZiwweDc1LDB4ZjAsMHgwM319LAorIHsxNiwweDQ4OWEsMCx7MHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MH19LAorIHsgNiwweDQ4YWEsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4MjJ9fSwKKyB7IDIsMHg0OGIwLDAsezB4OGYsMHgyZX19LAorIHsxNiwweDQ4YjIsMCx7MHhlNCwweGY1LDB4MmYsMHg3NSwweDMwLDB4ZmYsMHg3NSwweDMxLDB4MDYsMHg3NSwweDMyLDB4YmUsMHhhYiwweDMwLDB4YWEsMHgzMX19LAorIHsxNiwweDQ4YzIsMCx7MHhhOSwweDMyLDB4OTAsMHgwMCwweDAxLDB4MTIsMHgzNiwweGFiLDB4YjQsMHgwMywweDFmLDB4YWYsMHgyZiwweDA1LDB4MmYsMHhlZn19LAorIHsxNiwweDQ4ZDIsMCx7MHg2NSwweDJlLDB4NzAsMHgwMSwweDIyLDB4MTIsMHgzNiwweDkyLDB4N2UsMHgwMCwweDI5LDB4ZmYsMHhlZSwweDNhLDB4YzksMHhlZn19LAorIHsxNiwweDQ4ZTIsMCx7MHhjOSwweDc1LDB4MzAsMHhmZiwweGY1LDB4MzEsMHg4OSwweDMyLDB4ODAsMHhkMiwweDdiLDB4MDAsMHg3YSwweDAwLDB4NzksMHgwMH19LAorIHsgMSwweDQ4ZjIsMCx7MHgyMn19LAorIHsxMiwweDQ4ZjMsMCx7MHhjMiwweDM3LDB4ZTQsMHhmNSwweDBlLDB4ZjUsMHgxMCwweGMyLDB4MzYsMHhmNSwweDE0LDB4MjJ9fSwKKyB7MTYsMHg0OTAwLDAsezB4MDIsMHgyZiwweGU3LDB4MDAsMHgwMiwweDNkLDB4NDcsMHgwMCwweDAyLDB4NGQsMHg0NiwweDAwLDB4MDIsMHg0YiwweGQ1LDB4MDB9fSwKKyB7MTYsMHg0OTEwLDAsezB4MDIsMHg0YiwweDYwLDB4MDAsMHgwMiwweDJmLDB4ZmYsMHgwMCwweDAyLDB4NGIsMHhlZCwweDAwLDB4MDIsMHg0YiwweDgxLDB4MDB9fSwKKyB7MTYsMHg0OTIwLDAsezB4MDIsMHg0YywweDA0LDB4MDAsMHgwMiwweDNmLDB4ZDUsMHgwMCwweDAyLDB4NGMsMHgxYiwweDAwLDB4MDIsMHg0YywweDMyLDB4MDB9fSwKKyB7MTYsMHg0OTMwLDAsezB4MDIsMHg0YywweDQ5LDB4MDAsMHgwMiwweDRjLDB4NjAsMHgwMCwweDAyLDB4NGMsMHg3NywweDAwLDB4MDIsMHg0YywweDhlLDB4MDB9fSwKKyB7MTYsMHg0OTQwLDAsezB4MDIsMHg0YywweGE1LDB4MDAsMHgwMiwweDRjLDB4YmMsMHgwMCwweDAyLDB4NGMsMHhkMywweDAwLDB4MDIsMHg0YywweGVhLDB4MDB9fSwKKyB7IDgsMHg0OTUwLDAsezB4MDIsMHg0ZCwweDAxLDB4MDAsMHgwMiwweDRkLDB4MTgsMHgwMH19LAorIHsxNiwweDQ5NTgsMCx7MHg5MCwweDc2LDB4NDYsMHg3NCwweDgwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhM319LAorIHsxNiwweDQ5NjgsMCx7MHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMH19LAorIHsxNiwweDQ5NzgsMCx7MHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhM319LAorIHsxNiwweDQ5ODgsMCx7MHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMH19LAorIHsxNiwweDQ5OTgsMCx7MHhhMywweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMH19LAorIHsgNSwweDQ5YTgsMCx7MHhhMywweGYwLDB4YTMsMHhmMCwweDIyfX0sCisgezE2LDB4NDlhZCwwLHsweGU0LDB4OTAsMHg3NiwweDI1LDB4ZjAsMHg5MCwweDc2LDB4MjUsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDM0fX0sCisgezE2LDB4NDliZCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfX0sCisgezE2LDB4NDljZCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNCwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjUsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fX0sCisgezE2LDB4NDlkZCwwLHsweGVmLDB4YjQsMHgwNCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2UsMHhjMCwweGUwfX0sCisgezE2LDB4NDllZCwwLHsweGZlLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVlfX0sCisgeyAyLDB4NDlmZCwwLHsweGYwLDB4MjJ9fSwKKyB7MTYsMHg0OWZmLDAsezB4ZTQsMHhmZSwweDc1LDB4MWQsMHhmZiwweDc1LDB4MWUsMHgwNSwweDc1LDB4MWYsMHgxMiwweGFiLDB4MWQsMHhhYSwweDFlLDB4YTl9fSwKKyB7MTYsMHg0YTBmLDAsezB4MWYsMHg5MCwweDAwLDB4MDEsMHgxMiwweDM2LDB4YWIsMHg2NCwweDAyLDB4NzAsMHgyZiwweGNkLDB4ZWUsMHhjZCwweDBlLDB4ZWR9fSwKKyB7MTYsMHg0YTFmLDAsezB4NmYsMHg3MCwweDAxLDB4MjIsMHg5MCwweDAwLDB4MDIsMHgxMiwweDM3LDB4MGUsMHg4NSwweGYwLDB4MWIsMHhmNSwweDFjLDB4NjJ9fSwKKyB7MTYsMHg0YTJmLDAsezB4MWIsMHhlNSwweDFiLDB4NjIsMHgxYywweGU1LDB4MWMsMHg2MiwweDFiLDB4MjksMHhmZCwweGU1LDB4MWIsMHgzYSwweGM5LDB4ZWR9fSwKKyB7MTYsMHg0YTNmLDAsezB4YzksMHg3NSwweDFkLDB4ZmYsMHhmNSwweDFlLDB4ODksMHgxZiwweDgwLDB4YzEsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9fSwKKyB7IDEsMHg0YTRmLDAsezB4MjJ9fSwKKyB7MTYsMHg0YTUwLDAsezB4MzAsMHgyZCwweDM5LDB4YzIsMHgyZCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGQsMHhlNCwweDkwLDB4NzZ9fSwKKyB7MTYsMHg0YTYwLDAsezB4N2MsMHhmMCwweGEzLDB4NzQsMHhmOCwweGYwLDB4YTMsMHg3NCwweDBhLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwZCwweGU0LDB4OTB9fSwKKyB7MTYsMHg0YTcwLDAsezB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweGYwLDB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMywweDBkLDB4ZTR9fSwKKyB7MTMsMHg0YTgwLDAsezB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4ZjgsMHhmMCwweGEzLDB4NzQsMHgxNywweGYwLDB4MjJ9fSwKKyB7MTYsMHg0YThkLDAsezB4ZTQsMHhmZiwweDc0LDB4NTYsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4Mjh9fSwKKyB7MTYsMHg0YTlkLDAsezB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDVlLDB4MmYsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHg0YWFkLDAsezB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgzOCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODN9fSwKKyB7IDYsMHg0YWJkLDAsezB4ZWUsMHhmMCwweDBmLDB4YmYsMHgwOCwweGNjfX0sCisgeyAxLDB4NGFjMywwLHsweDIyfX0sCisgezE2LDB4NGFjNCwwLHsweGU0LDB4OTAsMHg3MiwweDM2LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwfX0sCisgezE2LDB4NGFkNCwwLHsweDcyLDB4MzMsMHhmMCwweDkwLDB4NzIsMHgzMiwweGYwLDB4OTAsMHg3MiwweDAxLDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3MiwweDMzfX0sCisgezE2LDB4NGFlNCwwLHsweGYwLDB4OTAsMHg3MiwweDMyLDB4ZjAsMHg5MCwweDcyLDB4MDEsMHgwNCwweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg0NCwweDA0fX0sCisgeyAyLDB4NGFmNCwwLHsweGYwLDB4MjJ9fSwKKyB7MTYsMHg0YWY2LDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDMwLDB4NDIsMHgwNCwweGUwLDB4NDR9fSwKKyB7MTYsMHg0YjA2LDAsezB4MDIsMHhmMCwweDdmLDB4ZGMsMHg3ZSwweDA1LDB4MTIsMHg0ZCwweDJmLDB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGY3LDB4ZjB9fSwKKyB7IDUsMHg0YjE2LDAsezB4ZTAsMHg0NCwweDA0LDB4ZjAsMHgyMn19LAorIHsxNiwweDRiMWIsMCx7MHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NzAsMHgxNCwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4MDQsMHgxMn19LAorIHsxNiwweDRiMmIsMCx7MHg0OCwweDVhLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH19LAorIHsgMywweDRiM2IsMCx7MHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0YjNlLDAsezB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDcwLDB4MTMsMHg5MCwweDdmLDB4ZTksMHhlMCwweDE0LDB4NzAsMHgwNCwweDEyLDB4NDl9fSwKKyB7MTYsMHg0YjRlLDAsezB4YWQsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9fSwKKyB7IDIsMHg0YjVlLDAsezB4ZjAsMHgyMn19LAorIHsxNiwweDRiNjAsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDEwLDB4ZjAsMHg5MH19LAorIHsxNiwweDRiNzAsMCx7MHg3NiwweDk2LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMH19LAorIHsgMSwweDRiODAsMCx7MHgzMn19LAorIHsxNiwweDRiODEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsxNSwweDRiOTEsMCx7MHhjMiwweDI5LDB4OTAsMHg3NiwweDhkLDB4NzQsMHgwMSwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0YmEwLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4ODIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDkxLDB4ZjAsMHg5MCwweDc2LDB4OTJ9fSwKKyB7MTEsMHg0YmIwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTAsMHhmMCwweDkwLDB4NzYsMHg5MywweGYwLDB4ZDMsMHgyMn19LAorIHsxNiwweDRiYmIsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDMwLDB4ZTcsMHgxMiwweGUwLDB4NDQsMHgwMSwweGYwLDB4N2YsMHgxNCwweDdlLDB4MDAsMHgxMn19LAorIHsxMCwweDRiY2IsMCx7MHg0ZCwweDJmLDB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHgyMn19LAorIHsxNiwweDRiZDUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDI1LDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOH19LAorIHsgOCwweDRiZTUsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGJlZCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgeyA3LDB4NGJmZCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGMwNCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwMiwweGYwfX0sCisgeyA3LDB4NGMxNCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGMxYiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwNCwweGYwfX0sCisgeyA3LDB4NGMyYiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGMzMiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwNCwweGYwfX0sCisgeyA3LDB4NGM0MiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGM0OSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwOCwweGYwfX0sCisgeyA3LDB4NGM1OSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGM2MCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwOCwweGYwfX0sCisgeyA3LDB4NGM3MCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGM3NywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgxMCwweGYwfX0sCisgeyA3LDB4NGM4NywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGM4ZSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgxMCwweGYwfX0sCisgeyA3LDB4NGM5ZSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGNhNSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgyMCwweGYwfX0sCisgeyA3LDB4NGNiNSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGNiYywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgyMCwweGYwfX0sCisgeyA3LDB4NGNjYywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGNkMywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHg0MCwweGYwfX0sCisgeyA3LDB4NGNlMywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGNlYSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg0MCwweGYwfX0sCisgeyA3LDB4NGNmYSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGQwMSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHg4MCwweGYwfX0sCisgeyA3LDB4NGQxMSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGQxOCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg4MCwweGYwfX0sCisgeyA3LDB4NGQyOCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGQyZiwwLHsweDhlLDB4MzUsMHg4ZiwweDM2LDB4ZTUsMHgzNiwweDE1LDB4MzYsMHhhZSwweDM1LDB4NzAsMHgwMiwweDE1LDB4MzUsMHg0ZSwweDYwfX0sCisgeyA3LDB4NGQzZiwwLHsweDA1LDB4MTIsMHgxNCwweDg1LDB4ODAsMHhlZSwweDIyfX0sCisgezE2LDB4NGQ0NiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDQsMHhmMCwweGQwfX0sCisgeyA2LDB4NGQ1NiwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRkNWMsMCx7MHg5MCwweDc2LDB4ODIsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ZDMsMHgyMn19LAorIHsgOSwweDRkNmMsMCx7MHhjMiwweDI1LDB4NTMsMHhkOCwweGVmLDB4NDMsMHhkOCwweDIwLDB4MzJ9fSwKKyB7IDcsMHg0ZDc1LDAsezB4NTMsMHg5OCwweGZlLDB4NTMsMHg5OCwweGZkLDB4MzJ9fSwKKyB7IDcsMHg0ZDdjLDAsezB4NTMsMHhjMCwweGZlLDB4NTMsMHhjMCwweGZkLDB4MzJ9fSwKKyB7IDYsMHg0ZDgzLDAsezB4NTMsMHg5MSwweGJmLDB4ZDIsMHgyZCwweDMyfX0sCisgeyA2LDB4NGQ4OSwwLHsweDUzLDB4OTEsMHg3ZiwweGQyLDB4MmMsMHgzMn19LAorIHsgNCwweDRkOGYsMCx7MHg1MywweDkxLDB4ZGYsMHgzMn19LAorIHsgNCwweDRkOTMsMCx7MHg1MywweGQ4LDB4ZjcsMHgzMn19LAorIHsgNCwweDRkOTcsMCx7MHgxMiwweDE3LDB4MzAsMHgyMn19LAorIHsgMywweDRkOWIsMCx7MHhjMiwweDhkLDB4MzJ9fSwKKyB7IDMsMHg0ZDllLDAsezB4YzIsMHg4ZiwweDMyfX0sCisgeyAyLDB4NGRhMSwwLHsweGQzLDB4MjJ9fSwKKyB7IDIsMHg0ZGEzLDAsezB4ZDMsMHgyMn19LAorIHsgMiwweDRkYTUsMCx7MHhkMywweDIyfX0sCisgeyAyLDB4NGRhNywwLHsweGQzLDB4MjJ9fSwKKyB7IDIsMHg0ZGE5LDAsezB4ZDMsMHgyMn19LAorIHsgMiwweDRkYWIsMCx7MHhjMywweDIyfX0sCisgeyAwLDB4MDAwMCwxLHswfX0KK307CisvKiBTb3VyY2U6IEVNSTYyU0ZXLkhFWCAKKzoxMDBDOEYwMDQxNzY2ODAxNDE3NjZBMDI0MTc2NkIwQUMxMjBDMTIxMjMKKzoxMDQ0QTEwMEMyQUZEMjI0OTA3RjkzNzQzMEYwOTA3RjlDNzRCQkYwQTQKKzoxMDQ0QjEwMDkwN0Y5NkUwNDQzMEYwRTA1NDMwRjA5MDdGOTQ3NDMwNzcKKzoxMDQ0QzEwMEYwOTA3RjlENzRDRkYwOTA3Rjk3NzRBMEYwOTA3Rjk1Q0UKKzoxMDQ0RDEwMDc0QzBGMDkwN0Y5RTc0MDNGMDkwN0Y5OUUwMzBFMjA5MDAKKzoxMDQ0RTEwMDkwMDUxOTc0QTBGMEU0QTNGMEMyMjVDMjIyQzIyM0MyMzAKKzoxMDQ0RjEwMDI2MTI0QUM0MTIyREE5MTIzQkQzMTI0NTU5MTIzQTQyMkYKKzoxMDQ1MDEwMDkwNzY2ODc0MDFGMDcwMEYxMjRCQkIxMjA3RkUxMjREQ0EKKzoxMDQ1MTEwMEExMTIxQjQwMTIxNDk2MTI0MzBCOTA3RkFGRTA0NDAxOEQKKzoxMDQ1MjEwMEYwOTA3RkFFRTA0NDFGRjA5MDdGQUM3NEZGRjA5MDdGN0QKKzoxMDQ1MzEwMEFERjA5MDdGREVGMDkwN0ZERkYwOTA3RkFCRjA5MDdGNjkKKzoxMDQ1NDEwMEE5RjA5MDdGQUFGMDUzOTFFRjQzRDgyMEQyRTg0M0Q4NDUKKzowODQ1NTEwMDIwNTNBOEEwNDNBODgwMjIxQQorOjEwNDc1QTAwRTQ5MDc2NjZGMDEyNDRBMTIwMjYxMzkwNzY2NkUwQzNCMAorOjEwNDc2QTAwOTQwMjUwMEFFMDA0RjBEMjQyMTI0QUY2ODBFQTMwMjY1NQorOjEwNDc3QTAwMDUxMjI4MDFDMjI2MzAyNTJCOTA3Njk2RTA1NEZDRjBDQgorOjEwNDc4QTAwOTA4MDAzRjAxMjE0OTY5MDc2OTZFMDQ0MDNGMDkwODA5RAorOjEwNDc5QTAwMDNGMEU0OTA3NjY3RjA5MDc2NjdFMDA0RjBFMEI0NEJCQgorOjBBNDdBQTAwRjYxMjNGRkExMjQxMUI4MEM1MjJFRgorOjEwMjgwMTAwQzIyMEMyMjFDMjJBOTA3RkU4RTAxMjM3RjkyODMwMDBBNQorOjEwMjgxMTAwMjg4QzAxMjhBMjAyMkExRjIxMkE2QTIyMjkzRDgwMjkwNworOjEwMjgyMTAwN0Q4MTI5RDE4MjJBODRBMTJBQkFBMjAwMDAyQUJGOTBERgorOjEwMjgzMTAwN0ZFOUUwMTQ2MDExMjRGRTYwMjgyNEZFNjAzQjI0RkM0MworOjEwMjg0MTAwNzA0MDEyNEJBMDQxQ0IxMjREQTc0MDAyNDFDQjkwN0Y2QgorOjEwMjg1MTAwRUFFMEI0MDEwNEMyMjI0MUNCOTA3RkI0RTA0NDAxRjAyQworOjEwMjg2MTAwNDFDQjEyNERBOTkwN0ZFQUUwQjQwMTA0RDIyMjQxQ0JDMQorOjEwMjg3MTAwOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkI0RTA0NDAxRjA5QgorOjEwMjg4MTAwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZFOUUwMjQ1QgorOjEwMjg5MTAwRjU3MDA1MTI0ODAwNDFDQjkwN0ZCNEUwNDQwMUYwNDE0RQorOjEwMjhBMTAwQ0I5MDdGRTlFMDI0RkQ2MDU0MjQwMjYwMDIyMTM0MTJDMAorOjEwMjhCMTAwNERBNzQwMDI0MUNCOTA3RkVBRTA3MDM4OTA3RkVDRTA3OQorOjEwMjhDMTAwRjQ1NDgwRkZDNDU0MEZGRkUwNTQwNzJGMjVFMDI0QjREMworOjEwMjhEMTAwRjU4MkU0MzQ3RkY1ODNFNEYwOTA3RkVDRTA1NDgwRkZFRgorOjEwMjhFMTAwMTMxMzEzNTQxRkZGRTA1NDA3MkY5MDdGRDdGMEUwNDREOAorOjEwMjhGMTAwMjBGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0IxMjREQTlDRgorOjEwMjkwMTAwNDAwMjQxQ0I5MDdGRUFFMDcwMjA5MDdGRUNFMEY0NTRFQworOjEwMjkxMTAwODBGRkM0NTQwRkZGRTA1NDA3MkYyNUUwMjRCNEY1ODI1MworOjEwMjkyMTAwRTQzNDdGRjU4Mzc0MDFGMDQxQ0I5MDdGQjRFMDQ0MDEzRQorOjEwMjkzMTAwRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkU5RTBERQorOjEwMjk0MTAwNjAxMjI0Rjg2MDA5MjQwMjcwMjkxMjQzREI0MUNCMTI4MgorOjEwMjk1MTAwNEQ1QzQxQ0IxMjREQTVBMjIyRTQzM0ZGMjVFMEZGQTIzRAorOjEwMjk2MTAwMjNFNDMzNEY5MDdGMDBGMEU0QTNGMDkwN0ZCNTc0MDIyRAorOjEwMjk3MTAwRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCOTA3RkU5RTA5RQorOjEwMjk4MTAwNjAzMzI0RjY2MDJBMjQwNDcwM0Q5MDdGRUJFMDI0REU1RQorOjEwMjk5MTAwNjAwQzA0NzAxMjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0Y1MQorOjEwMjlBMTAwQjRFMDQ0MDFGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I2RAorOjEwMjlCMTAwMTI0Njg1NDFDQjEyNERBNUU0OTA3RjAwRjBBM0YwOTAyMworOjEwMjlDMTAwN0ZCNTc0MDJGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I3QworOjEwMjlEMTAwOTA3RkU5RTAyNEY0NjAzNDI0MEM3MDM5MTI0REE1OTAwNQorOjEwMjlFMTAwN0ZFQ0UwRjQ1NDgwRkZDNDU0MEZGRkUwNTQwNzJGMjUxRgorOjEwMjlGMTAwRTAyNEI0RjU4MkU0MzQ3RkY1ODNFMDU0RkQ5MDdGMDA1OAorOjEwMkEwMTAwRjBFNEEzRjA5MDdGQjU3NDAyRjA0MUNCOTA3RkI0RTA4NQorOjEwMkExMTAwNDQwMUYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0Y4MQorOjEwMkEyMTAwRTlFMDI0RjY2MDEyMTQ2MDFBMjQwMjcwMUREMjIwOTA4RAorOjEwMkEzMTAwN0ZCNEUwNDQwMUYwODAxMkQyMjA5MDdGQjRFMDQ0MDFFMQorOjEwMkE0MTAwRjA4MDA3OTA3RkI0RTA0NDAxRjAyMDIwMTg5MDdGRUVFMQorOjEwMkE1MTAwRTA3MDA0QTNFMDYwMEJEMjI5RDIyNzEyMTc0QUQyMkFEMAorOjEwMkE2MTAwODAwMzEyMDgwMEMyMjA4MDYxOTA3RkVFRTA3MDA0QTMxMQorOjEwMkE3MTAwRTA2MDBCRDIyOUQyMjgxMjE3NEFEMjJBODA0QzEyMzg5MAorOjEwMkE4MTAwNzQ4MDQ3OTA3RkU5RTAyNEZFNjAxMjE0NjAxQTI0MDJFQQorOjEwMkE5MTAwNzAxREQyMjE5MDdGQjRFMDQ0MDFGMDgwMTJEMjIxOTBDOAorOjEwMkFBMTAwN0ZCNEUwNDQwMUYwODAwNzkwN0ZCNEUwNDQwMUYwMjA1RQorOjEwMkFCMTAwMjEwMzEyMTAwMEMyMjE4MDExMTIyQUQ2ODAwQzEyNEQ1RQorOjEwMkFDMTAwQUI1MDA3OTA3RkI0RTA0NDAxRjAyMDJBMDc5MDdGQjQxNworOjA1MkFEMTAwRTA0NDAyRjAyMkM4Cis6MTA0M0RCMDAxMjREQTM0MDAyODFBMDkwN0ZFQkUwMjRGRTYwMUUxNERGCis6MTA0M0VCMDA2MDQ2MTQ2MDZFMTQ3MDAyODE5MTI0MDQ2MDAyODE5OUZFCis6MTA0M0ZCMDA3NDA1OTA3RkQ0RjA3NDAwOTA3RkQ1RjAyMjkwN0ZFQTAzCis6MTA0NDBCMDBFMEZGMTI0OUZGOEIyMDhBMjE4OTIyRUE0OTYwMTFDRUY1Cis6MTA0NDFCMDBFQUNFRUU5MDdGRDRGMENGRTlDRkVGOTA3RkQ1RjAyMkFDCis6MTA0NDJCMDA5MDdGQjRFMDQ0MDFGMDIyOTA3RkVBRTBGRjEyNDhCMEE1Cis6MTA0NDNCMDA4QjIwOEEyMTg5MjJFQTQ5NjAxMUNFRUFDRUVFOTA3RjQ5Cis6MTA0NDRCMDBENEYwQ0ZFOUNGRUY5MDdGRDVGMDIyOTA3RkI0RTA0NDRBCis6MTA0NDVCMDAwMUYwMjI5MDdGRUFFMEZGOTA3RUMwRTBGREEzRTBGQjNECis6MTA0NDZCMDAxMjE3OTQ4QjIwOEEyMTg5MjJFQTQ5NjAxMUNFRUFDRTU5Cis6MTA0NDdCMDBFRTkwN0ZENEYwQ0ZFOUNGRUY5MDdGRDVGMDIyOTA3RkY1Cis6MTA0NDhCMDBCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RjJECis6MDU0NDlCMDBCNEUwNDQwMUYwNTMKKzowMTQ0QTAwMDIyRjkKKzowMzAwMzMwMDAyNEQ2QzBGCis6MDk0RDZDMDBDMjI1NTNEOEVGNDNEODIwMzJEMAorOjAyMEM5RjAwQzEyRjYzCis6MDYzRkZBMDAxMjRBQzRDMjMxMjI4QworOjEwNDMwQjAwRTQ5MDc2OTZGMDkwODAwM0YwOTA3RkUwNzQ5MEYwOTBCQworOjEwNDMxQjAwN0ZFMTc0MDRGMEU0OTA3RkRERjA5MDdGQTFGMDUzOEU4OQorOjEwNDMyQjAwRjg3NTg4MDU3NUI4MjA3NUY4MDE0MzhFMzBGNUM4NzU5QQorOjEwNDMzQjAwQ0E3Rjc1Q0JGODQzQTgyMDEyMDc0QUMyMkNDMjJEQzJFNAorOjEwNDM0QjAwMkJDMjJGOTA3RkZDNzREREYwOTA3RkZGNzRGRkYwOTBGOQorOjEwNDM1QjAwN0Y5N0UwNDQwMUYwOTA3NjE5NzQwMUYwRTQ5MDc2ODUzNAorOjEwNDM2QjAwRjBBM0YwOTA3NjgxRjA5MDc2ODBGMDEyNDk1ODEyMEZGRQorOjEwNDM3QjAwQzYxMjRBOEQ5MDdGOTdFMDQ0MDhGMEUwNTRCOUYwRDIxMgorOjEwNDM4QjAwMzAyMDMwMTgxMjQ3QjQxMjMwMDAxMjQwMDAxMjQyMTY3RgorOjEwNDM5QjAwMTI0QTUwMTIxQjA0MTIxNjYxMTI0MjE2QzIyRkMyMzE1RQorOjEwNDNBQjAwQzIzMkMyMzRDMjMzQzIyOUMyMjdDMjI4RTRGNTExOTBFQgorOjEwNDNCQjAwNzY4OUYwOTA3NjNGRjA5MDc2NDFGMDkwNzY0MEYwOTBEMQorOjEwNDNDQjAwNzY4QUYwQTNGMEEzMDRGMEU0QTNGMDkwNzY5OUYwMjJBMAorOjEwNEE1MDAwMzAyRDM5QzIyRDkwNzYxOUUwRkZCNDAxMERFNDkwNzYyNworOjEwNEE2MDAwN0NGMEEzNzRGOEYwQTM3NDBBRjBFRkI0MDIwREU0OTBBNAorOjEwNEE3MDAwNzY3Q0YwQTM3NEYwRjBBMzc0MEJGMEVGQjQwMzBERTRCNAorOjBENEE4MDAwOTA3NjdDRjBBMzc0RjhGMEEzNzQxN0YwMjI3OAorOjEwMUIwNDAwMzAyQzM4QzIyQzkwNzYxOUUwRkZCNDAxMEU5MDc2N0MwQworOjEwMUIxNDAwNzRDMEYwQTM3NDE0RjBBMzc0MEJGMEVGQjQwMjBERTREQQorOjEwMUIyNDAwOTA3NjdDRjBBMzc0MTBGMEEzNzQwQ0YwRUZCNDAzMEI2NAorOjBDMUIzNDAwRTQ5MDc2N0NGMEEzNzQxOEYwQTNGMDIyN0IKKzoxMDQxMUIwMDkwNzY4REUwNjQwMTcwMjczMDI3MDhDMjI3MTIwODAwQzMKKzoxMDQxMkIwMDEyMTc0QTMwMjgwOEMyMjgxMjM4NzQxMjE3NEEzMDJBM0MKKzoxMDQxM0IwMDBFRTQ5MDc2OERGMEMyMkE5MDdGQjRFMDQ0MDJGMDkwQUEKKzoxMDQxNEIwMDc2M0ZFMEI0MDEwNUU0RjAxMjMyNkY5MDc2NDFFMEI0QjMKKzoxMDQxNUIwMDAxMDVFNEYwMTIzNDlBOTA3NjQwRTBCNDAxMDMxMjM0NzYKKzoxMDQxNkIwMDlBOTA3RjlCRTAyMEU0MDJDMjNGOTA3RjlCRTAzMEU0N0IKKzoxMDQxN0IwMDAyRDIzRjkwN0Y5QkUwMjBFNTAyQzIzRTkwN0Y5QkUwMDYKKzoxMDQxOEIwMDMwRTUwMkQyM0VBMjQxMzAzRjAxQjM1MDFGQTIzRjkyMTUKKzoxMDQxOUIwMDQxMzAzRjA5OTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3NzgKKzoxMDQxQUIwMEUwNDQwMUYwOTA3Njk3RTA5MDgwMDJGMDMwM0YzNDkwM0QKKzoxMDQxQkIwMDc2MTlFMEZGQjQwMTBFOTA3NjdDNzQ2N0YwQTM3NDA2NTkKKzoxMDQxQ0IwMEYwQTM3NDBCRjBFRkI0MDIwQkU0OTA3NjdDRjBBM0YwNDkKKzoxMDQxREIwMEEzNzQwQ0YwRUZCNDAzMEJFNDkwNzY3Q0YwQTNGMEEzODQKKzoxMDQxRUIwMDc0MThGMEEyNDAzMDNFMDFCMzUwMUZBMjNFOTI0MDMwRjMKKzoxMDQxRkIwMDNFMDk5MDc2OTVFMDQ0MDRGMDgwMDc5MDc2OTVFMDU0NjQKKzowQjQyMEIwMEZCRjA5MDc2OTVFMDkwODAwMUYwMjIxRgorOjAyMDdGRTAwRDMyMjA0Cis6MDI0REExMDBEMzIyMUIKKzowMjREQTMwMEQzMjIxOQorOjEwNEJBMDAwOTA3RkVBRTA5MDc2ODJGMEU0OTA3NjkxRjA5MDc2OTJCMQorOjBCNEJCMDAwRjA5MDc2OTBGMDkwNzY5M0YwRDMyMjA2Cis6MTA0RDVDMDA5MDc2ODJFMDkwN0YwMEYwOTA3RkI1NzQwMUYwRDMyMkMyCis6MTA0ODAwMDA5MDdGRUNFMDkwNzY4M0YwRTAxNDYwMTcxNDYwMjExNDQwCis6MTA0ODEwMDA2MDJCMTQ2MDMyMjQwNDcwMzg5MDdGRUFFMDkwNzY5MTI3Cis6MTA0ODIwMDBGMDgwMzU5MDdGRUFFMDkwNzY5MkYwMTIzRThGODAyOEZCCis6MTA0ODMwMDA5MDdGRUFFMDkwNzY5MEYwMTIxODAwODAxQjkwN0ZFQTVCCis6MTA0ODQwMDBFMDkwNzY4NEYwODAxMTkwN0ZFQUUwOTA3NjkzRjA4MDlCCis6MEE0ODUwMDAwNzkwN0ZCNEUwNDQwMUYwRDMyMjhBCis6MTA0Njg1MDA5MDdGRUNFMDkwNzY4M0YwRTAxNDYwMUQxNDYwMkExNEFFCis6MTA0Njk1MDA2MDM3MTQ2MDQ0MjQwNDcwNTA5MDc2OTFFMDkwN0YwMDU4Cis6MTA0NkE1MDBGMDkwN0ZCNTc0MDFGMDgwNDc5MDc2OTJFMDkwN0YwMDlFCis6MTA0NkI1MDBGMDkwN0ZCNTc0MDFGMDgwMzc5MDc2OTBFMDkwN0YwMEEwCis6MTA0NkM1MDBGMDkwN0ZCNTc0MDFGMDgwMjc5MDc2ODRFMDkwN0YwMEFDCis6MTA0NkQ1MDBGMDkwN0ZCNTc0MDFGMDgwMTc5MDc2OTNFMDkwN0YwMDlECis6MTA0NkU1MDBGMDkwN0ZCNTc0MDFGMDgwMDc5MDdGQjRFMDQ0MDFGMDRECis6MDI0NkY1MDBEMzIyQ0UKKzowMjREQTUwMEQzMjIxNworOjAyNERBNzAwRDMyMjE1Cis6MDI0REE5MDBEMzIyMTMKKzowMjREQUIwMEMzMjIyMQorOjEwMkZFNzAwQzBFMEMwODNDMDgyRDIyNjUzOTFFRjkwN0ZBQjc0MDFCQgorOjA4MkZGNzAwRjBEMDgyRDA4M0QwRTAzMjVCCis6MTA0RDQ2MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDA0RjBEMDczCis6MDY0RDU2MDA4MkQwODNEMEUwMzJBMAorOjEwM0Q0NzAwQzBFMEMwRjBDMDgzQzA4MkMwRDBFOEMwRTBFOUMwRTBGNgorOjEwM0Q1NzAwRUFDMEUwRUJDMEUwRUNDMEUwRURDMEUwRUVDMEUwRUZCMQorOjEwM0Q2NzAwQzBFMDkwN0ZBMkUwOTA3NjdGRjA5MDdGNzRFMDkwNzYzRAorOjEwM0Q3NzAwODdGMDkwN0Y3NUUwOTA3Njg4RjA5MDdGOThFMDQ0MDIxNgorOjEwM0Q4NzAwRjA5MDc2OTZFMEZGMjBFMTBDNDQwMkYwOTA4MDAzRjA3QgorOjEwM0Q5NzAwRDIzMjEyNEFDNDkwNzY3RkUwMjBFMjUwOTA3Njg3RTBENAorOjEwM0RBNzAwRkVBM0UwN0MwMDI0MDBGNTM0RUMzRUY1MzM5MDc2OThEMgorOjEwM0RCNzAwRTBGREFFMzNBRjM0MTIzNkQ4OTA3Njg3RUZGMEQyMkZDRQorOjEwM0RDNzAwMzAzMTI5MjAzRjI2QzIzMTkwN0Y5NEUwNTRDRkYwOTBDNAorOjEwM0RENzAwN0Y5QUUwMzBFNDA0RDIyREMyMkM5MDdGOUFFMDIwRTU1MAorOjEwM0RFNzAwMDRDMjJERDIyQzkwN0Y5NEUwNDQzMEYwMTI0QTUwMTIzNgorOjEwM0RGNzAwMUIwNDMwMkYxMjEyNDIxNkMyMkY3NUU4MDExMjE2OEFDMQorOjEwM0UwNzAwNzVFODBERDIyQjgwMDU3NUU4MDFDMjJCMjAyQjM0OTA2NQorOjEwM0UxNzAwNzYxOUUwRkZCNDAxMEU5MDc2N0M3NDY3RjBBMzc0MDYwMAorOjEwM0UyNzAwRjBBMzc0MEJGMEVGQjQwMjBCOTA3NjdDRTRGMEEzRjBGMAorOjEwM0UzNzAwQTM3NDBDRjBFRkI0MDMwQjkwNzY3Q0U0RjBBM0YwQTMyQgorOjEwM0U0NzAwNzQxOEYwNzVDQUQzNzVDQkZFRDJDQTMwMzQwNEMyMzRBNQorOjEwM0U1NzAwODAwMkQyMzQ1MzkxRUY5MDdGQUI3NDAyRjBGMDkwN0ZFMQorOjEwM0U2NzAwOThFMDU0RkRGMEQwRTBGRkQwRTBGRUQwRTBGREQwRTBEOAorOjEwM0U3NzAwRkNEMEUwRkJEMEUwRkFEMEUwRjlEMEUwRjhEMEQwRDAyOQorOjA4M0U4NzAwODJEMDgzRDBGMEQwRTAzMkJDCis6MTA0QjYwMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDEwRjA5MDhGCis6MTA0QjcwMDA3Njk2RTA1NEZERjA5MDgwMDNGMEQwODJEMDgzRDBFMEIwCis6MDE0QjgwMDAzMjAyCis6MDEyRkZGMDAzMjlGCis6MTA0QkQ1MDBDMEUwQzA4M0MwODJEMjI1NTM5MUVGOTA3RkFCNzQwOEFCCis6MDg0QkU1MDBGMEQwODJEMDgzRDBFMDMyNTEKKzoxMDRCRUQwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwMUYwRjMKKzowNzRCRkQwMEQwODJEMDgzRDBFMDMyMkEKKzoxMDRCODEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwMUYwNUUKKzowRjRCOTEwMEMyMjk5MDc2OEQ3NDAxRjBEMDgyRDA4M0QwRTAzMkFCCis6MTA0QzA0MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDJGMERBCis6MDc0QzE0MDBEMDgyRDA4M0QwRTAzMjEyCis6MTAzRkQ1MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDJGMDE1Cis6MTAzRkU1MDA5MDdGQzdFMEY1MTE3NTBGMDA3NTBEMDBEMjMzRDA4MkIzCis6MDUzRkY1MDBEMDgzRDBFMDMyOTIKKzoxMDRDMUIwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwNEYwQzEKKzowNzRDMkIwMEQwODJEMDgzRDBFMDMyRkIKKzoxMDRDMzIwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwNEYwQTkKKzowNzRDNDIwMEQwODJEMDgzRDBFMDMyRTQKKzoxMDRDNDkwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwOEYwOEYKKzowNzRDNTkwMEQwODJEMDgzRDBFMDMyQ0QKKzoxMDRDNjAwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwOEYwNzcKKzowNzRDNzAwMEQwODJEMDgzRDBFMDMyQjYKKzoxMDRDNzcwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQxMEYwNTkKKzowNzRDODcwMEQwODJEMDgzRDBFMDMyOUYKKzoxMDRDOEUwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQxMEYwNDEKKzowNzRDOUUwMEQwODJEMDgzRDBFMDMyODgKKzoxMDRDQTUwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQyMEYwMUIKKzowNzRDQjUwMEQwODJEMDgzRDBFMDMyNzEKKzoxMDRDQkMwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQyMEYwMDMKKzowNzRDQ0MwMEQwODJEMDgzRDBFMDMyNUEKKzoxMDRDRDMwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQ0MEYwQ0QKKzowNzRDRTMwMEQwODJEMDgzRDBFMDMyNDMKKzoxMDRDRUEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQ0MEYwQjUKKzowNzRDRkEwMEQwODJEMDgzRDBFMDMyMkMKKzoxMDREMDEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQ4MEYwNUUKKzowNzREMTEwMEQwODJEMDgzRDBFMDMyMTQKKzoxMDREMTgwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQ4MEYwNDYKKzowNzREMjgwMEQwODJEMDgzRDBFMDMyRkQKKzoxMDQyMTYwMDkwNzYxOUUwNjQwMTcwMzU5MDc2ODdFMEZGRDM5NDJEOEYKKzoxMDQyMjYwMDQwMkI5MDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBFMEQzMUEKKzoxMDQyMzYwMDk0MEY0MDE5RTRGMEVGRDM5NDMxNDAwODkwNzYxOTc0NDYKKzoxMDQyNDYwMDAzRjA4MDA2OTA3NjE5NzQwMkYwMTIzRThGOTA3NjE5NkMKKzoxMDQyNTYwMEUwQjQwMjJDOTA3Njg3RTBGRkMzOTQyRjUwMjJFRkQzNzAKKzoxMDQyNjYwMDk0MkE0MDFDOTA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwREUKKzoxMDQyNzYwMEUwRDM5NDBGNDAwQUU0RjA5MDc2MTkwNEYwMTIzRThGRDIKKzoxMDQyODYwMDkwNzYxOUUwQjQwMjI2OTA3Njg3RTBEMzk0MzE0MDFERUIKKzoxMDQyOTYwMDkwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEUwRDM5NDBGNzIKKzoxMDQyQTYwMDQwMEJFNEYwOTA3NjE5NzQwM0YwMTIzRThGOTA3NjE5NjUKKzoxMDQyQjYwMEUwNjQwMzcwM0Y5MDc2ODdFMEZGQzM5NDVGNTAzNTkwQ0IKKzoxMDQyQzYwMDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBFMEQzOTQwRjQwOTIKKzoxMDQyRDYwMDIzRTRGMEVGQzM5NDJGNTAwQ0VGRDM5NDJBNDAwNjkwQkEKKzoxMDQyRTYwMDc2MTk3NDAxRjBFRkQzOTQyRjQwMDY5MDc2MTk3NDAyNzQKKzoxMDQyRjYwMEYwMTIzRThGOTA3Njg2RTA3MDA1OTA3Njg1RjAyMkU0ODcKKzowNTQzMDYwMDkwNzY4NkYwMjIxNAorOjEwMDc0QTAwOTA3NjlBNzQwMkYwRTQ5MDc2OTFGMEEzRjA5MDc2OTAwNQorOjEwMDc1QTAwRjA5MDc2OTNGMDkwNzY5Njc0MDNGMDkwODAwM0YwRTQyQworOjEwMDc2QTAwOTA3Njk3RjA5MDgwMDJGMDkwNzY5NDA0RjA5MDgwMDA1MgorOjEwMDc3QTAwRjBFNDkwNzY4RUYwOTA3NjFBRjA5MDc2OTUwNEYwQzJCNgorOjEwMDc4QTAwMkU5MDdGOUJFMEZGNTQxMEZGNzAwMkMyM0Y5MDdGOUIyOAorOjEwMDc5QTAwRTBGRjU0MTBGRUZGQkUxMDAyRDIzRjkwN0Y5QkUwRkZBNQorOjEwMDdBQTAwNTQyMEZGNzAwMkMyM0U5MDdGOUJFMEZGNTQyMEZFRkY2MAorOjEwMDdCQTAwQkUyMDAyRDIzRTMwM0YwOTkwNzY5N0UwNTRGRUYwODA4OAorOjEwMDdDQTAwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5N0UwOTA4MDAyRjBFNworOjEwMDdEQTAwMzAzRTA5OTA3Njk1RTA0NDA0RjA4MDA3OTA3Njk1RTBFMworOjEwMDdFQTAwNTRGQkYwOTA3Njk1RTA5MDgwMDFGMEEyM0U5MjQwQTJGMAorOjAzMDdGQTAwM0Y5MjQxRUEKKzowMTA3RkQwMDIyRDkKKzoxMDNFOEYwMDkwNzY5MkUwMTQ2MDFEMTQ3MDAyRTE0NDI0MDI2MDAyRTcKKzoxMDNFOUYwMEUxRDQ5MDc2OTQ3NDAxRjA5MDgwMDBGMEU0OTA3NjhFRTcKKzoxMDNFQUYwMEYwRDIzMTIyOTA3NjE5RTBGRkI0MDExQkU0OTA3RkYyM0IKKzoxMDNFQkYwMEYwOTA3RkYzNzQzMEYwOTA3RkZGNzRGQ0YwOTA3Njk3NjIKKzoxMDNFQ0YwMEUwNTRGREYwNTRGQkYwRUZCNDAyMUJFNDkwN0ZGMkYwRUUKKzoxMDNFREYwMDkwN0ZGMzc0MzRGMDkwN0ZGRjc0RkNGMDkwNzY5N0UwNEUKKzoxMDNFRUYwMDQ0MDJGMDU0RkJGMEVGQjQwMzE4RTQ5MDdGRjJGMDkwMkIKKzoxMDNFRkYwMDdGRjM3NDY0RjA5MDdGRkY3NEZDRjA5MDc2OTdFMDQ0NEEKKzoxMDNGMEYwMDA0RjA5MDc2OTRFMDQ0MDFGMDkwODAwMEYwMzAzRjA5ODcKKzoxMDNGMUYwMDkwNzY5N0UwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUYwOUEKKzoxMDNGMkYwMDkwNzY5N0UwOTA4MDAyRjA5MDc2OTg3NDA0RjA5MDc2RjcKKzoxMDNGM0YwMDhFNzQwMUYwMjI5MDc2MTlFMEZGQjQwMTFCRTQ5MDdGOUMKKzoxMDNGNEYwMEYyRjA5MDdGRjM3NDQ0RjA5MDdGRkY3NEZDRjA5MDc2NjIKKzoxMDNGNUYwMDk3RTA1NEZERjA1NEZCRjBFRkI0MDIxQkU0OTA3RkYyQjYKKzoxMDNGNkYwMEYwOTA3RkYzNzQ0Q0YwOTA3RkZGNzRGQ0YwOTA3Njk3OTUKKzoxMDNGN0YwMEUwNDQwMkYwNTRGQkYwRUZCNDAzMThFNDkwN0ZGMkYwNEEKKzoxMDNGOEYwMDkwN0ZGMzc0OTRGMDkwN0ZGRjc0RkNGMDkwNzY5N0UwM0QKKzoxMDNGOUYwMDQ0MDRGMDkwNzY5NEUwNTRGRUYwOTA4MDAwRjAzMDNGQUYKKzoxMDNGQUYwMDA5OTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRjEKKzoxMDNGQkYwMEYwOTA3Njk3RTA5MDgwMDJGMDkwNzY5ODc0MDZGMDkwRUIKKzowNjNGQ0YwMDc2OEU3NDAyRjAyMjYwCis6MTAxODAwMDA5MDc2OTBFMDE0NjAzNzE0NzAwMjAxRDgxNDcwMDIyMUIxCis6MTAxODEwMDA3MjE0NzAwMjQxM0IyNDA0NjAwMjYxMDM5MDdGRkM3NEU3Cis6MTAxODIwMDBDQ0YwOTA3RkZGNzRGQ0YwOTA3Njk1RTA0NDAxRjA1NDhBCis6MTAxODMwMDAwNUYwOTA4MDAxRjBFNDkwNzYxQUYwQzIyRTIyOTA3NkE2Cis6MTAxODQwMDA5NUUwNDQwMUYwNDQwMkYwMzAzRTA2RTA0NDA0RjA4MEFDCis6MTAxODUwMDAwNzkwNzY5NUUwNTRGQkYwOTA3NjFBRTBCNDAxMDg5MDdBCis6MTAxODYwMDA3Njk1RTA5MDgwMDFGMDkwNzYxOUUwRkZCNDAxMjI5MDI3Cis6MTAxODcwMDA3RkZDNzQ3NEYwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyQjczCis6MTAxODgwMDBGMDkwNzY5N0UwNTRGREYwRTQ5MDc2ODFGMDkwNzY4MEM5Cis6MTAxODkwMDBGMEVGQjQwMjIyOTA3RkZDNzQ2OEYwOTA3RkZGNzRGQzNDCis6MTAxOEEwMDBGMDkwNzY4Rjc0MkZGMDkwNzY5N0UwNDQwMkYwRTQ5MEY5Cis6MTAxOEIwMDA3NjgxRjA5MDc2ODBGMDMwM0YwOTkwNzY5N0UwNTRGRTg0Cis6MTAxOEMwMDBGMDgwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5N0UwNTRGQjIzCis6MTAxOEQwMDBGMDkwODAwMkYwRDIyRTIyOTA3Njk1RTA1NEZFRjA0NEYzCis6MTAxOEUwMDAwMkYwMzAzRTA2RTA0NDA0RjA4MDA3OTA3Njk1RTA1NDI0Cis6MTAxOEYwMDBGQkYwOTA3NjFBRTBCNDAxMDg5MDc2OTVFMDkwODAwMUI0Cis6MTAxOTAwMDBGMDkwNzYxOUUwRkZCNDAxMjI5MDdGRkM3NDMwRjA5MEUzCis6MTAxOTEwMDA3RkZGNzRGQ0YwOTA3NjhGNzQyQkYwOTA3Njk3RTA1NEY0Cis6MTAxOTIwMDBGREYwRTQ5MDc2ODFGMDkwNzY4MEYwRUZCNDAyMjI5MEEyCis6MTAxOTMwMDA3RkZDNzQxQ0YwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyRjA2Cis6MTAxOTQwMDBGMDkwNzY5N0UwNDQwMkYwRTQ5MDc2ODFGMDkwNzY4MDEzCis6MTAxOTUwMDBGMDMwM0YwOTkwNzY5N0UwNTRGRUYwODAwNzkwNzY5NzNDCis6MTAxOTYwMDBFMDQ0MDFGMDkwNzY5N0UwNTRGQkYwOTA4MDAyRjBEMkQyCis6MTAxOTcwMDAyRTIyOTA3Njk1RTA0NDAxRjA0NDAyRjA0NDA4RjAzMEM1Cis6MTAxOTgwMDAzRTA2RTA0NDA0RjA4MDA3OTA3Njk1RTA1NEZCRjA5MDJBCis6MTAxOTkwMDA3NjFBRTBCNDAxMDg5MDc2OTVFMDkwODAwMUYwOTA3Njk4Cis6MTAxOUEwMDAxOUUwRkZCNDAxMjU5MDdGRkM3NENDRjA5MDdGRkY3NEE4Cis6MTAxOUIwMDBGQ0YwOTA3NjhGNzQyQkYwOTA3Njk3RTA1NEZERjA1NDA1Cis6MTAxOUMwMDBGQkYwRTQ5MDc2ODFGMDkwNzY4MEYwRUZCNDAyMjU5MDAxCis6MTAxOUQwMDA3RkZDNzRDOEYwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyRkJBCis6MTAxOUUwMDBGMDkwNzY5N0UwNDQwMkYwNTRGQkYwRTQ5MDc2ODFGMEJBCis6MTAxOUYwMDA5MDc2ODBGMEVGQjQwMzI1OTA3RkZDNzQ5OEYwOTA3RjkwCis6MTAxQTAwMDBGRjc0RkNGMDkwNzY4Rjc0NUZGMDkwNzY5N0UwNTRGRDUxCis6MTAxQTEwMDBGMDQ0MDRGMEU0OTA3NjgxRjA5MDc2ODBGMDMwM0YwOTU1Cis6MTAxQTIwMDA5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFGMEJFCis6MTAxQTMwMDA5MDc2OTdFMDkwODAwMkYwRDIyRTIyOTA3Njk1RTA1NDM2Cis6MTAxQTQwMDBGRUYwNDQwMkYwNDQwOEYwMzAzRTA2RTA0NDA0RjA4MDJBCis6MTAxQTUwMDAwNzkwNzY5NUUwNTRGQkYwOTA3NjFBRTBCNDAxMDg5MDc4Cis6MTAxQTYwMDA3Njk1RTA5MDgwMDFGMDkwNzYxOUUwRkZCNDAxMjU5MDIyCis6MTAxQTcwMDA3RkZDNzRCNEYwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyQjMxCis6MTAxQTgwMDBGMDkwNzY5N0UwNTRGREYwNTRGQkYwRTQ5MDc2ODFGMDBFCis6MTAxQTkwMDA5MDc2ODBGMEVGQjQwMjI1OTA3RkZDNzRCMEYwOTA3RkQ4Cis6MTAxQUEwMDBGRjc0RkNGMDkwNzY4Rjc0MkZGMDkwNzY5N0UwNDQwMkVDCis6MTAxQUIwMDBGMDU0RkJGMEU0OTA3NjgxRjA5MDc2ODBGMEVGQjQwMzgwCis6MTAxQUMwMDAyNTkwN0ZGQzc0NjhGMDkwN0ZGRjc0RkNGMDkwNzY4RjE3Cis6MTAxQUQwMDA3NDVGRjA5MDc2OTdFMDU0RkRGMDQ0MDRGMEU0OTA3NjYzCis6MTAxQUUwMDA4MUYwOTA3NjgwRjAzMDNGMDk5MDc2OTdFMDU0RkVGMEQ4Cis6MTAxQUYwMDA4MDA3OTA3Njk3RTA0NDAxRjA5MDc2OTdFMDkwODAwMjFFCis6MDQxQjAwMDBGMEQyMkUyMkNGCis6MDQwQ0ExMDA0MTc2MjMwMDc1Cis6MTAyREE5MDBFNDkwNzYzNkYwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDkyCis6MTAyREI5MDAzNDc1RjU4Mzc0MDFGMEVGNzVGMDAzQTQyNDBGRjU4MkRGCis6MTAyREM5MDBFNDM0NzVGNTgzNzQwMUYwRUY3NUYwMDNBNDI0MTBGNTZDCis6MTAyREQ5MDA4MkU0MzQ3NUY1ODNFNEYwOTA3NjM2RTAwNEYwRTBGRkEwCis6MTAyREU5MDA3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0MTBGMEFDCis6MTAyREY5MDBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzNzQwNUE3Cis6MTAyRTA5MDBGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1ODNFNDNBCis6MTAyRTE5MDBGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0MEVGNTk3Cis6MTAyRTI5MDA4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MjQwRjdFCis6MTAyRTM5MDBGNTgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQyNDg4Cis6MTAyRTQ5MDAxMEY1ODJFNDM0NzVGNTgzRTRGMDkwNzYzNkUwMDRGMDA5Cis6MTAyRTU5MDBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDVDCis6MTAyRTY5MDAwMUYwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1RjU4M0JFCis6MTAyRTc5MDA3NDAzRjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0NzVGNUJBCis6MTAyRTg5MDA4M0U0RjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNEMzCis6MTAyRTk5MDAwRUY1ODJFNDM0NzVGNTgzNzQxMEYwRUY3NUYwMDNBNDMwCis6MTAyRUE5MDAyNDBGRjU4MkU0MzQ3NUY1ODM3NDA2RjBFRjc1RjAwM0E5Cis6MTAyRUI5MDBBNDI0MTBGNTgyRTQzNDc1RjU4M0U0RjA5MDc2MzZFMEM1Cis6MTAyRUM5MDAwNEYwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNUVGCis6MTAyRUQ5MDA4Mzc0MDJGMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUNFCis6MTAyRUU5MDBGNTgzNzQwNEYwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDNCCis6MTAyRUY5MDA3NUY1ODNFNEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0IxCis6MTAyRjA5MDBBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMEFDCis6MTAyRjE5MDAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzNzQwOEYwRUY3NTgyCis6MTAyRjI5MDBGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1ODM3NDA0RjA5MDU5Cis6MTAyRjM5MDA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDkwCis6MTAyRjQ5MDAzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQyNDBGRjU4MjRDCis6MTAyRjU5MDBFNDM0NzVGNTgzNzQwQUYwRUY3NUYwMDNBNDI0MTBGNUQxCis6MTAyRjY5MDA4MkU0MzQ3NUY1ODM3NDA0RjA5MDc2MzZFMDA0RjBFMDc5Cis6MTAyRjc5MDBGRjc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNTgzNzQwMjE5Cis6MTAyRjg5MDBGMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODM3NDJBCis6MTAyRjk5MDAwOUYwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDc1RjU4Mzg0Cis6MTAyRkE5MDA3NDA0RjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDkxCis6MTAyRkI5MDAwRUY1ODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDFECis6MTAyRkM5MDAyNDBGRjU4MkU0MzQ3NUY1ODM3NDA3RjBFRjc1RjAwMzg3Cis6MEUyRkQ5MDBBNDI0MTBGNTgyRTQzNDc1RjU4Mzc0MDRGMDIyMEMKKzoxMDNCRDMwMEU0OTA3NjM2RjBFMEZCNzVGMDBGQTQyNDQxRjU4MkU0MUYKKzoxMDNCRTMwMDM0NzVGNTgzNzQ0MEYwRUI3NUYwMEZBNDI0NDJGNTgyMkQKKzoxMDNCRjMwMEU0MzQ3NUY1ODM3NDBBRjBFQjc1RjAwRkE0MjQ0M0Y1RjAKKzoxMDNDMDMwMDgyRTQzNDc1RjU4MzEyMzdDODAwMDBBQzQ0RUI3NUYwRDkKKzoxMDNDMTMwMDBGQTQyNDQ3RjU4MkU0MzQ3NUY1ODMxMjM3QzgwMDAwRjYKKzoxMDNDMjMwMEFDNDRFQjc1RjAwRkE0MjQ0QkY1ODJFNDM0NzVGNTgzQjMKKzoxMDNDMzMwMDEyMzdDODAwMDE3NzAwOTA3NjM2RTAwNEYwRTBGQjc1OTgKKzoxMDNDNDMwMEYwMEZBNDI0NDFGNTgyRTQzNDc1RjU4Mzc0NDBGMEVCNUUKKzoxMDNDNTMwMDc1RjAwRkE0MjQ0MkY1ODJFNDM0NzVGNTgzNzQ4Q0YwNzcKKzoxMDNDNjMwMEVCNzVGMDBGQTQyNDQzRjU4MkU0MzQ3NUY1ODMxMjM3MjIKKzoxMDNDNzMwMEM4MDAwMEFDNDRFQjc1RjAwRkE0MjQ0N0Y1ODJFNDM0OEMKKzoxMDNDODMwMDc1RjU4MzEyMzdDODAwMDBBQzQ0RUI3NUYwMEZBNDI0MUMKKzoxMDNDOTMwMDRCRjU4MkU0MzQ3NUY1ODMxMjM3QzgwMDAxNzcwMDkwNDEKKzoxMDNDQTMwMDc2MzZFMDA0RjBFMEZGNzVGMDBGQTQyNDQxRjU4MkU0REEKKzoxMDNDQjMwMDM0NzVGNTgzNzQ0MEYwRUY3NUYwMEZBNDI0NDJGNTgyNTgKKzoxMDNDQzMwMEU0MzQ3NUY1ODM3NDhGRjA5MDc2MzZFMDA0RjBFMEZGMEEKKzoxMDNDRDMwMDc1RjAwRkE0MjQ0MUY1ODJFNDM0NzVGNTgzNzQ0MUYwNDMKKzoxMDNDRTMwMEVGNzVGMDBGQTQyNDQyRjU4MkU0MzQ3NUY1ODM3NDg0RjAKKzoxMDNDRjMwMEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwRkE0MjQ0MUY1NzAKKzoxMDNEMDMwMDgyRTQzNDc1RjU4Mzc0NjFGMEVGNzVGMDBGQTQyNDQyRjcKKzoxMDNEMTMwMEY1ODJFNDM0NzVGNTgzNzQ4MUYwOTA3NjM2RTAwNEYwMkYKKzoxMDNEMjMwMEUwRkY3NUYwMEZBNDI0NDFGNTgyRTQzNDc1RjU4Mzc0NDQKKzoxMDNEMzMwMDYxRjBFRjc1RjAwRkE0MjQ0MkY1ODJFNDM0NzVGNTgzNDYKKzowNDNENDMwMDc0MDFGMDIyRjUKKzoxMDQ1NTkwMEU0OTA3NjM2RjBFMEZGNzVGMDAzQTQyNDMyRjU4MkU0QTYKKzoxMDQ1NjkwMDM0NzVGNTgzRTRGMEVGNzVGMDAzQTQyNDMzRjU4MkU0QTAKKzoxMDQ1NzkwMDM0NzVGNTgzNzQwMUYwOTA3NjM2RTAwNEYwRTBGRjc1NDgKKzoxMDQ1ODkwMEYwMDNBNDI0MzJGNTgyRTQzNDc1RjU4M0U0RjBFRjc1ODEKKzoxMDQ1OTkwMEYwMDNBNDI0MzNGNTgyRTQzNDc1RjU4Mzc0MDJGMDkwQjIKKzoxMDQ1QTkwMDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDMyRjU4MkU0RTYKKzoxMDQ1QjkwMDM0NzVGNTgzRTRGMEVGNzVGMDAzQTQyNDMzRjU4MkU0NTAKKzoxMDQ1QzkwMDM0NzVGNTgzNzQwM0YwOTA3NjM2RTAwNEYwRTBGRjc1RjYKKzoxMDQ1RDkwMEYwMDNBNDI0MzJGNTgyRTQzNDc1RjU4M0U0RjBFRjc1MzEKKzoxMDQ1RTkwMEYwMDNBNDI0MzNGNTgyRTQzNDc1RjU4Mzc0MDRGMDIyQ0UKKzoxMDNBNDIwMEU0OTA3NjM1RjA5MDc2MzVFMEZGQzM5NDAzNDAwMjQxNkUKKzoxMDNBNTIwMEZGRUY3NUYwMEFBNDI0QUFGNTgyRTQzNDc1RjU4M0VGMkEKKzoxMDNBNjIwMEYwRUY3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjU4M0U0MzMKKzoxMDNBNzIwMEYwRUY3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU4Mzc0OTIKKzoxMDNBODIwMEYwRjBFRjc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzMDUKKzoxMDNBOTIwMDc0RkZGMEVGNzVGMDBBQTQyNEFFRjU4MkU0MzQ3NUY1RjQKKzoxMDNBQTIwMDgzRTRGMEVGNzVGMDBBQTQyNEFGRjU4MkU0MzQ3NUY1RUYKKzoxMDNBQjIwMDgzNzQ4MEYwRUY3NUYwMEFBNDI0QjBGNTgyRTQzNDc1QzMKKzoxMDNBQzIwMEY1ODNFNEYwRUY3NUYwMEFBNDI0QjFGNTgyRTQzNDc1Q0QKKzoxMDNBRDIwMEY1ODNFNEYwRUY3NUYwMEFBNDI0QjJGNTgyRTQzNDc1QkMKKzoxMDNBRTIwMEY1ODNFNEYwRUY3NUYwMEFBNDI0QjNGNTgyRTQzNDc1QUIKKzoxMDNBRjIwMEY1ODM3NDAxRjA5MDc2MzVFMDA0RjA0MTQ3OTA3NjNDMEUKKzoxMDNCMDIwMDc0MEFGMEU0QTNGMDkwNzYzNTc0MDNGMDkwNzYzQ0UwMEEKKzoxMDNCMTIwMEZGOTA3NjM1RTBGRUMzOUY0MDAyNjFEMjkwNzYzREUwOTEKKzoxMDNCMjIwMEZGMDRGMEVFNzVGMDBBQTQyNEFBRjU4MkU0MzQ3NUY1RDgKKzoxMDNCMzIwMDgzRUZGMEVFNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1NTgKKzoxMDNCNDIwMDgzRTRGMEVFNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1NTIKKzoxMDNCNTIwMDgzNzQ1RUYwRUU3NUYwMEFBNDI0QURGNTgyRTQzNDc1NDgKKzoxMDNCNjIwMEY1ODM3NEJBRjBFRTc1RjAwQUE0MjRBRUY1ODJFNDM0NUIKKzoxMDNCNzIwMDc1RjU4Mzc0MDVGMEVFNzVGMDBBQTQyNEFGRjU4MkU0QkUKKzoxMDNCODIwMDM0NzVGNTgzNzQ4MEYwRUU3NUYwMEFBNDI0QjBGNTgyRTIKKzoxMDNCOTIwMEU0MzQ3NUY1ODNFNEYwRUU3NUYwMEFBNDI0QjFGNTgyRkQKKzoxMDNCQTIwMEU0MzQ3NUY1ODNFNEYwRUU3NUYwMEFBNDI0QjJGNTgyRUMKKzoxMDNCQjIwMEU0MzQ3NUY1ODM3NDE1RjBFRTc1RjAwQUE0MjRCM0Y1QjgKKzoxMDNCQzIwMDgyRTQzNDc1RjU4M0U0RjA5MDc2MzVFMDA0RjA2MTBFMUEKKzowMTNCRDIwMDIyRDAKKzoxMDA4MDAwMEU0OTA3NjMxRjA5MDc2MzFFMEZGNzVGMDAzQTQyNDBGODgKKzoxMDA4MTAwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFREUwRkRFRTZENEEKKzoxMDA4MjAwMDYwMEVFRkMzOTQwQjUwMDg5MDc2MzFFMDA0RjA4MEQ1NTEKKzoxMDA4MzAwMEVGQjQwQjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDAzQjEKKzoxMDA4NDAwMEE0MjQwRUY1ODJFNDM0NzVGNTgzRTA5MDc2MzNGMDI0MjkKKzoxMDA4NTAwMEYwNjAwQTI0MEU2MDAyODE4NzEyNEIzRTIyOTA3RkVERTkKKzoxMDA4NjAwMEUwNjQwNTcwNTE5MDc2MTg3NDA1RjA5MDc2Mzc3NDAxNDUKKzoxMDA4NzAwMEYwOTA3NjM5NzQwM0YwOTA3NjIxRjBFNDkwNzYyMEYwRDEKKzoxMDA4ODAwMDkwN0ZFQUUwRjQ2MDJGOTA3NjIwRTBGRjc1RjAwQUE0RjQKKzoxMDA4OTAwMDI0QUFGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUFFMEZENUEKKzoxMDA4QTAwMEVFNkQ2MDEyOTA3NjIxRTBGRUVGQzM5RTUwMDg5MDc2QzgKKzoxMDA4QjAwMDIwRTAwNEYwODBEMTkwN0ZFREUwNjQwNjcwNTI5MDc2RTUKKzoxMDA4QzAwMDE4NzQwNkYwOTA3NjM3NzQwNEYwOTA3NjM5NzQwQUYwNTQKKzoxMDA4RDAwMDkwNzYyMUYwOTA3NjIwNzQwM0YwOTA3RkVBRTBGNDYwNDcKKzoxMDA4RTAwMDJGOTA3NjIwRTBGRjc1RjAwQUE0MjRBQUY1ODJFNDM0NjQKKzoxMDA4RjAwMDc1RjU4M0UwRkU5MDdGRUFFMEZERUU2RDYwMTI5MDc2ODQKKzoxMDA5MDAwMDIxRTBGRUVGQzM5RTUwMDg5MDc2MjBFMDA0RjA4MEQxRjUKKzoxMDA5MTAwMDkwNzYyMEUwRkY3NUYwMEFBNDI0QUFGNTgyRTQzNDc1RUQKKzoxMDA5MjAwMEY1ODNFMDkwNzIyOUYwRTQ5MDc2M0JGMDkwNzYyMUUwMzgKKzoxMDA5MzAwMEZFRUY2RTcwMDg5MDdGQjRFMDQ0MDFGMDIyOTA3RkVCRjAKKzoxMDA5NDAwMEUwMTQ2MDEzMTQ3MDAyMjFFMjI0MDI2MDAyODE3RjkwOUYKKzoxMDA5NTAwMDdGQjRFMDQ0MDFGMDIyOTA3RkU5RTAxNDcwN0M5MDdGNDYKKzoxMDA5NjAwMEVBRTBGNDcwNDg5MDc2MzdFMDkwNzYyMEYwOTA3NjM5OUYKKzoxMDA5NzAwMEUwRkU5MDc2MjBFMEZEQzM5RTUwMkI5MDc2M0JFMEZFOUIKKzoxMDA5ODAwMDA0RjA3NEMwMkVGNTgyRTQzNDdFRjU4M0UwRkVFRDc1NEMKKzoxMDA5OTAwMEYwMEFBNDI0QUJGNTgyRTQzNDc1RjU4M0VFRjA5MDc2OEEKKzoxMDA5QTAwMDIwRTAwNEYwODBDNzkwNzYzRjc0MDFGMDIyOTA3RUMwNzIKKzoxMDA5QjAwMEUwRkVFRjc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzMEMKKzoxMDA5QzAwMEVFRjBFMEI0MDEwODkwNzYzRTc0MDFGMDgwMDVFNDkwMEEKKzoxMDA5RDAwMDc2M0VGMDkwNzYzRjc0MDFGMDIyOTA3RkI0RTA0NDAxQkYKKzoxMDA5RTAwMEYwMjI5MDdGRTlFMDI0RkU3MDAyNDFBMzE0NzAwMjYxQkUKKzoxMDA5RjAwMDNGMTQ3MDAyNjFEQjI0MDM2MDAyODE3NzkwN0ZFQUUwOUMKKzoxMDBBMDAwMEY0NzA2QjkwNzYzN0UwOTA3NjIwRjA5MDc2MzlFMEZGQzYKKzoxMDBBMTAwMDkwNzYyMEUwRkVDMzlGNTA0RTkwNzYzQkUwRkYwNEYwQkUKKzoxMDBBMjAwMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRkVFNzVGMDBBQTIKKzoxMDBBMzAwMEE0MjRBQ0Y1ODJFNDM0NzVGNTgzRUZGMDkwNzYzQkUwQzYKKzoxMDBBNDAwMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRkVFRkUKKzoxMDBBNTAwMDc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzRUZGMDkwQzcKKzoxMDBBNjAwMDc2MjBFMDA0RjA4MEE0OTA3NjQwNzQwMUYwMjI5MDdFMUQKKzoxMDBBNzAwMEMwRTBGRjkwNzYyMEUwRkU3NUYwMEFBNDI0QUNGNTgyNzkKKzoxMDBBODAwMEU0MzQ3NUY1ODNFRkYwOTA3RUMxRTBGRkVFNzVGMDBBNzcKKzoxMDBBOTAwMEE0MjRBREY1ODJFNDM0NzVGNTgzRUZGMDkwNzY0MTc0Q0IKKzoxMDBBQTAwMDAxRjAyMjkwN0ZFQUUwRjQ3MDY2OTA3NjM3RTA5MDc2NkQKKzoxMDBBQjAwMDIwRjA5MDc2MzlFMEZGOTA3NjIwRTBGRUMzOUY0MDAyNjAKKzoxMDBBQzAwMDgxOEU5MDc2M0JFMEZGMDRGMDc0QzAyRkY1ODJFNDM0MTEKKzoxMDBBRDAwMDdFRjU4M0UwRkZFRTc1RjAwQUE0MjRBRUY1ODJFNDM0REYKKzoxMDBBRTAwMDc1RjU4M0VGRjA5MDc2M0JFMEZGMDRGMDc0QzAyRkY1Q0UKKzoxMDBBRjAwMDgyRTQzNDdFRjU4M0UwRkZFRTc1RjAwQUE0MjRBRkY1QkUKKzoxMDBCMDAwMDgyRTQzNDc1RjU4M0VGRjA5MDc2MjBFMDA0RjA4MEEyNjMKKzoxMDBCMTAwMDkwN0VDMEUwRkY5MDc2MjBFMEZFNzVGMDBBQTQyNEFFM0YKKzoxMDBCMjAwMEY1ODJFNDM0NzVGNTgzRUZGMDkwN0VDMUUwRkZFRTc1NTkKKzoxMDBCMzAwMEYwMEFBNDI0QUZGNTgyRTQzNDc1RjU4M0VGRjAyMjkwMzcKKzoxMDBCNDAwMDdGRUFFMEY0NzA2NjkwNzYzN0UwOTA3NjIwRjA5MDc2NTkKKzoxMDBCNTAwMDM5RTBGRjkwNzYyMEUwRkVDMzlGNDAwMjgxOEU5MDc2QzAKKzoxMDBCNjAwMDNCRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwQUYKKzoxMDBCNzAwMEZGRUU3NUYwMEFBNDI0QjBGNTgyRTQzNDc1RjU4M0VGMzYKKzoxMDBCODAwMEYwOTA3NjNCRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjEKKzoxMDBCOTAwMEY1ODNFMEZGRUU3NUYwMEFBNDI0QjFGNTgyRTQzNDc1MjQKKzoxMDBCQTAwMEY1ODNFRkYwOTA3NjIwRTAwNEYwODBBMjkwN0VDMEUwMjQKKzoxMDBCQjAwMEZGOTA3NjIwRTBGRTc1RjAwQUE0MjRCMEY1ODJFNDM0QkMKKzoxMDBCQzAwMDc1RjU4M0VGRjA5MDdFQzFFMEZGRUU3NUYwMEFBNDI0ODYKKzoxMDBCRDAwMEIxRjU4MkU0MzQ3NUY1ODNFRkYwMjI5MDdGRUFFMEY0MUEKKzoxMDBCRTAwMDcwNjY5MDc2MzdFMDkwNzYyMEYwOTA3NjM5RTBGRjkwNEUKKzoxMDBCRjAwMDc2MjBFMEZFQzM5RjQwMDI4MThFOTA3NjNCRTBGRjA0QUEKKzoxMDBDMDAwMEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGRUU3NUYwREEKKzoxMDBDMTAwMDBBQTQyNEIyRjU4MkU0MzQ3NUY1ODNFRkYwOTA3NjNCQjQKKzoxMDBDMjAwMEUwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGMkEKKzoxMDBDMzAwMEVFNzVGMDBBQTQyNEIzRjU4MkU0MzQ3NUY1ODNFRkYwODEKKzoxMDBDNDAwMDkwNzYyMEUwMDRGMDgwQTI5MDdFQzBFMEZGOTA3NjIwQjUKKzoxMDBDNTAwMEUwRkU3NUYwMEFBNDI0QjJGNTgyRTQzNDc1RjU4M0VGNjIKKzoxMDBDNjAwMEYwOTA3RUMxRTBGRkVFNzVGMDBBQTQyNEIzRjU4MkU0QjMKKzoxMDBDNzAwMDM0NzVGNTgzRUZGMDIyOTA3RkI0RTA0NDAxRjAyMjkwQzgKKzowRjBDODAwMDdGQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjAxCis6MTAxMDAwMDBFNDkwNzYyQ0YwOTA3NjJDRTBGRjc1RjAwM0E0MjQwRjhBCis6MTAxMDEwMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRURFMEZERUU2RDQyCis6MTAxMDIwMDA2MDBFRUZDMzk0MEI1MDA4OTA3NjJDRTAwNEYwODBENTRFCis6MTAxMDMwMDBFRkI0MEIwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwM0E5Cis6MTAxMDQwMDBBNDI0MEVGNTgyRTQzNDc1RjU4M0UwOTA3NjJFRjAyNDI2Cis6MTAxMDUwMDBGMDYwMEEyNDBGNjAwMjgxN0QxMjRCMUIyMjkwN0ZFRDBECis6MTAxMDYwMDBFMDY0MDU3MDUxOTA3NjE4NzQwNUYwOTA3NjM4NzQwMTNDCis6MTAxMDcwMDBGMDkwNzYzQTc0MDNGMDkwNzYxQ0YwRTQ5MDc2MUJGMEQyCis6MTAxMDgwMDA5MDdGRUFFMEY0NjAyRjkwNzYxQkUwRkY3NUYwMEFBNEYxCis6MTAxMDkwMDAyNEFBRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVBRTBGRDUyCis6MTAxMEEwMDBFRTZENjAxMjkwNzYxQ0UwRkVFRkMzOUU1MDA4OTA3NkM1Cis6MTAxMEIwMDAxQkUwMDRGMDgwRDE5MDdGRURFMDY0MDY3MDUyOTA3NkUyCis6MTAxMEMwMDAxODc0MDZGMDkwNzYzODc0MDRGMDkwNzYzQTc0MEFGMDRBCis6MTAxMEQwMDA5MDc2MUNGMDkwNzYxQjc0MDNGMDkwN0ZFQUUwRjQ2MDQ5Cis6MTAxMEUwMDAyRjkwNzYxQkUwRkY3NUYwMEFBNDI0QUFGNTgyRTQzNDYxCis6MTAxMEYwMDA3NUY1ODNFMEZFOTA3RkVBRTBGREVFNkQ2MDEyOTA3NjdDCis6MTAxMTAwMDAxQ0UwRkVFRkMzOUU1MDA4OTA3NjFCRTAwNEYwODBEMUY3Cis6MTAxMTEwMDBFNDkwNzYxRUYwOTA3NjFDRTBGRjkwNzYxQkUwRkU2RjY4Cis6MTAxMTIwMDA3MDA4OTA3RkI0RTA0NDAxRjAyMjkwN0ZFQkUwMTQ2MEZGCis6MTAxMTMwMDAxMzE0NzAwMjIxQkYyNDAyNjAwMjgxNzU5MDdGQjRFMDE1Cis6MTAxMTQwMDA0NDAxRjAyMjkwN0ZFOUUwMjQ3RjcwNkI5MDdGRUFFMDE5Cis6MTAxMTUwMDBGNDcwNEE5MDc2MzhFMDkwNzYxQkYwOTA3NjNBRTBGRjkzCis6MTAxMTYwMDA5MDc2MUJFMEZEQzM5RjUwMkJFRDc1RjAwQUE0MjRBQkQ1Cis6MTAxMTcwMDBGNTgyRTQzNDc1RjU4M0UwRkY5MDc2MUVFMEZEMDRGMDFGCis6MTAxMTgwMDA3NDAwMkRGNTgyRTQzNDdGRjU4M0VGRjA5MDc2MUJFMDU4Cis6MTAxMTkwMDAwNEYwODBDNzkwNzYxRUUwOTA3RkI1RjAyMkVFNzVGMEU3Cis6MTAxMUEwMDAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMDY3Cis6MTAxMUIwMDA5MDdGQjU3NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDVBCis6MTAxMUMwMDA3RkU5RTAyNDdFNzAwMjQxN0UxNDcwMDI2MTIzMTQ3MDc2Cis6MTAxMUQwMDAwMjYxQzgyNDAzNjAwMjgxNkQ5MDdGRUFFMEY0NzA2REMzCis6MTAxMUUwMDA5MDc2MzhFMDkwNzYxQkYwOTA3NjNBRTBGRjkwNzYxQjkwCis6MTAxMUYwMDBFMEMzOUY1MDRGRTBGRjc1RjAwQUE0MjRBQ0Y1ODJFNEYxCis6MTAxMjAwMDAzNDc1RjU4M0UwRkU5MDc2MUVFMEZEMDRGMDc0MDAyRDQ5Cis6MTAxMjEwMDBGNTgyRTQzNDdGRjU4M0VFRjBFRjc1RjAwQUE0MjRBRDk3Cis6MTAxMjIwMDBGNTgyRTQzNDc1RjU4M0UwRkY5MDc2MUVFMEZFMDRGMDZECis6MTAxMjMwMDA3NDAwMkVGNTgyRTQzNDdGRjU4M0VGRjA5MDc2MUJFMEE2Cis6MTAxMjQwMDAwNEYwODBBNDkwNzYxRUUwOTA3RkI1RjAyMjkwNzYxQjhCCis6MTAxMjUwMDBFMEZGNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODNFMDcwCis6MTAxMjYwMDA5MDdGMDBGMEVGNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUE4Cis6MTAxMjcwMDBGNTgzRTA5MDdGMDFGMDkwN0ZCNTc0MDJGMDIyOTA3RkJCCis6MTAxMjgwMDBFQUUwRjQ3MDZEOTA3NjM4RTA5MDc2MUJGMDkwNzYzQTU0Cis6MTAxMjkwMDBFMEZGOTA3NjFCRTBDMzlGNTA0RkUwRkY3NUYwMEFBNDdCCis6MTAxMkEwMDAyNEFFRjU4MkU0MzQ3NUY1ODNFMEZFOTA3NjFFRTBGRDExCis6MTAxMkIwMDAwNEYwNzQwMDJERjU4MkU0MzQ3RkY1ODNFRUYwRUY3NUQxCis6MTAxMkMwMDBGMDBBQTQyNEFGRjU4MkU0MzQ3NUY1ODNFMEZGOTA3NjRDCis6MTAxMkQwMDAxRUUwRkUwNEYwNzQwMDJFRjU4MkU0MzQ3RkY1ODNFRjA3Cis6MTAxMkUwMDBGMDkwNzYxQkUwMDRGMDgwQTQ5MDc2MUVFMDkwN0ZCNTJECis6MTAxMkYwMDBGMDIyOTA3NjFCRTBGRjc1RjAwQUE0MjRBRUY1ODJFNDlDCis6MTAxMzAwMDAzNDc1RjU4M0UwOTA3RjAwRjBFRjc1RjAwQUE0MjRBRjA4Cis6MTAxMzEwMDBGNTgyRTQzNDc1RjU4M0UwOTA3RjAxRjA5MDdGQjU3NDM5Cis6MTAxMzIwMDAwMkYwMjI5MDdGRUFFMEY0NzA2RDkwNzYzOEUwOTA3NkRCCis6MTAxMzMwMDAxQkYwOTA3NjNBRTBGRjkwNzYxQkUwQzM5RjUwNEZFMEExCis6MTAxMzQwMDBGRjc1RjAwQUE0MjRCMEY1ODJFNDM0NzVGNTgzRTBGRTVECis6MTAxMzUwMDA5MDc2MUVFMEZEMDRGMDc0MDAyREY1ODJFNDM0N0ZGNUY0Cis6MTAxMzYwMDA4M0VFRjBFRjc1RjAwQUE0MjRCMUY1ODJFNDM0NzVGNTRDCis6MTAxMzcwMDA4M0UwRkY5MDc2MUVFMEZFMDRGMDc0MDAyRUY1ODJFNDE4Cis6MTAxMzgwMDAzNDdGRjU4M0VGRjA5MDc2MUJFMDA0RjA4MEE0OTA3NjM0Cis6MTAxMzkwMDAxRUUwOTA3RkI1RjAyMjkwNzYxQkUwRkY3NUYwMEFBNDY2Cis6MTAxM0EwMDAyNEIwRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwRUY3NUFBCis6MTAxM0IwMDBGMDBBQTQyNEIxRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMTRFCis6MTAxM0MwMDBGMDkwN0ZCNTc0MDJGMDIyOTA3RkVBRTBGNDcwNkQ5MEE3Cis6MTAxM0QwMDA3NjM4RTA5MDc2MUJGMDkwNzYzQUUwRkY5MDc2MUJFMDRFCis6MTAxM0UwMDBDMzlGNTA0RkUwRkY3NUYwMEFBNDI0QjJGNTgyRTQzNEE1Cis6MTAxM0YwMDA3NUY1ODNFMEZFOTA3NjFFRTBGRDA0RjA3NDAwMkRGNTk3Cis6MTAxNDAwMDA4MkU0MzQ3RkY1ODNFRUYwRUY3NUYwMEFBNDI0QjNGNTlGCis6MTAxNDEwMDA4MkU0MzQ3NUY1ODNFMEZGOTA3NjFFRTBGRTA0RjA3NEZDCis6MTAxNDIwMDAwMDJFRjU4MkU0MzQ3RkY1ODNFRkYwOTA3NjFCRTAwNDI0Cis6MTAxNDMwMDBGMDgwQTQ5MDc2MUVFMDkwN0ZCNUYwMjI5MDc2MUJFMEJECis6MTAxNDQwMDBGRjc1RjAwQUE0MjRCMkY1ODJFNDM0NzVGNTgzRTA5MEM4Cis6MTAxNDUwMDA3RjAwRjBFRjc1RjAwQUE0MjRCM0Y1ODJFNDM0NzVGNTRCCis6MTAxNDYwMDA4M0UwOTA3RjAxRjA5MDdGQjU3NDAyRjAyMjkwN0ZCNDBBCis6MTAxNDcwMDBFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjkwN0ZCNDc4Cis6MDUxNDgwMDBFMDQ0MDFGMDIyMzAKKzoxMDM4NzQwMEU0OTA3NjI5RjA5MDc2MjlFMEZGNzVGMDBGQTQyNDQyQjUKKzoxMDM4ODQwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZEQTcKKzoxMDM4OTQwMDYwMEVFRkMzOTQwNjUwMDg5MDc2MjlFMDA0RjA4MEQ1QkEKKzoxMDM4QTQwMEVGQjQwNjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDBGMDYKKzoxMDM4QjQwMEE0MjQ0MUY1ODJFNDM0NzVGNTgzRTA5MDc2MkFGMDI0NUIKKzoxMDM4QzQwMEJGNzAwMjQxNDEyNEUwNzAwMjQxMTIyNDIxNjAwMjQxOTAKKzoxMDM4RDQwMDNBOTA3RkU5RTAyNEZFNjA3RDE0NzAwMjIxQjIyNDAyNTQKKzoxMDM4RTQwMDYwMDI0MTBBMTIxNzUxOTA3NjQyRTBGQ0EzRTBGREEzNjYKKzoxMDM4RjQwMEUwRkVBM0UwRkY5MDc2MjlFMDc1RjAwRkE0MjQ0M0Y1RTEKKzoxMDM5MDQwMDgyRTQzNDc1RjU4MzEyMzdCQzkwNzYxOUUwRkZCNDAxNzQKKzoxMDM5MTQwMDEyOTA3NjdDNzQ2N0YwOTA3NjdENzQwNkYwOTA3NjdFRDMKKzoxMDM5MjQwMDc0MEJGMEVGQjQwMjBGRTQ5MDc2N0NGMDkwNzY3REYwQTcKKzoxMDM5MzQwMDkwNzY3RTc0MENGMEVGQjQwMzBGRTQ5MDc2N0NGMDkwRjQKKzoxMDM5NDQwMDc2N0RGMDkwNzY3RTc0MThGMDkwNzYxQTc0MDFGMDEyRjkKKzoxMDM5NTQwMDNFOEYxMjE4MDAyMjkwN0VDMkUwRkZFNEZDRkRGRUZCQzUKKzoxMDM5NjQwMEZBNzkwMUY4MTIzNzQ2QzhFQ0M4QzlFREM5Q0FFRUNBREIKKzoxMDM5NzQwMENCRUZDQjkwN0VDMUUwRkVFNEZDRkQyQkZCRUEzRUZBRUMKKzoxMDM5ODQwMEVEMzlGOUVDMzhGODkwN0VDMEUwRkZFNEZFRUIyRkZGNTAKKzoxMDM5OTQwMEVFM0FGRUVEMzlGREVDMzhGQzkwNzYyOUUwNzVGMDBGMzcKKzoxMDM5QTQwMEE0MjQ0N0Y1ODJFNDM0NzVGNTgzMTIzN0JDMjI5MDdFNTMKKzoxMDM5QjQwMEMyRTBGRkU0RkNGREZFRkJGQTc5MDFGODEyMzc0NkM4QzkKKzoxMDM5QzQwMEVDQzhDOUVEQzlDQUVFQ0FDQkVGQ0I5MDdFQzFFMEZFMEMKKzoxMDM5RDQwMEU0RkNGRDJCRkJFQTNFRkFFRDM5RjlFQzM4Rjg5MDdFNzUKKzoxMDM5RTQwMEMwRTBGRkU0RkVFQjJGRkZFRTNBRkVFRDM5RkRFQzM4Q0MKKzoxMDM5RjQwMEZDOTA3NjI5RTA3NUYwMEZBNDI0NEJGNTgyRTQzNDc1MkQKKzoxMDNBMDQwMEY1ODMxMjM3QkMyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGMEEKKzoxMDNBMTQwMEU5RTAxNDcwMTk5MDdFQzBFMEZGOTA3NjI5RTA3NUYwMUIKKzoxMDNBMjQwMDBGQTQyNDRGRjU4MkU0MzQ3NUY1ODNFRkYwMjI5MDdGRTAKKzowRTNBMzQwMEI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5RgorOjEwMkFENjAwRTQ5MDc2MjdGMDkwNzYyN0UwRkY3NUYwMEZBNDI0NDI2NQorOjEwMkFFNjAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkQ1MworOjEwMkFGNjAwNjAwRUVGQzM5NDA2NTAwODkwNzYyN0UwMDRGMDgwRDU2OAorOjEwMkIwNjAwRUZCNDA2MDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMEZCMQorOjEwMkIxNjAwQTQyNDQxRjU4MkU0MzQ3NUY1ODNFMDkwNzYyOEYwMjQwOAorOjEwMkIyNjAwOUY3MDAyQTE3NDI0MjE2MDAyQTFBMTkwN0ZFOUUwMjQ5NAorOjEwMkIzNjAwN0U3MDAyNjFGQzE0NzAwMjgxQjUyNDAyNjAwMkExNkNGMQorOjEwMkI0NjAwRUY3NUYwMEZBNDI0NDNGNTgyRTQzNDc1RjU4M0UwRkNCOQorOjEwMkI1NjAwQTNFMEZEQTNFMEZFQTNFMEZGN0I0NDdBQUM3OTAwNzgxNgorOjEwMkI2NjAwMDBDMzEyMzdBQjcwMTM5MDdGMDA3NDQ0RjBBMzc0QUNBQgorOjEwMkI3NjAwRjBFNEEzRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDc1RjA0QgorOjEwMkI4NjAwMEZBNDI0NDNGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkQ0RAorOjEwMkI5NjAwQTNFMEZFQTNFMEZGN0I4MDdBQkI3OTAwNzgwMEMzMTIzNgorOjEwMkJBNjAwMzdBQjcwMTM5MDdGMDA3NDgwRjBBMzc0QkJGMEU0QTM3RQorOjEwMkJCNjAwRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDc1RjAwRkE0MjRBQgorOjEwMkJDNjAwNDNGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkRBM0UwRkU2MworOjEwMkJENjAwQTNFMEZGN0IwMDdBNzc3OTAxNzgwMEMzMTIzN0FCNjBGOAorOjEwMkJFNjAwMDJBMUE4OTA3RjAwRjBBMzc0NzdGMEEzNzQwMUYwOTA3RgorOjEwMkJGNjAwN0ZCNTc0MDNGMDIyOTA3NjI3RTA3NUYwMEZBNDI0NDc4MgorOjEwMkMwNjAwRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZEQTNFMEZFQTNDMgorOjEwMkMxNjAwRTBGRjdCNDQ3QUFDNzkwMDc4MDBDMzEyMzdBQjcwMTNCRgorOjEwMkMyNjAwOTA3RjAwNzQ0NEYwQTM3NEFDRjBFNEEzRjA5MDdGQjVGOQorOjEwMkMzNjAwNzQwM0YwOTA3NjI3RTA3NUYwMEZBNDI0NDdGNTgyRTQzQworOjEwMkM0NjAwMzQ3NUY1ODNFMEZDQTNFMEZEQTNFMEZFQTNFMEZGN0I4MworOjEwMkM1NjAwODA3QUJCNzkwMDc4MDBDMzEyMzdBQjcwMTM5MDdGMDA3RgorOjEwMkM2NjAwNzQ4MEYwQTM3NEJCRjBFNEEzRjA5MDdGQjU3NDAzRjAxNgorOjEwMkM3NjAwOTA3NjI3RTA3NUYwMEZBNDI0NDdGNTgyRTQzNDc1RjVDNQorOjEwMkM4NjAwODNFMEZDQTNFMEZEQTNFMEZFQTNFMEZGN0IwMDdBNzdGMAorOjEwMkM5NjAwNzkwMTc4MDBDMzEyMzdBQjYwMDJBMUE4OTA3RjAwRjBEQgorOjEwMkNBNjAwQTM3NDc3RjBBMzc0MDFGMDkwN0ZCNTc0MDNGMDIyOTBCQgorOjEwMkNCNjAwNzYyN0UwNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NUY1ODM4RQorOjEwMkNDNjAwRTBGQ0EzRTBGREEzRTBGRUEzRTBGRjdCNDQ3QUFDNzk0MQorOjEwMkNENjAwMDA3ODAwQzMxMjM3QUI3MDEzOTA3RjAwNzQ0NEYwQTNFMgorOjEwMkNFNjAwNzRBQ0YwRTRBM0YwOTA3RkI1NzQwM0YwOTA3NjI3RTAxRgorOjEwMkNGNjAwNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NUY1ODNFMEZDQTM0QworOjEwMkQwNjAwRTBGREEzRTBGRUEzRTBGRjdCODA3QUJCNzkwMDc4MDBCQworOjEwMkQxNjAwQzMxMjM3QUI3MDEzOTA3RjAwNzQ4MEYwQTM3NEJCRjBCRQorOjEwMkQyNjAwRTRBM0YwOTA3RkI1NzQwM0YwOTA3NjI3RTA3NUYwMEY3QQorOjEwMkQzNjAwQTQyNDRCRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZEQTNGRgorOjEwMkQ0NjAwRTBGRUEzRTBGRjdCMDA3QTc3NzkwMTc4MDBDMzEyMzdCMworOjEwMkQ1NjAwQUI3MDRGOTA3RjAwRjBBMzc0NzdGMEEzNzQwMUYwOTBFRQorOjEwMkQ2NjAwN0ZCNTc0MDNGMDIyOTA3RkI0RTA0NDAxRjAyMjkwN0Y5NworOjEwMkQ3NjAwRTlFMDI0N0Y3MDFFOTA3NjI3RTA3NUYwMEZBNDI0NEZCQgorOjEwMkQ4NjAwRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwOTA3RkI1NzRBQQorOjEwMkQ5NjAwMDFGMDgwMDc5MDdGQjRFMDQ0MDFGMDkwN0ZCNEUwNDRGNgorOjAzMkRBNjAwMDFGMDIyMTcKKzoxMDRCMUIwMDkwN0ZFQkUwMTQ3MDE0OTA3RkU5RTAyNDdGNzAwNDEyMTcKKzoxMDRCMkIwMDQ4NUEyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0RDUKKzowMzRCM0IwMDAxRjAyMjY0Cis6MTA0QjNFMDA5MDdGRUJFMDE0NzAxMzkwN0ZFOUUwMTQ3MDA0MTI0OTNCCis6MTA0QjRFMDBBRDIyOTA3RkI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUE2Cis6MDI0QjVFMDBGMDIyNDMKKzoxMDQ4NUEwMEU0OTA3NjI2RjA5MDc2MjZFMEZGNzVGMDAzQTQyNDM0REYKKzoxMDQ4NkEwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZEQjEKKzoxMDQ4N0EwMDYwMEVFRkMzOTQwNDUwMDg5MDc2MjZFMDA0RjA4MEQ1QzkKKzoxMDQ4OEEwMEVGQjQwNDA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDAzMUUKKzoxMDQ4OUEwMEE0MjQzMkY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMDkwMjkKKzowNjQ4QUEwMDdGQjU3NDAxRjAyMjRECis6MTA0OUFEMDBFNDkwNzYyNUYwOTA3NjI1RTBGRjc1RjAwM0E0MjQzNDhECis6MTA0OUJEMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2RDVECis6MTA0OUNEMDA2MDBFRUZDMzk0MDQ1MDA4OTA3NjI1RTAwNEYwODBENTc2Cis6MTA0OUREMDBFRkI0MDQwODkwN0ZCNEUwNDQwMUYwMjI5MDdFQzBFMDczCis6MTA0OUVEMDBGRUVGNzVGMDAzQTQyNDMyRjU4MkU0MzQ3NUY1ODNFRTAxCis6MDI0OUZEMDBGMDIyQTYKKzowMzAwMDMwMDAyMEZGREVDCis6MDMwRkZEMDBDMjg5MzI3NAorOjAzMDAxMzAwMDIxN0ZERDQKKzowMzE3RkQwMEMyOEIzMjZBCis6MDMwMDRCMDAwMjREOEZENAorOjA0NEQ4RjAwNTM5MURGMzIyQgorOjAzMDA1MzAwMDI0RDgzRDgKKzowNjREODMwMDUzOTFCRkQyMkQzMjU2Cis6MDMwMDVCMDAwMjREODlDQQorOjA2NEQ4OTAwNTM5MTdGRDIyQzMyOTEKKzowMzAwNjMwMDAyNEQ5M0I4Cis6MDQ0RDkzMDA1M0Q4RjczMkM4Cis6MDMwMDBCMDAwMjREOUIwOAorOjAzNEQ5QjAwQzI4RDMyOTQKKzowMzAwMUIwMDAyNEQ5RUY1Cis6MDM0RDlFMDBDMjhGMzI4RgorOjAzMDAyMzAwMDI0RDc1MTYKKzowNzRENzUwMDUzOThGRTUzOThGRDMyMzQKKzowMzAwM0IwMDAyNEQ3Q0Y3Cis6MDc0RDdDMDA1M0MwRkU1M0MwRkQzMkRECis6MDMwMDJCMDAwMjQ2Rjc5MworOjEwNDZGNzAwQzBFMEMwRjBDMDgzQzA4MkMwRDBFOEMwRTBFOUMwRTAzRAorOjEwNDcwNzAwRUFDMEUwRUJDMEUwRUNDMEUwRURDMEUwRUVDMEUwRUZGNworOjEwNDcxNzAwQzBFMEMyQ0FDMkNGOTA3Rjk4RTA0NDAxRjAzMDJFMDNCOAorOjEwNDcyNzAwMTIxNEE2OTA3Rjk4RTA1NEZFRjA1M0E4RkExMjE2NjE2RgorOjEwNDczNzAwRDBFMEZGRDBFMEZFRDBFMEZERDBFMEZDRDBFMEZCRDA0MQorOjEwNDc0NzAwRTBGQUQwRTBGOUQwRTBGOEQwRDBEMDgyRDA4M0QwRjAzMgorOjAzNDc1NzAwRDBFMDMyN0QKKzoxMDQ3QjQwMEU0OTA3NjlCRjA5MDc2OUJFMEZGMDRGMEVGNjAwOEUwRDUKKzoxMDQ3QzQwMDI0MDhGOEU0RjY4MEVFOTA3Njk2RTA1NEZCRjA1NEY3NzMKKzoxMDQ3RDQwMEYwOTA4MDAzRjBFNEY1MThEMjM1RjUwRUY1MTBEMjM2REEKKzoxMDQ3RTQwMDc1MTIxMTc1MTMyMkMyMzdDMjM5QzIzOEY1MTZGNTE0ODEKKzowQjQ3RjQwMEY1MUFGNTBEQzIzQkMyM0NDMjNEMjI4RAorOjEwMzAwMDAwOTA3RkI2RTAyMEUxMDJDMjNERDIzNjIwMzYwMjQxNkUwQQorOjEwMzAxMDAwMzAzRDAyNDE2RTkwODAwN0UwNjAwNEQyMzY4MDAyQzJFQgorOjEwMzAyMDAwMzYyMDM2MDI0MTJFRDIzNUU0RjUxQTkwODAwNEUwRjVDMAorOjEwMzAzMDAwMTk3NDA4MjUwRUY4QTYxOTg1MTkxOEU1MTgyMEU3MDQ1MworOjEwMzA0MDAwRDIzODgwMDJDMjM4MzAzODAyMjFENEU0RjUxNkU1MTlBRQorOjEwMzA1MDAwQjRGMDBDRDIzOTc1MDgwNDc1MDlGMDA1MEU4MDAyMDUyQworOjEwMzA2MDAwMTZFNTE5NjRGNzcwM0RDMjM5RTUwRTI0RkU2MDE3MTRBOQorOjEwMzA3MDAwNjAyMjI0MDM3MDI5NzUwODA1NzUwOUY3RTRGNTBBRjUzRgorOjEwMzA4MDAwMEI3NTBFMDQ4MDIwNzUwODA2NzUwQUY3RTRGNTBCNzVCQworOjEwMzA5MDAwMEUwNDgwMTI3NTA4MDc3NTBCRjc3NTBFMDQ4MDA3MTI3MQorOjEwMzBBMDAwNDhGMzgwMDIwNTE2RTUxOTU0Rjg2NEY4NzAzQkMyMzUwMAorOjEwMzBCMDAwRTUxOTI0MDc2MDBDMjRGQzYwMDgyNDA1MjRGODUwMDY1OAorOjEwMzBDMDAwODAwOEQyM0E4MDA2QzIzQTgwMDJEMjNBNzUxQTAxMjBBQworOjEwMzBEMDAwM0ExOTkwN0U4MDc0MEZGMEEzRTUxOUYwRTRBM0YwQTNGMQorOjEwMzBFMDAwRjA5MDdGQjc3NDA0RjA4MDAyMDUxNjIwMzk2REU1MTk2MQorOjEwMzBGMDAwNjRGNzYwNjdFNTFBNzA2M0U1MTg1NEYwNjRGMDcwNTk3RQorOjEwMzEwMDAwODUxODE5RjUwRUU1MTkyNDBGNjAxQjI0RkU2MDE3MjQ5RAorOjEwMzExMDAwRkQ2MDIyMTQ2MDFGMjQwNTcwMkY3NTA4MDMwNTBFODVCRAorOjEwMzEyMDAwMTgwOUQyMzc4MDI4NzUwODAyMDUwRTg1MTgwOTc1MTQwQworOjEwMzEzMDAwMDFEMjM3ODAxOTc1MDgwNTA1MEU4NTE4MDlFNEY1MEFDRQorOjEwMzE0MDAwRjUwQjc1MEUwM0QyMzc4MDA1MTI0OEYzQzIzNTMwMzVDMgorOjEwMzE1MDAwMEE4NTA4MTM4NTE4MTI4MDAyMDUxNjg1MTgxOUU1MTZDOAorOjEwMzE2MDAwNjQwNDcwNjJGNTBFRTUxOTU0RjBGNTE5RjUxNTg1MTgyQgorOjEwMzE3MDAwMTlFNTE1MjQ3MDYwMTgyNEYwNjAxNDI0RjA2MDEwMjQwMAorOjEwMzE4MDAwRjA2MDFFMjRGMDYwMUEyNEYwNjAwNDI0NjA3MDI3RTVDQgorOjEwMzE5MDAwMTVDNDU0MEZGNTE5RjUwODA1MEU4NTE4MDlEMjM3ODBBNgorOjEwMzFBMDAwMUFFNTE1QzQ1NDBGRjUxOUY1MDgwNTBFODUxODA5NzVBQgorOjEwMzFCMDAwMTQwMUQyMzc4MDA1MTI0OEYzQzIzNTMwMzUwQTg1MTkxQgorOjEwMzFDMDAwMTM4NTE4MTI4MDAyMDUxNkU1MTZEMzk0MDU0MDU3MTI5MAorOjEwMzFEMDAwNDhGMzgwNTIzMDM5MTdFNTBFNzAwQTg1MDgwOTc1MDhFMgorOjEwMzFFMDAwMDQwNTBFODA0MTc0MDgyNTBFRjhBNjE5ODAzODIwMzc5MgorOjEwMzFGMDAwMkFFNTBFQjQwMTBGODUwODBBODUwOTBCODUxMzA4ODU5OQorOjEwMzIwMDAwMTIwOTc1MEUwNEU1MTRCNDAxMUM4NTA4MEFFNEY1MEJENworOjEwMzIxMDAwODUxMzA4ODUxMjA5NzUwRTA0ODAwQkU1MTRCNDAxMDZBOAorOjEwMzIyMDAwRTRGNTBCNzUwRTA0RTRGNTFBMzAzNTAyMDUwRUU1MEVEMworOjEwMzIzMDAwRDM5NDAzNTAwMjAxMEJDMjM3RTRGNTBFRjUxMEMyMzZFOQorOjEwMzI0MDAwRDIzREY1MTQ3NDA4MjUxMEY4RTZGRjc0ODAyNTEwRjVCQQorOjEwMzI1MDAwODJFNDM0N0VGNTgzRUZGMDc0MDgyNTEwRjhFNEY2MDU3NworOjBGMzI2MDAwMTBFNTEwQjQwNERFOTA3RkI3NzQwNEYwMDEwQjIyNjgKKzowQzQ4RjMwMEMyMzdFNEY1MEVGNTEwQzIzNkY1MTQyMkIxCis6MTA0MDAwMDBFNTExRDM5NDAwNTAwMjIxMDY5MDc2ODlFMEMzOTQwODBDCis6MTA0MDEwMDA0MDAyMjEwNjc0NDAyNTBGRjU4MkU0MzQ3RUY1ODNFMEVBCis6MTA0MDIwMDBGNTE3RTUwRDYwMEU5MDgwMDVFNTE3RjA5MDc2ODlFMEI0Cis6MTA0MDMwMDAwNEYwMDFEQUU1MTcxMjM3Rjk0MEMxMDI0MDY3MDU0MDg0Cis6MTA0MDQwMDA3QTA2NDA5ODA3NDBDMTBDNDBDMTBENDBDNzBGNDBDQkQ1Cis6MTA0MDUwMDBGNjQwQ0JGODQwQ0JGQTQwQ0JGQjQwQ0JGQzQwQ0JGRTRDCis6MTA0MDYwMDA0MENCRkYwMDAwNDBEQTkwN0U0MUUwOTA4MDA1RjA5MDY4Cis6MTA0MDcwMDA3Njg5RTAwNEYwNzUxMTAxODA2MDkwN0U0MUUwOTA4MEM3Cis6MTA0MDgwMDAwNUYwOTA3RTQyRTA5MDgwMDVGMDkwNzY4OUUwMDRGMEEzCis6MTA0MDkwMDBFMDA0RjA3NTExMDE4MDQyOTA3RTQxRTA5MDgwMDVGMENGCis6MTA0MEEwMDA5MDdFNDJFMDkwODAwNUYwOTA3RTQzRTA5MDgwMDVGMEE1Cis6MTA0MEIwMDA5MDc2ODlFMDA0RjBFMDA0RjBFMDA0RjA3NTExMDE4MEVFCis6MTA0MEMwMDAxOUQyM0JEMjNDODAxM0QyM0I4MDBGOTA4MDA1RTUxNzdDCis6MTA0MEQwMDBGMDkwNzY4OUUwMDRGMDc1MTEwMTIwM0IwNDA1MEQ4MDE1Cis6MTA0MEUwMDAxRjMwM0MxQzkwN0U0MUUwOTA4MDA1RjA5MDdFNDJFMEM1Cis6MTA0MEYwMDA5MDgwMDVGMDkwNzY4OUUwMDRGMEUwMDRGMDc1MTEwMUZECis6MTA0MTAwMDAwNTBGMTUxMTAxMDBFNTExNzAxMEMyMzNGNTBERjUwRjAzCis6MEI0MTEwMDA5MDdGQzc3NDA0RjBDMjNCQzIzQzIyNDkKKzoxMDRCQkIwMDkwN0ZENkUwMzBFNzEyRTA0NDAxRjA3RjE0N0UwMDEyQzQKKzowQTRCQ0IwMDREMkY5MDdGRDZFMDU0RkVGMDIyM0IKKzoxMDRBRjYwMDkwN0ZENkUwNTRGQkYwRTA0NDA4RjAzMDQyMDRFMDQ0RjYKKzoxMDRCMDYwMDAyRjA3RkRDN0UwNTEyNEQyRjkwN0ZENkUwNTRGN0YwNDEKKzowNTRCMTYwMEUwNDQwNEYwMjI2MAorOjEwNEQyRjAwOEUzNThGMzZFNTM2MTUzNkFFMzU3MDAyMTUzNTRFNjAzOQorOjA3NEQzRjAwMDUxMjE0ODU4MEVFMjIyRAorOjEwNDlGRjAwRTRGRTc1MURGRjc1MUUwNTc1MUYxMkFCMURBQTFFQTlCRQorOjEwNEEwRjAwMUY5MDAwMDExMjM2QUI2NDAyNzAyRkNERUVDRDBFRUQ2QworOjEwNEExRjAwNkY3MDAxMjI5MDAwMDIxMjM3MEU4NUYwMUJGNTFDNjI5OQorOjEwNEEyRjAwMUJFNTFCNjIxQ0U1MUM2MjFCMjlGREU1MUIzQUM5RUQ0QQorOjEwNEEzRjAwQzk3NTFERkZGNTFFODkxRjgwQzE3QjAwN0EwMDc5MDBBMworOjAxNEE0RjAwMjI0NAorOjA0MTc5NDAwOEQyOThCMkFFNgorOjEwMTc5ODAwMTI0OUZGRUE0OTYwNTcxMjM2OTI3RTAwMjlGRkVFM0E1NQorOjEwMTdBODAwQzlFRkM5NzUyQkZGRjUyQzg5MkRBQjJCQUEyQ0E5MkRCOAorOjEwMTdCODAwOTAwMDAxMTIzNkFCRkY2NDA0NjAwNUVGNjQwNTcwMkVEQgorOjEwMTdDODAwRUZCNDA0MTU5MDAwMDIxMjM2QUI2NTI5NzAwQjkwMDAzNworOjEwMTdEODAwMDMxMjM2QUI2NTJBNzAwMTIyMTIzNjkyN0UwMDI5RkY2OQorOjEwMTdFODAwRUUzQUM5RUZDOTc1MkJGRkY1MkM4OTJEODBCQzdCMDAxQgorOjA0MTdGODAwN0EwMDc5MDBGQQorOjAxMTdGQzAwMjJDQQorOjAyNDhCMDAwOEYyRTQ5Cis6MTA0OEIyMDBFNEY1MkY3NTMwRkY3NTMxMDY3NTMyQkVBQjMwQUEzMTgzCis6MTA0OEMyMDBBOTMyOTAwMDAxMTIzNkFCQjQwMzFGQUYyRjA1MkZFRkIwCis6MTA0OEQyMDA2NTJFNzAwMTIyMTIzNjkyN0UwMDI5RkZFRTNBQzlFRjUwCis6MTA0OEUyMDBDOTc1MzBGRkY1MzE4OTMyODBEMjdCMDA3QTAwNzkwMEI4Cis6MDE0OEYyMDAyMkEzCis6MTAwNTAwMDAxMjAxMTAwMTAwMDAwMDQwNkEwODExMDEwMDAxMDEwMkZGCis6MTAwNTEwMDAwMDAxMDkwMkFDMDEwMzAxMDA4MDMyMDkwNDAwMDAwMDVGCis6MTAwNTIwMDAwMTAxMDAwMDBBMjQwMTAwMDE1NjAwMDIwMTAyMEMyNDBFCis6MTAwNTMwMDAwMjAxMDEwMTAwMDIwMDAwMDAwMDBEMjQwNjA1MDEwMjc1Cis6MTAwNTQwMDAwMzAwMDAwMDAwMDAwMDA5MjQwMzAyMDQwMzAwMDUwMDZBCis6MTAwNTUwMDAwQzI0MDIwMzA1MDIwMDA2MDAwMDAwMDAxNTI0MDYwNjE0Cis6MTAwNTYwMDAwMzAyMDAwMDAzMDAwMzAwMDMwMDAzMDAwMzAwMDMwMDc0Cis6MTAwNTcwMDAwMDA5MjQwMzA0MDEwMTAwMDYwMDA5MDQwMTAwMDAwMTMwCis6MTAwNTgwMDAwMjAwMDAwOTA0MDEwMTAyMDEwMjAwMDAwNzI0MDEwMTI4Cis6MTAwNTkwMDAwMDAxMDAxMTI0MDIwMTAyMDIxMDAzNDRBQzAwODBCQkUwCis6MTAwNUEwMDAwMDAwNzcwMTA5MDUwQTA1ODQwMTAxMDA4RjA3MjUwMTc0Cis6MTAwNUIwMDAwMTAwMDAwMDA5MDU4RjAxMDMwMDAxMDUwMDA5MDQwMTg1Cis6MTAwNUMwMDAwMjAyMDEwMjAwMDAwNzI0MDEwMTAwMDEwMDExMjQwMkJGCis6MTAwNUQwMDAwMTAyMDMxODAzNDRBQzAwODBCQjAwMDA3NzAxMDkwNTQ5Cis6MTAwNUUwMDAwQTA1NDYwMjAxMDA4RjA3MjUwMTAxMDAwMDAwMDkwNUU4Cis6MTAwNUYwMDA4RjAxMDMwMDAxMDUwMDA5MDQwMjAwMDAwMTAyMDAwMDUwCis6MTAwNjAwMDAwOTA0MDIwMTAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMEE1Cis6MTAwNjEwMDAwRTI0MDIwMTA2MDIxMDAyNDRBQzAwODBCQjAwMDkwNTUyCis6MTAwNjIwMDA4QzA1NEMwMjAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNEFFCis6MTAwNjMwMDAwMjAyMDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwMEUyNDRGCis6MTAwNjQwMDAwMjAxMDYwMzE4MDI0NEFDMDA4MEJCMDAwOTA1OEMwNUJBCis6MTAwNjUwMDA3MjAzMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0MDIwM0UzCis6MTAwNjYwMDAwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDAxMTI0MDIwMTFECis6MTAwNjcwMDAwMjAyMTAwMzQ0QUMwMDgwQkIwMDAwNzcwMTA5MDU4QzI2Cis6MTAwNjgwMDAwNTg0MDEwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDQwMkExCis6MTAwNjkwMDAwNDAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMDExMjQwMkVBCis6MTAwNkEwMDAwMTAyMDMxODAzNDRBQzAwODBCQjAwMDA3NzAxMDkwNTc4Cis6MTAwNkIwMDA4QzA1NDYwMjAxMDAwMDA3MjUwMTAwMDIwMDAwMDQwMzJBCis6MTAwNkMwMDAwOTA0MTgwMzQ1MDA2RDAwNjEwMDY3MDA2OTAwNjMwMEJDCis6MTAwNkQwMDAyMDAwNDcwMDZEMDA2MjAwNDgwMDIyMDM0NTAwNkQwMEM1Cis6MTAwNkUwMDA2MTAwNjcwMDY5MDA2MzAwMjAwMDQ1MDA0RDAwNDkwMDdCCis6MTAwNkYwMDAyMDAwMzYwMDdDMDAzMjAwMjAwMDZEMDAyQTAzNDMwMEY5Cis6MTAwNzAwMDA2RjAwNkUwMDY2MDA2OTAwNjcwMDc1MDA3MjAwNjEwMDhFCis6MTAwNzEwMDA3NDAwNjkwMDZGMDA2RTAwMjAwMDUzMDA3NDAwNzIwMEM2Cis6MTAwNzIwMDA2OTAwNkUwMDY3MDAyMjAzNDkwMDZFMDA3NDAwNjUwMEQ2Cis6MTAwNzMwMDA3MjAwNjYwMDYxMDA2MzAwNjUwMDIwMDA1MzAwNzQwMEQxCis6MEEwNzQwMDA3MjAwNjkwMDZFMDA2NzAwMDAwMEZGCis6MTAxNDg1MDA3NDAwRjU4NjkwRkRBNTdDMDVBM0U1ODI0NTgzNzBGOTdBCis6MDExNDk1MDAyMjM0Cis6MTAxNDk2MDA5MDdGRDZFMDQ0ODBGMDQzODcwMTAwMDAwMDAwMDAyMkUwCis6MTAxNEE2MDBDMEQwQzBFMDhGRTBDMEUwOEVFMEMwRTA4REUwQzBFMERDCis6MTAxNEI2MDA4Q0UwQzBFMEMwODJDMDgzMDU4NkMwODRDMDg1N0QwMDA0Cis6MTAxNEM2MDA5MDdGRTM3NDdCRjBBMzc0ODBGMDdDMTE5MDdGOTlFMEE5Cis6MTAxNEQ2MDA1NDQwREMwMzAyMTRGM0I0MDAxMzkwN0ZFMjc0NDBGMDJFCis6MTAxNEU2MDA5MDdGRTVGMDkwN0ZFMjc0MDBGMDAyMTREMjkwNzY5MDNGCis6MTAxNEY2MDBFMEI0MDExMjkwNzY4RkUwMkRGRDkwN0ZFMjc0ODBGMENCCis6MTAxNTA2MDA5MDdGNkMwMjE1NTdCNDAyMTI5MDc2OEZFMDJERkQ5MEY1Cis6MTAxNTE2MDA3RkUyNzQ4MEYwOTA3RjZDMDIxNTk2QjQwMzEyOTA3Njg5Cis6MTAxNTI2MDA4RkUwMkRGRDkwN0ZFMjc0ODBGMDkwN0Y2QzAyMTVFMUQ0Cis6MTAxNTM2MDBCNDA0MTI5MDc2OEZFMDJERkQ5MDdGRTI3NDgwRjA5MEQ3Cis6MTAxNTQ2MDA3RjZDMDIxNjEwOTA3RkUyNzQ4MEYwOTA3RjZDMDIxNjFBCis6MTAxNTU2MDA0MEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMERERjI3REI5Cis6MTAxNTY2MDAwMjA1ODY5MDdGRTI3NDAwRjA5MDdGOUJFMDU0MDRCNEZECis6MTAxNTc2MDAwMDA1MDU4NjAyMTY0MDkwN0ZFMjc0ODBGMDA1ODZGMDJECis6MTAxNTg2MDBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRERENDAyMTY0MEZDCis6MTAxNTk2MDBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMDQ1Cis6MTAxNUE2MDBGMEYwRERFQzdEMDIwNTg2OTA3RkUyNzQwMEYwOTA3RjFFCis6MTAxNUI2MDA5QkUwNTQwNEI0MDAwNTA1ODYwMjE2NDA5MDdGRTI3NDUxCis6MTAxNUM2MDA4MEYwMDU4NkYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMERBCis6MDYxNUQ2MDBGMEYwRjBGMEYwRjA2RgorOjEwMTVEQzAwRERDRTAyMTY0MEYwRjBGMEYwRERGQTdEMDIwNTg2OTBDQgorOjEwMTVFQzAwN0ZFMjc0MDBGMDkwN0Y5QkUwNTQwNEI0MDAwNTA1ODYwNAorOjEwMTVGQzAwMDIxNjQwOTA3RkUyNzQ4MEYwMDU4NkYwRjBGMEYwREQ4QQorOjEwMTYwQzAwREMwMjE2NDBGMEYwRjBGMEYwRjBEREY4N0QwMjA1ODYxQgorOjEwMTYxQzAwOTA3RkUyNzQwMEYwOTA3RjlCRTA1NDA0QjQwMDA1MDVDOQorOjEwMTYyQzAwODYwMjE2NDA5MDdGRTI3NDgwRjAwNTg2RjBGMEYwRjBCMAorOjEwMTYzQzAwRjBGMEREREE5MDdGRTI3NDAwRjBEMDg1RDA4NDA1ODY3RQorOjEwMTY0QzAwRDA4M0QwODJEMEUwRkNEMEUwRkREMEUwRkVEMEUwRkYzMworOjA1MTY1QzAwRDBFMEQwRDAyMjE3Cis6MTAxNjYxMDBDMEQwQzBFMEMwODJDMDgzOTA3NjdDRTA5MDdGNkZGMEY0Cis6MTAxNjcxMDA5MDc2N0RFMDkwN0Y2RkYwOTA3NjdFRTA5MDdGNkZGMEM2Cis6MDkxNjgxMDBEMDgzRDA4MkQwRTBEMEQwMjI0OQorOjEwMTY4QTAwQzBEMEMwRTA4RkUwQzBFMDhFRTBDMEUwQzA4MkMwODM3RQorOjEwMTY5QTAwMDU4NkMwODRDMDg1OTA3Njg3RTBGRkJGMDAwMzAyMTdFNQorOjEwMTZBQTAwMDE5MDdGOTZFMDQ0ODBGMDkwN0ZFMjc0ODBGMDkwN0YxMgorOjEwMTZCQTAwNjJFMDA1ODY5MDdGRTI3NDAwRjA5MDdGOTZFMDU0N0ZBNgorOjEwMTZDQTAwRjA5MDdGRTI3NDgwRjA5MDc2OEVFMEI0MDEwNTA1ODY5MgorOjEwMTZEQTAwMDIxNkY2QjQwMjA1MDU4NjAyMTZFQjA1ODYwMjE2RkIwQgorOjEwMTZFQTAwRTBFMEUwRTBFMEUwREZGODAyMTZGQkUwRTBFMEUwREY2NworOjEwMTZGQTAwRkE5MDdGRTI3NDAwRjBEMDg1RDA4NDA1ODZEMDgzRDAzQQorOjBDMTcwQTAwODJEMEUwRkVEMEUwRkZEMEUwRDBEMDIyODIKKzoxMDE3MTYwMEMwODJDMDgzQzBFMEU4QzBFMDc4RDFFODE0Rjg3MEZCNkUKKzowQTE3MjYwMEQwRTBGOEQwRTBEMDgzRDA4MjIyOUEKKzoxMDBDQTUwMDQxNzIwMTAxNDU3MjA1MDAwMkM5MDAwMDQ1NzIwQTAwNDIKKzoxMDBDQjUwMDAxMDIwMzA0NEQ3MjBGRDEwMEQxMDAwMDAwMDAwMDAwQjUKKzoxMDBDQzUwMDI4MjgwOTAwNEQ3MjFDMDEwMDAxMDIwMzA0MDUwNjA3Q0UKKzoxMDBDRDUwMDA4MDkwQTBCNDE3MjJFMjI0MTcyMkYyMzQxNzIzMDIwREUKKzoxMDBDRTUwMDQxNzIzMTIxNjJEMjcyM0EwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMDBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTAxMDEwMTAxNjgKKzoxMDBEODUwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxNEUKKzoxMDBEOTUwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxM0UKKzoxMDBEQTUwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMkUKKzoxMDBEQjUwMDAxMDEwMTAxMDEwMTAxMDEwMjAyMDIwMjAyMDIwMjAyMTYKKzoxMDBEQzUwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyRkUKKzoxMDBERDUwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyRUUKKzoxMDBERTUwMDAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyREUKKzoxMDBERjUwMDAyMDIwMjAyMDIwMzAzMDMwMzAzMDMwMzAzMDMwMzAzQzMKKzoxMDBFMDUwMDAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzQUQKKzoxMDBFMTUwMDAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzOUQKKzoxMDBFMjUwMDAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzOEQKKzoxMDBFMzUwMDAzMDMwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0NkYKKzoxMDBFNDUwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0NUQKKzoxMDBFNTUwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0NEQKKzoxMDBFNjUwMDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0M0QKKzoxMDBFNzUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MUQKKzoxMDBFODUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MEQKKzoxMDBFOTUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1RkQKKzoxMDBFQTUwMDA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNjA2RUIKKzoxMDBFQjUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2Q0QKKzoxMDBFQzUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2QkQKKzoxMDBFRDUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2QUQKKzoxMDBFRTUwMDA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNzA3MDcwODA4OTYKKzoxMDBFRjUwMDA4MDkwOTA5MEEwQTBBMEIwQjBCMEMwQzBDMEQwRDBENDAKKzoxMDBGMDUwMDBFMEUwRTBGMEYwRjEwMTAxMDExMTExMTEyMTIxMjEzRDkKKzoxMDBGMTUwMDEzMTMxNDE0MTQxNTE1MTUxNjE2MTYxNzE3MTcxODE4NzQKKzoxMDBGMjUwMDE4MTkxOTE5MTkxQTFBMUExQTFCMUIxQjFCMUMxQzFDMTgKKzoxMDBGMzUwMDFDMUQxRDFEMUQxRTFFMUUxRTFGMUYxRjFGMjAyMDIwQzgKKzoxMDBGNDUwMDIxMjEyMTIyMjIyMjIzMjMyNDI0MjUyNTI2MjYyNzI3NjEKKzoxMDBGNTUwMDI4MjgyOTI5MkEyQTJCMkIyQzJDMkQyRDJFMkUyRjJGRDQKKzoxMDBGNjUwMDMwMzAzMTMxMzIzMjMzMzMzNDM0MzUzNTM2MzYzNzM3NDQKKzoxMDBGNzUwMDM4MzgzOTM5M0EzQTNCM0MzRDNFM0Y0MDQxNDI0MzQ0OUIKKzoxMDBGODUwMDQ1NDY0NzQ4NDk0OTRBNEI0QjRDNEQ0RTRGNTA1MTUyQTcKKzoxMDBGOTUwMDUzNTQ1NTU1NTY1NjU3NTc1ODVBNUI1RDVFNUY2MTYyQjcKKzoxMDBGQTUwMDYzNjQ2NTY2Njc2ODY5NkE2QjZDNkQ2RjcxNzI3Mzc0OEIKKzoxMDBGQjUwMDc1NzY3Nzc4Nzk3QTdCN0M3RTgwMDEzNzAxMDEzODAwRjgKKzoxMDRBQzQwMEU0OTA3MjM2RjBBM0YwOTA3Rjk3RTA1NEZCRjBFNDkwMEEKKzoxMDRBRDQwMDcyMzNGMDkwNzIzMkYwOTA3MjAxMDRGMEU0OTA3MjMzMDkKKzoxMDRBRTQwMEYwOTA3MjMyRjA5MDcyMDEwNEYwOTA3Rjk3RTA0NDA0RTkKKzowMjRBRjQwMEYwMjJBRQorOjEwMzI2RjAwOTA3NjE4RTBGRjY0MDU3MDQyOTA3NUFCRTBCNDAxMTlEOQorOjEwMzI3RjAwOTA3MjM3NzQwMUYwRTQ5MDgwMjBGMDkwODAzMUYwOTBEQworOjEwMzI4RjAwODAyOEYwOTA4MDM5RjA4MDIyRTQ5MDcyMzdGMDkwNzVBQQorOjEwMzI5RjAwQURFMDkwNzIyQkYwRTAyNDgwRjBFMDkwODAyMEYwOTA3MQorOjEwMzJBRjAwODAzMUYwOTA4MDI4RjA5MDgwMzlGMEVGNjQwNjYwMDI1MgorOjEwMzJCRjAwODE5OTkwNzIzOTc0MDRGMDkwNzIzOUUwRkYyNEZFOTA3NgorOjEwMzJDRjAwNzIwNEYwRUY3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjVCRgorOjEwMzJERjAwODNFMDY0MDE3MDU0OTA3MjM2MDRGMDkwNzIwNEUwRkY0MgorOjEwMzJFRjAwMjRGRDYwMjgyNEZFNjAyNDI0MDMyNEZCNTAwNDYwMUM2QQorOjEwMzJGRjAwODE4Qzc0MjAyRkY1ODJFNDM0ODBGNTgzRTRGMDc0MjhGOAorOjEwMzMwRjAwMkZGNTgyRTQzNDgwRjU4M0U0RjA4MThDOTA3MjA0RTAzMQorOjEwMzMxRjAwRkYyNDMwRjU4MkU0MzQ4MEY1ODNFNEYwNzQzODJGRjUyMAorOjEwMzMyRjAwODJFNDM0ODBGNTgzRTRGMDgxOENFNDkwNzIzNkYwOTA3RgorOjEwMzMzRjAwNzIzOUUwNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUY1ODM5MworOjEwMzM0RjAwRTBGRjdFMDA5MDc1MENFRUYwQTNFRkYwNzAwNjkwNzIyOAorOjEwMzM1RjAwMDI3NDNCRjA5MDc1MENFMEZFQTNFMEZGNjQ4MDRFNzBBQQorOjEwMzM2RjAwMDQ5MDcyMDJGMEVGNEU3MDAyODEzNUVGNjQ4MDRFNzA2MAorOjEwMzM3RjAwMDI4MTM1RUZGOEU0OTA3NTBERjBFODkwNzUwQ0YwOTA0MAorOjEwMzM4RjAwNzIzNEUwNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODM0OQorOjEwMzM5RjAwRTBGRjkwNzIwMkYwOTA3NTBERTAyRkYwOTA3NTBDRTA0OQorOjEwMzNBRjAwMzQwMEYwRTBGRUEzRTBGRkU0RkNGRDdCRDY3QUE1Rjk0NAorOjEwMzNCRjAwRjhEMzEyMzc5NTQwMEE5MDc1MEM3NEE1RjBBMzc0RDYwNAorOjEwMzNDRjAwRjA5MDc1MERFMDI0MkFGMDkwNzUwQ0UwMzQ1QUYwRTA3RgorOjEwMzNERjAwRkVBM0UwNzgwNUNFQTJFNzEzQ0UxM0Q4RjhGRjkwNzVDMQorOjEwMzNFRjAwMENFRUYwQTNFRkYwOTA3MjJDRUVGMEEzRUZGMEQzOTQ2RAorOjEwMzNGRjAwRDJFRTY0ODA5NDgyNDAwQTkwNzIyQzc0MDJGMEEzNzQwRgorOjEwMzQwRjAwRDJGMEMzOTA3MjJDRTA2NDgwOTQ4MDUwMDRFNEYwQTM1NworOjEwMzQxRjAwRjA5MDcyMkNFMEZFQTNFMDI0M0FGNTgyRUUzNDcyRjVDMAorOjEwMzQyRjAwODNFMDkwNzIwMkYwOTA3MjA0RTBGRjI0RkQ2MDJEMjQ3RgorOjEwMzQzRjAwRkU2MDI5MjQwMzI0RkI1MDA0NjAyMTgwNDA5MDcyMDIxNworOjEwMzQ0RjAwRTBGRTc0MjAyRkY1ODJFNDM0ODBGNTgzRUVGMDc0MjhDQgorOjEwMzQ1RjAwMkZGNTgyRTQzNDgwRjU4M0VFRjA4MDIxOTA3MjAyRTA0NAorOjEwMzQ2RjAwRkY5MDcyMDRFMEZFMjQzMEY1ODJFNDM0ODBGNTgzRUZBMAorOjEwMzQ3RjAwRjA3NDM4MkVGNTgyRTQzNDgwRjU4M0VGRjA5MDcyMzlEMgorOjBCMzQ4RjAwRTAwNEYwRTA2NDBBNjAwMjQxQzcyMjg0Cis6MTAzNDlBMDA5MDc2MThFMEZGQjQwNTIzOTA3MjM3RTA3MDFEOTA3NTlFCis6MTAzNEFBMDBBREUwOTA3MjJCRjBFMDI0ODBGMEUwOTA4MDIwRjA5MDY0Cis6MTAzNEJBMDA4MDMxRjA5MDgwMjhGMDkwODAzOUYwRUY2NDA2NjAwMjQ1Cis6MTAzNENBMDBDMTkxOTA3MjM2RTA2MDAyQzE5MTkwNzY0MEUwNzAzMTBECis6MTAzNERBMDA5MDcyMDM3NDAzRjA5MDcyMDNFMEZGNzVGMDBBQTQyNDVCCis6MTAzNEVBMDBBQUY1ODJFNDM0NzVGNTgzRTBGRTkwNzIyOUUwRkRFRUQ4Cis6MTAzNEZBMDA2RDYwMEVFRkMzOTQwQTUwMDg5MDcyMDNFMDA0RjA4MEU2Cis6MTAzNTBBMDBENTkwNzIzOTc0MDRGMDkwNzY0MEUwNzAwODkwNzIwMzk2Cis6MTAzNTFBMDBFMDkwNzIzOUYwOTA3MjM5RTBGRDI0RkU5MDcyMkFGMDQwCis6MTAzNTJBMDBFRDc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzRTBGRjY1Cis6MTAzNTNBMDA3RTAwOTA3NTBDRUVGMEEzRUZGMDcwMDY5MDcyMDI3NEE0Cis6MTAzNTRBMDA4MEYwOTA3NTBDRTBGRUEzRTBGRjY0ODA0RTcwMDQ5MDVBCis6MTAzNTVBMDA3MjAyRjBFRjRFNzAwMkMxMUJFRjY0ODA0RTcwMDJDMTFFCis6MTAzNTZBMDAxQkVGRjhFNDkwNzUwREYwRTg5MDc1MENGMEVENzVGMDJFCis6MTAzNTdBMDAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzRTBGRjkwNzIwMjY0Cis6MTAzNThBMDBGMDkwNzUwREUwMkZGMDkwNzUwQ0UwMzQwMEYwRTBGRTNECis6MTAzNTlBMDBBM0UwRkZFNEZDRkQ3QkQ2N0FBNUY5RjhEMzEyMzc5NUIwCis6MTAzNUFBMDA0MDBBOTA3NTBDNzRBNUYwQTM3NEQ2RjA5MDc1MERFMERFCis6MTAzNUJBMDAyNDJBRjA5MDc1MENFMDM0NUFGMEUwRkVBM0UwNzgwNTc2Cis6MTAzNUNBMDBDRUEyRTcxM0NFMTNEOEY4RkY5MDc1MENFRUYwQTNFRjU2Cis6MTAzNURBMDBGMDkwNzIyQ0VFRjBBM0VGRjBEMzk0RDJFRTY0ODA5NEM0Cis6MTAzNUVBMDA4MjQwMEE5MDcyMkM3NDAyRjBBMzc0RDJGMEMzOTA3MkQzCis6MTAzNUZBMDAyQ0UwNjQ4MDk0ODA1MDA0RTRGMEEzRjA5MDcyMkNFMEY0Cis6MTAzNjBBMDBGRUEzRTAyNDNBRjU4MkVFMzQ3MkY1ODNFMDkwNzIwMjZBCis6MTAzNjFBMDBGMDkwNzIyQUUwRkYyNEZENjAyRDI0RkU2MDI5MjQwMzI1Cis6MTAzNjJBMDAyNEZCNTAwNDYwMjE4MDQwOTA3MjAyRTBGRTc0MjAyRjM3Cis6MTAzNjNBMDBGNTgyRTQzNDgwRjU4M0VFRjA3NDI4MkZGNTgyRTQzNEMxCis6MTAzNjRBMDA4MEY1ODNFRUYwODAyMTkwNzIwMkUwRkY5MDcyMkFFMDBBCis6MTAzNjVBMDBGRTI0MzBGNTgyRTQzNDgwRjU4M0VGRjA3NDM4MkVGNUQ5Cis6MTAzNjZBMDA4MkU0MzQ4MEY1ODNFRkYwOTA3NjQwRTA3MDA2OTA3MjQxCis6MTAzNjdBMDAzOTc0MEFGMDkwNzIzOUUwMDRGMEUwQzM5NDBBNTAwMkY3Cis6MDgzNjhBMDBBMTExRTQ5MDc2NDBGMDIyNEEKKzowNDREOTcwMDEyMTczMDIyOUQKKzoxMDQ5NTgwMDkwNzY0Njc0ODBGMEU0QTNGMEEzRjBBM0YwQTNGMEEzNEMKKzoxMDQ5NjgwMEYwQTNGMEEzRjBBM0YwQTM3NDgwRjBFNEEzRjBBM0YwMDUKKzoxMDQ5NzgwMEEzRjBBM0YwQTNGMEEzRjBBMzc0NDBGMEU0QTNGMEEzODIKKzoxMDQ5ODgwMDc0NDBGMEU0QTNGMEEzRjBBM0YwQTNGMEEzRjBBM0YwMjUKKzoxMDQ5OTgwMEEzNzQ0MEYwRTRBM0YwQTM3NDQwRjBFNEEzRjBBM0YwMDAKKzowNTQ5QTgwMEEzRjBBM0YwMjJDMgorOjEwMEZDNjAwRTRGRjc0NDYyRkY1ODJFNDM0NzZGNTgzRTBGRTc0MjA2MAorOjEwMEZENjAwMkZGNTgyRTQzNDgwRjU4M0VFRjA3NDRFMkZGNTgyRTQyQgorOjEwMEZFNjAwMzQ3NkY1ODNFMEZFNzQzMDJGRjU4MkU0MzQ4MEY1ODNBMQorOjA2MEZGNjAwRUVGMDBGQkYwOENDNzUKKzowMTBGRkMwMDIyRDIKKzoxMDRBOEQwMEU0RkY3NDU2MkZGNTgyRTQzNDc2RjU4M0UwRkU3NDI4NDYKKzoxMDRBOUQwMDJGRjU4MkU0MzQ4MEY1ODNFRUYwNzQ1RTJGRjU4MkU0MTkKKzoxMDRBQUQwMDM0NzZGNTgzRTBGRTc0MzgyRkY1ODJFNDM0ODBGNTgzOTcKKzowNjRBQkQwMEVFRjAwRkJGMDhDQzczCis6MDE0QUMzMDAyMkQwCis6MTAxNzMwMDBDMDgyQzA4M0MwRTBFOEMwRTA3ODc4RTgxNEY4NzBGQkFECis6MEExNzQwMDBEMEUwRjhEMEUwRDA4M0QwODIyMjgwCis6MDMwMDQzMDAwMjQ5MDA2RgorOjEwNDkwMDAwMDIyRkU3MDAwMjNENDcwMDAyNEQ0NjAwMDI0QkQ1MDA1MgorOjEwNDkxMDAwMDI0QjYwMDAwMjJGRkYwMDAyNEJFRDAwMDI0QjgxMDBCMgorOjEwNDkyMDAwMDI0QzA0MDAwMjNGRDUwMDAyNEMxQjAwMDI0QzMyMDAzNgorOjEwNDkzMDAwMDI0QzQ5MDAwMjRDNjAwMDAyNEM3NzAwMDI0QzhFMDA5MQorOjEwNDk0MDAwMDI0Q0E1MDAwMjRDQkMwMDAyNENEMzAwMDI0Q0VBMDAxMQorOjA4NDk1MDAwMDI0RDAxMDAwMjREMTgwMEE4Cis6MTAxQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAxQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAxQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAxQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAxQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAxQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAxQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAxQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAxQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAxQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAxQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTAxQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTAxQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTAxQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTAxQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAxQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTAxQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAxQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTAxQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAxQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAxQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAxQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAxQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAxQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAxRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAxRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTAxRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTAxRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAxRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTAxRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTAxRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAxRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAxRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTAxREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAxREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAxREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTAxREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTAxREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAxREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTAxRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAxRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTAxRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTAxRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTAxRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTAxRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTAxRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTAxRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAxRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTAxRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MEUxRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDFFQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMDFFQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDFFREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDFFRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDFFRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDFGMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDFGMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDFGMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzowMjFGM0UwMDAwMDBBMQorOjEwMUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwMUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwMjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwMjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwMjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwMjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwMjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwMjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjBFMjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAyMzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAyMzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAyMzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAyM0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAyM0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAyM0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyM0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAyM0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAyM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAyNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAyNDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAyNDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAyNDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAyNDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAyNDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAyNDZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAyNDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyNDhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAyNDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyNEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAyNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAyNENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAyNERFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTAyNEVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAyNEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyNTJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyNTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyNTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyNTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAyNTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAyNTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyNThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAyNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAyNUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAyNUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAyNUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAyNURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAyNUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAyNUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAyNjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAyNjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTAyNjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTAyNjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTAyNjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTAyNjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTAyNjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTAyNjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTAyNjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTAyNjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTAyNkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTAyNkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTAyNkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTAyNkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MEUyNkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDI2RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDI3MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDI3MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDI3MkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDI3M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDI3NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDI3NUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDI3NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDI3N0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDI3OEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDI3OUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDI3QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDI3QkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDI3Q0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDI3REMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDI3RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzowNTI3RkMwMDAwMDAwMDAwMjJCNgorOjA3MTc0QTAwOTA3RkM1NzQwMkYwMjIzQworOjEwMTc1MTAwOTA3RUMwRTA5MDc2NDVGMDkwN0VDMUUwOTA3NjQ0RjBCNgorOjEwMTc2MTAwOTA3RUMyRTA5MDc2NDNGMEI0MDAwMzAyMTc3ODkwNzY0MQorOjEwMTc3MTAwMTk3NDAzRjAwMjE3OEU5MDc2NDRFMEI0QkIwOTkwNzY5OQorOjEwMTc4MTAwMTk3NDAyRjAwMjE3OEU5MDc2MTk3NDAxRjA5MDc2NDI2NgorOjAzMTc5MTAwRTRGMDIyNUYKKzowMzAwMDAwMDAyNDVGOUJECis6MEM0NUY5MDA3ODdGRTRGNkQ4RkQ3NTgxMzgwMjQ2NDA1QQorOjEwMzY5MjAwQkIwMTA2ODk4MjhBODNFMDIyNTAwMkU3MjJCQkZFMDIzNgorOjA5MzZBMjAwRTMyMjg5ODI4QTgzRTQ5MzIyNjkKKzoxMDM2QUIwMEJCMDEwQ0U1ODIyOUY1ODJFNTgzM0FGNTgzRTAyMjUwRDQKKzoxMDM2QkIwMDA2RTkyNTgyRjhFNjIyQkJGRTA2RTkyNTgyRjhFMjIyMUUKKzowRDM2Q0IwMEU1ODIyOUY1ODJFNTgzM0FGNTgzRTQ5MzIyMzgKKzoxMDM2RDgwMEMyRDVFQzMwRTcwOUIyRDVFNEMzOURGREU0OUNGQ0VFMEQKKzoxMDM2RTgwMDMwRTcxNUIyRDVFNEMzOUZGRkU0OUVGRTEyMzgxRkMzMkUKKzoxMDM2RjgwMEU0OURGREU0OUNGQzgwMDMxMjM4MUYzMEQ1MDdDM0U0MjkKKzowNjM3MDgwMDlGRkZFNDlFRkUyMjdCCis6MTAzNzBFMDBCQjAxMTBFNTgyMjlGNTgyRTU4MzNBRjU4M0UwRjVGMEY5Cis6MTAzNzFFMDBBM0UwMjI1MDA5RTkyNTgyRjg4NkYwMDhFNjIyQkJGRUQ2Cis6MTAzNzJFMDAwQUU5MjU4MkY4RTJGNUYwMDhFMjIyRTU4MzJBRjU4MzFDCis6MDgzNzNFMDBFOTkzRjVGMEEzRTk5MzIyRTEKKzoxMDM3NDYwMEU4OEZGMEE0Q0M4QkYwQTQyQ0ZDRTk4RUYwQTQyQ0ZDMjIKKzoxMDM3NTYwMDhBRjBFREE0MkNGQ0VBOEVGMEE0Q0RBOEYwOEJGMEE0QTAKKzoxMDM3NjYwMDJEQ0MzODI1RjBGREU5OEZGMEE0MkNDRDM1RjBGQ0VCRkYKKzoxMDM3NzYwMDhFRjBBNEZFQTlGMEVCOEZGMEE0Q0ZDNUYwMkVDRDM5QzQKKzowRjM3ODYwMEZFRTQzQ0ZDRUFBNDJEQ0UzNUYwRkRFNDNDRkMyMjMxCis6MTAzNzk1MDBFQjlGRjVGMEVBOUU0MkYwRTk5RDQyRjBFQzY0ODBDOEFCCis6MDYzN0E1MDA2NDgwOTg0NUYwMjI0QgorOjEwMzdBQjAwRUI5RkY1RjBFQTlFNDJGMEU5OUQ0MkYwRTg5QzQ1RjA3NAorOjAxMzdCQjAwMjJFQgorOjBDMzdCQzAwRUNGMEEzRURGMEEzRUVGMEEzRUZGMDIyODAKKzoxMDM3QzgwMEE4ODI4NTgzRjBEMDgzRDA4MjEyMzdERjEyMzdERjEyQzgKKzoxMDM3RDgwMDM3REYxMjM3REZFNDczRTQ5M0EzQzU4M0M1RjBDNTgzRUQKKzoxMDM3RTgwMEM4QzU4MkM4RjBBM0M1ODNDNUYwQzU4M0M4QzU4MkM4NEIKKzowMTM3RjgwMDIyQUUKKzoxMDM3RjkwMEQwODNEMDgyRjhFNDkzNzAxMjc0MDE5MzcwMERBM0EzNUYKKzoxMDM4MDkwMDkzRjg3NDAxOTNGNTgyODg4M0U0NzM3NDAyOTM2ODYwNzIKKzowNjM4MTkwMEVGQTNBM0EzODBERjcyCis6MTA0NjA1MDAwMjQ3NUFFNDkzQTNGOEU0OTNBMzQwMDNGNjgwMDFGMjJBCis6MTA0NjE1MDAwOERGRjQ4MDI5RTQ5M0EzRjg1NDA3MjQwQ0M4QzMzM0I2Cis6MTA0NjI1MDBDNDU0MEY0NDIwQzg4MzQwMDRGNDU2ODAwMTQ2RjZERjg1Cis6MTA0NjM1MDBFNDgwMEIwMTAyMDQwODEwMjA0MDgwOTAwQzhGRTQ3RTdBCis6MTA0NjQ1MDAwMTkzNjBCQ0EzRkY1NDNGMzBFNTA5NTQxRkZFRTQ5MzdBCis6MTA0NjU1MDBBMzYwMDEwRUNGNTRDMDI1RTA2MEE4NDBCOEU0OTNBMzQxCis6MTA0NjY1MDBGQUU0OTNBM0Y4RTQ5M0EzQzhDNTgyQzhDQUM1ODNDQTZDCis6MTA0Njc1MDBGMEEzQzhDNTgyQzhDQUM1ODNDQURGRTlERUU3ODBCRTI0Cis6MDEwRkM1MDAwMDJCCis6MTAzODFGMDBCQzAwMEJCRTAwMjlFRjhERjA4NEZGQURGMDIyRTRDQzhECis6MTAzODJGMDBGODc1RjAwOEVGMkZGRkVFMzNGRUVDMzNGQ0VFOURFQzU2Cis6MTAzODNGMDA5ODQwMDVGQ0VFOURGRTBGRDVGMEU5RTRDRUZEMjJFRDlDCis6MTAzODRGMDBGOEY1RjBFRTg0MjBEMjFDRkVBREYwNzVGMDA4RUYyRkU2Cis6MTAzODVGMDBGRkVEMzNGRDQwMDc5ODUwMDZENUYwRjIyMkMzOThGREQ3Cis6MDUzODZGMDAwRkQ1RjBFQTIyNzQKKzowMDAwMDAwMUZGCisqLworLyoKK1ZFUlNJT049MS4wNC4wNjIKK0RBVEU9MTYuMTAuMjAwMiAgCisqLworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19lbWk2Ml9sb2FkZXJbXSA9IHsKKyB7IDMsMHgwMDAwLDAsezB4MDIsMHgwMiwweDg3fX0sCisgeyAzLDB4MDA0MywwLHsweDAyLDB4MDQsMHgwMH19LAorIHsxNiwweDAxMDAsMCx7MHhlNCwweGZmLDB4ZmUsMHhjMiwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDgsMHgyMCwweDkwLDB4N2YsMHhhYiwweDc0LDB4ZmYsMHhmMH19LAorIHsxNiwweDAxMTAsMCx7MHg5MCwweDdmLDB4YTksMHhmMCwweDkwLDB4N2YsMHhhYSwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweDk1LDB4NzQsMHhjMH19LAorIHsxNiwweDAxMjAsMCx7MHhmMCwweDkwLDB4N2YsMHg5ZSwweGYwLDB4OTAsMHg3ZiwweDk4LDB4ZjAsMHhlNCwweDkwLDB4N2YsMHg5NCwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDAxMzAsMCx7MHg5ZCwweDc0LDB4ZmYsMHhmMCwweDkwLDB4N2YsMHg5NywweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHg5MywweGUwLDB4NTQsMHhmY319LAorIHsxNiwweDAxNDAsMCx7MHhmMCwweDkwLDB4N2YsMHg5YywweDc0LDB4MDMsMHhmMCwweGU0LDB4OTAsMHg3ZiwweDk2LDB4ZjAsMHg5MCwweDdmLDB4YWYsMHhlMH19LAorIHsxNiwweDAxNTAsMCx7MHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMCwweDQ0LDB4MGQsMHhmMCwweGQyLDB4YWYsMHgwZiwweGJmLDB4MDAsMHgwMX19LAorIHsxNiwweDAxNjAsMCx7MHgwZSwweGJlLDB4MDcsMHhmOCwweGJmLDB4MDgsMHhmNSwweDIwLDB4MjAsMHg0MiwweDc1LDB4MTQsMHgwMCwweDc1LDB4MTMsMHgwMH19LAorIHsxNiwweDAxNzAsMCx7MHg3NSwweDEyLDB4MDAsMHg3NSwweDExLDB4MDAsMHg3ZiwweDQ4LDB4N2UsMHg5MiwweDdkLDB4MDAsMHg3YywweDAwLDB4YWIsMHgxNH19LAorIHsxNiwweDAxODAsMCx7MHhhYSwweDEzLDB4YTksMHgxMiwweGE4LDB4MTEsMHhjMywweDEyLDB4MDMsMHhlZCwweDUwLDB4ZGIsMHgyMCwweDIwLDB4ZDgsMHg3YX19LAorIHsxNiwweDAxOTAsMCx7MHgwMCwweDc5LDB4MDAsMHg3OCwweDAwLDB4ZTUsMHgxNCwweDI0LDB4MDEsMHhmNSwweDE0LDB4ZWEsMHgzNSwweDEzLDB4ZjUsMHgxM319LAorIHsxNiwweDAxYTAsMCx7MHhlOSwweDM1LDB4MTIsMHhmNSwweDEyLDB4ZTgsMHgzNSwweDExLDB4ZjUsMHgxMSwweDgwLDB4Y2EsMHgzMCwweDIwLDB4ZmQsMHgxMn19LAorIHsxNiwweDAxYjAsMCx7MHgwMSwweGM3LDB4NTAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH19LAorIHsgNiwweDAxYzAsMCx7MHgwMiwweGYwLDB4YzIsMHgyMCwweDgwLDB4ZTZ9fSwKKyB7IDEsMHgwMWM2LDAsezB4MjJ9fSwKKyB7MTYsMHgwMWM3LDAsezB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweDViLDB4NjAsMHg2MCwweDI0LDB4MDIsMHg2MCwweDAzLDB4MDIsMHgwMiwweDg1LDB4OTB9fSwKKyB7MTYsMHgwMWQ3LDAsezB4N2YsMHhlYSwweGUwLDB4NzUsMHgwYSwweDAwLDB4ZjUsMHgwYiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDBhLDB4OTB9fSwKKyB7MTYsMHgwMWU3LDAsezB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjUsMHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTV9fSwKKyB7MTYsMHgwMWY3LDAsezB4MTYsMHg0NSwweDE1LDB4NzAsMHgwMywweDAyLDB4MDIsMHg4NSwweGU0LDB4OTAsMHg3ZiwweGM1LDB4ZjAsMHg5MCwweDdmLDB4YjR9fSwKKyB7MTYsMHgwMjA3LDAsezB4ZTAsMHgyMCwweGUzLDB4ZjksMHg5MCwweDdmLDB4YzUsMHhlMCwweGY1LDB4MGMsMHgxMiwweDAzLDB4MTMsMHhhZiwweDBjLDB4N2V9fSwKKyB7MTYsMHgwMjE3LDAsezB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjUsMHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjV9fSwKKyB7MTYsMHgwMjI3LDAsezB4MTYsMHhlNSwweDE1LDB4OWUsMHhmNSwweDE1LDB4ODAsMHhjNywweDkwLDB4N2YsMHhlYSwweGUwLDB4NzUsMHgwYSwweDAwLDB4ZjV9fSwKKyB7MTYsMHgwMjM3LDAsezB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwLDB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjV9fSwKKyB7MTYsMHgwMjQ3LDAsezB4MTYsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgxNSwweGU1LDB4MTYsMHg0NSwweDE1LDB4NjAsMHgzMCwweGU0LDB4OTB9fSwKKyB7MTYsMHgwMjU3LDAsezB4N2YsMHhjNSwweGYwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHgyMCwweGUzLDB4ZjksMHg5MCwweDdmLDB4YzUsMHhlMCwweGY1LDB4MGN9fSwKKyB7MTYsMHgwMjY3LDAsezB4MTIsMHgwMywweDJiLDB4YWYsMHgwYywweDdlLDB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjV9fSwKKyB7MTUsMHgwMjc3LDAsezB4MGEsMHhjMywweGU1LDB4MTYsMHg5ZiwweGY1LDB4MTYsMHhlNSwweDE1LDB4OWUsMHhmNSwweDE1LDB4ODAsMHhjYSwweGMzfX0sCisgeyAxLDB4MDI4NiwwLHsweDIyfX0sCisgezEyLDB4MDI4NywwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgyOSwweDAyLDB4MDIsMHhjZX19LAorIHsxNiwweDAyOTMsMCx7MHgwMiwweDAxLDB4MDAsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweDQwLDB4MDMsMHhmNiwweDgwLDB4MDEsMHhmMn19LAorIHsxNiwweDAyYTMsMCx7MHgwOCwweGRmLDB4ZjQsMHg4MCwweDI5LDB4ZTQsMHg5MywweGEzLDB4ZjgsMHg1NCwweDA3LDB4MjQsMHgwYywweGM4LDB4YzMsMHgzM319LAorIHsxNiwweDAyYjMsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn19LAorIHsxNiwweDAyYzMsMCx7MHhlNCwweDgwLDB4MGIsMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLDB4OTAsMHgwNCwweDZlLDB4ZTQsMHg3ZX19LAorIHsxNiwweDAyZDMsMCx7MHgwMSwweDkzLDB4NjAsMHhiYywweGEzLDB4ZmYsMHg1NCwweDNmLDB4MzAsMHhlNSwweDA5LDB4NTQsMHgxZiwweGZlLDB4ZTQsMHg5M319LAorIHsxNiwweDAyZTMsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM319LAorIHsxNiwweDAyZjMsMCx7MHhmYSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYX19LAorIHsxNiwweDAzMDMsMCx7MHhmMCwweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYSwweGRmLDB4ZTksMHhkZSwweGU3LDB4ODAsMHhiZX19LAorIHsxNiwweDAzMTMsMCx7MHhlNSwweDBjLDB4ZmYsMHhlNSwweDBiLDB4ZjUsMHg4MiwweGU1LDB4MGEsMHhmNSwweDgzLDB4NzUsMHg5MiwweDdlLDB4NzQsMHhjMH19LAorIHsgOCwweDAzMjMsMCx7MHhmOCwweGUyLDB4MDgsMHhmMCwweGEzLDB4ZGYsMHhmYSwweDIyfX0sCisgezE2LDB4MDMyYiwwLHsweDkwLDB4N2YsMHg5NiwweDg1LDB4ODMsMHg5MiwweGE4LDB4ODIsMHg3OSwweDAyLDB4OTAsMHgwMCwweDAwLDB4ZTAsMHhiNCwweDAwfX0sCisgezE2LDB4MDMzYiwwLHsweDBkLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg0NCwweDgwLDB4ZjAsMHhlNSwweDBjfX0sCisgezE2LDB4MDM0YiwwLHsweGZmLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmNSwweDI4LDB4ZTQsMHhhMiwweDQ3LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyfX0sCisgezE2LDB4MDM1YiwwLHsweDQ2LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDUsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NCwweDMzfX0sCisgezE2LDB4MDM2YiwwLHsweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MywweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQyLDB4MzMsMHhmMiwweDY5fX0sCisgezE2LDB4MDM3YiwwLHsweGYyLDB4ZTQsMHhhMiwweDQxLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDAsMHgzMywweGYyLDB4NjksMHhmMiwweGEzfX0sCisgeyAzLDB4MDM4YiwwLHsweGRmLDB4YzIsMHgyMn19LAorIHsxNiwweDAzOGUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg5MCwweDdmLDB4YzQsMHhlNCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3Zn19LAorIHsxMSwweDAzOWUsMCx7MHhhYiwweDc0LDB4MDQsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4MDNhOSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGQyLDB4MjAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAxfX0sCisgeyA4LDB4MDNiOSwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHgwM2MxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4ZDB9fSwKKyB7IDYsMHgwM2QxLDAsezB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4MDNkNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MTAsMHhmMCwweGQwfX0sCisgeyA2LDB4MDNlNywwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDAzZWQsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlOCwweDljLDB4NDUsMHhmMH19LAorIHsgMSwweDAzZmQsMCx7MHgyMn19LAorIHsgMSwweDAzZmUsMCx7MHgzMn19LAorIHsgMSwweDAzZmYsMCx7MHgzMn19LAorIHsxNiwweDA0MDAsMCx7MHgwMiwweDAzLDB4YTksMHgwMCwweDAyLDB4MDMsMHhjMSwweDAwLDB4MDIsMHgwMywweDhlLDB4MDAsMHgwMiwweDA0LDB4NTgsMHgwMH19LAorIHsxNiwweDA0MTAsMCx7MHgwMiwweDAzLDB4ZDcsMHgwMCwweDAyLDB4MDMsMHhmZSwweDAwLDB4MDIsMHgwMywweGZmLDB4MDAsMHgwMiwweDA0LDB4ODQsMHgwMH19LAorIHsxNiwweDA0MjAsMCx7MHgwMiwweDA0LDB4ODUsMHgwMCwweDAyLDB4MDQsMHg4NiwweDAwLDB4MDIsMHgwNCwweDg3LDB4MDAsMHgwMiwweDA0LDB4ODgsMHgwMH19LAorIHsxNiwweDA0MzAsMCx7MHgwMiwweDA0LDB4ODksMHgwMCwweDAyLDB4MDQsMHg4YSwweDAwLDB4MDIsMHgwNCwweDhiLDB4MDAsMHgwMiwweDA0LDB4OGMsMHgwMH19LAorIHsxNiwweDA0NDAsMCx7MHgwMiwweDA0LDB4OGQsMHgwMCwweDAyLDB4MDQsMHg4ZSwweDAwLDB4MDIsMHgwNCwweDhmLDB4MDAsMHgwMiwweDA0LDB4OTAsMHgwMH19LAorIHsgOCwweDA0NTAsMCx7MHgwMiwweDA0LDB4OTEsMHgwMCwweDAyLDB4MDQsMHg5MiwweDAwfX0sCisgezE2LDB4MDQ1OCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDgsMHhmMCwweGQwfX0sCisgeyA2LDB4MDQ2OCwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDA0NmUsMCx7MHgwMiwweDBhLDB4MDAsMHgwZiwweDAxLDB4MGMsMHgxMSwweDA0LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQxLDB4MDAsMHgwMH19LAorIHsgMSwweDA0N2UsMCx7MHgwMH19LAorIHsgNCwweDA0N2YsMCx7MHgwMiwweDE3LDB4MDAsMHgwMH19LAorIHsgMSwweDA0ODMsMCx7MHgwMH19LAorIHsgMSwweDA0ODQsMCx7MHgzMn19LAorIHsgMSwweDA0ODUsMCx7MHgzMn19LAorIHsgMSwweDA0ODYsMCx7MHgzMn19LAorIHsgMSwweDA0ODcsMCx7MHgzMn19LAorIHsgMSwweDA0ODgsMCx7MHgzMn19LAorIHsgMSwweDA0ODksMCx7MHgzMn19LAorIHsgMSwweDA0OGEsMCx7MHgzMn19LAorIHsgMSwweDA0OGIsMCx7MHgzMn19LAorIHsgMSwweDA0OGMsMCx7MHgzMn19LAorIHsgMSwweDA0OGQsMCx7MHgzMn19LAorIHsgMSwweDA0OGUsMCx7MHgzMn19LAorIHsgMSwweDA0OGYsMCx7MHgzMn19LAorIHsgMSwweDA0OTAsMCx7MHgzMn19LAorIHsgMSwweDA0OTEsMCx7MHgzMn19LAorIHsgMSwweDA0OTIsMCx7MHgzMn19LAorIHsxNiwweDExMDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn19LAorIHsxNiwweDExMTAsMCx7MHgwMCwweDAxLDB4MDksMHgwMiwweDIwLDB4MDAsMHgwMSwweDAxLDB4MDMsMHhhMCwweDAwLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwMn19LAorIHsxNiwweDExMjAsMCx7MHhmZiwweDAwLDB4MDAsMHgwNCwweDA3LDB4MDUsMHg4MiwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDAyLDB4MDIsMHg0MH19LAorIHsxNiwweDExMzAsMCx7MHgwMCwweDAwLDB4MDQsMHgwMywweDA5LDB4MDQsMHgyNiwweDAzLDB4NDEsMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4NjgsMHgwMH19LAorIHsxNiwweDExNDAsMCx7MHg2ZiwweDAwLDB4NzIsMHgwMCwweDIwLDB4MDAsMHg0MywweDAwLDB4NjgsMHgwMCwweDY5LDB4MDAsMHg3MCwweDAwLDB4NzMsMHgwMH19LAorIHsxNiwweDExNTAsMCx7MHgyYywweDAwLDB4MjAsMHgwMCwweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NjMsMHgwMCwweDJlLDB4MDAsMHgyOCwweDAzLDB4NDYsMHgwMH19LAorIHsxNiwweDExNjAsMCx7MHg2OSwweDAwLDB4NzIsMHgwMCwweDZkLDB4MDAsMHg3NywweDAwLDB4NjEsMHgwMCwweDcyLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMH19LAorIHsxNiwweDExNzAsMCx7MHg0NiwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg2ZCwweDAwLDB4NjUsMHgwMCwweDU3LDB4MDAsMHg2ZiwweDAwLDB4NzIsMHgwMH19LAorIHsxNiwweDExODAsMCx7MHg2YiwweDAwLDB4NzMsMHgwMCwweDJhLDB4MDMsMHg0MywweDAwLDB4NmYsMHgwMCwweDZlLDB4MDAsMHg2NiwweDAwLDB4NjksMHgwMH19LAorIHsxNiwweDExOTAsMCx7MHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NzQsMHgwMCwweDY5LDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMH19LAorIHsxNiwweDExYTAsMCx7MHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MjIsMHgwM319LAorIHsxNiwweDExYjAsMCx7MHg0OSwweDAwLDB4NmUsMHgwMCwweDc0LDB4MDAsMHg2NSwweDAwLDB4NzIsMHgwMCwweDY2LDB4MDAsMHg2MSwweDAwLDB4NjMsMHgwMH19LAorIHsxNiwweDExYzAsMCx7MHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMH19LAorIHsgMiwweDExZDAsMCx7MHgwMCwweDAwfX0sCisgeyAwLDB4MDAwMCwxLHswfX0KK307CisvKiBTb3VyY2U6IEVNSUxPQUQuSEVYIAorOjEwMDQ2RTAwMDIwQTAwMEYwMTBDMTEwNDBEMDAwMDAwMDA0MTAwMDBGMworOjAxMDQ3RTAwMDA3RAorOjEwMDFDNzAwOTA3RkU5RTAyNDVCNjA2MDI0MDI2MDAzMDIwMjg1OTA2RgorOjEwMDFENzAwN0ZFQUUwNzUwQTAwRjUwQkEzRTBGRUU0RUU0MjBBOTAyMQorOjEwMDFFNzAwN0ZFRUUwNzUxNTAwRjUxNkEzRTBGRUU0RUU0MjE1RTU5NworOjEwMDFGNzAwMTY0NTE1NzAwMzAyMDI4NUU0OTA3RkM1RjA5MDdGQjQyMQorOjEwMDIwNzAwRTAyMEUzRjk5MDdGQzVFMEY1MEMxMjAzMTNBRjBDN0VGNQorOjEwMDIxNzAwMDBFRjI1MEJGNTBCRUUzNTBBRjUwQUMzRTUxNjlGRjUzQQorOjEwMDIyNzAwMTZFNTE1OUVGNTE1ODBDNzkwN0ZFQUUwNzUwQTAwRjU3QgorOjEwMDIzNzAwMEJBM0UwRkVFNEVFNDIwQTkwN0ZFRUUwNzUxNTAwRjVCMQorOjEwMDI0NzAwMTZBM0UwRkVFNEVFNDIxNUU1MTY0NTE1NjAzMEU0OTA4RQorOjEwMDI1NzAwN0ZDNUYwOTA3RkI0RTAyMEUzRjk5MDdGQzVFMEY1MEMwRgorOjEwMDI2NzAwMTIwMzJCQUYwQzdFMDBFRjI1MEJGNTBCRUUzNTBBRjVDRAorOjBGMDI3NzAwMEFDM0U1MTY5RkY1MTZFNTE1OUVGNTE1ODBDQUMzNTcKKzowMTAyODYwMDIyNTUKKzoxMDAzQTkwMEMwRTBDMDgzQzA4MkQyMjA1MzkxRUY5MDdGQUI3NDAxMkIKKzowODAzQjkwMEYwRDA4MkQwODNEMEUwMzJDNQorOjEwMDM4RTAwQzBFMEMwODNDMDgyOTA3RkM0RTRGMDUzOTFFRjkwN0ZCMQorOjBCMDM5RTAwQUI3NDA0RjBEMDgyRDA4M0QwRTAzMkJBCis6MTAwM0MxMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDAyRjBEMDQ0Cis6MDYwM0QxMDA4MkQwODNEMEUwMzI2RgorOjEwMDNENzAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQxMEYwRDAyMAorOjA2MDNFNzAwODJEMDgzRDBFMDMyNTkKKzowMTAzRkUwMDMyQ0MKKzoxMDA0NTgwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MDhGMEQwQTYKKzowNjA0NjgwMDgyRDA4M0QwRTAzMkQ3Cis6MDEwM0ZGMDAzMkNCCis6MDEwNDg0MDAzMjQ1Cis6MDEwNDg1MDAzMjQ0Cis6MDEwNDg2MDAzMjQzCis6MDEwNDg3MDAzMjQyCis6MDEwNDg4MDAzMjQxCis6MDEwNDg5MDAzMjQwCis6MDEwNDhBMDAzMjNGCis6MDEwNDhCMDAzMjNFCis6MDEwNDhDMDAzMjNECis6MDEwNDhEMDAzMjNDCis6MDEwNDhFMDAzMjNCCis6MDEwNDhGMDAzMjNBCis6MDEwNDkwMDAzMjM5Cis6MDEwNDkxMDAzMjM4Cis6MDEwNDkyMDAzMjM3Cis6MDQwNDdGMDAwMjE3MDAwMDYwCis6MTAwMTAwMDBFNEZGRkVDMjIwRDJFODQzRDgyMDkwN0ZBQjc0RkZGMDFBCis6MTAwMTEwMDA5MDdGQTlGMDkwN0ZBQUYwNTM5MUVGOTA3Rjk1NzRDMEUzCis6MTAwMTIwMDBGMDkwN0Y5RUYwOTA3Rjk4RjBFNDkwN0Y5NEYwOTA3RjI1Cis6MTAwMTMwMDA5RDc0RkZGMDkwN0Y5Nzc0QTBGMDkwN0Y5M0UwNTRGQzQzCis6MTAwMTQwMDBGMDkwN0Y5Qzc0MDNGMEU0OTA3Rjk2RjA5MDdGQUZFMDk2Cis6MTAwMTUwMDA0NDAxRjA5MDdGQUVFMDQ0MERGMEQyQUYwRkJGMDAwMTNDCis6MTAwMTYwMDAwRUJFMDdGOEJGMDhGNTIwMjA0Mjc1MTQwMDc1MTMwMDc1Cis6MTAwMTcwMDA3NTEyMDA3NTExMDA3RjQ4N0U5MjdEMDA3QzAwQUIxNEUzCis6MTAwMTgwMDBBQTEzQTkxMkE4MTFDMzEyMDNFRDUwREIyMDIwRDg3QUJDCis6MTAwMTkwMDAwMDc5MDA3ODAwRTUxNDI0MDFGNTE0RUEzNTEzRjUxMzBECis6MTAwMUEwMDBFOTM1MTJGNTEyRTgzNTExRjUxMTgwQ0EzMDIwRkQxMjNCCis6MTAwMUIwMDAwMUM3NTAwNzkwN0ZCNEUwNDQwMUYwOTA3RkI0RTA0NDYxCis6MDYwMUMwMDAwMkYwQzIyMDgwRTZGRgorOjAxMDFDNjAwMjIxNgorOjEwMTEwMDAwMTIwMTEwMDEwMDAwMDA0MDZBMDgwMTAxMDAwMTAxMDIwMworOjEwMTExMDAwMDAwMTA5MDIyMDAwMDEwMTAzQTAwMDA5MDQwMDAwMDJFRgorOjEwMTEyMDAwRkYwMDAwMDQwNzA1ODIwMjQwMDAwMDA3MDUwMjAyNDA5QworOjEwMTEzMDAwMDAwMDA0MDMwOTA0MjYwMzQxMDA2RTAwNjMwMDY4MDBGOAorOjEwMTE0MDAwNkYwMDcyMDAyMDAwNDMwMDY4MDA2OTAwNzAwMDczMDBBNworOjEwMTE1MDAwMkMwMDIwMDA0OTAwNkUwMDYzMDAyRTAwMjgwMzQ2MDA4QQorOjEwMTE2MDAwNjkwMDcyMDA2RDAwNzcwMDYxMDA3MjAwNjUwMDIwMDA2OAorOjEwMTE3MDAwNDYwMDcyMDA2MTAwNkQwMDY1MDA1NzAwNkYwMDcyMDA0QworOjEwMTE4MDAwNkIwMDczMDAyQTAzNDMwMDZGMDA2RTAwNjYwMDY5MDA2NQorOjEwMTE5MDAwNjcwMDc1MDA3MjAwNjEwMDc0MDA2OTAwNkYwMDZFMDBFNgorOjEwMTFBMDAwMjAwMDUzMDA3NDAwNzIwMDY5MDA2RTAwNjcwMDIyMDM4MworOjEwMTFCMDAwNDkwMDZFMDA3NDAwNjUwMDcyMDA2NjAwNjEwMDYzMDAwMworOjEwMTFDMDAwNjUwMDIwMDA1MzAwNzQwMDcyMDA2OTAwNkUwMDY3MDAyMworOjAyMTFEMDAwMDAwMDFECis6MTAwMzEzMDBFNTBDRkZFNTBCRjU4MkU1MEFGNTgzNzU5MjdFNzRDMDYzCis6MDgwMzIzMDBGOEUyMDhGMEEzREZGQTIyNjIKKzoxMDAzMkIwMDkwN0Y5Njg1ODM5MkE4ODI3OTAyOTAwMDAwRTBCNDAwQkEKKzoxMDAzM0IwMDBENzQwMUYwOTA3Rjk3RTA1NDdGRjA0NDgwRjBFNTBDNTIKKzoxMDAzNEIwMEZGOTA3RUMwRTBGNTI4RTRBMjQ3MzNGMjY5RjJFNEEyMDUKKzoxMDAzNUIwMDQ2MzNGMjY5RjJFNEEyNDUzM0YyNjlGMkU0QTI0NDMzODQKKzoxMDAzNkIwMEYyNjlGMkU0QTI0MzMzRjI2OUYyRTRBMjQyMzNGMjY5OTYKKzoxMDAzN0IwMEYyRTRBMjQxMzNGMjY5RjJFNEEyNDAzM0YyNjlGMkEzNTAKKzowMzAzOEIwMERGQzIyMkFDCis6MDMwMDQzMDAwMjA0MDBCNAorOjEwMDQwMDAwMDIwM0E5MDAwMjAzQzEwMDAyMDM4RTAwMDIwNDU4MDA4NworOjEwMDQxMDAwMDIwM0Q3MDAwMjAzRkUwMDAyMDNGRjAwMDIwNDg0MDA2RgorOjEwMDQyMDAwMDIwNDg1MDAwMjA0ODYwMDAyMDQ4NzAwMDIwNDg4MDA5QQorOjEwMDQzMDAwMDIwNDg5MDAwMjA0OEEwMDAyMDQ4QjAwMDIwNDhDMDA3QQorOjEwMDQ0MDAwMDIwNDhEMDAwMjA0OEUwMDAyMDQ4RjAwMDIwNDkwMDA1QQorOjA4MDQ1MDAwMDIwNDkxMDAwMjA0OTIwMDc1Cis6MDMwMDAwMDAwMjAyODc3MgorOjBDMDI4NzAwNzg3RkU0RjZEOEZENzU4MTI5MDIwMkNFRDQKKzoxMDAzRUQwMEVCOUZGNUYwRUE5RTQyRjBFOTlENDJGMEU4OUM0NUYwNjYKKzowMTAzRkQwMDIyREQKKzoxMDAyOTMwMDAyMDEwMEU0OTNBM0Y4RTQ5M0EzNDAwM0Y2ODAwMUYyODAKKzoxMDAyQTMwMDA4REZGNDgwMjlFNDkzQTNGODU0MDcyNDBDQzhDMzMzNkMKKzoxMDAyQjMwMEM0NTQwRjQ0MjBDODgzNDAwNEY0NTY4MDAxNDZGNkRGM0IKKzoxMDAyQzMwMEU0ODAwQjAxMDIwNDA4MTAyMDQwODA5MDA0NkVFNDdFNTkKKzoxMDAyRDMwMDAxOTM2MEJDQTNGRjU0M0YzMEU1MDk1NDFGRkVFNDkzMzAKKzoxMDAyRTMwMEEzNjAwMTBFQ0Y1NEMwMjVFMDYwQTg0MEI4RTQ5M0EzRjcKKzoxMDAyRjMwMEZBRTQ5M0EzRjhFNDkzQTNDOEM1ODJDOENBQzU4M0NBMjIKKzoxMDAzMDMwMEYwQTNDOEM1ODJDOENBQzU4M0NBREZFOURFRTc4MEJFRDkKKzowMTA0ODMwMDAwNzgKKzowMDAwMDAwMUZGCisqLworLyoKK1ZFUlNJT049MS4wLjIuMDAyCitEQVRFPTEwLjAxLjIwMDIKK0VNSTI2XzYyCisqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAzMGQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTAsMCArMSw0NDMgQEAKKy8qIFNpZW1lbnMgSUQgTW91c2UgZHJpdmVyIHYwLjUKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIENvcHlyaWdodCAoQykgMjAwNC01IGJ5IEZsb3JpYW4gJ0Zsb2UnIEVjaHRsZXIgIDxlY2h0bGVyQGZzLnR1bS5kZT4KKyAgICAgICAgICAgICAgICAgICAgICBhbmQgQW5kcmVhcyAgJ2FkJyAgRGVyZXNjaCA8YWRlcmVzY2hAZnMudHVtLmRlPgorCisgIERlcml2ZWQgZnJvbSB0aGUgVVNCIFNrZWxldG9uIGRyaXZlciAxLjEsCisgIENvcHlyaWdodCAoQykgMjAwMyBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBXSURUSCAyMjUKKyNkZWZpbmUgSEVJR0hUIDI4OAorI2RlZmluZSBIRUFERVIgIlA1IDIyNSAyODggMjU1ICIKKyNkZWZpbmUgSU1HU0laRSAoKFdJRFRIICogSEVJR0hUKSArIHNpemVvZihIRUFERVIpLTEpCisKKy8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuNSIKKyNkZWZpbmUgRFJJVkVSX1NIT1JUICAgImlkbW91c2UiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICJGbG9yaWFuICdGbG9lJyBFY2h0bGVyIDxlY2h0bGVyQGZzLnR1bS5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJTaWVtZW5zIElEIE1vdXNlIEZpbmdlclRJUCBTZW5zb3IgRHJpdmVyIgorCisvKiBTaWVtZW5zIElEIE1vdXNlICovCisjZGVmaW5lIFVTQl9JRE1PVVNFX1ZFTkRPUl9JRCAgMHgwNjgxCisjZGVmaW5lIFVTQl9JRE1PVVNFX1BST0RVQ1RfSUQgMHgwMDA1CisKKy8qIHdlIHN0aWxsIG5lZWQgYSBtaW5vciBudW1iZXIgKi8KKyNkZWZpbmUgVVNCX0lETU9VU0VfTUlOT1JfQkFTRSAxMzIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkbW91c2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfSURNT1VTRV9WRU5ET1JfSUQsIFVTQl9JRE1PVVNFX1BST0RVQ1RfSUQpfSwKKwl7fSAvKiBudWxsIGVudHJ5IGF0IHRoZSBlbmQgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZG1vdXNlX3RhYmxlKTsKKworLyogc3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCB1c2JfaWRtb3VzZSB7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsgLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7IC8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisKKwl1bnNpZ25lZCBjaGFyICpidWxrX2luX2J1ZmZlcjsgLyogdGhlIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KKwlzaXplX3QgYnVsa19pbl9zaXplOyAvKiB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwlfX3U4IGJ1bGtfaW5fZW5kcG9pbnRBZGRyOyAvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCisJaW50IG9wZW47IC8qIGlmIHRoZSBwb3J0IGlzIG9wZW4gb3Igbm90ICovCisJaW50IHByZXNlbnQ7IC8qIGlmIHRoZSBkZXZpY2UgaXMgbm90IGRpc2Nvbm5lY3RlZCAqLworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOyAvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCit9OworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgc3NpemVfdCBpZG1vdXNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKTsKKworc3RhdGljIGludCBpZG1vdXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBpZG1vdXNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCitzdGF0aWMgaW50IGlkbW91c2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitzdGF0aWMgdm9pZCBpZG1vdXNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKKy8qIGZpbGUgb3BlcmF0aW9uIHBvaW50ZXJzICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZG1vdXNlX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSBpZG1vdXNlX3JlYWQsCisJLm9wZW4gPSBpZG1vdXNlX29wZW4sCisJLnJlbGVhc2UgPSBpZG1vdXNlX3JlbGVhc2UsCit9OworCisvKiBjbGFzcyBkcml2ZXIgaW5mb3JtYXRpb24gZm9yIGRldmZzICovCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgaWRtb3VzZV9jbGFzcyA9IHsKKwkubmFtZSA9ICJ1c2IvaWRtb3VzZSVkIiwKKwkuZm9wcyA9ICZpZG1vdXNlX2ZvcHMsCisJLm1vZGUgPSBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RILCAvKiBmaWxlbW9kZSAoY2hhciwgNDQ0KSAqLworCS5taW5vcl9iYXNlID0gVVNCX0lETU9VU0VfTUlOT1JfQkFTRSwKK307CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpZG1vdXNlX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9IERSSVZFUl9TSE9SVCwKKwkucHJvYmUgPSBpZG1vdXNlX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gaWRtb3VzZV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGlkbW91c2VfdGFibGUsCit9OworCisvLyBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0KCkKK3N0YXRpYyBERUNMQVJFX01VVEVYKGRpc2Nvbm5lY3Rfc2VtKTsKKworc3RhdGljIGludCBpZG1vdXNlX2NyZWF0ZV9pbWFnZShzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldikKK3sKKwlpbnQgYnl0ZXNfcmVhZCA9IDA7CisJaW50IGJ1bGtfcmVhZCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoZGV2LT5idWxrX2luX3NpemUgPCBzaXplb2YoSEVBREVSKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoZGV2LT5idWxrX2luX2J1ZmZlcixIRUFERVIsc2l6ZW9mKEhFQURFUiktMSk7CisJYnl0ZXNfcmVhZCArPSBzaXplb2YoSEVBREVSKS0xOworCisJLyogRHVtcCB0aGUgc2V0dXAgcGFja2V0cy4gWWVzLCB0aGV5IGFyZSB1bmNvbW1lbnRlZCwgc2ltcGx5IAorCSAgIGJlY2F1c2UgdGhleSB3ZXJlIHNuaWZmZWQgdW5kZXIgV2luZG93cyB1c2luZyBTbm9vcHlQcm8uCisJICAgSSBfZ3Vlc3NfIHRoYXQgMHgyMiBpcyBhIGtpbmQgb2YgcmVzZXQgY29tbWFuZCBhbmQgMHgyMSAKKwkgICBtZWFucyBpbml0Li4KKwkqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMSwgMHg0MiwgMHgwMDAxLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMCwgMHg0MiwgMHgwMDAxLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMiwgMHg0MiwgMHgwMDAwLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIxLCAweDQyLCAweDAwMDEsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIwLCAweDQyLCAweDAwMDEsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCQkweDIwLCAweDQyLCAweDAwMDAsIDB4MDAwMiwgTlVMTCwgMCwgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBsb29wIG92ZXIgYSBibG9ja2luZyBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCisJd2hpbGUgKGJ5dGVzX3JlYWQgPCBJTUdTSVpFKSB7CisJCXJlc3VsdCA9IHVzYl9idWxrX21zZyAoZGV2LT51ZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZSAoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCQlkZXYtPmJ1bGtfaW5fYnVmZmVyICsgYnl0ZXNfcmVhZCwKKwkJCQlkZXYtPmJ1bGtfaW5fc2l6ZSwgJmJ1bGtfcmVhZCwgNTAwMCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJYnl0ZXNfcmVhZCArPSBidWxrX3JlYWQ7CisJfQorCisJLyogcmVzZXQgdGhlIGRldmljZSAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMiwgMHg0MiwgMHgwMDAwLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogc2hvdWxkIGJlIElNR1NJWkUgPT0gNjQ4MTUgKi8KKwlkYmcoInJlYWQgJWQgYnl0ZXMgZmluZ2VycHJpbnQgZGF0YSIsIGJ5dGVzX3JlYWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWRtb3VzZV9kZWxldGUoc3RydWN0IHVzYl9pZG1vdXNlICpkZXYpCit7CisJa2ZyZWUoZGV2LT5idWxrX2luX2J1ZmZlcik7CisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIGludCBpZG1vdXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9pZG1vdXNlICpkZXYgPSBOVUxMOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBwcmV2ZW50IGRpc2Nvbm5lY3RzICovCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJLyogZ2V0IHRoZSBpbnRlcmZhY2UgZnJvbSBtaW5vciBudW1iZXIgYW5kIGRyaXZlciBpbmZvcm1hdGlvbiAqLworCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSAoJmlkbW91c2VfZHJpdmVyLCBpbWlub3IgKGlub2RlKSk7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIGdldCB0aGUgZGV2aWNlIGluZm9ybWF0aW9uIGJsb2NrIGZyb20gdGhlIGludGVyZmFjZSAqLworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpZiAoIWRldikgeworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBsb2NrIHRoaXMgZGV2aWNlICovCisJZG93bigmZGV2LT5zZW0pOworCisJLyogY2hlY2sgaWYgYWxyZWFkeSBvcGVuICovCisJaWYgKGRldi0+b3BlbikgeworCisJCS8qIGFscmVhZHkgb3Blbiwgc28gZmFpbCAqLworCQlyZXN1bHQgPSAtRUJVU1k7CisKKwl9IGVsc2UgeworCisJCS8qIGNyZWF0ZSBhIG5ldyBpbWFnZSBhbmQgY2hlY2sgZm9yIHN1Y2Nlc3MgKi8KKwkJcmVzdWx0ID0gaWRtb3VzZV9jcmVhdGVfaW1hZ2UgKGRldik7CisJCWlmIChyZXN1bHQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkcml2ZXIgKi8KKwkJKytkZXYtPm9wZW47CisKKwkJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCisJfSAKKworZXJyb3I6CisKKwkvKiB1bmxvY2sgdGhpcyBkZXZpY2UgKi8KKwl1cCgmZGV2LT5zZW0pOworCisJLyogdW5sb2NrIHRoZSBkaXNjb25uZWN0IHNlbWFwaG9yZSAqLworCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpZG1vdXNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9pZG1vdXNlICpkZXY7CisKKwkvKiBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCBvcGVuKCkgKi8KKwlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9pZG1vdXNlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBsb2NrIG91ciBkZXZpY2UgKi8KKwlkb3duKCZkZXYtPnNlbSk7CisKKwkvKiBhcmUgd2UgcmVhbGx5IG9wZW4/ICovCisJaWYgKGRldi0+b3BlbiA8PSAwKSB7CisJCXVwKCZkZXYtPnNlbSk7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS0tZGV2LT5vcGVuOworCisJaWYgKCFkZXYtPnByZXNlbnQpIHsKKwkJLyogdGhlIGRldmljZSB3YXMgdW5wbHVnZ2VkIGJlZm9yZSB0aGUgZmlsZSB3YXMgcmVsZWFzZWQgKi8KKwkJdXAoJmRldi0+c2VtKTsKKwkJaWRtb3VzZV9kZWxldGUoZGV2KTsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdXAoJmRldi0+c2VtKTsKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBpZG1vdXNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKiBwcG9zKQoreworCXN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2OworCWludCByZXN1bHQgPSAwOworCisJZGV2ID0gKHN0cnVjdCB1c2JfaWRtb3VzZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvLyBsb2NrIHRoaXMgb2JqZWN0CisJZG93biAoJmRldi0+c2VtKTsKKworCS8vIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZAorCWlmICghZGV2LT5wcmVzZW50KSB7CisJCXVwICgmZGV2LT5zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoKnBwb3MgPj0gSU1HU0laRSkgeworCQl1cCAoJmRldi0+c2VtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvdW50ID4gSU1HU0laRSAtICpwcG9zKQorCQljb3VudCA9IElNR1NJWkUgLSAqcHBvczsKKworCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZmZlciwgZGV2LT5idWxrX2luX2J1ZmZlciArICpwcG9zLCBjb3VudCkpIHsKKwkJcmVzdWx0ID0gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBjb3VudDsKKwkJKnBwb3MgKz0gY291bnQ7CisJfQorCisJLy8gdW5sb2NrIHRoZSBkZXZpY2UgCisJdXAoJmRldi0+c2VtKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGlkbW91c2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9pZG1vdXNlICpkZXYgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisJaW50IHJlc3VsdDsKKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgZ290dGVuIHRoZSBkYXRhIG9yIHRoZSBoaWQgaW50ZXJmYWNlICovCisJaWZhY2VfZGVzYyA9ICZpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF07CisJaWYgKGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDB4MEEpCisJCXJldHVybiAtRU5PREVWOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mKCpkZXYpKTsKKworCWluaXRfTVVURVgoJmRldi0+c2VtKTsKKwlkZXYtPnVkZXYgPSB1ZGV2OworCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAtIHVzZSBvbmx5IHRoZSBmaXJzdCBidWxrLWluIGVuZHBvaW50ICovCisJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIKKwkJJiYgKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJJiYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisKKwkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJZGV2LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQlkZXYtPmJ1bGtfaW5fYnVmZmVyID0KKwkJCWttYWxsb2MoSU1HU0laRSArIGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWRldi0+YnVsa19pbl9idWZmZXIpIHsKKwkJCWVycigiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGJ1ZmZlci4iKTsKKwkJCWlkbW91c2VfZGVsZXRlKGRldik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCWlmICghKGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpKSB7CisJCWVycigiVW5hYmxlIHRvIGZpbmQgYnVsay1pbiBlbmRwb2ludC4iKTsKKwkJaWRtb3VzZV9kZWxldGUoZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIGFsbG93IGRldmljZSByZWFkLCB3cml0ZSBhbmQgaW9jdGwgKi8KKwlkZXYtPnByZXNlbnQgPSAxOworCisJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCXJlc3VsdCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaWRtb3VzZV9jbGFzcyk7CisJaWYgKHJlc3VsdCkgeworCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkZXZpY2UgKi8KKwkJZXJyKCJVbmJsZSB0byBhbGxvY2F0ZSBtaW5vciBudW1iZXIuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJaWRtb3VzZV9kZWxldGUoZGV2KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBiZSBub2lzeSAqLworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwiJXMgbm93IGF0dGFjaGVkXG4iLERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZG1vdXNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldjsKKworCS8qIHByZXZlbnQgcmFjZXMgd2l0aCBvcGVuKCkgKi8KKwlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisKKwkvKiBnZXQgZGV2aWNlIHN0cnVjdHVyZSAqLworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBsb2NrIGl0ICovCisJZG93bigmZGV2LT5zZW0pOworCisJLyogZ2l2ZSBiYWNrIG91ciBtaW5vciAqLworCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZpZG1vdXNlX2NsYXNzKTsKKworCS8qIHByZXZlbnQgZGV2aWNlIHJlYWQsIHdyaXRlIGFuZCBpb2N0bCAqLworCWRldi0+cHJlc2VudCA9IDA7CisKKwkvKiB1bmxvY2sgKi8KKwl1cCgmZGV2LT5zZW0pOworCisJLyogaWYgdGhlIGRldmljZSBpcyBvcGVuZWQsIGlkbW91c2VfcmVsZWFzZSB3aWxsIGNsZWFuIHRoaXMgdXAgKi8KKwlpZiAoIWRldi0+b3BlbikKKwkJaWRtb3VzZV9kZWxldGUoZGV2KTsKKworCXVwKCZkaXNjb25uZWN0X3NlbSk7CisKKwlpbmZvKCIlcyBkaXNjb25uZWN0ZWQiLCBEUklWRVJfREVTQyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9pZG1vdXNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmaWRtb3VzZV9kcml2ZXIpOworCWlmIChyZXN1bHQpCisJCWVycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGRldmljZSAoZXJyb3IgJWQpLiIsIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2lkbW91c2VfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZpZG1vdXNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9pZG1vdXNlX2luaXQpOworbW9kdWxlX2V4aXQodXNiX2lkbW91c2VfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ1ODBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtMCwwICsxLDEwODggQEAKKy8qCisgKiBMRUdPIFVTQiBUb3dlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgR2xhbmNlIDxkYXZpZGdzZkBzb3VyY2Vmb3JnZS5uZXQ+CisgKiAgICAgICAgICAgICAgIDIwMDEtMjAwNCBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICoJdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogZGVyaXZlZCBmcm9tIFVTQiBTa2VsZXRvbiBkcml2ZXIgLSAwLjUKKyAqIENvcHlyaWdodCAoQykgMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqIEhpc3Rvcnk6CisgKgorICogMjAwMS0xMC0xMyAtIDAuMSBqcworICogICAtIGZpcnN0IHZlcnNpb24KKyAqIDIwMDEtMTEtMDMgLSAwLjIganMKKyAqICAgLSBzaW1wbGlmaWVkIGJ1ZmZlcmluZywgb25lLXNob3QgVVJCcyBmb3Igd3JpdGluZworICogMjAwMS0xMS0xMCAtIDAuMyBqcworICogICAtIHJlbW92ZWQgSU9DVEwgKHNldHRpbmcgcG93ZXIvbW9kZSBpcyBtb3JlIGNvbXBsaWNhdGVkLCBwb3N0cG9uZWQpCisgKiAyMDAxLTExLTI4IC0gMC40IGpzCisgKiAgIC0gYWRkZWQgdmVuZG9yIGNvbW1hbmRzIGZvciBtb2RlIG9mIG9wZXJhdGlvbiBhbmQgcG93ZXIgbGV2ZWwgaW4gb3BlbgorICogMjAwMS0xMi0wNCAtIDAuNSBqcworICogICAtIHNldCBJUiBtb2RlIGJ5IGRlZmF1bHQgKGJ5IG92ZXJzaWdodCAwLjQgc2V0IFZMTCBtb2RlKQorICogMjAwMi0wMS0xMSAtIDAuNT8gcGNjaGFuCisgKiAgIC0gbWFrZSByZWFkIGJ1ZmZlciByZXVzYWJsZSBhbmQgd29yayBhcm91bmQgYnl0ZXNfdG9fd3JpdGUgaXNzdWUgYmV0d2VlbgorICogICAgIHVoY2kgYW5kIGxlZ3VzYnRvd2VyCisgKiAyMDAyLTA5LTIzIC0gMC41MiBkYXZpZCAoZGF2aWRAY3NzZS51d2EuZWR1LmF1KQorICogICAtIGltcG9ydGVkIGludG8gbGVqb3MgcHJvamVjdAorICogICAtIGNoYW5nZWQgd2FrZV91cCB0byB3YWtlX3VwX2ludGVycnVwdGlibGUKKyAqICAgLSBjaGFuZ2VkIHRvIHVzZSBsZWdvMCByYXRoZXIgdGhhbiB0b3dlcjAKKyAqICAgLSBjaGFuZ2VkIGRiZygpIHRvIHVzZSBfX2Z1bmNfXyByYXRoZXIgdGhhbiBkZXByZWNhdGVkIF9fRlVOQ1RJT05fXworICogMjAwMy0wMS0xMiAtIDAuNTMgZGF2aWQgKGRhdmlkQGNzc2UudXdhLmVkdS5hdSkKKyAqICAgLSBjaGFuZ2VkIHJlYWQgYW5kIHdyaXRlIHRvIHdyaXRlIGV2ZXJ5dGhpbmcgb3IKKyAqICAgICB0aW1lb3V0IChmcm9tIGEgcGF0Y2ggYnkgQ2hyaXMgUmllc2VuIGFuZCBCcmV0dCBUaGFlbGVyIGRyaXZlcikKKyAqICAgLSBhZGRlZCBpb2N0bCBmdW5jdGlvbmFsaXR5IHRvIHNldCB0aW1lb3V0cworICogMjAwMy0wNy0xOCAtIDAuNTQgZGF2aWRnc2YgKGRhdmlkQGNzc2UudXdhLmVkdS5hdSkKKyAqICAgLSBpbml0aWFsIGltcG9ydCBpbnRvIExlZ29VU0IgcHJvamVjdAorICogICAtIG1lcmdlIG9mIGV4aXN0aW5nIExlZ29VU0IuYyBkcml2ZXIKKyAqIDIwMDMtMDctMTggLSAwLjU2IGRhdmlkZ3NmIChkYXZpZEBjc3NlLnV3YS5lZHUuYXUpCisgKiAgIC0gcG9ydCB0byAyLjYgc3R5bGUgZHJpdmVyCisgKiAyMDA0LTAyLTI5IC0gMC42IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gZml4IGxvY2tpbmcKKyAqICAgLSB1bmxpbmsgcmVhZCBVUkJzIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkCisgKiAgIC0gYWxsb3cgaW5jcmVhc2VkIGJ1ZmZlciBzaXplLCBlbGltaW5hdGVzIG5lZWQgZm9yIHRpbWVvdXQgb24gd3JpdGUKKyAqICAgLSBoYXZlIHJlYWQgVVJCIHJ1bm5pbmcgY29udGludW91c2x5CisgKiAgIC0gYWRkZWQgcG9sbAorICogICAtIGZvcmJpZCBzZWVraW5nCisgKiAgIC0gYWRkZWQgbm9uYmxvY2tpbmcgSS9PCisgKiAgIC0gY2hhbmdlZCBiYWNrIF9fZnVuY19fIHRvIF9fRlVOQ1RJT05fXworICogICAtIHJlYWQgYW5kIGxvZyB0b3dlciBmaXJtd2FyZSB2ZXJzaW9uCisgKiAgIC0gcmVzZXQgdG93ZXIgb24gcHJvYmUsIGF2b2lkcyBmYWlsdXJlIG9mIGZpcnN0IHdyaXRlCisgKiAyMDA0LTAzLTA5IC0gMC43IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gdGltZW91dCByZWFkIG5vdyBvbmx5IGFmdGVyIGluYWN0aXZpdHksIHNob3J0ZW4gZGVmYXVsdCBhY2NvcmRpbmdseQorICogMjAwNC0wMy0xMSAtIDAuOCBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIGxvZyBtYWpvciwgbWlub3IgaW5zdGVhZCBvZiBwb3NzaWJseSBjb25mdXNpbmcgZGV2aWNlIGZpbGVuYW1lCisgKiAgIC0gd2hpdGVzcGFjZSBjbGVhbnVwCisgKiAyMDA0LTAzLTEyIC0gMC45IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gbm9ybWFsaXplIHdoaXRlc3BhY2UgaW4gZGVidWcgbWVzc2FnZXMKKyAqICAgLSB0YWtlIGNhcmUgYWJvdXQgZW5kaWFubmVzcyBpbiBjb250cm9sIG1lc3NhZ2UgcmVzcG9uc2VzCisgKiAyMDA0LTAzLTEzIC0gMC45MSBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIG1ha2UgZGVmYXVsdCBpbnRlcnZhbHMgbG9uZ2VyIHRvIGFjY29tbW9kYXRlIGN1cnJlbnQgRUhDSSBkcml2ZXIKKyAqIDIwMDQtMDMtMTkgLSAwLjkyIEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gcmVwbGFjZWQgYXRvbWljX3QgYnkgbWVtb3J5IGJhcnJpZXJzCisgKiAyMDA0LTA0LTIxIC0gMC45MyBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIHdhaXQgZm9yIGNvbXBsZXRpb24gb2Ygd3JpdGUgdXJiIGluIHJlbGVhc2UgKG5lZWRlZCBmb3IgcmVtb3RlY29udHJvbCkKKyAqICAgLSBjb3JyZWN0ZWQgcG9sbCBmb3Igd3JpdGUgZGlyZWN0aW9uIChtaXNzaW5nIG5lZ2F0aW9uKQorICogMjAwNC0wNC0yMiAtIDAuOTQgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBtYWtlIGRldmljZSBsb2NraW5nIGludGVycnVwdGlibGUKKyAqIDIwMDQtMDQtMzAgLSAwLjk1IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gY2hlY2sgZm9yIHZhbGlkIHVkZXYgb24gcmVzdWJtaXR0aW5nIGFuZCB1bmxpbmtpbmcgdXJicworICogMjAwNC0wOC0wMyAtIDAuOTYgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBtb3ZlIHJlc2V0IGludG8gb3BlbiB0byBjbGVhbiBvdXQgc3B1cmlvdXMgZGF0YQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwlzdGF0aWMgaW50IGRlYnVnID0gNDsKKyNlbHNlCisJc3RhdGljIGludCBkZWJ1ZyA9IDA7CisjZW5kaWYKKworLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCisjdW5kZWYgZGJnCisjZGVmaW5lIGRiZyhsdmwsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZyA+PSBsdmwpIHByaW50ayhLRVJOX0RFQlVHICBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorCisKKy8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjk2IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAc291cmNlZm9yZ2UubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkxFR08gVVNCIFRvd2VyIERyaXZlciIKKworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKworLyogVGhlIGRlZmF1bHRzIGFyZSBjaG9zZW4gdG8gd29yayB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgbGVKT1MgYW5kIE5RQy4KKyAqLworCisvKiBTb21lIGxlZ2FjeSBzb2Z0d2FyZSBsaWtlcyB0byByZWNlaXZlIHBhY2tldHMgaW4gb25lIHBpZWNlLgorICogSW4gdGhpcyBjYXNlIHJlYWRfYnVmZmVyX3NpemUgc2hvdWxkIGV4Y2VlZCB0aGUgbWF4aW1hbCBwYWNrZXQgbGVuZ3RoCisgKiAoNDE3IGZvciBkYXRhbG9nIHVwbG9hZHMpLCBhbmQgcGFja2V0X3RpbWVvdXQgc2hvdWxkIGJlIHNldC4KKyAqLworc3RhdGljIGludCByZWFkX2J1ZmZlcl9zaXplID0gNDgwOworbW9kdWxlX3BhcmFtKHJlYWRfYnVmZmVyX3NpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlYWRfYnVmZmVyX3NpemUsICJSZWFkIGJ1ZmZlciBzaXplIik7CisKKy8qIFNvbWUgbGVnYWN5IHNvZnR3YXJlIGxpa2VzIHRvIHNlbmQgcGFja2V0cyBpbiBvbmUgcGllY2UuCisgKiBJbiB0aGlzIGNhc2Ugd3JpdGVfYnVmZmVyX3NpemUgc2hvdWxkIGV4Y2VlZCB0aGUgbWF4aW1hbCBwYWNrZXQgbGVuZ3RoCisgKiAoNDE3IGZvciBmaXJtd2FyZSBhbmQgcHJvZ3JhbSBkb3dubG9hZHMpLgorICogQSBwcm9ibGVtIHdpdGggbG9uZyB3cml0ZXMgaXMgdGhhdCB0aGUgZm9sbG93aW5nIHJlYWQgbWF5IHRpbWUgb3V0CisgKiBpZiB0aGUgc29mdHdhcmUgaXMgbm90IHByZXBhcmVkIHRvIHdhaXQgbG9uZyBlbm91Z2guCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfYnVmZmVyX3NpemUgPSA0ODA7Cittb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX2J1ZmZlcl9zaXplLCAiV3JpdGUgYnVmZmVyIHNpemUiKTsKKworLyogU29tZSBsZWdhY3kgc29mdHdhcmUgZXhwZWN0cyByZWFkcyB0byBjb250YWluIHdob2xlIExBU00gcGFja2V0cy4KKyAqIFRvIGFjaGlldmUgdGhpcywgY2hhcmFjdGVycyB3aGljaCBhcnJpdmUgYmVmb3JlIGEgcGFja2V0IHRpbWVvdXQKKyAqIG9jY3VycyB3aWxsIGJlIHJldHVybmVkIGluIGEgc2luZ2xlIHJlYWQgb3BlcmF0aW9uLgorICogQSBwcm9ibGVtIHdpdGggbG9uZyByZWFkcyBpcyB0aGF0IHRoZSBzb2Z0d2FyZSBtYXkgdGltZSBvdXQKKyAqIGlmIGl0IGlzIG5vdCBwcmVwYXJlZCB0byB3YWl0IGxvbmcgZW5vdWdoLgorICogVGhlIHBhY2tldCB0aW1lb3V0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gdGhlIHRpbWUgYmV0d2VlbiB0aGUKKyAqIHJlY2VwdGlvbiBvZiBzdWJzZXF1ZW50IGNoYXJhY3RlcnMsIHdoaWNoIHNob3VsZCBhcnJpdmUgYWJvdXQKKyAqIGV2ZXJ5IDVtcyBmb3IgdGhlIHN0YW5kYXJkIDI0MDAgYmF1ZC4KKyAqIFNldCBpdCB0byAwIHRvIGRpc2FibGUuCisgKi8KK3N0YXRpYyBpbnQgcGFja2V0X3RpbWVvdXQgPSA1MDsKK21vZHVsZV9wYXJhbShwYWNrZXRfdGltZW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGFja2V0X3RpbWVvdXQsICJQYWNrZXQgdGltZW91dCBpbiBtcyIpOworCisvKiBTb21lIGxlZ2FjeSBzb2Z0d2FyZSBleHBlY3RzIGJsb2NraW5nIHJlYWRzIHRvIHRpbWUgb3V0LgorICogVGltZW91dCBvY2N1cnMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lIG9mIHJlYWQgYW5kIHdyaXRlIGluYWN0aXZpdHkuCisgKiBTZXQgaXQgdG8gMCB0byBkaXNhYmxlLgorICovCitzdGF0aWMgaW50IHJlYWRfdGltZW91dCA9IDIwMDsKK21vZHVsZV9wYXJhbShyZWFkX3RpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlYWRfdGltZW91dCwgIlJlYWQgdGltZW91dCBpbiBtcyIpOworCisvKiBBcyBvZiBrZXJuZWwgdmVyc2lvbiAyLjYuNCBlaGNpLWhjZCB1c2VzIGFuCisgKiAib25seSBvbmUgaW50ZXJydXB0IHRyYW5zZmVyIHBlciBmcmFtZSIgc2hvcnRjdXQKKyAqIHRvIHNpbXBsaWZ5IHRoZSBzY2hlZHVsaW5nIG9mIHBlcmlvZGljIHRyYW5zZmVycy4KKyAqIFRoaXMgY29uZmxpY3RzIHdpdGggb3VyIHN0YW5kYXJkIDFtcyBpbnRlcnZhbHMgZm9yIGluIGFuZCBvdXQgVVJCcy4KKyAqIFdlIHVzZSBkZWZhdWx0IGludGVydmFscyBvZiAybXMgZm9yIGluIGFuZCA4bXMgZm9yIG91dCB0cmFuc2ZlcnMsCisgKiB3aGljaCBpcyBmYXN0IGVub3VnaCBmb3IgMjQwMCBiYXVkIGFuZCBhbGxvd3MgYSBzbWFsbCBhZGRpdGlvbmFsIGxvYWQuCisgKiBJbmNyZWFzZSB0aGUgaW50ZXJ2YWwgdG8gYWxsb3cgbW9yZSBkZXZpY2VzIHRoYXQgZG8gaW50ZXJydXB0IHRyYW5zZmVycywKKyAqIG9yIHNldCB0byAwIHRvIHVzZSB0aGUgc3RhbmRhcmQgaW50ZXJ2YWwgZnJvbSB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMuCisgKi8KK3N0YXRpYyBpbnQgaW50ZXJydXB0X2luX2ludGVydmFsID0gMjsKK21vZHVsZV9wYXJhbShpbnRlcnJ1cHRfaW5faW50ZXJ2YWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGludGVycnVwdF9pbl9pbnRlcnZhbCwgIkludGVycnVwdCBpbiBpbnRlcnZhbCBpbiBtcyIpOworCitzdGF0aWMgaW50IGludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSA4OworbW9kdWxlX3BhcmFtKGludGVycnVwdF9vdXRfaW50ZXJ2YWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGludGVycnVwdF9vdXRfaW50ZXJ2YWwsICJJbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7CisKKy8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KKyNkZWZpbmUgTEVHT19VU0JfVE9XRVJfVkVORE9SX0lECTB4MDY5NAorI2RlZmluZSBMRUdPX1VTQl9UT1dFUl9QUk9EVUNUX0lECTB4MDAwMQorCisvKiBWZW5kb3IgcmVxdWVzdHMgKi8KKyNkZWZpbmUgTEVHT19VU0JfVE9XRVJfUkVRVUVTVF9SRVNFVAkJMHgwNAorI2RlZmluZSBMRUdPX1VTQl9UT1dFUl9SRVFVRVNUX0dFVF9WRVJTSU9OCTB4RkQKKworc3RydWN0IHRvd2VyX3Jlc2V0X3JlcGx5IHsKKwlfX2xlMTYgc2l6ZTsJCS8qIGxpdHRsZS1lbmRpYW4gKi8KKwlfX3U4IGVycl9jb2RlOworCV9fdTggc3BhcmU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHRvd2VyX2dldF92ZXJzaW9uX3JlcGx5IHsKKwlfX2xlMTYgc2l6ZTsJCS8qIGxpdHRsZS1lbmRpYW4gKi8KKwlfX3U4IGVycl9jb2RlOworCV9fdTggc3BhcmU7CisJX191OCBtYWpvcjsKKwlfX3U4IG1pbm9yOworCV9fbGUxNiBidWlsZF9ubzsJCS8qIGxpdHRsZS1lbmRpYW4gKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0b3dlcl90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoTEVHT19VU0JfVE9XRVJfVkVORE9SX0lELCBMRUdPX1VTQl9UT1dFUl9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdG93ZXJfdGFibGUpOworCisjZGVmaW5lIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UJMTYwCisKKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBsZWdvX3VzYl90b3dlciB7CisJc3RydWN0IHNlbWFwaG9yZQlzZW07CQkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlKgl1ZGV2OwkJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXVuc2lnbmVkIGNoYXIJCW1pbm9yOwkJLyogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UgKi8KKworCWludAkJCW9wZW5fY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCisKKwljaGFyKgkJCXJlYWRfYnVmZmVyOworCXNpemVfdAkJCXJlYWRfYnVmZmVyX2xlbmd0aDsgLyogdGhpcyBtdWNoIGNhbWUgaW4gKi8KKwlzaXplX3QJCQlyZWFkX3BhY2tldF9sZW5ndGg7IC8qIHRoaXMgbXVjaCB3aWxsIGJlIHJldHVybmVkIG9uIHJlYWQgKi8KKwlzcGlubG9ja190CQlyZWFkX2J1ZmZlcl9sb2NrOworCWludAkJCXBhY2tldF90aW1lb3V0X2ppZmZpZXM7CisJdW5zaWduZWQgbG9uZwkJcmVhZF9sYXN0X2Fycml2YWw7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKKworCWNoYXIqCQkJaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9pbl9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiKgkJaW50ZXJydXB0X2luX3VyYjsKKwlpbnQJCQlpbnRlcnJ1cHRfaW5faW50ZXJ2YWw7CisJaW50CQkJaW50ZXJydXB0X2luX3J1bm5pbmc7CisJaW50CQkJaW50ZXJydXB0X2luX2RvbmU7CisKKwljaGFyKgkJCWludGVycnVwdF9vdXRfYnVmZmVyOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X291dF9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiKgkJaW50ZXJydXB0X291dF91cmI7CisJaW50CQkJaW50ZXJydXB0X291dF9pbnRlcnZhbDsKKwlpbnQJCQlpbnRlcnJ1cHRfb3V0X2J1c3k7CisKK307CisKKworLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIHNzaXplX3QgdG93ZXJfcmVhZAkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKK3N0YXRpYyBzc2l6ZV90IHRvd2VyX3dyaXRlCShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIGlubGluZSB2b2lkIHRvd2VyX2RlbGV0ZSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYpOworc3RhdGljIGludCB0b3dlcl9vcGVuCQkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCB0b3dlcl9yZWxlYXNlCShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdW5zaWduZWQgaW50IHRvd2VyX3BvbGwJKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKK3N0YXRpYyBsb2ZmX3QgdG93ZXJfbGxzZWVrCShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSk7CisKK3N0YXRpYyB2b2lkIHRvd2VyX2Fib3J0X3RyYW5zZmVycyAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYpOworc3RhdGljIHZvaWQgdG93ZXJfY2hlY2tfZm9yX3JlYWRfcGFja2V0IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldik7CitzdGF0aWMgdm9pZCB0b3dlcl9pbnRlcnJ1cHRfaW5fY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgdG93ZXJfaW50ZXJydXB0X291dF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBpbnQgIHRvd2VyX3Byb2JlCShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgdG93ZXJfZGlzY29ubmVjdAkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKKworLyogcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCAqLworc3RhdGljIERFQ0xBUkVfTVVURVggKGRpc2Nvbm5lY3Rfc2VtKTsKKworLyogZmlsZSBvcGVyYXRpb25zIG5lZWRlZCB3aGVuIHdlIHJlZ2lzdGVyIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0b3dlcl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5yZWFkICA9CXRvd2VyX3JlYWQsCisJLndyaXRlID0JdG93ZXJfd3JpdGUsCisJLm9wZW4gPQkJdG93ZXJfb3BlbiwKKwkucmVsZWFzZSA9CXRvd2VyX3JlbGVhc2UsCisJLnBvbGwgPQkJdG93ZXJfcG9sbCwKKwkubGxzZWVrID0JdG93ZXJfbGxzZWVrLAorfTsKKworLyoKKyAqIHVzYiBjbGFzcyBkcml2ZXIgaW5mbyBpbiBvcmRlciB0byBnZXQgYSBtaW5vciBudW1iZXIgZnJvbSB0aGUgdXNiIGNvcmUsCisgKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCBkZXZmcyBhbmQgdGhlIGRyaXZlciBjb3JlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB0b3dlcl9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL2xlZ291c2J0b3dlciVkIiwKKwkuZm9wcyA9CQkmdG93ZXJfZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEgsCisJLm1pbm9yX2Jhc2UgPQlMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFLAorfTsKKworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdG93ZXJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJsZWdvdXNidG93ZXIiLAorCS5wcm9iZSA9CXRvd2VyX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdG93ZXJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl0b3dlcl90YWJsZSwKK307CisKKworLyoqCisgKglsZWdvX3VzYl90b3dlcl9kZWJ1Z19kYXRhCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWdvX3VzYl90b3dlcl9kZWJ1Z19kYXRhIChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgc2l6ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWlmIChkZWJ1ZyA8IGxldmVsKQorCQlyZXR1cm47CisKKwlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18iOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgZnVuY3Rpb24sIHNpemUpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKwkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKKwl9CisJcHJpbnRrICgiXG4iKTsKK30KKworCisvKioKKyAqCXRvd2VyX2RlbGV0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdG93ZXJfZGVsZXRlIChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldikKK3sKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwl0b3dlcl9hYm9ydF90cmFuc2ZlcnMgKGRldik7CisKKwkvKiBmcmVlIGRhdGEgc3RydWN0dXJlcyAqLworCWlmIChkZXYtPmludGVycnVwdF9pbl91cmIgIT0gTlVMTCkgeworCQl1c2JfZnJlZV91cmIgKGRldi0+aW50ZXJydXB0X2luX3VyYik7CisJfQorCWlmIChkZXYtPmludGVycnVwdF9vdXRfdXJiICE9IE5VTEwpIHsKKwkJdXNiX2ZyZWVfdXJiIChkZXYtPmludGVycnVwdF9vdXRfdXJiKTsKKwl9CisJa2ZyZWUgKGRldi0+cmVhZF9idWZmZXIpOworCWtmcmVlIChkZXYtPmludGVycnVwdF9pbl9idWZmZXIpOworCWtmcmVlIChkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyKTsKKwlrZnJlZSAoZGV2KTsKKworCWRiZygyLCAiJXM6IGxlYXZlIiwgX19GVU5DVElPTl9fKTsKK30KKworCisvKioKKyAqCXRvd2VyX29wZW4KKyAqLworc3RhdGljIGludCB0b3dlcl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldiA9IE5VTEw7CisJaW50IHN1Ym1pbm9yOworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHRvd2VyX3Jlc2V0X3JlcGx5IHJlc2V0X3JlcGx5OworCWludCByZXN1bHQ7CisKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKwlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlkb3duICgmZGlzY29ubmVjdF9zZW0pOworCisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlICgmdG93ZXJfZHJpdmVyLCBzdWJtaW5vcik7CisKKwlpZiAoIWludGVyZmFjZSkgeworCQllcnIgKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3VibWlub3IpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIHVubG9ja19kaXNjb25uZWN0X2V4aXQ7CisJfQorCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKCFkZXYpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2tfZGlzY29ubmVjdF9leGl0OworCX0KKworCS8qIGxvY2sgdGhpcyBkZXZpY2UgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGV2LT5zZW0pKSB7CisJICAgICAgICByZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gdW5sb2NrX2Rpc2Nvbm5lY3RfZXhpdDsKKwl9CisKKwkvKiBhbGxvdyBvcGVuaW5nIG9ubHkgb25jZSAqLworCWlmIChkZXYtPm9wZW5fY291bnQpIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKwlkZXYtPm9wZW5fY291bnQgPSAxOworCisJLyogcmVzZXQgdGhlIHRvd2VyICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsCisJCQkJICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCQkgIExFR09fVVNCX1RPV0VSX1JFUVVFU1RfUkVTRVQsCisJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkgIDAsCisJCQkJICAwLAorCQkJCSAgJnJlc2V0X3JlcGx5LAorCQkJCSAgc2l6ZW9mKHJlc2V0X3JlcGx5KSwKKwkJCQkgIDEwMDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWVycigiTEVHTyBVU0IgVG93ZXIgcmVzZXQgY29udHJvbCByZXF1ZXN0IGZhaWxlZCIpOworCQlyZXR2YWwgPSByZXN1bHQ7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogaW5pdGlhbGl6ZSBpbiBkaXJlY3Rpb24gKi8KKwlkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCA9IDA7CisJZGV2LT5yZWFkX3BhY2tldF9sZW5ndGggPSAwOworCXVzYl9maWxsX2ludF91cmIgKGRldi0+aW50ZXJydXB0X2luX3VyYiwKKwkJCSAgZGV2LT51ZGV2LAorCQkJICB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJICBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpLAorCQkJICB0b3dlcl9pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssCisJCQkgIGRldiwKKwkJCSAgZGV2LT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwpOworCisJZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyA9IDE7CisJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDA7CisJbWIoKTsKKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChkZXYtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X2luX3VyYiAlZCIsIHJldHZhbCk7CisJCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAwOworCQlkZXYtPm9wZW5fY291bnQgPSAwOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCS8qIHNhdmUgZGV2aWNlIGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisKK3VubG9ja19leGl0OgorCXVwICgmZGV2LT5zZW0pOworCit1bmxvY2tfZGlzY29ubmVjdF9leGl0OgorCXVwICgmZGlzY29ubmVjdF9zZW0pOworCisJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCAiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqCXRvd2VyX3JlbGVhc2UKKyAqLworc3RhdGljIGludCB0b3dlcl9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCWRldiA9IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGJnKDEsICIlczogb2JqZWN0IGlzIE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRldi0+c2VtKSkgeworCSAgICAgICAgcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRldi0+b3Blbl9jb3VudCAhPSAxKSB7CisJCWRiZygxLCAiJXM6IGRldmljZSBub3Qgb3BlbmVkIGV4YWN0bHkgb25jZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCWlmIChkZXYtPnVkZXYgPT0gTlVMTCkgeworCQkvKiB0aGUgZGV2aWNlIHdhcyB1bnBsdWdnZWQgYmVmb3JlIHRoZSBmaWxlIHdhcyByZWxlYXNlZCAqLworCQl1cCAoJmRldi0+c2VtKTsJLyogdW5sb2NrIGhlcmUgYXMgdG93ZXJfZGVsZXRlIGZyZWVzIGRldiAqLworCQl0b3dlcl9kZWxldGUgKGRldik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiB3YWl0IHVudGlsIHdyaXRlIHRyYW5zZmVyIGlzIGZpbmlzaGVkICovCisJaWYgKGRldi0+aW50ZXJydXB0X291dF9idXN5KSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IChkZXYtPndyaXRlX3dhaXQsICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSwgMiAqIEhaKTsKKwl9CisJdG93ZXJfYWJvcnRfdHJhbnNmZXJzIChkZXYpOworCWRldi0+b3Blbl9jb3VudCA9IDA7CisKK3VubG9ja19leGl0OgorCXVwICgmZGV2LT5zZW0pOworCitleGl0OgorCWRiZygyLCAiJXM6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioKKyAqCXRvd2VyX2Fib3J0X3RyYW5zZmVycworICogICAgICBhYm9ydHMgdHJhbnNmZXJzIGFuZCBmcmVlcyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcworICovCitzdGF0aWMgdm9pZCB0b3dlcl9hYm9ydF90cmFuc2ZlcnMgKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2KQoreworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkYmcoMSwgIiVzOiBkZXYgaXMgbnVsbCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBzaHV0ZG93biB0cmFuc2ZlciAqLworCWlmIChkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nKSB7CisJCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAwOworCQltYigpOworCQlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiICE9IE5VTEwgJiYgZGV2LT51ZGV2KSB7CisJCQl1c2Jfa2lsbF91cmIgKGRldi0+aW50ZXJydXB0X2luX3VyYik7CisJCX0KKwl9CisJaWYgKGRldi0+aW50ZXJydXB0X291dF9idXN5KSB7CisJCWlmIChkZXYtPmludGVycnVwdF9vdXRfdXJiICE9IE5VTEwgJiYgZGV2LT51ZGV2KSB7CisJCQl1c2Jfa2lsbF91cmIgKGRldi0+aW50ZXJydXB0X291dF91cmIpOworCQl9CisJfQorCitleGl0OgorCWRiZygyLCAiJXM6IGxlYXZlIiwgX19GVU5DVElPTl9fKTsKK30KKworCisvKioKKyAqCXRvd2VyX2NoZWNrX2Zvcl9yZWFkX3BhY2tldAorICoKKyAqICAgICAgVG8gZ2V0IGNvcnJlY3Qgc2VtYW50aWNzIGZvciBzaWduYWxzIGFuZCBub24tYmxvY2tpbmcgSS9PCisgKiAgICAgIHdpdGggcGFja2V0aXppbmcgd2UgcHJldGVuZCBub3QgdG8gc2VlIGFueSBkYXRhIGluIHRoZSByZWFkIGJ1ZmZlcgorICogICAgICB1bnRpbCBpdCBoYXMgYmVlbiB0aGVyZSB1bmNoYW5nZWQgZm9yIGF0IGxlYXN0CisgKiAgICAgIGRldi0+cGFja2V0X3RpbWVvdXRfamlmZmllcywgb3IgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsLgorICovCitzdGF0aWMgdm9pZCB0b3dlcl9jaGVja19mb3JfcmVhZF9wYWNrZXQgKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2KQoreworCXNwaW5fbG9ja19pcnEgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworCWlmICghcGFja2V0X3RpbWVvdXQKKwkgICAgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBkZXYtPnJlYWRfbGFzdF9hcnJpdmFsICsgZGV2LT5wYWNrZXRfdGltZW91dF9qaWZmaWVzKQorCSAgICB8fCBkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCA9PSByZWFkX2J1ZmZlcl9zaXplKSB7CisJCWRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoID0gZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGg7CisJfQorCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOworCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7Cit9CisKKworLyoqCisgKgl0b3dlcl9wb2xsCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG93ZXJfcG9sbCAoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXY7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcG9sbF93YWl0KGZpbGUsICZkZXYtPnJlYWRfd2FpdCwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGUsICZkZXYtPndyaXRlX3dhaXQsIHdhaXQpOworCisJdG93ZXJfY2hlY2tfZm9yX3JlYWRfcGFja2V0KGRldik7CisJaWYgKGRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoID4gMCkgeworCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJfQorCWlmICghZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpIHsKKwkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwl9CisKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgbWFzayA9ICVkIiwgX19GVU5DVElPTl9fLCBtYXNrKTsKKworCXJldHVybiBtYXNrOworfQorCisKKy8qKgorICoJdG93ZXJfbGxzZWVrCisgKi8KK3N0YXRpYyBsb2ZmX3QgdG93ZXJfbGxzZWVrIChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKK3sKKwlyZXR1cm4gLUVTUElQRTsJCS8qIHVuc2Vla2FibGUgKi8KK30KKworCisvKioKKyAqCXRvd2VyX3JlYWQKKyAqLworc3RhdGljIHNzaXplX3QgdG93ZXJfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2OworCXNpemVfdCBieXRlc190b19yZWFkOworCWludCBpOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisKKwlkYmcoMiwgIiVzOiBlbnRlciwgY291bnQgPSAlWmQiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKworCWRldiA9IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRldi0+c2VtKSkgeworCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KKwlpZiAoZGV2LT51ZGV2ID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZXJyKCJObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZCIsIHJldHZhbCk7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gcmVhZCAqLworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygxLCAiJXM6IHJlYWQgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwlpZiAocmVhZF90aW1lb3V0KSB7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgcmVhZF90aW1lb3V0ICogSFogLyAxMDAwOworCX0KKworCS8qIHdhaXQgZm9yIGRhdGEgKi8KKwl0b3dlcl9jaGVja19mb3JfcmVhZF9wYWNrZXQgKGRldik7CisJd2hpbGUgKGRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoID09IDApIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPnJlYWRfd2FpdCwgZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSwgZGV2LT5wYWNrZXRfdGltZW91dF9qaWZmaWVzKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CisJCX0KKworCQkvKiByZXNldCByZWFkIHRpbWVvdXQgZHVyaW5nIHJlYWQgb3Igd3JpdGUgYWN0aXZpdHkgKi8KKwkJaWYgKHJlYWRfdGltZW91dAorCQkgICAgJiYgKGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoIHx8IGRldi0+aW50ZXJydXB0X291dF9idXN5KSkgeworCQkJdGltZW91dCA9IGppZmZpZXMgKyByZWFkX3RpbWVvdXQgKiBIWiAvIDEwMDA7CisJCX0KKwkJLyogY2hlY2sgZm9yIHJlYWQgdGltZW91dCAqLworCQlpZiAocmVhZF90aW1lb3V0ICYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlyZXR2YWwgPSAtRVRJTUVET1VUOworCQkJZ290byB1bmxvY2tfZXhpdDsKKwkJfQorCQl0b3dlcl9jaGVja19mb3JfcmVhZF9wYWNrZXQgKGRldik7CisJfQorCisJLyogY29weSB0aGUgZGF0YSBmcm9tIHJlYWRfYnVmZmVyIGludG8gdXNlcnNwYWNlICovCisJYnl0ZXNfdG9fcmVhZCA9IG1pbihjb3VudCwgZGV2LT5yZWFkX3BhY2tldF9sZW5ndGgpOworCisJaWYgKGNvcHlfdG9fdXNlciAoYnVmZmVyLCBkZXYtPnJlYWRfYnVmZmVyLCBieXRlc190b19yZWFkKSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCXNwaW5fbG9ja19pcnEgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworCWRldi0+cmVhZF9idWZmZXJfbGVuZ3RoIC09IGJ5dGVzX3RvX3JlYWQ7CisJZGV2LT5yZWFkX3BhY2tldF9sZW5ndGggLT0gYnl0ZXNfdG9fcmVhZDsKKwlmb3IgKGk9MDsgaTxkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aDsgaSsrKSB7CisJCWRldi0+cmVhZF9idWZmZXJbaV0gPSBkZXYtPnJlYWRfYnVmZmVyW2krYnl0ZXNfdG9fcmVhZF07CisJfQorCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7CisKKwlyZXR2YWwgPSBieXRlc190b19yZWFkOworCit1bmxvY2tfZXhpdDoKKwkvKiB1bmxvY2sgdGhlIGRldmljZSAqLworCXVwICgmZGV2LT5zZW0pOworCitleGl0OgorCWRiZygyLCAiJXM6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioKKyAqCXRvd2VyX3dyaXRlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHRvd2VyX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXY7CisJc2l6ZV90IGJ5dGVzX3RvX3dyaXRlOworCWludCByZXR2YWwgPSAwOworCisJZGJnKDIsICIlczogZW50ZXIsIGNvdW50ID0gJVpkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisKKwlkZXYgPSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkZXYtPnNlbSkpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCisJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHdyaXRlICovCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKDEsICIlczogd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwkvKiB3YWl0IHVudGlsIHByZXZpb3VzIHRyYW5zZmVyIGlzIGZpbmlzaGVkICovCisJd2hpbGUgKGRldi0+aW50ZXJydXB0X291dF9idXN5KSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CisJCX0KKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChkZXYtPndyaXRlX3dhaXQsICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CisJCX0KKwl9CisKKwkvKiB3cml0ZSB0aGUgZGF0YSBpbnRvIGludGVycnVwdF9vdXRfYnVmZmVyIGZyb20gdXNlcnNwYWNlICovCisJYnl0ZXNfdG9fd3JpdGUgPSBtaW5fdChpbnQsIGNvdW50LCB3cml0ZV9idWZmZXJfc2l6ZSk7CisJZGJnKDQsICIlczogY291bnQgPSAlWmQsIGJ5dGVzX3RvX3dyaXRlID0gJVpkIiwgX19GVU5DVElPTl9fLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOworCisJaWYgKGNvcHlfZnJvbV91c2VyIChkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLCBidWZmZXIsIGJ5dGVzX3RvX3dyaXRlKSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCS8qIHNlbmQgb2ZmIHRoZSB1cmIgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X291dF91cmIsCisJCQkgZGV2LT51ZGV2LAorCQkJIHVzYl9zbmRpbnRwaXBlKGRldi0+dWRldiwgZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLAorCQkJIGJ5dGVzX3RvX3dyaXRlLAorCQkJIHRvd2VyX2ludGVycnVwdF9vdXRfY2FsbGJhY2ssCisJCQkgZGV2LAorCQkJIGRldi0+aW50ZXJydXB0X291dF9pbnRlcnZhbCk7CisKKwlkZXYtPmludGVycnVwdF9vdXRfYnVzeSA9IDE7CisJd21iKCk7CisKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlkZXYtPmludGVycnVwdF9vdXRfYnVzeSA9IDA7CisJCWVycigiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9vdXRfdXJiICVkIiwgcmV0dmFsKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisJcmV0dmFsID0gYnl0ZXNfdG9fd3JpdGU7CisKK3VubG9ja19leGl0OgorCS8qIHVubG9jayB0aGUgZGV2aWNlICovCisJdXAgKCZkZXYtPnNlbSk7CisKK2V4aXQ6CisJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqCisgKgl0b3dlcl9pbnRlcnJ1cHRfaW5fY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgdG93ZXJfaW50ZXJydXB0X2luX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKXVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJZGJnKDQsICIlczogZW50ZXIsIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCisJbGVnb191c2JfdG93ZXJfZGVidWdfZGF0YSg1LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCSAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgeworCQkJZ290byBleGl0OworCQl9IGVsc2UgeworCQkJZGJnKDEsICIlczogbm9uemVybyBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCQlnb3RvIHJlc3VibWl0OyAvKiBtYXliZSB3ZSBjYW4gcmVjb3ZlciAqLworCQl9CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKKwkJc3Bpbl9sb2NrICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKKwkJaWYgKGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoICsgdXJiLT5hY3R1YWxfbGVuZ3RoIDwgcmVhZF9idWZmZXJfc2l6ZSkgeworCQkJbWVtY3B5IChkZXYtPnJlYWRfYnVmZmVyICsgZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGgsCisJCQkJZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQlkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlkZXYtPnJlYWRfbGFzdF9hcnJpdmFsID0gamlmZmllczsKKwkJCWRiZygzLCAiJXM6IHJlY2VpdmVkICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlYWRfYnVmZmVyIG92ZXJmbG93LCAlZCBieXRlcyBkcm9wcGVkIiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl9CisJCXNwaW5fdW5sb2NrICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKKwl9CisKK3Jlc3VibWl0OgorCS8qIHJlc3VibWl0IGlmIHdlJ3JlIHN0aWxsIHJ1bm5pbmcgKi8KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyAmJiBkZXYtPnVkZXYpIHsKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCAoJWQpIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQl9CisJfQorCitleGl0OgorCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAxOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJmRldi0+cmVhZF93YWl0KTsKKworCWxlZ29fdXNiX3Rvd2VyX2RlYnVnX2RhdGEoNSwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlkYmcoNCwgIiVzOiBsZWF2ZSwgc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Cit9CisKKworLyoqCisgKgl0b3dlcl9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrCisgKi8KK3N0YXRpYyB2b2lkIHRvd2VyX2ludGVycnVwdF9vdXRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYgPSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICopdXJiLT5jb250ZXh0OworCisJZGJnKDQsICIlczogZW50ZXIsIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCWxlZ29fdXNiX3Rvd2VyX2RlYnVnX2RhdGEoNSwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCS8qIHN5bmMvYXN5bmMgdW5saW5rIGZhdWx0cyBhcmVuJ3QgZXJyb3JzICovCisJaWYgKHVyYi0+c3RhdHVzICYmICEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkJICAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCQkJICAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgeworCQlkYmcoMSwgIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kgPSAwOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53cml0ZV93YWl0KTsKKworCWxlZ29fdXNiX3Rvd2VyX2RlYnVnX2RhdGEoNSwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlkYmcoNCwgIiVzOiBsZWF2ZSwgc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Cit9CisKKworLyoqCisgKgl0b3dlcl9wcm9iZQorICoKKyAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCisgKgl0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgorICovCitzdGF0aWMgaW50IHRvd2VyX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBlbmRwb2ludDsKKwlzdHJ1Y3QgdG93ZXJfZ2V0X3ZlcnNpb25fcmVwbHkgZ2V0X3ZlcnNpb25fcmVwbHk7CisJaW50IGk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IHJlc3VsdDsKKworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1ZGV2ID09IE5VTEwpIHsKKwkJaW5mbyAoInVkZXYgaXMgTlVMTC4iKTsKKwl9CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLworCisJZGV2ID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBsZWdvX3VzYl90b3dlciksIEdGUF9LRVJORUwpOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVyciAoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBleGl0OworCX0KKworCWluaXRfTVVURVggKCZkZXYtPnNlbSk7CisKKwlkZXYtPnVkZXYgPSB1ZGV2OworCWRldi0+b3Blbl9jb3VudCA9IDA7CisKKwlkZXYtPnJlYWRfYnVmZmVyID0gTlVMTDsKKwlkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCA9IDA7CisJZGV2LT5yZWFkX3BhY2tldF9sZW5ndGggPSAwOworCXNwaW5fbG9ja19pbml0ICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKKwlkZXYtPnBhY2tldF90aW1lb3V0X2ppZmZpZXMgPSBwYWNrZXRfdGltZW91dCAqIEhaIC8gMTAwMDsKKwlkZXYtPnJlYWRfbGFzdF9hcnJpdmFsID0gamlmZmllczsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZkZXYtPnJlYWRfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCAoJmRldi0+d3JpdGVfd2FpdCk7CisKKwlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPSBOVUxMOworCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50ID0gTlVMTDsKKwlkZXYtPmludGVycnVwdF9pbl91cmIgPSBOVUxMOworCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAwOworCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOworCisJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IE5VTEw7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID0gTlVMTDsKKwlkZXYtPmludGVycnVwdF9vdXRfdXJiID0gTlVMTDsKKwlkZXYtPmludGVycnVwdF9vdXRfYnVzeSA9IDA7CisKKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTikgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSB7CisJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludCA9IGVuZHBvaW50OworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA9IGVuZHBvaW50OworCQl9CisJfQorCWlmKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50ID09IE5VTEwpIHsKKwkJZXJyKCJpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgbm90IGZvdW5kIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPT0gTlVMTCkgeworCQllcnIoImludGVycnVwdCBvdXQgZW5kcG9pbnQgbm90IGZvdW5kIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGV2LT5yZWFkX2J1ZmZlciA9IGttYWxsb2MgKHJlYWRfYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yZWFkX2J1ZmZlcikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHJlYWRfYnVmZmVyIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9IGttYWxsb2MgKGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7CisJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X2luX2J1ZmZlciIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmludGVycnVwdF9pbl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CisJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X2luX3VyYiIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyID0ga21hbGxvYyAod3JpdGVfYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfYnVmZmVyIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+aW50ZXJydXB0X291dF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfdXJiIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsID0gaW50ZXJydXB0X2luX2ludGVydmFsID8gaW50ZXJydXB0X2luX2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwlkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBpbnRlcnJ1cHRfb3V0X2ludGVydmFsID8gaW50ZXJydXB0X291dF9pbnRlcnZhbCA6IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+YkludGVydmFsOworCisJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgZGV2KTsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYgKGludGVyZmFjZSwgJnRvd2VyX2NsYXNzKTsKKworCWlmIChyZXR2YWwpIHsKKwkJLyogc29tZXRoaW5nIHByZXZlbnRlZCB1cyBmcm9tIHJlZ2lzdGVyaW5nIHRoaXMgZHJpdmVyICovCisJCWVyciAoIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS4iKTsKKwkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5taW5vciA9IGludGVyZmFjZS0+bWlub3I7CisKKwkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCisJaW5mbyAoIkxFR08gVVNCIFRvd2VyICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWQiLCAoZGV2LT5taW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGRldi0+bWlub3IpOworCisJLyogZ2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBsb2cgaXQgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsCisJCQkJICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkJICBMRUdPX1VTQl9UT1dFUl9SRVFVRVNUX0dFVF9WRVJTSU9OLAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJICAwLAorCQkJCSAgMCwKKwkJCQkgICZnZXRfdmVyc2lvbl9yZXBseSwKKwkJCQkgIHNpemVvZihnZXRfdmVyc2lvbl9yZXBseSksCisJCQkJICAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoIkxFR08gVVNCIFRvd2VyIGdldCB2ZXJzaW9uIGNvbnRyb2wgcmVxdWVzdCBmYWlsZWQiKTsKKwkJcmV0dmFsID0gcmVzdWx0OworCQlnb3RvIGVycm9yOworCX0KKwlpbmZvKCJMRUdPIFVTQiBUb3dlciBmaXJtd2FyZSB2ZXJzaW9uIGlzICVkLiVkIGJ1aWxkICVkIiwKKwkgICAgIGdldF92ZXJzaW9uX3JlcGx5Lm1ham9yLAorCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWlub3IsCisJICAgICBsZTE2X3RvX2NwdShnZXRfdmVyc2lvbl9yZXBseS5idWlsZF9ubykpOworCisKK2V4aXQ6CisJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAweCUuOGx4IChkZXYpIiwgX19GVU5DVElPTl9fLCAobG9uZykgZGV2KTsKKworCXJldHVybiByZXR2YWw7CisKK2Vycm9yOgorCXRvd2VyX2RlbGV0ZShkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqCisgKgl0b3dlcl9kaXNjb25uZWN0CisgKgorICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCisgKi8KK3N0YXRpYyB2b2lkIHRvd2VyX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXY7CisJaW50IG1pbm9yOworCisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJZG93biAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKworCisJZG93biAoJmRldi0+c2VtKTsKKworCW1pbm9yID0gZGV2LT5taW5vcjsKKworCS8qIGdpdmUgYmFjayBvdXIgbWlub3IgKi8KKwl1c2JfZGVyZWdpc3Rlcl9kZXYgKGludGVyZmFjZSwgJnRvd2VyX2NsYXNzKTsKKworCS8qIGlmIHRoZSBkZXZpY2UgaXMgbm90IG9wZW5lZCwgdGhlbiB3ZSBjbGVhbiB1cCByaWdodCBub3cgKi8KKwlpZiAoIWRldi0+b3Blbl9jb3VudCkgeworCQl1cCAoJmRldi0+c2VtKTsKKwkJdG93ZXJfZGVsZXRlIChkZXYpOworCX0gZWxzZSB7CisJCWRldi0+dWRldiA9IE5VTEw7CisJCXVwICgmZGV2LT5zZW0pOworCX0KKworCXVwICgmZGlzY29ubmVjdF9zZW0pOworCisJaW5mbygiTEVHTyBVU0IgVG93ZXIgIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCAobWlub3IgLSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFKSk7CisKKwlkYmcoMiwgIiVzOiBsZWF2ZSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworCisvKioKKyAqCWxlZ29fdXNiX3Rvd2VyX2luaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgbGVnb191c2JfdG93ZXJfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisJaW50IHJldHZhbCA9IDA7CisKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ0b3dlcl9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICJfX0ZJTEVfXyIgZHJpdmVyLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCQlyZXR2YWwgPSAtMTsKKwkJZ290byBleGl0OworCX0KKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworZXhpdDoKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioKKyAqCWxlZ29fdXNiX3Rvd2VyX2V4aXQKKyAqLworc3RhdGljIHZvaWQgX19leGl0IGxlZ29fdXNiX3Rvd2VyX2V4aXQodm9pZCkKK3sKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlciAoJnRvd2VyX2RyaXZlcik7CisKKwlkYmcoMiwgIiVzOiBsZWF2ZSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK21vZHVsZV9pbml0IChsZWdvX3VzYl90b3dlcl9pbml0KTsKK21vZHVsZV9leGl0IChsZWdvX3VzYl90b3dlcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CisjaWZkZWYgTU9EVUxFX0xJQ0VOU0UKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGJmOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBVU0IgUGhpZGdldEludGVyZmFjZUtpdCBkcml2ZXIgMS4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBVU0IgUGhpZGdldEludGVyZmFjZUtpdC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgRHJpdmVyIgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDA0CTB4MDA0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OAkweDAwNDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwNDcJMHgwMDUxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDg4CTB4MDA1MworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0lTRUdST1VQCQkweDA5MjUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODQJMHg4MjAxCisKKyNkZWZpbmUgTUFYX0lOVEVSRkFDRVMJCQk4CisKK3N0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHsKKwlpbnQgc2Vuc29yczsKKwlpbnQgaW5wdXRzOworCWludCBvdXRwdXRzOworCWludCBoYXNfbGNkOworfTsKKyNkZWZpbmUgaWZraXQoX3NlbnNvcnMsIF9pbnB1dHMsIF9vdXRwdXRzLCBfbGNkKQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8jI19zZW5zb3JzIyNfaW5wdXRzIyNfb3V0cHV0cyA9IHsJXAorCS5zZW5zb3JzCT0gX3NlbnNvcnMsCQkJCQlcCisJLmlucHV0cwkJPSBfaW5wdXRzLAkJCQkJXAorCS5vdXRwdXRzCT0gX291dHB1dHMsCQkJCQlcCisJLmhhc19sY2QJPSBfbGNkLAkJCQkJCVwKK307CitpZmtpdCgwLCAwLCA0LCAwKTsKK2lma2l0KDgsIDgsIDgsIDApOworaWZraXQoMCwgNCwgNywgMSk7CitpZmtpdCg4LCA4LCA0LCAwKTsKK2lma2l0KDAsIDgsIDgsIDEpOworCitzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICppZmtpdDsKKwlpbnQgb3V0cHV0c1tNQVhfSU5URVJGQUNFU107CisJaW50IGlucHV0c1tNQVhfSU5URVJGQUNFU107CisJaW50IHNlbnNvcnNbTUFYX0lOVEVSRkFDRVNdOworCXU4IGxjZF9maWxlc19vbjsKKworCXN0cnVjdCB1cmIgKmlycTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDA0KSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wMDR9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4OH0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA0NyksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDQ3fSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDg4KSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF8wODh9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4NCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg0fSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgY2hhbmdlX291dHB1dHMoc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQsIGludCBvdXRwdXRfbnVtLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmV0dmFsOworCWludCBuOworCisJYnVmZmVyID0ga21hbGxvYyg0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtpdC0+b3V0cHV0c1tvdXRwdXRfbnVtXSA9IGVuYWJsZTsKKwltZW1zZXQoYnVmZmVyLCAwLCA0KTsKKwlmb3IgKG49MDsgbjw4OyBuKyspIHsKKwkJaWYgKGtpdC0+b3V0cHV0c1tuXSkgeworCQkJYnVmZmVyWzBdIHw9IDEgPDwgbjsKKwkJfQorCX0KKworCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAic2VuZGluZyBkYXRhOiAlMDJ4XG4iLCBidWZmZXJbMF0pOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKKwkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKKwkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA0LCAyMDAwKTsKKworCWlmIChyZXR2YWwgIT0gNCkKKwkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIAorCQkJCXJldHZhbCk7CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKK30KKworc3RhdGljIGludCBjaGFuZ2Vfc3RyaW5nKHN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0LCBjb25zdCBjaGFyICpkaXNwbGF5LCB1bnNpZ25lZCBjaGFyIHJvdykKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmZvcm1fYnVmZmVyOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCBpLGosIGxlbiwgYnVmX3B0cjsKKwkKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWZvcm1fYnVmZmVyID0ga21hbGxvYygzMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCghYnVmZmVyKSB8fCAoIWZvcm1fYnVmZmVyKSkgeworCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCWxlbiA9IHN0cmxlbihkaXNwbGF5KTsKKwlpZiAobGVuID4gMjApCisJCWxlbiA9IDIwOworCisJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJTZXR0aW5nIExDRCBsaW5lICVkIHRvICVzXG4iLCByb3csIGRpc3BsYXkpOworCisJZm9ybV9idWZmZXJbMF0gPSByb3cgKiAweDQwICsgMHg4MDsKKwlmb3JtX2J1ZmZlclsxXSA9IDB4MDI7CisJYnVmX3B0ciA9IDI7CisJZm9yIChpID0gMDsgaTxsZW47IGkrKykKKwkJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IGRpc3BsYXlbaV07CisKKwlmb3IgKGkgPSAwOyBpIDwgKDIwIC0gbGVuKTsgaSsrKQorCQlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gMHgyMDsKKwlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gMHgwMTsKKwlmb3JtX2J1ZmZlcltidWZfcHRyKytdID0gcm93ICogMHg0MCArIDB4ODAgKyBzdHJsZW4oZGlzcGxheSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3B0cjsgaSArPSA3KSB7CisJCWlmICgoYnVmX3B0ciAtIGkpID4gNykKKwkJCWxlbiA9IDc7CisJCWVsc2UKKwkJCWxlbiA9IChidWZfcHRyIC0gaSk7CisJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCWJ1ZmZlcltqXSA9IGZvcm1fYnVmZmVyW2kgKyBqXTsKKwkJYnVmZmVyWzddID0gbGVuOworCisJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCisJCQkJIHVzYl9zbmRjdHJscGlwZShraXQtPnVkZXYsIDApLAorCQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA4LCAyMDAwKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gMDsKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZShmb3JtX2J1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZGVmaW5lIHNldF9sY2RfbGluZShudW1iZXIpCVwKK3N0YXRpYyBzc2l6ZV90IGxjZF9saW5lXyMjbnVtYmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKK3sJCQkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCQkJXAorCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCisJY2hhbmdlX3N0cmluZyhraXQsIGJ1ZiwgbnVtYmVyIC0gMSk7CQkJCQkJXAorCXJldHVybiBjb3VudDsJCQkJCQkJCQlcCit9CQkJCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobGNkX2xpbmVfIyNudW1iZXIsIFNfSVdVR08sIE5VTEwsIGxjZF9saW5lXyMjbnVtYmVyKTsKK3NldF9sY2RfbGluZSgxKTsKK3NldF9sY2RfbGluZSgyKTsKKworc3RhdGljIHNzaXplX3Qgc2V0X2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgZW5hYmxlZDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlZCkgPCAxKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJbWVtc2V0KGJ1ZmZlciwgMHgwMCwgOCk7CisJaWYgKGVuYWJsZWQpCisJCWJ1ZmZlclswXSA9IDB4MDE7CisJYnVmZmVyWzddID0gMHgxMTsKKworCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBiYWNrbGlnaHQgdG8gJXNcbiIsIGVuYWJsZWQgPyAib24iIDogIm9mZiIpOworCQorCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCisJCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCisJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXhpdDsKKworCXJldHZhbCA9IGNvdW50OworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYmFja2xpZ2h0LCBTX0lXVUdPLCBOVUxMLCBzZXRfYmFja2xpZ2h0KTsKKworc3RhdGljIHZvaWQgcmVtb3ZlX2xjZF9maWxlcyhzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCkKK3sKKwlpZiAoa2l0LT5sY2RfZmlsZXNfb24pIHsKKwkJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJSZW1vdmluZyBsY2QgZmlsZXNcbiIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9sY2RfbGluZV8yKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2JhY2tsaWdodCk7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBlbmFibGVfbGNkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBlbmFibGU7CisJCisJaWYgKGtpdC0+aWZraXQtPmhhc19sY2QgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZSkgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmFibGUpIHsKKwkJaWYgKCFraXQtPmxjZF9maWxlc19vbikgeworCQkJZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJBZGRpbmcgbGNkIGZpbGVzXG4iKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9sY2RfbGluZV8xKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9sY2RfbGluZV8yKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9iYWNrbGlnaHQpOworCQkJa2l0LT5sY2RfZmlsZXNfb24gPSAxOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7CisJCQlyZW1vdmVfbGNkX2ZpbGVzKGtpdCk7CisJCQlraXQtPmxjZF9maWxlc19vbiA9IDA7CisJCX0KKwl9CisJCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGxjZCwgU19JV1VHTywgTlVMTCwgZW5hYmxlX2xjZF9maWxlcyk7CisKK3N0YXRpYyB2b2lkIGludGVyZmFjZWtpdF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBraXQtPmRhdGE7CisJaW50IHN0YXR1czsKKwlpbnQgbjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJZm9yIChuPTA7IG48ODsgbisrKSB7CisJCWtpdC0+aW5wdXRzW25dID0gYnVmZmVyWzFdICYgKDEgPDwgbikgPyAxIDogMDsKKwl9CisKKwlpZiAoYnVmZmVyWzBdICYgMSkgeworCQlraXQtPnNlbnNvcnNbNF0gPSBidWZmZXJbMl0gKyAoYnVmZmVyWzNdICYgMHgwZikgKiAyNTY7CisJCWtpdC0+c2Vuc29yc1s1XSA9IGJ1ZmZlcls0XSArIChidWZmZXJbM10gJiAweGYwKSAqIDE2OworCQlraXQtPnNlbnNvcnNbNl0gPSBidWZmZXJbNV0gKyAoYnVmZmVyWzZdICYgMHgwZikgKiAyNTY7CisJCWtpdC0+c2Vuc29yc1s3XSA9IGJ1ZmZlcls3XSArIChidWZmZXJbNl0gJiAweGYwKSAqIDE2OworCX0gZWxzZSB7CisJCWtpdC0+c2Vuc29yc1swXSA9IGJ1ZmZlclsyXSArIChidWZmZXJbM10gJiAweDBmKSAqIDI1NjsKKwkJa2l0LT5zZW5zb3JzWzFdID0gYnVmZmVyWzRdICsgKGJ1ZmZlclszXSAmIDB4ZjApICogMTY7CisJCWtpdC0+c2Vuc29yc1syXSA9IGJ1ZmZlcls1XSArIChidWZmZXJbNl0gJiAweDBmKSAqIDI1NjsKKwkJa2l0LT5zZW5zb3JzWzNdID0gYnVmZmVyWzddICsgKGJ1ZmZlcls2XSAmIDB4ZjApICogMTY7CisJfQorCityZXN1Ym1pdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2ludGVyZmFjZWtpdDAsIHN0YXR1cyAlZCIsCisJCQlraXQtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQlraXQtPnVkZXYtPmRldnBhdGgsIHN0YXR1cyk7Cit9CisKKyNkZWZpbmUgc2hvd19zZXRfb3V0cHV0KHZhbHVlKQkJXAorc3RhdGljIHNzaXplX3Qgc2V0X291dHB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIAlcCisJCQkJCQkJc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCWludCBlbmFibGVkOwkJCQkJCQlcCisJaW50IHJldHZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlZCkgPCAxKSB7CQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR2YWwgPSBjaGFuZ2Vfb3V0cHV0cyhraXQsIHZhbHVlIC0gMSwgZW5hYmxlZCA/IDEgOiAwKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBjb3VudDsJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X291dHB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGtpdC0+b3V0cHV0c1t2YWx1ZSAtIDFdKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIob3V0cHV0IyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAorCQlzaG93X291dHB1dCMjdmFsdWUsIHNldF9vdXRwdXQjI3ZhbHVlKTsKK3Nob3dfc2V0X291dHB1dCgxKTsKK3Nob3dfc2V0X291dHB1dCgyKTsKK3Nob3dfc2V0X291dHB1dCgzKTsKK3Nob3dfc2V0X291dHB1dCg0KTsKK3Nob3dfc2V0X291dHB1dCg1KTsKK3Nob3dfc2V0X291dHB1dCg2KTsKK3Nob3dfc2V0X291dHB1dCg3KTsKK3Nob3dfc2V0X291dHB1dCg4KTsJLyogc2hvdWxkIGJlIE1BWF9JTlRFUkZBQ0VTIC0gMSAqLworCisjZGVmaW5lIHNob3dfaW5wdXQodmFsdWUpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5wdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBraXQtPmlucHV0c1t2YWx1ZSAtIDFdKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCk7CisKK3Nob3dfaW5wdXQoMSk7CitzaG93X2lucHV0KDIpOworc2hvd19pbnB1dCgzKTsKK3Nob3dfaW5wdXQoNCk7CitzaG93X2lucHV0KDUpOworc2hvd19pbnB1dCg2KTsKK3Nob3dfaW5wdXQoNyk7CitzaG93X2lucHV0KDgpOwkJLyogc2hvdWxkIGJlIE1BWF9JTlRFUkZBQ0VTIC0gMSAqLworCisjZGVmaW5lIHNob3dfc2Vuc29yKHZhbHVlKQlcCitzdGF0aWMgc3NpemVfdCBzaG93X3NlbnNvciMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGtpdC0+c2Vuc29yc1t2YWx1ZSAtIDFdKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIoc2Vuc29yIyN2YWx1ZSwgU19JUlVHTywgc2hvd19zZW5zb3IjI3ZhbHVlLCBOVUxMKTsKKworc2hvd19zZW5zb3IoMSk7CitzaG93X3NlbnNvcigyKTsKK3Nob3dfc2Vuc29yKDMpOworc2hvd19zZW5zb3IoNCk7CitzaG93X3NlbnNvcig1KTsKK3Nob3dfc2Vuc29yKDYpOworc2hvd19zZW5zb3IoNyk7CitzaG93X3NlbnNvcig4KTsJCS8qIHNob3VsZCBiZSBNQVhfSU5URVJGQUNFUyAtIDEgKi8KKworc3RhdGljIGludCBpbnRlcmZhY2VraXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdDsKKwlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7CisJaW50IHBpcGUsIG1heHA7CisKKwlpZmtpdCA9IChzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqKWlkLT5kcml2ZXJfaW5mbzsKKwlpZiAoIWlma2l0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApKSAKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyoKKwkgKiBibUF0dHJpYnV0ZXMKKwkgKi8KKwlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJCisJa2l0ID0ga21hbGxvYyhzaXplb2YoKmtpdCksIEdGUF9LRVJORUwpOworCWlmIChraXQgID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGtpdCwgMCwgc2l6ZW9mKCpraXQpKTsKKwlraXQtPmlma2l0ID0gaWZraXQ7CisKKwlraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgOCwgU0xBQl9BVE9NSUMsICZraXQtPmRhdGFfZG1hKTsKKwlpZiAoIWtpdC0+ZGF0YSkgeworCQlrZnJlZShraXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlraXQtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFraXQtPmlycSkgeworCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCA4LCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOworCQlrZnJlZShraXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlraXQtPnVkZXYgPSB1c2JfZ2V0X2RldihkZXYpOworCWtpdC0+aW50ZiA9IGludGY7CisJdXNiX2ZpbGxfaW50X3VyYihraXQtPmlycSwga2l0LT51ZGV2LCBwaXBlLCBraXQtPmRhdGEsCisJCQkobWF4cCA+IDggPyA4IDogbWF4cCksCisJCQlpbnRlcmZhY2VraXRfaXJxLCBraXQsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCWtpdC0+aXJxLT50cmFuc2Zlcl9kbWEgPSBraXQtPmRhdGFfZG1hOworCWtpdC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2l0KTsKKworCWlmICh1c2Jfc3VibWl0X3VyYihraXQtPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGlma2l0LT5vdXRwdXRzID49IDQpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQxKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQyKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQzKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ0KTsKKwl9CisJaWYgKGlma2l0LT5vdXRwdXRzID09IDgpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ1KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ2KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ3KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ4KTsKKwl9IAorCisJaWYgKGlma2l0LT5pbnB1dHMgPj0gNCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0MSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQyKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDMpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0NCk7CisJfQorCWlmIChpZmtpdC0+aW5wdXRzID09IDgpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDUpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0Nik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ3KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDgpOworCX0KKworCWlmIChpZmtpdC0+c2Vuc29ycyA+PSA0KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMyk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNCk7CisJfQorCWlmIChpZmtpdC0+c2Vuc29ycyA+PSA3KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNyk7CisJfQorCWlmIChpZmtpdC0+c2Vuc29ycyA9PSA4KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yOCk7CisJfQorCisJaWYgKGlma2l0LT5oYXNfbGNkKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2xjZCk7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgYXR0YWNoZWRcbiIsCisJCQlpZmtpdC0+c2Vuc29ycywgaWZraXQtPmlucHV0cywgaWZraXQtPm91dHB1dHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVyZmFjZWtpdF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQ7CisKKwlraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWlmICgha2l0KQorCQlyZXR1cm47CisKKwlpZiAoa2l0LT5pZmtpdC0+b3V0cHV0cyA+PSA0KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQxKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Myk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ0KTsKKwl9CisJaWYgKGtpdC0+aWZraXQtPm91dHB1dHMgPT0gOCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0NSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ2KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDcpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0OCk7CisJfQorCisJaWYgKGtpdC0+aWZraXQtPmlucHV0cyA+PSA0KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0Myk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDQpOworCX0KKwlpZiAoa2l0LT5pZmtpdC0+aW5wdXRzID09IDgpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0NSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDYpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ3KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0OCk7CisJfQorCisJaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMgPj0gNCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjMpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNCk7CisJfQorCWlmIChraXQtPmlma2l0LT5zZW5zb3JzID49IDcpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I3KTsKKwl9CisJaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMgPT0gOCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yOCk7CisJfQorCWlmIChraXQtPmlma2l0LT5oYXNfbGNkKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfbGNkKTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0ICVkLyVkLyVkIGRldGFjaGVkXG4iLAorCQlraXQtPmlma2l0LT5zZW5zb3JzLCBraXQtPmlma2l0LT5pbnB1dHMsIGtpdC0+aWZraXQtPm91dHB1dHMpOworCisJdXNiX2tpbGxfdXJiKGtpdC0+aXJxKTsKKwl1c2JfZnJlZV91cmIoa2l0LT5pcnEpOworCXVzYl9idWZmZXJfZnJlZShraXQtPnVkZXYsIDgsIGtpdC0+ZGF0YSwga2l0LT5kYXRhX2RtYSk7CisKKwl1c2JfcHV0X2RldihraXQtPnVkZXYpOworCWtmcmVlKGtpdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbnRlcmZhY2VraXRfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInBoaWRnZXRraXQiLAorCS5wcm9iZSA9IGludGVyZmFjZWtpdF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGludGVyZmFjZWtpdF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGlkX3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbnRlcmZhY2VraXRfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpbnRlcmZhY2VraXRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW50ZXJmYWNla2l0X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmaW50ZXJmYWNla2l0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGludGVyZmFjZWtpdF9pbml0KTsKK21vZHVsZV9leGl0KGludGVyZmFjZWtpdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmQyOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwpAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIFVTQiBQaGlkZ2V0U2Vydm8gZHJpdmVyIDEuMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFVTQiBQaGlkZ2V0U2Vydm8gdmVyc2lvbiAyLjAgYW5kIDMuMCBzZXJ2byAKKyAqIGNvbnRyb2xsZXJzIGF2YWlsYWJsZSBhdDogaHR0cDovL3d3dy5waGlkZ2V0cy5jb20vIAorICoKKyAqIE5vdGUgdGhhdCB0aGUgZHJpdmVyIHRha2VzIGlucHV0IGFzOiBkZWdyZWVzLm1pbnV0ZXMKKyAqCisgKiBDQVVUSU9OOiBHZW5lcmFsbHkgeW91IHNob3VsZCB1c2UgMCA8IGRlZ3JlZXMgPCAxODAgYXMgYW55dGhpbmcgZWxzZQorICogaXMgcHJvYmFibHkgYmV5b25kIHRoZSByYW5nZSBvZiB5b3VyIHNlcnZvIGFuZCBtYXkgZGFtYWdlIGl0LgorICoKKyAqIEp1biAxNiwgMjAwNDogU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KKyAqICAtIGNsZWFudXBzCisgKiAgLSB3YXMgdXNpbmcgbWVtb3J5IGFmdGVyIGtmcmVlKCkKKyAqIEF1ZyA4LCAyMDA0OiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICogIC0gc2V0IHRoZSBoaWdoZXN0IGFuZ2xlIGFzIGhpZ2ggYXMgdGhlIGhhcmR3YXJlIGFsbG93cywgdGhlcmUgYXJlIAorICogICAgc29tZSBvZGQgc2Vydm9zIG91dCB0aGVyZQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworI2RlZmluZSBERUJVRwkxCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGhpZGdldFNlcnZvIERyaXZlciIKKworI2RlZmluZSBWRU5ET1JfSURfR0xBQgkJCQkweDA2YzIKKyNkZWZpbmUgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1FVQUQJMHgwMDM4CisjZGVmaW5lIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19VTkkJCTB4MDAzOQorCisjZGVmaW5lIFZFTkRPUl9JRF9XSVNFR1JPVVAJCQkweDA5MjUKKyNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fUVVBRAkweDgxMDEKKyNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fVU5JCTB4ODEwNAorCisjZGVmaW5lIFNFUlZPX1ZFUlNJT05fMzAJCQkweDAxCisjZGVmaW5lIFNFUlZPX0NPVU5UX1FVQUQJCQkweDAyCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsKKwkJVVNCX0RFVklDRShWRU5ET1JfSURfR0xBQiwgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1FVQUQpLCAKKwkJLmRyaXZlcl9pbmZvID0gU0VSVk9fVkVSU0lPTl8zMCB8IFNFUlZPX0NPVU5UX1FVQUQgCisJfSwKKwl7CisJCVVTQl9ERVZJQ0UoVkVORE9SX0lEX0dMQUIsIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19VTkkpLAorCQkuZHJpdmVyX2luZm8gPSBTRVJWT19WRVJTSU9OXzMwIAorCX0sCisJeworCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9XSVNFR1JPVVAsIAorCQkJCVZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1FVQUQpLAorCQkuZHJpdmVyX2luZm8gPSBTRVJWT19DT1VOVF9RVUFEIAorCX0sCisJeworCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9XSVNFR1JPVVAsIAorCQkJCVZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1VOSSksCisJCS5kcml2ZXJfaW5mbyA9IDAKKwl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdHJ1Y3QgcGhpZGdldF9zZXJ2byB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJdWxvbmcgdHlwZTsKKwlpbnQgcHVsc2VbNF07CisJaW50IGRlZ3JlZXNbNF07CisJaW50IG1pbnV0ZXNbNF07Cit9OworCitzdGF0aWMgaW50CitjaGFuZ2VfcG9zaXRpb25fdjMwKHN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2bywgaW50IHNlcnZvX25vLCBpbnQgZGVncmVlcywgCisJCQkJCQkJCWludCBtaW51dGVzKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJaWYgKGRlZ3JlZXMgPCAtMjMgfHwgZGVncmVlcyA+IDM2MikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWZmZXIgPSBrbWFsbG9jKDYsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnNlcnZvLT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIHB1bHNlID0gMCAtIDQwOTUKKwkgKiBhbmdsZSA9IDAgLSAxODAgZGVncmVlcworCSAqCisJICogcHVsc2UgPSBhbmdsZSAqIDEwLjYgKyAyNDMuOAkKKwkgKi8KKwlzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dID0gKChkZWdyZWVzKjYwICsgbWludXRlcykqMTA2ICsgMjQzOCo2MCkvNjAwOwkKKwlzZXJ2by0+ZGVncmVlc1tzZXJ2b19ub109IGRlZ3JlZXM7CisJc2Vydm8tPm1pbnV0ZXNbc2Vydm9fbm9dPSBtaW51dGVzOwkKKworCS8qIAorCSAqIFRoZSBQaGlkZ2V0U2Vydm8gdjMuMCBpcyBjb250cm9sbGVkIGJ5IHNlbmRpbmcgNiBieXRlcywKKwkgKiA0ICogMTIgYml0cyBmb3IgZWFjaCBzZXJ2by4KKwkgKgorCSAqIGxvdyA9IGxvd2VyIDggYml0cyBwdWxzZQorCSAqIGhpZ2ggPSBoaWdoZXIgNCBiaXRzIHB1bHNlCisJICoKKwkgKiBvZmZzZXQgICAgIGJpdHMKKwkgKiArLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworCSAqIHwgMCB8ICAgICAgbG93IDAgICAgICB8CisJICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKKwkgKiB8IDEgfCBoaWdoIDEgfCBoaWdoIDAgfAorCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisJICogfCAyIHwgICAgICBsb3cgMSAgICAgIHwKKwkgKiArLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworCSAqIHwgMyB8ICAgICAgbG93IDIgICAgICB8CisJICogKy0tLSstLS0tLS0tLSstLS0tLS0tLSsKKwkgKiB8IDQgfCBoaWdoIDMgfCBoaWdoIDIgfAorCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisJICogfCA1IHwgICAgICBsb3cgMyAgICAgIHwKKwkgKiArLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworCSAqLworCisJYnVmZmVyWzBdID0gc2Vydm8tPnB1bHNlWzBdICYgMHhmZjsKKwlidWZmZXJbMV0gPSAoc2Vydm8tPnB1bHNlWzBdID4+IDggJiAweDBmKQorCSAgICB8IChzZXJ2by0+cHVsc2VbMV0gPj4gNCAmIDB4ZjApOworCWJ1ZmZlclsyXSA9IHNlcnZvLT5wdWxzZVsxXSAmIDB4ZmY7CisJYnVmZmVyWzNdID0gc2Vydm8tPnB1bHNlWzJdICYgMHhmZjsKKwlidWZmZXJbNF0gPSAoc2Vydm8tPnB1bHNlWzJdID4+IDggJiAweDBmKQorCSAgICB8IChzZXJ2by0+cHVsc2VbM10gPj4gNCAmIDB4ZjApOworCWJ1ZmZlcls1XSA9IHNlcnZvLT5wdWxzZVszXSAmIDB4ZmY7CisKKwlkZXZfZGJnKCZzZXJ2by0+dWRldi0+ZGV2LAorCQkiZGF0YTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCWJ1ZmZlclswXSwgYnVmZmVyWzFdLCBidWZmZXJbMl0sCisJCWJ1ZmZlclszXSwgYnVmZmVyWzRdLCBidWZmZXJbNV0pOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcnZvLT51ZGV2LAorCQkJCSB1c2Jfc25kY3RybHBpcGUoc2Vydm8tPnVkZXYsIDApLAorCQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA2LCAyMDAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CitjaGFuZ2VfcG9zaXRpb25fdjIwKHN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2bywgaW50IHNlcnZvX25vLCBpbnQgZGVncmVlcywKKwkJCQkJCQkJaW50IG1pbnV0ZXMpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwlpZiAoZGVncmVlcyA8IC0yMyB8fCBkZWdyZWVzID4gMjc4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2Vycigmc2Vydm8tPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKKwkgKiBwdWxzZSA9IGFuZ2xlICsgMjMKKwkgKi8KKwlzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dPSBkZWdyZWVzICsgMjM7CisJc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOworCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gMDsKKworCS8qCisJICogVGhlIFBoaWRnZXRTZXJ2byB2Mi4wIGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyB0d28gYnl0ZXMuIFRoZQorCSAqIGZpcnN0IGJ5dGUgaXMgdGhlIHNlcnZvIG51bWJlciB4b3InZWQgd2l0aCAyOgorCSAqCisJICogc2Vydm8gMCA9IDIKKwkgKiBzZXJ2byAxID0gMworCSAqIHNlcnZvIDIgPSAwCisJICogc2Vydm8gMyA9IDEKKwkgKgorCSAqIFRoZSBzZWNvbmQgYnl0ZSBpcyB0aGUgcG9zaXRpb24uCisJICovCisKKwlidWZmZXJbMF0gPSBzZXJ2b19ubyBeIDI7CisJYnVmZmVyWzFdID0gc2Vydm8tPnB1bHNlW3NlcnZvX25vXTsKKworCWRldl9kYmcoJnNlcnZvLT51ZGV2LT5kZXYsICJkYXRhOiAlMDJ4ICUwMnhcbiIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKKwkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKKwkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgMiwgMjAwMCk7CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBzaG93X3NldCh2YWx1ZSkJXAorc3RhdGljIHNzaXplX3Qgc2V0X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKK3sJCQkJCQkJCQlcCisJaW50IGRlZ3JlZXMsIG1pbnV0ZXMsIHJldHZhbDsJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UgKGRldik7CQlcCisJc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CQlcCisJCQkJCQkJCQlcCisJbWludXRlcyA9IDA7CQkJCQkJCVwKKwkvKiBtdXN0IGF0IGxlYXN0IGNvbnZlcnQgZGVncmVlcyAqLwkJCQlcCisJaWYgKHNzY2FuZiAoYnVmLCAiJWQuJWQiLCAmZGVncmVlcywgJm1pbnV0ZXMpIDwgMSkgewkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpIAkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc2Vydm8tPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwKQkJCQlcCisJCXJldHZhbCA9IGNoYW5nZV9wb3NpdGlvbl92MzAgKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKKwkJCQkJCQltaW51dGVzKTsJXAorCWVsc2UgCQkJCQkJCQlcCisJCXJldHZhbCA9IGNoYW5nZV9wb3NpdGlvbl92MjAgKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKKwkJCQkJCQltaW51dGVzKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogY291bnQ7CQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpIAlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZSAoZGV2KTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWQuJTAyZFxuIiwgc2Vydm8tPmRlZ3JlZXNbdmFsdWVdLAlcCisJCQkJc2Vydm8tPm1pbnV0ZXNbdmFsdWVdKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKHNlcnZvIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAorCSAgc2hvd19zZXJ2byMjdmFsdWUsIHNldF9zZXJ2byMjdmFsdWUpOworCitzaG93X3NldCgwKTsKK3Nob3dfc2V0KDEpOworc2hvd19zZXQoMik7CitzaG93X3NldCgzKTsKKworc3RhdGljIGludAorc2Vydm9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7CisKKwlkZXYgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBoaWRnZXRfc2Vydm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoZGV2LCAweDAwLCBzaXplb2YgKCpkZXYpKTsKKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCWRldi0+dHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzApOworCWlmIChkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEKSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzEpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8yKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMyk7CisJfQorCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBhdHRhY2hlZFxuIiwKKwkJZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCA/IDQgOiAxLAorCQlkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOworCisJaWYoIShkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwKSkKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAorCQkJICJXQVJOSU5HOiB2Mi4wIG5vdCB0ZXN0ZWQhIFBsZWFzZSByZXBvcnQgaWYgaXQgd29ya3MuXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2Vydm9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMCk7CisJaWYgKGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8zKTsKKwl9CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBkZXRhY2hlZFxuIiwKKwkJZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCA/IDQgOiAxLAorCQlkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOworCisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlcnZvX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJwaGlkZ2V0c2Vydm8iLAorCS5wcm9iZSA9IHNlcnZvX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gc2Vydm9fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBpZF90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQKK3BoaWRnZXRfc2Vydm9faW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNlcnZvX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitwaGlkZ2V0X3NlcnZvX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGhpZGdldF9zZXJ2b19pbml0KTsKK21vZHVsZV9leGl0KHBoaWRnZXRfc2Vydm9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmNzdlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAgLTAsMCArMSw1NjMgQEAKKy8qIC0qLSBsaW51eC1jIC0qLSAqLworCisvKiAKKyAqIERyaXZlciBmb3IgVVNCIFJpbyA1MDAKKyAqCisgKiBDZXNhciBNaXF1ZWwgKG1pcXVlbEBkZi51YmEuYXIpCisgKiAKKyAqIGJhc2VkIG9uIGhwX3NjYW5uZXIuYyBieSBEYXZpZCBFLiBOZWxzb24gKGRuZWxzb25AanVtcC5uZXQpCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEJhc2VkIHVwb24gbW91c2UuYyAoQnJhZCBLZXJ5YW4pIGFuZCBwcmludGVyLmMgKE1pY2hhZWwgR2VlKS4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAzMC8wNS8yMDAzICByZXBsYWNlZCBsb2NrL3VubG9jayBrZXJuZWwgd2l0aCB1cC9kb3duCisgKiAgICAgICAgICAgICBEYW5pZWxlIEJlbGx1Y2NpICBiZWxsdWNkYUB0aXNjYWxpLml0CisgKiAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlICJyaW81MDBfdXNiLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkNlc2FyIE1pcXVlbCA8bWlxdWVsQGRmLnViYS5hcj4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUmlvIDUwMCBkcml2ZXIiCisKKyNkZWZpbmUgUklPX01JTk9SCTY0CisKKy8qIHN0YWxsL3dhaXQgdGltZW91dCBmb3IgcmlvICovCisjZGVmaW5lIE5BS19USU1FT1VUIChIWikKKworI2RlZmluZSBJQlVGX1NJWkUgMHgxMDAwCisKKy8qIFNpemUgb2YgdGhlIHJpbyBidWZmZXIgKi8KKyNkZWZpbmUgT0JVRl9TSVpFIDB4MTAwMDAKKworc3RydWN0IHJpb191c2JfZGF0YSB7CisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICpyaW9fZGV2OyAgICAgLyogaW5pdDogcHJvYmVfcmlvICovCisgICAgICAgIHVuc2lnbmVkIGludCBpZm51bTsgICAgICAgICAgICAgLyogSW50ZXJmYWNlIG51bWJlciBvZiB0aGUgVVNCIGRldmljZSAqLworICAgICAgICBpbnQgaXNvcGVuOyAgICAgICAgICAgICAgICAgICAgIC8qIG56IGlmIG9wZW4gKi8KKyAgICAgICAgaW50IHByZXNlbnQ7ICAgICAgICAgICAgICAgICAgICAvKiBEZXZpY2UgaXMgcHJlc2VudCBvbiB0aGUgYnVzICovCisgICAgICAgIGNoYXIgKm9idWYsICppYnVmOyAgICAgICAgICAgICAgLyogdHJhbnNmZXIgYnVmZmVycyAqLworICAgICAgICBjaGFyIGJ1bGtfaW5fZXAsIGJ1bGtfb3V0X2VwOyAgIC8qIEVuZHBvaW50IGFzc2lnbm1lbnRzICovCisgICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsgICAgICAgLyogZm9yIHRpbWVvdXRzICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOyAgICAgICAgICAvKiBnZW5lcmFsIHJhY2UgYXZvaWRhbmNlICovCit9OworCitzdGF0aWMgc3RydWN0IHJpb191c2JfZGF0YSByaW9faW5zdGFuY2U7CisKK3N0YXRpYyBpbnQgb3Blbl9yaW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKworCWRvd24oJihyaW8tPmxvY2spKTsKKworCWlmIChyaW8tPmlzb3BlbiB8fCAhcmlvLT5wcmVzZW50KSB7CisJCXVwKCYocmlvLT5sb2NrKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJpby0+aXNvcGVuID0gMTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJpby0+d2FpdF9xKTsKKworCXVwKCYocmlvLT5sb2NrKSk7CisKKwlpbmZvKCJSaW8gb3BlbmVkLiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VfcmlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisKKwlyaW8tPmlzb3BlbiA9IDA7CisKKwlpbmZvKCJSaW8gY2xvc2VkLiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpb2N0bF9yaW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgUmlvQ29tbWFuZCByaW9fY21kOworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisJdm9pZCBfX3VzZXIgKmRhdGE7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXN1bHQsIHJlcXVlc3R0eXBlOworCWludCByZXRyaWVzOworCWludCByZXR2YWw9MDsKKworCWRvd24oJihyaW8tPmxvY2spKTsKKyAgICAgICAgLyogU2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSByaW8gaXMgY29ubmVjdGVkLCBwb3dlcmVkLCBldGMgKi8KKyAgICAgICAgaWYgKCByaW8gPT0gTlVMTCB8fAorICAgICAgICAgICAgIHJpby0+cHJlc2VudCA9PSAwIHx8CisgICAgICAgICAgICAgcmlvLT5yaW9fZGV2ID09IE5VTEwgKQorCXsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSSU9fUkVDVl9DT01NQU5EOgorCQlkYXRhID0gKHZvaWQgX191c2VyICopIGFyZzsKKwkJaWYgKGRhdGEgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJpb19jbWQsIGRhdGEsIHNpemVvZihzdHJ1Y3QgUmlvQ29tbWFuZCkpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWlmIChyaW9fY21kLmxlbmd0aCA8IDAgfHwgcmlvX2NtZC5sZW5ndGggPiBQQUdFX1NJWkUpIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgcmlvX2NtZC5idWZmZXIsIHJpb19jbWQubGVuZ3RoKSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmZmVyKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCXJlcXVlc3R0eXBlID0gcmlvX2NtZC5yZXF1ZXN0dHlwZSB8IFVTQl9ESVJfSU4gfAorCQkgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJZGJnCisJCSAgICAoInNlbmRpbmcgY29tbWFuZDpyZXF0eXBlPSUweCByZXE9JTB4IHZhbHVlPSUweCBpbmRleD0lMHggbGVuPSUweCIsCisJCSAgICAgcmVxdWVzdHR5cGUsIHJpb19jbWQucmVxdWVzdCwgcmlvX2NtZC52YWx1ZSwKKwkJICAgICByaW9fY21kLmluZGV4LCByaW9fY21kLmxlbmd0aCk7CisJCS8qIFNlbmQgcmlvIGNvbnRyb2wgbWVzc2FnZSAqLworCQlyZXRyaWVzID0gMzsKKwkJd2hpbGUgKHJldHJpZXMpIHsKKwkJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhyaW8tPnJpb19kZXYsCisJCQkJCQkgdXNiX3JjdmN0cmxwaXBlKHJpby0+IHJpb19kZXYsIDApLAorCQkJCQkJIHJpb19jbWQucmVxdWVzdCwKKwkJCQkJCSByZXF1ZXN0dHlwZSwKKwkJCQkJCSByaW9fY21kLnZhbHVlLAorCQkJCQkJIHJpb19jbWQuaW5kZXgsIGJ1ZmZlciwKKwkJCQkJCSByaW9fY21kLmxlbmd0aCwKKwkJCQkJCSBqaWZmaWVzX3RvX21zZWNzKHJpb19jbWQudGltZW91dCkpOworCQkJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKQorCQkJCXJldHJpZXMtLTsKKwkJCWVsc2UgaWYgKHJlc3VsdCA8IDApIHsKKwkJCQllcnIoIkVycm9yIGV4ZWN1dGluZyBpb2N0cmwuIGNvZGUgPSAlZCIsIHJlc3VsdCk7CisJCQkJcmV0cmllcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWRiZygiRXhlY3V0ZWQgaW9jdGwuIFJlc3VsdCA9ICVkIChkYXRhPSUwMngpIiwKKwkJCQkgICAgIHJlc3VsdCwgYnVmZmVyWzBdKTsKKwkJCQlpZiAoY29weV90b191c2VyKHJpb19jbWQuYnVmZmVyLCBidWZmZXIsCisJCQkJCQkgcmlvX2NtZC5sZW5ndGgpKSB7CisJCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmZmVyKTsKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQkJZ290byBlcnJfb3V0OworCQkJCX0KKwkJCQlyZXRyaWVzID0gMDsKKwkJCX0KKworCQkJLyogcmlvX2NtZC5idWZmZXIgY29udGFpbnMgYSByYXcgc3RyZWFtIG9mIHNpbmdsZSBieXRlCisJCQkgICBkYXRhIHdoaWNoIGhhcyBiZWVuIHJldHVybmVkIGZyb20gcmlvLiAgRGF0YSBpcworCQkJICAgaW50ZXJwcmV0ZWQgYXQgYXBwbGljYXRpb24gbGV2ZWwuICBGb3IgZGF0YSB0aGF0CisJCQkgICB3aWxsIGJlIGNhc3QgdG8gZGF0YSB0eXBlcyBsb25nZXIgdGhhbiAxIGJ5dGUsIGRhdGEKKwkJCSAgIHdpbGwgYmUgbGl0dGxlX2VuZGlhbiBhbmQgd2lsbCBwb3RlbnRpYWxseSBuZWVkIHRvCisJCQkgICBiZSBzd2FwcGVkIGF0IHRoZSBhcHAgbGV2ZWwgKi8KKworCQl9CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmZmVyKTsKKwkJYnJlYWs7CisKKwljYXNlIFJJT19TRU5EX0NPTU1BTkQ6CisJCWRhdGEgPSAodm9pZCBfX3VzZXIgKikgYXJnOworCQlpZiAoZGF0YSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmlvX2NtZCwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBSaW9Db21tYW5kKSkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKHJpb19jbWQubGVuZ3RoIDwgMCB8fCByaW9fY21kLmxlbmd0aCA+IFBBR0VfU0laRSkgeworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCByaW9fY21kLmJ1ZmZlciwgcmlvX2NtZC5sZW5ndGgpKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlyZXF1ZXN0dHlwZSA9IHJpb19jbWQucmVxdWVzdHR5cGUgfCBVU0JfRElSX09VVCB8CisJCSAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCQlkYmcoInNlbmRpbmcgY29tbWFuZDogcmVxdHlwZT0lMHggcmVxPSUweCB2YWx1ZT0lMHggaW5kZXg9JTB4IGxlbj0lMHgiLAorCQkgICAgIHJlcXVlc3R0eXBlLCByaW9fY21kLnJlcXVlc3QsIHJpb19jbWQudmFsdWUsCisJCSAgICAgcmlvX2NtZC5pbmRleCwgcmlvX2NtZC5sZW5ndGgpOworCQkvKiBTZW5kIHJpbyBjb250cm9sIG1lc3NhZ2UgKi8KKwkJcmV0cmllcyA9IDM7CisJCXdoaWxlIChyZXRyaWVzKSB7CisJCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocmlvLT5yaW9fZGV2LAorCQkJCQkJIHVzYl9zbmRjdHJscGlwZShyaW8tPiByaW9fZGV2LCAwKSwKKwkJCQkJCSByaW9fY21kLnJlcXVlc3QsCisJCQkJCQkgcmVxdWVzdHR5cGUsCisJCQkJCQkgcmlvX2NtZC52YWx1ZSwKKwkJCQkJCSByaW9fY21kLmluZGV4LCBidWZmZXIsCisJCQkJCQkgcmlvX2NtZC5sZW5ndGgsCisJCQkJCQkgamlmZmllc190b19tc2VjcyhyaW9fY21kLnRpbWVvdXQpKTsKKwkJCWlmIChyZXN1bHQgPT0gLUVUSU1FRE9VVCkKKwkJCQlyZXRyaWVzLS07CisJCQllbHNlIGlmIChyZXN1bHQgPCAwKSB7CisJCQkJZXJyKCJFcnJvciBleGVjdXRpbmcgaW9jdHJsLiBjb2RlID0gJWQiLCByZXN1bHQpOworCQkJCXJldHJpZXMgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlkYmcoIkV4ZWN1dGVkIGlvY3RsLiBSZXN1bHQgPSAlZCIsIHJlc3VsdCk7CisJCQkJcmV0cmllcyA9IDA7CisKKwkJCX0KKworCQl9CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmZmVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PVFRZOworCQlicmVhazsKKwl9CisKKworZXJyX291dDoKKwl1cCgmKHJpby0+bG9jaykpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit3cml0ZV9yaW8oc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJICBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKworCXVuc2lnbmVkIGxvbmcgY29weV9zaXplOworCXVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbiA9IDA7CisJdW5zaWduZWQgaW50IHBhcnRpYWw7CisKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgbWF4cmV0cnk7CisJaW50IGVycm4gPSAwOworCisJZG93bigmKHJpby0+bG9jaykpOworICAgICAgICAvKiBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHJpbyBpcyBjb25uZWN0ZWQsIHBvd2VyZWQsIGV0YyAqLworICAgICAgICBpZiAoIHJpbyA9PSBOVUxMIHx8CisgICAgICAgICAgICAgcmlvLT5wcmVzZW50ID09IDAgfHwKKyAgICAgICAgICAgICByaW8tPnJpb19kZXYgPT0gTlVMTCApCisJeworCQl1cCgmKHJpby0+bG9jaykpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKworCisJZG8geworCQl1bnNpZ25lZCBsb25nIHRoaXN0aW1lOworCQljaGFyICpvYnVmID0gcmlvLT5vYnVmOworCisJCXRoaXN0aW1lID0gY29weV9zaXplID0KKwkJICAgIChjb3VudCA+PSBPQlVGX1NJWkUpID8gT0JVRl9TSVpFIDogY291bnQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihyaW8tPm9idWYsIGJ1ZmZlciwgY29weV9zaXplKSkgeworCQkJZXJybiA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycm9yOworCQl9CisJCW1heHJldHJ5ID0gNTsKKwkJd2hpbGUgKHRoaXN0aW1lKSB7CisJCQlpZiAoIXJpby0+cmlvX2RldikgeworCQkJCWVycm4gPSAtRU5PREVWOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQl1cCgmKHJpby0+bG9jaykpOworCQkJCXJldHVybiBieXRlc193cml0dGVuID8gYnl0ZXNfd3JpdHRlbiA6IC1FSU5UUjsKKwkJCX0KKworCQkJcmVzdWx0ID0gdXNiX2J1bGtfbXNnKHJpby0+cmlvX2RldiwKKwkJCQkJIHVzYl9zbmRidWxrcGlwZShyaW8tPnJpb19kZXYsIDIpLAorCQkJCQkgb2J1ZiwgdGhpc3RpbWUsICZwYXJ0aWFsLCA1MDAwKTsKKworCQkJZGJnKCJ3cml0ZSBzdGF0czogcmVzdWx0OiVkIHRoaXN0aW1lOiVsdSBwYXJ0aWFsOiV1IiwKKwkJCSAgICAgcmVzdWx0LCB0aGlzdGltZSwgcGFydGlhbCk7CisKKwkJCWlmIChyZXN1bHQgPT0gLUVUSU1FRE9VVCkgewkvKiBOQUsgLSBzbyBob2xkIGZvciBhIHdoaWxlICovCisJCQkJaWYgKCFtYXhyZXRyeS0tKSB7CisJCQkJCWVycm4gPSAtRVRJTUU7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJCXByZXBhcmVfdG9fd2FpdCgmcmlvLT53YWl0X3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCXNjaGVkdWxlX3RpbWVvdXQoTkFLX1RJTUVPVVQpOworCQkJCWZpbmlzaF93YWl0KCZyaW8tPndhaXRfcSwgJndhaXQpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICghcmVzdWx0ICYmIHBhcnRpYWwpIHsKKwkJCQlvYnVmICs9IHBhcnRpYWw7CisJCQkJdGhpc3RpbWUgLT0gcGFydGlhbDsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9OworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIldyaXRlIFdob29wcyAtICV4IiwgcmVzdWx0KTsKKwkJCWVycm4gPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlieXRlc193cml0dGVuICs9IGNvcHlfc2l6ZTsKKwkJY291bnQgLT0gY29weV9zaXplOworCQlidWZmZXIgKz0gY29weV9zaXplOworCX0gd2hpbGUgKGNvdW50ID4gMCk7CisKKwl1cCgmKHJpby0+bG9jaykpOworCisJcmV0dXJuIGJ5dGVzX3dyaXR0ZW4gPyBieXRlc193cml0dGVuIDogLUVJTzsKKworZXJyb3I6CisJdXAoJihyaW8tPmxvY2spKTsKKwlyZXR1cm4gZXJybjsKK30KKworc3RhdGljIHNzaXplX3QKK3JlYWRfcmlvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKwlzc2l6ZV90IHJlYWRfY291bnQ7CisJdW5zaWduZWQgaW50IHBhcnRpYWw7CisJaW50IHRoaXNfcmVhZDsKKwlpbnQgcmVzdWx0OworCWludCBtYXhyZXRyeSA9IDEwOworCWNoYXIgKmlidWY7CisKKwlkb3duKCYocmlvLT5sb2NrKSk7CisJLyogU2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSByaW8gaXMgY29ubmVjdGVkLCBwb3dlcmVkLCBldGMgKi8KKyAgICAgICAgaWYgKCByaW8gPT0gTlVMTCB8fAorICAgICAgICAgICAgIHJpby0+cHJlc2VudCA9PSAwIHx8CisgICAgICAgICAgICAgcmlvLT5yaW9fZGV2ID09IE5VTEwgKQorCXsKKwkJdXAoJihyaW8tPmxvY2spKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWJ1ZiA9IHJpby0+aWJ1ZjsKKworCXJlYWRfY291bnQgPSAwOworCisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCXJldHVybiByZWFkX2NvdW50ID8gcmVhZF9jb3VudCA6IC1FSU5UUjsKKwkJfQorCQlpZiAoIXJpby0+cmlvX2RldikgeworCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXRoaXNfcmVhZCA9IChjb3VudCA+PSBJQlVGX1NJWkUpID8gSUJVRl9TSVpFIDogY291bnQ7CisKKwkJcmVzdWx0ID0gdXNiX2J1bGtfbXNnKHJpby0+cmlvX2RldiwKKwkJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocmlvLT5yaW9fZGV2LCAxKSwKKwkJCQkgICAgICBpYnVmLCB0aGlzX3JlYWQsICZwYXJ0aWFsLAorCQkJCSAgICAgIDgwMDApOworCisJCWRiZyhLRVJOX0RFQlVHICJyZWFkIHN0YXRzOiByZXN1bHQ6JWQgdGhpc19yZWFkOiV1IHBhcnRpYWw6JXUiLAorCQkgICAgICAgcmVzdWx0LCB0aGlzX3JlYWQsIHBhcnRpYWwpOworCisJCWlmIChwYXJ0aWFsKSB7CisJCQljb3VudCA9IHRoaXNfcmVhZCA9IHBhcnRpYWw7CisJCX0gZWxzZSBpZiAocmVzdWx0ID09IC1FVElNRURPVVQgfHwgcmVzdWx0ID09IDE1KSB7CS8qIEZJWE1FOiAxNSA/Pz8gKi8KKwkJCWlmICghbWF4cmV0cnktLSkgeworCQkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQkJZXJyKCJyZWFkX3JpbzogbWF4cmV0cnkgdGltZW91dCIpOworCQkJCXJldHVybiAtRVRJTUU7CisJCQl9CisJCQlwcmVwYXJlX3RvX3dhaXQoJnJpby0+d2FpdF9xLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCXNjaGVkdWxlX3RpbWVvdXQoTkFLX1RJTUVPVVQpOworCQkJZmluaXNoX3dhaXQoJnJpby0+d2FpdF9xLCAmd2FpdCk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChyZXN1bHQgIT0gLUVSRU1PVEVJTykgeworCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCWVycigiUmVhZCBXaG9vcHMgLSByZXN1bHQ6JXUgcGFydGlhbDoldSB0aGlzX3JlYWQ6JXUiLAorCQkJICAgICByZXN1bHQsIHBhcnRpYWwsIHRoaXNfcmVhZCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfSBlbHNlIHsKKwkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQlyZXR1cm4gKDApOworCQl9CisKKwkJaWYgKHRoaXNfcmVhZCkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGlidWYsIHRoaXNfcmVhZCkpIHsKKwkJCQl1cCgmKHJpby0+bG9jaykpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJY291bnQgLT0gdGhpc19yZWFkOworCQkJcmVhZF9jb3VudCArPSB0aGlzX3JlYWQ7CisJCQlidWZmZXIgKz0gdGhpc19yZWFkOworCQl9CisJfQorCXVwKCYocmlvLT5sb2NrKSk7CisJcmV0dXJuIHJlYWRfY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QKK2ZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJcmVhZF9yaW8sCisJLndyaXRlID0Jd3JpdGVfcmlvLAorCS5pb2N0bCA9CWlvY3RsX3JpbywKKwkub3BlbiA9CQlvcGVuX3JpbywKKwkucmVsZWFzZSA9CWNsb3NlX3JpbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfcmlvX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvcmlvNTAwJWQiLAorCS5mb3BzID0JCSZ1c2JfcmlvX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlSSU9fTUlOT1IsCit9OworCitzdGF0aWMgaW50IHByb2JlX3JpbyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKKwlpbnQgcmV0dmFsOworCisJaW5mbygiVVNCIFJpbyBmb3VuZCBhdCBhZGRyZXNzICVkIiwgZGV2LT5kZXZudW0pOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmlvLT5yaW9fZGV2ID0gZGV2OworCisJaWYgKCEocmlvLT5vYnVmID0gKGNoYXIgKikga21hbGxvYyhPQlVGX1NJWkUsIEdGUF9LRVJORUwpKSkgeworCQllcnIoInByb2JlX3JpbzogTm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgYnVmZmVyIik7CisJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkYmcoInByb2JlX3Jpbzogb2J1ZiBhZGRyZXNzOiVwIiwgcmlvLT5vYnVmKTsKKworCWlmICghKHJpby0+aWJ1ZiA9IChjaGFyICopIGttYWxsb2MoSUJVRl9TSVpFLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyKCJwcm9iZV9yaW86IE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgaW5wdXQgYnVmZmVyIik7CisJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CisJCWtmcmVlKHJpby0+b2J1Zik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkYmcoInByb2JlX3JpbzogaWJ1ZiBhZGRyZXNzOiVwIiwgcmlvLT5pYnVmKTsKKworCWluaXRfTVVURVgoJihyaW8tPmxvY2spKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHJpbyk7CisJcmlvLT5wcmVzZW50ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaXNjb25uZWN0X3JpbyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWlmIChyaW8pIHsKKwkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfcmlvX2NsYXNzKTsKKworCQlkb3duKCYocmlvLT5sb2NrKSk7CisJCWlmIChyaW8tPmlzb3BlbikgeworCQkJcmlvLT5pc29wZW4gPSAwOworCQkJLyogYmV0dGVyIGxldCBpdCBmaW5pc2ggLSB0aGUgcmVsZWFzZSB3aWxsIGRvIHdoYXRzIG5lZWRlZCAqLworCQkJcmlvLT5yaW9fZGV2ID0gTlVMTDsKKwkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQlyZXR1cm47CisJCX0KKwkJa2ZyZWUocmlvLT5pYnVmKTsKKwkJa2ZyZWUocmlvLT5vYnVmKTsKKworCQlpbmZvKCJVU0IgUmlvIGRpc2Nvbm5lY3RlZC4iKTsKKworCQlyaW8tPnByZXNlbnQgPSAwOworCQl1cCgmKHJpby0+bG9jaykpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJpb190YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwODQxLCAxKSB9LCAJCS8qIFJpbyA1MDAgKi8KKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHJpb190YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciByaW9fZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJyaW81MDAiLAorCS5wcm9iZSA9CXByb2JlX3JpbywKKwkuZGlzY29ubmVjdCA9CWRpc2Nvbm5lY3RfcmlvLAorCS5pZF90YWJsZSA9CXJpb190YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9yaW9faW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZyaW9fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9yaW9fY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisKKwlyaW8tPnByZXNlbnQgPSAwOworCXVzYl9kZXJlZ2lzdGVyKCZyaW9fZHJpdmVyKTsKKworCit9CisKK21vZHVsZV9pbml0KHVzYl9yaW9faW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfcmlvX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwX3VzYi5oIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDBfdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5YWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwX3VzYi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgIENlc2FyIE1pcXVlbCAgKG1pcXVlbEBkZi51YmEuYXIpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisKKyNkZWZpbmUgUklPX1NFTkRfQ09NTUFORAkJCTB4MQorI2RlZmluZSBSSU9fUkVDVl9DT01NQU5ECQkJMHgyCisKKyNkZWZpbmUgUklPX0RJUl9PVVQgICAgICAgICAgICAgICAJICAgICAgICAweDAKKyNkZWZpbmUgUklPX0RJUl9JTgkJCQkweDEKKworc3RydWN0IFJpb0NvbW1hbmQgeworCXNob3J0IGxlbmd0aDsKKwlpbnQgcmVxdWVzdDsKKwlpbnQgcmVxdWVzdHR5cGU7CisJaW50IHZhbHVlOworCWludCBpbmRleDsKKwl2b2lkIF9fdXNlciAqYnVmZmVyOworCWludCB0aW1lb3V0OworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTdlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKKworY29uZmlnIFVTQl9TSVNVU0JWR0EKKwl0cmlzdGF0ZSAiVVNCIDIuMCBTVkdBIGRvbmdsZSBzdXBwb3J0IChOZXQyMjgwL1NpUzMxNSkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0VIQ0lfSENECisgICAgICAgIC0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYSBVU0IyVkdBIGRvbmdsZSBiYXNlZCBvbiBhCisJICBOZXQyMjgwIGFuZCBhIFNpUzMxNSBjaGlwLiAKKwkgIAorCSAgTm90ZSB0aGF0IHRoaXMgZGV2aWNlIHJlcXVpcmVzIGEgVVNCIDIuMCBob3N0IGNvbnRyb2xsZXIuIEl0IHdpbGwgbm90IAorCSAgd29yayB3aXRoIFVTQiAxLnggY29udHJvbGxlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIHNpc3VzYi4gIElmIHVuc3VyZSwgc2F5IE4uCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmMTY0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHNpc3VzYiBkcml2ZXIgKGlmIGRyaXZlciBpcyBpbnNpZGUga2VybmVsIHRyZWUpLgorIworCitvYmotJChDT05GSUdfVVNCX1NJU1VTQlZHQSkgKz0gc2lzdXNiLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE2M2IzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTAsMCArMSwzMTQ1IEBACisvKgorICogc2lzdXNiIC0gdXNiIGtlcm5lbCBkcml2ZXIgZm9yIFNpUzMxNShFKSBiYXNlZCBVU0IyVkdBIGRvbmdsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgVGhvbWFzIFdpbmlzY2hob2ZlciwgVmllbm5hLCBBdXN0cmlhCisgKgorICogSWYgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsLCB0aGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR1BMIHYyLgorICoKKyAqIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaWNlbnNlIHRlcm1zIGFwcGx5OgorICoKKyAqICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogKiBhcmUgbWV0OgorICogKiAxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAqIDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICogMykgVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHNpc3VzYnIgd3JpdHRlbiBwZXJtaXNzaW9uLgorICogKgorICogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SCisgKiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBBdXRob3I6IAlUaG9tYXMgV2luaXNjaGhvZmVyIDx0aG9tYXNAd2luaXNjaGhvZmVyLm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworI2luY2x1ZGUgInNpc3VzYi5oIgorCisjZGVmaW5lIFNJU1VTQl9ET05UU1lOQworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAvIGNsZWFuLXVwIHJvdXRpbmVzICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzaXN1c2JfZHJpdmVyOworCitzdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7CisKK3N0YXRpYyB2b2lkCitzaXN1c2JfZnJlZV9idWZmZXJzKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1PQlVGUzsgaSsrKSB7CisJCWlmIChzaXN1c2ItPm9idWZbaV0pIHsKKwkJCXVzYl9idWZmZXJfZnJlZShzaXN1c2ItPnNpc3VzYl9kZXYsIHNpc3VzYi0+b2J1ZnNpemUsCisJCQkJc2lzdXNiLT5vYnVmW2ldLCBzaXN1c2ItPnRyYW5zZmVyX2RtYV9vdXRbaV0pOworCQkJc2lzdXNiLT5vYnVmW2ldID0gTlVMTDsKKwkJfQorCX0KKwlpZiAoc2lzdXNiLT5pYnVmKSB7CisJCXVzYl9idWZmZXJfZnJlZShzaXN1c2ItPnNpc3VzYl9kZXYsIHNpc3VzYi0+aWJ1ZnNpemUsCisJCQlzaXN1c2ItPmlidWYsIHNpc3VzYi0+dHJhbnNmZXJfZG1hX2luKTsKKwkJc2lzdXNiLT5pYnVmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzaXN1c2JfZnJlZV91cmJzKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1PQlVGUzsgaSsrKSB7CisJCXVzYl9mcmVlX3VyYihzaXN1c2ItPnNpc3VyYm91dFtpXSk7CisJCXNpc3VzYi0+c2lzdXJib3V0W2ldID0gTlVMTDsKKwl9CisJdXNiX2ZyZWVfdXJiKHNpc3VzYi0+c2lzdXJiaW4pOworCXNpc3VzYi0+c2lzdXJiaW4gPSBOVUxMOworfQorCisvKiBMZXZlbCAwOiBVU0IgdHJhbnNwb3J0IGxheWVyICovCisKKy8qIDEuIG91dC1idWxrcyAqLworCisvKiBvdXQtdXJiIG1hbmFnZW1lbnQgKi8KKworLyogUmV0dXJuIDEgaWYgYWxsIGZyZWUsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50CitzaXN1c2JfYWxsX2ZyZWUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpc3VzYi0+bnVtb2J1ZnM7IGkrKykgeworCisJCWlmIChzaXN1c2ItPnVyYnN0YXR1c1tpXSAmIFNVX1VSQl9CVVNZKQorCQkJcmV0dXJuIDA7CisKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyogS2lsbCBhbGwgYnVzeSBVUkJzICovCitzdGF0aWMgdm9pZAorc2lzdXNiX2tpbGxfYWxsX2J1c3koc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpOworCisJaWYgKHNpc3VzYl9hbGxfZnJlZShzaXN1c2IpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lzdXNiLT5udW1vYnVmczsgaSsrKSB7CisKKwkJaWYgKHNpc3VzYi0+dXJic3RhdHVzW2ldICYgU1VfVVJCX0JVU1kpCisJCQl1c2Jfa2lsbF91cmIoc2lzdXNiLT5zaXN1cmJvdXRbaV0pOworCisJfQorfQorCisvKiBSZXR1cm4gMSBpZiBvaywgMCBpZiBlcnJvciAobm90IGFsbCBjb21wbGV0ZSB3aXRoaW4gdGltZW91dCkgKi8KK3N0YXRpYyBpbnQKK3Npc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCB0aW1lb3V0ID0gNSAqIEhaLCBpID0gMTsKKworCXdhaXRfZXZlbnRfdGltZW91dChzaXN1c2ItPndhaXRfcSwKKwkJCQkoaSA9IHNpc3VzYl9hbGxfZnJlZShzaXN1c2IpKSwKKwkJCQkgdGltZW91dCk7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludAorc2lzdXNiX291dHVyYl9hdmFpbGFibGUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpc3VzYi0+bnVtb2J1ZnM7IGkrKykgeworCisJCWlmICgoc2lzdXNiLT51cmJzdGF0dXNbaV0gJiAoU1VfVVJCX0JVU1l8U1VfVVJCX0FMTE9DKSkgPT0gMCkKKwkJCXJldHVybiBpOworCisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfZ2V0X2ZyZWVfb3V0YnVmKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaSwgdGltZW91dCA9IDUgKiBIWjsKKworCXdhaXRfZXZlbnRfdGltZW91dChzaXN1c2ItPndhaXRfcSwKKwkJCQkoKGkgPSBzaXN1c2Jfb3V0dXJiX2F2YWlsYWJsZShzaXN1c2IpKSA+PSAwKSwKKwkJCQl0aW1lb3V0KTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfYWxsb2Nfb3V0YnVmKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaTsKKworCWkgPSBzaXN1c2Jfb3V0dXJiX2F2YWlsYWJsZShzaXN1c2IpOworCisJaWYgKGkgPj0gMCkKKwkJc2lzdXNiLT51cmJzdGF0dXNbaV0gfD0gU1VfVVJCX0FMTE9DOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkCitzaXN1c2JfZnJlZV9vdXRidWYoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgaW5kZXgpCit7CisJaWYgKChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBzaXN1c2ItPm51bW9idWZzKSkKKwkJc2lzdXNiLT51cmJzdGF0dXNbaW5kZXhdICY9IH5TVV9VUkJfQUxMT0M7Cit9CisKKy8qIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKworc3RhdGljIHZvaWQKK3Npc3VzYl9idWxrX2NvbXBsZXRlb3V0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNpc3VzYl91cmJfY29udGV4dCAqY29udGV4dCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisKKwlpZiAoIWNvbnRleHQpCisJCXJldHVybjsKKworCXNpc3VzYiA9IGNvbnRleHQtPnNpc3VzYjsKKworCWlmICghc2lzdXNiIHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYgfHwgIXNpc3VzYi0+cHJlc2VudCkKKwkJcmV0dXJuOworCisjaWZuZGVmIFNJU1VTQl9ET05UU1lOQworCWlmIChjb250ZXh0LT5hY3R1YWxfbGVuZ3RoKQorCQkqKGNvbnRleHQtPmFjdHVhbF9sZW5ndGgpICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKyNlbmRpZgorCisJc2lzdXNiLT51cmJzdGF0dXNbY29udGV4dC0+dXJiaW5kZXhdICY9IH5TVV9VUkJfQlVTWTsKKwl3YWtlX3VwKCZzaXN1c2ItPndhaXRfcSk7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9idWxrb3V0X21zZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBpbmRleCwgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCisJCWludCBsZW4sIGludCAqYWN0dWFsX2xlbmd0aCwgaW50IHRpbWVvdXQsIHVuc2lnbmVkIGludCB0ZmxhZ3MsCisJCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHNpc3VzYi0+c2lzdXJib3V0W2luZGV4XTsKKwlpbnQgcmV0dmFsLCBieXRlc3dyaXR0ZW4gPSAwOworCisJLyogU2V0IHVwIFVSQiAqLworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSAwOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzaXN1c2ItPnNpc3VzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJc2lzdXNiX2J1bGtfY29tcGxldGVvdXQsICZzaXN1c2ItPnVyYm91dF9jb250ZXh0W2luZGV4XSk7CisKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9ICh0ZmxhZ3MgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJaWYgKCh1cmItPnRyYW5zZmVyX2RtYSA9IHRyYW5zZmVyX2RtYSkpCisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkvKiBTZXQgdXAgY29udGV4dCAqLworCXNpc3VzYi0+dXJib3V0X2NvbnRleHRbaW5kZXhdLmFjdHVhbF9sZW5ndGggPSAodGltZW91dCkgPworCQkJCQkJTlVMTCA6IGFjdHVhbF9sZW5ndGg7CisKKwkvKiBEZWNsYXJlIHRoaXMgdXJiL2J1ZmZlciBpbiB1c2UgKi8KKwlzaXN1c2ItPnVyYnN0YXR1c1tpbmRleF0gfD0gU1VfVVJCX0JVU1k7CisKKwkvKiBTdWJtaXQgVVJCICovCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKworCS8qIElmIE9LLCBhbmQgaWYgdGltZW91dCA+IDAsIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwlpZiAoKHJldHZhbCA9PSAwKSAmJiB0aW1lb3V0KSB7CisJCXdhaXRfZXZlbnRfdGltZW91dChzaXN1c2ItPndhaXRfcSwKKwkJCQkgICAoIShzaXN1c2ItPnVyYnN0YXR1c1tpbmRleF0gJiBTVV9VUkJfQlVTWSkpLAorCQkJCSAgIHRpbWVvdXQpOworCQlpZiAoc2lzdXNiLT51cmJzdGF0dXNbaW5kZXhdICYgU1VfVVJCX0JVU1kpIHsKKwkJCS8qIFVSQiB0aW1lZCBvdXQuLi4ga2lsbCBpdCBhbmQgcmVwb3J0IGVycm9yICovCisJCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJCXJldHZhbCA9IC1FVElNRURPVVQ7CisJCX0gZWxzZSB7CisJCQkvKiBPdGhlcndpc2UsIHJlcG9ydCB1cmIgc3RhdHVzICovCisJCQlyZXR2YWwgPSB1cmItPnN0YXR1czsKKwkJCWJ5dGVzd3JpdHRlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJfQorCX0KKworCWlmIChhY3R1YWxfbGVuZ3RoKQorCQkqYWN0dWFsX2xlbmd0aCA9IGJ5dGVzd3JpdHRlbjsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIDIuIGluLWJ1bGtzICovCisKKy8qIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKworc3RhdGljIHZvaWQKK3Npc3VzYl9idWxrX2NvbXBsZXRlaW4oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAoIXNpc3VzYiB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2IHx8ICFzaXN1c2ItPnByZXNlbnQpCisJCXJldHVybjsKKworCXNpc3VzYi0+Y29tcGxldGVpbiA9IDE7CisJd2FrZV91cCgmc2lzdXNiLT53YWl0X3EpOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfYnVsa2luX21zZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHVuc2lnbmVkIGludCBwaXBlLCB2b2lkICpkYXRhLCBpbnQgbGVuLAorCQlpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgdGZsYWdzLCBkbWFfYWRkcl90IHRyYW5zZmVyX2RtYSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBzaXN1c2ItPnNpc3VyYmluOworCWludCByZXR2YWwsIHJlYWRieXRlcyA9IDA7CisKKwl1cmItPnRyYW5zZmVyX2ZsYWdzID0gMDsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2lzdXNiLT5zaXN1c2JfZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQlzaXN1c2JfYnVsa19jb21wbGV0ZWluLCBzaXN1c2IpOworCisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSAodGZsYWdzIHwgVVJCX0FTWU5DX1VOTElOSyk7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCWlmICgodXJiLT50cmFuc2Zlcl9kbWEgPSB0cmFuc2Zlcl9kbWEpKQorCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJc2lzdXNiLT5jb21wbGV0ZWluID0gMDsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwgPT0gMCkgeworCQl3YWl0X2V2ZW50X3RpbWVvdXQoc2lzdXNiLT53YWl0X3EsIHNpc3VzYi0+Y29tcGxldGVpbiwgdGltZW91dCk7CisJCWlmICghc2lzdXNiLT5jb21wbGV0ZWluKSB7CisJCQkvKiBVUkIgdGltZWQgb3V0Li4uIGtpbGwgaXQgYW5kIHJlcG9ydCBlcnJvciAqLworCQkJdXNiX2tpbGxfdXJiKHVyYik7CisJCQlyZXR2YWwgPSAtRVRJTUVET1VUOworCQl9IGVsc2UgeworCQkJLyogVVJCIGNvbXBsZXRlZCB3aXRoaW4gdGltb3V0ICovCisJCQlyZXR2YWwgPSB1cmItPnN0YXR1czsKKwkJCXJlYWRieXRlcyA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJfQorCX0KKworCWlmIChhY3R1YWxfbGVuZ3RoKQorCQkqYWN0dWFsX2xlbmd0aCA9IHJlYWRieXRlczsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworLyogTGV2ZWwgMTogICovCisKKy8qIFNlbmQgYSBidWxrIG1lc3NhZ2Ugb2YgdmFyaWFibGUgc2l6ZQorICoKKyAqIFRvIGNvcHkgdGhlIGRhdGEgZnJvbSB1c2Vyc3BhY2UsIGdpdmUgcG9pbnRlciB0byAidXNlcmJ1ZmZlciIsCisgKiB0byBjb3B5IGZyb20gKG5vbi1ETUEpIGtlcm5lbCBtZW1vcnksIGdpdmUgImtlcm5idWZmZXIiLiBJZgorICogYm90aCBvZiB0aGVzZSBhcmUgTlVMTCwgaXQgaXMgYXNzdW1lZCwgdGhhdCB0aGUgdHJhbnNmZXIKKyAqIGJ1ZmZlciAic2lzdXNiLT5vYnVmW2luZGV4XSIgaXMgc2V0IHVwIHdpdGggdGhlIGRhdGEgdG8gc2VuZC4KKyAqIEluZGV4IGlzIGlnbm9yZWQgaWYgZWl0aGVyIGtlcm5idWZmZXIgb3IgdXNlcmJ1ZmZlciBpcyBzZXQuCisgKiBJZiBhc3luYyBpcyBub256ZXJvLCBVUkJzIHdpbGwgYmUgc2VudCB3aXRob3V0IHdhaXRpbmcgZm9yCisgKiBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBVUkIuCisgKgorICogKHJldHVybiAwIG9uIHN1Y2Nlc3MpCisgKi8KKworc3RhdGljIGludCBzaXN1c2Jfc2VuZF9idWxrX21zZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBlcCwgaW50IGxlbiwKKwkJY2hhciAqa2VybmJ1ZmZlciwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWZmZXIsIGludCBpbmRleCwKKwkJc3NpemVfdCAqYnl0ZXNfd3JpdHRlbiwgdW5zaWduZWQgaW50IHRmbGFncywgaW50IGFzeW5jKQoreworCWludCByZXN1bHQgPSAwLCByZXRyeSwgY291bnQgPSBsZW47CisJaW50IHBhc3NzaXplLCB0aGlzcGFzcywgdHJhbnNmZXJyZWRfbGVuID0gMDsKKwlpbnQgZnJvbXVzZXIgPSAodXNlcmJ1ZmZlciAhPSBOVUxMKSA/IDEgOiAwOworCWludCBmcm9ta2VybiA9IChrZXJuYnVmZmVyICE9IE5VTEwpID8gMSA6IDA7CisJdW5zaWduZWQgaW50IHBpcGU7CisJY2hhciAqYnVmZmVyOworCisJKCpieXRlc193cml0dGVuKSA9IDA7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNpc3VzYiB8fCAhc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogSWYgd2UgY29weSBkYXRhIGZyb20ga2VybmVsIG9yIHVzZXJzcGFjZSwgZm9yY2UgdGhlCisJICogYWxsb2NhdGlvbiBvZiBhIGJ1ZmZlci91cmIuIElmIHdlIGhhdmUgdGhlIGRhdGEgaW4KKwkgKiB0aGUgdHJhbnNmZXIgYnVmZmVyW2luZGV4XSBhbHJlYWR5LCByZXVzZSB0aGUgYnVmZmVyL1VSQgorCSAqIGlmIHRoZSBsZW5ndGggaXMgPiBidWZmZXIgc2l6ZS4gKFNvLCB0cmFuc21pdHRpbmcKKwkgKiBsYXJnZSBkYXRhIGFtb3VudHMgZGlyZWN0bHkgZnJvbSB0aGUgdHJhbnNmZXIgYnVmZmVyCisJICogdHJlYXRzIHRoZSBidWZmZXIgYXMgYSByaW5nIGJ1ZmZlci4gSG93ZXZlciwgd2UgbmVlZAorCSAqIHRvIHN5bmMgaW4gdGhpcyBjYXNlLikKKwkgKi8KKwlpZiAoZnJvbXVzZXIgfHwgZnJvbWtlcm4pCisJCWluZGV4ID0gLTE7CisJZWxzZSBpZiAobGVuID4gc2lzdXNiLT5vYnVmc2l6ZSkKKwkJYXN5bmMgPSAwOworCisJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShzaXN1c2ItPnNpc3VzYl9kZXYsIGVwKTsKKworCWRvIHsKKwkJcGFzc3NpemUgPSB0aGlzcGFzcyA9IChzaXN1c2ItPm9idWZzaXplIDwgY291bnQpID8KKwkJCQkJCXNpc3VzYi0+b2J1ZnNpemUgOiBjb3VudDsKKworCQlpZiAoaW5kZXggPCAwKQorCQkJaW5kZXggPSBzaXN1c2JfZ2V0X2ZyZWVfb3V0YnVmKHNpc3VzYik7CisKKwkJaWYgKGluZGV4IDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJCWJ1ZmZlciA9IHNpc3VzYi0+b2J1ZltpbmRleF07CisKKwkJaWYgKGZyb211c2VyKSB7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHVzZXJidWZmZXIsIHBhc3NzaXplKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJdXNlcmJ1ZmZlciArPSBwYXNzc2l6ZTsKKworCQl9IGVsc2UgaWYgKGZyb21rZXJuKSB7CisKKwkJCW1lbWNweShidWZmZXIsIGtlcm5idWZmZXIsIHBhc3NzaXplKTsKKwkJCWtlcm5idWZmZXIgKz0gcGFzc3NpemU7CisKKwkJfQorCisJCXJldHJ5ID0gNTsKKwkJd2hpbGUgKHRoaXNwYXNzKSB7CisKKwkJCWlmICghc2lzdXNiLT5zaXN1c2JfZGV2KQorCQkJCXJldHVybiAtRU5PREVWOworCisJCQlyZXN1bHQgPSBzaXN1c2JfYnVsa291dF9tc2coc2lzdXNiLAorCQkJCQkJaW5kZXgsCisJCQkJCQlwaXBlLAorCQkJCQkJYnVmZmVyLAorCQkJCQkJdGhpc3Bhc3MsCisJCQkJCQkmdHJhbnNmZXJyZWRfbGVuLAorCQkJCQkJYXN5bmMgPyAwIDogNSAqIEhaLAorCQkJCQkJdGZsYWdzLAorCQkJCQkJc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0W2luZGV4XSk7CisKKwkJCWlmIChyZXN1bHQgPT0gLUVUSU1FRE9VVCkgeworCisJCQkJLyogV2lsbCBub3QgaGFwcGVuIGlmIGFzeW5jICovCisJCQkJaWYgKCFyZXRyeS0tKQorCQkJCQlyZXR1cm4gLUVUSU1FOworCisJCQkJY29udGludWU7CisKKwkJCX0gZWxzZSBpZiAoKHJlc3VsdCA9PSAwKSAmJiAhYXN5bmMgJiYgdHJhbnNmZXJyZWRfbGVuKSB7CisKKwkJCQl0aGlzcGFzcyAtPSB0cmFuc2ZlcnJlZF9sZW47CisJCQkJaWYgKHRoaXNwYXNzKSB7CisJCQkJCWlmIChzaXN1c2ItPnRyYW5zZmVyX2RtYV9vdXQpIHsKKwkJCQkJCS8qIElmIERNQSwgY29weSByZW1haW5pbmcKKwkJCQkJCSAqIHRvIGJlZ2lubmluZyBvZiBidWZmZXIKKwkJCQkJCSAqLworCQkJCQkJbWVtY3B5KGJ1ZmZlciwKKwkJCQkJCSAgICAgICBidWZmZXIgKyB0cmFuc2ZlcnJlZF9sZW4sCisJCQkJCQkgICAgICAgdGhpc3Bhc3MpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLyogSWYgbm90IERNQSwgc2ltcGx5IGluY3JlYXNlCisJCQkJCQkgKiB0aGUgcG9pbnRlcgorCQkJCQkJICovCisJCQkJCQlidWZmZXIgKz0gdHJhbnNmZXJyZWRfbGVuOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJfTsKKworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQkoKmJ5dGVzX3dyaXR0ZW4pICs9IHBhc3NzaXplOworCQljb3VudCAgICAgICAgICAgIC09IHBhc3NzaXplOworCisJCS8qIEZvcmNlIG5ldyBhbGxvY2F0aW9uIGluIG5leHQgaXRlcmF0aW9uICovCisJCWlmIChmcm9tdXNlciB8fCBmcm9ta2VybikKKwkJCWluZGV4ID0gLTE7CisKKwl9IHdoaWxlIChjb3VudCA+IDApOworCisJaWYgKGFzeW5jKSB7CisjaWZkZWYgU0lTVVNCX0RPTlRTWU5DCisJCSgqYnl0ZXNfd3JpdHRlbikgPSBsZW47CisJCS8qIFNvbWUgVVJCcy9idWZmZXJzIG1pZ2h0IGJlIGJ1c3kgKi8KKyNlbHNlCisJCXNpc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc2lzdXNiKTsKKwkJKCpieXRlc193cml0dGVuKSA9IHRyYW5zZmVycmVkX2xlbjsKKwkJLyogQWxsIFVSQnMgYW5kIGFsbCBidWZmZXJzIGFyZSBhdmFpbGFibGUgKi8KKyNlbmRpZgorCX0KKworCXJldHVybiAoKCpieXRlc193cml0dGVuKSA9PSBsZW4pID8gMCA6IC1FSU87Cit9CisKKy8qIFJlY2VpdmUgYSBidWxrIG1lc3NhZ2Ugb2YgdmFyaWFibGUgc2l6ZQorICoKKyAqIFRvIGNvcHkgdGhlIGRhdGEgdG8gdXNlcnNwYWNlLCBnaXZlIHBvaW50ZXIgdG8gInVzZXJidWZmZXIiLAorICogdG8gY29weSB0byBrZXJuZWwgbWVtb3J5LCBnaXZlICJrZXJuYnVmZmVyIi4gT25lIG9mIHRoZW0KKyAqIE1VU1QgYmUgc2V0LiAoVGhlcmUgaXMgbm8gdGVjaG5pcXVlIGZvciBsZXR0aW5nIHRoZSBjYWxsZXIKKyAqIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgaWJ1Zi4pCisgKgorICovCisKK3N0YXRpYyBpbnQgc2lzdXNiX3JlY3ZfYnVsa19tc2coc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgZXAsIGludCBsZW4sCisJCXZvaWQgKmtlcm5idWZmZXIsIGNoYXIgX191c2VyICp1c2VyYnVmZmVyLCBzc2l6ZV90ICpieXRlc19yZWFkLAorCQl1bnNpZ25lZCBpbnQgdGZsYWdzKQoreworCWludCByZXN1bHQgPSAwLCByZXRyeSwgY291bnQgPSBsZW47CisJaW50IGJ1ZnNpemUsIHRoaXNwYXNzLCB0cmFuc2ZlcnJlZF9sZW47CisJdW5zaWduZWQgaW50IHBpcGU7CisJY2hhciAqYnVmZmVyOworCisJKCpieXRlc19yZWFkKSA9IDA7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNpc3VzYiB8fCAhc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShzaXN1c2ItPnNpc3VzYl9kZXYsIGVwKTsKKwlidWZmZXIgPSBzaXN1c2ItPmlidWY7CisJYnVmc2l6ZSA9IHNpc3VzYi0+aWJ1ZnNpemU7CisKKwlyZXRyeSA9IDU7CisKKyNpZmRlZiBTSVNVU0JfRE9OVFNZTkMKKwlpZiAoIShzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHNpc3VzYikpKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCisJd2hpbGUgKGNvdW50ID4gMCkgeworCisJCWlmICghc2lzdXNiLT5zaXN1c2JfZGV2KQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJdGhpc3Bhc3MgPSAoYnVmc2l6ZSA8IGNvdW50KSA/IGJ1ZnNpemUgOiBjb3VudDsKKworCQlyZXN1bHQgPSBzaXN1c2JfYnVsa2luX21zZyhzaXN1c2IsCisJCQkJCSAgIHBpcGUsCisJCQkJCSAgIGJ1ZmZlciwKKwkJCQkJICAgdGhpc3Bhc3MsCisJCQkJCSAgICZ0cmFuc2ZlcnJlZF9sZW4sCisJCQkJCSAgIDUgKiBIWiwKKwkJCQkJICAgdGZsYWdzLAorCQkJCQkgICBzaXN1c2ItPnRyYW5zZmVyX2RtYV9pbik7CisKKwkJaWYgKHRyYW5zZmVycmVkX2xlbikKKwkJCXRoaXNwYXNzID0gdHJhbnNmZXJyZWRfbGVuOworCisJCWVsc2UgaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKSB7CisKKwkJCWlmICghcmV0cnktLSkKKwkJCQlyZXR1cm4gLUVUSU1FOworCisJCQljb250aW51ZTsKKworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlPOworCisKKwkJaWYgKHRoaXNwYXNzKSB7CisKKwkJCSgqYnl0ZXNfcmVhZCkgKz0gdGhpc3Bhc3M7CisJCQljb3VudCAgICAgICAgIC09IHRoaXNwYXNzOworCisJCQlpZiAodXNlcmJ1ZmZlcikgeworCisJCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYnVmZmVyLCBidWZmZXIsIHRoaXNwYXNzKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCQl1c2VyYnVmZmVyICs9IHRoaXNwYXNzOworCisJCQl9IGVsc2UgeworCisJCQkJbWVtY3B5KGtlcm5idWZmZXIsIGJ1ZmZlciwgdGhpc3Bhc3MpOworCQkJCWtlcm5idWZmZXIgKz0gdGhpc3Bhc3M7CisKKwkJCX0KKworCQl9CisKKwl9CisKKwlyZXR1cm4gKCgqYnl0ZXNfcmVhZCkgPT0gbGVuKSA/IDAgOiAtRUlPOworfQorCitzdGF0aWMgaW50IHNpc3VzYl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBsZW4sCisJCQkJCQlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCAqcGFja2V0KQoreworCWludCByZXQ7CisJc3NpemVfdCBieXRlc190cmFuc2ZlcnJlZCA9IDA7CisJX19sZTMyIHRtcDsKKworCWlmIChsZW4gPT0gNikKKwkJcGFja2V0LT5kYXRhID0gMDsKKworI2lmZGVmIFNJU1VTQl9ET05UU1lOQworCWlmICghKHNpc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc2lzdXNiKSkpCisJCXJldHVybiAxOworI2VuZGlmCisKKwkvKiBFdmVudHVhbGx5IGNvcnJlY3QgZW5kaWFubmVzcyAqLworCVNJU1VTQl9DT1JSRUNUX0VORElBTk5FU1NfUEFDS0VUKHBhY2tldCk7CisKKwkvKiAxLiBzZW5kIHRoZSBwYWNrZXQgKi8KKwlyZXQgPSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsIFNJU1VTQl9FUF9HRlhfT1VULCBsZW4sCisJCQkoY2hhciAqKXBhY2tldCwgTlVMTCwgMCwgJmJ5dGVzX3RyYW5zZmVycmVkLCAwLCAwKTsKKworCWlmICgocmV0ID09IDApICYmIChsZW4gPT0gNikpIHsKKworCQkvKiAyLiBpZiBwYWNrZXQgbGVuID09IDYsIGl0IG1lYW5zIHdlIHJlYWQsIHNvIHdhaXQgZm9yIDMyYml0CisJCSAqICAgIHJldHVybiB2YWx1ZSBhbmQgd3JpdGUgaXQgdG8gcGFja2V0LT5kYXRhCisJCSAqLworCQlyZXQgPSBzaXN1c2JfcmVjdl9idWxrX21zZyhzaXN1c2IsIFNJU1VTQl9FUF9HRlhfSU4sIDQsCisJCQkJKGNoYXIgKikmdG1wLCBOVUxMLCAmYnl0ZXNfdHJhbnNmZXJyZWQsIDApOworCisJCXBhY2tldC0+ZGF0YSA9IGxlMzJfdG9fY3B1KHRtcCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGxlbiwKKwkJCQkJc3RydWN0IHNpc3VzYl9wYWNrZXQgKnBhY2tldCwKKwkJCQkJdW5zaWduZWQgaW50IHRmbGFncykKK3sKKwlpbnQgcmV0OworCXNzaXplX3QgYnl0ZXNfdHJhbnNmZXJyZWQgPSAwOworCV9fbGUzMiB0bXA7CisKKwlpZiAobGVuID09IDYpCisJCXBhY2tldC0+ZGF0YSA9IDA7CisKKyNpZmRlZiBTSVNVU0JfRE9OVFNZTkMKKwlpZiAoIShzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHNpc3VzYikpKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJLyogRXZlbnR1YWxseSBjb3JyZWN0IGVuZGlhbm5lc3MgKi8KKwlTSVNVU0JfQ09SUkVDVF9FTkRJQU5ORVNTX1BBQ0tFVChwYWNrZXQpOworCisJLyogMS4gc2VuZCB0aGUgcGFja2V0ICovCisJcmV0ID0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLCBTSVNVU0JfRVBfQlJJREdFX09VVCwgbGVuLAorCQkJKGNoYXIgKilwYWNrZXQsIE5VTEwsIDAsICZieXRlc190cmFuc2ZlcnJlZCwgdGZsYWdzLCAwKTsKKworCWlmICgocmV0ID09IDApICYmIChsZW4gPT0gNikpIHsKKworCQkvKiAyLiBpZiBwYWNrZXQgbGVuID09IDYsIGl0IG1lYW5zIHdlIHJlYWQsIHNvIHdhaXQgZm9yIDMyYml0CisJCSAqICAgIHJldHVybiB2YWx1ZSBhbmQgd3JpdGUgaXQgdG8gcGFja2V0LT5kYXRhCisJCSAqLworCQlyZXQgPSBzaXN1c2JfcmVjdl9idWxrX21zZyhzaXN1c2IsIFNJU1VTQl9FUF9CUklER0VfSU4sIDQsCisJCQkJKGNoYXIgKikmdG1wLCBOVUxMLCAmYnl0ZXNfdHJhbnNmZXJyZWQsIDApOworCisJCXBhY2tldC0+ZGF0YSA9IGxlMzJfdG9fY3B1KHRtcCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogYWNjZXNzIHZpZGVvIG1lbW9yeSBhbmQgbW1pbyAocmV0dXJuIDAgb24gc3VjY2VzcykgKi8KKworLyogTG93IGxldmVsICovCisKKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXNzdW1lIGJlaW5nIHVzZWQgdG8gdHJhbnNmZXIgYnl0ZSwgd29yZCwKKyAqIGxvbmcgZXRjLgorICogVGhpcyBtZWFucyB0aGF0IHRoZXkgYXNzdW1lICJkYXRhIiBpbiBtYWNoaW5lIGVuZGlhbm5lc3MgZm9ybWF0LgorICovCisKK3N0YXRpYyBpbnQgc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldDsKKworCXBhY2tldC5oZWFkZXIgID0gKDEgPDwgKGFkZHIgJiAzKSkgfCAodHlwZSA8PCA2KTsKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKwlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgKChhZGRyICYgMykgPDwgMyk7CisJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTE2IGRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQgPSAwOworCisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisKKwlzd2l0Y2ggKGFkZHIgJiAzKSB7CisJCWNhc2UgMDoKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwMzsKKwkJCXBhY2tldC5kYXRhICAgPSAodTMyKWRhdGE7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDA2OworCQkJcGFja2V0LmRhdGEgICA9ICh1MzIpZGF0YSA8PCA4OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwYzsKKwkJCXBhY2tldC5kYXRhICAgPSAodTMyKWRhdGEgPDwgMTY7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDA4OworCQkJcGFja2V0LmRhdGEgICA9ICh1MzIpZGF0YSA8PCAyNDsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwMTsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcGFja2V0LmRhdGEgICA9ICh1MzIpZGF0YSA+PiA4OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl93cml0ZV9tZW1pb18yNGJpdChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCA9IDA7CisKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKworCXN3aXRjaCAoYWRkciAmIDMpIHsKKwkJY2FzZSAwOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwNzsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSAmIDB4MDBmZmZmZmY7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwZTsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCA4OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGM7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgMTY7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAxOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IChkYXRhID4+IDE2KSAmIDB4MDBmZjsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwODsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCAyNDsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDM7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXBhY2tldC5kYXRhICAgID0gKGRhdGEgPj4gOCkgJiAweGZmZmY7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3dyaXRlX21lbWlvX2xvbmcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQgPSAwOworCisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisKKwlzd2l0Y2ggKGFkZHIgJiAzKSB7CisJCWNhc2UgMDoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGY7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGE7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwZTsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCA4OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMTsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhID4+IDI0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBjOworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8IDE2OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMzsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhID4+IDE2OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA4OworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8IDI0OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwNzsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhID4+IDg7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoZSB4eHhfYnVsayByb3V0aW5lcyBjb3B5IGEgYnVmZmVyIG9mIHZhcmlhYmxlIHNpemUuIFRoZXkgdHJlYXQgdGhlCisgKiBidWZmZXIgYXMgY2hhcnMsIHRoZXJlZm9yZSBsc2IvbXNiIGhhcyB0byBiZSBjb3JyZWN0ZWQgaWYgdXNpbmcgdGhlCisgKiBieXRlL3dvcmQvbG9uZy9ldGMgcm91dGluZXMgZm9yIHNwZWVkLXVwCisgKgorICogSWYgZGF0YSBpcyBmcm9tIHVzZXJsYW5kLCBzZXQgInVzZXJidWZmZXIiIChhbmQgY2xlYXIgImtlcm5idWZmZXIiKSwKKyAqIGlmIGRhdGEgaXMgaW4ga2VybmVsIHNwYWNlLCBzZXQgImtlcm5idWZmZXIiIChhbmQgY2xlYXIgInVzZXJidWZmZXIiKTsKKyAqIGlmIG5laXRoZXIgImtlcm5idWZmZXIiIG5vciAidXNlcmJ1ZmZlciIgYXJlIGdpdmVuLCBpdCBpcyBhc3N1bWVkCisgKiB0aGF0IHRoZSBkYXRhIGFscmVhZHkgaXMgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlciAic2lzdXNiLT5vYnVmW2luZGV4XSIuCisgKi8KKworc3RhdGljIGludCBzaXN1c2Jfd3JpdGVfbWVtX2J1bGsoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCB1MzIgYWRkciwKKwkJCQljaGFyICprZXJuYnVmZmVyLCBpbnQgbGVuZ3RoLAorCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmZmVyLCBpbnQgaW5kZXgsCisJCQkJc3NpemVfdCAqYnl0ZXNfd3JpdHRlbikKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50ICByZXQgPSAwOworCXN0YXRpYyBpbnQgbXNnY291bnQgPSAwOworCXU4ICAgc3dhcDgsIGZyb21rZXJuID0ga2VybmJ1ZmZlciA/IDEgOiAwOworCXUxNiAgc3dhcDE2OworCXUzMiAgc3dhcDMyLCBmbGFnID0gKGxlbmd0aCA+PiAyOCkgJiAxOworCWNoYXIgYnVmWzRdOworCisJLyogaWYgbmVpdGhlciBrZXJuYnVmZmVyIG5vdCB1c2VyYnVmZmVyIGFyZSBnaXZlbiwgYXNzdW1lCisJICogZGF0YSBpbiBvYnVmCisJICovCisJaWYgKCFmcm9ta2VybiAmJiAhdXNlcmJ1ZmZlcikKKwkJa2VybmJ1ZmZlciA9IHNpc3VzYi0+b2J1ZltpbmRleF07CisKKwkoKmJ5dGVzX3dyaXR0ZW4gPSAwKTsKKworCWxlbmd0aCAmPSAweDAwZmZmZmZmOworCisJd2hpbGUgKGxlbmd0aCkgeworCisJICAgIHN3aXRjaCAobGVuZ3RoKSB7CisKKwkJY2FzZSAwOgorCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDE6CisJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCWlmIChnZXRfdXNlcihzd2FwOCwgKHU4IF9fdXNlciAqKXVzZXJidWZmZXIpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0gZWxzZQorCQkJCXN3YXA4ID0ga2VybmJ1ZmZlclswXTsKKworCQkJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyLCBzd2FwOCk7CisKKwkJCWlmICghcmV0KQorCQkJCSgqYnl0ZXNfd3JpdHRlbikrKzsKKworCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDI6CisJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCWlmIChnZXRfdXNlcihzd2FwMTYsICh1MTYgX191c2VyICopdXNlcmJ1ZmZlcikpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJfSBlbHNlCisJCQkJc3dhcDE2ID0gKGtlcm5idWZmZXJbMF0gPDwgOCkgfCBrZXJuYnVmZmVyWzFdOworCisJCQlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHIsCisJCQkJCQkJc3dhcDE2KTsKKworCQkJaWYgKCFyZXQpCisJCQkJKCpieXRlc193cml0dGVuKSArPSAyOworCisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgMzoKKwkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVzZXJidWZmZXIsIDMpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCXN3YXAzMiA9IChidWZbMF0gPDwgMTYpIHwKKwkJCQkJIChidWZbMV0gPDwgIDgpIHwKKwkJCQkJIGJ1ZlsyXTsKKwkJCX0gZWxzZQorCQkJCXN3YXAzMiA9IChrZXJuYnVmZmVyWzBdIDw8IDE2KSB8CisJCQkJCSAoa2VybmJ1ZmZlclsxXSA8PCAgOCkgfAorCQkJCQkga2VybmJ1ZmZlclsyXTsKKworCQkJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvXzI0Yml0KHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkciwKKwkJCQkJCQlzd2FwMzIpOworCisJCQlpZiAoIXJldCkKKwkJCQkoKmJ5dGVzX3dyaXR0ZW4pICs9IDM7CisKKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSA0OgorCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlpZiAoZ2V0X3VzZXIoc3dhcDMyLCAodTMyIF9fdXNlciAqKXVzZXJidWZmZXIpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0gZWxzZQorCQkJCXN3YXAzMiA9IChrZXJuYnVmZmVyWzBdIDw8IDI0KSB8CisJCQkJCSAoa2VybmJ1ZmZlclsxXSA8PCAxNikgfAorCQkJCQkgKGtlcm5idWZmZXJbMl0gPDwgIDgpIHwKKwkJCQkJIGtlcm5idWZmZXJbM107CisKKwkJCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb19sb25nKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkciwKKwkJCQkJCQlzd2FwMzIpOworCQkJaWYgKCFyZXQpCisJCQkJKCpieXRlc193cml0dGVuKSArPSA0OworCisJCQlyZXR1cm4gcmV0OworCisJCWRlZmF1bHQ6CisJCQlpZiAoKGxlbmd0aCAmIH4zKSA+IDB4MTAwMDApIHsKKworCQkJICAgcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQkgICBwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxZDQ7CisJCQkgICBwYWNrZXQuZGF0YSAgICA9IGFkZHI7CisJCQkgICByZXQgPSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJICAgcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQkgICBwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxZDA7CisJCQkgICBwYWNrZXQuZGF0YSAgICA9IChsZW5ndGggJiB+Myk7CisJCQkgICByZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCSAgIHBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJICAgcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWMwOworCQkJICAgcGFja2V0LmRhdGEgICAgPSBmbGFnIHwgMHgxNjsKKwkJCSAgIHJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJICAgaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfTEJVTEtfT1VULAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJTlVMTCwgdXNlcmJ1ZmZlciwgMCwKKwkJCQkJCQlieXRlc193cml0dGVuLCAwLCAxKTsKKwkJCQl1c2VyYnVmZmVyICs9ICgqYnl0ZXNfd3JpdHRlbik7CisJCQkgICB9IGVsc2UgaWYgKGZyb21rZXJuKSB7CisJCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0xCVUxLX09VVCwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCWtlcm5idWZmZXIsIE5VTEwsIDAsCisJCQkJCQkJYnl0ZXNfd3JpdHRlbiwgMCwgMSk7CisJCQkJa2VybmJ1ZmZlciArPSAoKmJ5dGVzX3dyaXR0ZW4pOworCQkJICAgfSBlbHNlIHsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9MQlVMS19PVVQsCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlOVUxMLCBOVUxMLCBpbmRleCwKKwkJCQkJCQlieXRlc193cml0dGVuLCAwLCAxKTsKKwkJCQlrZXJuYnVmZmVyICs9ICgoKmJ5dGVzX3dyaXR0ZW4pICYKKwkJCQkJCShzaXN1c2ItPm9idWZzaXplLTEpKTsKKwkJCSAgIH0KKworCQkJfSBlbHNlIHsKKworCQkJICAgcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQkgICBwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxOTQ7CisJCQkgICBwYWNrZXQuZGF0YSAgICA9IGFkZHI7CisJCQkgICByZXQgPSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkgICAJCQkJCSZwYWNrZXQsIDApOworCQkJICAgcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQkgICBwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxOTA7CisJCQkgICBwYWNrZXQuZGF0YSAgICA9IChsZW5ndGggJiB+Myk7CisJCQkgICByZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJICAgCQkJCQkmcGFja2V0LCAwKTsKKwkJCSAgIGlmIChzaXN1c2ItPmZsYWdiMCAhPSAweDE2KSB7CisJCQkJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQkJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMTgwOworCQkJCXBhY2tldC5kYXRhICAgID0gZmxhZyB8IDB4MTY7CisJCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQkJc2lzdXNiLT5mbGFnYjAgPSAweDE2OworCQkJICAgfQorCQkJICAgaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfQlVMS19PVVQsCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlOVUxMLCB1c2VyYnVmZmVyLCAwLAorCQkJCQkJCWJ5dGVzX3dyaXR0ZW4sIDAsIDEpOworCQkJCXVzZXJidWZmZXIgKz0gKCpieXRlc193cml0dGVuKTsKKwkJCSAgIH0gZWxzZSBpZiAoZnJvbWtlcm4pIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfQlVMS19PVVQsCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlrZXJuYnVmZmVyLCBOVUxMLCAwLAorCQkJCQkJCWJ5dGVzX3dyaXR0ZW4sIDAsIDEpOworCQkJCWtlcm5idWZmZXIgKz0gKCpieXRlc193cml0dGVuKTsKKwkJCSAgIH0gZWxzZSB7CisJCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0JVTEtfT1VULAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJTlVMTCwgTlVMTCwgaW5kZXgsCisJCQkJCQkJYnl0ZXNfd3JpdHRlbiwgMCwgMSk7CisJCQkJa2VybmJ1ZmZlciArPSAoKCpieXRlc193cml0dGVuKSAmCisJCQkJCQkoc2lzdXNiLT5vYnVmc2l6ZS0xKSk7CisJCQkgICB9CisJCQl9CisJCQlpZiAocmV0KSB7CisJCQkJbXNnY291bnQrKzsKKwkJCQlpZiAobXNnY291bnQgPCA1MDApCisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJInNpc3VzYnZnYVslZF06IFdyb3RlICVaZCBvZiAiCisJCQkJCQkiJWQgYnl0ZXMsIGVycm9yICVkXG4iLAorCQkJCQkJc2lzdXNiLT5taW5vciwgKmJ5dGVzX3dyaXR0ZW4sCisJCQkJCQlsZW5ndGgsIHJldCk7CisJCQkJZWxzZSBpZiAobXNnY291bnQgPT0gNTAwKQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSJzaXN1c2J2Z2FbJWRdOiBUb28gbWFueSBlcnJvcnMiCisJCQkJCQkiLCBsb2dnaW5nIHN0b3BwZWRcbiIsCisJCQkJCQlzaXN1c2ItPm1pbm9yKTsKKwkJCX0KKwkJCWFkZHIgKz0gKCpieXRlc193cml0dGVuKTsKKwkJCWxlbmd0aCAtPSAoKmJ5dGVzX3dyaXR0ZW4pOworCSAgICB9CisKKwkgICAgaWYgKHJldCkKKwkgICAgCWJyZWFrOworCisJfQorCisJcmV0dXJuIHJldCA/IC1FSU8gOiAwOworfQorCitzdGF0aWMgaW50IHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTggKmRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQ7CisKKwlDTEVBUlBBQ0tFVCgmcGFja2V0KTsKKwlwYWNrZXQuaGVhZGVyICA9ICgxIDw8IChhZGRyICYgMykpIHwgKHR5cGUgPDwgNik7CisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJKmRhdGEgPSAodTgpKHBhY2tldC5kYXRhID4+ICgoYWRkciAmIDMpIDw8IDMpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl9yZWFkX21lbWlvX3dvcmQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTE2ICpkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCUNMRUFSUEFDS0VUKCZwYWNrZXQpOworCisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisKKwlzd2l0Y2ggKGFkZHIgJiAzKSB7CisJCWNhc2UgMDoKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwMzsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSAodTE2KShwYWNrZXQuZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDA2OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9ICh1MTYpKHBhY2tldC5kYXRhID4+IDgpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwYzsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSAodTE2KShwYWNrZXQuZGF0YSA+PiAxNik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcGFja2V0LmhlYWRlciA9ICh0eXBlIDw8IDYpIHwgMHgwMDA4OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9ICh1MTYpKHBhY2tldC5kYXRhID4+IDI0KTsKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwMTsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgfD0gKHUxNikocGFja2V0LmRhdGEgPDwgOCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2JfcmVhZF9tZW1pb18yNGJpdChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1MzIgKmRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQgPSAwOworCisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisKKwlzd2l0Y2ggKGFkZHIgJiAzKSB7CisJCWNhc2UgMDoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDc7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgJiAweDAwZmZmZmZmOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGU7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgPj4gODsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBjOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhID4+IDE2OworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMTsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgfD0gKChwYWNrZXQuZGF0YSAmIDB4ZmYpIDw8IDE2KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA4OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhID4+IDI0OworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMzsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgfD0gKChwYWNrZXQuZGF0YSAmIDB4ZmZmZikgPDwgOCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2JfcmVhZF9tZW1pb19sb25nKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHUzMiAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCA9IDA7CisKKwlwYWNrZXQuYWRkcmVzcyA9IGFkZHIgJiB+MzsKKworCXN3aXRjaCAoYWRkciAmIDMpIHsKKwkJY2FzZSAwOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwZjsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBlOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhID4+IDg7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAxOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSB8PSAocGFja2V0LmRhdGEgPDwgMjQpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGM7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgPj4gMTY7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAzOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSB8PSAocGFja2V0LmRhdGEgPDwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDg7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGEgPj4gMjQ7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA3OworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSB8PSAocGFja2V0LmRhdGEgPDwgOCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2JfcmVhZF9tZW1fYnVsayhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHUzMiBhZGRyLAorCQkJCWNoYXIgKmtlcm5idWZmZXIsIGludCBsZW5ndGgsCisJCQkJY2hhciBfX3VzZXIgKnVzZXJidWZmZXIsIHNzaXplX3QgKmJ5dGVzX3JlYWQpCit7CisJaW50IHJldCA9IDA7CisJY2hhciBidWZbNF07CisJdTE2IHN3YXAxNjsKKwl1MzIgc3dhcDMyOworCisJKCpieXRlc19yZWFkID0gMCk7CisKKwlsZW5ndGggJj0gMHgwMGZmZmZmZjsKKworCXdoaWxlIChsZW5ndGgpIHsKKworCSAgICBzd2l0Y2ggKGxlbmd0aCkgeworCisJCWNhc2UgMDoKKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSAxOgorCisJCQlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQkJYWRkciwgJmJ1ZlswXSk7CisJCQlpZiAoIXJldCkgeworCQkJCSgqYnl0ZXNfcmVhZCkrKzsKKwkJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCQlpZiAocHV0X3VzZXIoYnVmWzBdLAorCQkJCQkJKHU4IF9fdXNlciAqKXVzZXJidWZmZXIpKSB7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWtlcm5idWZmZXJbMF0gPSBidWZbMF07CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDI6CisJCQlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fd29yZChzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQkJYWRkciwgJnN3YXAxNik7CisJCQlpZiAoIXJldCkgeworCQkJCSgqYnl0ZXNfcmVhZCkgKz0gMjsKKwkJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCQlpZiAocHV0X3VzZXIoc3dhcDE2LAorCQkJCQkJKHUxNiBfX3VzZXIgKil1c2VyYnVmZmVyKSkKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCX0gZWxzZSB7CisJCQkJCWtlcm5idWZmZXJbMF0gPSBzd2FwMTYgPj4gODsKKwkJCQkJa2VybmJ1ZmZlclsxXSA9IHN3YXAxNiAmIDB4ZmY7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDM6CisJCQlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fMjRiaXQoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJCWFkZHIsICZzd2FwMzIpOworCQkJaWYgKCFyZXQpIHsKKwkJCQkoKmJ5dGVzX3JlYWQpICs9IDM7CisJCQkJYnVmWzBdID0gKHN3YXAzMiA+PiAxNikgJiAweGZmOworCQkJCWJ1ZlsxXSA9IChzd2FwMzIgPj4gOCkgJiAweGZmOworCQkJCWJ1ZlsyXSA9IHN3YXAzMiAmIDB4ZmY7CisJCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYnVmZmVyLCAmYnVmWzBdLCAzKSkKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCX0gZWxzZSB7CisJCQkJCWtlcm5idWZmZXJbMF0gPSBidWZbMF07CisJCQkJCWtlcm5idWZmZXJbMV0gPSBidWZbMV07CisJCQkJCWtlcm5idWZmZXJbMl0gPSBidWZbMl07CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHJldDsKKworCQlkZWZhdWx0OgorCQkJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX2xvbmcoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJCWFkZHIsICZzd2FwMzIpOworCQkJaWYgKCFyZXQpIHsKKwkJCQkoKmJ5dGVzX3JlYWQpICs9IDQ7CisJCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQkJaWYgKHB1dF91c2VyKHN3YXAzMiwKKwkJCQkJCSh1MzIgX191c2VyICopdXNlcmJ1ZmZlcikpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCQl1c2VyYnVmZmVyICs9IDQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJa2VybmJ1ZmZlclswXSA9IChzd2FwMzIgPj4gMjQpICYgMHhmZjsKKwkJCQkJa2VybmJ1ZmZlclsxXSA9IChzd2FwMzIgPj4gMTYpICYgMHhmZjsKKwkJCQkJa2VybmJ1ZmZlclsyXSA9IChzd2FwMzIgPj4gOCkgJiAweGZmOworCQkJCQlrZXJuYnVmZmVyWzNdID0gc3dhcDMyICYgMHhmZjsKKwkJCQkJa2VybmJ1ZmZlciArPSA0OworCQkJCX0KKwkJCQlhZGRyICs9IDQ7CisJCQkJbGVuZ3RoIC09IDQ7CisJCQl9CisjaWYgMAkJLyogVGhhdCBkb2VzIG5vdCB3b3JrLCBhcyBFUCAyIGlzIGFuIE9VVCBFUCEgKi8KKwkJZGVmYXVsdDoKKwkJCUNMRUFSUEFDS0VUKCZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxYTA7CisJCQlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDAwMDY7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWIwOworCQkJcGFja2V0LmRhdGEgICAgPSAobGVuZ3RoICYgfjMpIHwgMHg0MDAwMDAwMDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCQlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxYjQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IGFkZHI7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWE0OworCQkJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwMDAxOworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCXJldCB8PSBzaXN1c2JfcmVjdl9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9CVUxLX0lOLAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJTlVMTCwgdXNlcmJ1ZmZlciwKKwkJCQkJCQlieXRlc19yZWFkLCAwKTsKKwkJCQlpZiAoIXJldCkgdXNlcmJ1ZmZlciArPSAoKmJ5dGVzX3JlYWQpOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3JlY3ZfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfQlVMS19JTiwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCWtlcm5idWZmZXIsIE5VTEwsCisJCQkJCQkJYnl0ZXNfcmVhZCwgMCk7CisJCQkJaWYgKCFyZXQpIGtlcm5idWZmZXIgKz0gKCpieXRlc19yZWFkKTsKKwkJCX0KKwkJCWFkZHIgKz0gKCpieXRlc19yZWFkKTsKKwkJCWxlbmd0aCAtPSAoKmJ5dGVzX3JlYWQpOworI2VuZGlmCisJICAgIH0KKworCSAgICBpZiAocmV0KQorCSAgICAJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogSGlnaCBsZXZlbDogR2Z4IChpbmRleGVkKSByZWdpc3RlciBhY2Nlc3MgKi8KKworc3RhdGljIGludAorc2lzdXNiX3NldGlkeHJlZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBwb3J0LCB1OCBpbmRleCwgdTggZGF0YSkKK3sKKwlpbnQgcmV0OworCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQsIGluZGV4KTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCArIDEsIGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9nZXRpZHhyZWcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcG9ydCwgdTggaW5kZXgsIHU4ICpkYXRhKQoreworCWludCByZXQ7CisJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCwgaW5kZXgpOworCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQgKyAxLCBkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0aWR4cmVnYW5kb3Ioc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcG9ydCwgdTggaWR4LAorCQkJCQkJCXU4IG15YW5kLCB1OCBteW9yKQoreworCWludCByZXQ7CisJdTggdG1wOworCisJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCwgaWR4KTsKKwlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0ICsgMSwgJnRtcCk7CisJdG1wICY9IG15YW5kOworCXRtcCB8PSBteW9yOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0ICsgMSwgdG1wKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0aWR4cmVnbWFzayhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBwb3J0LCB1OCBpZHgsCisJCQkJCQkJdTggZGF0YSwgdTggbWFzaykKK3sKKwlpbnQgcmV0OworCXU4IHRtcDsKKwlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0LCBpZHgpOworCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQgKyAxLCAmdG1wKTsKKwl0bXAgJj0gfihtYXNrKTsKKwl0bXAgfD0gKGRhdGEgJiBtYXNrKTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCArIDEsIHRtcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldGlkeHJlZ29yKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHBvcnQsIHU4IGluZGV4LCB1OCBteW9yKQoreworCXJldHVybihzaXN1c2Jfc2V0aWR4cmVnYW5kb3Ioc2lzdXNiLCBwb3J0LCBpbmRleCwgMHhmZiwgbXlvcikpOworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0aWR4cmVnYW5kKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHBvcnQsIHU4IGlkeCwgdTggbXlhbmQpCit7CisJcmV0dXJuKHNpc3VzYl9zZXRpZHhyZWdhbmRvcihzaXN1c2IsIHBvcnQsIGlkeCwgbXlhbmQsIDB4MDApKTsKK30KKworLyogYWNjZXNzIHBjaSBjb25maWcgcmVnaXN0ZXJzIChyZWcgbnVtYmVycyAwLCA0LCA4LCBldGMpICovCisKK3N0YXRpYyBpbnQKK3Npc3VzYl93cml0ZV9wY2lfY29uZmlnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHJlZ251bSwgdTMyIGRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQ7CisKKwlwYWNrZXQuaGVhZGVyID0gMHgwMDhmOworCXBhY2tldC5hZGRyZXNzID0gcmVnbnVtIHwgMHgxMDAwMDsKKwlwYWNrZXQuZGF0YSA9IGRhdGE7CisJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9yZWFkX3BjaV9jb25maWcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcmVnbnVtLCB1MzIgKmRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQ7CisKKwlwYWNrZXQuaGVhZGVyID0gMHgwMDhmOworCXBhY2tldC5hZGRyZXNzID0gKHUzMilyZWdudW0gfCAweDEwMDAwOworCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCSpkYXRhID0gcGFja2V0LmRhdGE7CisJcmV0dXJuIHJldDsKK30KKworLyogQ2xlYXIgdmlkZW8gUkFNICovCisKK3N0YXRpYyBpbnQKK3Npc3VzYl9jbGVhcl92cmFtKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdTMyIGFkZHJlc3MsIGludCBsZW5ndGgpCit7CisJaW50IHJldCwgaTsKKwlzc2l6ZV90IGo7CisKKwlpZiAoYWRkcmVzcyA8IHNpc3VzYi0+dnJhbWJhc2UpCisJCXJldHVybiAxOworCisJaWYgKGFkZHJlc3MgPj0gc2lzdXNiLT52cmFtYmFzZSArIHNpc3VzYi0+dnJhbXNpemUpCisJCXJldHVybiAxOworCisJaWYgKGFkZHJlc3MgKyBsZW5ndGggPiBzaXN1c2ItPnZyYW1iYXNlICsgc2lzdXNiLT52cmFtc2l6ZSkKKwkJbGVuZ3RoID0gc2lzdXNiLT52cmFtYmFzZSArIHNpc3VzYi0+dnJhbXNpemUgLSBhZGRyZXNzOworCisJaWYgKGxlbmd0aCA8PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIGFsbG9jYXRlIGZyZWUgYnVmZmVyL3VyYiBhbmQgY2xlYXIgdGhlIGJ1ZmZlciAqLworCWlmICgoaSA9IHNpc3VzYl9hbGxvY19vdXRidWYoc2lzdXNiKSkgPCAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtc2V0KHNpc3VzYi0+b2J1ZltpXSwgMCwgc2lzdXNiLT5vYnVmc2l6ZSk7CisKKwkvKiBXZSBjYW4gd3JpdGUgYSBsZW5ndGggPiBidWZmZXIgc2l6ZSBoZXJlLiBUaGUgYnVmZmVyCisJICogZGF0YSB3aWxsIHNpbXBseSBiZSByZS11c2VkIChsaWtlIGEgcmluZy1idWZmZXIpLgorCSAqLworCXJldCA9IHNpc3VzYl93cml0ZV9tZW1fYnVsayhzaXN1c2IsIGFkZHJlc3MsIE5VTEwsIGxlbmd0aCwgTlVMTCwgaSwgJmopOworCisJLyogRnJlZSB0aGUgYnVmZmVyL3VyYiAqLworCXNpc3VzYl9mcmVlX291dGJ1ZihzaXN1c2IsIGkpOworCisJcmV0dXJuIHJldDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgZ3JhcGhpY3MgY29yZSAocmV0dXJuIDAgb24gc3VjY2VzcykKKyAqIFRoaXMgcmVzZXRzIHRoZSBncmFwaGljcyBoYXJkd2FyZSBhbmQgcHV0cyBpdCBpbnRvCisgKiBhIGRlZmluZWQgbW9kZSAoNjQweDQ4MEA2MEh6KQorICovCisKKyNkZWZpbmUgR0VUUkVHKHIsZCkgICAgIHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgciwgZCkKKyNkZWZpbmUgU0VUUkVHKHIsZCkJc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgciwgZCkKKyNkZWZpbmUgU0VUSVJFRyhyLGksZCkJc2lzdXNiX3NldGlkeHJlZyhzaXN1c2IsIHIsIGksIGQpCisjZGVmaW5lIEdFVElSRUcocixpLGQpICBzaXN1c2JfZ2V0aWR4cmVnKHNpc3VzYiwgciwgaSwgZCkKKyNkZWZpbmUgU0VUSVJFR09SKHIsaSxvKQlzaXN1c2Jfc2V0aWR4cmVnb3Ioc2lzdXNiLCByLCBpLCBvKQorI2RlZmluZSBTRVRJUkVHQU5EKHIsaSxhKQlzaXN1c2Jfc2V0aWR4cmVnYW5kKHNpc3VzYiwgciwgaSwgYSkKKyNkZWZpbmUgU0VUSVJFR0FORE9SKHIsaSxhLG8pCXNpc3VzYl9zZXRpZHhyZWdhbmRvcihzaXN1c2IsIHIsIGksIGEsIG8pCisjZGVmaW5lIFJFQURMKGEsZCkJc2lzdXNiX3JlYWRfbWVtaW9fbG9uZyhzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwgYSwgZCkKKyNkZWZpbmUgV1JJVEVMKGEsZCkgCXNpc3VzYl93cml0ZV9tZW1pb19sb25nKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLCBhLCBkKQorI2RlZmluZSBSRUFEQihhLGQpCXNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sIGEsIGQpCisjZGVmaW5lIFdSSVRFQihhLGQpIAlzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwgYSwgZCkKKworc3RhdGljIGludAorc2lzdXNiX3RyaWdnZXJzcjE2KHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdTggcmFtdHlwZSkKK3sKKwlpbnQgcmV0OworCXU4IHRtcDg7CisKKwlyZXQgPSBHRVRJUkVHKFNJU1NSLCAweDE2LCAmdG1wOCk7CisJaWYgKHJhbXR5cGUgPD0gMSkgeworCQl0bXA4ICY9IDB4M2Y7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCB8PSAweDgwOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJfSBlbHNlIHsKKwkJdG1wOCB8PSAweGMwOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggJj0gMHgwZjsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4IHw9IDB4ODA7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCAmPSAweDBmOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggfD0gMHhkMDsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4ICY9IDB4MGY7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCB8PSAweGEwOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9nZXRidXN3aWR0aChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCAqYncsIGludCAqY2hhYikKK3sKKwlpbnQgcmV0OworCXU4ICByYW10eXBlLCBkb25lID0gMDsKKwl1MzIgdDAsIHQxLCB0MiwgdDM7CisJdTMyIHJhbXB0ciA9IFNJU1VTQl9QQ0lfTUVNQkFTRTsKKworCXJldCA9IEdFVElSRUcoU0lTU1IsIDB4M2EsICZyYW10eXBlKTsKKwlyYW10eXBlICY9IDM7CisKKwlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxMywgMHgwMCk7CisKKwlpZiAocmFtdHlwZSA8PSAxKSB7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE0LCAweDEyKTsKKwkJcmV0IHw9IFNFVElSRUdBTkQoU0lTU1IsIDB4MTUsIDB4ZWYpOworCX0gZWxzZSB7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE0LCAweDAyKTsKKwl9CisKKwlyZXQgfD0gc2lzdXNiX3RyaWdnZXJzcjE2KHNpc3VzYiwgcmFtdHlwZSk7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgMCwgMHgwMTIzNDU2Nyk7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgNCwgMHg0NTY3ODlhYik7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgOCwgMHg4OWFiY2RlZik7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAxMiwgMHhjZGVmMDEyMyk7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAxNiwgMHg1NTU1NTU1NSk7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyMCwgMHg1NTU1NTU1NSk7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyNCwgMHhmZmZmZmZmZik7CisJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyOCwgMHhmZmZmZmZmZik7CisJcmV0IHw9IFJFQURMKHJhbXB0ciArICAwLCAmdDApOworCXJldCB8PSBSRUFETChyYW1wdHIgKyAgNCwgJnQxKTsKKwlyZXQgfD0gUkVBREwocmFtcHRyICsgIDgsICZ0Mik7CisJcmV0IHw9IFJFQURMKHJhbXB0ciArIDEyLCAmdDMpOworCisJaWYgKHJhbXR5cGUgPD0gMSkgeworCisJCSpjaGFiID0gMDsgKmJ3ID0gNjQ7CisKKwkJaWYgKCh0MyAhPSAweGNkZWYwMTIzKSB8fCAodDIgIT0gMHg4OWFiY2RlZikpIHsKKwkJCWlmICgodDEgPT0gMHg0NTY3ODlhYikgJiYgKHQwID09IDB4MDEyMzQ1NjcpKSB7CisJCQkJKmNoYWIgPSAwOyAqYncgPSA2NDsKKwkJCQlyZXQgfD0gU0VUSVJFR0FORChTSVNTUiwgMHgxNCwgMHhmZCk7CisJCQl9CisJCX0KKwkJaWYgKCh0MSAhPSAweDQ1Njc4OWFiKSB8fCAodDAgIT0gMHgwMTIzNDU2NykpIHsKKwkJCSpjaGFiID0gMTsgKmJ3ID0gNjQ7CisJCQlyZXQgfD0gU0VUSVJFR0FORE9SKFNJU1NSLCAweDE0LCAweGZjLDB4MDEpOworCisJCQlyZXQgfD0gc2lzdXNiX3RyaWdnZXJzcjE2KHNpc3VzYiwgcmFtdHlwZSk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICAwLCAweDg5YWJjZGVmKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgIDQsIDB4Y2RlZjAxMjMpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgOCwgMHg1NTU1NTU1NSk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDEyLCAweDU1NTU1NTU1KTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMTYsIDB4YWFhYWFhYWEpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyMCwgMHhhYWFhYWFhYSk7CisJCQlyZXQgfD0gUkVBREwocmFtcHRyICsgIDQsICZ0MSk7CisKKwkJCWlmICh0MSAhPSAweGNkZWYwMTIzKSB7CisJCQkJKmJ3ID0gMzI7CisJCQkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgxNSwgMHgxMCk7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisKKwkJKmNoYWIgPSAwOyAqYncgPSA2NDsJLyogZGVmYXVsdDogY2hhLCBidyA9IDY0ICovCisKKwkJZG9uZSA9IDA7CisKKwkJaWYgKHQxID09IDB4NDU2Nzg5YWIpIHsKKwkJCWlmICh0MCA9PSAweDAxMjM0NTY3KSB7CisJCQkJKmNoYWIgPSAwOyAqYncgPSA2NDsKKwkJCQlkb25lID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh0MCA9PSAweDAxMjM0NTY3KSB7CisJCQkJKmNoYWIgPSAwOyAqYncgPSAzMjsKKwkJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNCwgMHgwMCk7CisJCQkJZG9uZSA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoIWRvbmUpIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE0LCAweDAzKTsKKwkJCXJldCB8PSBzaXN1c2JfdHJpZ2dlcnNyMTYoc2lzdXNiLCByYW10eXBlKTsKKworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgMCwgMHgwMTIzNDU2Nyk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICA0LCAweDQ1Njc4OWFiKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgIDgsIDB4ODlhYmNkZWYpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAxMiwgMHhjZGVmMDEyMyk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDE2LCAweDU1NTU1NTU1KTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMjAsIDB4NTU1NTU1NTUpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyNCwgMHhmZmZmZmZmZik7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDI4LCAweGZmZmZmZmZmKTsKKwkJCXJldCB8PSBSRUFETChyYW1wdHIgKyAgMCwgJnQwKTsKKwkJCXJldCB8PSBSRUFETChyYW1wdHIgKyAgNCwgJnQxKTsKKworCQkJaWYgKHQxID09IDB4NDU2Nzg5YWIpIHsKKwkJCQlpZiAodDAgPT0gMHgwMTIzNDU2NykgeworCQkJCQkqY2hhYiA9IDE7ICpidyA9IDY0OworCQkJCQlyZXR1cm4gcmV0OworCQkJCX0gLyogZWxzZSBlcnJvciAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAodDAgPT0gMHgwMTIzNDU2NykgeworCQkJCQkqY2hhYiA9IDE7ICpidyA9IDMyOworCQkJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNCwgMHgwMSk7CisJCQkJfSAvKiBlbHNlIGVycm9yICovCisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3ZlcmlmeV9tY2xrKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgcmFtcHRyID0gU0lTVVNCX1BDSV9NRU1CQVNFOworCXU4IHRtcDEsIHRtcDIsIGksIGo7CisKKwlyZXQgfD0gV1JJVEVCKHJhbXB0ciwgMHhhYSk7CisJcmV0IHw9IFdSSVRFQihyYW1wdHIgKyAxNiwgMHg1NSk7CisJcmV0IHw9IFJFQURCKHJhbXB0ciwgJnRtcDEpOworCXJldCB8PSBSRUFEQihyYW1wdHIgKyAxNiwgJnRtcDIpOworCWlmICgodG1wMSAhPSAweGFhKSB8fCAodG1wMiAhPSAweDU1KSkgeworCQlmb3IgKGkgPSAwLCBqID0gMTY7IGkgPCAyOyBpKyssIGogKz0gMTYpIHsKKwkJCXJldCB8PSBHRVRJUkVHKFNJU1NSLCAweDIxLCAmdG1wMSk7CisJCQlyZXQgfD0gU0VUSVJFR0FORChTSVNTUiwgMHgyMSwgKHRtcDEgJiAweGZiKSk7CisJCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDNjLCAweDAxKTsgIC8qIG5vdCBvbiAzMzAgKi8KKwkJCXJldCB8PSBTRVRJUkVHQU5EKFNJU1NSLCAweDNjLCAweGZlKTsgLyogbm90IG9uIDMzMCAqLworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjEsIHRtcDEpOworCQkJcmV0IHw9IFdSSVRFQihyYW1wdHIgKyAxNiArIGosIGopOworCQkJcmV0IHw9IFJFQURCKHJhbXB0ciArIDE2ICsgaiwgJnRtcDEpOworCQkJaWYgKHRtcDEgPT0gaikgeworCQkJCXJldCB8PSBXUklURUIocmFtcHRyICsgaiwgaik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldF9yYW5rKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50ICppcmV0LCBpbnQgaW5kZXgsCisJCQl1OCByYW5rbm8sIHU4IGNoYWIsIGNvbnN0IHU4IGRyYW10eXBlW11bNV0sCisJCQlpbnQgYncpCit7CisJaW50IHJldCA9IDAsIHJhbmtzaXplOworCXU4IHRtcDsKKworCSppcmV0ID0gMDsKKworCWlmICgocmFua25vID09IDIpICYmIChkcmFtdHlwZVtpbmRleF1bMF0gPT0gMikpCisJCXJldHVybiByZXQ7CisKKwlyYW5rc2l6ZSA9IGRyYW10eXBlW2luZGV4XVszXSAvIDIgKiBidyAvIDMyOworCisJaWYgKChyYW5rc2l6ZSAqIHJhbmtubykgPiAxMjgpCisJCXJldHVybiByZXQ7CisKKwl0bXAgPSAwOworCXdoaWxlICgocmFua3NpemUgPj49IDEpID4gMCkgdG1wICs9IDB4MTA7CisJdG1wIHw9ICgocmFua25vIC0gMSkgPDwgMik7CisJdG1wIHw9ICgoYncgLyA2NCkgJiAweDAyKTsKKwl0bXAgfD0gKGNoYWIgJiAweDAxKTsKKworCXJldCA9IFNFVElSRUcoU0lTU1IsIDB4MTQsIHRtcCk7CisJcmV0IHw9IHNpc3VzYl90cmlnZ2Vyc3IxNihzaXN1c2IsIDApOyAvKiBzaWMhICovCisKKwkqaXJldCA9IDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfY2hlY2tfcmJjKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50ICppcmV0LCB1MzIgaW5jLCBpbnQgdGVzdG4pCit7CisJaW50IHJldCA9IDAsIGk7CisJdTMyIGosIHRtcDsKKworCSppcmV0ID0gMDsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgdGVzdG47IGkrKykgeworCQlyZXQgfD0gV1JJVEVMKHNpc3VzYi0+dnJhbWJhc2UgKyBqLCBqKTsKKwkJaiArPSBpbmM7CisJfQorCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB0ZXN0bjsgaSsrKSB7CisJCXJldCB8PSBSRUFETChzaXN1c2ItPnZyYW1iYXNlICsgaiwgJnRtcCk7CisJCWlmICh0bXAgIT0gaikgcmV0dXJuIHJldDsKKwkJaiArPSBpbmM7CisJfQorCisJKmlyZXQgPSAxOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9jaGVja19yYW5rcyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCAqaXJldCwgaW50IHJhbmtubywKKwkJCQkJaW50IGlkeCwgaW50IGJ3LCBjb25zdCB1OCBydHlwZVtdWzVdKQoreworCWludCByZXQgPSAwLCBpLCBpMnJldDsKKwl1MzIgaW5jOworCisJKmlyZXQgPSAwOworCisJZm9yIChpID0gcmFua25vOyBpID49IDE7IGktLSkgeworCQlpbmMgPSAxIDw8IChydHlwZVtpZHhdWzJdICsKKwkJCSAgICBydHlwZVtpZHhdWzFdICsKKwkJCSAgICBydHlwZVtpZHhdWzBdICsKKwkJCSAgICBidyAvIDY0ICsgaSk7CisJCXJldCB8PSBzaXN1c2JfY2hlY2tfcmJjKHNpc3VzYiwgJmkycmV0LCBpbmMsIDIpOworCQlpZiAoIWkycmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpbmMgPSAxIDw8IChydHlwZVtpZHhdWzJdICsgYncgLyA2NCArIDIpOworCXJldCB8PSBzaXN1c2JfY2hlY2tfcmJjKHNpc3VzYiwgJmkycmV0LCBpbmMsIDQpOworCWlmICghaTJyZXQpCisJCXJldHVybiByZXQ7CisKKwlpbmMgPSAxIDw8ICgxMCArIGJ3IC8gNjQpOworCXJldCB8PSBzaXN1c2JfY2hlY2tfcmJjKHNpc3VzYiwgJmkycmV0LCBpbmMsIDIpOworCWlmICghaTJyZXQpCisJCXJldHVybiByZXQ7CisKKwkqaXJldCA9IDE7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2dldF9zZHJhbV9zaXplKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50ICppcmV0LCBpbnQgYncsCisJCQkJCQkJCWludCBjaGFiKQoreworCWludCByZXQgPSAwLCBpMnJldCA9IDAsIGksIGo7CisJc3RhdGljIGNvbnN0IHU4IHNkcmFtdHlwZVsxM11bNV0gPSB7CisJCXsgMiwgMTIsIDksIDY0LCAweDM1IH0sCisJCXsgMSwgMTMsIDksIDY0LCAweDQ0IH0sCisJCXsgMiwgMTIsIDgsIDMyLCAweDMxIH0sCisJCXsgMiwgMTEsIDksIDMyLCAweDI1IH0sCisJCXsgMSwgMTIsIDksIDMyLCAweDM0IH0sCisJCXsgMSwgMTMsIDgsIDMyLCAweDQwIH0sCisJCXsgMiwgMTEsIDgsIDE2LCAweDIxIH0sCisJCXsgMSwgMTIsIDgsIDE2LCAweDMwIH0sCisJCXsgMSwgMTEsIDksIDE2LCAweDI0IH0sCisJCXsgMSwgMTEsIDgsICA4LCAweDIwIH0sCisJCXsgMiwgIDksIDgsICA0LCAweDAxIH0sCisJCXsgMSwgMTAsIDgsICA0LCAweDEwIH0sCisJCXsgMSwgIDksIDgsICAyLCAweDAwIH0KKwl9OworCisJKmlyZXQgPSAxOyAvKiBlcnJvciAqLworCisJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspIHsKKwkJcmV0IHw9IFNFVElSRUdBTkRPUihTSVNTUiwgMHgxMywgMHg4MCwgc2RyYW10eXBlW2ldWzRdKTsKKwkJZm9yIChqID0gMjsgaiA+IDA7IGotLSkgeworCQkJcmV0IHw9IHNpc3VzYl9zZXRfcmFuayhzaXN1c2IsICZpMnJldCwgaSwgaiwKKwkJCQkJCWNoYWIsIHNkcmFtdHlwZSwgYncpOworCQkJaWYgKCFpMnJldCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0IHw9IHNpc3VzYl9jaGVja19yYW5rcyhzaXN1c2IsICZpMnJldCwgaiwgaSwKKwkJCQkJCWJ3LCBzZHJhbXR5cGUpOworCQkJaWYgKGkycmV0KSB7CisJCQkJKmlyZXQgPSAwOwkvKiByYW0gc2l6ZSBmb3VuZCAqLworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2Jfc2V0dXBfc2NyZWVuKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGNscmFsbCwgaW50IGRyd2ZyKQoreworCWludCByZXQgPSAwOworCXUzMiBhZGRyZXNzOworCWludCBpLCBsZW5ndGgsIG1vZGV4LCBtb2RleSwgYnBwOworCisJbW9kZXggPSA2NDA7IG1vZGV5ID0gNDgwOyBicHAgPSAyOworCisJYWRkcmVzcyA9IHNpc3VzYi0+dnJhbWJhc2U7CS8qIENsZWFyIHZpZGVvIHJhbSAqLworCisJaWYgKGNscmFsbCkKKwkJbGVuZ3RoID0gc2lzdXNiLT52cmFtc2l6ZTsKKwllbHNlCisJCWxlbmd0aCA9IG1vZGV4ICogYnBwICogbW9kZXk7CisKKwlyZXQgPSBzaXN1c2JfY2xlYXJfdnJhbShzaXN1c2IsIGFkZHJlc3MsIGxlbmd0aCk7CisKKwlpZiAoIXJldCAmJiBkcndmcikgeworCQlmb3IgKGkgPSAwOyBpIDwgbW9kZXg7IGkrKykgeworCQkJYWRkcmVzcyA9IHNpc3VzYi0+dnJhbWJhc2UgKyAoaSAqIGJwcCk7CisJCQlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkcmVzcywgMHhmMTAwKTsKKwkJCWFkZHJlc3MgKz0gKG1vZGV4ICogKG1vZGV5LTEpICogYnBwKTsKKwkJCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyZXNzLCAweGYxMDApOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBtb2RleTsgaSsrKSB7CisJCQlhZGRyZXNzID0gc2lzdXNiLT52cmFtYmFzZSArICgoaSAqIG1vZGV4KSAqIGJwcCk7CisJCQlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkcmVzcywgMHhmMTAwKTsKKwkJCWFkZHJlc3MgKz0gKChtb2RleCAtIDEpICogYnBwKTsKKwkJCXJldCB8PSBzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyZXNzLCAweGYxMDApOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldF9kZWZhdWx0X21vZGUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdG91Y2hlbmdpbmVzKQoreworCWludCByZXQgPSAwLCBpLCBqLCBtb2RleCwgbW9kZXksIGJwcCwgZHU7CisJdTggc3IzMSwgY3I2MywgdG1wODsKKwlzdGF0aWMgY29uc3QgY2hhciBhdHRyZGF0YVtdID0geworCQkweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCisJCTB4MDgsMHgwOSwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKKwkJMHgwMSwweDAwLDB4MDAsMHgwMAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgY3J0Y3JkYXRhW10gPSB7CisJCTB4NWYsMHg0ZiwweDUwLDB4ODIsMHg1NCwweDgwLDB4MGIsMHgzZSwKKwkJMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweGVhLDB4OGMsMHhkZiwweDI4LDB4NDAsMHhlNywweDA0LDB4YTMsCisJCTB4ZmYKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyIGdyY2RhdGFbXSA9IHsKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweDBmLAorCQkweGZmCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciBjcnRjZGF0YVtdID0geworCQkweDVmLDB4NGYsMHg0ZiwweDgzLDB4NTUsMHg4MSwweDBiLDB4M2UsCisJCTB4ZTksMHg4YiwweGRmLDB4ZTgsMHgwYywweDAwLDB4MDAsMHgwNSwKKwkJMHgwMAorCX07CisKKwltb2RleCA9IDY0MDsgbW9kZXkgPSA0ODA7IGJwcCA9IDI7CisKKwlHRVRJUkVHKFNJU1NSLCAweDMxLCAmc3IzMSk7CisJR0VUSVJFRyhTSVNDUiwgMHg2MywgJmNyNjMpOworCVNFVElSRUdPUihTSVNTUiwgMHgwMSwgMHgyMCk7CisJU0VUSVJFRyhTSVNDUiwgMHg2MywgY3I2MyAmIDB4YmYpOworCVNFVElSRUdPUihTSVNDUiwgMHgxNywgMHg4MCk7CisJU0VUSVJFR09SKFNJU1NSLCAweDFmLCAweDA0KTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDA3LCAweGZiKTsKKwlTRVRJUkVHKFNJU1NSLCAweDAwLCAweDAzKTsJLyogc2VxICovCisJU0VUSVJFRyhTSVNTUiwgMHgwMSwgMHgyMSk7CisJU0VUSVJFRyhTSVNTUiwgMHgwMiwgMHgwZik7CisJU0VUSVJFRyhTSVNTUiwgMHgwMywgMHgwMCk7CisJU0VUSVJFRyhTSVNTUiwgMHgwNCwgMHgwZSk7CisJU0VUUkVHKFNJU01JU0NXLCAweDIzKTsJCS8qIG1pc2MgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTg7IGkrKykgewkvKiBjcnRjICovCisJCVNFVElSRUcoU0lTQ1IsIGksIGNydGNyZGF0YVtpXSk7CisJfQorCWZvciAoaSA9IDA7IGkgPD0gMHgxMzsgaSsrKSB7CS8qIGF0dCAqLworCQlHRVRSRUcoU0lTSU5QU1RBVCwgJnRtcDgpOworCQlTRVRSRUcoU0lTQVIsIGkpOworCQlTRVRSRUcoU0lTQVIsIGF0dHJkYXRhW2ldKTsKKwl9CisJR0VUUkVHKFNJU0lOUFNUQVQsICZ0bXA4KTsKKwlTRVRSRUcoU0lTQVIsIDB4MTQpOworCVNFVFJFRyhTSVNBUiwgMHgwMCk7CisJR0VUUkVHKFNJU0lOUFNUQVQsICZ0bXA4KTsKKwlTRVRSRUcoU0lTQVIsIDB4MjApOworCUdFVFJFRyhTSVNJTlBTVEFULCAmdG1wOCk7CisJZm9yIChpID0gMDsgaSA8PSAweDA4OyBpKyspIHsJLyogZ3JjICovCisJCVNFVElSRUcoU0lTR1IsIGksIGdyY2RhdGFbaV0pOworCX0KKwlTRVRJUkVHQU5EKFNJU0dSLCAweDA1LCAweGJmKTsKKwlmb3IgKGkgPSAweDBBOyBpIDw9IDB4MEU7IGkrKykgewkvKiBjbHIgZXh0ICovCisJCVNFVElSRUcoU0lTU1IsIGksIDB4MDApOworCX0KKwlTRVRJUkVHQU5EKFNJU1NSLCAweDM3LCAweGZlKTsKKwlTRVRSRUcoU0lTTUlTQ1csIDB4ZWYpOwkJLyogc3luYyAqLworCVNFVElSRUcoU0lTQ1IsIDB4MTEsIDB4MDApOwkvKiBjcnRjICovCisJZm9yIChqID0gMHgwMCwgaSA9IDA7IGkgPD0gNzsgaSsrLCBqKyspIHsKKwkJU0VUSVJFRyhTSVNDUiwgaiwgY3J0Y2RhdGFbaV0pOworCX0KKwlmb3IgKGogPSAweDEwOyBpIDw9IDEwOyBpKyssIGorKykgeworCQlTRVRJUkVHKFNJU0NSLCBqLCBjcnRjZGF0YVtpXSk7CisJfQorCWZvciAoaiA9IDB4MTU7IGkgPD0gMTI7IGkrKywgaisrKSB7CisJCVNFVElSRUcoU0lTQ1IsIGosIGNydGNkYXRhW2ldKTsKKwl9CisJZm9yIChqID0gMHgwQTsgaSA8PSAxNTsgaSsrLCBqKyspIHsKKwkJU0VUSVJFRyhTSVNTUiwgaiwgY3J0Y2RhdGFbaV0pOworCX0KKwlTRVRJUkVHKFNJU1NSLCAweDBFLCAoY3J0Y2RhdGFbMTZdICYgMHhFMCkpOworCVNFVElSRUdBTkRPUihTSVNDUiwgMHgwOSwgMHg1ZiwgKChjcnRjZGF0YVsxNl0gJiAweDAxKSA8PCA1KSk7CisJU0VUSVJFRyhTSVNDUiwgMHgxNCwgMHg0Zik7CisJZHUgPSAobW9kZXggLyAxNikgKiAoYnBwICogMik7CS8qIG9mZnNldC9waXRjaCAqLworCWlmIChtb2RleCAlIDE2KSBkdSArPSBicHA7CisJU0VUSVJFR0FORE9SKFNJU1NSLCAweDBlLCAweGYwLCAoKGR1ID4+IDgpICYgMHgwZikpOworCVNFVElSRUcoU0lTQ1IsIDB4MTMsIChkdSAmIDB4ZmYpKTsKKwlkdSA8PD0gNTsKKwl0bXA4ID0gZHUgPj4gODsKKwlpZiAoZHUgJiAweGZmKSB0bXA4Kys7CisJU0VUSVJFRyhTSVNTUiwgMHgxMCwgdG1wOCk7CisJU0VUSVJFRyhTSVNTUiwgMHgzMSwgMHgwMCk7CS8qIFZDTEsgKi8KKwlTRVRJUkVHKFNJU1NSLCAweDJiLCAweDFiKTsKKwlTRVRJUkVHKFNJU1NSLCAweDJjLCAweGUxKTsKKwlTRVRJUkVHKFNJU1NSLCAweDJkLCAweDAxKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDNkLCAweGZlKTsJLyogRklGTyAqLworCVNFVElSRUcoU0lTU1IsIDB4MDgsIDB4YWUpOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MDksIDB4ZjApOworCVNFVElSRUcoU0lTU1IsIDB4MDgsIDB4MzQpOworCVNFVElSRUdPUihTSVNTUiwgMHgzZCwgMHgwMSk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgxZiwgMHgzZik7CS8qIG1vZGUgcmVncyAqLworCVNFVElSRUdBTkRPUihTSVNTUiwgMHgwNiwgMHhjMCwgMHgwYSk7CisJU0VUSVJFRyhTSVNDUiwgMHgxOSwgMHgwMCk7CisJU0VUSVJFR0FORChTSVNDUiwgMHgxYSwgMHhmYyk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgwZiwgMHhiNyk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgzMSwgMHhmYik7CisJU0VUSVJFR0FORE9SKFNJU1NSLCAweDIxLCAweDFmLCAweGEwKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDMyLCAweGYzKTsKKwlTRVRJUkVHQU5ET1IoU0lTU1IsIDB4MDcsIDB4ZjgsIDB4MDMpOworCVNFVElSRUcoU0lTQ1IsIDB4NTIsIDB4NmMpOworCisJU0VUSVJFRyhTSVNDUiwgMHgwZCwgMHgwMCk7CS8qIGFkanVzdCBmcmFtZSAqLworCVNFVElSRUcoU0lTQ1IsIDB4MGMsIDB4MDApOworCVNFVElSRUcoU0lTU1IsIDB4MGQsIDB4MDApOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MzcsIDB4ZmUpOworCisJU0VUSVJFRyhTSVNDUiwgMHgzMiwgMHgyMCk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgwMSwgMHhkZik7CS8qIGVuYWJsZSBkaXNwbGF5ICovCisJU0VUSVJFRyhTSVNDUiwgMHg2MywgKGNyNjMgJiAweGJmKSk7CisJU0VUSVJFRyhTSVNTUiwgMHgzMSwgKHNyMzEgJiAweGZiKSk7CisKKwlpZiAodG91Y2hlbmdpbmVzKSB7CisJCVNFVElSRUcoU0lTU1IsIDB4MjAsIDB4YTEpOwkvKiBlbmFibGUgZW5naW5lcyAqLworCQlTRVRJUkVHT1IoU0lTU1IsIDB4MWUsIDB4NWEpOworCisJCVNFVElSRUcoU0lTU1IsIDB4MjYsIDB4MDEpOwkvKiBkaXNhYmxlIGNtZHF1ZXVlICovCisJCVNFVElSRUcoU0lTU1IsIDB4MjcsIDB4MWYpOworCQlTRVRJUkVHKFNJU1NSLCAweDI2LCAweDAwKTsKKwl9CisKKwlTRVRJUkVHKFNJU0NSLCAweDM0LCAweDQ0KTsgIAkvKiB3ZSBqdXN0IHNldCBzdGQgbW9kZSAjNDQgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9pbml0X2dmeGNvcmUoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiKQoreworCWludCByZXQgPSAwLCBpLCBqLCBidywgY2hhYiwgaXJldCwgcmV0cnkgPSAzOworCXU4IHRtcDgsIHJhbXR5cGU7CisJdTMyIHRtcDMyOworCXN0YXRpYyBjb25zdCBjaGFyIG1jbGt0YWJsZVtdID0geworCQkweDNiLCAweDIyLCAweDAxLCAxNDMsCisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MywKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzLAorCQkweDNiLCAweDIyLCAweDAxLCAxNDMKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyIGVjbGt0YWJsZVtdID0geworCQkweDNiLCAweDIyLCAweDAxLCAxNDMsCisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MywKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzLAorCQkweDNiLCAweDIyLCAweDAxLCAxNDMKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyIHJhbXR5cGV0YWJsZTFbXSA9IHsKKwkJMHgwMCwgMHgwNCwgMHg2MCwgMHg2MCwKKwkJMHgwZiwgMHgwZiwgMHgxZiwgMHgxZiwKKwkJMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwKKwkJMHhhOSwgMHhhOSwgMHhhYywgMHhhYywKKwkJMHhhMCwgMHhhMCwgMHhhMCwgMHhhOCwKKwkJMHgwMCwgMHgwMCwgMHgwMiwgMHgwMiwKKwkJMHgzMCwgMHgzMCwgMHg0MCwgMHg0MAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgcmFtdHlwZXRhYmxlMltdID0geworCQkweDc3LCAweDc3LCAweDQ0LCAweDQ0LAorCQkweDc3LCAweDc3LCAweDQ0LCAweDQ0LAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDViLCAweDViLCAweGFiLCAweGFiLAorCQkweDAwLCAweDAwLCAweGYwLCAweGY4CisJfTsKKworCXdoaWxlIChyZXRyeS0tKSB7CisKKwkJLyogRW5hYmxlIFZHQSAqLworCQlyZXQgPSBHRVRSRUcoU0lTVkdBRU4sICZ0bXA4KTsKKwkJcmV0IHw9IFNFVFJFRyhTSVNWR0FFTiwgKHRtcDggfCAweDAxKSk7CisKKwkJLyogRW5hYmxlIEdQVSBhY2Nlc3MgdG8gVlJBTSAqLworCQlyZXQgfD0gR0VUUkVHKFNJU01JU0NSLCAmdG1wOCk7CisJCXJldCB8PSBTRVRSRUcoU0lTTUlTQ1csICh0bXA4IHwgMHgwMSkpOworCisJCWlmIChyZXQpIGNvbnRpbnVlOworCisJCS8qIFJlc2V0IHJlZ2lzdGVycyAqLworCQlyZXQgfD0gU0VUSVJFR0FORChTSVNDUiwgMHg1YiwgMHhkZik7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDA1LCAweDg2KTsKKwkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgyMCwgMHgwMSk7CisKKwkJcmV0IHw9IFNFVFJFRyhTSVNNSVNDVywgMHg2Nyk7CisKKwkJZm9yIChpID0gMHgwNjsgaSA8PSAweDFmOyBpKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCBpLCAweDAwKTsKKwkJfQorCQlmb3IgKGkgPSAweDIxOyBpIDw9IDB4Mjc7IGkrKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIGksIDB4MDApOworCQl9CisJCWZvciAoaSA9IDB4MzE7IGkgPD0gMHgzZDsgaSsrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgaSwgMHgwMCk7CisJCX0KKwkJZm9yIChpID0gMHgxMjsgaSA8PSAweDFiOyBpKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCBpLCAweDAwKTsKKwkJfQorCQlmb3IgKGkgPSAweDc5OyBpIDw9IDB4N2M7IGkrKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTQ1IsIGksIDB4MDApOworCQl9CisKKwkJaWYgKHJldCkgY29udGludWU7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTQ1IsIDB4NjMsIDB4ODApOworCisJCXJldCB8PSBHRVRJUkVHKFNJU1NSLCAweDNhLCAmcmFtdHlwZSk7CisJCXJhbXR5cGUgJj0gMHgwMzsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyOCwgbWNsa3RhYmxlW3JhbXR5cGUgKiA0XSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDI5LCBtY2xrdGFibGVbKHJhbXR5cGUgKiA0KSArIDFdKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MmEsIG1jbGt0YWJsZVsocmFtdHlwZSAqIDQpICsgMl0pOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDJlLCBlY2xrdGFibGVbcmFtdHlwZSAqIDRdKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MmYsIGVjbGt0YWJsZVsocmFtdHlwZSAqIDQpICsgMV0pOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgzMCwgZWNsa3RhYmxlWyhyYW10eXBlICogNCkgKyAyXSk7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MDcsIDB4MTgpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxMSwgMHgwZik7CisKKwkJaWYgKHJldCkgY29udGludWU7CisKKwkJZm9yIChpID0gMHgxNSwgaiA9IDA7IGkgPD0gMHgxYjsgaSsrLCBqKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCBpLCByYW10eXBldGFibGUxWyhqKjQpICsgcmFtdHlwZV0pOworCQl9CisJCWZvciAoaSA9IDB4NDAsIGogPSAwOyBpIDw9IDB4NDQ7IGkrKywgaisrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNDUiwgaSwgcmFtdHlwZXRhYmxlMlsoaio0KSArIHJhbXR5cGVdKTsKKwkJfQorCisJCXJldCB8PSBTRVRJUkVHKFNJU0NSLCAweDQ5LCAweGFhKTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxZiwgMHgwMCk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDIwLCAweGEwKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjMsIDB4ZjYpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyNCwgMHgwZCk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDI1LCAweDMzKTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxMSwgMHgwZik7CisKKwkJcmV0IHw9IFNFVElSRUdPUihTSVNQQVJUMSwgMHgyZiwgMHgwMSk7CisKKwkJcmV0IHw9IFNFVElSRUdBTkQoU0lTQ0FQLCAweDNmLCAweGVmKTsKKworCQlpZiAocmV0KSBjb250aW51ZTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNQQVJUMSwgMHgwMCwgMHgwMCk7CisKKwkJcmV0IHw9IEdFVElSRUcoU0lTU1IsIDB4MTMsICZ0bXA4KTsKKwkJdG1wOCA+Pj0gNDsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNQQVJUMSwgMHgwMiwgMHgwMCk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1BBUlQxLCAweDJlLCAweDA4KTsKKworCQlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4NTAsICZ0bXAzMik7CisJCXRtcDMyICY9IDB4MDBmMDAwMDA7CisJCXRtcDggPSAodG1wMzIgPT0gMHgxMDAwMDApID8gMHgzMyA6IDB4MDM7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDI1LCB0bXA4KTsKKwkJdG1wOCA9ICh0bXAzMiA9PSAweDEwMDAwMCkgPyAweGFhIDogMHg4ODsKKwkJcmV0IHw9IFNFVElSRUcoU0lTQ1IsIDB4NDksIHRtcDgpOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDI3LCAweDFmKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MzEsIDB4MDApOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgzMiwgMHgxMSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDMzLCAweDAwKTsKKworCQlpZiAocmV0KSBjb250aW51ZTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNDUiwgMHg4MywgMHgwMCk7CisKKwkJcmV0IHw9IHNpc3VzYl9zZXRfZGVmYXVsdF9tb2RlKHNpc3VzYiwgMCk7CisKKwkJcmV0IHw9IFNFVElSRUdBTkQoU0lTU1IsIDB4MjEsIDB4ZGYpOworCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDAxLCAweDIwKTsKKwkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgxNiwgMHgwZik7CisKKwkJcmV0IHw9IHNpc3VzYl90cmlnZ2Vyc3IxNihzaXN1c2IsIHJhbXR5cGUpOworCisJCS8qIERpc2FibGUgcmVmcmVzaCAqLworCQlyZXQgfD0gU0VUSVJFR0FORChTSVNTUiwgMHgxNywgMHhmOCk7CisJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4MTksIDB4MDMpOworCisJCXJldCB8PSBzaXN1c2JfZ2V0YnVzd2lkdGgoc2lzdXNiLCAmYncsICZjaGFiKTsKKwkJcmV0IHw9IHNpc3VzYl92ZXJpZnlfbWNsayhzaXN1c2IpOworCisJCWlmIChyYW10eXBlIDw9IDEpIHsKKwkJCXJldCB8PSBzaXN1c2JfZ2V0X3NkcmFtX3NpemUoc2lzdXNiLCAmaXJldCwgYncsIGNoYWIpOworCQkJaWYgKGlyZXQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInNpc3VzYnZnYVslZF06IFJBTSBzaXplICIKKwkJCQkJImRldGVjdGlvbiBmYWlsZWQsICIKKwkJCQkJImFzc3VtaW5nIDhNQiB2aWRlbyBSQU1cbiIsCisJCQkJCXNpc3VzYi0+bWlub3IpOworCQkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLDB4MTQsMHgzMSk7CisJCQkJLyogVE9ETyAqLworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzaXN1c2J2Z2FbJWRdOiBERFIgUkFNIGRldmljZSBmb3VuZCwgIgorCQkJCQkiYXNzdW1pbmcgOE1CIHZpZGVvIFJBTVxuIiwKKwkJCQkJc2lzdXNiLT5taW5vcik7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwweDE0LDB4MzEpOworCQkJLyogKioqIFRPRE8gKioqICovCisJCX0KKworCQkvKiBFbmFibGUgcmVmcmVzaCAqLworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgcmFtdHlwZXRhYmxlMVs0ICsgcmFtdHlwZV0pOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNywgcmFtdHlwZXRhYmxlMVs4ICsgcmFtdHlwZV0pOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxOSwgcmFtdHlwZXRhYmxlMVsxNiArIHJhbXR5cGVdKTsKKworCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDIxLCAweDIwKTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyMiwgMHhmYik7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDIxLCAweGE1KTsKKworCQlpZiAocmV0ID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjdW5kZWYgU0VUUkVHCisjdW5kZWYgR0VUUkVHCisjdW5kZWYgU0VUSVJFRworI3VuZGVmIEdFVElSRUcKKyN1bmRlZiBTRVRJUkVHT1IKKyN1bmRlZiBTRVRJUkVHQU5ECisjdW5kZWYgU0VUSVJFR0FORE9SCisjdW5kZWYgUkVBREwKKyN1bmRlZiBXUklURUwKKworc3RhdGljIHZvaWQKK3Npc3VzYl9nZXRfcmFtY29uZmlnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwl1OCB0bXA4LCB0bXA4MiwgcmFtdHlwZTsKKwlpbnQgYncgPSAwOworCWNoYXIgKnJhbXR5cGV0ZXh0MSA9IE5VTEw7CisJY29uc3QgY2hhciAqcmFtdHlwZXRleHQyW10gPSB7CSJTRFIgU0RSQU0iLCAiU0RSIFNHUkFNIiwKKwkJCQkJIkREUiBTRFJBTSIsICJERFIgU0dSQU0iIH07CisJc3RhdGljIGNvbnN0IGludCBidXNTRFJbNF0gID0gezY0LCA2NCwgMTI4LCAxMjh9OworCXN0YXRpYyBjb25zdCBpbnQgYnVzRERSWzRdICA9IHszMiwgMzIsICA2NCwgIDY0fTsKKwlzdGF0aWMgY29uc3QgaW50IGJ1c0REUkFbNF0gPSB7NjQrMzIsIDY0KzMyICwgKDY0KzMyKSoyLCAoNjQrMzIpKjJ9OworCisJc2lzdXNiX2dldGlkeHJlZyhzaXN1c2IsIFNJU1NSLCAweDE0LCAmdG1wOCk7CisJc2lzdXNiX2dldGlkeHJlZyhzaXN1c2IsIFNJU1NSLCAweDE1LCAmdG1wODIpOworCXNpc3VzYl9nZXRpZHhyZWcoc2lzdXNiLCBTSVNTUiwgMHgzYSwgJnJhbXR5cGUpOworCXNpc3VzYi0+dnJhbXNpemUgPSAoMSA8PCAoKHRtcDggJiAweGYwKSA+PiA0KSkgKiAxMDI0ICogMTAyNDsKKwlyYW10eXBlICY9IDB4MDM7CisJc3dpdGNoICgodG1wOCA+PiAyKSAmIDB4MDMpIHsKKwljYXNlIDA6IHJhbXR5cGV0ZXh0MSA9ICIxIGNoLzEgciI7CisJCWlmICh0bXA4MiAmIDB4MTApIHsKKwkJCWJ3ID0gMzI7CisJCX0gZWxzZSB7CisJCQlidyA9IGJ1c1NEUlsodG1wOCAmIDB4MDMpXTsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6IHJhbXR5cGV0ZXh0MSA9ICIxIGNoLzIgciI7CisJCXNpc3VzYi0+dnJhbXNpemUgPDw9IDE7CisJCWJ3ID0gYnVzU0RSWyh0bXA4ICYgMHgwMyldOworCQlicmVhazsKKwljYXNlIDI6IHJhbXR5cGV0ZXh0MSA9ICJhc3ltbWVyaWMiOworCQlzaXN1c2ItPnZyYW1zaXplICs9IHNpc3VzYi0+dnJhbXNpemUvMjsKKwkJYncgPSBidXNERFJBWyh0bXA4ICYgMHgwMyldOworCQlicmVhazsKKwljYXNlIDM6IHJhbXR5cGV0ZXh0MSA9ICIyIGNoYW5uZWwiOworCQlzaXN1c2ItPnZyYW1zaXplIDw8PSAxOworCQlidyA9IGJ1c0REUlsodG1wOCAmIDB4MDMpXTsKKwkJYnJlYWs7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAic2lzdXNidmdhWyVkXTogJWRNQiAlcyAlcywgYnVzIHdpZHRoICVkXG4iLAorCQkJc2lzdXNiLT5taW5vciwgKHNpc3VzYi0+dnJhbXNpemUgPj4gMjApLCByYW10eXBldGV4dDEsCisJCQlyYW10eXBldGV4dDJbcmFtdHlwZV0sIGJ3KTsKK30KKworc3RhdGljIGludAorc2lzdXNiX2RvX2luaXRfZ2Z4ZGV2aWNlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldDsKKwl1MzIgdG1wMzI7CisKKwkvKiBEbyBzb21lIG1hZ2ljICovCisJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMzI0OworCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDAwNDsKKwlyZXQgPSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQsIDApOworCisJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMzY0OworCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDAwNDsKKwlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0LCAwKTsKKworCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDM4NDsKKwlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDAwMDQ7CisJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCwgMCk7CisKKwlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAxMDA7CisJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwNzAwOworCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQsIDApOworCisJcGFja2V0LmhlYWRlciAgPSAweDAwMGY7CisJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMDA0OworCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCwgMCk7CisJcGFja2V0LmRhdGEgfD0gMHgxNzsKKwlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0LCAwKTsKKworCS8qIEluaXQgQkFSIDAgKFZSQU0pICovCisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDEwLCAmdG1wMzIpOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTAsIDB4ZmZmZmZmZjApOworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxMCwgJnRtcDMyKTsKKwl0bXAzMiAmPSAweDBmOworCXRtcDMyIHw9IFNJU1VTQl9QQ0lfTUVNQkFTRTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDEwLCB0bXAzMik7CisKKwkvKiBJbml0IEJBUiAxIChNTUlPKSAqLworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxNCwgJnRtcDMyKTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDE0LCAweGZmZmZmZmYwKTsKKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTQsICZ0bXAzMik7CisJdG1wMzIgJj0gMHgwZjsKKwl0bXAzMiB8PSBTSVNVU0JfUENJX01NSU9CQVNFOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTQsIHRtcDMyKTsKKworCS8qIEluaXQgQkFSIDIgKGkvbyBwb3J0cykgKi8KKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTgsICZ0bXAzMik7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgxOCwgMHhmZmZmZmZmMCk7CisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDE4LCAmdG1wMzIpOworCXRtcDMyICY9IDB4MGY7CisJdG1wMzIgfD0gU0lTVVNCX1BDSV9JT1BPUlRCQVNFOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTgsIHRtcDMyKTsKKworCS8qIEVuYWJsZSBtZW1vcnkgYW5kIGkvbyBhY2Nlc3MgKi8KKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MDQsICZ0bXAzMik7CisJdG1wMzIgfD0gMHgzOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MDQsIHRtcDMyKTsKKworCWlmIChyZXQgPT0gMCkgeworCQkvKiBTb21lIGZ1cnRoZXIgbWFnaWMgKi8KKwkJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDA1MDsKKwkJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwMGZmOworCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0LCAwKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJbml0aWFsaXplIHRoZSBncmFwaGljcyBkZXZpY2UgKHJldHVybiAwIG9uIHN1Y2Nlc3MpCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBuZXQyMjgwIGFzIHdlbGwgYXMgdGhlIFBDSSByZWdpc3RlcnMKKyAqIG9mIHRoZSBncmFwaGljcyBib2FyZC4KKyAqLworCitzdGF0aWMgaW50CitzaXN1c2JfaW5pdF9nZnhkZXZpY2Uoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgaW5pdHNjcmVlbikKK3sKKwlpbnQgcmV0ID0gMCwgdGVzdCA9IDA7CisJdTMyIHRtcDMyOworCisJaWYgKHNpc3VzYi0+ZGV2aW5pdCA9PSAxKSB7CisJCS8qIFJlYWQgUENJIEJBUnMgYW5kIHNlZSBpZiB0aGV5IGhhdmUgYmVlbiBzZXQgdXAgKi8KKwkJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDEwLCAmdG1wMzIpOworCQlpZiAocmV0KSByZXR1cm4gcmV0OworCQlpZiAoKHRtcDMyICYgMHhmZmZmZmZmMCkgPT0gU0lTVVNCX1BDSV9NRU1CQVNFKSB0ZXN0Kys7CisKKwkJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDE0LCAmdG1wMzIpOworCQlpZiAocmV0KSByZXR1cm4gcmV0OworCQlpZiAoKHRtcDMyICYgMHhmZmZmZmZmMCkgPT0gU0lTVVNCX1BDSV9NTUlPQkFTRSkgdGVzdCsrOworCisJCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxOCwgJnRtcDMyKTsKKwkJaWYgKHJldCkgcmV0dXJuIHJldDsKKwkJaWYgKCh0bXAzMiAmIDB4ZmZmZmZmZjApID09IFNJU1VTQl9QQ0lfSU9QT1JUQkFTRSkgdGVzdCsrOworCX0KKworCS8qIE5vPyBTbyByZXNldCB0aGUgZGV2aWNlICovCisJaWYgKChzaXN1c2ItPmRldmluaXQgPT0gMCkgfHwgKHRlc3QgIT0gMykpIHsKKworCQlyZXQgfD0gc2lzdXNiX2RvX2luaXRfZ2Z4ZGV2aWNlKHNpc3VzYik7CisKKwkJaWYgKHJldCA9PSAwKQorCQkJc2lzdXNiLT5kZXZpbml0ID0gMTsKKworCX0KKworCWlmIChzaXN1c2ItPmRldmluaXQpIHsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgZ3JhcGhpY3MgY29yZSAqLworCQlpZiAoc2lzdXNiX2luaXRfZ2Z4Y29yZShzaXN1c2IpID09IDApIHsKKwkJCXNpc3VzYi0+Z2Z4aW5pdCA9IDE7CisJCQlzaXN1c2JfZ2V0X3JhbWNvbmZpZyhzaXN1c2IpOworCQkJcmV0IHw9IHNpc3VzYl9zZXRfZGVmYXVsdF9tb2RlKHNpc3VzYiwgMSk7CisJCQlyZXQgfD0gc2lzdXNiX3NldHVwX3NjcmVlbihzaXN1c2IsIDEsIGluaXRzY3JlZW4pOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogZm9wcyAqLworCitzdGF0aWMgaW50CitzaXN1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlpbnQgc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJaWYgKCEoaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZzaXN1c2JfZHJpdmVyLCBzdWJtaW5vcikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2lzdXNiWyVkXTogRmFpbGVkIHRvIGZpbmQgaW50ZXJmYWNlXG4iLAorCQkJCXN1Ym1pbm9yKTsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCEoc2lzdXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpKSkgeworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJaWYgKCFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+cmVhZHkpIHsKKwkJdXAoJnNpc3VzYi0+bG9jayk7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzaXN1c2ItPmlzb3BlbikgeworCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoIXNpc3VzYi0+ZGV2aW5pdCkgeworCQlpZiAoc2lzdXNiLT5zaXN1c2JfZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJaWYgKHNpc3VzYl9pbml0X2dmeGRldmljZShzaXN1c2IsIDApKSB7CisJCQkJdXAoJnNpc3VzYi0+bG9jayk7CisJCQkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJInNpc3VzYnZnYVslZF06IEZhaWxlZCB0byBpbml0aWFsaXplICIKKwkJCQkJImRldmljZVxuIiwKKwkJCQkJc2lzdXNiLT5taW5vcik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0gZWxzZSB7CisJCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkic2lzdXNidmdhWyVkXTogRGV2aWNlIG5vdCBhdHRhY2hlZCB0byAiCisJCQkJIlVTQiAyLjAgaHViXG4iLAorCQkJCXNpc3VzYi0+bWlub3IpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwkvKiBpbmNyZW1lbnQgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KKwlrcmVmX2dldCgmc2lzdXNiLT5rcmVmKTsKKworCXNpc3VzYi0+aXNvcGVuID0gMTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNpc3VzYjsKKworCXVwKCZzaXN1c2ItPmxvY2spOworCisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJzaXN1c2J2Z2FbJWRdOiBvcGVuZWQiLCBzaXN1c2ItPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2lzdXNiX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IgPSB0b19zaXN1c2JfZGV2KGtyZWYpOworCisJaWYgKCFzaXN1c2IpCisJCXJldHVybjsKKworCWlmIChzaXN1c2ItPnNpc3VzYl9kZXYpCisJCXVzYl9wdXRfZGV2KHNpc3VzYi0+c2lzdXNiX2Rldik7CisKKwlzaXN1c2ItPnNpc3VzYl9kZXYgPSBOVUxMOworCXNpc3VzYl9mcmVlX2J1ZmZlcnMoc2lzdXNiKTsKKwlzaXN1c2JfZnJlZV91cmJzKHNpc3VzYik7CisJa2ZyZWUoc2lzdXNiKTsKK30KKworc3RhdGljIGludAorc2lzdXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCWludCBteW1pbm9yOworCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKSB7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwlpZiAoc2lzdXNiLT5wcmVzZW50KSB7CisJCS8qIFdhaXQgZm9yIGFsbCBVUkJzIHRvIGZpbmlzaCBpZiBkZXZpY2Ugc3RpbGwgcHJlc2VudCAqLworCQlpZiAoIXNpc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc2lzdXNiKSkKKwkJCXNpc3VzYl9raWxsX2FsbF9idXN5KHNpc3VzYik7CisJfQorCisJbXltaW5vciA9IHNpc3VzYi0+bWlub3I7CisKKwlzaXN1c2ItPmlzb3BlbiA9IDA7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXVwKCZzaXN1c2ItPmxvY2spOworCisJLyogZGVjcmVtZW50IHRoZSB1c2FnZSBjb3VudCBvbiBvdXIgZGV2aWNlICovCisJa3JlZl9wdXQoJnNpc3VzYi0+a3JlZiwgc2lzdXNiX2RlbGV0ZSk7CisKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCisJcHJpbnRrKEtFUk5fREVCVUcgInNpc3VzYnZnYVslZF06IHJlbGVhc2VkIiwgbXltaW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QKK3Npc3VzYl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJc3NpemVfdCBieXRlc19yZWFkID0gMDsKKwlpbnQgZXJybm8gPSAwOworCXU4IGJ1Zjg7CisJdTE2IGJ1ZjE2OworCXUzMiBidWYzMiwgYWRkcmVzczsKKworCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+cmVhZHkgfHwgIXNpc3VzYi0+c2lzdXNiX2RldikgeworCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSAmJgorCSAgICAoKnBwb3MpIDwgIFNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgKyAxMjgpIHsKKworCQlhZGRyZXNzID0gKCpwcG9zKSAtCisJCQlTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICsKKwkJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRTsKKworCQkvKiBSZWFkIGkvbyBwb3J0cworCQkgKiBCeXRlLCB3b3JkIGFuZCBsb25nKDMyKSBjYW4gYmUgcmVhZC4gQXMgdGhpcworCQkgKiBlbXVsYXRlcyBpblggaW5zdHJ1Y3Rpb25zLCB0aGUgZGF0YSByZXR1cm5lZCBpcworCQkgKiBpbiBtYWNoaW5lLWVuZGlhbm5lc3MuCisJCSAqLworCQlzd2l0Y2ggKGNvdW50KSB7CisKKwkJCWNhc2UgMToKKwkJCQlpZiAoc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfSU8sCisJCQkJCQkJYWRkcmVzcywgJmJ1ZjgpKQorCQkJCQllcnJubyA9IC1FSU87CisJCQkJZWxzZSBpZiAocHV0X3VzZXIoYnVmOCwgKHU4IF9fdXNlciAqKWJ1ZmZlcikpCisJCQkJCWVycm5vID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3JlYWQgPSAxOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoKKwkJCQlpZiAoc2lzdXNiX3JlYWRfbWVtaW9fd29yZChzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfSU8sCisJCQkJCQkJYWRkcmVzcywgJmJ1ZjE2KSkKKwkJCQkJZXJybm8gPSAtRUlPOworCQkJCWVsc2UgaWYgKHB1dF91c2VyKGJ1ZjE2LCAodTE2IF9fdXNlciAqKWJ1ZmZlcikpCisJCQkJCWVycm5vID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3JlYWQgPSAyOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQlpZiAoc2lzdXNiX3JlYWRfbWVtaW9fbG9uZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfSU8sCisJCQkJCQkJYWRkcmVzcywgJmJ1ZjMyKSkKKwkJCQkJZXJybm8gPSAtRUlPOworCQkJCWVsc2UgaWYgKHB1dF91c2VyKGJ1ZjMyLCAodTMyIF9fdXNlciAqKWJ1ZmZlcikpCisJCQkJCWVycm5vID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3JlYWQgPSA0OworCisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZXJybm8gPSAtRUlPOworCisJCX0KKworCX0gZWxzZSBpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICYmCisJCSAgICgqcHBvcykgPCAgU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSArIHNpc3VzYi0+dnJhbXNpemUpIHsKKworCQlhZGRyZXNzID0gKCpwcG9zKSAtCisJCQlTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICsKKwkJCVNJU1VTQl9QQ0lfTUVNQkFTRTsKKworCQkvKiBSZWFkIHZpZGVvIHJhbQorCQkgKiBSZW1lbWJlcjogRGF0YSBkZWxpdmVyZWQgaXMgbmV2ZXIgZW5kaWFuLWNvcnJlY3RlZAorCQkgKi8KKwkJZXJybm8gPSBzaXN1c2JfcmVhZF9tZW1fYnVsayhzaXN1c2IsIGFkZHJlc3MsCisJCQkJCU5VTEwsIGNvdW50LCBidWZmZXIsICZieXRlc19yZWFkKTsKKworCQlpZiAoYnl0ZXNfcmVhZCkKKwkJCWVycm5vID0gYnl0ZXNfcmVhZDsKKworCX0gZWxzZSAgaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UgJiYKKwkJICAgICgqcHBvcykgPCAgU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UgKyBTSVNVU0JfUENJX01NSU9TSVpFKSB7CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLQorCQkJU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UgKworCQkJU0lTVVNCX1BDSV9NTUlPQkFTRTsKKworCQkvKiBSZWFkIE1NSU8KKwkJICogUmVtZW1iZXI6IERhdGEgZGVsaXZlcmVkIGlzIG5ldmVyIGVuZGlhbi1jb3JyZWN0ZWQKKwkJICovCisJCWVycm5vID0gc2lzdXNiX3JlYWRfbWVtX2J1bGsoc2lzdXNiLCBhZGRyZXNzLAorCQkJCQlOVUxMLCBjb3VudCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCk7CisKKwkJaWYgKGJ5dGVzX3JlYWQpCisJCQllcnJubyA9IGJ5dGVzX3JlYWQ7CisKKwl9IGVsc2UgIGlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0UgJiYKKwkJICAgICgqcHBvcykgPD0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRSArIDB4NWMpIHsKKworCQlpZiAoY291bnQgIT0gNCkgeworCQkJdXAoJnNpc3VzYi0+bG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRTsKKworCQkvKiBSZWFkIFBDSSBjb25maWcgcmVnaXN0ZXIKKwkJICogUmV0dXJuIHZhbHVlIGRlbGl2ZXJlZCBpbiBtYWNoaW5lIGVuZGlhbm5lc3MuCisJCSAqLworCQlpZiAoc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIGFkZHJlc3MsICZidWYzMikpCisJCQllcnJubyA9IC1FSU87CisJCWVsc2UgaWYgKHB1dF91c2VyKGJ1ZjMyLCAodTMyIF9fdXNlciAqKWJ1ZmZlcikpCisJCQllcnJubyA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCWJ5dGVzX3JlYWQgPSA0OworCisJfSBlbHNlIHsKKworCQllcnJubyA9IC1FQkFERkQ7CisKKwl9CisKKwkoKnBwb3MpICs9IGJ5dGVzX3JlYWQ7CisKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKworCXJldHVybiBlcnJubyA/IGVycm5vIDogYnl0ZXNfcmVhZDsKK30KKworc3RhdGljIHNzaXplX3QKK3Npc3VzYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJCQkJCQlsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCWludCBlcnJubyA9IDA7CisJc3NpemVfdCBieXRlc193cml0dGVuID0gMDsKKwl1OCBidWY4OworCXUxNiBidWYxNjsKKwl1MzIgYnVmMzIsIGFkZHJlc3M7CisKKwlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpCisJCXJldHVybiAtRU5PREVWOworCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnJlYWR5IHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYpIHsKKwkJdXAoJnNpc3VzYi0+bG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgJiYKKwkgICAgKCpwcG9zKSA8ICBTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICsgMTI4KSB7CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLQorCQkJU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSArCisJCQlTSVNVU0JfUENJX0lPUE9SVEJBU0U7CisKKwkJLyogV3JpdGUgaS9vIHBvcnRzCisJCSAqIEJ5dGUsIHdvcmQgYW5kIGxvbmcoMzIpIGNhbiBiZSB3cml0dGVuLiBBcyB0aGlzCisJCSAqIGVtdWxhdGVzIG91dFggaW5zdHJ1Y3Rpb25zLCB0aGUgZGF0YSBpcyBleHBlY3RlZAorCQkgKiBpbiBtYWNoaW5lLWVuZGlhbm5lc3MuCisJCSAqLworCQlzd2l0Y2ggKGNvdW50KSB7CisKKwkJCWNhc2UgMToKKwkJCQlpZiAoZ2V0X3VzZXIoYnVmOCwgKHU4IF9fdXNlciAqKWJ1ZmZlcikpCisJCQkJCWVycm5vID0gLUVGQVVMVDsKKwkJCQllbHNlIGlmIChzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfSU8sCisJCQkJCQkJYWRkcmVzcywgYnVmOCkpCisJCQkJCWVycm5vID0gLUVJTzsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3dyaXR0ZW4gPSAxOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoKKwkJCQlpZiAoZ2V0X3VzZXIoYnVmMTYsICh1MTYgX191c2VyICopYnVmZmVyKSkKKwkJCQkJZXJybm8gPSAtRUZBVUxUOworCQkJCWVsc2UgaWYgKHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9JTywKKwkJCQkJCQlhZGRyZXNzLCBidWYxNikpCisJCQkJCWVycm5vID0gLUVJTzsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3dyaXR0ZW4gPSAyOworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQlpZiAoZ2V0X3VzZXIoYnVmMzIsICh1MzIgX191c2VyICopYnVmZmVyKSkKKwkJCQkJZXJybm8gPSAtRUZBVUxUOworCQkJCWVsc2UgaWYgKHNpc3VzYl93cml0ZV9tZW1pb19sb25nKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9JTywKKwkJCQkJCQlhZGRyZXNzLCBidWYzMikpCisJCQkJCWVycm5vID0gLUVJTzsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3dyaXR0ZW4gPSA0OworCisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZXJybm8gPSAtRUlPOworCQl9CisKKwl9IGVsc2UgaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSAmJgorCQkgICAoKnBwb3MpIDwgIFNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgKyBzaXN1c2ItPnZyYW1zaXplKSB7CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLQorCQkJU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSArCisJCQlTSVNVU0JfUENJX01FTUJBU0U7CisKKwkJLyogV3JpdGUgdmlkZW8gcmFtLgorCQkgKiBCdWZmZXIgaXMgY29waWVkIDE6MSwgdGhlcmVmb3JlLCBvbiBiaWctZW5kaWFuCisJCSAqIG1hY2hpbmVzLCB0aGUgZGF0YSBtdXN0IGJlIHN3YXBwZWQgYnkgdXNlcmxhbmQKKwkJICogaW4gYWR2YW5jZSAoaWYgYXBwbGljYWJsZTsgbm8gc3dhcHBpbmcgaW4gOGJwcAorCQkgKiBtb2RlIG9yIGlmIFlVViBkYXRhIGlzIGJlaW5nIHRyYW5zZmVycmVkKS4KKwkJICovCisJCWVycm5vID0gc2lzdXNiX3dyaXRlX21lbV9idWxrKHNpc3VzYiwgYWRkcmVzcywgTlVMTCwKKwkJCQkJY291bnQsIGJ1ZmZlciwgMCwgJmJ5dGVzX3dyaXR0ZW4pOworCisJCWlmIChieXRlc193cml0dGVuKQorCQkJZXJybm8gPSBieXRlc193cml0dGVuOworCisJfSBlbHNlICBpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRSAmJgorCQkgICAgKCpwcG9zKSA8ICBTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRSArIFNJU1VTQl9QQ0lfTU1JT1NJWkUpIHsKKworCQlhZGRyZXNzID0gKCpwcG9zKSAtCisJCQlTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRSArCisJCQlTSVNVU0JfUENJX01NSU9CQVNFOworCisJCS8qIFdyaXRlIE1NSU8uCisJCSAqIEJ1ZmZlciBpcyBjb3BpZWQgMToxLCB0aGVyZWZvcmUsIG9uIGJpZy1lbmRpYW4KKwkJICogbWFjaGluZXMsIHRoZSBkYXRhIG11c3QgYmUgc3dhcHBlZCBieSB1c2VybGFuZAorCQkgKiBpbiBhZHZhbmNlLgorCQkgKi8KKwkJZXJybm8gPSBzaXN1c2Jfd3JpdGVfbWVtX2J1bGsoc2lzdXNiLCBhZGRyZXNzLCBOVUxMLAorCQkJCQljb3VudCwgYnVmZmVyLCAwLCAmYnl0ZXNfd3JpdHRlbik7CisKKwkJaWYgKGJ5dGVzX3dyaXR0ZW4pCisJCQllcnJubyA9IGJ5dGVzX3dyaXR0ZW47CisKKwl9IGVsc2UgIGlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0UgJiYKKwkJICAgICgqcHBvcykgPD0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRSArIFNJU1VTQl9QQ0lfUENPTkZTSVpFKSB7CisKKwkJaWYgKGNvdW50ICE9IDQpIHsKKwkJCXVwKCZzaXN1c2ItPmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlhZGRyZXNzID0gKCpwcG9zKSAtIFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0U7CisKKwkJLyogV3JpdGUgUENJIGNvbmZpZyByZWdpc3Rlci4KKwkJICogR2l2ZW4gdmFsdWUgZXhwZWN0ZWQgaW4gbWFjaGluZSBlbmRpYW5uZXNzLgorCQkgKi8KKwkJaWYgKGdldF91c2VyKGJ1ZjMyLCAodTMyIF9fdXNlciAqKWJ1ZmZlcikpCisJCQllcnJubyA9IC1FRkFVTFQ7CisJCWVsc2UgaWYgKHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgYWRkcmVzcywgYnVmMzIpKQorCQkJZXJybm8gPSAtRUlPOworCQllbHNlCisJCQlieXRlc193cml0dGVuID0gNDsKKworCisJfSBlbHNlIHsKKworCQkvKiBFcnJvciAqLworCQllcnJubyA9IC1FQkFERkQ7CisKKwl9CisKKwkoKnBwb3MpICs9IGJ5dGVzX3dyaXR0ZW47CisKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKworCXJldHVybiBlcnJubyA/IGVycm5vIDogYnl0ZXNfd3JpdHRlbjsKK30KKworc3RhdGljIGxvZmZfdAorc2lzdXNiX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZykKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJbG9mZl90IHJldDsKKworCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzaXN1c2ItPnByZXNlbnQgfHwgIXNpc3VzYi0+cmVhZHkgfHwgIXNpc3VzYi0+c2lzdXNiX2RldikgeworCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3dpdGNoIChvcmlnKSB7CisJCWNhc2UgMDoKKwkJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCQkJcmV0ID0gZmlsZS0+Zl9wb3M7CisJCQkvKiBuZXZlciBuZWdhdGl2ZSwgbm8gZm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsIG5lZWRlZCAqLworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZpbGUtPmZfcG9zICs9IG9mZnNldDsKKwkJCXJldCA9IGZpbGUtPmZfcG9zOworCQkJLyogbmV2ZXIgbmVnYXRpdmUsIG5vIGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbCBuZWVkZWQgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogc2Vla2luZyByZWxhdGl2ZSB0byAiZW5kIG9mIGZpbGUiIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCXJldCA9IC1FSU5WQUw7CisJfQorCisJdXAoJnNpc3VzYi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2hhbmRsZV9jb21tYW5kKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgc3RydWN0IHNpc3VzYl9jb21tYW5kICp5LAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCAJcmV0dmFsLCBwb3J0LCBsZW5ndGg7CisJdTMyCWFkZHJlc3M7CisKKwlwb3J0ID0geS0+ZGF0YTMgLQorCQlTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICsKKwkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFOworCisJc3dpdGNoICh5LT5vcGVyYXRpb24pIHsKKwkJY2FzZSBTVUNNRF9HRVQ6CisJCQlyZXR2YWwgPSBzaXN1c2JfZ2V0aWR4cmVnKHNpc3VzYiwgcG9ydCwKKwkJCQkJCQkgeS0+ZGF0YTAsICZ5LT5kYXRhMSk7CisJCQlpZiAoIXJldHZhbCkgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCB5LAorCQkJCQkJCXNpemVvZigqeSkpKQorCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTVUNNRF9TRVQ6CisJCQlyZXR2YWwgPSBzaXN1c2Jfc2V0aWR4cmVnKHNpc3VzYiwgcG9ydCwKKwkJCQkJCXktPmRhdGEwLCB5LT5kYXRhMSk7CisJCQlicmVhazsKKworCQljYXNlIFNVQ01EX1NFVE9SOgorCQkJcmV0dmFsID0gc2lzdXNiX3NldGlkeHJlZ29yKHNpc3VzYiwgcG9ydCwKKwkJCQkJCXktPmRhdGEwLCB5LT5kYXRhMSk7CisJCQlicmVhazsKKworCQljYXNlIFNVQ01EX1NFVEFORDoKKwkJCXJldHZhbCA9IHNpc3VzYl9zZXRpZHhyZWdhbmQoc2lzdXNiLCBwb3J0LAorCQkJCQkJeS0+ZGF0YTAsIHktPmRhdGExKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1VDTURfU0VUQU5ET1I6CisJCQlyZXR2YWwgPSBzaXN1c2Jfc2V0aWR4cmVnYW5kb3Ioc2lzdXNiLCBwb3J0LAorCQkJCQkJeS0+ZGF0YTAsIHktPmRhdGExLCB5LT5kYXRhMik7CisJCQlicmVhazsKKworCQljYXNlIFNVQ01EX1NFVE1BU0s6CisJCQlyZXR2YWwgPSBzaXN1c2Jfc2V0aWR4cmVnbWFzayhzaXN1c2IsIHBvcnQsCisJCQkJCQl5LT5kYXRhMCwgeS0+ZGF0YTEsIHktPmRhdGEyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1VDTURfQ0xSU0NSOgorCQkJbGVuZ3RoID0gKHktPmRhdGEwIDw8IDE2KSB8ICh5LT5kYXRhMSA8PCA4KSB8IHktPmRhdGEyOworCQkJYWRkcmVzcyA9IHktPmRhdGEzIC0KKwkJCQlTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICsKKwkJCQlTSVNVU0JfUENJX01FTUJBU0U7CisJCQlyZXR2YWwgPSBzaXN1c2JfY2xlYXJfdnJhbShzaXN1c2IsIGFkZHJlc3MsIGxlbmd0aCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dmFsID0gLUVJTlZBTDsKKwl9CisKKwlpZihyZXR2YWwgPiAwKQorCQlyZXR2YWwgPSAtRUlPOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCSAgICAgCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCXN0cnVjdCBzaXN1c2JfaW5mbyB4OworCXN0cnVjdCBzaXN1c2JfY29tbWFuZCB5OworCWludCAJcmV0dmFsID0gMDsKKwl1MzIgX191c2VyICphcmdwID0gKHUzMiBfX3VzZXIgKilhcmc7CisKKwlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpCisJCXJldHVybiAtRU5PREVWOworCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnJlYWR5IHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXN3aXRjaCAoY21kKSB7CisKKwkJY2FzZSBTSVNVU0JfR0VUX0NPTkZJR19TSVpFOgorCisJCQlpZiAocHV0X3VzZXIoc2l6ZW9mKHgpLCBhcmdwKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQlicmVhazsKKworCQljYXNlIFNJU1VTQl9HRVRfQ09ORklHOgorCisJCQl4LnNpc3VzYl9pZCAgIAkgICAgPSBTSVNVU0JfSUQ7CisJCQl4LnNpc3VzYl92ZXJzaW9uICAgID0gU0lTVVNCX1ZFUlNJT047CisJCQl4LnNpc3VzYl9yZXZpc2lvbiAgID0gU0lTVVNCX1JFVklTSU9OOworCQkJeC5zaXN1c2JfcGF0Y2hsZXZlbCA9IFNJU1VTQl9QQVRDSExFVkVMOworCQkJeC5zaXN1c2JfZ2Z4aW5pdCAgICA9IHNpc3VzYi0+Z2Z4aW5pdDsKKwkJCXguc2lzdXNiX3ZyYW1iYXNlICAgPSBTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFOworCQkJeC5zaXN1c2JfbW1pb2Jhc2UgICA9IFNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFOworCQkJeC5zaXN1c2JfaW9iYXNlICAgICA9IFNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0U7CisJCQl4LnNpc3VzYl9wY2liYXNlICAgID0gU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRTsKKwkJCXguc2lzdXNiX3ZyYW1zaXplICAgPSBzaXN1c2ItPnZyYW1zaXplOworCQkJeC5zaXN1c2JfbWlub3IJICAgID0gc2lzdXNiLT5taW5vcjsKKwkJCXguc2lzdXNiX2ZiZGV2YWN0aXZlPSAwOworCisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJngsIHNpemVvZih4KSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBTSVNVU0JfQ09NTUFORDoKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ5LCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih5KSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWVsc2UKKwkJCQlyZXR2YWwgPSBzaXN1c2JfaGFuZGxlX2NvbW1hbmQoc2lzdXNiLCAmeSwgYXJnKTsKKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisKK2Vycl9vdXQ6CisJdXAoJnNpc3VzYi0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIFNJU1VTQl9ORVdfQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcKK3Npc3VzYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWxvbmcgcmV0dmFsOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBTSVNVU0JfR0VUX0NPTkZJR19TSVpFOgorCQljYXNlIFNJU1VTQl9HRVRfQ09ORklHOgorCQljYXNlIFNJU1VTQl9DT01NQU5EOgorCQkJbG9ja19rZXJuZWwoKTsKKwkJCXJldHZhbCA9IHNpc3VzYl9pb2N0bChmLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZiwgY21kLCBhcmcpOworCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJcmV0dXJuIHJldHZhbDsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3Npc3VzYl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCXNpc3VzYl9vcGVuLAorCS5yZWxlYXNlID0Jc2lzdXNiX3JlbGVhc2UsCisJLnJlYWQgPQkJc2lzdXNiX3JlYWQsCisJLndyaXRlID0Jc2lzdXNiX3dyaXRlLAorCS5sbHNlZWsgPSAJc2lzdXNiX2xzZWVrLAorI2lmZGVmIFNJU1VTQl9ORVdfQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBzaXN1c2JfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLmlvY3RsID0Jc2lzdXNiX2lvY3RsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3Npc3VzYl9jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL3Npc3VzYnZnYSVkIiwKKwkuZm9wcyA9CQkmdXNiX3Npc3VzYl9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQLAorCS5taW5vcl9iYXNlID0JU0lTVVNCX01JTk9SCit9OworCitzdGF0aWMgaW50IHNpc3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJaW50IHJldHZhbCA9IDAsIGk7CisJY29uc3QgY2hhciAqbWVtZmFpbCA9CisJCUtFUk5fRVJSCisJCSJzaXN1c2J2Z2FbJWRdOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBidWZmZXJcbiI7CisKKwlwcmludGsoS0VSTl9JTkZPICJzaXN1c2I6IFVTQjJWR0EgZG9uZ2xlIGZvdW5kIGF0IGFkZHJlc3MgJWRcbiIsCisJCWRldi0+ZGV2bnVtKTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIHByaXZhdGUgKi8KKwlpZiAoIShzaXN1c2IgPSBrbWFsbG9jKHNpemVvZigqc2lzdXNiKSwgR0ZQX0tFUk5FTCkpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInNpc3VzYjogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChzaXN1c2IsIDAsIHNpemVvZigqc2lzdXNiKSk7CisJa3JlZl9pbml0KCZzaXN1c2ItPmtyZWYpOworCisJaW5pdF9NVVRFWCgmKHNpc3VzYi0+bG9jaykpOworCisJLyogUmVnaXN0ZXIgZGV2aWNlICovCisJaWYgKChyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2Jfc2lzdXNiX2NsYXNzKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2lzdXNiOiBGYWlsZWQgdG8gZ2V0IGEgbWlub3IgZm9yIGRldmljZSAlZFxuIiwKKwkJCWRldi0+ZGV2bnVtKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl8xOworCX0KKworCXNpc3VzYi0+c2lzdXNiX2RldiA9IGRldjsKKwlzaXN1c2ItPm1pbm9yICAgICAgPSBpbnRmLT5taW5vcjsKKwlzaXN1c2ItPnZyYW1iYXNlICAgPSBTSVNVU0JfUENJX01FTUJBU0U7CisJc2lzdXNiLT5tbWlvYmFzZSAgID0gU0lTVVNCX1BDSV9NTUlPQkFTRTsKKwlzaXN1c2ItPm1taW9zaXplICAgPSBTSVNVU0JfUENJX01NSU9TSVpFOworCXNpc3VzYi0+aW9wb3J0YmFzZSA9IFNJU1VTQl9QQ0lfSU9QT1JUQkFTRTsKKwkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgemVybyAqLworCisJLyogQWxsb2NhdGUgYnVmZmVycyAqLworCXNpc3VzYi0+aWJ1ZnNpemUgPSBTSVNVU0JfSUJVRl9TSVpFOworCWlmICghKHNpc3VzYi0+aWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBTSVNVU0JfSUJVRl9TSVpFLAorCQkJCQlHRlBfS0VSTkVMLCAmc2lzdXNiLT50cmFuc2Zlcl9kbWFfaW4pKSkgeworCQlwcmludGsobWVtZmFpbCwgImlucHV0Iiwgc2lzdXNiLT5taW5vcik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfMjsKKwl9CisKKwlzaXN1c2ItPm51bW9idWZzID0gMDsKKwlzaXN1c2ItPm9idWZzaXplID0gU0lTVVNCX09CVUZfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNT0JVRlM7IGkrKykgeworCQlpZiAoIShzaXN1c2ItPm9idWZbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgU0lTVVNCX09CVUZfU0laRSwKKwkJCQkJR0ZQX0tFUk5FTCwKKwkJCQkJJnNpc3VzYi0+dHJhbnNmZXJfZG1hX291dFtpXSkpKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJcHJpbnRrKG1lbWZhaWwsICJvdXRwdXQiLCBzaXN1c2ItPm1pbm9yKTsKKwkJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3JfMzsKKwkJCX0KKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXNpc3VzYi0+bnVtb2J1ZnMrKzsKKworCX0KKworCS8qIEFsbG9jYXRlIFVSQnMgKi8KKwlpZiAoIShzaXN1c2ItPnNpc3VyYmluID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2lzdXNidmdhWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIFVSQnNcbiIsCisJCQlzaXN1c2ItPm1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl8zOworCX0KKwlzaXN1c2ItPmNvbXBsZXRlaW4gPSAxOworCisJZm9yIChpID0gMDsgaSA8IHNpc3VzYi0+bnVtb2J1ZnM7IGkrKykgeworCQlpZiAoIShzaXN1c2ItPnNpc3VyYm91dFtpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkic2lzdXNidmdhWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIFVSQnNcbiIsCisJCQkJc2lzdXNiLT5taW5vcik7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcl80OworCQl9CisJCXNpc3VzYi0+dXJib3V0X2NvbnRleHRbaV0uc2lzdXNiID0gKHZvaWQgKilzaXN1c2I7CisJCXNpc3VzYi0+dXJib3V0X2NvbnRleHRbaV0udXJiaW5kZXggPSBpOworCQlzaXN1c2ItPnVyYnN0YXR1c1tpXSA9IDA7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAic2lzdXNidmdhWyVkXTogQWxsb2NhdGVkICVkIG91dHB1dCBidWZmZXJzXG4iLAorCQkJCQlzaXN1c2ItPm1pbm9yLCBzaXN1c2ItPm51bW9idWZzKTsKKworCS8qIERvIHJlbWFpbmluZyBpbml0IHN0dWZmICovCisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzaXN1c2ItPndhaXRfcSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHNpc3VzYik7CisKKyNpZmRlZiBTSVNVU0JfT0xEX0NPTkZJR19DT01QQVQKKwl7CisJaW50IHJldDsKKwkvKiBPdXIgaW9jdGxzIGFyZSBhbGwgIjMyLzY0Yml0IGNvbXBhdGlibGUiICovCisJcmV0ID0gIHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihTSVNVU0JfR0VUX0NPTkZJR19TSVpFLCBOVUxMKTsKKwlyZXQgfD0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKFNJU1VTQl9HRVRfQ09ORklHLCAgICAgIE5VTEwpOworCXJldCB8PSByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oU0lTVVNCX0NPTU1BTkQsICAgICAgICAgTlVMTCk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2lzdXNidmdhWyVkXTogRXJyb3IgcmVnaXN0ZXJpbmcgaW9jdGwzMiAiCisJCQkidHJhbnNsYXRpb25zXG4iLAorCQkJc2lzdXNiLT5taW5vcik7CisJZWxzZQorCQlzaXN1c2ItPmlvY3RsMzJyZWdpc3RlcmVkID0gMTsKKworCX0KKyNlbmRpZgorCisJc2lzdXNiLT5wcmVzZW50ID0gMTsKKworCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CisJCWlmIChzaXN1c2JfaW5pdF9nZnhkZXZpY2Uoc2lzdXNiLCAxKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJzaXN1c2J2Z2FbJWRdOiBGYWlsZWQgdG8gZWFybHkgIgorCQkJCSJpbml0aWFsaXplIGRldmljZVxuIiwKKwkJCQlzaXN1c2ItPm1pbm9yKTsKKworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkic2lzdXNidmdhWyVkXTogTm90IGF0dGFjaGVkIHRvIFVTQiAyLjAgaHViLCAiCisJCQkiZGVmZXJyaW5nIGluaXRcbiIsCisJCQlzaXN1c2ItPm1pbm9yKTsKKworCXNpc3VzYi0+cmVhZHkgPSAxOworCisJcmV0dXJuIDA7CisKK2Vycm9yXzQ6CisJc2lzdXNiX2ZyZWVfdXJicyhzaXN1c2IpOworZXJyb3JfMzoKKwlzaXN1c2JfZnJlZV9idWZmZXJzKHNpc3VzYik7CitlcnJvcl8yOgorCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Npc3VzYl9jbGFzcyk7CitlcnJvcl8xOgorCWtmcmVlKHNpc3VzYik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2lzdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCWludCBtaW5vcjsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCS8qIFRoaXMgc2hvdWxkICpub3QqIGhhcHBlbiAqLworCWlmICghKHNpc3VzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZikpKSB7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybjsKKwl9CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJLyogV2FpdCBmb3IgYWxsIFVSQnMgdG8gY29tcGxldGUgYW5kIGtpbGwgdGhlbSBpbiBjYXNlIChNVVNUIGRvKSAqLworCWlmICghc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzaXN1c2IpKQorCQlzaXN1c2Jfa2lsbF9hbGxfYnVzeShzaXN1c2IpOworCisJbWlub3IgPSBzaXN1c2ItPm1pbm9yOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Npc3VzYl9jbGFzcyk7CisKKyNpZmRlZiBTSVNVU0JfT0xEX0NPTkZJR19DT01QQVQKKwlpZiAoc2lzdXNiLT5pb2N0bDMycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0OworCQlzaXN1c2ItPmlvY3RsMzJyZWdpc3RlcmVkID0gMDsKKwkJcmV0ID0gIHVucmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKFNJU1VTQl9HRVRfQ09ORklHX1NJWkUpOworCQlyZXQgfD0gdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oU0lTVVNCX0dFVF9DT05GSUcpOworCQlyZXQgfD0gdW5yZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oU0lTVVNCX0NPTU1BTkQpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkic2lzdXNidmdhWyVkXTogRXJyb3IgdW5yZWdpc3RlcmluZyAiCisJCQkJImlvY3RsMzIgdHJhbnNsYXRpb25zXG4iLAorCQkJCW1pbm9yKTsKKwkJfQorCX0KKyNlbmRpZgorCisJc2lzdXNiLT5wcmVzZW50ID0gMDsKKwlzaXN1c2ItPnJlYWR5ID0gMDsKKworCXVwKCZzaXN1c2ItPmxvY2spOworCisJLyogZGVjcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLworCWtyZWZfcHV0KCZzaXN1c2ItPmtyZWYsIHNpc3VzYl9kZWxldGUpOworCisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCXByaW50ayhLRVJOX0lORk8gInNpc3VzYnZnYVslZF06IERpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2lzdXNiX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkwMCkgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc2lzdXNiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpc3VzYl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInNpc3VzYiIsCisJLnByb2JlID0Jc2lzdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc2lzdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Jc2lzdXNiX3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2lzdXNiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJaWYgKCEocmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzaXN1c2JfZHJpdmVyKSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2lzdXNiOiBEcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkJCVNJU1VTQl9WRVJTSU9OLCBTSVNVU0JfUkVWSVNJT04sIFNJU1VTQl9QQVRDSExFVkVMKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJInNpc3VzYjogQ29weXJpZ2h0IChDKSAyMDA1IFRob21hcyBXaW5pc2NoaG9mZXJcbiIpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc2lzdXNiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2lzdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9zaXN1c2JfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc2lzdXNiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgV2luaXNjaGhvZmVyIDx0aG9tYXNAd2luaXNjaGhvZmVyLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigic2lzdXNiIC0gRHJpdmVyIGZvciBOZXQyMjgwL1NpUzMxNS1iYXNlZCBVU0IyVkdBIGRvbmdsZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmggYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzA2ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBzaXN1c2IgLSB1c2Iga2VybmVsIGRyaXZlciBmb3IgTmV0MjI4MC9TaVMzMTUgYmFzZWQgVVNCMlZHQSBkb25nbGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFRob21hcyBXaW5pc2NoaG9mZXIsIFZpZW5uYSwgQXVzdHJpYQorICoKKyAqIElmIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgdGhpcyBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEdQTCB2Mi4KKyAqCisgKiBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyBhcHBseToKKyAqCisgKiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICogYXJlIG1ldDoKKyAqICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAqIDMpIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICoKKyAqICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUgorICogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogQXV0aG9yOiAJVGhvbWFzIFdpbmlzY2hob2ZlciA8dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+CisgKgorICovCisKKyNpZm5kZWYgX1NJU1VTQl9IXworI2RlZmluZSBfU0lTVVNCX0hfCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKKyNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CisjZGVmaW5lIFNJU1VTQl9PTERfQ09ORklHX0NPTVBBVAorI2Vsc2UKKyNkZWZpbmUgU0lTVVNCX05FV19DT05GSUdfQ09NUEFUCisjZW5kaWYKKyNlbmRpZgorCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisKKyNkZWZpbmUgU0lTVVNCX1ZFUlNJT04JCTAKKyNkZWZpbmUgU0lTVVNCX1JFVklTSU9OIAkwCisjZGVmaW5lIFNJU1VTQl9QQVRDSExFVkVMCTcKKworLyogVVNCIHJlbGF0ZWQgKi8KKworI2RlZmluZSBTSVNVU0JfTUlOT1IJMTMzCQkvKiBGSVhNRSAqLworCisvKiBTaXplIG9mIHRoZSBzaXN1c2IgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgKi8KKyNkZWZpbmUgU0lTVVNCX0lCVUZfU0laRSAgMHgwMTAwMAorI2RlZmluZSBTSVNVU0JfT0JVRl9TSVpFICAweDEwMDAwCS8qIGZpeGVkICovCisKKyNkZWZpbmUgTlVNT0JVRlMgOAkJCS8qIG1heCBudW1iZXIgb2Ygb3V0cHV0IGJ1ZmZlcnMvb3V0cHV0IFVSQnMgKi8KKworLyogQWJvdXQgZW5kaWFubmVzczoKKyAqCisgKiAxKSBJL08gcG9ydHMsIFBDSSBjb25maWcgcmVnaXN0ZXJzLiBUaGUgcmVhZC93cml0ZSgpCisgKiAgICBjYWxscyBlbXVsYXRlIGluWC9vdXRYLiBIZW5jZSwgdGhlIGRhdGEgaXMKKyAqICAgIGV4cGVjdGVkL2RlbGl2ZXJlZCBpbiBtYWNoaW5lIGVuZGlhbm5lcyBieSB0aGlzCisgKiAgICBkcml2ZXIuCisgKiAyKSBWaWRlbyBtZW1vcnkuIFRoZSBkYXRhIGlzIGNvcGllZCAxOjEuIFRoZXJlIGlzCisgKiAgICBubyBzd2FwcGluZy4gRXZlci4gVGhpcyBtZWFucyBmb3IgdXNlcmxhbmQgdGhhdAorICogICAgdGhlIGRhdGEgaGFzIHRvIGJlIHByZXBhcmVkIHByb3Blcmx5LiAoSGludDoKKyAqICAgIHRoaW5rIGdyYXBoaWNzIGRhdGEgZm9ybWF0LCBjb21tYW5kIHF1ZXVlLAorICogICAgaGFyZHdhcmUgY3Vyc29yLikKKyAqIDMpIE1NSU8uIERhdGEgaXMgY29waWVkIDE6MS4gTU1JTyBtdXN0IGJlIHN3YXBwZWQKKyAqICAgIHByb3Blcmx5IGJ5IHVzZXJsYW5kLgorICoKKyAqLworCisjaWZkZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIFNJU1VTQl9DT1JSRUNUX0VORElBTk5FU1NfUEFDS0VUKHApIAkJXAorCWRvIHsJCQkJCQlcCisJCXAtPmhlYWRlciAgPSBjcHVfdG9fbGUxNihwLT5oZWFkZXIpOwlcCisJCXAtPmFkZHJlc3MgPSBjcHVfdG9fbGUzMihwLT5hZGRyZXNzKTsJXAorCQlwLT5kYXRhICAgID0gY3B1X3RvX2xlMzIocC0+ZGF0YSk7CVwKKwl9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBTSVNVU0JfQ09SUkVDVF9FTkRJQU5ORVNTX1BBQ0tFVChwKQorI2VuZGlmCisKK3N0cnVjdCBzaXN1c2JfdXNiX2RhdGE7CisKK3N0cnVjdCBzaXN1c2JfdXJiX2NvbnRleHQgewkJLyogdXJiLT5jb250ZXh0IGZvciBvdXRib3VuZCBidWxrIFVSQnMgKi8KKwlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CisJaW50IHVyYmluZGV4OworCWludCAqYWN0dWFsX2xlbmd0aDsKK307CisKK3N0cnVjdCBzaXN1c2JfdXNiX2RhdGEgeworCXN0cnVjdCB1c2JfZGV2aWNlICpzaXN1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IGtyZWYga3JlZjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CS8qIGZvciBzeW5jaW5kIGFuZCB0aW1lb3V0cyAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsJCS8qIGdlbmVyYWwgcmFjZSBhdm9pZGFuY2UgKi8KKwl1bnNpZ25lZCBpbnQgaWZudW07CQkvKiBpbnRlcmZhY2UgbnVtYmVyIG9mIHRoZSBVU0IgZGV2aWNlICovCisJaW50IG1pbm9yOwkJCS8qIG1pbm9yIChmb3IgbG9nZ2luZyBjbGFyaXR5KSAqLworCWludCBpc29wZW47CQkJLyogIT0wIGlmIG9wZW4gKi8KKwlpbnQgcHJlc2VudDsJCQkvKiAhPTAgaWYgZGV2aWNlIGlzIHByZXNlbnQgb24gdGhlIGJ1cyAqLworCWludCByZWFkeTsJCQkvKiAhPTAgaWYgZGV2aWNlIGlzIHJlYWR5IGZvciB1c2VybGFuZCAqLworI2lmZGVmIFNJU1VTQl9PTERfQ09ORklHX0NPTVBBVAorCWludCBpb2N0bDMycmVnaXN0ZXJlZDsKKyNlbmRpZgorCWludCBudW1vYnVmczsJCQkvKiBudW1iZXIgb2Ygb2J1ZnMgPSBudW1iZXIgb2Ygb3V0IHVyYnMgKi8KKwljaGFyICpvYnVmW05VTU9CVUZTXSwgKmlidWY7CS8qIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKwlpbnQgb2J1ZnNpemUsIGlidWZzaXplOworCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hX291dFtOVU1PQlVGU107CisJZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWFfaW47CisJc3RydWN0IHVyYiAqc2lzdXJib3V0W05VTU9CVUZTXTsKKwlzdHJ1Y3QgdXJiICpzaXN1cmJpbjsKKwl1bnNpZ25lZCBjaGFyIHVyYnN0YXR1c1tOVU1PQlVGU107CisJdW5zaWduZWQgY2hhciBjb21wbGV0ZWluOworCXN0cnVjdCBzaXN1c2JfdXJiX2NvbnRleHQgdXJib3V0X2NvbnRleHRbTlVNT0JVRlNdOworCXVuc2lnbmVkIGxvbmcgZmxhZ2IwOworCXVuc2lnbmVkIGxvbmcgdnJhbWJhc2U7CQkvKiBmcmFtZWJ1ZmZlciBiYXNlICovCisJdW5zaWduZWQgaW50IHZyYW1zaXplOwkJLyogZnJhbWVidWZmZXIgc2l6ZSAoYnl0ZXMpICovCisJdW5zaWduZWQgbG9uZyBtbWlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgbW1pb3NpemU7CisJdW5zaWduZWQgbG9uZyBpb3BvcnRiYXNlOworCXVuc2lnbmVkIGNoYXIgZGV2aW5pdDsJCS8qIGRldmljZSBpbml0aWFsaXplZD8gKi8KKwl1bnNpZ25lZCBjaGFyIGdmeGluaXQ7CQkvKiBncmFwaGljcyBjb3JlIGluaXRpYWxpemVkPyAqLworCXVuc2lnbmVkIHNob3J0IGNoaXBpZCwgY2hpcHZlbmRvcjsKKwl1bnNpZ25lZCBzaG9ydCBjaGlwcmV2aXNpb247Cit9OworCisjZGVmaW5lIHRvX3Npc3VzYl9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEsIGtyZWYpCisKKy8qIFVTQiB0cmFuc3BvcnQgcmVsYXRlZCAqLworCisvKiB1cmJzdGF0dXMgKi8KKyNkZWZpbmUgU1VfVVJCX0JVU1kgICAxCisjZGVmaW5lIFNVX1VSQl9BTExPQyAgMgorCisvKiBFbmRwb2ludHMgKi8KKworI2RlZmluZSBTSVNVU0JfRVBfR0ZYX0lOCTB4MGUJLyogZ2Z4IHN0ZCBwYWNrZXQgb3V0KDBlKS9pbig4ZSkgKi8KKyNkZWZpbmUgU0lTVVNCX0VQX0dGWF9PVVQJMHgwZQorCisjZGVmaW5lIFNJU1VTQl9FUF9HRlhfQlVMS19PVVQJMHgwMQkvKiBnZnggbWVtIGJ1bGsgb3V0L2luICovCisjZGVmaW5lIFNJU1VTQl9FUF9HRlhfQlVMS19JTgkweDAyCS8qID8gMiBpcyAiT1VUIiA/ICovCisKKyNkZWZpbmUgU0lTVVNCX0VQX0dGWF9MQlVMS19PVVQJMHgwMwkvKiBnZnggbGFyZ2UgbWVtIGJ1bGsgb3V0ICovCisKKyNkZWZpbmUgU0lTVVNCX0VQX1VOS05PV05fMDQJMHgwNAkvKiA/IDQgaXMgIk9VVCIgPyAtIHVudXNlZCAqLworCisjZGVmaW5lIFNJU1VTQl9FUF9CUklER0VfSU4JMHgwZAkvKiBOZXQyMjgwIG91dCgwZCkvaW4oOGQpICovCisjZGVmaW5lIFNJU1VTQl9FUF9CUklER0VfT1VUCTB4MGQKKworI2RlZmluZSBTSVNVU0JfVFlQRV9NRU0JCTAKKyNkZWZpbmUgU0lTVVNCX1RZUEVfSU8JCTEKKworc3RydWN0IHNpc3VzYl9wYWNrZXQgeworCXVuc2lnbmVkIHNob3J0IGhlYWRlcjsKKwl1MzIgYWRkcmVzczsKKwl1MzIgZGF0YTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lIENMRUFSUEFDS0VUKHBhY2tldCkgbWVtc2V0KHBhY2tldCwgMCwgMTApCisKKy8qIFBDSSBicmlkZ2UgcmVsYXRlZCAqLworCisjZGVmaW5lIFNJU1VTQl9QQ0lfTUVNQkFTRQkweGQwMDAwMDAwCisjZGVmaW5lIFNJU1VTQl9QQ0lfTU1JT0JBU0UJMHhlNDAwMDAwMAorI2RlZmluZSBTSVNVU0JfUENJX0lPUE9SVEJBU0UJMHgwMDAwZDAwMAorCisjZGVmaW5lIFNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UJMHgxMDAwMDAwMAorI2RlZmluZSBTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRQkweDIwMDAwMDAwCisjZGVmaW5lIFNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UJMHgwMDAwZDAwMAorI2RlZmluZSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFCTB4MDAwMTAwMDAKKworI2RlZmluZSBTSVNVU0JfUENJX01NSU9TSVpFCSgxMjgqMTAyNCkKKyNkZWZpbmUgU0lTVVNCX1BDSV9QQ09ORlNJWkUJMHg1YworCisvKiBncmFwaGljcyBjb3JlIHJlbGF0ZWQgKi8KKworI2RlZmluZSBBUk9GRlNFVAkweDQwCisjZGVmaW5lIEFSUk9GRlNFVAkweDQxCisjZGVmaW5lIEdST0ZGU0VUCTB4NGUKKyNkZWZpbmUgU1JPRkZTRVQJMHg0NAorI2RlZmluZSBDUk9GRlNFVAkweDU0CisjZGVmaW5lIE1JU0NST0ZGU0VUCTB4NGMKKyNkZWZpbmUgTUlTQ1dPRkZTRVQJMHg0MgorI2RlZmluZSBJTlBVVFNUQVRPRkZTRVQgMHg1QQorI2RlZmluZSBQQVJUMU9GRlNFVAkweDA0CisjZGVmaW5lIFBBUlQyT0ZGU0VUCTB4MTAKKyNkZWZpbmUgUEFSVDNPRkZTRVQJMHgxMgorI2RlZmluZSBQQVJUNE9GRlNFVAkweDE0CisjZGVmaW5lIFBBUlQ1T0ZGU0VUCTB4MTYKKyNkZWZpbmUgQ0FQVFVSRU9GRlNFVAkweDAwCisjZGVmaW5lIFZJREVPT0ZGU0VUCTB4MDIKKyNkZWZpbmUgQ09MUkVHT0ZGU0VUCTB4NDgKKyNkZWZpbmUgUEVMTUFTS09GRlNFVAkweDQ2CisjZGVmaW5lIFZHQUVOQUJMRQkweDQzCisKKyNkZWZpbmUgU0lTQVIJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIEFST0ZGU0VUCisjZGVmaW5lIFNJU0FSUgkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQVJST0ZGU0VUCisjZGVmaW5lIFNJU0dSCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBHUk9GRlNFVAorI2RlZmluZSBTSVNTUgkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgU1JPRkZTRVQKKyNkZWZpbmUgU0lTQ1IJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIENST0ZGU0VUCisjZGVmaW5lIFNJU01JU0NSCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIE1JU0NST0ZGU0VUCisjZGVmaW5lIFNJU01JU0NXCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIE1JU0NXT0ZGU0VUCisjZGVmaW5lIFNJU0lOUFNUQVQJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgSU5QVVRTVEFUT0ZGU0VUCisjZGVmaW5lIFNJU1BBUlQxCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFBBUlQxT0ZGU0VUCisjZGVmaW5lIFNJU1BBUlQyCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFBBUlQyT0ZGU0VUCisjZGVmaW5lIFNJU1BBUlQzCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFBBUlQzT0ZGU0VUCisjZGVmaW5lIFNJU1BBUlQ0CVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFBBUlQ0T0ZGU0VUCisjZGVmaW5lIFNJU1BBUlQ1CVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFBBUlQ1T0ZGU0VUCisjZGVmaW5lIFNJU0NBUAkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQ0FQVFVSRU9GRlNFVAorI2RlZmluZSBTSVNWSUQJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFZJREVPT0ZGU0VUCisjZGVmaW5lIFNJU0NPTElEWFIJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQ09MUkVHT0ZGU0VUIC0gMQorI2RlZmluZSBTSVNDT0xJRFgJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQ09MUkVHT0ZGU0VUCisjZGVmaW5lIFNJU0NPTERBVEEJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgQ09MUkVHT0ZGU0VUICsgMQorI2RlZmluZSBTSVNDT0wySURYCVNJU1BBUlQ1CisjZGVmaW5lIFNJU0NPTDJEQVRBCVNJU1BBUlQ1ICsgMQorI2RlZmluZSBTSVNQRUwJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFBFTE1BU0tPRkZTRVQKKyNkZWZpbmUgU0lTVkdBRU4JU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgVkdBRU5BQkxFCisjZGVmaW5lIFNJU0RBQ0EJCVNJU0NPTElEWAorI2RlZmluZSBTSVNEQUNECQlTSVNDT0xEQVRBCisKKy8qIGlvY3RsIHJlbGF0ZWQgKi8KKworLyogU3RydWN0dXJlIGFyZ3VtZW50IGZvciBTSVNVU0JfR0VUX0lORk8gaW9jdGwgICovCitzdHJ1Y3Qgc2lzdXNiX2luZm8geworCV9fdTMyCXNpc3VzYl9pZDsJCS8qIGZvciBpZGVudGlmeWluZyBzaXN1c2IgKi8KKyNkZWZpbmUgU0lTVVNCX0lEICAweDUzNDk1MzU1CQkvKiBJZGVudGlmeSBteXNlbGYgd2l0aCAnU0lTVScgKi8KKwlfX3U4CXNpc3VzYl92ZXJzaW9uOworCV9fdTgJc2lzdXNiX3JldmlzaW9uOworCV9fdTgJc2lzdXNiX3BhdGNobGV2ZWw7CisJX191OAlzaXN1c2JfZ2Z4aW5pdDsJCS8qIGdyYXBoaWNzIGNvcmUgaW5pdGlhbGl6ZWQ/ICovCisKKwlfX3UzMglzaXN1c2JfdnJhbWJhc2U7CisJX191MzIJc2lzdXNiX21taW9iYXNlOworCV9fdTMyCXNpc3VzYl9pb2Jhc2U7CisJX191MzIJc2lzdXNiX3BjaWJhc2U7CisKKwlfX3UzMglzaXN1c2JfdnJhbXNpemU7CS8qIGZyYW1lYnVmZmVyIHNpemUgaW4gYnl0ZXMgKi8KKworCV9fdTMyCXNpc3VzYl9taW5vcjsKKworCV9fdTMyICAgc2lzdXNiX2ZiZGV2YWN0aXZlOwkvKiAhPSAwIGlmIGZyYW1lYnVmZmVyIGRldmljZSBhY3RpdmUgKi8KKworCV9fdTgJc2lzdXNiX3Jlc2VydmVkWzMyXTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKK3N0cnVjdCBzaXN1c2JfY29tbWFuZCB7CisJX191OCAgIG9wZXJhdGlvbjsJLyogc2VlIGJlbG93ICovCisJX191OCAgIGRhdGEwOwkJLyogb3BlcmF0aW9uIGRlcGVuZGVudCAqLworCV9fdTggICBkYXRhMTsJCS8qIG9wZXJhdGlvbiBkZXBlbmRlbnQgKi8KKwlfX3U4ICAgZGF0YTI7CQkvKiBvcGVyYXRpb24gZGVwZW5kZW50ICovCisJX191MzIgIGRhdGEzOwkJLyogb3BlcmF0aW9uIGRlcGVuZGVudCAqLworCV9fdTMyICBkYXRhNDsJCS8qIGZvciBmdXR1cmUgdXNlICovCit9OworCisjZGVmaW5lIFNVQ01EX0dFVCAgICAgIDB4MDEJLyogZm9yIGFsbDogZGF0YTAgPSBpbmRleCwgZGF0YTMgPSBwb3J0ICovCisjZGVmaW5lIFNVQ01EX1NFVCAgICAgIDB4MDIJLyogZGF0YTEgPSB2YWx1ZSAqLworI2RlZmluZSBTVUNNRF9TRVRPUiAgICAweDAzCS8qIGRhdGExID0gb3IgKi8KKyNkZWZpbmUgU1VDTURfU0VUQU5EICAgMHgwNAkvKiBkYXRhMSA9IGFuZCAqLworI2RlZmluZSBTVUNNRF9TRVRBTkRPUiAweDA1CS8qIGRhdGExID0gYW5kLCBkYXRhMiA9IG9yICovCisjZGVmaW5lIFNVQ01EX1NFVE1BU0sgIDB4MDYJLyogZGF0YTEgPSBkYXRhLCBkYXRhMiA9IG1hc2sgKi8KKworI2RlZmluZSBTVUNNRF9DTFJTQ1IgICAweDA3CS8qIGRhdGEwOjE6MiA9IGxlbmd0aCwgZGF0YTMgPSBhZGRyZXNzICovCisKKyNkZWZpbmUgU0lTVVNCX0NPTU1BTkQJCV9JT1dSKDB4RjMsMHgzRCxzdHJ1Y3Qgc2lzdXNiX2NvbW1hbmQpCisjZGVmaW5lIFNJU1VTQl9HRVRfQ09ORklHX1NJWkUgCV9JT1IoMHhGMywweDNFLF9fdTMyKQorI2RlZmluZSBTSVNVU0JfR0VUX0NPTkZJRyAgCV9JT1IoMHhGMywweDNGLHN0cnVjdCBzaXN1c2JfaW5mbykKKworI2VuZGlmIC8qIFNJU1VTQl9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NmFiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0wLDAgKzEsNDA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JMQ0QgS2VybmVsIERyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAoQykgMjAwNSBHZW9yZ2VzIFRvdGggPGcudG90aEBlLWJpei5sdT4gICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLiBTZWUgQ09QWUlORyBpbiB0aGUgcGFja2FnZS4gICAgICAqCisgKiBCYXNlZCBvbiB1c2Itc2tlbGV0b24uYyAyLjAgYnkgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAyOC4wMi4wNSBDb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBvcmlnaW5hbCB1c2JsY2QuYyBkcml2ZXIsICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgIGJhc2VkIG9uIHVzYl9za2VsZXRvbi5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgVGhpcyBuZXcgZHJpdmVyIGFsbG93cyBtb3JlIHRoYW4gb25lIFVTQi1MQ0QgdG8gYmUgY29ubmVjdGVkICAgICAqCisgKiAgICAgICAgICBhbmQgY29udHJvbGxlZCwgYXQgb25jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVVNCTENEIERyaXZlciBWZXJzaW9uIDEuMDUiCisKKyNkZWZpbmUgVVNCTENEX01JTk9SCQkxNDQKKworI2RlZmluZSBJT0NUTF9HRVRfSEFSRF9WRVJTSU9OCTEKKyNkZWZpbmUgSU9DVExfR0VUX0RSVl9WRVJTSU9OCTIKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyAuaWRWZW5kb3IgPSAweDEwRDIsIC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SLCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworCitzdHJ1Y3QgdXNiX2xjZCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKgl1ZGV2OwkJCS8qIGluaXQ6IHByb2JlX2xjZCAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICogIGludGVyZmFjZTsJCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciAqICAgICAgICAgYnVsa19pbl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSAqLworCXNpemVfdAkJCWJ1bGtfaW5fc2l6ZTsJCS8qIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3Qga3JlZiAgICAgICAgICAgICBrcmVmOworfTsKKyNkZWZpbmUgdG9fbGNkX2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9sY2QsIGtyZWYpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsY2RfZHJpdmVyOworCisKK3N0YXRpYyB2b2lkIGxjZF9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldiA9IHRvX2xjZF9kZXYoa3JlZik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCWtmcmVlIChkZXYtPmJ1bGtfaW5fYnVmZmVyKTsKKwlrZnJlZSAoZGV2KTsKK30KKworCitzdGF0aWMgaW50IGxjZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlpbnQgc3VibWlub3I7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmxjZF9kcml2ZXIsIHN1Ym1pbm9yKTsKKwlpZiAoIWludGVyZmFjZSkgeworCQllcnIgKCJVU0JMQ0Q6ICVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaWYgKCFkZXYpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsKKworCS8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbGNkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKworCWRldiA9IChzdHJ1Y3QgdXNiX2xjZCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogZGVjcmVtZW50IHRoZSBjb3VudCBvbiBvdXIgZGV2aWNlICovCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgbGNkX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxjZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgYnl0ZXNfcmVhZDsKKworCWRldiA9IChzdHJ1Y3QgdXNiX2xjZCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIGRvIGEgYmxvY2tpbmcgYnVsayByZWFkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZSAqLworCXJldHZhbCA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIAorCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkgICAgICBkZXYtPmJ1bGtfaW5fYnVmZmVyLAorCQkJICAgICAgbWluKGRldi0+YnVsa19pbl9zaXplLCBjb3VudCksCisJCQkgICAgICAmYnl0ZXNfcmVhZCwgMTAwMDApOworCisJLyogaWYgdGhlIHJlYWQgd2FzIHN1Y2Nlc3NmdWwsIGNvcHkgdGhlIGRhdGEgdG8gdXNlcnNwYWNlICovCisJaWYgKCFyZXR2YWwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGRldi0+YnVsa19pbl9idWZmZXIsIGJ5dGVzX3JlYWQpKQorCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0dmFsID0gYnl0ZXNfcmVhZDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGxjZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKwl1MTYgYmNkRGV2aWNlOworCWNoYXIgYnVmWzMwXTsKKworCWRldiA9IChzdHJ1Y3QgdXNiX2xjZCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCQorCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJT0NUTF9HRVRfSEFSRF9WRVJTSU9OOgorCQliY2REZXZpY2UgPSBsZTE2X3RvX2NwdSgoZGV2LT51ZGV2KS0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQlzcHJpbnRmKGJ1ZiwiJTFkJTFkLiUxZCUxZCIsCisJCQkoYmNkRGV2aWNlICYgMHhGMDAwKT4+MTIsCisJCQkoYmNkRGV2aWNlICYgMHhGMDApPj44LAorCQkJKGJjZERldmljZSAmIDB4RjApPj40LAorCQkJKGJjZERldmljZSAmIDB4RikpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZyxidWYsc3RybGVuKGJ1ZikpIT0wKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgSU9DVExfR0VUX0RSVl9WRVJTSU9OOgorCQlzcHJpbnRmKGJ1ZixEUklWRVJfVkVSU0lPTik7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLGJ1ZixzdHJsZW4oYnVmKSkhPTApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsY2Rfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9sY2QgKil1cmItPmNvbnRleHQ7CisKKwkvKiBzeW5jL2FzeW5jIHVubGluayBmYXVsdHMgYXJlbid0IGVycm9ycyAqLworCWlmICh1cmItPnN0YXR1cyAmJgorCSAgICAhKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkgICAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorICAgICAgICAgICAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgeworCQlkYmcoIlVTQkxDRDogJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwkvKiBmcmVlIHVwIG91ciBhbGxvY2F0ZWQgYnVmZmVyICovCisJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworfQorCitzdGF0aWMgc3NpemVfdCBsY2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisgICAgICAgIGludCByZXR2YWwgPSAwOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJY2hhciAqYnVmID0gTlVMTDsKKwkKKwlkZXYgPSAoc3RydWN0IHVzYl9sY2QgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gd3JpdGUgKi8KKwlpZiAoY291bnQgPT0gMCkKKwkJZ290byBleGl0OworCisJLyogY3JlYXRlIGEgdXJiLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgdXJiICovCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwkKKwlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dWRldiwgY291bnQsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCFidWYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWZmZXIsIGNvdW50KSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycm9yOworCX0KKwkKKwkvKiBpbml0aWFsaXplIHRoZSB1cmIgcHJvcGVybHkgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi0+dWRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIpLAorCQkJICBidWYsIGNvdW50LCBsY2Rfd3JpdGVfYnVsa19jYWxsYmFjaywgZGV2KTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQorCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJVU0JMQ0Q6ICVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJZ290byBlcnJvcjsKKwl9CisJCisJLyogcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoaXMgdXJiLCB0aGUgVVNCIGNvcmUgd2lsbCBldmVudHVhbGx5IGZyZWUgaXQgZW50aXJlbHkgKi8KKwl1c2JfZnJlZV91cmIodXJiKTsKKworZXhpdDoKKwlyZXR1cm4gY291bnQ7CisKK2Vycm9yOgorCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIGNvdW50LCBidWYsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsY2RfZm9wcyA9IHsKKyAgICAgICAgLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAorICAgICAgICAucmVhZCA9ICAgICAgICAgbGNkX3JlYWQsCisgICAgICAgIC53cml0ZSA9ICAgICAgICBsY2Rfd3JpdGUsCisgICAgICAgIC5vcGVuID0gICAgICAgICBsY2Rfb3BlbiwKKwkuaW9jdGwgPSAgICAgICAgbGNkX2lvY3RsLAorICAgICAgICAucmVsZWFzZSA9ICAgICAgbGNkX3JlbGVhc2UsCit9OworCisvKgorICogICogdXNiIGNsYXNzIGRyaXZlciBpbmZvIGluIG9yZGVyIHRvIGdldCBhIG1pbm9yIG51bWJlciBmcm9tIHRoZSB1c2IgY29yZSwKKyAqICAgKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCBkZXZmcyBhbmQgdGhlIGRyaXZlciBjb3JlCisgKiAgICAqLworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGxjZF9jbGFzcyA9IHsKKyAgICAgICAgLm5hbWUgPSAgICAgICAgICJ1c2IvbGNkJWQiLAorICAgICAgICAuZm9wcyA9ICAgICAgICAgJmxjZF9mb3BzLAorICAgICAgICAubW9kZSA9ICAgICAgICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RILAorICAgICAgICAubWlub3JfYmFzZSA9ICAgVVNCTENEX01JTk9SLAorfTsKKworc3RhdGljIGludCBsY2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXYgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisJaW50IGk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwlkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVycigiT3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIGVycm9yOworCX0KKwltZW1zZXQoZGV2LCAweDAwLCBzaXplb2YoKmRldikpOworCWtyZWZfaW5pdCgmZGV2LT5rcmVmKTsKKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKwlpZiAobGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHgwMDAxKSB7CisJCXdhcm4oS0VSTl9JTkZPICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCQorCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisJCSAgICAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCWRldi0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlkZXYtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRldi0+YnVsa19pbl9idWZmZXIpIHsKKwkJCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlciIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKworCQlpZiAoIWRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyICYmCisJCSAgICAhKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLworCQkJZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJfQorCX0KKwlpZiAoIShkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmIGRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSkgeworCQllcnIoIkNvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmbGNkX2NsYXNzKTsKKwlpZiAocmV0dmFsKSB7CisJCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRyaXZlciAqLworCQllcnIoIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS4iKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQlnb3RvIGVycm9yOworCX0KKworCWkgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKworCWluZm8oIlVTQkxDRCBWZXJzaW9uICUxZCUxZC4lMWQlMWQgZm91bmQgYXQgYWRkcmVzcyAlZCIsCisJCShpICYgMHhGMDAwKT4+MTIsKGkgJiAweEYwMCk+PjgsKGkgJiAweEYwKT4+NCwoaSAmIDB4RiksCisJCWRldi0+dWRldi0+ZGV2bnVtKTsKKworCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KKwlpbmZvKCJVU0IgTENEIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCTENELSVkIiwgaW50ZXJmYWNlLT5taW5vcik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChkZXYpCisJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGxjZF9kZWxldGUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9sY2QgKmRldjsKKyAgICAgICAgaW50IG1pbm9yID0gaW50ZXJmYWNlLT5taW5vcjsKKworICAgICAgICAvKiBwcmV2ZW50IHNrZWxfb3BlbigpIGZyb20gcmFjaW5nIHNrZWxfZGlzY29ubmVjdCgpICovCisgICAgICAgIGxvY2tfa2VybmVsKCk7CisKKyAgICAgICAgZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKyAgICAgICAgLyogZ2l2ZSBiYWNrIG91ciBtaW5vciAqLworICAgICAgICB1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmbGNkX2NsYXNzKTsKKyAKKwl1bmxvY2tfa2VybmVsKCk7CisKKwkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgbGNkX2RlbGV0ZSk7CisKKwlpbmZvKCJVU0IgTENEICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGNkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNibGNkIiwKKwkucHJvYmUgPQlsY2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlsY2RfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9sY2RfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisJCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZsY2RfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfbGNkX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmbGNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9sY2RfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfbGNkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHZW9yZ2VzIFRvdGggPGcudG90aEBlLWJpei5sdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTMyOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIFVTQiBMRUQgZHJpdmVyIC0gMS4xCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRwkxCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIGdyZWdAa3JvYWguY29tIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIExFRCBEcml2ZXIiCisKKyNkZWZpbmUgVkVORE9SX0lECTB4MGZjNQorI2RlZmluZSBQUk9EVUNUX0lECTB4MTIyMworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0cnVjdCB1c2JfbGVkIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqCXVkZXY7CisJdW5zaWduZWQgY2hhcgkJYmx1ZTsKKwl1bnNpZ25lZCBjaGFyCQlyZWQ7CisJdW5zaWduZWQgY2hhcgkJZ3JlZW47Cit9OworCisjZGVmaW5lIEJMVUUJMHgwNAorI2RlZmluZSBSRUQJMHgwMgorI2RlZmluZSBHUkVFTgkweDAxCitzdGF0aWMgdm9pZCBjaGFuZ2VfY29sb3Ioc3RydWN0IHVzYl9sZWQgKmxlZCkKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgY29sb3IgPSAweDA3OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmbGVkLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChsZWQtPmJsdWUpCisJCWNvbG9yICY9IH4oQkxVRSk7CisJaWYgKGxlZC0+cmVkKQorCQljb2xvciAmPSB+KFJFRCk7CisJaWYgKGxlZC0+Z3JlZW4pCisJCWNvbG9yICY9IH4oR1JFRU4pOworCWRldl9kYmcoJmxlZC0+dWRldi0+ZGV2LAorCQkiYmx1ZSA9ICVkLCByZWQgPSAlZCwgZ3JlZW4gPSAlZCwgY29sb3IgPSAlLjJ4XG4iLAorCQlsZWQtPmJsdWUsIGxlZC0+cmVkLCBsZWQtPmdyZWVuLCBjb2xvcik7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cobGVkLT51ZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZShsZWQtPnVkZXYsIDApLAorCQkJCTB4MTIsCisJCQkJMHhjOCwKKwkJCQkoMHgwMiAqIDB4MTAwKSArIDB4MGEsCisJCQkJKDB4MDAgKiAweDEwMCkgKyBjb2xvciwKKwkJCQlidWZmZXIsCQorCQkJCTgsCisJCQkJMjAwMCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmbGVkLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKwlrZnJlZShidWZmZXIpOworfQorCisjZGVmaW5lIHNob3dfc2V0KHZhbHVlKQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2JfbGVkICpsZWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGVkLT52YWx1ZSk7CQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHVzYl9sZWQgKmxlZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAorCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAorCQkJCQkJCQkJXAorCWxlZC0+dmFsdWUgPSB0ZW1wOwkJCQkJCVwKKwljaGFuZ2VfY29sb3IobGVkKTsJCQkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7CitzaG93X3NldChibHVlKTsKK3Nob3dfc2V0KHJlZCk7CitzaG93X3NldChncmVlbik7CisKK3N0YXRpYyBpbnQgbGVkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2xlZCAqZGV2ID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbXNldCAoZGV2LCAweDAwLCBzaXplb2YgKCpkZXYpKTsKKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBkZXYpOworCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JsdWUpOworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9yZWQpOworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ncmVlbik7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTEVEIGRldmljZSBub3cgYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworCitlcnJvcjoKKwlrZnJlZShkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGxlZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9sZWQgKmRldjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ibHVlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcmVkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfZ3JlZW4pOworCisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKKworCWtmcmVlKGRldik7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTEVEIG5vdyBkaXNjb25uZWN0ZWRcbiIpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGVkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNibGVkIiwKKwkucHJvYmUgPQlsZWRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlsZWRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9sZWRfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZsZWRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9sZWRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZsZWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKHVzYl9sZWRfaW5pdCk7Cittb2R1bGVfZXhpdCAodXNiX2xlZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDRmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMCwwICsxLDIxNDAgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZiAhZGVmaW5lZCAoREVCVUcpICYmIGRlZmluZWQgKENPTkZJR19VU0JfREVCVUcpCisjICAgZGVmaW5lIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gRklYTUUgbWFrZSB0aGVzZSBwdWJsaWMgc29tZXdoZXJlOyB1c2JkZXZmcy5oPworLy8KK3N0cnVjdCB1c2J0ZXN0X3BhcmFtIHsKKwkvLyBpbnB1dHMKKwl1bnNpZ25lZAkJdGVzdF9udW07CS8qIDAuLihURVNUX0NBU0VTLTEpICovCisJdW5zaWduZWQJCWl0ZXJhdGlvbnM7CisJdW5zaWduZWQJCWxlbmd0aDsKKwl1bnNpZ25lZAkJdmFyeTsKKwl1bnNpZ25lZAkJc2dsZW47CisKKwkvLyBvdXRwdXRzCisJc3RydWN0IHRpbWV2YWwJCWR1cmF0aW9uOworfTsKKyNkZWZpbmUgVVNCVEVTVF9SRVFVRVNUCV9JT1dSKCdVJywgMTAwLCBzdHJ1Y3QgdXNidGVzdF9wYXJhbSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlHRU5FUklDCQkvKiBsZXQgcHJvYmUoKSBiaW5kIHVzaW5nIG1vZHVsZSBwYXJhbXMgKi8KKworLyogU29tZSBkZXZpY2VzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRlc3Rpbmcgd2lsbCBoYXZlICJyZWFsIiBkcml2ZXJzLgorICogRW50cmllcyBmb3IgdGhvc2UgbmVlZCB0byBiZSBlbmFibGVkIGhlcmUgYnkgaGFuZCwgYWZ0ZXIgZGlzYWJsaW5nCisgKiB0aGF0ICJyZWFsIiBkcml2ZXIuCisgKi8KKy8vI2RlZmluZQlJQk9UMgkJLyogZ3JhYiBpQk9UMiB3ZWJjYW1zICovCisvLyNkZWZpbmUJS0VZU1BBTl8xOVFpCS8qIGdyYWIgdW4tcmVudW1lcmF0ZWQgc2VyaWFsIGFkYXB0ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHVzYnRlc3RfaW5mbyB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJdTgJCQllcF9pbjsJCS8qIGJ1bGsvaW50ciBzb3VyY2UgKi8KKwl1OAkJCWVwX291dDsJCS8qIGJ1bGsvaW50ciBzaW5rICovCisJdW5zaWduZWQJCWF1dG9jb25mIDogMTsKKwl1bnNpZ25lZAkJY3RybF9vdXQgOiAxOworCXVuc2lnbmVkCQlpc28gOiAxOwkvKiB0cnkgaXNvIGluL291dCAqLworCWludAkJCWFsdDsKK307CisKKy8qIHRoaXMgaXMgYWNjZXNzZWQgb25seSB0aHJvdWdoIHVzYmZzIGlvY3RsIGNhbGxzLgorICogb25lIGlvY3RsIHRvIGlzc3VlIGEgdGVzdCAuLi4gb25lIGxvY2sgcGVyIGRldmljZS4KKyAqIHRlc3RzIGNyZWF0ZSBvdGhlciB0aHJlYWRzIGlmIHRoZXkgbmVlZCB0aGVtLgorICogdXJicyBhbmQgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LAorICogYW5kIGRhdGEgZ2VuZXJhdGVkIGRldGVybWluaXN0aWNhbGx5LgorICovCitzdHJ1Y3QgdXNidGVzdF9kZXYgeworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRmOworCXN0cnVjdCB1c2J0ZXN0X2luZm8JKmluZm87CisJaW50CQkJaW5fcGlwZTsKKwlpbnQJCQlvdXRfcGlwZTsKKwlpbnQJCQlpbl9pc29fcGlwZTsKKwlpbnQJCQlvdXRfaXNvX3BpcGU7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSppc29faW4sICppc29fb3V0OworCXN0cnVjdCBzZW1hcGhvcmUJc2VtOworCisjZGVmaW5lIFRCVUZfU0laRQkyNTYKKwl1OAkJCSpidWY7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2UgKnRlc3RkZXZfdG9fdXNiZGV2IChzdHJ1Y3QgdXNidGVzdF9kZXYgKnRlc3QpCit7CisJcmV0dXJuIGludGVyZmFjZV90b191c2JkZXYgKHRlc3QtPmludGYpOworfQorCisvKiBzZXQgdXAgYWxsIHVyYnMgc28gdGhleSBjYW4gYmUgdXNlZCB3aXRoIGVpdGhlciBidWxrIG9yIGludGVycnVwdCAqLworI2RlZmluZQlJTlRFUlJVUFRfUkFURQkJMQkvKiBtc2VjL3RyYW5zZmVyICovCisKKyNkZWZpbmUgeHByaW50ayh0ZGV2LGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICAmKHRkZXYpLT5pbnRmLT5kZXYgLCAgZm10ICwgICMjIGFyZ3MpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFZFUkJPU0UKKyNkZWZpbmUgVkRCRyBEQkcKKyNlbHNlCisjZGVmaW5lIFZEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCS8qIFZFUkJPU0UgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50CitnZXRfZW5kcG9pbnRzIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50CQkJCXRtcDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlCSphbHQ7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSppbiwgKm91dDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmlzb19pbiwgKmlzb19vdXQ7CisJc3RydWN0IHVzYl9kZXZpY2UJCSp1ZGV2OworCisJZm9yICh0bXAgPSAwOyB0bXAgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgdG1wKyspIHsKKwkJdW5zaWduZWQJZXA7CisKKwkJaW4gPSBvdXQgPSBOVUxMOworCQlpc29faW4gPSBpc29fb3V0ID0gTlVMTDsKKwkJYWx0ID0gaW50Zi0+YWx0c2V0dGluZyArIHRtcDsKKworCQkvKiB0YWtlIHRoZSBmaXJzdCBhbHRzZXR0aW5nIHdpdGggaW4tYnVsayArIG91dC1idWxrOworCQkgKiBpZ25vcmUgb3RoZXIgZW5kcG9pbnRzIGFuZCBhbHRzZXR0dGluZ3MuCisJCSAqLworCQlmb3IgKGVwID0gMDsgZXAgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsgZXArKykgeworCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplOworCisJCQllID0gYWx0LT5lbmRwb2ludCArIGVwOworCQkJc3dpdGNoIChlLT5kZXNjLmJtQXR0cmlidXRlcykgeworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQkJCWlmIChkZXYtPmluZm8tPmlzbykKKwkJCQkJZ290byB0cnlfaXNvOworCQkJCS8vIEZBTExUSFJPVUdICisJCQlkZWZhdWx0OgorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGUtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCQlpZiAoIWluKQorCQkJCQlpbiA9IGU7CisJCQl9IGVsc2UgeworCQkJCWlmICghb3V0KQorCQkJCQlvdXQgPSBlOworCQkJfQorCQkJY29udGludWU7Cit0cnlfaXNvOgorCQkJaWYgKGUtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCQlpZiAoIWlzb19pbikKKwkJCQkJaXNvX2luID0gZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFpc29fb3V0KQorCQkJCQlpc29fb3V0ID0gZTsKKwkJCX0KKwkJfQorCQlpZiAoKGluICYmIG91dCkgIHx8ICAoaXNvX2luICYmIGlzb19vdXQpKQorCQkJZ290byBmb3VuZDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CisKK2ZvdW5kOgorCXVkZXYgPSB0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KTsKKwlpZiAoYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDApIHsKKwkJdG1wID0gdXNiX3NldF9pbnRlcmZhY2UgKHVkZXYsCisJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJaWYgKHRtcCA8IDApCisJCQlyZXR1cm4gdG1wOworCX0KKworCWlmIChpbikgeworCQlkZXYtPmluX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHVkZXYsCisJCQlpbi0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJZGV2LT5vdXRfcGlwZSA9IHVzYl9zbmRidWxrcGlwZSAodWRldiwKKwkJCW91dC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwl9CisJaWYgKGlzb19pbikgeworCQlkZXYtPmlzb19pbiA9ICZpc29faW4tPmRlc2M7CisJCWRldi0+aW5faXNvX3BpcGUgPSB1c2JfcmN2aXNvY3BpcGUgKHVkZXYsCisJCQkJaXNvX2luLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MKKwkJCQkJJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQlkZXYtPmlzb19vdXQgPSAmaXNvX291dC0+ZGVzYzsKKwkJZGV2LT5vdXRfaXNvX3BpcGUgPSB1c2Jfc25kaXNvY3BpcGUgKHVkZXYsCisJCQkJaXNvX291dC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzCisJCQkJCSYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFN1cHBvcnQgZm9yIHRlc3RpbmcgYmFzaWMgbm9uLXF1ZXVlZCBJL08gc3RyZWFtcy4KKyAqCisgKiBUaGVzZSBqdXN0IHBhY2thZ2UgdXJicyBhcyByZXF1ZXN0cyB0aGF0IGNhbiBiZSBlYXNpbHkgY2FuY2VsZWQuCisgKiBFYWNoIHVyYidzIGRhdGEgYnVmZmVyIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZDsgY2FsbGVycyBjYW4gZmlsbAorICogdGhlbSB3aXRoIG5vbi16ZXJvIHRlc3QgZGF0YSAob3IgdGVzdCBmb3IgaXQpIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KKworc3RhdGljIHZvaWQgc2ltcGxlX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWNvbXBsZXRlICgoc3RydWN0IGNvbXBsZXRpb24gKikgdXJiLT5jb250ZXh0KTsKK30KKworc3RhdGljIHN0cnVjdCB1cmIgKnNpbXBsZV9hbGxvY191cmIgKAorCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2LAorCWludAkJCXBpcGUsCisJdW5zaWduZWQgbG9uZwkJYnl0ZXMKKykKK3sKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCisJaWYgKGJ5dGVzIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgU0xBQl9LRVJORUwpOworCWlmICghdXJiKQorCQlyZXR1cm4gdXJiOworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIHVkZXYsIHBpcGUsIE5VTEwsIGJ5dGVzLCBzaW1wbGVfY2FsbGJhY2ssIE5VTEwpOworCXVyYi0+aW50ZXJ2YWwgPSAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQk/IChJTlRFUlJVUFRfUkFURSA8PCAzKQorCQkJOiBJTlRFUlJVUFRfUkFURTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJaWYgKHVzYl9waXBlaW4gKHBpcGUpKQorCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9TSE9SVF9OT1RfT0s7CisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jICh1ZGV2LCBieXRlcywgU0xBQl9LRVJORUwsCisJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQl1cmIgPSBOVUxMOworCX0gZWxzZQorCQltZW1zZXQgKHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBieXRlcyk7CisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIHVuc2lnbmVkIHBhdHRlcm4gPSAwOworbW9kdWxlX3BhcmFtIChwYXR0ZXJuLCB1aW50LCBTX0lSVUdPKTsKKy8vIE1PRFVMRV9QQVJNX0RFU0MgKHBhdHRlcm4sICJpL28gcGF0dGVybiAoMCA9PSB6ZXJvZXMpIik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaW1wbGVfZmlsbF9idWYgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZAlpOworCXU4CQkqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJc3dpdGNoIChwYXR0ZXJuKSB7CisJZGVmYXVsdDoKKwkJLy8gRkFMTFRIUk9VR0gKKwljYXNlIDA6CisJCW1lbXNldCAoYnVmLCAwLCBsZW4pOworCQlicmVhazsKKwljYXNlIDE6CQkJLyogbW9kNjMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJKmJ1ZisrID0gKHU4KSAoaSAlIDYzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBzaW1wbGVfY2hlY2tfYnVmIChzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQJaTsKKwl1OAkJZXhwZWN0ZWQ7CisJdTgJCSpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZAlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIGJ1ZisrKSB7CisJCXN3aXRjaCAocGF0dGVybikgeworCQkvKiBhbGwtemVyb2VzIGhhcyBubyBzeW5jaHJvbml6YXRpb24gaXNzdWVzICovCisJCWNhc2UgMDoKKwkJCWV4cGVjdGVkID0gMDsKKwkJCWJyZWFrOworCQkvKiBtb2Q2MyBzdGF5cyBpbiBzeW5jIHdpdGggc2hvcnQtdGVybWluYXRlZCB0cmFuc2ZlcnMsCisJCSAqIG9yIG90aGVyd2lzZSB3aGVuIGhvc3QgYW5kIGdhZGdldCBhZ3JlZSBvbiBob3cgbGFyZ2UKKwkJICogZWFjaCB1c2IgdHJhbnNmZXIgcmVxdWVzdCBzaG91bGQgYmUuICByZXN5bmMgaXMgZG9uZQorCQkgKiB3aXRoIHNldF9pbnRlcmZhY2Ugb3Igc2V0X2NvbmZpZy4KKwkJICovCisJCWNhc2UgMToJCQkvKiBtb2Q2MyAqLworCQkJZXhwZWN0ZWQgPSBpICUgNjM7CisJCQlicmVhazsKKwkJLyogYWx3YXlzIGZhaWwgdW5zdXBwb3J0ZWQgcGF0dGVybnMgKi8KKwkJZGVmYXVsdDoKKwkJCWV4cGVjdGVkID0gISpidWY7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKmJ1ZiA9PSBleHBlY3RlZCkKKwkJCWNvbnRpbnVlOworCQlkYmcgKCJidWZbJWRdID0gJWQgKG5vdCAlZCkiLCBpLCAqYnVmLCBleHBlY3RlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2ltcGxlX2ZyZWVfdXJiIChzdHJ1Y3QgdXJiICp1cmIpCit7CisJdXNiX2J1ZmZlcl9mcmVlICh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwl1c2JfZnJlZV91cmIgKHVyYik7Cit9CisKK3N0YXRpYyBpbnQgc2ltcGxlX2lvICgKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCWludAkJCWl0ZXJhdGlvbnMsCisJaW50CQkJdmFyeSwKKwlpbnQJCQlleHBlY3RlZCwKKwljb25zdCBjaGFyCQkqbGFiZWwKKykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHVyYi0+ZGV2OworCWludAkJCW1heCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOworCWludAkJCXJldHZhbCA9IDA7CisKKwl1cmItPmNvbnRleHQgPSAmY29tcGxldGlvbjsKKwl3aGlsZSAocmV0dmFsID09IDAgJiYgaXRlcmF0aW9ucy0tID4gMCkgeworCQlpbml0X2NvbXBsZXRpb24gKCZjb21wbGV0aW9uKTsKKwkJaWYgKHVzYl9waXBlb3V0ICh1cmItPnBpcGUpKQorCQkJc2ltcGxlX2ZpbGxfYnVmICh1cmIpOworCQlpZiAoKHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfS0VSTkVMKSkgIT0gMCkKKwkJCWJyZWFrOworCisJCS8qIE5PVEU6ICBubyB0aW1lb3V0czsgY2FuJ3QgYmUgYnJva2VuIG91dCBvZiBieSBpbnRlcnJ1cHQgKi8KKwkJd2FpdF9mb3JfY29tcGxldGlvbiAoJmNvbXBsZXRpb24pOworCQlyZXR2YWwgPSB1cmItPnN0YXR1czsKKwkJdXJiLT5kZXYgPSB1ZGV2OworCQlpZiAocmV0dmFsID09IDAgJiYgdXNiX3BpcGVpbiAodXJiLT5waXBlKSkKKwkJCXJldHZhbCA9IHNpbXBsZV9jaGVja19idWYgKHVyYik7CisKKwkJaWYgKHZhcnkpIHsKKwkJCWludAlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisKKwkJCWxlbiArPSB2YXJ5OworCQkJbGVuICU9IG1heDsKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlsZW4gPSAodmFyeSA8IG1heCkgPyB2YXJ5IDogbWF4OworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOworCQl9CisKKwkJLyogRklYTUUgaWYgZW5kcG9pbnQgaGFsdGVkLCBjbGVhciBoYWx0IChhbmQgbG9nKSAqLworCX0KKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBtYXg7CisKKwlpZiAoZXhwZWN0ZWQgIT0gcmV0dmFsKQorCQlkZXZfZGJnICgmdWRldi0+ZGV2LAorCQkJIiVzIGZhaWxlZCwgaXRlcmF0aW9ucyBsZWZ0ICVkLCBzdGF0dXMgJWQgKG5vdCAlZClcbiIsCisJCQkJbGFiZWwsIGl0ZXJhdGlvbnMsIHJldHZhbCwgZXhwZWN0ZWQpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogV2UgdXNlIHNjYXR0ZXJsaXN0IHByaW1pdGl2ZXMgdG8gdGVzdCBxdWV1ZWQgSS9PLgorICogWWVzLCB0aGlzIGFsc28gdGVzdHMgdGhlIHNjYXR0ZXJsaXN0IHByaW1pdGl2ZXMuCisgKi8KKworc3RhdGljIHZvaWQgZnJlZV9zZ2xpc3QgKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cykKK3sKKwl1bnNpZ25lZAkJaTsKKwkKKwlpZiAoIXNnKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKKwkJaWYgKCFzZyBbaV0ucGFnZSkKKwkJCWNvbnRpbnVlOworCQlrZnJlZSAocGFnZV9hZGRyZXNzIChzZyBbaV0ucGFnZSkgKyBzZyBbaV0ub2Zmc2V0KTsKKwl9CisJa2ZyZWUgKHNnKTsKK30KKworc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqCithbGxvY19zZ2xpc3QgKGludCBuZW50cywgaW50IG1heCwgaW50IHZhcnkpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwl1bnNpZ25lZAkJaTsKKwl1bnNpZ25lZAkJc2l6ZSA9IG1heDsKKworCXNnID0ga21hbGxvYyAobmVudHMgKiBzaXplb2YgKnNnLCBTTEFCX0tFUk5FTCk7CisJaWYgKCFzZykKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0IChzZywgMCwgbmVudHMgKiBzaXplb2YgKnNnKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CisJCWNoYXIJCSpidWY7CisKKwkJYnVmID0ga21hbGxvYyAoc2l6ZSwgU0xBQl9LRVJORUwpOworCQlpZiAoIWJ1ZikgeworCQkJZnJlZV9zZ2xpc3QgKHNnLCBpKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCW1lbXNldCAoYnVmLCAwLCBzaXplKTsKKworCQkvKiBrbWFsbG9jIHBhZ2VzIGFyZSBhbHdheXMgcGh5c2ljYWxseSBjb250aWd1b3VzISAqLworCQlzZyBbaV0ucGFnZSA9IHZpcnRfdG9fcGFnZSAoYnVmKTsKKwkJc2cgW2ldLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlIChidWYpOworCQlzZyBbaV0ubGVuZ3RoID0gc2l6ZTsKKworCQlpZiAodmFyeSkgeworCQkJc2l6ZSArPSB2YXJ5OworCQkJc2l6ZSAlPSBtYXg7CisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCXNpemUgPSAodmFyeSA8IG1heCkgPyB2YXJ5IDogbWF4OworCQl9CisJfQorCisJcmV0dXJuIHNnOworfQorCitzdGF0aWMgaW50IHBlcmZvcm1fc2dsaXN0ICgKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiwKKwl1bnNpZ25lZAkJaXRlcmF0aW9ucywKKwlpbnQJCQlwaXBlLAorCXN0cnVjdCB1c2Jfc2dfcmVxdWVzdAkqcmVxLAorCXN0cnVjdCBzY2F0dGVybGlzdAkqc2csCisJaW50CQkJbmVudHMKKykKK3sKKwlpbnQJCQlyZXR2YWwgPSAwOworCisJd2hpbGUgKHJldHZhbCA9PSAwICYmIGl0ZXJhdGlvbnMtLSA+IDApIHsKKwkJcmV0dmFsID0gdXNiX3NnX2luaXQgKHJlcSwgdWRldiwgcGlwZSwKKwkJCQkodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQkJCT8gKElOVEVSUlVQVF9SQVRFIDw8IDMpCisJCQkJCTogSU5URVJSVVBUX1JBVEUsCisJCQkJc2csIG5lbnRzLCAwLCBTTEFCX0tFUk5FTCk7CisJCQorCQlpZiAocmV0dmFsKQorCQkJYnJlYWs7CisJCXVzYl9zZ193YWl0IChyZXEpOworCQlyZXR2YWwgPSByZXEtPnN0YXR1czsKKworCQkvKiBGSVhNRSBpZiBlbmRwb2ludCBoYWx0ZWQsIGNsZWFyIGhhbHQgKGFuZCBsb2cpICovCisJfQorCisJLy8gRklYTUUgZm9yIHVubGluayBvciBmYXVsdCBoYW5kbGluZyB0ZXN0cywgZG9uJ3QgcmVwb3J0CisJLy8gZmFpbHVyZSBpZiByZXR2YWwgaXMgYXMgd2UgZXhwZWN0ZWQgLi4uCisKKwlpZiAocmV0dmFsKQorCQlkYmcgKCJwZXJmb3JtX3NnbGlzdCBmYWlsZWQsIGl0ZXJhdGlvbnMgbGVmdCAlZCwgc3RhdHVzICVkIiwKKwkJCQlpdGVyYXRpb25zLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdW5xdWV1ZWQgY29udHJvbCBtZXNzYWdlIHRlc3RpbmcKKyAqCisgKiB0aGVyZSdzIGEgbmljZSBzZXQgb2YgZGV2aWNlIGZ1bmN0aW9uYWwgcmVxdWlyZW1lbnRzIGluIGNoYXB0ZXIgOSBvZiB0aGUKKyAqIHVzYiAyLjAgc3BlYywgd2hpY2ggd2UgY2FuIGFwcGx5IHRvIEFOWSBkZXZpY2UsIGV2ZW4gb25lcyB0aGF0IGRvbid0IHVzZQorICogc3BlY2lhbCB0ZXN0IGZpcm13YXJlLgorICoKKyAqIHdlIGtub3cgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIChvciBzdXNwZW5kZWQpIGJ5IHRoZSB0aW1lIGl0J3MgdmlzaWJsZQorICogdGhyb3VnaCB1c2Jmcy4gIHdlIGNhbid0IGNoYW5nZSB0aGF0LCBzbyB3ZSB3b24ndCB0ZXN0IGVudW1lcmF0aW9uICh3aGljaAorICogd29ya2VkICd3ZWxsIGVub3VnaCcgdG8gZ2V0IGhlcmUsIHRoaXMgdGltZSksIHBvd2VyIG1hbmFnZW1lbnQgKGRpdHRvKSwKKyAqIG9yIHJlbW90ZSB3YWtldXAgKHdoaWNoIG5lZWRzIGh1bWFuIGludGVyYWN0aW9uKS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgcmVhbHdvcmxkID0gMTsKK21vZHVsZV9wYXJhbSAocmVhbHdvcmxkLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHJlYWx3b3JsZCwgImNsZWFyIHRvIGRlbWFuZCBzdHJpY3RlciBjaDkgY29tcGxpYW5jZSIpOworCitzdGF0aWMgaW50IGdldF9hbHRzZXR0aW5nIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaWZhY2UgPSBkZXYtPmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpZmFjZSk7CisJaW50CQkJcmV0dmFsOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUgKHVkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfSU5URVJGQUNFLCBVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkwLCBpZmFjZS0+YWx0c2V0dGluZyBbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJZGV2LT5idWYsIDEsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlzd2l0Y2ggKHJldHZhbCkgeworCWNhc2UgMToKKwkJcmV0dXJuIGRldi0+YnVmIFswXTsKKwljYXNlIDA6CisJCXJldHZhbCA9IC1FUkFOR0U7CisJCS8vIEZBTExUSFJPVUdICisJZGVmYXVsdDoKKwkJcmV0dXJuIHJldHZhbDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0X2FsdHNldHRpbmcgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBpbnQgYWx0ZXJuYXRlKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCQkqaWZhY2UgPSBkZXYtPmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UJCSp1ZGV2OworCisJaWYgKGFsdGVybmF0ZSA8IDAgfHwgYWx0ZXJuYXRlID49IDI1NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaWZhY2UpOworCXJldHVybiB1c2Jfc2V0X2ludGVyZmFjZSAodWRldiwKKwkJCWlmYWNlLT5hbHRzZXR0aW5nIFswXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQlhbHRlcm5hdGUpOworfQorCitzdGF0aWMgaW50IGlzX2dvb2RfY29uZmlnIChjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgkqY29uZmlnOworCQorCWlmIChsZW4gPCBzaXplb2YgKmNvbmZpZykKKwkJcmV0dXJuIDA7CisJY29uZmlnID0gKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKikgYnVmOworCisJc3dpdGNoIChjb25maWctPmJEZXNjcmlwdG9yVHlwZSkgeworCWNhc2UgVVNCX0RUX0NPTkZJRzoKKwljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCWlmIChjb25maWctPmJMZW5ndGggIT0gOSkgeworCQkJZGJnICgiYm9ndXMgY29uZmlnIGRlc2NyaXB0b3IgbGVuZ3RoIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiB0aGlzIGJpdCAnbXVzdCBiZSAxJyBidXQgb2Z0ZW4gaXNuJ3QgKi8KKwkJaWYgKCFyZWFsd29ybGQgJiYgIShjb25maWctPmJtQXR0cmlidXRlcyAmIDB4ODApKSB7CisJCQlkYmcgKCJoaWdoIGJpdCBvZiBjb25maWcgYXR0cmlidXRlcyBub3Qgc2V0Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoY29uZmlnLT5ibUF0dHJpYnV0ZXMgJiAweDFmKSB7CS8qIHJlc2VydmVkID09IDAgKi8KKwkJCWRiZyAoInJlc2VydmVkIGNvbmZpZyBiaXRzIHNldCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxlMTZfdG9fY3B1KGNvbmZpZy0+d1RvdGFsTGVuZ3RoKSA9PSBsZW4pCQkvKiByZWFkIGl0IGFsbCAqLworCQlyZXR1cm4gMTsKKwlpZiAobGUxNl90b19jcHUoY29uZmlnLT53VG90YWxMZW5ndGgpID49IFRCVUZfU0laRSkJCS8qIG1heCBwYXJ0aWFsIHJlYWQgKi8KKwkJcmV0dXJuIDE7CisJZGJnICgiYm9ndXMgY29uZmlnIGRlc2NyaXB0b3IgcmVhZCBzaXplIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIHNhbml0eSB0ZXN0IGZvciBzdGFuZGFyZCByZXF1ZXN0cyB3b3JraW5nIHdpdGggdXNiX2NvbnRyb2xfbWVzZygpIGFuZCBzb21lCisgKiBvZiB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggdXNlIGl0LgorICoKKyAqIHRoaXMgZG9lc24ndCB0ZXN0IGhvdyBlbmRwb2ludCBoYWx0cyBiZWhhdmUgb3IgZGF0YSB0b2dnbGVzIGdldCBzZXQsIHNpbmNlCisgKiB3ZSB3b24ndCBkbyBJL08gdG8gYnVsay9pbnRlcnJ1cHQgZW5kcG9pbnRzIGhlcmUgKHdoaWNoIGlzIGhvdyB0byBjaGFuZ2UKKyAqIGhhbHQgb3IgdG9nZ2xlKS4gIHRvZ2dsZSB0ZXN0aW5nIGlzIGltcHJhY3RpY2FsIHdpdGhvdXQgc3VwcG9ydCBmcm9tIGhjZHMuCisgKgorICogdGhpcyBhdm9pZHMgZmFpbGluZyBkZXZpY2VzIGxpbnV4IHdvdWxkIG5vcm1hbGx5IHdvcmsgd2l0aCwgYnkgbm90IHRlc3RpbmcKKyAqIGNvbmZpZy9hbHRzZXR0aW5nIG9wZXJhdGlvbnMgZm9yIGRldmljZXMgdGhhdCBvbmx5IHN1cHBvcnQgdGhlaXIgZGVmYXVsdHMuCisgKiBzdWNoIGRldmljZXMgcmFyZWx5IHN1cHBvcnQgdGhvc2UgbmVlZGxlc3Mgb3BlcmF0aW9ucy4KKyAqCisgKiBOT1RFIHRoYXQgc2luY2UgdGhpcyBpcyBhIHNhbml0eSB0ZXN0LCBpdCdzIG5vdCBleGFtaW5pbmcgYm91bmRhcnkgY2FzZXMKKyAqIHRvIHNlZSBpZiB1c2Jjb3JlLCBoY2QsIGFuZCBkZXZpY2UgYWxsIGJlaGF2ZSByaWdodC4gIHN1Y2ggdGVzdGluZyB3b3VsZAorICogaW52b2x2ZSB2YXJpZWQgcmVhZCBzaXplcyBhbmQgb3RoZXIgb3BlcmF0aW9uIHNlcXVlbmNlcy4KKyAqLworc3RhdGljIGludCBjaDlfcG9zdGNvbmZpZyAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmlmYWNlID0gZGV2LT5pbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaWZhY2UpOworCWludAkJCWksIGFsdCwgcmV0dmFsOworCisJLyogWzkuMi4zXSBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgYWx0c2V0dGluZywgd2UgbmVlZCB0byBiZSBhYmxlIHRvCisJICogc2V0IGFuZCBnZXQgZWFjaCBvbmUuICBtb3N0bHkgdHJ1c3RzIHRoZSBkZXNjcmlwdG9ycyBmcm9tIHVzYmNvcmUuCisJICovCisJZm9yIChpID0gMDsgaSA8IGlmYWNlLT5udW1fYWx0c2V0dGluZzsgaSsrKSB7CisKKwkJLyogOS4yLjMgY29uc3RyYWlucyB0aGUgcmFuZ2UgaGVyZSAqLworCQlhbHQgPSBpZmFjZS0+YWx0c2V0dGluZyBbaV0uZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwkJaWYgKGFsdCA8IDAgfHwgYWx0ID49IGlmYWNlLT5udW1fYWx0c2V0dGluZykgeworCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsCisJCQkJCSJpbnZhbGlkIGFsdCBbJWRdLmJBbHRTZXR0aW5nID0gJWRcbiIsCisJCQkJCWksIGFsdCk7CisJCX0KKworCQkvKiBbcmVhbCB3b3JsZF0gZ2V0L3NldCB1bmltcGxlbWVudGVkIGlmIHRoZXJlJ3Mgb25seSBvbmUgKi8KKwkJaWYgKHJlYWx3b3JsZCAmJiBpZmFjZS0+bnVtX2FsdHNldHRpbmcgPT0gMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFs5LjQuMTBdIHNldF9pbnRlcmZhY2UgKi8KKwkJcmV0dmFsID0gc2V0X2FsdHNldHRpbmcgKGRldiwgYWx0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsICJjYW4ndCBzZXRfaW50ZXJmYWNlID0gJWQsICVkXG4iLAorCQkJCQlhbHQsIHJldHZhbCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisKKwkJLyogWzkuNC40XSBnZXRfaW50ZXJmYWNlIGFsd2F5cyB3b3JrcyAqLworCQlyZXR2YWwgPSBnZXRfYWx0c2V0dGluZyAoZGV2KTsKKwkJaWYgKHJldHZhbCAhPSBhbHQpIHsKKwkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LCAiZ2V0IGFsdCBzaG91bGQgYmUgJWQsIHdhcyAlZFxuIiwKKwkJCQkJYWx0LCByZXR2YWwpOworCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCQl9CisKKwl9CisKKwkvKiBbcmVhbCB3b3JsZF0gZ2V0X2NvbmZpZyB1bmltcGxlbWVudGVkIGlmIHRoZXJlJ3Mgb25seSBvbmUgKi8KKwlpZiAoIXJlYWx3b3JsZCB8fCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKSB7CisJCWludAlleHBlY3RlZCA9IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOworCisJCS8qIFs5LjQuMl0gZ2V0X2NvbmZpZ3VyYXRpb24gYWx3YXlzIHdvcmtzCisJCSAqIC4uLiBhbHRob3VnaCBzb21lIGNoZWFwIGRldmljZXMgKGxpa2Ugb25lIFRJIEh1YiBJJ3ZlIGdvdCkKKwkJICogd29uJ3QgcmV0dXJuIGNvbmZpZyBkZXNjcmlwdG9ycyBleGNlcHQgYmVmb3JlIHNldF9jb25maWcuCisJCSAqLworCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSAodWRldiwgMCksCisJCQkJVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTiwKKwkJCQlVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkwLCAwLCBkZXYtPmJ1ZiwgMSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQlpZiAocmV0dmFsICE9IDEgfHwgZGV2LT5idWYgWzBdICE9IGV4cGVjdGVkKSB7CisJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwKKwkJCQkiZ2V0IGNvbmZpZyAtLT4gJWQgKCVkKVxuIiwgcmV0dmFsLAorCQkJCWV4cGVjdGVkKTsKKwkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwkJfQorCX0KKworCS8qIHRoZXJlJ3MgYWx3YXlzIFs5LjQuM10gYSBkZXZpY2UgZGVzY3JpcHRvciBbOS42LjFdICovCisJcmV0dmFsID0gdXNiX2dldF9kZXNjcmlwdG9yICh1ZGV2LCBVU0JfRFRfREVWSUNFLCAwLAorCQkJZGV2LT5idWYsIHNpemVvZiB1ZGV2LT5kZXNjcmlwdG9yKTsKKwlpZiAocmV0dmFsICE9IHNpemVvZiB1ZGV2LT5kZXNjcmlwdG9yKSB7CisJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LCAiZGV2IGRlc2NyaXB0b3IgLS0+ICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJfQorCisJLyogdGhlcmUncyBhbHdheXMgWzkuNC4zXSBhdCBsZWFzdCBvbmUgY29uZmlnIGRlc2NyaXB0b3IgWzkuNi4zXSAqLworCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKSB7CisJCXJldHZhbCA9IHVzYl9nZXRfZGVzY3JpcHRvciAodWRldiwgVVNCX0RUX0NPTkZJRywgaSwKKwkJCQlkZXYtPmJ1ZiwgVEJVRl9TSVpFKTsKKwkJaWYgKCFpc19nb29kX2NvbmZpZyAoZGV2LT5idWYsIHJldHZhbCkpIHsKKwkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LAorCQkJCQkiY29uZmlnIFslZF0gZGVzY3JpcHRvciAtLT4gJWRcbiIsCisJCQkJCWksIHJldHZhbCk7CisJCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJCX0KKworCQkvLyBGSVhNRSBjcm9zcy1jaGVja2luZyB1ZGV2LT5jb25maWdbaV0gdG8gbWFrZSBzdXJlIHVzYmNvcmUKKwkJLy8gcGFyc2VkIGl0IHJpZ2h0IChldGMpIHdvdWxkIGJlIGdvb2QgdGVzdGluZyBwYXJhbm9pYQorCX0KKworCS8qIGFuZCBzb21ldGltZXMgWzkuMi42LjZdIHNwZWVkIGRlcGVuZGVudCBkZXNjcmlwdG9ycyAqLworCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZFVTQikgPT0gMHgwMjAwKSB7CisJCXN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IJCSpkID0gTlVMTDsKKworCQkvKiBkZXZpY2UgcXVhbGlmaWVyIFs5LjYuMl0gKi8KKwkJcmV0dmFsID0gdXNiX2dldF9kZXNjcmlwdG9yICh1ZGV2LAorCQkJCVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLCAwLCBkZXYtPmJ1ZiwKKwkJCQlzaXplb2YgKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IpKTsKKwkJaWYgKHJldHZhbCA9PSAtRVBJUEUpIHsKKwkJCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LAorCQkJCQkJImhzIGRldiBxdWFsaWZpZXIgLS0+ICVkXG4iLAorCQkJCQkJcmV0dmFsKTsKKwkJCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJCQl9CisJCQkvKiB1c2IyLjAgYnV0IG5vdCBoaWdoLXNwZWVkIGNhcGFibGU7IGZpbmUgKi8KKwkJfSBlbHNlIGlmIChyZXR2YWwgIT0gc2l6ZW9mIChzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSkgeworCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsICJkZXYgcXVhbGlmaWVyIC0tPiAlZFxuIiwgcmV0dmFsKTsKKwkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwkJfSBlbHNlCisJCQlkID0gKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgKikgZGV2LT5idWY7CisKKwkJLyogbWlnaHQgbm90IGhhdmUgWzkuNi4yXSBhbnkgb3RoZXItc3BlZWQgY29uZmlncyBbOS42LjRdICovCisJCWlmIChkKSB7CisJCQl1bnNpZ25lZCBtYXggPSBkLT5iTnVtQ29uZmlndXJhdGlvbnM7CisJCQlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKKwkJCQlyZXR2YWwgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IgKHVkZXYsCisJCQkJCVVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcsIGksCisJCQkJCWRldi0+YnVmLCBUQlVGX1NJWkUpOworCQkJCWlmICghaXNfZ29vZF9jb25maWcgKGRldi0+YnVmLCByZXR2YWwpKSB7CisJCQkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LAorCQkJCQkJIm90aGVyIHNwZWVkIGNvbmZpZyAtLT4gJWRcbiIsCisJCQkJCQlyZXR2YWwpOworCQkJCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJCQkJfQorCQkJfQorCQl9CisJfQorCS8vIEZJWE1FIGZldGNoIHN0cmluZ3MgZnJvbSBhdCBsZWFzdCB0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKworCS8qIFs5LjQuNV0gZ2V0X3N0YXR1cyBhbHdheXMgd29ya3MgKi8KKwlyZXR2YWwgPSB1c2JfZ2V0X3N0YXR1cyAodWRldiwgVVNCX1JFQ0lQX0RFVklDRSwgMCwgZGV2LT5idWYpOworCWlmIChyZXR2YWwgIT0gMikgeworCQlkZXZfZGJnICgmaWZhY2UtPmRldiwgImdldCBkZXYgc3RhdHVzIC0tPiAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCX0KKworCS8vIEZJWE1FIGNvbmZpZ3VyYXRpb24uYm1BdHRyaWJ1dGVzIHNheXMgaWYgd2UgY291bGQgdHJ5IHRvIHNldC9jbGVhcgorCS8vIHRoZSBkZXZpY2UncyByZW1vdGUgd2FrZXVwIGZlYXR1cmUgLi4uIGlmIHdlIGNhbiwgdGVzdCB0aGF0IGhlcmUKKworCXJldHZhbCA9IHVzYl9nZXRfc3RhdHVzICh1ZGV2LCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJaWZhY2UtPmFsdHNldHRpbmcgWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwgZGV2LT5idWYpOworCWlmIChyZXR2YWwgIT0gMikgeworCQlkZXZfZGJnICgmaWZhY2UtPmRldiwgImdldCBpbnRlcmZhY2Ugc3RhdHVzIC0tPiAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCX0KKwkvLyBGSVhNRSBnZXQgc3RhdHVzIGZvciBlYWNoIGVuZHBvaW50IGluIHRoZSBpbnRlcmZhY2UKKwkKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdXNlIGNoOSByZXF1ZXN0cyB0byB0ZXN0IHdoZXRoZXI6CisgKiAgIChhKSBxdWV1ZXMgd29yayBmb3IgY29udHJvbCwga2VlcGluZyBOIHN1YnRlc3RzIHF1ZXVlZCBhbmQKKyAqICAgICAgIGFjdGl2ZSAoYXV0by1yZXN1Ym1pdCkgZm9yIE0gbG9vcHMgdGhyb3VnaCB0aGUgcXVldWUuCisgKiAgIChiKSBwcm90b2NvbCBzdGFsbHMgKGNvbnRyb2wtb25seSkgd2lsbCBhdXRvcmVjb3Zlci4KKyAqICAgICAgIGl0J3Mgbm90IGxpa2UgYnVsay9pbnRyOyBubyBoYWx0IGNsZWFyaW5nLgorICogICAoYykgc2hvcnQgY29udHJvbCByZWFkcyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQuCisgKiAgIChkKSBxdWV1ZXMgYXJlIGFsd2F5cyBwcm9jZXNzZWQgaW4tb3JkZXIKKyAqLworCitzdHJ1Y3QgY3RybF9jdHggeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHVzYnRlc3RfZGV2CSpkZXY7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGU7CisJdW5zaWduZWQJCWNvdW50OworCXVuc2lnbmVkCQlwZW5kaW5nOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXJiCQkqKnVyYjsKKwlzdHJ1Y3QgdXNidGVzdF9wYXJhbQkqcGFyYW07CisJaW50CQkJbGFzdDsKK307CisKKyNkZWZpbmUgTlVNX1NVQkNBU0VTCTE1CQkvKiBob3cgbWFueSB0ZXN0IHN1YmNhc2VzIGhlcmU/ICovCisKK3N0cnVjdCBzdWJjYXNlIHsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXNldHVwOworCWludAkJCW51bWJlcjsKKwlpbnQJCQlleHBlY3RlZDsKK307CisKK3N0YXRpYyB2b2lkIGN0cmxfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGN0cmxfY3R4CQkqY3R4ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJKnJlcXA7CisJc3RydWN0IHN1YmNhc2UJCSpzdWJjYXNlOworCWludAkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJcmVxcCA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopdXJiLT5zZXR1cF9wYWNrZXQ7CisJc3ViY2FzZSA9IGNvbnRhaW5lcl9vZiAocmVxcCwgc3RydWN0IHN1YmNhc2UsIHNldHVwKTsKKworCXNwaW5fbG9jayAoJmN0eC0+bG9jayk7CisJY3R4LT5jb3VudC0tOworCWN0eC0+cGVuZGluZy0tOworCisJLyogcXVldWUgbXVzdCB0cmFuc2ZlciBhbmQgY29tcGxldGUgaW4gZmlmbyBvcmRlciwgdW5sZXNzCisJICogdXNiX3VubGlua191cmIoKSBpcyB1c2VkIHRvIHVubGluayBzb21ldGhpbmcgbm90IGF0IHRoZQorCSAqIHBoeXNpY2FsIHF1ZXVlIGhlYWQgKG5vdCB0ZXN0ZWQpLgorCSAqLworCWlmIChzdWJjYXNlLT5udW1iZXIgPiAwKSB7CisJCWlmICgoc3ViY2FzZS0+bnVtYmVyIC0gY3R4LT5sYXN0KSAhPSAxKSB7CisJCQlkYmcgKCJzdWJjYXNlICVkIGNvbXBsZXRlZCBvdXQgb2Ygb3JkZXIsIGxhc3QgJWQiLAorCQkJCQlzdWJjYXNlLT5udW1iZXIsIGN0eC0+bGFzdCk7CisJCQlzdGF0dXMgPSAtRURPTTsKKwkJCWN0eC0+bGFzdCA9IHN1YmNhc2UtPm51bWJlcjsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisJY3R4LT5sYXN0ID0gc3ViY2FzZS0+bnVtYmVyOworCisJLyogc3VjY2VlZCBvciBmYXVsdCBpbiBvbmx5IG9uZSB3YXk/ICovCisJaWYgKHN0YXR1cyA9PSBzdWJjYXNlLT5leHBlY3RlZCkKKwkJc3RhdHVzID0gMDsKKworCS8qIGFzeW5jIHVubGluayBmb3IgY2xlYW51cD8gKi8KKwllbHNlIGlmIChzdGF0dXMgIT0gLUVDT05OUkVTRVQpIHsKKworCQkvKiBzb21lIGZhdWx0cyBhcmUgYWxsb3dlZCwgbm90IHJlcXVpcmVkICovCisJCWlmIChzdWJjYXNlLT5leHBlY3RlZCA+IDAgJiYgKAorCQkJICAoKHVyYi0+c3RhdHVzID09IC1zdWJjYXNlLT5leHBlY3RlZAkvKiBoYXBwZW5lZCAqLworCQkJICAgfHwgdXJiLT5zdGF0dXMgPT0gMCkpKSkJCS8qIGRpZG4ndCAqLworCQkJc3RhdHVzID0gMDsKKwkJLyogc29tZXRpbWVzIG1vcmUgdGhhbiBvbmUgZmF1bHQgaXMgYWxsb3dlZCAqLworCQllbHNlIGlmIChzdWJjYXNlLT5udW1iZXIgPT0gMTIgJiYgc3RhdHVzID09IC1FUElQRSkKKwkJCXN0YXR1cyA9IDA7CisJCWVsc2UKKwkJCWRiZyAoInN1YnRlc3QgJWQgZXJyb3IsIHN0YXR1cyAlZCIsCisJCQkJCXN1YmNhc2UtPm51bWJlciwgc3RhdHVzKTsKKwl9CisKKwkvKiB1bmV4cGVjdGVkIHN0YXR1cyBjb2RlcyBtZWFuIGVycm9yczsgaWRlYWxseSwgaW4gaGFyZHdhcmUgKi8KKwlpZiAoc3RhdHVzKSB7CitlcnJvcjoKKwkJaWYgKGN0eC0+c3RhdHVzID09IDApIHsKKwkJCWludAkJaTsKKworCQkJY3R4LT5zdGF0dXMgPSBzdGF0dXM7CisJCQlpbmZvICgiY29udHJvbCBxdWV1ZSAlMDJ4LiUwMngsIGVyciAlZCwgJWQgbGVmdCIsCisJCQkJCXJlcXAtPmJSZXF1ZXN0VHlwZSwgcmVxcC0+YlJlcXVlc3QsCisJCQkJCXN0YXR1cywgY3R4LT5jb3VudCk7CisKKwkJCS8qIEZJWE1FIHRoaXMgInVubGluayBldmVyeXRoaW5nIiBleGl0IHJvdXRlIHNob3VsZAorCQkJICogYmUgYSBzZXBhcmF0ZSB0ZXN0IGNhc2UuCisJCQkgKi8KKworCQkJLyogdW5saW5rIHdoYXRldmVyJ3Mgc3RpbGwgcGVuZGluZyAqLworCQkJZm9yIChpID0gMTsgaSA8IGN0eC0+cGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJCQlzdHJ1Y3QgdXJiCSp1ID0gY3R4LT51cmIgWworCShpICsgc3ViY2FzZS0+bnVtYmVyKSAlIGN0eC0+cGFyYW0tPnNnbGVuXTsKKworCQkJCWlmICh1ID09IHVyYiB8fCAhdS0+ZGV2KQorCQkJCQljb250aW51ZTsKKwkJCQlzdGF0dXMgPSB1c2JfdW5saW5rX3VyYiAodSk7CisJCQkJc3dpdGNoIChzdGF0dXMpIHsKKwkJCQljYXNlIC1FSU5QUk9HUkVTUzoKKwkJCQljYXNlIC1FQlVTWToKKwkJCQljYXNlIC1FSURSTToKKwkJCQkJY29udGludWU7CisJCQkJZGVmYXVsdDoKKwkJCQkJZGJnICgidXJiIHVubGluayAtLT4gJWQiLCBzdGF0dXMpOworCQkJCX0KKwkJCX0KKwkJCXN0YXR1cyA9IGN0eC0+c3RhdHVzOworCQl9CisJfQorCisJLyogcmVzdWJtaXQgaWYgd2UgbmVlZCB0bywgZWxzZSBtYXJrIHRoaXMgYXMgZG9uZSAqLworCWlmICgoc3RhdHVzID09IDApICYmIChjdHgtPnBlbmRpbmcgPCBjdHgtPmNvdW50KSkgeworCQlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfQVRPTUlDKSkgIT0gMCkgeworCQkJZGJnICgiY2FuJ3QgcmVzdWJtaXQgY3RybCAlMDJ4LiUwMngsIGVyciAlZCIsCisJCQkJcmVxcC0+YlJlcXVlc3RUeXBlLCByZXFwLT5iUmVxdWVzdCwgc3RhdHVzKTsKKwkJCXVyYi0+ZGV2ID0gTlVMTDsKKwkJfSBlbHNlCisJCQljdHgtPnBlbmRpbmcrKzsKKwl9IGVsc2UKKwkJdXJiLT5kZXYgPSBOVUxMOworCQorCS8qIHNpZ25hbCBjb21wbGV0aW9uIHdoZW4gbm90aGluZydzIHF1ZXVlZCAqLworCWlmIChjdHgtPnBlbmRpbmcgPT0gMCkKKwkJY29tcGxldGUgKCZjdHgtPmNvbXBsZXRlKTsKKwlzcGluX3VubG9jayAoJmN0eC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfY3RybF9xdWV1ZSAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsIHN0cnVjdCB1c2J0ZXN0X3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpOworCXN0cnVjdCB1cmIJCSoqdXJiOworCXN0cnVjdCBjdHJsX2N0eAkJY29udGV4dDsKKwlpbnQJCQlpOworCisJc3Bpbl9sb2NrX2luaXQgKCZjb250ZXh0LmxvY2spOworCWNvbnRleHQuZGV2ID0gZGV2OworCWluaXRfY29tcGxldGlvbiAoJmNvbnRleHQuY29tcGxldGUpOworCWNvbnRleHQuY291bnQgPSBwYXJhbS0+c2dsZW4gKiBwYXJhbS0+aXRlcmF0aW9uczsKKwljb250ZXh0LnBlbmRpbmcgPSAwOworCWNvbnRleHQuc3RhdHVzID0gLUVOT01FTTsKKwljb250ZXh0LnBhcmFtID0gcGFyYW07CisJY29udGV4dC5sYXN0ID0gLTE7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdCB0aGUgdXJicyB3ZSdsbCBxdWV1ZS4KKwkgKiBhcyB3aXRoIGJ1bGsvaW50ciBzZ2xpc3RzLCBzZ2xlbiBpcyB0aGUgcXVldWUgZGVwdGg7IGl0IGFsc28KKwkgKiBjb250cm9scyB3aGljaCBzdWJ0ZXN0cyBydW4gKG1vcmUgdGVzdHMgdGhhbiBzZ2xlbikgb3IgcmVydW4uCisJICovCisJdXJiID0ga21hbGxvYyAocGFyYW0tPnNnbGVuICogc2l6ZW9mIChzdHJ1Y3QgdXJiICopLCBTTEFCX0tFUk5FTCk7CisJaWYgKCF1cmIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCAodXJiLCAwLCBwYXJhbS0+c2dsZW4gKiBzaXplb2YgKHN0cnVjdCB1cmIgKikpOworCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+c2dsZW47IGkrKykgeworCQlpbnQJCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlICh1ZGV2LCAwKTsKKwkJdW5zaWduZWQJCWxlbjsKKwkJc3RydWN0IHVyYgkJKnU7CisJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJcmVxOworCQlzdHJ1Y3Qgc3ViY2FzZQkJKnJlcXA7CisJCWludAkJCWV4cGVjdGVkID0gMDsKKworCQkvKiByZXF1ZXN0cyBoZXJlIGFyZSBtb3N0bHkgZXhwZWN0ZWQgdG8gc3VjY2VlZCBvbiBhbnkKKwkJICogZGV2aWNlLCBidXQgc29tZSBhcmUgY2hvc2VuIHRvIHRyaWdnZXIgcHJvdG9jb2wgc3RhbGxzCisJCSAqIG9yIHNob3J0IHJlYWRzLgorCQkgKi8KKwkJbWVtc2V0ICgmcmVxLCAwLCBzaXplb2YgcmVxKTsKKwkJcmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjsKKwkJcmVxLmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfSU58VVNCX1JFQ0lQX0RFVklDRTsKKworCQlzd2l0Y2ggKGkgJSBOVU1fU1VCQ0FTRVMpIHsKKwkJY2FzZSAwOgkJLy8gZ2V0IGRldmljZSBkZXNjcmlwdG9yCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKFVTQl9EVF9ERVZJQ0UgPDwgOCk7CisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpOworCQkJYnJlYWs7CisJCWNhc2UgMToJCS8vIGdldCBmaXJzdCBjb25maWcgZGVzY3JpcHRvciAob25seSkKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoKFVTQl9EVF9DT05GSUcgPDwgOCkgfCAwKTsKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcik7CisJCQlicmVhazsKKwkJY2FzZSAyOgkJLy8gZ2V0IGFsdHNldHRpbmcgKE9GVEVOIFNUQUxMUykKKwkJCXJlcS5iUmVxdWVzdCA9IFVTQl9SRVFfR0VUX0lOVEVSRkFDRTsKKwkJCXJlcS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCQkvLyBpbmRleCA9IDAgbWVhbnMgZmlyc3QgaW50ZXJmYWNlCisJCQlsZW4gPSAxOworCQkJZXhwZWN0ZWQgPSBFUElQRTsKKwkJCWJyZWFrOworCQljYXNlIDM6CQkvLyBnZXQgaW50ZXJmYWNlIHN0YXR1cworCQkJcmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfU1RBVFVTOworCQkJcmVxLmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfSU58VVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJCS8vIGludGVyZmFjZSAwCisJCQlsZW4gPSAyOworCQkJYnJlYWs7CisJCWNhc2UgNDoJCS8vIGdldCBkZXZpY2Ugc3RhdHVzCisJCQlyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJCQlyZXEuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9JTnxVU0JfUkVDSVBfREVWSUNFOworCQkJbGVuID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDU6CQkvLyBnZXQgZGV2aWNlIHF1YWxpZmllciAoTUFZIFNUQUxMKQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2IChVU0JfRFRfREVWSUNFX1FVQUxJRklFUiA8PCA4KTsKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcik7CisJCQlpZiAodWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCisJCQkJZXhwZWN0ZWQgPSBFUElQRTsKKwkJCWJyZWFrOworCQljYXNlIDY6CQkvLyBnZXQgZmlyc3QgY29uZmlnIGRlc2NyaXB0b3IsIHBsdXMgaW50ZXJmYWNlCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKChVU0JfRFRfQ09ORklHIDw8IDgpIHwgMCk7CisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IpOworCQkJbGVuICs9IHNpemVvZiAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcik7CisJCQlicmVhazsKKwkJY2FzZSA3OgkJLy8gZ2V0IGludGVyZmFjZSBkZXNjcmlwdG9yIChBTFdBWVMgU1RBTExTKQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2IChVU0JfRFRfSU5URVJGQUNFIDw8IDgpOworCQkJLy8gaW50ZXJmYWNlID09IDAKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcik7CisJCQlleHBlY3RlZCA9IEVQSVBFOworCQkJYnJlYWs7CisJCS8vIE5PVEU6IHR3byBjb25zZWN1dGl2ZSBzdGFsbHMgaW4gdGhlIHF1ZXVlIGhlcmUuCisJCS8vIHRoYXQgdGVzdHMgZmF1bHQgcmVjb3ZlcnkgYSBiaXQgbW9yZSBhZ2dyZXNzaXZlbHkuCisJCWNhc2UgODoJCS8vIGNsZWFyIGVuZHBvaW50IGhhbHQgKFVTVUFMTFkgU1RBTExTKQorCQkJcmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9DTEVBUl9GRUFUVVJFOworCQkJcmVxLmJSZXF1ZXN0VHlwZSA9IFVTQl9SRUNJUF9FTkRQT0lOVDsKKwkJCS8vIHdWYWx1ZSAwID09IGVwIGhhbHQKKwkJCS8vIHdJbmRleCAwID09IGVwMCAoc2hvdWxkbid0IGhhbHQhKQorCQkJbGVuID0gMDsKKwkJCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUgKHVkZXYsIDApOworCQkJZXhwZWN0ZWQgPSBFUElQRTsKKwkJCWJyZWFrOworCQljYXNlIDk6CQkvLyBnZXQgZW5kcG9pbnQgc3RhdHVzCisJCQlyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJCQlyZXEuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9JTnxVU0JfUkVDSVBfRU5EUE9JTlQ7CisJCQkvLyBlbmRwb2ludCAwCisJCQlsZW4gPSAyOworCQkJYnJlYWs7CisJCWNhc2UgMTA6CS8vIHRyaWdnZXIgc2hvcnQgcmVhZCAoRVJFTU9URUlPKQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2ICgoVVNCX0RUX0NPTkZJRyA8PCA4KSB8IDApOworCQkJbGVuID0gMTAyNDsKKwkJCWV4cGVjdGVkID0gLUVSRU1PVEVJTzsKKwkJCWJyZWFrOworCQkvLyBOT1RFOiB0d28gY29uc2VjdXRpdmUgX2RpZmZlcmVudF8gZmF1bHRzIGluIHRoZSBxdWV1ZS4KKwkJY2FzZSAxMToJLy8gZ2V0IGVuZHBvaW50IGRlc2NyaXB0b3IgKEFMV0FZUyBTVEFMTFMpCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKFVTQl9EVF9FTkRQT0lOVCA8PCA4KTsKKwkJCS8vIGVuZHBvaW50ID09IDAKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcik7CisJCQlleHBlY3RlZCA9IEVQSVBFOworCQkJYnJlYWs7CisJCS8vIE5PVEU6IHNvbWV0aW1lcyBldmVuIGEgdGhpcmQgZmF1bHQgaW4gdGhlIHF1ZXVlIQorCQljYXNlIDEyOgkvLyBnZXQgc3RyaW5nIDAgZGVzY3JpcHRvciAoTUFZIFNUQUxMKQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2IChVU0JfRFRfU1RSSU5HIDw8IDgpOworCQkJLy8gc3RyaW5nID09IDAsIGZvciBsYW5ndWFnZSBJRHMKKwkJCWxlbiA9IHNpemVvZiAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcik7CisJCQkvLyBtYXkgc3VjY2VlZCB3aGVuID4gNCBsYW5ndWFnZXMKKwkJCWV4cGVjdGVkID0gRVJFTU9URUlPOwkvLyBvciBFUElQRSwgaWYgbm8gc3RyaW5ncworCQkJYnJlYWs7CisJCWNhc2UgMTM6CS8vIHNob3J0IHJlYWQsIHJlc2VtYmxpbmcgY2FzZSAxMAorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2ICgoVVNCX0RUX0NPTkZJRyA8PCA4KSB8IDApOworCQkJLy8gbGFzdCBkYXRhIHBhY2tldCAic2hvdWxkIiBiZSBEQVRBMSwgbm90IERBVEEwCisJCQlsZW4gPSAxMDI0IC0gdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJCQlleHBlY3RlZCA9IC1FUkVNT1RFSU87CisJCQlicmVhazsKKwkJY2FzZSAxNDoJLy8gc2hvcnQgcmVhZDsgdHJ5IHRvIGZpbGwgdGhlIGxhc3QgcGFja2V0CisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKChVU0JfRFRfREVWSUNFIDw8IDgpIHwgMCk7CisJCQkvLyBkZXZpY2UgZGVzY3JpcHRvciBzaXplID09IDE4IGJ5dGVzIAorCQkJbGVuID0gdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJCQlzd2l0Y2ggKGxlbikgeworCQkJY2FzZSA4OgkJbGVuID0gMjQ7IGJyZWFrOworCQkJY2FzZSAxNjoJbGVuID0gMzI7IGJyZWFrOworCQkJfQorCQkJZXhwZWN0ZWQgPSAtRVJFTU9URUlPOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgKCJib2d1cyBudW1iZXIgb2YgY3RybCBxdWV1ZSB0ZXN0Y2FzZXMhIik7CisJCQljb250ZXh0LnN0YXR1cyA9IC1FSU5WQUw7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNiAobGVuKTsKKwkJdXJiIFtpXSA9IHUgPSBzaW1wbGVfYWxsb2NfdXJiICh1ZGV2LCBwaXBlLCBsZW4pOworCQlpZiAoIXUpCisJCQlnb3RvIGNsZWFudXA7CisKKwkJcmVxcCA9IHVzYl9idWZmZXJfYWxsb2MgKHVkZXYsIHNpemVvZiAqcmVxcCwgU0xBQl9LRVJORUwsCisJCQkJJnUtPnNldHVwX2RtYSk7CisJCWlmICghcmVxcCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcmVxcC0+c2V0dXAgPSByZXE7CisJCXJlcXAtPm51bWJlciA9IGkgJSBOVU1fU1VCQ0FTRVM7CisJCXJlcXAtPmV4cGVjdGVkID0gZXhwZWN0ZWQ7CisJCXUtPnNldHVwX3BhY2tldCA9IChjaGFyICopICZyZXFwLT5zZXR1cDsKKworCQl1LT5jb250ZXh0ID0gJmNvbnRleHQ7CisJCXUtPmNvbXBsZXRlID0gY3RybF9jb21wbGV0ZTsKKwkJdS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl9CisKKwkvKiBxdWV1ZSB0aGUgdXJicyAqLworCWNvbnRleHQudXJiID0gdXJiOworCXNwaW5fbG9ja19pcnEgKCZjb250ZXh0LmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+c2dsZW47IGkrKykgeworCQljb250ZXh0LnN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIgW2ldLCBTTEFCX0FUT01JQyk7CisJCWlmIChjb250ZXh0LnN0YXR1cyAhPSAwKSB7CisJCQlkYmcgKCJjYW4ndCBzdWJtaXQgdXJiWyVkXSwgc3RhdHVzICVkIiwKKwkJCQkJaSwgY29udGV4dC5zdGF0dXMpOworCQkJY29udGV4dC5jb3VudCA9IGNvbnRleHQucGVuZGluZzsKKwkJCWJyZWFrOworCQl9CisJCWNvbnRleHQucGVuZGluZysrOworCX0KKwlzcGluX3VubG9ja19pcnEgKCZjb250ZXh0LmxvY2spOworCisJLyogRklYTUUgIHNldCB0aW1lciBhbmQgdGltZSBvdXQ7IHByb3ZpZGUgYSBkaXNjb25uZWN0IGhvb2sgKi8KKworCS8qIHdhaXQgZm9yIHRoZSBsYXN0IG9uZSB0byBjb21wbGV0ZSAqLworCWlmIChjb250ZXh0LnBlbmRpbmcgPiAwKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmY29udGV4dC5jb21wbGV0ZSk7CisKK2NsZWFudXA6CisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCWlmICghdXJiIFtpXSkKKwkJCWNvbnRpbnVlOworCQl1cmIgW2ldLT5kZXYgPSB1ZGV2OworCQlpZiAodXJiIFtpXS0+c2V0dXBfcGFja2V0KQorCQkJdXNiX2J1ZmZlcl9mcmVlICh1ZGV2LCBzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJCQl1cmIgW2ldLT5zZXR1cF9wYWNrZXQsCisJCQkJCXVyYiBbaV0tPnNldHVwX2RtYSk7CisJCXNpbXBsZV9mcmVlX3VyYiAodXJiIFtpXSk7CisJfQorCWtmcmVlICh1cmIpOworCXJldHVybiBjb250ZXh0LnN0YXR1czsKK30KKyN1bmRlZiBOVU1fU1VCQ0FTRVMKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1bmxpbmsxX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludAlzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCS8vIHdlICJrbm93IiAtRVBJUEUgKHN0YWxsKSBuZXZlciBoYXBwZW5zCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCQljb21wbGV0ZSAoKHN0cnVjdCBjb21wbGV0aW9uICopIHVyYi0+Y29udGV4dCk7CisJfQorfQorCitzdGF0aWMgaW50IHVubGluazEgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBpbnQgcGlwZSwgaW50IHNpemUsIGludCBhc3luYykKK3sKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJaW50CQkJcmV0dmFsID0gMDsKKworCWluaXRfY29tcGxldGlvbiAoJmNvbXBsZXRpb24pOworCXVyYiA9IHNpbXBsZV9hbGxvY191cmIgKHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpLCBwaXBlLCBzaXplKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXVyYi0+Y29udGV4dCA9ICZjb21wbGV0aW9uOworCXVyYi0+Y29tcGxldGUgPSB1bmxpbmsxX2NhbGxiYWNrOworCisJLyoga2VlcCB0aGUgZW5kcG9pbnQgYnVzeS4gIHRoZXJlIGFyZSBsb3RzIG9mIGhjL2hjZC1pbnRlcm5hbAorCSAqIHN0YXRlcywgYW5kIHRlc3Rpbmcgc2hvdWxkIGdldCB0byBhbGwgb2YgdGhlbSBvdmVyIHRpbWUuCisJICoKKwkgKiBGSVhNRSB3YW50IGFkZGl0aW9uYWwgdGVzdHMgZm9yIHdoZW4gZW5kcG9pbnQgaXMgU1RBTExpbmcKKwkgKiBkdWUgdG8gZXJyb3JzLCBvciBpcyBqdXN0IE5BS2luZyByZXF1ZXN0cy4KKwkgKi8KKwlpZiAoKHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfS0VSTkVMKSkgIT0gMCkgeworCQlkZXZfZGJnICgmZGV2LT5pbnRmLT5kZXYsICJzdWJtaXQgZmFpbCAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiB1bmxpbmtpbmcgdGhhdCBzaG91bGQgYWx3YXlzIHdvcmsuICB2YXJpYWJsZSBkZWxheSB0ZXN0cyBtb3JlCisJICogaGNkIHN0YXRlcyBhbmQgY29kZSBwYXRocywgZXZlbiB3aXRoIGxpdHRsZSBvdGhlciBzeXN0ZW0gbG9hZC4KKwkgKi8KKwltc2xlZXAgKGppZmZpZXMgJSAoMiAqIElOVEVSUlVQVF9SQVRFKSk7CisJaWYgKGFzeW5jKSB7CityZXRyeToKKwkJcmV0dmFsID0gdXNiX3VubGlua191cmIgKHVyYik7CisJCWlmIChyZXR2YWwgPT0gLUVCVVNZIHx8IHJldHZhbCA9PSAtRUlEUk0pIHsKKwkJCS8qIHdlIGNhbid0IHVubGluayB1cmJzIHdoaWxlIHRoZXkncmUgY29tcGxldGluZy4KKwkJCSAqIG9yIGlmIHRoZXkndmUgY29tcGxldGVkLCBhbmQgd2UgaGF2ZW4ndCByZXN1Ym1pdHRlZC4KKwkJCSAqICJub3JtYWwiIGRyaXZlcnMgd291bGQgcHJldmVudCByZXN1Ym1pc3Npb24sIGJ1dAorCQkJICogc2luY2Ugd2UncmUgdGVzdGluZyB1bmxpbmsgcGF0aHMsIHdlIGNhbid0LgorCQkJICovCisJCQlkZXZfZGJnICgmZGV2LT5pbnRmLT5kZXYsICJ1bmxpbmsgcmV0cnlcbiIpOworCQkJZ290byByZXRyeTsKKwkJfQorCX0gZWxzZQorCQl1c2Jfa2lsbF91cmIgKHVyYik7CisJaWYgKCEocmV0dmFsID09IDAgfHwgcmV0dmFsID09IC1FSU5QUk9HUkVTUykpIHsKKwkJZGV2X2RiZyAoJmRldi0+aW50Zi0+ZGV2LCAidW5saW5rIGZhaWwgJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJd2FpdF9mb3JfY29tcGxldGlvbiAoJmNvbXBsZXRpb24pOworCXJldHZhbCA9IHVyYi0+c3RhdHVzOworCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKworCWlmIChhc3luYykKKwkJcmV0dXJuIChyZXR2YWwgPT0gLUVDT05OUkVTRVQpID8gMCA6IHJldHZhbCAtIDEwMDA7CisJZWxzZQorCQlyZXR1cm4gKHJldHZhbCA9PSAtRU5PRU5UIHx8IHJldHZhbCA9PSAtRVBFUk0pID8KKwkJCQkwIDogcmV0dmFsIC0gMjAwMDsKK30KKworc3RhdGljIGludCB1bmxpbmtfc2ltcGxlIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwgaW50IHBpcGUsIGludCBsZW4pCit7CisJaW50CQkJcmV0dmFsID0gMDsKKworCS8qIHRlc3Qgc3luYyBhbmQgYXN5bmMgcGF0aHMgKi8KKwlyZXR2YWwgPSB1bmxpbmsxIChkZXYsIHBpcGUsIGxlbiwgMSk7CisJaWYgKCFyZXR2YWwpCisJCXJldHZhbCA9IHVubGluazEgKGRldiwgcGlwZSwgbGVuLCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHZlcmlmeV9ub3RfaGFsdGVkIChpbnQgZXAsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQJcmV0dmFsOworCXUxNglzdGF0dXM7CisKKwkvKiBzaG91bGRuJ3QgbG9vayBvciBhY3QgaGFsdGVkICovCisJcmV0dmFsID0gdXNiX2dldF9zdGF0dXMgKHVyYi0+ZGV2LCBVU0JfUkVDSVBfRU5EUE9JTlQsIGVwLCAmc3RhdHVzKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkYmcgKCJlcCAlMDJ4IGNvdWxkbid0IGdldCBuby1oYWx0IHN0YXR1cywgJWQiLCBlcCwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRiZyAoImVwICUwMnggYm9ndXMgc3RhdHVzOiAlMDR4ICE9IDAiLCBlcCwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCAxLCAwLCAwLCBfX0ZVTkNUSU9OX18pOworCWlmIChyZXR2YWwgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2hhbHRlZCAoaW50IGVwLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50CXJldHZhbDsKKwl1MTYJc3RhdHVzOworCisJLyogc2hvdWxkIGxvb2sgYW5kIGFjdCBoYWx0ZWQgKi8KKwlyZXR2YWwgPSB1c2JfZ2V0X3N0YXR1cyAodXJiLT5kZXYsIFVTQl9SRUNJUF9FTkRQT0lOVCwgZXAsICZzdGF0dXMpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRiZyAoImVwICUwMnggY291bGRuJ3QgZ2V0IGhhbHQgc3RhdHVzLCAlZCIsIGVwLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoc3RhdHVzICE9IDEpIHsKKwkJZGJnICgiZXAgJTAyeCBib2d1cyBzdGF0dXM6ICUwNHggIT0gMSIsIGVwLCBzdGF0dXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIDEsIDAsIC1FUElQRSwgX19GVU5DVElPTl9fKTsKKwlpZiAocmV0dmFsICE9IC1FUElQRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIDEsIDAsIC1FUElQRSwgInZlcmlmeV9zdGlsbF9oYWx0ZWQiKTsKKwlpZiAocmV0dmFsICE9IC1FUElQRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9oYWx0IChpbnQgZXAsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQJcmV0dmFsOworCisJLyogc2hvdWxkbid0IGxvb2sgb3IgYWN0IGhhbHRlZCBub3cgKi8KKwlyZXR2YWwgPSB2ZXJpZnlfbm90X2hhbHRlZCAoZXAsIHVyYik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBzZXQgaGFsdCAocHJvdG9jb2wgdGVzdCBvbmx5KSwgdmVyaWZ5IGl0IHdvcmtlZCAqLworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAodXJiLT5kZXYsIHVzYl9zbmRjdHJscGlwZSAodXJiLT5kZXYsIDApLAorCQkJVVNCX1JFUV9TRVRfRkVBVFVSRSwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJVVNCX0VORFBPSU5UX0hBTFQsIGVwLAorCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRiZyAoImVwICUwMnggY291bGRuJ3Qgc2V0IGhhbHQsICVkIiwgZXAsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IHZlcmlmeV9oYWx0ZWQgKGVwLCB1cmIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogY2xlYXIgaGFsdCAodGVzdHMgQVBJICsgcHJvdG9jb2wpLCB2ZXJpZnkgaXQgd29ya2VkICovCisJcmV0dmFsID0gdXNiX2NsZWFyX2hhbHQgKHVyYi0+ZGV2LCB1cmItPnBpcGUpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRiZyAoImVwICUwMnggY291bGRuJ3QgY2xlYXIgaGFsdCwgJWQiLCBlcCwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dmFsID0gdmVyaWZ5X25vdF9oYWx0ZWQgKGVwLCB1cmIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogTk9URTogIGNvdWxkIGFsc28gdmVyaWZ5IFNFVF9JTlRFUkZBQ0UgY2xlYXIgaGFsdHMgLi4uICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYWx0X3NpbXBsZSAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYpCit7CisJaW50CQllcDsKKwlpbnQJCXJldHZhbCA9IDA7CisJc3RydWN0IHVyYgkqdXJiOworCisJdXJiID0gc2ltcGxlX2FsbG9jX3VyYiAodGVzdGRldl90b191c2JkZXYgKGRldiksIDAsIDUxMik7CisJaWYgKHVyYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChkZXYtPmluX3BpcGUpIHsKKwkJZXAgPSB1c2JfcGlwZWVuZHBvaW50IChkZXYtPmluX3BpcGUpIHwgVVNCX0RJUl9JTjsKKwkJdXJiLT5waXBlID0gZGV2LT5pbl9waXBlOworCQlyZXR2YWwgPSB0ZXN0X2hhbHQgKGVwLCB1cmIpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZGV2LT5vdXRfcGlwZSkgeworCQllcCA9IHVzYl9waXBlZW5kcG9pbnQgKGRldi0+b3V0X3BpcGUpOworCQl1cmItPnBpcGUgPSBkZXYtPm91dF9waXBlOworCQlyZXR2YWwgPSB0ZXN0X2hhbHQgKGVwLCB1cmIpOworCX0KK2RvbmU6CisJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENvbnRyb2wgT1VUIHRlc3RzIHVzZSB0aGUgdmVuZG9yIGNvbnRyb2wgcmVxdWVzdHMgZnJvbSBJbnRlbCdzCisgKiBVU0IgMi4wIGNvbXBsaWFuY2UgdGVzdCBkZXZpY2U6ICB3cml0ZSBhIGJ1ZmZlciwgcmVhZCBpdCBiYWNrLgorICoKKyAqIEludGVsJ3Mgc3BlYyBvbmx5IF9yZXF1aXJlc18gdGhhdCBpdCB3b3JrIGZvciBvbmUgcGFja2V0LCB3aGljaAorICogaXMgcHJldHR5IHdlYWsuICAgU29tZSBIQ0RzIHBsYWNlIGxpbWl0cyBoZXJlOyBtb3N0IGRldmljZXMgd2lsbAorICogbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBtb3JlIHRoYW4gb25lIE9VVCBkYXRhIHBhY2tldC4gIFdlJ2xsCisgKiB0cnkgd2hhdGV2ZXIgd2UncmUgdG9sZCB0byB0cnkuCisgKi8KK3N0YXRpYyBpbnQgY3RybF9vdXQgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LAorCQl1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2YXJ5KQoreworCXVuc2lnbmVkCQlpLCBqLCBsZW4sIHJldHZhbDsKKwl1OAkJCSpidWY7CisJY2hhcgkJCSp3aGF0ID0gIj8iOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCQorCWlmIChsZW5ndGggPiAweGZmZmYgfHwgdmFyeSA+PSBsZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmID0ga21hbGxvYyhsZW5ndGgsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1ZGV2ID0gdGVzdGRldl90b191c2JkZXYgKGRldik7CisJbGVuID0gbGVuZ3RoOworCXJldHZhbCA9IDA7CisKKwkvKiBOT1RFOiAgaGFyZHdhcmUgbWlnaHQgd2VsbCBhY3QgZGlmZmVyZW50bHkgaWYgd2UgcHVzaGVkIGl0CisJICogd2l0aCBsb3RzIGJhY2stdG8tYmFjayBxdWV1ZWQgcmVxdWVzdHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJLyogd3JpdGUgcGF0dGVybmVkIGRhdGEgKi8KKwkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJYnVmIFtqXSA9IGkgKyBqOworCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsIHVzYl9zbmRjdHJscGlwZSAodWRldiwwKSwKKwkJCQkweDViLCBVU0JfRElSX09VVHxVU0JfVFlQRV9WRU5ET1IsCisJCQkJMCwgMCwgYnVmLCBsZW4sIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJaWYgKHJldHZhbCAhPSBsZW4pIHsKKwkJCXdoYXQgPSAid3JpdGUiOworCQkJYnJlYWs7CisJCX0KKworCQkvKiByZWFkIGl0IGJhY2sgLS0gYXNzdW1pbmcgbm90aGluZyBpbnRlcnZlbmVkISEgICovCisJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAodWRldiwgdXNiX3JjdmN0cmxwaXBlICh1ZGV2LDApLAorCQkJCTB4NWMsIFVTQl9ESVJfSU58VVNCX1RZUEVfVkVORE9SLAorCQkJCTAsIDAsIGJ1ZiwgbGVuLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCWlmIChyZXR2YWwgIT0gbGVuKSB7CisJCQl3aGF0ID0gInJlYWQiOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBmYWlsIGlmIHdlIGNhbid0IHZlcmlmeSAqLworCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKKwkJCWlmIChidWYgW2pdICE9ICh1OCkgKGkgKyBqKSkgeworCQkJCUlORk8gKGRldiwgImN0cmxfb3V0LCBieXRlICVkIGlzICVkIG5vdCAlZFxuIiwKKwkJCQkJaiwgYnVmIFtqXSwgKHU4KSBpICsgaik7CisJCQkJcmV0dmFsID0gLUVCQURNU0c7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCXdoYXQgPSAidmVyaWZ5IjsKKwkJCWJyZWFrOworCQl9CisKKwkJbGVuICs9IHZhcnk7CisJCWlmIChsZW4gPiBsZW5ndGgpCisJCQlsZW4gPSAwOworCX0KKworCWlmIChyZXR2YWwgPCAwKQorCQlJTkZPIChkZXYsICJjdHJsX291dCAlcyBmYWlsZWQsIGNvZGUgJWQsIGNvdW50ICVkXG4iLAorCQkJd2hhdCwgcmV0dmFsLCBpKTsKKworCWtmcmVlIChidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIElTTyB0ZXN0cyAuLi4gbWltaWNzIGNvbW1vbiB1c2FnZQorICogIC0gYnVmZmVyIGxlbmd0aCBpcyBzcGxpdCBpbnRvIE4gcGFja2V0cyAobW9zdGx5IG1heHBhY2tldCBzaXplZCkKKyAqICAtIG11bHRpLWJ1ZmZlcnMgYWNjb3JkaW5nIHRvIHNnbGVuCisgKi8KKworc3RydWN0IGlzb19jb250ZXh0IHsKKwl1bnNpZ25lZAkJY291bnQ7CisJdW5zaWduZWQJCXBlbmRpbmc7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbglkb25lOworCXVuc2lnbmVkIGxvbmcJCWVycm9yczsKKwlzdHJ1Y3QgdXNidGVzdF9kZXYJKmRldjsKK307CisKK3N0YXRpYyB2b2lkIGlzb19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaXNvX2NvbnRleHQJKmN0eCA9IHVyYi0+Y29udGV4dDsKKworCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKwljdHgtPmNvdW50LS07CisKKwlpZiAodXJiLT5lcnJvcl9jb3VudCA+IDApCisJCWN0eC0+ZXJyb3JzICs9IHVyYi0+ZXJyb3JfY291bnQ7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gMCAmJiBjdHgtPmNvdW50ID4gKGN0eC0+cGVuZGluZyAtIDEpKSB7CisJCWludCBzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSAwOgorCQkJZ290byBkb25lOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZyAoJmN0eC0+ZGV2LT5pbnRmLT5kZXYsCisJCQkJCSJpc28gcmVzdWJtaXQgZXJyICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAtRU5PREVWOgkJCS8qIGRpc2Nvbm5lY3RlZCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCisJY3R4LT5wZW5kaW5nLS07CisJaWYgKGN0eC0+cGVuZGluZyA9PSAwKSB7CisJCWlmIChjdHgtPmVycm9ycykKKwkJCWRldl9kYmcgKCZjdHgtPmRldi0+aW50Zi0+ZGV2LAorCQkJCSJpc28gdGVzdCwgJWx1IGVycm9yc1xuIiwKKwkJCQljdHgtPmVycm9ycyk7CisJCWNvbXBsZXRlICgmY3R4LT5kb25lKTsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IHVyYiAqaXNvX2FsbG9jX3VyYiAoCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYsCisJaW50CQkJcGlwZSwKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2MsCisJbG9uZwkJCWJ5dGVzCispCit7CisJc3RydWN0IHVyYgkJKnVyYjsKKwl1bnNpZ25lZAkJaSwgbWF4cCwgcGFja2V0czsKKworCWlmIChieXRlcyA8IDAgfHwgIWRlc2MpCisJCXJldHVybiBOVUxMOworCW1heHAgPSAweDdmZiAmIGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwltYXhwICo9IDEgKyAoMHgzICYgKGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSA+PiAxMSkpOworCXBhY2tldHMgPSAoYnl0ZXMgKyBtYXhwIC0gMSkgLyBtYXhwOworCisJdXJiID0gdXNiX2FsbG9jX3VyYiAocGFja2V0cywgU0xBQl9LRVJORUwpOworCWlmICghdXJiKQorCQlyZXR1cm4gdXJiOworCXVyYi0+ZGV2ID0gdWRldjsKKwl1cmItPnBpcGUgPSBwaXBlOworCisJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHBhY2tldHM7CisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnl0ZXM7CisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jICh1ZGV2LCBieXRlcywgU0xBQl9LRVJORUwsCisJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgMCwgYnl0ZXMpOworCWZvciAoaSA9IDA7IGkgPCBwYWNrZXRzOyBpKyspIHsKKwkJLyogaGVyZSwgb25seSB0aGUgbGFzdCBwYWNrZXQgd2lsbCBiZSBzaG9ydCAqLworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IG1pbiAoKHVuc2lnbmVkKSBieXRlcywgbWF4cCk7CisJCWJ5dGVzIC09IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworCisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gbWF4cCAqIGk7CisJfQorCisJdXJiLT5jb21wbGV0ZSA9IGlzb19jYWxsYmFjazsKKwkvLyB1cmItPmNvbnRleHQgPSBTRVQgQlkgQ0FMTEVSCisJdXJiLT5pbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlyZXR1cm4gdXJiOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2lzb19xdWV1ZSAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsIHN0cnVjdCB1c2J0ZXN0X3BhcmFtICpwYXJhbSwKKwkJaW50IHBpcGUsIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgaXNvX2NvbnRleHQJY29udGV4dDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwl1bnNpZ25lZAkJaTsKKwl1bnNpZ25lZCBsb25nCQlwYWNrZXRzID0gMDsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVyYgkJKnVyYnNbMTBdOwkvKiBGSVhNRSBubyBsaW1pdCAqLworCisJaWYgKHBhcmFtLT5zZ2xlbiA+IDEwKQorCQlyZXR1cm4gLUVET007CisKKwljb250ZXh0LmNvdW50ID0gcGFyYW0tPml0ZXJhdGlvbnMgKiBwYXJhbS0+c2dsZW47CisJY29udGV4dC5wZW5kaW5nID0gcGFyYW0tPnNnbGVuOworCWNvbnRleHQuZXJyb3JzID0gMDsKKwljb250ZXh0LmRldiA9IGRldjsKKwlpbml0X2NvbXBsZXRpb24gKCZjb250ZXh0LmRvbmUpOworCXNwaW5fbG9ja19pbml0ICgmY29udGV4dC5sb2NrKTsKKworCW1lbXNldCAodXJicywgMCwgc2l6ZW9mIHVyYnMpOworCXVkZXYgPSB0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KTsKKwlkZXZfZGJnICgmZGV2LT5pbnRmLT5kZXYsCisJCSIuLi4gaXNvIHBlcmlvZCAlZCAlc2ZyYW1lcywgd01heFBhY2tldCAlMDR4XG4iLAorCQkxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKSwKKwkJKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/ICJtaWNybyIgOiAiIiwKKwkJbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+c2dsZW47IGkrKykgeworCQl1cmJzIFtpXSA9IGlzb19hbGxvY191cmIgKHVkZXYsIHBpcGUsIGRlc2MsCisJCQkJcGFyYW0tPmxlbmd0aCk7CisJCWlmICghdXJicyBbaV0pIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJcGFja2V0cyArPSB1cmJzW2ldLT5udW1iZXJfb2ZfcGFja2V0czsKKwkJdXJicyBbaV0tPmNvbnRleHQgPSAmY29udGV4dDsKKwl9CisJcGFja2V0cyAqPSBwYXJhbS0+aXRlcmF0aW9uczsKKwlkZXZfZGJnICgmZGV2LT5pbnRmLT5kZXYsCisJCSIuLi4gdG90YWwgJWx1IG1zZWMgKCVsdSBwYWNrZXRzKVxuIiwKKwkJKHBhY2tldHMgKiAoMSA8PCAoZGVzYy0+YkludGVydmFsIC0gMSkpKQorCQkJLyAoKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDggOiAxKSwKKwkJcGFja2V0cyk7CisKKwlzcGluX2xvY2tfaXJxICgmY29udGV4dC5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYnMgW2ldLCBTTEFCX0FUT01JQyk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlFUlJPUiAoZGV2LCAic3VibWl0IGlzb1slZF0sIGVycm9yICVkXG4iLCBpLCBzdGF0dXMpOworCQkJaWYgKGkgPT0gMCkgeworCQkJCXNwaW5fdW5sb2NrX2lycSAoJmNvbnRleHQubG9jayk7CisJCQkJZ290byBmYWlsOworCQkJfQorCisJCQlzaW1wbGVfZnJlZV91cmIgKHVyYnMgW2ldKTsKKwkJCWNvbnRleHQucGVuZGluZy0tOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSAoJmNvbnRleHQubG9jayk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uICgmY29udGV4dC5kb25lKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJaWYgKHVyYnMgW2ldKQorCQkJc2ltcGxlX2ZyZWVfdXJiICh1cmJzIFtpXSk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFdlIG9ubHkgaGF2ZSB0aGlzIG9uZSBpbnRlcmZhY2UgdG8gdXNlciBzcGFjZSwgdGhyb3VnaCB1c2Jmcy4KKyAqIFVzZXIgbW9kZSBjb2RlIGNhbiBzY2FuIHVzYmZzIHRvIGZpbmQgTiBkaWZmZXJlbnQgZGV2aWNlcyAobWF5YmUgb24KKyAqIGRpZmZlcmVudCBidXNzZXMpIHRvIHVzZSB3aGVuIHRlc3RpbmcsIGFuZCBhbGxvY2F0ZSBvbmUgdGhyZWFkIHBlcgorICogdGVzdC4gIFNvIGRpc2NvdmVyeSBpcyBzaW1wbGlmaWVkLCBhbmQgd2UgaGF2ZSBubyBkZXZpY2UgbmFtaW5nIGlzc3Vlcy4KKyAqCisgKiBEb24ndCB1c2UgdGhlc2Ugb25seSBhcyBzdHJlc3MvbG9hZCB0ZXN0cy4gIFVzZSB0aGVtIGFsb25nIHdpdGggd2l0aAorICogb3RoZXIgVVNCIGJ1cyBhY3Rpdml0eTogIHBsdWdnaW5nLCB1bnBsdWdnaW5nLCBtb3VzaW5nLCBtcDMgcGxheWJhY2ssCisgKiB2aWRlbyBjYXB0dXJlLCBhbmQgc28gb24uICBSdW4gZGlmZmVyZW50IHRlc3RzIGF0IGRpZmZlcmVudCB0aW1lcywgaW4KKyAqIGRpZmZlcmVudCBzZXF1ZW5jZXMuICBOb3RoaW5nIGhlcmUgc2hvdWxkIGludGVyYWN0IHdpdGggb3RoZXIgZGV2aWNlcywKKyAqIGV4Y2VwdCBpbmRpcmVjdGx5IGJ5IGNvbnN1bWluZyBVU0IgYmFuZHdpZHRoIGFuZCBDUFUgcmVzb3VyY2VzIGZvciB0ZXN0CisgKiB0aHJlYWRzIGFuZCByZXF1ZXN0IGNvbXBsZXRpb24uICBCdXQgdGhlIG9ubHkgd2F5IHRvIGtub3cgdGhhdCBmb3Igc3VyZQorICogaXMgdG8gdGVzdCB3aGVuIEhDIHF1ZXVlcyBhcmUgaW4gdXNlIGJ5IG1hbnkgZGV2aWNlcy4KKyAqLworCitzdGF0aWMgaW50Cit1c2J0ZXN0X2lvY3RsIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNidGVzdF9kZXYJKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdGVzdGRldl90b191c2JkZXYgKGRldik7CisJc3RydWN0IHVzYnRlc3RfcGFyYW0JKnBhcmFtID0gYnVmOworCWludAkJCXJldHZhbCA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCB1cmIJCSp1cmI7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKKwlzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QJcmVxOworCXN0cnVjdCB0aW1ldmFsCQlzdGFydDsKKwl1bnNpZ25lZAkJaTsKKworCS8vIEZJWE1FIFVTQkRFVkZTX0NPTk5FQ1RJTkZPIGRvZXNuJ3Qgc2F5IGhvdyBmYXN0IHRoZSBkZXZpY2UgaXMuCisKKwlpZiAoY29kZSAhPSBVU0JURVNUX1JFUVVFU1QpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChwYXJhbS0+aXRlcmF0aW9ucyA8PSAwIHx8IHBhcmFtLT5sZW5ndGggPCAwCisJCQl8fCBwYXJhbS0+c2dsZW4gPCAwIHx8IHBhcmFtLT52YXJ5IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGV2LT5zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogc29tZSBkZXZpY2VzLCBsaWtlIGV6LXVzYiBkZWZhdWx0IGRldmljZXMsIG5lZWQgYSBub24tZGVmYXVsdAorCSAqIGFsdHNldHRpbmcgdG8gaGF2ZSBhbnkgYWN0aXZlIGVuZHBvaW50cy4gIHNvbWUgdGVzdHMgY2hhbmdlCisJICogYWx0c2V0dGluZ3M7IGZvcmNlIGEgZGVmYXVsdCBzbyBtb3N0IHRlc3RzIGRvbid0IG5lZWQgdG8gY2hlY2suCisJICovCisJaWYgKGRldi0+aW5mby0+YWx0ID49IDApIHsKKwkgICAgCWludAlyZXM7CisKKwkJaWYgKGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcikgeworCQkJdXAgKCZkZXYtPnNlbSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlyZXMgPSBzZXRfYWx0c2V0dGluZyAoZGV2LCBkZXYtPmluZm8tPmFsdCk7CisJCWlmIChyZXMpIHsKKwkJCWRldl9lcnIgKCZpbnRmLT5kZXYsCisJCQkJCSJzZXQgYWx0c2V0dGluZyB0byAlZCBmYWlsZWQsICVkXG4iLAorCQkJCQlkZXYtPmluZm8tPmFsdCwgcmVzKTsKKwkJCXVwICgmZGV2LT5zZW0pOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKworCS8qCisJICogSnVzdCBhIGJ1bmNoIG9mIHRlc3QgY2FzZXMgdGhhdCBldmVyeSBIQ0QgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlLgorCSAqCisJICogU29tZSBtYXkgbmVlZCBzcGVjaWZpYyBmaXJtd2FyZSwgdGhvdWdoIGl0J2QgYmUgZ29vZCB0byBoYXZlCisJICogb25lIGZpcm13YXJlIGltYWdlIHRvIGhhbmRsZSBhbGwgdGhlIHRlc3QgY2FzZXMuCisJICoKKwkgKiBGSVhNRSBhZGQgbW9yZSB0ZXN0cyEgIGNhbmNlbCByZXF1ZXN0cywgdmVyaWZ5IHRoZSBkYXRhLCBjb250cm9sCisJICogcXVldWVpbmcsIGNvbmN1cnJlbnQgcmVhZCt3cml0ZSB0aHJlYWRzLCBhbmQgc28gb24uCisJICovCisJZG9fZ2V0dGltZW9mZGF5ICgmc3RhcnQpOworCXN3aXRjaCAocGFyYW0tPnRlc3RfbnVtKSB7CisKKwljYXNlIDA6CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJURVNUIDA6ICBOT1BcbiIpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKworCS8qIFNpbXBsZSBub24tcXVldWVkIGJ1bGsgSS9PIHRlc3RzICovCisJY2FzZSAxOgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJIlRFU1QgMTogIHdyaXRlICVkIGJ5dGVzICV1IHRpbWVzXG4iLAorCQkJCXBhcmFtLT5sZW5ndGgsIHBhcmFtLT5pdGVyYXRpb25zKTsKKwkJdXJiID0gc2ltcGxlX2FsbG9jX3VyYiAodWRldiwgZGV2LT5vdXRfcGlwZSwgcGFyYW0tPmxlbmd0aCk7CisJCWlmICghdXJiKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNpbmsgKG1heWJlIGFjY2VwdHMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgcGFyYW0tPml0ZXJhdGlvbnMsIDAsIDAsICJ0ZXN0MSIpOworCQlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGRldi0+aW5fcGlwZSA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJIlRFU1QgMjogIHJlYWQgJWQgYnl0ZXMgJXUgdGltZXNcbiIsCisJCQkJcGFyYW0tPmxlbmd0aCwgcGFyYW0tPml0ZXJhdGlvbnMpOworCQl1cmIgPSBzaW1wbGVfYWxsb2NfdXJiICh1ZGV2LCBkZXYtPmluX3BpcGUsIHBhcmFtLT5sZW5ndGgpOworCQlpZiAoIXVyYikgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzb3VyY2UgKG1heWJlIGdlbmVyYXRlcyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCBwYXJhbS0+aXRlcmF0aW9ucywgMCwgMCwgInRlc3QyIik7CisJCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwIHx8IHBhcmFtLT52YXJ5ID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkiVEVTVCAzOiAgd3JpdGUvJWQgMC4uJWQgYnl0ZXMgJXUgdGltZXNcbiIsCisJCQkJcGFyYW0tPnZhcnksIHBhcmFtLT5sZW5ndGgsIHBhcmFtLT5pdGVyYXRpb25zKTsKKwkJdXJiID0gc2ltcGxlX2FsbG9jX3VyYiAodWRldiwgZGV2LT5vdXRfcGlwZSwgcGFyYW0tPmxlbmd0aCk7CisJCWlmICghdXJiKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNpbmsgKG1heWJlIGFjY2VwdHMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgcGFyYW0tPml0ZXJhdGlvbnMsIHBhcmFtLT52YXJ5LAorCQkJCQkwLCAidGVzdDMiKTsKKwkJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChkZXYtPmluX3BpcGUgPT0gMCB8fCBwYXJhbS0+dmFyeSA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJIlRFU1QgNDogIHJlYWQvJWQgMC4uJWQgYnl0ZXMgJXUgdGltZXNcbiIsCisJCQkJcGFyYW0tPnZhcnksIHBhcmFtLT5sZW5ndGgsIHBhcmFtLT5pdGVyYXRpb25zKTsKKwkJdXJiID0gc2ltcGxlX2FsbG9jX3VyYiAodWRldiwgZGV2LT5pbl9waXBlLCBwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc291cmNlIChtYXliZSBnZW5lcmF0ZXMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgcGFyYW0tPml0ZXJhdGlvbnMsIHBhcmFtLT52YXJ5LAorCQkJCQkwLCAidGVzdDQiKTsKKwkJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCQlicmVhazsKKworCS8qIFF1ZXVlZCBidWxrIEkvTyB0ZXN0cyAqLworCWNhc2UgNToKKwkJaWYgKGRldi0+b3V0X3BpcGUgPT0gMCB8fCBwYXJhbS0+c2dsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJIlRFU1QgNTogIHdyaXRlICVkIHNnbGlzdHMgJWQgZW50cmllcyBvZiAlZCBieXRlc1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywKKwkJCQlwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgpOworCQlzZyA9IGFsbG9jX3NnbGlzdCAocGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoLCAwKTsKKwkJaWYgKCFzZykgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzaW5rIChtYXliZSBhY2NlcHRzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gcGVyZm9ybV9zZ2xpc3QgKHVkZXYsIHBhcmFtLT5pdGVyYXRpb25zLCBkZXYtPm91dF9waXBlLAorCQkJCSZyZXEsIHNnLCBwYXJhbS0+c2dsZW4pOworCQlmcmVlX3NnbGlzdCAoc2csIHBhcmFtLT5zZ2xlbik7CisJCWJyZWFrOworCisJY2FzZSA2OgorCQlpZiAoZGV2LT5pbl9waXBlID09IDAgfHwgcGFyYW0tPnNnbGVuID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCSJURVNUIDY6ICByZWFkICVkIHNnbGlzdHMgJWQgZW50cmllcyBvZiAlZCBieXRlc1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywKKwkJCQlwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgpOworCQlzZyA9IGFsbG9jX3NnbGlzdCAocGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoLCAwKTsKKwkJaWYgKCFzZykgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzb3VyY2UgKG1heWJlIGdlbmVyYXRlcyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHBlcmZvcm1fc2dsaXN0ICh1ZGV2LCBwYXJhbS0+aXRlcmF0aW9ucywgZGV2LT5pbl9waXBlLAorCQkJCSZyZXEsIHNnLCBwYXJhbS0+c2dsZW4pOworCQlmcmVlX3NnbGlzdCAoc2csIHBhcmFtLT5zZ2xlbik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJaWYgKGRldi0+b3V0X3BpcGUgPT0gMCB8fCBwYXJhbS0+c2dsZW4gPT0gMCB8fCBwYXJhbS0+dmFyeSA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkiVEVTVCA3OiAgd3JpdGUvJWQgJWQgc2dsaXN0cyAlZCBlbnRyaWVzIDAuLiVkIGJ5dGVzXG4iLAorCQkJCXBhcmFtLT52YXJ5LCBwYXJhbS0+aXRlcmF0aW9ucywKKwkJCQlwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgpOworCQlzZyA9IGFsbG9jX3NnbGlzdCAocGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+dmFyeSk7CisJCWlmICghc2cpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc2luayAobWF5YmUgYWNjZXB0cyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHBlcmZvcm1fc2dsaXN0ICh1ZGV2LCBwYXJhbS0+aXRlcmF0aW9ucywgZGV2LT5vdXRfcGlwZSwKKwkJCQkmcmVxLCBzZywgcGFyYW0tPnNnbGVuKTsKKwkJZnJlZV9zZ2xpc3QgKHNnLCBwYXJhbS0+c2dsZW4pOworCQlicmVhazsKKwljYXNlIDg6CisJCWlmIChkZXYtPmluX3BpcGUgPT0gMCB8fCBwYXJhbS0+c2dsZW4gPT0gMCB8fCBwYXJhbS0+dmFyeSA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkiVEVTVCA4OiAgcmVhZC8lZCAlZCBzZ2xpc3RzICVkIGVudHJpZXMgMC4uJWQgYnl0ZXNcbiIsCisJCQkJcGFyYW0tPnZhcnksIHBhcmFtLT5pdGVyYXRpb25zLAorCQkJCXBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCk7CisJCXNnID0gYWxsb2Nfc2dsaXN0IChwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgsIHBhcmFtLT52YXJ5KTsKKwkJaWYgKCFzZykgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzb3VyY2UgKG1heWJlIGdlbmVyYXRlcyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHBlcmZvcm1fc2dsaXN0ICh1ZGV2LCBwYXJhbS0+aXRlcmF0aW9ucywgZGV2LT5pbl9waXBlLAorCQkJCSZyZXEsIHNnLCBwYXJhbS0+c2dsZW4pOworCQlmcmVlX3NnbGlzdCAoc2csIHBhcmFtLT5zZ2xlbik7CisJCWJyZWFrOworCisJLyogbm9uLXF1ZXVlZCBzYW5pdHkgdGVzdHMgZm9yIGNvbnRyb2wgKGNoYXB0ZXIgOSBzdWJzZXQpICovCisJY2FzZSA5OgorCQlyZXR2YWwgPSAwOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJIlRFU1QgOTogIGNoOSAoc3Vic2V0KSBjb250cm9sIHRlc3RzLCAlZCB0aW1lc1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucyk7CisJCWZvciAoaSA9IHBhcmFtLT5pdGVyYXRpb25zOyByZXR2YWwgPT0gMCAmJiBpLS07IC8qIE5PUCAqLykKKwkJCXJldHZhbCA9IGNoOV9wb3N0Y29uZmlnIChkZXYpOworCQlpZiAocmV0dmFsKQorCQkJZGJnICgiY2g5IHN1YnNldCBmYWlsZWQsIGl0ZXJhdGlvbnMgbGVmdCAlZCIsIGkpOworCQlicmVhazsKKworCS8qIHF1ZXVlZCBjb250cm9sIG1lc3NhZ2luZyAqLworCWNhc2UgMTA6CisJCWlmIChwYXJhbS0+c2dsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSAwOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCSJURVNUIDEwOiAgcXVldWUgJWQgY29udHJvbCBjYWxscywgJWQgdGltZXNcbiIsCisJCQkJcGFyYW0tPnNnbGVuLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zKTsKKwkJcmV0dmFsID0gdGVzdF9jdHJsX3F1ZXVlIChkZXYsIHBhcmFtKTsKKwkJYnJlYWs7CisKKwkvKiBzaW1wbGUgbm9uLXF1ZXVlZCB1bmxpbmtzIChyaW5nIHdpdGggb25lIHVyYikgKi8KKwljYXNlIDExOgorCQlpZiAoZGV2LT5pbl9waXBlID09IDAgfHwgIXBhcmFtLT5sZW5ndGgpCisJCQlicmVhazsKKwkJcmV0dmFsID0gMDsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIlRFU1QgMTE6ICB1bmxpbmsgJWQgcmVhZHMgb2YgJWRcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsIHBhcmFtLT5sZW5ndGgpOworCQlmb3IgKGkgPSBwYXJhbS0+aXRlcmF0aW9uczsgcmV0dmFsID09IDAgJiYgaS0tOyAvKiBOT1AgKi8pCisJCQlyZXR2YWwgPSB1bmxpbmtfc2ltcGxlIChkZXYsIGRldi0+aW5fcGlwZSwKKwkJCQkJCXBhcmFtLT5sZW5ndGgpOworCQlpZiAocmV0dmFsKQorCQkJZGV2X2RiZyAoJmludGYtPmRldiwgInVubGluayByZWFkcyBmYWlsZWQgJWQsICIKKwkJCQkiaXRlcmF0aW9ucyBsZWZ0ICVkXG4iLCByZXR2YWwsIGkpOworCQlicmVhazsKKwljYXNlIDEyOgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwIHx8ICFwYXJhbS0+bGVuZ3RoKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IDA7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJURVNUIDEyOiAgdW5saW5rICVkIHdyaXRlcyBvZiAlZFxuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywgcGFyYW0tPmxlbmd0aCk7CisJCWZvciAoaSA9IHBhcmFtLT5pdGVyYXRpb25zOyByZXR2YWwgPT0gMCAmJiBpLS07IC8qIE5PUCAqLykKKwkJCXJldHZhbCA9IHVubGlua19zaW1wbGUgKGRldiwgZGV2LT5vdXRfcGlwZSwKKwkJCQkJCXBhcmFtLT5sZW5ndGgpOworCQlpZiAocmV0dmFsKQorCQkJZGV2X2RiZyAoJmludGYtPmRldiwgInVubGluayB3cml0ZXMgZmFpbGVkICVkLCAiCisJCQkJIml0ZXJhdGlvbnMgbGVmdCAlZFxuIiwgcmV0dmFsLCBpKTsKKwkJYnJlYWs7CisKKwkvKiBlcCBoYWx0IHRlc3RzICovCisJY2FzZSAxMzoKKwkJaWYgKGRldi0+b3V0X3BpcGUgPT0gMCAmJiBkZXYtPmluX3BpcGUgPT0gMCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSAwOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiVEVTVCAxMzogIHNldC9jbGVhciAlZCBoYWx0c1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucyk7CisJCWZvciAoaSA9IHBhcmFtLT5pdGVyYXRpb25zOyByZXR2YWwgPT0gMCAmJiBpLS07IC8qIE5PUCAqLykKKwkJCXJldHZhbCA9IGhhbHRfc2ltcGxlIChkZXYpOworCQkKKwkJaWYgKHJldHZhbCkKKwkJCURCRyAoZGV2LCAiaGFsdHMgZmFpbGVkLCBpdGVyYXRpb25zIGxlZnQgJWRcbiIsIGkpOworCQlicmVhazsKKworCS8qIGNvbnRyb2wgd3JpdGUgdGVzdHMgKi8KKwljYXNlIDE0OgorCQlpZiAoIWRldi0+aW5mby0+Y3RybF9vdXQpCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIlRFU1QgMTQ6ICAlZCBlcDBvdXQsIDAuLiVkIHZhcnkgJWRcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsIHBhcmFtLT5sZW5ndGgsIHBhcmFtLT52YXJ5KTsKKwkJcmV0dmFsID0gY3RybF9vdXQgKGRldiwgcGFyYW0tPml0ZXJhdGlvbnMsIAorCQkJCXBhcmFtLT5sZW5ndGgsIHBhcmFtLT52YXJ5KTsKKwkJYnJlYWs7CisKKwkvKiBpc28gd3JpdGUgdGVzdHMgKi8KKwljYXNlIDE1OgorCQlpZiAoZGV2LT5vdXRfaXNvX3BpcGUgPT0gMCB8fCBwYXJhbS0+c2dsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAKKwkJCSJURVNUIDE1OiAgd3JpdGUgJWQgaXNvLCAlZCBlbnRyaWVzIG9mICVkIGJ5dGVzXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLAorCQkJCXBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCk7CisJCS8vIEZJUk1XQVJFOiAgaXNvIHNpbmsKKwkJcmV0dmFsID0gdGVzdF9pc29fcXVldWUgKGRldiwgcGFyYW0sCisJCQkJZGV2LT5vdXRfaXNvX3BpcGUsIGRldi0+aXNvX291dCk7CisJCWJyZWFrOworCisJLyogaXNvIHJlYWQgdGVzdHMgKi8KKwljYXNlIDE2OgorCQlpZiAoZGV2LT5pbl9pc29fcGlwZSA9PSAwIHx8IHBhcmFtLT5zZ2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkiVEVTVCAxNjogIHJlYWQgJWQgaXNvLCAlZCBlbnRyaWVzIG9mICVkIGJ5dGVzXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLAorCQkJCXBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCk7CisJCS8vIEZJUk1XQVJFOiAgaXNvIHNvdXJjZQorCQlyZXR2YWwgPSB0ZXN0X2lzb19xdWV1ZSAoZGV2LCBwYXJhbSwKKwkJCQlkZXYtPmluX2lzb19waXBlLCBkZXYtPmlzb19pbik7CisJCWJyZWFrOworCisJLy8gRklYTUUgdW5saW5rIGZyb20gcXVldWUgKHJpbmcgd2l0aCBOIHVyYnMpCisKKwkvLyBGSVhNRSBzY2F0dGVybGlzdCBjYW5jZWwgKG5lZWRzIGhlbHBlciB0aHJlYWQpCisKKwl9CisJZG9fZ2V0dGltZW9mZGF5ICgmcGFyYW0tPmR1cmF0aW9uKTsKKwlwYXJhbS0+ZHVyYXRpb24udHZfc2VjIC09IHN0YXJ0LnR2X3NlYzsKKwlwYXJhbS0+ZHVyYXRpb24udHZfdXNlYyAtPSBzdGFydC50dl91c2VjOworCWlmIChwYXJhbS0+ZHVyYXRpb24udHZfdXNlYyA8IDApIHsKKwkJcGFyYW0tPmR1cmF0aW9uLnR2X3VzZWMgKz0gMTAwMCAqIDEwMDA7CisJCXBhcmFtLT5kdXJhdGlvbi50dl9zZWMgLT0gMTsKKwl9CisJdXAgKCZkZXYtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHVuc2lnbmVkIGZvcmNlX2ludGVycnVwdCA9IDA7Cittb2R1bGVfcGFyYW0gKGZvcmNlX2ludGVycnVwdCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChmb3JjZV9pbnRlcnJ1cHQsICIwID0gdGVzdCBkZWZhdWx0OyBlbHNlIGludGVycnVwdCIpOworCisjaWZkZWYJR0VORVJJQworc3RhdGljIHVuc2lnbmVkIHNob3J0IHZlbmRvcjsKK21vZHVsZV9wYXJhbSh2ZW5kb3IsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDICh2ZW5kb3IsICJ2ZW5kb3IgY29kZSAoZnJvbSB1c2ItaWYpIik7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBwcm9kdWN0OworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChwcm9kdWN0LCAicHJvZHVjdCBjb2RlIChmcm9tIHZlbmRvcikiKTsKKyNlbmRpZgorCitzdGF0aWMgaW50Cit1c2J0ZXN0X3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCXN0cnVjdCB1c2J0ZXN0X2RldgkqZGV2OworCXN0cnVjdCB1c2J0ZXN0X2luZm8JKmluZm87CisJY2hhcgkJCSpydGVzdCwgKnd0ZXN0OworCWNoYXIJCQkqaXJ0ZXN0LCAqaXd0ZXN0OworCisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCisjaWZkZWYJR0VORVJJQworCS8qIHNwZWNpZnkgZGV2aWNlcyBieSBtb2R1bGUgcGFyYW1ldGVycz8gKi8KKwlpZiAoaWQtPm1hdGNoX2ZsYWdzID09IDApIHsKKwkJLyogdmVuZG9yIG1hdGNoIHJlcXVpcmVkLCBwcm9kdWN0IG1hdGNoIG9wdGlvbmFsICovCisJCWlmICghdmVuZG9yIHx8IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9ICh1MTYpdmVuZG9yKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChwcm9kdWN0ICYmIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAodTE2KXByb2R1Y3QpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZGJnICgibWF0Y2hlZCBtb2R1bGUgcGFyYW1zLCB2ZW5kPTB4JTA0eCBwcm9kPTB4JTA0eCIsCisJCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwl9CisjZW5kaWYKKworCWRldiA9IGttYWxsb2MgKHNpemVvZiAqZGV2LCBTTEFCX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJaW5mbyA9IChzdHJ1Y3QgdXNidGVzdF9pbmZvICopIGlkLT5kcml2ZXJfaW5mbzsKKwlkZXYtPmluZm8gPSBpbmZvOworCWluaXRfTVVURVggKCZkZXYtPnNlbSk7CisKKwlkZXYtPmludGYgPSBpbnRmOworCisJLyogY2FjaGVsaW5lLWFsaWduZWQgc2NyYXRjaCBmb3IgaS9vICovCisJaWYgKChkZXYtPmJ1ZiA9IGttYWxsb2MgKFRCVUZfU0laRSwgU0xBQl9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWtmcmVlIChkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBOT1RFIHRoaXMgZG9lc24ndCB5ZXQgdGVzdCB0aGUgaGFuZGZ1bCBvZiBkaWZmZXJlbmNlIHRoYXQgYXJlCisJICogdmlzaWJsZSB3aXRoIGhpZ2ggc3BlZWQgaW50ZXJydXB0czogIGJpZ2dlciBtYXhwYWNrZXQgKDFLKSBhbmQKKwkgKiAiaGlnaCBiYW5kd2lkdGgiIG1vZGVzICh1cCB0byAzIHBhY2tldHMvdWZyYW1lKS4KKwkgKi8KKwlydGVzdCA9IHd0ZXN0ID0gIiI7CisJaXJ0ZXN0ID0gaXd0ZXN0ID0gIiI7CisJaWYgKGZvcmNlX2ludGVycnVwdCB8fCB1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKSB7CisJCWlmIChpbmZvLT5lcF9pbikgeworCQkJZGV2LT5pbl9waXBlID0gdXNiX3JjdmludHBpcGUgKHVkZXYsIGluZm8tPmVwX2luKTsKKwkJCXJ0ZXN0ID0gIiBpbnRyLWluIjsKKwkJfQorCQlpZiAoaW5mby0+ZXBfb3V0KSB7CisJCQlkZXYtPm91dF9waXBlID0gdXNiX3NuZGludHBpcGUgKHVkZXYsIGluZm8tPmVwX291dCk7CisJCQl3dGVzdCA9ICIgaW50ci1vdXQiOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGluZm8tPmF1dG9jb25mKSB7CisJCQlpbnQgc3RhdHVzOworCisJCQlzdGF0dXMgPSBnZXRfZW5kcG9pbnRzIChkZXYsIGludGYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkYmcgKCJjb3VsZG4ndCBnZXQgZW5kcG9pbnRzLCAlZFxuIiwgc3RhdHVzKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQkJLyogbWF5IGZpbmQgYnVsayBvciBJU08gcGlwZXMgKi8KKwkJfSBlbHNlIHsKKwkJCWlmIChpbmZvLT5lcF9pbikKKwkJCQlkZXYtPmluX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHVkZXYsCisJCQkJCQkJaW5mby0+ZXBfaW4pOworCQkJaWYgKGluZm8tPmVwX291dCkKKwkJCQlkZXYtPm91dF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlICh1ZGV2LAorCQkJCQkJCWluZm8tPmVwX291dCk7CisJCX0KKwkJaWYgKGRldi0+aW5fcGlwZSkKKwkJCXJ0ZXN0ID0gIiBidWxrLWluIjsKKwkJaWYgKGRldi0+b3V0X3BpcGUpCisJCQl3dGVzdCA9ICIgYnVsay1vdXQiOworCQlpZiAoZGV2LT5pbl9pc29fcGlwZSkKKwkJCWlydGVzdCA9ICIgaXNvLWluIjsKKwkJaWYgKGRldi0+b3V0X2lzb19waXBlKQorCQkJaXd0ZXN0ID0gIiBpc28tb3V0IjsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBkZXYpOworCWRldl9pbmZvICgmaW50Zi0+ZGV2LCAiJXNcbiIsIGluZm8tPm5hbWUpOworCWRldl9pbmZvICgmaW50Zi0+ZGV2LCAiJXMgc3BlZWQge2NvbnRyb2wlcyVzJXMlcyVzfSB0ZXN0cyVzXG4iLAorCQkJKHsgY2hhciAqdG1wOworCQkJc3dpdGNoICh1ZGV2LT5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfTE9XOiB0bXAgPSAibG93IjsgYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOiB0bXAgPSAiZnVsbCI7IGJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfSElHSDogdG1wID0gImhpZ2giOyBicmVhazsKKwkJCWRlZmF1bHQ6IHRtcCA9ICJ1bmtub3duIjsgYnJlYWs7CisJCQl9OyB0bXA7IH0pLAorCQkJaW5mby0+Y3RybF9vdXQgPyAiIGluL291dCIgOiAiIiwKKwkJCXJ0ZXN0LCB3dGVzdCwKKwkJCWlydGVzdCwgaXd0ZXN0LAorCQkJaW5mby0+YWx0ID49IDAgPyAiICgrYWx0KSIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYnRlc3RfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYnRlc3RfZGV2CSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCWRvd24gKCZkZXYtPnNlbSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiZGlzY29ubmVjdFxuIik7CisJa2ZyZWUgKGRldik7Cit9CisKKy8qIEJhc2ljIHRlc3Rpbmcgb25seSBuZWVkcyBhIGRldmljZSB0aGF0IGNhbiBzb3VyY2Ugb3Igc2luayBidWxrIHRyYWZmaWMuCisgKiBBbnkgZGV2aWNlIGNhbiB0ZXN0IGNvbnRyb2wgdHJhbnNmZXJzIChkZWZhdWx0IHdpdGggR0VORVJJQyBiaW5kaW5nKS4KKyAqCisgKiBTZXZlcmFsIGVudHJpZXMgd29yayB3aXRoIHRoZSBkZWZhdWx0IEVQMCBpbXBsZW1lbnRhdGlvbiB0aGF0J3MgYnVpbHQKKyAqIGludG8gRVotVVNCIGNoaXBzLiAgVGhlcmUncyBhIGRlZmF1bHQgdmVuZG9yIElEIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuCisgKiBieSAodmVyeSkgc21hbGwgY29uZmlnIEVFUFJPTVMsIGJ1dCBvdGhlcndpc2UgYWxsIHRoZXNlIGRldmljZXMgYWN0CisgKiBpZGVudGljYWxseSB1bnRpbCBmaXJtd2FyZSBpcyBsb2FkZWQ6ICBvbmx5IEVQMCB3b3Jrcy4gIEl0IHR1cm5zIG91dAorICogdG8gYmUgZWFzeSB0byBtYWtlIG90aGVyIGVuZHBvaW50cyB3b3JrLCB3aXRob3V0IG1vZGlmeWluZyB0aGF0IEVQMAorICogYmVoYXZpb3IuICBGb3Igbm93LCB3ZSBleHBlY3QgdGhhdCBraW5kIG9mIGZpcm13YXJlLgorICovCisKKy8qIGFuMjF4eCBvciBmeCB2ZXJzaW9ucyBvZiBlei11c2IgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGV6MV9pbmZvID0geworCS5uYW1lCQk9ICJFWi1VU0IgZGV2aWNlIiwKKwkuZXBfaW4JCT0gMiwKKwkuZXBfb3V0CQk9IDIsCisJLmFsdAkJPSAxLAorfTsKKworLyogZngyIHZlcnNpb24gb2YgZXotdXNiICovCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBlejJfaW5mbyA9IHsKKwkubmFtZQkJPSAiRlgyIGRldmljZSIsCisJLmVwX2luCQk9IDYsCisJLmVwX291dAkJPSAyLAorCS5hbHQJCT0gMSwKK307CisKKy8qIGV6dXNiIGZhbWlseSBkZXZpY2Ugd2l0aCBkZWRpY2F0ZWQgdXNiIHRlc3QgZmlybXdhcmUsCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGZ3X2luZm8gPSB7CisJLm5hbWUJCT0gInVzYiB0ZXN0IGRldmljZSIsCisJLmVwX2luCQk9IDIsCisJLmVwX291dAkJPSAyLAorCS5hbHQJCT0gMSwKKwkuYXV0b2NvbmYJPSAxLAkJLy8gaXNvIGFuZCBjdHJsX291dCBuZWVkIGF1dG9jb25mCisJLmN0cmxfb3V0CT0gMSwKKwkuaXNvCQk9IDEsCQkvLyBpc29fZXAncyBhcmUgIzggaW4vb3V0Cit9OworCisvKiBwZXJpcGhlcmFsIHJ1bm5pbmcgTGludXggYW5kICd6ZXJvLmMnIHRlc3QgZmlybXdhcmUsIG9yCisgKiBpdHMgdXNlci1tb2RlIGNvdXNpbi4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoaXMgdXNlCisgKiBkaWZmZXJlbnQgaGFyZHdhcmUgd2l0aCB0aGUgc2FtZSB2ZW5kb3IvcHJvZHVjdCBjb2Rlcy4KKyAqIGhvc3Qgc2lkZSBNVVNUIHJlbHkgb24gdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzLgorICovCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBnel9pbmZvID0geworCS5uYW1lCQk9ICJMaW51eCBnYWRnZXQgemVybyIsCisJLmF1dG9jb25mCT0gMSwKKwkuY3RybF9vdXQJPSAxLAorCS5hbHQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIHVtX2luZm8gPSB7CisJLm5hbWUJCT0gIkxpbnV4IHVzZXIgbW9kZSB0ZXN0IGRyaXZlciIsCisJLmF1dG9jb25mCT0gMSwKKwkuYWx0CQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gdW0yX2luZm8gPSB7CisJLm5hbWUJCT0gIkxpbnV4IHVzZXIgbW9kZSBJU08gdGVzdCBkcml2ZXIiLAorCS5hdXRvY29uZgk9IDEsCisJLmlzbwkJPSAxLAorCS5hbHQJCT0gLTEsCit9OworCisjaWZkZWYgSUJPVDIKKy8qIHRoaXMgaXMgYSBuaWNlIHNvdXJjZSBvZiBoaWdoIHNwZWVkIGJ1bGsgZGF0YTsKKyAqIHVzZXMgYW4gRlgyLCB3aXRoIGZpcm13YXJlIHByb3ZpZGVkIGluIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gaWJvdDJfaW5mbyA9IHsKKwkubmFtZQkJPSAiaUJPVDIgd2ViY2FtIiwKKwkuZXBfaW4JCT0gMiwKKwkuYWx0CQk9IC0xLAorfTsKKyNlbmRpZgorCisjaWZkZWYgR0VORVJJQworLyogd2UgY2FuIHVzZSBhbnkgZGV2aWNlIHRvIHRlc3QgY29udHJvbCB0cmFmZmljICovCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBnZW5lcmljX2luZm8gPSB7CisJLm5hbWUJCT0gIkdlbmVyaWMgVVNCIGRldmljZSIsCisJLmFsdAkJPSAtMSwKK307CisjZW5kaWYKKworLy8gRklYTUUgcmVtb3ZlIHRoaXMgCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBoYWN0X2luZm8gPSB7CisJLm5hbWUJCT0gIkZYMi9oYWN0IiwKKwkvLy5lcF9pbgkJPSA2LAorCS5lcF9vdXQJCT0gMiwKKwkuYWx0CQk9IC0xLAorfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisKKwl7IFVTQl9ERVZJQ0UgKDB4MDU0NywgMHgxMDAyKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZoYWN0X2luZm8sCisJCX0sCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJLyogRVotVVNCIGRldmljZXMgd2hpY2ggZG93bmxvYWQgZmlybXdhcmUgdG8gcmVwbGFjZSAob3IgaW4gb3VyCisJICogY2FzZSBhdWdtZW50KSB0aGUgZGVmYXVsdCBkZXZpY2UgaW1wbGVtZW50YXRpb24uCisJICovCisKKwkvKiBnZW5lcmljIEVaLVVTQiBGWCBjb250cm9sbGVyICovCisJeyBVU0JfREVWSUNFICgweDA1NDcsIDB4MjIzNSksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZXoxX2luZm8sCisJCX0sCisKKwkvKiBDWTM2NzEgZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBFWi1VU0IgRlggKi8KKwl7IFVTQl9ERVZJQ0UgKDB4MDU0NywgMHgwMDgwKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZlejFfaW5mbywKKwkJfSwKKworCS8qIGdlbmVyaWMgRVotVVNCIEZYMiBjb250cm9sbGVyIChvciBkZXZlbG9wbWVudCBib2FyZCkgKi8KKwl7IFVTQl9ERVZJQ0UgKDB4MDRiNCwgMHg4NjEzKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZlejJfaW5mbywKKwkJfSwKKworCS8qIHJlLWVudW1lcmF0ZWQgdXNiIHRlc3QgZGV2aWNlIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFICgweGZmZjAsIDB4ZmZmMCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZndfaW5mbywKKwkJfSwKKworCS8qICJHYWRnZXQgWmVybyIgZmlybXdhcmUgcnVucyB1bmRlciBMaW51eCAqLworCXsgVVNCX0RFVklDRSAoMHgwNTI1LCAweGE0YTApLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmd6X2luZm8sCisJCX0sCisKKwkvKiBzbyBkb2VzIGEgdXNlci1tb2RlIHZhcmlhbnQgKi8KKwl7IFVTQl9ERVZJQ0UgKDB4MDUyNSwgMHhhNGE0KSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZ1bV9pbmZvLAorCQl9LAorCisJLyogLi4uIGFuZCBhIHVzZXItbW9kZSB2YXJpYW50IHRoYXQgdGFsa3MgaXNvICovCisJeyBVU0JfREVWSUNFICgweDA1MjUsIDB4YTRhMyksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmdW0yX2luZm8sCisJCX0sCisKKyNpZmRlZiBLRVlTUEFOXzE5UWkKKwkvKiBLZXlzcGFuIDE5cWkgdXNlcyBhbjIxeHggKG9yaWdpbmFsIEVaLVVTQikgKi8KKwkvLyB0aGlzIGRvZXMgbm90IGNvZXhpc3Qgd2l0aCB0aGUgcmVhbCBLZXlzcGFuIDE5cWkgZHJpdmVyIQorCXsgVVNCX0RFVklDRSAoMHgwNmNkLCAweDAxMGIpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmV6MV9pbmZvLAorCQl9LAorI2VuZGlmCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgSUJPVDIKKwkvKiBpQk9UMiBtYWtlcyBhIG5pY2Ugc291cmNlIG9mIGhpZ2ggc3BlZWQgYnVsay1pbiBkYXRhICovCisJLy8gdGhpcyBkb2VzIG5vdCBjb2V4aXN0IHdpdGggYSByZWFsIGlCT1QyIGRyaXZlciEKKwl7IFVTQl9ERVZJQ0UgKDB4MGI2MiwgMHgwMDU5KSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZpYm90Ml9pbmZvLAorCQl9LAorI2VuZGlmCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgR0VORVJJQworCS8qIG1vZHVsZSBwYXJhbXMgY2FuIHNwZWNpZnkgZGV2aWNlcyB0byB1c2UgZm9yIGNvbnRyb2wgdGVzdHMgKi8KKwl7IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZ2VuZXJpY19pbmZvLCB9LAorI2VuZGlmCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J0ZXN0X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNidGVzdCIsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLnByb2JlID0JdXNidGVzdF9wcm9iZSwKKwkuaW9jdGwgPQl1c2J0ZXN0X2lvY3RsLAorCS5kaXNjb25uZWN0ID0JdXNidGVzdF9kaXNjb25uZWN0LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdXNidGVzdF9pbml0ICh2b2lkKQoreworI2lmZGVmIEdFTkVSSUMKKwlpZiAodmVuZG9yKQorCQlkYmcgKCJwYXJhbXM6IHZlbmQ9MHglMDR4IHByb2Q9MHglMDR4IiwgdmVuZG9yLCBwcm9kdWN0KTsKKyNlbmRpZgorCXJldHVybiB1c2JfcmVnaXN0ZXIgKCZ1c2J0ZXN0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAodXNidGVzdF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHVzYnRlc3RfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJnVzYnRlc3RfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0ICh1c2J0ZXN0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04gKCJVU0IgQ29yZS9IQ0QgVGVzdGluZyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTc0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCkBAIC0wLDAgKzEsNjc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKgl1c3M3MjAuYyAgLS0gIFVTUzcyMCBVU0IgUGFycG9ydCBDYWJsZS4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkKKyAqCSAgICBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogIEJhc2VkIG9uIHBhcnBvcnRfcGMuYworICoKKyAqICBIaXN0b3J5OgorICogICAwLjEgIDA0LjA4Ljk5ICBDcmVhdGVkCisgKiAgIDAuMiAgMDcuMDguOTkgIFNvbWUgZml4ZXMgbWFpbmx5IHN1Z2dlc3RlZCBieSBUaW0gV2F1Z2gKKyAqCQkgICAgSW50ZXJydXB0IGhhbmRsaW5nIGN1cnJlbnRseSBkaXNhYmxlZCBiZWNhdXNlCisgKgkJICAgIHVzYl9yZXF1ZXN0X2lycSBjcmFzaGVzIHNvbWV3aGVyZSB3aXRoaW4gb2hjaS5jCisgKgkJICAgIGZvciBubyBhcHBhcmVudCByZWFzb24gKHRoYXQgaXMgZm9yIG1lLCBhbnl3YXkpCisgKgkJICAgIEVDUCBjdXJyZW50bHkgdW50ZXN0ZWQKKyAqICAgMC4zICAxMC4wOC45OSAgZml4aW5nIG1lcmdlIGVycm9ycworICogICAwLjQgIDEzLjA4Ljk5ICBBZGRlZCBWZW5kb3IvUHJvZHVjdCBJRCBvZiBCcmFkIEhhcmQncyBjYWJsZQorICogICAwLjUgIDIwLjA5Ljk5ICB1c2JfY29udHJvbF9tc2cgd3JhcHBlciB1c2VkCisgKiAgICAgICAgTm92MDEuMDAgIHVzYl9kZXZpY2VfdGFibGUgc3VwcG9ydCBieSBBZGFtIEouIFJpY2h0ZXIKKyAqICAgICAgICAwOC4wNC4wMSAgSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4gIGdiCisgKgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGhvbWFzIE0uIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBhcnBvcnQgQ2FibGUgZHJpdmVyIGZvciBDYWJsZXMgdXNpbmcgdGhlIEx1Y2VudCBUZWNobm9sb2dpZXMgVVNTNzIwIENoaXAiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwl2b2lkICppcnFoYW5kbGU7CisJdW5zaWduZWQgaW50IGlycXBpcGU7CisJdW5zaWduZWQgY2hhciByZWdbN107ICAvKiBVU0IgcmVnaXN0ZXJzICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBnZXRfMTI4NF9yZWdpc3RlcihzdHJ1Y3QgcGFycG9ydCAqcHAsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyICp2YWwpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVnaW5kZXhbOV0gPSB7CisJCTQsIDAsIDEsIDUsIDUsIDAsIDIsIDMsIDYKKwl9OworCWludCByZXQ7CisKKwlpZiAoIXVzYmRldikKKwkJcmV0dXJuIC0xOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsMCksIDMsIDB4YzAsICgodW5zaWduZWQgaW50KXJlZykgPDwgOCwgMCwgcHJpdi0+cmVnLCA3LCAxMDAwKTsKKwlpZiAocmV0ICE9IDcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogZ2V0XzEyODRfcmVnaXN0ZXIoJWQpIGZhaWxlZCwgc3RhdHVzIDB4JXggZXhwZWN0ZWQgN1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcmVnLCByZXQpOworCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworI2lmIDAKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogZ2V0XzEyODRfcmVnaXN0ZXIoJWQpIHJldHVybiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClyZWcsICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzBdLCAodW5zaWduZWQgaW50KXByaXYtPnJlZ1sxXSwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzJdLCAodW5zaWduZWQgaW50KXByaXYtPnJlZ1szXSwgKHVuc2lnbmVkIGludClwcml2LT5yZWdbNF0sCisJCSAgICAgICAodW5zaWduZWQgaW50KXByaXYtPnJlZ1s1XSwgKHVuc2lnbmVkIGludClwcml2LT5yZWdbNl0pOworI2VuZGlmCisJCS8qIGlmIG5BY2sgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBhbmQgd2UgaGF2ZSBhbiBpbnRlcnJ1cHQsIGNhbGwgdGhlIGludGVycnVwdCBwcm9jZWR1cmUgKi8KKwkJaWYgKHByaXYtPnJlZ1syXSAmIHByaXYtPnJlZ1sxXSAmIDB4MTApCisJCQlwYXJwb3J0X2dlbmVyaWNfaXJxKDAsIHBwLCBOVUxMKTsKKwkJcmV0ID0gMDsKKwl9CisJaWYgKHZhbCkKKwkJKnZhbCA9IHByaXYtPnJlZ1socmVnID49IDkpID8gMCA6IHJlZ2luZGV4W3JlZ11dOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0XzEyODRfcmVnaXN0ZXIoc3RydWN0IHBhcnBvcnQgKnBwLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJaW50IHJldDsKKworCWlmICghdXNiZGV2KQorCQlyZXR1cm4gLTE7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwwKSwgNCwgMHg0MCwgKCgodW5zaWduZWQgaW50KXJlZykgPDwgOCkgfCB2YWwsIDAsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogc2V0XzEyODRfcmVnaXN0ZXIoJXUsMHglMDJ4KSBmYWlsZWQsIHN0YXR1cyAweCV4XG4iLCAKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcmVnLCAodW5zaWduZWQgaW50KXZhbCwgcmV0KTsKKwl9IGVsc2UgeworI2lmIDAKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzczcyMDogc2V0XzEyODRfcmVnaXN0ZXIoJXUsMHglMDJ4KVxuIiwgCisJCSAgICAgICAodW5zaWduZWQgaW50KXJlZywgKHVuc2lnbmVkIGludCl2YWwpOworI2VuZGlmCisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBFQ1IgbW9kZXMgKi8KKyNkZWZpbmUgRUNSX1NQUCAwMAorI2RlZmluZSBFQ1JfUFMyIDAxCisjZGVmaW5lIEVDUl9QUEYgMDIKKyNkZWZpbmUgRUNSX0VDUCAwMworI2RlZmluZSBFQ1JfRVBQIDA0CisKKy8qIFNhZmVseSBjaGFuZ2UgdGhlIG1vZGUgYml0cyBpbiB0aGUgRUNSICovCitzdGF0aWMgaW50IGNoYW5nZV9tb2RlKHN0cnVjdCBwYXJwb3J0ICpwcCwgaW50IG0pCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCWludCBtb2RlOworCisJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCA2LCBOVUxMKSkKKwkJcmV0dXJuIC1FSU87CisJLyogQml0cyA8Nzo1PiBjb250YWluIHRoZSBtb2RlLiAqLworCW1vZGUgPSAocHJpdi0+cmVnWzJdID4+IDUpICYgMHg3OworCWlmIChtb2RlID09IG0pCisJCXJldHVybiAwOworCS8qIFdlIGhhdmUgdG8gZ28gdGhyb3VnaCBtb2RlIDAwMCBvciAwMDEgKi8KKwlpZiAobW9kZSA+IEVDUl9QUzIgJiYgbSA+IEVDUl9QUzIpCisJCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX1BTMikpCisJCQlyZXR1cm4gLUVJTzsKKworCWlmIChtIDw9IEVDUl9QUzIgJiYgIShwcml2LT5yZWdbMV0gJiAweDIwKSkgeworCQkvKiBUaGlzIG1vZGUgcmVzZXRzIHRoZSBGSUZPLCBzbyB3ZSBtYXkKKwkJICogaGF2ZSB0byB3YWl0IGZvciBpdCB0byBkcmFpbiBmaXJzdC4gKi8KKwkJdW5zaWduZWQgbG9uZyBleHBpcmUgPSBqaWZmaWVzICsgcHAtPnBoeXNwb3J0LT5jYWQtPnRpbWVvdXQ7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIEVDUl9QUEY6IC8qIFBhcmFsbGVsIFBvcnQgRklGTyBtb2RlICovCisJCWNhc2UgRUNSX0VDUDogLyogRUNQIFBhcmFsbGVsIFBvcnQgbW9kZSAqLworCQkJLyogUG9sbCBzbG93bHkuICovCisJCQlmb3IgKDs7KSB7CisJCQkJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCA2LCBOVUxMKSkKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJaWYgKHByaXYtPnJlZ1syXSAmIDB4MDEpCisJCQkJCWJyZWFrOworCQkJCWlmICh0aW1lX2FmdGVyX2VxIChqaWZmaWVzLCBleHBpcmUpKQorCQkJCQkvKiBUaGUgRklGTyBpcyBzdHVjay4gKi8KKwkJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLyogU2V0IHRoZSBtb2RlLiAqLworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgNiwgbSA8PCA1KSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDbGVhciBUSU1FT1VUIEJJVCBpbiBFUFAgTU9ERQorICovCitzdGF0aWMgaW50IGNsZWFyX2VwcF90aW1lb3V0KHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXQ7CisKKwlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDEsICZzdGF0KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIHN0YXQgJiAxOworfQorCisvKgorICogQWNjZXNzIGZ1bmN0aW9ucy4KKyAqLworI2lmIDAKK3N0YXRpYyBpbnQgdXNzNzIwX2lycShpbnQgdXNic3RhdHVzLCB2b2lkICpidWZmZXIsIGludCBsZW4sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGFycG9ydCAqcHAgPSAoc3RydWN0IHBhcnBvcnQgKilkZXZfaWQ7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKworCWlmICh1c2JzdGF0dXMgIT0gMCB8fCBsZW4gPCA0IHx8ICFidWZmZXIpCisJCXJldHVybiAxOworCW1lbWNweShwcml2LT5yZWcsIGJ1ZmZlciwgNCk7CisJLyogaWYgbkFjayBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFuZCB3ZSBoYXZlIGFuIGludGVycnVwdCwgY2FsbCB0aGUgaW50ZXJydXB0IHByb2NlZHVyZSAqLworCWlmIChwcml2LT5yZWdbMl0gJiBwcml2LT5yZWdbMV0gJiAweDEwKQorCQlwYXJwb3J0X2dlbmVyaWNfaXJxKDAsIHBwLCBOVUxMKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF93cml0ZV9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwcCwgdW5zaWduZWQgY2hhciBkKQoreworCXNldF8xMjg0X3JlZ2lzdGVyKHBwLCAwLCBkKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGFycG9ydF91c3M3MjBfcmVhZF9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJldDsKKworCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMCwgJnJldCkpCisJCXJldHVybiAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX3dyaXRlX2NvbnRyb2woc3RydWN0IHBhcnBvcnQgKnBwLCB1bnNpZ25lZCBjaGFyIGQpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKworCWQgPSAoZCAmIDB4ZikgfCAocHJpdi0+cmVnWzFdICYgMHhmMCk7CisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBkKSkKKwkJcmV0dXJuOworCXByaXYtPnJlZ1sxXSA9IGQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcnBvcnRfdXNzNzIwX3JlYWRfY29udHJvbChzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwlyZXR1cm4gcHJpdi0+cmVnWzFdICYgMHhmOyAvKiBVc2Ugc29mdCBjb3B5ICovCit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcnBvcnRfdXNzNzIwX2Zyb2JfY29udHJvbChzdHJ1Y3QgcGFycG9ydCAqcHAsIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciB2YWwpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwl1bnNpZ25lZCBjaGFyIGQ7CisKKwltYXNrICY9IDB4MGY7CisJdmFsICY9IDB4MGY7CisJZCA9IChwcml2LT5yZWdbMV0gJiAofm1hc2spKSBeIHZhbDsKKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIGQpKQorCQlyZXR1cm4gMDsKKwlwcml2LT5yZWdbMV0gPSBkOworCXJldHVybiBkICYgMHhmOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBwYXJwb3J0X3VzczcyMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJdW5zaWduZWQgY2hhciByZXQ7CisKKwlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDEsICZyZXQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0ICYgMHhmODsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfZGlzYWJsZV9pcnEoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJdW5zaWduZWQgY2hhciBkOworCisJZCA9IHByaXYtPnJlZ1sxXSAmIH4weDEwOworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgZCkpCisJCXJldHVybjsKKwlwcml2LT5yZWdbMV0gPSBkOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9lbmFibGVfaXJxKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXVuc2lnbmVkIGNoYXIgZDsKKworCWQgPSBwcml2LT5yZWdbMV0gfCAweDEwOworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgZCkpCisJCXJldHVybjsKKwlwcml2LT5yZWdbMV0gPSBkOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9kYXRhX2ZvcndhcmQgKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXVuc2lnbmVkIGNoYXIgZDsKKworCWQgPSBwcml2LT5yZWdbMV0gJiB+MHgyMDsKKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIGQpKQorCQlyZXR1cm47CisJcHJpdi0+cmVnWzFdID0gZDsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfZGF0YV9yZXZlcnNlIChzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwl1bnNpZ25lZCBjaGFyIGQ7CisKKwlkID0gcHJpdi0+cmVnWzFdIHwgMHgyMDsKKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIGQpKQorCQlyZXR1cm47CisJcHJpdi0+cmVnWzFdID0gZDsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfaW5pdF9zdGF0ZShzdHJ1Y3QgcGFyZGV2aWNlICpkZXYsIHN0cnVjdCBwYXJwb3J0X3N0YXRlICpzKQoreworCXMtPnUucGMuY3RyID0gMHhjIHwgKGRldi0+aXJxX2Z1bmMgPyAweDEwIDogMHgwKTsKKwlzLT51LnBjLmVjciA9IDB4MjQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX3NhdmVfc3RhdGUoc3RydWN0IHBhcnBvcnQgKnBwLCBzdHJ1Y3QgcGFycG9ydF9zdGF0ZSAqcykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCisJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBOVUxMKSkKKwkJcmV0dXJuOworCXMtPnUucGMuY3RyID0gcHJpdi0+cmVnWzFdOworCXMtPnUucGMuZWNyID0gcHJpdi0+cmVnWzJdOworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwYXJwb3J0ICpwcCwgc3RydWN0IHBhcnBvcnRfc3RhdGUgKnMpCit7CisJc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIHMtPnUucGMuY3RyKTsKKwlzZXRfMTI4NF9yZWdpc3RlcihwcCwgNiwgcy0+dS5wYy5lY3IpOworCWdldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBOVUxMKTsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lcHBfcmVhZF9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwcCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3RoLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwlzaXplX3QgZ290ID0gMDsKKworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VQUCkpCisJCXJldHVybiAwOworCWZvciAoOyBnb3QgPCBsZW5ndGg7IGdvdCsrKSB7CisJCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgNCwgKGNoYXIgKilidWYpKQorCQkJYnJlYWs7CisJCWJ1ZisrOworCQlpZiAocHJpdi0+cmVnWzBdICYgMHgwMSkgeworCQkJY2xlYXJfZXBwX3RpbWVvdXQocHApOworCQkJYnJlYWs7CisJCX0KKwl9CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiBnb3Q7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZXBwX3dyaXRlX2RhdGEoc3RydWN0IHBhcnBvcnQgKnBwLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncykKK3sKKyNpZiAwCisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwlzaXplX3Qgd3JpdHRlbiA9IDA7CisKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FUFApKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgd3JpdHRlbiA8IGxlbmd0aDsgd3JpdHRlbisrKSB7CisJCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgNCwgKGNoYXIgKilidWYpKQorCQkJYnJlYWs7CisJCSgoY2hhciopYnVmKSsrOworCQlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDEsIE5VTEwpKQorCQkJYnJlYWs7CisJCWlmIChwcml2LT5yZWdbMF0gJiAweDAxKSB7CisJCQljbGVhcl9lcHBfdGltZW91dChwcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHdyaXR0ZW47CisjZWxzZQorCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCWludCBybGVuOworCWludCBpOworCisJaWYgKCF1c2JkZXYpCisJCXJldHVybiAwOworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VQUCkpCisJCXJldHVybiAwOworCWkgPSB1c2JfYnVsa19tc2codXNiZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiZGV2LCAxKSwgKHZvaWQgKilidWYsIGxlbmd0aCwgJnJsZW4sIDIwMDAwKTsKKwlpZiAoaSkKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c3M3MjA6IHNlbmRidWxrIGVwIDEgYnVmICVwIGxlbiAlWnUgcmxlbiAldVxuIiwgYnVmLCBsZW5ndGgsIHJsZW4pOworCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gcmxlbjsKKyNlbmRpZgorfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VwcF9yZWFkX2FkZHIoc3RydWN0IHBhcnBvcnQgKnBwLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXNpemVfdCBnb3QgPSAwOworCisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRVBQKSkKKwkJcmV0dXJuIDA7CisJZm9yICg7IGdvdCA8IGxlbmd0aDsgZ290KyspIHsKKwkJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAzLCAoY2hhciAqKWJ1ZikpCisJCQlicmVhazsKKwkJYnVmKys7CisJCWlmIChwcml2LT5yZWdbMF0gJiAweDAxKSB7CisJCQljbGVhcl9lcHBfdGltZW91dChwcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIGdvdDsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lcHBfd3JpdGVfYWRkcihzdHJ1Y3QgcGFycG9ydCAqcHAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJc2l6ZV90IHdyaXR0ZW4gPSAwOworCisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRVBQKSkKKwkJcmV0dXJuIDA7CisJZm9yICg7IHdyaXR0ZW4gPCBsZW5ndGg7IHdyaXR0ZW4rKykgeworCQlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDMsICooY2hhciAqKWJ1ZikpCisJCQlicmVhazsKKwkJYnVmKys7CisJCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMSwgTlVMTCkpCisJCQlicmVhazsKKwkJaWYgKHByaXYtPnJlZ1swXSAmIDB4MDEpIHsKKwkJCWNsZWFyX2VwcF90aW1lb3V0KHBwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gd3JpdHRlbjsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lY3Bfd3JpdGVfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcHAsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCWludCBybGVuOworCWludCBpOworCisJaWYgKCF1c2JkZXYpCisJCXJldHVybiAwOworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VDUCkpCisJCXJldHVybiAwOworCWkgPSB1c2JfYnVsa19tc2codXNiZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiZGV2LCAxKSwgKHZvaWQgKilidWZmZXIsIGxlbiwgJnJsZW4sIDIwMDAwKTsKKwlpZiAoaSkKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c3M3MjA6IHNlbmRidWxrIGVwIDEgYnVmICVwIGxlbiAlWnUgcmxlbiAldVxuIiwgYnVmZmVyLCBsZW4sIHJsZW4pOworCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gcmxlbjsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lY3BfcmVhZF9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwcCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJaW50IHJsZW47CisJaW50IGk7CisKKwlpZiAoIXVzYmRldikKKwkJcmV0dXJuIDA7CisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRUNQKSkKKwkJcmV0dXJuIDA7CisJaSA9IHVzYl9idWxrX21zZyh1c2JkZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JkZXYsIDIpLCBidWZmZXIsIGxlbiwgJnJsZW4sIDIwMDAwKTsKKwlpZiAoaSkKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c3M3MjA6IHJlY3ZidWxrIGVwIDIgYnVmICVwIGxlbiAlWnUgcmxlbiAldVxuIiwgYnVmZmVyLCBsZW4sIHJsZW4pOworCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gcmxlbjsKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lY3Bfd3JpdGVfYWRkcihzdHJ1Y3QgcGFycG9ydCAqcHAsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQoreworCXNpemVfdCB3cml0dGVuID0gMDsKKworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VDUCkpCisJCXJldHVybiAwOworCWZvciAoOyB3cml0dGVuIDwgbGVuOyB3cml0dGVuKyspIHsKKwkJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCA1LCAqKGNoYXIgKilidWZmZXIpKQorCQkJYnJlYWs7CisJCWJ1ZmZlcisrOworCX0KKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHdyaXR0ZW47Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfd3JpdGVfY29tcGF0KHN0cnVjdCBwYXJwb3J0ICpwcCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJaW50IHJsZW47CisJaW50IGk7CisKKwlpZiAoIXVzYmRldikKKwkJcmV0dXJuIDA7CisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfUFBGKSkKKwkJcmV0dXJuIDA7CisJaSA9IHVzYl9idWxrX21zZyh1c2JkZXYsIHVzYl9zbmRidWxrcGlwZSh1c2JkZXYsIDEpLCAodm9pZCAqKWJ1ZmZlciwgbGVuLCAmcmxlbiwgMjAwMDApOworCWlmIChpKQorCQlwcmludGsoS0VSTl9FUlIgInVzczcyMDogc2VuZGJ1bGsgZXAgMSBidWYgJXAgbGVuICVadSBybGVuICV1XG4iLCBidWZmZXIsIGxlbiwgcmxlbik7CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiBybGVuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgcGFycG9ydF91c3M3MjBfb3BzID0gCit7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS53cml0ZV9kYXRhID0JCXBhcnBvcnRfdXNzNzIwX3dyaXRlX2RhdGEsCisJLnJlYWRfZGF0YSA9CQlwYXJwb3J0X3VzczcyMF9yZWFkX2RhdGEsCisKKwkud3JpdGVfY29udHJvbCA9CXBhcnBvcnRfdXNzNzIwX3dyaXRlX2NvbnRyb2wsCisJLnJlYWRfY29udHJvbCA9CQlwYXJwb3J0X3VzczcyMF9yZWFkX2NvbnRyb2wsCisJLmZyb2JfY29udHJvbCA9CQlwYXJwb3J0X3VzczcyMF9mcm9iX2NvbnRyb2wsCisKKwkucmVhZF9zdGF0dXMgPQkJcGFycG9ydF91c3M3MjBfcmVhZF9zdGF0dXMsCisKKwkuZW5hYmxlX2lycSA9CQlwYXJwb3J0X3VzczcyMF9lbmFibGVfaXJxLAorCS5kaXNhYmxlX2lycSA9CQlwYXJwb3J0X3VzczcyMF9kaXNhYmxlX2lycSwKKworCS5kYXRhX2ZvcndhcmQgPQkJcGFycG9ydF91c3M3MjBfZGF0YV9mb3J3YXJkLAorCS5kYXRhX3JldmVyc2UgPQkJcGFycG9ydF91c3M3MjBfZGF0YV9yZXZlcnNlLAorCisJLmluaXRfc3RhdGUgPQkJcGFycG9ydF91c3M3MjBfaW5pdF9zdGF0ZSwKKwkuc2F2ZV9zdGF0ZSA9CQlwYXJwb3J0X3VzczcyMF9zYXZlX3N0YXRlLAorCS5yZXN0b3JlX3N0YXRlID0JcGFycG9ydF91c3M3MjBfcmVzdG9yZV9zdGF0ZSwKKworCS5lcHBfd3JpdGVfZGF0YSA9CXBhcnBvcnRfdXNzNzIwX2VwcF93cml0ZV9kYXRhLAorCS5lcHBfcmVhZF9kYXRhID0JcGFycG9ydF91c3M3MjBfZXBwX3JlYWRfZGF0YSwKKwkuZXBwX3dyaXRlX2FkZHIgPQlwYXJwb3J0X3VzczcyMF9lcHBfd3JpdGVfYWRkciwKKwkuZXBwX3JlYWRfYWRkciA9CXBhcnBvcnRfdXNzNzIwX2VwcF9yZWFkX2FkZHIsCisKKwkuZWNwX3dyaXRlX2RhdGEgPQlwYXJwb3J0X3VzczcyMF9lY3Bfd3JpdGVfZGF0YSwKKwkuZWNwX3JlYWRfZGF0YSA9CXBhcnBvcnRfdXNzNzIwX2VjcF9yZWFkX2RhdGEsCisJLmVjcF93cml0ZV9hZGRyID0JcGFycG9ydF91c3M3MjBfZWNwX3dyaXRlX2FkZHIsCisKKwkuY29tcGF0X3dyaXRlX2RhdGEgPQlwYXJwb3J0X3VzczcyMF93cml0ZV9jb21wYXQsCisJLm5pYmJsZV9yZWFkX2RhdGEgPQlwYXJwb3J0X2llZWUxMjg0X3JlYWRfbmliYmxlLAorCS5ieXRlX3JlYWRfZGF0YSA9CXBhcnBvcnRfaWVlZTEyODRfcmVhZF9ieXRlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgdXNzNzIwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50OworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2OworCXN0cnVjdCBwYXJwb3J0ICpwcDsKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IHByb2JlOiB2ZW5kb3IgaWQgMHgleCwgZGV2aWNlIGlkIDB4JXhcbiIsCisJICAgICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJICAgICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCS8qIG91ciBrbm93biBpbnRlcmZhY2VzIGhhdmUgMyBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwlpZiAoaW50Zi0+bnVtX2FsdHNldHRpbmcgIT0gMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpID0gdXNiX3NldF9pbnRlcmZhY2UodXNiZGV2LCBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDIpOworCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IHNldCBpbnRlZmFjZSByZXN1bHQgJWRcbiIsIGkpOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwkvKgorCSAqIEFsbG9jYXRlIHBhcnBvcnQgaW50ZXJmYWNlIAorCSAqLworCXByaW50ayhLRVJOX0lORk8gInVzczcyMDogKEMpIDE5OTkgYnkgVGhvbWFzIFNhaWxlciwgPHNhaWxlckBpZmUuZWUuZXRoei5jaD5cbiIpOworCisJaWYgKCEocHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIShwcCA9IHBhcnBvcnRfcmVnaXN0ZXJfcG9ydCgwLCBQQVJQT1JUX0lSUV9OT05FLCBQQVJQT1JUX0RNQV9OT05FLCAmcGFycG9ydF91c3M3MjBfb3BzKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiLXVzczcyMDogY291bGQgbm90IHJlZ2lzdGVyIHBhcnBvcnRcbiIpOworCQlnb3RvIHByb2JlX2Fib3J0OworCX0KKworCXBwLT5wcml2YXRlX2RhdGEgPSBwcml2OworCXByaXYtPnVzYmRldiA9IHVzYmRldjsKKwlwcC0+bW9kZXMgPSBQQVJQT1JUX01PREVfUENTUFAgfCBQQVJQT1JUX01PREVfVFJJU1RBVEUgfCBQQVJQT1JUX01PREVfRVBQIHwgUEFSUE9SVF9NT0RFX0VDUCB8IFBBUlBPUlRfTU9ERV9DT01QQVQ7CisKKwkvKiBzZXQgdGhlIFVTUzcyMCBjb250cm9sIHJlZ2lzdGVyIHRvIG1hbnVhbCBtb2RlLCBubyBFQ1AgY29tcHJlc3Npb24sIGVuYWJsZSBhbGwgaW50cyAqLworCXNldF8xMjg0X3JlZ2lzdGVyKHBwLCA3LCAweDAwKTsKKwlzZXRfMTI4NF9yZWdpc3RlcihwcCwgNiwgMHgzMCk7ICAvKiBQUy8yIG1vZGUgKi8KKwlzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgMHgwYyk7CisJLyogZGVidWdnaW5nICovCisJZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDAsIE5VTEwpOworCXByaW50aygidXNzNzIwOiByZWc6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJICAgICAgIHByaXYtPnJlZ1swXSwgcHJpdi0+cmVnWzFdLCBwcml2LT5yZWdbMl0sIHByaXYtPnJlZ1szXSwgcHJpdi0+cmVnWzRdLCBwcml2LT5yZWdbNV0sIHByaXYtPnJlZ1s2XSk7CisKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzJdOworCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IGVwYWRkciAlZCBpbnRlcnZhbCAlZFxuIiwgZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywgZW5kcG9pbnQtPmRlc2MuYkludGVydmFsKTsKKyNpZiAwCisJcHJpdi0+aXJxcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlpID0gdXNiX3JlcXVlc3RfaXJxKHVzYmRldiwgcHJpdi0+aXJxcGlwZSwKKwkJCQkgIHVzczcyMF9pcnEsIGVuZHBvaW50LT5iSW50ZXJ2YWwsCisJCQkJICBwcCwgJnByaXYtPmlycWhhbmRsZSk7CisJaWYgKGkpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInVzYi11c3M3MjA6IHVzYl9yZXF1ZXN0X2lycSBmYWlsZWQgKDB4JXgpXG4iLCBpKTsKKwkJZ290byBwcm9iZV9hYm9ydF9wb3J0OworCX0KKyNlbmRpZgorCXBhcnBvcnRfYW5ub3VuY2VfcG9ydChwcCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBwcCk7CisJcmV0dXJuIDA7CisKKyNpZiAwCitwcm9iZV9hYm9ydF9wb3J0OgorCXBhcnBvcnRfcHV0X3BvcnQocHApOworI2VuZGlmCitwcm9iZV9hYm9ydDoKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgdXNzNzIwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHBhcnBvcnQgKnBwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXY7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlpZiAocHApIHsKKwkJcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJCXBhcnBvcnRfcmVtb3ZlX3BvcnQocHApOworI2lmIDAKKwkJdXNiX3JlbGVhc2VfaXJxKHVzYmRldiwgcHJpdi0+aXJxaGFuZGxlLCBwcml2LT5pcnFwaXBlKTsKKyNlbmRpZgorCQlwcml2LT51c2JkZXYgPSBOVUxMOworCQlwYXJwb3J0X3B1dF9wb3J0KHBwKTsKKwkJa2ZyZWUocHJpdik7CisJfQorfQorCisvKiB0YWJsZSBvZiBjYWJsZXMgdGhhdCB3b3JrIHRocm91Z2ggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c3M3MjBfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDQ3ZSwgMHgxMDAxKSB9LAorCXsgVVNCX0RFVklDRSgweDA1NTcsIDB4MjAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzI5LCAweDEyODQpIH0sCisJeyBVU0JfREVWSUNFKDB4MTI5MywgMHgwMDAyKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzczcyMF90YWJsZSk7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzczcyMF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzczcyMCIsCisJLnByb2JlID0JdXNzNzIwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNzNzIwX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNzNzIwX3RhYmxlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgdXNzNzIwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNzNzIwX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzczcyMF9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzczcyMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c3M3MjBfaW5pdCk7Cittb2R1bGVfZXhpdCh1c3M3MjBfY2xlYW51cCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTYxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbW9uL0tjb25maWcKQEAgLTAsMCArMSwyMiBAQAorIworIyBVU0IgTW9uaXRvciBjb25maWd1cmF0aW9uCisjCisKKyMgSW4gbm9ybWFsIGxpZmUsIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBoYXZlIHVzYm1vbiBhcyBhIG1vZHVsZSwgYW5kIGluIGZhY3QKKyMgaXQgaXMgaGFybWZ1bCwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gYXV0b2xvYWQgdGhlIG1vZHVsZS4KKyMgVGhlICdtJyBvcHRpb24gaXMgYWxsb3dlZCBmb3IgaGFja2VycyB3aG8gZGVidWcgdGhlIHVzYm1vbiBpdHNlbGYsCisjIGFuZCBmb3IgdGhvc2Ugd2hvIGhhdmUgdXNiY29yZSBhcyBhIG1vZHVsZS4KK2NvbmZpZyBVU0JfTU9OCisJdHJpc3RhdGUgIlVTQiBNb25pdG9yIgorCWRlcGVuZHMgb24gVVNCCisJZGVmYXVsdCB5CisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIGEgY29tcG9uZW50IHdoaWNoIGNhcHR1cmVzIHRoZSBVU0IgdHJhZmZpYworCSAgYmV0d2VlbiBwZXJpcGhlcmFsLXNwZWNpZmljIGRyaXZlcnMgYW5kIEhDIGRyaXZlcnMgd2lsbCBiZSBidWlsdC4KKwkgIFRoZSBVU0JfTU9OIGlzIHNpbWlsYXIgaW4gc3Bpcml0IGFuZCBtYXkgYmUgY29tcGF0aWJsZSB3aXRoIERhdmUKKwkgIEhhcmRpbmcncyBVU0JNb24uCisKKwkgIFRoaXMgaXMgc29tZXdoYXQgZXhwZXJpbWVudGFsIGF0IHRoaXMgdGltZSwgYnV0IGl0IHNob3VsZCBiZSBzYWZlLAorCSAgYXMgbG9uZyBhcyB5b3UgYXJlbid0IGJ1aWxkaW5nIHRoaXMgYXMgYSBtb2R1bGUgYW5kIHRoZW4gcmVtb3ZpbmcgaXQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuIERvIG5vdCBzYXkgTS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21vbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZmOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgVVNCIENvcmUgZmlsZXMgYW5kIGZpbGVzeXN0ZW0KKyMKKwordXNibW9uLW9ianMJOj0gbW9uX21haW4ubyBtb25fc3RhdC5vIG1vbl90ZXh0Lm8KKworb2JqLSQoQ09ORklHX1VTQl9NT04pCSs9IHVzYm1vbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOWQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIFRoZSBVU0IgTW9uaXRvciwgaW5zcGlyZWQgYnkgRGF2ZSBIYXJkaW5nJ3MgVVNCTW9uLgorICoKKyAqIG1vbl9tYWluLmM6IE1haW4gZmlsZSwgbW9kdWxlIGluaXRpYXRpb24gYW5kIGV4aXQsIHJlZ2lzdHJhdGlvbnMsIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlICJ1c2JfbW9uLmgiCisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKworc3RhdGljIHZvaWQgbW9uX3N1Ym1pdChzdHJ1Y3QgdXNiX2J1cyAqdWJ1cywgc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIG1vbl9jb21wbGV0ZShzdHJ1Y3QgdXNiX2J1cyAqdWJ1cywgc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIG1vbl9zdG9wKHN0cnVjdCBtb25fYnVzICptYnVzKTsKK3N0YXRpYyB2b2lkIG1vbl9kaXNzb2x2ZShzdHJ1Y3QgbW9uX2J1cyAqbWJ1cywgc3RydWN0IHVzYl9idXMgKnVidXMpOworc3RhdGljIHZvaWQgbW9uX2J1c19kcm9wKHN0cnVjdCBrcmVmICpyKTsKK3N0YXRpYyB2b2lkIG1vbl9idXNfaW5pdChzdHJ1Y3QgZGVudHJ5ICptb25kaXIsIHN0cnVjdCB1c2JfYnVzICp1YnVzKTsKKworREVDTEFSRV9NVVRFWChtb25fbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptb25fZGlyOwkJLyogL2RiZy91c2Jtb24gKi8KK3N0YXRpYyBMSVNUX0hFQUQobW9uX2J1c2VzKTsJCS8qIEFsbCBidXNlcyB3ZSBrbm93OiBzdHJ1Y3QgbW9uX2J1cyAqLworCisvKgorICogTGluayBhIHJlYWRlciBpbnRvIHRoZSBidXMuCisgKgorICogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIG1vbl9sb2NrIHRha2VuIGJlY2F1c2Ugb2YgbWJ1cy0+cmVmLgorICovCit2b2lkIG1vbl9yZWFkZXJfYWRkKHN0cnVjdCBtb25fYnVzICptYnVzLCBzdHJ1Y3QgbW9uX3JlYWRlciAqcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2JfYnVzICp1YnVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAobWJ1cy0+bnJlYWRlcnMgPT0gMCkgeworCQl1YnVzID0gbWJ1cy0+dV9idXM7CisJCWlmICh1YnVzLT5tb25pdG9yZWQpIHsKKwkJCS8qCisJCQkgKiBTb21ldGhpbmcgaXMgcmVhbGx5IGJyb2tlbiwgcmVmdXNlIHRvIGdvIG9uIGFuZAorCQkJICogcG9zc2libHkgY29ycnVwdCBvcHMgcG9pbnRlcnMgb3Igd29yc2UuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0VSUiBUQUcgIjogYnVzICVkIGlzIGFscmVhZHkgbW9uaXRvcmVkXG4iLAorCQkJICAgIHVidXMtPmJ1c251bSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwkJdWJ1cy0+bW9uaXRvcmVkID0gMTsKKwl9CisJbWJ1cy0+bnJlYWRlcnMrKzsKKwlsaXN0X2FkZF90YWlsKCZyLT5yX2xpbmssICZtYnVzLT5yX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKworCWtyZWZfZ2V0KCZtYnVzLT5yZWYpOworfQorCisvKgorICogVW5saW5rIHJlYWRlciBmcm9tIHRoZSBidXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2l0aCBtb25fbG9jayB0YWtlbiwgc28gd2UgY2FuIGRlY3JlbWVudCBtYnVzLT5yZWYuCisgKi8KK3ZvaWQgbW9uX3JlYWRlcl9kZWwoc3RydWN0IG1vbl9idXMgKm1idXMsIHN0cnVjdCBtb25fcmVhZGVyICpyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZyLT5yX2xpbmspOworCS0tbWJ1cy0+bnJlYWRlcnM7CisJaWYgKG1idXMtPm5yZWFkZXJzID09IDApCisJCW1vbl9zdG9wKG1idXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKworCWtyZWZfcHV0KCZtYnVzLT5yZWYsIG1vbl9idXNfZHJvcCk7Cit9CisKKy8qCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9zdWJtaXQoc3RydWN0IHVzYl9idXMgKnVidXMsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgbW9uX3JlYWRlciAqcjsKKworCW1idXMgPSB1YnVzLT5tb25fYnVzOworCWlmIChtYnVzID09IE5VTEwpCisJCWdvdG8gb3V0X3VubG9ja2VkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAobWJ1cy0+bnJlYWRlcnMgPT0gMCkKKwkJZ290byBvdXRfbG9ja2VkOworCisJbGlzdF9mb3JfZWFjaCAocG9zLCAmbWJ1cy0+cl9saXN0KSB7CisJCXIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG1vbl9yZWFkZXIsIHJfbGluayk7CisJCXItPnJuZl9zdWJtaXQoci0+cl9kYXRhLCB1cmIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm47CisKK291dF9sb2NrZWQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworb3V0X3VubG9ja2VkOgorCXJldHVybjsKK30KKworLyoKKyAqLworc3RhdGljIHZvaWQgbW9uX3N1Ym1pdF9lcnJvcihzdHJ1Y3QgdXNiX2J1cyAqdWJ1cywgc3RydWN0IHVyYiAqdXJiLCBpbnQgZXJyKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzOworCisJbWJ1cyA9IHVidXMtPm1vbl9idXM7CisJaWYgKG1idXMgPT0gTlVMTCkKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisKKwkvKgorCSAqIFhYWCBDYXB0dXJlIHRoZSBlcnJvciBjb2RlIGFuZCB0aGUgJ0UnIGV2ZW50LgorCSAqLworCisJcmV0dXJuOworCitvdXRfdW5sb2NrZWQ6CisJcmV0dXJuOworfQorCisvKgorICovCitzdGF0aWMgdm9pZCBtb25fY29tcGxldGUoc3RydWN0IHVzYl9idXMgKnVidXMsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgbW9uX3JlYWRlciAqcjsKKworCW1idXMgPSB1YnVzLT5tb25fYnVzOworCWlmIChtYnVzID09IE5VTEwpIHsKKwkJLyoKKwkJICogVGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKwkJICogQXQgdGhpcyBwb2ludCB3ZSBkbyBub3QgZXZlbiBrbm93IHRoZSBidXMgbnVtYmVyLi4uCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgVEFHICI6IE51bGwgbW9uIGJ1cyBpbiBVUkIsIHBpcGUgMHgleFxuIiwKKwkJICAgIHVyYi0+cGlwZSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2ggKHBvcywgJm1idXMtPnJfbGlzdCkgeworCQlyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBtb25fcmVhZGVyLCByX2xpbmspOworCQlyLT5ybmZfY29tcGxldGUoci0+cl9kYXRhLCB1cmIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIGludCAoKnVubGlua191cmIpIChzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOyAqLworCisvKgorICogU3RvcCBtb25pdG9yaW5nLgorICogT2J2aW91c2x5IHRoaXMgbXVzdCBiZSB3ZWxsIGxvY2tlZCwgc28gbm8gbmVlZCB0byBwbGF5IHdpdGggbWIncy4KKyAqLworc3RhdGljIHZvaWQgbW9uX3N0b3Aoc3RydWN0IG1vbl9idXMgKm1idXMpCit7CisJc3RydWN0IHVzYl9idXMgKnVidXMgPSBtYnVzLT51X2J1czsKKworCS8qCisJICogQSBzdG9wIGNhbiBiZSBjYWxsZWQgZm9yIGEgZGlzc29sdmVkIG1vbl9idXMgaW4gY2FzZSBvZgorCSAqIGEgcmVhZGVyIHN0YXlpbmcgYWNyb3NzIGFuIHJtbW9kIGZvb19oY2QuCisJICovCisJaWYgKHVidXMgIT0gTlVMTCkgeworCQl1YnVzLT5tb25pdG9yZWQgPSAwOworCQltYigpOworCX0KK30KKworLyoKKyAqIEFkZCBhIFVTQiBidXMgKHVzdWFsbHkgYnkgYSBtb2Rwcm9iZSBmb28taGNkKQorICoKKyAqIFRoaXMgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yIGNvZGUgYmVjYXVzZSB0aGUgY29yZSBjYW5ub3QgY2FyZSBsZXNzCisgKiBpZiBtb25pdG9yaW5nIGlzIG5vdCBlc3RhYmxpc2hlZC4KKyAqLworc3RhdGljIHZvaWQgbW9uX2J1c19hZGQoc3RydWN0IHVzYl9idXMgKnVidXMpCit7CisJbW9uX2J1c19pbml0KG1vbl9kaXIsIHVidXMpOworfQorCisvKgorICogUmVtb3ZlIGEgVVNCIGJ1cyAoZWl0aGVyIGZyb20gcm1tb2QgZm9vLWhjZCBvciBmcm9tIGEgaG90LXJlbW92ZSBldmVudCkuCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9idXNfcmVtb3ZlKHN0cnVjdCB1c2JfYnVzICp1YnVzKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzID0gdWJ1cy0+bW9uX2J1czsKKworCWRvd24oJm1vbl9sb2NrKTsKKwlsaXN0X2RlbCgmbWJ1cy0+YnVzX2xpbmspOworCWRlYnVnZnNfcmVtb3ZlKG1idXMtPmRlbnRfdCk7CisJZGVidWdmc19yZW1vdmUobWJ1cy0+ZGVudF9zKTsKKworCW1vbl9kaXNzb2x2ZShtYnVzLCB1YnVzKTsKKwlrcmVmX3B1dCgmbWJ1cy0+cmVmLCBtb25fYnVzX2Ryb3ApOworCXVwKCZtb25fbG9jayk7Cit9CisKKy8qCisgKiBPcHMKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgbW9uX29wc18wID0geworCS51cmJfc3VibWl0ID0JbW9uX3N1Ym1pdCwKKwkudXJiX3N1Ym1pdF9lcnJvciA9IG1vbl9zdWJtaXRfZXJyb3IsCisJLnVyYl9jb21wbGV0ZSA9CW1vbl9jb21wbGV0ZSwKKwkuYnVzX2FkZCA9CW1vbl9idXNfYWRkLAorCS5idXNfcmVtb3ZlID0JbW9uX2J1c19yZW1vdmUsCit9OworCisvKgorICogVGVhciB1c2JfYnVzIGFuZCBtb25fYnVzIGFwYXJ0LgorICovCitzdGF0aWMgdm9pZCBtb25fZGlzc29sdmUoc3RydWN0IG1vbl9idXMgKm1idXMsIHN0cnVjdCB1c2JfYnVzICp1YnVzKQoreworCisJLyoKKwkgKiBOZXZlciBoYXBwZW5zLCBidXQuLi4KKwkgKi8KKwlpZiAodWJ1cy0+bW9uaXRvcmVkKSB7CisJCXByaW50ayhLRVJOX0VSUiBUQUcgIjogYnVzICVkIGlzIGRpc3NvbHZlZCB3aGlsZSBtb25pdG9yZWRcbiIsCisJCSAgICB1YnVzLT5idXNudW0pOworCQl1YnVzLT5tb25pdG9yZWQgPSAwOworCQltYigpOworCX0KKworCXVidXMtPm1vbl9idXMgPSBOVUxMOworCW1idXMtPnVfYnVzID0gTlVMTDsKKwltYigpOworCS8vIHVzYl9idXNfcHV0KHVidXMpOworfQorCisvKgorICovCitzdGF0aWMgdm9pZCBtb25fYnVzX2Ryb3Aoc3RydWN0IGtyZWYgKnIpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXMgPSBjb250YWluZXJfb2Yociwgc3RydWN0IG1vbl9idXMsIHJlZik7CisJa2ZyZWUobWJ1cyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgYnVzIGZvciB1czoKKyAqICAtIGFsbG9jYXRlIG1vbl9idXMKKyAqICAtIHJlZmNvdW50IFVTQiBidXMgc3RydWN0CisgKiAgLSBsaW5rCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9idXNfaW5pdChzdHJ1Y3QgZGVudHJ5ICptb25kaXIsIHN0cnVjdCB1c2JfYnVzICp1YnVzKQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJZW51bSB7IE5BTUVTWiA9IDEwIH07CisJY2hhciBuYW1lW05BTUVTWl07CisJaW50IHJjOworCisJaWYgKChtYnVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1vbl9idXMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJZ290byBlcnJfYWxsb2M7CisJbWVtc2V0KG1idXMsIDAsIHNpemVvZihzdHJ1Y3QgbW9uX2J1cykpOworCWtyZWZfaW5pdCgmbWJ1cy0+cmVmKTsKKwlzcGluX2xvY2tfaW5pdCgmbWJ1cy0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1idXMtPnJfbGlzdCk7CisKKwkvKgorCSAqIFRoaXMgdXNiX2J1c19nZXQgaGVyZSBpcyBzdXBlcmZsdW91cywgYmVjYXVzZSB3ZSByZWNlaXZlCisJICogYSBub3RpZmljYXRpb24gaWYgdXNiX2J1cyBpcyBhYm91dCB0byBiZSByZW1vdmVkLgorCSAqLworCS8vIHVzYl9idXNfZ2V0KHVidXMpOworCW1idXMtPnVfYnVzID0gdWJ1czsKKwl1YnVzLT5tb25fYnVzID0gbWJ1czsKKworCXJjID0gc25wcmludGYobmFtZSwgTkFNRVNaLCAiJWR0IiwgdWJ1cy0+YnVzbnVtKTsKKwlpZiAocmMgPD0gMCB8fCByYyA+PSBOQU1FU1opCisJCWdvdG8gZXJyX3ByaW50X3Q7CisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgMDYwMCwgbW9uZGlyLCBtYnVzLCAmbW9uX2ZvcHNfdGV4dCk7CisJaWYgKGQgPT0gTlVMTCkKKwkJZ290byBlcnJfY3JlYXRlX3Q7CisJbWJ1cy0+ZGVudF90ID0gZDsKKworCXJjID0gc25wcmludGYobmFtZSwgTkFNRVNaLCAiJWRzIiwgdWJ1cy0+YnVzbnVtKTsKKwlpZiAocmMgPD0gMCB8fCByYyA+PSBOQU1FU1opCisJCWdvdG8gZXJyX3ByaW50X3M7CisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgMDYwMCwgbW9uZGlyLCBtYnVzLCAmbW9uX2ZvcHNfc3RhdCk7CisJaWYgKGQgPT0gTlVMTCkKKwkJZ290byBlcnJfY3JlYXRlX3M7CisJbWJ1cy0+ZGVudF9zID0gZDsKKworCWRvd24oJm1vbl9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtYnVzLT5idXNfbGluaywgJm1vbl9idXNlcyk7CisJdXAoJm1vbl9sb2NrKTsKKwlyZXR1cm47CisKK2Vycl9jcmVhdGVfczoKK2Vycl9wcmludF9zOgorCWRlYnVnZnNfcmVtb3ZlKG1idXMtPmRlbnRfdCk7CitlcnJfY3JlYXRlX3Q6CitlcnJfcHJpbnRfdDoKKwlrZnJlZShtYnVzKTsKK2Vycl9hbGxvYzoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpCit7CisJc3RydWN0IHVzYl9idXMgKnVidXM7CisJc3RydWN0IGRlbnRyeSAqbW9uZGlyOworCisJbW9uZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ1c2Jtb24iLCBOVUxMKTsKKwlpZiAoSVNfRVJSKG1vbmRpcikpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFIFRBRyAiOiBkZWJ1Z3MgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAobW9uZGlyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFIFRBRyAiOiB1bmFibGUgdG8gY3JlYXRlIHVzYm1vbiBkaXJlY3RvcnlcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbW9uX2RpciA9IG1vbmRpcjsKKworCWlmICh1c2JfbW9uX3JlZ2lzdGVyKCZtb25fb3BzXzApICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFIFRBRyAiOiB1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgY29yZVxuIik7CisJCWRlYnVnZnNfcmVtb3ZlKG1vbmRpcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvLyBNT0RfSU5DX1VTRV9DT1VOVCh3aGljaF9tb2R1bGU/KTsKKworCWRvd24oJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1YnVzLCAmdXNiX2J1c19saXN0LCBidXNfbGlzdCkgeworCQltb25fYnVzX2luaXQobW9uZGlyLCB1YnVzKTsKKwl9CisJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1vbl9leGl0KHZvaWQpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCXVzYl9tb25fZGVyZWdpc3RlcigpOworCisJZG93bigmbW9uX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmbW9uX2J1c2VzKSkgeworCQlwID0gbW9uX2J1c2VzLm5leHQ7CisJCW1idXMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBtb25fYnVzLCBidXNfbGluayk7CisJCWxpc3RfZGVsKHApOworCisJCWRlYnVnZnNfcmVtb3ZlKG1idXMtPmRlbnRfdCk7CisJCWRlYnVnZnNfcmVtb3ZlKG1idXMtPmRlbnRfcyk7CisKKwkJLyoKKwkJICogVGhpcyBuZXZlciBoYXBwZW5zLCBiZWNhdXNlIHRoZSBvcGVuL2Nsb3NlIHBhdGhzIGluCisJCSAqIGZpbGUgbGV2ZWwgbWFpbnRhaW4gbW9kdWxlIHVzZSBjb3VudGVycyBhbmQgc28gcm1tb2QgZmFpbHMKKwkJICogYmVmb3JlIHJlYWNoaW5nIGhlcmUuIEhvd2V2ZXIsIGJldHRlciBiZSBzYWZlLi4uCisJCSAqLworCQlpZiAobWJ1cy0+bnJlYWRlcnMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBUQUcKKwkJCSAgICAiOiBPdXRzdGFuZGluZyBvcGVucyAoJWQpIG9uIHVzYiVkLCBsZWFraW5nLi4uXG4iLAorCQkJICAgIG1idXMtPm5yZWFkZXJzLCBtYnVzLT51X2J1cy0+YnVzbnVtKTsKKwkJCWF0b21pY19zZXQoJm1idXMtPnJlZi5yZWZjb3VudCwgMik7CS8qIEZvcmNlIGxlYWsgKi8KKwkJfQorCisJCW1vbl9kaXNzb2x2ZShtYnVzLCBtYnVzLT51X2J1cyk7CisJCWtyZWZfcHV0KCZtYnVzLT5yZWYsIG1vbl9idXNfZHJvcCk7CisJfQorCXVwKCZtb25fbG9jayk7CisKKwlkZWJ1Z2ZzX3JlbW92ZShtb25fZGlyKTsKK30KKworbW9kdWxlX2luaXQobW9uX2luaXQpOworbW9kdWxlX2V4aXQobW9uX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX3N0YXQuYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGIxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3N0YXQuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogVGhlIFVTQiBNb25pdG9yLCBpbnNwaXJlZCBieSBEYXZlIEhhcmRpbmcncyBVU0JNb24uCisgKgorICogVGhpcyBpcyB0aGUgJ3MnIG9yICdzdGF0JyByZWFkZXIgd2hpY2ggZGVidWdzIHVzYm1vbiBpdHNlbGYuCisgKiBOb3RlIHRoYXQgdGhpcyBjb2RlIGJsb3dzIHRocm91Z2ggbG9ja3MsIHNvIG1ha2Ugc3VyZSB0aGF0CisgKiAvZGJnL3VzYm1vbi8wcyBpcyB3ZWxsIHByb3RlY3RlZCBmcm9tIG5vbi1yb290IHVzZXJzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInVzYl9tb24uaCIKKworI2RlZmluZSBTVEFUX0JVRl9TSVpFICA4MAorCitzdHJ1Y3Qgc25hcCB7CisJaW50IHNsZW47CisJY2hhciBzdHJbU1RBVF9CVUZfU0laRV07Cit9OworCitzdGF0aWMgaW50IG1vbl9zdGF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJc3RydWN0IHNuYXAgKnNwOworCisJaWYgKChzcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmFwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbWJ1cyA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisKKwlzcC0+c2xlbiA9IHNucHJpbnRmKHNwLT5zdHIsIFNUQVRfQlVGX1NJWkUsCisJICAgICJucmVhZGVycyAlZCB0ZXh0X2xvc3QgJXVcbiIsCisJICAgIG1idXMtPm5yZWFkZXJzLCBtYnVzLT5jbnRfdGV4dF9sb3N0KTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNwOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtb25fc3RhdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc25hcCAqc3AgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJbG9mZl90IHBvcyA9ICpwcG9zOworCWludCBjbnQ7CisKKwlpZiAocG9zIDwgMCB8fCBwb3MgPj0gc3AtPnNsZW4pCisJCXJldHVybiAwOworCWlmIChuYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKChjbnQgPSBzcC0+c2xlbiAtIHBvcykgPiBuYnl0ZXMpCisJCWNudCA9IG5ieXRlczsKKwlpZiAoY29weV90b191c2VyKGJ1Ziwgc3AtPnN0ciArIHBvcywgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJKnBwb3MgPSBwb3MgKyBjbnQ7CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBtb25fc3RhdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3N0YXQgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJbW9uX3N0YXRfb3BlbiwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCS5yZWFkID0JCW1vbl9zdGF0X3JlYWQsCisJLyogLndyaXRlID0JbW9uX3N0YXRfd3JpdGUsICovCisJLyogLnBvbGwgPQkJbW9uX3N0YXRfcG9sbCwgKi8KKwkvKiAuaW9jdGwgPQltb25fc3RhdF9pb2N0bCwgKi8KKwkucmVsZWFzZSA9CW1vbl9zdGF0X3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVhNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKQEAgLTAsMCArMSw0MDUgQEAKKy8qCisgKiBUaGUgVVNCIE1vbml0b3IsIGluc3BpcmVkIGJ5IERhdmUgSGFyZGluZydzIFVTQk1vbi4KKyAqCisgKiBUaGlzIGlzIGEgdGV4dCBmb3JtYXQgcmVhZGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ1c2JfbW9uLmgiCisKKy8qCisgKiBObywgd2UgZG8gbm90IHdhbnQgYXJiaXRyYXJpbHkgbG9uZyBkYXRhIHN0cmluZ3MuCisgKiBVc2UgdGhlIGJpbmFyeSBpbnRlcmZhY2UgaWYgeW91IHdhbnQgdG8gY2FwdHVyZSBidWxrIGRhdGEhCisgKi8KKyNkZWZpbmUgREFUQV9NQVggIDMyCisKKy8qCisgKiBUaGlzIGxpbWl0IGV4aXN0cyB0byBwcmV2ZW50IE9PTXMgd2hlbiB0aGUgdXNlciBwcm9jZXNzIHN0b3BzIHJlYWRpbmcuCisgKi8KKyNkZWZpbmUgRVZFTlRfTUFYICAyNQorCisjZGVmaW5lIFBSSU5URl9ERkwgIDEyMAorCitzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgZV9saW5rOworCWludCB0eXBlOwkJLyogc3VibWl0LCBjb21wbGV0ZSwgZXRjLiAqLworCXVuc2lnbmVkIGludCBwaXBlOwkvKiBQaXBlICovCisJdW5zaWduZWQgbG9uZyBpZDsJLyogRnJvbSBwb2ludGVyLCBtb3N0IG9mIHRoZSB0aW1lICovCisJdW5zaWduZWQgaW50IHRzdGFtcDsKKwlpbnQgbGVuZ3RoOwkJLyogRGVwZW5kcyBvbiB0eXBlOiB4ZmVyIGxlbmd0aCBvciBhY3QgbGVuZ3RoICovCisJaW50IHN0YXR1czsKKwljaGFyIGRhdGFfZmxhZzsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbREFUQV9NQVhdOworfTsKKworI2RlZmluZSBTTEFCX05BTUVfU1ogIDMwCitzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0IHsKKwlrbWVtX2NhY2hlX3QgKmVfc2xhYjsKKwlpbnQgbmV2ZW50czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVfbGlzdDsKKwlzdHJ1Y3QgbW9uX3JlYWRlciByOwkvKiBJbiBDLCBwYXJlbnQgY2xhc3MgY2FuIGJlIHBsYWNlZCBhbnl3aGVyZSAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlpbnQgcHJpbnRmX3NpemU7CisJY2hhciAqcHJpbnRmX2J1ZjsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHByaW50Zl9sb2NrOworCisJY2hhciBzbGFiX25hbWVbU0xBQl9OQU1FX1NaXTsKK307CisKK3N0YXRpYyB2b2lkIG1vbl90ZXh0X2N0b3Iodm9pZCAqLCBrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdm9pZCBtb25fdGV4dF9kdG9yKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpOworCisvKgorICogbW9uX3RleHRfc3VibWl0CisgKiBtb25fdGV4dF9jb21wbGV0ZQorICoKKyAqIE1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2l0aCB0aGUgd2hvbGUgbW9uX2J1cyBsb2NrZWQsIHNvIG5vIGFkZGl0aW9uYWwgbG9jay4KKyAqLworCitzdGF0aWMgaW5saW5lIGNoYXIgbW9uX3RleHRfZ2V0X2RhdGEoc3RydWN0IG1vbl9ldmVudF90ZXh0ICplcCwgc3RydWN0IHVyYiAqdXJiLAorICAgIGludCBsZW4sIGNoYXIgZXZfdHlwZSkKK3sKKwlpbnQgcGlwZSA9IHVyYi0+cGlwZTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCisJLyoKKwkgKiBUaGUgY2hlY2sgdG8gc2VlIGlmIGl0J3Mgc2FmZSB0byBwb2tlIGF0IGRhdGEgaGFzIGFuIGVub3Jtb3VzCisJICogbnVtYmVyIG9mIGNvcm5lciBjYXNlcywgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIGZvbGxvd2luZyBpcworCSAqIG1vcmUgb3IgbGVzcyBzYWZlLgorCSAqCisJICogV2UgZG8gbm90IGV2ZW4gdHJ5IHRvIGxvb2sgdHJhbnNmZXJfYnVmZmVyLCBiZWNhdXNlIGl0IGNhbgorCSAqIGNvbnRhaW4gbm9uLU5VTEwgZ2FyYmFnZSBpbiBjYXNlIHRoZSB1cHBlciBsZXZlbCBwcm9taXNlZCB0bworCSAqIHNldCBETUEgZm9yIHRoZSBIQ0QuCisJICovCisJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkKKwkJcmV0dXJuICdEJzsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuICdMJzsKKworCWlmICgoZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyKSA9PSBOVUxMKQorCQlyZXR1cm4gJ1onOwkvKiAnMCcgd291bGQgYmUgbm90IGFzIHByZXR0eS4gKi8KKworCS8qCisJICogQnVsayBpcyBlYXN5IHRvIHNob3J0Y3V0IHJlbGlhYmx5LiAKKwkgKiBYWFggQ29udHJvbCBuZWVkcyBzZXR1cCBwYWNrZXQgdGFrZW4uCisJICogWFhYIE90aGVyIHBpcGUgdHlwZXMgbmVlZCBjb25zaWRlcmF0aW9uLiBDdXJyZW50bHksIHdlIG92ZXJkbyBpdAorCSAqIGFuZCBjb2xsZWN0IGdhcmJhZ2UgZm9yIHRoZW06IGJldHRlciBtb3JlIHRoYW4gbGVzcy4KKwkgKi8KKwlpZiAodXNiX3BpcGVidWxrKHBpcGUpIHx8IHVzYl9waXBlY29udHJvbChwaXBlKSkgeworCQlpZiAodXNiX3BpcGVpbihwaXBlKSkgeworCQkJaWYgKGV2X3R5cGUgPT0gJ1MnKQorCQkJCXJldHVybiAnPCc7CisJCX0gZWxzZSB7CisJCQlpZiAoZXZfdHlwZSA9PSAnQycpCisJCQkJcmV0dXJuICc+JzsKKwkJfQorCX0KKworCWlmIChsZW4gPj0gREFUQV9NQVgpCisJCWxlbiA9IERBVEFfTUFYOworCW1lbWNweShlcC0+ZGF0YSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1vbl9nZXRfdGltZXN0YW1wKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdHZhbDsKKwl1bnNpZ25lZCBpbnQgc3RhbXA7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnR2YWwpOworCXN0YW1wID0gdHZhbC50dl9zZWMgJiAweEZGRkY7CS8qIDJeMzIgPSA0Mjk0OTY3Mjk2LiBMaW1pdCB0byA0MDk2cy4gKi8KKwlzdGFtcCA9IHN0YW1wICogMTAwMDAwMCArIHR2YWwudHZfdXNlYzsKKwlyZXR1cm4gc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkIG1vbl90ZXh0X2V2ZW50KHN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgY2hhciBldl90eXBlKQoreworCXN0cnVjdCBtb25fZXZlbnRfdGV4dCAqZXA7CisJdW5zaWduZWQgaW50IHN0YW1wOworCisJc3RhbXAgPSBtb25fZ2V0X3RpbWVzdGFtcCgpOworCisJaWYgKHJwLT5uZXZlbnRzID49IEVWRU5UX01BWCB8fAorCSAgICAoZXAgPSBrbWVtX2NhY2hlX2FsbG9jKHJwLT5lX3NsYWIsIFNMQUJfQVRPTUlDKSkgPT0gTlVMTCkgeworCQlycC0+ci5tX2J1cy0+Y250X3RleHRfbG9zdCsrOworCQlyZXR1cm47CisJfQorCisJZXAtPnR5cGUgPSBldl90eXBlOworCWVwLT5waXBlID0gdXJiLT5waXBlOworCWVwLT5pZCA9ICh1bnNpZ25lZCBsb25nKSB1cmI7CisJZXAtPnRzdGFtcCA9IHN0YW1wOworCWVwLT5sZW5ndGggPSAoZXZfdHlwZSA9PSAnUycpID8KKwkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDogdXJiLT5hY3R1YWxfbGVuZ3RoOworCS8qIENvbGxlY3Rpbmcgc3RhdHVzIG1ha2VzIGRlYnVnZ2luZyBzZW5zZSBmb3Igc3VibWl0cywgdG9vICovCisJZXAtPnN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJZXAtPmRhdGFfZmxhZyA9IG1vbl90ZXh0X2dldF9kYXRhKGVwLCB1cmIsIGVwLT5sZW5ndGgsIGV2X3R5cGUpOworCisJcnAtPm5ldmVudHMrKzsKKwlsaXN0X2FkZF90YWlsKCZlcC0+ZV9saW5rLCAmcnAtPmVfbGlzdCk7CisJd2FrZV91cCgmcnAtPndhaXQpOworfQorCitzdGF0aWMgdm9pZCBtb25fdGV4dF9zdWJtaXQodm9pZCAqZGF0YSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwID0gZGF0YTsKKwltb25fdGV4dF9ldmVudChycCwgdXJiLCAnUycpOworfQorCitzdGF0aWMgdm9pZCBtb25fdGV4dF9jb21wbGV0ZSh2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnAgPSBkYXRhOworCW1vbl90ZXh0X2V2ZW50KHJwLCB1cmIsICdDJyk7Cit9CisKKy8qCisgKiBGZXRjaCBuZXh0IGV2ZW50IGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqLworc3RhdGljIHN0cnVjdCBtb25fZXZlbnRfdGV4dCAqbW9uX3RleHRfZmV0Y2goc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnAsCisgICAgc3RydWN0IG1vbl9idXMgKm1idXMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmcnAtPmVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcCA9IHJwLT5lX2xpc3QubmV4dDsKKwlsaXN0X2RlbChwKTsKKwktLXJwLT5uZXZlbnRzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW9uX2V2ZW50X3RleHQsIGVfbGluayk7Cit9CisKKy8qCisgKi8KK3N0YXRpYyBpbnQgbW9uX3RleHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwlzdHJ1Y3QgdXNiX2J1cyAqdWJ1czsKKwlzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycDsKKwlpbnQgcmM7CisKKwlkb3duKCZtb25fbG9jayk7CisJbWJ1cyA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisJdWJ1cyA9IG1idXMtPnVfYnVzOworCisJcnAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJwID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvYzsKKwl9CisJbWVtc2V0KHJwLCAwLCBzaXplb2Yoc3RydWN0IG1vbl9yZWFkZXJfdGV4dCkpOworCUlOSVRfTElTVF9IRUFEKCZycC0+ZV9saXN0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZycC0+d2FpdCk7CisJaW5pdF9NVVRFWCgmcnAtPnByaW50Zl9sb2NrKTsKKworCXJwLT5wcmludGZfc2l6ZSA9IFBSSU5URl9ERkw7CisJcnAtPnByaW50Zl9idWYgPSBrbWFsbG9jKHJwLT5wcmludGZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJwLT5wcmludGZfYnVmID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvY19wcjsKKwl9CisKKwlycC0+ci5tX2J1cyA9IG1idXM7CisJcnAtPnIucl9kYXRhID0gcnA7CisJcnAtPnIucm5mX3N1Ym1pdCA9IG1vbl90ZXh0X3N1Ym1pdDsKKwlycC0+ci5ybmZfY29tcGxldGUgPSBtb25fdGV4dF9jb21wbGV0ZTsKKworCXNucHJpbnRmKHJwLT5zbGFiX25hbWUsIFNMQUJfTkFNRV9TWiwgIm1vbiVkdF8lbHgiLCB1YnVzLT5idXNudW0sCisJICAgIChsb25nKXJwKTsKKwlycC0+ZV9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUocnAtPnNsYWJfbmFtZSwKKwkgICAgc2l6ZW9mKHN0cnVjdCBtb25fZXZlbnRfdGV4dCksIHNpemVvZihsb25nKSwgMCwKKwkgICAgbW9uX3RleHRfY3RvciwgbW9uX3RleHRfZHRvcik7CisJaWYgKHJwLT5lX3NsYWIgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3NsYWI7CisJfQorCisJbW9uX3JlYWRlcl9hZGQobWJ1cywgJnJwLT5yKTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJwOworCXVwKCZtb25fbG9jayk7CisJcmV0dXJuIDA7CisKKy8vIGVycl9idXN5OgorLy8Ja21lbV9jYWNoZV9kZXN0cm95KHJwLT5lX3NsYWIpOworZXJyX3NsYWI6CisJa2ZyZWUocnAtPnByaW50Zl9idWYpOworZXJyX2FsbG9jX3ByOgorCWtmcmVlKHJwKTsKK2Vycl9hbGxvYzoKKwl1cCgmbW9uX2xvY2spOworCXJldHVybiByYzsKK30KKworLyoKKyAqIEZvciBzaW1wbGljaXR5LCB3ZSByZWFkIG9uZSByZWNvcmQgaW4gb25lIHN5c3RlbSBjYWxsIGFuZCB0aHJvdyBvdXQKKyAqIHdoYXQgZG9lcyBub3QgZml0LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCB3b3JrOgorICogICBkZCBpZj0vZGJnL3VzYm1vbi8wdCBicz0xMAorICogQWxzbywgd2UgZG8gbm90IGFsbG93IHNlZWtzIGFuZCBkbyBub3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb2Zmc2V0LgorICovCitzdGF0aWMgc3NpemVfdCBtb25fdGV4dF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1cyA9IHJwLT5yLm1fYnVzOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXRhLCBjdXJyZW50KTsKKwlzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgKmVwOworCWludCBjbnQsIGxpbWl0OworCWNoYXIgKnBidWY7CisJY2hhciB1ZGlyLCB1dHlwZTsKKwlpbnQgZGF0YV9sZW4sIGk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcnAtPndhaXQsICZ3YWl0YSk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl3aGlsZSAoKGVwID0gbW9uX3RleHRfZmV0Y2gocnAsIG1idXMpKSA9PSBOVUxMKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZycC0+d2FpdCwgJndhaXRhKTsKKwkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CS8qIFNhbWUgYXMgRUFHQUlOIGluIExpbnV4ICovCisJCX0KKwkJLyoKKwkJICogV2UgZG8gbm90IGNvdW50IG53YWl0ZXJzLCBiZWNhdXNlIC0+cmVsZWFzZSBpcyBzdXBwb3NlZAorCQkgKiB0byBiZSBjYWxsZWQgd2hlbiBhbGwgb3BlbmVycyBhcmUgZ29uZSBvbmx5LgorCQkgKi8KKwkJc2NoZWR1bGUoKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcnAtPndhaXQsICZ3YWl0YSk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnJwLT53YWl0LCAmd2FpdGEpOworCisJZG93bigmcnAtPnByaW50Zl9sb2NrKTsKKwljbnQgPSAwOworCXBidWYgPSBycC0+cHJpbnRmX2J1ZjsKKwlsaW1pdCA9IHJwLT5wcmludGZfc2l6ZTsKKworCXVkaXIgPSB1c2JfcGlwZWluKGVwLT5waXBlKSA/ICdpJyA6ICdvJzsKKwlzd2l0Y2ggKHVzYl9waXBldHlwZShlcC0+cGlwZSkpIHsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CXV0eXBlID0gJ1onOyBicmVhazsKKwljYXNlIFBJUEVfSU5URVJSVVBUOgl1dHlwZSA9ICdJJzsgYnJlYWs7CisJY2FzZSBQSVBFX0NPTlRST0w6CXV0eXBlID0gJ0MnOyBicmVhazsKKwlkZWZhdWx0OiAvKiBQSVBFX0JVTEsgKi8gIHV0eXBlID0gJ0InOworCX0KKwljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsCisJICAgICIlbHggJXUgJWMgJWMlYzolMDN1OiUwMnUgJWQgJWQiLAorCSAgICBlcC0+aWQsIGVwLT50c3RhbXAsIGVwLT50eXBlLAorCSAgICB1dHlwZSwgdWRpciwgdXNiX3BpcGVkZXZpY2UoZXAtPnBpcGUpLCB1c2JfcGlwZWVuZHBvaW50KGVwLT5waXBlKSwKKwkgICAgZXAtPnN0YXR1cywgZXAtPmxlbmd0aCk7CisKKwlpZiAoKGRhdGFfbGVuID0gZXAtPmxlbmd0aCkgPiAwKSB7CisJCWlmIChlcC0+ZGF0YV9mbGFnID09IDApIHsKKwkJCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwgIiA9Iik7CisJCQlpZiAoZGF0YV9sZW4gPj0gREFUQV9NQVgpCisJCQkJZGF0YV9sZW4gPSBEQVRBX01BWDsKKwkJCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKSB7CisJCQkJaWYgKGkgJSA0ID09IDApIHsKKwkJCQkJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LAorCQkJCQkgICAgIiAiKTsKKwkJCQl9CisJCQkJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LAorCQkJCSAgICAiJTAyeCIsIGVwLT5kYXRhW2ldKTsKKwkJCX0KKwkJCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwgIlxuIik7CisJCX0gZWxzZSB7CisJCQljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsCisJCQkgICAgIiAlY1xuIiwgZXAtPmRhdGFfZmxhZyk7CisJCX0KKwl9IGVsc2UgeworCQljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsICJcbiIpOworCX0KKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBycC0+cHJpbnRmX2J1ZiwgY250KSkKKwkJY250ID0gLUVGQVVMVDsKKwl1cCgmcnAtPnByaW50Zl9sb2NrKTsKKwlrbWVtX2NhY2hlX2ZyZWUocnAtPmVfc2xhYiwgZXApOworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgbW9uX3RleHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKwkvKiB1bnNpZ25lZCBsb25nIGZsYWdzOyAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IG1vbl9ldmVudF90ZXh0ICplcDsKKworCWRvd24oJm1vbl9sb2NrKTsKKwltYnVzID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCWlmIChtYnVzLT5ucmVhZGVycyA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBUQUcgIjogY29uc2lzdGVuY3kgZXJyb3Igb24gY2xvc2VcbiIpOworCQl1cCgmbW9uX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisJbW9uX3JlYWRlcl9kZWwobWJ1cywgJnJwLT5yKTsKKworCS8qCisJICogSW4gdGhlb3J5LCBlX2xpc3QgaXMgcHJvdGVjdGVkIGJ5IG1idXMtPmxvY2suIEhvd2V2ZXIsCisJICogYWZ0ZXIgbW9uX3JlYWRlcl9kZWwgaGFzIGZpbmlzaGVkLCB0aGUgZm9sbG93aW5nIGlzIHRoZSBjYXNlOgorCSAqICAtIHdlIGFyZSBub3Qgb24gcmVhZGVyIGxpc3QgYW55bW9yZSwgc28gbmV3IGV2ZW50cyB3b24ndCBiZSBhZGRlZDsKKwkgKiAgLSB3aG9sZSBtYnVzIG1heSBiZSBkcm9wcGVkIGlmIGl0IHdhcyBvcnBoYW5lZC4KKwkgKiBTbywgd2UgYmV0dGVyIG5vdCB0b3VjaCBtYnVzLgorCSAqLworCS8qIHNwaW5fbG9ja19pcnFzYXZlKCZtYnVzLT5sb2NrLCBmbGFncyk7ICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZycC0+ZV9saXN0KSkgeworCQlwID0gcnAtPmVfbGlzdC5uZXh0OworCQllcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IG1vbl9ldmVudF90ZXh0LCBlX2xpbmspOworCQlsaXN0X2RlbChwKTsKKwkJLS1ycC0+bmV2ZW50czsKKwkJa21lbV9jYWNoZV9mcmVlKHJwLT5lX3NsYWIsIGVwKTsKKwl9CisJLyogc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOyAqLworCisJa21lbV9jYWNoZV9kZXN0cm95KHJwLT5lX3NsYWIpOworCWtmcmVlKHJwLT5wcmludGZfYnVmKTsKKwlrZnJlZShycCk7CisKKwl1cCgmbW9uX2xvY2spOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3RleHQgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJbW9uX3RleHRfb3BlbiwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCS5yZWFkID0JCW1vbl90ZXh0X3JlYWQsCisJLyogLndyaXRlID0JbW9uX3RleHRfd3JpdGUsICovCisJLyogLnBvbGwgPQkJbW9uX3RleHRfcG9sbCwgKi8KKwkvKiAuaW9jdGwgPQltb25fdGV4dF9pb2N0bCwgKi8KKwkucmVsZWFzZSA9CW1vbl90ZXh0X3JlbGVhc2UsCit9OworCisvKgorICogU2xhYiBpbnRlcmZhY2U6IGNvbnN0cnVjdG9yLgorICovCitzdGF0aWMgdm9pZCBtb25fdGV4dF9jdG9yKHZvaWQgKm1lbSwga21lbV9jYWNoZV90ICpzbGFiLCB1bnNpZ25lZCBsb25nIHNmbGFncykKK3sKKwkvKgorCSAqIE5vdGhpbmcgdG8gaW5pdGlhbGl6ZS4gTm8sIHJlYWxseSEKKwkgKiBTbywgd2UgZmlsbCBpdCB3aXRoIGdhcmJhZ2UgdG8gZW11bGF0ZSBhIHJldXNlZCBvYmplY3QuCisJICovCisJbWVtc2V0KG1lbSwgMHhlNSwgc2l6ZW9mKHN0cnVjdCBtb25fZXZlbnRfdGV4dCkpOworfQorCitzdGF0aWMgdm9pZCBtb25fdGV4dF9kdG9yKHZvaWQgKm1lbSwga21lbV9jYWNoZV90ICpzbGFiLCB1bnNpZ25lZCBsb25nIHNmbGFncykKK3sKKwk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oIGIvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDM1YzE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogVGhlIFVTQiBNb25pdG9yLCBpbnNwaXJlZCBieSBEYXZlIEhhcmRpbmcncyBVU0JNb24uCisgKi8KKworI2lmbmRlZiBfX1VTQl9NT05fSAorI2RlZmluZSBfX1VTQl9NT05fSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisvKiAjaW5jbHVkZSA8bGludXgvdXNiLmg+ICovCS8qIFdlIHVzZSBzdHJ1Y3QgcG9pbnRlcnMgb25seSBpbiB0aGlzIGhlYWRlciAqLworCisjZGVmaW5lIFRBRyAidXNibW9uIgorCitzdHJ1Y3QgbW9uX2J1cyB7CisJc3RydWN0IGxpc3RfaGVhZCBidXNfbGluazsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGRlbnRyeSAqZGVudF9zOwkJLyogRGVidWdnaW5nIGZpbGUgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZW50X3Q7CQkvKiBUZXh0IGludGVyZmFjZSBmaWxlICovCisJc3RydWN0IHVzYl9idXMgKnVfYnVzOworCisJLyogUmVmICovCisJaW50IG5yZWFkZXJzOwkJCS8qIFVuZGVyIG1vbl9sb2NrIEFORCBtYnVzLT5sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCByX2xpc3Q7CS8qIENoYWluIG9mIHJlYWRlcnMgKHVzdWFsbHkgb25lKSAqLworCXN0cnVjdCBrcmVmIHJlZjsJCS8qIFVuZGVyIG1vbl9sb2NrICovCisKKwkvKiBTdGF0cyAqLworCXVuc2lnbmVkIGludCBjbnRfdGV4dF9sb3N0OworfTsKKworLyoKKyAqIEFuIGluc3RhbmNlIG9mIGEgcHJvY2VzcyB3aGljaCBvcGVuZWQgYSBmaWxlIChidXQgY2FuIGZvcmsgbGF0ZXIpCisgKi8KK3N0cnVjdCBtb25fcmVhZGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJfbGluazsKKwlzdHJ1Y3QgbW9uX2J1cyAqbV9idXM7CisJdm9pZCAqcl9kYXRhOwkJLyogVXNlIGNvbnRhaW5lcl9vZiBpbnN0ZWFkPyAqLworCisJdm9pZCAoKnJuZl9zdWJtaXQpKHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYik7CisJdm9pZCAoKnJuZl9jb21wbGV0ZSkodm9pZCAqZGF0YSwgc3RydWN0IHVyYiAqdXJiKTsKK307CisKK3ZvaWQgbW9uX3JlYWRlcl9hZGQoc3RydWN0IG1vbl9idXMgKm1idXMsIHN0cnVjdCBtb25fcmVhZGVyICpyKTsKK3ZvaWQgbW9uX3JlYWRlcl9kZWwoc3RydWN0IG1vbl9idXMgKm1idXMsIHN0cnVjdCBtb25fcmVhZGVyICpyKTsKKworZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgbW9uX2xvY2s7CisKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3RleHQ7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb25fZm9wc19zdGF0OworCisjZW5kaWYgLyogX19VU0JfTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnIGIvZHJpdmVycy91c2IvbmV0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NGM5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnCkBAIC0wLDAgKzEsMzA3IEBACisjCisjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiTmV0d29ya2luZyBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmICFORVQKKworbWVudSAiVVNCIE5ldHdvcmsgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBVU0IgJiYgTkVUCisKK2NvbmZpZyBVU0JfQ0FUQworCXRyaXN0YXRlICJVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJc2VsZWN0IENSQzMyCisJLS0taGVscC0tLQorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXQKKwkgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6CisJICBCZWxraW4gRjVVMDExCisJICBCZWxraW4gRjVVMTExCisJICBDQVRDIE5ldE1hdGUKKwkgIENBVEMgTmV0TWF0ZSBJSQorCSAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDCisKKwkgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsCisJICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uCisJICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNhdGMuCisKK2NvbmZpZyBVU0JfS0FXRVRICisJdHJpc3RhdGUgIlVTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgb25seQorCSAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6CisJICAzQ29tIDNDMTkyNTAKKwkgIEFEUyBVU0ItMTBCVAorCSAgQVRFTiBVU0IgRXRoZXJuZXQKKwkgIEFTQU5URSBVU0IgVG8gRXRoZXJuZXQgQWRhcHRlcgorCSAgQU9YIEVuZHBvaW50cyBVU0IgRXRoZXJuZXQKKwkgIENvcnJlZ2EgSy5LLgorCSAgRC1MaW5rIERTQi02NTBDIGFuZCBEVS1FMTAKKwkgIEVudHJlZ2EgLyBQb3J0Z2VhciBFNDUKKwkgIEktTyBEQVRBIFVTQi1FVC9UCisJICBKYXRvbiBVU0IgRXRoZXJuZXQgRGV2aWNlIEFkYXB0ZXIKKwkgIEtpbmdzdG9uIFRlY2hub2xvZ3kgVVNCIEV0aGVybmV0IEFkYXB0ZXIKKwkgIExpbmtzeXMgVVNCMTBUCisJICBNb2JpbGl0eSBVU0ItRXRoZXJuZXQgQWRhcHRlcgorCSAgTmV0R2VhciBFQS0xMDEKKwkgIFBlcmFjb20gRW5ldCBhbmQgRW5ldDIKKwkgIFBvcnRzbWl0aCBFeHByZXNzIEV0aGVybmV0IEFkYXB0ZXIKKwkgIFNoYXJrIFBvY2tldCBBZGFwdGVyCisJICBTTUMgMjIwMlVTQgorCSAgU29ueSBWYWlvIHBvcnQgZXh0ZW5kZXIKKworCSAgVGhpcyBkcml2ZXIgaXMgbGlrZWx5IHRvIHdvcmsgd2l0aCBtb3N0IDEwTWJwcyBvbmx5IFVTQiBFdGhlcm5ldAorCSAgYWRhcHRlcnMsIGluY2x1ZGluZyBzb21lICJubyBicmFuZCIgZGV2aWNlcy4gSXQgZG9lcyBOT1Qgd29yayBvbgorCSAgU21hcnRCcmlkZ2VzIHNtYXJ0TklDIG9yIG9uIEJlbGtpbiBGNVUxMTEgZGV2aWNlcyAtIHlvdSBzaG91bGQgdXNlCisJICB0aGUgQ0FUQyBOZXRNYXRlIGRyaXZlciBmb3IgdGhvc2UuIElmIHlvdSBhcmUgbm90IHN1cmUgd2hpY2ggb25lCisJICB5b3UgbmVlZCwgc2VsZWN0IGJvdGgsIGFuZCB0aGUgY29ycmVjdCBvbmUgc2hvdWxkIGJlIHNlbGVjdGVkIGZvcgorCSAgeW91LgorCisJICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLAorCSAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvbgorCSAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrYXdldGguCisKK2NvbmZpZyBVU0JfUEVHQVNVUworCXRyaXN0YXRlICJVU0IgUGVnYXN1cy9QZWdhc3VzLUlJIGJhc2VkIGV0aGVybmV0IGRldmljZSBzdXBwb3J0IgorCXNlbGVjdCBNSUkKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBrbm93IHlvdSBoYXZlIFBlZ2FzdXMgb3IgUGVnYXN1cy1JSSBiYXNlZCBhZGFwdGVyLgorCSAgSWYgaW4gZG91YnQgdGhlbiBsb29rIGF0IDxmaWxlOmRyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmg+IGZvciB0aGUKKwkgIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGRldmljZXMuCisKKwkgIElmIHlvdXIgcGFydGljdWxhciBhZGFwdGVyIGlzIG5vdCBpbiB0aGUgbGlzdCBhbmQgeW91IGFyZSBfc3VyZV8gaXQKKwkgIGlzIFBlZ2FzdXMgb3IgUGVnYXN1cyBJSSBiYXNlZCB0aGVuIHNlbmQgbWUKKwkgIDxwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiB2ZW5kb3IgYW5kIGRldmljZSBJRHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBlZ2FzdXMuCisKK2NvbmZpZyBVU0JfUlRMODE1MAorCXRyaXN0YXRlICJVU0IgUlRMODE1MCBiYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgUlRMODE1MCBiYXNlZCB1c2ItZXRoZXJuZXQgYWRhcHRlci4KKwkgIFNlbmQgbWUgPHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IGFueSBjb21tZW50cyB5b3UgbWF5IGhhdmUuCisJICBZb3UgY2FuIGFsc28gY2hlY2sgZm9yIHVwZGF0ZXMgYXQgPGh0dHA6Ly9wZWdhc3VzMi5zb3VyY2Vmb3JnZS5uZXQvPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcnRsODE1MC4KKworY29uZmlnIFVTQl9VU0JORVQKKwl0cmlzdGF0ZSAiTXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmsiCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLAorCSAgd2l0aCAibWluaWRyaXZlcnMiIGJ1aWx0IGFyb3VuZCBhIGNvbW1vbiBuZXR3b3JrIGRyaXZlciBjb3JlCisJICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXMKKwkgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS4KKwkgIAorCSAgVGhlIFVTQiBob3N0IHJ1bnMgInVzYm5ldCIsIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOgorCisJICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCICJuZXR3b3JrIiBvciAiZGF0YSB0cmFuc2ZlciIKKwkgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZQorCSAgICAiTGFwbGluayIgcGFyYWxsZWwgY2FibGVzIG9yIHNvbWUgbW90aGVyYm9hcmRzLiAgVGhlc2UgcmVseQorCSAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLgorCisJICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLgorCSAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmQKKwkgICAgb3RoZXJzKSwgYW5kIGRldmljZXMgdGhhdCBpbnRlcm9wZXJhdGUgdXNpbmcgdGhlIHN0YW5kYXJkCisJICAgIENEQy1FdGhlcm5ldCBzcGVjaWZpY2F0aW9uIChpbmNsdWRpbmcgbWFueSBjYWJsZSBtb2RlbXMpLgorCisJICAtIE5ldHdvcmsgYWRhcHRlciBoYXJkd2FyZSAobGlrZSB0aG9zZSBmb3IgMTAvMTAwIEV0aGVybmV0KSB3aGljaAorCSAgICB1c2VzIHRoaXMgZHJpdmVyIGZyYW1ld29yay4KKworCSAgVGhlIGxpbmsgd2lsbCBhcHBlYXIgd2l0aCBhIG5hbWUgbGlrZSAidXNiMCIsIHdoZW4gdGhlIGxpbmsgaXMKKwkgIGEgdHdvLW5vZGUgbGluaywgb3IgImV0aDAiIGZvciBtb3N0IENEQy1FdGhlcm5ldCBkZXZpY2VzLiAgVGhvc2UKKwkgIHR3by1ub2RlIGxpbmtzIGFyZSBtb3N0IGVhc2lseSBtYW5hZ2VkIHdpdGggRXRoZXJuZXQgQnJpZGdpbmcKKwkgIChDT05GSUdfQlJJREdFKSBpbnN0ZWFkIG9mIHJvdXRpbmcuCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSA8aHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldC8+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JuZXQuCisKK2NvbW1lbnQgIlVTQiBIb3N0LXRvLUhvc3QgQ2FibGVzIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCitjb25maWcgVVNCX0FMSV9NNTYzMgorCWJvb2xlYW4gIkFMaSBNNTYzMiBiYXNlZCAnVVNCIDIuMCBEYXRhIExpbmsnIGNhYmxlcyIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlCisJICBiYXNlZCBvbiB0aGlzIGRlc2lnbiwgd2hpY2ggc3VwcG9ydHMgVVNCIDIuMCBoaWdoIHNwZWVkLgorCitjb25maWcgVVNCX0FOMjcyMAorCWJvb2xlYW4gIkFuY2hvckNoaXBzIDI3MjAgYmFzZWQgY2FibGVzIChYaXJjb20gUEdVTkVULCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUKKwkgIGJhc2VkIG9uIHRoaXMgZGVzaWduLiAgTm90ZSB0aGF0IEFuY2hvckNoaXBzIGlzIG5vdyBhCisJICBDeXByZXNzIGJyYW5kLgorCitjb25maWcgVVNCX0JFTEtJTgorCWJvb2xlYW4gImVURUsgYmFzZWQgaG9zdC10by1ob3N0IGNhYmxlcyAoQWR2YW5jZSwgQmVsa2luLCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUKKwkgIGJhc2VkIG9uIHRoaXMgZGVzaWduOiAgdHdvIE5ldENoaXAgMjg5MCBjaGlwcyBhbmQgYW4gQXRtZWwKKwkgIG1pY3JvY29udHJvbGxlciwgd2l0aCBMRURzIHRoYXQgaW5kaWNhdGUgdHJhZmZpYy4KKworY29uZmlnIFVTQl9HRU5FU1lTCisJYm9vbGVhbiAiR2VuZVN5cyBHTDYyMFVTQi1BIGJhc2VkIGNhYmxlcyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlLAorCSAgb3IgUEMyUEMgbW90aGVyYm9hcmQsIHdpdGggdGhpcyBjaGlwLgorCisJICBOb3RlIHRoYXQgdGhlIGhhbGYtZHVwbGV4ICJHTDYyMFVTQiIgaXMgbm90IHN1cHBvcnRlZC4KKworY29uZmlnIFVTQl9ORVQxMDgwCisJYm9vbGVhbiAiTmV0Q2hpcCAxMDgwIGJhc2VkIGNhYmxlcyAoTGFwbGluaywgLi4uKSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlIGJhc2VkCisJICBvbiB0aGlzIGRlc2lnbjogIG9uZSBOZXRDaGlwIDEwODAgY2hpcHMgYW5kIHN1cHBvcnRpbmcgbG9naWMsCisJICBzdXBwb3J0aW5nIExFRHMgdGhhdCBpbmRpY2F0ZSB0cmFmZmljCisKK2NvbmZpZyBVU0JfUEwyMzAxCisJYm9vbGVhbiAiUHJvbGlmaWMgUEwtMjMwMS8yMzAyIGJhc2VkIGNhYmxlcyIKKwlkZWZhdWx0IHkKKwkjIGhhbmRzaGFrZS9pbml0L3Jlc2V0IHByb2JsZW1zLCBmcm9tIG9yaWdpbmFsICdwbHVzYicgZHJpdmVyCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UncmUgdXNpbmcgYSBob3N0LXRvLWhvc3QgY2FibGUKKwkgIHdpdGggb25lIG9mIHRoZXNlIGNoaXBzLgorCitjb25maWcgVVNCX0tDMjE5MAorCWJvb2xlYW4gIktUIFRlY2hub2xvZ3kgS0MyMTkwIGJhc2VkIGNhYmxlcyAoSW5zdGFOZXQpIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVVNCX1VTQk5FVCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlCisJICB3aXRoIG9uZSBvZiB0aGVzZSBjaGlwcy4KKworY29tbWVudCAiSW50ZWxsaWdlbnQgVVNCIERldmljZXMvR2FkZ2V0cyIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKworY29uZmlnIFVTQl9BUk1MSU5VWAorCWJvb2xlYW4gIkVtYmVkZGVkIEFSTSBMaW51eCBsaW5rcyAoaVBhcSwgLi4uKSIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc3VwcG9ydCB0aGUgInVzYi1ldGgiIG5ldHdvcmtpbmcgZHJpdmVyCisJICB1c2VkIGJ5IG1vc3Qgb2YgdGhlIEFSTSBMaW51eCBjb21tdW5pdHkgd2l0aCBkZXZpY2UgY29udHJvbGxlcnMKKwkgIHN1Y2ggYXMgdGhlIFNBLTExeDAgYW5kIFBYQS0yNXggVURDcywgb3IgdGhlIHRmdHAgY2FwYWJpbGl0aWVzCisJICBpbiBzb21lIFBYQSB2ZXJzaW9ucyBvZiB0aGUgImJsb2IiIGJvb3QgbG9hZGVyLgorCisJICBMaW51eC1iYXNlZCAiR3Vtc3RpeCIgUFhBLTI1eCBiYXNlZCBzeXN0ZW1zIHVzZSB0aGlzIHByb3RvY29sCisJICB0byB0YWxrIHdpdGggb3RoZXIgTGludXggc3lzdGVtcy4KKworCSAgQWx0aG91Z2ggdGhlIFJPTXMgc2hpcHBlZCB3aXRoIFNoYXJwIFphdXJ1cyBwcm9kdWN0cyB1c2UgYQorCSAgZGlmZmVyZW50IGxpbmsgbGV2ZWwgZnJhbWluZyBwcm90b2NvbCwgeW91IGNhbiBoYXZlIHRoZW0gdXNlCisJICB0aGlzIHNpbXBsZXIgcHJvdG9jb2wgYnkgaW5zdGFsbGluZyBhIGRpZmZlcmVudCBrZXJuZWwuCisKK2NvbmZpZyBVU0JfRVBTT04yODg4CisJYm9vbGVhbiAiRXBzb24gMjg4OCBiYXNlZCBmaXJtd2FyZSAoREVWRUxPUE1FTlQpIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBzdXBwb3J0IHRoZSB1c2IgbmV0d29ya2luZyBsaW5rcyB1c2VkCisJICBieSBzb21lIHNhbXBsZSBmaXJtd2FyZSBmcm9tIEVwc29uLgorCitjb25maWcgVVNCX1pBVVJVUworCWJvb2xlYW4gIlNoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJc2VsZWN0IENSQzMyCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIHN1cHBvcnQgdGhlIHVzYiBuZXR3b3JraW5nIGxpbmtzIHVzZWQgYnkKKwkgIFphdXJ1cyBtb2RlbHMgbGlrZSB0aGUgU0wtNTAwMEQsIFNMLTU1MDAsIFNMLTU2MDAsIEEtMzAwLCBCLTUwMC4KKworCSAgSWYgeW91IGluc3RhbGwgYW4gYWx0ZXJuYXRlIFJPTSBpbWFnZSwgeW91IG1heSBubyBsb25nZXIgbmVlZAorCSAgdG8gc3VwcG9ydCB0aGlzIHByb3RvY29sLiAgT25seSB0aGUgImV0aC1mZCIgZHJpdmVyIHJlYWxseSBuZWVkcworCSAgdGhpcyBub24tY29uZm9ybWFudCB2YXJpYW50IG9mIENEQyBFdGhlcm5ldCBwcm90b2NvbC4KKworY29uZmlnIFVTQl9DRENFVEhFUgorCWJvb2xlYW4gIkNEQyBFdGhlcm5ldCBzdXBwb3J0IChzbWFydCBkZXZpY2VzIHN1Y2ggYXMgY2FibGUgbW9kZW1zKSIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzdXBwb3J0cyBkZXZpY2VzIGNvbmZvcm1pbmcgdG8gdGhlIENvbW11bmljYXRpb24gRGV2aWNlCisJICBDbGFzcyAoQ0RDKSBFdGhlcm5ldCBDb250cm9sIE1vZGVsLCBhIHNwZWNpZmljYXRpb24gdGhhdCdzIGVhc3kgdG8KKwkgIGltcGxlbWVudCBpbiBkZXZpY2UgZmlybXdhcmUuICBUaGUgQ0RDIHNwZWNpZmljYXRpb25zIGFyZSBhdmFpbGFibGUKKwkgIGZyb20gPGh0dHA6Ly93d3cudXNiLm9yZy8+LgorCSAgCisJICBDREMgRXRoZXJuZXQgaXMgYW4gaW1wbGVtZW50YXRpb24gb3B0aW9uIGZvciBET0NTSVMgY2FibGUgbW9kZW1zCisJICB0aGF0IHN1cHBvcnQgVVNCIGNvbm5lY3Rpdml0eSwgdXNlZCBmb3Igbm9uLU1pY3Jvc29mdCBVU0IgaG9zdHMuCisgCSAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6CisKKyAJICAgICogRXJpY3Nzb24gUGlwZVJpZGVyIChhbGwgdmFyaWFudHMpCisgCSAgICAqIE1vdG9yb2xhIChETTEwMCBhbmQgU0I0MTAwKQorIAkgICAgKiBCcm9hZGNvbSBDYWJsZSBNb2RlbSAocmVmZXJlbmNlIGRlc2lnbikKKyAJICAgICogVG9zaGliYSBQQ1gxMTAwVQorCSAgICAqIC4uLgorCisJICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCAiZXRoWCIsIHdoZXJlIFggZGVwZW5kcyBvbgorCSAgd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUgaW4gdXNlLiAgSG93ZXZlciwgaWYgdGhlCisJICBJRUVFIDgwMiAibG9jYWwgYXNzaWdubWVudCIgYml0IGlzIHNldCBpbiB0aGUgYWRkcmVzcywgYSAidXNiWCIKKwkgIG5hbWUgaXMgdXNlZCBpbnN0ZWFkLgorCitjb21tZW50ICJVU0IgTmV0d29yayBBZGFwdGVycyIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKworY29uZmlnIFVTQl9BWDg4MTdYCisJYm9vbGVhbiAiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgRGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQgJiYgTkVUX0VUSEVSTkVUCisJc2VsZWN0IENSQzMyCisJc2VsZWN0IE1JSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVNJWCBBWDg4eHh4IGJhc2VkIFVTQiAyLjAKKwkgIDEwLzEwMCBFdGhlcm5ldCBkZXZpY2VzLgorCisgCSAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6CisJICAgICogQXRlbiBVQzIxMFQKKwkgICAgKiBBU0lYIEFYODgxNzIKKwkgICAgKiBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUiAKKwkgICAgKiBCdWZmYWxvIExVQS1VMi1LVFgKKwkgICAgKiBDb3JlZ2EgRkV0aGVyIFVTQjItVFgKKwkgICAgKiBELUxpbmsgRFVCLUUxMDAKKwkgICAgKiBIYXdraW5nIFVGMjAwCisJICAgICogTGlua3N5cyBVU0IyMDBNCisJICAgICogTmV0Z2VhciBGQTEyMAorCSAgICAqIFNpdGVjb20gTE4tMDI5CisJICAgICogSW50ZWxsaW5ldCBVU0IgMi4wIEV0aGVybmV0CisJICAgICogU1QgTGFiIFVTQiAyLjAgRXRoZXJuZXQKKwkgICAgKiBUcmVuZE5ldCBUVTItRVQxMDAKKworCSAgVGhpcyBkcml2ZXIgY3JlYXRlcyBhbiBpbnRlcmZhY2UgbmFtZWQgImV0aFgiLCB3aGVyZSBYIGRlcGVuZHMgb24KKwkgIHdoYXQgb3RoZXIgbmV0d29ya2luZyBkZXZpY2VzIHlvdSBoYXZlIGluIHVzZS4gIAorCitjb25maWcgVVNCX1pEMTIwMQorCXRyaXN0YXRlICJVU0IgWkQxMjAxIGJhc2VkIFdpcmVsZXNzIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUX1JBRElPCisJc2VsZWN0IEZXX0xPQURFUgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSB3aXJlbGVzcyBMQU4gYWRhcHRlcnMgYmFzZWQgb24gdGhlIFp5REFTCisJICBaRDEyMDEgY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSwKKwkgIHR5cGljYWxseSBvbiB3bGFuMC4KKwkgIAorCSAgVGhlIHpkMTIwMSBkZXZpY2UgcmVxdWlyZXMgZXh0ZXJuYWwgZmlybXdhcmUgdG8gYmUgbG9hZGVkLgorCSAgVGhpcyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL2xpbnV4LWxjMTAwMDIwLnNvdXJjZWZvcmdlLm5ldC8KKwkgIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemQxMjAxLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmMzUyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgTmV0d29yayBkcml2ZXJzCisjCisKK29iai0kKENPTkZJR19VU0JfQ0FUQykJCSs9IGNhdGMubworb2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpCSs9IGthd2V0aC5vCitvYmotJChDT05GSUdfVVNCX1BFR0FTVVMpCSs9IHBlZ2FzdXMubworb2JqLSQoQ09ORklHX1VTQl9SVEw4MTUwKQkrPSBydGw4MTUwLm8KK29iai0kKENPTkZJR19VU0JfVVNCTkVUKQkrPSB1c2JuZXQubworb2JqLSQoQ09ORklHX1VTQl9aRDEyMDEpCSs9IHpkMTIwMS5vCisKK0NGTEFHU196ZDEyMDEubyA9IC1JZHJpdmVycy9uZXQvd2lyZWxlc3MvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvY2F0Yy5jIGIvZHJpdmVycy91c2IvbmV0L2NhdGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGJlOTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L2NhdGMuYwpAQCAtMCwwICsxLDk2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgQ0FUQyBFTDEyMTBBIE5ldE1hdGUgVVNCIEV0aGVybmV0IGRyaXZlcgorICoKKyAqICBTcG9uc29yZWQgYnkgU3VTRQorICoKKyAqICBCYXNlZCBvbiB0aGUgd29yayBvZgorICoJCURvbmFsZCBCZWNrZXIKKyAqIAorICogIE9sZCBjaGlwc2V0IHN1cHBvcnQgYWRkZWQgYnkgU2ltb24gRXZhbnMgPHNwc2VAc2VjcmV0Lm9yZy51az4gMjAwMgorICogICAgLSBhZGRzIHN1cHBvcnQgZm9yIEJlbGtpbiBGNVUwMTEKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEBzdXNlLmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKgorICogVmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi44IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkNBVEMgRUwxMjEwQSBOZXRNYXRlIFVTQiBFdGhlcm5ldCBkcml2ZXIiCisjZGVmaW5lIFNIT1JUX0RSSVZFUl9ERVNDICJFTDEyMTBBIE5ldE1hdGUgVVNCIEV0aGVybmV0IgorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJjYXRjIjsKKworLyoKKyAqIFNvbWUgZGVmaW5lcy4KKyAqLyAKKworI2RlZmluZSBTVEFUU19VUERBVEUJCShIWikJLyogVGltZSBiZXR3ZWVuIHN0YXRzIHVwZGF0ZXMgKi8KKyNkZWZpbmUgVFhfVElNRU9VVAkJKDUqSFopCS8qIE1heCB0aW1lIHRoZSBxdWV1ZSBjYW4gYmUgc3RvcHBlZCAqLworI2RlZmluZSBQS1RfU1oJCQkxNTM2CS8qIE1heCBFdGhlcm5ldCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBSWF9NQVhfQlVSU1QJCTE1CS8qIE1heCBwYWNrZXRzIHBlciByeCBidWZmZXIgKD4gMCwgPCAxNikgKi8KKyNkZWZpbmUgVFhfTUFYX0JVUlNUCQkxNQkvKiBNYXggZnVsbCBzaXplZCBwYWNrZXRzIHBlciB0eCBidWZmZXIgKD4gMCkgKi8KKyNkZWZpbmUgQ1RSTF9RVUVVRQkJMTYJLyogTWF4IGNvbnRyb2wgcmVxdWVzdHMgaW4gZmxpZ2h0IChwb3dlciBvZiB0d28pICovCisjZGVmaW5lIFJYX1BLVF9TWgkJMTYwMAkvKiBNYXggc2l6ZSBvZiByZWNlaXZlIHBhY2tldCBmb3IgRjVVMDExICovCisKKy8qCisgKiBDb250cm9sIHJlcXVlc3RzLgorICovCisKK2VudW0gY29udHJvbF9yZXF1ZXN0cyB7CisJUmVhZE1lbSA9CTB4ZjEsCisJR2V0TWFjID0JMHhmMiwKKwlSZXNldCA9CQkweGY0LAorCVNldE1hYyA9CTB4ZjUsCisJU2V0UnhNb2RlID0gICAgIDB4ZjUsICAvKiBGNVUwMTEgb25seSAqLworCVdyaXRlUk9NID0JMHhmOCwKKwlTZXRSZWcgPQkweGZhLAorCUdldFJlZyA9CTB4ZmIsCisJV3JpdGVNZW0gPQkweGZjLAorCVJlYWRST00gPQkweGZkLAorfTsKKworLyoKKyAqIFJlZ2lzdGVycy4KKyAqLworCitlbnVtIHJlZ2lzdGVyX29mZnNldHMgeworCVR4QnVmQ291bnQgPQkweDIwLAorCVJ4QnVmQ291bnQgPQkweDIxLAorCU9wTW9kZXMgPQkweDIyLAorCVR4UWVkID0JCTB4MjMsCisJUnhRZWQgPQkJMHgyNCwKKwlNYXhCdXJzdCA9CTB4MjUsCisJUnhVbml0ID0JMHg2MCwKKwlFdGhTdGF0dXMgPQkweDYxLAorCVN0YXRpb25BZGRyMCA9CTB4NjcsCisJRXRoU3RhdHMgPQkweDY5LAorCUxFREN0cmwgPQkweDgxLAorfTsKKworZW51bSBldGhfc3RhdHMgeworCVR4U2luZ2xlQ29sbCA9CTB4MDAsCisgICAgICAgIFR4TXVsdGlDb2xsID0JMHgwMiwKKyAgICAgICAgVHhFeGNlc3NDb2xsID0JMHgwNCwKKyAgICAgICAgUnhGcmFtRXJyID0JMHgwNiwKK307CisKK2VudW0gb3BfbW9kZV9iaXRzIHsKKwlPcDNNZW1XYWl0cyA9CTB4MDMsCisJT3BMZW5JbmNsdWRlID0JMHgwOCwKKwlPcFJ4TWVyZ2UgPQkweDEwLAorCU9wVHhNZXJnZSA9CTB4MjAsCisJT3BXaW45NWJ1Z2ZpeCA9CTB4NDAsCisJT3BMb29wYmFjayA9CTB4ODAsCit9OworCitlbnVtIHJ4X2ZpbHRlcl9iaXRzIHsKKwlSeEVuYWJsZSA9CTB4MDEsCisJUnhQb2xhcml0eSA9CTB4MDIsCisJUnhGb3JjZU9LID0JMHgwNCwKKwlSeE11bHRpQ2FzdCA9CTB4MDgsCisJUnhQcm9taXNjID0JMHgxMCwKKwlBbHRSeFByb21pc2MgPSAgMHgyMCwgLyogRjVVMDExIHVzZXMgZGlmZmVyZW50IGJpdCAqLworfTsKKworZW51bSBsZWRfdmFsdWVzIHsKKwlMRURGYXN0ID0gCTB4MDEsCisJTEVEU2xvdyA9CTB4MDIsCisJTEVERmxhc2ggPQkweDAzLAorCUxFRFB1bHNlID0JMHgwNCwKKwlMRURMaW5rID0JMHgwOCwKK307CisKK2VudW0gbGlua19zdGF0dXMgeworCUxpbmtOb0NoYW5nZSA9IDAsCisJTGlua0dvb2QgICAgID0gMSwKKwlMaW5rQmFkICAgICAgPSAyCit9OworCisvKgorICogVGhlIGNhdGMgc3RydWN0LgorICovCisKKyNkZWZpbmUgQ1RSTF9SVU5OSU5HCTAKKyNkZWZpbmUgUlhfUlVOTklORwkxCisjZGVmaW5lIFRYX1JVTk5JTkcJMgorCitzdHJ1Y3QgY2F0YyB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXVuc2lnbmVkIGludCB0eF9wdHIsIHR4X2lkeDsKKwl1bnNpZ25lZCBpbnQgY3RybF9oZWFkLCBjdHJsX3RhaWw7CisJc3BpbmxvY2tfdCB0eF9sb2NrLCBjdHJsX2xvY2s7CisKKwl1OCB0eF9idWZbMl1bVFhfTUFYX0JVUlNUICogKFBLVF9TWiArIDIpXTsKKwl1OCByeF9idWZbUlhfTUFYX0JVUlNUICogKFBLVF9TWiArIDIpXTsKKwl1OCBpcnFfYnVmWzJdOworCXU4IGN0cmxfYnVmWzY0XTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGN0cmxfZHI7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwl1OCBzdGF0c19idWZbOF07CisJdTE2IHN0YXRzX3ZhbHNbNF07CisJdW5zaWduZWQgbG9uZyBsYXN0X3N0YXRzOworCisJdTggbXVsdGljYXN0WzY0XTsKKworCXN0cnVjdCBjdHJsX3F1ZXVlIHsKKwkJdTggZGlyOworCQl1OCByZXF1ZXN0OworCQl1MTYgdmFsdWU7CisJCXUxNiBpbmRleDsKKwkJdm9pZCAqYnVmOworCQlpbnQgbGVuOworCQl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjYXRjICpjYXRjLCBzdHJ1Y3QgY3RybF9xdWV1ZSAqcSk7CisJfSBjdHJsX3F1ZXVlW0NUUkxfUVVFVUVdOworCisJc3RydWN0IHVyYiAqdHhfdXJiLCAqcnhfdXJiLCAqaXJxX3VyYiwgKmN0cmxfdXJiOworCisJdTggaXNfZjV1MDExOwkvKiBTZXQgaWYgZGV2aWNlIGlzIGFuIEY1VTAxMSAqLworCXU4IHJ4bW9kZVsyXTsJLyogVXNlZCBmb3IgRjVVMDExICovCisJYXRvbWljX3QgcmVjcV9zejsgLyogVXNlZCBmb3IgRjVVMDExIC0gY291bnRlciBvZiB3YWl0aW5nIHJ4IHBhY2tldHMgKi8KK307CisKKy8qCisgKiBVc2VmdWwgbWFjcm9zLgorICovCisKKyNkZWZpbmUgY2F0Y19nZXRfbWFjKGNhdGMsIG1hYykJCQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX0lOLCAgR2V0TWFjLCAwLCAwLCBtYWMsICA2KQorI2RlZmluZSBjYXRjX3Jlc2V0KGNhdGMpCQkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9PVVQsIFJlc2V0LCAwLCAwLCBOVUxMLCAwKQorI2RlZmluZSBjYXRjX3NldF9yZWcoY2F0YywgcmVnLCB2YWwpCQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX09VVCwgU2V0UmVnLCB2YWwsIHJlZywgTlVMTCwgMCkKKyNkZWZpbmUgY2F0Y19nZXRfcmVnKGNhdGMsIHJlZywgYnVmKQkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9JTiwgIEdldFJlZywgMCwgcmVnLCBidWYsIDEpCisjZGVmaW5lIGNhdGNfd3JpdGVfbWVtKGNhdGMsIGFkZHIsIGJ1Ziwgc2l6ZSkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9PVVQsIFdyaXRlTWVtLCAwLCBhZGRyLCBidWYsIHNpemUpCisjZGVmaW5lIGNhdGNfcmVhZF9tZW0oY2F0YywgYWRkciwgYnVmLCBzaXplKQkJY2F0Y19jdHJsX21zZyhjYXRjLCBVU0JfRElSX0lOLCAgUmVhZE1lbSwgMCwgYWRkciwgYnVmLCBzaXplKQorCisjZGVmaW5lIGY1dTAxMV9yeG1vZGUoY2F0Yywgcnhtb2RlKQkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9PVVQsIFNldFJ4TW9kZSwgMCwgMSwgcnhtb2RlLCAyKQorI2RlZmluZSBmNXUwMTFfcnhtb2RlX2FzeW5jKGNhdGMsIHJ4bW9kZSkJCWNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgU2V0UnhNb2RlLCAwLCAxLCAmcnhtb2RlLCAyLCBOVUxMKQorI2RlZmluZSBmNXUwMTFfbWNoYXNoX2FzeW5jKGNhdGMsIGhhc2gpCQkJY2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfT1VULCBTZXRSeE1vZGUsIDAsIDIsICZoYXNoLCA4LCBOVUxMKQorCisjZGVmaW5lIGNhdGNfc2V0X3JlZ19hc3luYyhjYXRjLCByZWcsIHZhbCkJCWNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgU2V0UmVnLCB2YWwsIHJlZywgTlVMTCwgMCwgTlVMTCkKKyNkZWZpbmUgY2F0Y19nZXRfcmVnX2FzeW5jKGNhdGMsIHJlZywgY2IpCQljYXRjX2N0cmxfYXN5bmMoY2F0YywgVVNCX0RJUl9JTiwgR2V0UmVnLCAwLCByZWcsIE5VTEwsIDEsIGNiKQorI2RlZmluZSBjYXRjX3dyaXRlX21lbV9hc3luYyhjYXRjLCBhZGRyLCBidWYsIHNpemUpCWNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgV3JpdGVNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSwgTlVMTCkKKworLyoKKyAqIFJlY2VpdmUgcm91dGluZXMuCisgKi8KKworc3RhdGljIHZvaWQgY2F0Y19yeF9kb25lKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSB1cmItPmNvbnRleHQ7CisJdTggKnBrdF9zdGFydCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHBrdF9sZW4sIHBrdF9vZmZzZXQgPSAwOworCisJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKKwkJY2xlYXJfYml0KFJYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CisJCXBrdF9vZmZzZXQgPSAyOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoInJ4X2RvbmUsIHN0YXR1cyAlZCwgbGVuZ3RoICVkIiwgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCXJldHVybjsKKwl9CisKKwlkbyB7CisJCWlmKCFjYXRjLT5pc19mNXUwMTEpIHsKKwkJCXBrdF9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiopcGt0X3N0YXJ0KTsKKwkJCWlmIChwa3RfbGVuID4gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkJY2F0Yy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWNhdGMtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJcGt0X2xlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJfQorCisJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKQorCQkJcmV0dXJuOworCisJCXNrYi0+ZGV2ID0gY2F0Yy0+bmV0ZGV2OworCQlldGhfY29weV9hbmRfc3VtKHNrYiwgcGt0X3N0YXJ0ICsgcGt0X29mZnNldCwgcGt0X2xlbiwgMCk7CisJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKKworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjYXRjLT5uZXRkZXYpOworCQluZXRpZl9yeChza2IpOworCisJCWNhdGMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJY2F0Yy0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKworCQkvKiBGNVUwMTEgb25seSBkb2VzIG9uZSBwYWNrZXQgcGVyIFJYICovCisJCWlmIChjYXRjLT5pc19mNXUwMTEpCisJCQlicmVhazsKKwkJcGt0X3N0YXJ0ICs9ICgoKHBrdF9sZW4gKyAxKSA+PiA2KSArIDEpIDw8IDY7CisKKwl9IHdoaWxlIChwa3Rfc3RhcnQgLSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIgPCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJY2F0Yy0+bmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCWlmIChjYXRjLT5pc19mNXUwMTEpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZjYXRjLT5yZWNxX3N6KSkgeworCQkJaW50IHN0YXR1czsKKwkJCWF0b21pY19kZWMoJmNhdGMtPnJlY3Ffc3opOworCQkJZGJnKCJnZXR0aW5nIGV4dHJhIHBhY2tldCIpOworCQkJdXJiLT5kZXYgPSBjYXRjLT51c2JkZXY7CisJCQlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIDwgMCkgeworCQkJCWRiZygic3VibWl0KHJ4X3VyYikgc3RhdHVzICVkIiwgc3RhdHVzKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdChSWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjYXRjX2lycV9kb25lKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSB1cmItPmNvbnRleHQ7CisJdTggKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBoYXNkYXRhID0gMCwgbGlua3N0cyA9IExpbmtOb0NoYW5nZTsKKworCWlmICghY2F0Yy0+aXNfZjV1MDExKSB7CisJCWhhc2RhdGEgPSBkYXRhWzFdICYgMHg4MDsKKwkJaWYgKGRhdGFbMV0gJiAweDQwKQorCQkJbGlua3N0cyA9IExpbmtHb29kOworCQllbHNlIGlmIChkYXRhWzFdICYgMHgyMCkKKwkJCWxpbmtzdHMgPSBMaW5rQmFkOworCX0gZWxzZSB7CisJCWhhc2RhdGEgPSAodW5zaWduZWQgaW50KShiZTE2X3RvX2NwdXAoKF9fYmUxNiopZGF0YSkgJiAweDBmZmYpOworCQlpZiAoZGF0YVswXSA9PSAweDkwKQorCQkJbGlua3N0cyA9IExpbmtHb29kOworCQllbHNlIGlmIChkYXRhWzBdID09IDB4QTApCisJCQlsaW5rc3RzID0gTGlua0JhZDsKKwl9CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlkYmcoImlycV9kb25lLCBzdGF0dXMgJWQsIGRhdGEgJTAyeCAlMDJ4LiIsIHVyYi0+c3RhdHVzLCBkYXRhWzBdLCBkYXRhWzFdKTsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlpZiAobGlua3N0cyA9PSBMaW5rR29vZCkgeworCQluZXRpZl9jYXJyaWVyX29uKGNhdGMtPm5ldGRldik7CisJCWRiZygibGluayBvayIpOworCX0KKworCWlmIChsaW5rc3RzID09IExpbmtCYWQpIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYoY2F0Yy0+bmV0ZGV2KTsKKwkJZGJnKCJsaW5rIGJhZCIpOworCX0KKworCWlmIChoYXNkYXRhKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KFJYX1JVTk5JTkcsICZjYXRjLT5mbGFncykpIHsKKwkJCWlmIChjYXRjLT5pc19mNXUwMTEpCisJCQkJYXRvbWljX2luYygmY2F0Yy0+cmVjcV9zeik7CisJCX0gZWxzZSB7CisJCQljYXRjLT5yeF91cmItPmRldiA9IGNhdGMtPnVzYmRldjsKKwkJCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoY2F0Yy0+cnhfdXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CisJCQkJZXJyKCJzdWJtaXQocnhfdXJiKSBzdGF0dXMgJWQiLCBzdGF0dXMpOworCQkJfQorCQl9IAorCX0KK3Jlc3VibWl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcywgc3RhdHVzICVkIiwKKwkJCQljYXRjLT51c2JkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkJY2F0Yy0+dXNiZGV2LT5kZXZwYXRoLCBzdGF0dXMpOworfQorCisvKgorICogVHJhbnNtaXQgcm91dGluZXMuCisgKi8KKworc3RhdGljIHZvaWQgY2F0Y190eF9ydW4oc3RydWN0IGNhdGMgKmNhdGMpCit7CisJaW50IHN0YXR1czsKKworCWlmIChjYXRjLT5pc19mNXUwMTEpCisJCWNhdGMtPnR4X3B0ciA9IChjYXRjLT50eF9wdHIgKyA2MykgJiB+NjM7CisKKwljYXRjLT50eF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjYXRjLT50eF9wdHI7CisJY2F0Yy0+dHhfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBjYXRjLT50eF9idWZbY2F0Yy0+dHhfaWR4XTsKKwljYXRjLT50eF91cmItPmRldiA9IGNhdGMtPnVzYmRldjsKKworCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoY2F0Yy0+dHhfdXJiLCBHRlBfQVRPTUlDKSkgPCAwKQorCQllcnIoInN1Ym1pdCh0eF91cmIpLCBzdGF0dXMgJWQiLCBzdGF0dXMpOworCisJY2F0Yy0+dHhfaWR4ID0gIWNhdGMtPnR4X2lkeDsKKwljYXRjLT50eF9wdHIgPSAwOworCisJY2F0Yy0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfdHhfZG9uZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKwkJZGJnKCJUeCBSZXNldC4iKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX0FTWU5DX1VOTElOSzsKKwkJdXJiLT5zdGF0dXMgPSAwOworCQljYXRjLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzKys7CisJCWNsZWFyX2JpdChUWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOworCQluZXRpZl93YWtlX3F1ZXVlKGNhdGMtPm5ldGRldik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCJ0eF9kb25lLCBzdGF0dXMgJWQsIGxlbmd0aCAlZCIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKKworCWlmIChjYXRjLT50eF9wdHIpCisJCWNhdGNfdHhfcnVuKGNhdGMpOworCWVsc2UKKwkJY2xlYXJfYml0KFRYX1JVTk5JTkcsICZjYXRjLT5mbGFncyk7CisKKwluZXRpZl93YWtlX3F1ZXVlKGNhdGMtPm5ldGRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY2F0Y19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICp0eF9idWY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOworCisJY2F0Yy0+dHhfcHRyID0gKCgoY2F0Yy0+dHhfcHRyIC0gMSkgPj4gNikgKyAxKSA8PCA2OworCXR4X2J1ZiA9IGNhdGMtPnR4X2J1ZltjYXRjLT50eF9pZHhdICsgY2F0Yy0+dHhfcHRyOworCSooKHUxNiopdHhfYnVmKSA9IChjYXRjLT5pc19mNXUwMTEpID8gY3B1X3RvX2JlMTYoKHUxNilza2ItPmxlbikgOiBjcHVfdG9fbGUxNigodTE2KXNrYi0+bGVuKTsKKwltZW1jcHkodHhfYnVmICsgMiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJY2F0Yy0+dHhfcHRyICs9IHNrYi0+bGVuICsgMjsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChUWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpKQorCQljYXRjX3R4X3J1bihjYXRjKTsKKworCWlmICgoY2F0Yy0+aXNfZjV1MDExICYmIGNhdGMtPnR4X3B0cikKKwkgICAgIHx8IChjYXRjLT50eF9wdHIgPj0gKChUWF9NQVhfQlVSU1QgLSAxKSAqIChQS1RfU1ogKyAyKSkpKQorCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7CisKKwljYXRjLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwljYXRjLT5zdGF0cy50eF9wYWNrZXRzKys7CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2F0Y190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJd2FybigiVHJhbnNtaXQgdGltZWQgb3V0LiIpOworCWNhdGMtPnR4X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1c2JfdW5saW5rX3VyYihjYXRjLT50eF91cmIpOworfQorCisvKgorICogQ29udHJvbCBtZXNzYWdlcy4KKyAqLworCitzdGF0aWMgaW50IGNhdGNfY3RybF9tc2coc3RydWN0IGNhdGMgKmNhdGMsIHU4IGRpciwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICAgICAgaW50IHJldHZhbCA9IHVzYl9jb250cm9sX21zZyhjYXRjLT51c2JkZXYsCisJCWRpciA/IHVzYl9yY3ZjdHJscGlwZShjYXRjLT51c2JkZXYsIDApIDogdXNiX3NuZGN0cmxwaXBlKGNhdGMtPnVzYmRldiwgMCksCisJCSByZXF1ZXN0LCAweDQwIHwgZGlyLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCAxMDAwKTsKKyAgICAgICAgcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworfQorCitzdGF0aWMgdm9pZCBjYXRjX2N0cmxfcnVuKHN0cnVjdCBjYXRjICpjYXRjKQoreworCXN0cnVjdCBjdHJsX3F1ZXVlICpxID0gY2F0Yy0+Y3RybF9xdWV1ZSArIGNhdGMtPmN0cmxfdGFpbDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gY2F0Yy0+dXNiZGV2OworCXN0cnVjdCB1cmIgKnVyYiA9IGNhdGMtPmN0cmxfdXJiOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyID0gJmNhdGMtPmN0cmxfZHI7CisJaW50IHN0YXR1czsKKworCWRyLT5iUmVxdWVzdCA9IHEtPnJlcXVlc3Q7CisJZHItPmJSZXF1ZXN0VHlwZSA9IDB4NDAgfCBxLT5kaXI7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KHEtPnZhbHVlKTsKKwlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYocS0+aW5kZXgpOworCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYocS0+bGVuKTsKKworICAgICAgICB1cmItPnBpcGUgPSBxLT5kaXIgPyB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZSh1c2JkZXYsIDApOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHEtPmxlbjsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhdGMtPmN0cmxfYnVmOworCXVyYi0+c2V0dXBfcGFja2V0ID0gKHZvaWQgKikgZHI7CisJdXJiLT5kZXYgPSB1c2JkZXY7CisKKwlpZiAoIXEtPmRpciAmJiBxLT5idWYgJiYgcS0+bGVuKQorCQltZW1jcHkoY2F0Yy0+Y3RybF9idWYsIHEtPmJ1ZiwgcS0+bGVuKTsKKworCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoY2F0Yy0+Y3RybF91cmIsIEdGUF9LRVJORUwpKSkKKwkJZXJyKCJzdWJtaXQoY3RybF91cmIpIHN0YXR1cyAlZCIsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfY3RybF9kb25lKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGN0cmxfcXVldWUgKnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1cmItPnN0YXR1cykKKwkJZGJnKCJjdHJsX2RvbmUsIHN0YXR1cyAlZCwgbGVuICVkLiIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhdGMtPmN0cmxfbG9jaywgZmxhZ3MpOworCisJcSA9IGNhdGMtPmN0cmxfcXVldWUgKyBjYXRjLT5jdHJsX3RhaWw7CisKKwlpZiAocS0+ZGlyKSB7CisJCWlmIChxLT5idWYgJiYgcS0+bGVuKQorCQkJbWVtY3B5KHEtPmJ1ZiwgY2F0Yy0+Y3RybF9idWYsIHEtPmxlbik7CisJCWVsc2UKKwkJCXEtPmJ1ZiA9IGNhdGMtPmN0cmxfYnVmOworCX0KKworCWlmIChxLT5jYWxsYmFjaykKKwkJcS0+Y2FsbGJhY2soY2F0YywgcSk7CisKKwljYXRjLT5jdHJsX3RhaWwgPSAoY2F0Yy0+Y3RybF90YWlsICsgMSkgJiAoQ1RSTF9RVUVVRSAtIDEpOworCisJaWYgKGNhdGMtPmN0cmxfaGVhZCAhPSBjYXRjLT5jdHJsX3RhaWwpCisJCWNhdGNfY3RybF9ydW4oY2F0Yyk7CisJZWxzZQorCQljbGVhcl9iaXQoQ1RSTF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+Y3RybF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY2F0Y19jdHJsX2FzeW5jKHN0cnVjdCBjYXRjICpjYXRjLCB1OCBkaXIsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSwKKwl1MTYgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY2F0YyAqY2F0Yywgc3RydWN0IGN0cmxfcXVldWUgKnEpKQoreworCXN0cnVjdCBjdHJsX3F1ZXVlICpxOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2F0Yy0+Y3RybF9sb2NrLCBmbGFncyk7CisJCisJcSA9IGNhdGMtPmN0cmxfcXVldWUgKyBjYXRjLT5jdHJsX2hlYWQ7CisKKwlxLT5kaXIgPSBkaXI7CisJcS0+cmVxdWVzdCA9IHJlcXVlc3Q7CisJcS0+dmFsdWUgPSB2YWx1ZTsKKwlxLT5pbmRleCA9IGluZGV4OworCXEtPmJ1ZiA9IGJ1ZjsKKwlxLT5sZW4gPSBsZW47CisJcS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKworCWNhdGMtPmN0cmxfaGVhZCA9IChjYXRjLT5jdHJsX2hlYWQgKyAxKSAmIChDVFJMX1FVRVVFIC0gMSk7CisKKwlpZiAoY2F0Yy0+Y3RybF9oZWFkID09IGNhdGMtPmN0cmxfdGFpbCkgeworCQllcnIoImN0cmwgcXVldWUgZnVsbCIpOworCQljYXRjLT5jdHJsX3RhaWwgPSAoY2F0Yy0+Y3RybF90YWlsICsgMSkgJiAoQ1RSTF9RVUVVRSAtIDEpOworCQlyZXR2YWwgPSAtMTsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQ1RSTF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpKQorCQljYXRjX2N0cmxfcnVuKGNhdGMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+Y3RybF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogU3RhdGlzdGljcy4KKyAqLworCitzdGF0aWMgdm9pZCBjYXRjX3N0YXRzX2RvbmUoc3RydWN0IGNhdGMgKmNhdGMsIHN0cnVjdCBjdHJsX3F1ZXVlICpxKQoreworCWludCBpbmRleCA9IHEtPmluZGV4IC0gRXRoU3RhdHM7CisJdTE2IGRhdGEsIGxhc3Q7CisKKwljYXRjLT5zdGF0c19idWZbaW5kZXhdID0gKigoY2hhciAqKXEtPmJ1Zik7CisKKwlpZiAoaW5kZXggJiAxKQorCQlyZXR1cm47CisKKwlkYXRhID0gKCh1MTYpY2F0Yy0+c3RhdHNfYnVmW2luZGV4XSA8PCA4KSB8IGNhdGMtPnN0YXRzX2J1ZltpbmRleCArIDFdOworCWxhc3QgPSBjYXRjLT5zdGF0c192YWxzW2luZGV4ID4+IDFdOworCisJc3dpdGNoIChpbmRleCkgeworCQljYXNlIFR4U2luZ2xlQ29sbDoKKwkJY2FzZSBUeE11bHRpQ29sbDoKKwkJCWNhdGMtPnN0YXRzLmNvbGxpc2lvbnMgKz0gZGF0YSAtIGxhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBUeEV4Y2Vzc0NvbGw6CisJCQljYXRjLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPnN0YXRzLnR4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWJyZWFrOworCQljYXNlIFJ4RnJhbUVycjoKKwkJCWNhdGMtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPnN0YXRzLnJ4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWJyZWFrOworCX0KKworCWNhdGMtPnN0YXRzX3ZhbHNbaW5kZXggPj4gMV0gPSBkYXRhOworfQorCitzdGF0aWMgdm9pZCBjYXRjX3N0YXRzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9ICh2b2lkICopIGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQljYXRjX2dldF9yZWdfYXN5bmMoY2F0YywgRXRoU3RhdHMgKyA3IC0gaSwgY2F0Y19zdGF0c19kb25lKTsKKworCW1vZF90aW1lcigmY2F0Yy0+dGltZXIsIGppZmZpZXMgKyBTVEFUU19VUERBVEUpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNhdGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAmY2F0Yy0+c3RhdHM7Cit9CisKKy8qCisgKiBSZWNlaXZlIG1vZGVzLiBCcm9hZGNhc3QsIE11bHRpY2FzdCwgUHJvbWlzYy4KKyAqLworCitzdGF0aWMgdm9pZCBjYXRjX211bHRpY2FzdCh1bnNpZ25lZCBjaGFyICphZGRyLCB1OCAqbXVsdGljYXN0KQoreworCXUzMiBjcmM7CisKKwljcmMgPSBldGhlcl9jcmNfbGUoNiwgYWRkcik7CisJbXVsdGljYXN0WyhjcmMgPj4gMykgJiAweDNmXSB8PSAxIDw8IChjcmMgJiA3KTsKK30KKworc3RhdGljIHZvaWQgY2F0Y19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGRldl9tY19saXN0ICptYzsKKwl1OCBicm9hZGNhc3RbNl07CisJdTggcnggPSBSeEVuYWJsZSB8IFJ4UG9sYXJpdHkgfCBSeE11bHRpQ2FzdDsKKwlpbnQgaTsKKworCW1lbXNldChicm9hZGNhc3QsIDB4ZmYsIDYpOworCW1lbXNldChjYXRjLT5tdWx0aWNhc3QsIDAsIDY0KTsKKworCWNhdGNfbXVsdGljYXN0KGJyb2FkY2FzdCwgY2F0Yy0+bXVsdGljYXN0KTsKKwljYXRjX211bHRpY2FzdChuZXRkZXYtPmRldl9hZGRyLCBjYXRjLT5tdWx0aWNhc3QpOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAweGZmLCA2NCk7CisJCXJ4IHw9ICghY2F0Yy0+aXNfZjV1MDExKSA/IFJ4UHJvbWlzYyA6IEFsdFJ4UHJvbWlzYzsKKwl9IAorCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJbWVtc2V0KGNhdGMtPm11bHRpY2FzdCwgMHhmZiwgNjQpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDAsIG1jID0gbmV0ZGV2LT5tY19saXN0OyBtYyAmJiBpIDwgbmV0ZGV2LT5tY19jb3VudDsgaSsrLCBtYyA9IG1jLT5uZXh0KSB7CisJCQl1MzIgY3JjID0gZXRoZXJfY3JjX2xlKDYsIG1jLT5kbWlfYWRkcik7CisJCQlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkgeworCQkJCWNhdGMtPm11bHRpY2FzdFsoY3JjID4+IDMpICYgMHgzZl0gfD0gMSA8PCAoY3JjICYgNyk7CisJCQl9IGVsc2UgeworCQkJCWNhdGMtPm11bHRpY2FzdFs3LShjcmMgPj4gMjkpXSB8PSAxIDw8ICgoY3JjID4+IDI2KSAmIDcpOworCQkJfQorCQl9CisJfQorCWlmICghY2F0Yy0+aXNfZjV1MDExKSB7CisJCWNhdGNfc2V0X3JlZ19hc3luYyhjYXRjLCBSeFVuaXQsIHJ4KTsKKwkJY2F0Y193cml0ZV9tZW1fYXN5bmMoY2F0YywgMHhmYTgwLCBjYXRjLT5tdWx0aWNhc3QsIDY0KTsKKwl9IGVsc2UgeworCQlmNXUwMTFfbWNoYXNoX2FzeW5jKGNhdGMsIGNhdGMtPm11bHRpY2FzdCk7CisJCWlmIChjYXRjLT5yeG1vZGVbMF0gIT0gcngpIHsKKwkJCWNhdGMtPnJ4bW9kZVswXSA9IHJ4OworCQkJZGJnKCJTZXR0aW5nIFJYIG1vZGUgdG8gJTIuMlggJTIuMlgiLCBjYXRjLT5yeG1vZGVbMF0sIGNhdGMtPnJ4bW9kZVsxXSk7CisJCQlmNXUwMTFfcnhtb2RlX2FzeW5jKGNhdGMsIGNhdGMtPnJ4bW9kZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KGRldik7CisJc3RybmNweShpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBFVEhUT09MX0JVU0lORk9fTEVOKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBFVEhUT09MX0JVU0lORk9fTEVOKTsKKwl1c2JfbWFrZV9wYXRoIChjYXRjLT51c2JkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YgaW5mby0+YnVzX2luZm8pOworfQorCitzdGF0aWMgaW50IGNhdGNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEX1RQOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfVFA7CisJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJY21kLT5wb3J0ID0gUE9SVF9UUDsgCisJY21kLT5waHlfYWRkcmVzcyA9IDA7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCWNtZC0+bWF4dHhwa3QgPSAxOworCWNtZC0+bWF4cnhwa3QgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBjYXRjX2dldF9kcnZpbmZvLAorCS5nZXRfc2V0dGluZ3MgPSBjYXRjX2dldF9zZXR0aW5ncywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rCit9OworCisvKgorICogT3BlbiwgY2xvc2UuCisgKi8KKworc3RhdGljIGludCBjYXRjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHN0YXR1czsKKworCWNhdGMtPmlycV91cmItPmRldiA9IGNhdGMtPnVzYmRldjsKKwlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGNhdGMtPmlycV91cmIsIEdGUF9LRVJORUwpKSA8IDApIHsKKwkJZXJyKCJzdWJtaXQoaXJxX3VyYikgc3RhdHVzICVkIiwgc3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkKKwkJbW9kX3RpbWVyKCZjYXRjLT50aW1lciwgamlmZmllcyArIFNUQVRTX1VQREFURSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXRjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkKKwkJZGVsX3RpbWVyX3N5bmMoJmNhdGMtPnRpbWVyKTsKKworCXVzYl9raWxsX3VyYihjYXRjLT5yeF91cmIpOworCXVzYl9raWxsX3VyYihjYXRjLT50eF91cmIpOworCXVzYl9raWxsX3VyYihjYXRjLT5pcnFfdXJiKTsKKwl1c2Jfa2lsbF91cmIoY2F0Yy0+Y3RybF91cmIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVU0IgcHJvYmUsIGRpc2Nvbm5lY3QuCisgKi8KKworc3RhdGljIGludCBjYXRjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgY2F0YyAqY2F0YzsKKwl1OCBicm9hZGNhc3RbNl07CisJaW50IGksIHBrdHN6OworCisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKHVzYmRldiwKKwkJCWludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwgMSkpIHsKKyAgICAgICAgICAgICAgICBlcnIoIkNhbid0IHNldCBhbHRzZXR0aW5nIDEuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgY2F0YykpOworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0ZGV2LT5vcGVuID0gY2F0Y19vcGVuOworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gY2F0Y19oYXJkX3N0YXJ0X3htaXQ7CisJbmV0ZGV2LT5zdG9wID0gY2F0Y19zdG9wOworCW5ldGRldi0+Z2V0X3N0YXRzID0gY2F0Y19nZXRfc3RhdHM7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gY2F0Y190eF90aW1lb3V0OworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOworCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gY2F0Y19zZXRfbXVsdGljYXN0X2xpc3Q7CisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CisKKwljYXRjLT51c2JkZXYgPSB1c2JkZXY7CisJY2F0Yy0+bmV0ZGV2ID0gbmV0ZGV2OworCisJc3Bpbl9sb2NrX2luaXQoJmNhdGMtPnR4X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjYXRjLT5jdHJsX2xvY2spOworCisJaW5pdF90aW1lcigmY2F0Yy0+dGltZXIpOworCWNhdGMtPnRpbWVyLmRhdGEgPSAobG9uZykgY2F0YzsKKwljYXRjLT50aW1lci5mdW5jdGlvbiA9IGNhdGNfc3RhdHNfdGltZXI7CisKKwljYXRjLT5jdHJsX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJY2F0Yy0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwljYXRjLT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWNhdGMtPmlycV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgoIWNhdGMtPmN0cmxfdXJiKSB8fCAoIWNhdGMtPnR4X3VyYikgfHwgCisJICAgICghY2F0Yy0+cnhfdXJiKSB8fCAoIWNhdGMtPmlycV91cmIpKSB7CisJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZS4iKTsKKwkJaWYgKGNhdGMtPmN0cmxfdXJiKQorCQkJdXNiX2ZyZWVfdXJiKGNhdGMtPmN0cmxfdXJiKTsKKwkJaWYgKGNhdGMtPnR4X3VyYikKKwkJCXVzYl9mcmVlX3VyYihjYXRjLT50eF91cmIpOworCQlpZiAoY2F0Yy0+cnhfdXJiKQorCQkJdXNiX2ZyZWVfdXJiKGNhdGMtPnJ4X3VyYik7CisJCWlmIChjYXRjLT5pcnFfdXJiKQorCQkJdXNiX2ZyZWVfdXJiKGNhdGMtPmlycV91cmIpOworCQlmcmVlX25ldGRldihuZXRkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBUaGUgRjVVMDExIGhhcyB0aGUgc2FtZSB2ZW5kb3IvcHJvZHVjdCBhcyB0aGUgbmV0bWF0ZSBidXQgYSBkZXZpY2UgdmVyc2lvbiBvZiAweDEzMCAqLworCWlmIChsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQyMyAmJiAKKwkgICAgbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHhhICYmCisJICAgIGxlMTZfdG9fY3B1KGNhdGMtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpID09IDB4MDEzMCkgeworCQlkYmcoIlRlc3RpbmcgZm9yIGY1dTAxMSIpOworCQljYXRjLT5pc19mNXUwMTEgPSAxOwkJCisJCWF0b21pY19zZXQoJmNhdGMtPnJlY3Ffc3osIDApOworCQlwa3RzeiA9IFJYX1BLVF9TWjsKKwl9IGVsc2UgeworCQlwa3RzeiA9IFJYX01BWF9CVVJTVCAqIChQS1RfU1ogKyAyKTsKKwl9CisJCisJdXNiX2ZpbGxfY29udHJvbF91cmIoY2F0Yy0+Y3RybF91cmIsIHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksCisJCU5VTEwsIE5VTEwsIDAsIGNhdGNfY3RybF9kb25lLCBjYXRjKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKGNhdGMtPnR4X3VyYiwgdXNiZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiZGV2LCAxKSwKKwkJTlVMTCwgMCwgY2F0Y190eF9kb25lLCBjYXRjKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKGNhdGMtPnJ4X3VyYiwgdXNiZGV2LCB1c2JfcmN2YnVsa3BpcGUodXNiZGV2LCAxKSwKKwkJY2F0Yy0+cnhfYnVmLCBwa3RzeiwgY2F0Y19yeF9kb25lLCBjYXRjKTsKKworCXVzYl9maWxsX2ludF91cmIoY2F0Yy0+aXJxX3VyYiwgdXNiZGV2LCB1c2JfcmN2aW50cGlwZSh1c2JkZXYsIDIpLAorICAgICAgICAgICAgICAgIGNhdGMtPmlycV9idWYsIDIsIGNhdGNfaXJxX2RvbmUsIGNhdGMsIDEpOworCisJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKKwkJZGJnKCJDaGVja2luZyBtZW1vcnkgc2l6ZVxuIik7CisKKwkJaSA9IDB4MTIzNDU2Nzg7CisJCWNhdGNfd3JpdGVfbWVtKGNhdGMsIDB4N2E4MCwgJmksIDQpOworCQlpID0gMHg4NzY1NDMyMTsJCisJCWNhdGNfd3JpdGVfbWVtKGNhdGMsIDB4ZmE4MCwgJmksIDQpOworCQljYXRjX3JlYWRfbWVtKGNhdGMsIDB4N2E4MCwgJmksIDQpOworCSAgCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDB4MTIzNDU2Nzg6CisJCQljYXRjX3NldF9yZWcoY2F0YywgVHhCdWZDb3VudCwgOCk7CisJCQljYXRjX3NldF9yZWcoY2F0YywgUnhCdWZDb3VudCwgMzIpOworCQkJZGJnKCI2NGsgTWVtb3J5XG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd2FybigiQ291bGRuJ3QgZGV0ZWN0IG1lbW9yeSBzaXplLCBhc3N1bWluZyAzMmsiKTsKKwkJY2FzZSAweDg3NjU0MzIxOgorCQkJY2F0Y19zZXRfcmVnKGNhdGMsIFR4QnVmQ291bnQsIDQpOworCQkJY2F0Y19zZXRfcmVnKGNhdGMsIFJ4QnVmQ291bnQsIDE2KTsKKwkJCWRiZygiMzJrIE1lbW9yeVxuIik7CisJCQlicmVhazsKKwkJfQorCSAgCisJCWRiZygiR2V0dGluZyBNQUMgZnJvbSBTRUVST00uIik7CisJICAKKwkJY2F0Y19nZXRfbWFjKGNhdGMsIG5ldGRldi0+ZGV2X2FkZHIpOworCQkKKwkJZGJnKCJTZXR0aW5nIE1BQyBpbnRvIHJlZ2lzdGVycy4iKTsKKwkgIAorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJY2F0Y19zZXRfcmVnKGNhdGMsIFN0YXRpb25BZGRyMCAtIGksIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCQkKKwkJZGJnKCJGaWxsaW5nIHRoZSBtdWx0aWNhc3QgbGlzdC4iKTsKKwkgIAorCQltZW1zZXQoYnJvYWRjYXN0LCAweGZmLCA2KTsKKwkJY2F0Y19tdWx0aWNhc3QoYnJvYWRjYXN0LCBjYXRjLT5tdWx0aWNhc3QpOworCQljYXRjX211bHRpY2FzdChuZXRkZXYtPmRldl9hZGRyLCBjYXRjLT5tdWx0aWNhc3QpOworCQljYXRjX3dyaXRlX21lbShjYXRjLCAweGZhODAsIGNhdGMtPm11bHRpY2FzdCwgNjQpOworCQkKKwkJZGJnKCJDbGVhcmluZyBlcnJvciBjb3VudGVycy4iKTsKKwkJCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQljYXRjX3NldF9yZWcoY2F0YywgRXRoU3RhdHMgKyBpLCAwKTsKKwkJY2F0Yy0+bGFzdF9zdGF0cyA9IGppZmZpZXM7CisJCQorCQlkYmcoIkVuYWJsaW5nLiIpOworCQkKKwkJY2F0Y19zZXRfcmVnKGNhdGMsIE1heEJ1cnN0LCBSWF9NQVhfQlVSU1QpOworCQljYXRjX3NldF9yZWcoY2F0YywgT3BNb2RlcywgT3BUeE1lcmdlIHwgT3BSeE1lcmdlIHwgT3BMZW5JbmNsdWRlIHwgT3AzTWVtV2FpdHMpOworCQljYXRjX3NldF9yZWcoY2F0YywgTEVEQ3RybCwgTEVETGluayk7CisJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeFVuaXQsIFJ4RW5hYmxlIHwgUnhQb2xhcml0eSB8IFJ4TXVsdGlDYXN0KTsKKwl9IGVsc2UgeworCQlkYmcoIlBlcmZvcm1pbmcgcmVzZXRcbiIpOworCQljYXRjX3Jlc2V0KGNhdGMpOworCQljYXRjX2dldF9tYWMoY2F0YywgbmV0ZGV2LT5kZXZfYWRkcik7CisJCQorCQlkYmcoIlNldHRpbmcgUlggTW9kZSIpOworCQljYXRjLT5yeG1vZGVbMF0gPSBSeEVuYWJsZSB8IFJ4UG9sYXJpdHkgfCBSeE11bHRpQ2FzdDsKKwkJY2F0Yy0+cnhtb2RlWzFdID0gMDsKKwkJZjV1MDExX3J4bW9kZShjYXRjLCBjYXRjLT5yeG1vZGUpOworCX0KKwlkYmcoIkluaXQgZG9uZS4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgVVNCIEV0aGVybmV0IGF0IHVzYi0lcy0lcywgIiwKKwkgICAgICAgbmV0ZGV2LT5uYW1lLCAoY2F0Yy0+aXNfZjV1MDExKSA/ICJCZWxraW4gRjVVMDExIiA6ICJDQVRDIEVMMTIxMEEgTmV0TWF0ZSIsCisJICAgICAgIHVzYmRldi0+YnVzLT5idXNfbmFtZSwgdXNiZGV2LT5kZXZwYXRoKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSBwcmludGsoIiUyLjJ4OiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCXByaW50aygiJTIuMnguXG4iLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhdGMpOworCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmaW50Zi0+ZGV2KTsKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikgIT0gMCkgeworCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+Y3RybF91cmIpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT5pcnFfdXJiKTsKKwkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjYXRjX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAoY2F0YykgeworCQl1bnJlZ2lzdGVyX25ldGRldihjYXRjLT5uZXRkZXYpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+Y3RybF91cmIpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT5pcnFfdXJiKTsKKwkJZnJlZV9uZXRkZXYoY2F0Yy0+bmV0ZGV2KTsKKwl9Cit9CisKKy8qCisgKiBNb2R1bGUgZnVuY3Rpb25zIGFuZCB0YWJsZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNhdGNfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDQyMywgMHhhKSB9LAkvKiBDQVRDIE5ldG1hdGUsIEJlbGtpbiBGNVUwMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDIzLCAweGMpIH0sCS8qIENBVEMgTmV0bWF0ZSBJSSwgQmVsa2luIEY1VTExMSAqLworCXsgVVNCX0RFVklDRSgweDA4ZDEsIDB4MSkgfSwJLyogc21hcnRCcmlkZ2VzIHNtYXJ0TklDICovCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2F0Y19pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjYXRjX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQlkcml2ZXJfbmFtZSwKKwkucHJvYmUgPQljYXRjX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JY2F0Y19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWNhdGNfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjYXRjX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjYXRjX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNhdGNfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjYXRjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNhdGNfaW5pdCk7Cittb2R1bGVfZXhpdChjYXRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTdjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMKQEAgLTAsMCArMSwxMjcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICBrYXdldGguYyAtIGRyaXZlciBmb3IgS0w1S1VTQjEwMSBiYXNlZCBVU0ItPkV0aGVybmV0CisgKgorICogICAgIChjKSAyMDAwIEludGVybGFuIENvbW11bmljYXRpb25zCisgKiAgICAgKGMpIDIwMDAgU3RlcGhhbmUgQWxuZXQKKyAqICAgICAoQykgMjAwMSBCcmFkIEhhcmRzCisgKiAgICAgKEMpIDIwMDIgT2xpdmVyIE5ldWt1bQorICoKKyAqICAgICBPcmlnaW5hbCBhdXRob3I6IFRoZSBaYXBtYW4gPHphcG1hbkBpbnRlcmxhbi5uZXQ+CisgKiAgICAgSW5zcGlyZWQgYnksIGFuZCBtdWNoIGNyZWRpdCBnb2VzIHRvIE1pY2hhZWwgUm90aHdlbGwKKyAqICAgICA8cm90aHdlbGxAaW50ZXJsYW4ubmV0PiBmb3IgdGhlIHRlc3QgZXF1aXBtZW50LCBoZWxwLCBhbmQgcGF0aWVuY2UKKyAqICAgICBCYXNlZCBvZmYgb2YgKGFuZCB3aXRoIHRoYW5rcyB0bykgUGV0a28gTWFub2xvdidzIHBlZ2F1cy5jIGRyaXZlci4KKyAqICAgICBBbHNvIG1hbnkgdGhhbmtzIHRvIEpvZWwgU2lsdmVybWFuIGFuZCBFZCBTdXJwcmVuYW50IGF0IEthd2FzYWtpCisgKiAgICAgZm9yIHByb3ZpZGluZyB0aGUgZmlybXdhcmUgYW5kIGRyaXZlciByZXNvdXJjZXMuCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvcgorICogICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqICAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUT0RPOgorICogRml4IGluX2ludGVycnVwdCgpIHByb2JsZW0KKyAqIERldmVsb3AgdGVzdCBwcm9jZWR1cmVzIGZvciBVU0IgbmV0IGludGVyZmFjZXMKKyAqIFJ1biB0ZXN0IHByb2NlZHVyZXMKKyAqIEZpeCBidWdzIGZyb20gcHJldmlvdXMgdHdvIHN0ZXBzCisgKiBTbm9vcCBvdGhlciBPU3MgZm9yIGFueSB0cmlja3Mgd2UncmUgbm90IGRvaW5nCisgKiBTTVAgbG9ja2luZworICogUmVkdWNlIGFyYml0cmFyeSB0aW1lb3V0cworICogU21hcnQgbXVsdGljYXN0IHN1cHBvcnQKKyAqIFRlbXBvcmFyeSBNQUMgY2hhbmdlIHN1cHBvcnQKKyAqIFR1bmFibGUgU09GcyBwYXJhbWV0ZXIgLSBpb2N0bCgpPworICogRXRoZXJuZXQgc3RhdHMgY29sbGVjdGlvbgorICogQ29kZSBmb3JtYXR0aW5nIGltcHJvdmVtZW50cworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBrYXdldGhfZGJnKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iICwjI2FyZykKKyNlbHNlCisjZGVmaW5lIGthd2V0aF9kYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisjZGVmaW5lIGthd2V0aF9lcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iICwjI2FyZykKKyNkZWZpbmUga2F3ZXRoX2luZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gX19GSUxFX18gIjogIiBmb3JtYXQgIlxuIiAsICMjYXJnKQorI2RlZmluZSBrYXdldGhfd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iICwgIyNhcmcpCisKKworI2luY2x1ZGUgImthd2V0aGZ3LmgiCisKKyNkZWZpbmUgS0FXRVRIX01UVQkJCTE1MTQKKyNkZWZpbmUgS0FXRVRIX0JVRl9TSVpFCQkJMTY2NAorI2RlZmluZSBLQVdFVEhfVFhfVElNRU9VVAkJKDUgKiBIWikKKyNkZWZpbmUgS0FXRVRIX1NDUkFUQ0hfU0laRQkJMzIKKyNkZWZpbmUgS0FXRVRIX0ZJUk1XQVJFX0JVRl9TSVpFCTQwOTYKKyNkZWZpbmUgS0FXRVRIX0NPTlRST0xfVElNRU9VVAkJKDMwICogSFopCisKKyNkZWZpbmUgS0FXRVRIX1NUQVRVU19CUk9LRU4JCTB4MDAwMDAwMQorI2RlZmluZSBLQVdFVEhfU1RBVFVTX0NMT1NJTkcJCTB4MDAwMDAwMgorCisjZGVmaW5lIEtBV0VUSF9QQUNLRVRfRklMVEVSX1BST01JU0NVT1VTCTB4MDEKKyNkZWZpbmUgS0FXRVRIX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVAkweDAyCisjZGVmaW5lIEtBV0VUSF9QQUNLRVRfRklMVEVSX0RJUkVDVEVECQkweDA0CisjZGVmaW5lIEtBV0VUSF9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVAkJMHgwOAorI2RlZmluZSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9NVUxUSUNBU1QJCTB4MTAKKworLyogVGFibGUgNyAqLworI2RlZmluZSBLQVdFVEhfQ09NTUFORF9HRVRfRVRIRVJORVRfREVTQwkweDAwCisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX01VTFRJQ0FTVF9GSUxURVJTICAgICAgICAweDAxCisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX1NFVF9QQUNLRVRfRklMVEVSCTB4MDIKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfU1RBVElTVElDUyAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfU0VUX1RFTVBfTUFDICAgICAJMHgwNgorI2RlZmluZSBLQVdFVEhfQ09NTUFORF9HRVRfVEVNUF9NQUMgICAgICAgICAgICAgMHgwNworI2RlZmluZSBLQVdFVEhfQ09NTUFORF9TRVRfVVJCX1NJWkUJCTB4MDgKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfU0VUX1NPRlNfV0FJVAkJMHgwOQorI2RlZmluZSBLQVdFVEhfQ09NTUFORF9TQ0FOCQkJMHhGRgorCisjZGVmaW5lIEtBV0VUSF9TT0ZTX1RPX1dBSVQJCQkweDA1CisKKyNkZWZpbmUgSU5UQlVGRkVSU0laRQkJCQk0CisKKyNkZWZpbmUgU1RBVEVfT0ZGU0VUCQkJCTAKKyNkZWZpbmUgU1RBVEVfTUFTSwkJCQkweDQwCisjZGVmaW5lCVNUQVRFX1NISUZUCQkJCTUKKworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFphcHBlIDx6YXBtYW5AaW50ZXJsYW4ubmV0PiwgU3RlcGhhbmUgQWxuZXQgPHN0ZXBoYW5lQHUtcGljYXJkaWUuZnI+LCBCcmFkIEhhcmRzIDxiaGFyZHNAYmlncG9uZC5uZXQuYXU+IGFuZCBPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiS0w1VVNCMTAxIFVTQiBFdGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJrYXdldGgiOworCitzdGF0aWMgaW50IGthd2V0aF9wcm9iZSgKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZAkvKiBmcm9tIGlkX3RhYmxlICovCisJKTsKK3N0YXRpYyB2b2lkIGthd2V0aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQga2F3ZXRoX2ludGVybmFsX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCQkgICAgICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kLCB2b2lkICpkYXRhLAorCQkJCSAgICAgICBpbnQgbGVuLCBpbnQgdGltZW91dCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgdXNiX2RldmljZV9pZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2tsc2lfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwM2U4LCAweDAwMDgpIH0sIC8qIEFPWCBFbmRwb2ludHMgVVNCIEV0aGVybmV0ICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTAxKSB9LCAvKiBJLU8gREFUQSBVU0ItRVQvVCAqLworCXsgVVNCX0RFVklDRSgweDA1MDYsIDB4MDNlOCkgfSwgLyogM0NvbSAzQzE5MjUwICovCisJeyBVU0JfREVWSUNFKDB4MDUwNiwgMHgxMWY4KSB9LCAvKiAzQ29tIDNDNDYwICovCisJeyBVU0JfREVWSUNFKDB4MDU1NywgMHgyMDAyKSB9LCAvKiBBVEVOIFVTQiBFdGhlcm5ldCAqLworCXsgVVNCX0RFVklDRSgweDA1NTcsIDB4NDAwMCkgfSwgLyogRC1MaW5rIERTQi02NTBDICovCisJeyBVU0JfREVWSUNFKDB4MDU2NSwgMHgwMDAyKSB9LCAvKiBQZXJhY29tIEVuZXQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTY1LCAweDAwMDMpIH0sIC8qIE9wdHVzQEhvbWUgVUVQMTA0NUEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTY1LCAweDAwMDUpIH0sIC8qIFBlcmFjb20gRW5ldDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWU5LCAweDAwMDgpIH0sIC8qIEtMU0kgS0w1S1VTQjEwMUIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWU5LCAweDAwMDkpIH0sIC8qIEtMU0kgS0w1S1VTQjEwMUIgKEJvYXJkIGNoYW5nZSkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMDIpIH0sIC8qIExpbmtzeXMgVVNCMTBUICovCisJeyBVU0JfREVWSUNFKDB4MDZlMSwgMHgwMDA4KSB9LCAvKiBBRFMgVVNCLTEwQlQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNmUxLCAweDAwMDkpIH0sIC8qIEFEUyBVU0ItMTBCVCAqLworCXsgVVNCX0RFVklDRSgweDA3MDcsIDB4MDEwMCkgfSwgLyogU01DIDIyMDJVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMDEpIH0sIC8qIENvcnJlZ2EgSy5LLiAqLworCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4NDAwMCkgfSwgLyogRC1MaW5rIERVLUUxMCAqLworCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4MTAwMSkgfSwgLyogTmV0R2VhciBFQS0xMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDEwMDIpIH0sIC8qIE5ldEdlYXIgRUEtMTAxICovCisJeyBVU0JfREVWSUNFKDB4MDg1YSwgMHgwMDA4KSB9LCAvKiBQb3J0R2VhciBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MDg1YSwgMHgwMDA5KSB9LCAvKiBQb3J0R2VhciBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MDg3ZCwgMHg1NzA0KSB9LCAvKiBKYXRvbiBVU0IgRXRoZXJuZXQgRGV2aWNlIEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTUxLCAweDAwMDgpIH0sIC8qIEtpbmdzdG9uIFRlY2hub2xvZ3kgVVNCIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTVhLCAweDMwMDMpIH0sIC8qIFBvcnRzbWl0aCBFeHByZXNzIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMGJkLCAweDE0MjcpIH0sIC8qIEFTQU5URSBVU0IgVG8gRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDEzNDIsIDB4MDIwNCkgfSwgLyogTW9iaWxpdHkgVVNCLUV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2QyLCAweDA0MDApIH0sIC8qIFNoYXJrIFBvY2tldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MTQ4NSwgMHgwMDAxKSB9LAkvKiBTaWxpY29tIFUyRSAqLworCXsgVVNCX0RFVklDRSgweDE0ODUsIDB4MDAwMikgfSwgLyogUHNpb24gRGFjb20gR29sZCBQb3J0IEV0aGVybmV0ICovCisJeyBVU0JfREVWSUNFKDB4MTY0NSwgMHgwMDA1KSB9LCAvKiBFbnRyZWdhIEU0NSAqLworCXsgVVNCX0RFVklDRSgweDE2NDUsIDB4MDAwOCkgfSwgLyogRW50cmVnYSBVU0IgRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDE2NDUsIDB4ODAwNSkgfSwgLyogUG9ydEdlYXIgRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4NDAwMCkgfSwgLyogRC1saW5rIERTQi02NTBDICovCisJe30gLyogTnVsbCB0ZXJtaW5hdG9yICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9rbHNpX3RhYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfZHJpdmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrYXdldGhfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCWRyaXZlcl9uYW1lLAorCS5wcm9iZSA9CWthd2V0aF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWthd2V0aF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9ICAgICB1c2Jfa2xzaV90YWJsZSwKK307CisKK3R5cGVkZWYgX191OCBldGhfYWRkcl90WzZdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIHVzYl9ldGhfZGV2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCB1c2JfZXRoX2RldiB7CisJY2hhciAqbmFtZTsKKwlfX3UxNiB2ZW5kb3I7CisJX191MTYgZGV2aWNlOworCXZvaWQgKnBkYXRhOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfZXRoZXJuZXRfY29uZmlndXJhdGlvbgorICogICAgIFJlZmVyIFRhYmxlIDgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGthd2V0aF9ldGhlcm5ldF9jb25maWd1cmF0aW9uCit7CisJX191OCBzaXplOworCV9fdTggcmVzZXJ2ZWQxOworCV9fdTggcmVzZXJ2ZWQyOworCWV0aF9hZGRyX3QgaHdfYWRkcjsKKwlfX3UzMiBzdGF0aXN0aWNzX21hc2s7CisJX19sZTE2IHNlZ21lbnRfc2l6ZTsKKwlfX3UxNiBtYXhfbXVsdGljYXN0X2ZpbHRlcnM7CisJX191OCByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBrYXdldGhfZGV2aWNlCit7CisJc3BpbmxvY2tfdCBkZXZpY2VfbG9jazsKKworCV9fdTMyIHN0YXR1czsKKwlpbnQgZW5kOworCWludCByZW1vdmVkOworCWludCBzdXNwZW5kX2xvd21lbV9yeDsKKwlpbnQgc3VzcGVuZF9sb3dtZW1fY3RybDsKKwlpbnQgbGlua3N0YXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsb3dtZW1fd29yazsKKworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB0ZXJtX3dhaXQ7CisKKwlzdHJ1Y3QgdXJiICpyeF91cmI7CisJc3RydWN0IHVyYiAqdHhfdXJiOworCXN0cnVjdCB1cmIgKmlycV91cmI7CisKKwlkbWFfYWRkcl90IGludGJ1ZmZlcmhhbmRsZTsKKwlfX3U4ICppbnRidWZmZXI7CisJZG1hX2FkZHJfdCByeGJ1ZmZlcmhhbmRsZTsKKwlfX3U4ICpyeF9idWY7CisKKwkKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOworCisJX191OCAqZmlybXdhcmVfYnVmOworCV9fdTggc2NyYXRjaFtLQVdFVEhfU0NSQVRDSF9TSVpFXTsKKwlfX3UxNiBwYWNrZXRfZmlsdGVyX2JpdG1hcDsKKworCXN0cnVjdCBrYXdldGhfZXRoZXJuZXRfY29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOworCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Cit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2NvbnRyb2wKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfY29udHJvbChzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLAorCQkJICB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCSAgX191OCByZXF1ZXN0LAorCQkJICBfX3U4IHJlcXVlc3R0eXBlLAorCQkJICBfX3UxNiB2YWx1ZSwKKwkJCSAgX191MTYgaW5kZXgsCisJCQkgIHZvaWQgKmRhdGEsCisJCQkgIF9fdTE2IHNpemUsCisJCQkgIGludCB0aW1lb3V0KQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOworCisJa2F3ZXRoX2RiZygia2F3ZXRoX2NvbnRyb2woKSIpOworCisJaWYoaW5faW50ZXJydXB0KCkpIHsKKwkJa2F3ZXRoX2RiZygiaW5faW50ZXJydXB0KCkiKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfQVRPTUlDKTsKKworCWlmICghZHIpIHsKKwkJa2F3ZXRoX2RiZygia21hbGxvYygpIGZhaWxlZCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkci0+YlJlcXVlc3RUeXBlPSByZXF1ZXN0dHlwZTsKKwlkci0+YlJlcXVlc3QgPSByZXF1ZXN0OworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNnAoJnZhbHVlKTsKKwlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTZwKCZpbmRleCk7CisJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNnAoJnNpemUpOworCisJcmV0dXJuIGthd2V0aF9pbnRlcm5hbF9jb250cm9sX21zZyhrYXdldGgtPmRldiwKKwkJCQkJcGlwZSwKKwkJCQkJZHIsCisJCQkJCWRhdGEsCisJCQkJCXNpemUsCisJCQkJCXRpbWVvdXQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9yZWFkX2NvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfcmVhZF9jb25maWd1cmF0aW9uKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgpCit7CisJaW50IHJldHZhbDsKKworCWthd2V0aF9kYmcoIlJlYWRpbmcga2F3ZXRoIGNvbmZpZ3VyYXRpb24iKTsKKworCXJldHZhbCA9IGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCQl1c2JfcmN2Y3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJCUtBV0VUSF9DT01NQU5EX0dFVF9FVEhFUk5FVF9ERVNDLAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCTAsCisJCQkJMCwKKwkJCQkodm9pZCAqKSZrYXdldGgtPmNvbmZpZ3VyYXRpb24sCisJCQkJc2l6ZW9mKGthd2V0aC0+Y29uZmlndXJhdGlvbiksCisJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9zZXRfdXJiX3NpemUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfc2V0X3VyYl9zaXplKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsIF9fdTE2IHVyYl9zaXplKQoreworCWludCByZXR2YWw7CisKKwlrYXdldGhfZGJnKCJTZXR0aW5nIFVSQiBzaXplIHRvICVkIiwgKHVuc2lnbmVkKXVyYl9zaXplKTsKKworCXJldHZhbCA9IGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCQl1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJCUtBV0VUSF9DT01NQU5EX1NFVF9VUkJfU0laRSwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJdXJiX3NpemUsCisJCQkJMCwKKwkJCQkodm9pZCAqKSZrYXdldGgtPnNjcmF0Y2gsCisJCQkJMCwKKwkJCQlLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3NldF9zb2ZzX3dhaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfc2V0X3NvZnNfd2FpdChzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLCBfX3UxNiBzb2ZzX3dhaXQpCit7CisJaW50IHJldHZhbDsKKworCWthd2V0aF9kYmcoIlNldCBTT0ZTIHdhaXQgdG8gJWQiLCAodW5zaWduZWQpc29mc193YWl0KTsKKworCXJldHZhbCA9IGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCQl1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJCUtBV0VUSF9DT01NQU5EX1NFVF9TT0ZTX1dBSVQsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCXNvZnNfd2FpdCwKKwkJCQkwLAorCQkJCSh2b2lkICopJmthd2V0aC0+c2NyYXRjaCwKKwkJCQkwLAorCQkJCUtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfc2V0X3JlY2VpdmVfZmlsdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3NldF9yZWNlaXZlX2ZpbHRlcihzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLAorCQkJCSAgICAgX191MTYgcmVjZWl2ZV9maWx0ZXIpCit7CisJaW50IHJldHZhbDsKKworCWthd2V0aF9kYmcoIlNldCByZWNlaXZlIGZpbHRlciB0byAlZCIsICh1bnNpZ25lZClyZWNlaXZlX2ZpbHRlcik7CisKKwlyZXR2YWwgPSBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCQlLQVdFVEhfQ09NTUFORF9TRVRfUEFDS0VUX0ZJTFRFUiwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJcmVjZWl2ZV9maWx0ZXIsCisJCQkJMCwKKwkJCQkodm9pZCAqKSZrYXdldGgtPnNjcmF0Y2gsCisJCQkJMCwKKwkJCQlLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsCisJCQkJICAgIF9fdTggKmRhdGEsCisJCQkJICAgIF9fdTE2IGRhdGFfbGVuLAorCQkJCSAgICBfX3U4IGludGVycnVwdCwKKwkJCQkgICAgX191OCB0eXBlKQoreworCWlmKGRhdGFfbGVuID4gS0FXRVRIX0ZJUk1XQVJFX0JVRl9TSVpFKQl7CisJCWthd2V0aF9lcnIoIkZpcm13YXJlIHRvbyBiaWc6ICVkIiwgZGF0YV9sZW4pOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwltZW1jcHkoa2F3ZXRoLT5maXJtd2FyZV9idWYsIGRhdGEsIGRhdGFfbGVuKTsKKworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzJdID0gKGRhdGFfbGVuICYgMHhGRikgLSA3OworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzNdID0gZGF0YV9sZW4gPj4gODsKKwlrYXdldGgtPmZpcm13YXJlX2J1Zls0XSA9IHR5cGU7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbNV0gPSBpbnRlcnJ1cHQ7CisKKwlrYXdldGhfZGJnKCJIaWdoOiAlaSwgTG93OiVpIiwga2F3ZXRoLT5maXJtd2FyZV9idWZbM10sCisJCSAgIGthd2V0aC0+ZmlybXdhcmVfYnVmWzJdKTsKKworCWthd2V0aF9kYmcoIkRvd25sb2FkaW5nIGZpcm13YXJlIGF0ICVwIHRvIGthd2V0aCBkZXZpY2UgYXQgJXAiLAorCSAgICBkYXRhLAorCSAgICBrYXdldGgpOworCWthd2V0aF9kYmcoIkZpcm13YXJlIGxlbmd0aDogJWQiLCBkYXRhX2xlbik7CisKKwlyZXR1cm4ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkgICAgICAgICAgICAgIHVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkgICAgICBLQVdFVEhfQ09NTUFORF9TQ0FOLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMCwKKwkJCSAgICAgIDAsCisJCQkgICAgICAodm9pZCAqKWthd2V0aC0+ZmlybXdhcmVfYnVmLAorCQkJICAgICAgZGF0YV9sZW4sCisJCQkgICAgICBLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfdHJpZ2dlcl9maXJtd2FyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF90cmlnZ2VyX2Zpcm13YXJlKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsCisJCQkJICAgX191OCBpbnRlcnJ1cHQpCit7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbMF0gPSAweEI2OworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzFdID0gMHhDMzsKKwlrYXdldGgtPmZpcm13YXJlX2J1ZlsyXSA9IDB4MDE7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbM10gPSAweDAwOworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzRdID0gMHgwNjsKKwlrYXdldGgtPmZpcm13YXJlX2J1Zls1XSA9IGludGVycnVwdDsKKwlrYXdldGgtPmZpcm13YXJlX2J1Zls2XSA9IDB4MDA7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbN10gPSAweDAwOworCisJa2F3ZXRoX2RiZygiVHJpZ2dlcmluZyBmaXJtd2FyZSIpOworCisJcmV0dXJuIGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkgICAgICBLQVdFVEhfQ09NTUFORF9TQ0FOLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMCwKKwkJCSAgICAgIDAsCisJCQkgICAgICAodm9pZCAqKWthd2V0aC0+ZmlybXdhcmVfYnVmLAorCQkJICAgICAgOCwKKwkJCSAgICAgIEtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9yZXNldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9yZXNldChzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoKQoreworCWludCByZXN1bHQ7CisKKwlrYXdldGhfZGJnKCJrYXdldGhfcmVzZXQoJXApIiwga2F3ZXRoKTsKKwlyZXN1bHQgPSBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLAorCQkJCTAsCisJCQkJa2F3ZXRoLT5kZXYtPmNvbmZpZ1swXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsCisJCQkJMCwKKwkJCQlOVUxMLAorCQkJCTAsCisJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CisKKwl1ZGVsYXkoMTAwMDApOworCisJa2F3ZXRoX2RiZygia2F3ZXRoX3Jlc2V0KCkgcmV0dXJucyAlZC4iLHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBrYXdldGhfdXNiX3JlY2VpdmUoc3RydWN0IHVyYiAqLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50IGthd2V0aF9yZXN1Ym1pdF9yeF91cmIoc3RydWN0IGthd2V0aF9kZXZpY2UgKiwgaW50KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlpbnRfY2FsbGJhY2sKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBrYXdldGhfcmVzdWJtaXRfaW50X3VyYihzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLCBpbnQgbWYpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiIChrYXdldGgtPmlycV91cmIsIG1mKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzID09IC1FTk9NRU0pKSB7CisJCWthd2V0aC0+c3VzcGVuZF9sb3dtZW1fY3RybCA9IDE7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygma2F3ZXRoLT5sb3dtZW1fd29yaywgSFovNCk7CisJfSBlbHNlIHsKKwkJa2F3ZXRoLT5zdXNwZW5kX2xvd21lbV9jdHJsID0gMDsKKwl9CisKKwlpZiAoc3RhdHVzKQorCQllcnIgKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcywgc3RhdHVzICVkIiwKKwkJCQlrYXdldGgtPmRldi0+YnVzLT5idXNfbmFtZSwKKwkJCQlrYXdldGgtPmRldi0+ZGV2cGF0aCwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1LT5jb250ZXh0OworCWludCBhY3Rfc3RhdGU7CisKKwlzd2l0Y2ggKHUtPnN0YXR1cykgeworCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsKKwkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KKwlkZWZhdWx0OgkJLyogZXJyb3IgKi8KKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwkvKiB3ZSBjaGVjayB0aGUgbGluayBzdGF0ZSB0byByZXBvcnQgY2hhbmdlcyAqLworCWlmIChrYXdldGgtPmxpbmtzdGF0ZSAhPSAoYWN0X3N0YXRlID0gKCBrYXdldGgtPmludGJ1ZmZlcltTVEFURV9PRkZTRVRdIHwgU1RBVEVfTUFTSykgPj4gU1RBVEVfU0hJRlQpKSB7CisJCWlmICghYWN0X3N0YXRlKQorCQkJbmV0aWZfY2Fycmllcl9vbihrYXdldGgtPm5ldCk7CisJCWVsc2UKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGthd2V0aC0+bmV0KTsKKworCQlrYXdldGgtPmxpbmtzdGF0ZSA9IGFjdF9zdGF0ZTsKKwl9CityZXN1Ym1pdDoKKwlrYXdldGhfcmVzdWJtaXRfaW50X3VyYihrYXdldGgsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgdm9pZCBrYXdldGhfcmVzdWJtaXRfdGwodm9pZCAqZCkKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gKHN0cnVjdCBrYXdldGhfZGV2aWNlICopZDsKKworCWlmIChrYXdldGgtPnN0YXR1cyB8IEtBV0VUSF9TVEFUVVNfQ0xPU0lORykKKwkJcmV0dXJuOworCisJaWYgKGthd2V0aC0+c3VzcGVuZF9sb3dtZW1fcngpCisJCWthd2V0aF9yZXN1Ym1pdF9yeF91cmIoa2F3ZXRoLCBHRlBfTk9JTyk7CisKKwlpZiAoa2F3ZXRoLT5zdXNwZW5kX2xvd21lbV9jdHJsKQorCQlrYXdldGhfcmVzdWJtaXRfaW50X3VyYihrYXdldGgsIEdGUF9OT0lPKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9yZXN1Ym1pdF9yeF91cmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfcmVzdWJtaXRfcnhfdXJiKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgsCisJCQkJCQlpbnQgbWVtX2ZsYWdzKQoreworCWludCByZXN1bHQ7CisKKwl1c2JfZmlsbF9idWxrX3VyYihrYXdldGgtPnJ4X3VyYiwKKwkJICAgICAga2F3ZXRoLT5kZXYsCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShrYXdldGgtPmRldiwgMSksCisJCSAgICAgIGthd2V0aC0+cnhfYnVmLAorCQkgICAgICBLQVdFVEhfQlVGX1NJWkUsCisJCSAgICAgIGthd2V0aF91c2JfcmVjZWl2ZSwKKwkJICAgICAga2F3ZXRoKTsKKwlrYXdldGgtPnJ4X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJa2F3ZXRoLT5yeF91cmItPnRyYW5zZmVyX2RtYSA9IGthd2V0aC0+cnhidWZmZXJoYW5kbGU7CisKKwlpZigocmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoa2F3ZXRoLT5yeF91cmIsIG1lbV9mbGFncykpKSB7CisJCWlmIChyZXN1bHQgPT0gLUVOT01FTSkgeworCQkJa2F3ZXRoLT5zdXNwZW5kX2xvd21lbV9yeCA9IDE7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmthd2V0aC0+bG93bWVtX3dvcmssIEhaLzQpOworCQl9CisJCWthd2V0aF9lcnIoInJlc3VibWl0dGluZyByeF91cmIgJWQgZmFpbGVkIiwgcmVzdWx0KTsKKwl9IGVsc2UgeworCQlrYXdldGgtPnN1c3BlbmRfbG93bWVtX3J4ID0gMDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBrYXdldGhfYXN5bmNfc2V0X3J4X21vZGUoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3VzYl9yZWNlaXZlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGthd2V0aF91c2JfcmVjZWl2ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGthd2V0aC0+bmV0OworCisJaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBjb3VudDIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisKKwlfX3UxNiBwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYgKilrYXdldGgtPnJ4X2J1Zik7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCisJLyogd2UgYXJlIGtpbGxlZCAtIHNldCBhIGZsYWcgYW5kIHdha2UgdGhlIGRpc2Nvbm5lY3QgaGFuZGxlciAqLworCXsKKwkJa2F3ZXRoLT5lbmQgPSAxOworCQl3YWtlX3VwKCZrYXdldGgtPnRlcm1fd2FpdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoa2F3ZXRoLT5zdGF0dXMgJiBLQVdFVEhfU1RBVFVTX0NMT1NJTkcpCisJCXJldHVybjsKKworCWlmKHVyYi0+c3RhdHVzICYmIHVyYi0+c3RhdHVzICE9IC1FUkVNT1RFSU8gJiYgY291bnQgIT0gMSkgeworCQlrYXdldGhfZXJyKCIlcyBSWCBzdGF0dXM6ICVkIGNvdW50OiAlZCBwYWNrZXRfbGVuOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQtPm5hbWUsCisJCQkgICB1cmItPnN0YXR1cywKKwkJCSAgIGNvdW50LAorCQkJICAgKGludClwa3RfbGVuKTsKKwkJa2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihrYXdldGgsIEdGUF9BVE9NSUMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKwl9CisKKwlpZihrYXdldGgtPm5ldCAmJiAoY291bnQgPiAyKSkgeworCQlpZihwa3RfbGVuID4gKGNvdW50IC0gMikpIHsKKwkJCWthd2V0aF9lcnIoIlBhY2tldCBsZW5ndGggdG9vIGxvbmcgZm9yIFVTQiBmcmFtZSAocGt0X2xlbjogJXgsIGNvdW50OiAleCkiLHBrdF9sZW4sIGNvdW50KTsKKwkJCWthd2V0aF9lcnIoIlBhY2tldCBsZW4gJiAyMDQ3OiAleCIsIHBrdF9sZW4gJiAyMDQ3KTsKKwkJCWthd2V0aF9lcnIoIkNvdW50IDI6ICV4IiwgY291bnQyKTsKKwkJICAgICAgICBrYXdldGhfcmVzdWJtaXRfcnhfdXJiKGthd2V0aCwgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisJCWlmKCEoc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKzIpKSkgeworCQkgICAgICAgIGthd2V0aF9yZXN1Ym1pdF9yeF91cmIoa2F3ZXRoLCBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwkJfQorCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7ICAgIC8qIEFsaWduIElQIG9uIDE2IGJ5dGUgYm91bmRhcmllcyAqLworCisJCXNrYi0+ZGV2ID0gbmV0OworCisJCWV0aF9jb3B5X2FuZF9zdW0oc2tiLCBrYXdldGgtPnJ4X2J1ZiArIDIsIHBrdF9sZW4sIDApOworCisJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKKworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXQpOworCisJCW5ldGlmX3J4KHNrYik7CisKKwkJa2F3ZXRoLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWthd2V0aC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwl9CisKKwlrYXdldGhfcmVzdWJtaXRfcnhfdXJiKGthd2V0aCwgR0ZQX0FUT01JQyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX29wZW4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOworCWludCByZXM7CisKKwlrYXdldGhfZGJnKCJPcGVuaW5nIG5ldHdvcmsgZGV2aWNlLiIpOworCisJcmVzID0ga2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihrYXdldGgsIEdGUF9LRVJORUwpOworCWlmIChyZXMpCisJCXJldHVybiAtRUlPOworCisJdXNiX2ZpbGxfaW50X3VyYigKKwkJa2F3ZXRoLT5pcnFfdXJiLAorCQlrYXdldGgtPmRldiwKKwkJdXNiX3JjdmludHBpcGUoa2F3ZXRoLT5kZXYsIDMpLAorCQlrYXdldGgtPmludGJ1ZmZlciwKKwkJSU5UQlVGRkVSU0laRSwKKwkJaW50X2NhbGxiYWNrLAorCQlrYXdldGgsCisJCTI1MCk7IC8qIG92ZXJyaWRpbmcgdGhlIGRlc2NyaXB0b3IgKi8KKwlrYXdldGgtPmlycV91cmItPnRyYW5zZmVyX2RtYSA9IGthd2V0aC0+aW50YnVmZmVyaGFuZGxlOworCWthd2V0aC0+aXJxX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlyZXMgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPmlycV91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXMpIHsKKwkJdXNiX2tpbGxfdXJiKGthd2V0aC0+cnhfdXJiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKKworCWthd2V0aF9hc3luY19zZXRfcnhfbW9kZShrYXdldGgpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9jbG9zZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCisJa2F3ZXRoLT5zdGF0dXMgfD0gS0FXRVRIX1NUQVRVU19DTE9TSU5HOworCisJdXNiX2tpbGxfdXJiKGthd2V0aC0+aXJxX3VyYik7CisJdXNiX2tpbGxfdXJiKGthd2V0aC0+cnhfdXJiKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBhIHNjaGVkdWxlZCB3b3JrIG1heSBoYXZlIHJlc3VibWl0dGVkLAorCSAgIHdlIGhpdCB0aGVtIGFnYWluICovCisJdXNiX2tpbGxfdXJiKGthd2V0aC0+aXJxX3VyYik7CisJdXNiX2tpbGxfdXJiKGthd2V0aC0+cnhfdXJiKTsKKworCWthd2V0aC0+c3RhdHVzICY9IH5LQVdFVEhfU1RBVFVTX0NMT1NJTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2F3ZXRoX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisKKwlzdHJsY3B5KGluZm8tPmRyaXZlciwgZHJpdmVyX25hbWUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CisJLmdldF9kcnZpbmZvID0ga2F3ZXRoX2dldF9kcnZpbmZvCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF91c2JfdHJhbnNtaXRfY29tcGxldGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQga2F3ZXRoX3VzYl90cmFuc21pdF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGthd2V0aC0+dHhfc2tiOworCisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzICE9IDApKQorCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkKKwkJCWthd2V0aF9kYmcoIiVzOiBUWCBzdGF0dXMgJWQuIiwga2F3ZXRoLT5uZXQtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKworCW5ldGlmX3dha2VfcXVldWUoa2F3ZXRoLT5uZXQpOworCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3N0YXJ0X3htaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOworCV9fbGUxNiAqcHJpdmF0ZV9oZWFkZXI7CisKKwlpbnQgcmVzOworCisJc3Bpbl9sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKworCWlmIChrYXdldGgtPnJlbW92ZWQpIHsKKwkvKiBvdXIgZGV2aWNlIGlzIHVuZGVyZ29pbmcgZGlzY29ubmVjdGlvbiAtIHdlIGJhaWwgb3V0ICovCisJCXNwaW5fdW5sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJa2F3ZXRoX2FzeW5jX3NldF9yeF9tb2RlKGthd2V0aCk7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCisJLyogV2Ugbm93IGRlY2lkZSB3aGV0aGVyIHdlIGNhbiBwdXQgb3VyIHNwZWNpYWwgaGVhZGVyIGludG8gdGhlIHNrX2J1ZmYgKi8KKwlpZiAoc2tiX2Nsb25lZChza2IpIHx8IHNrYl9oZWFkcm9vbShza2IpIDwgMikgeworCQkvKiBubyBzdWNoIGx1Y2sgLSB3ZSBtYWtlIG91ciBvd24gKi8KKwkJc3RydWN0IHNrX2J1ZmYgKmNvcGllZF9za2I7CisJCWNvcGllZF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCAyLCAwLCBHRlBfQVRPTUlDKTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJc2tiID0gY29waWVkX3NrYjsKKwkJaWYgKCFjb3BpZWRfc2tiKSB7CisJCQlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKKwkJCXNwaW5fdW5sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcHJpdmF0ZV9oZWFkZXIgPSAoX19sZTE2ICopX19za2JfcHVzaChza2IsIDIpOworCSpwcml2YXRlX2hlYWRlciA9IGNwdV90b19sZTE2KHNrYi0+bGVuLTIpOworCWthd2V0aC0+dHhfc2tiID0gc2tiOworCisJdXNiX2ZpbGxfYnVsa191cmIoa2F3ZXRoLT50eF91cmIsCisJCSAgICAgIGthd2V0aC0+ZGV2LAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoa2F3ZXRoLT5kZXYsIDIpLAorCQkgICAgICBwcml2YXRlX2hlYWRlciwKKwkJICAgICAgc2tiLT5sZW4sCisJCSAgICAgIGthd2V0aF91c2JfdHJhbnNtaXRfY29tcGxldGUsCisJCSAgICAgIGthd2V0aCk7CisJa2F3ZXRoLT5lbmQgPSAwOworCWthd2V0aC0+dHhfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCisJaWYoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGthd2V0aC0+dHhfdXJiLCBHRlBfQVRPTUlDKSkpCisJeworCQlrYXdldGhfd2Fybigia2F3ZXRoIGZhaWxlZCB0eF91cmIgJWQiLCByZXMpOworCQlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOworCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJfQorCWVsc2UKKwl7CisJCWthd2V0aC0+c3RhdHMudHhfcGFja2V0cysrOworCQlrYXdldGgtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwl9CisKKwlzcGluX3VubG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfc2V0X3J4X21vZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQga2F3ZXRoX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlfX3UxNiBwYWNrZXRfZmlsdGVyX2JpdG1hcCA9IEtBV0VUSF9QQUNLRVRfRklMVEVSX0RJUkVDVEVEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9CUk9BRENBU1QgfAorCQkgICAgICAgICAgICAgICAgICAgICBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9NVUxUSUNBU1Q7CisKKwlrYXdldGhfZGJnKCJTZXR0aW5nIFJ4IG1vZGUgdG8gJWQiLCBwYWNrZXRfZmlsdGVyX2JpdG1hcCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisKKwlpZiAobmV0LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXBhY2tldF9maWx0ZXJfYml0bWFwIHw9IEtBV0VUSF9QQUNLRVRfRklMVEVSX1BST01JU0NVT1VTOworCX0KKwllbHNlIGlmICgobmV0LT5tY19jb3VudCkgfHwgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXBhY2tldF9maWx0ZXJfYml0bWFwIHw9IEtBV0VUSF9QQUNLRVRfRklMVEVSX0FMTF9NVUxUSUNBU1Q7CisJfQorCisJa2F3ZXRoLT5wYWNrZXRfZmlsdGVyX2JpdG1hcCA9IHBhY2tldF9maWx0ZXJfYml0bWFwOworCW5ldGlmX3dha2VfcXVldWUobmV0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfYXN5bmNfc2V0X3J4X21vZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQga2F3ZXRoX2FzeW5jX3NldF9yeF9tb2RlKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgpCit7CisJX191MTYgcGFja2V0X2ZpbHRlcl9iaXRtYXAgPSBrYXdldGgtPnBhY2tldF9maWx0ZXJfYml0bWFwOworCWthd2V0aC0+cGFja2V0X2ZpbHRlcl9iaXRtYXAgPSAwOworCWlmIChwYWNrZXRfZmlsdGVyX2JpdG1hcCA9PSAwKQorCQlyZXR1cm47CisKKwl7CisJaW50IHJlc3VsdDsKKwlyZXN1bHQgPSBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCQlLQVdFVEhfQ09NTUFORF9TRVRfUEFDS0VUX0ZJTFRFUiwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJcGFja2V0X2ZpbHRlcl9iaXRtYXAsCisJCQkJMCwKKwkJCQkodm9pZCAqKSZrYXdldGgtPnNjcmF0Y2gsCisJCQkJMCwKKwkJCQlLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKKworCWlmKHJlc3VsdCA8IDApIHsKKwkJa2F3ZXRoX2VycigiRmFpbGVkIHRvIHNldCBSeCBtb2RlOiAlZCIsIHJlc3VsdCk7CisJfQorCWVsc2UgeworCQlrYXdldGhfZGJnKCJTZXQgUnggbW9kZSB0byAlZCIsIHBhY2tldF9maWx0ZXJfYml0bWFwKTsKKwl9CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9uZXRkZXZfc3RhdHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICprYXdldGhfbmV0ZGV2X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuICZrYXdldGgtPnN0YXRzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF90eF90aW1lb3V0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGthd2V0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlrYXdldGhfd2FybigiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLiIsIG5ldC0+bmFtZSk7CisJa2F3ZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKKwluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXVzYl91bmxpbmtfdXJiKGthd2V0aC0+dHhfdXJiKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfcHJvYmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfcHJvYmUoCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQgICAgICAvKiBmcm9tIGlkX3RhYmxlICovCisJKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGg7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwljb25zdCBldGhfYWRkcl90IGJjYXN0X2FkZHIgPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWthd2V0aF9kYmcoIkthd2FzYWtpIERldmljZSBQcm9iZSAoRGV2aWNlIG51bWJlcjolZCk6IDB4JTQuNHg6MHglNC40eDoweCU0LjR4IiwKKwkJIGRldi0+ZGV2bnVtLAorCQkgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCisJa2F3ZXRoX2RiZygiRGV2aWNlIGF0ICVwIiwgZGV2KTsKKworCWthd2V0aF9kYmcoIkRlc2NyaXB0b3IgbGVuZ3RoOiAleCB0eXBlOiAleCIsCisJCSAoaW50KWRldi0+ZGVzY3JpcHRvci5iTGVuZ3RoLAorCQkgKGludClkZXYtPmRlc2NyaXB0b3IuYkRlc2NyaXB0b3JUeXBlKTsKKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqa2F3ZXRoKSk7CisJaWYgKCFuZXRkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlrYXdldGgtPmRldiA9IGRldjsKKwlrYXdldGgtPm5ldCA9IG5ldGRldjsKKworCXNwaW5fbG9ja19pbml0KCZrYXdldGgtPmRldmljZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZrYXdldGgtPnRlcm1fd2FpdCk7CisKKwlrYXdldGhfZGJnKCJSZXNldHRpbmcuIik7CisKKwlrYXdldGhfcmVzZXQoa2F3ZXRoKTsKKworCS8qCisJICogSWYgaGlnaCBieXRlIG9mIGJjZERldmljZSBpcyBub256ZXJvLCBmaXJtd2FyZSBpcyBhbHJlYWR5CisJICogZG93bmxvYWRlZC4gRG9uJ3QgdHJ5IHRvIGRvIGl0IGFnYWluLCBvciB3ZSdsbCBoYW5nIHRoZSBkZXZpY2UuCisJICovCisKKwlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPj4gOCkgeworCQlrYXdldGhfaW5mbygiRmlybXdhcmUgcHJlc2VudCBpbiBkZXZpY2UuIik7CisJfSBlbHNlIHsKKwkJLyogRG93bmxvYWQgdGhlIGZpcm13YXJlICovCisJCWthd2V0aF9pbmZvKCJEb3dubG9hZGluZyBmaXJtd2FyZS4uLiIpOworCQlrYXdldGgtPmZpcm13YXJlX2J1ZiA9IChfX3U4ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoKHJlc3VsdCA9IGthd2V0aF9kb3dubG9hZF9maXJtd2FyZShrYXdldGgsCisJCQkJCQkgICAgICBrYXdldGhfbmV3X2NvZGUsCisJCQkJCQkgICAgICBsZW5fa2F3ZXRoX25ld19jb2RlLAorCQkJCQkJICAgICAgMTAwLAorCQkJCQkJICAgICAgMikpIDwgMCkgeworCQkJa2F3ZXRoX2VycigiRXJyb3IgZG93bmxvYWRpbmcgZmlybXdhcmUgKCVkKSIsIHJlc3VsdCk7CisJCQlnb3RvIGVycl9mdzsKKwkJfQorCisJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKKwkJCQkJCSAgICAgIGthd2V0aF9uZXdfY29kZV9maXgsCisJCQkJCQkgICAgICBsZW5fa2F3ZXRoX25ld19jb2RlX2ZpeCwKKwkJCQkJCSAgICAgIDEwMCwKKwkJCQkJCSAgICAgIDMpKSA8IDApIHsKKwkJCWthd2V0aF9lcnIoIkVycm9yIGRvd25sb2FkaW5nIGZpcm13YXJlIGZpeCAoJWQpIiwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyX2Z3OworCQl9CisKKwkJaWYgKChyZXN1bHQgPSBrYXdldGhfZG93bmxvYWRfZmlybXdhcmUoa2F3ZXRoLAorCQkJCQkJICAgICAga2F3ZXRoX3RyaWdnZXJfY29kZSwKKwkJCQkJCSAgICAgIGxlbl9rYXdldGhfdHJpZ2dlcl9jb2RlLAorCQkJCQkJICAgICAgMTI2LAorCQkJCQkJICAgICAgMikpIDwgMCkgeworCQkJa2F3ZXRoX2VycigiRXJyb3IgZG93bmxvYWRpbmcgdHJpZ2dlciBjb2RlICglZCkiLCByZXN1bHQpOworCQkJZ290byBlcnJfZnc7CisKKwkJfQorCisJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKKwkJCQkJCSAgICAgIGthd2V0aF90cmlnZ2VyX2NvZGVfZml4LAorCQkJCQkJICAgICAgbGVuX2thd2V0aF90cmlnZ2VyX2NvZGVfZml4LAorCQkJCQkJICAgICAgMTI2LAorCQkJCQkJICAgICAgMykpIDwgMCkgeworCQkJa2F3ZXRoX2VycigiRXJyb3IgZG93bmxvYWRpbmcgdHJpZ2dlciBjb2RlIGZpeCAoJWQpIiwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyX2Z3OworCQl9CisKKworCQlpZiAoKHJlc3VsdCA9IGthd2V0aF90cmlnZ2VyX2Zpcm13YXJlKGthd2V0aCwgMTI2KSkgPCAwKSB7CisJCQlrYXdldGhfZXJyKCJFcnJvciB0cmlnZ2VyaW5nIGZpcm13YXJlICglZCkiLCByZXN1bHQpOworCQkJZ290byBlcnJfZnc7CisJCX0KKworCQkvKiBEZXZpY2Ugd2lsbCBub3cgZGlzYXBwZWFyIGZvciBhIG1vbWVudC4uLiAgKi8KKwkJa2F3ZXRoX2luZm8oIkZpcm13YXJlIGxvYWRlZC4gIEknbGwgYmUgYmFjay4uLiIpOworZXJyX2Z3OgorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2F3ZXRoLT5maXJtd2FyZV9idWYpOworCQlmcmVlX25ldGRldihuZXRkZXYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXN1bHQgPSBrYXdldGhfcmVhZF9jb25maWd1cmF0aW9uKGthd2V0aCk7CisKKwlpZihyZXN1bHQgPCAwKSB7CisJCWthd2V0aF9lcnIoIkVycm9yIHJlYWRpbmcgY29uZmlndXJhdGlvbiAoJWQpLCBubyBuZXQgZGV2aWNlIGNyZWF0ZWQiLCByZXN1bHQpOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisKKwlrYXdldGhfaW5mbygiU3RhdGlzdGljcyBjb2xsZWN0aW9uOiAleCIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5zdGF0aXN0aWNzX21hc2spOworCWthd2V0aF9pbmZvKCJNdWx0aWNhc3QgZmlsdGVyIGxpbWl0OiAleCIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5tYXhfbXVsdGljYXN0X2ZpbHRlcnMgJiAoKDEgPDwgMTUpIC0gMSkpOworCWthd2V0aF9pbmZvKCJNVFU6ICVkIiwgbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSkpOworCWthd2V0aF9pbmZvKCJSZWFkIE1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4IiwKKwkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMF0sCisJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzFdLAorCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclsyXSwKKwkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbM10sCisJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzRdLAorCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkcls1XSk7CisKKwlpZighbWVtY21wKCZrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAmYmNhc3RfYWRkciwKKwkJICAgc2l6ZW9mKGJjYXN0X2FkZHIpKSkgeworCQlrYXdldGhfZXJyKCJGaXJtd2FyZSBub3QgZnVuY3Rpb25pbmcgcHJvcGVybHksIG5vIG5ldCBkZXZpY2UgY3JlYXRlZCIpOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisKKwlpZihrYXdldGhfc2V0X3VyYl9zaXplKGthd2V0aCwgS0FXRVRIX0JVRl9TSVpFKSA8IDApIHsKKwkJa2F3ZXRoX2RiZygiRXJyb3Igc2V0dGluZyBVUkIgc2l6ZSIpOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisKKwlpZihrYXdldGhfc2V0X3NvZnNfd2FpdChrYXdldGgsIEtBV0VUSF9TT0ZTX1RPX1dBSVQpIDwgMCkgeworCQlrYXdldGhfZXJyKCJFcnJvciBzZXR0aW5nIFNPRlMgd2FpdCIpOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisKKwlyZXN1bHQgPSBrYXdldGhfc2V0X3JlY2VpdmVfZmlsdGVyKGthd2V0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9ESVJFQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FXRVRIX1BBQ0tFVF9GSUxURVJfQlJPQURDQVNUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9NVUxUSUNBU1QpOworCisJaWYocmVzdWx0IDwgMCkgeworCQlrYXdldGhfZXJyKCJFcnJvciBzZXR0aW5nIHJlY2VpdmUgZmlsdGVyIik7CisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCX0KKworCWthd2V0aF9kYmcoIkluaXRpYWxpemluZyBuZXQgZGV2aWNlLiIpOworCisJa2F3ZXRoLT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgha2F3ZXRoLT50eF91cmIpCisJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OworCWthd2V0aC0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWthd2V0aC0+cnhfdXJiKQorCQlnb3RvIGVycl9vbmx5X3R4OworCWthd2V0aC0+aXJxX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrYXdldGgtPmlycV91cmIpCisJCWdvdG8gZXJyX3R4X2FuZF9yeDsKKworCWthd2V0aC0+aW50YnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYygJa2F3ZXRoLT5kZXYsCisJCQkJCQlJTlRCVUZGRVJTSVpFLAorCQkJCQkJR0ZQX0tFUk5FTCwKKwkJCQkJCSZrYXdldGgtPmludGJ1ZmZlcmhhbmRsZSk7CisJaWYgKCFrYXdldGgtPmludGJ1ZmZlcikKKwkJZ290byBlcnJfdHhfYW5kX3J4X2FuZF9pcnE7CisJa2F3ZXRoLT5yeF9idWYgPSB1c2JfYnVmZmVyX2FsbG9jKAlrYXdldGgtPmRldiwKKwkJCQkJCUtBV0VUSF9CVUZfU0laRSwKKwkJCQkJCUdGUF9LRVJORUwsCisJCQkJCQkma2F3ZXRoLT5yeGJ1ZmZlcmhhbmRsZSk7CisJaWYgKCFrYXdldGgtPnJ4X2J1ZikKKwkJZ290byBlcnJfYWxsX2J1dF9yeGJ1ZjsKKworCW1lbWNweShuZXRkZXYtPmJyb2FkY2FzdCwgJmJjYXN0X2FkZHIsIHNpemVvZihiY2FzdF9hZGRyKSk7CisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsICZrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkciwKKyAgICAgICAgICAgICAgIHNpemVvZihrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkcikpOworCisJbmV0ZGV2LT5vcGVuID0ga2F3ZXRoX29wZW47CisJbmV0ZGV2LT5zdG9wID0ga2F3ZXRoX2Nsb3NlOworCisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEtBV0VUSF9UWF9USU1FT1VUOworCW5ldGRldi0+dHhfdGltZW91dCA9IGthd2V0aF90eF90aW1lb3V0OworCisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBrYXdldGhfc3RhcnRfeG1pdDsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGthd2V0aF9zZXRfcnhfbW9kZTsKKwluZXRkZXYtPmdldF9zdGF0cyA9IGthd2V0aF9uZXRkZXZfc3RhdHM7CisJbmV0ZGV2LT5tdHUgPSBsZTE2X3RvX2NwdShrYXdldGgtPmNvbmZpZ3VyYXRpb24uc2VnbWVudF9zaXplKTsKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmb3BzKTsKKworCS8qIGthd2V0aCBpcyB6ZXJvZWQgYXMgcGFydCBvZiBhbGxvY19uZXRkZXYgKi8KKworCUlOSVRfV09SSygma2F3ZXRoLT5sb3dtZW1fd29yaywga2F3ZXRoX3Jlc3VibWl0X3RsLCAodm9pZCAqKWthd2V0aCk7CisKKwlTRVRfTU9EVUxFX09XTkVSKG5ldGRldik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGthd2V0aCk7CisKKyNpZiAwCisvLyBkbWFfc3VwcG9ydGVkKCkgaXMgZGVlcGx5IGJyb2tlbiBvbiBhbG1vc3QgYWxsIGFyY2hpdGVjdHVyZXMKKwlpZiAoZG1hX3N1cHBvcnRlZCAoJmludGYtPmRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkKKwkJa2F3ZXRoLT5uZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKyNlbmRpZgorCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmaW50Zi0+ZGV2KTsKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikgIT0gMCkgeworCQlrYXdldGhfZXJyKCJFcnJvciByZWdpc3RlcmluZyBuZXRkZXYuIik7CisJCWdvdG8gZXJyX2ludGZkYXRhOworCX0KKworCWthd2V0aF9pbmZvKCJrYXdldGggaW50ZXJmYWNlIGNyZWF0ZWQgYXQgJXMiLCBrYXdldGgtPm5ldC0+bmFtZSk7CisKKwlrYXdldGhfZGJnKCJLYXdldGggcHJvYmUgcmV0dXJuaW5nLiIpOworCisJcmV0dXJuIDA7CisKK2Vycl9pbnRmZGF0YToKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCXVzYl9idWZmZXJfZnJlZShrYXdldGgtPmRldiwgS0FXRVRIX0JVRl9TSVpFLCAodm9pZCAqKWthd2V0aC0+cnhfYnVmLCBrYXdldGgtPnJ4YnVmZmVyaGFuZGxlKTsKK2Vycl9hbGxfYnV0X3J4YnVmOgorCXVzYl9idWZmZXJfZnJlZShrYXdldGgtPmRldiwgSU5UQlVGRkVSU0laRSwgKHZvaWQgKilrYXdldGgtPmludGJ1ZmZlciwga2F3ZXRoLT5pbnRidWZmZXJoYW5kbGUpOworZXJyX3R4X2FuZF9yeF9hbmRfaXJxOgorCXVzYl9mcmVlX3VyYihrYXdldGgtPmlycV91cmIpOworZXJyX3R4X2FuZF9yeDoKKwl1c2JfZnJlZV91cmIoa2F3ZXRoLT5yeF91cmIpOworZXJyX29ubHlfdHg6CisJdXNiX2ZyZWVfdXJiKGthd2V0aC0+dHhfdXJiKTsKK2Vycl9mcmVlX25ldGRldjoKKwlmcmVlX25ldGRldihuZXRkZXYpOworCisJcmV0dXJuIC1FSU87Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2Rpc2Nvbm5lY3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQga2F3ZXRoX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworCWthd2V0aF9pbmZvKCJVbnJlZ2lzdGVyaW5nIik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmICgha2F3ZXRoKSB7CisJCWthd2V0aF93YXJuKCJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2UiKTsKKwkJcmV0dXJuOworCX0KKwluZXRkZXYgPSBrYXdldGgtPm5ldDsKKwlrYXdldGgtPnJlbW92ZWQgPSAxOworCXVzYl9raWxsX3VyYihrYXdldGgtPmlycV91cmIpOworCXVzYl9raWxsX3VyYihrYXdldGgtPnJ4X3VyYik7CisJdXNiX2tpbGxfdXJiKGthd2V0aC0+dHhfdXJiKTsKKworCWthd2V0aF9kYmcoIlVucmVnaXN0ZXJpbmcgbmV0IGRldmljZSIpOworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisKKwl1c2JfZnJlZV91cmIoa2F3ZXRoLT5yeF91cmIpOworCXVzYl9mcmVlX3VyYihrYXdldGgtPnR4X3VyYik7CisJdXNiX2ZyZWVfdXJiKGthd2V0aC0+aXJxX3VyYik7CisKKwl1c2JfYnVmZmVyX2ZyZWUoa2F3ZXRoLT5kZXYsIEtBV0VUSF9CVUZfU0laRSwgKHZvaWQgKilrYXdldGgtPnJ4X2J1Ziwga2F3ZXRoLT5yeGJ1ZmZlcmhhbmRsZSk7CisJdXNiX2J1ZmZlcl9mcmVlKGthd2V0aC0+ZGV2LCBJTlRCVUZGRVJTSVpFLCAodm9pZCAqKWthd2V0aC0+aW50YnVmZmVyLCBrYXdldGgtPmludGJ1ZmZlcmhhbmRsZSk7CisKKwlmcmVlX25ldGRldihuZXRkZXYpOworfQorCisKKy8vIEZJWE1FIHRoaXMgY29tcGxldGlvbiBzdHVmZiBpcyBhIG1vZGlmaWVkIGNsb25lIG9mCisvLyBhbiBPTEQgdmVyc2lvbiBvZiBzb21lIHN0dWZmIGluIHVzYi5jIC4uLgorc3RydWN0IHVzYl9hcGlfZGF0YSB7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FoOworCWludCBkb25lOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogY29tcGxldGlvbiBoYW5kbGVyIGZvciBjb21wYXRpYmlsaXR5IHdyYXBwZXJzIChzeW5jIGNvbnRyb2wvYnVsaykgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2FwaV9kYXRhICphd2QgPSAoc3RydWN0IHVzYl9hcGlfZGF0YSAqKXVyYi0+Y29udGV4dDsKKworCWF3ZC0+ZG9uZT0xOworCXdha2VfdXAoJmF3ZC0+d3FoKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgICAgICAgICAgICAgICAgICAgICAgQ09NUEFUSUJJTElUWSBTVFVGRiAgICAgICAgICAgICAgICAgICAgICAgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gU3RhcnRzIHVyYiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24gb3IgdGltZW91dAorc3RhdGljIGludCB1c2Jfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgdGltZW91dCwgaW50KiBhY3R1YWxfbGVuZ3RoKQoreworCXN0cnVjdCB1c2JfYXBpX2RhdGEgYXdkOworICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmF3ZC53cWgpOworICAgICAgICBhd2QuZG9uZSA9IDA7CisKKyAgICAgICAgdXJiLT5jb250ZXh0ID0gJmF3ZDsKKyAgICAgICAgc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfTk9JTyk7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGF3ZC53cWgsIGF3ZC5kb25lLCB0aW1lb3V0KSkgeworICAgICAgICAgICAgICAgIC8vIHRpbWVvdXQKKyAgICAgICAgICAgICAgICBrYXdldGhfd2FybigidXNiX2NvbnRyb2wvYnVsa19tc2c6IHRpbWVvdXQiKTsKKyAgICAgICAgICAgICAgICB1c2Jfa2lsbF91cmIodXJiKTsgIC8vIHJlbW92ZSB1cmIgc2FmZWx5CisgICAgICAgICAgICAgICAgc3RhdHVzID0gLUVUSU1FRE9VVDsKKyAgICAgICAgfQorCWVsc2UgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCX0KKworICAgICAgICBpZiAoYWN0dWFsX2xlbmd0aCkgeworICAgICAgICAgICAgICAgICphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCX0KKworICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8vIHJldHVybnMgc3RhdHVzIChuZWdhdGl2ZSkgb3IgbGVuZ3RoIChwb3NpdGl2ZSkKK3N0YXRpYyBpbnQga2F3ZXRoX2ludGVybmFsX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCQkgICAgICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kLCB2b2lkICpkYXRhLAorCQkJCSAgICAgICBpbnQgbGVuLCBpbnQgdGltZW91dCkKK3sKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiOworICAgICAgICBpbnQgcmV0djsKKyAgICAgICAgaW50IGxlbmd0aDsKKworICAgICAgICB1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9OT0lPKTsKKyAgICAgICAgaWYgKCF1cmIpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCB1c2JfZGV2LCBwaXBlLCAodW5zaWduZWQgY2hhciopY21kLCBkYXRhLAorCQkJIGxlbiwgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKworICAgICAgICByZXR2ID0gdXNiX3N0YXJ0X3dhaXRfdXJiKHVyYiwgdGltZW91dCwgJmxlbmd0aCk7CisgICAgICAgIGlmIChyZXR2IDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXR2OworCX0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBrYXdldGhfaW5pdCh2b2lkKQoreworCWthd2V0aF9kYmcoIkRyaXZlciBsb2FkaW5nIik7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigma2F3ZXRoX2RyaXZlcik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2V4aXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19leGl0IGthd2V0aF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmthd2V0aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChrYXdldGhfaW5pdCk7Cittb2R1bGVfZXhpdChrYXdldGhfZXhpdCk7CisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoZncuaCBiL2RyaXZlcnMvdXNiL25ldC9rYXdldGhmdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODVmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoZncuaApAQCAtMCwwICsxLDU1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5PVEU6IEI2L0MzIGlzIGRhdGEgaGVhZGVyIHNpZ25hdHVyZSAgICovCisvKiAgICAgICAweEFBLzB4QkIgaXMgZGF0YSBsZW5ndGggPSB0b3RhbCAqLworLyogICAgICAgYnl0ZXMgLSA3LCAweENDIGlzIHR5cGUsIDB4REQgaXMgKi8KKy8qICAgICAgIGludGVycnVwdCB0byB1c2UuICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF90cmlnZ2VyX2NvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIF9fdTgga2F3ZXRoX3RyaWdnZXJfY29kZVtdID0gCit7CisgICAgMHhCNiwgMHhDMywgMHhBQSwgMHhCQiwgMHhDQywgMHhERCwKKyAgICAweGM4LCAweDA3LCAweGEwLCAweDAwLCAweGYwLCAweDA3LCAweDVlLCAweDAwLAorICAgIDB4MDYsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MGEsIDB4MDAsIDB4MDgsIDB4MDAsCisgICAgMHhmMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhlNywgMHgwNywKKyAgICAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4MDQsIDB4MDAsIDB4ZTcsIDB4MDcsIDB4NTAsIDB4YzMsIDB4MTAsIDB4YzAsCisgICAgMHhmMCwgMHgwOSwgMHgwZSwgMHhjMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywKKyAgICAweDAxLCAweDAwLCAweDBlLCAweGMwLCAweDk3LCAweGNmLCAweGQ3LCAweDA5LAorICAgIDB4MDAsIDB4YzAsIDB4MTcsIDB4MDIsIDB4YzgsIDB4MDcsIDB4YTAsIDB4MDAsCisgICAgMHhlNywgMHgxNywgMHg1MCwgMHhjMywgMHgxMCwgMHhjMCwgMHgzMCwgMHhkOCwKKyAgICAweDA0LCAweDAwLCAweDMwLCAweDVjLCAweDA4LCAweDAwLCAweDA0LCAweDAwLAorICAgIDB4YjAsIDB4YzAsIDB4MDYsIDB4MDAsIDB4YzgsIDB4MDUsIDB4ZTcsIDB4MDUsCisgICAgMHgwMCwgMHhjMCwgMHhjMCwgMHhkZiwgMHg5NywgMHhjZiwgMHg0OSwgMHhhZiwKKyAgICAweGMwLCAweDA3LCAweDAwLCAweDAwLCAweDYwLCAweGFmLCAweDRhLCAweGFmLAorICAgIDB4MDAsIDB4MGMsIDB4MGMsIDB4MDAsIDB4NDAsIDB4ZDIsIDB4MDAsIDB4MWMsCisgICAgMHgwYywgMHgwMCwgMHg0MCwgMHhkMiwgMHgzMCwgMHgwMCwgMHgwOCwgMHgwMCwKKyAgICAweGYwLCAweDA3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGYwLCAweDA3LAorICAgIDB4ODYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NjcsIDB4Y2YsIDB4MjcsIDB4MGMsCisgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNywgMHgwYywgMHgwMCwgMHgwMCwKKyAgICAweDBlLCAweGMwLCAweDQ5LCAweGFmLCAweDY0LCAweGFmLCAweGMwLCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4NGIsIDB4YWYsIDB4NGEsIDB4YWYsIDB4NWEsIDB4Y2YsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDA1LCAweDAwLAorICAgIDB4MDAsIDB4MDAKK307CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF90cmlnZ2VyX2NvZGVfZml4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBfX3U4IGthd2V0aF90cmlnZ2VyX2NvZGVfZml4W10gPSAKK3sKKyAgICAweEI2LCAweEMzLCAweEFBLCAweEJCLCAweENDLCAweERELAorICAgIDB4MDIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4M2UsIDB4MDAsCisgICAgMHg4MCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhhYSwgMHgwMCwKKyAgICAweDAwLCAweDAwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9uZXdfY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgX191OCBrYXdldGhfbmV3X2NvZGVbXSA9IAoreworICAgIDB4QjYsIDB4QzMsIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsCisgICAgMHg5ZiwgMHhjZiwgMHhkZSwgMHgwNiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGM0LCAweDA2LCAweDk3LCAweGMxLCAweGU3LCAweDY3LCAweGZmLCAweDFmLAorICAgIDB4MjgsIDB4YzAsIDB4ZTcsIDB4ODcsIDB4MDAsIDB4MDQsIDB4MjQsIDB4YzAsCisgICAgMHhlNywgMHg2NywgMHhmZiwgMHhmOSwgMHgyMiwgMHhjMCwgMHg5NywgMHhjZiwKKyAgICAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweGU3LCAweDA5LCAweGEyLCAweGMwLAorICAgIDB4YmUsIDB4MDYsIDB4OWYsIDB4YWYsIDB4MzYsIDB4MDAsIDB4ZTcsIDB4MDUsCisgICAgMHgwMCwgMHhjMCwgMHhhNywgMHhjZiwgMHhiYywgMHgwNiwgMHg5NywgMHhjZiwKKyAgICAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweGI4LCAweDA2LCAweGE3LCAweGExLAorICAgIDB4YjgsIDB4MDYsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHgxNCwgMHgwOCwgMHgwYSwgMHhjMCwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGE0LCAweGMwLCAweGE3LCAweGMwLCAweDdhLCAweDA2LCAweDlmLCAweGFmLAorICAgIDB4OTIsIDB4MDcsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsCisgICAgMHhlNywgMHg1NywgMHhmZiwgMHhmZiwgMHhiYSwgMHgwNiwgMHg5ZiwgMHhhMCwKKyAgICAweDM4LCAweDAwLCAweGU3LCAweDU5LCAweGJhLCAweDA2LCAweGJlLCAweDA2LAorICAgIDB4OWYsIDB4YTAsIDB4MzgsIDB4MDAsIDB4YzgsIDB4MDksIDB4Y2EsIDB4MDYsCisgICAgMHgwOCwgMHg2MiwgMHg5ZiwgMHhhMSwgMHgzNiwgMHgwOCwgMHhjMCwgMHgwOSwKKyAgICAweDc2LCAweDA2LCAweDAwLCAweDYwLCAweGE3LCAweGMwLCAweDdhLCAweDA2LAorICAgIDB4OWYsIDB4YWYsIDB4Y2MsIDB4MDIsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhiOCwgMHgwNiwgMHhhNywgMHhjMSwgMHg3YSwgMHgwNiwgMHg5ZiwgMHhhZiwKKyAgICAweDA0LCAweDAwLCAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweDhlLCAweDA2LAorICAgIDB4MGEsIDB4YzEsIDB4ZTcsIDB4MDksIDB4MjAsIDB4YzAsIDB4MTAsIDB4MDgsCisgICAgMHhlNywgMHhkMCwgMHgxMCwgMHgwOCwgMHhlNywgMHg2NywgMHg0MCwgMHgwMCwKKyAgICAweDEwLCAweDA4LCAweDlmLCAweGFmLCAweDkyLCAweDBjLCAweGMwLCAweDA5LAorICAgIDB4ZDAsIDB4MDYsIDB4MDAsIDB4NjAsIDB4MDUsIDB4YzQsIDB4YzAsIDB4NTksCisgICAgMHhiZSwgMHgwNiwgMHgwMiwgMHhjMCwgMHg5ZiwgMHhhZiwgMHhlYywgMHgwMCwKKyAgICAweDlmLCAweGFmLCAweDM0LCAweDAyLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4YTYsIDB4MDYsIDB4OWYsIDB4YTAsIDB4N2EsIDB4MDIsIDB4YTcsIDB4Y2YsCisgICAgMHg3YSwgMHgwNiwgMHg0OCwgMHgwMiwgMHhlNywgMHgwOSwgMHhiZSwgMHgwNiwKKyAgICAweGQwLCAweDA2LCAweGM4LCAweDM3LCAweDA0LCAweDAwLCAweDlmLCAweGFmLAorICAgIDB4MDgsIDB4MDMsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhjZSwgMHgwNiwgMHg5NywgMHhjMCwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwKKyAgICAweGMxLCAweGRmLCAweGM4LCAweDA5LCAweGM2LCAweDA2LCAweDA4LCAweDYyLAorICAgIDB4MTQsIDB4YzAsIDB4MjcsIDB4MDQsIDB4YzYsIDB4MDYsIDB4MTAsIDB4OTQsCisgICAgMHhmMCwgMHgwNywgMHgxMCwgMHgwOCwgMHgwMiwgMHgwMCwgMHhjMSwgMHgwNywKKyAgICAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDA0LCAweDAwLCAweGYwLCAweDA3LAorICAgIDB4MzAsIDB4MDEsIDB4MDYsIDB4MDAsIDB4NTAsIDB4YWYsIDB4ZTcsIDB4MDcsCisgICAgMHhmZiwgMHhmZiwgMHhkMCwgMHgwNiwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweGNlLCAweDA2LCAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweDk3LCAweGNmLAorICAgIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4YzEsIDB4ZGYsIDB4NDgsIDB4MDIsCisgICAgMHhkMCwgMHgwOSwgMHhjNiwgMHgwNiwgMHgyNywgMHgwMiwgMHhjNiwgMHgwNiwKKyAgICAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweDk3LCAweGNmLCAweDQ4LCAweDAyLAorICAgIDB4YzgsIDB4MzcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGMsIDB4MDAsCisgICAgMHgwMCwgMHg2MCwgMHgyMSwgMHhjMCwgMHhjMCwgMHgzNywgMHgzZSwgMHgwMCwKKyAgICAweDIzLCAweGM5LCAweGMwLCAweDU3LCAweGI0LCAweDA1LCAweDFiLCAweGM4LAorICAgIDB4YzAsIDB4MTcsIDB4M2YsIDB4MDAsIDB4YzAsIDB4NjcsIDB4YzAsIDB4ZmYsCisgICAgMHgzMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweDA0LCAweDAwLCAweDAwLCAweDAyLCAweGMwLCAweDE3LCAweDRjLCAweDAwLAorICAgIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4YTAsIDB4MDEsCisgICAgMHgwYSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMSwgMHgwNywgMHgwMiwgMHgwMCwKKyAgICAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweGMxLCAweGRmLCAweDUxLCAweGFmLAorICAgIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4OWYsIDB4YWYsCisgICAgMHgwOCwgMHgwMywgMHg5ZiwgMHhhZiwgMHg3YSwgMHgwMiwgMHg5NywgMHhjZiwKKyAgICAweDlmLCAweGFmLCAweDdhLCAweDAyLCAweGM5LCAweDM3LCAweDA0LCAweDAwLAorICAgIDB4YzEsIDB4ZGYsIDB4YzgsIDB4MDksIDB4YTIsIDB4MDYsIDB4NTAsIDB4MDIsCisgICAgMHg2NywgMHgwMiwgMHhhMiwgMHgwNiwgMHhkMSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweDI3LCAweGQ4LCAweGFhLCAweDA2LCAweGMwLCAweGRmLCAweDlmLCAweGFmLAorICAgIDB4YzQsIDB4MDEsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhkMiwgMHgwNiwgMHg5NywgMHhjMSwgMHhlNywgMHg1NywgMHgwMSwgMHgwMCwKKyAgICAweGE4LCAweDA2LCAweDk3LCAweGMwLCAweGM4LCAweDA5LCAweGEwLCAweDA2LAorICAgIDB4MDgsIDB4NjIsIDB4OTcsIDB4YzAsIDB4MDAsIDB4MDIsIDB4YzAsIDB4MTcsCisgICAgMHgwZSwgMHgwMCwgMHgyNywgMHgwMCwgMHgzNCwgMHgwMSwgMHgyNywgMHgwYywKKyAgICAweDBjLCAweDAwLCAweDM2LCAweDAxLCAweGU3LCAweDA3LCAweDUwLCAweGMzLAorICAgIDB4MTIsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4Y2MsIDB4MGIsIDB4MDIsIDB4MDAsCisgICAgMHhlNywgMHgwNywgMHgwMSwgMHgwMCwgMHhhOCwgMHgwNiwgMHhlNywgMHgwNywKKyAgICAweDA1LCAweDAwLCAweDkwLCAweGMwLCAweDk3LCAweGNmLCAweGM4LCAweDA5LAorICAgIDB4YTQsIDB4MDYsIDB4MDgsIDB4NjIsIDB4MDIsIDB4YzAsIDB4MTAsIDB4NjQsCisgICAgMHgwNywgMHhjMSwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNiwKKyAgICAweGU3LCAweDA3LCAweDcyLCAweDA0LCAweDI0LCAweDAwLCAweDk3LCAweGNmLAorICAgIDB4MjcsIDB4MDQsIDB4YTQsIDB4MDYsIDB4YzgsIDB4MTcsIDB4MGUsIDB4MDAsCisgICAgMHgyNywgMHgwMiwgMHg5ZSwgMHgwNiwgMHhlNywgMHgwNywgMHg4MCwgMHgwNCwKKyAgICAweDI0LCAweDAwLCAweDk3LCAweGNmLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLAorICAgIDB4YzEsIDB4ZGYsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDYsCisgICAgMHgxMywgMHhjMSwgMHg5ZiwgMHhhZiwgMHgwNiwgMHgwMiwgMHhlNywgMHg1NywKKyAgICAweDAwLCAweDAwLCAweDllLCAweDA2LCAweDEzLCAweGMwLCAweGU3LCAweDA5LAorICAgIDB4OWUsIDB4MDYsIDB4MzAsIDB4MDEsIDB4ZTcsIDB4MDcsIDB4ZjIsIDB4MDUsCisgICAgMHgzMiwgMHgwMSwgMHhlNywgMHgwNywgMHgxMCwgMHgwMCwgMHg5NiwgMHhjMCwKKyAgICAweGU3LCAweDA5LCAweDllLCAweDA2LCAweDkwLCAweDA2LCAweDA0LCAweGNmLAorICAgIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4OWUsIDB4MDYsIDB4MDIsIDB4YzEsCisgICAgMHg5ZiwgMHhhZiwgMHgwNiwgMHgwMiwgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwKKyAgICAweDk3LCAweGNmLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweGMxLCAweGRmLAorICAgIDB4MDgsIDB4OTIsIDB4ZTcsIDB4NTcsIDB4MDIsIDB4MDAsIDB4YWEsIDB4MDYsCisgICAgMHgwMiwgMHhjMywgMHhjOCwgMHgwOSwgMHhhNCwgMHgwNiwgMHgyNywgMHgwMiwKKyAgICAweGE2LCAweDA2LCAweDA4LCAweDYyLCAweDAzLCAweGMxLCAweGU3LCAweDA1LAorICAgIDB4MDAsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4MjcsIDB4MDQsIDB4YTQsIDB4MDYsCisgICAgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHhmMCwgMHgwNywgMHg0MCwgMHgwMCwKKyAgICAweDA4LCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLAorICAgIDB4MDAsIDB4MDIsIDB4YzAsIDB4MTcsIDB4MGMsIDB4MDAsIDB4MzAsIDB4MDAsCisgICAgMHgwNiwgMHgwMCwgMHhmMCwgMHgwNywgMHg0NiwgMHgwMSwgMHgwYSwgMHgwMCwKKyAgICAweGM4LCAweDE3LCAweDA0LCAweDAwLCAweGMxLCAweDA3LCAweDAyLCAweDAwLAorICAgIDB4NTEsIDB4YWYsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHg5NiwgMHgwNiwgMHg5NywgMHhjMCwgMHhjMSwgMHhkZiwgMHhjOCwgMHgwOSwKKyAgICAweDk2LCAweDA2LCAweDI3LCAweDA0LCAweDk2LCAweDA2LCAweDI3LCAweDUyLAorICAgIDB4OTgsIDB4MDYsIDB4MDMsIDB4YzEsIDB4ZTcsIDB4MDcsIDB4OTYsIDB4MDYsCisgICAgMHg5OCwgMHgwNiwgMHhjMCwgMHhkZiwgMHgxNywgMHgwMiwgMHhjOCwgMHgxNywKKyAgICAweDBlLCAweDAwLCAweDlmLCAweGFmLCAweGJhLCAweDAzLCAweGM4LCAweDA1LAorICAgIDB4MDAsIDB4NjAsIDB4MDMsIDB4YzAsIDB4OWYsIDB4YWYsIDB4MjQsIDB4MDMsCisgICAgMHg5NywgMHhjZiwgMHg5ZiwgMHhhZiwgMHgwOCwgMHgwMywgMHg5NywgMHhjZiwKKyAgICAweDU3LCAweDAyLCAweGM5LCAweDA3LCAweGE0LCAweDA2LCAweGQ3LCAweDA5LAorICAgIDB4MDAsIDB4YzAsIDB4YzEsIDB4ZGYsIDB4MDgsIDB4NjIsIDB4MWIsIDB4YzAsCisgICAgMHg1MCwgMHgwNCwgMHgxMSwgMHgwMiwgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwKKyAgICAweGM5LCAweDA1LCAweDk3LCAweGNmLCAweDk3LCAweDAyLCAweGNhLCAweDA5LAorICAgIDB4ZDYsIDB4MDYsIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisgICAgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHhjYSwgMHgxNywKKyAgICAweDJjLCAweDAwLCAweGY4LCAweDc3LCAweDAxLCAweDAwLCAweDBlLCAweDAwLAorICAgIDB4MDYsIDB4YzAsIDB4Y2EsIDB4ZDksIDB4ZjgsIDB4NTcsIDB4ZmYsIDB4MDAsCisgICAgMHgwZSwgMHgwMCwgMHgwMSwgMHhjMSwgMHhjYSwgMHhkOSwgMHgyMiwgMHgxYywKKyAgICAweDBjLCAweDAwLCAweGUyLCAweDI3LCAweDAwLCAweDAwLCAweGUyLCAweDE3LAorICAgIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDUsCisgICAgMHgwMCwgMHgwYywgMHgwYywgMHgwMCwgMHhjMCwgMHgxNywgMHg0MSwgMHgwMCwKKyAgICAweGMwLCAweDY3LCAweGMwLCAweGZmLCAweDMwLCAweDAwLCAweDA4LCAweDAwLAorICAgIDB4MDAsIDB4MDIsIDB4YzAsIDB4MTcsIDB4MGMsIDB4MDAsIDB4MzAsIDB4MDAsCisgICAgMHgwNiwgMHgwMCwgMHhmMCwgMHgwNywgMHhkYSwgMHgwMCwgMHgwYSwgMHgwMCwKKyAgICAweGYwLCAweDA3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDBjLAorICAgIDB4MDgsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MTksCisgICAgMHhjZSwgMHgwNiwgMHhjMCwgMHg1OSwgMHhjMiwgMHgwNiwgMHgwNCwgMHhjOSwKKyAgICAweDQ5LCAweGFmLCAweDlmLCAweGFmLCAweGVjLCAweDAwLCAweDRhLCAweGFmLAorICAgIDB4NjcsIDB4MTAsIDB4Y2UsIDB4MDYsIDB4YzgsIDB4MTcsIDB4MDQsIDB4MDAsCisgICAgMHhjMSwgMHgwNywgMHgwMSwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwKKyAgICAweGMxLCAweGRmLCAweDUwLCAweGFmLCAweGU3LCAweDA1LCAweDAwLCAweGMwLAorICAgIDB4OTcsIDB4Y2YsIDB4YzAsIDB4MDcsIDB4MDEsIDB4MDAsIDB4YzEsIDB4MDksCisgICAgMHhhYywgMHgwNiwgMHhjMSwgMHg3NywgMHgwMSwgMHgwMCwgMHg5NywgMHhjMSwKKyAgICAweGQ4LCAweDc3LCAweDAxLCAweDAwLCAweDEyLCAweGMwLCAweGM5LCAweDA3LAorICAgIDB4NmEsIDB4MDYsIDB4OWYsIDB4YWYsIDB4MDgsIDB4MDQsIDB4MDQsIDB4YzEsCisgICAgMHhjMSwgMHg3NywgMHgwOCwgMHgwMCwgMHgxMywgMHhjMCwgMHg5NywgMHhjZiwKKyAgICAweGMxLCAweDc3LCAweDAyLCAweDAwLCAweDk3LCAweGMxLCAweGMxLCAweDc3LAorICAgIDB4MTAsIDB4MDAsIDB4MGMsIDB4YzAsIDB4OWYsIDB4YWYsIDB4MmMsIDB4MDQsCisgICAgMHg5NywgMHhjZiwgMHhjMSwgMHg3NywgMHgwNCwgMHgwMCwgMHgwNiwgMHhjMCwKKyAgICAweGM5LCAweDA3LCAweDcwLCAweDA2LCAweDlmLCAweGFmLCAweDA4LCAweDA0LAorICAgIDB4OTcsIDB4YzAsIDB4MDAsIDB4Y2YsIDB4MDAsIDB4OTAsIDB4OTcsIDB4Y2YsCisgICAgMHg1MCwgMHg1NCwgMHg5NywgMHhjMSwgMHg3MCwgMHg1YywgMHgwMiwgMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDk3LCAweGMxLCAweDcwLCAweDVjLCAweDA0LCAweDAwLAorICAgIDB4MDQsIDB4MDAsIDB4OTcsIDB4Y2YsIDB4ODAsIDB4MDEsIDB4YzAsIDB4MDAsCisgICAgMHg2MCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwYywgMHgwMCwKKyAgICAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDA5LCAweGIyLCAweDA2LAorICAgIDB4Y2MsIDB4MDksIDB4YjQsIDB4MDYsIDB4MGIsIDB4NTMsIDB4MTEsIDB4YzAsCisgICAgMHhjOSwgMHgwMiwgMHhjYSwgMHgwNywgMHgxYywgMHgwNCwgMHg5ZiwgMHhhZiwKKyAgICAweDA4LCAweDA0LCAweDk3LCAweGMwLCAweDBhLCAweGM4LCAweDgyLCAweDA4LAorICAgIDB4MGEsIDB4Y2YsIDB4ODIsIDB4MDgsIDB4OWYsIDB4YWYsIDB4MDgsIDB4MDQsCisgICAgMHg5NywgMHhjMCwgMHgwNSwgMHhjMiwgMHg4OSwgMHgzMCwgMHg4MiwgMHg2MCwKKyAgICAweDc4LCAweGMxLCAweDAwLCAweDkwLCAweDk3LCAweGNmLCAweDg5LCAweDEwLAorICAgIDB4MDksIDB4NTMsIDB4NzksIDB4YzIsIDB4ODksIDB4MzAsIDB4ODIsIDB4MDgsCisgICAgMHg3YSwgMHhjZiwgMHhjMCwgMHhkZiwgMHg5NywgMHhjZiwgMHhjMCwgMHhkZiwKKyAgICAweDk3LCAweGNmLCAweGU3LCAweDA5LCAweDk2LCAweGMwLCAweDkyLCAweDA2LAorICAgIDB4ZTcsIDB4MDksIDB4OTgsIDB4YzAsIDB4OTQsIDB4MDYsIDB4MGYsIDB4Y2YsCisgICAgMHhlNywgMHgwOSwgMHg5NiwgMHhjMCwgMHg5MiwgMHgwNiwgMHhlNywgMHgwOSwKKyAgICAweDk4LCAweGMwLCAweDk0LCAweDA2LCAweGU3LCAweDA5LCAweDllLCAweDA2LAorICAgIDB4MzAsIDB4MDEsIDB4ZTcsIDB4MDcsIDB4ZjIsIDB4MDUsIDB4MzIsIDB4MDEsCisgICAgMHhlNywgMHgwNywgMHgxMCwgMHgwMCwgMHg5NiwgMHhjMCwgMHhkNywgMHgwOSwKKyAgICAweDAwLCAweGMwLCAweDE3LCAweDAyLCAweGM4LCAweDA5LCAweDkwLCAweDA2LAorICAgIDB4YzgsIDB4MzcsIDB4MGUsIDB4MDAsIDB4ZTcsIDB4NzcsIDB4MmEsIDB4MDAsCisgICAgMHg5MiwgMHgwNiwgMHgzMCwgMHhjMCwgMHg5NywgMHgwMiwgMHhjYSwgMHgwOSwKKyAgICAweGQ2LCAweDA2LCAweGU3LCAweDc3LCAweDIwLCAweDAwLCAweDkyLCAweDA2LAorICAgIDB4MGUsIDB4YzAsIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsCisgICAgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhlNywgMHg3NywKKyAgICAweDBhLCAweDAwLCAweDkyLCAweDA2LCAweGNhLCAweDA1LCAweDFlLCAweGMwLAorICAgIDB4OTcsIDB4MDIsIDB4Y2EsIDB4MDksIDB4ZDYsIDB4MDYsIDB4ZjIsIDB4MTcsCisgICAgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwKKyAgICAweDBlLCAweDAwLCAweGU3LCAweDc3LCAweDAyLCAweDAwLCAweDkyLCAweDA2LAorICAgIDB4MDcsIDB4YzAsIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsCisgICAgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMCwgMHgwNiwgMHhjZiwKKyAgICAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweGYyLCAweDI3LAorICAgIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4Y2EsIDB4MDUsIDB4OWYsIDB4YWYsCisgICAgMHgwOCwgMHgwMywgMHgwZiwgMHhjZiwgMHg1NywgMHgwMiwgMHgwOSwgMHgwMiwKKyAgICAweGYxLCAweDA5LCAweDk0LCAweDA2LCAweDBjLCAweDAwLCAweGYxLCAweGRhLAorICAgIDB4MGMsIDB4MDAsIDB4YzgsIDB4MDksIDB4OTgsIDB4MDYsIDB4NTAsIDB4MDIsCisgICAgMHg2NywgMHgwMiwgMHg5OCwgMHgwNiwgMHhkMSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweGM5LCAweDA1LCAweGU3LCAweDA5LCAweDllLCAweDA2LCAweDkwLCAweDA2LAorICAgIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDYsIDB4MDIsIDB4YzAsCisgICAgMHg5ZiwgMHhhZiwgMHgwNiwgMHgwMiwgMHhjOCwgMHgwNSwgMHhlNywgMHgwNSwKKyAgICAweDAwLCAweGMwLCAweGMwLCAweGRmLCAweDk3LCAweGNmLCAweGQ3LCAweDA5LAorICAgIDB4MDAsIDB4YzAsIDB4MTcsIDB4MDAsIDB4MTcsIDB4MDIsIDB4OTcsIDB4MDIsCisgICAgMHhjMCwgMHgwOSwgMHg5MiwgMHhjMCwgMHhlNywgMHgwNywgMHgwNCwgMHgwMCwKKyAgICAweDkwLCAweGMwLCAweGNhLCAweDA5LCAweGQ2LCAweDA2LCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4NmEsIDB4MDQsCisgICAgMHgwMiwgMHgwMCwgMHhjMCwgMHg3NywgMHgwMiwgMHgwMCwgMHgwOCwgMHhjMCwKKyAgICAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweGYyLCAweDI3LAorICAgIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDAsIDB4OWYsIDB4Y2YsIDB4MjQsIDB4MDYsCisgICAgMHhjMCwgMHg3NywgMHgxMCwgMHgwMCwgMHgwNiwgMHhjMCwgMHhmMiwgMHgxNywKKyAgICAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweGYyLCAweDI3LCAweDAwLCAweDAwLAorICAgIDB4NWEsIDB4MDAsIDB4YzAsIDB4NzcsIDB4ODAsIDB4MDAsIDB4MDYsIDB4YzAsCisgICAgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHhmMiwgMHgyNywKKyAgICAweDAwLCAweDAwLCAweDcyLCAweDAwLCAweGMwLCAweDc3LCAweDA4LCAweDAwLAorICAgIDB4MWQsIDB4YzEsIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsCisgICAgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHhjMCwgMHg3NywKKyAgICAweDAwLCAweDAyLCAweDA2LCAweGMwLCAweGYyLCAweDE3LCAweDAxLCAweDAwLAorICAgIDB4NjQsIDB4MDAsIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MDAsCisgICAgMHhjMCwgMHg3NywgMHg0MCwgMHgwMCwgMHgwNiwgMHhjMCwgMHhmMiwgMHgxNywKKyAgICAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweGYyLCAweDI3LCAweDAwLCAweDAwLAorICAgIDB4NWUsIDB4MDAsIDB4YzAsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MDEsIDB4YzAsCisgICAgMHgxYiwgMHhjZiwgMHgxYSwgMHhjZiwgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweGYyLCAweDI3LCAweDAwLCAweDAwLCAweDAyLCAweDAwLAorICAgIDB4YzgsIDB4MDksIDB4MzQsIDB4MDEsIDB4Y2EsIDB4MTcsIDB4MTQsIDB4MDAsCisgICAgMHhkOCwgMHg3NywgMHgwMSwgMHgwMCwgMHgwNSwgMHhjMCwgMHhjYSwgMHhkOSwKKyAgICAweGQ4LCAweDU3LCAweGZmLCAweDAwLCAweDAxLCAweGMwLCAweGNhLCAweGQ5LAorICAgIDB4ZTIsIDB4MTksIDB4OTQsIDB4YzAsIDB4ZTIsIDB4MjcsIDB4MDAsIDB4MDAsCisgICAgMHhlMiwgMHgxNywgMHgwMSwgMHgwMCwgMHhlMiwgMHgyNywgMHgwMCwgMHgwMCwKKyAgICAweDlmLCAweGFmLCAweDQwLCAweDA2LCAweDlmLCAweGFmLCAweGM0LCAweDAxLAorICAgIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MDYsIDB4OWYsIDB4YTEsCisgICAgMHgwZSwgMHgwYSwgMHhjYSwgMHgwNSwgMHhjOCwgMHgwNSwgMHhjMCwgMHgwNSwKKyAgICAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweGMwLCAweGRmLCAweDk3LCAweGNmLAorICAgIDB4YzgsIDB4MDksIDB4YTAsIDB4MDYsIDB4MDgsIDB4NjIsIDB4OTcsIDB4YzAsCisgICAgMHgyNywgMHgwNCwgMHhhMCwgMHgwNiwgMHgyNywgMHg1MiwgMHhhMiwgMHgwNiwKKyAgICAweDAzLCAweGMxLCAweGU3LCAweDA3LCAweGEwLCAweDA2LCAweGEyLCAweDA2LAorICAgIDB4OWYsIDB4YWYsIDB4MDgsIDB4MDMsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhhYSwgMHgwNiwgMHgwMiwgMHhjMCwgMHgyNywgMHhkYSwgMHhhYSwgMHgwNiwKKyAgICAweDk3LCAweGNmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmYiwgMHgxMywgMHhlNywgMHg1NywKKyAgICAweDAwLCAweDgwLCAweGIyLCAweDAwLCAweDA2LCAweGMyLCAweGU3LCAweDA3LAorICAgIDB4ZWUsIDB4MGIsIDB4MTIsIDB4MDAsIDB4ZTcsIDB4MDcsIDB4MzQsIDB4MGMsCisgICAgMHhiMiwgMHgwMCwgMHhlNywgMHgwNywgMHhjNiwgMHgwNywgMHhmMiwgMHgwMiwKKyAgICAweGM4LCAweDA5LCAweGI0LCAweDAwLCAweGY4LCAweDA3LCAweDAyLCAweDAwLAorICAgIDB4MGQsIDB4MDAsIDB4ZDcsIDB4MDksIDB4MGUsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHgwZSwgMHhjMCwgMHhjOCwgMHgwOSwgMHhkZSwgMHgwMCwKKyAgICAweGM4LCAweDE3LCAweDA5LCAweDAwLCAweGM5LCAweDA3LCAweGRhLCAweDA2LAorICAgIDB4YzAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NjgsIDB4MGEsIDB4MDAsIDB4ZGEsCisgICAgMHg3ZCwgMHhjMSwgMHhlNywgMHgwOSwgMHhjMCwgMHgwMCwgMHg3YywgMHgwNiwKKyAgICAweGU3LCAweDA5LCAweGJlLCAweDAwLCAweDc4LCAweDA2LCAweGU3LCAweDA5LAorICAgIDB4MTAsIDB4MDAsIDB4YmMsIDB4MDYsIDB4YzgsIDB4MDcsIDB4ZDYsIDB4MDcsCisgICAgMHg5ZiwgMHhhZiwgMHhhZSwgMHgwNywgMHg5ZiwgMHhhZiwgMHgwMCwgMHgwYSwKKyAgICAweGM4LCAweDA5LCAweGRlLCAweDAwLCAweDAwLCAweDBlLCAweDBmLCAweDAwLAorICAgIDB4NDEsIDB4OTAsIDB4OWYsIDB4ZGUsIDB4MDYsIDB4MDAsIDB4NDQsIDB4YWYsCisgICAgMHgyNywgMHgwMCwgMHhiMiwgMHgwNiwgMHgyNywgMHgwMCwgMHhiNCwgMHgwNiwKKyAgICAweDI3LCAweDAwLCAweGI2LCAweDA2LCAweGMwLCAweDA3LCAweDc0LCAweDAwLAorICAgIDB4NDQsIDB4YWYsIDB4MjcsIDB4MDAsIDB4ZDYsIDB4MDYsIDB4MDgsIDB4MDAsCisgICAgMHgwMCwgMHg5MCwgMHhjMSwgMHgwNywgMHgzYSwgMHgwMCwgMHgyMCwgMHgwMCwKKyAgICAweDAxLCAweGRhLCAweDdkLCAweGMxLCAweDlmLCAweGFmLCAweGJhLCAweDA5LAorICAgIDB4YzAsIDB4MDcsIDB4NDQsIDB4MDAsIDB4NDgsIDB4YWYsIDB4MjcsIDB4MDAsCisgICAgMHg3YSwgMHgwNiwgMHg5ZiwgMHhhZiwgMHg5NiwgMHgwYSwgMHhlNywgMHgwNywKKyAgICAweDAxLCAweDAwLCAweGMwLCAweDA2LCAweGU3LCAweDA1LCAweDBlLCAweGMwLAorICAgIDB4OTcsIDB4Y2YsIDB4NDksIDB4YWYsIDB4ZTcsIDB4ODcsIDB4NDMsIDB4MDAsCisgICAgMHgwZSwgMHhjMCwgMHhlNywgMHgwNywgMHhmZiwgMHhmZiwgMHhiZSwgMHgwNiwKKyAgICAweDlmLCAweGFmLCAweGFlLCAweDBhLCAweGMwLCAweDA3LCAweDAxLCAweDAwLAorICAgIDB4NjAsIDB4YWYsIDB4NGEsIDB4YWYsIDB4OTcsIDB4Y2YsIDB4MDAsIDB4MDgsCisgICAgMHgwOSwgMHgwOCwgMHgxMSwgMHgwOCwgMHgwMCwgMHhkYSwgMHg3YywgMHhjMSwKKyAgICAweDk3LCAweGNmLCAweDY3LCAweDA0LCAweGNjLCAweDAyLCAweGMwLCAweGRmLAorICAgIDB4NTEsIDB4OTQsIDB4YjEsIDB4YWYsIDB4MDYsIDB4MDAsIDB4YzEsIDB4ZGYsCisgICAgMHhjOSwgMHgwOSwgMHhjYywgMHgwMiwgMHg0OSwgMHg2MiwgMHg3NSwgMHhjMSwKKyAgICAweGMwLCAweGRmLCAweGE3LCAweGNmLCAweGQ2LCAweDAyLCAweDBlLCAweDAwLAorICAgIDB4MjQsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MjIsIDB4MDAsIDB4NGUsIDB4MDUsCisgICAgMHhkMCwgMHgwMCwgMHgwZSwgMHgwYSwgMHhhYSwgMHgwMCwgMHgzMCwgMHgwOCwKKyAgICAweGJlLCAweDAwLCAweDRhLCAweDBhLCAweDEwLCAweDAwLCAweDIwLCAweDAwLAorICAgIDB4MDQsIDB4MDAsIDB4NmUsIDB4MDQsIDB4MDIsIDB4MDAsIDB4NmEsIDB4MDQsCisgICAgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHhjMCwgMHgwNCwgMHgwNCwKKyAgICAweDI4LCAweGMwLCAweGZlLCAweGZiLCAweDFlLCAweGMwLCAweDAwLCAweDA0LAorICAgIDB4MjIsIDB4YzAsIDB4ZmYsIDB4ZjQsIDB4YzAsIDB4MDAsIDB4OTAsIDB4MDksCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHg1NiwgMHgwOCwKKyAgICAweDYwLCAweDA4LCAweGQwLCAweDA4LCAweGRhLCAweDA4LCAweDAwLCAweDA5LAorICAgIDB4MDQsIDB4MDksIDB4MDgsIDB4MDksIDB4MzIsIDB4MDksIDB4NDIsIDB4MDksCisgICAgMHg1MCwgMHgwOSwgMHg1MiwgMHgwOSwgMHg1YSwgMHgwOSwgMHg1YSwgMHgwOSwKKyAgICAweDI3LCAweDAyLCAweGNhLCAweDA2LCAweDk3LCAweGNmLCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDYsIDB4MGEsIDB4MGUsIDB4MDEsIDB4MDAsCisgICAgMHhjYSwgMHg1NywgMHgwZSwgMHgwMCwgMHg5ZiwgMHhjMywgMHg1YSwgMHgwOSwKKyAgICAweGNhLCAweDM3LCAweDAwLCAweDAwLCAweDlmLCAweGMyLCAweDVhLCAweDA5LAorICAgIDB4MGEsIDB4ZDIsIDB4YjIsIDB4Y2YsIDB4MTYsIDB4MDgsIDB4YzgsIDB4MDksCisgICAgMHhkZSwgMHgwMCwgMHgwNywgMHgwNiwgMHg5ZiwgMHhjZiwgMHg2YywgMHgwOSwKKyAgICAweDE3LCAweDAyLCAweGM4LCAweDA5LCAweGRlLCAweDAwLCAweDAwLCAweDBlLAorICAgIDB4MGYsIDB4MDAsIDB4NDEsIDB4OTAsIDB4OWYsIDB4ZGUsIDB4MDYsIDB4MDAsCisgICAgMHhjOCwgMHgwNSwgMHgzMCwgMHg1MCwgMHgwNiwgMHgwMCwgMHg5ZiwgMHhjOCwKKyAgICAweDVhLCAweDA5LCAweDI3LCAweDBjLCAweDAyLCAweDAwLCAweGIwLCAweDA2LAorICAgIDB4YzAsIDB4MDksIDB4YjIsIDB4MDYsIDB4MjcsIDB4MDAsIDB4YjQsIDB4MDYsCisgICAgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHhhZSwgMHgwNiwgMHgyNywgMHgwMCwKKyAgICAweDgwLCAweDA2LCAweDAwLCAweDFjLCAweDA2LCAweDAwLCAweDI3LCAweDAwLAorICAgIDB4YjYsIDB4MDYsIDB4NDEsIDB4OTAsIDB4NjcsIDB4NTAsIDB4YjAsIDB4MDYsCisgICAgMHgwZCwgMHhjMCwgMHg2NywgMHgwMCwgMHg3ZSwgMHgwNiwgMHgyNywgMHgwYywKKyAgICAweDA2LCAweDAwLCAweDgyLCAweDA2LCAweGU3LCAweDA3LCAweGJjLCAweDA4LAorICAgIDB4ODQsIDB4MDYsIDB4YzgsIDB4MDcsIDB4N2UsIDB4MDYsIDB4NDEsIDB4OTAsCisgICAgMHg1MSwgMHhhZiwgMHg5NywgMHhjZiwgMHg5ZiwgMHhhZiwgMHg0OCwgMHgwYywKKyAgICAweGU3LCAweDA5LCAweGI2LCAweDA2LCAweGI0LCAweDA2LCAweGU3LCAweDA5LAorICAgIDB4YjAsIDB4MDYsIDB4YWUsIDB4MDYsIDB4NTksIDB4YWYsIDB4OTcsIDB4Y2YsCisgICAgMHgyNywgMHgwYywgMHgwMiwgMHgwMCwgMHhhYywgMHgwNiwgMHg1OSwgMHhhZiwKKyAgICAweDk3LCAweGNmLCAweDA5LCAweDBjLCAweDAyLCAweDAwLCAweDA5LCAweGRhLAorICAgIDB4NDksIDB4ZDIsIDB4YzksIDB4MTksIDB4ZDYsIDB4MDYsIDB4YzgsIDB4MDcsCisgICAgMHg3ZSwgMHgwNiwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMiwKKyAgICAweGUwLCAweDA3LCAweDA0LCAweDAwLCAweGQwLCAweDA3LCAweGNjLCAweDA4LAorICAgIDB4NDgsIDB4ZGIsIDB4NDEsIDB4OTAsIDB4NTAsIDB4YWYsIDB4OTcsIDB4Y2YsCisgICAgMHg1OSwgMHhhZiwgMHg5NywgMHhjZiwgMHg1OSwgMHhhZiwgMHg5NywgMHhjZiwKKyAgICAweGYwLCAweDU3LCAweDA2LCAweDAwLCAweDA2LCAweDAwLCAweDI1LCAweGMxLAorICAgIDB4ZTcsIDB4MDcsIDB4NzAsIDB4MDYsIDB4ODAsIDB4MDYsIDB4NDEsIDB4OTAsCisgICAgMHg2NywgMHgwMCwgMHg3ZSwgMHgwNiwgMHgyNywgMHgwYywgMHgwNiwgMHgwMCwKKyAgICAweDgyLCAweDA2LCAweGU3LCAweDA3LCAweDhjLCAweDA5LCAweDg0LCAweDA2LAorICAgIDB4YzgsIDB4MDcsIDB4N2UsIDB4MDYsIDB4NDEsIDB4OTAsIDB4NTEsIDB4YWYsCisgICAgMHg5NywgMHhjZiwgMHgwNywgMHgwYywgMHgwNiwgMHgwMCwgMHhjNywgMHg1NywKKyAgICAweDA2LCAweDAwLCAweDBmLCAweGMxLCAweGM4LCAweDA3LCAweDcwLCAweDA2LAorICAgIDB4MTUsIDB4Y2YsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZGEsCisgICAgMHg0MCwgMHhkMSwgMHgyNywgMHgwMCwgMHhjMiwgMHgwNiwgMHgxZSwgMHhjZiwKKyAgICAweDFkLCAweGNmLCAweDI3LCAweDBjLCAweDAyLCAweDAwLCAweGNjLCAweDA2LAorICAgIDB4MTksIDB4Y2YsIDB4MjcsIDB4MDIsIDB4MjAsIDB4MDEsIDB4ZTcsIDB4MDcsCisgICAgMHgwOCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhlNywgMHgwNywgMHgxMywgMHgwMCwKKyAgICAweGIwLCAweGMwLCAweDk3LCAweGNmLCAweDQxLCAweDkwLCAweDY3LCAweDAwLAorICAgIDB4N2UsIDB4MDYsIDB4ZTcsIDB4MDEsIDB4ODIsIDB4MDYsIDB4MjcsIDB4MDIsCisgICAgMHg4MCwgMHgwNiwgMHhlNywgMHgwNywgMHg4YywgMHgwOSwgMHg4NCwgMHgwNiwKKyAgICAweGM4LCAweDA3LCAweDdlLCAweDA2LCAweGMxLCAweDA3LCAweDAwLCAweDgwLAorICAgIDB4NTAsIDB4YWYsIDB4OTcsIDB4Y2YsIDB4NTksIDB4YWYsIDB4OTcsIDB4Y2YsCisgICAgMHgwMCwgMHg2MCwgMHgwNSwgMHhjMCwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweGM0LCAweDA2LCAweGE3LCAweGNmLCAweDdjLCAweDA2LCAweDlmLCAweGFmLAorICAgIDB4MDAsIDB4MGEsIDB4ZTcsIDB4MDcsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsCisgICAgMHg0OSwgMHhhZiwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHgwNywgMHhhZiwKKyAgICAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweDRhLCAweGFmLCAweGE3LCAweGNmLAorICAgIDB4N2MsIDB4MDYsIDB4YzAsIDB4MDcsIDB4ZmUsIDB4N2YsIDB4NDQsIDB4YWYsCisgICAgMHg0MCwgMHgwMCwgMHhjMCwgMHgzNywgMHgwMCwgMHgwMSwgMHg0MSwgMHg5MCwKKyAgICAweGMwLCAweDM3LCAweDA4LCAweDAwLCAweGRmLCAweGRlLCAweDUwLCAweDA2LAorICAgIDB4YzAsIDB4NTcsIDB4MTAsIDB4MDAsIDB4MDIsIDB4YzIsIDB4YzAsIDB4MDcsCisgICAgMHgxMCwgMHgwMCwgMHgyNywgMHgwMCwgMHg5YSwgMHgwNiwgMHg0MSwgMHg5MCwKKyAgICAweDlmLCAweGRlLCAweDQwLCAweDA2LCAweDQ0LCAweGFmLCAweDI3LCAweDAwLAorICAgIDB4OWMsIDB4MDYsIDB4YzAsIDB4MDksIDB4OWEsIDB4MDYsIDB4NDEsIDB4OTAsCisgICAgMHgwMCwgMHhkMiwgMHgwMCwgMHhkOCwgMHg5ZiwgMHhkZSwgMHgwOCwgMHgwMCwKKyAgICAweDQ0LCAweGFmLCAweDI3LCAweDAwLCAweGM4LCAweDA2LCAweDk3LCAweGNmLAorICAgIDB4ZTcsIDB4ODcsIDB4MDAsIDB4ODQsIDB4MjgsIDB4YzAsIDB4ZTcsIDB4NjcsCisgICAgMHhmZiwgMHhmYiwgMHgyNCwgMHhjMCwgMHg5NywgMHhjZiwgMHhlNywgMHg4NywKKyAgICAweDAxLCAweDAwLCAweGQyLCAweDA2LCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4YTgsIDB4MDYsIDB4OTcsIDB4YzEsIDB4OWYsIDB4YWYsIDB4MDAsIDB4MGEsCisgICAgMHhlNywgMHg4NywgMHgwMCwgMHgwNiwgMHgyMiwgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDAwLCAweDkwLCAweGMwLCAweGU3LCAweDY3LCAweGZlLCAweGZmLAorICAgIDB4M2UsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MjYsIDB4MDAsIDB4MGEsIDB4YzAsCisgICAgMHhlNywgMHg4NywgMHgwMSwgMHgwMCwgMHgzZSwgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweGZmLCAweGZmLCAweGJlLCAweDA2LCAweDlmLCAweGFmLCAweDEwLCAweDBiLAorICAgIDB4OTcsIDB4Y2YsIDB4MTcsIDB4MDAsIDB4YTcsIDB4YWYsIDB4NzgsIDB4MDYsCisgICAgMHhjMCwgMHgwNSwgMHgyNywgMHgwMCwgMHg3NiwgMHgwNiwgMHhlNywgMHg4NywKKyAgICAweDAxLCAweDAwLCAweGQyLCAweDA2LCAweDlmLCAweGFmLCAweDAwLCAweDBhLAorICAgIDB4ZTcsIDB4MDcsIDB4MGMsIDB4MDAsIDB4NDAsIDB4YzAsIDB4OWYsIDB4YWYsCisgICAgMHgxMCwgMHgwYiwgMHgwMCwgMHg5MCwgMHgyNywgMHgwMCwgMHhhNiwgMHgwNiwKKyAgICAweDI3LCAweDAwLCAweGFhLCAweDA2LCAweGU3LCAweDA5LCAweGIyLCAweDA2LAorICAgIDB4YjQsIDB4MDYsIDB4MjcsIDB4MDAsIDB4YWUsIDB4MDYsIDB4MjcsIDB4MDAsCisgICAgMHhhYywgMHgwNiwgMHg5ZiwgMHhhZiwgMHhhZSwgMHgwYSwgMHhjMCwgMHgwNywKKyAgICAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweGIyLCAweDAyLCAweDI3LCAweDAwLAorICAgIDB4YjQsIDB4MDIsIDB4MjcsIDB4MDAsIDB4OGUsIDB4MDYsIDB4YzAsIDB4MDcsCisgICAgMHgwNiwgMHgwMCwgMHhjOCwgMHgwOSwgMHhkZSwgMHgwMCwgMHhjOCwgMHgxNywKKyAgICAweDAzLCAweDAwLCAweGM5LCAweDA3LCAweDcwLCAweDA2LCAweDI5LCAweDBhLAorICAgIDB4MDAsIDB4ZGEsIDB4N2QsIDB4YzEsIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksCisgICAgMHgwMCwgMHhjMCwgMHhjMSwgMHhkZiwgMHgwMCwgMHg5MCwgMHgyNywgMHgwMCwKKyAgICAweDk2LCAweDA2LCAweGU3LCAweDA3LCAweDk2LCAweDA2LCAweDk4LCAweDA2LAorICAgIDB4MjcsIDB4MDAsIDB4YTAsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4YTAsIDB4MDYsCisgICAgMHhhMiwgMHgwNiwgMHgyNywgMHgwMCwgMHhhNiwgMHgwNiwgMHgyNywgMHgwMCwKKyAgICAweDkwLCAweDA2LCAweDI3LCAweDAwLCAweDllLCAweDA2LCAweGM4LCAweDA5LAorICAgIDB4OWMsIDB4MDYsIDB4YzEsIDB4MDksIDB4OWEsIDB4MDYsIDB4YzksIDB4MDcsCisgICAgMHhhNCwgMHgwNiwgMHgxMSwgMHgwMiwgMHgwOSwgMHgwMiwgMHhjOCwgMHgxNywKKyAgICAweDQwLCAweDA2LCAweDAxLCAweGRhLCAweDdhLCAweGMxLCAweDUxLCAweDk0LAorICAgIDB4YzgsIDB4MDksIDB4YzgsIDB4MDYsIDB4YzksIDB4MDcsIDB4YzYsIDB4MDYsCisgICAgMHhjMSwgMHgwOSwgMHg5YSwgMHgwNiwgMHgxMSwgMHgwMiwgMHgwOSwgMHgwMiwKKyAgICAweGM4LCAweDE3LCAweDA4LCAweDAwLCAweDAxLCAweGRhLCAweDdhLCAweGMxLAorICAgIDB4NTEsIDB4OTQsIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4OTcsIDB4Y2YsCisgICAgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHg3NiwgMHgwNiwgMHg5NywgMHhjMCwKKyAgICAweDlmLCAweGFmLCAweDA0LCAweDAwLCAweGU3LCAweDA5LCAweGJlLCAweDA2LAorICAgIDB4YmEsIDB4MDYsIDB4ZTcsIDB4NTcsIDB4ZmYsIDB4ZmYsIDB4YmEsIDB4MDYsCisgICAgMHgwNCwgMHhjMSwgMHhlNywgMHgwNywgMHgxMCwgMHgwYiwgMHhiOCwgMHgwNiwKKyAgICAweDk3LCAweGNmLCAweGU3LCAweDE3LCAweDMyLCAweDAwLCAweGJhLCAweDA2LAorICAgIDB4ZTcsIDB4NjcsIDB4ZmYsIDB4MDcsIDB4YmEsIDB4MDYsIDB4ZTcsIDB4MDcsCisgICAgMHg0NiwgMHgwYiwgMHhiOCwgMHgwNiwgMHg5NywgMHhjZiwgMHhlNywgMHg1NywKKyAgICAweDAwLCAweDAwLCAweGMwLCAweDA2LCAweDIzLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4MDQsIDB4MDAsIDB4OTAsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4ODAsCisgICAgMHg4MCwgMHhjMCwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMCwKKyAgICAweGU3LCAweDA3LCAweDAwLCAweDgwLCAweDgwLCAweGMwLCAweGMwLCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMCwKKyAgICAweGU3LCAweDA3LCAweDAwLCAweDgwLCAweDgwLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4ODAsIDB4NDAsIDB4YzAsIDB4YzAsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDAwLCAweDgwLCAweGMwLCAweGU3LCAweDA3LCAweDA0LCAweDAwLAorICAgIDB4OTAsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDIsIDB4NDAsIDB4YzAsCisgICAgMHhlNywgMHgwNywgMHgwYywgMHgwMiwgMHg0MCwgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDAwLCAweGMwLCAweDA2LCAweGU3LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4YjgsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MDYsCisgICAgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHhjMSwgMHhkZiwgMHg5ZiwgMHhhZiwKKyAgICAweDM0LCAweDAyLCAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweDlmLCAweGFmLAorICAgIDB4YzQsIDB4MDEsIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsCisgICAgMHgxNywgMHgwMCwgMHgxNywgMHgwMiwgMHg5NywgMHgwMiwgMHhlNywgMHg1NywKKyAgICAweDAwLCAweDAwLCAweGE4LCAweDA2LCAweDA2LCAweGMwLCAweGMwLCAweDA5LAorICAgIDB4OTIsIDB4YzAsIDB4YzAsIDB4NzcsIDB4MDksIDB4MDIsIDB4OWYsIDB4YzEsCisgICAgMHg1YywgMHgwNSwgMHg5ZiwgMHhjZiwgMHgzMiwgMHgwNiwgMHhkNywgMHgwOSwKKyAgICAweDBlLCAweGMwLCAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweDBlLCAweGMwLAorICAgIDB4OWYsIDB4YWYsIDB4MDIsIDB4MGMsIDB4ZTcsIDB4MDUsIDB4MGUsIDB4YzAsCisgICAgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHgxNywgMHgwMiwKKyAgICAweGM4LCAweDA5LCAweGIwLCAweGMwLCAweGU3LCAweDY3LCAweGZlLCAweDdmLAorICAgIDB4YjAsIDB4YzAsIDB4YzgsIDB4NzcsIDB4MDAsIDB4MjAsIDB4OWYsIDB4YzEsCisgICAgMHg2NCwgMHhlYiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwKKyAgICAweDlmLCAweGMxLCAweDgwLCAweGViLCAweGM4LCAweDk5LCAweGNhLCAweDAyLAorICAgIDB4YzgsIDB4NjcsIDB4MDQsIDB4MDAsIDB4OWYsIDB4YzEsIDB4OTYsIDB4ZWIsCisgICAgMHg5ZiwgMHhjZiwgMHg0YywgMHhlYiwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweGE2LCAweGMwLCAweGU3LCAweDA5LCAweGIwLCAweGMwLCAweGM4LCAweDAyLAorICAgIDB4ZTcsIDB4MDcsIDB4MDMsIDB4MDAsIDB4YjAsIDB4YzAsIDB4OTcsIDB4Y2YsCisgICAgMHhjMCwgMHgwOSwgMHhiMCwgMHgwNiwgMHhjMCwgMHgzNywgMHgwMSwgMHgwMCwKKyAgICAweDk3LCAweGM5LCAweGM5LCAweDA5LCAweGIyLCAweDA2LCAweDAyLCAweDAwLAorICAgIDB4NDEsIDB4OTAsIDB4NDgsIDB4MDIsIDB4YzksIDB4MTcsIDB4MDYsIDB4MDAsCisgICAgMHg5ZiwgMHhhZiwgMHgwOCwgMHgwNCwgMHg5ZiwgMHhhMiwgMHg3MiwgMHgwYywKKyAgICAweDAyLCAweGRhLCAweDc3LCAweGMxLCAweDQxLCAweDYwLCAweDcxLCAweGMxLAorICAgIDB4OTcsIDB4Y2YsIDB4MTcsIDB4MDIsIDB4NTcsIDB4MDIsIDB4NDMsIDB4MDQsCisgICAgMHgyMSwgMHgwNCwgMHhlMCwgMHgwMCwgMHg0MywgMHgwNCwgMHgyMSwgMHgwNCwKKyAgICAweGUwLCAweDAwLCAweDQzLCAweDA0LCAweDIxLCAweDA0LCAweGUwLCAweDAwLAorICAgIDB4YzEsIDB4MDcsIDB4MDEsIDB4MDAsIDB4YzksIDB4MDUsIDB4YzgsIDB4MDUsCisgICAgMHg5NywgMHhjZiwgMHhlNywgMHgwNywgMHgwMSwgMHgwMCwgMHg4ZSwgMHgwNiwKKyAgICAweGM4LCAweDA3LCAweDg2LCAweDA2LCAweGU3LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4ODYsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4MTAsIDB4MDgsIDB4ODgsIDB4MDYsCisgICAgMHhlNywgMHgwNywgMHgwNCwgMHgwMCwgMHg4YSwgMHgwNiwgMHhlNywgMHgwNywKKyAgICAweGJjLCAweDBjLCAweDhjLCAweDA2LCAweGMxLCAweDA3LCAweDAzLCAweDgwLAorICAgIDB4NTAsIDB4YWYsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHg4ZSwgMHgwNiwgMHg5NywgMHhjZiwKKyAgICAweDAwLCAweDAwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9uZXdfY29kZV9maXgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIF9fdTgga2F3ZXRoX25ld19jb2RlX2ZpeFtdID0gCit7CisgICAgMHhCNiwgMHhDMywgMHhBQSwgMHhCQiwgMHhDQywgMHhERCwKKyAgICAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDI4LCAweDAwLCAweDJjLCAweDAwLAorICAgIDB4MzQsIDB4MDAsIDB4M2MsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDgsIDB4MDAsCisgICAgMHg1NCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg1ZSwgMHgwMCwgMHg2NCwgMHgwMCwKKyAgICAweDY4LCAweDAwLCAweDZlLCAweDAwLCAweDZjLCAweDAwLCAweDcyLCAweDAwLAorICAgIDB4NzYsIDB4MDAsIDB4N2MsIDB4MDAsIDB4ODAsIDB4MDAsIDB4ODYsIDB4MDAsCisgICAgMHg4YSwgMHgwMCwgMHg5MCwgMHgwMCwgMHg5NCwgMHgwMCwgMHg5OCwgMHgwMCwKKyAgICAweDllLCAweDAwLCAweGE2LCAweDAwLCAweGFhLCAweDAwLCAweGIwLCAweDAwLAorICAgIDB4YjQsIDB4MDAsIDB4YjgsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YzYsIDB4MDAsCisgICAgMHhjYSwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkNCwgMHgwMCwgMHhkOCwgMHgwMCwKKyAgICAweGUwLCAweDAwLCAweGRlLCAweDAwLCAweGU4LCAweDAwLCAweGYwLCAweDAwLAorICAgIDB4ZmMsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MGEsIDB4MDEsIDB4MTgsIDB4MDEsCisgICAgMHgyMiwgMHgwMSwgMHgyOCwgMHgwMSwgMHgzYSwgMHgwMSwgMHgzZSwgMHgwMSwKKyAgICAweDdlLCAweDAxLCAweDk4LCAweDAxLCAweDljLCAweDAxLCAweGEyLCAweDAxLAorICAgIDB4YWMsIDB4MDEsIDB4YjIsIDB4MDEsIDB4YmEsIDB4MDEsIDB4YzAsIDB4MDEsCisgICAgMHhjOCwgMHgwMSwgMHhkMCwgMHgwMSwgMHhkNiwgMHgwMSwgMHhmNCwgMHgwMSwKKyAgICAweGZjLCAweDAxLCAweDA4LCAweDAyLCAweDE2LCAweDAyLCAweDFhLCAweDAyLAorICAgIDB4MjIsIDB4MDIsIDB4MmEsIDB4MDIsIDB4MmUsIDB4MDIsIDB4M2UsIDB4MDIsCisgICAgMHg0NCwgMHgwMiwgMHg0YSwgMHgwMiwgMHg1MCwgMHgwMiwgMHg2NCwgMHgwMiwKKyAgICAweDYyLCAweDAyLCAweDZjLCAweDAyLCAweDcyLCAweDAyLCAweDg2LCAweDAyLAorICAgIDB4OGMsIDB4MDIsIDB4OTAsIDB4MDIsIDB4OWUsIDB4MDIsIDB4YmMsIDB4MDIsCisgICAgMHhkMCwgMHgwMiwgMHhkOCwgMHgwMiwgMHhkYywgMHgwMiwgMHhlMCwgMHgwMiwKKyAgICAweGU4LCAweDAyLCAweGU2LCAweDAyLCAweGY0LCAweDAyLCAweGZlLCAweDAyLAorICAgIDB4MDQsIDB4MDMsIDB4MGMsIDB4MDMsIDB4MjgsIDB4MDMsIDB4N2MsIDB4MDMsCisgICAgMHg5MCwgMHgwMywgMHg5NCwgMHgwMywgMHg5YywgMHgwMywgMHhhMiwgMHgwMywKKyAgICAweGMwLCAweDAzLCAweGQwLCAweDAzLCAweGQ0LCAweDAzLCAweGVlLCAweDAzLAorICAgIDB4ZmEsIDB4MDMsIDB4ZmUsIDB4MDMsIDB4MmUsIDB4MDQsIDB4MzIsIDB4MDQsCisgICAgMHgzYywgMHgwNCwgMHg0MCwgMHgwNCwgMHg0ZSwgMHgwNCwgMHg3NiwgMHgwNCwKKyAgICAweDdjLCAweDA0LCAweDg0LCAweDA0LCAweDhhLCAweDA0LCAweDhlLCAweDA0LAorICAgIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDQsIDB4YjgsIDB4MDQsIDB4YmUsIDB4MDQsCisgICAgMHhkMiwgMHgwNCwgMHhkYywgMHgwNCwgMHhlZSwgMHgwNCwgMHgxMCwgMHgwNSwKKyAgICAweDFhLCAweDA1LCAweDI0LCAweDA1LCAweDJhLCAweDA1LCAweDM2LCAweDA1LAorICAgIDB4MzQsIDB4MDUsIDB4M2MsIDB4MDUsIDB4NDIsIDB4MDUsIDB4NjQsIDB4MDUsCisgICAgMHg2YSwgMHgwNSwgMHg2ZSwgMHgwNSwgMHg4NiwgMHgwNSwgMHgyMiwgMHgwNiwKKyAgICAweDI2LCAweDA2LCAweDJjLCAweDA2LCAweDMwLCAweDA2LCAweDQyLCAweDA2LAorICAgIDB4NGEsIDB4MDYsIDB4NGUsIDB4MDYsIDB4NTYsIDB4MDYsIDB4NTQsIDB4MDYsCisgICAgMHg1YSwgMHgwNiwgMHg2MCwgMHgwNiwgMHg2NiwgMHgwNiwgMHhlOCwgMHgwNiwKKyAgICAweGVlLCAweDA2LCAweGY0LCAweDA2LCAweDE2LCAweDA3LCAweDI2LCAweDA3LAorICAgIDB4MmMsIDB4MDcsIDB4MzIsIDB4MDcsIDB4MzYsIDB4MDcsIDB4M2EsIDB4MDcsCisgICAgMHgzZSwgMHgwNywgMHg1MiwgMHgwNywgMHg1NiwgMHgwNywgMHg1YSwgMHgwNywKKyAgICAweDY0LCAweDA3LCAweDc2LCAweDA3LCAweDdhLCAweDA3LCAweDgwLCAweDA3LAorICAgIDB4ODQsIDB4MDcsIDB4OGEsIDB4MDcsIDB4OWUsIDB4MDcsIDB4YTIsIDB4MDcsCisgICAgMHhkYSwgMHgwNywgMHhkZSwgMHgwNywgMHhlMiwgMHgwNywgMHhlNiwgMHgwNywKKyAgICAweGVhLCAweDA3LCAweGVlLCAweDA3LCAweGYyLCAweDA3LCAweGY2LCAweDA3LAorICAgIDB4MGUsIDB4MDgsIDB4MTYsIDB4MDgsIDB4MTgsIDB4MDgsIDB4MWEsIDB4MDgsCisgICAgMHgxYywgMHgwOCwgMHgxZSwgMHgwOCwgMHgyMCwgMHgwOCwgMHgyMiwgMHgwOCwKKyAgICAweDI0LCAweDA4LCAweDI2LCAweDA4LCAweDI4LCAweDA4LCAweDJhLCAweDA4LAorICAgIDB4MmMsIDB4MDgsIDB4MmUsIDB4MDgsIDB4MzIsIDB4MDgsIDB4M2EsIDB4MDgsCisgICAgMHg0NiwgMHgwOCwgMHg0ZSwgMHgwOCwgMHg1NCwgMHgwOCwgMHg1ZSwgMHgwOCwKKyAgICAweDc4LCAweDA4LCAweDdlLCAweDA4LCAweDgyLCAweDA4LCAweDg2LCAweDA4LAorICAgIDB4OGMsIDB4MDgsIDB4OTAsIDB4MDgsIDB4OTgsIDB4MDgsIDB4OWUsIDB4MDgsCisgICAgMHhhNCwgMHgwOCwgMHhhYSwgMHgwOCwgMHhiMCwgMHgwOCwgMHhhZSwgMHgwOCwKKyAgICAweGI0LCAweDA4LCAweGJlLCAweDA4LCAweGM0LCAweDA4LCAweGMyLCAweDA4LAorICAgIDB4Y2EsIDB4MDgsIDB4YzgsIDB4MDgsIDB4ZDQsIDB4MDgsIDB4ZTQsIDB4MDgsCisgICAgMHhlOCwgMHgwOCwgMHhmNiwgMHgwOCwgMHgxNCwgMHgwOSwgMHgxMiwgMHgwOSwKKyAgICAweDFhLCAweDA5LCAweDIwLCAweDA5LCAweDI2LCAweDA5LCAweDI0LCAweDA5LAorICAgIDB4MmEsIDB4MDksIDB4M2UsIDB4MDksIDB4NGMsIDB4MDksIDB4NTYsIDB4MDksCisgICAgMHg3MCwgMHgwOSwgMHg3NCwgMHgwOSwgMHg3OCwgMHgwOSwgMHg3ZSwgMHgwOSwKKyAgICAweDdjLCAweDA5LCAweDgyLCAweDA5LCAweDk4LCAweDA5LCAweDljLCAweDA5LAorICAgIDB4YTAsIDB4MDksIDB4YTYsIDB4MDksIDB4YjgsIDB4MDksIDB4ZGMsIDB4MDksCisgICAgMHhlOCwgMHgwOSwgMHhlYywgMHgwOSwgMHhmYywgMHgwOSwgMHgxMiwgMHgwYSwKKyAgICAweDE4LCAweDBhLCAweDFlLCAweDBhLCAweDQyLCAweDBhLCAweDQ2LCAweDBhLAorICAgIDB4NGUsIDB4MGEsIDB4NTQsIDB4MGEsIDB4NWEsIDB4MGEsIDB4NWUsIDB4MGEsCisgICAgMHg2OCwgMHgwYSwgMHg2ZSwgMHgwYSwgMHg3MiwgMHgwYSwgMHg3OCwgMHgwYSwKKyAgICAweDc2LCAweDBhLCAweDdjLCAweDBhLCAweDgwLCAweDBhLCAweDg0LCAweDBhLAorICAgIDB4OTQsIDB4MGEsIDB4YTQsIDB4MGEsIDB4YjgsIDB4MGEsIDB4YmUsIDB4MGEsCisgICAgMHhiYywgMHgwYSwgMHhjMiwgMHgwYSwgMHhjOCwgMHgwYSwgMHhjNiwgMHgwYSwKKyAgICAweGNjLCAweDBhLCAweGQwLCAweDBhLCAweGQ0LCAweDBhLCAweGQ4LCAweDBhLAorICAgIDB4ZGMsIDB4MGEsIDB4ZTAsIDB4MGEsIDB4ZjIsIDB4MGEsIDB4ZjYsIDB4MGEsCisgICAgMHhmYSwgMHgwYSwgMHgxNCwgMHgwYiwgMHgxYSwgMHgwYiwgMHgyMCwgMHgwYiwKKyAgICAweDFlLCAweDBiLCAweDI2LCAweDBiLCAweDJlLCAweDBiLCAweDJjLCAweDBiLAorICAgIDB4MzYsIDB4MGIsIDB4M2MsIDB4MGIsIDB4NDIsIDB4MGIsIDB4NDAsIDB4MGIsCisgICAgMHg0YSwgMHgwYiwgMHhhYSwgMHgwYiwgMHhiMCwgMHgwYiwgMHhiNiwgMHgwYiwKKyAgICAweGMwLCAweDBiLCAweGM4LCAweDBiLCAweGRhLCAweDBiLCAweGU4LCAweDBiLAorICAgIDB4ZWMsIDB4MGIsIDB4ZmEsIDB4MGIsIDB4NGEsIDB4MGMsIDB4NTQsIDB4MGMsCisgICAgMHg2MiwgMHgwYywgMHg2NiwgMHgwYywgMHg5NiwgMHgwYywgMHg5YSwgMHgwYywKKyAgICAweGEwLCAweDBjLCAweGE2LCAweDBjLCAweGE0LCAweDBjLCAweGFjLCAweDBjLAorICAgIDB4YjIsIDB4MGMsIDB4YjAsIDB4MGMsIDB4YzAsIDB4MGMsCisgICAgMHgwMCwgMHgwMAorfTsKKworCitzdGF0aWMgY29uc3QgaW50IGxlbl9rYXdldGhfdHJpZ2dlcl9jb2RlID0gc2l6ZW9mKGthd2V0aF90cmlnZ2VyX2NvZGUpOworc3RhdGljIGNvbnN0IGludCBsZW5fa2F3ZXRoX3RyaWdnZXJfY29kZV9maXggPSBzaXplb2Yoa2F3ZXRoX3RyaWdnZXJfY29kZV9maXgpOworc3RhdGljIGNvbnN0IGludCBsZW5fa2F3ZXRoX25ld19jb2RlID0gc2l6ZW9mKGthd2V0aF9uZXdfY29kZSk7CitzdGF0aWMgY29uc3QgaW50IGxlbl9rYXdldGhfbmV3X2NvZGVfZml4ID0gc2l6ZW9mKGthd2V0aF9uZXdfY29kZV9maXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjMTlkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKQEAgLTAsMCArMSwxNDA4IEBACisvKgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IFBldGtvIE1hbm9sb3YgKHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKglDaGFuZ2VMb2c6CisgKgkJLi4uLglNb3N0IG9mIHRoZSB0aW1lIHNwZW50IG9uIHJlYWRpbmcgc291cmNlcyAmIGRvY3MuCisgKgkJdjAuMi54CUZpcnN0IG9mZmljaWFsIHJlbGVhc2UgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisgKgkJdjAuMy4wCUJldXRpZmllZCBhbmQgc3RydWN0dXJlZCwgc29tZSBidWdzIGZpeGVkLgorICoJCXYwLjMueAlVUkJpZnlpbmcgYnVsayByZXF1ZXN0cyBhbmQgYnVnZml4aW5nLiBGaXJzdCByZWxhdGl2ZWx5CisgKgkJCXN0YWJsZSByZWxlYXNlLiBTdGlsbCBjYW4gdG91Y2ggZGV2aWNlJ3MgcmVnaXN0ZXJzIG9ubHkKKyAqCQkJZnJvbSB0b3AtaGFsdmVzLgorICoJCXYwLjQuMAlDb250cm9sIG1lc3NhZ2VzIHJlbWFpbmVkIHVudXJiaWZpZWQgYXJlIG5vdyBVUkJzLgorICoJCQlOb3cgd2UgY2FuIHRvdWNoIHRoZSBIVyBhdCBhbnkgdGltZS4KKyAqCQl2MC40LjkJQ29udHJvbCB1cmJzIGFnYWluIHVzZSBwcm9jZXNzIGNvbnRleHQgdG8gd2FpdC4gQXJnaC4uLgorICoJCQlTb21lIGxvbmcgc3RhbmRpbmcgYnVncyAoZW5hYmxlX25ldF90cmFmZmljKSBmaXhlZC4KKyAqCQkJQWxzbyBuYXN0eSB0cmljayBhYm91dCByZXN1Ym1pdGluZyBjb250cm9sIHVyYiBmcm9tCisgKgkJCWludGVycnVwdCBjb250ZXh0IHVzZWQuIFBsZWFzZSBsZXQgbWUga25vdyBob3cgaXQKKyAqCQkJYmVoYXZlcy4gUGVnYXN1cyBJSSBzdXBwb3J0IGFkZGVkIHNpbmNlIHRoaXMgdmVyc2lvbi4KKyAqCQkJVE9ETzogc3VwcHJlc3NpbmcgSENEIHdhcm5pbmdzIHNwZXdhZ2Ugb24gZGlzY29ubmVjdC4KKyAqCQl2MC40LjEzCUV0aGVybmV0IGFkZHJlc3MgaXMgbm93IHNldCBhdCBwcm9iZSgpLCBub3QgYXQgb3BlbigpCisgKgkJCXRpbWUgYXMgdGhpcyBzZWVtcyB0byBicmVhayBkaGNwZC4gCisgKgkJdjAuNS4wCWJyYW5jaCB0byAyLjUueCBrZXJuZWxzCisgKgkJdjAuNS4xCWV0aHRvb2wgc3VwcG9ydCBhZGRlZAorICoJCXYwLjUuNQlyeCBzb2NrZXQgYnVmZmVycyBhcmUgaW4gYSBwb29sIGFuZCB0aGUgdGhlaXIgYWxsb2NhdGlvbgorICogCQkJaXMgb3V0IG9mIHRoZSBpbnRlcnJ1cHQgcm91dGluZS4KKyAqLworCisjdW5kZWYJREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInBlZ2FzdXMuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNi4xMiAoMjAwNS8wMS8xMykiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlBldGtvIE1hbm9sb3YgPHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAiUGVnYXN1cy9QZWdhc3VzIElJIFVTQiBFdGhlcm5ldCBkcml2ZXIiCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAicGVnYXN1cyI7CisKKyN1bmRlZglQRUdBU1VTX1dSSVRFX0VFUFJPTQorI2RlZmluZQlCTVNSX01FRElBCShCTVNSXzEwSEFMRiB8IEJNU1JfMTBGVUxMIHwgQk1TUl8xMDBIQUxGIHwgXAorCQkJQk1TUl8xMDBGVUxMIHwgQk1TUl9BTkVHQ0FQQUJMRSkKKworc3RhdGljIGludCBsb29wYmFjayA9IDA7CitzdGF0aWMgaW50IG1paV9tb2RlID0gMDsKK3N0YXRpYyBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDMyOworCitzdGF0aWMgc3RydWN0IHVzYl9ldGhfZGV2IHVzYl9kZXZfaWRbXSA9IHsKKyNkZWZpbmUJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykJXAorCXsubmFtZSA9IHBuLCAudmVuZG9yID0gdmlkLCAuZGV2aWNlID0gcGlkLCAucHJpdmF0ZSA9IGZsYWdzfSwKKyNpbmNsdWRlICJwZWdhc3VzLmgiCisjdW5kZWYJUEVHQVNVU19ERVYKKwl7TlVMTCwgMCwgMCwgMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0geworI2RlZmluZQlQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKSBcCisJey5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWR9LAorI2luY2x1ZGUgInBlZ2FzdXMuaCIKKyN1bmRlZglQRUdBU1VTX0RFVgorCXt9Cit9OworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9wYXJhbShsb29wYmFjaywgYm9vbCwgMCk7Cittb2R1bGVfcGFyYW0obWlpX21vZGUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhsb29wYmFjaywgIkVuYWJsZSBNQUMgbG9vcGJhY2sgbW9kZSAoYml0IDApIik7CitNT0RVTEVfUEFSTV9ERVNDKG1paV9tb2RlLCAiRW5hYmxlIEhvbWVQTkEgbW9kZSAoYml0IDApLGRlZmF1bHQ9TUlJIG1vZGUgPSAwIik7CisKKy8qIHVzZSBldGh0b29sIHRvIGNoYW5nZSB0aGUgbGV2ZWwgZm9yIGFueSBnaXZlbiBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgbXNnX2xldmVsID0gLTE7Cittb2R1bGVfcGFyYW0gKG1zZ19sZXZlbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKG1zZ19sZXZlbCwgIk92ZXJyaWRlIGRlZmF1bHQgbWVzc2FnZSBsZXZlbCIpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcGVnYXN1c19pZHMpOworCitzdGF0aWMgaW50IHVwZGF0ZV9ldGhfcmVnc19hc3luYyhwZWdhc3VzX3QgKik7CisvKiBBYXJnaCEhISBJIF9yZWFsbHlfIGhhdGUgc3VjaCB0d2Vha3MgKi8KK3N0YXRpYyB2b2lkIGN0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAoIXBlZ2FzdXMpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWlmIChwZWdhc3VzLT5mbGFncyAmIEVUSF9SRUdTX0NIQU5HRSkgeworCQkJcGVnYXN1cy0+ZmxhZ3MgJj0gfkVUSF9SRUdTX0NIQU5HRTsKKwkJCXBlZ2FzdXMtPmZsYWdzIHw9IEVUSF9SRUdTX0NIQU5HRUQ7CisJCQl1cGRhdGVfZXRoX3JlZ3NfYXN5bmMocGVnYXN1cyk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCXJldHVybjsKKwljYXNlIC1FTk9FTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisJcGVnYXN1cy0+ZmxhZ3MgJj0gfkVUSF9SRUdTX0NIQU5HRUQ7CisJd2FrZV91cCgmcGVnYXN1cy0+Y3RybF93YWl0KTsKK30KKworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTE2IGluZHgsIF9fdTE2IHNpemUsCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKmJ1ZmZlcjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKKwkJCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKHBlZ2FzdXMtPmZsYWdzICYgRVRIX1JFR1NfQ0hBTkdFRCkKKwkJc2NoZWR1bGUoKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0VHlwZSA9IFBFR0FTVVNfUkVRVF9SRUFEOworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0ID0gUEVHQVNVU19SRVFfR0VUX1JFR1M7CisJcGVnYXN1cy0+ZHIud1ZhbHVlID0gY3B1X3RvX2xlMTYoMCk7CisJcGVnYXN1cy0+ZHIud0luZGV4ID0gY3B1X3RvX2xlMTZwKCZpbmR4KTsKKwlwZWdhc3VzLT5kci53TGVuZ3RoID0gY3B1X3RvX2xlMTZwKCZzaXplKTsKKwlwZWdhc3VzLT5jdHJsX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemU7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUocGVnYXN1cy0+dXNiLCAwKSwKKwkJCSAgICAgKGNoYXIgKikgJnBlZ2FzdXMtPmRyLAorCQkJICAgICBidWZmZXIsIHNpemUsIGN0cmxfY2FsbGJhY2ssIHBlZ2FzdXMpOworCisJYWRkX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCS8qIHVzaW5nIEFUT01JQywgd2UnZCBuZXZlciB3YWtlIHVwIGlmIHdlIHNsZXB0ICovCisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgR0ZQX0FUT01JQykpKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzY2hlZHVsZSgpOworb3V0OgorCXJlbW92ZV93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwltZW1jcHkoZGF0YSwgYnVmZmVyLCBzaXplKTsKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTE2IGluZHgsIF9fdTE2IHNpemUsCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKmJ1ZmZlcjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKKwkJCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweShidWZmZXIsIGRhdGEsIHNpemUpOworCisJYWRkX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwl3aGlsZSAocGVnYXN1cy0+ZmxhZ3MgJiBFVEhfUkVHU19DSEFOR0VEKQorCQlzY2hlZHVsZSgpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcGVnYXN1cy0+ZHIuYlJlcXVlc3RUeXBlID0gUEVHQVNVU19SRVFUX1dSSVRFOworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0ID0gUEVHQVNVU19SRVFfU0VUX1JFR1M7CisJcGVnYXN1cy0+ZHIud1ZhbHVlID0gY3B1X3RvX2xlMTYoMCk7CisJcGVnYXN1cy0+ZHIud0luZGV4ID0gY3B1X3RvX2xlMTZwKCZpbmR4KTsKKwlwZWdhc3VzLT5kci53TGVuZ3RoID0gY3B1X3RvX2xlMTZwKCZzaXplKTsKKwlwZWdhc3VzLT5jdHJsX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemU7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocGVnYXN1cy0+dXNiLCAwKSwKKwkJCSAgICAgKGNoYXIgKikgJnBlZ2FzdXMtPmRyLAorCQkJICAgICBidWZmZXIsIHNpemUsIGN0cmxfY2FsbGJhY2ssIHBlZ2FzdXMpOworCisJYWRkX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJc2NoZWR1bGUoKTsKK291dDoKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JlZ2lzdGVyKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTE2IGluZHgsIF9fdTggZGF0YSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnRtcDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCXRtcCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXApIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKKwkJCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweSh0bXAsICZkYXRhLCAxKTsKKwlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXdoaWxlIChwZWdhc3VzLT5mbGFncyAmIEVUSF9SRUdTX0NIQU5HRUQpCisJCXNjaGVkdWxlKCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlwZWdhc3VzLT5kci5iUmVxdWVzdFR5cGUgPSBQRUdBU1VTX1JFUVRfV1JJVEU7CisJcGVnYXN1cy0+ZHIuYlJlcXVlc3QgPSBQRUdBU1VTX1JFUV9TRVRfUkVHOworCXBlZ2FzdXMtPmRyLndWYWx1ZSA9IGNwdV90b19sZTE2KGRhdGEpOworCXBlZ2FzdXMtPmRyLndJbmRleCA9IGNwdV90b19sZTE2cCgmaW5keCk7CisJcGVnYXN1cy0+ZHIud0xlbmd0aCA9IGNwdV90b19sZTE2KDEpOworCXBlZ2FzdXMtPmN0cmxfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShwZWdhc3VzLT51c2IsIDApLAorCQkJICAgICAoY2hhciAqKSAmcGVnYXN1cy0+ZHIsCisJCQkgICAgICZ0bXAsIDEsIGN0cmxfY2FsbGJhY2ssIHBlZ2FzdXMpOworCisJYWRkX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJc2NoZWR1bGUoKTsKK291dDoKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJa2ZyZWUodG1wKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2V0aF9yZWdzX2FzeW5jKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJaW50IHJldDsKKworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0VHlwZSA9IFBFR0FTVVNfUkVRVF9XUklURTsKKwlwZWdhc3VzLT5kci5iUmVxdWVzdCA9IFBFR0FTVVNfUkVRX1NFVF9SRUdTOworCXBlZ2FzdXMtPmRyLndWYWx1ZSA9IDA7CisJcGVnYXN1cy0+ZHIud0luZGV4ID0gY3B1X3RvX2xlMTYoRXRoQ3RybDApOworCXBlZ2FzdXMtPmRyLndMZW5ndGggPSBjcHVfdG9fbGUxNigzKTsKKwlwZWdhc3VzLT5jdHJsX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDM7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocGVnYXN1cy0+dXNiLCAwKSwKKwkJCSAgICAgKGNoYXIgKikgJnBlZ2FzdXMtPmRyLAorCQkJICAgICBwZWdhc3VzLT5ldGhfcmVncywgMywgY3RybF9jYWxsYmFjaywgcGVnYXN1cyk7CisKKwlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpCisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWFkX21paV93b3JkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggcGh5LCBfX3U4IGluZHgsIF9fdTE2ICogcmVnZCkKK3sKKwlpbnQgaTsKKwlfX3U4IGRhdGFbNF0gPSB7IHBoeSwgMCwgMCwgaW5keCB9OworCV9fbGUxNiByZWdkaTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIDApOworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5QWRkciwgc2l6ZW9mIChkYXRhKSwgZGF0YSk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIChpbmR4IHwgUEhZX1JFQUQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUN0cmwsIDEsIGRhdGEpOworCQlpZiAoZGF0YVswXSAmIFBIWV9ET05FKQorCQkJYnJlYWs7CisJfQorCWlmIChpIDwgUkVHX1RJTUVPVVQpIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlEYXRhLCAyLCAmcmVnZGkpOworCQkqcmVnZCA9IGxlMTZfdG9fY3B1KHJlZ2RpKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IChwZWdhc3VzX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgcmVzOworCisJcmVhZF9taWlfd29yZChwZWdhc3VzLCBwaHlfaWQsIGxvYywgJnJlcyk7CisJcmV0dXJuIChpbnQpcmVzOworfQorCitzdGF0aWMgaW50IHdyaXRlX21paV93b3JkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggcGh5LCBfX3U4IGluZHgsIF9fdTE2IHJlZ2QpCit7CisJaW50IGk7CisJX191OCBkYXRhWzRdID0geyBwaHksIDAsIDAsIGluZHggfTsKKwlpbnQgcmV0OworCisJZGF0YVsxXSA9ICh1OCkgcmVnZDsKKwlkYXRhWzJdID0gKHU4KSAocmVnZCA+PiA4KTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgMCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlBZGRyLCBzaXplb2YoZGF0YSksIGRhdGEpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBQaHlDdHJsLCAoaW5keCB8IFBIWV9XUklURSkpOworCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5Q3RybCwgMSwgZGF0YSk7CisJCWlmIChkYXRhWzBdICYgUEhZX0RPTkUpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPCBSRUdfVElNRU9VVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSAocGVnYXN1c190ICopIG5ldGRldl9wcml2KGRldik7CisKKwl3cml0ZV9taWlfd29yZChwZWdhc3VzLCBwaHlfaWQsIGxvYywgdmFsKTsKK30KKworc3RhdGljIGludCByZWFkX2Vwcm9tX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBpbmRleCwgX191MTYgKiByZXRkYXRhKQoreworCWludCBpOworCV9fdTggdG1wOworCV9fbGUxNiByZXRkYXRhaTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tT2Zmc2V0LCBpbmRleCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tQ3RybCwgRVBST01fUkVBRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMSwgJnRtcCk7CisJCWlmICh0bXAgJiBFUFJPTV9ET05FKQorCQkJYnJlYWs7CisJfQorCWlmIChpIDwgUkVHX1RJTUVPVVQpIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFcHJvbURhdGEsIDIsICZyZXRkYXRhaSk7CisJCSpyZXRkYXRhID0gbGUxNl90b19jcHUocmV0ZGF0YWkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIC0xOworfQorCisjaWZkZWYJUEVHQVNVU19XUklURV9FRVBST00KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfZXByb21fd3JpdGUocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlfX3U4IHRtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMiwgMSwgJnRtcCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEV0aEN0cmwyLCB0bXAgfCBFUFJPTV9XUl9FTkFCTEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCV9fdTggdG1wOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwyLCAxLCAmdG1wKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21DdHJsLCAwKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDIsIHRtcCAmIH5FUFJPTV9XUl9FTkFCTEUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2Vwcm9tX3dvcmQocGVnYXN1c190ICogcGVnYXN1cywgX191OCBpbmRleCwgX191MTYgZGF0YSkKK3sKKwlpbnQgaTsKKwlfX3U4IHRtcCwgZFs0XSA9IHsgMHgzZiwgMCwgMCwgRVBST01fV1JJVEUgfTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFcHJvbU9mZnNldCwgNCwgZCk7CisJZW5hYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXMpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbU9mZnNldCwgaW5kZXgpOworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21EYXRhLCAyLCAmZGF0YSk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tQ3RybCwgRVBST01fV1JJVEUpOworCisJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFcHJvbUN0cmwsIDEsICZ0bXApOworCQlpZiAodG1wICYgRVBST01fRE9ORSkKKwkJCWJyZWFrOworCX0KKwlkaXNhYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXMpOworCWlmIChpIDwgUkVHX1RJTUVPVVQpCisJCXJldHVybiAwOworCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYJCQkJLyogUEVHQVNVU19XUklURV9FRVBST00gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9ub2RlX2lkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggKiBpZCkKK3sKKwlpbnQgaTsKKwlfX3UxNiB3MTY7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJlYWRfZXByb21fd29yZChwZWdhc3VzLCBpLCAmdzE2KTsKKwkJKChfX2xlMTYgKikgaWQpW2ldID0gY3B1X3RvX2xlMTZwKCZ3MTYpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2V0aGVybmV0X2FkZHIocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlfX3U4IG5vZGVfaWRbNl07CisJaW50IHJldDsKKworCWdldF9ub2RlX2lkKHBlZ2FzdXMsIG5vZGVfaWQpOworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoSUQsIHNpemVvZiAobm9kZV9pZCksIG5vZGVfaWQpOworCW1lbWNweShwZWdhc3VzLT5uZXQtPmRldl9hZGRyLCBub2RlX2lkLCBzaXplb2YgKG5vZGVfaWQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVzZXRfbWFjKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJX191OCBkYXRhID0gMHg4OworCWludCBpOworCWludCByZXQ7CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXRoQ3RybDEsIGRhdGEpOworCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDEsIDEsICZkYXRhKTsKKwkJaWYgKH5kYXRhICYgMHgwOCkgeworCQkJaWYgKGxvb3BiYWNrICYgMSkKKwkJCQlicmVhazsKKwkJCWlmIChtaWlfbW9kZSAmJiAocGVnYXN1cy0+ZmVhdHVyZXMgJiBIQVNfSE9NRV9QTkEpKQorCQkJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMSwgMHgzNCk7CisJCQllbHNlCisJCQkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8xLCAweDI2KTsKKwkJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgcGVnYXN1cy0+ZmVhdHVyZXMpOworCQkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEdwaW8wLCBERUZBVUxUX0dQSU9fU0VUKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IFJFR19USU1FT1VUKQorCQlyZXR1cm4gMTsKKworCWlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8CisJICAgIHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0RMSU5LKSB7CisJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNCk7CisJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgMHgyNik7CisJfQorCWlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9FTENPTikgeworCQlfX3UxNiBhdXhtb2RlOworCQlyZWFkX21paV93b3JkKHBlZ2FzdXMsIDMsIDB4MWIsICZhdXhtb2RlKTsKKwkJd3JpdGVfbWlpX3dvcmQocGVnYXN1cywgMywgMHgxYiwgYXV4bW9kZSB8IDQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuYWJsZV9uZXRfdHJhZmZpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQoreworCV9fdTE2IGxpbmtwYXJ0OworCV9fdTggZGF0YVs0XTsKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQ7CisKKwlyZWFkX21paV93b3JkKHBlZ2FzdXMsIHBlZ2FzdXMtPnBoeSwgTUlJX0xQQSwgJmxpbmtwYXJ0KTsKKwlkYXRhWzBdID0gMHhjOTsKKwlkYXRhWzFdID0gMDsKKwlpZiAobGlua3BhcnQgJiAoQURWRVJUSVNFXzEwMEZVTEwgfCBBRFZFUlRJU0VfMTBGVUxMKSkKKwkJZGF0YVsxXSB8PSAweDIwOwkvKiBzZXQgZnVsbCBkdXBsZXggKi8KKwlpZiAobGlua3BhcnQgJiAoQURWRVJUSVNFXzEwMEZVTEwgfCBBRFZFUlRJU0VfMTAwSEFMRikpCisJCWRhdGFbMV0gfD0gMHgxMDsJLyogc2V0IDEwMCBNYnBzICovCisJaWYgKG1paV9tb2RlKQorCQlkYXRhWzFdID0gMDsKKwlkYXRhWzJdID0gKGxvb3BiYWNrICYgMSkgPyAweDA5IDogMHgwMTsKKworCW1lbWNweShwZWdhc3VzLT5ldGhfcmVncywgZGF0YSwgc2l6ZW9mIChkYXRhKSk7CisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMywgZGF0YSk7CisKKwlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfTElOS1NZUyB8fAorCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykgeworCQl1MTYgYXV4bW9kZTsKKwkJcmVhZF9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCAmYXV4bW9kZSk7CisJCXdyaXRlX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsIGF1eG1vZGUgfCA0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9za2JfcG9vbChwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX1NLQlM7IGkrKykgeworCQlpZiAocGVnYXN1cy0+cnhfcG9vbFtpXSkKKwkJCWNvbnRpbnVlOworCQlwZWdhc3VzLT5yeF9wb29sW2ldID0gZGV2X2FsbG9jX3NrYihQRUdBU1VTX01UVSArIDIpOworCQkvKgorCQkgKiogd2UgZ2l2ZSB1cCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsLiB0aGUgdGFza2xldCB3aWxsIGJlCisJCSAqKiByZXNjaGVkdWxlZCBhZ2FpbiBhbnl3YXkuLi4KKwkJICovCisJCWlmIChwZWdhc3VzLT5yeF9wb29sW2ldID09IE5VTEwpCisJCQlyZXR1cm47CisJCXBlZ2FzdXMtPnJ4X3Bvb2xbaV0tPmRldiA9IHBlZ2FzdXMtPm5ldDsKKwkJc2tiX3Jlc2VydmUocGVnYXN1cy0+cnhfcG9vbFtpXSwgMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX3NrYl9wb29sKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfU0tCUzsgaSsrKSB7CisJCWlmIChwZWdhc3VzLT5yeF9wb29sW2ldKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHBlZ2FzdXMtPnJ4X3Bvb2xbaV0pOworCQkJcGVnYXN1cy0+cnhfcG9vbFtpXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnB1bGxfc2tiKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9TS0JTOyBpKyspIHsKKwkJaWYgKGxpa2VseShwZWdhc3VzLT5yeF9wb29sW2ldICE9IE5VTEwpKSB7CisJCQlza2IgPSBwZWdhc3VzLT5yeF9wb29sW2ldOworCQkJcGVnYXN1cy0+cnhfcG9vbFtpXSA9IE5VTEw7CisJCQlyZXR1cm4gc2tiOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldDsKKwlpbnQgcnhfc3RhdHVzLCBjb3VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl1OCAqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJX191MTYgcGt0X2xlbjsKKworCWlmICghcGVnYXN1cykKKwkJcmV0dXJuOworCisJbmV0ID0gcGVnYXN1cy0+bmV0OworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0KSB8fCAhbmV0aWZfcnVubmluZyhuZXQpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FVElNRURPVVQ6CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiByZXNldCBNQUNcbiIsIG5ldC0+bmFtZSk7CisJCXBlZ2FzdXMtPmZsYWdzICY9IH5QRUdBU1VTX1JYX0JVU1k7CisJCWJyZWFrOworCWNhc2UgLUVQSVBFOgkJLyogc3RhbGwsIG9yIGRpc2Nvbm5lY3QgZnJvbSBUVCAqLworCQkvKiBGSVhNRSBzY2hlZHVsZSB3b3JrIHRvIGNsZWFyIHRoZSBoYWx0ICovCisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG5vIHJ4IHN0YWxsIHJlY292ZXJ5XG4iLAorCQkJCQluZXQtPm5hbWUpOworCQlyZXR1cm47CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlpZiAobmV0aWZfbXNnX2lmZG93bihwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogcnggdW5saW5rLCAlZFxuIiwgbmV0LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogUlggc3RhdHVzICVkXG4iLCBuZXQtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJZ290byBnb29uOworCX0KKworCWlmICghY291bnQgfHwgY291bnQgPCA0KQorCQlnb3RvIGdvb247CisKKwlyeF9zdGF0dXMgPSBidWZbY291bnQgLSAyXTsKKwlpZiAocnhfc3RhdHVzICYgMHgxZSkgeworCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogUlggcGFja2V0IGVycm9yICV4XG4iLAorCQkJCQluZXQtPm5hbWUsIHJ4X3N0YXR1cyk7CisJCXBlZ2FzdXMtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlpZiAocnhfc3RhdHVzICYgMHgwNikJLy8gbG9uZyBvciBydW50CisJCQlwZWdhc3VzLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWlmIChyeF9zdGF0dXMgJiAweDA4KQorCQkJcGVnYXN1cy0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlpZiAocnhfc3RhdHVzICYgMHgxMCkJLy8gZXh0cmEgYml0cworCQkJcGVnYXN1cy0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWdvdG8gZ29vbjsKKwl9CisJaWYgKHBlZ2FzdXMtPmNoaXAgPT0gMHg4NTEzKSB7CisJCXBrdF9sZW4gPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJcGt0X2xlbiAmPSAweDBmZmY7CisJCXBlZ2FzdXMtPnJ4X3NrYi0+ZGF0YSArPSAyOworCX0gZWxzZSB7CisJCXBrdF9sZW4gPSBidWZbY291bnQgLSAzXSA8PCA4OworCQlwa3RfbGVuICs9IGJ1Zltjb3VudCAtIDRdOworCQlwa3RfbGVuICY9IDB4ZmZmOworCQlwa3RfbGVuIC09IDg7CisJfQorCisJLyoKKwkgKiBhdCB0aGlzIHBvaW50IHdlIGFyZSBzdXJlIHBlZ2FzdXMtPnJ4X3NrYiAhPSBOVUxMCisJICogc28gd2UgZ28gYWhlYWQgYW5kIHBhc3MgdXAgdGhlIHBhY2tldC4KKwkgKi8KKwlza2JfcHV0KHBlZ2FzdXMtPnJ4X3NrYiwgcGt0X2xlbik7CisJcGVnYXN1cy0+cnhfc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBlZ2FzdXMtPnJ4X3NrYiwgbmV0KTsKKwluZXRpZl9yeChwZWdhc3VzLT5yeF9za2IpOworCXBlZ2FzdXMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlwZWdhc3VzLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCisJaWYgKHBlZ2FzdXMtPmZsYWdzICYgUEVHQVNVU19VTlBMVUcpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmcGVnYXN1cy0+cnhfcG9vbF9sb2NrKTsKKwlwZWdhc3VzLT5yeF9za2IgPSBwdWxsX3NrYihwZWdhc3VzKTsKKwlzcGluX3VubG9jaygmcGVnYXN1cy0+cnhfcG9vbF9sb2NrKTsKKworCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkKKwkJZ290byB0bF9zY2hlZDsKK2dvb246CisJdXNiX2ZpbGxfYnVsa191cmIocGVnYXN1cy0+cnhfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShwZWdhc3VzLT51c2IsIDEpLAorCQkJICBwZWdhc3VzLT5yeF9za2ItPmRhdGEsIFBFR0FTVVNfTVRVICsgOCwKKwkJCSAgcmVhZF9idWxrX2NhbGxiYWNrLCBwZWdhc3VzKTsKKwlpZiAodXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+cnhfdXJiLCBHRlBfQVRPTUlDKSkgeworCQlwZWdhc3VzLT5mbGFncyB8PSBQRUdBU1VTX1JYX1VSQl9GQUlMOworCQlnb3RvIHRsX3NjaGVkOworCX0gZWxzZSB7CisJCXBlZ2FzdXMtPmZsYWdzICY9IH5QRUdBU1VTX1JYX1VSQl9GQUlMOworCX0KKworCXJldHVybjsKKwordGxfc2NoZWQ6CisJdGFza2xldF9zY2hlZHVsZSgmcGVnYXN1cy0+cnhfdGwpOworfQorCitzdGF0aWMgdm9pZCByeF9maXh1cCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJcGVnYXN1c190ICpwZWdhc3VzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwZWdhc3VzID0gKHBlZ2FzdXNfdCAqKSBkYXRhOworCWlmIChwZWdhc3VzLT5mbGFncyAmIFBFR0FTVVNfVU5QTFVHKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGVnYXN1cy0+cnhfcG9vbF9sb2NrLCBmbGFncyk7CisJZmlsbF9za2JfcG9vbChwZWdhc3VzKTsKKwlpZiAocGVnYXN1cy0+ZmxhZ3MgJiBQRUdBU1VTX1JYX1VSQl9GQUlMKQorCQlpZiAocGVnYXN1cy0+cnhfc2tiKQorCQkJZ290byB0cnlfYWdhaW47CisJaWYgKHBlZ2FzdXMtPnJ4X3NrYiA9PSBOVUxMKSB7CisJCXBlZ2FzdXMtPnJ4X3NrYiA9IHB1bGxfc2tiKHBlZ2FzdXMpOworCX0KKwlpZiAocGVnYXN1cy0+cnhfc2tiID09IE5VTEwpIHsKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbG93IG9uIG1lbW9yeVxuIiwKKwkJCQkJcGVnYXN1cy0+bmV0LT5uYW1lKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmcGVnYXN1cy0+cnhfdGwpOworCQlnb3RvIGRvbmU7CisJfQorCXVzYl9maWxsX2J1bGtfdXJiKHBlZ2FzdXMtPnJ4X3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICB1c2JfcmN2YnVsa3BpcGUocGVnYXN1cy0+dXNiLCAxKSwKKwkJCSAgcGVnYXN1cy0+cnhfc2tiLT5kYXRhLCBQRUdBU1VTX01UVSArIDgsCisJCQkgIHJlYWRfYnVsa19jYWxsYmFjaywgcGVnYXN1cyk7Cit0cnlfYWdhaW46CisJaWYgKHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPnJ4X3VyYiwgR0ZQX0FUT01JQykpIHsKKwkJcGVnYXN1cy0+ZmxhZ3MgfD0gUEVHQVNVU19SWF9VUkJfRkFJTDsKKwkJdGFza2xldF9zY2hlZHVsZSgmcGVnYXN1cy0+cnhfdGwpOworCX0gZWxzZSB7CisJCXBlZ2FzdXMtPmZsYWdzICY9IH5QRUdBU1VTX1JYX1VSQl9GQUlMOworCX0KK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGVnYXN1cy0+cnhfcG9vbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IHBlZ2FzdXMtPm5ldDsKKworCWlmICghcGVnYXN1cykKKwkJcmV0dXJuOworCisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXQpIHx8ICFuZXRpZl9ydW5uaW5nKG5ldCkpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FUElQRToKKwkJLyogRklYTUUgc2NoZWR1bGVfd29yaygpIHRvIGNsZWFyIHRoZSB0eCBoYWx0ICovCisJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKwkJaWYgKG5ldGlmX21zZ190eF9lcnIocGVnYXN1cykpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm8gdHggc3RhbGwgcmVjb3ZlcnlcbiIsCisJCQkJCW5ldC0+bmFtZSk7CisJCXJldHVybjsKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FU0hVVERPV046CisJCWlmIChuZXRpZl9tc2dfaWZkb3duKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiB0eCB1bmxpbmssICVkXG4iLCBuZXQtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHBlZ2FzdXMpKQorCQkJcHJfaW5mbygiJXM6IFRYIHN0YXR1cyAlZFxuIiwgbmV0LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgMDoKKwkJYnJlYWs7CisJfQorCisJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOworfQorCitzdGF0aWMgdm9pZCBpbnRyX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CisJaW50IHN0YXR1czsKKworCWlmICghcGVnYXN1cykKKwkJcmV0dXJuOworCW5ldCA9IHBlZ2FzdXMtPm5ldDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQkvKiBzb21lIFBlZ2FzdXMtSSBwcm9kdWN0cyByZXBvcnQgTE9UUyBvZiBkYXRhCisJCSAqIHRvZ2dsZSBlcnJvcnMuLi4gYXZvaWQgbG9nIHNwYW1taW5nCisJCSAqLworCQlpZiAobmV0aWZfbXNnX3RpbWVyKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiBpbnRyIHN0YXR1cyAlZFxuIiwgbmV0LT5uYW1lLAorCQkJCQl1cmItPnN0YXR1cyk7CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+PSA2KSB7CisJCXU4CSogZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJCS8qIGJ5dGUgMCA9PSB0eF9zdGF0dXMxLCByZWcgMkIgKi8KKwkJaWYgKGRbMF0gJiAoVFhfVU5ERVJSVU58RVhDRVNTSVZFX0NPTAorCQkJCQl8TEFURV9DT0x8SkFCQkVSX1RJTUVPVVQpKSB7CisJCQlwZWdhc3VzLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWlmIChkWzBdICYgVFhfVU5ERVJSVU4pCisJCQkJcGVnYXN1cy0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCWlmIChkWzBdICYgKEVYQ0VTU0lWRV9DT0wgfCBKQUJCRVJfVElNRU9VVCkpCisJCQkJcGVnYXN1cy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWlmIChkWzBdICYgTEFURV9DT0wpCisJCQkJcGVnYXN1cy0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQl9CisKKwkJLyogZFs1XS5MSU5LX1NUQVRVUyBsaWVzIG9uIHNvbWUgYWRhcHRlcnMuCisJCSAqIGRbMF0uTk9fQ0FSUklFUiBraWNrcyBpbiBvbmx5IHdpdGggZmFpbGVkIFRYLgorCQkgKiAuLi4gc28gbW9uaXRvcmluZyB3aXRoIE1JSSBtYXkgYmUgc2FmZXN0LgorCQkgKi8KKwkJaWYgKGRbMF0gJiBOT19DQVJSSUVSKQorCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsJCisJCWVsc2UKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0KTsKKworCQkvKiBieXRlcyAzLTQgPT0gcnhfbG9zdHBrdCwgcmVnIDJFLzJGICovCisJCXBlZ2FzdXMtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gKChkWzNdICYgMHg3ZikgPDwgOCkgfCBkWzRdOworCX0KKworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMgJiYgbmV0aWZfbXNnX3RpbWVyKHBlZ2FzdXMpKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCByZXN1Ym1pdCBpbnRlcnJ1cHQgdXJiLCAlZFxuIiwKKwkJCQluZXQtPm5hbWUsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHBlZ2FzdXNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisJaWYgKG5ldGlmX21zZ190aW1lcihwZWdhc3VzKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHR4IHRpbWVvdXRcbiIsIG5ldC0+bmFtZSk7CisJcGVnYXN1cy0+dHhfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXVzYl91bmxpbmtfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CisJcGVnYXN1cy0+c3RhdHMudHhfZXJyb3JzKys7Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQgY291bnQgPSAoKHNrYi0+bGVuICsgMikgJiAweDNmKSA/IHNrYi0+bGVuICsgMiA6IHNrYi0+bGVuICsgMzsKKwlpbnQgcmVzOworCV9fdTE2IGwxNiA9IHNrYi0+bGVuOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCisJKChfX2xlMTYgKikgcGVnYXN1cy0+dHhfYnVmZilbMF0gPSBjcHVfdG9fbGUxNihsMTYpOworCW1lbWNweShwZWdhc3VzLT50eF9idWZmICsgMiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJdXNiX2ZpbGxfYnVsa191cmIocGVnYXN1cy0+dHhfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgIHVzYl9zbmRidWxrcGlwZShwZWdhc3VzLT51c2IsIDIpLAorCQkJICBwZWdhc3VzLT50eF9idWZmLCBjb3VudCwKKwkJCSAgd3JpdGVfYnVsa19jYWxsYmFjaywgcGVnYXN1cyk7CisJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT50eF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQlpZiAobmV0aWZfbXNnX3R4X2VycihwZWdhc3VzKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsIHR4LCAlZFxuIiwKKwkJCQkJbmV0LT5uYW1lLCByZXMpOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIC1FUElQRToJCS8qIHN0YWxsLCBvciBkaXNjb25uZWN0IGZyb20gVFQgKi8KKwkJCS8qIGNsZWFudXAgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNjaGVkdWxlZCAqLworCQkJYnJlYWs7CisJCWNhc2UgLUVOT0RFVjoJCS8qIGRpc2Nvbm5lY3QoKSB1cGNvbWluZyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwZWdhc3VzLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisJCX0KKwl9IGVsc2UgeworCQlwZWdhc3VzLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXBlZ2FzdXMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwl9CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcGVnYXN1c19uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gJigocGVnYXN1c190ICopIG5ldGRldl9wcml2KGRldikpLT5zdGF0czsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbmV0X3RyYWZmaWMocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlpbnQgdG1wID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMCwgMiwgJnRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfaW50ZXJydXB0X2ludGVydmFsKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJX191OCBkYXRhWzJdOworCisJcmVhZF9lcHJvbV93b3JkKHBlZ2FzdXMsIDQsIChfX3UxNiAqKSBkYXRhKTsKKwlpZiAoZGF0YVsxXSA8IDB4ODApIHsKKwkJaWYgKG5ldGlmX21zZ190aW1lcihwZWdhc3VzKSkKKwkJCWRldl9pbmZvKCZwZWdhc3VzLT5pbnRmLT5kZXYsCisJCQkJImludHIgaW50ZXJ2YWwgY2hhbmdlZCBmcm9tICV1bXMgdG8gJXVtc1xuIiwKKwkJCQlkYXRhWzFdLCAweDgwKTsKKwkJZGF0YVsxXSA9IDB4ODA7CisjaWZkZWYJUEVHQVNVU19XUklURV9FRVBST00KKwkJd3JpdGVfZXByb21fd29yZChwZWdhc3VzLCA0LCAqKF9fdTE2ICopIGRhdGEpOworI2VuZGlmCisJfQorCXBlZ2FzdXMtPmludHJfaW50ZXJ2YWwgPSBkYXRhWzFdOworfQorCitzdGF0aWMgdm9pZCBzZXRfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisJdTE2IHRtcDsKKworCWlmIChyZWFkX21paV93b3JkKHBlZ2FzdXMsIHBlZ2FzdXMtPnBoeSwgTUlJX0JNU1IsICZ0bXApKQorCQlyZXR1cm47CisJaWYgKHRtcCAmIEJNU1JfTFNUQVRVUykKKwkJbmV0aWZfY2Fycmllcl9vbihuZXQpOworCWVsc2UKKwkJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9hbGxfdXJicyhwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5pbnRyX3VyYik7CisJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CisJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CisJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2FsbF91cmJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKKwl1c2Jfa2lsbF91cmIocGVnYXN1cy0+dHhfdXJiKTsKKwl1c2Jfa2lsbF91cmIocGVnYXN1cy0+cnhfdXJiKTsKKwl1c2Jfa2lsbF91cmIocGVnYXN1cy0+Y3RybF91cmIpOworfQorCitzdGF0aWMgaW50IGFsbG9jX3VyYnMocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlwZWdhc3VzLT5jdHJsX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZWdhc3VzLT5jdHJsX3VyYikgeworCQlyZXR1cm4gMDsKKwl9CisJcGVnYXN1cy0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBlZ2FzdXMtPnJ4X3VyYikgeworCQl1c2JfZnJlZV91cmIocGVnYXN1cy0+Y3RybF91cmIpOworCQlyZXR1cm4gMDsKKwl9CisJcGVnYXN1cy0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBlZ2FzdXMtPnR4X3VyYikgeworCQl1c2JfZnJlZV91cmIocGVnYXN1cy0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCXBlZ2FzdXMtPmludHJfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBlZ2FzdXMtPmludHJfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihwZWdhc3VzLT50eF91cmIpOworCQl1c2JfZnJlZV91cmIocGVnYXN1cy0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQgcmVzOworCisJaWYgKHBlZ2FzdXMtPnJ4X3NrYiA9PSBOVUxMKQorCQlwZWdhc3VzLT5yeF9za2IgPSBwdWxsX3NrYihwZWdhc3VzKTsKKwkvKgorCSAqKiBOb3RlOiBubyBwb2ludCB0byBmcmVlIHRoZSBwb29sLiAgaXQgaXMgZW1wdHkgOi0pCisJICovCisJaWYgKCFwZWdhc3VzLT5yeF9za2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gc2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhJRCwgNiwgbmV0LT5kZXZfYWRkcik7CisJCisJdXNiX2ZpbGxfYnVsa191cmIocGVnYXN1cy0+cnhfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShwZWdhc3VzLT51c2IsIDEpLAorCQkJICBwZWdhc3VzLT5yeF9za2ItPmRhdGEsIFBFR0FTVVNfTVRVICsgOCwKKwkJCSAgcmVhZF9idWxrX2NhbGxiYWNrLCBwZWdhc3VzKTsKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPnJ4X3VyYiwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cChwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogZmFpbGVkIHJ4X3VyYiwgJWQiLCBuZXQtPm5hbWUsIHJlcyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKHBlZ2FzdXMtPmludHJfdXJiLCBwZWdhc3VzLT51c2IsCisJCQkgdXNiX3JjdmludHBpcGUocGVnYXN1cy0+dXNiLCAzKSwKKwkJCSBwZWdhc3VzLT5pbnRyX2J1ZmYsIHNpemVvZiAocGVnYXN1cy0+aW50cl9idWZmKSwKKwkJCSBpbnRyX2NhbGxiYWNrLCBwZWdhc3VzLCBwZWdhc3VzLT5pbnRyX2ludGVydmFsKTsKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiBmYWlsZWQgaW50cl91cmIsICVkXG4iLCBuZXQtPm5hbWUsIHJlcyk7CisJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5yeF91cmIpOworCQlnb3RvIGV4aXQ7CisJfQorCWlmICgocmVzID0gZW5hYmxlX25ldF90cmFmZmljKG5ldCwgcGVnYXN1cy0+dXNiKSkpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKHBlZ2FzdXMpKQorCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBlbmFibGVfbmV0X3RyYWZmaWMoKSAtICVkXG4iLAorCQkJCQluZXQtPm5hbWUsIHJlcyk7CisJCXJlcyA9IC1FSU87CisJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5yeF91cmIpOworCQl1c2Jfa2lsbF91cmIocGVnYXN1cy0+aW50cl91cmIpOworCQlmcmVlX3NrYl9wb29sKHBlZ2FzdXMpOworCQlnb3RvIGV4aXQ7CisJfQorCXNldF9jYXJyaWVyKG5ldCk7CisJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKKwlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCisJCXByX2RlYnVnKCIlczogb3BlblxuIiwgbmV0LT5uYW1lKTsKKwlyZXMgPSAwOworZXhpdDoKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCWlmICghKHBlZ2FzdXMtPmZsYWdzICYgUEVHQVNVU19VTlBMVUcpKQorCQlkaXNhYmxlX25ldF90cmFmZmljKHBlZ2FzdXMpOworCXRhc2tsZXRfa2lsbCgmcGVnYXN1cy0+cnhfdGwpOworCXVubGlua19hbGxfdXJicyhwZWdhc3VzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZWdhc3VzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgc2l6ZW9mIChpbmZvLT5kcml2ZXIpIC0gMSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mIChpbmZvLT52ZXJzaW9uKSAtIDEpOworCXVzYl9tYWtlX3BhdGgocGVnYXN1cy0+dXNiLCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIChpbmZvLT5idXNfaW5mbykpOworfQorCisvKiBhbHNvIGhhbmRsZXMgdGhyZWUgcGF0dGVybnMgb2Ygc29tZSBraW5kIGluIGhhcmR3YXJlICovCisjZGVmaW5lCVdPTF9TVVBQT1JURUQJKFdBS0VfTUFHSUN8V0FLRV9QSFkpCisKK3N0YXRpYyB2b2lkCitwZWdhc3VzX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXBlZ2FzdXNfdAkqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisKKwl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUMgfCBXQUtFX1BIWTsKKwl3b2wtPndvbG9wdHMgPSBwZWdhc3VzLT53b2xvcHRzOworfQorCitzdGF0aWMgaW50CitwZWdhc3VzX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXBlZ2FzdXNfdAkqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJdTgJCXJlZzc4ID0gMHgwNDsKKwkKKwlpZiAod29sLT53b2xvcHRzICYgfldPTF9TVVBQT1JURUQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCXJlZzc4IHw9IDB4ODA7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfUEhZKQorCQlyZWc3OCB8PSAweDQwOworCS8qIEZJWE1FIHRoaXMgMHgxMCBiaXQgc3RpbGwgbmVlZHMgdG8gZ2V0IHNldCBpbiB0aGUgY2hpcC4uLiAqLworCWlmICh3b2wtPndvbG9wdHMpCisJCXBlZ2FzdXMtPmV0aF9yZWdzWzBdIHw9IDB4MTA7CisJZWxzZQorCQlwZWdhc3VzLT5ldGhfcmVnc1swXSAmPSB+MHgxMDsKKwlwZWdhc3VzLT53b2xvcHRzID0gd29sLT53b2xvcHRzOworCXJldHVybiBzZXRfcmVnaXN0ZXIocGVnYXN1cywgV2FrZXVwQ29udHJvbCwgcmVnNzgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGVnYXN1c19yZXNldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHdvbDsKKwkKKwltZW1zZXQoJndvbCwgMCwgc2l6ZW9mIHdvbCk7CisJKHZvaWQpIHBlZ2FzdXNfc2V0X3dvbChkZXYsICZ3b2wpOworfQorCitzdGF0aWMgaW50CitwZWdhc3VzX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzOworCisJaWYgKGluX2F0b21pYygpKQorCQlyZXR1cm4gMDsKKworCXBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCW1paV9ldGh0b29sX2dzZXQoJnBlZ2FzdXMtPm1paSwgZWNtZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcGVnYXN1c19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG1paV9ldGh0b29sX3NzZXQoJnBlZ2FzdXMtPm1paSwgZWNtZCk7Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmcGVnYXN1cy0+bWlpKTsKK30KKworc3RhdGljIHUzMiBwZWdhc3VzX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gbWlpX2xpbmtfb2soJnBlZ2FzdXMtPm1paSk7Cit9CisKK3N0YXRpYyB1MzIgcGVnYXN1c19nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBwZWdhc3VzLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBwZWdhc3VzX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdikKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXBlZ2FzdXMtPm1zZ19lbmFibGUgPSB2OworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBwZWdhc3VzX2dldF9kcnZpbmZvLAorCS5nZXRfc2V0dGluZ3MgPSBwZWdhc3VzX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzID0gcGVnYXN1c19zZXRfc2V0dGluZ3MsCisJLm53YXlfcmVzZXQgPSBwZWdhc3VzX253YXlfcmVzZXQsCisJLmdldF9saW5rID0gcGVnYXN1c19nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsID0gcGVnYXN1c19nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbCA9IHBlZ2FzdXNfc2V0X21zZ2xldmVsLAorCS5nZXRfd29sID0gcGVnYXN1c19nZXRfd29sLAorCS5zZXRfd29sID0gcGVnYXN1c19zZXRfd29sLAorfTsKKworc3RhdGljIGludCBwZWdhc3VzX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJX191MTYgKmRhdGEgPSAoX191MTYgKikgJiBycS0+aWZyX2lmcnU7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQgcmVzOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NERVZQUklWQVRFOgorCQlkYXRhWzBdID0gcGVnYXN1cy0+cGh5OworCWNhc2UgU0lPQ0RFVlBSSVZBVEUgKyAxOgorCQlyZWFkX21paV93b3JkKHBlZ2FzdXMsIGRhdGFbMF0sIGRhdGFbMV0gJiAweDFmLCAmZGF0YVszXSk7CisJCXJlcyA9IDA7CisJCWJyZWFrOworCWNhc2UgU0lPQ0RFVlBSSVZBVEUgKyAyOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQl3cml0ZV9taWlfd29yZChwZWdhc3VzLCBwZWdhc3VzLT5waHksIGRhdGFbMV0gJiAweDFmLCBkYXRhWzJdKTsKKwkJcmVzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzID0gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHBlZ2FzdXNfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlpZiAobmV0LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwyXSB8PSBSWF9QUk9NSVNDVU9VUzsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHBlZ2FzdXMpKQorCQkJcHJfaW5mbygiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIG5ldC0+bmFtZSk7CisJfSBlbHNlIGlmICgobmV0LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJCSAgIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMF0gfD0gUlhfTVVMVElDQVNUOworCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMl0gJj0gflJYX1BST01JU0NVT1VTOworCQlpZiAobmV0aWZfbXNnX2xpbmsocGVnYXN1cykpCisJCQlwcl9pbmZvKCIlczogc2V0IGFsbG11bHRpXG4iLCBuZXQtPm5hbWUpOworCX0gZWxzZSB7CisJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwwXSAmPSB+UlhfTVVMVElDQVNUOworCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMl0gJj0gflJYX1BST01JU0NVT1VTOworCX0KKworCXBlZ2FzdXMtPmZsYWdzIHw9IEVUSF9SRUdTX0NIQU5HRTsKKwljdHJsX2NhbGxiYWNrKHBlZ2FzdXMtPmN0cmxfdXJiLCBOVUxMKTsKK30KKworc3RhdGljIF9fdTggbWlpX3BoeV9wcm9iZShwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCWludCBpOworCV9fdTE2IHRtcDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgaSwgTUlJX0JNU1IsICZ0bXApOworCQlpZiAodG1wID09IDAgfHwgdG1wID09IDB4ZmZmZiB8fCAodG1wICYgQk1TUl9NRURJQSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQllbHNlCisJCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1cm4gMHhmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3BlZ2FzdXNfSUkocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlfX3U4IGRhdGEgPSAweGE1OworCWludCByZXQ7CisJCisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzFkLCAwKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnN2IsIDEpOworCW1kZWxheSgxMDApOworCWlmICgocGVnYXN1cy0+ZmVhdHVyZXMgJiBIQVNfSE9NRV9QTkEpICYmIG1paV9tb2RlKQorCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnN2IsIDApOworCWVsc2UKKwkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzdiLCAyKTsKKworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgzLCBkYXRhKTsKKwlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIDB4ODMsIDEsICZkYXRhKTsKKworCWlmIChkYXRhID09IDB4YTUpIHsKKwkJcGVnYXN1cy0+Y2hpcCA9IDB4ODUxMzsKKwl9IGVsc2UgeworCQlwZWdhc3VzLT5jaGlwID0gMDsKKwl9CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4MCwgMHhjMCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODMsIDB4ZmYpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCAweDg0LCAweDAxKTsKKwkKKwlpZiAocGVnYXN1cy0+ZmVhdHVyZXMgJiBIQVNfSE9NRV9QTkEgJiYgbWlpX21vZGUpCisJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc4MSwgNik7CisJZWxzZQorCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnODEsIDIpOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcGVnYXN1c193b3JrcXVldWUgPSBOVUxMOworI2RlZmluZSBDQVJSSUVSX0NIRUNLX0RFTEFZICgyICogSFopCisKK3N0YXRpYyB2b2lkIGNoZWNrX2NhcnJpZXIodm9pZCAqZGF0YSkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBkYXRhOworCXNldF9jYXJyaWVyKHBlZ2FzdXMtPm5ldCk7CisJaWYgKCEocGVnYXN1cy0+ZmxhZ3MgJiBQRUdBU1VTX1VOUExVRykpIHsKKwkJcXVldWVfZGVsYXllZF93b3JrKHBlZ2FzdXNfd29ya3F1ZXVlLCAmcGVnYXN1cy0+Y2Fycmllcl9jaGVjaywKKwkJCUNBUlJJRVJfQ0hFQ0tfREVMQVkpOworCX0KK30KKworc3RhdGljIGludCBwZWdhc3VzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCXBlZ2FzdXNfdCAqcGVnYXN1czsKKwlpbnQgZGV2X2luZGV4ID0gaWQgLSBwZWdhc3VzX2lkczsKKwlpbnQgcmVzID0gLUVOT01FTTsKKworCXVzYl9nZXRfZGV2KGRldik7CisJbmV0ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBwZWdhc3VzKSk7CisJaWYgKCFuZXQpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgJXNcbiIsICJkZXZpY2UiKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisJbWVtc2V0KHBlZ2FzdXMsIDAsIHNpemVvZiAoc3RydWN0IHBlZ2FzdXMpKTsKKwlwZWdhc3VzLT5kZXZfaW5kZXggPSBkZXZfaW5kZXg7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGVnYXN1cy0+Y3RybF93YWl0KTsKKworCWlmICghYWxsb2NfdXJicyhwZWdhc3VzKSkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCBhbGxvY2F0ZSAlc1xuIiwgInVyYnMiKTsKKwkJZ290byBvdXQxOworCX0KKworCXRhc2tsZXRfaW5pdCgmcGVnYXN1cy0+cnhfdGwsIHJ4X2ZpeHVwLCAodW5zaWduZWQgbG9uZykgcGVnYXN1cyk7CisKKwlJTklUX1dPUksoJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2ssIGNoZWNrX2NhcnJpZXIsIHBlZ2FzdXMpOworCisJcGVnYXN1cy0+aW50ZiA9IGludGY7CisJcGVnYXN1cy0+dXNiID0gZGV2OworCXBlZ2FzdXMtPm5ldCA9IG5ldDsKKwlTRVRfTU9EVUxFX09XTkVSKG5ldCk7CisJbmV0LT5vcGVuID0gcGVnYXN1c19vcGVuOworCW5ldC0+c3RvcCA9IHBlZ2FzdXNfY2xvc2U7CisJbmV0LT53YXRjaGRvZ190aW1lbyA9IFBFR0FTVVNfVFhfVElNRU9VVDsKKwluZXQtPnR4X3RpbWVvdXQgPSBwZWdhc3VzX3R4X3RpbWVvdXQ7CisJbmV0LT5kb19pb2N0bCA9IHBlZ2FzdXNfaW9jdGw7CisJbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBwZWdhc3VzX3N0YXJ0X3htaXQ7CisJbmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBwZWdhc3VzX3NldF9tdWx0aWNhc3Q7CisJbmV0LT5nZXRfc3RhdHMgPSBwZWdhc3VzX25ldGRldl9zdGF0czsKKwlTRVRfRVRIVE9PTF9PUFMobmV0LCAmb3BzKTsKKwlwZWdhc3VzLT5taWkuZGV2ID0gbmV0OworCXBlZ2FzdXMtPm1paS5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7CisJcGVnYXN1cy0+bWlpLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOworCXBlZ2FzdXMtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CisJcGVnYXN1cy0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CisJc3Bpbl9sb2NrX2luaXQoJnBlZ2FzdXMtPnJ4X3Bvb2xfbG9jayk7CisJcGVnYXN1cy0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0IChtc2dfbGV2ZWwsIE5FVElGX01TR19EUlYKKwkJCQl8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LKTsKKworCXBlZ2FzdXMtPmZlYXR1cmVzID0gdXNiX2Rldl9pZFtkZXZfaW5kZXhdLnByaXZhdGU7CisJZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzKTsKKwlpZiAocmVzZXRfbWFjKHBlZ2FzdXMpKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImNhbid0IHJlc2V0IE1BQ1xuIik7CisJCXJlcyA9IC1FSU87CisJCWdvdG8gb3V0MjsKKwl9CisJc2V0X2V0aGVybmV0X2FkZHIocGVnYXN1cyk7CisJZmlsbF9za2JfcG9vbChwZWdhc3VzKTsKKwlpZiAocGVnYXN1cy0+ZmVhdHVyZXMgJiBQRUdBU1VTX0lJKSB7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJzZXR1cCBQZWdhc3VzIElJIHNwZWNpZmljIHJlZ2lzdGVyc1xuIik7CisJCXNldHVwX3BlZ2FzdXNfSUkocGVnYXN1cyk7CisJfQorCXBlZ2FzdXMtPnBoeSA9IG1paV9waHlfcHJvYmUocGVnYXN1cyk7CisJaWYgKHBlZ2FzdXMtPnBoeSA9PSAweGZmKSB7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJjYW4ndCBsb2NhdGUgTUlJIHBoeSwgdXNpbmcgZGVmYXVsdFxuIik7CisJCXBlZ2FzdXMtPnBoeSA9IDE7CisJfQorCXBlZ2FzdXMtPm1paS5waHlfaWQgPSBwZWdhc3VzLT5waHk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwZWdhc3VzKTsKKwlTRVRfTkVUREVWX0RFVihuZXQsICZpbnRmLT5kZXYpOworCXBlZ2FzdXNfcmVzZXRfd29sKG5ldCk7CisJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CisJaWYgKHJlcykKKwkJZ290byBvdXQzOworCXF1ZXVlX2RlbGF5ZWRfd29yayhwZWdhc3VzX3dvcmtxdWV1ZSwgJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2ssCisJCQkJQ0FSUklFUl9DSEVDS19ERUxBWSk7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMsICVzLCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJbmV0LT5uYW1lLAorCQl1c2JfZGV2X2lkW2Rldl9pbmRleF0ubmFtZSwKKwkJbmV0LT5kZXZfYWRkciBbMF0sIG5ldC0+ZGV2X2FkZHIgWzFdLAorCQluZXQtPmRldl9hZGRyIFsyXSwgbmV0LT5kZXZfYWRkciBbM10sCisJCW5ldC0+ZGV2X2FkZHIgWzRdLCBuZXQtPmRldl9hZGRyIFs1XSk7CisJcmV0dXJuIDA7CisKK291dDM6CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlmcmVlX3NrYl9wb29sKHBlZ2FzdXMpOworb3V0MjoKKwlmcmVlX2FsbF91cmJzKHBlZ2FzdXMpOworb3V0MToKKwlmcmVlX25ldGRldihuZXQpOworb3V0OgorCXVzYl9wdXRfZGV2KGRldik7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgcGVnYXN1c19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBwZWdhc3VzICpwZWdhc3VzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKCFwZWdhc3VzKSB7CisJCWRldl9kYmcoJmludGYtPmRldiwgInVucmVnaXN0ZXJpbmcgbm9uLWJvdW5kIGRldmljZT9cbiIpOworCQlyZXR1cm47CisJfQorCisJcGVnYXN1cy0+ZmxhZ3MgfD0gUEVHQVNVU19VTlBMVUc7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcGVnYXN1cy0+Y2Fycmllcl9jaGVjayk7CisJdW5yZWdpc3Rlcl9uZXRkZXYocGVnYXN1cy0+bmV0KTsKKwl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwlmcmVlX2FsbF91cmJzKHBlZ2FzdXMpOworCWZyZWVfc2tiX3Bvb2wocGVnYXN1cyk7CisJaWYgKHBlZ2FzdXMtPnJ4X3NrYikKKwkJZGV2X2tmcmVlX3NrYihwZWdhc3VzLT5yeF9za2IpOworCWZyZWVfbmV0ZGV2KHBlZ2FzdXMtPm5ldCk7Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19zdXNwZW5kIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBwZWdhc3VzICpwZWdhc3VzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwkKKwluZXRpZl9kZXZpY2VfZGV0YWNoIChwZWdhc3VzLT5uZXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcGVnYXN1cyAqcGVnYXN1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoIChwZWdhc3VzLT5uZXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcGVnYXN1c19kcml2ZXIgPSB7CisJLm5hbWUgPSBkcml2ZXJfbmFtZSwKKwkucHJvYmUgPSBwZWdhc3VzX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gcGVnYXN1c19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IHBlZ2FzdXNfaWRzLAorCS5zdXNwZW5kID0gcGVnYXN1c19zdXNwZW5kLAorCS5yZXN1bWUgPSBwZWdhc3VzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBlZ2FzdXNfaW5pdCh2b2lkKQoreworCXByX2luZm8oIiVzOiAlcywgIiBEUklWRVJfREVTQyAiXG4iLCBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOworCXBlZ2FzdXNfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInBlZ2FzdXMiKTsKKwlpZiAoIXBlZ2FzdXNfd29ya3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwZWdhc3VzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwZWdhc3VzX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShwZWdhc3VzX3dvcmtxdWV1ZSk7CisJdXNiX2RlcmVnaXN0ZXIoJnBlZ2FzdXNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGVnYXN1c19pbml0KTsKK21vZHVsZV9leGl0KHBlZ2FzdXNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2NjZWRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaApAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAzIFBldGtvIE1hbm9sb3YgLSBQZXRrYW4gKHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisKKyNpZm5kZWYJUEVHQVNVU19ERVYKKworI2RlZmluZQlQRUdBU1VTX0lJCQkweDgwMDAwMDAwCisjZGVmaW5lCUhBU19IT01FX1BOQQkJMHg0MDAwMDAwMAorCisjZGVmaW5lCVBFR0FTVVNfTVRVCQkxNTM2CisjZGVmaW5lCVJYX1NLQlMJCQk0CisKKyNkZWZpbmUJRVBST01fV1JJVEUJCTB4MDEKKyNkZWZpbmUJRVBST01fUkVBRAkJMHgwMgorI2RlZmluZQlFUFJPTV9ET05FCQkweDA0CisjZGVmaW5lCUVQUk9NX1dSX0VOQUJMRQkJMHgxMAorI2RlZmluZQlFUFJPTV9MT0FECQkweDIwCisKKyNkZWZpbmUJUEhZX0RPTkUJCTB4ODAKKyNkZWZpbmUJUEhZX1JFQUQJCTB4NDAKKyNkZWZpbmUJUEhZX1dSSVRFCQkweDIwCisjZGVmaW5lCURFRkFVTFRfR1BJT19SRVNFVAkweDI0CisjZGVmaW5lCUxJTktTWVNfR1BJT19SRVNFVAkweDI0CisjZGVmaW5lCURFRkFVTFRfR1BJT19TRVQJMHgyNgorCisjZGVmaW5lCVBFR0FTVVNfUFJFU0VOVAkJMHgwMDAwMDAwMQorI2RlZmluZQlQRUdBU1VTX1RYX0JVU1kJCTB4MDAwMDAwMDQKKyNkZWZpbmUJUEVHQVNVU19SWF9CVVNZCQkweDAwMDAwMDA4CisjZGVmaW5lCUNUUkxfVVJCX1JVTk5JTkcJMHgwMDAwMDAxMAorI2RlZmluZQlDVFJMX1VSQl9TTEVFUAkJMHgwMDAwMDAyMAorI2RlZmluZQlQRUdBU1VTX1VOUExVRwkJMHgwMDAwMDA0MAorI2RlZmluZQlQRUdBU1VTX1JYX1VSQl9GQUlMCTB4MDAwMDAwODAKKyNkZWZpbmUJRVRIX1JFR1NfQ0hBTkdFCQkweDQwMDAwMDAwCisjZGVmaW5lCUVUSF9SRUdTX0NIQU5HRUQJMHg4MDAwMDAwMAorCisjZGVmaW5lCVJYX01VTFRJQ0FTVAkJMgorI2RlZmluZQlSWF9QUk9NSVNDVU9VUwkJNAorCisjZGVmaW5lCVJFR19USU1FT1VUCQkoSFopCisjZGVmaW5lCVBFR0FTVVNfVFhfVElNRU9VVAkoSFoqMTApCisKKyNkZWZpbmUJVFhfVU5ERVJSVU4JCTB4ODAKKyNkZWZpbmUJRVhDRVNTSVZFX0NPTAkJMHg0MAorI2RlZmluZQlMQVRFX0NPTAkJMHgyMAorI2RlZmluZQlOT19DQVJSSUVSCQkweDEwCisjZGVmaW5lCUxPU1NfQ0FSUklFUgkJMHgwOAorI2RlZmluZQlKQUJCRVJfVElNRU9VVAkJMHgwNAorCisjZGVmaW5lCUxJTktfU1RBVFVTCQkweDAxCisKKyNkZWZpbmUJUEVHQVNVU19SRVFUX1JFQUQJMHhjMAorI2RlZmluZQlQRUdBU1VTX1JFUVRfV1JJVEUJMHg0MAorI2RlZmluZQlQRUdBU1VTX1JFUV9HRVRfUkVHUwkweGYwCisjZGVmaW5lCVBFR0FTVVNfUkVRX1NFVF9SRUdTCTB4ZjEKKyNkZWZpbmUJUEVHQVNVU19SRVFfU0VUX1JFRwlQRUdBU1VTX1JFUV9TRVRfUkVHUworCitlbnVtIHBlZ2FzdXNfcmVnaXN0ZXJzIHsKKwlFdGhDdHJsMCA9IDAsCisJRXRoQ3RybDEgPSAxLAorCUV0aEN0cmwyID0gMiwKKwlFdGhJRCA9IDB4MTAsCisJUmVnMWQgPSAweDFkLAorCUVwcm9tT2Zmc2V0ID0gMHgyMCwKKwlFcHJvbURhdGEgPSAweDIxLAkvKiAweDIxIGxvdywgMHgyMiBoaWdoIGJ5dGUgKi8KKwlFcHJvbUN0cmwgPSAweDIzLAorCVBoeUFkZHIgPSAweDI1LAorCVBoeURhdGEgPSAweDI2LCAJLyogMHgyNiBsb3csIDB4MjcgaGlnaCBieXRlICovCisJUGh5Q3RybCA9IDB4MjgsCisJVXNiU3RzdCA9IDB4MmEsCisJRXRoVHhTdGF0MCA9IDB4MmIsCisJRXRoVHhTdGF0MSA9IDB4MmMsCisJRXRoUnhTdGF0ID0gMHgyZCwKKwlXYWtldXBDb250cm9sID0gMHg3OCwKKwlSZWc3YiA9IDB4N2IsCisJR3BpbzAgPSAweDdlLAorCUdwaW8xID0gMHg3ZiwKKwlSZWc4MSA9IDB4ODEsCit9OworCisKK3R5cGVkZWYgc3RydWN0IHBlZ2FzdXMgeworCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKwlzdHJ1Y3QgbWlpX2lmX2luZm8JbWlpOworCXVuc2lnbmVkCQlmbGFnczsKKwl1bnNpZ25lZAkJZmVhdHVyZXM7CisJdTMyCQkJbXNnX2VuYWJsZTsKKwl1MzIJCQl3b2xvcHRzOworCWludAkJCWRldl9pbmRleDsKKwlpbnQJCQlpbnRyX2ludGVydmFsOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyeF90bDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY2Fycmllcl9jaGVjazsKKwlzdHJ1Y3QgdXJiCQkqY3RybF91cmIsICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4X3Bvb2xbUlhfU0tCU107CisJc3RydWN0IHNrX2J1ZmYJCSpyeF9za2I7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlkcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAljdHJsX3dhaXQ7CisJc3BpbmxvY2tfdAkJcnhfcG9vbF9sb2NrOworCWludAkJCWNoaXA7CisJdW5zaWduZWQgY2hhcgkJaW50cl9idWZmWzhdOworCV9fdTgJCQl0eF9idWZmW1BFR0FTVVNfTVRVXTsKKwlfX3U4CQkJZXRoX3JlZ3NbNF07CisJX191OAkJCXBoeTsKKwlfX3U4CQkJZ3Bpb19yZXM7Cit9IHBlZ2FzdXNfdDsKKworCitzdHJ1Y3QgdXNiX2V0aF9kZXYgeworCWNoYXIJKm5hbWU7CisJX191MTYJdmVuZG9yOworCV9fdTE2CWRldmljZTsKKwlfX3UzMglwcml2YXRlOyAvKiBMU0IgaXMgZ3BpbyByZXNldCB2YWx1ZSAqLworfTsKKworI2RlZmluZQlWRU5ET1JfM0NPTQkJMHgwNTA2CisjZGVmaW5lCVZFTkRPUl9BQk9DT00JCTB4MDdiOAorI2RlZmluZQlWRU5ET1JfQUNDVE9OCQkweDA4M2EKKyNkZWZpbmUJVkVORE9SX0FETVRFSwkJMHgwN2E2CisjZGVmaW5lCVZFTkRPUl9BRUlMQUIJCTB4MzMzNAorI2RlZmluZQlWRU5ET1JfQUxMSUVEVEVMCTB4MDdjOQorI2RlZmluZQlWRU5ET1JfQVRFTgkJMHgwNTU3CisjZGVmaW5lCVZFTkRPUl9CRUxLSU4JCTB4MDUwZAorI2RlZmluZQlWRU5ET1JfQklMTElPTlRPTgkweDA4ZGQKKyNkZWZpbmUJVkVORE9SX0NPTVBBUQkJMHgwNDlmCisjZGVmaW5lCVZFTkRPUl9DT1JFR0EJCTB4MDdhYQorI2RlZmluZQlWRU5ET1JfRExJTksJCTB4MjAwMQorI2RlZmluZQlWRU5ET1JfRUxDT04JCTB4MGRiNworI2RlZmluZQlWRU5ET1JfRUxTQQkJMHgwNWNjCisjZGVmaW5lCVZFTkRPUl9HSUdBQllURQkJMHgxMDQ0CisjZGVmaW5lCVZFTkRPUl9IQVdLSU5HCQkweDBlNjYKKyNkZWZpbmUJVkVORE9SX0hQCQkweDAzZjAKKyNkZWZpbmUJVkVORE9SX0lPREFUQQkJMHgwNGJiCisjZGVmaW5lCVZFTkRPUl9LSU5HU1RPTgkJMHgwOTUxCisjZGVmaW5lCVZFTkRPUl9MQU5FRUQJCTB4MDU2ZQorI2RlZmluZQlWRU5ET1JfTElOS1NZUwkJMHgwNjZiCisjZGVmaW5lCVZFTkRPUl9NRUxDTwkJMHgwNDExCisjZGVmaW5lCVZFTkRPUl9NSUNST1NPRlQJMHgwNDVlCisjZGVmaW5lCVZFTkRPUl9NT0JJTElUWQkJMHgxMzQyCisjZGVmaW5lCVZFTkRPUl9ORVRHRUFSCQkweDA4NDYKKyNkZWZpbmUJVkVORE9SX09DVAkJMHgwYjM5CisjZGVmaW5lCVZFTkRPUl9TTUFSVEJSSURHRVMJMHgwOGQxCisjZGVmaW5lCVZFTkRPUl9TTUMJCTB4MDcwNworI2RlZmluZQlWRU5ET1JfU09IT1dBUkUJCTB4MTVlOAorI2RlZmluZQlWRU5ET1JfU0lFTUVOUwkJMHgwNjdjCisKKworI2Vsc2UJLyogUEVHQVNVU19ERVYgKi8KKworUEVHQVNVU19ERVYoICIzQ29tIFVTQiBFdGhlcm5ldCAzQzQ2MEIiLCBWRU5ET1JfM0NPTSwgMHg0NjAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQVRFTiBVU0IgRXRoZXJuZXQgVUMtMTEwVCIsIFZFTkRPUl9BVEVOLCAweDIwMDcsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4MTEwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIlVTQiBIUE5BL0V0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MTA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMDcsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDEwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDBiLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDBjLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHhhYmMxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDIwMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKSAJCitQRUdBU1VTX0RFViggIkFjY3RvbiBVU0IgMTAvMTAwIEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfQUNDVE9OLCAweDEwNDYsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIlNwZWVkU3RyZWFtIFVTQiAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfQUNDVE9OLCAweDUwNDYsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJBRE10ZWsgQURNODUxMSBcIlBlZ2FzdXMgSUlcIiBVU0IgRXRoZXJuZXQiLAorCQlWRU5ET1JfQURNVEVLLCAweDg1MTEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJBRE10ZWsgQURNODUxMyBcIlBlZ2FzdXMgSUlcIiBVU0IgRXRoZXJuZXQiLAorCQlWRU5ET1JfQURNVEVLLCAweDg1MTMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJBRE10ZWsgQURNODUxNSBcIlBlZ2FzdXMgSUlcIiBVU0ItMi4wIEV0aGVybmV0IiwKKwkJVkVORE9SX0FETVRFSywgMHg4NTE1LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQURNdGVrIEFOOTg2IFwiUGVnYXN1c1wiIFVTQiBFdGhlcm5ldCAoZXZhbHVhdGlvbiBib2FyZCkiLAorCQlWRU5ET1JfQURNVEVLLCAweDA5ODYsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIkFOOTg2QSBVU0IgTUFDIiwgVkVORE9SX0FETVRFSywgMTk4NiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkFFSSBVU0IgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIiwgVkVORE9SX0FFSUxBQiwgMHgxNzAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQWxsaWVkIFRlbGVzeW4gSW50LiBBVC1VU0IxMDAiLCBWRU5ET1JfQUxMSUVEVEVMLCAweGIxMDAsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJCZWxraW4gRjVENTA1MCBVU0IgRXRoZXJuZXQiLCBWRU5ET1JfQkVMS0lOLCAweDAxMjEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQi0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg2LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQkxQLTEwMCIsIFZFTkRPUl9CSUxMSU9OVE9OLCAweDA5ODcsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggImlQQVEgTmV0d29ya2luZyAxMC8xMDAgVVNCIiwgVkVORE9SX0NPTVBBUSwgMHg4NTExLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0JFTC0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg4LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJCaWxsaW9udG9uIFVTQkUtMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4ODUxMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkNvcmVnYSBGRXRlciBVU0ItVFgiLCBWRU5ET1JfQ09SRUdBLCAweDAwMDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkNvcmVnYSBGRXRlciBVU0ItVFhTIiwgVkVORE9SX0NPUkVHQSwgMHgwMDBkLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MDAxLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMDIsCisJCUxJTktTWVNfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4NDEwMiwKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4NDAwYiwKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4MjAwYywKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgoUE5BKSIsIFZFTkRPUl9ETElOSywgMHg0MDAzLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MCIsIFZFTkRPUl9ETElOSywgMHhhYmMxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJHT0xEUEZFSUwgVVNCIEFkYXB0ZXIiLCBWRU5ET1JfRUxDT04sIDB4MDAwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIkVhc2lEb2NrIEV0aGVybmV0IiwgVkVORE9SX01PQklMSVRZLCAweDAzMDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkVsc2EgTWljb2xpbmsgVVNCMkV0aGVybmV0IiwgVkVORE9SX0VMU0EsIDB4MzAwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiR0lHQUJZVEUgR04tQlI0MDJXIFdpcmVsZXNzIFJvdXRlciIsIFZFTkRPUl9HSUdBQllURSwgMHg4MDAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJIYXdraW5nIFVGMTAwIDEwLzEwMCBFdGhlcm5ldCIsIFZFTkRPUl9IQVdLSU5HLCAweDQwMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJIUCBobjIxMGMgRXRoZXJuZXQgVVNCIiwgVkVORE9SX0hQLCAweDgxMWMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQkKK1BFR0FTVVNfREVWKCAiSU8gREFUQSBVU0IgRVQvVFgiLCBWRU5ET1JfSU9EQVRBLCAweDA5MDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIklPIERBVEEgVVNCIEVUL1RYLVMiLCBWRU5ET1JfSU9EQVRBLCAweDA5MTMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJLaW5nc3RvbiBLTlUxMDFUWCBFdGhlcm5ldCIsIFZFTkRPUl9LSU5HU1RPTiwgMHgwMDBhLAorCQlERUZBVUxUX0dQSU9fUkVTRVQpCitQRUdBU1VTX0RFViggIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHg0MDAyLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJMQU5FRUQgVVNCIEV0aGVybmV0IExELVVTQi9UWCIsIFZFTkRPUl9MQU5FRUQsIDB4NDAwYiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1QiLCBWRU5ET1JfTEFORUVELCAweGFiYzEsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkxBTkVFRCBVU0IgRXRoZXJuZXQgTEQtVVNCL1RYIiwgVkVORE9SX0xBTkVFRCwgMHgyMDBjLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwMiwKKwkJTElOS1NZU19HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMDBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDMsCisJCUxJTktTWVNfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTAwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMjA0LAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwVCBFdGhlcm5ldCBBZGFwdGVyIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwNiwKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IgVVNCMTAwVFgiLCBWRU5ET1JfTElOS1NZUywgMHg0MDBiLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjAwYywKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCQorUEVHQVNVU19ERVYoICJNRUxDTy9CVUZGQUxPIExVQS1UWCIsIFZFTkRPUl9NRUxDTywgMHgwMDAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJNRUxDTy9CVUZGQUxPIExVQS1UWCIsIFZFTkRPUl9NRUxDTywgMHgwMDA1LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJNRUxDTy9CVUZGQUxPIExVQTItVFgiLCBWRU5ET1JfTUVMQ08sIDB4MDAwOSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIk1pY3Jvc29mdCBNTi0xMTAiLCBWRU5ET1JfTUlDUk9TT0ZULCAweDAwN2EsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJORVRHRUFSIEZBMTAxIiwgVkVORE9SX05FVEdFQVIsIDB4MTAyMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIk9DVCBJbmMuIiwgVkVORE9SX09DVCwgMHgwMTA5LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiT0NUIFVTQiBUTyBFdGhlcm5ldCIsIFZFTkRPUl9PQ1QsIDB4MDkwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggInNtYXJ0TklDIDIgUG5QIEFkYXB0ZXIiLCBWRU5ET1JfU01BUlRCUklER0VTLCAweDAwMDMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJTTUMgMjAyIFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9TTUMsIDB4MDIwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiU01DIDIyMDYgVVNCIEV0aGVybmV0IiwgVkVORE9SX1NNQywgMHgwMjAxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoICJTT0hPd2FyZSBOVUIxMDAgRXRoZXJuZXQiLCBWRU5ET1JfU09IT1dBUkUsIDB4OTEwMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiU09IT3dhcmUgTlVCMTEwIEV0aGVybmV0IiwgVkVORE9SX1NPSE9XQVJFLCAweDkxMTAsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJTcGVlZFN0cmVhbSBVU0IgMTAvMTAwIEV0aGVybmV0IiwgVkVORE9SX1NJRU1FTlMsIDB4MTAwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCisKKworI2VuZGlmCS8qIFBFR0FTVVNfREVWICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIyMjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwpAQCAtMCwwICsxLDk0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgUGV0a28gTWFub2xvdiAocGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNi4yICgyMDA0LzA4LzI3KSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUGV0a28gTWFub2xvdiA8cGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJydGw4MTUwIGJhc2VkIHVzYi1ldGhlcm5ldCBkcml2ZXIiCisKKyNkZWZpbmUJSURSCQkJMHgwMTIwCisjZGVmaW5lCU1BUgkJCTB4MDEyNgorI2RlZmluZQlDUgkJCTB4MDEyZQorI2RlZmluZQlUQ1IJCQkweDAxMmYKKyNkZWZpbmUJUkNSCQkJMHgwMTMwCisjZGVmaW5lCVRTUgkJCTB4MDEzMgorI2RlZmluZQlSU1IJCQkweDAxMzMKKyNkZWZpbmUJQ09OMAkJCTB4MDEzNQorI2RlZmluZQlDT04xCQkJMHgwMTM2CisjZGVmaW5lCU1TUgkJCTB4MDEzNworI2RlZmluZQlQSFlBREQJCQkweDAxMzgKKyNkZWZpbmUJUEhZREFUCQkJMHgwMTM5CisjZGVmaW5lCVBIWUNOVAkJCTB4MDEzYgorI2RlZmluZQlHUFBDCQkJMHgwMTNkCisjZGVmaW5lCUJNQ1IJCQkweDAxNDAKKyNkZWZpbmUJQk1TUgkJCTB4MDE0MgorI2RlZmluZQlBTkFSCQkJMHgwMTQ0CisjZGVmaW5lCUFOTFAJCQkweDAxNDYKKyNkZWZpbmUJQUVSCQkJMHgwMTQ4CisjZGVmaW5lIENTQ1IJCQkweDAxNEMgIC8qIFRoaXMgb25lIGhhcyB0aGUgbGluayBzdGF0dXMgKi8KKyNkZWZpbmUgQ1NDUl9MSU5LX1NUQVRVUwkoMSA8PCAzKQorCisjZGVmaW5lCUlEUl9FRVBST00JCTB4MTIwMgorCisjZGVmaW5lCVBIWV9SRUFECQkwCisjZGVmaW5lCVBIWV9XUklURQkJMHgyMAorI2RlZmluZQlQSFlfR08JCQkweDQwCisKKyNkZWZpbmUJTUlJX1RJTUVPVVQJCTEwCisjZGVmaW5lCUlOVEJVRlNJWkUJCTgKKworI2RlZmluZQlSVEw4MTUwX1JFUVRfUkVBRAkweGMwCisjZGVmaW5lCVJUTDgxNTBfUkVRVF9XUklURQkweDQwCisjZGVmaW5lCVJUTDgxNTBfUkVRX0dFVF9SRUdTCTB4MDUKKyNkZWZpbmUJUlRMODE1MF9SRVFfU0VUX1JFR1MJMHgwNQorCisKKy8qIFRyYW5zbWl0IHN0YXR1cyByZWdpc3RlciBlcnJvcnMgKi8KKyNkZWZpbmUgVFNSX0VDT0wJCSgxPDw1KQorI2RlZmluZSBUU1JfTENPTAkJKDE8PDQpCisjZGVmaW5lIFRTUl9MT1NTX0NSUwkJKDE8PDMpCisjZGVmaW5lIFRTUl9KQlIJCQkoMTw8MikKKyNkZWZpbmUgVFNSX0VSUk9SUwkJKFRTUl9FQ09MIHwgVFNSX0xDT0wgfCBUU1JfTE9TU19DUlMgfCBUU1JfSkJSKQorLyogUmVjZWl2ZSBzdGF0dXMgcmVnaXN0ZXIgZXJyb3JzICovCisjZGVmaW5lIFJTUl9DUkMJCQkoMTw8MikKKyNkZWZpbmUgUlNSX0ZBRQkJCSgxPDwxKQorI2RlZmluZSBSU1JfRVJST1JTCQkoUlNSX0NSQyB8IFJTUl9GQUUpCisKKy8qIE1lZGlhIHN0YXR1cyByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNU1JfRFVQTEVYCQkoMTw8NCkKKyNkZWZpbmUgTVNSX1NQRUVECQkoMTw8MykKKyNkZWZpbmUgTVNSX0xJTksJCSgxPDwyKQorCisvKiBJbnRlcnJ1cHQgcGlwZSBkYXRhICovCisjZGVmaW5lIElOVF9UU1IJCQkweDAwCisjZGVmaW5lIElOVF9SU1IJCQkweDAxCisjZGVmaW5lIElOVF9NU1IJCQkweDAyCisjZGVmaW5lIElOVF9XQUtTUgkJMHgwMworI2RlZmluZSBJTlRfVFhPS19DTlQJCTB4MDQKKyNkZWZpbmUgSU5UX1JYTE9TVF9DTlQJCTB4MDUKKyNkZWZpbmUgSU5UX0NSRVJSX0NOVAkJMHgwNgorI2RlZmluZSBJTlRfQ09MX0NOVAkJMHgwNworCisvKiBUcmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIgZXJyb3JzICovCisjZGVmaW5lIFRTUl9FQ09MCQkoMTw8NSkKKyNkZWZpbmUgVFNSX0xDT0wJCSgxPDw0KQorI2RlZmluZSBUU1JfTE9TU19DUlMJCSgxPDwzKQorI2RlZmluZSBUU1JfSkJSCQkJKDE8PDIpCisjZGVmaW5lIFRTUl9FUlJPUlMJCShUU1JfRUNPTCB8IFRTUl9MQ09MIHwgVFNSX0xPU1NfQ1JTIHwgVFNSX0pCUikKKy8qIFJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyIGVycm9ycyAqLworI2RlZmluZSBSU1JfQ1JDCQkJKDE8PDIpCisjZGVmaW5lIFJTUl9GQUUJCQkoMTw8MSkKKyNkZWZpbmUgUlNSX0VSUk9SUwkJKFJTUl9DUkMgfCBSU1JfRkFFKQorCisvKiBNZWRpYSBzdGF0dXMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVNSX0RVUExFWAkJKDE8PDQpCisjZGVmaW5lIE1TUl9TUEVFRAkJKDE8PDMpCisjZGVmaW5lIE1TUl9MSU5LCQkoMTw8MikKKworLyogSW50ZXJydXB0IHBpcGUgZGF0YSAqLworI2RlZmluZSBJTlRfVFNSCQkJMHgwMAorI2RlZmluZSBJTlRfUlNSCQkJMHgwMQorI2RlZmluZSBJTlRfTVNSCQkJMHgwMgorI2RlZmluZSBJTlRfV0FLU1IJCTB4MDMKKyNkZWZpbmUgSU5UX1RYT0tfQ05UCQkweDA0CisjZGVmaW5lIElOVF9SWExPU1RfQ05UCQkweDA1CisjZGVmaW5lIElOVF9DUkVSUl9DTlQJCTB4MDYKKyNkZWZpbmUgSU5UX0NPTF9DTlQJCTB4MDcKKworCisjZGVmaW5lCVJUTDgxNTBfTVRVCQkxNTQwCisjZGVmaW5lCVJUTDgxNTBfVFhfVElNRU9VVAkoSFopCisjZGVmaW5lCVJYX1NLQl9QT09MX1NJWkUJNAorCisvKiBydGw4MTUwIGZsYWdzICovCisjZGVmaW5lCVJUTDgxNTBfSFdfQ1JDCQkwCisjZGVmaW5lCVJYX1JFR19TRVQJCTEKKyNkZWZpbmUJUlRMODE1MF9VTlBMVUcJCTIKKyNkZWZpbmUJUlhfVVJCX0ZBSUwJCTMKKworLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZSAqLworI2RlZmluZSBWRU5ET1JfSURfUkVBTFRFSwkJMHgwYmRhCisjZGVmaW5lCVZFTkRPUl9JRF9NRUxDTwkJCTB4MDQxMQorI2RlZmluZSBWRU5ET1JfSURfTUlDUk9ORVQJCTB4Mzk4MAorI2RlZmluZQlWRU5ET1JfSURfTE9OR1NISU5FCQkweDA3YjgKKworI2RlZmluZSBQUk9EVUNUX0lEX1JUTDgxNTAJCTB4ODE1MAorI2RlZmluZQlQUk9EVUNUX0lEX0xVQUtUWAkJMHgwMDEyCisjZGVmaW5lCVBST0RVQ1RfSURfTENTODEzOFRYCQkweDQwMWEKKyNkZWZpbmUgUFJPRFVDVF9JRF9TUDEyOEFSCQkweDAwMDMKKworI3VuZGVmCUVFUFJPTV9XUklURQorCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODE1MF90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFZFTkRPUl9JRF9SRUFMVEVLLCBQUk9EVUNUX0lEX1JUTDgxNTApfSwKKwl7VVNCX0RFVklDRShWRU5ET1JfSURfTUVMQ08sIFBST0RVQ1RfSURfTFVBS1RYKX0sCisJe1VTQl9ERVZJQ0UoVkVORE9SX0lEX01JQ1JPTkVULCBQUk9EVUNUX0lEX1NQMTI4QVIpfSwKKwl7VVNCX0RFVklDRShWRU5ET1JfSURfTE9OR1NISU5FLCBQUk9EVUNUX0lEX0xDUzgxMzhUWCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcnRsODE1MF90YWJsZSk7CisKK3N0cnVjdCBydGw4MTUwIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCB1cmIgKnJ4X3VyYiwgKnR4X3VyYiwgKmludHJfdXJiLCAqY3RybF91cmI7CisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiwgKnJ4X3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiX3Bvb2xbUlhfU0tCX1BPT0xfU0laRV07CisJc3BpbmxvY2tfdCByeF9wb29sX2xvY2s7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBkcjsKKwlpbnQgaW50cl9pbnRlcnZhbDsKKwlfX2xlMTYgcnhfY3JlZzsKKwl1OCAqaW50cl9idWZmOworCXU4IHBoeTsKK307CisKK3R5cGVkZWYgc3RydWN0IHJ0bDgxNTAgcnRsODE1MF90OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7CisKK3N0YXRpYyB2b2lkIGZpbGxfc2tiX3Bvb2wocnRsODE1MF90ICopOworc3RhdGljIHZvaWQgZnJlZV9za2JfcG9vbChydGw4MTUwX3QgKik7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpwdWxsX3NrYihydGw4MTUwX3QgKik7CitzdGF0aWMgdm9pZCBydGw4MTUwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAicnRsODE1MCI7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUwX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQlkcml2ZXJfbmFtZSwKKwkucHJvYmUgPQlydGw4MTUwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JcnRsODE1MF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXJ0bDgxNTBfdGFibGUsCit9OworCisvKgorKioKKyoqCWRldmljZSByZWxhdGVkIHBhcnQgb2YgdGhlIGNvZGUKKyoqCisqLworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHJ0bDgxNTBfdCAqIGRldiwgdTE2IGluZHgsIHUxNiBzaXplLCB2b2lkICpkYXRhKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgICBSVEw4MTUwX1JFUV9HRVRfUkVHUywgUlRMODE1MF9SRVFUX1JFQUQsCisJCQkgICAgICAgaW5keCwgMCwgZGF0YSwgc2l6ZSwgNTAwKTsKK30KKworc3RhdGljIGludCBzZXRfcmVnaXN0ZXJzKHJ0bDgxNTBfdCAqIGRldiwgdTE2IGluZHgsIHUxNiBzaXplLCB2b2lkICpkYXRhKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgICBSVEw4MTUwX1JFUV9TRVRfUkVHUywgUlRMODE1MF9SRVFUX1dSSVRFLAorCQkJICAgICAgIGluZHgsIDAsIGRhdGEsIHNpemUsIDUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGN0cmxfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlydGw4MTUwX3QgKmRldjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlicmVhazsKKwljYXNlIC1FTk9FTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdhcm4oImN0cmwgdXJiIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwl9CisJZGV2ID0gdXJiLT5jb250ZXh0OworCWNsZWFyX2JpdChSWF9SRUdfU0VULCAmZGV2LT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYXN5bmNfc2V0X3JlZ2lzdGVycyhydGw4MTUwX3QgKiBkZXYsIHUxNiBpbmR4LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKHRlc3RfYml0KFJYX1JFR19TRVQsICZkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlkZXYtPmRyLmJSZXF1ZXN0VHlwZSA9IFJUTDgxNTBfUkVRVF9XUklURTsKKwlkZXYtPmRyLmJSZXF1ZXN0ID0gUlRMODE1MF9SRVFfU0VUX1JFR1M7CisJZGV2LT5kci53VmFsdWUgPSBjcHVfdG9fbGUxNihpbmR4KTsKKwlkZXYtPmRyLndJbmRleCA9IDA7CisJZGV2LT5kci53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJZGV2LT5jdHJsX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemU7CisJdXNiX2ZpbGxfY29udHJvbF91cmIoZGV2LT5jdHJsX3VyYiwgZGV2LT51ZGV2LAorCQkJIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLCAoY2hhciAqKSAmZGV2LT5kciwKKwkJCSAmZGV2LT5yeF9jcmVnLCBzaXplLCBjdHJsX2NhbGxiYWNrLCBkZXYpOworCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5jdHJsX3VyYiwgR0ZQX0FUT01JQykpKQorCQllcnIoImNvbnRyb2wgcmVxdWVzdCBzdWJtaXNzaW9uIGZhaWxlZDogJWQiLCByZXQpOworCWVsc2UKKwkJc2V0X2JpdChSWF9SRUdfU0VULCAmZGV2LT5mbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlYWRfbWlpX3dvcmQocnRsODE1MF90ICogZGV2LCB1OCBwaHksIF9fdTggaW5keCwgdTE2ICogcmVnKQoreworCWludCBpOworCXU4IGRhdGFbM10sIHRtcDsKKworCWRhdGFbMF0gPSBwaHk7CisJZGF0YVsxXSA9IGRhdGFbMl0gPSAwOworCXRtcCA9IGluZHggfCBQSFlfUkVBRCB8IFBIWV9HTzsKKwlpID0gMDsKKworCXNldF9yZWdpc3RlcnMoZGV2LCBQSFlBREQsIHNpemVvZihkYXRhKSwgZGF0YSk7CisJc2V0X3JlZ2lzdGVycyhkZXYsIFBIWUNOVCwgMSwgJnRtcCk7CisJZG8geworCQlnZXRfcmVnaXN0ZXJzKGRldiwgUEhZQ05ULCAxLCBkYXRhKTsKKwl9IHdoaWxlICgoZGF0YVswXSAmIFBIWV9HTykgJiYgKGkrKyA8IE1JSV9USU1FT1VUKSk7CisKKwlpZiAoaSA8IE1JSV9USU1FT1VUKSB7CisJCWdldF9yZWdpc3RlcnMoZGV2LCBQSFlEQVQsIDIsIGRhdGEpOworCQkqcmVnID0gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfbWlpX3dvcmQocnRsODE1MF90ICogZGV2LCB1OCBwaHksIF9fdTggaW5keCwgdTE2IHJlZykKK3sKKwlpbnQgaTsKKwl1OCBkYXRhWzNdLCB0bXA7CisKKwlkYXRhWzBdID0gcGh5OworCSooZGF0YSArIDEpID0gY3B1X3RvX2xlMTZwKCZyZWcpOworCXRtcCA9IGluZHggfCBQSFlfV1JJVEUgfCBQSFlfR087CisJaSA9IDA7CisKKwlzZXRfcmVnaXN0ZXJzKGRldiwgUEhZQURELCBzaXplb2YoZGF0YSksIGRhdGEpOworCXNldF9yZWdpc3RlcnMoZGV2LCBQSFlDTlQsIDEsICZ0bXApOworCWRvIHsKKwkJZ2V0X3JlZ2lzdGVycyhkZXYsIFBIWUNOVCwgMSwgZGF0YSk7CisJfSB3aGlsZSAoKGRhdGFbMF0gJiBQSFlfR08pICYmIChpKysgPCBNSUlfVElNRU9VVCkpOworCisJaWYgKGkgPCBNSUlfVElNRU9VVCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9ldGhlcm5ldF9hZGRyKHJ0bDgxNTBfdCAqIGRldikKK3sKKwl1OCBub2RlX2lkWzZdOworCisJZ2V0X3JlZ2lzdGVycyhkZXYsIElEUiwgc2l6ZW9mKG5vZGVfaWQpLCBub2RlX2lkKTsKKwltZW1jcHkoZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBub2RlX2lkLCBzaXplb2Yobm9kZV9pZCkpOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGk7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCWRiZygiJXM6IFNldHRpbmcgTUFDIGFkZHJlc3MgdG8gIiwgbmV0ZGV2LT5uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlkYmcoIiUwMlg6IiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7CisJZGJnKCIlMDJYXG4iLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKKwkvKiBTZXQgdGhlIElEUiByZWdpc3RlcnMuICovCisJc2V0X3JlZ2lzdGVycyhkZXYsIElEUiwgc2l6ZW9mKG5ldGRldi0+ZGV2X2FkZHIpLCBuZXRkZXYtPmRldl9hZGRyKTsKKyNpZmRlZiBFRVBST01fV1JJVEUKKwl7CisJdTggY3I7CisJLyogR2V0IHRoZSBDUiBjb250ZW50cy4gKi8KKwlnZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CisJLyogU2V0IHRoZSBXRVBST00gYml0IChlZXByb20gd3JpdGUgZW5hYmxlKS4gKi8KKwljciB8PSAweDIwOworCXNldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmNyKTsKKwkvKiBXcml0ZSB0aGUgTUFDIGFkZHJlc3MgaW50byBlZXByb20uIEVlcHJvbSB3cml0ZXMgbXVzdCBiZSB3b3JkLXNpemVkLAorCSAgIHNvIHdlIG5lZWQgdG8gc3BsaXQgdGhlbSB1cC4gKi8KKwlmb3IgKGkgPSAwOyBpICogMiA8IG5ldGRldi0+YWRkcl9sZW47IGkrKykgeworCQlzZXRfcmVnaXN0ZXJzKGRldiwgSURSX0VFUFJPTSArIChpICogMiksIDIsIAorCQluZXRkZXYtPmRldl9hZGRyICsgKGkgKiAyKSk7CisJfQorCS8qIENsZWFyIHRoZSBXRVBST00gYml0IChwcmV2ZW50aW5nIGFjY2lkZW50YWwgZWVwcm9tIHdyaXRlcykuICovCisJY3IgJj0gMHhkZjsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9yZXNldChydGw4MTUwX3QgKiBkZXYpCit7CisJdTggZGF0YSA9IDB4MTA7CisJaW50IGkgPSBIWjsKKworCXNldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmRhdGEpOworCWRvIHsKKwkJZ2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmZGF0YSk7CisJfSB3aGlsZSAoKGRhdGEgJiAweDEwKSAmJiAtLWkpOworCisJcmV0dXJuIChpID4gMCkgPyAxIDogMDsKK30KKworc3RhdGljIGludCBhbGxvY19hbGxfdXJicyhydGw4MTUwX3QgKiBkZXYpCit7CisJZGV2LT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yeF91cmIpCisJCXJldHVybiAwOworCWRldi0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+dHhfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihkZXYtPnJ4X3VyYik7CisJCXJldHVybiAwOworCX0KKwlkZXYtPmludHJfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50cl91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+dHhfdXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCWRldi0+Y3RybF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRyX3VyYikgeworCQl1c2JfZnJlZV91cmIoZGV2LT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIoZGV2LT50eF91cmIpOworCQl1c2JfZnJlZV91cmIoZGV2LT5pbnRyX3VyYik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2FsbF91cmJzKHJ0bDgxNTBfdCAqIGRldikKK3sKKwl1c2JfZnJlZV91cmIoZGV2LT5yeF91cmIpOworCXVzYl9mcmVlX3VyYihkZXYtPnR4X3VyYik7CisJdXNiX2ZyZWVfdXJiKGRldi0+aW50cl91cmIpOworCXVzYl9mcmVlX3VyYihkZXYtPmN0cmxfdXJiKTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2FsbF91cmJzKHJ0bDgxNTBfdCAqIGRldikKK3sKKwl1c2Jfa2lsbF91cmIoZGV2LT5yeF91cmIpOworCXVzYl9raWxsX3VyYihkZXYtPnR4X3VyYik7CisJdXNiX2tpbGxfdXJiKGRldi0+aW50cl91cmIpOworCXVzYl9raWxsX3VyYihkZXYtPmN0cmxfdXJiKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcHVsbF9za2IocnRsODE1MF90ICpkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9TS0JfUE9PTF9TSVpFOyBpKyspIHsKKwkJaWYgKGRldi0+cnhfc2tiX3Bvb2xbaV0pIHsKKwkJCXNrYiA9IGRldi0+cnhfc2tiX3Bvb2xbaV07CisJCQlkZXYtPnJ4X3NrYl9wb29sW2ldID0gTlVMTDsKKwkJCXJldHVybiBza2I7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJ0bDgxNTBfdCAqZGV2OworCXVuc2lnbmVkIHBrdF9sZW4sIHJlczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJdTE2IHJ4X3N0YXQ7CisKKwlkZXYgPSB1cmItPmNvbnRleHQ7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKwlpZiAodGVzdF9iaXQoUlRMODE1MF9VTlBMVUcsICZkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOworCW5ldGRldiA9IGRldi0+bmV0ZGV2OworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkKKwkJcmV0dXJuOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCQlyZXR1cm47CS8qIHRoZSB1cmIgaXMgaW4gdW5saW5rIHN0YXRlICovCisJY2FzZSAtRVRJTUVET1VUOgorCQl3YXJuKCJtYXkgYmUgcmVzZXQgaXMgbmVlZGVkPy4uIik7CisJCWdvdG8gZ29vbjsKKwlkZWZhdWx0OgorCQl3YXJuKCJSeCBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZ29vbjsKKwl9CisKKwlpZiAoIWRldi0+cnhfc2tiKQorCQlnb3RvIHJlc2NoZWQ7CisJLyogcHJvdGVjdCBhZ2FpbnN0IHNob3J0IHBhY2tldHMgKHRlbGwgbWUgd2h5IHdlIGdvdCBzb21lPyE/KSAqLworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCA0KQorCQlnb3RvIGdvb247CisKKwlyZXMgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJcnhfc3RhdCA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopKHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgcmVzIC0gNCkpOworCXBrdF9sZW4gPSByZXMgLSA0OworCisJc2tiX3B1dChkZXYtPnJ4X3NrYiwgcGt0X2xlbik7CisJZGV2LT5yeF9za2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoZGV2LT5yeF9za2IsIG5ldGRldik7CisJbmV0aWZfcngoZGV2LT5yeF9za2IpOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKworCXNwaW5fbG9jaygmZGV2LT5yeF9wb29sX2xvY2spOworCXNrYiA9IHB1bGxfc2tiKGRldik7CisJc3Bpbl91bmxvY2soJmRldi0+cnhfcG9vbF9sb2NrKTsKKwlpZiAoIXNrYikKKwkJZ290byByZXNjaGVkOworCisJZGV2LT5yeF9za2IgPSBza2I7Citnb29uOgorCXVzYl9maWxsX2J1bGtfdXJiKGRldi0+cnhfdXJiLCBkZXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIDEpLAorCQkgICAgICBkZXYtPnJ4X3NrYi0+ZGF0YSwgUlRMODE1MF9NVFUsIHJlYWRfYnVsa19jYWxsYmFjaywgZGV2KTsKKwlpZiAodXNiX3N1Ym1pdF91cmIoZGV2LT5yeF91cmIsIEdGUF9BVE9NSUMpKSB7CisJCXNldF9iaXQoUlhfVVJCX0ZBSUwsICZkZXYtPmZsYWdzKTsKKwkJZ290byByZXNjaGVkOworCX0gZWxzZSB7CisJCWNsZWFyX2JpdChSWF9VUkJfRkFJTCwgJmRldi0+ZmxhZ3MpOworCX0KKworCXJldHVybjsKK3Jlc2NoZWQ6CisJdGFza2xldF9zY2hlZHVsZSgmZGV2LT50bCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2ZpeHVwKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlydGw4MTUwX3QgKmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJZGV2ID0gKHJ0bDgxNTBfdCAqKWRhdGE7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJZmlsbF9za2JfcG9vbChkZXYpOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5yeF9wb29sX2xvY2spOworCWlmICh0ZXN0X2JpdChSWF9VUkJfRkFJTCwgJmRldi0+ZmxhZ3MpKQorCQlpZiAoZGV2LT5yeF9za2IpCisJCQlnb3RvIHRyeV9hZ2FpbjsKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJc2tiID0gcHVsbF9za2IoZGV2KTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cnhfcG9vbF9sb2NrKTsKKwlpZiAoc2tiID09IE5VTEwpCisJCWdvdG8gdGxzY2hlZDsKKwlkZXYtPnJ4X3NrYiA9IHNrYjsKKwl1c2JfZmlsbF9idWxrX3VyYihkZXYtPnJ4X3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKKwkJICAgICAgZGV2LT5yeF9za2ItPmRhdGEsIFJUTDgxNTBfTVRVLCByZWFkX2J1bGtfY2FsbGJhY2ssIGRldik7Cit0cnlfYWdhaW46CisJaWYgKHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfQVRPTUlDKSkgeworCQlzZXRfYml0KFJYX1VSQl9GQUlMLCAmZGV2LT5mbGFncyk7CisJCWdvdG8gdGxzY2hlZDsKKwkgfSBlbHNlIHsKKwkJY2xlYXJfYml0KFJYX1VSQl9GQUlMLCAmZGV2LT5mbGFncyk7CisJfQorCisJcmV0dXJuOwordGxzY2hlZDoKKwl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPnRsKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJ0bDgxNTBfdCAqZGV2OworCisJZGV2ID0gdXJiLT5jb250ZXh0OworCWlmICghZGV2KQorCQlyZXR1cm47CisJZGV2X2tmcmVlX3NrYl9pcnEoZGV2LT50eF9za2IpOworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2LT5uZXRkZXYpKQorCQlyZXR1cm47CisJaWYgKHVyYi0+c3RhdHVzKQorCQlpbmZvKCIlczogVHggc3RhdHVzICVkIiwgZGV2LT5uZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwlkZXYtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCW5ldGlmX3dha2VfcXVldWUoZGV2LT5uZXRkZXYpOworfQorCitzdGF0aWMgdm9pZCBpbnRyX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcnRsODE1MF90ICpkZXY7CisJX191OCAqZDsKKwlpbnQgc3RhdHVzOworCisJZGV2ID0gdXJiLT5jb250ZXh0OworCWlmICghZGV2KQorCQlyZXR1cm47CisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsKKwkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KKwlkZWZhdWx0OgorCQlpbmZvKCIlczogaW50ciBzdGF0dXMgJWQiLCBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpZiAoZFswXSAmIFRTUl9FUlJPUlMpIHsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJaWYgKGRbSU5UX1RTUl0gJiAoVFNSX0VDT0wgfCBUU1JfSkJSKSkKKwkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTENPTCkKKwkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQlpZiAoZFtJTlRfVFNSXSAmIFRTUl9MT1NTX0NSUykKKwkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwl9CisJLyogUmVwb3J0IGxpbmsgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2sgKi8KKwlpZiAoKGRbSU5UX01TUl0gJiBNU1JfTElOSykgPT0gMCkgeworCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtPm5ldGRldikpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0ZGV2KTsKKwkJCWRiZygiJXM6IExJTksgTE9TVFxuIiwgX19mdW5jX18pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldi0+bmV0ZGV2KSkgeworCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldGRldik7CisJCQlkYmcoIiVzOiBMSU5LIENBTUUgQkFDS1xuIiwgX19mdW5jX18pOworCQl9CisJfQorCityZXN1Ym1pdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQwLCBzdGF0dXMgJWQiLAorCQkJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwKKwkJCQlkZXYtPnVkZXYtPmRldnBhdGgsIHN0YXR1cyk7Cit9CisKKworLyoKKyoqCisqKgluZXR3b3JrIHJlbGF0ZWQgcGFydCBvZiB0aGUgY29kZQorKioKKyovCisKK3N0YXRpYyB2b2lkIGZpbGxfc2tiX3Bvb2wocnRsODE1MF90ICpkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9TS0JfUE9PTF9TSVpFOyBpKyspIHsKKwkJaWYgKGRldi0+cnhfc2tiX3Bvb2xbaV0pCisJCQljb250aW51ZTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihSVEw4MTUwX01UVSArIDIpOworCQlpZiAoIXNrYikgeworCQkJcmV0dXJuOworCQl9CisJCXNrYi0+ZGV2ID0gZGV2LT5uZXRkZXY7CisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCWRldi0+cnhfc2tiX3Bvb2xbaV0gPSBza2I7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX3NrYl9wb29sKHJ0bDgxNTBfdCAqZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX1NLQl9QT09MX1NJWkU7IGkrKykKKwkJaWYgKGRldi0+cnhfc2tiX3Bvb2xbaV0pCisJCQlkZXZfa2ZyZWVfc2tiKGRldi0+cnhfc2tiX3Bvb2xbaV0pOworfQorCitzdGF0aWMgaW50IGVuYWJsZV9uZXRfdHJhZmZpYyhydGw4MTUwX3QgKiBkZXYpCit7CisJdTggY3IsIHRjciwgcmNyLCBtc3I7CisKKwlpZiAoIXJ0bDgxNTBfcmVzZXQoZGV2KSkgeworCQl3YXJuKCIlcyAtIGRldmljZSByZXNldCBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCX0KKwkvKiBSQ1IgYml0Nz0xIGF0dGFjaCBSeCBpbmZvIGF0IHRoZSBlbmQ7ICA9MCBIVyBDUkMgKHdoaWNoIGlzIGJyb2tlbikgKi8KKwlyY3IgPSAweDllOworCWRldi0+cnhfY3JlZyA9IGNwdV90b19sZTE2KHJjcik7CisJdGNyID0gMHhkODsKKwljciA9IDB4MGM7CisJaWYgKCEocmNyICYgMHg4MCkpCisJCXNldF9iaXQoUlRMODE1MF9IV19DUkMsICZkZXYtPmZsYWdzKTsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgUkNSLCAxLCAmcmNyKTsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgVENSLCAxLCAmdGNyKTsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CisJZ2V0X3JlZ2lzdGVycyhkZXYsIE1TUiwgMSwgJm1zcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9uZXRfdHJhZmZpYyhydGw4MTUwX3QgKiBkZXYpCit7CisJdTggY3I7CisKKwlnZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CisJY3IgJj0gMHhmMzsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE1MF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gJigocnRsODE1MF90ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJd2FybigiJXM6IFR4IHRpbWVvdXQuIiwgbmV0ZGV2LT5uYW1lKTsKKwlkZXYtPnR4X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1c2JfdW5saW5rX3VyYihkZXYtPnR4X3VyYik7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKK30KKworc3RhdGljIHZvaWQgcnRsODE1MF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDEpOworCQlpbmZvKCIlczogcHJvbWlzY3VvdXMgbW9kZSIsIG5ldGRldi0+bmFtZSk7CisJfSBlbHNlIGlmICgobmV0ZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJCSAgIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQlkZXYtPnJ4X2NyZWcgJj0gY3B1X3RvX2xlMTYoMHhmZmZlKTsKKwkJZGV2LT5yeF9jcmVnIHw9IGNwdV90b19sZTE2KDB4MDAwMik7CisJCWluZm8oIiVzOiBhbGxtdWx0aSBzZXQiLCBuZXRkZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCS8qIH5SWF9NVUxUSUNBU1QsIH5SWF9QUk9NSVNDVU9VUyAqLworCQlkZXYtPnJ4X2NyZWcgJj0gY3B1X3RvX2xlMTYoMHgwMGZjKTsKKwl9CisJYXN5bmNfc2V0X3JlZ2lzdGVycyhkZXYsIFJDUiwgMik7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgY291bnQsIHJlczsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwljb3VudCA9IChza2ItPmxlbiA8IDYwKSA/IDYwIDogc2tiLT5sZW47CisJY291bnQgPSAoY291bnQgJiAweDNmKSA/IGNvdW50IDogY291bnQgKyAxOworCWRldi0+dHhfc2tiID0gc2tiOworCXVzYl9maWxsX2J1bGtfdXJiKGRldi0+dHhfdXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIDIpLAorCQkgICAgICBza2ItPmRhdGEsIGNvdW50LCB3cml0ZV9idWxrX2NhbGxiYWNrLCBkZXYpOworCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT50eF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQl3YXJuKCJmYWlsZWQgdHhfdXJiICVkXG4iLCByZXMpOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCX0gZWxzZSB7CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBzZXRfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzaG9ydCB0bXA7CisKKwlnZXRfcmVnaXN0ZXJzKGRldiwgQ1NDUiwgMiwgJnRtcCk7CisJaWYgKHRtcCAmIENTQ1JfTElOS19TVEFUVVMpCisJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwllbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXM7CisKKwlpZiAoZGV2LT5yeF9za2IgPT0gTlVMTCkKKwkJZGV2LT5yeF9za2IgPSBwdWxsX3NrYihkZXYpOworCWlmICghZGV2LT5yeF9za2IpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X3JlZ2lzdGVycyhkZXYsIElEUiwgNiwgbmV0ZGV2LT5kZXZfYWRkcik7CisJCisJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT5yeF91cmIsIGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCisJCSAgICAgIGRldi0+cnhfc2tiLT5kYXRhLCBSVEw4MTUwX01UVSwgcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOworCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5yeF91cmIsIEdGUF9LRVJORUwpKSkKKwkJd2FybigiJXM6IHJ4X3VyYiBzdWJtaXQgZmFpbGVkOiAlZCIsIF9fRlVOQ1RJT05fXywgcmVzKTsKKwl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50cl91cmIsIGRldi0+dWRldiwgdXNiX3JjdmludHBpcGUoZGV2LT51ZGV2LCAzKSwKKwkJICAgICBkZXYtPmludHJfYnVmZiwgSU5UQlVGU0laRSwgaW50cl9jYWxsYmFjaywKKwkJICAgICBkZXYsIGRldi0+aW50cl9pbnRlcnZhbCk7CisJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpCisJCXdhcm4oIiVzOiBpbnRyX3VyYiBzdWJtaXQgZmFpbGVkOiAlZCIsIF9fRlVOQ1RJT05fXywgcmVzKTsKKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCWVuYWJsZV9uZXRfdHJhZmZpYyhkZXYpOworCXNldF9jYXJyaWVyKG5ldGRldik7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJlcyA9IDA7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJaWYgKCF0ZXN0X2JpdChSVEw4MTUwX1VOUExVRywgJmRldi0+ZmxhZ3MpKQorCQlkaXNhYmxlX25ldF90cmFmZmljKGRldik7CisJdW5saW5rX2FsbF91cmJzKGRldik7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBydGw4MTUwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3RybmNweShpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBFVEhUT09MX0JVU0lORk9fTEVOKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBFVEhUT09MX0JVU0lORk9fTEVOKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgaW5mby0+YnVzX2luZm8sIHNpemVvZiBpbmZvLT5idXNfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE1MF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzaG9ydCBscGEsIGJtY3I7CisKKwllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCSAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJICBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfTUlJKTsKKwllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJZWNtZC0+cGh5X2FkZHJlc3MgPSBkZXYtPnBoeTsKKwlnZXRfcmVnaXN0ZXJzKGRldiwgQk1DUiwgMiwgJmJtY3IpOworCWdldF9yZWdpc3RlcnMoZGV2LCBBTkxQLCAyLCAmbHBhKTsKKwlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQllY21kLT5zcGVlZCA9IChscGEgJiAoTFBBXzEwMEhBTEYgfCBMUEFfMTAwRlVMTCkpID8KKwkJCSAgICAgU1BFRURfMTAwIDogU1BFRURfMTA7CisJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDApCisJCQllY21kLT5kdXBsZXggPSAobHBhICYgTFBBXzEwMEZVTEwpID8KKwkJCSAgICBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCQllbHNlCisJCQllY21kLT5kdXBsZXggPSAobHBhICYgTFBBXzEwRlVMTCkgPworCQkJICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJfSBlbHNlIHsKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJZWNtZC0+c3BlZWQgPSAoYm1jciAmIEJNQ1JfU1BFRUQxMDApID8KKwkJICAgIFNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQllY21kLT5kdXBsZXggPSAoYm1jciAmIEJNQ1JfRlVMTERQTFgpID8KKwkJICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBydGw4MTUwX2dldF9kcnZpbmZvLAorCS5nZXRfc2V0dGluZ3MgPSBydGw4MTUwX2dldF9zZXR0aW5ncywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rCit9OworCitzdGF0aWMgaW50IHJ0bDgxNTBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2ICpkYXRhID0gKHUxNiAqKSAmIHJxLT5pZnJfaWZydTsKKwlpbnQgcmVzID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DREVWUFJJVkFURToKKwkJZGF0YVswXSA9IGRldi0+cGh5OworCWNhc2UgU0lPQ0RFVlBSSVZBVEUgKyAxOgorCQlyZWFkX21paV93b3JkKGRldiwgZGV2LT5waHksIChkYXRhWzFdICYgMHgxZiksICZkYXRhWzNdKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DREVWUFJJVkFURSArIDI6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJCXdyaXRlX21paV93b3JkKGRldiwgZGV2LT5waHksIChkYXRhWzFdICYgMHgxZiksIGRhdGFbMl0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlydGw4MTUwX3QgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHJ0bDgxNTBfdCkpOworCWlmICghbmV0ZGV2KSB7CisJCWVycigiT3V0IG9mIG1lbW9yeSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCW1lbXNldChkZXYsIDAsIHNpemVvZihydGw4MTUwX3QpKTsKKworCWRldi0+aW50cl9idWZmID0ga21hbGxvYyhJTlRCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50cl9idWZmKSB7CisJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRhc2tsZXRfaW5pdCgmZGV2LT50bCwgcnhfZml4dXAsICh1bnNpZ25lZCBsb25nKWRldik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+cnhfcG9vbF9sb2NrKTsKKwkKKwlkZXYtPnVkZXYgPSB1ZGV2OworCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OworCVNFVF9NT0RVTEVfT1dORVIobmV0ZGV2KTsKKwluZXRkZXYtPm9wZW4gPSBydGw4MTUwX29wZW47CisJbmV0ZGV2LT5zdG9wID0gcnRsODE1MF9jbG9zZTsKKwluZXRkZXYtPmRvX2lvY3RsID0gcnRsODE1MF9pb2N0bDsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gUlRMODE1MF9UWF9USU1FT1VUOworCW5ldGRldi0+dHhfdGltZW91dCA9IHJ0bDgxNTBfdHhfdGltZW91dDsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHJ0bDgxNTBfc3RhcnRfeG1pdDsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdDsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzOworCW5ldGRldi0+Z2V0X3N0YXRzID0gcnRsODE1MF9uZXRkZXZfc3RhdHM7CisJbmV0ZGV2LT5tdHUgPSBSVEw4MTUwX01UVTsKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmb3BzKTsKKwlkZXYtPmludHJfaW50ZXJ2YWwgPSAxMDA7CS8qIDEwMG1zICovCisKKwlpZiAoIWFsbG9jX2FsbF91cmJzKGRldikpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoIXJ0bDgxNTBfcmVzZXQoZGV2KSkgeworCQllcnIoImNvdWxkbid0IHJlc2V0IHRoZSBkZXZpY2UiKTsKKwkJZ290byBvdXQxOworCX0KKwlmaWxsX3NrYl9wb29sKGRldik7CisJc2V0X2V0aGVybmV0X2FkZHIoZGV2KTsKKwlpbmZvKCIlczogcnRsODE1MCBpcyBkZXRlY3RlZCIsIG5ldGRldi0+bmFtZSk7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmludGYtPmRldik7CisJaWYgKHJlZ2lzdGVyX25ldGRldihuZXRkZXYpICE9IDApIHsKKwkJZXJyKCJjb3VsZG4ndCByZWdpc3RlciB0aGUgZGV2aWNlIik7CisJCWdvdG8gb3V0MjsKKwl9CisJcmV0dXJuIDA7CisKK291dDI6CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlmcmVlX3NrYl9wb29sKGRldik7CitvdXQxOgorCWZyZWVfYWxsX3VyYnMoZGV2KTsKK291dDoKKwlrZnJlZShkZXYtPmludHJfYnVmZik7CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgcnRsODE1MF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJ0bDgxNTBfdCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKGRldikgeworCQlzZXRfYml0KFJUTDgxNTBfVU5QTFVHLCAmZGV2LT5mbGFncyk7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldi0+bmV0ZGV2KTsKKwkJdW5saW5rX2FsbF91cmJzKGRldik7CisJCWZyZWVfYWxsX3VyYnMoZGV2KTsKKwkJZnJlZV9za2JfcG9vbChkZXYpOworCQlpZiAoZGV2LT5yeF9za2IpCisJCQlkZXZfa2ZyZWVfc2tiKGRldi0+cnhfc2tiKTsKKwkJa2ZyZWUoZGV2LT5pbnRyX2J1ZmYpOworCQlmcmVlX25ldGRldihkZXYtPm5ldGRldik7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCB1c2JfcnRsODE1MF9pbml0KHZvaWQpCit7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJ0bDgxNTBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9ydGw4MTUwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcnRsODE1MF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfcnRsODE1MF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9ydGw4MTUwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhiNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCkBAIC0wLDAgKzEsNDEwNiBAQAorLyoKKyAqIFVTQiBOZXR3b3JraW5nIExpbmtzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBieSBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IERhdmlkIEhvbGxpcyA8ZGhvbGxpc0BkYXZlaG9sbGlzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBQaGlsIENoYW5nIDxwY2hhbmcyM0BzYmNnbG9iYWwubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgVGlWbyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiBUaGlzIGlzIGEgZ2VuZXJpYyAiVVNCIG5ldHdvcmtpbmciIGZyYW1ld29yayB0aGF0IHdvcmtzIHdpdGggc2V2ZXJhbAorICoga2luZHMgb2YgZnVsbCBhbmQgaGlnaCBzcGVlZCBuZXR3b3JraW5nIGRldmljZXM6CisgKgorICogICArIFVTQiBob3N0LXRvLWhvc3QgIm5ldHdvcmsgY2FibGVzIiwgdXNlZCBmb3IgSVAtb3Zlci1VU0IgbGlua3MuCisgKiAgICAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgZm9yIExhcGxpbmsgc3R5bGUgY29ubmVjdGl2aXR5IHByb2R1Y3RzLgorICoJLSBBbmNob3JDaGlwIDI3MjAKKyAqCS0gQmVsa2luLCBlVEVLIChpbnRlcm9wcyB3aXRoIFdpbjMyIGRyaXZlcnMpCisgKgktIEdlbmVTeXMgR0w2MjBVU0ItQQorICoJLSBOZXRDaGlwIDEwODAgKGludGVyb3BlcmF0ZXMgd2l0aCBOZXRDaGlwIFdpbjMyIGRyaXZlcnMpCisgKgktIFByb2xpZmljIFBMLTIzMDEvMjMwMiAocmVwbGFjZXMgInBsdXNiIiBkcml2ZXIpCisgKgktIEtDIFRlY2hub2xvZ3kgS0MyMTkwCisgKgorICogICArIFNtYXJ0IFVTQiBkZXZpY2VzIGNhbiBzdXBwb3J0IHN1Y2ggbGlua3MgZGlyZWN0bHksIHVzaW5nIEludGVybmV0CisgKiAgICAgc3RhbmRhcmQgcHJvdG9jb2xzIGluc3RlYWQgb2YgcHJvcHJpZXRhcnkgaG9zdC10by1kZXZpY2UgbGlua3MuCisgKgktIExpbnV4IFBEQXMgbGlrZSBpUGFxLCBZb3B5LCBhbmQgWmF1cnVzCisgKgktIFRoZSBCTE9CIGJvb3QgbG9hZGVyIChmb3IgZGlza2xlc3MgYm9vdGluZykKKyAqCS0gTGludXggImdhZGdldHMiLCBwZXJoYXBzIHVzaW5nIFBYQS0yeHggb3IgTmV0MjI4MCBjb250cm9sbGVycworICoJLSBEZXZpY2VzIHVzaW5nIEVQU09OJ3Mgc2FtcGxlIFVTQiBmaXJtd2FyZQorICoJLSBDREMtRXRoZXJuZXQgY2xhc3MgZGV2aWNlcywgc3VjaCBhcyBtYW55IGNhYmxlIG1vZGVtcworICoKKyAqICAgKyBBZGFwdGVycyB0byBuZXR3b3JrcyBzdWNoIGFzIEV0aGVybmV0LgorICoJLSBBWDg4MTdYIGJhc2VkIFVTQiAyLjAgcHJvZHVjdHMKKyAqCisgKiBMaW5rcyB0byB0aGVzZSBkZXZpY2VzIGNhbiBiZSBicmlkZ2VkIHVzaW5nIExpbnV4IEV0aGVybmV0IGJyaWRnaW5nLgorICogV2l0aCBtaW5vciBleGNlcHRpb25zLCB0aGVzZSBhbGwgdXNlIHNpbWlsYXIgVVNCIGZyYW1pbmcgZm9yIG5ldHdvcmsKKyAqIHRyYWZmaWMsIGJ1dCBuZWVkIGRpZmZlcmVudCBwcm90b2NvbHMgZm9yIGNvbnRyb2wgdHJhZmZpYy4KKyAqCisgKiBVU0IgZGV2aWNlcyBjYW4gaW1wbGVtZW50IHRoZWlyIHNpZGUgb2YgdGhpcyBwcm90b2NvbCBhdCB0aGUgY29zdAorICogb2YgdHdvIGJ1bGsgZW5kcG9pbnRzOyBpdCdzIG5vdCByZXN0cmljdGVkIHRvICJjYWJsZSIgYXBwbGljYXRpb25zLgorICogU2VlIHRoZSBTQTExMTAsIFphdXJ1cywgb3IgRVBTT04gZGV2aWNlL2NsaWVudCBzdXBwb3J0IGluIHRoaXMgZHJpdmVyOworICogc2xhdmUvdGFyZ2V0IGRyaXZlcnMgc3VjaCBhcyAidXNiLWV0aCIgKG9uIG1vc3QgU0EtMTEwMCBQREFzKSBvcgorICogImdfZXRoZXIiIChpbiB0aGUgTGludXggImdhZGdldCIgZnJhbWV3b3JrKSBpbXBsZW1lbnQgdGhhdCBiZWhhdmlvcgorICogd2l0aGluIGRldmljZXMuCisgKgorICoKKyAqIENIQU5HRUxPRzoKKyAqCisgKiAxMy1zZXAtMjAwMAlleHBlcmltZW50YWwsIG5ldworICogMTAtb2N0LTIwMDAJdXNiX2RldmljZV9pZCB0YWJsZSBjcmVhdGVkLiAKKyAqIDI4LW9jdC0yMDAwCW1pc2MgZml4ZXM7IG1vc3RseSwgZGlzY2FyZCBtb3JlIFRUTC1tYW5nbGVkIHJ4IHBhY2tldHMuCisgKiAwMS1ub3YtMjAwMAl1c2JfZGV2aWNlX2lkIHRhYmxlIGFuZCBwcm9iaW5nIGFwaSB1cGRhdGUgYnkKKyAqCQlBZGFtIEouIFJpY2h0ZXIgPGFkYW1AeWdnZHJhc2lsLmNvbT4uCisgKiAxOC1kZWMtMjAwMAkoZGIpIHR4IHdhdGNoZG9nLCAibmV0MTA4MCIgcmVuYW1pbmcgdG8gInVzYm5ldCIsIGRldmljZV9pbmZvCisgKgkJYW5kIHByb2xpZmljIHN1cHBvcnQsIGlzb2xhdGUgbmV0MTA4MC1zcGVjaWZpYyBiaXRzLCBjbGVhbnVwLgorICoJCWZpeCB1bmxpbmtfdXJicyBvb3BzIGluIEQzIFBNIHJlc3VtZSBjb2RlIHBhdGguCisgKgorICogMDItZmViLTIwMDEJKGRiKSBmaXggdHggc2tiIHNoYXJpbmcsIHBhY2tldCBsZW5ndGgsIG1hdGNoX2ZsYWdzLCAuLi4KKyAqIDA4LWZlYi0yMDAxCXN0dWJiZWQgaW4gImxpbnV4ZGV2IiwgbWF5YmUgdGhlIFNBLTExMDAgZm9sayBjYW4gdXNlIGl0OworICoJCUFuY2hvckNoaXBzIDI3MjAgc3VwcG9ydCAoZnJvbSBzcGVjKSBmb3IgdGVzdGluZzsKKyAqCQlmaXggYml0LW9yZGVyaW5nIHByb2JsZW0gd2l0aCBldGhlcm5ldCBtdWx0aWNhc3QgYWRkcgorICogMTktZmViLTIwMDEgIFN1cHBvcnQgZm9yIGNsZWFyaW5nIGhhbHQgY29uZGl0aW9ucy4gU0ExMTAwIFVEQyBzdXBwb3J0CisgKgkJdXBkYXRlcy4gT2xlZyBEcm9raW4gKGdyZWVuQGlYY2VsZXJhdG9yLmNvbSkKKyAqIDI1LW1hci0yMDAxCU1vcmUgU0EtMTEwMCB1cGRhdGVzLCBpbmNsdWRpbmcgd29ya2Fyb3VuZCBmb3IgaXAgcHJvYmxlbQorICoJCWV4cGVjdGluZyBjbGVhcmVkIHNrYi0+Y2IgYW5kIGZyYW1pbmcgY2hhbmdlIHRvIG1hdGNoIGxhdGVzdAorICoJCWhhbmRoZWxkcy5vcmcgdmVyc2lvbiAoT2xlZykuICBFbmFibGUgZGV2aWNlIElEcyBmcm9tIHRoZQorICoJCVdpbjMyIEJlbGtpbiBkcml2ZXI7IG90aGVyIGNsZWFudXBzIChkYikuCisgKiAxNi1qdWwtMjAwMQlCdWdmaXhlcyBmb3IgdWhjaSBvb3BzLW9uLXVucGx1ZywgQmVsa2luIHN1cHBvcnQsIHZhcmlvdXMKKyAqCQljbGVhbnVwcyBmb3IgcHJvYmxlbXMgbm90IHlldCBzZWVuIGluIHRoZSBmaWVsZC4gKGRiKQorICogMTctb2N0LTIwMDEJSGFuZGxlICJBZHZhbmNlIFVTQk5FVCIgcHJvZHVjdCwgbGlrZSBCZWxraW4vZVRFSyBkZXZpY2VzLAorICoJCWZyb20gSW9hbm5pcyBNYXZyb3VrYWtpcyA8aS5tYXZyb3VrYWtpc0BidGludGVybmV0LmNvbT47CisgKgkJcnggdW5saW5rcyBzb21laG93IHdlcmVuJ3QgYXN5bmM7IG1pbm9yIGNsZWFudXAuCisgKiAwMy1ub3YtMjAwMQlNZXJnZWQgR2VuZVN5cyBkcml2ZXI7IG9yaWdpbmFsIGNvZGUgZnJvbSBKaXVuLUppZSBIdWFuZworICoJCTxodWFuZ2pqQGdlbmVzeXNsb2dpYy5jb20udHc+LCB1cGRhdGVkIGJ5IFN0YW5pc2xhdiBCcmFiZWMKKyAqCQk8dXR4QHBlbmd1aW4uY3o+LiAgTWFkZSBmcmFtaW5nIG9wdGlvbnMgKE5ldENoaXAvR2VuZVN5cykKKyAqCQl0aWUgbW9zdGx5IHRvIChzdWIpZHJpdmVyIGluZm8uICBXb3JrYXJvdW5kIHNvbWUgUEwtMjMwMgorICoJCWNoaXBzIHRoYXQgc2VlbSB0byByZWplY3QgU0VUX0lOVEVSRkFDRSByZXF1ZXN0cy4KKyAqCisgKiAwNi1hcHItMjAwMglBZGRlZCBldGh0b29sIHN1cHBvcnQsIGJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBCcmFkIEhhcmRzLgorICoJCUxldmVsIG9mIGRpYWdub3N0aWNzIGlzIG1vcmUgY29uZmlndXJhYmxlOyB0aGV5IHVzZSBkZXZpY2UKKyAqCQlsb2NhdGlvbiAodXNiX2RldmljZS0+ZGV2cGF0aCkgaW5zdGVhZCBvZiBhZGRyZXNzICgyLjUpLgorICoJCUZvciB0eF9maXh1cCwgbWVtZmxhZ3MgY2FuJ3QgYmUgTk9JTy4KKyAqIDA3LW1heS0yMDAyCUdlbmVyYWxpemUvY2xlYW51cCBrZXZlbnRkIHN1cHBvcnQsIGhhbmRsaW5nIHJ4IHN0YWxscyAobW9zdGx5CisgKgkJZm9yIFVTQiAyLjAgVFRzKSBhbmQgbWVtb3J5IHNob3J0YWdlcyAocG90ZW50aWFsKSB0b28uIChkYikKKyAqCQlVc2UgImxvY2FsbHkgYXNzaWduZWQiIElFRUU4MDIgYWRkcmVzcyBzcGFjZS4gKEJyYWQgSGFyZHMpCisgKiAxOC1vY3QtMjAwMglTdXBwb3J0IGZvciBaYXVydXMgKFBhdmVsIE1hY2hlayksIHJlbGF0ZWQgY2xlYW51cCAoZGIpLgorICogMTQtZGVjLTIwMDIJUmVtb3ZlIFphdXJ1cy1wcml2YXRlIGNyYzMyIGNvZGUgKFBhdmVsKTsgMi41IG9vcHMgZml4LAorICogCQljbGVhbnVwcyBhbmQgc3R1YmJlZCBQWEEtMjUwIHN1cHBvcnQgKGRiKSwgZml4IGZvciBmcmFtaW5nCisgKiAJCWlzc3VlcyBvbiBaLCBuZXQxMDgwLCBhbmQgZ2w2MjBhIChUb2J5IE1pbG5lKQorICoKKyAqIDMxLW1hci0yMDAzCVVzZSBlbmRwb2ludCBkZXNjcmlwdG9yczogIGhpZ2ggc3BlZWQgc3VwcG9ydCwgc2ltcGxlciBzYTExMDAKKyAqIAkJdnMgcHhhMjV4LCBhbmQgQ0RDIEV0aGVybmV0LiAgVGhyb3R0bGUgZG93biBsb2cgZmxvb2RzIG9uCisgKiAJCWRpc2Nvbm5lY3Q7IG90aGVyIGNsZWFudXBzLiAoZGIpICBGbHVzaCBuZXQxMDgwIGZpZm9zCisgKiAJCWFmdGVyIHNldmVyYWwgc2VxdWVudGlhbCBmcmFtaW5nIGVycm9ycy4gKEpvaGFubmVzIEVyZGZlbHQpCisgKiAyMi1hdWctMjAwMwlBWDg4MTdYIHN1cHBvcnQgKERhdmUgSG9sbGlzKS4KKyAqIDE0LWp1bi0yMDA0ICBUcml2aWFsIHBhdGNoIGZvciBBWDg4MTdYIGJhc2VkIEJ1ZmZhbG8gTFVBLVUyLUtUWCBpbiBKYXBhbgorICoJCShOZWlsIEJvcnRuYWspCisgKiAwMy1ub3YtMjAwNAlUcml2aWFsIHBhdGNoIGZvciBLQzIxOTAgKEtDLTE5MCkgY2hpcC4gKEpvbmF0aGFuIE1jRG93ZWxsKQorICoKKyAqIDAxLWZlYi0yMDA1CUFYODg3NzIgc3VwcG9ydCAoUGhpbCBDaGFuZyAmIERhdmUgSG9sbGlzKQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gI2RlZmluZQlERUJVRwkJCS8vIGVycm9yIHBhdGggbWVzc2FnZXMsIGV4dHJhIGluZm8KKy8vICNkZWZpbmUJVkVSQk9TRQkJCS8vIG1vcmU7IHN1Y2Nlc3MgbWVzc2FnZXMKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmCUNPTkZJR19VU0JfREVCVUcKKyMgICBkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIwMy1Ob3YtMjAwNCIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogTmluZXRlZW4gVVNCIDEuMSBtYXggc2l6ZSBidWxrIHRyYW5zYWN0aW9ucyBwZXIgZnJhbWUgKG1zKSwgbWF4LgorICogU2V2ZXJhbCBkb3plbiBieXRlcyBvZiBJUHY0IGRhdGEgY2FuIGZpdCBpbiB0d28gc3VjaCB0cmFuc2FjdGlvbnMuCisgKiBPbmUgbWF4aW11bSBzaXplIEV0aGVybmV0IHBhY2tldCB0YWtlcyB0d2VudHkgZm91ciBvZiB0aGVtLgorICogRm9yIGhpZ2ggc3BlZWQsIGVhY2ggZnJhbWUgY29tZm9ydGFibHkgZml0cyBhbG1vc3QgMzYgbWF4IHNpemUKKyAqIEV0aGVybmV0IHBhY2tldHMgKHNvIHF1ZXVlcyBzaG91bGQgYmUgYmlnZ2VyKS4KKyAqLworI2RlZmluZQlSWF9RTEVOKGRldikgKCgoZGV2KS0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gNjAgOiA0KQorI2RlZmluZQlUWF9RTEVOKGRldikgKCgoZGV2KS0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gNjAgOiA0KQorCisvLyBwYWNrZXRzIGFyZSBhbHdheXMgZXRoZXJuZXQgaW5zaWRlCisvLyAuLi4gZXhjZXB0IHRoZXkgY2FuIGJlIGJpZ2dlciAobGltaXQgb2YgNjRLIHdpdGggTmV0Q2hpcCBmcmFtaW5nKQorI2RlZmluZSBNSU5fUEFDS0VUCXNpemVvZihzdHJ1Y3QgZXRoaGRyKQorI2RlZmluZSBNQVhfUEFDS0VUCTMyNzY4CisKKy8vIHJlYXdha2VuIG5ldHdvcmsgcXVldWUgdGhpcyBzb29uIGFmdGVyIHN0b3BwaW5nOyBlbHNlIHdhdGNoZG9nIGJhcmtzCisjZGVmaW5lIFRYX1RJTUVPVVRfSklGRklFUwkoNSpIWikKKworLy8gdGhyb3R0bGUgcngvdHggYnJpZWZseSBhZnRlciBzb21lIGZhdWx0cywgc28ga2h1YmQgbWlnaHQgZGlzY29ubmVjdCgpCisvLyB1cyAoaXQgcG9sbHMgYXQgSFovNCB1c3VhbGx5KSBiZWZvcmUgd2UgcmVwb3J0IHRvbyBtYW55IGZhbHNlIGVycm9ycy4KKyNkZWZpbmUgVEhST1RUTEVfSklGRklFUwkoSFovOCkKKworLy8gZm9yIHZlbmRvci1zcGVjaWZpYyBjb250cm9sIG9wZXJhdGlvbnMKKyNkZWZpbmUJQ09OVFJPTF9USU1FT1VUX01TCTUwMAorCisvLyBiZXR3ZWVuIHdha2V1cHMKKyNkZWZpbmUgVU5MSU5LX1RJTUVPVVRfTVMJMworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyByYW5kb21seSBnZW5lcmF0ZWQgZXRoZXJuZXQgYWRkcmVzcworc3RhdGljIHU4CW5vZGVfaWQgW0VUSF9BTEVOXTsKKworLy8gc3RhdGUgd2Uga2VlcCBmb3IgZWFjaCBkZXZpY2Ugd2UgaGFuZGxlCitzdHJ1Y3QgdXNibmV0IHsKKwkvLyBob3VzZWtlZXBpbmcKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8JKmRyaXZlcl9pbmZvOworCXdhaXRfcXVldWVfaGVhZF90CSp3YWl0OworCisJLy8gaS9vIGluZm86IHBpcGVzIGV0YworCXVuc2lnbmVkCQlpbiwgb3V0OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqc3RhdHVzOworCXVuc2lnbmVkCQltYXhwYWNrZXQ7CisJc3RydWN0IHRpbWVyX2xpc3QJZGVsYXk7CisKKwkvLyBwcm90b2NvbC9pbnRlcmZhY2Ugc3RhdGUKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOworCWludAkJCW1zZ19lbmFibGU7CisJdW5zaWduZWQgbG9uZwkJZGF0YSBbNV07CisKKwlzdHJ1Y3QgbWlpX2lmX2luZm8JbWlpOworCisJLy8gdmFyaW91cyBraW5kcyBvZiBwZW5kaW5nIGRyaXZlciB3b3JrCisJc3RydWN0IHNrX2J1ZmZfaGVhZAlyeHE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAl0eHE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlkb25lOworCXN0cnVjdCB1cmIJCSppbnRlcnJ1cHQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWJoOworCisJc3RydWN0IHdvcmtfc3RydWN0CWtldmVudDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyMJCWRlZmluZSBFVkVOVF9UWF9IQUxUCTAKKyMJCWRlZmluZSBFVkVOVF9SWF9IQUxUCTEKKyMJCWRlZmluZSBFVkVOVF9SWF9NRU1PUlkJMgorIwkJZGVmaW5lIEVWRU5UX1NUU19TUExJVAkzCit9OworCisvLyBkZXZpY2Utc3BlY2lmaWMgaW5mbyB1c2VkIGJ5IHRoZSBkcml2ZXIKK3N0cnVjdCBkcml2ZXJfaW5mbyB7CisJY2hhcgkJKmRlc2NyaXB0aW9uOworCisJaW50CQlmbGFnczsKKy8qIGZyYW1pbmcgaXMgQ0RDIEV0aGVybmV0LCBub3Qgd3JpdGluZyBaTFBzIChodyBpc3N1ZXMpLCBvciBvcHRpb25hbGx5OiAqLworI2RlZmluZSBGTEFHX0ZSQU1JTkdfTkMJMHgwMDAxCQkvKiBndWFyZCBhZ2FpbnN0IGRldmljZSBkcm9wb3V0cyAqLyAKKyNkZWZpbmUgRkxBR19GUkFNSU5HX0dMCTB4MDAwMgkJLyogZ2VuZWxpbmsgYmF0Y2hlcyBwYWNrZXRzICovCisjZGVmaW5lIEZMQUdfRlJBTUlOR19aCTB4MDAwNAkJLyogemF1cnVzIGFkZHMgYSB0cmFpbGVyICovCisjZGVmaW5lIEZMQUdfRlJBTUlOR19STgkweDAwMDgJCS8qIFJORElTIGJhdGNoZXMsIHBsdXMgaHVnZSBoZWFkZXIgKi8KKworI2RlZmluZSBGTEFHX05PX1NFVElOVAkweDAwMTAJCS8qIGRldmljZSBjYW4ndCBzZXRfaW50ZXJmYWNlKCkgKi8KKyNkZWZpbmUgRkxBR19FVEhFUgkweDAwMjAJCS8qIG1heWJlIHVzZSAiZXRoJWQiIG5hbWVzICovCisKKyNkZWZpbmUgRkxBR19GUkFNSU5HX0FYIDB4MDA0MCAgICAgICAgICAvKiBBWDg4NzcyLzE3OCBwYWNrZXRzICovCisKKwkvKiBpbml0IGRldmljZSAuLi4gY2FuIHNsZWVwLCBvciBjYXVzZSBwcm9iZSgpIGZhaWx1cmUgKi8KKwlpbnQJKCpiaW5kKShzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOworCisJLyogY2xlYW51cCBkZXZpY2UgLi4uIGNhbiBzbGVlcCwgYnV0IGNhbid0IGZhaWwgKi8KKwl2b2lkCSgqdW5iaW5kKShzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOworCisJLyogcmVzZXQgZGV2aWNlIC4uLiBjYW4gc2xlZXAgKi8KKwlpbnQJKCpyZXNldCkoc3RydWN0IHVzYm5ldCAqKTsKKworCS8qIHNlZSBpZiBwZWVyIGlzIGNvbm5lY3RlZCAuLi4gY2FuIHNsZWVwICovCisJaW50CSgqY2hlY2tfY29ubmVjdCkoc3RydWN0IHVzYm5ldCAqKTsKKworCS8qIGZvciBzdGF0dXMgcG9sbGluZyAqLworCXZvaWQJKCpzdGF0dXMpKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVyYiAqKTsKKworCS8qIGZpeHVwIHJ4IHBhY2tldCAoc3RyaXAgZnJhbWluZykgKi8KKwlpbnQJKCpyeF9maXh1cCkoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCS8qIGZpeHVwIHR4IHBhY2tldCAoYWRkIGZyYW1pbmcpICovCisJc3RydWN0IHNrX2J1ZmYJKigqdHhfZml4dXApKHN0cnVjdCB1c2JuZXQgKmRldiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpOworCisJLy8gRklYTUUgLS0gYWxzbyBhbiBpbnRlcnJ1cHQgbWVjaGFuaXNtCisJLy8gdXNlZnVsIGZvciBhdCBsZWFzdCBQTDIzMDEvMjMwMiBhbmQgR0w2MjBVU0ItQQorCS8vIGFuZCBDREMgdXNlIHRoZW0gdG8gcmVwb3J0ICdpcyBpdCBjb25uZWN0ZWQnIGNoYW5nZXMKKworCS8qIGZvciBuZXcgZGV2aWNlcywgdXNlIHRoZSBkZXNjcmlwdG9yLXJlYWRpbmcgY29kZSBpbnN0ZWFkICovCisJaW50CQlpbjsJCS8qIHJ4IGVuZHBvaW50ICovCisJaW50CQlvdXQ7CQkvKiB0eCBlbmRwb2ludCAqLworCisJdW5zaWduZWQgbG9uZwlkYXRhOwkJLyogTWlzYyBkcml2ZXIgc3BlY2lmaWMgZGF0YSAqLworfTsKKworLy8gd2UgcmVjb3JkIHRoZSBzdGF0ZSBmb3IgZWFjaCBvZiBvdXIgcXVldWVkIHNrYnMKK2VudW0gc2tiX3N0YXRlIHsKKwlpbGxlZ2FsID0gMCwKKwl0eF9zdGFydCwgdHhfZG9uZSwKKwlyeF9zdGFydCwgcnhfZG9uZSwgcnhfY2xlYW51cAorfTsKKworc3RydWN0IHNrYl9kYXRhIHsJLy8gc2tiLT5jYiBpcyBvbmUgb2YgdGhlc2UKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCB1c2JuZXQJCSpkZXY7CisJZW51bSBza2Jfc3RhdGUJCXN0YXRlOworCXNpemVfdAkJCWxlbmd0aDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gInVzYm5ldCI7CisKKy8qIHVzZSBldGh0b29sIHRvIGNoYW5nZSB0aGUgbGV2ZWwgZm9yIGFueSBnaXZlbiBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgbXNnX2xldmVsID0gLTE7Cittb2R1bGVfcGFyYW0gKG1zZ19sZXZlbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKG1zZ19sZXZlbCwgIk92ZXJyaWRlIGRlZmF1bHQgbWVzc2FnZSBsZXZlbCIpOworCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBkZXZkYmcodXNibmV0LCBmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgIlxuIiAsICh1c2JuZXQpLT5uZXQtPm5hbWUgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkZXZkYmcodXNibmV0LCBmbXQsIGFyZy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIGRldmVycih1c2JuZXQsIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQgIlxuIiAsICh1c2JuZXQpLT5uZXQtPm5hbWUgLCAjIyBhcmcpCisjZGVmaW5lIGRldndhcm4odXNibmV0LCBmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZykKKworI2RlZmluZSBkZXZpbmZvKHVzYm5ldCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQgIlxuIiAsICh1c2JuZXQpLT5uZXQtPm5hbWUgLCAjIyBhcmcpOyBcCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVzYm5ldF9nZXRfZHJ2aW5mbyAoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqKTsKK3N0YXRpYyB1MzIgdXNibmV0X2dldF9saW5rIChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB1MzIgdXNibmV0X2dldF9tc2dsZXZlbCAoc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCB1c2JuZXRfc2V0X21zZ2xldmVsIChzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOworCisvKiBtb3N0bHkgZm9yIFBEQSBzdHlsZSBkZXZpY2VzLCB3aGljaCBhcmUgYWx3YXlzIGNvbm5lY3RlZCBpZiBwcmVzZW50ICovCitzdGF0aWMgaW50IGFsd2F5c19jb25uZWN0ZWQgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworLyogaGFuZGxlcyBDREMgRXRoZXJuZXQgYW5kIG1hbnkgb3RoZXIgbmV0d29yayAiYnVsayBkYXRhIiBpbnRlcmZhY2VzICovCitzdGF0aWMgaW50CitnZXRfZW5kcG9pbnRzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludAkJCQl0bXA7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZQkqYWx0ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSpzdGF0dXMgPSBOVUxMOworCisJZm9yICh0bXAgPSAwOyB0bXAgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgdG1wKyspIHsKKwkJdW5zaWduZWQJZXA7CisKKwkJaW4gPSBvdXQgPSBzdGF0dXMgPSBOVUxMOworCQlhbHQgPSBpbnRmLT5hbHRzZXR0aW5nICsgdG1wOworCisJCS8qIHRha2UgdGhlIGZpcnN0IGFsdHNldHRpbmcgd2l0aCBpbi1idWxrICsgb3V0LWJ1bGs7CisJCSAqIHJlbWVtYmVyIGFueSBzdGF0dXMgZW5kcG9pbnQsIGp1c3QgaW4gY2FzZTsKKwkJICogaWdub3JlIG90aGVyIGVuZHBvaW50cyBhbmQgYWx0c2V0dHRpbmdzLgorCQkgKi8KKwkJZm9yIChlcCA9IDA7IGVwIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGVwKyspIHsKKwkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZTsKKwkJCWludAkJCQlpbnRyID0gMDsKKworCQkJZSA9IGFsdC0+ZW5kcG9pbnQgKyBlcDsKKwkJCXN3aXRjaCAoZS0+ZGVzYy5ibUF0dHJpYnV0ZXMpIHsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJCWlmICghKGUtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKQorCQkJCQljb250aW51ZTsKKwkJCQlpbnRyID0gMTsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChlLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQkJaWYgKCFpbnRyICYmICFpbikKKwkJCQkJaW4gPSBlOworCQkJCWVsc2UgaWYgKGludHIgJiYgIXN0YXR1cykKKwkJCQkJc3RhdHVzID0gZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFvdXQpCisJCQkJCW91dCA9IGU7CisJCQl9CisJCX0KKwkJaWYgKGluICYmIG91dCkKKwkJCWJyZWFrOworCX0KKwlpZiAoIWFsdCB8fCAhaW4gfHwgIW91dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDAKKwkJCXx8ICEoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX05PX1NFVElOVCkpIHsKKwkJdG1wID0gdXNiX3NldF9pbnRlcmZhY2UgKGRldi0+dWRldiwgYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJaWYgKHRtcCA8IDApCisJCQlyZXR1cm4gdG1wOworCX0KKwkKKwlkZXYtPmluID0gdXNiX3JjdmJ1bGtwaXBlIChkZXYtPnVkZXYsCisJCQlpbi0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwlkZXYtPm91dCA9IHVzYl9zbmRidWxrcGlwZSAoZGV2LT51ZGV2LAorCQkJb3V0LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCWRldi0+c3RhdHVzID0gc3RhdHVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnRyX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIGludCBpbml0X3N0YXR1cyAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwljaGFyCQkqYnVmID0gTlVMTDsKKwl1bnNpZ25lZAlwaXBlID0gMDsKKwl1bnNpZ25lZAltYXhwOworCXVuc2lnbmVkCXBlcmlvZDsKKworCWlmICghZGV2LT5kcml2ZXJfaW5mby0+c3RhdHVzKQorCQlyZXR1cm4gMDsKKworCXBpcGUgPSB1c2JfcmN2aW50cGlwZSAoZGV2LT51ZGV2LAorCQkJZGV2LT5zdGF0dXMtPmRlc2MuYkVuZHBvaW50QWRkcmVzcworCQkJCSYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwltYXhwID0gdXNiX21heHBhY2tldCAoZGV2LT51ZGV2LCBwaXBlLCAwKTsKKworCS8qIGF2b2lkIDEgbXNlYyBjaGF0dGVyOiAgbWluIDggbXNlYyBwb2xsIHJhdGUgKi8KKwlwZXJpb2QgPSBtYXggKChpbnQpIGRldi0+c3RhdHVzLT5kZXNjLmJJbnRlcnZhbCwKKwkJKGRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gNyA6IDMpOworCisJYnVmID0ga21hbGxvYyAobWF4cCwgU0xBQl9LRVJORUwpOworCWlmIChidWYpIHsKKwkJZGV2LT5pbnRlcnJ1cHQgPSB1c2JfYWxsb2NfdXJiICgwLCBTTEFCX0tFUk5FTCk7CisJCWlmICghZGV2LT5pbnRlcnJ1cHQpIHsKKwkJCWtmcmVlIChidWYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0LCBkZXYtPnVkZXYsIHBpcGUsCisJCQkJYnVmLCBtYXhwLCBpbnRyX2NvbXBsZXRlLCBkZXYsIHBlcmlvZCk7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsCisJCQkJInN0YXR1cyBlcCVkaW4sICVkIGJ5dGVzIHBlcmlvZCAlZFxuIiwKKwkJCQl1c2JfcGlwZWVuZHBvaW50KHBpcGUpLCBtYXhwLCBwZXJpb2QpOworCQl9CisJfQorCXJldHVybiAgMDsKK30KKworc3RhdGljIHZvaWQgc2tiX3JldHVybiAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludAlzdGF0dXM7CisKKwlza2ItPmRldiA9IGRldi0+bmV0OworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyAoc2tiLCBkZXYtPm5ldCk7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKworCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzIChkZXYpKQorCQlkZXZkYmcgKGRldiwgIjwgcngsIGxlbiAlZCwgdHlwZSAweCV4IiwKKwkJCXNrYi0+bGVuICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSwgc2tiLT5wcm90b2NvbCk7CisJbWVtc2V0IChza2ItPmNiLCAwLCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOworCXN0YXR1cyA9IG5ldGlmX3J4IChza2IpOworCWlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MgJiYgbmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJZGV2ZGJnIChkZXYsICJuZXRpZl9yeCBzdGF0dXMgJWQiLCBzdGF0dXMpOworfQorCisMCisjaWZkZWYJQ09ORklHX1VTQl9BTElfTTU2MzIKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBBTGkgTTU2MzIgZHJpdmVyIC4uLiBkb2VzIGhpZ2ggc3BlZWQKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWFsaV9tNTYzMl9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJBTGkgTTU2MzIiLAorfTsKKworCisjZW5kaWYKKworDAorI2lmZGVmCUNPTkZJR19VU0JfQU4yNzIwCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQW5jaG9yQ2hpcHMgMjcyMCBkcml2ZXIgLi4uIGh0dHA6Ly93d3cuY3lwcmVzcy5jb20KKyAqCisgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgd2F5IHRvIGRldGVjdCB3aGV0aGVyIHRoZSBwZWVyIGlzCisgKiBjb25uZWN0ZWQsIG9yIG5lZWQgYW55IHJlc2V0IGhhbmRzaGFraW5nLiAgSXQncyBnb3QgcHJldHR5IGJpZworICogaW50ZXJuYWwgYnVmZmVycyAoaGFuZGxlcyBtb3N0IG9mIGEgZnJhbWUncyB3b3J0aCBvZiBkYXRhKS4KKyAqIENoaXAgZGF0YSBzaGVldHMgZG9uJ3QgZGVzY3JpYmUgYW55IHZlbmRvciBjb250cm9sIG1lc3NhZ2VzLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYW4yNzIwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkFuY2hvckNoaXBzL0N5cHJlc3MgMjcyMCIsCisJLy8gbm8gcmVzZXQgYXZhaWxhYmxlIQorCS8vIG5vIGNoZWNrX2Nvbm5lY3QgYXZhaWxhYmxlIQorCisJLmluID0gMiwgLm91dCA9IDIsCQkvLyBkaXJlY3Rpb24gZGlzdGluZ3Vpc2hlcyB0aGVzZQorfTsKKworI2VuZGlmCS8qIENPTkZJR19VU0JfQU4yNzIwICovCisKKwwKKyNpZmRlZiBDT05GSUdfVVNCX0FYODgxN1gKKy8qIEFTSVggQVg4ODE3WCBiYXNlZCBVU0IgMi4wIEV0aGVybmV0IERldmljZXMgKi8KKworI2RlZmluZSBIQVZFX0hBUkRXQVJFCisjZGVmaW5lIE5FRURfTUlJCisKKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjZGVmaW5lIEFYX0NNRF9TRVRfU1dfTUlJCQkweDA2CisjZGVmaW5lIEFYX0NNRF9SRUFEX01JSV9SRUcJCTB4MDcKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX01JSV9SRUcJCTB4MDgKKyNkZWZpbmUgQVhfQ01EX1NFVF9IV19NSUkJCTB4MGEKKyNkZWZpbmUgQVhfQ01EX1JFQURfRUVQUk9NCQkweDBiCisjZGVmaW5lIEFYX0NNRF9XUklURV9FRVBST00JCTB4MGMKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0VOQUJMRQkJMHgwZAorI2RlZmluZSBBWF9DTURfV1JJVEVfRElTQUJMRQkJMHgwZQorI2RlZmluZSBBWF9DTURfV1JJVEVfUlhfQ1RMCQkweDEwCisjZGVmaW5lIEFYX0NNRF9SRUFEX0lQRzAxMgkJMHgxMQorI2RlZmluZSBBWF9DTURfV1JJVEVfSVBHMAkJMHgxMgorI2RlZmluZSBBWF9DTURfV1JJVEVfSVBHMQkJMHgxMworI2RlZmluZSBBWF9DTURfV1JJVEVfSVBHMgkJMHgxNAorI2RlZmluZSBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSCTB4MTYKKyNkZWZpbmUgQVhfQ01EX1JFQURfTk9ERV9JRAkJMHgxNworI2RlZmluZSBBWF9DTURfUkVBRF9QSFlfSUQJCTB4MTkKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFCTB4MWIKKyNkZWZpbmUgQVhfQ01EX1JFQURfTU9OSVRPUl9NT0RFCTB4MWMKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX01PTklUT1JfTU9ERQkweDFkCisjZGVmaW5lIEFYX0NNRF9XUklURV9HUElPUwkJMHgxZgorI2RlZmluZSBBWF9DTURfU1dfUkVTRVQJCQkweDIwCisjZGVmaW5lIEFYX0NNRF9TV19QSFlfU1RBVFVTCQkweDIxCisjZGVmaW5lIEFYX0NNRF9TV19QSFlfU0VMRUNUCQkweDIyCisjZGVmaW5lIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRAkweDEzCisKKyNkZWZpbmUgQVhfTU9OSVRPUl9NT0RFCQkJMHgwMQorI2RlZmluZSBBWF9NT05JVE9SX0xJTksJCQkweDAyCisjZGVmaW5lIEFYX01PTklUT1JfTUFHSUMJCTB4MDQKKyNkZWZpbmUgQVhfTU9OSVRPUl9IU0ZTCQkJMHgxMAorCisjZGVmaW5lIEFYX01DQVNUX0ZJTFRFUl9TSVpFCQk4CisjZGVmaW5lIEFYX01BWF9NQ0FTVAkJCTY0CisKKyNkZWZpbmUgQVhfSU5URVJSVVBUX0JVRlNJWkUJCTgKKworI2RlZmluZSBBWF9FRVBST01fTEVOCQkJMHg0MAorCisjZGVmaW5lIEFYX1NXUkVTRVRfQ0xFQVIJCTB4MDAKKyNkZWZpbmUgQVhfU1dSRVNFVF9SUgkJCTB4MDEKKyNkZWZpbmUgQVhfU1dSRVNFVF9SVAkJCTB4MDIKKyNkZWZpbmUgQVhfU1dSRVNFVF9QUlRFCQkJMHgwNAorI2RlZmluZSBBWF9TV1JFU0VUX1BSTAkJCTB4MDgKKyNkZWZpbmUgQVhfU1dSRVNFVF9CWgkJCTB4MTAKKyNkZWZpbmUgQVhfU1dSRVNFVF9JUFJMCQkJMHgyMAorI2RlZmluZSBBWF9TV1JFU0VUX0lQUEQJCQkweDQwCisKKyNkZWZpbmUgQVg4ODc3Ml9JUEcwX0RFRkFVTFQJCTB4MTUKKyNkZWZpbmUgQVg4ODc3Ml9JUEcxX0RFRkFVTFQJCTB4MGMKKyNkZWZpbmUgQVg4ODc3Ml9JUEcyX0RFRkFVTFQJCTB4MTIKKworI2RlZmluZSBBWF9FRVBST01fTUFHSUMJCQkweGRlYWRiZWVmCisKKy8qIFRoaXMgc3RydWN0dXJlIGNhbm5vdCBleGNlZWQgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgWzVdKSBBS0EgMjAgYnl0ZXMgKi8KK3N0cnVjdCBheDg4MTd4X2RhdGEgeworCXU4IG11bHRpX2ZpbHRlcltBWF9NQ0FTVF9GSUxURVJfU0laRV07CisJc3RydWN0IHVyYiAqaW50X3VyYjsKKwl1OCAqaW50X2J1ZjsKK307CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCQkgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZygKKwkJZGV2LT51ZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJY21kLAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJdmFsdWUsCisJCWluZGV4LAorCQlkYXRhLAorCQlzaXplLAorCQlDT05UUk9MX1RJTUVPVVRfTVMpOworfQorCitzdGF0aWMgaW50IGF4ODgxN3hfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCSAgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZygKKwkJZGV2LT51ZGV2LAorCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJY21kLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCXZhbHVlLAorCQlpbmRleCwKKwkJZGF0YSwKKwkJc2l6ZSwKKwkJQ09OVFJPTF9USU1FT1VUX01TKTsKK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0RFQlVHICJheDg4MTd4X2FzeW5jX2NtZF9jYWxsYmFjaygpIGZhaWxlZCB3aXRoICVkIiwKKwkJCXVyYi0+c3RhdHVzKTsKKworCWtmcmVlKHJlcSk7CisJdXNiX2ZyZWVfdXJiKHVyYik7Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfaW50ZXJydXB0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gKHN0cnVjdCB1c2JuZXQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopJmRldi0+ZGF0YTsKKwlpbnQgbGluazsKKworCWlmICh1cmItPnN0YXR1cyA8IDApIHsKKwkJZGV2ZGJnKGRldiwiYXg4ODE3eF9pbnRlcnJ1cHRfY29tcGxldGUoKSBmYWlsZWQgd2l0aCAlZCIsCisJCQl1cmItPnN0YXR1cyk7CisJfSBlbHNlIHsKKwkJbGluayA9IGRhdGEtPmludF9idWZbMl0gJiAweDAxOworCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtPm5ldCkgIT0gbGluaykgeworCQkJaWYgKGxpbmspCisJCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CisJCQllbHNlCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOworCQkJZGV2ZGJnKGRldiwgImF4ODgxN3ggLSBMaW5rIFN0YXR1cyBpczogJWQiLCBsaW5rKTsKKwkJfQorCQl1c2Jfc3VibWl0X3VyYihkYXRhLT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCQkgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCWludCBzdGF0dXM7CisJc3RydWN0IHVyYiAqdXJiOworCisJaWYgKCh1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWRldmRiZyhkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHJlcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgeworCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbCByZXF1ZXN0Iik7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlyZXR1cm47CisJfQorCisJcmVxLT5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJcmVxLT5iUmVxdWVzdCA9IGNtZDsKKwlyZXEtPndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKKwlyZXEtPndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsgCisJcmVxLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYih1cmIsIGRldi0+dWRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICh2b2lkICopcmVxLCBkYXRhLCBzaXplLAorCQkJICAgICBheDg4MTd4X2FzeW5jX2NtZF9jYWxsYmFjaywgcmVxKTsKKworCWlmKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJZGV2ZXJyKGRldiwgIkVycm9yIHN1Ym1pdHRpbmcgdGhlIGNvbnRyb2wgbWVzc2FnZTogc3RhdHVzPSVkIiwgc3RhdHVzKTsKKwkJa2ZyZWUocmVxKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKSZkZXYtPmRhdGE7CisJdTggcnhfY3RsID0gMHg4YzsKKworCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJcnhfY3RsIHw9IDB4MDE7CisJfSBlbHNlIGlmIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJCisJCSAgIHx8IG5ldC0+bWNfY291bnQgPiBBWF9NQVhfTUNBU1QpIHsKKwkJcnhfY3RsIHw9IDB4MDI7CisJfSBlbHNlIGlmIChuZXQtPm1jX2NvdW50ID09IDApIHsKKwkJLyoganVzdCBicm9hZGNhc3QgYW5kIGRpcmVjdGVkICovCisJfSBlbHNlIHsKKwkJLyogV2UgdXNlIHRoZSAyMCBieXRlIGRldi0+ZGF0YQorCQkgKiBmb3Igb3VyIDggYnl0ZSBmaWx0ZXIgYnVmZmVyCisJCSAqIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IHRoYXQKKwkJICogaXMgdHJpY2t5IHRvIGZyZWUgbGF0ZXIgKi8KKwkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gbmV0LT5tY19saXN0OworCQl1MzIgY3JjX2JpdHM7CisJCWludCBpOworCisJCW1lbXNldChkYXRhLT5tdWx0aV9maWx0ZXIsIDAsIEFYX01DQVNUX0ZJTFRFUl9TSVpFKTsKKworCQkvKiBCdWlsZCB0aGUgbXVsdGljYXN0IGhhc2ggZmlsdGVyLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbmV0LT5tY19jb3VudDsgaSsrKSB7CisJCQljcmNfYml0cyA9CisJCQkgICAgZXRoZXJfY3JjKEVUSF9BTEVOLAorCQkJCSAgICAgIG1jX2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKwkJCWRhdGEtPm11bHRpX2ZpbHRlcltjcmNfYml0cyA+PiAzXSB8PQorCQkJICAgIDEgPDwgKGNyY19iaXRzICYgNyk7CisJCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKKwkJfQorCisJCWF4ODgxN3hfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX01VTFRJX0ZJTFRFUiwgMCwgMCwKKwkJCQkgICBBWF9NQ0FTVF9GSUxURVJfU0laRSwgZGF0YS0+bXVsdGlfZmlsdGVyKTsKKworCQlyeF9jdGwgfD0gMHgxMDsKKwl9CisKKwlheDg4MTd4X3dyaXRlX2NtZF9hc3luYyhkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsIHJ4X2N0bCwgMCwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiByZXM7CisJdTggYnVmWzFdOworCisJYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX1NXX01JSSwgMCwgMCwgMCwgJmJ1Zik7CisJYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01JSV9SRUcsIHBoeV9pZCwgKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOworCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9IV19NSUksIDAsIDAsIDAsICZidWYpOworCisJcmV0dXJuIHJlcyAmIDB4ZmZmZjsKK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MTYgcmVzID0gdmFsOworCXU4IGJ1ZlsxXTsKKworCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDAsIDAsIDAsICZidWYpOworCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01JSV9SRUcsIHBoeV9pZCwgKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOworCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9IV19NSUksIDAsIDAsIDAsICZidWYpOworfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXU4IG9wdDsKKworCWlmIChheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTU9OSVRPUl9NT0RFLCAwLCAwLCAxLCAmb3B0KSA8IDApIHsKKwkJd29saW5mby0+c3VwcG9ydGVkID0gMDsKKwkJd29saW5mby0+d29sb3B0cyA9IDA7CisJCXJldHVybjsKKwl9CisJd29saW5mby0+c3VwcG9ydGVkID0gV0FLRV9QSFkgfCBXQUtFX01BR0lDOworCXdvbGluZm8tPndvbG9wdHMgPSAwOworCWlmIChvcHQgJiBBWF9NT05JVE9SX01PREUpIHsKKwkJaWYgKG9wdCAmIEFYX01PTklUT1JfTElOSykKKwkJCXdvbGluZm8tPndvbG9wdHMgfD0gV0FLRV9QSFk7CisJCWlmIChvcHQgJiBBWF9NT05JVE9SX01BR0lDKQorCQkJd29saW5mby0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCX0KK30KKworc3RhdGljIGludCBheDg4MTd4X3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXU4IG9wdCA9IDA7CisJdTggYnVmWzFdOworCisJaWYgKHdvbGluZm8tPndvbG9wdHMgJiBXQUtFX1BIWSkKKwkJb3B0IHw9IEFYX01PTklUT1JfTElOSzsKKwlpZiAod29saW5mby0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCW9wdCB8PSBBWF9NT05JVE9SX01BR0lDOworCWlmIChvcHQgIT0gMCkKKwkJb3B0IHw9IEFYX01PTklUT1JfTU9ERTsKKworCWlmIChheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NT05JVE9SX01PREUsCisJCQkgICAgICBvcHQsIDAsIDAsICZidWYpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBheDg4MTd4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcmV0dXJuIEFYX0VFUFJPTV9MRU47Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1MTYgKmVidWYgPSAodTE2ICopZGF0YTsKKwlpbnQgaTsKKworCS8qIENydWRlIGhhY2sgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3Qgb3ZlcndyaXRlIG1lbW9yeQorCSAqIGlmIGFuIG9kZCBsZW5ndGggaXMgc3VwcGxpZWQKKwkgKi8KKwlpZiAoZWVwcm9tLT5sZW4gJSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVlcHJvbS0+bWFnaWMgPSBBWF9FRVBST01fTUFHSUM7CisKKwkvKiBheDg4MTd4IHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovCisJZm9yIChpPTA7IGkgPCBlZXByb20tPmxlbiAvIDI7IGkrKykgeworCQlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX0VFUFJPTSwgCisJCQllZXByb20tPm9mZnNldCArIGksIDAsIDIsICZlYnVmW2ldKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCisJCQkJIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJLyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqLworCXVzYm5ldF9nZXRfZHJ2aW5mbyhuZXQsIGluZm8pOworCWluZm8tPmVlZHVtcF9sZW4gPSAweDNlOworfQorCitzdGF0aWMgaW50IGF4ODgxN3hfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlyZXR1cm4gbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksY21kKTsKK30KKworc3RhdGljIGludCBheDg4MTd4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJcmV0dXJuIG1paV9ldGh0b29sX3NzZXQoJmRldi0+bWlpLGNtZCk7Cit9CisKKy8qIFdlIG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBldGh0b29sX29wcyBzbyB3ZSByZXF1aXJlIG91cgorICAgb3duIHN0cnVjdHVyZSBzbyB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciB1c2JuZXQKKyAgIGRldmljZXMgdGhhdCBtYXkgYmUgY29ubmVjdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxN3hfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGF4ODgxN3hfZ2V0X2RydmluZm8sCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKKwkuZ2V0X3dvbAkJPSBheDg4MTd4X2dldF93b2wsCisJLnNldF93b2wJCT0gYXg4ODE3eF9zZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbgkJPSBheDg4MTd4X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbSwKKwkuZ2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9zZXRfc2V0dGluZ3MsCit9OworCitzdGF0aWMgaW50IGF4ODgxN3hfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCByZXQgPSAwOworCXZvaWQgKmJ1ZjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGdwaW9fYml0cyA9IGRldi0+ZHJpdmVyX2luZm8tPmRhdGE7CisJc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopZGV2LT5kYXRhOworCisJZ2V0X2VuZHBvaW50cyhkZXYsaW50Zik7CisKKwlpZiAoKGRhdGEtPmludF91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlkYmcgKCIlczogY2Fubm90IGFsbG9jYXRlIGludGVycnVwdCBVUkIiLAorCQkJZGV2LT5uZXQtPm5hbWUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCQorCWlmICgoZGF0YS0+aW50X2J1ZiA9IGttYWxsb2MoQVhfSU5URVJSVVBUX0JVRlNJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWRiZyAoIiVzOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcnJ1cHQgYnVmZmVyIiwKKwkJCWRldi0+bmV0LT5uYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KKwltZW1zZXQoZGF0YS0+aW50X2J1ZiwgMCwgQVhfSU5URVJSVVBUX0JVRlNJWkUpOworCisJdXNiX2ZpbGxfaW50X3VyYiAoZGF0YS0+aW50X3VyYiwgZGV2LT51ZGV2LAorCQl1c2JfcmN2aW50cGlwZSAoZGV2LT51ZGV2LCAxKSwKKwkJZGF0YS0+aW50X2J1ZiwgQVhfSU5URVJSVVBUX0JVRlNJWkUsCisJCWF4ODgxN3hfaW50ZXJydXB0X2NvbXBsZXRlLCBkZXYsCisJCWRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyA4IDogMTAwKTsKKworCWJ1ZiA9IGttYWxsb2MoRVRIX0FMRU4sIEdGUF9LRVJORUwpOworCWlmKCFidWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQyOworCX0KKworCS8qIFRvZ2dsZSB0aGUgR1BJT3MgaW4gYSBtYW51ZmFjdHVyZXIvbW9kZWwgc3BlY2lmaWMgd2F5ICovCisJZm9yIChpID0gMjsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKKwkJCQkJKGdwaW9fYml0cyA+PiAoaSAqIDgpKSAmIDB4ZmYsIDAsIDAsCisJCQkJCWJ1ZikpIDwgMCkKKwkJCWdvdG8gb3V0MzsKKwkJbXNsZWVwKDUpOworCX0KKworCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCAweDgwLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJzZW5kIEFYX0NNRF9XUklURV9SWF9DVEwgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOworCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX05PREVfSUQsIDAsIDAsIDYsIGJ1ZikpIDwgMCkgeworCQlkYmcoInJlYWQgQVhfQ01EX1JFQURfTk9ERV9JRCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKwltZW1jcHkoZGV2LT5uZXQtPmRldl9hZGRyLCBidWYsIEVUSF9BTEVOKTsKKworCS8qIEdldCB0aGUgUEhZIGlkICovCisJaWYgKChyZXQgPSBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUEhZX0lELCAwLCAwLCAyLCBidWYpKSA8IDApIHsKKwkJZGJnKCJlcnJvciBvbiByZWFkIEFYX0NNRF9SRUFEX1BIWV9JRDogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9IGVsc2UgaWYgKHJldCA8IDIpIHsKKwkJLyogdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAyIGJ5dGVzICovCisJCWRiZygiQVhfQ01EX1JFQURfUEhZX0lEIHJldHVybmVkIGxlc3MgdGhhbiAyIGJ5dGVzOiByZXQ9JTAyeCIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0MzsKKwl9CisKKwkvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi8KKwlkZXYtPm1paS5kZXYgPSBkZXYtPm5ldDsKKwlkZXYtPm1paS5tZGlvX3JlYWQgPSBheDg4MTd4X21kaW9fcmVhZDsKKwlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXg4ODE3eF9tZGlvX3dyaXRlOworCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHgzZjsKKwlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOworCWRldi0+bWlpLnBoeV9pZCA9ICooKHU4ICopYnVmICsgMSk7CisKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXg4ODE3eF9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4MTd4X2V0aHRvb2xfb3BzOworCisJYXg4ODE3eF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLAorCQkJY3B1X3RvX2xlMTYoQk1DUl9SRVNFVCkpOworCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAorCQkJY3B1X3RvX2xlMTYoQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BIHwgMHgwNDAwKSk7CisJbWlpX253YXlfcmVzdGFydCgmZGV2LT5taWkpOworCisJaWYoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGRhdGEtPmludF91cmIsIEdGUF9LRVJORUwpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gc3VibWl0IGludGVycnVwdCBVUkI6ICUwMngiLCByZXQpOworCQlnb3RvIG91dDI7CisJfQorCisJcmV0dXJuIDA7CitvdXQzOgorCWtmcmVlKGJ1Zik7CitvdXQyOgorCWtmcmVlKGRhdGEtPmludF9idWYpOworb3V0MToKKwl1c2JfZnJlZV91cmIoZGF0YS0+aW50X3VyYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYXg4ODE3eF9kYXRhICpkYXRhID0gKHN0cnVjdCBheDg4MTd4X2RhdGEgKilkZXYtPmRhdGE7CisKKwl1c2Jfa2lsbF91cmIoZGF0YS0+aW50X3VyYik7CisJdXNiX2ZyZWVfdXJiKGRhdGEtPmludF91cmIpOworCWtmcmVlKGRhdGEtPmludF9idWYpOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODg3NzJfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGF4ODgxN3hfZ2V0X2RydmluZm8sCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKKwkuZ2V0X3dvbAkJPSBheDg4MTd4X2dldF93b2wsCisJLnNldF93b2wJCT0gYXg4ODE3eF9zZXRfd29sLAorCS5nZXRfZWVwcm9tX2xlbgkJPSBheDg4MTd4X2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tCQk9IGF4ODgxN3hfZ2V0X2VlcHJvbSwKKwkuZ2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gYXg4ODE3eF9zZXRfc2V0dGluZ3MsCit9OworCitzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCByZXQ7CisJdm9pZCAqYnVmOworCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKWRldi0+ZGF0YTsKKworCWdldF9lbmRwb2ludHMoZGV2LGludGYpOworCisJaWYgKChkYXRhLT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpID09IDApIHsKKwkJZGJnICgiQ2Fubm90IGFsbG9jYXRlIGludGVycnVwdCBVUkIiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KKwkKKwlpZiAoKGRhdGEtPmludF9idWYgPSBrbWFsbG9jKEFYX0lOVEVSUlVQVF9CVUZTSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlkYmcgKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcnJ1cHQgYnVmZmVyIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MTsKKwl9CisJbWVtc2V0KGRhdGEtPmludF9idWYsIDAsIEFYX0lOVEVSUlVQVF9CVUZTSVpFKTsKKworCXVzYl9maWxsX2ludF91cmIgKGRhdGEtPmludF91cmIsIGRldi0+dWRldiwKKwkJdXNiX3JjdmludHBpcGUgKGRldi0+dWRldiwgMSksCisJCWRhdGEtPmludF9idWYsIEFYX0lOVEVSUlVQVF9CVUZTSVpFLAorCQlheDg4MTd4X2ludGVycnVwdF9jb21wbGV0ZSwgZGV2LAorCQlkZXYtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIID8gOCA6IDEwMCk7CisKKwlidWYgPSBrbWFsbG9jKDYsIEdGUF9LRVJORUwpOworCWlmKCFidWYpIHsKKwkJZGJnICgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLAorCQkJCSAgICAgMHgwMEIwLCAwLCAwLCBidWYpKSA8IDApCisJCWdvdG8gb3V0MzsKKworCW1zbGVlcCg1KTsKKwlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1BIWV9TRUxFQ1QsIDB4MDAwMSwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiU2VsZWN0IFBIWSAjMSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0lQUEQsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byBwb3dlciBkb3duIGludGVybmFsIFBIWTogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJbXNsZWVwKDE1MCk7CisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfQ0xFQVIsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byBwZXJmb3JtIHNvZnR3YXJlIHJlc2V0OiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwltc2xlZXAoMTUwKTsKKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byBzZXQgSW50ZXJuYWwvRXh0ZXJuYWwgUEhZIHJlc2V0IGNvbnRyb2w6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCW1zbGVlcCgxNTApOworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgMHgwMDAwLCAwLCAwLAorCQkJICAgICAgIGJ1ZikpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byByZXNldCBSWF9DVEw6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KKwltZW1zZXQoYnVmLCAwLCBFVEhfQUxFTik7CisJaWYgKChyZXQgPSBheDg4MTd4X3JlYWRfY21kKGRldiwgQVg4ODc3Ml9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKwltZW1jcHkoZGV2LT5uZXQtPmRldl9hZGRyLCBidWYsIEVUSF9BTEVOKTsKKworCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX1NXX01JSSwgMCwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiRW5hYmxpbmcgc29mdHdhcmUgTUlJIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJaWYgKCgocmV0ID0KKwkgICAgICBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTUlJX1JFRywgMHgwMDEwLCAyLCAyLCBidWYpKSA8IDApCisJICAgIHx8ICgqKCh1MTYgKilidWYpICE9IDB4MDAzYikpIHsKKwkJZGJnKCJSZWFkIFBIWSByZWdpc3RlciAyIG11c3QgYmUgMHgzYjAwOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwkvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi8KKwlkZXYtPm1paS5kZXYgPSBkZXYtPm5ldDsKKwlkZXYtPm1paS5tZGlvX3JlYWQgPSBheDg4MTd4X21kaW9fcmVhZDsKKwlkZXYtPm1paS5tZGlvX3dyaXRlID0gYXg4ODE3eF9tZGlvX3dyaXRlOworCWRldi0+bWlpLnBoeV9pZF9tYXNrID0gMHhmZjsKKwlkZXYtPm1paS5yZWdfbnVtX21hc2sgPSAweGZmOworCisJLyogR2V0IHRoZSBQSFkgaWQgKi8KKwlpZiAoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9QSFlfSUQsIDAsIDAsIDIsIGJ1ZikpIDwgMCkgeworCQlkYmcoIkVycm9yIHJlYWRpbmcgUEhZIElEOiAlMDJ4IiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0gZWxzZSBpZiAocmV0IDwgMikgeworCQkvKiB0aGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIDIgYnl0ZXMgKi8KKwkJZGJnKCJBWF9DTURfUkVBRF9QSFlfSUQgcmV0dXJuZWQgbGVzcyB0aGFuIDIgYnl0ZXM6IHJldD0lMDJ4IiwKKwkJICAgIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0MzsKKwl9CisJZGV2LT5taWkucGh5X2lkID0gKigodTggKilidWYgKyAxKTsKKworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX1BSTCwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiU2V0IGV4dGVybmFsIFBIWSByZXNldCBwaW4gbGV2ZWw6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKwltc2xlZXAoMTUwKTsKKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIlNldCBJbnRlcm5hbC9FeHRlcm5hbCBQSFkgcmVzZXQgY29udHJvbDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCW1zbGVlcCgxNTApOworCisKKwlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXg4ODE3eF9zZXRfbXVsdGljYXN0OworCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOworCisJYXg4ODE3eF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLAorCQkJY3B1X3RvX2xlMTYoQk1DUl9SRVNFVCkpOworCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAorCQkJY3B1X3RvX2xlMTYoQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKSk7CisJbWlpX253YXlfcmVzdGFydCgmZGV2LT5taWkpOworCisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERSwgMHgwMzM2LCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJXcml0ZSBtZWRpdW0gbW9kZSByZWdpc3RlcjogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9JUEcwLCBBWDg4NzcyX0lQRzBfREVGQVVMVCB8IEFYODg3NzJfSVBHMV9ERUZBVUxULEFYODg3NzJfSVBHMl9ERUZBVUxULCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJXcml0ZSBJUEcsSVBHMSxJUEcyIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9IV19NSUksIDAsIDAsIDAsICZidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gc2V0IGhhcmR3YXJlIE1JSTogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwkvKiBTZXQgUlhfQ1RMIHRvIGRlZmF1bHQgdmFsdWVzIHdpdGggMmsgYnVmZmVyLCBhbmQgZW5hYmxlIGNhY3R1cyAqLworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgMHgwMDg4LCAwLCAwLAorCQkJICAgICAgIGJ1ZikpIDwgMCkgeworCQlkYmcoIlJlc2V0IFJYX0NUTCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCWlmKChyZXQgPSB1c2Jfc3VibWl0X3VyYihkYXRhLT5pbnRfdXJiLCBHRlBfS0VSTkVMKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlMDJ4IiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gMDsKKworb3V0MzoKKwlrZnJlZShidWYpOworb3V0MjoKKwlrZnJlZShkYXRhLT5pbnRfYnVmKTsKK291dDE6CisJdXNiX2ZyZWVfdXJiKGRhdGEtPmludF91cmIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBheDg4NzcyX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1MzIgKmhlYWRlcjsKKwljaGFyICpwYWNrZXQ7CisJc3RydWN0IHNrX2J1ZmYgKmF4X3NrYjsKKwl1MTYgc2l6ZTsKKworCWhlYWRlciA9ICh1MzIgKikgc2tiLT5kYXRhOworCWxlMzJfdG9fY3B1cyhoZWFkZXIpOworCXBhY2tldCA9IChjaGFyICopKGhlYWRlciArIDEpOworCisJc2tiX3B1bGwoc2tiLCA0KTsKKworCXdoaWxlIChza2ItPmxlbiA+IDApIHsKKwkJaWYgKChzaG9ydCkoKmhlYWRlciAmIDB4MDAwMGZmZmYpICE9CisJCSAgICB+KChzaG9ydCkoKCpoZWFkZXIgJiAweGZmZmYwMDAwKSA+PiAxNikpKSB7CisJCQlkZXZkYmcoZGV2LCJoZWFkZXIgbGVuZ3RoIGRhdGEgaXMgZXJyb3IiKTsKKwkJfQorCQkvKiBnZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KKwkJc2l6ZSA9ICh1MTYpICgqaGVhZGVyICYgMHgwMDAwZmZmZik7CisKKwkJaWYgKChza2ItPmxlbikgLSAoKHNpemUgKyAxKSAmIDB4ZmZmZSkgPT0gMCkKKwkJCXJldHVybiAyOworCQlpZiAoc2l6ZSA+IEVUSF9GUkFNRV9MRU4pIHsKKwkJCWRldmRiZyhkZXYsImludmFsaWQgcnggbGVuZ3RoICVkIiwgc2l6ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlheF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGF4X3NrYikgeworCQkJYXhfc2tiLT5sZW4gPSBzaXplOworCQkJYXhfc2tiLT5kYXRhID0gcGFja2V0OworCQkJYXhfc2tiLT50YWlsID0gcGFja2V0ICsgc2l6ZTsKKwkJCXNrYl9yZXR1cm4oZGV2LCBheF9za2IpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlza2JfcHVsbChza2IsIChzaXplICsgMSkgJiAweGZmZmUpOworCisJCWlmIChza2ItPmxlbiA9PSAwKQorCQkJYnJlYWs7CisKKwkJaGVhZGVyID0gKHUzMiAqKSBza2ItPmRhdGE7CisJCWxlMzJfdG9fY3B1cyhoZWFkZXIpOworCQlwYWNrZXQgPSAoY2hhciAqKShoZWFkZXIgKyAxKTsKKwkJc2tiX3B1bGwoc2tiLCA0KTsKKwl9CisKKwlpZiAoc2tiLT5sZW4gPCAwKSB7CisJCWRldmRiZyhkZXYsImludmFsaWQgcnggbGVuZ3RoICVkIiwgc2tiLT5sZW4pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXg4ODc3Ml90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCWludCBmbGFncykKK3sKKwlpbnQgcGFkbGVuOworCWludCBoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOworCWludCB0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOworCXUzMiAqcGFja2V0X2xlbjsKKwl1MzIgKnBhZGJ5dGVzX3B0cjsKKworCXBhZGxlbiA9ICgoc2tiLT5sZW4gKyA0KSAlIDUxMikgPyAwIDogNDsKKworCWlmICgoIXNrYl9jbG9uZWQoc2tiKSkKKwkgICAgJiYgKChoZWFkcm9vbSArIHRhaWxyb29tKSA+PSAoNCArIHBhZGxlbikpKSB7CisJCWlmICgoaGVhZHJvb20gPCA0KSB8fCAodGFpbHJvb20gPCBwYWRsZW4pKSB7CisJCQlza2ItPmRhdGEgPSBtZW1tb3ZlKHNrYi0+aGVhZCArIDQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJc2tiLT50YWlsID0gc2tiLT5kYXRhICsgc2tiLT5sZW47CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKwkJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDQsIHBhZGxlbiwgZmxhZ3MpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlza2IgPSBza2IyOworCQlpZiAoIXNrYikKKwkJCXJldHVybiBOVUxMOworCX0KKworCXBhY2tldF9sZW4gPSAodTMyICopIHNrYl9wdXNoKHNrYiwgNCk7CisKKwlwYWNrZXRfbGVuID0gKHUzMiAqKSBza2ItPmRhdGE7CisJKnBhY2tldF9sZW4gPSAoKChza2ItPmxlbiAtIDQpIF4gMHgwMDAwZmZmZikgPDwgMTYpICsgKHNrYi0+bGVuIC0gNCk7CisKKwlpZiAoKHNrYi0+bGVuICUgNTEyKSA9PSAwKSB7CisJCXBhZGJ5dGVzX3B0ciA9ICh1MzIgKikgc2tiLT50YWlsOworCQkqcGFkYnl0ZXNfcHRyID0gMHhmZmZmMDAwMDsKKwkJc2tiX3B1dChza2IsIHBhZGxlbik7CisJfQorCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3eF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICJBU0lYIEFYODgxN3ggVVNCIDIuMCBFdGhlcm5ldCIsCisJLmJpbmQgPSBheDg4MTd4X2JpbmQsCisJLnVuYmluZCA9IGF4ODgxN3hfdW5iaW5kLAorCS5mbGFncyA9ICBGTEFHX0VUSEVSLAorCS5kYXRhID0gMHgwMDEzMDEwMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gZGxpbmtfZHViX2UxMDBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPSAiRExpbmsgRFVCLUUxMDAgVVNCIEV0aGVybmV0IiwKKwkuYmluZCA9IGF4ODgxN3hfYmluZCwKKwkudW5iaW5kID0gYXg4ODE3eF91bmJpbmQsCisJLmZsYWdzID0gIEZMQUdfRVRIRVIsCisJLmRhdGEgPSAweDAwOWY5ZDlmLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBuZXRnZWFyX2ZhMTIwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIk5ldGdlYXIgRkEtMTIwIFVTQiBFdGhlcm5ldCIsCisJLmJpbmQgPSBheDg4MTd4X2JpbmQsCisJLnVuYmluZCA9IGF4ODgxN3hfdW5iaW5kLAorCS5mbGFncyA9ICBGTEFHX0VUSEVSLAorCS5kYXRhID0gMHgwMDEzMDEwMywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gaGF3a2luZ191ZjIwMF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICJIYXdraW5nIFVGMjAwIFVTQiBFdGhlcm5ldCIsCisJLmJpbmQgPSBheDg4MTd4X2JpbmQsCisJLnVuYmluZCA9IGF4ODgxN3hfdW5iaW5kLAorCS5mbGFncyA9ICBGTEFHX0VUSEVSLAorCS5kYXRhID0gMHgwMDFmMWQxZiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3Ml9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICJBU0lYIEFYODg3NzIgVVNCIDIuMCBFdGhlcm5ldCIsCisJLmJpbmQgPSBheDg4NzcyX2JpbmQsCisJLnVuYmluZCA9IGF4ODgxN3hfdW5iaW5kLAorCS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVgsCisJLnJ4X2ZpeHVwID0gYXg4ODc3Ml9yeF9maXh1cCwKKwkudHhfZml4dXAgPSBheDg4NzcyX3R4X2ZpeHVwLAorCS5kYXRhID0gMHgwMDEzMDEwMywKK307CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0FYODgxN1ggKi8KKworCisMCisjaWZkZWYJQ09ORklHX1VTQl9CRUxLSU4KKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCZWxraW4gRjVVMTA0IC4uLiB0d28gTmV0Q2hpcCAyMjgwIGRldmljZXMgKyBBdG1lbCBtaWNyb2NvbnRyb2xsZXIKKyAqCisgKiAuLi4gYWxzbyB0d28gZVRFSyBkZXNpZ25zLCBpbmNsdWRpbmcgb25lIHNvbGQgYXMgIkFkdmFuY2UgVVNCTkVUIgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYmVsa2luX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkJlbGtpbiwgZVRFSywgb3IgY29tcGF0aWJsZSIsCit9OworCisjZW5kaWYJLyogQ09ORklHX1VTQl9CRUxLSU4gKi8KKworCisMCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDb21tdW5pY2F0aW9ucyBEZXZpY2UgQ2xhc3MgZGVjbGFyYXRpb25zLgorICogVXNlZCBieSBDREMgRXRoZXJuZXQsIGFuZCBzb21lIENEQyB2YXJpYW50cworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfVVNCX0NEQ0VUSEVSCisjZGVmaW5lIE5FRURfR0VORVJJQ19DREMKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9aQVVSVVMKKy8qIEV0aGVybmV0IHZhcmlhbnQgdXNlcyBmdW5reSBmcmFtaW5nLCBicm9rZW4gZXRoZXJuZXQgYWRkcmVzc2luZyAqLworI2RlZmluZSBORUVEX0dFTkVSSUNfQ0RDCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfUk5ESVMKKy8qIEFDTSB2YXJpYW50IHVzZXMgZXZlbiBmdW5raWVyIGZyYW1pbmcsIGNvbXBsZXggY29udHJvbCBSUEMgc2NoZW1lICovCisjZGVmaW5lIE5FRURfR0VORVJJQ19DREMKKyNlbmRpZgorCisKKyNpZmRlZglORUVEX0dFTkVSSUNfQ0RDCisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2RjLmg+CisKK3N0cnVjdCBjZGNfc3RhdGUgeworCXN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjCSpoZWFkZXI7CisJc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYwkqdTsKKwlzdHJ1Y3QgdXNiX2NkY19ldGhlcl9kZXNjCSpldGhlcjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmNvbnRyb2w7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSpkYXRhOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYm5ldF9kcml2ZXI7CisKKy8qCisgKiBwcm9iZXMgY29udHJvbCBpbnRlcmZhY2UsIGNsYWltcyBkYXRhIGludGVyZmFjZSwgY29sbGVjdHMgdGhlIGJ1bGsKKyAqIGVuZHBvaW50cywgYWN0aXZhdGVzIGRhdGEgaW50ZXJmYWNlIChpZiBuZWVkZWQpLCBtYXliZSBzZXRzIE1UVS4KKyAqIGFsbCBwdXJlIGNkYywgZXhjZXB0IGZvciBjZXJ0YWluIGZpcm13YXJlIHdvcmthcm91bmRzLgorICovCitzdGF0aWMgaW50IGdlbmVyaWNfY2RjX2JpbmQgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJdTgJCQkJKmJ1ZiA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5leHRyYTsKKwlpbnQJCQkJbGVuID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmV4dHJhbGVuOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmQ7CisJc3RydWN0IGNkY19zdGF0ZQkJKmluZm8gPSAodm9pZCAqKSAmZGV2LT5kYXRhOworCWludAkJCQlzdGF0dXM7CisJaW50CQkJCXJuZGlzOworCisJaWYgKHNpemVvZiBkZXYtPmRhdGEgPCBzaXplb2YgKmluZm8pCisJCXJldHVybiAtRURPTTsKKworCS8qIGV4cGVjdCBzdHJpY3Qgc3BlYyBjb25mb3JtYW5jZSBmb3IgdGhlIGRlc2NyaXB0b3JzLCBidXQKKwkgKiBjb3BlIHdpdGggZmlybXdhcmUgd2hpY2ggc3RvcmVzIHRoZW0gaW4gdGhlIHdyb25nIHBsYWNlCisJICovCisJaWYgKGxlbiA9PSAwICYmIGRldi0+dWRldi0+YWN0Y29uZmlnLT5leHRyYWxlbikgeworCQkvKiBNb3Rvcm9sYSBTQjQxMDAgKGFuZCBvdGhlcnM6IEJyYWQgSGFyZHMgc2F5cyBpdCdzCisJCSAqIGZyb20gYSBCcm9hZGNvbSBkZXNpZ24pIHB1dCBDREMgZGVzY3JpcHRvcnMgaGVyZQorCQkgKi8KKwkJYnVmID0gZGV2LT51ZGV2LT5hY3Rjb25maWctPmV4dHJhOworCQlsZW4gPSBkZXYtPnVkZXYtPmFjdGNvbmZpZy0+ZXh0cmFsZW47CisJCWlmIChsZW4pCisJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCSJDREMgZGVzY3JpcHRvcnMgb24gY29uZmlnXG4iKTsKKwl9CisKKwkvKiB0aGlzIGFzc3VtZXMgdGhhdCBpZiB0aGVyZSdzIGEgbm9uLVJORElTIHZlbmRvciB2YXJpYW50CisJICogb2YgY2RjLWFjbSwgaXQnbGwgZmFpbCBSTkRJUyByZXF1ZXN0cyBjbGVhbmx5LgorCSAqLworCXJuZGlzID0gKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSAweGZmKTsKKworCW1lbXNldCAoaW5mbywgMCwgc2l6ZW9mICppbmZvKTsKKwlpbmZvLT5jb250cm9sID0gaW50ZjsKKwl3aGlsZSAobGVuID4gMykgeworCQlpZiAoYnVmIFsxXSAhPSBVU0JfRFRfQ1NfSU5URVJGQUNFKQorCQkJZ290byBuZXh0X2Rlc2M7CisKKwkJLyogdXNlIGJEZXNjcmlwdG9yU3ViVHlwZSB0byBpZGVudGlmeSB0aGUgQ0RDIGRlc2NyaXB0b3JzLgorCQkgKiBXZSBleHBlY3QgZGV2aWNlcyB3aXRoIENEQyBoZWFkZXIgYW5kIHVuaW9uIGRlc2NyaXB0b3JzLgorCQkgKiBGb3IgQ0RDIEV0aGVybmV0IHdlIG5lZWQgdGhlIGV0aGVybmV0IGRlc2NyaXB0b3IuCisJCSAqIEZvciBSTkRJUywgaWdub3JlIHR3byAocG9pbnRsZXNzKSBDREMgbW9kZW0gZGVzY3JpcHRvcnMKKwkJICogaW4gZmF2b3Igb2YgYSBjb21wbGljYXRlZCBPSUQtYmFzZWQgUlBDIHNjaGVtZSBkb2luZyB3aGF0CisJCSAqIENEQyBFdGhlcm5ldCBhY2hpZXZlcyB3aXRoIGEgc2ltcGxlIGRlc2NyaXB0b3IuCisJCSAqLworCQlzd2l0Y2ggKGJ1ZiBbMl0pIHsKKwkJY2FzZSBVU0JfQ0RDX0hFQURFUl9UWVBFOgorCQkJaWYgKGluZm8tPmhlYWRlcikgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJleHRyYSBDREMgaGVhZGVyXG4iKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJaW5mby0+aGVhZGVyID0gKHZvaWQgKikgYnVmOworCQkJaWYgKGluZm8tPmhlYWRlci0+Ykxlbmd0aCAhPSBzaXplb2YgKmluZm8tPmhlYWRlcikgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJDREMgaGVhZGVyIGxlbiAldVxuIiwKKwkJCQkJaW5mby0+aGVhZGVyLT5iTGVuZ3RoKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0NEQ19VTklPTl9UWVBFOgorCQkJaWYgKGluZm8tPnUpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiZXh0cmEgQ0RDIHVuaW9uXG4iKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJaW5mby0+dSA9ICh2b2lkICopIGJ1ZjsKKwkJCWlmIChpbmZvLT51LT5iTGVuZ3RoICE9IHNpemVvZiAqaW5mby0+dSkgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJDREMgdW5pb24gbGVuICV1XG4iLAorCQkJCQlpbmZvLT51LT5iTGVuZ3RoKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCisJCQkvKiB3ZSBuZWVkIGEgbWFzdGVyL2NvbnRyb2wgaW50ZXJmYWNlICh3aGF0IHdlJ3JlCisJCQkgKiBwcm9iZWQgd2l0aCkgYW5kIGEgc2xhdmUvZGF0YSBpbnRlcmZhY2U7IHVuaW9uCisJCQkgKiBkZXNjcmlwdG9ycyBzb3J0IHRoaXMgYWxsIG91dC4KKwkJCSAqLworCQkJaW5mby0+Y29udHJvbCA9IHVzYl9pZm51bV90b19pZihkZXYtPnVkZXYsCisJCQkJCQlpbmZvLT51LT5iTWFzdGVySW50ZXJmYWNlMCk7CisJCQlpbmZvLT5kYXRhID0gdXNiX2lmbnVtX3RvX2lmKGRldi0+dWRldiwKKwkJCQkJCWluZm8tPnUtPmJTbGF2ZUludGVyZmFjZTApOworCQkJaWYgKCFpbmZvLT5jb250cm9sIHx8ICFpbmZvLT5kYXRhKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkJIm1hc3RlciAjJXUvJXAgc2xhdmUgIyV1LyVwXG4iLAorCQkJCQlpbmZvLT51LT5iTWFzdGVySW50ZXJmYWNlMCwKKwkJCQkJaW5mby0+Y29udHJvbCwKKwkJCQkJaW5mby0+dS0+YlNsYXZlSW50ZXJmYWNlMCwKKwkJCQkJaW5mby0+ZGF0YSk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWlmIChpbmZvLT5jb250cm9sICE9IGludGYpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiYm9ndXMgQ0RDIFVuaW9uXG4iKTsKKwkJCQkvKiBBbWJpdCBVU0IgQ2FibGUgTW9kZW0gKGFuZCBtYXliZSBvdGhlcnMpCisJCQkJICogaW50ZXJjaGFuZ2VzIG1hc3RlciBhbmQgc2xhdmUgaW50ZXJmYWNlLgorCQkJCSAqLworCQkJCWlmIChpbmZvLT5kYXRhID09IGludGYpIHsKKwkJCQkJaW5mby0+ZGF0YSA9IGluZm8tPmNvbnRyb2w7CisJCQkJCWluZm8tPmNvbnRyb2wgPSBpbnRmOworCQkJCX0gZWxzZQorCQkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCisJCQkvKiBhIGRhdGEgaW50ZXJmYWNlIGFsdHNldHRpbmcgZG9lcyB0aGUgcmVhbCBpL28gKi8KKwkJCWQgPSAmaW5mby0+ZGF0YS0+Y3VyX2FsdHNldHRpbmctPmRlc2M7CisJCQlpZiAoZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19DRENfREFUQSkgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJzbGF2ZSBjbGFzcyAldVxuIiwKKwkJCQkJZC0+YkludGVyZmFjZUNsYXNzKTsKKwkJCQlnb3RvIGJhZF9kZXNjOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0NEQ19FVEhFUk5FVF9UWVBFOgorCQkJaWYgKGluZm8tPmV0aGVyKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImV4dHJhIENEQyBldGhlclxuIik7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWluZm8tPmV0aGVyID0gKHZvaWQgKikgYnVmOworCQkJaWYgKGluZm8tPmV0aGVyLT5iTGVuZ3RoICE9IHNpemVvZiAqaW5mby0+ZXRoZXIpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiQ0RDIGV0aGVyIGxlbiAldVxuIiwKKwkJCQkJaW5mby0+dS0+Ykxlbmd0aCk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWRldi0+bmV0LT5tdHUgPSBsZTE2X3RvX2NwdXAgKAorCQkJCQkJJmluZm8tPmV0aGVyLT53TWF4U2VnbWVudFNpemUpCisJCQkJCS0gRVRIX0hMRU47CisJCQkvKiBiZWNhdXNlIG9mIFphdXJ1cywgd2UgbWF5IGJlIGlnbm9yaW5nIHRoZSBob3N0CisJCQkgKiBzaWRlIGxpbmsgYWRkcmVzcyB3ZSB3ZXJlIGdpdmVuLgorCQkJICovCisJCQlicmVhazsKKwkJfQorbmV4dF9kZXNjOgorCQlsZW4gLT0gYnVmIFswXTsJLyogYkxlbmd0aCAqLworCQlidWYgKz0gYnVmIFswXTsKKwl9CisKKwlpZiAoIWluZm8tPmhlYWRlciB8fCAhaW5mby0+dSB8fCAoIXJuZGlzICYmICFpbmZvLT5ldGhlcikpIHsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIm1pc3NpbmcgY2RjICVzJXMlc2Rlc2NyaXB0b3JcbiIsCisJCQlpbmZvLT5oZWFkZXIgPyAiIiA6ICJoZWFkZXIgIiwKKwkJCWluZm8tPnUgPyAiIiA6ICJ1bmlvbiAiLAorCQkJaW5mby0+ZXRoZXIgPyAiIiA6ICJldGhlciAiKTsKKwkJZ290byBiYWRfZGVzYzsKKwl9CisKKwkvKiBjbGFpbSBkYXRhIGludGVyZmFjZSBhbmQgc2V0IGl0IHVwIC4uLiB3aXRoIHNpZGUgZWZmZWN0cy4KKwkgKiBuZXR3b3JrIHRyYWZmaWMgY2FuJ3QgZmxvdyB1bnRpbCBhbiBhbHRzZXR0aW5nIGlzIGVuYWJsZWQuCisJICovCisJc3RhdHVzID0gdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UgKCZ1c2JuZXRfZHJpdmVyLCBpbmZvLT5kYXRhLCBkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IGdldF9lbmRwb2ludHMgKGRldiwgaW5mby0+ZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJLyogZW5zdXJlIGltbWVkaWF0ZSBleGl0IGZyb20gdXNibmV0X2Rpc2Nvbm5lY3QgKi8KKwkJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAoJnVzYm5ldF9kcml2ZXIsIGluZm8tPmRhdGEpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIHN0YXR1cyBlbmRwb2ludDogb3B0aW9uYWwgZm9yIENEQyBFdGhlcm5ldCwgbm90IFJORElTIChvciBBQ00pICovCisJZGV2LT5zdGF0dXMgPSBOVUxMOworCWlmIChpbmZvLT5jb250cm9sLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzID09IDEpIHsKKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCisJCWRldi0+c3RhdHVzID0gJmluZm8tPmNvbnRyb2wtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludCBbMF07CisJCWRlc2MgPSAmZGV2LT5zdGF0dXMtPmRlc2M7CisJCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UCisJCQkJfHwgIShkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJCQl8fCAobGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpCisJCQkJCTwgc2l6ZW9mIChzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24pKQorCQkJCXx8ICFkZXNjLT5iSW50ZXJ2YWwpIHsKKwkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJiYWQgbm90aWZpY2F0aW9uIGVuZHBvaW50XG4iKTsKKwkJCWRldi0+c3RhdHVzID0gTlVMTDsKKwkJfQorCX0KKwlpZiAocm5kaXMgJiYgIWRldi0+c3RhdHVzKSB7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJtaXNzaW5nIFJORElTIHN0YXR1cyBlbmRwb2ludFxuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW5mby0+ZGF0YSwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UgKCZ1c2JuZXRfZHJpdmVyLCBpbmZvLT5kYXRhKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworCitiYWRfZGVzYzoKKwlkZXZfaW5mbyAoJmRldi0+dWRldi0+ZGV2LCAiYmFkIENEQyBkZXNjcmlwdG9yc1xuIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIGNkY191bmJpbmQgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNkY19zdGF0ZQkJKmluZm8gPSAodm9pZCAqKSAmZGV2LT5kYXRhOworCisJLyogZGlzY29ubmVjdCBtYXN0ZXIgLS0+IGRpc2Nvbm5lY3Qgc2xhdmUgKi8KKwlpZiAoaW50ZiA9PSBpbmZvLT5jb250cm9sICYmIGluZm8tPmRhdGEpIHsKKwkJLyogZW5zdXJlIGltbWVkaWF0ZSBleGl0IGZyb20gdXNibmV0X2Rpc2Nvbm5lY3QgKi8KKwkJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAoJnVzYm5ldF9kcml2ZXIsIGluZm8tPmRhdGEpOworCQlpbmZvLT5kYXRhID0gTlVMTDsKKwl9CisKKwkvKiBhbmQgdmljZSB2ZXJzYSAoanVzdCBpbiBjYXNlKSAqLworCWVsc2UgaWYgKGludGYgPT0gaW5mby0+ZGF0YSAmJiBpbmZvLT5jb250cm9sKSB7CisJCS8qIGVuc3VyZSBpbW1lZGlhdGUgZXhpdCBmcm9tIHVzYm5ldF9kaXNjb25uZWN0ICovCisJCXVzYl9zZXRfaW50ZmRhdGEoaW5mby0+Y29udHJvbCwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UgKCZ1c2JuZXRfZHJpdmVyLCBpbmZvLT5jb250cm9sKTsKKwkJaW5mby0+Y29udHJvbCA9IE5VTEw7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGR1bXBzcGVlZCAoc3RydWN0IHVzYm5ldCAqZGV2LCBfX2xlMzIgKnNwZWVkcykKK3sKKwlpZiAobmV0aWZfbXNnX3RpbWVyIChkZXYpKQorCQlkZXZpbmZvIChkZXYsICJsaW5rIHNwZWVkczogJXUga2JwcyB1cCwgJXUga2JwcyBkb3duIiwKKwkJCV9fbGUzMl90b19jcHUoc3BlZWRzWzBdKSAvIDEwMDAsCisJCV9fbGUzMl90b19jcHUoc3BlZWRzWzFdKSAvIDEwMDApOworfQorCitzdGF0aWMgdm9pZCBjZGNfc3RhdHVzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24JKmV2ZW50OworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IHNpemVvZiAqZXZlbnQpCisJCXJldHVybjsKKwkKKwkvKiBTUEVFRF9DSEFOR0UgY2FuIGdldCBzcGxpdCBpbnRvIHR3byA4LWJ5dGUgcGFja2V0cyAqLworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQgKEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpKSB7CisJCWR1bXBzcGVlZCAoZGV2LCAoX19sZTMyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJcmV0dXJuOworCX0KKworCWV2ZW50ID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3dpdGNoIChldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUpIHsKKwljYXNlIFVTQl9DRENfTk9USUZZX05FVFdPUktfQ09OTkVDVElPTjoKKwkJaWYgKG5ldGlmX21zZ190aW1lciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiQ0RDOiBjYXJyaWVyICVzIiwKKwkJCQkJZXZlbnQtPndWYWx1ZSA/ICJvbiIgOiAib2ZmIik7CisJCWlmIChldmVudC0+d1ZhbHVlKQorCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CisJCWVsc2UKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfQ0RDX05PVElGWV9TUEVFRF9DSEFOR0U6CS8qIHR4L3J4IHJhdGVzICovCisJCWlmIChuZXRpZl9tc2dfdGltZXIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgIkNEQzogc3BlZWQgY2hhbmdlIChsZW4gJWQpIiwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSAoc2l6ZW9mICpldmVudCArIDgpKQorCQkJc2V0X2JpdCAoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncyk7CisJCWVsc2UKKwkJCWR1bXBzcGVlZCAoZGV2LCAoX19sZTMyICopICZldmVudFsxXSk7CisJCWJyZWFrOworCS8vIGNhc2UgVVNCX0NEQ19OT1RJRllfUkVTUE9OU0VfQVZBSUxBQkxFOgkvKiBSTkRJUzsgb3IgdW5zb2xpY2l0ZWQgKi8KKwlkZWZhdWx0OgorCQlkZXZlcnIgKGRldiwgIkNEQzogdW5leHBlY3RlZCBub3RpZmljYXRpb24gJTAyeCEiLAorCQkJCSBldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUpOworCQlicmVhazsKKwl9Cit9CisKKyNlbmRpZgkvKiBORUVEX0dFTkVSSUNfQ0RDICovCisKKwwKKyNpZmRlZglDT05GSUdfVVNCX0NEQ0VUSEVSCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ29tbXVuaWNhdGlvbnMgRGV2aWNlIENsYXNzLCBFdGhlcm5ldCBDb250cm9sIG1vZGVsCisgKiAKKyAqIFRha2VzIHR3byBpbnRlcmZhY2VzLiAgVGhlIERBVEEgaW50ZXJmYWNlIGlzIGluYWN0aXZlIHRpbGwgYW4gYWx0c2V0dGluZworICogaXMgc2VsZWN0ZWQuICBDb25maWd1cmF0aW9uIGRhdGEgaW5jbHVkZXMgY2xhc3MgZGVzY3JpcHRvcnMuCisgKgorICogVGhpcyBzaG91bGQgaW50ZXJvcCB3aXRoIHdoYXRldmVyIHRoZSAyLjQgIkNEQ0V0aGVyLmMiIGRyaXZlcgorICogKGJ5IEJyYWQgSGFyZHMpIHRhbGtlZCB3aXRoLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorCitzdGF0aWMgdTggbmliYmxlICh1bnNpZ25lZCBjaGFyIGMpCit7CisJaWYgKGxpa2VseSAoaXNkaWdpdCAoYykpKQorCQlyZXR1cm4gYyAtICcwJzsKKwljID0gdG91cHBlciAoYyk7CisJaWYgKGxpa2VseSAoaXN4ZGlnaXQgKGMpKSkKKwkJcmV0dXJuIDEwICsgYyAtICdBJzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2dldF9ldGhlcm5ldF9hZGRyIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgKmUpCit7CisJaW50IAkJdG1wLCBpOworCXVuc2lnbmVkIGNoYXIJYnVmIFsxM107CisKKwl0bXAgPSB1c2Jfc3RyaW5nIChkZXYtPnVkZXYsIGUtPmlNQUNBZGRyZXNzLCBidWYsIHNpemVvZiBidWYpOworCWlmICh0bXAgIT0gMTIpIHsKKwkJZGV2X2RiZyAoJmRldi0+dWRldi0+ZGV2LAorCQkJImJhZCBNQUMgc3RyaW5nICVkIGZldGNoLCAlZFxuIiwgZS0+aU1BQ0FkZHJlc3MsIHRtcCk7CisJCWlmICh0bXAgPj0gMCkKKwkJCXRtcCA9IC1FSU5WQUw7CisJCXJldHVybiB0bXA7CisJfQorCWZvciAoaSA9IHRtcCA9IDA7IGkgPCA2OyBpKyssIHRtcCArPSAyKQorCQlkZXYtPm5ldC0+ZGV2X2FkZHIgW2ldID0KKwkJCSAobmliYmxlIChidWYgW3RtcF0pIDw8IDQpICsgbmliYmxlIChidWYgW3RtcCArIDFdKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZGNfYmluZCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQJCQkJc3RhdHVzOworCXN0cnVjdCBjZGNfc3RhdGUJCSppbmZvID0gKHZvaWQgKikgJmRldi0+ZGF0YTsKKworCXN0YXR1cyA9IGdlbmVyaWNfY2RjX2JpbmQgKGRldiwgaW50Zik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlzdGF0dXMgPSBnZXRfZXRoZXJuZXRfYWRkciAoZGV2LCBpbmZvLT5ldGhlcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAoJnVzYm5ldF9kcml2ZXIsIGluZm8tPmRhdGEpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIEZJWE1FIGNkYy1ldGhlciBoYXMgc29tZSBtdWx0aWNhc3QgY29kZSB0b28sIHRob3VnaCBpdCBjb21wbGFpbnMKKwkgKiBpbiByb3V0aW5lIGNhc2VzLiAgaW5mby0+ZXRoZXIgZGVzY3JpYmVzIHRoZSBtdWx0aWNhc3Qgc3VwcG9ydC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwljZGNfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiQ0RDIEV0aGVybmV0IERldmljZSIsCisJLmZsYWdzID0JRkxBR19FVEhFUiwKKwkvLyAuY2hlY2tfY29ubmVjdCA9IGNkY19jaGVja19jb25uZWN0LAorCS5iaW5kID0JCWNkY19iaW5kLAorCS51bmJpbmQgPQljZGNfdW5iaW5kLAorCS5zdGF0dXMgPQljZGNfc3RhdHVzLAorfTsKKworI2VuZGlmCS8qIENPTkZJR19VU0JfQ0RDRVRIRVIgKi8KKworCisMCisjaWZkZWYJQ09ORklHX1VTQl9FUFNPTjI4ODgKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBFUFNPTiBVU0IgY2xpZW50cworICoKKyAqIFRoaXMgaXMgdGhlIHNhbWUgaWRlYSBhcyBMaW51eCBQREFzIChiZWxvdykgZXhjZXB0IHRoZSBmaXJtd2FyZSBpbiB0aGUKKyAqIGRldmljZSBtaWdodCBub3QgYmUgVHV4LXBvd2VyZWQuICBFcHNvbiBwcm92aWRlcyByZWZlcmVuY2UgZmlybXdhcmUgdGhhdAorICogaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZS4gIFByb2R1Y3QgZGV2ZWxvcGVycyBjYW4gcmV1c2Ugb3IgbW9kaWZ5IHRoYXQKKyAqIGNvZGUsIHN1Y2ggYXMgYnkgdXNpbmcgdGhlaXIgb3duIHByb2R1Y3QgYW5kIHZlbmRvciBjb2Rlcy4KKyAqCisgKiBTdXBwb3J0IHdhcyBmcm9tIEp1cm8gQnlzdHJpY2t5IDxieXN0cmlja3kuanVyb0BlcmQuZXBzb24uY29tPgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JZXBzb24yODg4X2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkVwc29uIFVTQiBEZXZpY2UiLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKworCS5pbiA9IDQsIC5vdXQgPSAzLAorfTsKKworI2VuZGlmCS8qIENPTkZJR19VU0JfRVBTT04yODg4ICovCisKKwwKKyNpZmRlZiBDT05GSUdfVVNCX0dFTkVTWVMKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBHZW5lU3lzIEdMNjIwVVNCLUEgKHd3dy5nZW5lc3lzbG9naWMuY29tLnR3KQorICoKKyAqIC4uLiBzaG91bGQgcGFydGlhbGx5IGludGVyb3Agd2l0aCB0aGUgV2luMzIgZHJpdmVyIGZvciB0aGlzIGhhcmR3YXJlCisgKiBUaGUgR2VuZVN5cyBkb2NzIGltcGx5IHRoZXJlJ3Mgc29tZSBORElTIGlzc3VlIG1vdGl2YXRpbmcgdGhpcyBmcmFtaW5nLgorICoKKyAqIFNvbWUgaW5mbyBmcm9tIEdlbmVTeXM6CisgKiAgLSBHTDYyMFVTQi1BIGlzIGZ1bGwgZHVwbGV4OyBHTDYyMFVTQiBpcyBvbmx5IGhhbGYgZHVwbGV4IGZvciBidWxrLgorICogICAgKFNvbWUgY2FibGVzLCBsaWtlIHRoZSBCQUZPLTEwMGMsIHVzZSB0aGUgaGFsZiBkdXBsZXggdmVyc2lvbi4pCisgKiAgLSBGb3IgdGhlIGZ1bGwgZHVwbGV4IG1vZGVsLCB0aGUgbG93IGJpdCBvZiB0aGUgdmVyc2lvbiBjb2RlIHNheXMKKyAqICAgIHdoaWNoIHNpZGUgaXMgd2hpY2ggKCJsZWZ0L3JpZ2h0IikuCisgKiAgLSBGb3IgdGhlIGhhbGYgZHVwbGV4IHR5cGUsIGEgY29udHJvbC9pbnRlcnJ1cHQgaGFuZHNoYWtlIHNldHRsZXMKKyAqICAgIHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24uICAoVGhhdCdzIGRpc2FibGVkIGhlcmUsIHBhcnRpYWxseSBjb2RlZC4pCisgKiAgICBBIGNvbnRyb2wgVVJCIHdvdWxkIGJsb2NrIHVudGlsIG90aGVyIHNpZGUgd3JpdGVzIGFuIGludGVycnVwdC4KKyAqCisgKiBPcmlnaW5hbCBjb2RlIGZyb20gSml1bi1KaWUgSHVhbmcgPGh1YW5nampAZ2VuZXN5c2xvZ2ljLmNvbS50dz4KKyAqIGFuZCBtZXJnZWQgaW50byAidXNibmV0IiBieSBTdGFuaXNsYXYgQnJhYmVjIDx1dHhAcGVuZ3Vpbi5jej4uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gY29udHJvbCBtc2cgd3JpdGUgY29tbWFuZAorI2RlZmluZSBHRU5FTElOS19DT05ORUNUX1dSSVRFCQkJMHhGMAorLy8gaW50ZXJydXB0IHBpcGUgaW5kZXgKKyNkZWZpbmUgR0VORUxJTktfSU5URVJSVVBUX1BJUEUJCQkweDAzCisvLyBpbnRlcnJ1cHQgcmVhZCBidWZmZXIgc2l6ZQorI2RlZmluZSBJTlRFUlJVUFRfQlVGU0laRQkJCTB4MDgKKy8vIGludGVycnVwdCBwaXBlIGludGVydmFsIHZhbHVlCisjZGVmaW5lIEdFTkVMSU5LX0lOVEVSUlVQVF9JTlRFUlZBTAkJMHgxMAorLy8gbWF4IHRyYW5zbWl0IHBhY2tldCBudW1iZXIgcGVyIHRyYW5zbWl0CisjZGVmaW5lIEdMX01BWF9UUkFOU01JVF9QQUNLRVRTCQkJMzIKKy8vIG1heCBwYWNrZXQgbGVuZ3RoCisjZGVmaW5lIEdMX01BWF9QQUNLRVRfTEVOCQkJMTUxNAorLy8gbWF4IHJlY2VpdmUgYnVmZmVyIHNpemUgCisjZGVmaW5lIEdMX1JDVl9CVUZfU0laRQkJXAorCSgoKEdMX01BWF9QQUNLRVRfTEVOICsgNCkgKiBHTF9NQVhfVFJBTlNNSVRfUEFDS0VUUykgKyA0KQorCitzdHJ1Y3QgZ2xfcGFja2V0IHsKKwl1MzIJCXBhY2tldF9sZW5ndGg7CisJY2hhcgkJcGFja2V0X2RhdGEgWzFdOworfTsKKworc3RydWN0IGdsX2hlYWRlciB7CisJdTMyCQkJcGFja2V0X2NvdW50OworCXN0cnVjdCBnbF9wYWNrZXQJcGFja2V0czsKK307CisKKyNpZmRlZglHRU5FTElOS19BQ0sKKworLy8gRklYTUU6ICB0aGlzIGNvZGUgaXMgaW5jb21wbGV0ZSwgbm90IGRlYnVnZ2VkOyBpdCBkb2Vzbid0CisvLyBoYW5kbGUgaW50ZXJydXB0cyBjb3JyZWN0bHkuICBpbnRlcnJ1cHRzIHNob3VsZCBiZSBnZW5lcmljCisvLyBjb2RlIGxpa2UgYWxsIG90aGVyIGRldmljZSBJL08sIGFueXdheS4KKworc3RydWN0IGdsX3ByaXYgeyAKKwlzdHJ1Y3QgdXJiCSppcnFfdXJiOworCWNoYXIJCWlycV9idWYgW0lOVEVSUlVQVF9CVUZTSVpFXTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGdsX2NvbnRyb2xfd3JpdGUgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwKKwkJICAgICAgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkgICAgICByZXF1ZXN0LAorCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJICAgICAgdmFsdWUsIAorCQkgICAgICAwLAkJCS8vIGluZGV4CisJCSAgICAgIDAsCQkJLy8gZGF0YSBidWZmZXIKKwkJICAgICAgMCwJCQkvLyBzaXplCisJCSAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZ2xfaW50ZXJydXB0X2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwkKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGdsX2ludGVycnVwdF9yZWFkIChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJc3RydWN0IGdsX3ByaXYJKnByaXYgPSBkZXYtPnByaXZfZGF0YTsKKwlpbnQJCXJldHZhbDsKKworCS8vIGlzc3VlIHVzYiBpbnRlcnJ1cHQgcmVhZAorCWlmIChwcml2ICYmIHByaXYtPmlycV91cmIpIHsKKwkJLy8gc3VibWl0IHVyYgorCQlpZiAoKHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChwcml2LT5pcnFfdXJiLCBHRlBfS0VSTkVMKSkgIT0gMCkKKwkJCWRiZyAoImdsX2ludGVycnVwdF9yZWFkOiBzdWJtaXQgZmFpbCAtICVYLi4uIiwgcmV0dmFsKTsKKwkJZWxzZQorCQkJZGJnICgiZ2xfaW50ZXJydXB0X3JlYWQ6IHN1Ym1pdCBzdWNjZXNzLi4uIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGNoZWNrIHdoZXRoZXIgYW5vdGhlciBzaWRlIGlzIGNvbm5lY3RlZAorc3RhdGljIGludCBnZW5lbGlua19jaGVja19jb25uZWN0IChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJaW50CQkJcmV0dmFsOworCisJZGJnICgiZ2VuZWxpbmtfY2hlY2tfY29ubmVjdC4uLiIpOworCisJLy8gZGV0ZWN0IHdoZXRoZXIgYW5vdGhlciBzaWRlIGlzIGNvbm5lY3RlZAorCWlmICgocmV0dmFsID0gZ2xfY29udHJvbF93cml0ZSAoZGV2LCBHRU5FTElOS19DT05ORUNUX1dSSVRFLCAwKSkgIT0gMCkgeworCQlkYmcgKCIlczogZ2VuZWxpbmtfY2hlY2tfY29ubmVjdCB3cml0ZSBmYWlsIC0gJVgiLAorCQkJZGV2LT5uZXQtPm5hbWUsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLy8gdXNiIGludGVycnVwdCByZWFkIHRvIGFjayBhbm90aGVyIHNpZGUgCisJaWYgKChyZXR2YWwgPSBnbF9pbnRlcnJ1cHRfcmVhZCAoZGV2KSkgIT0gMCkgeworCQlkYmcgKCIlczogZ2VuZWxpbmtfY2hlY2tfY29ubmVjdCByZWFkIGZhaWwgLSAlWCIsCisJCQlkZXYtPm5ldC0+bmFtZSwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlkYmcgKCIlczogZ2VuZWxpbmtfY2hlY2tfY29ubmVjdCByZWFkIHN1Y2Nlc3MiLCBkZXYtPm5ldC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8vIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwcml2YXRlIGRhdGEgZm9yIGdlbmVsaW5rCitzdGF0aWMgaW50IGdlbmVsaW5rX2luaXQgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlzdHJ1Y3QgZ2xfcHJpdiAqcHJpdjsKKworCS8vIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisJaWYgKChwcml2ID0ga21hbGxvYyAoc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKSkgPT0gMCkgeworCQlkYmcgKCIlczogY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSBwZXIgZGV2aWNlIiwKKwkJCWRldi0+bmV0LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLy8gYWxsb2NhdGUgaXJxIHVyYgorCWlmICgocHJpdi0+aXJxX3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpKSA9PSAwKSB7CisJCWRiZyAoIiVzOiBjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBpcnEgdXJiIHBlciBkZXZpY2UiLAorCQkJZGV2LT5uZXQtPm5hbWUpOworCQlrZnJlZSAocHJpdik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIGZpbGwgaXJxIHVyYgorCXVzYl9maWxsX2ludF91cmIgKHByaXYtPmlycV91cmIsIGRldi0+dWRldiwKKwkJdXNiX3JjdmludHBpcGUgKGRldi0+dWRldiwgR0VORUxJTktfSU5URVJSVVBUX1BJUEUpLAorCQlwcml2LT5pcnFfYnVmLCBJTlRFUlJVUFRfQlVGU0laRSwKKwkJZ2xfaW50ZXJydXB0X2NvbXBsZXRlLCAwLAorCQlHRU5FTElOS19JTlRFUlJVUFRfSU5URVJWQUwpOworCisJLy8gc2V0IHByaXZhdGUgZGF0YSBwb2ludGVyCisJZGV2LT5wcml2X2RhdGEgPSBwcml2OworCisJcmV0dXJuIDA7Cit9CisKKy8vIHJlbGVhc2UgdGhlIHByaXZhdGUgZGF0YQorc3RhdGljIGludCBnZW5lbGlua19mcmVlIChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJc3RydWN0IGdsX3ByaXYJKnByaXYgPSBkZXYtPnByaXZfZGF0YTsKKworCWlmICghcHJpdikgCisJCXJldHVybiAwOworCisvLyBGSVhNRTogIGNhbid0IGNhbmNlbCBoZXJlOyBpdCdzIHN5bmNocm9ub3VzLCBhbmQKKy8vIHNob3VsZCBoYXZlIGhhcHBlbmVkIGVhcmxpZXIgaW4gYW55IGNhc2UgKGludGVycnVwdAorLy8gaGFuZGxpbmcgbmVlZHMgdG8gYmUgZ2VuZXJpYykKKworCS8vIGNhbmNlbCBpcnEgdXJiIGZpcnN0CisJdXNiX2tpbGxfdXJiIChwcml2LT5pcnFfdXJiKTsKKworCS8vIGZyZWUgaXJxIHVyYgorCXVzYl9mcmVlX3VyYiAocHJpdi0+aXJxX3VyYik7CisKKwkvLyBmcmVlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisJa2ZyZWUgKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IGdlbmVsaW5rX3J4X2ZpeHVwIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGdsX2hlYWRlcgkqaGVhZGVyOworCXN0cnVjdCBnbF9wYWNrZXQJKnBhY2tldDsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKmdsX3NrYjsKKwl1MzIJCQlzaXplOworCisJaGVhZGVyID0gKHN0cnVjdCBnbF9oZWFkZXIgKikgc2tiLT5kYXRhOworCisJLy8gZ2V0IHRoZSBwYWNrZXQgY291bnQgb2YgdGhlIHJlY2VpdmVkIHNrYgorCWxlMzJfdG9fY3B1cyAoJmhlYWRlci0+cGFja2V0X2NvdW50KTsKKwlpZiAoKGhlYWRlci0+cGFja2V0X2NvdW50ID4gR0xfTUFYX1RSQU5TTUlUX1BBQ0tFVFMpCisJCQl8fCAoaGVhZGVyLT5wYWNrZXRfY291bnQgPCAwKSkgeworCQlkYmcgKCJnZW5lbGluazogaW52YWxpZCByZWNlaXZlZCBwYWNrZXQgY291bnQgJWQiLAorCQkJaGVhZGVyLT5wYWNrZXRfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvLyBzZXQgdGhlIGN1cnJlbnQgcGFja2V0IHBvaW50ZXIgdG8gdGhlIGZpcnN0IHBhY2tldAorCXBhY2tldCA9ICZoZWFkZXItPnBhY2tldHM7CisKKwkvLyBkZWNyZW1lbnQgdGhlIGxlbmd0aCBmb3IgdGhlIHBhY2tldCBjb3VudCBzaXplIDQgYnl0ZXMKKwlza2JfcHVsbCAoc2tiLCA0KTsKKworCXdoaWxlIChoZWFkZXItPnBhY2tldF9jb3VudCA+IDEpIHsKKwkJLy8gZ2V0IHRoZSBwYWNrZXQgbGVuZ3RoCisJCXNpemUgPSBwYWNrZXQtPnBhY2tldF9sZW5ndGg7CisKKwkJLy8gdGhpcyBtYXkgYmUgYSBicm9rZW4gcGFja2V0CisJCWlmIChzaXplID4gR0xfTUFYX1BBQ0tFVF9MRU4pIHsKKwkJCWRiZyAoImdlbmVsaW5rOiBpbnZhbGlkIHJ4IGxlbmd0aCAlZCIsIHNpemUpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvLyBhbGxvY2F0ZSB0aGUgc2tiIGZvciB0aGUgaW5kaXZpZHVhbCBwYWNrZXQKKwkJZ2xfc2tiID0gYWxsb2Nfc2tiIChzaXplLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGdsX3NrYikgeworCisJCQkvLyBjb3B5IHRoZSBwYWNrZXQgZGF0YSB0byB0aGUgbmV3IHNrYgorCQkJbWVtY3B5KHNrYl9wdXQoZ2xfc2tiLCBzaXplKSwgcGFja2V0LT5wYWNrZXRfZGF0YSwgc2l6ZSk7CisJCQlza2JfcmV0dXJuIChkZXYsIHNrYik7CisJCX0KKworCQkvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IHBhY2tldAorCQlwYWNrZXQgPSAoc3RydWN0IGdsX3BhY2tldCAqKQorCQkJJnBhY2tldC0+cGFja2V0X2RhdGEgW3NpemVdOworCQloZWFkZXItPnBhY2tldF9jb3VudC0tOworCisJCS8vIHNoaWZ0IHRoZSBkYXRhIHBvaW50ZXIgdG8gdGhlIG5leHQgZ2xfcGFja2V0CisJCXNrYl9wdWxsIChza2IsIHNpemUgKyA0KTsKKwl9CisKKwkvLyBza2lwIHRoZSBwYWNrZXQgbGVuZ3RoIGZpZWxkIDQgYnl0ZXMKKwlza2JfcHVsbCAoc2tiLCA0KTsKKworCWlmIChza2ItPmxlbiA+IEdMX01BWF9QQUNLRVRfTEVOKSB7CisJCWRiZyAoImdlbmVsaW5rOiBpbnZhbGlkIHJ4IGxlbmd0aCAlZCIsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorZ2VuZWxpbmtfdHhfZml4dXAgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKQoreworCWludCAJcGFkbGVuOworCWludAlsZW5ndGggPSBza2ItPmxlbjsKKwlpbnQJaGVhZHJvb20gPSBza2JfaGVhZHJvb20gKHNrYik7CisJaW50CXRhaWxyb29tID0gc2tiX3RhaWxyb29tIChza2IpOworCXUzMgkqcGFja2V0X2NvdW50OworCXUzMgkqcGFja2V0X2xlbjsKKworCS8vIEZJWE1FOiAgbWFnaWMgbnVtYmVycywgYmxlZWNoCisJcGFkbGVuID0gKChza2ItPmxlbiArICg0ICsgNCoxKSkgJSA2NCkgPyAwIDogMTsKKworCWlmICgoIXNrYl9jbG9uZWQgKHNrYikpCisJCQkmJiAoKGhlYWRyb29tICsgdGFpbHJvb20pID49IChwYWRsZW4gKyAoNCArIDQqMSkpKSkgeworCQlpZiAoKGhlYWRyb29tIDwgKDQgKyA0KjEpKSB8fCAodGFpbHJvb20gPCBwYWRsZW4pKSB7CisJCQlza2ItPmRhdGEgPSBtZW1tb3ZlIChza2ItPmhlYWQgKyAoNCArIDQqMSksCisJCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQlza2ItPnRhaWwgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBza19idWZmCSpza2IyOworCQlza2IyID0gc2tiX2NvcHlfZXhwYW5kIChza2IsICg0ICsgNCoxKSAsIHBhZGxlbiwgZmxhZ3MpOworCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJc2tiID0gc2tiMjsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvLyBhdHRhY2ggdGhlIHBhY2tldCBjb3VudCB0byB0aGUgaGVhZGVyCisJcGFja2V0X2NvdW50ID0gKHUzMiAqKSBza2JfcHVzaCAoc2tiLCAoNCArIDQqMSkpOworCXBhY2tldF9sZW4gPSBwYWNrZXRfY291bnQgKyAxOworCisJLy8gRklYTUUgbGl0dGxlIGVuZGlhbj8KKwkqcGFja2V0X2NvdW50ID0gMTsKKwkqcGFja2V0X2xlbiA9IGxlbmd0aDsKKworCS8vIGFkZCBwYWRkaW5nIGJ5dGUKKwlpZiAoKHNrYi0+bGVuICUgZGV2LT5tYXhwYWNrZXQpID09IDApCisJCXNrYl9wdXQgKHNrYiwgMSk7CisKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWdlbmVsaW5rX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkdlbmVzeXMgR2VuZUxpbmsiLAorCS5mbGFncyA9CUZMQUdfRlJBTUlOR19HTCB8IEZMQUdfTk9fU0VUSU5ULAorCS5yeF9maXh1cCA9CWdlbmVsaW5rX3J4X2ZpeHVwLAorCS50eF9maXh1cCA9CWdlbmVsaW5rX3R4X2ZpeHVwLAorCisJLmluID0gMSwgLm91dCA9IDIsCisKKyNpZmRlZglHRU5FTElOS19BQ0sKKwkuY2hlY2tfY29ubmVjdCA9Z2VuZWxpbmtfY2hlY2tfY29ubmVjdCwKKyNlbmRpZgorfTsKKworI2VuZGlmIC8qIENPTkZJR19VU0JfR0VORVNZUyAqLworCisKKwwKKyNpZmRlZglDT05GSUdfVVNCX05FVDEwODAKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBOZXRjaGlwIDEwODAgZHJpdmVyIC4uLiBodHRwOi8vd3d3Lm5ldGNoaXAuY29tCisgKiBVc2VkIGluIExhcExpbmsgY2FibGVzCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBkZXZfcGFja2V0X2lkCWRhdGFbMF0KKyNkZWZpbmUgZnJhbWVfZXJyb3JzCWRhdGFbMV0KKworLyoKKyAqIE5ldENoaXAgZnJhbWluZyBvZiBldGhlcm5ldCBwYWNrZXRzLCBzdXBwb3J0aW5nIGFkZGl0aW9uYWwgZXJyb3IKKyAqIGNoZWNrcyBmb3IgbGlua3MgdGhhdCBtYXkgZHJvcCBidWxrIHBhY2tldHMgZnJvbSBpbnNpZGUgbWVzc2FnZXMuCisgKiBPZGQgVVNCIGxlbmd0aCA9PSBhbHdheXMgc2hvcnQgcmVhZCBmb3IgbGFzdCB1c2IgcGFja2V0LgorICoJLSBuY19oZWFkZXIKKyAqCS0gRXRoZXJuZXQgaGVhZGVyICgxNCBieXRlcykKKyAqCS0gcGF5bG9hZAorICoJLSAob3B0aW9uYWwgcGFkZGluZyBieXRlLCBpZiBuZWVkZWQgc28gbGVuZ3RoIGJlY29tZXMgb2RkKQorICoJLSBuY190cmFpbGVyCisgKgorICogVGhpcyBmcmFtaW5nIGlzIHRvIGJlIGF2b2lkZWQgZm9yIG5vbi1OZXRDaGlwIGRldmljZXMuCisgKi8KKworc3RydWN0IG5jX2hlYWRlciB7CQkvLyBwYWNrZWQ6CisJX19sZTE2CWhkcl9sZW47CQkvLyBzaXplb2YgbmNfaGVhZGVyIChMRSwgYWxsKQorCV9fbGUxNglwYWNrZXRfbGVuOwkJLy8gcGF5bG9hZCBzaXplIChpbmNsdWRpbmcgZXRoaGRyKQorCV9fbGUxNglwYWNrZXRfaWQ7CQkvLyBkZXRlY3RzIGRyb3BwZWQgcGFja2V0cworI2RlZmluZSBNSU5fSEVBREVSCTYKKworCS8vIGFsbCBlbHNlIGlzIG9wdGlvbmFsLCBhbmQgbXVzdCBzdGFydCB3aXRoOgorCS8vIHUxNgl2ZW5kb3JJZDsJCS8vIGZyb20gdXNiLWlmCisJLy8gdTE2CXByb2R1Y3RJZDsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisjZGVmaW5lCVBBRF9CWVRFCSgodW5zaWduZWQgY2hhcikweEFDKQorCitzdHJ1Y3QgbmNfdHJhaWxlciB7CisJX19sZTE2CXBhY2tldF9pZDsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvLyBwYWNrZXRzIG1heSB1c2UgRkxBR19GUkFNSU5HX05DIGFuZCBvcHRpb25hbCBwYWQKKyNkZWZpbmUgRlJBTUVEX1NJWkUobXR1KSAoc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSBcCisJCQkJKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpIFwKKwkJCQkrIChtdHUpIFwKKwkJCQkrIDEgXAorCQkJCSsgc2l6ZW9mIChzdHJ1Y3QgbmNfdHJhaWxlcikpCisKKyNkZWZpbmUgTUlOX0ZSQU1FRAlGUkFNRURfU0laRSgwKQorCisKKy8qCisgKiBaZXJvIG1lYW5zIG5vIHRpbWVvdXQ7IGVsc2UsIGhvdyBsb25nIGEgNjQgYnl0ZSBidWxrIHBhY2tldCBtYXkgYmUgcXVldWVkCisgKiBiZWZvcmUgdGhlIGhhcmR3YXJlIGRyb3BzIGl0LiAgSWYgdGhhdCdzIGRvbmUsIHRoZSBkcml2ZXIgd2lsbCBuZWVkIHRvCisgKiBmcmFtZSBuZXR3b3JrIHBhY2tldHMgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgZHJvcHBlZCBVU0IgcGFja2V0cy4gIFRoZSB3aW4zMgorICogZHJpdmVyIHNldHMgdGhpcyBmb3IgYm90aCBzaWRlcyBvZiB0aGUgbGluay4KKyAqLworI2RlZmluZQlOQ19SRUFEX1RUTF9NUwkoKHU4KTI1NSkJLy8gbXMKKworLyoKKyAqIFdlIGlnbm9yZSBtb3N0IHJlZ2lzdGVycyBhbmQgRUVQUk9NIGNvbnRlbnRzLgorICovCisjZGVmaW5lCVJFR19VU0JDVEwJKCh1OCkweDA0KQorI2RlZmluZSBSRUdfVFRMCQkoKHU4KTB4MTApCisjZGVmaW5lIFJFR19TVEFUVVMJKCh1OCkweDExKQorCisvKgorICogVmVuZG9yIHNwZWNpZmljIHJlcXVlc3RzIHRvIHJlYWQvd3JpdGUgZGF0YQorICovCisjZGVmaW5lCVJFUVVFU1RfUkVHSVNURVIJKCh1OCkweDEwKQorI2RlZmluZQlSRVFVRVNUX0VFUFJPTQkJKCh1OCkweDExKQorCitzdGF0aWMgaW50CituY192ZW5kb3JfcmVhZCAoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2ICpyZXR2YWxfcHRyKQoreworCWludCBzdGF0dXMgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwKKwkJdXNiX3JjdmN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQlyZXEsCisJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkwLCByZWdudW0sCisJCXJldHZhbF9wdHIsIHNpemVvZiAqcmV0dmFsX3B0ciwKKwkJQ09OVFJPTF9USU1FT1VUX01TKTsKKwlpZiAoc3RhdHVzID4gMCkKKwkJc3RhdHVzID0gMDsKKwlpZiAoIXN0YXR1cykKKwkJbGUxNl90b19jcHVzIChyZXR2YWxfcHRyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIGludAorbmNfcmVnaXN0ZXJfcmVhZCAoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiAqcmV0dmFsX3B0cikKK3sKKwlyZXR1cm4gbmNfdmVuZG9yX3JlYWQgKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCByZXR2YWxfcHRyKTsKK30KKworLy8gbm8gcmV0dmFsIC4uLiBjYW4gYmVjb21lIGFzeW5jLCB1c2FibGUgaW5faW50ZXJydXB0KCkKK3N0YXRpYyB2b2lkCituY192ZW5kb3Jfd3JpdGUgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSkKK3sKKwl1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwKKwkJdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQlyZXEsCisJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJdmFsdWUsIHJlZ251bSwKKwkJTlVMTCwgMCwJCQkvLyBkYXRhIGlzIGluIHNldHVwIHBhY2tldAorCQlDT05UUk9MX1RJTUVPVVRfTVMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25jX3JlZ2lzdGVyX3dyaXRlIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQoreworCW5jX3ZlbmRvcl93cml0ZSAoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTsKK30KKworCisjaWYgMAorc3RhdGljIHZvaWQgbmNfZHVtcF9yZWdpc3RlcnMgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwl1OAlyZWc7CisJdTE2CSp2cCA9IGttYWxsb2MgKHNpemVvZiAodTE2KSk7CisKKwlpZiAoIXZwKSB7CisJCWRiZyAoIm5vIG1lbW9yeT8iKTsKKwkJcmV0dXJuOworCX0KKworCWRiZyAoIiVzIHJlZ2lzdGVyczoiLCBkZXYtPm5ldC0+bmFtZSk7CisJZm9yIChyZWcgPSAwOyByZWcgPCAweDIwOyByZWcrKykgeworCQlpbnQgcmV0dmFsOworCisJCS8vIHJlYWRpbmcgc29tZSByZWdpc3RlcnMgaXMgdHJvdWJsZQorCQlpZiAocmVnID49IDB4MDggJiYgcmVnIDw9IDB4ZikKKwkJCWNvbnRpbnVlOworCQlpZiAocmVnID49IDB4MTIgJiYgcmVnIDw9IDB4MWUpCisJCQljb250aW51ZTsKKworCQlyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkIChkZXYsIHJlZywgdnApOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWRiZyAoIiVzIHJlZyBbMHgleF0gPT0+IGVycm9yICVkIiwKKwkJCQlkZXYtPm5ldC0+bmFtZSwgcmVnLCByZXR2YWwpOworCQllbHNlCisJCQlkYmcgKCIlcyByZWcgWzB4JXhdID0gMHgleCIsCisJCQkJZGV2LT5uZXQtPm5hbWUsIHJlZywgKnZwKTsKKwl9CisJa2ZyZWUgKHZwKTsKK30KKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBDb250cm9sIHJlZ2lzdGVyCisgKi8KKworI2RlZmluZQlVU0JDVExfV1JJVEFCTEVfTUFTSwkweDFmMGYKKy8vIGJpdHMgMTUtMTMgcmVzZXJ2ZWQsIHIvbworI2RlZmluZQlVU0JDVExfRU5BQkxFX0xBTkcJKDEgPDwgMTIpCisjZGVmaW5lCVVTQkNUTF9FTkFCTEVfTUZHUgkoMSA8PCAxMSkKKyNkZWZpbmUJVVNCQ1RMX0VOQUJMRV9QUk9ECSgxIDw8IDEwKQorI2RlZmluZQlVU0JDVExfRU5BQkxFX1NFUklBTAkoMSA8PCA5KQorI2RlZmluZQlVU0JDVExfRU5BQkxFX0RFRkFVTFRTCSgxIDw8IDgpCisvLyBiaXRzIDctNCByZXNlcnZlZCwgci9vCisjZGVmaW5lCVVTQkNUTF9GTFVTSF9PVEhFUgkoMSA8PCAzKQorI2RlZmluZQlVU0JDVExfRkxVU0hfVEhJUwkoMSA8PCAyKQorI2RlZmluZQlVU0JDVExfRElTQ09OTl9PVEhFUgkoMSA8PCAxKQorI2RlZmluZQlVU0JDVExfRElTQ09OTl9USElTCSgxIDw8IDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuY19kdW1wX3VzYmN0bCAoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgdXNiY3RsKQoreworCWlmICghbmV0aWZfbXNnX2xpbmsgKGRldikpCisJCXJldHVybjsKKwlkZXZkYmcgKGRldiwgIm5ldDEwODAgJXMtJXMgdXNiY3RsIDB4JXg6JXMlcyVzJXMlczsiCisJCQkiIHRoaXMlcyVzOyIKKwkJCSIgb3RoZXIlcyVzOyByL28gMHgleCIsCisJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQl1c2JjdGwsCisJCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX0xBTkcpID8gIiBsYW5nIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9NRkdSKSA/ICIgbWZnciIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfUFJPRCkgPyAiIHByb2QiIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX1NFUklBTCkgPyAiIHNlcmlhbCIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfREVGQVVMVFMpID8gIiBkZWZhdWx0cyIgOiAiIiwKKworCQkodXNiY3RsICYgVVNCQ1RMX0ZMVVNIX09USEVSKSA/ICIgRkxVU0giIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRElTQ09OTl9PVEhFUikgPyAiIERJUyIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9GTFVTSF9USElTKSA/ICIgRkxVU0giIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRElTQ09OTl9USElTKSA/ICIgRElTIiA6ICIiLAorCQl1c2JjdGwgJiB+VVNCQ1RMX1dSSVRBQkxFX01BU0sKKwkJKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFN0YXR1cyByZWdpc3RlcgorICovCisKKyNkZWZpbmUJU1RBVFVTX1BPUlRfQQkJKDEgPDwgMTUpCisKKyNkZWZpbmUJU1RBVFVTX0NPTk5fT1RIRVIJKDEgPDwgMTQpCisjZGVmaW5lCVNUQVRVU19TVVNQRU5EX09USEVSCSgxIDw8IDEzKQorI2RlZmluZQlTVEFUVVNfTUFJTEJPWF9PVEhFUgkoMSA8PCAxMikKKyNkZWZpbmUJU1RBVFVTX1BBQ0tFVFNfT1RIRVIobikJKCgobikgPj4gOCkgJiYgMHgwMykKKworI2RlZmluZQlTVEFUVVNfQ09OTl9USElTCSgxIDw8IDYpCisjZGVmaW5lCVNUQVRVU19TVVNQRU5EX1RISVMJKDEgPDwgNSkKKyNkZWZpbmUJU1RBVFVTX01BSUxCT1hfVEhJUwkoMSA8PCA0KQorI2RlZmluZQlTVEFUVVNfUEFDS0VUU19USElTKG4pCSgoKG4pID4+IDApICYmIDB4MDMpCisKKyNkZWZpbmUJU1RBVFVTX1VOU1BFQ19NQVNLCTB4MGM4YworI2RlZmluZQlTVEFUVVNfTk9JU0VfTUFTSyAJKCh1MTYpfigweDAzMDN8U1RBVFVTX1VOU1BFQ19NQVNLKSkKKworCitzdGF0aWMgaW5saW5lIHZvaWQgbmNfZHVtcF9zdGF0dXMgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHN0YXR1cykKK3sKKwlpZiAoIW5ldGlmX21zZ19saW5rIChkZXYpKQorCQlyZXR1cm47CisJZGV2ZGJnIChkZXYsICJuZXQxMDgwICVzLSVzIHN0YXR1cyAweCV4OiIKKwkJCSIgdGhpcyAoJWMpIFBLVD0lZCVzJXMlczsiCisJCQkiIG90aGVyIFBLVD0lZCVzJXMlczsgdW5zcGVjIDB4JXgiLAorCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJc3RhdHVzLAorCisJCS8vIFhYWCB0aGUgcGFja2V0IGNvdW50cyBkb24ndCBzZWVtIHJpZ2h0CisJCS8vICgxIGF0IHJlc2V0LCBub3QgMCk7IG1heWJlIFVOU1BFQyB0b28KKworCQkoc3RhdHVzICYgU1RBVFVTX1BPUlRfQSkgPyAnQScgOiAnQicsCisJCVNUQVRVU19QQUNLRVRTX1RISVMgKHN0YXR1cyksCisJCShzdGF0dXMgJiBTVEFUVVNfQ09OTl9USElTKSA/ICIgQ09OIiA6ICIiLAorCQkoc3RhdHVzICYgU1RBVFVTX1NVU1BFTkRfVEhJUykgPyAiIFNVUyIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUQVRVU19NQUlMQk9YX1RISVMpID8gIiBNQk9YIiA6ICIiLAorCisJCVNUQVRVU19QQUNLRVRTX09USEVSIChzdGF0dXMpLAorCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpID8gIiBDT04iIDogIiIsCisJCShzdGF0dXMgJiBTVEFUVVNfU1VTUEVORF9PVEhFUikgPyAiIFNVUyIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUQVRVU19NQUlMQk9YX09USEVSKSA/ICIgTUJPWCIgOiAiIiwKKworCQlzdGF0dXMgJiBTVEFUVVNfVU5TUEVDX01BU0sKKwkJKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRUTCByZWdpc3RlcgorICovCisKKyNkZWZpbmUJVFRMX1RISVModHRsKQkoMHgwMGZmICYgdHRsKQorI2RlZmluZQlUVExfT1RIRVIodHRsKQkoMHgwMGZmICYgKHR0bCA+PiA4KSkKKyNkZWZpbmUgTUtfVFRMKHRoaXMsb3RoZXIpCSgodTE2KSgoKG90aGVyKTw8OCl8KDB4MDBmZiYodGhpcykpKSkKKworc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfdHRsIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB0dGwpCit7CisJaWYgKG5ldGlmX21zZ19saW5rIChkZXYpKQorCQlkZXZkYmcgKGRldiwgIm5ldDEwODAgJXMtJXMgdHRsIDB4JXggdGhpcyA9ICVkLCBvdGhlciA9ICVkIiwKKwkJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQkJdHRsLCBUVExfVEhJUyAodHRsKSwgVFRMX09USEVSICh0dGwpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBuZXQxMDgwX3Jlc2V0IChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJdTE2CQl1c2JjdGwsIHN0YXR1cywgdHRsOworCXUxNgkJKnZwID0ga21hbGxvYyAoc2l6ZW9mICh1MTYpLCBHRlBfS0VSTkVMKTsKKwlpbnQJCXJldHZhbDsKKworCWlmICghdnApCisJCXJldHVybiAtRU5PTUVNOworCisJLy8gbmNfZHVtcF9yZWdpc3RlcnMgKGRldik7CisKKwlpZiAoKHJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQgKGRldiwgUkVHX1NUQVRVUywgdnApKSA8IDApIHsKKwkJZGJnICgiY2FuJ3QgcmVhZCAlcy0lcyBzdGF0dXM6ICVkIiwKKwkJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLCByZXR2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCXN0YXR1cyA9ICp2cDsKKwluY19kdW1wX3N0YXR1cyAoZGV2LCBzdGF0dXMpOworCisJaWYgKChyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkIChkZXYsIFJFR19VU0JDVEwsIHZwKSkgPCAwKSB7CisJCWRiZyAoImNhbid0IHJlYWQgVVNCQ1RMLCAlZCIsIHJldHZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisJdXNiY3RsID0gKnZwOworCW5jX2R1bXBfdXNiY3RsIChkZXYsIHVzYmN0bCk7CisKKwluY19yZWdpc3Rlcl93cml0ZSAoZGV2LCBSRUdfVVNCQ1RMLAorCQkJVVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpOworCisJaWYgKChyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkIChkZXYsIFJFR19UVEwsIHZwKSkgPCAwKSB7CisJCWRiZyAoImNhbid0IHJlYWQgVFRMLCAlZCIsIHJldHZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisJdHRsID0gKnZwOworCS8vIG5jX2R1bXBfdHRsIChkZXYsIHR0bCk7CisKKwluY19yZWdpc3Rlcl93cml0ZSAoZGV2LCBSRUdfVFRMLAorCQkJTUtfVFRMIChOQ19SRUFEX1RUTF9NUywgVFRMX09USEVSICh0dGwpKSApOworCWRiZyAoIiVzOiBhc3NpZ25lZCBUVEwsICVkIG1zIiwgZGV2LT5uZXQtPm5hbWUsIE5DX1JFQURfVFRMX01TKTsKKworCWlmIChuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJZGV2aW5mbyAoZGV2LCAicG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZCIsCisJCQkoc3RhdHVzICYgU1RBVFVTX1BPUlRfQSkgPyAnQScgOiAnQicsCisJCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpID8gIiIgOiAiZGlzIgorCQkJKTsKKwlyZXR2YWwgPSAwOworCitkb25lOgorCWtmcmVlICh2cCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuZXQxMDgwX2NoZWNrX2Nvbm5lY3QgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQJCQlyZXR2YWw7CisJdTE2CQkJc3RhdHVzOworCXUxNgkJCSp2cCA9IGttYWxsb2MgKHNpemVvZiAodTE2KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXZwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkIChkZXYsIFJFR19TVEFUVVMsIHZwKTsKKwlzdGF0dXMgPSAqdnA7CisJa2ZyZWUgKHZwKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJZGJnICgiJXMgbmV0MTA4MF9jaGVja19jb25uIHJlYWQgLSAlZCIsIGRldi0+bmV0LT5uYW1lLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoKHN0YXR1cyAmIFNUQVRVU19DT05OX09USEVSKSAhPSBTVEFUVVNfQ09OTl9PVEhFUikKKwkJcmV0dXJuIC1FTk9MSU5LOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuY19mbHVzaF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrZnJlZSAodXJiLT5jb250ZXh0KTsKKwl1c2JfZnJlZV91cmIodXJiKTsKK30KKworc3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMgKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlkZXYtPmZyYW1lX2Vycm9ycysrOworCWlmIChkZXYtPmZyYW1lX2Vycm9ycyA+IDUpIHsKKwkJc3RydWN0IHVyYgkJKnVyYjsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkqcmVxOworCQlpbnQJCQlzdGF0dXM7CisKKwkJLyogU2VuZCBhIGZsdXNoICovCisJCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIFNMQUJfQVRPTUlDKTsKKwkJaWYgKCF1cmIpCisJCQlyZXR1cm47CisKKwkJcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIEdGUF9BVE9NSUMpOworCQlpZiAoIXJlcSkgeworCQkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcmVxLT5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVAorCQkJfCBVU0JfVFlQRV9WRU5ET1IKKwkJCXwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJcmVxLT5iUmVxdWVzdCA9IFJFUVVFU1RfUkVHSVNURVI7CisJCXJlcS0+d1ZhbHVlID0gY3B1X3RvX2xlMTYgKFVTQkNUTF9GTFVTSF9USElTCisJCQkJfCBVU0JDVExfRkxVU0hfT1RIRVIpOworCQlyZXEtPndJbmRleCA9IGNwdV90b19sZTE2IChSRUdfVVNCQ1RMKTsKKwkJcmVxLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYgKDApOworCisJCS8qIHF1ZXVlIGFuIGFzeW5jIGNvbnRyb2wgcmVxdWVzdCwgd2UgZG9uJ3QgbmVlZAorCQkgKiB0byBkbyBhbnl0aGluZyB3aGVuIGl0IGZpbmlzaGVzIGV4Y2VwdCBjbGVhbiB1cC4KKwkJICovCisJCXVzYl9maWxsX2NvbnRyb2xfdXJiICh1cmIsIGRldi0+dWRldiwKKwkJCXVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJCSh1bnNpZ25lZCBjaGFyICopIHJlcSwKKwkJCU5VTEwsIDAsCisJCQluY19mbHVzaF9jb21wbGV0ZSwgcmVxKTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWtmcmVlIChyZXEpOworCQkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgImZsdXNoIG5ldDEwODA7IHRvbyBtYW55IGZyYW1pbmcgZXJyb3JzIik7CisJCWRldi0+ZnJhbWVfZXJyb3JzID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmV0MTA4MF9yeF9maXh1cCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuY19oZWFkZXIJKmhlYWRlcjsKKwlzdHJ1Y3QgbmNfdHJhaWxlcgkqdHJhaWxlcjsKKwl1MTYJCQloZHJfbGVuLCBwYWNrZXRfbGVuOworCisJaWYgKCEoc2tiLT5sZW4gJiAweDAxKQorCQkJfHwgTUlOX0ZSQU1FRCA+IHNrYi0+bGVuCisJCQl8fCBza2ItPmxlbiA+IEZSQU1FRF9TSVpFIChkZXYtPm5ldC0+bXR1KSkgeworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlkYmcgKCJyeCBmcmFtZXNpemUgJWQgcmFuZ2UgJWQuLiVkIG10dSAlZCIsIHNrYi0+bGVuLAorCQkJKGludClNSU5fRlJBTUVELCAoaW50KUZSQU1FRF9TSVpFIChkZXYtPm5ldC0+bXR1KSwKKwkJCWRldi0+bmV0LT5tdHUpOworCQluY19lbnN1cmVfc3luYyAoZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaGVhZGVyID0gKHN0cnVjdCBuY19oZWFkZXIgKikgc2tiLT5kYXRhOworCWhkcl9sZW4gPSBsZTE2X3RvX2NwdXAgKCZoZWFkZXItPmhkcl9sZW4pOworCXBhY2tldF9sZW4gPSBsZTE2X3RvX2NwdXAgKCZoZWFkZXItPnBhY2tldF9sZW4pOworCWlmIChGUkFNRURfU0laRSAocGFja2V0X2xlbikgPiBNQVhfUEFDS0VUKSB7CisJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWRiZyAoInBhY2tldCB0b28gYmlnLCAlZCIsIHBhY2tldF9sZW4pOworCQluY19lbnN1cmVfc3luYyAoZGV2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChoZHJfbGVuIDwgTUlOX0hFQURFUikgeworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlkYmcgKCJoZWFkZXIgdG9vIHNob3J0LCAlZCIsIGhkcl9sZW4pOworCQluY19lbnN1cmVfc3luYyAoZGV2KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChoZHJfbGVuID4gTUlOX0hFQURFUikgeworCQkvLyBvdXQgb2YgYmFuZCBkYXRhIGZvciB1cz8KKwkJZGJnICgiaGVhZGVyIE9PQiwgJWQgYnl0ZXMiLCBoZHJfbGVuIC0gTUlOX0hFQURFUik7CisJCW5jX2Vuc3VyZV9zeW5jIChkZXYpOworCQkvLyBzd2l0Y2ggKHZlbmRvci9wcm9kdWN0IGlkcykgeyAuLi4gfQorCX0KKwlza2JfcHVsbCAoc2tiLCBoZHJfbGVuKTsKKworCXRyYWlsZXIgPSAoc3RydWN0IG5jX3RyYWlsZXIgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mICp0cmFpbGVyKTsKKwlza2JfdHJpbSAoc2tiLCBza2ItPmxlbiAtIHNpemVvZiAqdHJhaWxlcik7CisKKwlpZiAoKHBhY2tldF9sZW4gJiAweDAxKSA9PSAwKSB7CisJCWlmIChza2ItPmRhdGEgW3BhY2tldF9sZW5dICE9IFBBRF9CWVRFKSB7CisJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJZGJnICgiYmFkIHBhZCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2tiX3RyaW0gKHNrYiwgc2tiLT5sZW4gLSAxKTsKKwl9CisJaWYgKHNrYi0+bGVuICE9IHBhY2tldF9sZW4pIHsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJZGJnICgiYmFkIHBhY2tldCBsZW4gJWQgKGV4cGVjdGVkICVkKSIsCisJCQlza2ItPmxlbiwgcGFja2V0X2xlbik7CisJCW5jX2Vuc3VyZV9zeW5jIChkZXYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGhlYWRlci0+cGFja2V0X2lkICE9IGdldF91bmFsaWduZWQgKCZ0cmFpbGVyLT5wYWNrZXRfaWQpKSB7CisJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJZGJnICgiKDIrIGRyb3BwZWQpIHJ4IHBhY2tldF9pZCBtaXNtYXRjaCAweCV4IDB4JXgiLAorCQkJbGUxNl90b19jcHUgKGhlYWRlci0+cGFja2V0X2lkKSwKKwkJCWxlMTZfdG9fY3B1ICh0cmFpbGVyLT5wYWNrZXRfaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorI2lmIDAKKwlkZXZkYmcgKGRldiwgImZyYW1lIDxyeCBoICVkIHAgJWQgaWQgJWQiLCBoZWFkZXItPmhkcl9sZW4sCisJCWhlYWRlci0+cGFja2V0X2xlbiwgaGVhZGVyLT5wYWNrZXRfaWQpOworI2VuZGlmCisJZGV2LT5mcmFtZV9lcnJvcnMgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorbmV0MTA4MF90eF9maXh1cCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpCit7CisJaW50CQkJcGFkbGVuOworCXN0cnVjdCBza19idWZmCQkqc2tiMjsKKworCXBhZGxlbiA9ICgoc2tiLT5sZW4gKyBzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpCisJCQkrIHNpemVvZiAoc3RydWN0IG5jX3RyYWlsZXIpKSAmIDB4MDEpID8gMCA6IDE7CisJaWYgKCFza2JfY2xvbmVkIChza2IpKSB7CisJCWludAloZWFkcm9vbSA9IHNrYl9oZWFkcm9vbSAoc2tiKTsKKwkJaW50CXRhaWxyb29tID0gc2tiX3RhaWxyb29tIChza2IpOworCisJCWlmICgocGFkbGVuICsgc2l6ZW9mIChzdHJ1Y3QgbmNfdHJhaWxlcikpIDw9IHRhaWxyb29tCisJCQkgICAgJiYgc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSA8PSBoZWFkcm9vbSkKKwkJCS8qIFRoZXJlJ3MgZW5vdWdoIGhlYWQgYW5kIHRhaWwgcm9vbSAqLworCQkJcmV0dXJuIHNrYjsKKworCQlpZiAoKHNpemVvZiAoc3RydWN0IG5jX2hlYWRlcikgKyBwYWRsZW4KKwkJCQkJKyBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSkgPAorCQkJCShoZWFkcm9vbSArIHRhaWxyb29tKSkgeworCQkJLyogVGhlcmUncyBlbm91Z2ggdG90YWwgcm9vbSwgc28ganVzdCByZWFkanVzdCAqLworCQkJc2tiLT5kYXRhID0gbWVtbW92ZSAoc2tiLT5oZWFkCisJCQkJCQkrIHNpemVvZiAoc3RydWN0IG5jX2hlYWRlciksCisJCQkJCSAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOworCQkJcmV0dXJuIHNrYjsKKwkJfQorCX0KKworCS8qIENyZWF0ZSBhIG5ldyBza2IgdG8gdXNlIHdpdGggdGhlIGNvcnJlY3Qgc2l6ZSAqLworCXNrYjIgPSBza2JfY29weV9leHBhbmQgKHNrYiwKKwkJCQlzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpLAorCQkJCXNpemVvZiAoc3RydWN0IG5jX3RyYWlsZXIpICsgcGFkbGVuLAorCQkJCWZsYWdzKTsKKwlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwlyZXR1cm4gc2tiMjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwluZXQxMDgwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIk5ldENoaXAgVHVyYm9DT05ORUNUIiwKKwkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfTkMsCisJLnJlc2V0ID0JbmV0MTA4MF9yZXNldCwKKwkuY2hlY2tfY29ubmVjdCA9bmV0MTA4MF9jaGVja19jb25uZWN0LAorCS5yeF9maXh1cCA9CW5ldDEwODBfcnhfZml4dXAsCisJLnR4X2ZpeHVwID0JbmV0MTA4MF90eF9maXh1cCwKK307CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX05FVDEwODAgKi8KKworCisMCisjaWZkZWYgQ09ORklHX1VTQl9QTDIzMDEKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBQcm9saWZpYyBQTC0yMzAxL1BMLTIzMDIgZHJpdmVyIC4uLiBodHRwOi8vd3d3LnByb2xpZmljdGVjaC5jb20KKyAqCisgKiBUaGUgcHJvdG9jb2wgYW5kIGhhbmRzaGFraW5nIHVzZWQgaGVyZSBzaG91bGQgYmUgYnVnLWNvbXBhdGlibGUKKyAqIHdpdGggdGhlIExpbnV4IDIuMiAicGx1c2IiIGRyaXZlciwgYnkgRGV0aSBGbGllZ2wuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEJpdHMgMC00IGNhbiBiZSB1c2VkIGZvciBzb2Z0d2FyZSBoYW5kc2hha2luZzsgdGhleSdyZSBzZXQgZnJvbQorICogb25lIGVuZCwgY2xlYXJlZCBmcm9tIHRoZSBvdGhlciwgInJlYWQiIHdpdGggdGhlIGludGVycnVwdCBieXRlLgorICovCisjZGVmaW5lCVBMX1NfRU4JCSgxPDw3KQkJLyogKGZlYXR1cmUgb25seSkgc3VzcGVuZCBlbmFibGUgKi8KKy8qIHJlc2VydmVkIGJpdCAtLSByeCByZWFkeSAoNikgPyAqLworI2RlZmluZQlQTF9UWF9SRUFEWQkoMTw8NSkJCS8qIChpbnRlcnJ1cHQgb25seSkgdHJhbnNtaXQgcmVhZHkgKi8KKyNkZWZpbmUJUExfUkVTRVRfT1VUCSgxPDw0KQkJLyogcmVzZXQgb3V0cHV0IHBpcGUgKi8KKyNkZWZpbmUJUExfUkVTRVRfSU4JKDE8PDMpCQkvKiByZXNldCBpbnB1dCBwaXBlICovCisjZGVmaW5lCVBMX1RYX0MJCSgxPDwyKQkJLyogdHJhbnNtaXNzaW9uIGNvbXBsZXRlICovCisjZGVmaW5lCVBMX1RYX1JFUQkoMTw8MSkJCS8qIHRyYW5zbWlzc2lvbiByZWNlaXZlZCAqLworI2RlZmluZQlQTF9QRUVSX0UJKDE8PDApCQkvKiBwZWVyIGV4aXN0cyAqLworCitzdGF0aWMgaW5saW5lIGludAorcGxfdmVuZG9yX3JlcSAoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHZhbCwgdTggaW5kZXgpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCXJlcSwKKwkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCXZhbCwgaW5kZXgsCisJCU5VTEwsIDAsCisJCUNPTlRST0xfVElNRU9VVF9NUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitwbF9jbGVhcl9RdWlja0xpbmtfZmVhdHVyZXMgKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHZhbCkKK3sKKwlyZXR1cm4gcGxfdmVuZG9yX3JlcSAoZGV2LCAxLCAodTgpIHZhbCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitwbF9zZXRfUXVpY2tMaW5rX2ZlYXR1cmVzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCB2YWwpCit7CisJcmV0dXJuIHBsX3ZlbmRvcl9yZXEgKGRldiwgMywgKHU4KSB2YWwsIDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHBsX3Jlc2V0IChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJLyogc29tZSB1bml0cyBzZWVtIHRvIG5lZWQgdGhpcyByZXNldCwgb3RoZXJzIHJlamVjdCBpdCB1dHRlcmx5LgorCSAqIEZJWE1FIGJlIG1vcmUgbGlrZSAibmFwbGluayIgb3Igd2luZG93cyBkcml2ZXJzLgorCSAqLworCSh2b2lkKSBwbF9zZXRfUXVpY2tMaW5rX2ZlYXR1cmVzIChkZXYsCisJCVBMX1NfRU58UExfUkVTRVRfT1VUfFBMX1JFU0VUX0lOfFBMX1BFRVJfRSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JcHJvbGlmaWNfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiUHJvbGlmaWMgUEwtMjMwMS9QTC0yMzAyIiwKKwkuZmxhZ3MgPQlGTEFHX05PX1NFVElOVCwKKwkJLyogc29tZSBQTC0yMzAyIHZlcnNpb25zIHNlZW0gdG8gZmFpbCB1c2Jfc2V0X2ludGVyZmFjZSgpICovCisJLnJlc2V0ID0JcGxfcmVzZXQsCit9OworCisjZW5kaWYgLyogQ09ORklHX1VTQl9QTDIzMDEgKi8KKworDAorI2lmZGVmIENPTkZJR19VU0JfS0MyMTkwCisjZGVmaW5lIEhBVkVfSEFSRFdBUkUKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8ga2MyMTkwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gICJLQyBUZWNobm9sb2d5IEtDLTE5MCIsCit9OworI2VuZGlmIC8qIENPTkZJR19VU0JfS0MyMTkwICovCisKKwwKKyNpZmRlZglDT05GSUdfVVNCX0FSTUxJTlVYCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogSW50ZWwncyBTQS0xMTAwIGNoaXAgaW50ZWdyYXRlcyBiYXNpYyBVU0Igc3VwcG9ydCwgYW5kIGlzIHVzZWQKKyAqIGluIFBEQXMgbGlrZSBzb21lIGlQYXFzLCB0aGUgWW9weSwgc29tZSBaYXVydXMgbW9kZWxzLCBhbmQgbW9yZS4KKyAqIFdoZW4gdGhleSBydW4gTGludXgsIGFyY2gvYXJtL21hY2gtc2ExMTAwL3VzYi1ldGguYyBtYXkgYmUgdXNlZCB0bworICogbmV0d29yayB1c2luZyBtaW5pbWFsIFVTQiBmcmFtaW5nIGRhdGEuCisgKgorICogVGhpcyBkZXNjcmliZXMgdGhlIGRyaXZlciBjdXJyZW50bHkgaW4gc3RhbmRhcmQgQVJNIExpbnV4IGtlcm5lbHMuCisgKiBUaGUgWmF1cnVzIHVzZXMgYSBkaWZmZXJlbnQgZHJpdmVyIChzZWUgbGF0ZXIpLgorICoKKyAqIFBYQTI1eCBhbmQgUFhBMjEwIHVzZSBYU2NhbGUgY29yZXMgKEFSTSB2NVRFKSB3aXRoIGJldHRlciBVU0Igc3VwcG9ydAorICogYW5kIGRpZmZlcmVudCBVU0IgZW5kcG9pbnQgbnVtYmVyaW5nIHRoYW4gdGhlIFNBMTEwMCBkZXZpY2VzLiAgVGhlCisgKiBtYWNoLXB4YS91c2ItZXRoLmMgZHJpdmVyIHJlLXVzZXMgdGhlIGRldmljZSBpZHMgZnJvbSBtYWNoLXNhMTEwMAorICogc28gd2UgcmVseSBvbiB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlsaW51eGRldl9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJMaW51eCBEZXZpY2UiLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JeW9weV9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJZb3B5IiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWJsb2JfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiQm9vdCBMb2FkZXIgT0JqZWN0IiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCit9OworCisjZW5kaWYJLyogQ09ORklHX1VTQl9BUk1MSU5VWCAqLworCisMCisjaWZkZWYgQ09ORklHX1VTQl9aQVVSVVMKKyNkZWZpbmUJSEFWRV9IQVJEV0FSRQorCisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogWmF1cnVzIGlzIGFsc28gYSBTQS0xMTEwIGJhc2VkIFBEQSwgYnV0IG9uZSB1c2luZyBhIGRpZmZlcmVudCBkcml2ZXIKKyAqIChhbmQgZnJhbWluZykgZm9yIGl0cyBVU0Igc2xhdmUvZ2FkZ2V0IGNvbnRyb2xsZXIgdGhhbiB0aGUgY2FzZSBhYm92ZS4KKyAqCisgKiBGb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGF0IGRyaXZlciwgdGhlIG1haW4gd2F5IHRoYXQgZnJhbWluZyBpcworICogbm9uc3RhbmRhcmQgKGFsc28gZnJvbSBwZXJzcGVjdGl2ZSBvZiB0aGUgQ0RDIGV0aGVybmV0IG1vZGVsISkgaXMgYQorICogY3JjMzIsIGFkZGVkIHRvIGhlbHAgZGV0ZWN0IHdoZW4gc29tZSBzYTExMDAgdXNiLXRvLW1lbW9yeSBETUEgZXJyYXRhCisgKiBoYXZlbid0IGJlZW4gZnVsbHkgd29ya2VkIGFyb3VuZC4gIEFsc28sIGFsbCBaYXVyaWkgdXNlIHRoZSBzYW1lCisgKiBkZWZhdWx0IEV0aGVybmV0IGFkZHJlc3MuCisgKgorICogUFhBIGJhc2VkIG1vZGVscyB1c2UgdGhlIHNhbWUgZnJhbWluZywgYW5kIGFsc28gY2FuJ3QgaW1wbGVtZW50CisgKiBzZXRfaW50ZXJmYWNlIHByb3Blcmx5LgorICoKKyAqIEFsbCBrbm93biBaYXVyaWkgbGllIGFib3V0IHRoZWlyIHN0YW5kYXJkcyBjb25mb3JtYW5jZS4gIE1vc3QgbGllIGJ5CisgKiBzYXlpbmcgdGhleSBzdXBwb3J0IENEQyBFdGhlcm5ldC4gIFNvbWUgbGllIGFuZCBzYXkgdGhleSBzdXBwb3J0IENEQworICogTURMTSAoYXMgaWYgZm9yIGFjY2VzcyB0byBjZWxsIHBob25lIG1vZGVtcykuICBTb21lb25lLCBwbGVhc2UgYmVhdCAKKyAqIG9uIFNoYXJwIGZvciBhIHdoaWxlIHdpdGggYSBjbHVlc3RpY2suCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK3phdXJ1c190eF9maXh1cCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmxhZ3MpCit7CisJaW50CQkJcGFkbGVuOworCXN0cnVjdCBza19idWZmCQkqc2tiMjsKKworCXBhZGxlbiA9IDI7CisJaWYgKCFza2JfY2xvbmVkIChza2IpKSB7CisJCWludAl0YWlscm9vbSA9IHNrYl90YWlscm9vbSAoc2tiKTsKKwkJaWYgKChwYWRsZW4gKyA0KSA8PSB0YWlscm9vbSkKKwkJCWdvdG8gZG9uZTsKKwl9CisJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZCAoc2tiLCAwLCA0ICsgcGFkbGVuLCBmbGFncyk7CisJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJc2tiID0gc2tiMjsKKwlpZiAoc2tiKSB7CisJCXUzMgkJZmNzOworZG9uZToKKwkJZmNzID0gY3JjMzJfbGUgKH4wLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJZmNzID0gfmZjczsKKworCQkqc2tiX3B1dCAoc2tiLCAxKSA9IGZjcyAgICAgICAmIDB4ZmY7CisJCSpza2JfcHV0IChza2IsIDEpID0gKGZjcz4+IDgpICYgMHhmZjsKKwkJKnNrYl9wdXQgKHNrYiwgMSkgPSAoZmNzPj4xNikgJiAweGZmOworCQkqc2tiX3B1dCAoc2tiLCAxKSA9IChmY3M+PjI0KSAmIDB4ZmY7CisJfQorCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JemF1cnVzX3NsNXgwMF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJTaGFycCBaYXVydXMgU0wtNXgwMCIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorCS5iaW5kID0JCWdlbmVyaWNfY2RjX2JpbmQsCisJLnVuYmluZCA9CWNkY191bmJpbmQsCisJLnR4X2ZpeHVwID0gCXphdXJ1c190eF9maXh1cCwKK307CisjZGVmaW5lCVpBVVJVU19TVFJPTkdBUk1fSU5GTwkoKHVuc2lnbmVkIGxvbmcpJnphdXJ1c19zbDV4MDBfaW5mbykKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwl6YXVydXNfcHhhX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIlNoYXJwIFphdXJ1cywgUFhBLTJ4eCBiYXNlZCIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorCS5iaW5kID0JCWdlbmVyaWNfY2RjX2JpbmQsCisJLnVuYmluZCA9CWNkY191bmJpbmQsCisJLnR4X2ZpeHVwID0gCXphdXJ1c190eF9maXh1cCwKK307CisjZGVmaW5lCVpBVVJVU19QWEFfSU5GTwkJKCh1bnNpZ25lZCBsb25nKSZ6YXVydXNfcHhhX2luZm8pCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JemF1cnVzX3B4YV9tZGxtX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIlNoYXJwIFphdXJ1cywgUFhBLTI1NSBiYXNlZCIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX1osCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorCS50eF9maXh1cCA9IAl6YXVydXNfdHhfZml4dXAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCW9seW1wdXNfbXhsX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIk9seW1wdXMgUjEwMDAiLAorCS5mbGFncyA9CUZMQUdfRlJBTUlOR19aLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKwkuYmluZCA9CQlnZW5lcmljX2NkY19iaW5kLAorCS51bmJpbmQgPQljZGNfdW5iaW5kLAorCS50eF9maXh1cCA9IAl6YXVydXNfdHhfZml4dXAsCit9OworI2RlZmluZQlPTFlNUFVTX01YTF9JTkZPCSgodW5zaWduZWQgbG9uZykmb2x5bXB1c19teGxfaW5mbykKKworI2Vsc2UKKworLyogYmxhY2tsaXN0IGFsbCB0aG9zZSBkZXZpY2VzICovCisjZGVmaW5lCVpBVVJVU19TVFJPTkdBUk1fSU5GTwkwCisjZGVmaW5lCVpBVVJVU19QWEFfSU5GTwkJMAorI2RlZmluZQlPTFlNUFVTX01YTF9JTkZPCTAKKworI2VuZGlmCisKKwwKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5ldHdvcmsgRGV2aWNlIERyaXZlciAocGVlciBsaW5rIHRvICJIb3N0IERldmljZSIsIGZyb20gVVNCIGhvc3QpCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWlmIChuZXdfbXR1IDw9IE1JTl9QQUNLRVQgfHwgbmV3X210dSA+IE1BWF9QQUNLRVQpCisJCXJldHVybiAtRUlOVkFMOworI2lmZGVmCUNPTkZJR19VU0JfTkVUMTA4MAorCWlmICgoKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzKSAmIEZMQUdfRlJBTUlOR19OQykpIHsKKwkJaWYgKEZSQU1FRF9TSVpFIChuZXdfbXR1KSA+IE1BWF9QQUNLRVQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjZW5kaWYKKyNpZmRlZglDT05GSUdfVVNCX0dFTkVTWVMKKwlpZiAoKChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncykgJiBGTEFHX0ZSQU1JTkdfR0wpCisJCQkmJiBuZXdfbXR1ID4gR0xfTUFYX1BBQ0tFVF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisJLy8gbm8gc2Vjb25kIHplcm8tbGVuZ3RoIHBhY2tldCByZWFkIHdhbnRlZCBhZnRlciBtdHUtc2l6ZWQgcGFja2V0cworCWlmICgoKG5ld19tdHUgKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpKSAlIGRldi0+bWF4cGFja2V0KSA9PSAwKQorCQlyZXR1cm4gLUVET007CisJbmV0LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnVzYm5ldF9nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlyZXR1cm4gJmRldi0+c3RhdHM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHNvbWUgTEsgMi40IEhDRHMgb29wc2VkIGlmIHdlIGZyZWVkIG9yIHJlc3VibWl0dGVkIHVyYnMgZnJvbQorICogY29tcGxldGlvbiBjYWxsYmFja3MuICAyLjUgc2hvdWxkIGhhdmUgZml4ZWQgdGhvc2UgYnVncy4uLgorICovCisKK3N0YXRpYyB2b2lkIGRlZmVyX2JoIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAkqbGlzdCA9IHNrYi0+bGlzdDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmbGlzdC0+bG9jaywgZmxhZ3MpOworCV9fc2tiX3VubGluayAoc2tiLCBsaXN0KTsKKwlzcGluX3VubG9jayAoJmxpc3QtPmxvY2spOworCXNwaW5fbG9jayAoJmRldi0+ZG9uZS5sb2NrKTsKKwlfX3NrYl9xdWV1ZV90YWlsICgmZGV2LT5kb25lLCBza2IpOworCWlmIChkZXYtPmRvbmUucWxlbiA9PSAxKQorCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+ZG9uZS5sb2NrLCBmbGFncyk7Cit9CisKKy8qIHNvbWUgd29yayBjYW4ndCBiZSBkb25lIGluIHRhc2tsZXRzLCBzbyB3ZSB1c2Uga2V2ZW50ZAorICoKKyAqIE5PVEU6ICBhbm5veWluZyBhc3ltbWV0cnk6ICBpZiBpdCdzIGFjdGl2ZSwgc2NoZWR1bGVfd29yaygpIGZhaWxzLAorICogYnV0IHRhc2tsZXRfc2NoZWR1bGUoKSBkb2Vzbid0LiAgaG9wZSB0aGUgZmFpbHVyZSBpcyByYXJlLgorICovCitzdGF0aWMgdm9pZCBkZWZlcl9rZXZlbnQgKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHdvcmspCit7CisJc2V0X2JpdCAod29yaywgJmRldi0+ZmxhZ3MpOworCWlmICghc2NoZWR1bGVfd29yayAoJmRldi0+a2V2ZW50KSkKKwkJZGV2ZXJyIChkZXYsICJrZXZlbnQgJWQgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIiwgd29yayk7CisJZWxzZQorCQlkZXZkYmcgKGRldiwgImtldmVudCAlZCBzY2hlZHVsZWQiLCB3b3JrKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcnhfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgdm9pZCByeF9zdWJtaXQgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJc3RydWN0IHNrYl9kYXRhCQkqZW50cnk7CisJaW50CQkJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nCQlsb2NrZmxhZ3M7CisJc2l6ZV90CQkJc2l6ZTsKKworI2lmZGVmIENPTkZJR19VU0JfTkVUMTA4MAorCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykKKwkJc2l6ZSA9IEZSQU1FRF9TSVpFIChkZXYtPm5ldC0+bXR1KTsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX0dFTkVTWVMKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfR0wpCisJCXNpemUgPSBHTF9SQ1ZfQlVGX1NJWkU7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9aQVVSVVMKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfWikKKwkJc2l6ZSA9IDYgKyAoc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSArIGRldi0+bmV0LT5tdHUpOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfUk5ESVMKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfUk4pCisJCXNpemUgPSBSTkRJU19NQVhfVFJBTlNGRVI7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9BWDg4MTdYCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0FYKQorCQlzaXplID0gMjA0ODsKKwllbHNlCisjZW5kaWYKKwkJc2l6ZSA9IChzaXplb2YgKHN0cnVjdCBldGhoZHIpICsgZGV2LT5uZXQtPm10dSk7CisKKwlpZiAoKHNrYiA9IGFsbG9jX3NrYiAoc2l6ZSArIE5FVF9JUF9BTElHTiwgZmxhZ3MpKSA9PSBOVUxMKSB7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJubyByeCBza2IiKTsKKwkJZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX01FTU9SWSk7CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZSAoc2tiLCBORVRfSVBfQUxJR04pOworCisJZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi0+Y2I7CisJZW50cnktPnVyYiA9IHVyYjsKKwllbnRyeS0+ZGV2ID0gZGV2OworCWVudHJ5LT5zdGF0ZSA9IHJ4X3N0YXJ0OworCWVudHJ5LT5sZW5ndGggPSAwOworCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgZGV2LT51ZGV2LCBkZXYtPmluLAorCQlza2ItPmRhdGEsIHNpemUsIHJ4X2NvbXBsZXRlLCBza2IpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5yeHEubG9jaywgbG9ja2ZsYWdzKTsKKworCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkKKwkJCSYmIG5ldGlmX2RldmljZV9wcmVzZW50IChkZXYtPm5ldCkKKwkJCSYmICF0ZXN0X2JpdCAoRVZFTlRfUlhfSEFMVCwgJmRldi0+ZmxhZ3MpKSB7CisJCXN3aXRjaCAocmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQykpeyAKKwkJY2FzZSAtRVBJUEU6CisJCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfSEFMVCk7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX01FTU9SWSk7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PREVWOgorCQkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJkZXZpY2UgZ29uZSIpOworCQkJbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2LT5uZXQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgInJ4IHN1Ym1pdCwgJWQiLCByZXR2YWwpOworCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCV9fc2tiX3F1ZXVlX3RhaWwgKCZkZXYtPnJ4cSwgc2tiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJyeDogc3RvcHBlZCIpOworCQlyZXR2YWwgPSAtRU5PTElOSzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+cnhxLmxvY2ssIGxvY2tmbGFncyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJdXNiX2ZyZWVfdXJiICh1cmIpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQgcnhfcHJvY2VzcyAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5yeF9maXh1cAorCQkJJiYgIWRldi0+ZHJpdmVyX2luZm8tPnJ4X2ZpeHVwIChkZXYsIHNrYikpCisJCWdvdG8gZXJyb3I7CisJLy8gZWxzZSBuZXR3b3JrIHN0YWNrIHJlbW92ZXMgZXh0cmEgYnl0ZSBpZiB3ZSBmb3JjZWQgYSBzaG9ydCBwYWNrZXQKKworCWlmIChza2ItPmxlbikKKwkJc2tiX3JldHVybiAoZGV2LCBza2IpOworCWVsc2UgeworCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiZHJvcCIpOworZXJyb3I6CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCXNrYl9xdWV1ZV90YWlsICgmZGV2LT5kb25lLCBza2IpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcnhfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNrX2J1ZmYJCSpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBza2JfZGF0YQkJKmVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItPmNiOworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0+ZGV2OworCWludAkJCXVyYl9zdGF0dXMgPSB1cmItPnN0YXR1czsKKworCXNrYl9wdXQgKHNrYiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwllbnRyeS0+c3RhdGUgPSByeF9kb25lOworCWVudHJ5LT51cmIgPSBOVUxMOworCisJc3dpdGNoICh1cmJfc3RhdHVzKSB7CisJICAgIC8vIHN1Y2Nlc3MKKwkgICAgY2FzZSAwOgorCQlpZiAoTUlOX1BBQ0tFVCA+IHNrYi0+bGVuIHx8IHNrYi0+bGVuID4gTUFYX1BBQ0tFVCkgeworCQkJZW50cnktPnN0YXRlID0gcnhfY2xlYW51cDsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAicnggbGVuZ3RoICVkIiwgc2tiLT5sZW4pOworCQl9CisJCWJyZWFrOworCisJICAgIC8vIHN0YWxscyBuZWVkIG1hbnVhbCByZXNldC4gdGhpcyBpcyByYXJlIC4uLiBleGNlcHQgdGhhdAorCSAgICAvLyB3aGVuIGdvaW5nIHRocm91Z2ggVVNCIDIuMCBUVHMsIHVucGx1ZyBhcHBlYXJzIHRoaXMgd2F5LgorCSAgICAvLyB3ZSBhdm9pZCB0aGUgaGlnaHNwZWVkIHZlcnNpb24gb2YgdGhlIEVUSU1FT1VUL0VJTFNFUQorCSAgICAvLyBzdG9ybSwgcmVjb3ZlcmluZyBhcyBuZWVkZWQuCisJICAgIGNhc2UgLUVQSVBFOgorCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfSEFMVCk7CisJCS8vIEZBTExUSFJPVUdICisKKwkgICAgLy8gc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93bgorCSAgICBjYXNlIC1FQ09OTlJFU0VUOgkJLy8gYXN5bmMgdW5saW5rCisJICAgIGNhc2UgLUVTSFVURE9XTjoJCS8vIGhhcmR3YXJlIGdvbmUKKwkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCisJCQlkZXZkYmcgKGRldiwgInJ4IHNodXRkb3duLCBjb2RlICVkIiwgdXJiX3N0YXR1cyk7CisJCWdvdG8gYmxvY2s7CisKKwkgICAgLy8gd2UgZ2V0IGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcga2h1YmQgZGlzY29ubmVjdCgpIGRlbGF5cy4KKwkgICAgLy8gdGhyb3R0bGUgZG93biByZXN1Ym1pdHMsIHRvIGF2b2lkIGxvZyBmbG9vZHM7IGp1c3QgdGVtcG9yYXJpbHksCisJICAgIC8vIHNvIHdlIHN0aWxsIHJlY292ZXIgd2hlbiB0aGUgZmF1bHQgaXNuJ3QgYSBraHViZCBkZWxheS4KKwkgICAgY2FzZSAtRVBST1RPOgkJLy8gZWhjaQorCSAgICBjYXNlIC1FVElNRURPVVQ6CQkvLyBvaGNpCisJICAgIGNhc2UgLUVJTFNFUToJCS8vIHVoY2kKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJaWYgKCF0aW1lcl9wZW5kaW5nICgmZGV2LT5kZWxheSkpIHsKKwkJCW1vZF90aW1lciAoJmRldi0+ZGVsYXksIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCWlmIChuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgInJ4IHRocm90dGxlICVkIiwgdXJiX3N0YXR1cyk7CisJCX0KK2Jsb2NrOgorCQllbnRyeS0+c3RhdGUgPSByeF9jbGVhbnVwOworCQllbnRyeS0+dXJiID0gdXJiOworCQl1cmIgPSBOVUxMOworCQlicmVhazsKKworCSAgICAvLyBkYXRhIG92ZXJydW4gLi4uIGZsdXNoIGZpZm8/CisJICAgIGNhc2UgLUVPVkVSRkxPVzoKKwkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkvLyBGQUxMVEhST1VHSAorCSAgICAKKwkgICAgZGVmYXVsdDoKKwkJZW50cnktPnN0YXRlID0gcnhfY2xlYW51cDsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgInJ4IHN0YXR1cyAlZCIsIHVyYl9zdGF0dXMpOworCQlicmVhazsKKwl9CisKKwlkZWZlcl9iaCAoZGV2LCBza2IpOworCisJaWYgKHVyYikgeworCQlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpCisJCQkJJiYgIXRlc3RfYml0IChFVkVOVF9SWF9IQUxULCAmZGV2LT5mbGFncykpIHsKKwkJCXJ4X3N1Ym1pdCAoZGV2LCB1cmIsIEdGUF9BVE9NSUMpOworCQkJcmV0dXJuOworCQl9CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwl9CisJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCWRldmRiZyAoZGV2LCAibm8gcmVhZCByZXN1Ym1pdHRlZCIpOworfQorCitzdGF0aWMgdm9pZCBpbnRyX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JuZXQJKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwkgICAgLyogc3VjY2VzcyAqLworCSAgICBjYXNlIDA6CisJCWRldi0+ZHJpdmVyX2luZm8tPnN0YXR1cyhkZXYsIHVyYik7CisJCWJyZWFrOworCisJICAgIC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi8KKwkgICAgY2FzZSAtRU5PRU5UOgkJLy8gdXJiIGtpbGxlZAorCSAgICBjYXNlIC1FU0hVVERPV046CQkvLyBoYXJkd2FyZSBnb25lCisJCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJpbnRyIHNodXRkb3duLCBjb2RlICVkIiwgc3RhdHVzKTsKKwkJcmV0dXJuOworCisJICAgIC8qIE5PVEU6ICBub3QgdGhyb3R0bGluZyBsaWtlIFJYL1RYLCBzaW5jZSB0aGlzIGVuZHBvaW50CisJICAgICAqIGFscmVhZHkgcG9sbHMgaW5mcmVxdWVudGx5CisJICAgICAqLworCSAgICBkZWZhdWx0OgorCQlkZXZkYmcgKGRldiwgImludHIgc3RhdHVzICVkIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpCisJCXJldHVybjsKKworCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciwgMCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzICE9IDAgJiYgbmV0aWZfbXNnX3RpbWVyIChkZXYpKQorCQlkZXZlcnIoZGV2LCAiaW50ciByZXN1Ym1pdCAtLT4gJWQiLCBzdGF0dXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyB1bmxpbmsgcGVuZGluZyByeC90eDsgY29tcGxldGlvbiBoYW5kbGVycyBkbyBhbGwgb3RoZXIgY2xlYW51cAorCitzdGF0aWMgaW50IHVubGlua191cmJzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKnEpCit7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYJCSpza2IsICpza2JuZXh0OworCWludAkJCWNvdW50ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcS0+bG9jaywgZmxhZ3MpOworCWZvciAoc2tiID0gcS0+bmV4dDsgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBxOyBza2IgPSBza2JuZXh0KSB7CisJCXN0cnVjdCBza2JfZGF0YQkJKmVudHJ5OworCQlzdHJ1Y3QgdXJiCQkqdXJiOworCQlpbnQJCQlyZXR2YWw7CisKKwkJZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi0+Y2I7CisJCXVyYiA9IGVudHJ5LT51cmI7CisJCXNrYm5leHQgPSBza2ItPm5leHQ7CisKKwkJLy8gZHVyaW5nIHNvbWUgUE0tZHJpdmVuIHJlc3VtZSBzY2VuYXJpb3MsCisJCS8vIHRoZXNlIChhc3luYykgdW5saW5rcyBjb21wbGV0ZSBpbW1lZGlhdGVseQorCQlyZXR2YWwgPSB1c2JfdW5saW5rX3VyYiAodXJiKTsKKwkJaWYgKHJldHZhbCAhPSAtRUlOUFJPR1JFU1MgJiYgcmV0dmFsICE9IDApCisJCQlkZXZkYmcgKGRldiwgInVubGluayB1cmIgZXJyLCAlZCIsIHJldHZhbCk7CisJCWVsc2UKKwkJCWNvdW50Kys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNvdW50OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAorCitzdGF0aWMgaW50IHVzYm5ldF9zdG9wIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludAkJCXRlbXA7CisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQgKHVubGlua193YWtldXApOyAKKwlERUNMQVJFX1dBSVRRVUVVRSAod2FpdCwgY3VycmVudCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOworCisJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCisJCWRldmluZm8gKGRldiwgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZCIsCisJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMsIGRldi0+c3RhdHMudHhfcGFja2V0cywgCisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycywgZGV2LT5zdGF0cy50eF9lcnJvcnMKKwkJCSk7CisKKwkvLyBlbnN1cmUgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZlIHVyYnMKKwlhZGRfd2FpdF9xdWV1ZSAoJnVubGlua193YWtldXAsICZ3YWl0KTsKKwlkZXYtPndhaXQgPSAmdW5saW5rX3dha2V1cDsKKwl0ZW1wID0gdW5saW5rX3VyYnMgKGRldiwgJmRldi0+dHhxKSArIHVubGlua191cmJzIChkZXYsICZkZXYtPnJ4cSk7CisKKwkvLyBtYXliZSB3YWl0IGZvciBkZWxldGlvbnMgdG8gZmluaXNoLgorCXdoaWxlIChza2JfcXVldWVfbGVuICgmZGV2LT5yeHEpCisJCQkmJiBza2JfcXVldWVfbGVuICgmZGV2LT50eHEpCisJCQkmJiBza2JfcXVldWVfbGVuICgmZGV2LT5kb25lKSkgeworCQltc2xlZXAoVU5MSU5LX1RJTUVPVVRfTVMpOworCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAid2FpdGVkIGZvciAlZCB1cmIgY29tcGxldGlvbnMiLCB0ZW1wKTsKKwl9CisJZGV2LT53YWl0ID0gTlVMTDsKKwlyZW1vdmVfd2FpdF9xdWV1ZSAoJnVubGlua193YWtldXAsICZ3YWl0KTsgCisKKwl1c2Jfa2lsbF91cmIoZGV2LT5pbnRlcnJ1cHQpOworCisJLyogZGVmZXJyZWQgd29yayAodGFzaywgdGltZXIsIHNvZnRpcnEpIG11c3QgYWxzbyBzdG9wLgorCSAqIGNhbid0IGZsdXNoX3NjaGVkdWxlZF93b3JrKCkgdW50aWwgd2UgZHJvcCBydG5sIChsYXRlciksCisJICogZWxzZSB3b3JrZXJzIGNvdWxkIGRlYWRsb2NrOyBzbyBtYWtlIHdvcmtlcnMgYSBOT1AuCisJICovCisJZGV2LT5mbGFncyA9IDA7CisJZGVsX3RpbWVyX3N5bmMgKCZkZXYtPmRlbGF5KTsKKwl0YXNrbGV0X2tpbGwgKCZkZXYtPmJoKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBwb3N0cyByZWFkcywgYW5kIGVuYWJsZXMgd3JpdGUgcXVldWluZworCisvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKKworc3RhdGljIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQJCQlyZXR2YWwgPSAwOworCXN0cnVjdCBkcml2ZXJfaW5mbwkqaW5mbyA9IGRldi0+ZHJpdmVyX2luZm87CisKKwkvLyBwdXQgaW50byAia25vd24gc2FmZSIgc3RhdGUKKwlpZiAoaW5mby0+cmVzZXQgJiYgKHJldHZhbCA9IGluZm8tPnJlc2V0IChkZXYpKSA8IDApIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQorCQkJZGV2aW5mbyAoZGV2LAorCQkJCSJvcGVuIHJlc2V0IGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlcyIsCisJCQkJcmV0dmFsLAorCQkJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQkJaW5mby0+ZGVzY3JpcHRpb24pOworCQlnb3RvIGRvbmU7CisJfQorCisJLy8gaW5zaXN0IHBlZXIgYmUgY29ubmVjdGVkCisJaWYgKGluZm8tPmNoZWNrX2Nvbm5lY3QgJiYgKHJldHZhbCA9IGluZm8tPmNoZWNrX2Nvbm5lY3QgKGRldikpIDwgMCkgeworCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCisJCQlkZXZkYmcgKGRldiwgImNhbid0IG9wZW47ICVkIiwgcmV0dmFsKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIHN0YXJ0IGFueSBzdGF0dXMgaW50ZXJydXB0IHRyYW5zZmVyICovCisJaWYgKGRldi0+aW50ZXJydXB0KSB7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChkZXYtPmludGVycnVwdCwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCisJCQkJZGV2ZXJyIChkZXYsICJpbnRyIHN1Ym1pdCAlZCIsIHJldHZhbCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZSAobmV0KTsKKwlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpIHsKKwkJY2hhcgkqZnJhbWluZzsKKworCQlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfTkMpCisJCQlmcmFtaW5nID0gIk5ldENoaXAiOworCQllbHNlIGlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19HTCkKKwkJCWZyYW1pbmcgPSAiR2VuZVN5cyI7CisJCWVsc2UgaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX1opCisJCQlmcmFtaW5nID0gIlphdXJ1cyI7CisJCWVsc2UgaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX1JOKQorCQkJZnJhbWluZyA9ICJSTkRJUyI7CisJCWVsc2UgaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0FYKQorCQkJZnJhbWluZyA9ICJBU0lYIjsKKwkJZWxzZQorCQkJZnJhbWluZyA9ICJzaW1wbGUiOworCisJCWRldmluZm8gKGRldiwgIm9wZW46IGVuYWJsZSBxdWV1ZWluZyAiCisJCQkJIihyeCAlZCwgdHggJWQpIG10dSAlZCAlcyBmcmFtaW5nIiwKKwkJCVJYX1FMRU4gKGRldiksIFRYX1FMRU4gKGRldiksIGRldi0+bmV0LT5tdHUsCisJCQlmcmFtaW5nKTsKKwl9CisKKwkvLyBkZWxheSBwb3N0aW5nIHJlYWRzIHVudGlsIHdlJ3JlIGZ1bGx5IG9wZW4KKwl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7Citkb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVzYm5ldF9nZXRfZHJ2aW5mbyAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJc3RybmNweSAoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgc2l6ZW9mIGluZm8tPmRyaXZlcik7CisJc3RybmNweSAoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBpbmZvLT52ZXJzaW9uKTsKKwlzdHJuY3B5IChpbmZvLT5md192ZXJzaW9uLCBkZXYtPmRyaXZlcl9pbmZvLT5kZXNjcmlwdGlvbiwKKwkJc2l6ZW9mIGluZm8tPmZ3X3ZlcnNpb24pOworCXVzYl9tYWtlX3BhdGggKGRldi0+dWRldiwgaW5mby0+YnVzX2luZm8sIHNpemVvZiBpbmZvLT5idXNfaW5mbyk7Cit9CisKK3N0YXRpYyB1MzIgdXNibmV0X2dldF9saW5rIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwkvKiBJZiBhIGNoZWNrX2Nvbm5lY3QgaXMgZGVmaW5lZCwgcmV0dXJuIGl0J3MgcmVzdWx0cyAqLworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5jaGVja19jb25uZWN0KQorCQlyZXR1cm4gZGV2LT5kcml2ZXJfaW5mby0+Y2hlY2tfY29ubmVjdCAoZGV2KSA9PSAwOworCisJLyogT3RoZXJ3aXNlLCB3ZSdyZSB1cCB0byBhdm9pZCBicmVha2luZyBzY3JpcHRzICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1MzIgdXNibmV0X2dldF9tc2dsZXZlbCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJcmV0dXJuIGRldi0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgdXNibmV0X3NldF9tc2dsZXZlbCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdTMyIGxldmVsKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlkZXYtPm1zZ19lbmFibGUgPSBsZXZlbDsKK30KKworc3RhdGljIGludCB1c2JuZXRfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisjaWZkZWYgTkVFRF9NSUkKKwl7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWlmIChkZXYtPm1paS5tZGlvX3JlYWQgIT0gTlVMTCAmJiBkZXYtPm1paS5tZGlvX3dyaXRlICE9IE5VTEwpCisJCXJldHVybiBnZW5lcmljX21paV9pb2N0bCgmZGV2LT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7CisJfQorI2VuZGlmCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB3b3JrIHRoYXQgY2Fubm90IGJlIGRvbmUgaW4gaW50ZXJydXB0IGNvbnRleHQgdXNlcyBrZXZlbnRkLgorICoKKyAqIE5PVEU6ICB3aXRoIDIuNSB3ZSBjb3VsZCBkbyBtb3JlIG9mIHRoaXMgdXNpbmcgY29tcGxldGlvbiBjYWxsYmFja3MsCisgKiBlc3BlY2lhbGx5IG5vdyB0aGF0IGNvbnRyb2wgdHJhbnNmZXJzIGNhbiBiZSBxdWV1ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitrZXZlbnQgKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IGRhdGE7CisJaW50CQkJc3RhdHVzOworCisJLyogdXNiX2NsZWFyX2hhbHQoKSBuZWVkcyBhIHRocmVhZCBjb250ZXh0ICovCisJaWYgKHRlc3RfYml0IChFVkVOVF9UWF9IQUxULCAmZGV2LT5mbGFncykpIHsKKwkJdW5saW5rX3VyYnMgKGRldiwgJmRldi0+dHhxKTsKKwkJc3RhdHVzID0gdXNiX2NsZWFyX2hhbHQgKGRldi0+dWRldiwgZGV2LT5vdXQpOworCQlpZiAoc3RhdHVzIDwgMCAmJiBzdGF0dXMgIT0gLUVQSVBFKSB7CisJCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKKwkJCQlkZXZlcnIgKGRldiwgImNhbid0IGNsZWFyIHR4IGhhbHQsIHN0YXR1cyAlZCIsCisJCQkJCXN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9iaXQgKEVWRU5UX1RYX0hBTFQsICZkZXYtPmZsYWdzKTsKKwkJCW5ldGlmX3dha2VfcXVldWUgKGRldi0+bmV0KTsKKwkJfQorCX0KKwlpZiAodGVzdF9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKSkgeworCQl1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT5yeHEpOworCQlzdGF0dXMgPSB1c2JfY2xlYXJfaGFsdCAoZGV2LT51ZGV2LCBkZXYtPmluKTsKKwkJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1FUElQRSkgeworCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQkJZGV2ZXJyIChkZXYsICJjYW4ndCBjbGVhciByeCBoYWx0LCBzdGF0dXMgJWQiLAorCQkJCQlzdGF0dXMpOworCQl9IGVsc2UgeworCQkJY2xlYXJfYml0IChFVkVOVF9SWF9IQUxULCAmZGV2LT5mbGFncyk7CisJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJCX0KKwl9CisKKwkvKiB0YXNrbGV0IGNvdWxkIHJlc3VibWl0IGl0c2VsZiBmb3JldmVyIGlmIG1lbW9yeSBpcyB0aWdodCAqLworCWlmICh0ZXN0X2JpdCAoRVZFTlRfUlhfTUVNT1JZLCAmZGV2LT5mbGFncykpIHsKKwkJc3RydWN0IHVyYgkqdXJiID0gTlVMTDsKKworCQlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKQorCQkJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdCAoRVZFTlRfUlhfTUVNT1JZLCAmZGV2LT5mbGFncyk7CisJCWlmICh1cmIgIT0gTlVMTCkgeworCQkJY2xlYXJfYml0IChFVkVOVF9SWF9NRU1PUlksICZkZXYtPmZsYWdzKTsKKwkJCXJ4X3N1Ym1pdCAoZGV2LCB1cmIsIEdGUF9LRVJORUwpOworCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCQl9CisJfQorCisJaWYgKGRldi0+ZmxhZ3MpCisJCWRldmRiZyAoZGV2LCAia2V2ZW50IGRvbmUsIGZsYWdzID0gMHglbHgiLAorCQkJZGV2LT5mbGFncyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHR4X2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBza19idWZmCQkqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktPmRldjsKKworCWlmICh1cmItPnN0YXR1cyA9PSAwKSB7CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGVudHJ5LT5sZW5ndGg7CisJfSBlbHNlIHsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKworCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgLUVQSVBFOgorCQkJZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1RYX0hBTFQpOworCQkJYnJlYWs7CisKKwkJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLworCQljYXNlIC1FQ09OTlJFU0VUOgkJLy8gYXN5bmMgdW5saW5rCisJCWNhc2UgLUVTSFVURE9XTjoJCS8vIGhhcmR3YXJlIGdvbmUKKwkJCWJyZWFrOworCisJCS8vIGxpa2UgcngsIHR4IGdldHMgY29udHJvbGxlciBpL28gZmF1bHRzIGR1cmluZyBraHViZCBkZWxheXMKKwkJLy8gYW5kIHNvIGl0IHVzZXMgdGhlIHNhbWUgdGhyb3R0bGluZyBtZWNoYW5pc20uCisJCWNhc2UgLUVQUk9UTzoJCS8vIGVoY2kKKwkJY2FzZSAtRVRJTUVET1VUOgkvLyBvaGNpCisJCWNhc2UgLUVJTFNFUToJCS8vIHVoY2kKKwkJCWlmICghdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpKSB7CisJCQkJbW9kX3RpbWVyICgmZGV2LT5kZWxheSwKKwkJCQkJamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOworCQkJCWlmIChuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJCQkJZGV2ZGJnIChkZXYsICJ0eCB0aHJvdHRsZSAlZCIsCisJCQkJCQkJdXJiLT5zdGF0dXMpOworCQkJfQorCQkJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgInR4IGVyciAlZCIsIGVudHJ5LT51cmItPnN0YXR1cyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXVyYi0+ZGV2ID0gTlVMTDsKKwllbnRyeS0+c3RhdGUgPSB0eF9kb25lOworCWRlZmVyX2JoIChkZXYsIHNrYik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJdW5saW5rX3VyYnMgKGRldiwgJmRldi0+dHhxKTsKKwl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisKKwkvLyBGSVhNRTogZGV2aWNlIHJlY292ZXJ5IC0tIHJlc2V0PworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHVzYm5ldF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludAkJCWxlbmd0aDsKKwlpbnQJCQlyZXR2YWwgPSBORVRfWE1JVF9TVUNDRVNTOworCXN0cnVjdCB1cmIJCSp1cmIgPSBOVUxMOworCXN0cnVjdCBza2JfZGF0YQkJKmVudHJ5OworCXN0cnVjdCBkcml2ZXJfaW5mbwkqaW5mbyA9IGRldi0+ZHJpdmVyX2luZm87CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisjaWZkZWYJQ09ORklHX1VTQl9ORVQxMDgwCisJc3RydWN0IG5jX2hlYWRlcgkqaGVhZGVyID0gTlVMTDsKKwlzdHJ1Y3QgbmNfdHJhaWxlcgkqdHJhaWxlciA9IE5VTEw7CisjZW5kaWYJLyogQ09ORklHX1VTQl9ORVQxMDgwICovCisKKwkvLyBzb21lIGRldmljZXMgd2FudCBmdW5reSBVU0ItbGV2ZWwgZnJhbWluZywgZm9yCisJLy8gd2luMzIgZHJpdmVyICh1c3VhbGx5KSBhbmQvb3IgaGFyZHdhcmUgcXVpcmtzCisJaWYgKGluZm8tPnR4X2ZpeHVwKSB7CisJCXNrYiA9IGluZm8tPnR4X2ZpeHVwIChkZXYsIHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiKSB7CisJCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgImNhbid0IHR4X2ZpeHVwIHNrYiIpOworCQkJZ290byBkcm9wOworCQl9CisJfQorCWxlbmd0aCA9IHNrYi0+bGVuOworCisJaWYgKCEodXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0FUT01JQykpKSB7CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJubyB1cmIiKTsKKwkJZ290byBkcm9wOworCX0KKworCWVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItPmNiOworCWVudHJ5LT51cmIgPSB1cmI7CisJZW50cnktPmRldiA9IGRldjsKKwllbnRyeS0+c3RhdGUgPSB0eF9zdGFydDsKKwllbnRyeS0+bGVuZ3RoID0gbGVuZ3RoOworCisJLy8gRklYTUU6IHJlb3JnYW5pemUgYSBiaXQsIHNvIHRoYXQgZml4dXAoKSBmaWxscyBvdXQgTmV0Q2hpcAorCS8vIGZyYW1pbmcgdG9vLiAoUGFja2V0IElEIHVwZGF0ZSBuZWVkcyB0aGUgc3BpbmxvY2suLi4pCisJLy8gWyBCRVRURVI6ICB3ZSBhbHJlYWR5IG93biBuZXQtPnhtaXRfbG9jaywgdGhhdCdzIGVub3VnaCBdCisKKyNpZmRlZglDT05GSUdfVVNCX05FVDEwODAKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfTkMpIHsKKwkJaGVhZGVyID0gKHN0cnVjdCBuY19oZWFkZXIgKikgc2tiX3B1c2ggKHNrYiwgc2l6ZW9mICpoZWFkZXIpOworCQloZWFkZXItPmhkcl9sZW4gPSBjcHVfdG9fbGUxNiAoc2l6ZW9mICgqaGVhZGVyKSk7CisJCWhlYWRlci0+cGFja2V0X2xlbiA9IGNwdV90b19sZTE2IChsZW5ndGgpOworCQlpZiAoISgoc2tiLT5sZW4gKyBzaXplb2YgKnRyYWlsZXIpICYgMHgwMSkpCisJCQkqc2tiX3B1dCAoc2tiLCAxKSA9IFBBRF9CWVRFOworCQl0cmFpbGVyID0gKHN0cnVjdCBuY190cmFpbGVyICopIHNrYl9wdXQgKHNrYiwgc2l6ZW9mICp0cmFpbGVyKTsKKwl9CisjZW5kaWYJLyogQ09ORklHX1VTQl9ORVQxMDgwICovCisKKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBkZXYtPnVkZXYsIGRldi0+b3V0LAorCQkJc2tiLT5kYXRhLCBza2ItPmxlbiwgdHhfY29tcGxldGUsIHNrYik7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCisJLyogZG9uJ3QgYXNzdW1lIHRoZSBoYXJkd2FyZSBoYW5kbGVzIFVTQl9aRVJPX1BBQ0tFVAorCSAqIE5PVEU6ICBzdHJpY3RseSBjb25mb3JtaW5nIGNkYy1ldGhlciBkZXZpY2VzIHNob3VsZCBleHBlY3QKKwkgKiB0aGUgWkxQIGhlcmUsIGJ1dCBpZ25vcmUgdGhlIG9uZS1ieXRlIHBhY2tldC4KKwkgKgorCSAqIEZJWE1FIHplcm8gdGhhdCBieXRlLCBpZiBpdCBkb2Vzbid0IHJlcXVpcmUgYSBuZXcgc2tiLgorCSAqLworCWlmICgobGVuZ3RoICUgZGV2LT5tYXhwYWNrZXQpID09IDApCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCsrOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPnR4cS5sb2NrLCBmbGFncyk7CisKKyNpZmRlZglDT05GSUdfVVNCX05FVDEwODAKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfTkMpIHsKKwkJaGVhZGVyLT5wYWNrZXRfaWQgPSBjcHVfdG9fbGUxNiAoKHUxNilkZXYtPmRldl9wYWNrZXRfaWQrKyk7CisJCXB1dF91bmFsaWduZWQgKGhlYWRlci0+cGFja2V0X2lkLCAmdHJhaWxlci0+cGFja2V0X2lkKTsKKyNpZiAwCisJCWRldmRiZyAoZGV2LCAiZnJhbWUgPnR4IGggJWQgcCAlZCBpZCAlZCIsCisJCQloZWFkZXItPmhkcl9sZW4sIGhlYWRlci0+cGFja2V0X2xlbiwKKwkJCWhlYWRlci0+cGFja2V0X2lkKTsKKyNlbmRpZgorCX0KKyNlbmRpZgkvKiBDT05GSUdfVVNCX05FVDEwODAgKi8KKworCXN3aXRjaCAoKHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKSkgeworCWNhc2UgLUVQSVBFOgorCQluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOworCQlkZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfVFhfSEFMVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJ0eDogc3VibWl0IHVyYiBlcnIgJWQiLCByZXR2YWwpOworCQlicmVhazsKKwljYXNlIDA6CisJCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlfX3NrYl9xdWV1ZV90YWlsICgmZGV2LT50eHEsIHNrYik7CisJCWlmIChkZXYtPnR4cS5xbGVuID49IFRYX1FMRU4gKGRldikpCisJCQluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT50eHEubG9jaywgZmxhZ3MpOworCisJaWYgKHJldHZhbCkgeworCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiZHJvcCwgY29kZSAlZCIsIHJldHZhbCk7Citkcm9wOgorCQlyZXR2YWwgPSBORVRfWE1JVF9TVUNDRVNTOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJaWYgKHNrYikKKwkJCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCQl1c2JfZnJlZV91cmIgKHVyYik7CisJfSBlbHNlIGlmIChuZXRpZl9tc2dfdHhfcXVldWVkIChkZXYpKSB7CisJCWRldmRiZyAoZGV2LCAiPiB0eCwgbGVuICVkLCB0eXBlIDB4JXgiLAorCQkJbGVuZ3RoLCBza2ItPnByb3RvY29sKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyB0YXNrbGV0ICh3b3JrIGRlZmVycmVkIGZyb20gY29tcGxldGlvbnMsIGluX2lycSkgb3IgdGltZXIKKworc3RhdGljIHZvaWQgdXNibmV0X2JoICh1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSAoc3RydWN0IHVzYm5ldCAqKSBwYXJhbTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeTsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUgKCZkZXYtPmRvbmUpKSkgeworCQllbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKKwkJc3dpdGNoIChlbnRyeS0+c3RhdGUpIHsKKwkJICAgIGNhc2UgcnhfZG9uZToKKwkJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CisJCQlyeF9wcm9jZXNzIChkZXYsIHNrYik7CisJCQljb250aW51ZTsKKwkJICAgIGNhc2UgdHhfZG9uZToKKwkJICAgIGNhc2UgcnhfY2xlYW51cDoKKwkJCXVzYl9mcmVlX3VyYiAoZW50cnktPnVyYik7CisJCQlkZXZfa2ZyZWVfc2tiIChza2IpOworCQkJY29udGludWU7CisJCSAgICBkZWZhdWx0OgorCQkJZGV2ZGJnIChkZXYsICJib2d1cyBza2Igc3RhdGUgJWQiLCBlbnRyeS0+c3RhdGUpOworCQl9CisJfQorCisJLy8gd2FpdGluZyBmb3IgYWxsIHBlbmRpbmcgdXJicyB0byBjb21wbGV0ZT8KKwlpZiAoZGV2LT53YWl0KSB7CisJCWlmICgoZGV2LT50eHEucWxlbiArIGRldi0+cnhxLnFsZW4gKyBkZXYtPmRvbmUucWxlbikgPT0gMCkgeworCQkJd2FrZV91cCAoZGV2LT53YWl0KTsKKwkJfQorCisJLy8gb3IgYXJlIHdlIG1heWJlIHNob3J0IGEgZmV3IHVyYnM/CisJfSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkKKwkJCSYmIG5ldGlmX2RldmljZV9wcmVzZW50IChkZXYtPm5ldCkKKwkJCSYmICF0aW1lcl9wZW5kaW5nICgmZGV2LT5kZWxheSkKKwkJCSYmICF0ZXN0X2JpdCAoRVZFTlRfUlhfSEFMVCwgJmRldi0+ZmxhZ3MpKSB7CisJCWludAl0ZW1wID0gZGV2LT5yeHEucWxlbjsKKwkJaW50CXFsZW4gPSBSWF9RTEVOIChkZXYpOworCisJCWlmICh0ZW1wIDwgcWxlbikgeworCQkJc3RydWN0IHVyYgkqdXJiOworCQkJaW50CQlpOworCisJCQkvLyBkb24ndCByZWZpbGwgdGhlIHF1ZXVlIGFsbCBhdCBvbmNlCisJCQlmb3IgKGkgPSAwOyBpIDwgMTAgJiYgZGV2LT5yeHEucWxlbiA8IHFsZW47IGkrKykgeworCQkJCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9BVE9NSUMpOworCQkJCWlmICh1cmIgIT0gTlVMTCkKKwkJCQkJcnhfc3VibWl0IChkZXYsIHVyYiwgR0ZQX0FUT01JQyk7CisJCQl9CisJCQlpZiAodGVtcCAhPSBkZXYtPnJ4cS5xbGVuICYmIG5ldGlmX21zZ19saW5rIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAicnhxbGVuICVkIC0tPiAlZCIsCisJCQkJCQl0ZW1wLCBkZXYtPnJ4cS5xbGVuKTsKKwkJCWlmIChkZXYtPnJ4cS5xbGVuIDwgcWxlbikKKwkJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJCX0KKwkJaWYgKGRldi0+dHhxLnFsZW4gPCBUWF9RTEVOIChkZXYpKQorCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2LT5uZXQpOworCX0KK30KKworCisMCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBVU0IgRGV2aWNlIERyaXZlciBzdXBwb3J0CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKy8vIHByZWNvbmRpdGlvbjogbmV2ZXIgY2FsbGVkIGluX2ludGVycnVwdAorCitzdGF0aWMgdm9pZCB1c2JuZXRfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqeGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwl4ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisKKwlpZiAobmV0aWZfbXNnX3Byb2JlIChkZXYpKQorCQlkZXZpbmZvIChkZXYsICJ1bnJlZ2lzdGVyIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKKwkJCXhkZXYtPmJ1cy0+YnVzX25hbWUsIHhkZXYtPmRldnBhdGgsCisJCQlkZXYtPmRyaXZlcl9pbmZvLT5kZXNjcmlwdGlvbik7CisJCisJbmV0ID0gZGV2LT5uZXQ7CisJdW5yZWdpc3Rlcl9uZXRkZXYgKG5ldCk7CisKKwkvKiB3ZSBkb24ndCBob2xkIHJ0bmwgaGVyZSAuLi4gKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yayAoKTsKKworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT51bmJpbmQpCisJCWRldi0+ZHJpdmVyX2luZm8tPnVuYmluZCAoZGV2LCBpbnRmKTsKKworCWZyZWVfbmV0ZGV2KG5ldCk7CisJdXNiX3B1dF9kZXYgKHhkZXYpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdXNibmV0X2V0aHRvb2xfb3BzOworCisvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKKworc3RhdGljIGludAordXNibmV0X3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnByb2QpCit7CisJc3RydWN0IHVzYm5ldAkJCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgCQkqbmV0OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UJKmludGVyZmFjZTsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8JCSppbmZvOworCXN0cnVjdCB1c2JfZGV2aWNlCQkqeGRldjsKKwlpbnQJCQkJc3RhdHVzOworCisJaW5mbyA9IChzdHJ1Y3QgZHJpdmVyX2luZm8gKikgcHJvZC0+ZHJpdmVyX2luZm87CisJaWYgKCFpbmZvKSB7CisJCWRldl9kYmcgKCZ1ZGV2LT5kZXYsICJibGFja2xpc3RlZCBieSAlc1xuIiwgZHJpdmVyX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJeGRldiA9IGludGVyZmFjZV90b191c2JkZXYgKHVkZXYpOworCWludGVyZmFjZSA9IHVkZXYtPmN1cl9hbHRzZXR0aW5nOworCisJdXNiX2dldF9kZXYgKHhkZXYpOworCisJc3RhdHVzID0gLUVOT01FTTsKKworCS8vIHNldCB1cCBvdXIgb3duIHJlY29yZHMKKwluZXQgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmRldikpOworCWlmICghbmV0KSB7CisJCWRiZyAoImNhbid0IGttYWxsb2MgZGV2Iik7CisJCWdvdG8gb3V0OworCX0KKworCWRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJZGV2LT51ZGV2ID0geGRldjsKKwlkZXYtPmRyaXZlcl9pbmZvID0gaW5mbzsKKwlkZXYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdCAobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWCisJCQkJfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSyk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmRldi0+cnhxKTsKKwlza2JfcXVldWVfaGVhZF9pbml0ICgmZGV2LT50eHEpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZkZXYtPmRvbmUpOworCWRldi0+YmguZnVuYyA9IHVzYm5ldF9iaDsKKwlkZXYtPmJoLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCUlOSVRfV09SSyAoJmRldi0+a2V2ZW50LCBrZXZlbnQsIGRldik7CisJZGV2LT5kZWxheS5mdW5jdGlvbiA9IHVzYm5ldF9iaDsKKwlkZXYtPmRlbGF5LmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCWluaXRfdGltZXIgKCZkZXYtPmRlbGF5KTsKKworCVNFVF9NT0RVTEVfT1dORVIgKG5ldCk7CisJZGV2LT5uZXQgPSBuZXQ7CisJc3RyY3B5IChuZXQtPm5hbWUsICJ1c2IlZCIpOworCW1lbWNweSAobmV0LT5kZXZfYWRkciwgbm9kZV9pZCwgc2l6ZW9mIG5vZGVfaWQpOworCisjaWYgMAorLy8gZG1hX3N1cHBvcnRlZCgpIGlzIGRlZXBseSBicm9rZW4gb24gYWxtb3N0IGFsbCBhcmNoaXRlY3R1cmVzCisJLy8gcG9zc2libGUgd2l0aCBzb21lIEVIQ0kgY29udHJvbGxlcnMKKwlpZiAoZG1hX3N1cHBvcnRlZCAoJnVkZXYtPmRldiwgRE1BXzY0QklUX01BU0spKQorCQluZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKyNlbmRpZgorCisJbmV0LT5jaGFuZ2VfbXR1ID0gdXNibmV0X2NoYW5nZV9tdHU7CisJbmV0LT5nZXRfc3RhdHMgPSB1c2JuZXRfZ2V0X3N0YXRzOworCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gdXNibmV0X3N0YXJ0X3htaXQ7CisJbmV0LT5vcGVuID0gdXNibmV0X29wZW47CisJbmV0LT5zdG9wID0gdXNibmV0X3N0b3A7CisJbmV0LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVRfSklGRklFUzsKKwluZXQtPnR4X3RpbWVvdXQgPSB1c2JuZXRfdHhfdGltZW91dDsKKwluZXQtPmRvX2lvY3RsID0gdXNibmV0X2lvY3RsOworCW5ldC0+ZXRodG9vbF9vcHMgPSAmdXNibmV0X2V0aHRvb2xfb3BzOworCisJLy8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGJpbmQvaW5pdCBwcm9jZWR1cmVzCisJLy8gTk9URSBuZXQtPm5hbWUgc3RpbGwgbm90IHVzYWJsZSAuLi4KKwlpZiAoaW5mby0+YmluZCkgeworCQlzdGF0dXMgPSBpbmZvLT5iaW5kIChkZXYsIHVkZXYpOworCQkvLyBoZXVyaXN0aWM6ICAidXNiJWQiIGZvciBsaW5rcyB3ZSBrbm93IGFyZSB0d28taG9zdCwKKwkJLy8gZWxzZSAiZXRoJWQiIHdoZW4gdGhlcmUncyByZWFzb25hYmxlIGRvdWJ0LiAgdXNlcnNwYWNlCisJCS8vIGNhbiByZW5hbWUgdGhlIGxpbmsgaWYgaXQga25vd3MgYmV0dGVyLgorCQlpZiAoKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19FVEhFUikgIT0gMAorCQkJCSYmIChuZXQtPmRldl9hZGRyIFswXSAmIDB4MDIpID09IDApCisJCQlzdHJjcHkgKG5ldC0+bmFtZSwgImV0aCVkIik7CisJfSBlbHNlIGlmICghaW5mby0+aW4gfHwgaW5mby0+b3V0KQorCQlzdGF0dXMgPSBnZXRfZW5kcG9pbnRzIChkZXYsIHVkZXYpOworCWVsc2UgeworCQlkZXYtPmluID0gdXNiX3JjdmJ1bGtwaXBlICh4ZGV2LCBpbmZvLT5pbik7CisJCWRldi0+b3V0ID0gdXNiX3NuZGJ1bGtwaXBlICh4ZGV2LCBpbmZvLT5vdXQpOworCQlpZiAoIShpbmZvLT5mbGFncyAmIEZMQUdfTk9fU0VUSU5UKSkKKwkJCXN0YXR1cyA9IHVzYl9zZXRfaW50ZXJmYWNlICh4ZGV2LAorCQkJCWludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCWludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IDA7CisKKwl9CisKKwlpZiAoc3RhdHVzID09IDAgJiYgZGV2LT5zdGF0dXMpCisJCXN0YXR1cyA9IGluaXRfc3RhdHVzIChkZXYsIHVkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIG91dDE7CisKKwlkZXYtPm1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQgKGRldi0+dWRldiwgZGV2LT5vdXQsIDEpOworCQorCVNFVF9ORVRERVZfREVWKG5ldCwgJnVkZXYtPmRldik7CisJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2IChuZXQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0MzsKKwlpZiAobmV0aWZfbXNnX3Byb2JlIChkZXYpKQorCQlkZXZpbmZvIChkZXYsICJyZWdpc3RlciB1c2JuZXQgYXQgdXNiLSVzLSVzLCAlcywgIgorCQkJCSIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCQl4ZGV2LT5idXMtPmJ1c19uYW1lLCB4ZGV2LT5kZXZwYXRoLAorCQkJZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24sCisJCQluZXQtPmRldl9hZGRyIFswXSwgbmV0LT5kZXZfYWRkciBbMV0sCisJCQluZXQtPmRldl9hZGRyIFsyXSwgbmV0LT5kZXZfYWRkciBbM10sCisJCQluZXQtPmRldl9hZGRyIFs0XSwgbmV0LT5kZXZfYWRkciBbNV0pOworCisJLy8gb2ssIGl0J3MgcmVhZHkgdG8gZ28uCisJdXNiX3NldF9pbnRmZGF0YSAodWRldiwgZGV2KTsKKworCS8vIHN0YXJ0IGFzIGlmIHRoZSBsaW5rIGlzIHVwCisJbmV0aWZfZGV2aWNlX2F0dGFjaCAobmV0KTsKKworCXJldHVybiAwOworCitvdXQzOgorCWlmIChpbmZvLT51bmJpbmQpCisJCWluZm8tPnVuYmluZCAoZGV2LCB1ZGV2KTsKK291dDE6CisJZnJlZV9uZXRkZXYobmV0KTsKK291dDoKKwl1c2JfcHV0X2Rldih4ZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgdXNibmV0X3N1c3BlbmQgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJCisJbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2LT5uZXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYm5ldF9yZXN1bWUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaCAoZGV2LT5uZXQpOworCXJldHVybiAwOworfQorCisjZWxzZQkvKiAhQ09ORklHX1BNICovCisKKyNkZWZpbmUJdXNibmV0X3N1c3BlbmQJTlVMTAorI2RlZmluZQl1c2JuZXRfcmVzdW1lCU5VTEwKKworI2VuZGlmCS8qIENPTkZJR19QTSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZuZGVmCUhBVkVfSEFSRFdBUkUKKyNlcnJvciBZb3UgbmVlZCB0byBjb25maWd1cmUgc29tZSBoYXJkd2FyZSBmb3IgdGhpcyBkcml2ZXIKKyNlbmRpZgorCisvKgorICogY2hpcCB2ZW5kb3IgbmFtZXMgd29uJ3Qgbm9ybWFsbHkgYmUgb24gdGhlIGNhYmxlcywgYW5kCisgKiBtYXkgbm90IGJlIG9uIHRoZSBkZXZpY2UuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0geworCisjaWZkZWYJQ09ORklHX1VTQl9BTElfTTU2MzIKK3sKKwlVU0JfREVWSUNFICgweDA0MDIsIDB4NTYzMiksCS8vIEFMaSBkZWZhdWx0cworCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYWxpX201NjMyX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0FOMjcyMAoreworCVVTQl9ERVZJQ0UgKDB4MDU0NywgMHgyNzIwKSwJLy8gQW5jaG9yQ2hpcHMgZGVmYXVsdHMKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmFuMjcyMF9pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4MDU0NywgMHgyNzI3KSwJLy8gWGlyY29tIFBHVU5FVAorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYW4yNzIwX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0JFTEtJTgoreworCVVTQl9ERVZJQ0UgKDB4MDUwZCwgMHgwMDA0KSwJLy8gQmVsa2luCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZiZWxraW5faW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDA1NmMsIDB4ODEwMCksCS8vIGVURUsKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmJlbGtpbl9pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4MDUyNSwgMHg5OTAxKSwJLy8gQWR2YW5jZSBVU0JORVQgKGVURUspCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZiZWxraW5faW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfQVg4ODE3WAoreworCS8vIExpbmtzeXMgVVNCMjAwTQorCVVTQl9ERVZJQ0UgKDB4MDc3YiwgMHgyMjI2KSwKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBOZXRnZWFyIEZBMTIwCisJVVNCX0RFVklDRSAoMHgwODQ2LCAweDEwNDApLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJm5ldGdlYXJfZmExMjBfaW5mbywKK30sIHsKKwkvLyBETGluayBEVUItRTEwMAorCVVTQl9ERVZJQ0UgKDB4MjAwMSwgMHgxYTAwKSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZkbGlua19kdWJfZTEwMF9pbmZvLAorfSwgeworCS8vIEludGVsbGluZXQsIFNUIExhYiBVU0IgRXRoZXJuZXQKKwlVU0JfREVWSUNFICgweDBiOTUsIDB4MTcyMCksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIEhhd2tpbmcgVUYyMDAsIFRyZW5kTmV0IFRVMi1FVDEwMAorCVVTQl9ERVZJQ0UgKDB4MDdiOCwgMHg0MjBhKSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZoYXdraW5nX3VmMjAwX2luZm8sCit9LCB7CisgICAgICAgIC8vIEJpbGxpb250b24gU3lzdGVtcywgVVNCMkFSIAorICAgICAgICBVU0JfREVWSUNFICgweDA4ZGQsIDB4OTBmZiksCisgICAgICAgIC5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBBVEVOIFVDMjEwVAorCVVTQl9ERVZJQ0UgKDB4MDU1NywgMHgyMDA5KSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gQnVmZmFsbyBMVUEtVTItS1RYCisJVVNCX0RFVklDRSAoMHgwNDExLCAweDAwM2QpLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBTaXRlY29tIExOLTAyOSAiVVNCIDIuMCAxMC8xMDAgRXRoZXJuZXQgYWRhcHRlciIKKwlVU0JfREVWSUNFICgweDYxODksIDB4MTgyZCksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIGNvcmVnYSBGRXRoZXIgVVNCMi1UWAorCVVTQl9ERVZJQ0UgKDB4MDdhYSwgMHgwMDE3KSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gU3VyZWNvbSBFUC0xNDI3WC0yCisJVVNCX0RFVklDRSAoMHgxMTg5LCAweDA4OTMpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIGdvb2R3YXkgY29ycCB1c2IgZ3d1c2IyZQorCVVTQl9ERVZJQ0UgKDB4MTYzMSwgMHg2MjAwKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBBU0lYIEFYODg3NzIgMTAvMTAwCisgICAgICAgIFVTQl9ERVZJQ0UgKDB4MGI5NSwgMHg3NzIwKSwKKyAgICAgICAgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZheDg4NzcyX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0VQU09OMjg4OAoreworCVVTQl9ERVZJQ0UgKDB4MDUyNSwgMHgyODg4KSwJLy8gRVBTT04gVVNCIGNsaWVudAorCS5kcml2ZXJfaW5mbwk9ICh1bnNpZ25lZCBsb25nKSAmZXBzb24yODg4X2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0dFTkVTWVMKK3sKKwlVU0JfREVWSUNFICgweDA1ZTMsIDB4MDUwMiksCS8vIEdMNjIwVVNCLUEKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmdlbmVsaW5rX2luZm8sCit9LAorCS8qIE5PVDogVVNCX0RFVklDRSAoMHgwNWUzLCAweDA1MDEpLAkvLyBHTDYyMFVTQgorCSAqIHRoYXQncyBoYWxmIGR1cGxleCwgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQKKwkgKi8KKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9ORVQxMDgwCit7CisJVVNCX0RFVklDRSAoMHgwNTI1LCAweDEwODApLAkvLyBOZXRDaGlwIHJlZiBkZXNpZ24KKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJm5ldDEwODBfaW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDA2RDAsIDB4MDYyMiksCS8vIExhcGxpbmsgR29sZAorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmbmV0MTA4MF9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9QTDIzMDEKK3sKKwlVU0JfREVWSUNFICgweDA2N2IsIDB4MDAwMCksCS8vIFBMLTIzMDEKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJnByb2xpZmljX2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHgwNjdiLCAweDAwMDEpLAkvLyBQTC0yMzAyCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZwcm9saWZpY19pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9LQzIxOTAKK3sKKwlVU0JfREVWSUNFICgweDA1MGYsIDB4MDE5MCksCS8vIEtDLTE5MAorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAma2MyMTkwX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX1JORElTCit7CisJLyogUk5ESVMgaXMgTVNGVCdzIHVuLW9mZmljaWFsIHZhcmlhbnQgb2YgQ0RDIEFDTSAqLworCVVTQl9JTlRFUkZBQ0VfSU5GTyAoVVNCX0NMQVNTX0NPTU0sIDIgLyogQUNNICovLCAweDBmZiksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZybmRpc19pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9BUk1MSU5VWAorLyoKKyAqIFNBLTExMDAgdXNpbmcgc3RhbmRhcmQgQVJNIExpbnV4IGtlcm5lbHMsIG9yIGNvbXBhdGlibGUuCisgKiBPZnRlbiB1c2VkIHdoZW4gdGFsa2luZyB0byBMaW51eCBQREFzIChpUGFxLCBZb3B5LCBldGMpLgorICogVGhlIHNhLTExMDAgInVzYi1ldGgiIGRyaXZlciBoYW5kbGVzIHRoZSBiYXNpYyBmcmFtaW5nLgorICoKKyAqIFBYQTI1eCBvciBQWEEyMTAgLi4uICB0aGVzZSB1c2UgYSAidXNiLWV0aCIgZHJpdmVyIG11Y2ggbGlrZQorICogdGhlIHNhMTEwMCBvbmUsIGJ1dCBoYXJkd2FyZSB1c2VzIGRpZmZlcmVudCBlbmRwb2ludCBudW1iZXJzLgorICoKKyAqIE9yIHRoZSBMaW51eCAiRXRoZXJuZXQiIGdhZGdldCBvbiBoYXJkd2FyZSB0aGF0IGNhbid0IHRhbGsKKyAqIENEQyBFdGhlcm5ldCAoZS5nLiwgbm8gYWx0c2V0dGluZ3MpLCBpbiBlaXRoZXIgb2YgdHdvIG1vZGVzOgorICogIC0gYWN0aW5nIGp1c3QgbGlrZSB0aGUgb2xkICJ1c2ItZXRoIiBmaXJtd2FyZSwgdGhvdWdoCisgKiAgICB0aGUgaW1wbGVtZW50YXRpb24gaXMgZGlmZmVyZW50IAorICogIC0gc3VwcG9ydGluZyBSTkRJUyBhcyB0aGUgZmlyc3QvZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvcgorICogICAgTVMtV2luZG93cyBpbnRlcm9wOyBMaW51eCBuZWVkcyB0byB1c2UgdGhlIG90aGVyIGNvbmZpZworICovCit7CisJLy8gMTE4MyA9IDB4MDQ5RiwgYm90aCB1c2VkIGFzIGhleCB2YWx1ZXM/CisJLy8gQ29tcGFxICJJdHN5IiB2ZW5kb3IvcHJvZHVjdCBpZAorCVVTQl9ERVZJQ0UgKDB4MDQ5RiwgMHg1MDVBKSwJLy8gdXNiLWV0aCwgb3IgY29tcGF0aWJsZQorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmbGludXhkZXZfaW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDBFN0UsIDB4MTAwMSksCS8vIEcuTWF0ZSAiWW9weSIKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJnlvcHlfaW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDgwODYsIDB4MDdkMyksCS8vICJibG9iIiBib290bG9hZGVyCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZibG9iX2luZm8sCit9LCB7CisJLy8gTGludXggRXRoZXJuZXQvUk5ESVMgZ2FkZ2V0IG9uIHB4YTIxMC8yNXgvMjZ4CisJLy8gZS5nLiBHdW1zdGl4LCBjdXJyZW50IE9wZW5aYXVydXMsIC4uLgorCVVTQl9ERVZJQ0VfVkVSICgweDA1MjUsIDB4YTRhMiwgMHgwMjAzLCAweDAyMDMpLAorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmbGludXhkZXZfaW5mbywKK30sIAorI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfWkFVUlVTKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfQ0RDRVRIRVIpCisvKgorICogU0EtMTEwMCBiYXNlZCBTaGFycCBaYXVydXMgKCJjb2xsaWUiKSwgb3IgY29tcGF0aWJsZS4KKyAqIFNhbWUgaWRlYSBhcyBhYm92ZSwgYnV0IGRpZmZlcmVudCBmcmFtaW5nLgorICoKKyAqIFBYQS0yeHggYmFzZWQgbW9kZWxzIGFyZSBhbHNvIGx5aW5nLWFib3V0LWNkYy4KKyAqIFNvbWUgbW9kZWxzIGRvbid0IGV2ZW4gdGVsbCB0aGUgc2FtZSBsaWVzIC4uLgorICoKKyAqIE5PVEU6ICBPcGVuWmF1cnVzIHZlcnNpb25zIHdpdGggMi42IGtlcm5lbHMgd29uJ3QgdXNlIHRoZXNlIGVudHJpZXMsCisgKiB1bmxpa2UgdGhlIG9sZGVyIG9uZXMgd2l0aCAyLjQgImVtYmVkaXgiIGtlcm5lbHMuCisgKgorICogTk9URTogIFRoZXNlIGVudHJpZXMgZG8gZG91YmxlLWR1dHksIHNlcnZpbmcgYXMgYmxhY2tsaXN0IGVudHJpZXMKKyAqIHdoZW5ldmVyIFphdXJ1cyBzdXBwb3J0IGlzbid0IGVuYWJsZWQsIGJ1dCBDREMgRXRoZXJuZXQgaXMuCisgKi8KKyNkZWZpbmUJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UgXAorCS5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfQ09NTSwgXAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULCBcCisJLmJJbnRlcmZhY2VQcm90b2NvbAk9IFVTQl9DRENfUFJPVE9fTk9ORQoreworCS5tYXRjaF9mbGFncwk9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkJICB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAKKwkuaWRWZW5kb3IJCT0gMHgwNERELAorCS5pZFByb2R1Y3QJCT0gMHg4MDA0LAorCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19TVFJPTkdBUk1fSU5GTywKK30sIHsKKwkubWF0Y2hfZmxhZ3MJPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJCSAgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgCisJLmlkVmVuZG9yCQk9IDB4MDRERCwKKwkuaWRQcm9kdWN0CQk9IDB4ODAwNSwJLyogQS0zMDAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfUFhBX0lORk8sCit9LCB7CisJLm1hdGNoX2ZsYWdzCT0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCQkgIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIAorCS5pZFZlbmRvcgkJPSAweDA0REQsCisJLmlkUHJvZHVjdAkJPSAweDgwMDYsCS8qIEItNTAwL1NMLTU2MDAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfUFhBX0lORk8sCit9LCB7CisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJICAgICAgICAgIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yCQk9IDB4MDRERCwKKwkuaWRQcm9kdWN0CQk9IDB4ODAwNywJLyogQy03MDAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfUFhBX0lORk8sCit9LCB7CisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwNERELAorCS5pZFByb2R1Y3QgICAgICAgICAgICAgID0gMHg5MDMxLAkvKiBDLTc1MCBDLTc2MCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19QWEFfSU5GTywKK30sIHsKKwkubWF0Y2hfZmxhZ3MgICAgPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yICAgICAgICAgICAgICAgPSAweDA0REQsCisJLmlkUHJvZHVjdCAgICAgICAgICAgICAgPSAweDkwMzIsCS8qIFNMLTYwMDAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfUFhBX0lORk8sCit9LCB7CisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwNERELAorCS8qIHJlcG9ydGVkIHdpdGggc29tZSBDODYwIHVuaXRzICovCisJLmlkUHJvZHVjdCAgICAgICAgICAgICAgPSAweDkwNTAsCS8qIEMtODYwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1BYQV9JTkZPLAorI2lmZGVmCUNPTkZJR19VU0JfWkFVUlVTCisJLyogYXQgbGVhc3Qgc29tZSAocmVwb3J0cyB2YXJ5KSBDLTg2MCB1bml0cyBoYXZlIHZlcnkgZGlmZmVyZW50CisJICogbGllcyBhYm91dCB0aGVpciBzdGFuZGFyZHMgc3VwcG9ydC4KKwkgKi8KK30sIHsKKwkubWF0Y2hfZmxhZ3MgICAgPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yICAgICAgICAgICAgICAgPSAweDA0REQsCisJLyogcmVwb3J0ZWQgd2l0aCBzb21lIEM4NjAgdW5pdHMgKi8KKwkuaWRQcm9kdWN0ICAgICAgICAgICAgICA9IDB4OTAzMSwJLyogQy04NjAgKi8KKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVTQl9DRENfU1VCQ0xBU1NfTURMTSwKKwkuYkludGVyZmFjZVByb3RvY29sCT0gVVNCX0NEQ19QUk9UT19OT05FLAorCS5kcml2ZXJfaW5mbyAJCT0gKHVuc2lnbmVkIGxvbmcpICZ6YXVydXNfcHhhX21kbG1faW5mbywKKyNlbmRpZgorfSwKKworLyogT2x5bXB1cyBoYXMgc29tZSBtb2RlbHMgd2l0aCBhIFphdXJ1cy1jb21wYXRpYmxlIG9wdGlvbi4KKyAqIFItMTAwMCB1c2VzIGEgRnJlZVNjYWxlIGkuTVhMIGNwdSAoQVJNdjRUKQorICovCit7CisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwN0I0LAorCS5pZFByb2R1Y3QgICAgICAgICAgICAgID0gMHgwRjAyLAkvKiBSLTEwMDAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBPTFlNUFVTX01YTF9JTkZPLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9DRENFVEhFUgoreworCS8qIENEQyBFdGhlciB1c2VzIHR3byBpbnRlcmZhY2VzLCBub3QgbmVjZXNzYXJpbHkgY29uc2VjdXRpdmUuCisJICogV2UgbWF0Y2ggdGhlIG1haW4gaW50ZXJmYWNlLCBpZ25vcmluZyB0aGUgb3B0aW9uYWwgZGV2aWNlCisJICogY2xhc3Mgc28gd2UgY291bGQgaGFuZGxlIGRldmljZXMgdGhhdCBhcmVuJ3QgZXhjbHVzaXZlbHkKKwkgKiBDREMgZXRoZXIuCisJICoKKwkgKiBOT1RFOiAgdGhpcyBtYXRjaCBtdXN0IGNvbWUgQUZURVIgZW50cmllcyB3b3JraW5nIGFyb3VuZAorCSAqIGJ1Z3MvcXVpcmtzIGluIGEgZ2l2ZW4gcHJvZHVjdCAobGlrZSBaYXVydXMsIGFib3ZlKS4KKwkgKi8KKwlVU0JfSU5URVJGQUNFX0lORk8gKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULAorCQkJVVNCX0NEQ19QUk9UT19OT05FKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmNkY19pbmZvLAorfSwKKyNlbmRpZgorCisJeyB9LAkJLy8gRU5ECit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBwcm9kdWN0cyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JuZXRfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCWRyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9CXByb2R1Y3RzLAorCS5wcm9iZSA9CXVzYm5ldF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYm5ldF9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNibmV0X3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYm5ldF9yZXN1bWUsCit9OworCisvKiBEZWZhdWx0IGV0aHRvb2xfb3BzIGFzc2lnbmVkLiAgRGV2aWNlcyBjYW4gb3ZlcnJpZGUgaW4gdGhlaXIgYmluZCgpIHJvdXRpbmUgKi8KK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdXNibmV0X2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSB1c2JuZXRfZ2V0X2RydmluZm8sCisJLmdldF9saW5rCQk9IHVzYm5ldF9nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdXNibmV0X2luaXQgKHZvaWQpCit7CisJLy8gY29tcGlsZXIgc2hvdWxkIG9wdGltaXplIHRoZXNlIG91dAorCUJVR19PTiAoc2l6ZW9mICgoKHN0cnVjdCBza19idWZmICopMCktPmNiKQorCQkJPCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOworI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKKwlCVUdfT04gKChzaXplb2YgKCgoc3RydWN0IHVzYm5ldCAqKTApLT5kYXRhKQorCQkJPCBzaXplb2YgKHN0cnVjdCBjZGNfc3RhdGUpKSk7CisjZW5kaWYKKworCXJhbmRvbV9ldGhlcl9hZGRyKG5vZGVfaWQpOworCisgCXJldHVybiB1c2JfcmVnaXN0ZXIoJnVzYm5ldF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKHVzYm5ldF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHVzYm5ldF9leGl0ICh2b2lkKQoreworIAl1c2JfZGVyZWdpc3RlciAoJnVzYm5ldF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKHVzYm5ldF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiAoIkRhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OICgiVVNCIEhvc3QtdG8tSG9zdCBMaW5rIERyaXZlcnMgKG51bWVyb3VzIHZlbmRvcnMpIik7CitNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jIGIvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzODAyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKQEAgLTAsMCArMSwxOTA1IEBACisvKgorICoJRHJpdmVyIGZvciBaeURBUyB6ZDEyMDEgYmFzZWQgd2lyZWxlc3MgVVNCIGRldmljZXMuCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IEplcm9lbiBWcmVla2VuIChwZTFyeHFAYW1zYXQub3JnKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgl2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoJUGFydHMgb2YgdGhpcyBkcml2ZXIgaGF2ZSBiZWVuIGRlcml2ZWQgZnJvbSBhIHdsYW4tbmcgdmVyc2lvbgorICoJbW9kaWZpZWQgYnkgWnlEQVMuIFRoZXkgYWxzbyBtYWRlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlLCB0aGFua3MhCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGllZWU4MDJfMTEuaD4KKyNpbmNsdWRlICJ6ZDEyMDEuaCIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpkMTIwMV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDAwKX0sIC8qIFBlYWJpcmQgV2lyZWxlc3MgVVNCIEFkYXB0ZXIgKi8KKwl7VVNCX0RFVklDRSgweDBhY2UsIDB4MTIwMSl9LCAvKiBaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIgKi8KKwl7VVNCX0RFVklDRSgweDA1MGQsIDB4NjA1MSl9LCAvKiBCZWxraW4gRjVENjA1MSB1c2IgIGFkYXB0ZXIgKi8KKwl7VVNCX0RFVklDRSgweDBkYjAsIDB4NjgyMyl9LCAvKiBNU0kgVUIxMUIgdXNiICBhZGFwdGVyICovCisJe30KK307CisKK3N0YXRpYyBpbnQgYXAgPSAwOwkvKiBBcmUgd2UgYW4gQVAgb3IgYSBub3JtYWwgc3RhdGlvbj8gKi8KKworI2RlZmluZSBaRDEyMDFfVkVSU0lPTgkiMC4xNSIKKworTU9EVUxFX0FVVEhPUigiSmVyb2VuIFZyZWVrZW4gPHBlMXJ4cUBhbXNhdC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgWnlEQVMgWkQxMjAxIGJhc2VkIFVTQiBXaXJlbGVzcyBhZGFwdGVycyIpOworTU9EVUxFX1ZFUlNJT04oWkQxMjAxX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX3BhcmFtKGFwLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhcCwgIklmIG5vbi16ZXJvIEFjY2VzcyBQb2ludCBmaXJtd2FyZSB3aWxsIGJlIGxvYWRlZCIpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHpkMTIwMV90YWJsZSk7CisKKworaW50IHpkMTIwMV9md191cGxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGFwZncpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwljaGFyKiBkYXRhOworCXVuc2lnbmVkIGxvbmcgbGVuOworCWludCBlcnI7CisJdW5zaWduZWQgY2hhciByZXQ7CisJY2hhciAqYnVmOworCWNoYXIgKmZ3ZmlsZTsKKworCWlmIChhcGZ3KQorCQlmd2ZpbGUgPSAiemQxMjAxLWFwLmZ3IjsKKwllbHNlCisJCWZ3ZmlsZSA9ICJ6ZDEyMDEuZnciOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3ZmlsZSwgJmRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGxvYWQgJXMgZmlybXdhcmUgZmlsZSFcbiIsIGZ3ZmlsZSk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTWFrZSBzdXJlIHRoZSBob3RwbHVnIGZpcm13YXJlIGxvYWRlciBpcyBpbnN0YWxsZWQuXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJHb3RvIGh0dHA6Ly9saW51eC1sYzEwMDAyMC5zb3VyY2Vmb3JnZS5uZXQgZm9yIG1vcmUgaW5mb1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZGF0YSA9IGZ3X2VudHJ5LT5kYXRhOworICAgICAgICBsZW4gPSBmd19lbnRyeS0+c2l6ZTsKKworCWJ1ZiA9IGttYWxsb2MoMTAyNCwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpCisJCWdvdG8gZXhpdDsKKwkKKwl3aGlsZSAobGVuID4gMCkgeworCQlpbnQgdHJhbnNsZW4gPSAobGVuID4gMTAyNCkgPyAxMDI0IDogbGVuOworCQltZW1jcHkoYnVmLCBkYXRhLCB0cmFuc2xlbik7CisKKwkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIDAsCisJCSAgICBVU0JfRElSX09VVCB8IDB4NDAsIDAsIDAsIGJ1ZiwgdHJhbnNsZW4sCisJCSAgICBaRDEyMDFfRldfVElNRU9VVCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBleGl0OworCisJCWxlbiAtPSB0cmFuc2xlbjsKKwkJZGF0YSArPSB0cmFuc2xlbjsKKwl9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIDB4MiwKKwkgICAgVVNCX0RJUl9PVVQgfCAweDQwLCAwLCAwLCBOVUxMLCAwLCBaRDEyMDFfRldfVElNRU9VVCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgMHg0LAorCSAgICBVU0JfRElSX0lOIHwgMHg0MCwgMCwwLCAmcmV0LCBzaXplb2YocmV0KSwgWkQxMjAxX0ZXX1RJTUVPVVQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJaWYgKHJldCAmIDB4ODApIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWVyciA9IDA7CitleGl0OgorIAlpZiAoYnVmKQorCQlrZnJlZShidWYpOworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgemQxMjAxX3VzYmZyZWUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IHVyYi0+Y29udGV4dDsKKworCXN3aXRjaCh1cmItPnN0YXR1cykgeworCQljYXNlIC1FSUxTRVE6CisJCWNhc2UgLUVOT0RFVjoKKwkJY2FzZSAtRVRJTUVET1VUOgorCQljYXNlIC1FTk9FTlQ6CisJCWNhc2UgLUVQSVBFOgorCQljYXNlIC1FT1ZFUkZMT1c6CisJCWNhc2UgLUVTSFVURE9XTjoKKwkJCWRldl93YXJuKCZ6ZC0+dXNiLT5kZXYsICIlczogdXJiIGZhaWxlZDogJWRcbiIsIAorCQkJICAgIHpkLT5kZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJcmV0dXJuOworfQorCisvKiBjbWRyZXEgbWVzc2FnZTogCisJdTMyIHR5cGUKKwl1MTYgY21kCisJdTE2IHBhcm0wCisJdTE2IHBhcm0xCisJdTE2IHBhcm0yCisJdTggIHBhZFs0XQorCisJdG90YWw6IDQgKyAyICsgMiArIDIgKyAyICsgNCA9IDE2CisqLworaW50IHpkMTIwMV9kb2NtZChzdHJ1Y3QgemQxMjAxICp6ZCwgaW50IGNtZCwgaW50IHBhcm0wLCBpbnQgcGFybTEsIGludCBwYXJtMikKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kOworCWludCByZXQ7CisJc3RydWN0IHVyYiAqdXJiOworCisJY29tbWFuZCA9IGttYWxsb2MoMTYsIEdGUF9BVE9NSUMpOworCWlmICghY29tbWFuZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqKChfX2xlMzIqKWNvbW1hbmQpID0gY3B1X3RvX2xlMzIoWkQxMjAxX1VTQl9DTURSRVEpOworCSooKF9fbGUxNiopJmNvbW1hbmRbNF0pID0gY3B1X3RvX2xlMTYoY21kKTsKKwkqKChfX2xlMTYqKSZjb21tYW5kWzZdKSA9IGNwdV90b19sZTE2KHBhcm0wKTsKKwkqKChfX2xlMTYqKSZjb21tYW5kWzhdKSA9IGNwdV90b19sZTE2KHBhcm0xKTsKKwkqKChfX2xlMTYqKSZjb21tYW5kWzEwXSk9IGNwdV90b19sZTE2KHBhcm0yKTsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUoY29tbWFuZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHpkLT51c2IsIHVzYl9zbmRidWxrcGlwZSh6ZC0+dXNiLCB6ZC0+ZW5kcF9vdXQyKSwKKwkgICAgIGNvbW1hbmQsIDE2LCB6ZDEyMDFfdXNiZnJlZSwgemQpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlrZnJlZShjb21tYW5kKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQorCQorCXJldHVybiByZXQ7Cit9CisKKy8qIENhbGxiYWNrIGFmdGVyIHNlbmRpbmcgb3V0IGEgcGFja2V0ICovCit2b2lkIHpkMTIwMV91c2J0eChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gdXJiLT5jb250ZXh0OworCW5ldGlmX3dha2VfcXVldWUoemQtPmRldik7CisJcmV0dXJuOworfQorCisvKiBJbmNvbW1pbmcgZGF0YSAqLwordm9pZCB6ZDEyMDFfdXNicngoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgZnJlZSA9IDA7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciB0eXBlOworCisJaWYgKCF6ZCkgeworCQlmcmVlID0gMTsKKwkJZ290byBleGl0OworCX0KKworCXN3aXRjaCh1cmItPnN0YXR1cykgeworCQljYXNlIC1FSUxTRVE6CisJCWNhc2UgLUVOT0RFVjoKKwkJY2FzZSAtRVRJTUVET1VUOgorCQljYXNlIC1FTk9FTlQ6CisJCWNhc2UgLUVQSVBFOgorCQljYXNlIC1FT1ZFUkZMT1c6CisJCWNhc2UgLUVTSFVURE9XTjoKKwkJCWRldl93YXJuKCZ6ZC0+dXNiLT5kZXYsICIlczogcnggdXJiIGZhaWxlZDogJWRcbiIsCisJCQkgICAgemQtPmRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQkJZnJlZSA9IDE7CisJCQlnb3RvIGV4aXQ7CisJfQorCQorCWlmICh1cmItPnN0YXR1cyAhPSAwIHx8IHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKQorCQlnb3RvIHJlc3VibWl0OworCisJdHlwZSA9IGRhdGFbMF07CisJaWYgKHR5cGUgPT0gWkQxMjAxX1BBQ0tFVF9FVkVOVFNUQVQgfHwgdHlwZSA9PSBaRDEyMDFfUEFDS0VUX1JFU09VUkNFKSB7CisJCW1lbWNweSh6ZC0+cnhkYXRhLCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl6ZC0+cnhsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCXpkLT5yeGRhdGFzID0gMTsKKwkJd2FrZV91cCgmemQtPnJ4ZGF0YXEpOworCX0KKwkvKiBJbmZvIGZyYW1lICovCisJaWYgKHR5cGUgPT0gWkQxMjAxX1BBQ0tFVF9JTlFVSVJFKSB7CisJCWludCBpID0gMDsKKwkJdW5zaWduZWQgc2hvcnQgaW5mb3R5cGUsIGZyYW1lbGVuLCBjb3B5bGVuOworCQlmcmFtZWxlbiA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikmZGF0YVs0XSk7CisJCWluZm90eXBlID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSZkYXRhWzZdKTsKKworCQlpZiAoaW5mb3R5cGUgPT0gWkQxMjAxX0lORl9MSU5LU1RBVFVTKSB7CisJCQlzaG9ydCBsaW5rc3RhdHVzOworCisJCQlsaW5rc3RhdHVzID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSZkYXRhWzhdKTsKKwkJCXN3aXRjaChsaW5rc3RhdHVzKSB7CisJCQkJY2FzZSAxOgorCQkJCQluZXRpZl9jYXJyaWVyX29uKHpkLT5kZXYpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHpkLT5kZXYpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDM6CisJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHpkLT5kZXYpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCW5ldGlmX2NhcnJpZXJfb24oemQtPmRldik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHpkLT5kZXYpOworCQkJfQorCQkJZ290byByZXN1Ym1pdDsKKwkJfQorCQlpZiAoaW5mb3R5cGUgPT0gWkQxMjAxX0lORl9BU1NPQ1NUQVRVUykgeworCQkJc2hvcnQgc3RhdHVzID0gbGUxNl90b19jcHUoKihfX2xlMTYqKShkYXRhKzgpKTsKKwkJCWludCBldmVudDsKKwkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKworCQkJc3dpdGNoIChzdGF0dXMpIHsKKwkJCQljYXNlIFpEMTIwMV9BU1NPQ1NUQVRVU19TVEFBU1NPQzoKKwkJCQljYXNlIFpEMTIwMV9BU1NPQ1NUQVRVU19SRUFTU09DOgorCQkJCQlldmVudCA9IElXRVZSRUdJU1RFUkVEOworCQkJCQlicmVhazsKKwkJCQljYXNlIFpEMTIwMV9BU1NPQ1NUQVRVU19ESVNBU1NPQzoKKwkJCQljYXNlIFpEMTIwMV9BU1NPQ1NUQVRVU19BU1NPQ0ZBSUw6CisJCQkJY2FzZSBaRDEyMDFfQVNTT0NTVEFUVVNfQVVUSEZBSUw6CisJCQkJZGVmYXVsdDoKKwkJCQkJZXZlbnQgPSBJV0VWRVhQSVJFRDsKKwkJCX0KKwkJCW1lbWNweSh3cnF1LmFkZHIuc2FfZGF0YSwgZGF0YSsxMCwgRVRIX0FMRU4pOworCQkJd3JxdS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHpkLT5kZXYsIGV2ZW50LCAmd3JxdSwgTlVMTCk7CisKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KKwkJaWYgKGluZm90eXBlID09IFpEMTIwMV9JTkZfQVVUSFJFUSkgeworCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJCQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIGRhdGErOCwgRVRIX0FMRU4pOworCQkJd3JxdS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCS8qIFRoZXJlIGlzbid0IGEgZXZlbnQgdGhhdCB0cnVsbHkgZml0cyB0aGlzIHJlcXVlc3QuCisJCQkgICBXZSBhc3N1bWUgdGhhdCB1c2Vyc3BhY2Ugd2lsbCBiZSBzbWFydCBlbm91Z2ggdG8KKwkJCSAgIHNlZSBhIG5ldyBzdGF0aW9uIGJlaW5nIGV4cGlyZWQgYW5kIHNlbmRzIGJhY2sgYQorCQkJICAgYXV0aHN0YXRpb24gaW9jdGwgdG8gYXV0aG9yaXplIGl0LiAqLworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudCh6ZC0+ZGV2LCBJV0VWRVhQSVJFRCwgJndycXUsIE5VTEwpOworCQkJZ290byByZXN1Ym1pdDsKKwkJfQorCQkvKiBPdGhlciBpbmZvdHlwZXMgYXJlIGhhbmRsZWQgb3V0c2lkZSB0aGlzIGhhbmRsZXIgKi8KKwkJemQtPnJ4bGVuID0gMDsKKwkJd2hpbGUgKGkgPCB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWNvcHlsZW4gPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopJmRhdGFbaSsyXSk7CisJCQkvKiBTYW5pdHkgY2hlY2ssIHNvbWV0aW1lcyB3ZSBnZXQganVuayAqLworCQkJaWYgKGNvcHlsZW4remQtPnJ4bGVuID4gc2l6ZW9mKHpkLT5yeGRhdGEpKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KHpkLT5yeGRhdGEremQtPnJ4bGVuLCBkYXRhK2krNCwgY29weWxlbik7CisJCQl6ZC0+cnhsZW4gKz0gY29weWxlbjsKKwkJCWkgKz0gNjQ7CisJCX0KKwkJaWYgKGkgPj0gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQl6ZC0+cnhkYXRhcyA9IDE7CisJCQl3YWtlX3VwKCZ6ZC0+cnhkYXRhcSk7CisJCX0KKwkJZ290byAgcmVzdWJtaXQ7CisJfQorCS8qIEFjdHVhbCBkYXRhICovCisJaWYgKGRhdGFbdXJiLT5hY3R1YWxfbGVuZ3RoLTFdID09IFpEMTIwMV9QQUNLRVRfUlhEQVRBKSB7CisJCWludCBkYXRhbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoLTE7CisJCXVuc2lnbmVkIHNob3J0IGxlbiwgZmMsIHNlcTsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwkJbGVuID0gbnRvaHMoKihfX2JlMTYgKikmZGF0YVtkYXRhbGVuLTJdKTsKKwkJaWYgKGxlbj5kYXRhbGVuKQorCQkJbGVuPWRhdGFsZW47CisJCWZjID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikmZGF0YVtkYXRhbGVuLTE2XSk7CisJCXNlcSA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopJmRhdGFbZGF0YWxlbi0yNF0pOworCisJCWlmKHpkLT5tb25pdG9yKSB7CisJCQlpZiAoZGF0YWxlbiA8IDI0KQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKGRhdGFsZW4rMjQpKSkKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJCisJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVtkYXRhbGVuLTE2XSwgMik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVtkYXRhbGVuLTJdLCAyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgNiksICZkYXRhW2RhdGFsZW4tMTRdLCA2KTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgNiksICZkYXRhW2RhdGFsZW4tMjJdLCA2KTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgNiksICZkYXRhW2RhdGFsZW4tOF0sIDYpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwgJmRhdGFbZGF0YWxlbi0yNF0sIDIpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhLCBsZW4pOworCQkJc2tiLT5kZXYgPSB6ZC0+ZGV2OworCQkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7CisJCQl6ZC0+c3RhdHMucnhfcGFja2V0cysrOworCQkJemQtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJbmV0aWZfcngoc2tiKTsKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KKwkJCQorCQlpZiAoKHNlcSAmIElFRUU4MDJfMTFfU0NUTF9GUkFHKSB8fAorCQkgICAgKGZjICYgSUVFRTgwMl8xMV9GQ1RMX01PUkVGUkFHUykpIHsKKwkJCXN0cnVjdCB6ZDEyMDFfZnJhZyAqZnJhZyA9IE5VTEw7CisJCQljaGFyICpwdHI7CisKKwkJCWlmIChkYXRhbGVuPDE0KQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQlpZiAoKHNlcSAmIElFRUU4MDJfMTFfU0NUTF9GUkFHKSA9PSAwKSB7CisJCQkJZnJhZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZDEyMDFfZnJhZyopLAorCQkJCSAgICBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIWZyYWcpCisJCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQkJc2tiID0gZGV2X2FsbG9jX3NrYihJRUVFODAyXzExX0RBVEFfTEVOICsxNCsyKTsKKwkJCQlpZiAoIXNrYikgeworCQkJCQlrZnJlZShmcmFnKTsKKwkJCQkJZ290byByZXN1Ym1pdDsKKwkJCQl9CisJCQkJZnJhZy0+c2tiID0gc2tiOworCQkJCWZyYWctPnNlcSA9IHNlcSAmIElFRUU4MDJfMTFfU0NUTF9TRVE7CisJCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJCQltZW1jcHkoc2tiX3B1dChza2IsIDEyKSwgJmRhdGFbZGF0YWxlbi0xNF0sIDEyKTsKKwkJCQltZW1jcHkoc2tiX3B1dChza2IsIDIpLCAmZGF0YVs2XSwgMik7CisJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhKzgsIGxlbik7CisJCQkJaGxpc3RfYWRkX2hlYWQoJmZyYWctPmZub2RlLCAmemQtPmZyYWdsaXN0KTsKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJfQorCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZnJhZywgbm9kZSwgJnpkLT5mcmFnbGlzdCwgZm5vZGUpCisJCQkJaWYoZnJhZy0+c2VxID09IChzZXEmSUVFRTgwMl8xMV9TQ1RMX1NFUSkpCisJCQkJCWJyZWFrOworCQkJaWYgKCFmcmFnKQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQlza2IgPSBmcmFnLT5za2I7CisJCQlwdHIgPSBza2JfcHV0KHNrYiwgbGVuKTsKKwkJCWlmIChwdHIpCisJCQkJbWVtY3B5KHB0ciwgZGF0YSs4LCBsZW4pOworCQkJaWYgKGZjICYgSUVFRTgwMl8xMV9GQ1RMX01PUkVGUkFHUykKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJaGxpc3RfZGVsX2luaXQoJmZyYWctPmZub2RlKTsKKwkJCWtmcmVlKGZyYWcpOworCQkJLyogRmFsbHRocm91Z2ggKi8KKwkJfSBlbHNlIHsKKwkJCWlmIChkYXRhbGVuPDE0KQorCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIDE0ICsgMik7CisJCQlpZiAoIXNrYikKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgMTIpLCAmZGF0YVtkYXRhbGVuLTE0XSwgMTIpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwgJmRhdGFbNl0sIDIpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhKzgsIGxlbik7CisJCX0KKwkJc2tiLT5kZXYgPSB6ZC0+ZGV2OworCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOworCQl6ZC0+c3RhdHMucnhfcGFja2V0cysrOworCQl6ZC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCW5ldGlmX3J4KHNrYik7CisJfQorcmVzdWJtaXQ6CisJbWVtc2V0KGRhdGEsIDAsIFpEMTIwMV9SWFNJWkUpOworCisJdXJiLT5zdGF0dXMgPSAwOworCXVyYi0+ZGV2ID0gemQtPnVzYjsKKwlpZih1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQlmcmVlID0gMTsKKworZXhpdDoKKwlpZiAoZnJlZSkgeworCQl6ZC0+cnhsZW4gPSAwOworCQl6ZC0+cnhkYXRhcyA9IDE7CisJCXdha2VfdXAoJnpkLT5yeGRhdGFxKTsKKwkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldGNvbmZpZyhzdHJ1Y3QgemQxMjAxICp6ZCwgaW50IHJpZCwgdm9pZCAqcmlkZGF0YSwKKwl1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKK3sKKwlpbnQgZXJyOworCWludCBpID0gMDsKKwlpbnQgY29kZTsKKwlpbnQgcmlkX2ZpZDsKKwlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnBkYXRhOworCQorCXpkLT5yeGRhdGFzID0gMDsKKwllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0FDQ0VTUywgcmlkLCAwLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHpkLT5yeGRhdGFxLCB6ZC0+cnhkYXRhcyk7CisJaWYgKCF6ZC0+cnhsZW4pCisJCXJldHVybiAtRUlPOworCisJY29kZSA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikoJnpkLT5yeGRhdGFbNF0pKTsKKwlyaWRfZmlkID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSgmemQtPnJ4ZGF0YVs2XSkpOworCWxlbmd0aCA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikoJnpkLT5yeGRhdGFbOF0pKTsKKwlpZiAobGVuZ3RoID4gemQtPnJ4bGVuKQorCQlsZW5ndGggPSB6ZC0+cnhsZW4tNjsKKworCS8qIElmIGFjY2VzcyBiaXQgaXMgbm90IG9uLCB0aGVuIGVycm9yICovCisJaWYgKChjb2RlICYgWkQxMjAxX0FDQ0VTU0JJVCkgIT0gWkQxMjAxX0FDQ0VTU0JJVCB8fCByaWRfZmlkICE9IHJpZCApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTm90IGVub3VnaCBidWZmZXIgZm9yIGFsbG9jYXRpbmcgZGF0YSAqLworCWlmIChyaWRkYXRhbGVuICE9IChsZW5ndGggLSA0KSkgeworCQlkZXZfZGJnKCZ6ZC0+dXNiLT5kZXYsICJyaWRkYXRhbGVuIG1pc21hdGNoZXMsIGV4cGVjdGVkPSV1LCAocGFja2V0PSV1KSBsZW5ndGg9JXUsIHJpZD0weCUwNFgsIHJpZF9maWQ9MHglMDRYXG4iLAorCQkgICAgcmlkZGF0YWxlbiwgemQtPnJ4bGVuLCBsZW5ndGgsIHJpZCwgcmlkX2ZpZCk7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwl6ZC0+cnhkYXRhcyA9IDA7CisJLyogSXNzdWUgU2V0UnhSaWQgY29tbW5kICovCQkJCisJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9TRVRSWFJJRCwgcmlkLCAwLCBsZW5ndGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBSZWNlaXZlIFJJRCByZWNvcmQgZnJvbSByZXNvdXJjZSBwYWNrZXRzICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHpkLT5yeGRhdGFxLCB6ZC0+cnhkYXRhcyk7CisJaWYgKCF6ZC0+cnhsZW4pCisJCXJldHVybiAtRUlPOworCisJaWYgKHpkLT5yeGRhdGFbemQtPnJ4bGVuIC0gMV0gIT0gWkQxMjAxX1BBQ0tFVF9SRVNPVVJDRSkgeworCQlkZXZfZGJnKCZ6ZC0+dXNiLT5kZXYsICJQYWNrZXQgdHlwZSBtaXNtYXRjaDogMHgleCBub3QgMHgzXG4iLAorCQkgICAgemQtPnJ4ZGF0YVt6ZC0+cnhsZW4tMV0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTZXQgdGhlIGRhdGEgcG9pbnRlciBhbmQgcmVjZWl2ZWQgZGF0YSBsZW5ndGggKi8KKwlwZGF0YSA9IHpkLT5yeGRhdGE7CisJbGVuZ3RoID0gemQtPnJ4bGVuOworCisJZG8geworCQlpbnQgIGFjdHVhbF9sZW5ndGg7CisKKwkJYWN0dWFsX2xlbmd0aCA9IChsZW5ndGggPiA2NCkgPyA2NCA6IGxlbmd0aDsKKworCQlpZihwZGF0YVswXSAhPSAweDMpIHsKKwkJCWRldl9kYmcoJnpkLT51c2ItPmRldiwgIlJ4IFJlc291cmNlIHBhY2tldCB0eXBlIGVycm9yOiAlMDJYXG4iLAorCQkJICAgIHBkYXRhWzBdKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGFjdHVhbF9sZW5ndGggIT0gNjQpIHsKKwkJCS8qIFRyaW0gdGhlIGxhc3QgcGFja2V0IHR5cGUgYnl0ZSAqLworCQkJYWN0dWFsX2xlbmd0aC0tOworCQl9CisKKwkJLyogU2tpcCB0aGUgNCBieXRlcyBoZWFkZXIgKFJJRCBsZW5ndGggYW5kIFJJRCkgKi8KKwkJaWYoaSA9PSAwKSB7CisJCQlwZGF0YSArPSA4OworCQkJYWN0dWFsX2xlbmd0aCAtPSA4OworCQl9CisJCWVsc2UgeworCQkJcGRhdGEgKz0gNDsKKwkJCWFjdHVhbF9sZW5ndGggLT0gNDsKKwkJfQorCQkKKwkJbWVtY3B5KHJpZGRhdGEsIHBkYXRhLCBhY3R1YWxfbGVuZ3RoKTsKKwkJcmlkZGF0YSArPSBhY3R1YWxfbGVuZ3RoOworCQlwZGF0YSArPSBhY3R1YWxfbGVuZ3RoOworCQlsZW5ndGggLT0gNjQ7CisJCWkrKzsKKwl9IHdoaWxlIChsZW5ndGggPiAwKTsKKworCXJldHVybiAwOworfQorCisvKgorICoJcmVzcmVxOgorICoJCWJ5dGUJdHlwZQorICoJCWJ5dGUJc2VxdWVuY2UKKyAqCQl1MTYJcmVzZXJ2ZWQKKyAqCQlieXRlCWRhdGFbMTJdCisgKgl0b3RhbDogMTYKKyAqLworc3RhdGljIGludCB6ZDEyMDFfc2V0Y29uZmlnKHN0cnVjdCB6ZDEyMDEgKnpkLCBpbnQgcmlkLCB2b2lkICpidWYsIGludCBsZW4sIGludCB3YWl0KQoreworCWludCBlcnI7CisJdW5zaWduZWQgY2hhciAqcmVxdWVzdDsKKwlpbnQgcmVxbGVuOworCWNoYXIgc2VxPTA7CisJc3RydWN0IHVyYiAqdXJiOworCXVuc2lnbmVkIGludCBnZnBfbWFzayA9IHdhaXQgPyBHRlBfTk9JTyA6IEdGUF9BVE9NSUM7CisKKwlsZW4gKz0gNDsJCQkvKiBmaXJzdCA0IGFyZSBmb3IgaGVhZGVyICovCisKKwl6ZC0+cnhkYXRhcyA9IDA7CisJemQtPnJ4bGVuID0gMDsKKwlmb3IgKHNlcT0wOyBsZW4gPiAwOyBzZXErKykgeworCQlyZXF1ZXN0ID0ga21hbGxvYygxNiwgZ2ZwX21hc2spOworCQlpZiAoIXJlcXVlc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfbWFzayk7CisJCWlmICghdXJiKSB7CisJCQlrZnJlZShyZXF1ZXN0KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChyZXF1ZXN0LCAwLCAxNik7CisJCXJlcWxlbiA9IGxlbj4xMiA/IDEyIDogbGVuOworCQlyZXF1ZXN0WzBdID0gWkQxMjAxX1VTQl9SRVNSRVE7CisJCXJlcXVlc3RbMV0gPSBzZXE7CisJCXJlcXVlc3RbMl0gPSAwOworCQlyZXF1ZXN0WzNdID0gMDsKKwkJaWYgKHJlcXVlc3RbMV0gPT0gMCkgeworCQkJLyogYWRkIGhlYWRlciAqLworCQkJKihfX2xlMTYqKSZyZXF1ZXN0WzRdID0gY3B1X3RvX2xlMTYoKGxlbi0yKzEpLzIpOworCQkJKihfX2xlMTYqKSZyZXF1ZXN0WzZdID0gY3B1X3RvX2xlMTYocmlkKTsKKwkJCW1lbWNweShyZXF1ZXN0KzgsIGJ1ZiwgcmVxbGVuLTQpOworCQkJYnVmICs9IHJlcWxlbi00OworCQl9IGVsc2UgeworCQkJbWVtY3B5KHJlcXVlc3QrNCwgYnVmLCByZXFsZW4pOworCQkJYnVmICs9IHJlcWxlbjsKKwkJfQorCisJCWxlbiAtPSByZXFsZW47CisKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB6ZC0+dXNiLCB1c2Jfc25kYnVsa3BpcGUoemQtPnVzYiwKKwkJICAgIHpkLT5lbmRwX291dDIpLCByZXF1ZXN0LCAxNiwgemQxMjAxX3VzYmZyZWUsIHpkKTsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBnZnBfbWFzayk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKwl9CisKKwlyZXF1ZXN0ID0ga21hbGxvYygxNiwgZ2ZwX21hc2spOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfbWFzayk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUocmVxdWVzdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkqKChfX2xlMzIqKXJlcXVlc3QpID0gY3B1X3RvX2xlMzIoWkQxMjAxX1VTQl9DTURSRVEpOworCSooKF9fbGUxNiopJnJlcXVlc3RbNF0pID0gCisJICAgIGNwdV90b19sZTE2KFpEMTIwMV9DTURDT0RFX0FDQ0VTU3xaRDEyMDFfQUNDRVNTQklUKTsKKwkqKChfX2xlMTYqKSZyZXF1ZXN0WzZdKSA9IGNwdV90b19sZTE2KHJpZCk7CisJKigoX19sZTE2KikmcmVxdWVzdFs4XSkgPSBjcHVfdG9fbGUxNigwKTsKKwkqKChfX2xlMTYqKSZyZXF1ZXN0WzEwXSkgPSBjcHVfdG9fbGUxNigwKTsKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHpkLT51c2IsIHVzYl9zbmRidWxrcGlwZSh6ZC0+dXNiLCB6ZC0+ZW5kcF9vdXQyKSwKKwkgICAgIHJlcXVlc3QsIDE2LCB6ZDEyMDFfdXNiZnJlZSwgemQpOworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgZ2ZwX21hc2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCQorCWlmICh3YWl0KSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6ZC0+cnhkYXRhcSwgemQtPnJ4ZGF0YXMpOworCQlpZiAoIXpkLT5yeGxlbiB8fCBsZTE2X3RvX2NwdSgqKF9fbGUxNiopJnpkLT5yeGRhdGFbNl0pICE9IHJpZCkgeworCQkJZGV2X2RiZygmemQtPnVzYi0+ZGV2LCAid3Jvbmcgb3Igbm8gUklEIHJlY2VpdmVkXG4iKTsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyOgorCWtmcmVlKHJlcXVlc3QpOworCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHpkMTIwMV9nZXRjb25maWcxNihzdHJ1Y3QgemQxMjAxICp6ZCwgaW50IHJpZCwgc2hvcnQgKnZhbCkKK3sKKwlpbnQgZXJyOworCV9fbGUxNiB6ZHZhbDsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcoemQsIHJpZCwgJnpkdmFsLCBzaXplb2YoX19sZTE2KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkqdmFsID0gbGUxNl90b19jcHUoemR2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB6ZDEyMDFfc2V0Y29uZmlnMTYoc3RydWN0IHpkMTIwMSAqemQsIGludCByaWQsIHNob3J0IHZhbCkKK3sKKwlfX2xlMTYgemR2YWwgPSBjcHVfdG9fbGUxNih2YWwpOworCXJldHVybiAoemQxMjAxX3NldGNvbmZpZyh6ZCwgcmlkLCAmemR2YWwsIHNpemVvZihfX2xlMTYpLCAxKSk7Cit9CisKK2ludCB6ZDEyMDFfZHJ2cl9zdGFydChzdHJ1Y3QgemQxMjAxICp6ZCkKK3sKKwlpbnQgZXJyLCBpOworCXNob3J0IG1heDsKKwlfX2xlMTYgemRtYXg7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCQorCWJ1ZmZlciA9IGttYWxsb2MoWkQxMjAxX1JYU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChidWZmZXIsIDAsIFpEMTIwMV9SWFNJWkUpOworCisJdXNiX2ZpbGxfYnVsa191cmIoemQtPnJ4X3VyYiwgemQtPnVzYiwgCisJICAgIHVzYl9yY3ZidWxrcGlwZSh6ZC0+dXNiLCB6ZC0+ZW5kcF9pbiksIGJ1ZmZlciwgWkQxMjAxX1JYU0laRSwKKwkgICAgemQxMjAxX3VzYnJ4LCB6ZCk7CisKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih6ZC0+cnhfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9idWZmZXI7CisJCisJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9JTklULCAwLCAwLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91cmI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk1BWFRYQlVGRkVSTlVNQkVSLCAmemRtYXgsCisJICAgIHNpemVvZihfX2xlMTYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91cmI7CisKKwltYXggPSBsZTE2X3RvX2NwdSh6ZG1heCk7CisJZm9yIChpPTA7IGk8bWF4OyBpKyspIHsKKwkJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9BTExPQywgMTUxNCwgMCwgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl91cmI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91cmI6CisJdXNiX2tpbGxfdXJiKHpkLT5yeF91cmIpOworCXJldHVybiBlcnI7CitlcnJfYnVmZmVyOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIGVycjsKK30KKworLyoJTWFnaWMgYWxlcnQ6IFRoZSBmaXJtd2FyZSBkb2Vzbid0IHNlZW0gdG8gbGlrZSB0aGUgTUFDIHN0YXRlIGJlaW5nCisgKgl0b2dnbGVkIGluIHByb21pc2MgKGFrYSBtb25pdG9yKSBtb2RlLgorICoJKEl0IHdvcmtzIGEgbnVtYmVyIG9mIHRpbWVzLCBidXQgd2lsbCBoYWx0IGV2ZW50dWFsbHkpCisgKglTbyB3ZSB0dXJuIGl0IG9mIGJlZm9yZSBkaXNhYmxpbmcgYW5kIG9uIGFmdGVyIGVuYWJsaW5nIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIGludCB6ZDEyMDFfZW5hYmxlKHN0cnVjdCB6ZDEyMDEgKnpkKQoreworCWludCBlcnI7CisKKwlpZiAoemQtPm1hY19lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfRU5BQkxFLCAwLCAwLCAwKTsKKwlpZiAoIWVycikKKwkJemQtPm1hY19lbmFibGVkID0gMTsKKworCWlmICh6ZC0+bW9uaXRvcikKKwkJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX1BST01JU0NVT1VTTU9ERSwgMSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9kaXNhYmxlKHN0cnVjdCB6ZDEyMDEgKnpkKQoreworCWludCBlcnI7CisJCisJaWYgKCF6ZC0+bWFjX2VuYWJsZWQpCisJCXJldHVybiAwOworCWlmICh6ZC0+bW9uaXRvcikgeworCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfUFJPTUlTQ1VPVVNNT0RFLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9ESVNBQkxFLCAwLCAwLCAwKTsKKwlpZiAoIWVycikKKwkJemQtPm1hY19lbmFibGVkID0gMDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9tYWNfcmVzZXQoc3RydWN0IHpkMTIwMSAqemQpCit7CisJaWYgKCF6ZC0+bWFjX2VuYWJsZWQpCisJCXJldHVybiAwOworCXpkMTIwMV9kaXNhYmxlKHpkKTsKKwlyZXR1cm4gemQxMjAxX2VuYWJsZSh6ZCk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2pvaW4oc3RydWN0IHpkMTIwMSAqemQsIGNoYXIgKmVzc2lkLCBpbnQgZXNzaWRsZW4pCit7CisJaW50IGVyciwgdmFsOworCWNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzJdOworCisJZXJyID0gemQxMjAxX2Rpc2FibGUoemQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2YWwgPSBaRDEyMDFfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTTsKKwl2YWwgfD0gWkQxMjAxX0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWTsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GQVVUSEVOVElDQVRJT04sIHZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCSooX19sZTE2ICopYnVmID0gY3B1X3RvX2xlMTYoZXNzaWRsZW4pOworCW1lbWNweShidWYrMiwgZXNzaWQsIGVzc2lkbGVuKTsKKwlpZiAoIXpkLT5hcCkgewkvKiBOb3JtYWwgc3RhdGlvbiAqLworCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORkRFU0lSRURTU0lELCBidWYsCisJCSAgICBJV19FU1NJRF9NQVhfU0laRSsyLCAxKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsJLyogQVAgKi8KKwkJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZPV05TU0lELCBidWYsCisJCSAgICBJV19FU1NJRF9NQVhfU0laRSsyLCAxKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZPV05NQUNBRERSLCAKKwkgICAgemQtPmRldi0+ZGV2X2FkZHIsIHpkLT5kZXYtPmFkZHJfbGVuLCAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gemQxMjAxX2VuYWJsZSh6ZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1zbGVlcCgxMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwkvKiBTdGFydCBNQUMgd2l0aCB3aWxkY2FyZCBpZiBubyBlc3NpZCBzZXQgKi8KKwlpZiAoIXpkLT5tYWNfZW5hYmxlZCkKKwkJemQxMjAxX2pvaW4oemQsIHpkLT5lc3NpZCwgemQtPmVzc2lkbGVuKTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX25ldF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQorCXJldHVybiAwOworfQorCisvKgorCVJGQyAxMDQyIGVuY2Fwc3VsYXRlcyBFdGhlcm5ldCBmcmFtZXMgaW4gODAyLjExIGZyYW1lcworCWJ5IHByZWZpeGluZyB0aGVtIHdpdGggMHhhYSwgMHhhYSwgMHgwMykgZm9sbG93ZWQgYnkgYSBTTkFQIE9JRCBvZiAwCisJKDB4MDAsIDB4MDAsIDB4MDApLiBaZCByZXF1aXJlcyBhbiBhZGRpdGlvbm5hbCBwYWRkaW5nLCBjb3B5CisJb2YgZXRoZXJuZXQgYWRkcmVzc2VzLCBsZW5ndGggb2YgdGhlIHN0YW5kYXJkIFJGQyAxMDQyIHBhY2tldAorCWFuZCBhIGNvbW1hbmQgYnl0ZSAod2hpY2ggaXMgbnVsIGZvciB0eCkuCisJCisJdHggZnJhbWUgKGZyb20gV2xhbiBORyk6CisJUkZDIDEwNDI6CisJCWxsYwkJMHhBQSAweEFBIDB4MDMgKDgwMi4yIExMQykKKwkJc25hcAkJMHgwMCAweDAwIDB4MDAgKEV0aGVybmV0IGVuY2Fwc3VsYXRlZCkKKwkJdHlwZQkJMiBieXRlcywgRXRoZXJuZXQgdHlwZSBmaWVsZAorCQlwYXlsb2FkCQkobWludXMgZXRoIGhlYWRlcikKKwlaeWRhcyBzcGVjaWZpYzoKKwkJcGFkZGluZwkJMUIgaWYgKHNrYi0+bGVuKzgrMSklNjQ9PTAKKwkJRXRoIE1BQyBhZGRyCTEyIGJ5dGVzLCBFdGhlcm5ldCBNQUMgYWRkcmVzc2VzCisJCWxlbmd0aAkJMiBieXRlcywgUkZDIDEwNDIgcGFja2V0IGxlbmd0aCAKKwkJCQkobGxjK3NuYXArdHlwZStwYXlsb2FkKQorCQl6ZAkJMSBudWxsIGJ5dGUsIHpkMTIwMSBwYWNrZXQgdHlwZQorICovCitzdGF0aWMgaW50IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXVuc2lnbmVkIGNoYXIgKnR4YnVmID0gemQtPnR4ZGF0YTsKKwlpbnQgdHhidWZsZW4sIHBhZCA9IDAsIGVycjsKKwlzdHJ1Y3QgdXJiICp1cmIgPSB6ZC0+dHhfdXJiOworCisJaWYgKCF6ZC0+bWFjX2VuYWJsZWQgfHwgemQtPm1vbml0b3IpIHsKKwkJemQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwl0eGJ1ZmxlbiA9IHNrYi0+bGVuICsgOCArIDE7CisJaWYgKHR4YnVmbGVuJTY0ID09IDApIHsKKwkJcGFkID0gMTsKKwkJdHhidWZsZW4rKzsKKwl9CisJdHhidWZbMF0gPSAweEFBOworCXR4YnVmWzFdID0gMHhBQTsKKwl0eGJ1ZlsyXSA9IDB4MDM7CisJdHhidWZbM10gPSAweDAwOwkvKiByZmMxMDQyICovCisJdHhidWZbNF0gPSAweDAwOworCXR4YnVmWzVdID0gMHgwMDsKKworCW1lbWNweSh0eGJ1Zis2LCBza2ItPmRhdGErMTIsIHNrYi0+bGVuLTEyKTsKKwlpZiAocGFkKQorCQl0eGJ1Zltza2ItPmxlbi0xMis2XT0wOworCW1lbWNweSh0eGJ1Zitza2ItPmxlbi0xMis2K3BhZCwgc2tiLT5kYXRhLCAxMik7CisJKihfX2JlMTYqKSZ0eGJ1Zltza2ItPmxlbis2K3BhZF0gPSBodG9ucyhza2ItPmxlbi0xMis2KTsKKwl0eGJ1Zlt0eGJ1Zmxlbi0xXSA9IDA7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHpkLT51c2IsIHVzYl9zbmRidWxrcGlwZSh6ZC0+dXNiLCB6ZC0+ZW5kcF9vdXQpLAorCSAgICB0eGJ1ZiwgdHhidWZsZW4sIHpkMTIwMV91c2J0eCwgemQpOworCisJZXJyID0gdXNiX3N1Ym1pdF91cmIoemQtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVycikgeworCQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCXJldHVybiBlcnI7CisJfQorCXpkLT5zdGF0cy50eF9wYWNrZXRzKys7CisJemQtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWtmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHpkMTIwMV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCWlmICghemQpCisJCXJldHVybjsKKwlkZXZfd2FybigmemQtPnVzYi0+ZGV2LCAiJXM6IFRYIHRpbWVvdXQsIHNob290aW5nIGRvd24gdXJiXG4iLAorCSAgICBkZXYtPm5hbWUpOworCXpkLT50eF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJdXNiX3VubGlua191cmIoemQtPnR4X3VyYik7CisJemQtPnN0YXRzLnR4X2Vycm9ycysrOworCS8qIFJlc3RhcnQgdGhlIHRpbWVvdXQgdG8gcXVpZXQgdGhlIHdhdGNoZG9nOiAqLworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJaW50IGVycjsKKworCWlmICghemQpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZPV05NQUNBRERSLCAKKwkgICAgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbiwgMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisKKwlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqemQxMjAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwlyZXR1cm4gJnpkLT5zdGF0czsKK30KKworc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICp6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCXJldHVybiAmemQtPml3c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIHpkMTIwMV9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gZGV2LT5tY19saXN0OworCXVuc2lnbmVkIGNoYXIgcmVxYnVmW0VUSF9BTEVOKlpEMTIwMV9NQVhNVUxUSV07CisJaW50IGk7CisKKwlpZiAoZGV2LT5tY19jb3VudCA+IFpEMTIwMV9NQVhNVUxUSSkKKwkJcmV0dXJuOworCisJZm9yIChpPTA7IGk8ZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW1lbWNweShyZXFidWYraSpFVEhfQUxFTiwgbWMtPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCW1jID0gbWMtPm5leHQ7CisJfQorCXpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GR1JPVVBBRERSRVNTLCByZXFidWYsCisJICAgIGRldi0+bWNfY291bnQqRVRIX0FMRU4sIDApOworCQorfQorCitzdGF0aWMgaW50IHpkMTIwMV9jb25maWdfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKwlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExYiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgY2hhbm5lbCA9IDA7CisJaW50IGVycjsKKworCWlmIChmcmVxLT5lID09IDApCisJCWNoYW5uZWwgPSBmcmVxLT5tOworCWVsc2UgeworCQlpZiAoZnJlcS0+bSA+PSAyNDgyKQorCQkJY2hhbm5lbCA9IDE0OworCQlpZiAoZnJlcS0+bSA+PSAyNDA3KQorCQkJY2hhbm5lbCA9IChmcmVxLT5tLTI0MDcpLzU7CisJfQorCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk9XTkNIQU5ORUwsIGNoYW5uZWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGNoYW5uZWw7CisJaW50IGVycjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZPV05DSEFOTkVMLCAmY2hhbm5lbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlmcmVxLT5lID0gMDsKKwlmcmVxLT5tID0gY2hhbm5lbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IHBvcnR0eXBlLCBtb25pdG9yID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcltJV19FU1NJRF9NQVhfU0laRSsyXTsKKwlpbnQgZXJyOworCisJaWYgKHpkLT5hcCkgeworCQlpZiAoKm1vZGUgIT0gSVdfTU9ERV9NQVNURVIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX1BST01JU0NVT1VTTU9ERSwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl6ZC0+ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCXN3aXRjaCgqbW9kZSkgeworCQljYXNlIElXX01PREVfTU9OSVRPUjoKKwkJCW1vbml0b3IgPSAxOworCQkJemQtPmRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJCQkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggYnkKKwkJCSAgIHNldHRpbmcgYW4gJ2ltcG9zc2libGUnIGVzc2lkLgorCQkJICAgKG90aGVyd2lzZSB3ZSBtZXNzIHVwIGZpcm13YXJlKQorCQkJICovCisJCQl6ZDEyMDFfam9pbih6ZCwgIlwwLSojXDAiLCA1KTsKKwkJCS8qIFB1dCBwb3J0IGluIHBJQlNTICovCisJCWNhc2UgODogLyogTm8gcHNldWRvLUlCU1MgaW4gd2lyZWxlc3MgZXh0ZW5zaW9ucyAoeWV0KSAqLworCQkJcG9ydHR5cGUgPSBaRDEyMDFfUE9SVFRZUEVfUFNFVURPSUJTUzsKKwkJCWJyZWFrOworCQljYXNlIElXX01PREVfQURIT0M6CisJCQlwb3J0dHlwZSA9IFpEMTIwMV9QT1JUVFlQRV9JQlNTOworCQkJYnJlYWs7CisJCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJCXBvcnR0eXBlID0gWkQxMjAxX1BPUlRUWVBFX0JTUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBPUlRUWVBFLCBwb3J0dHlwZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAoemQtPm1vbml0b3IgJiYgIW1vbml0b3IpIHsKKwkJCXpkMTIwMV9kaXNhYmxlKHpkKTsKKwkJCSooX19sZTE2ICopYnVmZmVyID0gY3B1X3RvX2xlMTYoemQtPmVzc2lkbGVuKTsKKwkJCW1lbWNweShidWZmZXIrMiwgemQtPmVzc2lkLCB6ZC0+ZXNzaWRsZW4pOworCQkJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCSAgICBidWZmZXIsIElXX0VTU0lEX01BWF9TSVpFKzIsIDEpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCX0KKwl6ZC0+bW9uaXRvcj1tb25pdG9yOworCS8qIElmIG1vbml0b3IgbW9kZSBpcyBzZXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHVybiBpdCBvbiBoZXJlIHNpbmNlIGl0CisJICogaXMgZG9uZSBkdXJpbmcgbWFjIHJlc2V0IGFueXdheSAoc2VlIHpkMTIwMV9tYWNfZW5hYmxlKS4KKwkgKi8KKworCXpkMTIwMV9tYWNfcmVzZXQoemQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgcG9ydHR5cGU7CisJaW50IGVycjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQT1JUVFlQRSwgJnBvcnR0eXBlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXN3aXRjaChwb3J0dHlwZSkgeworCQljYXNlIFpEMTIwMV9QT1JUVFlQRV9JQlNTOgorCQkJKm1vZGUgPSBJV19NT0RFX0FESE9DOworCQkJYnJlYWs7CisJCWNhc2UgWkQxMjAxX1BPUlRUWVBFX0JTUzoKKwkJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJCWJyZWFrOworCQljYXNlIFpEMTIwMV9QT1JUVFlQRV9XRFM6CisJCQkqbW9kZSA9IElXX01PREVfUkVQRUFUOworCQkJYnJlYWs7CisJCWNhc2UgWkQxMjAxX1BPUlRUWVBFX1BTRVVET0lCU1M6CisJCQkqbW9kZSA9IDg7LyogTm8gUHNldWRvLUlCU1MuLi4gKi8KKwkJCWJyZWFrOworCQljYXNlIFpEMTIwMV9QT1JUVFlQRV9BUDoKKwkJCSptb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoJnpkLT51c2ItPmRldiwgIlVua25vd24gcG9ydHR5cGU6ICVkXG4iLAorCQkJICAgIHBvcnR0eXBlKTsKKwkJCSptb2RlID0gSVdfTU9ERV9BVVRPOworCX0KKwlpZiAoemQtPm1vbml0b3IpCisJCSptb2RlID0gSVdfTU9ERV9NT05JVE9SOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqd3JxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOworCisJd3JxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKwlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSBXSVJFTEVTU19FWFQ7CisKKwlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEyODsKKwlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAxMjg7CisJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMTI4OworCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gNzsKKworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gWkQxMjAxX05VTUtFWVM7CisKKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gNDsKKwlyYW5nZS0+Yml0cmF0ZVswXSA9IDEwMDAwMDA7CisJcmFuZ2UtPmJpdHJhdGVbMV0gPSAyMDAwMDAwOworCXJhbmdlLT5iaXRyYXRlWzJdID0gNTUwMDAwMDsKKwlyYW5nZS0+Yml0cmF0ZVszXSA9IDExMDAwMDAwOworCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5taW5fZnJhZyA9IFpEMTIwMV9GUkFHTUlOOworCXJhbmdlLT5tYXhfcnRzID0gWkQxMjAxX1JUU01BWDsKKwlyYW5nZS0+bWluX2ZyYWcgPSBaRDEyMDFfRlJBR01BWDsKKworCXJldHVybiAwOworfQorCisvKglMaXR0bGUgYml0IG9mIG1hZ2ljIGhlcmU6IHdlIG9ubHkgZ2V0IHRoZSBxdWFsaXR5IGlmIHdlIHBvbGwKKyAqCWZvciBpdCwgYW5kIHdlIG5ldmVyIGdldCBhbiBhY3R1YWwgcmVxdWVzdCB0byB0cmlnZ2VyIHN1Y2gKKyAqCWEgcG9sbC4gVGhlcmVmb3JlIHdlICdhc3VtZScgdGhhdCB0aGUgdXNlciB3aWxsIHNvb24gYXNrIGZvcgorICoJdGhlIHN0YXRzIGFmdGVyIGFza2luZyB0aGUgYnNzaWQuCisgKi8KK3N0YXRpYyBpbnQgemQxMjAxX2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJdW5zaWduZWQgY2hhciBidWZmZXJbNl07CisKKwlpZiAoIXpkMTIwMV9nZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ09NTVNRVUFMSVRZLCBidWZmZXIsIDYpKSB7CisJCS8qIFVuZm9ydHVuYXRseSB0aGUgcXVhbGl0eSBhbmQgbm9pc2UgcmVwb3J0ZWQgaXMgdXNlbGVzcy4KKwkJICAgdGhleSBzZWVtIHRvIGJlIGFjY3VtdWxhdG9ycyB0aGF0IGluY3JlYXNlIHVudGlsIHlvdQorCQkgICByZWFkIHRoZW0sIHVubGVzcyB3ZSBwb2xsIG9uIGEgZml4ZWQgaW50ZXJ2YWwgd2UgY2FuJ3QKKwkJICAgdXNlIHRoZW0KKwkJICovCisJCS8qemQtPml3c3RhdHMucXVhbC5xdWFsID0gbGUxNl90b19jcHUoKChfX2xlMTYgKilidWZmZXIpWzBdKTsqLworCQl6ZC0+aXdzdGF0cy5xdWFsLmxldmVsID0gbGUxNl90b19jcHUoKChfX2xlMTYgKilidWZmZXIpWzFdKTsKKwkJLyp6ZC0+aXdzdGF0cy5xdWFsLm5vaXNlID0gbGUxNl90b19jcHUoKChfX2xlMTYgKilidWZmZXIpWzJdKTsqLworCQl6ZC0+aXdzdGF0cy5xdWFsLnVwZGF0ZWQgPSAyOworCX0KKworCXJldHVybiB6ZDEyMDFfZ2V0Y29uZmlnKHpkLFpEMTIwMV9SSURfQ1VSUkVOVEJTU0lELGFwX2FkZHItPnNhX2RhdGEsNik7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCS8qIFdlIGRvIGV2ZXJ5dGhpbmcgaW4gZ2V0X3NjYW4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlpbnQgZXJyLCBpLCBqLCBlbmFibGVkX3NhdmU7CisJc3RydWN0IGl3X2V2ZW50IGl3ZTsKKwljaGFyICpjZXYgPSBleHRyYTsKKwljaGFyICplbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworCisJLyogTm8gc2Nhbm5pbmcgaW4gQVAgbW9kZSAqLworCWlmICh6ZC0+YXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIFNjYW4gZG9lc24ndCBzZWVtIHRvIHdvcmsgaWYgZGlzYWJsZWQgKi8KKwllbmFibGVkX3NhdmUgPSB6ZC0+bWFjX2VuYWJsZWQ7CisJemQxMjAxX2VuYWJsZSh6ZCk7CisKKwl6ZC0+cnhkYXRhcyA9IDA7CisJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9JTlFVSVJFLCAKKwkgICAgIFpEMTIwMV9JTlFfU0NBTlJFU1VMVFMsIDAsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoemQtPnJ4ZGF0YXEsIHpkLT5yeGRhdGFzKTsKKwlpZiAoIXpkLT5yeGxlbikKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobGUxNl90b19jcHUoKihfX2xlMTYqKSZ6ZC0+cnhkYXRhWzJdKSAhPSBaRDEyMDFfSU5RX1NDQU5SRVNVTFRTKQorCQlyZXR1cm4gLUVJTzsKKworCWZvcihpPTg7IGk8emQtPnJ4bGVuOyBpKz02MikgeworCQlpd2UuY21kID0gU0lPQ0dJV0FQOworCQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgemQtPnJ4ZGF0YStpKzYsIDYpOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKworCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHpkLT5yeGRhdGFbaSsxNl07CisJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjZXYsIGVuZF9idWYsICZpd2UsIHpkLT5yeGRhdGEraSsxOCk7CisKKwkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCQlpZiAoemQtPnJ4ZGF0YVtpKzE0XSYweDAxKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJCQorCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJCWl3ZS51LmZyZXEubSA9IHpkLT5yeGRhdGFbaSswXTsKKwkJaXdlLnUuZnJlcS5lID0gMDsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJCQorCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSAwOworCQlpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKwkJZm9yIChqPTA7IGo8MTA7IGorKykgaWYgKHpkLT5yeGRhdGFbaSs1MCtqXSkgeworCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICh6ZC0+cnhkYXRhW2krNTAral0mMHg3ZikqNTAwMDAwOworCQkJY2V2PWl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCSAgICBJV19FVl9QQVJBTV9MRU4pOworCQl9CisJCQorCQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCQlpZiAoemQtPnJ4ZGF0YVtpKzE0XSYweDEwKQorCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEOworCQllbHNlCisJCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjZXYsIGVuZF9idWYsICZpd2UsIE5VTEwpOworCQkKKwkJaXdlLmNtZCA9IElXRVZRVUFMOworCQlpd2UudS5xdWFsLnF1YWwgPSB6ZC0+cnhkYXRhW2krNF07CisJCWl3ZS51LnF1YWwubm9pc2U9IHpkLT5yeGRhdGFbaSsyXS8xMC0xMDA7CisJCWl3ZS51LnF1YWwubGV2ZWwgPSAoMjU2K3pkLT5yeGRhdGFbaSs0XSoxMDApLzI1NS0xMDA7CisJCWl3ZS51LnF1YWwudXBkYXRlZCA9IDc7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCX0KKworCWlmICghZW5hYmxlZF9zYXZlKQorCQl6ZDEyMDFfZGlzYWJsZSh6ZCk7CisKKwlzcnEtPmxlbmd0aCA9IGNldiAtIGV4dHJhOworCXNycS0+ZmxhZ3MgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCWlmIChkYXRhLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGEtPmxlbmd0aCA8IDEpCisJCWRhdGEtPmxlbmd0aCA9IDE7CisJemQtPmVzc2lkbGVuID0gZGF0YS0+bGVuZ3RoLTE7CisJbWVtc2V0KHpkLT5lc3NpZCwgMCwgSVdfRVNTSURfTUFYX1NJWkUrMSk7CisJbWVtY3B5KHpkLT5lc3NpZCwgZXNzaWQsIGRhdGEtPmxlbmd0aCk7CisJcmV0dXJuIHpkMTIwMV9qb2luKHpkLCB6ZC0+ZXNzaWQsIHpkLT5lc3NpZGxlbik7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKworCW1lbWNweShlc3NpZCwgemQtPmVzc2lkLCB6ZC0+ZXNzaWRsZW4pOworCWRhdGEtPmZsYWdzID0gMTsKKwlkYXRhLT5sZW5ndGggPSB6ZC0+ZXNzaWRsZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKm5pY2spCit7CisJc3RyY3B5KG5pY2ssICJ6ZDEyMDEiKTsKKwlkYXRhLT5mbGFncyA9IDE7CisJZGF0YS0+bGVuZ3RoID0gc3RybGVuKG5pY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IHJhdGU7CisJaW50IGVycjsKKworCXN3aXRjaCAocnJxLT52YWx1ZSkgeworCQljYXNlIDEwMDAwMDA6CisJCQlyYXRlID0gWkQxMjAxX1JBVEVCMTsKKwkJCWJyZWFrOworCQljYXNlIDIwMDAwMDA6CisJCQlyYXRlID0gWkQxMjAxX1JBVEVCMjsKKwkJCWJyZWFrOworCQljYXNlIDU1MDAwMDA6CisJCQlyYXRlID0gWkQxMjAxX1JBVEVCNTsKKwkJCWJyZWFrOworCQljYXNlIDExMDAwMDAwOgorCQlkZWZhdWx0OgorCQkJcmF0ZSA9IFpEMTIwMV9SQVRFQjExOworCQkJYnJlYWs7CisJfQorCWlmICghcnJxLT5maXhlZCkgeyAvKiBBbHNvIGVuYWJsZSBhbGwgbG93ZXIgYml0cmF0ZXMgKi8KKwkJcmF0ZSB8PSByYXRlLTE7CisJfQorCQorCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9UWFJBVEVDTlRMLCByYXRlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IHJhdGU7CisJaW50IGVycjsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DVVJSRU5UVFhSQVRFLCAmcmF0ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaChyYXRlKSB7CisJCWNhc2UgMToKKwkJCXJycS0+dmFsdWUgPSAxMDAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXJycS0+dmFsdWUgPSAyMDAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXJycS0+dmFsdWUgPSA1NTAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMTE6CisJCQlycnEtPnZhbHVlID0gMTEwMDAwMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJycS0+dmFsdWUgPSAwOworCX0KKwlycnEtPmZpeGVkID0gMDsKKwlycnEtPmRpc2FibGVkID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJaW50IGVycjsKKwlzaG9ydCB2YWwgPSBydHMtPnZhbHVlOworCisJaWYgKHJ0cy0+ZGlzYWJsZWQgfHwgIXJ0cy0+Zml4ZWQpCisJCXZhbCA9IFpEMTIwMV9SVFNNQVg7CisJaWYgKHZhbCA+IFpEMTIwMV9SVFNNQVgpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZSVFNUSFJFU0hPTEQsIHZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBydHN0OworCWludCBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUlRTVEhSRVNIT0xELCAmcnRzdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlydHMtPnZhbHVlID0gcnRzdDsKKwlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPT0gWkQxMjAxX1JUU01BWCk7CisJcnRzLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJaW50IGVycjsKKwlzaG9ydCB2YWwgPSBmcmFnLT52YWx1ZTsKKworCWlmIChmcmFnLT5kaXNhYmxlZCB8fCAhZnJhZy0+Zml4ZWQpCisJCXZhbCA9IFpEMTIwMV9GUkFHTUFYOworCWlmICh2YWwgPiBaRDEyMDFfRlJBR01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbCA8IFpEMTIwMV9GUkFHTUlOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFsICYgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkZSQUdUSFJFU0hPTEQsIHZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGZyYWd0OworCWludCBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GRlJBR1RIUkVTSE9MRCwgJmZyYWd0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZyYWctPnZhbHVlID0gZnJhZ3Q7CisJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPT0gWkQxMjAxX0ZSQUdNQVgpOworCWZyYWctPmZpeGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBpOworCWludCBlcnIsIHJpZDsKKworCWlmIChlcnEtPmxlbmd0aCA+IFpEMTIwMV9NQVhLRVlMRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKS0xOworCWlmIChpID09IC0xKSB7CisJCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCxaRDEyMDFfUklEX0NORkRFRkFVTFRLRVlJRCwmaSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZSUQsIGkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoaSA8IDAgfHwgaSA+PSBaRDEyMDFfTlVNS0VZUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyaWQgPSBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVkwICsgaTsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCByaWQsIGtleSwgZXJxLT5sZW5ndGgsIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJemQtPmVuY29kZV9rZXlsZW5baV0gPSBlcnEtPmxlbmd0aDsKKwltZW1jcHkoemQtPmVuY29kZV9rZXlzW2ldLCBrZXksIGVycS0+bGVuZ3RoKTsKKworCWk9MDsKKwlpZiAoIShlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEICYgSVdfRU5DT0RFX01PREUpKSB7CisJCWkgfD0gMHgwMTsKKwkJemQtPmVuY29kZV9lbmFibGVkID0gMTsKKwl9IGVsc2UKKwkJemQtPmVuY29kZV9lbmFibGVkID0gMDsKKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEICYgSVdfRU5DT0RFX01PREUpIHsKKwkJaSB8PSAweDAyOworCQl6ZC0+ZW5jb2RlX3Jlc3RyaWN0ZWQgPSAxOworCX0gZWxzZQorCQl6ZC0+ZW5jb2RlX3Jlc3RyaWN0ZWQgPSAwOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZXRUJGTEFHUywgaSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICh6ZC0+ZW5jb2RlX2VuYWJsZWQpCisJCWkgPSBaRDEyMDFfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZOworCWVsc2UKKwkJaSA9IFpEMTIwMV9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZBVVRIRU5USUNBVElPTiwgaSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBpOworCWludCBlcnI7CisKKwlpZiAoemQtPmVuY29kZV9lbmFibGVkKQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJZWxzZQorCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWlmICh6ZC0+ZW5jb2RlX3Jlc3RyaWN0ZWQpCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CisJZWxzZQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOworCisJaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtMTsKKwlpZiAoaSA9PSAtMSkgeworCQllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWUlELCAmaSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoaTwwIHx8IGk+PSBaRDEyMDFfTlVNS0VZUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnEtPmZsYWdzIHw9IGkrMTsKKwkKKwllcnEtPmxlbmd0aCA9IHpkLT5lbmNvZGVfa2V5bGVuW2ldOworCW1lbWNweShrZXksIHpkLT5lbmNvZGVfa2V5c1tpXSwgZXJxLT5sZW5ndGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgZW5hYmxlZCwgZHVyYXRpb24sIGxldmVsOworCWludCBlcnI7CisKKwllbmFibGVkID0gdndycS0+ZGlzYWJsZWQgPyAwIDogMTsKKwlpZiAoZW5hYmxlZCkgeworCQlpZiAodndycS0+ZmxhZ3MgJiBJV19QT1dFUl9QRVJJT0QpIHsKKwkJCWR1cmF0aW9uID0gdndycS0+dmFsdWU7CisJCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIAorCQkJICAgIFpEMTIwMV9SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwgZHVyYXRpb24pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkgeworCQkJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCAKKwkJCSAgICBaRDEyMDFfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sICZkdXJhdGlvbik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlsZXZlbCA9IHZ3cnEtPnZhbHVlICogNCAvIGR1cmF0aW9uOworCQkJaWYgKGxldmVsID4gNCkKKwkJCQlsZXZlbCA9IDQ7CisJCQlpZiAobGV2ZWwgPCAwKQorCQkJCWxldmVsID0gMDsKKwkJCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQTUVQUywKKwkJCSAgICBsZXZlbCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CitvdXQ6CisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBNRU5BQkxFRCwgZW5hYmxlZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgZW5hYmxlZCwgbGV2ZWwsIGR1cmF0aW9uOworCWludCBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE1FTkFCTEVELCAmZW5hYmxlZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE1FUFMsICZsZXZlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwgJmR1cmF0aW9uKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXZ3cnEtPmRpc2FibGVkID0gZW5hYmxlZCA/IDAgOiAxOworCWlmICh2d3JxLT5mbGFncyAmIElXX1BPV0VSX1RZUEUpIHsKKwkJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKSB7CisJCQl2d3JxLT52YWx1ZSA9IGR1cmF0aW9uOworCQkJdndycS0+ZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7CisJCX0gZWxzZSB7CisJCQl2d3JxLT52YWx1ZSA9IGR1cmF0aW9uICogbGV2ZWwgLyA0OworCQkJdndycS0+ZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOworCQl9CisJfQorCWlmICh2d3JxLT5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKKwkJaWYgKGVuYWJsZWQgJiYgbGV2ZWwpCisJCQl2d3JxLT5mbGFncyA9IElXX1BPV0VSX1VOSUNBU1RfUjsKKwkJZWxzZQorCQkJdndycS0+ZmxhZ3MgPSBJV19QT1dFUl9BTExfUjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciB6ZDEyMDFfaXdfaGFuZGxlcltdID0KK3sKKwkoaXdfaGFuZGxlcikgemQxMjAxX2NvbmZpZ19jb21taXQsCS8qIFNJT0NTSVdDT01NSVQgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9uYW1lLCAgICAJLyogU0lPQ0dJV05BTUUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXTldJRCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NHSVdOV0lEICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfZnJlcSwJCS8qIFNJT0NTSVdGUkVRICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfZnJlcSwJCS8qIFNJT0NHSVdGUkVRICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfbW9kZSwJCS8qIFNJT0NTSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfbW9kZSwJCS8qIFNJT0NHSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgCS8qIFNJT0NTSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAJCS8qIFNJT0NHSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfcmFuZ2UsICAgICAgICAgICAvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DU0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NHSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV1NQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NHSVdTUFkgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLyp6ZDEyMDFfc2V0X3dhcCovLAkJLyogU0lPQ1NJV0FQICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfd2FwLAkJLyogU0lPQ0dJV0FQICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAJCS8qIFNJT0NHSVdBUExJU1QgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9zY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9zY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9lc3NpZCwJCS8qIFNJT0NTSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X2Vzc2lkLAkJLyogU0lPQ0dJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgCQkvKiBTSU9DU0lXTklDS04gKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9uaWNrLCAJCS8qIFNJT0NHSVdOSUNLTiAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfcmF0ZSwJCS8qIFNJT0NTSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfcmF0ZSwJCS8qIFNJT0NHSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfcnRzLAkJLyogU0lPQ1NJV1JUUyAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3J0cywJCS8qIFNJT0NHSVdSVFMgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9mcmFnLAkJLyogU0lPQ1NJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9mcmFnLAkJLyogU0lPQ0dJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAJCS8qIFNJT0NTSVdUWFBPVyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAJCS8qIFNJT0NHSVdUWFBPVyAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X3JldHJ5LAkJLyogU0lPQ1NJV1JFVFJZICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfcmV0cnksCQkvKiBTSU9DR0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9lbmNvZGUsCQkvKiBTSU9DU0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfZW5jb2RlLAkJLyogU0lPQ0dJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X3Bvd2VyLAkJLyogU0lPQ1NJV1BPV0VSICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfcG93ZXIsCQkvKiBTSU9DR0lXUE9XRVIgKi8KK307CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9ob3N0YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCWludCBlcnI7CisKKwlpZiAoIXpkLT5hcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkhPU1RBVVRILCBycnEtPnZhbHVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfaG9zdGF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBob3N0YXV0aDsKKwlpbnQgZXJyOworCisJaWYgKCF6ZC0+YXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZIT1NUQVVUSCwgJmhvc3RhdXRoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJycS0+dmFsdWUgPSBob3N0YXV0aDsKKwlycnEtPmZpeGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9hdXRoX3N0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBzb2NrYWRkciAqc3RhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzEwXTsKKworCWlmICghemQtPmFwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltZW1jcHkoYnVmZmVyLCBzdGEtPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkqKHNob3J0KikoYnVmZmVyKzYpID0gMDsJLyogMD09c3VjY2VzcywgMT09ZmFpbHVyZSAqLworCSooc2hvcnQqKShidWZmZXIrOCkgPSAwOworCisJcmV0dXJuIHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQVVUSEVOVElDQVRFU1RBLCBidWZmZXIsIDEwLCAxKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X21heGFzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJaW50IGVycjsKKworCWlmICghemQtPmFwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUywgcnJxLT52YWx1ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X21heGFzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgbWF4YXNzb2M7CisJaW50IGVycjsKKworCWlmICghemQtPmFwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUywgJm1heGFzc29jKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJycS0+dmFsdWUgPSBtYXhhc3NvYzsKKwlycnEtPmZpeGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciB6ZDEyMDFfcHJpdmF0ZV9oYW5kbGVyW10gPSB7CisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfaG9zdGF1dGgsCS8qIFpEMTIwMVNJV0hPU1RBVVRIICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfaG9zdGF1dGgsCS8qIFpEMTIwMUdJV0hPU1RBVVRIICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9hdXRoX3N0YSwJCS8qIFpEMTIwMVNJV0FVVEhTVEEgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBub3RoaW5nIHRvIGdldCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X21heGFzc29jLAkvKiBaRDEyMDFTSU1BWEFTU09DICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfbWF4YXNzb2MsCS8qIFpEMTIwMUdJTUFYQVNTT0MgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIHpkMTIwMV9wcml2YXRlX2FyZ3NbXSA9IHsKKwl7IFpEMTIwMVNJV0hPU1RBVVRILCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICAgSVdfUFJJVl9UWVBFX05PTkUsICJzZXRob3N0YXV0aCIgfSwKKwl7IFpEMTIwMUdJV0hPU1RBVVRILCBJV19QUklWX1RZUEVfTk9ORSwKKwkgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRob3N0YXV0aCIgfSwKKwl7IFpEMTIwMVNJV0FVVEhTVEEsIElXX1BSSVZfVFlQRV9BRERSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgCisJICAgIElXX1BSSVZfVFlQRV9OT05FLCAiYXV0aHN0YXRpb24iIH0sCisJeyBaRDEyMDFTSVdNQVhBU1NPQywgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAgIElXX1BSSVZfVFlQRV9OT05FLCAic2V0bWF4YXNzb2MiIH0sCisJeyBaRDEyMDFHSVdNQVhBU1NPQywgSVdfUFJJVl9UWVBFX05PTkUsCisJICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0bWF4YXNzb2MiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHpkMTIwMV9pd19oYW5kbGVycyA9IHsKKwkubnVtX3N0YW5kYXJkIAkJPSBzaXplb2YoemQxMjAxX2l3X2hhbmRsZXIpL3NpemVvZihpd19oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGUgCQk9IHNpemVvZih6ZDEyMDFfcHJpdmF0ZV9oYW5kbGVyKS9zaXplb2YoaXdfaGFuZGxlciksCisJLm51bV9wcml2YXRlX2FyZ3MgCT0gc2l6ZW9mKHpkMTIwMV9wcml2YXRlX2FyZ3MpL3NpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKKwkuc3RhbmRhcmQgCQk9IChpd19oYW5kbGVyICopemQxMjAxX2l3X2hhbmRsZXIsCisJLnByaXZhdGUgCQk9IChpd19oYW5kbGVyICopemQxMjAxX3ByaXZhdGVfaGFuZGxlciwKKwkucHJpdmF0ZV9hcmdzIAkJPSAoc3RydWN0IGl3X3ByaXZfYXJncyAqKSB6ZDEyMDFfcHJpdmF0ZV9hcmdzLAorfTsKKworaW50IHpkMTIwMV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHpkMTIwMSAqemQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKKwlpbnQgaSwgZXJyOworCXNob3J0IHBvcnR0eXBlOworCWNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzJdOworCisJdXNiID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCisJemQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgemQxMjAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6ZCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHpkLCAwLCBzaXplb2Yoc3RydWN0IHpkMTIwMSkpOworCXpkLT5hcCA9IGFwOworCXpkLT51c2IgPSB1c2I7CisJemQtPnJlbW92ZWQgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnpkLT5yeGRhdGFxKTsKKwlJTklUX0hMSVNUX0hFQUQoJnpkLT5mcmFnbGlzdCk7CisJCisJZXJyID0gemQxMjAxX2Z3X3VwbG9hZCh1c2IsIHpkLT5hcCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZ1c2ItPmRldiwgInpkMTIwMSBmaXJtd2FyZSB1cGxvYWQgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfemQ7CisJfQorCQorCXpkLT5lbmRwX2luID0gMTsKKwl6ZC0+ZW5kcF9vdXQgPSAxOworCXpkLT5lbmRwX291dDIgPSAyOworCXpkLT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCXpkLT50eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghemQtPnJ4X3VyYiB8fCAhemQtPnR4X3VyYikKKwkJZ290byBlcnJfemQ7CisKKwlmb3IoaSA9IDA7IGk8MTAwOyBpKyspCisJCXVkZWxheSgxMDAwKTsKKworCWVyciA9IHpkMTIwMV9kcnZyX3N0YXJ0KHpkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl96ZDsKKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZNQVhEQVRBTEVOLCAyMzEyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zdGFydDsKKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9UWFJBVEVDTlRMLAorCSAgICBaRDEyMDFfUkFURUIxIHwgWkQxMjAxX1JBVEVCMiB8IFpEMTIwMV9SQVRFQjUgfCBaRDEyMDFfUkFURUIxMSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3RhcnQ7CisKKwl6ZC0+ZGV2ID0gYWxsb2NfZXRoZXJkZXYoMCk7CisJaWYgKCF6ZC0+ZGV2KQorCQlnb3RvIGVycl9zdGFydDsKKworCXpkLT5kZXYtPnByaXYgPSB6ZDsKKwl6ZC0+ZGV2LT5vcGVuID0gemQxMjAxX25ldF9vcGVuOworCXpkLT5kZXYtPnN0b3AgPSB6ZDEyMDFfbmV0X3N0b3A7CisJemQtPmRldi0+Z2V0X3N0YXRzID0gemQxMjAxX2dldF9zdGF0czsKKwl6ZC0+ZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSB6ZDEyMDFfZ2V0X3dpcmVsZXNzX3N0YXRzOworCXpkLT5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KKwkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZ6ZDEyMDFfaXdfaGFuZGxlcnM7CisJemQtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gemQxMjAxX2hhcmRfc3RhcnRfeG1pdDsKKwl6ZC0+ZGV2LT53YXRjaGRvZ190aW1lbyA9IFpEMTIwMV9UWF9USU1FT1VUOworCXpkLT5kZXYtPnR4X3RpbWVvdXQgPSB6ZDEyMDFfdHhfdGltZW91dDsKKwl6ZC0+ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdDsKKwl6ZC0+ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB6ZDEyMDFfc2V0X21hY19hZGRyZXNzOworCXN0cmNweSh6ZC0+ZGV2LT5uYW1lLCAid2xhbiVkIik7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIAorCSAgICB6ZC0+ZGV2LT5kZXZfYWRkciwgemQtPmRldi0+YWRkcl9sZW4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX25ldDsKKworCS8qIFNldCB3aWxkY2FyZCBlc3NpZCB0byBtYXRjaCB6ZC0+ZXNzaWQgKi8KKwkqKF9fbGUxNiAqKWJ1ZiA9IGNwdV90b19sZTE2KDApOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GREVTSVJFRFNTSUQsIGJ1ZiwKKwkgICAgSVdfRVNTSURfTUFYX1NJWkUrMiwgMSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfbmV0OworCisJaWYgKHpkLT5hcCkKKwkJcG9ydHR5cGUgPSBaRDEyMDFfUE9SVFRZUEVfQVA7CisJZWxzZQorCQlwb3J0dHlwZSA9IFpEMTIwMV9QT1JUVFlQRV9CU1M7CisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBPUlRUWVBFLCBwb3J0dHlwZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfbmV0OworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KHpkLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX25ldDsKKwlkZXZfaW5mbygmdXNiLT5kZXYsICIlczogWkQxMjAxIFVTQiBXaXJlbGVzcyBpbnRlcmZhY2VcbiIsCisJICAgIHpkLT5kZXYtPm5hbWUpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCB6ZCk7CisJcmV0dXJuIDA7CisKK2Vycl9uZXQ6CisJZnJlZV9uZXRkZXYoemQtPmRldik7CitlcnJfc3RhcnQ6CisJLyogTGVhdmUgdGhlIGRldmljZSBpbiByZXNldCBzdGF0ZSAqLworCXpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfSU5JVCwgMCwgMCwgMCk7CitlcnJfemQ6CisJaWYgKHpkLT50eF91cmIpCisJCXVzYl9mcmVlX3VyYih6ZC0+dHhfdXJiKTsKKwlpZiAoemQtPnJ4X3VyYikKKwkJdXNiX2ZyZWVfdXJiKHpkLT5yeF91cmIpOworCWtmcmVlKHpkKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHpkMTIwMV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHpkMTIwMSAqemQ9KHN0cnVjdCB6ZDEyMDEgKil1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpub2RlMjsKKwlzdHJ1Y3QgemQxMjAxX2ZyYWcgKmZyYWc7CisKKwlpZiAoIXpkKQorCQlyZXR1cm47CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWlmICh6ZC0+ZGV2KSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KHpkLT5kZXYpOworCQlmcmVlX25ldGRldih6ZC0+ZGV2KTsKKwl9CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZyYWcsIG5vZGUsIG5vZGUyLCAmemQtPmZyYWdsaXN0LCBmbm9kZSkgeworCQlobGlzdF9kZWxfaW5pdCgmZnJhZy0+Zm5vZGUpOworCQlrZnJlZV9za2IoZnJhZy0+c2tiKTsKKwkJa2ZyZWUoZnJhZyk7CisJfQorCisJaWYgKHpkLT50eF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHpkLT50eF91cmIpOworCQl1c2JfZnJlZV91cmIoemQtPnR4X3VyYik7CisJfQorCWlmICh6ZC0+cnhfdXJiKSB7CisJCXVzYl9raWxsX3VyYih6ZC0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHpkLT5yeF91cmIpOworCX0KKwlrZnJlZSh6ZCk7Cit9CisKK3N0cnVjdCB1c2JfZHJpdmVyIHpkMTIwMV91c2IgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiemQxMjAxIiwKKwkucHJvYmUgPSB6ZDEyMDFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB6ZDEyMDFfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSB6ZDEyMDFfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB6ZDEyMDFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnpkMTIwMV91c2IpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgemQxMjAxX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmemQxMjAxX3VzYik7Cit9CisKK21vZHVsZV9pbml0KHpkMTIwMV9pbml0KTsKK21vZHVsZV9leGl0KHpkMTIwMV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuaCBiL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI3YzcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICoJQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IEplcm9lbiBWcmVla2VuIChwZTFyeHFAYW1zYXQub3JnKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgl2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoJUGFydHMgb2YgdGhpcyBkcml2ZXIgaGF2ZSBiZWVuIGRlcml2ZWQgZnJvbSBhIHdsYW4tbmcgdmVyc2lvbgorICoJbW9kaWZpZWQgYnkgWnlEQVMuCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfWkQxMjAxX0hfCisjZGVmaW5lIF9JTkNMVURFX1pEMTIwMV9IXworCisjZGVmaW5lIFpEMTIwMV9OVU1LRVlTCQk0CisjZGVmaW5lIFpEMTIwMV9NQVhLRVlMRU4JMTMKKyNkZWZpbmUgWkQxMjAxX01BWE1VTFRJCQkxNgorI2RlZmluZSBaRDEyMDFfRlJBR01BWAkJMjUwMAorI2RlZmluZSBaRDEyMDFfRlJBR01JTgkJMjU2CisjZGVmaW5lIFpEMTIwMV9SVFNNQVgJCTI1MDAKKworI2RlZmluZSBaRDEyMDFfUlhTSVpFCQkzMDAwCisKK3N0cnVjdCB6ZDEyMDEgeworCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CisJaW50CQkJcmVtb3ZlZDsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpd19zdGF0aXN0aWNzCWl3c3RhdHM7CisKKwlpbnQJCQllbmRwX2luOworCWludAkJCWVuZHBfb3V0OworCWludAkJCWVuZHBfb3V0MjsKKwlzdHJ1Y3QgdXJiCQkqcnhfdXJiOworCXN0cnVjdCB1cmIJCSp0eF91cmI7CisKKwl1bnNpZ25lZCBjaGFyIAkJcnhkYXRhW1pEMTIwMV9SWFNJWkVdOworCWludAkJCXJ4bGVuOworCXdhaXRfcXVldWVfaGVhZF90CXJ4ZGF0YXE7CisJaW50CQkJcnhkYXRhczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlmcmFnbGlzdDsKKwl1bnNpZ25lZCBjaGFyCQl0eGRhdGFbWkQxMjAxX1JYU0laRV07CisKKwlpbnQJCQlhcDsKKwljaGFyCQkJZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJaW50CQkJZXNzaWRsZW47CisJaW50CQkJbWFjX2VuYWJsZWQ7CisJaW50CQkJbW9uaXRvcjsKKwlpbnQJCQllbmNvZGVfZW5hYmxlZDsKKwlpbnQJCQllbmNvZGVfcmVzdHJpY3RlZDsKKwl1bnNpZ25lZCBjaGFyCQllbmNvZGVfa2V5c1taRDEyMDFfTlVNS0VZU11bWkQxMjAxX01BWEtFWUxFTl07CisJaW50CQkJZW5jb2RlX2tleWxlbltaRDEyMDFfTlVNS0VZU107Cit9OworCitzdHJ1Y3QgemQxMjAxX2ZyYWcgeworCXN0cnVjdCBobGlzdF9ub2RlCWZub2RlOworCWludAkJCXNlcTsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKK307CisKKyNkZWZpbmUgWkQxMjAxU0lXSE9TVEFVVEggU0lPQ0lXRklSU1RQUklWCisjZGVmaW5lIFpEMTIwMUdJV0hPU1RBVVRIIFpEMTIwMVNJV0hPU1RBVVRIKzEKKyNkZWZpbmUgWkQxMjAxU0lXQVVUSFNUQSBTSU9DSVdGSVJTVFBSSVYrMgorI2RlZmluZSBaRDEyMDFTSVdNQVhBU1NPQyBTSU9DSVdGSVJTVFBSSVYrNAorI2RlZmluZSBaRDEyMDFHSVdNQVhBU1NPQyBaRDEyMDFTSVdNQVhBU1NPQysxCisKKyNkZWZpbmUgWkQxMjAxX0ZXX1RJTUVPVVQJKDEwMDApCisKKyNkZWZpbmUgWkQxMjAxX1RYX1RJTUVPVVQJKDIwMDApCisKKyNkZWZpbmUgWkQxMjAxX1VTQl9DTURSRVEJMAorI2RlZmluZSBaRDEyMDFfVVNCX1JFU1JFUQkxCisKKyNkZWZpbmUJWkQxMjAxX0NNRENPREVfSU5JVAkweDAwCisjZGVmaW5lIFpEMTIwMV9DTURDT0RFX0VOQUJMRQkweDAxCisjZGVmaW5lIFpEMTIwMV9DTURDT0RFX0RJU0FCTEUJMHgwMgorI2RlZmluZSBaRDEyMDFfQ01EQ09ERV9BTExPQwkweDBhCisjZGVmaW5lIFpEMTIwMV9DTURDT0RFX0lOUVVJUkUJMHgxMQorI2RlZmluZSBaRDEyMDFfQ01EQ09ERV9TRVRSWFJJRAkweDE3CisjZGVmaW5lIFpEMTIwMV9DTURDT0RFX0FDQ0VTUwkweDIxCisKKyNkZWZpbmUgWkQxMjAxX1BBQ0tFVF9FVkVOVFNUQVQJMHgwCisjZGVmaW5lIFpEMTIwMV9QQUNLRVRfUlhEQVRBCTB4MQorI2RlZmluZSBaRDEyMDFfUEFDS0VUX0lOUVVJUkUJMHgyCisjZGVmaW5lIFpEMTIwMV9QQUNLRVRfUkVTT1VSQ0UJMHgzCisKKyNkZWZpbmUgWkQxMjAxX0FDQ0VTU0JJVAkweDAxMDAKKworI2RlZmluZSBaRDEyMDFfUklEX0NORlBPUlRUWVBFCQkweGZjMDAKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZPV05NQUNBRERSCTB4ZmMwMQorI2RlZmluZSBaRDEyMDFfUklEX0NORkRFU0lSRURTU0lECTB4ZmMwMgorI2RlZmluZSBaRDEyMDFfUklEX0NORk9XTkNIQU5ORUwJMHhmYzAzCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GT1dOU1NJRAkJMHhmYzA0CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GTUFYREFUQUxFTgkweGZjMDcKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZQTUVOQUJMRUQJCTB4ZmMwOQorI2RlZmluZSBaRDEyMDFfUklEX0NORlBNRVBTCQkweGZjMGEKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OCTB4ZmMwYworI2RlZmluZSBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVlJRAkweGZjMjMKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZMAkweGZjMjQKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZMQkweGZjMjUKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZMgkweGZjMjYKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZMwkweGZjMjcKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZXRUJGTEFHUwkJMHhmYzI4CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GQVVUSEVOVElDQVRJT04JMHhmYzJhCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUwkweGZjMmIKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZIT1NUQVVUSAkJMHhmYzJlCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GR1JPVVBBRERSRVNTCTB4ZmM4MAorI2RlZmluZSBaRDEyMDFfUklEX0NORkZSQUdUSFJFU0hPTEQJMHhmYzgyCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GUlRTVEhSRVNIT0xECTB4ZmM4MworI2RlZmluZSBaRDEyMDFfUklEX1RYUkFURUNOVEwJCTB4ZmM4NAorI2RlZmluZSBaRDEyMDFfUklEX1BST01JU0NVT1VTTU9ERQkweGZjODUKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZCQVNJQ1JBVEVTCTB4ZmNiMworI2RlZmluZSBaRDEyMDFfUklEX0FVVEhFTlRJQ0FURVNUQQkweGZjZTMKKyNkZWZpbmUgWkQxMjAxX1JJRF9DVVJSRU5UQlNTSUQJCTB4ZmQ0MgorI2RlZmluZSBaRDEyMDFfUklEX0NPTU1TUVVBTElUWQkJMHhmZDQzCisjZGVmaW5lIFpEMTIwMV9SSURfQ1VSUkVOVFRYUkFURQkweGZkNDQKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZNQVhUWEJVRkZFUk5VTUJFUgkweGZkYTAKKyNkZWZpbmUgWkQxMjAxX1JJRF9DVVJSRU5UQ0hBTk5FTAkweGZkYzEKKworI2RlZmluZSBaRDEyMDFfSU5RX1NDQU5SRVNVTFRTCQkweGYxMDEKKworI2RlZmluZSBaRDEyMDFfSU5GX0xJTktTVEFUVVMJCTB4ZjIwMAorI2RlZmluZSBaRDEyMDFfSU5GX0FTU09DU1RBVFVTCQkweGYyMDEKKyNkZWZpbmUgWkQxMjAxX0lORl9BVVRIUkVRCQkweGYyMDIKKworI2RlZmluZSBaRDEyMDFfQVNTT0NTVEFUVVNfU1RBQVNTT0MJMHgxCisjZGVmaW5lIFpEMTIwMV9BU1NPQ1NUQVRVU19SRUFTU09DCTB4MgorI2RlZmluZSBaRDEyMDFfQVNTT0NTVEFUVVNfRElTQVNTT0MJMHgzCisjZGVmaW5lIFpEMTIwMV9BU1NPQ1NUQVRVU19BU1NPQ0ZBSUwJMHg0CisjZGVmaW5lIFpEMTIwMV9BU1NPQ1NUQVRVU19BVVRIRkFJTAkweDUKKworI2RlZmluZSBaRDEyMDFfUE9SVFRZUEVfSUJTUwkJMAorI2RlZmluZSBaRDEyMDFfUE9SVFRZUEVfQlNTCQkxCisjZGVmaW5lIFpEMTIwMV9QT1JUVFlQRV9XRFMJCTIKKyNkZWZpbmUgWkQxMjAxX1BPUlRUWVBFX1BTRVVET0lCU1MJMworI2RlZmluZSBaRDEyMDFfUE9SVFRZUEVfQVAJCTYKKworI2RlZmluZSBaRDEyMDFfUkFURUIxCTEKKyNkZWZpbmUgWkQxMjAxX1JBVEVCMgkyCisjZGVmaW5lIFpEMTIwMV9SQVRFQjUJNAkvKiA1LjUgcmVhbGx5LCBidXQgNSBpcyBzaG9ydGVyIDopICovCisjZGVmaW5lIFpEMTIwMV9SQVRFQjExCTgKKworI2RlZmluZSBaRDEyMDFfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTQkweDAwMDEKKyNkZWZpbmUgWkQxMjAxX0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWQkweDAwMDIKKworI2VuZGlmIC8qIF9JTkNMVURFX1pEMTIwMV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY5MDc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTAsMCArMSw0NTUgQEAKKyMKKyMgVVNCIFNlcmlhbCBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51ICJVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCIT1uCisKK2NvbmZpZyBVU0JfU0VSSUFMCisJdHJpc3RhdGUgIlVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVVNCIGRldmljZSB0aGF0IHByb3ZpZGVzIG5vcm1hbCBzZXJpYWwKKwkgIHBvcnRzLCBvciBhY3RzIGxpa2UgYSBzZXJpYWwgZGV2aWNlLCBhbmQgeW91IHdhbnQgdG8gY29ubmVjdCBpdCB0bworCSAgeW91ciBVU0IgYnVzLgorCisJICBQbGVhc2UgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dD4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgYXJlCisJICBzdXBwb3J0ZWQsIGFuZCBvbiBob3cgdG8gdXNlIHRoZW0uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYnNlcmlhbC4KKworY29uZmlnIFVTQl9TRVJJQUxfQ09OU09MRQorCWJvb2wgIlVTQiBTZXJpYWwgQ29uc29sZSBkZXZpY2Ugc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUw9eSAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byB1c2UgYSBVU0IgdG8gc2VyaWFsCisJICBjb252ZXJ0ZXIgcG9ydCBhcyB0aGUgc3lzdGVtIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUKKwkgIGRldmljZSB3aGljaCByZWNlaXZlcyBhbGwga2VybmVsIG1lc3NhZ2VzIGFuZCB3YXJuaW5ncyBhbmQgd2hpY2gKKwkgIGFsbG93cyBsb2dpbnMgaW4gc2luZ2xlIHVzZXIgbW9kZSkuIFRoaXMgY291bGQgYmUgdXNlZnVsIGlmIHNvbWUKKwkgIHRlcm1pbmFsIG9yIHByaW50ZXIgaXMgY29ubmVjdGVkIHRvIHRoYXQgc2VyaWFsIHBvcnQuCisKKwkgIEV2ZW4gaWYgeW91IHNheSBZIGhlcmUsIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB2aXJ0dWFsIGNvbnNvbGUKKwkgICgvZGV2L3R0eTApIHdpbGwgc3RpbGwgYmUgdXNlZCBhcyB0aGUgc3lzdGVtIGNvbnNvbGUgYnkgZGVmYXVsdCwgYnV0CisJICB5b3UgY2FuIGFsdGVyIHRoYXQgdXNpbmcgYSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBzdWNoIGFzCisJICAiY29uc29sZT10dHlVU0IwIi4gKFRyeSAibWFuIGJvb3RwYXJhbSIgb3Igc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCisJICB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlCisJICBrZXJuZWwgYXQgYm9vdCB0aW1lLikKKworCSAgSWYgeW91IGRvbid0IGhhdmUgYSBWR0EgY2FyZCBpbnN0YWxsZWQgYW5kIHlvdSBzYXkgWSBoZXJlLCB0aGUKKwkgIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBmaXJzdCBVU0IgdG8gc2VyaWFsIGNvbnZlcnRlcgorCSAgcG9ydCwgL2Rldi90dHlVU0IwLCBhcyBzeXN0ZW0gY29uc29sZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFVTQl9TRVJJQUxfR0VORVJJQworCWJvb2wgIlVTQiBHZW5lcmljIFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGdlbmVyaWMgVVNCIHNlcmlhbCBkcml2ZXIuICBQbGVhc2UKKwkgIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisJICB1c2luZyB0aGlzIGRyaXZlci4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlICJVU0IgU2VyaWFsIGNvbnZlcnRlcgorCSAgc3VwcG9ydCIgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgZm9yIHRoaXMgZHJpdmVyIHRvIGJlIHVzZWQKKwkgIHByb3Blcmx5LgorCitjb25maWcgVVNCX1NFUklBTF9CRUxLSU4KKwl0cmlzdGF0ZSAiVVNCIEJlbGtpbiBhbmQgUGVyYWNvbSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQmVsa2luIFVTQiBTZXJpYWwgc2luZ2xlIHBvcnQKKwkgIGFkYXB0b3IgKEY1VTEwMyBpcyBvbmUgb2YgdGhlIG1vZGVsIG51bWJlcnMpIG9yIHRoZSBQZXJhY29tIHNpbmdsZQorCSAgcG9ydCBVU0IgdG8gc2VyaWFsIGFkYXB0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJlbGtpbl9zYS4KKworY29uZmlnIFVTQl9TRVJJQUxfV0hJVEVIRUFUCisJdHJpc3RhdGUgIlVTQiBDb25uZWN0VGVjaCBXaGl0ZUhFQVQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgQlJPS0VOX09OX1NNUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQ29ubmVjdFRlY2ggV2hpdGVIRUFUIDQgcG9ydAorCSAgVVNCIHRvIHNlcmlhbCBjb252ZXJ0ZXIgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3aGl0ZWhlYXQuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVAorCXRyaXN0YXRlICJVU0IgRGlnaSBJbnRlcm5hdGlvbmFsIEFjY2VsZVBvcnQgVVNCIFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgRGlnaSBBY2NlbGVQb3J0IFVTQiAyIG9yIDQgZGV2aWNlcywKKwkgIDIgcG9ydCAocGx1cyBwYXJhbGxlbCBwb3J0KSBhbmQgNCBwb3J0IFVTQiBzZXJpYWwgY29udmVydGVycy4gIFRoZQorCSAgcGFyYWxsZWwgcG9ydCBvbiB0aGUgVVNCIDIgYXBwZWFycyBhcyBhIHRoaXJkIHNlcmlhbCBwb3J0IG9uIExpbnV4LgorCSAgVGhlIERpZ2kgQWNjZWxlcG9ydCBVU0IgOCBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKworCSAgVGhpcyBkcml2ZXIgd29ya3MgdW5kZXIgU01QIHdpdGggdGhlIHVzYi11aGNpIGRyaXZlci4gIEl0IGRvZXMgbm90CisJICB3b3JrIHVuZGVyIFNNUCB3aXRoIHRoZSB1aGNpIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGlnaV9hY2NlbGVwb3J0LgorCitjb25maWcgVVNCX1NFUklBTF9DUDIxMDEKKwl0cmlzdGF0ZSAiVVNCIENQMjEwMSBVQVJUIEJyaWRnZSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENQMjEwMS9DUDIxMDIgYmFzZWQgVVNCIHRvIFJTMjMyCisJICBjb252ZXJ0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNwMjEwMS4KKworY29uZmlnIFVTQl9TRVJJQUxfQ1lQUkVTU19NOAorCXRyaXN0YXRlICJVU0IgQ3lwcmVzcyBNOCBVU0IgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBkZXZpY2UgdGhhdCBjb250YWlucyB0aGUgQ3lwcmVzcworCSAgVVNCIHRvIFNlcmlhbCBtaWNyb2NvbnRyb2xsZXIsIHN1Y2ggYXMgdGhlIERlTG9ybWUgRWFydGhtYXRlIEdQUy4KKworCQlBdHRlbXB0ZWQgU01QIHN1cHBvcnQuLi4gc2VuZCBidWcgcmVwb3J0cyEKKworCSAgU3VwcG9ydGVkIG1pY3JvY29udHJvbGxlcnMgaW4gdGhlIENZNDYwMSBmYW1pbHkgYXJlOgorCQlDWTdDNjM3NDEgQ1k3QzYzNzQyIENZN0M2Mzc0MyBDWTdDNjQwMTMKKwkKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN5cHJlc3NfbTguCisKK2NvbmZpZyBVU0JfU0VSSUFMX0VNUEVHCisJdHJpc3RhdGUgIlVTQiBFbXBlZyBlbXBlZy1jYXIgTWFyayBJL0lJIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8geW91ciBFbXBlZyBlbXBlZy1jYXIgTWFyayBJL0lJCisJICBtcDMgcGxheWVyIHZpYSBVU0IuICBUaGUgZHJpdmVyIHVzZXMgYSBzaW5nbGUgdHR5VVNCezAsMSwyLC4uLn0KKwkgIGRldmljZSBub2RlLiAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0PiBmb3IgbW9yZQorCSAgdGlkYml0cyBvZiBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW1wZWcuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0ZURElfU0lPCisJdHJpc3RhdGUgIlVTQiBGVERJIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgRlRESSBTSU8gc2luZ2xlIHBvcnQgVVNCIHRvIHNlcmlhbAorCSAgY29udmVydGVyIGRldmljZS4gVGhlIGltcGxlbWVudGF0aW9uIEkgaGF2ZSBpcyBjYWxsZWQgdGhlIFVTQy0xMDAwLgorCSAgVGhpcyBkcml2ZXIgaGFzIGFsc28gYmUgdGVzdGVkIHdpdGggdGhlIDI0NSBhbmQgMjMyIGRldmljZXMuCisKKwkgIFNlZSA8aHR0cDovL2Z0ZGktdXNiLXNpby5zb3VyY2Vmb3JnZS5uZXQvPiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgYW5kIHRoZSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZ0ZGlfc2lvLgorCitjb25maWcgVVNCX1NFUklBTF9WSVNPUgorCXRyaXN0YXRlICJVU0IgSGFuZHNwcmluZyBWaXNvciAvIFBhbG0gbTUweCAvIFNvbnkgQ2xpZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHlvdXIgSGFuZFNwcmluZyBWaXNvciwgUGFsbQorCSAgbTUwMCBvciBtNTA1IHRocm91Z2ggaXRzIFVTQiBkb2NraW5nIHN0YXRpb24uIFNlZQorCSAgPGh0dHA6Ly91c2J2aXNvci5zb3VyY2Vmb3JnZS5uZXQvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzCisJICBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpc29yLgorCitjb25maWcgVVNCX1NFUklBTF9JUEFRCisJdHJpc3RhdGUgIlVTQiBQb2NrZXRQQyBQREEgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB5b3VyIENvbXBhcSBpUEFRLCBIUCBKb3JuYWRhCisJICBvciBhbnkgb3RoZXIgUERBIHJ1bm5pbmcgV2luZG93cyBDRSAzLjAgb3IgUG9ja2V0UEMgMjAwMgorCSAgdXNpbmcgYSBVU0IgY3JhZGxlL2NhYmxlLiBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGRyaXZlciwKKwkgIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQ+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpcGFxLgorCitjb25maWcgVVNCX1NFUklBTF9JUgorCXRyaXN0YXRlICJVU0IgSVIgRG9uZ2xlIFNlcmlhbCBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHNpbXBsZSBzZXJpYWwgc3VwcG9ydCBmb3IgVVNCIElyREEKKwkgIGRldmljZXMuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gdXNlIHRoZSBmdWxsIElyREEKKwkgIHN0YWNrLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpci11c2IuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0VER0VQT1JUCisJdHJpc3RhdGUgIlVTQiBJbnNpZGUgT3V0IEVkZ2Vwb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgZGV2aWNlcyBmcm9tCisJICBJbnNpZGUgT3V0IE5ldHdvcmtzIChEaWdpKToKKwkgIEVkZ2Vwb3J0LzQKKwkgIFJhcGlkcG9ydC80CisJICBFZGdlcG9ydC80dAorCSAgRWRnZXBvcnQvMgorCSAgRWRnZXBvcnQvNGkKKwkgIEVkZ2Vwb3J0LzJpCisJICBFZGdlcG9ydC80MjEKKwkgIEVkZ2Vwb3J0LzIxCisJICBFZGdlcG9ydC84CisJICBFZGdlcG9ydC84IER1YWwKKwkgIEVkZ2Vwb3J0LzJEOAorCSAgRWRnZXBvcnQvNEQ4CisJICBFZGdlcG9ydC84aQorCSAgRWRnZXBvcnQvMiBESU4KKwkgIEVkZ2Vwb3J0LzQgRElOCisJICBFZGdlcG9ydC8xNiBEdWFsCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlvX2VkZ2Vwb3J0LgorCitjb25maWcgVVNCX1NFUklBTF9FREdFUE9SVF9USQorCXRyaXN0YXRlICJVU0IgSW5zaWRlIE91dCBFZGdlcG9ydCBTZXJpYWwgRHJpdmVyIChUSSBkZXZpY2VzKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbnkgb2YgdGhlIGRldmljZXMgZnJvbSBJbnNpZGUgT3V0CisJICBOZXR3b3JrcyAoRGlnaSkgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgaW9fZWRnZXBvcnQgZHJpdmVyLgorCSAgVGhpcyBpbmNsdWRlcyB0aGUgRWRnZXBvcnQvMSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlvX3RpLgorCitjb25maWcgVVNCX1NFUklBTF9HQVJNSU4KKyAgICAgICB0cmlzdGF0ZSAiVVNCIEdhcm1pbiBHUFMgZHJpdmVyIgorICAgICAgIGRlcGVuZHMgb24gVVNCX1NFUklBTAorICAgICAgIGhlbHAKKyAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB5b3VyIEdhcm1pbiBHUFMuCisgICAgICAgICBTaG91bGQgd29yayB3aXRoIG1vc3QgR2FybWluIEdQUyBkZXZpY2VzIHdoaWNoIGhhdmUgYSBuYXRpdmUgVVNCIHBvcnQuCisKKyAgICAgICAgIFNlZSA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nYXJtaW4tZ3BzPiBmb3IgdGhlIGxhdGVzdAorICAgICAgICAgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnYXJtaW5fZ3BzLgorCitjb25maWcgVVNCX1NFUklBTF9JUFcKKyAgICAgICAgdHJpc3RhdGUgIlVTQiBJUFdpcmVsZXNzICgzRyBVTVRTIFRERCkgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIElQV2lyZWxlc3MgVVNCIG1vZGVtIHN1Y2ggYXMKKwkgIHRoZSBvbmVzIHN1cHBsaWVkIGJ5IEF4aXR5M0cvU2VudGVjaCBTb3V0aCBBZnJpY2EuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlwdy4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9QREEKKwl0cmlzdGF0ZSAiVVNCIEtleXNwYW4gUERBIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBLZXlzcGFuIFBEQSBzaW5nbGUgcG9ydCBVU0IgdG8KKwkgIHNlcmlhbCBjb252ZXJ0ZXIgZGV2aWNlLiAgVGhpcyBkcml2ZXIgbWFrZXMgdXNlIG9mIGZpcm13YXJlCisJICBkZXZlbG9wZWQgZnJvbSBzY3JhdGNoIGJ5IEJyaWFuIFdhcm5lci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga2V5c3Bhbl9wZGEuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU4KKwl0cmlzdGF0ZSAiVVNCIEtleXNwYW4gVVNBLXh4eCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIEtleXNwYW4gVVNCIHRvIHNlcmlhbCBjb252ZXJ0ZXIKKwkgIGRldmljZXMuICBUaGlzIGRyaXZlciBtYWtlcyB1c2Ugb2YgS2V5c3BhbidzIG9mZmljaWFsIGZpcm13YXJlCisJICBhbmQgd2FzIGRldmVsb3BlZCB3aXRoIHRoZWlyIHN1cHBvcnQuICBZb3UgbXVzdCBhbHNvIGluY2x1ZGUKKwkgIGZpcm13YXJlIHRvIHN1cHBvcnQgeW91ciBwYXJ0aWN1bGFyIGRldmljZShzKS4KKworCSAgU2VlIDxodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtleXNwYW4uCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fTVBSCisJYm9vbCAiVVNCIEtleXNwYW4gTVBSIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgS2V5c3BhbiBNUFIgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4CisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTI4IEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTI4IGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFgKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMjhYIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTI4WCBjb252ZXJ0ZXIuCisJICBCZSBzdXJlIHlvdSBoYXZlIGEgVVNBLTI4WCwgdGhlcmUgYXJlIGFsc28gMjhYQSBhbmQgMjhYQgorCSAgbW9kZWxzLCB0aGUgbGFiZWwgdW5kZXJuZWF0aCBoYXMgdGhlIGFjdHVhbCBwYXJ0IG51bWJlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhBCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTI4WEEgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMjhYQSBjb252ZXJ0ZXIuCisJICBCZSBzdXJlIHlvdSBoYXZlIGEgVVNBLTI4WEEsIHRoZXJlIGFyZSBhbHNvIDI4WCBhbmQgMjhYQgorCSAgbW9kZWxzLCB0aGUgbGFiZWwgdW5kZXJuZWF0aCBoYXMgdGhlIGFjdHVhbCBwYXJ0IG51bWJlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTI4WEIgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMjhYQiBjb252ZXJ0ZXIuCisJICBCZSBzdXJlIHlvdSBoYXZlIGEgVVNBLTI4WEIsIHRoZXJlIGFyZSBhbHNvIDI4WCBhbmQgMjhYQQorCSAgbW9kZWxzLCB0aGUgbGFiZWwgdW5kZXJuZWF0aCBoYXMgdGhlIGFjdHVhbCBwYXJ0IG51bWJlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOQorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0xOSBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0xOSBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMThYCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTE4WCBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0xOFggY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5VworCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0xOVcgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMTlXIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTE5UVcgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMTlRVyBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRSQorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0xOVFJIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTE5UUkgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5VworCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS00OVcgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtNDlXIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQworCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS00OVdMQyBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS00OVdMQyBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tMU0kKKwl0cmlzdGF0ZSAiVVNCIEtMNUtVU0IxMDUgKFBhbG1jb25uZWN0KSBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgS0w1S1VTQjEwNSAtIGJhc2VkIHNpbmdsZSBwb3J0CisJICBzZXJpYWwgYWRhcHRlci4gVGhlIG1vc3Qgd2lkZWx5IGtub3duIC0tIGFuZCBjdXJyZW50bHkgdGhlIG9ubHkKKwkgIHRlc3RlZCAtLSBkZXZpY2UgaW4gdGhpcyBjYXRlZ29yeSBpcyB0aGUgUGFsbUNvbm5lY3QgVVNCIFNlcmlhbAorCSAgYWRhcHRlciBzb2xkIGJ5IFBhbG0gSW5jLiBmb3IgdXNlIHdpdGggdGhlaXIgUGFsbSBJSUkgYW5kIFBhbG0gVgorCSAgc2VyaWVzIFBEQXMuCisKKwkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0PiBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtsNWt1c2IxMDUuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tPQklMX1NDVAorICAgICAgICB0cmlzdGF0ZSAiVVNCIEtPQklMIGNoaXBjYXJkIHJlYWRlciIKKyAgICAgICAgZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBLT0JJTCBVU0IgY2hpcGNhcmQKKyAgICAgICAgICByZWFkZXJzOgorCisgICAgICAgICAgICAtIFVTQiBUV0lOCisgICAgICAgICAgICAtIEtBQU4gU3RhbmRhcmQgUGx1cworICAgICAgICAgICAgLSBLQUFOIFNJTQorICAgICAgICAgICAgLSBTZWNPVklEIFJlYWRlciBQbHVzCisgICAgICAgICAgICAtIEIxIFByb2Zlc3Npb25hbAorICAgICAgICAgICAgLSBLQUFOIFByb2Zlc3Npb25hbAorCisgICAgICAgICAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgY3VycmVudCBDVC1BUEkuCisgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29iaWxfc2N0LgorCitjb25maWcgVVNCX1NFUklBTF9NQ1RfVTIzMgorCXRyaXN0YXRlICJVU0IgTUNUIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBVU0IgU2VyaWFsIHNpbmdsZSBwb3J0IGFkYXB0ZXIgZnJvbQorCSAgTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuIChVMjMyIGlzIG9uZSBvZiB0aGUgbW9kZWwgbnVtYmVycykuCisKKwkgIFRoaXMgZHJpdmVyIGFsc28gd29ya3Mgd2l0aCBTaXRlY29tIFUyMzItUDI1IGFuZCBELUxpbmsgRFUtSDNTUCBVU0IKKwkgIEJBWSBkZXZpY2VzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3RfdTIzMi4KKworY29uZmlnIFVTQl9TRVJJQUxfUEwyMzAzCisJdHJpc3RhdGUgIlVTQiBQcm9saWZpYyAyMzAzIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFBMMjMwMyBVU0IgU2VyaWFsIHNpbmdsZSBwb3J0CisJICBhZGFwdGVyIGZyb20gUHJvbGlmaWMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBsMjMwMy4KKworY29uZmlnIFVTQl9TRVJJQUxfU0FGRQorCXRyaXN0YXRlICJVU0IgU2FmZSBTZXJpYWwgKEVuY2Fwc3VsYXRlZCkgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKworY29uZmlnIFVTQl9TRVJJQUxfU0FGRV9QQURERUQKKwlib29sICJVU0IgU2VjdXJlIEVuY2Fwc3VsYXRlZCBEcml2ZXIgLSBQYWRkZWQiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX1NBRkUKKworY29uZmlnIFVTQl9TRVJJQUxfVEkKKwl0cmlzdGF0ZSAiVVNCIFRJIDM0MTAvNTA1MiBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUSSBVU0IgMzQxMCBvciA1MDUyCisJICBzZXJpYWwgZGV2aWNlcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlfdXNiXzM0MTBfNTA1Mi4KKworY29uZmlnIFVTQl9TRVJJQUxfQ1lCRVJKQUNLCisJdHJpc3RhdGUgIlVTQiBSRUlORVIgU0NUIGN5YmVySmFjayBwaW5wYWQvZS1jb20gY2hpcGNhcmQgcmVhZGVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIGN5YmVySmFjayBwaW5wYWQvZS1jb20gVVNCIGNoaXBjYXJkCisJICByZWFkZXIuIFRoaXMgaXMgYW4gaW50ZXJmYWNlIHRvIElTTyA3ODE2IGNvbXBhdGlibGUgY29udGFjdGJhc2VkCisJICBjaGlwY2FyZHMsIGUuZy4gR1NNIFNJTXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN5YmVyamFjay4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFVTQl9TRVJJQUxfWElSQ09NCisJdHJpc3RhdGUgIlVTQiBYaXJjb20gLyBFbnRyZWdyYSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgWGlyY29tIG9yIEVudHJlZ3JhIHNpbmdsZSBwb3J0IFVTQiB0bworCSAgc2VyaWFsIGNvbnZlcnRlciBkZXZpY2UuICBUaGlzIGRyaXZlciBtYWtlcyB1c2Ugb2YgZmlybXdhcmUKKwkgIGRldmVsb3BlZCBmcm9tIHNjcmF0Y2ggYnkgQnJpYW4gV2FybmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrZXlzcGFuX3BkYS4KKworY29uZmlnIFVTQl9TRVJJQUxfT01OSU5FVAorCXRyaXN0YXRlICJVU0IgWnlYRUwgb21uaS5uZXQgTENEIFBsdXMgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFp5WEVMIG9tbmkubmV0IExDRCBJU0ROIFRBLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvbW5pbmV0LgorCitjb25maWcgVVNCX0VaVVNCCisJYm9vbAorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOX1BEQSB8fCBVU0JfU0VSSUFMX1hJUkNPTSB8fCBVU0JfU0VSSUFMX0tFWVNQQU4gfHwgVVNCX1NFUklBTF9XSElURUhFQVQKKwlkZWZhdWx0IHkKKworZW5kbWVudQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxYjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpAQCAtMCwwICsxLDM5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVVNCIHNlcmlhbCBkZXZpY2UgZHJpdmVycy4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUwpCQkJKz0gdXNic2VyaWFsLm8KKwordXNic2VyaWFsLW9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEUpCSs9IGNvbnNvbGUubwordXNic2VyaWFsLW9iai0kKENPTkZJR19VU0JfRVpVU0IpCQkrPSBlenVzYi5vCisKK3VzYnNlcmlhbC1vYmpzCTo9IHVzYi1zZXJpYWwubyBnZW5lcmljLm8gYnVzLm8gJCh1c2JzZXJpYWwtb2JqLXkpCisKK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTikJCQkrPSBiZWxraW5fc2Eubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxKQkJCSs9IGNwMjEwMS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0spCQkrPSBjeWJlcmphY2subworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCkJCSs9IGN5cHJlc3NfbTgubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUKQkrPSBkaWdpX2FjY2VsZXBvcnQubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQpCQkrPSBpb19lZGdlcG9ydC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSkJCSs9IGlvX3RpLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0VNUEVHKQkJCSs9IGVtcGVnLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPKQkJKz0gZnRkaV9zaW8ubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOKQkJCSs9IGdhcm1pbl9ncHMubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSVBBUSkJCQkrPSBpcGFxLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0lQVykJCQkrPSBpcHcubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfSVIpCQkJKz0gaXItdXNiLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4pCQkrPSBrZXlzcGFuLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBKQkJKz0ga2V5c3Bhbl9wZGEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfS0xTSSkJCQkrPSBrbDVrdXNiMTA1Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCkJCSs9IGtvYmlsX3NjdC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMikJCSs9IG1jdF91MjMyLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX09NTklORVQpCQkrPSBvbW5pbmV0Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMykJCQkrPSBwbDIzMDMubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0FGRSkJCQkrPSBzYWZlX3NlcmlhbC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9USSkJCQkrPSB0aV91c2JfMzQxMF81MDUyLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1ZJU09SKQkJCSs9IHZpc29yLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCkJCSs9IHdoaXRlaGVhdC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9YSVJDT00pCQkJKz0ga2V5c3Bhbl9wZGEubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUta2V5c3Bhbl9wZGFfZncgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUta2V5c3Bhbl9wZGFfZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYmFmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZS1rZXlzcGFuX3BkYV9mdwpAQCAtMCwwICsxLDE2IEBACisKKyMgc29tZSBydWxlcyB0byBoYW5kbGUgdGhlIHF1aXJrcyBvZiB0aGUgJ2FzMzEnIGFzc2VtYmxlciwgbGlrZQorIyBpbnNpc3RpbmcgdXBvbiBmaXhlZCBzdWZmaXhlcyBmb3IgdGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMsCisjIGFuZCBpdHMgbGFjayBvZiBwcmVwcm9jZXNzb3Igc3VwcG9ydAorCithbGw6IGtleXNwYW5fcGRhX2Z3LmgKKworJS5hc206ICUuUworCWdjYyAteCBhc3NlbWJsZXItd2l0aC1jcHAgLVAgLUUgLW8gJEAgJDwKKworJS5oZXg6ICUuYXNtCisJYXMzMSAtbCAkPAorCW12ICQqLm9iaiAkQAorCislX2Z3Lmg6ICUuaGV4IGV6dXNiX2NvbnZlcnQucGwKKwlwZXJsIGV6dXNiX2NvbnZlcnQucGwgJCogPCAkPCA+ICRACmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5OTRkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwpAQCAtMCwwICsxLDYxNCBAQAorLyoKKyAqIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMAkJV2lsbGlhbSBHcmVhdGhvdXNlICh3Z3JlYXRob3VzZUBzbXZhLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSAJR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAorICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCisgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgorICogIAorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogVE9ETzoKKyAqIC0tIEFkZCB0cnVlIG1vZGVtIGNvbnRvbCBsaW5lIHF1ZXJ5IGNhcGFiaWxpdHkuICBDdXJyZW50bHkgd2UgdHJhY2sgdGhlCisgKiAgICBzdGF0ZXMgcmVwb3J0ZWQgYnkgdGhlIGludGVycnVwdCBhbmQgdGhlIHN0YXRlcyB3ZSByZXF1ZXN0LgorICogLS0gQWRkIGVycm9yIHJlcG9ydGluZyBiYWNrIHRvIGFwcGxpY2F0aW9uIGZvciBVQVJUIGVycm9yIGNvbmRpdGlvbnMuCisgKiAgICBKdXN0IHBvaW50IG1lIGF0IGhvdyB0byBpbXBsZW1lbnQgdGhpcyBhbmQgSSdsbCBkbyBpdC4gSSd2ZSBwdXQgdGhlCisgKiAgICBmcmFtZXdvcmsgaW4sIGJ1dCBoYXZlbid0IGFuYWx5emVkIHRoZSAidHR5X2ZsaXAiIGludGVyZmFjZSB5ZXQuCisgKiAtLSBBZGQgc3VwcG9ydCBmb3IgZmx1c2ggY29tbWFuZHMKKyAqIC0tIEFkZCBldmVyeXRoaW5nIHRoYXQgaXMgbWlzc2luZyA6KQorICoKKyAqIDI3LU5vdi0yMDAxIGdraAorICogCWNvbXByZXNzZWQgYWxsIHRoZSBkaWZmZXJuZW50IGRldmljZSBlbnRyaWVzIGludG8gMS4KKyAqCisgKiAzMC1NYXktMjAwMSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogMDgtQXByLTIwMDEgZ2IKKyAqCS0gSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAxMi1NYXItMjAwMSBna2gKKyAqCS0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEdvSHVicyBHTy1DT00yMzIgZGV2aWNlIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZQorICoJICBQZXJhY29tIGRldmljZS4KKyAqCisgKiAwNi1Ob3YtMjAwMCBna2gKKyAqCS0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIG9sZCBCZWxraW4gYW5kIFBlcmFjb20gZGV2aWNlcy4KKyAqCS0gTWFkZSB0aGUgcG9ydCBhYmxlIHRvIGJlIG9wZW5lZCBtdWx0aXBsZSB0aW1lcy4KKyAqCS0gQWRkZWQgc29tZSBkZWZhdWx0cyBpbmNhc2UgdGhlIGxpbmUgc2V0dGluZ3MgYXJlIHRoaW5ncyB0aGVzZSBkZXZpY2VzCisgKgkgIGNhbid0IHN1cHBvcnQuIAorICoKKyAqIDE4LU9jdC0yMDAwIFdpbGxpYW0gR3JlYXRob3VzZQorICogICAgUmVsZWFzZWQgaW50byB0aGUgd2lsZCAobGludXgtdXNiLWRldmVsKQorICoKKyAqIDE3LU9jdC0yMDAwIFdpbGxpYW0gR3JlYXRob3VzZQorICogICAgQWRkIGNvZGUgdG8gcmVjb2duaXplIGZpcm13YXJlIHZlcnNpb24gYW5kIHNldCBoYXJkd2FyZSBmbG93IGNvbnRyb2wKKyAqICAgIGFwcHJvcHJpYXRlbHkuICBCZWxraW4gc3RhdGVzIHRoYXQgZmlybXdhcmUgcHJpb3IgdG8gMy4wNSBkb2VzIG5vdAorICogICAgb3BlcmF0ZSBjb3JyZWN0bHkgaW4gaGFyZHdhcmUgaGFuZHNoYWtlIG1vZGUuICBJIGhhdmUgdmVyaWZpZWQgdGhpcworICogICAgb24gZmlybXdhcmUgMi4wNSAtLSBmb3IgYm90aCBSVFMgYW5kIERUUiBpbnB1dCBmbG93IGNvbnRyb2wsIHRoZSBjb250cm9sCisgKiAgICBsaW5lIGlzIG5vdCByZXNldC4gIFRoZSB0ZXN0IHBlcmZvcm1lZCBieSB0aGUgQmVsa2luIFdpbiogZHJpdmVyIGlzCisgKiAgICB0byBlbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGZvciBmaXJtd2FyZSAyLjA2IG9yIGdyZWF0ZXIgYW5kCisgKiAgICBmb3IgMS4wMCBvciBwcmlvci4gIEkgYW0gb25seSBlbmFibGluZyBmb3IgMi4wNiBvciBncmVhdGVyLgorICoKKyAqIDEyLU9jdC0yMDAwIFdpbGxpYW0gR3JlYXRob3VzZQorICogICAgRmlyc3QgY3V0IGF0IHN1cHBvcnRpbmcgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMKKyAqICAgIEkgZGlkIG5vdCBoYXZlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgd29yayB0byBzdXBwb3J0IHRoaXMKKyAqICAgIGFkYXB0ZXIsIHNvIHBhcmRvbiBhbnkgc3R1cGlkIG1pc3Rha2VzLiAgQWxsIG9mIHRoZSBpbmZvcm1hdGlvbgorICogICAgSSBhbSB1c2luZyB0byB3cml0ZSB0aGlzIGRyaXZlciB3YXMgYWNxdWlyZWQgYnkgdXNpbmcgYSBtb2RpZmllZAorICogICAgVXNiU25vb3Agb24gV2luZG93czIwMDAgYW5kIGZyb20gZXhhbWluaW5nIHRoZSBvdGhlciBVU0IgZHJpdmVycy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAiYmVsa2luX3NhLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIldpbGxpYW0gR3JlYXRob3VzZSA8d2dyZWF0aG91c2VAc212YS5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEJlbGtpbiBTZXJpYWwgY29udmVydGVyIGRyaXZlciIKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYSBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMyAqLworc3RhdGljIGludCAgYmVsa2luX3NhX3N0YXJ0dXAJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgYmVsa2luX3NhX29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2FfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYmVsa2luX3NhX3NldF90ZXJtaW9zCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBiZWxraW5fc2FfaW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV90aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQkVMS0lOX1NBX1ZJRCwgQkVMS0lOX1NBX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQkVMS0lOX09MRF9WSUQsIEJFTEtJTl9PTERfUElEKSB9LAorCXsgVVNCX0RFVklDRShQRVJBQ09NX1ZJRCwgUEVSQUNPTV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEdPSFVCU19WSUQsIEdPSFVCU19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEdPSFVCU19WSUQsIEhBTkRZTElOS19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEJFTEtJTl9ET0NLU1RBVElPTl9WSUQsIEJFTEtJTl9ET0NLU1RBVElPTl9QSUQpIH0sCisJeyB9CQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJlbGtpbl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImJlbGtpbiIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgc2VyaWFsIGNvbnZlcnRlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBiZWxraW5fZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkJlbGtpbiAvIFBlcmFjb20gLyBHb0h1YnMgVVNCIFNlcmlhbCBBZGFwdGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkiYmVsa2luIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfY29tYmluZWQsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWJlbGtpbl9zYV9vcGVuLAorCS5jbG9zZSA9CQliZWxraW5fc2FfY2xvc2UsCisJLnJlYWRfaW50X2NhbGxiYWNrID0JYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrLAkvKiBIb3cgd2UgZ2V0IHRoZSBzdGF0dXMgaW5mbyAqLworCS5pb2N0bCA9CQliZWxraW5fc2FfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWJlbGtpbl9zYV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWJlbGtpbl9zYV9icmVha19jdGwsCisJLnRpb2NtZ2V0ID0JCWJlbGtpbl9zYV90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJYmVsa2luX3NhX3Rpb2Ntc2V0LAorCS5hdHRhY2ggPQkJYmVsa2luX3NhX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWJlbGtpbl9zYV9zaHV0ZG93biwKK307CisKKworc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlIHsKKwlzcGlubG9ja190CQlsb2NrOworCXVuc2lnbmVkIGxvbmcJCWNvbnRyb2xfc3RhdGU7CisJdW5zaWduZWQgY2hhcgkJbGFzdF9sc3I7CisJdW5zaWduZWQgY2hhcgkJbGFzdF9tc3I7CisJaW50CQkJYmFkX2Zsb3dfY29udHJvbDsKK307CisKKworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMgc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2RlZmluZSBXRFJfVElNRU9VVCA1MDAwIC8qIGRlZmF1bHQgdXJiIHRpbWVvdXQgKi8KKworLyogYXNzdW1lcyB0aGF0IHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEJTQV9VU0JfQ01EKGMsdikgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBcCisJCQkJCSAgICAoYyksIEJFTEtJTl9TQV9TRVRfUkVRVUVTVF9UWVBFLCBcCisJCQkJCSAgICAodiksIDAsIE5VTEwsIDAsIFdEUl9USU1FT1VUKQorCisvKiBkbyBzb21lIHN0YXJ0dXAgYWxsb2NhdGlvbnMgbm90IGN1cnJlbnRseSBwZXJmb3JtZWQgYnkgdXNiX3NlcmlhbF9wcm9iZSgpICovCitzdGF0aWMgaW50IGJlbGtpbl9zYV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzZXJpYWwtPmRldjsKKwlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXY7CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAoLTEpOyAvKiBlcnJvciAqLworCS8qIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzICovCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXByaXYtPmNvbnRyb2xfc3RhdGUgPSAwOworCXByaXYtPmxhc3RfbHNyID0gMDsKKwlwcml2LT5sYXN0X21zciA9IDA7CisJLyogc2VlIGNvbW1lbnRzIGF0IHRvcCBvZiBmaWxlICovCisJcHJpdi0+YmFkX2Zsb3dfY29udHJvbCA9IChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA8PSAweDAyMDYpID8gMSA6IDA7CisJaW5mbygiYmNkRGV2aWNlOiAlMDR4LCBiZmM6ICVkIiwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksIHByaXYtPmJhZF9mbG93X2NvbnRyb2wpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKKwkKKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXY7CisJaW50IGk7CisJCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogc3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQkvKiBNeSBzcGVjaWFsIGl0ZW1zLCB0aGUgc3RhbmRhcmQgcm91dGluZXMgZnJlZSBteSB1cmJzICovCisJCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJaWYgKHByaXYpCisJCQlrZnJlZShwcml2KTsKKwl9Cit9CisKKworc3RhdGljIGludCAgYmVsa2luX3NhX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCByZXR2YWwgPSAwOworCisJZGJnKCIlcyBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLypTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSovCisJLyogVE9ETzogTG9vayBhdCBwb3NzaWJpbGl0eSBvZiBzdWJtaXR0aW5nIG11bHRpcGxlIFVSQnMgdG8gZGV2aWNlIHRvCisJICogICAgICAgZW5oYW5jZSBidWZmZXJpbmcuICBXaW4gdHJhY2Ugc2hvd3MgMTYgaW5pdGlhbCByZWFkIFVSQnMuCisJICovCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQiKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJZXJyKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIpOworCX0KKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfSAvKiBiZWxraW5fc2Ffb3BlbiAqLworCisKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZGJnKCIlcyBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZHMgYW5kIHdyaXRlcyAqLworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworfSAvKiBiZWxraW5fc2FfY2xvc2UgKi8KKworCitzdGF0aWMgdm9pZCBiZWxraW5fc2FfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSAqcHJpdjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCS8qIEhhbmRsZSBrbm93biBpbnRlcnJ1cHQgZGF0YSAqLworCS8qIGlnbm9yZSBkYXRhWzBdIGFuZCBkYXRhWzFdICovCisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+bGFzdF9tc3IgPSBkYXRhW0JFTEtJTl9TQV9NU1JfSU5ERVhdOworCQorCS8qIFJlY29yZCBDb250cm9sIExpbmUgc3RhdGVzICovCisJaWYgKHByaXYtPmxhc3RfbXNyICYgQkVMS0lOX1NBX01TUl9EU1IpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFNSOworCWVsc2UKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fRFNSOworCisJaWYgKHByaXYtPmxhc3RfbXNyICYgQkVMS0lOX1NBX01TUl9DVFMpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fQ1RTOworCWVsc2UKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fQ1RTOworCisJaWYgKHByaXYtPmxhc3RfbXNyICYgQkVMS0lOX1NBX01TUl9SSSkKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SSTsKKwllbHNlCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JJOworCisJaWYgKHByaXYtPmxhc3RfbXNyICYgQkVMS0lOX1NBX01TUl9DRCkKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9DRDsKKwllbHNlCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0NEOworCisJLyogTm93IHRvIHJlcG9ydCBhbnkgZXJyb3JzICovCisJcHJpdi0+bGFzdF9sc3IgPSBkYXRhW0JFTEtJTl9TQV9MU1JfSU5ERVhdOworI2lmIDAKKwkvKgorCSAqIGZpbGwgaW4gdGhlIGZsaXAgYnVmZmVyIGhlcmUsIGJ1dCBJIGRvIG5vdCBrbm93IHRoZSByZWxhdGlvbgorCSAqIHRvIHRoZSBjdXJyZW50L25leHQgcmVjZWl2ZSBidWZmZXIgb3IgY2hhcmFjdGVycy4gIEkgbmVlZAorCSAqIHRvIGxvb2sgaW4gdG8gdGhpcyBiZWZvcmUgY29tbWl0dGluZyBhbnkgY29kZS4KKwkgKi8KKwlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX0VSUikgeworCQl0dHkgPSBwb3J0LT50dHk7CisJCS8qIE92ZXJydW4gRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgQkVMS0lOX1NBX0xTUl9PRSkgeworCQl9CisJCS8qIFBhcml0eSBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX1BFKSB7CisJCX0KKwkJLyogRnJhbWluZyBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX0ZFKSB7CisJCX0KKwkJLyogQnJlYWsgSW5kaWNhdG9yICovCisJCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfQkkpIHsKKwkJfQorCX0KKyNlbmRpZgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHZvaWQgYmVsa2luX3NhX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGlmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2lmbGFnID0gMDsKKwl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gMDsKKwlfX3UxNiB1cmJfdmFsdWUgPSAwOyAvKiBXaWxsIGhvbGQgdGhlIG5ldyBmbGFncyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXRlOworCWludCBiYWRfZmxvd19jb250cm9sOworCQorCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IG9yIHRlcm1pb3Mgc3RydWN0dXJlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJLyogZ2V0IGEgbG9jYWwgY29weSBvZiB0aGUgY3VycmVudCBwb3J0IHNldHRpbmdzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwliYWRfZmxvd19jb250cm9sID0gcHJpdi0+YmFkX2Zsb3dfY29udHJvbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJICAgIChSRUxFVkFOVF9JRkxBRyhwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcpID09IFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGNoYW5nZS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwkJb2xkX2lmbGFnID0gb2xkX3Rlcm1pb3MtPmNfaWZsYWc7CisJCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOworCX0KKworCS8qIFNldCB0aGUgYmF1ZCByYXRlICovCisJaWYoIChjZmxhZyZDQkFVRCkgIT0gKG9sZF9jZmxhZyZDQkFVRCkgKSB7CisJCS8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCisJCWlmKCAob2xkX2NmbGFnJkNCQVVEKSA9PSBCMCApIHsKKwkJCWNvbnRyb2xfc3RhdGUgfD0gKFRJT0NNX0RUUnxUSU9DTV9SVFMpOworCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDEpIDwgMCkKKwkJCQllcnIoIlNldCBEVFIgZXJyb3IiKTsKKwkJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJCQlpZiAoIShvbGRfY2ZsYWcmQ1JUU0NUUykgKQorCQkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCAxKSA8IDApCisJCQkJCWVycigiU2V0IFJUUyBlcnJvciIpOworCQl9CisKKwkJc3dpdGNoKGNmbGFnICYgQ0JBVUQpIHsKKwkJCWNhc2UgQjA6IC8qIGhhbmRsZWQgYmVsb3cgKi8gYnJlYWs7CisJCQljYXNlIEIzMDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDMwMCk7IGJyZWFrOworCQkJY2FzZSBCNjAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCg2MDApOyBicmVhazsKKwkJCWNhc2UgQjEyMDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDEyMDApOyBicmVhazsKKwkJCWNhc2UgQjI0MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDI0MDApOyBicmVhazsKKwkJCWNhc2UgQjQ4MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDQ4MDApOyBicmVhazsKKwkJCWNhc2UgQjk2MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDk2MDApOyBicmVhazsKKwkJCWNhc2UgQjE5MjAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgxOTIwMCk7IGJyZWFrOworCQkJY2FzZSBCMzg0MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDM4NDAwKTsgYnJlYWs7CisJCQljYXNlIEI1NzYwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoNTc2MDApOyBicmVhazsKKwkJCWNhc2UgQjExNTIwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMTE1MjAwKTsgYnJlYWs7CisJCQljYXNlIEIyMzA0MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDIzMDQwMCk7IGJyZWFrOworCQkJZGVmYXVsdDogZXJyKCJCRUxLSU4gVVNCIFNlcmlhbCBBZGFwdGVyOiB1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0LCB1c2luZyBkZWZhdWx0IG9mIDk2MDAiKTsKKwkJCQl1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCg5NjAwKTsgYnJlYWs7CisJCX0KKwkJaWYgKChjZmxhZyAmIENCQVVEKSAhPSBCMCApIHsKKwkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0JBVURSQVRFX1JFUVVFU1QsIHVyYl92YWx1ZSkgPCAwKQorCQkJCWVycigiU2V0IGJhdWRyYXRlIGVycm9yIik7CisJCX0gZWxzZSB7CisJCQkvKiBEaXNhYmxlIGZsb3cgY29udHJvbCAqLworCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRkxPV19DVFJMX1JFUVVFU1QsIEJFTEtJTl9TQV9GTE9XX05PTkUpIDwgMCkKKwkJCQllcnIoIkRpc2FibGUgZmxvd2NvbnRyb2wgZXJyb3IiKTsKKworCQkJLyogRHJvcCBSVFMgYW5kIERUUiAqLworCQkJY29udHJvbF9zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CisJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EVFJfUkVRVUVTVCwgMCkgPCAwKQorCQkJCWVycigiRFRSIExPVyBlcnJvciIpOworCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QsIDApIDwgMCkKKwkJCQllcnIoIlJUUyBMT1cgZXJyb3IiKTsKKwkJfQorCX0KKworCS8qIHNldCB0aGUgcGFyaXR5ICovCisJaWYoIChjZmxhZyYoUEFSRU5CfFBBUk9ERCkpICE9IChvbGRfY2ZsYWcmKFBBUkVOQnxQQVJPREQpKSApIHsKKwkJaWYgKGNmbGFnICYgUEFSRU5CKQorCQkJdXJiX3ZhbHVlID0gKGNmbGFnICYgUEFST0REKSA/ICBCRUxLSU5fU0FfUEFSSVRZX09ERCA6IEJFTEtJTl9TQV9QQVJJVFlfRVZFTjsKKwkJZWxzZQorCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX1BBUklUWV9OT05FOworCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9QQVJJVFlfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCisJCQllcnIoIlNldCBwYXJpdHkgZXJyb3IiKTsKKwl9CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgKi8KKwlpZiggKGNmbGFnJkNTSVpFKSAhPSAob2xkX2NmbGFnJkNTSVpFKSApIHsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCQljYXNlIENTNTogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg1KTsgYnJlYWs7CisJCQljYXNlIENTNjogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg2KTsgYnJlYWs7CisJCQljYXNlIENTNzogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg3KTsgYnJlYWs7CisJCQljYXNlIENTODogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg4KTsgYnJlYWs7CisJCQlkZWZhdWx0OiBlcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0RBVEFfQklUUyg4KTsKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EQVRBX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCisJCQllcnIoIlNldCBkYXRhIGJpdHMgZXJyb3IiKTsKKwl9CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBzdG9wIGJpdHMgKi8KKwlpZiggKGNmbGFnJkNTVE9QQikgIT0gKG9sZF9jZmxhZyZDU1RPUEIpICkgeworCQl1cmJfdmFsdWUgPSAoY2ZsYWcgJiBDU1RPUEIpID8gQkVMS0lOX1NBX1NUT1BfQklUUygyKSA6IEJFTEtJTl9TQV9TVE9QX0JJVFMoMSk7CisJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1NUT1BfQklUU19SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKKwkJCWVycigiU2V0IHN0b3AgYml0cyBlcnJvciIpOworCX0KKworCS8qIFNldCBmbG93IGNvbnRyb2wgKi8KKwlpZiggKGlmbGFnJklYT0ZGKSAgICE9IChvbGRfaWZsYWcmSVhPRkYpCisJfHwJKGlmbGFnJklYT04pICAgICE9IChvbGRfaWZsYWcmSVhPTikKKwl8fCAgKGNmbGFnJkNSVFNDVFMpICE9IChvbGRfY2ZsYWcmQ1JUU0NUUykgKSB7CisJCXVyYl92YWx1ZSA9IDA7CisJCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikpCisJCQl1cmJfdmFsdWUgfD0gKEJFTEtJTl9TQV9GTE9XX09YT04gfCBCRUxLSU5fU0FfRkxPV19JWE9OKTsKKwkJZWxzZQorCQkJdXJiX3ZhbHVlICY9IH4oQkVMS0lOX1NBX0ZMT1dfT1hPTiB8IEJFTEtJTl9TQV9GTE9XX0lYT04pOworCisJCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCQl1cmJfdmFsdWUgfD0gIChCRUxLSU5fU0FfRkxPV19PQ1RTIHwgQkVMS0lOX1NBX0ZMT1dfSVJUUyk7CisJCWVsc2UKKwkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX09DVFMgfCBCRUxLSU5fU0FfRkxPV19JUlRTKTsKKworCQlpZiAoYmFkX2Zsb3dfY29udHJvbCkKKwkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX0lSVFMpOworCisJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKKwkJCWVycigiU2V0IGZsb3cgY29udHJvbCBlcnJvciIpOworCX0KKworCS8qIHNhdmUgb2ZmIHRoZSBtb2RpZmllZCBwb3J0IHNldHRpbmdzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5jb250cm9sX3N0YXRlID0gY29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9IC8qIGJlbGtpbl9zYV9zZXRfdGVybWlvcyAqLworCisKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9icmVha19jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0JSRUFLX1JFUVVFU1QsIGJyZWFrX3N0YXRlID8gMSA6IDApIDwgMCkKKwkJZXJyKCJTZXQgYnJlYWtfY3RsICVkIiwgYnJlYWtfc3RhdGUpOworfQorCisKK3N0YXRpYyBpbnQgYmVsa2luX3NhX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb250cm9sX3N0YXRlOworfQorCisKK3N0YXRpYyBpbnQgYmVsa2luX3NhX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKKwlpbnQgcnRzID0gMDsKKwlpbnQgZHRyID0gMDsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKSB7CisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOworCQlydHMgPSAxOworCX0KKwlpZiAoc2V0ICYgVElPQ01fRFRSKSB7CisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCQlkdHIgPSAxOworCX0KKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKKwkJY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOworCQlydHMgPSAwOworCX0KKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpIHsKKwkJY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fRFRSOworCQlkdHIgPSAwOworCX0KKworCXByaXYtPmNvbnRyb2xfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHZhbCA9IEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QsIHJ0cyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZXJyKCJTZXQgUlRTIGVycm9yICVkIiwgcmV0dmFsKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIGR0cik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZXJyKCJTZXQgRFRSIGVycm9yICVkIiwgcmV0dmFsKTsKKwkJZ290byBleGl0OworCX0KK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgaW50IGJlbGtpbl9zYV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01JV0FJVDoKKwkJLyogd2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpKi8KKwkJLyogVE9ETyAqLworCQlyZXR1cm4oIDAgKTsKKworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCS8qIHJldHVybiBjb3VudCBvZiBtb2RlbWxpbmUgdHJhbnNpdGlvbnMgKi8KKwkJLyogVE9ETyAqLworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCWRiZygiYmVsa2luX3NhX2lvY3RsIGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IixjbWQpOworCQlyZXR1cm4oLUVOT0lPQ1RMQ01EKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfSAvKiBiZWxraW5fc2FfaW9jdGwgKi8KKworCitzdGF0aWMgaW50IF9faW5pdCBiZWxraW5fc2FfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmJlbGtpbl9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZiZWxraW5fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmJlbGtpbl9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVsa2luX3NhX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZiZWxraW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZiZWxraW5fZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdCAoYmVsa2luX3NhX2luaXQpOworbW9kdWxlX2V4aXQgKGJlbGtpbl9zYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX1ZFUlNJT04oIERSSVZFUl9WRVJTSU9OICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExNmI5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIERyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAKKyAqICAgICAgV2lsbGlhbSBHcmVhdGhvdXNlICh3Z3JlYXRob3VzZUBzbXZhLmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAorICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCisgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgorICogIAorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogMTItTWFyLTIwMDEgZ2toCisgKglBZGRlZCBHb0h1YnMgR08tQ09NMjMyIGRldmljZSBpZC4KKyAqCisgKiAwNi1Ob3YtMjAwMCBna2gKKyAqCUFkZGVkIG9sZCBCZWxraW4gYW5kIFBlcmFjb20gZGV2aWNlIGlkcywgd2hpY2ggdGhpcyBkcml2ZXIgc3VwcG9ydHMKKyAqCisgKiAxMi1PY3QtMjAwMCBXaWxsaWFtIEdyZWF0aG91c2UKKyAqICAgIEZpcnN0IGN1dCBhdCBzdXBwb3J0aW5nIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzCisgKiAgICBJIGRpZCBub3QgaGF2ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHdvcmsgdG8gc3VwcG9ydCB0aGlzCisgKiAgICBhZGFwdGVyLCBzbyBwYXJkb24gYW55IHN0dXBpZCBtaXN0YWtlcy4gIEFsbCBvZiB0aGUgaW5mb3JtYXRpb24KKyAqICAgIEkgYW0gdXNpbmcgdG8gd3JpdGUgdGhpcyBkcml2ZXIgd2FzIGFjcXVpcmVkIGJ5IHVzaW5nIGEgbW9kaWZpZWQKKyAqICAgIFVzYlNub29wIG9uIFdpbmRvd3MyMDAwLgorICogICAgCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfQlNBX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX0JTQV9ICisKKyNkZWZpbmUgQkVMS0lOX0RPQ0tTVEFUSU9OX1ZJRAkweDA1MGQJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEJFTEtJTl9ET0NLU1RBVElPTl9QSUQJMHgxMjAzCS8qIFByb2R1Y3QgSWQgKi8KKworI2RlZmluZSBCRUxLSU5fU0FfVklECTB4MDUwZAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1BJRAkweDAxMDMJLyogUHJvZHVjdCBJZCAqLworCisjZGVmaW5lIEJFTEtJTl9PTERfVklECTB4MDU2YwkvKiBCZWxraW4ncyAib2xkIiB2ZW5kb3IgaWQgKi8KKyNkZWZpbmUgQkVMS0lOX09MRF9QSUQJMHg4MDA3CS8qIEJlbGtpbidzICJvbGQiIHNpbmdsZSBwb3J0IHNlcmlhbCBjb252ZXJ0ZXIncyBpZCAqLworCisjZGVmaW5lIFBFUkFDT01fVklECTB4MDU2NQkvKiBQZXJhY29tJ3MgdmVuZG9yIGlkICovCisjZGVmaW5lIFBFUkFDT01fUElECTB4MDAwMQkvKiBQZXJhY29tJ3Mgc2luZ2xlIHBvcnQgc2VyaWFsIGNvbnZlcnRlcidzIGlkICovCisKKyNkZWZpbmUgR09IVUJTX1ZJRAkweDA5MjEJLyogR29IdWJzIHZlbmRvciBpZCAqLworI2RlZmluZSBHT0hVQlNfUElECTB4MTAwMAkvKiBHb0h1YnMgc2luZ2xlIHBvcnQgc2VyaWFsIGNvbnZlcnRlcidzIGlkIChpZGVudGljYWwgdG8gdGhlIFBlcmFjb20gZGV2aWNlKSAqLworI2RlZmluZSBIQU5EWUxJTktfUElECTB4MTIwMAkvKiBIYW5keUxpbmsgVVNCJ3MgaWQgKGlkZW50aWNhbCB0byB0aGUgUGVyYWNvbSBkZXZpY2UpICovCisKKy8qIFZlbmRvciBSZXF1ZXN0IEludGVyZmFjZSAqLworI2RlZmluZSBCRUxLSU5fU0FfU0VUX0JBVURSQVRFX1JFUVVFU1QJMCAgLyogU2V0IGJhdWQgcmF0ZSAqLworI2RlZmluZSBCRUxLSU5fU0FfU0VUX1NUT1BfQklUU19SRVFVRVNUCTEgIC8qIFNldCBzdG9wIGJpdHMgKDEsMikgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9EQVRBX0JJVFNfUkVRVUVTVAkyICAvKiBTZXQgZGF0YSBiaXRzICg1LDYsNyw4KSAqLworI2RlZmluZSBCRUxLSU5fU0FfU0VUX1BBUklUWV9SRVFVRVNUCTMgIC8qIFNldCBwYXJpdHkgKE5vbmUsIEV2ZW4sIE9kZCkgKi8KKworI2RlZmluZSBCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNUCTEwIC8qIFNldCBEVFIgc3RhdGUgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9SVFNfUkVRVUVTVAkxMSAvKiBTZXQgUlRTIHN0YXRlICovCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfQlJFQUtfUkVRVUVTVAkxMiAvKiBTZXQgQlJFQUsgc3RhdGUgKi8KKworI2RlZmluZSBCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUCTE2IC8qIFNldCBmbG93IGNvbnRyb2wgbW9kZSAqLworCisKKyNpZmRlZiBXSEVOX0lfTEVBUk5fVEhJUworI2RlZmluZSBCRUxLSU5fU0FfU0VUX01BR0lDX1JFUVVFU1QJMTcgLyogSSBkb24ndCBrbm93LCBwb3NzaWJseSBmbHVzaCAqLworCQkJCQkgICAvKiAoYWx3YXlzIGluIFdpbmluaXQgc2VxdWVuY2UgYmVmb3JlIGZsb3cgY29udHJvbCkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1JFU0VUIAkJeHggLyogUmVzZXQgdGhlIHBvcnQgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0dFVF9NT0RFTV9TVEFUVVMJeHggLyogRm9yY2UgcmV0dXJuIG9mIG1vZGVtIHN0YXR1cyByZWdpc3RlciAqLworI2VuZGlmCisKKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9SRVFVRVNUX1RZUEUJMHg0MAorCisjZGVmaW5lIEJFTEtJTl9TQV9CQVVEKGIpCQkoMjMwNDAwL2IpCisKKyNkZWZpbmUgQkVMS0lOX1NBX1NUT1BfQklUUyhiKQkJKGItMSkKKworI2RlZmluZSBCRUxLSU5fU0FfREFUQV9CSVRTKGIpCQkoYi01KQorCisjZGVmaW5lIEJFTEtJTl9TQV9QQVJJVFlfTk9ORQkJMAorI2RlZmluZSBCRUxLSU5fU0FfUEFSSVRZX0VWRU4JCTEKKyNkZWZpbmUgQkVMS0lOX1NBX1BBUklUWV9PREQJCTIKKyNkZWZpbmUgQkVMS0lOX1NBX1BBUklUWV9NQVJLCQkzCisjZGVmaW5lIEJFTEtJTl9TQV9QQVJJVFlfU1BBQ0UJCTQKKworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19OT05FCQkweDAwMDAJLyogTm8gZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX09DVFMJCTB4MDAwMQkvKiB1c2UgQ1RTIGlucHV0IHRvIHRocm90dGxlIG91dHB1dCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19PRFNSCQkweDAwMDIJLyogdXNlIERTUiBpbnB1dCB0byB0aHJvdHRsZSBvdXRwdXQgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfSURTUgkJMHgwMDA0CS8qIHVzZSBEU1IgaW5wdXQgdG8gZW5hYmxlIHJlY2VpdmUgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfSURUUgkJMHgwMDA4CS8qIHVzZSBEVFIgb3V0cHV0IGZvciBpbnB1dCBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfSVJUUwkJMHgwMDEwCS8qIHVzZSBSVFMgb3V0cHV0IGZvciBpbnB1dCBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfT1JUUwkJMHgwMDIwCS8qIHVzZSBSVFMgdG8gaW5kaWNhdGUgZGF0YSBhdmFpbGFibGUgdG8gc2VuZCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19FUlJTVUIJCTB4MDA0MAkvKiA/Pz8/IGd1ZXNzID8/Pz8gc3Vic3RpdHV0ZSBpbmxpbmUgZXJyb3JzICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX09YT04JCTB4MDA4MAkvKiB1c2UgWE9OL1hPRkYgZm9yIG91dHB1dCBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfSVhPTgkJMHgwMTAwCS8qIHVzZSBYT04vWE9GRiBmb3IgaW5wdXQgZmxvdyBjb250cm9sICovCisKKy8qCisgKiBJdCBzZWVtcyB0aGF0IHRoZSBpbnRlcnJ1cHQgcGlwZSBpcyBjbG9zZWx5IG1vZGVsbGVkIGFmdGVyIHRoZQorICogMTY1NTAgcmVnaXN0ZXIgbGF5b3V0LiAgVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZSBhZGFwdGVyIGNhbiAKKyAqIGJlIHVzZWQgaW4gYSAiRE9TIiBlbnZpcm9ubWVudCB0byBzaW11bGF0ZSBhIHN0YW5kYXJkIGhhcmR3YXJlIHBvcnQuCisgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9JTkRFWAkJMgkJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9SRFIJCTB4MDEJLyogcmVjZWl2ZSBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfT0UJCTB4MDIJLyogb3ZlcnJ1biBlcnJvciAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX1BFCQkweDA0CS8qIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX0ZFCQkweDA4CS8qIGZyYW1pbmcgZXJyb3IgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9CSQkJMHgxMAkvKiBicmVhayBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9USEUJCTB4MjAJLyogdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX1RFCQkweDQwCS8qIHRyYW5zbWl0IHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfRVJSCQkweDgwCS8qIE9FIHwgUEUgfCBGRSB8IEJJICovCisKKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9JTkRFWAkJMwkJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfRENUUwkJMHgwMQkvKiBEZWx0YSBDVFMgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9ERFNSCQkweDAyCS8qIERlbHRhIERTUiAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0RSSQkJMHgwNAkvKiBEZWx0YSBSSSAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0RDRAkJMHgwOAkvKiBEZWx0YSBDRCAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0NUUwkJMHgxMAkvKiBDdXJyZW50IENUUyAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0RTUgkJMHgyMAkvKiBDdXJyZW50IERTUiAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX1JJCQkweDQwCS8qIEN1cnJlbnQgUkkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9DRAkJMHg4MAkvKiBDdXJyZW50IENEICovCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQl9TRVJJQUxfQlNBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjEyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYnVzLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBVU0IgU2VyaWFsIENvbnZlcnRlciBCdXMgc3BlY2lmaWMgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKK3N0YXRpYyBpbnQgdXNiX3NlcmlhbF9kZXZpY2VfbWF0Y2ggKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZHJpdmVyOworCWNvbnN0IHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisKKwkvKgorCSAqIGRyaXZlcnMgYXJlIGFscmVhZHkgYXNzaWduZWQgdG8gcG9ydHMgaW4gc2VyaWFsX3Byb2JlIHNvIGl0J3MKKwkgKiBhIHNpbXBsZSBjaGVjayBoZXJlLgorCSAqLworCXBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlpZiAoIXBvcnQpCisJCXJldHVybiAwOworCisJZHJpdmVyID0gdG9fdXNiX3NlcmlhbF9kcml2ZXIoZHJ2KTsKKworCWlmIChkcml2ZXIgPT0gcG9ydC0+c2VyaWFsLT50eXBlKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnVzX3R5cGUgdXNiX3NlcmlhbF9idXNfdHlwZSA9IHsKKwkubmFtZSA9CQkidXNiLXNlcmlhbCIsCisJLm1hdGNoID0JdXNiX3NlcmlhbF9kZXZpY2VfbWF0Y2gsCit9OworCitzdGF0aWMgaW50IHVzYl9zZXJpYWxfZGV2aWNlX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCByZXR2YWwgPSAwOworCWludCBtaW5vcjsKKworCXBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlpZiAoIXBvcnQpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWRyaXZlciA9IHBvcnQtPnNlcmlhbC0+dHlwZTsKKwlpZiAoZHJpdmVyLT5wb3J0X3Byb2JlKSB7CisJCWlmICghdHJ5X21vZHVsZV9nZXQoZHJpdmVyLT5vd25lcikpIHsKKwkJCWRldl9lcnIoZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOworCQkJcmV0dmFsID0gLUVJTzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlyZXR2YWwgPSBkcml2ZXItPnBvcnRfcHJvYmUgKHBvcnQpOworCQltb2R1bGVfcHV0KGRyaXZlci0+b3duZXIpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBleGl0OworCX0KKworCW1pbm9yID0gcG9ydC0+bnVtYmVyOworCXR0eV9yZWdpc3Rlcl9kZXZpY2UgKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgbWlub3IsIGRldik7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsIAorCQkgIiVzIGNvbnZlcnRlciBub3cgYXR0YWNoZWQgdG8gdHR5VVNCJWRcbiIsCisJCSBkcml2ZXItPm5hbWUsIG1pbm9yKTsKKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHVzYl9zZXJpYWxfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkcml2ZXI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgbWlub3I7CisKKwlwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJaWYgKCFwb3J0KSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRyaXZlciA9IHBvcnQtPnNlcmlhbC0+dHlwZTsKKwlpZiAoZHJpdmVyLT5wb3J0X3JlbW92ZSkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+b3duZXIpKSB7CisJCQlkZXZfZXJyKGRldiwgIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKKwkJCXJldHZhbCA9IC1FSU87CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmV0dmFsID0gZHJpdmVyLT5wb3J0X3JlbW92ZSAocG9ydCk7CisJCW1vZHVsZV9wdXQoZHJpdmVyLT5vd25lcik7CisJfQorZXhpdDoKKwltaW5vciA9IHBvcnQtPm51bWJlcjsKKwl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UgKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgbWlub3IpOworCWRldl9pbmZvKGRldiwgIiVzIGNvbnZlcnRlciBub3cgZGlzY29ubmVjdGVkIGZyb20gdHR5VVNCJWRcbiIsCisJCSBkcml2ZXItPm5hbWUsIG1pbm9yKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCB1c2Jfc2VyaWFsX2J1c19yZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQoreworCWludCByZXR2YWw7CisKKwlpZiAoZGV2aWNlLT5zaG9ydF9uYW1lKQorCQlkZXZpY2UtPmRyaXZlci5uYW1lID0gKGNoYXIgKilkZXZpY2UtPnNob3J0X25hbWU7CisJZWxzZQorCQlkZXZpY2UtPmRyaXZlci5uYW1lID0gKGNoYXIgKilkZXZpY2UtPm5hbWU7CisJZGV2aWNlLT5kcml2ZXIuYnVzID0gJnVzYl9zZXJpYWxfYnVzX3R5cGU7CisJZGV2aWNlLT5kcml2ZXIucHJvYmUgPSB1c2Jfc2VyaWFsX2RldmljZV9wcm9iZTsKKwlkZXZpY2UtPmRyaXZlci5yZW1vdmUgPSB1c2Jfc2VyaWFsX2RldmljZV9yZW1vdmU7CisJZGV2aWNlLT5kcml2ZXIub3duZXIgPSBkZXZpY2UtPm93bmVyOworCisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZkZXZpY2UtPmRyaXZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIHVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlciAoJmRldmljZS0+ZHJpdmVyKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3ZjhlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBVU0IgU2VyaWFsIENvbnNvbGUgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiAKKyAqIFRoYW5rcyB0byBSYW5keSBEdW5sYXAgZm9yIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgY29kZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdHJ1Y3QgdXNiY29uc19pbmZvIHsKKwlpbnQJCQltYWdpYzsKKwlpbnQJCQlicmVha19mbGFnOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQ7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYmNvbnNfaW5mbyB1c2Jjb25zX2luZm87CitzdGF0aWMgc3RydWN0IGNvbnNvbGUgdXNiY29uczsKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVVNCIFNlcmlhbCBjb25zb2xlIGRyaXZlcgorICoKKyAqIE11Y2ggb2YgdGhlIGNvZGUgaGVyZSBpcyBjb3BpZWQgZnJvbSBkcml2ZXJzL2NoYXIvc2VyaWFsLmMKKyAqIGFuZCBpbXBsZW1lbnRzIGEgcGhvbnkgc2VyaWFsIGNvbnNvbGUgaW4gdGhlIHNhbWUgd2F5IHRoYXQKKyAqIHNlcmlhbC5jIGRvZXMgc28gdGhhdCBpbiBjYXNlIHNvbWUgc29mdHdhcmUgcXVlcmllcyBpdCwKKyAqIGl0IHdpbGwgZ2V0IHRoZSBzYW1lIHJlc3VsdHMuCisgKgorICogVGhpbmdzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSB3YXkgdGhlIHNlcmlhbCBwb3J0IGNvZGUKKyAqIGRvZXMgdGhpbmdzLCBpcyB0aGF0IHdlIGNhbGwgdGhlIGxvd2VyIGxldmVsIHVzYi1zZXJpYWwKKyAqIGRyaXZlciBjb2RlIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSwgYW5kIHdlIHNldCB0aGUgaW5pdGlhbAorICogY29uc29sZSBzcGVlZHMgYmFzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisKKy8qCisgKiBUaGUgcGFyc2luZyBvZiB0aGUgY29tbWFuZCBsaW5lIHdvcmtzIGV4YWN0bHkgbGlrZSB0aGUKKyAqIHNlcmlhbC5jIGNvZGUsIGV4Y2VwdCB0aGF0IHRoZSBzcGVjaWZpZXIgaXMgInR0eVVTQiIgaW5zdGVhZAorICogb2YgInR0eVMiLgorICovCitzdGF0aWMgaW50IF9faW5pdCB1c2JfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IHVzYmNvbnNfaW5mbyAqaW5mbyA9ICZ1c2Jjb25zX2luZm87CisJaW50IGJhdWQgPSA5NjAwOworCWludCBiaXRzID0gODsKKwlpbnQgcGFyaXR5ID0gJ24nOworCWludCBkb2Zsb3cgPSAwOworCWludCBjZmxhZyA9IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJY2hhciAqczsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvczsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChvcHRpb25zKSB7CisJCWJhdWQgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCBOVUxMLCAxMCk7CisJCXMgPSBvcHRpb25zOworCQl3aGlsZSAoKnMgPj0gJzAnICYmICpzIDw9ICc5JykKKwkJCXMrKzsKKwkJaWYgKCpzKQorCQkJcGFyaXR5ID0gKnMrKzsKKwkJaWYgKCpzKQorCQkJYml0cyAgID0gKnMrKyAtICcwJzsKKwkJaWYgKCpzKQorCQkJZG9mbG93ID0gKCpzKysgPT0gJ3InKTsKKwl9CisKKwkvKiBidWlsZCBhIGNmbGFnIHNldHRpbmcgKi8KKwlzd2l0Y2ggKGJhdWQpIHsKKwkJY2FzZSAxMjAwOgorCQkJY2ZsYWcgfD0gQjEyMDA7CisJCQlicmVhazsKKwkJY2FzZSAyNDAwOgorCQkJY2ZsYWcgfD0gQjI0MDA7CisJCQlicmVhazsKKwkJY2FzZSA0ODAwOgorCQkJY2ZsYWcgfD0gQjQ4MDA7CisJCQlicmVhazsKKwkJY2FzZSAxOTIwMDoKKwkJCWNmbGFnIHw9IEIxOTIwMDsKKwkJCWJyZWFrOworCQljYXNlIDM4NDAwOgorCQkJY2ZsYWcgfD0gQjM4NDAwOworCQkJYnJlYWs7CisJCWNhc2UgNTc2MDA6CisJCQljZmxhZyB8PSBCNTc2MDA7CisJCQlicmVhazsKKwkJY2FzZSAxMTUyMDA6CisJCQljZmxhZyB8PSBCMTE1MjAwOworCQkJYnJlYWs7CisJCWNhc2UgOTYwMDoKKwkJZGVmYXVsdDoKKwkJCWNmbGFnIHw9IEI5NjAwOworCQkJLyoKKwkJCSAqIFNldCB0aGlzIHRvIGEgc2FuZSB2YWx1ZSB0byBwcmV2ZW50IGEgZGl2aWRlIGVycm9yCisJCQkgKi8KKwkJCWJhdWQgID0gOTYwMDsKKwkJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGJpdHMpIHsKKwkJY2FzZSA3OgorCQkJY2ZsYWcgfD0gQ1M3OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgODoKKwkJCWNmbGFnIHw9IENTODsKKwkJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHBhcml0eSkgeworCQljYXNlICdvJzogY2FzZSAnTyc6CisJCQljZmxhZyB8PSBQQVJPREQ7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6IGNhc2UgJ0UnOgorCQkJY2ZsYWcgfD0gUEFSRU5COworCQkJYnJlYWs7CisJfQorCWNvLT5jZmxhZyA9IGNmbGFnOworCisJLyogZ3JhYiB0aGUgZmlyc3Qgc2VyaWFsIHBvcnQgdGhhdCBoYXBwZW5zIHRvIGJlIGNvbm5lY3RlZCAqLworCXNlcmlhbCA9IHVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KDApOworCWlmIChzZXJpYWwgPT0gTlVMTCkgeworCQkvKiBubyBkZXZpY2UgaXMgY29ubmVjdGVkIHlldCwgc29ycnkgOiggKi8KKwkJZXJyICgiTm8gVVNCIGRldmljZSBjb25uZWN0ZWQgdG8gdHR5VVNCMCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXBvcnQtPnR0eSA9IE5VTEw7CisKKwlpbmZvLT5wb3J0ID0gcG9ydDsKKwkgCisJKytwb3J0LT5vcGVuX2NvdW50OworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDEpIHsKKwkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgb3BlbiBpZiB0aGlzIAorCQkgKiBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcG9ydCBpcyBvcGVuZWQgKi8KKwkJaWYgKHNlcmlhbC0+dHlwZS0+b3BlbikKKwkJCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+b3Blbihwb3J0LCBOVUxMKTsKKwkJZWxzZQorCQkJcmV0dmFsID0gdXNiX3NlcmlhbF9nZW5lcmljX29wZW4ocG9ydCwgTlVMTCk7CisJCWlmIChyZXR2YWwpCisJCQlwb3J0LT5vcGVuX2NvdW50ID0gMDsKKwl9CisKKwlpZiAocmV0dmFsKSB7CisJCWVyciAoImNvdWxkIG5vdCBvcGVuIFVTQiBjb25zb2xlIHBvcnQiKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoc2VyaWFsLT50eXBlLT5zZXRfdGVybWlvcykgeworCQkvKiBidWlsZCB1cCBhIGZha2UgdHR5IHN0cnVjdHVyZSBzbyB0aGF0IHRoZSBvcGVuIGNhbGwgaGFzIHNvbWV0aGluZworCQkgKiB0byBsb29rIGF0IHRvIGdldCB0aGUgY2ZsYWcgdmFsdWUgKi8KKwkJdHR5ID0ga21hbGxvYyAoc2l6ZW9mICgqdHR5KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdHR5KSB7CisJCQllcnIgKCJubyBtb3JlIG1lbW9yeSIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdGVybWlvcyA9IGttYWxsb2MgKHNpemVvZiAoKnRlcm1pb3MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0ZXJtaW9zKSB7CisJCQllcnIgKCJubyBtb3JlIG1lbW9yeSIpOworCQkJa2ZyZWUgKHR0eSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQgKHR0eSwgMHgwMCwgc2l6ZW9mKCp0dHkpKTsKKwkJbWVtc2V0ICh0ZXJtaW9zLCAweDAwLCBzaXplb2YoKnRlcm1pb3MpKTsKKwkJdGVybWlvcy0+Y19jZmxhZyA9IGNmbGFnOworCQl0dHktPnRlcm1pb3MgPSB0ZXJtaW9zOworCQlwb3J0LT50dHkgPSB0dHk7CisKKwkJLyogc2V0IHVwIHRoZSBpbml0aWFsIHRlcm1pb3Mgc2V0dGluZ3MgKi8KKwkJc2VyaWFsLT50eXBlLT5zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKwkJcG9ydC0+dHR5ID0gTlVMTDsKKwkJa2ZyZWUgKHRlcm1pb3MpOworCQlrZnJlZSAodHR5KTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB1c2JfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgY291bnQpCit7CisJc3RhdGljIHN0cnVjdCB1c2Jjb25zX2luZm8gKmluZm8gPSAmdXNiY29uc19pbmZvOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBpbmZvLT5wb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisKKwlpZiAoIXBvcnQpCisJCXJldHVybjsKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuOworCisJZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGUocykiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJaWYgKHNlcmlhbC0+dHlwZS0+d3JpdGUpCisJCXJldHZhbCA9IHNlcmlhbC0+dHlwZS0+d3JpdGUocG9ydCwgYnVmLCBjb3VudCk7CisJZWxzZQorCQlyZXR2YWwgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUocG9ydCwgYnVmLCBjb3VudCk7CisKK2V4aXQ6CisJZGJnKCIlcyAtIHJldHVybiB2YWx1ZSAoaWYgd2UgaGFkIG9uZSk6ICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgdXNiY29ucyA9IHsKKwkubmFtZSA9CQkidHR5VVNCIiwKKwkud3JpdGUgPQl1c2JfY29uc29sZV93cml0ZSwKKwkuc2V0dXAgPQl1c2JfY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0JLTEsCit9OworCit2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChpbnQgc2VyaWFsX2RlYnVnLCBpbnQgbWlub3IpCit7CisJZGVidWcgPSBzZXJpYWxfZGVidWc7CisKKwlpZiAobWlub3IgPT0gMCkgeworCQkvKiAKKwkJICogQ2FsbCByZWdpc3Rlcl9jb25zb2xlKCkgaWYgdGhpcyBpcyB0aGUgZmlyc3QgZGV2aWNlIHBsdWdnZWQKKwkJICogaW4uICBJZiB3ZSBjYWxsIGl0IGVhcmxpZXIsIHRoZW4gdGhlIGNhbGxiYWNrIHRvCisJCSAqIGNvbnNvbGVfc2V0dXAoKSB3aWxsIGZhaWwsIGFzIHRoZXJlIGlzIG5vdCBhIGRldmljZSBzZWVuIGJ5CisJCSAqIHRoZSBVU0Igc3Vic3lzdGVtIHlldC4KKwkJICovCisJCS8qCisJCSAqIFJlZ2lzdGVyIGNvbnNvbGUuCisJCSAqIE5PVEVTOgorCQkgKiBjb25zb2xlX3NldHVwKCkgaXMgY2FsbGVkIChiYWNrKSBpbW1lZGlhdGVseSAoZnJvbSByZWdpc3Rlcl9jb25zb2xlKS4KKwkJICogY29uc29sZV93cml0ZSgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmcm9tIHJlZ2lzdGVyX2NvbnNvbGUgaWZmCisJCSAqIENPTl9QUklOVEJVRkZFUiBpcyBzZXQgaW4gZmxhZ3MuCisJCSAqLworCQlkYmcgKCJyZWdpc3RlcmluZyB0aGUgVVNCIHNlcmlhbCBjb25zb2xlLiIpOworCQlyZWdpc3Rlcl9jb25zb2xlKCZ1c2Jjb25zKTsKKwl9Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9jb25zb2xlX2V4aXQgKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9jb25zb2xlKCZ1c2Jjb25zKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOWJiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKQEAgLTAsMCArMSw1OTEgQEAKKy8qCisgKiBTaWxpY29uIExhYm9yYXRvcmllcyBDUDIxMDEvQ1AyMTAyIFVTQiB0byBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQ3JhaWcgU2hlbGxleSAoY3JhaWdAbWljcm90cm9uLm9yZy51aykKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wMyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlNpbGljb24gTGFicyBDUDIxMDEvQ1AyMTAyIFJTMjMyIHNlcmlhbCBhZGFwdG9yIGRyaXZlciIKKworLyoKKyAqIEZ1bmN0aW9uIFByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCBjcDIxMDFfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IGZpbGUqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IGZpbGUqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kik7CitzdGF0aWMgdm9pZCBjcDIxMDFfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCosIHN0cnVjdCB0ZXJtaW9zKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqLCBpbnQpOworc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwqKTsKKworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgxMGM0LCAweGVhNjApIH0sCS8qU2lsaWNvbiBsYWJzIGZhY3RvcnkgZGVmYXVsdCovCisJe1VTQl9ERVZJQ0UoMHgxMGFiLCAweDEwYzUpIH0sCS8qU2llbWVucyBNQzYwIENhYmxlKi8KKwl7IH0gLyogVGVybWluYXRpbmcgRW50cnkqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjcDIxMDFfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAiQ1AyMTAxIiwKKwkucHJvYmUJCT0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjcDIxMDFfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJDUDIxMDEiLAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDAsCisJLm51bV9idWxrX2luCQk9IDAsCisJLm51bV9idWxrX291dAkJPSAwLAorCS5udW1fcG9ydHMJCT0gMSwKKwkub3BlbgkJCT0gY3AyMTAxX29wZW4sCisJLmNsb3NlCQkJPSBjcDIxMDFfY2xvc2UsCisJLmJyZWFrX2N0bAkJPSBjcDIxMDFfYnJlYWtfY3RsLAorCS5zZXRfdGVybWlvcwkJPSBjcDIxMDFfc2V0X3Rlcm1pb3MsCisJLmF0dGFjaAkJCT0gY3AyMTAxX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGNwMjEwMV9zaHV0ZG93biwKK307CisKKy8qQ29uZmlnIHJlcXVlc3QgdHlwZXMqLworI2RlZmluZSBSRVFUWVBFX0hPU1RfVE9fREVWSUNFCTB4NDEKKyNkZWZpbmUgUkVRVFlQRV9ERVZJQ0VfVE9fSE9TVAkweGMxCisKKy8qQ29uZmlnIFNFVCByZXF1ZXN0cy4gVG8gR0VULCBhZGQgMSB0byB0aGUgcmVxdWVzdCBudW1iZXIqLworI2RlZmluZSBDUDIxMDFfVUFSVCAJCTB4MDAJLypFbmFibGUgLyBEaXNhYmxlKi8KKyNkZWZpbmUgQ1AyMTAxX0JBVURSQVRFCQkweDAxCS8qKEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWRyYXRlKSovCisjZGVmaW5lIENQMjEwMV9CSVRTCQkweDAzCS8qMHgoMCkoZGF0YSBiaXRzKShwYXJpdHkpKHN0b3AgYml0cykqLworI2RlZmluZSBDUDIxMDFfQlJFQUsJCTB4MDUJLypPbiAvIE9mZiovCisjZGVmaW5lIENQMjEwMV9EVFJSVFMJCTB4MDcJLyoxMDEgLyAyMDIgID8/PyovCisjZGVmaW5lIENQMjEwMV9DT05GSUdfMTYJMHgxMwkvKjE2IGJ5dGVzIG9mIGNvbmZpZyBkYXRhID8/PyovCisjZGVmaW5lIENQMjEwMV9DT05GSUdfNgkJMHgxOQkvKjYgYnl0ZXMgb2YgY29uZmlnIGRhdGEgPz8/Ki8KKworLypDUDIxMDFfVUFSVCovCisjZGVmaW5lIFVBUlRfRU5BQkxFCQkweDAwMDEKKyNkZWZpbmUgVUFSVF9ESVNBQkxFCQkweDAwMDAKKworLypDUDIxMDFfQkFVRFJBVEUqLworI2RlZmluZSBCQVVEX1JBVEVfR0VOX0ZSRVEJMHgzODQwMDAKKworLypDUDIxMDFfQklUUyovCisjZGVmaW5lIEJJVFNfREFUQV9NQVNLCQkwWDBmMDAKKyNkZWZpbmUgQklUU19EQVRBXzYJCTBYMDYwMAorI2RlZmluZSBCSVRTX0RBVEFfNwkJMFgwNzAwCisjZGVmaW5lIEJJVFNfREFUQV84CQkwWDA4MDAKKyNkZWZpbmUgQklUU19EQVRBXzkJCTBYMDkwMAorCisjZGVmaW5lIEJJVFNfUEFSSVRZX01BU0sJMHgwMGYwCisjZGVmaW5lIEJJVFNfUEFSSVRZX05PTkUJMHgwMDAwCisjZGVmaW5lIEJJVFNfUEFSSVRZX09ERAkJMHgwMDEwCisjZGVmaW5lIEJJVFNfUEFSSVRZX0VWRU4JMHgwMDIwCisjZGVmaW5lIEJJVFNfUEFSSVRZX01BUksJMHgwMDMwCisjZGVmaW5lIEJJVFNfUEFSSVRZX1NQQUNFCTB4MDA0MAorCisjZGVmaW5lIEJJVFNfU1RPUF9NQVNLCQkweDAwMGYKKyNkZWZpbmUgQklUU19TVE9QXzEJCTB4MDAwMAorI2RlZmluZSBCSVRTX1NUT1BfMV81CQkweDAwMDEKKyNkZWZpbmUgQklUU19TVE9QXzIJCTB4MDAwMgorI2RlZmluZSBCUkVBS19PTgkJMHgwMDAwCisjZGVmaW5lIEJSRUFLX09GRgkJMHgwMDAxCisKKworc3RhdGljIGludCBjcDIxMDFfZ2V0X2NvbmZpZyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KiBwb3J0LCB1OCByZXF1ZXN0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdW5zaWduZWQgY2hhciBidWZbNF07CisJdW5zaWduZWQgaW50IHZhbHVlOworCWludCByZXN1bHQsIGk7CisKKwkvKkZvciBnZXQgcmVxdWVzdHMsIHRoZSByZXF1ZXN0IG51bWJlciBtdXN0IGJlIGluY3JlbWVudGVkKi8KKwlyZXF1ZXN0Kys7CisKKwkvKklzc3VlIHRoZSByZXF1ZXN0LCBhdHRlbXB0aW5nIHRvIHJlYWQgNCBieXRlcyovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldix1c2JfcmN2Y3RybHBpcGUgKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQlyZXF1ZXN0LCBSRVFUWVBFX0RFVklDRV9UT19IT1NULCAweDAwMDAsCisJCQkJMCwgYnVmLCA0LCAzMDApOworCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCBjb25maWcgcmVxdWVzdCwgIgorCQkJCSJyZXF1ZXN0PTB4JXggcmVzdWx0PSVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcmVxdWVzdCwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKkFzc2VtYmxlIGVhY2ggYnl0ZSByZWFkIGludG8gYW4gaW50ZWdlciB2YWx1ZSovCisJdmFsdWUgPSAwOworCWZvciAoaT0wOyBpPDQgJiYgaTxyZXN1bHQ7IGkrKykKKwkJdmFsdWUgfD0gKGJ1ZltpXSA8PCAoaSAqIDgpKTsKKworCWRiZyggIiAlcyAtIHJlcXVlc3Q9MHgleCByZXN1bHQ9JWQgdmFsdWU9MHgleCIsCisJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHJlc3VsdCwgdmFsdWUpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IGNwMjEwMV9zZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqIHBvcnQsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQ7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCXJlcXVlc3QsIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UsIHZhbHVlLAorCQkJMCwgTlVMTCwgMCwgMzAwKTsKKworCWlmIChyZXN1bHQgPDApIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCBjb25maWcgcmVxdWVzdCwgIgorCQkJCSJyZXF1ZXN0PTB4JXggdmFsdWU9MHgleCByZXN1bHQ9JWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCByZXF1ZXN0LCB2YWx1ZSwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlkYmcoIiAlcyAtIHJlcXVlc3Q9MHgleCB2YWx1ZT0weCV4IHJlc3VsdD0lZCIsCisJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHZhbHVlLCByZXN1bHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9VQVJULCBVQVJUX0VOQUJMRSkpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gZW5hYmxlIFVBUlRcbiIsCisJCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2ssCisJCQlwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsICIKKwkJCQkiZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKkNvbmZpZ3VyZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUqLworCWNwMjEwMV9nZXRfdGVybWlvcyhwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJLyogc2h1dGRvd24gYW55IGJ1bGsgcmVhZHMgdGhhdCBtaWdodCBiZSBnb2luZyBvbiAqLworCQlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCisJCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pCisJCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCX0KK30KKworc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCWRiZygiJXMgLSBzaHV0dGluZyBkb3duIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisKKwljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfVUFSVCwgVUFSVF9ESVNBQkxFKTsKK30KKworLyogY3AyMTAxX2dldF90ZXJtaW9zKi8KKy8qIFJlYWRzIHRoZSBiYXVkIHJhdGUsIGRhdGEgYml0cywgcGFyaXR5IGFuZCBzdG9wIGJpdHMgZnJvbSB0aGUgZGV2aWNlKi8KKy8qIENvcnJlY3RzIGFueSB1bnN1cHBvcnRlZCB2YWx1ZXMqLworLyogQ29uZmlndXJlcyB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhlIGRldmljZSovCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IGNmbGFnOworCWludCBiYXVkOworCWludCBiaXRzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJYmF1ZCA9IGNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSk7CisJLypDb252ZXJ0IHRvIGJhdWRyYXRlKi8KKwlpZiAoYmF1ZCkKKwkJYmF1ZCA9IEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQ7CisKKwlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWQpOworCWNmbGFnICY9IH5DQkFVRDsKKwlzd2l0Y2ggKGJhdWQpIHsKKwkJLyogVGhlIGJhdWQgcmF0ZXMgd2hpY2ggYXJlIGNvbW1lbnRlZCBvdXQgYmVsb3cKKwkJICogYXBwZWFyIHRvIGJlIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlCisJCSAqIGJ1dCBhcmUgbm9uLXN0YW5kYXJkCisJCSAqLworCQljYXNlIDYwMDoJY2ZsYWcgfD0gQjYwMDsJCWJyZWFrOworCQljYXNlIDEyMDA6CWNmbGFnIHw9IEIxMjAwOwkJYnJlYWs7CisJCWNhc2UgMTgwMDoJY2ZsYWcgfD0gQjE4MDA7CQlicmVhazsKKwkJY2FzZSAyNDAwOgljZmxhZyB8PSBCMjQwMDsJCWJyZWFrOworCQljYXNlIDQ4MDA6CWNmbGFnIHw9IEI0ODAwOwkJYnJlYWs7CisJCS8qY2FzZSA3MjAwOgljZmxhZyB8PSBCNzIwMDsJCWJyZWFrOyovCisJCWNhc2UgOTYwMDoJY2ZsYWcgfD0gQjk2MDA7CQlicmVhazsKKwkJLypjYXNlIDE0NDAwOgljZmxhZyB8PSBCMTQ0MDA7CWJyZWFrOyovCisJCWNhc2UgMTkyMDA6CWNmbGFnIHw9IEIxOTIwMDsJYnJlYWs7CisJCS8qY2FzZSAyODgwMDoJY2ZsYWcgfD0gQjI4ODAwOwlicmVhazsqLworCQljYXNlIDM4NDAwOgljZmxhZyB8PSBCMzg0MDA7CWJyZWFrOworCQkvKmNhc2UgNTU4NTQ6CWNmbGFnIHw9IEI1NTA1NDsJYnJlYWs7Ki8KKwkJY2FzZSA1NzYwMDoJY2ZsYWcgfD0gQjU3NjAwOwlicmVhazsKKwkJY2FzZSAxMTUyMDA6CWNmbGFnIHw9IEIxMTUyMDA7CWJyZWFrOworCQkvKmNhc2UgMTI3MTE3OgljZmxhZyB8PSBCMTI3MTE3OwlicmVhazsqLworCQljYXNlIDIzMDQwMDoJY2ZsYWcgfD0gQjIzMDQwMDsJYnJlYWs7CisJCWNhc2UgNDYwODAwOgljZmxhZyB8PSBCNDYwODAwOwlicmVhazsKKwkJY2FzZSA5MjE2MDA6CWNmbGFnIHw9IEI5MjE2MDA7CWJyZWFrOworCQkvKmNhc2UgMzY4NjQwMDoJY2ZsYWcgfD0gQjM2ODY0MDA7CWJyZWFrOyovCisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gQmF1ZCByYXRlIGlzIG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkJInVzaW5nIDk2MDAgYmF1ZCIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBCOTYwMDsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwKKwkJCQkJKEJBVURfUkFURV9HRU5fRlJFUS85NjAwKSk7CisJCQlicmVhazsKKwl9CisKKwliaXRzID0gY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMpOworCWNmbGFnICY9IH5DU0laRTsKKwlzd2l0Y2goYml0cyAmIEJJVFNfREFUQV9NQVNLKSB7CisJCWNhc2UgQklUU19EQVRBXzY6CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBDUzY7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX0RBVEFfNzoKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IENTNzsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfREFUQV84OgorCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQ1M4OworCQkJYnJlYWs7CisJCWNhc2UgQklUU19EQVRBXzk6CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSAobm90IHN1cHBvcnRlZCwgIgorCQkJCQkidXNpbmcgOCBkYXRhIGJpdHMpIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IENTODsKKwkJCWJpdHMgJj0gfkJJVFNfREFUQV9NQVNLOworCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIGRhdGEgYml0cywgIgorCQkJCQkidXNpbmcgOCIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBDUzg7CisJCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKKwkJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwl9CisKKwlzd2l0Y2goYml0cyAmIEJJVFNfUEFSSVRZX01BU0spIHsKKwkJY2FzZSBCSVRTX1BBUklUWV9OT05FOgorCQkJZGJnKCIlcyAtIHBhcml0eSA9IE5PTkUiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfUEFSSVRZX09ERDoKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBPREQiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gKFBBUkVOQnxQQVJPREQpOworCQkJYnJlYWs7CisJCWNhc2UgQklUU19QQVJJVFlfRVZFTjoKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBFVkVOIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnICY9IH5QQVJPREQ7CisJCQljZmxhZyB8PSBQQVJFTkI7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX1BBUklUWV9NQVJLOgorCQkJZGJnKCIlcyAtIHBhcml0eSA9IE1BUksgKG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkJImRpc2FibGluZyBwYXJpdHkpIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnICY9IH5QQVJFTkI7CisJCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJCWNhc2UgQklUU19QQVJJVFlfU1BBQ0U6CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gU1BBQ0UgKG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkJImRpc2FibGluZyBwYXJpdHkpIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnICY9IH5QQVJFTkI7CisJCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gVW5rbm93biBwYXJpdHkgbW9kZSwgIgorCQkJCQkiZGlzYWJsaW5nIHBhcml0eSIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyAmPSB+UEFSRU5COworCQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCX0KKworCWNmbGFnICY9IH5DU1RPUEI7CisJc3dpdGNoKGJpdHMgJiBCSVRTX1NUT1BfTUFTSykgeworCQljYXNlIEJJVFNfU1RPUF8xOgorCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCWNhc2UgQklUU19TVE9QXzFfNToKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxLjUgKG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkJInVzaW5nIDEgc3RvcCBiaXQiLCBfX0ZVTkNUSU9OX18pOworCQkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX1NUT1BfMjoKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IENTVE9QQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIHN0b3AgYml0cywgIgorCQkJCQkidXNpbmcgMSBzdG9wIGJpdCIsIF9fRlVOQ1RJT05fXyk7CisJCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCX0KKworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IGNmbGFnOworfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwl1bnNpZ25lZCBpbnQgY2ZsYWcsIG9sZF9jZmxhZz0wOworCWludCBiYXVkPTA7CisJaW50IGJpdHM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgorCQkJCShSRUxFVkFOVF9JRkxBRyhwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcpCisJCQkJPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCisJCW9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOworCX0KKworCS8qIElmIHRoZSBiYXVkIHJhdGUgaXMgdG8gYmUgdXBkYXRlZCovCisJaWYgKChjZmxhZyAmIENCQVVEKSAhPSAob2xkX2NmbGFnICYgQ0JBVUQpKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDQkFVRCkgeworCQkJLyogVGhlIGJhdWQgcmF0ZXMgd2hpY2ggYXJlIGNvbW1lbnRlZCBvdXQgYmVsb3cKKwkJCSAqIGFwcGVhciB0byBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZQorCQkJICogYnV0IGFyZSBub24tc3RhbmRhcmQKKwkJCSAqLworCQkJY2FzZSBCMDoJYmF1ZCA9IDA7CWJyZWFrOworCQkJY2FzZSBCNjAwOgliYXVkID0gNjAwOwlicmVhazsKKwkJCWNhc2UgQjEyMDA6CWJhdWQgPSAxMjAwOwlicmVhazsKKwkJCWNhc2UgQjE4MDA6CWJhdWQgPSAxODAwOwlicmVhazsKKwkJCWNhc2UgQjI0MDA6CWJhdWQgPSAyNDAwOwlicmVhazsKKwkJCWNhc2UgQjQ4MDA6CWJhdWQgPSA0ODAwOwlicmVhazsKKwkJCS8qY2FzZSBCNzIwMDoJYmF1ZCA9IDcyMDA7CWJyZWFrOyovCisJCQljYXNlIEI5NjAwOgliYXVkID0gOTYwMDsJYnJlYWs7CisJCQkvKmFzZSBCMTQ0MDA6CWJhdWQgPSAxNDQwMDsJYnJlYWs7Ki8KKwkJCWNhc2UgQjE5MjAwOgliYXVkID0gMTkyMDA7CWJyZWFrOworCQkJLypjYXNlIEIyODgwMDoJYmF1ZCA9IDI4ODAwOwlicmVhazsqLworCQkJY2FzZSBCMzg0MDA6CWJhdWQgPSAzODQwMDsJYnJlYWs7CisJCQkvKmNhc2UgQjU1ODU0OgliYXVkID0gNTUwNTQ7CWJyZWFrOyovCisJCQljYXNlIEI1NzYwMDoJYmF1ZCA9IDU3NjAwOwlicmVhazsKKwkJCWNhc2UgQjExNTIwMDoJYmF1ZCA9IDExNTIwMDsJYnJlYWs7CisJCQkvKmNhc2UgQjEyNzExNzoJYmF1ZCA9IDEyNzExNzsJYnJlYWs7Ki8KKwkJCWNhc2UgQjIzMDQwMDoJYmF1ZCA9IDIzMDQwMDsJYnJlYWs7CisJCQljYXNlIEI0NjA4MDA6CWJhdWQgPSA0NjA4MDA7CWJyZWFrOworCQkJY2FzZSBCOTIxNjAwOgliYXVkID0gOTIxNjAwOwlicmVhazsKKwkJCS8qY2FzZSBCMzY4NjQwMDoJYmF1ZCA9IDM2ODY0MDA7CWJyZWFrOyovCisJCQlkZWZhdWx0OgorCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgImNwMjEwMSBkcml2ZXIgZG9lcyBub3QgIgorCQkJCQkic3VwcG9ydCB0aGUgYmF1ZHJhdGUgcmVxdWVzdGVkXG4iKTsKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChiYXVkKSB7CisJCQlkYmcoIiVzIC0gU2V0dGluZyBiYXVkIHJhdGUgdG8gJWQgYmF1ZCIsIF9fRlVOQ1RJT05fXywKKwkJCQkJYmF1ZCk7CisJCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JBVURSQVRFLAorCQkJCQkJKEJBVURfUkFURV9HRU5fRlJFUSAvIGJhdWQpKSkKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJCYXVkIHJhdGUgcmVxdWVzdGVkIG5vdCAiCisJCQkJCQkic3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJCX0KKwl9CisKKwkvKklmIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIGlzIHRvIGJlIHVwZGF0ZWQqLworCWlmICgoY2ZsYWcgJiBDU0laRSkgIT0gKG9sZF9jZmxhZyAmIENTSVpFKSkgeworCQliaXRzID0gY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMpOworCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCQljYXNlIENTNjoKKwkJCQliaXRzIHw9IEJJVFNfREFUQV82OworCQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19GVU5DVElPTl9fKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ1M3OgorCQkJCWJpdHMgfD0gQklUU19EQVRBXzc7CisJCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX0ZVTkNUSU9OX18pOworCQkJCWJyZWFrOworCQkJY2FzZSBDUzg6CisJCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJYnJlYWs7CisJCQkvKmNhc2UgQ1M5OgorCQkJIAliaXRzIHw9IEJJVFNfREFUQV85OworCQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IiwgX19GVU5DVElPTl9fKTsKKwkJCQlicmVhazsqLworCQkJZGVmYXVsdDoKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKKwkJCQkJInN1cHBvcnQgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVlc3RlZCwiCisJCQkJCSIgdXNpbmcgOCBiaXQgbW9kZVxuIik7CisJCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTnVtYmVyIG9mIGRhdGEgYml0cyByZXF1ZXN0ZWQgIgorCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCX0KKworCWlmICgoY2ZsYWcgJiAoUEFSRU5CfFBBUk9ERCkpICE9IChvbGRfY2ZsYWcgJiAoUEFSRU5CfFBBUk9ERCkpKSB7CisJCWJpdHMgPSBjcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUyk7CisJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7CisJCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQkJYml0cyB8PSBCSVRTX1BBUklUWV9PREQ7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IE9ERCIsIF9fRlVOQ1RJT05fXyk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgfD0gQklUU19QQVJJVFlfRVZFTjsKKwkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gRVZFTiIsIF9fRlVOQ1RJT05fXyk7CisJCQl9CisJCX0KKwkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKSkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlBhcml0eSBtb2RlIG5vdCBzdXBwb3J0ZWQgIgorCQkJCQkiYnkgZGV2aWNlXG4iKTsKKwl9CisKKwlpZiAoKGNmbGFnICYgQ1NUT1BCKSAhPSAob2xkX2NmbGFnICYgQ1NUT1BCKSkgeworCQliaXRzID0gY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMpOworCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKKwkJaWYgKGNmbGFnICYgQ1NUT1BCKSB7CisJCQliaXRzIHw9IEJJVFNfU1RPUF8yOworCQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJYml0cyB8PSBCSVRTX1NUT1BfMTsKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgorCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXUxNiBzdGF0ZTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCWlmIChicmVha19zdGF0ZSA9PSAwKQorCQlzdGF0ZSA9IEJSRUFLX09GRjsKKwllbHNlCisJCXN0YXRlID0gQlJFQUtfT047CisJZGJnKCIlcyAtIHR1cm5pbmcgYnJlYWsgJXMiLCBfX0ZVTkNUSU9OX18sCisJCQlzdGF0ZT09QlJFQUtfT0ZGID8gIm9mZiIgOiAib24iKTsKKwljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQlJFQUssIHN0YXRlKTsKK30KKworc3RhdGljIGludCBjcDIxMDFfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwkvKkNQMjEwMSBidWZmZXJzIGJlaGF2ZSBzdHJhbmdlbHkgdW5sZXNzIGRldmljZSBpcyByZXNldCovCisJdXNiX3Jlc2V0X2RldmljZShzZXJpYWwtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogc3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQljcDIxMDFfY2xlYW51cChzZXJpYWwtPnBvcnRbaV0pOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgY3AyMTAxX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmNwMjEwMV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7IC8qRmFpbGVkIHRvIHJlZ2lzdGVyKi8KKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmY3AyMTAxX2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQkvKkZhaWxlZCB0byByZWdpc3RlciovCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3AyMTAxX2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLypTdWNjZXNzKi8KKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcDIxMDFfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmNwMjEwMV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmNwMjEwMV9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChjcDIxMDFfaW5pdCk7Cittb2R1bGVfZXhpdChjcDIxMDFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTIwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKQEAgLTAsMCArMSw1MTQgQEAKKy8qCisgKiAgUkVJTkVSIFNDVCBjeWJlckphY2sgcGlucGFkL2UtY29tIFVTQiBDaGlwY2FyZCBSZWFkZXIgRHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSAgUkVJTkVSIFNDVAorICogIEF1dGhvcjogTWF0dGhpYXMgQnJ1ZXN0bGUKKyAqCisgKiAgQ29udGFjdDogc3VwcG9ydEByZWluZXItc2N0LmNvbSAoc2VlIE1BSU5UQUlORVJTKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgbGFyZ2VseSBkZXJpdmVkIGZyb20gd29yayBieSB0aGUgbGludXgtdXNiIGdyb3VwCisgKiAgYW5kIGFzc29jaWF0ZWQgc291cmNlIGZpbGVzLiAgUGxlYXNlIHNlZSB0aGUgdXNiL3NlcmlhbCBmaWxlcyBmb3IKKyAqICBpbmRpdmlkdWFsIGNyZWRpdHMgYW5kIGNvcHlyaWdodHMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoYW5rcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKSBmb3IgaGlzIGhlbHAgYW5kCisgKiAgcGF0aWVuY2UuCisgKgorICogIEluIGNhc2Ugb2YgcHJvYmxlbXMsIHBsZWFzZSB3cml0ZSB0byB0aGUgY29udGFjdCBlLW1haWwgYWRkcmVzcworICogIG1lbnRpb25lZCBhYm92ZS4KKyAqCisgKiAgUGxlYXNlIG5vdGUgdGhhdCBsYXRlciBtb2RlbHMgb2YgdGhlIGN5YmVyamFjayByZWFkZXIgZmFtaWx5IGFyZQorICogIHN1cHBvcnRlZCBieSBhIGxpYnVzYi1iYXNlZCB1c2Vyc3BhY2UgZGV2aWNlIGRyaXZlci4KKyAqCisgKiAgSG9tZXBhZ2U6IGh0dHA6Ly93d3cucmVpbmVyLXNjdC5kZS9zdXBwb3J0L3RyZWliZXJfY3liZXJqYWNrLnBocCNsaW51eAorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisjZGVmaW5lIENZQkVSSkFDS19MT0NBTF9CVUZfU0laRSAzMgorCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWF0dGhpYXMgQnJ1ZXN0bGUiCisjZGVmaW5lIERSSVZFUl9ERVNDICJSRUlORVIgU0NUIGN5YmVySmFjayBwaW5wYWQvZS1jb20gVVNCIENoaXBjYXJkIFJlYWRlciBEcml2ZXIiCisKKworI2RlZmluZSBDWUJFUkpBQ0tfVkVORE9SX0lECTB4MEM0QgorI2RlZmluZSBDWUJFUkpBQ0tfUFJPRFVDVF9JRAkweDAxMDAKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIGludCBjeWJlcmphY2tfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBjeWJlcmphY2tfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgY3liZXJqYWNrX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3dyaXRlX3Jvb20oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBjeWJlcmphY2tfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShDWUJFUkpBQ0tfVkVORE9SX0lELCBDWUJFUkpBQ0tfUFJPRFVDVF9JRCkgfSwKKwl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeWJlcmphY2tfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJjeWJlcmphY2siLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY3liZXJqYWNrX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJSZWluZXIgU0NUIEN5YmVyamFjayBVU0IgY2FyZCByZWFkZXIiLAorCS5zaG9ydF9uYW1lID0JCSJjeWJlcmphY2siLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CTEsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuYXR0YWNoID0JCWN5YmVyamFja19zdGFydHVwLAorCS5zaHV0ZG93biA9CQljeWJlcmphY2tfc2h1dGRvd24sCisJLm9wZW4gPQkJCWN5YmVyamFja19vcGVuLAorCS5jbG9zZSA9CQljeWJlcmphY2tfY2xvc2UsCisJLndyaXRlID0JCWN5YmVyamFja193cml0ZSwKKwkud3JpdGVfcm9vbSA9CWN5YmVyamFja193cml0ZV9yb29tLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CWN5YmVyamFja19yZWFkX2ludF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JY3liZXJqYWNrX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrLAorfTsKKworc3RydWN0IGN5YmVyamFja19wcml2YXRlIHsKKwlzcGlubG9ja190CWxvY2s7CQkvKiBMb2NrIGZvciBTTVAgKi8KKwlzaG9ydAkJcmR0b2RvOwkJLyogQnl0ZXMgc3RpbGwgdG8gcmVhZCAqLworCXVuc2lnbmVkIGNoYXIJd3JidWZbNSo2NF07CS8qIEJ1ZmZlciBmb3IgY29sbGVjdGluZyBkYXRhIHRvIHdyaXRlICovCisJc2hvcnQJCXdyZmlsbGVkOwkvKiBPdmVyYWxsIGRhdGEgc2l6ZSB3ZSBhbHJlYWR5IGdvdCAqLworCXNob3J0CQl3cnNlbnQ7CQkvKiBEYXRhIGFscmVhZHkgc2VudCAqLworfTsKKworLyogZG8gc29tZSBzdGFydHVwIGFsbG9jYXRpb25zIG5vdCBjdXJyZW50bHkgcGVyZm9ybWVkIGJ5IHVzYl9zZXJpYWxfcHJvYmUoKSAqLworc3RhdGljIGludCBjeWJlcmphY2tfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXY7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgKi8KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+cmR0b2RvID0gMDsKKwlwcml2LT53cmZpbGxlZCA9IDA7CisJcHJpdi0+d3JzZW50ID0gMDsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcmlhbC0+cG9ydFswXS0+d3JpdGVfd2FpdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlpbnQgcmVzdWx0OworCQlzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl91cmIsIAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlyZXR1cm4oIDAgKTsKK30KKworc3RhdGljIHZvaWQgY3liZXJqYWNrX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXVzYl9raWxsX3VyYihzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl91cmIpOworCQkvKiBNeSBzcGVjaWFsIGl0ZW1zLCB0aGUgc3RhbmRhcmQgcm91dGluZXMgZnJlZSBteSB1cmJzICovCisJCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorfQorCQorc3RhdGljIGludCAgY3liZXJqYWNrX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlkYmcoIiVzIC0gdXNiX2NsZWFyX2hhbHQiLCBfX0ZVTkNUSU9OX18gKTsKKwl1c2JfY2xlYXJfaGFsdChwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKworCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcworCSAqIHRoZSBkYXRhIHRocm91Z2gsIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2gKKwkgKiBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuCisJICovCisJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+cmR0b2RvID0gMDsKKwlwcml2LT53cmZpbGxlZCA9IDA7CisJcHJpdi0+d3JzZW50ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjeWJlcmphY2tfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHBvcnQtPnNlcmlhbC0+ZGV2KSB7CisJCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJfQorfQorCitzdGF0aWMgaW50IGN5YmVyamFja193cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCWludCB3cmV4cGVjdGVkOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiggKGNvdW50K3ByaXYtPndyZmlsbGVkKT5zaXplb2YocHJpdi0+d3JidWYpICkgeworCQkvKiBUbyBtdWNoIGRhdGEgZm9yIGJ1ZmZlci4gUmVzZXQgYnVmZmVyLiAqLworCQlwcml2LT53cmZpbGxlZD0wOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAoMCk7CisJfQorCisJLyogQ29weSBkYXRhICovCisJbWVtY3B5IChwcml2LT53cmJ1Zitwcml2LT53cmZpbGxlZCwgYnVmLCBjb3VudCk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsCisJCXByaXYtPndyYnVmK3ByaXYtPndyZmlsbGVkKTsKKwlwcml2LT53cmZpbGxlZCArPSBjb3VudDsKKworCWlmKCBwcml2LT53cmZpbGxlZCA+PSAzICkgeworCQl3cmV4cGVjdGVkID0gKChpbnQpcHJpdi0+d3JidWZbMl08PDgpK3ByaXYtPndyYnVmWzFdKzM7CisJCWRiZygiJXMgLSBleHBlY3RlZCBkYXRhOiAlZCIsIF9fRlVOQ1RJT05fXywgd3JleHBlY3RlZCk7CisJfSBlbHNlIHsKKwkJd3JleHBlY3RlZCA9IHNpemVvZihwcml2LT53cmJ1Zik7CisJfQorCisJaWYoIHByaXYtPndyZmlsbGVkID49IHdyZXhwZWN0ZWQgKSB7CisJCS8qIFdlIGhhdmUgZW5vdWdoIGRhdGEgdG8gYmVnaW4gdHJhbnNtaXNzaW9uICovCisJCWludCBsZW5ndGg7CisKKwkJZGJnKCIlcyAtIHRyYW5zbWl0dGluZyBkYXRhIChmcmFtZSAxKSIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9ICh3cmV4cGVjdGVkID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPyBwb3J0LT5idWxrX291dF9zaXplIDogd3JleHBlY3RlZDsKKworCQltZW1jcHkgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwcml2LT53cmJ1ZiwgbGVuZ3RoICk7CisJCXByaXYtPndyc2VudD1sZW5ndGg7CisKKwkJLyogc2V0IHVwIG91ciB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwgCisJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLAorCQkJICAgICAgKChzZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8gCisJCQkgICAgICAgc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDogCisJCQkgICAgICAgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2spLCAKKwkJCSAgICAgIHBvcnQpOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQkvKiBUaHJvdyBhd2F5IGRhdGEuIE5vIGJldHRlciBpZGVhIHdoYXQgdG8gZG8gd2l0aCBpdC4gKi8KKwkJCXByaXYtPndyZmlsbGVkPTA7CisJCQlwcml2LT53cnNlbnQ9MDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJZGJnKCIlcyAtIHByaXYtPndyc2VudD0lZCIsIF9fRlVOQ1RJT05fXyxwcml2LT53cnNlbnQpOworCQlkYmcoIiVzIC0gcHJpdi0+d3JmaWxsZWQ9JWQiLCBfX0ZVTkNUSU9OX18scHJpdi0+d3JmaWxsZWQpOworCisJCWlmKCBwcml2LT53cnNlbnQ+PXByaXYtPndyZmlsbGVkICkgeworCQkJZGJnKCIlcyAtIGJ1ZmZlciBjbGVhbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJCW1lbXNldCggcHJpdi0+d3JidWYsIDAsIHNpemVvZihwcml2LT53cmJ1ZikgKTsKKwkJCXByaXYtPndyZmlsbGVkPTA7CisJCQlwcml2LT53cnNlbnQ9MDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAoY291bnQpOworfSAKKworc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGVfcm9vbSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisJcmV0dXJuIENZQkVSSkFDS19MT0NBTF9CVUZfU0laRTsKK30KKworc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfaW50X2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiB0aGUgdXJiIG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQuICovCisJaWYgKHVyYi0+c3RhdHVzKQorCQlyZXR1cm47CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCS8qIFJlYWN0IG9ubHkgdG8gaW50ZXJydXB0cyBzaWduYWxpbmcgYSBidWxrX2luIHRyYW5zZmVyICovCisJaWYoICh1cmItPmFjdHVhbF9sZW5ndGg9PTQpICYmIChkYXRhWzBdPT0weDAxKSApIHsKKwkJc2hvcnQgb2xkX3JkdG9kbzsKKwkJaW50IHJlc3VsdDsKKworCQkvKiBUaGlzIGlzIGEgYW5ub3VuY2VtZW50IG9mIGNvbWluZyBidWxrX2lucy4gKi8KKwkJdW5zaWduZWQgc2hvcnQgc2l6ZSA9ICgodW5zaWduZWQgc2hvcnQpZGF0YVszXTw8OCkrZGF0YVsyXSszOworCisJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwkJb2xkX3JkdG9kbyA9IHByaXYtPnJkdG9kbzsKKworCQlpZiggKG9sZF9yZHRvZG8rc2l6ZSk8KG9sZF9yZHRvZG8pICkgeworCQkJZGJnKCAiVG8gbWFueSBidWxrX2luIHVyYnMgdG8gZG8uIiApOworCQkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCQkJZ290byByZXN1Ym1pdDsKKwkJfQorCisJCS8qICIrPSIgaXMgcHJvYmFibHkgbW9yZSBmYXVsdCB0b2xsZXJhbnQgdGhhbiAiPSIgKi8KKwkJcHJpdi0+cmR0b2RvICs9IHNpemU7CisKKwkJZGJnKCIlcyAtIHJkdG9kbzogJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPnJkdG9kbyk7CisKKwkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCisJCWlmKCAhb2xkX3JkdG9kbyApIHsKKwkJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmKCByZXN1bHQgKQorCQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIHVyYikiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCityZXN1Ym1pdDoKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXNob3J0IHRvZG87CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBpZ25vcmluZyBzaW5jZSBkZXZpY2Ugbm90IG9wZW5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkgIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBSZWR1Y2UgdXJicyB0byBkbyBieSBvbmUuICovCisJcHJpdi0+cmR0b2RvLT11cmItPmFjdHVhbF9sZW5ndGg7CisJLyogSnVzdCB0byBiZSBzdXJlICovCisJaWYgKCBwcml2LT5yZHRvZG88MCApIHByaXYtPnJkdG9kbyA9IDA7CisJdG9kbyA9IHByaXYtPnJkdG9kbzsKKworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCWRiZygiJXMgLSByZHRvZG86ICVkIiwgX19GVU5DVElPTl9fLCB0b2RvKTsKKworCS8qIENvbnRpbnVlIHRvIHJlYWQgaWYgd2UgaGF2ZSBzdGlsbCB1cmJzIHRvIGRvLiAqLworCWlmKCB0b2RvIC8qIHx8ICh1cmItPmFjdHVhbF9sZW5ndGg9PXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSovICkgeworCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fRlVOQ1RJT05fXyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgbW9yZSBkYXRhIHRvIHNlbmQgKi8KKwlpZiggcHJpdi0+d3JmaWxsZWQgKSB7CisJCWludCBsZW5ndGgsIGJsa3NpemUsIHJlc3VsdDsKKworCQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWRiZygiJXMgLSB0cmFuc21pdHRpbmcgZGF0YSAoZnJhbWUgbikiLCBfX0ZVTkNUSU9OX18pOworCisJCWxlbmd0aCA9ICgocHJpdi0+d3JmaWxsZWQgLSBwcml2LT53cnNlbnQpID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPworCQkJcG9ydC0+YnVsa19vdXRfc2l6ZSA6IChwcml2LT53cmZpbGxlZCAtIHByaXYtPndyc2VudCk7CisKKwkJbWVtY3B5IChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgcHJpdi0+d3JidWYgKyBwcml2LT53cnNlbnQsCisJCQlsZW5ndGggKTsKKwkJcHJpdi0+d3JzZW50Kz1sZW5ndGg7CisKKwkJLyogc2V0IHVwIG91ciB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLAorCQkJICAgICAgKChwb3J0LT5zZXJpYWwtPnR5cGUtPndyaXRlX2J1bGtfY2FsbGJhY2spID8gCisJCQkgICAgICAgcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDogCisJCQkgICAgICAgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2spLCAKKwkJCSAgICAgIHBvcnQpOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQkvKiBUaHJvdyBhd2F5IGRhdGEuIE5vIGJldHRlciBpZGVhIHdoYXQgdG8gZG8gd2l0aCBpdC4gKi8KKwkJCXByaXYtPndyZmlsbGVkPTA7CisJCQlwcml2LT53cnNlbnQ9MDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWRiZygiJXMgLSBwcml2LT53cnNlbnQ9JWQiLCBfX0ZVTkNUSU9OX18scHJpdi0+d3JzZW50KTsKKwkJZGJnKCIlcyAtIHByaXYtPndyZmlsbGVkPSVkIiwgX19GVU5DVElPTl9fLHByaXYtPndyZmlsbGVkKTsKKworCQlibGtzaXplID0gKChpbnQpcHJpdi0+d3JidWZbMl08PDgpK3ByaXYtPndyYnVmWzFdKzM7CisKKwkJaWYoIChwcml2LT53cnNlbnQ+PXByaXYtPndyZmlsbGVkKSB8fCAocHJpdi0+d3JzZW50Pj1ibGtzaXplKSApIHsKKwkJCWRiZygiJXMgLSBidWZmZXIgY2xlYW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCQltZW1zZXQoIHByaXYtPndyYnVmLCAwLCBzaXplb2YocHJpdi0+d3JidWYpICk7CisJCQlwcml2LT53cmZpbGxlZD0wOworCQkJcHJpdi0+d3JzZW50PTA7CisJCX0KKwl9CisKK2V4aXQ6CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjeWJlcmphY2tfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCAgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjeWJlcmphY2tfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmY3liZXJqYWNrX2RyaXZlcik7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOworCWluZm8oRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3liZXJqYWNrX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3liZXJqYWNrX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZjeWJlcmphY2tfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjeWJlcmphY2tfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoY3liZXJqYWNrX2luaXQpOworbW9kdWxlX2V4aXQoY3liZXJqYWNrX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOGY0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC0wLDAgKzEsMTUzOCBAQAorLyoKKyAqIFVTQiBDeXByZXNzIE04IGRyaXZlcgorICoKKyAqIAlDb3B5cmlnaHQgKEMpIDIwMDQKKyAqIAkgICAgTG9ubmllIE1lbmRleiAoZGlnbm9tZUBnbWFpbC5jb20pIAorICoJQ29weXJpZ2h0IChDKSAyMDAzLDIwMDQKKyAqCSAgICBOZWlsIFdoZWxjaGVsIChrb3lhbWFAZmlyc3RsaWdodC5uZXQpCisgKgorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogU2VlIGh0dHA6Ly9nZW9jaXRpZXMuY29tL2kweG94MGkgZm9yIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGFuZCB0aGUKKyAqIGVhcnRobWF0ZSB1c2IgZGV2aWNlLgorICoKKyAqCisgKiAgTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+CisgKiAgMTItMTUtMjAwNAorICoJSW5jb3Jwb3JhdGVkIHdyaXRlIGJ1ZmZlcmluZyBmcm9tIHBsMjMwMyBkcml2ZXIuICBGaXhlZCBidWcgd2l0aCBsaW5lCisgKgloYW5kbGluZyBzbyBib3RoIGxpbmVzIGFyZSByYWlzZWQgaW4gY3lwcmVzc19vcGVuLiAod2FzIGRyb3BwaW5nIHJ0cykKKyAqICAgICAgVmFyaW91cyBjb2RlIGNsZWFudXBzIG1hZGUgYXMgd2VsbCBhbG9uZyB3aXRoIG90aGVyIG1pc2MgYnVnIGZpeGVzLgorICoKKyAqICBMb25uaWUgTWVuZGV6IDxkaWdub21lQGdtYWlsLmNvbT4KKyAqICAwNC0xMC0yMDA0CisgKglEcml2ZXIgbW9kaWZpZWQgdG8gc3VwcG9ydCBkeW5hbWljIGxpbmUgc2V0dGluZ3MuICBWYXJpb3VzIGltcHJvdm1lbnRzCisgKiAgICAgIGFuZCBmZWF0dXJlcy4KKyAqCisgKiAgTmVpbCBXaGVsY2hlbAorICogIDEwLTIwMDMKKyAqCURyaXZlciBmaXJzdCByZWxlYXNlZC4KKyAqCisgKgorICogTG9uZyBUZXJtIFRPRE86CisgKglJbXByb3ZlIHRyYW5zZmVyIHNwZWVkcyAtIGJvdGggcmVhZC93cml0ZSBhcmUgc29tZXdoYXQgc2xvdworICogICBhdCB0aGlzIHBvaW50LgorICogICAgICBJbXByb3ZlIGRlYnVnZ2luZy4gIFNob3cgbW9kZW0gbGluZSBzdGF0dXMgd2l0aCBkZWJ1ZyBvdXRwdXQgYW5kCisgKiAgIGltcGxlbWVudCBmaWx0ZXJpbmcgZm9yIGNlcnRhaW4gZGF0YSBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIuCisgKi8KKworLyogVGhhbmtzIHRvIE5laWwgV2hlbGNoZWwgZm9yIHdyaXRpbmcgdGhlIGZpcnN0IGN5cHJlc3MgbTggaW1wbGVtZW50YXRpb24gZm9yIGxpbnV4LiAqLworLyogVGhhbmtzIHRvIGN5cHJlc3MgZm9yIHByb3ZpZGluZyByZWZlcmVuY2VzIGZvciB0aGUgaGlkIHJlcG9ydHMuICovCisvKiBUaGFua3MgdG8gSmlhbmcgWmhhbmcgZm9yIHByb3ZpZGluZyBsaW5rcyBhbmQgZm9yIGdlbmVyYWwgaGVscC4gKi8KKy8qIENvZGUgb3JpZ2luYXRlcyBhbmQgd2FzIGJ1aWx0IHVwIGZyb20gZnRkaV9zaW8sIGJlbGtpbiwgcGwyMzAzIGFuZCBvdGhlcnMuICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImN5cHJlc3NfbTguaCIKKworCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcKKwlzdGF0aWMgaW50IGRlYnVnID0gMTsKKyNlbHNlCisJc3RhdGljIGludCBkZWJ1ZzsKKyNlbmRpZgorc3RhdGljIGludCBzdGF0czsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMDgiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkxvbm5pZSBNZW5kZXogPGRpZ25vbWVAZ21haWwuY29tPiwgTmVpbCBXaGVsY2hlbCA8a295YW1hQGZpcnN0bGlnaHQubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkN5cHJlc3MgVVNCIHRvIFNlcmlhbCBEcml2ZXIiCisKKy8qIHdyaXRlIGJ1ZmZlciBzaXplIGRlZmluZXMgKi8KKyNkZWZpbmUgQ1lQUkVTU19CVUZfU0laRQkxMDI0CisjZGVmaW5lIENZUFJFU1NfQ0xPU0lOR19XQUlUCSgzMCpIWikKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2VhcnRobWF0ZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0RFTE9STUUsIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY3lwaGlkY29tcnMyMzIgW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9DWVBSRVNTLCBQUk9EVUNUX0lEX0NZUEhJRENPTSkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREVMT1JNRSwgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0IpIH0sCisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9DWVBSRVNTLCBQUk9EVUNUX0lEX0NZUEhJRENPTSkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeXByZXNzX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiY3lwcmVzcyIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKK3N0cnVjdCBjeXByZXNzX3ByaXZhdGUgeworCXNwaW5sb2NrX3QgbG9jazsJCSAgIC8qIHByaXZhdGUgbG9jayAqLworCWludCBjaGlwdHlwZTsJCQkgICAvKiBpZGVudGlmaWVyIG9mIGRldmljZSwgZm9yIHF1aXJrcy9ldGMgKi8KKwlpbnQgYnl0ZXNfaW47CQkJICAgLyogdXNlZCBmb3Igc3RhdGlzdGljcyAqLworCWludCBieXRlc19vdXQ7CQkJICAgLyogdXNlZCBmb3Igc3RhdGlzdGljcyAqLworCWludCBjbWRfY291bnQ7CQkJICAgLyogdXNlZCBmb3Igc3RhdGlzdGljcyAqLworCWludCBjbWRfY3RybDsJCQkgICAvKiBhbHdheXMgc2V0IHRoaXMgdG8gMSBiZWZvcmUgaXNzdWluZyBhIGNvbW1hbmQgKi8KKwlzdHJ1Y3QgY3lwcmVzc19idWYgKmJ1ZjsJICAgLyogd3JpdGUgYnVmZmVyICovCisJaW50IHdyaXRlX3VyYl9pbl91c2U7CQkgICAvKiB3cml0ZSB1cmIgaW4gdXNlIGluZGljYXRvciAqLworCWludCB0ZXJtaW9zX2luaXRpYWxpemVkOworCV9fdTggbGluZV9jb250cm9sOwkgICAJICAgLyogaG9sZHMgZHRyIC8gcnRzIHZhbHVlICovCisJX191OCBjdXJyZW50X3N0YXR1czsJICAgCSAgIC8qIHJlY2VpdmVkIGZyb20gbGFzdCByZWFkIC0gaW5mbyBvbiBkc3IsY3RzLGNkLHJpLGV0YyAqLworCV9fdTggY3VycmVudF9jb25maWc7CSAgIAkgICAvKiBzdG9yZXMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBieXRlICovCisJX191OCByeF9mbGFnczsJCQkgICAvKiB0aHJvdHRsaW5nIC0gdXNlZCBmcm9tIHdoaXRlaGVhdC9mdGRpX3NpbyAqLworCWludCBiYXVkX3JhdGU7CQkJICAgLyogc3RvcmVzIGN1cnJlbnQgYmF1ZCByYXRlIGluIGludGVnZXIgZm9ybSAqLworCWludCBjYnJfbWFzazsJCQkgICAvKiBzdG9yZXMgY3VycmVudCBiYXVkIHJhdGUgaW4gbWFza2VkIGZvcm0gKi8KKwlpbnQgaXN0aHJvdHRsZWQ7CQkgICAvKiBpZiB0aHJvdHRsZWQsIGRpc2NhcmQgcmVhZHMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgIC8qIHVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKwljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsJICAgLyogdXNlZCBmb3IgVElPQ01JV0FJVCAqLworCS8qIHdlIHBhc3MgYSBwb2ludGVyIHRvIHRoaXMgYXMgdGhlIGFyZ3VlbWVudCBzZW50IHRvIGN5cHJlc3Nfc2V0X3Rlcm1pb3Mgb2xkX3Rlcm1pb3MgKi8KKwlzdHJ1Y3QgdGVybWlvcyB0bXBfdGVybWlvczsgCSAgIC8qIHN0b3JlcyB0aGUgb2xkIHRlcm1pb3Mgc2V0dGluZ3MgKi8KKwljaGFyIGNhbGxlZGZyb21vcGVuOwkJICAgLyogdXNlZCB3aGVuIGlzc3VpbmcgbGluZXMgb24gb3BlbiAtIGZpeGVzIHJ0cyBkcm9wIGJ1ZyAqLworfTsKKworLyogd3JpdGUgYnVmZmVyIHN0cnVjdHVyZSAqLworc3RydWN0IGN5cHJlc3NfYnVmIHsKKwl1bnNpZ25lZCBpbnQJYnVmX3NpemU7CisJY2hhcgkJKmJ1Zl9idWY7CisJY2hhcgkJKmJ1Zl9nZXQ7CisJY2hhcgkJKmJ1Zl9wdXQ7Cit9OworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgQ3lwcmVzcyBVU0IgdG8gc2VyaWFsIGRldmljZSAqLworc3RhdGljIGludCAgY3lwcmVzc19lYXJ0aG1hdGVfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBjeXByZXNzX2hpZGNvbV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3Nfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGN5cHJlc3NfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBjeXByZXNzX3dyaXRlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIHZvaWQgY3lwcmVzc19zZW5kCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBjeXByZXNzX3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfaW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2V0X3Rlcm1pb3MJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBjeXByZXNzX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgY3lwcmVzc190aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAgY3lwcmVzc19jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgY3lwcmVzc190aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgY3lwcmVzc191bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfd3JpdGVfaW50X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKy8qIGJhdWQgaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIGludAkgbWFza190b19yYXRlCQkodW5zaWduZWQgbWFzayk7CitzdGF0aWMgdW5zaWduZWQgIHJhdGVfdG9fbWFzawkJKGludCByYXRlKTsKKy8qIHdyaXRlIGJ1ZmZlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgY3lwcmVzc19idWYgKmN5cHJlc3NfYnVmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKTsKK3N0YXRpYyB2b2lkIAkJICBjeXByZXNzX2J1Zl9mcmVlKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOworc3RhdGljIHZvaWQJCSAgY3lwcmVzc19idWZfY2xlYXIoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CitzdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJICBjeXByZXNzX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJICBjeXByZXNzX2J1Zl9wdXQoc3RydWN0IGN5cHJlc3NfYnVmICpjYiwgY29uc3QgY2hhciAqYnVmLAorCQkJCQkgIHVuc2lnbmVkIGludCBjb3VudCk7CitzdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfZ2V0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNoYXIgKmJ1ZiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgY291bnQpOworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjeXByZXNzX2VhcnRobWF0ZV9kZXZpY2UgPSB7CisJLm93bmVyID0JCQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJCSJEZUxvcm1lIEVhcnRobWF0ZSBVU0IiLAorCS5zaG9ydF9uYW1lID0JCQkiZWFydGhtYXRlIiwKKwkuaWRfdGFibGUgPQkJCWlkX3RhYmxlX2VhcnRobWF0ZSwKKwkubnVtX2ludGVycnVwdF9pbiA9IAkJMSwKKwkubnVtX2ludGVycnVwdF9vdXQgPQkJMSwKKwkubnVtX2J1bGtfaW4gPQkJCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCQkxLAorCS5hdHRhY2ggPQkJCWN5cHJlc3NfZWFydGhtYXRlX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCQljeXByZXNzX3NodXRkb3duLAorCS5vcGVuID0JCQkJY3lwcmVzc19vcGVuLAorCS5jbG9zZSA9CQkJY3lwcmVzc19jbG9zZSwKKwkud3JpdGUgPQkJCWN5cHJlc3Nfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJCWN5cHJlc3Nfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJCWN5cHJlc3NfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCQljeXByZXNzX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCA9CQkJY3lwcmVzc190aW9jbWdldCwKKwkudGlvY21zZXQgPQkJCWN5cHJlc3NfdGlvY21zZXQsCisJLmNoYXJzX2luX2J1ZmZlciA9CQljeXByZXNzX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPQkJIAljeXByZXNzX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCQljeXByZXNzX3VudGhyb3R0bGUsCisJLnJlYWRfaW50X2NhbGxiYWNrID0JCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssCisJLndyaXRlX2ludF9jYWxsYmFjayA9CQljeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjeXByZXNzX2hpZGNvbV9kZXZpY2UgPSB7CisJLm93bmVyID0JCQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJCSJISUQtPkNPTSBSUzIzMiBBZGFwdGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkJImN5cGhpZGNvbSIsCisJLmlkX3RhYmxlID0JCQlpZF90YWJsZV9jeXBoaWRjb21yczIzMiwKKwkubnVtX2ludGVycnVwdF9pbiA9CQkxLAorCS5udW1faW50ZXJydXB0X291dCA9CQkxLAorCS5udW1fYnVsa19pbiA9CQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJCTEsCisJLmF0dGFjaCA9CQkJY3lwcmVzc19oaWRjb21fc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJCWN5cHJlc3Nfc2h1dGRvd24sCisJLm9wZW4gPQkJCQljeXByZXNzX29wZW4sCisJLmNsb3NlID0JCQljeXByZXNzX2Nsb3NlLAorCS53cml0ZSA9CQkJY3lwcmVzc193cml0ZSwKKwkud3JpdGVfcm9vbSA9CQkJY3lwcmVzc193cml0ZV9yb29tLAorCS5pb2N0bCA9CQkJY3lwcmVzc19pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJCWN5cHJlc3Nfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ID0JCQljeXByZXNzX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQkJY3lwcmVzc190aW9jbXNldCwKKwkuY2hhcnNfaW5fYnVmZmVyID0JCWN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQkJY3lwcmVzc190aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQkJY3lwcmVzc191bnRocm90dGxlLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLAorCS53cml0ZV9pbnRfY2FsbGJhY2sgPQkJY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2ssCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ3lwcmVzcyBzZXJpYWwgaGVscGVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIFRoaXMgZnVuY3Rpb24gY2FuIGVpdGhlciBzZXQgb3IgcmV0cmVpdmUgdGhlIGN1cnJlbnQgc2VyaWFsIGxpbmUgc2V0dGluZ3MgKi8KK3N0YXRpYyBpbnQgY3lwcmVzc19zZXJpYWxfY29udHJvbCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdW5zaWduZWQgYmF1ZF9tYXNrLCBpbnQgZGF0YV9iaXRzLCBpbnQgc3RvcF9iaXRzLAorCQkJCSAgIGludCBwYXJpdHlfZW5hYmxlLCBpbnQgcGFyaXR5X3R5cGUsIGludCByZXNldCwgaW50IGN5cHJlc3NfcmVxdWVzdF90eXBlKQoreworCWludCBpLCBuX2JhdWRfcmF0ZSA9IDAsIHJldHZhbCA9IDA7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKKwlfX3U4IGZlYXR1cmVfYnVmZmVyWzVdOworCV9fdTggY29uZmlnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwkKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJc3dpdGNoKGN5cHJlc3NfcmVxdWVzdF90eXBlKSB7CisJCWNhc2UgQ1lQUkVTU19TRVRfQ09ORklHOgorCisJCQkvKgorCQkJICogVGhlIGdlbmVyYWwgcHVycG9zZSBmaXJtd2FyZSBmb3IgdGhlIEN5cHJlc3MgTTggYWxsb3dzIGZvciBhIG1heGltdW0gc3BlZWQKKyAJCQkgKiBvZiA1NzYwMGJwcyAoSSBoYXZlIG5vIGlkZWEgd2hldGhlciBEZUxvcm1lIGNob3NlIHRvIHVzZSB0aGUgZ2VuZXJhbCBwdXJwb3NlCisJCQkgKiBmaXJtd2FyZSBvciBub3QpLCBpZiB5b3UgbmVlZCB0byBtb2RpZnkgdGhpcyBzcGVlZCBzZXR0aW5nIGZvciB5b3VyIG93bgorCQkJICogcHJvamVjdCBwbGVhc2UgYWRkIHlvdXIgb3duIGNoaXB0eXBlIGFuZCBtb2RpZnkgdGhlIGNvZGUgbGlrZXdpc2UuICBUaGUKKwkJCSAqIEN5cHJlc3MgSElELT5DT00gZGV2aWNlIHdpbGwgd29yayBzdWNjZXNzZnVsbHkgdXAgdG8gMTE1MjAwYnBzLgorCQkJICovCisJCQlpZiAoYmF1ZF9tYXNrICE9IHByaXYtPmNicl9tYXNrKSB7CisJCQkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBjaGFuZ2luZyIsIF9fRlVOQ1RJT05fXyk7CisJCQkJaWYgKCBwcml2LT5jaGlwdHlwZSA9PSBDVF9FQVJUSE1BVEUgKSB7CisJCQkJCS8qIDMwMCBhbmQgNjAwIGJhdWQgcmF0ZXMgYXJlIHN1cHBvcnRlZCB1bmRlciB0aGUgZ2VuZXJpYyBmaXJtd2FyZSwKKwkJCQkJICogYnV0IGFyZSBub3QgdXNlZCB3aXRoIE5NRUEgYW5kIFNpUkYgcHJvdG9jb2xzICovCisJCQkJCQorCQkJCQlpZiAoIChiYXVkX21hc2sgPT0gQjMwMCkgfHwgKGJhdWRfbWFzayA9PSBCNjAwKSApIHsKKwkJCQkJCWVycigiJXMgLSBmYWlsZWQgc2V0dGluZyBiYXVkIHJhdGUsIHVuc3VwcG9ydGVkIHNwZWVkIChkZWZhdWx0IHRvIDQ4MDApIiwKKwkJCQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJCQkJbl9iYXVkX3JhdGUgPSA0ODAwOworCQkJCQl9IGVsc2UgaWYgKCAobl9iYXVkX3JhdGUgPSBtYXNrX3RvX3JhdGUoYmF1ZF9tYXNrKSkgPT0gLTEpIHsKKwkJCQkJCWVycigiJXMgLSBmYWlsZWQgc2V0dGluZyBiYXVkIHJhdGUsIHVuc3VwcG9ydGVkIHNwZWVkIChkZWZhdWx0IHRvIDQ4MDApIiwKKwkJCQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJCQkJbl9iYXVkX3JhdGUgPSA0ODAwOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9DWVBISURDT00pIHsKKwkJCQkJaWYgKCAobl9iYXVkX3JhdGUgPSBtYXNrX3RvX3JhdGUoYmF1ZF9tYXNrKSkgPT0gLTEpIHsKKwkJCQkJCWVycigiJXMgLSBmYWlsZWQgc2V0dGluZyBiYXVkIHJhdGUsIHVuc3VwcG9ydGVkIHNwZWVkIChkZWZhdWx0IHRvIDQ4MDApIiwKKwkJCQkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJCQkJbl9iYXVkX3JhdGUgPSA0ODAwOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9HRU5FUklDKSB7CisJCQkJCWlmICggKG5fYmF1ZF9yYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7CisJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCAoZGVmYXVsdCB0byA0ODAwKSIsCisJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWluZm8oIiVzIC0gcGxlYXNlIGRlZmluZSB5b3VyIGNoaXB0eXBlLCB1c2luZyA0ODAwYnBzIGRlZmF1bHQiLCBfX0ZVTkNUSU9OX18pOworCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJfQorCQkJfSBlbHNlIHsgIC8qIGJhdWQgcmF0ZSBub3QgY2hhbmdpbmcsIGtlZXAgdGhlIG9sZCAqLworCQkJCW5fYmF1ZF9yYXRlID0gcHJpdi0+YmF1ZF9yYXRlOworCQkJfQorCQkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBiZWluZyBzZW50IGFzICVkIiwgX19GVU5DVElPTl9fLCBuX2JhdWRfcmF0ZSk7CisKKwkJCQorCQkJLyoKKwkJCSAqIFRoaXMgYWxnb3JpdGhtIGFjY3JlZGl0ZWQgdG8gSmlhbmcgSmF5IFpoYW5nLi4uIHRoYW5rcyBmb3IgYWxsIHRoZSBoZWxwIQorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCQkJZmVhdHVyZV9idWZmZXJbaV0gPSAoIG5fYmF1ZF9yYXRlID4+IChpKjgpICYgMHhGRiApOworCQkJfQorCisJCQljb25maWcgPSAwOwkgICAgICAgICAgICAgICAgIC8vIHJlc2V0IGNvbmZpZyBieXRlCisJCQljb25maWcgfD0gZGF0YV9iaXRzOwkgICAgICAgICAvLyBhc3NpZ24gZGF0YSBiaXRzIGluIDIgYml0IHNwYWNlICggbWF4IDMgKQorCQkJLyogMSBiaXQgZ2FwICovCisJCQljb25maWcgfD0gKHN0b3BfYml0cyA8PCAzKTsgICAgICAvLyBhc3NpZ24gc3RvcCBiaXRzIGluIDEgYml0IHNwYWNlCisJCQljb25maWcgfD0gKHBhcml0eV9lbmFibGUgPDwgNCk7ICAvLyBhc3NpZ24gcGFyaXR5IGZsYWcgaW4gMSBiaXQgc3BhY2UKKwkJCWNvbmZpZyB8PSAocGFyaXR5X3R5cGUgPDwgNSk7IAkgLy8gYXNzaWduIHBhcml0eSB0eXBlIGluIDEgYml0IHNwYWNlCisJCQkvKiAxIGJpdCBnYXAgKi8KKwkJCWNvbmZpZyB8PSAocmVzZXQgPDwgNyk7CQkgLy8gYXNzaWduIHJlc2V0IGF0IGVuZCBvZiBieXRlLCAxIGJpdCBzcGFjZQorCisJCQlmZWF0dXJlX2J1ZmZlcls0XSA9IGNvbmZpZzsKKwkJCQkKKwkJCWRiZygiJXMgLSBkZXZpY2UgaXMgYmVpbmcgc2VudCB0aGlzIGZlYXR1cmUgcmVwb3J0OiIsIF9fRlVOQ1RJT05fXyk7CisJCQlkYmcoIiVzIC0gJTAyWCAtICUwMlggLSAlMDJYIC0gJTAyWCAtICUwMlgiLCBfX0ZVTkNUSU9OX18sIGZlYXR1cmVfYnVmZmVyWzBdLCBmZWF0dXJlX2J1ZmZlclsxXSwKKwkJICAgICAgICAgICAgZmVhdHVyZV9idWZmZXJbMl0sIGZlYXR1cmVfYnVmZmVyWzNdLCBmZWF0dXJlX2J1ZmZlcls0XSk7CisJCQkKKwkJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAocG9ydC0+c2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJCSAgCSAgSElEX1JFUV9TRVRfUkVQT1JULCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUywKKwkJCQkJICAJICAweDAzMDAsIDAsIGZlYXR1cmVfYnVmZmVyLCA1LCA1MDApOworCisJCQlpZiAocmV0dmFsICE9IDUpCisJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZW5kaW5nIHNlcmlhbCBsaW5lIHNldHRpbmdzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQllbHNlIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJCXByaXYtPmJhdWRfcmF0ZSA9IG5fYmF1ZF9yYXRlOworCQkJCXByaXYtPmNicl9tYXNrID0gYmF1ZF9tYXNrOworCQkJCXByaXYtPmN1cnJlbnRfY29uZmlnID0gY29uZmlnOworCQkJCSsrcHJpdi0+Y21kX2NvdW50OworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCX0KKwkJYnJlYWs7CisJCWNhc2UgQ1lQUkVTU19HRVRfQ09ORklHOgorCQkJZGJnKCIlcyAtIHJldHJlaXZpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MiLCBfX0ZVTkNUSU9OX18pOworCQkJLyogcmVzZXQgdmFsdWVzIGluIGZlYXR1cmUgYnVmZmVyICovCisJCQltZW1zZXQoZmVhdHVyZV9idWZmZXIsIDAsIDUpOworCisJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHBvcnQtPnNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCQkJICBISURfUkVRX0dFVF9SRVBPUlQsIFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCisJCQkJCQkgIDB4MDMwMCwgMCwgZmVhdHVyZV9idWZmZXIsIDUsIDUwMCk7CisJCQlpZiAocmV0dmFsICE9IDUpIHsKKwkJCQllcnIoIiVzIC0gZmFpbGVkIHRvIHJldHJlaXZlIHNlcmlhbCBsaW5lIHNldHRpbmdzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCQkvKiBzdG9yZSB0aGUgY29uZmlnIGluIG9uZSBieXRlLCBhbmQgbGF0ZXIgdXNlIGJpdCBtYXNrcyB0byBjaGVjayB2YWx1ZXMgKi8KKwkJCQlwcml2LT5jdXJyZW50X2NvbmZpZyA9IGZlYXR1cmVfYnVmZmVyWzRdOworCQkJCS8qIHJldmVyc2UgdGhlIHByb2Nlc3MgYWJvdmUgdG8gZ2V0IHRoZSBiYXVkX21hc2sgdmFsdWUgKi8KKwkJCQluX2JhdWRfcmF0ZSA9IDA7IC8vIHJlc2V0IGJpdHMKKwkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCQkJCW5fYmF1ZF9yYXRlIHw9ICggZmVhdHVyZV9idWZmZXJbaV0gPDwgKGkqOCkgKTsKKwkJCQl9CisJCQkJCisJCQkJcHJpdi0+YmF1ZF9yYXRlID0gbl9iYXVkX3JhdGU7CisJCQkJaWYgKCAocHJpdi0+Y2JyX21hc2sgPSByYXRlX3RvX21hc2sobl9iYXVkX3JhdGUpKSA9PSAweDQwKQorCQkJCQlkYmcoIiVzIC0gZmFpbGVkIHNldHRpbmcgdGhlIGJhdWQgbWFzayAobm90IGRlZmluZWQpIiwgX19GVU5DVElPTl9fKTsKKwkJCQkrK3ByaXYtPmNtZF9jb3VudDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiJXMgLSB1bnN1cHBvcnRlZCBzZXJpYWwgY29udHJvbCBjb21tYW5kIGlzc3VlZCIsIF9fRlVOQ1RJT05fXyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9IC8qIGN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wgKi8KKworCisvKiBnaXZlbiBhIGJhdWQgbWFzaywgaXQgd2lsbCByZXR1cm4gc3BlZWQgb24gc3VjY2VzcyAqLworc3RhdGljIGludCBtYXNrX3RvX3JhdGUgKHVuc2lnbmVkIG1hc2spCit7CisJaW50IHJhdGU7CisKKwlzd2l0Y2ggKG1hc2spIHsKKwkJY2FzZSBCMDogcmF0ZSA9IDA7IGJyZWFrOworCQljYXNlIEIzMDA6IHJhdGUgPSAzMDA7IGJyZWFrOworCQljYXNlIEI2MDA6IHJhdGUgPSA2MDA7IGJyZWFrOworCQljYXNlIEIxMjAwOiByYXRlID0gMTIwMDsgYnJlYWs7CisJCWNhc2UgQjI0MDA6IHJhdGUgPSAyNDAwOyBicmVhazsKKwkJY2FzZSBCNDgwMDogcmF0ZSA9IDQ4MDA7IGJyZWFrOworCQljYXNlIEI5NjAwOiByYXRlID0gOTYwMDsgYnJlYWs7CisJCWNhc2UgQjE5MjAwOiByYXRlID0gMTkyMDA7IGJyZWFrOworCQljYXNlIEIzODQwMDogcmF0ZSA9IDM4NDAwOyBicmVhazsKKwkJY2FzZSBCNTc2MDA6IHJhdGUgPSA1NzYwMDsgYnJlYWs7CisJCWNhc2UgQjExNTIwMDogcmF0ZSA9IDExNTIwMDsgYnJlYWs7CisJCWRlZmF1bHQ6IHJhdGUgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmF0ZTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgcmF0ZV90b19tYXNrIChpbnQgcmF0ZSkKK3sKKwl1bnNpZ25lZCBtYXNrOworCisJc3dpdGNoIChyYXRlKSB7CisJCWNhc2UgMDogbWFzayA9IEIwOyBicmVhazsKKwkJY2FzZSAzMDA6IG1hc2sgPSBCMzAwOyBicmVhazsKKwkJY2FzZSA2MDA6IG1hc2sgPSBCNjAwOyBicmVhazsKKwkJY2FzZSAxMjAwOiBtYXNrID0gQjEyMDA7IGJyZWFrOworCQljYXNlIDI0MDA6IG1hc2sgPSBCMjQwMDsgYnJlYWs7CisJCWNhc2UgNDgwMDogbWFzayA9IEI0ODAwOyBicmVhazsKKwkJY2FzZSA5NjAwOiBtYXNrID0gQjk2MDA7IGJyZWFrOworCQljYXNlIDE5MjAwOiBtYXNrID0gQjE5MjAwOyBicmVhazsKKwkJY2FzZSAzODQwMDogbWFzayA9IEIzODQwMDsgYnJlYWs7CisJCWNhc2UgNTc2MDA6IG1hc2sgPSBCNTc2MDA7IGJyZWFrOworCQljYXNlIDExNTIwMDogbWFzayA9IEIxMTUyMDA7IGJyZWFrOworCQlkZWZhdWx0OiBtYXNrID0gMHg0MDsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ3lwcmVzcyBzZXJpYWwgZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3N0YXRpYyBpbnQgZ2VuZXJpY19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgc2VyaWFsLT5wb3J0WzBdLT5udW1iZXIpOworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY3lwcmVzc19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChwcml2LCAweDAwLCBzaXplb2YgKHN0cnVjdCBjeXByZXNzX3ByaXZhdGUpKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+YnVmID0gY3lwcmVzc19idWZfYWxsb2MoQ1lQUkVTU19CVUZfU0laRSk7CisJaWYgKHByaXYtPmJ1ZiA9PSBOVUxMKSB7CisJCWtmcmVlKHByaXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQorCXVzYl9yZXNldF9jb25maWd1cmF0aW9uIChzZXJpYWwtPmRldik7CisJCisJcHJpdi0+Y21kX2N0cmwgPSAwOworCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDA7CisJcHJpdi0+Y2FsbGVkZnJvbW9wZW4gPSAwOworCXByaXYtPnJ4X2ZsYWdzID0gMDsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKKwkKKwlyZXR1cm4gKDApOwkKK30JCisKKworc3RhdGljIGludCBjeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKSkgeworCQlkYmcoIiVzIC0gRmFpbGVkIHNldHRpbmcgdXAgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgc2VyaWFsLT5wb3J0WzBdLT5udW1iZXIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+Y2hpcHR5cGUgPSBDVF9FQVJUSE1BVEU7CisJCisJcmV0dXJuICgwKTsJCit9IC8qIGN5cHJlc3NfZWFydGhtYXRlX3N0YXJ0dXAgKi8KKworCitzdGF0aWMgaW50IGN5cHJlc3NfaGlkY29tX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpKSB7CisJCWRiZygiJXMgLSBGYWlsZWQgc2V0dGluZyB1cCBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnBvcnRbMF0tPm51bWJlcik7CisJCXJldHVybiAxOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwdHlwZSA9IENUX0NZUEhJRENPTTsKKwkKKwlyZXR1cm4gKDApOwkKK30gLyogY3lwcmVzc19oaWRjb21fc3RhcnR1cCAqLworCisKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKKworCWRiZyAoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgc2VyaWFsLT5wb3J0WzBdLT5udW1iZXIpOworCisJLyogYWxsIG9wZW4gcG9ydHMgYXJlIGNsb3NlZCBhdCB0aGlzIHBvaW50ICovCisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisKKwlpZiAocHJpdikgeworCQljeXByZXNzX2J1Zl9mcmVlKHByaXYtPmJ1Zik7CisJCWtmcmVlKHByaXYpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBOVUxMKTsKKwl9Cit9CisKKworc3RhdGljIGludCBjeXByZXNzX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBjbGVhciBoYWx0cyBiZWZvcmUgb3BlbiAqLworCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCAweDAwKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgMHg4MSk7CisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIDB4MDIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkvKiByZXNldCByZWFkL3dyaXRlIHN0YXRpc3RpY3MgKi8KKwlwcml2LT5ieXRlc19pbiA9IDA7CisJcHJpdi0+Ynl0ZXNfb3V0ID0gMDsKKwlwcml2LT5jbWRfY291bnQgPSAwOworCXByaXYtPnJ4X2ZsYWdzID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBzZXR0aW5nIHRvIHplcm8gY291bGQgY2F1c2UgZGF0YSBsb3NzICovCisJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiByYWlzZSBib3RoIGxpbmVzIGFuZCBzZXQgdGVybWlvcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+bGluZV9jb250cm9sID0gQ09OVFJPTF9EVFIgfCBDT05UUk9MX1JUUzsKKwlwcml2LT5jYWxsZWRmcm9tb3BlbiA9IDE7CisJcHJpdi0+Y21kX2N0cmwgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXN1bHQgPSBjeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOworCisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzZXR0aW5nIHRoZSBjb250cm9sIGxpbmVzIC0gZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9IGVsc2UKKwkJZGJnKCIlcyAtIHN1Y2Nlc3Mgc2V0dGluZyB0aGUgY29udHJvbCBsaW5lcyIsIF9fRlVOQ1RJT05fXyk7CQorCisJY3lwcmVzc19zZXRfdGVybWlvcyhwb3J0LCAmcHJpdi0+dG1wX3Rlcm1pb3MpOworCisJLyogc2V0dXAgdGhlIHBvcnQgYW5kIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJaWYoIXBvcnQtPmludGVycnVwdF9pbl91cmIpeworCQllcnIoIiVzIC0gaW50ZXJydXB0X2luX3VyYiBpcyBlbXB0eSEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4oLTEpOworCX0KKworCXVzYl9maWxsX2ludF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgc2VyaWFsLT5kZXYsCisJCXVzYl9yY3ZpbnRwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLCBwb3J0LCBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5pbnRlcnZhbCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocmVzdWx0KXsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfSAvKiBjeXByZXNzX29wZW4gKi8KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBjX2NmbGFnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGJwczsKKwlsb25nIHRpbWVvdXQ7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXRpbWVvdXQgPSBDWVBSRVNTX0NMT1NJTkdfV0FJVDsKKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisJYWRkX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwocHJpdi0+YnVmKSA9PSAwCisJCXx8IHRpbWVvdXQgPT0gMCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KQorCQl8fCAhdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJLyogY2xlYXIgb3V0IGFueSByZW1haW5pbmcgZGF0YSBpbiB0aGUgYnVmZmVyICovCisJY3lwcmVzc19idWZfY2xlYXIocHJpdi0+YnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCisJLyogd2FpdCBmb3IgY2hhcmFjdGVycyB0byBkcmFpbiBmcm9tIGRldmljZSAqLworCWJwcyA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJaWYgKGJwcyA+IDEyMDApCisJCXRpbWVvdXQgPSBtYXgoKEhaKjI1NjApL2JwcyxIWi8xMCk7CisJZWxzZQorCQl0aW1lb3V0ID0gMipIWjsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisKKwlkYmcoIiVzIC0gc3RvcHBpbmcgdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl1c2Jfa2lsbF91cmIgKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKKworCWlmIChwb3J0LT50dHkpIHsKKwkJY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgeworCQkJLyogZHJvcCBkdHIgYW5kIHJ0cyAqLworCQkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlwcml2LT5saW5lX2NvbnRyb2wgPSAwOworCQkJcHJpdi0+Y21kX2N0cmwgPSAxOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJY3lwcmVzc193cml0ZShwb3J0LCBOVUxMLCAwKTsKKwkJfQorCX0KKworCWlmIChzdGF0cykKKwkJZGV2X2luZm8gKCZwb3J0LT5kZXYsICJTdGF0aXN0aWNzOiAlZCBCeXRlcyBJbiB8ICVkIEJ5dGVzIE91dCB8ICVkIENvbW1hbmRzIElzc3VlZFxuIiwKKwkJICAgICAgICAgIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQsIHByaXYtPmNtZF9jb3VudCk7Cit9IC8qIGN5cHJlc3NfY2xvc2UgKi8KKworCitzdGF0aWMgaW50IGN5cHJlc3Nfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisKKwkvKiBsaW5lIGNvbnRyb2wgY29tbWFuZHMsIHdoaWNoIG5lZWQgdG8gYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHksCisJICAgYXJlIG5vdCBwdXQgaW50byB0aGUgYnVmZmVyIGZvciBvYnZpb3VzIHJlYXNvbnMuCisJICovCisJaWYgKHByaXYtPmNtZF9jdHJsKSB7CisJCWNvdW50ID0gMDsKKwkJZ290byBmaW5pc2g7CisJfQorCQorCWlmICghY291bnQpCisJCXJldHVybiBjb3VudDsKKwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvdW50ID0gY3lwcmVzc19idWZfcHV0KHByaXYtPmJ1ZiwgYnVmLCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCitmaW5pc2g6CisJY3lwcmVzc19zZW5kKHBvcnQpOworCisJcmV0dXJuIGNvdW50OworfSAvKiBjeXByZXNzX3dyaXRlICovCisKKworc3RhdGljIHZvaWQgY3lwcmVzc19zZW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGNvdW50ID0gMCwgcmVzdWx0LCBvZmZzZXQsIGFjdHVhbF9zaXplOworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlkYmcoIiVzIC0gaW50ZXJydXB0IG91dCBzaXplIGlzICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUpOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPndyaXRlX3VyYl9pbl91c2UpIHsKKwkJZGJnKCIlcyAtIGNhbid0IHdyaXRlLCB1cmIgaW4gdXNlIiwgX19GVU5DVElPTl9fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIGNsZWFyIGJ1ZmZlciAqLworCW1lbXNldChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSkgeworCQljYXNlIDMyOgorCQkJLy8gdGhpcyBpcyBmb3IgdGhlIENZN0M2NDAxMy4uLgorCQkJb2Zmc2V0ID0gMjsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyWzBdID0gcHJpdi0+bGluZV9jb250cm9sOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCS8vIHRoaXMgaXMgZm9yIHRoZSBDWTdDNjM3NDMuLi4KKwkJCW9mZnNldCA9IDE7CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlclswXSA9IHByaXYtPmxpbmVfY29udHJvbDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIHdyb25nIHBhY2tldCBzaXplIiwgX19GVU5DVElPTl9fKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+bGluZV9jb250cm9sICYgQ09OVFJPTF9SRVNFVCkKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DT05UUk9MX1JFU0VUOworCisJaWYgKHByaXYtPmNtZF9jdHJsKSB7CisJCXByaXYtPmNtZF9jb3VudCsrOworCQlkYmcoIiVzIC0gbGluZSBjb250cm9sIGNvbW1hbmQgYmVpbmcgaXNzdWVkIiwgX19GVU5DVElPTl9fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlnb3RvIHNlbmQ7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWNvdW50ID0gY3lwcmVzc19idWZfZ2V0KHByaXYtPmJ1ZiwgJnBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyW29mZnNldF0sCisJCQkJcG9ydC0+aW50ZXJydXB0X291dF9zaXplLW9mZnNldCk7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUpIHsKKwkJY2FzZSAzMjoKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyWzFdID0gY291bnQ7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXJbMF0gfD0gY291bnQ7CisJfQorCisJZGJnKCIlcyAtIGNvdW50IGlzICVkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisKK3NlbmQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+Y21kX2N0cmwpCisJCWFjdHVhbF9zaXplID0gMTsKKwllbHNlCisJCWFjdHVhbF9zaXplID0gY291bnQgKyAocG9ydC0+aW50ZXJydXB0X291dF9zaXplID09IDMyID8gMiA6IDEpOworCQorCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUsCisJCQkgICAgICBwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYWN0dWFsX3NpemU7CisJcG9ydC0+aW50ZXJydXB0X291dF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCXJlc3VsdCk7CisJCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPmNtZF9jdHJsKSB7CisJCXByaXYtPmNtZF9jdHJsID0gMDsKKwl9CisJcHJpdi0+Ynl0ZXNfb3V0ICs9IGNvdW50OyAvKiBkbyBub3QgY291bnQgdGhlIGxpbmUgY29udHJvbCBhbmQgc2l6ZSBieXRlcyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfSAvKiBjeXByZXNzX3NlbmQgKi8KKworCisvKiByZXR1cm5zIGhvdyBtdWNoIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgc29mdCBidWZmZXIgKi8KK3N0YXRpYyBpbnQgY3lwcmVzc193cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyb29tID0gY3lwcmVzc19idWZfc3BhY2VfYXZhaWwocHJpdi0+YnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CisKKworc3RhdGljIGludCBjeXByZXNzX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fdTggc3RhdHVzLCBjb250cm9sOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3RhdHVzID0gcHJpdi0+Y3VycmVudF9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmVzdWx0ID0gKChjb250cm9sICYgQ09OVFJPTF9EVFIpICAgICAgICA/IFRJT0NNX0RUUiA6IDApCisJCXwgKChjb250cm9sICYgQ09OVFJPTF9SVFMpICAgICAgID8gVElPQ01fUlRTIDogMCkKKwkJfCAoKHN0YXR1cyAmIFVBUlRfQ1RTKSAgICAgICAgPyBUSU9DTV9DVFMgOiAwKQorCQl8ICgoc3RhdHVzICYgVUFSVF9EU1IpICAgICAgICA/IFRJT0NNX0RTUiA6IDApCisJCXwgKChzdGF0dXMgJiBVQVJUX1JJKSAgICAgICAgID8gVElPQ01fUkkgIDogMCkKKwkJfCAoKHN0YXR1cyAmIFVBUlRfQ0QpICAgICAgICAgPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSByZXN1bHQgPSAleCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIGludCBjeXByZXNzX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENPTlRST0xfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DT05UUk9MX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q09OVFJPTF9EVFI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcHJpdi0+Y21kX2N0cmwgPSAxOworCXJldHVybiBjeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOworfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc19pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgcG9ydC0+dHR5LT50ZXJtaW9zLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJcmV0dXJuICgwKTsKKwkJCWJyZWFrOworCQljYXNlIFRJT0NTU0VSSUFMOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBvcnQtPnR0eS0+dGVybWlvcywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJLyogaGVyZSB3ZSBuZWVkIHRvIGNhbGwgY3lwcmVzc19zZXRfdGVybWlvcyB0byBpbnZva2UgdGhlIG5ldyBzZXR0aW5ncyAqLworCQkJY3lwcmVzc19zZXRfdGVybWlvcyhwb3J0LCAmcHJpdi0+dG1wX3Rlcm1pb3MpOworCQkJcmV0dXJuICgwKTsKKwkJCWJyZWFrOworCQkvKiB0aGVzZSBhcmUgY2FsbGVkIHdoZW4gc2V0dGluZyBiYXVkIHJhdGUgZnJvbSBncHNkICovCisJCWNhc2UgVENHRVRTOgorCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIHBvcnQtPnR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCXJldHVybiAoMCk7CisJCQlicmVhazsKKwkJY2FzZSBUQ1NFVFM6CisJCQlpZiAoY29weV9mcm9tX3VzZXIocG9ydC0+dHR5LT50ZXJtaW9zLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQkvKiBoZXJlIHdlIG5lZWQgdG8gY2FsbCBjeXByZXNzX3NldF90ZXJtaW9zIHRvIGludm9rZSB0aGUgbmV3IHNldHRpbmdzICovCisJCQljeXByZXNzX3NldF90ZXJtaW9zKHBvcnQsICZwcml2LT50bXBfdGVybWlvcyk7CisJCQlyZXR1cm4gKDApOworCQkJYnJlYWs7CisJCS8qIFRoaXMgY29kZSBjb21lcyBmcm9tIGRyaXZlcnMvY2hhci9zZXJpYWwuYyBhbmQgZnRkaV9zaW8uYyAqLworCQljYXNlIFRJT0NNSVdBSVQ6CisJCQl3aGlsZSAocHJpdiAhPSBOVUxMKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQkJZWxzZSB7CisJCQkJCWNoYXIgZGlmZiA9IHByaXYtPmRpZmZfc3RhdHVzOworCisJCQkJCWlmIChkaWZmID09IDApIHsKKwkJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCQkJfQorCQkJCQkKKwkJCQkJLyogY29uc3VtZSBhbGwgZXZlbnRzICovCisJCQkJCXByaXYtPmRpZmZfc3RhdHVzID0gMDsKKworCQkJCQkvKiByZXR1cm4gMCBpZiBjYWxsZXIgd2FudGVkIHRvIGtub3cgYWJvdXQgdGhlc2UgYml0cyAqLworCQkJCQlpZiAoICgoYXJnICYgVElPQ01fUk5HKSAmJiAoZGlmZiAmIFVBUlRfUkkpKSB8fAorCQkJCQkgICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoZGlmZiAmIFVBUlRfRFNSKSkgfHwKKwkJCQkJICAgICAoKGFyZyAmIFRJT0NNX0NEKSAmJiAoZGlmZiAmIFVBUlRfQ0QpKSB8fAorCQkJCQkgICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoZGlmZiAmIFVBUlRfQ1RTKSkgKSB7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCQkvKiBvdGhlcndpc2UgY2FsbGVyIGNhbid0IGNhcmUgbGVzcyBhYm91dCB3aGF0IGhhcHBlbmVkLAorCQkJCQkgKiBhbmQgc28gd2UgY29udGludWUgdG8gd2FpdCBmb3IgbW9yZSBldmVudHMuCisJCQkJCSAqLworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlkYmcoIiVzIC0gYXJnIG5vdCBzdXBwb3J0ZWQgLSBpdCB3YXMgMHglMDR4IC0gY2hlY2sgaW5jbHVkZS9hc20vaW9jdGxzLmgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfSAvKiBjeXByZXNzX2lvY3RsICovCisKKworc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgZGF0YV9iaXRzLCBzdG9wX2JpdHMsIHBhcml0eV90eXBlLCBwYXJpdHlfZW5hYmxlOworCXVuc2lnbmVkIGNmbGFnLCBpZmxhZywgYmF1ZF9tYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191OCBvbGRsaW5lczsKKwlpbnQgbGluZWNoYW5nZTsKKwkKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoKCF0dHkpIHx8ICghdHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQpIHsKKwkJaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0VBUlRITUFURSkgeworCQkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjQ4MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCQl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0NZUEhJRENPTSkgeworCQkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCQl9CisJCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlpZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKworCS8qIGNoZWNrIGlmIHRoZXJlIGFyZSBuZXcgc2V0dGluZ3MgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyAhPSBvbGRfdGVybWlvcy0+Y19jZmxhZykgfHwKKwkJICAgIChSRUxFVkFOVF9JRkxBRyhpZmxhZykgIT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIGF0dGVtcHRpbmcgdG8gc2V0IG5ldyB0ZXJtaW9zIHNldHRpbmdzIiwgX19GVU5DVElPTl9fKTsKKwkJCS8qIHNob3VsZCBtYWtlIGEgY29weSBvZiB0aGlzIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgaW4gdGhlIGZ1bmN0aW9uLCB3ZSBjYW4gcmVzdG9yZSBpdCAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPnRtcF90ZXJtaW9zID0gKih0dHktPnRlcm1pb3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOyAKKwkJfSBlbHNlIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGRvLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm47CisKKwkvKiBzZXQgbnVtYmVyIG9mIGRhdGEgYml0cywgcGFyaXR5LCBzdG9wIGJpdHMgKi8KKwkvKiB3aGVuIHBhcml0eSBpcyBkaXNhYmxlZCB0aGUgcGFyaXR5IHR5cGUgYml0IGlzIGlnbm9yZWQgKi8KKworCXN0b3BfYml0cyA9IGNmbGFnICYgQ1NUT1BCID8gMSA6IDA7IC8qIDEgbWVhbnMgMiBzdG9wIGJpdHMsIDAgbWVhbnMgMSBzdG9wIGJpdCAqLworCQorCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlwYXJpdHlfZW5hYmxlID0gMTsKKwkJcGFyaXR5X3R5cGUgPSBjZmxhZyAmIFBBUk9ERCA/IDEgOiAwOyAvKiAxIG1lYW5zIG9kZCBwYXJpdHksIDAgbWVhbnMgZXZlbiBwYXJpdHkgKi8KKwl9IGVsc2UKKwkJcGFyaXR5X2VuYWJsZSA9IHBhcml0eV90eXBlID0gMDsKKworCWlmIChjZmxhZyAmIENTSVpFKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQkJY2FzZSBDUzU6IGRhdGFfYml0cyA9IDA7IGJyZWFrOworCQkJY2FzZSBDUzY6IGRhdGFfYml0cyA9IDE7IGJyZWFrOworCQkJY2FzZSBDUzc6IGRhdGFfYml0cyA9IDI7IGJyZWFrOworCQkJY2FzZSBDUzg6IGRhdGFfYml0cyA9IDM7IGJyZWFrOworCQkJZGVmYXVsdDogZXJyKCIlcyAtIENTSVpFIHdhcyBzZXQsIGJ1dCBub3QgQ1M1LUNTOCIsIF9fRlVOQ1RJT05fXyk7IGRhdGFfYml0cyA9IDM7CisJCX0KKwl9IGVsc2UKKwkJZGF0YV9iaXRzID0gMzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJb2xkbGluZXMgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCkgeworCQkvKiBkcm9wIGR0ciBhbmQgcnRzICovCisJCWRiZygiJXMgLSBkcm9wcGluZyB0aGUgbGluZXMsIGJhdWQgcmF0ZSAwYnBzIiwgX19GVU5DVElPTl9fKTsKKwkJYmF1ZF9tYXNrID0gQjA7CisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+KENPTlRST0xfRFRSIHwgQ09OVFJPTF9SVFMpOworCX0gZWxzZSB7CisJCWJhdWRfbWFzayA9IChjZmxhZyAmIENCQVVEKTsKKwkJc3dpdGNoKGJhdWRfbWFzaykgeworCQkJY2FzZSBCMzAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDMwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCNjAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDYwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCMTIwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCAxMjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEIyNDAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDI0MDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjQ4MDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgNDgwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCOTYwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCA5NjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEIxOTIwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCAxOTIwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCMzg0MDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMzg0MDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjU3NjAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDU3NjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEIxMTUyMDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMTE1MjAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQlkZWZhdWx0OiBkYmcoIiVzIC0gdW5rbm93biBtYXNrZWQgYmF1ZCByYXRlIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9EVFI7CisJCQorCQkvKiB0b2dnbGUgQ1JUU0NUUz8gLSBkb24ndCBkbyB0aGlzIGlmIGJlaW5nIGNhbGxlZCBmcm9tIGN5cHJlc3Nfb3BlbiAqLworCQlpZiAoIXByaXYtPmNhbGxlZGZyb21vcGVuKSB7CisJCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQkJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX1JUUzsKKwkJCWVsc2UKKwkJCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfUlRTOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkKKwlkYmcoIiVzIC0gc2VuZGluZyAlZCBzdG9wX2JpdHMsICVkIHBhcml0eV9lbmFibGUsICVkIHBhcml0eV90eXBlLCAlZCBkYXRhX2JpdHMgKCs1KSIsIF9fRlVOQ1RJT05fXywKKwkgICAgc3RvcF9iaXRzLCBwYXJpdHlfZW5hYmxlLCBwYXJpdHlfdHlwZSwgZGF0YV9iaXRzKTsKKworCWN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wocG9ydCwgYmF1ZF9tYXNrLCBkYXRhX2JpdHMsIHN0b3BfYml0cywgcGFyaXR5X2VuYWJsZSwKKwkJCSAgICAgICBwYXJpdHlfdHlwZSwgMCwgQ1lQUkVTU19TRVRfQ09ORklHKTsKKworCW1zbGVlcCg1MCk7CQkJLyogZ2l2ZSBzb21lIHRpbWUgYmV0d2VlbiBjaGFuZ2UgYW5kIHJlYWQgKDUwbXMpICovCisKKwkvKiB3ZSBwZXJmb3JtIGEgQ1lQUkVTU19HRVRfQ09ORklHIHNvIHRoYXQgdGhlIGN1cnJlbnQgc2V0dGluZ3MgYXJlIGZpbGxlZCBpbnRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZQorICAgICAgICAgKiB0aGlzIHNob3VsZCBjb25maXJtIHRoYXQgYWxsIGlzIHdvcmtpbmcgaWYgaXQgcmV0dXJucyB3aGF0IHdlIGp1c3Qgc2V0ICovCisJY3lwcmVzc19zZXJpYWxfY29udHJvbChwb3J0LCAwLCAwLCAwLCAwLCAwLCAwLCBDWVBSRVNTX0dFVF9DT05GSUcpOworCisJLyogSGVyZSB3ZSBjYW4gZGVmaW5lIGN1c3RvbSB0dHkgc2V0dGluZ3MgZm9yIGRldmljZXMKKyAgICAgICAgICoKKyAgICAgICAgICogdGhlIG1haW4gdHR5IHRlcm1pb3MgZmxhZyBiYXNlIGNvbWVzIGZyb20gZW1wZWcuYworICAgICAgICAgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CQorCWlmICggKHByaXYtPmNoaXB0eXBlID09IENUX0VBUlRITUFURSkgJiYgKHByaXYtPmJhdWRfcmF0ZSA9PSA0ODAwKSApIHsKKworCQlkYmcoIlVzaW5nIGN1c3RvbSB0ZXJtaW9zIHNldHRpbmdzIGZvciBhIGJhdWQgcmF0ZSBvZiA0ODAwYnBzLiIpOworCQkvKiBkZWZpbmUgY3VzdG9tIHRlcm1pb3Mgc2V0dGluZ3MgZm9yIE5NRUEgcHJvdG9jb2wgKi8KKworCQkKKwkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnIC8qIGlucHV0IG1vZGVzIC0gKi8KKwkJCSY9IH4oSUdOQlJLCQkvKiBkaXNhYmxlIGlnbm9yZSBicmVhayAqLworCQkJfCBCUktJTlQJCS8qIGRpc2FibGUgYnJlYWsgY2F1c2VzIGludGVycnVwdCAqLworCQkJfCBQQVJNUksJCS8qIGRpc2FibGUgbWFyayBwYXJpdHkgZXJyb3JzICovCisJCQl8IElTVFJJUAkJLyogZGlzYWJsZSBjbGVhciBoaWdoIGJpdCBvZiBpbnB1dCBjaGFyYWN0ZXJzICovCisJCQl8IElOTENSCQkJLyogZGlzYWJsZSB0cmFuc2xhdGUgTkwgdG8gQ1IgKi8KKwkJCXwgSUdOQ1IJCQkvKiBkaXNhYmxlIGlnbm9yZSBDUiAqLworCQkJfCBJQ1JOTAkJCS8qIGRpc2FibGUgdHJhbnNsYXRlIENSIHRvIE5MICovCisJCQl8IElYT04pOwkJLyogZGlzYWJsZSBlbmFibGUgWE9OL1hPRkYgZmxvdyBjb250cm9sICovCisJCQorCQl0dHktPnRlcm1pb3MtPmNfb2ZsYWcgLyogb3V0cHV0IG1vZGVzICovCisJCQkmPSB+T1BPU1Q7CQkvKiBkaXNhYmxlIHBvc3Rwcm9jZXNzIG91dHB1dCBjaGFyYWN0ZXJzICovCisJCQorCQl0dHktPnRlcm1pb3MtPmNfbGZsYWcgLyogbGluZSBkaXNjaXBsaW5lIG1vZGVzICovCisJCQkmPSB+KEVDSE8gCQkvKiBkaXNhYmxlIGVjaG8gaW5wdXQgY2hhcmFjdGVycyAqLworCQkJfCBFQ0hPTkwJCS8qIGRpc2FibGUgZWNobyBuZXcgbGluZSAqLworCQkJfCBJQ0FOT04JCS8qIGRpc2FibGUgZXJhc2UsIGtpbGwsIHdlcmFzZSwgYW5kIHJwcm50IHNwZWNpYWwgY2hhcmFjdGVycyAqLworCQkJfCBJU0lHCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHQsIHF1aXQsIGFuZCBzdXNwZW5kIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCQkJfCBJRVhURU4pOwkJLyogZGlzYWJsZSBub24tUE9TSVggc3BlY2lhbCBjaGFyYWN0ZXJzICovCisKKwl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0NZUEhJRENPTSkgeworCisJCS8vIFNvZnR3YXJlIGFwcCBoYW5kbGluZyBpdCBmb3IgZGV2aWNlLi4uCQorCisJfQorCWxpbmVjaGFuZ2UgPSAocHJpdi0+bGluZV9jb250cm9sICE9IG9sZGxpbmVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBpZiBuZWNlc3NhcnksIHNldCBsaW5lcyAqLworCWlmICghcHJpdi0+Y2FsbGVkZnJvbW9wZW4gJiYgbGluZWNoYW5nZSkgeworCQlwcml2LT5jbWRfY3RybCA9IDE7CisJCWN5cHJlc3Nfd3JpdGUocG9ydCwgTlVMTCwgMCk7CisJfQorCisJaWYgKHByaXYtPmNhbGxlZGZyb21vcGVuKQorCQlwcml2LT5jYWxsZWRmcm9tb3BlbiA9IDA7CisJCit9IC8qIGN5cHJlc3Nfc2V0X3Rlcm1pb3MgKi8KKworIAorLyogcmV0dXJucyBhbW91bnQgb2YgZGF0YSBzdGlsbCBsZWZ0IGluIHNvZnQgYnVmZmVyICovCitzdGF0aWMgaW50IGN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNoYXJzID0gY3lwcmVzc19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCisKK3N0YXRpYyB2b2lkIGN5cHJlc3NfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnJ4X2ZsYWdzID0gVEhST1RUTEVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsJICAgCit9CisKKworc3RhdGljIHZvaWQgY3lwcmVzc191bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGFjdHVhbGx5X3Rocm90dGxlZCwgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CisJcHJpdi0+cnhfZmxhZ3MgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChhY3R1YWxseV90aHJvdHRsZWQpIHsKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyIHR0eV9mbGFnID0gVFRZX05PUk1BTDsJCisJaW50IGhhdmVkYXRhID0gMDsKKwlpbnQgYnl0ZXMgPSAwOworCWludCByZXN1bHQ7CisJaW50IGkgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5yeF9mbGFncyAmIFRIUk9UVExFRCkgeworCQlkYmcoIiVzIC0gbm93IHRocm90dGxpbmciLCBfX0ZVTkNUSU9OX18pOworCQlwcml2LT5yeF9mbGFncyB8PSBBQ1RVQUxMWV9USFJPVFRMRUQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2godXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWNhc2UgMzI6CisJCQkvLyBUaGlzIGlzIGZvciB0aGUgQ1k3QzY0MDEzLi4uCisJCQlwcml2LT5jdXJyZW50X3N0YXR1cyA9IGRhdGFbMF0gJiAweEY4OworCQkJYnl0ZXMgPSBkYXRhWzFdKzI7CisJCQlpPTI7CisJCQlpZiAoYnl0ZXMgPiAyKQorCQkJCWhhdmVkYXRhID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQkvLyBUaGlzIGlzIGZvciB0aGUgQ1k3QzYzNzQzLi4uCisJCQlwcml2LT5jdXJyZW50X3N0YXR1cyA9IGRhdGFbMF0gJiAweEY4OworCQkJYnl0ZXMgPSAoZGF0YVswXSAmIDB4MDcpKzE7CisJCQlpPTE7CisJCQlpZiAoYnl0ZXMgPiAxKQorCQkJCWhhdmVkYXRhID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIHdyb25nIHBhY2tldCBzaXplIC0gcmVjZWl2ZWQgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlnb3RvIGNvbnRpbnVlX3JlYWQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YSAoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLyogY2hlY2sgdG8gc2VlIGlmIHN0YXR1cyBoYXMgY2hhbmdlZCAqLworCWlmIChwcml2ICE9IE5VTEwpIHsKKwkJaWYgKHByaXYtPmN1cnJlbnRfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCQlwcml2LT5kaWZmX3N0YXR1cyB8PSBwcml2LT5jdXJyZW50X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQlwcml2LT5wcmV2X3N0YXR1cyA9IHByaXYtPmN1cnJlbnRfc3RhdHVzOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsJCisKKwkvKiBoYW5ndXAsIGFzIGRlZmluZWQgaW4gYWNtLmMuLi4gdGhpcyBtaWdodCBiZSBhIGJhZCBwbGFjZSBmb3IgaXQgdGhvdWdoICovCisJaWYgKHR0eSAmJiAhKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgJiYgIShwcml2LT5jdXJyZW50X3N0YXR1cyAmIFVBUlRfQ0QpKSB7CisJCWRiZygiJXMgLSBjYWxsaW5nIGhhbmd1cCIsIF9fRlVOQ1RJT05fXyk7CisJCXR0eV9oYW5ndXAodHR5KTsKKwkJZ290byBjb250aW51ZV9yZWFkOworCX0KKworCS8qIFRoZXJlIGlzIG9uZSBlcnJvciBiaXQuLi4gSSdtIGFzc3VtaW5nIGl0IGlzIGEgcGFyaXR5IGVycm9yIGluZGljYXRvcgorCSAqIGFzIHRoZSBnZW5lcmljIGZpcm13YXJlIHdpbGwgc2V0IHRoaXMgYml0IHRvIDEgaWYgYSBwYXJpdHkgZXJyb3Igb2NjdXJzLgorCSAqIEkgY2FuIG5vdCBmaW5kIHJlZmVyZW5jZSB0byBhbnkgb3RoZXIgZXJyb3IgZXZlbnRzLgorCSAqCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+Y3VycmVudF9zdGF0dXMgJiBDWVBfRVJST1IpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl0dHlfZmxhZyA9IFRUWV9QQVJJVFk7CisJCWRiZygiJXMgLSBQYXJpdHkgRXJyb3IgZGV0ZWN0ZWQiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBwcm9jZXNzIHJlYWQgaWYgdGhlcmUgaXMgZGF0YSBvdGhlciB0aGFuIGxpbmUgc3RhdHVzICovCisJaWYgKHR0eSAmJiAoYnl0ZXMgPiBpKSkgeworCQlmb3IgKDsgaSA8IGJ5dGVzIDsgKytpKSB7CisJCQlkYmcoInB1c2hpbmcgYnl0ZSBudW1iZXIgJWQgLSAlZCAtICVjIixpLGRhdGFbaV0sZGF0YVtpXSk7CisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT50dHkpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+Ynl0ZXNfaW4gKz0gYnl0ZXM7ICAvKiBjb250cm9sIGFuZCBzdGF0dXMgYnl0ZShzKSBhcmUgYWxzbyBjb3VudGVkICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCitjb250aW51ZV9yZWFkOgorCQorCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZC4uLiB1bmxlc3MgdGhlIHBvcnQgaGFzIGNsb3NlZC4gICovCisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA+IDApIHsKKwl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQl1c2JfcmN2aW50cGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywgcG9ydCwKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+aW50ZXJ2YWwpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCQorCXJldHVybjsKK30gLyogY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjayAqLworCisKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfd3JpdGVfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAwOgorCQkJLyogc3VjY2VzcyAqLworCQkJYnJlYWs7CisJCWNhc2UgLUVDT05OUkVTRVQ6CisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJLyogZXJyb3IgaW4gdGhlIHVyYiwgc28gd2UgaGF2ZSB0byByZXN1Ym1pdCBpdCAqLworCQkJZGJnKCIlcyAtIE92ZXJmbG93IGluIHdyaXRlIiwgX19GVU5DVElPTl9fKTsKKwkJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJcG9ydC0+aW50ZXJydXB0X291dF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxOworCQkJcG9ydC0+aW50ZXJydXB0X291dF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCWVsc2UKKwkJCQlyZXR1cm47CisJfQorCQorCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOworCQorCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKwljeXByZXNzX3NlbmQocG9ydCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXcml0ZSBidWZmZXIgZnVuY3Rpb25zIC0gYnVmZmVyaW5nIGNvZGUgZnJvbSBwbDIzMDMgdXNlZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogY3lwcmVzc19idWZfYWxsb2MKKyAqCisgKiBBbGxvY2F0ZSBhIGNpcmN1bGFyIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY3lwcmVzc19idWYgKmN5cHJlc3NfYnVmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKQoreworCisJc3RydWN0IGN5cHJlc3NfYnVmICpjYjsKKworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwljYiA9IChzdHJ1Y3QgY3lwcmVzc19idWYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3lwcmVzc19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2IgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwljYi0+YnVmX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNiLT5idWZfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUoY2IpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljYi0+YnVmX3NpemUgPSBzaXplOworCWNiLT5idWZfZ2V0ID0gY2ItPmJ1Zl9wdXQgPSBjYi0+YnVmX2J1ZjsKKworCXJldHVybiBjYjsKKworfQorCisKKy8qCisgKiBjeXByZXNzX2J1Zl9mcmVlCisgKgorICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHZvaWQgY3lwcmVzc19idWZfZnJlZShzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKQoreworCWlmIChjYiAhPSBOVUxMKSB7CisJCWlmIChjYi0+YnVmX2J1ZiAhPSBOVUxMKQorCQkJa2ZyZWUoY2ItPmJ1Zl9idWYpOworCQlrZnJlZShjYik7CisJfQorfQorCisKKy8qCisgKiBjeXByZXNzX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCisKK3N0YXRpYyB2b2lkIGN5cHJlc3NfYnVmX2NsZWFyKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpCit7CisJaWYgKGNiICE9IE5VTEwpCisJCWNiLT5idWZfZ2V0ID0gY2ItPmJ1Zl9wdXQ7CisJCS8qIGVxdWl2YWxlbnQgdG8gYSBnZXQgb2YgYWxsIGRhdGEgYXZhaWxhYmxlICovCit9CisKKworLyoKKyAqIGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYikKK3sKKwlpZiAoY2IgIT0gTlVMTCkKKwkJcmV0dXJuICgoY2ItPmJ1Zl9zaXplICsgY2ItPmJ1Zl9wdXQgLSBjYi0+YnVmX2dldCkgJSBjYi0+YnVmX3NpemUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGN5cHJlc3NfYnVmX3NwYWNlX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYikKK3sKKwlpZiAoY2IgIT0gTlVMTCkKKwkJcmV0dXJuICgoY2ItPmJ1Zl9zaXplICsgY2ItPmJ1Zl9nZXQgLSBjYi0+YnVmX3B1dCAtIDEpICUgY2ItPmJ1Zl9zaXplKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBjeXByZXNzX2J1Zl9wdXQKKyAqCisgKiBDb3B5IGRhdGEgZGF0YSBmcm9tIGEgdXNlciBidWZmZXIgYW5kIHB1dCBpdCBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBjeXByZXNzX2J1Zl9wdXQoc3RydWN0IGN5cHJlc3NfYnVmICpjYiwgY29uc3QgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChjYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBjeXByZXNzX2J1Zl9zcGFjZV9hdmFpbChjYik7CisJaWYgKGNvdW50ID4gbGVuKQorCQljb3VudCA9IGxlbjsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGNiLT5idWZfYnVmICsgY2ItPmJ1Zl9zaXplIC0gY2ItPmJ1Zl9wdXQ7CisJaWYgKGNvdW50ID4gbGVuKSB7CisJCW1lbWNweShjYi0+YnVmX3B1dCwgYnVmLCBsZW4pOworCQltZW1jcHkoY2ItPmJ1Zl9idWYsIGJ1ZitsZW4sIGNvdW50IC0gbGVuKTsKKwkJY2ItPmJ1Zl9wdXQgPSBjYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOworCX0gZWxzZSB7CisJCW1lbWNweShjYi0+YnVmX3B1dCwgYnVmLCBjb3VudCk7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCWNiLT5idWZfcHV0ICs9IGNvdW50OworCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLworCQkJY2ItPmJ1Zl9wdXQgPSBjYi0+YnVmX2J1ZjsKKwl9CisKKwlyZXR1cm4gY291bnQ7CisKK30KKworCisvKgorICogY3lwcmVzc19idWZfZ2V0CisgKgorICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGN5cHJlc3NfYnVmX2dldChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KQoreworCisJdW5zaWduZWQgaW50IGxlbjsKKworCisJaWYgKGNiID09IE5VTEwpCisJCXJldHVybiAwOworCisJbGVuID0gY3lwcmVzc19idWZfZGF0YV9hdmFpbChjYik7CisJaWYgKGNvdW50ID4gbGVuKQorCQljb3VudCA9IGxlbjsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGNiLT5idWZfYnVmICsgY2ItPmJ1Zl9zaXplIC0gY2ItPmJ1Zl9nZXQ7CisJaWYgKGNvdW50ID4gbGVuKSB7CisJCW1lbWNweShidWYsIGNiLT5idWZfZ2V0LCBsZW4pOworCQltZW1jcHkoYnVmK2xlbiwgY2ItPmJ1Zl9idWYsIGNvdW50IC0gbGVuKTsKKwkJY2ItPmJ1Zl9nZXQgPSBjYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOworCX0gZWxzZSB7CisJCW1lbWNweShidWYsIGNiLT5idWZfZ2V0LCBjb3VudCk7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCWNiLT5idWZfZ2V0ICs9IGNvdW50OworCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLworCQkJY2ItPmJ1Zl9nZXQgPSBjYi0+YnVmX2J1ZjsKKwl9CisKKwlyZXR1cm4gY291bnQ7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IGN5cHJlc3NfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9lbV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjeXByZXNzX2hpZGNvbV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2hpZGNvbV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9kZXJlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7CitmYWlsZWRfaGlkY29tX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3lwcmVzc19oaWRjb21fZGV2aWNlKTsKK2ZhaWxlZF9lbV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmN5cHJlc3NfZWFydGhtYXRlX2RldmljZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeXByZXNzX2V4aXQgKHZvaWQpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl1c2JfZGVyZWdpc3RlciAoJmN5cHJlc3NfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjeXByZXNzX2VhcnRobWF0ZV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmN5cHJlc3NfaGlkY29tX2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQoY3lwcmVzc19pbml0KTsKK21vZHVsZV9leGl0KGN5cHJlc3NfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9WRVJTSU9OKCBEUklWRVJfVkVSU0lPTiApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworbW9kdWxlX3BhcmFtKHN0YXRzLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHN0YXRzLCAiRW5hYmxlIHN0YXRpc3RpY3Mgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDEyZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIENZUFJFU1NfTThfSAorI2RlZmluZSBDWVBSRVNTX004X0gKKworLyogZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgdXNlZCBmb3IgdGhlIGN5cHJlc3MgVVNCIHRvIFNlcmlhbCBjb250cm9sbGVyICovCisKKy8qIEZvciBzZW5kaW5nIG91ciBmZWF0dXJlIGJ1ZmZlciAtIGNvbnRyb2xsaW5nIHNlcmlhbCBjb21tdW5pY2F0aW9uIHN0YXRlcyAqLworLyogTGludXggSElEIGhhcyBubyBzdXBwb3J0IGZvciBzZXJpYWwgZGV2aWNlcyBzbyB3ZSBkbyB0aGlzIHRocm91Z2ggdGhlIGRyaXZlciAqLworI2RlZmluZSBISURfUkVRX0dFVF9SRVBPUlQgMHgwMQorI2RlZmluZSBISURfUkVRX1NFVF9SRVBPUlQgMHgwOQorCisvKiBMaXN0IG90aGVyIGN5cHJlc3MgVVNCIHRvIFNlcmlhbCBkZXZpY2VzIGhlcmUsIGFuZCBhZGQgdGhlbSB0byB0aGUgaWRfdGFibGUgKi8KKworLyogRGVMb3JtZSBFYXJ0aG1hdGUgVVNCIC0gYSBHUFMgZGV2aWNlICovCisjZGVmaW5lCVZFTkRPUl9JRF9ERUxPUk1FCQkgMHgxMTYzCisjZGVmaW5lIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCCQkgMHgwMTAwCisKKy8qIEN5cHJlc3MgSElELT5DT00gUlMyMzIgQWRhcHRlciAqLworI2RlZmluZSBWRU5ET1JfSURfQ1lQUkVTUwkJIDB4MDRiNAorI2RlZmluZSBQUk9EVUNUX0lEX0NZUEhJRENPTQkJIDB4NTUwMAorLyogRW5kIG9mIGRldmljZSBsaXN0aW5nICovCisKKy8qIFVzZWQgZm9yIHNldHRpbmcgLyByZXF1ZXN0aW5nIHNlcmlhbCBsaW5lIHNldHRpbmdzICovCisjZGVmaW5lIENZUFJFU1NfU0VUX0NPTkZJRyAweDAxCisjZGVmaW5lIENZUFJFU1NfR0VUX0NPTkZJRyAweDAyCisKKy8qIFVzZWQgZm9yIHRocm90dGxlIGNvbnRyb2wgKi8KKyNkZWZpbmUgVEhST1RUTEVEIDB4MQorI2RlZmluZSBBQ1RVQUxMWV9USFJPVFRMRUQgMHgyCisKKy8qIGNoaXB0eXBlcyAtIHVzZWQgaW4gY2FzZSBmaXJtd2FyZSBkaWZmZXJzIGZyb20gdGhlIGdlbmVyaWMgZm9ybSAuLi4gb2ZmZXJpbmcKKyAqIAlkaWZmZXJlbnQgYmF1ZCBzcGVlZHMvZXRjLgorICovCisKKyNkZWZpbmUgQ1RfRUFSVEhNQVRFCTB4MDEKKyNkZWZpbmUgQ1RfQ1lQSElEQ09NCTB4MDIKKyNkZWZpbmUgQ1RfR0VORVJJQwkweDBGCisvKiBFbmQgb2YgY2hpcHR5cGUgZGVmaW5pdGlvbnMgKi8KKworLyogUlMtMjMyIHNlcmlhbCBkYXRhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgZGVmaW5pdGlvbnMgKi8KKy8qIHRoZXNlIGFyZSBzZW50IC8gcmVhZCBhdCBieXRlIDAgb2YgdGhlIGlucHV0L291dHB1dCBoaWQgcmVwb3J0cyAqLworLyogWW91IGNhbiBmaW5kIHRoZXNlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBDWTQ2MDEgVVNCIHRvIFNlcmlhbCBkZXNpZ24gbm90ZXMgKi8KKworI2RlZmluZSBDT05UUk9MX0RUUiAJMHgyMAkvKiBkYXRhIHRlcm1pbmFsIHJlYWR5IC0gZmxvdyBjb250cm9sIC0gaG9zdCB0byBkZXZpY2UgKi8KKyNkZWZpbmUgVUFSVF9EU1IJMHgyMAkvKiBkYXRhIHNldCByZWFkeSAtIGZsb3cgY29udHJvbCAtIGRldmljZSB0byBob3N0ICovCisjZGVmaW5lIENPTlRST0xfUlRTIAkweDEwCS8qIHJlcXVlc3QgdG8gc2VuZCAtIGZsb3cgY29udHJvbCAtIGhvc3QgdG8gZGV2aWNlICovCisjZGVmaW5lIFVBUlRfQ1RTCTB4MTAJLyogY2xlYXIgdG8gc2VuZCAtIGZsb3cgY29udHJvbCAtIGRldmljZSB0byBob3N0ICovCisjZGVmaW5lCVVBUlRfUkkJCTB4MTAJLyogcmluZyBpbmRpY2F0b3IgLSBtb2RlbSAtIGRldmljZSB0byBob3N0ICovIAorI2RlZmluZSBVQVJUX0NECQkweDQwCS8qIGNhcnJpZXIgZGV0ZWN0IC0gbW9kZW0gLSBkZXZpY2UgdG8gaG9zdCAqLworI2RlZmluZSBDWVBfRVJST1IgCTB4MDgJLyogcmVjZWl2ZWQgZnJvbSBpbnB1dCByZXBvcnQgLSBkZXZpY2UgdG8gaG9zdCAqLworLyogTm90ZSAtIHRoZSBiZWxvdyBoYXMgbm90aGluZyB0byB0byB3aXRoIHRoZSAiZmVhdHVyZSByZXBvcnQiIHJlc2V0ICovCisjZGVmaW5lIENPTlRST0xfUkVTRVQJMHgwOCAgCS8qIHNlbnQgd2l0aCBvdXRwdXQgcmVwb3J0IC0gaG9zdCB0byBkZXZpY2UgKi8KKworLyogRW5kIG9mIFJTLTIzMiBwcm90b2NvbCBkZWZpbml0aW9ucyAqLworCisjZW5kaWYgLyogQ1lQUkVTU19NOF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmOTI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtMCwwICsxLDIwNDkgQEAKKy8qCisqICBEaWdpIEFjY2VsZVBvcnQgVVNCLTQgYW5kIFVTQi0yIFNlcmlhbCBDb252ZXJ0ZXJzCisqCisqICBDb3B5cmlnaHQgMjAwMCBieSBEaWdpIEludGVybmF0aW9uYWwKKyoKKyogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqCisqICBTaGFtZWxlc3NseSBiYXNlZCBvbiBCcmlhbiBXYXJuZXIncyBrZXlzcGFuX3BkYS5jIGFuZCBHcmVnIEtyb2FoLUhhcnRtYW4ncworKiAgdXNiLXNlcmlhbCBkcml2ZXIuCisqCisqICBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pCisqICBBbCBCb3JjaGVycyAoYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyogCisqICgxMi8wMy8yMDAxKSBna2gKKyoJc3dpdGNoZWQgdG8gdXNpbmcgcG9ydC0+b3Blbl9jb3VudCBpbnN0ZWFkIG9mIHByaXZhdGUgdmVyc2lvbi4KKyoJUmVtb3ZlZCBwb3J0LT5hY3RpdmUKKyoKKyogKDA0LzA4LzIwMDEpIGdiCisqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisqCisqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKyoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisqIAorKiAoMTEvMDEvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gVHVybmVkIG9mZiB0aGUgVVNCX0RJU0FCTEVfU1BEIGZsYWcgZm9yIHdyaXRlIGJ1bGsgdXJicy0taXQgY2F1c2VkCisqICAgICAgIFVTQiA0IHBvcnRzIHRvIGhhbmcgb24gc3RhcnR1cC4KKyogICAgLS0gU2VyaWFsaXplZCBhY2Nlc3MgdG8gd3JpdGUgdXJicyBieSBhZGRpbmcgdGhlIGRwX3dyaXRlX3VyYl9pbl91c2UKKyogICAgICAgZmxhZzsgb3RoZXJ3aXNlLCB0aGUgZHJpdmVyIGNhdXNlZCBTTVAgc3lzdGVtIGhhbmdzLiAgV2F0Y2hpbmcgdGhlCisqICAgICAgIHVyYiBzdGF0dXMgaXMgbm90IHN1ZmZpY2llbnQuCisqCisqICgxMC8wNS8yMDAwKSBna2gKKyogICAgLS0gRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorKgljb3JlIG5lZWRzIGl0LgorKiAKKyogICg4LzgvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gRml4ZWQgY2xvc2Ugc28gdGhhdCAKKyogICAgICAgLSBpdCBjYW4gdGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciB0cmFuc21pdCBpZGxlLCBpZiBuZWVkZWQ7CisqICAgICAgIC0gaXQgaWdub3JlcyBpbnRlcnJ1cHRzIHdoZW4gZmx1c2hpbmcgdGhlIHBvcnQsIHR1cm5pbmcKKyogICAgICAgICBvZiBtb2RlbSBzaWduYWxsaW5nLCBhbmQgc28gb247CisqICAgICAgIC0gaXQgd2FpdHMgZm9yIHRoZSBmbHVzaCB0byByZWFsbHkgY29tcGxldGUgYmVmb3JlIHJldHVybmluZy4KKyogICAgLS0gUmVhZF9idWxrX2NhbGxiYWNrIGFuZCB3cml0ZV9idWxrX2NhbGxiYWNrIGNoZWNrIGZvciBhIGNsb3NlZAorKiAgICAgICBwb3J0IGJlZm9yZSB1c2luZyB0aGUgdHR5IHN0cnVjdCBvciB3cml0aW5nIHRvIHRoZSBwb3J0LgorKiAgICAtLSBUaGUgdHdvIGNoYW5nZXMgYWJvdmUgZml4IHRoZSBvb3BzIGNhdXNlZCBieSBpbnRlcnJ1cHRlZCBjbG9zZXMuCisqICAgIC0tIEFkZGVkIGludGVycnVwdGlibGUgYXJncyB0byB3cml0ZV9vb2JfY29tbWFuZCBhbmQgc2V0X21vZGVtX3NpZ25hbHMKKyogICAgICAgYW5kIGFkZGVkIGEgdGltZW91dCBhcmcgdG8gdHJhbnNtaXRfaWRsZTsgbmVlZGVkIGZvciBmaXhlcyB0bworKiAgICAgICBjbG9zZS4KKyogICAgLS0gQWRkZWQgY29kZSBmb3IgcnhfdGhyb3R0bGUgYW5kIHJ4X3VudGhyb3R0bGUgc28gdGhhdCBpbnB1dCBmbG93CisqICAgICAgIGNvbnRyb2wgd29ya3MuCisqICAgIC0tIEFkZGVkIGNvZGUgdG8gc2V0IG92ZXJydW4sIHBhcml0eSwgZnJhbWluZywgYW5kIGJyZWFrIGVycm9ycworKiAgICAgICAodW50ZXN0ZWQpLgorKiAgICAtLSBTZXQgVVNCX0RJU0FCTEVfU1BEIGZsYWcgZm9yIHdyaXRlIGJ1bGsgdXJicywgc28gbm8gMCBsZW5ndGgKKyogICAgICAgYnVsayB3cml0ZXMgYXJlIGRvbmUuICBUaGVzZSBodW5nIHRoZSBEaWdpIFVTQiBkZXZpY2UuICBUaGUKKyogICAgICAgMCBsZW5ndGggYnVsayB3cml0ZXMgd2VyZSBhIG5ldyBmZWF0dXJlIG9mIHVzYi11aGNpIGFkZGVkIGluCisqICAgICAgIHRoZSAyLjQuMC10ZXN0NiBrZXJuZWxzLgorKiAgICAtLSBGaXhlZCBtb2QgaW5jIHJhY2UgaW4gb3BlbjsgZG8gbW9kIGluYyBiZWZvcmUgc2xlZXBpbmcgdG8gd2FpdAorKiAgICAgICBmb3IgYSBjbG9zZSB0byBmaW5pc2guCisqCisqICAoNy8zMS8yMDAwKSBwYmVyZ2VyCisqICAgIC0tIEZpeGVkIGJ1Z3Mgd2l0aCBoYXJkd2FyZSBoYW5kc2hha2luZzoKKyogICAgICAgLSBBZGRlZCBjb2RlIHRvIHNldC9jbGVhciB0dHktPmh3X3N0b3BwZWQgaW4gZGlnaV9yZWFkX29vYl9jYWxsYmFjaygpCisqICAgICAgICAgYW5kIGRpZ2lfc2V0X3Rlcm1pb3MoKQorKiAgICAtLSBBZGRlZCBjb2RlIGluIGRpZ2lfc2V0X3Rlcm1pb3MoKSB0bworKiAgICAgICAtIGFkZCBjb25kaXRpb25hbCBpbiBjb2RlIGhhbmRsaW5nIHRyYW5zaXRpb24gZnJvbSBCMCB0byBvbmx5CisqICAgICAgICAgc2V0IFJUUyBpZiBSVFMvQ1RTIGZsb3cgY29udHJvbCBpcyBlaXRoZXIgbm90IGluIHVzZSBvciBpZgorKiAgICAgICAgIHRoZSBwb3J0IGlzIG5vdCBjdXJyZW50bHkgdGhyb3R0bGVkLgorKiAgICAgICAtIGhhbmRsZSB0dXJuaW5nIG9mZiBDUlRTQ1RTLgorKgorKiAgKDcvMzAvMjAwMCkgYm9yY2hlcnMKKyogICAgLS0gQWRkZWQgc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSBEaWdpIFVTQiBkZXZpY2UgYnkgbW92aW5nCisqICAgICAgIGdsb2JhbHMgdG8gYSBwcml2YXRlIHN0cnVjdHVyZSBpbiB0aGUgcG9pbnRlZCB0byBmcm9tIHRoZQorKiAgICAgICB1c2Jfc2VyaWFsIHN0cnVjdHVyZS4KKyogICAgLS0gTW92ZWQgdGhlIG1vZGVtIGNoYW5nZSBhbmQgdHJhbnNtaXQgaWRsZSB3YWl0IHF1ZXVlcyBpbnRvCisqICAgICAgIHRoZSBwb3J0IHByaXZhdGUgc3RydWN0dXJlLCBzbyBlYWNoIHBvcnQgaGFzIGl0cyBvd24gcXVldWUKKyogICAgICAgcmF0aGVyIHRoYW4gc2hhcmluZyBnbG9iYWwgcXVldWVzLgorKiAgICAtLSBBZGRlZCBzdXBwb3J0IGZvciBicmVhayBzaWduYWxzLgorKgorKiAgKDcvMjUvMjAwMCkgcGJlcmdlcgorKiAgICAtLSBBZGRlZCBVU0ItMiBzdXBwb3J0LiAgTm90ZTogdGhlIFVTQi0yIHN1cHBvcnRzIDMgZGV2aWNlczogdHdvCisqICAgICAgIHNlcmlhbCBhbmQgYSBwYXJhbGxlbCBwb3J0LiAgVGhlIHBhcmFsbGVsIHBvcnQgaXMgaW1wbGVtZW50ZWQKKyogICAgICAgYXMgYSBzZXJpYWwtdG8tcGFyYWxsZWwgY29udmVydGVyLiAgVGhhdCBpcywgdGhlIGRyaXZlciBhY3R1YWxseQorKiAgICAgICBwcmVzZW50cyBhbGwgdGhyZWUgVVNCLTIgaW50ZXJmYWNlcyBhcyBzZXJpYWwgcG9ydHMsIGJ1dCB0aGUgdGhpcmQKKyogICAgICAgb25lIHBoeXNpY2FsbHkgY29ubmVjdHMgdG8gYSBwYXJhbGxlbCBkZXZpY2UuICBUaHVzLCBmb3IgZXhhbXBsZSwKKyogICAgICAgb25lIGNvdWxkIHBsdWcgYSBwYXJhbGxlbCBwcmludGVyIGludG8gdGhlIFVTQi0yJ3MgdGhpcmQgcG9ydCwKKyogICAgICAgYnV0IGZyb20gdGhlIGtlcm5lbCdzIChhbmQgdXNlcmxhbmQncykgcG9pbnQgb2YgdmlldyB3aGF0J3MKKyogICAgICAgYWN0dWFsbHkgb3V0IHRoZXJlIGlzIGEgc2VyaWFsIGRldmljZS4KKyoKKyogICg3LzE1LzIwMDApIGJvcmNoZXJzCisqICAgIC0tIEZpeGVkIHJhY2UgaW4gb3BlbiB3aGVuIGEgY2xvc2UgaXMgaW4gcHJvZ3Jlc3MuCisqICAgIC0tIEtlZXAgY291bnQgb2Ygb3BlbnMgYW5kIGRlYyB0aGUgbW9kdWxlIHVzZSBjb3VudCBmb3IgZWFjaAorKiAgICAgICBvdXRzdGFuZGluZyBvcGVuIHdoZW4gc2h1dGRvd24gaXMgY2FsbGVkIChvbiBkaXNjb25uZWN0KS4KKyogICAgLS0gRml4ZWQgc2FuaXR5IGNoZWNrcyBpbiByZWFkX2J1bGtfY2FsbGJhY2sgYW5kIHdyaXRlX2J1bGtfY2FsbGJhY2sKKyogICAgICAgc28gcG9pbnRlcnMgYXJlIGNoZWNrZWQgYmVmb3JlIHVzZS4KKyogICAgLS0gU3BsaXQgcmVhZCBidWxrIGNhbGxiYWNrIGludG8gaW4gYmFuZCBhbmQgb3V0IG9mIGJhbmQKKyogICAgICAgY2FsbGJhY2tzLCBhbmQgbm8gbG9uZ2VyIHJlc3RhcnQgcmVhZCBjaGFpbnMgaWYgdGhlcmUgaXMKKyogICAgICAgYSBzdGF0dXMgZXJyb3Igb3IgYSBzYW5pdHkgZXJyb3IuICBUaGlzIGZpeGVkIHRoZSBzZWcKKyogICAgICAgZmF1bHRzIGFuZCBvdGhlciBlcnJvcnMgd2UgdXNlZCB0byBnZXQgb24gZGlzY29ubmVjdC4KKyogICAgLS0gUG9ydC0+YWN0aXZlIGlzIG9uY2UgYWdhaW4gYSBmbGFnIGFzIHVzYi1zZXJpYWwgaW50ZW5kZWQgaXQKKyogICAgICAgdG8gYmUsIG5vdCBhIGNvdW50LiAgU2luY2UgaXQgd2FzIG9ubHkgYSBjaGFyIGl0IHdvdWxkCisqICAgICAgIGhhdmUgYmVlbiBsaW1pdGVkIHRvIDI1NiBzaW11bHRhbmVvdXMgb3BlbnMuICBOb3cgdGhlIG9wZW4KKyogICAgICAgY291bnQgaXMga2VwdCBpbiB0aGUgcG9ydCBwcml2YXRlIHN0cnVjdHVyZSBpbiBkcF9vcGVuX2NvdW50LgorKiAgICAtLSBBZGRlZCBjb2RlIGZvciBtb2R1bGFyaXphdGlvbiBvZiB0aGUgZGlnaV9hY2NlbGVwb3J0IGRyaXZlci4KKyoKKyogICg2LzI3LzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIFplcm9lZCBvdXQgc3luYyBmaWVsZCBpbiB0aGUgd2FrZXVwX3Rhc2sgYmVmb3JlIGZpcnN0IHVzZTsKKyogICAgICAgb3RoZXJ3aXNlIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIG1pZ2h0IHByZXZlbnQgdGhlIHRhc2sgZnJvbQorKiAgICAgICBiZWluZyBzY2hlZHVsZWQuCisqICAgIC0tIEluaXRpYWxpemVkIHJldCB2YWx1ZSB0byAwIGluIHdyaXRlX2J1bGtfY2FsbGJhY2ssIG90aGVyd2lzZQorKiAgICAgICB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBjb3VsZCBjYXVzZSBhIHNwdXJpb3VzIGRlYnVnZ2luZyBtZXNzYWdlLgorKgorKiAgKDYvMjIvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gTWFkZSBjb25kX3dhaXRfLi4uIGlubGluZS0tYXBwYXJlbnRseSBvbiBTUEFSQyB0aGUgZmxhZ3MgYXJnCisqICAgICAgIHRvIHNwaW5fbG9ja19pcnFzYXZlIGNhbm5vdCBiZSBwYXNzZWQgdG8gYW5vdGhlciBmdW5jdGlvbgorKiAgICAgICB0byBjYWxsIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUuICBUaGFua3MgdG8gUGF1bGluZSBNaWRkZWxpbmsuCisqICAgIC0tIEluIGRpZ2lfc2V0X21vZGVtX3NpZ25hbHMgdGhlIGlubmVyIG5lc3RlZCBzcGluIGxvY2tzIHVzZSBqdXN0CisqICAgICAgIHNwaW5fbG9jaygpIHJhdGhlciB0aGFuIHNwaW5fbG9ja19pcnFzYXZlKCkuICBUaGUgb2xkIGNvZGUKKyogICAgICAgbWlzdGFrZW5seSBsZWZ0IGludGVycnVwdHMgb2ZmLiAgVGhhbmtzIHRvIFBhdWxpbmUgTWlkZGVsaW5rLgorKiAgICAtLSBjb3B5X2Zyb21fdXNlciAod2hpY2ggY2FuIHNsZWVwKSBpcyBubyBsb25nZXIgY2FsbGVkIHdoaWxlIGEKKyogICAgICAgc3BpbmxvY2sgaXMgaGVsZC4gIFdlIGNvcHkgdG8gYSBsb2NhbCBidWZmZXIgYmVmb3JlIGdldHRpbmcKKyogICAgICAgdGhlIHNwaW5sb2NrLS1kb24ndCBsaWtlIHRoZSBleHRyYSBjb3B5IGJ1dCB0aGUgY29kZSBpcyBzaW1wbGVyLgorKiAgICAtLSBQcmludGsgYW5kIGRiZyBhcmUgbm8gbG9uZ2VyIGNhbGxlZCB3aGlsZSBhIHNwaW4gbG9jayBpcyBoZWxkLgorKgorKiAgKDYvNC8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBSZXBsYWNlZCBzZXBhcmF0ZSBjYWxscyB0byBzcGluX3VubG9ja19pcnFyZXN0b3JlIGFuZAorKiAgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgd2l0aCBhIG5ldyBmdW5jdGlvbgorKiAgICAgICBjb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUuICBUaGlzIGVsaW1pbmF0ZXMKKyogICAgICAgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSB3YWtlIHVwIGNvdWxkIGhhcHBlbiBhZnRlcgorKiAgICAgICB0aGUgdW5sb2NrIGFuZCBiZWZvcmUgdGhlIHNsZWVwLgorKiAgICAtLSBDbG9zZSBub3cgd2FpdHMgZm9yIG91dHB1dCB0byBkcmFpbi4KKyogICAgLS0gT3BlbiB3YWl0cyB1bnRpbCBhbnkgY2xvc2UgaW4gcHJvZ3Jlc3MgaXMgZmluaXNoZWQuCisqICAgIC0tIEFsbCBvdXQgb2YgYmFuZCByZXNwb25zZXMgYXJlIG5vdyBwcm9jZXNzZWQsIG5vdCBqdXN0IHRoZQorKiAgICAgICBmaXJzdCBpbiBhIFVTQiBwYWNrZXQuCisqICAgIC0tIEZpeGVkIGEgYnVnIHRoYXQgcHJldmVudGVkIHRoZSBkcml2ZXIgZnJvbSB3b3JraW5nIHdoZW4gdGhlCisqICAgICAgIGZpcnN0IERpZ2kgcG9ydCB3YXMgbm90IHRoZSBmaXJzdCBVU0Igc2VyaWFsIHBvcnQtLXRoZSBkcml2ZXIKKyogICAgICAgd2FzIG1pc3Rha2VubHkgdXNpbmcgdGhlIGV4dGVybmFsIFVTQiBzZXJpYWwgcG9ydCBudW1iZXIgdG8KKyogICAgICAgdHJ5IHRvIGluZGV4IGludG8gaXRzIGludGVybmFsIHBvcnRzLgorKiAgICAtLSBGaXhlZCBhbiBTTVAgYnVnIC0tIHdyaXRlX2J1bGtfY2FsbGJhY2sgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20KKyogICAgICAgYW4gaW50ZXJydXB0LCBzbyBzcGluX2xvY2tfaXJxc2F2ZS9zcGluX3VubG9ja19pcnFyZXN0b3JlIGFyZQorKiAgICAgICBuZWVkZWQgZm9yIGxvY2tzIG91dHNpZGUgd3JpdGVfYnVsa19jYWxsYmFjayB0aGF0IGFyZSBhbHNvCisqICAgICAgIGFjcXVpcmVkIGJ5IHdyaXRlX2J1bGtfY2FsbGJhY2sgdG8gcHJldmVudCBkZWFkbG9ja3MuCisqICAgIC0tIEZpeGVkIHN1cHBvcnQgZm9yIHNlbGVjdCgpIGJ5IG1ha2luZyBkaWdpX2NoYXJzX2luX2J1ZmZlcigpCisqICAgICAgIHJldHVybiAyNTYgd2hlbiAtRUlOUFJPR1JFU1MgaXMgc2V0LCBhcyB0aGUgbGluZSBkaXNjaXBsaW5lCisqICAgICAgIGNvZGUgaW4gbl90dHkuYyBleHBlY3RzLgorKiAgICAtLSBGaXhlZCBhbiBpbmNsdWRlIGZpbGUgb3JkZXJpbmcgcHJvYmxlbSB0aGF0IHByZXZlbnRlZCBkZWJ1Z2dpbmcKKyogICAgICAgbWVzc2FnZXMgZnJvbSB3b3JraW5nLgorKiAgICAtLSBGaXhlZCBhbiBpbnRlcm1pdHRlbnQgdGltZW91dCBwcm9ibGVtIHRoYXQgY2F1c2VkIHdyaXRlcyB0bworKiAgICAgICBzb21ldGltZXMgZ2V0IHN0dWNrIG9uIHNvbWUgbWFjaGluZXMgb24gc29tZSBrZXJuZWxzLiAgSXQgdHVybnMKKyogICAgICAgb3V0IGluIHRoZXNlIGNpcmN1bXN0YW5jZXMgd3JpdGVfY2hhbigpIChpbiBuX3R0eS5jKSB3YXMKKyogICAgICAgYXNsZWVwIHdhaXRpbmcgZm9yIG91ciB3YWtldXAgY2FsbC4gIEV2ZW4gdGhvdWdoIHdlIGNhbGwKKyogICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCkgaW4gZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKCksIHRoZXJlIGlzCisqICAgICAgIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBjYXVzZSB0aGUgd2FrZXVwIHRvIGZhaWw6IGlmIG91cgorKiAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoKSBjYWxsIG9jY3VycyBiZXR3ZWVuIHRoZSB0aW1lIHRoYXQgb3VyCisqICAgICAgIGRyaXZlciB3cml0ZSByb3V0aW5lIGZpbmlzaGVzIGFuZCB3cml0ZV9jaGFuKCkgc2V0cyBjdXJyZW50LT5zdGF0ZQorKiAgICAgICB0byBUQVNLX0lOVEVSUlVQVElCTEUsIHRoZSBlZmZlY3Qgb2Ygb3VyIHdha2V1cCBzZXR0aW5nIHRoZSBzdGF0ZQorKiAgICAgICB0byBUQVNLX1JVTk5JTkcgd2lsbCBiZSBsb3N0IGFuZCB3cml0ZV9jaGFuJ3Mgc3Vic2VxdWVudCBjYWxsIHRvCisqICAgICAgIHNjaGVkdWxlKCkgd2lsbCBuZXZlciByZXR1cm4gKHVubGVzcyBpdCBjYXRjaGVzIGEgc2lnbmFsKS4KKyogICAgICAgVGhpcyByYWNlIGNvbmRpdGlvbiBvY2N1cnMgYmVjYXVzZSB3cml0ZV9idWxrX2NhbGxiYWNrKCkgKGFuZCB0aHVzCisqICAgICAgIHRoZSB3YWtldXApIGFyZSBjYWxsZWQgYXN5bmNob25vdXNseSBmcm9tIGFuIGludGVycnVwdCwgcmF0aGVyIHRoYW4KKyogICAgICAgZnJvbSB0aGUgc2NoZWR1bGVyLiAgV2UgY2FuIGF2b2lkIHRoZSByYWNlIGJ5IGNhbGxpbmcgdGhlIHdha2V1cAorKiAgICAgICBmcm9tIHRoZSBzY2hlZHVsZXIgcXVldWUgYW5kIHRoYXQncyBvdXIgZml4OiAgTm93LCBhdCB0aGUgZW5kIG9mCisqICAgICAgIHdyaXRlX2J1bGtfY2FsbGJhY2soKSB3ZSBxdWV1ZSB1cCBhIHdha2V1cCBjYWxsIG9uIHRoZSBzY2hlZHVsZXIKKyogICAgICAgdGFzayBxdWV1ZS4gIFdlIHN0aWxsIGFsc28gaW52b2tlIHRoZSB3YWtldXAgZGlyZWN0bHkgc2luY2UgdGhhdAorKiAgICAgICBzcXVlZXplcyBhIGJpdCBtb3JlIHBlcmZvcm1hbmNlIG91dCBvZiB0aGUgZHJpdmVyLCBhbmQgYW55IGxvc3QKKyogICAgICAgcmFjZSBjb25kaXRpb25zIHdpbGwgZ2V0IGNsZWFuZWQgdXAgYXQgdGhlIG5leHQgc2NoZWR1bGVyIHJ1bi4KKyoKKyogICAgICAgTk9URTogIFRoZSBwcm9ibGVtIGFsc28gZ29lcyBhd2F5IGlmIHlvdSBjb21tZW50IG91dAorKiAgICAgICB0aGUgdHdvIGNvZGUgbGluZXMgaW4gd3JpdGVfY2hhbigpIHdoZXJlIGN1cnJlbnQtPnN0YXRlCisqICAgICAgIGlzIHNldCB0byBUQVNLX1JVTk5JTkcganVzdCBiZWZvcmUgY2FsbGluZyBkcml2ZXIud3JpdGUoKSBhbmQgdG8KKyogICAgICAgVEFTS19JTlRFUlJVUFRJQkxFIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuICBUaGlzIGlzIHdoeSB0aGUKKyogICAgICAgcHJvYmxlbSBkaWQgbm90IHNob3cgdXAgd2l0aCB0aGUgMi4yIGtlcm5lbHMgLS0gdGhleSBkbyBub3QKKyogICAgICAgaW5jbHVkZSB0aGF0IGNvZGUuCisqCisqICAoNS8xNi8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBBZGRlZCB0aW1lb3V0cyB0byBzbGVlcHMsIHRvIGRlZmVuZCBhZ2FpbnN0IGxvc3Qgd2FrZSB1cHMuCisqICAgIC0tIEhhbmRsZSB0cmFuc2l0aW9uIHRvL2Zyb20gQjAgYmF1ZCByYXRlIGluIGRpZ2lfc2V0X3Rlcm1pb3MuCisqCisqICAoNS8xMy8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBBbGwgY29tbWFuZHMgbm93IHNlbnQgb24gb3V0IG9mIGJhbmQgcG9ydCwgdXNpbmcKKyogICAgICAgZGlnaV93cml0ZV9vb2JfY29tbWFuZC4KKyogICAgLS0gR2V0IG1vZGVtIGNvbnRyb2wgc2lnbmFscyB3aGVuZXZlciB0aGV5IGNoYW5nZSwgc3VwcG9ydCBUSU9DTUdFVC8KKyogICAgICAgU0VUL0JJUy9CSUMgaW9jdGxzLgorKiAgICAtLSBkaWdpX3NldF90ZXJtaW9zIG5vdyBzdXBwb3J0cyBwYXJpdHksIHdvcmQgc2l6ZSwgc3RvcCBiaXRzLCBhbmQKKyogICAgICAgcmVjZWl2ZSBlbmFibGUuCisqICAgIC0tIENsZWFuZWQgdXAgb3BlbiBhbmQgY2xvc2UsIHVzZSBkaWdpX3NldF90ZXJtaW9zIGFuZAorKiAgICAgICBkaWdpX3dyaXRlX29vYl9jb21tYW5kIHRvIHNldCBwb3J0IHBhcmFtZXRlcnMuCisqICAgIC0tIEFkZGVkIGRpZ2lfc3RhcnR1cF9kZXZpY2UgdG8gc3RhcnQgcmVhZCBjaGFpbnMgb24gYWxsIHBvcnRzLgorKiAgICAtLSBXcml0ZSBidWZmZXIgaXMgb25seSB1c2VkIHdoZW4gY291bnQ9PTEsIHRvIGJlIHN1cmUgcHV0X2NoYXIgY2FuCisqICAgICAgIHdyaXRlIGEgY2hhciAodW5sZXNzIHRoZSBidWZmZXIgaXMgZnVsbCkuCisqCisqICAoNS8xMC8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBBZGRlZCBNT0RfSU5DX1VTRV9DT1VOVC9NT0RfREVDX1VTRV9DT1VOVCBjYWxscyBvbiBvcGVuL2Nsb3NlLgorKiAgICAtLSBGaXhlZCBwcm9ibGVtIHdoZXJlIHRoZSBmaXJzdCBpbmNvbWluZyBjaGFyYWN0ZXIgaXMgbG9zdCBvbgorKiAgICAgICBwb3J0IG9wZW5zIGFmdGVyIHRoZSBmaXJzdCBjbG9zZSBvbiB0aGF0IHBvcnQuICBOb3cgd2Uga2VlcAorKiAgICAgICB0aGUgcmVhZF91cmIgY2hhaW4gb3BlbiB1bnRpbCBzaHV0ZG93bi4KKyogICAgLS0gQWRkZWQgbW9yZSBwb3J0IGNvbmRpdGlvbmluZyBjYWxscyBpbiBkaWdpX29wZW4gYW5kIGRpZ2lfY2xvc2UuCisqICAgIC0tIENvbnZlcnQgcG9ydC0+YWN0aXZlIHRvIGEgdXNlIGNvdW50IHNvIHRoYXQgd2UgY2FuIGRlYWwgd2l0aCBtdWx0aXBsZQorKiAgICAgICBvcGVucyBhbmQgY2xvc2VzIHByb3Blcmx5LgorKiAgICAtLSBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggdGhlIGxvY2tpbmcgY29kZS4KKyoKKyogICg1LzMvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gRmlyc3QgYWxwaGEgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLS1tYW55IGtub3duIGxpbWl0YXRpb25zIGFuZCBidWdzLgorKgorKgorKiAgTG9ja2luZyBhbmQgU01QCisqCisqICAtIEVhY2ggcG9ydCwgaW5jbHVkaW5nIHRoZSBvdXQtb2YtYmFuZCBwb3J0LCBoYXMgYSBsb2NrIHVzZWQgdG8KKyogICAgc2VyaWFsaXplIGFsbCBhY2Nlc3MgdG8gdGhlIHBvcnQncyBwcml2YXRlIHN0cnVjdHVyZS4KKyogIC0gVGhlIHBvcnQgbG9jayBpcyBhbHNvIHVzZWQgdG8gc2VyaWFsaXplIGFsbCB3cml0ZXMgYW5kIGFjY2VzcyB0bworKiAgICB0aGUgcG9ydCdzIFVSQi4KKyogIC0gVGhlIHBvcnQgbG9jayBpcyBhbHNvIHVzZWQgZm9yIHRoZSBwb3J0IHdyaXRlX3dhaXQgY29uZGl0aW9uCisqICAgIHZhcmlhYmxlLiAgSG9sZGluZyB0aGUgcG9ydCBsb2NrIHdpbGwgcHJldmVudCBhIHdha2UgdXAgb24gdGhlCisqICAgIHBvcnQncyB3cml0ZV93YWl0OyB0aGlzIGNhbiBiZSB1c2VkIHdpdGggY29uZF93YWl0Xy4uLiB0byBiZSBzdXJlCisqICAgIHRoZSB3YWtlIHVwIGlzIG5vdCBsb3N0IGluIGEgcmFjZSB3aGVuIGRyb3BwaW5nIHRoZSBsb2NrIGFuZAorKiAgICBzbGVlcGluZyB3YWl0aW5nIGZvciB0aGUgd2FrZXVwLgorKiAgLSBkaWdpX3dyaXRlKCkgZG9lcyBub3Qgc2xlZXAsIHNpbmNlIGl0IGlzIHNvbWV0aW1lcyBjYWxsZWQgb24KKyogICAgaW50ZXJydXB0IHRpbWUuCisqICAtIGRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjaygpIGFuZCBkaWdpX3JlYWRfYnVsa19jYWxsYmFjaygpIGFyZQorKiAgICBjYWxsZWQgZGlyZWN0bHkgZnJvbSBpbnRlcnJ1cHRzLiAgSGVuY2Ugc3Bpbl9sb2NrX2lycXNhdmUoKQorKiAgICBhbmQgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgpIGFyZSB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlCisqICAgIGZvciBhbnkgbG9ja3MgdGhleSBhY3F1aXJlLgorKiAgLSBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soKSBnZXRzIHRoZSBwb3J0IGxvY2sgYmVmb3JlIHdha2luZyB1cAorKiAgICBwcm9jZXNzZXMgc2xlZXBpbmcgb24gdGhlIHBvcnQgd3JpdGVfd2FpdC4gIEl0IGFsc28gc2NoZWR1bGVzCisqICAgIHdha2UgdXBzIHNvIHRoZXkgaGFwcGVuIGZyb20gdGhlIHNjaGVkdWxlciwgYmVjYXVzZSB0aGUgdHR5CisqICAgIHN5c3RlbSBjYW4gbWlzcyB3YWtlIHVwcyBmcm9tIGludGVycnVwdHMuCisqICAtIEFsbCBzbGVlcHMgdXNlIGEgdGltZW91dCBvZiBESUdJX1JFVFJZX1RJTUVPVVQgYmVmb3JlIGxvb3BpbmcgdG8KKyogICAgcmVjaGVjayB0aGUgY29uZGl0aW9uIHRoZXkgYXJlIHNsZWVwaW5nIG9uLiAgVGhpcyBpcyBkZWZlbnNpdmUsCisqICAgIGluIGNhc2UgYSB3YWtlIHVwIGlzIGxvc3QuCisqICAtIEZvbGxvd2luZyBEb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWxvY2tpbmcucGRmIG5vIHNwaW4gbG9ja3MKKyogICAgYXJlIGhlbGQgd2hlbiBjYWxsaW5nIGNvcHlfdG8vZnJvbV91c2VyIG9yIHByaW50ay4KKyogICAgCisqICAkSWQ6IGRpZ2lfYWNjZWxlcG9ydC5jLHYgMS44MC4xLjIgMjAwMC8xMS8wMiAwNTo0NTowOCByb290IEV4cCAkCisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKiBEZWZpbmVzICovCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjgwLjEuMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUGV0ZXIgQmVyZ2VyIDxwYmVyZ2VyQGJyaW1zb24uY29tPiwgQWwgQm9yY2hlcnMgPGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiRGlnaSBBY2NlbGVQb3J0IFVTQi0yL1VTQi00IFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyIgorCisvKiBwb3J0IG91dHB1dCBidWZmZXIgbGVuZ3RoIC0tIG11c3QgYmUgPD0gdHJhbnNmZXIgYnVmZmVyIGxlbmd0aCAtIDIgKi8KKy8qIHNvIHdlIGNhbiBiZSBzdXJlIHRvIHNlbmQgdGhlIGZ1bGwgYnVmZmVyIGluIG9uZSB1cmIgKi8KKyNkZWZpbmUgRElHSV9PVVRfQlVGX1NJWkUJCTgKKworLyogcG9ydCBpbnB1dCBidWZmZXIgbGVuZ3RoIC0tIG11c3QgYmUgPj0gdHJhbnNmZXIgYnVmZmVyIGxlbmd0aCAtIDMgKi8KKy8qIHNvIHdlIGNhbiBiZSBzdXJlIHRvIGhvbGQgYXQgbGVhc3Qgb25lIGZ1bGwgYnVmZmVyIGZyb20gb25lIHVyYiAqLworI2RlZmluZSBESUdJX0lOX0JVRl9TSVpFCQk2NAorCisvKiByZXRyeSB0aW1lb3V0IHdoaWxlIHNsZWVwaW5nICovCisjZGVmaW5lIERJR0lfUkVUUllfVElNRU9VVAkJKEhaLzEwKQorCisvKiB0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHR0eSBvdXRwdXQgdG8gZHJhaW4gaW4gY2xvc2UgKi8KKy8qIHRoaXMgZGVsYXkgaXMgdXNlZCB0d2ljZSBpbiBjbG9zZSwgc28gdGhlIHRvdGFsIGRlbGF5IGNvdWxkICovCisvKiBiZSB0d2ljZSB0aGlzIHZhbHVlICovCisjZGVmaW5lIERJR0lfQ0xPU0VfVElNRU9VVAkJKDUqSFopCisKKworLyogQWNjZWxlUG9ydCBVU0IgRGVmaW5lcyAqLworCisvKiBpZHMgKi8KKyNkZWZpbmUgRElHSV9WRU5ET1JfSUQJCQkweDA1YzUKKyNkZWZpbmUgRElHSV8yX0lECQkJMHgwMDAyCS8qIFVTQi0yICovCisjZGVmaW5lIERJR0lfNF9JRAkJCTB4MDAwNAkvKiBVU0ItNCAqLworCisvKiBjb21tYW5kcworICogIklOQiI6IGNhbiBiZSB1c2VkIG9uIHRoZSBpbi1iYW5kIGVuZHBvaW50CisgKiAiT09CIjogY2FuIGJlIHVzZWQgb24gdGhlIG91dC1vZi1iYW5kIGVuZHBvaW50CisgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX0JBVURfUkFURQkJCTAJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX1dPUkRfU0laRQkJCTEJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX1BBUklUWQkJCTIJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX1NUT1BfQklUUwkJCTMJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX0lOUFVUX0ZMT1dfQ09OVFJPTAkJNAkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfT1VUUFVUX0ZMT1dfQ09OVFJPTAk1CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9EVFJfU0lHTkFMCQkJNgkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfUlRTX1NJR05BTAkJCTcJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTCQk4CS8qICAgICAgT09CICovCisjZGVmaW5lIERJR0lfQ01EX0lGTFVTSF9GSUZPCQkJOQkvKiAgICAgIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9SRUNFSVZFX0VOQUJMRQkJCTEwCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX0JSRUFLX0NPTlRST0wJCQkxMQkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9MT0NBTF9MT09QQkFDSwkJCTEyCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1RSQU5TTUlUX0lETEUJCQkxMwkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9SRUFEX1VBUlRfUkVHSVNURVIJCTE0CS8qICAgICAgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1dSSVRFX1VBUlRfUkVHSVNURVIJCTE1CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX0FORF9VQVJUX1JFR0lTVEVSCQkxNgkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9PUl9VQVJUX1JFR0lTVEVSCQkxNwkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRU5EX0RBVEEJCQkxOAkvKiBJTkIgICAgICAqLworI2RlZmluZSBESUdJX0NNRF9SRUNFSVZFX0RBVEEJCQkxOQkvKiBJTkIgICAgICAqLworI2RlZmluZSBESUdJX0NNRF9SRUNFSVZFX0RJU0FCTEUJCTIwCS8qIElOQiAgICAgICovCisjZGVmaW5lIERJR0lfQ01EX0dFVF9QT1JUX1RZUEUJCQkyMQkvKiAgICAgIE9PQiAqLworCisvKiBiYXVkIHJhdGVzICovCisjZGVmaW5lIERJR0lfQkFVRF81MAkJCQkwCisjZGVmaW5lIERJR0lfQkFVRF83NQkJCQkxCisjZGVmaW5lIERJR0lfQkFVRF8xMTAJCQkJMgorI2RlZmluZSBESUdJX0JBVURfMTUwCQkJCTMKKyNkZWZpbmUgRElHSV9CQVVEXzIwMAkJCQk0CisjZGVmaW5lIERJR0lfQkFVRF8zMDAJCQkJNQorI2RlZmluZSBESUdJX0JBVURfNjAwCQkJCTYKKyNkZWZpbmUgRElHSV9CQVVEXzEyMDAJCQkJNworI2RlZmluZSBESUdJX0JBVURfMTgwMAkJCQk4CisjZGVmaW5lIERJR0lfQkFVRF8yNDAwCQkJCTkKKyNkZWZpbmUgRElHSV9CQVVEXzQ4MDAJCQkJMTAKKyNkZWZpbmUgRElHSV9CQVVEXzcyMDAJCQkJMTEKKyNkZWZpbmUgRElHSV9CQVVEXzk2MDAJCQkJMTIKKyNkZWZpbmUgRElHSV9CQVVEXzE0NDAwCQkJCTEzCisjZGVmaW5lIERJR0lfQkFVRF8xOTIwMAkJCQkxNAorI2RlZmluZSBESUdJX0JBVURfMjg4MDAJCQkJMTUKKyNkZWZpbmUgRElHSV9CQVVEXzM4NDAwCQkJCTE2CisjZGVmaW5lIERJR0lfQkFVRF81NzYwMAkJCQkxNworI2RlZmluZSBESUdJX0JBVURfNzY4MDAJCQkJMTgKKyNkZWZpbmUgRElHSV9CQVVEXzExNTIwMAkJCTE5CisjZGVmaW5lIERJR0lfQkFVRF8xNTM2MDAJCQkyMAorI2RlZmluZSBESUdJX0JBVURfMjMwNDAwCQkJMjEKKyNkZWZpbmUgRElHSV9CQVVEXzQ2MDgwMAkJCTIyCisKKy8qIGFyZ3VtZW50cyAqLworI2RlZmluZSBESUdJX1dPUkRfU0laRV81CQkJMAorI2RlZmluZSBESUdJX1dPUkRfU0laRV82CQkJMQorI2RlZmluZSBESUdJX1dPUkRfU0laRV83CQkJMgorI2RlZmluZSBESUdJX1dPUkRfU0laRV84CQkJMworCisjZGVmaW5lIERJR0lfUEFSSVRZX05PTkUJCQkwCisjZGVmaW5lIERJR0lfUEFSSVRZX09ERAkJCQkxCisjZGVmaW5lIERJR0lfUEFSSVRZX0VWRU4JCQkyCisjZGVmaW5lIERJR0lfUEFSSVRZX01BUksJCQkzCisjZGVmaW5lIERJR0lfUEFSSVRZX1NQQUNFCQkJNAorCisjZGVmaW5lIERJR0lfU1RPUF9CSVRTXzEJCQkwCisjZGVmaW5lIERJR0lfU1RPUF9CSVRTXzIJCQkxCisKKyNkZWZpbmUgRElHSV9JTlBVVF9GTE9XX0NPTlRST0xfWE9OX1hPRkYJMQorI2RlZmluZSBESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9SVFMJCTIKKyNkZWZpbmUgRElHSV9JTlBVVF9GTE9XX0NPTlRST0xfRFRSCQk0CisKKyNkZWZpbmUgRElHSV9PVVRQVVRfRkxPV19DT05UUk9MX1hPTl9YT0ZGCTEKKyNkZWZpbmUgRElHSV9PVVRQVVRfRkxPV19DT05UUk9MX0NUUwkJMgorI2RlZmluZSBESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfRFNSCQk0CisKKyNkZWZpbmUgRElHSV9EVFJfSU5BQ1RJVkUJCQkwCisjZGVmaW5lIERJR0lfRFRSX0FDVElWRQkJCQkxCisjZGVmaW5lIERJR0lfRFRSX0lOUFVUX0ZMT1dfQ09OVFJPTAkJMgorCisjZGVmaW5lIERJR0lfUlRTX0lOQUNUSVZFCQkJMAorI2RlZmluZSBESUdJX1JUU19BQ1RJVkUJCQkJMQorI2RlZmluZSBESUdJX1JUU19JTlBVVF9GTE9XX0NPTlRST0wJCTIKKyNkZWZpbmUgRElHSV9SVFNfVE9HR0xFCQkJCTMKKworI2RlZmluZSBESUdJX0ZMVVNIX1RYCQkJCTEKKyNkZWZpbmUgRElHSV9GTFVTSF9SWAkJCQkyCisjZGVmaW5lIERJR0lfUkVTVU1FX1RYCQkJCTQgLyogY2xlYXJzIHhvZmYgY29uZGl0aW9uICovCisKKyNkZWZpbmUgRElHSV9UUkFOU01JVF9OT1RfSURMRQkJCTAKKyNkZWZpbmUgRElHSV9UUkFOU01JVF9JRExFCQkJMQorCisjZGVmaW5lIERJR0lfRElTQUJMRQkJCQkwCisjZGVmaW5lIERJR0lfRU5BQkxFCQkJCTEKKworI2RlZmluZSBESUdJX0RFQVNTRVJUCQkJCTAKKyNkZWZpbmUgRElHSV9BU1NFUlQJCQkJMQorCisvKiBpbiBiYW5kIHN0YXR1cyBjb2RlcyAqLworI2RlZmluZSBESUdJX09WRVJSVU5fRVJST1IJCQk0CisjZGVmaW5lIERJR0lfUEFSSVRZX0VSUk9SCQkJOAorI2RlZmluZSBESUdJX0ZSQU1JTkdfRVJST1IJCQkxNgorI2RlZmluZSBESUdJX0JSRUFLX0VSUk9SCQkJMzIKKworLyogb3V0IG9mIGJhbmQgc3RhdHVzICovCisjZGVmaW5lIERJR0lfTk9fRVJST1IJCQkJMAorI2RlZmluZSBESUdJX0JBRF9GSVJTVF9QQVJBTUVURVIJCTEKKyNkZWZpbmUgRElHSV9CQURfU0VDT05EX1BBUkFNRVRFUgkJMgorI2RlZmluZSBESUdJX0lOVkFMSURfTElORQkJCTMKKyNkZWZpbmUgRElHSV9JTlZBTElEX09QQ09ERQkJCTQKKworLyogaW5wdXQgc2lnbmFscyAqLworI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19TTE9UCQkxCisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0VSUgkJMgorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19CVVNZCQk0CisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX1BFCQk4CisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0NUUwkJMTYKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfRFNSCQkzMgorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19SSQkJNjQKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfRENECQkxMjgKKworCisvKiBTdHJ1Y3R1cmVzICovCisKK3N0cnVjdCBkaWdpX3NlcmlhbCB7CisJc3BpbmxvY2tfdCBkc19zZXJpYWxfbG9jazsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpkc19vb2JfcG9ydDsJLyogb3V0LW9mLWJhbmQgcG9ydCAqLworCWludCBkc19vb2JfcG9ydF9udW07CQkJLyogaW5kZXggb2Ygb3V0LW9mLWJhbmQgcG9ydCAqLworCWludCBkc19kZXZpY2Vfc3RhcnRlZDsKK307CisKK3N0cnVjdCBkaWdpX3BvcnQgeworCXNwaW5sb2NrX3QgZHBfcG9ydF9sb2NrOworCWludCBkcF9wb3J0X251bTsKKwlpbnQgZHBfb3V0X2J1Zl9sZW47CisJdW5zaWduZWQgY2hhciBkcF9vdXRfYnVmW0RJR0lfT1VUX0JVRl9TSVpFXTsKKwlpbnQgZHBfaW5fYnVmX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGRwX2luX2J1ZltESUdJX0lOX0JVRl9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIGRwX2luX2ZsYWdfYnVmW0RJR0lfSU5fQlVGX1NJWkVdOworCWludCBkcF93cml0ZV91cmJfaW5fdXNlOworCXVuc2lnbmVkIGludCBkcF9tb2RlbV9zaWduYWxzOworCXdhaXRfcXVldWVfaGVhZF90IGRwX21vZGVtX2NoYW5nZV93YWl0OworCWludCBkcF90cmFuc21pdF9pZGxlOworCXdhaXRfcXVldWVfaGVhZF90IGRwX3RyYW5zbWl0X2lkbGVfd2FpdDsKKwlpbnQgZHBfdGhyb3R0bGVkOworCWludCBkcF90aHJvdHRsZV9yZXN0YXJ0OworCXdhaXRfcXVldWVfaGVhZF90IGRwX2ZsdXNoX3dhaXQ7CisJaW50IGRwX2luX2Nsb3NlOwkJCS8qIGNsb3NlIGluIHByb2dyZXNzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgZHBfY2xvc2Vfd2FpdDsJLyogd2FpdCBxdWV1ZSBmb3IgY2xvc2UgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHBfd2FrZXVwX3dvcms7Cit9OworCisKKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBkaWdpX3dha2V1cF93cml0ZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApOworc3RhdGljIHZvaWQgZGlnaV93YWtldXBfd3JpdGVfbG9jayh2b2lkICopOworc3RhdGljIGludCBkaWdpX3dyaXRlX29vYl9jb21tYW5kKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50LCBpbnQgaW50ZXJydXB0aWJsZSApOworc3RhdGljIGludCBkaWdpX3dyaXRlX2luYl9jb21tYW5kKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQgKTsKK3N0YXRpYyBpbnQgZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBpbnQgbW9kZW1fc2lnbmFscywgaW50IGludGVycnVwdGlibGUgKTsKK3N0YXRpYyBpbnQgZGlnaV90cmFuc21pdF9pZGxlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGxvbmcgdGltZW91dCApOworc3RhdGljIHZvaWQgZGlnaV9yeF90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBkaWdpX3J4X3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZGlnaV9zZXRfdGVybWlvcyggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zICk7CitzdGF0aWMgdm9pZCBkaWdpX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICk7CitzdGF0aWMgaW50IGRpZ2lfaW9jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnICk7CitzdGF0aWMgaW50IGRpZ2lfdGlvY21nZXQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlICk7CitzdGF0aWMgaW50IGRpZ2lfdGlvY21zZXQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhciApOworc3RhdGljIGludCBkaWdpX3dyaXRlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCApOworc3RhdGljIHZvaWQgZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICk7CitzdGF0aWMgaW50IGRpZ2lfd3JpdGVfcm9vbSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApOworc3RhdGljIGludCBkaWdpX2NoYXJzX2luX2J1ZmZlciggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApOworc3RhdGljIGludCBkaWdpX29wZW4oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwICk7CitzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCApOworc3RhdGljIGludCBkaWdpX3N0YXJ0dXBfZGV2aWNlKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICk7CitzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cCggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApOworc3RhdGljIHZvaWQgZGlnaV9zaHV0ZG93biggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApOworc3RhdGljIHZvaWQgZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKTsKK3N0YXRpYyBpbnQgZGlnaV9yZWFkX2luYl9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiICk7CitzdGF0aWMgaW50IGRpZ2lfcmVhZF9vb2JfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiApOworCisKKy8qIFN0YXRpY3MgKi8KKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV8yX0lEKSB9LAorCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV80X0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfMiBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfMl9JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlXzQgW10gPSB7CisJeyBVU0JfREVWSUNFKERJR0lfVkVORE9SX0lELCBESUdJXzRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGlnaV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImRpZ2lfYWNjZWxlcG9ydCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKKworLyogZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgRGlnaSBzZXJpYWwgY29udmVydGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBkaWdpX2FjY2VsZXBvcnRfMl9kZXZpY2UgPSB7CisJLm93bmVyID0JCQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJCSJEaWdpIDIgcG9ydCBVU0IgYWRhcHRlciIsCisJLnNob3J0X25hbWUgPQkJCSJkaWdpXzIiLAorCS5pZF90YWJsZSA9CQkJaWRfdGFibGVfMiwKKwkubnVtX2ludGVycnVwdF9pbiA9CQkwLAorCS5udW1fYnVsa19pbiA9CQkJNCwKKwkubnVtX2J1bGtfb3V0ID0JCQk0LAorCS5udW1fcG9ydHMgPQkJCTMsCisJLm9wZW4gPQkJCQlkaWdpX29wZW4sCisJLmNsb3NlID0JCQlkaWdpX2Nsb3NlLAorCS53cml0ZSA9CQkJZGlnaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQkJZGlnaV93cml0ZV9yb29tLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCQlkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CQlkaWdpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkuY2hhcnNfaW5fYnVmZmVyID0JCWRpZ2lfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQkJZGlnaV9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQkJZGlnaV9yeF91bnRocm90dGxlLAorCS5pb2N0bCA9CQkJZGlnaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJCWRpZ2lfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQkJZGlnaV9icmVha19jdGwsCisJLnRpb2NtZ2V0ID0JCQlkaWdpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQkJZGlnaV90aW9jbXNldCwKKwkuYXR0YWNoID0JCQlkaWdpX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCQlkaWdpX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGRpZ2lfYWNjZWxlcG9ydF80X2RldmljZSA9IHsKKwkub3duZXIgPQkJCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkJIkRpZ2kgNCBwb3J0IFVTQiBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkJImRpZ2lfNCIsCisJLmlkX3RhYmxlID0JCQlpZF90YWJsZV80LAorCS5udW1faW50ZXJydXB0X2luID0JCTAsCisJLm51bV9idWxrX2luID0JCQk1LAorCS5udW1fYnVsa19vdXQgPQkJCTUsCisJLm51bV9wb3J0cyA9CQkJNCwKKwkub3BlbiA9CQkJCWRpZ2lfb3BlbiwKKwkuY2xvc2UgPQkJCWRpZ2lfY2xvc2UsCisJLndyaXRlID0JCQlkaWdpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCQlkaWdpX3dyaXRlX3Jvb20sCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPSAJCWRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JCWRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5jaGFyc19pbl9idWZmZXIgPQkJZGlnaV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCQlkaWdpX3J4X3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCQlkaWdpX3J4X3VudGhyb3R0bGUsCisJLmlvY3RsID0JCQlkaWdpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQkJZGlnaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCQlkaWdpX2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkJCWRpZ2lfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCQlkaWdpX3Rpb2Ntc2V0LAorCS5hdHRhY2ggPQkJCWRpZ2lfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJCWRpZ2lfc2h1dGRvd24sCit9OworCisKKy8qIEZ1bmN0aW9ucyAqLworCisvKgorKiAgQ29uZCBXYWl0IEludGVycnVwdGlibGUgVGltZW91dCBJcnFyZXN0b3JlCisqCisqICBEbyBzcGluX3VubG9ja19pcnFyZXN0b3JlIGFuZCBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQKKyogIHNvIHRoYXQgd2FrZSB1cHMgYXJlIG5vdCBsb3N0IGlmIHRoZXkgb2NjdXIgYmV0d2VlbiB0aGUgdW5sb2NrCisqICBhbmQgdGhlIHNsZWVwLiAgSW4gb3RoZXIgd29yZHMsIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgYW5kCisqICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgYXJlICJhdG9taWMiIHdpdGggcmVzcGVjdCB0bworKiAgd2FrZSB1cHMuICBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZXMuCisqLworCitzdGF0aWMgaW5saW5lIGxvbmcgY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAorCXdhaXRfcXVldWVfaGVhZF90ICpxLCBsb25nIHRpbWVvdXQsCisJc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncyApCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlwcmVwYXJlX3RvX3dhaXQocSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKKwl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwlmaW5pc2hfd2FpdChxLCAmd2FpdCk7CisKKwlyZXR1cm4gdGltZW91dDsKKworfQorCisKKy8qCisqICBEaWdpIFdha2V1cCBXcml0ZQorKgorKiAgV2FrZSB1cCBwb3J0LCBsaW5lIGRpc2NpcGxpbmUsIGFuZCB0dHkgcHJvY2Vzc2VzIHNsZWVwaW5nCisqICBvbiB3cml0ZXMuCisqLworCitzdGF0aWMgdm9pZCBkaWdpX3dha2V1cF93cml0ZV9sb2NrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gYXJnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJZGlnaV93YWtldXBfd3JpdGUoIHBvcnQgKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworfQorCitzdGF0aWMgdm9pZCBkaWdpX3dha2V1cF93cml0ZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCisKKwkvKiB3YWtlIHVwIHBvcnQgcHJvY2Vzc2VzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcG9ydC0+d3JpdGVfd2FpdCApOworCisJLyogd2FrZSB1cCBsaW5lIGRpc2NpcGxpbmUgKi8KKwl0dHlfd2FrZXVwKHR0eSk7Cit9CisKKworLyoKKyogIERpZ2kgV3JpdGUgT09CIENvbW1hbmQKKyoKKyogIFdyaXRlIGNvbW1hbmRzIG9uIHRoZSBvdXQgb2YgYmFuZCBwb3J0LiAgQ29tbWFuZHMgYXJlIDQKKyogIGJ5dGVzIGVhY2gsIG11bHRpcGxlIGNvbW1hbmRzIGNhbiBiZSBzZW50IGF0IG9uY2UsIGFuZAorKiAgbm8gY29tbWFuZCB3aWxsIGJlIHNwbGl0IGFjcm9zcyBVU0IgcGFja2V0cy4gIFJldHVybnMgMAorKiAgaWYgc3VjY2Vzc2Z1bCwgLUVJTlRSIGlmIGludGVycnVwdGVkIHdoaWxlIHNsZWVwaW5nIGFuZAorKiAgdGhlIGludGVycnVwdGlibGUgZmxhZyBpcyB0cnVlLCBvciBhIG5lZ2F0aXZlIGVycm9yCisqICByZXR1cm5lZCBieSB1c2Jfc3VibWl0X3VyYi4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV93cml0ZV9vb2JfY29tbWFuZCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwgaW50IGludGVycnVwdGlibGUgKQoreworCisJaW50IHJldCA9IDA7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpvb2JfcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopKChzdHJ1Y3QgZGlnaV9zZXJpYWwgKikodXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSktPmRzX29vYl9wb3J0OworCXN0cnVjdCBkaWdpX3BvcnQgKm9vYl9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKG9vYl9wb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCitkYmcoICJkaWdpX3dyaXRlX29vYl9jb21tYW5kOiBUT1A6IHBvcnQ9JWQsIGNvdW50PSVkIiwgb29iX3ByaXYtPmRwX3BvcnRfbnVtLCBjb3VudCApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJd2hpbGUoIGNvdW50ID4gMCApIHsKKworCQl3aGlsZSggb29iX3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCQl8fCBvb2JfcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSApIHsKKwkJCWNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKKwkJCQkmb29iX3BvcnQtPndyaXRlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKKwkJCQkmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJCWlmKCBpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgeworCQkJCXJldHVybiggLUVJTlRSICk7CisJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSggJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCX0KKworCQkvKiBsZW4gbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQsIHNvIGNvbW1hbmRzIGFyZSBub3Qgc3BsaXQgKi8KKwkJbGVuID0gbWluKGNvdW50LCBvb2JfcG9ydC0+YnVsa19vdXRfc2l6ZSApOworCQlpZiggbGVuID4gNCApCisJCQlsZW4gJj0gfjM7CisKKwkJbWVtY3B5KCBvb2JfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgbGVuICk7CisJCW9vYl9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJCW9vYl9wb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKG9vYl9wb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpKSA9PSAwICkgeworCQkJb29iX3ByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCQkJY291bnQgLT0gbGVuOworCQkJYnVmICs9IGxlbjsKKwkJfQorCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlpZiggcmV0ICkgeworCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXJldCApOworCX0KKworCXJldHVybiggcmV0ICk7CisKK30KKworCisvKgorKiAgRGlnaSBXcml0ZSBJbiBCYW5kIENvbW1hbmQKKyoKKyogIFdyaXRlIGNvbW1hbmRzIG9uIHRoZSBnaXZlbiBwb3J0LiAgQ29tbWFuZHMgYXJlIDQKKyogIGJ5dGVzIGVhY2gsIG11bHRpcGxlIGNvbW1hbmRzIGNhbiBiZSBzZW50IGF0IG9uY2UsIGFuZAorKiAgbm8gY29tbWFuZCB3aWxsIGJlIHNwbGl0IGFjcm9zcyBVU0IgcGFja2V0cy4gIElmIHRpbWVvdXQKKyogIGlzIG5vbi16ZXJvLCB3cml0ZSBpbiBiYW5kIGNvbW1hbmQgd2lsbCByZXR1cm4gYWZ0ZXIKKyogIHdhaXRpbmcgdW5zdWNjZXNzZnVsbHkgZm9yIHRoZSBVUkIgc3RhdHVzIHRvIGNsZWFyIGZvcgorKiAgdGltZW91dCB0aWNrcy4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlCisqICBlcnJvciByZXR1cm5lZCBieSBkaWdpX3dyaXRlLgorKi8KKworc3RhdGljIGludCBkaWdpX3dyaXRlX2luYl9jb21tYW5kKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQgKQoreworCisJaW50IHJldCA9IDA7CisJaW50IGxlbjsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCitkYmcoICJkaWdpX3dyaXRlX2luYl9jb21tYW5kOiBUT1A6IHBvcnQ9JWQsIGNvdW50PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sCitjb3VudCApOworCisJaWYoIHRpbWVvdXQgKQorCQl0aW1lb3V0ICs9IGppZmZpZXM7CisJZWxzZQorCQl0aW1lb3V0ID0gVUxPTkdfTUFYOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwl3aGlsZSggY291bnQgPiAwICYmIHJldCA9PSAwICkgeworCisJCXdoaWxlKCAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCisJCXx8IHByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCisJCQkJJnBvcnQtPndyaXRlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKKwkJCQkmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQkJaWYoIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgeworCQkJCXJldHVybiggLUVJTlRSICk7CisJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJfQorCisJCS8qIGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBhbmQgc21hbGwgZW5vdWdoIHRvICovCisJCS8qIGd1YXJhbnRlZSB0aGUgd3JpdGUgd2lsbCBzZW5kIGJ1ZmZlcmVkIGRhdGEgZmlyc3QsICovCisJCS8qIHNvIGNvbW1hbmRzIGFyZSBpbiBvcmRlciB3aXRoIGRhdGEgYW5kIG5vdCBzcGxpdCAqLworCQlsZW4gPSBtaW4oY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUtMi1wcml2LT5kcF9vdXRfYnVmX2xlbiApOworCQlpZiggbGVuID4gNCApCisJCQlsZW4gJj0gfjM7CisKKwkJLyogd3JpdGUgYW55IGJ1ZmZlcmVkIGRhdGEgZmlyc3QgKi8KKwkJaWYoIHByaXYtPmRwX291dF9idWZfbGVuID4gMCApIHsKKwkJCWRhdGFbMF0gPSBESUdJX0NNRF9TRU5EX0RBVEE7CisJCQlkYXRhWzFdID0gcHJpdi0+ZHBfb3V0X2J1Zl9sZW47CisJCQltZW1jcHkoIGRhdGErMiwgcHJpdi0+ZHBfb3V0X2J1ZiwKKwkJCQlwcml2LT5kcF9vdXRfYnVmX2xlbiApOworCQkJbWVtY3B5KCBkYXRhKzIrcHJpdi0+ZHBfb3V0X2J1Zl9sZW4sIGJ1ZiwgbGVuICk7CisJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgKKwkJCQk9IHByaXYtPmRwX291dF9idWZfbGVuKzIrbGVuOworCQl9IGVsc2UgeworCQkJbWVtY3B5KCBkYXRhLCBidWYsIGxlbiApOworCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOworCQl9CisJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwkJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCApIHsKKwkJCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCQkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPSAwOworCQkJY291bnQgLT0gbGVuOworCQkJYnVmICs9IGxlbjsKKwkJfQorCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCWlmKCByZXQgKSB7CisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLAorCQlyZXQsIHByaXYtPmRwX3BvcnRfbnVtICk7CisJfQorCisJcmV0dXJuKCByZXQgKTsKKworfQorCisKKy8qCisqICBEaWdpIFNldCBNb2RlbSBTaWduYWxzCisqCisqICBTZXRzIG9yIGNsZWFycyBEVFIgYW5kIFJUUyBvbiB0aGUgcG9ydCwgYWNjb3JkaW5nIHRvIHRoZQorKiAgbW9kZW1fc2lnbmFscyBhcmd1bWVudC4gIFVzZSBUSU9DTV9EVFIgYW5kIFRJT0NNX1JUUyBmbGFncworKiAgZm9yIHRoZSBtb2RlbV9zaWduYWxzIGFyZ3VtZW50LiAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsCisqICAtRUlOVFIgaWYgaW50ZXJydXB0ZWQgd2hpbGUgc2xlZXBpbmcsIG9yIGEgbm9uLXplcm8gZXJyb3IKKyogIHJldHVybmVkIGJ5IHVzYl9zdWJtaXRfdXJiLgorKi8KKworc3RhdGljIGludCBkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCBtb2RlbV9zaWduYWxzLCBpbnQgaW50ZXJydXB0aWJsZSApCit7CisKKwlpbnQgcmV0OworCXN0cnVjdCBkaWdpX3BvcnQgKnBvcnRfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpvb2JfcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopKChzdHJ1Y3QgZGlnaV9zZXJpYWwgKikodXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSktPmRzX29vYl9wb3J0OworCXN0cnVjdCBkaWdpX3BvcnQgKm9vYl9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKG9vYl9wb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gb29iX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKK2RiZyggImRpZ2lfc2V0X21vZGVtX3NpZ25hbHM6IFRPUDogcG9ydD0lZCwgbW9kZW1fc2lnbmFscz0weCV4IiwKK3BvcnRfcHJpdi0+ZHBfcG9ydF9udW0sIG1vZGVtX3NpZ25hbHMgKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlzcGluX2xvY2soICZwb3J0X3ByaXYtPmRwX3BvcnRfbG9jayApOworCisJd2hpbGUoIG9vYl9wb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwl8fCBvb2JfcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSApIHsKKwkJc3Bpbl91bmxvY2soICZwb3J0X3ByaXYtPmRwX3BvcnRfbG9jayApOworCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCisJCQkmb29iX3BvcnQtPndyaXRlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKKwkJCSZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQlpZiggaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSApIHsKKwkJCXJldHVybiggLUVJTlRSICk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoICZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQlzcGluX2xvY2soICZwb3J0X3ByaXYtPmRwX3BvcnRfbG9jayApOworCX0KKworCWRhdGFbMF0gPSBESUdJX0NNRF9TRVRfRFRSX1NJR05BTDsKKwlkYXRhWzFdID0gcG9ydF9wcml2LT5kcF9wb3J0X251bTsKKwlkYXRhWzJdID0gKG1vZGVtX3NpZ25hbHMmVElPQ01fRFRSKSA/CisJCURJR0lfRFRSX0FDVElWRSA6IERJR0lfRFRSX0lOQUNUSVZFOworCWRhdGFbM10gPSAwOworCisJZGF0YVs0XSA9IERJR0lfQ01EX1NFVF9SVFNfU0lHTkFMOworCWRhdGFbNV0gPSBwb3J0X3ByaXYtPmRwX3BvcnRfbnVtOworCWRhdGFbNl0gPSAobW9kZW1fc2lnbmFscyZUSU9DTV9SVFMpID8KKwkJRElHSV9SVFNfQUNUSVZFIDogRElHSV9SVFNfSU5BQ1RJVkU7CisJZGF0YVs3XSA9IDA7CisKKwlvb2JfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKKwlvb2JfcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKG9vYl9wb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpKSA9PSAwICkgeworCQlvb2JfcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDE7CisJCXBvcnRfcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyA9CisJCQkocG9ydF9wcml2LT5kcF9tb2RlbV9zaWduYWxzJn4oVElPQ01fRFRSfFRJT0NNX1JUUykpCisJCQl8IChtb2RlbV9zaWduYWxzJihUSU9DTV9EVFJ8VElPQ01fUlRTKSk7CisJfQorCisJc3Bpbl91bmxvY2soICZwb3J0X3ByaXYtPmRwX3BvcnRfbG9jayApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJaWYoIHJldCApIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCXJldCApOworCX0KKworCXJldHVybiggcmV0ICk7CisKK30KKworCisvKgorKiAgRGlnaSBUcmFuc21pdCBJZGxlCisqCisqICBEaWdpIHRyYW5zbWl0IGlkbGUgd2FpdHMsIHVwIHRvIHRpbWVvdXQgdGlja3MsIGZvciB0aGUgdHJhbnNtaXR0ZXIKKyogIHRvIGdvIGlkbGUuICBJdCByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yLgorKgorKiAgVGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyBoZXJlIGlmIG1vcmUgdGhhbiBvbmUgcHJvY2VzcyBpcyBjYWxsaW5nCisqICBkaWdpX3RyYW5zbWl0X2lkbGUgb24gdGhlIHNhbWUgcG9ydCBhdCB0aGUgc2FtZSB0aW1lLiAgSG93ZXZlciwgdGhpcworKiAgaXMgb25seSBjYWxsZWQgZnJvbSBjbG9zZSwgYW5kIG9ubHkgb25lIHByb2Nlc3MgY2FuIGJlIGluIGNsb3NlIG9uIGEKKyogIHBvcnQgYXQgYSB0aW1lLCBzbyBpdHMgb2suCisqLworCitzdGF0aWMgaW50IGRpZ2lfdHJhbnNtaXRfaWRsZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgKQoreworCisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlwcml2LT5kcF90cmFuc21pdF9pZGxlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJYnVmWzBdID0gRElHSV9DTURfVFJBTlNNSVRfSURMRTsKKwlidWZbMV0gPSAwOworCisJdGltZW91dCArPSBqaWZmaWVzOworCisJaWYoIChyZXQ9ZGlnaV93cml0ZV9pbmJfY29tbWFuZCggcG9ydCwgYnVmLCAyLCB0aW1lb3V0LWppZmZpZXMgKSkgIT0gMCApCisJCXJldHVybiggcmV0ICk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCXdoaWxlKCB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAhcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZSApIHsKKwkJY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAorCQkJJnByaXYtPmRwX3RyYW5zbWl0X2lkbGVfd2FpdCwgRElHSV9SRVRSWV9USU1FT1VULAorCQkJJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJaWYoIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgeworCQkJcmV0dXJuKCAtRUlOVFIgKTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwl9CisKKwlwcml2LT5kcF90cmFuc21pdF9pZGxlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJcmV0dXJuKCAwICk7CisKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX3J4X3Rocm90dGxlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCitkYmcoICJkaWdpX3J4X3Rocm90dGxlOiBUT1A6IHBvcnQ9JWQiLCBwcml2LT5kcF9wb3J0X251bSApOworCisJLyogc3RvcCByZWNlaXZpbmcgY2hhcmFjdGVycyBieSBub3QgcmVzdWJtaXR0aW5nIHRoZSByZWFkIHVyYiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXByaXYtPmRwX3Rocm90dGxlZCA9IDE7CisJcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7CisJcHJpdi0+ZHBfaW5fYnVmX2xlbiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfcnhfdW50aHJvdHRsZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCisKK2RiZyggImRpZ2lfcnhfdW50aHJvdHRsZTogVE9QOiBwb3J0PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJLyogc2VuZCBhbnkgYnVmZmVyZWQgY2hhcnMgZnJvbSB0aHJvdHRsZSB0aW1lIG9uIHRvIHR0eSBzdWJzeXN0ZW0gKi8KKwlsZW4gPSBtaW4ocHJpdi0+ZHBfaW5fYnVmX2xlbiwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCApOworCWlmKCBsZW4gPiAwICkgeworCQltZW1jcHkoIHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIHByaXYtPmRwX2luX2J1ZiwgbGVuICk7CisJCW1lbWNweSggdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgcHJpdi0+ZHBfaW5fZmxhZ19idWYsIGxlbiApOworCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IGxlbjsKKwkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciArPSBsZW47CisJCXR0eS0+ZmxpcC5jb3VudCArPSBsZW47CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKCB0dHkgKTsKKwl9CisKKwkvKiByZXN0YXJ0IHJlYWQgY2hhaW4gKi8KKwlpZiggcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCApIHsKKwkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMgKTsKKwl9CisKKwkvKiB0dXJuIHRocm90dGxlIG9mZiAqLworCXByaXYtPmRwX3Rocm90dGxlZCA9IDA7CisJcHJpdi0+ZHBfaW5fYnVmX2xlbiA9IDA7CisJcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJaWYoIHJldCApIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQlyZXQsIHByaXYtPmRwX3BvcnRfbnVtICk7CisJfQorCit9CisKKworc3RhdGljIHZvaWQgZGlnaV9zZXRfdGVybWlvcyggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zICkKK3sKKworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2lmbGFnID0gb2xkX3Rlcm1pb3MtPmNfaWZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOworCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKKwl1bnNpZ25lZCBpbnQgbW9kZW1fc2lnbmFsczsKKwlpbnQgYXJnLHJldDsKKwlpbnQgaSA9IDA7CisKKworZGJnKCAiZGlnaV9zZXRfdGVybWlvczogVE9QOiBwb3J0PSVkLCBpZmxhZz0weCV4LCBvbGRfaWZsYWc9MHgleCwgY2ZsYWc9MHgleCwgb2xkX2NmbGFnPTB4JXgiLCBwcml2LT5kcF9wb3J0X251bSwgaWZsYWcsIG9sZF9pZmxhZywgY2ZsYWcsIG9sZF9jZmxhZyApOworCisJLyogc2V0IGJhdWQgcmF0ZSAqLworCWlmKCAoY2ZsYWcmQ0JBVUQpICE9IChvbGRfY2ZsYWcmQ0JBVUQpICkgeworCisJCWFyZyA9IC0xOworCisJCS8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCisJCWlmKCAob2xkX2NmbGFnJkNCQVVEKSA9PSBCMCApIHsKKwkJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJCQkvKiBhbmQgdGhyb3R0bGluZyBpbnB1dCAqLworCQkJbW9kZW1fc2lnbmFscyA9IFRJT0NNX0RUUjsKKwkJCWlmKCAhKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHx8CisJCQkhdGVzdF9iaXQoVFRZX1RIUk9UVExFRCwgJnBvcnQtPnR0eS0+ZmxhZ3MpICkgeworCQkJCW1vZGVtX3NpZ25hbHMgfD0gVElPQ01fUlRTOworCQkJfQorCQkJZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggcG9ydCwgbW9kZW1fc2lnbmFscywgMSApOworCQl9CisKKwkJc3dpdGNoKCAoY2ZsYWcmQ0JBVUQpICkgeworCQkJLyogZHJvcCBEVFIgYW5kIFJUUyBvbiB0cmFuc2l0aW9uIHRvIEIwICovCisJCWNhc2UgQjA6IGRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHBvcnQsIDAsIDEgKTsgYnJlYWs7CisJCWNhc2UgQjUwOiBhcmcgPSBESUdJX0JBVURfNTA7IGJyZWFrOworCQljYXNlIEI3NTogYXJnID0gRElHSV9CQVVEXzc1OyBicmVhazsKKwkJY2FzZSBCMTEwOiBhcmcgPSBESUdJX0JBVURfMTEwOyBicmVhazsKKwkJY2FzZSBCMTUwOiBhcmcgPSBESUdJX0JBVURfMTUwOyBicmVhazsKKwkJY2FzZSBCMjAwOiBhcmcgPSBESUdJX0JBVURfMjAwOyBicmVhazsKKwkJY2FzZSBCMzAwOiBhcmcgPSBESUdJX0JBVURfMzAwOyBicmVhazsKKwkJY2FzZSBCNjAwOiBhcmcgPSBESUdJX0JBVURfNjAwOyBicmVhazsKKwkJY2FzZSBCMTIwMDogYXJnID0gRElHSV9CQVVEXzEyMDA7IGJyZWFrOworCQljYXNlIEIxODAwOiBhcmcgPSBESUdJX0JBVURfMTgwMDsgYnJlYWs7CisJCWNhc2UgQjI0MDA6IGFyZyA9IERJR0lfQkFVRF8yNDAwOyBicmVhazsKKwkJY2FzZSBCNDgwMDogYXJnID0gRElHSV9CQVVEXzQ4MDA7IGJyZWFrOworCQljYXNlIEI5NjAwOiBhcmcgPSBESUdJX0JBVURfOTYwMDsgYnJlYWs7CisJCWNhc2UgQjE5MjAwOiBhcmcgPSBESUdJX0JBVURfMTkyMDA7IGJyZWFrOworCQljYXNlIEIzODQwMDogYXJnID0gRElHSV9CQVVEXzM4NDAwOyBicmVhazsKKwkJY2FzZSBCNTc2MDA6IGFyZyA9IERJR0lfQkFVRF81NzYwMDsgYnJlYWs7CisJCWNhc2UgQjExNTIwMDogYXJnID0gRElHSV9CQVVEXzExNTIwMDsgYnJlYWs7CisJCWNhc2UgQjIzMDQwMDogYXJnID0gRElHSV9CQVVEXzIzMDQwMDsgYnJlYWs7CisJCWNhc2UgQjQ2MDgwMDogYXJnID0gRElHSV9CQVVEXzQ2MDgwMDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoICJkaWdpX3NldF90ZXJtaW9zOiBjYW4ndCBoYW5kbGUgYmF1ZCByYXRlIDB4JXgiLAorCQkJCShjZmxhZyZDQkFVRCkgKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYoIGFyZyAhPSAtMSApIHsKKwkJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX0JBVURfUkFURTsKKwkJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCQlidWZbaSsrXSA9IGFyZzsKKwkJCWJ1ZltpKytdID0gMDsKKwkJfQorCisJfQorCisJLyogc2V0IHBhcml0eSAqLworCWlmKCAoY2ZsYWcmKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnJihQQVJFTkJ8UEFST0REKSkgKSB7CisKKwkJaWYoIChjZmxhZyZQQVJFTkIpICkgeworCQkJaWYoIChjZmxhZyZQQVJPREQpICkKKwkJCQlhcmcgPSBESUdJX1BBUklUWV9PREQ7CisJCQllbHNlCisJCQkJYXJnID0gRElHSV9QQVJJVFlfRVZFTjsKKwkJfSBlbHNlIHsKKwkJCWFyZyA9IERJR0lfUEFSSVRZX05PTkU7CisJCX0KKworCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9QQVJJVFk7CisJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZltpKytdID0gYXJnOworCQlidWZbaSsrXSA9IDA7CisKKwl9CisKKwkvKiBzZXQgd29yZCBzaXplICovCisJaWYoIChjZmxhZyZDU0laRSkgIT0gKG9sZF9jZmxhZyZDU0laRSkgKSB7CisKKwkJYXJnID0gLTE7CisKKwkJc3dpdGNoKCAoY2ZsYWcmQ1NJWkUpICkgeworCQljYXNlIENTNTogYXJnID0gRElHSV9XT1JEX1NJWkVfNTsgYnJlYWs7CisJCWNhc2UgQ1M2OiBhcmcgPSBESUdJX1dPUkRfU0laRV82OyBicmVhazsKKwkJY2FzZSBDUzc6IGFyZyA9IERJR0lfV09SRF9TSVpFXzc7IGJyZWFrOworCQljYXNlIENTODogYXJnID0gRElHSV9XT1JEX1NJWkVfODsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoICJkaWdpX3NldF90ZXJtaW9zOiBjYW4ndCBoYW5kbGUgd29yZCBzaXplICVkIiwKKwkJCQkoY2ZsYWcmQ1NJWkUpICk7CisJCQlicmVhazsKKwkJfQorCisJCWlmKCBhcmcgIT0gLTEgKSB7CisJCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9XT1JEX1NJWkU7CisJCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQkJYnVmW2krK10gPSBhcmc7CisJCQlidWZbaSsrXSA9IDA7CisJCX0KKworCX0KKworCS8qIHNldCBzdG9wIGJpdHMgKi8KKwlpZiggKGNmbGFnJkNTVE9QQikgIT0gKG9sZF9jZmxhZyZDU1RPUEIpICkgeworCisJCWlmKCAoY2ZsYWcmQ1NUT1BCKSApCisJCQlhcmcgPSBESUdJX1NUT1BfQklUU18yOworCQllbHNlCisJCQlhcmcgPSBESUdJX1NUT1BfQklUU18xOworCisJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX1NUT1BfQklUUzsKKwkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmW2krK10gPSBhcmc7CisJCWJ1ZltpKytdID0gMDsKKworCX0KKworCS8qIHNldCBpbnB1dCBmbG93IGNvbnRyb2wgKi8KKwlpZiggKGlmbGFnJklYT0ZGKSAhPSAob2xkX2lmbGFnJklYT0ZGKQorCXx8IChjZmxhZyZDUlRTQ1RTKSAhPSAob2xkX2NmbGFnJkNSVFNDVFMpICkgeworCisJCWFyZyA9IDA7CisKKwkJaWYoIChpZmxhZyZJWE9GRikgKQorCQkJYXJnIHw9IERJR0lfSU5QVVRfRkxPV19DT05UUk9MX1hPTl9YT0ZGOworCQllbHNlCisJCQlhcmcgJj0gfkRJR0lfSU5QVVRfRkxPV19DT05UUk9MX1hPTl9YT0ZGOworCisJCWlmKCAoY2ZsYWcmQ1JUU0NUUykgKSB7CisKKwkJCWFyZyB8PSBESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9SVFM7CisKKwkJCS8qIE9uIFVTQi00IGl0IGlzIG5lY2Vzc2FyeSB0byBhc3NlcnQgUlRTIHByaW9yICovCisJCQkvKiB0byBzZWxlY3RpbmcgUlRTIGlucHV0IGZsb3cgY29udHJvbC4gICovCisJCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9SVFNfU0lHTkFMOworCQkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJCWJ1ZltpKytdID0gRElHSV9SVFNfQUNUSVZFOworCQkJYnVmW2krK10gPSAwOworCisJCX0gZWxzZSB7CisJCQlhcmcgJj0gfkRJR0lfSU5QVVRfRkxPV19DT05UUk9MX1JUUzsKKwkJfQorCisJCWJ1ZltpKytdID0gRElHSV9DTURfU0VUX0lOUFVUX0ZMT1dfQ09OVFJPTDsKKwkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmW2krK10gPSBhcmc7CisJCWJ1ZltpKytdID0gMDsKKworCX0KKworCS8qIHNldCBvdXRwdXQgZmxvdyBjb250cm9sICovCisJaWYoIChpZmxhZyZJWE9OKSAhPSAob2xkX2lmbGFnJklYT04pCisJfHwgKGNmbGFnJkNSVFNDVFMpICE9IChvbGRfY2ZsYWcmQ1JUU0NUUykgKSB7CisKKwkJYXJnID0gMDsKKworCQlpZiggKGlmbGFnJklYT04pICkKKwkJCWFyZyB8PSBESUdJX09VVFBVVF9GTE9XX0NPTlRST0xfWE9OX1hPRkY7CisJCWVsc2UKKwkJCWFyZyAmPSB+RElHSV9PVVRQVVRfRkxPV19DT05UUk9MX1hPTl9YT0ZGOworCisJCWlmKCAoY2ZsYWcmQ1JUU0NUUykgKSB7CisJCQlhcmcgfD0gRElHSV9PVVRQVVRfRkxPV19DT05UUk9MX0NUUzsKKwkJfSBlbHNlIHsKKwkJCWFyZyAmPSB+RElHSV9PVVRQVVRfRkxPV19DT05UUk9MX0NUUzsKKwkJCXBvcnQtPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCX0KKworCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9PVVRQVVRfRkxPV19DT05UUk9MOworCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbaSsrXSA9IGFyZzsKKwkJYnVmW2krK10gPSAwOworCisJfQorCisJLyogc2V0IHJlY2VpdmUgZW5hYmxlL2Rpc2FibGUgKi8KKwlpZiggKGNmbGFnJkNSRUFEKSAhPSAob2xkX2NmbGFnJkNSRUFEKSApIHsKKworCQlpZiggKGNmbGFnJkNSRUFEKSApCisJCQlhcmcgPSBESUdJX0VOQUJMRTsKKwkJZWxzZQorCQkJYXJnID0gRElHSV9ESVNBQkxFOworCisJCWJ1ZltpKytdID0gRElHSV9DTURfUkVDRUlWRV9FTkFCTEU7CisJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZltpKytdID0gYXJnOworCQlidWZbaSsrXSA9IDA7CisKKwl9CisKKwlpZiggKHJldD1kaWdpX3dyaXRlX29vYl9jb21tYW5kKCBwb3J0LCBidWYsIGksIDEgKSkgIT0gMCApCisJCWRiZyggImRpZ2lfc2V0X3Rlcm1pb3M6IHdyaXRlIG9vYiBmYWlsZWQsIHJldD0lZCIsIHJldCApOworCit9CisKKworc3RhdGljIHZvaWQgZGlnaV9icmVha19jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApCit7CisKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKKworCisJYnVmWzBdID0gRElHSV9DTURfQlJFQUtfQ09OVFJPTDsKKwlidWZbMV0gPSAyOwkJCQkvKiBsZW5ndGggKi8KKwlidWZbMl0gPSBicmVha19zdGF0ZSA/IDEgOiAwOworCWJ1ZlszXSA9IDA7CQkJCS8qIHBhZCAqLworCisJZGlnaV93cml0ZV9pbmJfY29tbWFuZCggcG9ydCwgYnVmLCA0LCAwICk7CisKK30KKworCitzdGF0aWMgaW50IGRpZ2lfdGlvY21nZXQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlICkKK3sKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXM6IFRPUDogcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+ZHBfcG9ydF9udW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJdmFsID0gcHJpdi0+ZHBfbW9kZW1fc2lnbmFsczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXJldHVybiB2YWw7Cit9CisKKworc3RhdGljIGludCBkaWdpX3Rpb2Ntc2V0KCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIgKQoreworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlczogVE9QOiBwb3J0PSVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5kcF9wb3J0X251bSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwl2YWwgPSAocHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmIH5jbGVhcikgfCBzZXQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlyZXR1cm4gZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggcG9ydCwgdmFsLCAxICk7Cit9CisKKworc3RhdGljIGludCBkaWdpX2lvY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApCit7CisKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCitkYmcoICJkaWdpX2lvY3RsOiBUT1A6IHBvcnQ9JWQsIGNtZD0weCV4IiwgcHJpdi0+ZHBfcG9ydF9udW0sIGNtZCApOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJLyogd2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpKi8KKwkJLyogVE9ETyAqLworCQlyZXR1cm4oIDAgKTsKKworCWNhc2UgVElPQ0dJQ09VTlQ6CisJCS8qIHJldHVybiBjb3VudCBvZiBtb2RlbWxpbmUgdHJhbnNpdGlvbnMgKi8KKwkJLyogVE9ETyAqLworCQlyZXR1cm4gMDsKKworCX0KKworCXJldHVybiggLUVOT0lPQ1RMQ01EICk7CisKK30KKworCitzdGF0aWMgaW50IGRpZ2lfd3JpdGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50ICkKK3sKKworCWludCByZXQsZGF0YV9sZW4sbmV3X2xlbjsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCitkYmcoICJkaWdpX3dyaXRlOiBUT1A6IHBvcnQ9JWQsIGNvdW50PSVkLCBpbl9pbnRlcnJ1cHQ9JWxkIiwKK3ByaXYtPmRwX3BvcnRfbnVtLCBjb3VudCwgaW5faW50ZXJydXB0KCkgKTsKKworCS8qIGNvcHkgdXNlciBkYXRhICh3aGljaCBjYW4gc2xlZXApIGJlZm9yZSBnZXR0aW5nIHNwaW4gbG9jayAqLworCWNvdW50ID0gbWluKCBjb3VudCwgcG9ydC0+YnVsa19vdXRfc2l6ZS0yICk7CisJY291bnQgPSBtaW4oIDY0LCBjb3VudCk7CisKKwkvKiBiZSBzdXJlIG9ubHkgb25lIHdyaXRlIHByb2NlZWRzIGF0IGEgdGltZSAqLworCS8qIHRoZXJlIGFyZSByYWNlcyBvbiB0aGUgcG9ydCBwcml2YXRlIGJ1ZmZlciAqLworCS8qIGFuZCByYWNlcyB0byBjaGVjayB3cml0ZV91cmItPnN0YXR1cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJLyogd2FpdCBmb3IgdXJiIHN0YXR1cyBjbGVhciB0byBzdWJtaXQgYW5vdGhlciB1cmIgKi8KKwlpZiggcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCisJfHwgcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSApIHsKKworCQkvKiBidWZmZXIgZGF0YSBpZiBjb3VudCBpcyAxIChwcm9iYWJseSBwdXRfY2hhcikgaWYgcG9zc2libGUgKi8KKwkJaWYoIGNvdW50ID09IDEgJiYgcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPCBESUdJX09VVF9CVUZfU0laRSApIHsKKwkJCXByaXYtPmRwX291dF9idWZbcHJpdi0+ZHBfb3V0X2J1Zl9sZW4rK10gPSAqYnVmOworCQkJbmV3X2xlbiA9IDE7CisJCX0gZWxzZSB7CisJCQluZXdfbGVuID0gMDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwkJcmV0dXJuKCBuZXdfbGVuICk7CisKKwl9CisKKwkvKiBhbGxvdyBzcGFjZSBmb3IgYW55IGJ1ZmZlcmVkIGRhdGEgYW5kIGZvciBuZXcgZGF0YSwgdXAgdG8gKi8KKwkvKiB0cmFuc2ZlciBidWZmZXIgc2l6ZSAtIDIgKGZvciBjb21tYW5kIGFuZCBsZW5ndGggYnl0ZXMpICovCisJbmV3X2xlbiA9IG1pbihjb3VudCwgcG9ydC0+YnVsa19vdXRfc2l6ZS0yLXByaXYtPmRwX291dF9idWZfbGVuKTsKKwlkYXRhX2xlbiA9IG5ld19sZW4gKyBwcml2LT5kcF9vdXRfYnVmX2xlbjsKKworCWlmKCBkYXRhX2xlbiA9PSAwICkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQlyZXR1cm4oIDAgKTsKKwl9CisKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBkYXRhX2xlbisyOworCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwkqZGF0YSsrID0gRElHSV9DTURfU0VORF9EQVRBOworCSpkYXRhKysgPSBkYXRhX2xlbjsKKworCS8qIGNvcHkgaW4gYnVmZmVyZWQgZGF0YSBmaXJzdCAqLworCW1lbWNweSggZGF0YSwgcHJpdi0+ZHBfb3V0X2J1ZiwgcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gKTsKKwlkYXRhICs9IHByaXYtPmRwX291dF9idWZfbGVuOworCisJLyogY29weSBpbiBuZXcgZGF0YSAqLworCW1lbWNweSggZGF0YSwgYnVmLCBuZXdfbGVuICk7CisKKwlpZiggKHJldD11c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpKSA9PSAwICkgeworCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKwkJcmV0ID0gbmV3X2xlbjsKKwkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPSAwOworCX0KKworCS8qIHJldHVybiBsZW5ndGggb2YgbmV3IGRhdGEgd3JpdHRlbiwgb3IgZXJyb3IgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCWlmKCByZXQgPCAwICkgeworCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXJldCwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKwl9CisKK2RiZyggImRpZ2lfd3JpdGU6IHJldHVybmluZyAlZCIsIHJldCApOworCXJldHVybiggcmV0ICk7CisKK30gCisKKworc3RhdGljIHZvaWQgZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXY7CisJc3RydWN0IGRpZ2lfc2VyaWFsICpzZXJpYWxfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCitkYmcoICJkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2s6IFRPUCwgdXJiLT5zdGF0dXM9JWQiLCB1cmItPnN0YXR1cyApOworCisJLyogcG9ydCBhbmQgc2VyaWFsIHNhbml0eSBjaGVjayAqLworCWlmKCBwb3J0ID09IE5VTEwgfHwgKHByaXY9dXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMICkgeworCQllcnIoIiVzOiBwb3J0IG9yIHBvcnQtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwgX19GVU5DVElPTl9fLAorCQkJdXJiLT5zdGF0dXMgKTsKKwkJcmV0dXJuOworCX0KKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaWYoIHNlcmlhbCA9PSBOVUxMIHx8IChzZXJpYWxfcHJpdj11c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpID09IE5VTEwgKSB7CisJCWVycigiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyApOworCQlyZXR1cm47CisJfQorCisJLyogaGFuZGxlIG9vYiBjYWxsYmFjayAqLworCWlmKCBwcml2LT5kcF9wb3J0X251bSA9PSBzZXJpYWxfcHJpdi0+ZHNfb29iX3BvcnRfbnVtICkgeworCQlkYmcoICJkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2s6IG9vYiBjYWxsYmFjayIgKTsKKwkJc3Bpbl9sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwb3J0LT53cml0ZV93YWl0ICk7CisJCXNwaW5fdW5sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJCXJldHVybjsKKwl9CisKKwkvKiB0cnkgdG8gc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSBvbiB0aGlzIHBvcnQsIGlmIGl0IGlzIG9wZW4gKi8KKwlzcGluX2xvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKwlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMDsKKwlpZiggcG9ydC0+b3Blbl9jb3VudCAmJiBwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MKKwkmJiBwcml2LT5kcF9vdXRfYnVmX2xlbiA+IDAgKSB7CisKKwkJKigodW5zaWduZWQgY2hhciAqKShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcikpCisJCQk9ICh1bnNpZ25lZCBjaGFyKURJR0lfQ01EX1NFTkRfREFUQTsKKwkJKigodW5zaWduZWQgY2hhciAqKShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcikrMSkKKwkJCT0gKHVuc2lnbmVkIGNoYXIpcHJpdi0+ZHBfb3V0X2J1Zl9sZW47CisKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQk9IHByaXYtPmRwX291dF9idWZfbGVuKzI7CisJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkJbWVtY3B5KCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcisyLCBwcml2LT5kcF9vdXRfYnVmLAorCQkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gKTsKKworCQlpZiggKHJldD11c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpKSA9PSAwICkgeworCQkJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDE7CisJCQlwcml2LT5kcF9vdXRfYnVmX2xlbiA9IDA7CisJCX0KKworCX0KKworCS8qIHdha2UgdXAgcHJvY2Vzc2VzIHNsZWVwaW5nIG9uIHdyaXRlcyBpbW1lZGlhdGVseSAqLworCWRpZ2lfd2FrZXVwX3dyaXRlKCBwb3J0ICk7CisKKwkvKiBhbHNvIHF1ZXVlIHVwIGEgd2FrZXVwIGF0IHNjaGVkdWxlciB0aW1lLCBpbiBjYXNlIHdlICovCisJLyogbG9zdCB0aGUgcmFjZSBpbiB3cml0ZV9jaGFuKCkuICovCisJc2NoZWR1bGVfd29yaygmcHJpdi0+ZHBfd2FrZXVwX3dvcmspOworCisJc3Bpbl91bmxvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCWlmKCByZXQgKSB7CisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLAorCQkJcmV0LCBwcml2LT5kcF9wb3J0X251bSApOworCX0KKworfQorCisKK3N0YXRpYyBpbnQgZGlnaV93cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCWludCByb29tOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJaWYoIHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCXx8IHByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgKQorCQlyb29tID0gMDsKKwllbHNlCisJCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplIC0gMiAtIHByaXYtPmRwX291dF9idWZfbGVuOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworZGJnKCAiZGlnaV93cml0ZV9yb29tOiBwb3J0PSVkLCByb29tPSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sIHJvb20gKTsKKwlyZXR1cm4oIHJvb20gKTsKKworfQorCisKK3N0YXRpYyBpbnQgZGlnaV9jaGFyc19pbl9idWZmZXIoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCisJaWYoIHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCXx8IHByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgKSB7CitkYmcoICJkaWdpX2NoYXJzX2luX2J1ZmZlcjogcG9ydD0lZCwgY2hhcnM9JWQiLCBwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+YnVsa19vdXRfc2l6ZSAtIDIgKTsKKwkJLyogcmV0dXJuKCBwb3J0LT5idWxrX291dF9zaXplIC0gMiApOyAqLworCQlyZXR1cm4oIDI1NiApOworCX0gZWxzZSB7CitkYmcoICJkaWdpX2NoYXJzX2luX2J1ZmZlcjogcG9ydD0lZCwgY2hhcnM9JWQiLCBwcml2LT5kcF9wb3J0X251bSwgcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gKTsKKwkJcmV0dXJuKCBwcml2LT5kcF9vdXRfYnVmX2xlbiApOworCX0KKworfQorCisKK3N0YXRpYyBpbnQgZGlnaV9vcGVuKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCApCit7CisKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0ZXJtaW9zIG5vdF90ZXJtaW9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKK2RiZyggImRpZ2lfb3BlbjogVE9QOiBwb3J0PSVkLCBvcGVuX2NvdW50PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sIHBvcnQtPm9wZW5fY291bnQgKTsKKworCS8qIGJlIHN1cmUgdGhlIGRldmljZSBpcyBzdGFydGVkIHVwICovCisJaWYoIGRpZ2lfc3RhcnR1cF9kZXZpY2UoIHBvcnQtPnNlcmlhbCApICE9IDAgKQorCQlyZXR1cm4oIC1FTlhJTyApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwkvKiBkb24ndCB3YWl0IG9uIGEgY2xvc2UgaW4gcHJvZ3Jlc3MgZm9yIG5vbi1ibG9ja2luZyBvcGVucyAqLworCWlmKCBwcml2LT5kcF9pbl9jbG9zZSAmJiAoZmlscC0+Zl9mbGFncyYoT19OREVMQVl8T19OT05CTE9DSykpID09IDAgKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCXJldHVybiggLUVBR0FJTiApOworCX0KKworCS8qIHdhaXQgZm9yIGEgY2xvc2UgaW4gcHJvZ3Jlc3MgdG8gZmluaXNoICovCisJd2hpbGUoIHByaXYtPmRwX2luX2Nsb3NlICkgeworCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCisJCQkmcHJpdi0+ZHBfY2xvc2Vfd2FpdCwgRElHSV9SRVRSWV9USU1FT1VULAorCQkJJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJaWYoIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgeworCQkJcmV0dXJuKCAtRUlOVFIgKTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworIAorCS8qIHJlYWQgbW9kZW0gc2lnbmFscyBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXkgY2hhbmdlICovCisJYnVmWzBdID0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTOworCWJ1ZlsxXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCWJ1ZlsyXSA9IERJR0lfRU5BQkxFOworCWJ1ZlszXSA9IDA7CisKKwkvKiBmbHVzaCBmaWZvcyAqLworCWJ1Zls0XSA9IERJR0lfQ01EX0lGTFVTSF9GSUZPOworCWJ1Zls1XSA9IHByaXYtPmRwX3BvcnRfbnVtOworCWJ1Zls2XSA9IERJR0lfRkxVU0hfVFggfCBESUdJX0ZMVVNIX1JYOworCWJ1Zls3XSA9IDA7CisKKwlpZiggKHJldD1kaWdpX3dyaXRlX29vYl9jb21tYW5kKCBwb3J0LCBidWYsIDgsIDEgKSkgIT0gMCApCisJCWRiZyggImRpZ2lfb3Blbjogd3JpdGUgb29iIGZhaWxlZCwgcmV0PSVkIiwgcmV0ICk7CisKKwkvKiBzZXQgdGVybWlvcyBzZXR0aW5ncyAqLworCW5vdF90ZXJtaW9zLmNfY2ZsYWcgPSB+cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCW5vdF90ZXJtaW9zLmNfaWZsYWcgPSB+cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCWRpZ2lfc2V0X3Rlcm1pb3MoIHBvcnQsICZub3RfdGVybWlvcyApOworCisJLyogc2V0IERUUiBhbmQgUlRTICovCisJZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggcG9ydCwgVElPQ01fRFRSfFRJT0NNX1JUUywgMSApOworCisJcmV0dXJuKCAwICk7CisKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCApCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlszMl07CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKK2RiZyggImRpZ2lfY2xvc2U6IFRPUDogcG9ydD0lZCwgb3Blbl9jb3VudD0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLCBwb3J0LT5vcGVuX2NvdW50ICk7CisKKworCS8qIGlmIGRpc2Nvbm5lY3RlZCwganVzdCBjbGVhciBmbGFncyAqLworCWlmICghdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpCisJCWdvdG8gZXhpdDsKKworCS8qIGRvIGNsZWFudXAgb25seSBhZnRlciBmaW5hbCBjbG9zZSBvbiB0aGlzIHBvcnQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlwcml2LT5kcF9pbl9jbG9zZSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCS8qIHRlbGwgbGluZSBkaXNjaXBsaW5lIHRvIHByb2Nlc3Mgb25seSBYT04vWE9GRiAqLworCXR0eS0+Y2xvc2luZyA9IDE7CisKKwkvKiB3YWl0IGZvciBvdXRwdXQgdG8gZHJhaW4gKi8KKwlpZiggKGZpbHAtPmZfZmxhZ3MmKE9fTkRFTEFZfE9fTk9OQkxPQ0spKSA9PSAwICkgeworCQl0dHlfd2FpdF91bnRpbF9zZW50KCB0dHksIERJR0lfQ0xPU0VfVElNRU9VVCApOworCX0KKworCS8qIGZsdXNoIGRyaXZlciBhbmQgbGluZSBkaXNjaXBsaW5lIGJ1ZmZlcnMgKi8KKwlpZiggdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlciApCisJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIoIHR0eSApOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOworCisJaWYgKHBvcnQtPnNlcmlhbC0+ZGV2KSB7CisJCS8qIHdhaXQgZm9yIHRyYW5zbWl0IGlkbGUgKi8KKwkJaWYoIChmaWxwLT5mX2ZsYWdzJihPX05ERUxBWXxPX05PTkJMT0NLKSkgPT0gMCApIHsKKwkJCWRpZ2lfdHJhbnNtaXRfaWRsZSggcG9ydCwgRElHSV9DTE9TRV9USU1FT1VUICk7CisJCX0KKworCQkvKiBkcm9wIERUUiBhbmQgUlRTICovCisJCWRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHBvcnQsIDAsIDAgKTsKKworCQkvKiBkaXNhYmxlIGlucHV0IGZsb3cgY29udHJvbCAqLworCQlidWZbMF0gPSBESUdJX0NNRF9TRVRfSU5QVVRfRkxPV19DT05UUk9MOworCQlidWZbMV0gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmWzJdID0gRElHSV9ESVNBQkxFOworCQlidWZbM10gPSAwOworCisJCS8qIGRpc2FibGUgb3V0cHV0IGZsb3cgY29udHJvbCAqLworCQlidWZbNF0gPSBESUdJX0NNRF9TRVRfT1VUUFVUX0ZMT1dfQ09OVFJPTDsKKwkJYnVmWzVdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1Zls2XSA9IERJR0lfRElTQUJMRTsKKwkJYnVmWzddID0gMDsKKworCQkvKiBkaXNhYmxlIHJlYWRpbmcgbW9kZW0gc2lnbmFscyBhdXRvbWF0aWNhbGx5ICovCisJCWJ1Zls4XSA9IERJR0lfQ01EX1JFQURfSU5QVVRfU0lHTkFMUzsKKwkJYnVmWzldID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZlsxMF0gPSBESUdJX0RJU0FCTEU7CisJCWJ1ZlsxMV0gPSAwOworCisJCS8qIGRpc2FibGUgcmVjZWl2ZSAqLworCQlidWZbMTJdID0gRElHSV9DTURfUkVDRUlWRV9FTkFCTEU7CisJCWJ1ZlsxM10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmWzE0XSA9IERJR0lfRElTQUJMRTsKKwkJYnVmWzE1XSA9IDA7CisKKwkJLyogZmx1c2ggZmlmb3MgKi8KKwkJYnVmWzE2XSA9IERJR0lfQ01EX0lGTFVTSF9GSUZPOworCQlidWZbMTddID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZlsxOF0gPSBESUdJX0ZMVVNIX1RYIHwgRElHSV9GTFVTSF9SWDsKKwkJYnVmWzE5XSA9IDA7CisKKwkJaWYoIChyZXQ9ZGlnaV93cml0ZV9vb2JfY29tbWFuZCggcG9ydCwgYnVmLCAyMCwgMCApKSAhPSAwICkKKwkJCWRiZyggImRpZ2lfY2xvc2U6IHdyaXRlIG9vYiBmYWlsZWQsIHJldD0lZCIsIHJldCApOworCisJCS8qIHdhaXQgZm9yIGZpbmFsIGNvbW1hbmRzIG9uIG9vYiBwb3J0IHRvIGNvbXBsZXRlICovCisJCXByZXBhcmVfdG9fd2FpdCgmcHJpdi0+ZHBfZmx1c2hfd2FpdCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dChESUdJX0NMT1NFX1RJTUVPVVQpOworCQlmaW5pc2hfd2FpdCgmcHJpdi0+ZHBfZmx1c2hfd2FpdCwgJndhaXQpOworCisJCS8qIHNodXRkb3duIGFueSBvdXRzdGFuZGluZyBidWxrIHdyaXRlcyAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl9CisKKwl0dHktPmNsb3NpbmcgPSAwOworCitleGl0OgorCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCXByaXYtPmRwX2luX2Nsb3NlID0gMDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwcml2LT5kcF9jbG9zZV93YWl0ICk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworZGJnKCAiZGlnaV9jbG9zZTogZG9uZSIgKTsKK30KKworCisvKgorKiAgRGlnaSBTdGFydHVwIERldmljZQorKgorKiAgU3RhcnRzIHJlYWRzIG9uIGFsbCBwb3J0cy4gIE11c3QgYmUgY2FsbGVkIEFGVEVSIHN0YXJ0dXAsIHdpdGgKKyogIHVyYnMgaW5pdGlhbGl6ZWQuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbm9uLXplcm8gZXJyb3Igb3RoZXJ3aXNlLgorKi8KKworc3RhdGljIGludCBkaWdpX3N0YXJ0dXBfZGV2aWNlKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICkKK3sKKworCWludCBpLHJldCA9IDA7CisJc3RydWN0IGRpZ2lfc2VyaWFsICpzZXJpYWxfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCisKKwkvKiBiZSBzdXJlIHRoaXMgaGFwcGVucyBleGFjdGx5IG9uY2UgKi8KKwlzcGluX2xvY2soICZzZXJpYWxfcHJpdi0+ZHNfc2VyaWFsX2xvY2sgKTsKKwlpZiggc2VyaWFsX3ByaXYtPmRzX2RldmljZV9zdGFydGVkICkgeworCQlzcGluX3VubG9jayggJnNlcmlhbF9wcml2LT5kc19zZXJpYWxfbG9jayApOworCQlyZXR1cm4oIDAgKTsKKwl9CisJc2VyaWFsX3ByaXYtPmRzX2RldmljZV9zdGFydGVkID0gMTsKKwlzcGluX3VubG9jayggJnNlcmlhbF9wcml2LT5kc19zZXJpYWxfbG9jayApOworCisJLyogc3RhcnQgcmVhZGluZyBmcm9tIGVhY2ggYnVsayBpbiBlbmRwb2ludCBmb3IgdGhlIGRldmljZSAqLworCS8qIHNldCBVU0JfRElTQUJMRV9TUEQgZmxhZyBmb3Igd3JpdGUgYnVsayB1cmJzICovCisJZm9yKCBpPTA7IGk8c2VyaWFsLT50eXBlLT5udW1fcG9ydHMrMTsgaSsrICkgeworCisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisKKwkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCQlpZiggKHJldD11c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCkpICE9IDAgKSB7CisJCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXJldCwgaSApOworCQkJYnJlYWs7CisJCX0KKworCX0KKworCXJldHVybiggcmV0ICk7CisKK30KKworCitzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cCggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApCit7CisKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2OworCXN0cnVjdCBkaWdpX3NlcmlhbCAqc2VyaWFsX3ByaXY7CisKKworZGJnKCAiZGlnaV9zdGFydHVwOiBUT1AiICk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGFsbCBwb3J0cyAqLworCS8qIG51bWJlciBvZiByZWd1bGFyIHBvcnRzICsgMSBmb3IgdGhlIG91dC1vZi1iYW5kIHBvcnQgKi8KKwlmb3IoIGk9MDsgaTxzZXJpYWwtPnR5cGUtPm51bV9wb3J0cysxOyBpKysgKSB7CisKKwkJLyogYWxsb2NhdGUgcG9ydCBwcml2YXRlIHN0cnVjdHVyZSAqLworCQlwcml2ID0gKHN0cnVjdCBkaWdpX3BvcnQgKilrbWFsbG9jKCBzaXplb2Yoc3RydWN0IGRpZ2lfcG9ydCksCisJCQlHRlBfS0VSTkVMICk7CisJCWlmKCBwcml2ID09IChzdHJ1Y3QgZGlnaV9wb3J0ICopMCApIHsKKwkJCXdoaWxlKCAtLWkgPj0gMCApCisJCQkJa2ZyZWUoIHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pICk7CisJCQlyZXR1cm4oIDEgKTsJCQkvKiBlcnJvciAqLworCQl9CisKKwkJLyogaW5pdGlhbGl6ZSBwb3J0IHByaXZhdGUgc3RydWN0dXJlICovCisJCXNwaW5fbG9ja19pbml0KCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJCXByaXYtPmRwX3BvcnRfbnVtID0gaTsKKwkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPSAwOworCQlwcml2LT5kcF9pbl9idWZfbGVuID0gMDsKKwkJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgPSAwOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmcHJpdi0+ZHBfbW9kZW1fY2hhbmdlX3dhaXQgKTsKKwkJcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZSA9IDA7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZwcml2LT5kcF90cmFuc21pdF9pZGxlX3dhaXQgKTsKKwkJcHJpdi0+ZHBfdGhyb3R0bGVkID0gMDsKKwkJcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZwcml2LT5kcF9mbHVzaF93YWl0ICk7CisJCXByaXYtPmRwX2luX2Nsb3NlID0gMDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCggJnByaXYtPmRwX2Nsb3NlX3dhaXQgKTsKKwkJSU5JVF9XT1JLKCZwcml2LT5kcF93YWtldXBfd29yaywKKwkJCQlkaWdpX3dha2V1cF93cml0ZV9sb2NrLCBzZXJpYWwtPnBvcnRbaV0pOworCisJCS8qIGluaXRpYWxpemUgd3JpdGUgd2FpdCBxdWV1ZSBmb3IgdGhpcyBwb3J0ICovCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZzZXJpYWwtPnBvcnRbaV0tPndyaXRlX3dhaXQgKTsKKworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBwcml2KTsKKwl9CisKKwkvKiBhbGxvY2F0ZSBzZXJpYWwgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlzZXJpYWxfcHJpdiA9IChzdHJ1Y3QgZGlnaV9zZXJpYWwgKilrbWFsbG9jKCBzaXplb2Yoc3RydWN0IGRpZ2lfc2VyaWFsKSwKKwkJR0ZQX0tFUk5FTCApOworCWlmKCBzZXJpYWxfcHJpdiA9PSAoc3RydWN0IGRpZ2lfc2VyaWFsICopMCApIHsKKwkJZm9yKCBpPTA7IGk8c2VyaWFsLT50eXBlLT5udW1fcG9ydHMrMTsgaSsrICkKKwkJCWtmcmVlKCB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSApOworCQlyZXR1cm4oIDEgKTsJCQkvKiBlcnJvciAqLworCX0KKworCS8qIGluaXRpYWxpemUgc2VyaWFsIHByaXZhdGUgc3RydWN0dXJlICovCisJc3Bpbl9sb2NrX2luaXQoICZzZXJpYWxfcHJpdi0+ZHNfc2VyaWFsX2xvY2sgKTsKKwlzZXJpYWxfcHJpdi0+ZHNfb29iX3BvcnRfbnVtID0gc2VyaWFsLT50eXBlLT5udW1fcG9ydHM7CisJc2VyaWFsX3ByaXYtPmRzX29vYl9wb3J0ID0gc2VyaWFsLT5wb3J0W3NlcmlhbF9wcml2LT5kc19vb2JfcG9ydF9udW1dOworCXNlcmlhbF9wcml2LT5kc19kZXZpY2Vfc3RhcnRlZCA9IDA7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHNlcmlhbF9wcml2KTsKKworCXJldHVybiggMCApOworCit9CisKKworc3RhdGljIHZvaWQgZGlnaV9zaHV0ZG93biggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApCit7CisKKwlpbnQgaTsKKworCitkYmcoICJkaWdpX3NodXRkb3duOiBUT1AsIGluX2ludGVycnVwdCgpPSVsZCIsIGluX2ludGVycnVwdCgpICk7CisKKwkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCisJZm9yKCBpPTA7IGk8c2VyaWFsLT50eXBlLT5udW1fcG9ydHMrMTsgaSsrICkgeworCQl1c2Jfa2lsbF91cmIoc2VyaWFsLT5wb3J0W2ldLT5yZWFkX3VyYik7CisJCXVzYl9raWxsX3VyYihzZXJpYWwtPnBvcnRbaV0tPndyaXRlX3VyYik7CisJfQorCisJLyogZnJlZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGFsbCBwb3J0cyAqLworCS8qIG51bWJlciBvZiByZWd1bGFyIHBvcnRzICsgMSBmb3IgdGhlIG91dC1vZi1iYW5kIHBvcnQgKi8KKwlmb3IoIGk9MDsgaTxzZXJpYWwtPnR5cGUtPm51bV9wb3J0cysxOyBpKysgKQorCQlrZnJlZSggdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkgKTsKKwlrZnJlZSggdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpICk7Cit9CisKKworc3RhdGljIHZvaWQgZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXY7CisJc3RydWN0IGRpZ2lfc2VyaWFsICpzZXJpYWxfcHJpdjsKKwlpbnQgcmV0OworCisKK2RiZyggImRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrOiBUT1AiICk7CisKKwkvKiBwb3J0IHNhbml0eSBjaGVjaywgZG8gbm90IHJlc3VibWl0IGlmIHBvcnQgaXMgbm90IHZhbGlkICovCisJaWYoIHBvcnQgPT0gTlVMTCB8fCAocHJpdj11c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpID09IE5VTEwgKSB7CisJCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQl1cmItPnN0YXR1cyApOworCQlyZXR1cm47CisJfQorCWlmKCBwb3J0LT5zZXJpYWwgPT0gTlVMTAorCXx8IChzZXJpYWxfcHJpdj11c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCkpID09IE5VTEwgKSB7CisJCWVycigiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMgKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGRvIG5vdCByZXN1Ym1pdCB1cmIgaWYgaXQgaGFzIGFueSBzdGF0dXMgZXJyb3IgKi8KKwlpZiggdXJiLT5zdGF0dXMgKSB7CisJCWVycigiJXM6IG5vbnplcm8gcmVhZCBidWxrIHN0YXR1czogc3RhdHVzPSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGhhbmRsZSBvb2Igb3IgaW5iIGNhbGxiYWNrLCBkbyBub3QgcmVzdWJtaXQgaWYgZXJyb3IgKi8KKwlpZiggcHJpdi0+ZHBfcG9ydF9udW0gPT0gc2VyaWFsX3ByaXYtPmRzX29vYl9wb3J0X251bSApIHsKKwkJaWYoIGRpZ2lfcmVhZF9vb2JfY2FsbGJhY2soIHVyYiApICE9IDAgKQorCQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmKCBkaWdpX3JlYWRfaW5iX2NhbGxiYWNrKCB1cmIgKSAhPSAwICkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBjb250aW51ZSByZWFkICovCisJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiggKHJldD11c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwICkgeworCQllcnIoIiVzOiBmYWlsZWQgcmVzdWJtaXR0aW5nIHVyYiwgcmV0PSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLAorCQkJcmV0LCBwcml2LT5kcF9wb3J0X251bSApOworCX0KKworfQorCisKKy8qIAorKiAgRGlnaSBSZWFkIElOQiBDYWxsYmFjaworKgorKiAgRGlnaSBSZWFkIElOQiBDYWxsYmFjayBoYW5kbGVzIHJlYWRzIG9uIHRoZSBpbiBiYW5kIHBvcnRzLCBzZW5kaW5nCisqICB0aGUgZGF0YSBvbiB0byB0aGUgdHR5IHN1YnN5c3RlbS4gIFdoZW4gY2FsbGVkIHdlIGtub3cgcG9ydCBhbmQKKyogIHBvcnQtPnByaXZhdGUgYXJlIG5vdCBOVUxMIGFuZCBwb3J0LT5zZXJpYWwgaGFzIGJlZW4gdmFsaWRhdGVkLgorKiAgSXQgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIDEgaWYgc3VjY2Vzc2Z1bCBidXQgdGhlIHBvcnQgaXMKKyogIHRocm90dGxlZCwgYW5kIC0xIGlmIHRoZSBzYW5pdHkgY2hlY2tzIGZhaWxlZC4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV9yZWFkX2luYl9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiICkKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IG9wY29kZSA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVswXTsKKwlpbnQgbGVuID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzFdOworCWludCBzdGF0dXMgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMl07CisJdW5zaWduZWQgY2hhciAqZGF0YSA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKSszOworCWludCBmbGFnLHRocm90dGxlZDsKKworCS8qIGRvIG5vdCBwcm9jZXNzIGNhbGxiYWNrcyBvbiBjbG9zZWQgcG9ydHMgKi8KKwkvKiBidXQgZG8gY29udGludWUgdGhlIHJlYWQgY2hhaW4gKi8KKwlpZiggcG9ydC0+b3Blbl9jb3VudCA9PSAwICkKKwkJcmV0dXJuKCAwICk7CisKKwkvKiBzaG9ydC9tdWx0aXBsZSBwYWNrZXQgY2hlY2sgKi8KKwlpZiggdXJiLT5hY3R1YWxfbGVuZ3RoICE9IGxlbiArIDIgKSB7CisgICAgIAkJZXJyKCIlczogSU5DT01QTEVURSBPUiBNVUxUSVBMRSBQQUNLRVQsIHVyYi0+c3RhdHVzPSVkLCBwb3J0PSVkLCBvcGNvZGU9JWQsIGxlbj0lZCwgYWN0dWFsX2xlbmd0aD0lZCwgc3RhdHVzPSVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0sIG9wY29kZSwgbGVuLCB1cmItPmFjdHVhbF9sZW5ndGgsIHN0YXR1cyApOworCQlyZXR1cm4oIC0xICk7CisJfQorCisJc3Bpbl9sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwkvKiBjaGVjayBmb3IgdGhyb3R0bGU7IGlmIHNldCwgZG8gbm90IHJlc3VibWl0IHJlYWQgdXJiICovCisJLyogaW5kaWNhdGUgdGhlIHJlYWQgY2hhaW4gbmVlZHMgdG8gYmUgcmVzdGFydGVkIG9uIHVudGhyb3R0bGUgKi8KKwl0aHJvdHRsZWQgPSBwcml2LT5kcF90aHJvdHRsZWQ7CisJaWYoIHRocm90dGxlZCApCisJCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAxOworCisJLyogcmVjZWl2ZSBkYXRhICovCisJaWYoIG9wY29kZSA9PSBESUdJX0NNRF9SRUNFSVZFX0RBVEEgKSB7CisKKwkJLyogZ2V0IGZsYWcgZnJvbSBzdGF0dXMgKi8KKwkJZmxhZyA9IDA7CisKKwkJLyogb3ZlcnJ1biBpcyBzcGVjaWFsLCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hhciAqLworCQlpZiggc3RhdHVzICYgRElHSV9PVkVSUlVOX0VSUk9SICkgeworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoIHR0eSwgMCwgVFRZX09WRVJSVU4gKTsKKwkJfQorCisJCS8qIGJyZWFrIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBwYXJpdHksICovCisJCS8qIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmcmFtaW5nIGVycm9ycyAqLworCQlpZiggc3RhdHVzICYgRElHSV9CUkVBS19FUlJPUiApIHsKKwkJCWZsYWcgPSBUVFlfQlJFQUs7CisJCX0gZWxzZSBpZiggc3RhdHVzICYgRElHSV9QQVJJVFlfRVJST1IgKSB7CisJCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJfSBlbHNlIGlmKCBzdGF0dXMgJiBESUdJX0ZSQU1JTkdfRVJST1IgKSB7CisJCQlmbGFnID0gVFRZX0ZSQU1FOworCQl9CisKKwkJLyogZGF0YSBsZW5ndGggaXMgbGVuLTEgKG9uZSBieXRlIG9mIGxlbiBpcyBzdGF0dXMpICovCisJCS0tbGVuOworCisJCWlmKCB0aHJvdHRsZWQgKSB7CisKKwkJCWxlbiA9IG1pbiggbGVuLAorCQkJCURJR0lfSU5fQlVGX1NJWkUgLSBwcml2LT5kcF9pbl9idWZfbGVuICk7CisKKwkJCWlmKCBsZW4gPiAwICkgeworCQkJCW1lbWNweSggcHJpdi0+ZHBfaW5fYnVmICsgcHJpdi0+ZHBfaW5fYnVmX2xlbiwKKwkJCQkJZGF0YSwgbGVuICk7CisJCQkJbWVtc2V0KCBwcml2LT5kcF9pbl9mbGFnX2J1ZgorCQkJCQkrIHByaXYtPmRwX2luX2J1Zl9sZW4sIGZsYWcsIGxlbiApOworCQkJCXByaXYtPmRwX2luX2J1Zl9sZW4gKz0gbGVuOworCQkJfQorCisJCX0gZWxzZSB7CisKKwkJCWxlbiA9IG1pbiggbGVuLCBUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50ICk7CisKKwkJCWlmKCBsZW4gPiAwICkgeworCQkJCW1lbWNweSggdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgZGF0YSwgbGVuICk7CisJCQkJbWVtc2V0KCB0dHktPmZsaXAuZmxhZ19idWZfcHRyLCBmbGFnLCBsZW4gKTsKKwkJCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IGxlbjsKKwkJCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyICs9IGxlbjsKKwkJCQl0dHktPmZsaXAuY291bnQgKz0gbGVuOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKCB0dHkgKTsKKwkJCX0KKworCQl9CisKKwl9CisKKwlzcGluX3VubG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCisJaWYoIG9wY29kZSA9PSBESUdJX0NNRF9SRUNFSVZFX0RJU0FCTEUgKSB7CisJCWRiZygiJXM6IGdvdCBSRUNFSVZFX0RJU0FCTEUiLCBfX0ZVTkNUSU9OX18gKTsKKwl9IGVsc2UgaWYoIG9wY29kZSAhPSBESUdJX0NNRF9SRUNFSVZFX0RBVEEgKSB7CisJCWRiZygiJXM6IHVua25vd24gb3Bjb2RlOiAlZCIsIF9fRlVOQ1RJT05fXywgb3Bjb2RlICk7CisJfQorCisJcmV0dXJuKCB0aHJvdHRsZWQgPyAxIDogMCApOworCit9CisKKworLyogCisqICBEaWdpIFJlYWQgT09CIENhbGxiYWNrCisqCisqICBEaWdpIFJlYWQgT09CIENhbGxiYWNrIGhhbmRsZXMgcmVhZHMgb24gdGhlIG91dCBvZiBiYW5kIHBvcnQuCisqICBXaGVuIGNhbGxlZCB3ZSBrbm93IHBvcnQgYW5kIHBvcnQtPnByaXZhdGUgYXJlIG5vdCBOVUxMIGFuZAorKiAgdGhlIHBvcnQtPnNlcmlhbCBpcyB2YWxpZC4gIEl0IHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhbmQKKyogIC0xIGlmIHRoZSBzYW5pdHkgY2hlY2tzIGZhaWxlZC4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV9yZWFkX29vYl9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiICkKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IG9wY29kZSwgbGluZSwgc3RhdHVzLCB2YWw7CisJaW50IGk7CisKKworZGJnKCAiZGlnaV9yZWFkX29vYl9jYWxsYmFjazogcG9ydD0lZCwgbGVuPSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sCit1cmItPmFjdHVhbF9sZW5ndGggKTsKKworCS8qIGhhbmRsZSBlYWNoIG9vYiBjb21tYW5kICovCisJZm9yKCBpPTA7IGk8dXJiLT5hY3R1YWxfbGVuZ3RoLTM7ICkgeworCisJCW9wY29kZSA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVtpKytdOworCQlsaW5lID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpW2krK107CisJCXN0YXR1cyA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVtpKytdOworCQl2YWwgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbaSsrXTsKKworZGJnKCAiZGlnaV9yZWFkX29vYl9jYWxsYmFjazogb3Bjb2RlPSVkLCBsaW5lPSVkLCBzdGF0dXM9JWQsIHZhbD0lZCIsCitvcGNvZGUsIGxpbmUsIHN0YXR1cywgdmFsICk7CisKKwkJaWYoIHN0YXR1cyAhPSAwIHx8IGxpbmUgPj0gc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgKQorCQkJY29udGludWU7CisKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtsaW5lXTsKKworCQlpZiAoKHByaXY9dXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMICkKKwkJCXJldHVybiAtMTsKKworCQlpZiggb3Bjb2RlID09IERJR0lfQ01EX1JFQURfSU5QVVRfU0lHTkFMUyApIHsKKworCQkJc3Bpbl9sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwkJCS8qIGNvbnZlcnQgZnJvbSBkaWdpIGZsYWdzIHRvIHRlcm1pb3ggZmxhZ3MgKi8KKwkJCWlmKCB2YWwgJiBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19DVFMgKSB7CisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9DVFM7CisJCQkJLyogcG9ydCBtdXN0IGJlIG9wZW4gdG8gdXNlIHR0eSBzdHJ1Y3QgKi8KKwkJCQlpZiggcG9ydC0+b3Blbl9jb3VudAorCQkJCSYmIHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMgKSB7CisJCQkJCXBvcnQtPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJCWRpZ2lfd2FrZXVwX3dyaXRlKCBwb3J0ICk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzICY9IH5USU9DTV9DVFM7CisJCQkJLyogcG9ydCBtdXN0IGJlIG9wZW4gdG8gdXNlIHR0eSBzdHJ1Y3QgKi8KKwkJCQlpZiggcG9ydC0+b3Blbl9jb3VudAorCQkJCSYmIHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMgKSB7CisJCQkJCXBvcnQtPnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYoIHZhbCAmIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0RTUiApCisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9EU1I7CisJCQllbHNlCisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmPSB+VElPQ01fRFNSOworCQkJaWYoIHZhbCAmIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX1JJICkKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzIHw9IFRJT0NNX1JJOworCQkJZWxzZQorCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgJj0gflRJT0NNX1JJOworCQkJaWYoIHZhbCAmIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0RDRCApCisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9DRDsKKwkJCWVsc2UKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzICY9IH5USU9DTV9DRDsKKworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcHJpdi0+ZHBfbW9kZW1fY2hhbmdlX3dhaXQgKTsKKwkJCXNwaW5fdW5sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwkJfSBlbHNlIGlmKCBvcGNvZGUgPT0gRElHSV9DTURfVFJBTlNNSVRfSURMRSApIHsKKworCQkJc3Bpbl9sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJCQlwcml2LT5kcF90cmFuc21pdF9pZGxlID0gMTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJnByaXYtPmRwX3RyYW5zbWl0X2lkbGVfd2FpdCApOworCQkJc3Bpbl91bmxvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCQl9IGVsc2UgaWYoIG9wY29kZSA9PSBESUdJX0NNRF9JRkxVU0hfRklGTyApIHsKKworCQkJd2FrZV91cCggJnByaXYtPmRwX2ZsdXNoX3dhaXQgKTsKKworCQl9CisKKwl9CisKKwlyZXR1cm4oIDAgKTsKKworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGRpZ2lfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmRpZ2lfYWNjZWxlcG9ydF8yX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfYWNjZWxlcG9ydF8yX2RldmljZTsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZkaWdpX2FjY2VsZXBvcnRfNF9kZXZpY2UpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF9hY2NlbGVwb3J0XzRfZGV2aWNlOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZGlnaV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKK2ZhaWxlZF9hY2NlbGVwb3J0XzRfZGV2aWNlOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzJfZGV2aWNlKTsKK2ZhaWxlZF9hY2NlbGVwb3J0XzJfZGV2aWNlOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGRpZ2lfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmRpZ2lfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZkaWdpX2FjY2VsZXBvcnRfMl9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmRpZ2lfYWNjZWxlcG9ydF80X2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQoZGlnaV9pbml0KTsKK21vZHVsZV9leGl0KGRpZ2lfZXhpdCk7CisKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDQ2Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTAsMCArMSw1OTYgQEAKKy8qCisgKiBVU0IgRW1wZWcgZW1wZWctY2FyIHBsYXllciBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEKKyAqCSAgICBHYXJ5IEJydWJha2VyICh4YXZ5ZXJAaXgubmV0Y29tLmNvbSkKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAxCisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiAKKyAqICgwNy8xNi8yMDAxKSBnYgorICoJcmVtb3ZlIHVudXNlZCBjb2RlIGluIGVtcGVnX2Nsb3NlKCkgKHRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIGZvciBwb2ludGluZyB0aGlzCisgKglvdXQpIGFuZCByZXdyb3RlIGVtcGVnX3NldF90ZXJtaW9zKCkuCisgKiAKKyAqICgwNS8zMC8yMDAxKSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKiAgICAgIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKiAKKyAqICgwMS8yMi8yMDAxKSBnYgorICoJQWRkZWQgd3JpdGVfcm9vbSgpIGFuZCBjaGFyc19pbl9idWZmZXIoKSBzdXBwb3J0LiAKKyAqIAorICogKDEyLzIxLzIwMDApIGdiCisgKglNb3ZlZCB0ZXJtaW8gc3R1ZmYgaW5zaWRlIHRoZSBwb3J0LT5hY3RpdmUgY2hlY2suCisgKglNb3ZlZCBNT0RfREVDX1VTRV9DT1VOVCB0byBlbmQgb2YgZW1wZWdfY2xvc2UoKS4KKyAqIAorICogKDEyLzAzLzIwMDApIGdiCisgKglBZGRlZCBwb3J0LT50dHktPmxkaXNjLnNldF90ZXJtaW9zKHBvcnQtPnR0eSwgTlVMTCkgdG8gZW1wZWdfb3BlbigpCisgKglUaGlzIG5vdGlmaWVzIHRoZSB0dHkgZHJpdmVyIHRoYXQgdGhlIHRlcm1pb3MgaGF2ZSBjaGFuZ2VkLgorICogCisgKiAoMTEvMTMvMjAwMCkgZ2IKKyAqCU1vdmVkIHR0eS0+bG93X2xhdGVuY3kgPSAxIGZyb20gZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrKCkgdG8gZW1wZWdfb3BlbigpCisgKgkoSXQgb25seSBuZWVkcyB0byBiZSBzZXQgb25jZSAtIERvaCEpCisgKiAKKyAqICgxMS8xMS8yMDAwKSBnYgorICoJVXBkYXRlZCB0byB3b3JrIHdpdGggaWRfdGFibGUgc3RydWN0dXJlLgorICogCisgKiAoMTEvMDQvMjAwMCkgZ2IKKyAqCUZvcmtlZCB0aGlzIGZyb20gdmlzb3IuYywgYW5kIGhhY2tlZCBpdCB1cCB0byB3b3JrIHdpdGggYW4KKyAqCUVtcGVnIGx0ZC4gZW1wZWctY2FyIHBsYXllci4gIENvbnN0cnVjdGl2ZSBjcml0aWNpc20gd2VsY29tZWQuCisgKglJIHdvdWxkIGxpa2UgdG8gc2F5LCAnVGhhbmsgWW91JyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gZm9yIHRoZQorICoJdXNlIG9mIGhpcyBjb2RlLCBhbmQgZm9yIGhpcyBndWlkYW5jZSwgYWR2aWNlIGFuZCBwYXRpZW5jZS4gOikKKyAqCUEgJ1RoYW5rIFlvdScgaXMgaW4gb3JkZXIgZm9yIEpvaG4gUmlwbGV5IG9mIEVtcGVnIGx0ZCBmb3IgaGlzCisgKglhZHZpY2UsIGFuZCBwYXRpZW5jZSB0b28uCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBHYXJ5IEJydWJha2VyIDx4YXZ5ZXJAaXgubmV0Y29tLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgRW1wZWcgTWFyayBJL0lJIERyaXZlciIKKworI2RlZmluZSBFTVBFR19WRU5ET1JfSUQJCQkweDA4NGYKKyNkZWZpbmUgRU1QRUdfUFJPRFVDVF9JRAkJMHgwMDAxCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGVtcGVnLWNhciBwbGF5ZXIgKi8KK3N0YXRpYyBpbnQgIGVtcGVnX29wZW4JCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgZW1wZWdfY2xvc2UJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgZW1wZWdfd3JpdGUJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQlpbnQgY291bnQpOworc3RhdGljIGludCAgZW1wZWdfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgZW1wZWdfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGVtcGVnX3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBlbXBlZ191bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBlbXBlZ19zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBlbXBlZ19zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZW1wZWdfaW9jdGwJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLAorCQkJCQl1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBlbXBlZ19zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBlbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRU1QRUdfVkVORE9SX0lELCBFTVBFR19QUk9EVUNUX0lEKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW1wZWdfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJlbXBlZyIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlbXBlZ19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiRW1wZWciLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZW1wZWdfb3BlbiwKKwkuY2xvc2UgPQkJZW1wZWdfY2xvc2UsCisJLnRocm90dGxlID0JCWVtcGVnX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWVtcGVnX3VudGhyb3R0bGUsCisJLmF0dGFjaCA9CQllbXBlZ19zdGFydHVwLAorCS5zaHV0ZG93biA9CQllbXBlZ19zaHV0ZG93biwKKwkuaW9jdGwgPQkJZW1wZWdfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWVtcGVnX3NldF90ZXJtaW9zLAorCS53cml0ZSA9CQllbXBlZ193cml0ZSwKKwkud3JpdGVfcm9vbSA9CQllbXBlZ193cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQllbXBlZ19jaGFyc19pbl9idWZmZXIsCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQllbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQllbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2ssCit9OworCisjZGVmaW5lIE5VTV9VUkJTCQkJMTYKKyNkZWZpbmUgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFCTQwOTYKKworc3RhdGljIHN0cnVjdCB1cmIJKndyaXRlX3VyYl9wb29sW05VTV9VUkJTXTsKK3N0YXRpYyBzcGlubG9ja190CXdyaXRlX3VyYl9wb29sX2xvY2s7CitzdGF0aWMgaW50CQlieXRlc19pbjsKK3N0YXRpYyBpbnQJCWJ5dGVzX291dDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW1wZWcgc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZW1wZWdfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogRm9yY2UgZGVmYXVsdCB0ZXJtaW8gc2V0dGluZ3MgKi8KKwllbXBlZ19zZXRfdGVybWlvcyAocG9ydCwgTlVMTCkgOworCisJYnl0ZXNfaW4gPSAwOworCWJ5dGVzX291dCA9IDA7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiKAorCQlwb3J0LT5yZWFkX3VyYiwKKwkJc2VyaWFsLT5kZXYsIAorCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQllbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2ssCisJCXBvcnQpOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWQgKi8KKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCS8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gc2VlIHNvbWUgc3RhdGlzdGljcyBpbiB5b3VyIHN5c2xvZyAqLworCS8qIGRldl9pbmZvICgmcG9ydC0+ZGV2LCAiQnl0ZXMgSW4gPSAlZCAgQnl0ZXMgT3V0ID0gJWRcbiIsIGJ5dGVzX2luLCBieXRlc19vdXQpOyAqLworfQorCisKK3N0YXRpYyBpbnQgZW1wZWdfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHVyYiAqdXJiOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfcG9zaXRpb24gPSBidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzOworCWludCBpOworCWludCBieXRlc19zZW50ID0gMDsKKwlpbnQgdHJhbnNmZXJfc2l6ZTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCisJCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgaW4gb3VyIGxpc3Qgb2YgdGhlbSAqLworCQl1cmIgPSBOVUxMOworCisJCXNwaW5fbG9ja19pcnFzYXZlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCQl1cmIgPSB3cml0ZV91cmJfcG9vbFtpXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCQkJZ290byBleGl0OworCQl9CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCisJCXRyYW5zZmVyX3NpemUgPSBtaW4gKGNvdW50LCBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUpOworCisJCW1lbWNweSAodXJiLT50cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfcG9zaXRpb24sIHRyYW5zZmVyX3NpemUpOworCisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB0cmFuc2Zlcl9zaXplLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwkJLyogYnVpbGQgdXAgb3VyIHVyYiAqLworCQl1c2JfZmlsbF9idWxrX3VyYiAoCisJCQl1cmIsCisJCQlzZXJpYWwtPmRldiwKKwkJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLCAKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJdHJhbnNmZXJfc2l6ZSwKKwkJCWVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJCQlwb3J0KTsKKworCQkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJYnl0ZXNfc2VudCA9IHN0YXR1czsKKwkJCWJyZWFrOworCQl9CisKKwkJY3VycmVudF9wb3NpdGlvbiArPSB0cmFuc2Zlcl9zaXplOworCQlieXRlc19zZW50ICs9IHRyYW5zZmVyX3NpemU7CisJCWNvdW50IC09IHRyYW5zZmVyX3NpemU7CisJCWJ5dGVzX291dCArPSB0cmFuc2Zlcl9zaXplOworCisJfQorCitleGl0OgorCXJldHVybiBieXRlc19zZW50OworCit9IAorCisKK3N0YXRpYyBpbnQgZW1wZWdfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCByb29tID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwkvKiB0YWxseSB1cCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJcm9vbSArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJCX0KKwl9IAorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKworCXJldHVybiAocm9vbSk7CisKK30KKworCitzdGF0aWMgaW50IGVtcGVnX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCBjaGFycyA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJLyogdGFsbHkgdXAgdGhlIG51bWJlciBvZiBieXRlcyB3YWl0aW5nICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKHdyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQljaGFycyArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKworCXJldHVybiAoY2hhcnMpOworCit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJLyogZ2IgLSAyMDAwLzExLzEzCisJCQkgKiBJZiB3ZSBpbnNlcnQgdG9vIG1hbnkgY2hhcmFjdGVycyB3ZSdsbCBvdmVyZmxvdyB0aGUgYnVmZmVyLgorCQkJICogVGhpcyBtZWFucyB3ZSdsbCBsb3NlIGJ5dGVzIC0gRGVjaWRlZGx5IGJhZC4KKwkJCSAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJLyogZ2IgLSAyMDAwLzExLzEzCisJCSAqIEdvZXMgc3RyYWlnaHQgdGhyb3VnaCBpbnN0ZWFkIG9mIHNjaGVkdWxpbmcgLSBpZiB0dHktPmxvd19sYXRlbmN5IGlzIHNldC4KKwkJICovCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCWJ5dGVzX2luICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIoCisJCXBvcnQtPnJlYWRfdXJiLAorCQlwb3J0LT5zZXJpYWwtPmRldiwgCisJCXVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCWVtcGVnX3JlYWRfYnVsa19jYWxsYmFjaywKKwkJcG9ydCk7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuOworCit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ191bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCAgZW1wZWdfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgcjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGJnKCIlcyAtIHJlc2V0IGNvbmZpZyIsIF9fRlVOQ1RJT05fXyk7CisJciA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChzZXJpYWwtPmRldik7CisKKwkvKiBjb250aW51ZSBvbiB3aXRoIGluaXRpYWxpemF0aW9uICovCisJcmV0dXJuIHI7CisKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworc3RhdGljIGludCBlbXBlZ19pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ19zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyoKKyAgICAgICAgICogVGhlIGVtcGVnLWNhciBwbGF5ZXIgd2FudHMgdGhlc2UgcGFydGljdWxhciB0dHkgc2V0dGluZ3MuCisgICAgICAgICAqIFlvdSBjb3VsZCwgZm9yIGV4YW1wbGUsIGNoYW5nZSB0aGUgYmF1ZCByYXRlLCBob3dldmVyIHRoZQorICAgICAgICAgKiBwbGF5ZXIgb25seSBzdXBwb3J0cyAxMTUyMDAgKGN1cnJlbnRseSksIHNvIHRoZXJlIGlzIHJlYWxseQorICAgICAgICAgKiBubyBwb2ludCBpbiBzdXBwb3J0IGZvciBjaGFuZ2VzIHRvIHRoZSB0dHkgc2V0dGluZ3MuCisgICAgICAgICAqIChhdCBsZWFzdCBmb3Igbm93KQorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgZGVmYXVsdCByZXF1aXJlbWVudHMgZm9yIHRoaXMgZGV2aWNlIGFyZToKKyAgICAgICAgICovCisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnCisJCSY9IH4oSUdOQlJLCS8qIGRpc2FibGUgaWdub3JlIGJyZWFrICovCisJCXwgQlJLSU5UCS8qIGRpc2FibGUgYnJlYWsgY2F1c2VzIGludGVycnVwdCAqLworCQl8IFBBUk1SSwkvKiBkaXNhYmxlIG1hcmsgcGFyaXR5IGVycm9ycyAqLworCQl8IElTVFJJUAkvKiBkaXNhYmxlIGNsZWFyIGhpZ2ggYml0IG9mIGlucHV0IGNoYXJhY3RlcnMgKi8KKwkJfCBJTkxDUgkJLyogZGlzYWJsZSB0cmFuc2xhdGUgTkwgdG8gQ1IgKi8KKwkJfCBJR05DUgkJLyogZGlzYWJsZSBpZ25vcmUgQ1IgKi8KKwkJfCBJQ1JOTAkJLyogZGlzYWJsZSB0cmFuc2xhdGUgQ1IgdG8gTkwgKi8KKwkJfCBJWE9OKTsJLyogZGlzYWJsZSBlbmFibGUgWE9OL1hPRkYgZmxvdyBjb250cm9sICovCisKKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfb2ZsYWcKKwkJJj0gfk9QT1NUOwkvKiBkaXNhYmxlIHBvc3Rwcm9jZXNzIG91dHB1dCBjaGFyYWN0ZXJzICovCisKKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfbGZsYWcKKwkJJj0gfihFQ0hPCS8qIGRpc2FibGUgZWNobyBpbnB1dCBjaGFyYWN0ZXJzICovCisJCXwgRUNIT05MCS8qIGRpc2FibGUgZWNobyBuZXcgbGluZSAqLworCQl8IElDQU5PTgkvKiBkaXNhYmxlIGVyYXNlLCBraWxsLCB3ZXJhc2UsIGFuZCBycHJudCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwkJfCBJU0lHCQkvKiBkaXNhYmxlIGludGVycnVwdCwgcXVpdCwgYW5kIHN1c3BlbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJCXwgSUVYVEVOKTsJLyogZGlzYWJsZSBub24tUE9TSVggc3BlY2lhbCBjaGFyYWN0ZXJzICovCisKKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcKKwkJJj0gfihDU0laRQkvKiBubyBzaXplICovCisJCXwgUEFSRU5CCS8qIGRpc2FibGUgcGFyaXR5IGJpdCAqLworCQl8IENCQVVEKTsJLyogY2xlYXIgY3VycmVudCBiYXVkIHJhdGUgKi8KKworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZworCQl8PSAoQ1M4CQkvKiBjaGFyYWN0ZXIgc2l6ZSA4IGJpdHMgKi8KKwkJfCBCMTE1MjAwKTsJLyogYmF1ZCByYXRlIDExNTIwMCAqLworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbjsgb3RoZXJ3aXNlIHRoZSBwdXNoZXMgYXJlIHNjaGVkdWxlZDsKKwkgKiB0aGlzIGlzIGJhZCBhcyBpdCBvcGVucyB1cCB0aGUgcG9zc2liaWxpdHkgb2YgZHJvcHBpbmcgYnl0ZXMKKwkgKiBvbiB0aGUgZmxvb3IuICBXZSBkb24ndCB3YW50IHRvIGRyb3AgYnl0ZXMgb24gdGhlIGZsb29yLiA6KQorCSAqLworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGVtcGVnX2luaXQgKHZvaWQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBpLCByZXR2YWw7CisKKwkvKiBjcmVhdGUgb3VyIHdyaXRlIHVyYiBwb29sIGFuZCB0cmFuc2ZlciBidWZmZXJzICovIAorCXNwaW5fbG9ja19pbml0ICgmd3JpdGVfdXJiX3Bvb2xfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJd3JpdGVfdXJiX3Bvb2xbaV0gPSB1cmI7CisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgCisJCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZW1wZWdfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZW1wZWdfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlbXBlZ19kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKHdyaXRlX3VyYl9wb29sW2ldKSB7CisJCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZSh3cml0ZV91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYih3cml0ZV91cmJfcG9vbFtpXSk7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZW1wZWdfZXhpdCAodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdXNiX2RlcmVnaXN0ZXIoJmVtcGVnX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZW1wZWdfZGV2aWNlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKHdyaXRlX3VyYl9wb29sW2ldKSB7CisJCQkvKiBGSVhNRSAtIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHVzYl9raWxsX3VyYiBjYWxsIHdoZW4KKwkJCSAqIHRoZSBob3N0IGNvbnRyb2xsZXJzIGdldCBmaXhlZCB0byBzZXQgdXJiLT5kZXYgPSBOVUxMIGFmdGVyCisJCQkgKiB0aGUgdXJiIGlzIGZpbmlzaGVkLiAgT3RoZXJ3aXNlIHRoaXMgY2FsbCBvb3BzZXMuICovCisJCQkvKiB1c2Jfa2lsbF91cmIod3JpdGVfdXJiX3Bvb2xbaV0pOyAqLworCQkJaWYgKHdyaXRlX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUod3JpdGVfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIgKHdyaXRlX3VyYl9wb29sW2ldKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7Cit9CisKKworbW9kdWxlX2luaXQoZW1wZWdfaW5pdCk7Cittb2R1bGVfZXhpdChlbXBlZ19leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQxOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIEVaLVVTQiBzcGVjaWZpYyBmdW5jdGlvbnMgdXNlZCBieSBzb21lIG9mIHRoZSBVU0IgdG8gU2VyaWFsIGRyaXZlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKy8qIEVaLVVTQiBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIuICBCaXQgMCBjb250cm9scyA4MDUxIHJlc2V0ICovCisjZGVmaW5lIENQVUNTX1JFRyAgICAweDdGOTIKKworaW50IGV6dXNiX3dyaXRlbWVtb3J5IChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCwgX191OCBiUmVxdWVzdCkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworCS8qIGRiZygiZXp1c2Jfd3JpdGVtZW1vcnkgJXgsICVkIiwgYWRkcmVzcywgbGVuZ3RoKTsgKi8KKwlpZiAoIXNlcmlhbC0+ZGV2KSB7CisJCWVycigiJXMgLSBubyBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudCwgZmFpbGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkgKHRyYW5zZmVyX2J1ZmZlciwgZGF0YSwgbGVuZ3RoKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBiUmVxdWVzdCwgMHg0MCwgYWRkcmVzcywgMCwgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIDMwMDApOworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBlenVzYl9zZXRfcmVzZXQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KQoreworCWludCByZXNwb25zZTsKKworCS8qIGRiZygiJXMgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzZXRfYml0KTsgKi8KKwlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5IChzZXJpYWwsIENQVUNTX1JFRywgJnJlc2V0X2JpdCwgMSwgMHhhMCk7CisJaWYgKHJlc3BvbnNlIDwgMCkKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzLSAlZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzZXRfYml0KTsKKwlyZXR1cm4gcmVzcG9uc2U7Cit9CisKKworRVhQT1JUX1NZTUJPTChlenVzYl93cml0ZW1lbW9yeSk7CitFWFBPUlRfU1lNQk9MKGV6dXNiX3NldF9yZXNldCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYl9jb252ZXJ0LnBsIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiX2NvbnZlcnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmMTE0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYl9jb252ZXJ0LnBsCkBAIC0wLDAgKzEsNTAgQEAKKyMhIC91c3IvYmluL3BlcmwgLXcKKworCisjIGNvbnZlcnQgYW4gSW50ZWwgSEVYIGZpbGUgaW50byBhIHNldCBvZiBDIHJlY29yZHMgdXNhYmxlIGJ5IHRoZSBmaXJtd2FyZQorIyBsb2FkaW5nIGNvZGUgaW4gdXNiLXNlcmlhbC5jIChvciBvdGhlcnMpCisKKyMgYWNjZXB0cyB0aGUgLmhleCBmaWxlKHMpIG9uIHN0ZGluLCBhIGJhc2VuYW1lICh0byBuYW1lIHRoZSBpbml0aWFsaXplZAorIyBhcnJheSkgYXMgYW4gYXJndW1lbnQsIGFuZCBwcmludHMgdGhlIC5oIGZpbGUgdG8gc3Rkb3V0LiBUeXBpY2FsIHVzYWdlOgorIyAgcGVybCBlenVzYl9jb252ZXJ0LnBsIGZvbyA8Zm9vLmhleCA+ZndfZm9vLmgKKworCitteSAkYmFzZW5hbWUgPSAkQVJHVlswXTsKK2RpZSAibm8gYmFzZSBuYW1lIHNwZWNpZmllZCIgdW5sZXNzICRiYXNlbmFtZTsKKword2hpbGUgKDxTVERJTj4pIHsKKyAgICAjICc6JyA8bGVuPiA8YWRkcj4gPHR5cGU+IDxsZW4tZGF0YT4gPGNyYz4gJ1xyJworICAgICMgIGxlbiwgdHlwZSwgY3JjIGFyZSAyLWNoYXIgaGV4LCBhZGRyIGlzIDQtY2hhciBoZXguIHR5cGUgaXMgMDAgZm9yCisgICAgIyBub3JtYWwgcmVjb3JkcywgMDEgZm9yIEVPRgorICAgIG15KCRsZW5zdHJpbmcsICRhZGRyc3RyaW5nLCAkdHlwZXN0cmluZywgJHJlc3RzdHJpbmcsICRkb3NjcmFwKSA9CisgICAgICAvXjooXHdcdykoXHdcd1x3XHcpKFx3XHcpKFx3KykoXHI/KSQvOworICAgIGRpZSAibWFsZm9ybWVkIGxpbmU6ICRfIiB1bmxlc3MgJHJlc3RzdHJpbmc7CisgICAgbGFzdCBpZiAkdHlwZXN0cmluZyBlcSAnMDEnOworICAgIG15KCRsZW4pID0gaGV4KCRsZW5zdHJpbmcpOworICAgIG15KCRhZGRyKSA9IGhleCgkYWRkcnN0cmluZyk7CisgICAgbXkoQGJ5dGVzKSA9IHVucGFjaygiQyoiLCBwYWNrKCJIIi4oMiokbGVuKSwgJHJlc3RzdHJpbmcpKTsKKyAgICAjcG9wKEBieXRlcyk7ICMgbGFzdCBieXRlIGlzIGEgQ1JDCisgICAgcHVzaChAcmVjb3JkcywgWyRhZGRyLCBcQGJ5dGVzXSk7Cit9CisKK0Bzb3J0ZWRfcmVjb3JkcyA9IHNvcnQgeyAkYS0+WzBdIDw9PiAkYi0+WzBdIH0gQHJlY29yZHM7CisKK3ByaW50IDw8IkVPRiI7CisvKgorICogJHtiYXNlbmFtZX1fZncuaAorICoKKyAqIEdlbmVyYXRlZCBmcm9tICR7YmFzZW5hbWV9LnMgYnkgZXp1c2JfY29udmVydC5wbAorICogVGhpcyBmaWxlIGlzIHByZXN1bWVkIHRvIGJlIHVuZGVyIHRoZSBzYW1lIGNvcHlyaWdodCBhcyB0aGUgc291cmNlIGZpbGUKKyAqIGZyb20gd2hpY2ggaXQgd2FzIGRlcml2ZWQuCisgKi8KKworRU9GCisKK3ByaW50ICJzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgJHtiYXNlbmFtZX1fZmlybXdhcmVbXSA9IHtcbiI7Citmb3JlYWNoICRyIChAc29ydGVkX3JlY29yZHMpIHsKKyAgICBwcmludGYoInsgMHglMDR4LFx0JWQsXHR7IiwgJHItPlswXSwgc2NhbGFyKEB7JHItPlsxXX0pKTsKKyAgICBwcmludCBqb2luKCIsICIsIG1hcCB7c3ByaW50ZignMHglMDJ4JywgJF8pO30gQHskci0+WzFdfSk7CisgICAgcHJpbnQgIn0gfSxcbiI7Cit9CitwcmludCAieyAweGZmZmYsXHQwLFx0ezB4MDB9IH1cbiI7CitwcmludCAifTtcbiI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZmQ5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMCwwICsxLDI0OTYgQEAKKy8qCisgKiBVU0IgRlRESSBTSU8gZHJpdmVyCisgKgorICogCUNvcHlyaWdodCAoQykgMTk5OSAtIDIwMDEKKyAqIAkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqICAgICAgICAgIEJpbGwgUnlkZXIgKGJyeWRlckBzZ2kuY29tKQorICoJQ29weXJpZ2h0IChDKSAyMDAyCisgKgkgICAgS3ViYSBPYmVyIChrdWJhQG1hcmVpbWJyaXVtLm9yZykKKyAqCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiBTZWUgaHR0cDovL2Z0ZGktdXNiLXNpby5zb3VyY2Vmb3JnZS5uZXQgZm9yIHVwdG8gZGF0ZSB0ZXN0aW5nIGluZm8KKyAqCWFuZCBleHRyYSBkb2N1bWVudGF0aW9uCisgKgorICogKDIxL0p1bC8yMDA0KSBJYW4gQWJib3R0CisgKiAgICAgIEluY29ycG9yYXRlZCBTdGV2ZW4gVHVybmVyJ3MgY29kZSB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIEZUMjIzMkMgY2hpcC4KKyAqICAgICAgVGhlIHByZWxpbWlsYXJ5IHBvcnQgdG8gdGhlIDIuNiBrZXJuZWwgd2FzIGJ5IFJ1cyBWLiBCcnVzaGtvZmYuICBJIGhhdmUKKyAqICAgICAgZml4ZWQgYSBjb3VwbGUgb2YgdGhpbmdzLgorICoKKyAqICgyNy9NYXkvMjAwNCkgSWFuIEFiYm90dAorICogICAgICBJbXByb3ZlZCB0aHJvdHRsaW5nIGNvZGUsIG1vc3RseSBzdG9sZW4gZnJvbSB0aGUgV2hpdGVIRUFUIGRyaXZlci4KKyAqCisgKiAoMjYvTWFyLzIwMDQpIEphbiBDYXBlaworICogICAgICBBZGRlZCBQSUQncyBmb3IgSUNELVUyMC9JQ0QtVTQwIC0gaW5jaXJjdWl0IFBJQyBkZWJ1Z2dlcnMgZnJvbSBDQ1MgSW5jLgorICoKKyAqICgwOS9GZWIvMjAwNCkgSWFuIEFiYm90dAorICogICAgICBDaGFuZ2VkIGZ1bGwgbmFtZSBvZiBVU0ItVUlSVCBkZXZpY2UgdG8gYXZvaWQgIi8iIGNoYXJhY3Rlci4KKyAqICAgICAgQWRkZWQgRlRESSdzIGFsdGVybmF0ZSBQSUQgKDB4NjAwNikgZm9yIEZUMjMyLzI0NSBkZXZpY2VzLgorICogICAgICBBZGRlZCBQSUQgZm9yICJFTFYgVVNCIE1vZHVsZSBVTzEwMCIgZnJvbSBTdGVmYW4gRnJpbmdzLgorICogCisgKiAoMjEvT2N0LzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgUmVuYW1lZCBzb21lIFZJRC9QSUQgbWFjcm9zIGZvciBNYXRyaXggT3JiaXRhbCBhbmQgUGVybGUgU3lzdGVtcworICogICAgICBkZXZpY2VzLiAgUmVtb3ZlZCBNYXRyaXggT3JiaXRhbCBhbmQgUGVybGUgU3lzdGVtcyBkZXZpY2VzIGZyb20gdGhlCisgKiAgICAgIDhVMjMyQU0gZGV2aWNlIHRhYmxlLCBidXQgbGVmdCB0aGVtIGluIHRoZSBGVDIzMkJNIHRhYmxlLCBhcyB0aGV5IGFyZQorICogICAgICBrbm93biB0byB1c2Ugb25seSBGVDIzMkJNLgorICoKKyAqICgxNy9PY3QvMjAwMykgU2NvdHQgQWxsZW4KKyAqICAgICAgQWRkZWQgdmlkL3BpZCBmb3IgUGVybGUgU3lzdGVtcyBVbHRyYVBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCisgKgorICogKDIxL1NlcC8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEFkZGVkIFZJRC9QSUQgZm9yIE9tbmlkaXJlY3Rpb25hbCBDb250cm9sIFRlY2hub2xvZ3kgVVMxMDEgVVNCIHRvCisgKiAgICAgIFJTLTIzMiBhZGFwdGVyIChhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgWEg2MzgxKS4KKyAqICAgICAgVklEL1BJRCBzdXBwbGllZCBieSBEb25hbGQgR29yZG9uLgorICoKKyAqICgxOS9BdWcvMjAwMykgSWFuIEFiYm90dAorICogICAgICBGcmVlZCB1cmIncyB0cmFuc2ZlciBidWZmZXIgaW4gd3JpdGUgYnVsayBjYWxsYmFjay4KKyAqICAgICAgT21pdHRlZCBzb21lIHBhcmFub2lkIGNoZWNrcyBpbiB3cml0ZSBidWxrIGNhbGxiYWNrIHRoYXQgZG9uJ3QgbWF0dGVyLgorICogICAgICBTY2hlZHVsZWQgd29yayBpbiB3cml0ZSBidWxrIGNhbGxiYWNrIHJlZ2FyZGxlc3Mgb2YgcG9ydCdzIG9wZW4gY291bnQuCisgKgorICogKDA1L0F1Zy8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEFkZGVkIFZJRC9QSUQgZm9yIElEIFRFQ0ggSURUMTIyMVUgVVNCIHRvIFJTLTIzMiBhZGFwdGVyLgorICogICAgICBWSUQvUElEIHByb3ZpZGVkIGJ5IFN0ZXZlIEJyaWdncy4KKyAqCisgKiAoMjMvSnVsLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgQWRkZWQgUElEcyBmb3IgQ3J5c3RhbEZvbnR6IDU0NywgNjMzLCA2MzEsIDYzNSwgNjQwIGFuZCA2NDAgZnJvbQorICogICAgICBXYXluZSBXeWx1cHNraS4KKyAqCisgKiAoMTAvSnVsLzIwMDMpIERhdmlkIEdsYW5jZQorICogICAgICBBZGRlZCBQSUQgZm9yIERTUy0yMCBTeW5jU3RhdGlvbiBjcmFkbGUgZm9yIFNvbnktRXJpY3Nzb24gUDgwMC4KKyAqCisgKiAoMjcvSnVuLzIwMDMpIElhbiBBYmJvdHQKKyAqCVJld29ya2VkIHRoZSB1cmIgaGFuZGxpbmcgbG9naWMuICBXZSBoYXZlIG5vIG1vcmUgcG9vbCwgYnV0IGR5bmFtaWNhbGx5CisgKglhbGxvY2F0ZSB0aGUgdXJiIGFuZCB0aGUgdHJhbnNmZXIgYnVmZmVyIG9uIHRoZSBmbHkuICBJbiB0ZXN0aW5nIHRoaXMKKyAqCWRvZXMgbm90IGluY3VyZSBhbnkgbWVhc3VyYWJsZSBvdmVyaGVhZC4gIFRoaXMgYWxzbyByZWxpZXMgb24gdGhlIGZhY3QKKyAqCXRoYXQgd2UgaGF2ZSBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGZvciB1cmJzLiAgSSBuaWNrZWQgdGhpcworICoJZnJvbSBHcmVnIEtIJ3MgVmlzb3IgZHJpdmVyLgorICogICAgICAKKyAqICgyMy9KdW4vMjAwMykgSWFuIEFiYm90dAorICogICAgICBSZWR1Y2VkIGZsaXAgYnVmZmVyIHB1c2hlcyBhbmQgY29ycmVjdGVkIGEgZGF0YSBsZW5ndGggdGVzdCBpbgorICogICAgICBmdGRpX3JlYWRfYnVsa19jYWxsYmFjay4KKyAqICAgICAgRGVmZXJlcmVuY2UgcG9pbnRlcnMgYWZ0ZXIgYW55IHBhcmFub2lkIGNoZWNrcywgbm90IGJlZm9yZS4KKyAqCisgKiAoMjEvSnVuLzIwMDMpIEVyaWsgTnlncmVuCisgKiAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIEhvbWUgRWxlY3Ryb25pY3MgVGlyYS0xIElSIHRyYW5jZWl2ZXIgdXNpbmcgRlQyMzJCTSBjaGlwLgorICogICAgICBTZWUgPGh0dHA6Ly93d3cuaG9tZS1lbGVjdHJvLmNvbS90aXJhMS5odG0+LiAgT25seSBvcGVyYXRlcyBwcm9wZXJseSAKKyAqICAgICAgYXQgMTAwMDAwIGFuZCBSVFMtQ1RTLCBzbyBzZXQgY3VzdG9tIGRpdmlzb3IgbW9kZSBvbiBzdGFydHVwLgorICogICAgICBBbHNvIGZvcmNlIHRoZSBUaXJhLTEgYW5kIFVTQi1VSVJUIHRvIG9ubHkgdXNlIHRoZWlyIGN1c3RvbSBiYXVkIHJhdGVzLgorICoKKyAqICgxOC9KdW4vMjAwMykgSWFuIEFiYm90dAorICogICAgICBBZGRlZCBEZXZpY2UgSUQgb2YgdGhlIFVTQiByZWxhaXMgZnJvbSBSdWRvbGYgR3VnbGVyIChiYWNrcG9ydGVkIGZyb20KKyAqICAgICAgUGhpbGlwcCBH/GhyaW5nJ3MgcGF0Y2ggZm9yIDIuNS54IGtlcm5lbCkuCisgKiAgICAgIE1vdmVkIHJlYWQgdHJhbnNmZXIgYnVmZmVyIHJlYWxsb2NhdGlvbiBpbnRvIHN0YXJ0dXAgZnVuY3Rpb24uCisgKiAgICAgIEZyZWUgZXhpc3Rpbmcgd3JpdGUgdXJiIGFuZCB0cmFuc2ZlciBidWZmZXIgaW4gc3RhcnR1cCBmdW5jdGlvbi4KKyAqICAgICAgT25seSB1c2UgdXJicyBpbiB3cml0ZSB1cmIgcG9vbCB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAqICAgICAgTW92ZWQgc29tZSBjb25zdGFudCBtYWNyb3Mgb3V0IG9mIGZ1bmN0aW9ucy4KKyAqICAgICAgTWlub3Igd2hpdGVzcGFjZSBhbmQgY29tbWVudCBjaGFuZ2VzLgorICoKKyAqICgxMi9KdW4vMjAwMykgRGF2aWQgTm9yd29vZAorICogICAgICBBZGRlZCBzdXBwb3J0IGZvciBVU0ItVUlSVCBJUiB0cmFuY2VpdmVyIHVzaW5nIDhVMjMyQU0gY2hpcC4KKyAqICAgICAgU2VlIDxodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0+LiAgT25seQorICogICAgICBvcGVyYXRlcyBwcm9wZXJseSBhdCAzMTI1MDAsIHNvIHNldCBjdXN0b20gZGl2aXNvciBtb2RlIG9uIHN0YXJ0dXAuCisgKgorICogKDEyL0p1bi8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEFkZGVkIFNlYWxldmVsIFNlYUxJTksrIDIxMHgsIDIyMHgsIDI0MHgsIDI4MHggdmlkL3BpZHMgZnJvbSBUdWFuIEhvYW5nCisgKiAgICAgIC0gSSd2ZSBlbGltaW5hdGVkIHNvbWUgdGhhdCBkb24ndCBzZWVtIHRvIGV4aXN0IQorICogICAgICBBZGRlZCBIb21lIEVsZWN0cm9uaWNzIFRpcmEtMSBJUiB0cmFuc2NlaXZlciBwaWQgZnJvbSBDaHJpcyBIb3JuCisgKiAgICAgIFNvbWUgd2hpdGVzcGFjZS9jb2Rpbmctc3R5bGUgY2xlYW51cHMKKyAqCisgKiAoMTEvSnVuLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgRml4ZWQgdW5zYWZlIHNwaW5sb2NrIHVzYWdlIGluIGZ0ZGlfd3JpdGUKKyAqCisgKiAoMjQvRmViLzIwMDMpIFJpY2hhcmQgU2hvb3RlcgorICogICAgICBJbmNyZWFzZSByZWFkIGJ1ZmZlciBzaXplIHRvIGltcHJvdmUgcmVhZCBzcGVlZHMgYXQgaGlnaGVyIGJhdWQgcmF0ZXMKKyAqICAgICAgKHNwZWNpZmljYWxseSB0ZXN0ZWQgd2l0aCB1cCB0byAxTWIvc2VjIGF0IDEuNU0gYmF1ZCkKKyAqCisgKiAoMjMvRmViLzIwMDMpIEpvaG4gV2lsa2lucworICogICAgICBBZGRlZCBYb24veG9mZiBmbG93IGNvbnRyb2wgKGFjdGl2YXRpbmcgc3VwcG9ydCBpbiB0aGUgZnRkaSBkZXZpY2UpCisgKiAgICAgIEFkZGVkIHZpZC9waWQgZm9yIFZpZGVvbmV0d29ya3MvSG9tZWNob2ljZSAoVUsgSVNQKQorICoKKyAqICgyMy9GZWIvMjAwMykgQmlsbCBSeWRlcgorICogICAgICBBZGRlZCBtYXRyaXggb3JiIGRldmljZSB2aWQvcGlkcyBmcm9tIFdheW5lIFd5bHVwc2tpCisgKgorICogKDE5L0ZlYi8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEZvciBUSU9DU1NFUklBTCwgc2V0IGFsdF9zcGVlZCB0byAwIHdoZW4gQVNZTkNfU1BEX01BU0sgdmFsdWUgaGFzCisgKiAgICAgIGNoYW5nZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gQVNZTkNfU1BEX0hJLCBBU1lOQ19TUERfVkhJLAorICogICAgICBBU1lOQ19TUERfU0hJIG9yIEFTWU5DX1NQRF9XQVJQLiAgQWxzbywgdW5sZXNzIEFTWU5DX1NQRF9DVVNUIGlzIGluCisgKiAgICAgIGZvcmNlLCBkb24ndCBib3RoZXIgY2hhbmdpbmcgYmF1ZCByYXRlIHdoZW4gY3VzdG9tX2Rpdmlzb3IgaGFzIGNoYW5nZWQuCisgKgorICogKDE4L0ZlYi8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEZpeGVkIFRJT0NNR0VUIGhhbmRsaW5nIHRvIGluY2x1ZGUgc3RhdGUgb2YgRFRSIGFuZCBSVFMsIHRoZSBzdGF0ZQorICogICAgICBvZiB3aGljaCBhcmUgbm93IHNhdmVkIGJ5IHNldF9kdHIoKSBhbmQgc2V0X3J0cygpLgorICogICAgICBGaXhlZCBpbXByb3BlciBzdG9yYWdlIGNsYXNzIGZvciBidWYgaW4gc2V0X2R0cigpIGFuZCBzZXRfcnRzKCkuCisgKiAgICAgIEFkZGVkIEZUMjMyQk0gY2hpcCB0eXBlIGFuZCBzdXBwb3J0IGZvciBpdHMgZXh0cmEgYmF1ZCByYXRlcyAoY29tcGFyZWQKKyAqICAgICAgdG8gRlQ4VTIzMkFNKS4KKyAqICAgICAgVG9vayBhY2NvdW50IG9mIHNwZWNpYWwgY2FzZSBkaXZpc29yIHZhbHVlcyBmb3IgaGlnaGVzdCBiYXVkIHJhdGVzIG9mCisgKiAgICAgIEZUOFUyMzJBTSBhbmQgRlQyMzJCTS4KKyAqICAgICAgRm9yIFRJT0NTU0VSSUFMLCBmb3JjZWQgYWx0X3NwZWVkIHRvIDAgd2hlbiBBU1lOQ19TUERfQ1VTVCBrbHVkZ2UgdXNlZCwKKyAqICAgICAgYXMgcHJldmlvdXMgYWx0X3NwZWVkIHNldHRpbmcgaXMgbm93IHN0YWxlLgorICogICAgICBNb3ZlZCBzdGFydHVwIGNvZGUgY29tbW9uIGJldHdlZW4gdGhlIHN0YXJ0dXAgcm91dGluZXMgZm9yIHRoZQorICogICAgICBkaWZmZXJlbnQgY2hpcCB0eXBlcyBpbnRvIGEgY29tbW9uIHN1YnJvdXRpbmUuCisgKgorICogKDE3L0ZlYi8yMDAzKSBCaWxsIFJ5ZGVyCisgKiAgICAgIEFkZGVkIHdyaXRlIHVyYiBidWZmZXIgcG9vbCBvbiBhIHBlciBkZXZpY2UgYmFzaXMKKyAqICAgICAgQWRkZWQgbW9yZSBjaGVja2luZyBmb3Igb3BlbiBmaWxlIG9uIGNhbGxiYWNrcyAoZml4ZWQgT09QUykKKyAqICAgICAgQWRkZWQgQ3J5c3RhbEZvbnR6IDYzMiBhbmQgNjM0IFBJRHMgCisgKiAgICAgICAgICh0aGFueCB0byBDcnlzdGFsRm9udHogZm9yIHRoZSBzYW1wbGUgZGV2aWNlcyAtIHRoZXkgZmx1c2hlZCBvdXQKKyAqICAgICAgICAgICBzb21lIGRyaXZlciBidWdzKQorICogICAgICBNaW5vciBkZWJ1Z2dpbmcgbWVzc2FnZSBjaGFuZ2VzCisgKiAgICAgIEFkZGVkIHRocm90dGxlLCB1bnRocm90dGxlIGFuZCBjaGFyc19pbl9idWZmZXIgZnVuY3Rpb25zCisgKiAgICAgIEZpeGVkIEZURElfU0lPICh0aGUgb3JpZ2luYWwgZGV2aWNlKSBidWcKKyAqICAgICAgRml4ZWQgc29tZSBzaHV0ZG93biBoYW5kbGluZworICogICAgICAKKyAqIAorICogCisgKiAKKyAqICgwNy9KdW4vMjAwMikgS3ViYSBPYmVyCisgKglDaGFuZ2VkIEZURElfU0lPX0JBU0VfQkFVRF9UT19ESVZJU09SIG1hY3JvIGludG8gZnRkaV9iYXVkX3RvX2Rpdmlzb3IKKyAqCWZ1bmN0aW9uLiBJdCB3YXMgZ2V0dGluZyB0b28gY29tcGxleC4KKyAqCUZpeCB0aGUgZGl2aXNvciBjYWxjdWxhdGlvbiBsb2dpYyB3aGljaCB3YXMgc2V0dGluZyBkaXZpc29yIG9mIDAuMTI1CisgKglpbnN0ZWFkIG9mIDAuNSBmb3IgZnJhY3Rpb25hbCBwYXJ0cyBvZiBkaXZpc29yIGVxdWFsIHRvIDUvOCwgNi84LCA3LzguCisgKglBbHNvIG1ha2UgaXQgYnVtcCB1cCB0aGUgZGl2aXNvciB0byBuZXh0IGludGVnZXIgaW4gY2FzZSBvZiA3LzggLSBpdCdzCisgKglhIGJldHRlciBhcHByb3hpbWF0aW9uLgorICoKKyAqICgyNS9KdWwvMjAwMikgQmlsbCBSeWRlciBpbnNlcnRlZCBEbWl0cmkncyBUSU9DTUlXQUlUIHBhdGNoCisgKiAgICAgIE5vdCB0ZXN0ZWQgYnkgbWUgYnV0IGl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgSSB1c2UuCisgKiAKKyAqICgwNC9KYW4vMjAwMikgS3ViYSBPYmVyCisgKglJbXBsZW1lbnRlZCAzODQwMCBiYXVkcmF0ZSBrbHVkZ2UsIHdoZXJlIGl0IGNhbiBiZSBzdWJzdGl0dXRlZCB3aXRoIG90aGVyCisgKgkgIHZhbHVlcy4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byBzZXQgY3VzdG9tIGJhdWRyYXRlcy4KKyAqCUltcGxlbWVudGVkIFRJT0NTU0VSSUFMLCBUSU9DR1NFUklBTCBpb2N0bCdzIHNvIHRoYXQgc2V0c2VyaWFsIGlzIGhhcHB5LgorICoJRklYTUU6IGJvdGggYmF1ZHJhdGUgdGhpbmdzIHNob3VsZCBldmVudHVhbGx5IGdvIHRvIHVzYnNlcmlhbC5jIGFzIG90aGVyCisgKgkgIGRldmljZXMgbWF5IG5lZWQgdGhhdCBmdW5jdGlvbmFsaXR5IHRvby4gQWN0dWFsbHksIGl0IGNhbiBwcm9iYWJseSBiZQorICoJICBtZXJnZWQgaW4gc2VyaWFsLmMgc29tZWhvdyAtIHRvbyBtYW55IGRyaXZlcnMgcmVwZWF0IHRoaXMgY29kZSBvdmVyCisgKgkgIGFuZCBvdmVyLgorICoJRml4ZWQgYmF1ZHJhdGUgZm9yZ2V0ZnVsbmVzcyAtIG9wZW4oKSB1c2VkIHRvIHJlc2V0IGJhdWRyYXRlIHRvIDk2MDAgZXZlcnkgdGltZS4KKyAqCURpdmlzb3JzIGZvciBiYXVkcmF0ZXMgYXJlIGNhbGN1bGF0ZWQgYnkgYSBtYWNyby4KKyAqCVNtYWxsIGNvZGUgY2xlYW51cHMuIFVnbHkgd2hpdGVzcGFjZSBjaGFuZ2VzIGZvciBQbGF0bydzIHNha2Ugb25seSA7LV0uCisgKgorICogKDA0L05vdi8yMDAxKSBCaWxsIFJ5ZGVyCisgKglGaXhlZCBidWcgaW4gcmVhZF9idWxrX2NhbGxiYWNrIHdoZXJlIGluY29ycmVjdCB1cmIgYnVmZmVyIHdhcyB1c2VkLgorICoJQ2xlYW5lZCB1cCB3cml0ZSBvZmZzZXQgY2FsY3VsYXRpb24KKyAqCUFkZGVkIHdyaXRlX3Jvb20gc2luY2UgZGVmYXVsdCB2YWx1ZXMgY2FuIGJlIGluY29ycmVjdCBmb3Igc2lvCisgKglDaGFuZ2VkIHdyaXRlX2J1bGtfY2FsbGJhY2sgdG8gdXNlIHNhbWUgcXVldWVfdGFzayBhcyBvdGhlciBkcml2ZXJzCisgKiAgICAgICAgKHRoZSBwcmV2aW91cyB2ZXJzaW9uIGNhdXNlZCBwYW5pY3MpCisgKglSZW1vdmVkIHBvcnQgaXRlcmF0aW9uIGNvZGUgc2luY2UgdGhlIGRldmljZSBvbmx5IGhhcyBvbmUgSS9PIHBvcnQgYW5kIGl0CisgKgkgIHdhcyB3cm9uZyBhbnl3YXkuCisgKiAKKyAqICgzMS9NYXkvMjAwMSkgZ2toCisgKglTd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgyMy9NYXkvMjAwMSkgICBCaWxsIFJ5ZGVyCisgKglBZGRlZCBydW50aW1lIGRlYnVnIHBhdGNoICh0aGFueCBUeXNvbiBEIFNhd3llcikuCisgKglDbGVhbmVkIHVwIGNvbW1lbnRzIGZvciA4VTIzMgorICoJQWRkZWQgcGFyaXR5LCBmcmFtaW5nIGFuZCBvdmVycnVuIGVycm9yIGhhbmRsaW5nCisgKglBZGRlZCByZWNlaXZlIGJyZWFrIGhhbmRsaW5nLgorICogCisgKiAoMDQvMDgvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKiAgICAgICAKKyAqICgxOC9NYXJjaC8yMDAxKSBCaWxsIFJ5ZGVyCisgKgkoTm90IHJlbGVhc2VkKQorICoJQWRkZWQgc2VuZCBicmVhayBoYW5kbGluZy4gKHJlcXVpcmVzIGtlcm5lbCBwYXRjaCB0b28pCisgKglGaXhlZCA4VTIzMkFNIGhhcmR3YXJlIFJUUy9DVFMgZXRjIHN0YXR1cyByZXBvcnRpbmcuCisgKglBZGRlZCBmbGlwYnVmIGZpeCBjb3BpZWQgZnJvbSBnZW5lcmljIGRldmljZQorICogCisgKiAoMTIvMy8yMDAwKSBCaWxsIFJ5ZGVyCisgKglBZGRlZCBzdXBwb3J0IGZvciA4VTIzMkFNIGRldmljZS4KKyAqCU1vdmVkIFBJRCBhbmQgVklEcyBpbnRvIGhlYWRlciBmaWxlIG9ubHkuCisgKglUdXJuZWQgb24gbG93LWxhdGVuY3kgZm9yIHRoZSB0dHkgKGRldmljZSB3aWxsIGRvIGhpZ2ggYmF1ZHJhdGVzKQorICoJQWRkZWQgc2h1dGRvd24gcm91dGluZSB0byBjbG9zZSBmaWxlcyB3aGVuIGRldmljZSByZW1vdmVkLgorICoJTW9yZSBkZWJ1ZyBhbmQgZXJyb3IgbWVzc2FnZSBjbGVhbnVwcy4KKyAqCisgKiAoMTEvMTMvMjAwMCkgQmlsbCBSeWRlcgorICoJQWRkZWQgc3BpbmxvY2sgcHJvdGVjdGVkIG9wZW4gY29kZSBhbmQgY2xvc2UgY29kZS4KKyAqCU11bHRpcGxlIG9wZW5zIHdvcmsgKHNvcnQgb2YgLSBzZWUgd2VicGFnZSBtZW50aW9uZWQgYWJvdmUpLgorICoJQ2xlYW5lZCB1cCBjb21tZW50cy4gUmVtb3ZlZCBtdWx0aXBsZSBQSUQvVklEIGRlZmluaXRpb25zLgorICoJRmFjdG9yaXNlZCBjdHMvZHRyIGNvZGUKKyAqCU1hZGUgdXNlIG9mIF9fRlVOQ1RJT05fXyBpbiBkYmcncworICogICAgICAKKyAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKyAqCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydAorICogCisgKiAoMTAvMDUvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisgKgljb3JlIG5lZWRzIGl0LgorICogCisgKiAoMDkvMTEvMjAwMCkgZ2toCisgKglSZW1vdmVkIERFQlVHICNpZmRlZnMgd2l0aCBjYWxsIHRvIHVzYl9zZXJpYWxfZGVidWdfZGF0YQorICoKKyAqICgwNy8xOS8yMDAwKSBna2gKKyAqCUFkZGVkIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQgdGhpcworICoJZHJpdmVyIGlzIGEgbG9hZGFibGUgbW9kdWxlIG5vdy4KKyAqCisgKiAoMDQvMDQvMjAwMCkgQmlsbCBSeWRlciAKKyAqCUZpeGVkIGJ1Z3MgaW4gVENHRVQvVENTRVQgaW9jdGxzIChieSByZW1vdmluZyB0aGVtIC0gdGhleSBhcmUKKyAqICAgICAgICBoYW5kbGVkIGVsc2V3aGVyZSBpbiB0aGUgdHR5IGlvIGRyaXZlciBjaGFpbikuCisgKgorICogKDAzLzMwLzIwMDApIEJpbGwgUnlkZXIgCisgKglJbXBsZW1lbnRlZCBsb3RzIG9mIGlvY3RscworICoJRml4ZWQgYSByYWNlIGNvbmRpdGlvbiBpbiB3cml0ZQorICoJQ2hhbmdlZCBzb21lIGRiZydzIHRvIGVycnMKKyAqCisgKiAoMDMvMjYvMjAwMCkgZ2toCisgKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgorICoKKyAqLworCisvKiBCaWxsIFJ5ZGVyIC0gYnJ5ZGVyQHNnaS5jb20gLSB3cm90ZSB0aGUgRlRESV9TSU8gaW1wbGVtZW50YXRpb24gKi8KKy8qIFRoYW54IHRvIEZUREkgZm9yIHNvIGtpbmRseSBwcm92aWRpbmcgZGV0YWlscyBvZiB0aGUgcHJvdG9jb2wgcmVxdWlyZWQgKi8KKy8qICAgdG8gdGFsayB0byB0aGUgZGV2aWNlICovCisvKiBUaGFueCB0byBna2ggYW5kIHRoZSByZXN0IG9mIHRoZSB1c2IgZGV2IGdyb3VwIGZvciBhbGwgY29kZSBJIGhhdmUgYXNzaW1pbGF0ZWQgOi0pICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJmdGRpX3Npby5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40LjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBCaWxsIFJ5ZGVyIDxicnlkZXJAc2dpLmNvbT4sIEt1YmEgT2JlciA8a3ViYUBtYXJlaW1icml1bS5vcmc+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEZUREkgU2VyaWFsIENvbnZlcnRlcnMgRHJpdmVyIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfc2lvIFtdID0geworCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TSU9fUElEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKgorICogVGhlIDhVMjMyQU0gaGFzIHRoZSBzYW1lIEFQSSBhcyB0aGUgc2lvIGV4Y2VwdCBmb3I6CisgKiAtIGl0IGNhbiBzdXBwb3J0IE1VQ0ggaGlnaGVyIGJhdWRyYXRlczsgdXAgdG86CisgKiAgIG8gOTIxNjAwIGZvciBSUzIzMiBhbmQgMjAwMDAwMCBmb3IgUlM0MjIvNDg1IGF0IDQ4TUh6CisgKiAgIG8gMjMwNDAwIGF0IDEyTUh6CisgKiAgIHNvIC4uIDhVMjMyQU0ncyBiYXVkcmF0ZSBzZXR0aW5nIGNvZGVzIGFyZSBkaWZmZXJlbnQKKyAqIC0gaXQgaGFzIGEgdHdvIGJ5dGUgc3RhdHVzIGNvZGUuCisgKiAtIGl0IHJldHVybnMgY2hhcmFjdGVycyBldmVyeSAxNm1zICh0aGUgRlRESSBkb2VzIGl0IGV2ZXJ5IDQwbXMpCisgKgorICogdGhlIGJjZERldmljZSB2YWx1ZSBpcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgRlQyMzJCTSBhbmQgRlQyNDVCTSBmcm9tCisgKiB0aGUgZWFybGllciBGVDhVMjMyQU0gYW5kIEZUOFUyMzJCTS4gIEZvciBub3csIGluY2x1ZGUgYWxsIGtub3duIFZJRC9QSUQKKyAqIGNvbWJpbmF0aW9ucyBpbiBib3RoIHRhYmxlcy4KKyAqIEZJWE1FOiBwZXJoYXBzIGJjZERldmljZSBjYW4gYWxzbyBpZGVudGlmeSAxMk1IeiBkZXZpY2VzLCBidXQgSSBkb24ndCBrbm93CisgKiBpZiB0aG9zZSBldmVyIHdlbnQgaW50byBtYXNzIHByb2R1Y3Rpb24uIFtJYW4gQWJib3R0XQorICovCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlXzhVMjMyQU0gW10gPSB7CisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9JUlRSQU5TX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfQUxUX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9SRUxBSVNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfTkZfUklDX1ZJRCwgRlRESV9ORl9SSUNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjM0X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl81NDdfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMxX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzVfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzY0MF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjQyX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9WTkhDUENVU0JfRF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfRFNTMjBfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAyX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAyXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwM18xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDNfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl80X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18zX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV81X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzdfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV84X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8zX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzVfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl82X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfN19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzhfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM180X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzZfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM183X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfOF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoSURURUNIX1ZJRCwgSURURUNIX0lEVDEyMjFVX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihPQ1RfVklELCBPQ1RfVVMxMDFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfMSwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19SMlgwLCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfMywgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfRUxWX1VPMTAwX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgSU5TSURFX0FDQ0VTU08sIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoSU5UUkVQSURfVklELCBJTlRSRVBJRF9WQUxVRUNBTl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoSU5UUkVQSURfVklELCBJTlRSRVBJRF9ORU9WSV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRkFMQ09NX1ZJRCwgRkFMQ09NX1RXSVNUX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9TVVVOVE9fU1BPUlRTX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1JNX1ZJRCwgRlRESV9STUNBTlZJRVdfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNPVEw0X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihCQU5EQl9WSUQsIEJBTkRCX1VTTzlNTDJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTLCAwLCAweDNmZikgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfRlQyMzJCTSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0lSVFJBTlNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9BTFRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUkVMQUlTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfTkZfUklDX1ZJRCwgRlRESV9ORl9SSUNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl81NDdfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjMzX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjQwX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzY0Ml9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9WTkhDUENVU0JfRF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9EU1MyMF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfMF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfNV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9NVFhPUkJfNl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUElFR1JPVVBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAxX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTA0X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMl8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMl8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwM18xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwM18yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV80X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl80X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM180X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV80X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV81X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV82X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV83X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV84X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl80X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl81X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl82X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl83X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl84X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM180X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM181X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM182X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM183X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM184X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKElEVEVDSF9WSUQsIElEVEVDSF9JRFQxMjIxVV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihPQ1RfVklELCBPQ1RfVVMxMDFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF8xLCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fUjJYMCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfMywgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfNCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwOF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MDlfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBBX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwQl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MENfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBEX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwRV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MEZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODg4X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4OV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OEFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhCX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4Q19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OERfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhFX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4Rl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9FTFZfVU8xMDBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX1NETVVTQlFTU19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfTUFTVEVSREVWRUwyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9GVVRVUkVfMF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfRlVUVVJFXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX0ZVVFVSRV8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0NTSUNEVTIwXzBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQ1NJQ0RVNDBfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgSU5TSURFX0FDQ0VTU08sIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihJTlRSRVBJRF9WSUQsIElOVFJFUElEX1ZBTFVFQ0FOX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfTkVPVklfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRkFMQ09NX1ZJRCwgRkFMQ09NX1RXSVNUX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9STV9WSUQsIEZURElfUk1DQU5WSUVXX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNPVEw0X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU085TUwyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTLCAweDQwMCwgMHhmZmZmKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9VU0JfVUlSVCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVVNCX1VJUlRfUElEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9IRV9USVJBMSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0hFX1RJUkExX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfRlQyMjMyQ1tdID0geworCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIyMzJDX1BJRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0lSVFJBTlNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TSU9fUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9BTFRfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIyMzJDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUkVMQUlTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjMyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjM0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNTQ3X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjMzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjM1X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjQwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjQyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfRFNTMjBfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX05GX1JJQ19WSUQsIEZURElfTkZfUklDX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVk5IQ1BDVVNCX0RfUElEKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUElFR1JPVVBfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDFfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAyXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwM18xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAzXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl80X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18zX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV81X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzZfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV84X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8zX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl82X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzdfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM180X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzVfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM183X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzhfUElEKSB9LAorCXsgVVNCX0RFVklDRShJRFRFQ0hfVklELCBJRFRFQ0hfSURUMTIyMVVfUElEKSB9LAorCXsgVVNCX0RFVklDRShPQ1RfVklELCBPQ1RfVVMxMDFfUElEKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfSEVfVElSQTFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9VU0JfVUlSVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfMSkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIFBST1RFR09fUjJYMCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF8zKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0VMVl9VTzEwMF9QSUQpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfU0RNVVNCUVNTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9NQVNURVJERVZFTDJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX0ZVVFVSRV8wX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9GVVRVUkVfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfRlVUVVJFXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0NTSUNEVTIwXzBfUElEKSB9LAorIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0NTSUNEVTQwXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgSU5TSURFX0FDQ0VTU08pIH0sCisJeyBVU0JfREVWSUNFKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfVkFMVUVDQU5fUElEKSB9LAorCXsgVVNCX0RFVklDRShJTlRSRVBJRF9WSUQsIElOVFJFUElEX05FT1ZJX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRkFMQ09NX1ZJRCwgRkFMQ09NX1RXSVNUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU1VVTlRPX1NQT1JUU19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfUk1fVklELCBGVERJX1JNQ0FOVklFV19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNPVEw0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU1RMNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNPOU1MMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGZ0ZGlfZHJpdmVyID0geworCS5uYW1lID0JCSJmdGRpX3NpbyIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKK3N0YXRpYyBjaGFyICpmdGRpX2NoaXBfbmFtZVtdID0geworCVtTSU9dID0gIlNJTyIsCS8qIHRoZSBzZXJpYWwgcGFydCBvZiBGVDhVMTAwQVggKi8KKwlbRlQ4VTIzMkFNXSA9ICJGVDhVMjMyQU0iLAorCVtGVDIzMkJNXSA9ICJGVDIzMkJNIiwKKwlbRlQyMjMyQ10gPSAiRlQyMjMyQyIsCit9OworCisKKy8qIENvbnN0YW50cyBmb3IgcmVhZCB1cmIgYW5kIHdyaXRlIHVyYiAqLworI2RlZmluZSBCVUZTWiA1MTIKKyNkZWZpbmUgUEtUU1ogNjQKKworLyogcnhfZmxhZ3MgKi8KKyNkZWZpbmUgVEhST1RUTEVECQkweDAxCisjZGVmaW5lIEFDVFVBTExZX1RIUk9UVExFRAkweDAyCisKK3N0cnVjdCBmdGRpX3ByaXZhdGUgeworCWZ0ZGlfY2hpcF90eXBlX3QgY2hpcF90eXBlOworCQkJCS8qIHR5cGUgb2YgdGhlIGRldmljZSwgZWl0aGVyIFNJTyBvciBGVDhVMjMyQU0gKi8KKwlpbnQgYmF1ZF9iYXNlOwkJLyogYmF1ZCBiYXNlIGNsb2NrIGZvciBkaXZpc29yIHNldHRpbmcgKi8KKwlpbnQgY3VzdG9tX2Rpdmlzb3I7CS8qIGN1c3RvbV9kaXZpc29yIGtsdWRnZSwgdGhpcyBpcyBmb3IgYmF1ZF9iYXNlIChkaWZmZXJlbnQgZnJvbSB3aGF0IGdvZXMgdG8gdGhlIGNoaXAhKSAqLworCV9fdTE2IGxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlIDsKKwkJCQkvKiB0aGUgbGFzdCBkYXRhIHN0YXRlIHNldCAtIG5lZWRlZCBmb3IgZG9pbmcgYSBicmVhayAqLworICAgICAgICBpbnQgd3JpdGVfb2Zmc2V0OyAgICAgICAvKiBUaGlzIGlzIHRoZSBvZmZzZXQgaW4gdGhlIHVzYiBkYXRhIGJsb2NrIHRvIHdyaXRlIHRoZSBzZXJpYWwgZGF0YSAtIAorCQkJCSAqIGl0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIGRldmljZXMKKwkJCQkgKi8KKwlpbnQgZmxhZ3M7CQkvKiBzb21lIEFTWU5DX3h4eHggZmxhZ3MgYXJlIHN1cHBvcnRlZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9kdHJfcnRzOwkvKiBzYXZlZCBtb2RlbSBjb250cm9sIG91dHB1dHMgKi8KKyAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKyAJY2hhciBwcmV2X3N0YXR1cywgZGlmZl9zdGF0dXM7ICAgICAgICAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCisJX191OCByeF9mbGFnczsJCS8qIHJlY2VpdmUgc3RhdGUgZmxhZ3MgKHRocm90dGxpbmcpICovCisJc3BpbmxvY2tfdCByeF9sb2NrOwkvKiBzcGlubG9jayBmb3IgcmVjZWl2ZSBzdGF0ZSAqLworCisJX191MTYgaW50ZXJmYWNlOwkvKiBGVDIyMzJDIHBvcnQgaW50ZXJmYWNlICgwIGZvciBGVDIzMi8yNDUpICovCisKKwlpbnQgZm9yY2VfYmF1ZDsJCS8qIGlmIG5vbi16ZXJvLCBmb3JjZSB0aGUgYmF1ZCByYXRlIHRvIHRoaXMgdmFsdWUgKi8KKwlpbnQgZm9yY2VfcnRzY3RzOwkvKiBpZiBub24temVybywgZm9yY2UgUlRTLUNUUyB0byBhbHdheXMgYmUgZW5hYmxlZCAqLworfTsKKworLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLworI2RlZmluZSBGVERJX1NUQVRVU19CMF9NQVNLCShGVERJX1JTMF9DVFMgfCBGVERJX1JTMF9EU1IgfCBGVERJX1JTMF9SSSB8IEZURElfUlMwX1JMU0QpCisjZGVmaW5lIEZURElfU1RBVFVTX0IxX01BU0sJKEZURElfUlNfQkkpCisvKiBFbmQgVElPQ01JV0FJVCAqLworCisjZGVmaW5lIEZURElfSU1QTF9BU1lOQ19GTEFHUyA9ICggQVNZTkNfU1BEX0hJIHwgQVNZTkNfU1BEX1ZISSBcCisgQVNZTkNfU1BEX0NVU1QgfCBBU1lOQ19TUERfU0hJIHwgQVNZTkNfU1BEX1dBUlAgKQorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhIEZUREkgc2VyaWFsIGNvbnZlcnRlciAqLworc3RhdGljIGludCAgZnRkaV9TSU9fc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZnRkaV84VTIzMkFNX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZnRkaV9GVDIzMkJNX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZnRkaV9GVDIyMzJDX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZnRkaV9VU0JfVUlSVF9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfSEVfVElSQTFfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBmdGRpX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpX29wZW4JCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgZnRkaV9jbG9zZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBmdGRpX3dyaXRlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIGZ0ZGlfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgZnRkaV9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAgZnRkaV90aW9jbWdldCAgICAgICAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBmdGRpX3Rpb2Ntc2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAgZnRkaV9pb2N0bAkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICk7CitzdGF0aWMgdm9pZCBmdGRpX3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBmdGRpX3VudGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBmdGRpXzIzMmFtX2JhdWRfYmFzZV90b19kaXZpc29yIChpbnQgYmF1ZCwgaW50IGJhc2UpOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBmdGRpXzIzMmFtX2JhdWRfdG9fZGl2aXNvciAoaW50IGJhdWQpOworc3RhdGljIF9fdTMyIGZ0ZGlfMjMyYm1fYmF1ZF9iYXNlX3RvX2Rpdmlzb3IgKGludCBiYXVkLCBpbnQgYmFzZSk7CitzdGF0aWMgX191MzIgZnRkaV8yMzJibV9iYXVkX3RvX2Rpdmlzb3IgKGludCBiYXVkKTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZ0ZGlfU0lPX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJGVERJIFNJTyIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX3NpbywKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZnRkaV9vcGVuLAorCS5jbG9zZSA9CQlmdGRpX2Nsb3NlLAorCS50aHJvdHRsZSA9CQlmdGRpX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWZ0ZGlfdW50aHJvdHRsZSwKKwkud3JpdGUgPQkJZnRkaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlmdGRpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWZ0ZGlfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkudGlvY21nZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21zZXQsCisJLmlvY3RsID0JCWZ0ZGlfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWZ0ZGlfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlmdGRpX2JyZWFrX2N0bCwKKwkuYXR0YWNoID0JCWZ0ZGlfU0lPX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWZ0ZGlfc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV84VTIzMkFNX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJGVERJIDhVMjMyQU0gQ29tcGF0aWJsZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlXzhVMjMyQU0sCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWZ0ZGlfb3BlbiwKKwkuY2xvc2UgPQkJZnRkaV9jbG9zZSwKKwkudGhyb3R0bGUgPQkJZnRkaV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlmdGRpX3VudGhyb3R0bGUsCisJLndyaXRlID0JCWZ0ZGlfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZnRkaV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCisJLmF0dGFjaCA9CQlmdGRpXzhVMjMyQU1fc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZnRkaV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBmdGRpX0ZUMjMyQk1fZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkZUREkgRlQyMzJCTSBDb21wYXRpYmxlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfRlQyMzJCTSwKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZnRkaV9vcGVuLAorCS5jbG9zZSA9CQlmdGRpX2Nsb3NlLAorCS50aHJvdHRsZSA9CQlmdGRpX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWZ0ZGlfdW50aHJvdHRsZSwKKwkud3JpdGUgPQkJZnRkaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlmdGRpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWZ0ZGlfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkudGlvY21nZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21zZXQsCisJLmlvY3RsID0JCWZ0ZGlfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWZ0ZGlfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlmdGRpX2JyZWFrX2N0bCwKKwkuYXR0YWNoID0JCWZ0ZGlfRlQyMzJCTV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQlmdGRpX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZ0ZGlfRlQyMjMyQ19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiRlRESSBGVDIyMzJDIENvbXBhdGlibGUiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9GVDIyMzJDLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlmdGRpX29wZW4sCisJLmNsb3NlID0JCWZ0ZGlfY2xvc2UsCisJLnRocm90dGxlID0JCWZ0ZGlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZnRkaV91bnRocm90dGxlLAorCS53cml0ZSA9CQlmdGRpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWZ0ZGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLAorCS5hdHRhY2ggPQkJZnRkaV9GVDIyMzJDX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWZ0ZGlfc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV9VU0JfVUlSVF9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiVVNCLVVJUlQgSW5mcmFyZWQgVHJhbmNlaXZlciIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX1VTQl9VSVJULAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlmdGRpX29wZW4sCisJLmNsb3NlID0JCWZ0ZGlfY2xvc2UsCisJLnRocm90dGxlID0JCWZ0ZGlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZnRkaV91bnRocm90dGxlLAorCS53cml0ZSA9CQlmdGRpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWZ0ZGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLAorCS5hdHRhY2ggPQkJZnRkaV9VU0JfVUlSVF9zdGFydHVwLAorCS5zaHV0ZG93biA9CQlmdGRpX3NodXRkb3duLAorfTsKKworLyogVGhlIFRJUkExIGlzIGJhc2VkIG9uIGEgIEZUMjMyQk0gd2hpY2ggcmVxdWlyZXMgYSBmaXhlZCBiYXVkIHJhdGUgb2YgMTAwMDAwCisgKiBhbmQgd2hpY2ggcmVxdWlyZXMgUlRTLUNUUyB0byBiZSBlbmFibGVkLiAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZ0ZGlfSEVfVElSQTFfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkhvbWUtRWxlY3Ryb25pY3MgVElSQS0xIElSIFRyYW5zY2VpdmVyIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfSEVfVElSQTEsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWZ0ZGlfb3BlbiwKKwkuY2xvc2UgPQkJZnRkaV9jbG9zZSwKKwkudGhyb3R0bGUgPQkJZnRkaV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlmdGRpX3VudGhyb3R0bGUsCisJLndyaXRlID0JCWZ0ZGlfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZnRkaV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCisJLmF0dGFjaCA9CQlmdGRpX0hFX1RJUkExX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWZ0ZGlfc2h1dGRvd24sCit9OworCisKKworI2RlZmluZSBXRFJfVElNRU9VVCA1MDAwIC8qIGRlZmF1bHQgdXJiIHRpbWVvdXQgKi8KKworLyogSGlnaCBhbmQgbG93IGFyZSBmb3IgRFRSLCBSVFMgZXRjIGV0YyAqLworI2RlZmluZSBISUdIIDEKKyNkZWZpbmUgTE9XIDAKKworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVXRsaXR5IGZ1bmN0aW9ucworICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBmdGRpXzIzMmFtX2JhdWRfYmFzZV90b19kaXZpc29yKGludCBiYXVkLCBpbnQgYmFzZSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnQgZGl2aXNvcjsKKwlpbnQgZGl2aXNvcjMgPSBiYXNlIC8gMiAvIGJhdWQ7IC8vIGRpdmlzb3Igc2hpZnRlZCAzIGJpdHMgdG8gdGhlIGxlZnQKKwlpZiAoKGRpdmlzb3IzICYgMHg3KSA9PSA3KSBkaXZpc29yMyArKzsgLy8gcm91bmQgeC43LzggdXAgdG8geCsxCisJZGl2aXNvciA9IGRpdmlzb3IzID4+IDM7CisJZGl2aXNvcjMgJj0gMHg3OworCWlmIChkaXZpc29yMyA9PSAxKSBkaXZpc29yIHw9IDB4YzAwMDsgZWxzZSAvLyAwLjEyNQorCWlmIChkaXZpc29yMyA+PSA0KSBkaXZpc29yIHw9IDB4NDAwMDsgZWxzZSAvLyAwLjUKKwlpZiAoZGl2aXNvcjMgIT0gMCkgZGl2aXNvciB8PSAweDgwMDA7ICAgICAgLy8gMC4yNQorCWlmIChkaXZpc29yID09IDEpIGRpdmlzb3IgPSAwOwkvKiBzcGVjaWFsIGNhc2UgZm9yIG1heGltdW0gYmF1ZCByYXRlICovCisJcmV0dXJuIGRpdmlzb3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IoaW50IGJhdWQpCit7CisJIHJldHVybihmdGRpXzIzMmFtX2JhdWRfYmFzZV90b19kaXZpc29yKGJhdWQsIDQ4MDAwMDAwKSk7Cit9CisKK3N0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yKGludCBiYXVkLCBpbnQgYmFzZSkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaXZmcmFjWzhdID0geyAwLCAzLCAyLCA0LCAxLCA1LCA2LCA3IH07CisJX191MzIgZGl2aXNvcjsKKwlpbnQgZGl2aXNvcjMgPSBiYXNlIC8gMiAvIGJhdWQ7IC8vIGRpdmlzb3Igc2hpZnRlZCAzIGJpdHMgdG8gdGhlIGxlZnQKKwlkaXZpc29yID0gZGl2aXNvcjMgPj4gMzsKKwlkaXZpc29yIHw9IChfX3UzMilkaXZmcmFjW2Rpdmlzb3IzICYgMHg3XSA8PCAxNDsKKwkvKiBEZWFsIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgaGlnaGVzdCBiYXVkIHJhdGVzLiAqLworCWlmIChkaXZpc29yID09IDEpIGRpdmlzb3IgPSAwOyBlbHNlCS8vIDEuMAorCWlmIChkaXZpc29yID09IDB4NDAwMSkgZGl2aXNvciA9IDE7CS8vIDEuNQorCXJldHVybiBkaXZpc29yOworfQorCitzdGF0aWMgX191MzIgZnRkaV8yMzJibV9iYXVkX3RvX2Rpdmlzb3IoaW50IGJhdWQpCit7CisJIHJldHVybihmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yKGJhdWQsIDQ4MDAwMDAwKSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgaGlnaF9vcl9sb3cpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgZnRkaV9oaWdoX29yX2xvdzsKKwlpbnQgcnY7CisJCisJYnVmID0ga21hbGxvYygxLCBHRlBfTk9JTyk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCQorCWlmIChoaWdoX29yX2xvdykgeworCQlmdGRpX2hpZ2hfb3JfbG93ID0gRlRESV9TSU9fU0VUX1JUU19ISUdIOworCQlwcml2LT5sYXN0X2R0cl9ydHMgfD0gVElPQ01fUlRTOworCX0gZWxzZSB7CisJCWZ0ZGlfaGlnaF9vcl9sb3cgPSBGVERJX1NJT19TRVRfUlRTX0xPVzsKKwkJcHJpdi0+bGFzdF9kdHJfcnRzICY9IH5USU9DTV9SVFM7CisJfQorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgICAgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVCwgCisJCQkgICAgICAgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJICAgICAgIGZ0ZGlfaGlnaF9vcl9sb3csIHByaXYtPmludGVyZmFjZSwgCisJCQkgICAgICAgYnVmLCAwLCBXRFJfVElNRU9VVCk7CisKKwlrZnJlZShidWYpOworCXJldHVybiBydjsKK30KKworCitzdGF0aWMgaW50IHNldF9kdHIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGhpZ2hfb3JfbG93KQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGZ0ZGlfaGlnaF9vcl9sb3c7CisJaW50IHJ2OworCQorCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX05PSU8pOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChoaWdoX29yX2xvdykgeworCQlmdGRpX2hpZ2hfb3JfbG93ID0gRlRESV9TSU9fU0VUX0RUUl9ISUdIOworCQlwcml2LT5sYXN0X2R0cl9ydHMgfD0gVElPQ01fRFRSOworCX0gZWxzZSB7CisJCWZ0ZGlfaGlnaF9vcl9sb3cgPSBGVERJX1NJT19TRVRfRFRSX0xPVzsKKwkJcHJpdi0+bGFzdF9kdHJfcnRzICY9IH5USU9DTV9EVFI7CisJfQorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgICAgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVCwgCisJCQkgICAgICAgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJICAgICAgIGZ0ZGlfaGlnaF9vcl9sb3csIHByaXYtPmludGVyZmFjZSwgCisJCQkgICAgICAgYnVmLCAwLCBXRFJfVElNRU9VVCk7CisKKwlrZnJlZShidWYpOworCXJldHVybiBydjsKK30KKworCitzdGF0aWMgX191MzIgZ2V0X2Z0ZGlfZGl2aXNvcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICogcG9ydCk7CisKKworc3RhdGljIGludCBjaGFuZ2Vfc3BlZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgKmJ1ZjsKKyAgICAgICAgX191MTYgdXJiX3ZhbHVlOworCV9fdTE2IHVyYl9pbmRleDsKKwlfX3UzMiB1cmJfaW5kZXhfdmFsdWU7CisJaW50IHJ2OworCisJYnVmID0ga21hbGxvYygxLCBHRlBfTk9JTyk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJdXJiX2luZGV4X3ZhbHVlID0gZ2V0X2Z0ZGlfZGl2aXNvcihwb3J0KTsKKwl1cmJfdmFsdWUgPSAoX191MTYpdXJiX2luZGV4X3ZhbHVlOworCXVyYl9pbmRleCA9IChfX3UxNikodXJiX2luZGV4X3ZhbHVlID4+IDE2KTsKKwlpZiAocHJpdi0+aW50ZXJmYWNlKSB7CS8qIEZUMjIzMkMgKi8KKwkJdXJiX2luZGV4ID0gKF9fdTE2KSgodXJiX2luZGV4IDw8IDgpIHwgcHJpdi0+aW50ZXJmYWNlKTsKKwl9CisJCisJcnYgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVCwKKwkJCSAgICBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVF9UWVBFLAorCQkJICAgIHVyYl92YWx1ZSwgdXJiX2luZGV4LAorCQkJICAgIGJ1ZiwgMCwgMTAwKTsKKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJ2OworfQorCisKK3N0YXRpYyBfX3UzMiBnZXRfZnRkaV9kaXZpc29yKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiBwb3J0KQoreyAvKiBnZXRfZnRkaV9kaXZpc29yICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX3UzMiBkaXZfdmFsdWUgPSAwOworCWludCBkaXZfb2theSA9IDE7CisJaW50IGJhdWQ7CisKKwkvKgorCSAqIFRoZSBsb2dpYyBpbnZvbHZlZCBpbiBzZXR0aW5nIHRoZSBiYXVkcmF0ZSBjYW4gYmUgY2xlYW5seSBzcGxpdCBpbiAzIHN0ZXBzLgorCSAqIE9idGFpbmluZyB0aGUgYWN0dWFsIGJhdWQgcmF0ZSBpcyBhIGxpdHRsZSB0cmlja3kgc2luY2UgdW5peCB0cmFkaXRpb25hbGx5CisJICogc29tZWhvdyBpZ25vcmVkIHRoZSBwb3NzaWJpbGl0eSB0byBzZXQgbm9uLXN0YW5kYXJkIGJhdWQgcmF0ZXMuCisJICogMS4gU3RhbmRhcmQgYmF1ZCByYXRlcyBhcmUgc2V0IGluIHR0eS0+dGVybWlvcy0+Y19jZmxhZworCSAqIDIuIElmIHRoZXNlIGFyZSBub3QgZW5vdWdoLCB5b3UgY2FuIHNldCBhbnkgc3BlZWQgdXNpbmcgYWx0X3NwZWVkIGFzIGZvbGxvd3M6CisJICogICAgLSBzZXQgdHR5LT50ZXJtaW9zLT5jX2NmbGFnIHNwZWVkIHRvIEIzODQwMAorCSAqICAgIC0gc2V0IHlvdXIgcmVhbCBzcGVlZCBpbiB0dHktPmFsdF9zcGVlZDsgaXQgZ2V0cyBpZ25vcmVkIHdoZW4KKwkgKiAgICAgIGFsdF9zcGVlZD09MCwgKG9yKQorCSAqICAgIC0gY2FsbCBUSU9DU1NFUklBTCBpb2N0bCB3aXRoIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkgc2V0IGFzIGZvbGxvd3M6CisJICogICAgICBmbGFncyAmIEFTWU5DX1NQRF9NQVNLID09IEFTWU5DX1NQRF9bSEksIFZISSwgU0hJLCBXQVJQXSwgdGhpcyBqdXN0CisJICogICAgICBzZXRzIGFsdF9zcGVlZCB0byAoSEk6IDU3NjAwLCBWSEk6IDExNTIwMCwgU0hJOiAyMzA0MDAsIFdBUlA6IDQ2MDgwMCkKKwkgKiAqKiBTdGVwcyAxLCAyIGFyZSBkb25lIGNvdXJ0ZXN5IG9mIHR0eV9nZXRfYmF1ZF9yYXRlCisJICogMy4gWW91IGNhbiBhbHNvIHNldCBiYXVkIHJhdGUgYnkgc2V0dGluZyBjdXN0b20gZGl2aXNvciBhcyBmb2xsb3dzCisJICogICAgLSBzZXQgdHR5LT50ZXJtaW9zLT5jX2NmbGFnIHNwZWVkIHRvIEIzODQwMAorCSAqICAgIC0gY2FsbCBUSU9DU1NFUklBTCBpb2N0bCB3aXRoIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkgc2V0IGFzIGZvbGxvd3M6CisJICogICAgICBvIGZsYWdzICYgQVNZTkNfU1BEX01BU0sgPT0gQVNZTkNfU1BEX0NVU1QKKwkgKiAgICAgIG8gY3VzdG9tX2Rpdmlzb3Igc2V0IHRvIGJhdWRfYmFzZSAvIHlvdXJfbmV3X2JhdWRyYXRlCisJICogKiogU3RlcCAzIGlzIGRvbmUgY291cnRlc3kgb2YgY29kZSBib3Jyb3dlZCBmcm9tIHNlcmlhbC5jIC0gSSBzaG91bGQgcmVhbGx5CisJICogICAgc3BlbmQgc29tZSB0aW1lIGFuZCBzZXBhcmF0ZSttb3ZlIHRoaXMgY29tbW9uIGNvZGUgdG8gc2VyaWFsLmMsIGl0IGlzCisJICogICAgcmVwbGljYXRlZCBpbiBuZWFybHkgZXZlcnkgc2VyaWFsIGRyaXZlciB5b3Ugc2VlLgorCSAqLworCisJLyogMS4gR2V0IHRoZSBiYXVkIHJhdGUgZnJvbSB0aGUgdHR5IHNldHRpbmdzLCB0aGlzIG9ic2VydmVzIGFsdF9zcGVlZCBoYWNrICovCisKKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKKwlkYmcoIiVzIC0gdHR5X2dldF9iYXVkX3JhdGUgcmVwb3J0cyBzcGVlZCAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZCk7CisKKwkvKiAyLiBPYnNlcnZlIGFzeW5jLWNvbXBhdGlibGUgY3VzdG9tX2Rpdmlzb3IgaGFjaywgdXBkYXRlIGJhdWRyYXRlIGlmIG5lZWRlZCAqLworCisJaWYgKGJhdWQgPT0gMzg0MDAgJiYKKwkgICAgKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkgJiYKKwkgICAgIChwcml2LT5jdXN0b21fZGl2aXNvcikpIHsKKwkJYmF1ZCA9IHByaXYtPmJhdWRfYmFzZSAvIHByaXYtPmN1c3RvbV9kaXZpc29yOworCQlkYmcoIiVzIC0gY3VzdG9tIGRpdmlzb3IgJWQgc2V0cyBiYXVkIHJhdGUgdG8gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPmN1c3RvbV9kaXZpc29yLCBiYXVkKTsKKwl9CisKKwkvKiAzLiBDb252ZXJ0IGJhdWRyYXRlIHRvIGRldmljZS1zcGVjaWZpYyBkaXZpc29yICovCisKKwlpZiAoIWJhdWQpIGJhdWQgPSA5NjAwOwkKKwlzd2l0Y2gocHJpdi0+Y2hpcF90eXBlKSB7CisJY2FzZSBTSU86IC8qIFNJTyBjaGlwICovCisJCXN3aXRjaChiYXVkKSB7CisJCWNhc2UgMzAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMzAwOyBicmVhazsKKwkJY2FzZSA2MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I2MDA7IGJyZWFrOworCQljYXNlIDEyMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IxMjAwOyBicmVhazsKKwkJY2FzZSAyNDAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMjQwMDsgYnJlYWs7CisJCWNhc2UgNDgwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjQ4MDA7IGJyZWFrOworCQljYXNlIDk2MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I5NjAwOyBicmVhazsKKwkJY2FzZSAxOTIwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjE5MjAwOyBicmVhazsKKwkJY2FzZSAzODQwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjM4NDAwOyBicmVhazsKKwkJY2FzZSA1NzYwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjU3NjAwOyAgYnJlYWs7CisJCWNhc2UgMTE1MjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMTE1MjAwOyBicmVhazsKKwkJfSAvKiBiYXVkICovCisJCWlmIChkaXZfdmFsdWUgPT0gMCkgeworICAJCQlkYmcoIiVzIC0gQmF1ZHJhdGUgKCVkKSByZXF1ZXN0ZWQgaXMgbm90IHN1cHBvcnRlZCIsIF9fRlVOQ1RJT05fXywgIGJhdWQpOworCQkJZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjk2MDA7CisJCQlkaXZfb2theSA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGVDhVMjMyQU06IC8qIDhVMjMyQU0gY2hpcCAqLworCQlpZiAoYmF1ZCA8PSAzMDAwMDAwKSB7CisJCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmFtX2JhdWRfdG9fZGl2aXNvcihiYXVkKTsKKwkJfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgZGJnKCIlcyAtIEJhdWQgcmF0ZSB0b28gaGlnaCEiLCBfX0ZVTkNUSU9OX18pOworCQkJZGl2X3ZhbHVlID0gZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IoOTYwMCk7CisJCQlkaXZfb2theSA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGVDIzMkJNOiAvKiBGVDIzMkJNIGNoaXAgKi8KKwljYXNlIEZUMjIzMkM6IC8qIEZUMjIzMkMgY2hpcCAqLworCQlpZiAoYmF1ZCA8PSAzMDAwMDAwKSB7CisJCQlkaXZfdmFsdWUgPSBmdGRpXzIzMmJtX2JhdWRfdG9fZGl2aXNvcihiYXVkKTsKKwkJfSBlbHNlIHsKKwkgICAgICAgICAgICAgICAgZGJnKCIlcyAtIEJhdWQgcmF0ZSB0b28gaGlnaCEiLCBfX0ZVTkNUSU9OX18pOworCQkJZGl2X3ZhbHVlID0gZnRkaV8yMzJibV9iYXVkX3RvX2Rpdmlzb3IoOTYwMCk7CisJCQlkaXZfb2theSA9IDA7CisJCX0KKwkJYnJlYWs7CisJfSAvKiBwcml2LT5jaGlwX3R5cGUgKi8KKworCWlmIChkaXZfb2theSkgeworCQlkYmcoIiVzIC0gQmF1ZCByYXRlIHNldCB0byAlZCAoZGl2aXNvciAweCVsWCkgb24gY2hpcCAlcyIsCisJCQlfX0ZVTkNUSU9OX18sIGJhdWQsICh1bnNpZ25lZCBsb25nKWRpdl92YWx1ZSwKKwkJCWZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOworCX0KKworCXJldHVybihkaXZfdmFsdWUpOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiBwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKiByZXRpbmZvKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKCFyZXRpbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCXRtcC5mbGFncyA9IHByaXYtPmZsYWdzOworCXRtcC5iYXVkX2Jhc2UgPSBwcml2LT5iYXVkX2Jhc2U7CisJdG1wLmN1c3RvbV9kaXZpc29yID0gcHJpdi0+Y3VzdG9tX2Rpdmlzb3I7CisJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9IC8qIGdldF9zZXJpYWxfaW5mbyAqLworCisKK3N0YXRpYyBpbnQgc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiBwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKiBuZXdpbmZvKQoreyAvKiBzZXRfc2VyaWFsX2luZm8gKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSBvbGRfcHJpdjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3NlcmlhbCwgbmV3aW5mbywgc2l6ZW9mKG5ld19zZXJpYWwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJb2xkX3ByaXYgPSAqIHByaXY7CisKKwkvKiBEbyBlcnJvciBjaGVja2luZyBhbmQgcGVybWlzc2lvbiBjaGVja2luZyAqLworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJCWlmICgoKG5ld19zZXJpYWwuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9CisJCSAgICAgKHByaXYtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCisJCQlyZXR1cm4gLUVQRVJNOworCQlwcml2LT5mbGFncyA9ICgocHJpdi0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKKwkJCSAgICAgICAobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX1VTUl9NQVNLKSk7CisJCXByaXYtPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKKwkJZ290byBjaGVja19hbmRfZXhpdDsKKwl9CisKKwlpZiAoKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IHByaXYtPmJhdWRfYmFzZSkgJiYKKwkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTWFrZSB0aGUgY2hhbmdlcyAtIHRoZXNlIGFyZSBwcml2aWxlZ2VkIGNoYW5nZXMhICovCisKKwlwcml2LT5mbGFncyA9ICgocHJpdi0+ZmxhZ3MgJiB+QVNZTkNfRkxBR1MpIHwKKwkgICAgICAgICAgICAgICAobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX0ZMQUdTKSk7CQorCXByaXYtPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKKworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKworY2hlY2tfYW5kX2V4aXQ6CisJaWYgKChvbGRfcHJpdi5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQorCSAgICAgKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spKSB7CisJCWlmICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQorCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSA1NzYwMDsKKwkJZWxzZSBpZiAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9WSEkpCisJCQlwb3J0LT50dHktPmFsdF9zcGVlZCA9IDExNTIwMDsKKwkJZWxzZSBpZiAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCisJCQlwb3J0LT50dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKKwkJZWxzZSBpZiAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQorCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSA0NjA4MDA7CisJCWVsc2UKKwkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gMDsKKwl9CisJaWYgKCgob2xkX3ByaXYuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KKwkgICAgIChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSkgfHwKKwkgICAgKCgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpICYmCisJICAgICAob2xkX3ByaXYuY3VzdG9tX2Rpdmlzb3IgIT0gcHJpdi0+Y3VzdG9tX2Rpdmlzb3IpKSkgeworCQljaGFuZ2Vfc3BlZWQocG9ydCk7CisJfQorCQorCXJldHVybiAoMCk7CisKK30gLyogc2V0X3NlcmlhbF9pbmZvICovCisKKworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3lzZnMgQXR0cmlidXRlCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X2xhdGVuY3lfdGltZXIoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJdW5zaWduZWQgc2hvcnQgbGF0ZW5jeSA9IDA7CisJaW50IHJ2ID0gMDsKKwkKKwl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCQorCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJCisJcnYgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUl9SRVFVRVNULAorCQkJICAgICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUsCisJCQkgICAgIDAsIHByaXYtPmludGVyZmFjZSwgCisJCQkgICAgIChjaGFyKikgJmxhdGVuY3ksIDEsIFdEUl9USU1FT1VUKTsKKwkKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlYWQgbGF0ZW5jeSB0aW1lcjogJWkiLCBydik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgbGF0ZW5jeSk7Cit9CisKKy8qIFdyaXRlIGEgbmV3IHZhbHVlIG9mIHRoZSBsYXRlbmN5IHRpbWVyLCBpbiB1bml0cyBvZiBtaWxsaXNlY29uZHMuICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9sYXRlbmN5X3RpbWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqdmFsYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwljaGFyIGJ1ZlsxXTsKKwlpbnQgdiA9IHNpbXBsZV9zdHJ0b3VsKHZhbGJ1ZiwgTlVMTCwgMTApOworCWludCBydiA9IDA7CisJCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwkKKwlkYmcoIiVzOiBzZXR0aW5nIGxhdGVuY3kgdGltZXIgPSAlaSIsIF9fRlVOQ1RJT05fXywgdik7CisJCisJcnYgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNULAorCQkJICAgICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUsCisJCQkgICAgIHYsIHByaXYtPmludGVyZmFjZSwgCisJCQkgICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOworCQorCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gd3JpdGUgbGF0ZW5jeSB0aW1lcjogJWkiLCBydik7CisJCXJldHVybiAtRUlPOworCX0KKwkKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIFdyaXRlIGFuIGV2ZW50IGNoYXJhY3RlciBkaXJlY3RseSB0byB0aGUgRlRESSByZWdpc3Rlci4gIFRoZSBBU0NJSQorICAgdmFsdWUgaXMgaW4gdGhlIGxvdyA4IGJpdHMsIHdpdGggdGhlIGVuYWJsZSBiaXQgaW4gdGhlIDl0aCBiaXQuICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9ldmVudF9jaGFyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqdmFsYnVmLAorCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwljaGFyIGJ1ZlsxXTsKKwlpbnQgdiA9IHNpbXBsZV9zdHJ0b3VsKHZhbGJ1ZiwgTlVMTCwgMTApOworCWludCBydiA9IDA7CisJCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwkKKwlkYmcoIiVzOiBzZXR0aW5nIGV2ZW50IGNoYXIgPSAlaSIsIF9fRlVOQ1RJT05fXywgdik7CisJCisJcnYgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUl9SRVFVRVNULAorCQkJICAgICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUl9SRVFVRVNUX1RZUEUsCisJCQkgICAgIHYsIHByaXYtPmludGVyZmFjZSwgCisJCQkgICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOworCQorCWlmIChydiA8IDApIHsKKwkJZGJnKCJVbmFibGUgdG8gd3JpdGUgZXZlbnQgY2hhcmFjdGVyOiAlaSIsIHJ2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGxhdGVuY3lfdGltZXIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2xhdGVuY3lfdGltZXIsIHN0b3JlX2xhdGVuY3lfdGltZXIpOworc3RhdGljIERFVklDRV9BVFRSKGV2ZW50X2NoYXIsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2V2ZW50X2NoYXIpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc3lzZnNfYXR0cnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sJCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXVkZXYgPSBzZXJpYWwtPmRldjsKKwkKKwkvKiBYWFggSSd2ZSBubyBpZGVhIGlmIHRoZSBvcmlnaW5hbCBTSU8gc3VwcG9ydHMgdGhlIGV2ZW50X2NoYXIKKwkgKiBzeXNmcyBwYXJhbWV0ZXIsIHNvIEknbSBwbGF5aW5nIGl0IHNhZmUuICAqLworCWlmIChwcml2LT5jaGlwX3R5cGUgIT0gU0lPKSB7CisJCWRiZygic3lzZnMgYXR0cmlidXRlcyBmb3IgJXMiLCBmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZ1ZGV2LT5kZXYsICZkZXZfYXR0cl9ldmVudF9jaGFyKTsKKwkJaWYgKHByaXYtPmNoaXBfdHlwZSA9PSBGVDIzMkJNIHx8IHByaXYtPmNoaXBfdHlwZSA9PSBGVDIyMzJDKSB7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnVkZXYtPmRldiwgJmRldl9hdHRyX2xhdGVuY3lfdGltZXIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfc3lzZnNfYXR0cnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsJCisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJdWRldiA9IHNlcmlhbC0+ZGV2OworCQorCS8qIFhYWCBzZWUgY3JlYXRlX3N5c2ZzX2F0dHJzICovCisJaWYgKHByaXYtPmNoaXBfdHlwZSAhPSBTSU8pIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZ1ZGV2LT5kZXYsICZkZXZfYXR0cl9ldmVudF9jaGFyKTsKKwkJaWYgKHByaXYtPmNoaXBfdHlwZSA9PSBGVDIzMkJNIHx8IHByaXYtPmNoaXBfdHlwZSA9PSBGVDIyMzJDKSB7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnVkZXYtPmRldiwgJmRldl9hdHRyX2xhdGVuY3lfdGltZXIpOworCQl9CisJfQorCQorfQorCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVERJIGRyaXZlciBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qIENvbW1vbiBzdGFydHVwIHN1YnJvdXRpbmUgKi8KKy8qIENhbGxlZCBmcm9tIGZ0ZGlfU0lPX3N0YXJ0dXAsIGV0Yy4gKi8KK3N0YXRpYyBpbnQgZnRkaV9jb21tb25fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KXsKKwkJZXJyKCIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18sIHNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfbG9jayk7CisgICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkvKiBUaGlzIHdpbGwgcHVzaCB0aGUgY2hhcmFjdGVycyB0aHJvdWdoIGltbWVkaWF0ZWx5IHJhdGhlcgorCSAgIHRoYW4gcXVldWUgYSB0YXNrIHRvIGRlbGl2ZXIgdGhlbSAqLworCXByaXYtPmZsYWdzID0gQVNZTkNfTE9XX0xBVEVOQ1k7CisKKwkvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiByZWFkIGJ1ZmZlcnMgKi8KKwlpZiAocG9ydC0+YnVsa19pbl9idWZmZXIpIHsKKwkJa2ZyZWUgKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKKwl9CisJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jIChCVUZTWiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0LT5idWxrX2luX2J1ZmZlcikgeworCQlrZnJlZSAocHJpdik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAocG9ydC0+cmVhZF91cmIpIHsKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfaW5fYnVmZmVyOworCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IEJVRlNaOworCX0KKworCS8qIEZyZWUgcG9ydCdzIGV4aXN0aW5nIHdyaXRlIHVyYiBhbmQgdHJhbnNmZXIgYnVmZmVyLiAqLworCWlmIChwb3J0LT53cml0ZV91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiIChwb3J0LT53cml0ZV91cmIpOworCQlwb3J0LT53cml0ZV91cmIgPSBOVUxMOworCX0KKwlpZiAocG9ydC0+YnVsa19vdXRfYnVmZmVyKSB7CisJCWtmcmVlIChwb3J0LT5idWxrX291dF9idWZmZXIpOworCQlwb3J0LT5idWxrX291dF9idWZmZXIgPSBOVUxMOworCX0KKworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCQorCXJldHVybiAoMCk7Cit9CisKKworLyogU3RhcnR1cCBmb3IgdGhlIFNJTyBjaGlwICovCisvKiBDYWxsZWQgZnJvbSB1c2JzZXJpYWw6c2VyaWFsX3Byb2JlICovCitzdGF0aWMgaW50IGZ0ZGlfU0lPX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgZXJyOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKworCWVyciA9IGZ0ZGlfY29tbW9uX3N0YXJ0dXAoc2VyaWFsKTsKKwlpZiAoZXJyKXsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwX3R5cGUgPSBTSU87CisJcHJpdi0+YmF1ZF9iYXNlID0gMTIwMDAwMDAgLyAxNjsKKwlwcml2LT53cml0ZV9vZmZzZXQgPSAxOworCQorCXJldHVybiAoMCk7Cit9CisKKy8qIFN0YXJ0dXAgZm9yIHRoZSA4VTIzMkFNIGNoaXAgKi8KKy8qIENhbGxlZCBmcm9tIHVzYnNlcmlhbDpzZXJpYWxfcHJvYmUgKi8KK3N0YXRpYyBpbnQgZnRkaV84VTIzMkFNX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7IC8qIGZ0ZGlfOFUyMzJBTV9zdGFydHVwICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgZXJyOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwllcnIgPSBmdGRpX2NvbW1vbl9zdGFydHVwKHNlcmlhbCk7CisJaWYgKGVycil7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+Y2hpcF90eXBlID0gRlQ4VTIzMkFNOworCXByaXYtPmJhdWRfYmFzZSA9IDQ4MDAwMDAwIC8gMjsgLyogV291bGQgYmUgLyAxNiwgYnV0IEZUREkgc3VwcG9ydHMgMC4xMjUsIDAuMjUgYW5kIDAuNSBkaXZpc29yIGZyYWN0aW9ucyEgKi8KKwkKKwljcmVhdGVfc3lzZnNfYXR0cnMoc2VyaWFsKTsKKwkKKwlyZXR1cm4gKDApOworfSAvKiBmdGRpXzhVMjMyQU1fc3RhcnR1cCAqLworCisvKiBTdGFydHVwIGZvciB0aGUgRlQyMzJCTSBjaGlwICovCisvKiBDYWxsZWQgZnJvbSB1c2JzZXJpYWw6c2VyaWFsX3Byb2JlICovCitzdGF0aWMgaW50IGZ0ZGlfRlQyMzJCTV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreyAvKiBmdGRpX0ZUMjMyQk1fc3RhcnR1cCAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJaW50IGVycjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJZXJyID0gZnRkaV9jb21tb25fc3RhcnR1cChzZXJpYWwpOworCWlmIChlcnIpeworCQlyZXR1cm4gKGVycik7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmNoaXBfdHlwZSA9IEZUMjMyQk07CisJcHJpdi0+YmF1ZF9iYXNlID0gNDgwMDAwMDAgLyAyOyAvKiBXb3VsZCBiZSAvIDE2LCBidXQgRlQyMzJCTSBzdXBwb3J0cyBtdWx0aXBsZSBvZiAwLjEyNSBkaXZpc29yIGZyYWN0aW9ucyEgKi8KKwkKKwljcmVhdGVfc3lzZnNfYXR0cnMoc2VyaWFsKTsKKworCXJldHVybiAoMCk7Cit9IC8qIGZ0ZGlfRlQyMzJCTV9zdGFydHVwICovCisKKy8qIFN0YXJ0dXAgZm9yIHRoZSBGVDIyMzJDIGNoaXAgKi8KKy8qIENhbGxlZCBmcm9tIHVzYnNlcmlhbDpzZXJpYWxfcHJvYmUgKi8KK3N0YXRpYyBpbnQgZnRkaV9GVDIyMzJDX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7IC8qIGZ0ZGlfRlQyMjMyQ19zdGFydHVwICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgZXJyOworCWludCBpbnRlcjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJZXJyID0gZnRkaV9jb21tb25fc3RhcnR1cChzZXJpYWwpOworCWlmIChlcnIpeworCQlyZXR1cm4gKGVycik7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmNoaXBfdHlwZSA9IEZUMjIzMkM7CisJaW50ZXIgPSBzZXJpYWwtPmludGVyZmFjZS0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJaWYgKGludGVyKSB7CisJCXByaXYtPmludGVyZmFjZSA9IElOVEVSRkFDRV9COworCX0KKwllbHNlICB7CisJCXByaXYtPmludGVyZmFjZSA9IElOVEVSRkFDRV9BOworCX0KKwlwcml2LT5iYXVkX2Jhc2UgPSA0ODAwMDAwMCAvIDI7IC8qIFdvdWxkIGJlIC8gMTYsIGJ1dCBGVDIyMzJDIHN1cHBvcnRzIG11bHRpcGxlIG9mIDAuMTI1IGRpdmlzb3IgZnJhY3Rpb25zISAqLworCQorCWNyZWF0ZV9zeXNmc19hdHRycyhzZXJpYWwpOworCisJcmV0dXJuICgwKTsKK30gLyogZnRkaV9GVDIyMzJDX3N0YXJ0dXAgKi8KKworLyogU3RhcnR1cCBmb3IgdGhlIFVTQi1VSVJUIGRldmljZSwgd2hpY2ggcmVxdWlyZXMgaGFyZHdpcmVkIGJhdWRyYXRlICgzODQwMCBnZXRzIG1hcHBlZCB0byAzMTI1MDApICovCisvKiBDYWxsZWQgZnJvbSB1c2JzZXJpYWw6c2VyaWFsX3Byb2JlICovCitzdGF0aWMgaW50IGZ0ZGlfVVNCX1VJUlRfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sgLyogZnRkaV9VU0JfVUlSVF9zdGFydHVwICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgZXJyOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKwllcnIgPSBmdGRpXzhVMjMyQU1fc3RhcnR1cChzZXJpYWwpOworCWlmIChlcnIpeworCQlyZXR1cm4gKGVycik7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmZsYWdzIHw9IEFTWU5DX1NQRF9DVVNUOworCXByaXYtPmN1c3RvbV9kaXZpc29yID0gNzc7CisJcHJpdi0+Zm9yY2VfYmF1ZCA9IEIzODQwMDsKKwkKKwlyZXR1cm4gKDApOworfSAvKiBmdGRpX1VTQl9VSVJUX3N0YXJ0dXAgKi8KKworLyogU3RhcnR1cCBmb3IgdGhlIEhFLVRJUkExIGRldmljZSwgd2hpY2ggcmVxdWlyZXMgaGFyZHdpcmVkCisgKiBiYXVkcmF0ZSAoMzg0MDAgZ2V0cyBtYXBwZWQgdG8gMTAwMDAwKSAqLworc3RhdGljIGludCBmdGRpX0hFX1RJUkExX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7IC8qIGZ0ZGlfSEVfVElSQTFfc3RhcnR1cCAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJaW50IGVycjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJZXJyID0gZnRkaV9GVDIzMkJNX3N0YXJ0dXAoc2VyaWFsKTsKKwlpZiAoZXJyKXsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5mbGFncyB8PSBBU1lOQ19TUERfQ1VTVDsKKwlwcml2LT5jdXN0b21fZGl2aXNvciA9IDI0MDsKKwlwcml2LT5mb3JjZV9iYXVkID0gQjM4NDAwOworCXByaXYtPmZvcmNlX3J0c2N0cyA9IDE7CisJCisJcmV0dXJuICgwKTsKK30gLyogZnRkaV9IRV9USVJBMV9zdGFydHVwICovCisKKworLyogZnRkaV9zaHV0ZG93biBpcyBjYWxsZWQgZnJvbSB1c2JzZXJpYWw6dXNiX3NlcmlhbF9kaXNjb25uZWN0IAorICogICBpdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNiIGRldmljZSBpcyBkaXNjb25uZWN0ZWQKKyAqCisgKiAgIHVzYnNlcmlhbDp1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QKKyAqICAgICAgY2FsbHMgX19zZXJpYWxfY2xvc2UgZm9yIGVhY2ggb3BlbiBvZiB0aGUgcG9ydAorICogICAgICBzaHV0ZG93biBpcyBjYWxsZWQgdGhlbiAoaWUgZnRkaV9zaHV0ZG93bikKKyAqLworCisKK3N0YXRpYyB2b2lkIGZ0ZGlfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7IC8qIGZ0ZGlfc2h1dGRvd24gKi8KKwkKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXJlbW92ZV9zeXNmc19hdHRycyhzZXJpYWwpOworCQorCS8qIGFsbCBvcGVuIHBvcnRzIGFyZSBjbG9zZWQgYXQgdGhpcyBwb2ludCAKKyAgICAgICAgICogICAgKGJ5IHVzYnNlcmlhbC5jOl9fc2VyaWFsX2Nsb3NlLCB3aGljaCBjYWxscyBmdGRpX2Nsb3NlKSAgCisJICovCisKKwlpZiAocHJpdikgeworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7CisJCWtmcmVlKHByaXYpOworCX0KK30gLyogZnRkaV9zaHV0ZG93biAqLworCisKK3N0YXRpYyBpbnQgIGZ0ZGlfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7IC8qIGZ0ZGlfb3BlbiAqLworCXN0cnVjdCB0ZXJtaW9zIHRtcF90ZXJtaW9zOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJaW50IHJlc3VsdCA9IDA7CisJY2hhciBidWZbMV07IC8qIE5lZWRlZCBmb3IgdGhlIHVzYl9jb250cm9sX21zZyBJIHRoaW5rICovCisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCisJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IChwcml2LT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOworCisJLyogTm8gZXJyb3IgY2hlY2tpbmcgZm9yIHRoaXMgKHdpbGwgZ2V0IGVycm9ycyBsYXRlciBhbnl3YXkpICovCisJLyogU2VlIGZ0ZGlfc2lvLmggZm9yIGRlc2NyaXB0aW9uIG9mIHdoYXQgaXMgcmVzZXQgKi8KKwl1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCUZURElfU0lPX1JFU0VUX1JFUVVFU1QsIEZURElfU0lPX1JFU0VUX1JFUVVFU1RfVFlQRSwgCisJCQlGVERJX1NJT19SRVNFVF9TSU8sIAorCQkJcHJpdi0+aW50ZXJmYWNlLCBidWYsIDAsIFdEUl9USU1FT1VUKTsKKworCS8qIFRlcm1pb3MgZGVmYXVsdHMgYXJlIHNldCBieSB1c2Jfc2VyaWFsX2luaXQuIFdlIGRvbid0IGNoYW5nZQorCSAgIHBvcnQtPnR0eS0+dGVybWlvcyAtIHRoaXMgd291bGQgbG9vc2Ugc3BlZWQgc2V0dGluZ3MsIGV0Yy4KKwkgICBUaGlzIGlzIHNhbWUgYmVoYXZpb3VyIGFzIHNlcmlhbC5jL3JzX29wZW4oKSAtIEt1YmEgKi8KKworCS8qIGZ0ZGlfc2V0X3Rlcm1pb3MgIHdpbGwgc2VuZCB1c2IgY29udHJvbCBtZXNzYWdlcyAqLworCWZ0ZGlfc2V0X3Rlcm1pb3MocG9ydCwgJnRtcF90ZXJtaW9zKTsKKworCS8qIEZJWE1FOiBGbG93IGNvbnRyb2wgbWlnaHQgYmUgZW5hYmxlZCwgc28gaXQgc2hvdWxkIGJlIGNoZWNrZWQgLQorCSAgIHdlIGhhdmUgbm8gY29udHJvbCBvZiBkZWZhdWx0cyEgKi8KKwkvKiBUdXJuIG9uIFJUUyBhbmQgRFRSIHNpbmNlIHdlIGFyZSBub3QgZmxvdyBjb250cm9sbGluZyBieSBkZWZhdWx0ICovCisJaWYgKHNldF9kdHIocG9ydCwgSElHSCkgPCAwKSB7CisJCWVycigiJXMgRXJyb3IgZnJvbSBEVFIgSElHSCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCX0KKwlpZiAoc2V0X3J0cyhwb3J0LCBISUdIKSA8IDApeworCQllcnIoIiVzIEVycm9yIGZyb20gUlRTIEhJR0ggdXJiIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwkvKiBOb3QgdGhyb3R0bGVkICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgZGV2LAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgICBmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpCisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKworCXJldHVybiByZXN1bHQ7Cit9IC8qIGZ0ZGlfb3BlbiAqLworCisKKworLyogCisgKiB1c2JzZXJpYWw6X19zZXJpYWxfY2xvc2UgIG9ubHkgY2FsbHMgZnRkaV9jbG9zZSBpZiB0aGUgcG9pbnQgaXMgb3BlbgorICoKKyAqICAgVGhpcyBvbmx5IGdldHMgY2FsbGVkIHdoZW4gaXQgaXMgdGhlIGxhc3QgY2xvc2UKKyAqICAgCisgKiAgIAorICovCisKK3N0YXRpYyB2b2lkIGZ0ZGlfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreyAvKiBmdGRpX2Nsb3NlICovCisJdW5zaWduZWQgaW50IGNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwljaGFyIGJ1ZlsxXTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGNfY2ZsYWcgJiBIVVBDTCl7CisJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCisJCWlmICh1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCSAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsCisJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsIGJ1ZiwgMCwKKwkJCQkgICAgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJZXJyKCJlcnJvciBmcm9tIGZsb3djb250cm9sIHVyYiIpOworCQl9CSAgICAKKworCQkvKiBkcm9wIERUUiAqLworCQlpZiAoc2V0X2R0cihwb3J0LCBMT1cpIDwgMCl7CisJCQllcnIoIkVycm9yIGZyb20gRFRSIExPVyB1cmIiKTsKKwkJfQorCQkvKiBkcm9wIFJUUyAqLworCQlpZiAoc2V0X3J0cyhwb3J0LCBMT1cpIDwgMCkgeworCQkJZXJyKCJFcnJvciBmcm9tIFJUUyBMT1cgdXJiIik7CisJCX0KKwl9IC8qIE5vdGUgY2hhbmdlIG5vIGxpbmUgaWYgaHVwY2wgaXMgb2ZmICovCisJCisJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZCAqLworCWlmIChwb3J0LT5yZWFkX3VyYikKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKK30gLyogZnRkaV9jbG9zZSAqLworCisKKyAgCisvKiBUaGUgU0lPIHJlcXVpcmVzIHRoZSBmaXJzdCBieXRlIHRvIGhhdmU6CisgKiAgQjAgMQorICogIEIxIDAKKyAqICBCMi4uNyBsZW5ndGggb2YgbWVzc2FnZSBleGNsdWRpbmcgYnl0ZSAwCisgKgorICogVGhlIG5ldyBkZXZpY2VzIGRvIG5vdCByZXF1aXJlIHRoaXMgYnl0ZQorICovCitzdGF0aWMgaW50IGZ0ZGlfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sgLyogZnRkaV93cml0ZSAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVyYiAqdXJiOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgZGF0YV9vZmZzZXQgOyAgICAgICAvKiB3aWxsIGJlIDEgZm9yIHRoZSBTSU8gYW5kIDAgb3RoZXJ3aXNlICovCisJaW50IHN0YXR1czsKKwlpbnQgdHJhbnNmZXJfc2l6ZTsKKworCWRiZygiJXMgcG9ydCAlZCwgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCJ3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiKTsKKwkJcmV0dXJuIDA7CisJfQorCQorCWRhdGFfb2Zmc2V0ID0gcHJpdi0+d3JpdGVfb2Zmc2V0OworICAgICAgICBkYmcoImRhdGFfb2Zmc2V0IHNldCB0byAlZCIsZGF0YV9vZmZzZXQpOworCisJLyogRGV0ZXJtaW5lIHRvdGFsIHRyYW5zZmVyIHNpemUgKi8KKwl0cmFuc2Zlcl9zaXplID0gY291bnQ7CisJaWYgKGRhdGFfb2Zmc2V0ID4gMCkgeworCQkvKiBPcmlnaW5hbCBzaW8gbmVlZHMgY29udHJvbCBieXRlcyB0b28uLi4gKi8KKwkJdHJhbnNmZXJfc2l6ZSArPSAoZGF0YV9vZmZzZXQgKgorCQkJCSgoY291bnQgKyAoUEtUU1ogLSAxIC0gZGF0YV9vZmZzZXQpKSAvCisJCQkJIChQS1RTWiAtIGRhdGFfb2Zmc2V0KSkpOworCX0KKworCWJ1ZmZlciA9IGttYWxsb2MgKHRyYW5zZmVyX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWVycigiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVyYikgeworCQllcnIoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQ29weSBkYXRhICovCisJaWYgKGRhdGFfb2Zmc2V0ID4gMCkgeworCQkvKiBPcmlnaW5hbCBzaW8gcmVxdWlyZXMgY29udHJvbCBieXRlIGF0IHN0YXJ0IG9mIGVhY2ggcGFja2V0LiAqLworCQlpbnQgdXNlcl9wa3RzeiA9IFBLVFNaIC0gZGF0YV9vZmZzZXQ7CisJCWludCB0b2RvID0gY291bnQ7CisJCXVuc2lnbmVkIGNoYXIgKmZpcnN0X2J5dGUgPSBidWZmZXI7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfcG9zaXRpb24gPSBidWY7CisKKwkJd2hpbGUgKHRvZG8gPiAwKSB7CisJCQlpZiAodXNlcl9wa3RzeiA+IHRvZG8pIHsKKwkJCQl1c2VyX3BrdHN6ID0gdG9kbzsKKwkJCX0KKwkJCS8qIFdyaXRlIHRoZSBjb250cm9sIGJ5dGUgYXQgdGhlIGZyb250IG9mIHRoZSBwYWNrZXQqLworCQkJKmZpcnN0X2J5dGUgPSAxIHwgKCh1c2VyX3BrdHN6KSA8PCAyKTsgCisJCQkvKiBDb3B5IGRhdGEgZm9yIHBhY2tldCAqLworCQkJbWVtY3B5IChmaXJzdF9ieXRlICsgZGF0YV9vZmZzZXQsCisJCQkJY3VycmVudF9wb3NpdGlvbiwgdXNlcl9wa3Rzeik7CisJCQlmaXJzdF9ieXRlICs9IHVzZXJfcGt0c3ogKyBkYXRhX29mZnNldDsKKwkJCWN1cnJlbnRfcG9zaXRpb24gKz0gdXNlcl9wa3RzejsKKwkJCXRvZG8gLT0gdXNlcl9wa3RzejsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE5vIGNvbnRyb2wgYnl0ZSByZXF1aXJlZC4gKi8KKwkJLyogQ29weSBpbiB0aGUgZGF0YSB0byBzZW5kICovCisJCW1lbWNweSAoYnVmZmVyLCBidWYsIGNvdW50KTsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdHJhbnNmZXJfc2l6ZSwgYnVmZmVyKTsKKworCS8qIGZpbGwgdGhlIGJ1ZmZlciBhbmQgc2VuZCBpdCAqLworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIGJ1ZmZlciwgdHJhbnNmZXJfc2l6ZSwKKwkJICAgICAgZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJY291bnQgPSBzdGF0dXM7CisJCWtmcmVlIChidWZmZXIpOworCX0KKworCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKKwkgKiByZWFsbHkgZnJlZSBpdCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQgKi8KKwl1c2JfZnJlZV91cmIgKHVyYik7CisKKwlkYmcoIiVzIHdyaXRlIHJldHVybmluZzogJWQiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKwlyZXR1cm4gY291bnQ7Cit9IC8qIGZ0ZGlfd3JpdGUgKi8KKworCisvKiBUaGlzIGZ1bmN0aW9uIG1heSBnZXQgY2FsbGVkIHdoZW4gdGhlIGRldmljZSBpcyBjbG9zZWQgKi8KKworc3RhdGljIHZvaWQgZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLworCWtmcmVlICh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCJub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfSAvKiBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2sgKi8KKworCitzdGF0aWMgaW50IGZ0ZGlfd3JpdGVfcm9vbSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKgorCSAqIFdlIHJlYWxseSBjYW4gdGFrZSBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKKwkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKKwkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlCisJICovCisJcmV0dXJuIDIwNDg7Cit9IC8qIGZ0ZGlfd3JpdGVfcm9vbSAqLworCisKK3N0YXRpYyBpbnQgZnRkaV9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7IC8qIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyICovCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiAKKwkgKiBXZSBjYW4ndCByZWFsbHkgYWNjb3VudCBmb3IgaG93IG11Y2ggZGF0YSB3ZQorCSAqIGhhdmUgc2VudCBvdXQsIGJ1dCBoYXNuJ3QgbWFkZSBpdCB0aHJvdWdoIHRvIHRoZQorCSAqIGRldmljZSwgc28ganVzdCB0ZWxsIHRoZSB0dHkgbGF5ZXIgdGhhdCBldmVyeXRoaW5nCisJICogaXMgZmx1c2hlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30gLyogZnRkaV9jaGFyc19pbl9idWZmZXIgKi8KKworCisKK3N0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreyAvKiBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAqLworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisKKwlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA+IDApIHsKKwkJZXJyKCIlcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICVkIGFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWQiLF9fRlVOQ1RJT05fXywKKwkJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzICk7CisJCWVycigiJXMgdHJhbnNmZXJfZmxhZ3MgJXggIiwgX19GVU5DVElPTl9fLHVyYi0+dHJhbnNmZXJfZmxhZ3MgKTsKKwl9CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT5vcGVuX2NvdW50IDw9IDApCisJCXJldHVybjsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKCFwcml2KSB7CisJCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYiAhPSBwb3J0LT5yZWFkX3VyYikgeworCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQkvKiBUaGlzIHdpbGwgaGFwcGVuIGF0IGNsb3NlIGV2ZXJ5IHRpbWUgc28gaXQgaXMgYSBkYmcgbm90IGFuIGVyciAqLworCQlkYmcoIih0aGlzIGlzIG9rIG9uIGNsb3NlKSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogSWYgdGhyb3R0bGVkLCBkZWxheSByZWNlaXZlIHByb2Nlc3NpbmcgdW50aWwgdW50aHJvdHRsZWQuICovCisJc3Bpbl9sb2NrKCZwcml2LT5yeF9sb2NrKTsKKwlpZiAocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpIHsKKwkJZGJnKCJEZWZlcnJpbmcgcmVhZCB1cmIgcHJvY2Vzc2luZyB1bnRpbCB1bnRocm90dGxlZCIpOworCQlwcml2LT5yeF9mbGFncyB8PSBBQ1RVQUxMWV9USFJPVFRMRUQ7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7CisKKwlmdGRpX3Byb2Nlc3NfcmVhZChwb3J0KTsKKworfSAvKiBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAqLworCisKK3N0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreyAvKiBmdGRpX3Byb2Nlc3NfcmVhZCAqLworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJY2hhciBlcnJvcl9mbGFnOworICAgICAgIAl1bnNpZ25lZCBjaGFyICpkYXRhOworCisJaW50IGk7CisJaW50IHJlc3VsdDsKKwlpbnQgbmVlZF9mbGlwOworCWludCBwYWNrZXRfb2Zmc2V0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA8PSAwKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICghcHJpdikgeworCQlkYmcoIiVzIC0gYmFkIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgLSBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXVyYiA9IHBvcnQtPnJlYWRfdXJiOworCWlmICghdXJiKSB7CisJCWRiZygiJXMgLSBiYWQgcmVhZF91cmIgcG9pbnRlciAtIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisgICAgICAgIC8qIFRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgZXZlcnkgcmVhZCBwYWNrZXQgYXJlIHN0YXR1cyAqLworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAyKSB7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCX0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGJnKCJTdGF0dXMgb25seTogJTAzb28gJTAzb28iLGRhdGFbMF0sZGF0YVsxXSk7CisgICAgICAgIH0KKworCisJLyogVE8gRE8gLS0gY2hlY2sgZm9yIGh1bmcgdXAgbGluZSBhbmQgaGFuZGxlIGFwcHJvcHJpYXRlbHk6ICovCisJLyogICBzZW5kIGhhbmd1cCAgKi8KKwkvKiBTZWUgYWNtLmMgLSB5b3UgZG8gYSB0dHlfaGFuZ3VwICAtIGVnIHR0eV9oYW5ndXAodHR5KSAqLworCS8qIGlmIENEIGlzIGRyb3BwZWQgYW5kIHRoZSBsaW5lIGlzIG5vdCBDTE9DQUwgdGhlbiB3ZSBzaG91bGQgaGFuZ3VwICovCisKKwluZWVkX2ZsaXAgPSAwOworCWZvciAocGFja2V0X29mZnNldD0wOyBwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBwYWNrZXRfb2Zmc2V0ICs9IFBLVFNaKSB7CisJCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50ICovCisJCWlmIChwcml2ICE9IE5VTEwpIHsKKwkJCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCswXSAmIEZURElfU1RBVFVTX0IwX01BU0s7CisJCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgeworCQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9IG5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7CisJCQl9CisJCX0KKworCQkvKiBIYW5kbGUgZXJyb3JzIGFuZCBicmVhayAqLworCQllcnJvcl9mbGFnID0gVFRZX05PUk1BTDsKKwkJLyogQWx0aG91Z2ggdGhlIGRldmljZSB1c2VzIGEgYml0bWFzayBhbmQgaGVuY2UgY2FuIGhhdmUgbXVsdGlwbGUgKi8KKwkJLyogZXJyb3JzIG9uIGEgcGFja2V0IC0gdGhlIG9yZGVyIGhlcmUgc2V0cyB0aGUgcHJpb3JpdHkgdGhlICovCisJCS8qIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSB0dHkgbGF5ZXIgICovCisKKwkJaWYgKCBkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX09FICkgeworCQkJZXJyb3JfZmxhZyA9IFRUWV9PVkVSUlVOOworCQkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOworCQl9CisJCWlmICggZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19CSSApIHsKKwkJCWVycm9yX2ZsYWcgPSBUVFlfQlJFQUs7CisJCQlkYmcoIkJSRUFLIHJlY2VpdmVkIik7CisJCX0KKwkJaWYgKCBkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX1BFICkgeworCQkJZXJyb3JfZmxhZyA9IFRUWV9QQVJJVFk7CisJCQlkYmcoIlBBUklUWSBlcnJvciIpOworCQl9CisJCWlmICggZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19GRSApIHsKKwkJCWVycm9yX2ZsYWcgPSBUVFlfRlJBTUU7CisJCQlkYmcoIkZSQU1JTkcgZXJyb3IiKTsKKwkJfQorCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gcGFja2V0X29mZnNldCArIDIpIHsKKwkJCWZvciAoaSA9IDI7IChpIDwgUEtUU1opICYmICgoaStwYWNrZXRfb2Zmc2V0KSA8IHVyYi0+YWN0dWFsX2xlbmd0aCk7ICsraSkgeworCQkJCS8qIGhhdmUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93IHRoZSBidWZmZXIKKwkJCQkgIHdpdGggdHR5X2luc2VydF9mbGlwX2NoYXIncyAqLworCQkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQkJfQorCQkJCS8qIE5vdGUgdGhhdCB0aGUgZXJyb3IgZmxhZyBpcyBkdXBsaWNhdGVkIGZvciAKKwkJCQkgICBldmVyeSBjaGFyYWN0ZXIgcmVjZWl2ZWQgc2luY2Ugd2UgZG9uJ3Qga25vdworCQkJCSAgIHdoaWNoIGNoYXJhY3RlciBpdCBhcHBsaWVkIHRvICovCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW3BhY2tldF9vZmZzZXQraV0sIGVycm9yX2ZsYWcpOworCQkJfQorCQkJbmVlZF9mbGlwID0gMTsKKwkJfQorCisjaWZkZWYgTk9UX0NPUlJFQ1RfQlVUX0tFRVBJTkdfSVRfRk9SX05PVworCQkvKiBpZiBhIHBhcml0eSBlcnJvciBpcyBkZXRlY3RlZCB5b3UgZ2V0IHN0YXR1cyBwYWNrZXRzIGZvcmV2ZXIKKwkJICAgdW50aWwgYSBjaGFyYWN0ZXIgaXMgc2VudCB3aXRob3V0IGEgcGFyaXR5IGVycm9yLgorCQkgICBUaGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZlcyBhIG5ldmVyCisJCSAgIGVuZGluZyBzdHJlYW0gb2YgYmFkIGRhdGEgLSBldmVuIHRob3VnaCBuZXcgZGF0YSBoYXNuJ3QgYmVlbiBzZW50LgorCQkgICBUaGVyZWZvcmUgSSAoYmlsbCkgaGF2ZSB0YWtlbiB0aGlzIG91dC4KKwkJICAgSG93ZXZlciAtIHRoaXMgbWlnaHQgbWFrZSBzZW5zZSBmb3IgZnJhbWluZyBlcnJvcnMgYW5kIHNvIG9uIAorCQkgICBzbyBJIGFtIGxlYXZpbmcgdGhlIGNvZGUgaW4gZm9yIG5vdy4KKwkJKi8KKwkJZWxzZSB7CisJCQlpZiAoZXJyb3JfZmxhZyAhPSBUVFlfTk9STUFMKXsKKwkJCQlkYmcoImVycm9yX2ZsYWcgaXMgbm90IG5vcm1hbCIpOworCQkJCS8qIEluIHRoaXMgY2FzZSBpdCBpcyBqdXN0IHN0YXR1cyAtIGlmIHRoYXQgaXMgYW4gZXJyb3Igc2VuZCBhIGJhZCBjaGFyYWN0ZXIgKi8KKwkJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJCX0KKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDB4ZmYsIGVycm9yX2ZsYWcpOworCQkJCW5lZWRfZmxpcCA9IDE7CisJCQl9CisJCX0KKyNlbmRpZgorCX0gLyogImZvcihwYWNrZXRfb2Zmc2V0PTAuLi4iICovCisKKwkvKiBMb3cgbGF0ZW5jeSAqLworCWlmIChuZWVkX2ZsaXApIHsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwkvKiBpZiB0aGUgcG9ydCBpcyBjbG9zZWQgc3RvcCB0cnlpbmcgdG8gcmVhZCAqLworCWlmIChwb3J0LT5vcGVuX2NvdW50ID4gMCl7CisJCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICAgICBmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKworCXJldHVybjsKK30gLyogZnRkaV9wcm9jZXNzX3JlYWQgKi8KKworCitzdGF0aWMgdm9pZCBmdGRpX2JyZWFrX2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fdTE2IHVyYl92YWx1ZSA9IDA7IAorCWNoYXIgYnVmWzFdOworCQorCS8qIGJyZWFrX3N0YXRlID0gLTEgdG8gdHVybiBvbiBicmVhaywgYW5kIDAgdG8gdHVybiBvZmYgYnJlYWsgKi8KKwkvKiBzZWUgZHJpdmVycy9jaGFyL3R0eV9pby5jIHRvIHNlZSBpdCB1c2VkICovCisJLyogbGFzdF9zZXRfZGF0YV91cmJfdmFsdWUgTkVWRVIgaGFzIHRoZSBicmVhayBiaXQgc2V0IGluIGl0ICovCisKKwlpZiAoYnJlYWtfc3RhdGUpIHsKKwkJdXJiX3ZhbHVlID0gcHJpdi0+bGFzdF9zZXRfZGF0YV91cmJfdmFsdWUgfCBGVERJX1NJT19TRVRfQlJFQUs7CisJfSBlbHNlIHsKKwkJdXJiX3ZhbHVlID0gcHJpdi0+bGFzdF9zZXRfZGF0YV91cmJfdmFsdWU7IAorCX0KKworCQorCWlmICh1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVCwgCisJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAorCQkJICAgIHVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKKwkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJZXJyKCIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgKHN0YXRlIHdhcyAlZCkiLCBfX0ZVTkNUSU9OX18sYnJlYWtfc3RhdGUpOworCX0JICAgCisKKwlkYmcoIiVzIGJyZWFrIHN0YXRlIGlzICVkIC0gdXJiIGlzICVkIiwgX19GVU5DVElPTl9fLGJyZWFrX3N0YXRlLCB1cmJfdmFsdWUpOworCQorfQorCisKKy8qIG9sZF90ZXJtaW9zIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXJtaW9zIHNldHRpbmdzIGFuZCB0dHktPnRlcm1pb3MgY29udGFpbnMKKyAqIHRoZSBuZXcgc2V0dGluZyB0byBiZSB1c2VkCisgKiBXQVJOSU5HOiBzZXRfdGVybWlvcyBjYWxscyB0aGlzIHdpdGggb2xkX3Rlcm1pb3MgaW4ga2VybmVsIHNwYWNlCisgKi8KKworc3RhdGljIHZvaWQgZnRkaV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreyAvKiBmdGRpX3Rlcm1pb3MgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdW5zaWduZWQgaW50IGNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJX191MTYgdXJiX3ZhbHVlOyAvKiB3aWxsIGhvbGQgdGhlIG5ldyBmbGFncyAqLworCWNoYXIgYnVmWzFdOyAvKiBQZXJoYXBzIEkgc2hvdWxkIGR5bmFtaWNhbGx5IGFsbG9jIHRoaXM/ICovCisJCisJLy8gQWRkZWQgZm9yIHhvbi94b2ZmIHN1cHBvcnQKKwl1bnNpZ25lZCBpbnQgaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJdW5zaWduZWQgY2hhciB2c3RvcDsKKwl1bnNpZ25lZCBjaGFyIHZzdGFydDsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIEZvcmNlIGJhdWQgcmF0ZSBpZiB0aGlzIGRldmljZSByZXF1aXJlcyBpdCwgdW5sZXNzIGl0IGlzIHNldCB0byBCMC4gKi8KKwlpZiAocHJpdi0+Zm9yY2VfYmF1ZCAmJiAoKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSAhPSBCMCkpIHsKKwkJZGJnKCIlczogZm9yY2luZyBiYXVkIHJhdGUgZm9yIHRoaXMgZGV2aWNlIiwgX19GVU5DVElPTl9fKTsKKwkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DQkFVRDsKKwkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnIHw9IHByaXYtPmZvcmNlX2JhdWQ7CisJfQorCisJLyogRm9yY2UgUlRTLUNUUyBpZiB0aGlzIGRldmljZSByZXF1aXJlcyBpdC4gKi8KKwlpZiAocHJpdi0+Zm9yY2VfcnRzY3RzKSB7CisJCWRiZygiJXM6IGZvcmNpbmcgcnRzY3RzIGZvciB0aGlzIGRldmljZSIsIF9fRlVOQ1RJT05fXyk7CisJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyB8PSBDUlRTQ1RTOworCX0KKworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJLyogRklYTUUgLUZvciB0aGlzIGN1dCBJIGRvbid0IGNhcmUgaWYgdGhlIGxpbmUgaXMgcmVhbGx5IGNoYW5naW5nIG9yIAorCSAgIG5vdCAgLSBzbyBqdXN0IGRvIHRoZSBjaGFuZ2UgcmVnYXJkbGVzcyAgLSBzaG91bGQgYmUgYWJsZSB0byAKKwkgICBjb21wYXJlIG9sZF90ZXJtaW9zIGFuZCB0dHktPnRlcm1pb3MgKi8KKwkvKiBOT1RFIFRoZXNlIHJvdXRpbmVzIGNhbiBnZXQgaW50ZXJydXB0ZWQgYnkgCisJICAgZnRkaV9zaW9fcmVhZF9idWxrX2NhbGxiYWNrICAtIG5lZWQgdG8gZXhhbWluZSB3aGF0IHRoaXMgCisgICAgICAgICAgIG1lYW5zIC0gZG9uJ3Qgc2VlIGFueSBwcm9ibGVtcyB5ZXQgKi8KKwkKKwkvKiBTZXQgbnVtYmVyIG9mIGRhdGEgYml0cywgcGFyaXR5LCBzdG9wIGJpdHMgKi8KKwkKKwl1cmJfdmFsdWUgPSAwOworCXVyYl92YWx1ZSB8PSAoY2ZsYWcgJiBDU1RPUEIgPyBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMiA6CisJCSAgICAgIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18xKTsKKwl1cmJfdmFsdWUgfD0gKGNmbGFnICYgUEFSRU5CID8gCisJCSAgICAgIChjZmxhZyAmIFBBUk9ERCA/IEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9PREQgOiAKKwkJICAgICAgIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9FVkVOKSA6CisJCSAgICAgIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9OT05FKTsKKwlpZiAoY2ZsYWcgJiBDU0laRSkgeworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6IHVyYl92YWx1ZSB8PSA1OyBkYmcoIlNldHRpbmcgQ1M1Iik7IGJyZWFrOworCQljYXNlIENTNjogdXJiX3ZhbHVlIHw9IDY7IGRiZygiU2V0dGluZyBDUzYiKTsgYnJlYWs7CisJCWNhc2UgQ1M3OiB1cmJfdmFsdWUgfD0gNzsgZGJnKCJTZXR0aW5nIENTNyIpOyBicmVhazsKKwkJY2FzZSBDUzg6IHVyYl92YWx1ZSB8PSA4OyBkYmcoIlNldHRpbmcgQ1M4Iik7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M1LUNTOCIpOworCQl9CisJfQorCisJLyogVGhpcyBpcyBuZWVkZWQgYnkgdGhlIGJyZWFrIGNvbW1hbmQgc2luY2UgaXQgdXNlcyB0aGUgc2FtZSBjb21tYW5kIC0gYnV0IGlzCisJICogIG9yJ2VkIHdpdGggdGhpcyB2YWx1ZSAgKi8KKwlwcml2LT5sYXN0X3NldF9kYXRhX3VyYl92YWx1ZSA9IHVyYl92YWx1ZTsKKwkKKwlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVCwgCisJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAorCQkJICAgIHVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKKwkJCSAgICBidWYsIDAsIDEwMCkgPCAwKSB7CisJCWVycigiJXMgRkFJTEVEIHRvIHNldCBkYXRhYml0cy9zdG9wYml0cy9wYXJpdHkiLCBfX0ZVTkNUSU9OX18pOworCX0JICAgCisKKwkvKiBOb3cgZG8gdGhlIGJhdWRyYXRlICovCisJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwkJLyogRGlzYWJsZSBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsIAorCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQllcnIoIiVzIGVycm9yIGZyb20gZGlzYWJsZSBmbG93Y29udHJvbCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl9CSAgICAKKwkJLyogRHJvcCBSVFMgYW5kIERUUiAqLworCQlpZiAoc2V0X2R0cihwb3J0LCBMT1cpIDwgMCl7CisJCQllcnIoIiVzIEVycm9yIGZyb20gRFRSIExPVyB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJCWlmIChzZXRfcnRzKHBvcnQsIExPVykgPCAwKXsKKwkJCWVycigiJXMgRXJyb3IgZnJvbSBSVFMgTE9XIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJCX0JCisJCQorCX0gZWxzZSB7CisJCS8qIHNldCB0aGUgYmF1ZHJhdGUgZGV0ZXJtaW5lZCBiZWZvcmUgKi8KKwkJaWYgKGNoYW5nZV9zcGVlZChwb3J0KSkgeworCQkJZXJyKCIlcyB1cmIgZmFpbGVkIHRvIHNldCBiYXVyZHJhdGUiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJCS8qIEVuc3VyZSAgUlRTIGFuZCBEVFIgYXJlIHJhaXNlZCAqLworCQllbHNlIGlmIChzZXRfZHRyKHBvcnQsIEhJR0gpIDwgMCl7CisJCQllcnIoIiVzIEVycm9yIGZyb20gRFRSIEhJR0ggdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCQllbHNlIGlmIChzZXRfcnRzKHBvcnQsIEhJR0gpIDwgMCl7CisJCQllcnIoIiVzIEVycm9yIGZyb20gUlRTIEhJR0ggdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJfQkKKwl9CisKKwkvKiBTZXQgZmxvdyBjb250cm9sICovCisJLyogTm90ZSBkZXZpY2UgYWxzbyBzdXBwb3J0cyBEVFIvQ0QgKHVnaCkgYW5kIFhvbi9Yb2ZmIGluIGhhcmR3YXJlICovCisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQlkYmcoIiVzIFNldHRpbmcgdG8gQ1JUU0NUUyBmbG93IGNvbnRyb2wiLCBfX0ZVTkNUSU9OX18pOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgCisJCQkJICAgIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsIAorCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCQkgICAgMCAsIChGVERJX1NJT19SVFNfQ1RTX0hTIHwgcHJpdi0+aW50ZXJmYWNlKSwKKwkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQllcnIoInVyYiBmYWlsZWQgdG8gc2V0IHRvIHJ0cy9jdHMgZmxvdyBjb250cm9sIik7CisJCX0JCQorCQkKKwl9IGVsc2UgeyAKKwkJLyoKKwkJICogWG9uL1hvZmYgY29kZQorCQkgKgorCQkgKiBDaGVjayB0aGUgSVhPRkYgc3RhdHVzIGluIHRoZSBpZmxhZyBjb21wb25lbnQgb2YgdGhlIHRlcm1pb3Mgc3RydWN0dXJlCisJCSAqIGlmIElYT0ZGIGlzIG5vdCBzZXQsIHRoZSBwcmUteG9uL3hvZmYgY29kZSBpcyBleGVjdXRlZC4KKwkJKi8KKwkJaWYgKGlmbGFnICYgSVhPRkYpIHsKKwkJCWRiZygiJXMgIHJlcXVlc3QgdG8gZW5hYmxlIHhvbnhvZmYgaWZsYWc9JTA0eCIsX19GVU5DVElPTl9fLGlmbGFnKTsKKwkJCS8vIFRyeSB0byBlbmFibGUgdGhlIFhPTi9YT0ZGIG9uIHRoZSBmdGRpX3NpbworCQkJLy8gU2V0IHRoZSB2c3RhcnQgYW5kIHZzdG9wIC0tIGNvdWxkIGhhdmUgYmVlbiBkb25lIHVwIGFib3ZlIHdoZXJlCisJCQkvLyBhIGxvdCBvZiBvdGhlciBkZXJlZmVyZW5jaW5nIGlzIGRvbmUgYnV0IHRoYXQgd291bGQgYmUgdmVyeQorCQkJLy8gaW5lZmZpY2llbnQgYXMgdnN0YXJ0IGFuZCB2c3RvcCBhcmUgbm90IGFsd2F5cyBuZWVkZWQKKwkJCXZzdGFydD1wb3J0LT50dHktPnRlcm1pb3MtPmNfY2NbVlNUQVJUXTsKKwkJCXZzdG9wPXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jY1tWU1RPUF07CisJCQl1cmJfdmFsdWU9KHZzdG9wIDw8IDgpIHwgKHZzdGFydCk7CisKKwkJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LAorCQkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsCisJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCQkJICAgIHVyYl92YWx1ZSAsIChGVERJX1NJT19YT05fWE9GRl9IUworCQkJCQkJCSB8IHByaXYtPmludGVyZmFjZSksCisJCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCQllcnIoInVyYiBmYWlsZWQgdG8gc2V0IHRvIHhvbi94b2ZmIGZsb3cgY29udHJvbCIpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogZWxzZSBjbGF1c2UgdG8gb25seSBydW4gaWYgY2ZhZyAhIENSVFNDVFMgYW5kIGlmbGFnICEgWE9GRiAqLworCQkJLyogQ0hFQ0tNRSBBc3N1bWluZyBYT04vWE9GRiBoYW5kbGVkIGJ5IHR0eSBzdGFjayAtIG5vdCBieSBkZXZpY2UgKi8KKwkJCWRiZygiJXMgVHVybmluZyBvZmYgaGFyZHdhcmUgZmxvdyBjb250cm9sIiwgX19GVU5DVElPTl9fKTsKKwkJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCAKKwkJCQkJICAgIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCAKKwkJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAorCQkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLCAKKwkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJCWVycigidXJiIGZhaWxlZCB0byBjbGVhciBmbG93IGNvbnRyb2wiKTsKKwkJCX0JCQkJCisJCX0KKwkJCisJfQorCXJldHVybjsKK30gLyogZnRkaV90ZXJtaW9zICovCisKKworc3RhdGljIGludCBmdGRpX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCWludCByZXQ7CisKKwlkYmcoIiVzIFRJT0NNR0VUIiwgX19GVU5DVElPTl9fKTsKKwlzd2l0Y2ggKHByaXYtPmNoaXBfdHlwZSkgeworCWNhc2UgU0lPOgorCQkvKiBSZXF1ZXN0IHRoZSBzdGF0dXMgZnJvbSB0aGUgZGV2aWNlICovCisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNULCAKKwkJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCisJCQkJCSAgIDAsIDAsIAorCQkJCQkgICBidWYsIDEsIFdEUl9USU1FT1VUKSkgPCAwICkgeworCQkJZXJyKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHJldCk7CisJCQlyZXR1cm4ocmV0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIEZUOFUyMzJBTToKKwljYXNlIEZUMjMyQk06CisJY2FzZSBGVDIyMzJDOgorCQkvKiB0aGUgOFUyMzJBTSByZXR1cm5zIGEgdHdvIGJ5dGUgdmFsdWUgKHRoZSBzaW8gaXMgYSAxIGJ5dGUgdmFsdWUpIC0gaW4gdGhlIHNhbWUKKwkJICAgZm9ybWF0IGFzIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIGluIHBvaW50ICovCisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNULCAKKwkJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCisJCQkJCSAgIDAsIHByaXYtPmludGVyZmFjZSwgCisJCQkJCSAgIGJ1ZiwgMiwgV0RSX1RJTUVPVVQpKSA8IDAgKSB7CisJCQllcnIoIiVzIENvdWxkIG5vdCBnZXQgbW9kZW0gc3RhdHVzIG9mIGRldmljZSAtIGVycjogJWQiLCBfX0ZVTkNUSU9OX18sCisJCQkgICAgcmV0KTsKKwkJCXJldHVybihyZXQpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CisJCisJcmV0dXJuICAoYnVmWzBdICYgRlRESV9TSU9fRFNSX01BU0sgPyBUSU9DTV9EU1IgOiAwKSB8CisJCShidWZbMF0gJiBGVERJX1NJT19DVFNfTUFTSyA/IFRJT0NNX0NUUyA6IDApIHwKKwkJKGJ1ZlswXSAgJiBGVERJX1NJT19SSV9NQVNLICA/IFRJT0NNX1JJICA6IDApIHwKKwkJKGJ1ZlswXSAgJiBGVERJX1NJT19STFNEX01BU0sgPyBUSU9DTV9DRCAgOiAwKSB8CisJCXByaXYtPmxhc3RfZHRyX3J0czsJCQkKK30KKworc3RhdGljIGludCBmdGRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCWludCByZXQ7CisJCisJZGJnKCIlcyBUSU9DTVNFVCIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHNldCAmIFRJT0NNX0RUUil7CisJCWlmICgocmV0ID0gc2V0X2R0cihwb3J0LCBISUdIKSkgPCAwKSB7CisJCQllcnIoIlVyYiB0byBzZXQgRFRSIGZhaWxlZCIpOworCQkJcmV0dXJuKHJldCk7CisJCX0KKwl9CisJaWYgKHNldCAmIFRJT0NNX1JUUykgeworCQlpZiAoKHJldCA9IHNldF9ydHMocG9ydCwgSElHSCkpIDwgMCl7CisJCQllcnIoIlVyYiB0byBzZXQgUlRTIGZhaWxlZCIpOworCQkJcmV0dXJuKHJldCk7CisJCX0KKwl9CisJCisJaWYgKGNsZWFyICYgVElPQ01fRFRSKXsKKwkJaWYgKChyZXQgPSBzZXRfZHRyKHBvcnQsIExPVykpIDwgMCl7CisJCQllcnIoIlVyYiB0byB1bnNldCBEVFIgZmFpbGVkIik7CisJCQlyZXR1cm4ocmV0KTsKKwkJfQorCX0JCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7CisJCWlmICgocmV0ID0gc2V0X3J0cyhwb3J0LCBMT1cpKSA8IDApeworCQkJZXJyKCJVcmIgdG8gdW5zZXQgUlRTIGZhaWxlZCIpOworCQkJcmV0dXJuKHJldCk7CisJCX0KKwl9CisJcmV0dXJuKDApOworfQorCisKK3N0YXRpYyBpbnQgZnRkaV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaW50ICByZXQsIG1hc2s7CisJCisJZGJnKCIlcyBjbWQgMHglMDR4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJLyogQmFzZWQgb24gY29kZSBmcm9tIGFjbS5jIGFuZCBvdGhlcnMgKi8KKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBUSU9DTUJJUzogLyogdHVybnMgb24gKFNldHMpIHRoZSBsaW5lcyBhcyBzcGVjaWZpZWQgYnkgdGhlIG1hc2sgKi8KKwkJZGJnKCIlcyBUSU9DTUJJUyIsIF9fRlVOQ1RJT05fXyk7CisgCSAgICAgICAgaWYgKGdldF91c2VyKG1hc2ssICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisgIAkgICAgICAgIGlmIChtYXNrICYgVElPQ01fRFRSKXsKKwkJCWlmICgocmV0ID0gc2V0X2R0cihwb3J0LCBISUdIKSkgPCAwKSB7CisJCQkJZXJyKCJVcmIgdG8gc2V0IERUUiBmYWlsZWQiKTsKKwkJCQlyZXR1cm4ocmV0KTsKKwkJCX0KKwkJfQorCQlpZiAobWFzayAmIFRJT0NNX1JUUykgeworCQkJaWYgKChyZXQgPSBzZXRfcnRzKHBvcnQsIEhJR0gpKSA8IDApeworCQkJCWVycigiVXJiIHRvIHNldCBSVFMgZmFpbGVkIik7CisJCQkJcmV0dXJuKHJldCk7CisJCQl9CisJCX0KKwkJcmV0dXJuKDApOworCQlicmVhazsKKworCWNhc2UgVElPQ01CSUM6IC8qIHR1cm5zIG9mZiAoQ2xlYXJzKSB0aGUgbGluZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBtYXNrICovCisJCWRiZygiJXMgVElPQ01CSUMiLCBfX0ZVTkNUSU9OX18pOworIAkgICAgICAgIGlmIChnZXRfdXNlcihtYXNrLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworICAJICAgICAgICBpZiAobWFzayAmIFRJT0NNX0RUUil7CisJCQlpZiAoKHJldCA9IHNldF9kdHIocG9ydCwgTE9XKSkgPCAwKXsKKwkJCQllcnIoIlVyYiB0byB1bnNldCBEVFIgZmFpbGVkIik7CisJCQkJcmV0dXJuKHJldCk7CisJCQl9CisJCX0JCisJCWlmIChtYXNrICYgVElPQ01fUlRTKSB7CisJCQlpZiAoKHJldCA9IHNldF9ydHMocG9ydCwgTE9XKSkgPCAwKXsKKwkJCQllcnIoIlVyYiB0byB1bnNldCBSVFMgZmFpbGVkIik7CisJCQkJcmV0dXJuKHJldCk7CisJCQl9CisJCX0KKwkJcmV0dXJuKDApOworCQlicmVhazsKKworCQkvKgorCQkgKiBJIGhhZCBvcmlnaW5hbGx5IGltcGxlbWVudGVkIFRDU0VUe0EsU317LEYsV30gYW5kCisJCSAqIFRDR0VUe0EsU30gaGVyZSBzZXBhcmF0ZWx5LCBob3dldmVyIHdoZW4gdGVzdGluZyBJCisJCSAqIGZvdW5kIHRoYXQgdGhlIGhpZ2hlciBsYXllcnMgYWN0dWFsbHkgZG8gdGhlIHRlcm1pb3MKKwkJICogY29udmVyc2lvbnMgdGhlbXNlbHZlcyBhbmQgcGFzcyB0aGUgY2FsbCBvbnRvCisJCSAqIGZ0ZGlfc2lvX3NldF90ZXJtaW9zLiAKKwkJICoKKwkJICovCisKKwljYXNlIFRJT0NHU0VSSUFMOiAvKiBnZXRzIHNlcmlhbCBwb3J0IGRhdGEgKi8KKwkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhwb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisKKwljYXNlIFRJT0NTU0VSSUFMOiAvKiBzZXRzIHNlcmlhbCBwb3J0IGRhdGEgKi8KKwkJcmV0dXJuIHNldF9zZXJpYWxfaW5mbyhwb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisKKwkvKgorCSAqIFdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSB0byBjaGFuZ2UKKwkgKiAtIG1hc2sgcGFzc2VkIGluIGFyZyBmb3IgbGluZXMgb2YgaW50ZXJlc3QKKwkgKiAgICh1c2UgfCdlZCBUSU9DTV9STkcvRFNSL0NEL0NUUyBmb3IgbWFza2luZykKKwkgKiBDYWxsZXIgc2hvdWxkIHVzZSBUSU9DR0lDT1VOVCB0byBzZWUgd2hpY2ggb25lIGl0IHdhcy4KKwkgKgorCSAqIFRoaXMgY29kZSBpcyBib3Jyb3dlZCBmcm9tIGxpbnV4L2RyaXZlcnMvY2hhci9zZXJpYWwuYworCSAqLworCWNhc2UgVElPQ01JV0FJVDoKKwkJd2hpbGUgKHByaXYgIT0gTlVMTCkgeworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQllbHNlIHsKKwkJCQljaGFyIGRpZmYgPSBwcml2LT5kaWZmX3N0YXR1czsKKworCQkJCWlmIChkaWZmID09IDApIHsKKwkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJCX0KKworCQkJCS8qIENvbnN1bWUgYWxsIGV2ZW50cyAqLworCQkJCXByaXYtPmRpZmZfc3RhdHVzID0gMDsKKworCQkJCS8qIFJldHVybiAwIGlmIGNhbGxlciB3YW50ZWQgdG8ga25vdyBhYm91dCB0aGVzZSBiaXRzICovCisJCQkJaWYgKCAoKGFyZyAmIFRJT0NNX1JORykgJiYgKGRpZmYgJiBGVERJX1JTMF9SSSkpIHx8CisJCQkJICAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGRpZmYgJiBGVERJX1JTMF9EU1IpKSB8fAorCQkJCSAgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChkaWZmICYgRlRESV9SUzBfUkxTRCkpIHx8CisJCQkJICAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGRpZmYgJiBGVERJX1JTMF9DVFMpKSApIHsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCS8qCisJCQkJICogT3RoZXJ3aXNlIGNhbGxlciBjYW4ndCBjYXJlIGxlc3MgYWJvdXQgd2hhdCBoYXBwZW5lZCwKKwkJCQkgKiBhbmQgc28gd2UgY29udGludWUgdG8gd2FpdCBmb3IgbW9yZSBldmVudHMuCisJCQkJICovCisJCQl9CisJCX0KKwkJcmV0dXJuKDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwkJCisJfQorCisKKwkvKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvciAtIHR1cm5zIG91dCB0aGUgaGlnaGVyIGxheWVycyB3aWxsIGRvIAorCSAqICBzb21lIGlvY3RscyBpdHNlbGYgKHNlZSBjb21tZW50IGFib3ZlKQorCSAqLworCWRiZygiJXMgYXJnIG5vdCBzdXBwb3J0ZWQgLSBpdCB3YXMgMHglMDR4IC0gY2hlY2sgL3Vzci9pbmNsdWRlL2FzbS9pb2N0bHMuaCIsIF9fRlVOQ1RJT05fXywgY21kKTsKKworCXJldHVybigtRU5PSU9DVExDTUQpOworfSAvKiBmdGRpX2lvY3RsICovCisKKworc3RhdGljIHZvaWQgZnRkaV90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKK30KKworCitzdGF0aWMgdm9pZCBmdGRpX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJYWN0dWFsbHlfdGhyb3R0bGVkID0gcHJpdi0+cnhfZmxhZ3MgJiBBQ1RVQUxMWV9USFJPVFRMRUQ7CisJcHJpdi0+cnhfZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKworCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCisJCWZ0ZGlfcHJvY2Vzc19yZWFkKHBvcnQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBmdGRpX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmZ0ZGlfU0lPX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfU0lPX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmZ0ZGlfOFUyMzJBTV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzhVMjMyQU1fcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnRkaV9GVDIzMkJNX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfRlQyMzJCTV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdGRpX0ZUMjIzMkNfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9GVDIyMzJDX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmZ0ZGlfVVNCX1VJUlRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9VU0JfVUlSVF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdGRpX0hFX1RJUkExX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfSEVfVElSQTFfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZmdGRpX2RyaXZlcik7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX0hFX1RJUkExX2RldmljZSk7CitmYWlsZWRfSEVfVElSQTFfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX1VTQl9VSVJUX2RldmljZSk7CitmYWlsZWRfVVNCX1VJUlRfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX0ZUMjIzMkNfZGV2aWNlKTsKK2ZhaWxlZF9GVDIyMzJDX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV9GVDIzMkJNX2RldmljZSk7CitmYWlsZWRfRlQyMzJCTV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfOFUyMzJBTV9kZXZpY2UpOworZmFpbGVkXzhVMjMyQU1fcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX1NJT19kZXZpY2UpOworZmFpbGVkX1NJT19yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmdGRpX2V4aXQgKHZvaWQpCit7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXVzYl9kZXJlZ2lzdGVyICgmZnRkaV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfSEVfVElSQTFfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZmdGRpX1VTQl9VSVJUX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZnRkaV9GVDIyMzJDX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZnRkaV9GVDIzMkJNX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZnRkaV84VTIzMkFNX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZnRkaV9TSU9fZGV2aWNlKTsKKworfQorCisKK21vZHVsZV9pbml0KGZ0ZGlfaW5pdCk7Cittb2R1bGVfZXhpdChmdGRpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1ZDYwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0wLDAgKzEsNzc3IEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0gCisgKiBrbm93biBhcyBGVERJX1NJTyAoU2VyaWFsIElucHV0L091dHB1dCBhcHBsaWNhdGlvbiBvZiB0aGUgY2hpcHNldCkgCisgKgorICogVGhlIGV4YW1wbGUgSSBoYXZlIGlzIGtub3duIGFzIHRoZSBVU0MtMTAwMCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQorICogaHR0cDovL3d3dy5kc2UuY28ubnogLSBjYXQgbm8gWEg0MjE0IEl0IGxvb2tzIHNpbWlsYXIgdG8gdGhpczoKKyAqIGh0dHA6Ly93d3cuZGFuc2RhdGEuY29tL3VzYnNlci5odG0gYnV0IEkgY2FuJ3QgYmUgc3VyZSBUaGVyZSBhcmUgb3RoZXIKKyAqIFVTQy0xMDAwcyB3aGljaCBkb24ndCBsb29rIGxpa2UgbXkgZGV2aWNlIHRob3VnaCBzbyBiZXdhcmUhCisgKgorICogVGhlIGRldmljZSBpcyBiYXNlZCBvbiB0aGUgRlRESSBGVDhVMTAwQVggY2hpcC4gSXQgaGFzIGEgREIyNSBvbiBvbmUgc2lkZSwgCisgKiBVU0Igb24gdGhlIG90aGVyLgorICoKKyAqIFRoYW54IHRvIEZUREkgKGh0dHA6Ly93d3cuZnRkaS5jby51aykgZm9yIHNvIGtpbmRseSBwcm92aWRpbmcgZGV0YWlscworICogb2YgdGhlIHByb3RvY29sIHJlcXVpcmVkIHRvIHRhbGsgdG8gdGhlIGRldmljZSBhbmQgb25nb2luZyBhc3Npc3RlbmNlCisgKiBkdXJpbmcgZGV2ZWxvcG1lbnQuCisgKgorICogQmlsbCBSeWRlciAtIGJyeWRlckBzZ2kuY29tIGZvcm1lcmx5IG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4tIHdyb3RlIHRoZSAKKyAqIEZURElfU0lPIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFBoaWxpcHAgR/xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCisgKiBmcm9tIFJ1ZG9sZiBHdWdsZXIKKyAqCisgKi8KKworI2RlZmluZSBGVERJX1ZJRAkweDA0MDMJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KKyNkZWZpbmUgRlRESV84VTIzMkFNX1BJRCAweDYwMDEgLyogU2ltaWxhciBkZXZpY2UgdG8gU0lPIGFib3ZlICovCisjZGVmaW5lIEZURElfOFUyMzJBTV9BTFRfUElEIDB4NjAwNiAvKiBGVERJJ3MgYWx0ZXJuYXRlIFBJRCBmb3IgYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9BTFRfUElEIDB4ZjNjMCAvKiBGVERJJ3Mgc2Vjb25kIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCisjZGVmaW5lIEZURElfOFUyMjMyQ19QSUQgMHg2MDEwIC8qIER1YWwgY2hhbm5lbCBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9SRUxBSVNfUElECTB4RkExMCAgLyogUmVsYWlzIGRldmljZSBmcm9tIFJ1ZG9sZiBHdWdsZXIgKi8KKyNkZWZpbmUgRlRESV9ORl9SSUNfVklECTB4MERDRAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgRlRESV9ORl9SSUNfUElECTB4MDAwMQkvKiBQcm9kdWN0IElkICovCisKKy8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLworI2RlZmluZSBGVERJX0lSVFJBTlNfUElEIDB4RkM2MCAvKiBQcm9kdWN0IElkICovCisKKy8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCisvKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLworI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzU0N19QSUQgMHhGQzBBCS8qIDU0NzogVHdvIGxpbmUgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzM19QSUQgMHhGQzBCCS8qIDYzMzogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSB3aXRoIEtleXMgKi8KKyNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82MzVfUElEIDB4RkMwRAkvKiA2MzU6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82NDBfUElEIDB4RkMwRQkvKiA2NDA6IFR3byBsaW5lIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KKworLyogVmlkZW8gTmV0d29ya3MgTGltaXRlZCAvIEhvbWVjaG9pY2UgaW4gdGhlIFVLIHVzZSBhbiBmdGRpLWJhc2VkIGRldmljZSBmb3IgdGhlaXIgMU1iICovCisvKiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZCBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAqLworLyogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KKyNkZWZpbmUgRlRESV9WTkhDUENVU0JfRF9QSUQgMHhmZTM4IC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBMQ0QgZGlzcGxheXMsCisgKiB3aGljaCBhcmUgdGhlIEZUMjMyQk0gKCBzaW1pbGFyIHRvIHRoZSA4VTIzMkFNICkKKyAqLworI2RlZmluZSBGVERJX01UWE9SQl8wX1BJRCAgICAgIDB4RkEwMCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl8xX1BJRCAgICAgIDB4RkEwMSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl8yX1BJRCAgICAgIDB4RkEwMiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl8zX1BJRCAgICAgIDB4RkEwMyAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl80X1BJRCAgICAgIDB4RkEwNCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl81X1BJRCAgICAgIDB4RkEwNSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworI2RlZmluZSBGVERJX01UWE9SQl82X1BJRCAgICAgIDB4RkEwNiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLworCisvKiBJbnRlcmJpb21ldHJpY3MgVVNCIEkvTyBCb2FyZCAqLworLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLworI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEICAgICAgMHgxMDAyCisjZGVmaW5lIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEIDB4MTAwNgorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFBlcmxlIFN5c3RlbXMKKyAqIFVsdHJhUG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMKKyAqLworI2RlZmluZSBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQgMHhGMEMwCS8qIFBlcmxlIFVsdHJhUG9ydCBQcm9kdWN0IElkICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgU2VhbGV2ZWwgU2VhTElOSysgYWRhcHRlcnMuCisgKiAoT3JpZ2luYWwgbGlzdCBzZW50IGJ5IFR1YW4gSG9hbmcuICBJYW4gQWJib3R0IHJlbmFtZWQgdGhlIG1hY3JvcyBhbmQKKyAqIHJlbW92ZWQgc29tZSBQSURzIHRoYXQgZG9uJ3Qgc2VlbSB0byBtYXRjaCBhbnkgZXhpc3RpbmcgcHJvZHVjdHMuKQorICovCisjZGVmaW5lIFNFQUxFVkVMX1ZJRAkJMHgwYzUyCS8qIFNlYWxldmVsIFZlbmRvciBJRCAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAxX1BJRAkweDIxMDEJLyogU2VhTElOSysyMzIgKDIxMDEvMjEwNSkgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwMl9QSUQJMHgyMTAyCS8qIFNlYUxJTksrNDg1ICgyMTAyKSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAzX1BJRAkweDIxMDMJLyogU2VhTElOSysyMzJJICgyMTAzKSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTA0X1BJRAkweDIxMDQJLyogU2VhTElOSys0ODVJICgyMTA0KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAxXzFfUElECTB4MjIxMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMV8yX1BJRAkweDIyMjEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDJfMV9QSUQJMHgyMjEyCS8qIFNlYVBPUlQrMi80ODUgKDIyMDIpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAyXzJfUElECTB4MjIyMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwM18xX1BJRAkweDIyMTMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwM18yX1BJRAkweDIyMjMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8xX1BJRAkweDI0MTEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfMl9QSUQJMHgyNDIxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzNfUElECTB4MjQzMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV80X1BJRAkweDI0NDEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfMV9QSUQJMHgyNDEyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzJfUElECTB4MjQyMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8zX1BJRAkweDI0MzIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfNF9QSUQJMHgyNDQyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzFfUElECTB4MjQxMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzJfUElECTB4MjQyMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzNfUElECTB4MjQzMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAzXzRfUElECTB4MjQ0MwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzFfUElECTBYMjgxMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8yX1BJRAkwWDI4MjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfM19QSUQJMFgyODMxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzRfUElECTBYMjg0MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV81X1BJRAkwWDI4NTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNl9QSUQJMFgyODYxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzdfUElECTBYMjg3MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV84X1BJRAkwWDI4ODEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA4ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfMV9QSUQJMFgyODEyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzJfUElECTBYMjgyMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8zX1BJRAkwWDI4MzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNF9QSUQJMFgyODQyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzVfUElECTBYMjg1MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDUgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl82X1BJRAkwWDI4NjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA2ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfN19QSUQJMFgyODcyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzhfUElECTBYMjg4MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDggKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM18xX1BJRAkwWDI4MTMJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM18yX1BJRAkwWDI4MjMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfM19QSUQJMFgyODMzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzRfUElECTBYMjg0MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM181X1BJRAkwWDI4NTMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNl9QSUQJMFgyODYzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzdfUElECTBYMjg3MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM184X1BJRAkwWDI4ODMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA4ICovCisKKy8qCisgKiBEU1MtMjAgU3luYyBTdGF0aW9uIGZvciBTb255IEVyaWNzc29uIFA4MDAKKyAqLworIAorI2RlZmluZSBGVERJX0RTUzIwX1BJRCAgICAgICAgICAweEZDODIgIAorCisvKgorICogSG9tZSBFbGVjdHJvbmljcyAod3d3LmhvbWUtZWxlY3Ryby5jb20pIFVTQiBnYWRnZXRzCisgKi8KKyNkZWZpbmUgRlRESV9IRV9USVJBMV9QSUQJMHhGQTc4CS8qIFRpcmEtMSBJUiB0cmFuY2VpdmVyICovCisKKy8qIFVTQi1VSVJUIC0gQW4gaW5mcmFyZWQgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyIHVzaW5nIHRoZSA4VTIzMkFNIGNoaXAgKi8KKy8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLworI2RlZmluZSBGVERJX1VTQl9VSVJUX1BJRAkweEY4NTAJLyogUHJvZHVjdCBJZCAqLworCisvKiBFTFYgVVNCIE1vZHVsZSBVTzEwMCAoUElEIHNlbnQgYnkgU3RlZmFuIEZyaW5ncykgKi8KKyNkZWZpbmUgRlRESV9FTFZfVU8xMDBfUElECTB4RkI1OAkvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgSUQgVEVDSCAod3d3LmlkdC1uZXQuY29tKSBkZXZpY2VzCisgKi8KKyNkZWZpbmUgSURURUNIX1ZJRAkJMHgwQUNECS8qIElEIFRFQ0ggVmVuZG9yIElEICovCisjZGVmaW5lIElEVEVDSF9JRFQxMjIxVV9QSUQJMHgwMzAwCS8qIElEVDEyMjFVIFVTQiB0byBSUy0yMzIgYWRhcHRlciAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIE9tbmlkaXJlY3Rpb25hbCBDb250cm9sIFRlY2hub2xvZ3ksIEluYy4gZGV2aWNlcworICovCisjZGVmaW5lIE9DVF9WSUQJCQkweDBCMzkJLyogT0NUIHZlbmRvciBJRCAqLworLyogTm90ZTogT0NUIFVTMTAxIGlzIGFsc28gcmViYWRnZWQgYXMgRGljayBTbWl0aCBFbGVjdHJvbmljcyAoTlopIFhINjM4MSAqLworLyogQWxzbyByZWJhZGdlZCBhcyBTSUlHIEluYy4gbW9kZWwgVVMyMzA4ICovCisjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLworCisvKiBhbiBpbmZyYXJlZCByZWNlaXZlciBmb3IgdXNlciBhY2Nlc3MgY29udHJvbCB3aXRoIElSIHRhZ3MgKi8KKyNkZWZpbmUgRlRESV9QSUVHUk9VUF9QSUQJMHhGMjA4CS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIFByb3RlZ28gcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMQkweEZDNzAJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLworI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLworI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfMwkweEZDNzIJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLworI2RlZmluZSBQUk9URUdPX1NQRUNJQUxfNAkweEZDNzMJLyogc3BlY2lhbC91bmtub3duIGRldmljZSAqLworCisvKgorICogR3VkZSBBbmFsb2ctIHVuZCBEaWdpdGFsc3lzdGVtZSBHbWJICisgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MDhfUElEICAgIDB4RTgwOAorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOV9QSUQgICAgMHhFODA5CisjZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEJfUElEICAgIDB4RTgwQgorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQ19QSUQgICAgMHhFODBDCisjZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEVfUElEICAgIDB4RTgwRQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRl9QSUQgICAgMHhFODBGCisjZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODg5X1BJRCAgICAweEU4ODkgIC8qIFVTQiBSUy0yMzIgT3B0b0JyaWRnZSAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4QV9QSUQgICAgMHhFODhBCisjZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OENfUElEICAgIDB4RTg4QworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RF9QSUQgICAgMHhFODhECisjZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEZfUElEICAgIDB4RTg4RgorCisvKgorICogTGlueCBUZWNobm9sb2dpZXMgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCisjZGVmaW5lIExJTlhfTUFTVEVSREVWRUwyX1BJRCAgIDB4RjQ0OSAgIC8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8yX1BJRCAgIDB4RjQ0QyAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworCisvKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0gdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyICovCisvKiB1bml0IGZvciBQSUMxNidzL1BJQzE4J3MgKi8KKyNkZWZpbmUgRlRESV9DQ1NJQ0RVMjBfMF9QSUQgICAgMHhGOUQwICAgICAKKyNkZWZpbmUgRlRESV9DQ1NJQ0RVNDBfMV9QSUQgICAgMHhGOUQxICAgICAKKworLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KKyNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAorCisvKgorICogSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zIChodHRwOi8vd3d3LmludHJlcGlkY3MuY29tLykgVmFsdWVDQU4gYW5kIE5lb1ZJCisgKi8KKyNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKKyNkZWZpbmUgSU5UUkVQSURfVkFMVUVDQU5fUElECTB4MDYwMQorI2RlZmluZSBJTlRSRVBJRF9ORU9WSV9QSUQJMHgwNzAxCisKKy8qCisgKiBGYWxjb20gV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgR21iSAorICovCisjZGVmaW5lIEZBTENPTV9WSUQJCTB4MEY5NAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgRkFMQ09NX1RXSVNUX1BJRAkweDAwMDEJLyogRmFsY29tIFR3aXN0IFVTQiBHUFJTIG1vZGVtICovCisKKy8qCisgKiBTVVVOVE8gcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX1NVVU5UT19TUE9SVFNfUElECTB4RjY4MAkvKiBTdXVudG8gU3BvcnRzIGluc3RydW1lbnQgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBCJkIgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCisgKi8KKyNkZWZpbmUgQkFOREJfVklECQkweDA4NTYJLyogQiZCIEVsZWN0cm9uaWNzIFZlbmRvciBJRCAqLworI2RlZmluZSBCQU5EQl9VU09UTDRfUElECTB4QUMwMQkvKiBVU09UTDQgSXNvbGF0ZWQgUlMtNDg1IENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU1RMNF9QSUQJCTB4QUMwMgkvKiBVU1RMNCBSUy00ODUgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTTzlNTDJfUElECTB4QUMwMwkvKiBVU085TUwyIElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KKworLyoKKyAqIFJNIE1pY2hhZWxpZGVzIENBTnZpZXcgVVNCIChodHRwOi8vd3d3LnJtY2FuLmNvbSkKKyAqIENBTiBmaWxlZGJ1cyBpbnRlcmZhY2UgYWRhcHRlciwgYWRkYWQgYnkgcG9ydCBHbWJIIHd3dy5wb3J0LmRlKQorICovCisjZGVmaW5lIEZURElfUk1fVklECQkweDA0MDMJLyogVmVuZG9yICBJZCAqLworI2RlZmluZSBGVERJX1JNQ0FOVklFV19QSUQJMHhmZDYwCS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIEVWRVIgRWNvIFBybyBVUFMgKGh0dHA6Ly93d3cuZXZlci5jb20ucGwvKQorICovCisKKyNkZWZpbmUJRVZFUl9FQ09fUFJPX0NEUwkweGU1MjAJLyogUlMtMjMyIGNvbnZlcnRlciAqLworCisvKiBDb21tYW5kcyAqLworI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KKyNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAkyIC8qIFNldCBmbG93IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURfUkFURQkzIC8qIFNldCBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEEJNCAvKiBTZXQgdGhlIGRhdGEgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBwb3J0ICovCisjZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMJNSAvKiBSZXRyaWV2ZSBjdXJyZW50IHZhbHVlIG9mIG1vZGVybiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIJNiAvKiBTZXQgdGhlIGV2ZW50IGNoYXJhY3RlciAqLworI2RlZmluZSBGVERJX1NJT19TRVRfRVJST1JfQ0hBUgk3IC8qIFNldCB0aGUgZXJyb3IgY2hhcmFjdGVyICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSCTkgLyogU2V0IHRoZSBsYXRlbmN5IHRpbWVyICovCisjZGVmaW5lIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCTEwIC8qIEdldCB0aGUgbGF0ZW5jeSB0aW1lciAqLworCisvKiBQb3J0IGludGVyZmFjZSBjb2RlIGZvciBGVDIyMzJDICovCisjZGVmaW5lIElOVEVSRkFDRV9BCQkxCisjZGVmaW5lIElOVEVSRkFDRV9CCQkyCisKKworLyoKKyAqICAgQm1SZXF1ZXN0VHlwZTogIDExMDAgMDAwMGIKKyAqICAgYlJlcXVlc3Q6ICAgICAgIEZURElfRTJfUkVBRAorICogICB3VmFsdWU6ICAgICAgICAgMAorICogICB3SW5kZXg6ICAgICAgICAgQWRkcmVzcyBvZiB3b3JkIHRvIHJlYWQKKyAqICAgd0xlbmd0aDogICAgICAgIDIKKyAqICAgRGF0YTogICAgICAgICAgIFdpbGwgcmV0dXJuIGEgd29yZCBvZiBkYXRhIGZyb20gRTJBZGRyZXNzCisgKgorICovCisKKy8qIFBvcnQgSWRlbnRpZmllciBUYWJsZSAqLworI2RlZmluZSBQSVRfREVGQVVMVCAJCTAgLyogU0lPQSAqLworI2RlZmluZSBQSVRfU0lPQQkJMSAvKiBTSU9BICovCisvKiBUaGUgZGV2aWNlIHRoaXMgZHJpdmVyIGlzIHRlc3RlZCB3aXRoIG9uZSBoYXMgb25seSBvbmUgcG9ydCAqLworI2RlZmluZSBQSVRfU0lPQgkJMiAvKiBTSU9CICovCisjZGVmaW5lIFBJVF9QQVJBTExFTAkJMyAvKiBQYXJhbGxlbCAqLworCisvKiBGVERJX1NJT19SRVNFVCAqLworI2RlZmluZSBGVERJX1NJT19SRVNFVF9SRVFVRVNUIEZURElfU0lPX1JFU0VUCisjZGVmaW5lIEZURElfU0lPX1JFU0VUX1JFUVVFU1RfVFlQRSAweDQwCisjZGVmaW5lIEZURElfU0lPX1JFU0VUX1NJTyAwCisjZGVmaW5lIEZURElfU0lPX1JFU0VUX1BVUkdFX1JYIDEKKyNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUFVSR0VfVFggMgorCisvKgorICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIKKyAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19SRVNFVAorICogd1ZhbHVlOiAgICAgICAgIENvbnRyb2wgVmFsdWUgCisgKiAgICAgICAgICAgICAgICAgICAwID0gUmVzZXQgU0lPCisgKiAgICAgICAgICAgICAgICAgICAxID0gUHVyZ2UgUlggYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgICAyID0gUHVyZ2UgVFggYnVmZmVyCisgKiB3SW5kZXg6ICAgICAgICAgUG9ydAorICogd0xlbmd0aDogICAgICAgIDAKKyAqIERhdGE6ICAgICAgICAgICBOb25lCisgKgorICogVGhlIFJlc2V0IFNJTyBjb21tYW5kIGhhcyB0aGlzIGVmZmVjdDoKKyAqCisgKiAgICBTZXRzIGZsb3cgY29udHJvbCBzZXQgdG8gJ25vbmUnCisgKiAgICBFdmVudCBjaGFyID0gJDBECisgKiAgICBFdmVudCB0cmlnZ2VyID0gZGlzYWJsZWQKKyAqICAgIFB1cmdlIFJYIGJ1ZmZlcgorICogICAgUHVyZ2UgVFggYnVmZmVyCisgKiAgICBDbGVhciBEVFIKKyAqICAgIENsZWFyIFJUUworICogICAgYmF1ZCBhbmQgZGF0YSBmb3JtYXQgbm90IHJlc2V0CisgKgorICogVGhlIFB1cmdlIFJYIGFuZCBUWCBidWZmZXIgY29tbWFuZHMgYWZmZWN0IG5vdGhpbmcgZXhjZXB0IHRoZSBidWZmZXJzCisgKgorICAgKi8KKworLyogRlRESV9TSU9fU0VUX0JBVURSQVRFICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9CQVVEUkFURV9SRVFVRVNUX1RZUEUgMHg0MAorI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVCAzCisKKy8qCisgKiBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwQgorICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9CQVVEUkFURQorICogd1ZhbHVlOiAgICAgICAgIEJhdWREaXZpc29yIHZhbHVlIC0gc2VlIGJlbG93CisgKiB3SW5kZXg6ICAgICAgICAgUG9ydAorICogd0xlbmd0aDogICAgICAgIDAKKyAqIERhdGE6ICAgICAgICAgICBOb25lCisgKiBUaGUgQmF1ZERpdmlzb3IgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6CisgKiAtIEJhc2VDbG9jayBpcyBlaXRoZXIgMTIwMDAwMDAgb3IgNDgwMDAwMDAgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UuIEZJWE1FOiBJIHdpc2gKKyAqICAgSSBrbmV3IGhvdyB0byBkZXRlY3Qgb2xkIGNoaXBzIHRvIHNlbGVjdCBwcm9wZXIgYmFzZSBjbG9jayEKKyAqIC0gQmF1ZERpdmlzb3IgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgZW5jb2RlZCBpbiBhIGZ1bm55IHdheS4KKyAqICAgKC0tV1JPTkcgV0FZIE9GIFRISU5LSU5HLS0pCisgKiAgIEJhdWREaXZpc29yIGlzIGEgZml4ZWQgcG9pbnQgbnVtYmVyIGVuY29kZWQgd2l0aCBmb2xsb3dpbmcgYml0IHdlaWdoczoKKyAqICAgKC0yKSgtMSkoMTMuLjApLiBJdCBpcyBhIHJhZGljYWwgd2l0aCBhIGRlbm9taW5hdG9yIG9mIDQsIHNvIHZhbHVlcworICogICBlbmQgd2l0aCAwLjAgKDAwLi4uKSwgMC4yNSAoMTAuLi4pLCAwLjUgKDAxLi4uKSwgYW5kIDAuNzUgKDExLi4uKS4KKyAqICAgKC0tVEhFIFJFQUxJVFktLSkKKyAqICAgVGhlIGJvdGgtYml0cy1zZXQgaGFzIHF1aXRlIGRpZmZlcmVudCBtZWFuaW5nIGZyb20gMC43NSAtIHRoZSBjaGlwIGRlc2lnbmVycworICogICBoYXZlIGRlY2lkZWQgaXQgdG8gbWVhbiAwLjEyNSBpbnN0ZWFkIG9mIDAuNzUuCisgKiAgIFRoaXMgaW5mbyBsb29rZWQgdXAgaW4gRlRESSBhcHBsaWNhdGlvbiBub3RlICJGVDhVMjMyIERFVklDRVMgXCBEYXRhIFJhdGVzCisgKiAgIGFuZCBGbG93IENvbnRyb2wgQ29uc2lkZXJhdGlvbiBmb3IgVVNCIHRvIFJTMjMyIi4KKyAqIC0gQmF1ZERpdmlzb3IgPSAoQmFzZUNsb2NrIC8gMTYpIC8gQmF1ZFJhdGUsIHdoZXJlIHRoZSAoPSkgb3BlcmF0aW9uIHNob3VsZAorICogICBhdXRvbWFnaWNhbGx5IHJlLWVuY29kZSB0aGUgcmVzdWx0aW5nIHZhbHVlIHRvIHRha2UgZnJhY3Rpb25zIGludG8gY29uc2lkZXJhdGlvbi4KKyAqIEFzIGFsbCB2YWx1ZXMgYXJlIGludGVnZXJzLCBzb21lIGJpdCB0d2lkZGxpbmcgaXMgaW4gb3JkZXI6CisgKiAgIEJhdWREaXZpc29yID0gKEJhc2VDbG9jayAvIDE2IC8gQmF1ZFJhdGUpIHwKKyAqICAgKCgoQmFzZUNsb2NrIC8gMiAvIEJhdWRSYXRlKSAmIDQpID8gMHg0MDAwICAgIC8vIDAuNQorICogICAgOiAoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiAyKSA/IDB4ODAwMCAgLy8gMC4yNQorICogICAgOiAoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiAxKSA/IDB4YzAwMCAgLy8gMC4xMjUKKyAqICAgIDogMCkKKyAqCisgKiBGb3IgdGhlIEZUMjMyQk0sIGEgMTd0aCBkaXZpc29yIGJpdCB3YXMgaW50cm9kdWNlZCB0byBlbmNvZGUgdGhlIG11bHRpcGxlcworICogb2YgMC4xMjUgbWlzc2luZyBmcm9tIHRoZSBGVDhVMjMyQU0uICBCaXRzIDE2IHRvIDE0IGFyZSBjb2RlZCBhcyBmb2xsb3dzCisgKiAodGhlIGZpcnN0IGZvdXIgY29kZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgRlQ4VTIzMkFNLCB3aGVyZSBiaXQgMTYgaXMKKyAqIGFsd2F5cyAwKToKKyAqICAgMDAwIC0gYWRkIC4wMDAgdG8gZGl2aXNvcgorICogICAwMDEgLSBhZGQgLjUwMCB0byBkaXZpc29yCisgKiAgIDAxMCAtIGFkZCAuMjUwIHRvIGRpdmlzb3IKKyAqICAgMDExIC0gYWRkIC4xMjUgdG8gZGl2aXNvcgorICogICAxMDAgLSBhZGQgLjM3NSB0byBkaXZpc29yCisgKiAgIDEwMSAtIGFkZCAuNjI1IHRvIGRpdmlzb3IKKyAqICAgMTEwIC0gYWRkIC43NTAgdG8gZGl2aXNvcgorICogICAxMTEgLSBhZGQgLjg3NSB0byBkaXZpc29yCisgKiBCaXRzIDE1IHRvIDAgb2YgdGhlIDE3LWJpdCBkaXZpc29yIGFyZSBwbGFjZWQgaW4gdGhlIHVyYiB2YWx1ZS4gIEJpdCAxNiBpcyAKKyAqIHBsYWNlZCBpbiBiaXQgMCBvZiB0aGUgdXJiIGluZGV4LgorICoKKyAqIE5vdGUgdGhhdCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygc3BlY2lhbCBjYXNlcyB0byBzdXBwb3J0IHRoZSBoaWdoZXN0IGJhdWQKKyAqIHJhdGVzLiAgSWYgdGhlIGNhbGN1bGF0ZWQgZGl2aXNvciB2YWx1ZSBpcyAxLCB0aGlzIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGgKKyAqIDAuICBBZGRpdGlvbmFsbHkgZm9yIHRoZSBGVDIzMkJNLCBpZiB0aGUgY2FsY3VsYXRlZCBkaXZpc29yIHZhbHVlIGlzIDB4NDAwMQorICogKDEuNSksIHRoaXMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCAweDAwMDEgKDEpIChidXQgdGhpcyBkaXZpc29yIHZhbHVlIGlzCisgKiBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBGVDhVMjMyQU0pLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJU0lPID0gMSwKKwlGVDhVMjMyQU0gPSAyLAorCUZUMjMyQk0gPSAzLAorCUZUMjIzMkMgPSA0LAorfSBmdGRpX2NoaXBfdHlwZV90OworCit0eXBlZGVmIGVudW0geworIGZ0ZGlfc2lvX2IzMDAgPSAwLCAKKyBmdGRpX3Npb19iNjAwID0gMSwgCisgZnRkaV9zaW9fYjEyMDAgPSAyLAorIGZ0ZGlfc2lvX2IyNDAwID0gMywKKyBmdGRpX3Npb19iNDgwMCA9IDQsCisgZnRkaV9zaW9fYjk2MDAgPSA1LAorIGZ0ZGlfc2lvX2IxOTIwMCA9IDYsCisgZnRkaV9zaW9fYjM4NDAwID0gNywKKyBmdGRpX3Npb19iNTc2MDAgPSA4LAorIGZ0ZGlfc2lvX2IxMTUyMDAgPSA5Cit9IEZURElfU0lPX2JhdWRyYXRlX3QgOworCisvKgorICogVGhlIGZ0ZGlfOFUyMzJBTV94eE1Iel9ieXl5IGNvbnN0YW50cyBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhlIGVuY29kZWQgZGl2aXNvciB2YWx1ZXMKKyAqIGFyZSBjYWxjdWxhdGVkIGludGVybmFsbHkuCisgKi8KKworI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUIEZURElfU0lPX1NFVF9EQVRBCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSAweDQwCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9OT05FICgweDAgPDwgOCApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9PREQgKDB4MSA8PCA4ICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX0VWRU4gKDB4MiA8PCA4ICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX01BUksgKDB4MyA8PCA4ICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX1NQQUNFICgweDQgPDwgOCApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18xICgweDAgPDwgMTEgKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMTUgKDB4MSA8PCAxMSApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18yICgweDIgPDwgMTEgKQorI2RlZmluZSBGVERJX1NJT19TRVRfQlJFQUsgKDB4MSA8PCAxNCkKKy8qIEZURElfU0lPX1NFVF9EQVRBICovCisKKy8qCisgKiBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwQiAKKyAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfREFUQQorICogd1ZhbHVlOiAgICAgICAgIERhdGEgY2hhcmFjdGVyaXN0aWNzIChzZWUgYmVsb3cpCisgKiB3SW5kZXg6ICAgICAgICAgUG9ydAorICogd0xlbmd0aDogICAgICAgIDAKKyAqIERhdGE6ICAgICAgICAgICBObworICoKKyAqIERhdGEgY2hhcmFjdGVyaXN0aWNzCisgKgorICogICBCMC4uNyAgIE51bWJlciBvZiBkYXRhIGJpdHMKKyAqICAgQjguLjEwICBQYXJpdHkKKyAqICAgICAgICAgICAwID0gTm9uZQorICogICAgICAgICAgIDEgPSBPZGQKKyAqICAgICAgICAgICAyID0gRXZlbgorICogICAgICAgICAgIDMgPSBNYXJrCisgKiAgICAgICAgICAgNCA9IFNwYWNlCisgKiAgIEIxMS4uMTMgU3RvcCBCaXRzCisgKiAgICAgICAgICAgMCA9IDEKKyAqICAgICAgICAgICAxID0gMS41CisgKiAgICAgICAgICAgMiA9IDIKKyAqICAgQjE0CisgKiAgICAgICAgICAgMSA9IFRYIE9OIChicmVhaykKKyAqICAgICAgICAgICAwID0gVFggT0ZGIChub3JtYWwgc3RhdGUpCisgKiAgIEIxNSBSZXNlcnZlZAorICoKKyAqLworCisKKworLyogRlRESV9TSU9fTU9ERU1fQ1RSTCAqLworI2RlZmluZSBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUX1RZUEUgMHg0MAorI2RlZmluZSBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUIEZURElfU0lPX01PREVNX0NUUkwKKworLyogCisgKiBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMEIKKyAqIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fTU9ERU1fQ1RSTAorICogd1ZhbHVlOiAgICAgICAgICBDb250cm9sVmFsdWUgKHNlZSBiZWxvdykKKyAqIHdJbmRleDogICAgICAgICAgUG9ydAorICogd0xlbmd0aDogICAgICAgICAwCisgKiBEYXRhOiAgICAgICAgICAgIE5vbmUKKyAqCisgKiBOT1RFOiBJZiB0aGUgZGV2aWNlIGlzIGluIFJUUy9DVFMgZmxvdyBjb250cm9sLCB0aGUgUlRTIHNldCBieSB0aGlzCisgKiBjb21tYW5kIHdpbGwgYmUgSUdOT1JFRCB3aXRob3V0IGFuIGVycm9yIGJlaW5nIHJldHVybmVkCisgKiBBbHNvIC0geW91IGNhbiBub3Qgc2V0IERUUiBhbmQgUlRTIHdpdGggb25lIGNvbnRyb2wgbWVzc2FnZQorICovCisKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9NQVNLIDB4MQorI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX0hJR0ggKCAxIHwgKCBGVERJX1NJT19TRVRfRFRSX01BU0sgIDw8IDgpKQorI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX0xPVyAgKCAwIHwgKCBGVERJX1NJT19TRVRfRFRSX01BU0sgIDw8IDgpKQorI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX01BU0sgMHgyCisjZGVmaW5lIEZURElfU0lPX1NFVF9SVFNfSElHSCAoIDIgfCAoIEZURElfU0lPX1NFVF9SVFNfTUFTSyA8PCA4ICkpCisjZGVmaW5lIEZURElfU0lPX1NFVF9SVFNfTE9XICggMCB8ICggRlRESV9TSU9fU0VUX1JUU19NQVNLIDw8IDggKSkKKworLyoKKyAqIENvbnRyb2xWYWx1ZQorICogQjAgICAgRFRSIHN0YXRlCisgKiAgICAgICAgICAwID0gcmVzZXQKKyAqICAgICAgICAgIDEgPSBzZXQKKyAqIEIxICAgIFJUUyBzdGF0ZQorICogICAgICAgICAgMCA9IHJlc2V0CisgKiAgICAgICAgICAxID0gc2V0CisgKiBCMi4uNyBSZXNlcnZlZAorICogQjggICAgRFRSIHN0YXRlIGVuYWJsZQorICogICAgICAgICAgMCA9IGlnbm9yZQorICogICAgICAgICAgMSA9IHVzZSBEVFIgc3RhdGUKKyAqIEI5ICAgIFJUUyBzdGF0ZSBlbmFibGUKKyAqICAgICAgICAgIDAgPSBpZ25vcmUKKyAqICAgICAgICAgIDEgPSB1c2UgUlRTIHN0YXRlCisgKiBCMTAuLjE1IFJlc2VydmVkCisgKi8KKworLyogRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTCAqLworI2RlZmluZSBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSAweDQwCisjZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCBGVERJX1NJT19TRVRfRkxPV19DVFJMCisjZGVmaW5lIEZURElfU0lPX0RJU0FCTEVfRkxPV19DVFJMIDB4MCAKKyNkZWZpbmUgRlRESV9TSU9fUlRTX0NUU19IUyAoMHgxIDw8IDgpCisjZGVmaW5lIEZURElfU0lPX0RUUl9EU1JfSFMgKDB4MiA8PCA4KQorI2RlZmluZSBGVERJX1NJT19YT05fWE9GRl9IUyAoMHg0IDw8IDgpCisvKgorICogICBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwYgorICogICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAorICogICB3VmFsdWU6ICAgICAgICAgWG9mZi9Yb24KKyAqICAgd0luZGV4OiAgICAgICAgIFByb3RvY29sL1BvcnQgLSBoSW5kZXggaXMgcHJvdG9jbCAvIGxJbmRleCBpcyBwb3J0CisgKiAgIHdMZW5ndGg6ICAgICAgICAwIAorICogICBEYXRhOiAgICAgICAgICAgTm9uZQorICoKKyAqIGhJbmRleCBwcm90b2NvbCBpczoKKyAqICAgQjAgT3V0cHV0IGhhbmRzaGFraW5nIHVzaW5nIFJUUy9DVFMKKyAqICAgICAgIDAgPSBkaXNhYmxlZAorICogICAgICAgMSA9IGVuYWJsZWQKKyAqICAgQjEgT3V0cHV0IGhhbmRzaGFraW5nIHVzaW5nIERUUi9EU1IKKyAqICAgICAgIDAgPSBkaXNhYmxlZAorICogICAgICAgMSA9IGVuYWJsZWQKKyAqICAgQjIgWG9uL1hvZmYgaGFuZHNoYWtpbmcKKyAqICAgICAgIDAgPSBkaXNhYmxlZAorICogICAgICAgMSA9IGVuYWJsZWQKKyAqCisgKiBBIHZhbHVlIG9mIHplcm8gaW4gdGhlIGhJbmRleCBmaWVsZCBkaXNhYmxlcyBoYW5kc2hha2luZworICoKKyAqIElmIFhvbi9Yb2ZmIGhhbmRzaGFraW5nIGlzIHNwZWNpZmllZCwgdGhlIGhWYWx1ZSBmaWVsZCBzaG91bGQgY29udGFpbiB0aGUgWE9GRiBjaGFyYWN0ZXIgCisgKiBhbmQgdGhlIGxWYWx1ZSBmaWVsZCBjb250YWlucyB0aGUgWE9OIGNoYXJhY3Rlci4KKyAqLyAgCisgCisvKgorICogRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKKyAqCisgKiBTZXQgdGhlIHRpbWVvdXQgaW50ZXJ2YWwuIFRoZSBGVERJIGNvbGxlY3RzIGRhdGEgZnJvbSB0aGUgc2xhdmUKKyAqIGRldmljZSwgdHJhbnNtaXR0aW5nIGl0IHRvIHRoZSBob3N0IHdoZW4gZWl0aGVyIEEpIDYyIGJ5dGVzIGFyZQorICogcmVjZWl2ZWQsIG9yIEIpIHRoZSB0aW1lb3V0IGludGVydmFsIGhhcyBlbGFwc2VkIGFuZCB0aGUgYnVmZmVyCisgKiBjb250YWlucyBhdCBsZWFzdCAxIGJ5dGUuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYSBzbWFsbCBudW1iZXIKKyAqIGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHNlbmQKKyAqIHNtYWxsIHBhY2tldHMsIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDE2bXMuCisgKi8KKyNkZWZpbmUgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKKyNkZWZpbmUgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSAweEMwCisKKy8qIAorICogIEJtUmVxdWVzdFR5cGU6ICAgMTEwMCAwMDAwYgorICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKKyAqICB3VmFsdWU6ICAgICAgICAgIDAKKyAqICB3SW5kZXg6ICAgICAgICAgIFBvcnQKKyAqICB3TGVuZ3RoOiAgICAgICAgIDAKKyAqICBEYXRhOiAgICAgICAgICAgIGxhdGVuY3kgKG9uIHJldHVybikKKyAqLworCisvKiAKKyAqIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSCisgKgorICogU2V0IHRoZSB0aW1lb3V0IGludGVydmFsLiBUaGUgRlRESSBjb2xsZWN0cyBkYXRhIGZyb20gdGhlIHNsYXZlCisgKiBkZXZpY2UsIHRyYW5zbWl0dGluZyBpdCB0byB0aGUgaG9zdCB3aGVuIGVpdGhlciBBKSA2MiBieXRlcyBhcmUKKyAqIHJlY2VpdmVkLCBvciBCKSB0aGUgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZCBhbmQgdGhlIGJ1ZmZlcgorICogY29udGFpbnMgYXQgbGVhc3QgMSBieXRlLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGEgc21hbGwgbnVtYmVyCisgKiBjYW4gZHJhbWF0aWNhbGx5IGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGFwcGxpY2F0aW9ucyB3aGljaCBzZW5kCisgKiBzbWFsbCBwYWNrZXRzLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNm1zLgorICovCisjZGVmaW5lICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSCisjZGVmaW5lICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUgMHg0MAorCisvKiAKKyAqICBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMGIKKyAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSCisgKiAgd1ZhbHVlOiAgICAgICAgICBMYXRlbmN5IChtaWxsaXNlY29uZHMpCisgKiAgd0luZGV4OiAgICAgICAgICBQb3J0CisgKiAgd0xlbmd0aDogICAgICAgICAwCisgKiAgRGF0YTogICAgICAgICAgICBOb25lCisgKgorICogd1ZhbHVlOgorICogICBCMC4uNyAgIExhdGVuY3kgdGltZXIKKyAqICAgQjguLjE1ICAwCisgKgorICovCisKKy8qCisgKiBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUiAKKyAqCisgKiBTZXQgdGhlIHNwZWNpYWwgZXZlbnQgY2hhcmFjdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbW11bmljYXRpb25zIHBvcnQuCisgKiBJZiB0aGUgZGV2aWNlIHNlZXMgdGhpcyBjaGFyYWN0ZXIgaXQgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdGhlCisgKiBkYXRhIHJlYWQgc28gZmFyIC0gcmF0aGVyIHRoYW4gd2FpdCA0MG1zIG9yIHVudGlsIDYyIGJ5dGVzIGFyZSByZWFkCisgKiB3aGljaCBpcyB3aGF0IG5vcm1hbGx5IGhhcHBlbnMuCisgKi8KKworCisjZGVmaW5lICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUl9SRVFVRVNUIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCisjZGVmaW5lICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUl9SRVFVRVNUX1RZUEUgMHg0MAorCisKKy8qIAorICogIEJtUmVxdWVzdFR5cGU6ICAgMDEwMCAwMDAwYgorICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKKyAqICB3VmFsdWU6ICAgICAgICAgIEV2ZW50Q2hhcgorICogIHdJbmRleDogICAgICAgICAgUG9ydAorICogIHdMZW5ndGg6ICAgICAgICAgMAorICogIERhdGE6ICAgICAgICAgICAgTm9uZQorICoKKyAqIHdWYWx1ZToKKyAqICAgQjAuLjcgICBFdmVudCBDaGFyYWN0ZXIKKyAqICAgQjggICAgICBFdmVudCBDaGFyYWN0ZXIgUHJvY2Vzc2luZworICogICAgICAgICAgICAgMCA9IGRpc2FibGVkCisgKiAgICAgICAgICAgICAxID0gZW5hYmxlZAorICogICBCOS4uMTUgIFJlc2VydmVkCisgKgorICovCisgICAgICAgICAgCisvKiBGVERJX1NJT19TRVRfRVJST1JfQ0hBUiAqLworCisvKiBTZXQgdGhlIHBhcml0eSBlcnJvciByZXBsYWNlbWVudCBjaGFyYWN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tbXVuaWNhdGlvbnMgcG9ydCAqLworCisvKiAKKyAqICBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwYgorICogIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgorICogIHdWYWx1ZTogICAgICAgICBFcnJvciBDaGFyCisgKiAgd0luZGV4OiAgICAgICAgIFBvcnQKKyAqICB3TGVuZ3RoOiAgICAgICAgMAorICogIERhdGE6ICAgICAgICAgICBOb25lCisgKgorICpFcnJvciBDaGFyCisgKiAgQjAuLjcgIEVycm9yIENoYXJhY3RlcgorICogIEI4ICAgICBFcnJvciBDaGFyYWN0ZXIgUHJvY2Vzc2luZworICogICAgICAgICAgIDAgPSBkaXNhYmxlZAorICogICAgICAgICAgIDEgPSBlbmFibGVkCisgKiAgQjkuLjE1IFJlc2VydmVkCisgKgorICovCisKKy8qIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMgKi8KKy8qIFJldHJlaXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSAweGMwCisjZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCisjZGVmaW5lIEZURElfU0lPX0NUU19NQVNLIDB4MTAKKyNkZWZpbmUgRlRESV9TSU9fRFNSX01BU0sgMHgyMAorI2RlZmluZSBGVERJX1NJT19SSV9NQVNLICAweDQwCisjZGVmaW5lIEZURElfU0lPX1JMU0RfTUFTSyAweDgwCisvKiAKKyAqICAgQm1SZXF1ZXN0VHlwZTogICAxMTAwIDAwMDBiCisgKiAgIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUworICogICB3VmFsdWU6ICAgICAgICAgIHplcm8KKyAqICAgd0luZGV4OiAgICAgICAgICBQb3J0CisgKiAgIHdMZW5ndGg6ICAgICAgICAgMQorICogICBEYXRhOiAgICAgICAgICAgIFN0YXR1cworICogCisgKiBPbmUgYnl0ZSBvZiBkYXRhIGlzIHJldHVybmVkIAorICogQjAuLjMgMAorICogQjQgICAgQ1RTCisgKiAgICAgICAgIDAgPSBpbmFjdGl2ZQorICogICAgICAgICAxID0gYWN0aXZlCisgKiBCNSAgICBEU1IKKyAqICAgICAgICAgMCA9IGluYWN0aXZlCisgKiAgICAgICAgIDEgPSBhY3RpdmUKKyAqIEI2ICAgIFJpbmcgSW5kaWNhdG9yIChSSSkKKyAqICAgICAgICAgMCA9IGluYWN0aXZlCisgKiAgICAgICAgIDEgPSBhY3RpdmUKKyAqIEI3ICAgIFJlY2VpdmUgTGluZSBTaWduYWwgRGV0ZWN0IChSTFNEKQorICogICAgICAgICAwID0gaW5hY3RpdmUKKyAqICAgICAgICAgMSA9IGFjdGl2ZSAKKyAqLworCisKKworLyogRGVzY3JpcHRvcnMgcmV0dXJuZWQgYnkgdGhlIGRldmljZSAKKyAqIAorICogIERldmljZSBEZXNjcmlwdG9yCisgKiAKKyAqIE9mZnNldAlGaWVsZAkJU2l6ZQlWYWx1ZQlEZXNjcmlwdGlvbgorICogMAliTGVuZ3RoCQkxCTB4MTIJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCisgKiAxCWJEZXNjcmlwdG9yVHlwZQkxCTB4MDEJREVWSUNFIERlc2NyaXB0b3IgVHlwZQorICogMgliY2RVU0IJCTIJMHgwMTEwCVVTQiBTcGVjIFJlbGVhc2UgTnVtYmVyCisgKiA0CWJEZXZpY2VDbGFzcwkxCTB4MDAJQ2xhc3MgQ29kZQorICogNQliRGV2aWNlU3ViQ2xhc3MJMQkweDAwCVN1YkNsYXNzIENvZGUKKyAqIDYJYkRldmljZVByb3RvY29sCTEJMHgwMAlQcm90b2NvbCBDb2RlCisgKiA3CWJNYXhQYWNrZXRTaXplMCAxCTB4MDgJTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgZW5kcG9pbnQgMAorICogOAlpZFZlbmRvcgkyCTB4MDQwMwlWZW5kb3IgSUQKKyAqIDEwCWlkUHJvZHVjdAkyCTB4ODM3MglQcm9kdWN0IElEIChGVERJX1NJT19QSUQpCisgKiAxMgliY2REZXZpY2UJMgkweDAwMDEJRGV2aWNlIHJlbGVhc2UgbnVtYmVyCisgKiAxNAlpTWFudWZhY3R1cmVyCTEJMHgwMQlJbmRleCBvZiBtYW4uIHN0cmluZyBkZXNjCisgKiAxNQlpUHJvZHVjdAkxCTB4MDIJSW5kZXggb2YgcHJvZCBzdHJpbmcgZGVzYworICogMTYJaVNlcmlhbE51bWJlcgkxCTB4MDIJSW5kZXggb2Ygc2VyaWFsIG5tciBzdHJpbmcgZGVzYworICogMTcJYk51bUNvbmZpZ3VyYXRpb25zIDEgICAgMHgwMQlOdW1iZXIgb2YgcG9zc2libGUgY29uZmlndXJhdGlvbnMKKyAqIAorICogQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yCisgKiAKKyAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKKyAqIDAJYkxlbmd0aAkJCTEJMHgwOQlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKKyAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDIJQ09ORklHVVJBVElPTiBEZXNjcmlwdG9yIFR5cGUKKyAqIDIJd1RvdGFsTGVuZ3RoCQkyCTB4MDAyMAlUb3RhbCBsZW5ndGggb2YgZGF0YQorICogNAliTnVtSW50ZXJmYWNlcwkJMQkweDAxCU51bWJlciBvZiBpbnRlcmZhY2VzIHN1cHBvcnRlZAorICogNQliQ29uZmlndXJhdGlvblZhbHVlCTEJMHgwMQlBcmd1bWVudCBmb3IgU2V0Q09uZmlndXJhdGlvbigpIHJlcQorICogNglpQ29uZmlndXJhdGlvbgkJMQkweDAyCUluZGV4IG9mIGNvbmZpZyBzdHJpbmcgZGVzY3JpcHRvcgorICogNwlibUF0dHJpYnV0ZXMJCTEJMHgyMAlDb25maWcgY2hhcmFjdGVyaXN0aWNzIFJlbW90ZSBXYWtldXAKKyAqIDgJTWF4UG93ZXIJCTEJMHgxRQlNYXggcG93ZXIgY29uc3VtcHRpb24KKyAqIAorICogSW50ZXJmYWNlIERlc2NyaXB0b3IKKyAqIAorICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQorICogMAliTGVuZ3RoCQkJMQkweDA5CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNAlJTlRFUkZBQ0UgRGVzY3JpcHRvciBUeXBlCisgKiAyCWJJbnRlcmZhY2VOdW1iZXIJMQkweDAwCU51bWJlciBvZiBpbnRlcmZhY2UKKyAqIDMJYkFsdGVybmF0ZVNldHRpbmcJMQkweDAwCVZhbHVlIHVzZWQgdG8gc2VsZWN0IGFsdGVybmF0ZQorICogNAliTnVtRW5kcG9pbnRzCQkxCTB4MDIJTnVtYmVyIG9mIGVuZHBvaW50cworICogNQliSW50ZXJmYWNlQ2xhc3MJCTEJMHhGRglDbGFzcyBDb2RlCisgKiA2CWJJbnRlcmZhY2VTdWJDbGFzcwkxCTB4RkYJU3ViY2xhc3MgQ29kZQorICogNwliSW50ZXJmYWNlUHJvdG9jb2wJMQkweEZGCVByb3RvY29sIENvZGUKKyAqIDgJaUludGVyZmFjZQkJMQkweDAyCUluZGV4IG9mIGludGVyZmFjZSBzdHJpbmcgZGVzY3JpcHRpb24KKyAqIAorICogSU4gRW5kcG9pbnQgRGVzY3JpcHRvcgorICogCisgKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCisgKiAwCWJMZW5ndGgJCQkxCTB4MDcJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCisgKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDA1CUVORFBPSU5UIGRlc2NyaXB0b3IgdHlwZQorICogMgliRW5kcG9pbnRBZGRyZXNzCTEJMHg4MglBZGRyZXNzIG9mIGVuZHBvaW50CisgKiAzCWJtQXR0cmlidXRlcwkJMQkweDAyCUVuZHBvaW50IGF0dHJpYnV0ZXMgLSBCdWxrCisgKiA0CWJOdW1FbmRwb2ludHMJCTIJMHgwMDQwCW1heGltdW0gcGFja2V0IHNpemUKKyAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKKyAqIAorICogT1VUIEVuZHBvaW50IERlc2NyaXB0b3IKKyAqIAorICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQorICogMAliTGVuZ3RoCQkJMQkweDA3CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNQlFTkRQT0lOVCBkZXNjcmlwdG9yIHR5cGUKKyAqIDIJYkVuZHBvaW50QWRkcmVzcwkxCTB4MDIJQWRkcmVzcyBvZiBlbmRwb2ludAorICogMwlibUF0dHJpYnV0ZXMJCTEJMHgwMglFbmRwb2ludCBhdHRyaWJ1dGVzIC0gQnVsaworICogNAliTnVtRW5kcG9pbnRzCQkyCTB4MDA0MAltYXhpbXVtIHBhY2tldCBzaXplCisgKiA1CWJJbnRlcnZhbAkJMQkweDAwCUludGVydmFsIGZvciBwb2xsaW5nIGVuZHBvaW50CisgKiAgICAgCisgKiBEQVRBIEZPUk1BVAorICogCisgKiBJTiBFbmRwb2ludAorICogCisgKiBUaGUgZGV2aWNlIHJlc2VydmVzIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgZGF0YSBvbiB0aGlzIGVuZHBvaW50IHRvIGNvbnRhaW4gdGhlIGN1cnJlbnQKKyAqIHZhbHVlcyBvZiB0aGUgbW9kZW0gYW5kIGxpbmUgc3RhdHVzIHJlZ2lzdGVycy4gSW4gdGhlIGFic2VuY2Ugb2YgZGF0YSwgdGhlIGRldmljZSAKKyAqIGdlbmVyYXRlcyBhIG1lc3NhZ2UgY29uc2lzdGluZyBvZiB0aGVzZSB0d28gc3RhdHVzIGJ5dGVzIGV2ZXJ5IDQwIG1zCisgKiAKKyAqIEJ5dGUgMDogTW9kZW0gU3RhdHVzCisgKiAKKyAqIE9mZnNldAlEZXNjcmlwdGlvbgorICogQjAJUmVzZXJ2ZWQgLSBtdXN0IGJlIDEKKyAqIEIxCVJlc2VydmVkIC0gbXVzdCBiZSAwCisgKiBCMglSZXNlcnZlZCAtIG11c3QgYmUgMAorICogQjMJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKKyAqIEI0CUNsZWFyIHRvIFNlbmQgKENUUykKKyAqIEI1CURhdGEgU2V0IFJlYWR5IChEU1IpCisgKiBCNglSaW5nIEluZGljYXRvciAoUkkpCisgKiBCNwlSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoUkxTRCkKKyAqIAorICogQnl0ZSAxOiBMaW5lIFN0YXR1cworICogCisgKiBPZmZzZXQJRGVzY3JpcHRpb24KKyAqIEIwCURhdGEgUmVhZHkgKERSKQorICogQjEJT3ZlcnJ1biBFcnJvciAoT0UpCisgKiBCMglQYXJpdHkgRXJyb3IgKFBFKQorICogQjMJRnJhbWluZyBFcnJvciAoRkUpCisgKiBCNAlCcmVhayBJbnRlcnJ1cHQgKEJJKQorICogQjUJVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAoVEhSRSkKKyAqIEI2CVRyYW5zbWl0dGVyIEVtcHR5IChURU1UKQorICogQjcJRXJyb3IgaW4gUkNWUiBGSUZPCisgKiAKKyAqLworI2RlZmluZSBGVERJX1JTMF9DVFMJKDEgPDwgNCkKKyNkZWZpbmUgRlRESV9SUzBfRFNSCSgxIDw8IDUpCisjZGVmaW5lIEZURElfUlMwX1JJCSgxIDw8IDYpCisjZGVmaW5lIEZURElfUlMwX1JMU0QJKDEgPDwgNykKKworI2RlZmluZSBGVERJX1JTX0RSICAxCisjZGVmaW5lIEZURElfUlNfT0UgKDE8PDEpCisjZGVmaW5lIEZURElfUlNfUEUgKDE8PDIpCisjZGVmaW5lIEZURElfUlNfRkUgKDE8PDMpCisjZGVmaW5lIEZURElfUlNfQkkgKDE8PDQpCisjZGVmaW5lIEZURElfUlNfVEhSRSAoMTw8NSkKKyNkZWZpbmUgRlRESV9SU19URU1UICgxPDw2KQorI2RlZmluZSBGVERJX1JTX0ZJRk8gICgxPDw3KQorCisvKgorICogT1VUIEVuZHBvaW50CisgKiAKKyAqIFRoaXMgZGV2aWNlIHJlc2VydmVzIHRoZSBmaXJzdCBieXRlcyBvZiBkYXRhIG9uIHRoaXMgZW5kcG9pbnQgY29udGFpbiB0aGUgbGVuZ3RoCisgKiBhbmQgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBtZXNzYWdlLiBGb3IgdGhlIEZUREkgVVNCIFNlcmlhbCBjb252ZXJ0ZXIgdGhlIHBvcnQgCisgKiBpZGVudGlmaWVyIGlzIGFsd2F5cyAxLgorICogCisgKiBCeXRlIDA6IExpbmUgU3RhdHVzCisgKiAKKyAqIE9mZnNldAlEZXNjcmlwdGlvbgorICogQjAJUmVzZXJ2ZWQgLSBtdXN0IGJlIDEKKyAqIEIxCVJlc2VydmVkIC0gbXVzdCBiZSAwCisgKiBCMi4uNwlMZW5ndGggb2YgbWVzc2FnZSAtIChub3QgaW5jbHVkaW5nIEJ5dGUgMCkKKyAqIAorICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjYxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0wLDAgKzEsMTU0MSBAQAorLyoKKyAqIEdhcm1pbiBHUFMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEhlcm1hbm4gS25laXNzZWwgaGVya25lQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorICoKKyAqIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdAorICogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nYXJtaW4tZ3BzLworICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBiZWVuIGRlcml2ZWQgZnJvbSB2Mi4xIG9mIHRoZSB2aXNvciBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qIHRoZSBtb2RlIHRvIGJlIHNldCB3aGVuIHRoZSBwb3J0IGlzdCBvcGVuZWQgKi8KK3N0YXRpYyBpbnQgaW5pdGlhbF9tb2RlID0gMTsKKworLyogZGVidWcgZmxhZyAqLworc3RhdGljIGludCBkZWJ1ZyA9IDA7CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKyNkZWZpbmUgR0FSTUlOX1ZFTkRPUl9JRCAgICAgICAgICAgICAweDA5MUUKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIFZFUlNJT05fTUFKT1IJMAorI2RlZmluZSBWRVJTSU9OX01JTk9SCTIzCisKKyNkZWZpbmUgX1NUUihzKSAjcworI2RlZmluZSBfRFJJVkVSX1ZFUlNJT04oYSxiKSAidiIgX1NUUihhKSAiLiIgX1NUUihiKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBfRFJJVkVSX1ZFUlNJT04oVkVSU0lPTl9NQUpPUiwgVkVSU0lPTl9NSU5PUikKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiaGVybWFubiBrbmVpc3NlbCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgImdhcm1pbiBncHMgZHJpdmVyIgorCisvKiBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgZHJpdmVyICovCisjZGVmaW5lIEVJTlZQS1QJMTAwMAkvKiBpbnZhbGlkIHBhY2tldCBzdHJ1Y3R1cmUgKi8KKworCisvLyBzaXplIG9mIHRoZSBoZWFkZXIgb2YgYSBwYWNrZXQgdXNpbmcgdGhlIHVzYiBwcm90b2NvbAorI2RlZmluZSBHQVJNSU5fUEtUSERSX0xFTkdUSAkxMgorCisvLyBtYXguIHBvc3NpYmxlIHNpemUgb2YgYSBwYWNrZXQgdXNpbmcgdGhlIHNlcmlhbCBwcm90b2NvbCAKKyNkZWZpbmUgTUFYX1NFUklBTF9QS1RfU0laICgzKzI1NSszKQorCisvLyBtYXguIHBvc3NpYmxlIHNpemUgb2YgYSBwYWNrZXQgd2l0aCB3b3JzdCBjYXNlIHN0dWZmaW5nCisjZGVmaW5lIE1BWF9TRVJJQUxfUEtUX1NJWl9TVFVGRkVEIE1BWF9TRVJJQUxfUEtUX1NJWisyNTYKKworLy8gc2l6ZSBvZiBhIGJ1ZmZlciBhYmxlIHRvIGhvbGQgYSBjb21wbGV0ZSAobm8gc3R1ZmZpbmcpIHBhY2tldAorLy8gKHRoZSBkb2N1bWVudCBwcm90b2NvbCBkb2VzIG5vdCBjb250YWluIHBhY2tldHMgd2l0aCBhIGxhcmdlcgorLy8gIHNpemUsIGJ1dCBpbiB0aGVvcnkgYSBwYWNrZXQgbWF5IGJlIDY0aysxMiBieXRlcyAtIGlmIGluCisvLyAgbGF0ZXIgcHJvdG9jb2wgdmVyc2lvbnMgbGFyZ2VyIHBhY2tldCBzaXplcyBvY2N1ciwgdGhpcyB2YWx1ZQorLy8gIHNob3VsZCBiZSBpbmNyZWFzZWQgYWNjb3JkaW5nbHksIHNvIHRoZSBpbnB1dCBidWZmZXIgaXMgYWx3YXlzIAorLy8gIGxhcmdlIGVub3VnaCB0aGUgc3RvcmUgYSBjb21wbGV0ZSBwYWNrZXQgaW5jbHVzaXZlIGhlYWRlcikKKyNkZWZpbmUgR1BTX0lOX0JVRlNJWiAgKEdBUk1JTl9QS1RIRFJfTEVOR1RIK01BWF9TRVJJQUxfUEtUX1NJWikgCisKKy8vIHNpemUgb2YgYSBidWZmZXIgYWJsZSB0byBob2xkIGEgY29tcGxldGUgKGluY2wuIHN0dWZmaW5nKSBwYWNrZXQKKyNkZWZpbmUgR1BTX09VVF9CVUZTSVogKEdBUk1JTl9QS1RIRFJfTEVOR1RIK01BWF9TRVJJQUxfUEtUX1NJWl9TVFVGRkVEKSAKKworLy8gd2hlcmUgdG8gcGxhY2UgdGhlIHBhY2tldCBpZCBvZiBhIHNlcmlhbCBwYWNrZXQsIHNvIHdlIGNhbgorLy8gcHJlcGVuZCB0aGUgdXNiLXBhY2tldCBoZWFkZXIgd2l0aG91dCB0aGUgbmVlZCB0byBtb3ZlIHRoZQorLy8gcGFja2V0cyBkYXRhCisjZGVmaW5lIEdTUF9JTklUSUFMX09GRlNFVCAoR0FSTUlOX1BLVEhEUl9MRU5HVEgtMikKKworLy8gbWF4LiBzaXplIG9mIGluY29taW5nIHByaXZhdGUgcGFja2V0cyAoaGVhZGVyKzEgcGFyYW0pCisjZGVmaW5lIFBSSVZQS1RTSVogKEdBUk1JTl9QS1RIRFJfTEVOR1RIKzQpCisKKyNkZWZpbmUgR0FSTUlOX0xBWUVSSURfVFJBTlNQT1JUICAwCisjZGVmaW5lIEdBUk1JTl9MQVlFUklEX0FQUEwgICAgICAyMAorLy8gb3VyIG93biBsYXllci1pZCB0byB1c2UgZm9yIHNvbWUgY29udHJvbCBtZWNoYW5pc21zCisjZGVmaW5lIEdBUk1JTl9MQVlFUklEX1BSSVZBVEUJMHgwMTEwNkU0QgorCisjZGVmaW5lIEdBUk1JTl9QS1RJRF9QVlRfREFUQQk1MQorI2RlZmluZSBHQVJNSU5fUEtUSURfTDAwMV9DT01NQU5EX0RBVEEgMTAKKworI2RlZmluZSBDTU5EX0FCT1JUX1RSQU5TRkVSIDAKKworLy8gcGFja2V0IGlkcyB1c2VkIGluIHByaXZhdGUgbGF5ZXIKKyNkZWZpbmUgUFJJVl9QS1RJRF9TRVRfREVCVUcJMQorI2RlZmluZSBQUklWX1BLVElEX1NFVF9NT0RFCTIKKyNkZWZpbmUgUFJJVl9QS1RJRF9JTkZPX1JFUQkzCisjZGVmaW5lIFBSSVZfUEtUSURfSU5GT19SRVNQCTQKKyNkZWZpbmUgUFJJVl9QS1RJRF9SRVNFVF9SRVEJNQorI2RlZmluZSBQUklWX1BLVElEX1NFVF9ERUZfTU9ERQk2CisKKworI2RlZmluZSBFVFgJMHgwMworI2RlZmluZSBETEUJMHgxMAorI2RlZmluZSBBQ0sJMHgwNgorI2RlZmluZSBOQUsJMHgxNQorCisvKiBzdHJ1Y3R1cmUgdXNlZCB0byBxdWV1ZSBpbmNvbWluZyBwYWNrZXRzICovCitzdHJ1Y3QgZ2FybWluX3BhY2tldCB7CisJc3RydWN0IGxpc3RfaGVhZCAgbGlzdDsKKwlpbnQgICAgICAgICAgICAgICBzZXE7CisJaW50ICAgICAgICAgICAgICAgc2l6ZTsgLy8gdGhlIHJlYWwgc2l6ZSBvZiB0aGUgZGF0YSBhcnJheSwgYWx3YXlzID4gMAorCV9fdTggICAgICAgICAgICAgIGRhdGFbMV07Cit9OworCisvKiBzdHJ1Y3R1cmUgdXNlZCB0byBrZWVwIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkcml2ZXIgKi8KK3N0cnVjdCBnYXJtaW5fZGF0YSB7CisJX191OCAgIHN0YXRlOworCV9fdTE2ICBmbGFnczsKKwlfX3U4ICAgbW9kZTsKKwlfX3U4ICAgaWdub3JlUGt0czsKKwlfX3U4ICAgY291bnQ7CisJX191OCAgIHBrdF9pZDsKKwlfX3UzMiAgc2VyaWFsX251bTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCAgICBzZXFfY291bnRlcjsKKwlpbnQgICAgaW5zaXplOworCWludCAgICBvdXRzaXplOworCV9fdTggICBpbmJ1ZmZlciBbR1BTX0lOX0JVRlNJWl07ICAvKiB0dHkgLT4gdXNiICovCisJX191OCAgIG91dGJ1ZmZlcltHUFNfT1VUX0JVRlNJWl07IC8qIHVzYiAtPiB0dHkgKi8KKwlfX3U4ICAgcHJpdnBrdFs0KjZdOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBrdGxpc3Q7Cit9OworCisKKyNkZWZpbmUgU1RBVEVfTkVXICAgICAgICAgICAgMAorI2RlZmluZSBTVEFURV9JTklUSUFMX0RFTEFZICAxCisjZGVmaW5lIFNUQVRFX1RJTUVPVVQgICAgICAgIDIKKyNkZWZpbmUgU1RBVEVfU0VTU0lPTl9SRVExICAgMworI2RlZmluZSBTVEFURV9TRVNTSU9OX1JFUTIgICA0CisjZGVmaW5lIFNUQVRFX0FDVElWRSAgICAgICAgIDUKKworI2RlZmluZSBTVEFURV9SRVNFVAkgICAgIDgKKyNkZWZpbmUgU1RBVEVfRElTQ09OTkVDVEVEICAgOQorI2RlZmluZSBTVEFURV9XQUlUX1RUWV9BQ0sgIDEwCisjZGVmaW5lIFNUQVRFX0dTUF9XQUlUX0RBVEEgMTEKKworI2RlZmluZSBNT0RFX05BVElWRSAgICAgICAgICAwCisjZGVmaW5lIE1PREVfR0FSTUlOX1NFUklBTCAgIDEKKworLy8gRmxhZ3MgdXNlZCBpbiBnYXJtaW5fZGF0YS5mbGFnczoKKyNkZWZpbmUgRkxBR1NfU0VTU0lPTl9SRVBMWV9NQVNLICAweDAwQzAKKyNkZWZpbmUgRkxBR1NfU0VTU0lPTl9SRVBMWTFfU0VFTiAweDAwODAKKyNkZWZpbmUgRkxBR1NfU0VTU0lPTl9SRVBMWTJfU0VFTiAweDAwNDAKKyNkZWZpbmUgRkxBR1NfQlVMS19JTl9BQ1RJVkUgICAgICAweDAwMjAKKyNkZWZpbmUgRkxBR1NfVEhST1RUTEVEICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQ0xFQVJfSEFMVF9SRVFVSVJFRCAgICAgICAweDAwMDEKKworI2RlZmluZSBGTEFHU19RVUVVSU5HICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBGTEFHU19BUFBfUkVTUF9TRUVOICAgICAgIDB4MDIwMAorI2RlZmluZSBGTEFHU19BUFBfUkVRX1NFRU4gICAgICAgIDB4MDQwMAorI2RlZmluZSBGTEFHU19EUk9QX0RBVEEgICAgICAgICAgIDB4MDgwMAorCisjZGVmaW5lIEZMQUdTX0dTUF9TS0lQICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEZMQUdTX0dTUF9ETEVTRUVOICAgICAgICAgMHgyMDAwCisKKworCisKKworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBnc3BfbmV4dF9wYWNrZXQoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCk7CitzdGF0aWMgaW50ICBnYXJtaW5fd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CisKKy8qIHNvbWUgc3BlY2lhbCBwYWNrZXRzIHRvIGJlIHNlbmQgb3IgcmVjZWl2ZWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUVtdCisJPSB7IDAsIDAsIDAsIDAsICA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEyW10KKwk9IHsgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUExZW10KKwk9IHsgMCwgMCwgMCwgMCwgIDYsIDAsIDAsIDAsIDQsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TRVNTSU9OX0FDVElWRV9SRVBMWVtdCisJPSB7IDAsIDAsIDAsIDAsIDE3LCAwLCAwLCAwLCA0LCAwLCAwLCAwLCAwLCAxNiwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX0JVTEtfSU5fQVZBSUxfUkVQTFlbXQorCT0geyAwLCAwLCAwLCAwLCAgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX0FQUF9MQVlFUl9SRVBMWVtdCisJPSB7IDB4MTQsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVEFSVF9QVlRfUkVRW10KKwk9IHsgMjAsIDAsIDAsIDAsICAxMCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgNDksIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVE9QX1BWVF9SRVFbXQorCT0geyAyMCwgMCwgMCwgMCwgIDEwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCA1MCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRW10KKwk9IHsgMjAsIDAsIDAsIDAsICAxMCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRX1YyW10KKwk9IHsgMjAsIDAsIDAsIDAsICAxMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgUFJJVkFURV9SRVFbXQorCT0gICAgeyAweDRCLCAweDZFLCAweDEwLCAweDAxLCAgMHhGRiwgMCwgMCwgMCwgMHhGRiwgMCwgMCwgMCB9OworCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCS8qIHRoZSBzYW1lIGRldmljZSBpZCBzZWVtcyB0byBiZSB1c2VkIGJ5IGFsbCB1c2IgZW5hYmxlZCBncHMgZGV2aWNlcyAqLworCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCAzICkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdhcm1pbl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImdhcm1pbl9ncHMiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisKK3N0YXRpYyBpbmxpbmUgaW50IG5vUmVzcG9uc2VGcm9tQXBwTGF5ZXIoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCkKK3sKKwlyZXR1cm4gKChnYXJtaW5fZGF0YV9wLT5mbGFncworCQkJCSYgKEZMQUdTX0FQUF9SRVFfU0VFTnxGTEFHU19BUFBfUkVTUF9TRUVOKSkKKwkgICAgICAgID09IEZMQUdTX0FQUF9SRVFfU0VFTik7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgZ2V0TGF5ZXJJZChjb25zdCBfX3U4ICp1c2JQYWNrZXQpCit7CisJcmV0dXJuIF9fbGUzMl90b19jcHVwKChfX2xlMzIgKikodXNiUGFja2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldFBhY2tldElkKGNvbnN0IF9fdTggKnVzYlBhY2tldCkKK3sKKwlyZXR1cm4gX19sZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSh1c2JQYWNrZXQrNCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXREYXRhTGVuZ3RoKGNvbnN0IF9fdTggKnVzYlBhY2tldCkKK3sKKwlyZXR1cm4gX19sZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSh1c2JQYWNrZXQrOCkpOworfQorCisKKy8qCisgKiBjaGVjayBpZiB0aGUgdXNiLXBhY2tldCBpbiBidWYgY29udGFpbnMgYW4gYWJvcnQtdHJhbnNmZXIgY29tbWFuZC4KKyAqIChpZiB5ZXMsIGFsbCBxdWV1ZWQgZGF0YSB3aWxsIGJlIGRyb3BwZWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzQWJvcnRUcmZDbW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlpZiAoMCA9PSBtZW1jbXAoYnVmLCBHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVEsIAorCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRKSkgfHwKKwkgICAgMCA9PSBtZW1jbXAoYnVmLCBHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVFfVjIsIAorCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRX1YyKSkpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCBzZW5kX3RvX3R0eShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGgpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlpbnQgaTsKKworCWlmICh0dHkgJiYgYWN0dWFsX2xlbmd0aCkgeworCisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgCisJCQkJCV9fRlVOQ1RJT05fXywgYWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLAorCQkJICAgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MKKwkJCSAgIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBhY2tldCBxdWV1ZSBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHF1ZXVlIGEgcmVjZWl2ZWQgKHVzYi0pcGFja2V0IGZvciBsYXRlciBwcm9jZXNzaW5nCisgKi8KK3N0YXRpYyBpbnQgcGt0X2FkZChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbmd0aCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnYXJtaW5fcGFja2V0ICpwa3Q7CisKKwkvKiBwcm9jZXNzIG9ubHkgcGFja2V0cyBjb250YWluZyBkYXRhIC4uLiAqLworCWlmIChkYXRhX2xlbmd0aCkgeworCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19RVUVVSU5HOworCQlwa3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FybWluX3BhY2tldCkrZGF0YV9sZW5ndGgsCisJCSAgICAgICAgICAgICAgR0ZQX0FUT01JQyk7CisJCWlmIChwa3QgPT0gTlVMTCkgeworCQkJZGV2X2VycigmZ2FybWluX2RhdGFfcC0+cG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwa3QtPnNpemUgPSBkYXRhX2xlbmd0aDsKKwkJbWVtY3B5KHBrdC0+ZGF0YSwgZGF0YSwgZGF0YV9sZW5ndGgpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IGxpc3RfZW1wdHkoJmdhcm1pbl9kYXRhX3AtPnBrdGxpc3QpOworCQlwa3QtPnNlcSA9IGdhcm1pbl9kYXRhX3AtPnNlcV9jb3VudGVyKys7CisJCWxpc3RfYWRkX3RhaWwoJnBrdC0+bGlzdCwgJmdhcm1pbl9kYXRhX3AtPnBrdGxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisKKwkJLyogaW4gc2VyaWFsIG1vZGUsIGlmIHNvbWVvbmUgaXMgd2FpdGluZyBmb3IgZGF0YSBmcm9tCisJCSAgIHRoZSBkZXZpY2UsIGljb252ZXJ0IGFuZCBzZW5kIHRoZSBuZXh0IHBhY2tldCB0byB0dHkuICovCisJCWlmIChyZXN1bHQgJiYgKGdhcm1pbl9kYXRhX3AtPnN0YXRlID09IFNUQVRFX0dTUF9XQUlUX0RBVEEpKSB7CisJCQlnc3BfbmV4dF9wYWNrZXQoZ2FybWluX2RhdGFfcCk7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBnZXQgdGhlIG5leHQgcGVuZGluZyBwYWNrZXQgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcGt0X3BvcChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnJlc3VsdCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCkpIHsKKwkJcmVzdWx0ID0gKHN0cnVjdCBnYXJtaW5fcGFja2V0ICopZ2FybWluX2RhdGFfcC0+cGt0bGlzdC5uZXh0OworCQlsaXN0X2RlbCgmcmVzdWx0LT5saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogZnJlZSB1cCBhbGwgcXVldWVkIGRhdGEgKi8KK3N0YXRpYyB2b2lkIHBrdF9jbGVhcihzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnJlc3VsdCA9IE5VTEw7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZnYXJtaW5fZGF0YV9wLT5wa3RsaXN0KSkgeworCQlyZXN1bHQgPSAoc3RydWN0IGdhcm1pbl9wYWNrZXQgKilnYXJtaW5fZGF0YV9wLT5wa3RsaXN0Lm5leHQ7CisJCWxpc3RfZGVsKCZyZXN1bHQtPmxpc3QpOworCQlrZnJlZShyZXN1bHQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2FybWluIHNlcmlhbCBwcm90b2NvbCBoYW5kbGluZyBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc2VuZCBhbiBhY2sgcGFja2V0IGJhY2sgdG8gdGhlIHR0eSAqLworc3RhdGljIGludCBnc3Bfc2VuZF9hY2soc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwgX191OCBwa3RfaWQpCit7CisJX191OCBwa3RbMTBdOworICAgICAgICBfX3U4IGNrc3VtID0gMDsKKyAgICAgICAgX191OCAqcHRyID0gcGt0OworICAgICAgICB1bnNpZ25lZCAgbCA9IDA7CisKKwlkYmcoIiVzIC0gcGt0LWlkOiAweCVYLiIsIF9fRlVOQ1RJT05fXywgMHhGRiAmIHBrdF9pZCk7CisKKwkqcHRyKysgPSBETEU7CisJKnB0cisrID0gQUNLOworCWNrc3VtICs9IEFDSzsKKworCSpwdHIrKyA9IDI7CisJY2tzdW0gKz0gMjsKKworCSpwdHIrKyA9IHBrdF9pZDsKKwlja3N1bSArPSBwa3RfaWQ7CisKKwlpZiAocGt0X2lkID09IERMRSkgeworCQkqcHRyKysgPSBETEU7CisJfQorCisJKnB0cisrID0gMDsKKwkqcHRyKysgPSAweEZGICYgKC1ja3N1bSk7CisJKnB0cisrID0gRExFOworCSpwdHIrKyA9IEVUWDsKKworCWwgPSBwdHItcGt0OworCisJc2VuZF90b190dHkoZ2FybWluX2RhdGFfcC0+cG9ydCwgcGt0LCBsKTsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qCisgKiBjYWxsZWQgZm9yIGEgY29tcGxldGUgcGFja2V0IHJlY2VpdmVkIGZyb20gdHR5IGxheWVyCisgKgorICogdGhlIGNvbXBsZXRlIHBhY2tldCAocGt6aWQgLi4uIGNrc3VtKSBpcyBpbiBnYXJtaW5fZGF0YV9wLT5pbmJ1ZiBzdGFydGluZworICogYXQgR1NQX0lOSVRJQUxfT0ZGU0VULgorICoKKyAqIGNvdW50IC0gbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIgaW5jbHVkaW5nIHNwYWNlIHJlc2VydmVkIGZvcgorICogICAgICAgICB0aGUgdXNiIGhlYWRlcjogR1NQX0lOSVRJQUxfT0ZGU0VUICsgbnVtYmVyIG9mIGJ5dGVzIGluIHBhY2tldCAKKyAqICAgICAgICAgKGluY2x1ZGluZyBwa3QtaWQsIGRhdGEtbGVuZ3RoIGEuIGNrc3VtKQorICovCitzdGF0aWMgaW50IGdzcF9yZWNfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsIGludCBjb3VudCkKK3sKKwljb25zdCBfX3U4KiByZWNwa3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcitHU1BfSU5JVElBTF9PRkZTRVQ7CisgICAgICAgIF9fbGUzMiAqdXNiZGF0YSA9IChfX2xlMzIgKikgZ2FybWluX2RhdGFfcC0+aW5idWZmZXI7CisKKwlpbnQgY2tzdW0gPSAwOworCWludCBuID0gMDsKKwlpbnQgcGt0aWQgPSByZWNwa3RbMF07CisJaW50IHNpemUgPSByZWNwa3RbMV07CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZnYXJtaW5fZGF0YV9wLT5wb3J0LT5kZXYsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBjb3VudC1HU1BfSU5JVElBTF9PRkZTRVQsIHJlY3BrdCk7CisKKwlpZiAoc2l6ZSAhPSAoY291bnQtR1NQX0lOSVRJQUxfT0ZGU0VULTMpKSB7CisJCWRiZygiJXMgLSBpbnZhbGlkIHNpemUsIGV4cGVjdGVkICVkIGJ5dGVzLCBnb3QgJWQiLAorCQkJX19GVU5DVElPTl9fLCBzaXplLCAoY291bnQtR1NQX0lOSVRJQUxfT0ZGU0VULTMpKTsKKwkJcmV0dXJuIC1FSU5WUEtUOworCX0KKworCWNrc3VtICs9ICpyZWNwa3QrKzsKKwlja3N1bSArPSAqcmVjcGt0Kys7CisKKwkvLyBzYW5pdHkgY2hlY2ssIHJlbW92ZSBhZnRlciB0ZXN0IC4uLgorCWlmICgoX191OCopJih1c2JkYXRhWzNdKSAhPSByZWNwa3QpIHsKKwkJZGJnKCIlcyAtIHB0ciBtaXNtYXRjaCAlcCAtICVwIiwKKwkJCV9fRlVOQ1RJT05fXywgJih1c2JkYXRhWzRdKSwgcmVjcGt0KTsKKwkJcmV0dXJuIC1FSU5WUEtUOworCX0KKworCXdoaWxlIChuIDwgc2l6ZSkgeworCQlja3N1bSArPSAqcmVjcGt0Kys7CisJCW4rKzsKKwl9CisKKyAgICAgICBpZiAoKDB4ZmYgJiAoY2tzdW0gKyAqcmVjcGt0KSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGRiZygiJXMgLSBpbnZhbGlkIGNoZWNrc3VtLCBleHBlY3RlZCAlMDJ4LCBnb3QgJTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIDB4ZmYgJiAtY2tzdW0sIDB4ZmYgJiAqcmVjcGt0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZQS1Q7CisgICAgICAgIH0KKworCXVzYmRhdGFbMF0gPSBfX2NwdV90b19sZTMyKEdBUk1JTl9MQVlFUklEX0FQUEwpOworCXVzYmRhdGFbMV0gPSBfX2NwdV90b19sZTMyKHBrdGlkKTsKKwl1c2JkYXRhWzJdID0gX19jcHVfdG9fbGUzMihzaXplKTsKKworCWdhcm1pbl93cml0ZV9idWxrIChnYXJtaW5fZGF0YV9wLT5wb3J0LCBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlciwKKwkJCSAgIEdBUk1JTl9QS1RIRFJfTEVOR1RIK3NpemUpOworCisJLyogaWYgdGhpcyB3YXMgYW4gYWJvcnQtdHJhbnNmZXIgY29tbWFuZCwgZmx1c2ggYWxsCisJICAgcXVldWVkIGRhdGEuICovCisJaWYgKGlzQWJvcnRUcmZDbW5kKGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyKSkgeworCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19EUk9QX0RBVEE7CisJCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworCisvKgorICogQ2FsbGVkIGZvciBkYXRhIHJlY2VpdmVkIGZyb20gdHR5CisgKgorICogYnVmIGNvbnRhaW5zIHRoZSBkYXRhIHJlYWQsIGl0IG1heSBzcGFuIG1vcmUgdGhhbiBvbmUgcGFja2V0IG9yIGV2ZW4KKyAqIGluY29tcGxldGUgcGFja2V0cworICoKKyAqIGlucHV0IHJlY29yZCBzaG91bGQgYmUgYSBzZXJpYWwtcmVjb3JkLCBidXQgaXQgbWF5IG5vdCBiZSBjb21wbGV0ZS4KKyAqIENvcHkgaXQgaW50byBvdXIgbG9jYWwgYnVmZmVyLCB1bnRpbCBhbiBldHggaXMgc2VlbiAob3IgYW4gZXJyb3IKKyAqIG9jY3VycykuCisgKiBPbmNlIHRoZSByZWNvcmQgaXMgY29tcGxldGUsIGNvbnZlcnQgaW50byBhIHVzYiBwYWNrZXQgYW5kIHNlbmQgaXQKKyAqIHRvIHRoZSBidWxrIHBpcGUsIHNlbmQgYW4gYWNrIGJhY2sgdG8gdGhlIHR0eS4KKyAqCisgKiBJZiB0aGUgaW5wdXQgaXMgYW4gYWNrLCBqdXN0IHNlbmQgdGhlIGxhc3QgcXVldWVkIHBhY2tldCB0byB0aGUKKyAqIHR0eSBsYXllci4KKyAqCisgKiBpZiB0aGUgaW5wdXQgaXMgYW4gYWJvcnQgY29tbWFuZCwgZHJvcCBhbGwgcXVldWVkIGRhdGEuCisgKi8KKworc3RhdGljIGludCBnc3BfcmVjZWl2ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgb2ZmcyA9IDA7CisJaW50IGFja19vcl9uYWtfc2VlbiA9IDA7CisJaW50IGkgPSAwOworCV9fdTggKmRlc3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcjsKKwlpbnQgc2l6ZSA9IGdhcm1pbl9kYXRhX3AtPmluc2l6ZTsKKwkvLyBkbGVTZWVuOiBzZXQgaWYgbGFzdCBieXRlIHJlYWQgd2FzIGEgRExFCisJaW50IGRsZVNlZW4gPSBnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0dTUF9ETEVTRUVOOworCS8vIHNraXA6IGlmIHNldCwgc2tpcCBpbmNvbWluZyBkYXRhIHVudGlsIHBvc3NpYmxlIHN0YXJ0IG9mCisJLy8gICAgICAgbmV3IHBhY2tldAorCWludCBza2lwID0gZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19HU1BfU0tJUDsKKwlfX3U4IGRhdGE7CisKKwlkYmcoIiVzIC0gZGxlPSVkIHNraXA9JWQgc2l6ZT0lZCBjb3VudD0lZCIsCisJCV9fRlVOQ1RJT05fXywgZGxlU2Vlbiwgc2tpcCwgc2l6ZSwgY291bnQpOworCisJaWYgKHNpemUgPT0gMCkgeworCQlzaXplID0gR1NQX0lOSVRJQUxfT0ZGU0VUOworCX0KKworCXdoaWxlIChvZmZzIDwgY291bnQpIHsKKworCQlkYXRhID0gKihidWYrb2Zmcyk7CisJCW9mZnMgKys7CisKKwkJaWYgKGRhdGEgPT0gRExFKSB7CisJCQlpZiAoc2tpcCkgeyAvKiBzdGFydCBvZiBhIG5ldyBwa3QgKi8KKwkJCQlza2lwID0gMDsKKwkJCQlzaXplID0gR1NQX0lOSVRJQUxfT0ZGU0VUOworCQkJCWRsZVNlZW4gPSAxOworCQkJfSBlbHNlIGlmIChkbGVTZWVuKSB7CisJCQkJZGVzdFtzaXplKytdID0gZGF0YTsKKwkJCQlkbGVTZWVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJZGxlU2VlbiA9IDE7CisJCQl9CisJCX0gZWxzZSBpZiAoZGF0YSA9PSBFVFgpIHsKKwkJCWlmIChkbGVTZWVuKSB7CisJCQkJLyogcGFja2V0IGNvbXBsZXRlICovCisKKwkJCQlkYXRhID0gZGVzdFtHU1BfSU5JVElBTF9PRkZTRVRdOworCisJCQkJaWYgKGRhdGEgPT0gQUNLKSB7CisJCQkJCWFja19vcl9uYWtfc2VlbiA9IEFDSzsKKwkJCQkJZGJnKCJBQ0sgcGFja2V0IGNvbXBsZXRlLiIpOworCQkJCX0gZWxzZSBpZiAoZGF0YSA9PSBOQUspIHsKKwkJCQkJYWNrX29yX25ha19zZWVuID0gTkFLOworCQkJCQlkYmcoIk5BSyBwYWNrZXQgY29tcGxldGUuIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGJnKCJwYWNrZXQgY29tcGxldGUgIgorCQkJCQkJICAgICAgICAiLSBpZD0weCVYLiIsCisJCQkJCQkgICAgICAgIDB4RkYgJiBkYXRhKTsKKwkJCQkJZ3NwX3JlY19wYWNrZXQoZ2FybWluX2RhdGFfcCwgc2l6ZSk7CisJCQkJfQorCisJCQkJc2tpcCA9IDE7CisJCQkJc2l6ZSA9IEdTUF9JTklUSUFMX09GRlNFVDsKKwkJCQlkbGVTZWVuID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJZGVzdFtzaXplKytdID0gZGF0YTsKKwkJCX0KKwkJfSBlbHNlIGlmICghc2tpcCkgeworCisJCQlpZiAoZGxlU2VlbikgeworCQkJCWRiZygibm9uLW1hc2tlZCBETEUgYXQgJWQgLSByZXN0YXJ0aW5nIiwgaSk7CisJCQkJc2l6ZSA9IEdTUF9JTklUSUFMX09GRlNFVDsKKwkJCQlkbGVTZWVuID0gMDsKKwkJCX0KKworCQkJZGVzdFtzaXplKytdID0gZGF0YTsKKwkJfQorCisJCWlmIChzaXplID49IEdQU19JTl9CVUZTSVopIHsKKwkJCWRiZygiJXMgLSBwYWNrZXQgdG9vIGxhcmdlLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlza2lwID0gMTsKKwkJCXNpemUgPSBHU1BfSU5JVElBTF9PRkZTRVQ7CisJCQlkbGVTZWVuID0gMDsKKwkJfQorCX0KKworCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSA9IHNpemU7CisKKwkvLyBjb3B5IGZsYWdzIGJhY2sgdG8gc3RydWN0dXJlCisJaWYgKHNraXApCisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0dTUF9TS0lQOworCWVsc2UKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX0dTUF9TS0lQOworCisJaWYgKGRsZVNlZW4pCisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0dTUF9ETEVTRUVOOworCWVsc2UKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX0dTUF9ETEVTRUVOOworCisJaWYgKGFja19vcl9uYWtfc2VlbikgeworCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX0dTUF9XQUlUX0RBVEE7CisJCWdzcF9uZXh0X3BhY2tldChnYXJtaW5fZGF0YV9wKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworCisKKy8qCisgKiBTZW5kcyBhIHVzYiBwYWNrZXQgdG8gdGhlIHR0eQorICoKKyAqIEFzc3VtZXMsIHRoYXQgYWxsIHBhY2thZ2VzIGFuZCBhdCBhbiB1c2ItcGFja2V0IGJvdW5kYXJ5LgorICoKKyAqIHJldHVybiA8MCBvbiBlcnJvciwgMCBpZiBwYWNrZXQgaXMgaW5jb21wbGV0ZSBvciA+IDAgaWYgcGFja2V0IHdhcyBzZW50CisgKi8KK3N0YXRpYyBpbnQgZ3NwX3NlbmQoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYzsKKwl1bnNpZ25lZCBjaGFyICpkc3Q7CisJaW50IHBrdGlkID0gMDsKKwlpbnQgZGF0YWxlbiA9IDA7CisJaW50IGNrc3VtID0gMDsKKwlpbnQgaT0wOworCWludCBrOworCisJZGJnKCIlcyAtIHN0YXRlICVkIC0gJWQgYnl0ZXMuIiwgX19GVU5DVElPTl9fLAorCSAgICAgICAgIGdhcm1pbl9kYXRhX3AtPnN0YXRlLCBjb3VudCk7CisKKwlrID0gZ2FybWluX2RhdGFfcC0+b3V0c2l6ZTsKKwlpZiAoKGsrY291bnQpID4gR1BTX09VVF9CVUZTSVopIHsKKwkJZGJnKCJwYWNrZXQgdG9vIGxhcmdlIik7CisJCWdhcm1pbl9kYXRhX3AtPm91dHNpemUgPSAwOworCQlyZXR1cm4gLTQ7CisJfQorCisJbWVtY3B5KGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcitrLCBidWYsIGNvdW50KTsKKwlrICs9IGNvdW50OworCWdhcm1pbl9kYXRhX3AtPm91dHNpemUgPSBrOworCisJaWYgKGsgPj0gR0FSTUlOX1BLVEhEUl9MRU5HVEgpIHsKKwkJcGt0aWQgID0gZ2V0UGFja2V0SWQoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKTsKKwkJZGF0YWxlbj0gZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpOworCQlpID0gR0FSTUlOX1BLVEhEUl9MRU5HVEggKyBkYXRhbGVuOworCQlpZiAoayA8IGkpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwlkYmcoIiVzIC0gJWQgYnl0ZXMgaW4gYnVmZmVyLCAlZCBieXRlcyBpbiBwa3QuIiwgX19GVU5DVElPTl9fLAorCSAgICAgICAgIGssIGkpOworCisJLyogZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyIG5vdyBjb250YWlucyBhIGNvbXBsZXRlIHBhY2tldCAqLworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZ2FybWluX2RhdGFfcC0+cG9ydC0+ZGV2LAorCQkgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBrLCBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpOworCisJZ2FybWluX2RhdGFfcC0+b3V0c2l6ZSA9IDA7CisKKwlpZiAoR0FSTUlOX0xBWUVSSURfQVBQTCAhPSBnZXRMYXllcklkKGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcikpIHsKKwkJZGJnKCJub3QgYW4gYXBwbGljYXRpb24gcGFja2V0ICglZCkiLCAKKwkJICAgICAgICBnZXRMYXllcklkKGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcikpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHBrdGlkID4gMjU1KSB7CisJCWRiZygicGFja2V0LWlkICVkIHRvbyBsYXJnZSIsIHBrdGlkKTsKKwkJcmV0dXJuIC0yOworCX0KKworCWlmIChkYXRhbGVuID4gMjU1KSB7CisJCWRiZygicGFja2V0LXNpemUgJWQgdG9vIGxhcmdlIiwgZGF0YWxlbik7CisJCXJldHVybiAtMzsKKwl9CisKKwkvKiB0aGUgc2VyaWFsIHByb3RvY29sIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIHBhY2tldCAqLworCisJayA9IDA7CisJc3JjID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK0dBUk1JTl9QS1RIRFJfTEVOR1RIOworCWZvciAoaT0wOyBpPGRhdGFsZW47IGkrKykgeworCQlpZiAoKnNyYysrID09IERMRSkKKwkJCWsrKzsKKwl9CisKKwlzcmMgPSBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIrR0FSTUlOX1BLVEhEUl9MRU5HVEg7CisJaWYgKGsgPiAoR0FSTUlOX1BLVEhEUl9MRU5HVEgtMikpIHsKKwkJLyogY2FuJ3QgYWRkIHN0dWZmaW5nIERMRXMgaW4gcGxhY2UsIG1vdmUgZGF0YSB0byBlbmQgCisgICAgICAgICAgICAgICAgICAgb2YgYnVmZmVyIC4uLiAqLworCQlkc3QgPSBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIrR1BTX09VVF9CVUZTSVotZGF0YWxlbjsKKwkJbWVtY3B5KGRzdCwgc3JjLCBkYXRhbGVuKTsKKwkJc3JjID0gZHN0OworCX0KKworCWRzdCA9IGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcjsKKworCSpkc3QrKyA9IERMRTsKKwkqZHN0KysgPSBwa3RpZDsKKwlja3N1bSArPSBwa3RpZDsKKwkqZHN0KysgPSBkYXRhbGVuOworCWNrc3VtICs9IGRhdGFsZW47CisJaWYgKGRhdGFsZW4gPT0gRExFKQorCQkqZHN0KysgPSBETEU7CisKKwlmb3IgKGk9MDsgaTxkYXRhbGVuOyBpKyspIHsKKwkJX191OCBjID0gKnNyYysrOworCQkqZHN0KysgPSBjOworCQlja3N1bSArPSBjOworCQlpZiAoYyA9PSBETEUpCisJCQkqZHN0KysgPSBETEU7CisJfQorCQkKKwlja3N1bSA9IDB4RkYgJiAtY2tzdW07CisJKmRzdCsrID0gY2tzdW07CisJaWYgKGNrc3VtID09IERMRSkKKwkJKmRzdCsrID0gRExFOworCSpkc3QrKyA9IERMRTsKKwkqZHN0KysgPSBFVFg7CisKKwlpID0gZHN0LWdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcjsKKworCXNlbmRfdG9fdHR5KGdhcm1pbl9kYXRhX3AtPnBvcnQsIGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlciwgaSk7CisKKwlnYXJtaW5fZGF0YV9wLT5wa3RfaWQgPSBwa3RpZDsKKwlnYXJtaW5fZGF0YV9wLT5zdGF0ZSAgPSBTVEFURV9XQUlUX1RUWV9BQ0s7CisKKwlyZXR1cm4gaTsKK30KKworCisKKworCisvKgorICogUHJvY2VzcyB0aGUgbmV4dCBwZW5kaW5nIGRhdGEgcGFja2V0IC0gaWYgdGhlcmUgaXMgb25lCisgKi8KK3N0YXRpYyB2b2lkIGdzcF9uZXh0X3BhY2tldChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQoreworCXN0cnVjdCBnYXJtaW5fcGFja2V0ICpwa3QgPSBOVUxMOworCisJd2hpbGUgKChwa3QgPSBwa3RfcG9wKGdhcm1pbl9kYXRhX3ApKSAhPSBOVUxMKSB7CisJCWRiZygiJXMgLSBuZXh0IHBrdDogJWQiLCBfX0ZVTkNUSU9OX18sIHBrdC0+c2VxKTsKKwkJaWYgKGdzcF9zZW5kKGdhcm1pbl9kYXRhX3AsIHBrdC0+ZGF0YSwgcGt0LT5zaXplKSA+IDApIHsKKwkJCWtmcmVlKHBrdCk7CisJCQlyZXR1cm47CisJCX0KKwkJa2ZyZWUocGt0KTsKKwl9Cit9CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdhcm1pbiBuYXRpdmUgbW9kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKgorICogQ2FsbGVkIGZvciBkYXRhIHJlY2VpdmVkIGZyb20gdHR5CisgKgorICogVGhlIGlucHV0IGRhdGEgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gZ2FybWluIHVzYi1wYWNrZXQgZm9ybWF0LgorICoKKyAqIGJ1ZiBjb250YWlucyB0aGUgZGF0YSByZWFkLCBpdCBtYXkgc3BhbiBtb3JlIHRoYW4gb25lIHBhY2tldAorICogb3IgZXZlbiBpbmNvbXBsZXRlIHBhY2tldHMKKyAqLworc3RhdGljIGludCBuYXRfcmVjZWl2ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlfX3U4ICogZGVzdDsKKwlpbnQgb2ZmcyA9IDA7CisJaW50IHJlc3VsdCA9IGNvdW50OworCWludCBsZW47CisKKwl3aGlsZSAob2ZmcyA8IGNvdW50KSB7CisJCS8vIGlmIGJ1ZmZlciBjb250YWlucyBoZWFkZXIsIGNvcHkgcmVzdCBvZiBkYXRhCisJCWlmIChnYXJtaW5fZGF0YV9wLT5pbnNpemUgPj0gR0FSTUlOX1BLVEhEUl9MRU5HVEgpCisJCQlsZW4gPSBHQVJNSU5fUEtUSERSX0xFTkdUSAorCQkJICAgICAgK2dldERhdGFMZW5ndGgoZ2FybWluX2RhdGFfcC0+aW5idWZmZXIpOworCQllbHNlCisJCQlsZW4gPSBHQVJNSU5fUEtUSERSX0xFTkdUSDsKKworCQlpZiAobGVuID49IEdQU19JTl9CVUZTSVopIHsKKwkJCS8qIHNlZW0gdG8gYmUgYW4gaW52YWxpZCBwYWNrZXQsIGlnbm9yZSByZXN0IG9mIGlucHV0ICovCisJCQlkYmcoIiVzIC0gcGFja2V0IHNpemUgdG9vIGxhcmdlOiAlZCIsCisJCQkgICAgICAgIF9fRlVOQ1RJT05fXywgbGVuKTsKKwkJCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSA9IDA7CisJCQljb3VudCA9IDA7CisJCQlyZXN1bHQgPSAtRUlOVlBLVDsKKwkJfSBlbHNlIHsKKwkJCWxlbiAtPSBnYXJtaW5fZGF0YV9wLT5pbnNpemU7CisJCQlpZiAobGVuID4gKGNvdW50LW9mZnMpKQorCQkJCWxlbiA9IChjb3VudC1vZmZzKTsKKwkJCWlmIChsZW4gPiAwKSB7CisJCQkJZGVzdCA9IGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyCisJCQkJICAgICAgIAkrZ2FybWluX2RhdGFfcC0+aW5zaXplOworCQkJCW1lbWNweShkZXN0LCBidWYrb2ZmcywgbGVuKTsKKwkJCQlnYXJtaW5fZGF0YV9wLT5pbnNpemUgKz0gbGVuOworCQkJCW9mZnMgKz0gbGVuOworCQkJfQorCQl9CisKKwkJLyogZG8gd2UgaGF2ZSBhIGNvbXBsZXRlIHBhY2tldCA/ICovCisJCWlmIChnYXJtaW5fZGF0YV9wLT5pbnNpemUgPj0gR0FSTUlOX1BLVEhEUl9MRU5HVEgpIHsKKwkJCWxlbiA9IEdBUk1JTl9QS1RIRFJfTEVOR1RIKworCQkJICAgZ2V0RGF0YUxlbmd0aChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcik7CisJCQlpZiAoZ2FybWluX2RhdGFfcC0+aW5zaXplID49IGxlbikgeworCQkJCWdhcm1pbl93cml0ZV9idWxrIChnYXJtaW5fZGF0YV9wLT5wb3J0LAorCQkJCSAgICAgICAgICAgICAgICAgICBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlciwKKwkJCQkgICAgICAgICAgICAgICAgICAgbGVuKTsKKwkJCQlnYXJtaW5fZGF0YV9wLT5pbnNpemUgPSAwOworCisJCQkJLyogaWYgdGhpcyB3YXMgYW4gYWJvcnQtdHJhbnNmZXIgY29tbWFuZCwKKwkJCQkgICBmbHVzaCBhbGwgcXVldWVkIGRhdGEuICovCisJCQkJaWYgKGlzQWJvcnRUcmZDbW5kKGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyKSkgeworCQkJCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19EUk9QX0RBVEE7CisJCQkJCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwcml2YXRlIHBhY2tldHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHByaXZfc3RhdHVzX3Jlc3Aoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fbGUzMiAqcGt0ID0gKF9fbGUzMiAqKWdhcm1pbl9kYXRhX3AtPnByaXZwa3Q7CisKKwlwa3RbMF0gPSBfX2NwdV90b19sZTMyKEdBUk1JTl9MQVlFUklEX1BSSVZBVEUpOworCXBrdFsxXSA9IF9fY3B1X3RvX2xlMzIoUFJJVl9QS1RJRF9JTkZPX1JFU1ApOworCXBrdFsyXSA9IF9fY3B1X3RvX2xlMzIoMTIpOworCXBrdFszXSA9IF9fY3B1X3RvX2xlMzIoVkVSU0lPTl9NQUpPUiA8PCAxNiB8IFZFUlNJT05fTUlOT1IpOworCXBrdFs0XSA9IF9fY3B1X3RvX2xlMzIoZ2FybWluX2RhdGFfcC0+bW9kZSk7CisJcGt0WzVdID0gX19jcHVfdG9fbGUzMihnYXJtaW5fZGF0YV9wLT5zZXJpYWxfbnVtKTsKKworCXNlbmRfdG9fdHR5KHBvcnQsIChfX3U4Kilwa3QsIDYqNCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2FybWluIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZXNldGRldl9yZXF1ZXN0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfihDTEVBUl9IQUxUX1JFUVVJUkVEKTsKKwlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX1JFU0VUOworCWdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0gPSAwOworCisJdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwlkYmcoIiVzIC0gdXNiX3Jlc2V0X2RldmljZSIsIF9fRlVOQ1RJT05fXyApOworCXN0YXR1cyA9IHVzYl9yZXNldF9kZXZpY2UocG9ydC0+c2VyaWFsLT5kZXYpOworCWlmIChzdGF0dXMpCisJCWRiZygiJXMgLSB1c2JfcmVzZXRfZGV2aWNlIGZhaWxlZDogJWQiLAorCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworCisvKgorICogY2xlYXIgYWxsIGNhY2hlZCBkYXRhCisgKi8KK3N0YXRpYyBpbnQgZ2FybWluX2NsZWFyKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gZ2FybWluX2RhdGFfcC0+cG9ydDsKKworCWlmIChwb3J0ICE9IE5VTEwgJiYgZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19BUFBfUkVTUF9TRUVOKSB7CisJCS8qIHNlbmQgYSB0ZXJtaW5hdGUgY29tbWFuZCAqLworCQlzdGF0dXMgPSBnYXJtaW5fd3JpdGVfYnVsayhwb3J0LCBHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RPUF9UUkFOU0ZFUl9SRVEpKTsKKwl9CisKKwkvKiBmbHVzaCBhbGwgcXVldWVkIGRhdGEgKi8KKwlwa3RfY2xlYXIoZ2FybWluX2RhdGFfcCk7CisKKwlnYXJtaW5fZGF0YV9wLT5pbnNpemUgPSAwOworCWdhcm1pbl9kYXRhX3AtPm91dHNpemUgPSAwOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCisKKworCisKK3N0YXRpYyBpbnQgZ2FybWluX2luaXRfc2Vzc2lvbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQl1c2Jfa2lsbF91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJCWRiZygiJXMgLSBhZGRpbmcgaW50ZXJydXB0IGlucHV0IiwgX19GVU5DVElPTl9fKTsKKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSAgICAgICAgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiwiCisJCQkJIiBlcnJvciAlZFxuIiwKKwkJCSAgICAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlkYmcoIiVzIC0gc3RhcnRpbmcgc2Vzc2lvbiAuLi4iLCBfX0ZVTkNUSU9OX18pOworCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX0FDVElWRTsKKwkJc3RhdHVzID0gZ2FybWluX3dyaXRlX2J1bGsocG9ydCwgR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVRLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVRKSk7CisKKwkJaWYgKHN0YXR1cyA+PSAwKSB7CisKKwkJCWdhcm1pbl9kYXRhX3AtPmlnbm9yZVBrdHMrKzsKKworCQkJLyogbm90IG5lZWRlZCwgYnV0IHRoZSB3aW4zMiBkcml2ZXIgZG9lcyBpdCB0b28gLi4uICovCisJCQlzdGF0dXMgPSBnYXJtaW5fd3JpdGVfYnVsayhwb3J0LAorCQkJCQkJICAgR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVRMiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVEyKSk7CisJCQlpZiAoc3RhdHVzID49IDApIHsKKwkJCQlzdGF0dXMgPSAwOworCQkJCWdhcm1pbl9kYXRhX3AtPmlnbm9yZVBrdHMrKzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKworCisKKworc3RhdGljIGludCBnYXJtaW5fb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEKKwkgKiB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2UKKwkgKiB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJZ2FybWluX2RhdGFfcC0+bW9kZSAgPSBpbml0aWFsX21vZGU7CisJZ2FybWluX2RhdGFfcC0+Y291bnQgPSAwOworCWdhcm1pbl9kYXRhX3AtPmZsYWdzID0gMDsKKworCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwl1c2Jfa2lsbF91cmIgKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiIChwb3J0LT5yZWFkX3VyYik7CisKKwlpZiAoZ2FybWluX2RhdGFfcC0+c3RhdGUgPT0gU1RBVEVfUkVTRVQpIHsKKwkJc3RhdHVzID0gZ2FybWluX2luaXRfc2Vzc2lvbihwb3J0KTsKKwl9CisKKwlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX0FDVElWRTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQgLSBtb2RlPSVkIHN0YXRlPSVkIGZsYWdzPTB4JVgiLCBfX0ZVTkNUSU9OX18sCisJCXBvcnQtPm51bWJlciwgZ2FybWluX2RhdGFfcC0+bW9kZSwKKwkJZ2FybWluX2RhdGFfcC0+c3RhdGUsIGdhcm1pbl9kYXRhX3AtPmZsYWdzKTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwlnYXJtaW5fY2xlYXIoZ2FybWluX2RhdGFfcCk7CisKKwkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCXVzYl9raWxsX3VyYiAocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYiAocG9ydC0+d3JpdGVfdXJiKTsKKworCWlmIChub1Jlc3BvbnNlRnJvbUFwcExheWVyKGdhcm1pbl9kYXRhX3ApIHx8CisJICAgICgoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBDTEVBUl9IQUxUX1JFUVVJUkVEKSAhPSAwKSkgeworCQlwcm9jZXNzX3Jlc2V0ZGV2X3JlcXVlc3QocG9ydCk7CisJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfUkVTRVQ7CisJfSBlbHNlIHsKKwkJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9ESVNDT05ORUNURUQ7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gQ0xFQVJfSEFMVF9SRVFVSVJFRDsKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworCitzdGF0aWMgaW50IGdhcm1pbl93cml0ZV9idWxrIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBzdGF0ZSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLAorCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSk7CisKKwlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfRFJPUF9EQVRBOworCisJYnVmZmVyID0ga21hbGxvYyAoY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweSAoYnVmZmVyLCBidWYsIGNvdW50KTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgYnVmZmVyKTsKKworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIHNlcmlhbC0+ZGV2LAorCQkJIAl1c2Jfc25kYnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJYnVmZmVyLCBjb3VudCwKKwkJCQlnYXJtaW5fd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CisKKwlpZiAoR0FSTUlOX0xBWUVSSURfQVBQTCA9PSBnZXRMYXllcklkKGJ1ZmZlcikpIHsKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfQVBQX1JFUV9TRUVOOworCQlpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpICB7CisJCQlwa3RfY2xlYXIoZ2FybWluX2RhdGFfcCk7CisJCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX0dTUF9XQUlUX0RBVEE7CisJCX0KKwl9CisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkgICAgICAgICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspICIKKwkJICAgICAgICAiZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQljb3VudCA9IHN0YXR1czsKKwl9IGVsc2UgeworCisJCWlmIChHQVJNSU5fTEFZRVJJRF9BUFBMID09IGdldExheWVySWQoYnVmZmVyKQorCQkgICAgJiYgKGdhcm1pbl9kYXRhX3AtPm1vZGUgPT0gTU9ERV9HQVJNSU5fU0VSSUFMKSkgIHsKKworCQkJZ3NwX3NlbmRfYWNrKGdhcm1pbl9kYXRhX3AsIGJ1ZmZlcls0XSk7CisJCX0KKwl9CisKKwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJdXNiX2ZyZWVfdXJiICh1cmIpOworCisJcmV0dXJuIGNvdW50OworfQorCisKKworc3RhdGljIGludCBnYXJtaW5fd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IHBrdGlkLCBwa3RzaXosIGxlbjsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fbGUzMiAqcHJpdnBrdCA9IChfX2xlMzIgKilnYXJtaW5fZGF0YV9wLT5wcml2cGt0OworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBidWYpOworCisJLyogY2hlY2sgZm9yIG91ciBwcml2YXRlIHBhY2tldHMgKi8KKwlpZiAoY291bnQgPj0gR0FSTUlOX1BLVEhEUl9MRU5HVEgpIHsKKworCQlsZW4gPSBQUklWUEtUU0laOworCQlpZiAoY291bnQgPCBsZW4pCisJCQlsZW4gPSBjb3VudDsKKworCQltZW1jcHkoZ2FybWluX2RhdGFfcC0+cHJpdnBrdCwgYnVmLCBsZW4pOworCisJCXBrdHNpeiA9IGdldERhdGFMZW5ndGgoZ2FybWluX2RhdGFfcC0+cHJpdnBrdCk7CisJCXBrdGlkICA9IGdldFBhY2tldElkKGdhcm1pbl9kYXRhX3AtPnByaXZwa3QpOworCisJCWlmIChjb3VudCA9PSAoR0FSTUlOX1BLVEhEUl9MRU5HVEgrcGt0c2l6KQorCQkgICAgJiYgR0FSTUlOX0xBWUVSSURfUFJJVkFURSA9PSBnZXRMYXllcklkKGdhcm1pbl9kYXRhX3AtPnByaXZwa3QpKSB7CisKKwkJCWRiZygiJXMgLSBwcm9jZXNzaW5nIHByaXZhdGUgcmVxdWVzdCAlZCIsCisJCQkJX19GVU5DVElPTl9fLCBwa3RpZCk7CisKKwkJCS8vIGRyb3AgYWxsIHVuZmluaXNoZWQgdHJhbnNmZXJzCisJCQlnYXJtaW5fY2xlYXIoZ2FybWluX2RhdGFfcCk7CisKKwkJCXN3aXRjaChwa3RpZCkgeworCisJCQljYXNlIFBSSVZfUEtUSURfU0VUX0RFQlVHOgorCQkJCWlmIChwa3RzaXogIT0gNCkKKwkJCQkJcmV0dXJuIC1FSU5WUEtUOworCQkJCWRlYnVnID0gX19sZTMyX3RvX2NwdShwcml2cGt0WzNdKTsKKwkJCQlkYmcoIiVzIC0gZGVidWcgbGV2ZWwgc2V0IHRvIDB4JVgiLAorCQkJCQlfX0ZVTkNUSU9OX18sIGRlYnVnKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQUklWX1BLVElEX1NFVF9NT0RFOgorCQkJCWlmIChwa3RzaXogIT0gNCkKKwkJCQkJcmV0dXJuIC1FSU5WUEtUOworCQkJCWdhcm1pbl9kYXRhX3AtPm1vZGUgPSBfX2xlMzJfdG9fY3B1KHByaXZwa3RbM10pOworCQkJCWRiZygiJXMgLSBtb2RlIHNldCB0byAlZCIsCisJCQkJCV9fRlVOQ1RJT05fXywgZ2FybWluX2RhdGFfcC0+bW9kZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUFJJVl9QS1RJRF9JTkZPX1JFUToKKwkJCQlwcml2X3N0YXR1c19yZXNwKHBvcnQpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBSSVZfUEtUSURfUkVTRVRfUkVROgorCQkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0FQUF9SRVFfU0VFTjsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQUklWX1BLVElEX1NFVF9ERUZfTU9ERToKKwkJCQlpZiAocGt0c2l6ICE9IDQpCisJCQkJCXJldHVybiAtRUlOVlBLVDsKKwkJCQlpbml0aWFsX21vZGUgPSBfX2xlMzJfdG9fY3B1KHByaXZwa3RbM10pOworCQkJCWRiZygiJXMgLSBpbml0aWFsX21vZGUgc2V0IHRvICVkIiwKKwkJCQkJX19GVU5DVElPTl9fLAorCQkJCQlnYXJtaW5fZGF0YV9wLT5tb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KKworCWlmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfR0FSTUlOX1NFUklBTCkgeworCQlyZXR1cm4gZ3NwX3JlY2VpdmUoZ2FybWluX2RhdGFfcCwgYnVmLCBjb3VudCk7CisJfSBlbHNlIHsJLyogTU9ERV9OQVRJVkUgKi8KKwkJcmV0dXJuIG5hdF9yZWNlaXZlKGdhcm1pbl9kYXRhX3AsIGJ1ZiwgY291bnQpOworCX0KK30KKworCitzdGF0aWMgaW50IGdhcm1pbl93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCS8qCisJICogUmVwb3J0IGJhY2sgdGhlIGJ5dGVzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIG91dHB1dCBidWZmZXIuCisJICovCisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlyZXR1cm4gR1BTX09VVF9CVUZTSVotZ2FybWluX2RhdGFfcC0+b3V0c2l6ZTsKK30KKworCitzdGF0aWMgaW50IGdhcm1pbl9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJLyoKKwkgKiBSZXBvcnQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBpbiBvdXIgaW5wdXQgYnVmZmVyLgorICAgICAgICAgKiBXaWxsIHRoaXMgbG9jayB1cCB0aGUgZHJpdmVyIC0gdGhlIGJ1ZmZlciBjb250YWlucyBhbiBpbmNvbXBsZXRlCisgICAgICAgICAqIHBhY2thZ2Ugd2hpY2ggd2lsbCBub3QgYmUgd3JpdHRlbiB0byB0aGUgZGV2aWNlIHVudGlsIGl0CisgICAgICAgICAqIGhhcyBiZWVuIGNvbXBsZXRlZCA/CisgICAgICAgICAqLworCS8vc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkvL3JldHVybiBnYXJtaW5fZGF0YV9wLT5pbnNpemU7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3JlYWRfcHJvY2VzcyhzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAorCQkJCSB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBkYXRhX2xlbmd0aCkKK3sKKwlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19EUk9QX0RBVEEpIHsKKwkJLyogYWJvcnQtdHJhbnNmZXIgY21kIGlzIGFjdGljZSAqLworCQlkYmcoIiVzIC0gcGt0IGRyb3BwZWQiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZSBpZiAoZ2FybWluX2RhdGFfcC0+c3RhdGUgIT0gU1RBVEVfRElTQ09OTkVDVEVEICYmCisJICAgICAgICAgICBnYXJtaW5fZGF0YV9wLT5zdGF0ZSAhPSBTVEFURV9SRVNFVCApIHsKKworCQkvKiByZW1lbWJlciBhbnkgYXBwbC5sYXllciBwYWNrZXRzLCBzbyB3ZSBrbm93CisJCSAgIGlmIGEgcmVzZXQgaXMgcmVxdWlyZWQgb3Igbm90IHdoZW4gY2xvc2luZworCQkgICB0aGUgZGV2aWNlICovCisJCWlmICgwID09IG1lbWNtcChkYXRhLCBHQVJNSU5fQVBQX0xBWUVSX1JFUExZLAorCQkgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9BUFBfTEFZRVJfUkVQTFkpKSkKKwkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0FQUF9SRVNQX1NFRU47CisKKwkJLyogaWYgdGhyb3R0bGluZyBpcyBhY3RpdmUgb3IgcG9zdHByZWNlc3NpbmcgaXMgcmVxdWlyZWQKKwkJICAgcHV0IHRoZSByZWNlaXZlZCBkYXRhIGluIHRoIGlucHV0IHF1ZXVlLCBvdGhlcndpc2UKKwkJICAgc2VuZCBpdCBkaXJlY3RseSB0byB0aGUgdHR5IHBvcnQgKi8KKwkJaWYgKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfUVVFVUlORykgeworCQkJcGt0X2FkZChnYXJtaW5fZGF0YV9wLCBkYXRhLCBkYXRhX2xlbmd0aCk7CisJCX0gZWxzZSBpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpIHsKKwkJCWlmIChnZXRMYXllcklkKGRhdGEpID09IEdBUk1JTl9MQVlFUklEX0FQUEwpIHsKKwkJCQlwa3RfYWRkKGdhcm1pbl9kYXRhX3AsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNlbmRfdG9fdHR5KGdhcm1pbl9kYXRhX3AtPnBvcnQsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gIHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzIC0gYmFkIHNlcmlhbCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgCisJCQkJX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJZ2FybWluX3JlYWRfcHJvY2VzcyhnYXJtaW5fZGF0YV9wLCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJLyogQ29udGludWUgdHJ5aW5nIHRvIHJlYWQgdW50aWwgbm90aGluZyBtb3JlIGlzIHJlY2VpdmVkICAqLworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCQkgICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgZ2FybWluX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCSAgICAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBzaXplb2YoR0FSTUlOX0JVTEtfSU5fQVZBSUxfUkVQTFkpICYmCisJICAgIDAgPT0gbWVtY21wKGRhdGEsIEdBUk1JTl9CVUxLX0lOX0FWQUlMX1JFUExZLAorCQkgICAgICAgIHNpemVvZihHQVJNSU5fQlVMS19JTl9BVkFJTF9SRVBMWSkpKSB7CisKKwkJZGJnKCIlcyAtIGJ1bGsgZGF0YSBhdmFpbGFibGUuIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiBidWxrIGRhdGEgYXZhaWxhYmxlICovCisJCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwKKwkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQlnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQl9CisKKwl9IGVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAoNCtzaXplb2YoR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVQTFkpKQorCQkJICYmIDAgPT0gbWVtY21wKGRhdGEsIEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUExZLAorCQkJICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWSkpKSB7CisKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfU0VTU0lPTl9SRVBMWTFfU0VFTjsKKworCQkvKiBzYXZlIHRoZSBzZXJpYWwgbnVtYmVyICovCisJCWdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0gCisJCQk9IF9fbGUzMl90b19jcHVwKChfX2xlMzIqKShkYXRhK0dBUk1JTl9QS1RIRFJfTEVOR1RIKSk7CisKKwkJZGJnKCIlcyAtIHN0YXJ0LW9mLXNlc3Npb24gcmVwbHkgc2VlbiAtIHNlcmlhbCAldS4iLAorCQkJX19GVU5DVElPTl9fLCBnYXJtaW5fZGF0YV9wLT5zZXJpYWxfbnVtKTsKKwl9CisKKwlpZiAoZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cykgeworCQkvKiB0aGlzIHJlcGx5IGJlbG9uZ3MgdG8gYSByZXF1ZXN0IGdlbmVyYXRlZCBieSB0aGUgZHJpdmVyLAorCQkgICBpZ25vcmUgaXQuICovCisJCWRiZygiJXMgLSBwa3QgaWdub3JlZCAoJWQpIiwKKwkJCV9fRlVOQ1RJT05fXywgZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cyk7CisJCWdhcm1pbl9kYXRhX3AtPmlnbm9yZVBrdHMtLTsKKwl9IGVsc2UgeworCQlnYXJtaW5fcmVhZF9wcm9jZXNzKGdhcm1pbl9kYXRhX3AsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJfQorCisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworCisvKgorICogU2VuZHMgdGhlIG5leHQgcXVldWVkIHBhY2t0IHRvIHRoZSB0dHkgcG9ydCAoZ2FybWluIG5hdGl2ZSBtb2RlIG9ubHkpCisgKiBhbmQgdGhlbiBzZXRzIGEgdGltZXIgdG8gY2FsbCBpdHNlbGYgYWdhaW4gdW50aWwgYWxsIHF1ZXVlZCBkYXRhCisgKiBpcyBzZW50LgorICovCitzdGF0aWMgaW50IGdhcm1pbl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQoreworCXN0cnVjdCBnYXJtaW5fcGFja2V0ICpwa3Q7CisKKwlpZiAoKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfVEhST1RUTEVEKSA9PSAwKSB7CisJCXBrdCA9IHBrdF9wb3AoZ2FybWluX2RhdGFfcCk7CisJCWlmIChwa3QgIT0gTlVMTCkgeworCisJCQlzZW5kX3RvX3R0eShnYXJtaW5fZGF0YV9wLT5wb3J0LCBwa3QtPmRhdGEsIHBrdC0+c2l6ZSk7CisJCQlrZnJlZShwa3QpOworCQkJbW9kX3RpbWVyKCZnYXJtaW5fZGF0YV9wLT50aW1lciwgKDEpK2ppZmZpZXMpOworCisJCX0gZWxzZSB7CisJCQlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfUVVFVUlORzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCS8qIHNldCBmbGFnLCBkYXRhIHJlY2VpdmVkIHdpbGwgYmUgcHV0IGludG8gYSBxdWV1ZQorCSAgIGZvciBsYXRlciBwcm9jZXNzaW5nICovCisJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfUVVFVUlOR3xGTEFHU19USFJPVFRMRUQ7Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19USFJPVFRMRUQ7CisKKwkvKiBpbiBuYXRpdmUgbW9kZSBzZW5kIHF1ZXVlZCBkYXRhIHRvIHR0eSwgaW4KKwkgICBzZXJpYWwgbW9kZSBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLworCWlmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfTkFUSVZFKQorCQlnYXJtaW5fZmx1c2hfcXVldWUoZ2FybWluX2RhdGFfcCk7Cit9CisKKworCisvKgorICogVGhlIHRpbWVyIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgdG8gc2VuZCBxdWV1ZWQgcGFja2V0cyB0bworICogdGhlIHR0eSBpbiBjYXNlcyB3aGVyZSB0aGUgcHJvdG9jb2wgcHJvdmlkZXMgbm8gb3duIGhhbmRzaGFraW5nCisgKiB0byBpbml0aWF0ZSB0aGUgdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHRpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gKHN0cnVjdCBnYXJtaW5fZGF0YSAqKSBkYXRhOworCisJLyogc2VuZCB0aGUgbmV4dCBxdWV1ZWQgcGFja2V0IHRvIHRoZSB0dHkgcG9ydCAqLworCWlmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfTkFUSVZFKQorCQlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19RVUVVSU5HKQorCQkJZ2FybWluX2ZsdXNoX3F1ZXVlKGdhcm1pbl9kYXRhX3ApOworfQorCisKKworc3RhdGljIGludCBnYXJtaW5fYXR0YWNoIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IE5VTEw7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWdhcm1pbl9kYXRhX3AgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGdhcm1pbl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdhcm1pbl9kYXRhX3AgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQgKGdhcm1pbl9kYXRhX3AsIDAsIHNpemVvZihzdHJ1Y3QgZ2FybWluX2RhdGEpKTsKKwlpbml0X3RpbWVyKCZnYXJtaW5fZGF0YV9wLT50aW1lcik7CisJc3Bpbl9sb2NrX2luaXQoJmdhcm1pbl9kYXRhX3AtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZnYXJtaW5fZGF0YV9wLT5wa3RsaXN0KTsKKwkvL2dhcm1pbl9kYXRhX3AtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc2Vzc2lvbl90aW1lb3V0OworCWdhcm1pbl9kYXRhX3AtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylnYXJtaW5fZGF0YV9wOworCWdhcm1pbl9kYXRhX3AtPnRpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9oYW5kbGVyOworCWdhcm1pbl9kYXRhX3AtPnBvcnQgPSBwb3J0OworCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gMDsKKwlnYXJtaW5fZGF0YV9wLT5jb3VudCA9IDA7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIGdhcm1pbl9kYXRhX3ApOworCisJc3RhdHVzID0gZ2FybWluX2luaXRfc2Vzc2lvbihwb3J0KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwlkZWxfdGltZXJfc3luYygmZ2FybWluX2RhdGFfcC0+dGltZXIpOworCWtmcmVlIChnYXJtaW5fZGF0YV9wKTsKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7Cit9CisKKworCisKKworCisKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZ2FybWluX2RldmljZSA9IHsKKwkub3duZXIgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5uYW1lICAgICAgICAgICAgICAgID0gIkdhcm1pbiBHUFMgdXNiL3R0eSIsCisJLnNob3J0X25hbWUgICAgICAgICAgPSAiZ2FybWluX2dwcyIsCisJLmlkX3RhYmxlICAgICAgICAgICAgPSBpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiAgICA9IDEsCisJLm51bV9idWxrX2luICAgICAgICAgPSAxLAorCS5udW1fYnVsa19vdXQgICAgICAgID0gMSwKKwkubnVtX3BvcnRzICAgICAgICAgICA9IDEsCisJLm9wZW4gICAgICAgICAgICAgICAgPSBnYXJtaW5fb3BlbiwKKwkuY2xvc2UgICAgICAgICAgICAgICA9IGdhcm1pbl9jbG9zZSwKKwkudGhyb3R0bGUgICAgICAgICAgICA9IGdhcm1pbl90aHJvdHRsZSwKKwkudW50aHJvdHRsZSAgICAgICAgICA9IGdhcm1pbl91bnRocm90dGxlLAorCS5hdHRhY2ggICAgICAgICAgICAgID0gZ2FybWluX2F0dGFjaCwKKwkuc2h1dGRvd24gICAgICAgICAgICA9IGdhcm1pbl9zaHV0ZG93biwKKwkud3JpdGUgICAgICAgICAgICAgICA9IGdhcm1pbl93cml0ZSwKKwkud3JpdGVfcm9vbSAgICAgICAgICA9IGdhcm1pbl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgICAgID0gZ2FybWluX2NoYXJzX2luX2J1ZmZlciwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9IGdhcm1pbl93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgID0gZ2FybWluX3JlYWRfYnVsa19jYWxsYmFjaywKKwkucmVhZF9pbnRfY2FsbGJhY2sgICA9IGdhcm1pbl9yZWFkX2ludF9jYWxsYmFjaywKK307CisKKworc3RhdGljIGludCBfX2luaXQgZ2FybWluX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmdhcm1pbl9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2dhcm1pbl9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmdhcm1pbl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZnYXJtaW5fZGV2aWNlKTsKK2ZhaWxlZF9nYXJtaW5fcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2FybWluX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZnYXJtaW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZnYXJtaW5fZGV2aWNlKTsKK30KKworCisKKworbW9kdWxlX2luaXQoZ2FybWluX2luaXQpOworbW9kdWxlX2V4aXQoZ2FybWluX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oaW5pdGlhbF9tb2RlLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbml0aWFsX21vZGUsICJJbml0aWFsIG1vZGUiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyMTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBVU0IgU2VyaWFsIENvbnZlcnRlciBHZW5lcmljIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQworc3RhdGljIF9fdTE2IHZlbmRvciAgPSAweDA1Zjk7CitzdGF0aWMgX191MTYgcHJvZHVjdCA9IDB4ZmZmZjsKKworbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgVVNCIGlkVmVuZG9yIik7CisKK21vZHVsZV9wYXJhbShwcm9kdWN0LCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVXNlciBzcGVjaWZpZWQgVVNCIGlkUHJvZHVjdCIpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ2VuZXJpY19kZXZpY2VfaWRzWzJdOyAvKiBJbml0aWFsbHkgYWxsIHplcm9lcy4gKi8KKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBHZW5lcmljIFNlcmlhbCBDb252ZXJ0ZXIgKi8KK3N0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiR2VuZXJpYyIsCisJLnNob3J0X25hbWUgPQkJImdlbmVyaWMiLAorCS5pZF90YWJsZSA9CQlnZW5lcmljX2RldmljZV9pZHMsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCisJLnNodXRkb3duID0JCXVzYl9zZXJpYWxfZ2VuZXJpY19zaHV0ZG93biwKK307CisKKy8qIHdlIHdhbnQgdG8gbG9vayBhdCBhbGwgZGV2aWNlcywgYXMgdGhlIHZlbmRvci9wcm9kdWN0IGlkIGNhbiBjaGFuZ2UKKyAqIGRlcGVuZGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ2VuZXJpY19zZXJpYWxfaWRzW10gPSB7CisJey5kcml2ZXJfaW5mbyA9IDQyfSwKKwl7fQorfTsKKworc3RhdGljIGludCBnZW5lcmljX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF9wYXR0ZXJuOworCisJaWRfcGF0dGVybiA9IHVzYl9tYXRjaF9pZChpbnRlcmZhY2UsIGdlbmVyaWNfZGV2aWNlX2lkcyk7CisJaWYgKGlkX3BhdHRlcm4gIT0gTlVMTCkKKwkJcmV0dXJuIHVzYl9zZXJpYWxfcHJvYmUoaW50ZXJmYWNlLCBpZCk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnZW5lcmljX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNic2VyaWFsX2dlbmVyaWMiLAorCS5wcm9iZSA9CWdlbmVyaWNfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JZ2VuZXJpY19zZXJpYWxfaWRzLAorfTsKKyNlbmRpZgorCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3JlZ2lzdGVyIChpbnQgX2RlYnVnKQoreworCWludCByZXR2YWwgPSAwOworCisJZGVidWcgPSBfZGVidWc7CisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQworCWdlbmVyaWNfZGV2aWNlX2lkc1swXS5pZFZlbmRvciA9IHZlbmRvcjsKKwlnZW5lcmljX2RldmljZV9pZHNbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKKwlnZW5lcmljX2RldmljZV9pZHNbMF0ubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVDsKKworCS8qIHJlZ2lzdGVyIG91ciBnZW5lcmljIGRyaXZlciB3aXRoIG91cnNlbHZlcyAqLworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIgKCZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGV4aXQ7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZnZW5lcmljX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKTsKK2V4aXQ6CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19kZXJlZ2lzdGVyICh2b2lkKQoreworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMKKwkvKiByZW1vdmUgb3VyIGdlbmVyaWMgZHJpdmVyICovCisJdXNiX2RlcmVnaXN0ZXIoJmdlbmVyaWNfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKTsKKyNlbmRpZgorfQorCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YSB0aHJvdWdoLCAKKwkgICBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2Ugd2l0aCBPSENJKSBkYXRhCisJICAgY2FuIGdldCBsb3N0LiAqLworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogaWYgd2UgaGF2ZSBhIGJ1bGsgaW50ZXJydXB0LCBzdGFydCByZWFkaW5nIGZyb20gaXQgKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19pbikgeworCQkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICAgKChzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaykgPworCQkJCSAgICAgc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2sgOgorCQkJCSAgICAgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayksCisJCQkJICAgcG9ydCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwkJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCWlmIChzZXJpYWwtPm51bV9idWxrX2luKQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl9Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJZ2VuZXJpY19jbGVhbnVwIChwb3J0KTsKK30KKworaW50IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCisJLyogb25seSBkbyBzb21ldGhpbmcgaWYgd2UgaGF2ZSBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7CisJCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuICgwKTsKKwkJfQorCisJCWNvdW50ID0gKGNvdW50ID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPyBwb3J0LT5idWxrX291dF9zaXplIDogY291bnQ7CisKKwkJbWVtY3B5IChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBjb3VudCk7CisJCWRhdGEgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBkYXRhKTsKKworCQkvKiBzZXQgdXAgb3VyIHVyYiAqLworCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LAorCQkJCSAgICgoc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrKSA/IAorCQkJCSAgICAgc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrIDoKKwkJCQkgICAgIHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrKSwgcG9ydCk7CisKKwkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IGNvdW50OworCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogbm8gYnVsayBvdXQsIHNvIHJldHVybiAwIGJ5dGVzIHdyaXR0ZW4gKi8KKwlyZXR1cm4gKDApOworfQorCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcm9vbSA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplOworCX0KKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gKHJvb20pOworfQorCitpbnQgdXNiX3NlcmlhbF9nZW5lcmljX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCBjaGFycyA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkgeworCQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJY2hhcnMgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJfQorCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKwlyZXR1cm4gKGNoYXJzKTsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCS8qIHRoaXMgZG9lc24ndCBhY3R1YWxseSBwdXNoIHRoZSBkYXRhIHRocm91Z2ggdW5sZXNzIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJICAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZSAoc2VyaWFsLT5kZXYsCisJCQkJICAgCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICAoKHNlcmlhbC0+dHlwZS0+cmVhZF9idWxrX2NhbGxiYWNrKSA/IAorCQkJICAgICBzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjayA6IAorCQkJICAgICB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKSwgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KCh2b2lkICopcG9ydCk7CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZ2VuZXJpY19jbGVhbnVwKHNlcmlhbC0+cG9ydFtpXSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fMTY2NTQuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb18xNjY1NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2FiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fMTY2NTQuaApAQCAtMCwwICsxLDE5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCTE2NjU0LkgJCURlZmluaXRpb25zIGZvciAxNkM2NTQgVUFSVCB1c2VkIG9uIEVkZ2VQb3J0cworICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBJbmMuCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChfMTY2NTRfSCkKKyNkZWZpbmUJXzE2NjU0X0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQkJRCBlIGYgaSBuIGUgcyAgIC8gICBUIHkgcCBlIGQgZSBmIHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy8KKwkvLyBVQVJUIHJlZ2lzdGVyIG51bWJlcnMKKwkvLyBOdW1iZXJzIDAtNyBhcmUgcGFzc2VkIHRvIHRoZSBFZGdlcG9ydCBkaXJlY3RseS4gTnVtYmVycyA4IGFuZAorCS8vIGFib3ZlIGFyZSB1c2VkIGludGVybmFsbHkgdG8gaW5kaWNhdGUgdGhhdCB3ZSBtdXN0IGVuYWJsZSBhY2Nlc3MKKwkvLyB0byB0aGVtIHZpYSBMQ1IgYml0IDB4ODAgb3IgTENSID0gMHhCRi4KKwkvLyBUaGUgcmVnaXN0ZXIgbnVtYmVyIHNlbnQgdG8gdGhlIEVkZ2Vwb3J0IGlzIHRoZW4gKHggJiAweDcpLgorCS8vCisJLy8gRHJpdmVyIG11c3Qgbm90IGFjY2VzcyByZWdpc3RlcnMgdGhhdCBhZmZlY3Qgb3BlcmF0aW9uIG9mIHRoZQorCS8vIHRoZSBFZGdlUG9ydCBmaXJtd2FyZSAtLSB0aGF0IGluY2x1ZGVzIFRIUiwgUkhSLCBJRVIsIEZDUi4KKworCisjZGVmaW5lIFRIUgkJCTAJLy8gISBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIChXcml0ZSkKKyNkZWZpbmUgUkRSCQkJMAkvLyAhIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciAoUmVhZCkKKyNkZWZpbmUgSUVSCQkJMQkvLyAhIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyNkZWZpbmUgRkNSCQkJMgkvLyAhIEZpZm8gQ29udHJvbCBSZWdpc3RlciAoV3JpdGUpCisjZGVmaW5lIElTUgkJCTIJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAoUmVhZCkKKyNkZWZpbmUgTENSCQkJMwkvLyBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKKyNkZWZpbmUgTUNSCQkJNAkvLyBNb2RlbSBDb250cm9sIFJlZ2lzdGVyCisjZGVmaW5lIExTUgkJCTUJLy8gTGluZSBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgTVNSCQkJNgkvLyBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgU1BSCQkJNwkvLyBTY3JhdGNoUGFkIFJlZ2lzdGVyCisjZGVmaW5lIERMTAkJCTgJLy8gQmFuazJbIDAgXSBEaXZpc29yIExhdGNoIExTQgorI2RlZmluZSBETE0JCQk5CS8vIEJhbmsyWyAxIF0gRGl2aXNvciBMYXRjaCBNU0IKKyNkZWZpbmUgRUZSCQkJMTAJLy8gQmFuazJbIDIgXSBFeHRlbmRlZCBGdW5jdGlvbiBSZWdpc3RlcgorLy9lZmluZSB1bnVzZWQJCQkxMQkvLyBCYW5rMlsgMyBdCisjZGVmaW5lIFhPTjEJCQkxMgkvLyBCYW5rMlsgNCBdIFhvbi0xCisjZGVmaW5lIFhPTjIJCQkxMwkvLyBCYW5rMlsgNSBdIFhvbi0yCisjZGVmaW5lIFhPRkYxCQkJMTQJLy8gQmFuazJbIDYgXSBYb2ZmLTEKKyNkZWZpbmUgWE9GRjIJCQkxNQkvLyBCYW5rMlsgNyBdIFhvZmYtMgorCisjZGVmaW5lCU5VTV8xNjY1NF9SRUdTCQkxNgorCisjZGVmaW5lIElTX1JFR18yTkRfQkFOSyh4KQkoKHgpID49IDgpCisKKwkvLworCS8vIEJpdCBkZWZpbml0aW9ucyBmb3IgZWFjaCByZWdpc3RlcgorCS8vCisKKyNkZWZpbmUgSUVSX1JYCQkJMHgwMQkvLyBFbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX1RYCQkJMHgwMgkvLyBFbmFibGUgdHJhbnNtaXQgaW50ZXJydXB0CisjZGVmaW5lIElFUl9SWFMJCQkweDA0CS8vIEVuYWJsZSByZWNlaXZlIHN0YXR1cyBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX01ETQkJCTB4MDgJLy8gRW5hYmxlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX1NMRUVQCQkweDEwCS8vIEVuYWJsZSBzbGVlcCBtb2RlCisjZGVmaW5lIElFUl9YT0ZGCQkweDIwCS8vIEVuYWJsZSBzL3cgZmxvdyBjb250cm9sIChYT0ZGKSBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX1JUUwkJCTB4NDAJLy8gRW5hYmxlIFJUUyBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX0NUUwkJCTB4ODAJLy8gRW5hYmxlIENUUyBpbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX0VOQUJMRV9BTEwJCTB4RkYJLy8gRW5hYmxlIGFsbCBpbnRzCisKKworI2RlZmluZSBGQ1JfRklGT19FTgkJMHgwMQkvLyBFbmFibGUgRklGT3MKKyNkZWZpbmUgRkNSX1JYQ0xSCQkweDAyCS8vIFJlc2V0IFJ4IEZJRk8KKyNkZWZpbmUgRkNSX1RYQ0xSCQkweDA0CS8vIFJlc2V0IFR4IEZJRk8KKyNkZWZpbmUgRkNSX0RNQV9CTEsJCTB4MDgJLy8gRW5hYmxlIERNQSBibG9jayBtb2RlCisjZGVmaW5lIEZDUl9UWF9MRVZFTF9NQVNLCTB4MzAJLy8gTWFzayBmb3IgVHggRklGTyBMZXZlbAorI2RlZmluZSBGQ1JfVFhfTEVWRUxfOAkJMHgwMAkvLyBUeCBGSUZPIExldmVsID0gIDggYnl0ZXMKKyNkZWZpbmUgRkNSX1RYX0xFVkVMXzE2CQkweDEwCS8vIFR4IEZJRk8gTGV2ZWwgPSAxNiBieXRlcworI2RlZmluZSBGQ1JfVFhfTEVWRUxfMzIJCTB4MjAJLy8gVHggRklGTyBMZXZlbCA9IDMyIGJ5dGVzCisjZGVmaW5lIEZDUl9UWF9MRVZFTF81NgkJMHgzMAkvLyBUeCBGSUZPIExldmVsID0gNTYgYnl0ZXMKKyNkZWZpbmUgRkNSX1JYX0xFVkVMX01BU0sJMHhDMAkvLyBNYXNrIGZvciBSeCBGSUZPIExldmVsCisjZGVmaW5lIEZDUl9SWF9MRVZFTF84CQkweDAwCS8vIFJ4IEZJRk8gTGV2ZWwgPSAgOCBieXRlcworI2RlZmluZSBGQ1JfUlhfTEVWRUxfMTYJCTB4NDAJLy8gUnggRklGTyBMZXZlbCA9IDE2IGJ5dGVzCisjZGVmaW5lIEZDUl9SWF9MRVZFTF81NgkJMHg4MAkvLyBSeCBGSUZPIExldmVsID0gNTYgYnl0ZXMKKyNkZWZpbmUgRkNSX1JYX0xFVkVMXzYwCQkweEMwCS8vIFJ4IEZJRk8gTGV2ZWwgPSA2MCBieXRlcworCisKKyNkZWZpbmUgSVNSX0lOVF9NRE1fU1RBVFVTCTB4MDAJLy8gTW9kZW0gc3RhdHVzIGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfTk9ORQkJMHgwMQkvLyBObyBpbnRlcnJ1cHQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX1RYUkRZCQkweDAyCS8vIFR4IHJlYWR5IGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfUlhSRFkJCTB4MDQJLy8gUnggcmVhZHkgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9MSU5FX1NUQVRVUwkweDA2CS8vIExpbmUgc3RhdHVzIGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfUlhfVElNRU9VVAkweDBDCS8vIFJ4IHRpbWVvdXQgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9SWF9YT0ZGCQkweDEwCS8vIFJ4IFhvZmYgaW50IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9SVFNfQ1RTCQkweDIwCS8vIFJUUy9DVFMgY2hhbmdlIGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9GSUZPX0VOQUJMRUQJMHhDMAkvLyBCaXRzIHNldCBpZiBGSUZPcyBlbmFibGVkCisjZGVmaW5lIElTUl9JTlRfQklUU19NQVNLCTB4M0UJLy8gTWFzayB0byBpc29sYXRlIHZhbGlkIGludCBjYXVzZXMKKworCisjZGVmaW5lIExDUl9CSVRTXzUJCTB4MDAJLy8gNSBiaXRzL2NoYXIKKyNkZWZpbmUgTENSX0JJVFNfNgkJMHgwMQkvLyA2IGJpdHMvY2hhcgorI2RlZmluZSBMQ1JfQklUU183CQkweDAyCS8vIDcgYml0cy9jaGFyCisjZGVmaW5lIExDUl9CSVRTXzgJCTB4MDMJLy8gOCBiaXRzL2NoYXIKKyNkZWZpbmUgTENSX0JJVFNfTUFTSwkJMHgwMwkvLyBNYXNrIGZvciBiaXRzL2NoYXIgZmllbGQKKworI2RlZmluZSBMQ1JfU1RPUF8xCQkweDAwCS8vIDEgc3RvcCBiaXQKKyNkZWZpbmUgTENSX1NUT1BfMV81CQkweDA0CS8vIDEuNSBzdG9wIGJpdHMgKGlmIDUgICBiaXRzL2NoYXIpCisjZGVmaW5lIExDUl9TVE9QXzIJCTB4MDQJLy8gMiBzdG9wIGJpdHMgICAoaWYgNi04IGJpdHMvY2hhcikKKyNkZWZpbmUgTENSX1NUT1BfTUFTSwkJMHgwNAkvLyBNYXNrIGZvciBzdG9wIGJpdHMgZmllbGQKKworI2RlZmluZSBMQ1JfUEFSX05PTkUJCTB4MDAJLy8gTm8gcGFyaXR5CisjZGVmaW5lIExDUl9QQVJfT0RECQkweDA4CS8vIE9kZCBwYXJpdHkKKyNkZWZpbmUgTENSX1BBUl9FVkVOCQkweDE4CS8vIEV2ZW4gcGFyaXR5CisjZGVmaW5lIExDUl9QQVJfTUFSSwkJMHgyOAkvLyBGb3JjZSBwYXJpdHkgYml0IHRvIDEKKyNkZWZpbmUgTENSX1BBUl9TUEFDRQkJMHgzOAkvLyBGb3JjZSBwYXJpdHkgYml0IHRvIDAKKyNkZWZpbmUgTENSX1BBUl9NQVNLCQkweDM4CS8vIE1hc2sgZm9yIHBhcml0eSBmaWVsZAorCisjZGVmaW5lIExDUl9TRVRfQlJFQUsJCTB4NDAJLy8gU2V0IEJyZWFrIGNvbmRpdGlvbgorI2RlZmluZSBMQ1JfRExfRU5BQkxFCQkweDgwCS8vIEVuYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaAorCisjZGVmaW5lIExDUl9BQ0NFU1NfRUZSCQkweEJGCS8vIExvYWQgdGhpcyB2YWx1ZSB0byBhY2Nlc3MgRExMLERMTSwKKwkJCQkJLy8gYW5kIGFsc28gdGhlICc2NTQtb25seSByZWdpc3RlcnMKKwkJCQkJLy8gRUZSLCBYT04xLCBYT04yLCBYT0ZGMSwgWE9GRjIKKworCisjZGVmaW5lIE1DUl9EVFIJCQkweDAxCS8vIEFzc2VydCBEVFIKKyNkZWZpbmUgTUNSX1JUUwkJCTB4MDIJLy8gQXNzZXJ0IFJUUworI2RlZmluZSBNQ1JfT1VUMQkJMHgwNAkvLyBMb29wYmFjayBvbmx5OiBTZXRzIHN0YXRlIG9mIFJJCisjZGVmaW5lIE1DUl9NQVNURVJfSUUJCTB4MDgJLy8gRW5hYmxlIGludGVycnVwdCBvdXRwdXRzCisjZGVmaW5lIE1DUl9MT09QQkFDSwkJMHgxMAkvLyBTZXQgaW50ZXJuYWwgKGRpZ2l0YWwpIGxvb3BiYWNrIG1vZGUKKyNkZWZpbmUgTUNSX1hPTl9BTlkJCTB4MjAJLy8gRW5hYmxlIGFueSBjaGFyIHRvIGV4aXQgWE9GRiBtb2RlCisjZGVmaW5lIE1DUl9JUl9FTkFCTEUJCTB4NDAJLy8gRW5hYmxlIElyREEgZnVuY3Rpb25zCisjZGVmaW5lIE1DUl9CUkdfRElWXzQJCTB4ODAJLy8gRGl2aWRlIGJhdWQgcmF0ZSBjbGsgYnkgLzQgaW5zdGVhZCBvZiAvMQorCisKKyNkZWZpbmUgTFNSX1JYX0FWQUlMCQkweDAxCS8vIFJ4IGRhdGEgYXZhaWxhYmxlCisjZGVmaW5lIExTUl9PVkVSX0VSUgkJMHgwMgkvLyBSeCBvdmVycnVuCisjZGVmaW5lIExTUl9QQVJfRVJSCQkweDA0CS8vIFJ4IHBhcml0eSBlcnJvcgorI2RlZmluZSBMU1JfRlJNX0VSUgkJMHgwOAkvLyBSeCBmcmFtaW5nIGVycm9yCisjZGVmaW5lIExTUl9CUkVBSwkJMHgxMAkvLyBSeCBicmVhayBjb25kaXRpb24gZGV0ZWN0ZWQKKyNkZWZpbmUgTFNSX1RYX0VNUFRZCQkweDIwCS8vIFR4IEZpZm8gZW1wdHkKKyNkZWZpbmUgTFNSX1RYX0FMTF9FTVBUWQkweDQwCS8vIFR4IEZpZm8gYW5kIHNoaWZ0IHJlZ2lzdGVyIGVtcHR5CisjZGVmaW5lIExTUl9GSUZPX0VSUgkJMHg4MAkvLyBSeCBGaWZvIGNvbnRhaW5zIGF0IGxlYXN0IDEgZXJyZWQgY2hhcgorCisKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0RFTFRBX0NUUwkweDAxCS8vIENUUyBjaGFuZ2VkIGZyb20gbGFzdCByZWFkCisjZGVmaW5lIEVER0VQT1JUX01TUl9ERUxUQV9EU1IJMHgwMgkvLyBEU1IgY2hhbmdlZCBmcm9tIGxhc3QgcmVhZAorI2RlZmluZSBFREdFUE9SVF9NU1JfREVMVEFfUkkJMHgwNAkvLyBSSSAgY2hhbmdlZCBmcm9tIDAgLT4gMQorI2RlZmluZSBFREdFUE9SVF9NU1JfREVMVEFfQ0QJMHgwOAkvLyBDRCAgY2hhbmdlZCBmcm9tIGxhc3QgcmVhZAorI2RlZmluZSBFREdFUE9SVF9NU1JfQ1RTCTB4MTAJLy8gQ3VycmVudCBzdGF0ZSBvZiBDVFMKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0RTUgkweDIwCS8vIEN1cnJlbnQgc3RhdGUgb2YgRFNSCisjZGVmaW5lIEVER0VQT1JUX01TUl9SSQkJMHg0MAkvLyBDdXJyZW50IHN0YXRlIG9mIFJJCisjZGVmaW5lIEVER0VQT1JUX01TUl9DRAkJMHg4MAkvLyBDdXJyZW50IHN0YXRlIG9mIENECisKKworCisJCQkJCS8vCVR4CQlSeAorCQkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgRUZSX1NXRkNfTk9ORQkJMHgwMAkvLwlOb25lCQlOb25lCisjZGVmaW5lIEVGUl9TV0ZDX1JYMQkJMHgwMiAJLy8JTm9uZQkJWE9GRjEKKyNkZWZpbmUgRUZSX1NXRkNfUlgyCQkweDAxIAkvLwlOb25lCQlYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19SWDEyCQkweDAzIAkvLwlOb25lCQlYT0ZGMSAmIFhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1RYMQkJMHgwOCAJLy8JWE9GRjEJCU5vbmUKKyNkZWZpbmUgRUZSX1NXRkNfVFgxX1JYMQkweDBhIAkvLwlYT0ZGMQkJWE9GRjEKKyNkZWZpbmUgRUZSX1NXRkNfVFgxX1JYMgkweDA5IAkvLwlYT0ZGMQkJWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfVFgxX1JYMTIJMHgwYiAJLy8JWE9GRjEJCVhPRkYxICYgWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfVFgyCQkweDA0IAkvLwlYT0ZGMgkJTm9uZQorI2RlZmluZSBFRlJfU1dGQ19UWDJfUlgxCTB4MDYgCS8vCVhPRkYyCQlYT0ZGMQorI2RlZmluZSBFRlJfU1dGQ19UWDJfUlgyCTB4MDUgCS8vCVhPRkYyCQlYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19UWDJfUlgxMgkweDA3IAkvLwlYT0ZGMgkJWE9GRjEgJiBYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19UWDEyCQkweDBjIAkvLwlYT0ZGMSAmIFhPRkYyCU5vbmUKKyNkZWZpbmUgRUZSX1NXRkNfVFgxMl9SWDEJMHgwZSAJLy8JWE9GRjEgJiBYT0ZGMglYT0ZGMQorI2RlZmluZSBFRlJfU1dGQ19UWDEyX1JYMgkweDBkIAkvLwlYT0ZGMSAmIFhPRkYyCVhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1RYMTJfUlgxMgkweDBmIAkvLwlYT0ZGMSAmIFhPRkYyCVhPRkYxICYgWE9GRjIKKworI2RlZmluZSBFRlJfVFhfRkNfTUFTSwkJMHgwYwkvLyBNYXNrIHRvIGlzb2xhdGUgUnggZmxvdyBjb250cm9sCisjZGVmaW5lIEVGUl9UWF9GQ19OT05FCQkweDAwCS8vIE5vIFR4IFhvbi9Yb2ZmIGZsb3cgY29udHJvbAorI2RlZmluZSBFRlJfVFhfRkNfWDEJCTB4MDgJLy8gVHJhbnNtaXQgWG9uMS9Yb2ZmMQorI2RlZmluZSBFRlJfVFhfRkNfWDIJCTB4MDQJLy8gVHJhbnNtaXQgWG9uMi9Yb2ZmMgorI2RlZmluZSBFRlJfVFhfRkNfWDFfMgkJMHgwYwkvLyBUcmFuc21pdCBYb24xJjIvWG9mZjEmMgorCisjZGVmaW5lIEVGUl9SWF9GQ19NQVNLCQkweDAzCS8vIE1hc2sgdG8gaXNvbGF0ZSBSeCBmbG93IGNvbnRyb2wKKyNkZWZpbmUgRUZSX1JYX0ZDX05PTkUJCTB4MDAJLy8gTm8gUnggWG9uL1hvZmYgZmxvdyBjb250cm9sCisjZGVmaW5lIEVGUl9SWF9GQ19YMQkJMHgwMgkvLyBSZWNlaXZlciBjb21wYXJlcyBYb24xL1hvZmYxCisjZGVmaW5lIEVGUl9SWF9GQ19YMgkJMHgwMQkvLyBSZWNlaXZlciBjb21wYXJlcyBYb24yL1hvZmYyCisjZGVmaW5lIEVGUl9SWF9GQ19YMV8yCQkweDAzCS8vIFJlY2VpdmVyIGNvbXBhcmVzIFhvbjEmMi9Yb2ZmMSYyCisKKworI2RlZmluZSBFRlJfU1dGQ19NQVNLCQkweDBGCS8vIE1hc2sgZm9yIHNvZnR3YXJlIGZsb3cgY29udHJvbCBmaWVsZAorI2RlZmluZSBFRlJfRU5BQkxFXzE2NjU0CTB4MTAJLy8gRW5hYmxlIDE2QzY1NCBmZWF0dXJlcworI2RlZmluZSBFRlJfU1BFQ19ERVRFQ1QJCTB4MjAJLy8gRW5hYmxlIHNwZWNpYWwgY2hhcmFjdGVyIGRldGVjdCBpbnRlcnJ1cHQKKyNkZWZpbmUgRUZSX0FVVE9fUlRTCQkweDQwCS8vIFVzZSBSVFMgZm9yIFJ4IGZsb3cgY29udHJvbAorI2RlZmluZSBFRlJfQVVUT19DVFMJCTB4ODAJLy8gVXNlIENUUyBmb3IgVHggZmxvdyBjb250cm9sCisKKyNlbmRpZgkvLyBpZiAhZGVmaW5lZChfMTY2NTRfSCkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzViNWFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTAsMCArMSwzMTEzIEBACisvKgorICogRWRnZXBvcnQgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorICoJRWRnZXBvcnQvNAorICoJRWRnZXBvcnQvNHQKKyAqCUVkZ2Vwb3J0LzIKKyAqCUVkZ2Vwb3J0LzRpCisgKglFZGdlcG9ydC8yaQorICoJRWRnZXBvcnQvNDIxCisgKglFZGdlcG9ydC8yMQorICoJUmFwaWRwb3J0LzQKKyAqCUVkZ2Vwb3J0LzgKKyAqCUVkZ2Vwb3J0LzJEOAorICoJRWRnZXBvcnQvNEQ4CisgKglFZGdlcG9ydC84aQorICoKKyAqIEZvciBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgY29udGFjdCBJbnNpZGUgT3V0CisgKiBOZXR3b3JrcyB0ZWNobmljYWwgc3VwcG9ydCwgb3IgUGV0ZXIgQmVyZ2VyIDxwYmVyZ2VyQGJyaW1zb24uY29tPiwKKyAqIG9yIEFsIEJvcmNoZXJzIDxhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+LgorICoKKyAqIFZlcnNpb24gaGlzdG9yeToKKyAqIAorICogMjAwM18wNF8wMyBhbCBib3JjaGVycworICogIC0gZml4ZWQgYSBidWcgKHRoYXQgc2hvd3MgdXAgd2l0aCBkb3NlbXUpIHdoZXJlIHRoZSB0dHkgc3RydWN0IGlzCisgKiAgICB1c2VkIGluIGEgY2FsbGJhY2sgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQKKyAqCisgKiAyLjMgMjAwMl8wM18wOCBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gZml4ZWQgYnVnIHdoZW4gbXVsdGlwbGUgZGV2aWNlcyB3ZXJlIGF0dGFjaGVkIGF0IHRoZSBzYW1lIHRpbWUuCisgKgorICogMi4yIDIwMDFfMTFfMTQgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIGZpeGVkIGJ1ZyBpbiBlZGdlX2Nsb3NlIHRoYXQga2VwdCB0aGUgcG9ydCBmcm9tIGJlaW5nIHVzZWQgbW9yZQorICoJICB0aGFuIG9uY2UuCisgKgktIGZpeGVkIG1lbW9yeSBsZWFrIG9uIGRldmljZSByZW1vdmFsLgorICoJLSBmaXhlZCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgb2YgbWVtb3J5IHdoZW4gY29tbWFuZCB1cmIgc3VibWl0dGluZworICoJICBmYWlsZWQuCisgKgktIG90aGVyIHNtYWxsIGNsZWFudXBzIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkCisgKgkKKyAqIDIuMSAyMDAxXzA3XzA5IGdyZWcga3JvYWgtaGFydG1hbgorICoJLSBhZGRlZCBzdXBwb3J0IGZvciBUSU9DTUJJUyBhbmQgVElPQ01CSUMuCisgKgorICogICAgICgwNC8wOC8yMDAxKSBnYgorICoJLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqIDIuMCAyMDAxXzAzXzA1IGdyZWcga3JvYWgtaGFydG1hbgorICoJLSByZXdvcmtlZCBlbnRpcmUgZHJpdmVyIHRvIGZpdCBwcm9wZXJseSBpbiB3aXRoIHRoZSBvdGhlciB1c2Itc2VyaWFsCisgKgkgIGRyaXZlcnMuICBPY2Nhc2lvbmFsIG9vcHNlcyBzdGlsbCBoYXBwZW4sIGJ1dCBpdCdzIGEgZ29vZCBzdGFydC4KKyAqCisgKiAxLjIuMyAoMDIvMjMvMjAwMSkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIGNoYW5nZWQgZGV2aWNlIHRhYmxlIHRvIHdvcmsgcHJvcGVybHkgZm9yIDIuNC54IGZpbmFsIGZvcm1hdC4KKyAqCS0gZml4ZWQgcHJvYmxlbSB3aXRoIGRyb3BwaW5nIGRhdGEgYXQgaGlnaCBkYXRhIHJhdGVzLgorICoKKyAqIDEuMi4yICgxMS8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gY2xlYW5lZCB1cCBtb3JlIE5UaXNtcy4KKyAqCS0gQWRkZWQgZGV2aWNlIHRhYmxlIGZvciAyLjQuMC10ZXN0MTEKKyAqCisgKiAxLjIuMSAoMTEvMDgvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIFN0YXJ0ZWQgdG8gY2xlYW4gdXAgTlRpc21zLgorICoJLSBGaXhlZCBwcm9ibGVtIHdpdGggZGV2IGZpZWxkIG9mIHVyYiBmb3Iga2VybmVscyA+PSAyLjQuMC10ZXN0OQorICoKKyAqIDEuMiAoMTAvMTcvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAJUmVtb3ZlIGFsbCBFUElDIGNvZGUgYW5kIEdQTCBzb3VyY2UKKyAqICBGaXggUkVMRVZBTlRfSUZMQUcgbWFjcm8gdG8gaW5jbHVkZSBmbG93IGNvbnRyb2wgCisgKiAgY2hhbmdlcyBwb3J0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKyAqICBGaXggcmVkZWZpbml0aW9uIG9mIFNFUklBTF9NQUdJQworICogIENoYW5nZSBhbGwgdGltZW91dCB2YWx1ZXMgdG8gNSBzZWNvbmRzCisgKiAgVHJpZWQgdG8gZml4IHRoZSBVSENJIG11bHRpcGxlIHVyYiBzdWJtaXNzaW9uLCBidXQgZmFpbGVkIG1pc2VyYWJseS4KKyAqICBpdCBzZWVtcyB0byB3b3JrIGZpbmUgd2l0aCBPSENJLgorICogICggR3JlZyB0YWtlIGEgbG9vayBhdCB0aGUgI2lmIDAgYXQgZW5kIG9mIFdyaXRlQ21kVXNiKCkgd2UgbXVzdCAKKyAqICAgIGZpbmQgYSB3YXkgdG8gd29yayBhcm91bnQgdGhpcyBVSENJIGJ1ZyApCisgKgorICogMS4xICgxMC8xMS8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBGaXggWE9OL1hPRkYgZmxvdyBjb250cm9sIHRvIHN1cHBvcnQgYm90aCBJWE9OIGFuZCBJWE9GRgorICoKKyAqIDAuOS4yNyAoMDYvMzAvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgQWRkZWQgdHJhbnNtaXQgcXVldWUgYW5kIG5vdyBhbGxvY2F0ZSB1cmIgZm9yIGNvbW1hbmQgd3JpdGVzLgorICoKKyAqIDAuOS4yNiAoMDYvMjkvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgQWRkIHN1cHBvcnQgZm9yIDgwMjUxIGJhc2VkIGVkZ2Vwb3J0CisgKgorICogMC45LjI1ICgwNi8yNy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBEbyBub3QgY2xvc2UgdGhlIHBvcnQgaWYgaXQgaGFzIG11bHRpcGxlIG9wZW5zLgorICoKKyAqIDAuOS4yNCAoMDUvMjYvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgQWRkIElPQ1RMcyB0byBzdXBwb3J0IFJYVFggYW5kIEpBVkEgUE9TIAorICogIGFuZCBmaXJzdCBjdXQgYXQgcnVubmluZyBCbGFja0JveCBEZW1vCisgKgorICogMC45LjIzICgwNS8yNC8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBBZGQgSU9DVExzIHRvIHN1cHBvcnQgUlhUWCBhbmQgSkFWQSBQT1MKKyAqCisgKiAwLjkuMjIgKDA1LzIzLzIwMDApIERhdmlkIElhY292ZWxsaQorICogIGZpeGVkIGJ1ZyBpbiBlbnVtZXJhdGlvbi4gIElmIGVwY29uZmlnIHR1cm5zIG9uIG1hcHBpbmcgYnkKKyAqICBwYXRoIGFmdGVyIGEgZGV2aWNlIGlzIGFscmVhZHkgcGx1Z2dlZCBpbiwgd2Ugbm93IHVwZGF0ZQorICogIHRoZSBtYXBwaW5nIGNvcnJlY3RseQorICoKKyAqIDAuOS4yMSAoMDUvMTYvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgQWRkZWQgQmxvY2tVbnRpbENoYXNlUmVzcCgpIHRvIGFsc28gd2FpdCBmb3IgdHhjcmVkaXRzCisgKiAgVXBkYXRlZCB0aGUgd2F5IHdlIGFsbG9jYXRlIGFuZCBoYW5kbGUgd3JpdGUgVVJCcyAKKyAqCUFkZCBkZWJ1ZyBjb2RlIHRvIGR1bXAgYnVmZmVycworICoKKyAqIDAuOS4yMCAoMDUvMDEvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKgljaGFuZ2UgZHJpdmVyIHRvIHVzZSB1c2IvdHRzLworICoKKyAqIDAuOS4xOSAoMDUvMDEvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgVXBkYXRlIGNvZGUgdG8gY29tcGlsZSBpZiBERUJVRyBpcyBvZmYKKyAqCisgKiAwLjkuMTggKDA0LzI4LzIwMDApIERhdmlkIElhY292ZWxsaQorICogIGNsZWFudXAgYW5kIHRlc3QgdHR5X3JlZ2lzdGVyIHdpdGggZGV2ZnMKKyAqCisgKiAwLjkuMTcgKDA0LzI3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICogCWNoYW5nZWQgdHR5X3JlZ2lzdGVyIGFyb3VuZCB0byBiZSBsaWtlIHRoZSB3YXkgaXQKKyAqIAl3YXMgYmVmb3JlLCBidXQgbm93IGl0IHdvcmtzIHByb3Blcmx5IHdpdGggZGV2ZnMuCisgKgorICogMC45LjE2ICgwNC8yNi8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqICBGaXhlZCBidWcgaW4gR2V0UHJvZHVjdEluZm8oKQorICoKKyAqIDAuOS4xNSAoMDQvMjUvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKglVcGRhdGVkIGVudW1lcmF0aW9uCisgKgorICogMC45LjE0ICgwNC8yNC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqICBSZW1vdmVkIGFsbCBjb25maWcvc3RhdHVzIElPQ1RMUyBhbmQgCisgKiAgY29udmVydGVkIHRvIHVzaW5nIC9wcm9jL2VkZ2Vwb3J0CisgKiAgc3RpbGwgcGxheWluZyB3aXRoIGRldmZzCisgKgorICogMC45LjEzICgwNC8yNC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqICBSZW1vdmVkIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdHR5VVNCMAorICogIEFkZGVkIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gdXNpbmcgL3Byb2QvZWRnZXBvcnQKKyAqICBmaXJzdCBhdHRlbXB0IGF0IHVzaW5nIGRldmZzIChub3Qgd29ya2luZyB5ZXQhKQorICogIEFkZGVkIElPQ1RMIHRvIEdldFByb2R1Y3RJbmZvKCkKKyAqICBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gYmF1ZCByYXRlcworICoJQWRkIHN1cHBvcnQgZm9yIHJhbmRvbSBwb3J0IG51bWJlcnMKKyAqCisgKiAwLjkuMTIgKDA0LzE4LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICoJYWRkZWQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIElPQ1RMcworICogIHVzZSB0dHlVU0IwIGZvciBjb25maWd1cmF0aW9uCisgKgorICogMC45LjExICgwNC8xNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCWZpeGVkIG1vZHVsZSBpbml0aWFsaXphdGlvbiByYWNlIGNvbmRpdGlvbnMuCisgKgltYWRlIGFsbCB1cmJzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KKyAqCW1hZGUgZHJpdmVyIGRldmZzIGNvbXBhdGlibGUuIG5vdyBpdCBvbmx5IHJlZ2lzdGVycyB0aGUgdHR5IGRldmljZQorICoJd2hlbiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHBsdWdnZWQgaW4uCisgKgorICogMC45LjEwICgwNC8xMy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCWFkZGVkIHByb2MgaW50ZXJmYWNlIGZyYW1ld29yay4KKyAqCisgKiAwLjkuOSAoMDQvMTMvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKglhZGRlZCBlbnVtZXJhdGlvbiBjb2RlIGFuZCBpb2N0bHMgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UKKyAqCisgKiAwLjkuOCAoMDQvMTIvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKiAgQ2hhbmdlIGludGVycnVwdCByZWFkIHN0YXJ0IHdoZW4gZGV2aWNlIGlzIHBsdWdnZWQgaW4KKyAqICBhbmQgc3RvcCB3aGVuIGRldmljZSBpcyByZW1vdmVkCisgKglwcm9jZXNzIGludGVycnVwdCByZWFkcyB3aGVuIGFsbCBwb3J0cyBhcmUgY2xvc2VkIAorICogIChrZWVwIHZhbHVlIG9mIHJ4Qnl0ZXNBdmFpbCBjb25zaXN0ZW50IHdpdGggdGhlIGVkZ2Vwb3J0KQorICogIHNldCB0aGUgVVNCX0JVTEtfUVVFVUUgZmxhZyBzbyB0aGF0IHdlIGNhbiBzaG92ZSBhIGJ1bmNoIAorICogIG9mIHVyYnMgYXQgb25jZSBkb3duIHRoZSBwaXBlIAorICoKKyAqIDAuOS43ICgwNC8xMC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqIAlzdGFydCB0byBhZGQgZW51bWVyYXRpb24gY29kZS4KKyAqICBnZW5lcmF0ZSBzZXJpYWwgbnVtYmVyIGZvciBlcGljIGRldmljZXMKKyAqICBhZGQgc3VwcG9ydCBmb3Iga2RiCisgKgorICogMC45LjYgKDAzLzMwLzIwMDApIGRhdmlkIGlhY292ZWxsaQorICogIGFkZCBJT0NUTCB0byBnZXQgc3RyaW5nLCBtYW51ZmFjdHVyZSwgYW5kIGJvb3QgZGVzY3JpcHRvcnMKKyAqCisgKiAwLjkuNSAoMDMvMTQvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgltb3JlIGVycm9yIGNoZWNraW5nIGFkZGVkIHRvIFNlcmlhbE9wZW4gdG8gdHJ5IHRvIGZpeCBVSENJIG9wZW4gcHJvYmxlbQorICoKKyAqIDAuOS40ICgwMy8wOS8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCWFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gaGFuZGxlIG9vcHMgd2hlbiBkYXRhIGlzIGhhbmdpbmcKKyAqCWFyb3VuZCBhbmQgdHR5IGlzIGFicnVwdGx5IGNsb3NlZC4KKyAqCisgKiAwLjkuMyAoMDMvMDkvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKglBZGQgZXBpYyBzdXBwb3J0IGZvciB4b24veG9mZiBjaGFycworICoJcGxheSB3aXRoIHBlcmZvcm1hbmNlCisgKgorICogMC45LjIgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJY2hhbmdlZCBtb3N0ICJpbmZvIiBjYWxscyB0byAiZGJnIgorICoJaW1wbGVtZW50ZWQgZmxvdyBjb250cm9sIHByb3Blcmx5IGluIHRoZSB0ZXJtaW9zIGNhbGwKKyAqCisgKiAwLjkuMSAoMDMvMDgvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKglhZGRlZCBFUElDIHN1cHBvcnQKKyAqCWVuYWJsZWQgYm9vdGxvYWRlciB1cGRhdGUKKyAqCisgKiAwLjkgKDAzLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KKyAqCUludGVncmF0ZWQgY2hhbmdlcyB0aGF0IERhdmlkIG1hZGUKKyAqICBtYWRlIGdldHRpbmcgdXJicyBmb3Igd3JpdGluZyBTTVAgc2FmZQorICoKKyAqIDAuOCAoMDMvMDcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgorICoJRml4ZWQgcHJvYmxlbXMgdGhhdCB3ZXJlIHNlZW4gaW4gY29kZSBieSBEYXZpZC4KKyAqICBOb3cgYm90aCBFZGdlcG9ydC80IGFuZCBFZGdlcG9ydC8yIHdvcmtzIHByb3Blcmx5LgorICogIENoYW5nZWQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIHRvIHVzZSBwb3J0IGluc3RlYWQgb2Ygc2VyaWFsLgorICoKKyAqIDAuNyAoMDIvMjcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglNaWxlc3RvbmUgMyByZWxlYXNlLgorICoJUmVsZWFzZSB0byBJTyBOZXR3b3JrcworICoJaW9jdGwgZm9yIHdhaXRpbmcgb24gbGluZSBjaGFuZ2UgaW1wbGVtZW50ZWQuCisgKglpb2N0bCBmb3IgZ2V0dGluZyBzdGF0aXN0aWNzIGltcGxlbWVudGVkLgorICoJbXVsdGlwb3J0IHN1cHBvcnQgd29ya2luZy4KKyAqCWxzciBhbmQgbXNyIHJlZ2lzdGVycyBhcmUgbm93IGhhbmRsZWQgcHJvcGVybHkuCisgKgljaGFuZ2UgYnJlYWsgbm93IGhvb2tlZCB1cCBhbmQgd29ya2luZy4KKyAqCXN1cHBvcnQgZm9yIGFsbCBrbm93biBFZGdlcG9ydCBkZXZpY2VzLgorICoKKyAqIDAuNiAoMDIvMjIvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgorICoJQ0hBU0UgaXMgaW1wbGVtZW50ZWQgY29ycmVjdGx5IHdoZW4gcG9ydCBpcyBjbG9zZWQuCisgKglTZXJpYWxPcGVuIG5vdyBibG9ja3MgY29ycmVjdGx5IHVudGlsIHBvcnQgaXMgZnVsbHkgb3BlbmVkLgorICoKKyAqIDAuNSAoMDIvMjAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglSZWxlYXNlIHRvIElPIG5ldHdvcmtzLgorICoJS25vd24gcHJvYmxlbXM6CisgKgkJbW9kZW0gc3RhdHVzIHJlZ2lzdGVyIGNoYW5nZXMgYXJlIG5vdCBzZW50IG9uIHRvIHRoZSB1c2VyCisgKgkJQ0hBU0UgaXMgbm90IGltcGxlbWVudGVkIHdoZW4gdGhlIHBvcnQgaXMgY2xvc2VkLgorICoKKyAqIDAuNCAoMDIvMTYvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglTZWNvbmQgY3V0IGF0IHRoZSBDZUJpdCBkZW1vLgorICoJRG9lc24ndCBsZWFrIG1lbW9yeSBvbiBldmVyeSB3cml0ZSB0byB0aGUgcG9ydAorICoJU3RpbGwgc21hbGwgbGVha3Mgb24gc3RhcnR1cC4KKyAqCUFkZGVkIHN1cHBvcnQgZm9yIEVkZ2Vwb3J0LzIgYW5kIEVkZ2Vwb3J0LzgKKyAqCisgKiAwLjMgKDAyLzE1LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJQ2VCaXQgZGVtbyByZWxlYXNlLgorICoJRm9yY2UgdGhlIGxpbmUgc2V0dGluZ3MgdG8gNDgwMCwgOCwgMSwgZSBmb3IgdGhlIGRlbW8uCisgKglXYXJuaW5nISBUaGlzIHZlcnNpb24gbGVha3MgbWVtb3J5IGxpa2UgY3JhenkhCisgKgorICogMC4yICgwMS8zMC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCU1pbGVzdG9uZSAxIHJlbGVhc2UuCisgKglEZXZpY2UgaXMgZm91bmQgYnkgVVNCIHN1YnN5c3RlbSwgZW51bWVyYXRlZCwgZmltd2FyZSBpcyBkb3dubG9hZGVkCisgKglhbmQgdGhlIGRlc2NyaXB0b3JzIGFyZSBwcmludGVkIHRvIHRoZSBkZWJ1ZyBsb2csIGNvbmZpZyBpcyBzZXQsIGFuZAorICoJZ3JlZW4gbGlnaHQgc3RhcnRzIHRvIGJsaW5rLiBPcGVuIHBvcnQgd29ya3MsIGFuZCBkYXRhIGNhbiBiZSBzZW50CisgKglhbmQgcmVjZWl2ZWQgYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIFVBUlQuIExvb3BiYWNrIGNvbm5lY3RvcgorICoJYW5kIGRlYnVnIGxvZyBjb25maXJtcyB0aGlzLgorICogCisgKiAwLjEgKDAxLzIzLzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJSW5pdGlhbCByZWxlYXNlIHRvIGhlbHAgSU8gTmV0d29ya3MgdHJ5IHRvIHNldCB1cCB0aGVpciB0ZXN0IHN5c3RlbS4gCisgKglFZGdlcG9ydDQgaXMgcmVjb2duaXplZCwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCwgY29uZmlnIGlzIHNldCBzbyAKKyAqCWRldmljZSBibGlua3MgZ3JlZW4gbGlnaHQgZXZlcnkgMyBzZWMuIFBvcnQgaXMgYm91bmQsIGJ1dCBvcGVuaW5nLAorICoJY2xvc2luZywgYW5kIHNlbmRpbmcgZGF0YSBkbyBub3Qgd29yayBwcm9wZXJseS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAiaW9fZWRnZXBvcnQuaCIKKyNpbmNsdWRlICJpb19pb25zcC5oIgkJLyogaW5mbyBmb3IgdGhlIGlvc3AgbWVzc2FnZXMgKi8KKyNpbmNsdWRlICJpb18xNjY1NC5oIgkJLyogMTY2NTQgVUFSVCBkZWZpbmVzICovCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjciCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZCBEYXZpZCBJYWNvdmVsbGkiCisjZGVmaW5lIERSSVZFUl9ERVNDICJFZGdlcG9ydCBVU0IgU2VyaWFsIERyaXZlciIKKworLyogRmlyc3QsIHRoZSBsYXRlc3QgYm9vdCBjb2RlIC0gZm9yIGZpcnN0IGdlbmVyYXRpb24gZWRnZXBvcnRzICovCisjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJQm9vdENvZGVJbWFnZV9HRU4xCisjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlCb290Q29kZUltYWdlVmVyc2lvbl9HRU4xCisjaW5jbHVkZSAiaW9fZndfYm9vdC5oIgkJLyogdGhlIGJvb3Rsb2FkZXIgZmlybXdhcmUgdG8gZG93bmxvYWQgdG8gYSBkZXZpY2UsIGlmIGl0IG5lZWRzIGl0ICovCisKKy8qIGZvciBzZWNvbmQgZ2VuZXJhdGlvbiBlZGdlcG9ydHMgKi8KKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlCb290Q29kZUltYWdlX0dFTjIKKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCUJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjIKKyNpbmNsdWRlICJpb19md19ib290Mi5oIgkvKiB0aGUgYm9vdGxvYWRlciBmaXJtd2FyZSB0byBkb3dubG9hZCB0byBhIGRldmljZSwgaWYgaXQgbmVlZHMgaXQgKi8KKworLyogVGhlbiBmaW5hbGx5IHRoZSBtYWluIHJ1bi10aW1lIG9wZXJhdGlvbmFsIGNvZGUgLSBmb3IgZmlyc3QgZ2VuZXJhdGlvbiBlZGdlcG9ydHMgKi8KKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4xCisjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMQorI2luY2x1ZGUgImlvX2Z3X2Rvd24uaCIJCS8qIERlZmluZSBhcnJheSBPcGVyYXRpb25hbENvZGVJbWFnZVtdICovCisKKy8qIGZvciBzZWNvbmQgZ2VuZXJhdGlvbiBlZGdlcG9ydHMgKi8KKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4yCisjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMgorI2luY2x1ZGUgImlvX2Z3X2Rvd24yLmgiCS8qIERlZmluZSBhcnJheSBPcGVyYXRpb25hbENvZGVJbWFnZVtdICovCisKKyNkZWZpbmUgTUFYX05BTUVfTEVOCQk2NAorCisjZGVmaW5lIENIQVNFX1RJTUVPVVQJCSg1KkhaKQkJLyogNSBzZWNvbmRzICovCisjZGVmaW5lIE9QRU5fVElNRU9VVAkJKDUqSFopCQkvKiA1IHNlY29uZHMgKi8KKyNkZWZpbmUgQ09NTUFORF9USU1FT1VUCQkoNSpIWikJCS8qIDUgc2Vjb25kcyAqLworCisvKiByZWNlaXZlIHBvcnQgc3RhdGUgKi8KK2VudW0gUlhTVEFURSB7CisJRVhQRUNUX0hEUjEgPSAwLAkvKiBFeHBlY3QgaGVhZGVyIGJ5dGUgMSAqLworCUVYUEVDVF9IRFIyID0gMSwJLyogRXhwZWN0IGhlYWRlciBieXRlIDIgKi8KKwlFWFBFQ1RfREFUQSA9IDIsCS8qIEV4cGVjdCAnUnhCeXRlc1JlbWFpbmluZycgZGF0YSAqLworCUVYUEVDVF9IRFIzID0gMywJLyogRXhwZWN0IGhlYWRlciBieXRlIDMgKGZvciBzdGF0dXMgaGRycyBvbmx5KSAqLworfTsKKworCisvKiBUcmFuc21pdCBGaWZvIAorICogVGhpcyBUcmFuc21pdCBxdWV1ZSBpcyBhbiBleHRlbnNpb24gb2YgdGhlIGVkZ2Vwb3J0IFJ4IGJ1ZmZlci4gCisgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZCBpbiBib3RoIHRoZSBlZGdlcG9ydCAKKyAqIFJ4IGJ1ZmZlciAobWF4VHhDcmVkaXRzKSBhbmQgdGhpcyBidWZmZXIgd2lsbCBuZXZlciBleGNlZWQgbWF4VHhDcmVkaXRzLgorICovCitzdHJ1Y3QgVHhGaWZvIHsKKwl1bnNpZ25lZCBpbnQJaGVhZDsJLyogaW5kZXggdG8gaGVhZCBwb2ludGVyICh3cml0ZSkgKi8KKwl1bnNpZ25lZCBpbnQJdGFpbDsJLyogaW5kZXggdG8gdGFpbCBwb2ludGVyIChyZWFkKSAgKi8KKwl1bnNpZ25lZCBpbnQJY291bnQ7CS8qIEJ5dGVzIGluIHF1ZXVlICovCisJdW5zaWduZWQgaW50CXNpemU7CS8qIE1heCBzaXplIG9mIHF1ZXVlIChlcXVhbCB0byBNYXggbnVtYmVyIG9mIFR4Q3JlZGl0cykgKi8KKwl1bnNpZ25lZCBjaGFyCSpmaWZvOwkvKiBhbGxvY2F0ZWQgQnVmZmVyICovCit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgb2YgdGhlIGxvY2FsIHBvcnQgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBlZGdlcG9ydF9wb3J0IHsKKwlfX3UxNgkJCXR4Q3JlZGl0czsJCS8qIG91ciBjdXJyZW50IGNyZWRpdHMgZm9yIHRoaXMgcG9ydCAqLworCV9fdTE2CQkJbWF4VHhDcmVkaXRzOwkJLyogdGhlIG1heCBzaXplIG9mIHRoZSBwb3J0ICovCisKKwlzdHJ1Y3QgVHhGaWZvCQl0eGZpZm87CQkJLyogdHJhbnNtaXQgZmlmbyAtLSBzaXplIHdpbGwgYmUgbWF4VHhDcmVkaXRzICovCisJc3RydWN0IHVyYgkJKndyaXRlX3VyYjsJCS8qIHdyaXRlIFVSQiBmb3IgdGhpcyBwb3J0ICovCisJY2hhcgkJCXdyaXRlX2luX3Byb2dyZXNzOwkvKiBUUlVFIHdoaWxlIGEgd3JpdGUgVVJCIGlzIG91dHN0YW5kaW5nICovCisJc3BpbmxvY2tfdAkJZXBfbG9jazsKKworCV9fdTgJCQlzaGFkb3dMQ1I7CQkvKiBsYXN0IExDUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTgJCQlzaGFkb3dNQ1I7CQkvKiBsYXN0IE1DUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTgJCQlzaGFkb3dNU1I7CQkvKiBsYXN0IE1TUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTgJCQlzaGFkb3dMU1I7CQkvKiBsYXN0IExTUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTgJCQlzaGFkb3dYb25DaGFyOwkJLyogbGFzdCB2YWx1ZSBzZXQgYXMgWE9OIGNoYXIgaW4gRWRnZXBvcnQgKi8KKwlfX3U4CQkJc2hhZG93WG9mZkNoYXI7CQkvKiBsYXN0IHZhbHVlIHNldCBhcyBYT0ZGIGNoYXIgaW4gRWRnZXBvcnQgKi8KKwlfX3U4CQkJdmFsaWREYXRhTWFzazsKKwlfX3UzMgkJCWJhdWRSYXRlOworCisJY2hhcgkJCW9wZW47CisJY2hhcgkJCW9wZW5QZW5kaW5nOworCWNoYXIJCQljb21tYW5kUGVuZGluZzsKKwljaGFyCQkJY2xvc2VQZW5kaW5nOworCWNoYXIJCQljaGFzZVJlc3BvbnNlUGVuZGluZzsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY2hhc2U7CQkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgY2hhc2UgdG8gZmluaXNoICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9vcGVuOwkJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIG9wZW4gdG8gZmluaXNoICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jb21tYW5kOwkJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGNvbW1hbmQgdG8gZmluaXNoICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7CQkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgbXNyIGNoYW5nZSB0byBoYXBwZW4gKi8KKworCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQ7CQkJLyogbG9vcCBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIG9iamVjdCAqLworfTsKKworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZGV2aWNlIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsIHsKKwljaGFyCQkJbmFtZVtNQVhfTkFNRV9MRU4rMV07CQkvKiBzdHJpbmcgbmFtZSBvZiB0aGlzIGRldmljZSAqLworCisJc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvcgltYW51Zl9kZXNjcmlwdG9yOwkvKiB0aGUgbWFudWZhY3R1cmVyIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgZWRnZV9ib290X2Rlc2NyaXB0b3IJYm9vdF9kZXNjcmlwdG9yOwkvKiB0aGUgYm9vdCBmaXJtd2FyZSBkZXNjcmlwdG9yICovCisJc3RydWN0IGVkZ2Vwb3J0X3Byb2R1Y3RfaW5mbwlwcm9kdWN0X2luZm87CQkvKiBQcm9kdWN0IEluZm8gKi8KKworCV9fdTgJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CQkvKiB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGhhbmRsZSAqLworCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgaW50ZXJydXB0IGVuZHBvaW50ICovCisJc3RydWN0IHVyYiAqCQlpbnRlcnJ1cHRfcmVhZF91cmI7CQkvKiBvdXIgaW50ZXJydXB0IHVyYiAqLworCisJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnQ7CQkvKiB0aGUgYnVsayBpbiBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfaW5fYnVmZmVyOwkJCS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIgKgkJcmVhZF91cmI7CQkJLyogb3VyIGJ1bGsgcmVhZCB1cmIgKi8KKwlpbnQJCQlyZWFkX2luX3Byb2dyZXNzOworCXNwaW5sb2NrX3QJCWVzX2xvY2s7CisKKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnQ7CQkvKiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgaGFuZGxlICovCisKKwlfX3MxNgkJCXJ4Qnl0ZXNBdmFpbDsJCQkvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2UgbmVlZCB0byByZWFkIGZyb20gdGhpcyBkZXZpY2UgKi8KKworCWVudW0gUlhTVEFURQkJcnhTdGF0ZTsJCQkvKiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnVsayByZWNlaXZlIHByb2Nlc3NvciAqLworCV9fdTgJCQlyeEhlYWRlcjE7CQkJLyogcmVjZWl2ZSBoZWFkZXIgYnl0ZSAxICovCisJX191OAkJCXJ4SGVhZGVyMjsJCQkvKiByZWNlaXZlIGhlYWRlciBieXRlIDIgKi8KKwlfX3U4CQkJcnhIZWFkZXIzOwkJCS8qIHJlY2VpdmUgaGVhZGVyIGJ5dGUgMyAqLworCV9fdTgJCQlyeFBvcnQ7CQkJCS8qIHRoZSBwb3J0IHRoYXQgd2UgYXJlIGN1cnJlbnRseSByZWNlaXZpbmcgZGF0YSBmb3IgKi8KKwlfX3U4CQkJcnhTdGF0dXNDb2RlOwkJCS8qIHRoZSByZWNlaXZlIHN0YXR1cyBjb2RlICovCisJX191OAkJCXJ4U3RhdHVzUGFyYW07CQkJLyogdGhlIHJlY2VpdmUgc3RhdHVzIHBhcmFtYXRlciAqLworCV9fczE2CQkJcnhCeXRlc1JlbWFpbmluZzsJCS8qIHRoZSBudW1iZXIgb2YgcG9ydCBieXRlcyBsZWZ0IHRvIHJlYWQgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsOwkJCS8qIGxvb3AgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBvYmplY3QgKi8KK307CisKKy8qIGJhdWQgcmF0ZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IGRpdmlzb3JfdGFibGVfZW50cnkgeworCV9fdTMyICAgQmF1ZFJhdGU7CisJX191MTYgIERpdmlzb3I7Cit9OworCisvLworLy8gRGVmaW5lIHRhYmxlIG9mIGRpdmlzb3JzIGZvciBSZXYgQSBFZGdlUG9ydC80IGhhcmR3YXJlCisvLyBUaGVzZSBhc3N1bWUgYSAzLjY4NjRNSHogY3J5c3RhbCwgdGhlIHN0YW5kYXJkIC8xNiwgYW5kCisvLyBNQ1IuNyA9IDAuCisvLworc3RhdGljIHN0cnVjdCBkaXZpc29yX3RhYmxlX2VudHJ5IGRpdmlzb3JfdGFibGVbXSA9IHsKKwl7ICAgNTAsCQk0NjA4fSwgIAorCXsgICA3NSwJCTMwNzJ9LCAgCisJeyAgIDExMCwJMjA5NX0sCQkvKiAyMDk0LjU0NTQ1NSA9PiAyMzA0NTAgICA9PiAuMDIxNyAlIG92ZXIgKi8KKwl7ICAgMTM0LAkxNzEzfSwJCS8qIDE3MTMuMDExMTUyID0+IDIzMDM5OC41ID0+IC4wMDA2NSUgdW5kZXIgKi8KKwl7ICAgMTUwLAkxNTM2fSwKKwl7ICAgMzAwLAk3Njh9LAorCXsgICA2MDAsCTM4NH0sCisJeyAgIDEyMDAsCTE5Mn0sCisJeyAgIDE4MDAsCTEyOH0sCisJeyAgIDI0MDAsCTk2fSwKKwl7ICAgNDgwMCwJNDh9LAorCXsgICA3MjAwLAkzMn0sCisJeyAgIDk2MDAsCTI0fSwKKwl7ICAgMTQ0MDAsCTE2fSwKKwl7ICAgMTkyMDAsCTEyfSwKKwl7ICAgMzg0MDAsCTZ9LAorCXsgICA1NzYwMCwJNH0sCisJeyAgIDExNTIwMCwJMn0sCisJeyAgIDIzMDQwMCwJMX0sCit9OworCisvKiBsb2NhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBpbnQgbG93X2xhdGVuY3kgPSAxOwkvKiB0dHkgbG93IGxhdGVuY3kgZmxhZywgb24gYnkgZGVmYXVsdCAqLworCitzdGF0aWMgaW50IENtZFVyYnMgPSAwOwkJLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIENvbW1hbmQgV3JpdGUgVXJicyAqLworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWxsIFVSQiBjYWxsYmFja3MgKi8KK3N0YXRpYyB2b2lkIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19pbl9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgdXNic2VyaWFsIGNhbGxiYWNrcyAqLworc3RhdGljIGludCAgZWRnZV9vcGVuCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGVkZ2VfY2xvc2UJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgZWRnZV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICBlZGdlX3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGVkZ2VfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGVkZ2VfdW50aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgaW50ICBlZGdlX2lvY3RsCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBlZGdlX2JyZWFrCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50ICBlZGdlX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgZWRnZV90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAgZWRnZV9zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBlZGdlX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKKworI2luY2x1ZGUgImlvX3RhYmxlcy5oIgkvKiBhbGwgb2YgdGhlIGRldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaW9fZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJpb19lZGdlcG9ydCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZV9jb21iaW5lZCwKK307CisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFsbCBvZiBvdXIgbG9jYWwgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCAgcHJvY2Vzc19yY3ZkX2RhdGEJCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBfX3UxNiBidWZmZXJMZW5ndGgpOworc3RhdGljIHZvaWQgcHJvY2Vzc19yY3ZkX3N0YXR1cwkJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCBfX3U4IGJ5dGUyLCBfX3U4IGJ5dGUzKTsKK3N0YXRpYyB2b2lkIGVkZ2VfdHR5X3JlY3YJCQkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbXNyCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBuZXdNc3IpOworc3RhdGljIHZvaWQgaGFuZGxlX25ld19sc3IJCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGxzckRhdGEsIF9fdTggbHNyLCBfX3U4IGRhdGEpOworc3RhdGljIGludCAgc2VuZF9pb3NwX2V4dF9jbWQJCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGNvbW1hbmQsIF9fdTggcGFyYW0pOworc3RhdGljIGludCAgY2FsY19iYXVkX3JhdGVfZGl2aXNvcgkoaW50IGJhdWRfcmF0ZSwgaW50ICpkaXZpc29yKTsKK3N0YXRpYyBpbnQgIHNlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgaW50IGJhdWRSYXRlKTsKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCAgc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3Rlcgkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCByZWdOdW0sIF9fdTggcmVnVmFsdWUpOworc3RhdGljIGludCAgd3JpdGVfY21kX3VzYgkJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHdyaXRlTGVuZ3RoKTsKK3N0YXRpYyB2b2lkIHNlbmRfbW9yZV9wb3J0X2RhdGEJCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCk7CisKK3N0YXRpYyBpbnQgIHNyYW1fd3JpdGUJCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKTsKK3N0YXRpYyBpbnQgIHJvbV9yZWFkCQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSk7CitzdGF0aWMgaW50ICByb21fd3JpdGUJCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKTsKK3N0YXRpYyB2b2lkIGdldF9tYW51ZmFjdHVyaW5nX2Rlc2MJKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGdldF9ib290X2Rlc2MJCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCk7CitzdGF0aWMgdm9pZCBsb2FkX2FwcGxpY2F0aW9uX2Zpcm13YXJlCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCk7CisKK3N0YXRpYyB2b2lkIHVuaWNvZGVfdG9fYXNjaWkJCShjaGFyICpzdHJpbmcsIF9fbGUxNiAqdW5pY29kZSwgaW50IHVuaWNvZGVfc2l6ZSk7CisKKworLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJKgorICogdXBkYXRlX2VkZ2Vwb3J0X0UyUFJPTSgpCUNvbXBhcmUgY3VycmVudCB2ZXJzaW9ucyBvZgkJKgorICoJCQkJQm9vdCBST00gYW5kIE1hbnVmYWN0dXJlIAkJKgorICoJCQkJRGVzY3JpcHRvcnMgd2l0aCB2ZXJzaW9ucwkJKgorICoJCQkJZW1iZWRkZWQgaW4gdGhpcyBkcml2ZXIJCQkqCisgKgkJCQkJCQkJCSoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCB1cGRhdGVfZWRnZXBvcnRfRTJQUk9NIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3sKKwlfX3UzMiBCb290Q3VyVmVyOworCV9fdTMyIEJvb3ROZXdWZXI7CisJX191OCBCb290TWFqb3JWZXJzaW9uOyAgICAgICAgICAgICAgICAgIAorCV9fdTggQm9vdE1pbm9yVmVyc2lvbjsgICAgICAgICAgICAgICAgICAKKwlfX2xlMTYgQm9vdEJ1aWxkTnVtYmVyOworCV9fdTggKkJvb3RJbWFnZTsgICAgICAKKwlfX3UzMiBCb290U2l6ZTsKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgKnJlY29yZDsKKwl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZTsKKwlpbnQgcmVzcG9uc2U7CisKKworCXN3aXRjaCAoZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5pRG93bmxvYWRGaWxlKSB7CisJCWNhc2UgRURHRV9ET1dOTE9BRF9GSUxFX0k5MzA6CisJCQlCb290TWFqb3JWZXJzaW9uCT0gQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMS5NYWpvclZlcnNpb247CisJCQlCb290TWlub3JWZXJzaW9uCT0gQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMS5NaW5vclZlcnNpb247CisJCQlCb290QnVpbGROdW1iZXIJCT0gY3B1X3RvX2xlMTYoQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMS5CdWlsZE51bWJlcik7CisJCQlCb290SW1hZ2UJCT0gJkJvb3RDb2RlSW1hZ2VfR0VOMVswXTsKKwkJCUJvb3RTaXplCQk9IHNpemVvZiggQm9vdENvZGVJbWFnZV9HRU4xICk7CisJCQlicmVhazsKKworCQljYXNlIEVER0VfRE9XTkxPQURfRklMRV84MDI1MToKKwkJCUJvb3RNYWpvclZlcnNpb24JPSBCb290Q29kZUltYWdlVmVyc2lvbl9HRU4yLk1ham9yVmVyc2lvbjsKKwkJCUJvb3RNaW5vclZlcnNpb24JPSBCb290Q29kZUltYWdlVmVyc2lvbl9HRU4yLk1pbm9yVmVyc2lvbjsKKwkJCUJvb3RCdWlsZE51bWJlcgkJPSBjcHVfdG9fbGUxNihCb290Q29kZUltYWdlVmVyc2lvbl9HRU4yLkJ1aWxkTnVtYmVyKTsKKwkJCUJvb3RJbWFnZQkJPSAmQm9vdENvZGVJbWFnZV9HRU4yWzBdOworCQkJQm9vdFNpemUJCT0gc2l6ZW9mKCBCb290Q29kZUltYWdlX0dFTjIgKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJfQorCisJLy8gQ2hlY2sgQm9vdCBJbWFnZSBWZXJzaW9uCisJQm9vdEN1clZlciA9IChlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1ham9yVmVyc2lvbiA8PCAyNCkgKworCQkgICAgIChlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1pbm9yVmVyc2lvbiA8PCAxNikgKworCQkgICAgICBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyKTsKKworCUJvb3ROZXdWZXIgPSAoQm9vdE1ham9yVmVyc2lvbiA8PCAyNCkgKworCQkgICAgIChCb290TWlub3JWZXJzaW9uIDw8IDE2KSArCisJCSAgICAgIGxlMTZfdG9fY3B1KEJvb3RCdWlsZE51bWJlcik7CisKKwlkYmcoIkN1cnJlbnQgQm9vdCBJbWFnZSB2ZXJzaW9uICVkLiVkLiVkIiwKKwkgICAgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb24sCisJICAgIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uLAorCSAgICBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyKSk7CisKKworCWlmIChCb290TmV3VmVyID4gQm9vdEN1clZlcikgeworCQlkYmcoIioqVXBkYXRlIEJvb3QgSW1hZ2UgZnJvbSAlZC4lZC4lZCB0byAlZC4lZC4lZCIsCisJCSAgICBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1ham9yVmVyc2lvbiwKKwkJICAgIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWlub3JWZXJzaW9uLAorCQkgICAgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlciksCisJCSAgICBCb290TWFqb3JWZXJzaW9uLAorCQkgICAgQm9vdE1pbm9yVmVyc2lvbiwKKwkJICAgIGxlMTZfdG9fY3B1KEJvb3RCdWlsZE51bWJlcikpOworCisKKwkJZGJnKCJEb3dubG9hZGluZyBuZXcgQm9vdCBJbWFnZSIpOworCisJCWZpcm13YXJlID0gQm9vdEltYWdlOworCisJCWZvciAoOzspIHsKKwkJCXJlY29yZCA9IChzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgKilmaXJtd2FyZTsKKwkJCXJlc3BvbnNlID0gcm9tX3dyaXRlIChlZGdlX3NlcmlhbC0+c2VyaWFsLCBsZTE2X3RvX2NwdShyZWNvcmQtPkV4dEFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkxlbiksICZyZWNvcmQtPkRhdGFbMF0pOworCQkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAicm9tX3dyaXRlIGZhaWxlZCAoJXgsICV4LCAlZClcbiIsIGxlMTZfdG9fY3B1KHJlY29yZC0+RXh0QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+TGVuKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmaXJtd2FyZSArPSBzaXplb2YgKHN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCkgKyBsZTE2X3RvX2NwdShyZWNvcmQtPkxlbik7CisJCQlpZiAoZmlybXdhcmUgPj0gJkJvb3RJbWFnZVtCb290U2l6ZV0pIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWRiZygiQm9vdCBJbWFnZSAtLSBhbHJlYWR5IHVwIHRvIGRhdGUiKTsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCQkJCQkqCisgKiAgR2V0IHN0cmluZyBkZXNjcmlwdG9yIGZyb20gZGV2aWNlCQkJCQkqCisgKgkJCQkJCQkJCSoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGdldF9zdHJpbmcgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBJZCwgY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgU3RyaW5nRGVzYzsKKwlzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yICpwU3RyaW5nRGVzYzsKKworCWRiZygiJXMgLSBVU0IgU3RyaW5nIElEID0gJWQiLCBfX0ZVTkNUSU9OX18sIElkICk7CisKKwlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLCAmU3RyaW5nRGVzYywgc2l6ZW9mKFN0cmluZ0Rlc2MpKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlwU3RyaW5nRGVzYyA9IGttYWxsb2MgKFN0cmluZ0Rlc2MuYkxlbmd0aCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBTdHJpbmdEZXNjKSB7CisJCXJldHVybiAwOworCX0KKworCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsIHBTdHJpbmdEZXNjLCBTdHJpbmdEZXNjLmJMZW5ndGggKSkgeworCQlrZnJlZShwU3RyaW5nRGVzYyk7CisJCXJldHVybiAwOworCX0KKworCXVuaWNvZGVfdG9fYXNjaWkoc3RyaW5nLCAgcFN0cmluZ0Rlc2MtPndEYXRhLCAgICAgcFN0cmluZ0Rlc2MtPmJMZW5ndGgvMi0xKTsKKworCWtmcmVlKHBTdHJpbmdEZXNjKTsKKwlyZXR1cm4gc3RybGVuKHN0cmluZyk7Cit9CisKKworI2lmIDAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgR2V0IHN0cmluZyBkZXNjcmlwdG9yIGZyb20gZGV2aWNlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2V0X3N0cmluZ19kZXNjIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgSWQsIHN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKipwUmV0RGVzYykKK3sKKwlzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yIFN0cmluZ0Rlc2M7CisJc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciAqcFN0cmluZ0Rlc2M7CisKKwlkYmcoIiVzIC0gVVNCIFN0cmluZyBJRCA9ICVkIiwgX19GVU5DVElPTl9fLCBJZCApOworCisJaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgJlN0cmluZ0Rlc2MsIHNpemVvZihTdHJpbmdEZXNjKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcFN0cmluZ0Rlc2MgPSBrbWFsbG9jIChTdHJpbmdEZXNjLmJMZW5ndGgsIEdGUF9LRVJORUwpOworCisJaWYgKCFwU3RyaW5nRGVzYykgeworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgcFN0cmluZ0Rlc2MsIFN0cmluZ0Rlc2MuYkxlbmd0aCApKSB7CisJCWtmcmVlKHBTdHJpbmdEZXNjKTsKKwkJcmV0dXJuIC0xOworCX0KKworCSpwUmV0RGVzYyA9IHBTdHJpbmdEZXNjOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdldF9wcm9kdWN0X2luZm8oc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3Byb2R1Y3RfaW5mbyAqcHJvZHVjdF9pbmZvID0gJmVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm87CisKKwltZW1zZXQgKHByb2R1Y3RfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wcm9kdWN0X2luZm8pKTsKKworCXByb2R1Y3RfaW5mby0+UHJvZHVjdElkCQk9IChfX3UxNikobGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgJiB+SU9OX0RFVklDRV9JRF84MDI1MV9ORVRDSElQKTsKKwlwcm9kdWN0X2luZm8tPk51bVBvcnRzCQk9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLk51bVBvcnRzOworCXByb2R1Y3RfaW5mby0+UHJvZEluZm9WZXIJPSAwOworCisJcHJvZHVjdF9pbmZvLT5Sb21TaXplCQk9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJvbVNpemU7CisJcHJvZHVjdF9pbmZvLT5SYW1TaXplCQk9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJhbVNpemU7CisJcHJvZHVjdF9pbmZvLT5DcHVSZXYJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQ3B1UmV2OworCXByb2R1Y3RfaW5mby0+Qm9hcmRSZXYJCT0gZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQm9hcmRSZXY7CisKKwlwcm9kdWN0X2luZm8tPkJvb3RNYWpvclZlcnNpb24JPSBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1ham9yVmVyc2lvbjsKKwlwcm9kdWN0X2luZm8tPkJvb3RNaW5vclZlcnNpb24JPSBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1pbm9yVmVyc2lvbjsKKwlwcm9kdWN0X2luZm8tPkJvb3RCdWlsZE51bWJlcgk9IGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQnVpbGROdW1iZXI7CisKKwltZW1jcHkocHJvZHVjdF9pbmZvLT5NYW51ZmFjdHVyZURlc2NEYXRlLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZSwgc2l6ZW9mKGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlKSk7CisKKwkvLyBjaGVjayBpZiB0aGlzIGlzIDJuZCBnZW5lcmF0aW9uIGhhcmR3YXJlCisJaWYgKGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICYgSU9OX0RFVklDRV9JRF84MDI1MV9ORVRDSElQKSB7CisJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVNYWpvclZlcnNpb24JPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMi5NYWpvclZlcnNpb247CisJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVNaW5vclZlcnNpb24JPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMi5NaW5vclZlcnNpb247CisJCXByb2R1Y3RfaW5mby0+RmlybXdhcmVCdWlsZE51bWJlcgk9IGNwdV90b19sZTE2KE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yLkJ1aWxkTnVtYmVyKTsKKwkJcHJvZHVjdF9pbmZvLT5pRG93bmxvYWRGaWxlCQk9IEVER0VfRE9XTkxPQURfRklMRV84MDI1MTsKKwl9IGVsc2UgeworCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlTWFqb3JWZXJzaW9uCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuTWFqb3JWZXJzaW9uOworCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlTWlub3JWZXJzaW9uCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuTWlub3JWZXJzaW9uOworCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlQnVpbGROdW1iZXIJPSBjcHVfdG9fbGUxNihPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMS5CdWlsZE51bWJlcik7CisJCXByb2R1Y3RfaW5mby0+aURvd25sb2FkRmlsZQkJPSBFREdFX0RPV05MT0FEX0ZJTEVfSTkzMDsKKwl9CisKKwkvLyBEZXRlcm1pbmUgUHJvZHVjdCB0eXBlIGFuZCBzZXQgYXBwcm9wcmlhdGUgZmxhZ3MKKwlzd2l0Y2ggKERFVklDRV9JRF9GUk9NX1VTQl9QUk9EVUNUX0lEKHByb2R1Y3RfaW5mby0+UHJvZHVjdElkKSkgeworCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfQ09NUEFUSUJMRToKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRUOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDoKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzI6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84X0RVQUxfQ1BVOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfODoKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyMToKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMl9ESU46CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80X0RJTjoKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzE2X0RVQUxfQ1BVOgorCQkJcHJvZHVjdF9pbmZvLT5Jc1JTMjMyID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8ySToJCQkJICAgLy8gRWRnZXBvcnQvMiBSUzQyMi9SUzQ4NQorCQkJcHJvZHVjdF9pbmZvLT5Jc1JTNDIyID0gMTsKKwkJCXByb2R1Y3RfaW5mby0+SXNSUzQ4NSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOEk6CQkJCSAgIC8vIEVkZ2Vwb3J0LzQgUlM0MjIKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRJOgkJCQkgICAvLyBFZGdlcG9ydC80IFJTNDIyCisJCQlwcm9kdWN0X2luZm8tPklzUlM0MjIgPSAxOworCQkJYnJlYWs7CisJfQorCisJLy8gRHVtcCBQcm9kdWN0IEluZm8gc3RydWN0dXJlCisJZGJnKCIqKlByb2R1Y3QgSW5mb3JtYXRpb246Iik7CisJZGJnKCIgIFByb2R1Y3RJZCAgICAgICAgICAgICAleCIsIHByb2R1Y3RfaW5mby0+UHJvZHVjdElkICk7CisJZGJnKCIgIE51bVBvcnRzICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+TnVtUG9ydHMgKTsKKwlkYmcoIiAgUHJvZEluZm9WZXIgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Qcm9kSW5mb1ZlciApOworCWRiZygiICBJc1NlcnZlciAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPklzU2VydmVyKTsKKwlkYmcoIiAgSXNSUzIzMiAgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Jc1JTMjMyICk7CisJZGJnKCIgIElzUlM0MjIgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzQyMiApOworCWRiZygiICBJc1JTNDg1ICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPklzUlM0ODUgKTsKKwlkYmcoIiAgUm9tU2l6ZSAgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Sb21TaXplICk7CisJZGJnKCIgIFJhbVNpemUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+UmFtU2l6ZSApOworCWRiZygiICBDcHVSZXYgICAgICAgICAgICAgICAgJXgiLCBwcm9kdWN0X2luZm8tPkNwdVJldiAgKTsKKwlkYmcoIiAgQm9hcmRSZXYgICAgICAgICAgICAgICV4IiwgcHJvZHVjdF9pbmZvLT5Cb2FyZFJldik7CisJZGJnKCIgIEJvb3RNYWpvclZlcnNpb24gICAgICAlZC4lZC4lZCIsIHByb2R1Y3RfaW5mby0+Qm9vdE1ham9yVmVyc2lvbiwKKwkgICAgcHJvZHVjdF9pbmZvLT5Cb290TWlub3JWZXJzaW9uLAorCSAgICBsZTE2X3RvX2NwdShwcm9kdWN0X2luZm8tPkJvb3RCdWlsZE51bWJlcikpOworCWRiZygiICBGaXJtd2FyZU1ham9yVmVyc2lvbiAgJWQuJWQuJWQiLCBwcm9kdWN0X2luZm8tPkZpcm13YXJlTWFqb3JWZXJzaW9uLAorCSAgICBwcm9kdWN0X2luZm8tPkZpcm13YXJlTWlub3JWZXJzaW9uLAorCSAgICBsZTE2X3RvX2NwdShwcm9kdWN0X2luZm8tPkZpcm13YXJlQnVpbGROdW1iZXIpKTsKKwlkYmcoIiAgTWFudWZhY3R1cmVEZXNjRGF0ZSAgICVkLyVkLyVkIiwgcHJvZHVjdF9pbmZvLT5NYW51ZmFjdHVyZURlc2NEYXRlWzBdLAorCSAgICBwcm9kdWN0X2luZm8tPk1hbnVmYWN0dXJlRGVzY0RhdGVbMV0sCisJICAgIHByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVsyXSsxOTAwKTsKKwlkYmcoIiAgaURvd25sb2FkRmlsZSAgICAgICAgIDB4JXgiLCAgICAgcHJvZHVjdF9pbmZvLT5pRG93bmxvYWRGaWxlKTsKKworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICBVIFMgQiAgQyBBIEwgTCBCIEEgQyBLICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgVSBTIEIgIEMgQSBMIEwgQiBBIEMgSyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX2ludGVycnVwdF9jYWxsYmFjaworICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSByZWNlaXZlZCBkYXRhIG9uIHRoZSAKKyAqCWludGVycnVwdCBlbmRwb2ludC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwJKmVkZ2Vfc2VyaWFsID0gKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBieXRlc19hdmFpbDsKKwlpbnQgcG9zaXRpb247CisJaW50IHR4Q3JlZGl0czsKKwlpbnQgcG9ydE51bWJlcjsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCS8vIHByb2Nlc3MgdGhpcyBpbnRlcnJ1cHQtcmVhZCBldmVuIGlmIHRoZXJlIGFyZSBubyBwb3J0cyBvcGVuCisJaWYgKGxlbmd0aCkgeworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGRhdGEpOworCisJCWlmIChsZW5ndGggPiAxKSB7CisJCQlieXRlc19hdmFpbCA9IGRhdGFbMF0gfCAoZGF0YVsxXSA8PCA4KTsKKwkJCWlmIChieXRlc19hdmFpbCkgeworCQkJCXNwaW5fbG9jaygmZWRnZV9zZXJpYWwtPmVzX2xvY2spOworCQkJCWVkZ2Vfc2VyaWFsLT5yeEJ5dGVzQXZhaWwgKz0gYnl0ZXNfYXZhaWw7CisJCQkJZGJnKCIlcyAtIGJ5dGVzX2F2YWlsPSVkLCByeEJ5dGVzQXZhaWw9JWQsIHJlYWRfaW5fcHJvZ3Jlc3M9JWQiLCBfX0ZVTkNUSU9OX18sIGJ5dGVzX2F2YWlsLCBlZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsLCBlZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyk7CisKKwkJCQlpZiAoZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCA+IDAgJiYKKwkJCQkgICAgIWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzKSB7CisJCQkJCWRiZygiJXMgLSBwb3N0aW5nIGEgcmVhZCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gVFJVRTsKKworCQkJCQkvKiB3ZSBoYXZlIHBlbmRpbmcgYnl0ZXMgb24gdGhlIGJ1bGsgaW4gcGlwZSwgc2VuZCBhIHJlcXVlc3QgKi8KKwkJCQkJZWRnZV9zZXJpYWwtPnJlYWRfdXJiLT5kZXYgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXY7CisJCQkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCB3aXRoIHJlc3VsdCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQkJCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IEZBTFNFOworCQkJCQl9CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrKCZlZGdlX3NlcmlhbC0+ZXNfbG9jayk7CisJCQl9CisJCX0KKwkJLyogZ3JhYiB0aGUgdHhjcmVkaXRzIGZvciB0aGUgcG9ydHMgaWYgYXZhaWxhYmxlICovCisJCXBvc2l0aW9uID0gMjsKKwkJcG9ydE51bWJlciA9IDA7CisJCXdoaWxlICgocG9zaXRpb24gPCBsZW5ndGgpICYmIChwb3J0TnVtYmVyIDwgZWRnZV9zZXJpYWwtPnNlcmlhbC0+bnVtX3BvcnRzKSkgeworCQkJdHhDcmVkaXRzID0gZGF0YVtwb3NpdGlvbl0gfCAoZGF0YVtwb3NpdGlvbisxXSA8PCA4KTsKKwkJCWlmICh0eENyZWRpdHMpIHsKKwkJCQlwb3J0ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+cG9ydFtwb3J0TnVtYmVyXTsKKwkJCQllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCQkJaWYgKGVkZ2VfcG9ydC0+b3BlbikgeworCQkJCQlzcGluX2xvY2soJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CisJCQkJCWVkZ2VfcG9ydC0+dHhDcmVkaXRzICs9IHR4Q3JlZGl0czsKKwkJCQkJc3Bpbl91bmxvY2soJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CisJCQkJCWRiZygiJXMgLSB0eGNyZWRpdHMgZm9yIHBvcnQlZCA9ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0TnVtYmVyLCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyk7CisKKwkJCQkJLyogdGVsbCB0aGUgdHR5IGRyaXZlciB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLworCQkJCQlpZiAoZWRnZV9wb3J0LT5wb3J0LT50dHkpCisJCQkJCQl0dHlfd2FrZXVwKGVkZ2VfcG9ydC0+cG9ydC0+dHR5KTsKKworCQkJCQkvLyBTaW5jZSB3ZSBoYXZlIG1vcmUgY3JlZGl0LCBjaGVjayBpZiBtb3JlIGRhdGEgY2FuIGJlIHNlbnQKKwkJCQkJc2VuZF9tb3JlX3BvcnRfZGF0YShlZGdlX3NlcmlhbCwgZWRnZV9wb3J0KTsKKwkJCQl9CisJCQl9CisJCQlwb3NpdGlvbiArPSAyOworCQkJKytwb3J0TnVtYmVyOworCQl9CisJfQorCitleGl0OgorCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYlxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfYnVsa19pbl9jYWxsYmFjaworICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSByZWNlaXZlZCBkYXRhIG9uIHRoZSAKKyAqCWJ1bGsgaW4gZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfaW5fY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbAkqZWRnZV9zZXJpYWwgPSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKXVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludAkJCXN0YXR1czsKKwlfX3UxNgkJCXJhd19kYXRhX2xlbmd0aDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gRkFMU0U7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApIHsKKwkJZGJnKCIlcyAtIHJlYWQgYnVsayBjYWxsYmFjayB3aXRoIG5vIGRhdGEiLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IEZBTFNFOworCQlyZXR1cm47CisJfQorCisJcmF3X2RhdGFfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fRlVOQ1RJT05fXywgcmF3X2RhdGFfbGVuZ3RoLCBkYXRhKTsKKworCXNwaW5fbG9jaygmZWRnZV9zZXJpYWwtPmVzX2xvY2spOworCisJLyogZGVjcmVtZW50IG91ciByeEJ5dGVzIGF2YWlsYWJsZSBieSB0aGUgbnVtYmVyIHRoYXQgd2UganVzdCBnb3QgKi8KKwllZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsIC09IHJhd19kYXRhX2xlbmd0aDsKKworCWRiZygiJXMgLSBSZWNlaXZlZCA9ICVkLCByeEJ5dGVzQXZhaWwgJWQiLCBfX0ZVTkNUSU9OX18sIHJhd19kYXRhX2xlbmd0aCwgZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCk7CisKKwlwcm9jZXNzX3JjdmRfZGF0YSAoZWRnZV9zZXJpYWwsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnkgbW9yZSBkYXRhIGZvciB1cyB0byByZWFkICovCisJaWYgKGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzQXZhaWwgPiAwKSB7CisJCWRiZygiJXMgLSBwb3N0aW5nIGEgcmVhZCIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYi0+ZGV2ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2OworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihlZGdlX3NlcmlhbC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gRkFMU0U7CisJCX0KKwl9IGVsc2UgeworCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IEZBTFNFOworCX0KKworCXNwaW5fdW5sb2NrKCZlZGdlX3NlcmlhbC0+ZXNfbG9jayk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgZmluaXNoZWQgc2VuZGluZyBzZXJpYWwgZGF0YQorICoJb24gdGhlIGJ1bGsgb3V0IGVuZHBvaW50LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCisJaWYgKHR0eSAmJiBlZGdlX3BvcnQtPm9wZW4pIHsKKwkJLyogbGV0IHRoZSB0dHkgZHJpdmVyIHdha2V1cCBpZiBpdCBoYXMgYSBzcGVjaWFsIHdyaXRlX3dha2V1cCBmdW5jdGlvbiAqLworCQl0dHlfd2FrZXVwKHR0eSk7CisJfQorCisJLy8gUmVsZWFzZSB0aGUgV3JpdGUgVVJCCisJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IEZBTFNFOworCisJLy8gQ2hlY2sgaWYgbW9yZSBkYXRhIG5lZWRzIHRvIGJlIHNlbnQKKwlzZW5kX21vcmVfcG9ydF9kYXRhKChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICopKHVzYl9nZXRfc2VyaWFsX2RhdGEoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwpKSwgZWRnZV9wb3J0KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1bGtPdXRDbWRDYWxsYmFjaworICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSBmaW5pc2hlZCBzZW5kaW5nIGEgY29tbWFuZAorICoJb24gdGhlIGJ1bGsgb3V0IGVuZHBvaW50LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJQ21kVXJicy0tOworCWRiZygiJXMgLSBGUkVFIFVSQiAlcCAob3V0c3RhbmRpbmcgJWQpIiwgX19GVU5DVElPTl9fLCB1cmIsIENtZFVyYnMpOworCisKKwkvKiBjbGVhbiB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyICovCisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpIHsKKwkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCX0KKworCS8qIEZyZWUgdGhlIGNvbW1hbmQgdXJiICovCisJdXNiX2ZyZWVfdXJiICh1cmIpOworCisJaWYgKHN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgcG9pbnRlciB0byB0dHkgKi8KKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKworCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwlpZiAodHR5ICYmIGVkZ2VfcG9ydC0+b3BlbikKKwkJdHR5X3dha2V1cCh0dHkpOworCisJLyogd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIGNvbW1hbmQgKi8KKwllZGdlX3BvcnQtPmNvbW1hbmRQZW5kaW5nID0gRkFMU0U7CisJd2FrZV91cCgmZWRnZV9wb3J0LT53YWl0X2NvbW1hbmQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsT3BlbgorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBhIHBvcnQgaXMgb3BlbmVkCisgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gMAorICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZWRnZV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCWludCByZXNwb25zZTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSBsb3dfbGF0ZW5jeTsKKworCS8qIHNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0IChjYW4ndCBzZXQgaXQgdXAgaW4gZWRnZV9zdGFydHVwCisJICAgYXMgdGhlIHN0cnVjdHVyZXMgd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pICovCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWVkZ2Vfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCWlmIChlZGdlX3NlcmlhbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIgPT0gTlVMTCkgeworCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0MCA9IHNlcmlhbC0+cG9ydFswXTsKKwkJCisJCS8qIG5vdCBzZXQgdXAgeWV0LCBzbyBkbyBpdCBub3cgKi8KKwkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIgPSBwb3J0MC0+aW50ZXJydXB0X2luX2J1ZmZlcjsKKwkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9lbmRwb2ludCA9IHBvcnQwLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOworCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiID0gcG9ydDAtPmludGVycnVwdF9pbl91cmI7CisJCWVkZ2Vfc2VyaWFsLT5idWxrX2luX2J1ZmZlciA9IHBvcnQwLT5idWxrX2luX2J1ZmZlcjsKKwkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fZW5kcG9pbnQgPSBwb3J0MC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiA9IHBvcnQwLT5yZWFkX3VyYjsKKwkJZWRnZV9zZXJpYWwtPmJ1bGtfb3V0X2VuZHBvaW50ID0gcG9ydDAtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKKwkKKwkJLyogc2V0IHVwIG91ciBpbnRlcnJ1cHQgdXJiICovCisJCXVzYl9maWxsX2ludF91cmIoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKKwkJCQkgc2VyaWFsLT5kZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkgICAgICAgIHBvcnQwLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgcG9ydDAtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkJIGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJIGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrLCBlZGdlX3NlcmlhbCwKKwkJCQkgZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+aW50ZXJ2YWwpOworCQkKKwkJLyogc2V0IHVwIG91ciBidWxrIGluIHVyYiAqLworCQl1c2JfZmlsbF9idWxrX3VyYihlZGdlX3NlcmlhbC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkgIAkgIHBvcnQwLT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJICBwb3J0MC0+YnVsa19pbl9idWZmZXIsCisJCQkJICBlZGdlX3NlcmlhbC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBlZGdlX2J1bGtfaW5fY2FsbGJhY2ssIGVkZ2Vfc2VyaWFsKTsKKwkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKworCQkvKiBzdGFydCBpbnRlcnJ1cHQgcmVhZCBmb3IgdGhpcyBlZGdlcG9ydAorCQkgKiB0aGlzIGludGVycnVwdCB3aWxsIGNvbnRpbnVlIGFzIGxvbmcgYXMgdGhlIGVkZ2Vwb3J0IGlzIGNvbm5lY3RlZCAqLworCQlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiIChlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3BvbnNlKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsIF9fRlVOQ1RJT05fXywgcmVzcG9uc2UpOworCQl9CisJfQorCQorCS8qIGluaXRpYWxpemUgb3VyIHdhaXQgcXVldWVzICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZWRnZV9wb3J0LT53YWl0X29wZW4pOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZWRnZV9wb3J0LT53YWl0X2NvbW1hbmQpOworCisJLyogaW5pdGlhbGl6ZSBvdXIgaWNvdW50IHN0cnVjdHVyZSAqLworCW1lbXNldCAoJihlZGdlX3BvcnQtPmljb3VudCksIDB4MDAsIHNpemVvZihlZGdlX3BvcnQtPmljb3VudCkpOworCisJLyogaW5pdGlhbGl6ZSBvdXIgcG9ydCBzZXR0aW5ncyAqLworCWVkZ2VfcG9ydC0+dHhDcmVkaXRzICAgICAgICAgICAgPSAwOwkJCS8qIENhbid0IHNlbmQgYW55IGRhdGEgeWV0ICovCisJZWRnZV9wb3J0LT5zaGFkb3dNQ1IgICAgICAgICAgICA9IE1DUl9NQVNURVJfSUU7CS8qIE11c3QgYWx3YXlzIHNldCB0aGlzIGJpdCB0byBlbmFibGUgaW50cyEgKi8KKwllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gRkFMU0U7CisKKwkvKiBzZW5kIGEgb3BlbiBwb3J0IGNvbW1hbmQgKi8KKwllZGdlX3BvcnQtPm9wZW5QZW5kaW5nID0gVFJVRTsKKwllZGdlX3BvcnQtPm9wZW4gICAgICAgID0gRkFMU0U7CisJcmVzcG9uc2UgPSBzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9PUEVOX1BPUlQsIDApOworCisJaWYgKHJlc3BvbnNlIDwgMCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGVycm9yIHNlbmRpbmcgb3BlbiBwb3J0IGNvbW1hbmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBGQUxTRTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogbm93IHdhaXQgZm9yIHRoZSBwb3J0IHRvIGJlIGNvbXBsZXRlbHkgb3BlbmVkICovCisJd2FpdF9ldmVudF90aW1lb3V0KGVkZ2VfcG9ydC0+d2FpdF9vcGVuLCAoZWRnZV9wb3J0LT5vcGVuUGVuZGluZyAhPSBUUlVFKSwgT1BFTl9USU1FT1VUKTsKKworCWlmIChlZGdlX3BvcnQtPm9wZW4gPT0gRkFMU0UpIHsKKwkJLyogb3BlbiB0aW1lZCBvdXQgKi8KKwkJZGJnKCIlcyAtIG9wZW4gdGltZWRvdXQiLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX3BvcnQtPm9wZW5QZW5kaW5nID0gRkFMU0U7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGNyZWF0ZSB0aGUgdHhmaWZvICovCisJZWRnZV9wb3J0LT50eGZpZm8uaGVhZAk9IDA7CisJZWRnZV9wb3J0LT50eGZpZm8udGFpbAk9IDA7CisJZWRnZV9wb3J0LT50eGZpZm8uY291bnQJPSAwOworCWVkZ2VfcG9ydC0+dHhmaWZvLnNpemUJPSBlZGdlX3BvcnQtPm1heFR4Q3JlZGl0czsKKwllZGdlX3BvcnQtPnR4Zmlmby5maWZvCT0ga21hbGxvYyAoZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMsIEdGUF9LRVJORUwpOworCisJaWYgKCFlZGdlX3BvcnQtPnR4Zmlmby5maWZvKSB7CisJCWRiZygiJXMgLSBubyBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX2Nsb3NlIChwb3J0LCBmaWxwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQWxsb2NhdGUgYSBVUkIgZm9yIHRoZSB3cml0ZSAqLworCWVkZ2VfcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IEZBTFNFOworCisJaWYgKCFlZGdlX3BvcnQtPndyaXRlX3VyYikgeworCQlkYmcoIiVzIC0gbm8gbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9jbG9zZSAocG9ydCwgZmlscCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRiZygiJXMoJWQpIC0gSW5pdGlhbGl6ZSBUWCBmaWZvIHRvICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzKTsKKworCWRiZygiJXMgZXhpdGVkIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZQorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB0aGUgY2xvc2UgdW50aWwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKgkJMS4gUmVzcG9uc2UgdG8gb3VyIENoYXNlIGNvbWVzIGZyb20gRWRnZXBvcnQKKyAqCQkyLiBBIHRpbW91dCBvZiAxMCBzZWNvbmRzIHdpdGhvdXQgYWN0aXZpdHkgaGFzIGV4cGlyZWQKKyAqCQkgICAoMUsgb2YgRWRnZXBvcnQgZGF0YSBAIDI0MDAgYmF1ZCA9PT4gNCBzZWMgdG8gZW1wdHkpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGJsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJX191MTYgbGFzdENyZWRpdHM7CisJaW50IHRpbWVvdXQgPSAxKkhaOworCWludCBsb29wID0gMTA7CisKKwl3aGlsZSAoMSkgeworCQkvLyBTYXZlIExhc3QgY3JlZGl0cworCQlsYXN0Q3JlZGl0cyA9IGVkZ2VfcG9ydC0+dHhDcmVkaXRzOworCisJCS8vIERpZCB3ZSBnZXQgb3VyIENoYXNlIHJlc3BvbnNlCisJCWlmIChlZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID09IEZBTFNFKSB7CisJCQlkYmcoIiVzIC0gR290IENoYXNlIFJlc3BvbnNlIiwgX19GVU5DVElPTl9fKTsKKworCQkJLy8gZGlkIHdlIGdldCBhbGwgb2Ygb3VyIGNyZWRpdCBiYWNrPworCQkJaWYgKGVkZ2VfcG9ydC0+dHhDcmVkaXRzID09IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzICkgeworCQkJCWRiZygiJXMgLSBHb3QgYWxsIGNyZWRpdHMiLCBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCS8vIEJsb2NrIHRoZSB0aHJlYWQgZm9yIGEgd2hpbGUKKwkJcHJlcGFyZV90b193YWl0KCZlZGdlX3BvcnQtPndhaXRfY2hhc2UsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCWZpbmlzaF93YWl0KCZlZGdlX3BvcnQtPndhaXRfY2hhc2UsICZ3YWl0KTsKKworCQlpZiAobGFzdENyZWRpdHMgPT0gZWRnZV9wb3J0LT50eENyZWRpdHMpIHsKKwkJCS8vIE5vIGFjdGl2aXR5Li4gY291bnQgZG93bi4KKwkJCWxvb3AtLTsKKwkJCWlmIChsb29wID09IDApIHsKKwkJCQllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gRkFMU0U7CisJCQkJZGJnKCIlcyAtIENoYXNlIFRJTUVPVVQiLCBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8vIFJlc2V0IHRpbW91dCB2YWx1ZSBiYWNrIHRvIDEwIHNlY29uZHMKKwkJCWRiZygiJXMgLSBMYXN0ICVkLCBDdXJyZW50ICVkIiwgX19GVU5DVElPTl9fLCBsYXN0Q3JlZGl0cywgZWRnZV9wb3J0LT50eENyZWRpdHMpOworCQkJbG9vcCA9IDEwOworCQl9CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBibG9ja191bnRpbF90eF9lbXB0eQorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB0aGUgY2xvc2UgdW50aWwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKgkJMS4gVFggY291bnQgYXJlIDAKKyAqCQkyLiBUaGUgZWRnZXBvcnQgaGFzIHN0b3BwZWQKKyAqCQkzLiBBIHRpbW91dCBvZiAzIHNlY29uZHMgd2l0aG91dCBhY3Rpdml0eSBoYXMgZXhwaXJlZAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBibG9ja191bnRpbF90eF9lbXB0eSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlzdHJ1Y3QgVHhGaWZvICpmaWZvID0gJmVkZ2VfcG9ydC0+dHhmaWZvOworCV9fdTMyIGxhc3RDb3VudDsKKwlpbnQgdGltZW91dCA9IEhaLzEwOworCWludCBsb29wID0gMzA7CisKKwl3aGlsZSAoMSkgeworCQkvLyBTYXZlIExhc3QgY291bnQKKwkJbGFzdENvdW50ID0gZmlmby0+Y291bnQ7CisKKwkJLy8gSXMgdGhlIEVkZ2Vwb3J0IEJ1ZmZlciBlbXB0eT8KKwkJaWYgKGxhc3RDb3VudCA9PSAwKSB7CisJCQlkYmcoIiVzIC0gVFggQnVmZmVyIEVtcHR5IiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIEJsb2NrIHRoZSB0aHJlYWQgZm9yIGEgd2hpbGUKKwkJcHJlcGFyZV90b193YWl0ICgmZWRnZV9wb3J0LT53YWl0X2NoYXNlLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQlmaW5pc2hfd2FpdCgmZWRnZV9wb3J0LT53YWl0X2NoYXNlLCAmd2FpdCk7CisKKwkJZGJnKCIlcyB3YWl0IiwgX19GVU5DVElPTl9fKTsKKworCQlpZiAobGFzdENvdW50ID09IGZpZm8tPmNvdW50KSB7CisJCQkvLyBObyBhY3Rpdml0eS4uIGNvdW50IGRvd24uCisJCQlsb29wLS07CisJCQlpZiAobG9vcCA9PSAwKSB7CisJCQkJZGJnKCIlcyAtIFRJTUVPVVQiLCBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8vIFJlc2V0IHRpbW91dCB2YWx1ZSBiYWNrIHRvIHNlY29uZHMKKwkJCWxvb3AgPSAzMDsKKwkJfQorCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfY2xvc2UKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gYSBwb3J0IGlzIGNsb3NlZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJIAorCWVkZ2Vfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoKGVkZ2Vfc2VyaWFsID09IE5VTEwpIHx8IChlZGdlX3BvcnQgPT0gTlVMTCkpCisJCXJldHVybjsKKwkKKwkvLyBibG9jayB1bnRpbCB0eCBpcyBlbXB0eQorCWJsb2NrX3VudGlsX3R4X2VtcHR5KGVkZ2VfcG9ydCk7CisKKwllZGdlX3BvcnQtPmNsb3NlUGVuZGluZyA9IFRSVUU7CisKKwkvKiBmbHVzaCBhbmQgY2hhc2UgKi8KKwllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gVFJVRTsKKworCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NIQVNFX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NIQVNFX1BPUlQsIDApOworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvLyBibG9jayB1bnRpbCBjaGFzZSBmaW5pc2hlZAorCQlibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZShlZGdlX3BvcnQpOworCX0gZWxzZSB7CisJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBGQUxTRTsKKwl9CisKKwkvKiBjbG9zZSB0aGUgcG9ydCAqLworCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NMT1NFX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NMT1NFX1BPUlQsIDApOworCisJLy9wb3J0LT5jbG9zZSA9IFRSVUU7CisJZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcgPSBGQUxTRTsKKwllZGdlX3BvcnQtPm9wZW4gPSBGQUxTRTsKKwllZGdlX3BvcnQtPm9wZW5QZW5kaW5nID0gRkFMU0U7CisKKwlpZiAoZWRnZV9wb3J0LT53cml0ZV91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKGVkZ2VfcG9ydC0+d3JpdGVfdXJiKTsKKwl9CisKKwlpZiAoZWRnZV9wb3J0LT53cml0ZV91cmIpIHsKKwkJLyogaWYgdGhpcyB1cmIgaGFkIGEgdHJhbnNmZXIgYnVmZmVyIGFscmVhZHkgKG9sZCB0cmFuc2ZlcikgZnJlZSBpdCAqLworCQlpZiAoZWRnZV9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKSB7CisJCQlrZnJlZShlZGdlX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJfQorCQl1c2JfZnJlZV91cmIgICAoZWRnZV9wb3J0LT53cml0ZV91cmIpOworCQllZGdlX3BvcnQtPndyaXRlX3VyYiA9IE5VTEw7CisJfQorCWlmIChlZGdlX3BvcnQtPnR4Zmlmby5maWZvKSB7CisJCWtmcmVlKGVkZ2VfcG9ydC0+dHhmaWZvLmZpZm8pOworCQllZGdlX3BvcnQtPnR4Zmlmby5maWZvID0gTlVMTDsKKwl9CisKKwlkYmcoIiVzIGV4aXRlZCIsIF9fRlVOQ1RJT05fXyk7Cit9ICAgCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsV3JpdGUKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gZGF0YSBzaG91bGQgYmUgd3JpdHRlbiB0bworICoJdGhlIHBvcnQuCisgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2Ugd2UgcmV0dXJuCisgKglhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZWRnZV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IFR4RmlmbyAqZmlmbzsKKwlpbnQgY29weVNpemU7CisJaW50IGJ5dGVzbGVmdDsKKwlpbnQgZmlyc3RoYWxmOworCWludCBzZWNvbmRoYWxmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvLyBnZXQgYSBwb2ludGVyIHRvIHRoZSBUeCBmaWZvCisJZmlmbyA9ICZlZGdlX3BvcnQtPnR4ZmlmbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCS8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgYnl0ZXMgdG8gcHV0IGluIGZpZm8KKwljb3B5U2l6ZSA9IG1pbiAoKHVuc2lnbmVkIGludCljb3VudCwgKGVkZ2VfcG9ydC0+dHhDcmVkaXRzIC0gZmlmby0+Y291bnQpKTsKKworCWRiZygiJXMoJWQpIG9mICVkIGJ5dGUocykgRmlmbyByb29tICAlZCAtLSB3aWxsIGNvcHkgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIAorCSAgICBwb3J0LT5udW1iZXIsIGNvdW50LCBlZGdlX3BvcnQtPnR4Q3JlZGl0cyAtIGZpZm8tPmNvdW50LCBjb3B5U2l6ZSk7CisKKwkvKiBjYXRjaCB3cml0ZXMgb2YgMCBieXRlcyB3aGljaCB0aGUgdHR5IGRyaXZlciBsaWtlcyB0byBnaXZlIHVzLCBhbmQgd2hlbiB0eENyZWRpdHMgaXMgZW1wdHkgKi8KKwlpZiAoY29weVNpemUgPT0gMCkgeworCQlkYmcoIiVzIC0gY29weVNpemUgPSBaZXJvIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBmaW5pc2hfd3JpdGU7CisJfQorCisJLy8gcXVldWUgdGhlIGRhdGEJCisJLy8gc2luY2Ugd2UgY2FuIG5ldmVyIG92ZXJmbG93IHRoZSBidWZmZXIgd2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgZm9yIGZ1bGwgY29uZGl0aW9uCisKKwkvLyB0aGUgY29weSBpcyBkb25lIGlzIHR3byBwYXJ0cyAtLSBmaXJzdCBmaWxsIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgorCS8vIHRoZW4gY29weSB0aGUgcmVzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAKKworCWJ5dGVzbGVmdCA9IGZpZm8tPnNpemUgLSBmaWZvLT5oZWFkOworCWZpcnN0aGFsZiA9IG1pbiAoYnl0ZXNsZWZ0LCBjb3B5U2l6ZSk7CisJZGJnKCIlcyAtIGNvcHkgJWQgYnl0ZXMgb2YgJWQgaW50byBmaWZvICIsIF9fRlVOQ1RJT05fXywgZmlyc3RoYWxmLCBieXRlc2xlZnQpOworCisJLyogbm93IGNvcHkgb3VyIGRhdGEgKi8KKwltZW1jcHkoJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0sIGRhdGEsIGZpcnN0aGFsZik7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGZpcnN0aGFsZiwgJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0pOworCisJLy8gdXBkYXRlIHRoZSBpbmRleCBhbmQgc2l6ZQorCWZpZm8tPmhlYWQgICs9IGZpcnN0aGFsZjsKKwlmaWZvLT5jb3VudCArPSBmaXJzdGhhbGY7CisKKwkvLyB3cmFwIHRoZSBpbmRleAorCWlmIChmaWZvLT5oZWFkID09IGZpZm8tPnNpemUpIHsKKwkJZmlmby0+aGVhZCA9IDA7CisJfQorCisJc2Vjb25kaGFsZiA9IGNvcHlTaXplLWZpcnN0aGFsZjsKKworCWlmIChzZWNvbmRoYWxmKSB7CisJCWRiZygiJXMgLSBjb3B5IHJlc3Qgb2YgZGF0YSAlZCIsIF9fRlVOQ1RJT05fXywgc2Vjb25kaGFsZik7CisJCW1lbWNweSgmZmlmby0+Zmlmb1tmaWZvLT5oZWFkXSwgJmRhdGFbZmlyc3RoYWxmXSwgc2Vjb25kaGFsZik7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBzZWNvbmRoYWxmLCAmZmlmby0+Zmlmb1tmaWZvLT5oZWFkXSk7CisJCS8vIHVwZGF0ZSB0aGUgaW5kZXggYW5kIHNpemUKKwkJZmlmby0+Y291bnQgKz0gc2Vjb25kaGFsZjsKKwkJZmlmby0+aGVhZCAgKz0gc2Vjb25kaGFsZjsKKwkJLy8gTm8gbmVlZCB0byBjaGVjayBmb3Igd3JhcCBzaW5jZSB3ZSBjYW4gbm90IGdldCB0byBlbmQgb2YgZmlmbyBpbiB0aGlzIHBhcnQKKwl9CisKK2ZpbmlzaF93cml0ZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCXNlbmRfbW9yZV9wb3J0X2RhdGEoKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKil1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCksIGVkZ2VfcG9ydCk7CisKKwlkYmcoIiVzIHdyb3RlICVkIGJ5dGUocykgVHhDcmVkaXRzICVkLCBGaWZvICVkIiwgX19GVU5DVElPTl9fLCBjb3B5U2l6ZSwgZWRnZV9wb3J0LT50eENyZWRpdHMsIGZpZm8tPmNvdW50KTsKKworCXJldHVybiBjb3B5U2l6ZTsgICAKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2VuZF9tb3JlX3BvcnRfZGF0YSgpCisgKgorICoJVGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIHdyaXRlIGFkZGl0aW9uYWwgVUFSVCB0cmFuc21pdCBkYXRhCisgKgl0byBhIHBvcnQgb3ZlciB0aGUgVVNCIGJ1bGsgcGlwZS4gSXQgaXMgY2FsbGVkICgxKSB3aGVuIG5ldworICoJZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIGEgcG9ydCdzIFR4QnVmZmVyIGZyb20gaGlnaGVyIGxheWVycworICoJKDIpIHdoZW4gdGhlIHBlcmlwaGVyYWwgc2VuZHMgdXMgYWRkaXRpb25hbCBUeENyZWRpdHMgaW5kaWNhdGluZworICoJdGhhdCBpdCBjYW4gYWNjZXB0IG1vcmUJVHggZGF0YSBmb3IgYSBnaXZlbiBwb3J0OyBhbmQgKDMpIHdoZW4KKyAqCWEgYnVsayB3cml0ZSBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGFuZCB3ZSB3YW50IHRvIHNlZSBpZiB3ZQorICoJY2FuIHRyYW5zbWl0IG1vcmUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHNlbmRfbW9yZV9wb3J0X2RhdGEoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJc3RydWN0IFR4RmlmbwkqZmlmbyA9ICZlZGdlX3BvcnQtPnR4ZmlmbzsKKwlzdHJ1Y3QgdXJiCSp1cmI7CisJdW5zaWduZWQgY2hhcgkqYnVmZmVyOworCWludAkJc3RhdHVzOworCWludAkJY291bnQ7CisJaW50CQlieXRlc2xlZnQ7CisJaW50CQlmaXJzdGhhbGY7CisJaW50CQlzZWNvbmRoYWxmOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlkYmcoIiVzKCVkKSIsIF9fRlVOQ1RJT05fXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJaWYgKGVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgfHwKKwkgICAgIWVkZ2VfcG9ydC0+b3BlbiAgICAgICAgICAgICB8fAorCSAgICAoZmlmby0+Y291bnQgPT0gMCkpIHsKKwkJZGJnKCIlcyglZCkgRVhJVCAtIGZpZm8gJWQsIFBlbmRpbmdXcml0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgZmlmby0+Y291bnQsIGVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MpOworCQlnb3RvIGV4aXRfc2VuZDsKKwl9CisKKwkvLyBzaW5jZSB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIGZpZm8gd2lsbCBhbHdheXMgZml0IGludG8gdGhlCisJLy8gZWRnZXBvcnQgYnVmZmVyIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIHRoZSB3cml0ZSBsZW5ndGgKKworCS8vCURvIHdlIGhhdmUgZW5vdWdoIGNyZWRpdHMgZm9yIHRoaXMgcG9ydCB0byBtYWtlIGl0IHdvcnRod2hpbGUKKwkvLwl0byBib3RoZXIgcXVldWVpbmcgYSB3cml0ZS4gSWYgaXQncyB0b28gc21hbGwsIHNheSBhIGZldyBieXRlcywKKwkvLwlpdCdzIGJldHRlciB0byB3YWl0IGZvciBtb3JlIGNyZWRpdHMgc28gd2UgY2FuIGRvIGEgbGFyZ2VyCisJLy8Jd3JpdGUuCisJaWYgKGVkZ2VfcG9ydC0+dHhDcmVkaXRzIDwgRURHRV9GV19HRVRfVFhfQ1JFRElUU19TRU5EX1RIUkVTSE9MRChlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyxFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFKSkgeworCQlkYmcoIiVzKCVkKSBOb3QgZW5vdWdoIGNyZWRpdCAtIGZpZm8gJWQgVHhDcmVkaXQgJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLCBmaWZvLT5jb3VudCwgZWRnZV9wb3J0LT50eENyZWRpdHMgKTsKKwkJZ290byBleGl0X3NlbmQ7CisJfQorCisJLy8gbG9jayB0aGlzIHdyaXRlCisJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IFRSVUU7CisKKwkvLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB3cml0ZV91cmIKKwl1cmIgPSBlZGdlX3BvcnQtPndyaXRlX3VyYjsKKworCS8qIGlmIHRoaXMgdXJiIGhhZCBhIHRyYW5zZmVyIGJ1ZmZlciBhbHJlYWR5IChvbGQgdHJhbnNmZXIpIGZyZWUgaXQgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkgeworCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKKwl9CisKKwkvKiBidWlsZCB0aGUgZGF0YSBoZWFkZXIgZm9yIHRoZSBidWZmZXIgYW5kIHBvcnQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc2VuZCBvdXQgKi8KKwljb3VudCA9IGZpZm8tPmNvdW50OworCWJ1ZmZlciA9IGttYWxsb2MgKGNvdW50KzIsIEdGUF9BVE9NSUMpOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0gbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uXG4iLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gRkFMU0U7CisJCWdvdG8gZXhpdF9zZW5kOworCX0KKwlidWZmZXJbMF0gPSBJT1NQX0JVSUxEX0RBVEFfSERSMSAoZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3IsIGNvdW50KTsKKwlidWZmZXJbMV0gPSBJT1NQX0JVSUxEX0RBVEFfSERSMiAoZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3IsIGNvdW50KTsKKworCS8qIG5vdyBjb3B5IG91ciBkYXRhICovCisJYnl0ZXNsZWZ0ID0gIGZpZm8tPnNpemUgLSBmaWZvLT50YWlsOworCWZpcnN0aGFsZiA9IG1pbiAoYnl0ZXNsZWZ0LCBjb3VudCk7CisJbWVtY3B5KCZidWZmZXJbMl0sICZmaWZvLT5maWZvW2ZpZm8tPnRhaWxdLCBmaXJzdGhhbGYpOworCWZpZm8tPnRhaWwgICs9IGZpcnN0aGFsZjsKKwlmaWZvLT5jb3VudCAtPSBmaXJzdGhhbGY7CisJaWYgKGZpZm8tPnRhaWwgPT0gZmlmby0+c2l6ZSkgeworCQlmaWZvLT50YWlsID0gMDsKKwl9CisKKwlzZWNvbmRoYWxmID0gY291bnQtZmlyc3RoYWxmOworCWlmIChzZWNvbmRoYWxmKSB7CisJCW1lbWNweSgmYnVmZmVyWzIrZmlyc3RoYWxmXSwgJmZpZm8tPmZpZm9bZmlmby0+dGFpbF0sIHNlY29uZGhhbGYpOworCQlmaWZvLT50YWlsICArPSBzZWNvbmRoYWxmOworCQlmaWZvLT5jb3VudCAtPSBzZWNvbmRoYWxmOworCX0KKworCWlmIChjb3VudCkKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsICZidWZmZXJbMl0pOworCisJLyogZmlsbCB1cCB0aGUgdXJiIHdpdGggYWxsIG9mIG91ciBkYXRhIGFuZCBzdWJtaXQgaXQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIAorCQkgICAgICAgdXNiX3NuZGJ1bGtwaXBlKGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgZWRnZV9zZXJpYWwtPmJ1bGtfb3V0X2VuZHBvaW50KSwKKwkJICAgICAgIGJ1ZmZlciwgY291bnQrMiwgZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrLCBlZGdlX3BvcnQpOworCisJLyogZGVjcmVtZW50IHRoZSBudW1iZXIgb2YgY3JlZGl0cyB3ZSBoYXZlIGJ5IHRoZSBudW1iZXIgd2UganVzdCBzZW50ICovCisJZWRnZV9wb3J0LT50eENyZWRpdHMgLT0gY291bnQ7CisJZWRnZV9wb3J0LT5pY291bnQudHggKz0gY291bnQ7CisKKwl1cmItPmRldiA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldjsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQsIGRhdGEgbG9zdFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQllZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzID0gRkFMU0U7CisKKwkJLyogcmV2ZXJ0IHRoZSBjcmVkaXRzIGFzIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQuICovCisJCWVkZ2VfcG9ydC0+dHhDcmVkaXRzICs9IGNvdW50OworCQllZGdlX3BvcnQtPmljb3VudC50eCAtPSBjb3VudDsKKwl9CisJZGJnKCIlcyB3cm90ZSAlZCBieXRlKHMpIFR4Q3JlZGl0ICVkLCBGaWZvICVkIiwgX19GVU5DVElPTl9fLCBjb3VudCwgZWRnZV9wb3J0LT50eENyZWRpdHMsIGZpZm8tPmNvdW50KTsKKworZXhpdF9zZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV93cml0ZV9yb29tCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGtub3cgaG93IG1hbnkKKyAqCWJ5dGVzIG9mIGRhdGEgd2UgY2FuIGFjY2VwdCBmb3IgYSBzcGVjaWZpYyBwb3J0LgorICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIHRoZSBhbW91bnQgb2Ygcm9vbSB0aGF0IHdlIGhhdmUgZm9yIHRoaXMgcG9ydAorICoJKHRoZSB0eENyZWRpdHMpLCAKKyAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVkZ2Vfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByb29tOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VQZW5kaW5nID09IFRSVUUpCisJCXJldHVybiAtRU5PREVWOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIWVkZ2VfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLy8gdG90YWwgb2YgYm90aCBidWZmZXJzIGlzIHN0aWxsIHR4Q3JlZGl0CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCXJvb20gPSBlZGdlX3BvcnQtPnR4Q3JlZGl0cyAtIGVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiByb29tOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9jaGFyc19pbl9idWZmZXIKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8ga25vdyBob3cgbWFueQorICoJYnl0ZXMgb2YgZGF0YSB3ZSBjdXJyZW50bHkgaGF2ZSBvdXRzdGFuZGluZyBpbiB0aGUgcG9ydCAoZGF0YSB0aGF0IGhhcworICoJYmVlbiB3cml0dGVuLCBidXQgaGFzbid0IG1hZGUgaXQgb3V0IHRoZSBwb3J0IHlldCkKKyAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gYmUgd3JpdHRlbiBpbiB0aGUgCisgKglzeXN0ZW0sIAorICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZWRnZV9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgbnVtX2NoYXJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VQZW5kaW5nID09IFRSVUUpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFlZGdlX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwludW1fY2hhcnMgPSBlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyAtIGVkZ2VfcG9ydC0+dHhDcmVkaXRzICsgZWRnZV9wb3J0LT50eGZpZm8uY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJaWYgKG51bV9jaGFycykgeworCQlkYmcoIiVzKHBvcnQgJWQpIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBudW1fY2hhcnMpOworCX0KKworCXJldHVybiBudW1fY2hhcnM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWxUaHJvdHRsZQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBzdG9wIHRoZSBkYXRhCisgKgliZWluZyByZWFkIGZyb20gdGhlIHBvcnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdG9wIGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSAocG9ydCwgJnN0b3BfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCB0b2dnbGUgdGhhdCBsaW5lICovCisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJZWRnZV9wb3J0LT5zaGFkb3dNQ1IgJj0gfk1DUl9SVFM7CisJCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBNQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX3VudGhyb3R0bGUKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gcmVzdW1lIHRoZSBkYXRhCisgKgliZWluZyByZWFkIGZyb20gdGhlIHBvcnQgKGNhbGxlZCBhZnRlciBTZXJpYWxUaHJvdHRsZSBpcyBjYWxsZWQpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFlZGdlX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnICgiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0YXJ0IGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdGFydF9jaGFyID0gU1RBUlRfQ0hBUih0dHkpOworCQlzdGF0dXMgPSBlZGdlX3dyaXRlIChwb3J0LCAmc3RhcnRfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCB0b2dnbGUgdGhhdCBsaW5lICovCisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJZWRnZV9wb3J0LT5zaGFkb3dNQ1IgfD0gTUNSX1JUUzsKKwkJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIE1DUiwgZWRnZV9wb3J0LT5zaGFkb3dNQ1IpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlcmlhbFNldFRlcm1pb3MKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gY2hhbmdlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisKKwlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IG9yIHRlcm1pb3MiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnICYmCisJCSAgICB0dHktPnRlcm1pb3MtPmNfaWZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfaWZsYWcpIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGNoYW5nZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlkYmcoIiVzIC0gY2xmYWcgJTA4eCBpZmxhZyAlMDh4IiwgX19GVU5DVElPTl9fLCAKKwkgICAgdHR5LT50ZXJtaW9zLT5jX2NmbGFnLCB0dHktPnRlcm1pb3MtPmNfaWZsYWcpOworCWlmIChvbGRfdGVybWlvcykgeworCQlkYmcoIiVzIC0gb2xkIGNsZmFnICUwOHggb2xkIGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sCisJCSAgICBvbGRfdGVybWlvcy0+Y19jZmxhZywgb2xkX3Rlcm1pb3MtPmNfaWZsYWcpOworCX0KKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIWVkZ2VfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNoYW5nZSB0aGUgcG9ydCBzZXR0aW5ncyB0byB0aGUgbmV3IG9uZXMgc3BlY2lmaWVkICovCisJY2hhbmdlX3BvcnRfc2V0dGluZ3MgKGVkZ2VfcG9ydCwgb2xkX3Rlcm1pb3MpOworCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X2xzcl9pbmZvIC0gZ2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyIGluZm8KKyAqCisgKiBQdXJwb3NlOiBMZXQgdXNlciBjYWxsIGlvY3RsKCkgdG8gZ2V0IGluZm8gd2hlbiB0aGUgVUFSVCBwaHlzaWNhbGx5CisgKiAJICAgIGlzIGVtcHRpZWQuICBPbiBidXMgdHlwZXMgbGlrZSBSUzQ4NSwgdGhlIHRyYW5zbWl0dGVyIG11c3QKKyAqIAkgICAgcmVsZWFzZSB0aGUgYnVzIGFmdGVyIHRyYW5zbWl0dGluZy4gVGhpcyBtdXN0IGJlIGRvbmUgd2hlbgorICogCSAgICB0aGUgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgaXMgZW1wdHksIG5vdCBiZSBkb25lIHdoZW4gdGhlCisgKiAJICAgIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgaXMgZW1wdHkuICBUaGlzIGZ1bmN0aW9uYWxpdHkKKyAqIAkgICAgYWxsb3dzIGFuIFJTNDg1IGRyaXZlciB0byBiZSB3cml0dGVuIGluIHVzZXIgc3BhY2UuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBnZXRfbHNyX2luZm8oc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwlpZiAoZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMgPT0gZWRnZV9wb3J0LT50eENyZWRpdHMgJiYKKwkgICAgZWRnZV9wb3J0LT50eGZpZm8uY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0tIEVtcHR5IiwgX19GVU5DVElPTl9fKTsKKwkJcmVzdWx0ID0gVElPQ1NFUl9URU1UOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X251bWJlcl9ieXRlc19hdmFpbChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisKKwlpZiAoIXR0eSkKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKworCXJlc3VsdCA9IHR0eS0+cmVhZF9jbnQ7CisKKwlkYmcoIiVzKCVkKSA9ICVkIiwgX19GVU5DVElPTl9fLCAgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvL3JldHVybiAwOworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBtY3I7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCW1jciA9IGVkZ2VfcG9ydC0+c2hhZG93TUNSOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCW1jciB8PSBNQ1JfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCW1jciB8PSBNQ1JfRFRSOworCWlmIChzZXQgJiBUSU9DTV9MT09QKQorCQltY3IgfD0gTUNSX0xPT1BCQUNLOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQltY3IgJj0gfk1DUl9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQltY3IgJj0gfk1DUl9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fTE9PUCkKKwkJbWNyICY9IH5NQ1JfTE9PUEJBQ0s7CisKKwllZGdlX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKKworCXNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBNQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TUNSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVkZ2VfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbXNyOworCXVuc2lnbmVkIGludCBtY3I7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCW1zciA9IGVkZ2VfcG9ydC0+c2hhZG93TVNSOworCW1jciA9IGVkZ2VfcG9ydC0+c2hhZG93TUNSOworCXJlc3VsdCA9ICgobWNyICYgTUNSX0RUUikJPyBUSU9DTV9EVFI6IDApCSAgLyogMHgwMDIgKi8KKwkJICB8ICgobWNyICYgTUNSX1JUUykJPyBUSU9DTV9SVFM6IDApICAgLyogMHgwMDQgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX0NUUykJPyBUSU9DTV9DVFM6IDApICAgLyogMHgwMjAgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX0NEKQk/IFRJT0NNX0NBUjogMCkgICAvKiAweDA0MCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfUkkpCT8gVElPQ01fUkk6ICAwKSAgIC8qIDB4MDgwICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9EU1IpCT8gVElPQ01fRFNSOiAwKTsgIC8qIDB4MTAwICovCisKKworCWRiZygiJXMgLS0gJXgiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnJldGluZm8pCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKCFyZXRpbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisKKwl0bXAudHlwZQkJPSBQT1JUXzE2NTUwQTsKKwl0bXAubGluZQkJPSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisJdG1wLnBvcnQJCT0gZWRnZV9wb3J0LT5wb3J0LT5udW1iZXI7CisJdG1wLmlycQkJCT0gMDsKKwl0bXAuZmxhZ3MJCT0gQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlE7CisJdG1wLnhtaXRfZmlmb19zaXplCT0gZWRnZV9wb3J0LT5tYXhUeENyZWRpdHM7CisJdG1wLmJhdWRfYmFzZQkJPSA5NjAwOworCXRtcC5jbG9zZV9kZWxheQkJPSA1KkhaOworCXRtcC5jbG9zaW5nX3dhaXQJPSAzMCpIWjsKKy8vCXRtcC5jdXN0b21fZGl2aXNvcgk9IHN0YXRlLT5jdXN0b21fZGl2aXNvcjsKKy8vCXRtcC5odWI2CQk9IHN0YXRlLT5odWI2OworLy8JdG1wLmlvX3R5cGUJCT0gc3RhdGUtPmlvX3R5cGU7CisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsSW9jdGwKKyAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgaW9jdGwgY2FsbHMgdG8gdGhlIGRyaXZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlZGdlX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKwlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBpY291bnQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kID0gMHgleCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwkJLy8gcmV0dXJuIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUKKwkJY2FzZSBUSU9DSU5ROgorCQkJZGJnKCIlcyAoJWQpIFRJT0NJTlEiLCBfX0ZVTkNUSU9OX18sICBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIGdldF9udW1iZXJfYnl0ZXNfYXZhaWwoZWRnZV9wb3J0LCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU0VSR0VUTFNSOgorCQkJZGJnKCIlcyAoJWQpIFRJT0NTRVJHRVRMU1IiLCBfX0ZVTkNUSU9OX18sICBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIGdldF9sc3JfaW5mbyhlZGdlX3BvcnQsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZyk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIFRJT0NHU0VSSUFMOgorCQkJZGJnKCIlcyAoJWQpIFRJT0NHU0VSSUFMIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiBnZXRfc2VyaWFsX2luZm8oZWRnZV9wb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWRiZygiJXMgKCVkKSBUSU9DU1NFUklBTCIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlcik7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NNSVdBSVQ6CisJCQlkYmcoIiVzICglZCkgVElPQ01JV0FJVCIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlcik7CisJCQljcHJldiA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQkJd2hpbGUgKDEpIHsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCXNjaGVkdWxlKCk7CisJCQkJZmluaXNoX3dhaXQoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQsICZ3YWl0KTsKKwkJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJCWNub3cgPSBlZGdlX3BvcnQtPmljb3VudDsKKwkJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJCSAgICBjbm93LmRjZCA9PSBjcHJldi5kY2QgJiYgY25vdy5jdHMgPT0gY3ByZXYuY3RzKQorCQkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSkgKSB7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQljcHJldiA9IGNub3c7CisJCQl9CisJCQkvKiBOT1RSRUFDSEVEICovCisJCQlicmVhazsKKworCQljYXNlIFRJT0NHSUNPVU5UOgorCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQkJbWVtc2V0KCZpY291bnQsIDAsIHNpemVvZihpY291bnQpKTsKKwkJCWljb3VudC5jdHMgPSBjbm93LmN0czsKKwkJCWljb3VudC5kc3IgPSBjbm93LmRzcjsKKwkJCWljb3VudC5ybmcgPSBjbm93LnJuZzsKKwkJCWljb3VudC5kY2QgPSBjbm93LmRjZDsKKwkJCWljb3VudC5yeCA9IGNub3cucng7CisJCQlpY291bnQudHggPSBjbm93LnR4OworCQkJaWNvdW50LmZyYW1lID0gY25vdy5mcmFtZTsKKwkJCWljb3VudC5vdmVycnVuID0gY25vdy5vdmVycnVuOworCQkJaWNvdW50LnBhcml0eSA9IGNub3cucGFyaXR5OworCQkJaWNvdW50LmJyayA9IGNub3cuYnJrOworCQkJaWNvdW50LmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKKworCQkJZGJnKCIlcyAoJWQpIFRJT0NHSUNPVU5UIFJYPSVkLCBUWD0lZCIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlciwgaWNvdW50LnJ4LCBpY291bnQudHggKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaWNvdW50LCBzaXplb2YoaWNvdW50KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsQnJlYWsKKyAqCXRoaXMgZnVuY3Rpb24gc2VuZHMgYSBicmVhayB0byB0aGUgcG9ydAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9icmVhayAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHN0YXR1czsKKworCS8qIGZsdXNoIGFuZCBjaGFzZSAqLworCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBUUlVFOworCisJZGJnKCIlcyAtIFNlbmRpbmcgSU9TUF9DTURfQ0hBU0VfUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfQ0hBU0VfUE9SVCwgMCk7CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8vIGJsb2NrIHVudGlsIGNoYXNlIGZpbmlzaGVkCisJCWJsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKGVkZ2VfcG9ydCk7CisJfSBlbHNlIHsKKwkJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IEZBTFNFOworCX0KKworCWlmIChicmVha19zdGF0ZSA9PSAtMSkgeworCQlkYmcoIiVzIC0gU2VuZGluZyBJT1NQX0NNRF9TRVRfQlJFQUsiLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSBzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9TRVRfQlJFQUssIDApOworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NMRUFSX0JSRUFLIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfQ0xFQVJfQlJFQUssIDApOworCX0KKwlpZiAoc3RhdHVzKSB7CisJCWRiZygiJXMgLSBlcnJvciBzZW5kaW5nIGJyZWFrIHNldC9jbGVhciBjb21tYW5kLiIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJvY2Vzc19yY3ZkX2RhdGEKKyAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZGF0YSByZWNlaXZlZCBvbiB0aGUgYnVsayBpbiBwaXBlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcHJvY2Vzc19yY3ZkX2RhdGEgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCB1bnNpZ25lZCBjaGFyICogYnVmZmVyLCBfX3UxNiBidWZmZXJMZW5ndGgpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJX191MTYgbGFzdEJ1ZmZlckxlbmd0aDsKKwlfX3UxNiByeExlbjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJbGFzdEJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aCArIDE7CisKKwl3aGlsZSAoYnVmZmVyTGVuZ3RoID4gMCkgeworCQkvKiBmYWlsc2FmZSBpbmNhc2Ugd2UgZ2V0IGEgbWVzc2FnZSB0aGF0IHdlIGRvbid0IHVuZGVyc3RhbmQgKi8KKwkJaWYgKGxhc3RCdWZmZXJMZW5ndGggPT0gYnVmZmVyTGVuZ3RoKSB7CisJCQlkYmcoIiVzIC0gc3R1Y2sgaW4gbG9vcCwgZXhpdGluZyBpdC4iLCBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJbGFzdEJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDsKKworCQlzd2l0Y2ggKGVkZ2Vfc2VyaWFsLT5yeFN0YXRlKSB7CisJCQljYXNlIEVYUEVDVF9IRFIxOgorCQkJCWVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEgPSAqYnVmZmVyOworCQkJCSsrYnVmZmVyOworCQkJCS0tYnVmZmVyTGVuZ3RoOworCisJCQkJaWYgKGJ1ZmZlckxlbmd0aCA9PSAwKSB7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBvdGhlcndpc2UsIGRyb3Agb24gdGhyb3VnaCAqLworCisJCQljYXNlIEVYUEVDVF9IRFIyOgorCQkJCWVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjIgPSAqYnVmZmVyOworCQkJCSsrYnVmZmVyOworCQkJCS0tYnVmZmVyTGVuZ3RoOworCisJCQkJZGJnKCIlcyAtIEhkcjE9JTAyWCBIZHIyPSUwMlgiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEsIGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjIpOworCisJCQkJLy8gUHJvY2VzcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGhlYWRlciBpcworCQkJCS8vIGRhdGEgb3Igc3RhdHVzCisKKwkJCQlpZiAoSVNfQ01EX1NUQVRfSERSKGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEpKSB7CisJCQkJCS8vIERlY29kZSB0aGlzIHN0YXR1cyBoZWFkZXIgYW5kIGdvdG8gRVhQRUNUX0hEUjEgKGlmIHdlCisJCQkJCS8vIGNhbiBwcm9jZXNzIHRoZSBzdGF0dXMgd2l0aCBvbmx5IDIgYnl0ZXMpLCBvciBnb3RvCisJCQkJCS8vIEVYUEVDVF9IRFIzIHRvIGdldCB0aGUgdGhpcmQgYnl0ZS4KKworCQkJCQllZGdlX3NlcmlhbC0+cnhQb3J0ICAgICAgID0gSU9TUF9HRVRfSERSX1BPUlQoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXR1c0NvZGUgPSBJT1NQX0dFVF9TVEFUVVNfQ09ERShlZGdlX3NlcmlhbC0+cnhIZWFkZXIxKTsKKworCQkJCQlpZiAoIUlPU1BfU1RBVFVTX0lTXzJCWVRFKGVkZ2Vfc2VyaWFsLT5yeFN0YXR1c0NvZGUpKSB7CisJCQkJCQkvLyBUaGlzIHN0YXR1cyBuZWVkcyBhZGRpdGlvbmFsIGJ5dGVzLiBTYXZlIHdoYXQgd2UgaGF2ZQorCQkJCQkJLy8gYW5kIHRoZW4gd2FpdCBmb3IgbW9yZSBkYXRhLgorCQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdHVzUGFyYW0gPSBlZGdlX3NlcmlhbC0+cnhIZWFkZXIyOworCisJCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIzOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQkvLyBXZSBoYXZlIGFsbCB0aGUgaGVhZGVyIGJ5dGVzLCBwcm9jZXNzIHRoZSBzdGF0dXMgbm93CisJCQkJCXByb2Nlc3NfcmN2ZF9zdGF0dXMgKGVkZ2Vfc2VyaWFsLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIyLCAwKTsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMTsKKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4UG9ydCA9IElPU1BfR0VUX0hEUl9QT1JUKGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEpOworCQkJCQllZGdlX3NlcmlhbC0+cnhCeXRlc1JlbWFpbmluZyA9IElPU1BfR0VUX0hEUl9EQVRBX0xFTihlZGdlX3NlcmlhbC0+cnhIZWFkZXIxLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIyKTsKKworCQkJCQlkYmcoIiVzIC0gRGF0YSBmb3IgUG9ydCAldSBMZW4gJXUiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nKTsKKworCQkJCQkvL0FTU0VSVCggRGV2RXh0LT5SeFBvcnQgPCBEZXZFeHQtPk51bVBvcnRzICk7CisJCQkJCS8vQVNTRVJUKCBEZXZFeHQtPlJ4Qnl0ZXNSZW1haW5pbmcgPCBJT1NQX01BWF9EQVRBX0xFTkdUSCApOworCisJCQkJCWlmIChidWZmZXJMZW5ndGggPT0gMCApIHsKKwkJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0RBVEE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQkvLyBFbHNlLCBkcm9wIHRocm91Z2gKKwkJCQl9CisKKwkJCWNhc2UgRVhQRUNUX0RBVEE6CS8vIEV4cGVjdCBkYXRhCisKKwkJCQlpZiAoYnVmZmVyTGVuZ3RoIDwgZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcpIHsKKwkJCQkJcnhMZW4gPSBidWZmZXJMZW5ndGg7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0RBVEE7CS8vIEV4cGVjdCBkYXRhIHRvIHN0YXJ0IG5leHQgYnVmZmVyCisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gQnVmTGVuID49IFJ4Qnl0ZXNSZW1haW5pbmcKKwkJCQkJcnhMZW4gPSBlZGdlX3NlcmlhbC0+cnhCeXRlc1JlbWFpbmluZzsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMTsJLy8gU3RhcnQgYW5vdGhlciBoZWFkZXIgbmV4dCB0aW1lCisJCQkJfQorCisJCQkJYnVmZmVyTGVuZ3RoIC09IHJ4TGVuOworCQkJCWVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nIC09IHJ4TGVuOworCisJCQkJLyogc3BpdCB0aGlzIGRhdGEgYmFjayBpbnRvIHRoZSB0dHkgZHJpdmVyIGlmIHRoaXMgcG9ydCBpcyBvcGVuICovCisJCQkJaWYgKHJ4TGVuKSB7CisJCQkJCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W2VkZ2Vfc2VyaWFsLT5yeFBvcnRdOworCQkJCQllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCQkJCWlmIChlZGdlX3BvcnQtPm9wZW4pIHsKKwkJCQkJCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCQkJCQkJaWYgKHR0eSkgeworCQkJCQkJCWRiZygiJXMgLSBTZW5kaW5nICVkIGJ5dGVzIHRvIFRUWSBmb3IgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcnhMZW4sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQpOworCQkJCQkJCWVkZ2VfdHR5X3JlY3YoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCB0dHksIGJ1ZmZlciwgcnhMZW4pOworCQkJCQkJfQorCQkJCQkJZWRnZV9wb3J0LT5pY291bnQucnggKz0gcnhMZW47CisJCQkJCX0KKwkJCQkJYnVmZmVyICs9IHJ4TGVuOworCQkJCX0KKworCQkJCWJyZWFrOworCisJCQljYXNlIEVYUEVDVF9IRFIzOgkJCS8vIEV4cGVjdCAzcmQgYnl0ZSBvZiBzdGF0dXMgaGVhZGVyCisJCQkJZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMyA9ICpidWZmZXI7CisJCQkJKytidWZmZXI7CisJCQkJLS1idWZmZXJMZW5ndGg7CisKKwkJCQkvLyBXZSBoYXZlIGFsbCB0aGUgaGVhZGVyIGJ5dGVzLCBwcm9jZXNzIHRoZSBzdGF0dXMgbm93CisJCQkJcHJvY2Vzc19yY3ZkX3N0YXR1cyAoZWRnZV9zZXJpYWwsIGVkZ2Vfc2VyaWFsLT5yeFN0YXR1c1BhcmFtLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIzKTsKKwkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIxOworCQkJCWJyZWFrOworCisJCX0KKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwcm9jZXNzX3JjdmRfc3RhdHVzCisgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGFueSBzdGF0dXMgbWVzc2FnZXMgcmVjZWl2ZWQgb24gdGhlIGJ1bGsgaW4gcGlwZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmN2ZF9zdGF0dXMgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCBfX3U4IGJ5dGUyLCBfX3U4IGJ5dGUzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwlfX3U4IGNvZGUgPSBlZGdlX3NlcmlhbC0+cnhTdGF0dXNDb2RlOworCisJLyogc3dpdGNoIHRoZSBwb3J0IHBvaW50ZXIgdG8gdGhlIG9uZSBiZWluZyBjdXJyZW50bHkgdGFsa2VkIGFib3V0ICovCisJcG9ydCA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbZWRnZV9zZXJpYWwtPnJ4UG9ydF07CisJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gZWRnZV9wb3J0ID09IE5VTEwgZm9yIHBvcnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCk7CisKKwlpZiAoY29kZSA9PSBJT1NQX0VYVF9TVEFUVVMpIHsKKwkJc3dpdGNoIChieXRlMikgeworCQkJY2FzZSBJT1NQX0VYVF9TVEFUVVNfQ0hBU0VfUlNQOgorCQkJCS8vIHdlIHdhbnQgdG8gZG8gRVhUIHN0YXR1cyByZWdhcmRsZXNzIG9mIHBvcnQgb3Blbi9jbG9zZWQgCisJCQkJZGJnKCIlcyAtIFBvcnQgJXUgRVhUIENIQVNFX1JTUCBEYXRhID0gJTAyeCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTMgKTsKKwkJCQkvLyBDdXJyZW50bHksIHRoZSBvbmx5IEVYVF9TVEFUVVMgaXMgQ2hhc2UsIHNvIHByb2Nlc3MgaGVyZSBpbnN0ZWFkIG9mIG9uZSBtb3JlIGNhbGwKKwkJCQkvLyB0byBvbmUgbW9yZSBzdWJyb3V0aW5lLiBJZi93aGVuIG1vcmUgRVhUX1NUQVRVUywgdGhlcmUnbGwgYmUgbW9yZSB3b3JrIHRvIGRvLgorCQkJCS8vIEFsc28sIHdlIGN1cnJlbnRseSBjbGVhciBmbGFnIGFuZCBjbG9zZSB0aGUgcG9ydCByZWdhcmRsZXNzIG9mIGNvbnRlbnQgb2YgYWJvdmUncyBCeXRlMy4KKwkJCQkvLyBXZSBjb3VsZCBjaG9vc2UgdG8gZG8gc29tZXRoaW5nIGVsc2Ugd2hlbiBCeXRlMyBzYXlzIFRpbWVvdXQgb24gQ2hhc2UgZnJvbSBFZGdlcG9ydCwKKwkJCQkvLyBsaWtlIHdhaXQgbG9uZ2VyIGluIGJsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlLCBidXQgZm9yIG5vdyB3ZSBkb24ndC4gCisJCQkJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IEZBTFNFOworCQkJCXdha2VfdXAgKCZlZGdlX3BvcnQtPndhaXRfY2hhc2UpOworCQkJCXJldHVybjsKKworCQkJY2FzZSBJT1NQX0VYVF9TVEFUVVNfUlhfQ0hFQ0tfUlNQOgorCQkJCWRiZygiJXMgPT09PT09PT09PSBQb3J0ICV1IENIRUNLX1JTUCBTZXF1ZW5jZSA9ICUwMnggPT09PT09PT09PT09PVxuIiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMyApOworCQkJCS8vUG9ydC0+UnhDaGVja1JzcCA9IFRSVUU7CisJCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGNvZGUgPT0gSU9TUF9TVEFUVVNfT1BFTl9SU1ApIHsKKwkJZWRnZV9wb3J0LT50eENyZWRpdHMgPSBHRVRfVFhfQlVGRkVSX1NJWkUoYnl0ZTMpOworCQllZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyA9IGVkZ2VfcG9ydC0+dHhDcmVkaXRzOworCQlkYmcoIiVzIC0gUG9ydCAldSBPcGVuIFJlc3BvbnNlIEluaXRhbCBNU1IgPSAlMDJ4IFR4QnVmZmVyU2l6ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgZWRnZV9wb3J0LT50eENyZWRpdHMpOworCQloYW5kbGVfbmV3X21zciAoZWRnZV9wb3J0LCBieXRlMik7CisKKwkJLyogc2VuZCB0aGUgY3VycmVudCBsaW5lIHNldHRpbmdzIHRvIHRoZSBwb3J0IHNvIHdlIGFyZSBpbiBzeW5jIHdpdGggYW55IGZ1cnRoZXIgdGVybWlvcyBjYWxscyAqLworCQlpZiAoZWRnZV9wb3J0LT5wb3J0LT50dHkpCisJCQljaGFuZ2VfcG9ydF9zZXR0aW5ncyAoZWRnZV9wb3J0LCBlZGdlX3BvcnQtPnBvcnQtPnR0eS0+dGVybWlvcyk7CisKKwkJLyogd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIG9wZW4gKi8KKwkJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IEZBTFNFOworCQllZGdlX3BvcnQtPm9wZW4gPSBUUlVFOworCQl3YWtlX3VwKCZlZGdlX3BvcnQtPndhaXRfb3Blbik7CisJCXJldHVybjsKKwl9CisKKwkvLyBJZiBwb3J0IGlzIGNsb3NlZCwgc2lsZW50bHkgZGlzY2FyZCBhbGwgcmN2ZCBzdGF0dXMuIFdlIGNhbgorCS8vIGhhdmUgY2FzZXMgd2hlcmUgYnVmZmVyZWQgc3RhdHVzIGlzIHJlY2VpdmVkIEFGVEVSIHRoZSBjbG9zZQorCS8vIHBvcnQgY29tbWFuZCBpcyBzZW50IHRvIHRoZSBFZGdlcG9ydC4KKwlpZiAoKCFlZGdlX3BvcnQtPm9wZW4gKSB8fCAoZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcpKSB7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNvZGUpIHsKKwkJLy8gTm90IGN1cnJlbnRseSBzZW50IGJ5IEVkZ2Vwb3J0CisJCWNhc2UgSU9TUF9TVEFUVVNfTFNSOgorCQkJZGJnKCIlcyAtIFBvcnQgJXUgTFNSIFN0YXR1cyA9ICUwMngiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUyKTsKKwkJCWhhbmRsZV9uZXdfbHNyIChlZGdlX3BvcnQsIEZBTFNFLCBieXRlMiwgMCk7CisJCQlicmVhazsKKworCQljYXNlIElPU1BfU1RBVFVTX0xTUl9EQVRBOgorCQkJZGJnKCIlcyAtIFBvcnQgJXUgTFNSIFN0YXR1cyA9ICUwMngsIERhdGEgPSAlMDJ4IiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMiwgYnl0ZTMpOworCQkJLy8gYnl0ZTIgaXMgTFNSIFJlZ2lzdGVyCisJCQkvLyBieXRlMyBpcyBicm9rZW4gZGF0YSBieXRlCisJCQloYW5kbGVfbmV3X2xzciAoZWRnZV9wb3J0LCBUUlVFLCBieXRlMiwgYnl0ZTMpOworCQkJYnJlYWs7CisJCQkvLworCQkJLy8JY2FzZSBJT1NQX0VYVF80X1NUQVRVUzoKKwkJCS8vCQlkYmcoIiVzIC0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCBEYXRhID0gJTAyeCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGJ5dGUzKTsKKwkJCS8vCQlicmVhazsKKwkJCS8vCisJCWNhc2UgSU9TUF9TVEFUVVNfTVNSOgorCQkJZGJnKCIlcyAtIFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMngiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUyKTsKKworCQkJLy8gUHJvY2VzcyB0aGlzIG5ldyBtb2RlbSBzdGF0dXMgYW5kIGdlbmVyYXRlIGFwcHJvcHJpYXRlCisJCQkvLyBldmVudHMsIGV0YywgYmFzZWQgb24gdGhlIG5ldyBzdGF0dXMuIFRoaXMgcm91dGluZQorCQkJLy8gYWxzbyBzYXZlcyB0aGUgTVNSIGluIFBvcnQtPlNoYWRvd01zci4KKwkJCWhhbmRsZV9uZXdfbXNyKGVkZ2VfcG9ydCwgYnl0ZTIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBVbnJlY29nbml6ZWQgSU9TUCBzdGF0dXMgY29kZSAldVxuIiwgX19GVU5DVElPTl9fLCBjb2RlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfdHR5X3JlY3YKKyAqCXRoaXMgZnVuY3Rpb24gcGFzc2VzIGRhdGEgb24gdG8gdGhlIHR0eSBmbGlwIGJ1ZmZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGNudDsKKworCWRvIHsKKwkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY250ID0gbWluKGxlbmd0aCwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCk7CisJCW1lbWNweSh0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBkYXRhLCBjbnQpOworCQltZW1zZXQodHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgMCwgY250KTsKKwkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuY291bnQgKz0gY250OworCQlkYXRhICs9IGNudDsKKwkJbGVuZ3RoIC09IGNudDsKKwl9IHdoaWxlIChsZW5ndGggPiAwKTsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBoYW5kbGVfbmV3X21zcgorICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFueSBjaGFuZ2UgdG8gdGhlIG1zciByZWdpc3RlciBmb3IgYSBwb3J0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaGFuZGxlX25ld19tc3Ioc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBuZXdNc3IpCit7CisJc3RydWN0ICBhc3luY19pY291bnQgKmljb3VudDsKKworCWRiZygiJXMgJTAyeCIsIF9fRlVOQ1RJT05fXywgbmV3TXNyKTsKKworCWlmIChuZXdNc3IgJiAoRURHRVBPUlRfTVNSX0RFTFRBX0NUUyB8IEVER0VQT1JUX01TUl9ERUxUQV9EU1IgfCBFREdFUE9SVF9NU1JfREVMVEFfUkkgfCBFREdFUE9SVF9NU1JfREVMVEFfQ0QpKSB7CisJCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKKworCQkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0NUUykgeworCQkJaWNvdW50LT5jdHMrKzsKKwkJfQorCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0RTUikgeworCQkJaWNvdW50LT5kc3IrKzsKKwkJfQorCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0NEKSB7CisJCQlpY291bnQtPmRjZCsrOworCQl9CisJCWlmIChuZXdNc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfUkkpIHsKKwkJCWljb3VudC0+cm5nKys7CisJCX0KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0KTsKKwl9CisKKwkvKiBTYXZlIHRoZSBuZXcgbW9kZW0gc3RhdHVzICovCisJZWRnZV9wb3J0LT5zaGFkb3dNU1IgPSBuZXdNc3IgJiAweGYwOworCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaGFuZGxlX25ld19sc3IKKyAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgY2hhbmdlIHRvIHRoZSBsc3IgcmVnaXN0ZXIgZm9yIGEgcG9ydC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbHNyKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggbHNyRGF0YSwgX191OCBsc3IsIF9fdTggZGF0YSkKK3sKKwlfX3U4ICAgIG5ld0xzciA9IChfX3U4KShsc3IgJiAoX191OCkoTFNSX09WRVJfRVJSIHwgTFNSX1BBUl9FUlIgfCBMU1JfRlJNX0VSUiB8IExTUl9CUkVBSykpOworCXN0cnVjdCAgYXN5bmNfaWNvdW50ICppY291bnQ7CisKKwlkYmcoIiVzIC0gJTAyeCIsIF9fRlVOQ1RJT05fXywgbmV3THNyKTsKKworCWVkZ2VfcG9ydC0+c2hhZG93TFNSID0gbHNyOworCisJaWYgKG5ld0xzciAmIExTUl9CUkVBSykgeworCQkvLworCQkvLyBQYXJpdHkgYW5kIEZyYW1pbmcgZXJyb3JzIG9ubHkgY291bnQgaWYgdGhleQorCQkvLyBvY2N1ciBleGNsdXNpdmUgb2YgYSBicmVhayBiZWluZworCQkvLyByZWNlaXZlZC4KKwkJLy8KKwkJbmV3THNyICY9IChfX3U4KShMU1JfT1ZFUl9FUlIgfCBMU1JfQlJFQUspOworCX0KKworCS8qIFBsYWNlIExTUiBkYXRhIGJ5dGUgaW50byBSeCBidWZmZXIgKi8KKwlpZiAobHNyRGF0YSAmJiBlZGdlX3BvcnQtPnBvcnQtPnR0eSkKKwkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIGVkZ2VfcG9ydC0+cG9ydC0+dHR5LCAmZGF0YSwgMSk7CisKKwkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKKwlpZiAobmV3THNyICYgTFNSX0JSRUFLKSB7CisJCWljb3VudC0+YnJrKys7CisJfQorCWlmIChuZXdMc3IgJiBMU1JfT1ZFUl9FUlIpIHsKKwkJaWNvdW50LT5vdmVycnVuKys7CisJfQorCWlmIChuZXdMc3IgJiBMU1JfUEFSX0VSUikgeworCQlpY291bnQtPnBhcml0eSsrOworCX0KKwlpZiAobmV3THNyICYgTFNSX0ZSTV9FUlIpIHsKKwkJaWNvdW50LT5mcmFtZSsrOworCX0KKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3JhbV93cml0ZQorICoJd3JpdGVzIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBFZGdlcG9ydCBkZXZpY2UncyBzcmFtIHN0YXJ0aW5nIGF0IHRoZSAKKyAqCWdpdmVuIGFkZHJlc3MuCisgKglJZiBzdWNjZXNzZnVsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2UgaXQgcmV0dXJucworICoJYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc3JhbV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKQoreworCWludCByZXN1bHQ7CisJX191MTYgY3VycmVudF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisJZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX0ZVTkNUSU9OX18sIGV4dEFkZHIsIGFkZHIsIGxlbmd0aCk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoNjQsIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywgNjQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBuZWVkIHRvIHNwbGl0IHRoZXNlIHdyaXRlcyB1cCBpbnRvIDY0IGJ5dGUgY2h1bmtzICovCisJcmVzdWx0ID0gMDsKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlpZiAobGVuZ3RoID4gNjQpIHsKKwkJCWN1cnJlbnRfbGVuZ3RoID0gNjQ7CisJCX0gZWxzZSB7CisJCQljdXJyZW50X2xlbmd0aCA9IGxlbmd0aDsKKwkJfQorLy8JCWRiZygiJXMgLSB3cml0aW5nICV4LCAleCwgJWQiLCBfX0ZVTkNUSU9OX18sIGV4dEFkZHIsIGFkZHIsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgVVNCX1JFUVVFU1RfSU9OX1dSSVRFX1JBTSwgCisJCQkJCSAgMHg0MCwgYWRkciwgZXh0QWRkciwgdHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X2xlbmd0aCwgMzAwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlicmVhazsKKwkJbGVuZ3RoIC09IGN1cnJlbnRfbGVuZ3RoOworCQlhZGRyICs9IGN1cnJlbnRfbGVuZ3RoOworCQlkYXRhICs9IGN1cnJlbnRfbGVuZ3RoOworCX0gICAgICAgCisKKwlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByb21fd3JpdGUKKyAqCXdyaXRlcyBhIG51bWJlciBvZiBieXRlcyB0byB0aGUgRWRnZXBvcnQgZGV2aWNlJ3MgUk9NIHN0YXJ0aW5nIGF0IHRoZQorICoJZ2l2ZW4gYWRkcmVzcy4KKyAqCUlmIHN1Y2Nlc3NmdWwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKglhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvZiB0aGUgcHJvYmxlbS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCByb21fd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworLy8JZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX0ZVTkNUSU9OX18sIGV4dEFkZHIsIGFkZHIsIGxlbmd0aCk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoNjQsIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywgNjQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBuZWVkIHRvIHNwbGl0IHRoZXNlIHdyaXRlcyB1cCBpbnRvIDY0IGJ5dGUgY2h1bmtzICovCisJcmVzdWx0ID0gMDsKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlpZiAobGVuZ3RoID4gNjQpIHsKKwkJCWN1cnJlbnRfbGVuZ3RoID0gNjQ7CisJCX0gZWxzZSB7CisJCQljdXJyZW50X2xlbmd0aCA9IGxlbmd0aDsKKwkJfQorLy8JCWRiZygiJXMgLSB3cml0aW5nICV4LCAleCwgJWQiLCBfX0ZVTkNUSU9OX18sIGV4dEFkZHIsIGFkZHIsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgVVNCX1JFUVVFU1RfSU9OX1dSSVRFX1JPTSwgCisJCQkJCSAgMHg0MCwgYWRkciwgZXh0QWRkciwgdHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X2xlbmd0aCwgMzAwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlicmVhazsKKwkJbGVuZ3RoIC09IGN1cnJlbnRfbGVuZ3RoOworCQlhZGRyICs9IGN1cnJlbnRfbGVuZ3RoOworCQlkYXRhICs9IGN1cnJlbnRfbGVuZ3RoOworCX0gICAgICAgCisKKwlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiByb21fcmVhZAorICoJcmVhZHMgYSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgRWRnZXBvcnQgZGV2aWNlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbgorICoJYWRkcmVzcy4KKyAqCUlmIHN1Y2Nlc3NmdWwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKglhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvZiB0aGUgcHJvYmxlbS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCByb21fcmVhZCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgZXh0QWRkciwgX191MTYgYWRkciwgX191MTYgbGVuZ3RoLCBfX3U4ICpkYXRhKQoreworCWludCByZXN1bHQ7CisJX191MTYgY3VycmVudF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisJZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX0ZVTkNUSU9OX18sIGV4dEFkZHIsIGFkZHIsIGxlbmd0aCk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoNjQsIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywgNjQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBuZWVkIHRvIHNwbGl0IHRoZXNlIHJlYWRzIHVwIGludG8gNjQgYnl0ZSBjaHVua3MgKi8KKwlyZXN1bHQgPSAwOworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCWlmIChsZW5ndGggPiA2NCkgeworCQkJY3VycmVudF9sZW5ndGggPSA2NDsKKwkJfSBlbHNlIHsKKwkJCWN1cnJlbnRfbGVuZ3RoID0gbGVuZ3RoOworCQl9CisvLwkJZGJnKCIlcyAtICV4LCAleCwgJWQiLCBfX0ZVTkNUSU9OX18sIGV4dEFkZHIsIGFkZHIsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgVVNCX1JFUVVFU1RfSU9OX1JFQURfUk9NLCAKKwkJCQkJICAweEMwLCBhZGRyLCBleHRBZGRyLCB0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoLCAzMDApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWJyZWFrOworCQltZW1jcHkgKGRhdGEsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgpOworCQlsZW5ndGggLT0gY3VycmVudF9sZW5ndGg7CisJCWFkZHIgKz0gY3VycmVudF9sZW5ndGg7CisJCWRhdGEgKz0gY3VycmVudF9sZW5ndGg7CisJfSAgICAgICAKKworCWtmcmVlICh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHNlbmRfaW9zcF9leHRfY21kCisgKglJcyB1c2VkIHRvIHNlbmQgYSBJT1NQIG1lc3NhZ2UgdG8gdGhlIEVkZ2Vwb3J0IGRldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlbmRfaW9zcF9leHRfY21kIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGNvbW1hbmQsIF9fdTggcGFyYW0pCit7CisJdW5zaWduZWQgY2hhciAgICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAgICpjdXJyZW50Q29tbWFuZDsKKwlpbnQgICAgICAgICAgICAgbGVuZ3RoID0gMDsKKwlpbnQgICAgICAgICAgICAgc3RhdHVzID0gMDsKKworCWRiZygiJXMgLSAlZCwgJWQiLCBfX0ZVTkNUSU9OX18sIGNvbW1hbmQsIHBhcmFtKTsKKworCWJ1ZmZlciA9ICBrbWFsbG9jICgxMCwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywgMTApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljdXJyZW50Q29tbWFuZCA9IGJ1ZmZlcjsKKworCU1BS0VfQ01EX0VYVF9DTUQgKCZjdXJyZW50Q29tbWFuZCwgJmxlbmd0aCwKKwkJCSAgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3IsCisJCQkgIGNvbW1hbmQsIHBhcmFtKTsKKworCXN0YXR1cyA9IHdyaXRlX2NtZF91c2IgKGVkZ2VfcG9ydCwgYnVmZmVyLCBsZW5ndGgpOworCWlmIChzdGF0dXMpIHsKKwkJLyogc29tZXRoaW5nIGJhZCBoYXBwZW5lZCwgbGV0J3MgZnJlZSB1cCB0aGUgbWVtb3J5ICovCisJCWtmcmVlKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHdyaXRlX2NtZF91c2IKKyAqCXRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBnaXZlbiBidWZmZXIgb3V0IHRvIHRoZSBidWxrIHdyaXRlIGVuZHBvaW50LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCB3cml0ZV9jbWRfdXNiIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsKTsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHRpbWVvdXQ7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3BvcnQtPnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGJ1ZmZlcik7CisKKwkvKiBBbGxvY2F0ZSBvdXIgbmV4dCB1cmIgKi8KKwl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlDbWRVcmJzKys7CisJZGJnKCIlcyAtIEFMTE9DQVRFIFVSQiAlcCAob3V0c3RhbmRpbmcgJWQpIiwgX19GVU5DVElPTl9fLCB1cmIsIENtZFVyYnMpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgIHVzYl9zbmRidWxrcGlwZShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIGVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCksCisJCSAgICAgICBidWZmZXIsIGxlbmd0aCwgZWRnZV9idWxrX291dF9jbWRfY2FsbGJhY2ssIGVkZ2VfcG9ydCk7CisKKwllZGdlX3BvcnQtPmNvbW1hbmRQZW5kaW5nID0gVFJVRTsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLworCQlkZXZfZXJyKCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgY29tbWFuZCkgZmFpbGVkLCBzdGF0dXMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCUNtZFVyYnMtLTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvLyB3YWl0IGZvciBjb21tYW5kIHRvIGZpbmlzaAorCXRpbWVvdXQgPSBDT01NQU5EX1RJTUVPVVQ7CisjaWYgMAorCXdhaXRfZXZlbnQgKCZlZGdlX3BvcnQtPndhaXRfY29tbWFuZCwgKGVkZ2VfcG9ydC0+Y29tbWFuZFBlbmRpbmcgPT0gRkFMU0UpKTsKKworCWlmIChlZGdlX3BvcnQtPmNvbW1hbmRQZW5kaW5nID09IFRSVUUpIHsKKwkJLyogY29tbWFuZCB0aW1lZCBvdXQgKi8KKwkJZGJnKCIlcyAtIGNvbW1hbmQgdGltZWQgb3V0IiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlCisgKgl0aGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBwcm9wZXIgY29tbWFuZCB0byBjaGFuZ2UgdGhlIGJhdWQgcmF0ZSBvZiB0aGUKKyAqCXNwZWNpZmllZCBwb3J0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIGludCBiYXVkUmF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpjbWRCdWZmZXI7CisJdW5zaWduZWQgY2hhciAqY3VyckNtZDsKKwlpbnQgY21kTGVuID0gMDsKKwlpbnQgZGl2aXNvcjsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgbnVtYmVyID0gZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcoIiVzIC0gcG9ydCA9ICVkLCBiYXVkID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLCBiYXVkUmF0ZSk7CisKKwlzdGF0dXMgPSBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yIChiYXVkUmF0ZSwgJmRpdmlzb3IpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIGJhZCBiYXVkIHJhdGVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLy8gQWxsb2MgbWVtb3J5IGZvciB0aGUgc3RyaW5nIG9mIGNvbW1hbmRzLgorCWNtZEJ1ZmZlciA9ICBrbWFsbG9jICgweDEwMCwgR0ZQX0FUT01JQyk7CisJaWYgKCFjbWRCdWZmZXIpIHsKKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywgMHgxMDApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY3VyckNtZCA9IGNtZEJ1ZmZlcjsKKworCS8vIEVuYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaAorCU1BS0VfQ01EX1dSSVRFX1JFRyggJmN1cnJDbWQsICZjbWRMZW4sIG51bWJlciwgTENSLCBMQ1JfRExfRU5BQkxFICk7CisKKwkvLyBXcml0ZSB0aGUgZGl2aXNvciBpdHNlbGYKKwlNQUtFX0NNRF9XUklURV9SRUcoICZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIERMTCwgTE9XOCAoZGl2aXNvcikgKTsKKwlNQUtFX0NNRF9XUklURV9SRUcoICZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIERMTSwgSElHSDgoZGl2aXNvcikgKTsKKworCS8vIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWUgdG8gZGlzYWJsZSBhY2Nlc3MgdG8gZGl2aXNvciBsYXRjaAorCU1BS0VfQ01EX1dSSVRFX1JFRyggJmN1cnJDbWQsICZjbWRMZW4sIG51bWJlciwgTENSLCBlZGdlX3BvcnQtPnNoYWRvd0xDUik7CisKKwlzdGF0dXMgPSB3cml0ZV9jbWRfdXNiKGVkZ2VfcG9ydCwgY21kQnVmZmVyLCBjbWRMZW4gKTsKKwlpZiAoc3RhdHVzKSB7CisJCS8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQsIGxldCdzIGZyZWUgdXAgdGhlIG1lbW9yeSAqLworCQlrZnJlZSAoY21kQnVmZmVyKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY2FsY19iYXVkX3JhdGVfZGl2aXNvcgorICoJdGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBwcm9wZXIgYmF1ZCByYXRlIGRpdmlzb3IgZm9yIHRoZSBzcGVjaWZpZWQKKyAqCWJhdWQgcmF0ZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY2FsY19iYXVkX3JhdGVfZGl2aXNvciAoaW50IGJhdWRyYXRlLCBpbnQgKmRpdmlzb3IpCit7CisJaW50IGk7CisJX191MTYgY3VzdG9tOworCisKKwlkYmcoIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWRyYXRlKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRU5UUklFUyhkaXZpc29yX3RhYmxlKTsgaSsrKSB7CisJCWlmICggZGl2aXNvcl90YWJsZVtpXS5CYXVkUmF0ZSA9PSBiYXVkcmF0ZSApIHsKKwkJCSpkaXZpc29yID0gZGl2aXNvcl90YWJsZVtpXS5EaXZpc29yOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvLyBXZSBoYXZlIHRyaWVkIGFsbCBvZiB0aGUgc3RhbmRhcmQgYmF1ZCByYXRlcworCS8vIGxldHMgdHJ5IHRvIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBmb3IgdGhpcyBiYXVkIHJhdGUKKwkvLyBNYWtlIHN1cmUgdGhlIGJhdWQgcmF0ZSBpcyByZWFzb25hYmxlCisJaWYgKGJhdWRyYXRlID4gNTAgJiYgYmF1ZHJhdGUgPCAyMzA0MDApIHsKKwkJLy8gZ2V0IGRpdmlzb3IKKwkJY3VzdG9tID0gKF9fdTE2KSgoMjMwNDAwTCArIGJhdWRyYXRlLzIpIC8gYmF1ZHJhdGUpOworCisJCSpkaXZpc29yID0gY3VzdG9tOworCisJCWRiZygiJXMgLSBCYXVkICVkID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgYmF1ZHJhdGUsIGN1c3RvbSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIKKyAqCXRoaXMgZnVuY3Rpb24gYnVpbGRzIHVwIGEgdWFydCByZWdpc3RlciBtZXNzYWdlIGFuZCBzZW5kcyB0byB0byB0aGUgZGV2aWNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IHJlZ051bSwgX191OCByZWdWYWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpjbWRCdWZmZXI7CisJdW5zaWduZWQgY2hhciAqY3VyckNtZDsKKwl1bnNpZ25lZCBsb25nIGNtZExlbiA9IDA7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSB3cml0ZSB0byAlcyByZWdpc3RlciAweCUwMngiLCAocmVnTnVtID09IE1DUikgPyAiTUNSIiA6ICJMQ1IiLCBfX0ZVTkNUSU9OX18sIHJlZ1ZhbHVlKTsKKworCS8vIEFsbG9jIG1lbW9yeSBmb3IgdGhlIHN0cmluZyBvZiBjb21tYW5kcy4KKwljbWRCdWZmZXIgPSBrbWFsbG9jICgweDEwLCBHRlBfQVRPTUlDKTsKKwlpZiAoY21kQnVmZmVyID09IE5VTEwgKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWN1cnJDbWQgPSBjbWRCdWZmZXI7CisKKwkvLyBCdWlsZCBhIGNtZCBpbiB0aGUgYnVmZmVyIHRvIHdyaXRlIHRoZSBnaXZlbiByZWdpc3RlcgorCU1BS0VfQ01EX1dSSVRFX1JFRyAoJmN1cnJDbWQsICZjbWRMZW4sCisJCQkgICAgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3IsCisJCQkgICAgcmVnTnVtLCByZWdWYWx1ZSk7CisKKwlzdGF0dXMgPSB3cml0ZV9jbWRfdXNiKGVkZ2VfcG9ydCwgY21kQnVmZmVyLCBjbWRMZW4pOworCWlmIChzdGF0dXMpIHsKKwkJLyogc29tZXRoaW5nIGJhZCBoYXBwZW5lZCwgbGV0J3MgZnJlZSB1cCB0aGUgbWVtb3J5ICovCisJCWtmcmVlIChjbWRCdWZmZXIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjaGFuZ2VfcG9ydF9zZXR0aW5ncworICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBzZXQgdGhlIFVBUlQgb24gdGhlIGRldmljZSB0byBtYXRjaCB0aGUgc3BlY2lmaWVkCisgKgluZXcgc2V0dGluZ3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENNU1BBUgorI2RlZmluZSBDTVNQQVIgMAorI2VuZGlmCitzdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IGJhdWQ7CisJdW5zaWduZWQgY2ZsYWc7CisJX191OCBtYXNrID0gMHhmZjsKKwlfX3U4IGxEYXRhOworCV9fdTggbFBhcml0eTsKKwlfX3U4IGxTdG9wOworCV9fdTggcnhGbG93OworCV9fdTggdHhGbG93OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIpOworCisJaWYgKCghZWRnZV9wb3J0LT5vcGVuKSAmJgorCSAgICAoIWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcpKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisJaWYgKCghdHR5KSB8fAorCSAgICAoIXR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1OiAgIGxEYXRhID0gTENSX0JJVFNfNTsgbWFzayA9IDB4MWY7ICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwkJY2FzZSBDUzY6ICAgbERhdGEgPSBMQ1JfQklUU182OyBtYXNrID0gMHgzZjsgICAgZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQljYXNlIENTNzogICBsRGF0YSA9IExDUl9CSVRTXzc7IG1hc2sgPSAweDdmOyAgICBkYmcoIiVzIC0gZGF0YSBiaXRzID0gNyIsIF9fRlVOQ1RJT05fXyk7ICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgQ1M4OiAgIGxEYXRhID0gTENSX0JJVFNfODsgICAgICAgICAgICAgICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwl9CisKKwlsUGFyaXR5ID0gTENSX1BBUl9OT05FOworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBDTVNQQVIpIHsKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJCWxQYXJpdHkgPSBMQ1JfUEFSX01BUks7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IG1hcmsiLCBfX0ZVTkNUSU9OX18pOworCQkJfSBlbHNlIHsKKwkJCQlsUGFyaXR5ID0gTENSX1BBUl9TUEFDRTsKKwkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gc3BhY2UiLCBfX0ZVTkNUSU9OX18pOworCQkJfQorCQl9IGVsc2UgaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQlsUGFyaXR5ID0gTENSX1BBUl9PREQ7CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gb2RkIiwgX19GVU5DVElPTl9fKTsKKwkJfSBlbHNlIHsKKwkJCWxQYXJpdHkgPSBMQ1JfUEFSX0VWRU47CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gcGFyaXR5ID0gbm9uZSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJaWYgKGNmbGFnICYgQ1NUT1BCKSB7CisJCWxTdG9wID0gTENSX1NUT1BfMjsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZSB7CisJCWxTdG9wID0gTENSX1NUT1BfMTsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCXJ4RmxvdyA9IHR4RmxvdyA9IDB4MDA7CisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQlyeEZsb3cgfD0gSU9TUF9SWF9GTE9XX1JUUzsKKwkJdHhGbG93IHw9IElPU1BfVFhfRkxPV19DVFM7CisJCWRiZygiJXMgLSBSVFMvQ1RTIGlzIGVuYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBSVFMvQ1RTIGlzIGRpc2FibGVkIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIGNoYXJhY3RlciBpbiB0aGUgZGV2aWNlICovCisJaWYgKElfSVhPRkYodHR5KSB8fCBJX0lYT04odHR5KSkgeworCQl1bnNpZ25lZCBjaGFyIHN0b3BfY2hhciAgPSBTVE9QX0NIQVIodHR5KTsKKwkJdW5zaWduZWQgY2hhciBzdGFydF9jaGFyID0gU1RBUlRfQ0hBUih0dHkpOworCisJCXNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9YT05fQ0hBUiwgc3RhcnRfY2hhcik7CisJCXNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9YT0ZGX0NIQVIsIHN0b3BfY2hhcik7CisKKwkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBJTkJPVU5EIFhPTi9YT0ZGICovCisJCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJCXJ4RmxvdyB8PSBJT1NQX1JYX0ZMT1dfWE9OX1hPRkY7CisJCQlkYmcoIiVzIC0gSU5CT1VORCBYT04vWE9GRiBpcyBlbmFibGVkLCBYT04gPSAlMngsIFhPRkYgPSAlMngiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2NoYXIsIHN0b3BfY2hhcik7CisJCX0gZWxzZSB7CisJCQlkYmcoIiVzIC0gSU5CT1VORCBYT04vWE9GRiBpcyBkaXNhYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKworCQkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIE9VVEJPVU5EIFhPTi9YT0ZGICovCisJCWlmIChJX0lYT04odHR5KSkgeworCQkJdHhGbG93IHw9IElPU1BfVFhfRkxPV19YT05fWE9GRjsKKwkJCWRiZygiJXMgLSBPVVRCT1VORCBYT04vWE9GRiBpcyBlbmFibGVkLCBYT04gPSAlMngsIFhPRkYgPSAlMngiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2NoYXIsIHN0b3BfY2hhcik7CisJCX0gZWxzZSB7CisJCQlkYmcoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCisJLyogU2V0IGZsb3cgY29udHJvbCB0byB0aGUgY29uZmlndXJlZCB2YWx1ZSAqLworCXNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9SWF9GTE9XLCByeEZsb3cpOworCXNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX1NFVF9UWF9GTE9XLCB0eEZsb3cpOworCisKKwllZGdlX3BvcnQtPnNoYWRvd0xDUiAmPSB+KExDUl9CSVRTX01BU0sgfCBMQ1JfU1RPUF9NQVNLIHwgTENSX1BBUl9NQVNLKTsKKwllZGdlX3BvcnQtPnNoYWRvd0xDUiB8PSAobERhdGEgfCBsUGFyaXR5IHwgbFN0b3ApOworCisJZWRnZV9wb3J0LT52YWxpZERhdGFNYXNrID0gbWFzazsKKworCS8qIFNlbmQgdGhlIHVwZGF0ZWQgTENSIHZhbHVlIHRvIHRoZSBFZGdlUG9ydCAqLworCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBMQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TENSKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJcmV0dXJuOworCX0KKworCS8qIHNldCB1cCB0aGUgTUNSIHJlZ2lzdGVyIGFuZCBzZW5kIGl0IHRvIHRoZSBFZGdlUG9ydCAqLworCWVkZ2VfcG9ydC0+c2hhZG93TUNSID0gTUNSX01BU1RFUl9JRTsKKwlpZiAoY2ZsYWcgJiBDQkFVRCkgeworCQllZGdlX3BvcnQtPnNoYWRvd01DUiB8PSAoTUNSX0RUUiB8IE1DUl9SVFMpOworCX0KKwlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLCBlZGdlX3BvcnQtPnNoYWRvd01DUik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXJldHVybjsKKwl9CisKKwkvKiBEZXRlcm1pbmUgZGl2aXNvciBiYXNlZCBvbiBiYXVkIHJhdGUgKi8KKwliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKKwlpZiAoIWJhdWQpIHsKKwkJLyogcGljayBhIGRlZmF1bHQsIGFueSBkZWZhdWx0Li4uICovCisJCWJhdWQgPSA5NjAwOworCX0KKworCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZCk7CisJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlIChlZGdlX3BvcnQsIGJhdWQpOworCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB1bmljb2RlX3RvX2FzY2lpCisgKglUdXJucyBhIHN0cmluZyBmcm9tIFVuaWNvZGUgaW50byBBU0NJSS4KKyAqCURvZXNuJ3QgZG8gYSBnb29kIGpvYiB3aXRoIGFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG91dHNpZGUgdGhlIG5vcm1hbAorICoJQVNDSUkgcmFuZ2UsIGJ1dCBpdCdzIG9ubHkgZm9yIGRlYnVnZ2luZy4uLgorICoJTk9URTogZXhwZWN0cyB0aGUgdW5pY29kZSBpbiBMRSBmb3JtYXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgdW5pY29kZV90b19hc2NpaSAoY2hhciAqc3RyaW5nLCBfX2xlMTYgKnVuaWNvZGUsIGludCB1bmljb2RlX3NpemUpCit7CisJaW50IGk7CisKKwlpZiAodW5pY29kZV9zaXplIDw9IDApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCB1bmljb2RlX3NpemU7ICsraSkKKwkJc3RyaW5nW2ldID0gKGNoYXIpKGxlMTZfdG9fY3B1KHVuaWNvZGVbaV0pKTsKKwlzdHJpbmdbdW5pY29kZV9zaXplXSA9IDB4MDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9tYW51ZmFjdHVyaW5nX2Rlc2MKKyAqCXJlYWRzIGluIHRoZSBtYW51ZmFjdHVyaW5nIGRlc2NyaXB0b3IgYW5kIHN0b3JlcyBpdCBpbnRvIHRoZSBzZXJpYWwgCisgKglzdHJ1Y3R1cmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGdldF9tYW51ZmFjdHVyaW5nX2Rlc2MgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQoreworCWludCByZXNwb25zZTsKKworCWRiZygiZ2V0dGluZyBtYW51ZmFjdHVyZXIgZGVzY3JpcHRvciIpOworCisJcmVzcG9uc2UgPSByb21fcmVhZCAoZWRnZV9zZXJpYWwtPnNlcmlhbCwgKEVER0VfTUFOVUZfREVTQ19BRERSICYgMHhmZmZmMDAwMCkgPj4gMTYsIAorCQkJICAgIChfX3UxNikoRURHRV9NQU5VRl9ERVNDX0FERFIgJiAweDAwMDBmZmZmKSwgRURHRV9NQU5VRl9ERVNDX0xFTiwKKwkJCSAgICAoX191OCAqKSgmZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IpKTsKKworCWlmIChyZXNwb25zZSA8IDEpIHsKKwkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICJlcnJvciBpbiBnZXR0aW5nIG1hbnVmYWN0dXJlciBkZXNjcmlwdG9yXG4iKTsKKwl9IGVsc2UgeworCQljaGFyIHN0cmluZ1szMF07CisJCWRiZygiKipNYW51ZmFjdHVyZXIgRGVzY3JpcHRvciIpOworCQlkYmcoIiAgUm9tU2l6ZTogICAgICAgICVkSyIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJvbVNpemUpOworCQlkYmcoIiAgUmFtU2l6ZTogICAgICAgICVkSyIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlJhbVNpemUpOworCQlkYmcoIiAgQ3B1UmV2OiAgICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQ3B1UmV2KTsKKwkJZGJnKCIgIEJvYXJkUmV2OiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkJvYXJkUmV2KTsKKwkJZGJnKCIgIE51bVBvcnRzOiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLk51bVBvcnRzKTsKKwkJZGJnKCIgIERlc2NEYXRlOiAgICAgICAlZC8lZC8lZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlWzBdLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZVsxXSwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGVbMl0rMTkwMCk7CisJCXVuaWNvZGVfdG9fYXNjaWkgKHN0cmluZywgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuU2VyaWFsTnVtYmVyLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5TZXJOdW1MZW5ndGgvMi0xKTsKKwkJZGJnKCIgIFNlcmlhbE51bWJlcjogJXMiLCBzdHJpbmcpOworCQl1bmljb2RlX3RvX2FzY2lpIChzdHJpbmcsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkFzc2VtYmx5TnVtYmVyLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Bc3NlbWJseU51bUxlbmd0aC8yLTEpOworCQlkYmcoIiAgQXNzZW1ibHlOdW1iZXI6ICVzIiwgc3RyaW5nKTsKKwkJdW5pY29kZV90b19hc2NpaSAoc3RyaW5nLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5PZW1Bc3N5TnVtYmVyLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5PZW1Bc3N5TnVtTGVuZ3RoLzItMSk7CisJCWRiZygiICBPZW1Bc3N5TnVtYmVyOiAgJXMiLCBzdHJpbmcpOworCQlkYmcoIiAgVWFydFR5cGU6ICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuVWFydFR5cGUpOworCQlkYmcoIiAgSW9uUGlkOiAgICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuSW9uUGlkKTsKKwkJZGJnKCIgIElvbkNvbmZpZzogICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLklvbkNvbmZpZyk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfYm9vdF9kZXNjCisgKglyZWFkcyBpbiB0aGUgYm9vdGxvYWRlciBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgaXQgaW50byB0aGUgc2VyaWFsIAorICoJc3RydWN0dXJlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBnZXRfYm9vdF9kZXNjIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3sKKwlpbnQgcmVzcG9uc2U7CisKKwlkYmcoImdldHRpbmcgYm9vdCBkZXNjcmlwdG9yIik7CisKKwlyZXNwb25zZSA9IHJvbV9yZWFkIChlZGdlX3NlcmlhbC0+c2VyaWFsLCAoRURHRV9CT09UX0RFU0NfQUREUiAmIDB4ZmZmZjAwMDApID4+IDE2LCAKKwkJCSAgICAoX191MTYpKEVER0VfQk9PVF9ERVNDX0FERFIgJiAweDAwMDBmZmZmKSwgRURHRV9CT09UX0RFU0NfTEVOLAorCQkJICAgIChfX3U4ICopKCZlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yKSk7CisKKwlpZiAocmVzcG9uc2UgPCAxKSB7CisJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiZXJyb3IgaW4gZ2V0dGluZyBib290IGRlc2NyaXB0b3JcbiIpOworCX0gZWxzZSB7CisJCWRiZygiKipCb290IERlc2NyaXB0b3I6Iik7CisJCWRiZygiICBCb290Q29kZUxlbmd0aDogJWQiLCBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJvb3RDb2RlTGVuZ3RoKSk7CisJCWRiZygiICBNYWpvclZlcnNpb246ICAgJWQiLCBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1ham9yVmVyc2lvbik7CisJCWRiZygiICBNaW5vclZlcnNpb246ICAgJWQiLCBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1pbm9yVmVyc2lvbik7CisJCWRiZygiICBCdWlsZE51bWJlcjogICAgJWQiLCBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyKSk7CisJCWRiZygiICBDYXBhYmlsaXRpZXM6ICAgMHgleCIsIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQ2FwYWJpbGl0aWVzKSk7CisJCWRiZygiICBVQ29uZmlnMDogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLlVDb25maWcwKTsKKwkJZGJnKCIgIFVDb25maWcxOiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuVUNvbmZpZzEpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZQorICoJVGhpcyBpcyBjYWxsZWQgdG8gbG9hZCB0aGUgYXBwbGljYXRpb24gZmlybXdhcmUgdG8gdGhlIGRldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBsb2FkX2FwcGxpY2F0aW9uX2Zpcm13YXJlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3sKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgKnJlY29yZDsKKwl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZTsKKwl1bnNpZ25lZCBjaGFyICpGaXJtd2FyZUltYWdlOworCWludCBJbWFnZVNpemU7CisJaW50IHJlc3BvbnNlOworCisKKwlzd2l0Y2ggKGVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uaURvd25sb2FkRmlsZSkgeworCQljYXNlIEVER0VfRE9XTkxPQURfRklMRV9JOTMwOgorCQkJZGJnKCJkb3dubG9hZGluZyBmaXJtd2FyZSB2ZXJzaW9uICg5MzApICVkLiVkLiVkIiwgCisJCQkgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuTWFqb3JWZXJzaW9uLCAKKwkJCSAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMS5NaW5vclZlcnNpb24sIAorCQkJICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xLkJ1aWxkTnVtYmVyKTsKKwkJCWZpcm13YXJlID0gJk9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjFbMF07CisJCQlGaXJtd2FyZUltYWdlID0gJk9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjFbMF07CisJCQlJbWFnZVNpemUgPSBzaXplb2YoT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMSk7CisJCQlicmVhazsKKworCQljYXNlIEVER0VfRE9XTkxPQURfRklMRV84MDI1MToKKwkJCWRiZygiZG93bmxvYWRpbmcgZmlybXdhcmUgdmVyc2lvbiAoODAyNTEpICVkLiVkLiVkIiwgCisJCQkgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuTWFqb3JWZXJzaW9uLCAKKwkJCSAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMi5NaW5vclZlcnNpb24sIAorCQkJICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yLkJ1aWxkTnVtYmVyKTsKKwkJCWZpcm13YXJlID0gJk9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjJbMF07CisJCQlGaXJtd2FyZUltYWdlID0gJk9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjJbMF07CisJCQlJbWFnZVNpemUgPSBzaXplb2YoT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMik7CisJCQlicmVhazsKKworCQljYXNlIEVER0VfRE9XTkxPQURfRklMRV9OT05FOgorCQkJZGJnICAgICAoIk5vIGRvd25sb2FkIGZpbGUgc3BlY2lmaWVkLCBza2lwcGluZyBkb3dubG9hZFxuIik7CisJCQlyZXR1cm47CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwl9CisKKworCWZvciAoOzspIHsKKwkJcmVjb3JkID0gKHN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCAqKWZpcm13YXJlOworCQlyZXNwb25zZSA9IHNyYW1fd3JpdGUgKGVkZ2Vfc2VyaWFsLT5zZXJpYWwsIGxlMTZfdG9fY3B1KHJlY29yZC0+RXh0QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+QWRkciksIGxlMTZfdG9fY3B1KHJlY29yZC0+TGVuKSwgJnJlY29yZC0+RGF0YVswXSk7CisJCWlmIChyZXNwb25zZSA8IDApIHsKKwkJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAic3JhbV93cml0ZSBmYWlsZWQgKCV4LCAleCwgJWQpXG4iLCBsZTE2X3RvX2NwdShyZWNvcmQtPkV4dEFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkxlbikpOworCQkJYnJlYWs7CisJCX0KKwkJZmlybXdhcmUgKz0gc2l6ZW9mIChzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQpICsgbGUxNl90b19jcHUocmVjb3JkLT5MZW4pOworCQlpZiAoZmlybXdhcmUgPj0gJkZpcm13YXJlSW1hZ2VbSW1hZ2VTaXplXSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlkYmcoInNlbmRpbmcgZXhlY19kbF9jb2RlIik7CisJcmVzcG9uc2UgPSB1c2JfY29udHJvbF9tc2cgKGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgCisJCQkJICAgIHVzYl9zbmRjdHJscGlwZShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIDApLCAKKwkJCQkgICAgVVNCX1JFUVVFU1RfSU9OX0VYRUNfRExfQ09ERSwgCisJCQkJICAgIDB4NDAsIDB4NDAwMCwgMHgwMDAxLCBOVUxMLCAwLCAzMDAwKTsKKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9zdGFydHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZWRnZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlpbnQgaTsKKworCWRldiA9IHNlcmlhbC0+ZGV2OworCisJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KKwllZGdlX3NlcmlhbCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVkZ2Vfc2VyaWFsID09IE5VTEwpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCAoZWRnZV9zZXJpYWwsIDAsIHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsKSk7CisJc3Bpbl9sb2NrX2luaXQoJmVkZ2Vfc2VyaWFsLT5lc19sb2NrKTsKKwllZGdlX3NlcmlhbC0+c2VyaWFsID0gc2VyaWFsOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBlZGdlX3NlcmlhbCk7CisKKwkvKiBnZXQgdGhlIG5hbWUgZm9yIHRoZSBkZXZpY2UgZnJvbSB0aGUgZGV2aWNlICovCisJaWYgKCAoaSA9IGdldF9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwgJmVkZ2Vfc2VyaWFsLT5uYW1lWzBdKSkgIT0gMCkgeworCQllZGdlX3NlcmlhbC0+bmFtZVtpLTFdID0gJyAnOworCX0KKworCWdldF9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsICZlZGdlX3NlcmlhbC0+bmFtZVtpXSk7CisKKwlkZXZfaW5mbygmc2VyaWFsLT5kZXYtPmRldiwgIiVzIGRldGVjdGVkXG4iLCBlZGdlX3NlcmlhbC0+bmFtZSk7CisKKwkvKiBnZXQgdGhlIG1hbnVmYWN0dXJpbmcgZGVzY3JpcHRvciBmb3IgdGhpcyBkZXZpY2UgKi8KKwlnZXRfbWFudWZhY3R1cmluZ19kZXNjIChlZGdlX3NlcmlhbCk7CisKKwkvKiBnZXQgdGhlIGJvb3QgZGVzY3JpcHRvciAqLworCWdldF9ib290X2Rlc2MgKGVkZ2Vfc2VyaWFsKTsKKworCWdldF9wcm9kdWN0X2luZm8oZWRnZV9zZXJpYWwpOworCisJLyogc2V0IHRoZSBudW1iZXIgb2YgcG9ydHMgZnJvbSB0aGUgbWFudWZhY3R1cmluZyBkZXNjcmlwdGlvbiAqLworCS8qIHNlcmlhbC0+bnVtX3BvcnRzID0gc2VyaWFsLT5wcm9kdWN0X2luZm8uTnVtUG9ydHM7ICovCisJaWYgKGVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uTnVtUG9ydHMgIT0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJd2FybigiJXMgLSBEZXZpY2UgUmVwb3J0ZWQgJWQgc2VyaWFsIHBvcnRzIHZzIGNvcmUgIgorCQkgICAgICJ0aGlua2luZyB3ZSBoYXZlICVkIHBvcnRzLCBlbWFpbCBncmVnQGtyb2FoLmNvbSB0aGlzIGluZm8uIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uTnVtUG9ydHMsIAorCQkgICAgIHNlcmlhbC0+bnVtX3BvcnRzKTsKKwl9CisKKwlkYmcoIiVzIC0gdGltZSAxICVsZCIsIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisKKwkvKiBub3cgbG9hZCB0aGUgYXBwbGljYXRpb24gZmlybXdhcmUgaW50byB0aGlzIGRldmljZSAqLworCWxvYWRfYXBwbGljYXRpb25fZmlybXdhcmUgKGVkZ2Vfc2VyaWFsKTsKKworCWRiZygiJXMgLSB0aW1lIDIgJWxkIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsKKworCS8qIENoZWNrIGN1cnJlbnQgRWRnZXBvcnQgRUVQUk9NIGFuZCB1cGRhdGUgaWYgbmVjZXNzYXJ5ICovCisJdXBkYXRlX2VkZ2Vwb3J0X0UyUFJPTSAoZWRnZV9zZXJpYWwpOworCQorCWRiZygiJXMgLSB0aW1lIDMgJWxkIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzKTsKKworCS8qIHNldCB0aGUgY29uZmlndXJhdGlvbiB0byB1c2UgIzEgKi8KKy8vCWRiZygic2V0X2NvbmZpZ3VyYXRpb24gMSIpOworLy8JdXNiX3NldF9jb25maWd1cmF0aW9uIChkZXYsIDEpOworCisJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBlZGdlX29wZW4gZnVuY3Rpb24sIAorCSAqIGFzIHRoZSBzdHJ1Y3R1cmVzIGFyZW4ndCBjcmVhdGVkIHlldC4gKi8KKworCS8qIHNldCB1cCBvdXIgcG9ydCBwcml2YXRlIHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQllZGdlX3BvcnQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworCQkJa2ZyZWUoZWRnZV9zZXJpYWwpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0IChlZGdlX3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCkpOworCQlzcGluX2xvY2tfaW5pdCgmZWRnZV9wb3J0LT5lcF9sb2NrKTsKKwkJZWRnZV9wb3J0LT5wb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBlZGdlX3BvcnQpOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9zaHV0ZG93bgorICoJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHVzYiBidXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2Vfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJa2ZyZWUgKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pKTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgIE5VTEwpOworCX0KKwlrZnJlZSAodXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2Vwb3J0X2luaXQKKyAqCVRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBtb2R1bGUgc3Vic3lzdGVtLCBvciBvbiBzdGFydHVwIHRvIGluaXRpYWxpemUgdXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgZWRnZXBvcnRfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZlZGdlcG9ydF8ycG9ydF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzJwb3J0X2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZlZGdlcG9ydF80cG9ydF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzRwb3J0X2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZlZGdlcG9ydF84cG9ydF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzhwb3J0X2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CisKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF84cG9ydF9kZXZpY2UpOworZmFpbGVkXzhwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzRwb3J0X2RldmljZSk7CitmYWlsZWRfNHBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKK2ZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZXBvcnRfZXhpdAorICoJQ2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBhYm91dCB0byBiZSB1bmxvYWRlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19leGl0IGVkZ2Vwb3J0X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZpb19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZWRnZXBvcnRfNHBvcnRfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF84cG9ydF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChlZGdlcG9ydF9pbml0KTsKK21vZHVsZV9leGl0KGVkZ2Vwb3J0X2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKworbW9kdWxlX3BhcmFtKGxvd19sYXRlbmN5LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGxvd19sYXRlbmN5LCAiTG93IGxhdGVuY3kgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExMmQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oCkBAIC0wLDAgKzEsMTQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJaW9fZWRnZXBvcnQuaAlFZGdlcG9ydCBMaW51eCBJbnRlcmZhY2UgZGVmaW5pdGlvbnMKKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDAgSW5zaWRlIE91dCBOZXR3b3JrcywgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChfSU9fRURHRVBPUlRfSF8pCisjZGVmaW5lCV9JT19FREdFUE9SVF9IXworCisKKyNkZWZpbmUgTUFYX1JTMjMyX1BPUlRTCQk4CS8qIE1heCAjIG9mIFJTLTIzMiBwb3J0cyBwZXIgZGV2aWNlICovCisKKy8qIHR5cGVkZWZzIHRoYXQgdGhlIGluc2lkZW91dCBoZWFkZXJzIG5lZWQgKi8KKyNpZm5kZWYgVFJVRQorCSNkZWZpbmUgVFJVRQkJKDEpCisjZW5kaWYKKyNpZm5kZWYgRkFMU0UKKwkjZGVmaW5lIEZBTFNFCQkoMCkKKyNlbmRpZgorI2lmbmRlZiBMT1c4CisJI2RlZmluZSBMT1c4KGEpCQkoKHVuc2lnbmVkIGNoYXIpKGEgJiAweGZmKSkKKyNlbmRpZgorI2lmbmRlZiBISUdIOAorCSNkZWZpbmUgSElHSDgoYSkJKCh1bnNpZ25lZCBjaGFyKSgoYSAmIDB4ZmYwMCkgPj4gOCkpCisjZW5kaWYKKyNpZm5kZWYgTlVNX0VOVFJJRVMKKwkjZGVmaW5lIE5VTV9FTlRSSUVTKHgpCShzaXplb2YoeCkvc2l6ZW9mKCh4KVswXSkpCisjZW5kaWYKKworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fS0VSTkVMX18KKyNlbmRpZgorCisjaW5jbHVkZSAiaW9fdXNidmVuZC5oIgorCisKKworLyogVGhlIGZvbGxvd2luZyB0YWJsZSBpcyB1c2VkIHRvIG1hcCB0aGUgVVNCeCBwb3J0IG51bWJlciB0byAKKyAqIHRoZSBkZXZpY2Ugc2VyaWFsIG51bWJlciAob3IgcGh5c2ljYWwgVVNCIHBhdGgpLCAqLworI2RlZmluZSBNQVhfRURHRVBPUlRTCTY0CisKK3N0cnVjdCBjb21NYXBwZXIgeworCWNoYXIJU2VyaWFsTnVtYmVyW01BWF9TRVJJQUxOVU1CRVJfTEVOKzFdOwkvKiBTZXJpYWwgbnVtYmVyL3VzYiBwYXRoICovCisJaW50CW51bVBvcnRzOwkJCSAgICAgICAJLyogTnVtYmVyIG9mIHBvcnRzICovCisJaW50CU9yaWdpbmFsW01BWF9SUzIzMl9QT1JUU107CSAgICAgICAJLyogUG9ydCBudW1iZXJzIHNldCBieSBJT0NUTCAqLworCWludAlQb3J0W01BWF9SUzIzMl9QT1JUU107CQkgICAgICAgCS8qIEFjdHVhbCB1c2VkIHBvcnQgbnVtYmVycyAqLworfTsKKworCisjZGVmaW5lIEVER0VQT1JUX0NPTkZJR19ERVZJQ0UgIi9wcm9jL2VkZ2Vwb3J0IgorCisvKiAvcHJvYy9lZGdlcG9ydCBJbnRlcmZhY2UKKyAqIFRoaXMgaW50ZXJmYWNlIHVzZXMgcmVhZC93cml0ZS9sc2VlayBpbnRlcmZhY2UgdG8gdGFsayB0byB0aGUgZWRnZXBvcnQgZHJpdmVyCisgKiB0aGUgZm9sbG93aW5nIHJlYWQgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6ICovCisjZGVmaW5lIFBST0NfR0VUX01BUFBJTkdfVE9fUEFUSCAJMQorI2RlZmluZSBQUk9DX0dFVF9DT01fRU5UUlkJCTIKKyNkZWZpbmUgUFJPQ19HRVRfRURHRV9NQU5VRl9ERVNDUklQVE9SCTMKKyNkZWZpbmUgUFJPQ19HRVRfQk9PVF9ERVNDUklQVE9SCTQKKyNkZWZpbmUgUFJPQ19HRVRfUFJPRFVDVF9JTkZPCQk1CisjZGVmaW5lIFBST0NfR0VUX1NUUklOR1MJCTYKKyNkZWZpbmUgUFJPQ19HRVRfQ1VSUkVOVF9DT01fTUFQUElORwk3CisKKy8qIFRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBsc2VlaygpIGZvciB0aGUgcmVhZCBpczogKi8KKyNkZWZpbmUgUFJPQ19SRUFEX1NFVFVQKENvbW1hbmQsIEFyZ3VtZW50KQkoKENvbW1hbmQpICsgKChBcmd1bWVudCk8PDgpKQorCisKKy8qIHRoZSBmb2xsb3dpbmcgd3JpdGUgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6ICovCisjZGVmaW5lIFBST0NfU0VUX0NPTV9NQVBQSU5HIAkJMQorI2RlZmluZSBQUk9DX1NFVF9DT01fRU5UUlkJCTIKKworCisvKiBUaGUgZm9sbG93aW5nIHN0dXJjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIHdyaXRlICovCitzdHJ1Y3QgcHJvY1dyaXRlIHsKKwlpbnQJQ29tbWFuZDsKKwl1bmlvbiB7CisJCXN0cnVjdCBjb21NYXBwZXIJRW50cnk7CisJCWludAkJCUNvbU1hcHBpbmdCYXNlZE9uVVNCUG9ydDsJLyogQm9vbGVhbiB2YWx1ZSAqLworCX0gdTsKK307CisKKy8qCisgKglQcm9kdWN0IGluZm9ybWF0aW9uIHJlYWQgZnJvbSB0aGUgRWRnZXBvcnQKKyAqLworc3RydWN0IGVkZ2Vwb3J0X3Byb2R1Y3RfaW5mbyB7CisJX191MTYJUHJvZHVjdElkOwkJCS8qIFByb2R1Y3QgSWRlbnRpZmllciAqLworCV9fdTgJTnVtUG9ydHM7CQkJLyogTnVtYmVyIG9mIHBvcnRzIG9uIGVkZ2Vwb3J0ICovCisJX191OAlQcm9kSW5mb1ZlcjsJCQkvKiBXaGF0IHZlcnNpb24gb2Ygc3RydWN0dXJlIGlzIHRoaXM/ICovCisKKwlfX3UzMglJc1NlcnZlciAgICAgICAgOjE7CQkvKiBTZXQgaWYgU2VydmVyICovCisJX191MzIJSXNSUzIzMiAgICAgICAgIDoxOwkJLyogU2V0IGlmIFJTLTIzMiBwb3J0cyBleGlzdCAqLworCV9fdTMyCUlzUlM0MjIgICAgICAgICA6MTsJCS8qIFNldCBpZiBSUy00MjIgcG9ydHMgZXhpc3QgKi8KKwlfX3UzMglJc1JTNDg1ICAgICAgICAgOjE7CQkvKiBTZXQgaWYgUlMtNDg1IHBvcnRzIGV4aXN0ICovCisJX191MzIJSXNSZXNlcnZlZCAgICAgIDoyODsJCS8qIFJlc2VydmVkIGZvciBsYXRlciBleHBhbnNpb24gKi8KKworCV9fdTgJUm9tU2l6ZTsJCQkvKiBTaXplIG9mIFJPTS9FMlBST00gaW4gSyAqLworCV9fdTgJUmFtU2l6ZTsJCQkvKiBTaXplIG9mIGV4dGVybmFsIFJBTSBpbiBLICovCisJX191OAlDcHVSZXY7CQkJCS8qIENQVSByZXZpc2lvbiBsZXZlbCAoY2hnIG9ubHkgaWYgcy93IHZpc2libGUpICovCisJX191OAlCb2FyZFJldjsJCQkvKiBQQ0IgcmV2aXNpb24gbGV2ZWwgKGNoZyBvbmx5IGlmIHMvdyB2aXNpYmxlKSAqLworCisJX191OAlCb290TWFqb3JWZXJzaW9uOwkJLyogQm9vdCBGaXJtd2FyZSB2ZXJzaW9uOiB4eC4gKi8KKwlfX3U4CUJvb3RNaW5vclZlcnNpb247CQkvKgkgICAJCSAgeXkuICovCisJX19sZTE2CUJvb3RCdWlsZE51bWJlcjsJCS8qCQkgICAgICAJICB6enp6IChMRSBmb3JtYXQpICovCisKKwlfX3U4CUZpcm13YXJlTWFqb3JWZXJzaW9uOwkJLyogT3BlcmF0aW9uYWwgRmlybXdhcmUgdmVyc2lvbjp4eC4gKi8KKwlfX3U4CUZpcm13YXJlTWlub3JWZXJzaW9uOwkJLyoJCQkJeXkuICovCisJX19sZTE2CUZpcm13YXJlQnVpbGROdW1iZXI7CQkvKgkJCQl6enp6IChMRSBmb3JtYXQpICovCisKKwlfX3U4CU1hbnVmYWN0dXJlRGVzY0RhdGVbM107CQkvKiBNTS9ERC9ZWSB3aGVuIGRlc2NyaXB0b3IgdGVtcGxhdGUgd2FzIGNvbXBpbGVkICovCisJX191OAlVbnVzZWQxWzFdOwkJCS8qIEF2YWlsYWJsZSAqLworCisJX191OAlpRG93bmxvYWRGaWxlOwkJCS8qIFdoYXQgdG8gZG93bmxvYWQgdG8gRVBpQyBkZXZpY2UgKi8KKwlfX3U4CVVudXNlZDJbMl07CQkJLyogQXZhaWxhYmxlICovCit9OworCisvKgorICoJRWRnZXBvcnQgU3RyaW5nYmxvY2sgU3RyaW5nIGxvY2F0aW9ucworICovCisjZGVmaW5lIEVER0VTVFJJTkdfTUFOVUZOQU1FCQkxCS8qIE1hbnVmYWN0dXJlIE5hbWUgKi8KKyNkZWZpbmUgRURHRVNUUklOR19QUk9ETkFNRQkJMgkvKiBQcm9kdWN0IE5hbWUgKi8KKyNkZWZpbmUgRURHRVNUUklOR19TRVJJQUxOVU0JCTMJLyogU2VyaWFsIE51bWJlciAqLworI2RlZmluZSBFREdFU1RSSU5HX0FTU0VNTlVNCQk0CS8qIEFzc2VtYmx5IE51bWJlciAqLworI2RlZmluZSBFREdFU1RSSU5HX09FTUFTU0VNTlVNCQk1CS8qIE9FTSBBc3NlbWJseSBOdW1iZXIgKi8KKyNkZWZpbmUgRURHRVNUUklOR19NQU5VRkRBVEUJCTYJLyogTWFudWZhY3R1cmUgRGF0ZSAqLworI2RlZmluZSBFREdFU1RSSU5HX09SSUdTRVJJQUxOVU0JNwkvKiBTZXJpYWwgTnVtYmVyICovCisKK3N0cnVjdCBzdHJpbmdfYmxvY2sgeworCV9fdTE2CU51bVN0cmluZ3M7CQkJLyogTnVtYmVyIG9mIHN0cmluZ3MgaW4gYmxvY2sgKi8KKwlfX3UxNglTdHJpbmdzWzFdOwkJCS8qIFN0YXJ0IG9mIHN0cmluZyBibG9jayAqLworfTsKKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Jvb3QuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5ZmFmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290LmgKQEAgLTAsMCArMSw1NTYgQEAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKiBFZGdlcG9ydC80IEJpbmFyeSBJbWFnZQorLy8qIEdlbmVyYXRlZCBieSBIRVgyQyB2MS4wNgorLy8qIENvcHlyaWdodCAoQykgMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8qCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorLy8qCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworLy9JbWFnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorI2lmICFkZWZpbmVkKERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQpCisjZGVmaW5lIERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgeworCQlfX2xlMTYgRXh0QWRkcjsKKwkJX19sZTE2IEFkZHI7CisJCV9fbGUxNiBMZW47CisJCXVuc2lnbmVkIGNoYXIgIERhdGFbMF07CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8geworCQl1bnNpZ25lZCBjaGFyCSBNYWpvclZlcnNpb247CisJCXVuc2lnbmVkIGNoYXIgIE1pbm9yVmVyc2lvbjsKKwkJdW5zaWduZWQgc2hvcnQgQnVpbGROdW1iZXI7CisJfTsKKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJTUFHRV9BUlJBWV9OQU1FKQorI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCQlGaXJtd2FyZUltYWdlCisjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlGaXJtd2FyZUltYWdlVmVyc2lvbgorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIElNQUdFX0FSUkFZX05BTUVbXSA9IHsKKworLy8gU2VnbWVudCAjMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwMCwgTGVuZ3RoIDYKKzB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDMsIAorCisvLyBTZWdtZW50ICMyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDBiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgwYiwgCisKKy8vIFNlZ21lbnQgIzMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAxLCAweGI4LCAKKworLy8gU2VnbWVudCAjNCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAxYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDFiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MWIsIAorCisvLyBTZWdtZW50ICM1LCBTdGFydCBBZGRyZXNzIDAwZmYwMDIzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MjMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyMywgCisKKy8vIFNlZ21lbnQgIzYsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMmIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDJiLCAKKworLy8gU2VnbWVudCAjNywgU3RhcnQgQWRkcmVzcyAwMGZmMDAzMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDMzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MzMsIAorCisvLyBTZWdtZW50ICM4LCBTdGFydCBBZGRyZXNzIDAwZmYwMDNiLCBMZW5ndGggMworMHhmZiwweDAwLDB4M2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzYiwgCisKKy8vIFNlZ21lbnQgIzksIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNDMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAxLCAweGJkLCAKKworLy8gU2VnbWVudCAjMTAsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHg0YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAxLCAweGQwLCAKKworLy8gU2VnbWVudCAjMTEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwNTMsIExlbmd0aCAzCisweGZmLDB4MDAsMHg1MywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAxLCAweDIxLCAKKworLy8gU2VnbWVudCAjMTIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwN2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHg3YiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDdiLCAKKworLy8gU2VnbWVudCAjMTMsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwODAsIExlbmd0aCAzNTgKKzB4ZmYsMHgwMCwweDgwLDB4MDAsMHg2NiwweDAxLAorICAgIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4N2UsIDB4ZjgsIDB4MDAsIDB4MjMsIDB4N2UsIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTAsIAorICAgIDB4MDAsIDB4MTIsIDB4MDcsIDB4NWYsIDB4NjksIDB4MjAsIDB4MDAsIDB4MGEsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDUsIDB4NzUsIDB4OTAsIAorICAgIDB4MGQsIDB4ODAsIDB4MDMsIDB4NzUsIDB4OTAsIDB4MWQsIDB4ZDIsIDB4YjUsIDB4N2UsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4YTgsIAorICAgIDB4MDAsIDB4NzUsIDB4YjEsIDB4MDAsIDB4YTksIDB4ZDUsIDB4ODcsIDB4Y2EsIDB4MjksIDB4MTIsIDB4MDksIDB4Y2MsIDB4MTIsIDB4MDksIDB4YTAsIDB4ZjUsIAorICAgIDB4MDksIDB4N2EsIDB4YTEsIDB4MjAsIDB4MTIsIDB4MDEsIDB4ZTYsIDB4ZGEsIDB4MjksIDB4YTksIDB4ZDAsIDB4YzcsIDB4N2UsIDB4MDAsIDB4MDUsIDB4N2EsIAorICAgIDB4MDEsIDB4ZjEsIDB4NzUsIDB4ZTEsIDB4MTAsIDB4YTksIDB4ZDcsIDB4ZjQsIDB4YTksIDB4ZDcsIDB4ZTQsIDB4YTUsIDB4ZDgsIDB4ZjEsIDB4NzUsIDB4ZjEsIAorICAgIDB4MDAsIDB4NzUsIDB4ZTEsIDB4M2YsIDB4NzUsIDB4YTIsIDB4MDMsIDB4NzUsIDB4YTMsIDB4MDAsIDB4NzUsIDB4YzAsIDB4MDAsIDB4NzUsIDB4YzEsIDB4MDAsIAorICAgIDB4YTksIDB4ZDEsIDB4YjEsIDB4YTksIDB4ZDAsIDB4YjEsIDB4YTksIDB4ZDUsIDB4ZDMsIDB4ZDIsIDB4YWYsIDB4ZTQsIDB4N2UsIDB4MDQsIDB4MjgsIDB4MDAsIAorICAgIDB4OGQsIDB4ZWYsIDB4MWIsIDB4MDQsIDB4NzgsIDB4ZmEsIDB4MDQsIDB4YTksIDB4MzQsIDB4ZDMsIDB4MDMsIDB4MzAsIDB4ZTAsIDB4ZWUsIDB4YmUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDUsIDB4NjMsIDB4OTAsIDB4MzAsIDB4ODAsIDB4ZTMsIDB4YjIsIDB4OTUsIDB4ODAsIDB4ZGYsIDB4YmUsIDB4YjAsIDB4MDIsIAorICAgIDB4MjIsIDB4YzAsIDB4ZDAsIDB4YTksIDB4MjAsIDB4ZGYsIDB4MGYsIDB4YTksIDB4MzEsIDB4ZGYsIDB4MDMsIDB4MDIsIDB4MDEsIDB4YjUsIDB4NzUsIDB4MDgsIAorICAgIDB4MDEsIDB4MTIsIDB4MDgsIDB4MzMsIDB4ODAsIDB4ZmUsIDB4NzUsIDB4MDgsIDB4ZmUsIDB4MTIsIDB4MDgsIDB4MzMsIDB4NzUsIDB4YTgsIDB4MDAsIDB4N2UsIAorICAgIDB4YjMsIDB4M2YsIDB4ZjIsIDB4MzAsIDB4ZTAsIDB4NGIsIDB4MzAsIDB4MDEsIDB4NDYsIDB4YzIsIDB4OTIsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIAorICAgIDB4MTEsIDB4MDksIDB4NzQsIDB4MDgsIDB4MTksIDB4YjIsIDB4MDAsIDB4MTAsIDB4NzQsIDB4MGUsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDQsIDB4MmUsIDB4MjQsIAorICAgIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZWQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4ZTQsIDB4ZDUsIDB4ZTAsIDB4ZmQsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MGEsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4ODAsIAorICAgIDB4ZWIsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZTQsIDB4NDMsIDB4OTAsIDB4MzAsIDB4ZDIsIDB4YWEsIDB4ODAsIDB4MDUsIDB4ZDIsIAorICAgIDB4YWEsIDB4NDMsIDB4OTAsIDB4MzQsIDB4ZDIsIDB4YWYsIDB4YTksIDB4ZDEsIDB4ODcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MTEsIAorICAgIDB4ZGYsIDB4MDMsIDB4YTksIDB4ZDIsIDB4ZGYsIDB4NzUsIDB4MDgsIDB4ZmYsIDB4MTIsIDB4MDgsIDB4MzMsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MDIsIDB4ZmYsIAorICAgIDB4Y2EsIDB4MDYsIDB4ODMsIDB4MDAsIDB4MzIsIDB4ZDAsIDB4ZDAsIDB4MzIsIDB4YzIsIDB4OGIsIDB4YzIsIDB4YWEsIDB4MzIsIDB4NzUsIDB4MDgsIDB4MDgsIAorICAgIDB4MTIsIDB4MDgsIDB4MzMsIDB4YTksIDB4YzAsIDB4YjEsIDB4YTksIDB4YzUsIDB4ZDMsIDB4YTksIDB4YzYsIDB4ZDMsIDB4YTksIDB4ZDIsIDB4YjEsIDB4MzIsIAorICAgIDB4Y2EsIDB4YjgsIDB4NzUsIDB4MDgsIDB4MDIsIDB4MTIsIDB4MDgsIDB4MzMsIDB4ZTUsIDB4YzAsIDB4NTQsIDB4MDMsIDB4NjgsIDB4MDUsIDB4MTIsIDB4MDEsIAorICAgIDB4ZWUsIDB4ODAsIDB4ZjUsIDB4ZGEsIDB4YjgsIDB4MzIsIAorCisvLyBTZWdtZW50ICMxNCwgU3RhcnQgQWRkcmVzcyAwMGZmMWJjYSwgTGVuZ3RoIDEKKzB4ZmYsMHgwMCwweGNhLDB4MWIsMHgwMSwweDAwLAorICAgIDB4MDAsIAorCisvLyBTZWdtZW50ICMxNSwgU3RhcnQgQWRkcmVzcyAwMGZmMDFlNiwgTGVuZ3RoIDE2MTMKKzB4ZmYsMHgwMCwweGU2LDB4MDEsMHg0ZCwweDA2LAorICAgIDB4ZTQsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4MDIsIDB4MDIsIDB4NjMsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4M2IsIAorICAgIDB4Y2EsIDB4NGIsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIDB4Y2EsIDB4N2IsIDB4Y2EsIDB4ZWIsIDB4YzAsIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmIsIAorICAgIDB4YjQsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTksIDB4YjQsIDB4MDEsIDB4MTYsIDB4MzAsIDB4YzAsIDB4MDgsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4MDIsIAorICAgIDB4NGQsIDB4ODAsIDB4MWYsIDB4MzAsIDB4YzEsIDB4MWMsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4MDIsIDB4ZGUsIDB4ODAsIDB4MTQsIDB4MzAsIDB4YzEsIAorICAgIDB4MDgsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4MDIsIDB4ZGUsIDB4ODAsIDB4MDksIDB4MzAsIDB4YzAsIDB4MDYsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIAorICAgIDB4MDIsIDB4NGQsIDB4ZDAsIDB4ZjEsIDB4ZGEsIDB4ZWIsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4NmIsIDB4ZGEsIDB4NWIsIDB4ZGEsIDB4NGIsIDB4ZGEsIDB4M2IsIAorICAgIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4YzIsIDB4YzAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmIsIDB4YjQsIDB4MDIsIDB4MDcsIAorICAgIDB4MTIsIDB4MDIsIDB4NmYsIDB4MDIsIDB4MDIsIDB4NjMsIDB4MjIsIDB4YjQsIDB4MDEsIDB4ZmMsIDB4MDIsIDB4MDIsIDB4YTksIDB4N2UsIDB4MDAsIDB4MDAsIAorICAgIDB4N2EsIDB4MDMsIDB4MDEsIDB4MmIsIDB4N2EsIDB4MDMsIDB4MDEsIDB4MmMsIDB4MjIsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjMsIDB4NTQsIDB4NjAsIDB4NjAsIAorICAgIDB4MDUsIDB4YjQsIDB4NDAsIDB4MTUsIDB4ODAsIDB4MTMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDUsIDB4MGMsIDB4NzUsIDB4MDgsIDB4NzEsIAorICAgIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4ZjUsIDB4OGYsIDB4MjIsIDB4NzUsIDB4ZjYsIDB4MDAsIDB4MjIsIDB4YmUsIDB4NTcsIAorICAgIDB4MDEsIDB4MjksIDB4MjgsIDB4MDQsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MjksIDB4N2EsIDB4MGYsIDB4MDEsIDB4MmUsIDB4N2EsIDB4NTcsIDB4MDEsIDB4MzIsIAorICAgIDB4MDIsIDB4MDIsIDB4YTksIDB4N2UsIDB4ZWYsIDB4MDEsIDB4MmUsIDB4N2UsIDB4ZjcsIDB4MDEsIDB4MzIsIDB4N2UsIDB4MDcsIDB4MDEsIDB4MzIsIDB4NGQsIAorICAgIDB4MDAsIDB4NjgsIDB4MjEsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ZWIsIDB4YjAsIDB4ZjUsIDB4ZjMsIDB4YTMsIDB4YTUsIDB4MDgsIDB4MWIsIDB4ZjQsIAorICAgIDB4NjgsIDB4MDQsIDB4YTUsIDB4YjgsIDB4MDgsIDB4ZjAsIDB4N2EsIDB4ZWYsIDB4MDEsIDB4MmUsIDB4N2EsIDB4ZjcsIDB4MDEsIDB4MzIsIDB4NzUsIDB4MDgsIAorICAgIDB4MDYsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MDEsIDB4ZjYsIDB4MjIsIDB4YzIsIDB4YzEsIDB4NzUsIDB4MDgsIDB4MDMsIDB4MTIsIDB4MDgsIDB4MzMsIAorICAgIDB4YTksIDB4MzYsIDB4ZTIsIDB4MTYsIDB4ZTUsIDB4ZjUsIDB4NTQsIDB4YzAsIDB4NjgsIDB4MDcsIDB4YTksIDB4ZDcsIDB4ZjQsIDB4YTksIDB4MjcsIDB4ZjQsIAorICAgIDB4ZmMsIDB4NTMsIDB4ZTEsIDB4M2YsIDB4NDMsIDB4ZjIsIDB4ODgsIDB4MDIsIDB4MDMsIDB4NTUsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmMsIDB4YjQsIDB4MDIsIAorICAgIDB4MGYsIDB4YTksIDB4ZDQsIDB4ZTQsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmMsIDB4N2EsIDB4YjMsIDB4MDEsIDB4MmIsIDB4MjIsIAorICAgIDB4YjQsIDB4MDEsIDB4MzksIDB4N2UsIDB4MjEsIDB4ZTYsIDB4N2MsIDB4MzIsIDB4N2UsIDB4MTMsIDB4MDEsIDB4MmQsIDB4MmMsIDB4MjEsIDB4N2EsIDB4MjMsIAorICAgIDB4MDEsIDB4MmQsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDQsIDB4MDEsIDB4MzQsIDB4ZTUsIDB4ZTMsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIAorICAgIDB4YTUsIDB4ZGIsIDB4ZjYsIDB4YTksIDB4ZDQsIDB4ZTQsIDB4NzUsIDB4MDgsIDB4NzAsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MmQsIAorICAgIDB4N2UsIDB4YTMsIDB4MDEsIDB4MmEsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MDMsIDB4MTIsIDB4MDMsIDB4ZWMsIDB4MjIsIDB4MDIsIDB4MDcsIDB4NTUsIDB4ZTUsIAorICAgIDB4ZTYsIDB4YjQsIDB4MDgsIDB4NjUsIDB4YTksIDB4YzQsIDB4ZTIsIDB4N2UsIDB4MDEsIDB4ZTMsIDB4N2UsIDB4MTEsIDB4ZTMsIDB4N2UsIDB4MzEsIDB4ZTMsIAorICAgIDB4N2UsIDB4MjEsIDB4ZTMsIDB4N2UsIDB4NTEsIDB4ZTMsIDB4N2UsIDB4NDEsIDB4ZTMsIDB4N2UsIDB4NzEsIDB4ZTMsIDB4N2UsIDB4NjEsIDB4ZTMsIDB4N2EsIAorICAgIDB4MGYsIDB4MDEsIDB4MjMsIDB4N2EsIDB4MWYsIDB4MDEsIDB4MjcsIDB4NzUsIDB4MDgsIDB4MDQsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MDEsIDB4MDgsIAorICAgIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MTEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MjEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIAorICAgIDB4MzEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4NDEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4NTEsIDB4MDgsIDB4MTIsIDB4MDgsIAorICAgIDB4MzMsIDB4N2EsIDB4NjEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4YTksIDB4ZDQsIDB4ZTQsIAorICAgIDB4YTksIDB4ZDcsIDB4ZjQsIDB4YTksIDB4YzYsIDB4ZTIsIDB4MTIsIDB4MDMsIDB4YzAsIDB4MjIsIDB4NmQsIDB4MDAsIDB4N2UsIDB4MTQsIDB4MDEsIDB4MDIsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4MzIsIDB4N2EsIDB4MDMsIDB4MDEsIDB4MmQsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjMsIDB4MjAsIDB4ZTcsIDB4MGYsIDB4N2EsIAorICAgIDB4MjMsIDB4MDEsIDB4MmMsIDB4N2EsIDB4MzMsIDB4MDEsIDB4MmIsIDB4YmUsIDB4MDcsIDB4MDEsIDB4MjksIDB4NjgsIDB4MDksIDB4MjIsIDB4N2EsIDB4MzMsIAorICAgIDB4MDEsIDB4MmMsIDB4N2EsIDB4MjMsIDB4MDEsIDB4MmIsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjMsIDB4NTQsIDB4ZTMsIDB4MjMsIDB4MjMsIDB4MzAsIDB4ZTAsIAorICAgIDB4MDIsIDB4ZDIsIDB4ZTUsIDB4MzAsIDB4ZTcsIDB4MDIsIDB4ZDIsIDB4ZTQsIDB4MzAsIDB4ZTUsIDB4MDYsIDB4MzAsIDB4ZTQsIDB4MDMsIDB4MDIsIDB4MDcsIAorICAgIDB4NTUsIDB4NTQsIDB4M2UsIDB4ZjUsIDB4ZjAsIDB4MDMsIDB4NTQsIDB4MWYsIDB4YzMsIDB4MjUsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MTgsIDB4NzUsIDB4ODQsIAorICAgIDB4ZmYsIDB4NzMsIDB4MDIsIDB4MDUsIDB4NmMsIDB4MDIsIDB4MDQsIDB4NjAsIDB4MDIsIDB4MDYsIDB4MDksIDB4MDIsIDB4MDYsIDB4MjQsIDB4MDIsIDB4MDUsIAorICAgIDB4MDUsIDB4MDIsIDB4MDQsIDB4YzYsIDB4MDIsIDB4MDYsIDB4M2QsIDB4MDIsIDB4MDYsIDB4M2QsIDB4MDIsIDB4MDYsIDB4NDAsIDB4MDIsIDB4MDYsIDB4NDAsIAorICAgIDB4MDIsIDB4MDYsIDB4NDAsIDB4MDIsIDB4MDYsIDB4NDAsIDB4MDIsIDB4MDYsIDB4NDAsIDB4MDIsIDB4MDYsIDB4NDAsIDB4MDIsIDB4MDYsIDB4NDAsIDB4MDIsIAorICAgIDB4MDYsIDB4NDAsIDB4MDIsIDB4MDYsIDB4NDYsIDB4MDIsIDB4MDYsIDB4ZmEsIDB4MDIsIDB4MDYsIDB4NDMsIDB4MDIsIDB4MDYsIDB4NDMsIDB4MDIsIDB4MDYsIAorICAgIDB4NDMsIDB4MDIsIDB4MDYsIDB4NDMsIDB4MDIsIDB4MDYsIDB4NDMsIDB4MDIsIDB4MDYsIDB4NDMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDYsIAorICAgIDB4MmEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjUsIDB4NjAsIDB4NTYsIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MDEsIDB4MjYsIDB4N2UsIDB4MTcsIDB4MDEsIAorICAgIDB4MjcsIDB4NzUsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MDEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MTEsIDB4MDgsIAorICAgIDB4MTIsIDB4MDgsIDB4MzMsIDB4MTIsIDB4MDcsIDB4NWYsIDB4NDAsIDB4MzUsIDB4MDIsIDB4MDIsIDB4OTQsIDB4YjQsIDB4MDgsIDB4MTAsIDB4NzUsIDB4MDgsIAorICAgIDB4NzQsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4ZjUsIDB4ZjMsIDB4NzUsIDB4ZjYsIDB4MDEsIDB4MjIsIDB4YjQsIDB4MDAsIAorICAgIDB4MWMsIDB4NzUsIDB4MDgsIDB4NzUsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4NzUsIDB4ZjMsIAorICAgIDB4MDIsIDB4ODAsIDB4MDMsIDB4NzUsIDB4ZjMsIDB4MDAsIDB4NzUsIDB4ZjMsIDB4MDAsIDB4NzUsIDB4ZjYsIDB4MDIsIDB4MjIsIDB4MDIsIDB4MDcsIDB4NTUsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDAsIDB4MzUsIDB4NzUsIDB4MDgsIDB4NzYsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIAorICAgIDB4MjgsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4MjAsIDB4ZTcsIDB4MDksIDB4ZTUsIDB4ZTEsIDB4MzAsIDB4ZTcsIAorICAgIDB4MGQsIDB4NzQsIDB4MDEsIDB4ODAsIDB4MGIsIDB4ZTUsIDB4ZTEsIDB4MzAsIDB4ZTYsIDB4MDQsIDB4NzQsIDB4MDEsIDB4ODAsIDB4MDIsIDB4NzQsIDB4MDAsIAorICAgIDB4NTMsIDB4ZjEsIDB4ODAsIDB4ZjUsIDB4ZjMsIDB4NzUsIDB4ZjMsIDB4MDAsIDB4NzUsIDB4ZjYsIDB4MDIsIDB4MjIsIDB4MDIsIDB4MDcsIDB4NTUsIDB4YzAsIAorICAgIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4NTQsIDB4MGYsIDB4NDIsIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDAsIDB4NDUsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDEsIDB4MjQsIDB4NzUsIDB4MDgsIDB4NzcsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIAorICAgIDB4MjgsIDB4NTQsIDB4MGYsIDB4NzgsIDB4MDUsIDB4NTMsIDB4ZTEsIDB4M2YsIDB4ODAsIDB4MzcsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4MjAsIDB4ZTcsIAorICAgIDB4MDUsIDB4NTMsIDB4ZTEsIDB4N2YsIDB4ODAsIDB4MmIsIDB4NTMsIDB4ZTEsIDB4YmYsIDB4ODAsIDB4MjYsIDB4YjQsIDB4MDMsIDB4MTcsIDB4NzUsIDB4MDgsIAorICAgIDB4NzgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjgsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4NDMsIDB4ZTEsIDB4ODAsIDB4ODAsIDB4MTEsIAorICAgIDB4NDMsIDB4ZTEsIDB4NDAsIDB4ODAsIDB4MGMsIDB4NDMsIDB4ZTEsIDB4YzAsIDB4ZDAsIDB4ZjEsIDB4NzUsIDB4MDgsIDB4MDcsIDB4MTIsIDB4MDgsIDB4MzMsIAorICAgIDB4MjIsIDB4ZDAsIDB4ZjEsIDB4MDIsIDB4MDIsIDB4OTAsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDksIDB4MjMsIDB4NzUsIDB4MDgsIDB4NzksIAorICAgIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YmUsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4NjgsIDB4MTEsIDB4Y2EsIDB4YjgsIDB4YzAsIAorICAgIDB4ZjEsIDB4MTIsIDB4MDEsIDB4MWQsIDB4ZDAsIDB4ZjEsIDB4ZGEsIDB4YjgsIDB4NTAsIDB4NzYsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4ODAsIDB4NmQsIAorICAgIDB4YjQsIDB4MDUsIDB4MDgsIDB4NzUsIDB4MDgsIDB4N2EsIDB4MTIsIDB4MDgsIDB4MzMsIDB4ODAsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MTksIDB4NzUsIDB4MDgsIAorICAgIDB4N2IsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDEsIDB4NTUsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NDQsIAorICAgIDB4MDEsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIDB4NDYsIDB4YjQsIDB4MDEsIDB4MTksIDB4NzUsIDB4MDgsIDB4N2MsIDB4MTIsIDB4MDgsIDB4MzMsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4YjQsIDB4MDEsIDB4MzksIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NTQsIDB4ZmUsIDB4N2EsIDB4YjMsIDB4M2YsIAorICAgIDB4ZjIsIDB4ODAsIDB4MmEsIDB4YjQsIDB4MDcsIDB4MmEsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjUsIDB4NjAsIDB4MjQsIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIAorICAgIDB4MDEsIDB4MjYsIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjcsIDB4NzUsIDB4MDgsIDB4NzMsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2EsIDB4MDEsIDB4MDgsIDB4MTIsIAorICAgIDB4MDgsIDB4MzMsIDB4N2EsIDB4MTEsIDB4MDgsIDB4MTIsIDB4MDgsIDB4MzMsIDB4MTIsIDB4MDcsIDB4OGIsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4OTAsIAorICAgIDB4MDIsIDB4MDcsIDB4NTUsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MGIsIDB4ZjYsIDB4NzUsIDB4MDgsIDB4N2QsIDB4MTIsIDB4MDgsIDB4MzMsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4N2UsIDB4YTMsIDB4MDEsIDB4MjgsIDB4NGMsIDB4YWIsIDB4NzgsIDB4ZTQsIDB4ODAsIDB4ZGYsIDB4N2UsIDB4YjMsIAorICAgIDB4MDEsIDB4MjQsIDB4YjQsIDB4MGEsIDB4ZGIsIDB4NzUsIDB4MDgsIDB4N2UsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjYsIDB4NzAsIAorICAgIDB4Y2YsIDB4ZjUsIDB4ZjMsIDB4NzUsIDB4ZjYsIDB4MDEsIDB4MjIsIDB4MDIsIDB4MDcsIDB4NTUsIDB4MDIsIDB4MDcsIDB4NTUsIDB4MDIsIDB4MDcsIDB4NTUsIAorICAgIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDQsIDB4MjAsIDB4NzUsIDB4MDgsIDB4YzMsIDB4MTIsIDB4MDgsIDB4MzMsIDB4N2UsIDB4MDQsIDB4MDAsIAorICAgIDB4MDEsIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjUsIDB4N2UsIDB4MTgsIDB4MDEsIDB4MzQsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDcsIDB4MDEsIAorICAgIDB4MjksIDB4MTIsIDB4MDgsIDB4M2YsIDB4MDIsIDB4MDYsIDB4ZjQsIDB4YjQsIDB4MDYsIDB4M2EsIDB4NzUsIDB4MDgsIDB4YzEsIDB4MTIsIDB4MDgsIDB4MzMsIAorICAgIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2QsIDB4Y2EsIDB4N2UsIDB4ZDcsIDB4MDEsIDB4MjUsIDB4N2UsIDB4NzgsIAorICAgIDB4MDEsIDB4MzQsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzcsIDB4MDEsIDB4MjksIDB4NzUsIDB4MDgsIDB4YzEsIDB4MTIsIDB4MDgsIDB4MzMsIAorICAgIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4MDgsIDB4ZDYsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIAorICAgIDB4NDAsIDB4NGYsIDB4ODAsIDB4NGEsIDB4YjQsIDB4MDAsIDB4MWMsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4MDIsIDB4OTAsIDB4ZTQsIAorICAgIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIDB4ZDUsIDB4ZTAsIDB4ZjcsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MDIsIDB4ZmYsIDB4Y2EsIDB4MDYsIAorICAgIDB4MDAsIDB4MDAsIDB4MzIsIDB4YjQsIDB4MDksIDB4MTIsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MjUsIDB4NGQsIDB4NTUsIDB4NjgsIDB4MDUsIDB4YTksIDB4ZDIsIAorICAgIDB4YjEsIDB4ODAsIDB4MDMsIDB4YTksIDB4YzIsIDB4YjEsIDB4ODAsIDB4MTYsIDB4YjQsIDB4MDcsIDB4MTYsIDB4YzIsIDB4YWYsIDB4N2UsIDB4MDcsIDB4MDEsIAorICAgIDB4MjcsIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjUsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MTgsIDB4Y2EsIDB4MzgsIDB4Y2EsIDB4MjgsIDB4MzIsIDB4MDIsIDB4MDIsIAorICAgIDB4OTAsIDB4MDIsIDB4MDcsIDB4NTUsIDB4N2UsIDB4YjMsIDB4MDEsIDB4MjQsIDB4YjQsIDB4MDMsIDB4MTUsIDB4NzUsIDB4MDgsIDB4YzIsIDB4MTIsIDB4MDgsIAorICAgIDB4MzMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTcsIDB4MDEsIDB4MjUsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MjksIDB4MDIsIDB4MDIsIDB4OTQsIAorICAgIDB4YjQsIDB4MDUsIDB4MzksIDB4NzUsIDB4MDgsIDB4YzAsIDB4MTIsIDB4MDgsIDB4MzMsIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIAorICAgIDB4ZDUsIDB4ODcsIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzQsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4MjUsIDB4N2UsIDB4NDcsIDB4MDEsIDB4MjksIDB4MTIsIDB4MDgsIDB4M2YsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4N2UsIDB4MDgsIDB4MDEsIAorICAgIDB4MzQsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NTcsIDB4MDEsIDB4MjksIDB4MDIsIDB4MDIsIDB4OTQsIDB4MDIsIDB4MDcsIDB4NTUsIDB4NzUsIAorICAgIDB4MDgsIDB4MDcsIDB4MTIsIDB4MDgsIDB4MzMsIDB4NDMsIDB4ZTEsIDB4YzAsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIAorICAgIDB4ZDUsIDB4ODcsIDB4MTIsIDB4MDcsIDB4Y2EsIDB4NDAsIDB4MTksIDB4N2UsIDB4MDgsIDB4MDEsIDB4MzQsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIAorICAgIDB4MGIsIDB4Y2EsIDB4NDksIDB4MTIsIDB4MDgsIDB4M2YsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MGIsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIAorICAgIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4MDcsIAorICAgIDB4Y2EsIDB4NDAsIDB4MmIsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4NjEsIDB4N2UsIDB4NzgsIDB4MDEsIAorICAgIDB4MzQsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzcsIDB4MDEsIDB4MjksIDB4YmQsIDB4NzQsIDB4NzgsIDB4MTEsIDB4NzUsIDB4MDgsIDB4YzEsIAorICAgIDB4MTIsIDB4MDgsIDB4MzMsIDB4MTIsIDB4MDgsIDB4ZDYsIDB4NDAsIDB4MDYsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIDB4ZDAsIDB4ODcsIAorICAgIDB4ZDAsIDB4YTgsIDB4ZDMsIDB4MjIsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzQsIDB4N2YsIDB4Y2EsIDB4MGIsIDB4MWEsIDB4NTAsIDB4YzUsIAorICAgIDB4ZjAsIDB4N2QsIDB4NjIsIDB4N2QsIDB4NzUsIDB4N2QsIDB4ODcsIDB4N2UsIDB4MzQsIDB4N2YsIDB4MDMsIDB4N2UsIDB4MWIsIDB4YjAsIDB4YmMsIDB4MGIsIAorICAgIDB4NTAsIDB4NDksIDB4M2UsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MGEsIDB4NTAsIDB4MmQsIDB4NzUsIDB4MGIsIDB4M2EsIDB4MzAsIDB4NjksIDB4NTMsIDB4MDAsIAorICAgIDB4MDIsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmMsIDB4MWIsIDB4NTAsIDB4MzAsIDB4M2UsIDB4MTAsIDB4M2UsIDB4MTAsIDB4MGEsIAorICAgIDB4NTEsIDB4MmQsIDB4MzUsIDB4NjksIDB4NDEsIDB4MDAsIDB4MDIsIDB4MGIsIDB4MWEsIDB4MzAsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIAorICAgIDB4YmUsIDB4NDQsIDB4ZmYsIDB4ZmYsIDB4NzgsIDB4MDUsIDB4N2UsIDB4MWIsIDB4OTAsIDB4MGEsIDB4NDksIDB4NGQsIDB4NDQsIDB4NjgsIDB4MGMsIDB4YmUsIAorICAgIDB4NDQsIDB4MDAsIDB4ZmYsIDB4MjgsIDB4MDQsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4YzMsIDB4MjIsIDB4ZDMsIDB4MjIsIAorCisvLyBTZWdtZW50ICMxNiwgRVhDTFVERUQgU3RhcnQgQWRkcmVzcyAwMGZmN2MwMCwgTGVuZ3RoIDE5OQorCisKKy8vIFNlZ21lbnQgIzE3LCBFWENMVURFRCBTdGFydCBBZGRyZXNzIDAwZmY3ZjAwLCBMZW5ndGggMTkyCisKKworLy8gU2VnbWVudCAjMTcsIFN0YXJ0IEFkZHJlc3MgMDBmZjdmYzAsIExlbmd0aCA2NAorMHhmZiwweDAwLDB4YzAsMHg3ZiwweDQwLDB4MDAsCisgICAgMHg0MCwgMHgwMSwgMHgwMiwgMHgwMCwgMHhjYSwgMHgxYiwgMHgwMSwgMHgwYywgMHgwMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisKKy8vIFNlZ21lbnQgIzE4LCBTdGFydCBBZGRyZXNzIDAwZmYwODMzLCBMZW5ndGggNTAxNQorMHhmZiwweDAwLDB4MzMsMHgwOCwweDk3LDB4MTMsCisgICAgMHhjYSwgMHgwOCwgMHg3ZSwgMHgwMSwgMHgwOCwgMHg3YSwgMHgwMywgMHgzZiwgMHhmMCwgMHhkYSwgMHgwOCwgMHgyMiwgMHg4MCwgMHg1MCwgMHgwYiwgMHgxYSwgCisgICAgMHg2MCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHg3MCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHg4MCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHg5MCwgCisgICAgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHhhMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHhiMCwgMHgwYiwgMHgzNSwgMHgwYiwgMHgxYSwgMHhjMCwgMHgwYiwgCisgICAgMHgzNSwgMHgwYiwgMHgxYSwgMHhkMCwgMHgwYiwgMHgzNSwgMHgxYiwgMHgwYSwgMHg2MCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHg3MCwgMHgwYiwgMHgxNSwgCisgICAgMHgxYiwgMHgwYSwgMHg4MCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHg5MCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHhhMCwgMHgwYiwgMHgxNSwgMHgxYiwgCisgICAgMHgwYSwgMHhiMCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHhjMCwgMHgwYiwgMHgxNSwgMHgxYiwgMHgwYSwgMHhkMCwgMHgwYiwgMHgxNSwgMHg5ZSwgMHg0NCwgCisgICAgMHgwMCwgMHgxMCwgMHg1MCwgMHhhYSwgMHgyZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwZSwgMHg3ZSwgMHgxYiwgMHhjMCwgMHg3YSwgMHgwYiwgMHhjMCwgCisgICAgMHgwYiwgMHgxNCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg3OCwgMHhmMiwgMHgyMiwgMHg3ZiwgMHg2ZiwgMHg3ZiwgMHhmMCwgMHgxYiwgMHhmYywgMHg3YywgCisgICAgMHg1NCwgMHg3ZCwgMHgzMiwgMHg4MCwgMHgwOCwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHg5ZSwgMHg0NCwgMHgwMCwgCisgICAgMHgxMCwgMHg1MCwgMHhmMiwgMHgyZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwNiwgMHhjYSwgMHg0OCwgMHgxYiwgMHg0NCwgMHg3OCwgMHhmYSwgMHg3ZiwgCisgICAgMHhmNiwgMHg4OSwgMHhlNCwgMHhjYSwgMHg2YiwgMHg1ZSwgMHhkNCwgMHgwMCwgMHgzZiwgMHg2OCwgMHgyMCwgMHg3ZSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg5ZCwgCisgICAgMHg4ZCwgMHhkYSwgMHg2YiwgMHhiZCwgMHg4NywgMHgzOCwgMHgxNiwgMHhjYSwgMHg3OSwgMHg3ZCwgMHg3OCwgMHgxMiwgMHgwOSwgMHgwMCwgMHhkYSwgMHg3OSwgCisgICAgMHg0MCwgMHgwOCwgMHg5ZCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg4MCwgMHgwNSwgMHhjMiwgMHhkNywgMHgyMiwgMHhkYSwgMHg2YiwgMHg0MywgMHg5MCwgMHgzMCwgCisgICAgMHg3NCwgMHhhYSwgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3NCwgMHg1NSwgMHgzOSwgMHhiNSwgMHgyYSwgMHhhYSwgMHg3NCwgMHhhMCwgMHgzOSwgMHhiNSwgCisgICAgMHg1NSwgMHg1NSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg5ZCwgMHg3MCwgMHg1MCwgMHgwNiwgMHgyZCwgMHg3MCwgMHg3ZCwgMHgwNywgMHg2ZCwgMHg3NywgCisgICAgMHg3YywgMHgzMSwgMHg3ZSwgMHg3YiwgMHgwMCwgMHg3YSwgMHg2YiwgMHgwMCwgMHgwYiwgMHg3YywgMHgwYiwgMHg2YywgMHhhNSwgMHhkOSwgMHhmMywgMHg3ZiwgCisgICAgMHgxNiwgMHgxYiwgMHgxYywgMHg3ZSwgMHg1NCwgMHgyNywgMHgxMCwgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgMHgxMCwgMHg2OCwgMHgwNiwgMHgxYiwgMHg1NCwgCisgICAgMHg3OCwgMHhmNSwgMHg4MCwgMHgyYywgMHg2ZCwgMHgwMCwgMHg3YywgMHgyMCwgMHg3ZiwgMHgxNiwgMHg5ZiwgMHgxMCwgMHg3ZiwgMHgyNywgMHg5ZiwgMHgyMCwgCisgICAgMHg3ZSwgMHgyYiwgMHgwMCwgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgMHgwMSwgMHg3OCwgMHgxNiwgMHgwYiwgMHgyYywgMHgwYiwgMHgxYywgMHhhNSwgMHhkYiwgCisgICAgMHhlZiwgMHg3YywgMHhiNiwgMHgyMCwgMHhlMCwgMHgwMywgMHg2MywgMHg5MCwgMHgzMCwgMHg0ZCwgMHg3NywgMHg3OCwgMHg5MywgMHhjMiwgMHhkNywgMHgyMiwgCisgICAgMHhkMiwgMHhkNywgMHgyMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMSwgCisgICAgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgCisgICAgMHgwNCwgMHgwMCwgMHgwOCwgMHgxMCwgMHgwMiwgMHgxMCwgMHgwNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwgMHg3ZSwgMHgxOCwgMHg3ZiwgCisgICAgMHhiZCwgMHg3YSwgMHgxYywgMHgwMCwgMHhmZiwgMHgwYiwgMHgxYSwgMHgwMCwgMHhiZSwgMHgxMCwgMHgxNCwgMHgzOCwgMHgxYSwgMHgwYSwgMHg1MSwgMHgyMywgCisgICAgMHg3ZSwgMHgxOCwgMHgwOSwgMHg3NiwgMHg3YSwgMHgxYywgMHgwMCwgMHhmZiwgMHgyZCwgMHgzNSwgMHgwYiwgMHgxYSwgMHg1MCwgMHg2MCwgMHgwOCwgMHhhNSwgCisgICAgMHhiOCwgMHgwMiwgMHgwMywgMHg0ZSwgMHhhMCwgMHgwOCwgMHgyMiwgMHg4MCwgMHhmZSwgMHg3ZSwgMHhlOCwgMHg3ZiwgMHhiZiwgMHg3YSwgMHhlYywgMHgwMCwgCisgICAgMHhmZiwgMHhlMCwgMHhmNSwgMHgyMiwgMHg1NCwgMHhjMCwgMHg2OCwgMHgxNiwgMHg3ZSwgMHhlOCwgMHg3ZiwgMHhiZSwgMHg3YSwgMHhlYywgMHgwMCwgMHhmZiwgCisgICAgMHhlMCwgMHg2MCwgMHgwYywgMHgxMiwgMHgwOSwgMHhhMCwgMHhmNSwgMHgwOSwgMHg3YSwgMHhhMSwgMHgyMCwgMHgwMiwgMHgwZiwgMHgwYSwgMHgyMiwgMHhjMiwgCisgICAgMHg5NSwgMHhkMiwgMHg5NCwgMHgxMiwgMHgxOSwgMHhmYiwgMHg1MywgMHg5MCwgMHhjZiwgMHgxMiwgMHgxOSwgMHhmYiwgMHg4MCwgMHhmMSwgMHgwZCwgMHgwYSwgCisgICAgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwZCwgCisgICAgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgMHgwYSwgCisgICAgMHg0NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg3MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgyZiwgMHgzNCwgMHgyMCwgMHgyZCwgMHgyMCwgMHg0OCwgMHg2MSwgMHg3MiwgCisgICAgMHg2NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMCwgMHg0NCwgMHg2OSwgMHg2MSwgMHg2NywgMHg2ZSwgMHg2ZiwgMHg3MywgMHg3NCwgMHg2OSwgMHg2MywgCisgICAgMHg3MywgMHgyYywgMHgyMCwgMHg1MiwgMHg2NSwgMHg3NiwgMHgyMCwgMHgzMSwgMHgyZSwgMHgzMCwgMHgzMCwgMHgzYiwgMHgyMCwgMHg0MywgMHg2ZiwgMHg3MCwgCisgICAgMHg3OSwgMHg3MiwgMHg2OSwgMHg2NywgMHg2OCwgMHg3NCwgMHgyMCwgMHgzMSwgMHgzOSwgMHgzOSwgMHgzOCwgMHgyMCwgMHg0OSwgMHg2ZSwgMHg3MywgMHg2OSwgCisgICAgMHg2NCwgMHg2NSwgMHgyMCwgMHg0ZiwgMHg3NSwgMHg3NCwgMHgyMCwgMHg0ZSwgMHg2NSwgMHg3NCwgMHg3NywgMHg2ZiwgMHg3MiwgMHg2YiwgMHg3MywgMHgwZCwgCisgICAgMHgwYSwgMHgwMCwgMHg1MCwgMHg2MSwgMHg3MywgMHg3MywgMHgwMCwgMHg0NiwgMHg0MSwgMHg0OSwgMHg0YywgMHgyMCwgMHgyMSwgMHgyMSwgMHgwMCwgMHg1MCwgCisgICAgMHg2MSwgMHg3MywgMHg3MywgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg0NiwgMHg0MSwgMHg0OSwgMHg0YywgMHgyMCwgMHgyMSwgMHgyMSwgMHgyMCwgCisgICAgMHgwMCwgMHgwZCwgMHgwYSwgMHg0NCwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2MywgMHg3NCwgMHgyMCwgMHg1MiwgMHg2MSwgMHg2ZCwgMHgzYSwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MiwgMHg2MSwgMHg2ZCwgMHgyMCwgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgzYSwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg0MSwgMHg2NCwgMHg2NCwgMHg3MiwgMHg2NSwgMHg3MywgMHg3MywgMHgyMCwgMHg2MiwgCisgICAgMHg2OSwgMHg3NCwgMHgyMCwgMHgzMCwgMHgyZCwgMHgzMSwgMHgzNCwgMHgyMCwgMHg3NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1NywgMHg3MiwgMHg2ZiwgMHg3NCwgMHg2NSwgMHgyMCwgMHg0MSwgCisgICAgMHg2NCwgMHg2NCwgMHg3MiwgMHg2NSwgMHg3MywgMHg3MywgMHgzYSwgMHgyMCwgMHgzMCwgMHgzMCwgMHgzYSwgMHgwMCwgMHgyMCwgMHgyMCwgMHg3NywgMHg2OSwgCisgICAgMHg3NCwgMHg2OCwgMHgyMCwgMHg2NCwgMHg2MSwgMHg3NCwgMHg2MSwgMHgzYSwgMHgyMCwgMHgwMCwgMHgyYywgMHgyMCwgMHg2MSwgMHg2ZSwgMHg2NCwgMHgyMCwgCisgICAgMHg3MiwgMHg2NSwgMHg2MSwgMHg2NCwgMHgzYSwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg0ZiwgMHg2ZSwgMHg2NSwgMHgyMCwgMHg2ZiwgMHg3MiwgMHgyMCwgCisgICAgMHg2MiwgMHg2ZiwgMHg3NCwgMHg2OCwgMHgyMCwgMHg2ZiwgMHg2NiwgMHgyMCwgMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgMHg2NiwgMHg2ZiwgMHg2YywgMHg2YywgCisgICAgMHg2ZiwgMHg3NywgMHg2OSwgMHg2ZSwgMHg2NywgMHgyMCwgMHg0MSwgMHg2NCwgMHg2NCwgMHg3MiwgMHg2NSwgMHg3MywgMHg3MywgMHgyMCwgMHg2MiwgMHg2OSwgCisgICAgMHg3NCwgMHg3MywgMHgyMCwgMHg2YywgMHg2OSwgMHg3MywgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMCwgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMCwgMHg3MywgMHg2OCwgCisgICAgMHg2ZiwgMHg3MiwgMHg3NCwgMHg2NSwgMHg2NCwgMHgwZCwgMHgwYSwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg3MywgMHg2ZiwgMHg2ZCwgMHg2NSwgMHg3NCwgMHg2OCwgCisgICAgMHg2OSwgMHg2ZSwgMHg2NywgMHgzYSwgMHgyMCwgMHgwMCwgMHgyMCwgMHg2MSwgMHg2ZSwgMHg2NCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg0NCwgMHg2NSwgCisgICAgMHg3NCwgMHg2NSwgMHg2MywgMHg3NCwgMHgyMCwgMHg1NSwgMHg2MSwgMHg3MiwgMHg3NCwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgCisgICAgMHg1MywgMHg2MywgMHg3MiwgMHg2MSwgMHg3NCwgMHg2MywgMHg2OCwgMHgyMCwgMHg1MCwgMHg2MSwgMHg2NCwgMHgyYywgMHg0NiwgMHg2OSwgMHg0NiwgMHg2ZiwgCisgICAgMHgyMCwgMHg0NSwgMHg2ZSwgMHg2MSwgMHg2MiwgMHg2YywgMHg2NSwgMHgyMCwgMHgyNiwgMHgyMCwgMHg1MiwgMHg1MywgMHg1NCwgMHgzYSwgMHgyMCwgMHgwMCwgCisgICAgMHgwZCwgMHgwYSwgMHgwYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHg1NSwgMHg2MSwgMHg3MiwgMHg3NCwgMHgyMCwgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHg3MywgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHg1MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzMSwgMHgyMCwgMHgyMCwgMHgyMCwgMHg1MCwgMHg2ZiwgMHg3MiwgMHg3NCwgCisgICAgMHgzMiwgMHgyMCwgMHgyMCwgMHgyMCwgMHg1MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzMywgMHgyMCwgMHgyMCwgMHgyMCwgMHg1MCwgMHg2ZiwgMHg3MiwgMHg3NCwgCisgICAgMHgzNCwgMHgwZCwgMHgwYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgCisgICAgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgMHgyZCwgCisgICAgMHgyZCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgyMCwgMHg0NCwgMHg2NSwgMHg2MywgMHg2ZiwgMHg2NCwgMHg2NSwgMHg3MiwgCisgICAgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg0NCwgMHg2OSwgMHg2NywgMHg2OSwgMHg3NCwgMHg2MSwgMHg2YywgMHgyMCwgCisgICAgMHg0YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHg2MiwgMHg2MSwgMHg2MywgMHg2YiwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg0MSwgMHg2ZSwgMHg2MSwgMHg2YywgCisgICAgMHg2ZiwgMHg2NywgMHgyMCwgMHg0YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHg2MiwgMHg2MSwgMHg2MywgMHg2YiwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgCisgICAgMHg1MiwgMHg1OCwgMHg0NCwgMHgyYywgMHg1NCwgMHg1OCwgMHg0NCwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg1MiwgMHg1NCwgMHg1MywgMHgyYywgMHg0MywgCisgICAgMHg1NCwgMHg1MywgMHgyYywgMHg1MiwgMHg0OSwgMHgyMCwgMHg1MywgMHg2OCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MiwgMHg1OCwgMHg0NCwgMHgyYywgMHg1NCwgMHg1OCwgMHg0NCwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0NCwgCisgICAgMHg1NCwgMHg1MiwgMHgyYywgMHg0NCwgMHg1MywgMHg1MiwgMHgyYywgMHg0MywgMHg0NCwgMHgyMCwgMHg1MywgMHg2OCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzYSwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MiwgMHg1NCwgMHg1MywgMHg1YiwgMHg0MywgMHg1NCwgMHg1MywgMHgyYywgCisgICAgMHg1MiwgMHg0OSwgMHg1ZCwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0NCwgMHg1NCwgMHg1MiwgMHgyYywgMHg0NCwgMHg1MywgMHg1MiwgMHgyYywgMHg0MywgCisgICAgMHg0NCwgMHgyMCwgMHg1MywgMHg2OCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzYSwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MiwgMHg1NCwgMHg1MywgMHg1YiwgCisgICAgMHg0MywgMHg1NCwgMHg1MywgMHgyYywgMHg0MywgMHg0NCwgMHg1ZCwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0NCwgMHg1MywgMHg1MiwgMHgyYywgMHg1MiwgCisgICAgMHg0OSwgMHgyMCwgMHg1MywgMHg2OCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgCisgICAgMHg0NCwgMHg1NCwgMHg1MiwgMHg1YiwgMHg0NCwgMHg1MywgMHg1MiwgMHgyYywgMHg0MywgMHg0NCwgMHg1ZCwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg1MiwgCisgICAgMHg1NCwgMHg1MywgMHgyYywgMHg0MywgMHg1NCwgMHg1MywgMHgyYywgMHg1MiwgMHg0OSwgMHgyMCwgMHg1MywgMHg2OCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzYSwgCisgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg0NCwgMHg1NCwgMHg1MiwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0MywgMHg1NCwgMHg1MywgMHgyYywgMHg0MywgCisgICAgMHg0NCwgMHgyMCwgMHg1MywgMHg2OCwgMHg2ZiwgMHg3MiwgMHg3NCwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MiwgMHg1NCwgMHg1MywgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0MywgCisgICAgMHg1NCwgMHg1MywgMHgyYywgMHg1MiwgMHg0OSwgMHgyMCwgMHg0YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHg2MiwgMHg2MSwgMHg2MywgMHg2YiwgMHgzYSwgMHgyMCwgCisgICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHg1MiwgMHg1NCwgMHg1MywgMHgyMCwgCisgICAgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0MywgMHg1NCwgMHg1MywgMHgyYywgMHg0MywgMHg0NCwgMHgyMCwgMHg0YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHg2MiwgMHg2MSwgCisgICAgMHg2MywgMHg2YiwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgCisgICAgMHg0NCwgMHg1NCwgMHg1MiwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg0NCwgMHg1MywgMHg1MiwgMHgyYywgMHg0MywgMHg0NCwgMHgyMCwgMHg0YywgMHg2ZiwgCisgICAgMHg2ZiwgMHg3MCwgMHg2MiwgMHg2MSwgMHg2MywgMHg2YiwgMHgzYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgCisgICAgMHgyMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHgwYSwgMHgyMCwgMHgyMCwgMHgyMCwgMHg0NSwgMHgyMCwgMHg1MiwgMHgyMCwgMHg1MiwgMHgyMCwgMHg0ZiwgMHgyMCwgCisgICAgMHg1MiwgMHgyMCwgMHgyMSwgMHgyMSwgMHgyMSwgMHgyYywgMHgyMCwgMHg0NSwgMHgyMCwgMHg1MiwgMHgyMCwgMHg1MiwgMHgyMCwgMHg0ZiwgMHgyMCwgMHg1MiwgCisgICAgMHgyMCwgMHgyMSwgMHgyMSwgMHgyMSwgMHgyMCwgMHgyYywgMHgyMCwgMHg0NSwgMHgyMCwgMHg1MiwgMHgyMCwgMHg1MiwgMHgyMCwgMHg0ZiwgMHgyMCwgMHg1MiwgCisgICAgMHgyMCwgMHgyMSwgMHgyMSwgMHgyMSwgMHgwZCwgMHgwYSwgMHgwYSwgMHg0NCwgMHg2OSwgMHg2MSwgMHg2NywgMHg2ZSwgMHg2ZiwgMHg3MywgMHg3NCwgMHg2OSwgCisgICAgMHg2MywgMHg3MywgMHgyMCwgMHg2ZSwgMHg2ZiwgMHg3NywgMHgyMCwgMHg3NywgMHg2OSwgMHg2YywgMHg2YywgMHgyMCwgMHg2NSwgMHg2ZSwgMHg3NCwgMHg2NSwgCisgICAgMHg3MiwgMHgyMCwgMHg2MSwgMHgyMCwgMHg2NCwgMHg2NSwgMHg2MiwgMHg3NSwgMHg2NywgMHgyMCwgMHg2YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHgyMCwgMHg2ZiwgCisgICAgMHg2NiwgMHgyMCwgMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgMHg2NiwgMHg2OSwgMHg3MiwgMHg3MywgMHg3NCwgMHgyMCwgMHg2NCwgMHg2NSwgMHg3NCwgMHg2NSwgCisgICAgMHg2MywgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMCwgMHg2NSwgMHg3MiwgMHg3MiwgMHg2ZiwgMHg3MiwgMHgyZSwgMHgwMCwgMHgwZCwgMHgwYSwgMHgwYSwgMHg0ZSwgCisgICAgMHg2ZiwgMHgyMCwgMHg0OCwgMHg2MSwgMHg3MiwgMHg2NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMCwgMHg2NSwgMHg3MiwgMHg3MiwgMHg2ZiwgMHg3MiwgCisgICAgMHg3MywgMHgyMCwgMHg2NCwgMHg2NSwgMHg3NCwgMHg2NSwgMHg2MywgMHg3NCwgMHg2NSwgMHg2NCwgMHgyZSwgMHgwZCwgMHgwYSwgMHgwMCwgMHg0MywgMHg2ZiwgCisgICAgMHg3MCwgMHg3OSwgMHg2OSwgMHg2ZSwgMHg2NywgMHgyMCwgMHg2MywgMHg2ZiwgMHg2NCwgMHg2NSwgMHgyMCwgMHg2NiwgMHg3MiwgMHg2ZiwgMHg2ZCwgMHgyMCwgCisgICAgMHg0ZCwgMHg2MSwgMHg3MywgMHg3NCwgMHg2NSwgMHg3MiwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwgMHg1MywgMHg2YywgMHg2MSwgMHg3NiwgMHg2NSwgMHgyNywgCisgICAgMHg3MywgMHgyMCwgMHg0NSwgMHg0NSwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg2ZCwgMHgyMCwgMHgyZSwgMHgyZSwgMHgyZSwgMHgwMCwgMHg0NCwgMHg2ZiwgMHg2ZSwgCisgICAgMHg2NSwgMHgwZCwgMHgwYSwgMHgwYSwgMHgyZCwgMHgzZSwgMHgyMCwgMHg1NCwgMHg3NSwgMHg3MiwgMHg2ZSwgMHgyMCwgMHg3NSwgMHg2ZSwgMHg2OSwgMHg3NCwgCisgICAgMHgyMCwgMHg2ZiwgMHg2NiwgMHg2NiwgMHgyYywgMHgyMCwgMHg2NCwgMHg2OSwgMHg3MywgMHg2MywgMHg2ZiwgMHg2ZSwgMHg2ZSwgMHg2NSwgMHg2MywgMHg3NCwgCisgICAgMHgyMCwgMHg2MywgMHg2MSwgMHg2MiwgMHg2YywgMHg2NSwgMHgyMCwgMHg2MSwgMHg2ZSwgMHg2NCwgMHgyMCwgMHg3MiwgMHg3NSwgMHg2ZSwgMHgyMCwgMHg3MywgCisgICAgMHg3NCwgMHg2MSwgMHg2ZSwgMHg2NCwgMHg2MSwgMHg2YywgMHg2ZiwgMHg2ZSwgMHg2NSwgMHgyMCwgMHg2NCwgMHg2OSwgMHg2MSwgMHg2NywgMHg2ZSwgMHg2ZiwgCisgICAgMHg3MywgMHg3NCwgMHg2OSwgMHg2MywgMHg3MywgMHgyZSwgMHgwMCwgMHhjMiwgMHhhZiwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwYSwgMHg3NSwgMHg5MCwgMHgwZCwgCisgICAgMHgyMCwgMHgxNywgMHgwMiwgMHhkMiwgMHhiNSwgMHg0MywgMHg5MCwgMHgzMCwgMHg2YywgMHgwMCwgMHg3ZSwgMHgxMCwgMHgwMywgMHgxMiwgMHgwZiwgMHgzOCwgCisgICAgMHg3ZSwgMHg2OCwgMHgwYSwgMHgwMSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgwYiwgMHgwMCwgMHgzMCwgMHhiNCwgMHgwMiwgCisgICAgMHg4MCwgMHgyNCwgMHgwMiwgMHgxYiwgMHgzYywgMHgyMCwgMHgwOSwgMHgxZCwgMHhjMiwgMHg5NCwgMHhkMiwgMHg5NSwgMHgxMiwgMHgxOSwgMHhmYiwgMHg1MywgCisgICAgMHg5MCwgMHhjZiwgMHgxMiwgMHgxOSwgMHhmYiwgMHhjMiwgMHg5NSwgMHhkMiwgMHg5NCwgMHgxMiwgMHgxOSwgMHhmYiwgMHhhNSwgMHhkOSwgMHhlNiwgMHg0MywgCisgICAgMHg5MCwgMHgzMCwgMHgxMiwgMHgxOSwgMHhmYiwgMHgyMiwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg5NCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgCisgICAgMHg5MywgMHg3ZSwgMHhlNCwgMHgxMCwgMHgwMCwgMHg3ZSwgMHg0MCwgMHg1NSwgMHg3YSwgMHhlOSwgMHg0MCwgMHgwYiwgMHhlNCwgMHg3ZSwgMHg1MCwgMHhhYSwgCisgICAgMHg3YSwgMHhlOSwgMHg1MCwgMHgxYiwgMHhlNCwgMHhiZSwgMHhlOSwgMHg0MCwgMHg2OCwgMHgxOSwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3YSwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgxMywgMHg3YSwgMHhlOSwgMHg0MCwgMHg3ZSwgMHhlOSwgCisgICAgMHgxMCwgMHg4MCwgMHhmOCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3NSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgwYiwgMHgwMCwgCisgICAgMHg3ZSwgMHg2OCwgMHgwYSwgMHhkOCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwMCwgMHg3ZSwgCisgICAgMHg3MCwgMHgwZSwgMHg3ZSwgMHhhNCwgMHhmZiwgMHhmZiwgMHg3ZSwgMHhiNCwgMHhiZiwgMHhmZiwgMHg3ZCwgMHhjYiwgMHgwZSwgMHhjNCwgMHg3ZCwgMHhkYywgCisgICAgMHg1ZCwgMHhkYiwgMHg2YywgMHhiYiwgMHg3ZCwgMHhmYSwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHgwYiwgMHhiMCwgMHg3ZCwgCisgICAgMHhmYiwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYywgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgCisgICAgMHg3YSwgMHg3YiwgMHhiMCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg2YywgMHhiYiwgCisgICAgMHg3ZCwgMHhmYSwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHhiZSwgMHg3YiwgMHhiMCwgMHg3OCwgMHg0MSwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYiwgMHg1ZSwgCisgICAgMHhmNCwgMHg3ZiwgMHhmZiwgMHhiZSwgMHg3YiwgMHhiMCwgMHg3OCwgMHgzNCwgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmYywgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgCisgICAgMHhiZSwgMHg3YiwgMHhiMCwgMHg3OCwgMHgyNywgMHgwYiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHhiZSwgMHg3YiwgMHhiMCwgCisgICAgMHg3OCwgMHgxYSwgMHgwYiwgMHhiMCwgMHhiZSwgMHhjNCwgMHhmZiwgMHhmZSwgMHg3OCwgMHg5MiwgMHgwZSwgMHhiNCwgMHhhNSwgMHhkZiwgMHg4YiwgMHg3ZSwgCisgICAgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHg3NywgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgCisgICAgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHg2OCwgMHgwYiwgMHgyYSwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgwYSwgMHg0NywgMHgxMiwgMHgxYSwgMHhjOSwgMHg3ZSwgMHg2OCwgMHgwYiwgMHg3OSwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg2YywgMHg3NywgMHhkYSwgMHg2YiwgMHhjYSwgMHg2YiwgMHgwYiwgMHg3MCwgMHgwZSwgMHhjNCwgCisgICAgMHhiZSwgMHhjNCwgMHhmZiwgMHhmZiwgMHg3OCwgMHhmNiwgMHgxYiwgMHg3MCwgMHgwYSwgMHg0NywgMHgxMiwgMHgxYSwgMHhjOSwgMHgxMiwgMHgxYSwgMHgwOCwgCisgICAgMHgzMCwgMHgwOSwgMHgzMCwgMHhkYSwgMHg2YiwgMHhkYSwgMHg1YiwgMHg2YywgMHhiYiwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHhmYSwgMHg1ZSwgCisgICAgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg3ZCwgMHhmYiwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg3ZCwgCisgICAgMHhmYywgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHg1ZSwgMHhmNCwgMHg3ZiwgMHhmZiwgMHg3YSwgMHg3YiwgCisgICAgMHhiMCwgMHg4MCwgMHhkNCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHhiNiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgzMCwgMHgxNywgCisgICAgMHgwZSwgMHg3ZSwgMHg3OCwgMHgwNCwgMHgyMCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0NCwgMHg3YiwgMHhlMCwgMHg4MCwgMHgwYywgMHg3ZSwgCisgICAgMHg3OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMSwgMHg3ZSwgMHg0NCwgMHg4MCwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3ZSwgMHg0MCwgMHgzYSwgCisgICAgMHg3YywgMHg1NCwgMHg3ZiwgMHg1NywgMHg3ZCwgMHg4NCwgMHg2YywgMHg2NiwgMHg3YSwgMHg1YiwgMHg1MCwgMHgwYiwgMHg1YywgMHgwYiwgMHg1MCwgMHhhNSwgCisgICAgMHhkZSwgMHgwMiwgMHgwYiwgMHg1MCwgMHgxYiwgMHg4NCwgMHg3OCwgMHhmMCwgMHg3YywgMHg1NCwgMHg3ZiwgMHg1NywgMHg3ZCwgMHg4NCwgMHg2YywgMHg2NiwgCisgICAgMHhiZSwgMHg1YiwgMHg1MCwgMHg3OCwgMHgxYSwgMHgwYiwgMHg1YywgMHgwYiwgMHg1MCwgMHhhNSwgMHhkZSwgMHgwMiwgMHgwYiwgMHg1MCwgMHgxYiwgMHg4NCwgCisgICAgMHg3OCwgMHhlZSwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3NSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHg0YiwgMHg3ZiwgCisgICAgMHg0NSwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3YSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHg2OCwgMHgwYSwgMHhmYSwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZCwgMHg0YiwgMHgxMiwgMHgxYSwgMHhjOSwgMHg3ZSwgMHg2OCwgMHgwYiwgMHgwZiwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg2YywgMHg4OCwgMHg3YywgMHg5NSwgMHgxMiwgMHgxYSwgMHhjOSwgMHg3ZSwgMHg2OCwgCisgICAgMHgwYiwgMHgxZCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHg0YiwgMHg5MCwgMHgxMiwgMHgxYSwgMHhjOSwgMHgxMiwgCisgICAgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgwNSwgMHg3ZSwgMHg0YiwgMHg5MCwgMHg4MCwgMHhmYiwgMHg3ZSwgMHg2OCwgMHgwYiwgMHg3ZiwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgwYiwgMHgwMCwgMHhkMiwgMHg5MiwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgwOCwgMHhiZSwgMHhiMCwgMHgwMSwgMHg3OCwgMHgwYiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhiZSwgMHhiMCwgMHg2MCwgMHg3OCwgMHgwMiwgMHg4MCwgCisgICAgMHgxNywgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3YSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgCisgICAgMHgwOSwgMHgxMSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHg4MCwgMHhmYSwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3NSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHg2OCwgMHgwYiwgMHhhMSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgwYiwgMHgwMCwgCisgICAgMHhjMiwgMHg5MiwgMHgxMiwgMHgxOSwgMHhlZSwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHg1NSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxYywgCisgICAgMHg3ZSwgMHhiMCwgMHgwMSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxYywgMHhiYywgMHhhYiwgMHg3OCwgMHgzNywgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgwOCwgMHg1ZSwgMHhiMCwgMHhjMCwgMHhiZSwgMHhiMCwgMHhjMCwgMHg3OCwgMHgyYiwgMHg3ZSwgMHhhMCwgMHhhYSwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxYywgMHg2YywgMHhiYiwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxYywgMHhiYywgMHhhYiwgMHg3OCwgMHgxNiwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHg1ZSwgMHhiMCwgMHhjMCwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3NSwgMHg3YSwgMHg2YywgMHgwMCwgCisgICAgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHgxYiwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg3YSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgCisgICAgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgwYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxYywgMHgwOSwgMHhiMiwgMHgwMCwgMHgxYywgMHg4MCwgCisgICAgMHhmNiwgMHg3ZSwgMHg2OCwgMHgwYiwgMHhjMywgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHg2OCwgMHgwYywgMHg0NSwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHg3ZSwgMHhiMCwgCisgICAgMHgwMSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgxYywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHhiMCwgMHhhNSwgMHhkOSwgMHhmMywgMHg3ZSwgMHgyNCwgCisgICAgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHg3ZSwgMHhiMCwgMHgwMSwgMHgwYiwgMHgwMCwgMHgwOSwgMHhhMiwgMHgwMCwgMHgxYywgMHhiYywgMHhhYiwgCisgICAgMHg3OCwgMHgxNiwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgyZSwgMHgyNCwgMHgwMSwgCisgICAgMHgwMCwgMHgwYiwgMHhiMCwgMHhhNSwgMHhkOSwgMHhlMiwgMHg4MCwgMHgyNSwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHhlNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgCisgICAgMHgwOSwgMHhhMiwgMHgwMCwgMHgxYywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhmNSwgMHg4MCwgMHhlYywgMHg3ZSwgMHg2OCwgMHgwYywgCisgICAgMHg2OSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxMywgMHg4YSwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgCisgICAgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHg3NCwgMHgxMCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxMywgMHgwMywgMHgyZSwgMHgyNCwgMHgwMSwgCisgICAgMHgwMCwgMHhhNSwgMHhkOSwgMHhlZSwgMHg3ZSwgMHg2OCwgMHgwYywgMHg4ZCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgCisgICAgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHhlNCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxMywgMHgwMywgCisgICAgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhlZiwgMHgzMCwgMHgwMCwgMHgwMywgMHgwMiwgMHgxOCwgMHhiNywgMHgwMiwgMHgxMywgMHhiYiwgCisgICAgMHg3NCwgMHgwNywgMHgxOSwgMHhiMiwgMHgwMCwgMHgwOCwgMHgxMiwgMHgxOSwgMHhmYiwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgxNCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgxNCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjMiwgMHgwYiwgMHg3ZSwgMHhiMCwgMHg1NSwgMHgxMiwgMHgxMywgCisgICAgMHg2NCwgMHg3ZSwgMHhiMCwgMHhhYSwgMHgxMiwgMHgxMywgMHg2NCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHgxMiwgMHgxMywgMHg2NCwgMHg3ZSwgMHhiMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxMywgMHg2NCwgMHgzMCwgMHgwYiwgMHgwZiwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgCisgICAgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgyMiwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgCisgICAgMHgyMiwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHhiYywgMHhhYiwgMHg3OCwgMHgwMSwgCisgICAgMHgyMiwgMHgyMCwgMHgwOSwgMHgwMywgMHhkMiwgMHgwYiwgMHgyMiwgMHgxMiwgMHgxYSwgMHgwOCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgCisgICAgMHhlZSwgMHgwOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywgMHhkMiwgMHg5MiwgMHgxMiwgMHgxOSwgMHhlZSwgMHhjMiwgMHg5MiwgMHgxMiwgMHgxOSwgCisgICAgMHhlZSwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHg3NCwgMHg4MCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg1NCwgCisgICAgMHgwMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxOSwgMHhiMiwgMHgwMCwgMHgwYywgCisgICAgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhlMSwgMHgyMiwgMHg3ZSwgMHg2OCwgMHgwYywgMHhiMSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHg1NSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNSwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgCisgICAgMHg5MywgMHg4MCwgMHgxYSwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgCisgICAgMHgwOCwgMHgzMCwgMHgwOSwgMHgwOSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHg4MCwgMHhmNywgMHgyZSwgMHgyNCwgMHgwMSwgCisgICAgMHgwMCwgMHhhNSwgMHhkOSwgMHhiNiwgMHg3ZSwgMHg2OCwgMHgwYywgMHhkNSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgCisgICAgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgCisgICAgMHhhMCwgMHg1NSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwYSwgCisgICAgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHgxYSwgMHg3ZSwgCisgICAgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgwOSwgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHg4MCwgMHhmNywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhiNiwgCisgICAgMHgzMCwgMHgwNCwgMHgwMywgMHgwMiwgMHgxNiwgMHg4YywgMHg3ZSwgMHg2OCwgMHgwYywgMHhmOSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgCisgICAgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwYSwgMHg3OCwgMHgzYywgCisgICAgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgCisgICAgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgCisgICAgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwYSwgMHg3OCwgMHgxNCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgCisgICAgMHgxMiwgMHgxYSwgMHg5MywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHhlNiwgMHg3ZSwgMHhhMCwgMHgwMiwgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgMHgwZCwgMHg0MSwgCisgICAgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgCisgICAgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMSwgCisgICAgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNSwgMHg3OCwgMHgzYywgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNSwgMHg3OCwgMHgxNCwgMHg3ZSwgMHg2OCwgCisgICAgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgCisgICAgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgCisgICAgMHgzMCwgMHgwOSwgMHhlNiwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgMHgwZCwgMHg4OSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgCisgICAgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg1MCwgMHhiZSwgMHhiMCwgMHg1MCwgMHg3OCwgMHgxZiwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgCisgICAgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg1MCwgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgCisgICAgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgwZiwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgCisgICAgMHhkOSwgMHhhMiwgMHg3ZSwgMHg2OCwgMHgwZCwgMHhkMSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgCisgICAgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgCisgICAgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHhhMCwgMHhiZSwgMHhiMCwgMHhhMCwgMHg3OCwgMHgxZiwgCisgICAgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHhhMCwgCisgICAgMHg3OCwgMHgwZCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHgyMCwgMHg3ZSwgCisgICAgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgwZiwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHgyZSwgCisgICAgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgMHgwMiwgMHgxOCwgMHgyYiwgMHg3ZSwgMHg2OCwgMHgwZCwgMHgxZCwgMHg3YSwgMHg2YywgMHgwMCwgCisgICAgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgCisgICAgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgCisgICAgMHgwNiwgMHg3OCwgMHgzYywgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgCisgICAgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgCisgICAgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwNiwgMHg3OCwgMHgxNCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgCisgICAgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHhlNiwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgCisgICAgMHg2OCwgMHgwZCwgMHg2NSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgCisgICAgMHgwOSwgMHgwYiwgMHgwMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwOSwgMHg3OCwgMHgzYywgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg3ZSwgMHhhMCwgMHgwMywgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg3ZSwgMHhhMCwgCisgICAgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHgwOSwgMHg3OCwgCisgICAgMHgxNCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgCisgICAgMHhhNSwgMHhkOSwgMHg5ZSwgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgCisgICAgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHhlNiwgMHg3ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgCisgICAgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHg3ZSwgMHg2OCwgMHgwZCwgMHhhZCwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgCisgICAgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg5MCwgMHhiZSwgMHhiMCwgMHg5MCwgMHg3OCwgMHgxZiwgMHg2YywgCisgICAgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxOCwgMHg1ZSwgMHhiMCwgMHg5MCwgMHg3OCwgCisgICAgMHgwZCwgMHg3ZSwgMHg2OCwgMHgwYSwgMHg4MiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHg4MCwgMHgyMCwgMHg3ZSwgMHg2OCwgCisgICAgMHgwYSwgMHg4YiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgwZiwgMHg3ZSwgCisgICAgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg4MCwgMHhmMSwgMHgyZSwgMHgyNCwgCisgICAgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhhMiwgMHgwMiwgMHgxOCwgMHhiNywgMHgzMCwgMHgxNywgMHgwMywgMHgwMiwgMHgxOSwgMHgzYiwgMHhjMiwgMHg4YSwgCisgICAgMHgxMiwgMHgxOSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHg2YywgMHhhYSwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgCisgICAgMHgxMiwgMHgxOSwgMHhlZSwgMHgwYiwgMHgwMCwgMHg3ZSwgMHhhMCwgMHgwOCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgyMCwgCisgICAgMHg4YiwgMHgzZSwgMHgyMCwgMHg4OSwgMHgzYiwgMHg3ZSwgMHhhMCwgMHgwOCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgwOSwgMHhhMiwgMHgwMCwgMHgxMCwgCisgICAgMHg0ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgzMCwgMHg4YiwgMHgyMywgMHgzMCwgMHg4OSwgMHgyMCwgCisgICAgMHgwOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHg1ZSwgMHhhMCwgMHhmZCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHg3ZSwgMHhhMCwgCisgICAgMHgwMCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgyMCwgMHg4YiwgMHgwNSwgMHgyMCwgMHg4OSwgMHgwMiwgMHg4MCwgMHgxYSwgCisgICAgMHgxMiwgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgxNCwgMHg3ZSwgMHhhMCwgMHgwMiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1ZSwgCisgICAgMHhhMCwgMHhmZCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlYywgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgCisgICAgMHg4OSwgMHgwMiwgMHgxOSwgMHgzYiwgMHgyMCwgMHgxNywgMHhmYSwgMHgxMiwgMHgxMywgMHg4YSwgMHgxMiwgMHgxOSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4MCwgCisgICAgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHgwYiwgMHgwMCwgMHgyMCwgMHg4OSwgMHgyNiwgMHg3ZSwgMHhhMCwgMHhmZiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgCisgICAgMHgxMiwgMHgxOSwgMHhlZSwgMHg3ZSwgMHhiMCwgMHg1NSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgzMCwgMHg4OSwgMHgwZiwgCisgICAgMHg3ZSwgMHhhMCwgMHgwMCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOSwgMHhlZSwgMHgyMCwgMHg4OSwgMHgwMiwgMHg4MCwgMHgyNiwgMHgxMiwgCisgICAgMHgxYSwgMHgwOCwgMHgzMCwgMHgwOSwgMHgyMCwgMHg3ZSwgMHhhMCwgMHhmZiwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxOSwgMHhlZSwgMHg3ZSwgCisgICAgMHhiMCwgMHg1NSwgMHgxOSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOSwgMHhlZSwgMHg3ZSwgMHhhMCwgMHgwMCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgwNCwgCisgICAgMHgxMiwgMHgxOSwgMHhlZSwgMHg4MCwgMHhlMCwgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhhOCwgMHgwMiwgMHgxOSwgMHgzYiwgMHg3ZSwgCisgICAgMHgyNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwOSwgMHg3ZSwgMHhhMCwgMHgwOCwgMHgxOSwgMHhhMiwgMHgwMCwgMHgxMCwgMHgxMiwgMHgxOSwgMHhlZSwgCisgICAgMHgyZSwgMHgyNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhkOSwgMHhlZiwgMHgyMiwgMHgzMCwgMHgwYSwgMHgxOSwgMHg3ZSwgMHg2OCwgMHgwZCwgMHhmNSwgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHhkMiwgMHgwOSwgMHgxMiwgMHgxOSwgMHhlZSwgMHgxMiwgMHgxOSwgMHhlZSwgMHgxMiwgMHgxOSwgCisgICAgMHhlZSwgMHgwMiwgMHgwZiwgMHgxMCwgMHgzMCwgMHgxNywgMHgxYywgMHg3ZSwgMHg2OCwgMHgwZSwgMHg2ZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgCisgICAgMHgxYSwgMHg5MywgMHg3ZSwgMHg2OCwgMHgwZSwgMHg5MSwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgxMiwgMHgxYiwgMHgzYywgCisgICAgMHgwMiwgMHgxOSwgMHhlNiwgMHgwYiwgMHgwMCwgMHg3ZSwgMHg3OCwgMHgxOSwgMHhhMCwgMHg3YSwgMHg3YywgMHgwMCwgMHhmZiwgMHg3ZiwgMHg2NywgMHg3YSwgCisgICAgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3MCwgMHgzZSwgMHg3ZSwgMHg3YiwgMHhiMCwgMHg3YSwgMHg2YiwgMHhiMCwgMHgwYiwgMHg3YywgMHgwYiwgMHg2YywgCisgICAgMHhhNSwgMHhkZiwgMHhmMywgMHg3ZSwgMHg3OCwgMHgxOSwgMHhhMCwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4OSwgMHg3OCwgMHg3ZSwgMHg3OCwgMHgwMCwgCisgICAgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHhmZSwgMHg3ZSwgMHg2OCwgMHg3ZiwgMHhiZiwgMHg3YSwgMHg2YywgMHgwMCwgMHhmZSwgMHg3NCwgMHhhYSwgMHgzOSwgCisgICAgMHhiNywgMHg1NSwgMHg1NSwgMHg3NCwgMHg1NSwgMHgzOSwgMHhiNywgMHgyYSwgMHhhYSwgMHg3NCwgMHhhMCwgMHgzOSwgMHhiNywgMHg1NSwgMHg1NSwgMHg2YywgCisgICAgMHg5OSwgMHg3YSwgMHg2YiwgMHg5MCwgMHg3ZSwgMHg1NCwgMHgyNywgMHgxMCwgMHg3ZSwgMHg2YiwgMHg4MCwgMHhiYywgMHg4OSwgMHg2OCwgMHgwOCwgMHgxYiwgCisgICAgMHg1NCwgMHg3OCwgMHhmNSwgMHg4YSwgMHhmZiwgMHgxOSwgMHhkZSwgMHg4YSwgMHhmZiwgMHgxOSwgMHhlNiwgMHgxMiwgMHgxYSwgMHgwOCwgMHg3ZSwgMHg2YiwgCisgICAgMHg4MCwgMHg4MCwgMHhmYiwgMHg3ZSwgMHgxMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg4NSwgMHg4MCwgMHhmOCwgMHhjYSwgMHhmOSwgMHg3ZSwgMHhmNCwgMHgwMCwgCisgICAgMHhmZiwgMHgxYiwgMHhmNCwgMHg3OCwgMHhmYywgMHhkYSwgMHhmOSwgMHgyMiwgMHhjYSwgMHhmOSwgMHg3ZSwgMHhmNCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmNCwgCisgICAgMHg3OCwgMHhmYywgMHhkYSwgMHhmOSwgMHgyMiwgMHgyMCwgMHgwOSwgMHgxOSwgMHhkMiwgMHgwYSwgMHgxMiwgMHgxOSwgMHhmYiwgMHhjMiwgMHg5NSwgMHhkMiwgCisgICAgMHg5NCwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHg0MywgMHg5MCwgMHgzMCwgCisgICAgMHgyMiwgMHhjYSwgMHgwYiwgMHg3ZSwgMHgxMCwgMHgwMywgMHg3YywgMHgzMCwgMHg2YywgMHgyMiwgMHgwYiwgMHgyMCwgMHg5ZSwgMHgzMCwgMHgwYSwgMHg1MCwgCisgICAgMHhmOSwgMHgyZSwgMHgzMCwgMHgwYiwgMHgxYiwgMHgyMCwgMHg2OCwgMHgxOCwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHg1MywgMHg5MCwgCisgICAgMHhjZiwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHg0MywgMHg5MCwgMHgzMCwgMHhhNSwgMHhkYSwgMHhlOCwgCisgICAgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxYiwgMHgzMCwgMHg2OCwgMHgxOSwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgCisgICAgMHhjMiwgMHg5NSwgMHhkMiwgMHg5NCwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHgxMiwgMHgxOSwgMHhmYiwgMHg0MywgMHg5MCwgMHgzMCwgCisgICAgMHhhNSwgMHhkYiwgMHhlNywgMHg3ZSwgMHgyMCwgMHgwYSwgMHgxMiwgMHgxOSwgMHhmYiwgMHhhNSwgMHhkYSwgMHhmYSwgMHhhNSwgMHhkOSwgMHhhNywgMHhkYSwgCisgICAgMHgwYiwgMHgyMiwgMHgyMCwgMHgwOSwgMHgwYSwgMHgxMiwgMHgxOSwgMHhmYiwgMHhiMiwgMHg5NCwgMHgxMiwgMHgxOSwgMHhmYiwgMHhiMiwgMHg5NCwgMHgyMiwgCisgICAgMHgzMCwgMHgxNywgMHgzMiwgMHgyMCwgMHgwOSwgMHgyZiwgMHhjYSwgMHgyYiwgMHhjYSwgMHg3YiwgMHg3ZSwgMHg3OCwgMHg4MCwgMHgwMCwgMHg3YSwgMHg3YywgCisgICAgMHgwMCwgMHhmZSwgMHgxMiwgMHgxYiwgMHgxYywgMHg3ZSwgMHg2YiwgMHhhMCwgMHg1YywgMHhhYSwgMHg2OCwgMHgxMCwgMHgyOSwgMHhiNywgMHgwMCwgMHgxNCwgCisgICAgMHg1NCwgMHg2MCwgMHg2OCwgMHhmOCwgMHgzOSwgMHhhNywgMHgwMCwgMHgwMCwgMHgwYiwgMHg2YywgMHg4MCwgMHhlOSwgMHgxMiwgMHgxOSwgMHhlZSwgMHhkMiwgCisgICAgMHhiNSwgMHhkYSwgMHg3YiwgMHhkYSwgMHgyYiwgMHgyMiwgMHgxMiwgMHgxYSwgMHhkNCwgMHg3ZSwgMHg2OCwgMHgwMCwgMHgwYiwgMHgxMiwgMHgxYSwgMHg5MywgCisgICAgMHgyMiwgMHhjYSwgMHg1OSwgMHhjYSwgMHg1YiwgMHg3ZSwgMHhiNCwgMHgwMCwgMHgwYiwgMHg3YywgMHhiOCwgMHhjNCwgMHgxMiwgMHgxYiwgMHgwNCwgMHg3YywgCisgICAgMHhiOCwgMHgxMiwgMHgxYiwgMHgwNCwgMHg3YywgMHhiOSwgMHhjNCwgMHgxMiwgMHgxYiwgMHgwNCwgMHg3YywgMHhiOSwgMHgxMiwgMHgxYiwgMHgwNCwgMHg3ZSwgCisgICAgMHhiMCwgMHg2OCwgMHg3YSwgMHhiOSwgMHhiMCwgMHgwYiwgMHhiNCwgMHg2YywgMHhiYiwgMHg3YSwgMHhiOSwgMHhiMCwgMHhkYSwgMHg1OSwgMHhkYSwgMHg1YiwgCisgICAgMHgyMiwgMHg1ZSwgMHhiMCwgMHgwZiwgMHg3YywgMHhhYiwgMHg5ZSwgMHhhMCwgMHgwYSwgMHg0MCwgMHgwNSwgMHgyZSwgMHhiMCwgMHgzNywgMHg4MCwgMHgwMywgCisgICAgMHgyZSwgMHhiMCwgMHgzMCwgMHg3YSwgMHhiOSwgMHhiMCwgMHgwYiwgMHhiNCwgMHgyMiwgMHhjMiwgMHhiNSwgMHhjMiwgMHg5MiwgMHgxMiwgMHgxOSwgMHhlZSwgCisgICAgMHg3NCwgMHg4MCwgMHgzOSwgMHhiNywgMHgwMCwgMHgwYywgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwNiwgMHgzOSwgMHhhNywgMHgwMCwgMHgwNCwgMHgzOSwgMHhiNywgCisgICAgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgzOSwgMHhiNywgMHgwMCwgMHgwYywgMHgyMiwgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgCisgICAgMHhmZiwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHgwMSwgMHg3ZiwgMHg2NSwgMHg3ZSwgMHg3NCwgMHgyMCwgMHgwMCwgMHgxMiwgCisgICAgMHgwOCwgMHhkNiwgMHg0MCwgMHg1NCwgMHg3ZSwgMHg3OCwgMHg3YywgMHgwMCwgMHg3YSwgMHg3YywgMHgwMCwgMHhmZiwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgCisgICAgMHg3YSwgMHg1YywgMHgwMCwgMHgwMSwgMHg3ZSwgMHg2OCwgMHg3YywgMHgwMCwgMHg3YSwgMHg2YywgMHgwMCwgMHgwMSwgMHg3ZSwgMHg3NCwgMHgwNCwgMHgwMCwgCisgICAgMHgxMiwgMHgwOCwgMHhkNiwgMHg0MCwgMHgzMywgMHg3NCwgMHg4MCwgMHgxMiwgMHgxYiwgMHhiMSwgMHg0MCwgMHgyYywgMHg1MywgMHg5MCwgMHhjZiwgMHhkMiwgCisgICAgMHgwOCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwOCwgMHg3ZSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4NCwgMHhhNSwgMHhkYiwgMHhmYywgMHhhNSwgMHhkYSwgMHhmOSwgCisgICAgMHhhNSwgMHhkOSwgMHhmNiwgMHg3NCwgMHg0MCwgMHgxMiwgMHgxYiwgMHhiMSwgMHg0MCwgMHgwZSwgMHg3ZSwgMHg2OCwgMHgwZSwgMHhjMCwgMHg3YSwgMHg2YywgCisgICAgMHgwMCwgMHhmZiwgMHgxMiwgMHgxYSwgMHg5MywgMHgwMiwgMHgxOSwgMHhlNiwgMHhjMiwgMHg5NSwgMHhkMiwgMHg5NCwgMHg4MCwgMHhmZSwgMHhmNSwgMHgwYSwgCisgICAgMHg3ZSwgMHg3OCwgMHgwMCwgMHgwYSwgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg2OCwgMHg3ZiwgMHhiZiwgMHg3YSwgMHg2YywgMHgwMCwgMHgwMSwgCisgICAgMHg3ZSwgMHg3NCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwOCwgMHhkNiwgCit9OworCitzdGF0aWMgc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIElNQUdFX1ZFUlNJT05fTkFNRSA9IHsKKwkxLCAxMiwgMiB9OwkJLy8gTWFqb3IsIE1pbm9yLCBCdWlsZAorCisjdW5kZWYgSU1BR0VfVkVSU0lPTl9OQU1FCisKKyN1bmRlZiBJTUFHRV9BUlJBWV9OQU1FCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290Mi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Jvb3QyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjM2EzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290Mi5oCkBAIC0wLDAgKzEsNTQ2IEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyogRWRnZXBvcnQvNCBCaW5hcnkgSW1hZ2UKKy8vKiBHZW5lcmF0ZWQgYnkgSEVYMkMgdjEuMDYKKy8vKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8qCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8vSW1hZ2Ugc3RydWN0dXJlIGRlZmluaXRpb24KKyNpZiAhZGVmaW5lZChERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JEKQorI2RlZmluZSBERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JECisJc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkIHsKKwkJX19sZTE2IEV4dEFkZHI7CisJCV9fbGUxNiBBZGRyOworCQlfX2xlMTYgTGVuOworCQl1bnNpZ25lZCBjaGFyICBEYXRhWzBdOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisJc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIHsKKwkJdW5zaWduZWQgY2hhcgkgTWFqb3JWZXJzaW9uOworCQl1bnNpZ25lZCBjaGFyICBNaW5vclZlcnNpb247CisJCXVuc2lnbmVkIHNob3J0IEJ1aWxkTnVtYmVyOworCX07CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSU1BR0VfQVJSQVlfTkFNRSkKKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQkJRmlybXdhcmVJbWFnZQorI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJRmlybXdhcmVJbWFnZVZlcnNpb24KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBJTUFHRV9BUlJBWV9OQU1FW10gPSB7CisKKy8vIFNlZ21lbnQgIzEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMDAsIExlbmd0aCA2CisweGZmLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAzLCAKKworLy8gU2VnbWVudCAjMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDBiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MGIsIAorCisvLyBTZWdtZW50ICMzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDEzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMiwgMHg1NiwgCisKKy8vIFNlZ21lbnQgIzQsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMWIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDFiLCAKKworLy8gU2VnbWVudCAjNSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDIzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MjMsIAorCisvLyBTZWdtZW50ICM2LCBTdGFydCBBZGRyZXNzIDAwZmYwMDJiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MmIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyYiwgCisKKy8vIFNlZ21lbnQgIzcsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMzMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDMzLCAKKworLy8gU2VnbWVudCAjOCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAzYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDNiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4M2IsIAorCisvLyBTZWdtZW50ICM5LCBTdGFydCBBZGRyZXNzIDAwZmYwMDQzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NDMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg0MywgCisKKy8vIFNlZ21lbnQgIzEwLCBTdGFydCBBZGRyZXNzIDAwZmYwMDRiLCBMZW5ndGggMworMHhmZiwweDAwLDB4NGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg0YiwgCisKKy8vIFNlZ21lbnQgIzExLCBTdGFydCBBZGRyZXNzIDAwZmYwMDUzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMSwgMHhmNSwgCisKKy8vIFNlZ21lbnQgIzEyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDdiLCBMZW5ndGggMworMHhmZiwweDAwLDB4N2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg3YiwgCisKKy8vIFNlZ21lbnQgIzEzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDgwLCBMZW5ndGggNTM0CisweGZmLDB4MDAsMHg4MCwweDAwLDB4MTYsMHgwMiwKKyAgICAweDdlLCAweGIzLCAweDkxLCAweDAxLCAweDIwLCAweGUzLCAweDBjLCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDU0LCAweGZlLCAweDdhLCAweGIzLCAweDNmLCAKKyAgICAweGYyLCAweDgwLCAweDBhLCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDQ0LCAweDAxLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDc0LCAweDAwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDdlLCAweGY4LCAweDAwLCAweDI0LCAweDdlLCAweDAwLCAweDAxLCAKKyAgICAweDdlLCAweDEwLCAweDAwLCAweDEyLCAweDA5LCAweGQwLCAweDY5LCAweDIwLCAweDAwLCAweDBhLCAweDVlLCAweDQwLCAweDFmLCAweGJlLCAweDI0LCAweDAwLCAKKyAgICAweDAwLCAweDc4LCAweDA5LCAweDdlLCAweDAwLCAweDAzLCAweDdhLCAweDAzLCAweDkwLCAweDAwLCAweDgwLCAweDA3LCAweDdlLCAweDAwLCAweDAyLCAweDdhLCAKKyAgICAweDAzLCAweDkwLCAweDAwLCAweDc1LCAweGIwLCAweGRmLCAweDdlLCAweDAwLCAweDAxLCAweDdhLCAweDAzLCAweDk0LCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAKKyAgICAweDI0LCAweDdlLCAweDAwLCAweDAxLCAweDdhLCAweDAzLCAweDkzLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweGE1LCAweGQ4LCAweGZkLCAweDc1LCAweGE4LCAKKyAgICAweDAwLCAweDc1LCAweGIxLCAweDAwLCAweGNhLCAweDI5LCAweDEyLCAweDBjLCAweDY2LCAweDEyLCAweDBjLCAweDM3LCAweGY1LCAweDIxLCAweDdhLCAweGExLCAKKyAgICAweDIwLCAweDIwLCAweDA5LCAweDA4LCAweDIwLCAweDBhLCAweDBhLCAweDdlLCAweGIwLCAweDBjLCAweDgwLCAweDA4LCAweDdlLCAweGIwLCAweDAwLCAweDgwLCAKKyAgICAweDAzLCAweDdlLCAweGIwLCAweDA4LCAweDdhLCAweGIzLCAweDkyLCAweDAwLCAweDEyLCAweDAyLCAweDk2LCAweGRhLCAweDI5LCAweDc0LCAweDEwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAxLCAweDdlLCAweDIwLCAweDA0LCAweDdjLCAweGIyLCAweGMyLCAweGQ3LCAweDEzLCAweDEzLCAweDEzLCAweDEzLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDAwLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDEwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDAyLCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweGE1LCAweGRhLCAweGRmLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAKKyAgICAweDM0LCAweDdhLCAweGIzLCAweDkxLCAweDEzLCAweDc0LCAweDNmLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDA2LCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDQ0LCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDA3LCAweDc0LCAweGVmLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDc0LCAweDA3LCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAKKyAgICAweGIzLCAweDkxLCAweDA3LCAweDdhLCAweGIxLCAweDBhLCAweDc1LCAweDA5LCAweDAxLCAweGQyLCAweGFhLCAweGQyLCAweGFmLCAweGU0LCAweDdlLCAweDYwLCAKKyAgICAweDAyLCAweDRkLCAweDIyLCAweDc4LCAweDAzLCAweDdlLCAweDYwLCAweDAzLCAweDdjLCAweDc2LCAweDdlLCAweDA0LCAweDI4LCAweDAwLCAweDhkLCAweGVmLCAKKyAgICAweDFiLCAweDA0LCAweDc4LCAweGZhLCAweDA0LCAweDdlLCAweDIwLCAweDA3LCAweDdhLCAweDIzLCAweDkxLCAweDA2LCAweDdlLCAweDIzLCAweDkxLCAweDA3LCAKKyAgICAweDdlLCAweDMxLCAweDBhLCAweGJjLCAweDMyLCAweDY4LCAweDIyLCAweDdhLCAweDIxLCAweDBhLCAweDdlLCAweDIxLCAweDA5LCAweDY4LCAweDE3LCAweGNhLCAKKyAgICAweGI4LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAweGIzLCAweDkxLCAweDA3LCAweDQ0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDA3LCAweGRhLCAweGI4LCAweDc1LCAweDA5LCAweDAwLCAweDMwLCAweGUwLCAweGMxLCAweDZjLCAweDY3LCAweDdhLCAweDYzLCAweDkwLCAweDAwLCAweDgwLCAKKyAgICAweGI5LCAweGJlLCAweGIwLCAweDAyLCAweDIyLCAweGMwLCAweGQwLCAweDc1LCAweDA4LCAweGZlLCAweDEyLCAweDBhLCAweGMwLCAweDc0LCAweDAyLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAKKyAgICAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDMwLCAKKyAgICAweGUwLCAweDA4LCAweDc0LCAweDE4LCAweDdhLCAweGIzLCAweDkxLCAweDAxLCAweDgwLCAweDA2LCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDAxLCAKKyAgICAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDAyLCAweDAyLCAweDM2LCAweDc1LCAweDA4LCAweGZmLCAweDEyLCAweDBhLCAweGMwLCAweDc0LCAKKyAgICAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAweGIzLCAweDkxLCAweDA3LCAweDU0LCAKKyAgICAweGZjLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDMyLCAweGNhLCAweGI4LCAweDc1LCAweDA4LCAweDAyLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAKKyAgICAweDkxLCAweDAzLCAweDIwLCAweGU1LCAweDA4LCAweDMwLCAweGUwLCAweDJiLCAweDEyLCAweDAyLCAweDllLCAweDgwLCAweGYxLCAweDdlLCAweGIzLCAweDkxLCAKKyAgICAweDA0LCAweDMwLCAweGUwLCAweDA1LCAweGRhLCAweGI4LCAweDAyLCAweDAyLCAweDM5LCAweDMwLCAweGUxLCAweDA1LCAweGRhLCAweGI4LCAweDAyLCAweDAxLCAKKyAgICAweGY1LCAweDMwLCAweGU2LCAweDA1LCAweDEyLCAweDA0LCAweDAzLCAweDgwLCAweGQ1LCAweDMwLCAweGUyLCAweDA1LCAweGRhLCAweGI4LCAweDAyLCAweDAwLCAKKyAgICAweDgwLCAweDgwLCAweGNiLCAweGRhLCAweGI4LCAweDMyLCAKKworLy8gU2VnbWVudCAjMTQsIEVYQ0xVREVEIFN0YXJ0IEFkZHJlc3MgMDBmZjMxZDcsIExlbmd0aCAxCisKKworLy8gU2VnbWVudCAjMTUsIFN0YXJ0IEFkZHJlc3MgMDBmZjAyOTYsIExlbmd0aCAyMDkwCisweGZmLDB4MDAsMHg5NiwweDAyLDB4MmEsMHgwOCwKKyAgICAweGU0LCAweDdhLCAweGIzLCAweDNmLCAweGYxLCAweDAyLCAweDAzLCAweDQxLCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAweGNhLCAweDNiLCAKKyAgICAweGNhLCAweDRiLCAweGNhLCAweDViLCAweGNhLCAweDZiLCAweGNhLCAweDdiLCAweGNhLCAweGViLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDJlLCAweGI0LCAweDAwLCAweDAyLCAweDgwLCAweDFjLCAweGI0LCAweDAxLCAweDE5LCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAKKyAgICAweDU0LCAweDE0LCAweDY4LCAweDA1LCAweDEyLCAweDAzLCAweDA1LCAweDgwLCAweDIzLCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDMwLCAweGU1LCAweDFjLCAKKyAgICAweDEyLCAweDA0LCAweDQzLCAweDgwLCAweDE3LCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDMwLCAweGU1LCAweDA1LCAweDEyLCAweDA0LCAweDQzLCAweDgwLCAKKyAgICAweDBiLCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDU0LCAweDE0LCAweDY4LCAweDAzLCAweDEyLCAweDAzLCAweDA1LCAweGRhLCAweGViLCAweGRhLCAweDdiLCAKKyAgICAweGRhLCAweDZiLCAweGRhLCAweDViLCAweGRhLCAweDRiLCAweGRhLCAweDNiLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweDIwLCAKKyAgICAweGU0LCAweDE5LCAweDc1LCAweDA4LCAweDBhLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDJkLCAweDcwLCAweDBhLCAweDdlLCAweGIzLCAKKyAgICAweDAxLCAweDJlLCAweGI0LCAweDAxLCAweDFmLCAweDAyLCAweDAzLCAweDlkLCAweDAyLCAweDA5LCAweDhiLCAweDc1LCAweDA4LCAweDBiLCAweDEyLCAweDBhLCAKKyAgICAweGMwLCAweDc0LCAweDE0LCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDdlLCAweGIzLCAweDAxLCAweDJlLCAweGI0LCAweDAyLCAweDBjLCAweDEyLCAweDAzLCAKKyAgICAweDRkLCAweDAyLCAweDAzLCAweDQxLCAweDc0LCAweDA0LCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDIyLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAKKyAgICAweDAxLCAweDJlLCAweDdhLCAweDAzLCAweDAxLCAweDJmLCAweDIyLCAweDdlLCAweGIzLCAweDAxLCAweDI1LCAweDU0LCAweDYwLCAweDYwLCAweDA1LCAweGI0LCAKKyAgICAweDQwLCAweDFlLCAweDgwLCAweDFjLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDA1LCAweDE1LCAweDc1LCAweDA4LCAweDcxLCAweDEyLCAweDBhLCAKKyAgICAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDdlLCAweGEwLCAweDAxLCAweDdhLCAweGEzLCAweDkxLCAweDA2LCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAKKyAgICAweDIyLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDIyLCAweGJlLCAweDU3LCAKKyAgICAweDAxLCAweDJiLCAweDI4LCAweDA0LCAweDdlLCAweDU3LCAweDAxLCAweDJiLCAweDdhLCAweDBmLCAweDAxLCAweDMxLCAweDdhLCAweDU3LCAweDAxLCAweDM1LCAKKyAgICAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDIyLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDkxLCAKKyAgICAweDFhLCAweDcwLCAweDUzLCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDIwLCAweGU0LCAweDRjLCAweDdlLCAweGVmLCAweDAxLCAweDMxLCAweDdlLCAweGY3LCAKKyAgICAweDAxLCAweDM1LCAweDdlLCAweDA3LCAweDAxLCAweDM1LCAweDRkLCAweDAwLCAweDY4LCAweDIxLCAweDdlLCAweDAwLCAweDAwLCAweGUwLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDE3LCAweGEzLCAweGE1LCAweDA4LCAweDFiLCAweGY0LCAweDY4LCAweDA2LCAweGE1LCAweGI4LCAweDEwLCAweGYwLCAweDgwLCAweDE5LCAweDdlLCAKKyAgICAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDAxLCAweDJlLCAweGJlLCAweDAwLCAweDEwLCAweDY4LCAweDBkLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAKKyAgICAweDAxLCAweDJlLCAweDc0LCAweDgwLCAweDdhLCAweGIzLCAweDkxLCAweDFlLCAweDdhLCAweGVmLCAweDAxLCAweDMxLCAweDdhLCAweGY3LCAweDAxLCAweDM1LCAKKyAgICAweDc1LCAweDA4LCAweDA2LCAweDEyLCAweDBhLCAweGMwLCAweDc0LCAweDA0LCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDIyLCAweGNhLCAweDBiLCAweGNhLCAKKyAgICAweDFiLCAweGNhLCAweDJiLCAweGNhLCAweDNiLCAweGNhLCAweDRiLCAweGNhLCAweDViLCAweGNhLCAweDZiLCAweGNhLCAweDdiLCAweGNhLCAweGViLCAweDc1LCAKKyAgICAweDA4LCAweDAzLCAweDEyLCAweDBhLCAweGMwLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDAxLCAweDJkLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDAwLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDEyLCAweDA0LCAweGIyLCAweGRhLCAweGViLCAweGRhLCAweDdiLCAweGRhLCAweDZiLCAKKyAgICAweGRhLCAweDViLCAweGRhLCAweDRiLCAweGRhLCAweDNiLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweDc1LCAweDA4LCAweDAzLCAKKyAgICAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDJmLCAweGI0LCAweDAyLCAweDExLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDAxLCAweDJmLCAKKyAgICAweDdhLCAweGIzLCAweDAxLCAweDJlLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDIyLCAweGI0LCAweDAxLCAweDQ2LCAweDdlLCAweGIzLCAKKyAgICAweDkxLCAweDA0LCAweDIwLCAweGU2LCAweDQyLCAweDdlLCAweDIzLCAweDkxLCAweDFhLCAweDdjLCAweDMyLCAweDdlLCAweDEzLCAweDAxLCAweDMwLCAweDJjLCAKKyAgICAweDIxLCAweDdhLCAweDIzLCAweDAxLCAweDMwLCAweDdlLCAweDAwLCAweDAwLCAweDJlLCAweDA0LCAweDAxLCAweDM3LCAweDdlLCAweGIzLCAweDkxLCAweDE2LCAKKyAgICAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweGE1LCAweGRiLCAweGY0LCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDc1LCAweDA4LCAKKyAgICAweDcwLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDMwLCAweDdlLCAweGEzLCAweDAxLCAweDJjLCAweGJjLCAweGFiLCAweDc4LCAweDAzLCAKKyAgICAweDEyLCAweDA1LCAweDUyLCAweDIyLCAweDAyLCAweDA5LCAweDhiLCAweGRhLCAweDU5LCAweDAyLCAweDA0LCAweDE1LCAweDc0LCAweGUwLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDAwLCAweDdlLCAweDAzLCAweDkxLCAweDEwLCAweDdlLCAweDEzLCAweDkxLCAweDExLCAweDdlLCAweDMzLCAweDkxLCAweDEyLCAweDdlLCAweDIzLCAKKyAgICAweDkxLCAweDEzLCAweDdlLCAweDUzLCAweDkxLCAweDE0LCAweDdlLCAweDQzLCAweDkxLCAweDE1LCAweDdlLCAweDczLCAweDkxLCAweDE2LCAweDdlLCAweDYzLCAKKyAgICAweDkxLCAweDE3LCAweDdhLCAweDBmLCAweDAxLCAweDI1LCAweDdhLCAweDFmLCAweDAxLCAweDI5LCAweDc1LCAweDA4LCAweDA0LCAweDEyLCAweDBhLCAweGMwLCAKKyAgICAweDdhLCAweDAxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDExLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDIxLCAweDA4LCAweDEyLCAKKyAgICAweDBhLCAweGMwLCAweDdhLCAweDMxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDQxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDUxLCAKKyAgICAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDYxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDcxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAKKyAgICAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDEyLCAweDA1LCAweDI2LCAweDIyLCAKKyAgICAweDZkLCAweDAwLCAweDdlLCAweDE0LCAweDAxLCAweDAyLCAweDdhLCAweDA3LCAweDAxLCAweDM1LCAweDdhLCAweDAzLCAweDAxLCAweDMwLCAweDdlLCAweGIzLCAKKyAgICAweDAxLCAweDI1LCAweDIwLCAweGU3LCAweDBmLCAweDdhLCAweDIzLCAweDAxLCAweDJmLCAweDdhLCAweDMzLCAweDAxLCAweDJlLCAweGJlLCAweDA3LCAweDAxLCAKKyAgICAweDJiLCAweDY4LCAweDA5LCAweDIyLCAweDdhLCAweDMzLCAweDAxLCAweDJmLCAweDdhLCAweDIzLCAweDAxLCAweDJlLCAweDdlLCAweGIzLCAweDAxLCAweDI1LCAKKyAgICAweDU0LCAweGUzLCAweDIzLCAweDIzLCAweDMwLCAweGUwLCAweDAyLCAweGQyLCAweGU1LCAweDMwLCAweGU3LCAweDAyLCAweGQyLCAweGU0LCAweDMwLCAweGU1LCAKKyAgICAweDA2LCAweDMwLCAweGU0LCAweDAzLCAweDAyLCAweDA5LCAweDhiLCAweDU0LCAweDNlLCAweGY1LCAweGYwLCAweDAzLCAweDU0LCAweDFmLCAweGMzLCAweDI1LCAKKyAgICAweGYwLCAweDkwLCAweDA1LCAweDdlLCAweDc1LCAweDg0LCAweGZmLCAweDczLCAweDAyLCAweDA3LCAweDM5LCAweDAyLCAweDA1LCAweGM2LCAweDAyLCAweDA3LCAKKyAgICAweGQyLCAweDAyLCAweDA3LCAweGVkLCAweDAyLCAweDA2LCAweGQwLCAweDAyLCAweDA2LCAweDViLCAweDAyLCAweDA4LCAweDFlLCAweDAyLCAweDA4LCAweDFlLCAKKyAgICAweDAyLCAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDIxLCAweDAyLCAKKyAgICAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDIxLCAweDAyLCAweDA4LCAweDI3LCAweDAyLCAweDA4LCAweGY5LCAweDAyLCAweDA4LCAKKyAgICAweDI0LCAweDAyLCAweDA4LCAweDI0LCAweDAyLCAweDA4LCAweDI0LCAweDAyLCAweDA4LCAweDI0LCAweDAyLCAweDA4LCAweDI0LCAweDAyLCAweDA4LCAweDI0LCAKKyAgICAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAKKyAgICAweGI0LCAweDA2LCAweDJhLCAweDdlLCAweGIzLCAweDAxLCAweDI3LCAweDYwLCAweDc5LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDAxLCAweDI4LCAweDdlLCAKKyAgICAweDE3LCAweDAxLCAweDI5LCAweDc1LCAweDA4LCAweDcyLCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDAxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAKKyAgICAweDExLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDEyLCAweDA5LCAweGQwLCAweDQwLCAweDU4LCAweDAyLCAweDAzLCAweDg0LCAweGI0LCAweDA4LCAweDFjLCAKKyAgICAweDc1LCAweDA4LCAweDc0LCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDNmLCAweGYxLCAweDdlLCAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAKKyAgICAweDAwLCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDdlLCAweDU0LCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDg0LCAweGI0LCAweDAwLCAweDMzLCAweDc1LCAKKyAgICAweDA4LCAweDc1LCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAweDBiLCAweDdlLCAKKyAgICAweGIzLCAweDNmLCAweGYyLCAweDMwLCAweGUwLCAweDA3LCAweDc0LCAweDAyLCAweDdhLCAweDBiLCAweGIwLCAweDgwLCAweDA1LCAweDc0LCAweDAwLCAweDdhLCAKKyAgICAweDBiLCAweGIwLCAweDBiLCAweDE0LCAweDc0LCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDdlLCAweDU0LCAweDAwLCAweDAyLCAweGRhLCAweDBiLCAweDAyLCAKKyAgICAweDAzLCAweDg0LCAweDAyLCAweDA5LCAweDhiLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDFjLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDAwLCAweDVmLCAweDc1LCAweDA4LCAweDc2LCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAKKyAgICAweDAxLCAweDJhLCAweDU0LCAweDBmLCAweGI0LCAweDAyLCAweDA1LCAweDdlLCAweGIwLCAweDYwLCAweDgwLCAweDE3LCAweGI0LCAweDAwLCAweDA1LCAweDdlLCAKKyAgICAweGIwLCAweDAwLCAweDgwLCAweDBmLCAweDdlLCAweGIzLCAweDAxLCAweDJhLCAweDIwLCAweGU3LCAweDA1LCAweDdlLCAweGIwLCAweDQwLCAweDgwLCAweDAzLCAKKyAgICAweDdlLCAweGIwLCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDkxLCAweDExLCAweDMwLCAweGUwLCAweDA0LCAweDc0LCAweDAxLCAKKyAgICAweDgwLCAweDAyLCAweDc0LCAweDAwLCAweDdlLCAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAweDBiLCAweDdhLCAweDBiLCAKKyAgICAweGIwLCAweDBiLCAweDE0LCAweDc0LCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweDU0LCAKKyAgICAweDAwLCAweDAyLCAweGRhLCAweDBiLCAweDAyLCAweDAzLCAweDg0LCAweDAyLCAweDA5LCAweDhiLCAweDdlLCAweGIzLCAweDAxLCAweDJhLCAweDU0LCAweDBmLCAKKyAgICAweGI0LCAweDAyLCAweDA1LCAweDdlLCAweGIwLCAweDYwLCAweDgwLCAweDE3LCAweGI0LCAweDAwLCAweDA1LCAweDdlLCAweGIwLCAweDAwLCAweDgwLCAweDBmLCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDJhLCAweDIwLCAweGU3LCAweDA1LCAweDdlLCAweGIwLCAweDQwLCAweDgwLCAweDAzLCAweDdlLCAweGIwLCAweDIwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweGI0LCAweDAwLCAweDI2LCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDAxLCAKKyAgICAweDBlLCAweDc1LCAweDA4LCAweDc3LCAweDEyLCAweDBhLCAweGMwLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDgwLCAweDFiLCAweGI0LCAKKyAgICAweDAzLCAweDBlLCAweDc1LCAweDA4LCAweDc4LCAweDEyLCAweDBhLCAweGMwLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDExLCAweDgwLCAweDBhLCAKKyAgICAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDEyLCAweDA5LCAweDhiLCAweDIyLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAKKyAgICAweDAyLCAweDAzLCAweDc3LCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDA5LCAweDFmLCAweDc1LCAweDA4LCAweDc5LCAweDEyLCAweDBhLCAweGMwLCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweGJlLCAweGIzLCAweDNmLCAweGYxLCAweDY4LCAweDBkLCAweGNhLCAweGI4LCAweDEyLCAweDAxLCAweGYxLCAweGRhLCAKKyAgICAweGI4LCAweDUwLCAweDc2LCAweDdhLCAweGIzLCAweDNmLCAweGYxLCAweDgwLCAweDZkLCAweGI0LCAweDA1LCAweDA4LCAweDc1LCAweDA4LCAweDdhLCAweDEyLCAKKyAgICAweDBhLCAweGMwLCAweDgwLCAweDYyLCAweGI0LCAweDAzLCAweDE5LCAweDc1LCAweDA4LCAweDdiLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAKKyAgICAweDI4LCAweGI0LCAweDAxLCAweDU1LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDQ0LCAweDAxLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAweDQ2LCAKKyAgICAweGI0LCAweDAxLCAweDE5LCAweDc1LCAweDA4LCAweDdjLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweGI0LCAweDAxLCAweDM5LCAKKyAgICAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDU0LCAweGZlLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAweDJhLCAweGI0LCAweDA3LCAweDJhLCAweDdlLCAKKyAgICAweGIzLCAweDAxLCAweDI3LCAweDYwLCAweDI0LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDAxLCAweDI4LCAweDdlLCAweDE3LCAweDAxLCAweDI5LCAweDc1LCAKKyAgICAweDA4LCAweDczLCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDAxLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDExLCAweDA4LCAweDEyLCAweDBhLCAKKyAgICAweGMwLCAweDEyLCAweDBhLCAweDBhLCAweDQwLCAweDAzLCAweDAyLCAweDAzLCAweDc3LCAweDAyLCAweDA5LCAweDhiLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAKKyAgICAweGI0LCAweDBiLCAweGY2LCAweDc1LCAweDA4LCAweDdkLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDdlLCAweGEzLCAweDAxLCAKKyAgICAweDJhLCAweDRjLCAweGFiLCAweDc4LCAweGU0LCAweDgwLCAweGRmLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDFjLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDBhLCAweGNmLCAweDc1LCAweDA4LCAweDdlLCAweDEyLCAweDBhLCAweGMwLCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDcwLCAweGMzLCAweDdlLCAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdhLCAweDBiLCAKKyAgICAweGIwLCAweDdlLCAweDU0LCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDg0LCAweDAyLCAweDA5LCAweDhiLCAweDAyLCAweDA5LCAweDhiLCAweDAyLCAweDA5LCAKKyAgICAweDhiLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDA0LCAweDIwLCAweDc1LCAweDA4LCAweGMzLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweDA0LCAKKyAgICAweDAwLCAweDAxLCAweDdlLCAweDE3LCAweDAxLCAweDI3LCAweDdlLCAweDE4LCAweDAxLCAweDM3LCAweDdhLCAweDFjLCAweDAwLCAweDAwLCAweDdlLCAweDQ3LCAKKyAgICAweDAxLCAweDJiLCAweDEyLCAweDBhLCAweGNjLCAweDAyLCAweDA4LCAweGYzLCAweGI0LCAweDA2LCAweDQyLCAweDc1LCAweDA4LCAweGMxLCAweDEyLCAweDBhLCAKKyAgICAweGMwLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdkLCAweGNhLCAweDdlLCAweGQ3LCAweDAxLCAweDI3LCAweDdlLCAKKyAgICAweDc4LCAweDAxLCAweDM3LCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDc3LCAweDAxLCAweDJiLCAweDc1LCAweDA4LCAweGMxLCAweDEyLCAweDBhLCAKKyAgICAweGMwLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDEyLCAweDBiLCAweDYzLCAweDdlLCAKKyAgICAweDQzLCAweDAxLCAweDI0LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweDQwLCAweDY1LCAweDgwLCAweDYwLCAweGI0LCAweDAwLCAweDI0LCAKKyAgICAweGMyLCAweGFmLCAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDk0LCAweDAwLCAweDdhLCAweGIzLCAweDAxLCAweDI0LCAweDEyLCAweDAzLCAweDc3LCAKKyAgICAweGU0LCAweDhkLCAweGVmLCAweDhkLCAweGVmLCAweDhkLCAweGVmLCAweGQ1LCAweGUwLCAweGY3LCAweGMwLCAweGQxLCAweGNhLCAweDAyLCAweGZmLCAweGNhLCAKKyAgICAweDA2LCAweDAwLCAweDAwLCAweDMyLCAweGI0LCAweDA5LCAweDIwLCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAweDIzLCAweDkxLCAKKyAgICAweDA3LCAweDdlLCAweDU3LCAweDAxLCAweDI3LCAweDRkLCAweDU1LCAweDY4LCAweDA1LCAweDRlLCAweDIwLCAweDAyLCAweDgwLCAweDAzLCAweDVlLCAweDIwLCAKKyAgICAweGZkLCAweDdhLCAweDIzLCAweDkxLCAweDA3LCAweDgwLCAweDE2LCAweGI0LCAweDA3LCAweDE2LCAweGMyLCAweGFmLCAweDdlLCAweDA3LCAweDAxLCAweDI5LCAKKyAgICAweDdlLCAweDE3LCAweDAxLCAweDI3LCAweGMwLCAweGQxLCAweGNhLCAweDE4LCAweGNhLCAweDM4LCAweGNhLCAweDI4LCAweDMyLCAweDAyLCAweDAzLCAweDc3LCAKKyAgICAweDAyLCAweDA5LCAweDhiLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDdlLCAKKyAgICAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDAzLCAweDE1LCAweDc1LCAweDA4LCAweGMyLCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweDA0LCAweDAwLCAweDAxLCAKKyAgICAweDdlLCAweDE3LCAweDAxLCAweDI3LCAweDdlLCAweDU3LCAweDAxLCAweDJiLCAweDAyLCAweDAzLCAweDg0LCAweGI0LCAweDA1LCAweDQxLCAweDc1LCAweDA4LCAKKyAgICAweGMwLCAweDEyLCAweDBhLCAweGMwLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDdlLCAKKyAgICAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdlLCAweDM3LCAweDAxLCAweDI3LCAweDdlLCAKKyAgICAweDQ3LCAweDAxLCAweDJiLCAweDEyLCAweDBhLCAweGNjLCAweDdlLCAweDQzLCAweDAxLCAweDI0LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAKKyAgICAweDdlLCAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDU3LCAweDAxLCAweDJiLCAweDAyLCAweDAzLCAweDg0LCAweGI0LCAKKyAgICAweDAxLCAweDIwLCAweDdlLCAweDAwLCAweDAwLCAweDdlLCAweDEwLCAweDAxLCAweDc1LCAweDA4LCAweDcyLCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDAxLCAKKyAgICAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDdhLCAweDExLCAweDA4LCAweDEyLCAweDBhLCAweGMwLCAweDEyLCAweDA5LCAweGQwLCAweDQwLCAweDAzLCAweDAyLCAKKyAgICAweDAzLCAweDg0LCAweDAyLCAweDA5LCAweDhiLCAweDc1LCAweDA4LCAweDA3LCAweDEyLCAweDBhLCAweGMwLCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAweGIzLCAKKyAgICAweDkwLCAweDAwLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDE1LCAweDc0LCAweDAxLCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDExLCAweDdlLCAweGIzLCAweDkxLCAweDE1LCAweDU0LCAweDYwLCAweGJlLCAweGIwLCAweDQwLCAweDY4LCAweDA4LCAweDc0LCAKKyAgICAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDE1LCAweDgwLCAweGVkLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDc0LCAweDA0LCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDE0LCAweDc0LCAweGZmLCAweDdhLCAweGIzLCAweDAxLCAweDJkLCAweDIyLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAKKyAgICAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDEyLCAweDBhLCAweDU3LCAweDQwLCAweDFmLCAweDdlLCAweDA4LCAweDAxLCAweDM3LCAweDdhLCAweDBjLCAKKyAgICAweDAwLCAweDAwLCAweGNhLCAweDBiLCAweGNhLCAweDQ5LCAweDEyLCAweDBhLCAweGNjLCAweGRhLCAweDU5LCAweGRhLCAweDBiLCAweDdlLCAweDQzLCAweDAxLCAKKyAgICAweDI0LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAweDdlLCAweDQzLCAweDAxLCAweDI0LCAweDdhLCAweDQzLCAweDk0LCAKKyAgICAweDAwLCAweGQwLCAweGE4LCAweDIyLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDEyLCAKKyAgICAweDBhLCAweDU3LCAweDQwLCAweDMxLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdmLCAweDYxLCAweDdlLCAweDc4LCAKKyAgICAweDAxLCAweDM3LCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDc3LCAweDAxLCAweDJiLCAweGJkLCAweDc0LCAweDc4LCAweDE3LCAweDc1LCAweDA4LCAKKyAgICAweGMxLCAweDEyLCAweDBhLCAweGMwLCAweDEyLCAweDBiLCAweDYzLCAweDQwLCAweDBjLCAweDdlLCAweDQzLCAweDAxLCAweDI0LCAweDdhLCAweDQzLCAweDk0LCAKKyAgICAweDAwLCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAweDdlLCAweDQzLCAweDAxLCAweDI0LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweGQzLCAKKyAgICAweDIyLCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdlLCAweDM0LCAweDdmLCAweGNhLCAweDBiLCAweDFhLCAweDUwLCAweGM1LCAweGYwLCAweDdkLCAweDYyLCAKKyAgICAweDdkLCAweDc1LCAweDdkLCAweDg3LCAweDdlLCAweDM0LCAweDdmLCAweDAzLCAweDdlLCAweDFiLCAweGIwLCAweGJjLCAweDBiLCAweDUwLCAweDQ5LCAweDNlLCAKKyAgICAweDAwLCAweDNlLCAweDAwLCAweDBhLCAweDUwLCAweDJkLCAweDc1LCAweDBiLCAweDNhLCAweDMwLCAweDY5LCAweDUzLCAweDAwLCAweDAyLCAweGJkLCAweDM4LCAKKyAgICAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJjLCAweDFiLCAweDUwLCAweDMwLCAweDNlLCAweDEwLCAweDNlLCAweDEwLCAweDBhLCAweDUxLCAweDJkLCAweDM1LCAKKyAgICAweDY5LCAweDQxLCAweDAwLCAweDAyLCAweDBiLCAweDFhLCAweDMwLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJlLCAweDQ0LCAweGZmLCAKKyAgICAweGZmLCAweDc4LCAweDA1LCAweDdlLCAweDFiLCAweDkwLCAweDBhLCAweDQ5LCAweDRkLCAweDQ0LCAweDY4LCAweDBjLCAweGJlLCAweDQ0LCAweDAwLCAweGZmLCAKKyAgICAweDI4LCAweDA0LCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAKKworLy8gU2VnbWVudCAjMTYsIEVYQ0xVREVEIFN0YXJ0IEFkZHJlc3MgMDBmZjdjMDAsIExlbmd0aCAyMjcKKworCisvLyBTZWdtZW50ICMxNywgRVhDTFVERUQgU3RhcnQgQWRkcmVzcyAwMGZmN2YwMCwgTGVuZ3RoIDE5MgorCisKKy8vIFNlZ21lbnQgIzE3LCBTdGFydCBBZGRyZXNzIDAwZmY3ZmMwLCBMZW5ndGggNjQKKzB4ZmYsMHgwMCwweGMwLDB4N2YsMHg0MCwweDAwLAorICAgIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4ZDcsIDB4MzEsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorCisvLyBTZWdtZW50ICMxOCwgU3RhcnQgQWRkcmVzcyAwMGZmMGFjMCwgTGVuZ3RoIDQxNjMKKzB4ZmYsMHgwMCwweGMwLDB4MGEsMHg0MywweDEwLAorICAgIDB4Y2EsIDB4MDgsIDB4N2UsIDB4MDEsIDB4MDgsIDB4N2EsIDB4MDMsIDB4M2YsIDB4ZjAsIDB4ZGEsIDB4MDgsIDB4MjIsIDB4ODAsIDB4NTAsIDB4MGIsIDB4MWEsIAorICAgIDB4NjAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4NzAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4ODAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4OTAsIAorICAgIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4YTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4YjAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4YzAsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MWEsIDB4ZDAsIDB4MGIsIDB4MzUsIDB4MWIsIDB4MGEsIDB4NjAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4NzAsIDB4MGIsIDB4MTUsIAorICAgIDB4MWIsIDB4MGEsIDB4ODAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4OTAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4YTAsIDB4MGIsIDB4MTUsIDB4MWIsIAorICAgIDB4MGEsIDB4YjAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4YzAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4ZDAsIDB4MGIsIDB4MTUsIDB4OWUsIDB4NDQsIAorICAgIDB4MDAsIDB4MTAsIDB4NTAsIDB4YWEsIDB4MmUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MGUsIDB4N2UsIDB4MWIsIDB4YzAsIDB4N2EsIDB4MGIsIDB4YzAsIAorICAgIDB4MGIsIDB4MTQsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4NzgsIDB4ZjIsIDB4MjIsIDB4N2YsIDB4NmYsIDB4N2YsIDB4ZjAsIDB4MWIsIDB4ZmMsIDB4N2MsIAorICAgIDB4NTQsIDB4N2QsIDB4MzIsIDB4ODAsIDB4MDgsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4OWUsIDB4NDQsIDB4MDAsIAorICAgIDB4MTAsIDB4NTAsIDB4ZjIsIDB4MmUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MDYsIDB4Y2EsIDB4NDgsIDB4MWIsIDB4NDQsIDB4NzgsIDB4ZmEsIDB4N2YsIAorICAgIDB4ZjYsIDB4ODksIDB4ZTQsIDB4Y2EsIDB4NmIsIDB4NWUsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NjgsIDB4MjAsIDB4N2UsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OWQsIAorICAgIDB4OGQsIDB4ZGEsIDB4NmIsIDB4YmQsIDB4ODcsIDB4MzgsIDB4MTYsIDB4Y2EsIDB4NzksIDB4N2QsIDB4NzgsIDB4MTIsIDB4MGIsIDB4OGQsIDB4ZGEsIDB4NzksIAorICAgIDB4NDAsIDB4MDgsIDB4OWQsIDB4NzgsIDB4NjgsIDB4MDIsIDB4ODAsIDB4MDUsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4ZGEsIDB4NmIsIDB4N2UsIDB4YzAsIDB4MDMsIAorICAgIDB4N2UsIDB4ZDAsIDB4MDAsIDB4N2EsIDB4ZDMsIDB4OTAsIDB4MDAsIDB4NzQsIDB4YWEsIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4NzQsIDB4NTUsIDB4MzksIAorICAgIDB4YjUsIDB4MmEsIDB4YWEsIDB4NzQsIDB4YTAsIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4OWQsIDB4NzAsIDB4NTAsIAorICAgIDB4MDYsIDB4MmQsIDB4NzAsIDB4N2QsIDB4MDcsIDB4NmQsIDB4NzcsIDB4N2MsIDB4MzEsIDB4N2UsIDB4N2IsIDB4MDAsIDB4N2EsIDB4NmIsIDB4MDAsIDB4MGIsIAorICAgIDB4N2MsIDB4MGIsIDB4NmMsIDB4YTUsIDB4ZDksIDB4ZjMsIDB4N2YsIDB4MTYsIDB4MWIsIDB4MWMsIDB4N2UsIDB4NTQsIDB4MjcsIDB4MTAsIDB4N2UsIDB4MWIsIAorICAgIDB4MTAsIDB4YmMsIDB4MTAsIDB4NjgsIDB4MDYsIDB4MWIsIDB4NTQsIDB4NzgsIDB4ZjUsIDB4ODAsIDB4MmYsIDB4NmQsIDB4MDAsIDB4N2MsIDB4MjAsIDB4N2YsIAorICAgIDB4MTYsIDB4OWYsIDB4MTAsIDB4N2YsIDB4MjcsIDB4OWYsIDB4MjAsIDB4N2UsIDB4MmIsIDB4MDAsIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIDB4MDEsIDB4NzgsIAorICAgIDB4MTksIDB4MGIsIDB4MmMsIDB4MGIsIDB4MWMsIDB4YTUsIDB4ZGIsIDB4ZWYsIDB4N2MsIDB4YjYsIDB4MjAsIDB4ZTAsIDB4MDYsIDB4NmMsIDB4ZGMsIDB4N2EsIAorICAgIDB4ZDMsIDB4OTAsIDB4MDAsIDB4NGQsIDB4NzcsIDB4NzgsIDB4OTAsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4ZDIsIDB4ZDcsIDB4MjIsIDB4MDAsIDB4MDQsIDB4MDAsIAorICAgIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MDIsIDB4MTAsIAorICAgIDB4MDQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDgsIDB4N2UsIDB4MTgsIDB4N2YsIDB4YmQsIDB4N2EsIDB4MWMsIDB4MDAsIDB4ZmYsIDB4MGIsIAorICAgIDB4MWEsIDB4MDAsIDB4NWUsIDB4MTAsIDB4MWYsIDB4YmUsIDB4MTAsIDB4MTQsIDB4MzgsIDB4MWEsIDB4MGEsIDB4NTEsIDB4MjMsIDB4N2UsIDB4MTgsIDB4MGMsIAorICAgIDB4MGQsIDB4N2EsIDB4MWMsIDB4MDAsIDB4ZmYsIDB4MmQsIDB4MzUsIDB4MGIsIDB4MWEsIDB4NTAsIDB4NjAsIDB4MDgsIDB4YTUsIDB4YjgsIDB4MDIsIDB4MDMsIAorICAgIDB4NGUsIDB4YTAsIDB4MDgsIDB4MjIsIDB4ODAsIDB4ZmUsIDB4N2UsIDB4ZTgsIDB4N2YsIDB4YmYsIDB4N2EsIDB4ZWMsIDB4MDAsIDB4ZmYsIDB4ZTAsIDB4ZjUsIAorICAgIDB4MjMsIDB4NTQsIDB4YzAsIDB4NjgsIDB4MzgsIDB4N2UsIDB4ZTgsIDB4N2YsIDB4YmUsIDB4N2EsIDB4ZWMsIDB4MDAsIDB4ZmYsIDB4ZTAsIDB4NjAsIDB4MmUsIAorICAgIDB4MTIsIDB4MGMsIDB4MzcsIDB4ZjUsIDB4MjEsIDB4N2EsIDB4YTEsIDB4MjAsIDB4MjAsIDB4MDksIDB4MGMsIDB4MjAsIDB4MGEsIDB4MTIsIDB4N2UsIDB4YjAsIAorICAgIDB4MGUsIDB4N2EsIDB4YjMsIDB4OTIsIDB4MDAsIDB4ODAsIDB4MTAsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTIsIDB4MDAsIDB4ODAsIDB4MDcsIAorICAgIDB4N2UsIDB4YjAsIDB4MGEsIDB4N2EsIDB4YjMsIDB4OTIsIDB4MDAsIDB4N2EsIDB4YjEsIDB4MGQsIDB4MDIsIDB4MGMsIDB4YzQsIDB4MjIsIDB4N2UsIDB4YjAsIAorICAgIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIAorICAgIDB4MTksIDB4MGMsIDB4ODAsIDB4ZWEsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MTEsIDB4YzIsIDB4MTIsIDB4NzUsIDB4YjAsIDB4ZGYsIDB4N2UsIDB4MDAsIDB4MDEsIAorICAgIDB4N2EsIDB4MDMsIDB4OTMsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NmMsIDB4MDAsIDB4N2UsIDB4MTAsIDB4MDMsIAorICAgIDB4MTIsIDB4MGMsIDB4ZjUsIDB4N2UsIDB4NjgsIDB4MmMsIDB4NjYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MGIsIDB4MDAsIAorICAgIDB4ODAsIDB4MzIsIDB4MDIsIDB4MWEsIDB4NmUsIDB4MjAsIDB4MTEsIDB4MmIsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIAorICAgIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIAorICAgIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4YTUsIDB4ZDksIDB4ZGMsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIAorICAgIDB4MTIsIDB4MTksIDB4MGMsIDB4MjIsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjksIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIAorICAgIDB4ZTQsIDB4MTAsIDB4MDAsIDB4N2UsIDB4NDAsIDB4NTUsIDB4N2EsIDB4ZTksIDB4NDAsIDB4MGIsIDB4ZTQsIDB4N2UsIDB4NTAsIDB4YWEsIDB4N2EsIDB4ZTksIAorICAgIDB4NTAsIDB4MWIsIDB4ZTQsIDB4YmUsIDB4ZTksIDB4NDAsIDB4NjgsIDB4MTksIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MTMsIDB4N2EsIDB4ZTksIDB4NDAsIDB4N2UsIDB4ZTksIDB4MTAsIDB4ODAsIAorICAgIDB4ZjgsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MGIsIDB4MDAsIDB4N2UsIDB4NjgsIAorICAgIDB4MmQsIDB4M2QsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzAsIDB4MGUsIAorICAgIDB4N2UsIDB4YTQsIDB4ZmYsIDB4ZmYsIDB4N2UsIDB4YjQsIDB4YmYsIDB4ZmYsIDB4N2QsIDB4Y2IsIDB4MGUsIDB4YzQsIDB4N2QsIDB4ZGMsIDB4NWQsIDB4ZGIsIAorICAgIDB4NmMsIDB4YmIsIDB4N2QsIDB4ZmEsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmIsIDB4NWUsIAorICAgIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmMsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIAorICAgIDB4YjAsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmQsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4NmMsIDB4YmIsIDB4N2QsIDB4ZmEsIAorICAgIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIDB4NzgsIDB4NDEsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmIsIDB4NWUsIDB4ZjQsIDB4N2YsIAorICAgIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIDB4NzgsIDB4MzQsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmMsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4YmUsIDB4N2IsIAorICAgIDB4YjAsIDB4NzgsIDB4MjcsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmQsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIDB4NzgsIDB4MWEsIAorICAgIDB4MGIsIDB4YjAsIDB4YmUsIDB4YzQsIDB4ZmYsIDB4ZmUsIDB4NzgsIDB4OTIsIDB4MGUsIDB4YjQsIDB4YTUsIDB4ZGYsIDB4OGIsIDB4N2UsIDB4NjgsIDB4MmMsIAorICAgIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4NzcsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIDB4N2UsIDB4NjgsIAorICAgIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NjgsIDB4MmQsIDB4OGYsIDB4N2EsIDB4NmMsIDB4MDAsIAorICAgIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MGEsIDB4NDcsIDB4MTIsIDB4MTksIDB4ZmEsIDB4N2UsIDB4NjgsIDB4MmQsIDB4ZGUsIDB4N2EsIDB4NmMsIDB4MDAsIAorICAgIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4NmMsIDB4NzcsIDB4ZGEsIDB4NmIsIDB4Y2EsIDB4NmIsIDB4MGIsIDB4NzAsIDB4MGUsIDB4YzQsIDB4YmUsIDB4YzQsIAorICAgIDB4ZmYsIDB4ZmYsIDB4NzgsIDB4ZjYsIDB4MWIsIDB4NzAsIDB4MGEsIDB4NDcsIDB4MTIsIDB4MTksIDB4ZmEsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIAorICAgIDB4MzAsIDB4ZGEsIDB4NmIsIDB4ZGEsIDB4NWIsIDB4NmMsIDB4YmIsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2QsIDB4ZmEsIDB4NWUsIDB4ZjQsIDB4N2YsIAorICAgIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4N2QsIDB4ZmIsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4N2QsIDB4ZmMsIDB4NWUsIAorICAgIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4N2QsIDB4ZmQsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4ODAsIAorICAgIDB4ZDQsIDB4N2UsIDB4NjgsIDB4MmQsIDB4MWIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MzAsIDB4MWYsIDB4MGUsIDB4N2UsIAorICAgIDB4NzgsIDB4MDQsIDB4MjAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDQsIDB4N2IsIDB4ZTAsIDB4ODAsIDB4MGMsIDB4N2UsIDB4NzgsIDB4MDAsIAorICAgIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDEsIDB4N2UsIDB4NDQsIDB4ODAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4N2UsIDB4NDAsIDB4M2EsIDB4N2MsIDB4NTQsIAorICAgIDB4N2YsIDB4NTcsIDB4N2QsIDB4ODQsIDB4NmMsIDB4NjYsIDB4N2EsIDB4NWIsIDB4NTAsIDB4MGIsIDB4NWMsIDB4MGIsIDB4NTAsIDB4YTUsIDB4ZGUsIDB4MDIsIAorICAgIDB4MGIsIDB4NTAsIDB4MWIsIDB4ODQsIDB4NzgsIDB4ZjAsIDB4N2MsIDB4NTQsIDB4N2YsIDB4NTcsIDB4N2QsIDB4ODQsIDB4NmMsIDB4NjYsIDB4YmUsIDB4NWIsIAorICAgIDB4NTAsIDB4NzgsIDB4MWEsIDB4MGIsIDB4NWMsIDB4MGIsIDB4NTAsIDB4YTUsIDB4ZGUsIDB4MDIsIDB4MGIsIDB4NTAsIDB4MWIsIDB4ODQsIDB4NzgsIDB4ZWUsIAorICAgIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4NGIsIDB4N2YsIDB4NDUsIDB4N2UsIAorICAgIDB4NjgsIDB4MmMsIDB4ZGYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NjgsIDB4MmQsIDB4NWYsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2QsIDB4NGIsIDB4MTIsIDB4MTksIDB4ZmEsIDB4N2UsIDB4NjgsIDB4MmQsIDB4NzQsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4NmMsIDB4ODgsIDB4N2MsIDB4OTUsIDB4MTIsIDB4MTksIDB4ZmEsIDB4N2UsIDB4NjgsIDB4MmQsIDB4ODIsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NGIsIDB4OTAsIDB4MTIsIDB4MTksIDB4ZmEsIDB4MTIsIDB4MTksIDB4MTksIAorICAgIDB4MzAsIDB4MTEsIDB4MDUsIDB4N2UsIDB4NGIsIDB4OTAsIDB4ODAsIDB4ZmIsIDB4N2UsIDB4NjgsIDB4MmUsIDB4MjgsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTksIDB4YzQsIDB4MGIsIDB4MDAsIDB4N2UsIDB4YjAsIDB4ODAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YTAsIDB4NTUsIDB4N2EsIAorICAgIDB4YTMsIDB4OTEsIDB4MTAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDcsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTAsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MjAsIDB4N2UsIAorICAgIDB4YTAsIDB4YWEsIDB4N2EsIDB4YTMsIDB4OTEsIDB4MTAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDcsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTAsIDB4YmMsIDB4YWIsIAorICAgIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4MWIsIDB4N2UsIAorICAgIDB4NjgsIDB4MmMsIDB4ZGYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MGEsIAorICAgIDB4N2EsIDB4YTMsIDB4OTEsIDB4MTAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTAsIDB4ODAsIDB4ZjYsIDB4N2UsIDB4NjgsIDB4MmUsIDB4NGEsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTIsIDB4MzEsIDB4MGIsIDB4MDAsIDB4N2UsIDB4ZTQsIDB4MTAsIDB4MDAsIDB4N2UsIDB4YTAsIAorICAgIDB4YTUsIDB4Y2EsIDB4YTgsIDB4N2EsIDB4ZTksIDB4YTAsIDB4N2UsIDB4YjAsIDB4MzAsIDB4N2EsIDB4YjMsIDB4OTUsIDB4MDAsIDB4N2UsIDB4ZTksIDB4YTAsIAorICAgIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTUsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4MGIsIDB4ZTUsIDB4N2UsIDB4YjAsIDB4MjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTUsIDB4MDAsIDB4N2UsIDB4ZTksIDB4YjAsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTUsIDB4MDAsIDB4N2UsIDB4ZTksIDB4YjAsIAorICAgIDB4ZGEsIDB4YTgsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIAorICAgIDB4YzQsIDB4ODAsIDB4MWQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIAorICAgIDB4MTksIDB4MzAsIDB4MTEsIDB4MGMsIDB4N2UsIDB4YjAsIDB4MzgsIDB4N2EsIDB4YjMsIDB4OTUsIDB4MDAsIDB4N2UsIDB4ZTksIDB4YjAsIDB4ODAsIDB4ZmIsIAorICAgIDB4ODAsIDB4MDAsIDB4N2UsIDB4NjgsIDB4MmQsIDB4ZTQsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MGIsIDB4MDAsIDB4NzUsIAorICAgIDB4YjAsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4YmUsIDB4YjAsIDB4MDEsIDB4NzgsIDB4MGIsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTQsIDB4YmUsIDB4YjAsIDB4NjAsIDB4NzgsIDB4MDIsIDB4ODAsIDB4MTcsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGYsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MTEsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4ODAsIAorICAgIDB4ZmEsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NjgsIDB4MmUsIDB4MDYsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MGIsIDB4MDAsIDB4NzUsIDB4YjAsIDB4ZWYsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4N2UsIAorICAgIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4NTUsIDB4MTksIDB4YTIsIDB4MDAsIDB4MWMsIDB4N2UsIDB4YjAsIDB4MDEsIDB4MTksIDB4YjIsIDB4MDAsIAorICAgIDB4MDgsIDB4MDksIDB4YjIsIDB4MDAsIDB4MWMsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MzcsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4NWUsIDB4YjAsIDB4YzAsIAorICAgIDB4YmUsIDB4YjAsIDB4YzAsIDB4NzgsIDB4MmIsIDB4N2UsIDB4YTAsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MWMsIDB4NmMsIDB4YmIsIDB4MTksIDB4YjIsIAorICAgIDB4MDAsIDB4MDgsIDB4MDksIDB4YjIsIDB4MDAsIDB4MWMsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MTYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4NWUsIDB4YjAsIAorICAgIDB4YzAsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4MWIsIAorICAgIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZGYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIAorICAgIDB4MGEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MWMsIDB4MDksIDB4YjIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4ZjYsIDB4N2UsIDB4NjgsIDB4MmUsIDB4NmMsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NjgsIDB4MmUsIDB4ZWUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIAorICAgIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4N2UsIDB4YjAsIDB4MDEsIDB4MTksIDB4YjIsIDB4MDAsIDB4MWMsIDB4MmUsIAorICAgIDB4MjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4YjAsIDB4YTUsIDB4ZDksIDB4ZjMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4N2UsIAorICAgIDB4YjAsIDB4MDEsIDB4MGIsIDB4MDAsIDB4MDksIDB4YTIsIDB4MDAsIDB4MWMsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MTYsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4YjAsIDB4YTUsIDB4ZDksIDB4ZTIsIAorICAgIDB4ODAsIDB4MjUsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIAorICAgIDB4MzAsIDB4MTEsIDB4ZTQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MDksIDB4YTIsIDB4MDAsIDB4MWMsIDB4MmUsIDB4MjQsIAorICAgIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZjUsIDB4ODAsIDB4ZWMsIDB4N2UsIDB4NjgsIDB4MmYsIDB4MTIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIAorICAgIDB4MTksIDB4YzQsIDB4MTIsIDB4MTIsIDB4MzEsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4NzQsIDB4MTAsIAorICAgIDB4MTksIDB4YjIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTEsIDB4YWEsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZWUsIDB4N2UsIDB4NjgsIAorICAgIDB4MmYsIDB4MzYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIAorICAgIDB4MGIsIDB4MDAsIDB4ZTQsIDB4MTksIDB4YjIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTEsIDB4YWEsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIAorICAgIDB4ZWYsIDB4MzAsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MTcsIDB4M2IsIDB4MDIsIDB4MTIsIDB4NmEsIDB4NzQsIDB4MDcsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDgsIAorICAgIDB4MTIsIDB4MTksIDB4MGMsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTQsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTQsIDB4YzIsIDB4MTMsIDB4N2UsIDB4YjAsIDB4NTUsIDB4MTIsIDB4MTIsIDB4MGIsIDB4N2UsIDB4YjAsIDB4YWEsIDB4MTIsIDB4MTIsIAorICAgIDB4MGIsIDB4N2UsIDB4YjAsIDB4MDAsIDB4MTIsIDB4MTIsIDB4MGIsIDB4N2UsIDB4YjAsIDB4ZmYsIDB4MTIsIDB4MTIsIDB4MGIsIDB4MzAsIDB4MTMsIDB4MGYsIAorICAgIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MjIsIDB4N2UsIAorICAgIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MjIsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIAorICAgIDB4MTgsIDB4ZmYsIDB4MDksIDB4YTIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MTEsIDB4MDMsIDB4ZDIsIDB4MTMsIAorICAgIDB4MjIsIDB4MTIsIDB4MTksIDB4MTksIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YTIsIDB4MDAsIDB4MDAsIDB4ODAsIAorICAgIDB4ZjMsIDB4NzUsIDB4YjAsIDB4ZGYsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4NzUsIDB4YjAsIDB4ZWYsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4N2UsIDB4MjQsIDB4ODAsIAorICAgIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4NzQsIDB4ODAsIDB4MTksIDB4YjIsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDIsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MDQsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTksIDB4YjIsIDB4MDAsIDB4MGMsIDB4NzQsIDB4MDYsIDB4MTksIDB4YjIsIAorICAgIDB4MDAsIDB4MDgsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZGIsIDB4MjIsIDB4N2UsIDB4NjgsIDB4MmYsIDB4NWEsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4MTIsIDB4MTgsIAorICAgIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4NTUsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDUsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4MWEsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIAorICAgIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MDksIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4ODAsIDB4ZjcsIDB4MmUsIAorICAgIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4YjYsIDB4N2UsIDB4NjgsIDB4MmYsIDB4N2UsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIAorICAgIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MTgsIDB4N2UsIDB4YTAsIDB4NTUsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIAorICAgIDB4YjAsIDB4MGEsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIAorICAgIDB4MWEsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIAorICAgIDB4MTEsIDB4MDksIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4ODAsIDB4ZjcsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIAorICAgIDB4ZDksIDB4YjYsIDB4MzAsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MTUsIDB4OWYsIDB4N2UsIDB4NjgsIDB4MmYsIDB4YTIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MGEsIAorICAgIDB4NzgsIDB4M2MsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIAorICAgIDB4N2UsIDB4YTAsIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIAorICAgIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MGEsIDB4NzgsIDB4MTQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIAorICAgIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4ZTYsIDB4N2UsIAorICAgIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIAorICAgIDB4MmYsIDB4ZWEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIAorICAgIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIAorICAgIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDUsIDB4NzgsIDB4M2MsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIAorICAgIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIDB4MDIsIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDUsIDB4NzgsIDB4MTQsIAorICAgIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIAorICAgIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIAorICAgIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4ZTYsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIDB4MzAsIDB4MzIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIAorICAgIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIAorICAgIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4NTAsIDB4YmUsIDB4YjAsIDB4NTAsIDB4NzgsIDB4MWYsIDB4NmMsIDB4YWEsIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4NTAsIDB4NzgsIDB4MGQsIAorICAgIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIAorICAgIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MGYsIDB4N2UsIDB4YTAsIAorICAgIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4MmUsIDB4MjQsIDB4MDEsIAorICAgIDB4MDAsIDB4YTUsIDB4ZDksIDB4YTIsIDB4N2UsIDB4NjgsIDB4MzAsIDB4N2EsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIAorICAgIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4YTAsIDB4YmUsIDB4YjAsIDB4YTAsIAorICAgIDB4NzgsIDB4MWYsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIAorICAgIDB4YjAsIDB4YTAsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIAorICAgIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIAorICAgIDB4MTEsIDB4MGYsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIAorICAgIDB4ZjEsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIDB4N2UsIDB4NjgsIDB4MzAsIDB4OWUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4MjAsIDB4YjEsIDB4MjYsIDB4N2UsIAorICAgIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MzAsIDB4YjEsIDB4MTksIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MjAsIDB4YjEsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTksIDB4YzQsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIAorICAgIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MGYsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4YWUsIDB4MDIsIDB4MTcsIDB4M2IsIDB4N2UsIAorICAgIDB4NjgsIDB4MmYsIDB4YzYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIAorICAgIDB4MjEsIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIAorICAgIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDYsIDB4NzgsIDB4M2MsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIAorICAgIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDYsIDB4NzgsIAorICAgIDB4MTQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIAorICAgIDB4YTUsIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIAorICAgIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4ZTYsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIDB4MzAsIDB4MGUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIAorICAgIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIAorICAgIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDksIDB4NzgsIDB4M2MsIDB4N2UsIAorICAgIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDMsIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDksIDB4NzgsIDB4MTQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIAorICAgIDB4MTksIDB4YzQsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4ZTYsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIDB4MzAsIDB4NTYsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4OTAsIAorICAgIDB4YmUsIDB4YjAsIDB4OTAsIDB4NzgsIDB4MWYsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4OTAsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZTcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIAorICAgIDB4MTksIDB4YzQsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MmMsIDB4ZjAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MTIsIAorICAgIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MGYsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4YTIsIDB4MjAsIDB4MWYsIDB4NjgsIDB4MTIsIDB4MTIsIAorICAgIDB4MzEsIDB4MTIsIDB4MTcsIDB4YTksIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIDB4MGIsIDB4MDAsIDB4MjAsIDB4ODksIDB4MjYsIAorICAgIDB4N2UsIDB4YTAsIDB4ZmYsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4N2UsIDB4YjAsIDB4NTUsIDB4MTksIDB4YjIsIDB4MDAsIAorICAgIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MzAsIDB4ODksIDB4MGYsIDB4N2UsIDB4YTAsIDB4MDAsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTgsIAorICAgIDB4ZmYsIDB4MjAsIDB4ODksIDB4MDIsIDB4ODAsIDB4MjYsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4MjAsIDB4N2UsIDB4YTAsIDB4ZmYsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4N2UsIDB4YjAsIDB4NTUsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZmYsIAorICAgIDB4N2UsIDB4YTAsIDB4MDAsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4ODAsIDB4ZTAsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIAorICAgIDB4YTUsIDB4ZDksIDB4YTgsIDB4MDIsIDB4MTcsIDB4YzIsIDB4MDIsIDB4MTgsIDB4NGMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MjEsIAorICAgIDB4N2UsIDB4YTAsIDB4MDgsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIAorICAgIDB4ZWYsIDB4MjIsIDB4MzAsIDB4MWYsIDB4MDMsIDB4MDIsIDB4MTgsIDB4NGMsIDB4YzIsIDB4OGEsIDB4MTIsIDB4MTcsIDB4YTksIDB4MGIsIDB4MDAsIDB4MTIsIAorICAgIDB4MTgsIDB4MTYsIDB4MjAsIDB4OGIsIDB4MjQsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MDcsIDB4NzQsIDB4MGMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4MTIsIDB4MTksIDB4MGMsIAorICAgIDB4MzAsIDB4OGIsIDB4MDYsIDB4MTIsIDB4MTgsIDB4MTYsIDB4MzAsIDB4OGIsIDB4YWQsIDB4MTIsIDB4MTksIDB4MTksIDB4MzAsIDB4MTEsIDB4YTcsIDB4MTIsIAorICAgIDB4MTgsIDB4MTYsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4MTIsIDB4MTksIAorICAgIDB4MGMsIDB4MTIsIDB4MTgsIDB4MTYsIDB4ODAsIDB4ZTksIDB4N2UsIDB4YTAsIDB4MDAsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2EsIAorICAgIDB4YTMsIDB4OTEsIDB4MDcsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2EsIDB4YTMsIDB4OTEsIDB4MDcsIDB4MTIsIDB4MTgsIDB4ZmYsIAorICAgIDB4NzQsIDB4ZWYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4NzQsIDB4ODAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDMsIDB4NzQsIDB4MGMsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MDYsIDB4NzQsIDB4MDgsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4MTIsIDB4MTksIDB4MGMsIDB4MjIsIDB4MzAsIDB4MTIsIDB4MTksIDB4N2UsIAorICAgIDB4NjgsIDB4MzAsIDB4YzIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4ZDIsIDB4MTEsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MTIsIAorICAgIDB4MTgsIDB4ZmYsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4MDIsIDB4MGMsIDB4Y2EsIDB4MzAsIDB4MWYsIDB4MWMsIDB4N2UsIDB4NjgsIDB4MzEsIDB4M2MsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4N2UsIDB4NjgsIDB4MzEsIDB4NWUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIAorICAgIDB4YzQsIDB4MTIsIDB4MWEsIDB4NmUsIDB4MDIsIDB4MTgsIDB4ZjcsIDB4MGIsIDB4MDAsIDB4N2UsIDB4NzgsIDB4MTgsIDB4YjEsIDB4N2EsIDB4N2MsIDB4MDAsIAorICAgIDB4ZmYsIDB4N2YsIDB4NjcsIDB4N2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzAsIDB4M2UsIDB4N2UsIDB4N2IsIDB4YjAsIDB4N2EsIDB4NmIsIDB4YjAsIAorICAgIDB4MGIsIDB4N2MsIDB4MGIsIDB4NmMsIDB4YTUsIDB4ZGYsIDB4ZjMsIDB4N2UsIDB4NzgsIDB4MTgsIDB4YjEsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODksIAorICAgIDB4NzgsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4NjgsIDB4N2YsIDB4YmYsIDB4N2EsIDB4NmMsIDB4MDAsIAorICAgIDB4ZmUsIDB4NzQsIDB4YWEsIDB4MzksIDB4YjcsIDB4NTUsIDB4NTUsIDB4NzQsIDB4NTUsIDB4MzksIDB4YjcsIDB4MmEsIDB4YWEsIDB4NzQsIDB4YTAsIDB4MzksIAorICAgIDB4YjcsIDB4NTUsIDB4NTUsIDB4NmMsIDB4OTksIDB4N2EsIDB4NmIsIDB4OTAsIDB4N2UsIDB4NTQsIDB4MjcsIDB4MTAsIDB4N2UsIDB4NmIsIDB4ODAsIDB4YmMsIAorICAgIDB4ODksIDB4NjgsIDB4MDgsIDB4MWIsIDB4NTQsIDB4NzgsIDB4ZjUsIDB4OGEsIDB4ZmYsIDB4MTgsIDB4ZWYsIDB4OGEsIDB4ZmYsIDB4MTgsIDB4ZjcsIDB4MTIsIAorICAgIDB4MTksIDB4MTksIDB4N2UsIDB4NmIsIDB4ODAsIDB4ODAsIDB4ZmIsIDB4N2UsIDB4MTAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YWMsIDB4ODAsIDB4ZjgsIDB4Y2EsIAorICAgIDB4ZjksIDB4N2UsIDB4ZjQsIDB4MDAsIDB4ZmYsIDB4MWIsIDB4ZjQsIDB4NzgsIDB4ZmMsIDB4ZGEsIDB4ZjksIDB4MjIsIDB4Y2EsIDB4ZjksIDB4N2UsIDB4ZjQsIAorICAgIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZjQsIDB4NzgsIDB4ZmMsIDB4ZGEsIDB4ZjksIDB4MjIsIDB4MjAsIDB4MTEsIDB4MjAsIDB4ZDIsIDB4MTIsIDB4MTIsIDB4MTksIAorICAgIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIAorICAgIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MjIsIDB4Y2EsIDB4MGIsIDB4N2UsIDB4MTAsIAorICAgIDB4MDMsIDB4N2MsIDB4MzAsIDB4NmMsIDB4MjIsIDB4MGIsIDB4MjAsIDB4OWUsIDB4MzAsIDB4MGEsIDB4NTAsIDB4ZjksIDB4MmUsIDB4MzAsIDB4MGIsIDB4MWIsIAorICAgIDB4MjAsIDB4NjgsIDB4MjAsIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIAorICAgIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIAorICAgIDB4YTUsIDB4ZGEsIDB4ZTAsIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIDB4MWIsIDB4MzAsIDB4NjgsIDB4MjAsIDB4MTIsIDB4MTksIDB4MGMsIAorICAgIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4MTIsIDB4MTksIDB4MGMsIAorICAgIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4YTUsIDB4ZGIsIDB4ZTAsIDB4N2UsIDB4MjAsIDB4MGEsIAorICAgIDB4MTIsIDB4MTksIDB4MGMsIDB4YTUsIDB4ZGEsIDB4ZmEsIDB4YTUsIDB4ZDksIDB4OTgsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4MjAsIDB4MTEsIDB4MTQsIDB4MTIsIAorICAgIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4MTIsIDB4MTksIDB4MGMsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MzAsIDB4MWYsIDB4MzIsIDB4MjAsIDB4MTEsIDB4MmYsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4N2IsIDB4N2UsIDB4NzgsIAorICAgIDB4ODAsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4ZmUsIDB4MTIsIDB4MWEsIDB4NGQsIDB4N2UsIDB4NmIsIDB4YTAsIDB4NWMsIDB4YWEsIDB4NjgsIDB4MTAsIAorICAgIDB4MjksIDB4YjcsIDB4MDAsIDB4MTQsIDB4NTQsIDB4NjAsIDB4NjgsIDB4ZjgsIDB4MzksIDB4YTcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4NmMsIDB4ODAsIDB4ZTksIAorICAgIDB4MTIsIDB4MTgsIDB4ZmYsIDB4ZDIsIDB4YjUsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4MmIsIDB4MjIsIDB4MTIsIDB4MWEsIDB4MDUsIDB4N2UsIDB4NjgsIDB4MDAsIAorICAgIDB4MGMsIDB4MTIsIDB4MTksIDB4YzQsIDB4MjIsIDB4Y2EsIDB4NTksIDB4Y2EsIDB4NWIsIDB4N2UsIDB4YjQsIDB4MDAsIDB4MGMsIDB4N2MsIDB4YjgsIDB4YzQsIAorICAgIDB4MTIsIDB4MWEsIDB4MzUsIDB4N2MsIDB4YjgsIDB4MTIsIDB4MWEsIDB4MzUsIDB4N2MsIDB4YjksIDB4YzQsIDB4MTIsIDB4MWEsIDB4MzUsIDB4N2MsIDB4YjksIAorICAgIDB4MTIsIDB4MWEsIDB4MzUsIDB4N2UsIDB4YjAsIDB4NjgsIDB4N2EsIDB4YjksIDB4YjAsIDB4MGIsIDB4YjQsIDB4NmMsIDB4YmIsIDB4N2EsIDB4YjksIDB4YjAsIAorICAgIDB4ZGEsIDB4NTksIDB4ZGEsIDB4NWIsIDB4MjIsIDB4NWUsIDB4YjAsIDB4MGYsIDB4N2MsIDB4YWIsIDB4OWUsIDB4YTAsIDB4MGEsIDB4NDAsIDB4MDUsIDB4MmUsIAorICAgIDB4YjAsIDB4MzcsIDB4ODAsIDB4MDMsIDB4MmUsIDB4YjAsIDB4MzAsIDB4N2EsIDB4YjksIDB4YjAsIDB4MGIsIDB4YjQsIDB4MjIsIDB4YzIsIDB4YjUsIDB4NzUsIAorICAgIDB4YjAsIDB4ZWYsIDB4MTIsIDB4MTgsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MzksIDB4YjcsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDYsIDB4MzksIAorICAgIDB4YTcsIDB4MDAsIDB4MDQsIDB4MzksIDB4YjcsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MzksIDB4YjcsIDB4MDAsIDB4MGMsIDB4MjIsIDB4N2UsIDB4NzgsIAorICAgIDB4MDAsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4ZmYsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4MDEsIDB4N2YsIDB4NjUsIAorICAgIDB4N2UsIDB4NzQsIDB4MjAsIDB4MDAsIDB4MTIsIDB4MGIsIDB4NjMsIDB4NDAsIDB4NTgsIDB4N2UsIDB4NzgsIDB4N2MsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIAorICAgIDB4ZmYsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4MDEsIDB4N2UsIDB4NjgsIDB4N2MsIDB4MDAsIDB4N2EsIDB4NmMsIDB4MDAsIAorICAgIDB4MDEsIDB4N2UsIDB4NzQsIDB4MDQsIDB4MDAsIDB4MTIsIDB4MGIsIDB4NjMsIDB4NDAsIDB4MzcsIDB4NzQsIDB4ODAsIDB4MTIsIDB4MWEsIDB4ZWEsIDB4NDAsIAorICAgIDB4MzAsIDB4N2UsIDB4MDAsIDB4MDMsIDB4N2EsIDB4MDMsIDB4OTAsIDB4MDAsIDB4ZDIsIDB4MTAsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDgsIDB4N2UsIDB4MTQsIAorICAgIDB4MDAsIDB4MDAsIDB4ODQsIDB4YTUsIDB4ZGIsIDB4ZmMsIDB4YTUsIDB4ZGEsIDB4ZjksIDB4YTUsIDB4ZDksIDB4ZjYsIDB4NzQsIDB4NDAsIDB4MTIsIDB4MWEsIAorICAgIDB4ZWEsIDB4NDAsIDB4MGUsIDB4N2UsIDB4NjgsIDB4MzEsIDB4OGQsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MTksIDB4YzQsIDB4MDIsIDB4MTgsIAorICAgIDB4ZjcsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4ODAsIDB4ZmUsIDB4ZjUsIDB4MGIsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MGIsIAorICAgIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NjgsIDB4N2YsIDB4YmYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4MDEsIDB4N2UsIDB4NzQsIDB4MDAsIDB4MDEsIAorICAgIDB4MDIsIDB4MGIsIDB4NjMsIAorCisvLyBTZWdtZW50ICMxOSwgRVhDTFVERUQgU3RhcnQgQWRkcmVzcyAwMGZmMmM2NiwgTGVuZ3RoIDEzOTMKKworfTsKKworc3RhdGljIHN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyBJTUFHRV9WRVJTSU9OX05BTUUgPSB7CisJMiwgMCwgMyB9OwkJLy8gTWFqb3IsIE1pbm9yLCBCdWlsZAorCisjdW5kZWYgSU1BR0VfVkVSU0lPTl9OQU1FCisKKyN1bmRlZiBJTUFHRV9BUlJBWV9OQU1FCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjFkODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bi5oCkBAIC0wLDAgKzEsMTIyOSBAQAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qIEVkZ2Vwb3J0LzQgQmluYXJ5IEltYWdlCisvLyogR2VuZXJhdGVkIGJ5IEhFWDJDIHYxLjA2CisvLyogQ29weXJpZ2h0IChDKSAxOTk4IEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8qCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisvLyoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvL0ltYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9uCisjaWYgIWRlZmluZWQoREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRCkKKwkjZGVmaW5lIERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgeworCQlfX2xlMTYgRXh0QWRkcjsKKwkJX19sZTE2IEFkZHI7CisJCV9fbGUxNiBMZW47CisJCXVuc2lnbmVkIGNoYXIJRGF0YVswXTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCXN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyB7CisJCXVuc2lnbmVkIGNoYXIJTWFqb3JWZXJzaW9uOworCQl1bnNpZ25lZCBjaGFyCU1pbm9yVmVyc2lvbjsKKwkJdW5zaWduZWQgc2hvcnQJQnVpbGROdW1iZXI7CisJfTsKKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJTUFHRV9BUlJBWV9OQU1FKQorCSNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlGaXJtd2FyZUltYWdlCisJI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJRmlybXdhcmVJbWFnZVZlcnNpb24KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBJTUFHRV9BUlJBWV9OQU1FW10gPSB7CisKKy8vIFNlZ21lbnQgIzEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMDAsIExlbmd0aCA2CisweGZmLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDgwLCAweDAyLCAweDQ0LCAweGIwLCAKKworLy8gU2VnbWVudCAjMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDBiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4NDQsIDB4NzIsIAorCisvLyBTZWdtZW50ICMzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDEzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgxMywgCisKKy8vIFNlZ21lbnQgIzQsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMWIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDFiLCAKKworLy8gU2VnbWVudCAjNSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDIzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MjMsIAorCisvLyBTZWdtZW50ICM2LCBTdGFydCBBZGRyZXNzIDAwZmYwMDJiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MmIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyYiwgCisKKy8vIFNlZ21lbnQgIzcsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMzMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDMzLCAKKworLy8gU2VnbWVudCAjOCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAzYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDNiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4M2IsIAorCisvLyBTZWdtZW50ICM5LCBTdGFydCBBZGRyZXNzIDAwZmYwMDQzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NDMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg0MywgCisKKy8vIFNlZ21lbnQgIzEwLCBTdGFydCBBZGRyZXNzIDAwZmYwMDRiLCBMZW5ndGggMworMHhmZiwweDAwLDB4NGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHg2ZSwgMHhjNCwgCisKKy8vIFNlZ21lbnQgIzExLCBTdGFydCBBZGRyZXNzIDAwZmYwMDUzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHg3NSwgMHg4ZCwgCisKKy8vIFNlZ21lbnQgIzEyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDdiLCBMZW5ndGggMworMHhmZiwweDAwLDB4N2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg3YiwgCisKKy8vIFNlZ21lbnQgIzEzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDgwLCBMZW5ndGggNworMHhmZiwweDAwLDB4ODAsMHgwMCwweDA3LDB4MDAsCisgICAgMHg3ZSwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHg1MSwgCisKKy8vIFNlZ21lbnQgIzE0LCBTdGFydCBBZGRyZXNzIDAwZmYzMDAwLCBMZW5ndGggMjE3OAorMHhmZiwweDAwLDB4MDAsMHgzMCwweDgyLDB4MDgsCisgICAgMHgxMiwgMHgzNywgMHgyOCwgMHgxMiwgMHgzMCwgMHgzZSwgMHgxMiwgMHgzMCwgMHg1NCwgMHgxMiwgMHgzMCwgMHhlNSwgMHgxMiwgMHgzMSwgMHg2OCwgMHgxMiwgCisgICAgMHgzNSwgMHgyMCwgMHgxMiwgMHgzOCwgMHg1OCwgMHgxMiwgMHgzMSwgMHgxNSwgMHgxMiwgMHgzMSwgMHg0MCwgMHgxMiwgMHgzMCwgMHhhMCwgMHg4MCwgMHhlMCwgCisgICAgMHhlNSwgMHgyMywgMHg2MCwgMHgxOSwgMHg3ZSwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMSwgMHgwMSwgMHhjZiwgMHhiNCwgMHgwMCwgMHgwMiwgMHg4MCwgCisgICAgMHgwNSwgMHgxNCwgMHgxOSwgMHhiMSwgMHgwMSwgMHhjZiwgMHhhNSwgMHgwYiwgMHhiZSwgMHgzMSwgMHgyZiwgMHg3OCwgMHhlYiwgMHgyMiwgMHhjMiwgMHhhZiwgCisgICAgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMSwgMHhiNCwgMHgwMSwgMHgwYSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMiwgMHgxMiwgMHg3MCwgMHhlZiwgMHhkMCwgCisgICAgMHhmMSwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHhlNSwgMHgyMiwgMHg2MCwgMHg0MywgMHg3ZSwgMHgwNywgMHgwMSwgMHhlMSwgMHhiZSwgMHgwNCwgCisgICAgMHgwMywgMHg4MCwgMHgzOCwgMHgzOSwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgyMSwgMHgwOSwgMHhhMCwgCisgICAgMHgwMCwgMHgwNCwgMHg0ZSwgMHhhMCwgMHgwNSwgMHgxOSwgMHhhMCwgMHgwMCwgMHgwNCwgMHgwYSwgMHgzMiwgMHgwOSwgMHg1MywgMHg2NywgMHg4ZSwgMHg1ZSwgCisgICAgMHg1MSwgMHgyNywgMHg2OCwgMHgwYiwgMHgwOSwgMHhhMCwgMHgwMCwgMHgxMCwgMHg0ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMCwgMHgwMCwgMHgxMCwgMHgyZSwgCisgICAgMHgwNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhkMSwgMHg3NSwgMHgyMiwgMHgwMCwgMHhkMiwgMHhhZiwgMHgyMiwgCisgICAgMHhjMiwgMHhhZiwgMHg3ZSwgMHgyMCwgMHgwMCwgMHg3ZSwgMHgzMCwgMHgwMSwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgzMiwgMHgwMSwgCisgICAgMHg4ZiwgMHhiZSwgMHgzNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwgMHg3ZSwgMHhiMSwgMHgyMSwgMHhhNSwgMHg0YiwgMHg3YSwgMHhiMSwgMHgyMSwgMHhjYSwgCisgICAgMHgxOSwgMHg0OSwgMHgyMiwgMHgzMCwgMHhkNSwgMHg5OSwgMHgyNCwgMHhkYSwgMHgxOSwgMHgzZSwgMHgzMCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgCisgICAgMHg3OCwgMHhkNiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg0NiwgMHgwZiwgMHg0OSwgMHg2NywgMHg0YywgMHhiZiwgMHg1MCwgMHgxNywgMHg1MywgMHg2ZiwgMHg1NiwgCisgICAgMHhjNywgMHg1YSwgMHgxZiwgMHg1ZCwgMHg3NywgMHhjMiwgMHhhZiwgMHhlNSwgMHgzMiwgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgCisgICAgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzMSwgMHgwMiwgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhlZiwgMHhkMiwgCisgICAgMHhhZiwgMHgyMiwgMHhjYSwgMHgyOCwgMHgxMiwgMHg2NywgMHhhYiwgMHhkYSwgMHgyOCwgMHg0MCwgMHgwOSwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMiwgMHg2NywgCisgICAgMHg4ZSwgMHhmNCwgMHg1MiwgMHgzMiwgMHgyMiwgMHhjMiwgMHhhZiwgMHhlNSwgMHgzNCwgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgCisgICAgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzMSwgMHgzMiwgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhlZiwgMHhkMiwgCisgICAgMHhhZiwgMHgyMiwgMHhjYSwgMHgyOCwgMHgwYSwgMHgyMiwgMHgwOSwgMHg0MiwgMHgwMCwgMHgzZSwgMHgxMiwgMHg2OSwgMHhjMiwgMHhkYSwgMHgyOCwgMHgyMiwgCisgICAgMHhjMiwgMHhhZiwgMHhlNSwgMHgzNSwgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzMSwgCisgICAgMHg1ZCwgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhlZiwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjYSwgMHgyOCwgMHg3ZSwgCisgICAgMHg0MCwgMHgwMCwgMHgxMiwgMHg2YywgMHg1YiwgMHhkYSwgMHgyOCwgMHgyMiwgMHhjMiwgMHhhZiwgMHhlNSwgMHgyMywgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgCisgICAgMHgwMCwgMHgxMywgMHg1MCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzMSwgMHg4NSwgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgCisgICAgMHg3OCwgMHhlZiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHgzMSwgMHg5MCwgMHg4OSwgMHgyNCwgCisgICAgMHgzMSwgMHhhMCwgMHgzMiwgMHgxMCwgMHgzMiwgMHg4MCwgMHgzMiwgMHhmMCwgMHgzMywgMHg2MCwgMHgzMywgMHhkMCwgMHgzNCwgMHg0MCwgMHgzNCwgMHhiMCwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg4ZiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg0OSwgMHgzMCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHg5ZiwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg5ZiwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhjZiwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhjZiwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxOCwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhjZiwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5MSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MSwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg0YywgMHg4OCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhMSwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhMSwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkMCwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkMCwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxOSwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMCwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5MywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MiwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg0ZiwgMHhlMCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhMywgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhMywgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkMSwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkMSwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxYSwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5NSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MywgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg1MywgMHgzOCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhNSwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhNSwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkMiwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkMiwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxYiwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMiwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5NywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4NCwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg1NiwgMHg5MCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhNywgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhNywgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkMywgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkMywgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxYywgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkMywgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5OSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4NSwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg1OSwgMHhlOCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhOSwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhOSwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkNCwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkNCwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxZCwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkNCwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5YiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4NiwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg1ZCwgMHg0MCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhYiwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhYiwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkNSwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkNSwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxZSwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkNSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg5ZCwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4NywgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg2MCwgMHg5OCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHhhZCwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHhhZCwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhkNiwgMHg4MCwgCisgICAgMHgyZSwgMHg3ZSwgMHg2MywgMHgwMSwgMHhkNiwgMHhhNSwgMHhiZSwgMHgwMCwgMHgyNiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MiwgMHhiNiwgMHg0MCwgMHgxOCwgMHg3NSwgMHgzMSwgMHhiMywgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgxZiwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhkNiwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHhjMiwgMHhhZiwgMHhlNSwgMHgyNCwgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzNSwgCisgICAgMHgzZCwgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgMHg3OCwgMHhlZiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgCisgICAgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHgzNSwgMHg0OCwgMHg4OSwgMHgyNCwgMHgzNSwgMHg1OCwgMHgzNSwgMHg5MiwgMHgzNSwgMHhjYywgMHgzNiwgMHgwNiwgCisgICAgMHgzNiwgMHg0MCwgMHgzNiwgMHg3YSwgMHgzNiwgMHhiNCwgMHgzNiwgMHhlZSwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgCisgICAgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0OSwgMHgzMCwgCisgICAgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgCisgICAgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgyMCwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgCisgICAgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4MSwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgCisgICAgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0YywgMHg4OCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgCisgICAgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgCisgICAgMHgyMSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4MiwgMHgwMCwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgCisgICAgMHgxMiwgMHgxMiwgMHg0ZiwgMHhlMCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgCisgICAgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgyMiwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgCisgICAgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4MywgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgCisgICAgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1MywgMHgzOCwgMHg3ZCwgMHgyMSwgCisgICAgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgCisgICAgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgyMywgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNCwgMHg4NCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgCisgICAgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1NiwgMHg5MCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgCisgICAgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgyNCwgMHhjMCwgCisgICAgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4NSwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg1OSwgMHhlOCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgCisgICAgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgyNSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgCisgICAgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4NiwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgCisgICAgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1ZCwgMHg0MCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgCisgICAgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgCisgICAgMHgxNSwgMHhjMiwgMHgyNiwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgCisgICAgMHg4NywgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgCisgICAgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg2MCwgMHg5OCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHg1ZSwgMHhiMCwgMHgwMSwgMHg3ZSwgMHhhMCwgMHg5MCwgCisgICAgMHgxMiwgMHg2MiwgMHg5MywgMHg0MCwgMHgxMiwgMHg3NSwgMHgzMSwgMHhiOCwgMHgxMiwgMHg3YywgMHgxNSwgMHhjMiwgMHgyNywgMHhjMCwgMHhmMSwgMHg3NSwgCisgICAgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHhjMiwgMHhhZiwgMHhlNSwgMHgzMywgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgCisgICAgMHgwMCwgMHgxMywgMHg1MCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzNywgMHg0NSwgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZiwgCisgICAgMHg3OCwgMHhlZiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgyMiwgMHgzNywgMHg1MCwgMHg4OSwgMHgyNCwgCisgICAgMHgzNywgMHg2MCwgMHgzNywgMHg3ZiwgMHgzNywgMHg5ZSwgMHgzNywgMHhiZCwgMHgzNywgMHhkYywgMHgzNywgMHhmYiwgMHgzOCwgMHgxYSwgMHgzOCwgMHgzOSwgCisgICAgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0OCwgMHgxYiwgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgCisgICAgMHg4MCwgMHgwYywgMHhkMiwgMHgwMSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgCisgICAgMHgyNCwgMHg4MSwgMHgwMCwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0YiwgMHg3MywgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgCisgICAgMHgwYywgMHhkMiwgMHgwMSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgCisgICAgMHg4MiwgMHgwMCwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0ZSwgMHhjYiwgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgMHgwYywgCisgICAgMHhkMiwgMHgwMSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4MywgCisgICAgMHgwMCwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1MiwgMHgyMywgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgMHgwYywgMHhkMiwgCisgICAgMHgwMSwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4NCwgMHgwMCwgCisgICAgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1NSwgMHg3YiwgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgMHgwYywgMHhkMiwgMHgwMSwgCisgICAgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4NSwgMHgwMCwgMHhjYSwgCisgICAgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1OCwgMHhkMywgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgMHgwYywgMHhkMiwgMHgwMSwgMHhjMCwgCisgICAgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4NiwgMHgwMCwgMHhjYSwgMHgxOSwgCisgICAgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1YywgMHgyYiwgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgMHgwYywgMHhkMiwgMHgwMSwgMHhjMCwgMHhmMSwgCisgICAgMHg3NSwgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHg3ZSwgMHgyNCwgMHg4NywgMHgwMCwgMHhjYSwgMHgxOSwgMHg3ZCwgCisgICAgMHgxMiwgMHgxMiwgMHg1ZiwgMHg4MywgMHhkYSwgMHgxOSwgMHgxMCwgMHgwNCwgMHgwMiwgMHg4MCwgMHgwYywgMHhkMiwgMHgwMSwgMHhjMCwgMHhmMSwgMHg3NSwgCisgICAgMHhmMSwgMHgwMSwgMHgxMiwgMHg2ZiwgMHhkOSwgMHhkMCwgMHhmMSwgMHgyMiwgMHhjMiwgMHhhZiwgMHhjMCwgMHhmMSwgMHg3NSwgMHhmMSwgMHgwMSwgMHhhOSwgCisgICAgMHgzMiwgMHhmMiwgMHgxYSwgMHg3ZSwgMHgwNywgMHgwMSwgMHhlMSwgMHhiZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxMCwgMHhlNSwgMHhmNSwgMHgzMywgCisgICAgMHg4MiwgMHhlNywgMHg0MCwgMHgwOSwgMHg4NSwgMHgzMSwgMHgzMSwgMHgxMiwgMHg3YywgMHgxNSwgMHg3NSwgMHhmNiwgMHgwMCwgMHhkMCwgMHhmMSwgMHhkMiwgCisgICAgMHhhZiwgMHgyMiwgCisKKy8vIFNlZ21lbnQgIzE1LCBTdGFydCBBZGRyZXNzIDAwZmY0MDAwLCBMZW5ndGggMTUzODEKKzB4ZmYsMHgwMCwweDAwLDB4NDAsMHgxNSwweDNjLAorICAgIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTQsIDB4N2YsIDB4ZjgsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2QsIDB4MzEsIDB4MGIsIDB4MWEsIAorICAgIDB4NTAsIDB4MWIsIDB4MGEsIDB4NTAsIDB4N2UsIDB4MTQsIDB4NDAsIDB4MWIsIDB4MDIsIDB4NDAsIDB4NmEsIDB4N2UsIDB4ZjgsIDB4MDAsIDB4NmYsIDB4ZDIsIAorICAgIDB4MDQsIDB4YzIsIDB4OTQsIDB4ZDIsIDB4OTUsIDB4N2UsIDB4ZjQsIDB4NDAsIDB4MmMsIDB4MDIsIDB4NDAsIDB4N2MsIDB4MTIsIDB4N2QsIDB4MzAsIDB4ZjUsIAorICAgIDB4MmYsIDB4N2EsIDB4YTEsIDB4MzAsIDB4N2EsIDB4MTEsIDB4NmUsIDB4MTIsIDB4NzUsIDB4Y2EsIDB4MTIsIDB4NDAsIDB4ZGMsIDB4N2UsIDB4YjMsIDB4M2YsIAorICAgIDB4ZjEsIDB4NjAsIDB4MDMsIDB4MTIsIDB4NDMsIDB4ZDQsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4NzYsIDB4NmYsIDB4ZDIsIDB4YWYsIDB4MDIsIDB4MzAsIAorICAgIDB4MDAsIDB4N2UsIDB4MDQsIDB4MDAsIDB4ZmYsIDB4N2UsIDB4MTgsIDB4NDAsIDB4NWYsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDEsIDB4ODksIDB4MTgsIDB4YTksIAorICAgIDB4MjUsIDB4ODcsIDB4MDMsIDB4YTksIDB4ZDUsIDB4ODcsIDB4ZDIsIDB4OTMsIDB4ODksIDB4MDgsIDB4N2UsIDB4MDQsIDB4MDAsIDB4ZmYsIDB4N2UsIDB4MTgsIAorICAgIDB4NDAsIDB4NzgsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDEsIDB4ODksIDB4MTgsIDB4YzIsIDB4OTMsIDB4ODksIDB4MDgsIDB4N2UsIDB4MDgsIDB4MDAsIDB4MjAsIAorICAgIDB4N2UsIDB4NDQsIDB4MDQsIDB4MDAsIDB4N2UsIDB4NDAsIDB4MDAsIDB4N2UsIDB4ZTQsIDB4NDAsIDB4OGUsIDB4MDIsIDB4N2MsIDB4MzAsIDB4N2UsIDB4MDgsIAorICAgIDB4MDEsIDB4NmYsIDB4N2UsIDB4NDQsIDB4MjgsIDB4N2MsIDB4N2UsIDB4NDAsIDB4MDAsIDB4N2UsIDB4ZTQsIDB4NDAsIDB4YTAsIDB4MDIsIDB4N2MsIDB4MzAsIAorICAgIDB4N2UsIDB4MDgsIDB4MDAsIDB4NmYsIDB4N2UsIDB4NDQsIDB4MDEsIDB4MDAsIDB4N2UsIDB4NDAsIDB4NTMsIDB4N2UsIDB4ZTQsIDB4NDAsIDB4YjIsIDB4MDIsIAorICAgIDB4N2MsIDB4MzAsIDB4NzUsIDB4NmQsIDB4MjAsIDB4NzUsIDB4NmMsIDB4MzAsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDgsIDB4NzUsIDB4NmEsIDB4NTgsIDB4NzUsIAorICAgIDB4NmIsIDB4MDgsIDB4NzUsIDB4NjcsIDB4MDgsIDB4NzUsIDB4NjksIDB4MDEsIDB4NzUsIDB4ODksIDB4MDEsIDB4NzUsIDB4OGEsIDB4MDEsIDB4NzUsIDB4OGMsIAorICAgIDB4MDAsIDB4ZDIsIDB4OGMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDIsIDB4N2EsIDB4MDUsIDB4NTgsIDB4ODksIDB4ZjQsIDB4NzUsIDB4YjcsIDB4N2YsIDB4NzUsIAorICAgIDB4YjgsIDB4N2YsIDB4NzUsIDB4YjMsIDB4MDcsIDB4NzUsIDB4YjIsIDB4MDcsIDB4ZDIsIDB4YTksIDB4MjIsIDB4ZDIsIDB4OTIsIDB4ZTQsIDB4ZDUsIDB4ZTAsIAorICAgIDB4ZmQsIDB4YzIsIDB4OTIsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MmYsIDB4N2UsIDB4YTAsIDB4MDgsIDB4MTksIDB4YTIsIDB4MDAsIAorICAgIDB4MTAsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZjIsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTIsIDB4NDEsIDB4N2UsIDB4MGIsIDB4MjAsIAorICAgIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZjYsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIAorICAgIDB4MDAsIDB4MGMsIDB4NzQsIDB4MTAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4NzQsIDB4ODAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NTQsIAorICAgIDB4MDAsIDB4MDIsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDQsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIAorICAgIDB4NzQsIDB4MDcsIDB4YTksIDB4MjAsIDB4MzAsIDB4MGIsIDB4YTksIDB4MzUsIDB4MzAsIDB4MDUsIDB4YmUsIDB4MjAsIDB4MDEsIDB4MjgsIDB4MDIsIDB4NzQsIAorICAgIDB4MGYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4YTksIDB4MzMsIDB4MzAsIDB4MTgsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4NzQsIAorICAgIDB4MjgsIDB4YTksIDB4MjAsIDB4MzAsIDB4MDIsIDB4NzQsIDB4MjAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4NzQsIDB4MDMsIDB4MTksIDB4YjAsIDB4MDAsIAorICAgIDB4MGMsIDB4NzQsIDB4YTcsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4NzQsIDB4MGMsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4MjIsIDB4N2UsIDB4MDQsIAorICAgIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4ZTQsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MTAsIDB4NTQsIDB4MDgsIDB4MTksIAorICAgIDB4YjAsIDB4MDAsIDB4MTAsIDB4NzQsIDB4YTcsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIAorICAgIDB4MjIsIDB4NDEsIDB4YTUsIDB4ODksIDB4MjQsIDB4NDEsIDB4YjUsIDB4NDEsIDB4ZDQsIDB4NDEsIDB4ZjMsIDB4NDIsIDB4MTIsIDB4NDIsIDB4MzEsIDB4NDIsIAorICAgIDB4NTAsIDB4NDIsIDB4NmYsIDB4NDIsIDB4OGUsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MTgsIDB4YzIsIDB4MjAsIDB4YzIsIDB4MDgsIDB4N2UsIDB4MDQsIDB4MDksIAorICAgIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmYsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2YsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OGYsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4OWYsIDB4MjIsIDB4YzIsIDB4MTEsIDB4YzIsIDB4MTksIDB4YzIsIDB4MjEsIDB4YzIsIDB4MDksIDB4N2UsIDB4MDQsIDB4MGQsIDB4ZTMsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzEsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODEsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTEsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4YTEsIDB4MjIsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MWEsIDB4YzIsIDB4MjIsIDB4YzIsIDB4MGEsIDB4N2UsIDB4MDQsIDB4MTEsIDB4ZTMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NzMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODMsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTMsIDB4N2EsIDB4MDcsIDB4MDEsIAorICAgIDB4YTMsIDB4MjIsIDB4YzIsIDB4MTMsIDB4YzIsIDB4MWIsIDB4YzIsIDB4MjMsIDB4YzIsIDB4MGIsIDB4N2UsIDB4MDQsIDB4MTUsIDB4ZTMsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4NzUsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODUsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTUsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTUsIAorICAgIDB4MjIsIDB4YzIsIDB4MTQsIDB4YzIsIDB4MWMsIDB4YzIsIDB4MjQsIDB4YzIsIDB4MGMsIDB4N2UsIDB4MDQsIDB4MTksIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIAorICAgIDB4NzcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODcsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTcsIDB4MjIsIAorICAgIDB4YzIsIDB4MTUsIDB4YzIsIDB4MWQsIDB4YzIsIDB4MjUsIDB4YzIsIDB4MGQsIDB4N2UsIDB4MDQsIDB4MWQsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzksIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODksIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTksIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTksIDB4MjIsIDB4YzIsIAorICAgIDB4MTYsIDB4YzIsIDB4MWUsIDB4YzIsIDB4MjYsIDB4YzIsIDB4MGUsIDB4N2UsIDB4MDQsIDB4MjEsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2IsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4OGIsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OWIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YWIsIDB4MjIsIDB4YzIsIDB4MTcsIAorICAgIDB4YzIsIDB4MWYsIDB4YzIsIDB4MjcsIDB4YzIsIDB4MGYsIDB4N2UsIDB4MDQsIDB4MjUsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2QsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4OGQsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OWQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YWQsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIAorICAgIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4NDIsIDB4YjgsIDB4ODksIDB4MjQsIDB4NDIsIDB4YzgsIDB4NDIsIDB4ZTksIDB4NDMsIDB4MGEsIDB4NDMsIDB4MmIsIAorICAgIDB4NDMsIDB4NGMsIDB4NDMsIDB4NmQsIDB4NDMsIDB4OGUsIDB4NDMsIDB4YWYsIDB4MzAsIDB4NTAsIDB4MDcsIDB4MjAsIDB4NjgsIDB4MDQsIDB4YzIsIDB4MjgsIAorICAgIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDAsIDB4MDcsIDB4MjAsIDB4NjAsIDB4MDQsIDB4YzIsIDB4MjgsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NDgsIDB4MDcsIDB4MjAsIAorICAgIDB4NTgsIDB4MDQsIDB4YzIsIDB4MjgsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MjgsIDB4MjIsIDB4MzAsIDB4NTEsIDB4MDcsIDB4MjAsIDB4NjksIDB4MDQsIDB4YzIsIAorICAgIDB4MjksIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDEsIDB4MDcsIDB4MjAsIDB4NjEsIDB4MDQsIDB4YzIsIDB4MjksIDB4ODAsIDB4MGMsIDB4MzAsIDB4NDksIDB4MDcsIAorICAgIDB4MjAsIDB4NTksIDB4MDQsIDB4YzIsIDB4MjksIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MjksIDB4MjIsIDB4MzAsIDB4NTIsIDB4MDcsIDB4MjAsIDB4NmEsIDB4MDQsIAorICAgIDB4YzIsIDB4MmEsIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDIsIDB4MDcsIDB4MjAsIDB4NjIsIDB4MDQsIDB4YzIsIDB4MmEsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGEsIAorICAgIDB4MDcsIDB4MjAsIDB4NWEsIDB4MDQsIDB4YzIsIDB4MmEsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmEsIDB4MjIsIDB4MzAsIDB4NTMsIDB4MDcsIDB4MjAsIDB4NmIsIAorICAgIDB4MDQsIDB4YzIsIDB4MmIsIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDMsIDB4MDcsIDB4MjAsIDB4NjMsIDB4MDQsIDB4YzIsIDB4MmIsIDB4ODAsIDB4MGMsIDB4MzAsIAorICAgIDB4NGIsIDB4MDcsIDB4MjAsIDB4NWIsIDB4MDQsIDB4YzIsIDB4MmIsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmIsIDB4MjIsIDB4MzAsIDB4NTQsIDB4MDcsIDB4MjAsIAorICAgIDB4NmMsIDB4MDQsIDB4YzIsIDB4MmMsIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDQsIDB4MDcsIDB4MjAsIDB4NjQsIDB4MDQsIDB4YzIsIDB4MmMsIDB4ODAsIDB4MGMsIAorICAgIDB4MzAsIDB4NGMsIDB4MDcsIDB4MjAsIDB4NWMsIDB4MDQsIDB4YzIsIDB4MmMsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmMsIDB4MjIsIDB4MzAsIDB4NTUsIDB4MDcsIAorICAgIDB4MjAsIDB4NmQsIDB4MDQsIDB4YzIsIDB4MmQsIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDUsIDB4MDcsIDB4MjAsIDB4NjUsIDB4MDQsIDB4YzIsIDB4MmQsIDB4ODAsIAorICAgIDB4MGMsIDB4MzAsIDB4NGQsIDB4MDcsIDB4MjAsIDB4NWQsIDB4MDQsIDB4YzIsIDB4MmQsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmQsIDB4MjIsIDB4MzAsIDB4NTYsIAorICAgIDB4MDcsIDB4MjAsIDB4NmUsIDB4MDQsIDB4YzIsIDB4MmUsIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDYsIDB4MDcsIDB4MjAsIDB4NjYsIDB4MDQsIDB4YzIsIDB4MmUsIAorICAgIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGUsIDB4MDcsIDB4MjAsIDB4NWUsIDB4MDQsIDB4YzIsIDB4MmUsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmUsIDB4MjIsIDB4MzAsIAorICAgIDB4NTcsIDB4MDcsIDB4MjAsIDB4NmYsIDB4MDQsIDB4YzIsIDB4MmYsIDB4ODAsIDB4MTYsIDB4MzAsIDB4NDcsIDB4MDcsIDB4MjAsIDB4NjcsIDB4MDQsIDB4YzIsIAorICAgIDB4MmYsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGYsIDB4MDcsIDB4MjAsIDB4NWYsIDB4MDQsIDB4YzIsIDB4MmYsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmYsIDB4MjIsIAorICAgIDB4NDQsIDB4MzgsIDB4NDMsIDB4ZTUsIDB4YmUsIDB4YjAsIDB4MDIsIDB4NDAsIDB4MDEsIDB4MjIsIDB4MjMsIDB4MGEsIDB4NWIsIDB4NDksIDB4NTUsIDB4NDMsIAorICAgIDB4ZDAsIDB4OTksIDB4NTQsIDB4ZDMsIDB4MjIsIDB4YTksIDB4YzUsIDB4ODcsIDB4MTIsIDB4NDQsIDB4NDMsIDB4N2UsIDB4MDQsIDB4MDUsIDB4ZTMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4ZDcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZDksIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGQsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MDQsIDB4NzQsIDB4YWQsIDB4N2EsIDB4MDUsIDB4NjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4NzUsIDB4ZTEsIDB4MWYsIAorICAgIDB4NzUsIDB4ZTQsIDB4MDQsIDB4NzUsIDB4ZjQsIDB4MDQsIDB4NzUsIDB4ZjEsIDB4MDIsIDB4NzUsIDB4ZTEsIDB4MDMsIDB4NzUsIDB4ZTQsIDB4MDQsIDB4NzUsIAorICAgIDB4ZjQsIDB4MDQsIDB4NDMsIDB4YTIsIDB4MWMsIDB4MTIsIDB4NDAsIDB4ZWIsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTIsIDB4NDEsIDB4OWEsIDB4MGIsIDB4MjAsIAorICAgIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZjYsIDB4ZDIsIDB4YTgsIDB4MjIsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4NDQsIDB4NDMsIDB4ZDIsIDB4OTIsIAorICAgIDB4YzIsIDB4YTgsIDB4MjIsIDB4NzUsIDB4YTMsIDB4MDAsIDB4NTMsIDB4YTIsIDB4MDMsIDB4NzUsIDB4YzEsIDB4MDAsIDB4NTMsIDB4YzAsIDB4MDMsIDB4N2UsIAorICAgIDB4MDAsIDB4MDUsIDB4N2EsIDB4MDEsIDB4ZjEsIDB4NDMsIDB4ZjQsIDB4ODAsIDB4NDMsIDB4ZTQsIDB4ODAsIDB4ZTUsIDB4ZjIsIDB4NTQsIDB4N2YsIDB4NDQsIAorICAgIDB4MDgsIDB4ZjUsIDB4ZjIsIDB4ZTUsIDB4ZTIsIDB4NTQsIDB4N2YsIDB4NDQsIDB4MDgsIDB4ZjUsIDB4ZTIsIDB4NzUsIDB4ZTEsIDB4MTAsIDB4YTUsIDB4ZDgsIAorICAgIDB4ZTEsIDB4MjIsIDB4Y2EsIDB4MDksIDB4MTIsIDB4MzAsIDB4MjAsIDB4MTAsIDB4MDEsIDB4MTIsIDB4ZDUsIDB4NjcsIDB4MWUsIDB4NjMsIDB4NjksIDB4MDEsIAorICAgIDB4N2UsIDB4MDAsIDB4NmEsIDB4MmUsIDB4MDEsIDB4NjksIDB4YTUsIDB4ZTYsIDB4ZjUsIDB4NjcsIDB4ODAsIDB4MTIsIDB4MjAsIDB4MDIsIDB4MWUsIDB4NzUsIAorICAgIDB4NjksIDB4MDAsIDB4ODUsIDB4NmEsIDB4NjcsIDB4ZDIsIDB4MDIsIDB4NzQsIDB4MDAsIDB4ODAsIDB4MGQsIDB4MzAsIDB4MDIsIDB4MGYsIDB4YzIsIDB4MDIsIAorICAgIDB4N2UsIDB4MDAsIDB4NmMsIDB4MmUsIDB4MDEsIDB4NjksIDB4YTUsIDB4ZTYsIDB4NTMsIDB4OTAsIDB4Y2YsIDB4NDIsIDB4OTAsIDB4ZGEsIDB4MDksIDB4MzIsIAorICAgIDB4YzAsIDB4ZDAsIDB4YzAsIDB4ZDEsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIDB4ZDIsIDB4MDEsIAorICAgIDB4NzUsIDB4MzEsIDB4ODksIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIAorICAgIDB4MDMsIDB4MDIsIDB4NDUsIDB4NGYsIDB4MjAsIDB4NzgsIDB4NWEsIDB4YTUsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MDMsIAorICAgIDB4MDIsIDB4NDUsIDB4NjcsIDB4MjAsIDB4NzksIDB4NGIsIDB4YTUsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIAorICAgIDB4NDUsIDB4N2YsIDB4YTUsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4NDUsIDB4OTcsIDB4MjAsIDB4N2EsIAorICAgIDB4MzAsIDB4YTUsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4NDUsIDB4YWYsIDB4YTUsIDB4MGEsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4NDUsIDB4YzcsIDB4YTUsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIAorICAgIDB4ZTAsIDB4MDMsIDB4MDIsIDB4NDUsIDB4ZGYsIDB4YTUsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4NDUsIAorICAgIDB4ZjcsIDB4MzAsIDB4MDQsIDB4MGMsIDB4YzIsIDB4MDQsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIAorICAgIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4ZDAsIDB4ZDEsIDB4ZDAsIDB4ZDAsIDB4MzIsIDB4NzUsIAorICAgIDB4MzEsIDB4ODAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjMsIAorICAgIDB4MmIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIDB4MzEsIDB4ODEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIAorICAgIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjMsIDB4NmIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIAorICAgIDB4MzEsIDB4ODIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjMsIAorICAgIDB4YWIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIDB4MzEsIDB4ODMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIAorICAgIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjMsIDB4ZWIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIAorICAgIDB4MzEsIDB4ODQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjQsIAorICAgIDB4MmIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIDB4MzEsIDB4ODUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIAorICAgIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjQsIDB4NmIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIAorICAgIDB4MzEsIDB4ODYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjQsIAorICAgIDB4YWIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4NzUsIDB4MzEsIDB4ODcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTQsIDB4M2UsIDB4MGEsIAorICAgIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjQsIDB4ZWIsIDB4Y2EsIDB4MDYsIDB4YzYsIDB4NDQsIDB4ODksIDB4NTQsIDB4MTAsIAorICAgIDB4MDgsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MjgsIDB4MDMsIDB4ZDIsIDB4MDgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIAorICAgIDB4MTQsIDB4ODAsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MjgsIDB4MDMsIDB4ZDIsIDB4MDgsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NDksIDB4MzAsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MDgsIAorICAgIDB4MjIsIDB4MzAsIDB4MzAsIDB4NDksIDB4ZDIsIDB4NzAsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OGYsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YWYsIDB4OWQsIDB4MzIsIAorICAgIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDgsIDB4N2EsIDB4MDUsIDB4NDgsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OGYsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4NmYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MGQsIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NmYsIAorICAgIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIAorICAgIDB4NzAsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzAsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OGYsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YWYsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4YWYsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OGYsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDgsIDB4N2EsIDB4MDUsIDB4NDgsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4OGYsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NmYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MGQsIDB4ZTIsIDB4MzgsIAorICAgIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NmYsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MGQsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIDB4MmIsIDB4N2UsIDB4MzQsIDB4MDksIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIAorICAgIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NmYsIDB4MTIsIDB4NjUsIDB4MmIsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NDYsIDB4N2YsIAorICAgIDB4MjIsIDB4ZDIsIDB4MDgsIDB4N2UsIDB4MDQsIDB4MDksIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmYsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2YsIDB4NzUsIAorICAgIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YmYsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIAorICAgIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YmYsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIAorICAgIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIAorICAgIDB4MzAsIDB4MzgsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTAsIDB4MjIsIAorICAgIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIAorICAgIDB4MDAsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YmYsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIAorICAgIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIAorICAgIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIAorICAgIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDAsIDB4N2EsIDB4NjksIAorICAgIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIAorICAgIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIAorICAgIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIAorICAgIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIAorICAgIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIAorICAgIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIAorICAgIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIAorICAgIDB4MDIsIDB4NDcsIDB4ZTMsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIAorICAgIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzgsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIAorICAgIDB4ZDIsIDB4MTAsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NDcsIAorICAgIDB4ZTMsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NDksIDB4MzAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIAorICAgIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NjgsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjAsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NjAsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTgsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIDB4MTIsIAorICAgIDB4NDIsIDB4YzgsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIAorICAgIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIAorICAgIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIAorICAgIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NDgsIDB4MzUsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIDB4MDksIDB4MDEsIDB4MjIsIDB4MjAsIDB4MjksIDB4MDMsIDB4ZDIsIDB4MDksIAorICAgIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTQsIDB4ODEsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MjksIDB4MDMsIAorICAgIDB4ZDIsIDB4MDksIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIAorICAgIDB4MTIsIDB4NGMsIDB4ODgsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MDksIDB4MjIsIDB4MzAsIDB4MzEsIDB4NDksIDB4ZDIsIDB4NzEsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4OTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjEsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NGEsIDB4N2EsIAorICAgIDB4MDUsIDB4NGEsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzEsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIAorICAgIDB4MTEsIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzEsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIAorICAgIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIDB4NzEsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzEsIDB4MmQsIDB4MjMsIDB4NjgsIAorICAgIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTEsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIAorICAgIDB4MjcsIDB4MDEsIDB4YjEsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTEsIDB4OWQsIDB4MzIsIDB4N2QsIAorICAgIDB4MDIsIDB4MmUsIDB4MDUsIDB4NGEsIDB4N2EsIDB4MDUsIDB4NGEsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzEsIDB4N2QsIAorICAgIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTEsIDB4ZTIsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzEsIDB4NzUsIDB4MzEsIDB4OTQsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MTEsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIAorICAgIDB4MmIsIDB4N2UsIDB4MzQsIDB4MGQsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzEsIDB4MTIsIDB4NjUsIDB4MmIsIAorICAgIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NDksIDB4ZDcsIDB4MjIsIDB4ZDIsIDB4MDksIDB4N2UsIDB4MDQsIDB4MGQsIDB4ZTMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NzEsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODEsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YzEsIAorICAgIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIAorICAgIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIAorICAgIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YzEsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIAorICAgIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzksIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIAorICAgIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTEsIDB4MjIsIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YzEsIDB4OWUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIAorICAgIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIAorICAgIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIAorICAgIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDEsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIAorICAgIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIAorICAgIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIAorICAgIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIAorICAgIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIAorICAgIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIAorICAgIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NGIsIDB4M2IsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzksIDB4MGEsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTEsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIAorICAgIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NGIsIDB4M2IsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NGMsIDB4ODgsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIAorICAgIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjksIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjksIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIAorICAgIDB4MDQsIDB4ZDIsIDB4NTksIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTksIDB4MTIsIDB4NDIsIDB4ZTksIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIAorICAgIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIAorICAgIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIAorICAgIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NGIsIAorICAgIDB4OGQsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIAorICAgIDB4MGEsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmEsIDB4MDMsIDB4ZDIsIDB4MGEsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIAorICAgIDB4MTQsIDB4ODIsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmEsIDB4MDMsIDB4ZDIsIDB4MGEsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NGYsIDB4ZTAsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MGEsIAorICAgIDB4MjIsIDB4MzAsIDB4MzIsIDB4NDksIDB4ZDIsIDB4NzIsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTMsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjMsIDB4OWQsIDB4MzIsIAorICAgIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NGMsIDB4N2EsIDB4MDUsIDB4NGMsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTMsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4NzMsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTUsIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzMsIAorICAgIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIAorICAgIDB4NzIsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzIsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OTMsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YjMsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4YjMsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTMsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NGMsIDB4N2EsIDB4MDUsIDB4NGMsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4OTMsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzMsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTUsIDB4ZTIsIDB4MzgsIAorICAgIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzMsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MTUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIDB4MmIsIDB4N2UsIDB4MzQsIDB4MTEsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIAorICAgIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzMsIDB4MTIsIDB4NjUsIDB4MmIsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NGQsIDB4MmYsIAorICAgIDB4MjIsIDB4ZDIsIDB4MGEsIDB4N2UsIDB4MDQsIDB4MTEsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODMsIDB4NzUsIAorICAgIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YzMsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIAorICAgIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YzMsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIAorICAgIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIAorICAgIDB4MzAsIDB4M2EsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTIsIDB4MjIsIAorICAgIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIAorICAgIDB4MDIsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YzMsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIAorICAgIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIAorICAgIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIAorICAgIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDIsIDB4N2EsIDB4NjksIAorICAgIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIAorICAgIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIAorICAgIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIAorICAgIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIAorICAgIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIAorICAgIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIAorICAgIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIAorICAgIDB4MDIsIDB4NGUsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIAorICAgIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2EsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIAorICAgIDB4ZDIsIDB4MTIsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NGUsIAorICAgIDB4OTMsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NGYsIDB4ZTAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIAorICAgIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NmEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjIsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NjIsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWEsIDB4MTIsIAorICAgIDB4NDMsIDB4MGEsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIAorICAgIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIAorICAgIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIAorICAgIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NGUsIDB4ZTUsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIDB4MGIsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmIsIDB4MDMsIDB4ZDIsIDB4MGIsIAorICAgIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTQsIDB4ODMsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmIsIDB4MDMsIAorICAgIDB4ZDIsIDB4MGIsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIAorICAgIDB4MTIsIDB4NTMsIDB4MzgsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MGIsIDB4MjIsIDB4MzAsIDB4MzMsIDB4NDksIDB4ZDIsIDB4NzMsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4OTUsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjUsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NGUsIDB4N2EsIAorICAgIDB4MDUsIDB4NGUsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzUsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIAorICAgIDB4MTksIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzUsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIAorICAgIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIDB4NzMsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzMsIDB4MmQsIDB4MjMsIDB4NjgsIAorICAgIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTUsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIAorICAgIDB4MjcsIDB4MDEsIDB4YjUsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTUsIDB4OWQsIDB4MzIsIDB4N2QsIAorICAgIDB4MDIsIDB4MmUsIDB4MDUsIDB4NGUsIDB4N2EsIDB4MDUsIDB4NGUsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzUsIDB4N2QsIAorICAgIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTksIDB4ZTIsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzUsIDB4NzUsIDB4MzEsIDB4OTQsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MTksIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIAorICAgIDB4MmIsIDB4N2UsIDB4MzQsIDB4MTUsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzUsIDB4MTIsIDB4NjUsIDB4MmIsIAorICAgIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NTAsIDB4ODcsIDB4MjIsIDB4ZDIsIDB4MGIsIDB4N2UsIDB4MDQsIDB4MTUsIDB4ZTMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NzUsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODUsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YzUsIAorICAgIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIAorICAgIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIAorICAgIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDMsIDB4MDAsIDB4MmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YzUsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIAorICAgIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2IsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIAorICAgIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTMsIDB4MjIsIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDMsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YzUsIDB4OWUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIAorICAgIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIAorICAgIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIAorICAgIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDMsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIAorICAgIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIAorICAgIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIAorICAgIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIAorICAgIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIAorICAgIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIAorICAgIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NTEsIDB4ZWIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2IsIDB4MGEsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTMsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIAorICAgIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NTEsIDB4ZWIsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NTMsIDB4MzgsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIAorICAgIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmIsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjMsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIAorICAgIDB4MDQsIDB4ZDIsIDB4NWIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWIsIDB4MTIsIDB4NDMsIDB4MmIsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIAorICAgIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIAorICAgIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIAorICAgIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NTIsIAorICAgIDB4M2QsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIAorICAgIDB4MGMsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmMsIDB4MDMsIDB4ZDIsIDB4MGMsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIAorICAgIDB4MTQsIDB4ODQsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmMsIDB4MDMsIDB4ZDIsIDB4MGMsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NTYsIDB4OTAsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MGMsIAorICAgIDB4MjIsIDB4MzAsIDB4MzQsIDB4NDksIDB4ZDIsIDB4NzQsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTcsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjcsIDB4OWQsIDB4MzIsIAorICAgIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTAsIDB4N2EsIDB4MDUsIDB4NTAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTcsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4NzcsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MWQsIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzcsIAorICAgIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIAorICAgIDB4NzQsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzQsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OTcsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YjcsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4YjcsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTcsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTAsIDB4N2EsIDB4MDUsIDB4NTAsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4OTcsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzcsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MWQsIDB4ZTIsIDB4MzgsIAorICAgIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzcsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MWQsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIDB4MmIsIDB4N2UsIDB4MzQsIDB4MTksIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIAorICAgIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzcsIDB4MTIsIDB4NjUsIDB4MmIsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NTMsIDB4ZGYsIAorICAgIDB4MjIsIDB4ZDIsIDB4MGMsIDB4N2UsIDB4MDQsIDB4MTksIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODcsIDB4NzUsIAorICAgIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YzcsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIAorICAgIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YzcsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIAorICAgIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIAorICAgIDB4MzAsIDB4M2MsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTQsIDB4MjIsIAorICAgIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIAorICAgIDB4MDQsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YzcsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIAorICAgIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIAorICAgIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIAorICAgIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDQsIDB4N2EsIDB4NjksIAorICAgIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIAorICAgIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIAorICAgIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIAorICAgIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIAorICAgIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIAorICAgIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIAorICAgIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIAorICAgIDB4MDIsIDB4NTUsIDB4NDMsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIAorICAgIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2MsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIAorICAgIDB4ZDIsIDB4MTQsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NTUsIAorICAgIDB4NDMsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NTYsIDB4OTAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIAorICAgIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NmMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmMsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjQsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NjQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWMsIDB4MTIsIAorICAgIDB4NDMsIDB4NGMsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIAorICAgIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIAorICAgIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIAorICAgIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NTUsIDB4OTUsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIDB4MGQsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmQsIDB4MDMsIDB4ZDIsIDB4MGQsIAorICAgIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTQsIDB4ODUsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmQsIDB4MDMsIAorICAgIDB4ZDIsIDB4MGQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIAorICAgIDB4MTIsIDB4NTksIDB4ZTgsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MGQsIDB4MjIsIDB4MzAsIDB4MzUsIDB4NDksIDB4ZDIsIDB4NzUsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4OTksIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjksIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTIsIDB4N2EsIAorICAgIDB4MDUsIDB4NTIsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTksIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIAorICAgIDB4MjEsIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzksIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIAorICAgIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIDB4NzUsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzUsIDB4MmQsIDB4MjMsIDB4NjgsIAorICAgIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTksIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIAorICAgIDB4MjcsIDB4MDEsIDB4YjksIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjksIDB4N2UsIDB4MzcsIDB4MDEsIDB4OTksIDB4OWQsIDB4MzIsIDB4N2QsIAorICAgIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTIsIDB4N2EsIDB4MDUsIDB4NTIsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OTksIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzksIDB4N2QsIAorICAgIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjEsIDB4ZTIsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzksIDB4NzUsIDB4MzEsIDB4OTQsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MjEsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIAorICAgIDB4MmIsIDB4N2UsIDB4MzQsIDB4MWQsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NzksIDB4MTIsIDB4NjUsIDB4MmIsIAorICAgIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NTcsIDB4MzcsIDB4MjIsIDB4ZDIsIDB4MGQsIDB4N2UsIDB4MDQsIDB4MWQsIDB4ZTMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NzksIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODksIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YzksIAorICAgIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIAorICAgIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIAorICAgIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDUsIDB4MDAsIDB4MmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YzksIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIAorICAgIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2QsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIAorICAgIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDUsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YzksIDB4OWUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIAorICAgIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIAorICAgIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIAorICAgIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDUsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIAorICAgIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIAorICAgIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIAorICAgIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIAorICAgIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIAorICAgIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIAorICAgIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NTgsIDB4OWIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2QsIDB4MGEsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIAorICAgIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NTgsIDB4OWIsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NTksIDB4ZTgsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIAorICAgIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmQsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIAorICAgIDB4MDQsIDB4ZDIsIDB4NWQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWQsIDB4MTIsIDB4NDMsIDB4NmQsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIAorICAgIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIAorICAgIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIAorICAgIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NTgsIAorICAgIDB4ZWQsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIAorICAgIDB4MGUsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmUsIDB4MDMsIDB4ZDIsIDB4MGUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIAorICAgIDB4MTQsIDB4ODYsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmUsIDB4MDMsIDB4ZDIsIDB4MGUsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NWQsIDB4NDAsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MGUsIAorICAgIDB4MjIsIDB4MzAsIDB4MzYsIDB4NDksIDB4ZDIsIDB4NzYsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OWIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YmIsIDB4OWQsIDB4MzIsIAorICAgIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTQsIDB4N2EsIDB4MDUsIDB4NTQsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OWIsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4N2IsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjUsIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4N2IsIAorICAgIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIAorICAgIDB4NzYsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzYsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OWIsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YmIsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4YmIsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OWIsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTQsIDB4N2EsIDB4MDUsIDB4NTQsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4OWIsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2IsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjUsIDB4ZTIsIDB4MzgsIAorICAgIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4N2IsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MjUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIDB4MmIsIDB4N2UsIDB4MzQsIDB4MjEsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIAorICAgIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4N2IsIDB4MTIsIDB4NjUsIDB4MmIsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NWEsIDB4OGYsIAorICAgIDB4MjIsIDB4ZDIsIDB4MGUsIDB4N2UsIDB4MDQsIDB4MjEsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2IsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OGIsIDB4NzUsIAorICAgIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIAorICAgIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDYsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4Y2IsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIAorICAgIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIAorICAgIDB4MzAsIDB4M2UsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTYsIDB4MjIsIAorICAgIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIAorICAgIDB4MDYsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4Y2IsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIAorICAgIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIAorICAgIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIAorICAgIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDYsIDB4N2EsIDB4NjksIAorICAgIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIAorICAgIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIAorICAgIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIAorICAgIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIAorICAgIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIAorICAgIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIAorICAgIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIAorICAgIDB4MDIsIDB4NWIsIDB4ZjMsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIAorICAgIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2UsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIAorICAgIDB4ZDIsIDB4MTYsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NWIsIAorICAgIDB4ZjMsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NWQsIDB4NDAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIAorICAgIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NmUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjYsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NjYsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWUsIDB4MTIsIAorICAgIDB4NDMsIDB4OGUsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIAorICAgIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIAorICAgIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIAorICAgIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NWMsIDB4NDUsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIAorICAgIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4MTAsIDB4MGYsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmYsIDB4MDMsIDB4ZDIsIDB4MGYsIAorICAgIDB4MjIsIDB4NzUsIDB4MzEsIDB4YTcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTQsIDB4ODcsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmYsIDB4MDMsIAorICAgIDB4ZDIsIDB4MGYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIAorICAgIDB4MTIsIDB4NjAsIDB4OTgsIDB4MjAsIDB4ZTYsIDB4MDMsIDB4ZDIsIDB4MGYsIDB4MjIsIDB4MzAsIDB4MzcsIDB4NDksIDB4ZDIsIDB4NzcsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4OWQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YmQsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTYsIDB4N2EsIAorICAgIDB4MDUsIDB4NTYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OWQsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2QsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIAorICAgIDB4MjksIDB4ZTIsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4N2QsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIAorICAgIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NjUsIDB4MmIsIDB4MTAsIDB4NzcsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NzcsIDB4MmQsIDB4MjMsIDB4NjgsIAorICAgIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWQsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIAorICAgIDB4MjcsIDB4MDEsIDB4YmQsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YmQsIDB4N2UsIDB4MzcsIDB4MDEsIDB4OWQsIDB4OWQsIDB4MzIsIDB4N2QsIAorICAgIDB4MDIsIDB4MmUsIDB4MDUsIDB4NTYsIDB4N2EsIDB4MDUsIDB4NTYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4OWQsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2QsIDB4N2QsIAorICAgIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjksIDB4ZTIsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4N2QsIDB4NzUsIDB4MzEsIDB4OTQsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDIsIDB4NjUsIDB4MmIsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MjksIDB4ZTMsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjUsIAorICAgIDB4MmIsIDB4N2UsIDB4MzQsIDB4MjUsIDB4ZTMsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4N2QsIDB4MTIsIDB4NjUsIDB4MmIsIAorICAgIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NWQsIDB4ZTcsIDB4MjIsIDB4ZDIsIDB4MGYsIDB4N2UsIDB4MDQsIDB4MjUsIDB4ZTMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4N2QsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OGQsIDB4NzUsIDB4MzEsIDB4OTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NzAsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4Y2QsIAorICAgIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4M2MsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIAorICAgIDB4NDYsIDB4N2EsIDB4MDUsIDB4NDYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIAorICAgIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NDQsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4N2UsIDB4MjQsIDB4MDcsIDB4MDAsIDB4MmUsIDB4MjcsIAorICAgIDB4MDEsIDB4Y2QsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmUsIDB4NTAsIDB4MzgsIAorICAgIDB4NzgsIDB4MDMsIDB4MDIsIDB4NjYsIDB4MTYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2YsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIAorICAgIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTcsIDB4MjIsIDB4ODAsIDB4N2QsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4Y2QsIDB4OWUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NjUsIDB4ZmIsIDB4N2UsIDB4MzQsIDB4MDEsIDB4ZTMsIAorICAgIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGYsIDB4MDIsIDB4NjUsIDB4ZmIsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIAorICAgIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIAorICAgIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDcsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MzEsIAorICAgIDB4OTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MjksIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4ZGYsIDB4N2UsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZTEsIDB4MmUsIDB4MzUsIDB4NDYsIDB4N2EsIAorICAgIDB4MzUsIDB4NDYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIAorICAgIDB4MmEsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4MmMsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDEsIDB4ZDIsIDB4MDQsIDB4N2UsIAorICAgIDB4MDcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2UsIAorICAgIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4Y2UsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIAorICAgIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NWYsIDB4NGIsIDB4NzUsIDB4MzEsIDB4OTksIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2YsIDB4MGEsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTcsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIAorICAgIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NWYsIDB4NGIsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NjAsIDB4OTgsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MzEsIDB4OTAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4YTUsIDB4ZmMsIDB4NWUsIDB4YjAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4NGMsIDB4NGIsIDB4NWUsIDB4YjAsIDB4ZjAsIAorICAgIDB4YmMsIDB4YjUsIDB4NzgsIDB4ZjEsIDB4NWUsIDB4NDAsIDB4MGYsIDB4NGMsIDB4NTQsIDB4N2MsIDB4YjUsIDB4NWUsIDB4NTAsIDB4MGIsIDB4NjgsIDB4MmEsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmYsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmYsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjcsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjcsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIAorICAgIDB4MDQsIDB4ZDIsIDB4NWYsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWYsIDB4MTIsIDB4NDMsIDB4YWYsIDB4MDIsIDB4NjIsIDB4OTMsIDB4NzUsIDB4MzEsIDB4OTEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4ZTAsIDB4MDgsIAorICAgIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjIsIDB4OTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIAorICAgIDB4MTIsIDB4NjIsIDB4OTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIAorICAgIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjIsIDB4YjYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NWYsIAorICAgIDB4OWQsIDB4NzUsIDB4MzEsIDB4OTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4N2MsIAorICAgIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIAorICAgIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjgsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NjAsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjAsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTgsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NTgsIDB4MDIsIDB4NjIsIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIAorICAgIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjksIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjksIDB4YTUsIDB4ZmQsIAorICAgIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIAorICAgIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTksIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTksIDB4MDIsIDB4NjIsIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIAorICAgIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmEsIAorICAgIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjIsIDB4ODAsIDB4MDIsIDB4YzIsIAorICAgIDB4NjIsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWEsIDB4MDIsIDB4NjIsIAorICAgIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmIsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIAorICAgIDB4MDQsIDB4ZDIsIDB4NjMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjMsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWIsIAorICAgIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWIsIDB4MDIsIDB4NjIsIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmMsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjQsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWMsIDB4MDIsIDB4NjIsIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIAorICAgIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIAorICAgIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjUsIDB4ODAsIAorICAgIDB4MDIsIDB4YzIsIDB4NjUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWQsIAorICAgIDB4MDIsIDB4NjIsIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIAorICAgIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NmUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIAorICAgIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjYsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjYsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIAorICAgIDB4ZDIsIDB4NWUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWUsIDB4MDIsIDB4NjIsIDB4N2YsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIAorICAgIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MTAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NmYsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NmYsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NjcsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NjcsIDB4YTUsIAorICAgIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWYsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWYsIDB4MDIsIDB4NjIsIDB4N2YsIDB4NTQsIAorICAgIDB4ZjAsIDB4YzQsIDB4YTUsIDB4ZmYsIDB4YzQsIDB4YTUsIDB4NGYsIDB4NzUsIDB4MzEsIDB4OTAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZjUsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4MjIsIDB4Y2EsIDB4MTksIDB4NWUsIDB4MjAsIDB4MDcsIDB4NGMsIDB4YTIsIDB4N2UsIDB4NzQsIDB4MjksIDB4ZTMsIDB4Y2EsIDB4NzksIAorICAgIDB4N2EsIDB4NzksIDB4YTAsIDB4MGIsIDB4NzQsIDB4N2EsIDB4NzksIDB4YjAsIDB4MGIsIDB4NzQsIDB4ZGEsIDB4NzksIDB4N2UsIDB4MzAsIDB4MDIsIDB4N2UsIAorICAgIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDIsIDB4NjIsIDB4ZGUsIDB4Y2EsIDB4MTksIDB4NWUsIDB4MjAsIDB4MDcsIDB4NGMsIDB4YTIsIDB4N2UsIDB4NzQsIDB4MjksIAorICAgIDB4ZTMsIDB4Y2EsIDB4NzksIDB4N2EsIDB4NzksIDB4YTAsIDB4MGIsIDB4NzQsIDB4N2EsIDB4NzksIDB4YjAsIDB4MGIsIDB4NzQsIDB4N2EsIDB4NzksIDB4NjAsIAorICAgIDB4MGIsIDB4NzQsIDB4ZGEsIDB4NzksIDB4N2UsIDB4MzAsIDB4MDMsIDB4N2UsIDB4NjQsIDB4MDAsIDB4MDMsIDB4MDIsIDB4NjIsIDB4ZGUsIDB4ZDIsIDB4MDQsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4ZTEsIDB4MmQsIDB4MjYsIDB4YmUsIDB4MjQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MmUsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZGYsIAorICAgIDB4N2UsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4N2UsIDB4NzksIDB4YTAsIDB4N2EsIDB4MDksIDB4YTAsIDB4MGIsIDB4MDQsIDB4MGIsIDB4NzQsIDB4YmQsIDB4MDQsIAorICAgIDB4NjgsIDB4MjMsIDB4YTUsIDB4ZGIsIDB4ZWYsIDB4N2EsIDB4MjcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MjUsIDB4NDYsIDB4MmQsIDB4MjYsIDB4N2EsIDB4MjUsIAorICAgIDB4NDYsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4ZGEsIDB4MTksIDB4YzIsIDB4ZDcsIDB4MjIsIDB4NzUsIDB4MzEsIDB4OWEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4ZGEsIDB4MTksIDB4ZDIsIDB4ZDcsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4ODAsIDB4ZDcsIDB4NDgsIDB4YjYsIDB4NDYsIDB4MjUsIDB4NDcsIAorICAgIDB4MWMsIDB4NDksIDB4MTUsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDgsIDB4MWIsIDB4NDQsIDB4YzYsIDB4NDksIDB4NTksIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDksIDB4NjAsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NGMsIDB4MGUsIDB4NDksIDB4N2QsIDB4NGEsIAorICAgIDB4NzQsIDB4NGMsIDB4NmQsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NGIsIDB4NzMsIDB4NDQsIDB4YzYsIDB4NGMsIDB4YjEsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NGMsIDB4YjgsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NGYsIDB4NjYsIDB4NGMsIDB4ZDUsIDB4NGQsIAorICAgIDB4Y2MsIDB4NGYsIDB4YzUsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NGUsIDB4Y2IsIDB4NDQsIDB4YzYsIDB4NTAsIDB4MDksIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTAsIDB4MTAsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTIsIDB4YmUsIDB4NTAsIDB4MmQsIDB4NTEsIAorICAgIDB4MjQsIDB4NTMsIDB4MWQsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTIsIDB4MjMsIDB4NDQsIDB4YzYsIDB4NTMsIDB4NjEsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTMsIDB4NjgsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTYsIDB4MTYsIDB4NTMsIDB4ODUsIDB4NTQsIAorICAgIDB4N2MsIDB4NTYsIDB4NzUsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTUsIDB4N2IsIDB4NDQsIDB4YzYsIDB4NTYsIDB4YjksIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTYsIDB4YzAsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTksIDB4NmUsIDB4NTYsIDB4ZGQsIDB4NTcsIAorICAgIDB4ZDQsIDB4NTksIDB4Y2QsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NTgsIDB4ZDMsIDB4NDQsIDB4YzYsIDB4NWEsIDB4MTEsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NWEsIDB4MTgsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NWMsIDB4YzYsIDB4NWEsIDB4MzUsIDB4NWIsIAorICAgIDB4MmMsIDB4NWQsIDB4MjUsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NWMsIDB4MmIsIDB4NDQsIDB4YzYsIDB4NWQsIDB4NjksIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NWQsIDB4NzAsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NjAsIDB4MWUsIDB4NWQsIDB4OGQsIDB4NWUsIAorICAgIDB4ODQsIDB4NjAsIDB4N2QsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NWYsIDB4ODMsIDB4NDQsIDB4YzYsIDB4NjAsIDB4YzEsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NjAsIDB4YzgsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIAorICAgIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4NDQsIDB4YzYsIDB4Y2EsIDB4MjksIDB4MWUsIDB4NTAsIDB4NDAsIAorICAgIDB4MGQsIDB4N2UsIDB4NTQsIDB4MGIsIDB4MTAsIDB4OWMsIDB4YjUsIDB4YTQsIDB4MmUsIDB4NTQsIDB4NjUsIDB4NDgsIDB4ODksIDB4NTQsIDB4N2UsIDB4MzksIAorICAgIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4MGIsIDB4MzQsIDB4ODAsIDB4ZTksIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIAorICAgIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIAorICAgIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIAorICAgIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIAorICAgIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIAorICAgIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIAorICAgIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIAorICAgIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIAorICAgIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIAorICAgIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4MDAsIAorICAgIDB4N2EsIDB4MTksIDB4MDAsIDB4N2EsIDB4MTksIDB4MTAsIDB4MGIsIDB4MzUsIDB4ZGEsIDB4MjksIDB4MjIsIDB4MWUsIDB4NTAsIDB4NDAsIDB4MGQsIDB4N2UsIAorICAgIDB4NTQsIDB4MGIsIDB4MWMsIDB4OWMsIDB4YjUsIDB4YTQsIDB4MmUsIDB4NTQsIDB4NjYsIDB4MTYsIDB4ODksIDB4NTQsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2EsIAorICAgIDB4MzksIDB4MDAsIDB4MGIsIDB4MzQsIDB4ODAsIDB4ZTksIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIAorICAgIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIAorICAgIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIAorICAgIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIAorICAgIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIAorICAgIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIAorICAgIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIAorICAgIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIAorICAgIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIAorICAgIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIAorICAgIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIAorICAgIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIAorICAgIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIAorICAgIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIAorICAgIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIAorICAgIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIAorICAgIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIAorICAgIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIAorICAgIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4N2UsIAorICAgIDB4MTksIDB4MDAsIDB4N2UsIDB4MTksIDB4MTAsIDB4MWIsIDB4MzgsIDB4MDAsIDB4MGIsIDB4MzUsIDB4MjIsIDB4NjcsIDB4OTYsIDB4NjksIDB4NjMsIDB4NjksIAorICAgIDB4N2IsIDB4NmEsIDB4NDksIDB4NmEsIDB4ZTQsIDB4NmIsIDB4OGUsIDB4NmIsIDB4YTksIDB4NmMsIDB4M2IsIDB4NmIsIDB4YzQsIDB4NmMsIDB4MDUsIDB4NjksIAorICAgIDB4OTYsIDB4NjksIDB4YWEsIDB4N2MsIDB4YjMsIDB4YmUsIDB4YjAsIDB4MGIsIDB4MjgsIDB4MTQsIDB4NzUsIDB4MzEsIDB4MDksIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4NzUsIDB4NmQsIDB4MTAsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4NDMsIDB4ZTEsIDB4YzAsIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4YzAsIDB4YTgsIAorICAgIDB4YzIsIDB4YWYsIDB4MjMsIDB4NmMsIDB4YWEsIDB4MmUsIDB4NTQsIDB4NjcsIDB4NGIsIDB4MGIsIDB4NTgsIDB4NTAsIDB4ODksIDB4NTQsIDB4MDEsIDB4MDIsIAorICAgIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4NzUsIDB4MzEsIDB4YjAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MGEsIDB4MzIsIDB4MDksIDB4YjMsIAorICAgIDB4NjcsIDB4OGUsIDB4NDIsIDB4MzIsIDB4MTksIDB4NDMsIDB4MDAsIDB4MzYsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4M2IsIAorICAgIDB4NDksIDB4MzMsIDB4NjcsIDB4Y2IsIDB4MGEsIDB4MjIsIDB4MDksIDB4MzIsIDB4MDAsIDB4MzYsIDB4MDksIDB4YjIsIDB4NjcsIDB4OGUsIDB4YTUsIDB4YmIsIAorICAgIDB4MDAsIDB4MDUsIDB4ZjQsIDB4NTIsIDB4MzMsIDB4ODAsIDB4MDIsIDB4NDIsIDB4MzMsIDB4ODksIDB4MzQsIDB4NjcsIDB4ZGIsIDB4NjgsIDB4MDksIDB4NjgsIAorICAgIDB4MzcsIDB4NjgsIDB4NjUsIDB4NjgsIDB4OTMsIDB4NjgsIDB4YzEsIDB4NjgsIDB4ZWYsIDB4NjksIDB4MWQsIDB4MTIsIDB4NDEsIDB4YjUsIDB4ZDIsIDB4MjgsIAorICAgIDB4ZDIsIDB4MDgsIDB4YzIsIDB4NDAsIDB4YzIsIDB4NDgsIDB4YzIsIDB4MzgsIDB4YzIsIDB4MzAsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4Y2YsIAorICAgIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YWYsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YmYsIAorICAgIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIDB4NjAsIDB4Y2YsIDB4MDIsIDB4NjksIDB4NGIsIDB4MTIsIDB4NDEsIDB4ZDQsIDB4ZDIsIDB4MjksIDB4ZDIsIDB4MDksIAorICAgIDB4YzIsIDB4NDEsIDB4YzIsIDB4NDksIDB4YzIsIDB4MzksIDB4YzIsIDB4MzEsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDAsIDB4N2UsIDB4MDQsIAorICAgIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjEsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzEsIDB4MTIsIDB4NDEsIAorICAgIDB4MTYsIDB4MTIsIDB4NjEsIDB4MDUsIDB4MDIsIDB4NjksIDB4NGIsIDB4MTIsIDB4NDEsIDB4ZjMsIDB4ZDIsIDB4MmEsIDB4ZDIsIDB4MGEsIDB4YzIsIDB4NDIsIAorICAgIDB4YzIsIDB4NGEsIDB4YzIsIDB4M2EsIDB4YzIsIDB4MzIsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDEsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzMsIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIAorICAgIDB4NjEsIDB4M2IsIDB4MDIsIDB4NjksIDB4NGIsIDB4MTIsIDB4NDIsIDB4MTIsIDB4ZDIsIDB4MmIsIDB4ZDIsIDB4MGIsIDB4YzIsIDB4NDMsIDB4YzIsIDB4NGIsIAorICAgIDB4YzIsIDB4M2IsIDB4YzIsIDB4MzMsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDIsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4YjUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzUsIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIDB4NjEsIDB4NzEsIAorICAgIDB4MDIsIDB4NjksIDB4NGIsIDB4MTIsIDB4NDIsIDB4MzEsIDB4ZDIsIDB4MmMsIDB4ZDIsIDB4MGMsIDB4YzIsIDB4NDQsIDB4YzIsIDB4NGMsIDB4YzIsIDB4M2MsIAorICAgIDB4YzIsIDB4MzQsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjcsIAorICAgIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzcsIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIDB4NjEsIDB4YTcsIDB4MDIsIDB4NjksIAorICAgIDB4NGIsIDB4MTIsIDB4NDIsIDB4NTAsIDB4ZDIsIDB4MmQsIDB4ZDIsIDB4MGQsIDB4YzIsIDB4NDUsIDB4YzIsIDB4NGQsIDB4YzIsIDB4M2QsIDB4YzIsIDB4MzUsIAorICAgIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDQsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjksIDB4N2UsIDB4MDQsIAorICAgIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIDB4NjEsIDB4ZGQsIDB4MDIsIDB4NjksIDB4NGIsIDB4MTIsIAorICAgIDB4NDIsIDB4NmYsIDB4ZDIsIDB4MmUsIDB4ZDIsIDB4MGUsIDB4YzIsIDB4NDYsIDB4YzIsIDB4NGUsIDB4YzIsIDB4M2UsIDB4YzIsIDB4MzYsIDB4NmQsIDB4MDAsIAorICAgIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YmIsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIDB4NjIsIDB4MTMsIDB4MDIsIDB4NjksIDB4NGIsIDB4MTIsIDB4NDIsIDB4OGUsIAorICAgIDB4ZDIsIDB4MmYsIDB4ZDIsIDB4MGYsIDB4YzIsIDB4NDcsIDB4YzIsIDB4NGYsIDB4YzIsIDB4M2YsIDB4YzIsIDB4MzcsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIAorICAgIDB4MDEsIDB4ZDYsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YmQsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4Y2QsIDB4MTIsIDB4NDEsIDB4MTYsIDB4MTIsIDB4NjIsIDB4NDksIDB4MDIsIDB4NjksIDB4NGIsIDB4N2UsIDB4YTAsIDB4ZDAsIDB4N2UsIDB4NjAsIAorICAgIDB4MGYsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MGMsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIAorICAgIDB4YzIsIDB4ZDcsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MGEsIDB4NTIsIDB4MjMsIDB4NmQsIDB4MDAsIDB4NTksIDB4MDUsIAorICAgIDB4MDAsIDB4NDgsIDB4MTIsIDB4NDEsIDB4N2UsIDB4MTIsIDB4NDEsIDB4OWEsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjIsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4MGEsIDB4MjIsIDB4MDksIDB4YjIsIDB4NjcsIDB4OGUsIDB4NDIsIDB4MjMsIDB4N2UsIDB4YjAsIDB4OWMsIDB4MTksIDB4YjIsIDB4MDEsIDB4Y2YsIAorICAgIDB4MTIsIDB4MzEsIDB4ODUsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MGEsIDB4MjIsIDB4MDksIDB4YjIsIAorICAgIDB4NjcsIDB4OGUsIDB4NDIsIDB4MjQsIDB4MTIsIDB4MzUsIDB4M2QsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjksIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4MGEsIDB4MzIsIDB4MDksIDB4YjMsIDB4NjcsIDB4OGUsIDB4NDIsIDB4MzQsIDB4MTksIDB4NDMsIDB4MDAsIDB4M2UsIDB4MTIsIDB4NjksIDB4YzIsIDB4ZDAsIAorICAgIDB4YTgsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MGIsIDB4N2MsIDB4YjQsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MDQsIAorICAgIDB4NDksIDB4MzAsIDB4MDEsIDB4OGYsIDB4N2UsIDB4YTAsIDB4ZDgsIDB4YTUsIDB4ZWYsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MjksIDB4MTIsIDB4NjIsIDB4YjYsIAorICAgIDB4ZGEsIDB4MjksIDB4ZGEsIDB4MGIsIDB4NDAsIDB4NjIsIDB4NzUsIDB4MzEsIDB4YmEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2MsIDB4YjQsIDB4MzAsIDB4ZTAsIAorICAgIDB4MWUsIDB4NmQsIDB4MzMsIDB4NTksIDB4MzAsIDB4MDEsIDB4OGYsIDB4N2UsIDB4MzQsIDB4MDksIDB4ZTMsIDB4MGEsIDB4ODIsIDB4N2UsIDB4OTQsIDB4MDQsIAorICAgIDB4MDAsIDB4YWQsIDB4ODksIDB4MmQsIDB4MzksIDB4NTksIDB4MzAsIDB4MDEsIDB4NmYsIDB4NTksIDB4MzAsIDB4MDEsIDB4N2YsIDB4N2MsIDB4YjQsIDB4MzAsIAorICAgIDB4ZTEsIDB4MTAsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDgsIDB4NDQsIDB4MDQsIDB4MTksIDB4YjAsIAorICAgIDB4MDAsIDB4MDgsIDB4MGEsIDB4MDIsIDB4MDksIDB4YjAsIDB4NjcsIDB4OGUsIDB4NDIsIDB4MjEsIDB4ZjQsIDB4NTIsIDB4MzQsIDB4N2MsIDB4YjIsIDB4MjMsIAorICAgIDB4MGEsIDB4MGIsIDB4Y2EsIDB4MTksIDB4NDksIDB4MDAsIDB4MzAsIDB4ZDUsIDB4OTksIDB4MDQsIDB4ZGEsIDB4MTksIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIAorICAgIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIAorICAgIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MTksIDB4MzAsIDB4MDAsIAorICAgIDB4MGMsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDEsIDB4NjgsIDB4MTIsIDB4NDQsIDB4NDAsIDB4Y2EsIDB4YjgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MTAsIAorICAgIDB4NDQsIDB4MDIsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4ZGEsIDB4YjgsIDB4ODAsIDB4MDIsIDB4NTQsIDB4YmYsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIAorICAgIDB4MDgsIDB4NjgsIDB4MDQsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MDIsIDB4NTQsIDB4ZjcsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4Y2EsIDB4YjgsIDB4NzQsIAorICAgIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4ZGEsIDB4YjgsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4MGEsIAorICAgIDB4NjIsIDB4MDksIDB4YjYsIDB4NjcsIDB4OGUsIDB4M2UsIDB4MjAsIDB4MGEsIDB4NjIsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDIsIDB4NjgsIDB4MjAsIAorICAgIDB4NDIsIDB4MjcsIDB4Y2EsIDB4YjgsIDB4NzQsIDB4NjEsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NTksIDB4NDYsIAorICAgIDB4MDEsIDB4YmYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4MDEsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4ZGEsIDB4YjgsIDB4ODAsIDB4MTEsIAorICAgIDB4ZjQsIDB4NTIsIDB4MjcsIDB4NzQsIDB4YTEsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MzgsIDB4NTksIDB4NDYsIDB4MDEsIAorICAgIDB4YmYsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2MsIDB4NzQsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MGEsIDB4NjIsIDB4MDksIDB4YjYsIAorICAgIDB4NjcsIDB4OGUsIDB4YTUsIDB4ZmQsIDB4ZjQsIDB4YTUsIDB4ZmUsIDB4Y2EsIDB4MjgsIDB4M2UsIDB4MjAsIDB4MGEsIDB4NjIsIDB4YTUsIDB4ZWUsIDB4NTIsIAorICAgIDB4MjYsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MjAsIDB4NTksIDB4NDYsIDB4MDEsIDB4YWYsIDB4ZGEsIDB4MjgsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIAorICAgIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDgsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDEsIDB4NjgsIDB4MGMsIAorICAgIDB4NDQsIDB4ODAsIDB4Y2EsIDB4YjgsIDB4YTUsIDB4ZWQsIDB4NDIsIDB4MmEsIDB4ZGEsIDB4YjgsIDB4ODAsIDB4MGEsIDB4NTQsIDB4N2YsIDB4Y2EsIDB4YjgsIAorICAgIDB4YTUsIDB4ZWUsIDB4NTIsIDB4MmEsIDB4ZGEsIDB4YjgsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDgsIDB4NjgsIDB4MDQsIDB4NDQsIDB4MDIsIDB4ODAsIAorICAgIDB4MDIsIDB4NTQsIDB4ZmQsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDIsIAorICAgIDB4NjgsIDB4MTAsIDB4YTUsIDB4ZWQsIDB4NDIsIDB4MjgsIDB4NDIsIDB4MjYsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MDgsIDB4NTksIDB4NDYsIDB4MDEsIDB4YWYsIAorICAgIDB4ODAsIDB4MDQsIDB4YTUsIDB4ZWUsIDB4NTIsIDB4MjgsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDQsIDB4NjgsIDB4MTAsIDB4YTUsIDB4ZWQsIDB4NDIsIAorICAgIDB4MjksIDB4NDIsIDB4MjYsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MDgsIDB4NTksIDB4NDYsIDB4MDEsIDB4YWYsIDB4ODAsIDB4MGIsIDB4YTUsIDB4ZWUsIDB4NTIsIAorICAgIDB4MjksIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDIsIDB4NzgsIDB4MDAsIDB4MTIsIDB4NDIsIDB4YWQsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2UsIDB4MDQsIAorICAgIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MTksIDB4NDAsIAorICAgIDB4MDAsIDB4MTAsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIAorICAgIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MTksIDB4NDAsIDB4MDAsIDB4MTgsIDB4MTksIDB4MzAsIDB4MDAsIAorICAgIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIAorICAgIDB4MDksIDB4YjAsIDB4MDAsIDB4MGMsIDB4NDQsIDB4NDAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4ZTUsIDB4NmUsIDB4YjQsIDB4MDcsIDB4MjMsIDB4MDksIAorICAgIDB4YjAsIDB4MDAsIDB4MTAsIDB4NGUsIDB4YjAsIDB4MDIsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIAorICAgIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZjcsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MTksIDB4MzAsIAorICAgIDB4MDAsIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIAorICAgIDB4MDIsIDB4ZTUsIDB4NmUsIDB4YjQsIDB4MDcsIDB4MTgsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIAorICAgIDB4MDksIDB4YjAsIDB4MDAsIDB4MDQsIDB4NDQsIDB4MDgsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIAorICAgIDB4MDAsIDB4MGMsIDB4NTQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MzEsIDB4YjQsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2EsIDB4MjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NDEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MGEsIDB4MzIsIDB4MDksIAorICAgIDB4YjMsIDB4NjcsIDB4OGUsIDB4NDIsIDB4MzUsIDB4MTIsIDB4NmMsIDB4NWIsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIAorICAgIDB4YzgsIDB4N2MsIDB4NjQsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTMsIDB4MGEsIDB4MzIsIDB4MDksIDB4YjMsIDB4NjcsIDB4OGUsIDB4ZjQsIDB4NTIsIAorICAgIDB4MzUsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4NmMsIDB4OGMsIDB4NmMsIDB4ZDMsIAorICAgIDB4NmQsIDB4MWEsIDB4NmQsIDB4NjEsIDB4NmQsIDB4YTgsIDB4NmQsIDB4ZWYsIDB4NmUsIDB4MzYsIDB4NmUsIDB4N2QsIDB4NzUsIDB4MzEsIDB4NTUsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIAorICAgIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4N2YsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OGYsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIAorICAgIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MGQsIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIAorICAgIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4N2YsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OGYsIDB4MDIsIDB4NDYsIDB4MGYsIDB4N2UsIDB4MTQsIDB4MDksIAorICAgIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MzEsIDB4NTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIAorICAgIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4ODEsIDB4N2UsIAorICAgIDB4MjcsIDB4MDEsIDB4OTEsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIAorICAgIDB4MTQsIDB4MTEsIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4ODEsIDB4N2EsIDB4MjcsIDB4MDEsIAorICAgIDB4OTEsIDB4MDIsIDB4NDksIDB4NjcsIDB4N2UsIDB4MTQsIDB4MGQsIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MzEsIDB4NTUsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4NzUsIDB4MzEsIDB4MDIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4ODMsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTMsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIAorICAgIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MTUsIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIAorICAgIDB4N2EsIDB4MTcsIDB4MDEsIDB4ODMsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTMsIDB4MDIsIDB4NGMsIDB4YmYsIDB4N2UsIDB4MTQsIDB4MTEsIDB4ZTMsIDB4ODAsIAorICAgIDB4ZWIsIDB4NzUsIDB4MzEsIDB4NTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4ODUsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OTUsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MTksIAorICAgIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4ODUsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTUsIDB4MDIsIAorICAgIDB4NTAsIDB4MTcsIDB4N2UsIDB4MTQsIDB4MTUsIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MzEsIDB4NTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIAorICAgIDB4MDQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIAorICAgIDB4N2UsIDB4MTcsIDB4MDEsIDB4ODcsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTcsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIAorICAgIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MWQsIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIAorICAgIDB4MDEsIDB4ODcsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTcsIDB4MDIsIDB4NTMsIDB4NmYsIDB4N2UsIDB4MTQsIDB4MTksIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4NzUsIAorICAgIDB4MzEsIDB4NTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4ODksIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTksIDB4MmQsIAorICAgIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MjEsIDB4ZTIsIDB4MzgsIAorICAgIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4ODksIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTksIDB4MDIsIDB4NTYsIDB4YzcsIAorICAgIDB4N2UsIDB4MTQsIDB4MWQsIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MzEsIDB4NTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDYsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIAorICAgIDB4MDEsIDB4OGIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWIsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIAorICAgIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MjUsIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4OGIsIAorICAgIDB4N2EsIDB4MjcsIDB4MDEsIDB4OWIsIDB4MDIsIDB4NWEsIDB4MWYsIDB4N2UsIDB4MTQsIDB4MjEsIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MzEsIDB4NTUsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4MzEsIDB4MDcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIAorICAgIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4OGQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWQsIDB4MmQsIDB4MjMsIDB4N2UsIAorICAgIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MjksIDB4ZTIsIDB4MzgsIDB4MGYsIDB4MWIsIAorICAgIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4OGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OWQsIDB4MDIsIDB4NWQsIDB4NzcsIDB4N2UsIDB4MTQsIAorICAgIDB4MjUsIDB4ZTMsIDB4ODAsIDB4ZWIsIDB4Y2EsIDB4YjgsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4MzEsIDB4MDIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ZTUsIDB4YzAsIAorICAgIDB4NTQsIDB4MDMsIDB4NjgsIDB4MDUsIDB4MTIsIDB4NzUsIDB4Y2QsIDB4ODAsIDB4ZjUsIDB4MzAsIDB4YzIsIDB4MDgsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIAorICAgIDB4NmYsIDB4ZDksIDB4ODAsIDB4MTQsIDB4MzAsIDB4YzMsIDB4MDgsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmUsIDB4ZmQsIDB4ODAsIDB4MDksIDB4MzAsIAorICAgIDB4YzQsIDB4MDYsIDB4NzUsIDB4ZjEsIDB4MDIsIDB4MTIsIDB4NzAsIDB4ZTksIDB4ZDAsIDB4ZjEsIDB4ZGEsIDB4YjgsIDB4MzIsIDB4NzUsIDB4MzEsIDB4MTAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MzksIDB4Y2EsIDB4NTksIDB4YzIsIDB4YzMsIDB4YTksIDB4MjEsIDB4ZTIsIDB4NWMsIDB4ZTUsIAorICAgIDB4ZTUsIDB4NTQsIDB4YzAsIDB4NjgsIDB4NGYsIDB4ZTUsIDB4ZTYsIDB4NmMsIDB4YWEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGIsIDB4MmQsIDB4MzUsIDB4YmUsIAorICAgIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4NGEsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZGIsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZDksIDB4N2QsIDB4NDMsIDB4MmQsIAorICAgIDB4NDUsIDB4YmUsIDB4NDQsIDB4MDksIDB4ZTIsIDB4MzgsIDB4NDAsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZDksIDB4NzUsIDB4MzEsIDB4MTEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2EsIDB4YjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4NzEsIDB4YjgsIDB4YTksIDB4MjEsIDB4ZTUsIDB4MWYsIDB4YTksIDB4ZDQsIAorICAgIDB4ZTQsIDB4YTksIDB4MjQsIDB4ZTQsIDB4ZmMsIDB4YzIsIDB4YzMsIDB4YTksIDB4MjEsIDB4ZTIsIDB4M2IsIDB4ZTUsIDB4ZTUsIDB4NTQsIDB4YzAsIDB4NzgsIAorICAgIDB4YjQsIDB4MTIsIDB4NzQsIDB4NWEsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MzksIDB4ZGEsIDB4MGIsIDB4MjIsIDB4ODAsIDB4MjksIDB4ODAsIDB4NTgsIDB4NzUsIAorICAgIDB4MzEsIDB4MTYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4ODAsIDB4ZWQsIDB4NzUsIDB4MzEsIDB4MTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4YjEsIDB4MzEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4OWUsIDB4NDQsIDB4MDksIDB4ZTMsIDB4OWQsIDB4NTQsIDB4MTIsIDB4NzEsIDB4YjgsIDB4N2UsIDB4MzQsIDB4MDUsIDB4ZTMsIAorICAgIDB4N2QsIDB4NTQsIDB4MmQsIDB4NDMsIDB4ODAsIDB4YTEsIDB4ZTUsIDB4ZTUsIDB4NTQsIDB4MDMsIDB4NzgsIDB4MTIsIDB4NzUsIDB4MzEsIDB4MTMsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4N2UsIDB4MGYsIDB4MjksIDB4ZmYsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MjksIDB4ZmYsIDB4ODAsIDB4YTcsIDB4NzUsIDB4MzEsIAorICAgIDB4MTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MGYsIDB4MmEsIDB4MDMsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MmEsIDB4MDMsIDB4YTksIDB4ZDcsIAorICAgIDB4ZTQsIDB4YTksIDB4MjcsIDB4ZTQsIDB4ZmMsIDB4ODAsIDB4OWQsIDB4NzUsIDB4MzEsIDB4MTUsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MGYsIDB4MmEsIAorICAgIDB4MDcsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MmEsIDB4MDcsIDB4ODAsIDB4ZTUsIDB4NzUsIDB4MzEsIDB4MTgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4Y2EsIAorICAgIDB4MDksIDB4Y2EsIDB4MzksIDB4Y2EsIDB4MmIsIDB4YzIsIDB4YzIsIDB4YTksIDB4MjEsIDB4ZjIsIDB4NTIsIDB4ZTUsIDB4ZjUsIDB4MzMsIDB4ODIsIDB4ZTcsIAorICAgIDB4NDAsIDB4NDQsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZTEsIDB4N2UsIDB4NTQsIDB4MDAsIDB4NDAsIDB4OWQsIDB4MzUsIDB4NDAsIDB4NDMsIDB4N2EsIDB4MzcsIAorICAgIDB4MDEsIDB4ZTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGQsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDUsIDB4YmUsIDB4NDQsIDB4MDUsIDB4ZTIsIDB4MzgsIDB4NTIsIAorICAgIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGQsIDB4N2QsIDB4NDUsIDB4MTIsIDB4NzMsIDB4MTYsIDB4YTksIDB4MjAsIDB4ZjUsIDB4MjIsIDB4NzUsIDB4MzEsIDB4MTksIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4OTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4ODEsIDB4ZjcsIDB4N2EsIDB4OTEsIDB4ZjYsIDB4ZTUsIAorICAgIDB4ZjUsIDB4MzMsIDB4ODIsIDB4ZTcsIDB4NTAsIDB4YmMsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MzksIDB4ZGEsIDB4MDksIDB4MjIsIDB4ODAsIDB4NDEsIDB4ODAsIAorICAgIDB4NjQsIDB4MmQsIDB4NTMsIDB4NmQsIDB4MzMsIDB4NzAsIDB4YjcsIDB4N2UsIDB4MDQsIDB4MDEsIDB4ZTMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGYsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4ZGQsIDB4YTksIDB4MzIsIDB4ZjIsIDB4ZGYsIDB4ODUsIDB4MzAsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4ZjYsIDB4MDAsIAorICAgIDB4ODAsIDB4ZDQsIDB4Y2EsIDB4NTksIDB4OWUsIDB4NDQsIDB4MDUsIDB4ZTMsIDB4OWQsIDB4NTQsIDB4MTIsIDB4NzMsIDB4MTYsIDB4N2UsIDB4MzQsIDB4MDEsIAorICAgIDB4ZTMsIDB4N2QsIDB4NTQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4ZGQsIDB4MTIsIDB4NzMsIDB4MTYsIDB4ZGEsIDB4NDksIDB4ODAsIDB4OTksIAorICAgIDB4ZTUsIDB4ZjUsIDB4NTQsIDB4MDMsIDB4NzgsIDB4MWYsIDB4N2UsIDB4MGYsIDB4MjksIDB4ZWYsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MjksIDB4ZWYsIAorICAgIDB4ODAsIDB4OWQsIDB4N2UsIDB4MGYsIDB4MjksIDB4ZjcsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MjksIDB4ZjcsIDB4YTksIDB4ZDcsIDB4ZjQsIDB4YTksIAorICAgIDB4MjcsIDB4ZjQsIDB4ZmMsIDB4ODAsIDB4OGEsIDB4N2UsIDB4MGYsIDB4MjksIDB4ZjMsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MjksIDB4ZjMsIDB4ODAsIAorICAgIDB4ZWIsIDB4ZTUsIDB4ZjUsIDB4NTQsIDB4MDMsIDB4NzgsIDB4MWYsIDB4N2UsIDB4MmYsIDB4MmEsIDB4MGYsIDB4MGIsIDB4MmMsIDB4N2EsIDB4MmYsIDB4MmEsIAorICAgIDB4MGYsIDB4ODAsIDB4MzQsIDB4N2UsIDB4MmYsIDB4MmEsIDB4MTcsIDB4MGIsIDB4MmMsIDB4N2EsIDB4MmYsIDB4MmEsIDB4MTcsIDB4YTksIDB4ZDcsIDB4ZjQsIAorICAgIDB4YTksIDB4MjcsIDB4ZjQsIDB4ZmMsIDB4ODAsIDB4MjEsIDB4N2UsIDB4MmYsIDB4MmEsIDB4MTMsIDB4MGIsIDB4MmMsIDB4N2EsIDB4MmYsIDB4MmEsIDB4MTMsIAorICAgIDB4ODAsIDB4ZWIsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4NzUsIDB4MzEsIDB4MjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4Y2EsIAorICAgIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIDB4YzIsIDB4YzQsIDB4YTksIDB4MjEsIDB4ZjIsIDB4YjYsIDB4ZTUsIDB4ZjUsIDB4MzMsIDB4NzIsIDB4ZTcsIAorICAgIDB4NDAsIDB4ZTAsIDB4N2UsIDB4MGQsIDB4NDYsIDB4N2UsIDB4MWQsIDB4NGEsIDB4N2UsIDB4MmQsIDB4NGUsIDB4N2UsIDB4M2QsIDB4NTIsIDB4N2UsIDB4ODUsIAorICAgIDB4NTYsIDB4N2QsIDB4OTAsIDB4NGQsIDB4OTEsIDB4NGQsIDB4OTIsIDB4NGQsIDB4OTMsIDB4NGQsIDB4OTQsIDB4NGQsIDB4OTUsIDB4NGQsIDB4OTYsIDB4NGQsIAorICAgIDB4OTcsIDB4NGQsIDB4OTgsIDB4NjgsIDB4NzIsIDB4N2EsIDB4MTEsIDB4ZjMsIDB4N2EsIDB4MDEsIDB4ZjMsIDB4N2EsIDB4MzEsIDB4ZjMsIDB4N2EsIDB4MjEsIAorICAgIDB4ZjMsIDB4N2EsIDB4NTEsIDB4ZjMsIDB4N2EsIDB4NDEsIDB4ZjMsIDB4N2EsIDB4NzEsIDB4ZjMsIDB4N2EsIDB4NjEsIDB4ZjMsIDB4N2EsIDB4OTEsIDB4ZjMsIAorICAgIDB4N2EsIDB4ODEsIDB4ZjMsIDB4MzAsIDB4N2IsIDB4MWEsIDB4N2EsIDB4YjEsIDB4ZjMsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4N2EsIDB4ZDEsIDB4ZjMsIDB4N2EsIAorICAgIDB4YzEsIDB4ZjMsIDB4N2EsIDB4ZjEsIDB4ZjMsIDB4N2EsIDB4ZTEsIDB4ZjMsIDB4N2QsIDB4NzgsIDB4N2EsIDB4ZjEsIDB4ZjMsIDB4N2EsIDB4ZTEsIDB4ZjMsIAorICAgIDB4YTksIDB4MzAsIDB4ZjUsIDB4MDMsIDB4MDIsIDB4NzAsIDB4ZDYsIDB4NzUsIDB4MzEsIDB4MjksIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjAsIDB4N2IsIDB4MGIsIAorICAgIDB4NzUsIDB4MzEsIDB4MGEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4ZjYsIDB4MGEsIDB4ODAsIDB4MDksIDB4NzUsIDB4MzEsIDB4MTIsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4NzUsIDB4ZjYsIDB4MTIsIDB4NmQsIDB4MDAsIDB4N2QsIDB4MTAsIDB4N2EsIDB4MGQsIDB4NDYsIDB4N2EsIDB4MGQsIDB4NGEsIDB4N2EsIDB4MGQsIAorICAgIDB4NGUsIDB4N2EsIDB4MGQsIDB4NTIsIDB4N2EsIDB4MDUsIDB4NTYsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4MWUsIDB4YjAsIAorICAgIDB4NDAsIDB4MGMsIDB4N2UsIDB4YTAsIDB4MGEsIDB4YTQsIDB4N2UsIDB4MDQsIDB4NzIsIDB4ZmIsIDB4OWQsIDB4MDUsIDB4ODksIDB4MDQsIDB4N2UsIDB4YTEsIAorICAgIDB4ZTMsIDB4N2EsIDB4MzksIDB4YTAsIDB4MGIsIDB4MzQsIDB4ODAsIDB4ZWEsIDB4YjQsIDB4NDAsIDB4ZTMsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIAorICAgIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIAorICAgIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIAorICAgIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIAorICAgIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIAorICAgIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIAorICAgIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIAorICAgIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIAorICAgIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIAorICAgIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIAorICAgIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIAorICAgIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIAorICAgIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIAorICAgIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIAorICAgIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIAorICAgIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIAorICAgIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIAorICAgIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIAorICAgIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIAorICAgIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIAorICAgIDB4MzUsIDB4N2UsIDB4YTEsIDB4ZTMsIDB4ZTUsIDB4ZTMsIDB4MWIsIDB4MzgsIDB4NTAsIDB4MGIsIDB4MzUsIDB4MjIsIDB4MWUsIDB4YjAsIDB4NDAsIDB4MGMsIAorICAgIDB4N2UsIDB4YTAsIDB4MGEsIDB4YTQsIDB4N2UsIDB4MDQsIDB4NzQsIDB4NTksIDB4OWQsIDB4MDUsIDB4ODksIDB4MDQsIDB4N2UsIDB4MzksIDB4YTAsIDB4N2EsIAorICAgIDB4YTEsIDB4ZjMsIDB4MGIsIDB4MzQsIDB4ODAsIDB4ZWEsIDB4YjQsIDB4NDAsIDB4ZTMsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIAorICAgIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIAorICAgIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIAorICAgIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIAorICAgIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIAorICAgIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIAorICAgIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIAorICAgIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIAorICAgIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIAorICAgIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIAorICAgIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIAorICAgIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIAorICAgIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIAorICAgIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIAorICAgIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIAorICAgIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MGIsIAorICAgIDB4MzgsIDB4NTAsIDB4N2EsIDB4YTEsIDB4ZjMsIDB4ZjUsIDB4ZjMsIDB4MGIsIDB4MzUsIDB4MjIsIDB4YzIsIDB4YWYsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ZGIsIAorICAgIDB4NGQsIDB4MzMsIDB4NjgsIDB4M2IsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZDcsIDB4N2UsIDB4NTQsIDB4MDksIDB4ZTMsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MzUsIAorICAgIDB4NDAsIDB4MDIsIDB4N2QsIDB4MzUsIDB4Y2EsIDB4MzksIDB4N2UsIDB4NjUsIDB4NjEsIDB4OTksIDB4NjQsIDB4ZGEsIDB4MzksIDB4N2UsIDB4MDcsIDB4MDEsIAorICAgIDB4ZGIsIDB4OWQsIDB4MDMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ZGIsIDB4MmUsIDB4MzcsIDB4MDEsIDB4ZDcsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZDcsIDB4YmUsIAorICAgIDB4MzQsIDB4MDksIDB4ZTIsIDB4MjgsIDB4YzcsIDB4N2UsIDB4MzQsIDB4MDUsIDB4ZTMsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ZDcsIDB4ODAsIDB4YmQsIDB4ZDIsIAorICAgIDB4YWYsIDB4MjIsIDB4NzUsIDB4MzEsIDB4NTMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTUsIDB4NjMsIDB4ODAsIDB4MTEsIDB4NzUsIDB4MzEsIDB4NTEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4MGIsIDB4MDgsIDB4MTAsIDB4MGIsIDB4MDUsIDB4OWUsIDB4MzQsIDB4MDAsIDB4MDIsIDB4MjgsIDB4NGQsIDB4N2MsIDB4YjIsIAorICAgIDB4MjAsIDB4ZTcsIDB4MjcsIDB4NTQsIDB4MDcsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4NmMsIDB4N2MsIDB4N2MsIDB4YjIsIDB4NTQsIDB4NzgsIAorICAgIDB4MDMsIDB4MDMsIDB4MDMsIDB4N2MsIDB4MmIsIDB4OWQsIDB4MTMsIDB4NDAsIDB4MWEsIDB4NjgsIDB4MTIsIDB4N2EsIDB4MTUsIDB4NjMsIDB4N2EsIDB4MjUsIAorICAgIDB4NjUsIDB4N2UsIDB4NjQsIDB4NzUsIDB4MzcsIDB4N2EsIDB4NjUsIDB4NjEsIDB4ODksIDB4MjQsIDB4MDIsIDB4NzUsIDB4NDUsIDB4N2UsIDB4NjQsIDB4NzQsIAorICAgIDB4YWQsIDB4ODAsIDB4ZjIsIDB4MmQsIDB4MTMsIDB4OWQsIDB4MzEsIDB4Y2EsIDB4MzksIDB4N2QsIDB4MzEsIDB4MmQsIDB4MTAsIDB4Y2EsIDB4MTksIDB4Y2EsIAorICAgIDB4MjksIDB4OTksIDB4MjQsIDB4ZGEsIDB4MjksIDB4ZGEsIDB4MDksIDB4ZGEsIDB4MzksIDB4ODAsIDB4YTIsIDB4N2EsIDB4MTUsIDB4NjMsIDB4N2UsIDB4NjQsIAorICAgIDB4NzUsIDB4MjMsIDB4NGQsIDB4MzMsIDB4NzgsIDB4MDksIDB4N2MsIDB4YjIsIDB4MjAsIDB4ZTcsIDB4MmEsIDB4N2UsIDB4NjQsIDB4NzQsIDB4YTIsIDB4N2EsIAorICAgIDB4NjUsIDB4NjEsIDB4MjIsIDB4NzUsIDB4MzEsIDB4NTIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MjEsIDB4NjMsIDB4N2UsIDB4MDksIDB4MzAsIDB4MGIsIAorICAgIDB4MDQsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ODksIDB4ODAsIDB4ZDQsIDB4NzUsIDB4MzEsIDB4NTQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MTUsIDB4NjMsIAorICAgIDB4N2UsIDB4MjUsIDB4NjUsIDB4ODAsIDB4OTAsIDB4NWUsIDB4MjAsIDB4MDcsIDB4NTQsIDB4NzgsIDB4N2UsIDB4NDQsIDB4NzUsIDB4YzEsIDB4MzAsIDB4ZTYsIAorICAgIDB4MTYsIDB4NGQsIDB4MzMsIDB4NjgsIDB4MjYsIDB4MWIsIDB4MzQsIDB4N2UsIDB4MDksIDB4NDAsIDB4MGIsIDB4MDQsIDB4N2UsIDB4NDQsIDB4NjcsIDB4NjMsIAorICAgIDB4MjAsIDB4ZTMsIDB4MDQsIDB4N2UsIDB4NDQsIDB4NzUsIDB4YzksIDB4Y2EsIDB4MDksIDB4Y2EsIDB4MzksIDB4OTksIDB4NDQsIDB4ZGEsIDB4MzksIDB4ZGEsIAorICAgIDB4MDksIDB4N2UsIDB4NjQsIDB4NzQsIDB4YWQsIDB4NGQsIDB4MzMsIDB4NjgsIDB4YTYsIDB4ODksIDB4NjQsIDB4N2EsIDB4MTUsIDB4NjMsIDB4ZjUsIDB4NjUsIAorICAgIDB4N2UsIDB4NjQsIDB4NzUsIDB4ODYsIDB4ODAsIDB4OTksIDB4N2UsIDB4MTUsIDB4NjMsIDB4ZTUsIDB4NjUsIDB4ODAsIDB4YzQsIDB4YzAsIDB4ZDAsIDB4YzAsIAorICAgIDB4ZDEsIDB4YzAsIDB4ZTAsIDB4Y2EsIDB4MTksIDB4YTksIDB4MjAsIDB4ZGYsIDB4MTIsIDB4YTksIDB4MjEsIDB4ZGYsIDB4MWIsIDB4NzUsIDB4MzEsIDB4MDEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4NTMsIDB4ZGYsIDB4ZjcsIDB4MTIsIDB4NDAsIDB4ZGMsIDB4ODAsIDB4MGQsIDB4NzUsIDB4MzEsIDB4ZmUsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2UsIDB4MTQsIDB4MDAsIDB4NTMsIDB4MDIsIDB4NDAsIDB4NTEsIDB4ZGEsIDB4MTksIDB4ZDAsIDB4ZTAsIDB4ZDAsIDB4ZDEsIDB4ZDAsIDB4ZDAsIAorICAgIDB4MzIsIDB4MDMsIDB4YTUsIDB4Y2IsIDB4MTksIDB4YjEsIDB4ODAsIDB4MDAsIDB4MjIsIDB4MjIsIDB4MDIsIDB4NzYsIDB4NDIsIDB4Y2EsIDB4MGIsIDB4Y2EsIAorICAgIDB4MWIsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4M2IsIDB4Y2EsIDB4NGIsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIDB4Y2EsIDB4N2IsIDB4Y2EsIDB4ZWIsIDB4YzAsIAorICAgIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MzMsIDB4YjQsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTksIDB4YjQsIDB4MDEsIDB4MTYsIDB4MzAsIDB4YzAsIDB4MDgsIAorICAgIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4NzYsIDB4MmMsIDB4ODAsIDB4MWYsIDB4MzAsIDB4YzEsIDB4MWMsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4NzYsIAorICAgIDB4YmQsIDB4ODAsIDB4MTQsIDB4MzAsIDB4YzEsIDB4MDgsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4NzYsIDB4YmQsIDB4ODAsIDB4MDksIDB4MzAsIDB4YzAsIAorICAgIDB4MDYsIDB4NzUsIDB4ZjEsIDB4MDAsIDB4MTIsIDB4NzYsIDB4MmMsIDB4ZDAsIDB4ZjEsIDB4ZGEsIDB4ZWIsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4NmIsIDB4ZGEsIAorICAgIDB4NWIsIDB4ZGEsIDB4NGIsIDB4ZGEsIDB4M2IsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4YzIsIDB4YzAsIDB4N2UsIDB4YjMsIAorICAgIDB4MmEsIDB4MzMsIDB4YjQsIDB4MDIsIDB4MDcsIDB4MTIsIDB4NzYsIDB4NGUsIDB4MDIsIDB4NzYsIDB4NDIsIDB4MjIsIDB4YjQsIDB4MDEsIDB4ZmMsIDB4MDIsIAorICAgIDB4NzYsIDB4ODgsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MmEsIDB4MzMsIDB4N2EsIDB4MDMsIDB4MmEsIDB4MzQsIDB4MjIsIDB4N2UsIDB4YjMsIAorICAgIDB4MmEsIDB4MmIsIDB4NTQsIDB4NjAsIDB4NjAsIDB4MDUsIDB4YjQsIDB4NDAsIDB4MTUsIDB4ODAsIDB4MTMsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIAorICAgIDB4MDUsIDB4MGMsIDB4NzUsIDB4MzEsIDB4NzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmUsIDB4ZjUsIDB4OGYsIDB4MjIsIDB4NzUsIAorICAgIDB4ZjYsIDB4MDAsIDB4MjIsIDB4YmUsIDB4NTcsIDB4MmEsIDB4MzEsIDB4MjgsIDB4MDQsIDB4N2UsIDB4NTcsIDB4MmEsIDB4MzEsIDB4N2EsIDB4MGYsIDB4MmEsIAorICAgIDB4MzYsIDB4N2EsIDB4NTcsIDB4MmEsIDB4M2EsIDB4MDIsIDB4NzYsIDB4ODgsIDB4N2UsIDB4ZWYsIDB4MmEsIDB4MzYsIDB4N2UsIDB4ZjcsIDB4MmEsIDB4M2EsIAorICAgIDB4N2UsIDB4MDcsIDB4MmEsIDB4M2EsIDB4NGQsIDB4MDAsIDB4NjgsIDB4MjEsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ZWIsIDB4YjAsIDB4ZjUsIDB4ZjMsIAorICAgIDB4YTMsIDB4YTUsIDB4MDgsIDB4MWIsIDB4ZjQsIDB4NjgsIDB4MDQsIDB4YTUsIDB4YjgsIDB4MDgsIDB4ZjAsIDB4N2EsIDB4ZWYsIDB4MmEsIDB4MzYsIDB4N2EsIAorICAgIDB4ZjcsIDB4MmEsIDB4M2EsIDB4NzUsIDB4MzEsIDB4MDYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MDEsIDB4ZjYsIDB4MjIsIDB4YzIsIDB4YzEsIDB4NzUsIAorICAgIDB4MzEsIDB4MDMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YTksIDB4MzYsIDB4ZTIsIDB4MTYsIDB4ZTUsIDB4ZjUsIDB4NTQsIDB4YzAsIDB4NjgsIDB4MDcsIDB4YTksIAorICAgIDB4ZDcsIDB4ZjQsIDB4YTksIDB4MjcsIDB4ZjQsIDB4ZmMsIDB4NTMsIDB4ZTEsIDB4M2YsIDB4NDMsIDB4ZjIsIDB4ODgsIDB4MDIsIDB4NzcsIDB4MjksIDB4N2UsIAorICAgIDB4YjMsIDB4MmEsIDB4MzQsIDB4YjQsIDB4MDIsIDB4MDQsIDB4YTksIDB4ZDQsIDB4ZTQsIDB4MjIsIDB4YjQsIDB4MDEsIDB4MzksIDB4N2UsIDB4MjEsIDB4ZTYsIAorICAgIDB4N2MsIDB4MzIsIDB4N2UsIDB4MTMsIDB4MmEsIDB4MzUsIDB4MmMsIDB4MjEsIDB4N2EsIDB4MjMsIDB4MmEsIDB4MzUsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MmUsIAorICAgIDB4MDQsIDB4MmEsIDB4M2MsIDB4ZTUsIDB4ZTMsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4YTUsIDB4ZGIsIDB4ZjYsIDB4YTksIDB4ZDQsIDB4ZTQsIAorICAgIDB4NzUsIDB4MzEsIDB4NzAsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MzUsIDB4N2UsIDB4YTMsIDB4MmEsIDB4MzIsIDB4YmMsIDB4YWIsIAorICAgIDB4NzgsIDB4MDMsIDB4MTIsIDB4NzcsIDB4YzAsIDB4MjIsIDB4MDIsIDB4N2IsIDB4MjksIDB4ZTUsIDB4ZTYsIDB4YjQsIDB4MDgsIDB4NjUsIDB4YTksIDB4YzQsIAorICAgIDB4ZTIsIDB4N2UsIDB4MDEsIDB4ZTMsIDB4N2UsIDB4MTEsIDB4ZTMsIDB4N2UsIDB4MzEsIDB4ZTMsIDB4N2UsIDB4MjEsIDB4ZTMsIDB4N2UsIDB4NTEsIDB4ZTMsIAorICAgIDB4N2UsIDB4NDEsIDB4ZTMsIDB4N2UsIDB4NzEsIDB4ZTMsIDB4N2UsIDB4NjEsIDB4ZTMsIDB4N2EsIDB4MGYsIDB4MmEsIDB4MmIsIDB4N2EsIDB4MWYsIDB4MmEsIAorICAgIDB4MmYsIDB4NzUsIDB4MzEsIDB4MDQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MDEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MTEsIDB4MzEsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MjEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIAorICAgIDB4NDEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4NjEsIDB4MzEsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2EsIDB4NzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YTksIDB4ZDQsIDB4ZTQsIDB4YTksIDB4ZDcsIDB4ZjQsIDB4YTksIDB4YzYsIDB4ZTIsIAorICAgIDB4MTIsIDB4NzcsIDB4OTQsIDB4MjIsIDB4NmQsIDB4MDAsIDB4N2UsIDB4MTQsIDB4MDEsIDB4MDIsIDB4N2EsIDB4MDcsIDB4MmEsIDB4M2EsIDB4N2EsIDB4MDMsIAorICAgIDB4MmEsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmIsIDB4MjAsIDB4ZTcsIDB4MGYsIDB4N2EsIDB4MjMsIDB4MmEsIDB4MzQsIDB4N2EsIDB4MzMsIDB4MmEsIAorICAgIDB4MzMsIDB4YmUsIDB4MDcsIDB4MmEsIDB4MzEsIDB4NjgsIDB4MDksIDB4MjIsIDB4N2EsIDB4MzMsIDB4MmEsIDB4MzQsIDB4N2EsIDB4MjMsIDB4MmEsIDB4MzMsIAorICAgIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmIsIDB4NTQsIDB4ZTMsIDB4MjMsIDB4MjMsIDB4MzAsIDB4ZTAsIDB4MDIsIDB4ZDIsIDB4ZTUsIDB4MzAsIDB4ZTcsIDB4MDIsIAorICAgIDB4ZDIsIDB4ZTQsIDB4MzAsIDB4ZTUsIDB4MDYsIDB4MzAsIDB4ZTQsIDB4MDMsIDB4MDIsIDB4N2IsIDB4MjksIDB4NTQsIDB4M2UsIDB4ZjUsIDB4ZjAsIDB4MDMsIAorICAgIDB4NTQsIDB4MWYsIDB4YzMsIDB4MjUsIDB4ZjAsIDB4OTAsIDB4NzcsIDB4ZWMsIDB4NzUsIDB4ODQsIDB4ZmYsIDB4NzMsIDB4MDIsIDB4NzksIDB4NDAsIDB4MDIsIAorICAgIDB4NzgsIDB4MzQsIDB4MDIsIDB4NzksIDB4ZGQsIDB4MDIsIDB4NzksIDB4ZjgsIDB4MDIsIDB4NzgsIDB4ZDksIDB4MDIsIDB4NzgsIDB4OWEsIDB4MDIsIDB4N2EsIAorICAgIDB4MTEsIDB4MDIsIDB4N2EsIDB4MTEsIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MTQsIAorICAgIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MTQsIDB4MDIsIDB4N2EsIDB4MWEsIDB4MDIsIAorICAgIDB4N2EsIDB4Y2UsIDB4MDIsIDB4N2EsIDB4MTcsIDB4MDIsIDB4N2EsIDB4MTcsIDB4MDIsIDB4N2EsIDB4MTcsIDB4MDIsIDB4N2EsIDB4MTcsIDB4MDIsIDB4N2EsIAorICAgIDB4MTcsIDB4MDIsIDB4N2EsIDB4MTcsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIDB4MDYsIDB4MmEsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmQsIDB4NjAsIAorICAgIDB4NTYsIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MmEsIDB4MmUsIDB4N2UsIDB4MTcsIDB4MmEsIDB4MmYsIDB4NzUsIDB4MzEsIDB4NzIsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2EsIDB4MDEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MTEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4N2IsIDB4MzMsIAorICAgIDB4NDAsIDB4MzUsIDB4MDIsIDB4NzYsIDB4NzMsIDB4YjQsIDB4MDgsIDB4MTAsIDB4NzUsIDB4MzEsIDB4NzQsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIAorICAgIDB4M2YsIDB4ZjEsIDB4ZjUsIDB4ZjMsIDB4NzUsIDB4ZjYsIDB4MDEsIDB4MjIsIDB4YjQsIDB4MDAsIDB4MWMsIDB4NzUsIDB4MzEsIDB4NzUsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4NzUsIDB4ZjMsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NzUsIDB4ZjMsIDB4MDAsIAorICAgIDB4NzUsIDB4ZjMsIDB4MDAsIDB4NzUsIDB4ZjYsIDB4MDIsIDB4MjIsIDB4MDIsIDB4N2IsIDB4MjksIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIDB4MDAsIAorICAgIDB4MzUsIDB4NzUsIDB4MzEsIDB4NzYsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MzAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4ZjEsIDB4N2UsIAorICAgIDB4YjMsIDB4MmEsIDB4MzAsIDB4MjAsIDB4ZTcsIDB4MDksIDB4ZTUsIDB4ZTEsIDB4MzAsIDB4ZTcsIDB4MGQsIDB4NzQsIDB4MDEsIDB4ODAsIDB4MGIsIDB4ZTUsIAorICAgIDB4ZTEsIDB4MzAsIDB4ZTYsIDB4MDQsIDB4NzQsIDB4MDEsIDB4ODAsIDB4MDIsIDB4NzQsIDB4MDAsIDB4NTMsIDB4ZjEsIDB4ODAsIDB4ZjUsIDB4ZjMsIDB4NzUsIAorICAgIDB4ZjMsIDB4MDAsIDB4NzUsIDB4ZjYsIDB4MDIsIDB4MjIsIDB4MDIsIDB4N2IsIDB4MjksIDB4YzAsIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MzAsIDB4NTQsIAorICAgIDB4MGYsIDB4NDIsIDB4ZjEsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmUsIDB4YjQsIDB4MDAsIDB4NDUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIDB4MDEsIAorICAgIDB4MjQsIDB4NzUsIDB4MzEsIDB4NzcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MzAsIDB4NTQsIDB4MGYsIDB4NzgsIDB4MDUsIDB4NTMsIAorICAgIDB4ZTEsIDB4M2YsIDB4ODAsIDB4MzcsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MzAsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4NTMsIDB4ZTEsIDB4N2YsIDB4ODAsIDB4MmIsIAorICAgIDB4NTMsIDB4ZTEsIDB4YmYsIDB4ODAsIDB4MjYsIDB4YjQsIDB4MDMsIDB4MTcsIDB4NzUsIDB4MzEsIDB4NzgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIAorICAgIDB4MmEsIDB4MzAsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4NDMsIDB4ZTEsIDB4ODAsIDB4ODAsIDB4MTEsIDB4NDMsIDB4ZTEsIDB4NDAsIDB4ODAsIDB4MGMsIDB4NDMsIAorICAgIDB4ZTEsIDB4YzAsIDB4ZDAsIDB4ZjEsIDB4NzUsIDB4MzEsIDB4MDcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MjIsIDB4ZDAsIDB4ZjEsIDB4MDIsIDB4NzYsIDB4NmYsIAorICAgIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIDB4MDksIDB4MjMsIDB4NzUsIDB4MzEsIDB4NzksIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIAorICAgIDB4MmUsIDB4YmUsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4NjgsIDB4MTEsIDB4Y2EsIDB4YjgsIDB4YzAsIDB4ZjEsIDB4MTIsIDB4NDMsIDB4ZDQsIDB4ZDAsIDB4ZjEsIAorICAgIDB4ZGEsIDB4YjgsIDB4NTAsIDB4NzYsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4ODAsIDB4NmQsIDB4YjQsIDB4MDUsIDB4MDgsIDB4NzUsIDB4MzEsIDB4N2EsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4ODAsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MTksIDB4NzUsIDB4MzEsIDB4N2IsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIAorICAgIDB4MmEsIDB4MmUsIDB4YjQsIDB4MDEsIDB4NTUsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NDQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIAorICAgIDB4NDYsIDB4YjQsIDB4MDEsIDB4MTksIDB4NzUsIDB4MzEsIDB4N2MsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmUsIDB4YjQsIDB4MDEsIAorICAgIDB4MzksIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NTQsIDB4ZmUsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIDB4MmEsIDB4YjQsIDB4MDcsIDB4MmEsIAorICAgIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmQsIDB4NjAsIDB4MjQsIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MmEsIDB4MmUsIDB4N2UsIDB4MTcsIDB4MmEsIDB4MmYsIAorICAgIDB4NzUsIDB4MzEsIDB4NzMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MDEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2EsIDB4MTEsIDB4MzEsIDB4MTIsIAorICAgIDB4N2MsIDB4MTUsIDB4MTIsIDB4N2IsIDB4NWYsIDB4NDAsIDB4MDMsIDB4MDIsIDB4NzYsIDB4NmYsIDB4MDIsIDB4N2IsIDB4MjksIDB4N2UsIDB4YjMsIDB4MmEsIAorICAgIDB4MmMsIDB4YjQsIDB4MGIsIDB4ZjYsIDB4NzUsIDB4MzEsIDB4N2QsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmUsIDB4N2UsIDB4YTMsIAorICAgIDB4MmEsIDB4MzAsIDB4NGMsIDB4YWIsIDB4NzgsIDB4ZTQsIDB4ODAsIDB4ZGYsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIDB4MGEsIDB4ZGIsIDB4NzUsIAorICAgIDB4MzEsIDB4N2UsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmUsIDB4NzAsIDB4Y2YsIDB4ZjUsIDB4ZjMsIDB4NzUsIDB4ZjYsIDB4MDEsIAorICAgIDB4MjIsIDB4MDIsIDB4N2IsIDB4MjksIDB4MDIsIDB4N2IsIDB4MjksIDB4MDIsIDB4N2IsIDB4MjksIDB4N2UsIDB4YjMsIDB4MmEsIDB4MmMsIDB4YjQsIDB4MDQsIAorICAgIDB4MjAsIDB4NzUsIDB4MzEsIDB4YzMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTcsIDB4MmEsIDB4MmQsIDB4N2UsIAorICAgIDB4MTgsIDB4MmEsIDB4M2MsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDcsIDB4MmEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MjEsIDB4MDIsIDB4N2EsIAorICAgIDB4YzgsIDB4YjQsIDB4MDYsIDB4M2EsIDB4NzUsIDB4MzEsIDB4YzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIAorICAgIDB4MDAsIDB4ZmUsIDB4N2QsIDB4Y2EsIDB4N2UsIDB4ZDcsIDB4MmEsIDB4MmQsIDB4N2UsIDB4NzgsIDB4MmEsIDB4M2MsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIAorICAgIDB4N2UsIDB4NzcsIDB4MmEsIDB4MzEsIDB4NzUsIDB4MzEsIDB4YzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIAorICAgIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4N2MsIDB4NWEsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4NDAsIDB4NGYsIDB4ODAsIDB4NGEsIDB4YjQsIDB4MDAsIAorICAgIDB4MWMsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4NzYsIDB4NmYsIDB4ZTQsIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIAorICAgIDB4ZDUsIDB4ZTAsIDB4ZjcsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MDIsIDB4ZmYsIDB4Y2EsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4YjQsIDB4MDksIDB4MTIsIAorICAgIDB4N2UsIDB4NTcsIDB4MmEsIDB4MmQsIDB4NGQsIDB4NTUsIDB4NjgsIDB4MDUsIDB4YTksIDB4ZDIsIDB4YjEsIDB4ODAsIDB4MDMsIDB4YTksIDB4YzIsIDB4YjEsIAorICAgIDB4ODAsIDB4MTYsIDB4YjQsIDB4MDcsIDB4MTYsIDB4YzIsIDB4YWYsIDB4N2UsIDB4MDcsIDB4MmEsIDB4MmYsIDB4N2UsIDB4MTcsIDB4MmEsIDB4MmQsIDB4YzAsIAorICAgIDB4ZDEsIDB4Y2EsIDB4MTgsIDB4Y2EsIDB4MzgsIDB4Y2EsIDB4MjgsIDB4MzIsIDB4MDIsIDB4NzYsIDB4NmYsIDB4MDIsIDB4N2IsIDB4MjksIDB4N2UsIDB4YjMsIAorICAgIDB4MmEsIDB4MmMsIDB4YjQsIDB4MDMsIDB4MTUsIDB4NzUsIDB4MzEsIDB4YzIsIDB4MTIsIDB4N2MsIDB4MTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIAorICAgIDB4MTcsIDB4MmEsIDB4MmQsIDB4N2UsIDB4NTcsIDB4MmEsIDB4MzEsIDB4MDIsIDB4NzYsIDB4NzMsIDB4YjQsIDB4MDUsIDB4MzksIDB4NzUsIDB4MzEsIDB4YzAsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4N2UsIDB4MDgsIDB4MmEsIDB4M2MsIAorICAgIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzcsIDB4MmEsIDB4MmQsIDB4N2UsIDB4NDcsIDB4MmEsIDB4MzEsIAorICAgIDB4MTIsIDB4N2MsIDB4MjEsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4N2UsIDB4MDgsIDB4MmEsIDB4M2MsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIAorICAgIDB4NTcsIDB4MmEsIDB4MzEsIDB4MDIsIDB4NzYsIDB4NzMsIDB4MDIsIDB4N2IsIDB4MjksIDB4NzUsIDB4MzEsIDB4MDcsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NDMsIAorICAgIDB4ZTEsIDB4YzAsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4N2IsIDB4OWUsIDB4NDAsIAorICAgIDB4MTksIDB4N2UsIDB4MDgsIDB4MmEsIDB4M2MsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4NDksIDB4MTIsIDB4N2MsIDB4MjEsIAorICAgIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MGIsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4YzAsIAorICAgIDB4YTgsIDB4YzAsIDB4ODcsIDB4YzIsIDB4YWYsIDB4YTksIDB4ZDUsIDB4ODcsIDB4MTIsIDB4N2IsIDB4OWUsIDB4NDAsIDB4MmIsIDB4N2UsIDB4NTgsIDB4MDAsIAorICAgIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4NjEsIDB4N2UsIDB4NzgsIDB4MmEsIDB4M2MsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIAorICAgIDB4NzcsIDB4MmEsIDB4MzEsIDB4YmQsIDB4NzQsIDB4NzgsIDB4MTEsIDB4NzUsIDB4MzEsIDB4YzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4MTIsIDB4N2MsIDB4NWEsIAorICAgIDB4NDAsIDB4MDYsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIDB4ZDAsIDB4ODcsIDB4ZDAsIDB4YTgsIDB4ZDMsIDB4MjIsIDB4N2UsIDB4MjQsIAorICAgIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzQsIDB4N2YsIDB4Y2EsIDB4MGIsIDB4MWEsIDB4NTAsIDB4YzUsIDB4ZjAsIDB4N2QsIDB4NjIsIDB4N2QsIDB4NzUsIDB4N2QsIAorICAgIDB4ODcsIDB4N2UsIDB4MzQsIDB4N2YsIDB4YzIsIDB4N2UsIDB4MWIsIDB4YjAsIDB4N2UsIDB4MzQsIDB4N2YsIDB4MDMsIDB4YjQsIDB4MDEsIDB4MDQsIDB4N2UsIAorICAgIDB4MzQsIDB4N2YsIDB4Y2MsIDB4N2UsIDB4MWIsIDB4YjAsIDB4YmMsIDB4MGIsIDB4NTAsIDB4NDksIDB4M2UsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MGEsIDB4NTAsIAorICAgIDB4MmQsIDB4NzUsIDB4MGIsIDB4M2EsIDB4MzAsIDB4NjksIDB4NTMsIDB4MDAsIDB4MDIsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmMsIAorICAgIDB4MWIsIDB4NTAsIDB4MzAsIDB4M2UsIDB4MTAsIDB4M2UsIDB4MTAsIDB4MGEsIDB4NTEsIDB4MmQsIDB4MzUsIDB4NjksIDB4NDEsIDB4MDAsIDB4MDIsIDB4MGIsIAorICAgIDB4MWEsIDB4MzAsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmUsIDB4NDQsIDB4ZmYsIDB4ZmYsIDB4NzgsIDB4MDUsIDB4N2UsIDB4MWIsIAorICAgIDB4OTAsIDB4MGEsIDB4NDksIDB4NGQsIDB4NDQsIDB4NjgsIDB4MGMsIDB4YmUsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4MjgsIDB4MDQsIDB4N2UsIDB4NDQsIDB4MDAsIAorICAgIDB4ZmYsIDB4YzMsIDB4MjIsIDB4ZDMsIDB4MjIsIAorCisvLyBTZWdtZW50ICMxNiwgU3RhcnQgQWRkcmVzcyAwMGZmN2ZjNiwgTGVuZ3RoIDQKKzB4ZmYsMHgwMCwweGM2LDB4N2YsMHgwNCwweDAwLAorICAgIDB4MDEsIDB4MTAsIDB4MDQsIDB4MDAsIAorCisvLyBTZWdtZW50ICMxNywgU3RhcnQgQWRkcmVzcyAwMGZmN2MxNSwgTGVuZ3RoIDMzMAorMHhmZiwweDAwLDB4MTUsMHg3YywweDRhLDB4MDEsCisgICAgMHhjYSwgMHgwOCwgMHg3ZSwgMHgwMSwgMHgzMSwgMHg3YSwgMHgwMywgMHgzZiwgMHhmMCwgMHhkYSwgMHgwOCwgMHgyMiwgMHg3ZSwgMHgxYiwgMHhjMCwgMHg3YSwgCisgICAgMHgwYiwgMHhjMCwgMHgwYiwgMHgxNCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg3OCwgMHhmMiwgMHgyMiwgMHg3ZiwgMHg2ZiwgMHg3ZiwgMHhmMCwgMHgxYiwgCisgICAgMHhmYywgMHg3YywgMHg1NCwgMHg3ZCwgMHgzMiwgMHg4MCwgMHgwOCwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHg5ZSwgCisgICAgMHg0NCwgMHgwMCwgMHgxMCwgMHg1MCwgMHhmMiwgMHgyZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwNiwgMHhjYSwgMHg0OCwgMHgxYiwgMHg0NCwgMHg3OCwgCisgICAgMHhmYSwgMHg3ZiwgMHhmNiwgMHg4OSwgMHhlNCwgMHhjYSwgMHg2YiwgMHg1ZSwgMHhkNCwgMHgwMCwgMHgzZiwgMHg2OCwgMHgyMCwgMHg3ZSwgMHg4NCwgMHgwMCwgCisgICAgMHg0MCwgMHg5ZCwgMHg4ZCwgMHhkYSwgMHg2YiwgMHhiZCwgMHg4NywgMHgzOCwgMHgxNiwgMHhjYSwgMHg3OSwgMHg3ZCwgMHg3OCwgMHgxMiwgMHg3YywgMHg4NCwgCisgICAgMHhkYSwgMHg3OSwgMHg0MCwgMHgwOCwgMHg5ZCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg4MCwgMHgwNSwgMHhjMiwgMHhkNywgMHgyMiwgMHhkYSwgMHg2YiwgMHg0MywgCisgICAgMHg5MCwgMHgzMCwgMHg3NCwgMHhhYSwgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3NCwgMHg1NSwgMHgzOSwgMHhiNSwgMHgyYSwgMHhhYSwgMHg3NCwgMHhhMCwgCisgICAgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg5ZCwgMHg3MCwgMHg1MCwgMHgwNiwgMHgyZCwgMHg3MCwgMHg3ZCwgMHgwNywgCisgICAgMHg2ZCwgMHg3NywgMHg3YywgMHgzMSwgMHg3ZSwgMHg3YiwgMHgwMCwgMHg3YSwgMHg2YiwgMHgwMCwgMHgwYiwgMHg3YywgMHgwYiwgMHg2YywgMHhhNSwgMHhkOSwgCisgICAgMHhmMywgMHg3ZiwgMHgxNiwgMHgxYiwgMHgxYywgMHg3ZSwgMHg1NCwgMHgyNywgMHgxMCwgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgMHgxMCwgMHg2OCwgMHgwNiwgCisgICAgMHgxYiwgMHg1NCwgMHg3OCwgMHhmNSwgMHg4MCwgMHgyYywgMHg2ZCwgMHgwMCwgMHg3YywgMHgyMCwgMHg3ZiwgMHgxNiwgMHg5ZiwgMHgxMCwgMHg3ZiwgMHgyNywgCisgICAgMHg5ZiwgMHgyMCwgMHg3ZSwgMHgyYiwgMHgwMCwgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgMHgwMSwgMHg3OCwgMHgxNiwgMHgwYiwgMHgyYywgMHgwYiwgMHgxYywgCisgICAgMHhhNSwgMHhkYiwgMHhlZiwgMHg3YywgMHhiNiwgMHgyMCwgMHhlMCwgMHgwMywgMHg2MywgMHg5MCwgMHgzMCwgMHg0ZCwgMHg3NywgMHg3OCwgMHg5MywgMHhjMiwgCisgICAgMHhkNywgMHgyMiwgMHhkMiwgMHhkNywgMHgyMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwNCwgMHg0MiwgMHgwOCwgMHgwNiwgMHgwNCwgMHgwMiwgMHgwNCwgMHgwMCwgCisgICAgMHgwMiwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMiwgMHg4MiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMiwgMHgwMiwgCisgICAgMHgwMiwgMHgwMiwgMHgwNCwgMHgwMiwgMHgwOCwgMHgxMCwgMHgwMiwgMHgxMCwgMHgwNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwgMHgwMCwgCisgICAgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwMiwgMHgwOCwgMHgwMiwgMHgwNCwgMHgyMCwgMHgwNCwgMHg3ZSwgMHgxOCwgMHg3ZiwgMHhiZCwgMHg3YSwgCisgICAgMHgxYywgMHgwMCwgMHhmZSwgMHgwYiwgMHgxYSwgMHgwMCwgMHg1ZSwgMHgxMCwgMHgxZiwgMHhiZSwgMHgxMCwgMHgxYSwgMHgzOCwgMHgxYSwgMHgwYSwgMHg1MSwgCisgICAgMHgyMywgMHg3ZSwgMHgxOCwgMHg3YywgMHhmYSwgMHg3YSwgMHgxYywgMHgwMCwgMHhmZiwgMHgyZCwgMHgzNSwgMHgwYiwgMHgxYSwgMHg1MCwgMHg2MCwgMHgwOCwgCisgICAgMHhhNSwgMHhiOCwgMHgwMiwgMHgwMywgMHg0ZSwgMHhhMCwgMHgwOCwgMHgyMiwgMHg4MCwgMHhmZSwgCit9OworCitzdGF0aWMgc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIElNQUdFX1ZFUlNJT05fTkFNRSA9IHsKKwkxLCAxNiwgNCB9OwkJLy8gTWFqb3IsIE1pbm9yLCBCdWlsZAorCisjdW5kZWYgSU1BR0VfVkVSU0lPTl9OQU1FCisKKyN1bmRlZiBJTUFHRV9BUlJBWV9OQU1FCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duMi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3Mjc3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duMi5oCkBAIC0wLDAgKzEsMTEzMyBAQAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qIEVkZ2Vwb3J0LzQgQmluYXJ5IEltYWdlCisvLyogR2VuZXJhdGVkIGJ5IEhFWDJDIHYxLjA2CisvLyogQ29weXJpZ2h0IChDKSAxOTk4IEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8qCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisvLyoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvL0ltYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9uCisjaWYgIWRlZmluZWQoREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRCkKKwkjZGVmaW5lIERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgeworCQlfX2xlMTYgRXh0QWRkcjsKKwkJX19sZTE2IEFkZHI7CisJCV9fbGUxNiBMZW47CisJCXVuc2lnbmVkIGNoYXIgIERhdGFbMF07CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8geworCQl1bnNpZ25lZCBjaGFyICBNYWpvclZlcnNpb247CisJCXVuc2lnbmVkIGNoYXIgIE1pbm9yVmVyc2lvbjsKKwkJdW5zaWduZWQgc2hvcnQgQnVpbGROdW1iZXI7CisJfTsKKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJTUFHRV9BUlJBWV9OQU1FKQorCSNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlGaXJtd2FyZUltYWdlCisJI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJRmlybXdhcmVJbWFnZVZlcnNpb24KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBJTUFHRV9BUlJBWV9OQU1FW10gPSB7CisKKy8vIFNlZ21lbnQgIzEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMDAsIExlbmd0aCA2CisweGZmLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDgwLCAweDAyLCAweDQ1LCAweDE0LCAKKworLy8gU2VnbWVudCAjMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDBiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4NDQsIDB4YTUsIAorCisvLyBTZWdtZW50ICMzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDEzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHg2MywgMHhhYiwgCisKKy8vIFNlZ21lbnQgIzQsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMWIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDFiLCAKKworLy8gU2VnbWVudCAjNSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDIzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MjMsIAorCisvLyBTZWdtZW50ICM2LCBTdGFydCBBZGRyZXNzIDAwZmYwMDJiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MmIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyYiwgCisKKy8vIFNlZ21lbnQgIzcsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMzMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDMzLCAKKworLy8gU2VnbWVudCAjOCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAzYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDNiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4M2IsIAorCisvLyBTZWdtZW50ICM5LCBTdGFydCBBZGRyZXNzIDAwZmYwMDQzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NDMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg0MywgCisKKy8vIFNlZ21lbnQgIzEwLCBTdGFydCBBZGRyZXNzIDAwZmYwMDRiLCBMZW5ndGggMworMHhmZiwweDAwLDB4NGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg0YiwgCisKKy8vIFNlZ21lbnQgIzExLCBTdGFydCBBZGRyZXNzIDAwZmYwMDUzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHg2NywgMHg1ZiwgCisKKy8vIFNlZ21lbnQgIzEyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDdiLCBMZW5ndGggMworMHhmZiwweDAwLDB4N2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg3YiwgCisKKy8vIFNlZ21lbnQgIzEzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDgwLCBMZW5ndGggNworMHhmZiwweDAwLDB4ODAsMHgwMCwweDA3LDB4MDAsCisgICAgMHg3ZSwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHg1MiwgCisKKy8vIFNlZ21lbnQgIzE0LCBTdGFydCBBZGRyZXNzIDAwZmYzMDAwLCBMZW5ndGggMjkxOAorMHhmZiwweDAwLDB4MDAsMHgzMCwweDY2LDB4MGIsCisgICAgMHgxMiwgMHgzMCwgMHg2NCwgMHgxMiwgMHgzMCwgMHhmZiwgMHgxMiwgMHgzMSwgMHgyZiwgMHgxMiwgMHgzMCwgMHhiMCwgMHg4MCwgMHhmMiwgMHhlNSwgMHgyMywgCisgICAgMHg2MCwgMHgxOSwgMHg3ZSwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhiMSwgMHgwMSwgMHhiOSwgMHhiNCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwNSwgMHgxNCwgCisgICAgMHgxOSwgMHhiMSwgMHgwMSwgMHhiOSwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZSwgMHg3OCwgMHhlYiwgMHgyMiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHhiMywgCisgICAgMHgzZiwgMHhmMSwgMHhiNCwgMHgwMSwgMHgwMywgMHgxMiwgMHg2NSwgMHg2NywgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHhiMywgMHgzZiwgCisgICAgMHhmMSwgMHhiNCwgMHgwMSwgMHgxZCwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxYSwgMHg2YywgMHhhYSwgCisgICAgMHg2MCwgMHgwZiwgMHhjYSwgMHgwYiwgMHhjYSwgMHgzOSwgMHhjYSwgMHg1OSwgMHgxMiwgMHg2NCwgMHgyNCwgMHhkYSwgMHg1OSwgMHhkYSwgMHgzOSwgMHhkYSwgCisgICAgMHgwYiwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHhlNSwgMHgyMiwgMHg2MCwgMHg0MywgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHhiZSwgMHgwNCwgCisgICAgMHgwMywgMHg4MCwgMHgzOCwgMHgzOSwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgyMSwgMHgwOSwgMHhhMCwgCisgICAgMHgwMCwgMHgwNCwgMHg0ZSwgMHhhMCwgMHgwNSwgMHgxOSwgMHhhMCwgMHgwMCwgMHgwNCwgMHgwYSwgMHgzMiwgMHgwOSwgMHg1MywgMHgzNSwgMHgzMywgMHg1ZSwgCisgICAgMHg1MSwgMHgyNywgMHg2OCwgMHgwYiwgMHgwOSwgMHhhMCwgMHgwMCwgMHgxMCwgMHg0ZSwgMHhhMCwgMHgwMSwgMHgxOSwgMHhhMCwgMHgwMCwgMHgxMCwgMHgyZSwgCisgICAgMHgwNCwgMHgwMSwgMHgwMCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZSwgMHg3OCwgMHhkMSwgMHg3NSwgMHgyMiwgMHgwMCwgMHhkMiwgMHhhZiwgMHgyMiwgCisgICAgMHhjMiwgMHhhZiwgMHhlNSwgMHgyNiwgMHg2MCwgMHgzNiwgMHg3ZSwgMHgyMCwgMHgwMCwgMHg3ZSwgMHgzMCwgMHgwMSwgMHhlNSwgMHgyNiwgMHhhNSwgMHg1YiwgCisgICAgMHg2OCwgMHgyMSwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgMHgyYiwgMHg0OSwgMHgzMiwgMHgwMSwgMHg3OSwgMHhiZSwgMHgzNCwgMHgwMCwgMHgwMCwgMHg2OCwgCisgICAgMHgxMiwgMHg3ZSwgMHhiMSwgMHgyMSwgMHhhNSwgMHg0YiwgMHg3YSwgMHhiMSwgMHgyMSwgMHhjYSwgMHgxOSwgMHg0OSwgMHgyMiwgMHgzMCwgMHhlZiwgMHg5OSwgCisgICAgMHgyNCwgMHhkYSwgMHgxOSwgMHgzZSwgMHgzMCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZSwgMHg3OCwgMHhkMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHg0NiwgCisgICAgMHg0ZiwgMHg0OSwgMHg3YywgMHg0YywgMHhhOSwgMHg0ZiwgMHhkNiwgMHg1MywgMHgwMywgMHg1NiwgMHgzMCwgMHg1OSwgMHg1ZCwgMHg1YywgMHg4YSwgMHhjMiwgCisgICAgMHhhZiwgMHhlNSwgMHgyNCwgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzMSwgMHgxYywgCisgICAgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZSwgMHg3OCwgMHhlZiwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjYSwgMHgyOCwgMHgxMiwgMHgzNSwgCisgICAgMHg0YywgMHhkYSwgMHgyOCwgMHg0MCwgMHgwOSwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMiwgMHgzNSwgMHgzMywgMHhmNCwgMHg1MiwgMHgyNCwgMHgyMiwgMHhjMiwgCisgICAgMHhhZiwgMHhlNSwgMHgyMywgMHg2MCwgMHgxNCwgMHg3ZSwgMHgyMCwgMHgwMCwgMHgxMywgMHg1MCwgMHgwNywgMHhjYSwgMHhiOCwgMHgxMiwgMHgzMSwgMHg0YywgCisgICAgMHhkYSwgMHhiOCwgMHhhNSwgMHgwYSwgMHhiZSwgMHgyMSwgMHgyZSwgMHg3OCwgMHhlZiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgCisgICAgMHgyYiwgMHg0OSwgMHgyMiwgMHgzMSwgMHg1NywgMHg4OSwgMHgyNCwgMHgzMSwgMHg2NywgMHgzMSwgMHhkMCwgMHgzMiwgMHgzOSwgMHgzMiwgMHhhMiwgMHgzMywgCisgICAgMHgwYiwgMHgzMywgMHg3NCwgMHgzMywgMHhkZCwgMHgzNCwgMHg0NiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3OSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgCisgICAgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgCisgICAgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0OSwgMHg0NSwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgCisgICAgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgMHgwMSwgMHg4OSwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg4OSwgMHg3ZSwgCisgICAgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhiOSwgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhiOSwgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgCisgICAgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgCisgICAgMHhiMywgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgMHgxOCwgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiOSwgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgCisgICAgMHg3ZSwgMHgyNywgMHgwMSwgMHg3YiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MSwgMHgwMCwgMHgwOSwgMHhiMiwgCisgICAgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgCisgICAgMHg0YywgMHg3MiwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgCisgICAgMHgwMSwgMHg4YiwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg4YiwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhiYSwgMHg4MCwgCisgICAgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhiYSwgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgCisgICAgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgMHhiMywgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgMHgxOSwgMHg2YywgCisgICAgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiYSwgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3ZCwgMHhiZSwgMHgyNCwgMHgwMCwgCisgICAgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MiwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgCisgICAgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg0ZiwgMHg5ZiwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgCisgICAgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgMHgwMSwgMHg4ZCwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgCisgICAgMHg4ZCwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhiYiwgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhiYiwgMHhhNSwgMHhiZSwgCisgICAgMHgwMCwgMHgxZiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgCisgICAgMHg3NSwgMHgyZiwgMHhiMywgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgMHgxYSwgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiYiwgMHgxMiwgMHg2NCwgCisgICAgMHg4NiwgMHgyMiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3ZiwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4MywgMHgwMCwgCisgICAgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgCisgICAgMHgxMiwgMHgxMiwgMHg1MiwgMHhjYywgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgCisgICAgMHhiZSwgMHgyNywgMHgwMSwgMHg4ZiwgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg4ZiwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgCisgICAgMHhiYywgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhiYywgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgCisgICAgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgMHhiMywgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgCisgICAgMHgxYiwgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiYywgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4MSwgMHhiZSwgCisgICAgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4NCwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgCisgICAgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1NSwgMHhmOSwgMHg3ZCwgMHgyMSwgMHhkYSwgCisgICAgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5MSwgMHg2OCwgMHgwZCwgMHg3YSwgCisgICAgMHgyNywgMHgwMSwgMHg5MSwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhiZCwgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhiZCwgCisgICAgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgCisgICAgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgMHhiMywgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgMHgxYywgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiZCwgCisgICAgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4MywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgCisgICAgMHg4NSwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgCisgICAgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1OSwgMHgyNiwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgCisgICAgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5MywgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg5MywgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgCisgICAgMHg2MywgMHgwMSwgMHhiZSwgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhiZSwgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgMHg3ZSwgMHg2MCwgMHgwMSwgCisgICAgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgMHhiMywgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHhjMiwgMHgxZCwgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiZSwgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg4NSwgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgMHg3ZSwgMHgyNCwgMHg4NiwgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgCisgICAgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1YywgMHg1MywgMHg3ZCwgCisgICAgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5NSwgMHg2OCwgCisgICAgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg5NSwgMHg3ZSwgMHg2MCwgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhiZiwgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgCisgICAgMHgwMSwgMHhiZiwgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgMHg3ZSwgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgCisgICAgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgMHhiMywgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgMHgxZSwgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgCisgICAgMHgwMSwgMHhiZiwgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4NywgMHhiZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyNCwgCisgICAgMHg3ZSwgMHgyNCwgMHg4NywgMHgwMCwgMHgwOSwgMHhiMiwgMHgwMCwgMHgxNCwgMHhjYSwgMHhiOCwgMHg1ZSwgMHhiMCwgMHgxZSwgMHhkYSwgMHhiOCwgMHg2OCwgCisgICAgMHgwYiwgMHhjYSwgMHgxOSwgMHg3ZCwgMHgxMiwgMHgxMiwgMHg1ZiwgMHg4MCwgMHg3ZCwgMHgyMSwgMHhkYSwgMHgxOSwgMHgzMCwgMHhlNiwgMHgxOCwgMHg3ZSwgCisgICAgMHg2MCwgMHgwMCwgMHg4MCwgMHgxZSwgMHhiZSwgMHgyNywgMHgwMSwgMHg5NywgMHg2OCwgMHgwZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg5NywgMHg3ZSwgMHg2MCwgCisgICAgMHg5YywgMHg3YSwgMHg2MywgMHgwMSwgMHhjMCwgMHg4MCwgMHgyNywgMHg3ZSwgMHg2MywgMHgwMSwgMHhjMCwgMHhhNSwgMHhiZSwgMHgwMCwgMHgxZiwgMHg3ZSwgCisgICAgMHg2MCwgMHgwMSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3ZSwgMHhhMCwgMHhjOCwgMHgxMiwgMHg2MSwgMHgzNiwgMHg0MCwgMHgxMSwgMHg3NSwgMHgyZiwgMHhiMywgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHhjMiwgMHgxZiwgMHg2YywgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhjMCwgMHgxMiwgMHg2NCwgMHg4NiwgMHgyMiwgMHhjMiwgCisgICAgMHhhZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHhjYiwgMHhiZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyOCwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNSwgMHgzMCwgMHhlNSwgMHgxYiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxYSwgMHhiZSwgMHhiMCwgMHgzZiwgMHgzOCwgCisgICAgMHgwYywgMHg4NSwgMHgzMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NCwgMHg4MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxZSwgMHg3NCwgMHgyMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxNSwgMHhkMiwgMHhhZiwgMHgyMiwgMHgzNSwgMHgzYiwgMHgzNiwgMHhlOCwgMHgzNywgMHgwMCwgMHgzNywgMHgxYiwgMHgzNywgMHhiNiwgCisgICAgMHgzOCwgMHg0ZSwgMHgzOCwgMHg2OSwgMHgzOCwgMHhmYiwgMHgzOCwgMHg4NCwgMHgzOCwgMHhjNSwgMHg3YywgMHhiMywgMHhiZSwgMHhiMCwgMHgwOSwgMHgyOCwgCisgICAgMHgyMiwgMHg3NSwgMHgyZiwgMHgwOSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHg1NywgMHgwMiwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgCisgICAgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMSwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgxMSwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHgyMywgMHg2YywgMHhhYSwgMHgyZSwgMHg1NCwgMHgzNCwgMHhlNiwgMHgwYiwgMHg1OCwgCisgICAgMHg1MCwgMHg4OSwgMHg1NCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg3NSwgMHgyZiwgMHhiMCwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMiwgMHgzNSwgMHgzMywgMHg0MiwgMHgyNCwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3YywgMHhiMiwgMHgyMywgMHgwYSwgCisgICAgMHgzYiwgMHg0OSwgMHgzMywgMHgzNSwgMHg1NywgMHg4OSwgMHgzNCwgMHgzNSwgMHg2NywgMHgzNSwgMHg5NSwgMHgzNSwgMHhjMywgMHgzNSwgMHhmMSwgMHgzNiwgCisgICAgMHgxZiwgMHgzNiwgMHg0ZCwgMHgzNiwgMHg3YiwgMHgzNiwgMHhhOSwgMHgxMiwgMHg0MSwgMHhiYSwgMHhkMiwgMHgyOCwgMHhkMiwgMHgwOCwgMHhjMiwgMHg0MCwgCisgICAgMHhjMiwgMHg0OCwgMHhjMiwgMHgzOCwgMHhjMiwgMHgzMCwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiOSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHg5OSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhOSwgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgCisgICAgMHg1ZiwgMHhiNywgMHgwMiwgMHgzNiwgMHhkNywgMHgxMiwgMHg0MSwgMHhkNywgMHhkMiwgMHgyOSwgMHhkMiwgMHgwOSwgMHhjMiwgMHg0MSwgMHhjMiwgMHg0OSwgCisgICAgMHhjMiwgMHgzOSwgMHhjMiwgMHgzMSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiYSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHg5YiwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhYiwgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgMHg1ZiwgMHhlMCwgCisgICAgMHgwMiwgMHgzNiwgMHhkNywgMHgxMiwgMHg0MSwgMHhmNCwgMHhkMiwgMHgyYSwgMHhkMiwgMHgwYSwgMHhjMiwgMHg0MiwgMHhjMiwgMHg0YSwgMHhjMiwgMHgzYSwgCisgICAgMHhjMiwgMHgzMiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiYiwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5ZCwgCisgICAgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhZCwgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgMHg2MCwgMHgwOSwgMHgwMiwgMHgzNiwgCisgICAgMHhkNywgMHgxMiwgMHg0MiwgMHgxMSwgMHhkMiwgMHgyYiwgMHhkMiwgMHgwYiwgMHhjMiwgMHg0MywgMHhjMiwgMHg0YiwgMHhjMiwgMHgzYiwgMHhjMiwgMHgzMywgCisgICAgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiYywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHg5ZiwgMHg3ZSwgMHgwNCwgCisgICAgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhZiwgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgMHg2MCwgMHgzMiwgMHgwMiwgMHgzNiwgMHhkNywgMHgxMiwgCisgICAgMHg0MiwgMHgyZSwgMHhkMiwgMHgyYywgMHhkMiwgMHgwYywgMHhjMiwgMHg0NCwgMHhjMiwgMHg0YywgMHhjMiwgMHgzYywgMHhjMiwgMHgzNCwgMHg2ZCwgMHgwMCwgCisgICAgMHg3YSwgMHgwMywgMHgwMSwgMHhiZCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhMSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgCisgICAgMHg3YSwgMHgwNywgMHgwMSwgMHhiMSwgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgMHg2MCwgMHg1YiwgMHgwMiwgMHgzNiwgMHhkNywgMHgxMiwgMHg0MiwgMHg0YiwgCisgICAgMHhkMiwgMHgyZCwgMHhkMiwgMHgwZCwgMHhjMiwgMHg0NSwgMHhjMiwgMHg0ZCwgMHhjMiwgMHgzZCwgMHhjMiwgMHgzNSwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgCisgICAgMHgwMSwgMHhiZSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhMywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgCisgICAgMHgwMSwgMHhiMywgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgMHg2MCwgMHg4NCwgMHgwMiwgMHgzNiwgMHhkNywgMHgxMiwgMHg0MiwgMHg2OCwgMHhkMiwgMHgyZSwgCisgICAgMHhkMiwgMHgwZSwgMHhjMiwgMHg0NiwgMHhjMiwgMHg0ZSwgMHhjMiwgMHgzZSwgMHhjMiwgMHgzNiwgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhiZiwgCisgICAgMHg3ZSwgMHgwNCwgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhNSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiNSwgCisgICAgMHgxMiwgMHg0MSwgMHgyNywgMHgxMiwgMHg2MCwgMHhhZCwgMHgwMiwgMHgzNiwgMHhkNywgMHgxMiwgMHg0MiwgMHg4NSwgMHhkMiwgMHgyZiwgMHhkMiwgMHgwZiwgCisgICAgMHhjMiwgMHg0NywgMHhjMiwgMHg0ZiwgMHhjMiwgMHgzZiwgMHhjMiwgMHgzNywgMHg2ZCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgMHhjMCwgMHg3ZSwgMHgwNCwgCisgICAgMHgwMCwgMHgyMCwgMHg3YSwgMHgwNywgMHgwMSwgMHhhNywgMHg3ZSwgMHgwNCwgMHgwMCwgMHgzOCwgMHg3YSwgMHgwNywgMHgwMSwgMHhiNywgMHgxMiwgMHg0MSwgCisgICAgMHgyNywgMHgxMiwgMHg2MCwgMHhkNiwgMHgwMiwgMHgzNiwgMHhkNywgMHg3ZSwgMHhhMCwgMHhkMCwgMHg3ZSwgMHg2MCwgMHgwZiwgMHgxMiwgMHg2MSwgMHgzNiwgCisgICAgMHg0MCwgMHgwNSwgMHgxMiwgMHg2NCwgMHg4NiwgMHhjMiwgMHhkNywgMHgyMiwgMHg3NSwgMHgyZiwgMHhiMSwgMHgxMiwgMHg3MywgMHgzNSwgMHgwYSwgMHg1MiwgCisgICAgMHgyMywgMHg2ZCwgMHgwMCwgMHg1OSwgMHgwNSwgMHgwMCwgMHgzMiwgMHgxMiwgMHg0MSwgMHg4MywgMHgxMiwgMHg0MSwgMHg5ZiwgMHhkMCwgMHhhOCwgMHgyMiwgCisgICAgMHg3NSwgMHgyZiwgMHhiMiwgMHgxMiwgMHg3MywgMHgzNSwgMHgwYSwgMHgyMiwgMHgwOSwgMHhiMiwgMHgzNSwgMHgzMywgMHg0MiwgMHgyMywgMHg3ZSwgMHhiMCwgCisgICAgMHg5YywgMHgxOSwgMHhiMiwgMHgwMSwgMHhiOSwgMHgxMiwgMHgzMSwgMHg0YywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgCisgICAgMHgwMiwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgxOSwgCisgICAgMHgzMCwgMHgwMCwgMHgwYywgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMSwgMHg2OCwgMHgxMiwgMHg0NCwgMHg0MCwgMHhjYSwgMHhiOCwgMHgwOSwgMHhiMCwgCisgICAgMHgwMCwgMHgxMCwgMHg0NCwgMHgwMiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHhkYSwgMHhiOCwgMHg4MCwgMHgwMiwgMHg1NCwgMHhiZiwgMHg3YywgMHg3NCwgCisgICAgMHg1ZSwgMHg3MCwgMHgwOCwgMHg2OCwgMHgwNCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgwMiwgMHg1NCwgMHhmNywgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHhjYSwgCisgICAgMHhiOCwgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHhkYSwgMHhiOCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHgzMCwgMHgwMCwgCisgICAgMHgwYywgMHgwYSwgMHg2MiwgMHgwOSwgMHhiNiwgMHgzNSwgMHgzMywgMHgzZSwgMHgyMCwgMHgwYSwgMHg2MiwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMiwgCisgICAgMHg2OCwgMHgyMCwgMHg0MiwgMHgyNywgMHhjYSwgMHhiOCwgMHg3NCwgMHg2MSwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgxMCwgCisgICAgMHg1OSwgMHg0NiwgMHgwMSwgMHhhOSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHg0NCwgMHgwMSwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHhkYSwgMHhiOCwgCisgICAgMHg4MCwgMHgxMSwgMHhmNCwgMHg1MiwgMHgyNywgMHg3NCwgMHhhMSwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgzOCwgMHg1OSwgCisgICAgMHg0NiwgMHgwMSwgMHhhOSwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3YywgMHg3NCwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgMHgzMCwgCisgICAgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgCisgICAgMHgwMSwgMHg2OCwgMHgwNCwgMHg0NCwgMHg4MCwgMHg4MCwgMHgwMiwgMHg1NCwgMHg3ZiwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwOCwgMHg2OCwgMHgwNCwgCisgICAgMHg0NCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg1NCwgMHhmZCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHgwYSwgMHg2MiwgCisgICAgMHgwOSwgMHhiNiwgMHgzNSwgMHgzMywgMHhhNSwgMHhmZCwgMHhmNCwgMHhhNSwgMHhmZSwgMHhjYSwgMHgyOCwgMHgzZSwgMHgyMCwgMHgwYSwgMHg2MiwgMHhkYSwgCisgICAgMHgyOCwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMiwgMHg2OCwgMHgxMCwgMHhhNSwgMHhlZCwgMHg0MiwgMHgyOCwgMHg0MiwgMHgyNiwgMHg3ZSwgMHg0NCwgCisgICAgMHgwMCwgMHgwOCwgMHg1OSwgMHg0NiwgMHgwMSwgMHg5OSwgMHg4MCwgMHgwNCwgMHhhNSwgMHhlZSwgMHg1MiwgMHgyOCwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgCisgICAgMHgwNCwgMHg2OCwgMHgxMCwgMHhhNSwgMHhlZCwgMHg0MiwgMHgyOSwgMHg0MiwgMHgyNiwgMHg3ZSwgMHg0NCwgMHgwMCwgMHgwOCwgMHg1OSwgMHg0NiwgMHgwMSwgCisgICAgMHg5OSwgMHg4MCwgMHgxNSwgMHhhNSwgMHhlZSwgMHg1MiwgMHgyOSwgMHg3YywgMHg3NCwgMHg1ZSwgMHg3MCwgMHgwMiwgMHg3OCwgMHgwYSwgMHg1MiwgMHgyNiwgCisgICAgMHg3ZSwgMHg0NCwgMHgwMCwgMHgyMCwgMHg1OSwgMHg0NiwgMHgwMSwgMHg5OSwgMHgxMiwgMHg0MiwgMHhhMiwgMHhkMCwgMHhhOCwgMHgyMiwgMHg3ZSwgMHgwNCwgCisgICAgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgxOSwgMHg0MCwgCisgICAgMHgwMCwgMHgxMCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgMHgwOSwgCisgICAgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgxOSwgMHg0MCwgMHgwMCwgMHgxOCwgMHgxOSwgMHgzMCwgMHgwMCwgCisgICAgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgyZiwgMHhiNSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgMHgwMiwgCisgICAgMHgwOSwgMHhiMCwgMHgwMCwgMHgwYywgMHg0NCwgMHg0MCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHhlNSwgMHg1OCwgMHhiNCwgMHgwNywgMHgyMywgMHgwOSwgCisgICAgMHhiMCwgMHgwMCwgMHgxMCwgMHg0ZSwgMHhiMCwgMHgwMiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgCisgICAgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHg1NCwgMHhmNywgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHgzMCwgCisgICAgMHgwMCwgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgyZiwgMHhiNiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0YywgCisgICAgMHgwMiwgMHhlNSwgMHg1OCwgMHhiNCwgMHgwNywgMHgxOCwgMHgwOSwgMHgzMCwgMHgwMCwgMHgwYywgMHg3NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgCisgICAgMHgwOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHg0NCwgMHgwOCwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHgzMCwgMHgwMCwgMHgwYywgMHgwOSwgMHhiMCwgCisgICAgMHgwMCwgMHgwYywgMHg1NCwgMHhiZiwgMHgxOSwgMHhiMCwgMHgwMCwgMHgwYywgMHhkMCwgMHhhOCwgMHgyMiwgMHg3NSwgMHgyZiwgMHhiNCwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHgyMSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg0MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHhiMCwgMHgwMSwgCisgICAgMHg3ZSwgMHhhMCwgMHhjOCwgMHg3YywgMHg2NCwgMHgxMiwgMHg2MSwgMHgzNiwgMHgxMiwgMHg2NCwgMHg4NiwgMHhkMCwgMHhhOCwgMHgyMiwgMHgzOSwgMHgyZSwgCisgICAgMHgzOSwgMHg3NSwgMHgzOSwgMHhiYywgMHgzYSwgMHgwMywgMHgzYSwgMHg0YSwgMHgzYSwgMHg5MSwgMHgzYSwgMHhkOCwgMHgzYiwgMHgxZiwgMHg3NSwgMHgyZiwgCisgICAgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg2OSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3OSwgMHgyZCwgMHgyMywgCisgICAgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgwOCwgMHgyYywgMHgzOCwgMHgwZiwgCisgICAgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg2OSwgMHg3YSwgMHgyNywgMHgwMSwgMHg3OSwgMHgwMiwgMHg0NiwgMHg0ZiwgMHg3ZSwgCisgICAgMHgxNCwgMHgwNCwgMHgyZCwgMHg4MCwgMHhlYiwgMHg3NSwgMHgyZiwgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMSwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgCisgICAgMHg2YiwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3YiwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgCisgICAgMHgxNCwgMHhiZSwgMHgxNCwgMHgwYywgMHgyYywgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg2YiwgMHg3YSwgCisgICAgMHgyNywgMHgwMSwgMHg3YiwgMHgwMiwgMHg0OSwgMHg3YywgMHg3ZSwgMHgxNCwgMHgwOCwgMHgyZCwgMHg4MCwgMHhlYiwgMHg3NSwgMHgyZiwgMHg1NSwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgCisgICAgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg2ZCwgMHg3ZSwgMHgyNywgMHgwMSwgMHg3ZCwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgCisgICAgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgxMCwgMHgyYywgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgCisgICAgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg2ZCwgMHg3YSwgMHgyNywgMHgwMSwgMHg3ZCwgMHgwMiwgMHg0YywgMHhhOSwgMHg3ZSwgMHgxNCwgMHgwYywgCisgICAgMHgyZCwgMHg4MCwgMHhlYiwgMHg3NSwgMHgyZiwgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwMywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgCisgICAgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg2ZiwgMHg3ZSwgCisgICAgMHgyNywgMHgwMSwgMHg3ZiwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgCisgICAgMHgxNCwgMHgxNCwgMHgyYywgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg2ZiwgMHg3YSwgMHgyNywgMHgwMSwgCisgICAgMHg3ZiwgMHgwMiwgMHg0ZiwgMHhkNiwgMHg3ZSwgMHgxNCwgMHgxMCwgMHgyZCwgMHg4MCwgMHhlYiwgMHg3NSwgMHgyZiwgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3NSwgMHgyZiwgMHgwNCwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgCisgICAgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg3MSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4MSwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgCisgICAgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgxOCwgMHgyYywgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgCisgICAgMHg3YSwgMHgxNywgMHgwMSwgMHg3MSwgMHg3YSwgMHgyNywgMHgwMSwgMHg4MSwgMHgwMiwgMHg1MywgMHgwMywgMHg3ZSwgMHgxNCwgMHgxNCwgMHgyZCwgMHg4MCwgCisgICAgMHhlYiwgMHg3NSwgMHgyZiwgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwNSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgCisgICAgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg3MywgMHg3ZSwgMHgyNywgMHgwMSwgCisgICAgMHg4MywgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgxYywgCisgICAgMHgyYywgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg3MywgMHg3YSwgMHgyNywgMHgwMSwgMHg4MywgMHgwMiwgCisgICAgMHg1NiwgMHgzMCwgMHg3ZSwgMHgxNCwgMHgxOCwgMHgyZCwgMHg4MCwgMHhlYiwgMHg3NSwgMHgyZiwgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgCisgICAgMHgwNiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgCisgICAgMHg3ZSwgMHgxNywgMHgwMSwgMHg3NSwgMHg3ZSwgMHgyNywgMHgwMSwgMHg4NSwgMHgyZCwgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgCisgICAgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgyMCwgMHgyYywgMHgzOCwgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgCisgICAgMHgwMSwgMHg3NSwgMHg3YSwgMHgyNywgMHgwMSwgMHg4NSwgMHgwMiwgMHg1OSwgMHg1ZCwgMHg3ZSwgMHgxNCwgMHgxYywgMHgyZCwgMHg4MCwgMHhlYiwgMHg3NSwgCisgICAgMHgyZiwgMHg1NSwgMHgxMiwgMHg3MywgMHgzNSwgMHg3NSwgMHgyZiwgMHgwNywgMHgxMiwgMHg3MywgMHgzNSwgMHg3YSwgMHg2MSwgMHgyZiwgMHgxMiwgMHg3MywgCisgICAgMHgzNSwgMHg3YSwgMHg3MSwgMHgyZiwgMHgxMiwgMHg3MywgMHgzNSwgMHg3ZSwgMHgxNywgMHgwMSwgMHg3NywgMHg3ZSwgMHgyNywgMHgwMSwgMHg4NywgMHgyZCwgCisgICAgMHgyMywgMHg3ZSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHg3YSwgMHgxOSwgMHhiMCwgMHgwYiwgMHgxNCwgMHhiZSwgMHgxNCwgMHgyNCwgMHgyYywgMHgzOCwgCisgICAgMHgwZiwgMHgxYiwgMHgzNCwgMHg3OCwgMHhlYywgMHg3YSwgMHgxNywgMHgwMSwgMHg3NywgMHg3YSwgMHgyNywgMHgwMSwgMHg4NywgMHgwMiwgMHg1YywgMHg4YSwgCisgICAgMHg3ZSwgMHgxNCwgMHgyMCwgMHgyZCwgMHg4MCwgMHhlYiwgCisKKy8vIFNlZ21lbnQgIzE1LCBTdGFydCBBZGRyZXNzIDAwZmY0MDAwLCBMZW5ndGggMTMxMDkKKzB4ZmYsMHgwMCwweDAwLDB4NDAsMHgzNSwweDMzLAorICAgIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTQsIDB4N2YsIDB4ZjgsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2QsIDB4MzEsIDB4MGIsIDB4MWEsIAorICAgIDB4NTAsIDB4MWIsIDB4MGEsIDB4NTAsIDB4N2UsIDB4MTQsIDB4NDAsIDB4MWIsIDB4MDIsIDB4NDAsIDB4NzQsIDB4N2UsIDB4ZjgsIDB4MDAsIDB4NTksIDB4NzUsIAorICAgIDB4YjAsIDB4ZGYsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4N2UsIDB4ZjQsIDB4NDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4OGIsIAorICAgIDB4MTIsIDB4NzQsIDB4NGUsIDB4ZjUsIDB4MmUsIDB4N2EsIDB4YTEsIDB4MmQsIDB4N2EsIDB4MTEsIDB4NTgsIDB4MTIsIDB4NmIsIDB4MDIsIDB4MTIsIDB4NDAsIAorICAgIDB4ZWIsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4NjAsIDB4MDMsIDB4MTIsIDB4NDMsIDB4NzksIDB4MTIsIDB4NmIsIDB4ZGUsIDB4ZDIsIDB4YWYsIDB4MDIsIAorICAgIDB4MzAsIDB4MDAsIDB4N2UsIDB4MDQsIDB4MDAsIDB4ZmYsIDB4N2UsIDB4MTgsIDB4NDAsIDB4NjAsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDEsIDB4ODksIDB4MTgsIAorICAgIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIDB4MzUsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIAorICAgIDB4OTMsIDB4MDAsIDB4ODksIDB4MDgsIDB4N2UsIDB4MDQsIDB4MDAsIDB4ZmYsIDB4N2UsIDB4MTgsIDB4NDAsIDB4ODIsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDEsIAorICAgIDB4ODksIDB4MTgsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTMsIDB4MDAsIDB4ODksIDB4MDgsIDB4N2UsIDB4MDgsIDB4MDAsIDB4MjAsIDB4N2UsIAorICAgIDB4NDQsIDB4MDQsIDB4MDAsIDB4N2UsIDB4NDAsIDB4MDAsIDB4N2UsIDB4ZTQsIDB4NDAsIDB4OWQsIDB4MDIsIDB4NzMsIDB4NTAsIDB4N2UsIDB4MDgsIDB4MDEsIAorICAgIDB4NTksIDB4N2UsIDB4NDQsIDB4MmEsIDB4ZGQsIDB4N2UsIDB4NDAsIDB4MDAsIDB4N2UsIDB4ZTQsIDB4NDAsIDB4YWYsIDB4MDIsIDB4NzMsIDB4NTAsIDB4N2UsIAorICAgIDB4MDgsIDB4MDAsIDB4NTksIDB4N2UsIDB4NDQsIDB4MDEsIDB4MDAsIDB4N2UsIDB4NDAsIDB4NTMsIDB4N2UsIDB4ZTQsIDB4NDAsIDB4YzEsIDB4MDIsIDB4NzMsIAorICAgIDB4NTAsIDB4NzUsIDB4NTcsIDB4MDEsIDB4NzUsIDB4NTYsIDB4MDAsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDgsIDB4NzUsIDB4NTQsIDB4NTgsIDB4NzUsIDB4NTUsIAorICAgIDB4MDgsIDB4NzUsIDB4NTEsIDB4MDgsIDB4NzUsIDB4NTMsIDB4MDEsIDB4NzUsIDB4ODksIDB4MDEsIDB4NzUsIDB4OGEsIDB4MDEsIDB4NzUsIDB4OGMsIDB4MDAsIAorICAgIDB4ZDIsIDB4OGMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDIsIDB4N2EsIDB4MDUsIDB4NDIsIDB4ODksIDB4ZjQsIDB4NzUsIDB4YjcsIDB4N2YsIDB4NzUsIDB4YjgsIAorICAgIDB4N2YsIDB4NzUsIDB4YjMsIDB4MDEsIDB4NzUsIDB4YjIsIDB4MDEsIDB4ZDIsIDB4YTksIDB4MjIsIDB4NzUsIDB4YjAsIDB4ZGYsIDB4ZTQsIDB4ZDUsIDB4ZTAsIAorICAgIDB4ZmQsIDB4NzUsIDB4YjAsIDB4ZWYsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MmUsIDB4N2UsIDB4YTAsIDB4MDgsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZjIsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTIsIDB4NDEsIDB4ODMsIDB4MGIsIAorICAgIDB4MjAsIDB4YmUsIDB4MjEsIDB4MmUsIDB4NzgsIDB4ZjYsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4NzQsIDB4YmYsIDB4MTksIAorICAgIDB4YjAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4MTAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4NzQsIDB4ODAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4N2UsIAorICAgIDB4NTQsIDB4MDAsIDB4MDIsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDQsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTksIDB4YjAsIDB4MDAsIAorICAgIDB4MGMsIDB4NzQsIDB4MDcsIDB4MjAsIDB4NjgsIDB4MDIsIDB4NzQsIDB4MGYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MzAsIDB4NmIsIDB4MTcsIDB4NzQsIAorICAgIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4MjgsIDB4MjAsIDB4NjgsIDB4MDIsIDB4NzQsIDB4MjAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIAorICAgIDB4NzQsIDB4MDMsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YTcsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4NzQsIDB4MGMsIDB4MTksIDB4YjAsIAorICAgIDB4MDAsIDB4MTAsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4ZTQsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YjAsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4MDgsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4NzQsIDB4YTcsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MjIsIDB4N2MsIAorICAgIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4NDEsIDB4YWEsIDB4ODksIDB4MjQsIDB4NDEsIDB4YmEsIDB4NDEsIDB4ZDcsIDB4NDEsIDB4ZjQsIAorICAgIDB4NDIsIDB4MTEsIDB4NDIsIDB4MmUsIDB4NDIsIDB4NGIsIDB4NDIsIDB4NjgsIDB4NDIsIDB4ODUsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MTgsIDB4YzIsIDB4MDgsIAorICAgIDB4N2UsIDB4MDQsIDB4MDQsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NTksIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjksIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4NzksIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODksIDB4MjIsIDB4YzIsIDB4MTEsIDB4YzIsIDB4MTksIDB4YzIsIDB4MDksIDB4N2UsIDB4MDQsIDB4MDgsIAorICAgIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NWIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmIsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2IsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4OGIsIDB4MjIsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MWEsIDB4YzIsIDB4MGEsIDB4N2UsIDB4MDQsIDB4MGMsIDB4MmQsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4NWQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmQsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2QsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OGQsIAorICAgIDB4MjIsIDB4YzIsIDB4MTMsIDB4YzIsIDB4MWIsIDB4YzIsIDB4MGIsIDB4N2UsIDB4MDQsIDB4MTAsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NWYsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NmYsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4N2YsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OGYsIDB4MjIsIDB4YzIsIDB4MTQsIAorICAgIDB4YzIsIDB4MWMsIDB4YzIsIDB4MGMsIDB4N2UsIDB4MDQsIDB4MTQsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjEsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzEsIAorICAgIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODEsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTEsIDB4MjIsIDB4YzIsIDB4MTUsIDB4YzIsIDB4MWQsIDB4YzIsIAorICAgIDB4MGQsIDB4N2UsIDB4MDQsIDB4MTgsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzMsIDB4NmQsIDB4MDAsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4ODMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTMsIDB4MjIsIDB4YzIsIDB4MTYsIDB4YzIsIDB4MWUsIDB4YzIsIDB4MGUsIDB4N2UsIDB4MDQsIAorICAgIDB4MWMsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjUsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzUsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODUsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTUsIDB4MjIsIDB4YzIsIDB4MTcsIDB4YzIsIDB4MWYsIDB4YzIsIDB4MGYsIDB4N2UsIDB4MDQsIDB4MjAsIDB4MmQsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NjcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzcsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4ODcsIDB4N2EsIDB4MDcsIDB4MDEsIAorICAgIDB4OTcsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4NDIsIDB4YWQsIDB4ODksIDB4MjQsIDB4NDIsIDB4YmQsIDB4NDIsIAorICAgIDB4ZDQsIDB4NDIsIDB4ZWIsIDB4NDMsIDB4MDIsIDB4NDMsIDB4MTksIDB4NDMsIDB4MzAsIDB4NDMsIDB4NDcsIDB4NDMsIDB4NWUsIDB4MzAsIDB4NDAsIDB4MDcsIAorICAgIDB4MjAsIDB4NTgsIDB4MDQsIDB4YzIsIDB4MjgsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NDgsIDB4MDcsIDB4MjAsIDB4NTAsIDB4MDQsIDB4YzIsIDB4MjgsIDB4ODAsIAorICAgIDB4MDIsIDB4ZDIsIDB4MjgsIDB4MjIsIDB4MzAsIDB4NDEsIDB4MDcsIDB4MjAsIDB4NTksIDB4MDQsIDB4YzIsIDB4MjksIDB4ODAsIDB4MGMsIDB4MzAsIDB4NDksIAorICAgIDB4MDcsIDB4MjAsIDB4NTEsIDB4MDQsIDB4YzIsIDB4MjksIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MjksIDB4MjIsIDB4MzAsIDB4NDIsIDB4MDcsIDB4MjAsIDB4NWEsIAorICAgIDB4MDQsIDB4YzIsIDB4MmEsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGEsIDB4MDcsIDB4MjAsIDB4NTIsIDB4MDQsIDB4YzIsIDB4MmEsIDB4ODAsIDB4MDIsIDB4ZDIsIAorICAgIDB4MmEsIDB4MjIsIDB4MzAsIDB4NDMsIDB4MDcsIDB4MjAsIDB4NWIsIDB4MDQsIDB4YzIsIDB4MmIsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGIsIDB4MDcsIDB4MjAsIAorICAgIDB4NTMsIDB4MDQsIDB4YzIsIDB4MmIsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmIsIDB4MjIsIDB4MzAsIDB4NDQsIDB4MDcsIDB4MjAsIDB4NWMsIDB4MDQsIDB4YzIsIAorICAgIDB4MmMsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGMsIDB4MDcsIDB4MjAsIDB4NTQsIDB4MDQsIDB4YzIsIDB4MmMsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmMsIDB4MjIsIAorICAgIDB4MzAsIDB4NDUsIDB4MDcsIDB4MjAsIDB4NWQsIDB4MDQsIDB4YzIsIDB4MmQsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGQsIDB4MDcsIDB4MjAsIDB4NTUsIDB4MDQsIAorICAgIDB4YzIsIDB4MmQsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmQsIDB4MjIsIDB4MzAsIDB4NDYsIDB4MDcsIDB4MjAsIDB4NWUsIDB4MDQsIDB4YzIsIDB4MmUsIDB4ODAsIAorICAgIDB4MGMsIDB4MzAsIDB4NGUsIDB4MDcsIDB4MjAsIDB4NTYsIDB4MDQsIDB4YzIsIDB4MmUsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmUsIDB4MjIsIDB4MzAsIDB4NDcsIAorICAgIDB4MDcsIDB4MjAsIDB4NWYsIDB4MDQsIDB4YzIsIDB4MmYsIDB4ODAsIDB4MGMsIDB4MzAsIDB4NGYsIDB4MDcsIDB4MjAsIDB4NTcsIDB4MDQsIDB4YzIsIDB4MmYsIAorICAgIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MmYsIDB4MjIsIDB4NDQsIDB4NjYsIDB4NDMsIDB4OGEsIDB4YmUsIDB4YjAsIDB4MDIsIDB4NDAsIDB4MDEsIDB4MjIsIDB4MjMsIAorICAgIDB4MGEsIDB4NWIsIDB4NDksIDB4NTUsIDB4NDMsIDB4NzUsIDB4OTksIDB4NTQsIDB4ZDMsIDB4MjIsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTQsIAorICAgIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIDB4MzUsIDB4MTIsIDB4NDQsIDB4N2EsIDB4N2UsIDB4MDQsIDB4MjgsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzEsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzMsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIAorICAgIDB4N2UsIDB4MDQsIDB4NjYsIDB4N2YsIDB4N2EsIDB4MDUsIDB4NGIsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MTIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIAorICAgIDB4MWUsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTAsIDB4NzQsIDB4NDgsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MTMsIDB4NzQsIDB4M2YsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MTQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIAorICAgIDB4MTYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDgsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTEsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MTMsIDB4NzQsIDB4M2YsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MTYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4NzQsIAorICAgIDB4MmYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTAsIDB4NzQsIDB4NDgsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MTMsIDB4NzQsIDB4M2YsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4NzQsIDB4MGYsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDcsIDB4MTIsIDB4NDAsIDB4ZmEsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTIsIDB4NDEsIDB4OWYsIDB4MGIsIDB4MjAsIDB4YmUsIDB4MjEsIAorICAgIDB4MmUsIDB4NzgsIDB4ZjYsIDB4ZDIsIDB4YTgsIDB4MjIsIDB4N2UsIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIAorICAgIDB4MzUsIDB4MTIsIDB4NDQsIDB4N2EsIDB4NzUsIDB4YjAsIDB4ZGYsIDB4YzIsIDB4YTgsIDB4MjIsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIAorICAgIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4N2UsIDB4MjAsIDB4MDQsIDB4N2MsIDB4YjIsIDB4YzIsIDB4ZDcsIDB4MTMsIDB4MTMsIDB4MTMsIAorICAgIDB4MTMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MTIsIDB4YTUsIDB4ZGEsIDB4ZTUsIDB4MjIsIDB4Y2EsIDB4MDksIDB4MTIsIDB4MzAsIDB4MGUsIDB4MTAsIDB4MDEsIDB4MzQsIDB4ZDUsIDB4NTEsIDB4NDAsIAorICAgIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDcsIAorICAgIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDcsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4N2UsIDB4YjMsIAorICAgIDB4OTEsIDB4MDQsIDB4NjMsIDB4NTMsIDB4MDEsIDB4N2UsIDB4MDAsIDB4NTQsIDB4MmUsIDB4MDEsIDB4NTMsIDB4YTUsIDB4ZTYsIDB4ZjUsIDB4NTEsIDB4ODAsIAorICAgIDB4MTIsIDB4MjAsIDB4MDIsIDB4MWQsIDB4NzUsIDB4NTMsIDB4MDAsIDB4ODUsIDB4NTQsIDB4NTEsIDB4ZDIsIDB4MDIsIDB4NzQsIDB4MDMsIDB4ODAsIDB4MGQsIAorICAgIDB4MzAsIDB4MDIsIDB4MGUsIDB4YzIsIDB4MDIsIDB4N2UsIDB4MDAsIDB4NTYsIDB4MmUsIDB4MDEsIDB4NTMsIDB4YTUsIDB4ZTYsIDB4N2EsIDB4YjMsIDB4OTAsIAorICAgIDB4MDAsIDB4ZGEsIDB4MDksIDB4MzIsIDB4NDUsIDB4NmYsIDB4NDUsIDB4OGIsIDB4NDUsIDB4YTcsIDB4NDUsIDB4YzMsIDB4NDUsIDB4ZGYsIDB4NDUsIDB4ZmIsIAorICAgIDB4NDYsIDB4MTcsIDB4NDYsIDB4MzMsIDB4YzAsIDB4ZDAsIDB4YzAsIDB4ZDEsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIAorICAgIDB4Y2EsIDB4MmIsIDB4ZDIsIDB4MDEsIDB4NzUsIDB4MmYsIDB4ODksIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MjgsIAorICAgIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MTMsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4NTksIDB4N2MsIDB4YjAsIAorICAgIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4NDUsIDB4MDQsIDB4OTksIDB4MjQsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MGIsIDB4YTUsIDB4MGEsIDB4YTUsIAorICAgIDB4MDgsIDB4YmUsIDB4MDEsIDB4MmUsIDB4NzgsIDB4ZTEsIDB4ODAsIDB4ZDIsIDB4MzAsIDB4MDQsIDB4MDUsIDB4YzIsIDB4MDQsIDB4MTIsIDB4NjQsIDB4ODYsIAorICAgIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4ZDAsIDB4ZDEsIDB4ZDAsIDB4ZDAsIDB4MzIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIDB4ODAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIAorICAgIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjEsIDB4YWIsIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIAorICAgIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIDB4ODEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIAorICAgIDB4NjksIDB4NTIsIDB4NjEsIDB4ZWIsIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIAorICAgIDB4ODIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjIsIDB4MmIsIAorICAgIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIDB4ODMsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjIsIDB4NmIsIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIDB4ODQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIAorICAgIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjIsIDB4YWIsIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIAorICAgIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIDB4ODUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIAorICAgIDB4NjksIDB4NTIsIDB4NjIsIDB4ZWIsIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIAorICAgIDB4ODYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjMsIDB4MmIsIAorICAgIDB4ODksIDB4NTQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDgsIDB4MjAsIDB4ZTAsIDB4MTQsIDB4NzUsIDB4MmYsIDB4ODcsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4NTQsIDB4M2UsIDB4MGEsIDB4NWIsIDB4N2UsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4NjksIDB4NTIsIDB4NjMsIDB4NmIsIDB4ODksIDB4NTQsIDB4MjIsIDB4MTAsIAorICAgIDB4MDgsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MjgsIDB4MDMsIDB4ZDIsIDB4MDgsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIAorICAgIDB4MTQsIDB4ODAsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MjgsIDB4MDMsIDB4ZDIsIDB4MDgsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NDksIDB4NDUsIDB4MzAsIDB4MzAsIDB4MDYsIDB4MjAsIDB4ZTYsIAorICAgIDB4NGYsIDB4ZDIsIDB4MDgsIDB4MjIsIDB4MzAsIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjAsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzksIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OTksIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzIsIDB4N2EsIDB4MDUsIDB4MzIsIDB4N2EsIDB4MzcsIDB4MDEsIAorICAgIDB4NzksIDB4N2UsIDB4MzcsIDB4MDEsIDB4NTksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MDgsIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIAorICAgIDB4NDcsIDB4MDEsIDB4NTksIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIAorICAgIDB4NjksIDB4ZjAsIDB4MTAsIDB4NjAsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NjAsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4NzksIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OTksIDB4MjgsIDB4MDQsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTksIDB4N2UsIDB4MzcsIDB4MDEsIDB4NzksIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzIsIDB4N2EsIAorICAgIDB4MDUsIDB4MzIsIDB4N2EsIDB4MzcsIDB4MDEsIDB4NzksIDB4N2UsIDB4MzcsIDB4MDEsIDB4NTksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIAorICAgIDB4MDgsIDB4MmMsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NTksIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MDgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MDQsIDB4MmQsIAorICAgIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NTksIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIAorICAgIDB4MDIsIDB4NDYsIDB4YzIsIDB4MjIsIDB4ZDIsIDB4MDgsIDB4N2UsIDB4MDQsIDB4MDQsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NTksIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4NjksIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIAorICAgIDB4MmYsIDB4OTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIAorICAgIDB4YjgsIDB4NzgsIDB4NjgsIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTksIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIAorICAgIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIAorICAgIDB4M2MsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YTksIDB4MWIsIDB4MzgsIDB4MjAsIAorICAgIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzgsIDB4MGEsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTAsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIAorICAgIDB4YTksIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIAorICAgIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIAorICAgIDB4YzAsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIAorICAgIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDAsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIAorICAgIDB4MzUsIDB4NzUsIDB4MmYsIDB4OTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIAorICAgIDB4MmIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIAorICAgIDB4MzUsIDB4MzAsIDB4N2EsIDB4MzUsIDB4MzAsIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIAorICAgIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIAorICAgIDB4ODAsIDB4Y2YsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIAorICAgIDB4MDEsIDB4YzksIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIAorICAgIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIAorICAgIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIAorICAgIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NDgsIDB4MWUsIDB4NzUsIDB4MmYsIAorICAgIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzgsIAorICAgIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTAsIDB4MjIsIDB4ZGEsIDB4YjgsIAorICAgIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NDgsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NDksIAorICAgIDB4NDUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIAorICAgIDB4MDQsIDB4ZDIsIDB4NTgsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTAsIAorICAgIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTAsIDB4MTIsIDB4NDIsIDB4YmQsIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIAorICAgIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4MTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIAorICAgIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIAorICAgIDB4MTIsIDB4NjEsIDB4MzYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NDgsIDB4NzIsIDB4NzUsIDB4MmYsIAorICAgIDB4OTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4MTAsIDB4MDksIDB4MDEsIDB4MjIsIAorICAgIDB4MjAsIDB4MjksIDB4MDMsIDB4ZDIsIDB4MDksIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4ODEsIDB4MDAsIAorICAgIDB4ODAsIDB4MDYsIDB4MjAsIDB4MjksIDB4MDMsIDB4ZDIsIDB4MDksIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIAorICAgIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NGMsIDB4NzIsIDB4MzAsIDB4MzEsIDB4MDYsIDB4MjAsIDB4ZTYsIDB4NGYsIDB4ZDIsIDB4MDksIAorICAgIDB4MjIsIDB4MzAsIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWIsIDB4OWQsIDB4MzIsIAorICAgIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzQsIDB4N2EsIDB4MDUsIDB4MzQsIDB4N2EsIDB4MzcsIDB4MDEsIDB4N2IsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4NWIsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MGMsIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWIsIAorICAgIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjksIDB4ZjAsIDB4MTAsIAorICAgIDB4NjEsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NjEsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4N2IsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OWIsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4OWIsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2IsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzQsIDB4N2EsIDB4MDUsIDB4MzQsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4N2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NWIsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MGMsIDB4MmMsIDB4MzgsIAorICAgIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWIsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MDIsIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4OWUsIDB4NDQsIDB4MGMsIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MDgsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIAorICAgIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWIsIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NDksIDB4ZWYsIAorICAgIDB4MjIsIDB4ZDIsIDB4MDksIDB4N2UsIDB4MDQsIDB4MDgsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NWIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmIsIDB4NzUsIAorICAgIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTIsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NjgsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YWIsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIAorICAgIDB4MDQsIDB4MDAsIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2MsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4YzksIDB4N2UsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YWIsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIAorICAgIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzksIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIAorICAgIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTEsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YWIsIDB4OWUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIAorICAgIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIAorICAgIDB4MjQsIDB4MmQsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIAorICAgIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDEsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MmYsIAorICAgIDB4OTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MmIsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4YzksIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MzUsIDB4MzAsIDB4N2EsIAorICAgIDB4MzUsIDB4MzAsIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIAorICAgIDB4MmQsIDB4ODAsIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4Y2YsIDB4N2UsIAorICAgIDB4MDcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIAorICAgIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIAorICAgIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIAorICAgIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NGIsIDB4NGIsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MzksIDB4MGEsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTEsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIAorICAgIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NGIsIDB4NGIsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NGMsIDB4NzIsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTksIAorICAgIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTksIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTEsIDB4ODAsIDB4MDIsIDB4YzIsIAorICAgIDB4NTEsIDB4MTIsIDB4NDIsIDB4ZDQsIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIAorICAgIDB4MTQsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIAorICAgIDB4NjEsIDB4MTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIDB4Y2EsIDB4YjgsIDB4NWUsIAorICAgIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjEsIDB4MzYsIAorICAgIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NGIsIDB4OWYsIDB4NzUsIDB4MmYsIDB4OTUsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4MTAsIDB4MGEsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmEsIDB4MDMsIAorICAgIDB4ZDIsIDB4MGEsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4ODIsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIAorICAgIDB4MmEsIDB4MDMsIDB4ZDIsIDB4MGEsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIAorICAgIDB4NjgsIDB4MDMsIDB4MTIsIDB4NGYsIDB4OWYsIDB4MzAsIDB4MzIsIDB4MDYsIDB4MjAsIDB4ZTYsIDB4NGYsIDB4ZDIsIDB4MGEsIDB4MjIsIDB4MzAsIDB4ZTYsIAorICAgIDB4MDIsIDB4ZDIsIDB4NjIsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2QsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWQsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIAorICAgIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzYsIDB4N2EsIDB4MDUsIDB4MzYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4N2QsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NWQsIDB4N2QsIAorICAgIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTAsIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWQsIDB4NzUsIDB4MmYsIDB4OTQsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjksIDB4ZjAsIDB4MTAsIDB4NjIsIDB4YzQsIDB4MjIsIAorICAgIDB4YzIsIDB4NjIsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2QsIDB4YmUsIDB4MjQsIAorICAgIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OWQsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWQsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4N2QsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzYsIDB4N2EsIDB4MDUsIDB4MzYsIDB4N2EsIDB4MzcsIDB4MDEsIDB4N2QsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4NWQsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTAsIDB4MmMsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4NWQsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NjksIAorICAgIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MTAsIAorICAgIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MGMsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4NWQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NGQsIDB4MWMsIDB4MjIsIDB4ZDIsIDB4MGEsIAorICAgIDB4N2UsIDB4MDQsIDB4MGMsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NWQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmQsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZDIsIAorICAgIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NjgsIDB4N2UsIDB4MzcsIDB4MDEsIAorICAgIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YWQsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIAorICAgIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIAorICAgIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2MsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4N2UsIAorICAgIDB4MjQsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YWQsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIAorICAgIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2EsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTIsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjgsIAorICAgIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDIsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YWQsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIAorICAgIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIAorICAgIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2EsIAorICAgIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIAorICAgIDB4MjMsIDB4NDQsIDB4MDIsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MmYsIDB4OTMsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MmIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIAorICAgIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MzUsIDB4MzAsIDB4N2EsIDB4MzUsIDB4MzAsIDB4MjIsIAorICAgIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MjgsIAorICAgIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4Y2YsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIAorICAgIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIAorICAgIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIAorICAgIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIAorICAgIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NGUsIDB4NzgsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2EsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIAorICAgIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTIsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIAorICAgIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NGUsIDB4NzgsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NGYsIDB4OWYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIAorICAgIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWEsIDB4ODAsIDB4MDIsIDB4YzIsIAorICAgIDB4NWEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTIsIDB4MTIsIDB4NDIsIAorICAgIDB4ZWIsIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4MTMsIDB4ZDIsIAorICAgIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIAorICAgIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjEsIDB4MzYsIDB4MDksIDB4YjEsIDB4MDAsIAorICAgIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NGUsIDB4Y2MsIDB4NzUsIDB4MmYsIDB4OTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIAorICAgIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4MTAsIDB4MGIsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmIsIDB4MDMsIDB4ZDIsIDB4MGIsIDB4MjIsIAorICAgIDB4NzUsIDB4MmYsIDB4YTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4ODMsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmIsIDB4MDMsIDB4ZDIsIAorICAgIDB4MGIsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIAorICAgIDB4NTIsIDB4Y2MsIDB4MzAsIDB4MzMsIDB4MDYsIDB4MjAsIDB4ZTYsIDB4NGYsIDB4ZDIsIDB4MGIsIDB4MjIsIDB4MzAsIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjMsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2YsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWYsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIAorICAgIDB4MzgsIDB4N2EsIDB4MDUsIDB4MzgsIDB4N2EsIDB4MzcsIDB4MDEsIDB4N2YsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NWYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIAorICAgIDB4YmUsIDB4NDQsIDB4MTQsIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWYsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjksIDB4ZjAsIDB4MTAsIDB4NjMsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NjMsIDB4MmQsIAorICAgIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2YsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIAorICAgIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OWYsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWYsIDB4N2UsIDB4MzcsIDB4MDEsIDB4N2YsIDB4OWQsIAorICAgIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzgsIDB4N2EsIDB4MDUsIDB4MzgsIDB4N2EsIDB4MzcsIDB4MDEsIDB4N2YsIDB4N2UsIDB4MzcsIDB4MDEsIAorICAgIDB4NWYsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTQsIDB4MmMsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWYsIDB4NzUsIAorICAgIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIAorICAgIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MTQsIDB4MmQsIDB4OWQsIDB4MjQsIAorICAgIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MTAsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NWYsIDB4MTIsIAorICAgIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NTAsIDB4NDksIDB4MjIsIDB4ZDIsIDB4MGIsIDB4N2UsIDB4MDQsIDB4MTAsIAorICAgIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NWYsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NmYsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIAorICAgIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NjgsIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIAorICAgIDB4MDEsIDB4YWYsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIAorICAgIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIAorICAgIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2MsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4MjQsIDB4MDMsIDB4MDAsIAorICAgIDB4MmUsIDB4MjcsIDB4MDEsIDB4YWYsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIAorICAgIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2IsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIAorICAgIDB4MTMsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIAorICAgIDB4N2UsIDB4NjQsIDB4MDMsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YWYsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIAorICAgIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIAorICAgIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIAorICAgIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDMsIAorICAgIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MmYsIDB4OTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MmIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIAorICAgIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MzUsIDB4MzAsIDB4N2EsIDB4MzUsIDB4MzAsIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIAorICAgIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4Y2YsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIAorICAgIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIAorICAgIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIAorICAgIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIAorICAgIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIAorICAgIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NTEsIDB4YTUsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIAorICAgIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2IsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIAorICAgIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTMsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIAorICAgIDB4MTIsIDB4NTEsIDB4YTUsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NTIsIDB4Y2MsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIAorICAgIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIAorICAgIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWIsIDB4YTUsIDB4ZmQsIAorICAgIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTMsIDB4MTIsIDB4NDMsIDB4MDIsIDB4MDIsIDB4NjEsIAorICAgIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4MTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIAorICAgIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIAorICAgIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjEsIDB4MzYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIAorICAgIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NTEsIDB4ZjksIDB4NzUsIDB4MmYsIDB4OTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MjIsIDB4MTAsIDB4MGMsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmMsIDB4MDMsIDB4ZDIsIDB4MGMsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTQsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4ODQsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmMsIDB4MDMsIDB4ZDIsIDB4MGMsIDB4MjIsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NTUsIDB4ZjksIDB4MzAsIAorICAgIDB4MzQsIDB4MDYsIDB4MjAsIDB4ZTYsIDB4NGYsIDB4ZDIsIDB4MGMsIDB4MjIsIDB4MzAsIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjQsIDB4N2UsIDB4MzcsIDB4MDEsIAorICAgIDB4ODEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTEsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4M2EsIDB4N2EsIDB4MDUsIAorICAgIDB4M2EsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ODEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjEsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTgsIAorICAgIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjEsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjksIDB4ZjAsIDB4MTAsIDB4NjQsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NjQsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIAorICAgIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODEsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YTEsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ODEsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIAorICAgIDB4MmUsIDB4MDUsIDB4M2EsIDB4N2EsIDB4MDUsIDB4M2EsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ODEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjEsIDB4N2QsIDB4NDMsIAorICAgIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MTgsIDB4MmMsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjEsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MTgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIAorICAgIDB4N2UsIDB4MzQsIDB4MTQsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjEsIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIAorICAgIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NTMsIDB4NzYsIDB4MjIsIDB4ZDIsIDB4MGMsIDB4N2UsIDB4MDQsIDB4MTQsIDB4MmQsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4NjEsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzEsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NjgsIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjEsIDB4MmUsIAorICAgIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIAorICAgIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIAorICAgIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2MsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4MjQsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIAorICAgIDB4YjEsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIAorICAgIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIAorICAgIDB4M2MsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTQsIDB4MjIsIDB4ODAsIAorICAgIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDQsIAorICAgIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YjEsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIAorICAgIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIAorICAgIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIAorICAgIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDQsIDB4N2EsIDB4NjksIDB4YjAsIAorICAgIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MmYsIDB4OTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MmIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIAorICAgIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MzUsIDB4MzAsIDB4N2EsIDB4MzUsIDB4MzAsIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIAorICAgIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4Y2YsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIAorICAgIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIAorICAgIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIAorICAgIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIAorICAgIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIAorICAgIDB4NTQsIDB4ZDIsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIAorICAgIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2MsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIAorICAgIDB4MTQsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NTQsIDB4ZDIsIAorICAgIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NTUsIDB4ZjksIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIAorICAgIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWMsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIAorICAgIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTQsIDB4MTIsIDB4NDMsIDB4MTksIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIAorICAgIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIAorICAgIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4MTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIAorICAgIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIAorICAgIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjEsIDB4MzYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIAorICAgIDB4NTUsIDB4MjYsIDB4NzUsIDB4MmYsIDB4OTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIAorICAgIDB4MTAsIDB4MGQsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmQsIDB4MDMsIDB4ZDIsIDB4MGQsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTUsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4N2UsIDB4MTQsIDB4ODUsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmQsIDB4MDMsIDB4ZDIsIDB4MGQsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NTksIDB4MjYsIDB4MzAsIDB4MzUsIDB4MDYsIDB4MjAsIAorICAgIDB4ZTYsIDB4NGYsIDB4ZDIsIDB4MGQsIDB4MjIsIDB4MzAsIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ODMsIDB4N2UsIDB4MjcsIAorICAgIDB4MDEsIDB4YTMsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4M2MsIDB4N2EsIDB4MDUsIDB4M2MsIDB4N2EsIDB4MzcsIAorICAgIDB4MDEsIDB4ODMsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjMsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MWMsIDB4MmMsIDB4MzgsIDB4NjgsIAorICAgIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4MTIsIDB4NjksIDB4ZjAsIDB4MTAsIDB4NjUsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NjUsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIAorICAgIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODMsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YTMsIDB4MjgsIAorICAgIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTMsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ODMsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4M2MsIAorICAgIDB4N2EsIDB4MDUsIDB4M2MsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ODMsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjMsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIAorICAgIDB4NDQsIDB4MWMsIDB4MmMsIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIAorICAgIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MWMsIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MTgsIAorICAgIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjMsIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIAorICAgIDB4MDMsIDB4MDIsIDB4NTYsIDB4YTMsIDB4MjIsIDB4ZDIsIDB4MGQsIDB4N2UsIDB4MDQsIDB4MTgsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjMsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4NzMsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIAorICAgIDB4NzUsIDB4MmYsIDB4OTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIAorICAgIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NjgsIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjMsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIAorICAgIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIAorICAgIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIAorICAgIDB4MzgsIDB4M2MsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4MjQsIDB4MDUsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YjMsIDB4MWIsIDB4MzgsIAorICAgIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2QsIDB4MGEsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDUsIDB4MDAsIDB4MmUsIDB4NjcsIAorICAgIDB4MDEsIDB4YjMsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIAorICAgIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIAorICAgIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIAorICAgIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDUsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIAorICAgIDB4MGIsIDB4MzUsIDB4NzUsIDB4MmYsIDB4OTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIAorICAgIDB4NjgsIDB4MmIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIAorICAgIDB4MmUsIDB4MzUsIDB4MzAsIDB4N2EsIDB4MzUsIDB4MzAsIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIAorICAgIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIAorICAgIDB4MmQsIDB4ODAsIDB4Y2YsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIAorICAgIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIAorICAgIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIAorICAgIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIAorICAgIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NTcsIDB4ZmYsIDB4NzUsIAorICAgIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIAorICAgIDB4M2QsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4ZGEsIAorICAgIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NTcsIDB4ZmYsIDB4ZGEsIDB4YjgsIDB4MDIsIAorICAgIDB4NTksIDB4MjYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIAorICAgIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NTUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTUsIDB4MTIsIDB4NDMsIDB4MzAsIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIAorICAgIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4MTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIAorICAgIDB4MTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIAorICAgIDB4MDAsIDB4MTIsIDB4NjEsIDB4MzYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NTgsIDB4NTMsIDB4NzUsIAorICAgIDB4MmYsIDB4OTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4MTAsIDB4MGUsIDB4MDEsIAorICAgIDB4MjIsIDB4MjAsIDB4MmUsIDB4MDMsIDB4ZDIsIDB4MGUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4ODYsIAorICAgIDB4MDAsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MmUsIDB4MDMsIDB4ZDIsIDB4MGUsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIAorICAgIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NWMsIDB4NTMsIDB4MzAsIDB4MzYsIDB4MDYsIDB4MjAsIDB4ZTYsIDB4NGYsIDB4ZDIsIAorICAgIDB4MGUsIDB4MjIsIDB4MzAsIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjYsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ODUsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTUsIDB4OWQsIAorICAgIDB4MzIsIDB4NDAsIDB4MzEsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4M2UsIDB4N2EsIDB4MDUsIDB4M2UsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ODUsIDB4N2UsIAorICAgIDB4MzcsIDB4MDEsIDB4NjUsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjAsIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIAorICAgIDB4NjUsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjksIDB4ZjAsIAorICAgIDB4MTAsIDB4NjYsIDB4YzQsIDB4MjIsIDB4YzIsIDB4NjYsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIAorICAgIDB4MDEsIDB4ODUsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YTUsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIAorICAgIDB4MDEsIDB4YTUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ODUsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4M2UsIDB4N2EsIDB4MDUsIDB4M2UsIAorICAgIDB4N2EsIDB4MzcsIDB4MDEsIDB4ODUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjUsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjAsIDB4MmMsIAorICAgIDB4MzgsIDB4MTMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjUsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MDIsIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjAsIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MWMsIDB4MmQsIDB4N2QsIDB4MjQsIAorICAgIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjUsIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NTksIAorICAgIDB4ZDAsIDB4MjIsIDB4ZDIsIDB4MGUsIDB4N2UsIDB4MDQsIDB4MWMsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjUsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzUsIAorICAgIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTIsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIAorICAgIDB4NjgsIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjUsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIAorICAgIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MzcsIDB4MDEsIAorICAgIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2MsIDB4N2EsIAorICAgIDB4NDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4MjQsIDB4MDYsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YjUsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIAorICAgIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2UsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIAorICAgIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTYsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDYsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YjUsIDB4OWUsIAorICAgIDB4MjQsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIDB4MzQsIDB4MjQsIAorICAgIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIAorICAgIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIAorICAgIDB4NTQsIDB4MGYsIDB4MjMsIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDYsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIAorICAgIDB4MmYsIDB4OTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MmIsIDB4N2EsIAorICAgIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MzUsIDB4MzAsIAorICAgIDB4N2EsIDB4MzUsIDB4MzAsIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIAorICAgIDB4MjQsIDB4MmQsIDB4ODAsIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4Y2YsIAorICAgIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIAorICAgIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIAorICAgIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIAorICAgIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIAorICAgIDB4N2EsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NWIsIDB4MmMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2UsIDB4MGEsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTYsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIAorICAgIDB4ZDgsIDB4YmQsIDB4MzIsIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NWIsIDB4MmMsIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NWMsIDB4NTMsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIAorICAgIDB4NWUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTYsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NTYsIDB4MTIsIDB4NDMsIDB4NDcsIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIAorICAgIDB4MDIsIDB4NjEsIDB4MTMsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIDB4Y2EsIDB4YjgsIAorICAgIDB4NWUsIDB4YjAsIDB4MWMsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjEsIAorICAgIDB4MzYsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NWIsIDB4ODAsIDB4NzUsIDB4MmYsIDB4OTUsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4MTAsIDB4MGYsIDB4MDEsIDB4MjIsIDB4MjAsIDB4MmYsIAorICAgIDB4MDMsIDB4ZDIsIDB4MGYsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YTcsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4ODcsIDB4MDAsIDB4ODAsIDB4MDYsIAorICAgIDB4MjAsIDB4MmYsIDB4MDMsIDB4ZDIsIDB4MGYsIDB4MjIsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIAorICAgIDB4YjgsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NWYsIDB4ODAsIDB4MzAsIDB4MzcsIDB4MDYsIDB4MjAsIDB4ZTYsIDB4NGYsIDB4ZDIsIDB4MGYsIDB4MjIsIDB4MzAsIAorICAgIDB4ZTYsIDB4MDIsIDB4ZDIsIDB4NjcsIDB4N2UsIDB4MzcsIDB4MDEsIDB4ODcsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTcsIDB4OWQsIDB4MzIsIDB4NDAsIDB4MzEsIAorICAgIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDAsIDB4N2EsIDB4MDUsIDB4NDAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4ODcsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjcsIAorICAgIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjQsIDB4MmMsIDB4MzgsIDB4NjgsIDB4N2EsIDB4NDcsIDB4MDEsIDB4NjcsIDB4NzUsIDB4MmYsIAorICAgIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjksIDB4ZjAsIDB4MTAsIDB4NjcsIDB4YzQsIAorICAgIDB4MjIsIDB4YzIsIDB4NjcsIDB4MmQsIDB4MjMsIDB4NjgsIDB4NzgsIDB4NmQsIDB4MzMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODcsIDB4YmUsIAorICAgIDB4MjQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NmEsIDB4YmUsIDB4MjcsIDB4MDEsIDB4YTcsIDB4MjgsIDB4MDQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YTcsIDB4N2UsIAorICAgIDB4MzcsIDB4MDEsIDB4ODcsIDB4OWQsIDB4MzIsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4NDAsIDB4N2EsIDB4MDUsIDB4NDAsIDB4N2EsIDB4MzcsIDB4MDEsIAorICAgIDB4ODcsIDB4N2UsIDB4MzcsIDB4MDEsIDB4NjcsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjQsIDB4MmMsIDB4MzgsIDB4MTMsIDB4N2EsIAorICAgIDB4NDcsIDB4MDEsIDB4NjcsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIAorICAgIDB4NjksIDB4ZjAsIDB4NzUsIDB4MmYsIDB4OTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIAorICAgIDB4MjQsIDB4MmQsIDB4OWQsIDB4MjQsIDB4MTIsIDB4NjksIDB4ZjAsIDB4N2UsIDB4MzQsIDB4MjAsIDB4MmQsIDB4N2QsIDB4MjQsIDB4MmQsIDB4NDMsIDB4N2EsIAorICAgIDB4NDcsIDB4MDEsIDB4NjcsIDB4MTIsIDB4NjksIDB4ZjAsIDB4YmUsIDB4MjUsIDB4MjAsIDB4NzgsIDB4MDMsIDB4MDIsIDB4NWMsIDB4ZmQsIDB4MjIsIDB4ZDIsIAorICAgIDB4MGYsIDB4N2UsIDB4MDQsIDB4MjAsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NjcsIDB4N2EsIDB4MDcsIDB4MDEsIDB4NzcsIDB4NzUsIDB4MmYsIDB4OTQsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OTIsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4ODIsIDB4ZGEsIDB4YjgsIDB4NzgsIDB4NjgsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjcsIDB4MDEsIDB4YjcsIDB4MmUsIDB4MjQsIDB4MDAsIDB4MDIsIDB4MmQsIDB4MzIsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIAorICAgIDB4MzgsIDB4MzQsIDB4N2QsIDB4MDIsIDB4MmUsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MDUsIDB4MzAsIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIAorICAgIDB4MDEsIDB4YzksIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDIsIDB4YmUsIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2MsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIAorICAgIDB4N2UsIDB4MjQsIDB4MDcsIDB4MDAsIDB4MmUsIDB4MjcsIDB4MDEsIDB4YjcsIDB4MWIsIDB4MzgsIDB4MjAsIDB4MGIsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDIsIDB4NmEsIDB4NjMsIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MDQsIAorICAgIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2YsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIDB4NTQsIDB4ZmUsIDB4MTksIAorICAgIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTcsIDB4MjIsIDB4ODAsIDB4N2YsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIAorICAgIDB4MjgsIDB4MmQsIDB4OWQsIDB4MjQsIDB4N2UsIDB4NjQsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NjcsIDB4MDEsIDB4YjcsIDB4OWUsIDB4MjQsIDB4MDAsIDB4MDIsIAorICAgIDB4NDAsIDB4MTcsIDB4MWIsIDB4MzgsIDB4NjAsIDB4MGIsIDB4MzUsIDB4MTIsIDB4NmEsIDB4NjMsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIDB4MjQsIAorICAgIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzksIDB4MDIsIDB4NmEsIDB4NjMsIDB4N2EsIDB4MzksIDB4YzAsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIAorICAgIDB4N2EsIDB4MzksIDB4ZDAsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4ODAsIDB4ZTUsIDB4OWQsIDB4MzIsIDB4N2MsIDB4YjYsIDB4NTQsIDB4MGYsIDB4MjMsIAorICAgIDB4MjMsIDB4MjMsIDB4NDQsIDB4MDcsIDB4N2EsIDB4NjksIDB4YjAsIDB4N2EsIDB4NzksIDB4NzAsIDB4MGIsIDB4MzUsIDB4NzUsIDB4MmYsIDB4OTMsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YmQsIDB4MDQsIDB4NjgsIDB4MmIsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIAorICAgIDB4N2UsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4Y2IsIDB4MmUsIDB4MzUsIDB4MzAsIDB4N2EsIDB4MzUsIDB4MzAsIAorICAgIDB4MjIsIDB4ZDIsIDB4MDQsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4MTMsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIAorICAgIDB4MjgsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4MmEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4Y2YsIDB4N2UsIDB4MDcsIDB4MDEsIAorICAgIDB4Y2IsIDB4N2UsIDB4MjQsIDB4MDMsIDB4ZmUsIDB4OWQsIDB4MjAsIDB4MjgsIDB4NDAsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2UsIDB4NDQsIDB4MjgsIAorICAgIDB4MmQsIDB4N2QsIDB4NjAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIDB4ZDIsIDB4N2QsIDB4NzAsIDB4MGIsIDB4MDQsIDB4YmQsIDB4MDQsIDB4NjgsIAorICAgIDB4ZDAsIDB4N2QsIDB4NTQsIDB4OWQsIDB4NTAsIDB4YmQsIDB4MjUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MjUsIDB4N2QsIDB4MzIsIDB4MDksIDB4YjEsIDB4MDAsIAorICAgIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NTQsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MzEsIDB4ZGEsIDB4YjgsIDB4N2UsIDB4MTksIDB4YjAsIDB4N2EsIDB4MDksIDB4YjAsIAorICAgIDB4MGIsIDB4MDQsIDB4MWIsIDB4MjQsIDB4NzgsIDB4ZTcsIDB4MDIsIDB4NWUsIDB4NTksIDB4NzUsIDB4MmYsIDB4OTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZmEsIDB4MTksIDB4YjEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4M2YsIDB4MGEsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTAsIAorICAgIDB4NTQsIDB4ZmUsIDB4MTksIDB4YjEsIDB4MDAsIDB4MTAsIDB4ZDIsIDB4MTcsIDB4MjIsIDB4ZGEsIDB4YjgsIDB4MzAsIDB4ZTAsIDB4ZDgsIDB4YmQsIDB4MzIsIAorICAgIDB4NjgsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NWUsIDB4NTksIDB4ZGEsIDB4YjgsIDB4MDIsIDB4NWYsIDB4ODAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIAorICAgIDB4N2UsIDB4YTAsIDB4ODgsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YTUsIDB4ZmQsIAorICAgIDB4NWUsIDB4NTAsIDB4MGEsIDB4NjgsIDB4MWQsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWYsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NWYsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTcsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTcsIDB4MTIsIAorICAgIDB4NDMsIDB4NWUsIDB4MDIsIDB4NjEsIDB4MTMsIDB4NzUsIDB4MmYsIDB4OTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTQsIDB4N2EsIAorICAgIDB4YjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDgsIDB4ZDIsIDB4MDQsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4MTMsIAorICAgIDB4ZDIsIDB4MDQsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4N2UsIDB4YTAsIDB4ODAsIDB4MTIsIDB4NjEsIDB4MTMsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWMsIAorICAgIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YTAsIDB4YzAsIDB4MDksIDB4NjEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjEsIDB4MzYsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTQsIDB4MjAsIDB4ZTAsIDB4ZGIsIDB4MjIsIDB4MDIsIDB4NWUsIDB4YWQsIDB4NzUsIDB4MmYsIDB4OTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIAorICAgIDB4NzUsIDB4MmYsIDB4OTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjIsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIAorICAgIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTgsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTAsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTAsIDB4MDIsIDB4NjAsIDB4ZmYsIAorICAgIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIAorICAgIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTksIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTksIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIAorICAgIDB4ZDIsIDB4NTEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTEsIDB4MDIsIDB4NjAsIDB4ZmYsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIAorICAgIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWEsIDB4ODAsIDB4MDIsIAorICAgIDB4YzIsIDB4NWEsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTIsIDB4MDIsIAorICAgIDB4NjAsIDB4ZmYsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIAorICAgIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWIsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIAorICAgIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTMsIDB4MDIsIDB4NjAsIDB4ZmYsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIAorICAgIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWMsIAorICAgIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWMsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTQsIDB4ODAsIDB4MDIsIDB4YzIsIAorICAgIDB4NTQsIDB4MDIsIDB4NjAsIDB4ZmYsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIAorICAgIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWQsIDB4YTUsIDB4ZmQsIDB4NWUsIAorICAgIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTUsIDB4MDIsIDB4NjAsIDB4ZmYsIDB4N2MsIDB4MDIsIDB4N2UsIAorICAgIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIAorICAgIDB4ZDIsIDB4NWUsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWUsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTYsIDB4ODAsIAorICAgIDB4MDIsIDB4YzIsIDB4NTYsIDB4MDIsIDB4NjAsIDB4ZmYsIDB4N2MsIDB4MDIsIDB4N2UsIDB4MTQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MjAsIDB4MDksIDB4YjEsIAorICAgIDB4MDAsIDB4MTgsIDB4YTUsIDB4ZmQsIDB4NWUsIDB4NTAsIDB4MjAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NWYsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NWYsIDB4YTUsIAorICAgIDB4ZmQsIDB4NWUsIDB4NTAsIDB4ODAsIDB4NjgsIDB4MDQsIDB4ZDIsIDB4NTcsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTcsIDB4MDIsIDB4NjAsIDB4ZmYsIDB4NTQsIAorICAgIDB4ZjAsIDB4YzQsIDB4YTUsIDB4ZmYsIDB4YzQsIDB4YTUsIDB4NGYsIDB4NzUsIDB4MmYsIDB4OTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ZjUsIDB4MmYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MjIsIDB4Y2EsIDB4MTksIDB4NWUsIDB4MjAsIDB4MDcsIDB4NGMsIDB4YTIsIDB4N2UsIDB4NzQsIDB4MmMsIDB4MmQsIDB4Y2EsIDB4NzksIAorICAgIDB4N2EsIDB4NzksIDB4YTAsIDB4MGIsIDB4NzQsIDB4N2EsIDB4NzksIDB4YjAsIDB4MGIsIDB4NzQsIDB4ZGEsIDB4NzksIDB4N2UsIDB4MzAsIDB4MDIsIDB4N2UsIAorICAgIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDIsIDB4NjEsIDB4NWUsIDB4Y2EsIDB4MTksIDB4NWUsIDB4MjAsIDB4MDcsIDB4NGMsIDB4YTIsIDB4N2UsIDB4NzQsIDB4MmMsIAorICAgIDB4MmQsIDB4Y2EsIDB4NzksIDB4N2EsIDB4NzksIDB4YTAsIDB4MGIsIDB4NzQsIDB4N2EsIDB4NzksIDB4YjAsIDB4MGIsIDB4NzQsIDB4N2EsIDB4NzksIDB4NjAsIAorICAgIDB4MGIsIDB4NzQsIDB4ZGEsIDB4NzksIDB4N2UsIDB4MzAsIDB4MDMsIDB4N2UsIDB4NjQsIDB4MDAsIDB4MDMsIDB4MDIsIDB4NjEsIDB4NWUsIDB4ZDIsIDB4MDQsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4Y2IsIDB4MmQsIDB4MjYsIDB4YmUsIDB4MjQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MmUsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzksIAorICAgIDB4N2UsIDB4NDQsIDB4MjgsIDB4MmQsIDB4N2UsIDB4NzksIDB4YTAsIDB4N2EsIDB4MDksIDB4YTAsIDB4MGIsIDB4MDQsIDB4MGIsIDB4NzQsIDB4YmQsIDB4MDQsIAorICAgIDB4NjgsIDB4MjMsIDB4YTUsIDB4ZGIsIDB4ZWYsIDB4N2EsIDB4MjcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MjUsIDB4MzAsIDB4MmQsIDB4MjYsIDB4N2EsIDB4MjUsIAorICAgIDB4MzAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4ZGEsIDB4MTksIDB4YzIsIDB4ZDcsIDB4MjIsIDB4NzUsIDB4MmYsIDB4OWEsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4ZGEsIDB4MTksIDB4ZDIsIDB4ZDcsIDB4MjIsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4ODAsIDB4ZDcsIDB4NDgsIDB4ZjEsIDB4NDYsIDB4NjUsIDB4NDcsIAorICAgIDB4NWYsIDB4NDksIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDgsIDB4NTYsIDB4NDUsIDB4MmEsIDB4NDksIDB4NmUsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDksIDB4NzUsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NGMsIDB4MWUsIDB4NDksIDB4OTIsIDB4NGEsIAorICAgIDB4OGMsIDB4NGMsIDB4NTcsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NGIsIDB4ODMsIDB4NDUsIDB4MmEsIDB4NGMsIDB4OWIsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NGMsIDB4YTIsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NGYsIDB4NGIsIDB4NGMsIDB4YmYsIDB4NGQsIAorICAgIDB4YjksIDB4NGYsIDB4ODQsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NGUsIDB4YjAsIDB4NDUsIDB4MmEsIDB4NGYsIDB4YzgsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NGYsIDB4Y2YsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTIsIDB4NzgsIDB4NGYsIDB4ZWMsIDB4NTAsIAorICAgIDB4ZTYsIDB4NTIsIDB4YjEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTEsIDB4ZGQsIDB4NDUsIDB4MmEsIDB4NTIsIDB4ZjUsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTIsIDB4ZmMsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTUsIDB4YTUsIDB4NTMsIDB4MTksIDB4NTQsIAorICAgIDB4MTMsIDB4NTUsIDB4ZGUsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTUsIDB4MGEsIDB4NDUsIDB4MmEsIDB4NTYsIDB4MjIsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTYsIDB4MjksIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTgsIDB4ZDIsIDB4NTYsIDB4NDYsIDB4NTcsIAorICAgIDB4NDAsIDB4NTksIDB4MGIsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTgsIDB4MzcsIDB4NDUsIDB4MmEsIDB4NTksIDB4NGYsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NTksIDB4NTYsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NWIsIDB4ZmYsIDB4NTksIDB4NzMsIDB4NWEsIAorICAgIDB4NmQsIDB4NWMsIDB4MzgsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NWIsIDB4NjQsIDB4NDUsIDB4MmEsIDB4NWMsIDB4N2MsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NWMsIDB4ODMsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NWYsIDB4MmMsIDB4NWMsIDB4YTAsIDB4NWQsIAorICAgIDB4OWEsIDB4NWYsIDB4NjUsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NWUsIDB4OTEsIDB4NDUsIDB4MmEsIDB4NWYsIDB4YTksIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NWYsIDB4YjAsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIAorICAgIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4NDUsIDB4MmEsIDB4Y2EsIDB4YjgsIDB4NzUsIDB4MmYsIDB4MDIsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDMsIDB4MjAsIDB4ZTUsIDB4MjAsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4MTIsIDB4NmIsIDB4MDUsIAorICAgIDB4ODAsIDB4MzAsIDB4MzAsIDB4ZTEsIDB4MDUsIDB4MTIsIDB4NjQsIDB4ODYsIDB4ODAsIDB4MjgsIDB4MzAsIDB4ZTIsIDB4MDUsIDB4MTIsIDB4NjMsIDB4ZjUsIAorICAgIDB4ODAsIDB4MjAsIDB4MzAsIDB4ZTMsIDB4MWQsIDB4MTIsIDB4NjUsIDB4NjEsIDB4ODAsIDB4MTgsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDQsIDB4MzAsIDB4ZTEsIAorICAgIDB4MDMsIDB4MDIsIDB4NjcsIDB4NWYsIDB4MzAsIDB4ZTYsIDB4MDUsIDB4MTIsIDB4NmMsIDB4NmEsIDB4ODAsIDB4MDYsIDB4MjAsIDB4ZTIsIDB4MDMsIDB4MDIsIAorICAgIDB4MDAsIDB4ODAsIDB4ZGEsIDB4YjgsIDB4MzIsIDB4NzUsIDB4MmYsIDB4MTAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MzksIDB4Y2EsIAorICAgIDB4NTksIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MWEsIDB4NmMsIDB4YWEsIDB4YmUsIDB4YjAsIDB4NDAsIAorICAgIDB4MjgsIDB4MGEsIDB4MTIsIDB4NjQsIDB4MjQsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MzksIDB4ZGEsIDB4MGIsIDB4MjIsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MTQsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzUsIDB4MmQsIDB4MzUsIDB4YmUsIDB4MzQsIDB4MDQsIDB4MDAsIDB4MzgsIDB4MmYsIAorICAgIDB4N2EsIDB4MzcsIDB4MDEsIDB4YzUsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzMsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDUsIDB4YmUsIDB4NDQsIDB4MmMsIDB4MmMsIAorICAgIDB4MzgsIDB4MjUsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzMsIDB4NzUsIDB4MmYsIDB4MTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4YjEsIDB4MmYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MTIsIDB4NjcsIDB4OWYsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MTIsIDB4NjYsIDB4MzAsIDB4MjIsIDB4NzUsIAorICAgIDB4MmYsIDB4MTYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ODAsIDB4ZjQsIDB4NzUsIDB4MmYsIDB4MTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4YjEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4OWUsIDB4NDQsIDB4MmMsIDB4MmQsIDB4OWQsIDB4NTQsIDB4MTIsIDB4NjcsIDB4OWYsIDB4N2UsIDB4MzQsIDB4MjgsIDB4MmQsIAorICAgIDB4N2QsIDB4NTQsIDB4MmQsIDB4NDMsIDB4ODAsIDB4YmMsIDB4NzUsIDB4MmYsIDB4MTgsIDB4MTIsIDB4NzMsIDB4MzUsIDB4Y2EsIDB4MDksIDB4Y2EsIDB4MzksIAorICAgIDB4Y2EsIDB4MmIsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4NjMsIDB4OTEsIDB4MWEsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MTQsIDB4N2UsIDB4YjAsIDB4ODAsIDB4OWMsIDB4YjYsIDB4NjAsIDB4MzgsIDB4NmMsIDB4YWEsIDB4N2UsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4OWQsIAorICAgIDB4MzUsIDB4NDAsIDB4MzcsIDB4N2EsIDB4MzcsIDB4MDEsIDB4Y2IsIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzcsIDB4N2QsIDB4NDMsIDB4MmQsIDB4NDUsIDB4YmUsIAorICAgIDB4NDQsIDB4MjgsIDB4MmMsIDB4MzgsIDB4M2IsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzcsIDB4N2QsIDB4NDUsIDB4MTIsIDB4NjgsIDB4ZDQsIDB4N2UsIDB4YjMsIAorICAgIDB4OTEsIDB4MWUsIDB4MjAsIDB4ZTUsIDB4MTMsIDB4NzUsIDB4MmYsIDB4MTksIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4OTEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MzksIDB4ZGEsIDB4MDksIDB4MjIsIDB4ODAsIDB4MzQsIDB4MmQsIDB4NTMsIDB4NmQsIDB4MzMsIDB4NjAsIDB4MDIsIAorICAgIDB4ODAsIDB4YzEsIDB4N2UsIDB4MDQsIDB4MjQsIDB4MmQsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzksIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzcsIDB4ODAsIDB4ZTEsIAorICAgIDB4Y2EsIDB4NTksIDB4OWUsIDB4NDQsIDB4MjgsIDB4MmQsIDB4OWQsIDB4NTQsIDB4MTIsIDB4NjgsIDB4ZDQsIDB4N2UsIDB4MzQsIDB4MjQsIDB4MmQsIDB4N2QsIAorICAgIDB4NTQsIDB4MmQsIDB4NDMsIDB4N2EsIDB4NDcsIDB4MDEsIDB4YzcsIDB4MTIsIDB4NjgsIDB4ZDQsIDB4ZGEsIDB4NDksIDB4ODAsIDB4YjAsIDB4N2UsIDB4MGYsIAorICAgIDB4MmMsIDB4M2UsIDB4MGIsIDB4MGMsIDB4N2EsIDB4MGYsIDB4MmMsIDB4M2UsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWUsIDB4NzQsIDB4NjAsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4ODAsIDB4YTUsIDB4N2UsIDB4MmYsIDB4MmMsIDB4NWUsIAorICAgIDB4MGIsIDB4MmMsIDB4N2EsIDB4MmYsIDB4MmMsIDB4NWUsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWUsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MWMsIDB4NzQsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4ODAsIDB4MWYsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIAorICAgIDB4MjIsIDB4NzUsIDB4MmYsIDB4MjgsIDB4MTIsIDB4NzMsIDB4MzUsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIDB4NzQsIDB4NjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MWEsIDB4NzAsIDB4ZGIsIDB4N2UsIAorICAgIDB4MGQsIDB4MzAsIDB4N2UsIDB4MWQsIDB4MzQsIDB4N2UsIDB4MmQsIDB4MzgsIDB4N2UsIDB4M2QsIDB4M2MsIDB4N2UsIDB4ODUsIDB4NDAsIDB4N2QsIDB4OTAsIAorICAgIDB4NGQsIDB4OTEsIDB4NGQsIDB4OTIsIDB4NGQsIDB4OTMsIDB4NGQsIDB4OTQsIDB4NGQsIDB4OTUsIDB4NGQsIDB4OTYsIDB4NGQsIDB4OTcsIDB4NGQsIDB4OTgsIAorICAgIDB4NjgsIDB4YjgsIDB4N2EsIDB4MTMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4MDMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4MzMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4MjMsIAorICAgIDB4OTEsIDB4MTcsIDB4N2EsIDB4NTMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4NDMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4NzMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4NjMsIAorICAgIDB4OTEsIDB4MTcsIDB4N2EsIDB4OTMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4ODMsIDB4OTEsIDB4MTcsIDB4MzAsIDB4NzMsIDB4MjIsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MTcsIDB4N2EsIDB4YTMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4ZDMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4YzMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4ZjMsIDB4OTEsIAorICAgIDB4MTcsIDB4N2EsIDB4ZTMsIDB4OTEsIDB4MTcsIDB4N2QsIDB4NzgsIDB4N2EsIDB4ZjMsIDB4OTEsIDB4MTcsIDB4N2EsIDB4ZTMsIDB4OTEsIDB4MTcsIDB4N2UsIAorICAgIDB4YjMsIDB4OTEsIDB4MWUsIDB4MzAsIDB4ZTUsIDB4MDMsIDB4MDIsIDB4NjUsIDB4M2MsIDB4NzUsIDB4MmYsIDB4MjksIDB4MTIsIDB4NzMsIDB4MzUsIDB4MjAsIAorICAgIDB4NzMsIDB4MDgsIDB4NzUsIDB4MmYsIDB4MGEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ODAsIDB4MDYsIDB4NzUsIDB4MmYsIDB4MTIsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4NzQsIDB4ODAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWUsIDB4NmQsIDB4MDAsIDB4N2QsIDB4MTAsIDB4N2EsIDB4MGQsIDB4MzAsIDB4N2EsIDB4MGQsIDB4MzQsIAorICAgIDB4N2EsIDB4MGQsIDB4MzgsIDB4N2EsIDB4MGQsIDB4M2MsIDB4N2EsIDB4MDUsIDB4NDAsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIAorICAgIDB4N2UsIDB4MzcsIDB4MDEsIDB4YzUsIDB4NGQsIDB4MzMsIDB4NjgsIDB4M2IsIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzEsIDB4N2UsIDB4NTQsIDB4MmMsIDB4MmQsIAorICAgIDB4OWQsIDB4NTAsIDB4YmQsIDB4MzUsIDB4NDAsIDB4MDIsIDB4N2QsIDB4MzUsIDB4Y2EsIDB4MzksIDB4N2UsIDB4NjUsIDB4NGIsIDB4OTksIDB4NjQsIDB4ZGEsIAorICAgIDB4MzksIDB4N2UsIDB4MDcsIDB4MDEsIDB4YzUsIDB4OWQsIDB4MDMsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YzUsIDB4MmUsIDB4MzcsIDB4MDEsIDB4YzEsIDB4N2EsIAorICAgIDB4MzcsIDB4MDEsIDB4YzEsIDB4YmUsIDB4MzQsIDB4MmMsIDB4MmMsIDB4MjgsIDB4YzcsIDB4N2UsIDB4MzQsIDB4MjgsIDB4MmQsIDB4N2EsIDB4MzcsIDB4MDEsIAorICAgIDB4YzEsIDB4ODAsIDB4YmQsIDB4MjIsIDB4NzUsIDB4MmYsIDB4NTMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTUsIDB4NGQsIDB4ODAsIDB4MTEsIDB4NzUsIAorICAgIDB4MmYsIDB4NTEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MGIsIDB4MDgsIDB4MTAsIDB4MGIsIDB4MDUsIDB4OWUsIDB4MzQsIDB4MDAsIDB4MDIsIDB4MjgsIDB4NGQsIAorICAgIDB4N2MsIDB4YjIsIDB4MjAsIDB4ZTcsIDB4MjcsIDB4NTQsIDB4MDcsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4MzksIDB4MWUsIDB4N2MsIDB4YjIsIAorICAgIDB4NTQsIDB4NzgsIDB4MDMsIDB4MDMsIDB4MDMsIDB4N2MsIDB4MmIsIDB4OWQsIDB4MTMsIDB4NDAsIDB4MWEsIDB4NjgsIDB4MTIsIDB4N2EsIDB4MTUsIDB4NGQsIAorICAgIDB4N2EsIDB4MjUsIDB4NGYsIDB4N2UsIDB4NjQsIDB4NjcsIDB4MDksIDB4N2EsIDB4NjUsIDB4NGIsIDB4ODksIDB4MjQsIDB4MDIsIDB4NjcsIDB4MTcsIDB4N2UsIAorICAgIDB4NjQsIDB4NjYsIDB4N2YsIDB4ODAsIDB4ZjIsIDB4MmQsIDB4MTMsIDB4OWQsIDB4MzEsIDB4Y2EsIDB4MzksIDB4N2QsIDB4MzEsIDB4MmQsIDB4MTAsIDB4Y2EsIAorICAgIDB4MTksIDB4Y2EsIDB4MjksIDB4OTksIDB4MjQsIDB4ZGEsIDB4MjksIDB4ZGEsIDB4MDksIDB4ZGEsIDB4MzksIDB4ODAsIDB4YTIsIDB4N2EsIDB4MTUsIDB4NGQsIAorICAgIDB4N2UsIDB4NjQsIDB4NjYsIDB4ZjUsIDB4NGQsIDB4MzMsIDB4NzgsIDB4MDksIDB4N2MsIDB4YjIsIDB4MjAsIDB4ZTcsIDB4MmEsIDB4N2UsIDB4NjQsIDB4NjYsIAorICAgIDB4NzQsIDB4N2EsIDB4NjUsIDB4NGIsIDB4MjIsIDB4NzUsIDB4MmYsIDB4NTIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MjEsIDB4NGQsIDB4N2UsIDB4MDksIAorICAgIDB4MzAsIDB4MGIsIDB4MDQsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ODksIDB4ODAsIDB4ZDQsIDB4NzUsIDB4MmYsIDB4NTQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIAorICAgIDB4MTUsIDB4NGQsIDB4N2UsIDB4MjUsIDB4NGYsIDB4ODAsIDB4OTAsIDB4NWUsIDB4MjAsIDB4MDcsIDB4NTQsIDB4NzgsIDB4N2UsIDB4NDQsIDB4NjcsIDB4N2QsIAorICAgIDB4MzAsIDB4ZTYsIDB4MTYsIDB4NGQsIDB4MzMsIDB4NjgsIDB4MjYsIDB4MWIsIDB4MzQsIDB4N2UsIDB4MDksIDB4NDAsIDB4MGIsIDB4MDQsIDB4N2UsIDB4NDQsIAorICAgIDB4MzQsIDB4ZmEsIDB4MjAsIDB4ZTMsIDB4MDQsIDB4N2UsIDB4NDQsIDB4NjcsIDB4ODUsIDB4Y2EsIDB4MDksIDB4Y2EsIDB4MzksIDB4OTksIDB4NDQsIDB4ZGEsIAorICAgIDB4MzksIDB4ZGEsIDB4MDksIDB4N2UsIDB4NjQsIDB4NjYsIDB4N2YsIDB4NGQsIDB4MzMsIDB4NjgsIDB4YTYsIDB4ODksIDB4NjQsIDB4N2EsIDB4MTUsIDB4NGQsIAorICAgIDB4ZjUsIDB4NGYsIDB4N2UsIDB4NjQsIDB4NjcsIDB4NTgsIDB4ODAsIDB4OTksIDB4N2UsIDB4MTUsIDB4NGQsIDB4ZTUsIDB4NGYsIDB4ODAsIDB4YzQsIDB4YzAsIAorICAgIDB4ZDAsIDB4YzAsIDB4ZDEsIDB4YzAsIDB4ZTAsIDB4Y2EsIDB4MTksIDB4NzUsIDB4MmYsIDB4ZmUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTQsIDB4MDAsIAorICAgIDB4NTMsIDB4MDIsIDB4NDAsIDB4NTIsIDB4ZGEsIDB4MTksIDB4ZDAsIDB4ZTAsIDB4ZDAsIDB4ZDEsIDB4ZDAsIDB4ZDAsIDB4MzIsIDB4MDMsIDB4YTUsIDB4Y2IsIAorICAgIDB4MTksIDB4YjEsIDB4ODAsIDB4MDAsIDB4MjIsIDB4MjIsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZTEsIDB4N2UsIDB4YTAsIDB4MDIsIDB4YTQsIAorICAgIDB4N2UsIDB4MDQsIDB4NjgsIDB4YjEsIDB4OWQsIDB4MDUsIDB4N2UsIDB4YjAsIDB4MjgsIDB4N2EsIDB4YjMsIDB4OTUsIDB4MDAsIDB4ODksIDB4MDQsIDB4Y2EsIAorICAgIDB4MjksIDB4YjQsIDB4ODAsIDB4ZTIsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZTEsIDB4N2UsIDB4MDAsIDB4MjgsIDB4N2EsIDB4MDMsIDB4OTUsIAorICAgIDB4MDAsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4OTUsIDB4MDAsIDB4ZGEsIDB4MjksIDB4MjIsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4N2YsIAorICAgIDB4ZTEsIDB4N2UsIDB4YTAsIDB4MDIsIDB4YTQsIDB4N2UsIDB4MDQsIDB4NjksIDB4ZTYsIDB4OWQsIDB4MDUsIDB4N2UsIDB4YjAsIDB4MzgsIDB4N2EsIDB4YjMsIAorICAgIDB4OTUsIDB4MDAsIDB4ODksIDB4MDQsIDB4Y2EsIDB4MjksIDB4YjQsIDB4ODAsIDB4ZTIsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZTEsIDB4N2UsIAorICAgIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDMsIDB4OTUsIDB4MDAsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4OTUsIDB4MDAsIDB4ZGEsIDB4MjksIDB4MjIsIAorICAgIDB4Y2EsIDB4MjksIDB4Y2EsIDB4MTksIDB4Y2EsIDB4NTgsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZTEsIDB4ZGEsIDB4NTgsIDB4N2UsIDB4NTQsIAorICAgIDB4MDIsIDB4MjAsIDB4OWMsIDB4YjUsIDB4YTQsIDB4N2UsIDB4NTAsIDB4MzAsIDB4NWUsIDB4MjAsIDB4MDcsIDB4MmMsIDB4NTIsIDB4N2EsIDB4NTMsIDB4OTUsIAorICAgIDB4MDAsIDB4MmUsIDB4NTQsIDB4NmEsIDB4MTcsIDB4ODksIDB4NTQsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIAorICAgIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4OTUsIDB4MDAsIDB4ZGEsIDB4MTksIAorICAgIDB4ZGEsIDB4MjksIDB4MjIsIDB4Y2EsIDB4MTksIDB4Y2EsIDB4NTgsIDB4N2UsIDB4MjQsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZTEsIDB4ZGEsIDB4NTgsIDB4N2UsIAorICAgIDB4NTQsIDB4MDIsIDB4MzgsIDB4OWMsIDB4YjUsIDB4YTQsIDB4N2UsIDB4NTAsIDB4MjAsIDB4NWUsIDB4MjAsIDB4MDcsIDB4MmMsIDB4NTIsIDB4N2EsIDB4NTMsIAorICAgIDB4OTUsIDB4MDAsIDB4MmUsIDB4NTQsIDB4NmEsIDB4ODgsIDB4ODksIDB4NTQsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIAorICAgIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4YTMsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4OTUsIDB4MDAsIDB4ZGEsIAorICAgIDB4MTksIDB4MjIsIDB4MDIsIDB4NmIsIDB4YTgsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4M2IsIDB4Y2EsIDB4NGIsIDB4Y2EsIAorICAgIDB4NWIsIDB4Y2EsIDB4NmIsIDB4Y2EsIDB4N2IsIDB4Y2EsIDB4ZWIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4MmMsIAorICAgIDB4N2YsIDB4YjQsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MWMsIDB4YjQsIDB4MDEsIDB4MTksIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NTQsIDB4MTQsIDB4NjgsIAorICAgIDB4MDUsIDB4MTIsIDB4NmIsIDB4NmMsIDB4ODAsIDB4MjMsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MzAsIDB4ZTUsIDB4MWMsIDB4MTIsIDB4NmMsIDB4YWEsIAorICAgIDB4ODAsIDB4MTcsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MzAsIDB4ZTUsIDB4MDUsIDB4MTIsIDB4NmMsIDB4YWEsIDB4ODAsIDB4MGIsIDB4N2UsIDB4YjMsIAorICAgIDB4OTEsIDB4MTQsIDB4NTQsIDB4MTQsIDB4NjgsIDB4MDMsIDB4MTIsIDB4NmIsIDB4NmMsIDB4ZGEsIDB4ZWIsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4NmIsIDB4ZGEsIAorICAgIDB4NWIsIDB4ZGEsIDB4NGIsIDB4ZGEsIDB4M2IsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4MjAsIDB4ZTQsIDB4MTksIDB4NzUsIAorICAgIDB4MmYsIDB4MGEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIDB4N2UsIDB4NzAsIDB4MGEsIDB4N2UsIDB4YjMsIDB4MmMsIDB4N2YsIDB4YjQsIAorICAgIDB4MDEsIDB4MWYsIDB4MDIsIDB4NmMsIDB4MDQsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4NzUsIDB4MmYsIDB4MGIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzQsIDB4MTQsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4N2UsIDB4YjMsIDB4MmMsIDB4N2YsIDB4YjQsIDB4MDIsIDB4MGMsIDB4MTIsIDB4NmIsIDB4YjQsIDB4MDIsIDB4NmIsIAorICAgIDB4YTgsIDB4NzQsIDB4MDQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjIsIDB4N2UsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MmMsIDB4N2YsIDB4N2EsIAorICAgIDB4MDMsIDB4MmMsIDB4ODAsIDB4MjIsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzYsIDB4NTQsIDB4NjAsIDB4NjAsIDB4MDUsIDB4YjQsIDB4NDAsIDB4MWUsIDB4ODAsIAorICAgIDB4MWMsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIDB4YjQsIDB4MDUsIDB4MTUsIDB4NzUsIDB4MmYsIDB4NzEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIAorICAgIDB4MmMsIDB4NzksIDB4N2UsIDB4YTAsIDB4MDEsIDB4N2EsIDB4YTMsIDB4OTEsIDB4MDYsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDcsIDB4MjIsIDB4NzQsIDB4MDAsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4MjIsIDB4YmUsIDB4NTcsIDB4MmMsIDB4N2MsIDB4MjgsIAorICAgIDB4MDQsIDB4N2UsIDB4NTcsIDB4MmMsIDB4N2MsIDB4N2EsIDB4MGYsIDB4MmMsIDB4ODIsIDB4N2EsIDB4NTcsIDB4MmMsIDB4ODYsIDB4NzQsIDB4MTAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MTIsIDB4MjIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MWEsIDB4NzAsIDB4NTMsIAorICAgIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjAsIDB4ZTQsIDB4NGMsIDB4N2UsIDB4ZWYsIDB4MmMsIDB4ODIsIDB4N2UsIDB4ZjcsIDB4MmMsIDB4ODYsIDB4N2UsIAorICAgIDB4MDcsIDB4MmMsIDB4ODYsIDB4NGQsIDB4MDAsIDB4NjgsIDB4MjEsIDB4N2UsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTcsIDB4YTMsIAorICAgIDB4YTUsIDB4MDgsIDB4MWIsIDB4ZjQsIDB4NjgsIDB4MDYsIDB4YTUsIDB4YjgsIDB4MTAsIDB4ZjAsIDB4ODAsIDB4MTksIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIAorICAgIDB4YjMsIDB4MmMsIDB4N2YsIDB4YmUsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MGQsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIDB4N2YsIDB4NzQsIAorICAgIDB4ODAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWUsIDB4N2EsIDB4ZWYsIDB4MmMsIDB4ODIsIDB4N2EsIDB4ZjcsIDB4MmMsIDB4ODYsIDB4NzUsIDB4MmYsIDB4MDYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzQsIDB4MDQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjIsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MmIsIAorICAgIDB4Y2EsIDB4M2IsIDB4Y2EsIDB4NGIsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIDB4Y2EsIDB4N2IsIDB4Y2EsIDB4ZWIsIDB4NzUsIDB4MmYsIDB4MDMsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIDB4N2UsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDEsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4MTIsIDB4NmQsIDB4MTksIDB4ZGEsIDB4ZWIsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4NmIsIDB4ZGEsIDB4NWIsIDB4ZGEsIAorICAgIDB4NGIsIDB4ZGEsIDB4M2IsIDB4ZGEsIDB4MmIsIDB4ZGEsIDB4MWIsIDB4ZGEsIDB4MGIsIDB4MjIsIDB4NzUsIDB4MmYsIDB4MDMsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4N2UsIDB4YjMsIDB4MmMsIDB4ODAsIDB4YjQsIDB4MDIsIDB4MTEsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIDB4ODAsIDB4N2EsIDB4YjMsIDB4MmMsIAorICAgIDB4N2YsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4MjIsIDB4YjQsIDB4MDEsIDB4NDYsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MDQsIDB4MjAsIAorICAgIDB4ZTYsIDB4NDIsIDB4N2UsIDB4MjMsIDB4OTEsIDB4MWEsIDB4N2MsIDB4MzIsIDB4N2UsIDB4MTMsIDB4MmMsIDB4ODEsIDB4MmMsIDB4MjEsIDB4N2EsIDB4MjMsIAorICAgIDB4MmMsIDB4ODEsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDQsIDB4MmMsIDB4ODgsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTYsIDB4N2EsIDB4MDksIDB4YjAsIAorICAgIDB4MGIsIDB4MDQsIDB4YTUsIDB4ZGIsIDB4ZjQsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIDB4NzUsIDB4MmYsIDB4NzAsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIDB4ODEsIDB4N2UsIDB4YTMsIDB4MmMsIDB4N2QsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MDMsIDB4MTIsIDB4NmQsIDB4YjksIAorICAgIDB4MjIsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4ZGEsIDB4NTksIDB4MDIsIDB4NmMsIDB4N2MsIDB4NzQsIDB4ZTAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIAorICAgIDB4MDMsIDB4OTEsIDB4MTAsIDB4N2UsIDB4MTMsIDB4OTEsIDB4MTEsIDB4N2UsIDB4MzMsIDB4OTEsIDB4MTIsIDB4N2UsIDB4MjMsIDB4OTEsIDB4MTMsIDB4N2UsIAorICAgIDB4NTMsIDB4OTEsIDB4MTQsIDB4N2UsIDB4NDMsIDB4OTEsIDB4MTUsIDB4N2UsIDB4NzMsIDB4OTEsIDB4MTYsIDB4N2UsIDB4NjMsIDB4OTEsIDB4MTcsIDB4N2EsIAorICAgIDB4MGYsIDB4MmMsIDB4NzYsIDB4N2EsIDB4MWYsIDB4MmMsIDB4N2EsIDB4NzUsIDB4MmYsIDB4MDQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MDEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIAorICAgIDB4MzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NDEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NTEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzQsIDB4MDAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDQsIDB4MTIsIDB4NmQsIDB4OGQsIDB4MjIsIDB4NmQsIDB4MDAsIDB4N2UsIAorICAgIDB4MTQsIDB4MDEsIDB4MDIsIDB4N2EsIDB4MDcsIDB4MmMsIDB4ODYsIDB4N2EsIDB4MDMsIDB4MmMsIDB4ODEsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzYsIDB4MjAsIAorICAgIDB4ZTcsIDB4MGYsIDB4N2EsIDB4MjMsIDB4MmMsIDB4ODAsIDB4N2EsIDB4MzMsIDB4MmMsIDB4N2YsIDB4YmUsIDB4MDcsIDB4MmMsIDB4N2MsIDB4NjgsIDB4MDksIAorICAgIDB4MjIsIDB4N2EsIDB4MzMsIDB4MmMsIDB4ODAsIDB4N2EsIDB4MjMsIDB4MmMsIDB4N2YsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzYsIDB4NTQsIDB4ZTMsIDB4MjMsIAorICAgIDB4MjMsIDB4MzAsIDB4ZTAsIDB4MDIsIDB4ZDIsIDB4ZTUsIDB4MzAsIDB4ZTcsIDB4MDIsIDB4ZDIsIDB4ZTQsIDB4MzAsIDB4ZTUsIDB4MDYsIDB4MzAsIDB4ZTQsIAorICAgIDB4MDMsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4NTQsIDB4M2UsIDB4ZjUsIDB4ZjAsIDB4MDMsIDB4NTQsIDB4MWYsIDB4YzMsIDB4MjUsIDB4ZjAsIDB4OTAsIDB4NmQsIAorICAgIDB4ZTUsIDB4NzUsIDB4ODQsIDB4ZmYsIDB4NzMsIDB4MDIsIDB4NmYsIDB4YTAsIDB4MDIsIDB4NmUsIDB4MmQsIDB4MDIsIDB4NzAsIDB4MzksIDB4MDIsIDB4NzAsIAorICAgIDB4NTQsIDB4MDIsIDB4NmYsIDB4MzcsIDB4MDIsIDB4NmUsIDB4YzIsIDB4MDIsIDB4NzAsIDB4ODUsIDB4MDIsIDB4NzAsIDB4ODUsIDB4MDIsIDB4NzAsIDB4ODgsIAorICAgIDB4MDIsIDB4NzAsIDB4ODgsIDB4MDIsIDB4NzAsIDB4ODgsIDB4MDIsIDB4NzAsIDB4ODgsIDB4MDIsIDB4NzAsIDB4ODgsIDB4MDIsIDB4NzAsIDB4ODgsIDB4MDIsIAorICAgIDB4NzAsIDB4ODgsIDB4MDIsIDB4NzAsIDB4ODgsIDB4MDIsIDB4NzAsIDB4OGUsIDB4MDIsIDB4NzEsIDB4NjAsIDB4MDIsIDB4NzAsIDB4OGIsIDB4MDIsIDB4NzAsIAorICAgIDB4OGIsIDB4MDIsIDB4NzAsIDB4OGIsIDB4MDIsIDB4NzAsIDB4OGIsIDB4MDIsIDB4NzAsIDB4OGIsIDB4MDIsIDB4NzAsIDB4OGIsIDB4NzQsIDB4MDAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIDB4YjQsIDB4MDYsIDB4MmEsIAorICAgIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzgsIDB4NjAsIDB4NzksIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MmMsIDB4NzksIDB4N2UsIDB4MTcsIDB4MmMsIDB4N2EsIAorICAgIDB4NzUsIDB4MmYsIDB4NzIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MDEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MTEsIDB4MmYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4MTIsIDB4NzIsIDB4MzcsIDB4NDAsIDB4NTgsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4YjQsIDB4MDgsIDB4MWMsIDB4NzUsIDB4MmYsIDB4NzQsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4N2UsIDB4MDgsIDB4MmMsIDB4ODgsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2EsIAorICAgIDB4MGIsIDB4YjAsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4YjQsIDB4MDAsIDB4MzMsIDB4NzUsIDB4MmYsIDB4NzUsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4N2UsIDB4MDgsIDB4MmMsIDB4ODgsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MGIsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIAorICAgIDB4MzAsIDB4ZTAsIDB4MDcsIDB4NzQsIDB4MDIsIDB4N2EsIDB4MGIsIDB4YjAsIDB4ODAsIDB4MDUsIDB4NzQsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4MGIsIAorICAgIDB4MTQsIDB4NzQsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGIsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4MDIsIAorICAgIDB4NzEsIDB4ZjIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4N2UsIDB4YjMsIAorICAgIDB4MmMsIDB4NzcsIDB4YjQsIDB4MDAsIDB4NWYsIDB4NzUsIDB4MmYsIDB4NzYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIDB4N2IsIDB4NTQsIAorICAgIDB4MGYsIDB4YjQsIDB4MDIsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NjAsIDB4ODAsIDB4MTcsIDB4YjQsIDB4MDAsIDB4MDUsIDB4N2UsIDB4YjAsIDB4MDAsIDB4ODAsIAorICAgIDB4MGYsIDB4N2UsIDB4YjMsIDB4MmMsIDB4N2IsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NDAsIDB4ODAsIDB4MDMsIDB4N2UsIDB4YjAsIDB4MjAsIAorICAgIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTEsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4NzQsIDB4MDEsIDB4ODAsIDB4MDIsIDB4NzQsIAorICAgIDB4MDAsIDB4N2UsIDB4MDgsIDB4MmMsIDB4ODgsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MGIsIDB4N2EsIDB4MGIsIDB4YjAsIDB4MGIsIDB4MTQsIAorICAgIDB4NzQsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDIsIDB4ZGEsIAorICAgIDB4MGIsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4N2UsIDB4YjMsIDB4MmMsIDB4N2IsIDB4NTQsIDB4MGYsIDB4YjQsIDB4MDIsIDB4MDUsIAorICAgIDB4N2UsIDB4YjAsIDB4NjAsIDB4ODAsIDB4MTcsIDB4YjQsIDB4MDAsIDB4MDUsIDB4N2UsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4N2UsIDB4YjMsIDB4MmMsIAorICAgIDB4N2IsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4N2UsIDB4YjAsIDB4NDAsIDB4ODAsIDB4MDMsIDB4N2UsIDB4YjAsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIAorICAgIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzksIDB4YjQsIDB4MDAsIDB4MjYsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIDB4YjQsIDB4MDEsIDB4MGUsIDB4NzUsIDB4MmYsIAorICAgIDB4NzcsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4ODAsIDB4MWIsIDB4YjQsIDB4MDMsIDB4MGUsIDB4NzUsIAorICAgIDB4MmYsIDB4NzgsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTEsIDB4ODAsIDB4MGEsIDB4NzQsIDB4MDAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MDAsIDB4MTIsIDB4NzEsIDB4ZjIsIDB4MjIsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4MDIsIDB4NmIsIDB4ZGUsIAorICAgIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIDB4YjQsIDB4MDksIDB4MWYsIDB4NzUsIDB4MmYsIDB4NzksIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIAorICAgIDB4NzksIDB4YmUsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4NjgsIDB4MGQsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4NDMsIDB4NzksIDB4ZGEsIDB4YjgsIDB4NTAsIDB4NzYsIAorICAgIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4ODAsIDB4NmQsIDB4YjQsIDB4MDUsIDB4MDgsIDB4NzUsIDB4MmYsIDB4N2EsIDB4MTIsIDB4NzMsIDB4MzUsIDB4ODAsIAorICAgIDB4NjIsIDB4YjQsIDB4MDMsIDB4MTksIDB4NzUsIDB4MmYsIDB4N2IsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzksIDB4YjQsIDB4MDEsIAorICAgIDB4NTUsIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4NDQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIDB4NDYsIDB4YjQsIDB4MDEsIDB4MTksIAorICAgIDB4NzUsIDB4MmYsIDB4N2MsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzksIDB4YjQsIDB4MDEsIDB4MzksIDB4N2UsIDB4YjMsIDB4M2YsIAorICAgIDB4ZjIsIDB4NTQsIDB4ZmUsIDB4N2EsIDB4YjMsIDB4M2YsIDB4ZjIsIDB4ODAsIDB4MmEsIDB4YjQsIDB4MDcsIDB4MmEsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzgsIAorICAgIDB4NjAsIDB4MjQsIDB4N2MsIDB4MGIsIDB4N2UsIDB4MTMsIDB4MmMsIDB4NzksIDB4N2UsIDB4MTcsIDB4MmMsIDB4N2EsIDB4NzUsIDB4MmYsIDB4NzMsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4N2EsIDB4MDEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NzIsIAorICAgIDB4NzEsIDB4NDAsIDB4MDMsIDB4MDIsIDB4NmIsIDB4ZGUsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIDB4YjQsIDB4MGIsIDB4ZjYsIAorICAgIDB4NzUsIDB4MmYsIDB4N2QsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzksIDB4N2UsIDB4YTMsIDB4MmMsIDB4N2IsIDB4NGMsIDB4YWIsIAorICAgIDB4NzgsIDB4ZTQsIDB4ODAsIDB4ZGYsIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIAorICAgIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIDB4YjQsIDB4MGEsIDB4Y2YsIDB4NzUsIDB4MmYsIDB4N2UsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjMsIDB4MmMsIAorICAgIDB4NzksIDB4NzAsIDB4YzMsIDB4N2UsIDB4MDgsIDB4MmMsIDB4ODgsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MGIsIDB4YjAsIDB4N2UsIDB4NTQsIAorICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4MDIsIDB4NzEsIDB4ZjIsIDB4N2UsIDB4YjMsIAorICAgIDB4MmMsIDB4NzcsIDB4YjQsIDB4MDQsIDB4MjAsIDB4NzUsIDB4MmYsIDB4YzMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIAorICAgIDB4MTcsIDB4MmMsIDB4NzgsIDB4N2UsIDB4MTgsIDB4MmMsIDB4ODgsIDB4N2EsIDB4MWMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDcsIDB4MmMsIDB4N2MsIDB4MTIsIAorICAgIDB4NzMsIDB4NDEsIDB4MDIsIDB4NzEsIDB4NWEsIDB4YjQsIDB4MDYsIDB4NDIsIDB4NzUsIDB4MmYsIDB4YzEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4NTgsIAorICAgIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2QsIDB4Y2EsIDB4N2UsIDB4ZDcsIDB4MmMsIDB4NzgsIDB4N2UsIDB4NzgsIDB4MmMsIDB4ODgsIAorICAgIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzcsIDB4MmMsIDB4N2MsIDB4NzUsIDB4MmYsIDB4YzEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzAsIDB4YTgsIAorICAgIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4MTIsIDB4NzMsIDB4N2EsIDB4N2UsIDB4NDMsIDB4MmMsIDB4MzUsIAorICAgIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4NDAsIDB4NjUsIDB4ODAsIDB4NjAsIDB4YjQsIDB4MDAsIDB4MjQsIDB4YzIsIDB4YWYsIDB4N2UsIAorICAgIDB4YjAsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4MmMsIDB4MzUsIDB4MTIsIDB4NmIsIDB4ZGUsIDB4ZTQsIDB4OGQsIDB4ZWYsIAorICAgIDB4OGQsIDB4ZWYsIDB4OGQsIDB4ZWYsIDB4ZDUsIDB4ZTAsIDB4ZjcsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MDIsIDB4ZmYsIDB4Y2EsIDB4MDYsIDB4MDAsIDB4MDAsIAorICAgIDB4MzIsIDB4YjQsIDB4MDksIDB4MjAsIDB4NzQsIDB4MDMsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDYsIDB4N2UsIDB4MjMsIDB4OTEsIDB4MDcsIDB4N2UsIDB4NTcsIAorICAgIDB4MmMsIDB4NzgsIDB4NGQsIDB4NTUsIDB4NjgsIDB4MDUsIDB4NGUsIDB4MjAsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NWUsIDB4MjAsIDB4ZmQsIDB4N2EsIDB4MjMsIAorICAgIDB4OTEsIDB4MDcsIDB4ODAsIDB4MTYsIDB4YjQsIDB4MDcsIDB4MTYsIDB4YzIsIDB4YWYsIDB4N2UsIDB4MDcsIDB4MmMsIDB4N2EsIDB4N2UsIDB4MTcsIDB4MmMsIAorICAgIDB4NzgsIDB4YzAsIDB4ZDEsIDB4Y2EsIDB4MTgsIDB4Y2EsIDB4MzgsIDB4Y2EsIDB4MjgsIDB4MzIsIDB4MDIsIDB4NmIsIDB4ZGUsIDB4MDIsIDB4NzEsIDB4ZjIsIAorICAgIDB4NzQsIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWMsIDB4N2UsIDB4YjMsIDB4MmMsIDB4NzcsIAorICAgIDB4YjQsIDB4MDMsIDB4MTUsIDB4NzUsIDB4MmYsIDB4YzIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDEsIDB4N2UsIDB4MTcsIDB4MmMsIAorICAgIDB4NzgsIDB4N2UsIDB4NTcsIDB4MmMsIDB4N2MsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4YjQsIDB4MDUsIDB4NDEsIDB4NzUsIDB4MmYsIDB4YzAsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4N2UsIDB4MDgsIDB4MmMsIDB4ODgsIAorICAgIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MjQsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzcsIDB4MmMsIDB4NzgsIDB4N2UsIDB4NDcsIDB4MmMsIDB4N2MsIAorICAgIDB4MTIsIDB4NzMsIDB4NDEsIDB4N2UsIDB4NDMsIDB4MmMsIDB4MzUsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4N2UsIDB4MDgsIDB4MmMsIAorICAgIDB4ODgsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NTcsIDB4MmMsIDB4N2MsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4YjQsIDB4MDEsIDB4MjAsIDB4N2UsIAorICAgIDB4MDAsIDB4MDAsIDB4N2UsIDB4MTAsIDB4MDEsIDB4NzUsIDB4MmYsIDB4NzIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4MDEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4MTEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MTIsIDB4NzIsIDB4MzcsIDB4NDAsIDB4MDMsIDB4MDIsIDB4NmIsIDB4ZWIsIDB4MDIsIAorICAgIDB4NzEsIDB4ZjIsIDB4NzUsIDB4MmYsIDB4MDcsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjAsIDB4MDIsIDB4N2EsIDB4YjMsIDB4OTAsIDB4MDAsIDB4NzQsIAorICAgIDB4MDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTUsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MTEsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTUsIDB4NTQsIDB4NjAsIDB4YmUsIDB4YjAsIDB4NDAsIDB4NjgsIDB4MDgsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MTUsIDB4ODAsIDB4ZWQsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTIsIDB4NzQsIDB4MDQsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTQsIAorICAgIDB4NzQsIDB4ZmYsIDB4N2EsIDB4YjMsIDB4MmMsIDB4N2UsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIAorICAgIDB4OTQsIDB4MDAsIDB4MTIsIDB4NzIsIDB4YmUsIDB4NDAsIDB4MWYsIDB4N2UsIDB4MDgsIDB4MmMsIDB4ODgsIDB4N2EsIDB4MGMsIDB4MDAsIDB4MDAsIDB4Y2EsIAorICAgIDB4MGIsIDB4Y2EsIDB4NDksIDB4MTIsIDB4NzMsIDB4NDEsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MGIsIDB4N2UsIDB4NDMsIDB4MmMsIDB4MzUsIDB4N2EsIDB4NDMsIAorICAgIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4YzMsIDB4MjIsIDB4N2UsIDB4NDMsIDB4MmMsIDB4MzUsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIAorICAgIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4N2UsIDB4NDAsIDB4MDEsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4MTIsIDB4NzIsIDB4YmUsIDB4NDAsIAorICAgIDB4MzEsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4NjEsIDB4N2UsIDB4NzgsIDB4MmMsIDB4ODgsIDB4N2EsIAorICAgIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzcsIDB4MmMsIDB4N2MsIDB4YmQsIDB4NzQsIDB4NzgsIDB4MTcsIDB4NzUsIDB4MmYsIDB4YzEsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MTIsIDB4NzMsIDB4N2EsIDB4NDAsIDB4MGMsIDB4N2UsIDB4NDMsIDB4MmMsIDB4MzUsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIAorICAgIDB4YzMsIDB4MjIsIDB4N2UsIDB4NDMsIDB4MmMsIDB4MzUsIDB4N2EsIDB4NDMsIDB4OTQsIDB4MDAsIDB4ZDAsIDB4YTgsIDB4ZDMsIDB4MjIsIDB4N2UsIDB4MjQsIAorICAgIDB4MDAsIDB4ZmUsIDB4N2UsIDB4MzQsIDB4N2YsIDB4Y2EsIDB4MGIsIDB4MWEsIDB4NTAsIDB4YzUsIDB4ZjAsIDB4N2QsIDB4NjIsIDB4N2QsIDB4NzUsIDB4N2QsIAorICAgIDB4ODcsIDB4N2UsIDB4MzQsIDB4N2YsIDB4YzIsIDB4N2UsIDB4MWIsIDB4YjAsIDB4N2UsIDB4MzQsIDB4N2YsIDB4MDMsIDB4YjQsIDB4MDEsIDB4MDQsIDB4N2UsIAorICAgIDB4MzQsIDB4N2YsIDB4Y2MsIDB4N2UsIDB4MWIsIDB4YjAsIDB4YmMsIDB4MGIsIDB4NTAsIDB4NDksIDB4M2UsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MGEsIDB4NTAsIAorICAgIDB4MmQsIDB4NzUsIDB4MGIsIDB4M2EsIDB4MzAsIDB4NjksIDB4NTMsIDB4MDAsIDB4MDIsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmMsIAorICAgIDB4MWIsIDB4NTAsIDB4MzAsIDB4M2UsIDB4MTAsIDB4M2UsIDB4MTAsIDB4MGEsIDB4NTEsIDB4MmQsIDB4MzUsIDB4NjksIDB4NDEsIDB4MDAsIDB4MDIsIDB4MGIsIAorICAgIDB4MWEsIDB4MzAsIDB4YmQsIDB4MzgsIDB4NTAsIDB4MDIsIDB4MmQsIDB4MzgsIDB4YmUsIDB4NDQsIDB4ZmYsIDB4ZmYsIDB4NzgsIDB4MDUsIDB4N2UsIDB4MWIsIAorICAgIDB4OTAsIDB4MGEsIDB4NDksIDB4NGQsIDB4NDQsIDB4NjgsIDB4MGMsIDB4YmUsIDB4NDQsIDB4MDAsIDB4ZmYsIDB4MjgsIDB4MDQsIDB4N2UsIDB4NDQsIDB4MDAsIAorICAgIDB4ZmYsIDB4YzMsIDB4MjIsIDB4ZDMsIDB4MjIsIAorCisvLyBTZWdtZW50ICMxNiwgU3RhcnQgQWRkcmVzcyAwMGZmN2ZjNiwgTGVuZ3RoIDQKKzB4ZmYsMHgwMCwweGM2LDB4N2YsMHgwNCwweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIAorCisvLyBTZWdtZW50ICMxNywgU3RhcnQgQWRkcmVzcyAwMGZmNzMzNSwgTGVuZ3RoIDMyOAorMHhmZiwweDAwLDB4MzUsMHg3MywweDQ4LDB4MDEsCisgICAgMHhjYSwgMHgwOCwgMHg3ZSwgMHgwMSwgMHgyZiwgMHg3YSwgMHgwMywgMHgzZiwgMHhmMCwgMHhkYSwgMHgwOCwgMHgyMiwgMHg3ZSwgMHgxYiwgMHhjMCwgMHg3YSwgCisgICAgMHgwYiwgMHhjMCwgMHgwYiwgMHgxNCwgMHgwYiwgMHgzNCwgMHgxYiwgMHg0NCwgMHg3OCwgMHhmMiwgMHgyMiwgMHg3ZiwgMHg2ZiwgMHg3ZiwgMHhmMCwgMHgxYiwgCisgICAgMHhmYywgMHg3YywgMHg1NCwgMHg3ZCwgMHgzMiwgMHg4MCwgMHgwOCwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgxYiwgMHg5ZSwgCisgICAgMHg0NCwgMHgwMCwgMHgxMCwgMHg1MCwgMHhmMiwgMHgyZSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwNiwgMHhjYSwgMHg0OCwgMHgxYiwgMHg0NCwgMHg3OCwgCisgICAgMHhmYSwgMHg3ZiwgMHhmNiwgMHg4OSwgMHhlNCwgMHhjYSwgMHg2YiwgMHg1ZSwgMHhkNCwgMHgwMCwgMHgzZiwgMHg2OCwgMHgyMCwgMHg3ZSwgMHg4NCwgMHgwMCwgCisgICAgMHg0MCwgMHg5ZCwgMHg4ZCwgMHhkYSwgMHg2YiwgMHhiZCwgMHg4NywgMHgzOCwgMHgxNiwgMHhjYSwgMHg3OSwgMHg3ZCwgMHg3OCwgMHgxMiwgMHg3MywgMHhhNCwgCisgICAgMHhkYSwgMHg3OSwgMHg0MCwgMHgwOCwgMHg5ZCwgMHg3OCwgMHg2OCwgMHgwMiwgMHg4MCwgMHgwNSwgMHhjMiwgMHhkNywgMHgyMiwgMHhkYSwgMHg2YiwgMHg3ZSwgCisgICAgMHhjMCwgMHgwMywgMHg3ZSwgMHhkMCwgMHgwMCwgMHg3YSwgMHhkMywgMHg5MCwgMHgwMCwgMHg3NCwgMHhhYSwgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3NCwgCisgICAgMHg1NSwgMHgzOSwgMHhiNSwgMHgyYSwgMHhhYSwgMHg3NCwgMHhhMCwgMHgzOSwgMHhiNSwgMHg1NSwgMHg1NSwgMHg3ZSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg5ZCwgCisgICAgMHg3MCwgMHg1MCwgMHgwNiwgMHgyZCwgMHg3MCwgMHg3ZCwgMHgwNywgMHg2ZCwgMHg3NywgMHg3YywgMHgzMSwgMHg3ZSwgMHg3YiwgMHgwMCwgMHg3YSwgMHg2YiwgCisgICAgMHgwMCwgMHgwYiwgMHg3YywgMHgwYiwgMHg2YywgMHhhNSwgMHhkOSwgMHhmMywgMHg3ZiwgMHgxNiwgMHgxYiwgMHgxYywgMHg3ZSwgMHg1NCwgMHgyNywgMHgxMCwgCisgICAgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgMHgxMCwgMHg2OCwgMHgwNiwgMHgxYiwgMHg1NCwgMHg3OCwgMHhmNSwgMHg4MCwgMHgyZiwgMHg2ZCwgMHgwMCwgMHg3YywgCisgICAgMHgyMCwgMHg3ZiwgMHgxNiwgMHg5ZiwgMHgxMCwgMHg3ZiwgMHgyNywgMHg5ZiwgMHgyMCwgMHg3ZSwgMHgyYiwgMHgwMCwgMHg3ZSwgMHgxYiwgMHgxMCwgMHhiYywgCisgICAgMHgwMSwgMHg3OCwgMHgxOSwgMHgwYiwgMHgyYywgMHgwYiwgMHgxYywgMHhhNSwgMHhkYiwgMHhlZiwgMHg3YywgMHhiNiwgMHgyMCwgMHhlMCwgMHgwNiwgMHg2YywgCisgICAgMHhkYywgMHg3YSwgMHhkMywgMHg5MCwgMHgwMCwgMHg0ZCwgMHg3NywgMHg3OCwgMHg5MCwgMHhjMiwgMHhkNywgMHgyMiwgMHhkMiwgMHhkNywgMHgyMiwgMHgwMCwgCisgICAgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMiwgMHgwMCwgCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwOCwgMHgxMCwgCisgICAgMHgwMiwgMHgxMCwgMHgwNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwOCwgMHg3ZSwgMHgxOCwgMHg3ZiwgMHhiZCwgMHg3YSwgMHgxYywgMHgwMCwgCisgICAgMHhmZSwgMHgwYiwgMHgxYSwgMHgwMCwgMHg1ZSwgMHgxMCwgMHgxZiwgMHhiZSwgMHgxMCwgMHgxNCwgMHgzOCwgMHgxYSwgMHgwYSwgMHg1MSwgMHgyMywgMHg3ZSwgCisgICAgMHgxOCwgMHg3NCwgMHgyNCwgMHg3YSwgMHgxYywgMHgwMCwgMHhmZiwgMHgyZCwgMHgzNSwgMHgwYiwgMHgxYSwgMHg1MCwgMHg2MCwgMHgwOCwgMHhhNSwgMHhiOCwgCisgICAgMHgwMiwgMHgwMywgMHg0ZSwgMHhhMCwgMHgwOCwgMHgyMiwgMHg4MCwgMHhmZSwgCit9OworCitzdGF0aWMgc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIElNQUdFX1ZFUlNJT05fTkFNRSA9IHsKKwkyLCAwLCAzIH07CQkvLyBNYWpvciwgTWlub3IsIEJ1aWxkCisKKyN1bmRlZiBJTUFHRV9WRVJTSU9OX05BTUUKKworI3VuZGVmIElNQUdFX0FSUkFZX05BTUUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24zLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I1NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24zLmgKQEAgLTAsMCArMSw4MzUgQEAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKiBFZGdlcG9ydCBCaW5hcnkgSW1hZ2UgKGZvciBUSSBiYXNlZCBwcm9kdWN0cykKKy8vKiBHZW5lcmF0ZWQgYnkgVElCaW4yQyB2Mi4wMCAod2F0Y2hwb3J0KQorLy8qIENvcHlyaWdodCAoQykgMjAwMSBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKK3N0YXRpYyBpbnQgSU1BR0VfU0laRSA9IDEyNzQ5OworCitzdHJ1Y3QgRURHRV9GSVJNV0FSRV9WRVJTSU9OX0lORk8KK3sKKwl1bnNpZ25lZCBjaGFyICAgTWFqb3JWZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgICBNaW5vclZlcnNpb247CisJdW5zaWduZWQgc2hvcnQgIEJ1aWxkTnVtYmVyOworfTsKKworc3RhdGljIHN0cnVjdCBFREdFX0ZJUk1XQVJFX1ZFUlNJT05fSU5GTyBJTUFHRV9WRVJTSU9OX05BTUUgPQoreworCTQsIDEwLCAwCQkvLyBNYWpvciwgTWlub3IsIEJ1aWxkCisKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIElNQUdFX0FSUkFZX05BTUVbXSA9IAoreworLy8gIHN0cnVjdCBJbWFnZUhkcgorLy8gIHsKKy8vICAgICAgV09SRCAgICBMZW5ndGg7CisvLyAgICAgIEJZVEUgICAgQ2hlY2tTdW07CisvLyAgfTsKKzB4Y2EsIDB4MzEsIAorMHhhOCwgCisKKzB4MDIsIDB4MjYsIDB4ZmUsIDB4MDIsIDB4MjEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgxYSwgMHg4NSwgMHgzZiwgCisweDhjLCAweDg1LCAweDQwLCAweDhhLCAweGMwLCAweGUwLCAweGMwLCAweGQwLCAweGMwLCAweGYwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDAwLCAKKzB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDMsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDUsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MDcsIDB4ZTUsIDB4M2UsIAorMHgyNCwgMHgwOCwgMHhmOCwgMHhlNiwgMHg2MCwgMHgyYiwgMHhlNSwgMHgzZSwgMHgyNCwgMHgxMCwgMHhmOCwgMHhhNiwgMHg4MSwgMHhlNSwgMHgzZSwgMHg3NSwgCisweGYwLCAweDIxLCAweGE0LCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGY4LCAweGY1LCAweDgzLCAweDc4LCAweDhjLCAweGU1LCAweDgxLCAKKzB4MDQsIDB4YzMsIDB4OTgsIDB4ZjksIDB4OTQsIDB4MjIsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MTEsIDB4OTQsIDB4ZTYsIDB4ZjAsIDB4MDgsIDB4YTMsIDB4ZDksIAorMHhmYSwgMHg3NCwgMHgwOCwgMHgyNSwgMHgzZSwgMHhmOCwgMHgwNSwgMHgzZSwgMHgwOCwgMHhlNiwgMHg1NCwgMHg4MCwgMHg3MCwgMHgwYywgMHhlNSwgMHgzZSwgCisweGI0LCAweDA3LCAweGYzLCAweDc4LCAweDA4LCAweDc1LCAweDNlLCAweDAwLCAweDgwLCAweGVmLCAweGU1LCAweDNlLCAweDI0LCAweDEwLCAweGY4LCAweDg2LCAKKzB4ODEsIDB4ZTUsIDB4M2UsIDB4NzUsIDB4ZjAsIDB4MjEsIDB4YTQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZjgsIDB4ZjUsIDB4ODMsIAorMHg3OCwgMHg4YywgMHhlNSwgMHg4MSwgMHgwNCwgMHhjMywgMHg5OCwgMHhmOSwgMHhlMCwgMHhmNiwgMHgwOCwgMHhhMywgMHhkOSwgMHhmYSwgMHhkMCwgMHgwNywgCisweGQwLCAweDA2LCAweGQwLCAweDA1LCAweGQwLCAweDA0LCAweGQwLCAweDAzLCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweGQwLCAweDgzLCAKKzB4ZDAsIDB4ODIsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4MzAsIDB4MDEsIDB4NGQsIDB4MzAsIDB4YjQsIDB4NDgsIDB4MTAsIAorMHgwMCwgMHg0NSwgMHg5MCwgMHhmZiwgMHgwOCwgMHhlMCwgMHg1NCwgMHgyMCwgMHhmOCwgMHg5MCwgMHhmZiwgMHg0OCwgMHhlMCwgMHg1NCwgMHgyMCwgMHhmOSwgCisweDkwLCAweGZmLCAweDEwLCAweGUwLCAweDU0LCAweDIwLCAweGZhLCAweDkwLCAweGZmLCAweDUwLCAweGUwLCAweDU0LCAweDIwLCAweGZiLCAweDc0LCAweDAwLCAKKzB4ZjUsIDB4ODIsIDB4NzQsIDB4ZjgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4YzgsIDB4ZjAsIDB4NjgsIDB4NjAsIDB4MDIsIDB4N2UsIDB4MDQsIDB4YTMsIDB4ZTAsIAorMHhjOSwgMHhmMCwgMHg2OSwgMHg2MCwgMHgwMiwgMHg3ZSwgMHgwNCwgMHhhMywgMHhlMCwgMHhjYSwgMHhmMCwgMHg2YSwgMHg2MCwgMHgwMiwgMHg3ZSwgMHgwNCwgCisweGEzLCAweGUwLCAweGNiLCAweGYwLCAweDZiLCAweDYwLCAweDAyLCAweDdlLCAweDA0LCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweGQwLCAweGMwLCAweGYwLCAKKzB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDMsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDUsIAorMHhjMCwgMHgwNiwgMHhjMCwgMHgwNywgMHg5MCwgMHhmZiwgMHg5MywgMHg3NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHg4MSwgMHg5NCwgMHhmZCwgMHg0MCwgMHgwMywgCisweDAyLCAweDExLCAweDk0LCAweDg1LCAweDQxLCAweDhkLCAweDg1LCAweDQyLCAweDhiLCAweDc0LCAweGFmLCAweGY1LCAweDgyLCAweDc0LCAweGZhLCAweGY1LCAKKzB4ODMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MWIsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4OTAsIDB4ZmYsIDB4NGEsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MmMsIAorMHg5MCwgMHhmZiwgMHg0ZSwgMHhlMCwgMHgzMCwgMHhlNywgMHgyNSwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHg3NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgyMCwgCisweGI0LCAweDAyLCAweDFkLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDkwLCAweGZmLCAweDdhLCAweGUwLCAweDMwLCAweGU3LCAweDA1LCAweDEyLCAweDI3LCAKKzB4OGQsIDB4ODAsIDB4MDksIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ODAsIDB4MDQsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIAorMHhhMywgMHhlMCwgMHhiNCwgMHgwMSwgMHgxYiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg5MCwgMHhmZiwgMHg1MiwgMHhlMCwgMHgzMCwgMHhlNywgMHgyYywgCisweDkwLCAweGZmLCAweDU2LCAweGUwLCAweDMwLCAweGU3LCAweDI1LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweDc0LCAweDAyLCAweGYwLCAweDgwLCAweDI1LCAKKzB4YjQsIDB4MDIsIDB4MjIsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4OTAsIDB4ZmYsIDB4N2EsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MDUsIDB4MTIsIDB4MjcsIAorMHg4ZCwgMHg4MCwgMHgwOSwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHg3NCwgMHgwMywgMHhmMCwgMHg4MCwgMHgwOSwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgCisweDgwLCAweDAzLCAweDAyLCAweDAyLCAweDYyLCAweDc0LCAweDE1LCAweGY1LCAweDgyLCAweDc0LCAweGY5LCAweGY1LCAweDgzLCAweGUwLCAweDIwLCAweDA0LCAKKzB4ZjEsIDB4MjAsIDB4MDIsIDB4MDMsIDB4MzAsIDB4MDEsIDB4ZWIsIDB4NzQsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4NzQsIDB4ZjksIDB4ZjUsIDB4ODMsIDB4ZTAsIAorMHgxNCwgMHhmYywgMHhmMCwgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHg2NCwgMHgwNCwgMHg3MCwgMHgwZiwgMHhlYywgMHg3MCwgMHg2MiwgCisweDdlLCAweDAxLCAweDEyLCAweDAwLCAweGM5LCAweDdjLCAweDBhLCAweDdkLCAweGZhLCAweDAyLCAweDAyLCAweDMzLCAweDEyLCAweDAwLCAweGM5LCAweGVlLCAKKzB4NjQsIDB4MDQsIDB4NjAsIDB4MWQsIDB4ZWMsIDB4NzAsIDB4NGIsIDB4N2MsIDB4MGEsIDB4ZWQsIDB4MTQsIDB4ZmQsIDB4NzAsIDB4MTUsIDB4ZWUsIDB4NjQsIAorMHgwMiwgMHg2MCwgMHgwNywgMHg3ZSwgMHgwMiwgMHg3ZCwgMHgzMiwgMHgwMiwgMHgwMiwgMHgzMywgMHg3ZSwgMHgwMSwgMHg3ZCwgMHhmYSwgMHgwMiwgMHgwMiwgCisweDMzLCAweDdjLCAweDBhLCAweDc0LCAweDE4LCAweGY1LCAweDgyLCAweDc0LCAweGY5LCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweGEzLCAweGVkLCAweGYwLCAKKzB4YTMsIDB4ZWUsIDB4ZjAsIDB4MTQsIDB4NjAsIDB4MTgsIDB4MjAsIDB4ZTEsIDB4MGYsIDB4MjAsIDB4MDEsIDB4MDYsIDB4ZDIsIDB4YjEsIDB4YzIsIDB4YjAsIAorMHg4MCwgMHgxMCwgMHhjMiwgMHhiMSwgMHhkMiwgMHhiMCwgMHg4MCwgMHgwYSwgMHhjMiwgMHhiMSwgMHhjMiwgMHhiMCwgMHg4MCwgMHgwNCwgMHhkMiwgMHhiMCwgCisweGQyLCAweGIxLCAweDc4LCAweDE5LCAweDc5LCAweDA5LCAweDdhLCAweDA3LCAweGU3LCAweDcwLCAweDA0LCAweGE2LCAweDAwLCAweDgwLCAweDBiLCAweGU2LCAKKzB4NjAsIDB4MDgsIDB4MTYsIDB4ZTYsIDB4NzAsIDB4MDQsIDB4ZTcsIDB4NDQsIDB4ODAsIDB4ZjcsIDB4MDgsIDB4MDksIDB4ZGEsIDB4ZWEsIDB4ZTUsIDB4M2QsIAorMHg2MCwgMHgxMywgMHgxNCwgMHhmNSwgMHgzZCwgMHg3MCwgMHgwZSwgMHhlNSwgMHgzZSwgMHgyNCwgMHgwOCwgMHhmOCwgMHg3NiwgMHgwMCwgMHgxMiwgMHgxMSwgCisweDBmLCAweGQyLCAweDhjLCAweGQyLCAweDhkLCAweGQwLCAweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDA1LCAweGQwLCAweDA0LCAweGQwLCAweDAzLCAweGQwLCAKKzB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ZTAsIDB4MzIsIAorMHg5MCwgMHhmZiwgMHgwNCwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiNiwgMHhmMCwgMHg5MCwgMHhmZiwgMHgwNiwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmYSwgCisweGVjLCAweGZmLCAweGVhLCAweGZlLCAweGVmLCAweGMzLCAweDk0LCAweDA4LCAweGVlLCAweDk0LCAweDAxLCAweDUwLCAweDAyLCAweDgwLCAweDA0LCAweDdlLCAKKzB4MDEsIDB4N2YsIDB4MDgsIDB4OGUsIDB4M2IsIDB4OGYsIDB4M2MsIDB4OTAsIDB4ZmYsIDB4MDIsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4ZWMsIAorMHhmZiwgMHhlYSwgMHg5MCwgMHhmYSwgMHhiYSwgMHhmMCwgMHhlZiwgMHhhMywgMHhmMCwgMHgxMiwgMHgxYywgMHgzMCwgMHhlNCwgMHhmNSwgMHg0ZCwgMHhlNSwgCisweDRkLCAweGMzLCAweDk0LCAweDAyLCAweDUwLCAweDBmLCAweDEyLCAweDFjLCAweDExLCAweGU0LCAweDEyLCAweDFhLCAweDM4LCAweDA1LCAweDRkLCAweDA0LCAKKzB4MTIsIDB4MWMsIDB4MDIsIDB4ODAsIDB4ZWEsIDB4MTIsIDB4MWMsIDB4MzAsIDB4OTAsIDB4ZmYsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4NTQsIDB4NjAsIDB4MjQsIAorMHhjMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwOCwgMHhjNSwgMHgyNCwgMHg0MCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgCisweGUwLCAweGZlLCAweDU0LCAweDBmLCAweGY1LCAweDRkLCAweGVlLCAweDMwLCAweGU3LCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDBhLCAKKzB4OTAsIDB4ZmYsIDB4MDEsIDB4ZTAsIDB4MTIsIDB4MWIsIDB4NGMsIDB4MDMsIDB4NTYsIDB4MDAsIDB4MDQsIDB4MjksIDB4MDEsIDB4MDUsIDB4M2MsIDB4MDMsIAorMHgwNiwgMHgwMywgMHgwNSwgMHgwNiwgMHg0NSwgMHgwNiwgMHgwNywgMHhhNywgMHgwOCwgMHgwNywgMHhlZiwgMHgwOSwgMHgwOCwgMHg0YiwgMHgwYSwgMHgwOCwgCisweDhiLCAweDBiLCAweDAwLCAweDAwLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAKKzB4YmEsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NjQsIDB4MDIsIDB4NDUsIAorMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlZiwgMHg1NCwgMHgxZiwgMHgxNCwgMHg2MCwgMHgyYiwgMHgxNCwgMHg2MCwgMHg0NywgMHgyNCwgCisweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGVlLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweDExLCAweDc0LCAKKzB4MDEsIDB4MTIsIDB4MWEsIDB4MzgsIDB4NzgsIDB4NjcsIDB4ZTYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4MTIsIDB4MWMsIDB4MTEsIDB4NzQsIDB4MDIsIDB4MTIsIAorMHgxYSwgMHgzOCwgMHg3ZiwgMHgwMiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMSwgMHgwOSwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgCisweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGQzLCAweDk0LCAweDAxLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAKKzB4MjYsIDB4N2YsIDB4MDIsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTEsIDB4MGUsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZmYsIAorMHg2MCwgMHgwNywgMHg2NCwgMHg4MCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgwZiwgMHhiMiwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgCisweDI2LCAweGU1LCAweDRkLCAweDcwLCAweDE5LCAweDMwLCAweDBhLCAweDBiLCAweDkwLCAweGZmLCAweDgwLCAweDEyLCAweDFjLCAweDBlLCAweDEyLCAweDFhLCAKKzB4MzgsIDB4ODAsIDB4MjQsIDB4OTAsIDB4ZmYsIDB4ODIsIDB4MTIsIDB4MWMsIDB4MGUsIDB4MTIsIDB4MWEsIDB4MzgsIDB4ODAsIDB4MTksIDB4MTUsIDB4NGQsIAorMHgzMCwgMHgwYSwgMHgwYiwgMHgxMiwgMHgxYywgMHhhNSwgMHgxMiwgMHgxYywgMHgwYywgMHgxMiwgMHgxYSwgMHgzOCwgMHg4MCwgMHgwOSwgMHgxMiwgMHgxYywgCisweGIzLCAweDEyLCAweDFjLCAweDBjLCAweDEyLCAweDFhLCAweDM4LCAweDEyLCAweDFjLCAweDExLCAweDEyLCAweDE5LCAweGYyLCAweDYwLCAweDA1LCAweDc0LCAKKzB4MDEsIDB4MTIsIDB4MWEsIDB4MzgsIDB4N2YsIDB4MDIsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIAorMHgyNiwgMHhlNSwgMHgzYywgMHg0NSwgMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHhjOSwgMHgxNCwgMHg2MCwgMHgyZCwgCisweDE0LCAweDYwLCAweDU5LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweDcwLCAweDA0LCAKKzB4YTMsIDB4ZTAsIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIAorMHgwZiwgMHgyNiwgMHg3OCwgMHg2NywgMHhlNiwgMHg1NCwgMHhmZSwgMHhmNiwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgyMCwgCisweGUxLCAweDA2LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDMwLCAweGUwLCAweDA5LCAweDkwLCAweGZhLCAweGI2LCAKKzB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTEsIDB4MGMsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZDMsIAorMHg5NCwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgCisweDcwLCAweDAyLCAweGEzLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDBmLCAweGIyLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAKKzB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTAsIAorMHgwNywgMHhlNSwgMHg0ZCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHg0ZCwgMHg3MCwgMHgwZiwgMHg5MCwgMHhmZiwgMHg4MiwgMHhlMCwgCisweDU0LCAweGY3LCAweGYwLCAweDkwLCAweGZmLCAweDgwLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweDIyLCAweGU1LCAweDRkLCAweDI0LCAweGZlLCAweDYwLCAKKzB4MjAsIDB4MjQsIDB4ZmIsIDB4NjAsIDB4MzQsIDB4MjQsIDB4MDYsIDB4NzAsIDB4MzUsIDB4MzAsIDB4MGEsIDB4MGMsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4MzMsIAorMHhmZCwgMHg3ZiwgMHgwMywgMHgxMiwgMHgyZCwgMHhhOCwgMHg4MCwgMHgyNiwgMHhlNCwgMHhmZCwgMHg3ZiwgMHgwMywgMHgxMiwgMHgyZCwgMHhhOCwgMHg4MCwgCisweDFkLCAweDMwLCAweDBhLCAweDBjLCAweGEyLCAweDBhLCAweGU0LCAweDMzLCAweGZkLCAweDdmLCAweDA0LCAweDEyLCAweDJkLCAweGE4LCAweDgwLCAweDBlLCAKKzB4ZTQsIDB4ZmQsIDB4N2YsIDB4MDQsIDB4MTIsIDB4MmQsIDB4YTgsIDB4ODAsIDB4MDUsIDB4N2YsIDB4ODcsIDB4MTIsIDB4MzEsIDB4MzIsIDB4MTUsIDB4NGQsIAorMHgzMCwgMHgwYSwgMHgwYiwgMHgxMiwgMHgxYywgMHhhNSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHg4MCwgMHgwOSwgMHgxMiwgMHgxYywgCisweGIzLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAKKzB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NDUsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4YzksIAorMHgxNCwgMHg2MCwgMHgyZCwgMHgxNCwgMHg2MCwgMHg1NSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiYSwgCisweGUwLCAweDcwLCAweDA0LCAweGEzLCAweGUwLCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAKKzB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4NzgsIDB4NjcsIDB4ZTYsIDB4NDQsIDB4MDEsIDB4ZjYsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIAorMHhlNSwgMHgzNSwgMHgyMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlMCwgMHgwNywgCisweGU1LCAweDRkLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDMwLCAweGUxLCAweDBhLCAweGU1LCAweDRkLCAweGQzLCAweDk0LCAKKzB4MDEsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4NzAsIAorMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgzMSwgMHg4MiwgCisweDQwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGUxLCAweDA2LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAKKzB4ZTUsIDB4NGQsIDB4NzAsIDB4MDksIDB4MzAsIDB4MGEsIDB4MDMsIDB4MDIsIDB4MWQsIDB4NjQsIDB4MDIsIDB4MWQsIDB4MmYsIDB4ZTUsIDB4MzUsIDB4MjAsIAorMHhlMSwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxNSwgMHg0ZCwgMHgzMCwgMHgwYSwgMHgwYiwgMHgxMiwgMHgxYywgMHhhNSwgMHhmNSwgMHg4MywgMHhlMCwgCisweDQ0LCAweDA4LCAweGYwLCAweDgwLCAweDA5LCAweDEyLCAweDFjLCAweGIzLCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweGU0LCAweGZmLCAKKzB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NDUsIDB4M2IsIDB4NjAsIAorMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHhjOSwgCisweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGJiLCAKKzB4ZTAsIDB4OTAsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MzUsIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MzUsIDB4ZmUsIAorMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg0NSwgCisweDNiLCAweDcwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweGM5LCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAKKzB4YmEsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4ZWMsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4M2EsIDB4MTQsIDB4NjAsIDB4NzUsIDB4MjQsIDB4MDIsIAorMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlZCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHgzMCwgMHgxMiwgMHgxZCwgCisweDVkLCAweDdkLCAweDAzLCAweDEyLCAweDBmLCAweDZkLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDBmLCAweDJhLCAweDkwLCAweGZhLCAKKzB4YjMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4MTIsIDB4MWMsIDB4N2IsIDB4MTIsIDB4MGYsIDB4ODksIDB4NTAsIDB4MDIsIDB4ODAsIDB4MDQsIDB4YWUsIDB4M2IsIAorMHhhZiwgMHgzYywgMHgwMiwgMHgwZiwgMHhiYSwgMHgxMiwgMHgxYywgMHgzMCwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHgzMCwgMHhlNCwgMHgwZCwgMHgxMiwgCisweDFkLCAweDVkLCAweDdkLCAweDE0LCAweDEyLCAweDBmLCAweDZkLCAweDYwLCAweDEwLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFkLCAweDVkLCAweDdkLCAKKzB4MDQsIDB4MTIsIDB4MGYsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MGYsIDB4MmEsIDB4OTAsIDB4ZmEsIDB4YjMsIDB4ZTAsIAorMHhmZCwgMHhhMywgMHgxMiwgMHgxYywgMHg3YiwgMHgxMiwgMHgwZiwgMHg4OSwgMHg1MCwgMHgwMiwgMHg4MCwgMHgwNCwgMHhhZSwgMHgzYiwgMHhhZiwgMHgzYywgCisweDAyLCAweDBmLCAweGJhLCAweDEyLCAweDFkLCAweDVkLCAweDdkLCAweDA1LCAweDEyLCAweDBmLCAweGMxLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAKKzB4N2IsIDB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4YjMsIDB4MTIsIDB4MWMsIDB4NzgsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OTAsIDB4ZmEsIAorMHhiNCwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMywgMHgxMiwgMHgxYSwgMHg2YywgMHg5MCwgMHhmYSwgMHhiYiwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiMiwgMHhmMCwgCisweGU0LCAweGY1LCAweDRjLCAweDkwLCAweGZhLCAweGIyLCAweGUwLCAweGZmLCAweGU1LCAweDRjLCAweGMzLCAweDlmLCAweDUwLCAweDI0LCAweDEyLCAweDFjLCAKKzB4NzIsIDB4MTIsIDB4MGYsIDB4Y2MsIDB4ZmYsIDB4ZmQsIDB4OTAsIDB4ZmEsIDB4YjQsIDB4ZTQsIDB4OGQsIDB4ZjAsIDB4MTIsIDB4MWEsIDB4NmMsIDB4OTAsIAorMHhmYSwgMHhiMywgMHhlMCwgMHhjMywgMHg5ZiwgMHhmMCwgMHhkMywgMHg5NCwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgwNSwgMHg0YywgCisweDgwLCAweGQxLCAweDEyLCAweDFjLCAweDcyLCAweDEyLCAweDBmLCAweGNjLCAweDI0LCAweGZlLCAweGZmLCAweDkwLCAweGZhLCAweGIzLCAweGYwLCAweGZkLCAKKzB4YTMsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDIsIDB4MTIsIDB4MWEsIDB4NmMsIDB4N2EsIDB4ZjksIDB4NzksIDB4NmYsIDB4N2IsIDB4MDEsIDB4OGIsIDB4MzYsIAorMHg4YSwgMHgzNywgMHg4OSwgMHgzOCwgMHhlOSwgMHgyNCwgMHgwMiwgMHhmOSwgMHhlNCwgMHgzYSwgMHhmYSwgMHgxMiwgMHgxYywgMHg3OCwgMHgxMiwgMHgyNSwgCisweGQ3LCAweDhmLCAweDRjLCAweDA1LCAweDRjLCAweDA1LCAweDRjLCAweDEyLCAweDFjLCAweDExLCAweGU1LCAweDRjLCAweDEyLCAweDFhLCAweDM4LCAweDEyLCAKKzB4MWMsIDB4MTEsIDB4OTAsIDB4MDAsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTIsIDB4MWEsIDB4NGEsIDB4YWYsIDB4NGMsIDB4N2UsIDB4MDAsIDB4YzMsIDB4ZWYsIAorMHg5NSwgMHgzYywgMHhlZSwgMHg5NSwgMHgzYiwgMHg1MCwgMHgwMiwgMHg4MCwgMHgwNCwgMHhhZSwgMHgzYiwgMHhhZiwgMHgzYywgMHg4ZSwgMHgzOSwgMHg4ZiwgCisweDNhLCAweDAyLCAweDJjLCAweDA3LCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAKKzB4M2MsIDB4NjQsIDB4MDEsIDB4NDUsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4NjAsIDB4MDMsIAorMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgCisweDEyLCAweDFjLCAweGM5LCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGUwLCAweDA2LCAweDIwLCAweGUxLCAweDAzLCAKKzB4MDIsIDB4MGYsIDB4MjYsIDB4NzUsIDB4MzYsIDB4MDAsIDB4NzUsIDB4MzcsIDB4MDAsIDB4NzUsIDB4MzgsIDB4MzIsIDB4MDIsIDB4MGYsIDB4YTksIDB4ZTUsIAorMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg0NSwgMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgCisweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGQzLCAweDkwLCAweGZhLCAweGJiLCAweGUwLCAweDk0LCAweDAxLCAKKzB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4YzksIDB4NjAsIDB4MDMsIAorMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMCwgMHgwNiwgMHgyMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgCisweGJiLCAweGUwLCAweGY1LCAweDMyLCAweGU1LCAweDMyLCAweDcwLCAweDA4LCAweDQzLCAweDM1LCAweDAxLCAweDUzLCAweDM1LCAweGZkLCAweDgwLCAweDA2LCAKKzB4NTMsIDB4MzUsIDB4ZmUsIDB4NDMsIDB4MzUsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTcsIDB4MDMsIAorMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg2NCwgMHgwMSwgMHg0NSwgMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgCisweGI2LCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweDcwLCAweDAyLCAweGEzLCAweGUwLCAweDYwLCAKKzB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4YzksIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIAorMHgyMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg3ZiwgMHgwMSwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgCisweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDQ1LCAweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGQzLCAweDkwLCAweGZhLCAweGJiLCAKKzB4ZTAsIDB4OTQsIDB4MDAsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIAorMHhjOSwgMHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgCisweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweDkwLCAweGZmLCAweDAxLCAweDEyLCAweDFkLCAweDc0LCAweGVmLCAweDEyLCAweDFhLCAweDM4LCAweDkwLCAKKzB4ZmEsIDB4YjYsIDB4MTIsIDB4MWQsIDB4NzQsIDB4OTAsIDB4MDAsIDB4MDEsIDB4ZWYsIDB4MTIsIDB4MWEsIDB4NGEsIDB4OTAsIDB4MDAsIDB4MDIsIDB4ZTQsIAorMHgxMiwgMHgxYSwgMHg0YSwgMHg3NCwgMHgwMywgMHgxMiwgMHgxYywgMHgwMiwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHhmZiwgMHhhMywgMHhlMCwgMHg4NSwgCisweDM4LCAweDgyLCAweDg1LCAweDM3LCAweDgzLCAweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDkwLCAweGZmLCAweDAxLCAweGUwLCAweDEyLCAweDFiLCAKKzB4NGMsIDB4MDksIDB4NGEsIDB4MDIsIDB4MDksIDB4NmMsIDB4MDQsIDB4MDksIDB4OGUsIDB4MDUsIDB4MDksIDB4YmEsIDB4MDYsIDB4MDksIDB4ZDgsIDB4MDcsIAorMHgwOSwgMHhmNiwgMHgwOCwgMHgwYSwgMHgxNCwgMHgwOSwgMHgwYSwgMHgzMiwgMHgwYiwgMHgwYSwgMHhlNywgMHg4MCwgMHgwZCwgMHg2ZiwgMHg4MSwgMHgwZCwgCisweGEwLCAweDgyLCAweDBiLCAweDJlLCAweDgzLCAweDBiLCAweDc3LCAweDg0LCAweDBiLCAweDk2LCAweDg1LCAweDBiLCAweGRiLCAweDg2LCAweDBjLCAweDI2LCAKKzB4ODcsIDB4MGMsIDB4YjcsIDB4ODgsIDB4MGQsIDB4NDIsIDB4ODksIDB4MGEsIDB4NTAsIDB4OTIsIDB4MGEsIDB4NTAsIDB4OTMsIDB4MGUsIDB4NTMsIDB4YzAsIAorMHgwZSwgMHg3ZiwgMHhjMSwgMHgwZSwgMHg5MCwgMHhjMiwgMHgwMCwgMHgwMCwgMHgwZiwgMHgxNSwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlNywgMHgwNSwgMHg3ZiwgCisweDA1LCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFjLCAweGMxLCAweDYwLCAweDAzLCAweDA0LCAweDcwLCAweDA5LCAweGVmLCAweGZkLCAweDdjLCAweDAwLCAKKzB4N2YsIDB4MDcsIDB4MDIsIDB4MTEsIDB4MTYsIDB4ZTQsIDB4ZmQsIDB4N2YsIDB4MDcsIDB4MDIsIDB4MmYsIDB4MTgsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTcsIAorMHgwNSwgMHg3ZiwgMHgwNSwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgMHgwMywgMHgwNCwgMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgCisweDdjLCAweDAwLCAweDdmLCAweDBjLCAweDAyLCAweDExLCAweDE2LCAweGU0LCAweGZkLCAweDdmLCAweDA3LCAweDAyLCAweDJmLCAweDE4LCAweGU1LCAweDM1LCAKKzB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjksIDB4MTIsIDB4MWQsIDB4OTIsIDB4NTAsIDB4MDYsIDB4ZTUsIDB4M2MsIDB4NDUsIDB4M2IsIDB4NzAsIAorMHgwNSwgMHg3ZiwgMHgwMiwgMHgwMiwgMHgzMCwgMHhlYywgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHgyNCwgMHhmZSwgMHgyNCwgMHhmZCwgMHg1MCwgMHgwMiwgCisweDgwLCAweDAzLCAweDAyLCAweDMxLCAweDZmLCAweDdmLCAweDA3LCAweDAyLCAweDMwLCAweGVjLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAKKzB4MGYsIDB4MjksIDB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDQsIDB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MDgsIAorMHgwMiwgMHgxMSwgMHgxNiwgMHg3ZiwgMHgwNywgMHgwMiwgMHgzMCwgMHhlYywgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyOSwgCisweDEyLCAweDFjLCAweGMxLCAweDYwLCAweDAzLCAweDA0LCAweDcwLCAweDA5LCAweGVmLCAweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDA5LCAweDAyLCAweDExLCAKKzB4MTYsIDB4N2YsIDB4MDcsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjksIDB4MTIsIDB4MWMsIAorMHhjMSwgMHg2MCwgMHgwMywgMHgwNCwgMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwYSwgMHgwMiwgMHgxMSwgMHgxNiwgMHg3ZiwgCisweDA3LCAweDAyLCAweDMwLCAweGVjLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI5LCAweDEyLCAweDFjLCAweGMxLCAweDYwLCAKKzB4MDMsIDB4MDQsIDB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MGIsIDB4MDIsIDB4MTEsIDB4MTYsIDB4N2YsIDB4MDcsIDB4MDIsIAorMHgzMCwgMHhlYywgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyOSwgMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgMHgwMywgMHgwNCwgCisweDcwLCAweDA5LCAweGVmLCAweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDBlLCAweDAyLCAweDExLCAweDE2LCAweDdmLCAweDA3LCAweDAyLCAweDMwLCAweGVjLCAKKzB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4NTYsIDB4MTIsIDB4MWMsIDB4YzksIDB4NzAsIDB4NGEsIDB4OTAsIDB4ZmYsIDB4MDIsIDB4ZTAsIDB4ZjUsIDB4NGMsIAorMHhlNSwgMHg0YywgMHhiNCwgMHg4MiwgMHgwNSwgMHg3NSwgMHg0YywgMHg2MSwgMHg4MCwgMHgxMiwgMHhlNSwgMHg0YywgMHhiNCwgMHg4MywgMHgwNSwgMHg3NSwgCisweDRjLCAweDYyLCAweDgwLCAweDA4LCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweGYwLCAweDA0LCAweGY1LCAweDRjLCAweDEyLCAweDFiLCAweDcyLCAweDEyLCAKKzB4MWQsIDB4OGIsIDB4MTIsIDB4MjUsIDB4MzksIDB4MTIsIDB4MWMsIDB4ZDksIDB4MTIsIDB4MWEsIDB4MGIsIDB4NjAsIDB4MDUsIDB4MTIsIDB4MzEsIDB4YmQsIAorMHg4MCwgMHgwNiwgMHg4NSwgMHgzMywgMHgzOSwgMHg4NSwgMHgzNCwgMHgzYSwgMHg3NSwgMHgzNiwgMHgwMSwgMHg3NSwgMHgzNywgMHhmOSwgMHg3NSwgMHgzOCwgCisweDcyLCAweDAyLCAweDJjLCAweDA3LCAweGU0LCAweGZkLCAweDdmLCAweDA1LCAweDAyLCAweDJmLCAweDE4LCAweDEyLCAweDFjLCAweGM5LCAweDYwLCAweDA1LCAKKzB4N2YsIDB4MDUsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWQsIDB4OTIsIDB4NDAsIDB4MDUsIDB4N2YsIDB4MDMsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4OTAsIAorMHhmZiwgMHgwMiwgMHhlMCwgMHhmNSwgMHg0YywgMHhlNSwgMHg0YywgMHhiNCwgMHg4MiwgMHgwNSwgMHg3NSwgMHg0YywgMHg2MSwgMHg4MCwgMHgxMiwgMHhlNSwgCisweDRjLCAweGI0LCAweDgzLCAweDA1LCAweDc1LCAweDRjLCAweDYyLCAweDgwLCAweDA4LCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweGYwLCAweDA0LCAweGY1LCAKKzB4NGMsIDB4MTIsIDB4MWIsIDB4NzIsIDB4MDIsIDB4MzEsIDB4NmYsIDB4MTIsIDB4MWQsIDB4OWMsIDB4MTIsIDB4MmEsIDB4MDYsIDB4MTIsIDB4MWMsIDB4ODMsIAorMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiNywgMHhmMCwgMHg3OCwgMHg2OCwgMHgxMiwgMHgxYiwgCisweDI4LCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDFhLCAweDBiLCAweDMwLCAweGU3LCAweGYyLCAweDkwLCAweDAwLCAweDAyLCAweGU0LCAweDEyLCAweDFhLCAKKzB4NGEsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZmYsIDB4ZjAsIDB4NzgsIDB4N2MsIDB4ZTYsIDB4ZmMsIDB4MDgsIDB4ZTYsIDB4OGMsIAorMHg4MywgMHgxMiwgMHgxYywgMHg4YiwgMHhlZiwgMHhmMCwgMHgxMiwgMHgzMSwgMHhjNywgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHg5MCwgMHhmYSwgCisweGI2LCAweGUwLCAweDY0LCAweDAxLCAweDcwLCAweDFmLCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweGZmLCAweDdlLCAweDAwLCAweDcwLCAweDA2LCAweGEzLCAKKzB4ZTAsIDB4ZjUsIDB4OTAsIDB4ODAsIDB4MmQsIDB4YzIsIDB4YWYsIDB4ZWYsIDB4ZjQsIDB4NTIsIDB4OTAsIDB4OTAsIDB4ZmEsIDB4YmIsIDB4ZTAsIDB4NDIsIAorMHg5MCwgMHhkMiwgMHhhZiwgMHg4MCwgMHgxZCwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHhmZiwgMHg3ZSwgMHgwMCwgMHg3MCwgMHgwNiwgMHhhMywgMHhlMCwgCisweGY1LCAweGIwLCAweDgwLCAweDBlLCAweGMyLCAweGFmLCAweGVmLCAweGY0LCAweDUyLCAweGIwLCAweDkwLCAweGZhLCAweGJiLCAweGUwLCAweDQyLCAweGIwLCAKKzB4ZDIsIDB4YWYsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4MzAsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4YjQsIDB4MDEsIAorMHgwYSwgMHgxMiwgMHgxYywgMHgxMSwgMHhlNSwgMHg5MCwgMHgxMiwgMHgxYSwgMHgzOCwgMHg4MCwgMHgwOCwgMHgxMiwgMHgxYywgMHgxMSwgMHhlNSwgMHhiMCwgCisweDEyLCAweDFhLCAweDM4LCAweDAyLCAweDBmLCAweGE5LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGZmLCAweDI0LCAweDEyLCAweDEyLCAweDFjLCAweDQxLCAKKzB4MjAsIDB4ZTEsIDB4MzMsIDB4MTIsIDB4MWMsIDB4ZDAsIDB4ZWYsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4MTgsIDB4MDQsIDB4NzAsIDB4MjgsIDB4OTAsIDB4ZmEsIAorMHhiNywgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHg4MCwgMHgxOSwgMHgxMiwgMHgxZCwgMHhhNiwgCisweGYwLCAweDgwLCAweDEzLCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAKKzB4ODAsIDB4MDQsIDB4MTIsIDB4MWQsIDB4YWQsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZmYsIAorMHgyNCwgMHgxMiwgMHgxMiwgMHgxYywgMHg0MSwgMHgyMCwgMHhlMSwgMHgzOSwgMHgxMiwgMHgxYywgMHhkMCwgMHhlZiwgMHgyNCwgMHhmYywgMHg2MCwgMHgxYiwgCisweDA0LCAweDcwLCAweDJlLCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAKKzB4ODAsIDB4MWYsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4ODAsIDB4MTYsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIAorMHgwOSwgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg1NCwgMHhkZiwgCisweGYwLCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFjLCAweGQwLCAweDEyLCAweDFjLCAweGMxLCAweDYwLCAweDRkLCAweDA0LCAweDYwLCAKKzB4MDMsIDB4MDIsIDB4MGMsIDB4YjIsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4MTIsIDB4MWMsIDB4M2EsIAorMHgzMCwgMHhlMSwgMHg2ZiwgMHgxMiwgMHgxZCwgMHg3YywgMHgwMiwgMHgwYywgMHhiMiwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg1NCwgMHhmYiwgMHgxMiwgCisweDFjLCAweDNkLCAweGZlLCAweDMwLCAweGUxLCAweDVjLCAweDMwLCAweGUyLCAweDExLCAweDMwLCAweGI0LCAweDA1LCAweDEyLCAweDFkLCAweDdjLCAweDgwLCAKKzB4NTEsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ODAsIDB4NDgsIDB4MzAsIDB4OTUsIDB4MDUsIDB4MTIsIDB4MWQsIDB4N2MsIAorMHg4MCwgMHg0MCwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg4MCwgMHgzNywgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgCisweDEyLCAweDkwLCAweGZmLCAweGI0LCAweDEyLCAweDFjLCAweDNhLCAweDMwLCAweGUxLCAweDI4LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAKKzB4ZjAsIDB4ODAsIDB4MWYsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4MTIsIDB4MWMsIDB4M2QsIDB4MzAsIDB4ZTEsIDB4MTMsIDB4MzAsIAorMHg5MywgMHgwOSwgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg1NCwgCisweGZkLCAweGYwLCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFjLCAweGQwLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDI0LCAweGZjLCAKKzB4NjAsIDB4NDAsIDB4MDQsIDB4NzAsIDB4NzgsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIDB4MWQsIDB4OTAsIDB4ZmYsIDB4YTIsIDB4ZTAsIDB4NDQsIAorMHg0MCwgMHhmMCwgMHhhMywgMHhlMCwgMHhmZiwgMHgzMCwgMHhlNywgMHg2NSwgMHhkMiwgMHgwMywgMHhhMywgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHg5MCwgCisweGZmLCAweGEzLCAweGVmLCAweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDU1LCAweDMwLCAweDAzLCAweDBlLCAweDkwLCAweGZmLCAweGEzLCAweGUwLCAweDQ0LCAKKzB4ODAsIDB4ZjAsIDB4YzIsIDB4MDMsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIAorMHg4MCwgMHgzYiwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgMHgxZCwgMHg5MCwgMHhmZiwgMHhiMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHhhMywgCisweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDI4LCAweGQyLCAweDA0LCAweGEzLCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDkwLCAweGZmLCAweGIzLCAweGVmLCAKKzB4NTQsIDB4N2YsIDB4ZjAsIDB4ODAsIDB4MTgsIDB4MzAsIDB4MDQsIDB4MGUsIDB4OTAsIDB4ZmYsIDB4YjMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4YzIsIAorMHgwNCwgMHhhMywgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHhmZiwgMHhiMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHhlNCwgMHhmZiwgMHgwMiwgCisweDMwLCAweGVjLCAweDEyLCAweDFjLCAweDMwLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDI0LCAweGZjLCAweDYwLCAweDBmLCAweDA0LCAweDcwLCAweDE2LCAKKzB4OTAsIDB4ZmYsIDB4YTYsIDB4ZTAsIDB4MTIsIDB4MWMsIDB4MTEsIDB4MTIsIDB4MWEsIDB4MzgsIDB4ODAsIDB4MGEsIDB4OTAsIDB4ZmYsIDB4YjYsIDB4ZTAsIAorMHgxMiwgMHgxYywgMHgxMSwgMHgxMiwgMHgxYSwgMHgzOCwgMHg3NSwgMHgzOSwgMHgwMCwgMHg3NSwgMHgzYSwgMHgwMSwgMHgwMiwgMHgyYywgMHgwNywgMHhlNCwgCisweGZmLCAweDEyLCAweDMwLCAweGVjLCAweDEyLCAweDFkLCAweDM3LCAweDdmLCAweDAzLCAweDEyLCAweDEyLCAweDE5LCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAKKzB4MzAsIDB4ZTQsIDB4MDgsIDB4OTAsIDB4ZmYsIDB4OTMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4ZTAsIDB4NTQsIAorMHg3ZiwgMHhmMCwgMHg3ZiwgMHhmZiwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgzMCwgMHgxNiwgMHhjMiwgMHg5MCwgMHhjMiwgMHhhZiwgMHgwMCwgMHg4MCwgMHhmZCwgCisweGU0LCAweGY1LCAweDRlLCAweGY1LCAweDRmLCAweDkwLCAweGZhLCAweGJjLCAweDc0LCAweDNlLCAweGYwLCAweGEzLCAweGU0LCAweGYwLCAweDkwLCAweGZhLCAKKzB4YjQsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZmYsIDB4YzMsIDB4NzQsIDB4NDAsIDB4OWYsIDB4OTAsIDB4ZmEsIAorMHhiOSwgMHhmMCwgMHhkMywgMHg5NCwgMHgwMCwgMHhlNCwgMHg5NCwgMHgzZSwgMHg0MCwgMHgwOCwgMHg5MCwgMHhmYSwgMHhiZCwgMHhlMCwgMHg5MCwgMHhmYSwgCisweGI5LCAweGYwLCAweDEyLCAweDBmLCAweDUwLCAweGU1LCAweDMxLCAweDQ1LCAweDMwLCAweDcwLCAweDczLCAweDEyLCAweDFjLCAweDRhLCAweDkwLCAweGZhLCAKKzB4YmMsIDB4MTIsIDB4MWQsIDB4NTYsIDB4NjAsIDB4MjcsIDB4ZDMsIDB4ZWYsIDB4OTQsIDB4NDAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDgsIDB4OTAsIAorMHhmYSwgMHhiOSwgMHg3NCwgMHg0MCwgMHhmMCwgMHg4MCwgMHgwOCwgMHg5MCwgMHhmYSwgMHhiZCwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiOSwgMHhmMCwgMHgxMiwgCisweDBmLCAweDUwLCAweGU1LCAweDMxLCAweDQ1LCAweDMwLCAweDcwLCAweDQ2LCAweDEyLCAweDFjLCAweDRhLCAweDgwLCAweGQxLCAweDc1LCAweDRjLCAweDAyLCAKKzB4OTAsIDB4ZmEsIDB4YmMsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4YjQsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MGYsIAorMHhmMCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHg0YywgMHg5MCwgMHhmYSwgMHhiZCwgMHhlMCwgMHhmNSwgMHg0YSwgMHg3ZCwgMHgwZiwgMHg3YywgCisweDAwLCAweDEyLCAweDI4LCAweDlmLCAweDc1LCAweDMwLCAweDAwLCAweDhmLCAweDMxLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDRjLCAweGU0LCAKKzB4ZjUsIDB4MmQsIDB4ZjUsIDB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4ZTQsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4YWYsIDB4MzEsIAorMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHhkMCwgMHgzMCwgMHhlNywgMHgxMCwgMHhlMCwgMHg1NCwgMHgwZiwgMHg5MCwgMHhmOSwgMHg2NCwgMHhmMCwgCisweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDE1LCAweGMyLCAweDk1LCAweDgwLCAweDExLCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDU0LCAweDBmLCAweDkwLCAKKzB4ZjksIDB4NjMsIDB4ZjAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDIsIDB4YzIsIDB4OTQsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIAorMHgxZCwgMHg5YywgMHhiZiwgMHgwMSwgMHgwNCwgMHhkMiwgMHg5MywgMHg4MCwgMHgwMiwgMHhjMiwgMHg5MywgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgCisweDEyLCAweDFjLCAweGQwLCAweDU0LCAweDAzLCAweDE0LCAweDYwLCAweDBhLCAweDE0LCAweDYwLCAweDBmLCAweDE0LCAweDYwLCAweDA4LCAweDI0LCAweDAzLCAKKzB4NzAsIDB4MmIsIDB4ZDIsIDB4OTEsIDB4ODAsIDB4MjcsIDB4YzIsIDB4OTEsIDB4ODAsIDB4MjMsIDB4MTIsIDB4MWQsIDB4YTYsIDB4MTIsIDB4MGYsIDB4NzgsIAorMHg2MCwgMHgwNCwgMHhkMiwgMHg5MSwgMHg4MCwgMHgxNywgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg0NCwgMHgxMCwgMHgxMiwgMHgwZiwgMHg3OCwgMHhmZiwgCisweGJmLCAweGEwLCAweDA0LCAweGMyLCAweDkxLCAweDgwLCAweDAyLCAweGQyLCAweDkxLCAweDEyLCAweDFkLCAweGE2LCAweGYwLCAweDkwLCAweGZhLCAweGI3LCAKKzB4ZTAsIDB4NTQsIDB4MGMsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4MTQsIDB4NjAsIDB4MGEsIDB4MTQsIDB4NjAsIDB4MGYsIDB4MTQsIDB4NjAsIAorMHgwOCwgMHgyNCwgMHgwMywgMHg3MCwgMHgyYiwgMHhkMiwgMHg5MiwgMHg4MCwgMHgyNywgMHhjMiwgMHg5MiwgMHg4MCwgMHgyMywgMHgxMiwgMHgxZCwgMHhhZCwgCisweDEyLCAweDBmLCAweDk4LCAweDYwLCAweDA0LCAweGQyLCAweDkyLCAweDgwLCAweDE3LCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDQ0LCAweDEwLCAweDEyLCAKKzB4MGYsIDB4OTgsIDB4ZmYsIDB4YmYsIDB4YTAsIDB4MDQsIDB4YzIsIDB4OTIsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4OTIsIDB4MTIsIDB4MWQsIDB4YWQsIDB4ZjAsIAorMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwNywgMHhlNCwgMHhmZCwgMHg3ZiwgMHgwNSwgMHgwMiwgMHgyZiwgCisweDE4LCAweDdmLCAweDA1LCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDMxLCAweGJkLCAweDIyLCAweDdiLCAweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGIzLCAKKzB4OTAsIDB4ZmEsIDB4YjQsIDB4ZTAsIDB4ZjUsIDB4MmQsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OTAsIAorMHhmYSwgMHhiNCwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMywgMHgxMiwgMHgxYSwgMHg2YywgMHhhYiwgMHgzNiwgMHhhYSwgMHgzNywgMHhhOSwgMHgzOCwgMHgyMiwgCisweGFhLCAweDRlLCAweGE5LCAweDRmLCAweDdiLCAweGZmLCAweDkwLCAweGZhLCAweGI0LCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweDkwLCAweGZhLCAKKzB4YjksIDB4ZTAsIDB4ZjUsIDB4NGEsIDB4MTIsIDB4MjgsIDB4OWYsIDB4NzUsIDB4MzAsIDB4MDAsIDB4OGYsIDB4MzEsIDB4MjIsIDB4MTIsIDB4MjIsIDB4YTAsIAorMHg3ZSwgMHgwMCwgMHg4ZSwgMHgzMCwgMHg4ZiwgMHgzMSwgMHhlZiwgMHgyMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHgxOSwgMHg5MCwgMHhmZiwgCisweGE2LCAweGUwLCAweDkwLCAweGZhLCAweGI4LCAweGYwLCAweDU0LCAweGEwLCAweDIyLCAweDEyLCAweDI1LCAweGQ3LCAweDhmLCAweDRjLCAweDdlLCAweDAwLCAKKzB4YzMsIDB4ZWYsIDB4OTUsIDB4M2MsIDB4ZWUsIDB4OTUsIDB4M2IsIDB4MjIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4MTksIDB4OTAsIDB4ZmYsIAorMHhiNiwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiOCwgMHhmMCwgMHg1NCwgMHhhMCwgMHgyMiwgMHg3NSwgMHgzOSwgMHgwMCwgMHg3NSwgMHgzYSwgMHgwMSwgMHgwMiwgCisweDJjLCAweDA3LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGZmLCAweDAyLCAweDMxLCAweDgyLCAweDhlLCAweDM5LCAweDhmLCAweDNhLCAweDAyLCAweDJjLCAKKzB4MDcsIDB4MTIsIDB4MjIsIDB4YTAsIDB4N2UsIDB4MDAsIDB4OGUsIDB4MzAsIDB4OGYsIDB4MzEsIDB4ZWYsIDB4MjIsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIAorMHhkNywgMHg5MCwgMHhmYSwgMHhiMSwgMHhlMCwgMHgyMiwgMHhlZiwgMHg5MCwgMHhmOCwgMHgwNCwgMHhmMCwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgCisweGVlLCAweDYwLCAweDBhLCAweGMwLCAweDA1LCAweDdkLCAweDdmLCAweGRkLCAweGZlLCAweGRlLCAweGZhLCAweGQwLCAweDA1LCAweGVmLCAweGMzLCAweDk0LCAKKzB4MTUsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4MTMsIDB4NzAsIDB4MDMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4ZmYsIDB4ZDUsIDB4MDcsIDB4ZmQsIAorMHhkMCwgMHhhOCwgMHgyMiwgMHhjMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhjMCwgMHgwMiwgMHhjMCwgMHgwNCwgMHhjMCwgMHgwNSwgMHhlNSwgMHgzZSwgMHgyNCwgCisweDA4LCAweGY4LCAweDg2LCAweDA1LCAweDUzLCAweDA1LCAweDdmLCAweDdjLCAweGZmLCAweDEyLCAweDEwLCAweDc4LCAweDdmLCAweDAwLCAweDdlLCAweDAwLCAKKzB4ZTUsIDB4NDMsIDB4NjAsIDB4NDYsIDB4ZmMsIDB4OTAsIDB4ZjksIDB4MWIsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4NmQsIDB4NzAsIDB4MGYsIDB4YzAsIDB4ODMsIAorMHhjMCwgMHg4MiwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhhMywgMHgxNSwgMHg0MywgMHg4MCwgMHgwNywgMHhhMywgMHhhMywgMHhhMywgCisweGRjLCAweGU2LCAweDgwLCAweDI2LCAweGRjLCAweDA2LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweDgwLCAweDFlLCAweGUwLCAweGY4LCAweGEzLCAweGUwLCAKKzB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZTgsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4ZjAsIDB4YTMsIDB4ZWEsIDB4ZjAsIAorMHhhMywgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkYSwgMHgxMiwgMHgxMSwgMHgwZiwgMHhkMCwgMHgwNSwgMHhkMCwgCisweDA0LCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweDIyLCAweDg1LCAweGE4LCAweDQ0LCAweDc1LCAweGE4LCAweDg4LCAweGVjLCAweDcwLCAKKzB4MDIsIDB4N2MsIDB4M2YsIDB4OGMsIDB4M2QsIDB4MjIsIDB4ZTUsIDB4M2UsIDB4MjQsIDB4MDgsIDB4ZjgsIDB4NzYsIDB4MDAsIDB4MTIsIDB4MTEsIDB4NjYsIAorMHg4MCwgMHhmYiwgMHhjMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhjMCwgMHgwMiwgMHhjMCwgMHgwNCwgMHhjMCwgMHgwNiwgMHg3YywgMHhmZiwgMHgxMiwgMHgxMCwgCisweDc4LCAweGU1LCAweDQzLCAweDYwLCAweDQyLCAweGZlLCAweDkwLCAweGY5LCAweDFiLCAweGUwLCAweDU0LCAweDdmLCAweDZmLCAweDcwLCAweDBiLCAweGMwLCAKKzB4ODMsIDB4YzAsIDB4ODIsIDB4YTMsIDB4YTMsIDB4YTMsIDB4MTUsIDB4NDMsIDB4ODAsIDB4MDcsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZGUsIDB4ZWEsIDB4ODAsIAorMHgyNiwgMHhkZSwgMHgwNiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHg4MCwgMHhkOCwgMHhlMCwgMHhmOCwgMHhhMywgMHhlMCwgMHhmOSwgMHhhMywgMHhlMCwgCisweGZhLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGU4LCAweGYwLCAweGEzLCAweGU5LCAweGYwLCAweGEzLCAweGVhLCAweGYwLCAweGEzLCAweGMwLCAweDgzLCAKKzB4YzAsIDB4ODIsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGEsIDB4NzgsIDB4MDgsIDB4MDgsIDB4NzksIDB4MTgsIDB4MDksIDB4N2MsIDB4MDEsIDB4ZTYsIAorMHg1NCwgMHg3ZiwgMHg2ZiwgMHg3MCwgMHgwNiwgMHg3NiwgMHgwMCwgMHg3NywgMHgwMCwgMHg4MCwgMHgwNiwgMHgwOCwgMHgwOSwgMHgwYywgMHhiYywgMHgwOCwgCisweGVlLCAweDEyLCAweDExLCAweDBmLCAweGQwLCAweDA2LCAweGQwLCAweDA0LCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweDIyLCAweDc1LCAKKzB4M2QsIDB4MDAsIDB4ODUsIDB4NDQsIDB4YTgsIDB4MjIsIDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzMsIDB4ZTUsIDB4NDMsIDB4MjQsIAorMHhlOCwgMHg1MCwgMHgwNSwgMHgxMiwgMHgxMSwgMHg2NiwgMHg4MCwgMHhmNCwgMHhlZiwgMHg2MCwgMHgzMSwgMHg5MCwgMHgzMCwgMHg1NCwgMHhlNCwgMHg5MywgCisweGMzLCAweDlmLCAweDQwLCAweDJmLCAweGMwLCAweDA0LCAweDdjLCAweGZmLCAweDEyLCAweDEwLCAweDc4LCAweGQwLCAweDA0LCAweDQzLCAweDA3LCAweDgwLCAKKzB4ZTUsIDB4NDMsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4YTQsIDB4MjQsIDB4MWIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZjksIDB4ZjUsIDB4ODMsIDB4ZWYsIAorMHhmMCwgMHhlYywgMHhhMywgMHhmMCwgMHhlZCwgMHhhMywgMHhmMCwgMHgwNSwgMHg0MywgMHgxMiwgMHgxMSwgMHgwZiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgCisweGQwLCAweGYwLCAweDIyLCAweDAyLCAweDExLCAweDk0LCAweGMwLCAweDA0LCAweDdjLCAweDIwLCAweGQyLCAweDhjLCAweGQyLCAweDhkLCAweGQ1LCAweDA0LCAKKzB4ZmQsIDB4ZDAsIDB4MDQsIDB4MjIsIDB4NzUsIDB4YTgsIDB4MDAsIDB4NzUsIDB4ODgsIDB4MDAsIDB4NzUsIDB4YjgsIDB4MDAsIDB4NzUsIDB4ZjAsIDB4MDAsIAorMHg3NSwgMHhkMCwgMHgwMCwgMHhlNCwgMHhmOCwgMHg5MCwgMHhmOCwgMHgwNCwgMHhmMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwOCwgMHhiOCwgMHgwMCwgCisweGZiLCAweDAyLCAweDAwLCAweDAwLCAweGMyLCAweGFmLCAweGU0LCAweDkwLCAweGZmLCAweDQ4LCAweGYwLCAweDkwLCAweGZmLCAweDUwLCAweGYwLCAweDkwLCAKKzB4ZmYsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ODAsIDB4ZjAsIDB4YTMsIDB4YTMsIDB4ZjAsIDB4ZDIsIDB4YjEsIAorMHhjMiwgMHhiMCwgMHg3ZSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxMiwgMHgwZiwgMHhkYywgMHg3ZSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxMiwgMHgwZiwgMHhkYywgCisweDdlLCAweGZmLCAweDdmLCAweGZmLCAweDEyLCAweDBmLCAweGRjLCAweGQyLCAweGIwLCAweGQyLCAweGIxLCAweDdlLCAweGZmLCAweDdmLCAweGZmLCAweDEyLCAKKzB4MGYsIDB4ZGMsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4ZGMsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4ZGMsIAorMHg4MCwgMHhjYywgMHhjMywgMHhlZSwgMHg5NCwgMHgwMiwgMHg1MCwgMHgwNCwgMHg3ZSwgMHgwMywgMHg3ZiwgMHhlOCwgMHhlZiwgMHhmNCwgMHhmZiwgMHhlZSwgCisweGY0LCAweGZlLCAweDBmLCAweGJmLCAweDAwLCAweDAxLCAweDBlLCAweDhmLCAweDQyLCAweDhlLCAweDQxLCAweDIyLCAweGMzLCAweGVmLCAweDk0LCAweGJjLCAKKzB4ZWUsIDB4OTQsIDB4MDIsIDB4NTAsIDB4MDQsIDB4N2UsIDB4MDcsIDB4N2YsIDB4ZDAsIDB4ZWYsIDB4ZjQsIDB4ZmYsIDB4ZWUsIDB4ZjQsIDB4ZmUsIDB4MGYsIAorMHhiZiwgMHgwMCwgMHgwMSwgMHgwZSwgMHg4ZiwgMHg0MCwgMHg4ZSwgMHgzZiwgMHgyMiwgMHhlZiwgMHg3MCwgMHgwMSwgMHgyMiwgMHhjMCwgMHgwMCwgMHhjMCwgCisweGE4LCAweGMyLCAweGFmLCAweGU1LCAweDNlLCAweDI0LCAweDE4LCAweGY4LCAweGE2LCAweDA3LCAweGU1LCAweDNlLCAweDI0LCAweDA4LCAweGY4LCAweGM2LCAKKzB4NTQsIDB4N2YsIDB4ZjYsIDB4ZDAsIDB4YTgsIDB4ZTYsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MjIsIDB4MTIsIDB4MTEsIDB4NjYsIDB4ODAsIAorMHhmNCwgMHhjMCwgMHgwMCwgMHg3ZiwgMHgwMSwgMHhlZiwgMHgyNCwgMHgwOCwgMHhmOCwgMHhlNiwgMHg2MCwgMHgwOSwgMHgwZiwgMHhiZiwgMHgwOCwgMHhmNSwgCisweDEyLCAweDExLCAweDY2LCAweDgwLCAweGVlLCAweGQwLCAweDAwLCAweDIyLCAweGMwLCAweGYwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDAwLCAKKzB4YzAsIDB4MDYsIDB4YzAsIDB4MDQsIDB4ZWQsIDB4MjQsIDB4MTAsIDB4ZjgsIDB4NzYsIDB4OWEsIDB4ZWQsIDB4NzUsIDB4ZjAsIDB4MjEsIDB4YTQsIDB4MjQsIAorMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmOCwgMHhmNSwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhhMywgMHhhMywgMHhlNCwgMHg3OCwgCisweDBkLCAweGYwLCAweGEzLCAweGQ4LCAweGZjLCAweGVmLCAweDU0LCAweDdmLCAweDc1LCAweGYwLCAweDAyLCAweGE0LCAweDI0LCAweDM2LCAweGY1LCAweDgyLCAKKzB4ZTUsIDB4ZjAsIDB4MzQsIDB4MzAsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4ZmUsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZmMsIDB4ZDAsIDB4ODMsIDB4ZDAsIAorMHg4MiwgMHhlYywgMHhmMCwgMHhhMywgMHhlZSwgMHhmMCwgMHhlZCwgMHgyNCwgMHgwOCwgMHhmOCwgMHhlZiwgMHg0NCwgMHg4MCwgMHhmNiwgMHhkMCwgMHgwNCwgCisweGQwLCAweDA2LCAweGQwLCAweDAwLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweGYwLCAweDIyLCAweDc1LCAweDNlLCAweDAwLCAweDc1LCAweDQzLCAKKzB4MDAsIDB4N2EsIDB4MDgsIDB4NzksIDB4MTgsIDB4NzgsIDB4MDgsIDB4NzYsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDgsIDB4MDksIDB4ZGEsIDB4ZjgsIDB4OTAsIAorMHhmOCwgMHgwNCwgMHhlMCwgMHhmYywgMHg5MCwgMHgzMCwgMHg1NCwgMHhlNCwgMHg5MywgMHhjMywgMHg5YywgMHg1MCwgMHgwNSwgMHhlNCwgMHg5MCwgMHhmOCwgCisweDA0LCAweGYwLCAweDc4LCAweDA4LCAweDc0LCAweDgwLCAweDQ0LCAweDdmLCAweGY2LCAweDc0LCAweDAxLCAweDQ0LCAweDEwLCAweGY1LCAweDg5LCAweDc1LCAKKzB4YjgsIDB4MDAsIDB4ZDIsIDB4YWIsIDB4ZDIsIDB4YTksIDB4MjIsIDB4NzUsIDB4ODEsIDB4OGIsIDB4ZDIsIDB4OGUsIDB4ZDIsIDB4OGMsIDB4ZDIsIDB4YWYsIAorMHhlNSwgMHg0MywgMHg2MCwgMHgzNiwgMHhmZiwgMHg5MCwgMHhmOSwgMHgxYiwgMHhlMCwgMHg1NCwgMHg4MCwgMHg2MCwgMHgyOCwgMHg3OCwgMHgwOCwgMHg3OSwgCisweDA4LCAweGUwLCAweDU0LCAweDdmLCAweGZhLCAweDdiLCAweDAwLCAweGU2LCAweDU0LCAweDdmLCAweGI1LCAweDAyLCAweDAyLCAweDdiLCAweGZmLCAweDA4LCAKKzB4ZDksIDB4ZjUsIDB4ZWIsIDB4NzAsIDB4MTAsIDB4ZWEsIDB4ZjAsIDB4YzAsIDB4MDcsIDB4MTIsIDB4MTIsIDB4NDEsIDB4YWQsIDB4MDcsIDB4YWYsIDB4MDIsIAorMHgxMiwgMHgxMiwgMHg1OCwgMHhkMCwgMHgwNywgMHhhMywgMHhhMywgMHhhMywgMHhkZiwgMHhjZSwgMHgxMiwgMHgxMSwgMHg2NiwgMHg4MCwgMHhjMSwgMHg4ZiwgCisweDI0LCAweDEyLCAweDJhLCAweDA2LCAweDc4LCAweDgwLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGZmLCAweDhlLCAweDgzLCAweDI0LCAweDA4LCAweDEyLCAKKzB4MjEsIDB4ZjMsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MjIsIDB4OGEsIDB4OGEsIDB4ODMsIDB4MjQsIDB4MGEsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZWQsIDB4ZjAsIAorMHgxMiwgMHgyMiwgMHg1NiwgMHgyNCwgMHgwNywgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHhmZiwgMHgxMiwgMHgyMiwgMHg5OSwgMHgyNCwgMHgwOSwgMHgxMiwgCisweDIxLCAweGYzLCAweGVmLCAweGYwLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDMwLCAweGU0LCAweDIwLCAweDA4LCAweDEyLCAweDIyLCAweDA5LCAweGMwLCAKKzB4ODMsIDB4YzAsIDB4ODIsIDB4YTMsIDB4ZTAsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4MDUsIDB4ODIsIDB4ZDUsIDB4ODIsIDB4MDIsIDB4MTUsIDB4ODMsIDB4MTUsIAorMHg4MiwgMHhlMCwgMHgzMywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg3OCwgMHg4MCwgMHgxMiwgMHgyMiwgMHgwOSwgCisweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGVjLCAweGZmLCAweDEyLCAweDIyLCAweDhhLCAweDhhLCAweDgzLCAweDI0LCAweDA4LCAweDEyLCAweDIxLCAKKzB4ZjMsIDB4ZWYsIDB4ZjAsIDB4ZWQsIDB4MTIsIDB4MjIsIDB4OTksIDB4MjQsIDB4MDcsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZWQsIDB4ZjAsIDB4MTIsIDB4MjEsIAorMHhmYiwgMHhlMCwgMHhmZiwgMHgzMCwgMHhlNywgMHgxOSwgMHgxMiwgMHgyMiwgMHg2ZSwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg2MCwgMHgwOSwgMHgxMiwgCisweDIxLCAweGZiLCAweGVmLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDA3LCAweDEyLCAweDIxLCAweGZiLCAweGVmLCAweDU0LCAweGZkLCAweGYwLCAweDc4LCAKKzB4N2UsIDB4MTIsIDB4MjIsIDB4MDksIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4NTMsIDB4MDcsIDB4YzcsIDB4MDgsIDB4ZTYsIDB4ZmMsIDB4MDgsIDB4ZTYsIAorMHhmZCwgMHgxMiwgMHgyMiwgMHg0MywgMHhhMywgMHhlMCwgMHgzMCwgMHhlMywgMHgxMiwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgCisweDA1LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDkwLCAweDMxLCAweDk0LCAweDkzLCAweDQyLCAweDA3LCAweDUzLCAweDA3LCAweGZiLCAweDc4LCAweDgwLCAKKzB4ZTYsIDB4ZmMsIDB4MDgsIDB4ZTYsIDB4OGMsIDB4ODMsIDB4MjQsIDB4MDYsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4NDMsIDB4MDcsIAorMHgwNCwgMHg1MywgMHgwNywgMHhmYywgMHg3OCwgMHg4MCwgMHgxMiwgMHgyMiwgMHg3YSwgMHgyNCwgMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg0MiwgCisweDA3LCAweDQzLCAweDA3LCAweDgwLCAweDEyLCAweDIyLCAweDhhLCAweGY1LCAweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGEzLCAweGVmLCAweGYwLCAweDEyLCAKKzB4MjIsIDB4OTksIDB4MjQsIDB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4ZmYsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIAorMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHgzMCwgMHhlMSwgMHgwNSwgMHg1MywgMHgwNywgMHhkZiwgMHg4MCwgMHgwMywgMHg0MywgMHgwNywgMHgyMCwgMHhlYywgCisweDMwLCAweGU0LCAweDA1LCAweDUzLCAweDA3LCAweGVmLCAweDgwLCAweDAzLCAweDQzLCAweDA3LCAweDEwLCAweDEyLCAweDIxLCAweGZiLCAweGUwLCAweGZlLCAKKzB4NTQsIDB4MDMsIDB4NjAsIDB4NzMsIDB4NTMsIDB4MDcsIDB4ZGYsIDB4ZWUsIDB4MzAsIDB4ZTEsIDB4NjksIDB4NzgsIDB4ODAsIDB4MTIsIDB4MjIsIDB4NmYsIAorMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHgxMiwgMHgxYiwgMHg0YywgMHgxNCwgMHhhNiwgMHgwMCwgMHgxNCwgMHhkYSwgMHgwMSwgMHgxNCwgMHhkZiwgMHgwMywgCisweDE0LCAweGRhLCAweDA1LCAweDE0LCAweGRmLCAweDA3LCAweDE0LCAweGRhLCAweDA5LCAweDE0LCAweGRmLCAweDBiLCAweDE0LCAweGRhLCAweDBkLCAweDE0LCAKKzB4ZGYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTcsIDB4ZTUsIDB4MjQsIDB4NjQsIDB4MDMsIDB4NzAsIDB4MjEsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIAorMHgzMCwgMHhlMiwgMHgwZCwgMHgzMCwgMHhiNCwgMHgwNSwgMHg0MywgMHgwNywgMHgwMiwgMHg4MCwgMHgyYywgMHg1MywgMHgwNywgMHhmZCwgMHg4MCwgMHgyNywgCisweDMwLCAweDk1LCAweDA1LCAweDQzLCAweDA3LCAweDAyLCAweDgwLCAweDFmLCAweDUzLCAweDA3LCAweGZkLCAweDgwLCAweDFhLCAweDMwLCAweDkzLCAweDA1LCAKKzB4NDMsIDB4MDcsIDB4MDIsIDB4ODAsIDB4MTIsIDB4NTMsIDB4MDcsIDB4ZmQsIDB4ODAsIDB4MGQsIDB4NDMsIDB4MDcsIDB4MDIsIDB4ODAsIDB4MDgsIDB4NTMsIAorMHgwNywgMHhmZCwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHhmZCwgMHgxMiwgMHgyMiwgMHg3OCwgMHgyNCwgMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgMHhlZiwgCisweGYwLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDIxLCAweGZiLCAweGUwLCAweGZlLCAweDU0LCAKKzB4MDMsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTUsIDB4ZDcsIDB4ZWUsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MTUsIDB4ZDQsIDB4MTIsIDB4MjIsIDB4NmUsIAorMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHgxMiwgMHgxYiwgMHg0YywgMHgxNSwgMHgzNiwgMHgwMCwgMHgxNSwgMHg2YywgMHgwMSwgMHgxNSwgMHg2YywgMHgwMywgCisweDE1LCAweGEwLCAweDA1LCAweDE1LCAweGEwLCAweDA3LCAweDE1LCAweDg2LCAweDA5LCAweDE1LCAweDg2LCAweDBiLCAweDE1LCAweGJhLCAweDBkLCAweDE1LCAKKzB4YmEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZDcsIDB4ZTUsIDB4MjQsIDB4NjQsIDB4MDMsIDB4NzAsIDB4MjMsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIAorMHgzMCwgMHhlMiwgMHgwZiwgMHgzMCwgMHhiMSwgMHgwNiwgMHg1MywgMHgwNywgMHg3ZiwgMHgwMiwgMHgxNSwgMHhkNywgMHg0MywgMHgwNywgMHg4MCwgMHgwMiwgCisweDE1LCAweGQ3LCAweDMwLCAweDk0LCAweDA1LCAweDUzLCAweDA3LCAweDdmLCAweDgwLCAweDdkLCAweDQzLCAweDA3LCAweDgwLCAweDgwLCAweDc4LCAweDMwLCAKKzB4OTIsIDB4MDUsIDB4NTMsIDB4MDcsIDB4N2YsIDB4ODAsIDB4NzAsIDB4NDMsIDB4MDcsIDB4ODAsIDB4ODAsIDB4NmIsIDB4ZTUsIDB4MjQsIDB4YjQsIDB4MDMsIAorMHgwOSwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhkZiwgCisweGYwLCAweDUzLCAweDA3LCAweDdmLCAweDgwLCAweDUxLCAweGU1LCAweDI0LCAweGI0LCAweDAzLCAweDA5LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDQ0LCAKKzB4MTAsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4NTMsIDB4MDcsIDB4N2YsIDB4ODAsIDB4MzcsIAorMHhlNSwgMHgyNCwgMHhiNCwgMHgwMywgMHgwOSwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgCisweDllLCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDQzLCAweDA3LCAweDgwLCAweDgwLCAweDFkLCAweGU1LCAweDI0LCAweGI0LCAweDAzLCAweDA5LCAweDkwLCAKKzB4ZmYsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4NDMsIAorMHgwNywgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHg3ZiwgMHg3OCwgMHg4MCwgMHgxMiwgMHgyMiwgMHgzZiwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgCisweGZkLCAweDMwLCAweGUwLCAweDA1LCAweDQzLCAweDA3LCAweDIwLCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweGRmLCAweGVjLCAweDMwLCAweGUzLCAweDA1LCAKKzB4NDMsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4YmYsIDB4ZWMsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MTAsIDB4ODAsIAorMHgwMywgMHg1MywgMHgwNywgMHhlZiwgMHhlZCwgMHgzMCwgMHhlNCwgMHgwNSwgMHg0MywgMHgwNywgMHgwOCwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHhmNywgCisweGVkLCAweDMwLCAweGU1LCAweDA1LCAweDQzLCAweDA3LCAweDA0LCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweGZiLCAweGVkLCAweDMwLCAweGU2LCAweDA1LCAKKzB4NDMsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4ZmUsIDB4ZWQsIDB4MzAsIDB4ZTcsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MDIsIDB4ODAsIAorMHgwMywgMHg1MywgMHgwNywgMHhmZCwgMHg3OCwgMHg3ZSwgMHgxMiwgMHgyMiwgMHgzZiwgMHhhMywgMHhlZiwgMHhmMCwgMHgxMiwgMHgzMSwgMHhjNywgMHg3ZiwgCisweDAwLCAweDIyLCAweDkwLCAweGZmLCAweGZhLCAweDc0LCAweDA4LCAweGYwLCAweGEzLCAweDc0LCAweDE2LCAweGYwLCAweDkwLCAweGZmLCAweGY5LCAweDc0LCAKKzB4MDIsIDB4ZjAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4Y2MsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MjIsIDB4YTAsIDB4OTAsIDB4ZmEsIDB4Y2MsIAorMHhlNCwgMHg3NSwgMHhmMCwgMHgwMywgMHgxMiwgMHgxYSwgMHg2YywgMHgxMiwgMHgxOCwgMHhlMiwgMHhlNSwgMHgyMywgMHgzMCwgMHhlNywgMHgwMiwgMHhkMiwgCisweDAyLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDI0LCAweDkwLCAweGZhLCAweGNjLCAweGUwLCAweGY1LCAweDJkLCAweGEzLCAweGUwLCAweGY1LCAKKzB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4N2IsIAorMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgyMywgMHg3NSwgMHgyZCwgMHgwMCwgMHhmNSwgMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHhlNSwgCisweDIzLCAweDI0LCAweDgwLCAweDkwLCAweGZmLCAweGY4LCAweGYwLCAweGU1LCAweDIzLCAweDY0LCAweDA3LCAweDYwLCAweDFlLCAweGU1LCAweDIzLCAweDY0LCAKKzB4MDYsIDB4NjAsIDB4MTgsIDB4ZTUsIDB4MjMsIDB4NjQsIDB4MTQsIDB4NjAsIDB4MTIsIDB4ZTUsIDB4MjMsIDB4NjQsIDB4NDEsIDB4NjAsIDB4MGMsIDB4ZTUsIAorMHgyMywgMHg2NCwgMHgxYSwgMHg3MCwgMHg0NiwgMHhlNSwgMHgyNCwgMHg2NCwgMHgwMiwgMHg3MCwgMHg0MCwgMHhlNSwgMHgyMywgMHhiNCwgMHgwNywgMHgxNiwgCisweGQyLCAweDk0LCAweGQyLCAweDk1LCAweGQyLCAweDkyLCAweGQyLCAweDkzLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGEzLCAKKzB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MWUsIDB4ZTUsIDB4MjMsIDB4YjQsIDB4NDEsIDB4MTIsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4NDQsIAorMHgwNiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwNiwgMHhmMCwgMHhkMiwgMHhiMSwgMHhkMiwgMHhiNCwgMHg4MCwgMHgwNywgMHg5MCwgMHhmOSwgMHgxNSwgCisweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweGY5LCAweDE2LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDIzLCAweDY0LCAweDQyLCAweDYwLCAKKzB4MDUsIDB4ZTUsIDB4MjMsIDB4YjQsIDB4NDMsIDB4MGMsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIAorMHg4MCwgMHhmMCwgMHg5MCwgMHhmYSwgMHhjYywgMHhlNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwZCwgMHhmMCwgMHgxMiwgMHgxOCwgMHhlMiwgMHg5MCwgMHhmZiwgCisweGY1LCAweGU1LCAweDIzLCAweGYwLCAweGU0LCAweGY1LCAweDM1LCAweGY1LCAweDMzLCAweGY1LCAweDM0LCAweGY1LCAweDMyLCAweDEyLCAweDFkLCAweDg0LCAKKzB4MTIsIDB4MWMsIDB4MzAsIDB4MTIsIDB4MWQsIDB4OGIsIDB4OTAsIDB4ZjksIDB4NjcsIDB4MTIsIDB4MWIsIDB4NDMsIDB4OTAsIDB4ZjksIDB4NmMsIDB4MTIsIAorMHgxYiwgMHg0MywgMHg5MCwgMHhmZiwgMHhmZiwgMHhlNCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg4MywgMHhlMCwgMHhlNCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg4MSwgCisweDc0LCAweDgwLCAweGYwLCAweGEzLCAweDc0LCAweDg0LCAweGYwLCAweDkwLCAweGZmLCAweDgwLCAweGYwLCAweGU0LCAweGY1LCAweDIzLCAweGU1LCAweDIzLCAKKzB4MTIsIDB4MWMsIDB4YTcsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MjMsIDB4MTIsIDB4MWMsIDB4YjUsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIAorMHgwNSwgMHgyMywgMHhlNSwgMHgyMywgMHhiNCwgMHgwNywgMHhlNywgMHg3OCwgMHg3YSwgMHg3NiwgMHhmZSwgMHgwOCwgMHg3NiwgMHhmMCwgMHg5MCwgMHgzMSwgCisweDRkLCAweGU0LCAweDkzLCAweGZmLCAweDc4LCAweDc4LCAweGY2LCAweGZkLCAweGFkLCAweDA3LCAweDkwLCAweDMxLCAweDVhLCAweGU0LCAweDkzLCAweGZmLCAKKzB4MDgsIDB4ZjYsIDB4ZmYsIDB4ZWQsIDB4NTQsIDB4MGYsIDB4ZmQsIDB4MTIsIDB4MWMsIDB4OTcsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4ZWQsIDB4NzUsIDB4ZjAsIAorMHgwOCwgMHhhNCwgMHgyNCwgMHg0NywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhjMywgMHg3NCwgMHhmMCwgCisweDlmLCAweDc4LCAweDdiLCAweGY2LCAweDc0LCAweGZlLCAweDk0LCAweDAwLCAweDE4LCAweDEyLCAweDFjLCAweDI4LCAweGNlLCAweGMzLCAweDEzLCAweGNlLCAKKzB4MTMsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4ZWQsIDB4MTIsIDB4MWMsIDB4ZjgsIDB4ZWYsIDB4ZjAsIDB4ZWQsIDB4MTIsIDB4MWQsIDB4MWUsIDB4ZTQsIDB4ZjUsIAorMHgyMywgMHhlNSwgMHgyMywgMHg5MCwgMHgzMSwgMHg0NywgMHg5MywgMHhmZiwgMHg3OCwgMHg3OCwgMHhmNiwgMHhmZCwgMHhlNSwgMHgyMywgMHgyNSwgMHhlMCwgCisweDI0LCAweDRlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDMxLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDA4LCAweGY2LCAweGVkLCAweDMwLCAweGU3LCAKKzB4NTMsIDB4MTgsIDB4ZTYsIDB4NTQsIDB4MGYsIDB4ZjksIDB4MTIsIDB4MWMsIDB4OTcsIDB4MTIsIDB4MWQsIDB4MDYsIDB4MjQsIDB4NDcsIDB4ZjUsIDB4ODIsIAorMHhlNCwgMHgzNCwgMHhmZiwgMHgxMiwgMHgxYywgMHgxOCwgMHhjZSwgMHhjMywgMHgxMywgMHhjZSwgMHgxMywgMHhkOCwgMHhmOSwgMHhmZiwgMHhlOSwgMHgxMiwgCisweDFjLCAweGY4LCAweGVmLCAweGYwLCAweDEyLCAweDFjLCAweDFmLCAweGNlLCAweGMzLCAweDEzLCAweGNlLCAweDEzLCAweGQ4LCAweGY5LCAweDEyLCAweDFkLCAKKzB4MGIsIDB4MjQsIDB4NDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTksIDB4MTIsIDB4MWQsIDB4MWUsIAorMHhlOSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHg0NiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHg3NCwgMHg4MCwgCisweGYwLCAweDAyLCAweDE4LCAweGI3LCAweDc4LCAweDc4LCAweGU2LCAweDU0LCAweDBmLCAweGY5LCAweDEyLCAweDFjLCAweGVhLCAweDEyLCAweDFkLCAweDA2LCAKKzB4MjQsIDB4MDcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4MTIsIDB4MWMsIDB4MTgsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIAorMHhmOSwgMHgxMiwgMHgxZCwgMHgwYiwgMHgyNCwgMHgwMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgxMiwgCisweDFjLCAweDFmLCAweGNlLCAweGMzLCAweDEzLCAweGNlLCAweDEzLCAweGQ4LCAweGY5LCAweDEyLCAweDFkLCAweDBiLCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAKKzB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTksIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDIsIDB4ZjUsIDB4ODIsIAorMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlOSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgCisweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDA1LCAweDIzLCAweGU1LCAweDIzLCAweDY0LCAweDA0LCAweDYwLCAweDAzLCAweDAyLCAKKzB4MTcsIDB4ZTEsIDB4OTAsIDB4MzEsIDB4NGMsIDB4ZTQsIDB4OTMsIDB4ZmYsIDB4NzgsIDB4NzgsIDB4ZjYsIDB4MTIsIDB4MWMsIDB4ZTgsIDB4ZTQsIDB4ZjAsIAorMHg5MCwgMHgzMSwgMHg0YiwgMHg5MywgMHhmZiwgMHhmNiwgMHgxMiwgMHgxYywgMHg5NSwgMHhlNCwgMHhmMCwgMHg5MCwgMHhmZiwgMHhmZCwgMHg3NCwgMHgwNSwgCisweGYwLCAweDIyLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDIzLCAweDkwLCAweGZhLCAweGNjLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAKKzB4MWEsIDB4ODIsIDB4ODUsIDB4ZjAsIDB4MmUsIDB4ZjUsIDB4MmQsIDB4N2QsIDB4MDEsIDB4MDIsIDB4MjUsIDB4ZDcsIDB4ZTcsIDB4MDksIDB4ZjYsIDB4MDgsIAorMHhkZiwgMHhmYSwgMHg4MCwgMHg0NiwgMHhlNywgMHgwOSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHgzZSwgMHg4OCwgMHg4MiwgMHg4YywgMHg4MywgCisweGU3LCAweDA5LCAweGYwLCAweGEzLCAweGRmLCAweGZhLCAweDgwLCAweDMyLCAweGUzLCAweDA5LCAweGY2LCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDc4LCAKKzB4ZTMsIDB4MDksIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NzAsIDB4ODgsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTMsIDB4MDksIDB4ZjAsIDB4YTMsIAorMHhkZiwgMHhmYSwgMHg4MCwgMHg2NCwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhhMywgMHhmNiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg1OCwgCisweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweGEzLCAweGYyLCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDRjLCAweDgwLCAweGQyLCAweDgwLCAweGZhLCAKKzB4ODAsIDB4YzYsIDB4ODAsIDB4ZDQsIDB4ODAsIDB4NjksIDB4ODAsIDB4ZjIsIDB4ODAsIDB4MzMsIDB4ODAsIDB4MTAsIDB4ODAsIDB4YTYsIDB4ODAsIDB4ZWEsIAorMHg4MCwgMHg5YSwgMHg4MCwgMHhhOCwgMHg4MCwgMHhkYSwgMHg4MCwgMHhlMiwgMHg4MCwgMHhjYSwgMHg4MCwgMHgzMywgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgCisweGVjLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNjLCAweGM1LCAweDgzLCAweGNjLCAweGYwLCAweGEzLCAweGM4LCAKKzB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4MGQsIDB4ODksIDB4ODIsIDB4OGEsIAorMHg4MywgMHhlNCwgMHg5MywgMHhhMywgMHhmNiwgMHgwOCwgMHhkZiwgMHhmOSwgMHhlYywgMHhmYSwgMHhhOSwgMHhmMCwgMHhlZCwgMHhmYiwgMHgyMiwgMHg4OSwgCisweDgyLCAweDhhLCAweDgzLCAweGVjLCAweGZhLCAweGUwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNjLCAweGM1LCAweDgzLCAweGNjLCAweGYwLCAKKzB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZGYsIDB4ZWEsIDB4ZGUsIDB4ZTgsIDB4ODAsIDB4ZGIsIDB4ODksIAorMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHhhMywgMHhmMiwgMHgwOCwgMHhkZiwgMHhmOSwgMHg4MCwgMHhjYywgMHg4OCwgMHhmMCwgMHhlZiwgMHg2MCwgCisweDAxLCAweDBlLCAweDRlLCAweDYwLCAweGMzLCAweDg4LCAweGYwLCAweGVkLCAweDI0LCAweDAyLCAweGI0LCAweDA0LCAweDAwLCAweDUwLCAweGI5LCAweGY1LCAKKzB4ODIsIDB4ZWIsIDB4MjQsIDB4MDIsIDB4YjQsIDB4MDQsIDB4MDAsIDB4NTAsIDB4YWYsIDB4MjMsIDB4MjMsIDB4NDUsIDB4ODIsIDB4MjMsIDB4OTAsIDB4MTksIAorMHg0YywgMHg3MywgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgCisweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDBjLCAweGU1LCAweDgyLCAKKzB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIAorMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgCisweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAKKzB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZjgsIDB4YmIsIDB4MDEsIDB4MGQsIDB4ZTUsIDB4ODIsIAorMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlOCwgMHhmMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgCisweGM4LCAweGY2LCAweDIyLCAweGJiLCAweGZlLCAweDA1LCAweGU5LCAweDI1LCAweDgyLCAweGM4LCAweGYyLCAweDIyLCAweGM1LCAweGYwLCAweGY4LCAweGEzLCAKKzB4ZTAsIDB4MjgsIDB4ZjAsIDB4YzUsIDB4ZjAsIDB4ZjgsIDB4ZTUsIDB4ODIsIDB4MTUsIDB4ODIsIDB4NzAsIDB4MDIsIDB4MTUsIDB4ODMsIDB4ZTAsIDB4MzgsIAorMHhmMCwgMHgyMiwgMHhhMywgMHhmOCwgMHhlMCwgMHhjNSwgMHhmMCwgMHgyNSwgMHhmMCwgMHhmMCwgMHhlNSwgMHg4MiwgMHgxNSwgMHg4MiwgMHg3MCwgMHgwMiwgCisweDE1LCAweDgzLCAweGUwLCAweGM4LCAweDM4LCAweGYwLCAweGU4LCAweDIyLCAweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAKKzB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsIAorMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwYSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHhmNSwgMHhmMCwgCisweDA4LCAweGUyLCAweDIyLCAweGU1LCAweDgzLCAweDJhLCAweGY1LCAweDgzLCAweGU5LCAweDkzLCAweGY1LCAweGYwLCAweGEzLCAweGU5LCAweDkzLCAweDIyLCAKKzB4YmIsIDB4MDEsIDB4MGEsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4ZTUsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZjcsIAorMHgwOSwgMHhhNywgMHhmMCwgMHgxOSwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhmMywgMHhlNSwgMHhmMCwgMHgwOSwgMHhmMywgMHgxOSwgMHgyMiwgMHhmOCwgCisweGJiLCAweDAxLCAweDExLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU4LCAweGYwLCAweGU1LCAKKzB4ZjAsIDB4YTMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjYsIDB4MDgsIDB4YTYsIDB4ZjAsIDB4MjIsIDB4YmIsIAorMHhmZSwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhjOCwgMHhmMiwgMHhlNSwgMHhmMCwgMHgwOCwgMHhmMiwgMHgyMiwgMHhhNCwgMHgyNSwgMHg4MiwgMHhmNSwgCisweDgyLCAweGU1LCAweGYwLCAweDM1LCAweDgzLCAweGY1LCAweDgzLCAweDIyLCAweGU2LCAweGZiLCAweDA4LCAweGU2LCAweGZhLCAweDA4LCAweGU2LCAweGY5LCAKKzB4MjIsIDB4ZWIsIDB4ZjYsIDB4MDgsIDB4ZWEsIDB4ZjYsIDB4MDgsIDB4ZTksIDB4ZjYsIDB4MjIsIDB4ZTAsIDB4ZmIsIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4YTMsIAorMHhlMCwgMHhmOSwgMHgyMiwgMHhlYiwgMHhmMCwgMHhhMywgMHhlYSwgMHhmMCwgMHhhMywgMHhlOSwgMHhmMCwgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgCisweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAKKzB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsIAorMHg4MCwgMHhkZiwgMHhhYiwgMHgzNiwgMHhhYSwgMHgzNywgMHhhOSwgMHgzOCwgMHhlNSwgMHg0YywgMHgxMiwgMHgxYSwgMHgzOCwgMHg3NCwgMHgwMSwgMHgyNSwgCisweDM4LCAweGY1LCAweDM4LCAweGU0LCAweDM1LCAweDM3LCAweGY1LCAweDM3LCAweGFiLCAweDM2LCAweGZhLCAweGE5LCAweDM4LCAweDc0LCAweDExLCAweDEyLCAKKzB4MWEsIDB4MzgsIDB4NzQsIDB4MDEsIDB4MjUsIDB4MzgsIDB4ZjUsIDB4MzgsIDB4ZTQsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4MzcsIDB4OTAsIDB4ZmYsIDB4MDYsIAorMHhlMCwgMHhhYiwgMHgzNiwgMHhhYSwgMHgzNywgMHhhOSwgMHgzOCwgMHgxMiwgMHgxYSwgMHgzOCwgMHg3NCwgMHgwMSwgMHgyNSwgMHgzOCwgMHhmNSwgMHgzOCwgCisweGU0LCAweDM1LCAweDM3LCAweGY1LCAweDM3LCAweGFiLCAweDM2LCAweGZhLCAweGE5LCAweDM4LCAweGU0LCAweDEyLCAweDFhLCAweDM4LCAweDA0LCAweDI1LCAKKzB4MzgsIDB4ZjUsIDB4MzgsIDB4ZTQsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4MzcsIDB4YWIsIDB4MzYsIDB4ZmEsIDB4YTksIDB4MzgsIDB4ZTQsIDB4MTIsIDB4MWEsIAorMHgzOCwgMHgwNCwgMHgyNSwgMHgzOCwgMHhmNSwgMHgzOCwgMHhlNCwgMHgzNSwgMHgzNywgMHhmNSwgMHgzNywgMHg5MCwgMHhmZiwgMHgwNCwgMHhlMCwgMHhhYiwgCisweDM2LCAweGFhLCAweDM3LCAweGE5LCAweDM4LCAweDEyLCAweDFhLCAweDM4LCAweDc0LCAweDAxLCAweDI1LCAweDM4LCAweGY1LCAweDM4LCAweGU0LCAweDM1LCAKKzB4MzcsIDB4ZjUsIDB4MzcsIDB4OTAsIDB4ZmYsIDB4MDUsIDB4ZTAsIDB4YWIsIDB4MzYsIDB4YWEsIDB4MzcsIDB4YTksIDB4MzgsIDB4MTIsIDB4MWEsIDB4MzgsIAorMHg3NCwgMHgwMSwgMHgyNSwgMHgzOCwgMHhmNSwgMHgzOCwgMHhlNCwgMHgzNSwgMHgzNywgMHhmNSwgMHgzNywgMHgyMiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgCisweDA4LCAweGFiLCAweDM2LCAweGFhLCAweDM3LCAweGE5LCAweDM4LCAweDIyLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGZkLCAweDdjLCAweDAwLCAweGMzLCAKKzB4NzgsIDB4N2IsIDB4ZTYsIDB4OWQsIDB4ZjYsIDB4MTgsIDB4ZTYsIDB4OWMsIDB4ZjYsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4NzgsIDB4MDMsIDB4MjIsIAorMHg3NSwgMHgzNiwgMHgwMSwgMHg3NSwgMHgzNywgMHhmOSwgMHg3NSwgMHgzOCwgMHg2ZiwgMHgyMiwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHg3NCwgMHgxMiwgCisweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGY5LCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDkwLCAweGZhLCAweGI5LCAweGUwLCAweGZmLCAweDdlLCAKKzB4MDAsIDB4YzMsIDB4OTAsIDB4ZmEsIDB4YmQsIDB4ZTAsIDB4OWYsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4YmMsIDB4ZTAsIDB4OWUsIDB4ZjAsIDB4OTAsIDB4ZmEsIAorMHhiNCwgMHhlZSwgMHg4ZiwgMHhmMCwgMHgxMiwgMHgxYSwgMHg2YywgMHhlZiwgMHgyNSwgMHg0ZiwgMHhmNSwgMHg0ZiwgMHhlZSwgMHgzNSwgMHg0ZSwgMHhmNSwgCisweDRlLCAweDIyLCAweDdiLCAweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGIxLCAweDkwLCAweGZhLCAweGI0LCAweGUwLCAweGY1LCAweDJkLCAweGEzLCAweGUwLCAKKzB4ZjUsIDB4MmUsIDB4MjIsIDB4NzgsIDB4N2MsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4OGUsIDB4ODMsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIAorMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHgyMiwgMHg1NCwgMHgwZiwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHg0MCwgMHhmNSwgMHg4MiwgMHhlNCwgCisweDM0LCAweGZmLCAweGY1LCAweDgzLCAweDIyLCAweGU1LCAweDRkLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDQ4LCAweGY1LCAweDgyLCAweGU0LCAKKzB4MzQsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4NGQsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIAorMHgyMiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhmZiwgMHgyNCwgMHhmYywgMHgyMiwgMHg5MCwgMHhmZiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgxZiwgMHgyMiwgCisweDkwLCAweGZhLCAweGJiLCAweGUwLCAweDkwLCAweGZhLCAweGI3LCAweGYwLCAweDIyLCAweDc1LCAweDMzLCAweDAwLCAweDhmLCAweDM0LCAweDkwLCAweGY5LCAKKzB4NmMsIDB4MTIsIDB4MWIsIDB4M2EsIDB4OTAsIDB4MDAsIDB4MDIsIDB4MjIsIDB4NTQsIDB4MGYsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIAorMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHgyMiwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHg0MSwgMHhmNSwgMHg4MiwgCisweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweDIyLCAweDc0LCAweDgwLCAweGYwLCAweDA4LCAweGU2LCAweGZmLCAweGU5LCAweDc1LCAweGYwLCAweDA4LCAKKzB4YTQsIDB4MjIsIDB4NzQsIDB4YWYsIDB4MjUsIDB4MjIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmEsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4NzUsIDB4ZjAsIAorMHgwOCwgMHhhNCwgMHgyNCwgMHg0MiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHg3NCwgMHg4MCwgMHhmMCwgMHgyMiwgMHg5MCwgCisweGZmLCAweDgyLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDIyLCAweDkwLCAweGZmLCAweGZlLCAweGUwLCAweDQ0LCAweDAzLCAweGYwLCAweDkwLCAweGZmLCAKKzB4ZmMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MjIsIDB4NzgsIDB4NjcsIDB4ZTYsIDB4NTQsIDB4ZmQsIDB4ZjYsIDB4OTAsIDB4ZmYsIDB4ZmQsIDB4NzQsIAorMHg2NSwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxYiwgMHgxYywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg0ZSwgMHgyMiwgMHg3YiwgMHgwMSwgMHg3YSwgCisweGZhLCAweDc5LCAweGI0LCAweDIyLCAweDkwLCAweGZmLCAweDgwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDIyLCAweDkwLCAweGZmLCAweDgzLCAweGUwLCAKKzB4NTQsIDB4N2YsIDB4ZjAsIDB4MjIsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4ZjksIDB4NjcsIDB4MDIsIDB4MWIsIDB4M2EsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIAorMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwgMHg3NSwgMHgzOSwgMHgwMSwgMHg3NSwgMHgzYSwgMHgwOSwgMHgyMiwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmOSwgMHg3OSwgCisweDZmLCAweDIyLCAweGQzLCAweGU1LCAweDNjLCAweDk0LCAweDA4LCAweGU1LCAweDNiLCAweDk0LCAweDAxLCAweDIyLCAweDkwLCAweGZhLCAweGJiLCAweGUwLCAKKzB4ZmYsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4YjQsIAorMHhlMCwgMHg1NCwgMHhlZiwgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHg3OCwgMHg4OCwgMHhlZiwgMHhmNiwgMHgxMiwgMHgyYSwgMHgwNiwgMHgxMiwgMHgyMiwgCisweDRhLCAweDhlLCAweDgzLCAweDI0LCAweDA5LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweGZkLCAweDEyLCAweDIyLCAweDJkLCAweDkwLCAweDAwLCAweDBhLCAKKzB4MTIsIDB4MjIsIDB4NTIsIDB4MjQsIDB4MGEsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4OTAsIDB4MDAsIDB4MGIsIDB4MTIsIDB4MWEsIDB4NGEsIDB4MTIsIAorMHgyMiwgMHg0YSwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHhmNSwgMHg1MywgMHgxMiwgMHgyMiwgMHg1NiwgMHgyNCwgCisweDA0LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweGY1LCAweDU0LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGY1LCAweDU1LCAKKzB4ZTUsIDB4NTMsIDB4YzQsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MDEsIDB4NzgsIDB4ODgsIDB4ZjYsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDYsIAorMHhlNSwgMHg1NCwgMHgzMCwgMHhlMSwgMHgwMSwgMHgwNiwgMHg3OCwgMHg4OCwgMHhlNiwgMHgxMiwgMHgyMiwgMHgyYywgMHg5MCwgMHgwMCwgMHgwYywgMHhlZiwgCisweDEyLCAweDFhLCAweDRhLCAweDc4LCAweDgwLCAweDEyLCAweDIyLCAweDA5LCAweGEzLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweDUzLCAKKzB4MDcsIDB4MGMsIDB4NTMsIDB4MDYsIDB4ZTYsIDB4ZTUsIDB4NTMsIDB4MzAsIDB4ZTUsIDB4MDMsIDB4NDMsIDB4MDcsIDB4MDEsIDB4ZTUsIDB4NTQsIDB4MjAsIAorMHhlNSwgMHgwZSwgMHhlNSwgMHg1MywgMHg1NCwgMHg3ZiwgMHg3MCwgMHgwOCwgMHhlNSwgMHg1MywgMHgyMCwgMHhlNywgMHgwMywgMHg0MywgMHgwNywgMHgwMiwgCisweGU1LCAweDUzLCAweDMwLCAweGUzLCAweDAzLCAweDQzLCAweDA3LCAweDEwLCAweGU1LCAweDUzLCAweDMwLCAweGUyLCAweDAzLCAweDQzLCAweDA3LCAweDIwLCAKKzB4ZTUsIDB4NTMsIDB4NTQsIDB4MDMsIDB4NjAsIDB4MDMsIDB4NDMsIDB4MDcsIDB4NDAsIDB4ZTUsIDB4NTMsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4NDMsIDB4MDcsIAorMHg4MCwgMHhlNSwgMHg1MywgMHgzMCwgMHhlNCwgMHgwMywgMHg0MywgMHgwNiwgMHgwMSwgMHhlNSwgMHg1MywgMHgzMCwgMHhlNiwgMHgwMywgMHg0MywgMHgwNiwgCisweDA4LCAweGU1LCAweDU0LCAweDIwLCAweGU0LCAweDBlLCAweGU1LCAweDUzLCAweDU0LCAweDdmLCAweDcwLCAweDA4LCAweGU1LCAweDUzLCAweDIwLCAweGU3LCAKKzB4MDMsIDB4NDMsIDB4MDYsIDB4MTAsIDB4NTMsIDB4MDcsIDB4ZmIsIDB4NTMsIDB4MDYsIDB4NzksIDB4OTAsIDB4MDAsIDB4MDUsIDB4ZWUsIDB4OGYsIDB4ZjAsIAorMHgxMiwgMHgxYSwgMHhlZiwgMHhlNSwgMHg1NSwgMHgzMCwgMHhlMywgMHgxMiwgMHg1NCwgMHgzMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHgxMiwgMHgyMiwgCisweDJjLCAweDkwLCAweDAwLCAweDA4LCAweGVmLCAweDEyLCAweDFhLCAweDRhLCAweDgwLCAweDBhLCAweDEyLCAweDIyLCAweDJkLCAweDkwLCAweDAwLCAweDA4LCAKKzB4ZTQsIDB4MTIsIDB4MWEsIDB4NGEsIDB4ZTUsIDB4NTUsIDB4NTQsIDB4MDMsIDB4MTIsIDB4MjIsIDB4MmMsIDB4OTAsIDB4MDAsIDB4MDcsIDB4ZWYsIDB4MTIsIAorMHgxYSwgMHg0YSwgMHhlNSwgMHg1NSwgMHg1NCwgMHgwNCwgMHhmZiwgMHhjMywgMHgxMywgMHg5MCwgMHgwMCwgMHgwOSwgMHgxMiwgMHgxYSwgMHg0YSwgMHg5MCwgCisweDAwLCAweDA3LCAweDEyLCAweDFhLCAweDBiLCAweDcwLCAweDEzLCAweDEyLCAweDIyLCAweDJkLCAweGU5LCAweDI0LCAweDA5LCAweGY5LCAweGU0LCAweDNhLCAKKzB4ZmEsIDB4MTIsIDB4MTksIDB4ZjIsIDB4ZmYsIDB4YzMsIDB4MTMsIDB4MTIsIDB4MWEsIDB4MzgsIDB4MTIsIDB4MjIsIDB4NzgsIDB4MjQsIDB4MDgsIDB4MTIsIAorMHgyMSwgMHhmMywgMHhlMCwgMHhmZSwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNywgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgCisweGZkLCAweGVlLCAweGVkLCAweDEyLCAweDIyLCAweDJjLCAweDkwLCAweDAwLCAweDAzLCAweGVlLCAweDhmLCAweGYwLCAweDEyLCAweDFhLCAweGVmLCAweDEyLCAKKzB4MzEsIDB4YzcsIDB4N2QsIDB4MGEsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MmYsIDB4MTgsIDB4MDIsIDB4MTAsIDB4ODYsIDB4OTAsIDB4ZmEsIDB4ZTMsIDB4ZTAsIAorMHhiNCwgMHgwMywgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHg0MCwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwOCwgMHg5MCwgMHhmYSwgMHhkNywgCisweGVlLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDkwLCAweDAwLCAweDA1LCAweDEyLCAweDFhLCAweDBiLCAweGZmLCAweDdlLCAweDAwLCAweDkwLCAweGZhLCAKKzB4ZDMsIDB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4NzAsIDB4MDMsIDB4N2YsIDB4MDgsIDB4MjIsIDB4OTAsIDB4MDAsIDB4MDgsIDB4MTIsIDB4MWEsIAorMHg5OCwgMHhmZiwgMHg5MCwgMHhmYSwgMHhkNSwgMHhlNSwgMHhmMCwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHhhZSwgMHgwMiwgMHhhZiwgMHgwMSwgMHg4ZSwgCisweDUwLCAweDhmLCAweDUxLCAweDc0LCAweDBhLCAweDI1LCAweDUxLCAweGY1LCAweDUxLCAweGU0LCAweDM1LCAweDUwLCAweGY1LCAweDUwLCAweDkwLCAweGZhLCAKKzB4ZDgsIDB4ZTAsIDB4ZmYsIDB4MTQsIDB4ZmUsIDB4OTAsIDB4ZmEsIDB4ZDYsIDB4ZTAsIDB4NWUsIDB4ZmUsIDB4YzMsIDB4ZWYsIDB4OWUsIDB4ZmYsIDB4OTAsIAorMHhmYSwgMHhkYSwgMHhmMCwgMHhjMywgMHg5MCwgMHhmYSwgMHhkNCwgMHhlMCwgMHg5ZiwgMHg5MCwgMHhmYSwgMHhkMywgMHhlMCwgMHg5NCwgMHgwMCwgMHg1MCwgCisweDA2LCAweGEzLCAweGUwLCAweDkwLCAweGZhLCAweGRhLCAweGYwLCAweDEyLCAweDFmLCAweGZiLCAweDYwLCAweDAzLCAweGUwLCAweGZmLCAweDIyLCAweDEyLCAKKzB4MmQsIDB4NWEsIDB4OTAsIDB4ZmEsIDB4ZDMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4NGUsIDB4NjAsIDB4MmIsIDB4OTAsIDB4ZmEsIDB4ZDcsIAorMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhkMywgMHhlZiwgMHg5ZCwgMHhlZSwgMHg5YywgMHg0MCwgMHgwNywgMHhlMCwgMHg5MCwgMHhmYSwgMHhkYSwgCisweGYwLCAweDgwLCAweDA4LCAweDkwLCAweGZhLCAweGQ0LCAweGUwLCAweDkwLCAweGZhLCAweGRhLCAweGYwLCAweDEyLCAweDFmLCAweGZiLCAweDYwLCAweDAzLCAKKzB4ZTAsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MmQsIDB4NWEsIDB4ODAsIDB4Y2EsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4NTIsIDB4ZTQsIDB4ZjUsIAorMHgyZCwgMHhmNSwgMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg3ZiwgMHgwMCwgMHgyMiwgMHhhYSwgMHg1MCwgMHhhOSwgMHg1MSwgMHg3YiwgCisweDAxLCAweDkwLCAweGZhLCAweGQ1LCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweDkwLCAweGZhLCAweGRhLCAweGUwLCAweGY1LCAweDRhLCAweDEyLCAKKzB4MjgsIDB4OWYsIDB4OTAsIDB4ZmEsIDB4ZDksIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZWYsIDB4MjQsIDB4YWUsIDB4NjAsIDB4NTIsIDB4MjQsIDB4ZmUsIDB4NjAsIAorMHgyZSwgMHgyNCwgMHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgyMCwgMHhiYiwgMHgyNCwgMHgwNiwgMHg2MCwgMHgwMywgMHgwMiwgMHgyMSwgMHgwMywgMHg3OCwgCisweDcxLCAweGU2LCAweDU0LCAweGZiLCAweGY2LCAweDkwLCAweGZmLCAweGE1LCAweGUwLCAweGY1LCAweDIyLCAweDQ0LCAweDBmLCAweGYwLCAweDc0LCAweDMzLCAKKzB4OTAsIDB4ZmEsIDB4OTEsIDB4ZjAsIDB4ZTUsIDB4MjIsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4YWYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4NzgsIAorMHg3MiwgMHhlNiwgMHg1NCwgMHhmYiwgMHhmNiwgMHg5MCwgMHhmZiwgMHhiNSwgMHhlMCwgMHhmNSwgMHgyMiwgMHg0NCwgMHgwZiwgMHhmMCwgMHg3NCwgMHg0MywgCisweDkwLCAweGZhLCAweDkzLCAweGYwLCAweGU1LCAweDIyLCAweGEzLCAweGYwLCAweDkwLCAweGZhLCAweGIwLCAweDc0LCAweDAxLCAweGYwLCAweDIyLCAweDkwLCAKKzB4ZmEsIDB4OWQsIDB4ZTAsIDB4YTMsIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MDIsIDB4MjEsIDB4MDMsIDB4OTAsIDB4ZmYsIDB4YTYsIDB4ZTAsIDB4OTAsIDB4ZmEsIAorMHhjYSwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHhmYSwgMHhjYSwgMHhlMCwgMHhmZiwgMHg1NCwgMHgwZiwgMHhmZSwgMHg2MCwgMHgxMCwgMHg5MCwgMHhmZiwgCisweGE2LCAweDEyLCAweDIyLCAweDVkLCAweDkwLCAweGZmLCAweGE2LCAweGUwLCAweDkwLCAweGZhLCAweGNhLCAweGYwLCAweDgwLCAweGU2LCAweDkwLCAweGZhLCAKKzB4Y2IsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4MzQsIDB4ZmUsIDB4MTIsIDB4MmMsIDB4YjQsIDB4ZWYsIDB4NzAsIDB4NTcsIDB4OTAsIDB4ZmEsIDB4Y2IsIDB4ZTAsIAorMHhmZiwgMHg3NCwgMHgzNCwgMHg5MCwgMHhmYSwgMHg5NSwgMHhmMCwgMHhlZiwgMHhhMywgMHhmMCwgMHgyMiwgMHg5MCwgMHhmYSwgMHhhNywgMHhlMCwgMHhhMywgCisweDMwLCAweGU1LCAweDQwLCAweDkwLCAweGZmLCAweGI2LCAweGUwLCAweDkwLCAweGZhLCAweGNhLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweGZhLCAweGNhLCAKKzB4ZTAsIDB4ZmYsIDB4NTQsIDB4MGYsIDB4ZmUsIDB4NjAsIDB4MTAsIDB4OTAsIDB4ZmYsIDB4YjYsIDB4MTIsIDB4MjIsIDB4NWQsIDB4OTAsIDB4ZmYsIDB4YjYsIAorMHhlMCwgMHg5MCwgMHhmYSwgMHhjYSwgMHhmMCwgMHg4MCwgMHhlNiwgMHg5MCwgMHhmYSwgMHhjYiwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NCwgMHhmZSwgMHgxMiwgCisweDJjLCAweGI0LCAweGVmLCAweDcwLCAweDBlLCAweDkwLCAweGZhLCAweGNiLCAweGUwLCAweGZmLCAweDc0LCAweDQ0LCAweDkwLCAweGZhLCAweDk3LCAweGYwLCAKKzB4ZWYsIDB4YTMsIDB4ZjAsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIAorMHgwMCwgMHhjMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhjMCwgMHgwMiwgMHhjMCwgMHgwMywgMHhjMCwgMHgwNCwgMHhjMCwgMHgwNSwgMHhjMCwgMHgwNiwgMHhjMCwgCisweDA3LCAweDkwLCAweGZmLCAweDkyLCAweGUwLCAweGZmLCAweDkwLCAweGZhLCAweGM5LCAweGYwLCAweDkwLCAweGZmLCAweDkyLCAweGU0LCAweGYwLCAweGVmLCAKKzB4MTIsIDB4MWIsIDB4NGMsIDB4MjEsIDB4YmIsIDB4MjYsIDB4MjEsIDB4YmIsIDB4MmUsIDB4MjEsIDB4NWUsIDB4MzAsIDB4MjEsIDB4NWUsIDB4MzIsIDB4MjEsIAorMHg2YywgMHgzOCwgMHgyMSwgMHg3ZSwgMHgzYSwgMHgyMSwgMHhiMCwgMHgzZSwgMHgyMSwgMHg5YiwgMHg0NCwgMHgyMSwgMHg5MCwgMHg0NiwgMHgyMSwgMHhhNiwgCisweDUwLCAweDIxLCAweGE2LCAweDUyLCAweDIxLCAweGE2LCAweDU0LCAweDIxLCAweGE2LCAweDU2LCAweDAwLCAweDAwLCAweDIxLCAweGMwLCAweDkwLCAweGZhLCAKKzB4YzksIDB4ZTAsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTEsIDB4MTYsIDB4ODAsIDB4NjIsIDB4N2MsIDB4MDAsIDB4N2QsIDB4MDEsIAorMHg3ZiwgMHgwMywgMHgxMiwgMHgxMSwgMHgxNiwgMHg5MCwgMHhmZiwgMHhmZSwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1MCwgMHg3YywgMHgwMCwgCisweDdkLCAweDAxLCAweDdmLCAweDAyLCAweDEyLCAweDExLCAweDE2LCAweDkwLCAweGZmLCAweGZlLCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDgwLCAweDNlLCAKKzB4N2MsIDB4MDAsIDB4N2QsIDB4MDEsIDB4N2YsIDB4MDUsIDB4MTIsIDB4MTEsIDB4MTYsIDB4ODAsIDB4MzMsIDB4N2MsIDB4MDAsIDB4N2QsIDB4MDEsIDB4N2YsIAorMHgwNiwgMHgxMiwgMHgxMSwgMHgxNiwgMHg4MCwgMHgyOCwgMHg5MCwgMHhmYSwgMHhjOSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgyMCwgMHgxOCwgMHg4MCwgMHgxZSwgCisweDdjLCAweDAwLCAweDdkLCAweDAxLCAweDdmLCAweDA0LCAweDEyLCAweDExLCAweDE2LCAweDgwLCAweDEzLCAweDEyLCAweDI3LCAweDhkLCAweDgwLCAweDBlLCAKKzB4OTAsIDB4ZmEsIDB4YzksIDB4ZTAsIDB4MjQsIDB4MDAsIDB4ZmYsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZmUsIDB4MTIsIDB4MmMsIDB4YjQsIDB4ZDAsIDB4MDcsIAorMHhkMCwgMHgwNiwgMHhkMCwgMHgwNSwgMHhkMCwgMHgwNCwgMHhkMCwgMHgwMywgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMCwgMHhkMCwgMHhkMCwgCisweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGYwLCAweGQwLCAweGUwLCAweDMyLCAweDc4LCAweDdjLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweDI0LCAKKzB4MDQsIDB4OGUsIDB4ODMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4NzQsIDB4MTIsIDB4MjUsIDB4MjQsIDB4ZjUsIAorMHg4MiwgMHhlNCwgMHgzNCwgMHhmOSwgMHhmNSwgMHg4MywgMHgyMiwgMHg3OCwgMHg3YywgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhmNSwgMHg4MiwgMHg4ZSwgCisweDgzLCAweDIyLCAweDc4LCAweDgwLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGFhLCAweDA2LCAweGY4LCAweGFjLCAweDAyLCAweDdkLCAweDAxLCAweDdiLCAKKzB4ZmYsIDB4N2EsIDB4MzEsIDB4NzksIDB4OTksIDB4N2UsIDB4MDAsIDB4N2YsIDB4MGEsIDB4MDIsIDB4MTksIDB4Y2MsIDB4ZmYsIDB4OTAsIDB4ZjksIDB4NmMsIAorMHgwMiwgMHgxYiwgMHgzYSwgMHg5MCwgMHhmOSwgMHg2NywgMHgxMiwgMHgxYiwgMHgzYSwgMHg5MCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxYSwgMHgwYiwgMHhlNiwgCisweGZjLCAweDA4LCAweGU2LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGEzLCAweGEzLCAweDIyLCAweDc4LCAweDdlLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAKKzB4ZmYsIDB4MjIsIDB4ZWQsIDB4MTIsIDB4MWEsIDB4NGEsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjIsIDB4ZWYsIDB4ZjAsIDB4OTAsIAorMHhmYSwgMHhjYiwgMHhlMCwgMHg1NCwgMHgwZiwgMHg0ZSwgMHhmZSwgMHhmMCwgMHhlZiwgMHg1NCwgMHhmMCwgMHg0ZSwgMHhmMCwgMHgyMiwgMHgwOCwgMHhlNiwgCisweGZjLCAweDA4LCAweGU2LCAweDhjLCAweDgzLCAweDI0LCAweDA5LCAweDIyLCAweDc4LCAweDdlLCAweGU2LCAweGZjLCAweDA4LCAweGU2LCAweGZkLCAweDhjLCAKKzB4ODMsIDB4MjIsIDB4YTYsIDB4MDcsIDB4ZTYsIDB4MjQsIDB4NmUsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4NzgsIDB4N2UsIDB4ZTYsIDB4ZmEsIDB4MDgsIDB4ZTYsIAorMHhmYiwgMHgyMiwgMHgyNiwgMHhmNiwgMHgxOCwgMHhlZSwgMHgzNiwgMHhmNiwgMHgyMiwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyMiwgCisweDhiLCAweDI1LCAweDhhLCAweDI2LCAweDg5LCAweDI3LCAweDhkLCAweDI4LCAweDkwLCAweGZhLCAweGNmLCAweGU0LCAweGYwLCAweGEzLCAweDc0LCAweDAyLCAKKzB4ZjAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZmEsIDB4NzksIDB4Y2UsIDB4OTAsIDB4ZmEsIDB4Y2YsIDB4ZTAsIDB4ZjUsIDB4MmQsIDB4YTMsIDB4ZTAsIDB4ZjUsIAorMHgyZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgyNSwgMHhkNywgMHg5MCwgMHhmYSwgMHhjZSwgMHhlMCwgMHg2NSwgMHgyOCwgMHg2MCwgMHg0NiwgMHhhMywgMHhlMCwgCisweGZmLCAweGEzLCAweGUwLCAweGEzLCAweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDEyLCAweDIzLCAweDJmLCAweDkwLCAweGZhLCAweGNlLCAweGUwLCAKKzB4ZmYsIDB4OTAsIDB4ZmEsIDB4ZDEsIDB4ZTQsIDB4OGYsIDB4ZjAsIDB4MTIsIDB4MWEsIDB4NmMsIDB4MTIsIDB4MjMsIDB4MmYsIDB4OTAsIDB4ZmEsIDB4ZDEsIAorMHhlMCwgMHhmZiwgMHhhMywgMHhlMCwgMHg5MCwgMHhmYSwgMHhjZiwgMHhjZiwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg5MCwgMHhmYSwgMHhjZSwgMHhlMCwgCisweGEzLCAweDc1LCAweGYwLCAweDAwLCAweDEyLCAweDFhLCAweDZjLCAweDkwLCAweGZhLCAweGNmLCAweGU0LCAweDc1LCAweGYwLCAweDA0LCAweDEyLCAweDFhLCAKKzB4NmMsIDB4MDIsIDB4MjIsIDB4YjEsIDB4OTAsIDB4ZmEsIDB4ZDAsIDB4ZTAsIDB4MjQsIDB4MDEsIDB4ZmYsIDB4OTAsIDB4ZmEsIDB4Y2YsIDB4ZTAsIDB4MzQsIAorMHgwMCwgMHhhYiwgMHgyNSwgMHhhYSwgMHgyNiwgMHhhOSwgMHgyNywgMHg4ZiwgMHhmMCwgMHgxMiwgMHgxYSwgMHhkMCwgMHg3ZiwgMHgwMCwgMHgyMiwgMHg3YiwgCisweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGNlLCAweDkwLCAweGZhLCAweGNmLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweDFhLCAweDZjLCAweDg1LCAKKzB4ZjAsIDB4MmUsIDB4ZjUsIDB4MmQsIDB4N2QsIDB4MDEsIDB4MDIsIDB4MjUsIDB4ZDcsIDB4OGYsIDB4NjIsIDB4MTIsIDB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIAorMHg0YSwgMHg4ZSwgMHg4MywgMHgyNCwgMHgwYiwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwOCwgCisweDEyLCAweDIyLCAweDNmLCAweGUwLCAweGEzLCAweDMwLCAweGU1LCAweDBjLCAweDEyLCAweDIyLCAweDU2LCAweDI0LCAweDBiLCAweDEyLCAweDIxLCAweGYzLCAKKzB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4NzgsIDB4N2MsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4ZmYsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIAorMHg1NCwgMHhiOCwgMHhmZCwgMHhmMCwgMHhlNSwgMHg2MiwgMHgyNCwgMHhmZSwgMHg0NCwgMHgyMCwgMHhmYywgMHg0ZCwgMHhmMCwgMHhlNSwgMHg4MiwgMHgyNCwgCisweDA0LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDU0LCAweGI4LCAweGYwLCAweDRjLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweDc0LCAKKzB4MDMsIDB4ZjAsIDB4MTgsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4ZmYsIDB4OGUsIDB4ODMsIDB4MjQsIDB4MDUsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4YzAsIAorMHg4MywgMHhjMCwgMHg4MiwgMHhlMCwgMHhmZCwgMHg3NCwgMHg5NiwgMHgyNSwgMHg2MiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmYSwgMHhmNSwgMHg4MywgCisweGUwLCAweDU0LCAweGZjLCAweDQ0LCAweDAzLCAweGZjLCAweGVkLCAweDRjLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAKKzB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIAorMHgxMiwgMHgzMSwgMHhjNywgMHg3NCwgMHg2ZSwgMHgyNSwgMHg2MiwgMHhmOCwgMHg3NCwgMHgwNCwgMHg0NiwgMHhmNiwgMHg3ZiwgMHgwMCwgMHgyMiwgMHgxMiwgCisweDEwLCAweDAzLCAweDdmLCAweDAyLCAweDEyLCAweDEyLCAweDE5LCAweDc4LCAweDY3LCAweGU2LCAweDQ0LCAweDAyLCAweGY2LCAweGQyLCAweGIwLCAweGQyLCAKKzB4YjEsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4ZDIsIAorMHhiMywgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg5MCwgMHhmYSwgMHg3YiwgMHhmMCwgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg5MCwgMHhmYSwgMHg3YywgCisweGYwLCAweDkwLCAweGZmLCAweGEyLCAweGUwLCAweDkwLCAweGZhLCAweDc5LCAweGYwLCAweDkwLCAweGZmLCAweGIyLCAweGUwLCAweDkwLCAweGZhLCAweDdhLCAKKzB4ZjAsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YTIsIDB4NzQsIDB4NDAsIAorMHhmMCwgMHg5MCwgMHhmZiwgMHhiMiwgMHhmMCwgMHg5MCwgMHhmYSwgMHhlNCwgMHhlNSwgMHhhOCwgMHhmMCwgMHg3NSwgMHhhOCwgMHg4MSwgMHg5MCwgMHhmZiwgCisweDkyLCAweGUwLCAweDYwLCAweDA0LCAweGU0LCAweGYwLCAweDgwLCAweGY2LCAweDkwLCAweGZmLCAweGZkLCAweDc0LCAweDNhLCAweGYwLCAweDQzLCAweDg3LCAKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZmEsIDB4N2IsIDB4ZTAsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4N2MsIDB4ZTAsIAorMHg5MCwgMHhmZiwgMHhiNCwgMHhmMCwgMHg5MCwgMHhmYSwgMHg3OSwgMHhlMCwgMHg5MCwgMHhmZiwgMHhhMiwgMHhmMCwgMHg5MCwgMHhmYSwgMHg3YSwgMHhlMCwgCisweDkwLCAweGZmLCAweGIyLCAweGYwLCAweDkwLCAweGY5LCAweDE3LCAweGUwLCAweDYwLCAweDAyLCAweGMyLCAweGIzLCAweDkwLCAweGZhLCAweGU0LCAweGUwLCAKKzB4ZjUsIDB4YTgsIDB4MDIsIDB4MTAsIDB4ODYsIDB4OGIsIDB4NWMsIDB4OGEsIDB4NWQsIDB4ODksIDB4NWUsIDB4MTIsIDB4MmQsIDB4M2MsIDB4OTAsIDB4ZmEsIAorMHhjMCwgMHgxMiwgMHgxYiwgMHg0MywgMHhhYSwgMHg1ZCwgMHhhOSwgMHg1ZSwgMHg5MCwgMHhmYSwgMHhjMywgMHgxMiwgMHgxYiwgMHg0MywgMHg5MCwgMHhmYSwgCisweGM0LCAweGU0LCAweDc1LCAweGYwLCAweDBhLCAweDEyLCAweDFhLCAweDZjLCAweDkwLCAweGZhLCAweGMzLCAweDEyLCAweDFiLCAweDNhLCAweGU5LCAweDI0LCAKKzB4MDEsIDB4ZjksIDB4ZTQsIDB4M2EsIDB4ZmEsIDB4OTAsIDB4ZmEsIDB4YzYsIDB4MTIsIDB4MWIsIDB4NDMsIDB4YWIsIDB4NWMsIDB4YWEsIDB4NWQsIDB4YTksIAorMHg1ZSwgMHgxMiwgMHgyZCwgMHg0OCwgMHhlMCwgMHhmZiwgMHhjMywgMHgxMywgMHhmMCwgMHhlNCwgMHg3OCwgMHg4MiwgMHhmNiwgMHg5MCwgMHhmYSwgMHhiZSwgCisweGUwLCAweGZmLCAweDc4LCAweDgyLCAweGU2LCAweGMzLCAweDlmLCAweDUwLCAweDRhLCAweDkwLCAweGZhLCAweGMwLCAweDEyLCAweDJkLCAweDFkLCAweGZmLCAKKzB4NzgsIDB4ODMsIDB4ZjYsIDB4OTAsIDB4ZmEsIDB4YzMsIDB4MTIsIDB4MmQsIDB4MWQsIDB4ZmUsIDB4ZjQsIDB4NWYsIDB4ZmYsIDB4NzgsIDB4ODMsIDB4ZjYsIAorMHgxMiwgMHgyZCwgMHgxYSwgMHg1ZSwgMHg0ZiwgMHhmZiwgMHg3OCwgMHg4MywgMHhmNiwgMHgxMiwgMHgyZCwgMHgyMywgMHg3NSwgMHhmMCwgMHgwMiwgMHgxMiwgCisweDFhLCAweDZjLCAweDkwLCAweGZhLCAweGM0LCAweGU0LCAweDc1LCAweGYwLCAweDAyLCAweDEyLCAweDFhLCAweDZjLCAweGFiLCAweDVjLCAweGFhLCAweDVkLCAKKzB4YTksIDB4NWUsIDB4OTAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MWEsIDB4MGIsIDB4MzAsIDB4ZTQsIDB4MDMsIDB4MTIsIDB4MmQsIDB4MzIsIDB4NzgsIDB4ODIsIAorMHgwNiwgMHg4MCwgMHhhYSwgMHhlNCwgMHg5MCwgMHhmYSwgMHhiZiwgMHhmMCwgMHgyMiwgMHg4YiwgMHg1NiwgMHg4YSwgMHg1NywgMHg4OSwgMHg1OCwgMHg5MCwgCisweGZhLCAweGJmLCAweDc0LCAweDA2LCAweGYwLCAweGU0LCAweDkwLCAweGZhLCAweGJlLCAweGYwLCAweDEyLCAweDE5LCAweGYyLCAweDI0LCAweDZlLCAweDYwLCAKKzB4MjYsIDB4MTQsIDB4NzAsIDB4NzAsIDB4MTIsIDB4MmQsIDB4MDksIDB4NjAsIDB4MDksIDB4MjQsIDB4MzAsIDB4NzAsIDB4MTIsIDB4MTIsIDB4MjQsIDB4OTUsIAorMHg4MCwgMHg2MiwgMHgxMiwgMHgyZCwgMHg1MywgMHgxMiwgMHgxZiwgMHgyYywgMHg5MCwgMHhmYSwgMHhiZiwgMHhlZiwgMHhmMCwgMHg4MCwgMHg1NSwgMHg5MCwgCisweGZhLCAweGJmLCAweDc0LCAweDgxLCAweGYwLCAweDgwLCAweDRkLCAweDEyLCAweDJkLCAweDA5LCAweDYwLCAweDA5LCAweDI0LCAweDMwLCAweDcwLCAweDNlLCAKKzB4MTIsIDB4MmMsIDB4NWYsIDB4ODAsIDB4M2YsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDMsIDB4ZjksIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZmEsIDB4N2IsIDB4MDEsIAorMHhjMCwgMHgwMywgMHhjMCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgxMiwgMHgyZCwgMHg1MywgMHg5MCwgMHgwMCwgMHgwNSwgMHgxMiwgMHgxYSwgMHgwYiwgMHhmZCwgCisweDkwLCAweDAwLCAweDA4LCAweDEyLCAweDFhLCAweDk4LCAweGY1LCAweDJlLCAweDg1LCAweGYwLCAweDJkLCAweGQwLCAweDAxLCAweGQwLCAweDAyLCAweGQwLCAKKzB4MDMsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OTAsIDB4ZmEsIDB4YmUsIDB4ZWYsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4ODAsIDB4MDYsIDB4OTAsIDB4ZmEsIAorMHhiZiwgMHg3NCwgMHg4MSwgMHhmMCwgMHg5MCwgMHhmYSwgMHhiZiwgMHhlMCwgMHgxMiwgMHgyZCwgMHg1MywgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHgxYSwgCisweDRhLCAweDkwLCAweGZhLCAweGJlLCAweGUwLCAweGZmLCAweDIyLCAweDhiLCAweDI5LCAweDhhLCAweDJhLCAweDg5LCAweDJiLCAweDhkLCAweDJjLCAweGU1LCAKKzB4MmMsIDB4NzAsIDB4MDMsIDB4YWYsIDB4MmMsIDB4MjIsIDB4MTIsIDB4MmQsIDB4ODIsIDB4NzAsIDB4MTYsIDB4MTIsIDB4MmQsIDB4YTEsIDB4ZTUsIDB4MmQsIAorMHg5MCwgMHhmZiwgMHhmMSwgMHhmMCwgMHgxMiwgMHgzMSwgMHgxYiwgMHg1MCwgMHhmMiwgMHgxMiwgMHgyNiwgMHg2NCwgMHg0MCwgMHgwYiwgMHg3ZiwgMHgwMCwgCisweDIyLCAweDEyLCAweDJkLCAweGExLCAweDEyLCAweDI2LCAweDY0LCAweDUwLCAweGY4LCAweDkwLCAweGZmLCAweGYzLCAweDc0LCAweGExLCAweGYwLCAweGU1LCAKKzB4MmMsIDB4YjQsIDB4MDEsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ZjEsIDB4ZTQsIDB4ZjAsIAorMHhmNSwgMHgyZiwgMHhlNSwgMHgyYywgMHgxNCwgMHhmZiwgMHhlNSwgMHgyZiwgMHhjMywgMHg5ZiwgMHg1MCwgMHgyYSwgMHgxMiwgMHgzMSwgMHgwNCwgMHg0MCwgCisweDAzLCAweGFmLCAweDJmLCAweDIyLCAweGMzLCAweGU1LCAweDJjLCAweDk1LCAweDJmLCAweGZmLCAweGJmLCAweDAyLCAweDA3LCAweDkwLCAweGZmLCAweGYwLCAKKzB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MTIsIDB4MmQsIDB4OTQsIDB4MDUsIDB4MmYsIDB4NzQsIDB4MDEsIDB4MjUsIDB4MmIsIDB4ZjUsIDB4MmIsIDB4ZTQsIAorMHgzNSwgMHgyYSwgMHhmNSwgMHgyYSwgMHg4MCwgMHhjYywgMHgxMiwgMHgzMSwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHgxOCwgMHgyMiwgMHgxMiwgMHgyZCwgCisweDk0LCAweGFmLCAweDJjLCAweDIyLCAweDkwLCAweGZmLCAweGYxLCAweGU1LCAweDJlLCAweGYwLCAweDAyLCAweDMxLCAweDFiLCAweDEyLCAweDEwLCAweDAzLCAKKzB4NzgsIDB4ODQsIDB4MTIsIDB4MjIsIDB4ODIsIDB4MzAsIDB4ZTEsIDB4MDgsIDB4N2YsIDB4MTMsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4MDIsIDB4MjYsIDB4ZmIsIAorMHg3OCwgMHg4NCwgMHhlNiwgMHhmOSwgMHgyNCwgMHgxMiwgMHgxMiwgMHgyMSwgMHhmZiwgMHhlMCwgMHhmZiwgMHgzMCwgMHhlNywgMHg0MCwgMHg1NCwgMHgwMywgCisweDYwLCAweDFlLCAweGU5LCAweGI0LCAweDAzLCAweDBkLCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGUwLCAweDQ0LCAweDA0LCAKKzB4ZjAsIDB4ODAsIDB4NDYsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4ODAsIDB4MzksIAorMHhlOSwgMHhiNCwgMHgwMywgMHgwZCwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgCisweDI4LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDFiLCAweGVmLCAweDU0LCAKKzB4MDMsIDB4NjAsIDB4MTQsIDB4ZTksIDB4YjQsIDB4MDMsIDB4MDksIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4ODAsIDB4MDcsIAorMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHhjMiwgMHhiMywgMHg5MCwgMHhmOSwgMHgxNywgMHhlMCwgMHgwNCwgMHhmMCwgMHhhZiwgCisweDAxLCAweDEyLCAweDIyLCAweDMzLCAweGZkLCAweDEyLCAweDJmLCAweDQ5LCAweDEyLCAweDMwLCAweGVjLCAweDAyLCAweDEwLCAweDg2LCAweDc1LCAweGE4LCAKKzB4NDAsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4OGIsIDB4MDIsIDB4MjcsIDB4NDgsIDB4MDIsIDB4MzAsIDB4Y2YsIAorMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgCisweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAKKzB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIAorMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgyYiwgMHg0YywgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgCisweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAKKzB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIAorMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgCisweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlLCAweGU0LCAweGY1LCAweDIyLCAKKzB4MTIsIDB4MWQsIDB4MTIsIDB4ZTAsIDB4YjQsIDB4MDQsIDB4MGQsIDB4ZTUsIDB4MjIsIDB4MjQsIDB4MDMsIDB4ZmYsIDB4MTIsIDB4MmYsIDB4NzcsIDB4MTIsIAorMHgxZCwgMHgxMiwgMHhlNCwgMHhmMCwgMHgwNSwgMHgyMiwgMHhlNSwgMHgyMiwgMHhjMywgMHg5NCwgMHgwMiwgMHg0MCwgMHhlMywgMHhlNCwgMHhmNSwgMHgyMiwgCisweDc1LCAweGYwLCAweDAyLCAweGU1LCAweDIyLCAweDkwLCAweGZhLCAweDkxLCAweDEyLCAweDFkLCAweDUzLCAweDYwLCAweDJjLCAweDEyLCAweDJjLCAweGI0LCAKKzB4ZWYsIDB4NjAsIDB4NTIsIDB4NzUsIDB4ZjAsIDB4MDIsIDB4ZTUsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4OTEsIDB4MTIsIDB4MWIsIDB4MWMsIDB4ZTQsIDB4ZjAsIAorMHhhMywgMHhmMCwgMHg3NSwgMHhmMCwgMHgwYSwgMHhlNSwgMHgyMiwgMHg5MCwgMHhmYSwgMHg5ZCwgMHgxMiwgMHgxYiwgMHgxYywgMHhlMCwgMHhhMywgMHgzMCwgCisweGU2LCAweDMzLCAweDEyLCAweDFkLCAweDEyLCAweDc0LCAweDA0LCAweGYwLCAweDIyLCAweDc1LCAweGYwLCAweDAyLCAweGU1LCAweDIyLCAweDkwLCAweGZhLCAKKzB4OTUsIDB4MTIsIDB4MWQsIDB4NTMsIDB4NjAsIDB4MTYsIDB4MTIsIDB4MmMsIDB4YjQsIDB4ZWYsIDB4NjAsIDB4MTksIDB4NzUsIDB4ZjAsIDB4MDIsIDB4ZTUsIAorMHgyMiwgMHg5MCwgMHhmYSwgMHg5NSwgMHgxMiwgMHgxYiwgMHgxYywgMHhlNCwgMHhmMCwgMHhhMywgMHhmMCwgMHgyMiwgMHgwNSwgMHgyMiwgMHhlNSwgMHgyMiwgCisweGMzLCAweDk0LCAweDAyLCAweDQwLCAweDliLCAweDIyLCAweGU0LCAweGZmLCAweDkwLCAweGZmLCAweDgzLCAweGUwLCAweDU0LCAweDBmLCAweGZlLCAweGVmLCAKKzB4YzMsIDB4OWUsIDB4NTAsIDB4MTcsIDB4NzQsIDB4ZjAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmUsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTIsIAorMHgxYywgMHgxMSwgMHgxMiwgMHgxYSwgMHgzOCwgMHgwZiwgMHgxMiwgMHgxYywgMHgwMCwgMHg4MCwgMHhkZCwgMHhlZiwgMHhmZCwgMHhjMywgMHhlNSwgMHgzYSwgCisweDlkLCAweGY1LCAweDNhLCAweGU1LCAweDM5LCAweDk0LCAweDAwLCAweGY1LCAweDM5LCAweGQzLCAweGU1LCAweDNhLCAweDk0LCAweDAwLCAweGU1LCAweDM5LCAKKzB4OTQsIDB4MDAsIDB4NDAsIDB4MDYsIDB4ZTQsIDB4OTAsIDB4ZmYsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MWQsIDB4MmYsIDB4MTIsIDB4MWQsIDB4ODQsIAorMHgxMiwgMHgxZCwgMHg3NiwgMHgxMiwgMHgxOSwgMHhmMiwgMHgyNCwgMHg2ZSwgMHg2MCwgMHgxZSwgMHgxNCwgMHg2MCwgMHgxYiwgMHgyNCwgMHg4ZSwgMHg3MCwgCisweDJkLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDFhLCAweDBiLCAweGZmLCAweDI0LCAweGZjLCAweDYwLCAweDAzLCAweDA0LCAweDcwLCAweDFmLCAweGVmLCAKKzB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MGQsIDB4MDIsIDB4MTEsIDB4MTYsIDB4MTIsIDB4MWQsIDB4OGIsIDB4MTIsIDB4MjUsIDB4MzksIDB4MTIsIDB4MWMsIAorMHhkOSwgMHgxMiwgMHgxYSwgMHgwYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgzMSwgMHhiZCwgMHhlNCwgMHhmZiwgMHgxMiwgMHgzMSwgMHhiMSwgMHgyMiwgMHg4YiwgCisweDQ1LCAweDhhLCAweDQ2LCAweDg5LCAweDQ3LCAweDhjLCAweDQ4LCAweDhkLCAweDQ5LCAweGQyLCAweDAwLCAweDEyLCAweDJkLCAweDgyLCAweDcwLCAweDE2LCAKKzB4MTIsIDB4MmQsIDB4YTEsIDB4ZTUsIDB4NDgsIDB4OTAsIDB4ZmYsIDB4ZjEsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4MWIsIDB4NTAsIDB4ZjIsIDB4MTIsIDB4MjksIAorMHgxNCwgMHg0MCwgMHgwYiwgMHg3ZiwgMHgxOCwgMHgyMiwgMHgxMiwgMHgyZCwgMHhhMSwgMHgxMiwgMHgyOSwgMHgxNCwgMHg1MCwgMHhmOCwgMHhlNCwgMHhmNSwgCisweDRiLCAweGU1LCAweDRhLCAweDE0LCAweGZmLCAweGU1LCAweDRiLCAweGMzLCAweDlmLCAweDUwLCAweDE3LCAweDEyLCAweDI5LCAweDA0LCAweDQwLCAweDAzLCAKKzB4N2YsIDB4MTgsIDB4MjIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4MDEsIDB4MjUsIDB4NDcsIDB4ZjUsIDB4NDcsIDB4ZTQsIDB4MzUsIDB4NDYsIDB4ZjUsIDB4NDYsIAorMHg4MCwgMHhkZiwgMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgyOSwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHgxOCwgCisweDIyLCAweDdmLCAweDAwLCAweDIyLCAweGFiLCAweDQ1LCAweGFhLCAweDQ2LCAweGE5LCAweDQ3LCAweDEyLCAweDE5LCAweGYyLCAweDkwLCAweGZmLCAweGYxLCAKKzB4ZjAsIDB4MDIsIDB4MzEsIDB4MWIsIDB4OTAsIDB4ZmYsIDB4ZjEsIDB4ZTUsIDB4NDksIDB4ZjAsIDB4MDIsIDB4MzEsIDB4MWIsIDB4N2IsIDB4MDEsIDB4N2EsIAorMHhmYSwgMHg3OSwgMHhjYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgyMiwgMHhhMCwgMHg5MCwgMHhmYSwgMHhjYywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwOSwgMHgxMiwgCisweDFhLCAweDZjLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDIzLCAweDkwLCAweGZhLCAweGNjLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAKKzB4MWEsIDB4ODIsIDB4ODUsIDB4ZjAsIDB4MmUsIDB4ZjUsIDB4MmQsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OTAsIDB4ZmYsIDB4ZjcsIDB4ZTUsIAorMHgyMywgMHgxMiwgMHgyOSwgMHg3OCwgMHg5MCwgMHhmZiwgMHhmNiwgMHhlNSwgMHgyMywgMHhmMCwgMHg5MCwgMHhmYSwgMHhjYywgMHhlNCwgMHhmMCwgMHhhMywgCisweDc0LCAweDA2LCAweDEyLCAweDI5LCAweDc4LCAweGU1LCAweDIzLCAweDMwLCAweGUwLCAweDA3LCAweDkwLCAweGZmLCAweGZjLCAweDc0LCAweDk0LCAweGYwLCAKKzB4MjIsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4NzQsIDB4OTAsIDB4ZjAsIDB4MjIsIDB4ZjAsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MjMsIDB4OTAsIAorMHhmYSwgMHhjYywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHgxYSwgMHg4MiwgMHg4NSwgMHhmMCwgMHgyZSwgMHhmNSwgMHgyZCwgMHg3ZCwgMHgwMSwgCisweDAyLCAweDI1LCAweGQ3LCAweDkwLCAweGZmLCAweDkzLCAweDc0LCAweDJhLCAweGYwLCAweDkwLCAweGZmLCAweGZmLCAweGUwLCAweDYwLCAweDA2LCAweDkwLCAKKzB4ZmYsIDB4ZmMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4OTEsIDB4ZTAsIDB4NDQsIDB4OTAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4ZjksIDB4MTUsIAorMHhmMCwgMHhhMywgMHhmMCwgMHgxMiwgMHgyYSwgMHg3OCwgMHgxMiwgMHgxNiwgMHg0MiwgMHgxMiwgMHgyZiwgMHhjZCwgMHg3ZSwgMHgwNywgMHg3ZiwgMHhkMCwgCisweDEyLCAweDExLCAweGUyLCAweDdlLCAweDBmLCAweDdmLCAweGEwLCAweDEyLCAweDExLCAweGZjLCAweGU0LCAweDc4LCAweDc3LCAweGY2LCAweDc4LCAweDc3LCAKKzB4ZTYsIDB4ZmYsIDB4YzMsIDB4OTQsIDB4MDYsIDB4NTAsIDB4MGIsIDB4NzQsIDB4NmUsIDB4MmYsIDB4ZjgsIDB4ZTQsIDB4ZjYsIDB4NzgsIDB4NzcsIDB4MDYsIAorMHg4MCwgMHhlYywgMHg3ZiwgMHgwMywgMHgxMiwgMHgyZSwgMHhiMywgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHgyMCwgMHhlNCwgMHgwNSwgMHg3ZiwgMHgwNCwgCisweDEyLCAweDJlLCAweGIzLCAweDkwLCAweGZmLCAweDliLCAweGU0LCAweGYwLCAweDkwLCAweGZmLCAweDlhLCAweGYwLCAweDkwLCAweGZmLCAweGU4LCAweGUwLCAKKzB4NTQsIDB4MWYsIDB4ZjAsIDB4ZDIsIDB4YTgsIDB4MjIsIDB4MTUsIDB4NjUsIDB4YTgsIDB4NjUsIDB4YTYsIDB4MDcsIDB4MzAsIDB4MDgsIDB4MDUsIDB4MTIsIAorMHgxMSwgMHg2NiwgMHg4MCwgMHhmOCwgMHhkMiwgMHgwOCwgMHhhOCwgMHg2NSwgMHhlNiwgMHhmZiwgMHhiNCwgMHgwMywgMHgwZiwgMHg3OCwgMHg3YywgMHg3NiwgCisweGZmLCAweDA4LCAweDc2LCAweGUwLCAweDA4LCAweDc2LCAweGZmLCAweDA4LCAweDc2LCAweGEwLCAweDgwLCAweDBkLCAweDc4LCAweDdjLCAweDc2LCAweGZmLCAKKzB4MDgsIDB4NzYsIDB4ZTIsIDB4MDgsIDB4NzYsIDB4ZmYsIDB4MDgsIDB4NzYsIDB4YjAsIDB4NzgsIDB4ODAsIDB4NzYsIDB4ZmEsIDB4MDgsIDB4NzYsIDB4OWIsIAorMHhlZiwgMHgyNCwgMHhmZCwgMHg3NSwgMHhmMCwgMHgwYSwgMHhhNCwgMHhhZSwgMHhmMCwgMHgxMiwgMHgyMiwgMHg5MiwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmZiwgCisweDc5LCAweDQ4LCAweDc4LCAweDY4LCAweDEyLCAweDFiLCAweDMxLCAweGE4LCAweDY1LCAweGU2LCAweDI0LCAweGZkLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAKKzB4ZmYsIDB4YWUsIDB4ZjAsIDB4NzgsIDB4NmEsIDB4MTIsIDB4MjIsIDB4OTIsIDB4NzksIDB4MDgsIDB4NzgsIDB4NmIsIDB4MTIsIDB4MWIsIDB4MzEsIDB4NzgsIAorMHg2ZCwgMHhlZiwgMHgxMiwgMHgyMiwgMHg5MiwgMHgwNSwgMHg2NSwgMHgyMiwgMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHg1NCwgMHhhYiwgMHhmMCwgMHhlMCwgCisweDQ0LCAweDIwLCAweGYwLCAweDkwLCAweGZhLCAweGUzLCAweDc0LCAweDAyLCAweGYwLCAweDdiLCAweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGNjLCAweGU0LCAKKzB4ZjUsIDB4MmQsIDB4ZjUsIDB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4N2UsIDB4MDAsIDB4OTAsIDB4ZmEsIDB4ZTEsIDB4ZWUsIDB4ZjAsIAorMHhhMywgMHhlZiwgMHhmMCwgMHg2NCwgMHgwMSwgMHg3MCwgMHgxMCwgMHg5MCwgMHhmYSwgMHhjYywgMHhlMCwgMHhiNCwgMHg1MiwgMHgwOSwgMHg5MCwgMHhmOSwgCisweDE1LCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDgwLCAweDI5LCAweDkwLCAweGZhLCAweGUxLCAweGUwLCAweDcwLCAweDA0LCAweGEzLCAweGUwLCAweDY0LCAKKzB4MDEsIDB4NzAsIDB4MTAsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTAsIDB4YjQsIDB4MTAsIDB4MDksIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4NDQsIDB4MTAsIAorMHhmMCwgMHg4MCwgMHgwZCwgMHg5MCwgMHhmYSwgMHhlMywgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgCisweDkwLCAweGZmLCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweDc4LCAweDhhLCAweGVmLCAweGY2LCAweDEyLCAKKzB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIDB4MzMsIDB4MzAsIDB4ZTAsIDB4MjUsIDB4MTIsIDB4MjIsIDB4MDcsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4NzgsIAorMHg2YiwgMHgxMiwgMHgxYiwgMHgyOCwgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHgxYSwgMHgwYiwgMHgzMCwgMHhlNywgMHgwOSwgMHg5MCwgMHgwMCwgMHgwMiwgCisweGU0LCAweDEyLCAweDFhLCAweDRhLCAweDgwLCAweGU5LCAweDEyLCAweDIyLCAweDA3LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDEyLCAweDIyLCAweDMzLCAKKzB4MzAsIDB4ZTEsIDB4MWUsIDB4MTIsIDB4MjEsIDB4ZTksIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4NWMsIDB4NzgsIDB4NjgsIDB4MTIsIAorMHgxYiwgMHgyOCwgMHg5MCwgMHgwMCwgMHgwMiwgMHg3NCwgMHg4MCwgMHgxMiwgMHgxYSwgMHg0YSwgMHgxMiwgMHgyMSwgMHhlOSwgMHhlMCwgMHg0NCwgMHg4MCwgCisweGYwLCAweDEyLCAweDMxLCAweGM3LCAweGU0LCAweGZmLCAweDEyLCAweDMwLCAweGVjLCAweDAyLCAweDEwLCAweDg2LCAweDAzLCAweDY4LCAweDAxLCAweGZmLCAKKzB4NDgsIDB4MDMsIDB4NmIsIDB4MDEsIDB4ZmYsIDB4MDgsIDB4MDIsIDB4NjYsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZmEsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MDAsIAorMHgwMCwgMHg0NCwgMHhmYSwgMHg5MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmYSwgMHhhZiwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmYSwgMHg3YiwgCisweDAwLCAweDAwLCAweDQyLCAweGZhLCAweDc5LCAweDAwLCAweDAwLCAweDQyLCAweGY5LCAweDZhLCAweGZmLCAweGZmLCAweDQyLCAweGZhLCAweDc3LCAweDAwLCAKKzB4MDAsIDB4NDMsIDB4ZjksIDB4MTgsIDB4MGEsIDB4MzIsIDB4MDIsIDB4NDEsIDB4ZjksIDB4NjUsIDB4MjAsIDB4NDEsIDB4ZjksIDB4NjYsIDB4MjAsIDB4NDEsIAorMHhmOSwgMHg2MywgMHgwMCwgMHg0MSwgMHhmOSwgMHg2NCwgMHgwMCwgMHg0NCwgMHhmOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmOSwgCisweDE1LCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweDE3LCAweDAwLCAweDAxLCAweDIwLCAweDAwLCAweDQxLCAweGY4LCAweDA0LCAweDAwLCAweDAwLCAweDEyLCAKKzB4MTAsIDB4MDMsIDB4NzgsIDB4ODUsIDB4ZWYsIDB4ZjYsIDB4MTIsIDB4MzAsIDB4OTMsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4NzgsIDB4ODUsIDB4ZTYsIDB4ZmYsIAorMHgyNCwgMHgxMiwgMHgxMiwgMHgyMSwgMHhmZiwgMHhlMCwgMHhmZSwgMHgzMCwgMHhlNywgMHgxNiwgMHhlZiwgMHhiNCwgMHgwMywgMHgwOSwgMHg5MCwgMHhmZiwgCisweDllLCAweGUwLCAweDU0LCAweGZhLCAweGYwLCAweDgwLCAweDIyLCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGY1LCAweGYwLCAweDgwLCAweDE5LCAKKzB4ZWUsIDB4NTQsIDB4MDMsIDB4NjAsIDB4MTQsIDB4ZWYsIDB4YjQsIDB4MDMsIDB4MDksIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIAorMHg4MCwgMHgwNywgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHhmOSwgMHgxNywgMHhlMCwgMHgxNCwgMHhmMCwgMHhlMCwgCisweDcwLCAweDAyLCAweGQyLCAweGIzLCAweDAyLCAweDEwLCAweDg2LCAweDEyLCAweDFkLCAweDZjLCAweGU1LCAweDNhLCAweDY0LCAweDA5LCAweDcwLCAweDA0LCAKKzB4ZTUsIDB4MzksIDB4NjQsIDB4MDEsIDB4NjAsIDB4NDgsIDB4YzMsIDB4ZTUsIDB4M2EsIDB4OTQsIDB4MDgsIDB4ZTUsIDB4MzksIDB4OTQsIDB4MDAsIDB4NDAsIAorMHgxMSwgMHg3ZiwgMHgwOCwgMHhlZiwgMHhlNSwgMHgzYSwgMHg5NCwgMHgwOCwgMHhmNSwgMHgzYSwgMHhlNSwgMHgzOSwgMHg5NCwgMHgwMCwgMHhmNSwgMHgzOSwgCisweDgwLCAweDA1LCAweGFmLCAweDNhLCAweDEyLCAweDFkLCAweDg0LCAweGU0LCAweGZlLCAweGVlLCAweGMzLCAweDlmLCAweDUwLCAweDE5LCAweDEyLCAweDFjLCAKKzB4MTEsIDB4MTIsIDB4MTksIDB4ZjIsIDB4ZmQsIDB4NzQsIDB4ZjgsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmUsIDB4ZjUsIDB4ODMsIDB4ZWQsIAorMHhmMCwgMHgwZSwgMHgxMiwgMHgxYywgMHgwMCwgMHg4MCwgMHhlMiwgMHhlZiwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhmZiwgMHg4MSwgMHhmMCwgMHgyMiwgMHg4YiwgCisweDU5LCAweDhhLCAweDVhLCAweDg5LCAweDViLCAweDEyLCAweDJkLCAweDQ4LCAweDcwLCAweDA1LCAweGEzLCAweDc0LCAweDA4LCAweGYwLCAweDIyLCAweGFiLCAKKzB4NTksIDB4YWEsIDB4NWEsIDB4YTksIDB4NWIsIDB4MTIsIDB4MmQsIDB4M2MsIDB4OTAsIDB4ZmEsIDB4YzYsIDB4MTIsIDB4MWIsIDB4NDMsIDB4ZTUsIDB4NWIsIAorMHgyNCwgMHgwMywgMHhmOSwgMHhlNCwgMHgzNSwgMHg1YSwgMHhmYSwgMHg5MCwgMHhmYSwgMHhjMCwgMHgxMiwgMHgxYiwgMHg0MywgMHhlNCwgMHg5MCwgMHhmYSwgCisweGJmLCAweGYwLCAweDc4LCAweDhiLCAweGY2LCAweDkwLCAweGZhLCAweGJlLCAweGUwLCAweGZmLCAweDc4LCAweDhiLCAweGU2LCAweGMzLCAweDlmLCAweDUwLCAKKzB4MTIsIDB4MTIsIDB4MmQsIDB4MWEsIDB4ZmYsIDB4MTIsIDB4MmQsIDB4MjMsIDB4MTIsIDB4MmQsIDB4MzYsIDB4NzgsIDB4OGIsIDB4MDYsIDB4MTIsIDB4MmQsIAorMHgzMiwgMHg4MCwgMHhlMiwgMHgyMiwgMHhhZCwgMHgwNywgMHhhYywgMHgwNiwgMHg5MCwgMHgzMSwgMHg0ZCwgMHhlNCwgMHg5MywgMHhmZiwgMHg3OCwgMHg3NCwgCisweGY2LCAweDU0LCAweDBmLCAweDEyLCAweDFjLCAweGY4LCAweGUwLCAweDA4LCAweDc2LCAweDAwLCAweDA4LCAweGY2LCAweDE4LCAweDEyLCAweDFjLCAweDI5LCAKKzB4YzMsIDB4MzMsIDB4Y2UsIDB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4NzgsIDB4NzUsIDB4ZWUsIDB4ZjYsIDB4MDgsIDB4ZWYsIDB4ZjYsIDB4ZWUsIAorMHg0NCwgMHhmOCwgMHgxOCwgMHhmNiwgMHhlZiwgMHgwOCwgMHhmNiwgMHg5MCwgMHhmZiwgMHg3YSwgMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHg3ZiwgMHgwMCwgCisweDIyLCAweDc4LCAweDc1LCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGVjLCAweGYwLCAweGEzLCAweGVkLCAweGYwLCAKKzB4OTAsIDB4ZmYsIDB4N2EsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MjIsIDB4YWIsIDB4NTYsIDB4YWEsIDB4NTcsIDB4YTksIDB4NTgsIDB4OTAsIAorMHgwMCwgMHgwMywgMHgxMiwgMHgxYSwgMHgwYiwgMHg1NCwgMHhmMCwgMHgyNCwgMHhhMCwgMHgyMiwgMHg5MCwgMHhmYSwgMHhjNiwgMHgxMiwgMHgxYiwgMHgzYSwgCisweDAyLCAweDE5LCAweGYyLCAweDkwLCAweGZhLCAweGMwLCAweDEyLCAweDFiLCAweDNhLCAweGVmLCAweDEyLCAweDFhLCAweDM4LCAweDkwLCAweGZhLCAweGM3LCAKKzB4ZTQsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4YzEsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MDIsIDB4MWEsIDB4NmMsIDB4OTAsIDB4MDAsIDB4MDgsIDB4MTIsIAorMHgxYSwgMHg5OCwgMHhhYSwgMHhmMCwgMHhmOSwgMHg3YiwgMHgwMSwgMHgyMiwgMHg5MCwgMHgwMCwgMHgwNSwgMHgxMiwgMHgxYSwgMHgwYiwgMHg5MCwgMHhmYSwgCisweGJlLCAweGYwLCAweDIyLCAweGFiLCAweDU2LCAweGFhLCAweDU3LCAweGE5LCAweDU4LCAweDIyLCAweDkwLCAweGZhLCAweGRhLCAweGUwLCAweGZmLCAweDdlLCAKKzB4MDAsIDB4YzMsIDB4OTAsIDB4ZmEsIDB4ZDQsIDB4ZTAsIDB4OWYsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4ZDMsIDB4ZTAsIDB4OWUsIDB4ZjAsIDB4OTAsIDB4ZmEsIAorMHhkNSwgMHhlZSwgMHg4ZiwgMHhmMCwgMHgxMiwgMHgxYSwgMHg2YywgMHhlZiwgMHgyNSwgMHg1MSwgMHhmNSwgMHg1MSwgMHhlZSwgMHgzNSwgMHg1MCwgMHhmNSwgCisweDUwLCAweDIyLCAweDkwLCAweGZmLCAweGYwLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweGZhLCAweGUzLCAKKzB4ZTAsIDB4NjQsIDB4MDMsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZjIsIDB4ZTAsIDB4YWIsIDB4MjksIDB4YWEsIDB4MmEsIDB4YTksIDB4MmIsIDB4MDIsIDB4MWEsIAorMHgzOCwgMHg5MCwgMHhmZiwgMHhmMywgMHg3NCwgMHhhMCwgMHhmMCwgMHgyMiwgMHg4ZiwgMHg2NCwgMHhlZCwgMHg3MCwgMHgwZiwgMHhlNSwgMHg2NCwgMHhiNCwgCisweDAzLCAweDA1LCAweDdmLCAweDAxLCAweDAyLCAweDMxLCAweDMyLCAweDdmLCAweDAyLCAweDAyLCAweDMxLCAweDMyLCAweGFmLCAweDY0LCAweDEyLCAweDJhLCAKKzB4MDYsIDB4NzQsIDB4NmUsIDB4MjUsIDB4NjQsIDB4ZjgsIDB4ZTYsIDB4MzAsIDB4ZTIsIDB4MGIsIDB4ZDIsIDB4MDksIDB4MTIsIDB4MWMsIDB4ODMsIDB4ZTAsIAorMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHgwMiwgMHhjMiwgMHgwOSwgMHhlNSwgMHg2NCwgMHhiNCwgMHgwMywgMHgwNywgMHg3ZiwgMHg4MSwgMHgxMiwgMHgzMSwgCisweDMyLCAweDgwLCAweDA1LCAweDdmLCAweDgyLCAweDEyLCAweDMxLCAweDMyLCAweDMwLCAweDA5LCAweDA3LCAweDEyLCAweDFjLCAweDgzLCAweGUwLCAweDQ0LCAKKzB4ODAsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4YzcsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4OTAsIDB4ZmYsIDB4ZmQsIDB4ZTAsIDB4NDQsIDB4NjAsIDB4ZjAsIAorMHhkMiwgMHgwMSwgMHg5MCwgMHhmZiwgMHhmYywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmZiwgMHgwMCwgMHhlMCwgMHgzMCwgMHhlNywgMHgxMywgCisweDkwLCAweGZmLCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDM1LCAweDgwLCAweDkwLCAweGZmLCAweGZjLCAweGUwLCAweDQ0LCAweDAxLCAKKzB4ZjAsIDB4ODAsIDB4MGQsIDB4MTIsIDB4MWQsIDB4MmYsIDB4NTMsIDB4MzUsIDB4N2YsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIAorMHg5MCwgMHhmZiwgMHg4MSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHgxMiwgMHgwMiwgMHhiMCwgMHgxMiwgMHgxZCwgMHgzNywgMHgwMiwgMHgxMCwgMHg4NiwgCisweDEyLCAweDEwLCAweDAzLCAweDc4LCAweDg5LCAweGVmLCAweGY2LCAweGQyLCAweDAwLCAweDEyLCAweDJhLCAweDA2LCAweDkwLCAweGY5LCAweDY3LCAweDEyLCAKKzB4MWIsIDB4M2EsIDB4ZTksIDB4MjQsIDB4MDMsIDB4ZjksIDB4ZTQsIDB4M2EsIDB4ZmEsIDB4YzAsIDB4MDIsIDB4NzgsIDB4ODAsIDB4ZTYsIDB4ZmUsIDB4MDgsIAorMHhlNiwgMHhhYSwgMHgwNiwgMHhmOCwgMHhhYywgMHgwMiwgMHg3ZCwgMHgwMSwgMHhkMCwgMHgwMiwgMHgxMiwgMHgyMiwgMHgyNSwgMHgxMiwgMHgzMSwgMHhjNywgCisweDc4LCAweDg5LCAweGU2LCAweGZmLCAweDEyLCAweDEzLCAweDNmLCAweDEyLCAweDMwLCAweGVjLCAweDAyLCAweDEwLCAweDg2LCAweDhmLCAweDYzLCAweDEyLCAKKzB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIDB4MDcsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIAorMHhlMCwgMHg1NCwgMHgzZiwgMHhmMCwgMHgwOCwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHg4ZSwgMHg4MywgMHgyNCwgMHgwYiwgMHgxMiwgMHgyMSwgMHhmMywgCisweGUwLCAweDU0LCAweGY4LCAweGYwLCAweDEyLCAweDMxLCAweGM3LCAweDc0LCAweDZlLCAweDI1LCAweDYzLCAweGY4LCAweDc0LCAweGZiLCAweDU2LCAweGY2LCAKKzB4N2YsIDB4MDAsIDB4MjIsIDB4OGYsIDB4MjMsIDB4YzIsIDB4MDgsIDB4MTIsIDB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIDB4MTIsIDB4NzgsIDB4N2UsIDB4MTIsIAorMHgyMSwgMHhlYiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgyMiwgMHg0YSwgMHgxMiwgMHgyMSwgMHhlZiwgMHhlMCwgMHgyMCwgMHhlMCwgMHhmNiwgCisweGVmLCAweDI0LCAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDNlLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGY4LCAweGYwLCAweDEyLCAweDMxLCAweGM3LCAKKzB4YWYsIDB4MjMsIDB4MTIsIDB4MTMsIDB4M2YsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4MTIsIDB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIDB4NGEsIDB4MjQsIAorMHgwNiwgMHgxMiwgMHgyMSwgMHhmMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgyMiwgMHgyZCwgMHg5MCwgMHgwMCwgMHgwMywgMHgxMiwgMHgyMiwgMHg1MiwgMHgyNCwgCisweDA1LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDkwLCAweDAwLCAweDA0LCAweDEyLCAweDFhLCAweDRhLCAweDEyLCAweDMxLCAweGM3LCAweDdkLCAweDAyLCAKKzB4ZTQsIDB4ZmYsIDB4MTIsIDB4MmYsIDB4MTgsIDB4MDIsIDB4MTAsIDB4ODYsIDB4YWUsIDB4MDUsIDB4MTIsIDB4MWMsIDB4ZGUsIDB4ZWYsIDB4MTIsIDB4MWEsIAorMHg0YSwgMHgwZSwgMHgwZSwgMHgwZSwgMHhlZSwgMHhkMywgMHg5NSwgMHgzYywgMHhlNCwgMHg5NSwgMHgzYiwgMHg0MCwgMHgwMiwgMHhhZSwgMHgzYywgMHhlZSwgCisweGQzLCAweDk0LCAweDA4LCAweDc0LCAweDgwLCAweDk0LCAweDgxLCAweDQwLCAweDBhLCAweDdlLCAweDAzLCAweDkwLCAweDAwLCAweDAyLCAweDc0LCAweDAyLCAKKzB4MTIsIDB4MWEsIDB4NGEsIDB4YWYsIDB4MDYsIDB4MTIsIDB4MzEsIDB4YjEsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZWQsIDB4NTQsIDB4MDMsIDB4NjQsIDB4MDEsIAorMHg2MCwgMHgwMywgMHg3ZiwgMHgxMCwgMHgyMiwgMHhlZCwgMHg1NCwgMHg3YywgMHhjMywgMHg5NCwgMHgwNCwgMHg1MCwgMHgwMywgMHg3ZiwgMHgwYiwgMHgyMiwgCisweDc0LCAweDZlLCAweDJlLCAweGY4LCAweDc0LCAweDAyLCAweDQ2LCAweGY2LCAweDc0LCAweDk2LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZhLCAKKzB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4N2YsIDB4MDAsIDB4MjIsIDB4YmYsIDB4MDMsIDB4MDYsIDB4N2MsIDB4ZmYsIDB4N2QsIDB4ZTAsIDB4ODAsIDB4MDQsIAorMHg3YywgMHhmZiwgMHg3ZCwgMHhlMiwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgCisweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDc0LCAweDZlLCAweDJmLCAweGY4LCAweDc0LCAweDA0LCAweDQ2LCAweGY2LCAweDdmLCAKKzB4MDAsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4ZTUsIDB4M2EsIDB4NjQsIDB4MDksIDB4NzAsIDB4MDQsIDB4ZTUsIDB4MzksIDB4NjQsIDB4MDEsIDB4NjAsIAorMHgxNiwgMHg5MCwgMHhmZiwgMHg4MywgMHhlMCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhjMywgMHhlNSwgMHgzYSwgMHg5ZiwgMHhlNSwgMHgzOSwgMHg5NCwgMHgwMCwgCisweDQwLCAweDA1LCAweDEyLCAweDI4LCAweDE2LCAweDgwLCAweDAzLCAweDEyLCAweDMxLCAweGJkLCAweDAyLCAweDEwLCAweDg2LCAweDkwLCAweGZmLCAweGZjLCAKKzB4ZTAsIDB4MjAsIDB4ZTcsIDB4MWYsIDB4YzIsIDB4YWYsIDB4N2QsIDB4ZmYsIDB4YWMsIDB4MDUsIDB4MWQsIDB4ZWMsIDB4NjAsIDB4MTUsIDB4N2UsIDB4MDQsIAorMHg3ZiwgMHgwMCwgMHhlZiwgMHgxZiwgMHhhYSwgMHgwNiwgMHg3MCwgMHgwMSwgMHgxZSwgMHg0YSwgMHg2MCwgMHhlYywgMHg5MCwgMHhmZiwgMHg5MiwgMHhlNCwgCisweGYwLCAweDgwLCAweGVmLCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweDc4LCAweDY2LCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGZmLCAweDMwLCAweGUwLCAKKzB4MTIsIDB4MzAsIDB4ZTEsIDB4MGYsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4N2YsIDB4MDQsIDB4MTIsIDB4MTIsIDB4MTksIAorMHgxMiwgMHgxZCwgMHg0NiwgMHgwMiwgMHgxMCwgMHg4NiwgMHg4ZSwgMHg1ZiwgMHg4ZiwgMHg2MCwgMHhlNSwgMHg2MCwgMHgxNSwgMHg2MCwgMHhhZSwgMHg1ZiwgCisweDcwLCAweDAyLCAweDE1LCAweDVmLCAweGQzLCAweDk0LCAweDAwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA5LCAweDdlLCAweDA3LCAweDdmLCAweGQwLCAKKzB4MTIsIDB4MGYsIDB4ZGMsIDB4ODAsIDB4ZTUsIDB4MjIsIDB4MTEsIDB4OTQsIDB4MmQsIDB4ZjYsIDB4MjMsIDB4ZWYsIDB4MzEsIDB4YTMsIDB4MmYsIDB4ZjQsIAorMHgyZiwgMHhhMiwgMHgzMCwgMHhiMiwgMHgyZSwgMHhlNiwgMHgyNiwgMHg2ZCwgMHgyYiwgMHhhZiwgMHgzMCwgMHg1NSwgMHgzMCwgMHg3NCwgMHgxZCwgMHhiNCwgCisweDJlLCAweDQwLCAweDJhLCAweGU4LCAweDBlLCAweDEyLCAweDEwLCAweDAzLCAweDc4LCAweDg2LCAweDEyLCAweDIyLCAweDgyLCAweDIwLCAweGUxLCAweDA3LCAKKzB4N2YsIDB4MTIsIDB4MTIsIDB4MzAsIDB4ZWMsIDB4ODAsIDB4MGEsIDB4NzgsIDB4ODYsIDB4ZTYsIDB4ZmYsIDB4MTIsIDB4MjMsIDB4NDksIDB4MTIsIDB4MzAsIAorMHhlYywgMHgwMiwgMHgxMCwgMHg4NiwgMHgxMiwgMHgxMCwgMHgwMywgMHg3OCwgMHg4NywgMHgxMiwgMHgyMiwgMHg4MiwgMHgyMCwgMHhlMiwgMHgwNywgMHg3ZiwgCisweDExLCAweDEyLCAweDMwLCAweGVjLCAweDgwLCAweDBhLCAweDc4LCAweDg3LCAweGU2LCAweGZmLCAweDEyLCAweDJlLCAweDdkLCAweDEyLCAweDMwLCAweGVjLCAKKzB4MDIsIDB4MTAsIDB4ODYsIDB4OGYsIDB4NjEsIDB4MTIsIDB4MmUsIDB4N2QsIDB4YWYsIDB4NjEsIDB4MTIsIDB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIDB4MTIsIAorMHgxMiwgMHgzMSwgMHhjNywgMHg3NCwgMHg2ZSwgMHgyNSwgMHg2MSwgMHhmOCwgMHg3NCwgMHhmZCwgMHg1NiwgMHhmNiwgMHhhZiwgMHg2MSwgMHgxMiwgMHgxMywgCisweDNmLCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweGU1LCAweDNhLCAweDY0LCAweDA5LCAweDcwLCAweDA0LCAweGU1LCAweDM5LCAweDY0LCAweDAxLCAweDYwLCAKKzB4MDUsIDB4MTIsIDB4MmMsIDB4MDcsIDB4ODAsIDB4MDYsIDB4MTIsIDB4MWQsIDB4NjQsIDB4MTIsIDB4MWQsIDB4NmMsIDB4MDIsIDB4MTAsIDB4ODYsIDB4MTIsIAorMHgyOSwgMHg5MywgMHgxMiwgMHgxMiwgMHhiYiwgMHg5MCwgMHhmOCwgMHgwNCwgMHhlMCwgMHhmZiwgMHg2MCwgMHgwNSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHgxMiwgCisweDU4LCAweDEyLCAweDI5LCAweDFkLCAweDEyLCAweDEyLCAweGY3LCAweDEyLCAweDExLCAweDc0LCAweDgwLCAweGUzLCAweDEyLCAweDFjLCAweGRlLCAweGVmLCAKKzB4MTIsIDB4MWEsIDB4NGEsIDB4ZTQsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzQsIDB4ZWYsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MzEsIDB4YmQsIDB4ZTQsIDB4ZmYsIAorMHgxMiwgMHgzMSwgMHhiMSwgMHgyMiwgMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHhmZiwgMHg1NCwgMHhhMCwgMHg2MCwgMHhmNywgMHhlZiwgMHgzMCwgMHhlNSwgCisweDA4LCAweDkwLCAweGZmLCAweGYwLCAweDQ0LCAweDIwLCAweGYwLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAweDkwLCAweGZmLCAweGYwLCAweGUwLCAweGZmLCAKKzB4NTQsIDB4MjgsIDB4NjAsIDB4ZjcsIDB4ZWYsIDB4MzAsIDB4ZTUsIDB4MDgsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4YzMsIDB4MjIsIAorMHhkMywgMHgyMiwgMHhlZiwgMHgzMCwgMHhlNywgMHgwOCwgMHgxMiwgMHgxYywgMHg5NSwgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHgyMiwgMHhlZiwgMHgxMiwgCisweDFjLCAweGU4LCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDIyLCAweDgxLCAweDAxLCAweDgyLCAweDAyLCAweDgzLCAweDAzLCAweDg3LCAweDQwLCAweDAwLCAKKzB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzgsIDB4N2UsIDB4MTIsIDB4MjIsIAorMHgwOSwgMHhhMywgMHhhMywgMHhlMCwgMHhmZiwgMHgzMCwgMHhlNywgMHgwNiwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHgyMiwgMHg4NSwgCisweDNiLCAweDM5LCAweDg1LCAweDNjLCAweDNhLCAweDkwLCAweGZmLCAweDgyLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGEzLCAweGUwLCAweDU0LCAweDdmLCAKKzB4ZjAsIDB4MjIsIDB4ZTQsIDB4ZmUsIDB4ZWUsIDB4OTAsIDB4MzEsIDB4NDcsIDB4OTMsIDB4YjUsIDB4MDcsIDB4MDIsIDB4ZDMsIDB4MjIsIDB4MGUsIDB4YmUsIAorMHgwNywgMHhmMiwgMHhjMywgMHgyMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgyOCwgMHgzOCwgMHgwMSwgMHg4MSwgMHgxMCwgMHgwYSwgMHgwMiwgMHgwMCwgMHgwMCwgCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDAzLCAweDdmLCAweDAyLCAweDEyLCAweDEwLCAweDkyLCAweDEyLCAweDFkLCAweDQ2LCAweDAyLCAweDEwLCAKKzB4ODYsIDB4NzUsIDB4MzksIDB4MDAsIDB4OGYsIDB4M2EsIDB4MTIsIDB4MWMsIDB4MzAsIDB4MTIsIDB4MmMsIDB4MDcsIDB4MjIsIDB4MTIsIDB4MWQsIDB4NmMsIAorMHgxMiwgMHgxZCwgMHgyZiwgMHgxMiwgMHgxZCwgMHg2NCwgMHgyMiwgMHhjMiwgMHgwOCwgMHgyMiwgCit9OworCisjdW5kZWYgSU1BR0VfVkVSU0lPTl9OQU1FCisKKyN1bmRlZiBJTUFHRV9BUlJBWV9OQU1FCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19pb25zcC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2lvbnNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyZTAzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19pb25zcC5oCkBAIC0wLDAgKzEsNDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJSU9OU1AuSAkJRGVmaW5pdGlvbnMgZm9yIEkvTyBOZXR3b3JrcyBTZXJpYWwgUHJvdG9jb2wKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTctMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGVzZSBkZWZpbml0aW9ucyBhcmUgdXNlZCBieSBib3RoIGtlcm5lbC1tb2RlIGRyaXZlciBhbmQgdGhlCisgKglwZXJpcGhlcmFsIGZpcm13YXJlIGFuZCBNVVNUIGJlIGtlcHQgaW4gc3luYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBkYXRhIHRvIGFuZCBmcm9tIGFsbCBwb3J0cyBvbiB0aGUgcGVyaXBoZXJhbCBpcyBtdWx0aXBsZXhlZAordGhyb3VnaCBhIHNpbmdsZSBlbmRwb2ludCBwYWlyIChFUDEgc2luY2UgaXQgc3VwcG9ydHMgNjQtYnl0ZQorTWF4UGFja2V0U2l6ZSkuIFRoZXJlZm9yZSwgdGhlIGRhdGEsIGNvbW1hbmRzLCBhbmQgc3RhdHVzIGZvcgorZWFjaCBwb3J0IG11c3QgYmUgcHJlY2VkZWQgYnkgYSBzaG9ydCBoZWFkZXIgaWRlbnRpZnlpbmcgdGhlCitkZXN0aW5hdGlvbiBwb3J0LiBUaGUgaGVhZGVyIGFsc28gaWRlbnRpZmllcyB0aGUgYnl0ZXMgdGhhdCBmb2xsb3cKK2FzIGRhdGEgb3IgYXMgY29tbWFuZC9zdGF0dXMgaW5mby4KKworSGVhZGVyIGZvcm1hdCwgZmlyc3QgYnl0ZToKKworICAgIENMTExMUFBQCisgICAgLS0tLS0tLS0KKyAgICB8IHwJIHwtLS0tLS0gUG9ydCBOdW1iZXI6CTAtNworICAgIHwgfC0tLS0tLS0tLSBMZW5ndGg6CU1TQiBiaXRzIG9mIGxlbmd0aAorICAgIHwtLS0tLS0tLS0tLSBEYXRhL0NvbW1hbmQ6CTAgPSBEYXRhIGhlYWRlcgorCQkJCTEgPSBDbWQgLyBTdGF0dXMgKENtZCBpZiBPVVQsIFN0YXR1cyBpZiBJTikKKworVGhpcyBnaXZlcyAyIHBvc3NpYmxlIGZvcm1hdHM6CisKKworICAgIERhdGEgaGVhZGVyOgkJMExMTExQUFAJTExMTExMTEwKKyAgICA9PT09PT09PT09PT0KKworICAgIFdoZXJlIChMTExMLExMTExMTEwpIGlzIDEyLWJpdCBsZW5ndGggb2YgZGF0YSB0aGF0IGZvbGxvd3MgZm9yCisgICAgcG9ydCBudW1iZXIgKFBQUCkuIFRoZSBsZW5ndGggaXMgMC1iYXNlZCAoMC1GRkYgbWVhbnMgMC00MDk1CisgICAgYnl0ZXMpLiBUaGUgfjRLIGxpbWl0IGFsbG93cyB0aGUgaG9zdCBkcml2ZXIgKHdoaWNoIGRlYWxzIGluCisgICAgdHJhbnNmZXIgcmVxdWVzdHMgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhY2tldHMpIHRvIHdyaXRlIGEKKyAgICBsYXJnZSBjaHVuayBvZiBkYXRhIGluIGEgc2luZ2xlIHJlcXVlc3QuIE5vdGUsIGhvd2V2ZXIsIHRoYXQKKyAgICB0aGUgbGVuZ3RoIG11c3QgYWx3YXlzIGJlIDw9IHRoZSBjdXJyZW50IFR4Q3JlZGl0cyBmb3IgYSBnaXZlbgorICAgIHBvcnQgZHVlIHRvIGJ1ZmZlcmluZyBsaW1pdGF0aW9ucyBvbiB0aGUgcGVyaXBoZXJhbC4KKworCisgICAgQ21kL1N0YXR1cyBoZWFkZXI6CQkxY2NjY1BQUAlbIENDQ0NDQ0NDLAkgUGFyYW1zIF0uLi4KKyAgICA9PT09PT09PT09PT09PT09PT0KKworICAgIFdoZXJlIChjY2NjKSBvciAoY2NjYyxDQ0NDQ0NDQykgaXMgdGhlIGNtZCBvciBzdGF0dXMgaWRlbnRpZmllci4KKyAgICBGcmVxdWVudGx5LXVzZWQgdmFsdWVzIGFyZSBlbmNvZGVkIGFzIChjY2NjKSwgbG9uZ2VyIG9uZXMgdXNpbmcKKyAgICAoY2NjYyxDQ0NDQ0NDQykuIFN1YnNlcXVlbnQgYnl0ZXMgYXJlIG9wdGlvbmFsIHBhcmFtZXRlcnMgYW5kIGFyZQorICAgIHNwZWNpZmljIHRvIHRoZSBjbWQgb3Igc3RhdHVzIGNvZGUuIFRoaXMgbWF5IGluY2x1ZGUgYSBsZW5ndGgKKyAgICBmb3IgY29tbWFuZCBhbmQgc3RhdHVzIGNvZGVzIHRoYXQgbmVlZCB2YXJpYWJsZS1sZW5ndGggcGFyYW1ldGVycy4KKworCitJbiBhZGRpdGlvbiwgd2UgdXNlIGFub3RoZXIgaW50ZXJydXB0IHBpcGUgKGVuZHBvaW50KSB3aGljaCB0aGUgaG9zdCBwb2xscworcGVyaW9kaWNhbGx5IGZvciBmbG93IGNvbnRyb2wgaW5mb3JtYXRpb24uIFRoZSBwZXJpcGhlcmFsLCB3aGVuIHRoZXJlIGhhcworYmVlbiBhIGNoYW5nZSwgc2VuZHMgdGhlIGZvbGxvd2luZyAxMC1ieXRlIHBhY2tldDoKKworCVJSUlJSUlJSUlJSUlJSUlIKKwlUMFQwVDBUMFQwVDBUMFQwCisJVDFUMVQxVDFUMVQxVDFUMQorCVQyVDJUMlQyVDJUMlQyVDIKKwlUM1QzVDNUM1QzVDNUM1QzCisKK1RoZSBmaXJzdCBmaWVsZCBpcyB0aGUgMTYtYml0IFJ4Qnl0ZXNBdmFpbCBmaWVsZCwgd2hpY2ggaW5kaWNhdGVzIHRoZQorbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIG1heSBiZSByZWFkIGJ5IHRoZSBob3N0IGZyb20gRVAxLiBUaGlzIGlzIG5lY2Vzc2FyeToKKyhhKSBiZWNhdXNlIE9TUjIuMSBoYXMgYSBidWcgd2hpY2ggY2F1c2VzIGRhdGEgbG9zcyBpZiB0aGUgcGVyaXBoZXJhbCByZXR1cm5zCitmZXdlciBieXRlcyB0aGFuIHRoZSBob3N0IGV4cGVjdHMgdG8gcmVhZCwgYW5kIChiKSBiZWNhdXNlLCBvbiBNaWNyb3NvZnQKK3BsYXRmb3JtcyBhdCBsZWFzdCwgYW4gb3V0c3RhbmRpbmcgcmVhZCBwb3N0ZWQgb24gRVAxIGNvbnN1bWVzIGFib3V0IDM1JSBvZgordGhlIENQVSBqdXN0IHBvbGxpbmcgdGhlIGRldmljZSBmb3IgZGF0YS4KKworVGhlIG5leHQgNCBmaWVsZHMgYXJlIHRoZSAxNi1iaXQgVHhDcmVkaXRzIGZvciBlYWNoIHBvcnQsIHdoaWNoIGluZGljYXRlIGhvdworbWFueSBieXRlcyB0aGUgaG9zdCBpcyBhbGxvd2VkIHRvIHNlbmQgb24gRVAxIGZvciB0cmFuc21pdCB0byBhIGdpdmVuIHBvcnQuCitBZnRlciBhbiBPUEVOX1BPUlQgY29tbWFuZCwgdGhlIEVkZ2Vwb3J0IHNlbmRzIHRoZSBpbml0aWFsIFR4Q3JlZGl0cyBmb3IgdGhhdAorcG9ydC4KKworQWxsIDE2LWJpdCBmaWVsZHMgYXJlIHNlbnQgaW4gbGl0dGxlLWVuZGlhbiAoSW50ZWwpIGZvcm1hdC4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLworLy8gRGVmaW5lIGZvcm1hdCBvZiBJbnRlcnJ1cHRTdGF0dXMgcGFja2V0IHJldHVybmVkIGZyb20gdGhlCisvLyBJbnRlcnJ1cHQgcGlwZQorLy8KKworc3RydWN0IGludF9zdGF0dXNfcGt0IHsKKwlfX3UxNiAgICAgIFJ4Qnl0ZXNBdmFpbDsJCSAgICAvLyBBZGRpdGlvbmFsIGJ5dGVzIGF2YWlsYWJsZSB0bworCQkJCQkJICAgIC8vIGJlIHJlYWQgZnJvbSBCdWxrIElOIHBpcGUKKwlfX3UxNiAgICAgIFR4Q3JlZGl0c1sgTUFYX1JTMjMyX1BPUlRTIF07ICAgLy8gQWRkaXRpb25hbCBzcGFjZSBhdmFpbGFibGUgaW4KKwkJCQkJCSAgICAvLyBnaXZlbiBwb3J0J3MgVHhCdWZmZXIKK307CisKKworI2RlZmluZSBHRVRfSU5UX1NUQVRVU19TSVpFKE51bVBvcnRzKSAoc2l6ZW9mKF9fdTE2KSArIChzaXplb2YoX191MTYpICogKE51bVBvcnRzKSkpCisKKworCisvLworLy8gRGVmaW5lIGNtZC9zdGF0dXMgaGVhZGVyIHZhbHVlcyBhbmQgbWFjcm9zIHRvIGV4dHJhY3QgdGhlbS4KKy8vCisvLwlEYXRhOgkJMExMTExQUFAgTExMTExMTEwKKy8vCUNtZC9TdGF0OgkxY2NjY1BQUCBDQ0NDQ0NDQworCisjZGVmaW5lCUlPU1BfREFUQV9IRFJfU0laRQkJMgorI2RlZmluZQlJT1NQX0NNRF9IRFJfU0laRQkJMgorCisjZGVmaW5lCUlPU1BfTUFYX0RBVEFfTEVOR1RICQkweDBGRkYJCS8vIDEyIGJpdHMgLT4gNEsKKworI2RlZmluZQlJT1NQX1BPUlRfTUFTSwkJCTB4MDcJCS8vIE1hc2sgdG8gaXNvbGF0ZSBwb3J0IG51bWJlcgorI2RlZmluZQlJT1NQX0NNRF9TVEFUX0JJVAkJMHg4MAkJLy8gSWYgc2V0LCB0aGlzIGlzIGNvbW1hbmQvc3RhdHVzIGhlYWRlcgorCisjZGVmaW5lIElTX0NNRF9TVEFUX0hEUihCeXRlMSkJCSgoQnl0ZTEpICYgSU9TUF9DTURfU1RBVF9CSVQpCisjZGVmaW5lIElTX0RBVEFfSERSKEJ5dGUxKQkJKCEgSVNfQ01EX1NUQVRfSERSKEJ5dGUxKSkKKworI2RlZmluZQlJT1NQX0dFVF9IRFJfUE9SVChCeXRlMSkJCSgoX191OCkgKChCeXRlMSkgJiBJT1NQX1BPUlRfTUFTSykpCisjZGVmaW5lCUlPU1BfR0VUX0hEUl9EQVRBX0xFTihCeXRlMSwgQnl0ZTIpCSgoX191MTYpICggKChfX3UxNikoKEJ5dGUxKSAmIDB4NzgpKSA8PCA1KSB8IChCeXRlMikpCisjZGVmaW5lCUlPU1BfR0VUX1NUQVRVU19DT0RFKEJ5dGUxKQkJKChfX3U4KSAoKChCeXRlMSkgJiAgMHg3OCkgPj4gMykpCisKKworLy8KKy8vIFRoZXNlIG1hY3JvcyBidWlsZCB0aGUgMXN0IGFuZCAybmQgYnl0ZXMgZm9yIGEgZGF0YSBoZWFkZXIKKy8vCisjZGVmaW5lCUlPU1BfQlVJTERfREFUQV9IRFIxKFBvcnQsIExlbikJCSgoX191OCkgKCgoUG9ydCkgfCAoKF9fdTgpICgoKF9fdTE2KSAoTGVuKSkgPj4gNSkgJiAweDc4ICkpKSkKKyNkZWZpbmUJSU9TUF9CVUlMRF9EQVRBX0hEUjIoUG9ydCwgTGVuKQkJKChfX3U4KSAoTGVuKSkKKworCisvLworLy8gVGhlc2UgbWFjcm9zIGJ1aWxkIHRoZSAxc3QgYW5kIDJuZCBieXRlcyBmb3IgYSBjb21tYW5kIGhlYWRlcgorLy8KKyNkZWZpbmUJSU9TUF9CVUlMRF9DTURfSERSMShQb3J0LCBDbWQpCQkoKF9fdTgpICggSU9TUF9DTURfU1RBVF9CSVQgfCAoUG9ydCkgfAkoKF9fdTgpICgoQ21kKSA8PCAzKSkgKSkKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8JRGVmaW5lIHZhbHVlcyBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgcGFyYW1ldGVycworLy8JKHNlbnQgZnJvbSBIb3N0IHRvIEVkZ2Vwb3J0KQorLy8KKy8vCTFjY2NjUFBQIFAxUDFQMVAxIFsgUDJQMlAyUDJQMiBdLi4uCisvLworLy8JY2NjYzoJMDAtMDcJMi1ieXRlIGNvbW1hbmRzLiBXcml0ZSBVQVJUIHJlZ2lzdGVyIDAtNyB3aXRoCisvLwkJCQkJdmFsdWUgaW4gUDEuIFNlZSAxNjY1MC5IIGZvciBkZWZpbml0aW9ucyBvZgorLy8JCQkJCVVBUlQgcmVnaXN0ZXIgbnVtYmVycyBhbmQgY29udGVudHMuCisvLworLy8JCTA4LTBCCTMtYnl0ZSBjb21tYW5kczoJCQkJCT09PT0gUDEgPT09PQk9PT09IFAyID09PT0KKy8vCQkJCQkwOAlhdmFpbGFibGUgZm9yIGV4cGFuc2lvbgorLy8JCQkJCTA5CTEtcGFyYW0gY29tbWFuZHMJCUNvbW1hbmQgQ29kZQlQYXJhbQorLy8JCQkJCTBBCWF2YWlsYWJsZSBmb3IgZXhwYW5zaW9uCisvLwkJCQkJMEIJYXZhaWxhYmxlIGZvciBleHBhbnNpb24KKy8vCisvLwkJMEMtMEQJNC1ieXRlIGNvbW1hbmRzLglQMSA9IGV4dGVuZGVkIGNtZCBhbmQgUDIsUDMgPSBwYXJhbXMKKy8vCQkJCQkJQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCisvLworLy8JCTBFLTBGCU4tYnl0ZSBjb21tYW5kczoJUDEgPSBudW0gYnl0ZXMgYWZ0ZXIgUDEgKGllLCBUb3RhbExlbiAtIDIpCisvLwkJCQkJCVAyID0gZXh0ZW5kZWQgY21kLCBQMy4uUG4gPSBwYXJhbWV0ZXJzLgorLy8JCQkJCQlDdXJyZW50bHkgdW5pbXBsZW1lbnRlZC4KKy8vCisKKyNkZWZpbmUJSU9TUF9XUklURV9VQVJUX1JFRyhuKQkoKG4pICYgMHgwNykJLy8gVWFydFJlZ1sgbiBdIDo9IFAxCisKKy8vIFJlZ2lzdGVyIG51bWJlcnMgYW5kIGNvbnRlbnRzCisvLyBkZWZpbmVkIGluIDE2NTU0LkguCisKKy8vCQkJCQkweDA4CQkvLyBBdmFpbGFibGUgZm9yIGV4cGFuc2lvbi4KKyNkZWZpbmUJSU9TUF9FWFRfQ01ECQkJMHgwOQkJLy8gUDEgPSBDb21tYW5kIGNvZGUgKGRlZmluZWQgYmVsb3cpCisKKy8vIFAyID0gUGFyYW1ldGVyCisKKy8vCisvLyBFeHRlbmRlZCBDb21tYW5kIHZhbHVlcywgdXNlZCB3aXRoIElPU1BfRVhUX0NNRCwgbWF5CisvLyBvciBtYXkgbm90IHVzZSBwYXJhbWV0ZXIgUDIuCisvLworCisjZGVmaW5lCUlPU1BfQ01EX09QRU5fUE9SVAkJMHgwMAkJLy8gRW5hYmxlIGludHMsIGluaXQgVUFSVC4gKE5PIFBBUkFNKQorI2RlZmluZQlJT1NQX0NNRF9DTE9TRV9QT1JUCQkweDAxCQkvLyBEaXNhYmxlIGludHMsIGZsdXNoIGJ1ZmZlcnMuIChOTyBQQVJBTSkKKyNkZWZpbmUJSU9TUF9DTURfQ0hBU0VfUE9SVAkJMHgwMgkJLy8gV2FpdCBmb3IgRWRnZXBvcnQgVFggYnVmZmVycyB0byBlbXB0eS4gKE5PIFBBUkFNKQorI2RlZmluZSBJT1NQX0NNRF9TRVRfUlhfRkxPVwkJMHgwMwkJLy8gU2V0IFJ4IEZsb3cgQ29udHJvbCBpbiBFZGdlcG9ydAorI2RlZmluZSBJT1NQX0NNRF9TRVRfVFhfRkxPVwkJMHgwNAkJLy8gU2V0IFR4IEZsb3cgQ29udHJvbCBpbiBFZGdlcG9ydAorI2RlZmluZSBJT1NQX0NNRF9TRVRfWE9OX0NIQVIJCTB4MDUJCS8vIFNldCBYT04gQ2hhcmFjdGVyIGluIEVkZ2Vwb3J0CisjZGVmaW5lIElPU1BfQ01EX1NFVF9YT0ZGX0NIQVIJCTB4MDYJCS8vIFNldCBYT0ZGIENoYXJhY3RlciBpbiBFZGdlcG9ydAorI2RlZmluZSBJT1NQX0NNRF9SWF9DSEVDS19SRVEJCTB4MDcJCS8vIFJlcXVlc3QgRWRnZXBvcnQgdG8gaW5zZXJ0IGEgQ2hlY2twb2ludCBpbnRvCisKKy8vIHRoZSByZWNlaXZlIGRhdGEgc3RyZWFtIChQYXJhbWV0ZXIgPSAxIGJ5dGUgc2VxdWVuY2UgbnVtYmVyKQorCisjZGVmaW5lIElPU1BfQ01EX1NFVF9CUkVBSwkJMHgwOAkJLy8gVHVybiBvbiB0aGUgQlJFQUsgKExDUiBiaXQgNikKKyNkZWZpbmUgSU9TUF9DTURfQ0xFQVJfQlJFQUsJCTB4MDkJCS8vIFR1cm4gb2ZmIHRoZSBCUkVBSyAoTENSIGJpdCA2KQorCisKKy8vCisvLyBEZWZpbmUgbWFjcm9zIHRvIHNpbXBsaWZ5IGJ1aWxkaW5nIG9mIElPU1AgY21kcworLy8KKworI2RlZmluZQlNQUtFX0NNRF9XUklURV9SRUcocHBCdWYsIHBMZW4sIFBvcnQsIFJlZywgVmFsKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCQlcCisJCSgqKHBwQnVmKSlbMF0gPSBJT1NQX0JVSUxEX0NNRF9IRFIxKCAoUG9ydCksIElPU1BfV1JJVEVfVUFSVF9SRUcoUmVnKSApOwlcCisJCSgqKHBwQnVmKSlbMV0gPSAoVmFsKTsJCQkJCQkJCVwKKwkJCQkJCQkJCQkJCVwKKwkJKnBwQnVmICs9IDI7CQkJCQkJCQkJXAorCQkqcExlbiAgKz0gMjsJCQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZQlNQUtFX0NNRF9FWFRfQ01EKHBwQnVmLCBwTGVuLCBQb3J0LCBFeHRDbWQsIFBhcmFtKQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCVwKKwkJKCoocHBCdWYpKVswXSA9IElPU1BfQlVJTERfQ01EX0hEUjEoIChQb3J0KSwgSU9TUF9FWFRfQ01EICk7CQkJXAorCQkoKihwcEJ1ZikpWzFdID0gKEV4dENtZCk7CQkJCQkJCVwKKwkJKCoocHBCdWYpKVsyXSA9IChQYXJhbSk7CQkJCQkJCVwKKwkJCQkJCQkJCQkJCVwKKwkJKnBwQnVmICs9IDM7CQkJCQkJCQkJXAorCQkqcExlbiAgKz0gMzsJCQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLwlEZWZpbmUgZm9ybWF0IG9mIGZsb3cgY29udHJvbCBjb21tYW5kcworLy8JKHNlbnQgZnJvbSBIb3N0IHRvIEVkZ2Vwb3J0KQorLy8KKy8vCTExMDAxUFBQIEZsb3dDbWQgRmxvd1R5cGVzCisvLworLy8JTm90ZSB0aGF0IHRoZSAnRmxvd1R5cGVzJyBwYXJhbWV0ZXIgaXMgYSBiaXQgbWFzazsgdGhhdCBpcywKKy8vCW1vcmUgdGhhbiBvbmUgZmxvdyBjb250cm9sIHR5cGUgY2FuIGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lLgorLy8JRmxvd1R5cGVzID0gMCBtZWFucyAnbm8gZmxvdyBjb250cm9sJy4KKy8vCisKKy8vCisvLwlJT1NQX0NNRF9TRVRfUlhfRkxPVworLy8KKy8vCVRlbGxzIEVkZ2Vwb3J0IGhvdyBpdCBjYW4gc3RvcCBpbmNvbWluZyBVQVJUIGRhdGEKKy8vCisvLyAgRXhhbXBsZSBmb3IgUG9ydCAwCisvLwlQMCA9IDExMDAxMDAwCisvLyAgUDEgPSBJT1NQX0NNRF9TRVRfUlhfRkxPVworLy8gIFAyID0gQml0IG1hc2sgYXMgZm9sbG93czoKKworI2RlZmluZSBJT1NQX1JYX0ZMT1dfUlRTCQkweDAxCS8vIEVkZ2Vwb3J0IGRyb3BzIFJUUyB0byBzdG9wIGluY29taW5nIGRhdGEKKyNkZWZpbmUgSU9TUF9SWF9GTE9XX0RUUgkJMHgwMgkvLyBFZGdlcG9ydCBkcm9wcyBEVFIgdG8gc3RvcCBpbmNvbWluZyBkYXRhCisjZGVmaW5lIElPU1BfUlhfRkxPV19EU1JfU0VOU0lUSVZJVFkJMHgwNAkvLyBJZ25vcmVzIFJ4IGRhdGEgdW5sZXNzIERTUiBoaWdoCisKKy8vIE5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgZmlybXdhcmUuCisjZGVmaW5lIElPU1BfUlhfRkxPV19YT05fWE9GRgkJMHgwOAkvLyBFZGdlcG9ydCBzZW5kcyBYT0ZGIGNoYXIgdG8gc3RvcCBpbmNvbWluZyBkYXRhLgorCisvLyBIb3N0IG11c3QgaGF2ZSBwcmV2aW91c2x5IHByb2dyYW1tZWQgdGhlCisvLyBYT04vWE9GRiB2YWx1ZXMgd2l0aCBTRVRfWE9OL1NFVF9YT0ZGCisvLyBiZWZvcmUgZW5hYmxpbmcgdGhpcyBiaXQuCisKKy8vCisvLwlJT1NQX0NNRF9TRVRfVFhfRkxPVworLy8KKy8vCVRlbGxzIEVkZ2Vwb3J0IHdoYXQgc2lnbmFsKHMpIHdpbGwgc3RvcCBpdCBmcm9tIHRyYW5zbWl0dGluZyBVQVJUIGRhdGEKKy8vCisvLyAgRXhhbXBsZSBmb3IgUG9ydCAwCisvLwlQMCA9IDExMDAxMDAwCisvLyAgUDEgPSBJT1NQX0NNRF9TRVRfVFhfRkxPVworLy8gIFAyID0gQml0IG1hc2sgYXMgZm9sbG93czoKKworI2RlZmluZSBJT1NQX1RYX0ZMT1dfQ1RTCQkweDAxCS8vIEVkZ2Vwb3J0IHN0b3BzIFR4IGlmIENUUyBsb3cKKyNkZWZpbmUgSU9TUF9UWF9GTE9XX0RTUgkJMHgwMgkvLyBFZGdlcG9ydCBzdG9wcyBUeCBpZiBEU1IgbG93CisjZGVmaW5lIElPU1BfVFhfRkxPV19EQ0QJCTB4MDQJLy8gRWRnZXBvcnQgc3RvcHMgVHggaWYgRENEIGxvdworI2RlZmluZSBJT1NQX1RYX0ZMT1dfWE9OX1hPRkYJCTB4MDgJLy8gRWRnZXBvcnQgc3RvcHMgVHggdXBvbiByZWNlaXZpbmcgWE9GRiBjaGFyLgorCisvLyBIb3N0IG11c3QgaGF2ZSBwcmV2aW91c2x5IHByb2dyYW1tZWQgdGhlCisvLyBYT04vWE9GRiB2YWx1ZXMgd2l0aCBTRVRfWE9OL1NFVF9YT0ZGCisvLyBiZWZvcmUgZW5hYmxpbmcgdGhpcyBiaXQuCisjZGVmaW5lIElPU1BfVFhfRkxPV19YT0ZGX0NPTlRJTlVFCTB4MTAJLy8gSWYgbm90IHNldCwgRWRnZXBvcnQgc3RvcHMgVHggd2hlbgorCisvLyBzZW5kaW5nIFhPRkYgaW4gb3JkZXIgdG8gZml4IGJyb2tlbgorLy8gc3lzdGVtcyB0aGF0IGludGVycHJldCB0aGUgbmV4dAorLy8gcmVjZWl2ZWQgY2hhciBhcyBYT04uCisvLyBJZiBzZXQsIEVkZ2Vwb3J0IGNvbnRpbnVlcyBUeAorLy8gbm9ybWFsbHkgYWZ0ZXIgdHJhbnNtaXR0aW5nIFhPRkYuCisvLyBOb3QgY3VycmVudGx5IGltcGxlbWVudGVkIGJ5IGZpcm13YXJlLgorI2RlZmluZSBJT1NQX1RYX1RPR0dMRV9SVFMJCTB4MjAJLy8gRWRnZXBvcnQgZHJpdmVzIFJUUyBhcyBhIHRydWUgaGFsZi1kdXBsZXgKKworLy8gUmVxdWVzdC10by1TZW5kIHNpZ25hbDogaXQgaXMgcmFpc2VkIGJlZm9yZQorLy8gYmVnaW5uaW5nIHRyYW5zbWlzc2lvbiBhbmQgbG93ZXJlZCBhZnRlcgorLy8gdGhlIGxhc3QgVHggY2hhciBsZWF2ZXMgdGhlIFVBUlQuCisvLyBOb3QgY3VycmVudGx5IGltcGxlbWVudGVkIGJ5IGZpcm13YXJlLgorCisvLworLy8JSU9TUF9DTURfU0VUX1hPTl9DSEFSCisvLworLy8JU2V0cyB0aGUgY2hhcmFjdGVyIHdoaWNoIEVkZ2Vwb3J0IHRyYW5zbWl0cy9pbnRlcnByZXRzIGFzIFhPTi4KKy8vCU5vdGU6IFRoaXMgY29tbWFuZCBNVVNUIGJlIHNlbnQgYmVmb3JlIHNlbmRpbmcgYSBTRVRfUlhfRkxPVyBvcgorLy8JU0VUX1RYX0ZMT1cgd2l0aCB0aGUgWE9OX1hPRkYgYml0IHNldC4KKy8vCisvLyAgRXhhbXBsZSBmb3IgUG9ydCAwCisvLwlQMCA9IDExMDAxMDAwCisvLyAgUDEgPSBJT1NQX0NNRF9TRVRfWE9OX0NIQVIKKy8vICBQMiA9IDB4MTEKKworCisvLworLy8JSU9TUF9DTURfU0VUX1hPRkZfQ0hBUgorLy8KKy8vCVNldHMgdGhlIGNoYXJhY3RlciB3aGljaCBFZGdlcG9ydCB0cmFuc21pdHMvaW50ZXJwcmV0cyBhcyBYT0ZGLgorLy8JTm90ZTogVGhpcyBjb21tYW5kIG11c3QgYmUgc2VudCBiZWZvcmUgc2VuZGluZyBhIFNFVF9SWF9GTE9XIG9yCisvLwlTRVRfVFhfRkxPVyB3aXRoIHRoZSBYT05fWE9GRiBiaXQgc2V0LgorLy8KKy8vICBFeGFtcGxlIGZvciBQb3J0IDAKKy8vCVAwID0gMTEwMDEwMDAKKy8vICBQMSA9IElPU1BfQ01EX1NFVF9YT0ZGX0NIQVIKKy8vICBQMiA9IDB4MTMKKworCisvLworLy8JSU9TUF9DTURfUlhfQ0hFQ0tfUkVRCisvLworLy8gIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGFzc2lzdCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIAorLy8gIElPQ1RMX1NFUklBTF9QVVJHRSBXaW5kb3dzIElPQ1RMLiAgCisvLyAgVGhpcyBJT1NQIGNvbW1hbmQgdHJpZXMgdG8gcGxhY2UgYSBtYXJrZXIgYXQgdGhlIGVuZCBvZiB0aGUgUlggCisvLyAgcXVldWUgaW4gdGhlIEVkZ2Vwb3J0LiBJZiB0aGUgRWRnZXBvcnQgUlggcXVldWUgaXMgZnVsbCB0aGVuIAorLy8gIHRoZSBDaGVjayB3aWxsIGJlIGRpc2NhcmRlZC4gIAorLy8gIEl0IGlzIHVwIHRvIHRoZSBkZXZpY2UgZHJpdmVyIHRvIHRpbWVvdXQgd2FpdGluZyBmb3IgdGhlIAorLy8gIFJYX0NIRUNLX1JTUC4gIElmIGEgUlhfQ0hFQ0tfUlNQIGlzIHJlY2VpdmVkLCB0aGUgZHJpdmVyIGlzIAorLy8Jc3VyZSB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIGVkZ2Vwb3J0IGFuZCAKKy8vCW1heSBub3cgcHVyZ2UgYW55IGludGVybmFsIFJYIGJ1ZmZlcnMuCisvLyAgTm90ZSB0YXQgdGhlIHNlcXVlbmNlIG51bWJlcnMgbWF5IGJlIHVzZWQgdG8gZGV0ZWN0IGxvc3QgCisvLyAgQ0hFQ0tfUkVRcy4KKworLy8gIEV4YW1wbGUgZm9yIFBvcnQgMAorLy8JUDAgPSAxMTAwMTAwMAorLy8gIFAxID0gSU9TUF9DTURfUlhfQ0hFQ0tfUkVRCisvLyAgUDIgPSBTZXF1ZW5jZSBudW1iZXIKKworCisvLyAgUmVzcG9uc2Ugd2lsbCBiZToKKy8vICBQMSA9IElPU1BfRVhUX1JYX0NIRUNLX1JTUAorLy8gIFAyID0gUmVxdWVzdCBTZXF1ZW5jZSBudW1iZXIKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLwlEZWZpbmUgdmFsdWVzIGZvciBzdGF0dXMgYW5kIHN0YXR1cyBwYXJhbWV0ZXJzCisvLwkocmVjZWl2ZWQgYnkgSG9zdCBmcm9tIEVkZ2Vwb3J0KQorLy8KKy8vCTFzc3NzUFBQIFAxUDFQMVAxIFsgUDJQMlAyUDJQMiBdLi4uCisvLworLy8gCXNzc3M6CTAwLTA3CTItYnl0ZSBzdGF0dXMuCXNzc3MgaWRlbnRpZmllcyB3aGljaCBVQVJUIHJlZ2lzdGVyCisvLwkJCQkJaGFzIGNoYW5nZWQgdmFsdWUsIGFuZCB0aGUgbmV3IHZhbHVlIGlzIGluIFAxLgorLy8JCQkJCU5vdGUgdGhhdCB0aGUgc3NzcyB2YWx1ZXMgZG8gbm90IGNvcnJlc3BvbmQgdG8gdGhlCisvLwkJCQkJMTY1NTQgcmVnaXN0ZXIgbnVtYmVycyBnaXZlbiBpbiAxNjU1NC5ILiBJbnN0ZWFkLAorLy8JCQkJCXNlZSBiZWxvdyBmb3IgZGVmaW5pdGlvbnMgb2YgdGhlIHNzc3MgbnVtYmVycworLy8JCQkJCXVzZWQgaW4gdGhpcyBzdGF0dXMgbWVzc2FnZS4KKy8vCisvLwkJMDgtMEIJMy1ieXRlIHN0YXR1czoJCQkJCT09PT0gUDEgPT09PQk9PT09IFAyID09PT0KKy8vCQkJCQkwOAlMU1JfREFUQToJCU5ldyBMU1IJCUVycm9yZWQgYnl0ZQorLy8JCQkJCTA5CTEtcGFyYW0gcmVzcG9uc2VzCVJlc3BvbnNlIENvZGUJUGFyYW0KKy8vCQkJCQkwQQlPUEVOX1JTUDoJCUluaXRpYWxNc3IJVHhCdWZmZXJTaXplCisvLwkJCQkJMEIJYXZhaWxhYmxlIGZvciBleHBhbnNpb24KKy8vCisvLwkJMEMtMEQJNC1ieXRlIHN0YXR1cy4JUDEgPSBleHRlbmRlZCBzdGF0dXMgY29kZSBhbmQgUDIsUDMgPSBwYXJhbXMKKy8vCQkJCQlOb3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorLy8KKy8vCQkwRS0wRglOLWJ5dGUgc3RhdHVzOglQMSA9IG51bSBieXRlcyBhZnRlciBQMSAoaWUsIFRvdGFsTGVuIC0gMikKKy8vCQkJCQlQMiA9IGV4dGVuZGVkIHN0YXR1cywgUDMuLlBuID0gcGFyYW1ldGVycy4KKy8vCQkJCQlOb3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorLy8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVNTU1MgdmFsdWVzIGZvciAyLWJ5dGUgc3RhdHVzIG1lc3NhZ2VzICgwLTgpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZQlJT1NQX1NUQVRVU19MU1IJCQkweDAwCS8vIFAxIGlzIG5ldyB2YWx1ZSBvZiBMU1IgcmVnaXN0ZXIuCisKKy8vIEJpdHMgZGVmaW5lZCBpbiAxNjU1NC5ILiBFZGdlcG9ydAorLy8gcmV0dXJucyB0aGlzIGluIG9yZGVyIHRvIHJlcG9ydAorLy8gbGluZSBzdGF0dXMgZXJyb3JzIChvdmVycnVuLAorLy8gcGFyaXR5LCBmcmFtaW5nLCBicmVhaykuIFRoaXMgZm9ybQorLy8gaXMgdXNlZCB3aGVuIGEgZXJyb3JlZCByZWNlaXZlIGRhdGEKKy8vIGNoYXJhY3RlciB3YXMgTk9UIHByZXNlbnQgaW4gdGhlCisvLyBVQVJUIHdoZW4gdGhlIExTUiBlcnJvciBvY2N1cnJlZAorLy8gKGllLCB3aGVuIExTUiBiaXQgMCA9IDApLgorCisjZGVmaW5lCUlPU1BfU1RBVFVTX01TUgkJCTB4MDEJLy8gUDEgaXMgbmV3IHZhbHVlIG9mIE1TUiByZWdpc3Rlci4KKworLy8gQml0cyBkZWZpbmVkIGluIDE2NTU0LkguIEVkZ2Vwb3J0CisvLyByZXR1cm5zIHRoaXMgaW4gb3JkZXIgdG8gcmVwb3J0CisvLyBjaGFuZ2VzIGluIG1vZGVtIHN0YXR1cyBsaW5lcworLy8gKENUUywgRFNSLCBSSSwgQ0QpCisvLyAKKworLy8JCQkJCTB4MDIJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisvLwkJCQkJMHgwMwkvLyAKKy8vCQkJCQkweDA0CS8vIAorLy8JCQkJCTB4MDUJLy8gCisvLwkJCQkJMHgwNgkvLyAKKy8vCQkJCQkweDA3CS8vIAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglTU1NTIHZhbHVlcyBmb3IgMy1ieXRlIHN0YXR1cyBtZXNzYWdlcyAoOC1BKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUJSU9TUF9TVEFUVVNfTFNSX0RBVEEJCTB4MDgJLy8gUDEgaXMgbmV3IHZhbHVlIG9mIExTUiByZWdpc3RlciAoc2FtZSBhcyBTVEFUVVNfTFNSKQorCisvLyBQMiBpcyBlcnJvcmVkIGNoYXJhY3RlciByZWFkIGZyb20KKy8vICAgIFJ4RklGTyBhZnRlciBMU1IgcmVwb3J0ZWQgYW4gZXJyb3IuCQkJCQkJCQkJCQkJCQorCisjZGVmaW5lCUlPU1BfRVhUX1NUQVRVUwkJCTB4MDkJLy8gUDEgaXMgc3RhdHVzL3Jlc3BvbnNlIGNvZGUsIHBhcmFtIGluIFAyLgorCisKKy8vIFJlc3BvbnNlIENvZGVzIChQMSB2YWx1ZXMpIGZvciAzLWJ5dGUgc3RhdHVzIG1lc3NhZ2VzCisKKyNkZWZpbmUJSU9TUF9FWFRfU1RBVFVTX0NIQVNFX1JTUAkwCS8vIFJlcGx5IHRvIENIQVNFX1BPUlQgY21kLiBQMiBpcyBvdXRjb21lOgorI2RlZmluZQlJT1NQX0VYVF9TVEFUVVNfQ0hBU0VfUEFTUwkwCS8vIAlQMiA9IDA6IEFsbCBUeCBkYXRhIGRyYWluZWQgc3VjY2Vzc2Z1bGx5CisjZGVmaW5lCUlPU1BfRVhUX1NUQVRVU19DSEFTRV9GQUlMCTEJLy8JUDIgPSAxOiBUaW1lZCBvdXQgKHN0dWNrIGR1ZSB0byBmbG93CisKKy8vCQkJY29udHJvbCBmcm9tIHJlbW90ZSBkZXZpY2UpLgorCisjZGVmaW5lCUlPU1BfRVhUX1NUQVRVU19SWF9DSEVDS19SU1AJMQkvLyBSZXBseSB0byBSWF9DSEVDSyBjbWQuIFAyIGlzIHNlcXVlbmNlIG51bWJlcgorCisKKyNkZWZpbmUgSU9TUF9TVEFUVVNfT1BFTl9SU1AJCTB4MEEJLy8gUmVwbHkgdG8gT1BFTl9QT1JUIGNtZC4KKworLy8gUDEgaXMgSW5pdGlhbCBNU1IgdmFsdWUKKy8vIFAyIGlzIGVuY29kZWQgVHhCdWZmZXIgU2l6ZToKKy8vCVR4QnVmZmVyU2l6ZSA9IChQMiArIDEpICogNjQKKworLy8JCQkJCTB4MEIJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisKKyNkZWZpbmUgR0VUX1RYX0JVRkZFUl9TSVpFKFAyKSAoKChQMikgKyAxKSAqIDY0KQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJU1NTUyB2YWx1ZXMgZm9yIDQtYnl0ZSBzdGF0dXMgbWVzc2FnZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIElPU1BfRVhUNF9TVEFUVVMJCTB4MEMJLy8gRXh0ZW5kZWQgc3RhdHVzIGNvZGUgaW4gUDEsCisKKy8vIFBhcmFtcyBpbiBQMiwgUDMKKy8vIEN1cnJlbnRseSB1bmltcGxlbWVudGVkLgorCisvLwkJCQkJMHgwRAkvLyBDdXJyZW50bHkgdW51c2VkLCBhdmFpbGFibGUuCisKKworCisvLworLy8gTWFjcm9zIHRvIHBhcnNlIHN0YXR1cyBtZXNzYWdlcworLy8KKworI2RlZmluZQlJT1NQX0dFVF9TVEFUVVNfTEVOKGNvZGUpCSggKGNvZGUpIDwgOCA/IDIgOiAoKGNvZGUpIDwgMHgwQSA/IDMgOiA0KSApCisKKyNkZWZpbmUJSU9TUF9TVEFUVVNfSVNfMkJZVEUoY29kZSkJKCAoY29kZSkgPCAweDA4ICkKKyNkZWZpbmUJSU9TUF9TVEFUVVNfSVNfM0JZVEUoY29kZSkJKCAoKGNvZGUpID49IDB4MDgpICYmICgoY29kZSkgPD0gMHgwQikgKQorI2RlZmluZQlJT1NQX1NUQVRVU19JU180QllURShjb2RlKQkoICgoY29kZSkgPj0gMHgwQykgJiYgKChjb2RlKSA8PSAweDBEKSApCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ZmZTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogSU8gRWRnZXBvcnQgRHJpdmVyIHRhYmxlcworICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMQorICoJICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICovCisKKyNpZm5kZWYgSU9fVEFCTEVTX0gKKyNkZWZpbmUgSU9fVEFCTEVTX0gKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzJwb3J0X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8ySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMl9ESU4pIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfNHBvcnRfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1JBUElEUE9SVF80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80VCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfTVQ0WDU2VVNCKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80SSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9EVUFMX0NQVSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNF9ESU4pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDEyXzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUX0NPTVBBVElCTEUpIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfOHBvcnRfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzgpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzE2X0RVQUxfQ1BVKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84SSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhSUikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDEyXzgpIH0sCisJeyB9Cit9OworCisvKiBEZXZpY2VzIHRoYXQgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfUkFQSURQT1JUXzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzRUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9NVDRYNTZVU0IpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzRJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8ySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9EVUFMX0NQVSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfMl9ESU4pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzRfRElOKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8xNl9EVUFMX0NQVSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfQ09NUEFUSUJMRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhSKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84UlIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQxMl84KSB9LAorCXsgfQkJCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF8ycG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIkVkZ2Vwb3J0IDIgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfMiIsCisJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0XzJwb3J0X2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2J1bGtfb3V0CQk9IDEsCisJLm51bV9wb3J0cwkJPSAyLAorCS5vcGVuCQkJPSBlZGdlX29wZW4sCisJLmNsb3NlCQkJPSBlZGdlX2Nsb3NlLAorCS50aHJvdHRsZQkJPSBlZGdlX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGVkZ2VfdW50aHJvdHRsZSwKKwkuYXR0YWNoCQkJPSBlZGdlX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGVkZ2Vfc2h1dGRvd24sCisJLmlvY3RsCQkJPSBlZGdlX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBlZGdlX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSBlZGdlX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBlZGdlX3Rpb2Ntc2V0LAorCS53cml0ZQkJCT0gZWRnZV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBlZGdlX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGVkZ2VfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwJCT0gZWRnZV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSBlZGdlX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX2luX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGVkZ2Vwb3J0XzRwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiRWRnZXBvcnQgNCBwb3J0IGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lCQk9ICJlZGdlcG9ydF80IiwKKwkuaWRfdGFibGUJCT0gZWRnZXBvcnRfNHBvcnRfaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSAxLAorCS5udW1fYnVsa19pbgkJPSAxLAorCS5udW1fYnVsa19vdXQJCT0gMSwKKwkubnVtX3BvcnRzCQk9IDQsCisJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKKwkuY2xvc2UJCQk9IGVkZ2VfY2xvc2UsCisJLnRocm90dGxlCQk9IGVkZ2VfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUJCT0gZWRnZV91bnRocm90dGxlLAorCS5hdHRhY2gJCQk9IGVkZ2Vfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gZWRnZV9zaHV0ZG93biwKKwkuaW9jdGwJCQk9IGVkZ2VfaW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IGVkZ2Vfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IGVkZ2VfdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IGVkZ2VfdGlvY21zZXQsCisJLndyaXRlCQkJPSBlZGdlX3dyaXRlLAorCS53cml0ZV9yb29tCQk9IGVkZ2Vfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0gZWRnZV9jaGFyc19pbl9idWZmZXIsCisJLmJyZWFrX2N0bAkJPSBlZGdlX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfaW5fY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfOHBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCA4IHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0XzgiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF84cG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDEsCisJLm51bV9idWxrX291dAkJPSAxLAorCS5udW1fcG9ydHMJCT0gOCwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTZmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMCwwICsxLDMwOTEgQEAKKy8qCisgKiBFZGdlcG9ydCBVU0IgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKyAqCUVQLzEgRVAvMiBFUC80IEVQLzIxIEVQLzIyIEVQLzIyMSBFUC80MiBFUC80MjEgV0FUQ0hQT1JUCisgKgorICogRm9yIHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBjb250YWN0IEluc2lkZSBPdXQKKyAqIE5ldHdvcmtzIHRlY2huaWNhbCBzdXBwb3J0LCBvciBQZXRlciBCZXJnZXIgPHBiZXJnZXJAYnJpbXNvbi5jb20+LAorICogb3IgQWwgQm9yY2hlcnMgPGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbT4uCisgKgorICogVmVyc2lvbiBoaXN0b3J5OgorICoKKyAqCUp1bHkgMTEsIDIwMDIgCVJlbW92ZWQgNCBwb3J0IGRldmljZSBzdHJ1Y3R1cmUgc2luY2UgYWxsIFRJIFVNUCAKKyAqCQkJY2hpcHMgaGF2ZSBvbmx5IDIgcG9ydHMgCisgKgkJCURhdmlkIElhY292ZWxsaSAoZGF2aWRpQGlvbmV0d29ya3MuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAiaW9fMTY2NTQuaCIKKyNpbmNsdWRlICJpb191c2J2ZW5kLmgiCisjaW5jbHVkZSAiaW9fdGkuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIERhdmlkIElhY292ZWxsaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkVkZ2Vwb3J0IFVTQiBTZXJpYWwgRHJpdmVyIgorCisKKy8qIGZpcm13YXJlIGltYWdlIGNvZGUgKi8KKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCVBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24KKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQlQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2UKKyNkZWZpbmUgSU1BR0VfU0laRQkJUGFnYWJsZU9wZXJhdGlvbmFsQ29kZVNpemUKKyNpbmNsdWRlICJpb19md19kb3duMy5oIgkvKiBEZWZpbmUgYXJyYXkgT3BlcmF0aW9uYWxDb2RlSW1hZ2VbXSAqLworCisjZGVmaW5lIEVQUk9NX1BBR0VfU0laRQkJNjQKKworCitzdHJ1Y3QgZWRnZXBvcnRfdWFydF9idWZfZGVzYyB7CisJX191MzIgY291bnQ7CQkvLyBOdW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGluIGJ1ZmZlcgorfTsKKworLyogZGlmZmVyZW50IGhhcmR3YXJlIHR5cGVzICovCisjZGVmaW5lIEhBUkRXQVJFX1RZUEVfOTMwCTAKKyNkZWZpbmUgSEFSRFdBUkVfVFlQRV9USVVNUAkxCisKKy8vIElPQ1RMX1BSSVZBVEVfVElfR0VUX01PREUgRGVmaW5pdGlvbnMKKyNkZWZpbmUJVElfTU9ERV9DT05GSUdVUklORwkwICAgLy8gRGV2aWNlIGhhcyBub3QgZW50ZXJlZCBzdGFydCBkZXZpY2UgCisjZGVmaW5lCVRJX01PREVfQk9PVAkJMSAgIC8vIFN0YXlpbmcgaW4gYm9vdCBtb2RlCisjZGVmaW5lIFRJX01PREVfRE9XTkxPQUQJMiAgIC8vIE1hZGUgaXQgdG8gZG93bmxvYWQgbW9kZQorI2RlZmluZSBUSV9NT0RFX1RSQU5TSVRJT05JTkcJMyAgIC8vIEN1cnJlbnRseSBpbiBib290IG1vZGUgYnV0IHRyYW5zaXRpb25pbmcgdG8gZG93bmxvYWQgbW9kZQorCisvKiByZWFkIHVyYiBzdGF0ZSAqLworI2RlZmluZSBFREdFX1JFQURfVVJCX1JVTk5JTkcJMAorI2RlZmluZSBFREdFX1JFQURfVVJCX1NUT1BQSU5HCTEKKyNkZWZpbmUgRURHRV9SRUFEX1VSQl9TVE9QUEVECTIKKworI2RlZmluZSBFREdFX0xPV19MQVRFTkNZCTEKKyNkZWZpbmUgRURHRV9DTE9TSU5HX1dBSVQJNDAwMAkvKiBpbiAuMDEgc2VjICovCisKKyNkZWZpbmUgRURHRV9PVVRfQlVGX1NJWkUJMTAyNAorCisKKy8qIFByb2R1Y3QgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHRoZSBFZGdlcG9ydCAqLworc3RydWN0IHByb2R1Y3RfaW5mbworeworCWludAlUaU1vZGU7CQkJLy8gQ3VycmVudCBUSSBNb2RlCisJX191OAloYXJkd2FyZV90eXBlOwkJLy8gVHlwZSBvZiBoYXJkd2FyZQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdHJ1Y3QgZWRnZV9idWYgeworCXVuc2lnbmVkIGludAlidWZfc2l6ZTsKKwljaGFyCQkqYnVmX2J1ZjsKKwljaGFyCQkqYnVmX2dldDsKKwljaGFyCQkqYnVmX3B1dDsKK307CisKK3N0cnVjdCBlZGdlcG9ydF9wb3J0IHsKKwlfX3UxNiB1YXJ0X2Jhc2U7CisJX191MTYgZG1hX2FkZHJlc3M7CisJX191OCBzaGFkb3dfbXNyOworCV9fdTggc2hhZG93X21jcjsKKwlfX3U4IHNoYWRvd19sc3I7CisJX191OCBsc3JfbWFzazsKKwlfX3UzMiB1bXBfcmVhZF90aW1lb3V0OwkJLyogTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRoZSBVTVAgd2lsbAorCQkJCQkgICB3YWl0IHdpdGhvdXQgZGF0YSBiZWZvcmUgY29tcGxldGluZworCQkJCQkgICBhIHJlYWQgc2hvcnQgKi8KKwlpbnQgYmF1ZF9yYXRlOworCWludCBjbG9zZV9wZW5kaW5nOworCWludCBsc3JfZXZlbnQ7CisJc3RydWN0IGVkZ2Vwb3J0X3VhcnRfYnVmX2Rlc2MgdHg7CisJc3RydWN0IGFzeW5jX2ljb3VudAlpY291bnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsdGFfbXNyX3dhaXQ7CS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZQorCQkJCQkJICAgd2FpdGluZyBmb3IgbXNyIGNoYW5nZSB0bworCQkJCQkJICAgaGFwcGVuICovCisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbAkqZWRnZV9zZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlfX3U4IGJVYXJ0TW9kZTsJCS8qIFBvcnQgdHlwZSwgMDogUlMyMzIsIGV0Yy4gKi8gCisJc3BpbmxvY2tfdCBlcF9sb2NrOworCWludCBlcF9yZWFkX3VyYl9zdGF0ZTsKKwlpbnQgZXBfd3JpdGVfdXJiX2luX3VzZTsKKwlzdHJ1Y3QgZWRnZV9idWYgKmVwX291dF9idWY7Cit9OworCitzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsIHsKKwlzdHJ1Y3QgcHJvZHVjdF9pbmZvIHByb2R1Y3RfaW5mbzsKKwl1OCBUSV9JMkNfVHlwZTsJCQkvLyBUeXBlIG9mIEkyQyBpbiBVTVAKKwl1OCBUaVJlYWRJMkM7CQkJLy8gU2V0IHRvIFRSVUUgaWYgd2UgaGF2ZSByZWFkIHRoZSBJMmMgaW4gQm9vdCBNb2RlCisJc3RydWN0IHNlbWFwaG9yZSBlc19zZW07CisJaW50IG51bV9wb3J0c19vcGVuOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7Cit9OworCisKKy8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8xKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfVEkzNDEwX0VER0VQT1JUXzFJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9QUk9YSU1JVFkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX01PVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTU9JU1RVUkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1RFTVBFUkFUVVJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9IVU1JRElUWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfUE9XRVIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0xJR0hUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9SQURJQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0RJU1RBTkNFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9BQ0NFTEVSQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1BST1hfRElTVCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUExVU19QV1JfSFA0Q0QpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1BMVVNfUFdSX1BDSSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjIxQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMUMpIH0sCisvLyBUaGUgNC1wb3J0IHNob3dzIHVwIGFzIHR3byAyLXBvcnQgZGV2aWNlcworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80UykgfSwKKwl7IH0KK307CisKKy8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8xKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfVEkzNDEwX0VER0VQT1JUXzFJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9QUk9YSU1JVFkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX01PVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTU9JU1RVUkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1RFTVBFUkFUVVJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9IVU1JRElUWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfUE9XRVIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0xJR0hUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9SQURJQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0RJU1RBTkNFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9BQ0NFTEVSQVRJT04pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1BST1hfRElTVCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUExVU19QV1JfSFA0Q0QpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1BMVVNfUFdSX1BDSSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjIxQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMUMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzRTKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpb19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImlvX3RpIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworCitzdGF0aWMgc3RydWN0IEVER0VfRklSTVdBUkVfVkVSU0lPTl9JTkZPIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbjsKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIGludCBUSVN0YXlJbkJvb3RNb2RlID0gMDsKK3N0YXRpYyBpbnQgbG93X2xhdGVuY3kgPSBFREdFX0xPV19MQVRFTkNZOworc3RhdGljIGludCBjbG9zaW5nX3dhaXQgPSBFREdFX0NMT1NJTkdfV0FJVDsKK3N0YXRpYyBpbnQgaWdub3JlX2NwdV9yZXYgPSAwOworCisKK3N0YXRpYyB2b2lkIGVkZ2VfdHR5X3JlY3Yoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKKworc3RhdGljIHZvaWQgc3RvcF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpOworc3RhdGljIGludCByZXN0YXJ0X3JlYWQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCk7CisKK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBlZGdlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKy8qIGNpcmN1bGFyIGJ1ZmZlciAqLworc3RhdGljIHN0cnVjdCBlZGdlX2J1ZiAqZWRnZV9idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIHZvaWQgZWRnZV9idWZfZnJlZShzdHJ1Y3QgZWRnZV9idWYgKmViKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnVmX2NsZWFyKHN0cnVjdCBlZGdlX2J1ZiAqZWIpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBlZGdlX2J1ZiAqZWIpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfcHV0KHN0cnVjdCBlZGdlX2J1ZiAqZWIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9nZXQoc3RydWN0IGVkZ2VfYnVmICplYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CisKKworc3RhdGljIGludCBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQlfX3U4CQlyZXF1ZXN0LAorCQkJCV9fdTE2CQl2YWx1ZSwKKwkJCQlfX3UxNgkJaW5kZXgsCisJCQkJdTggCQkqZGF0YSwKKwkJCQlpbnQJCXNpemUpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyAoZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJCXJlcXVlc3QsCisJCQkJKFVTQl9UWVBFX1ZFTkRPUiB8IAorCQkJCSBVU0JfUkVDSVBfREVWSUNFIHwgCisJCQkJIFVTQl9ESVJfSU4pLAorCQkJCXZhbHVlLAorCQkJCWluZGV4LAorCQkJCWRhdGEsCisJCQkJc2l6ZSwKKwkJCQkxMDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoc3RhdHVzICE9IHNpemUpIHsKKwkJZGJnICgiJXMgLSB3YW50ZWQgdG8gd3JpdGUgJWQsIGJ1dCBvbmx5IHdyb3RlICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHNpemUsIHN0YXR1cyk7CisJCXJldHVybiAtRUNPTU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJCV9fdTgJCXJlcXVlc3QsCisJCQkJX191MTYJCXZhbHVlLAorCQkJCV9fdTE2CQlpbmRleCwKKwkJCQl1OCAJCSpkYXRhLAorCQkJCWludAkJc2l6ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJcmVxdWVzdCwKKwkJCQkoVVNCX1RZUEVfVkVORE9SIHwgCisJCQkJIFVTQl9SRUNJUF9ERVZJQ0UgfCAKKwkJCQkgVVNCX0RJUl9PVVQpLAorCQkJCXZhbHVlLAorCQkJCWluZGV4LAorCQkJCWRhdGEsCisJCQkJc2l6ZSwKKwkJCQkxMDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoc3RhdHVzICE9IHNpemUpIHsKKwkJZGJnICgiJXMgLSB3YW50ZWQgdG8gd3JpdGUgJWQsIGJ1dCBvbmx5IHdyb3RlICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHNpemUsIHN0YXR1cyk7CisJCXJldHVybiAtRUNPTU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IFRJV3JpdGVDb21tYW5kU3luYyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgX191OCBjb21tYW5kLAorCQkJCV9fdTggbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCB1OCAqZGF0YSwKKwkJCQlpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKGRldiwKKwkJCQkJICBjb21tYW5kLAkgIAkJLy8gUmVxdWVzdAorCQkJCQkgIHZhbHVlLAkJCS8vIHdWYWx1ZSAKKwkJCQkJICBtb2R1bGVpZCwJCQkvLyB3SW5kZXgKKwkJCQkJICBkYXRhLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkgIHNpemUpOwkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisKK30KKworLyogY2xlYXIgdHgvcnggYnVmZmVycyBhbmQgZmlmbyBpbiBUSSBVTVAgKi8KK3N0YXRpYyBpbnQgVElQdXJnZURhdGFTeW5jIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiBtYXNrKQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyAtIHBvcnQgJWQsIG1hc2sgJXgiLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBtYXNrKTsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX1BVUkdFX1BPUlQsCisJCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJCW1hc2ssCisJCQkJCU5VTEwsCisJCQkJCTApOworfQorCisvKioKKyAqIFRJUmVhZERvd25sb2FkTWVtb3J5IC0gUmVhZCBlZGdlcG9ydCBtZW1vcnkgZnJvbSBUSSBjaGlwCisgKiBAZGV2OiB1c2IgZGV2aWNlIHBvaW50ZXIKKyAqIEBzdGFydF9hZGRyZXNzOiBEZXZpY2UgQ1BVIGFkZHJlc3MgYXQgd2hpY2ggdG8gcmVhZAorICogQGxlbmd0aDogTGVuZ3RoIG9mIGFib3ZlIGRhdGEKKyAqIEBhZGRyZXNzX3R5cGU6IENhbiByZWFkIGJvdGggWERBVEEgYW5kIEkyQworICogQGJ1ZmZlcjogcG9pbnRlciB0byBpbnB1dCBkYXRhIGJ1ZmZlcgorICovCitzdGF0aWMgaW50IFRJUmVhZERvd25sb2FkTWVtb3J5KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBzdGFydF9hZGRyZXNzLAorCQkJCWludCBsZW5ndGgsIF9fdTggYWRkcmVzc190eXBlLCBfX3U4ICpidWZmZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJX191OCByZWFkX2xlbmd0aDsKKwlfX2JlMTYgYmVfc3RhcnRfYWRkcmVzczsKKwkKKwlkYmcgKCIlcyAtIEAgJXggZm9yICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCisJLyogUmVhZCBpbiBibG9ja3Mgb2YgNjQgYnl0ZXMKKwkgKiAoVEkgZmlybXdhcmUgY2FuJ3QgaGFuZGxlIG1vcmUgdGhhbiA2NCBieXRlIHJlYWRzKQorCSAqLworCXdoaWxlIChsZW5ndGgpIHsKKwkJaWYgKGxlbmd0aCA+IDY0KQorCQkJcmVhZF9sZW5ndGg9IDY0OworCQllbHNlCisJCQlyZWFkX2xlbmd0aCA9IChfX3U4KWxlbmd0aDsKKworCQlpZiAocmVhZF9sZW5ndGggPiAxKSB7CisJCQlkYmcgKCIlcyAtIEAgJXggZm9yICVkIiwgX19GVU5DVElPTl9fLCAKKwkJCSAgICAgc3RhcnRfYWRkcmVzcywgcmVhZF9sZW5ndGgpOworCQl9CisJCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNiAoc3RhcnRfYWRkcmVzcyk7CisJCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChkZXYsCisJCQkJCQkgIFVNUENfTUVNT1JZX1JFQUQsCS8vIFJlcXVlc3QKKwkJCQkJCSAgKF9fdTE2KWFkZHJlc3NfdHlwZSwJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCisJCQkJCQkgIChfX2ZvcmNlIF9fdTE2KWJlX3N0YXJ0X2FkZHJlc3MsCS8vIHdJbmRleCAoQWRkcmVzcyB0byByZWFkKQorCQkJCQkJICBidWZmZXIsCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkJICByZWFkX2xlbmd0aCk7CS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnICgiJXMgLSBFUlJPUiAleCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKworCQlpZiAocmVhZF9sZW5ndGggPiAxKSB7CisJCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZkZXYtPmRldiwgX19GVU5DVElPTl9fLAorCQkJCQkgICAgICByZWFkX2xlbmd0aCwgYnVmZmVyKTsKKwkJfQorCisJCS8qIFVwZGF0ZSBwb2ludGVycy9sZW5ndGggKi8KKwkJc3RhcnRfYWRkcmVzcyArPSByZWFkX2xlbmd0aDsKKwkJYnVmZmVyICs9IHJlYWRfbGVuZ3RoOworCQlsZW5ndGggLT0gcmVhZF9sZW5ndGg7CisJfQorCQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgVElSZWFkUmFtIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQoreworCXJldHVybiBUSVJlYWREb3dubG9hZE1lbW9yeSAoZGV2LAorCQkJCSAgICAgc3RhcnRfYWRkcmVzcywKKwkJCQkgICAgIGxlbmd0aCwKKwkJCQkgICAgIERUS19BRERSX1NQQUNFX1hEQVRBLAorCQkJCSAgICAgYnVmZmVyKTsKK30KKworLyogUmVhZCBlZGdlcG9ydCBtZW1vcnkgdG8gYSBnaXZlbiBibG9jayAqLworc3RhdGljIGludCBUSVJlYWRCb290TWVtb3J5IChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIGludCBzdGFydF9hZGRyZXNzLCBpbnQgbGVuZ3RoLCBfX3U4ICogYnVmZmVyKQoreworCWludCBzdGF0dXMgPSAwOworCWludCBpOworCisJZm9yIChpPTA7IGk8IGxlbmd0aDsgaSsrKSB7CisJCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAorCQkJCQlzZXJpYWwtPlRJX0kyQ19UeXBlLAkJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCisJCQkJCShfX3UxNikoc3RhcnRfYWRkcmVzcytpKSwJLy8gd0luZGV4CisJCQkJCSZidWZmZXJbaV0sCQkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJMHgwMSk7CQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCWlmIChzdGF0dXMpIHsKKwkJCWRiZyAoIiVzIC0gRVJST1IgJXgiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfQorCisJZGJnICgiJXMgLSBzdGFydF9hZGRyZXNzID0gJXgsIGxlbmd0aCA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGJ1ZmZlcik7CisKKwlzZXJpYWwtPlRpUmVhZEkyQyA9IDE7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBXcml0ZSBnaXZlbiBibG9jayB0byBUSSBFUFJPTSBtZW1vcnkgKi8KK3N0YXRpYyBpbnQgVElXcml0ZUJvb3RNZW1vcnkgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgaTsKKwlfX3U4IHRlbXA7CisKKwkvKiBNdXN0IGRvIGEgcmVhZCBiZWZvcmUgd3JpdGUgKi8KKwlpZiAoIXNlcmlhbC0+VGlSZWFkSTJDKSB7CisJCXN0YXR1cyA9IFRJUmVhZEJvb3RNZW1vcnkoc2VyaWFsLCAwLCAxLCAmdGVtcCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWZvciAoaT0wOyBpIDwgbGVuZ3RoOyArK2kpIHsKKwkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQlVTVBDX01FTU9SWV9XUklURSwJCS8vIFJlcXVlc3QKKwkJCQkJCWJ1ZmZlcltpXSwJCQkvLyB3VmFsdWUKKwkJCQkJCShfX3UxNikoaStzdGFydF9hZGRyZXNzKSwJLy8gd0luZGV4CisJCQkJCQlOVUxMLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkJMCk7CQkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworICAJZGJnICgiJXMgLSBzdGFydF9zZGRyID0gJXgsIGxlbmd0aCA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCBsZW5ndGgpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGJ1ZmZlcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qIFdyaXRlIGVkZ2Vwb3J0IEkyQyBtZW1vcnkgdG8gVEkgY2hpcAkqLworc3RhdGljIGludCBUSVdyaXRlRG93bmxvYWRJMkMgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggYWRkcmVzc190eXBlLCBfX3U4ICpidWZmZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHdyaXRlX2xlbmd0aDsKKwlfX2JlMTYgYmVfc3RhcnRfYWRkcmVzczsKKworCS8qIFdlIGNhbiBvbmx5IHNlbmQgYSBtYXhpbXVtIG9mIDEgYWxpZ25lZCBieXRlIHBhZ2UgYXQgYSB0aW1lICovCisJCisJLyogY2FsdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIHRoZSBmaXJzdCBwYWdlICovCisJd3JpdGVfbGVuZ3RoID0gRVBST01fUEFHRV9TSVpFIC0gKHN0YXJ0X2FkZHJlc3MgJiAoRVBST01fUEFHRV9TSVpFIC0gMSkpOworCisJaWYgKHdyaXRlX2xlbmd0aCA+IGxlbmd0aCkKKwkJd3JpdGVfbGVuZ3RoID0gbGVuZ3RoOworCisJZGJnICgiJXMgLSBCeXRlc0luRmlyc3RQYWdlIEFkZHIgPSAleCwgbGVuZ3RoID0gJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2FkZHJlc3MsIHdyaXRlX2xlbmd0aCk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIHdyaXRlX2xlbmd0aCwgYnVmZmVyKTsKKworCS8qIFdyaXRlIGZpcnN0IHBhZ2UgKi8KKwliZV9zdGFydF9hZGRyZXNzID0gY3B1X3RvX2JlMTYgKHN0YXJ0X2FkZHJlc3MpOworCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX01FTU9SWV9XUklURSwJLy8gUmVxdWVzdAorCQkJCQkoX191MTYpYWRkcmVzc190eXBlLAkvLyB3VmFsdWUKKwkJCQkJKF9fZm9yY2UgX191MTYpYmVfc3RhcnRfYWRkcmVzcywJLy8gd0luZGV4CisJCQkJCWJ1ZmZlciwJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQl3cml0ZV9sZW5ndGgpOworCWlmIChzdGF0dXMpIHsKKwkJZGJnICgiJXMgLSBFUlJPUiAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlsZW5ndGgJCS09IHdyaXRlX2xlbmd0aDsKKwlzdGFydF9hZGRyZXNzCSs9IHdyaXRlX2xlbmd0aDsKKwlidWZmZXIJCSs9IHdyaXRlX2xlbmd0aDsKKworCS8qIFdlIHNob3VsZCBiZSBhbGlnbmVkIG5vdyAtLSBjYW4gd3JpdGUgbWF4IHBhZ2Ugc2l6ZSBieXRlcyBhdCBhIHRpbWUgKi8KKwl3aGlsZSAobGVuZ3RoKSB7CisJCWlmIChsZW5ndGggPiBFUFJPTV9QQUdFX1NJWkUpCisJCQl3cml0ZV9sZW5ndGggPSBFUFJPTV9QQUdFX1NJWkU7CisJCWVsc2UKKwkJCXdyaXRlX2xlbmd0aCA9IGxlbmd0aDsKKworCQlkYmcgKCIlcyAtIFBhZ2UgV3JpdGUgQWRkciA9ICV4LCBsZW5ndGggPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhcnRfYWRkcmVzcywgd3JpdGVfbGVuZ3RoKTsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIHdyaXRlX2xlbmd0aCwgYnVmZmVyKTsKKworCQkvKiBXcml0ZSBuZXh0IHBhZ2UgKi8KKwkJYmVfc3RhcnRfYWRkcmVzcyA9IGNwdV90b19iZTE2IChzdGFydF9hZGRyZXNzKTsKKwkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQlVTVBDX01FTU9SWV9XUklURSwJLy8gUmVxdWVzdAorCQkJCQkJKF9fdTE2KWFkZHJlc3NfdHlwZSwJLy8gd1ZhbHVlCisJCQkJCQkoX19mb3JjZSBfX3UxNiliZV9zdGFydF9hZGRyZXNzLAkvLyB3SW5kZXgKKwkJCQkJCWJ1ZmZlciwJICAJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCQl3cml0ZV9sZW5ndGgpOwkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VyciAoJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gRVJST1IgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJCisJCWxlbmd0aAkJLT0gd3JpdGVfbGVuZ3RoOworCQlzdGFydF9hZGRyZXNzCSs9IHdyaXRlX2xlbmd0aDsKKwkJYnVmZmVyCQkrPSB3cml0ZV9sZW5ndGg7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEV4YW1pbmUgdGhlIFVNUCBETUEgcmVnaXN0ZXJzIGFuZCBMU1IKKyAqIAorICogQ2hlY2sgdGhlIE1TQml0IG9mIHRoZSBYIGFuZCBZIERNQSBieXRlIGNvdW50IHJlZ2lzdGVycy4KKyAqIEEgemVybyBpbiB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgVFggRE1BIGJ1ZmZlcnMgYXJlIGVtcHR5CisgKiB0aGVuIGNoZWNrIHRoZSBUWCBFbXB0eSBiaXQgaW4gdGhlIFVBUlQuCisgKi8KK3N0YXRpYyBpbnQgVElJc1R4QWN0aXZlIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBvdXRfZW5kcG9pbnRfZGVzY19ibG9jayAqb2VkYjsKKwlfX3U4ICpsc3I7CisJaW50IGJ5dGVzX2xlZnQgPSAwOworCisJb2VkYiA9IGttYWxsb2MgKHNpemVvZiAoKiBvZWRiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvZWRiKSB7CisJCWRldl9lcnIgKCZwb3J0LT5wb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxzciA9IGttYWxsb2MgKDEsIEdGUF9LRVJORUwpOwkvKiBTaWdoLCB0aGF0J3MgcmlnaHQsIGp1c3Qgb25lIGJ5dGUsCisJCQkJCSAgIGFzIG5vdCBhbGwgcGxhdGZvcm1zIGNhbiBkbyBETUEKKwkJCQkJICAgZnJvbSBzdGFjayAqLworCWlmICghbHNyKSB7CisJCWtmcmVlKG9lZGIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogUmVhZCB0aGUgRE1BIENvdW50IFJlZ2lzdGVycyAqLworCXN0YXR1cyA9IFRJUmVhZFJhbSAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICAgcG9ydC0+ZG1hX2FkZHJlc3MsCisJCQkgICAgc2l6ZW9mKCAqb2VkYiksCisJCQkgICAgKHZvaWQgKilvZWRiKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdF9pc190eF9hY3RpdmU7CisKKwlkYmcgKCIlcyAtIFhCeXRlQ291bnQgICAgMHglWCIsIF9fRlVOQ1RJT05fXywgb2VkYi0+WEJ5dGVDb3VudCk7CisKKwkvKiBhbmQgdGhlIExTUiAqLworCXN0YXR1cyA9IFRJUmVhZFJhbSAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJICAgIHBvcnQtPnVhcnRfYmFzZSArIFVNUE1FTV9PRkZTX1VBUlRfTFNSLAorCQkJICAgIDEsCisJCQkgICAgbHNyKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdF9pc190eF9hY3RpdmU7CisJZGJnICgiJXMgLSBMU1IgPSAweCVYIiwgX19GVU5DVElPTl9fLCAqbHNyKTsKKwkKKwkvKiBJZiBlaXRoZXIgYnVmZmVyIGhhcyBkYXRhIG9yIHdlIGFyZSB0cmFuc21pdHRpbmcgdGhlbiByZXR1cm4gVFJVRSAqLworCWlmICgob2VkYi0+WEJ5dGVDb3VudCAmIDB4ODAgKSAhPSAwICkKKwkJYnl0ZXNfbGVmdCArPSA2NDsKKworCWlmICgoKmxzciAmIFVNUF9VQVJUX0xTUl9UWF9NQVNLICkgPT0gMCApCisJCWJ5dGVzX2xlZnQgKz0gMTsKKworCS8qIFdlIHJldHVybiBOb3QgQWN0aXZlIGlmIHdlIGdldCBhbnkga2luZCBvZiBlcnJvciAqLworZXhpdF9pc190eF9hY3RpdmU6CisJZGJnICgiJXMgLSByZXR1cm4gJWQiLCBfX0ZVTkNUSU9OX18sIGJ5dGVzX2xlZnQgKTsKKworCWtmcmVlKGxzcik7CisJa2ZyZWUob2VkYik7CisJcmV0dXJuIGJ5dGVzX2xlZnQ7Cit9CisKK3N0YXRpYyB2b2lkIFRJQ2hhc2VQb3J0KHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBmbHVzaCkKK3sKKwlpbnQgYmF1ZF9yYXRlOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LT50dHk7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdGltZW91dCkKKwkJdGltZW91dCA9IChIWipFREdFX0NMT1NJTkdfV0FJVCkvMTAwOworCisJLyogd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBmcm9tIHRoZSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoZWRnZV9idWZfZGF0YV9hdmFpbChwb3J0LT5lcF9vdXRfYnVmKSA9PSAwCisJCXx8IHRpbWVvdXQgPT0gMCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KQorCQl8fCAhdXNiX2dldF9pbnRmZGF0YShwb3J0LT5wb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpICAvKiBkaXNjb25uZWN0ICovCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJaWYgKGZsdXNoKQorCQllZGdlX2J1Zl9jbGVhcihwb3J0LT5lcF9vdXRfYnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gdGhlIGRldmljZSAqLworCXRpbWVvdXQgKz0gamlmZmllczsKKwl3aGlsZSAoKGxvbmcpKGppZmZpZXMgLSB0aW1lb3V0KSA8IDAgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJJiYgdXNiX2dldF9pbnRmZGF0YShwb3J0LT5wb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpIHsgIC8qIG5vdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKCFUSUlzVHhBY3RpdmUocG9ydCkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwKTsKKwl9CisKKwkvKiBkaXNjb25uZWN0ZWQgKi8KKwlpZiAoIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+cG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKQorCQlyZXR1cm47CisKKwkvKiB3YWl0IG9uZSBtb3JlIGNoYXJhY3RlciB0aW1lLCBiYXNlZCBvbiBiYXVkIHJhdGUgKi8KKwkvKiAoVElJc1R4QWN0aXZlIGRvZXNuJ3Qgc2VlbSB0byB3YWl0IGZvciB0aGUgbGFzdCBieXRlKSAqLworCWlmICgoYmF1ZF9yYXRlPXBvcnQtPmJhdWRfcmF0ZSkgPT0gMCkKKwkJYmF1ZF9yYXRlID0gNTA7CisJbXNsZWVwKG1heCgxLCgxMDAwMCtiYXVkX3JhdGUtMSkvYmF1ZF9yYXRlKSk7Cit9CisKK3N0YXRpYyBpbnQgVElDaG9vc2VDb25maWd1cmF0aW9uIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCS8vIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyBvbiB0aGlzIGRldmljZSwgaW4gd2hpY2ggY2FzZQorCS8vIHdlIHdvdWxkIG5lZWQgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIG9mIHRoZW0gdG8gZmluZCBvdXQgd2hpY2ggb25lCisJLy8gd2Ugd2FudC4gSG93ZXZlciwgd2UganVzdCBzdXBwb3J0IG9uZSBjb25maWcgYXQgdGhpcyBwb2ludCwKKwkvLyBjb25maWd1cmF0aW9uICMgMSwgd2hpY2ggaXMgQ29uZmlnIERlc2NyaXB0b3IgMC4KKworCWRiZyAoIiVzIC0gTnVtYmVyIG9mIEludGVyZmFjZXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgZGV2LT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXMpOworCWRiZyAoIiVzIC0gTUFYIFBvd2VyICAgICAgICAgICAgPSAlZCIsIF9fRlVOQ1RJT05fXywgZGV2LT5jb25maWctPmRlc2MuYk1heFBvd2VyKjIpOworCisJaWYgKGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEpIHsKKwkJZGV2X2VyciAoJmRldi0+ZGV2LCAiJXMgLSBiTnVtSW50ZXJmYWNlcyBpcyBub3QgMSwgRVJST1IhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBUSVJlYWRSb20gKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0RPV05MT0FEKSB7CisJCXN0YXR1cyA9IFRJUmVhZERvd25sb2FkTWVtb3J5IChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkgICAgICAgc3RhcnRfYWRkcmVzcywKKwkJCQkJICAgICAgIGxlbmd0aCwKKwkJCQkJICAgICAgIHNlcmlhbC0+VElfSTJDX1R5cGUsCisJCQkJCSAgICAgICBidWZmZXIpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IFRJUmVhZEJvb3RNZW1vcnkgKHNlcmlhbCwKKwkJCQkJICAgc3RhcnRfYWRkcmVzcywKKwkJCQkJICAgbGVuZ3RoLAorCQkJCQkgICBidWZmZXIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgVElXcml0ZVJvbSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQoreworCWlmIChzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPT0gVElfTU9ERV9CT09UKQorCQlyZXR1cm4gVElXcml0ZUJvb3RNZW1vcnkgKHNlcmlhbCwKKwkJCQkJICBzdGFydF9hZGRyZXNzLAorCQkJCQkgIGxlbmd0aCwKKwkJCQkJICBidWZmZXIpOworCisJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0RPV05MT0FEKQorCQlyZXR1cm4gVElXcml0ZURvd25sb2FkSTJDIChzZXJpYWwsCisJCQkJCSAgIHN0YXJ0X2FkZHJlc3MsCisJCQkJCSAgIGxlbmd0aCwKKwkJCQkJICAgc2VyaWFsLT5USV9JMkNfVHlwZSwKKwkJCQkJICAgYnVmZmVyKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCisKKworLyogUmVhZCBhIGRlc2NyaXB0b3IgaGVhZGVyIGZyb20gSTJDIGJhc2VkIG9uIHR5cGUgKi8KK3N0YXRpYyBpbnQgVElHZXREZXNjcmlwdG9yQWRkcmVzcyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgZGVzY190eXBlLCBzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjKQoreworCWludCBzdGFydF9hZGRyZXNzOworCWludCBzdGF0dXM7CisKKwkvKiBTZWFyY2ggZm9yIHJlcXVlc3RlZCBkZXNjcmlwdG9yIGluIEkyQyAqLworCXN0YXJ0X2FkZHJlc3MgPSAyOworCWRvIHsKKwkJc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsCisJCQkJICAgc3RhcnRfYWRkcmVzcywKKwkJCQkgICBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkgICAoX191OCAqKXJvbV9kZXNjICk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocm9tX2Rlc2MtPlR5cGUgPT0gZGVzY190eXBlKQorCQkJcmV0dXJuIHN0YXJ0X2FkZHJlc3M7CisKKwkJc3RhcnRfYWRkcmVzcyA9IHN0YXJ0X2FkZHJlc3MgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArICByb21fZGVzYy0+U2l6ZTsKKworCX0gd2hpbGUgKChzdGFydF9hZGRyZXNzIDwgVElfTUFYX0kyQ19TSVpFKSAmJiByb21fZGVzYy0+VHlwZSk7CisJCisJcmV0dXJuIDA7Cit9CisKKy8qIFZhbGlkYXRlIGRlc2NyaXB0b3IgY2hlY2tzdW0gKi8KK3N0YXRpYyBpbnQgVmFsaWRDaGVja3N1bShzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjLCBfX3U4ICpidWZmZXIpCit7CisJX191MTYgaTsKKwlfX3U4IGNzID0gMDsKKworCWZvciAoaT0wOyBpIDwgcm9tX2Rlc2MtPlNpemU7IGkrKykgeworCQljcyA9IChfX3U4KShjcyArIGJ1ZmZlcltpXSk7CisJfQorCWlmIChjcyAhPSByb21fZGVzYy0+Q2hlY2tTdW0pIHsKKwkJZGJnICgiJXMgLSBNaXNtYXRjaCAleCAtICV4IiwgX19GVU5DVElPTl9fLCByb21fZGVzYy0+Q2hlY2tTdW0sIGNzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKiBNYWtlIHN1cmUgdGhhdCB0aGUgSTJDIGltYWdlIGlzIGdvb2QgKi8KK3N0YXRpYyBpbnQgVGlWYWxpZGF0ZUkyY0ltYWdlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjOworCWludCBzdGFydF9hZGRyZXNzID0gMjsKKwlfX3U4ICpidWZmZXI7CisJX191MTYgdHR5cGU7CisKKwlyb21fZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnJvbV9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyb21fZGVzYykgeworCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWZmZXIgPSBrbWFsbG9jIChUSV9NQVhfSTJDX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgYnVmZmVyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlrZnJlZSAocm9tX2Rlc2MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvLyBSZWFkIHRoZSBmaXJzdCBieXRlIChTaWduYXR1cmUwKSBtdXN0IGJlIDB4NTIgb3IgMHgxMAorCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLCAwLCAxLCBidWZmZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gRXhpdFRpVmFsaWRhdGVJMmNJbWFnZTsgCisKKwlpZiAoKmJ1ZmZlciAhPSBVTVA1MTUyICYmICpidWZmZXIgIT0gVU1QMzQxMCkgeworCQlkZXZfZXJyIChkZXYsICIlcyAtIGludmFsaWQgYnVmZmVyIHNpZ25hdHVyZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBFeGl0VGlWYWxpZGF0ZUkyY0ltYWdlOworCX0KKworCWRvIHsKKwkJLy8gVmFsaWRhdGUgdGhlIEkyQworCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKKwkJCQlzdGFydF9hZGRyZXNzLAorCQkJCXNpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpLAorCQkJCShfX3U4ICopcm9tX2Rlc2MpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJaWYgKChzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyByb21fZGVzYy0+U2l6ZSkgPiBUSV9NQVhfSTJDX1NJWkUpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlkYmcgKCIlcyAtIHN0cnVjdHVyZSB0b28gYmlnLCBlcnJvcmluZyBvdXQuIiwgX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGJnICgiJXMgVHlwZSA9IDB4JXgiLCBfX0ZVTkNUSU9OX18sIHJvbV9kZXNjLT5UeXBlKTsKKworCQkvLyBTa2lwIHR5cGUgMiByZWNvcmQKKwkJdHR5cGUgPSByb21fZGVzYy0+VHlwZSAmIDB4MGY7CisJCWlmICggdHR5cGUgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CQVNJQworCQkJJiYgdHR5cGUgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9BVVRPICkgeworCQkJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCisJCQlzdGF0dXMgPSBUSVJlYWRSb20oc2VyaWFsLAorCQkJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkJCXJvbV9kZXNjLT5TaXplLAorCQkJCQkJYnVmZmVyKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisKKwkJCXN0YXR1cyA9IFZhbGlkQ2hlY2tzdW0ocm9tX2Rlc2MsIGJ1ZmZlcik7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQl9CisJCXN0YXJ0X2FkZHJlc3MgPSBzdGFydF9hZGRyZXNzICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyByb21fZGVzYy0+U2l6ZTsKKworCX0gd2hpbGUgKChyb21fZGVzYy0+VHlwZSAhPSBJMkNfREVTQ19UWVBFX0lPTikgJiYgKHN0YXJ0X2FkZHJlc3MgPCBUSV9NQVhfSTJDX1NJWkUpKTsKKworCWlmICgocm9tX2Rlc2MtPlR5cGUgIT0gSTJDX0RFU0NfVFlQRV9JT04pIHx8IChzdGFydF9hZGRyZXNzID4gVElfTUFYX0kyQ19TSVpFKSkKKwkJc3RhdHVzID0gLUVOT0RFVjsKKworRXhpdFRpVmFsaWRhdGVJMmNJbWFnZToJCisJa2ZyZWUgKGJ1ZmZlcik7CisJa2ZyZWUgKHJvbV9kZXNjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IFRJUmVhZE1hbnVmRGVzY3JpcHRvciAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBfX3U4ICpidWZmZXIpCit7CisJaW50IHN0YXR1czsKKwlpbnQgc3RhcnRfYWRkcmVzczsKKwlzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjOworCXN0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IgKmRlc2M7CisKKwlyb21fZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnJvbV9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyb21fZGVzYykgeworCQlkZXZfZXJyICgmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RhcnRfYWRkcmVzcyA9IFRJR2V0RGVzY3JpcHRvckFkZHJlc3MgKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9JT04sIHJvbV9kZXNjKTsKKworCWlmICghc3RhcnRfYWRkcmVzcykgeworCQlkYmcgKCIlcyAtIEVkZ2UgRGVzY3JpcHRvciBub3QgZm91bmQgaW4gSTJDIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCS8vIFJlYWQgdGhlIGRlc2NyaXB0b3IgZGF0YQorCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCXN0YXJ0X2FkZHJlc3Mrc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYyksCisJCQkJcm9tX2Rlc2MtPlNpemUsCisJCQkJYnVmZmVyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisJCisJc3RhdHVzID0gVmFsaWRDaGVja3N1bShyb21fZGVzYywgYnVmZmVyKTsKKwkKKwlkZXNjID0gKHN0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IgKilidWZmZXI7CisJZGJnICggIiVzIC0gSW9uQ29uZmlnICAgICAgMHgleCIsIF9fRlVOQ1RJT05fXywgZGVzYy0+SW9uQ29uZmlnIAkpOworCWRiZyAoICIlcyAtIFZlcnNpb24gICAgICAgICAgJWQiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPlZlcnNpb24JICAJKTsKKwlkYmcgKCAiJXMgLSBDcHUvQm9hcmQgICAgICAweCV4IiwgX19GVU5DVElPTl9fLCBkZXNjLT5DcHVSZXZfQm9hcmRSZXYJKTsKKwlkYmcgKCAiJXMgLSBOdW1Qb3J0cyAgICAgICAgICVkIiwgX19GVU5DVElPTl9fLCBkZXNjLT5OdW1Qb3J0cyAgCSk7CQorCWRiZyAoICIlcyAtIE51bVZpcnR1YWxQb3J0cyAgJWQiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPk51bVZpcnR1YWxQb3J0cwkpOwkKKwlkYmcgKCAiJXMgLSBUb3RhbFBvcnRzICAgICAgICVkIiwgX19GVU5DVElPTl9fLCBkZXNjLT5Ub3RhbFBvcnRzICAJKTsJCisKK2V4aXQ6CisJa2ZyZWUgKHJvbV9kZXNjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBCdWlsZCBmaXJtd2FyZSBoZWFkZXIgdXNlZCBmb3IgZmlybXdhcmUgdXBkYXRlICovCitzdGF0aWMgaW50IEJ1aWxkSTJDRmlybXdhcmVIZWFkZXIgKF9fdTggKmhlYWRlciwgc3RydWN0IGRldmljZSAqZGV2KQoreworCV9fdTggKmJ1ZmZlcjsKKwlpbnQgYnVmZmVyX3NpemU7CisJaW50IGk7CisJX191OCBjcyA9IDA7CisJc3RydWN0IHRpX2kyY19kZXNjICppMmNfaGVhZGVyOworCXN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICppbWdfaGVhZGVyOworCXN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICpmaXJtd2FyZV9yZWM7CisKKwkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCisJLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBVTVAgdG8gY29tZSB1cCBpbiBCb290IE1vZGUuICBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciAKKwkvLyB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gCisJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCisJLy8gdGhlIG5ldyBmaXJtd2FyZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZSBmaXJtd2FyZSB3aWxsIHVwZGF0ZQorCS8vIHRoZSByZWNvcmQgdHlwZSBmcm9tIDB4ZjIgdG8gMHgwMi4KKwkKKwkvLyBBbGxvY2F0ZSBhIDE1LjVrIGJ1ZmZlciArIDIgYnl0ZXMgZm9yIHZlcnNpb24gbnVtYmVyIChGaXJtd2FyZSBSZWNvcmQpCisJYnVmZmVyX3NpemUgPSAoKCgxMDI0ICogMTYpIC0gNTEyICkrIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYykpOworCisJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCQorCS8vIFNldCBlbnRpcmUgaW1hZ2Ugb2YgMHhmZnMKKwltZW1zZXQgKGJ1ZmZlciwgMHhmZiwgYnVmZmVyX3NpemUpOworCisJLy8gQ29weSB2ZXJzaW9uIG51bWJlciBpbnRvIGZpcm13YXJlIHJlY29yZAorCWZpcm13YXJlX3JlYyA9IChzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyAqKWJ1ZmZlcjsKKworCWZpcm13YXJlX3JlYy0+VmVyX01ham9yCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbjsKKwlmaXJtd2FyZV9yZWMtPlZlcl9NaW5vcgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb247CisKKwkvLyBQb2ludGVyIHRvIGZ3X2Rvd24gbWVtb3J5IGltYWdlCisJaW1nX2hlYWRlciA9IChzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlciAqKSZQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VbMF07CisKKwltZW1jcHkgKGJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyksCisJCSZQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2Vbc2l6ZW9mKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyKV0sCisJCWxlMTZfdG9fY3B1KGltZ19oZWFkZXItPkxlbmd0aCkpOworCisJZm9yIChpPTA7IGkgPCBidWZmZXJfc2l6ZTsgaSsrKSB7CisJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW2ldKTsKKwl9CisKKwlrZnJlZSAoYnVmZmVyKTsKKworCS8vIEJ1aWxkIG5ldyBoZWFkZXIKKwlpMmNfaGVhZGVyID0gIChzdHJ1Y3QgdGlfaTJjX2Rlc2MgKiloZWFkZXI7CisJZmlybXdhcmVfcmVjID0gIChzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyopaTJjX2hlYWRlci0+RGF0YTsKKwkKKwlpMmNfaGVhZGVyLT5UeXBlCT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSzsKKwlpMmNfaGVhZGVyLT5TaXplCT0gKF9fdTE2KWJ1ZmZlcl9zaXplOworCWkyY19oZWFkZXItPkNoZWNrU3VtCT0gY3M7CisJZmlybXdhcmVfcmVjLT5WZXJfTWFqb3IJPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uOworCWZpcm13YXJlX3JlYy0+VmVyX01pbm9yCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbjsKKworCXJldHVybiAwOworfQorCisvKiBUcnkgdG8gZmlndXJlIG91dCB3aGF0IHR5cGUgb2YgSTJjIHdlIGhhdmUgKi8KK3N0YXRpYyBpbnQgVElHZXRJMmNUeXBlSW5Cb290TW9kZSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsKQoreworCWludCBzdGF0dXM7CisJX191OCBkYXRhOworCQkKKwkvLyBUcnkgdG8gcmVhZCB0eXBlIDIKKwlzdGF0dXMgPSBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJVU1QQ19NRU1PUllfUkVBRCwJCS8vIFJlcXVlc3QKKwkJCQkJRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUksCS8vIHdWYWx1ZSAoQWRkcmVzcyB0eXBlKQorCQkJCQkwLAkJIAkJLy8gd0luZGV4CisJCQkJCSZkYXRhLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkweDAxKTsJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwlpZiAoc3RhdHVzKQorCQlkYmcgKCIlcyAtIHJlYWQgMiBzdGF0dXMgZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwllbHNlCisJCWRiZyAoIiVzIC0gcmVhZCAyIGRhdGEgPSAweCV4IiwgX19GVU5DVElPTl9fLCBkYXRhKTsKKwlpZiAoKCFzdGF0dXMpICYmIChkYXRhID09IFVNUDUxNTIgfHwgZGF0YSA9PSBVTVAzNDEwKSkgeworCQlkYmcgKCIlcyAtIFJPTV9UWVBFX0lJIiwgX19GVU5DVElPTl9fKTsKKwkJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOworCQlyZXR1cm4gMDsKKwl9CisKKwkvLyBUcnkgdG8gcmVhZCB0eXBlIDMKKwlzdGF0dXMgPSBUSVJlYWRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJVU1QQ19NRU1PUllfUkVBRCwJCS8vIFJlcXVlc3QKKwkJCQkJRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUlJLAkvLyB3VmFsdWUgKEFkZHJlc3MgdHlwZSkKKwkJCQkJMCwJCQkJLy8gd0luZGV4CisJCQkJCSZkYXRhLAkJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkweDAxKTsJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwlpZiAoc3RhdHVzKQorCQlkYmcgKCIlcyAtIHJlYWQgMyBzdGF0dXMgZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwllbHNlCisJCWRiZyAoIiVzIC0gcmVhZCAyIGRhdGEgPSAweCV4IiwgX19GVU5DVElPTl9fLCBkYXRhKTsKKwlpZiAoKCFzdGF0dXMpICYmIChkYXRhID09IFVNUDUxNTIgfHwgZGF0YSA9PSBVTVAzNDEwKSkgeworCQlkYmcgKCIlcyAtIFJPTV9UWVBFX0lJSSIsIF9fRlVOQ1RJT05fXyk7CisJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUk7CisJCXJldHVybiAwOworCX0KKworCWRiZyAoIiVzIC0gVW5rbm93biIsIF9fRlVOQ1RJT05fXyk7CisJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IFRJU2VuZEJ1bGtUcmFuc2ZlclN5bmMgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHZvaWQgKmJ1ZmZlciwgaW50IGxlbmd0aCwgaW50ICpudW1fc2VudCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlzZXJpYWwtPnBvcnRbMF0tPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJYnVmZmVyLAorCQkJCWxlbmd0aCwKKwkJCQludW1fc2VudCwKKwkJCQkxMDAwKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBEb3dubG9hZCBnaXZlbiBmaXJtd2FyZSBpbWFnZSB0byB0aGUgZGV2aWNlIChJTiBCT09UIE1PREUpICovCitzdGF0aWMgaW50IFRJRG93bmxvYWRDb2RlSW1hZ2UgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgX191OCAqaW1hZ2UsIGludCBpbWFnZV9sZW5ndGgpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHBvczsKKwlpbnQgdHJhbnNmZXI7CisJaW50IGRvbmU7CisKKwkvLyBUcmFuc2ZlciBmaXJtd2FyZSBpbWFnZQorCWZvciAocG9zID0gMDsgcG9zIDwgaW1hZ2VfbGVuZ3RoOyApIHsKKwkJLy8gUmVhZCB0aGUgbmV4dCBidWZmZXIgZnJvbSBmaWxlCisJCXRyYW5zZmVyID0gaW1hZ2VfbGVuZ3RoIC0gcG9zOworCQlpZiAodHJhbnNmZXIgPiBFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFKQorCQkJdHJhbnNmZXIgPSBFREdFX0ZXX0JVTEtfTUFYX1BBQ0tFVF9TSVpFOworCisJCS8vIFRyYW5zZmVyIGRhdGEKKwkJc3RhdHVzID0gVElTZW5kQnVsa1RyYW5zZmVyU3luYyAoc2VyaWFsLT5zZXJpYWwsICZpbWFnZVtwb3NdLCB0cmFuc2ZlciwgJmRvbmUpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisJCS8vIEFkdmFuY2UgYnVmZmVyIHBvaW50ZXIKKwkJcG9zICs9IGRvbmU7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLy8gRklYTUUhISEKK3N0YXRpYyBpbnQgVElDb25maWd1cmVCb290RGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIERvd25sb2FkVElGaXJtd2FyZSAtIERvd25sb2FkIHJ1bi10aW1lIG9wZXJhdGluZyBmaXJtd2FyZSB0byB0aGUgVEk1MDUyCisgKiAKKyAqIFRoaXMgcm91dGluZSBkb3dubG9hZHMgdGhlIG1haW4gb3BlcmF0aW5nIGNvZGUgaW50byB0aGUgVEk1MDUyLCB1c2luZyB0aGUKKyAqIGJvb3QgY29kZSBhbHJlYWR5IGJ1cm5lZCBpbnRvIEUyUFJPTSBvciBST00uCisgKi8KK3N0YXRpYyBpbnQgVElEb3dubG9hZEZpcm13YXJlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+c2VyaWFsLT5kZXYtPmRldjsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc3RhcnRfYWRkcmVzczsKKwlzdHJ1Y3QgZWRnZV90aV9tYW51Zl9kZXNjcmlwdG9yICp0aV9tYW51Zl9kZXNjOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZmFjZTsKKwlpbnQgZG93bmxvYWRfY3VyX3ZlcjsKKwlpbnQgZG93bmxvYWRfbmV3X3ZlcjsKKworCS8qIFRoaXMgcm91dGluZSBpcyBlbnRlcmVkIGJ5IGJvdGggdGhlIEJPT1QgbW9kZSBhbmQgdGhlIERvd25sb2FkIG1vZGUKKwkgKiBXZSBjYW4gZGV0ZXJtaW5lIHdoaWNoIGNvZGUgaXMgcnVubmluZyBieSB0aGUgcmVhZGluZyB0aGUgY29uZmlnCisJICogZGVzY3JpcHRvciBhbmQgaWYgd2UgaGF2ZSBvbmx5IG9uZSBidWxrIHBpcGUgaXQgaXMgaW4gYm9vdCBtb2RlCisJICovCisJc2VyaWFsLT5wcm9kdWN0X2luZm8uaGFyZHdhcmVfdHlwZSA9IEhBUkRXQVJFX1RZUEVfVElVTVA7CisKKwkvKiBEZWZhdWx0IHRvIHR5cGUgMiBpMmMgKi8KKwlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUk7CisKKwlzdGF0dXMgPSBUSUNob29zZUNvbmZpZ3VyYXRpb24gKHNlcmlhbC0+c2VyaWFsLT5kZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpbnRlcmZhY2UgPSAmc2VyaWFsLT5zZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2M7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZGV2X2VyciAoZGV2LCAiJXMgLSBubyBpbnRlcmZhY2Ugc2V0LCBlcnJvciFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8vIFNldHVwIGluaXRpYWwgbW9kZSAtLSB0aGUgZGVmYXVsdCBtb2RlIDAgaXMgVElfTU9ERV9DT05GSUdVUklORworCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBlbmRwb2ludCB3ZSBhcmUgZGVmaW5pdGVseSBpbiBkb3dubG9hZCBtb2RlCisJaWYgKGludGVyZmFjZS0+Yk51bUVuZHBvaW50cyA+IDEpCisJCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfRE9XTkxPQUQ7CisJZWxzZQorCQkvLyBPdGhlcndpc2Ugd2Ugd2lsbCByZW1haW4gaW4gY29uZmlndXJpbmcgbW9kZQorCQlzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPSBUSV9NT0RFX0NPTkZJR1VSSU5HOworCisJLy8gU2F2ZSBEb3dubG9hZCBWZXJzaW9uIE51bWJlcgorCU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NYWpvclZlcnNpb24gPSBQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbjsKKwlPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWlub3JWZXJzaW9uID0gUGFnYWJsZU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb247CisJT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLkJ1aWxkTnVtYmVyCSA9IFBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uQnVpbGROdW1iZXI7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRG93bmxvYWQgTW9kZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID09IFRJX01PREVfRE9XTkxPQUQpIHsKKwkJc3RydWN0IHRpX2kyY19kZXNjICpyb21fZGVzYzsKKworCQlkYmcgKCIlcyAtIDw8PDw8PDw8PDw8PDw8PFJVTk5JTkcgSU4gRE9XTkxPQUQgTU9ERT4+Pj4+Pj4+Pj4iLCBfX0ZVTkNUSU9OX18pOworCisJCXN0YXR1cyA9IFRpVmFsaWRhdGVJMmNJbWFnZSAoc2VyaWFsKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnICgiJXMgLSA8PDw8PDw8PDw8PDw8PDxET1dOTE9BRCBNT0RFIC0tIEJBRCBJMkMgPj4+Pj4+Pj4+PiIsCisJCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCQorCQkvKiBWYWxpZGF0ZSBIYXJkd2FyZSB2ZXJzaW9uIG51bWJlcgorCQkgKiBSZWFkIE1hbnVmYWN0dXJpbmcgRGVzY3JpcHRvciBmcm9tIFRJIEJhc2VkIEVkZ2Vwb3J0CisJCSAqLworCQl0aV9tYW51Zl9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqdGlfbWFudWZfZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIXRpX21hbnVmX2Rlc2MpIHsKKwkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzdGF0dXMgPSBUSVJlYWRNYW51ZkRlc2NyaXB0b3IgKHNlcmlhbCwgKF9fdTggKil0aV9tYW51Zl9kZXNjKTsKKwkJaWYgKHN0YXR1cykgeworCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCisJCS8vIENoZWNrIHZlcnNpb24gbnVtYmVyIG9mIElPTiBkZXNjcmlwdG9yCisJCWlmICghaWdub3JlX2NwdV9yZXYgJiYgVElfR0VUX0NQVV9SRVZJU0lPTih0aV9tYW51Zl9kZXNjLT5DcHVSZXZfQm9hcmRSZXYpIDwgMikgeworCQkJZGJnICggIiVzIC0gV3JvbmcgQ1BVIFJldiAlZCAoTXVzdCBiZSAyKSIsIF9fRlVOQ1RJT05fXywgCisJCQkgICAgIFRJX0dFVF9DUFVfUkVWSVNJT04odGlfbWFudWZfZGVzYy0+Q3B1UmV2X0JvYXJkUmV2KSk7CisJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCSAgIAlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJvbV9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqcm9tX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyb21fZGVzYykgeworCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLy8gU2VhcmNoIGZvciB0eXBlIDIgcmVjb3JkIChmaXJtd2FyZSByZWNvcmQpCisJCWlmICgoc3RhcnRfYWRkcmVzcyA9IFRJR2V0RGVzY3JpcHRvckFkZHJlc3MgKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CQVNJQywgcm9tX2Rlc2MpKSAhPSAwKSB7CisJCQlzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYyAqZmlybXdhcmVfdmVyc2lvbjsKKwkJCV9fdTggcmVjb3JkOworCisJCQlkYmcgKCIlcyAtIEZvdW5kIFR5cGUgRklSTVdBUkUgKFR5cGUgMikgcmVjb3JkIiwgX19GVU5DVElPTl9fKTsKKworCQkJZmlybXdhcmVfdmVyc2lvbiA9IGttYWxsb2MgKHNpemVvZiAoKmZpcm13YXJlX3ZlcnNpb24pLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZmlybXdhcmVfdmVyc2lvbikgeworCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCS8vIFZhbGlkYXRlIHZlcnNpb24gbnVtYmVyCQkJCQorCQkJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCisJCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKKwkJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSwKKwkJCQkJKF9fdTggKilmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKworCQkJLy8gQ2hlY2sgdmVyc2lvbiBudW1iZXIgb2YgZG93bmxvYWQgd2l0aCBjdXJyZW50IHZlcnNpb24gaW4gSTJjCisJCQlkb3dubG9hZF9jdXJfdmVyID0gKGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciA8PCA4KSArIAorCQkJCQkgICAoZmlybXdhcmVfdmVyc2lvbi0+VmVyX01pbm9yKTsKKwkJCWRvd25sb2FkX25ld192ZXIgPSAoT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbiA8PCA4KSArCisJCQkJCSAgIChPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWlub3JWZXJzaW9uKTsKKworCQkJZGJnICgiJXMgLSA+Pj5GaXJtd2FyZSBWZXJzaW9ucyBEZXZpY2UgJWQuJWQgIERyaXZlciAlZC4lZCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywKKwkJCSAgICAgZmlybXdhcmVfdmVyc2lvbi0+VmVyX01ham9yLAorCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IsCisJCQkgICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NYWpvclZlcnNpb24sCisJCQkgICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb24pOworCisJCQkvLyBDaGVjayBpZiB3ZSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluIHRoZSBJMkMgYW5kIHVwZGF0ZSBpZiBuZWNlc3NhcnkKKwkJCWlmIChkb3dubG9hZF9jdXJfdmVyICE9IGRvd25sb2FkX25ld192ZXIpIHsKKwkJCQlkYmcgKCIlcyAtIFVwZGF0ZSBJMkMgRG93bmxvYWQgZnJvbSAlZC4lZCB0byAlZC4lZCIsCisJCQkJICAgICBfX0ZVTkNUSU9OX18sCisJCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWFqb3IsCisJCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IsCisJCQkJICAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uLAorCQkJCSAgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbik7CisKKwkJCQkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCisJCQkJLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBVTVAgdG8gY29tZSB1cCBpbiBCb290IE1vZGUuICBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciAKKwkJCQkvLyB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gCisJCQkJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCisJCQkJLy8gdGhlIG5ldyBmaXJtd2FyZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZSBmaXJtd2FyZSB3aWxsIHVwZGF0ZQorCQkJCS8vIHRoZSByZWNvcmQgdHlwZSBmcm9tIDB4ZjIgdG8gMHgwMi4KKworCQkJCXJlY29yZCA9IEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTks7CisKKwkJCQkvLyBDaGFuZ2UgdGhlIEkyQyBGaXJtd2FyZSByZWNvcmQgdHlwZSB0byAweGYyIHRvIHRyaWdnZXIgYW4gdXBkYXRlCisJCQkJc3RhdHVzID0gVElXcml0ZVJvbSAoc2VyaWFsLAorCQkJCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJCQkJc2l6ZW9mKHJlY29yZCksCisJCQkJCQkJJnJlY29yZCk7CisJCQkJaWYgKHN0YXR1cykgeworCQkJCQlrZnJlZSAoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQkJcmV0dXJuIHN0YXR1czsKKwkJCQl9CisKKwkJCQkvLyB2ZXJpZnkgdGhlIHdyaXRlIC0tIG11c3QgZG8gdGhpcyBpbiBvcmRlciBmb3Igd3JpdGUgdG8gCisJCQkJLy8gY29tcGxldGUgYmVmb3JlIHdlIGRvIHRoZSBoYXJkd2FyZSByZXNldAorCQkJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJCQkJc2l6ZW9mKHJlY29yZCksCisJCQkJCQkJJnJlY29yZCk7CisKKwkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJCX0KKworCQkJCWlmIChyZWNvcmQgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSykgeworCQkJCQlkZXZfZXJyIChkZXYsICIlcyAtIGVycm9yIHJlc2V0dGluZyBkZXZpY2VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQl9CisKKwkJCQlkYmcgKCIlcyAtIEhBUkRXQVJFIFJFU0VUIiwgX19GVU5DVElPTl9fKTsKKworCQkJCS8vIFJlc2V0IFVNUCAtLSBCYWNrIHRvIEJPT1QgTU9ERQorCQkJCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkJCQlVTVBDX0hBUkRXQVJFX1JFU0VULAkvLyBSZXF1ZXN0CisJCQkJCQkJCTAsCQkJLy8gd1ZhbHVlCisJCQkJCQkJCTAsCQkJLy8gd0luZGV4CisJCQkJCQkJCU5VTEwsCQkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJCQkJMCk7CQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKworCQkJCWRiZyAoICIlcyAtIEhBUkRXQVJFIFJFU0VUIHJldHVybiAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCQkJCS8qIHJldHVybiBhbiBlcnJvciBvbiBwdXJwb3NlLiAqLworCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJfQorCQkvLyBTZWFyY2ggZm9yIHR5cGUgMHhGMiByZWNvcmQgKGZpcm13YXJlIGJsYW5rIHJlY29yZCkKKwkJZWxzZSBpZiAoKHN0YXJ0X2FkZHJlc3MgPSBUSUdldERlc2NyaXB0b3JBZGRyZXNzIChzZXJpYWwsIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTkssIHJvbV9kZXNjKSkgIT0gMCkgeworCQkJI2RlZmluZSBIRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYykgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMpKQorCQkJX191OCAqaGVhZGVyOworCQkJX191OCAqdmhlYWRlcjsKKworCQkJaGVhZGVyICA9IGttYWxsb2MgKEhFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghaGVhZGVyKSB7CisJCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCQkKKwkJCXZoZWFkZXIgPSBrbWFsbG9jIChIRUFERVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXZoZWFkZXIpIHsKKwkJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJCisJCQlkYmcgKCIlcyAtIEZvdW5kIFR5cGUgQkxBTksgRklSTVdBUkUgKFR5cGUgRjIpIHJlY29yZCIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8vIEluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgSTJDIGZpcm13YXJlIHdlIG11c3QgY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4KKwkJCS8vIFRoaXMgd2lsbCBmb3JjZSB0aGUgVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290IG1vZGUsIHRoZSBkcml2ZXIgCisJCQkvLyB3aWxsIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHBhZGRlZCB0byAxNS41aykgaW50byB0aGUgVU1QIHJhbS4gCisJCQkvLyBBbmQgZmluYWxseSB3aGVuIHRoZSBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSAKKwkJCS8vIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUKKwkJCS8vIHRoZSByZWNvcmQgdHlwZSBmcm9tIDB4ZjIgdG8gMHgwMi4KKwkJCXN0YXR1cyA9IEJ1aWxkSTJDRmlybXdhcmVIZWFkZXIoaGVhZGVyLCBkZXYpOworCQkJaWYgKHN0YXR1cykgeworCQkJCWtmcmVlICh2aGVhZGVyKTsKKwkJCQlrZnJlZSAoaGVhZGVyKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCisJCQkvLyBVcGRhdGUgSTJDIHdpdGggdHlwZSAweGYyIHJlY29yZCB3aXRoIGNvcnJlY3Qgc2l6ZSBhbmQgY2hlY2tzdW0KKwkJCXN0YXR1cyA9IFRJV3JpdGVSb20gKHNlcmlhbCwKKwkJCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJCQlIRUFERVJfU0laRSwKKwkJCQkJCWhlYWRlcik7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisKKwkJCS8vIHZlcmlmeSB0aGUgd3JpdGUgLS0gbXVzdCBkbyB0aGlzIGluIG9yZGVyIGZvciB3cml0ZSB0byAKKwkJCS8vIGNvbXBsZXRlIGJlZm9yZSB3ZSBkbyB0aGUgaGFyZHdhcmUgcmVzZXQKKwkJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCQkJc3RhcnRfYWRkcmVzcywKKwkJCQkJCUhFQURFUl9TSVpFLAorCQkJCQkJdmhlYWRlcik7CisKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkYmcgKCIlcyAtIGNhbid0IHJlYWQgaGVhZGVyIGJhY2siLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlICh2aGVhZGVyKTsKKwkJCQlrZnJlZSAoaGVhZGVyKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQkJaWYgKG1lbWNtcCh2aGVhZGVyLCBoZWFkZXIsIEhFQURFUl9TSVpFKSkgeworCQkJCWRiZyAoIiVzIC0gd3JpdGUgZG93bmxvYWQgcmVjb3JkIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisKKwkJCWtmcmVlICh2aGVhZGVyKTsKKwkJCWtmcmVlIChoZWFkZXIpOworCisJCQlkYmcgKCIlcyAtIFN0YXJ0IGZpcm13YXJlIHVwZGF0ZSIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8vIFRlbGwgZmlybXdhcmUgdG8gY29weSBkb3dubG9hZCBpbWFnZSBpbnRvIEkyQyAKKwkJCXN0YXR1cyA9IFRJU2VuZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQkJVU1QQ19DT1BZX0ROTERfVE9fSTJDLAkvLyBSZXF1ZXN0CisJCQkJCQkwLAkJCS8vIHdWYWx1ZSAKKwkJCQkJCTAsCQkJLy8gd0luZGV4CisJCQkJCQlOVUxMLAkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCQkwKTsJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCisJCSAgCWRiZyAoIiVzIC0gVXBkYXRlIGNvbXBsZXRlIDB4JXgiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBVTVBDX0NPUFlfRE5MRF9UT19JMkMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCX0KKworCQkvLyBUaGUgZGV2aWNlIGlzIHJ1bm5pbmcgdGhlIGRvd25sb2FkIGNvZGUKKwkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQm9vdCBNb2RlICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRiZyAoIiVzIC0gPDw8PDw8PDw8PDw8PDw8UlVOTklORyBJTiBCT09UIE1PREU+Pj4+Pj4+Pj4+Pj4+Pj4iLAorCSAgICAgX19GVU5DVElPTl9fKTsKKworCS8vIENvbmZpZ3VyZSB0aGUgVEkgZGV2aWNlIHNvIHdlIGNhbiB1c2UgdGhlIEJVTEsgcGlwZXMgZm9yIGRvd25sb2FkCisJc3RhdHVzID0gVElDb25maWd1cmVCb290RGV2aWNlIChzZXJpYWwtPnNlcmlhbC0+ZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IFVTQl9WRU5ET1JfSURfSU9OKSB7CisJCWRiZyAoIiVzIC0gVklEID0gMHgleCIsIF9fRlVOQ1RJT05fXywKKwkJICAgICBsZTE2X3RvX2NwdShzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSk7CisJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKKwkJZ290byBTdGF5SW5Cb290TW9kZTsKKwl9CisKKwkvLyBXZSBoYXZlIGFuIElPTiBkZXZpY2UgKEkyYyBNdXN0IGJlIHByb2dyYW1tZWQpCisJLy8gRGV0ZXJtaW5lIEkyQyBpbWFnZSB0eXBlCisJaWYgKFRJR2V0STJjVHlwZUluQm9vdE1vZGUoc2VyaWFsKSkgeworCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCX0KKworCS8vIFJlZ2lzdHJ5IHZhcmlhYmxlIHNldD8KKwlpZiAoVElTdGF5SW5Cb290TW9kZSkgeworCQlkYmcgKCIlcyAtIFRJU3RheUluQm9vdE1vZGUiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCX0KKworCS8vIENoZWNrIGZvciBJT04gVmVuZG9yIElEIGFuZCB0aGF0IHRoZSBJMkMgaXMgdmFsaWQKKwlpZiAoIVRpVmFsaWRhdGVJMmNJbWFnZShzZXJpYWwpKSB7CisJCXN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICpoZWFkZXI7CisJCWludCBpOworCQlfX3U4IGNzID0gMDsKKwkJX191OCAqYnVmZmVyOworCQlpbnQgYnVmZmVyX3NpemU7CisKKwkJLyogVmFsaWRhdGUgSGFyZHdhcmUgdmVyc2lvbiBudW1iZXIKKwkJICogUmVhZCBNYW51ZmFjdHVyaW5nIERlc2NyaXB0b3IgZnJvbSBUSSBCYXNlZCBFZGdlcG9ydAorCQkgKi8KKwkJdGlfbWFudWZfZGVzYyA9IGttYWxsb2MgKHNpemVvZiAoKnRpX21hbnVmX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aV9tYW51Zl9kZXNjKSB7CisJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJc3RhdHVzID0gVElSZWFkTWFudWZEZXNjcmlwdG9yIChzZXJpYWwsIChfX3U4ICopdGlfbWFudWZfZGVzYyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCWdvdG8gU3RheUluQm9vdE1vZGU7CisJCX0KKworCQkvLyBDaGVjayBmb3IgdmVyc2lvbiAyCisJCWlmICghaWdub3JlX2NwdV9yZXYgJiYgVElfR0VUX0NQVV9SRVZJU0lPTih0aV9tYW51Zl9kZXNjLT5DcHVSZXZfQm9hcmRSZXYpIDwgMikgeworCQkJZGJnICgiJXMgLSBXcm9uZyBDUFUgUmV2ICVkIChNdXN0IGJlIDIpIiwgX19GVU5DVElPTl9fLAorCQkJICAgICBUSV9HRVRfQ1BVX1JFVklTSU9OKHRpX21hbnVmX2Rlc2MtPkNwdVJldl9Cb2FyZFJldikpOworCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJZ290byBTdGF5SW5Cb290TW9kZTsKKwkJfQorCisJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKworCQkvLyBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0IGNoYW5nZSB0aGUgdHlwZSAyIHJlY29yZCB0byB0eXBlIDB4RjIuCisJCS8vIFRoaXMgd2lsbCBmb3JjZSB0aGUgVU1QIHRvIGNvbWUgdXAgaW4gQm9vdCBNb2RlLiAgVGhlbiB3aGlsZSBpbiBib290IG1vZGUsIHRoZSBkcml2ZXIgCisJCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKKwkJLy8gQW5kIGZpbmFsbHkgd2hlbiB0aGUgZGV2aWNlIGNvbWVzIGJhY2sgdXAgaW4gZG93bmxvYWQgbW9kZSB0aGUgZHJpdmVyIHdpbGwgY2F1c2UgCisJCS8vIHRoZSBuZXcgZmlybXdhcmUgdG8gYmUgY29waWVkIGZyb20gdGhlIFVNUCBSYW0gdG8gSTJDIGFuZCB0aGUgZmlybXdhcmUgd2lsbCB1cGRhdGUKKwkJLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgorCQkKKwkJLyoKKwkJICogRG8gd2UgcmVhbGx5IGhhdmUgdG8gY29weSB0aGUgd2hvbGUgZmlybXdhcmUgaW1hZ2UsCisJCSAqIG9yIGNvdWxkIHdlIGRvIHRoaXMgaW4gcGxhY2UhCisJCSAqLworCisJCS8vIEFsbG9jYXRlIGEgMTUuNWsgYnVmZmVyICsgMyBieXRlIGhlYWRlcgorCQlidWZmZXJfc2l6ZSA9ICgoKDEwMjQgKiAxNikgLSA1MTIpICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyKSk7CisJCWJ1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWZmZXIpIHsKKwkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCQorCQkvLyBJbml0aWFsaXplIHRoZSBidWZmZXIgdG8gMHhmZiAocGFkIHRoZSBidWZmZXIpCisJCW1lbXNldCAoYnVmZmVyLCAweGZmLCBidWZmZXJfc2l6ZSk7CisKKwkJbWVtY3B5IChidWZmZXIsICZQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VbMF0sIFBhZ2FibGVPcGVyYXRpb25hbENvZGVTaXplKTsKKworCQlmb3IoaSA9IHNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcik7IGkgPCBidWZmZXJfc2l6ZTsgaSsrKSB7CisJCQljcyA9IChfX3U4KShjcyArIGJ1ZmZlcltpXSk7CisJCX0KKwkJCisJCWhlYWRlciA9IChzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlciAqKWJ1ZmZlcjsKKwkJCisJCS8vIHVwZGF0ZSBsZW5ndGggYW5kIGNoZWNrc3VtIGFmdGVyIHBhZGRpbmcKKwkJaGVhZGVyLT5MZW5ndGggCSA9IGNwdV90b19sZTE2KChfX3UxNikoYnVmZmVyX3NpemUgLSBzaXplb2Yoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIpKSk7CisJCWhlYWRlci0+Q2hlY2tTdW0gPSBjczsKKworCQkvLyBEb3dubG9hZCB0aGUgb3BlcmF0aW9uYWwgY29kZSAKKwkJZGJnICgiJXMgLSBEb3dubG9hZGluZyBvcGVyYXRpb25hbCBjb2RlIGltYWdlIChUSSBVTVApIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gVElEb3dubG9hZENvZGVJbWFnZSAoc2VyaWFsLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKworCQlrZnJlZSAoYnVmZmVyKTsKKworCQlpZiAoc3RhdHVzKSB7CisJICAJCWRiZyAoIiVzIC0gRXJyb3IgZG93bmxvYWRpbmcgb3BlcmF0aW9uYWwgY29kZSBpbWFnZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisKKwkJLy8gRGV2aWNlIHdpbGwgcmVib290CisJCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfVFJBTlNJVElPTklORzsKKworICAJCWRiZyAoIiVzIC0gRG93bmxvYWQgc3VjY2Vzc2Z1bCAtLSBEZXZpY2UgcmVib290aW5nLi4uIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiByZXR1cm4gYW4gZXJyb3Igb24gcHVycG9zZSAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKK1N0YXlJbkJvb3RNb2RlOgorCS8vIEVwcm9tIGlzIGludmFsaWQgb3IgYmxhbmsgc3RheSBpbiBib290IG1vZGUKKwlkYmcgKCIlcyAtIDw8PDw8PDw8PDw8PDw8PFNUQVlJTkcgSU4gQk9PVCBNT0RFPj4+Pj4+Pj4+Pj4+IiwgX19GVU5DVElPTl9fKTsKKwlzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPSBUSV9NT0RFX0JPT1Q7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IFRJU2V0RHRyIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCXBvcnQtPnNoYWRvd19tY3IgfD0gTUNSX0RUUjsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9EVFIsCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkxLAkvKiBzZXQgKi8KKwkJCQlOVUxMLAorCQkJCTApOworfQorCitzdGF0aWMgaW50IFRJQ2xlYXJEdHIgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+c2hhZG93X21jciAmPSB+TUNSX0RUUjsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9EVFIsCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAkvKiBjbGVhciAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElTZXRSdHMgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+c2hhZG93X21jciB8PSBNQ1JfUlRTOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX1JUUywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTEsCS8qIHNldCAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElDbGVhclJ0cyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlwb3J0LT5zaGFkb3dfbWNyICY9IH5NQ1JfUlRTOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX1JUUywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTAsCS8qIGNsZWFyICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSVNldExvb3BCYWNrIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0xPT1BCQUNLLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMSwJLyogc2V0ICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSUNsZWFyTG9vcEJhY2sgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DTFJfTE9PUEJBQ0ssCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAkvKiBjbGVhciAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElTZXRCcmVhayAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9CUkVBSywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTEsCS8qIHNldCAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElDbGVhckJyZWFrIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0JSRUFLLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMCwJLyogY2xlYXIgKi8KKwkJCQlOVUxMLAorCQkJCTApOworfQorCitzdGF0aWMgaW50IFRJUmVzdG9yZU1DUiAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQsIF9fdTggbWNyKQoreworCWludCBzdGF0dXMgPSAwOworCisJZGJnICgiJXMgLSAleCIsIF9fRlVOQ1RJT05fXywgbWNyKTsKKworCWlmIChtY3IgJiBNQ1JfRFRSKQorCQlzdGF0dXMgPSBUSVNldER0ciAocG9ydCk7CisJZWxzZQorCQlzdGF0dXMgPSBUSUNsZWFyRHRyIChwb3J0KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWNyICYgTUNSX1JUUykKKwkJc3RhdHVzID0gVElTZXRSdHMgKHBvcnQpOworCWVsc2UKKwkJc3RhdHVzID0gVElDbGVhclJ0cyAocG9ydCk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKG1jciAmIE1DUl9MT09QQkFDSykKKwkJc3RhdHVzID0gVElTZXRMb29wQmFjayAocG9ydCk7CisJZWxzZQorCQlzdGF0dXMgPSBUSUNsZWFyTG9vcEJhY2sgKHBvcnQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCisKKy8qIENvbnZlcnQgVEkgTFNSIHRvIHN0YW5kYXJkIFVBUlQgZmxhZ3MgKi8KK3N0YXRpYyBfX3U4IE1hcExpbmVTdGF0dXMgKF9fdTggdGlfbHNyKQoreworCV9fdTggbHNyID0gMDsKKworI2RlZmluZSBNQVBfRkxBRyhmbGFnVW1wLCBmbGFnVWFydCkgICAgXAorCWlmICh0aV9sc3IgJiBmbGFnVW1wKSBcCisJCWxzciB8PSBmbGFnVWFydDsKKworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9PVl9NQVNLLCBMU1JfT1ZFUl9FUlIpCS8qIG92ZXJydW4gKi8KKwlNQVBfRkxBRyhVTVBfVUFSVF9MU1JfUEVfTUFTSywgTFNSX1BBUl9FUlIpCS8qIHBhcml0eSBlcnJvciAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9GRV9NQVNLLCBMU1JfRlJNX0VSUikJLyogZnJhbWluZyBlcnJvciAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9CUl9NQVNLLCBMU1JfQlJFQUspCS8qIGJyZWFrIGRldGVjdGVkICovCisJTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX1JYX01BU0ssIExTUl9SWF9BVkFJTCkJLyogcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9UWF9NQVNLLCBMU1JfVFhfRU1QVFkpCS8qIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKworI3VuZGVmIE1BUF9GTEFHCisKKwlyZXR1cm4gbHNyOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X21zciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBtc3IpCit7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlkYmcgKCIlcyAtICUwMngiLCBfX0ZVTkNUSU9OX18sIG1zcik7CisKKwlpZiAobXNyICYgKEVER0VQT1JUX01TUl9ERUxUQV9DVFMgfCBFREdFUE9SVF9NU1JfREVMVEFfRFNSIHwgRURHRVBPUlRfTVNSX0RFTFRBX1JJIHwgRURHRVBPUlRfTVNSX0RFTFRBX0NEKSkgeworCQlpY291bnQgPSAmZWRnZV9wb3J0LT5pY291bnQ7CisKKwkJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwkJaWYgKG1zciAmIEVER0VQT1JUX01TUl9ERUxUQV9DVFMpCisJCQlpY291bnQtPmN0cysrOworCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0RTUikKKwkJCWljb3VudC0+ZHNyKys7CisJCWlmIChtc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfQ0QpCisJCQlpY291bnQtPmRjZCsrOworCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX1JJKQorCQkJaWNvdW50LT5ybmcrKzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJfQorCisJLyogU2F2ZSB0aGUgbmV3IG1vZGVtIHN0YXR1cyAqLworCWVkZ2VfcG9ydC0+c2hhZG93X21zciA9IG1zciAmIDB4ZjA7CisKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwkvKiBoYW5kbGUgQ1RTIGZsb3cgY29udHJvbCAqLworCWlmICh0dHkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKKwkJaWYgKG1zciAmIEVER0VQT1JUX01TUl9DVFMpIHsKKwkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQl0dHlfd2FrZXVwKHR0eSk7CisJCX0gZWxzZSB7CisJCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQl9CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xzciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgaW50IGxzcl9kYXRhLCBfX3U4IGxzciwgX191OCBkYXRhKQoreworCXN0cnVjdCBhc3luY19pY291bnQgKmljb3VudDsKKwlfX3U4IG5ld19sc3IgPSAoX191OCkobHNyICYgKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUspKTsKKworCWRiZyAoIiVzIC0gJTAyeCIsIF9fRlVOQ1RJT05fXywgbmV3X2xzcik7CisKKwllZGdlX3BvcnQtPnNoYWRvd19sc3IgPSBsc3I7CisKKwlpZiAobmV3X2xzciAmIExTUl9CUkVBSykgeworCQkvKgorCQkgKiBQYXJpdHkgYW5kIEZyYW1pbmcgZXJyb3JzIG9ubHkgY291bnQgaWYgdGhleQorCQkgKiBvY2N1ciBleGNsdXNpdmUgb2YgYSBicmVhayBiZWluZyByZWNlaXZlZC4KKwkJICovCisJCW5ld19sc3IgJj0gKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9CUkVBSyk7CisJfQorCisJLyogUGxhY2UgTFNSIGRhdGEgYnl0ZSBpbnRvIFJ4IGJ1ZmZlciAqLworCWlmIChsc3JfZGF0YSAmJiBlZGdlX3BvcnQtPnBvcnQtPnR0eSkKKwkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIGVkZ2VfcG9ydC0+cG9ydC0+dHR5LCAmZGF0YSwgMSk7CisKKwkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKKwlpZiAobmV3X2xzciAmIExTUl9CUkVBSykKKwkJaWNvdW50LT5icmsrKzsKKwlpZiAobmV3X2xzciAmIExTUl9PVkVSX0VSUikKKwkJaWNvdW50LT5vdmVycnVuKys7CisJaWYgKG5ld19sc3IgJiBMU1JfUEFSX0VSUikKKwkJaWNvdW50LT5wYXJpdHkrKzsKKwlpZiAobmV3X2xzciAmIExTUl9GUk1fRVJSKQorCQlpY291bnQtPmZyYW1lKys7Cit9CisKKworc3RhdGljIHZvaWQgZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwgPSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBmdW5jdGlvbjsKKwlpbnQgc3RhdHVzOworCV9fdTggbHNyOworCV9fdTggbXNyOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIWxlbmd0aCkgeworCQlkYmcgKCIlcyAtIG5vIGRhdGEgaW4gdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKwkJCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fRlVOQ1RJT05fXywgbGVuZ3RoLCBkYXRhKTsKKwkJCisJaWYgKGxlbmd0aCAhPSAyKSB7CisJCWRiZyAoIiVzIC0gZXhwZWN0aW5nIHBhY2tldCBvZiBzaXplIDIsIGdvdCAlZCIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnRfbnVtYmVyID0gVElVTVBfR0VUX1BPUlRfRlJPTV9DT0RFIChkYXRhWzBdKTsKKwlmdW5jdGlvbiAgICA9IFRJVU1QX0dFVF9GVU5DX0ZST01fQ09ERSAoZGF0YVswXSk7CisJZGJnICgiJXMgLSBwb3J0X251bWJlciAlZCwgZnVuY3Rpb24gJWQsIGluZm8gMHgleCIsCisJICAgICBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBmdW5jdGlvbiwgZGF0YVsxXSk7CisJcG9ydCA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbcG9ydF9udW1iZXJdOworCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIWVkZ2VfcG9ydCkgeworCQlkYmcgKCIlcyAtIGVkZ2VfcG9ydCBub3QgZm91bmQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCXN3aXRjaCAoZnVuY3Rpb24pIHsKKwljYXNlIFRJVU1QX0lOVEVSUlVQVF9DT0RFX0xTUjoKKwkJbHNyID0gTWFwTGluZVN0YXR1cyhkYXRhWzFdKTsKKwkJaWYgKGxzciAmIFVNUF9VQVJUX0xTUl9EQVRBX01BU0spIHsKKwkJCS8qIFNhdmUgdGhlIExTUiBldmVudCBmb3IgYnVsayByZWFkIGNvbXBsZXRpb24gcm91dGluZSAqLworCQkJZGJnICgiJXMgLSBMU1IgRXZlbnQgUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGxzcik7CisJCQllZGdlX3BvcnQtPmxzcl9ldmVudCA9IDE7CisJCQllZGdlX3BvcnQtPmxzcl9tYXNrID0gbHNyOworCQl9IGVsc2UgeworCQkJZGJnICgiJXMgLSA9PT09PSBQb3J0ICVkIExTUiBTdGF0dXMgPSAlMDJ4ID09PT09PSIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGxzcik7CisJCQloYW5kbGVfbmV3X2xzciAoZWRnZV9wb3J0LCAwLCBsc3IsIDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBUSVVNUF9JTlRFUlJVUFRfQ09ERV9NU1I6CS8vIE1TUgorCQkvKiBDb3B5IE1TUiBmcm9tIFVNUCAqLworCQltc3IgPSBkYXRhWzFdOworCQlkYmcgKCIlcyAtID09PT09IFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMnggPT09PT09XG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIG1zcik7CisJCWhhbmRsZV9uZXdfbXNyIChlZGdlX3BvcnQsIG1zcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VyciAoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIFVua25vd24gSW50ZXJydXB0IGNvZGUgZnJvbSBVTVAgJXhcbiIsCisJCQkgX19GVU5DVElPTl9fLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJCQorCX0KKworZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyICgmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKil1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHBvcnRfbnVtYmVyOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VyciAoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzICk7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkKKwkJZ290byBleGl0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gc3RvcHBpbmcgcmVhZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0X251bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJaWYgKGVkZ2VfcG9ydC0+bHNyX2V2ZW50KSB7CisJCWVkZ2VfcG9ydC0+bHNyX2V2ZW50ID0gMDsKKwkJZGJnICgiJXMgPT09PT0gUG9ydCAldSBMU1IgU3RhdHVzID0gJTAyeCwgRGF0YSA9ICUwMnggPT09PT09IiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBlZGdlX3BvcnQtPmxzcl9tYXNrLCAqZGF0YSk7CisJCWhhbmRsZV9uZXdfbHNyIChlZGdlX3BvcnQsIDEsIGVkZ2VfcG9ydC0+bHNyX21hc2ssICpkYXRhKTsKKwkJLyogQWRqdXN0IGJ1ZmZlciBsZW5ndGgvcG9pbnRlciAqLworCQktLXVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJKytkYXRhOworCX0KKworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZykgeworCQkJZGJnICgiJXMgLSBjbG9zZSBpcyBwZW5kaW5nLCBkcm9wcGluZyBkYXRhIG9uIHRoZSBmbG9vci4iLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJfQorCQllZGdlX3BvcnQtPmljb3VudC5yeCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCitleGl0OgorCS8qIGNvbnRpbnVlIHJlYWQgdW5sZXNzIHN0b3BwZWQgKi8KKwlzcGluX2xvY2soJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CisJaWYgKGVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPT0gRURHRV9SRUFEX1VSQl9SVU5OSU5HKSB7CisJCXVyYi0+ZGV2ID0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UgaWYgKGVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPT0gRURHRV9SRUFEX1VSQl9TVE9QUElORykgeworCQllZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID0gRURHRV9SRUFEX1VSQl9TVE9QUEVEOworCX0KKwlzcGluX3VubG9jaygmZWRnZV9wb3J0LT5lcF9sb2NrKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyICgmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGNudDsKKworCWRvIHsKKwkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY250ID0gbWluKGxlbmd0aCwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCk7CisJCW1lbWNweSh0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBkYXRhLCBjbnQpOworCQltZW1zZXQodHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgMCwgY250KTsKKwkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuY291bnQgKz0gY250OworCQlkYXRhICs9IGNudDsKKwkJbGVuZ3RoIC09IGNudDsKKwl9IHdoaWxlIChsZW5ndGggPiAwKTsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcgKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKwllZGdlX3NlbmQocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcG9ydF9udW1iZXI7CisJaW50IHN0YXR1czsKKwl1MTYgb3Blbl9zZXR0aW5nczsKKwl1OCB0cmFuc2FjdGlvbl90aW1lb3V0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IGxvd19sYXRlbmN5OworCisJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCXN3aXRjaCAocG9ydF9udW1iZXIpIHsKKwkJY2FzZSAwOgorCQkJZWRnZV9wb3J0LT51YXJ0X2Jhc2UgPSBVTVBNRU1fQkFTRV9VQVJUMTsKKwkJCWVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MgPSBVTVBEX09FREIxX0FERFJFU1M7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZWRnZV9wb3J0LT51YXJ0X2Jhc2UgPSBVTVBNRU1fQkFTRV9VQVJUMjsKKwkJCWVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MgPSBVTVBEX09FREIyX0FERFJFU1M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIgKCZwb3J0LT5kZXYsICJVbmtub3duIHBvcnQgbnVtYmVyISEhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCWRiZyAoIiVzIC0gcG9ydF9udW1iZXIgPSAlZCwgdWFydF9iYXNlID0gJTA0eCwgZG1hX2FkZHJlc3MgPSAlMDR4IiwKKwkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGVkZ2VfcG9ydC0+dWFydF9iYXNlLCBlZGdlX3BvcnQtPmRtYV9hZGRyZXNzKTsKKworCWRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJbWVtc2V0ICgmKGVkZ2VfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCAoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCisJLyogdHVybiBvZmYgbG9vcGJhY2sgKi8KKwlzdGF0dXMgPSBUSUNsZWFyTG9vcEJhY2sgKGVkZ2VfcG9ydCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgY2xlYXIgbG9vcGJhY2sgY29tbWFuZCwgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCQorCS8qIHNldCB1cCB0aGUgcG9ydCBzZXR0aW5ncyAqLworCWVkZ2Vfc2V0X3Rlcm1pb3MgKHBvcnQsIE5VTEwpOworCisJLyogb3BlbiB1cCB0aGUgcG9ydCAqLworCisJLyogbWlsbGlzZWNvbmRzIHRvIHRpbWVvdXQgZm9yIERNQSB0cmFuc2ZlciAqLworCXRyYW5zYWN0aW9uX3RpbWVvdXQgPSAyOworCisJZWRnZV9wb3J0LT51bXBfcmVhZF90aW1lb3V0ID0gbWF4ICgyMCwgKCh0cmFuc2FjdGlvbl90aW1lb3V0ICogMykgLyAyKSApOworCisJLy8gbWlsbGlzZWNvbmRzIHRvIHRpbWVvdXQgZm9yIERNQSB0cmFuc2ZlcgorCW9wZW5fc2V0dGluZ3MgPSAodTgpKFVNUF9ETUFfTU9ERV9DT05USU5PVVMgfCAKKwkJCSAgICAgVU1QX1BJUEVfVFJBTlNfVElNRU9VVF9FTkEgfCAKKwkJCSAgICAgKHRyYW5zYWN0aW9uX3RpbWVvdXQgPDwgMikpOworCisJZGJnICgiJXMgLSBTZW5kaW5nIFVNUENfT1BFTl9QT1JUIiwgX19GVU5DVElPTl9fKTsKKworCS8qIFRlbGwgVEkgdG8gb3BlbiBhbmQgc3RhcnQgdGhlIHBvcnQgKi8KKwlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKGRldiwKKwkJCQkJVU1QQ19PUEVOX1BPUlQsCisJCQkJCSh1OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCQlvcGVuX3NldHRpbmdzLAorCQkJCQlOVUxMLAorCQkJCQkwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogU3RhcnQgdGhlIERNQT8gKi8KKwlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKGRldiwKKwkJCQkJVU1QQ19TVEFSVF9QT1JULAorCQkJCQkodTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkJMCwKKwkJCQkJTlVMTCwKKwkJCQkJMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgc3RhcnQgRE1BIGNvbW1hbmQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogQ2xlYXIgVFggYW5kIFJYIGJ1ZmZlcnMgaW4gVU1QICovCisJc3RhdHVzID0gVElQdXJnZURhdGFTeW5jIChwb3J0LCBVTVBfUE9SVF9ESVJfT1VUIHwgVU1QX1BPUlRfRElSX0lOKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBjbGVhciBidWZmZXJzIGNvbW1hbmQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogUmVhZCBJbml0aWFsIE1TUiAqLworCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChkZXYsCisJCQkJCVVNUENfUkVBRF9NU1IsCS8vIFJlcXVlc3QKKwkJCQkJMCwJCS8vIHdWYWx1ZQorCQkJCQkoX191MTYpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwJLy8gd0luZGV4IChBZGRyZXNzKQorCQkJCQkmZWRnZV9wb3J0LT5zaGFkb3dfbXNyLAkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCTEpOwkJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwlpZiAoc3RhdHVzKSB7CisgCQlkZXZfZXJyKCZwb3J0LT5kZXYsIiVzIC0gY2Fubm90IHNlbmQgcmVhZCBNU1IgY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlkYmcgKCJTaGFkb3dNU1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21zcik7CisgCisJLyogU2V0IEluaXRpYWwgTUNSICovCisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyID0gTUNSX1JUUyB8IE1DUl9EVFI7CisJZGJnICgiU2hhZG93TUNSIDB4JVgiLCBlZGdlX3BvcnQtPnNoYWRvd19tY3IpOworCisJZWRnZV9zZXJpYWwgPSBlZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsOworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmVkZ2Vfc2VyaWFsLT5lc19zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWlmIChlZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW4gPT0gMCkgeworCQkvKiB3ZSBhcmUgdGhlIGZpcnN0IHBvcnQgdG8gYmUgb3BlbmVkLCBsZXQncyBwb3N0IHRoZSBpbnRlcnJ1cHQgdXJiICovCisJCXVyYiA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmI7CisJCWlmICghdXJiKSB7CisJCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBubyBpbnRlcnJ1cHQgdXJiIHByZXNlbnQsIGV4aXRpbmdcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJZ290byB1cF9lc19zZW07CisJCX0KKwkJdXJiLT5jb21wbGV0ZSA9IGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrOworCQl1cmItPmNvbnRleHQgPSBlZGdlX3NlcmlhbDsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJZ290byB1cF9lc19zZW07CisJCX0KKwl9CisKKwkvKgorCSAqIHJlc2V0IHRoZSBkYXRhIHRvZ2dsZSBvbiB0aGUgYnVsayBlbmRwb2ludHMgdG8gd29yayBhcm91bmQgYnVnIGluCisJICogaG9zdCBjb250cm9sbGVycyB3aGVyZSB0aGluZ3MgZ2V0IG91dCBvZiBzeW5jIHNvbWUgdGltZXMKKwkgKi8KKwl1c2JfY2xlYXJfaGFsdCAoZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOworCXVzYl9jbGVhcl9oYWx0IChkZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKKworCS8qIHN0YXJ0IHVwIG91ciBidWxrIHJlYWQgdXJiICovCisJdXJiID0gcG9ydC0+cmVhZF91cmI7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gbm8gcmVhZCB1cmIgcHJlc2VudCwgZXhpdGluZ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisJZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9IEVER0VfUkVBRF9VUkJfUlVOTklORzsKKwl1cmItPmNvbXBsZXRlID0gZWRnZV9idWxrX2luX2NhbGxiYWNrOworCXVyYi0+Y29udGV4dCA9IGVkZ2VfcG9ydDsKKwl1cmItPmRldiA9IGRldjsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIHJlYWQgYnVsayB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCSsrZWRnZV9zZXJpYWwtPm51bV9wb3J0c19vcGVuOworCisJZGJnKCIlcyAtIGV4aXRlZCIsIF9fRlVOQ1RJT05fXyk7CisKKwlnb3RvIHVwX2VzX3NlbTsKKwordW5saW5rX2ludF91cmI6CisJaWYgKGVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWwtPm51bV9wb3J0c19vcGVuID09IDApCisJCXVzYl9raWxsX3VyYihwb3J0LT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmIpOwordXBfZXNfc2VtOgorCXVwKCZlZGdlX3NlcmlhbC0+ZXNfc2VtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCWludCBwb3J0X251bWJlcjsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJZWRnZV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgoZWRnZV9zZXJpYWwgPT0gTlVMTCkgfHwgKGVkZ2VfcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCQorCS8qIFRoZSBidWxrcmVhZGNvbXBsZXRpb24gcm91dGluZSB3aWxsIGNoZWNrIAorCSAqIHRoaXMgZmxhZyBhbmQgZHVtcCBhZGQgcmVhZCBkYXRhICovCisJZWRnZV9wb3J0LT5jbG9zZV9wZW5kaW5nID0gMTsKKworCS8qIGNoYXNlIHRoZSBwb3J0IGNsb3NlIGFuZCBmbHVzaCAqLworCVRJQ2hhc2VQb3J0IChlZGdlX3BvcnQsIChIWipjbG9zaW5nX3dhaXQpLzEwMCwgMSk7CisKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCWVkZ2VfcG9ydC0+ZXBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisKKwkvKiBhc3N1bWluZyB3ZSBjYW4gc3RpbGwgdGFsayB0byB0aGUgZGV2aWNlLAorCSAqIHNlbmQgYSBjbG9zZSBwb3J0IGNvbW1hbmQgdG8gaXQgKi8KKwlkYmcoIiVzIC0gc2VuZCB1bXBjX2Nsb3NlX3BvcnQiLCBfX0ZVTkNUSU9OX18pOworCXBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlzdGF0dXMgPSBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgICAgVU1QQ19DTE9TRV9QT1JULAorCQkJCSAgICAgKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkgICAgIDAsCisJCQkJICAgICBOVUxMLAorCQkJCSAgICAgMCk7CisJZG93bigmZWRnZV9zZXJpYWwtPmVzX3NlbSk7CisJLS1lZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsLT5udW1fcG9ydHNfb3BlbjsKKwlpZiAoZWRnZV9wb3J0LT5lZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW4gPD0gMCkgeworCQkvKiBsYXN0IHBvcnQgaXMgbm93IGNsb3NlZCwgbGV0J3Mgc2h1dCBkb3duIG91ciBpbnRlcnJ1cHQgdXJiICovCisJCXVzYl9raWxsX3VyYihwb3J0LT5zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmIpOworCQllZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsLT5udW1fcG9ydHNfb3BlbiA9IDA7CisJfQorCXVwKCZlZGdlX3NlcmlhbC0+ZXNfc2VtKTsKKwllZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPSAwOworCisJZGJnKCIlcyAtIGV4aXRlZCIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZyA9PSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwljb3VudCA9IGVkZ2VfYnVmX3B1dChlZGdlX3BvcnQtPmVwX291dF9idWYsIGRhdGEsIGNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWVkZ2Vfc2VuZChwb3J0KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgZWRnZV9zZW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGNvdW50LCByZXN1bHQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJaWYgKGVkZ2VfcG9ydC0+ZXBfd3JpdGVfdXJiX2luX3VzZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gZWRnZV9idWZfZ2V0KGVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiwKKwkJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQlwb3J0LT5idWxrX291dF9zaXplKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJZWRnZV9wb3J0LT5lcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwkvKiBzZXQgdXAgb3VyIHVyYiAqLworCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT53cml0ZV91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCisJCQkgICBlZGdlX2J1bGtfb3V0X2NhbGxiYWNrLAorCQkJICAgcG9ydCk7CisKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCQkvLyBUT0RPOiByZXNjaGVkdWxlIGVkZ2Vfc2VuZAorCX0gZWxzZSB7CisJCWVkZ2VfcG9ydC0+aWNvdW50LnR4ICs9IGNvdW50OworCX0KKworCS8qIHdha2V1cCBhbnkgcHJvY2VzcyB3YWl0aW5nIGZvciB3cml0ZXMgdG8gY29tcGxldGUgKi8KKwkvKiB0aGVyZSBpcyBub3cgbW9yZSByb29tIGluIHRoZSBidWZmZXIgZm9yIG5ldyB3cml0ZXMgKi8KKwlpZiAodHR5KSB7CisJCS8qIGxldCB0aGUgdHR5IGRyaXZlciB3YWtldXAgaWYgaXQgaGFzIGEgc3BlY2lhbCB3cml0ZV93YWtldXAgZnVuY3Rpb24gKi8KKwkJdHR5X3dha2V1cCh0dHkpOworCX0KK30KKworc3RhdGljIGludCBlZGdlX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZWRnZV9wb3J0LT5jbG9zZV9wZW5kaW5nID09IDEpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCXJvb20gPSBlZGdlX2J1Zl9zcGFjZV9hdmFpbChlZGdlX3BvcnQtPmVwX291dF9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiByb29tOworfQorCitzdGF0aWMgaW50IGVkZ2VfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGNoYXJzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChlZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJY2hhcnMgPSBlZGdlX2J1Zl9kYXRhX2F2YWlsKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlkYmcgKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKwlyZXR1cm4gY2hhcnM7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdG9wIGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSAocG9ydCwgJnN0b3BfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgdG8gd3JpdGUgc3RvcCBjaGFyYWN0ZXIsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCX0KKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHN0b3AgcmVhZHMgKi8KKwkvKiBhbmQgdGhlIEVkZ2Vwb3J0IHdpbGwgY2xlYXIgdGhlIFJUUyBsaW5lICovCisJaWYgKENfQ1JUU0NUUyh0dHkpKQorCQlzdG9wX3JlYWQoZWRnZV9wb3J0KTsKKworfQorCitzdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdGFydCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSAocG9ydCwgJnN0YXJ0X2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHRvIHdyaXRlIHN0YXJ0IGNoYXJhY3RlciwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJfQorCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgcmVzdGFydCByZWFkcyAqLworCS8qIGFyZSB0aGUgRWRnZXBvcnQgd2lsbCBhc3NlcnQgdGhlIFJUUyBsaW5lICovCisJaWYgKENfQ1JUU0NUUyh0dHkpKSB7CisJCXN0YXR1cyA9IHJlc3RhcnRfcmVhZChlZGdlX3BvcnQpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSByZWFkIGJ1bGsgdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggdmFsdWUgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgc3RvcF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWlmIChlZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID09IEVER0VfUkVBRF9VUkJfUlVOTklORykKKwkJZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9IEVER0VfUkVBRF9VUkJfU1RPUFBJTkc7CisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyICY9IH5NQ1JfUlRTOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdGFydF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlpZiAoZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9PSBFREdFX1JFQURfVVJCX1NUT1BQRUQpIHsKKwkJdXJiID0gZWRnZV9wb3J0LT5wb3J0LT5yZWFkX3VyYjsKKwkJdXJiLT5jb21wbGV0ZSA9IGVkZ2VfYnVsa19pbl9jYWxsYmFjazsKKwkJdXJiLT5jb250ZXh0ID0gZWRnZV9wb3J0OworCQl1cmItPmRldiA9IGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJfQorCWVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPSBFREdFX1JFQURfVVJCX1JVTk5JTkc7CisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyIHw9IE1DUl9SVFM7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHVtcF91YXJ0X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IGJhdWQ7CisJdW5zaWduZWQgY2ZsYWc7CisJaW50IHN0YXR1czsKKwlpbnQgcG9ydF9udW1iZXIgPSBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciAtIGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcik7CisKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwlpZiAoKCF0dHkpIHx8CisJICAgICghdHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY29uZmlnID0ga21hbGxvYyAoc2l6ZW9mICgqY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25maWcpIHsKKwkJZGV2X2VyciAoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwljb25maWctPndGbGFncyA9IDA7CisKKwkvKiBUaGVzZSBmbGFncyBtdXN0IGJlIHNldCAqLworCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfUkVDRUlWRV9NU19JTlQ7CisJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19BVVRPX1NUQVJUX09OX0VSUjsKKwljb25maWctPmJVYXJ0TW9kZSA9IChfX3U4KShlZGdlX3BvcnQtPmJVYXJ0TW9kZSk7CisKKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSNUJJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwkJY2FzZSBDUzY6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSNkJJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwkJY2FzZSBDUzc6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSN0JJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBVTVBfVUFSVF9DSEFSOEJJVFM7CisJCQkgICAgZGJnICgiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19GVU5DVElPTl9fKTsKKwkJCSAgICBicmVhazsKKwl9CisKKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX1BBUklUWTsKKwkJCWNvbmZpZy0+YlBhcml0eSA9IFVNUF9VQVJUX09ERFBBUklUWTsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19QQVJJVFk7CisJCQljb25maWctPmJQYXJpdHkgPSBVTVBfVUFSVF9FVkVOUEFSSVRZOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfSBlbHNlIHsKKwkJY29uZmlnLT5iUGFyaXR5ID0gVU1QX1VBUlRfTk9QQVJJVFk7IAkKKwkJZGJnKCIlcyAtIHBhcml0eSA9IG5vbmUiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCWlmIChjZmxhZyAmIENTVE9QQikgeworCQljb25maWctPmJTdG9wQml0cyA9IFVNUF9VQVJUX1NUT1BCSVQyOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJY29uZmlnLT5iU3RvcEJpdHMgPSBVTVBfVUFSVF9TVE9QQklUMTsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKKwkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19PVVRfWF9DVFNfRkxPVzsKKwkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19SVFNfRkxPVzsKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZW5hYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl0dHktPmh3X3N0b3BwZWQgPSAwOworCQlyZXN0YXJ0X3JlYWQoZWRnZV9wb3J0KTsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIGNoYXJhY3RlciBpbiB0aGUgZGV2aWNlICovCisJaWYgKElfSVhPRkYodHR5KSB8fCBJX0lYT04odHR5KSkgeworCQljb25maWctPmNYb24gID0gU1RBUlRfQ0hBUih0dHkpOworCQljb25maWctPmNYb2ZmID0gU1RPUF9DSEFSKHR0eSk7CisKKwkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBJTkJPVU5EIFhPTi9YT0ZGICovCisJCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfSU5fWDsKKwkJCWRiZyAoIiVzIC0gSU5CT1VORCBYT04vWE9GRiBpcyBlbmFibGVkLCBYT04gPSAlMngsIFhPRkYgPSAlMngiLAorCQkJICAgICBfX0ZVTkNUSU9OX18sIGNvbmZpZy0+Y1hvbiwgY29uZmlnLT5jWG9mZik7CisJCX0gZWxzZSB7CisJCQlkYmcgKCIlcyAtIElOQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl9CisKKwkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBPVVRCT1VORCBYT04vWE9GRiAqLworCQlpZiAoSV9JWE9OKHR0eSkpIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfT1VUX1g7CisJCQlkYmcgKCIlcyAtIE9VVEJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgY29uZmlnLT5jWG9uLCBjb25maWctPmNYb2ZmKTsKKwkJfSBlbHNlIHsKKwkJCWRiZyAoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCisJLyogUm91bmQgdGhlIGJhdWQgcmF0ZSAqLworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkgeworCQkvKiBwaWNrIGEgZGVmYXVsdCwgYW55IGRlZmF1bHQuLi4gKi8KKwkJYmF1ZCA9IDk2MDA7CisJfQorCWVkZ2VfcG9ydC0+YmF1ZF9yYXRlID0gYmF1ZDsKKwljb25maWctPndCYXVkUmF0ZSA9IChfX3UxNikoKDQ2MTU1MEwgKyBiYXVkLzIpIC8gYmF1ZCk7CisKKwlkYmcgKCIlcyAtIGJhdWQgcmF0ZSA9ICVkLCB3QmF1ZFJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZCwgY29uZmlnLT53QmF1ZFJhdGUpOworCisJZGJnICgid0JhdWRSYXRlOiAgICVkIiwgKGludCkoNDYxNTUwTCAvIGNvbmZpZy0+d0JhdWRSYXRlKSk7CisJZGJnICgid0ZsYWdzOiAgICAweCV4IiwgY29uZmlnLT53RmxhZ3MpOworCWRiZyAoImJEYXRhQml0czogICAlZCIsIGNvbmZpZy0+YkRhdGFCaXRzKTsKKwlkYmcgKCJiUGFyaXR5OiAgICAgJWQiLCBjb25maWctPmJQYXJpdHkpOworCWRiZyAoImJTdG9wQml0czogICAlZCIsIGNvbmZpZy0+YlN0b3BCaXRzKTsKKwlkYmcgKCJjWG9uOiAgICAgICAgJWQiLCBjb25maWctPmNYb24pOworCWRiZyAoImNYb2ZmOiAgICAgICAlZCIsIGNvbmZpZy0+Y1hvZmYpOworCWRiZyAoImJVYXJ0TW9kZTogICAlZCIsIGNvbmZpZy0+YlVhcnRNb2RlKTsKKworCS8qIG1vdmUgdGhlIHdvcmQgdmFsdWVzIGludG8gYmlnIGVuZGlhbiBtb2RlICovCisJY3B1X3RvX2JlMTZzICgmY29uZmlnLT53RmxhZ3MpOworCWNwdV90b19iZTE2cyAoJmNvbmZpZy0+d0JhdWRSYXRlKTsKKworCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAoZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DT05GSUcsCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAorCQkJCShfX3U4ICopY29uZmlnLAorCQkJCXNpemVvZigqY29uZmlnKSk7CisJaWYgKHN0YXR1cykgeworCQlkYmcgKCIlcyAtIGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIGNvbmZpZyB0byBkZXZpY2UiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisKKwlrZnJlZSAoY29uZmlnKTsKKwkKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgaW50IGNmbGFnOworCisJaWYgKCFwb3J0LT50dHkgfHwgIXBvcnQtPnR0eS0+dGVybWlvcykgeworCQlkYmcgKCIlcyAtIG5vIHR0eSBvciB0ZXJtaW9zIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmIChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZyAmJgorCQkgICAgdHR5LT50ZXJtaW9zLT5jX2lmbGFnID09IG9sZF90ZXJtaW9zLT5jX2lmbGFnKSB7CisJCQlkYmcgKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRiZygiJXMgLSBjbGZhZyAlMDh4IGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIAorCSAgICB0dHktPnRlcm1pb3MtPmNfY2ZsYWcsIHR0eS0+dGVybWlvcy0+Y19pZmxhZyk7CisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWRiZygiJXMgLSBvbGQgY2xmYWcgJTA4eCBvbGQgaWZsYWcgJTA4eCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBvbGRfdGVybWlvcy0+Y19pZmxhZyk7CisJfQorCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGNoYW5nZSB0aGUgcG9ydCBzZXR0aW5ncyB0byB0aGUgbmV3IG9uZXMgc3BlY2lmaWVkICovCisJY2hhbmdlX3BvcnRfc2V0dGluZ3MgKGVkZ2VfcG9ydCwgb2xkX3Rlcm1pb3MpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGVkZ2VfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwltY3IgPSBlZGdlX3BvcnQtPnNoYWRvd19tY3I7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IE1DUl9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IE1DUl9EVFI7CisJaWYgKHNldCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCW1jciAmPSB+TUNSX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCW1jciAmPSB+TUNSX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9MT09QKQorCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKworCWVkZ2VfcG9ydC0+c2hhZG93X21jciA9IG1jcjsKKworCVRJUmVzdG9yZU1DUiAoZWRnZV9wb3J0LCBtY3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWRnZV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGludCBtc3I7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJbXNyID0gZWRnZV9wb3J0LT5zaGFkb3dfbXNyOworCW1jciA9IGVkZ2VfcG9ydC0+c2hhZG93X21jcjsKKwlyZXN1bHQgPSAoKG1jciAmIE1DUl9EVFIpCT8gVElPQ01fRFRSOiAwKQkgIC8qIDB4MDAyICovCisJCSAgfCAoKG1jciAmIE1DUl9SVFMpCT8gVElPQ01fUlRTOiAwKSAgIC8qIDB4MDA0ICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9DVFMpCT8gVElPQ01fQ1RTOiAwKSAgIC8qIDB4MDIwICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9DRCkJPyBUSU9DTV9DQVI6IDApICAgLyogMHgwNDAgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX1JJKQk/IFRJT0NNX1JJOiAgMCkgICAvKiAweDA4MCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfRFNSKQk/IFRJT0NNX0RTUjogMCk7ICAvKiAweDEwMCAqLworCisKKwlkYmcoIiVzIC0tICV4IiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8gKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CisKKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKworCXRtcC50eXBlCQk9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lCQk9IGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKwl0bXAucG9ydAkJPSBlZGdlX3BvcnQtPnBvcnQtPm51bWJlcjsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSBlZGdlX3BvcnQtPnBvcnQtPmJ1bGtfb3V0X3NpemU7CisJdG1wLmJhdWRfYmFzZQkJPSA5NjAwOworCXRtcC5jbG9zZV9kZWxheQkJPSA1KkhaOworCXRtcC5jbG9zaW5nX3dhaXQJPSBjbG9zaW5nX3dhaXQ7CisvLwl0bXAuY3VzdG9tX2Rpdmlzb3IJPSBzdGF0ZS0+Y3VzdG9tX2Rpdmlzb3I7CisvLwl0bXAuaHViNgkJPSBzdGF0ZS0+aHViNjsKKy8vCXRtcC5pb190eXBlCQk9IHN0YXRlLT5pb190eXBlOworCisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGdlX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCV4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFRJT0NJTlE6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DSU5RIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworLy8JCQlyZXR1cm4gZ2V0X251bWJlcl9ieXRlc19hdmFpbChlZGdlX3BvcnQsICh1bnNpZ25lZCBpbnQgKikgYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NTRVJHRVRMU1IiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisvLwkJCXJldHVybiBnZXRfbHNyX2luZm8oZWRnZV9wb3J0LCAodW5zaWduZWQgaW50ICopIGFyZyk7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NHU0VSSUFMOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ0dTRVJJQUwiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKGVkZ2VfcG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKSBhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NTU0VSSUFMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DTUlXQUlUOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ01JV0FJVCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCWNwcmV2ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCQl3aGlsZSAoMSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQkJY25vdyA9IGVkZ2VfcG9ydC0+aWNvdW50OworCQkJCWlmIChjbm93LnJuZyA9PSBjcHJldi5ybmcgJiYgY25vdy5kc3IgPT0gY3ByZXYuZHNyICYmCisJCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCisJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSApIHsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWNwcmV2ID0gY25vdzsKKwkJCX0KKwkJCS8qIG5vdCByZWFjaGVkICovCisJCQlicmVhazsKKworCQljYXNlIFRJT0NHSUNPVU5UOgorCQkJZGJnICgiJXMgLSAoJWQpIFRJT0NHSUNPVU5UIFJYPSVkLCBUWD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICAgcG9ydC0+bnVtYmVyLCBlZGdlX3BvcnQtPmljb3VudC5yeCwgZWRnZV9wb3J0LT5pY291bnQudHgpOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZlZGdlX3BvcnQtPmljb3VudCwgc2l6ZW9mKGVkZ2VfcG9ydC0+aWNvdW50KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgdm9pZCBlZGdlX2JyZWFrIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgc3RhdHVzOworCisJZGJnICgiJXMgLSBzdGF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwkvKiBjaGFzZSB0aGUgcG9ydCBjbG9zZSAqLworCVRJQ2hhc2VQb3J0IChlZGdlX3BvcnQsIDAsIDApOworCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7CisJCXN0YXR1cyA9IFRJU2V0QnJlYWsgKGVkZ2VfcG9ydCk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gVElDbGVhckJyZWFrIChlZGdlX3BvcnQpOworCX0KKwlpZiAoc3RhdHVzKSB7CisJCWRiZyAoIiVzIC0gZXJyb3IgJWQgc2VuZGluZyBicmVhayBzZXQvY2xlYXIgY29tbWFuZC4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZWRnZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlpbnQgc3RhdHVzOworCWludCBpOworCisJZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLworCWVkZ2Vfc2VyaWFsID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0IChlZGdlX3NlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpKTsKKwlzZW1hX2luaXQoJmVkZ2Vfc2VyaWFsLT5lc19zZW0sIDEpOworCWVkZ2Vfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIGVkZ2Vfc2VyaWFsKTsKKworCXN0YXR1cyA9IFRJRG93bmxvYWRGaXJtd2FyZSAoZWRnZV9zZXJpYWwpOworCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUgKGVkZ2Vfc2VyaWFsKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBzZXQgdXAgb3VyIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZWRnZV9wb3J0ID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQltZW1zZXQgKGVkZ2VfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wb3J0KSk7CisJCXNwaW5fbG9ja19pbml0KCZlZGdlX3BvcnQtPmVwX2xvY2spOworCQllZGdlX3BvcnQtPmVwX291dF9idWYgPSBlZGdlX2J1Zl9hbGxvYyhFREdFX09VVF9CVUZfU0laRSk7CisJCWlmIChlZGdlX3BvcnQtPmVwX291dF9idWYgPT0gTlVMTCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWtmcmVlKGVkZ2VfcG9ydCk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJZWRnZV9wb3J0LT5wb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQllZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsID0gZWRnZV9zZXJpYWw7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIGVkZ2VfcG9ydCk7CisJCWVkZ2VfcG9ydC0+YlVhcnRNb2RlID0gMDsJLyogRGVmYXVsdCBpcyBSUzIzMiAqLworCX0KKwkKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlmb3IgKC0taTsgaT49MDsgLS1pKSB7CisJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQllZGdlX2J1Zl9mcmVlKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJCWtmcmVlKGVkZ2VfcG9ydCk7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KKwlrZnJlZSAoZWRnZV9zZXJpYWwpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZWRnZV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAoZWRnZV9wb3J0KSB7CisJCQllZGdlX2J1Zl9mcmVlKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJCQlrZnJlZShlZGdlX3BvcnQpOworCQl9CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KKwlrZnJlZSAodXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKKworLyogQ2lyY3VsYXIgQnVmZmVyICovCisKKy8qCisgKiBlZGdlX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHN0cnVjdCBlZGdlX2J1ZiAqZWRnZV9idWZfYWxsb2ModW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IGVkZ2VfYnVmICplYjsKKworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwllYiA9IChzdHJ1Y3QgZWRnZV9idWYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWRnZV9idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwllYi0+YnVmX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGViLT5idWZfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUoZWIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllYi0+YnVmX3NpemUgPSBzaXplOworCWViLT5idWZfZ2V0ID0gZWItPmJ1Zl9wdXQgPSBlYi0+YnVmX2J1ZjsKKworCXJldHVybiBlYjsKK30KKworCisvKgorICogZWRnZV9idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3ZvaWQgZWRnZV9idWZfZnJlZShzdHJ1Y3QgZWRnZV9idWYgKmViKQoreworCWlmIChlYiAhPSBOVUxMKSB7CisJCWlmIChlYi0+YnVmX2J1ZiAhPSBOVUxMKQorCQkJa2ZyZWUoZWItPmJ1Zl9idWYpOworCQlrZnJlZShlYik7CisJfQorfQorCisKKy8qCisgKiBlZGdlX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCisKK3N0YXRpYyB2b2lkIGVkZ2VfYnVmX2NsZWFyKHN0cnVjdCBlZGdlX2J1ZiAqZWIpCit7CisgICAgICAgIGlmIChlYiAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGViLT5idWZfZ2V0ID0gZWItPmJ1Zl9wdXQ7CisgICAgICAgICAgICAgICAgLyogZXF1aXZhbGVudCB0byBhIGdldCBvZiBhbGwgZGF0YSBhdmFpbGFibGUgKi8KK30KKworCisvKgorICogZWRnZV9idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfZGF0YV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKQoreworCWlmIChlYiAhPSBOVUxMKQorCQlyZXR1cm4gKChlYi0+YnVmX3NpemUgKyBlYi0+YnVmX3B1dCAtIGViLT5idWZfZ2V0KSAlIGViLT5idWZfc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisvKgorICogZWRnZV9idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgZWRnZV9idWYgKmViKQoreworCWlmIChlYiAhPSBOVUxMKQorCQlyZXR1cm4gKChlYi0+YnVmX3NpemUgKyBlYi0+YnVmX2dldCAtIGViLT5idWZfcHV0IC0gMSkgJSBlYi0+YnVmX3NpemUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGVkZ2VfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX3B1dChzdHJ1Y3QgZWRnZV9idWYgKmViLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChlYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBlZGdlX2J1Zl9zcGFjZV9hdmFpbChlYik7CisJaWYgKGNvdW50ID4gbGVuKQorCQljb3VudCA9IGxlbjsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGViLT5idWZfYnVmICsgZWItPmJ1Zl9zaXplIC0gZWItPmJ1Zl9wdXQ7CisJaWYgKGNvdW50ID4gbGVuKSB7CisJCW1lbWNweShlYi0+YnVmX3B1dCwgYnVmLCBsZW4pOworCQltZW1jcHkoZWItPmJ1Zl9idWYsIGJ1ZitsZW4sIGNvdW50IC0gbGVuKTsKKwkJZWItPmJ1Zl9wdXQgPSBlYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOworCX0gZWxzZSB7CisJCW1lbWNweShlYi0+YnVmX3B1dCwgYnVmLCBjb3VudCk7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCWViLT5idWZfcHV0ICs9IGNvdW50OworCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLworCQkJZWItPmJ1Zl9wdXQgPSBlYi0+YnVmX2J1ZjsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworLyoKKyAqIGVkZ2VfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9nZXQoc3RydWN0IGVkZ2VfYnVmICplYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAoZWIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBlZGdlX2J1Zl9kYXRhX2F2YWlsKGViKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZWItPmJ1Zl9idWYgKyBlYi0+YnVmX3NpemUgLSBlYi0+YnVmX2dldDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGJ1ZiwgZWItPmJ1Zl9nZXQsIGxlbik7CisJCW1lbWNweShidWYrbGVuLCBlYi0+YnVmX2J1ZiwgY291bnQgLSBsZW4pOworCQllYi0+YnVmX2dldCA9IGViLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGJ1ZiwgZWItPmJ1Zl9nZXQsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZWItPmJ1Zl9nZXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQllYi0+YnVmX2dldCA9IGViLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfMXBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCBUSSAxIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0X3RpXzEiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8xcG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDEsCisJLm51bV9idWxrX291dAkJPSAxLAorCS5udW1fcG9ydHMJCT0gMSwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfMnBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCBUSSAyIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0X3RpXzIiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDIsCisJLm51bV9idWxrX291dAkJPSAyLAorCS5udW1fcG9ydHMJCT0gMiwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfY2FsbGJhY2ssCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IGVkZ2Vwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0XzFwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMnBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW9fZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF8ycG9ydF9kZXZpY2UpOworZmFpbGVkXzJwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzFwb3J0X2RldmljZSk7CitmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlZGdlcG9ydF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmaW9fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF8xcG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGVkZ2Vwb3J0X2luaXQpOworbW9kdWxlX2V4aXQoZWRnZXBvcnRfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbShsb3dfbGF0ZW5jeSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsb3dfbGF0ZW5jeSwgIkxvdyBsYXRlbmN5IGVuYWJsZWQgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbShjbG9zaW5nX3dhaXQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhjbG9zaW5nX3dhaXQsICJNYXhpbXVtIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4sIGluIC4wMSBzZWNzIik7CisKK21vZHVsZV9wYXJhbShpZ25vcmVfY3B1X3JldiwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfY3B1X3JldiwgIklnbm9yZSB0aGUgY3B1IHJldmlzaW9uIHdoZW4gY29ubmVjdGluZyB0byBhIGRldmljZSIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjg0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuaApAQCAtMCwwICsxLDE4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBJbnNpZGUgT3V0IE5ldHdvcmtzLCBJbmMuCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICoJRmViLTE2LTIwMDEJRE1JCUFkZGVkIEkyQyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqCU1heS0yOS0yMDAyCWdraAlQb3J0ZWQgdG8gTGludXgKKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSU9fVElfSF8KKyNkZWZpbmUgX0lPX1RJX0hfCisKKy8qIEFkZHJlc3MgU3BhY2UgKi8KKyNkZWZpbmUgRFRLX0FERFJfU1BBQ0VfWERBVEEJCTB4MDMJLyogQWRkciBpcyBwbGFjZWQgaW4gWERBVEEgc3BhY2UgKi8KKyNkZWZpbmUgRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUkJMHg4MgkvKiBBZGRyIGlzIHBsYWNlZCBpbiBJMkMgYXJlYSAqLworI2RlZmluZSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUkJMHg4MwkvKiBBZGRyIGlzIHBsYWNlZCBpbiBJMkMgYXJlYSAqLworCisvLyBVQVJUIERlZmluZXMKKyNkZWZpbmUgVU1QTUVNX0JBU0VfVUFSVDEJCTB4RkZBMCAgLyogVU1QIFVBUlQxIGJhc2UgYWRkcmVzcyAgICAgICAgICAqLworI2RlZmluZSBVTVBNRU1fQkFTRV9VQVJUMgkJMHhGRkIwICAvKiBVTVAgVUFSVDIgYmFzZSBhZGRyZXNzICAgICAgICAgICovCisjZGVmaW5lIFVNUE1FTV9PRkZTX1VBUlRfTFNSCQkweDA1ICAgIC8qIFVNUCBVQVJUIExTUiByZWdpc3RlciBvZmZzZXQgICAgKi8KKworLyogQml0cyBwZXIgY2hhcmFjdGVyICovCisjZGVmaW5lIFVNUF9VQVJUX0NIQVI1QklUUwkJMHgwMAorI2RlZmluZSBVTVBfVUFSVF9DSEFSNkJJVFMJCTB4MDEKKyNkZWZpbmUgVU1QX1VBUlRfQ0hBUjdCSVRTCQkweDAyCisjZGVmaW5lIFVNUF9VQVJUX0NIQVI4QklUUwkJMHgwMworCisvKiBQYXJpdHkgKi8KKyNkZWZpbmUgVU1QX1VBUlRfTk9QQVJJVFkJCTB4MDAKKyNkZWZpbmUgVU1QX1VBUlRfT0REUEFSSVRZCQkweDAxCisjZGVmaW5lIFVNUF9VQVJUX0VWRU5QQVJJVFkJCTB4MDIKKyNkZWZpbmUgVU1QX1VBUlRfTUFSS1BBUklUWQkJMHgwMworI2RlZmluZSBVTVBfVUFSVF9TUEFDRVBBUklUWQkJMHgwNAorCisvKiBTdG9wIGJpdHMgKi8KKyNkZWZpbmUgVU1QX1VBUlRfU1RPUEJJVDEJCTB4MDAKKyNkZWZpbmUgVU1QX1VBUlRfU1RPUEJJVDE1CQkweDAxCisjZGVmaW5lIFVNUF9VQVJUX1NUT1BCSVQyCQkweDAyCisKKy8qIExpbmUgc3RhdHVzIHJlZ2lzdGVyIG1hc2tzICovCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9PVl9NQVNLCQkweDAxCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9QRV9NQVNLCQkweDAyCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9GRV9NQVNLCQkweDA0CisjZGVmaW5lIFVNUF9VQVJUX0xTUl9CUl9NQVNLCQkweDA4CisjZGVmaW5lIFVNUF9VQVJUX0xTUl9FUl9NQVNLCQkweDBGCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9SWF9NQVNLCQkweDEwCisjZGVmaW5lIFVNUF9VQVJUX0xTUl9UWF9NQVNLCQkweDIwCisKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX0RBVEFfTUFTSwkJKCBMU1JfUEFSX0VSUiB8IExTUl9GUk1fRVJSIHwgTFNSX0JSRUFLICkKKworLyogUG9ydCBTZXR0aW5ncyBDb25zdGFudHMpICovCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfUlRTX0ZMT1cJCTB4MDAwMQorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX1JUU19ESVNBQkxFCQkweDAwMDIKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19QQVJJVFkJCTB4MDAwOAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YX0RTUl9GTE9XCTB4MDAxMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YX0NUU19GTE9XCTB4MDAyMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YCQkweDAwNDAKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19PVVRfWEEJCTB4MDA4MAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX0lOX1gJCTB4MDEwMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX0RUUl9GTE9XCQkweDA4MDAKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19EVFJfRElTQUJMRQkJMHgxMDAwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfUkVDRUlWRV9NU19JTlQJMHgyMDAwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfQVVUT19TVEFSVF9PTl9FUlIJMHg0MDAwCisKKyNkZWZpbmUgVU1QX0RNQV9NT0RFX0NPTlRJTk9VUwkJCTB4MDEKKyNkZWZpbmUgVU1QX1BJUEVfVFJBTlNfVElNRU9VVF9FTkEJCTB4ODAKKyNkZWZpbmUgVU1QX1BJUEVfVFJBTlNGRVJfTU9ERV9NQVNLCQkweDAzCisjZGVmaW5lIFVNUF9QSVBFX1RSQU5TX1RJTUVPVVRfTUFTSwkJMHg3QworCisvKiBQdXJnZSBwb3J0IERpcmVjdGlvbiBNYXNrIEJpdHMgKi8KKyNkZWZpbmUgVU1QX1BPUlRfRElSX09VVAkJCTB4MDEKKyNkZWZpbmUgVU1QX1BPUlRfRElSX0lOCQkJCTB4MDIKKworLy8gQWRkcmVzcyBvZiBQb3J0IDAKKyNkZWZpbmUgVU1QTV9VQVJUMV9QT1JUICAJCQkweDAzCisKKy8vIENvbW1hbmRzCisjZGVmaW5lCVVNUENfU0VUX0NPTkZJRyAJCTB4MDUKKyNkZWZpbmUJVU1QQ19PUEVOX1BPUlQgIAkJMHgwNgorI2RlZmluZQlVTVBDX0NMT1NFX1BPUlQgCQkweDA3CisjZGVmaW5lCVVNUENfU1RBUlRfUE9SVCAJCTB4MDgKKyNkZWZpbmUJVU1QQ19TVE9QX1BPUlQgIAkJMHgwOQorI2RlZmluZQlVTVBDX1RFU1RfUE9SVCAgCQkweDBBCisjZGVmaW5lCVVNUENfUFVSR0VfUE9SVCAJCTB4MEIKKworI2RlZmluZQlVTVBDX0NPTVBMRVRFX1JFQUQJCTB4ODAJLy8gRm9yY2UgdGhlIEZpcm13YXJlIHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IFJlYWQKKyNkZWZpbmUJVU1QQ19IQVJEV0FSRV9SRVNFVAkJMHg4MQkvLyBGb3JjZSBVTVAgYmFjayBpbnRvIEJPT1QgTW9kZQorI2RlZmluZQlVTVBDX0NPUFlfRE5MRF9UT19JMkMJCTB4ODIJLy8gQ29weSBjdXJyZW50IGRvd25sb2FkIGltYWdlIHRvIHR5cGUgMHhmMiByZWNvcmQgaW4gMTZrIEkyQworCQkJCQkJLy8gZmlybXdhcmUgd2lsbCBjaGFuZ2UgMHhmZiByZWNvcmQgdG8gdHlwZSAyIHJlY29yZCB3aGVuIGNvbXBsZXRlCisKKwkvLyBTcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyIGNvbW1hbmRzCisJLy8gd0luZGV4IGlzIHJlZ2lzdGVyIGFkZHJlc3MKKwkvLyB3VmFsdWUgaXMgTVNCL0xTQiBtYXNrL2RhdGEKKyNkZWZpbmUJVU1QQ19XUklURV9TRlIJICAJCTB4ODMJLy8gV3JpdGUgU0ZSIFJlZ2lzdGVyCisKKwkvLyB3SW5kZXggaXMgcmVnaXN0ZXIgYWRkcmVzcworI2RlZmluZQlVTVBDX1JFQURfU0ZSCSAgCQkweDg0CS8vIFJlYWQgU1JGIFJlZ2lzdGVyCisKKwkvLyBTZXQgb3IgQ2xlYXIgRFRSICh3VmFsdWUgYml0IDAgU2V0L0NsZWFyKQkJd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1NFVF9DTFJfRFRSCQkweDg1CisKKwkvLyBTZXQgb3IgQ2xlYXIgUlRTICh3VmFsdWUgYml0IDAgU2V0L0NsZWFyKQkJd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1NFVF9DTFJfUlRTCQkweDg2CisKKwkvLyBTZXQgb3IgQ2xlYXIgTE9PUEJBQ0sgKHdWYWx1ZSBiaXQgMCBTZXQvQ2xlYXIpCXdJbmRleCBNb2R1bGVJRCAocG9ydCkKKyNkZWZpbmUJVU1QQ19TRVRfQ0xSX0xPT1BCQUNLCQkweDg3CisKKwkvLyBTZXQgb3IgQ2xlYXIgQlJFQUsgKHdWYWx1ZSBiaXQgMCBTZXQvQ2xlYXIpCQl3SW5kZXggTW9kdWxlSUQgKHBvcnQpCisjZGVmaW5lCVVNUENfU0VUX0NMUl9CUkVBSwkJMHg4OAorCisJLy8gUmVhZCBNU1Igd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1JFQURfTVNSCQkJMHg4OQorCisJLyogVG9vbGtpdCBjb21tYW5kcyAqLworCS8qIFJlYWQtd3JpdGUgZ3JvdXAgKi8KKyNkZWZpbmUJVU1QQ19NRU1PUllfUkVBRCAgIAkJMHg5MgorI2RlZmluZQlVTVBDX01FTU9SWV9XUklURSAgCQkweDkzCisKKy8qCisgKglVTVAgRE1BIERlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgVU1QRF9PRURCMV9BRERSRVNTCQkweEZGMDgKKyNkZWZpbmUgVU1QRF9PRURCMl9BRERSRVNTCQkweEZGMTAKKworc3RydWN0IG91dF9lbmRwb2ludF9kZXNjX2Jsb2NrCit7CisJX191OCBDb25maWd1cmF0aW9uOworCV9fdTggWEJ1ZkFkZHI7CisJX191OCBYQnl0ZUNvdW50OworCV9fdTggVW51c2VkMTsKKwlfX3U4IFVudXNlZDI7CisJX191OCBZQnVmQWRkcjsKKwlfX3U4IFlCeXRlQ291bnQ7CisJX191OCBCdWZmZXJTaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogVFlQRSBERUZJTklUSU9OUworICogU3RydWN0dXJlcyBmb3IgRmlybXdhcmUgY29tbWFuZHMKKyAqLworc3RydWN0IHVtcF91YXJ0X2NvbmZpZwkJLyogVUFSVCBzZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgKi8KK3sKKwlfX3UxNiB3QmF1ZFJhdGU7CS8qIEJhdWQgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICovCisJX191MTYgd0ZsYWdzOwkJLyogQml0bWFwIG1hc2sgb2YgZmxhZ3MgICAgICAgICAgICAgKi8KKwlfX3U4IGJEYXRhQml0czsJCS8qIDUuLjggLSBkYXRhIGJpdHMgcGVyIGNoYXJhY3RlciAgICovCisJX191OCBiUGFyaXR5OwkJLyogUGFyaXR5IHNldHRpbmdzICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4IGJTdG9wQml0czsJCS8qIFN0b3AgYml0cyBzZXR0aW5ncyAgICAgICAgICAgICAgICovCisJY2hhciBjWG9uOwkJLyogWE9OIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAgKi8KKwljaGFyIGNYb2ZmOwkJLyogWE9GRiBjaGFyYWN0ZXIgICAgICAgICAgICAgICAgICAgKi8KKwlfX3U4IGJVYXJ0TW9kZTsJCS8qIFdpbGwgYmUgdXBkYXRlZCB3aGVuIGEgdXNlciAgICAgICovCisJCQkJLyogaW50ZXJmYWNlIGlzIGRlZmluZWQgICAgICAgICAgICAgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoKKyAqIFRZUEUgREVGSU5JVElPTlMKKyAqIFN0cnVjdHVyZXMgZm9yIFVTQiBpbnRlcnJ1cHRzCisgKi8KK3N0cnVjdCB1bXBfaW50ZXJydXB0CQkJLyogSW50ZXJydXB0IHBhY2tldCBzdHJ1Y3R1cmUgICAgICAgKi8KK3sKKwlfX3U4IGJJQ29kZTsJCQkvKiBJbnRlcnJ1cHQgY29kZSAoaW50ZXJydXB0IG51bSkgICAqLworCV9fdTggYklJbmZvOwkJCS8qIEludGVycnVwdCBpbmZvcm1hdGlvbiAgICAgICAgICAgICovCit9ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisjZGVmaW5lIFRJVU1QX0dFVF9QT1JUX0ZST01fQ09ERShjKQkoKChjKSA+PiA0KSAtIDMpCisjZGVmaW5lIFRJVU1QX0dFVF9GVU5DX0ZST01fQ09ERShjKQkoKGMpICYgMHgwZikKKyNkZWZpbmUgVElVTVBfSU5URVJSVVBUX0NPREVfTFNSCTB4MDMKKyNkZWZpbmUgVElVTVBfSU5URVJSVVBUX0NPREVfTVNSCTB4MDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdXNidmVuZC5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3VzYnZlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFmYTVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3VzYnZlbmQuaApAQCAtMCwwICsxLDY4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVVTQlZFTkQuSAkJVmVuZG9yLXNwZWNpZmljIFVTQiBkZWZpbml0aW9ucworICoKKyAqCU5PVEU6IFRoaXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgRWRnZXBvcnQgZmlybXdhcmUgYW5kCisgKgltdXN0IGJlIGtlcHQgYmFja3dhcmQtY29tcGF0aWJsZSB3aXRoIG9sZGVyIGZpcm13YXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgSW5jLgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX1VTQlZFTkRfSCkKKyNkZWZpbmUJX1VTQlZFTkRfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJCUQgZSBmIGkgbiBlIHMgICAvICAgVCB5IHAgZSBkIGUgZiBzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8vIERlZmluaXRpb25zIG9mIFVTQiBwcm9kdWN0IElEcworLy8gCisKKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9JT04JMHgxNjA4CQkvLyBPdXIgVklECisjZGVmaW5lCVVTQl9WRU5ET1JfSURfVEkJMHgwNDUxCQkvLyBUSSBWSUQKKworLy8KKy8vIERlZmluaXRpb25zIG9mIFVTQiBwcm9kdWN0IElEcyAoUElEKQorLy8gV2UgYnJlYWsgdGhlIFVTQi1kZWZpbmVkIFBJRCBpbnRvIGFuIE9FTSBJZCBmaWVsZCAodXBwZXIgNiBiaXRzKQorLy8gYW5kIGEgRGV2aWNlIElkIChib3R0b20gMTAgYml0cykuIFRoZSBEZXZpY2UgSWQgZGVmaW5lcyB3aGF0CisvLyBkZXZpY2UgdGhpcyBhY3R1YWxseSBpcyByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIE9FTSB3YW50cyB0bworLy8gY2FsbCBpdC4KKy8vCisKKy8vIElPTi1kZXZpY2UgT0VNIElEcworI2RlZmluZQlJT05fT0VNX0lEX0lPTgkJMAkJLy8gMDBoIEluc2lkZSBPdXQgTmV0d29ya3MKKyNkZWZpbmUJSU9OX09FTV9JRF9OTFlOWAkxCQkvLyAwMWggTkx5bnggU3lzdGVtcworI2RlZmluZQlJT05fT0VNX0lEX0dFTkVSSUMJMgkJLy8gMDJoIEdlbmVyaWMgT0VNCisjZGVmaW5lCUlPTl9PRU1fSURfTUFDCQkzCQkvLyAwM2ggTWFjIFZlcnNpb24KKyNkZWZpbmUJSU9OX09FTV9JRF9NRUdBV09MRgk0CQkvLyAwNGggTHVwdXNiIE9FTSBNYWMgdmVyc2lvbiAoTWVnYVdvbGYpCisjZGVmaW5lCUlPTl9PRU1fSURfTVVMVElURUNICTUJCS8vIDA1aCBNdWx0aXRlY2ggUmFwaWRwb3J0cworI2RlZmluZQlJT05fT0VNX0lEX0FHSUxFTlQJNgkJLy8gMDZoIEFHSUxFTlQgYm9hcmQKKworCisvLyBJT04tZGV2aWNlIERldmljZSBJRHMKKy8vIFByb2R1Y3QgSURzIC0gYXNzaWduZWQgdG8gbWF0Y2ggbWlkZGxlIGRpZ2l0IG9mIHNlcmlhbCBudW1iZXIgKE5vIGxvbmdlciB0cnVlKQorCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfODAyNTFfTkVUQ0hJUAkweDAyMAkvLyBUaGlzIGJpdCBpcyBzZXQgaW4gdGhlIFBJRCBpZiB0aGlzIGVkZ2Vwb3J0IGhhcmR3YXJlJAorCQkJCQkJLy8gaXMgYmFzZWQgb24gdGhlIDgwMjUxK05ldGNoaXAuICAKKworI2RlZmluZSBJT05fREVWSUNFX0lEX0dFTkVSQVRJT05fMQkweDAwCS8vIFZhbHVlIGZvciA5MzAgYmFzZWQgZWRnZXBvcnRzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfR0VORVJBVElPTl8yCTB4MDEJLy8gVmFsdWUgZm9yIDgwMjUxK05ldGNoaXAuCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfR0VORVJBVElPTl8zCTB4MDIJLy8gVmFsdWUgZm9yIFRleGFzIEluc3RydW1lbnRzIFRVU0I1MDUyIGNoaXAKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9HRU5FUkFUSU9OXzQJMHgwMwkvLyBXYXRjaHBvcnQgRmFtaWx5IG9mIHByb2R1Y3RzCisjZGVmaW5lIElPTl9HRU5FUkFUSU9OX01BU0sJCTB4MDMKKworI2RlZmluZSBJT05fREVWSUNFX0lEX0hVQl9NQVNLCQkweDAwODAJLy8gVGhpcyBiaXQgaW4gdGhlIFBJRCBkZXNpZ25hdGVzIGEgSFVCIGRldmljZQorCQkJCQkJLy8gZm9yIGV4YW1wbGUgOEMgd291bGQgYmUgYSA0MjEgNCBwb3J0IGh1YgorCQkJCQkJLy8gYW5kIDhEIHdvdWxkIGJlIGEgMiBwb3J0IGVtYmVkZGVkIGh1YgorCisjZGVmaW5lIEVER0VQT1JUX0RFVklDRV9JRF9NQVNLCQkJMHgwZmYJLy8gTm90IGluY2x1ZGluZyBPRU0gb3IgR0VORVJBVElPTiBmaWVsZHMKKworI2RlZmluZQlJT05fREVWSUNFX0lEX1VOQ09ORklHVVJFRF9FREdFX0RFVklDRQkweDAwMAkvLyBJbiBtYW51ZmFjdHVyaW5nIG9ubHkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80CQkweDAwMQkvLyBFZGdlcG9ydC80IFJTMjMyCisjZGVmaW5lCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFIJCTB4MDAyCS8vIEVkZ2Vwb3J0IHdpdGggUko0NSBubyBSaW5nCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfUkFQSURQT1JUXzQJCTB4MDAzCS8vIFJhcGlkcG9ydC80CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQJCTB4MDA0CS8vIEVkZ2Vwb3J0LzQgUlMyMzIgZm9yIFRlbHhvbiAoYWthICJGbGVldHBvcnQiKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIJCTB4MDA1CS8vIEVkZ2Vwb3J0LzIgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80SQkJMHgwMDYJLy8gRWRnZXBvcnQvNCBSUzQyMgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJJCQkweDAwNwkvLyBFZGdlcG9ydC8yIFJTNDIyL1JTNDg1CisjZGVmaW5lCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFJSCQkweDAwOAkvLyBFZGdlcG9ydCB3aXRoIFJKNDUgd2l0aCBEYXRhIGFuZCBSVFMvQ1RTIG9ubHkKKy8vCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9IQU5EQlVJTFQJMHgwMDkJLy8gSGFuZC1idWlsdCBFZGdlcG9ydC84IChQbGFjZWhvbGRlciwgdXNlZCBpbiBtaWRkbGUgZGlnaXQgb2Ygc2VyaWFsIG51bWJlciBvbmx5ISkKKy8vCUlPTl9ERVZJQ0VfSURfTVVMVElNT0RFTV80WDU2CQkweDAwQQkvLyBNdWx0aVRlY2ggdmVyc2lvbiBvZiBSUC80IChQbGFjZWhvbGRlciwgdXNlZCBpbiBtaWRkbGUgZGlnaXQgb2Ygc2VyaWFsIG51bWJlciBvbmx5ISkKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF9QQVJBTExFTF9QT1JUCTB4MDBCCS8vIEVkZ2Vwb3J0Lyg0KTIxIFBhcmFsbGVsIHBvcnQgKFVTUzcyMCkKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MjEJCTB4MDBDCS8vIEVkZ2Vwb3J0LzQyMSBIdWIrUlMyMzIrUGFyYWxsZWwKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMQkJMHgwMEQJLy8gRWRnZXBvcnQvMjEgIFJTMjMyK1BhcmFsbGVsCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9EVUFMX0NQVQkweDAwRQkvLyBIYWxmIG9mIGFuIEVkZ2Vwb3J0LzggKHRoZSBraW5kIHdpdGggMiBFUC80cyBvbiAxIFBDQikKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84CQkweDAwRgkvLyBFZGdlcG9ydC84IChzaW5nbGUtQ1BVKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJfRElOCQkweDAxMAkvLyBFZGdlcG9ydC8yIFJTMjMyIHdpdGggQXBwbGUgRElOIGNvbm5lY3RvcgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRfRElOCQkweDAxMQkvLyBFZGdlcG9ydC80IFJTMjMyIHdpdGggQXBwbGUgRElOIGNvbm5lY3RvcgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzE2X0RVQUxfQ1BVCTB4MDEyCS8vIEhhbGYgb2YgYW4gRWRnZXBvcnQvMTYgKHRoZSBraW5kIHdpdGggMiBFUC84cykKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF9DT01QQVRJQkxFCTB4MDEzCS8vIEVkZ2Vwb3J0IENvbXBhdGlibGUsIGZvciBOQ1IsIEF4aW9obSBldGMuIHRlc3RpbmcKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84SQkJMHgwMTQJLy8gRWRnZXBvcnQvOCBSUzQyMiAoc2luZ2xlLUNQVSkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8xCQkweDAxNQkvLyBFZGdlcG9ydC8xIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRVBPUzQ0CQkJMHgwMTYJLy8gSGFsZiBvZiBhbiBFUE9TLzQ0IChUSVVNUCBCQVNFRCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MgkJMHgwMTcJLy8gRWRnZXBvcnQvNDIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfOAkJMHgwMTgJLy8gRWRnZXBvcnQvNDEyIDggcG9ydCBwYXJ0CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDEyXzQJCTB4MDE5CS8vIEVkZ2Vwb3J0LzQxMgk0IHBvcnQgcGFydAorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIySQkJMHgwMUEJLy8gRWRnZXBvcnQvMjJJIGlzIGFuIEVkZ2Vwb3J0LzQgd2l0aCBwb3J0cyAxJjIgUlM0MjIgYW5kIHBvcnRzIDMmNCBSUzIzMgorCisvLyBDb21wYWN0IEZvcm0gZmFjdG9yIFRJIGJhc2VkIGRldmljZXMgIDJjLCAyMWMsIDIyYywgMjIxYworI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJDCQkweDAxQgkvLyBFZGdlcG9ydC8yYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgLSBTbWFsbCBJMmMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMjFDCQkweDAxQwkvLyBFZGdlcG9ydC8yMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwIGFuZAorCQkJCQkJCS8vIDIgZXh0ZXJuYWwgaHViIHBvcnRzIC0gTGFyZ2UgSTJDCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjJDCQkweDAxRAkvLyBFZGdlcG9ydC8yMmMgaXMgYSBUSSBiYXNlZCBFZGdlcG9ydC8yIHdpdGgKKwkJCQkJCQkvLyAyIGV4dGVybmFsIGh1YiBwb3J0cyAtIExhcmdlIEkyQworI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxQwkJMHgwMUUJLy8gRWRnZXBvcnQvMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwCisJCQkJCQkJLy8gU21hbGwgSTJDCisKKworLyoKKyAqICBEQU5HRVIgREFOR0VSIFRoZSAweDIwIGJpdCB3YXMgdXNlZCB0byBpbmRpY2F0ZSBhIDgyNTEvbmV0Y2hpcCBHRU4gMiBkZXZpY2UuCisgKiAgU2luY2UgdGhlIE1BQywgTGludXgsIGFuZCBPcHRpbWFsIGRyaXZlcnMgc3RpbGwgdXNlZCB0aGUgb2xkIGNvZGUKKyAqICBJIHN1Z2dlc3QgdGhhdCB5b3Ugc2tpcCB0aGUgMHgyMCBiaXQgd2hlbiBjcmVhdGluZyBuZXcgUElEcworICovCisKKworLy8gR2VuZXJhdGlvbiAzIGRldmljZXMgLS0gMzQxMCBiYXNlZCBlZGdwb3J0LzEgKDI1NiBieXRlIEkyQykKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USTM0MTBfRURHRVBPUlRfMQkJMHgwNDAJLy8gRWRnZXBvcnQvMSBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJMzQxMF9FREdFUE9SVF8xSQkweDA0MQkvLyBFZGdlcG9ydC8xaS0gUlM0MjIgbW9kZWwKKworLy8gVGkgYmFzZWQgc29mdHdhcmUgc3dpdGNoYWJsZSBSUzIzMi9SUzQyMi9SUzQ4NSBkZXZpY2VzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFMJCTB4MDQyCS8vIEVkZ2Vwb3J0LzRzIC0gc29mdHdhcmUgc3dpdGNoYWJsZSBtb2RlbAorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhTCQkweDA0MwkvLyBFZGdlcG9ydC84cyAtIHNvZnR3YXJlIHN3aXRjaGFibGUgbW9kZWwKKworLy8gVXNiIHRvIEV0aGVybmV0IGRvbmdsZQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUX0UJCTB4MEUwCS8vIEVkZ2Vwb3J0L0UgVXNiIHRvIEV0aGVybmV0CisKKy8vIEVkZ2Vwb3J0IFRJIGJhc2VkIGRldmljZXMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80CQkweDAyMDEJLy8gRWRnZXBvcnQvNCBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIJCTB4MDIwNQkvLyBFZGdlcG9ydC8yIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNEkJCTB4MDIwNgkvLyBFZGdlcG9ydC80aSBSUzQyMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJJCQkweDAyMDcJLy8gRWRnZXBvcnQvMmkgUlM0MjIvUlM0ODUKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80MjEJCTB4MDIwQwkvLyBFZGdlcG9ydC80MjEgNCBodWIgMiBSUzIzMiArIFBhcmFsbGVsIChsdWNlbnQgb24gYSBkaWZmZXJlbnQgaHViIHBvcnQpCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjEJCTB4MDIwRAkvLyBFZGdlcG9ydC8yMSAyIFJTMjMyICsgUGFyYWxsZWwgKGx1Y2VudCBvbiBhIGRpZmZlcmVudCBodWIgcG9ydCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF84CQkweDAyMEYJLy8gRWRnZXBvcnQvOCAoc2luZ2xlLUNQVSkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8xCQkweDAyMTUJLy8gRWRnZXBvcnQvMSBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyCQkweDAyMTcJLy8gRWRnZXBvcnQvNDIgNCBodWIgMiBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIySSAgCQkweDAyMUEJLy8gRWRnZXBvcnQvMjJJIGlzIGFuIEVkZ2Vwb3J0LzQgd2l0aCBwb3J0cyAxJjIgUlM0MjIgYW5kIHBvcnRzIDMmNCBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzJDCQkweDAyMUIJLy8gRWRnZXBvcnQvMmMgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMjFDCQkweDAyMUMJLy8gRWRnZXBvcnQvMjIxYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgd2l0aCBsdWNlbnQgY2hpcCBhbmQKKwkJCQkJCQkvLyAyIGV4dGVybmFsIGh1YiBwb3J0cyAtIExhcmdlIEkyQworI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIyQwkJMHgwMjFECS8vIEVkZ2Vwb3J0LzIyYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgd2l0aAorCQkJCQkJCS8vIDIgZXh0ZXJuYWwgaHViIHBvcnRzIC0gTGFyZ2UgSTJDCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjFDCQkweDAyMUUJLy8gRWRnZXBvcnQvMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwCisKKy8vIEdlbmVyYXRpb24gMyBkZXZpY2VzIC0tIDM0MTAgYmFzZWQgZWRncG9ydC8xICgyNTYgYnl0ZSBJMkMpIAorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xCTB4MjQwCS8vIEVkZ2Vwb3J0LzEgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkJMHgyNDEJLy8gRWRnZXBvcnQvMWktIFJTNDIyIG1vZGVsCisKKy8vIFRpIGJhc2VkIHNvZnR3YXJlIHN3aXRjaGFibGUgUlMyMzIvUlM0MjIvUlM0ODUgZGV2aWNlcworI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzRTCQkweDI0MgkvLyBFZGdlcG9ydC80cyAtIHNvZnR3YXJlIHN3aXRjaGFibGUgbW9kZWwKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9JVF9FREdFUE9SVF84UwkJMHgyNDMJLy8gRWRnZXBvcnQvOHMgLSBzb2Z0d2FyZSBzd2l0Y2hhYmxlIG1vZGVsCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbiA0IGRldmljZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBXYXRjaHBvcnQgYmFzZWQgb24gMzQxMCBib3RoIDEtd2lyZSBhbmQgYmluYXJ5IHByb2R1Y3RzICgxNksgSTJDKQorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1VOU0VSSUFMSVpFRAkJMHgzMDAJLy8gV2F0Y2hwb3J0IGJhc2VkIG9uIDM0MTAgYm90aCAxLXdpcmUgYW5kIGJpbmFyeSBwcm9kdWN0cworI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1BST1hJTUlUWQkJMHgzMDEJLy8gV2F0Y2hwb3J0L1AgRGlzY29udGludWVkCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfTU9USU9OCQkJMHgzMDIJLy8gV2F0Y2hwb3J0L00KKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9NT0lTVFVSRQkJMHgzMDMJLy8gV2F0Y2hwb3J0L1cKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9URU1QRVJBVFVSRQkJMHgzMDQJLy8gV2F0Y2hwb3J0L1QKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9IVU1JRElUWQkJMHgzMDUJLy8gV2F0Y2hwb3J0L0gKKworI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1BPV0VSCQkJMHgzMDYJLy8gV2F0Y2hwb3J0CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfTElHSFQJCQkweDMwNwkvLyBXYXRjaHBvcnQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9SQURJQVRJT04JCTB4MzA4CS8vIFdhdGNocG9ydAorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX0FDQ0VMRVJBVElPTgkJMHgzMDkJLy8gV2F0Y2hwb3J0L0EKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9ESVNUQU5DRQkJMHgzMEEJLy8gV2F0Y2hwb3J0L0QgRGlzY29udGludWVkCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfUFJPWF9ESVNUCQkweDMwQgkvLyBXYXRjaHBvcnQvRCB1c2VzIGRpc3RhbmNlIHNlbnNvcgorCQkJCQkJCS8vIERlZmF1bHQgdG8gL1AgZnVuY3Rpb24KKworI2RlZmluZSBJT05fREVWSUNFX0lEX1BMVVNfUFdSX0hQNENECQkweDMwQwkvLyA1MDUyIFBsdXMgUG93ZXIgSHViUG9ydC80Q0QrIChmb3IgRGVsbCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9QTFVTX1BXUl9IUDRDCQkweDMwRAkvLyA1MDUyIFBsdXMgUG93ZXIgSHViUG9ydC80QysgCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfUExVU19QV1JfUENJCQkweDMwRQkvLyAzNDEwIFBsdXMgUG93ZXIgUENJIEhvc3QgQ29udHJvbGxlciA0IHBvcnQKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIEFYSU9ITSBVU0IgcHJvZHVjdCBJRHMKKy8vCisjZGVmaW5lCVVTQl9WRU5ET1JfSURfQVhJT0hNCQkJMHgwNUQ5CS8vIEF4aW9obSBWSUQKKworI2RlZmluZSBBWElPSE1fREVWSUNFX0lEX01BU0sJCQkweGZmZmYKKyNkZWZpbmUgQVhJT0hNX0RFVklDRV9JRF9FUElDX0E3NTgJCTB4QTc1OAorI2RlZmluZSBBWElPSE1fREVWSUNFX0lEX0VQSUNfQTc5NAkJMHhBNzk0CisjZGVmaW5lIEFYSU9ITV9ERVZJQ0VfSURfRVBJQ19BMjI1CQkweEEyMjUKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIE5DUiBVU0IgcHJvZHVjdCBJRHMKKy8vCisjZGVmaW5lCVVTQl9WRU5ET1JfSURfTkNSCQkJMHgwNDA0CS8vIE5DUiBWSUQKKworI2RlZmluZSBOQ1JfREVWSUNFX0lEX01BU0sJCQkweGZmZmYKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAyMDIJCQkweDAyMDIKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAyMDMJCQkweDAyMDMKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAzMTAJCQkweDAzMTAKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAzMTEJCQkweDAzMTEKKyNkZWZpbmUgTkNSX0RFVklDRV9JRF9FUElDXzAzMTIJCQkweDAzMTIKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIFNZTUJPTCBVU0IgcHJvZHVjdCBJRHMKKy8vCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1lNQk9MCQkJMHgwNUUwCS8vIFN5bWJvbCBWSUQKKyNkZWZpbmUgU1lNQk9MX0RFVklDRV9JRF9NQVNLCQkJMHhmZmZmCisjZGVmaW5lIFNZTUJPTF9ERVZJQ0VfSURfS0VZRk9CCQkJMHgwNzAwCisKKworLy8KKy8vIERlZmluaXRpb25zIGZvciBvdGhlciBwcm9kdWN0IElEcworI2RlZmluZSBJT05fREVWSUNFX0lEX01UNFg1NlVTQgkJCTB4MTQwMwkvLyBPRU0gZGV2aWNlCisKKworI2RlZmluZQlHRU5FUkFUSU9OX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQoIFByb2R1Y3RJZCApCQkJCVwKKwkJCSggKF9fdTE2KSAoKFByb2R1Y3RJZCA+PiA4KSAmIChJT05fR0VORVJBVElPTl9NQVNLKSkgKQorCisjZGVmaW5lCU1BS0VfVVNCX1BST0RVQ1RfSUQoIE9lbUlkLCBEZXZpY2VJZCApCQkJCQlcCisJCQkoIChfX3UxNikgKCgoT2VtSWQpIDw8IDEwKSB8fCAoRGV2aWNlSWQpKSApCisKKyNkZWZpbmUJREVWSUNFX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQoIFByb2R1Y3RJZCApCQkJCVwKKwkJCSggKF9fdTE2KSAoKFByb2R1Y3RJZCkgJiAoRURHRVBPUlRfREVWSUNFX0lEX01BU0spKSApCisKKyNkZWZpbmUJT0VNX0lEX0ZST01fVVNCX1BST0RVQ1RfSUQoIFByb2R1Y3RJZCApCQkJCQlcCisJCQkoIChfX3UxNikgKCgoUHJvZHVjdElkKSA+PiAxMCkgJiAweDNGKSApCisKKy8vCisvLyBEZWZpbml0aW9ucyBvZiBwYXJhbWV0ZXJzIGZvciBkb3dubG9hZCBjb2RlLiBOb3RlIHRoYXQgdGhlc2UgYXJlCisvLyBzcGVjaWZpYyB0byBhIGdpdmVuIHZlcnNpb24gb2YgZG93bmxvYWQgY29kZSBhbmQgbXVzdCBjaGFuZ2UgaWYgdGhlCisvLyBjb3JyZXNwb25kaW5nIGRvd25sb2FkIGNvZGUgY2hhbmdlcy4KKy8vCisKKy8vIFR4Q3JlZGl0cyB2YWx1ZSBiZWxvdyB3aGljaCBkcml2ZXIgd29uJ3QgYm90aGVyIHNlbmRpbmcgKHRvIHByZXZlbnQgdG9vIG1hbnkgc21hbGwgd3JpdGVzKS4KKy8vIFNlbmQgb25seSBpZiBhYm92ZSAyNSUKKyNkZWZpbmUgRURHRV9GV19HRVRfVFhfQ1JFRElUU19TRU5EX1RIUkVTSE9MRChJbml0aWFsQ3JlZGl0LCBNYXhQYWNrZXRTaXplKSAobWF4KCAoKEluaXRpYWxDcmVkaXQpIC8gNCksIChNYXhQYWNrZXRTaXplKSApKQorCisjZGVmaW5lCUVER0VfRldfQlVMS19NQVhfUEFDS0VUX1NJWkUJCTY0CS8vIE1heCBQYWNrZXQgU2l6ZSBmb3IgQnVsayBJbiBFbmRwb2ludCAoRVAxKQorI2RlZmluZSBFREdFX0ZXX0JVTEtfUkVBRF9CVUZGRVJfU0laRQkJMTAyNAkvLyBTaXplIHRvIHVzZSBmb3IgQnVsayByZWFkcworCisjZGVmaW5lCUVER0VfRldfSU5UX01BWF9QQUNLRVRfU0laRQkJMzIJLy8gTWF4IFBhY2tldCBTaXplIGZvciBJbnRlcnJ1cHQgSW4gRW5kcG9pbnQKKwkJCQkJCQkvLyBOb3RlIHRoYXQgbWFueSB1bml0cyB3ZXJlIHNoaXBwZWQgd2l0aCBNUFM9MTYsIHdlCisJCQkJCQkJLy8gZm9yY2UgYW4gdXBncmFkZSB0byB0aGlzIHZhbHVlKS4KKyNkZWZpbmUgRURHRV9GV19JTlRfSU5URVJWQUwJCQkyCS8vIDJtcyBwb2xsaW5nIG9uIEludFBpcGUKKworCisvLworLy8gRGVmaW5pdGlvbnMgb2YgSS9PIE5ldHdvcmtzIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0cworLy8gZm9yIGRlZmF1bHQgZW5kcG9pbnQKKy8vCisvLwlibVJlcXVlc3RUeXBlID0gMDEwMDAwMDAJU2V0IHZlbmRvci1zcGVjaWZpYywgdG8gZGV2aWNlCisvLwlibVJlcXVlc3RUeXBlID0gMTEwMDAwMDAJR2V0IHZlbmRvci1zcGVjaWZpYywgdG8gZGV2aWNlCisvLworLy8gVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIGJSZXF1ZXN0IGZpZWxkIGZvciB0aGUKKy8vIGFib3ZlIGJtUmVxdWVzdFR5cGVzLgorLy8KKy8vIEZvciB0aGUgcmVhZC93cml0ZSBFZGdlcG9ydCBtZW1vcnkgY29tbWFuZHMsIHRoZSBwYXJhbWV0ZXJzCisvLyBhcmUgYXMgZm9sbG93czoKKy8vCQl3VmFsdWUgPSAxNi1iaXQgYWRkcmVzcworLy8JCXdJbmRleCA9IHVudXNlZCAodGhvdWdoIHdlIGNvdWxkIHB1dCBzZWdtZW50IDAwOiBvciBGRjogaGVyZSkKKy8vCQl3TGVuZ3RoID0gIyBieXRlcyB0byByZWFkL3dyaXRlIChtYXggNjQpCisvLwkJCQkJCQkKKworI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fUkVTRVRfREVWSUNFCTAJLy8gV2FybSByZWJvb3QgRWRnZXBvcnQsIHJldGFpbmluZyBVU0IgYWRkcmVzcworI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fR0VUX0VQSUNfREVTQwkxCS8vIEdldCBFZGdlcG9ydCBDb21wYXRpYmlsaXR5IERlc2NyaXB0b3IKKy8vIHVudXNlZAkJCQkyCS8vIFVudXNlZCwgYXZhaWxhYmxlCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9SRUFEX1JBTQkzCS8vIFJlYWQgIEVkZ2VQb3J0IFJBTSBhdCBzcGVjaWZpZWQgYWRkcgorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fV1JJVEVfUkFNCTQJLy8gV3JpdGUgRWRnZVBvcnQgUkFNIGF0IHNwZWNpZmllZCBhZGRyCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9SRUFEX1JPTQk1CS8vIFJlYWQgIEVkZ2VQb3J0IFJPTSBhdCBzcGVjaWZpZWQgYWRkcgorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fV1JJVEVfUk9NCTYJLy8gV3JpdGUgRWRnZVBvcnQgUk9NIGF0IHNwZWNpZmllZCBhZGRyCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9FWEVDX0RMX0NPREUJNwkvLyBCZWdpbiBleGVjdXRpb24gb2YgUkFNLWJhc2VkIGRvd25sb2FkCisJCQkJCQkvLyBjb2RlIGJ5IGp1bXBpbmcgdG8gYWRkcmVzcyBpbiB3SW5kZXg6d1ZhbHVlCisvLwkJCQkJOAkvLyBVbnVzZWQsIGF2YWlsYWJsZQorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fRU5BQkxFX1NVU1BFTkQJOQkvLyBFbmFibGUvRGlzYWJsZSBzdXNwZW5kIGZlYXR1cmUKKwkJCQkJCS8vICh3VmFsdWUgIT0gMDogRW5hYmxlOyB3VmFsdWUgPSAwOiBEaXNhYmxlKQorCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9TRU5EX0lPU1AJMTAJLy8gU2VuZCBhbiBJT1NQIGNvbW1hbmQgdG8gdGhlIGVkZ2Vwb3J0IG92ZXIgdGhlIGNvbnRyb2wgcGlwZQkKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX1JFQ1ZfSU9TUAkxMQkvLyBSZWNlaXZlIGFuIElPU1AgY29tbWFuZCBmcm9tIHRoZSBlZGdlcG9ydCBvdmVyIHRoZSBjb250cm9sIHBpcGUKKworCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9ESVNfSU5UX1RJTUVSCTB4ODAJLy8gU2VudCB0byBBeGlvaG0gdG8gZW5hYmxlLyBkaXNhYmxlCisJCQkJCQkvLyBpbnRlcnJ1cHQgdG9rZW4gdGltZXIKKwkJCQkJCS8vIHdWYWx1ZSA9IDEsIGVuYWJsZSAoZGVmYXVsdCkKKwkJCQkJCS8vIHdWYWx1ZSA9IDAsIGRpc2FibGUKKworLy8KKy8vIERlZmluZSBwYXJhbWV0ZXIgdmFsdWVzIGZvciBvdXIgdmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzCisvLworCisvLworLy8gRWRnZXBvcnQgQ29tcGF0aWJsaXR5IERlc2NyaXB0b3IKKy8vCisvLyBUaGlzIGRlc2NyaXB0b3IgaXMgb25seSByZXR1cm5lZCBieSBFZGdlcG9ydC1jb21wYXRpYmxlIGRldmljZXMKKy8vIHN1cHBvcnRpbmcgdGhlIEVQaUMgc3BlYy4gVHJ1ZSBJT04gZGV2aWNlcyBkbyBub3QgcmV0dXJuIHRoaXMKKy8vIGRlc2NyaXB0b3IsIGJ1dCBpbnN0ZWFkIHJldHVybiBTVEFMTCBvbiByZWNlaXB0IG9mIHRoZQorLy8gR0VUX0VQSUNfREVTQyBjb21tYW5kLiBUaGUgZHJpdmVyIGludGVycHJldHMgYSBTVEFMTCB0byBtZWFuIHRoYXQKKy8vIHRoaXMgaXMgYSAicmVhbCIgRWRnZXBvcnQuCisvLworCitzdHJ1Y3QgZWRnZV9jb21wYXRpYmlsaXR5X2JpdHMKK3sKKwkvLyBUaGlzIF9fdTMyIGRlZmluZXMgd2hpY2ggVmVuZG9yLXNwZWNpZmljIGNvbW1hbmRzL2Z1bmN0aW9uYWxpdHkKKwkvLyB0aGUgZGV2aWNlIHN1cHBvcnRzIG9uIHRoZSBkZWZhdWx0IEVQMCBwaXBlLgorCisJX191MzIJVmVuZEVuYWJsZVN1c3BlbmQJOiAgMTsJLy8gMDAwMSBTZXQgaWYgZGV2aWNlIHN1cHBvcnRzIElPTl9FTkFCTEVfU1VTUEVORAorCV9fdTMyCVZlbmRVbnVzZWQJCTogMzE7CS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgbXVzdCBiZSAwCisKKwkvLyBUaGlzIF9fdTMyIGRlZmluZXMgd2hpY2ggSU9TUCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIG92ZXIgdGhlCisJLy8gYnVsayBwaXBlIEVQMS4KKworCQkJCQkJCQkJCQkvLyB4eHh4IFNldCBpZiBkZXZpY2Ugc3VwcG9ydHM6CisJX191MzIJSU9TUE9wZW4JCTogIDE7CS8vIDAwMDEJT1BFTiAvIE9QRU5fUlNQIChDdXJyZW50bHkgbXVzdCBiZSAxKQorCV9fdTMyCUlPU1BDbG9zZQkJOiAgMTsJLy8gMDAwMglDTE9TRQorCV9fdTMyCUlPU1BDaGFzZQkJOiAgMTsJLy8gMDAwNAlDSEFTRSAvIENIQVNFX1JTUAorCV9fdTMyCUlPU1BTZXRSeEZsb3cJCTogIDE7CS8vIDAwMDgJU0VUX1JYX0ZMT1cKKwlfX3UzMglJT1NQU2V0VHhGbG93CQk6ICAxOwkvLyAwMDEwCVNFVF9UWF9GTE9XCisJX191MzIJSU9TUFNldFhDaGFyCQk6ICAxOwkvLyAwMDIwCVNFVF9YT05fQ0hBUi9TRVRfWE9GRl9DSEFSCisJX191MzIJSU9TUFJ4Q2hlY2sJCTogIDE7CS8vIDAwNDAJUlhfQ0hFQ0tfUkVRL1JYX0NIRUNLX1JTUAorCV9fdTMyCUlPU1BTZXRDbHJCcmVhawkJOiAgMTsJLy8gMDA4MAlTRVRfQlJFQUsvQ0xFQVJfQlJFQUsKKwlfX3UzMglJT1NQV3JpdGVNQ1IJCTogIDE7CS8vIDAxMDAJTUNSIHJlZ2lzdGVyIHdyaXRlcyAoc2V0L2NsciBEVFIvUlRTKQorCV9fdTMyCUlPU1BXcml0ZUxDUgkJOiAgMTsJLy8gMDIwMAlMQ1IgcmVnaXN0ZXIgd3JpdGVzICh3b3JkbGVuL3N0b3AvcGFyaXR5KQorCV9fdTMyCUlPU1BTZXRCYXVkUmF0ZQkJOiAgMTsJLy8gMDQwMAlzZXR0aW5nIEJhdWQgcmF0ZSAod3JpdGVzIHRvIExDUi44MGggYW5kIERMTC9ETE0gcmVnaXN0ZXIpCisJX191MzIJSU9TUERpc2FibGVJbnRQaXBlCTogIDE7CS8vIDA4MDAgRG8gbm90IHVzZSB0aGUgaW50ZXJydXB0IHBpcGUgZm9yIFR4Q3JlZGl0cyBvciBSeEJ1dGVzQXZhaWxhYmxlCisJX191MzIJSU9TUFJ4RGF0YUF2YWlsCQk6ICAxOyAgIC8vIDEwMDAgUmV0dXJuIHN0YXR1cyBvZiBSWCBGaWZvIChEYXRhIGF2YWlsYWJsZSBpbiBGaWZvKQorCV9fdTMyCUlPU1BUeFB1cmdlCQk6ICAxOwkvLyAyMDAwIFB1cmdlIFRYQnVmZmVyIGFuZC9vciBGaWZvIGluIEVkZ2Vwb3J0IGhhcmR3YXJlCisJX191MzIJSU9TUFVudXNlZAkJOiAxODsJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBtdXN0IGJlIDAKKworCS8vIFRoaXMgX191MzIgZGVmaW5lcyB3aGljaCAnZ2VuZXJhbCcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZAorCisJX191MzIJVHJ1ZUVkZ2Vwb3J0CQk6ICAxOwkvLyAwMDAxCVNldCBpZiBkZXZpY2UgaXMgYSAncmVhbCcgRWRnZXBvcnQKKwkJCQkJCQkJCQkJLy8gKFVzZWQgb25seSBieSBkcml2ZXIsIE5FVkVSIHNldCBieSBhbiBFUGlDIGRldmljZSkKKwlfX3UzMglHZW5VbnVzZWQJCTogMzE7CS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgbXVzdCBiZSAwCisKK307CisKK3N0cnVjdCBlZGdlX2NvbXBhdGliaWxpdHlfZGVzY3JpcHRvcgoreworCV9fdTgJTGVuZ3RoOwkJCQkvLyBEZXNjcmlwdG9yIExlbmd0aCAocGVyIFVTQiBzcGVjKQorCV9fdTgJRGVzY1R5cGU7CQkJLy8gRGVzY3JpcHRvciBUeXBlIChwZXIgVVNCIHNwZWMsID1ERVZJQ0UgdHlwZSkKKwlfX3U4CUVwaWNWZXI7CQkJLy8gVmVyc2lvbiBvZiBFUGlDIHNwZWMgc3VwcG9ydGVkCisJCQkJCQkJCQkJCS8vIChDdXJyZW50bHkgbXVzdCBiZSAxKQorCV9fdTgJTnVtUG9ydHM7CQkJLy8gTnVtYmVyIG9mIHNlcmlhbCBwb3J0cyBzdXBwb3J0ZWQKKwlfX3U4CWlEb3dubG9hZEZpbGU7CQkJLy8gSW5kZXggb2Ygc3RyaW5nIGNvbnRhaW5pbmcgZG93bmxvYWQgY29kZSBmaWxlbmFtZQorCQkJCQkJCQkJCQkvLyAwPW5vIGRvd25sb2FkLCBGRj1kb3dubG9hZCBjb21waWxlZCBpbnRvIGRyaXZlci4KKwlfX3U4CVVudXNlZFsgMyBdOwkJCS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbiwgbXVzdCBiZSAwCisJCQkJCQkJCQkJCS8vIChDdXJyZW50bHkgbXVzdCBiZSAwKS4KKwlfX3U4CU1ham9yVmVyc2lvbjsJCQkvLyBGaXJtd2FyZSB2ZXJzaW9uOiB4eC4KKwlfX3U4CU1pbm9yVmVyc2lvbjsJCQkvLyAgeXkuCisJX19sZTE2CUJ1aWxkTnVtYmVyOwkJCS8vICB6enp6IChMRSBmb3JtYXQpCisKKwkvLyBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBjb250YWlucyBfX3UzMnMsIHdpdGggZWFjaCBiaXQKKwkvLyBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIEVQaUMgZGV2aWNlIHN1cHBvcnRzIHRoZSBnaXZlbgorCS8vIGNvbW1hbmQgb3IgZnVuY3Rpb25hbGl0eS4KKworCXN0cnVjdCBlZGdlX2NvbXBhdGliaWxpdHlfYml0cwlTdXBwb3J0czsKKworfTsKKworLy8gVmFsdWVzIGZvciBpRG93bmxvYWRGaWxlCisjZGVmaW5lCUVER0VfRE9XTkxPQURfRklMRV9OT05FCQkwCS8vIE5vIGRvd25sb2FkIHJlcXVlc3RlZAorI2RlZmluZQlFREdFX0RPV05MT0FEX0ZJTEVfSU5URVJOQUwJMHhGRgkvLyBEb3dubG9hZCB0aGUgZmlsZSBjb21waWxlZCBpbnRvIGRyaXZlciAoOTMwIHZlcnNpb24pCisjZGVmaW5lCUVER0VfRE9XTkxPQURfRklMRV9JOTMwCQkweEZGCS8vIERvd25sb2FkIHRoZSBmaWxlIGNvbXBpbGVkIGludG8gZHJpdmVyICg5MzAgdmVyc2lvbikKKyNkZWZpbmUJRURHRV9ET1dOTE9BRF9GSUxFXzgwMjUxCTB4RkUJLy8gRG93bmxvYWQgdGhlIGZpbGUgY29tcGlsZWQgaW50byBkcml2ZXIgKDgwMjUxIHZlcnNpb24pCisKKworCisvKgorICoJU3BlY2lhbCBhZGRyZXNzZXMgZm9yIFJFQUQvV1JJVEVfUkFNL1JPTQorICovCisKKy8vIFZlcnNpb24gMSAob3JpZ2luYWwpIGZvcm1hdCBvZiBEZXZpY2VQYXJhbXMKKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0FERFJfVjEJCTB4MDBGRjdGMDAKKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0xFTl9WMQkJc2l6ZW9mKEVER0VfTUFOVUZfREVTQ1JJUFRPUl9WMSkKKworLy8gVmVyc2lvbiAyIGZvcm1hdCBvZiBEZXZpY2VQYXJhbXMuIFRoaXMgZm9ybWF0IGlzIGxvbmdlciAoM0MwaCkKKy8vIGFuZCBzdGFydHMgbG93ZXIgaW4gbWVtb3J5LCBhdCB0aGUgdXBwZXJtb3N0IDFLIGluIFJPTS4KKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0FERFIJCTB4MDBGRjdDMDAKKyNkZWZpbmUJRURHRV9NQU5VRl9ERVNDX0xFTgkJc2l6ZW9mKHN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IpCisKKy8vIEJvb3QgcGFyYW1zIGRlc2NyaXB0b3IKKyNkZWZpbmUJRURHRV9CT09UX0RFU0NfQUREUgkJMHgwMEZGN0ZDMAorI2RlZmluZQlFREdFX0JPT1RfREVTQ19MRU4JCXNpemVvZihzdHJ1Y3QgZWRnZV9ib290X2Rlc2NyaXB0b3IpCisKKy8vIERlZmluZSB0aGUgbWF4IGJsb2NrIHNpemUgdGhhdCBtYXkgYmUgcmVhZCBvciB3cml0dGVuCisvLyBpbiBhIHJlYWQvd3JpdGUgUkFNL1JPTSBjb21tYW5kLgorI2RlZmluZQlNQVhfU0laRV9SRVFfSU9OX1JFQURfTUVNCSggKF9fdTE2KSA2NCApCisjZGVmaW5lCU1BWF9TSVpFX1JFUV9JT05fV1JJVEVfTUVNCSggKF9fdTE2KSA2NCApCisKKworLy8KKy8vIE5vdGVzIGZvciB0aGUgZm9sbG93aW5nIHR3byBJT04gdmVuZG9yLXNwZWNpZmljIHBhcmFtIGRlc2NyaXB0b3JzOgorLy8KKy8vCTEuCVRoZXNlIGhhdmUgYSBzdGFuZGFyZCBVU0IgZGVzY3JpcHRvciBoZWFkZXIgc28gdGhleSBsb29rIGxpa2UgYQorLy8JCW5vcm1hbCBkZXNjcmlwdG9yLgorLy8JMi4JQW55IHN0cmluZ3MgaW4gdGhlIHN0cnVjdHVyZXMgYXJlIGluIFVTQi1kZWZpbmVkIHN0cmluZworLy8JCWRlc2NyaXB0b3IgZm9ybWF0LCBzbyB0aGF0IHRoZXkgbWF5IGJlIHNlcGFyYXRlbHkgcmV0cmlldmVkLAorLy8JCWlmIG5lY2Vzc2FyeSwgd2l0aCBhIG1pbmltdW0gb2Ygd29yayBvbiB0aGUgOTMwLiBUaGlzIGFsc28KKy8vCQlyZXF1aXJlcyB0aGVtIHRvIGJlIGluIFVOSUNPREUgZm9ybWF0LCB3aGljaCwgZm9yIEVuZ2xpc2ggYXQKKy8vCQlsZWFzdCwgc2ltcGx5IG1lYW5zIGV4dGVuZGluZyBlYWNoIF9fdTggaW50byBhIF9fdTE2LgorLy8JMy4JRm9yIGFsbCBmaWVsZHMsIDAwIG1lYW5zICd1bmluaXRpYWxpemVkJy4KKy8vCTQuCUFsbCB1bnVzZWQgYXJlYXMgc2hvdWxkIGJlIHNldCB0byAwMCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4KKy8vCisKKy8vIFRoaXMgc3RydWN0dXJlIGlzIHZlciAyIGZvcm1hdC4gSXQgY29udGFpbnMgQUxMIFVTQiBkZXNjcmlwdG9ycyBhcworLy8gd2VsbCBhcyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBpbiB0aGUgb3JpZ2luYWwgVjEKKy8vIHN0cnVjdHVyZS4gSXQgaXMgTk9UIG1vZGlmaWVkIHdoZW4gbmV3IGJvb3QgY29kZSBpcyBkb3dubG9hZGVkOyByYXRoZXIsCisvLyB0aGVzZSB2YWx1ZXMgYXJlIHNldCBvciBtb2RpZmllZCBieSBtYW51ZmFjdHVyaW5nLiBJdCBpcyBsb2NhdGVkIGF0CisvLyB4QzAwLXhGQkYgKGxlbmd0aCAzQzBoKSBpbiB0aGUgUk9NLgorLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgYSBzdXBlcnNldCBvZiB0aGUgdjEgc3RydWN0dXJlIGFuZCBpcyBhcnJhbmdlZCBzbworLy8gdGhhdCBhbGwgb2YgdGhlIHYxIGZpZWxkcyByZW1haW4gYXQgdGhlIHNhbWUgYWRkcmVzcy4gV2UgYXJlIGp1c3QKKy8vIGFkZGluZyBtb3JlIHJvb20gdG8gdGhlIGZyb250IG9mIHRoZSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZGVzY3JpcHRvcnMuCisvLworLy8gVGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgZGVmaW5lZCBpbiBhIDkzMCBhc3NlbWJseQorLy8gZmlsZSwgY29udmVydGVkIHRvIGEgYmluYXJ5IGltYWdlLCBhbmQgdGhlbiB3cml0dGVuIGJ5IHRoZSBzZXJpYWxpemF0aW9uCisvLyBwcm9ncmFtLiBUaGUgQyBkZWZpbml0aW9uIG9mIHRoaXMgc3RydWN0dXJlIGp1c3QgZGVmaW5lcyBhIGR1bW15CisvLyBhcmVhIGZvciBnZW5lcmFsIFVTQiBkZXNjcmlwdG9ycyBhbmQgdGhlIGRlc2NyaXB0b3IgdGFibGVzICh0aGUgcm9vdAorLy8gZGVzY3JpcHRvciBzdGFydHMgYXQgeEMwMCkuIEF0IHRoZSBib3R0b20gb2YgdGhlIHN0cnVjdHVyZSBhcmUgdGhlCisvLyBmaWVsZHMgaW5oZXJpdGVkIGZyb20gdGhlIHYxIHN0cnVjdHVyZS4KKworI2RlZmluZSBNQVhfU0VSSUFMTlVNQkVSX0xFTgkxMgorI2RlZmluZSBNQVhfQVNTRU1CTFlOVU1CRVJfTEVOCTE0CisKK3N0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IgeworCisJX191MTYJUm9vdERlc2NUYWJsZVsweDEwXTsJCQkvLyBDMDAgUm9vdCBvZiBkZXNjcmlwdG9yIHRhYmxlcyAoanVzdCBhIHBsYWNlaG9sZGVyKQorCV9fdTgJRGVzY3JpcHRvckFyZWFbMHgyRTBdOwkJCS8vIEMyMCBEZXNjcmlwdG9ycyBnbyBoZXJlLCB1cCB0byAyRTBoIChqdXN0IGEgcGxhY2Vob2xkZXIpCisKKwkJCQkJCQkvLyAgICAgU3RhcnQgb2YgdjEtY29tcGF0aWJsZSBzZWN0aW9uCisJX191OAlMZW5ndGg7CQkJCQkvLyBGMDAgRGVzYyBsZW5ndGggZm9yIHdoYXQgZm9sbG93cywgcGVyIFVTQiAoPSBDMGggKQorCV9fdTgJRGVzY1R5cGU7CQkJCS8vIEYwMSBEZXNjIHR5cGUsIHBlciBVU0IgKD1ERVZJQ0UgdHlwZSkKKwlfX3U4CURlc2NWZXI7CQkJCS8vIEYwMiBEZXNjIHZlcnNpb24vZm9ybWF0IChjdXJyZW50bHkgMikKKwlfX3U4CU51bVJvb3REZXNjRW50cmllczsJCQkvLyBGMDMgIyBlbnRyaWVzIGluIFJvb3REZXNjVGFibGUKKworCV9fdTgJUm9tU2l6ZTsJCQkJLy8gRjA0IFNpemUgb2YgUk9NL0UyUFJPTSBpbiBLCisJX191OAlSYW1TaXplOwkJCQkvLyBGMDUgU2l6ZSBvZiBleHRlcm5hbCBSQU0gaW4gSworCV9fdTgJQ3B1UmV2OwkJCQkJLy8gRjA2IENQVSByZXZpc2lvbiBsZXZlbCAoY2hnIG9ubHkgaWYgcy93IHZpc2libGUpCisJX191OAlCb2FyZFJldjsJCQkJLy8gRjA3IFBDQiByZXZpc2lvbiBsZXZlbCAoY2hnIG9ubHkgaWYgcy93IHZpc2libGUpCisKKwlfX3U4CU51bVBvcnRzOwkJCQkvLyBGMDggTnVtYmVyIG9mIHBvcnRzCisJX191OAlEZXNjRGF0ZVszXTsJCQkJLy8gRjA5IE1NL0REL1lZIHdoZW4gZGVzY3JpcHRvciB0ZW1wbGF0ZSB3YXMgY29tcGlsZXIsCisJCQkJCQkJLy8gICAgIHNvIGhvc3QgY2FuIHRyYWNrIGNoYW5nZXMgdG8gVVNCLW9ubHkgZGVzY3JpcHRvcnMuCisKKwlfX3U4CVNlck51bUxlbmd0aDsJCQkJLy8gRjBDIFVTQiBzdHJpbmcgZGVzY3JpcHRvciBsZW4KKwlfX3U4CVNlck51bURlc2NUeXBlOwkJCQkvLyBGMEQgVVNCIGRlc2NyaXB0b3IgdHlwZSAoPVNUUklORyB0eXBlKQorCV9fbGUxNglTZXJpYWxOdW1iZXJbTUFYX1NFUklBTE5VTUJFUl9MRU5dOwkvLyBGMEUgIjAxLTAxLTAwMDEwMCIgVW5pY29kZSBTZXJpYWwgTnVtYmVyCisKKwlfX3U4CUFzc2VtYmx5TnVtTGVuZ3RoOwkJCS8vIEYyNiBVU0Igc3RyaW5nIGRlc2NyaXB0b3IgbGVuCisJX191OAlBc3NlbWJseU51bURlc2NUeXBlOwkJCS8vIEYyNyBVU0IgZGVzY3JpcHRvciB0eXBlICg9U1RSSU5HIHR5cGUpCisJX19sZTE2CUFzc2VtYmx5TnVtYmVyW01BWF9BU1NFTUJMWU5VTUJFUl9MRU5dOwkvLyBGMjggIjM1MC0xMDAwLTAxLUEgIiBhc3NlbWJseSBudW1iZXIKKworCV9fdTgJT2VtQXNzeU51bUxlbmd0aDsJCQkvLyBGNDQgVVNCIHN0cmluZyBkZXNjcmlwdG9yIGxlbgorCV9fdTgJT2VtQXNzeU51bURlc2NUeXBlOwkJCS8vIEY0NSBVU0IgZGVzY3JpcHRvciB0eXBlICg9U1RSSU5HIHR5cGUpCisJX19sZTE2CU9lbUFzc3lOdW1iZXJbTUFYX0FTU0VNQkxZTlVNQkVSX0xFTl07CS8vIEY0NiAieHh4eHh4eHh4eHh4eHgiIE9FTSBhc3NlbWJseSBudW1iZXIKKworCV9fdTgJTWFudWZEYXRlTGVuZ3RoOwkJCS8vIEY2MiBVU0Igc3RyaW5nIGRlc2NyaXB0b3IgbGVuCisJX191OAlNYW51ZkRhdGVEZXNjVHlwZTsJCQkvLyBGNjMgVVNCIGRlc2NyaXB0b3IgdHlwZSAoPVNUUklORyB0eXBlKQorCV9fbGUxNglNYW51ZkRhdGVbNl07CQkJCS8vIEY2NCAiTU1ERFlZIiBtYW51ZmFjdHVyaW5nIGRhdGUKKworCV9fdTgJUmVzZXJ2ZWQzWzB4NERdOwkJCS8vIEY3MCAtLSB1bnVzZWQsIHNldCB0byAwIC0tCisKKwlfX3U4CVVhcnRUeXBlOwkJCQkvLyBGQkQgVWFydCBUeXBlCisJX191OAlJb25QaWQ7CQkJCQkvLyBGQkUgUHJvZHVjdCBJRCwgPT0gTFNCIG9mIFVTQiBEZXZEZXNjLlBJRAorCQkJCQkJCS8vICAgICAgKE5vdGU6IEVkZ2Vwb3J0LzRzIGJlZm9yZSAxMS85OCB3aWxsIGhhdmUKKwkJCQkJCQkvLyAgICAgICAwMCBoZXJlIGluc3RlYWQgb2YgMDEpCisJX191OAlJb25Db25maWc7CQkJCS8vIEZCRiBDb25maWcgYnl0ZSBmb3IgSU9OIG1hbnVmYWN0dXJpbmcgdXNlCisJCQkJCQkJLy8gRkJGIGVuZCBvZiBzdHJ1Y3R1cmUsIHRvdGFsIGxlbiA9IDNDMGgKKworfTsKKworCisjZGVmaW5lIE1BTlVGX0RFU0NfVkVSXzEJMQkvLyBPcmlnaW5hbCBkZWZpbml0aW9uIG9mIE1BTlVGX0RFU0MKKyNkZWZpbmUgTUFOVUZfREVTQ19WRVJfMgkyCS8vIFZlciAyLCBzdGFydHMgYXQgeEMwMGggbGVuIDNDMGgKKworCisvLyBVYXJ0IFR5cGVzCisvLyBOb3RlOiBTaW5jZSB0aGlzIGZpZWxkIHdhcyBhZGRlZCBvbmx5IHJlY2VudGx5LCBhbGwgRWRnZXBvcnQvNCB1bml0cworLy8gc2hpcHBlZCBiZWZvcmUgMTEvOTggd2lsbCBoYXZlIDAwIGluIHRoaXMgZmllbGQuIFRoZXJlZm9yZSwKKy8vIGJvdGggMDAgYW5kIDAxIHZhbHVlcyBtZWFuICc2NTQuCisjZGVmaW5lIE1BTlVGX1VBUlRfRVhBUl82NTRfRUFSTFkJMAkvLyBFeGFyIDE2QzY1NCBpbiBFZGdlcG9ydC80cyBiZWZvcmUgMTEvOTgKKyNkZWZpbmUgTUFOVUZfVUFSVF9FWEFSXzY1NAkJMQkvLyBFeGFyIDE2QzY1NAorI2RlZmluZSBNQU5VRl9VQVJUX0VYQVJfMjg1MgkJMgkvLyBFeGFyIDE2QzI4NTIKKworLy8KKy8vIE5vdGU6IFRoZSBDcHVSZXYgYW5kIEJvYXJkUmV2IHZhbHVlcyBkbyBub3QgY29uZm9ybSB0byBtYW51ZmFjdHVyaW5nCisvLyByZXZpc2lvbnM7IHRoZXkgYXJlIHRvIGJlIGluY3JlbWVudGVkIG9ubHkgd2hlbiB0aGUgQ1BVIG9yIGhhcmR3YXJlCisvLyBjaGFuZ2VzIGluIGEgc29mdHdhcmUtdmlzaWJsZSB3YXksIHN1Y2ggdGhhdCB0aGUgOTMwIHNvZnR3YXJlIG9yCisvLyB0aGUgaG9zdCBkcml2ZXIgbmVlZHMgdG8gaGFuZGxlIHRoZSBoYXJkd2FyZSBkaWZmZXJlbnRseS4KKy8vCisKKy8vIFZhbHVlcyBvZiBib3R0b20gNSBiaXRzIG9mIENwdVJldiAmIEJvYXJkUmV2IGZvcgorLy8gSW1wbGVtZW50YXRpb24gMCAoaWUsIDkzMC1iYXNlZCkKKyNkZWZpbmUJTUFOVUZfQ1BVX1JFVl9BRDQJCTEJLy8gOTMwIEFENCwgd2l0aCBFUDEgUnggYnVnIChuZWVkcyBSWFNQTSkKKyNkZWZpbmUJTUFOVUZfQ1BVX1JFVl9BRDUJCTIJLy8gOTMwIEFENSwgd2l0aCBhYm92ZSBidWcgKHN1cHBvc2VkbHkpIGZpeGVkCisjZGVmaW5lCU1BTlVGX0NQVV84MDI1MQkJCTB4MjAJLy8gSW50ZWwgODAyNTEKKworCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9BCQkxCS8vIE9yaWdpbmFsIHZlcnNpb24sID09IE1hbnVmIFJldiBBCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9CCQkyCS8vIE1hbnVmIFJldiBCLCB3YWtldXAgaW50ZXJydXB0IHdvcmtzCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9DCQkzCS8vIE1hbnVmIFJldiBDLCAyLzQgcG9ydHMsIHJzMjMyL3JzNDIyCisjZGVmaW5lIE1BTlVGX0JPQVJEX1JFVl9HRU5FUkFUSU9OXzIJMHgyMAkvLyBTZWNvbmQgZ2VuZXJhaXRvbiBlZGdlcG9ydAorCisKKy8vIFZhbHVlcyBvZiBib3R0b20gNSBiaXRzIG9mIENwdVJldiAmIEJvYXJkUmV2IGZvcgorLy8gSW1wbGVtZW50YXRpb24gMSAoaWUsIDI1MStOZXRjaGlwLWJhc2VkKQorI2RlZmluZQlNQU5VRl9DUFVfUkVWXzEJCQkxCS8vIEMyNTFUQiBSZXYgMSAoTmVlZCBhY3R1YWwgSW50ZWwgcmV2IGhlcmUpCisKKyNkZWZpbmUgTUFOVUZfQk9BUkRfUkVWX0EJCTEJLy8gRmlyc3QgcmV2IG9mIDI1MStOZXRjaGlwIGRlc2lnbgorCisjZGVmaW5lCU1BTlVGX1NFUk5VTV9MRU5HVEgJCXNpemVvZigoKHN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IgKikwKS0+U2VyaWFsTnVtYmVyKQorI2RlZmluZQlNQU5VRl9BU1NZTlVNX0xFTkdUSAkJc2l6ZW9mKCgoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciAqKTApLT5Bc3NlbWJseU51bWJlcikKKyNkZWZpbmUJTUFOVUZfT0VNQVNTWU5VTV9MRU5HVEgJCXNpemVvZigoKHN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IgKikwKS0+T2VtQXNzeU51bWJlcikKKyNkZWZpbmUJTUFOVUZfTUFOVUZEQVRFX0xFTkdUSAkJc2l6ZW9mKCgoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciAqKTApLT5NYW51ZkRhdGUpCisKKyNkZWZpbmUJTUFOVUZfSU9OX0NPTkZJR19ESUFHX05PX0xPT1AJMHgyMAkvLyBBcyBiZWxvdyBidXQgbm8gZXh0IGxvb3BiYWNrIHRlc3QKKyNkZWZpbmUJTUFOVUZfSU9OX0NPTkZJR19ESUFHCQkweDQwCS8vIDkzMCBiYXNlZCBkZXZpY2U6IDE9UnVuIGgvdyBkaWFncywgMD1ub3JtCisJCQkJCQkvLyBUSVVNUCBEZXZpY2UgICAgOiAxPUlPTlNFUklBTCBuZWVkcyB0byBydW4gRmluYWwgVGVzdAorI2RlZmluZQlNQU5VRl9JT05fQ09ORklHX01BU1RFUgkJMHg4MAkvLyA5MzAgYmFzZWQgZGV2aWNlOiAgMT1NYXN0ZXIgbW9kZSwgMD1Ob3JtYWwKKwkJCQkJCS8vIFRJVU1QIERldmljZSAgICA6ICAxPUZpcnN0IGRldmljZSBvbiBhIG11bHRpIFRJVU1QIERldmljZQorCisvLworLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHBhcmFtZXRlcnMgZm9yIHRoZSBib290IGNvZGUsIGFuZAorLy8gaXMgcHJvZ3JhbW1lZCBhbG9uZyB3aXRoIG5ldyBib290IGNvZGUuIFRoZXNlIGFyZSB2YWx1ZXMKKy8vIHdoaWNoIGFyZSBzcGVjaWZpYyB0byBhIGdpdmVuIGJ1aWxkIG9mIHRoZSBib290IGNvZGUuIEl0CisvLyBpcyBleGFjdGx5IDY0IGJ5dGVzIGxvbmcgYW5kIGlzIGZpeGVkIGF0IGFkZHJlc3MgRkY6eEZDMAorLy8gLSBGRjp4RkZGLiBOb3RlIHRoYXQgdGhlIDkzMC1tYW5kYXRlZCBVQ09ORklHIGJ5dGVzIGFyZQorLy8gaW5jbHVkZWQgaW4gdGhpcyBzdHJ1Y3R1cmUuCisvLworc3RydWN0IGVkZ2VfYm9vdF9kZXNjcmlwdG9yIHsKKwlfX3U4CQlMZW5ndGg7CQkJLy8gQzAgRGVzYyBsZW5ndGgsIHBlciBVU0IgKD0gNDBoKQorCV9fdTgJCURlc2NUeXBlOwkJLy8gQzEgRGVzYyB0eXBlLCBwZXIgVVNCICg9IERFVklDRSB0eXBlKQorCV9fdTgJCURlc2NWZXI7CQkvLyBDMiBEZXNjIHZlcnNpb24vZm9ybWF0CisJX191OAkJUmVzZXJ2ZWQxOwkJLy8gQzMgLS0gdW51c2VkLCBzZXQgdG8gMCAtLQorCisJX19sZTE2CQlCb290Q29kZUxlbmd0aDsJCS8vIEM0IEJvb3QgY29kZSBnb2VzIGZyb20gRkY6MDAwMCB0byBGRjoobGVuLTEpCisJCQkJCQkvLwkgIChMRSBmb3JtYXQpCisKKwlfX3U4CQlNYWpvclZlcnNpb247CQkvLyBDNiBGaXJtd2FyZSB2ZXJzaW9uOiB4eC4KKwlfX3U4CQlNaW5vclZlcnNpb247CQkvLyBDNwkJCXl5LgorCV9fbGUxNgkJQnVpbGROdW1iZXI7CQkvLyBDOAkJCXp6enogKExFIGZvcm1hdCkKKwkKKwlfX3UxNgkJRW51bVJvb3REZXNjVGFibGU7CS8vIENBIFJvb3Qgb2YgUk9NLWJhc2VkIGRlc2NyaXB0b3IgdGFibGUKKwlfX3U4CQlOdW1EZXNjVHlwZXM7CQkvLyBDQyBOdW1iZXIgb2Ygc3VwcG9ydGVkIGRlc2NyaXB0b3IgdHlwZXMKKworCV9fdTgJCVJlc2VydmVkNDsJCS8vIENEIEZpeCBDb21waWxlciBQYWNraW5nCisKKwlfX2xlMTYJCUNhcGFiaWxpdGllczsJCS8vIENFLUNGIENhcGFiaWxpdGllcyBmbGFncyAoTEUgZm9ybWF0KQorCV9fdTgJCVJlc2VydmVkMlsweDI4XTsJLy8gRDAgLS0gdW51c2VkLCBzZXQgdG8gMCAtLQorCV9fdTgJCVVDb25maWcwOwkJLy8gRjggOTMwLWRlZmluZWQgQ1BVIGNvbmZpZ3VyYXRpb24gYnl0ZSAwCisJX191OAkJVUNvbmZpZzE7CQkvLyBGOSA5MzAtZGVmaW5lZCBDUFUgY29uZmlndXJhdGlvbiBieXRlIDEKKwlfX3U4CQlSZXNlcnZlZDNbNl07CQkvLyBGQSAtLSB1bnVzZWQsIHNldCB0byAwIC0tCisJCQkJCQkvLyBGRiBlbmQgb2Ygc3RydWN0dXJlLCB0b3RhbCBsZW4gPSA4MAorfTsKKworCisjZGVmaW5lIEJPT1RfREVTQ19WRVJfMQkJMQkvLyBPcmlnaW5hbCBkZWZpbml0aW9uIG9mIEJPT1RfUEFSQU1TCisjZGVmaW5lIEJPT1RfREVTQ19WRVJfMgkJMgkvLyAybmQgZGVmaW5pdGlvbiwgZGVzY3JpcHRvcnMgbm90IGluY2x1ZGVkIGluIGJvb3QKKworCisJLy8gQ2FwYWJpbGl0aWVzIGZsYWdzCisKKyNkZWZpbmUJQk9PVF9DQVBfUkVTRVRfQ01ECTB4MDAwMQkvLyBJZiBzZXQsIGJvb3QgY29ycmVjdGx5IHN1cHBvcnRzIElPTl9SRVNFVF9ERVZJQ0UKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgIFQgSSAgIFUgTSBQICAgRCBFIEYgSSBOIEkgVCBJIE8gTiBTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIENoaXAgZGVmaW5pdGlvbnMgaW4gSTJDCisjZGVmaW5lIFVNUDUxNTIJCQkweDUyCisjZGVmaW5lIFVNUDM0MTAJCQkweDEwCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCVRJIEkyQyBGb3JtYXQgRGVmaW5pdGlvbnMKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfSU5GT19CQVNJQwkweDAxCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkFTSUMJMHgwMgorI2RlZmluZSBJMkNfREVTQ19UWVBFX0RFVklDRQkJMHgwMworI2RlZmluZSBJMkNfREVTQ19UWVBFX0NPTkZJRwkJMHgwNAorI2RlZmluZSBJMkNfREVTQ19UWVBFX1NUUklORwkJMHgwNQorI2RlZmluZSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0FVVE8JMHgwNwkvLyBmb3IgMzQxMCBkb3dubG9hZAorI2RlZmluZSBJMkNfREVTQ19UWVBFX0NPTkZJR19LTFVER0UJMHgxNAkvLyBmb3IgMzQxMAorI2RlZmluZSBJMkNfREVTQ19UWVBFX1dBVENIUE9SVF9WRVJTSU9OCTB4MTUJLy8gZmlybXdhcmUgdmVyc2lvbiBudW1iZXIgZm9yIHdhdGNocG9ydAorI2RlZmluZSBJMkNfREVTQ19UWVBFX1dBVENIUE9SVF9DQUxJQlJBVElPTl9EQVRBIDB4MTYJLy8gV2F0Y2hwb3J0IENhbGlicmF0aW9uIERhdGEKKworI2RlZmluZSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LCTB4ZjIKKworLy8gU3BlY2lhbCBzZWN0aW9uIGRlZmluZWQgYnkgSU9OCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfSU9OCQkwCS8vIE5vdCBkZWZpbmVkIGJ5IFRJCisKKworc3RydWN0IHRpX2kyY19kZXNjCit7CisJX191OAlUeXBlOwkJCS8vIFR5cGUgb2YgZGVzY3JpcHRvcgorCV9fdTE2CVNpemU7CQkJLy8gU2l6ZSBvZiBkYXRhIG9ubHkgbm90IGluY2x1ZGluZyBoZWFkZXIKKwlfX3U4CUNoZWNrU3VtOwkJLy8gQ2hlY2tzdW0gKDggYml0IHN1bSBvZiBkYXRhIG9ubHkpCisJX191OAlEYXRhWzBdOwkJLy8gRGF0YSBzdGFydHMgaGVyZQorfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvLyBmb3IgNTE1MiBkZXZpY2VzIG9ubHkgKHR5cGUgMiByZWNvcmQpCisvLyBmb3IgMzQxMCB0aGUgdmVyc2lvbiBpcyBzdG9yZWQgaW4gdGhlIFdBVENIUE9SVF9GSVJNV0FSRV9WRVJTSU9OIGRlc2NyaXB0b3IKK3N0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjCit7CisJX191OAlWZXJfTWFqb3I7CQkvLyBGaXJtd2FyZSBNYWpvciB2ZXJzaW9uIG51bWJlcgorCV9fdTgJVmVyX01pbm9yOwkJLy8gRmlybXdhcmUgTWlub3IgdmVyc2lvbiBudW1iZXIKKwlfX3U4CURhdGFbMF07CQkvLyBEb3dubG9hZCBzdGFydHMgaGVyZQorfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCB3YXRjaHBvcnRfZmlybXdhcmVfdmVyc2lvbgoreworLy8gQWRkZWQgMiBieXRlcyBmb3IgdmVyc2lvbiBudW1iZXIKKwlfX3U4CVZlcnNpb25fTWFqb3I7CQkvLyAgRG93bmxvYWQgVmVyc2lvbiAoZm9yIFdhdGNocG9ydCkKKwlfX3U4CVZlcnNpb25fTWlub3I7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLy8gU3RydWN0dXJlIG9mIGhlYWRlciBvZiBkb3dubG9hZCBpbWFnZSBpbiBmd19kb3duLmgKK3N0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyCit7CisJX19sZTE2CUxlbmd0aDsKKwlfX3U4CUNoZWNrU3VtOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdGlfYmFzaWNfZGVzY3JpcHRvcgoreworCV9fdTgJUG93ZXI7CQkvLyBTZWxmIHBvd2VyZWQKKwkJCQkvLyBiaXQgNzogMSAtIHBvd2VyIHN3aXRjaGluZyBzdXBwb3J0ZWQKKwkJCQkvLyAgICAgICAgMCAtIHBvd2VyIHN3aXRjaGluZyBub3Qgc3VwcG9ydGVkCisJCQkJLy8KKwkJCQkvLyBiaXQgMDogMSAtIHNlbGYgcG93ZXJlZAorCQkJCS8vICAgICAgICAwIC0gYnVzIHBvd2VyZWQKKwkJCQkvLworCQkJCS8vCisJX191MTYJSHViVmlkOwkJLy8gVklEIEhVQgorCV9fdTE2CUh1YlBpZDsJCS8vIFBJRCBIVUIKKwlfX3UxNglEZXZQaWQ7CQkvLyBQSUQgRWRnZXBvcnQKKwlfX3U4CUh1YlRpbWU7CS8vIFRpbWUgZm9yIHBvd2VyIG9uIHRvIHBvd2VyIGdvb2QKKwlfX3U4CUh1YkN1cnJlbnQ7CS8vIEhVQiBDdXJyZW50ID0gMTAwbWEKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLy8gQ1BVIC8gQm9hcmQgUmV2IERlZmluaXRpb25zCisjZGVmaW5lIFRJX0NQVV9SRVZfNTA1MgkJCTIJLy8gNTA1MiBiYXNlZCBlZGdlcG9ydHMKKyNkZWZpbmUgVElfQ1BVX1JFVl8zNDEwCQkJMwkvLyAzNDEwIGJhc2VkIGVkZ2Vwb3J0cworCisjZGVmaW5lIFRJX0JPQVJEX1JFVl9USV9FUAkJMAkvLyBCYXNpYyB0aSBiYXNlZCBlZGdlcG9ydAorI2RlZmluZSBUSV9CT0FSRF9SRVZfQ09NUEFDVAkJMQkvLyBDb21wYWN0IGJvYXJkCisjZGVmaW5lIFRJX0JPQVJEX1JFVl9XQVRDSFBPUlQJCTIJLy8gV2F0Y2hwb3J0CisKKworI2RlZmluZSBUSV9HRVRfQ1BVX1JFVklTSU9OKHgpCQkoX191OCkoKCgoeCk+PjQpJjB4MGYpKQorI2RlZmluZSBUSV9HRVRfQk9BUkRfUkVWSVNJT04oeCkJKF9fdTgpKCgoeCkmMHgwZikpCisKKyNkZWZpbmUgVElfSTJDX1NJWkVfTUFTSwkJMHgxZiAgLy8gNSBiaXRzCisjZGVmaW5lIFRJX0dFVF9JMkNfU0laRSh4KQkJKCgoKHgpICYgVElfSTJDX1NJWkVfTUFTSykrMSkqMjU2KQorCisjZGVmaW5lIFRJX01BWF9JMkNfU0laRQkJCSggMTYgKiAxMDI0ICkKKworI2RlZmluZSBUSV9NQU5VRl9WRVJTSU9OXzAJCTAJCisKKy8vIElvbkNvbmlnMiBmbGFncworI2RlZmluZSBUSV9DT05GSUcyX1JTMjMyCQkweDAxCisjZGVmaW5lIFRJX0NPTkZJRzJfUlM0MjIJCTB4MDIKKyNkZWZpbmUgVElfQ09ORklHMl9SUzQ4NQkJMHgwNAorI2RlZmluZSBUSV9DT05GSUcyX1NXSVRDSEFCTEUJCTB4MDgKKworI2RlZmluZSBUSV9DT05GSUcyX1dBVENIUE9SVAkJMHgxMAorCisKK3N0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IKK3sKKwlfX3U4IElvbkNvbmZpZzsJCS8vICBDb25maWcgYnl0ZSBmb3IgSU9OIG1hbnVmYWN0dXJpbmcgdXNlCisJX191OCBJb25Db25maWcyOwkvLyAgRXhwYW5zaW9uCisJX191OCBWZXJzaW9uOwkJLy8gIFZlcnNpb24KKwlfX3U4IENwdVJldl9Cb2FyZFJldjsJLy8gIENQVSByZXZpc2lvbiBsZXZlbCAoMHhGMCkgYW5kIEJvYXJkIFJldiBMZXZlbCAoMHgwRikKKwlfX3U4IE51bVBvcnRzOwkJLy8gIE51bWJlciBvZiBwb3J0cwlmb3IgdGhpcyBVTVAKKwlfX3U4IE51bVZpcnR1YWxQb3J0czsJLy8gIE51bWJlciBvZiBWaXJ0dWFsIHBvcnRzCisJX191OCBIdWJDb25maWcxOwkvLyAgVXNlZCB0byBjb25maWd1cmUgdGhlIEh1YgorCV9fdTggSHViQ29uZmlnMjsJLy8gIFVzZWQgdG8gY29uZmlndXJlIHRoZSBIdWIKKwlfX3U4IFRvdGFsUG9ydHM7CS8vICBUb3RhbCBOdW1iZXIgb2YgQ29tIFBvcnRzIGZvciB0aGUgZW50aXJlIGRldmljZSAoQWxsIFVNUHMpCisJX191OCBSZXNlcnZlZDsJCS8vICBSZXNlcnZlZAorfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNlbmRpZgkJLy8gaWYgIWRlZmluZWQoX1VTQlZFTkRfSCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDY5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC0wLDAgKzEsOTczIEBACisvKgorICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMSAtIDIwMDIKKyAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICgxMi8xMi8yMDAyKSBnYW5lc2gKKyAqIAlBZGRlZCBzdXBwb3J0IGZvciBwcmFjdGljYWxseSBhbGwgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgQWN0aXZlU3luYworICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCisgKgorICogKDI2LzExLzIwMDIpIGdhbmVzaAorICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgorICogCVVzZSBtb2Rwcm9iZSBpcGFxIHZlbmRvcj0weGZvbyBwcm9kdWN0PTB4YmFyCisgKgorICogKDI2LzcvMjAwMikgZ2FuZXNoCisgKiAJRml4ZWQgdXAgYnJva2VuIGVycm9yIGhhbmRsaW5nIGluIGlwYXFfb3Blbi4gUmV0cnkgdGhlICJraWNrc3RhcnQiCisgKiAJcGFja2V0IG11Y2ggaGFyZGVyIC0gdGhpcyBkcmFzdGljYWxseSByZWR1Y2VzIGNvbm5lY3Rpb24gZmFpbHVyZXMuCisgKgorICogKDMwLzQvMjAwMikgZ2FuZXNoCisgKiAJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIENhc2lvIEVNNTAwLiBDb21wbGV0ZWx5IHVudGVzdGVkLiBUaGFua3MKKyAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KKyAqCisgKiAoMTkvMy8yMDAyKSBnYW5lc2gKKyAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CisgKglpbiAyLjUueC4KKyAqCisgKiAoOC8zLzIwMDIpIGdhbmVzaAorICogCVRoZSBpcGFxIHNvbWV0aW1lcyBlbWl0cyBhICdcMCcgYmVmb3JlIHRoZSBDTElFTlQgc3RyaW5nLiBBdCB0aGlzCisgKiAJcG9pbnQgb2YgdGltZSwgdGhlIHBwcCBsZGlzYyBpcyBub3QgeWV0IGF0dGFjaGVkIHRvIHRoZSB0dHksIHNvCisgKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgorICogCXRoaXMgY2F1c2VzIGEgcGFuaWMgYmVjYXVzZSBlY2hvX2NoYXIoKSB0cmllcyB0byBzbGVlcCBpbiBpbnRlcnJ1cHQKKyAqIAljb250ZXh0LgorICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAorICogCWVjaG9pbmcgaXMgc3VwcHJlc3NlZC4gVGhhbmtzIHRvIEx5bGUgTGluZGhvbG0gZm9yIGEgZGV0YWlsZWQgYnVnCisgKiAJcmVwb3J0LgorICoKKyAqICgyNS8yLzIwMDIpIGdhbmVzaAorICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBIUCBKb3JuYWRhIDU0OCBhbmQgNTY4LiBDb21wbGV0ZWx5IHVudGVzdGVkLgorICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJpcGFxLmgiCisKKyNkZWZpbmUgS1BfUkVUUklFUwkxMDAKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC41IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUG9ja2V0UEMgUERBIGRyaXZlciIKKworc3RhdGljIF9fdTE2IHByb2R1Y3QsIHZlbmRvcjsKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGlwYXEgKi8KK3N0YXRpYyBpbnQgIGlwYXFfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgaXBhcV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgaXBhcV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGlwYXFfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICAgIGludCBjb3VudCk7CitzdGF0aWMgaW50IGlwYXFfd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICBpbnQgY291bnQpOworc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBpcGFxX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgaXBhcV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBpcGFxX2Rlc3Ryb3lfbGlzdHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlwYXFfaWRfdGFibGUgW10gPSB7CisJLyogVGhlIGZpcnN0IGVudHJ5IGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnNtb2Qtc3BlY2lmaWVkIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAwMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA2MDEpIH0sIC8qIEFza2V5IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY1KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjYpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NiAqLworCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NykgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY3ICovCisJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAxKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAxICovCisJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAyKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAzKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAzMikgfSwgLyogQ29tcGFxIGlQQVEgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDEpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAzKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDQpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA2KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDcpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOCkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA5KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEwMTYpIH0sIC8qIEhQIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjExICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjEyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQyICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUwICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUxICovCisJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUyICovCisJeyBVU0JfREVWSUNFKDB4MDk0QiwgMHgwMDAxKSB9LCAvKiBMaW5rdXAgU3lzdGVtcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDMzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDdCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0UpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RUEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTYxLCAweDAwMTApIH0sIC8qIFBvcnRhdGVjIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NUUwNCwgMHhDRTAwKSB9LCAvKiBTQUdFTSBXaXJlbGVzcyBBc3Npc3RhbnQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwMTA0LCAweDAwQkUpIH0sIC8qIFNvY2tldCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwMCkgfSwgLyogVE9TSElCQSBVU0IgU3luYyAwNzAwICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA1KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzEwICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA3KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzMwIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOCkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTM1MKBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDYpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDkpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NTAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBBKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNDAwIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTgwMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDAwQ0UpIH0sIC8qIEhUQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0IpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0UpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0OSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0QykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0RikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTApIH0sIC8qIEhUQyBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTczKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDYpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENykgfSwgLyogTkVDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI0KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0QTQsIDB4MDAxNCkgfSwgLyogSGl0YWNoaSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCRjgsIDB4MTAwMSkgfSwgLyogRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGOTgsIDB4MDIwMSkgfSwgLyogQ3liZXJiYW5rIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUxKSB9LCAvKiBBY2VyIG4xMCBIYW5kaGVsZCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMykgfSwgLyogQWNlciBuMzAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTIpIH0sIC8qIEFjZXIgbjIwIEhhbmRoZWxkIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMxKSB9LCAvKiBjMTAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMyKSB9LCAvKiBjMjAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjBGKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAxKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEM4RSwgMHg2MDAwKSB9LCAvKiBDZXNzY29tIEx1eGlhbiBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDEpIH0sIC8qIFVTQiBTeW5jIDAzMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDIpIH0sIC8qIFVTQiBTeW5jIDAzMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDMpIH0sIC8qIFVTQiBTeW5jIDAzMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNTAwKSB9LCAvKiBFLVRFTiBQNVhYIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDYwMCkgfSwgLyogRS1URU4gUDZYWCBQb2NrZXQgUEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMENFKSB9LCAvKiBFLVRFTiBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDU4KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDc5KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDY3RSwgMHgxMDAxKSB9LCAvKiBJbnRlcm1lYyBNb2JpbGUgQ29tcHV0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGYxLCAweDMwMTEpIH0sIC8qIEpWQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RjEsIDB4MzAxMikgfSwgLyogSlZDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzcwOCwgMHgyMENFKSB9LCAvKiBMZWdlbmQgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIxQ0UpIH0sIC8qIExlbm92byBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0M0UsIDB4OUMwMSkgfSwgLyogTEdFIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDREQSwgMHgyNTAwKSB9LCAvKiBQYW5hc29uaWMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEUzQSkgfSwgLyogR2VuZXJpYyBQUEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEYxQykgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTMyNikgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MzMyNikgfSwgLyogTUVESU9OIFdpbm9kd3MgTW9ibGUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDAzMjYpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIDMzOCAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMTFDKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBQUEMgU3Ryb25nQVJNICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNDNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDcxQykgfSwgLyogTWlUQUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MjMyNikgfSwgLyogVm9iaXMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDE5MUMpIH0sIC8qIFlBS1VNTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDIxMCkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTEpIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDAwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDQxMCkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQ0FELCAweDkwMDEpIH0sIC8qIE1vdG9yb2xhIFBvd2VyUGFkIFBvY2tldCBQQ6BEZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQzQ0LCAweDAzQTIpIH0sIC8qIE1vdG9yb2xhIGlERU4gU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjEzKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE5KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MUIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMSkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMikgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMykgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwNCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYyRSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMwKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQ1MDUsIDB4MDAxMCkgfSwgLyogU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAxKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAxICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAyKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAzKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA0KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA0ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA1KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA1ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA2KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA2ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA3KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA3ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA4KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA4ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA5KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA5ICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDBBKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDBBICovCisJeyBVU0JfREVWSUNFKDB4MTE4MiwgMHgxMzg4KSB9LCAvKiBWRVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDBFRDkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM1ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI3KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNiAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkIpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM4ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJFKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIxKSB9LCAvKiBWaWV3U29uaWMgQ29tbXVuaWNhdG9yIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMikgfSwgLyogVmlld1NvbmljIFNtYXJ0cGhvbmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjMpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgVjMwICovCisJeyBVU0JfREVWSUNFKDB4MDUzNiwgMHgwMUEwKSB9LCAvKiBISFAgUERUICovCisJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHgwMDUyKSB9LCAvKiBUcmltYmxlIEdlb0V4cGxvcmVyICovCisJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHg0MDAwKSB9LCAvKiBURFMgRGF0YSBDb2xsZWN0b3IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDIpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDMpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDQwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMUQ5LCAweDEwMDMpIH0sIC8qIFJ1Z2dlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMikgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjA0KSB9LCAvKiBNb3Rvcm9sYSBNUHgyMDAgU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIxNCkgfSwgLyogTW90b3JvbGEgTVBjIEdTTSAqLworCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIyNCkgfSwgLyogTW90b3JvbGEgTVB4MjIwIFNtYXJ0cGhvbmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMzQpIH0sIC8qIE1vdG9yb2xhIE1QYyBDRE1BICovCisJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjQ0KSB9LCAvKiBNb3Rvcm9sYSBNUHgxMDAgU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDEyMzEsIDB4Q0UwMSkgfSwgLyogVVNCIFN5bmMgMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDIpIH0sIC8qIFVTQiBTeW5jIDAzICovCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpcGFxX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwYXFfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJpcGFxIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlwYXFfaWRfdGFibGUsCit9OworCisKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ29tcGFxIGlQQVEgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcGFxX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJQb2NrZXRQQyBQREEiLAorCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlpcGFxX29wZW4sCisJLmNsb3NlID0JCWlwYXFfY2xvc2UsCisJLmF0dGFjaCA9CQlpcGFxX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWlwYXFfc2h1dGRvd24sCisJLndyaXRlID0JCWlwYXFfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJaXBhcV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlpcGFxX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3BpbmxvY2tfdAl3cml0ZV9saXN0X2xvY2s7CitzdGF0aWMgaW50CQlieXRlc19pbjsKK3N0YXRpYyBpbnQJCWJ5dGVzX291dDsKKworc3RhdGljIGludCBpcGFxX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2OworCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0OworCWludAkJCWksIHJlc3VsdCA9IDA7CisJaW50CQkJcmV0cmllcyA9IEtQX1JFVFJJRVM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWJ5dGVzX2luID0gMDsKKwlieXRlc19vdXQgPSAwOworCXByaXYgPSAoc3RydWN0IGlwYXFfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKKwlwcml2LT5hY3RpdmUgPSAwOworCXByaXYtPnF1ZXVlX2xlbiA9IDA7CisJcHJpdi0+ZnJlZV9sZW4gPSAwOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBVUkJEQVRBX1FVRVVFX01BWCAvIFBBQ0tFVF9TSVpFOyBpKyspIHsKKwkJcGt0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwa3QgPT0gTlVMTCkgeworCQkJZ290byBlbm9tZW07CisJCX0KKwkJcGt0LT5kYXRhID0ga21hbGxvYyhQQUNLRVRfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwa3QtPmRhdGEgPT0gTlVMTCkgeworCQkJa2ZyZWUocGt0KTsKKwkJCWdvdG8gZW5vbWVtOworCQl9CisJCXBrdC0+bGVuID0gMDsKKwkJcGt0LT53cml0dGVuID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBrdC0+bGlzdCk7CisJCWxpc3RfYWRkKCZwa3QtPmxpc3QsICZwcml2LT5mcmVlbGlzdCk7CisJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOworCX0KKworCS8qCisJICogRm9yY2UgbG93IGxhdGVuY3kgb24uIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBwdXNoIGRhdGEgdG8gdGhlIGxpbmUKKwkgKiBkaXNjaXBsaW5lIGluc3RlYWQgb2YgcXVldWVpbmcuCisJICovCisKKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKwlwb3J0LT50dHktPnJhdyA9IDE7CisJcG9ydC0+dHR5LT5yZWFsX3JhdyA9IDE7CisKKwkvKgorCSAqIExvc2UgdGhlIHNtYWxsIGJ1ZmZlcnMgdXNic2VyaWFsIHByb3ZpZGVzLiBNYWtlIGxhcmdlciBvbmVzLgorCSAqLworCisJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7CisJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBvcnQtPmJ1bGtfaW5fYnVmZmVyID09IE5VTEwpIHsKKwkJZ290byBlbm9tZW07CisJfQorCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAocG9ydC0+YnVsa19vdXRfYnVmZmVyID09IE5VTEwpIHsKKwkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCQlnb3RvIGVub21lbTsKKwl9CisJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfaW5fYnVmZmVyOworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19vdXRfYnVmZmVyOworCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVJCREFUQV9TSVpFOworCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7CisJCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogU2VuZCBvdXQgY29udHJvbCBtZXNzYWdlIG9ic2VydmVkIGluIHdpbjk4IHNuaWZmcy4gTm90IHN1cmUgd2hhdAorCSAqIGl0IGRvZXMsIGJ1dCBmcm9tIGVtcGlyaWNhbCBvYnNlcnZhdGlvbnMsIGl0IHNlZW1zIHRoYXQgdGhlIGRldmljZQorCSAqIHdpbGwgc3RhcnQgdGhlIGNoYXQgc2VxdWVuY2Ugb25jZSBvbmUgb2YgdGhlc2UgbWVzc2FnZXMgZ2V0cworCSAqIHRocm91Z2guIFNpbmNlIHRoaXMgaGFzIGEgcmVhc29uYWJseSBoaWdoIGZhaWx1cmUgcmF0ZSwgd2UgcmV0cnkKKwkgKiBzZXZlcmFsIHRpbWVzLgorCSAqLworCisJd2hpbGUgKHJldHJpZXMtLSkgeworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgMHgyMiwgMHgyMSwKKwkJCQkweDEsIDAsIE5VTEwsIDAsIDEwMCk7CisJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJZ290byBlcnJvcjsKKworZW5vbWVtOgorCXJlc3VsdCA9IC1FTk9NRU07CisJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworZXJyb3I6CisJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOworCWtmcmVlKHByaXYpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJLyoKKwkgKiBzaHV0IGRvd24gYnVsayByZWFkIGFuZCB3cml0ZQorCSAqLworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOworCWtmcmVlKHByaXYpOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKKworCS8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gc2VlIHNvbWUgc3RhdGlzdGljcyBpbiB5b3VyIHN5c2xvZyAqLworCS8qIGluZm8gKCJCeXRlcyBJbiA9ICVkICBCeXRlcyBPdXQgPSAlZCIsIGJ5dGVzX2luLCBieXRlc19vdXQpOyAqLworfQorCitzdGF0aWMgdm9pZCBpcGFxX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCXVuc2lnbmVkIGNoYXIJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50CQkJaSwgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgaW50IGNvdW50KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKmN1cnJlbnRfcG9zaXRpb24gPSBidWY7CisJaW50CQkJYnl0ZXNfc2VudCA9IDA7CisJaW50CQkJdHJhbnNmZXJfc2l6ZTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQl0cmFuc2Zlcl9zaXplID0gbWluKGNvdW50LCBQQUNLRVRfU0laRSk7CisJCWlmIChpcGFxX3dyaXRlX2J1bGsocG9ydCwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSkpIHsKKwkJCWJyZWFrOworCQl9CisJCWN1cnJlbnRfcG9zaXRpb24gKz0gdHJhbnNmZXJfc2l6ZTsKKwkJYnl0ZXNfc2VudCArPSB0cmFuc2Zlcl9zaXplOworCQljb3VudCAtPSB0cmFuc2Zlcl9zaXplOworCQlieXRlc19vdXQgKz0gdHJhbnNmZXJfc2l6ZTsKKwl9CisKKwlyZXR1cm4gYnl0ZXNfc2VudDsKK30gCisKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSAgIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0ID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKHByaXYtPmZyZWVfbGVuIDw9IDApIHsKKwkJZGJnKCIlcyAtIHdlJ3JlIHN0dWZmZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5mcmVlbGlzdCkpIHsKKwkJcGt0ID0gbGlzdF9lbnRyeShwcml2LT5mcmVlbGlzdC5uZXh0LCBzdHJ1Y3QgaXBhcV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGt0LT5saXN0KTsKKwkJcHJpdi0+ZnJlZV9sZW4gLT0gUEFDS0VUX1NJWkU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCWlmIChwa3QgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gd2UncmUgc3R1ZmZlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCW1lbWNweShwa3QtPmRhdGEsIGJ1ZiwgY291bnQpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcGt0LT5kYXRhKTsKKworCXBrdC0+bGVuID0gY291bnQ7CisJcGt0LT53cml0dGVuID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmcHJpdi0+cXVldWUpOworCXByaXYtPnF1ZXVlX2xlbiArPSBjb3VudDsKKwlpZiAocHJpdi0+YWN0aXZlID09IDApIHsKKwkJcHJpdi0+YWN0aXZlID0gMTsKKwkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJfQorCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2dhdGhlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQJCQljb3VudCwgcm9vbTsKKwlzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCwgKnRtcDsKKwlzdHJ1Y3QgdXJiCQkqdXJiID0gcG9ydC0+d3JpdGVfdXJiOworCisJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCWVycigiJXMgLSBmbHVzaGluZyB3aGlsZSB1cmIgaXMgYWN0aXZlICEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCXJvb20gPSBVUkJEQVRBX1NJWkU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKKwkJY291bnQgPSBtaW4ocm9vbSwgKGludCkocGt0LT5sZW4gLSBwa3QtPndyaXR0ZW4pKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgKFVSQkRBVEFfU0laRSAtIHJvb20pLAorCQkgICAgICAgcGt0LT5kYXRhICsgcGt0LT53cml0dGVuLCBjb3VudCk7CisJCXJvb20gLT0gY291bnQ7CisJCXBrdC0+d3JpdHRlbiArPSBjb3VudDsKKwkJcHJpdi0+cXVldWVfbGVuIC09IGNvdW50OworCQlpZiAocGt0LT53cml0dGVuID09IHBrdC0+bGVuKSB7CisJCQlsaXN0X21vdmUoJnBrdC0+bGlzdCwgJnByaXYtPmZyZWVsaXN0KTsKKwkJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOworCQl9CisJCWlmIChyb29tID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJY291bnQgPSBVUkJEQVRBX1NJWkUgLSByb29tOworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrLAorCQkgICAgICBwb3J0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGlwYXFfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5xdWV1ZSkpIHsKKwkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPmFjdGl2ZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gZnJlZWxlbiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+ZnJlZV9sZW4pOworCXJldHVybiBwcml2LT5mcmVlX2xlbjsKK30KKworc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcXVldWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPnF1ZXVlX2xlbik7CisJcmV0dXJuIHByaXYtPnF1ZXVlX2xlbjsKK30KKworc3RhdGljIHZvaWQgaXBhcV9kZXN0cm95X2xpc3RzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPnF1ZXVlLCBsaXN0KSB7CisJCWtmcmVlKHBrdC0+ZGF0YSk7CisJCWtmcmVlKHBrdCk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPmZyZWVsaXN0LCBsaXN0KSB7CisJCWtmcmVlKHBrdC0+ZGF0YSk7CisJCWtmcmVlKHBrdCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIHVzYl9yZXNldF9jb25maWd1cmF0aW9uIChzZXJpYWwtPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaXBhcV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlzcGluX2xvY2tfaW5pdCgmd3JpdGVfbGlzdF9sb2NrKTsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZpcGFxX2RldmljZSk7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCWlmICh2ZW5kb3IpIHsKKwkJaXBhcV9pZF90YWJsZVswXS5pZFZlbmRvciA9IHZlbmRvcjsKKwkJaXBhcV9pZF90YWJsZVswXS5pZFByb2R1Y3QgPSBwcm9kdWN0OworCX0KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJCSAgCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgaXBhcV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChpcGFxX2luaXQpOworbW9kdWxlX2V4aXQoaXBhcV9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCittb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IiKTsKKworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjkwMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMSAtIDIwMDIKKyAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9JUEFRX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX0lQQVFfSAorCisvKgorICogU2luY2Ugd2UgY2FuJ3QgcXVldWUgb3VyIGJ1bGsgd3JpdGUgdXJicyAoZG9uJ3Qga25vdyB3aHkgLSBpdCBqdXN0CisgKiBkb2Vzbid0IHdvcmspLCB3ZSBjYW4gc2VuZCBkb3duIG9ubHkgb25lIHdyaXRlIHVyYiBhdCBhIHRpbWUuIFRoZSBzaW1wbGlzdGljCisgKiBhcHByb2FjaCB0YWtlbiBieSB0aGUgZ2VuZXJpYyB1c2JzZXJpYWwgZHJpdmVyIHdpbGwgd29yaywgYnV0IGl0J3Mgbm90IGdvb2QKKyAqIGZvciBwZXJmb3JtYW5jZS4gVGhlcmVmb3JlLCB3ZSBidWZmZXIgdXB0byBVUkJEQVRBX1FVRVVFX01BWCBieXRlcyBvZiB3cml0ZQorICogcmVxdWVzdHMgY29taW5nIGZyb20gdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhpcyBpcyBkb25lIGJ5IGNoYWluaW5nIHRoZW0KKyAqIGluIGxpc3RzIG9mIHN0cnVjdCBpcGFxX3BhY2tldCwgZWFjaCBwYWNrZXQgaG9sZGluZyBhIG1heGltdW0gb2YKKyAqIFBBQ0tFVF9TSVpFIGJ5dGVzLgorICoKKyAqIGlwYXFfd3JpdGUoKSBjYW4gYmUgY2FsbGVkIGZyb20gYm90dG9tIGhhbGYgY29udGV4dDsgaGVuY2Ugd2UgY2FuJ3QKKyAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGFja2V0cyB0aGVyZS4gU28gd2UgaW5pdGlhbGl6ZSBhIHBvb2wgb2YgcGFja2V0cyBhdAorICogdGhlIGZpcnN0IG9wZW4gYW5kIG1haW50YWluIGEgZnJlZWxpc3QuCisgKgorICogVGhlIHZhbHVlIG9mIFBBQ0tFVF9TSVpFIHdhcyBlbXBpcmljYWxseSBkZXRlcm1pbmVkIGJ5CisgKiBjaGVja2luZyB0aGUgbWF4aW11bSB3cml0ZSBzaXplcyBzZW50IGRvd24gYnkgdGhlIHBwcCBsZGlzYy4KKyAqIFVSQkRBVEFfUVVFVUVfTUFYIGlzIHNldCB0byA2NEssIHdoaWNoIGlzIHRoZSBtYXhpbXVtIFRDUCB3aW5kb3cgc2l6ZS4KKyAqLworCitzdHJ1Y3QgaXBhcV9wYWNrZXQgeworCWNoYXIJCQkqZGF0YTsKKwlzaXplX3QJCQlsZW47CisJc2l6ZV90CQkJd3JpdHRlbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cit9OworCitzdHJ1Y3QgaXBhcV9wcml2YXRlIHsKKwlpbnQJCQlhY3RpdmU7CisJaW50CQkJcXVldWVfbGVuOworCWludAkJCWZyZWVfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZAlmcmVlbGlzdDsKK307CisKKyNkZWZpbmUgVVJCREFUQV9TSVpFCQk0MDk2CisjZGVmaW5lIFVSQkRBVEFfUVVFVUVfTUFYCSg2NCAqIDEwMjQpCisjZGVmaW5lIFBBQ0tFVF9TSVpFCQkyNTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExMDVkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMCwwICsxLDQ5MSBAQAorLyoKKyAqIElQV2lyZWxlc3MgM0cgVU1UUyBUREQgTW9kZW0gZHJpdmVyIChVU0IgY29ubmVjdGVkKQorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA0IFJvZWxmIERpZWRlcmlja3MgPHJvZWxmZEBpbmV0LmNvLnphPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2Ugd2FzIGFjcXVpcmVkIHVzaW5nIFNub29weVBybworICogb24gTVNGVCdzIE8vUywgYW5kIGV4YW1pbmcgdGhlIE1TRlQgZHJpdmVycycgZGVidWcgb3V0cHV0IAorICogKGluc2FuZWx5IGxlZnQgX29uXyBpbiB0aGUgZW5kdXNlciB2ZXJzaW9uKQorICoKKyAqIEl0IHdhcyB3cml0dGVuIG91dCBvZiBmcnVzdHJhdGlvbiB3aXRoIHRoZSBJUFdpcmVsZXNzIFVTQiBtb2RlbQorICogc3VwcGxpZWQgYnkgQXhpdHkzRy9TZW50ZWNoIFNvdXRoIEFmcmljYSBub3Qgc3VwcG9ydGluZworICogTGludXggd2hhdHNvZXZlci4KKyAqCisgKiBOb2JvZHkgcHJvdmlkZWQgYW55IHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIHRoYXQgd2FzIG5vdCBhbHJlYWR5IAorICogYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS4KKyAqIAorICogVGhlIG1vZGVtIGFkaGVyZXMgdG8gdGhlICIzR1BQIFRTICAyNy4wMDcgQVQgY29tbWFuZCBzZXQgZm9yIDNHIAorICogVXNlciBFcXVpcG1lbnQgKFVFKSIgc3RhbmRhcmQsIGF2YWlsYWJsZSBmcm9tIAorICogaHR0cDovL3d3dy4zZ3BwLm9yZy9mdHAvU3BlY3MvaHRtbC1pbmZvLzI3MDA3Lmh0bQorICoKKyAqIFRoZSBjb2RlIHdhcyBvbmx5IHRlc3RlZCB0aGUgSVBXaXJlbGVzcyBoYW5kaGVsZCBtb2RlbSBkaXN0cmlidXRlZAorICogaW4gU291dGggQWZyaWNhIGJ5IFNlbnRlY2guCisgKiAKKyAqIEl0IG1heSB3b3JrIGZvciBXb29zaCBJbmMgaW4gLm56IHRvbywgYXMgaXQgYXBwZWFycyB0aGV5IHVzZSB0aGUKKyAqIHNhbWUga2l0LgorICoKKyAqIFRoZXJlIGlzIHN0aWxsIHNvbWUgd29yayB0byBiZSBkb25lIGluIHRlcm1zIG9mIGhhbmRsaW5nIAorICogRENELCBEVFIsIFJUUywgQ1RTIHdoaWNoIGFyZSBjdXJyZW50bHkgZmFrZWQuCisgKiBJdCdzIGdvb2QgZW5vdWdoIGZvciBQUFAgYXQgdGhpcyBwb2ludC4gSXQncyBiYXNlZCBvZmYgYWxsIGtpbmRzIG9mCisgKiBjb2RlIGZvdW5kIGluIHVzYi9zZXJpYWwgYW5kIHVzYi9jbGFzcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkidjAuMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiUm9lbGYgRGllZGVyaWNrcyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIklQV2lyZWxlc3MgdHR5IGRyaXZlciIKKworI2RlZmluZSBJUFdfVFRZX01BSk9SCTI0MAkvKiByZWFsIGRldmljZSBub2RlIG1ham9yIGlkLCBleHBlcmltZW50YWwgcmFuZ2UgKi8KKyNkZWZpbmUgSVBXX1RUWV9NSU5PUlMJMjU2CS8qIHdlIHN1cHBvcnQgMjU2IGRldmljZXMsIGR1bm5vIHdoeSwgaXQnZCBiZSBpbnNhbmUgOikgKi8KKworI2RlZmluZSBVU0JfSVBXX01BR0lDCTB4NmQwMgkvKiBtYWdpYyBudW1iZXIgZm9yIGlwdyBzdHJ1Y3QgKi8KKworCisvKiBNZXNzYWdlIHNpemVzICovCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCTB4RkYKKyNkZWZpbmUgQ0hBUjJJTlQxNihjMSxjMCkJKCgodTMyKSgoYzEpICYgMHhmZikgPDwgOCkgKyAodTMyKSgoYzApICYgMHhmZikpCisjZGVmaW5lIE5VTV9CVUxLX1VSQlMJCTI0CisjZGVmaW5lIE5VTV9DT05UUk9MX1VSQlMJMTYKKworLyogdmVuZG9yL3Byb2R1Y3QgcGFpcnMgdGhhdCBhcmUga25vd24gd29yayB3aXRoIHRoaXMgZHJpdmVyKi8KKyNkZWZpbmUgSVBXX1ZJRAkJMHgwYmMzCisjZGVmaW5lIElQV19QSUQJCTB4MDAwMQorCisKKy8qIFZlbmRvciBjb21tYW5kczogKi8KKworLyogYmF1ZCByYXRlcyAqLworZW51bSB7CisJaXB3X3Npb19iMjU2MDAwID0gMHgwMDBlLAorCWlwd19zaW9fYjEyODAwMCA9IDB4MDAxZCwKKwlpcHdfc2lvX2IxMTUyMDAgPSAweDAwMjAsCisJaXB3X3Npb19iNTc2MDAgID0gMHgwMDQwLAorCWlwd19zaW9fYjU2MDAwICA9IDB4MDA0MiwKKwlpcHdfc2lvX2IzODQwMCAgPSAweDAwNjAsCisJaXB3X3Npb19iMTkyMDAgID0gMHgwMGMwLAorCWlwd19zaW9fYjE0NDAwICA9IDB4MDEwMCwKKwlpcHdfc2lvX2I5NjAwICAgPSAweDAxODAsCisJaXB3X3Npb19iNDgwMCAgID0gMHgwMzAwLAorCWlwd19zaW9fYjI0MDAgICA9IDB4MDYwMCwKKwlpcHdfc2lvX2IxMjAwICAgPSAweDBjMDAsCisJaXB3X3Npb19iNjAwICAgID0gMHgxODAwCit9OworCisvKiBkYXRhIGJpdHMgKi8KKyNkZWZpbmUgaXB3X2R0Yl83CQkweDcwMAorI2RlZmluZSBpcHdfZHRiXzgJCTB4ODEwCS8vIG9rIHNvIHRoZSBkZWZpbmUgaXMgbWlzbGVhZGluZywgSSBrbm93LCBidXQgZm9yY2VzIDgsbiwxCisJCQkJCS8vIEkgbWVhbiwgaXMgdGhlcmUgYSBwb2ludCB0byBhbnkgb3RoZXIgc2V0dGluZyB0aGVzZSBkYXlzPyA6KQkKKworLyogdXNiIGNvbnRyb2wgcmVxdWVzdCB0eXBlcyA6ICovCisjZGVmaW5lIElQV19TSU9fUlhDVEwJCTB4MDAJLy8gY29udHJvbCBidWxrIHJ4IGNoYW5uZWwgdHJhbnNtaXNzaW9ucywgdmFsdWU9MS8wIChvbi9vZmYpCisjZGVmaW5lIElQV19TSU9fU0VUX0JBVUQJMHgwMQkvLyBzZXQgYmF1ZCwgdmFsdWU9cmVxdWVzdGVkIGlwd19zaW9fYnh4eHgKKyNkZWZpbmUgSVBXX1NJT19TRVRfTElORQkweDAzCS8vIHNldCBkYXRhYml0cywgcGFyaXR5LiB2YWx1ZT1pcHdfZHRiX3gKKyNkZWZpbmUgSVBXX1NJT19TRVRfUElOCQkweDAzCS8vIHNldC9jbGVhciBkdHIvcnRzIHZhbHVlPWlwd19waW5feHh4CisjZGVmaW5lIElQV19TSU9fUE9MTAkJMHgwOAkvLyBnZXQgc2VyaWFsIHBvcnQgc3RhdHVzIGJ5dGUsIGNhbGwgd2l0aCB2YWx1ZT0wCisjZGVmaW5lIElQV19TSU9fSU5JVAkJMHgxMQkvLyBpbml0aWFsaXplcyA/IHZhbHVlPTAgKGFwcGVhcnMgYXMgZmlyc3QgdGhpbmcgdG9kbyBvbiBvcGVuKQorI2RlZmluZSBJUFdfU0lPX1BVUkdFCQkweDEyCS8vIHB1cmdlIGFsbCB0cmFuc21pc3Npb25zPywgY2FsbCB3aXRoIHZhbHVlPW51bWNoYXJfdG9fcHVyZ2UKKyNkZWZpbmUgSVBXX1NJT19IQU5ERkxPVwkweDEzCS8vIHNldCB4b24veG9mZiBsaW1pdHMgdmFsdWU9MCwgYW5kIGEgYnVmZmVyIG9mIDB4MTAgYnl0ZXMKKyNkZWZpbmUgSVBXX1NJT19TRVRDSEFSUwkweDEzCS8vIHNldCB0aGUgZmxvd2NvbnRyb2wgc3BlY2lhbCBjaGFycywgdmFsdWU9MCwgYnVmPTYgYnl0ZXMsIAorCQkJCQkvLyBsYXN0IDIgYnl0ZXMgY29udGFpbiBmbG93Y29udHJvbCBjaGFycyBlLmcuIDAwIDAwIDAwIDAwIDExIDEzCisKKy8qIHZhbHVlcyB1c2VkIGZvciByZXF1ZXN0IElQV19TSU9fU0VUX1BJTiAqLworI2RlZmluZSBJUFdfUElOX1NFVERUUgkJMHgxMDEKKyNkZWZpbmUgSVBXX1BJTl9TRVRSVFMJCTB4MjAyCisjZGVmaW5lIElQV19QSU5fQ0xSRFRSCQkweDEwMAorI2RlZmluZSBJUFdfUElOX0NMUlJUUwkJMHgyMDAgLy8gdW5jb25maXJtZWQKKworLyogdmFsdWVzIHVzZWQgZm9yIHJlcXVlc3QgSVBXX1NJT19SWENUTCAqLworI2RlZmluZSBJUFdfUlhCVUxLX09OCQkxCisjZGVmaW5lIElQV19SWEJVTEtfT0ZGCQkwCisKKy8qIHZhcmlvdXMgMTYgYnl0ZSBoYXJkY29kZWQgdHJhbnNmZXJidWZmZXJzIHVzZWQgYnkgZmxvdyBjb250cm9sICovCisjZGVmaW5lIElQV19CWVRFU19GTE9XSU5JVAl7IDB4MDEsIDAsIDAsIDAsIDB4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCisvKiBJbnRlcnByZXRhdGlvbiBvZiBtb2RlbSBzdGF0dXMgbGluZXMgKi8KKy8qIFRoZXNlIG5lZWQgc29ydGluZyBvdXQgYnkgaW5kaXZpZHVhbGx5IGNvbm5lY3RpbmcgcGlucyBhbmQgY2hlY2tpbmcKKyAqIHJlc3VsdHMuIEZJWE1FIQorICogV2hlbiBkYXRhIGlzIGJlaW5nIHNlbnQgd2Ugc2VlIDB4MzAgaW4gdGhlIGxvd2VyIGJ5dGU7IHRoaXMgbXVzdAorICogY29udGFpbiBEU1IgYW5kIENUUyAuLi4KKyAqLworI2RlZmluZSBJUFdfRFNSCQkJKCgxPDw0KSB8ICgxPDw1KSkKKyNkZWZpbmUgSVBXX0NUUwkJCSgoMTw8NSkgfCAoMTw8NCkpCisKKyNkZWZpbmUgSVBXX1dBTlRTX1RPX1NFTkQJMHgzMAorLy8jZGVmaW5lIElQV19EVFIJCQkvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCisvLyNkZWZpbmUgSVBXX0NUUwkJCS8qIENsZWFyIFRvIFNlbmQgKi8KKy8vI2RlZmluZSBJUFdfQ0QJCQkvKiBDYXJyaWVyIERldGVjdCAqLworLy8jZGVmaW5lIElQV19EU1IJCQkvKiBEYXRhIFNldCBSZWFkeSAqLworLy8jZGVmaW5lIElQV19SeEQJCQkvKiBSZWNlaXZlIHBpbiAqLworCisvLyNkZWZpbmUgSVBXX0xFCisvLyNkZWZpbmUgSVBXX1JUUwkJCisvLyNkZWZpbmUgSVBXX1NUCQkKKy8vI2RlZmluZSBJUFdfU1IJCQorLy8jZGVmaW5lIElQV19SSQkJCS8qIFJpbmcgSW5kaWNhdG9yICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfaXB3X2lkc1tdID0geworCXsgVVNCX0RFVklDRShJUFdfVklELCBJUFdfUElEKSB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfaXB3X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JfaXB3X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaXB3dHR5IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9pcHdfaWRzLAorfTsKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHZvaWQgaXB3X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgaXB3X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgaXB3X29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXU4IGJ1Zl9mbG93X3N0YXRpY1sxNl0gPSBJUFdfQllURVNfRkxPV0lOSVQ7CisJdTggKmJ1Zl9mbG93X2luaXQ7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJYnVmX2Zsb3dfaW5pdCA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCWlmICghYnVmX2Zsb3dfaW5pdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGJ1Zl9mbG93X2luaXQsIGJ1Zl9mbG93X3N0YXRpYywgMTYpOworCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiAtLTE6IFRlbGwgdGhlIG1vZGVtIHRvIGluaXRpYWxpemUgKHdlIHRoaW5rKSBGcm9tIHNuaWZmcyB0aGlzIGlzIGFsd2F5cyB0aGUKKwkgKiBmaXJzdCB0aGluZyB0aGF0IGdldHMgc2VudCB0byB0aGUgbW9kZW0gZHVyaW5nIG9wZW5pbmcgb2YgdGhlIGRldmljZSAqLworCWRiZygiJXM6IFNlbmRpbmcgU0lPX0lOSVQgKHdlIGd1ZXNzKSIsX19GVU5DVElPTl9fKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LDApLAorCQkJCSBJUFdfU0lPX0lOSVQsCisJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgMCwKKwkJCQkgMCwgLyogaW5kZXggKi8KKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMTAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiSW5pdCBvZiBtb2RlbSBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCS8qIHJlc2V0IHRoZSBidWxrIHBpcGVzICovCisJdXNiX2NsZWFyX2hhbHQoZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcykpOworCXVzYl9jbGVhcl9oYWx0KGRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSk7CisKKwkvKi0tMjogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8JCisJZGJnKCIlczogc2V0dGluZyB1cCBidWxrIHJlYWQgY2FsbGJhY2siLF9fRlVOQ1RJT05fXyk7CisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIGRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICBwb3J0LT5idWxrX2luX2J1ZmZlciwKKwkJCSAgcG9ydC0+YnVsa19pbl9zaXplLAorCQkJICBpcHdfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCS8qLS0zOiBUZWxsIHRoZSBtb2RlbSB0byBvcGVuIHRoZSBmbG9vZGdhdGVzIG9uIHRoZSByeCBidWxrIGNoYW5uZWwgKi8KKwlkYmcoIiVzOmFza2luZyBtb2RlbSBmb3IgUnhSZWFkIChSWEJVTEtfT04pIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX1JYQ1RMLAorCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIElQV19SWEJVTEtfT04sCisJCQkJIDAsIC8qIGluZGV4ICovCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDEwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApIAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJFbmFibGluZyBidWxrIFJ4UmVhZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCS8qLS00OiBzZXR1cCB0aGUgaW5pdGlhbCBmbG93Y29udHJvbCAqLworCWRiZygiJXM6c2V0dGluZyBpbml0IGZsb3djb250cm9sICglcykiLF9fRlVOQ1RJT05fXyxidWZfZmxvd19pbml0KTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgSVBXX1NJT19IQU5ERkxPVywKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSAwLAorCQkJCSAwLAorCQkJCSBidWZfZmxvd19pbml0LAorCQkJCSAweDEwLAorCQkJCSAyMDAwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJpbml0aWFsIGZsb3djb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisKKwkvKi0tNTogcmFpc2UgdGhlIGR0ciAqLworCWRiZygiJXM6cmFpc2luZyBkdHIiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX1NFVERUUiwKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisKKwkvKi0tNjogcmFpc2UgdGhlIHJ0cyAqLworCWRiZygiJXM6cmFpc2luZyBydHMiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX1NFVFJUUywKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisJCisJa2ZyZWUoYnVmX2Zsb3dfaW5pdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWludCByZXN1bHQ7CisKKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgeworCQlkYmcoIiVzOiB0dHlfaHVuZ191cF9wIC4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKi0tMTogZHJvcCB0aGUgZHRyICovCisJZGJnKCIlczpkcm9wcGluZyBkdHIiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX0NMUkRUUiwKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiZHJvcHBpbmcgZHRyIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisJLyotLTI6IGRyb3AgdGhlIHJ0cyAqLworCWRiZygiJXM6ZHJvcHBpbmcgcnRzIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX1NFVF9QSU4sIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgSVBXX1BJTl9DTFJSVFMsCisJCQkJIDAsCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDIwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldiwgImRyb3BwaW5nIHJ0cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCisJLyotLTM6IHB1cmdlICovCisJZGJnKCIlczpzZW5kaW5nIHB1cmdlIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX1BVUkdFLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIDB4MDMsCisJCQkJIDAsCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDIwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldiwgInB1cmdlIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisKKwkvKiBzZW5kIFJYQlVMS19vZmYgKHRlbGwgbW9kZW0gdG8gc3RvcCB0cmFuc21pdHRpbmcgYnVsayBkYXRhIG9uIHJ4IGNoYW4pICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fUlhDVEwsCisJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgSVBXX1JYQlVMS19PRkYsCisJCQkJIDAsIC8qIGluZGV4ICovCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDEwMDAwMCk7CisKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRGlzYWJsaW5nIGJ1bGsgUnhSZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisJLyogc2h1dGRvd24gYW55IGluLWZsaWdodCB1cmJzIHRoYXQgd2Uga25vdyBhYm91dCAqLworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIGlwd193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgaW50IGlwd193cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaW50IHJldDsKKworCWRiZygiJXM6IFRPUDogY291bnQ9JWQsIGluX2ludGVycnVwdD0lbGQiLCBfX0ZVTkNUSU9OX18sCisJCWNvdW50LCBpbl9pbnRlcnJ1cHQoKSApOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKwkKKwkvKiBSYWN5IGFuZCBicm9rZW4sIEZJWE1FIHByb3Blcmx5ISAqLworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybiAwOworCisJY291bnQgPSBtaW4oY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUpOworCW1lbWNweShwb3J0LT5idWxrX291dF9idWZmZXIsIGJ1ZiwgY291bnQpOworCisJZGJnKCIlcyBjb3VudCBub3c6JWQiLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKwkKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT53cml0ZV91cmIsIGRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIGNvdW50LAorCQkJICBpcHdfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCSAgcG9ydCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgIT0gMCkgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYmcoIiVzIHJldHVybmluZyAlZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCXJldHVybiBjb3VudDsKK30gCisKK3N0YXRpYyBpbnQgaXB3X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcHdfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIklQV2lyZWxlc3MgY29udmVydGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkiaXB3IiwKKwkuaWRfdGFibGUgPQkJdXNiX2lwd19pZHMsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWlwd19vcGVuLAorCS5jbG9zZSA9CQlpcHdfY2xvc2UsCisJLnBvcnRfcHJvYmUgPSAJCWlwd19wcm9iZSwKKwkucG9ydF9yZW1vdmUgPQkJaXB3X2Rpc2Nvbm5lY3QsCisJLndyaXRlID0JCWlwd193cml0ZSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlwd193cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlpcHdfcmVhZF9idWxrX2NhbGxiYWNrLAorfTsKKworCisKK3N0YXRpYyBpbnQgdXNiX2lwd19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwd19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfaXB3X2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9pcHdfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfaXB3X2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcHdfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQodXNiX2lwd19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9pcHdfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjIzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTAsMCArMSw2MTkgQEAKKy8qCisgKiBVU0IgSVIgRG9uZ2xlIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwMS0yMDAyCUdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKglDb3B5cmlnaHQgKEMpIDIwMDIJR2FyeSBCcnViYWtlciAoeGF2eWVyQGl4Lm5ldGNvbS5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciBhbGxvd3MgYSBVU0IgSXJEQSBkZXZpY2UgdG8gYmUgdXNlZCBhcyBhICJkdW1iIiBzZXJpYWwgZGV2aWNlLgorICogVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gYSBmdWxsIElyREEgc3RhY2sgb24gdGhlCisgKiBvdGhlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLiAgSWYgeW91IGRvIGhhdmUgYW4gSXJEQSBzdGFjayBvbiBib3RoIGRldmljZXMsCisgKiBwbGVhc2UgdXNlIHRoZSB1c2ItaXJkYSBkcml2ZXIsIGFzIGl0IGNvbnRhaW5zIHRoZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgYW5kCisgKiBvdGhlciBnb29kbmVzcyBvZiBhIGZ1bGwgSXJEQSBzdGFjay4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGRyaXZlciB3ZXJlIHRha2VuIGZyb20gZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jLCB3aGljaAorICogd2FzIHdyaXR0ZW4gYnkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PiwgRGFnIEJyYXR0bGkKKyAqIDxkYWdAYnJhdHRsaS5uZXQ+LCBhbmQgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIDIwMDJfTWFyXzA3CWdyZWcga2gKKyAqCW1vdmVkIHNvbWUgbmVlZGVkIHN0cnVjdHVyZXMgYW5kICNkZWZpbmUgdmFsdWVzIGZyb20gdGhlCisgKgluZXQvaXJkYS9pcmRhLXVzYi5oIGZpbGUgaW50byBvdXIgZmlsZSwgYXMgd2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24KKyAqCXRoYXQgY29kZWJhc2UgY29tcGlsaW5nIGNvcnJlY3RseSA6KQorICoKKyAqIDIwMDJfSmFuXzE0ICBnYgorICoJQWRkZWQgbW9kdWxlIHBhcmFtZXRlciB0byBmb3JjZSBzcGVjaWZpYyBudW1iZXIgb2YgWEJPRnMuCisgKglBZGRlZCBpcl94Ym9mX2NoYW5nZSgpLgorICoJUmVvcmdhbml6ZWQgcmVhZF9idWxrX2NhbGxiYWNrIGVycm9yIGhhbmRsaW5nLgorICoJU3dpdGNoZWQgZnJvbSBGSUxMX0JVTEtfVVJCKCkgdG8gdXNiX2ZpbGxfYnVsa191cmIoKS4KKyAqCisgKiAyMDAxX05vdl8wOCAgZ3JlZyBraAorICoJQ2hhbmdlZCB0aGUgaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKCkgZnVuY3Rpb24gYmFzZWQgb24gY29tbWVudHMgYW5kCisgKgljb2RlIGZyb20gTWFydGluIERpZWhsLgorICoKKyAqIDIwMDFfTm92XzAxCWdyZWcga2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIG1vcmUgSXJEQSBVU0IgZGV2aWNlcy4KKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHplcm8gcGFja2V0LiAgQWRkZWQgYnVmZmVyIG92ZXJyaWRlIHBhcmFtYXRlciwgc28KKyAqCXVzZXJzIGNhbiB0cmFuc2ZlciBsYXJnZXIgcGFja2V0cyBhdCBvbmNlIGlmIHRoZXkgd2lzaC4gIEJvdGggcGF0Y2hlcworICoJY2FtZSBmcm9tIERhZyBCcmF0dGxpIDxkYWdAb2JleGNvZGUuY29tPi4KKyAqCisgKiAyMDAxX09jdF8wNwlncmVnIGtoCisgKglpbml0aWFsIHZlcnNpb24gcmVsZWFzZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC40IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBJUiBEb25nbGUgZHJpdmVyIgorCisvKiBVU0IgSXJEQSBjbGFzcyBzcGVjIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFVTQl9DTEFTU19JUkRBCQkweDAyCisjZGVmaW5lIFVTQl9EVF9JUkRBCQkweDIxCisjZGVmaW5lIElVX1JFUV9HRVRfQ0xBU1NfREVTQwkweDA2CisjZGVmaW5lIFNQRUVEXzI0MDAJCTB4MDEKKyNkZWZpbmUgU1BFRURfOTYwMAkJMHgwMgorI2RlZmluZSBTUEVFRF8xOTIwMAkJMHgwMworI2RlZmluZSBTUEVFRF8zODQwMAkJMHgwNAorI2RlZmluZSBTUEVFRF81NzYwMAkJMHgwNQorI2RlZmluZSBTUEVFRF8xMTUyMDAJCTB4MDYKKyNkZWZpbmUgU1BFRURfNTc2MDAwCQkweDA3CisjZGVmaW5lIFNQRUVEXzExNTIwMDAJCTB4MDgKKyNkZWZpbmUgU1BFRURfNDAwMDAwMAkJMHgwOQorCitzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjIHsKKwl1OAliTGVuZ3RoOworCXU4CWJEZXNjcmlwdG9yVHlwZTsKKwl1MTYJYmNkU3BlY1JldmlzaW9uOworCXU4CWJtRGF0YVNpemU7CisJdTgJYm1XaW5kb3dTaXplOworCXU4CWJtTWluVHVybmFyb3VuZFRpbWU7CisJdTE2CXdCYXVkUmF0ZTsKKwl1OAlibUFkZGl0aW9uYWxCT0ZzOworCXU4CWJJcmRhUmF0ZVNuaWZmOworCXU4CWJNYXhVbmljYXN0TGlzdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW50IGRlYnVnOworCisvKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGVpciB2YWx1ZSBmb3IgdGhlIHNpemUgb2YgdGhlIHJlYWQgYW5kCisgKiB3cml0ZSB1cmJzICovCitzdGF0aWMgaW50IGJ1ZmZlcl9zaXplOworLyogaWYgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciwgdGhlbiB1c2UgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgWEJPRnMgKi8KK3N0YXRpYyBpbnQgeGJvZiA9IC0xOworCitzdGF0aWMgaW50ICBpcl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGlyX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlcCk7CitzdGF0aWMgdm9pZCBpcl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGVwKTsKK3N0YXRpYyBpbnQgIGlyX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBpcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGlyX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBpcl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKKworc3RhdGljIHU4IGlyX2JhdWQgPSAwOworc3RhdGljIHU4IGlyX3hib2YgPSAwOworc3RhdGljIHU4IGlyX2FkZF9ib2YgPSAwOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDUwZiwgMHgwMTgwKSB9LAkJLyogS0MgVGVjaG5vbG9neSwgS0MtMTgwICovCisJeyBVU0JfREVWSUNFKDB4MDhlOSwgMHgwMTAwKSB9LAkJLyogWFROREFjY2VzcyAqLworCXsgVVNCX0RFVklDRSgweDA5YzQsIDB4MDAxMSkgfSwJCS8qIEFDVGlTeXMgQUNULUlSMjAwMFUgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyAoVVNCX0NMQVNTX0FQUF9TUEVDLCBVU0JfQ0xBU1NfSVJEQSwgMCkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlyX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaXItdXNiIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgaXJfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIklSIERvbmdsZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5zZXRfdGVybWlvcyA9CQlpcl9zZXRfdGVybWlvcywKKwkuYXR0YWNoID0JCWlyX3N0YXJ0dXAsCisJLm9wZW4gPQkJCWlyX29wZW4sCisJLmNsb3NlID0JCWlyX2Nsb3NlLAorCS53cml0ZSA9CQlpcl93cml0ZSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlyX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWlyX3JlYWRfYnVsa19jYWxsYmFjaywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcmRhX3VzYl9kdW1wX2NsYXNzX2Rlc2Moc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqZGVzYykKK3sKKwlkYmcoImJMZW5ndGg9JXgiLCBkZXNjLT5iTGVuZ3RoKTsKKwlkYmcoImJEZXNjcmlwdG9yVHlwZT0leCIsIGRlc2MtPmJEZXNjcmlwdG9yVHlwZSk7CisJZGJnKCJiY2RTcGVjUmV2aXNpb249JXgiLCBkZXNjLT5iY2RTcGVjUmV2aXNpb24pOyAKKwlkYmcoImJtRGF0YVNpemU9JXgiLCBkZXNjLT5ibURhdGFTaXplKTsKKwlkYmcoImJtV2luZG93U2l6ZT0leCIsIGRlc2MtPmJtV2luZG93U2l6ZSk7CisJZGJnKCJibU1pblR1cm5hcm91bmRUaW1lPSVkIiwgZGVzYy0+Ym1NaW5UdXJuYXJvdW5kVGltZSk7CisJZGJnKCJ3QmF1ZFJhdGU9JXgiLCBkZXNjLT53QmF1ZFJhdGUpOworCWRiZygiYm1BZGRpdGlvbmFsQk9Gcz0leCIsIGRlc2MtPmJtQWRkaXRpb25hbEJPRnMpOworCWRiZygiYklyZGFSYXRlU25pZmY9JXgiLCBkZXNjLT5iSXJkYVJhdGVTbmlmZik7CisJZGJnKCJiTWF4VW5pY2FzdExpc3Q9JXgiLCBkZXNjLT5iTWF4VW5pY2FzdExpc3QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogRnVuY3Rpb24gaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKGRldiwgaWZudW0pCisgKgorICogICAgUmV0dXJucyBpbnN0YW5jZSBvZiBJckRBIGNsYXNzIGRlc2NyaXB0b3IsIG9yIE5VTEwgaWYgbm90IGZvdW5kCisgKgorICogVGhlIGNsYXNzIGRlc2NyaXB0b3IgaXMgc29tZSBleHRyYSBpbmZvIHRoYXQgSXJEQSBVU0IgZGV2aWNlcyB3aWxsCisgKiBvZmZlciB0byB1cywgZGVzY3JpYmluZyB0aGVpciBJckRBIGNoYXJhY3RlcmlzdGljcy4gV2Ugd2lsbCB1c2UgdGhhdCBpbgorICogaXJkYV91c2JfaW5pdF9xb3MoKQorICoKKyAqIEJhc2VkIG9uIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGRyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworICovCitzdGF0aWMgc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZm51bSkKK3sKKwlzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICpkZXNjOworCWludCByZXQ7CisJCQorCWRlc2MgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGlyZGFfY2xhc3NfZGVzYyksIEdGUF9LRVJORUwpOworCWlmIChkZXNjID09IE5VTEwpIAorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MpKTsKKwkKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LDApLAorCQkJSVVfUkVRX0dFVF9DTEFTU19ERVNDLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTAsIGlmbnVtLCBkZXNjLCBzaXplb2YoKmRlc2MpLCAxMDAwKTsKKwkKKwlkYmcoIiVzIC0gIHJldD0lZCIsIF9fRlVOQ1RJT05fXywgcmV0KTsKKwlpZiAocmV0IDwgc2l6ZW9mKCpkZXNjKSkgeworCQlkYmcoIiVzIC0gY2xhc3MgZGVzY3JpcHRvciByZWFkICVzICglZCkiLAorCQkJCV9fRlVOQ1RJT05fXywgCisJCQkJKHJldDwwKSA/ICJmYWlsZWQiIDogInRvbyBzaG9ydCIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfSVJEQSkgeworCQlkYmcoIiVzIC0gYmFkIGNsYXNzIGRlc2NyaXB0b3IgdHlwZSIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCQorCWlyZGFfdXNiX2R1bXBfY2xhc3NfZGVzYyhkZXNjKTsKKwlyZXR1cm4gZGVzYzsKK2Vycm9yOgorCWtmcmVlKGRlc2MpOworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB1OCBpcl94Ym9mX2NoYW5nZSh1OCB4Ym9mKQoreworCXU4IHJlc3VsdDsKKwkvKiByZWZlcmVuY2UgaXJkYS11c2IuYyAqLworCXN3aXRjaCh4Ym9mKSB7CisJCWNhc2UgNDg6IHJlc3VsdCA9IDB4MTA7IGJyZWFrOworCQljYXNlIDI4OgorCQljYXNlIDI0OiByZXN1bHQgPSAweDIwOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSAxMjogcmVzdWx0ID0gMHgzMDsgYnJlYWs7CisJCWNhc2UgIDU6CisJCWNhc2UgIDY6IHJlc3VsdCA9IDB4NDA7IGJyZWFrOworCQljYXNlICAzOiByZXN1bHQgPSAweDUwOyBicmVhazsKKwkJY2FzZSAgMjogcmVzdWx0ID0gMHg2MDsgYnJlYWs7CisJCWNhc2UgIDE6IHJlc3VsdCA9IDB4NzA7IGJyZWFrOworCQljYXNlICAwOiByZXN1bHQgPSAweDgwOyBicmVhazsKKwl9CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKworc3RhdGljIGludCBpcl9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmlyZGFfZGVzYzsKKworCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyAoc2VyaWFsLT5kZXYsIDApOworCWlmIChpcmRhX2Rlc2MgPT0gTlVMTCkgeworCQlkZXZfZXJyICgmc2VyaWFsLT5kZXYtPmRldiwgIklSREEgY2xhc3MgZGVzY3JpcHRvciBub3QgZm91bmQsIGRldmljZSBub3QgYm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkYmcgKCIlcyAtIEJhdWQgcmF0ZXMgc3VwcG9ydGVkOiVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCV9fRlVOQ1RJT05fXywKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDAxKSA/ICIgMjQwMCIgICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDAyKSA/ICIgOTYwMCIgICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDA0KSA/ICIgMTkyMDAiICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDA4KSA/ICIgMzg0MDAiICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDEwKSA/ICIgNTc2MDAiICAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDIwKSA/ICIgMTE1MjAwIiAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDQwKSA/ICIgNTc2MDAwIiAgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMDgwKSA/ICIgMTE1MjAwMCIgOiAiIiwKKwkJKGlyZGFfZGVzYy0+d0JhdWRSYXRlICYgMHgwMTAwKSA/ICIgNDAwMDAwMCIgOiAiIik7CisKKwlzd2l0Y2goIGlyZGFfZGVzYy0+Ym1BZGRpdGlvbmFsQk9GcyApIHsKKwkJY2FzZSAweDAxOiBpcl9hZGRfYm9mID0gNDg7IGJyZWFrOworCQljYXNlIDB4MDI6IGlyX2FkZF9ib2YgPSAyNDsgYnJlYWs7CisJCWNhc2UgMHgwNDogaXJfYWRkX2JvZiA9IDEyOyBicmVhazsKKwkJY2FzZSAweDA4OiBpcl9hZGRfYm9mID0gIDY7IGJyZWFrOworCQljYXNlIDB4MTA6IGlyX2FkZF9ib2YgPSAgMzsgYnJlYWs7CisJCWNhc2UgMHgyMDogaXJfYWRkX2JvZiA9ICAyOyBicmVhazsKKwkJY2FzZSAweDQwOiBpcl9hZGRfYm9mID0gIDE7IGJyZWFrOworCQljYXNlIDB4ODA6IGlyX2FkZF9ib2YgPSAgMDsgYnJlYWs7CisJCWRlZmF1bHQ6OworCX0KKworCWtmcmVlIChpcmRhX2Rlc2MpOworCisJcmV0dXJuIDA7CQkKK30KKworc3RhdGljIGludCBpcl9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwljaGFyICpidWZmZXI7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChidWZmZXJfc2l6ZSkgeworCQkvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZXMgKi8KKwkJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZmZlcikgeworCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlrZnJlZSAocG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBidWZmZXI7CisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX3NpemU7CisKKwkJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZmZlcikgeworCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlrZnJlZSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGJ1ZmZlcjsKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX3NpemU7CisJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKKwl9CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJcG9ydC0+cmVhZF91cmIsCisJCXBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQlpcl9yZWFkX2J1bGtfY2FsbGJhY2ssCisJCXBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaXJfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCSAKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKK30KKworc3RhdGljIGludCBpcl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCWludCByZXN1bHQ7CisJaW50IHRyYW5zZmVyX3NpemU7CisKKwlkYmcoIiVzIC0gcG9ydCA9ICVkLCBjb3VudCA9ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCWlmICghcG9ydC0+dHR5KSB7CisJCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIG5vIHR0eT8/P1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcgKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCXRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUgLSAxKTsKKworCS8qCisJICogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHBhY2tldCB3ZSBzZW5kIHRvIHRoZSBkZXZpY2UgY29udGFpbnMgYW4KKwkgKiBpbmJhbmQgaGVhZGVyIHdoaWNoIGluZGljYXRlcyBhbiBhZGRpdGlvbmFsIG51bWJlciBvZiBCT0ZzIGFuZAorCSAqIGEgYmF1ZCByYXRlIGNoYW5nZS4KKwkgKgorCSAqIFNlZSBzZWN0aW9uIDUuNC4yLjIgb2YgdGhlIFVTQiBJckRBIHNwZWMuCisJICovCisJKnRyYW5zZmVyX2J1ZmZlciA9IGlyX3hib2YgfCBpcl9iYXVkOworCSsrdHJhbnNmZXJfYnVmZmVyOworCisJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgdHJhbnNmZXJfc2l6ZSk7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAoCisJCXBvcnQtPndyaXRlX3VyYiwKKwkJcG9ydC0+c2VyaWFsLT5kZXYsCisJCXVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQl0cmFuc2Zlcl9zaXplICsgMSwKKwkJaXJfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJcG9ydCk7CisKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX1pFUk9fUEFDS0VUOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJZWxzZQorCQlyZXN1bHQgPSB0cmFuc2Zlcl9zaXplOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaXJfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEgKAorCQlkZWJ1ZywKKwkJJnBvcnQtPmRldiwKKwkJX19GVU5DVElPTl9fLAorCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgdm9pZCBpcl9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBjbG9zZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKworCQljYXNlIDA6IC8qIFN1Y2Nlc3NmdWwgKi8KKworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBwYWNrZXQgd2UgZ2V0IGZyb20gdGhlIGRldmljZQorCQkJICogY29udGFpbnMgYSBidXN5IGluZGljYXRvciBhbmQgYmF1ZCByYXRlIGNoYW5nZS4KKwkJCSAqIFNlZSBzZWN0aW9uIDUuNC4xLjIgb2YgdGhlIFVTQiBJckRBIHNwZWMuCisJCQkgKi8KKwkJCWlmICgoKmRhdGEgJiAweDBmKSA+IDApCisJCQkJaXJfYmF1ZCA9ICpkYXRhICYgMHgwZjsKKworCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhICgKKwkJCQlkZWJ1ZywKKwkJCQkmcG9ydC0+ZGV2LAorCQkJCV9fRlVOQ1RJT05fXywKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJZGF0YSk7CisKKwkJCS8qCisJCQkgKiBCeXBhc3MgZmxpcC1idWZmZXJzLCBhbmQgZmVlZCB0aGUgbGRpc2MgZGlyZWN0bHkKKwkJCSAqIGR1ZSB0byBvdXIgcG90ZW50aWFsbHkgbGFyZ2UgYnVmZmVyIHNpemUuICBTaW5jZSB3ZQorCQkJICogdXNlZCB0byBzZXQgbG93X2xhdGVuY3ksIHRoaXMgaXMgZXhhY3RseSB3aGF0IHRoZQorCQkJICogdHR5IGxheWVyIGRpZCBhbnl3YXkgOikKKwkJCSAqLworCQkJdHR5ID0gcG9ydC0+dHR5OworCisJCQkvKgorCQkJICoJRklYTUU6IG11c3Qgbm90IGRvIHRoaXMgaW4gSVJRIGNvbnRleHQsCisJCQkgKgltdXN0IGhvbm91ciBUVFlfRE9OVF9GTElQCisJCQkgKi8KKwkJCXR0eS0+bGRpc2MucmVjZWl2ZV9idWYoCisJCQkJdHR5LAorCQkJCWRhdGErMSwKKwkJCQlOVUxMLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aC0xKTsKKworCQkJLyoKKwkJCSAqIE5vIGJyZWFrIGhlcmUuCisJCQkgKiBXZSB3YW50IHRvIHJlc3VibWl0IHRoZSB1cmIgc28gd2UgY2FuIHJlYWQKKwkJCSAqIGFnYWluLgorCQkJICovCisKKwkJY2FzZSAtRVBST1RPOiAvKiB0YWtpbmcgaW5zcGlyYXRpb24gZnJvbSBwbDIzMDMuYyAqLworCisJCQkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgKi8KKwkJCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJCQlwb3J0LT5yZWFkX3VyYiwKKwkJCQlwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQlpcl9yZWFkX2J1bGtfY2FsbGJhY2ssCisJCQkJcG9ydCk7CisKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJCQlicmVhayA7CisKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQlfX0ZVTkNUSU9OX18sIAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJCWJyZWFrIDsKKworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgaXJfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGNmbGFnOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgorCQkgICAgKFJFTEVWQU5UX0lGTEFHKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIEFsbCB3ZSBjYW4gY2hhbmdlIGlzIHRoZSBiYXVkIHJhdGUgKi8KKwlpZiAoY2ZsYWcgJiBDQkFVRCkgeworCisJCWRiZyAoIiVzIC0gYXNraW5nIGZvciBiYXVkICVkIiwKKwkJCV9fRlVOQ1RJT05fXywKKwkJCXR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSkpOworCisJCS8qIAorCQkgKiBGSVhNRSwgd2Ugc2hvdWxkIGNvbXBhcmUgdGhlIGJhdWQgcmVxdWVzdCBhZ2FpbnN0IHRoZQorCQkgKiBjYXBhYmlsaXR5IHN0YXRlZCBpbiB0aGUgSVIgaGVhZGVyIHRoYXQgd2UgZ290IGluIHRoZQorCQkgKiBzdGFydHVwIGZ1bmN0aW9uLgorCQkgKi8KKwkJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCQljYXNlIEIyNDAwOiAgICBpcl9iYXVkID0gU1BFRURfMjQwMDsgICAgYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJY2FzZSBCOTYwMDogICAgaXJfYmF1ZCA9IFNQRUVEXzk2MDA7ICAgIGJyZWFrOworCQkJY2FzZSBCMTkyMDA6ICAgaXJfYmF1ZCA9IFNQRUVEXzE5MjAwOyAgIGJyZWFrOworCQkJY2FzZSBCMzg0MDA6ICAgaXJfYmF1ZCA9IFNQRUVEXzM4NDAwOyAgIGJyZWFrOworCQkJY2FzZSBCNTc2MDA6ICAgaXJfYmF1ZCA9IFNQRUVEXzU3NjAwOyAgIGJyZWFrOworCQkJY2FzZSBCMTE1MjAwOiAgaXJfYmF1ZCA9IFNQRUVEXzExNTIwMDsgIGJyZWFrOworCQkJY2FzZSBCNTc2MDAwOiAgaXJfYmF1ZCA9IFNQRUVEXzU3NjAwMDsgIGJyZWFrOworCQkJY2FzZSBCMTE1MjAwMDogaXJfYmF1ZCA9IFNQRUVEXzExNTIwMDA7IGJyZWFrOworI2lmZGVmIEI0MDAwMDAwCisJCQljYXNlIEI0MDAwMDAwOiBpcl9iYXVkID0gU1BFRURfNDAwMDAwMDsgYnJlYWs7CisjZW5kaWYKKwkJfQorCisJCWlmICh4Ym9mID09IC0xKSB7CisJCQlpcl94Ym9mID0gaXJfeGJvZl9jaGFuZ2UoaXJfYWRkX2JvZik7CisJCX0gZWxzZSB7CisJCQlpcl94Ym9mID0gaXJfeGJvZl9jaGFuZ2UoeGJvZikgOworCQl9CisKKwkJLyogTm90aWZ5IHRoZSB0dHkgZHJpdmVyIHRoYXQgdGhlIHRlcm1pb3MgaGF2ZSBjaGFuZ2VkLiAqLworCQlwb3J0LT50dHktPmxkaXNjLnNldF90ZXJtaW9zKHBvcnQtPnR0eSwgTlVMTCk7CisKKwkJLyogRklYTUUgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgb3VyIHdyaXRlIHVyYiBpcyBidXN5IHJpZ2h0CisJCSAqIG5vdywgb3IgdXNlIGEgdXJiIHBvb2wuCisJCSAqCisJCSAqIHNlbmQgdGhlIGJhdWQgY2hhbmdlIG91dCBvbiBhbiAiZW1wdHkiIGRhdGEgcGFja2V0CisJCSAqLworCQl0cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJKnRyYW5zZmVyX2J1ZmZlciA9IGlyX3hib2YgfCBpcl9iYXVkOworCisJCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJCXBvcnQtPndyaXRlX3VyYiwKKwkJCXBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCTEsCisJCQlpcl93cml0ZV9idWxrX2NhbGxiYWNrLAorCQkJcG9ydCk7CisKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9aRVJPX1BBQ0tFVDsKKworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBfX2luaXQgaXJfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlyX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlyX2RyaXZlcik7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXJfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGlyX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZpcl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmlyX2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQoaXJfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oeGJvZiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoeGJvZiwgIkZvcmNlIHNwZWNpZmljIG51bWJlciBvZiBYQk9GcyIpOworbW9kdWxlX3BhcmFtKGJ1ZmZlcl9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfc2l6ZSwgIlNpemUgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlcnMiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwOTI2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTAsMCArMSwyMzU0IEBACisvKgorICBLZXlzcGFuIFVTQiB0byBTZXJpYWwgQ29udmVydGVyIGRyaXZlcgorIAorICAoQykgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEJSHVnaCBCbGVtaW5ncyA8aHVnaEBibGVtaW5ncy5vcmc+CisgIChDKSBDb3B5cmlnaHQgKEMpIDIwMDIJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAgIAorICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFNlZSBodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgCisgIENvZGUgaW4gdGhpcyBkcml2ZXIgaW5zcGlyZWQgYnkgYW5kIGluIGEgbnVtYmVyIG9mIHBsYWNlcyB0YWtlbgorICBmcm9tIEJyaWFuIFdhcm5lcidzIG9yaWdpbmFsIEtleXNwYW4tUERBIGRyaXZlci4KKworICBUaGlzIGRyaXZlciBoYXMgYmVlbiBwdXQgdG9nZXRoZXIgd2l0aCB0aGUgc3VwcG9ydCBvZiBJbm5vc3lzLCBJbmMuCisgIGFuZCBLZXlzcGFuLCBJbmMgdGhlIG1hbnVmYWN0dXJlcnMgb2YgdGhlIEtleXNwYW4gVVNCLXNlcmlhbCBwcm9kdWN0cy4KKyAgVGhhbmtzIEd1eXMgOikKKyAgCisgIFRoYW5rcyB0byBQYXVsdXMgZm9yIG1pc2NlbGxhbmVvdXMgdGlkeSB1cHMsIHNvbWUgbGFyZ2lzaCBjaHVua3MKKyAgb2YgbXVjaCBuaWNlciBhbmQvb3IgY29tcGxldGVseSBuZXcgY29kZSBhbmQgKHBlcmhhcHMgbW9zdCB1bmlxdWVseSkKKyAgaGF2aW5nIHRoZSBwYXRpZW5jZSB0byBzaXQgZG93biBhbmQgZXhwbGFpbiB3aHkgYW5kIHdoZXJlIGhlJ2QgY2hhbmdlZAorICBzdHVmZi4gCisgIAorICBUaXAgJ28gdGhlIGhhdCB0byBJQk0gKGFuZCBwcmV2aW91c2x5IExpbnV4Y2FyZSA6KSBmb3Igc3VwcG9ydGluZyAKKyAgc3RhZmYgaW4gdGhlaXIgd29yayBvbiBvcGVuIHNvdXJjZSBwcm9qZWN0cy4KKworICBDaGFuZ2UgSGlzdG9yeQorCisgICAgMjAwM3NlcDA0CUxQTSAoS2V5c3BhbikgYWRkIHN1cHBvcnQgZm9yIG5ldyBzaW5nbGUgcG9ydCBwcm9kdWN0IFVTQTE5SFMuCisJCQkJSW1wcm92ZSBzZXR1cCBtZXNzYWdlIGhhbmRsaW5nIGZvciBhbGwgZGV2aWNlcy4KKworICAgIFdlZCBGZWIgMTkgMjI6MDA6MDAgUFNUIDIwMDMgKEplZmZyZXkgUy4gTGFpbmcgPGtleXNwYW5AanNsLmNvbT4pCisgICAgICBNZXJnZWQgdGhlIGN1cnJlbnQgKDEvMzEvMDMpIEtleXNwYW4gY29kZSB3aXRoIHRoZSBjdXJyZW50ICgyLjQuMjEtcHJlNCkKKyAgICAgIExpbnV4IHNvdXJjZSB0cmVlLiAgVGhlIExpbnV4IHRyZWUgbGFja2VkIHN1cHBvcnQgZm9yIHRoZSA0OVdMQyBhbmQKKyAgICAgIG90aGVycy4gIFRoZSBLZXlzcGFuIHBhdGNoZXMgZGlkbid0IHdvcmsgd2l0aCB0aGUgY3VycmVudCBrZXJuZWwuCisKKyAgICAyMDAzamFuMzAJTFBNCWFkZCBzdXBwb3J0IGZvciB0aGUgNDlXTEMgYW5kIE1QUgorCisgICAgV2VkIEFwciAyNSAxMjowMDowMCBQU1QgMjAwMiAoS2V5c3BhbikKKyAgICAgIFN0YXJ0ZWQgd2l0aCBIdWdoIEJsZW1pbmdzJyBjb2RlIGRhdGVkIEphbiAxNywgMjAwMi4gIEFsbCBhZGFwdGVycworICAgICAgbm93IHN1cHBvcnRlZCAoaW5jbHVkaW5nIFFJIGFuZCBRVykuICBNb2RpZmllZCBwb3J0IG9wZW4sIHBvcnQKKyAgICAgIGNsb3NlLCBhbmQgc2VuZCBzZXR1cCgpIGxvZ2ljIHRvIGZpeCB2YXJpb3VzIGRhdGEgYW5kIGVuZHBvaW50CisgICAgICBzeW5jaHJvbml6YXRpb24gYnVncyBhbmQgZGV2aWNlIExFRCBzdGF0dXMgYnVncy4gIENoYW5nZWQga2V5c3Bhbl8KKyAgICAgIHdyaXRlX3Jvb20oKSB0byBhY2N1cmF0ZWx5IHJldHVybiB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmlsaXR5LgorICAgICAgQ2hhbmdlZCBmb3J3YXJkaW5nTGVuZ3RoIGZyb20gMSB0byAxNiBmb3IgYWxsIGFkYXB0ZXJzLgorCisgICAgRnJpIE9jdCAxMiAxNjo0NTowMCBFU1QgMjAwMQorICAgICAgUHJlbGltaW5hcnkgVVNBLTE5UUkgYW5kIFVTQS0yOCBzdXBwb3J0IChib3RoIHRlc3QgT0sgZm9yIG1lLCBZTU1WKQorCisgICAgV2VkIEFwciAyNSAxMjowMDowMCBQU1QgMjAwMiAoS2V5c3BhbikKKyAgICAgIFN0YXJ0ZWQgd2l0aCBIdWdoIEJsZW1pbmdzJyBjb2RlIGRhdGVkIEphbiAxNywgMjAwMi4gIEFsbCBhZGFwdGVycworICAgICAgbm93IHN1cHBvcnRlZCAoaW5jbHVkaW5nIFFJIGFuZCBRVykuICBNb2RpZmllZCBwb3J0IG9wZW4sIHBvcnQKKyAgICAgIGNsb3NlLCBhbmQgc2VuZCBzZXR1cCgpIGxvZ2ljIHRvIGZpeCB2YXJpb3VzIGRhdGEgYW5kIGVuZHBvaW50CisgICAgICBzeW5jaHJvbml6YXRpb24gYnVncyBhbmQgZGV2aWNlIExFRCBzdGF0dXMgYnVncy4gIENoYW5nZWQga2V5c3Bhbl8KKyAgICAgIHdyaXRlX3Jvb20oKSB0byBhY2N1cmF0ZWx5IHJldHVybiB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmlsaXR5LgorICAgICAgQ2hhbmdlZCBmb3J3YXJkaW5nTGVuZ3RoIGZyb20gMSB0byAxNiBmb3IgYWxsIGFkYXB0ZXJzLgorCisgICAgRnJpIE9jdCAxMiAxNjo0NTowMCBFU1QgMjAwMQorICAgICAgUHJlbGltaW5hcnkgVVNBLTE5UUkgYW5kIFVTQS0yOCBzdXBwb3J0IChib3RoIHRlc3QgT0sgZm9yIG1lLCBZTU1WKQorCisgICAgTW9uIE9jdCAgOCAxNDoyOTowMCBFU1QgMjAwMSBodWdoCisgICAgICBGaXhlZCBidWcgdGhhdCBwcmV2ZW50ZWQgbXVsaXRwb3J0IGRldmljZXMgb3BlcmF0aW5nIGNvcnJlY3RseQorICAgICAgaWYgdGhleSB3ZXJlbid0IHRoZSBmaXJzdCB1bml0IGF0dGFjaGVkLgorCisgICAgU2F0IE9jdCAgNiAxMjozMToyMSBFU1QgMjAwMSBodWdoCisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBVU0EtMjhYQSBhbmQgLTI4WEIsIG1pc2MgY2xlYW51cHMsIGJyZWFrIHN1cHBvcnQKKyAgICAgIGZvciB1c2EyNiBiYXNlZCBtb2RlbHMgdGhhbmtzIHRvIERhdmlkIEdpYnNvbi4KKworICAgIFRodSBNYXkgMzEgMTE6NTY6NDIgUERUIDIwMDEgZ2toCisgICAgICBzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlCisgICAKKyAgICAoMDQvMDgvMjAwMSkgZ2IKKwlJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICAgCisgICAgKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydC4KKyAgIAorICAgIFR1ZSBPY3QgMTAgMjM6MTU6MzMgRVNUIDIwMDAgSHVnaAorICAgICAgTWVyZ2VkIFBhdWwncyBjaGFuZ2VzIHdpdGggbXkgVVNBLTQ5VyBtb2RzLiAgV29yayBpbiBwcm9ncmVzcworICAgICAgc3RpbGwuLi4KKyAgCisgICAgV2VkIEp1bCAxOSAxNDowMDo0MiBFU1QgMjAwMCBna2gKKyAgICAgIEFkZGVkIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQKKyAgICAgIHRoaXMgZHJpdmVyIGlzIGEgbG9hZGFibGUgbW9kdWxlIG5vdy4KKyAKKyAgICBUdWUgSnVsIDE4IDE2OjE0OjUyIEVTVCAyMDAwIEh1Z2gKKyAgICAgIEJhc2ljIGNoYXJhY3RlciBpbnB1dC9vdXRwdXQgZm9yIFVTQS0xOSBub3cgbW9zdGx5IHdvcmtzLAorICAgICAgZml4ZWQgYXQgOTYwMCBiYXVkIGZvciB0aGUgbW9tZW50LgorCisgICAgU2F0IEp1bCAgOCAxMToxMTo0OCBFU1QgMjAwMCBIdWdoCisgICAgICBGaXJzdCBwdWJsaWMgcmVsZWFzZSAtIG5vdGhpbmcgd29ya3MgZXhjZXB0IHRoZSBmaXJtd2FyZSB1cGxvYWQuCisgICAgICBUZXN0ZWQgb24gUFBDIGFuZCB4ODYgYXJjaGl0ZWN0dXJlcywgc2VlbXMgdG8gYmVoYXZlLi4uCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAia2V5c3Bhbi5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4xLjQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkh1Z2ggQmxlbWluZ3MgPGh1Z2hAbWlzYy5udSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIktleXNwYW4gVVNCIHRvIFNlcmlhbCBDb252ZXJ0ZXIgRHJpdmVyIgorCisjZGVmaW5lIElOU1RBVF9CVUZMRU4JMzIKKyNkZWZpbmUgR0xPQ09OVF9CVUZMRU4JNjQKKworCS8qIFBlciBkZXZpY2UgYW5kIHBlciBwb3J0IHByaXZhdGUgZGF0YSAqLworc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgeworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkZXZpY2VfZGV0YWlsczsKKworCXN0cnVjdCB1cmIJKmluc3RhdF91cmI7CisJY2hhcgkJaW5zdGF0X2J1ZltJTlNUQVRfQlVGTEVOXTsKKworCS8qIFhYWCB0aGlzIG9uZSBwcm9iYWJseSB3aWxsIG5lZWQgYSBsb2NrICovCisJc3RydWN0IHVyYgkqZ2xvY29udF91cmI7CisJY2hhcgkJZ2xvY29udF9idWZbR0xPQ09OVF9CVUZMRU5dOworfTsKKworc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIHsKKwkvKiBLZWVwIHRyYWNrIG9mIHdoaWNoIGlucHV0ICYgb3V0cHV0IGVuZHBvaW50cyB0byB1c2UgKi8KKwlpbnQJCWluX2ZsaXA7CisJaW50CQlvdXRfZmxpcDsKKworCS8qIEtlZXAgZHVwbGljYXRlIG9mIGRldmljZSBkZXRhaWxzIGluIGVhY2ggcG9ydAorCSAgIHN0cnVjdHVyZSBhcyB3ZWxsIC0gc2ltcGxpZmllcyBzb21lIG9mIHRoZQorCSAgIGNhbGxiYWNrIGZ1bmN0aW9ucyBldGMuICovCisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRldmljZV9kZXRhaWxzOworCisJLyogSW5wdXQgZW5kcG9pbnRzIGFuZCBidWZmZXIgZm9yIHRoaXMgcG9ydCAqLworCXN0cnVjdCB1cmIJKmluX3VyYnNbMl07CisJY2hhcgkJaW5fYnVmZmVyWzJdWzY0XTsKKwkvKiBPdXRwdXQgZW5kcG9pbnRzIGFuZCBidWZmZXIgZm9yIHRoaXMgcG9ydCAqLworCXN0cnVjdCB1cmIJKm91dF91cmJzWzJdOworCWNoYXIJCW91dF9idWZmZXJbMl1bNjRdOworCisJLyogSW5wdXQgYWNrIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqaW5hY2tfdXJiOworCWNoYXIJCWluYWNrX2J1ZmZlclsxXTsKKworCS8qIE91dHB1dCBjb250cm9sIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqb3V0Y29udF91cmI7CisJY2hhcgkJb3V0Y29udF9idWZmZXJbNjRdOworCisJLyogU2V0dGluZ3MgZm9yIHRoZSBwb3J0ICovCisJaW50CQliYXVkOworCWludAkJb2xkX2JhdWQ7CisJdW5zaWduZWQgaW50CWNmbGFnOworCXVuc2lnbmVkIGludAlvbGRfY2ZsYWc7CisJZW51bQkJe2Zsb3dfbm9uZSwgZmxvd19jdHMsIGZsb3dfeG9ufSBmbG93X2NvbnRyb2w7CisJaW50CQlydHNfc3RhdGU7CS8qIEhhbmRzaGFraW5nIHBpbnMgKG91dHB1dHMpICovCisJaW50CQlkdHJfc3RhdGU7CisJaW50CQljdHNfc3RhdGU7CS8qIEhhbmRzaGFraW5nIHBpbnMgKGlucHV0cykgKi8KKwlpbnQJCWRzcl9zdGF0ZTsKKwlpbnQJCWRjZF9zdGF0ZTsKKwlpbnQJCXJpX3N0YXRlOworCWludAkJYnJlYWtfb247CisKKwl1bnNpZ25lZCBsb25nCXR4X3N0YXJ0X3RpbWVbMl07CisJaW50CQlyZXNlbmRfY29udDsJLyogbmVlZCB0byByZXNlbmQgY29udHJvbCBwYWNrZXQgKi8KK307CisKKwkKKy8qIEluY2x1ZGUgS2V5c3BhbiBtZXNzYWdlIGhlYWRlcnMuICBBbGwgY3VycmVudCBLZXlzcGFuIEFkYXB0ZXJzCisgICBtYWtlIHVzZSBvZiBvbmUgb2YgZm91ciBtZXNzYWdlIGZvcm1hdHMgd2hpY2ggYXJlIHJlZmVycmVkCisgICB0byBhcyBVU0EtMjYsIFVTQS0yOCBhbmQgVVNBLTQ5LCBVU0EtOTAgYnkgS2V5c3BhbiBhbmQgd2l0aGluIHRoaXMgZHJpdmVyLiAqLworI2luY2x1ZGUgImtleXNwYW5fdXNhMjZtc2cuaCIKKyNpbmNsdWRlICJrZXlzcGFuX3VzYTI4bXNnLmgiCisjaW5jbHVkZSAia2V5c3Bhbl91c2E0OW1zZy5oIgorI2luY2x1ZGUgImtleXNwYW5fdXNhOTBtc2cuaCIKKwkKKworLyogRnVuY3Rpb25zIHVzZWQgYnkgbmV3IHVzYi1zZXJpYWwgY29kZS4gKi8KK3N0YXRpYyBpbnQgX19pbml0IGtleXNwYW5faW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fcHJlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfcHJlX2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fMnBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl80cG9ydF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzRwb3J0X2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmtleXNwYW5fZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl80cG9ydF9kZXZpY2UpOworZmFpbGVkXzRwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fMnBvcnRfZGV2aWNlKTsKK2ZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CitmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl9wcmVfZGV2aWNlKTsKK2ZhaWxlZF9wcmVfZGV2aWNlX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrZXlzcGFuX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl9wcmVfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuXzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl8ycG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fNHBvcnRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoa2V5c3Bhbl9pbml0KTsKK21vZHVsZV9leGl0KGtleXNwYW5fZXhpdCk7CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisgCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQlwX3ByaXYtPmJyZWFrX29uID0gMTsKKwllbHNlCisJCXBfcHJpdi0+YnJlYWtfb24gPSAwOworCisJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCQkJCSAgICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCWludAkJCQliYXVkX3JhdGUsIGRldmljZV9wb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCXVuc2lnbmVkIGludCAJCQljZmxhZzsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOyAKKworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBwX3ByaXYtPmRldmljZV9kZXRhaWxzOworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCS8qIEJhdWQgcmF0ZSBjYWxjdWxhdGlvbiB0YWtlcyBiYXVkIHJhdGUgYXMgYW4gaW50ZWdlcgorCSAgIHNvIG90aGVyIHJhdGVzIGNhbiBiZSBnZW5lcmF0ZWQgaWYgZGVzaXJlZC4gKi8KKwliYXVkX3JhdGUgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCS8qIElmIG5vIG1hdGNoIG9yIGludmFsaWQsIGRvbid0IGNoYW5nZSAqLwkJCisJaWYgKGJhdWRfcmF0ZSA+PSAwCisJICAgICYmIGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShiYXVkX3JhdGUsIGRfZGV0YWlscy0+YmF1ZGNsaywKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9CQVVEX1JBVEVfT0spIHsKKwkJLyogRklYTUUgLSBtb3JlIHRvIGRvIGhlcmUgdG8gZW5zdXJlIHJhdGUgY2hhbmdlcyBjbGVhbmx5ICovCisJCXBfcHJpdi0+YmF1ZCA9IGJhdWRfcmF0ZTsKKwl9CisKKwkvKiBzZXQgQ1RTL1JUUyBoYW5kc2hha2UgZXRjLiAqLworCXBfcHJpdi0+Y2ZsYWcgPSBjZmxhZzsKKwlwX3ByaXYtPmZsb3dfY29udHJvbCA9IChjZmxhZyAmIENSVFNDVFMpPyBmbG93X2N0czogZmxvd19ub25lOworCisJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDApOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgaW50CQkJdmFsdWU7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCXZhbHVlID0gKChwX3ByaXYtPnJ0c19zdGF0ZSkgPyBUSU9DTV9SVFMgOiAwKSB8CisJCSgocF9wcml2LT5kdHJfc3RhdGUpID8gVElPQ01fRFRSIDogMCkgfAorCQkoKHBfcHJpdi0+Y3RzX3N0YXRlKSA/IFRJT0NNX0NUUyA6IDApIHwKKwkJKChwX3ByaXYtPmRzcl9zdGF0ZSkgPyBUSU9DTV9EU1IgOiAwKSB8CisJCSgocF9wcml2LT5kY2Rfc3RhdGUpID8gVElPQ01fQ0FSIDogMCkgfAorCQkoKHBfcHJpdi0+cmlfc3RhdGUpID8gVElPQ01fUk5HIDogMCk7IAorCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKKworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlwX3ByaXYtPnJ0c19zdGF0ZSA9IDE7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJcF9wcml2LT5kdHJfc3RhdGUgPSAxOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlwX3ByaXYtPnJ0c19zdGF0ZSA9IDA7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwX3ByaXYtPmR0cl9zdGF0ZSA9IDA7CisJa2V5c3Bhbl9zZW5kX3NldHVwKHBvcnQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtleXNwYW5faW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKwkvKiBXcml0ZSBmdW5jdGlvbiBpcyBzaW1pbGFyIGZvciB0aGUgZm91ciBwcm90b2NvbHMgdXNlZAorCSAgIHdpdGggb25seSBhIG1pbm9yIGNoYW5nZSBmb3IgdXNhOTAgKHVzYTE5aHMpIHJlcXVpcmVkICovCitzdGF0aWMgaW50IGtleXNwYW5fd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisJaW50CQkJCWZsaXA7CisJaW50IAkJCQlsZWZ0LCB0b2RvOworCXN0cnVjdCB1cmIJCQkqdGhpc191cmI7CisgCWludCAJCQkJZXJyLCBtYXhEYXRhTGVuLCBkYXRhT2Zmc2V0OworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHBfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwlpZiAoZF9kZXRhaWxzLT5tc2dfZm9ybWF0ID09IG1zZ191c2E5MCkgeworICAgCQltYXhEYXRhTGVuID0gNjQ7CisJCWRhdGFPZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCW1heERhdGFMZW4gPSA2MzsKKwkJZGF0YU9mZnNldCA9IDE7CisJfQorCQorCWRiZygiJXMgLSBmb3IgcG9ydCAlZCAoJWQgY2hhcnMpLCBmbGlwPSVkIiwKKwkgICAgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50LCBwX3ByaXYtPm91dF9mbGlwKTsKKworCWZvciAobGVmdCA9IGNvdW50OyBsZWZ0ID4gMDsgbGVmdCAtPSB0b2RvKSB7CisJCXRvZG8gPSBsZWZ0OworCQlpZiAodG9kbyA+IG1heERhdGFMZW4pCisJCQl0b2RvID0gbWF4RGF0YUxlbjsKKworCQlmbGlwID0gcF9wcml2LT5vdXRfZmxpcDsKKwkKKwkJLyogQ2hlY2sgd2UgaGF2ZSBhIHZhbGlkIHVyYi9lbmRwb2ludCBiZWZvcmUgd2UgdXNlIGl0Li4uICovCisJCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dF91cmJzW2ZsaXBdKSA9PSBOVUxMKSB7CisJCQkvKiBubyBidWxrIG91dCwgc28gcmV0dXJuIDAgYnl0ZXMgd3JpdHRlbiAqLworCQkJZGJnKCIlcyAtIG5vIG91dHB1dCB1cmIgOigiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIGNvdW50OworCQl9CisKKwkJZGJnKCIlcyAtIGVuZHBvaW50ICVkIGZsaXAgJWQiLCBfX0ZVTkNUSU9OX18sIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpLCBmbGlwKTsKKworCQlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWlmICh0aGlzX3VyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfQVNZTkNfVU5MSU5LKQorCQkJCWJyZWFrOworCQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHBfcHJpdi0+dHhfc3RhcnRfdGltZVtmbGlwXSArIDEwICogSFopKQorCQkJCWJyZWFrOworCQkJdGhpc191cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJCQl1c2JfdW5saW5rX3VyYih0aGlzX3VyYik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZpcnN0IGJ5dGUgaW4gYnVmZmVyIGlzICJsYXN0IGZsYWciIChleGNlcHQgZm9yIHVzYTE5aHgpIC0gdW51c2VkIHNvCisJCSAgIGZvciBub3cgc28gc2V0IHRvIHplcm8gKi8KKwkJKChjaGFyICopdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcilbMF0gPSAwOworCisJCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciArIGRhdGFPZmZzZXQsIGJ1ZiwgdG9kbyk7CisJCWJ1ZiArPSB0b2RvOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB0b2RvICsgZGF0YU9mZnNldDsKKworCQl0aGlzX3VyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9BU1lOQ19VTkxJTks7CisJCXRoaXNfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih0aGlzX3VyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJCWRiZygidXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICglZCkiLCBlcnIpOworCQl9CisJCXBfcHJpdi0+dHhfc3RhcnRfdGltZVtmbGlwXSA9IGppZmZpZXM7CisKKwkJLyogRmxpcCBmb3IgbmV4dCB0aW1lIGlmIHVzYTI2IG9yIHVzYTI4IGludGVyZmFjZQorCQkgICAobm90IHVzZWQgb24gdXNhNDkpICovCisJCXBfcHJpdi0+b3V0X2ZsaXAgPSAoZmxpcCArIDEpICYgZF9kZXRhaWxzLT5vdXRkYXRfZW5kcF9mbGlwOworCX0KKworCXJldHVybiBjb3VudCAtIGxlZnQ7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI2X2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50CQkJaSwgZXJyOworCWludAkJCWVuZHBvaW50OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKKwl1bnNpZ25lZCBjaGFyIAkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsgCisKKwllbmRwb2ludCA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IG9uIGVuZHBvaW50ICVkLiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCBlbmRwb2ludCk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCS8qIDB4ODAgYml0IGlzIGVycm9yIGZsYWcgKi8KKwkJaWYgKChkYXRhWzBdICYgMHg4MCkgPT0gMCkgeworCQkJLyogbm8gZXJyb3JzIG9uIGluZGl2aWR1YWwgYnl0ZXMsIG9ubHkgcG9zc2libGUgb3ZlcnJ1biBlcnIqLworCQkJaWYgKGRhdGFbMF0gJiBSWEVSUk9SX09WRVJSVU4pCisJCQkJCWVyciA9IFRUWV9PVkVSUlVOOworCQkJZWxzZSBlcnIgPSAwOworCQkJZm9yIChpID0gMTsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgZXJyKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCisJCQlkYmcoIiVzIC0gUlggZXJyb3IhISEhIiwgX19GVU5DVElPTl9fKTsKKwkJCWZvciAoaSA9IDA7IGkgKyAxIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IDIpIHsKKwkJCQlpbnQgc3RhdCA9IGRhdGFbaV0sIGZsYWcgPSAwOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9PVkVSUlVOKQorCQkJCQlmbGFnIHw9IFRUWV9PVkVSUlVOOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQlmbGFnIHw9IFRUWV9GUkFNRTsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CisJCQkJLyogWFhYIHNob3VsZCBoYW5kbGUgYnJlYWsgKDB4MTApICovCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2krMV0sIGZsYWcpOworCQkJfQorCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCQkJCQorCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQl9CisJcmV0dXJuOworfQorCisgCS8qIE91dGRhdCBoYW5kbGluZyBpcyBjb21tb24gZm9yIGFsbCBkZXZpY2VzICovCitzdGF0aWMgdm9pZAl1c2EyeF9vdXRkYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAqcF9wcml2OworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZGJnICgiJXMgLSB1cmIgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYiA9PSBwX3ByaXYtPm91dF91cmJzWzFdKTsgCisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI2X2luYWNrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOyAKKwkKK30KKworc3RhdGljIHZvaWQJdXNhMjZfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7CisJCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fRlVOQ1RJT05fXyk7IAorCQlrZXlzcGFuX3VzYTI2X3NlbmRfc2V0dXAocG9ydC0+c2VyaWFsLCBwb3J0LCBwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAl1c2EyNl9pbnN0YXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBjaGFyIAkJCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRTdGF0dXNNZXNzYWdlCSptc2c7CisJc3RydWN0IHVzYl9zZXJpYWwJCQkqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCWludCBvbGRfZGNkX3N0YXRlLCBlcnI7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXgiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IDkpIHsKKwkJZGJnKCIlcyAtICVkIGJ5dGUgcmVwb3J0Pz8iLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltc2cgPSAoc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydFN0YXR1c01lc3NhZ2UgKilkYXRhOworCisjaWYgMAorCWRiZygiJXMgLSBwb3J0IHN0YXR1czogcG9ydCAlZCBjdHMgJWQgZGNkICVkIGRzciAlZCByaSAlZCB0b2ZmICVkIHR4b2ZmICVkIHJ4ZW4gJWQgY3IgJWQiLAorCSAgICBfX0ZVTkNUSU9OX18sIG1zZy0+cG9ydCwgbXNnLT5oc2tpYV9jdHMsIG1zZy0+Z3BpYV9kY2QsIG1zZy0+ZHNyLCBtc2ctPnJpLCBtc2ctPl90eE9mZiwKKwkgICAgbXNnLT5fdHhYb2ZmLCBtc2ctPnJ4RW5hYmxlZCwgbXNnLT5jb250cm9sUmVzcG9uc2UpOworI2VuZGlmCisKKwkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCisKKworCS8qIENoZWNrIHBvcnQgbnVtYmVyIGZyb20gbWVzc2FnZSBhbmQgcmV0cmlldmUgcHJpdmF0ZSBkYXRhICovCQorCWlmIChtc2ctPnBvcnQgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJZGJnICgiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwgX19GVU5DVElPTl9fLCBtc2ctPnBvcnQpOworCQlnb3RvIGV4aXQ7CisJfQorCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0XTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCisJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKKwlwX3ByaXYtPmN0c19zdGF0ZSA9ICgobXNnLT5oc2tpYV9jdHMpID8gMSA6IDApOworCXBfcHJpdi0+ZHNyX3N0YXRlID0gKChtc2ctPmRzcikgPyAxIDogMCk7CisJcF9wcml2LT5kY2Rfc3RhdGUgPSAoKG1zZy0+Z3BpYV9kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisJCisJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDogOworfQorCitzdGF0aWMgdm9pZAl1c2EyNl9nbG9jb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCQorfQorCisKK3N0YXRpYyB2b2lkIHVzYTI4X2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaSwgZXJyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgICpwb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICAgICAgICp0dHk7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgKmRhdGE7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICAgICAgICAgICAgICpwX3ByaXY7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAodXJiICE9IHBfcHJpdi0+aW5fdXJic1twX3ByaXYtPmluX2ZsaXBdKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWlmICh1cmItPnN0YXR1cykgeworCQkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCBvbiBlbmRwb2ludCAlZC4iLAorCQkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSk7CisJCQlyZXR1cm47CisJCX0KKworCQlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQl0dHkgPSBwb3J0LT50dHk7CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQkJfQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQorCisJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJaWYgKHBvcnQtPm9wZW5fY291bnQpCisJCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJfQorCQlwX3ByaXYtPmluX2ZsaXAgXj0gMTsKKworCQl1cmIgPSBwX3ByaXYtPmluX3VyYnNbcF9wcml2LT5pbl9mbGlwXTsKKwl9IHdoaWxlICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpOworfQorCitzdGF0aWMgdm9pZAl1c2EyOF9pbmFja19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQJdXNhMjhfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7CisJCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fRlVOQ1RJT05fXyk7CisJCWtleXNwYW5fdXNhMjhfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI4X2luc3RhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludAkJCQkJZXJyOworCXVuc2lnbmVkIGNoYXIgCQkJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydFN0YXR1c01lc3NhZ2UJKm1zZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJaW50IG9sZF9kY2Rfc3RhdGU7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXgiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3VzYTI4X3BvcnRTdGF0dXNNZXNzYWdlKSkgeworCQlkYmcoIiVzIC0gYmFkIGxlbmd0aCAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCS8qZGJnKCIlcyAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCAleCIsIF9fRlVOQ1RJT05fXworCSAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdLAorCSAgICBkYXRhWzZdLCBkYXRhWzddLCBkYXRhWzhdLCBkYXRhWzldLCBkYXRhWzEwXSwgZGF0YVsxMV0pOyovCisJCisJCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KKwltc2cgPSAoc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydFN0YXR1c01lc3NhZ2UgKilkYXRhOworCisKKwkJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8JCisJaWYgKG1zZy0+cG9ydCA+PSBzZXJpYWwtPm51bV9wb3J0cykgeworCQlkYmcgKCIlcyAtIFVuZXhwZWN0ZWQgcG9ydCBudW1iZXIgJWQiLCBfX0ZVTkNUSU9OX18sIG1zZy0+cG9ydCk7CisJCWdvdG8gZXhpdDsKKwl9CisJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnRdOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCisJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOworCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmN0cykgPyAxIDogMCk7CisJcF9wcml2LT5kc3Jfc3RhdGUgPSAoKG1zZy0+ZHNyKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisKKwkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDogOworfQorCitzdGF0aWMgdm9pZAl1c2EyOF9nbG9jb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCisKK3N0YXRpYyB2b2lkCXVzYTQ5X2dsb2NvbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisJaW50IGk7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCQlpZiAocF9wcml2LT5yZXNlbmRfY29udCkgeworCQkJZGJnICgiJXMgLSBzZW5kaW5nIHNldHVwIiwgX19GVU5DVElPTl9fKTsgCisJCQlrZXlzcGFuX3VzYTQ5X3NlbmRfc2V0dXAoc2VyaWFsLCBwb3J0LCBwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCS8qIFRoaXMgaXMgYWN0dWFsbHkgY2FsbGVkIGdsb3N0YXQgaW4gdGhlIEtleXNwYW4KKwkgICBkb2NvICovCitzdGF0aWMgdm9pZAl1c2E0OV9pbnN0YXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQkJCWVycjsKKwl1bnNpZ25lZCBjaGFyIAkJCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlCSptc2c7CisJc3RydWN0IHVzYl9zZXJpYWwJCQkqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCWludCBvbGRfZGNkX3N0YXRlOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc2VyaWFsID0gKHN0cnVjdCB1c2Jfc2VyaWFsICopIHVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9wb3J0U3RhdHVzTWVzc2FnZSkpIHsKKwkJZGJnKCIlcyAtIGJhZCBsZW5ndGggJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKmRiZygiICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgX19GVU5DVElPTl9fLCAKKwkgICAgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSwKKwkgICAgZGF0YVs2XSwgZGF0YVs3XSwgZGF0YVs4XSwgZGF0YVs5XSwgZGF0YVsxMF0pOyovCisJCisJCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KKwltc2cgPSAoc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydFN0YXR1c01lc3NhZ2UgKilkYXRhOworCisJCS8qIENoZWNrIHBvcnQgbnVtYmVyIGZyb20gbWVzc2FnZSBhbmQgcmV0cmlldmUgcHJpdmF0ZSBkYXRhICovCQorCWlmIChtc2ctPnBvcnROdW1iZXIgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJZGJnICgiJXMgLSBVbmV4cGVjdGVkIHBvcnQgbnVtYmVyICVkIiwgX19GVU5DVElPTl9fLCBtc2ctPnBvcnROdW1iZXIpOworCQlnb3RvIGV4aXQ7CisJfQorCXBvcnQgPSBzZXJpYWwtPnBvcnRbbXNnLT5wb3J0TnVtYmVyXTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCisJLyogVXBkYXRlIGhhbmRzaGFraW5nIHBpbiBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCW9sZF9kY2Rfc3RhdGUgPSBwX3ByaXYtPmRjZF9zdGF0ZTsKKwlwX3ByaXYtPmN0c19zdGF0ZSA9ICgobXNnLT5jdHMpID8gMSA6IDApOworCXBfcHJpdi0+ZHNyX3N0YXRlID0gKChtc2ctPmRzcikgPyAxIDogMCk7CisJcF9wcml2LT5kY2Rfc3RhdGUgPSAoKG1zZy0+ZGNkKSA/IDEgOiAwKTsKKwlwX3ByaXYtPnJpX3N0YXRlID0gKChtc2ctPnJpKSA/IDEgOiAwKTsKKworCWlmIChwb3J0LT50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnR0eSkKKwkgICAgJiYgb2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSkgeworCQlpZiAob2xkX2RjZF9zdGF0ZSkKKwkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKKwkJLyogIGVsc2UgKi8KKwkJLyoJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwX3ByaXYtPm9wZW5fd2FpdCk7ICovCisJfQorCisJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KKwl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDoJOworfQorCitzdGF0aWMgdm9pZAl1c2E0OV9pbmFja19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQJdXNhNDlfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQlpLCBlcnI7CisJaW50CQkJZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCXVuc2lnbmVkIGNoYXIgCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCBvbiBlbmRwb2ludCAlZC4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cywgZW5kcG9pbnQpOworCQlyZXR1cm47CisJfQorCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCisJCWlmICgoZGF0YVswXSAmIDB4ODApID09IDApIHsKKwkJCS8qIG5vIGVycm9yIG9uIGFueSBieXRlICovCisJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCisJCQlmb3IgKGkgPSAwOyBpICsgMSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSAyKSB7CisJCQkJaW50IHN0YXQgPSBkYXRhW2ldLCBmbGFnID0gMDsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikKKwkJCQkJZmxhZyB8PSBUVFlfT1ZFUlJVTjsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKKwkJCQkJZmxhZyB8PSBUVFlfRlJBTUU7CisJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX1BBUklUWSkKKwkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOworCQkJCS8qIFhYWCBzaG91bGQgaGFuZGxlIGJyZWFrICgweDEwKSAqLworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpKzFdLCBmbGFnKTsKKwkJCX0KKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKwkJCQkKKwkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaWYgKHBvcnQtPm9wZW5fY291bnQpCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJfQorfQorCisvKiBub3QgdXNlZCwgdXNhLTQ5IGRvZXNuJ3QgaGF2ZSBwZXItcG9ydCBjb250cm9sIGVuZHBvaW50cyAqLworc3RhdGljIHZvaWQJdXNhNDlfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIHZvaWQJdXNhOTBfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQlpLCBlcnI7CisJaW50CQkJZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJdW5zaWduZWQgY2hhciAJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7IAorCisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IG9uIGVuZHBvaW50ICVkLiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCBlbmRwb2ludCk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCisJCS8qIGlmIGN1cnJlbnQgbW9kZSBpcyBETUEsIGxvb2tzIGxpa2UgdXNhMjggZm9ybWF0CisJICAgCQlvdGhlcndpc2UgbG9va3MgbGlrZSB1c2EyNiBkYXRhIGZvcm1hdCAqLworCisJCWlmIChwX3ByaXYtPmJhdWQgPiA1NzYwMCkgeworCQkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQllbHNlIHsKKwkJCQorCQkJLyogMHg4MCBiaXQgaXMgZXJyb3IgZmxhZyAqLworCQkJaWYgKChkYXRhWzBdICYgMHg4MCkgPT0gMCkgeworCQkJCS8qIG5vIGVycm9ycyBvbiBpbmRpdmlkdWFsIGJ5dGVzLCBvbmx5IHBvc3NpYmxlIG92ZXJydW4gZXJyKi8KKwkJCQlpZiAoZGF0YVswXSAmIFJYRVJST1JfT1ZFUlJVTikKKwkJCQkJCWVyciA9IFRUWV9PVkVSUlVOOworCQkJCWVsc2UgZXJyID0gMDsKKwkJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSAKKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCBlcnIpOworCQkJCisJCQl9IAorCQkJZWxzZSB7CisJCQkvKiBzb21lIGJ5dGVzIGhhZCBlcnJvcnMsIGV2ZXJ5IGJ5dGUgaGFzIHN0YXR1cyAqLworCQkJCWRiZygiJXMgLSBSWCBlcnJvciEhISEiLCBfX0ZVTkNUSU9OX18pOworCQkJCWZvciAoaSA9IDA7IGkgKyAxIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IDIpIHsKKwkJCQkJaW50IHN0YXQgPSBkYXRhW2ldLCBmbGFnID0gMDsKKwkJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX09WRVJSVU4pCisJCQkJCQlmbGFnIHw9IFRUWV9PVkVSUlVOOworCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfRlJBTUlORykKKwkJCQkJCWZsYWcgfD0gVFRZX0ZSQU1FOworCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQkJZmxhZyB8PSBUVFlfUEFSSVRZOworCQkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2krMV0sIGZsYWcpOworCQkJCX0KKwkJCX0KKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKwkJCQkKKwkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQl9CisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkCXVzYTkwX2luc3RhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgCQkJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGtleXNwYW5fdXNhOTBfcG9ydFN0YXR1c01lc3NhZ2UJKm1zZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJaW50IG9sZF9kY2Rfc3RhdGUsIGVycjsKKworCXNlcmlhbCA9IChzdHJ1Y3QgdXNiX3NlcmlhbCAqKSB1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCAxNCkgeworCQlkYmcoIiVzIC0gJWQgYnl0ZSByZXBvcnQ/PyIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZyA9IChzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0U3RhdHVzTWVzc2FnZSAqKWRhdGE7CisKKwkvKiBOb3cgZG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBkYXRhICovCisKKwlwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCisJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOworCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmN0cykgPyAxIDogMCk7CisJcF9wcml2LT5kc3Jfc3RhdGUgPSAoKG1zZy0+ZHNyKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisJCisJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorZXhpdDoKKwk7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTkwX291dGNvbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAqcF9wcml2OworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAocF9wcml2LT5yZXNlbmRfY29udCkgeworCQlkYmcgKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX0ZVTkNUSU9OX18pOyAKKwkJa2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwKHBvcnQtPnNlcmlhbCwgcG9ydCwgcF9wcml2LT5yZXNlbmRfY29udCAtIDEpOworCX0KK30KKworc3RhdGljIGludCBrZXlzcGFuX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQJCQkJZmxpcDsKKwlpbnQJCQkJZGF0YV9sZW47CisJc3RydWN0IHVyYgkJCSp0aGlzX3VyYjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBwX3ByaXYtPmRldmljZV9kZXRhaWxzOworCisJaWYgKGRfZGV0YWlscy0+bXNnX2Zvcm1hdCA9PSBtc2dfdXNhOTApCisgICAJCWRhdGFfbGVuID0gNjQ7CisJZWxzZQorCQlkYXRhX2xlbiA9IDYzOworCisJZmxpcCA9IHBfcHJpdi0+b3V0X2ZsaXA7CisKKwkvKiBDaGVjayBib3RoIGVuZHBvaW50cyB0byBzZWUgaWYgYW55IGFyZSBhdmFpbGFibGUuICovCisJaWYgKCh0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF0pICE9IE5VTEwpIHsKKwkJaWYgKHRoaXNfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJcmV0dXJuIChkYXRhX2xlbik7CisJCWZsaXAgPSAoZmxpcCArIDEpICYgZF9kZXRhaWxzLT5vdXRkYXRfZW5kcF9mbGlwOyAgICAgICAgCisJCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dF91cmJzW2ZsaXBdKSAhPSBOVUxMKSAKKwkJCWlmICh0aGlzX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJCQlyZXR1cm4gKGRhdGFfbGVuKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJKnBfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAJCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQJCQkJaSwgZXJyOworCWludAkJCQliYXVkX3JhdGUsIGRldmljZV9wb3J0OworCXN0cnVjdCB1cmIJCQkqdXJiOworCXVuc2lnbmVkIGludAkJCWNmbGFnOworCisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBwX3ByaXYtPmRldmljZV9kZXRhaWxzOworCQorCWRiZygiJXMgLSBwb3J0JWQuIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOyAKKworCS8qIFNldCBzb21lIHNhbmUgZGVmYXVsdHMgKi8KKwlwX3ByaXYtPnJ0c19zdGF0ZSA9IDE7CisJcF9wcml2LT5kdHJfc3RhdGUgPSAxOworCXBfcHJpdi0+YmF1ZCA9IDk2MDA7CisKKwkvKiBmb3JjZSBiYXVkIGFuZCBsY3IgdG8gYmUgc2V0IG9uIG9wZW4gKi8KKwlwX3ByaXYtPm9sZF9iYXVkID0gMDsKKwlwX3ByaXYtPm9sZF9jZmxhZyA9IDA7CisKKwlwX3ByaXYtPm91dF9mbGlwID0gMDsKKwlwX3ByaXYtPmluX2ZsaXAgPSAwOworCisJLyogUmVzZXQgbG93IGxldmVsIGRhdGEgdG9nZ2xlIGFuZCBzdGFydCByZWFkaW5nIGZyb20gZW5kcG9pbnRzICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoKHVyYiA9IHBfcHJpdi0+aW5fdXJic1tpXSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJCS8qIG1ha2Ugc3VyZSBlbmRwb2ludCBkYXRhIHRvZ2dsZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGV2aWNlICovCisJCQorCQl1c2JfY2xlYXJfaGFsdCh1cmItPmRldiwgdXJiLT5waXBlKTsKKworCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpICE9IDApIHsKKwkJCWRiZygiJXMgLSBzdWJtaXQgdXJiICVkIGZhaWxlZCAoJWQpIiwgX19GVU5DVElPTl9fLCBpLCBlcnIpOworCQl9CisJfQorCisJLyogUmVzZXQgbG93IGxldmVsIGRhdGEgdG9nZ2xlIG9uIG91dCBlbmRwb2ludHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgodXJiID0gcF9wcml2LT5vdXRfdXJic1tpXSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQkvKiB1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksIHVzYl9waXBlb3V0KHVyYi0+cGlwZSksIDApOyAqLworCX0KKworCS8qIGdldCB0aGUgdGVybWluYWwgY29uZmlnIGZvciB0aGUgc2V0dXAgbWVzc2FnZSBub3cgc28gd2UgZG9uJ3QgCisJICogbmVlZCB0byBzZW5kIDIgb2YgdGhlbSAqLworCisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJZGV2aWNlX3BvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJLyogQmF1ZCByYXRlIGNhbGN1bGF0aW9uIHRha2VzIGJhdWQgcmF0ZSBhcyBhbiBpbnRlZ2VyCisJICAgc28gb3RoZXIgcmF0ZXMgY2FuIGJlIGdlbmVyYXRlZCBpZiBkZXNpcmVkLiAqLworCWJhdWRfcmF0ZSA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJLyogSWYgbm8gbWF0Y2ggb3IgaW52YWxpZCwgbGVhdmUgYXMgZGVmYXVsdCAqLwkJCisJaWYgKGJhdWRfcmF0ZSA+PSAwCisJICAgICYmIGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShiYXVkX3JhdGUsIGRfZGV0YWlscy0+YmF1ZGNsaywKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9CQVVEX1JBVEVfT0spIHsKKwkJcF9wcml2LT5iYXVkID0gYmF1ZF9yYXRlOworCX0KKworCS8qIHNldCBDVFMvUlRTIGhhbmRzaGFrZSBldGMuICovCisJcF9wcml2LT5jZmxhZyA9IGNmbGFnOworCXBfcHJpdi0+Zmxvd19jb250cm9sID0gKGNmbGFnICYgQ1JUU0NUUyk/IGZsb3dfY3RzOiBmbG93X25vbmU7CisKKwlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMSk7CisJLy9tZGVsYXkoMTAwKTsKKwkvL2tleXNwYW5fc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICh1cmIgJiYgdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9BU1lOQ19VTkxJTks7CisJCXVzYl9raWxsX3VyYih1cmIpOworCX0KK30KKworc3RhdGljIHZvaWQga2V5c3Bhbl9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQJCQlpOworCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwlwX3ByaXYtPnJ0c19zdGF0ZSA9IDA7CisJcF9wcml2LT5kdHJfc3RhdGUgPSAwOworCQorCWlmIChzZXJpYWwtPmRldikgeworCQlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMik7CisJCS8qIHBpbG90LXhmZXIgc2VlbXMgdG8gd29yayBiZXN0IHdpdGggdGhpcyBkZWxheSAqLworCQltZGVsYXkoMTAwKTsKKwkJLy8ga2V5c3Bhbl9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKwl9CisKKwkvKndoaWxlIChwX3ByaXYtPm91dGNvbnRfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZygiJXMgLSB1cmIgaW4gcHJvZ3Jlc3MiLCBfX0ZVTkNUSU9OX18pOworCX0qLworCisJcF9wcml2LT5vdXRfZmxpcCA9IDA7CisJcF9wcml2LT5pbl9mbGlwID0gMDsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCisJCXN0b3BfdXJiKHBfcHJpdi0+aW5hY2tfdXJiKTsKKwkJLyogc3RvcF91cmIocF9wcml2LT5vdXRjb250X3VyYik7ICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXN0b3BfdXJiKHBfcHJpdi0+aW5fdXJic1tpXSk7CisJCQlzdG9wX3VyYihwX3ByaXYtPm91dF91cmJzW2ldKTsKKwkJfQorCX0KKwlwb3J0LT50dHkgPSBOVUxMOworfQorCisKKwkvKiBkb3dubG9hZCB0aGUgZmlybXdhcmUgdG8gYSBwcmUtcmVudW1lcmF0aW9uIGRldmljZSAqLworc3RhdGljIGludCBrZXlzcGFuX2Zha2Vfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgCQkJCXJlc3BvbnNlOworCWNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIAkqcmVjb3JkOworCWNoYXIJCQkJKmZ3X25hbWU7CisKKwlkYmcoIktleXNwYW4gc3RhcnR1cCB2ZXJzaW9uICUwNHggcHJvZHVjdCAlMDR4IiwKKwkgICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKKwkgICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCisJaWYgKChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpICYgMHg4MDAwKSAhPSAweDgwMDApIHsKKwkJZGJnKCJGaXJtd2FyZSBhbHJlYWR5IGxvYWRlZC4gIFF1aXR0aW5nLiIpOworCQlyZXR1cm4oMSk7CisJfQorCisJCS8qIFNlbGVjdCBmaXJtd2FyZSBpbWFnZSBvbiB0aGUgYmFzaXMgb2YgaWRQcm9kdWN0ICovCisJc3dpdGNoIChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CisJY2FzZSBrZXlzcGFuX3VzYTI4X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2EyOF9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0EyOCI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTI4eF9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMjh4X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTI4WCI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTI4eGFfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTI4eGFfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMjhYQSI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTI4eGJfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTI4eGJfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMjhYQiI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOV9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0ExOSI7CisJCWJyZWFrOworCQkJICAgICAKKwljYXNlIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMTlxaV9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0ExOVFJIjsKKwkJYnJlYWs7CisJCQkgICAgIAorCWNhc2Uga2V5c3Bhbl9tcHJfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX21wcl9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJNUFIiOworCQlicmVhazsKKworCWNhc2Uga2V5c3Bhbl91c2ExOXF3X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOXF3X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTE5UUkiOworCQlicmVhazsKKwkJCSAgICAgCisJY2FzZSBrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMTh4X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTE4WCI7CisJCWJyZWFrOworCQkJICAgICAKKwljYXNlIGtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOXdfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMTlXIjsKKwkJYnJlYWs7CisJCQorCWNhc2Uga2V5c3Bhbl91c2E0OXdfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTQ5d19maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0E0OVciOworCQlicmVhazsKKworCWNhc2Uga2V5c3Bhbl91c2E0OXdsY19wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhNDl3bGNfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBNDlXTEMiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJlY29yZCA9IE5VTEw7CisJCWZ3X25hbWUgPSAiVW5rbm93biI7CisJCWJyZWFrOworCX0KKworCWlmIChyZWNvcmQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiUmVxdWlyZWQga2V5c3BhbiBmaXJtd2FyZSBpbWFnZSAoJXMpIHVuYXZhaWxhYmxlLlxuIiwgZndfbmFtZSk7CisJCXJldHVybigxKTsKKwl9CisKKwlkYmcoIlVwbG9hZGluZyBLZXlzcGFuICVzIGZpcm13YXJlLiIsIGZ3X25hbWUpOworCisJCS8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBpbWFnZSAqLworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0KHNlcmlhbCwgMSk7CisKKwl3aGlsZShyZWNvcmQtPmFkZHJlc3MgIT0gMHhmZmZmKSB7CisJCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkoc2VyaWFsLCByZWNvcmQtPmFkZHJlc3MsCisJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCisJCQkJCSAgICAgcmVjb3JkLT5kYXRhX3NpemUsIDB4YTApOworCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBLZXlzcGFuIgorCQkJCSJmaXJtd2FyZSAoJWQgJTA0WCAlcCAlZClcbiIsCisJCQkJcmVzcG9uc2UsIAorCQkJCXJlY29yZC0+YWRkcmVzcywgcmVjb3JkLT5kYXRhLCByZWNvcmQtPmRhdGFfc2l6ZSk7CisJCQlicmVhazsKKwkJfQorCQlyZWNvcmQrKzsKKwl9CisJCS8qIGJyaW5nIGRldmljZSBvdXQgb2YgcmVzZXQuIFJlbnVtZXJhdGlvbiB3aWxsIG9jY3VyIGluIGEKKwkJICAgbW9tZW50IGFuZCB0aGUgbmV3IGRldmljZSB3aWxsIGJpbmQgdG8gdGhlIHJlYWwgZHJpdmVyICovCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAwKTsKKworCS8qIHdlIGRvbid0IHdhbnQgdGhpcyBkZXZpY2UgdG8gaGF2ZSBhIGRyaXZlciBhc3NpZ25lZCB0byBpdC4gKi8KKwlyZXR1cm4gKDEpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkga2V5c3Bhbl9zZXR1cF91cmJzICovCitzdGF0aWMgc3RydWN0IHVyYiAqa2V5c3Bhbl9zZXR1cF91cmIgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBlbmRwb2ludCwKKwkJCQkgICAgICBpbnQgZGlyLCB2b2lkICpjdHgsIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwkJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKworCWlmIChlbmRwb2ludCA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CQkvKiBlbmRwb2ludCBub3QgbmVlZGVkICovCisKKwlkYmcgKCIlcyAtIGFsbG9jIGZvciBlbmRwb2ludCAlZC4iLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50KTsKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwkJLyogTm8gSVNPICovCisJaWYgKHVyYiA9PSBOVUxMKSB7CisJCWRiZyAoIiVzIC0gYWxsb2MgZm9yIGVuZHBvaW50ICVkIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJCS8qIEZpbGwgVVJCIHVzaW5nIHN1cHBsaWVkIGRhdGEuICovCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKKwkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBlbmRwb2ludCkgfCBkaXIsCisJCSAgICAgIGJ1ZiwgbGVuLCBjYWxsYmFjaywgY3R4KTsKKworCXJldHVybiB1cmI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FsbGJhY2tzIHsKKwl2b2lkCSgqaW5zdGF0X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqZ2xvY29udF9jYWxsYmFjaykoc3RydWN0IHVyYiAqLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZAkoKmluZGF0X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqb3V0ZGF0X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqaW5hY2tfY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQJKCpvdXRjb250X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK30ga2V5c3Bhbl9jYWxsYmFja3NbXSA9IHsKKwl7CisJCS8qIG1zZ191c2EyNiBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTI2X2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyNl9nbG9jb250X2NhbGxiYWNrLAorCQkuaW5kYXRfY2FsbGJhY2sgPQl1c2EyNl9pbmRhdF9jYWxsYmFjaywKKwkJLm91dGRhdF9jYWxsYmFjayA9CXVzYTJ4X291dGRhdF9jYWxsYmFjaywKKwkJLmluYWNrX2NhbGxiYWNrID0JdXNhMjZfaW5hY2tfY2FsbGJhY2ssCisJCS5vdXRjb250X2NhbGxiYWNrID0JdXNhMjZfb3V0Y29udF9jYWxsYmFjaywKKwl9LCB7CisJCS8qIG1zZ191c2EyOCBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTI4X2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyOF9nbG9jb250X2NhbGxiYWNrLAorCQkuaW5kYXRfY2FsbGJhY2sgPQl1c2EyOF9pbmRhdF9jYWxsYmFjaywKKwkJLm91dGRhdF9jYWxsYmFjayA9CXVzYTJ4X291dGRhdF9jYWxsYmFjaywKKwkJLmluYWNrX2NhbGxiYWNrID0JdXNhMjhfaW5hY2tfY2FsbGJhY2ssCisJCS5vdXRjb250X2NhbGxiYWNrID0JdXNhMjhfb3V0Y29udF9jYWxsYmFjaywKKwl9LCB7CisJCS8qIG1zZ191c2E0OSBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTQ5X2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2E0OV9nbG9jb250X2NhbGxiYWNrLAorCQkuaW5kYXRfY2FsbGJhY2sgPQl1c2E0OV9pbmRhdF9jYWxsYmFjaywKKwkJLm91dGRhdF9jYWxsYmFjayA9CXVzYTJ4X291dGRhdF9jYWxsYmFjaywKKwkJLmluYWNrX2NhbGxiYWNrID0JdXNhNDlfaW5hY2tfY2FsbGJhY2ssCisJCS5vdXRjb250X2NhbGxiYWNrID0JdXNhNDlfb3V0Y29udF9jYWxsYmFjaywKKwl9LCB7CisJCS8qIG1zZ191c2E5MCBjYWxsYmFja3MgKi8KKwkJLmluc3RhdF9jYWxsYmFjayA9CXVzYTkwX2luc3RhdF9jYWxsYmFjaywKKwkJLmdsb2NvbnRfY2FsbGJhY2sgPQl1c2EyOF9nbG9jb250X2NhbGxiYWNrLAkJCisJCS5pbmRhdF9jYWxsYmFjayA9CXVzYTkwX2luZGF0X2NhbGxiYWNrLAorCQkub3V0ZGF0X2NhbGxiYWNrID0JdXNhMnhfb3V0ZGF0X2NhbGxiYWNrLAorCQkuaW5hY2tfY2FsbGJhY2sgPQl1c2EyOF9pbmFja19jYWxsYmFjaywKKwkJLm91dGNvbnRfY2FsbGJhY2sgPQl1c2E5MF9vdXRjb250X2NhbGxiYWNrLAorCX0KK307CisKKwkvKiBHZW5lcmljIHNldHVwIHVyYnMgZnVuY3Rpb24gdGhhdCB1c2VzCisJICAgZGF0YSBpbiBkZXZpY2VfZGV0YWlscyAqLworc3RhdGljIHZvaWQga2V5c3Bhbl9zZXR1cF91cmJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50CQkJCWksIGo7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJKnBfcHJpdjsKKwlzdHJ1Y3QgY2FsbGJhY2tzCQkqY2JhY2s7CisJaW50CQkJCWVuZHA7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKworCQkvKiBTZXR1cCB2YWx1ZXMgZm9yIHRoZSB2YXJpb3VzIGNhbGxiYWNrIHJvdXRpbmVzICovCisJY2JhY2sgPSAma2V5c3Bhbl9jYWxsYmFja3NbZF9kZXRhaWxzLT5tc2dfZm9ybWF0XTsKKworCQkvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIHVyYnMgZm9yIGVhY2ggb25lIHRoYXQgaXMgaW4gdXNlLCAKKwkJICAgc3RhcnRpbmcgd2l0aCBpbnN0YXQgZW5kcG9pbnRzICovCisJc19wcml2LT5pbnN0YXRfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKKwkJKHNlcmlhbCwgZF9kZXRhaWxzLT5pbnN0YXRfZW5kcG9pbnQsIFVTQl9ESVJfSU4sCisJCSBzZXJpYWwsIHNfcHJpdi0+aW5zdGF0X2J1ZiwgSU5TVEFUX0JVRkxFTiwKKwkJIGNiYWNrLT5pbnN0YXRfY2FsbGJhY2spOworCisJc19wcml2LT5nbG9jb250X3VyYiA9IGtleXNwYW5fc2V0dXBfdXJiCisJCShzZXJpYWwsIGRfZGV0YWlscy0+Z2xvY29udF9lbmRwb2ludCwgVVNCX0RJUl9PVVQsCisJCSBzZXJpYWwsIHNfcHJpdi0+Z2xvY29udF9idWYsIEdMT0NPTlRfQlVGTEVOLAorCQkgY2JhY2stPmdsb2NvbnRfY2FsbGJhY2spOworCisJCS8qIFNldHVwIGVuZHBvaW50cyBmb3IgZWFjaCBwb3J0IHNwZWNpZmljIHRoaW5nICovCisJZm9yIChpID0gMDsgaSA8IGRfZGV0YWlscy0+bnVtX3BvcnRzOyBpICsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCQkvKiBEbyBpbmRhdCBlbmRwb2ludHMgZmlyc3QsIG9uY2UgZm9yIGVhY2ggZmxpcCAqLworCQllbmRwID0gZF9kZXRhaWxzLT5pbmRhdF9lbmRwb2ludHNbaV07CisJCWZvciAoaiA9IDA7IGogPD0gZF9kZXRhaWxzLT5pbmRhdF9lbmRwX2ZsaXA7ICsraiwgKytlbmRwKSB7CisJCQlwX3ByaXYtPmluX3VyYnNbal0gPSBrZXlzcGFuX3NldHVwX3VyYgorCQkJCShzZXJpYWwsIGVuZHAsIFVTQl9ESVJfSU4sIHBvcnQsCisJCQkJIHBfcHJpdi0+aW5fYnVmZmVyW2pdLCA2NCwKKwkJCQkgY2JhY2stPmluZGF0X2NhbGxiYWNrKTsKKwkJfQorCQlmb3IgKDsgaiA8IDI7ICsraikKKwkJCXBfcHJpdi0+aW5fdXJic1tqXSA9IE5VTEw7CisKKwkJLyogb3V0ZGF0IGVuZHBvaW50cyBhbHNvIGhhdmUgZmxpcCAqLworCQllbmRwID0gZF9kZXRhaWxzLT5vdXRkYXRfZW5kcG9pbnRzW2ldOworCQlmb3IgKGogPSAwOyBqIDw9IGRfZGV0YWlscy0+b3V0ZGF0X2VuZHBfZmxpcDsgKytqLCArK2VuZHApIHsKKwkJCXBfcHJpdi0+b3V0X3VyYnNbal0gPSBrZXlzcGFuX3NldHVwX3VyYgorCQkJCShzZXJpYWwsIGVuZHAsIFVTQl9ESVJfT1VULCBwb3J0LAorCQkJCSBwX3ByaXYtPm91dF9idWZmZXJbal0sIDY0LAorCQkJCSBjYmFjay0+b3V0ZGF0X2NhbGxiYWNrKTsKKwkJfQorCQlmb3IgKDsgaiA8IDI7ICsraikKKwkJCXBfcHJpdi0+b3V0X3VyYnNbal0gPSBOVUxMOworCisJCS8qIGluYWNrIGVuZHBvaW50ICovCisJCXBfcHJpdi0+aW5hY2tfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKKwkJCShzZXJpYWwsIGRfZGV0YWlscy0+aW5hY2tfZW5kcG9pbnRzW2ldLCBVU0JfRElSX0lOLAorCQkJIHBvcnQsIHBfcHJpdi0+aW5hY2tfYnVmZmVyLCAxLCBjYmFjay0+aW5hY2tfY2FsbGJhY2spOworCisJCS8qIG91dGNvbnQgZW5kcG9pbnQgKi8KKwkJcF9wcml2LT5vdXRjb250X3VyYiA9IGtleXNwYW5fc2V0dXBfdXJiCisJCQkoc2VyaWFsLCBkX2RldGFpbHMtPm91dGNvbnRfZW5kcG9pbnRzW2ldLCBVU0JfRElSX09VVCwKKwkJCSBwb3J0LCBwX3ByaXYtPm91dGNvbnRfYnVmZmVyLCA2NCwKKwkJCSBjYmFjay0+b3V0Y29udF9jYWxsYmFjayk7CisJfQkKKworfQorCisvKiB1c2ExOSBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgcHJlc2NhbGVyICovCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMTlfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICB1OCAqcmF0ZV9sb3csIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKQoreworCXUzMiAJYjE2LAkvKiBiYXVkIHJhdGUgdGltZXMgMTYgKGFjdHVhbCByYXRlIHVzZWQgaW50ZXJuYWxseSkgKi8KKwkJZGl2LAkvKiBkaXZpc29yICovCQorCQljbnQ7CS8qIGludmVyc2Ugb2YgZGl2aXNvciAocHJvZ3JhbW1lZCBpbnRvIDgwNTEpICovCisJCQorCWRiZyAoIiVzIC0gJWQuIiwgX19GVU5DVElPTl9fLCBiYXVkX3JhdGUpOworCisJCS8qIHByZXZlbnQgZGl2aWRlIGJ5IHplcm8uLi4gICovCisJaWYoIChiMTYgPSAoYmF1ZF9yYXRlICogMTZMKSkgPT0gMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKworCQkvKiBBbnkgInN0YW5kYXJkIiByYXRlIG92ZXIgNTdrNiBpcyBtYXJnaW5hbCBvbiB0aGUgVVNBLTE5CisJCSAgIGFzIHdlIHJ1biBvdXQgb2YgZGl2aXNvciByZXNvbHV0aW9uLiAqLworCWlmIChiYXVkX3JhdGUgPiA1NzYwMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKworCQkvKiBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgYW5kIHRoZSBjb3VudGVyIChpdHMgaW52ZXJzZSkgKi8KKwlpZiggKGRpdiA9IChiYXVkY2xrIC8gYjE2KSkgPT0gMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKwllbHNlIHsKKwkJY250ID0gMCAtIGRpdjsKKwl9CisKKwlpZihkaXYgPiAweGZmZmYpIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisKKwkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub24tbnVsbCAqLworCWlmIChyYXRlX2xvdykgeworCQkqcmF0ZV9sb3cgPSAodTgpIChjbnQgJiAweGZmKTsKKwl9CisJaWYgKHJhdGVfaGkpIHsKKwkJKnJhdGVfaGkgPSAodTgpICgoY250ID4+IDgpICYgMHhmZik7CisJfQorCWlmIChyYXRlX2xvdyAmJiByYXRlX2hpKSB7CisJCWRiZyAoIiVzIC0gJWQgJTAyeCAlMDJ4LiIsIF9fRlVOQ1RJT05fXywgYmF1ZF9yYXRlLCAqcmF0ZV9oaSwgKnJhdGVfbG93KTsKKwl9CisJCisJcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7Cit9CisKKy8qIHVzYTE5aHMgZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIHByZXNjYWxlciAqLworc3RhdGljIGludCBrZXlzcGFuX3VzYTE5aHNfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICB1OCAqcmF0ZV9sb3csIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKQoreworCXUzMiAJYjE2LAkvKiBiYXVkIHJhdGUgdGltZXMgMTYgKGFjdHVhbCByYXRlIHVzZWQgaW50ZXJuYWxseSkgKi8KKwkJCWRpdjsJLyogZGl2aXNvciAqLwkKKwkJCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVyby4uLiAgKi8KKwlpZiggKGIxNiA9IChiYXVkX3JhdGUgKiAxNkwpKSA9PSAwKSAKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwkKKworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciAqLworCWlmKCAoZGl2ID0gKGJhdWRjbGsgLyBiMTYpKSA9PSAwKSAKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKworCWlmKGRpdiA+IDB4ZmZmZikgCisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisKKwkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub24tbnVsbCAqLworCWlmIChyYXRlX2xvdykgCisJCSpyYXRlX2xvdyA9ICh1OCkgKGRpdiAmIDB4ZmYpOworCQorCWlmIChyYXRlX2hpKSAKKwkJKnJhdGVfaGkgPSAodTgpICgoZGl2ID4+IDgpICYgMHhmZik7CisJCisJaWYgKHJhdGVfbG93ICYmIHJhdGVfaGkpIAorCQlkYmcgKCIlcyAtICVkICUwMnggJTAyeC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSwgKnJhdGVfaGksICpyYXRlX2xvdyk7CisJCisJcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICAgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSkKK3sKKwl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCisJCWNsaywJLyogY2xvY2sgd2l0aCAxMy84IHByZXNjYWxlciAqLworCQlkaXYsCS8qIGRpdmlzb3IgdXNpbmcgMTMvOCBwcmVzY2FsZXIgKi8JCisJCXJlcywJLyogcmVzdWx0aW5nIGJhdWQgcmF0ZSB1c2luZyAxMy84IHByZXNjYWxlciAqLworCQlkaWZmLAkvKiBlcnJvciB1c2luZyAxMy84IHByZXNjYWxlciAqLworCQlzbWFsbGVzdF9kaWZmOworCXU4CWJlc3RfcHJlc2NhbGVyOworCWludAlpOworCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVybyAqLworCWlmKCAoYjE2ID0gYmF1ZF9yYXRlICogMTZMKSA9PSAwKSB7CisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJfQorCisJCS8qIENhbGN1bGF0ZSBwcmVzY2FsZXIgYnkgdHJ5aW5nIHRoZW0gYWxsIGFuZCBsb29raW5nCisJCSAgIGZvciBiZXN0IGZpdCAqLworCQkKKwkJLyogc3RhcnQgd2l0aCBsYXJnZXN0IHBvc3NpYmxlIGRpZmZlcmVuY2UgKi8KKwlzbWFsbGVzdF9kaWZmID0gMHhmZmZmZmZmZjsKKworCQkvKiAwIGlzIGFuIGludmFsaWQgcHJlc2NhbGVyLCB1c2VkIGFzIGEgZmxhZyAqLworCWJlc3RfcHJlc2NhbGVyID0gMDsKKworCWZvcihpID0gODsgaSA8PSAweGZmOyArK2kpIHsKKwkJY2xrID0gKGJhdWRjbGsgKiA4KSAvICh1MzIpIGk7CisJCQorCQlpZiggKGRpdiA9IGNsayAvIGIxNikgPT0gMCkgeworCQkJY29udGludWU7CisJCX0KKworCQlyZXMgPSBjbGsgLyBkaXY7CisJCWRpZmY9IChyZXMgPiBiMTYpID8gKHJlcy1iMTYpIDogKGIxNi1yZXMpOworCisJCWlmKGRpZmYgPCBzbWFsbGVzdF9kaWZmKSB7CisJCQliZXN0X3ByZXNjYWxlciA9IGk7CisJCQlzbWFsbGVzdF9kaWZmID0gZGlmZjsKKwkJfQorCX0KKworCWlmKGJlc3RfcHJlc2NhbGVyID09IDApIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisKKwljbGsgPSAoYmF1ZGNsayAqIDgpIC8gKHUzMikgYmVzdF9wcmVzY2FsZXI7CisJZGl2ID0gY2xrIC8gYjE2OworCisJCS8qIHJldHVybiB0aGUgZGl2aXNvciBhbmQgcHJlc2NhbGVyIGlmIG5vbi1udWxsICovCisJaWYgKHJhdGVfbG93KSB7CisJCSpyYXRlX2xvdyA9ICh1OCkgKGRpdiAmIDB4ZmYpOworCX0KKwlpZiAocmF0ZV9oaSkgeworCQkqcmF0ZV9oaSA9ICh1OCkgKChkaXYgPj4gOCkgJiAweGZmKTsKKwl9CisJaWYgKHByZXNjYWxlcikgeworCQkqcHJlc2NhbGVyID0gYmVzdF9wcmVzY2FsZXI7CisJCS8qICBkYmcoIiVzIC0gJWQgJWQiLCBfX0ZVTkNUSU9OX18sICpwcmVzY2FsZXIsIGRpdik7ICovCisJfQorCXJldHVybiAoS0VZU1BBTl9CQVVEX1JBVEVfT0spOworfQorCisJLyogVVNBLTI4IHN1cHBvcnRzIGRpZmZlcmVudCBtYXhpbXVtIGJhdWQgcmF0ZXMgb24gZWFjaCBwb3J0ICovCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMjhfY2FsY19iYXVkKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLCB1OCAqcmF0ZV9oaSwKKwkJCQkgICAgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSkKK3sKKwl1MzIgCWIxNiwJLyogYmF1ZCByYXRlIHRpbWVzIDE2IChhY3R1YWwgcmF0ZSB1c2VkIGludGVybmFsbHkpICovCisJCWRpdiwJLyogZGl2aXNvciAqLwkKKwkJY250OwkvKiBpbnZlcnNlIG9mIGRpdmlzb3IgKHByb2dyYW1tZWQgaW50byA4MDUxKSAqLworCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVybyAqLworCWlmICgoYjE2ID0gYmF1ZF9yYXRlICogMTZMKSA9PSAwKQorCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBhbmQgdGhlIGNvdW50ZXIgKGl0cyBpbnZlcnNlKSAqLworCWlmICgoZGl2ID0gKEtFWVNQQU5fVVNBMjhfQkFVRENMSyAvIGIxNikpID09IDApIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisJZWxzZSB7CisJCWNudCA9IDAgLSBkaXY7CisJfQorCisJCS8qIGNoZWNrIGZvciBvdXQgb2YgcmFuZ2UsIGJhc2VkIG9uIHBvcnRudW0sIAorCQkgICBhbmQgcmV0dXJuIHJlc3VsdCAqLworCWlmKHBvcnRudW0gPT0gMCkgeworCQlpZihkaXYgPiAweGZmZmYpCisJCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKwllbHNlIHsKKwkJaWYocG9ydG51bSA9PSAxKSB7CisJCQlpZihkaXYgPiAweGZmKSB7CisJCQkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJCX0KKwl9CisKKwkJLyogcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlcyBpZiBub3QgTlVMTAorCQkgICAocG9ydCAxIHdpbGwgaWdub3JlIHJldEhpKSAqLworCWlmIChyYXRlX2xvdykgeworCQkqcmF0ZV9sb3cgPSAodTgpIChjbnQgJiAweGZmKTsKKwl9CisJaWYgKHJhdGVfaGkpIHsKKwkJKnJhdGVfaGkgPSAodTgpICgoY250ID4+IDgpICYgMHhmZik7CisJfQorCWRiZyAoIiVzIC0gJWQgT0suIiwgX19GVU5DVElPTl9fLCBiYXVkX3JhdGUpOworCXJldHVybiAoS0VZU1BBTl9CQVVEX1JBVEVfT0spOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwkJCisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCQkqc19wcml2OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQgCQkJCQlvdXRjb250X3VyYjsKKwlzdHJ1Y3QgdXJiCQkJCSp0aGlzX3VyYjsKKwlpbnQgCQkJCQlkZXZpY2VfcG9ydCwgZXJyOworCisJZGJnICgiJXMgcmVzZXQ9JWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X3BvcnQpOyAKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKwlkZXZpY2VfcG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlvdXRjb250X3VyYiA9IGRfZGV0YWlscy0+b3V0Y29udF9lbmRwb2ludHNbcG9ydC0+bnVtYmVyXTsKKwl0aGlzX3VyYiA9IHBfcHJpdi0+b3V0Y29udF91cmI7CisKKwlkYmcoIiVzIC0gZW5kcG9pbnQgJWQiLCBfX0ZVTkNUSU9OX18sIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpKTsKKworCQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cmIgdGhlbiBzZW5kIHRoZSBtZXNzYWdlICovCisJaWYgKHRoaXNfdXJiID09IE5VTEwpIHsKKwkJZGJnKCIlcyAtIG9vcHMgbm8gdXJiLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTYXZlIHJlc2V0IHBvcnQgdmFsIGZvciByZXNlbmQuCisJRG9uJ3Qgb3ZlcndyaXRlIHJlc2VuZCBmb3IgY2xvc2UgY29uZGl0aW9uLiAqLworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250ICE9IDMpCisJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKKwlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJLyogIGRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsgKi8KKwkJbWRlbGF5KDUpOworCQlyZXR1cm4oLTEpOworCX0KKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKHN0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRDb250cm9sTWVzc2FnZSkpOworCQorCQkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCWlmIChwX3ByaXYtPm9sZF9iYXVkICE9IHBfcHJpdi0+YmF1ZCkgeworCQlwX3ByaXYtPm9sZF9iYXVkID0gcF9wcml2LT5iYXVkOworCQltc2cuc2V0Q2xvY2tpbmcgPSAweGZmOworCQlpZiAoZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlCisJCSAgICAocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssICZtc2cuYmF1ZEhpLAorCQkgICAgICZtc2cuYmF1ZExvLCAmbXNnLnByZXNjYWxlciwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7CisJCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgJWQgcmVxdWVzdGVkLCB1c2luZyA5NjAwLiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICBwX3ByaXYtPmJhdWQpOworCQkJbXNnLmJhdWRMbyA9IDA7CisJCQltc2cuYmF1ZEhpID0gMTI1OwkvKiBWYWx1ZXMgZm9yIDk2MDAgYmF1ZCAqLworCQkJbXNnLnByZXNjYWxlciA9IDEwOworCQl9CisJCW1zZy5zZXRQcmVzY2FsZXIgPSAweGZmOworCX0KKworCW1zZy5sY3IgPSAocF9wcml2LT5jZmxhZyAmIENTVE9QQik/IFNUT1BCSVRTXzY3OF8yOiBTVE9QQklUU181Njc4XzE7CisJc3dpdGNoIChwX3ByaXYtPmNmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzY7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU183OworCQlicmVhazsKKwljYXNlIENTODoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfODsKKwkJYnJlYWs7CisJfQorCWlmIChwX3ByaXYtPmNmbGFnICYgUEFSRU5CKSB7CisJCS8qIG5vdGUgVVNBX1BBUklUWV9OT05FID09IDAgKi8KKwkJbXNnLmxjciB8PSAocF9wcml2LT5jZmxhZyAmIFBBUk9ERCk/CisJCQlVU0FfUEFSSVRZX09ERDogVVNBX1BBUklUWV9FVkVOOworCX0KKwltc2cuc2V0TGNyID0gMHhmZjsKKworCW1zZy5jdHNGbG93Q29udHJvbCA9IChwX3ByaXYtPmZsb3dfY29udHJvbCA9PSBmbG93X2N0cyk7CisJbXNnLnhvbkZsb3dDb250cm9sID0gMDsKKwltc2cuc2V0Rmxvd0NvbnRyb2wgPSAweGZmOworCW1zZy5mb3J3YXJkaW5nTGVuZ3RoID0gMTY7CisJbXNnLnhvbkNoYXIgPSAxNzsKKwltc2cueG9mZkNoYXIgPSAxOTsKKworCS8qIE9wZW5pbmcgcG9ydCAqLworCWlmIChyZXNldF9wb3J0ID09IDEpIHsKKwkJbXNnLl90eE9uID0gMTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDE7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsKKwl9CisKKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLl90eE9uID0gMDsKKwkJbXNnLl90eE9mZiA9IDE7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDE7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMDsKKwl9CisKKwkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCisJZWxzZSB7CisJCW1zZy5fdHhPbiA9ICghIHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLnJ4T24gPSAwOworCQltc2cucnhPZmYgPSAwOworCQltc2cucnhGbHVzaCA9IDA7CisJCW1zZy5yeEZvcndhcmQgPSAwOworCQltc2cucmV0dXJuU3RhdHVzID0gMDsKKwkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDB4MDsKKwl9CisKKwkJLyogRG8gaGFuZHNoYWtpbmcgb3V0cHV0cyAqLwkKKwltc2cuc2V0VHhUcmlTdGF0ZV9zZXRSdHMgPSAweGZmOworCW1zZy50eFRyaVN0YXRlX3J0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOworCisJbXNnLnNldEhza29hX3NldER0ciA9IDB4ZmY7CisJbXNnLmhza29hX2R0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOworCQkKKwlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKKwltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKKwkKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOworCisJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorI2lmIDAKKwllbHNlIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKCVkKSBPSyAlZCBieXRlcyAoZW5kICVkKSIsIF9fRlVOQ1RJT05fXworCQkgICAgb3V0Y29udF91cmIsIHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3VzYTI4X3NlbmRfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICAgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgaW50IHJlc2V0X3BvcnQpCit7CisJc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlCW1zZzsJCQorCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlCSAJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCQkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisJc3RydWN0IHVyYgkJCQkqdGhpc191cmI7CisJaW50IAkJCQkJZGV2aWNlX3BvcnQsIGVycjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKwlkZXZpY2VfcG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoKHRoaXNfdXJiID0gcF9wcml2LT5vdXRjb250X3VyYikgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNhdmUgcmVzZXQgcG9ydCB2YWwgZm9yIHJlc2VuZC4KKwkgICBEb24ndCBvdmVyd3JpdGUgcmVzZW5kIGZvciBjbG9zZSBjb25kaXRpb24uICovCisJaWYgKHBfcHJpdi0+cmVzZW5kX2NvbnQgIT0gMykKKwkJcF9wcml2LT5yZXNlbmRfY29udCA9IHJlc2V0X3BvcnQgKyAxOworCWlmICh0aGlzX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcgKCIlcyBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQltZGVsYXkoNSk7CisJCXJldHVybigtMSk7CisJfQorCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlKSk7CisKKwltc2cuc2V0QmF1ZFJhdGUgPSAxOworCWlmIChkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssCisJCSZtc2cuYmF1ZEhpLCAmbXNnLmJhdWRMbywgTlVMTCwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7CisJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSByZXF1ZXN0ZWQgJWQuIiwgX19GVU5DVElPTl9fLCBwX3ByaXYtPmJhdWQpOworCQltc2cuYmF1ZExvID0gMHhmZjsKKwkJbXNnLmJhdWRIaSA9IDB4YjI7CS8qIFZhbHVlcyBmb3IgOTYwMCBiYXVkICovCisJfQorCisJLyogSWYgcGFyaXR5IGlzIGVuYWJsZWQsIHdlIG11c3QgY2FsY3VsYXRlIGl0IG91cnNlbHZlcy4gKi8KKwltc2cucGFyaXR5ID0gMDsJCS8qIFhYWCBmb3Igbm93ICovCisKKwltc2cuY3RzRmxvd0NvbnRyb2wgPSAocF9wcml2LT5mbG93X2NvbnRyb2wgPT0gZmxvd19jdHMpOworCW1zZy54b25GbG93Q29udHJvbCA9IDA7CisKKwkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzLCBEVFIgaXMgaW52ZXJ0ZWQgcmVsYXRpdmUgdG8gUlRTICovCQorCW1zZy5ydHMgPSBwX3ByaXYtPnJ0c19zdGF0ZTsKKwltc2cuZHRyID0gcF9wcml2LT5kdHJfc3RhdGU7CisKKwltc2cuZm9yd2FyZGluZ0xlbmd0aCA9IDE2OworCW1zZy5mb3J3YXJkTXMgPSAxMDsKKwltc2cuYnJlYWtUaHJlc2hvbGQgPSA0NTsKKwltc2cueG9uQ2hhciA9IDE3OworCW1zZy54b2ZmQ2hhciA9IDE5OworCisJLyptc2cucmV0dXJuU3RhdHVzID0gMTsKKwltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsqLworCS8qIE9wZW5pbmcgcG9ydCAqLworCWlmIChyZXNldF9wb3J0ID09IDEpIHsKKwkJbXNnLl90eE9uID0gMTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4Rm9yY2VYb2ZmID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDE7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsKKwl9CisJLyogQ2xvc2luZyBwb3J0ICovCisJZWxzZSBpZiAocmVzZXRfcG9ydCA9PSAyKSB7CisJCW1zZy5fdHhPbiA9IDA7CisJCW1zZy5fdHhPZmYgPSAxOworCQltc2cudHhGbHVzaCA9IDA7CisJCW1zZy50eEZvcmNlWG9mZiA9IDA7CisJCW1zZy50eEJyZWFrID0gMDsKKwkJbXNnLnJ4T24gPSAwOworCQltc2cucnhPZmYgPSAxOworCQltc2cucnhGbHVzaCA9IDE7CisJCW1zZy5yeEZvcndhcmQgPSAwOworCQltc2cucmV0dXJuU3RhdHVzID0gMDsKKwkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDA7CisJfQorCS8qIFNlbmRpbmcgaW50ZXJtZWRpYXRlIGNvbmZpZ3MgKi8KKwllbHNlIHsKKwkJbXNnLl90eE9uID0gKCEgcF9wcml2LT5icmVha19vbik7CisJCW1zZy5fdHhPZmYgPSAwOworCQltc2cudHhGbHVzaCA9IDA7CisJCW1zZy50eEZvcmNlWG9mZiA9IDA7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMDsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHgwOworCX0KKworCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSAwOworCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOworCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGRldmljZSBvbiBjb250cm9sIGVuZHBvaW50ICovCisJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKKworCXRoaXNfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoc2V0dXApIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfQorI2lmIDAKKwllbHNlIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHNldHVwKSBPSyAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwl9CisjZW5kaWYKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl91c2E0OV9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICAgIGludCByZXNldF9wb3J0KQoreworCXN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRDb250cm9sTWVzc2FnZQltc2c7CQkKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCWludCAJCQkJCWdsb2NvbnRfdXJiOworCXN0cnVjdCB1cmIJCQkJKnRoaXNfdXJiOworCWludCAJCQkJCWVyciwgZGV2aWNlX3BvcnQ7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHNfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwlnbG9jb250X3VyYiA9IGRfZGV0YWlscy0+Z2xvY29udF9lbmRwb2ludDsKKwl0aGlzX3VyYiA9IHNfcHJpdi0+Z2xvY29udF91cmI7CisKKwkJLyogV29yayBvdXQgd2hpY2ggcG9ydCB3aXRoaW4gdGhlIGRldmljZSBpcyBiZWluZyBzZXR1cCAqLworCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBlbmRwb2ludCAlZCBwb3J0ICVkICglZCkiLF9fRlVOQ1RJT05fXywgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSksIHBvcnQtPm51bWJlciwgZGV2aWNlX3BvcnQpOworCisJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVyYiB0aGVuIHNlbmQgdGhlIG1lc3NhZ2UgKi8KKwlpZiAodGhpc191cmIgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIgZm9yIHBvcnQgJWQuIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2F2ZSByZXNldCBwb3J0IHZhbCBmb3IgcmVzZW5kLgorCSAgIERvbid0IG92ZXJ3cml0ZSByZXNlbmQgZm9yIGNsb3NlIGNvbmRpdGlvbi4gKi8KKwlpZiAocF9wcml2LT5yZXNlbmRfY29udCAhPSAzKQorCQlwX3ByaXYtPnJlc2VuZF9jb250ID0gcmVzZXRfcG9ydCArIDE7CisJaWYgKHRoaXNfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCS8qICBkYmcgKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7ICovCisJCW1kZWxheSg1KTsKKwkJcmV0dXJuKC0xKTsKKwl9CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mIChzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9wb3J0Q29udHJvbE1lc3NhZ2UpKTsKKworCS8qbXNnLnBvcnROdW1iZXIgPSBwb3J0LT5udW1iZXI7Ki8KKwltc2cucG9ydE51bWJlciA9IGRldmljZV9wb3J0OworCQorCQkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCWlmIChwX3ByaXYtPm9sZF9iYXVkICE9IHBfcHJpdi0+YmF1ZCkgeworCQlwX3ByaXYtPm9sZF9iYXVkID0gcF9wcml2LT5iYXVkOworCQltc2cuc2V0Q2xvY2tpbmcgPSAweGZmOworCQlpZiAoZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlCisJCSAgICAocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssICZtc2cuYmF1ZEhpLAorCQkgICAgICZtc2cuYmF1ZExvLCAmbXNnLnByZXNjYWxlciwgZGV2aWNlX3BvcnQpID09IEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUgKSB7CisJCQlkYmcoIiVzIC0gSW52YWxpZCBiYXVkIHJhdGUgJWQgcmVxdWVzdGVkLCB1c2luZyA5NjAwLiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICBwX3ByaXYtPmJhdWQpOworCQkJbXNnLmJhdWRMbyA9IDA7CisJCQltc2cuYmF1ZEhpID0gMTI1OwkvKiBWYWx1ZXMgZm9yIDk2MDAgYmF1ZCAqLworCQkJbXNnLnByZXNjYWxlciA9IDEwOworCQl9CisJCS8vbXNnLnNldFByZXNjYWxlciA9IDB4ZmY7CisJfQorCisJbXNnLmxjciA9IChwX3ByaXYtPmNmbGFnICYgQ1NUT1BCKT8gU1RPUEJJVFNfNjc4XzI6IFNUT1BCSVRTXzU2NzhfMTsKKwlzd2l0Y2ggKHBfcHJpdi0+Y2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU181OworCQlicmVhazsKKwljYXNlIENTNjoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNjsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzc7CisJCWJyZWFrOworCWNhc2UgQ1M4OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU184OworCQlicmVhazsKKwl9CisJaWYgKHBfcHJpdi0+Y2ZsYWcgJiBQQVJFTkIpIHsKKwkJLyogbm90ZSBVU0FfUEFSSVRZX05PTkUgPT0gMCAqLworCQltc2cubGNyIHw9IChwX3ByaXYtPmNmbGFnICYgUEFST0REKT8KKwkJCVVTQV9QQVJJVFlfT0REOiBVU0FfUEFSSVRZX0VWRU47CisJfQorCW1zZy5zZXRMY3IgPSAweGZmOworCisJbXNnLmN0c0Zsb3dDb250cm9sID0gKHBfcHJpdi0+Zmxvd19jb250cm9sID09IGZsb3dfY3RzKTsKKwltc2cueG9uRmxvd0NvbnRyb2wgPSAwOworCW1zZy5zZXRGbG93Q29udHJvbCA9IDB4ZmY7CisJCisJbXNnLmZvcndhcmRpbmdMZW5ndGggPSAxNjsKKwltc2cueG9uQ2hhciA9IDE3OworCW1zZy54b2ZmQ2hhciA9IDE5OworCisJLyogT3BlbmluZyBwb3J0ICovIAorCWlmIChyZXNldF9wb3J0ID09IDEpIHsKKwkJbXNnLl90eE9uID0gMTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDE7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHhmZjsKKwkJbXNnLmVuYWJsZVBvcnQgPSAxOworCQltc2cuZGlzYWJsZVBvcnQgPSAwOworCX0KKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLl90eE9uID0gMDsKKwkJbXNnLl90eE9mZiA9IDE7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDE7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMDsKKwkJbXNnLmVuYWJsZVBvcnQgPSAwOworCQltc2cuZGlzYWJsZVBvcnQgPSAxOworCX0KKwkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCisJZWxzZSB7CisJCW1zZy5fdHhPbiA9ICghIHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLnJ4T24gPSAwOworCQltc2cucnhPZmYgPSAwOworCQltc2cucnhGbHVzaCA9IDA7CisJCW1zZy5yeEZvcndhcmQgPSAwOworCQltc2cucmV0dXJuU3RhdHVzID0gMDsKKwkJbXNnLnJlc2V0RGF0YVRvZ2dsZSA9IDB4MDsKKwkJbXNnLmVuYWJsZVBvcnQgPSAwOworCQltc2cuZGlzYWJsZVBvcnQgPSAwOworCX0KKworCQkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzICovCQorCW1zZy5zZXRSdHMgPSAweGZmOworCW1zZy5ydHMgPSBwX3ByaXYtPnJ0c19zdGF0ZTsKKworCW1zZy5zZXREdHIgPSAweGZmOworCW1zZy5kdHIgPSBwX3ByaXYtPmR0cl9zdGF0ZTsKKwkJCisJcF9wcml2LT5yZXNlbmRfY29udCA9IDA7CisJbWVtY3B5ICh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAmbXNnLCBzaXplb2YobXNnKSk7CisJCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGRldmljZSBvbiBjb250cm9sIGVuZHBvaW50ICovCisJdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YobXNnKTsKKworCXRoaXNfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoc2V0dXApIGZhaWxlZCAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCX0KKyNpZiAwCisJZWxzZSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYiglZCkgT0sgJWQgYnl0ZXMgKGVuZCAlZCkiLCBfX0ZVTkNUSU9OX18sCisJCSAgICBvdXRjb250X3VyYiwgdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdXNhOTBfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwkJCisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCQkqc19wcml2OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlzdHJ1Y3QgdXJiCQkJCSp0aGlzX3VyYjsKKwlpbnQgCQkJCQllcnI7CisJdTgJCQkJCQlwcmVzY2FsZXI7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHNfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlpZiAoKHRoaXNfdXJiID0gcF9wcml2LT5vdXRjb250X3VyYikgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNhdmUgcmVzZXQgcG9ydCB2YWwgZm9yIHJlc2VuZC4KKwkgICBEb24ndCBvdmVyd3JpdGUgcmVzZW5kIGZvciBvcGVuL2Nsb3NlIGNvbmRpdGlvbi4gKi8KKwlpZiAoKHJlc2V0X3BvcnQgKyAxKSA+IHBfcHJpdi0+cmVzZW5kX2NvbnQpCisJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKKwlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJZGJnICgiJXMgYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJbWRlbGF5KDUpOworCQlyZXR1cm4oLTEpOworCX0KKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKHN0cnVjdCBrZXlzcGFuX3VzYTkwX3BvcnRDb250cm9sTWVzc2FnZSkpOworCisJLyogT25seSBzZXQgYmF1ZCByYXRlIGlmIGl0J3MgY2hhbmdlZCAqLwkKKwlpZiAocF9wcml2LT5vbGRfYmF1ZCAhPSBwX3ByaXYtPmJhdWQpIHsKKwkJcF9wcml2LT5vbGRfYmF1ZCA9IHBfcHJpdi0+YmF1ZDsKKwkJbXNnLnNldENsb2NraW5nID0gMHgwMTsKKwkJaWYgKGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZQorCQkgICAgKHBfcHJpdi0+YmF1ZCwgZF9kZXRhaWxzLT5iYXVkY2xrLCAmbXNnLmJhdWRIaSwKKwkJICAgICAmbXNnLmJhdWRMbywgJnByZXNjYWxlciwgMCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKKwkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHBfcHJpdi0+YmF1ZCk7CisJCQlwX3ByaXYtPmJhdWQgPSA5NjAwOworCQkJZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlIChwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywgCisJCQkJJm1zZy5iYXVkSGksICZtc2cuYmF1ZExvLCAmcHJlc2NhbGVyLCAwKTsKKwkJfQorCQltc2cuc2V0UnhNb2RlID0gMTsKKwkJbXNnLnNldFR4TW9kZSA9IDE7CisJfQorCisJLyogbW9kZXMgbXVzdCBhbHdheXMgYmUgY29ycmVjdGx5IHNwZWNpZmllZCAqLworCWlmIChwX3ByaXYtPmJhdWQgPiA1NzYwMCkKKwl7CisJCW1zZy5yeE1vZGUgPSBSWE1PREVfRE1BOworCQltc2cudHhNb2RlID0gVFhNT0RFX0RNQTsKKwl9CisJZWxzZQorCXsKKwkJbXNnLnJ4TW9kZSA9IFJYTU9ERV9CWUhBTkQ7CisJCW1zZy50eE1vZGUgPSBUWE1PREVfQllIQU5EOworCX0KKworCW1zZy5sY3IgPSAocF9wcml2LT5jZmxhZyAmIENTVE9QQik/IFNUT1BCSVRTXzY3OF8yOiBTVE9QQklUU181Njc4XzE7CisJc3dpdGNoIChwX3ByaXYtPmNmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNTsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzY7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU183OworCQlicmVhazsKKwljYXNlIENTODoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfODsKKwkJYnJlYWs7CisJfQorCWlmIChwX3ByaXYtPmNmbGFnICYgUEFSRU5CKSB7CisJCS8qIG5vdGUgVVNBX1BBUklUWV9OT05FID09IDAgKi8KKwkJbXNnLmxjciB8PSAocF9wcml2LT5jZmxhZyAmIFBBUk9ERCk/CisJCQlVU0FfUEFSSVRZX09ERDogVVNBX1BBUklUWV9FVkVOOworCX0KKwlpZiAocF9wcml2LT5vbGRfY2ZsYWcgIT0gcF9wcml2LT5jZmxhZykgeworCQlwX3ByaXYtPm9sZF9jZmxhZyA9IHBfcHJpdi0+Y2ZsYWc7CisJCW1zZy5zZXRMY3IgPSAweDAxOworCX0KKworCWlmIChwX3ByaXYtPmZsb3dfY29udHJvbCA9PSBmbG93X2N0cykKKwkJbXNnLnR4Rmxvd0NvbnRyb2wgPSBUWEZMT1dfQ1RTOworCW1zZy5zZXRUeEZsb3dDb250cm9sID0gMHgwMTsKKwltc2cuc2V0UnhGbG93Q29udHJvbCA9IDB4MDE7CisJCisJbXNnLnJ4Rm9yd2FyZGluZ0xlbmd0aCA9IDE2OworCW1zZy5yeEZvcndhcmRpbmdUaW1lb3V0ID0gMTY7CQorCW1zZy50eEFja1NldHRpbmcgPSAwOworCW1zZy54b25DaGFyID0gMTc7CisJbXNnLnhvZmZDaGFyID0gMTk7CisKKwkvKiBPcGVuaW5nIHBvcnQgKi8gCisJaWYgKHJlc2V0X3BvcnQgPT0gMSkgeworCQltc2cucG9ydEVuYWJsZWQgPSAxOworCQltc2cucnhGbHVzaCA9IDE7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCX0KKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLnBvcnRFbmFibGVkID0gMDsKKwl9CisJLyogU2VuZGluZyBpbnRlcm1lZGlhdGUgY29uZmlncyAqLworCWVsc2UgeworCQlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJCW1zZy5wb3J0RW5hYmxlZCA9IDE7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCX0KKworCS8qIERvIGhhbmRzaGFraW5nIG91dHB1dHMgKi8JCisJbXNnLnNldFJ0cyA9IDB4MDE7CisJbXNnLnJ0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOworCisJbXNnLnNldER0ciA9IDB4MDE7CisJbXNnLmR0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOworCQkKKwlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKKwltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKKwkKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOworCisJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlICpzX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgKmRfZGV0YWlsczsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlkX2RldGFpbHMgPSBzX3ByaXYtPmRldmljZV9kZXRhaWxzOworCisJc3dpdGNoIChkX2RldGFpbHMtPm1zZ19mb3JtYXQpIHsKKwljYXNlIG1zZ191c2EyNjoKKwkJa2V5c3Bhbl91c2EyNl9zZW5kX3NldHVwKHNlcmlhbCwgcG9ydCwgcmVzZXRfcG9ydCk7CisJCWJyZWFrOworCWNhc2UgbXNnX3VzYTI4OgorCQlrZXlzcGFuX3VzYTI4X3NlbmRfc2V0dXAoc2VyaWFsLCBwb3J0LCByZXNldF9wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBtc2dfdXNhNDk6CisJCWtleXNwYW5fdXNhNDlfc2VuZF9zZXR1cChzZXJpYWwsIHBvcnQsIHJlc2V0X3BvcnQpOworCQlicmVhazsKKwljYXNlIG1zZ191c2E5MDoKKwkJa2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwKHNlcmlhbCwgcG9ydCwgcmVzZXRfcG9ydCk7CisJCWJyZWFrOworCX0KK30KKworCisvKiBHZXRzIGNhbGxlZCBieSB0aGUgInJlYWwiIGRyaXZlciAoaWUgb25jZSBmaXJtd2FyZSBpcyBsb2FkZWQKKyAgIGFuZCByZW51bWVyYXRpb24gaGFzIHRha2VuIHBsYWNlLiAqLworc3RhdGljIGludCBrZXlzcGFuX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50CQkJCWksIGVycjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGkgPSAwOyAoZF9kZXRhaWxzID0ga2V5c3Bhbl9kZXZpY2VzW2ldKSAhPSBOVUxMOyArK2kpCisJCWlmIChkX2RldGFpbHMtPnByb2R1Y3RfaWQgPT0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKKwkJCWJyZWFrOworCWlmIChkX2RldGFpbHMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSB1bmtub3duIHByb2R1Y3QgaWQgJXhcbiIsIF9fRlVOQ1RJT05fXywgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJCXJldHVybiAxOworCX0KKworCS8qIFNldHVwIHByaXZhdGUgZGF0YSBmb3Igc2VyaWFsIGRyaXZlciAqLworCXNfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzX3ByaXYpIHsKKwkJZGJnKCIlcyAtIGttYWxsb2MgZm9yIGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoc19wcml2LCAwLCBzaXplb2Yoc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUpKTsKKworCXNfcHJpdi0+ZGV2aWNlX2RldGFpbHMgPSBkX2RldGFpbHM7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHNfcHJpdik7CisKKwkvKiBOb3cgc2V0dXAgcGVyIHBvcnQgcHJpdmF0ZSBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcF9wcml2KSB7CisJCQlkYmcoIiVzIC0ga21hbGxvYyBmb3Iga2V5c3Bhbl9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQlyZXR1cm4gKDEpOworCQl9CisJCW1lbXNldChwX3ByaXYsIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUpKTsKKwkJcF9wcml2LT5kZXZpY2VfZGV0YWlscyA9IGRfZGV0YWlsczsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHBfcHJpdik7CisJfQorCisJa2V5c3Bhbl9zZXR1cF91cmJzKHNlcmlhbCk7CisKKwlzX3ByaXYtPmluc3RhdF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIoc19wcml2LT5pbnN0YXRfdXJiLCBHRlBfS0VSTkVMKSkgIT0gMCkgeworCQlkYmcoIiVzIC0gc3VibWl0IGluc3RhdCB1cmIgZmFpbGVkICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCX0KKwkJCQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50CQkJCWksIGo7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSpwX3ByaXY7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKworCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KKwlzdG9wX3VyYihzX3ByaXYtPmluc3RhdF91cmIpOworCXN0b3BfdXJiKHNfcHJpdi0+Z2xvY29udF91cmIpOworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJc3RvcF91cmIocF9wcml2LT5pbmFja191cmIpOworCQlzdG9wX3VyYihwX3ByaXYtPm91dGNvbnRfdXJiKTsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJc3RvcF91cmIocF9wcml2LT5pbl91cmJzW2pdKTsKKwkJCXN0b3BfdXJiKHBfcHJpdi0+b3V0X3VyYnNbal0pOworCQl9CisJfQorCisJLyogTm93IGZyZWUgdGhlbSAqLworCWlmIChzX3ByaXYtPmluc3RhdF91cmIpCisJCXVzYl9mcmVlX3VyYihzX3ByaXYtPmluc3RhdF91cmIpOworCWlmIChzX3ByaXYtPmdsb2NvbnRfdXJiKQorCQl1c2JfZnJlZV91cmIoc19wcml2LT5nbG9jb250X3VyYik7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlpZiAocF9wcml2LT5pbmFja191cmIpCisJCQl1c2JfZnJlZV91cmIocF9wcml2LT5pbmFja191cmIpOworCQlpZiAocF9wcml2LT5vdXRjb250X3VyYikKKwkJCXVzYl9mcmVlX3VyYihwX3ByaXYtPm91dGNvbnRfdXJiKTsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJaWYgKHBfcHJpdi0+aW5fdXJic1tqXSkKKwkJCQl1c2JfZnJlZV91cmIocF9wcml2LT5pbl91cmJzW2pdKTsKKwkJCWlmIChwX3ByaXYtPm91dF91cmJzW2pdKQorCQkJCXVzYl9mcmVlX3VyYihwX3ByaXYtPm91dF91cmJzW2pdKTsKKwkJfQorCX0KKworCS8qICBkYmcoIkZyZWVpbmcgc2VyaWFsLT5wcml2YXRlLiIpOyAqLworCWtmcmVlKHNfcHJpdik7CisKKwkvKiAgZGJnKCJGcmVlaW5nIHBvcnQtPnByaXZhdGUuIik7ICovCisJLyogTm93IGZyZWUgcGVyIHBvcnQgcHJpdmF0ZSBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKTsKKwl9Cit9CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNDViNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgIEtleXNwYW4gVVNCIHRvIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgCisgIChDKSBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMQorICAgICAgSHVnaCBCbGVtaW5ncyA8aHVnaEBibGVtaW5ncy5vcmc+CisgICAKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBTZWUgaHR0cDovL21pc2MubnUvaHVnaC9rZXlzcGFuLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgIAorICBDb2RlIGluIHRoaXMgZHJpdmVyIGluc3BpcmVkIGJ5IGFuZCBpbiBhIG51bWJlciBvZiBwbGFjZXMgdGFrZW4KKyAgZnJvbSBCcmlhbiBXYXJuZXIncyBvcmlnaW5hbCBLZXlzcGFuLVBEQSBkcml2ZXIuCisKKyAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gcHV0IHRvZ2V0aGVyIHdpdGggdGhlIHN1cHBvcnQgb2YgSW5ub3N5cywgSW5jLgorICBhbmQgS2V5c3BhbiwgSW5jIHRoZSBtYW51ZmFjdHVyZXJzIG9mIHRoZSBLZXlzcGFuIFVTQi1zZXJpYWwgcHJvZHVjdHMuCisgIFRoYW5rcyBHdXlzIDopCisgIAorICBUaGFua3MgdG8gUGF1bHVzIGZvciBtaXNjZWxsYW5lb3VzIHRpZHkgdXBzLCBzb21lIGxhcmdpc2ggY2h1bmtzCisgIG9mIG11Y2ggbmljZXIgYW5kL29yIGNvbXBsZXRlbHkgbmV3IGNvZGUgYW5kIChwZXJoYXBzIG1vc3QgdW5pcXVlbHkpCisgIGhhdmluZyB0aGUgcGF0aWVuY2UgdG8gc2l0IGRvd24gYW5kIGV4cGxhaW4gd2h5IGFuZCB3aGVyZSBoZSdkIGNoYW5nZWQKKyAgc3R1ZmYuCisKKyAgVGlwICdvIHRoZSBoYXQgdG8gSUJNIChhbmQgcHJldmlvdXNseSBMaW51eGNhcmUgOikgZm9yIHN1cHBvcnRpbmcgCisgIHN0YWZmIGluIHRoZWlyIHdvcmsgb24gb3BlbiBzb3VyY2UgcHJvamVjdHMuCisgIAorICBTZWUga2V5c3Bhbi5jIGZvciB1cGRhdGUgaGlzdG9yeS4KKworKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfS0VZU1BBTl9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1NFUklBTF9LRVlTUEFOX0gKKworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBLZXlzcGFuIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgIGtleXNwYW5fb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBrZXlzcGFuX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQga2V5c3Bhbl9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF91bnRocm90dGxlCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3dyaXRlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJIGludCBjb3VudCk7CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fc2VuZF9zZXR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBpbnQgcmVzZXRfcG9ydCk7CisKKworc3RhdGljIGludCAga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIgCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGtleXNwYW5faW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSB1bnNpZ25lZCBpbnQgY21kLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQga2V5c3Bhbl9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKK3N0YXRpYyB2b2lkIGtleXNwYW5fYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCBicmVha19zdGF0ZSk7CitzdGF0aWMgaW50ICBrZXlzcGFuX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsCisJCQkJCSB1bnNpZ25lZCBpbnQgY2xlYXIpOworc3RhdGljIGludCAga2V5c3Bhbl9mYWtlX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3VzYTE5X2NhbGNfYmF1ZAkodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssIAorCQkJCQkgdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywKKwkJCQkJIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkCSh1MzIgYmF1ZF9yYXRlLCB1MzIgYmF1ZGNsaywKKwkJCQkJIHU4ICpyYXRlX2hpLCB1OCAqcmF0ZV9sb3csCisJCQkJCSB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSk7CisKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMjhfY2FsY19iYXVkCSh1MzIgYmF1ZF9yYXRlLCB1MzIgYmF1ZGNsaywKKwkJCQkJIHU4ICpyYXRlX2hpLCB1OCAqcmF0ZV9sb3csCisJCQkJCSB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSk7CisKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMTloc19jYWxjX2JhdWQJKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLAorCQkJCQkgdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywKKwkJCQkJIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2EyOF9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkgICAgICAgCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgaW50IHJlc2V0X3BvcnQpOworc3RhdGljIGludCAga2V5c3Bhbl91c2E0OV9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKKworLyogU3RydWN0IHVzZWQgZm9yIGZpcm13YXJlIC0gaW5jcmVhc2VkIHNpemUgb2YgZGF0YSBzZWN0aW9uCisgICB0byBhbGxvdyBLZXlzcGFuJ3MgJ0MnIGZpcm13YXJlIHN0cnVjdCB0byBiZSB1c2VkIHVubW9kaWZpZWQgKi8KK3N0cnVjdCBlenVzYl9oZXhfcmVjb3JkIHsKKwlfX3UxNiBhZGRyZXNzOworCV9fdTggZGF0YV9zaXplOworCV9fdTggZGF0YVs2NF07Cit9OworCisvKiBDb25kaXRpb25hbGx5IGluY2x1ZGUgZmlybXdhcmUgaW1hZ2VzLCBpZiB0aGV5IGFyZW4ndAorICAgaW5jbHVkZWQgY3JlYXRlIGEgbnVsbCBwb2ludGVyIGluc3RlYWQuICBDdXJyZW50IAorICAgZmlybXdhcmUgaW1hZ2VzIGFyZW4ndCBvcHRpbWlzZWQgdG8gcmVtb3ZlIGR1cGxpY2F0ZQorICAgYWRkcmVzc2VzIGluIHRoZSBpbWFnZSBpdHNlbGYuICovCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOAorCSNpbmNsdWRlICJrZXlzcGFuX3VzYTI4X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOF9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYCisJI2luY2x1ZGUgImtleXNwYW5fdXNhMjh4X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOHhfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEEKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2EyOHhhX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOHhhX2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCCisJI2luY2x1ZGUgImtleXNwYW5fdXNhMjh4Yl9mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhMjh4Yl9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOV9mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhMTlfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUkKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOXFpX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOXFpX2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFIKKyAgICAgICAgI2luY2x1ZGUgImtleXNwYW5fbXByX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl9tcHJfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVcKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOXF3X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOXF3X2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFgKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOHhfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTE4eF9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXCisJI2luY2x1ZGUgImtleXNwYW5fdXNhMTl3X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOXdfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5VworCSNpbmNsdWRlICJrZXlzcGFuX3VzYTQ5d19mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhNDl3X2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQworICAgICAgICAjaW5jbHVkZSAia2V5c3Bhbl91c2E0OXdsY19mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhNDl3bGNfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKy8qIFZhbHVlcyB1c2VkIGZvciBiYXVkIHJhdGUgY2FsY3VsYXRpb24gLSBkZXZpY2Ugc3BlY2lmaWMgKi8KKyNkZWZpbmUJS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURQkJKC0xKQorI2RlZmluZQlLRVlTUEFOX0JBVURfUkFURV9PSwkJCSgwKQorI2RlZmluZQlLRVlTUEFOX1VTQTE4WF9CQVVEQ0xLCQkJKDEyMDAwMDAwTCkJLyogYSBndWVzcyAqLworI2RlZmluZQlLRVlTUEFOX1VTQTE5X0JBVURDTEsJCQkoMTIwMDAwMDBMKQorI2RlZmluZQlLRVlTUEFOX1VTQTE5V19CQVVEQ0xLCQkJKDI0MDAwMDAwTCkKKyNkZWZpbmUJS0VZU1BBTl9VU0ExOUhTX0JBVURDTEsJCQkoMTQ3NjkyMzFMKQorI2RlZmluZQlLRVlTUEFOX1VTQTI4X0JBVURDTEsJCQkoMTg0MzIwMEwpCisjZGVmaW5lCUtFWVNQQU5fVVNBMjhYX0JBVURDTEsJCQkoMTIwMDAwMDBMKQorI2RlZmluZQlLRVlTUEFOX1VTQTQ5V19CQVVEQ0xLCQkJKDQ4MDAwMDAwTCkKKworLyogU29tZSBjb25zdGFudHMgdXNlZCB0byBjaGFyYWN0ZXJpc2UgZWFjaCBkZXZpY2UuICAqLworI2RlZmluZQkJS0VZU1BBTl9NQVhfTlVNX1BPUlRTCQkoNCkKKyNkZWZpbmUJCUtFWVNQQU5fTUFYX0ZMSVBTCQkoMikKKworLyogRGV2aWNlIGluZm8gZm9yIHRoZSBLZXlzcGFuIHNlcmlhbCBjb252ZXJ0ZXIsIHVzZWQKKyAgIGJ5IHRoZSBvdmVyYWxsIHVzYi1zZXJpYWwgcHJvYmUgZnVuY3Rpb24gKi8KKyNkZWZpbmUgS0VZU1BBTl9WRU5ET1JfSUQJCQkoMHgwNmNkKQorCisvKiBQcm9kdWN0IElEcyBmb3IgdGhlIHByb2R1Y3RzIHN1cHBvcnRlZCwgcHJlLXJlbnVtZXJhdGlvbiAqLworI2RlZmluZQlrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZAkJMHgwMTA1CisjZGVmaW5lCWtleXNwYW5fdXNhMTlfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwMworI2RlZmluZQlrZXlzcGFuX3VzYTE5cWlfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwYgorI2RlZmluZQlrZXlzcGFuX21wcl9wcmVfcHJvZHVjdF9pZAkJMHgwMTFiCisjZGVmaW5lCWtleXNwYW5fdXNhMTlxd19wcmVfcHJvZHVjdF9pZAkJMHgwMTE4CisjZGVmaW5lCWtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkCQkweDAxMDYKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOF9wcmVfcHJvZHVjdF9pZAkJMHgwMTAxCisjZGVmaW5lCWtleXNwYW5fdXNhMjh4X3ByZV9wcm9kdWN0X2lkCQkweDAxMDIKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhhX3ByZV9wcm9kdWN0X2lkCQkweDAxMTQKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhiX3ByZV9wcm9kdWN0X2lkCQkweDAxMTMKKyNkZWZpbmUJa2V5c3Bhbl91c2E0OXdfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwOQorI2RlZmluZQlrZXlzcGFuX3VzYTQ5d2xjX3ByZV9wcm9kdWN0X2lkCQkweDAxMWEKKworLyogUHJvZHVjdCBJRHMgcG9zdC1yZW51bWVyYXRpb24uICBOb3RlIHRoYXQgdGhlIDI4eCBhbmQgMjh4YgorICAgaGF2ZSB0aGUgc2FtZSBpZCdzIHBvc3QtcmVudW1lcmF0aW9uIGJ1dCBiZWhhdmUgaWRlbnRpY2FsbHkKKyAgIHNvIGl0J3Mgbm90IGFuIGlzc3VlLiAqLworI2RlZmluZQlrZXlzcGFuX3VzYTE4eF9wcm9kdWN0X2lkCQkweDAxMTIKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOV9wcm9kdWN0X2lkCQkweDAxMDcKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOXFpX3Byb2R1Y3RfaWQJCTB4MDEwYworI2RlZmluZQlrZXlzcGFuX3VzYTE5aHNfcHJvZHVjdF9pZAkJMHgwMTIxCisjZGVmaW5lCWtleXNwYW5fbXByX3Byb2R1Y3RfaWQJCQkweDAxMWMKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOXF3X3Byb2R1Y3RfaWQJCTB4MDExOQorI2RlZmluZQlrZXlzcGFuX3VzYTE5d19wcm9kdWN0X2lkCQkweDAxMDgKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkCQkweDAxMGYKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZAkJMHgwMTEwCisjZGVmaW5lCWtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkCQkweDAxMTUKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhiX3Byb2R1Y3RfaWQJCTB4MDExMAorI2RlZmluZQlrZXlzcGFuX3VzYTQ5d19wcm9kdWN0X2lkCQkweDAxMGEKKyNkZWZpbmUJa2V5c3Bhbl91c2E0OXdsY19wcm9kdWN0X2lkCQkweDAxMmEKKworCitzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB7CisJLyogcHJvZHVjdCBJRCB2YWx1ZSAqLworCWludAlwcm9kdWN0X2lkOworCisJZW51bQl7bXNnX3VzYTI2LCBtc2dfdXNhMjgsIG1zZ191c2E0OSwgbXNnX3VzYTkwfSBtc2dfZm9ybWF0OworCisJCS8qIE51bWJlciBvZiBwaHlzaWNhbCBwb3J0cyAqLworCWludAludW1fcG9ydHM7CisKKwkJLyogMSBpZiBlbmRwb2ludCBmbGlwcGluZyB1c2VkIG9uIGlucHV0LCAwIGlmIG5vdCAqLworCWludAlpbmRhdF9lbmRwX2ZsaXA7CisKKwkJLyogMSBpZiBlbmRwb2ludCBmbGlwcGluZyB1c2VkIG9uIG91dHB1dCwgMCBpZiBub3QgKi8KKwlpbnQgCW91dGRhdF9lbmRwX2ZsaXA7CisKKwkJLyogVGFibGUgbWFwcGluZyBpbnB1dCBkYXRhIGVuZHBvaW50IElEcyB0byBwaHlzaWNhbAorCQkgICBwb3J0IG51bWJlciBhbmQgZmxpcCBpZiB1c2VkICovCisJaW50CWluZGF0X2VuZHBvaW50c1tLRVlTUEFOX01BWF9OVU1fUE9SVFNdOworCisJCS8qIFNhbWUgZm9yIG91dHB1dCBlbmRwb2ludHMgKi8KKwlpbnQJb3V0ZGF0X2VuZHBvaW50c1tLRVlTUEFOX01BWF9OVU1fUE9SVFNdOworCisJCS8qIElucHV0IGFja25vd2xlZGdlIGVuZHBvaW50cyAqLworCWludAlpbmFja19lbmRwb2ludHNbS0VZU1BBTl9NQVhfTlVNX1BPUlRTXTsKKworCQkvKiBPdXRwdXQgY29udHJvbCBlbmRwb2ludHMgKi8KKwlpbnQJb3V0Y29udF9lbmRwb2ludHNbS0VZU1BBTl9NQVhfTlVNX1BPUlRTXTsKKworCQkvKiBFbmRwb2ludCB1c2VkIGZvciBpbnB1dCBzdGF0dXMgKi8KKwlpbnQJaW5zdGF0X2VuZHBvaW50OworCisJCS8qIEVuZHBvaW50IHVzZWQgZm9yIGdsb2JhbCBjb250cm9sIGZ1bmN0aW9ucyAqLworCWludAlnbG9jb250X2VuZHBvaW50OworCisJaW50CSgqY2FsY3VsYXRlX2JhdWRfcmF0ZSkgKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLAorCQkJdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pOworCXUzMgliYXVkY2xrOworfTsgCisKKy8qIE5vdyBmb3IgZWFjaCBkZXZpY2UgdHlwZSB3ZSBzZXR1cCB0aGUgZGV2aWNlIGRldGFpbAorICAgc3RydWN0dXJlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGluZm9ybWF0aW9uIChwcm92aWRlZAorICAgaW4gS2V5c3BhbidzIGRvY3VtZW50YXRpb24pICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2ExOHhfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOHhfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjYsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4NX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDV9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE4WF9CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5X2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMTlfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjgsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAxLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4M30sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDN9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg0LAorCS5nbG9jb250X2VuZHBvaW50CT0gLTEsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5X0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMTlxaV9kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjgsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAxLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4M30sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDN9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg0LAorCS5nbG9jb250X2VuZHBvaW50CT0gLTEsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTI4X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5X0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgbXByX2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fbXByX3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI4LAorCS5udW1fcG9ydHMJCT0gMSwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMSwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODN9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDAzfSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NCwKKwkuZ2xvY29udF9lbmRwb2ludAk9IC0xLAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2EyOF9jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOV9CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5cXdfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOXF3X3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI2LAorCS5udW1fcG9ydHMJCT0gMSwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODV9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDA1fSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOVdfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2ExOXdfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOXdfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjYsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4NX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDV9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5V19CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5aHNfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOWhzX3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTkwLAorCS5udW1fcG9ydHMJCT0gMSwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDAsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gey0xfSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwMn0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODIsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAtMSwKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTloc19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOUhTX0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMjhfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyOCwKKwkubnVtX3BvcnRzCQk9IDIsCisJLmluZGF0X2VuZHBfZmxpcAk9IDEsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4M30sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwM30sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDg1LCAweDg2fSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwNSwgMHgwNn0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2EyOF9jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0EyOF9CQVVEQ0xLLAkJCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMjh4X2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMjh4X3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI2LAorCS5udW1fcG9ydHMJCT0gMiwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxLCAweDgzfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxLCAweDAzfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODUsIDB4ODZ9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDA1LCAweDA2fSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0EyOFhfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2EyOHhhX2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyNiwKKwkubnVtX3BvcnRzCQk9IDIsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4M30sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwM30sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDg1LCAweDg2fSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwNSwgMHgwNn0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBMjhYX0JBVURDTEssCit9OworCisvKiBXZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgZW50cnkgZm9yIHRoZSB1c2EyOHhiIGFzIGl0IGFwcGVhcnMgYXMgYSAyOHggYW55d2F5ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2E0OXdfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2E0OXdfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhNDksCisJLm51bV9wb3J0cwkJPSA0LAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMCwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODEsIDB4ODIsIDB4ODMsIDB4ODR9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDEsIDB4MDIsIDB4MDMsIDB4MDR9LAorCS5pbmFja19lbmRwb2ludHMJPSB7LTEsIC0xLCAtMSwgLTF9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHstMSwgLTEsIC0xLCAtMX0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBNDlXX0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhNDl3bGNfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2E0OXdsY19wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2E0OSwKKwkubnVtX3BvcnRzCQk9IDQsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAwLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4MiwgMHg4MywgMHg4NH0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwMiwgMHgwMywgMHgwNH0sCisJLmluYWNrX2VuZHBvaW50cwk9IHstMSwgLTEsIC0xLCAtMX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gey0xLCAtMSwgLTEsIC0xfSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0ExOVdfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyAqa2V5c3Bhbl9kZXZpY2VzW10gPSB7CisJJnVzYTE4eF9kZXZpY2VfZGV0YWlscywKKwkmdXNhMTlfZGV2aWNlX2RldGFpbHMsCisJJnVzYTE5cWlfZGV2aWNlX2RldGFpbHMsCisJJm1wcl9kZXZpY2VfZGV0YWlscywKKwkmdXNhMTlxd19kZXZpY2VfZGV0YWlscywKKwkmdXNhMTl3X2RldmljZV9kZXRhaWxzLAorCSZ1c2ExOWhzX2RldmljZV9kZXRhaWxzLAorCSZ1c2EyOF9kZXZpY2VfZGV0YWlscywKKwkmdXNhMjh4X2RldmljZV9kZXRhaWxzLAorCSZ1c2EyOHhhX2RldmljZV9kZXRhaWxzLAorCS8qIDI4eGIgbm90IHJlcXVpcmVkIGFzIGl0IHJlbnVtZXJhdGVzIGFzIGEgMjh4ICovCisJJnVzYTQ5d19kZXZpY2VfZGV0YWlscywKKwkmdXNhNDl3bGNfZGV2aWNlX2RldGFpbHMsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX2lkc19jb21iaW5lZFtdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXdfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cWlfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cXdfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX21wcl9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eF9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4Yl9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdsY19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5d19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXFpX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cXdfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTloc19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl9tcHJfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGFfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4Yl9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdfcHJvZHVjdF9pZCl9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdsY19wcm9kdWN0X2lkKX0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwga2V5c3Bhbl9pZHNfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2V5c3Bhbl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImtleXNwYW4iLCAgICAgICAgICAgICAgICAKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWtleXNwYW5faWRzX2NvbWJpbmVkLAorfTsKKworLyogdXNiX2RldmljZV9pZCB0YWJsZSBmb3IgdGhlIHByZS1maXJtd2FyZSBkb3dubG9hZCBrZXlzcGFuIGRldmljZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX3ByZV9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxd19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTl3X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl9tcHJfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGFfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGJfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3bGNfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl8xcG9ydF9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxd19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXdfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTloc19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl9tcHJfcHJvZHVjdF9pZCkgfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzJwb3J0X2lkc1tdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhiX3Byb2R1Y3RfaWQpIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl80cG9ydF9pZHNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d2xjX3Byb2R1Y3RfaWQpfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qIFN0cnVjdHMgZm9yIHRoZSBkZXZpY2VzLCBwcmUgYW5kIHBvc3QgcmVudW1lcmF0aW9uLiAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fcHJlX2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiS2V5c3BhbiAtICh3aXRob3V0IGZpcm13YXJlKSIsCisJLnNob3J0X25hbWUJCT0gImtleXNwYW5fbm9fZmlybSIsCisJLmlkX3RhYmxlCQk9IGtleXNwYW5fcHJlX2lkcywKKwkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dAkJPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMJCT0gMSwKKwkuYXR0YWNoCQkJPSBrZXlzcGFuX2Zha2Vfc3RhcnR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuXzFwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiS2V5c3BhbiAxIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImtleXNwYW5fMSIsCisJLmlkX3RhYmxlCQk9IGtleXNwYW5fMXBvcnRfaWRzLAorCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4JCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0CQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cwkJPSAxLAorCS5vcGVuCQkJPSBrZXlzcGFuX29wZW4sCisJLmNsb3NlCQkJPSBrZXlzcGFuX2Nsb3NlLAorCS53cml0ZQkJCT0ga2V5c3Bhbl93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBrZXlzcGFuX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGtleXNwYW5fY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGtleXNwYW5fcnhfdW50aHJvdHRsZSwKKwkuaW9jdGwJCQk9IGtleXNwYW5faW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IGtleXNwYW5fc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bAkJPSBrZXlzcGFuX2JyZWFrX2N0bCwKKwkudGlvY21nZXQJCT0ga2V5c3Bhbl90aW9jbWdldCwKKwkudGlvY21zZXQJCT0ga2V5c3Bhbl90aW9jbXNldCwKKwkuYXR0YWNoCQkJPSBrZXlzcGFuX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGtleXNwYW5fc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl8ycG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIktleXNwYW4gMiBwb3J0IGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lCQk9ICJrZXlzcGFuXzIiLAorCS5pZF90YWJsZQkJPSBrZXlzcGFuXzJwb3J0X2lkcywKKwkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luCQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dAkJPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMJCT0gMiwKKwkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLAorCS5jbG9zZQkJCT0ga2V5c3Bhbl9jbG9zZSwKKwkud3JpdGUJCQk9IGtleXNwYW5fd3JpdGUsCisJLndyaXRlX3Jvb20JCT0ga2V5c3Bhbl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBrZXlzcGFuX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSBrZXlzcGFuX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBrZXlzcGFuX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwJCT0ga2V5c3Bhbl9icmVha19jdGwsCisJLnRpb2NtZ2V0CQk9IGtleXNwYW5fdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IGtleXNwYW5fdGlvY21zZXQsCisJLmF0dGFjaAkJCT0ga2V5c3Bhbl9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBrZXlzcGFuX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fNHBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAia2V5c3Bhbl80IiwKKwkuaWRfdGFibGUJCT0ga2V5c3Bhbl80cG9ydF9pZHMsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbgkJPSA1LAorCS5udW1fYnVsa19vdXQJCT0gNSwKKwkubnVtX3BvcnRzCQk9IDQsCisJLm9wZW4JCQk9IGtleXNwYW5fb3BlbiwKKwkuY2xvc2UJCQk9IGtleXNwYW5fY2xvc2UsCisJLndyaXRlCQkJPSBrZXlzcGFuX3dyaXRlLAorCS53cml0ZV9yb29tCQk9IGtleXNwYW5fd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0ga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IGtleXNwYW5fcnhfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF91bnRocm90dGxlLAorCS5pb2N0bAkJCT0ga2V5c3Bhbl9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0ga2V5c3Bhbl9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsCQk9IGtleXNwYW5fYnJlYWtfY3RsLAorCS50aW9jbWdldAkJPSBrZXlzcGFuX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBrZXlzcGFuX3Rpb2Ntc2V0LAorCS5hdHRhY2gJCQk9IGtleXNwYW5fc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0ga2V5c3Bhbl9zaHV0ZG93biwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fbXByX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9tcHJfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzg4MDVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fbXByX2Z3LmgKQEAgLTAsMCArMSwyODYgQEAKKy8qIGtleXNwYW5fbXByX2Z3LmgKKyAKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX21wcl9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKK3N0YXRpYyBjaGFyIHRoZUZpcm13YXJlRGF0ZTUzW10gPQorCSIwNC8yNi8yMDAyICAwMjo0N3AgICAgICAgICAgICAgIDExLDU3MCBVU0E1MyI7CisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl9tcHJfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDAwLCAweDFhfX0sCisgezB4MDAxYSwgIDQsIHsgMHg1MywgMHhkOCwgMHhlZiwgMHgzMn19LAorIHsweDAwMDMsIDE2LCB7IDB4OGUsIDB4NTYsIDB4OGYsIDB4NTcsIDB4ZTUsIDB4NTcsIDB4MTUsIDB4NTcsIDB4YWUsIDB4NTYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NTYsIDB4NGUsIDB4NjB9fSwKKyB7MHgwMDEzLCAgNywgeyAweDA1LCAweDEyLCAweDBmLCAweGEyLCAweDgwLCAweGVlLCAweDIyfX0sCisgezB4MDAyMywgIDMsIHsgMHgwMiwgMHgwMCwgMHg0Nn19LAorIHsweDAwNDYsIDE2LCB7IDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MDh9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDMwLCAweDk5LCAweDBlLCAweDMwLCAweDBiLCAweDA3LCAweGEyLCAweDBlLCAweDkyLCAweDliLCAweDg1LCAweDM2LCAweDk5LCAweGMyLCAweDk5LCAweGQyfX0sCisgezB4MDA2NiwgMTYsIHsgMHgxMiwgMHgyMCwgMHgxMiwgMHgwMywgMHgwMiwgMHgwMiwgMHhmOSwgMHhjMiwgMHgxMiwgMHgzMCwgMHgwMywgMHgxOSwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MH19LAorIHsweDAwNzYsIDE2LCB7IDB4NzUsIDB4MWEsIDB4N2UsIDB4NzUsIDB4MWIsIDB4NDAsIDB4NzUsIDB4MTcsIDB4MDAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MTgsIDB4N2R9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDc1LCAweDE5LCAweGMwLCAweDgwLCAweDE3LCAweDdlLCAweDdkLCAweDdmLCAweGMwLCAweDc1LCAweDFhLCAweDdkLCAweDc1LCAweDFiLCAweGMwLCAweDc1fX0sCisgezB4MDA5NiwgMTYsIHsgMHgxNywgMHgwMSwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxOCwgMHg3ZSwgMHg3NSwgMHgxOSwgMHg0MCwgMHgyMCwgMHgwYiwgMHgwMywgMHgwMn19LAorIHsweDAwYTYsIDE2LCB7IDB4MDEsIDB4ODQsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NTAsIDB4M2MsIDB4MjAsIDB4MGMsIDB4MzQsIDB4MjAsIDB4MDksIDB4MzEsIDB4OTB9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDI5LCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFifX0sCisgezB4MDBjNiwgMTYsIHsgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYX19LAorIHsweDAwZDYsIDE2LCB7IDB4ZTUsIDB4MWIsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4MDIsIDB4MDIsIDB4Zjd9fSwKKyB7MHgwMGU2LCAxNiwgeyAweGMyLCAweDBiLCAweDAyLCAweDAyLCAweGY3LCAweDMwLCAweDAzLCAweDExLCAweDkwLCAweDdmLCAweGM3LCAweGU0LCAweGYwLCAweGEzLCAweGUwLCAweDU0fX0sCisgezB4MDBmNiwgMTYsIHsgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHg4MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MGYsIDB4MDB9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDAwLCAweDI2fX0sCisgezB4MDAyNiwgMTIsIHsgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg1YSwgMHgwMiwgMHgwYSwgMHgzM319LAorIHsweDAxMDYsIDY0LCB7IDB4YzYsIDB4ZTAsIDB4NTQsIDB4MDIsIDB4ZjUsIDB4MWQsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MWMsIDB4ZTUsIDB4MTcsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MDMsIDB4MzAsCisgIDB4MGQsIDB4MGQsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4ZTUsCisgIDB4MWQsIDB4NjAsIDB4MDUsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4ODUsIDB4MWMsIDB4NTMsIDB4ODUsIDB4MTksIDB4ODIsIDB4ODUsIDB4MTgsCisgIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTIsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4M2EsIDB4MjAsIDB4MDksIDB4MzcsIDB4OTB9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDJmLCAweDMwLCAweDEwLCAweDFjLCAweDg1LCAweDE5LCAweDgyLCAweDg1LCAweDE4LCAweDgzLCAweGEzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweDg1LCAweDE5LCAweDgyLCAweDg1LCAweDE4LCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGY1LCAweDM2LCAweDc1LAorICAweDNhLCAweDAzLCAweDAyLCAweDAyLCAweGY3LCAweDc1LCAweDNhLCAweDAyLCAweDg1LCAweDE5LCAweDgyLCAweDg1LCAweDE4LCAweDgzLCAweGEzLCAweGUwLAorICAweGY1LCAweDM2LCAweDAyLCAweDAyLCAweGY3LCAweDc1LCAweDNhLCAweDAxLCAweGMyLCAweDBiLCAweDAyLCAweDAyLCAweGY3LCAweDMwLCAweDAzfX0sCisgezB4MDE4NiwgNjQsIHsgMHgwZSwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHg1NCwgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHg4MCwgMHgwYywgMHg5MCwgMHg3ZiwKKyAgMHhjOCwgMHhlMCwgMHg1NCwgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwKKyAgMHgwMywgMHgwMiwgMHgwMiwgMHg2OCwgMHhlNSwgMHgxZCwgMHg2MCwgMHgwNywgMHhjMiwgMHgxNCwgMHhjMiwgMHgwNSwgMHgwMiwgMHgwMiwgMHhmNywgMHg4NSwKKyAgMHgxYywgMHg1MywgMHg4NSwgMHgxYiwgMHg4MiwgMHg4NSwgMHgxYSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgxMiwgMHhmZn19LAorIHsweDAxYzYsIDY0LCB7IDB4MzAsIDB4MGMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjAsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjAsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsCisgIDB4MzgsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NjAsIDB4MzAsIDB4MTAsIDB4MWIsIDB4ODUsIDB4MWIsIDB4ODIsIDB4ODUsIDB4MWEsIDB4ODMsIDB4YTMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MWIsIDB4ODIsIDB4ODUsIDB4MWEsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsCisgIDB4M2EsIDB4MDMsIDB4ODAsIDB4MGQsIDB4ODUsIDB4MWIsIDB4ODIsIDB4ODUsIDB4MWEsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzV9fSwKKyB7MHgwMjA2LCA2NCwgeyAweDNhLCAweDAyLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDQwLCAweDI2LCAweDMwLCAweDAzLCAweDA3LCAweDkwLCAweDdmLCAweGM3LCAweGU0LCAweGYwLAorICAweDgwLCAweDA1LCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGU1LCAweDE3LCAweDI0LCAweGZmLCAweDkyLCAweDAzLCAweDIwLCAweDBkLCAweDAzLAorICAweDAyLCAweDAyLCAweGY3LCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDAyLCAweGY3LCAweDMwLCAweDEwLAorICAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzfX0sCisgezB4MDI0NiwgNjQsIHsgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHhlNSwgMHgxYiwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHhkMiwgMHgwYiwgMHgwMiwgMHgwMiwgMHhmNywgMHg3NSwgMHgzYSwgMHgwMSwgMHhjMiwgMHgxNCwgMHgwMiwgMHgwMiwKKyAgMHhmNywgMHgzMCwgMHgwYywgMHgwMywgMHgwMiwgMHgwMiwgMHhmNSwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwMiwgMHhmNSwgMHg5MCwgMHg3ZiwgMHg5YiwKKyAgMHhlMCwgMHg1NSwgMHgzOCwgMHg3MCwgMHg3OSwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHhlNSwgMHgxYiwgMHgyZn19LAorIHsweDAyODYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4MWIsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsCisgIDB4NDAsIDB4MjIsIDB4MzAsIDB4MDMsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsCisgIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MDMsIDB4MzAsIDB4MGQsIDB4MzYsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmJ9fSwKKyB7MHgwMmM2LCA2NCwgeyAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDJjLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweGQyLCAweDBiLCAweDgwLCAweDAyLCAweGMyLCAweDE0LAorICAweGQyLCAweDAxLCAweDIwLCAweDk4LCAweDAzLCAweDAyLCAweDA0LCAweDM1LCAweGMyLCAweDk4LCAweDIwLCAweDAyLCAweDAzLCAweDAyLCAweDAzfX0sCisgezB4MDMwNiwgNjQsIHsgMHhhMiwgMHgyMCwgMHgxNSwgMHgyNywgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwKKyAgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxMCwgMHg0ZCwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHg1NSwgMHhlNSwgMHg1NSwgMHhiNSwKKyAgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwgMHgyZSwgMHhlNSwgMHg1NSwgMHhiNSwgMHg0NiwgMHgwNCwgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNX19LAorIHsweDAzNDYsIDY0LCB7IDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4NTUsIDB4ZjAsCisgIDB4MzAsIDB4MTAsIDB4MTEsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsCisgIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MzMsCisgIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDJ9fSwKKyB7MHgwMzg2LCA2NCwgeyAweDA0LCAweDMzLCAweDE1LCAweDM5LCAweDE1LCAweDM5LCAweDA1LCAweDJiLCAweDQzLCAweDM0LCAweDAxLCAweDAyLCAweDA0LCAweDMzLCAweDkwLCAweDdmLCAweGI3LAorICAweGU1LCAweDM5LCAweGYwLCAweDc1LCAweDM5LCAweDAwLCAweGMyLCAweDAyLCAweDAyLCAweDA0LCAweDMzLCAweDIwLCAweDE1LCAweDI3LCAweGFmLCAweDM5LAorICAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLAorICAweDEwLCAweDRkLCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1fX0sCisgezB4MDNjNiwgNjQsIHsgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHg1NSwgMHhlNSwgMHg1NSwgMHhiNSwgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwKKyAgMHgyZSwgMHhlNSwgMHg1NSwgMHhiNSwgMHg0NiwgMHgwNCwgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNSwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwKKyAgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg1NSwgMHhmMCwgMHgzMCwgMHgxMCwgMHgxMSwgMHhhZiwgMHgzOSwKKyAgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMH19LAorIHsweDA0MDYsIDY0LCB7IDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsIDB4NDAsIDB4MjQsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTIsIDB4ZTUsCisgIDB4MzksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTYsIDB4MTUsIDB4MzksIDB4MTUsIDB4MzksIDB4MDUsIDB4MmIsIDB4NDMsIDB4MzQsIDB4MDEsIDB4ODAsCisgIDB4MGIsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4MzksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MDAsIDB4ZDIsIDB4MDIsIDB4ZDIsIDB4MDEsIDB4MzAsIDB4MDEsCisgIDB4MDUsIDB4YzIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NTYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDB9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweDIwLCAweGUxLCAweDU0LCAweGU1LCAweDM0LCAweDYwLCAweDUwLCAweGU1LCAweDMxLCAweDcwLCAweDRjLAorICAweGU1LCAweDM0LCAweDMwLCAweGUxLCAweDBiLCAweGU0LCAweGY1LCAweDJmLCAweDc1LCAweDM0LCAweDAxLCAweDc1LCAweDMxLCAweDAyLCAweDgwLCAweDBlLAorICAweGEyLCAweDA4LCAweGU0LCAweDMzLCAweGY1LCAweDJmLCAweGMyLCAweDA4LCAweGU0LCAweGY1LCAweDM0LCAweDc1LCAweDMxLCAweDEwLCAweGU0LCAweGY1LAorICAweDU2LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDU2LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyfX0sCisgezB4MDQ4NiwgNjQsIHsgMHgwYywgMHg3OSwgMHhmZiwgMHg3NCwgMHgwMCwgMHgyNSwgMHg1NiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwKKyAgMHg1NiwgMHhlNSwgMHg1NiwgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwKKyAgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwgMHhkMSwgMHhlNCwgMHhmNSwgMHg1NiwgMHg3NCwgMHg0MCwgMHgyNSwgMHg1NiwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg1NiwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMCwgMHgyNCwgMHgzYiwgMHhmOX19LAorIHsweDA0YzYsIDY0LCB7IDB4ZWMsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGMsIDB4OTIsIDB4MDUsIDB4NTYsIDB4ZTUsIDB4NTYsIDB4YjQsIDB4MTgsIDB4ZGIsIDB4ZTUsIDB4M2IsCisgIDB4NjAsIDB4MTEsIDB4NzUsIDB4YzksIDB4MjAsIDB4NzUsIDB4YzgsIDB4MzYsIDB4ODUsIDB4M2MsIDB4Y2EsIDB4ODUsIDB4M2QsIDB4Y2IsIDB4ZTQsIDB4OTAsCisgIDB4N2YsIDB4OWYsIDB4ZjAsIDB4ZTUsIDB4M2UsIDB4MTMsIDB4OTIsIDB4MTAsIDB4OTIsIDB4OWYsIDB4ODUsIDB4M2YsIDB4MzgsIDB4ZTUsIDB4NDAsIDB4MTMsCisgIDB4OTIsIDB4MTUsIDB4ZTUsIDB4NDEsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ODAsIDB4MDd9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDQyLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweDdmLAorICAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDQ4LCAweDYwLCAweDBiLCAweGMyLCAweDBjLAorICAweGMyLCAweDA5LCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDQ5LCAweDYwLCAweDBjLCAweGQyLCAweDA5LCAweDQzLAorICAweDM0LCAweDAxLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDRhLCAweDYwLCAweDBkLCAweGMyLCAweGFmfX0sCisgezB4MDU0NiwgNjQsIHsgMHhjMiwgMHgwYiwgMHhkMiwgMHgwMCwgMHhlNCwgMHhmNSwgMHg1MywgMHhmNSwgMHgzYSwgMHhkMiwgMHhhZiwgMHhlNSwgMHg0YiwgMHg2MCwgMHgwNSwgMHgzMCwgMHgxNSwKKyAgMHgwMiwgMHhkMiwgMHgwOSwgMHhlNSwgMHg0YywgMHg2MCwgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5ZSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHg0ZCwgMHg2MCwgMHgwYSwKKyAgMHhkMiwgMHg5YywgMHhjMiwgMHg5OCwgMHg3NSwgMHgyYywgMHgwMSwgMHg3NSwgMHgzMSwgMHgxZSwgMHhlNSwgMHg0ZSwgMHg2MCwgMHgwNywgMHhjMn19LAorIHsweDA1ODYsIDY0LCB7IDB4OWMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MmMsIDB4ZTUsIDB4NGYsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZTUsIDB4NTAsIDB4NjAsIDB4MDIsCisgIDB4ZDIsIDB4MDcsIDB4ZTUsIDB4NTEsIDB4NjAsIDB4MGEsIDB4ZTUsIDB4NGQsIDB4NzAsIDB4MDIsIDB4ZjUsIDB4MzEsIDB4ZTUsIDB4NTEsIDB4NDIsIDB4MzQsCisgIDB4ZTUsIDB4NTIsIDB4NjAsIDB4MWYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTIsIDB4ZjAsCisgIDB4NzQsIDB4MzIsIDB4ZjAsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzQsIDB4MzQsIDB4ZjB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweGQyLCAweDAzLCAweGQyLCAweDAyLCAweGQyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGEyLCAweDBjLCAweGU0LCAweDMzLCAweGZmLCAweDY1LAorICAweDI5LCAweDYwLCAweDA1LCAweDhmLCAweDI5LCAweDQzLCAweDM0LCAweDAxLCAweGEyLCAweDA5LCAweGU0LCAweDMzLCAweGZmLCAweDY1LCAweDJhLCAweDYwLAorICAweDA1LCAweDhmLCAweDJhLCAweDQzLCAweDM0LCAweDAxLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweGZmLCAweDU0LCAweDA4LCAweDY0LCAweDA4LCAweGY1LAorICAweDU3LCAweDY1LCAweDI1LCAweDYwLCAweDA2LCAweDg1LCAweDU3LCAweDI1LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDEwLCAweDY0fX0sCisgezB4MDYwNiwgNjQsIHsgMHgxMCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyNiwgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHg0MCwgMHg2NCwKKyAgMHg0MCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyNywgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyNywgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHgyMCwKKyAgMHg2NCwgMHgyMCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyOCwgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyOCwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwKKyAgMHg5YSwgMHhlMCwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmNSwgMHg1NywgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNiwgMHg4NSwgMHg1NywgMHgyZX19LAorIHsweDA2NDYsIDY0LCB7IDB4NDMsIDB4MzQsIDB4MDEsIDB4MzAsIDB4MDcsIDB4MzUsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsCisgIDB4MjcsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDcsCisgIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MGYsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjksCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDIsIDB4YzIsIDB4MDcsIDB4ZDIsIDB4YWYsIDB4MjAsIDB4MDUsIDB4M2QsIDB4MzAsIDB4MDN9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDFlLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDMzLCAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLAorICAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUzLCAweGQyLCAweDA1LCAweDc1LCAweDEyLCAweGZmLCAweDgwLCAweDFjLCAweDkwLCAweDdmLAorICAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDE1LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLCAweDAxLCAweDkwLAorICAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUzLCAweGQyLCAweDA1LCAweDc1LCAweDEyLCAweGZmLCAweDIwLCAweDE0LCAweDMzLCAweDIwLCAweDAwfX0sCisgezB4MDZjNiwgNjQsIHsgMHgwNiwgMHhlNSwgMHgzYSwgMHg2NSwgMHg1MywgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNSwgMHgxYSwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywKKyAgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwKKyAgMHg1MywgMHhmNSwgMHgzYSwgMHgzMCwgMHgwZCwgMHgwYSwgMHhjMiwgMHgwZCwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNywgMHhiZiwgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwNywgMHhiZiwgMHgzMCwgMHgwYywgMHgwM319LAorIHsweDA3MDYsIDY0LCB7IDB4MDIsIDB4MDcsIDB4YmYsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDcsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NjAsIDB4MDMsCisgIDB4MDIsIDB4MDcsIDB4YmYsIDB4MzAsIDB4MDMsIDB4MGMsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDAsIDB4NzUsIDB4NTgsIDB4N2UsIDB4NzUsIDB4NTksIDB4NDAsCisgIDB4ODAsIDB4MGEsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4NzUsIDB4NTgsIDB4N2QsIDB4NzUsIDB4NTksIDB4YzAsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsCisgIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4NTksIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweDkyLCAweDFhLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDU5LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLAorICAweGY1LCAweDU3LCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDJhLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLAorICAweGU1LCAweDU5LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLAorICAweDA1LCAweDNhLCAweGU1LCAweDU5LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2fX0sCisgezB4MDc4NiwgNjQsIHsgMHhkMiwgMHgwYiwgMHg4MCwgMHgxNSwgMHhjMiwgMHgwYiwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwKKyAgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHgzMCwgMHgxMCwgMHgwNCwgMHhhMiwgMHgxYSwgMHg5MiwgMHg5YiwgMHhkMiwKKyAgMHgxNCwgMHhjMiwgMHhhZiwgMHg4NSwgMHg1NywgMHg5OSwgMHgyMCwgMHgwYiwgMHgwZCwgMHgzMCwgMHgwZCwgMHgwYSwgMHhjMiwgMHgwZCwgMHhjMiwgMHgwMCwKKyAgMHg5MCwgMHg3ZiwgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwY319LAorIHsweDA3YzYsIDY0LCB7IDB4YTQsIDB4MDksIDB4MWMsIDB4MDAsIDB4MDksIDB4ODksIDB4MDEsIDB4MDksIDB4ZTYsIDB4MDMsIDB4MDcsIDB4ZTMsIDB4MDYsIDB4MDksIDB4MGQsIDB4MDgsIDB4MDksCisgIDB4MDEsIDB4MDksIDB4MDgsIDB4ZTksIDB4MGEsIDB4MDgsIDB4ZjgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsCisgIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWMsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDgsIDB4NzksIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4MjQsIDB4NzQsIDB4MGQsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4ODcsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGF9fSwKKyB7MHgwODA2LCA2NCwgeyAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweGQ4LAorICAweDc1LCAweDgzLCAweDBkLCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweGQxLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDc1LCAweDgyLCAweGNhLCAweDc1LAorICAweDgzLCAweDBkLCAweGYwLCAweDc1LCAweDgyLCAweGMzLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LAorICAweDgyLCAweDllLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGVmLCAweGUwLCAweGZlLCAweDkwLCAweDdmLCAweGVlLCAweGUwfX0sCisgezB4MDg0NiwgNjQsIHsgMHg3YywgMHgwMCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg1YSwgMHhlYywgMHgzZSwgMHhmNSwgMHg1OSwgMHg3NSwgMHgxNSwgMHgwZCwgMHg3NSwgMHgxNiwgMHg5OSwgMHg3NSwKKyAgMHg4MiwgMHg5YiwgMHg3NSwgMHg4MywgMHgwZCwgMHhlMCwgMHg3NSwgMHgxMywgMHgwMCwgMHhmNSwgMHgxNCwgMHhkMywgMHhlNSwgMHgxNCwgMHg5NSwgMHg1YSwKKyAgMHhlNSwgMHgxMywgMHg5NSwgMHg1OSwgMHg0MCwgMHgwNiwgMHg4NSwgMHg1OSwgMHgxMywgMHg4NSwgMHg1YSwgMHgxNCwgMHgxMiwgMHgwYiwgMHhiYSwgMHgwMiwKKyAgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwYiwgMHg3NSwgMHg1NiwgMHhmZiwgMHg3NSwgMHg1NywgMHgwZCwgMHg3NX19LAorIHsweDA4ODYsIDY0LCB7IDB4NTgsIDB4ZGMsIDB4ODAsIDB4MmQsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MGIsIDB4NzUsIDB4NTYsIDB4ZmYsIDB4NzUsIDB4NTcsIDB4MGQsCisgIDB4NzUsIDB4NTgsIDB4ZTAsIDB4ODAsIDB4MWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MGIsIDB4NzUsIDB4NTYsIDB4ZmYsIDB4NzUsCisgIDB4NTcsIDB4MGQsIDB4NzUsIDB4NTgsIDB4ZjAsIDB4ODAsIDB4MDksIDB4NzUsIDB4NTYsIDB4ZmYsIDB4NzUsIDB4NTcsIDB4MGUsIDB4NzUsIDB4NTgsIDB4MWUsCisgIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4NzUsIDB4NTksIDB4MDAsIDB4ZjUsIDB4NWEsIDB4YWUsIDB4NTcsIDB4YWYsIDB4NTgsIDB4OGUsIDB4MTV9fSwKKyB7MHgwOGM2LCA2NCwgeyAweDhmLCAweDE2LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweDhlLCAweDEzLCAweGY1LCAweDE0LCAweGQzLCAweDk1LCAweDVhLAorICAweGU1LCAweDEzLCAweDk1LCAweDU5LCAweDQwLCAweDA2LCAweDg1LCAweDU5LCAweDEzLCAweDg1LCAweDVhLCAweDE0LCAweDEyLCAweDBiLCAweGJhLCAweDAyLAorICAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDExLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBhLAorICAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDExLCAweDAyLCAweDBhLCAweDJiLCAweDEyLCAweDBjLCAweDI0LCAweDkwLCAweDdmfX0sCisgezB4MDkwNiwgNjQsIHsgMHhlYSwgMHhlMCwgMHhmNSwgMHgxMCwgMHgwMiwgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNywgMHgxNCwgMHg2MCwgMHgzNCwKKyAgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYSwgMHgyNCwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwKKyAgMHgxOCwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NH19LAorIHsweDA5NDYsIDY0LCB7IDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGEsIDB4MmIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsCisgIDB4ZjAsIDB4MDIsIDB4MGEsIDB4MmIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsCisgIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjB9fSwKKyB7MHgwOTg2LCA2NCwgeyAweDAyLCAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE3LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBhLAorICAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBhLCAweDI0LCAweGMyLCAweDE2LCAweDAyLCAweDBhLAorICAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDc2LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LAorICAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0fX0sCisgezB4MDljNiwgNjQsIHsgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwKKyAgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg0NSwgMHg5MCwKKyAgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxMCwgMHgyNCwgMHgwMiwgMHg3MCwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg2NCwKKyAgMHgwMSwgMHg3MCwgMHgyYSwgMHhkMiwgMHgxNiwgMHg4MCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3Zn19LAorIHsweDBhMDYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsCisgIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsCisgIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4YzIsIDB4MTAsIDB4ZTQsIDB4ZjUsCisgIDB4MTAsIDB4ZjUsIDB4MzQsIDB4YzIsIDB4MDksIDB4YzIsIDB4MGMsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MTQsIDB4YzIsIDB4MGQsIDB4YzIsIDB4MTV9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGMyLCAweDExLCAweGMyLCAweDA3LCAweGMyLCAweDEyLCAweGMyLCAweDBmLCAweGMyLCAweDA4LCAweGY1LCAweDM1LCAweGY1LCAweDM5LCAweGY1LCAweDUzLCAweGY1LAorICAweDNhLCAweGY1LCAweDMzLCAweGY1LCAweDMwLCAweGY1LCAweDJmLCAweGY1LCAweDJlLCAweGY1LCAweDJkLCAweGY1LCAweDJjLCAweGY1LCAweDJiLCAweGY1LAorICAweDJhLCAweGY1LCAweDI5LCAweGY1LCAweDI4LCAweGY1LCAweDI3LCAweGY1LCAweDI2LCAweGY1LCAweDI1LCAweGY1LCAweDI0LCAweGMyLCAweDA1LCAweGMyLAorICAweDE3LCAweGMyLCAweDE5LCAweGMyLCAweDE2LCAweGMyLCAweDE4LCAweGMyLCAweDA0LCAweGQyLCAweDEzLCAweGMyLCAweDA2LCAweGMyLCAweDAxfX0sCisgezB4MGE4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwKKyAgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHg3NCwgMHgwZSwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhiYywgMHhkMn19LAorIHsweDBhYzYsIDY0LCB7IDB4MWEsIDB4MTIsIDB4MGYsIDB4N2QsIDB4YzIsIDB4MTcsIDB4MzAsIDB4MDQsIDB4MDMsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MzAsIDB4MDQsIDB4MmEsIDB4MzAsIDB4MDYsCisgIDB4MjcsIDB4YzIsIDB4MDYsIDB4ZTUsIDB4MTIsIDB4NjAsIDB4MTYsIDB4MTUsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4MzAsIDB4ZTYsIDB4MDQsCisgIDB4N2YsIDB4MDAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDYsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4NzQsIDB4MjAsIDB4ZjAsIDB4MTIsIDB4MGIsIDB4MTQsIDB4ODAsIDB4Y2QsIDB4MzAsIDB4MTcsIDB4MDcsIDB4YzIsIDB4MTcsIDB4MTIsIDB4MDd9fSwKKyB7MHgwYjA2LCA2NCwgeyAweGMwLCAweDgwLCAweGMzLCAweDMwLCAweDE5LCAweGMwLCAweGMyLCAweDE5LCAweDEyLCAweDBlLCAweGRjLCAweDgwLCAweGI5LCAweDIyLCAweGU1LCAweDMxLCAweDYwLAorICAweDAyLCAweDE1LCAweDMxLCAweGU1LCAweDM5LCAweDYwLCAweDU1LCAweDY1LCAweDM1LCAweDcwLCAweDRiLCAweGU1LCAweDMzLCAweGY0LCAweDYwLCAweDAyLAorICAweDA1LCAweDMzLCAweGU1LCAweDMzLCAweGMzLCAweDk1LCAweDQ0LCAweDQwLCAweDQzLCAweGMyLCAweGFmLCAweDMwLCAweDAyLCAweDFiLCAweDkwLCAweDdmLAorICAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDJkLCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDM5LCAweGYwLCAweGMyLCAweDAyLCAweGU0LCAweGY1fX0sCisgezB4MGI0NiwgNjQsIHsgMHgzOSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNSwgMHg3NSwgMHgxMiwgMHhmZiwgMHg4MCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwKKyAgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlNSwgMHgzOSwgMHhmMCwgMHhkMiwgMHgwMiwgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNSwgMHg3NSwKKyAgMHgxMiwgMHhmZiwgMHhkMiwgMHhhZiwgMHg4MCwgMHgwNiwgMHg4NSwgMHgzOSwgMHgzNSwgMHhlNCwgMHhmNSwgMHgzMywgMHhlNSwgMHgyYywgMHg2MCwgMHgzMCwKKyAgMHgyMCwgMHgwZiwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMCwgMHgwZiwgMHhlNSwgMHgyZCwgMHg2MCwgMHgwNiwgMHhlNH19LAorIHsweDBiODYsIDY0LCB7IDB4ZjUsIDB4MmQsIDB4NDMsIDB4MzQsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzAsIDB4ODAsIDB4MTQsIDB4ZTUsIDB4MzAsIDB4ZDMsIDB4OTUsIDB4NDUsIDB4NTAsIDB4MGQsCisgIDB4ZTUsIDB4MzAsIDB4YjUsIDB4NDUsIDB4MDYsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NDMsIDB4MzQsIDB4MDEsIDB4MDUsIDB4MzAsIDB4YzIsIDB4MGYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MTQsIDB4NDUsIDB4MTMsIDB4NjAsIDB4NTcsIDB4YWUsIDB4MTMsIDB4YWYsIDB4MTQsIDB4ZDMsIDB4ZWZ9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDk0LCAweDQwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDQwLCAweGMzLCAweGU1LCAweDE0LCAweDlmLCAweGY1LCAweDE0LAorICAweGU1LCAweDEzLCAweDllLCAweGY1LCAweDEzLCAweGU0LCAweGZkLCAweGVkLCAweGMzLCAweDlmLCAweGU0LCAweDllLCAweDUwLCAweDFmLCAweDg1LCAweDE2LAorICAweDgyLCAweDg1LCAweDE1LCAweDgzLCAweGUwLCAweGZjLCAweDc0LCAweDAwLCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLAorICAweGVjLCAweGYwLCAweDBkLCAweDA1LCAweDE2LCAweGU1LCAweDE2LCAweDcwLCAweDAyLCAweDA1LCAweDE1LCAweDgwLCAweGRhLCAweDkwLCAweDdmfX0sCisgezB4MGMwNiwgNjQsIHsgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlZiwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5NCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHg3NCwgMHg4Nn19LAorIHsweDBjNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsCisgIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsCisgIDB4NDMsIDB4YTgsIDB4MTAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ZDIsCisgIDB4MDQsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjJ9fSwKKyB7MHgwYzg2LCA2NCwgeyAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLAorICAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLAorICAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LAorICAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzfX0sCisgezB4MGNjNiwgNjQsIHsgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5ZCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg0NCwgMHg0MiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5YywgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhiZSwgMHhmMCwgMHgzMCwKKyAgMHgxNiwgMHgwNCwgMHg3ZiwgMHg4MCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlZiwgMHhmMCwgMHhlNCwgMHg5MH19LAorIHsweDBkMDYsIDY0LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4YzAsCisgIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsCisgIDB4MDgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MGIsIDB4YmEsIDB4ZDAsIDB4ZDAsIDB4ZDAsCisgIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzB9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLCAweGM0LAorICAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLAorICAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGQ4NiwgNjQsIHsgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxYywgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwKKyAgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg0MywgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNywKKyAgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDBkYzYsIDY0LCB7IDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsCisgIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4MTAsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksCisgIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksCisgIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTAsIDB4MDB9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDUzLCAweDAwLCAweDQ4LCAweDAwLCAweDMxLCAweDAwLCAweDMxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLAorICAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIyLCAweDAzLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQxLCAweDAwLCAweDJkLAorICAweDAwLCAweDM1LCAweDAwLCAweDMzLCAweDAwLCAweDIwLCAweDAwLCAweDMyLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMyLCAweDAwLCAweDYxLAorICAweDAwLCAweDcwLCAweDAwLCAweDcyLCAweDAwLCAweDMyLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweGUwLCAweGMwLCAweDgzfX0sCisgezB4MGU0NiwgNjQsIHsgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHhkMiwgMHgwNiwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwKKyAgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwKKyAgMHgwMCwgMHhkMiwgMHgxNywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMH19LAorIHsweDBlODYsIDY0LCB7IDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsCisgIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTksIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsCisgIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsCisgIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDB9fSwKKyB7MHgwZWM2LCA2NCwgeyAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDAyLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDEyLCAweDBjLCAweGNhLCAweDEyLCAweDBmLCAweGIzLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLAorICAweGU3LCAweDEyLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDBkLCAweDdlLCAweDAwLCAweDEyLCAweDAwLCAweDAzLCAweDkwLCAweDdmLCAweGQ2LAorICAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDEyLCAweDBjLCAweDI0LCAweDIyLCAweDAwLCAweDAyLCAweDBlLCAweDY5LCAweDAwLCAweDAyLCAweDBlfX0sCisgezB4MGYwNiwgNjQsIHsgMHg0MiwgMHgwMCwgMHgwMiwgMHgwZCwgMHg0NSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg5MCwgMHgwMCwgMHgwMiwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwZiwgMHgxNCwKKyAgMHgwMCwgMHgwMiwgMHgwZCwgMHgxMiwgMHgwMCwgMHgwMiwgMHgwZiwgMHgxYywgMHgwMCwgMHgwMiwgMHgwZSwgMHhiNywgMHgwMCwgMHgwMiwgMHgwZiwgMHgyNCwKKyAgMHgwMCwgMHgwMiwgMHgwZiwgMHgzMywgMHgwMCwgMHgwMiwgMHgwZiwgMHgyYywgMHgwMCwgMHgwMiwgMHgwZiwgMHg1OCwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywKKyAgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MH19LAorIHsweDBmNDYsIDY0LCB7IDB4N2YsIDB4YTksIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsCisgIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsCisgIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsCisgIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDR9fSwKKyB7MHgwZjg2LCA2MSwgeyAweDA4LCAweGYwLCAweDMwLCAweDFhLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDAwLCAweDAzLCAweDkwLAorICAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLAorICAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLAorICAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9fQorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLlMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThmZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLlMKQEAgLTAsMCArMSwxMTI0IEBACisvKiAgJElkOiBsb29wLnMsdiAxLjIzIDIwMDAvMDMvMjAgMDk6NDk6MDYgd2FybmVyIEV4cCAkCisgKiAKKyAqICBGaXJtd2FyZSBmb3IgdGhlIEtleXNwYW4gUERBIFNlcmlhbCBBZGFwdGVyLCBhIFVTQiBzZXJpYWwgcG9ydCBiYXNlZCBvbgorICogIHRoZSBFelVTQiBtaWNyb2NvbnRyb2xsZXIuCisgKiAKKyAqICAoQykgQ29weXJpZ2h0IDIwMDAgQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqIAorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqICAiS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIiIGlzIHByb2JhYmx5IGEgY29weXJpZ2h0IG9mIEtleXNwYW4sIHRoZQorICogIGNvbXBhbnkuCisgKiAKKyAqICBUaGlzIHNlcmlhbCBhZGFwdGVyIGlzIGJhc2ljYWxseSBhbiBFelVTQiBjaGlwIGFuZCBhbiBSUy0yMzIgbGluZSBkcml2ZXIKKyAqICBpbiBhIGxpdHRsZSB3aWRnZXQgdGhhdCBoYXMgYSBEQi05IG9uIG9uZSBlbmQgYW5kIGEgVVNCIHBsdWcgb24gdGhlIG90aGVyLgorICogIEl0IHVzZXMgdGhlIEV6VVNCJ3MgaW50ZXJuYWwgVUFSVDAgKHVzaW5nIHRoZSBwaW5zIGZyb20gUG9ydCBDKSBhbmQgdGltZXIyCisgKiAgYXMgYSBiYXVkLXJhdGUgZ2VuZXJhdG9yLiBUaGUgd2lyaW5nIGlzOgorICogICBQQzAvUnhEMCA8LSByeGQgKERCOSBwaW4gMikgICAgICAgICBQQzQgPC0gZHNyIHBpbiA2CisgKiAgIFBDMS9UeEQwIC0+IHR4ZCBwaW4gMyAgICAgICAgICAgICAgIFBDNSA8LSByaSAgcGluIDkKKyAqICAgUEMyICAgICAgLT4gcnRzIHBpbiA3ICAgICAgICAgICAgICAgUEM2IDwtIGRjZCBwaW4gMQorICogICBQQzMgICAgICA8LSBjdHMgcGluIDggICAgICAgICAgICAgICBQQzcgLT4gZHRyIHBpbiA0CisgKiAgIFBCMSAtPiBsaW5lIGRyaXZlciBzdGFuZGJ5CisgKgorICogIFRoZSBFelVTQiByZWdpc3RlciBjb25zdGFudHMgYmVsb3cgY29tZSBmcm9tIHRoZWlyIGV4Y2VsbGVudCBkb2N1bWVudGF0aW9uCisgKiAgYW5kIHNhbXBsZSBjb2RlICh3aGljaCB1c2VkIHRvIGJlIGF2YWlsYWJsZSBhdCB3d3cuYW5jaG9yY2hpcHMuY29tLCBidXQKKyAqICB0aGF0IGhhcyBub3cgYmVlbiBhYnNvcmJlZCBpbnRvIEN5cHJlc3MnIHNpdGUgYW5kIHRoZSBDRC1ST00gY29udGVudHMKKyAqICBkb24ndCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlIG9ubGluZSBhbnltb3JlKS4gSWYgd2UgZ2V0IG11bHRpcGxlCisgKiAgRXpVU0ItYmFzZWQgZHJpdmVycyBpbnRvIHRoZSBrZXJuZWwsIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBwdWxsIHRoZW0gb3V0CisgKiAgaW50byBhIHNlcGFyYXRlIC5oIGZpbGUuCisgKiAKKyAqIFRIRU9SWSBPRiBPUEVSQVRJT046CisgKgorICogICBUaGVyZSBhcmUgdHdvIDI1Ni1ieXRlIHJpbmcgYnVmZmVycywgb25lIGZvciB0eCwgb25lIGZvciByeC4KKyAqCisgKiAgIEVQMm91dCBpcyBwdXJlIHR4IGRhdGEuIFdoZW4gaXQgYXBwZWFycywgdGhlIGRhdGEgaXMgY29waWVkIGludG8gdGhlIHR4CisgKiAgIHJpbmcgYW5kIHNlcmlhbCB0cmFuc21pc3Npb24gaXMgc3RhcnRlZCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBydW5uaW5nLiBUaGUKKyAqICAgInR4IGJ1ZmZlciBlbXB0eSIgaW50ZXJydXB0IG1heSBraWNrIG9mZiBhbm90aGVyIGNoYXJhY3RlciBpZiB0aGUgcmluZworICogICBzdGlsbCBoYXMgZGF0YS4gSWYgdGhlIGhvc3QgaXMgdHgtYmxvY2tlZCBiZWNhdXNlIHRoZSByaW5nIGZpbGxlZCB1cCwKKyAqICAgaXQgd2lsbCByZXF1ZXN0IGEgInR4IHVudGhyb3R0bGUiIGludGVycnVwdC4gSWYgc2VuZGluZyBhIHNlcmlhbCBjaGFyYWN0ZXIKKyAqICAgZW1wdGllcyB0aGUgcmluZyBiZWxvdyB0aGUgZGVzaXJlZCB0aHJlc2hvbGQsIHdlIHNldCBhIGJpdCB0aGF0IHdpbGwgc2VuZAorICogICB1cCB0aGUgdHggdW50aHJvdHRsZSBtZXNzYWdlIGFzIHNvb24gYXMgdGhlIHJ4IGJ1ZmZlciBiZWNvbWVzIGZyZWUuCisgKgorICogICBFUDJpbiAoaW50ZXJydXB0KSBpcyB1c2VkIHRvIHNlbmQgYm90aCByeCBjaGFycyBhbmQgcnggc3RhdHVzIG1lc3NhZ2VzCisgKiAgIChvbmx5ICJ0eCB1bnRocm90dGxlIiBhdCB0aGlzIHRpbWUpIGJhY2sgdXAgdG8gdGhlIGhvc3QuIFRoZSBmaXJzdCBieXRlCisgKiAgIG9mIHRoZSByeCBtZXNzYWdlIGluZGljYXRlcyBkYXRhICgwKSBvciBzdGF0dXMgbXNnICgxKS4gU3RhdHVzIG1lc3NhZ2VzCisgKiAgIGFyZSBzZW50IGJlZm9yZSBhbnkgZGF0YS4KKyAqCisgKiAgIEluY29taW5nIHNlcmlhbCBjaGFyYWN0ZXJzIGFyZSBwdXQgaW50byB0aGUgcnggcmluZyBieSB0aGUgc2VyaWFsCisgKiAgIGludGVycnVwdCwgYW5kIHRoZSBFUDJpbiBidWZmZXIgc2VudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBpbiB0cmFuc2l0LgorICogICBXaGVuIHRoZSBFUDJpbiBidWZmZXIgcmV0dXJucywgdGhlIGludGVycnVwdCBwcm9tcHRzIHVzIHRvIHNlbmQgbW9yZQorICogICByeCBjaGFycyAob3Igc3RhdHVzIG1lc3NhZ2VzKSBpZiB0aGV5IGFyZSBwZW5kaW5nLgorICoKKyAqICAgRGV2aWNlIGNvbnRyb2wgaGFwcGVucyB0aHJvdWdoICJ2ZW5kb3Igc3BlY2lmaWMiIGNvbnRyb2wgbWVzc2FnZXMgb24gRVAwLgorICogICBBbGwgbWVzc2FnZXMgYXJlIGRlc3RpbmVkIGZvciB0aGUgIkludGVyZmFjZSIgKHdpdGggdGhlIGluZGV4IGFsd2F5cyAwLAorICogICBzbyB0aGF0IGlmIHRoZWlyIHR3by1wb3J0IGRldmljZSBtaWdodCBzb21lZGF5IHVzZSBzaW1pbGFyIGZpcm13YXJlLCB3ZQorICogICBjYW4gdXNlIGluZGV4PTEgdG8gcmVmZXIgdG8gdGhlIHNlY29uZCBwb3J0KS4gVGhlIG1lc3NhZ2VzIGRlZmluZWQgYXJlOgorICoKKyAqICAgIGJSZXF1ZXN0ID0gMCA6IHNldCBiYXVkL2JpdHMvcGFyaXR5CisgKiAgICAgICAgICAgICAgIDEgOiB1bnVzZWQKKyAqICAgICAgICAgICAgICAgMiA6IHJlc2VydmVkIGZvciBzZXR0aW5nIEhXIGZsb3cgY29udHJvbCAoQ1RTUlRTKQorICogICAgICAgICAgICAgICAzIDogZ2V0L3NldCAibW9kZW0gaW5mbyIgKHBpbiBzdGF0ZXM6IERUUiwgUlRTLCBEQ0QsIFJJLCBldGMpCisgKiAgICAgICAgICAgICAgIDQgOiBzZXQgYnJlYWsgKG9uL29mZikKKyAqICAgICAgICAgICAgICAgNSA6IHJlc2VydmVkIGZvciByZXF1ZXN0aW5nIGludGVycnVwdHMgb24gcGluIHN0YXRlIGNoYW5nZQorICogICAgICAgICAgICAgICA2IDogcXVlcnkgYnVmZmVyIHJvb20gb3IgY2hhcnMgaW4gdHggYnVmZmVyCisgKiAgICAgICAgICAgICAgIDcgOiByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisgKgorICogIFRoZSBob3N0LXNpZGUgZHJpdmVyIGlzIHNldCB0byByZWNvZ25pemUgdGhlIGRldmljZSBJRCB2YWx1ZXMgc3Rhc2hlZCBpbgorICogIHNlcmlhbCBFRVBST00gKDB4MDZjZCwgMHgwMTAzKSwgcHJvZ3JhbSB0aGlzIGZpcm13YXJlIGludG8gcGxhY2UsIHRoZW4KKyAqICBzdGFydCBpdCBydW5uaW5nLiBUaGlzIGZpcm13YXJlIHdpbGwgdXNlIEV6VVNCJ3MgInJlbnVtZXJhdGlvbiIgdHJpY2sgYnkKKyAqICBzaW11bGF0aW5nIGEgYnVzIGRpc2Nvbm5lY3QsIHRoZW4gcmVjb25uZWN0IHdpdGggYSBkaWZmZXJlbnQgZGV2aWNlIElECisgKiAgKGVuY29kZWQgaW4gdGhlIGRlc2NfZGV2aWNlIGRlc2NyaXB0b3IgYmVsb3cpLiBUaGUgaG9zdCBkcml2ZXIgdGhlbgorICogIHJlY29nbml6ZXMgdGhlIG5ldyBkZXZpY2UgSUQgYW5kIGdsdWVzIGl0IHRvIHRoZSByZWFsIHNlcmlhbCBkcml2ZXIgY29kZS4KKyAqCisgKiBVU0VGVUwgRE9DUzoKKyAqICBFelVTQiBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbDogPGh0dHA6Ly93d3cuYW5jaG9yY2hpcHMuY29tPgorICogIDgwNTEgbWFudWFsczogZXZlcnl3aGVyZSwgYnV0IHRyeSB3d3cuZGFsc2VtaS5jb20gYmVjYXVzZSB0aGUgRXpVU0IgaXMKKyAqICAgYmFzaWNhbGx5IHRoZSBEYWxsYXMgZW5oYW5jZWQgODA1MSBjb2RlLiBSZW1lbWJlciB0aGF0IHRoZSBFelVTQiBJTyBwb3J0cworICogICB1c2UgdG90YWxseSBkaWZmZXJlbnQgcmVnaXN0ZXJzIQorICogIFVTQiAxLjEgc3BlYzogd3d3LnVzYi5vcmcKKyAqCisgKiBIT1cgVE8gQlVJTEQ6CisgKiAgZ2NjIC14IGFzc2VtYmxlci13aXRoLWNwcCAtUCAtRSAtbyBrZXlzcGFuX3BkYS5hc20ga2V5c3Bhbl9wZGEucworICogIGFzMzEgLWwga2V5c3Bhbl9wZGEuYXNtCisgKiAgbXYga2V5c3Bhbl9wZGEub2JqIGtleXNwYW5fcGRhLmhleAorICogIHBlcmwgZXp1c2JfY29udmVydC5wbCBrZXlzcGFuX3BkYSA8IGtleXNwYW5fcGRhLmhleCA+IGtleXNwYW5fcGRhX2Z3LmgKKyAqIEdldCBhczMxIGZyb20gPGh0dHA6Ly93d3cucGpyYy5jb20vdGVjaC84MDUxL2luZGV4Lmh0bWw+LCBhbmQgaGFjayBvbiBpdAorICogYSBiaXQgdG8gbWFrZSBpdCBidWlsZC4KKyAqCisgKiBUSEFOS1M6CisgKiAgR3JlZyBLcm9haC1IYXJ0bWFuLCBmb3IgY29vcmRpbmF0aW5nIHRoZSB3aG9sZSB1c2Itc2VyaWFsIHRoaW5nLgorICogIEFuY2hvckNoaXBzLCBmb3IgbWFraW5nIHN1Y2ggYW4gaW5jcmVkaWJseSB1c2VmdWwgbGl0dGxlIG1pY3JvY29udHJvbGxlci4KKyAqICBLZXlTcGFuLCBmb3IgbWFraW5nIGEgaGFuZHksIGNoZWFwICgkNDApIHdpZGdldCB0aGF0IHdhcyBzbyBlYXN5IHRvIHRha2UKKyAqICAgICAgICAgICBhcGFydCBhbmQgdHJhY2Ugd2l0aCBhbiBvaG1tZXRlci4KKyAqCisgKiBUT0RPOgorICogIGxvdHMuIGdyZXAgZm9yIFRPRE8uIEludGVycnVwdCBzYWZldHkgbmVlZHMgc3RyZXNzLXRlc3RpbmcuIEJldHRlciBmbG93CisgKiAgY29udHJvbC4gSW50ZXJydXB0aW5nIGhvc3QgdXBvbiBjaGFuZ2UgaW4gRENELCBldGMsIGNvdW50aW5nIHRyYW5zaXRpb25zLgorICogIE5lZWQgdG8gZmluZCBhIHNhZmUgZGV2aWNlIGlkIHRvIHVzZSAodGhlIG9uZSB1c2VkIGJ5IHRoZSBLZXlzcGFuIGZpcm13YXJlCisgKiAgdW5kZXIgV2luZG93cyB3b3VsZCBiZSBpZGVhbC4uIGNhbiBhbnlvbmUgZmlndXJlIG91dCB3aGF0IGl0IGlzPykuIFBhcml0eS4KKyAqICBNb3JlIGJhdWQgcmF0ZXMuIE9oLCBhbmQgdGhlIHN0cmluZy1kZXNjcmlwdG9yLWxlbmd0aCBzaWxpY29uIGJ1ZworICogIHdvcmthcm91bmQgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgSSdtIGxhenksIGFuZCB0aGUgY29uc2VxdWVuY2UgaXMKKyAqICB0aGF0IHRoZSBkZXZpY2UgbmFtZSBzdHJpbmdzIHRoYXQgc2hvdyB1cCBpbiB5b3VyIGtlcm5lbCBsb2cgd2lsbCBoYXZlCisgKiAgbG90cyBvZiB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZSBpbiB0aGVtIChhcHBlYXJzIGFzID8/Pz8pLiBEZXZpY2Ugc3RyaW5ncworICogIHNob3VsZCBiZSBtYWRlIG1vcmUgYWNjdXJhdGUuCisgKgorICogUXVlc3Rpb25zLCBidWdzLCBwYXRjaGVzIHRvIEJyaWFuLgorICoKKyAqICAtQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqCisgKi8KKwkKKyNkZWZpbmUgSElHSCh4KSAoKCh4KSAmIDB4ZmYwMCkgLyAyNTYpCisjZGVmaW5lIExPVyh4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBkcGwxIDB4ODQKKyNkZWZpbmUgZHBoMSAweDg1CisjZGVmaW5lIGRwcyAweDg2CisKKzs7OyBvdXIgYml0IGFzc2lnbm1lbnRzCisjZGVmaW5lIFRYX1JVTk5JTkcgMAorI2RlZmluZSBET19UWF9VTlRIUk9UVExFIDEKKwkKKwk7OyBzdGFjayBmcm9tIDB4NjAgdG8gMHg3Zjogc2hvdWxkIHJlYWxseSBzZXQgU1AgdG8gMHg2MC0xLCBub3QgMHg2MAorI2RlZmluZSBTVEFDSyAjMHg2MC0xCisKKyNkZWZpbmUgRVhJRiAweDkxCisjZGVmaW5lIEVJRSAweGU4CisJLmZsYWcgRVVTQiwgRUlFLjAKKwkuZmxhZyBFUzAsIElFLjQKKworI2RlZmluZSBFUDBDUyAjMHg3ZmI0CisjZGVmaW5lIEVQMFNUQUxMYml0ICMweDAxCisjZGVmaW5lIElOMEJVRiAjMHg3ZjAwCisjZGVmaW5lIElOMEJDICMweDdmYjUKKyNkZWZpbmUgT1VUMEJVRiAjMHg3ZWMwCisjZGVmaW5lIE9VVDBCQyAjMHg3ZmM1CQkKKyNkZWZpbmUgSU4yQlVGICMweDdlMDAKKyNkZWZpbmUgSU4yQkMgIzB4N2ZiOQorI2RlZmluZSBJTjJDUyAjMHg3ZmI4CisjZGVmaW5lIE9VVDJCQyAjMHg3ZmM5CisjZGVmaW5lIE9VVDJDUyAjMHg3ZmM4CisjZGVmaW5lIE9VVDJCVUYgIzB4N2RjMAorI2RlZmluZSBJTjRCVUYgIzB4N2QwMAorI2RlZmluZSBJTjRCQyAjMHg3ZmJkCisjZGVmaW5lIElONENTICMweDdmYmMKKyNkZWZpbmUgT0VCICMweDdmOWQKKyNkZWZpbmUgT1VUQiAjMHg3Zjk3CisjZGVmaW5lIE9FQyAjMHg3ZjllCisjZGVmaW5lIE9VVEMgIzB4N2Y5OAorI2RlZmluZSBQSU5TQyAjMHg3ZjliCisjZGVmaW5lIFBPUlRDQ0ZHICMweDdmOTUKKyNkZWZpbmUgSU4wN0lSUSAjMHg3ZmE5CisjZGVmaW5lIE9VVDA3SVJRICMweDdmYWEKKyNkZWZpbmUgSU4wN0lFTiAjMHg3ZmFjCisjZGVmaW5lIE9VVDA3SUVOICMweDdmYWQKKyNkZWZpbmUgVVNCSVJRICMweDdmYWIKKyNkZWZpbmUgVVNCSUVOICMweDdmYWUKKyNkZWZpbmUgVVNCQkFWICMweDdmYWYKKyNkZWZpbmUgVVNCQ1MgIzB4N2ZkNgorI2RlZmluZSBTVURQVFJIICMweDdmZDQKKyNkZWZpbmUgU1VEUFRSTCAjMHg3ZmQ1CisjZGVmaW5lIFNFVFVQREFUICMweDdmZTgKKwkJCisJOzsgdXNiIGludGVycnVwdCA6IGVuYWJsZSBpcyBFSUUuMCAoMHhlOCksIGZsYWcgaXMgRVhJRi40ICgweDkxKQorCisJLm9yZyAwCisJbGptcCBzdGFydAorCTs7IGludGVycnVwdCB2ZWN0b3JzCisJLm9yZyAyM0gKKwlsam1wIHNlcmlhbF9pbnQKKwkuYnl0ZSAwCisJCisJLm9yZyA0M0gKKwlsam1wIFVTQl9KdW1wX1RhYmxlCisJLmJ5dGUgMAkJCTsgZmlsbGVkIGluIGJ5IHRoZSBVU0IgY29yZQorCis7OzsgbG9jYWwgdmFyaWFibGVzLiBUaGVzZSBhcmUgbm90IGluaXRpYWxpemVkIHByb3Blcmx5OiBkbyBpdCBieSBoYW5kLgorCS5vcmcgMzBICityeF9yaW5nX2luOgkuYnl0ZSAwCityeF9yaW5nX291dDoJLmJ5dGUgMAordHhfcmluZ19pbjoJLmJ5dGUgMAordHhfcmluZ19vdXQ6CS5ieXRlIDAKK3R4X3VudGhyb3R0bGVfdGhyZXNob2xkOgkuYnl0ZSAwCisJCQorCS5vcmcgMHgxMDBICQk7IHdhbnRzIHRvIGJlIG9uIGEgcGFnZSBib3VuZGFyeQorVVNCX0p1bXBfVGFibGU6CisJbGptcAlJU1JfU3VkYXYJOyBTZXR1cCBEYXRhIEF2YWlsYWJsZQorCS5ieXRlIDAKKwlsam1wCTAJCTsgU3RhcnQgb2YgRnJhbWUKKwkuYnl0ZSAwCisJbGptcAkwCQk7IFNldHVwIERhdGEgTG9hZGluZworCS5ieXRlIDAKKwlsam1wCTAJCTsgR2xvYmFsIFN1c3BlbmQKKwkuYnl0ZSAJMAorCWxqbXAJMAkJOyBVU0IgUmVzZXQgIAkKKwkuYnl0ZQkwCisJbGptcAkwCQk7IFJlc2VydmVkCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMCBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDAgT3V0CisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMSBJbgorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDEgT3V0CisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMmluCisJLmJ5dGUJMAorCWxqbXAJSVNSX0VwMm91dAorCS5ieXRlCTAKKworCisJLm9yZyAweDIwMAorCQkKK3N0YXJ0Ogltb3YgU1AsU1RBQ0stMSA7IHNldCBzdGFjaworCTs7IGNsZWFyIGxvY2FsIHZhcmlhYmxlcworCWNsciBhCisJbW92IHR4X3JpbmdfaW4sIGEKKwltb3YgdHhfcmluZ19vdXQsIGEKKwltb3YgcnhfcmluZ19pbiwgYQorCW1vdiByeF9yaW5nX291dCwgYQorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgYQorCWNsciBUWF9SVU5OSU5HCisJY2xyIERPX1RYX1VOVEhST1RUTEUKKwkKKwk7OyBjbGVhciBmaWZvIHdpdGggImZlIgorCW1vdiByMSwgMAorCW1vdiBhLCAjMHhmZQorCW1vdiBkcHRyLCAjdHhfcmluZworY2xlYXJfdHhfcmluZ19sb29wOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWRqbnogcjEsIGNsZWFyX3R4X3JpbmdfbG9vcAorCisJbW92IGEsICMweGZkCisJbW92IGRwdHIsICNyeF9yaW5nCitjbGVhcl9yeF9yaW5nX2xvb3A6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJZGpueiByMSwgY2xlYXJfcnhfcmluZ19sb29wCisKKzs7OyB0dXJuIG9uIHRoZSBSUy0yMzIgZHJpdmVyIGNoaXAgKGJyaW5nIHRoZSBTVEFOREJZIHBpbiBsb3cpCisJOzsgc2V0IE9FQi4xCisJbW92IGEsICMwMkgKKwltb3YgZHB0cixPRUIKKwltb3Z4IEBkcHRyLGEKKwk7OyBjbGVhciBQQjEKKwltb3YgYSwgIzAwSAorCW1vdiBkcHRyLE9VVEIKKwltb3Z4IEBkcHRyLGEKKwk7OyBzZXQgT0VDLlsxMjddCisJbW92IGEsICMweDg2CisJbW92IGRwdHIsT0VDCisJbW92eCBAZHB0cixhCisJOzsgc2V0IFBPUlRDQ0ZHLlswMV0gdG8gcm91dGUgVHhEMCxSeEQwIHRvIHNlcmlhbCBwb3J0CisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92IGEsICMweDAzCisJbW92eCBAZHB0ciwgYQorCQorCTs7IHNldCB1cCBpbnRlcnJ1cHRzLCBhdXRvdmVjdG9yaW5nCisJbW92IGRwdHIsIFVTQkJBVgorCW1vdnggYSxAZHB0cgorCXNldGIgYWNjLjAJCTsgQVZFTiBiaXQgdG8gMAorCW1vdnggQGRwdHIsIGEKKworCW1vdiBhLCMweDAxCQk7IGVuYWJsZSBTVURBVjoJc2V0dXAgZGF0YSBhdmFpbGFibGUgKGZvciBlcDApCisJbW92IGRwdHIsIFVTQklSUQorCW1vdnggQGRwdHIsIGEJCTsgY2xlYXIgU1VEQVZJCisJbW92IGRwdHIsIFVTQklFTgorCW1vdnggQGRwdHIsIGEKKwkKKwltb3YgZHB0ciwgSU4wN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBJTjIgaW50CisJbW92eCBAZHB0ciwgYQorCQorCW1vdiBkcHRyLCBPVVQwN0lFTgorCW1vdiBhLCMweDA0CQk7IGVuYWJsZSBPVVQyIGludAorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgT1VUMkJDCisJbW92eCBAZHB0ciwgYQkJOyBhcm0gT1VUMgorCisJbW92IGEsICMweDg0CQk7IHR1cm4gb24gUlRTLCBEVFIKKwltb3YgZHB0cixPVVRDCisJbW92eCBAZHB0ciwgYQorCTs7IHNldHVwIHRoZSBzZXJpYWwgcG9ydC4gOTYwMCA4TjEuCisJbW92IGEsIzAxMDEwMDExCQk7IG1vZGUgMSwgZW5hYmxlIHJ4LCBjbGVhciBpbnQKKwltb3YgU0NPTiwgYQorCTs7ICB1c2luZyB0aW1lcjIsIGluIDE2LWJpdCBiYXVkLXJhdGUtZ2VuZXJhdG9yIG1vZGUKKwk7OyAgICh4dGFsIDEyTUh6LCBpbnRlcm5hbCBmb3NjIDI0TUh6KQorCTs7ICBSQ0FQMkgsUkNBUDJMID0gNjU1MzYgLSBmb3NjLygzMipiYXVkKQorCTs7ICA1NzYwMDogMHhGRkYyLkYsIHNheSAweEZGRjMKKwk7OyAgIDk2MDA6IDB4RkZCMS5FLCBzYXkgMHhGRkIyCisJOzsgICAgMzAwOiAweEY2M0MKKyNkZWZpbmUgQkFVRCA5NjAwCisjZGVmaW5lIEJBVURfVElNRU9VVChyYXRlKSAoNjU1MzYgLSAoMjQgKiAxMDAwICogMTAwMCkgLyAoMzIgKiByYXRlKSkKKyNkZWZpbmUgQkFVRF9ISUdIKHJhdGUpIEhJR0goQkFVRF9USU1FT1VUKHJhdGUpKQorI2RlZmluZSBCQVVEX0xPVyhyYXRlKSBMT1coQkFVRF9USU1FT1VUKHJhdGUpKQorCQkKKwltb3YgVDJDT04sICMwMzBoCTsgcmNsaz0xLHRjbGs9MSxjcD0wLHRyMj0wKGVuYWJsZSBsYXRlcikKKwltb3YgcjMsICM1CisJYWNhbGwgc2V0X2JhdWQKKwlzZXRiIFRSMgorCW1vdiBTQ09OLCAjMDUwaAorCQorI2lmIDAKKwltb3YgcjEsICMweDQwCisJbW92IGEsICMweDQxCitzZW5kOgkKKwltb3YgU0JVRiwgYQorCWluYyBhCisJYW5sIGEsICMweDNGCisJb3JsIGEsICMweDQwCis7CXhybCBhLCAjMHgwMgord2FpdDE6CQorCWpuYiBUSSwgd2FpdDEKKwljbHIgVEkKKwlkam56IHIxLCBzZW5kCis7ZG9uZToJc2ptcCBkb25lCisKKyNlbmRpZgorCQorCXNldGIgRVVTQgorCXNldGIgRUEKKwlzZXRiIEVTMAorCTthY2FsbCBkdW1wX3N0YXQKKworCTs7IGhleSwgd2hhdCBzYXkgd2UgUkVOVU1FUkFURSEgKFRSTSBwLjYyKQorCW1vdiBhLCAjMAorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgVVNCQ1MKKwltb3YgYSwgIzB4MDIJCTsgRElTQ09OPTAsIERJU0NPRT0wLCBSRU5VTT0xCisJbW92eCBAZHB0ciwgYQorCTs7IG5vdyBwcmVzZW5jZSBwaW4gaXMgZmxvYXRpbmcsIHNpbXVsYXRpbmcgZGlzY29ubmVjdC4gd2FpdCAwLjVzCisJbW92IHIxLCAjNDYKK3JlbnVtX3dhaXQxOgorCW1vdiByMiwgIzAKK3JlbnVtX3dhaXQyOgorCW1vdiByMywgIzAKK3JlbnVtX3dhaXQzOgorCWRqbnogcjMsIHJlbnVtX3dhaXQzCisJZGpueiByMiwgcmVudW1fd2FpdDIKKwlkam56IHIxLCByZW51bV93YWl0MQk7IHdhaXQgYWJvdXQgbiooMjU2XjIpIDZNSHogY2xvY2tzCisJbW92IGEsICMweDA2CQk7IERJU0NPTj0wLCBESVNDT0U9MSwgUkVOVU09MQorCW1vdnggQGRwdHIsIGEKKwk7OyB3ZSBhcmUgYmFjayBvbmxpbmUuIHRoZSBob3N0IGRldmljZSB3aWxsIG5vdyByZS1xdWVyeSB1cworCQorCQorbWFpbjoJc2ptcCBtYWluCisKKwkKKworSVNSX1N1ZGF2OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBVU0JJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzAxaAorCW1vdnggQGRwdHIsYQorCisJOzsgZ2V0IHJlcXVlc3QgdHlwZQorCW1vdiBkcHRyLCBTRVRVUERBVAorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEJCTsgcjEgPSBibVJlcXVlc3RUeXBlCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIyLCBhCQk7IHIyID0gYlJlcXVlc3QKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjMsIGEJCTsgcjMgPSB3VmFsdWVMCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHI0LCBhCQk7IHI0ID0gd1ZhbHVlSAorCisJOzsgbWFpbiBzd2l0Y2ggb24gYm1SZXF1ZXN0LnR5cGU6IHN0YW5kYXJkIG9yIHZlbmRvcgorCW1vdiBhLCByMQorCWFubCBhLCAjMHg2MAorCWNqbmUgYSwgIzB4MDAsIHNldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkCisJOzsgc3RhbmRhcmQgcmVxdWVzdDogbm93IG1haW4gc3dpdGNoIGlzIG9uIGJSZXF1ZXN0CisJbGptcCBzZXR1cF9ibXJlcV9pc19zdGFuZGFyZAorCQorc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmQ6CQorCTs7IGEgc3RpbGwgaGFzIGJtcmVxJjB4NjAKKwljam5lIGEsICMweDQwLCBzZXR1cF9ibXJlcV90eXBlX25vdF92ZW5kb3IKKwk7OyBBbmNob3IgcmVzZXJ2ZXMgYlJlcXVlc3QgMHhhMC0weGFmLCB3ZSB1c2Ugc21hbGwgb25lcworCTs7IHN3aXRjaCBvbiBiUmVxdWVzdC4gYm1SZXF1ZXN0IHdpbGwgYWx3YXlzIGJlIDB4NDEgb3IgMHhjMQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9jdHJsX25vdF8wMAorCTs7IDAwIGlzIHNldCBiYXVkLCB3VmFsdWVbMF0gaGFzIGJhdWQgcmF0ZSBpbmRleAorCWxjYWxsIHNldF9iYXVkCQk7IGluZGV4IGluIHIzLCBjYXJyeSBzZXQgaWYgZXJyb3IKKwlqYyBzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGwKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGw6CisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDA6CisJY2puZSByMiwgIzB4MDEsIHNldHVwX2N0cmxfbm90XzAxCisJOzsgMDEgaXMgcmVzZXJ2ZWQgZm9yIHNldCBiaXRzIChwYXJpdHkpLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDE6CisJY2puZSByMiwgIzB4MDIsIHNldHVwX2N0cmxfbm90XzAyCisJOzsgMDIgaXMgc2V0IEhXIGZsb3cgY29udHJvbC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAyOgorCWNqbmUgcjIsICMweDAzLCBzZXR1cF9jdHJsX25vdF8wMworCTs7IDAzIGlzIGNvbnRyb2wgcGlucyAoUlRTLCBEVFIpLgorCWxqbXAgY29udHJvbF9waW5zCTsgd2lsbCBqdW1wIHRvIHNldHVwX2RvbmVfYWNrLAorCQkJCTsgIG9yIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF9ub3RfMDM6CisJY2puZSByMiwgIzB4MDQsIHNldHVwX2N0cmxfbm90XzA0CisJOzsgMDQgaXMgc2VuZCBicmVhayAocmVhbGx5ICJ0dXJuIGJyZWFrIG9uL29mZiIpLiBUT0RPCisJY2puZSByMywgIzB4MDAsIHNldHVwX2N0cmxfZG9fYnJlYWtfb24KKwk7OyBkbyBicmVhayBvZmY6IHJlc3RvcmUgUE9SVENDRkcuMSB0byByZWNvbm5lY3QgVHhEMCB0byBzZXJpYWwgcG9ydAorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlvcmwgYSwgIzB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9kb19icmVha19vbjoKKwk7OyBkbyBicmVhayBvbjogY2xlYXIgUE9SVENDRkcuMCwgc2V0IFR4RCBoaWdoKD8pIChiMSBsb3cpCisJbW92IGRwdHIsIE9VVEMKKwltb3Z4IGEsIEBkcHRyCisJYW5sIGEsICMweGZkCQk7IH4weDAyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlhbmwgYSwgIzB4ZmQJCTsgfjB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9ub3RfMDQ6CisJY2puZSByMiwgIzB4MDUsIHNldHVwX2N0cmxfbm90XzA1CisJOzsgMDUgaXMgc2V0IGRlc2lyZWQgaW50ZXJydXB0IGJpdG1hcC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzA1OgorCWNqbmUgcjIsICMweDA2LCBzZXR1cF9jdHJsX25vdF8wNgorCTs7IDA2IGlzIHF1ZXJ5IHJvb20KKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfY3RybF8wNl9ub3RfMDAKKwk7OyAwNiwgd1ZhbHVlWzBdPTAgaXMgcXVlcnkgd3JpdGVfcm9vbQorCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgk7IG91dC0xLWluID0gMjU1IC0gKGluLW91dCkKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF8wNl9ub3RfMDA6CisJY2puZSByMywgIzB4MDEsIHNldHVwX2N0cmxfMDZfbm90XzAxCisJOzsgMDYsIHdWYWx1ZVswXT0xIGlzIHF1ZXJ5IGNoYXJzX2luX2J1ZmZlcgorCW1vdiBhLCB0eF9yaW5nX2luCisJY2xyIGMKKwlzdWJiIGEsIHR4X3Jpbmdfb3V0CTsgaW4tb3V0CisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfMDZfbm90XzAxOgkKKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wNjoKKwljam5lIHIyLCAjMHgwNywgc2V0dXBfY3RybF9ub3RfMDcKKwk7OyAwNyBpcyByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCByMzsgd1ZhbHVlWzBdIGlzIHRocmVzaG9sZCB2YWx1ZQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfbm90XzA3OgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JtcmVxX3R5cGVfbm90X3ZlbmRvcjoKKwlsam1wIHNldHVwX3N0YWxsCisKKworc2V0dXBfYm1yZXFfaXNfc3RhbmRhcmQ6CQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9icmVxX25vdF8wMAorCTs7IDAwOglHZXRfU3RhdHVzIChzdWItc3dpdGNoIG9uIGJtUmVxdWVzdFR5cGU6IGRldmljZSwgZXAsIGludCkKKwljam5lIHIxLCAjMHg4MCwgc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlCisJOzsgR2V0X1N0YXR1cyhkZXZpY2UpCisJOzsgIGFyZSB3ZSBzZWxmLXBvd2VyZWQ/IG5vLiBjYW4gd2UgZG8gcmVtb3RlIHdha2V1cD8gbm8KKwk7OyAgIHNvIHJldHVybiB0d28gemVybyBieXRlcy4gVGhpcyBpcyByZXVzYWJsZQorc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzOgorCW1vdiBkcHRyLCBJTjBCVUYKKwljbHIgYQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4wQkMKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlOgorCWNqbmUgcjEsICMweDgyLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9lbmRwb2ludAorCTs7IEdldF9TdGF0dXMoZW5kcG9pbnQpCisJOzsgIG11c3QgZ2V0IHN0YWxsIGJpdCBmb3IgZXBbd0luZGV4TF0sIHJldHVybiB0d28gYnl0ZXMsIGJpdCBpbiBsc2IgMAorCTs7IGZvciBub3c6IGNoZWF0LiBUT0RPCisJc2ptcCBzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXMKK3NldHVwX0dldF9TdGF0dXNfbm90X2VuZHBvaW50OgorCWNqbmUgcjEsICMweDgxLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9pbnRlcmZhY2UKKwk7OyBHZXRfU3RhdHVzKGludGVyZmFjZSk6IHJldHVybiB0d28gemVyb3MKKwlzam1wIHNldHVwX3JldHVybl90d29femVyb19ieXRlcworc2V0dXBfR2V0X1N0YXR1c19ub3RfaW50ZXJmYWNlOgkKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMDoKKwljam5lIHIyLCAjMHgwMSwgc2V0dXBfYnJlcV9ub3RfMDEKKwk7OyAwMToJQ2xlYXJfRmVhdHVyZSAoc3ViLXN3aXRjaCBvbiB3VmFsdWVMOiBzdGFsbCwgcmVtb3RlIHdha2V1cCkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGwKKwk7OyBDbGVhcl9GZWF0dXJlKHN0YWxsKS4gc2hvdWxkIGNsZWFyIGEgc3RhbGwgYml0LiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGw6CisJY2puZSByMywgIzB4MDEsIHNldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgQ2xlYXJfRmVhdHVyZShyZW1vdGUgd2FrZXVwKS4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9yd2FrZToKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMToKKwljam5lIHIyLCAjMHgwMywgc2V0dXBfYnJlcV9ub3RfMDMKKwk7OyAwMzoJU2V0X0ZlYXR1cmUgKHN1Yi1zd2l0Y2ggb24gd1ZhbHVlTDogc3RhbGwsIHJlbW90ZSB3YWtldXApCisJY2puZSByMywgIzB4MDAsIHNldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbAorCTs7IFNldF9GZWF0dXJlKHN0YWxsKS4gU2hvdWxkIHNldCBhIHN0YWxsIGJpdC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgU2V0X0ZlYXR1cmUocmVtb3RlIHdha2V1cCkuIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAzOgkKKwljam5lIHIyLCAjMHgwNiwgc2V0dXBfYnJlcV9ub3RfMDYKKwk7OyAwNjoJR2V0X0Rlc2NyaXB0b3IgKHMtc3dpdGNoIG9uIHdWYWx1ZUg6IGRldiwgY29uZmlnW25dLCBzdHJpbmdbbl0pCisJY2puZSByNCwgIzB4MDEsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2UKKwk7OyBHZXRfRGVzY3JpcHRvcihkZXZpY2UpCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgI0hJR0goZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsICNMT1coZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2U6CisJY2puZSByNCwgIzB4MDIsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWcKKwk7OyBHZXRfRGVzY3JpcHRvcihjb25maWdbbl0pCisJY2puZSByMywgIzB4MDAsIHNldHVwX3N0YWxsOyBvbmx5IGhhbmRsZSBuPT0wCisJOzsgR2V0X0Rlc2NyaXB0b3IoY29uZmlnWzBdKQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsICNISUdIKGRlc2NfY29uZmlnMSkKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgI0xPVyhkZXNjX2NvbmZpZzEpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWc6CisJY2puZSByNCwgIzB4MDMsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9zdHJpbmcKKwk7OyBHZXRfRGVzY3JpcHRvcihzdHJpbmdbd1ZhbHVlTF0pCisJOzsgIGlmICh3VmFsdWVMID49IG1heHN0cmluZ3MpIHN0YWxsCisJbW92IGEsICMoKGRlc2Nfc3RyaW5nc19lbmQtZGVzY19zdHJpbmdzKS8yKQorCWNsciBjCisJc3ViYiBhLHIzCQk7IGE9NCwgcjMgPSAwLi4zIC4gaWYgYTw9MCB0aGVuIHN0YWxsCisJamMgIHNldHVwX3N0YWxsCisJanogIHNldHVwX3N0YWxsCisJbW92IGEsIHIzCisJYWRkIGEsIHIzCQk7IGEgPSAyKndWYWx1ZUwKKwltb3YgZHB0ciwgI2Rlc2Nfc3RyaW5ncworCWFkZCBhLCBkcGwKKwltb3YgZHBsLCBhCisJbW92IGEsICMwCisJYWRkYyBhLCBkcGgKKwltb3YgZHBoLCBhCQk7IGRwaCA9IGRlc2Nfc3RyaW5nc1thXS4gYmlnIGVuZGlhbiEgKGhhbmR5KQorCTs7IGl0IGxvb2tzIGxpa2UgbXkgYWRhcHRlciB1c2VzIGEgcmV2aXNpb24gb2YgdGhlIEVaVVNCIHRoYXQKKwk7OyBjb250YWlucyAicmV2IEQgZXJyYXRhIG51bWJlciA4IiwgYXMgaGludGVkIGluIHRoZSBFelVTQiBleGFtcGxlCisJOzsgY29kZS4gSSBjYW5ub3QgZmluZCBhbiBhY3R1YWwgZXJyYXRhIGRlc2NyaXB0aW9uIG9uIHRoZSBDeXByZXNzCisJOzsgd2ViIHNpdGUsIGJ1dCBmcm9tIHRoZSBleGFtcGxlIGNvZGUgaXQgbG9va3MgbGlrZSB0aGlzIGJ1ZyBjYXVzZXMKKwk7OyB0aGUgbGVuZ3RoIG9mIHN0cmluZyBkZXNjcmlwdG9ycyB0byBiZSByZWFkIGluY29ycmVjdGx5LCBwb3NzaWJseQorCTs7IHNlbmRpbmcgYmFjayBtb3JlIGNoYXJhY3RlcnMgdGhhbiB0aGUgZGVzY3JpcHRvciBoYXMuIFRoZSB3b3JrYXJvdW5kCisJOzsgaXMgdG8gbWFudWFsbHkgc2VuZCBvdXQgYWxsIG9mIHRoZSBkYXRhLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90CisJOzsgdXNpbmcgdGhlIHdvcmthcm91bmQgaXMgdGhhdCB0aGUgc3RyaW5ncyBnYXRoZXJlZCBieSB0aGUga2VybmVsCisJOzsgZHJpdmVyIGFyZSB0b28gbG9uZyBhbmQgYXJlIGZpbGxlZCB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgKGluY2x1ZGluZworCTs7IGxlZnRvdmVyIHN0cmluZ3MpLiBXcml0aW5nIHRoaXMgb3V0IGJ5IGhhbmQgaXMgYSBudWlzYW5jZSwgc28gZm9yCisJOzsgbm93IEkgd2lsbCBqdXN0IGxpdmUgd2l0aCB0aGUgYnVnLgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjIsIGEKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCByMQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCByMgorCW1vdnggQGRwdHIsIGEKKwk7OyBkb25lCisJbGptcCBzZXR1cF9kb25lX2FjaworCQorc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X3N0cmluZzoKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wNjoKKwljam5lIHIyLCAjMHgwOCwgc2V0dXBfYnJlcV9ub3RfMDgKKwk7OyBHZXRfQ29uZmlndXJhdGlvbi4gYWx3YXlzIDEuIHJldHVybiBvbmUgYnl0ZS4KKwk7OyB0aGlzIGlzIHJldXNhYmxlCisJbW92IGEsICMxCitzZXR1cF9yZXR1cm5fb25lX2J5dGU6CQorCW1vdiBkcHRyLCBJTjBCVUYKKwltb3Z4IEBkcHRyLCBhCisJbW92IGEsICMxCisJbW92IGRwdHIsIElOMEJDCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzA4OgorCWNqbmUgcjIsICMweDA5LCBzZXR1cF9icmVxX25vdF8wOQorCTs7IDA5OiBTZXRfQ29uZmlndXJhdGlvbi4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wOToKKwljam5lIHIyLCAjMHgwYSwgc2V0dXBfYnJlcV9ub3RfMGEKKwk7OyAwYTogR2V0X0ludGVyZmFjZS4gZ2V0IHRoZSBjdXJyZW50IGFsdHNldHRpbmcgZm9yIGludFt3SW5kZXhMXQorCTs7ICBzaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGludGVyZmFjZSwgaWdub3JlIHdJbmRleEwsIHJldHVybiBhIDAKKwltb3YgYSwgIzAKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfYnJlcV9ub3RfMGE6CisJY2puZSByMiwgIzB4MGIsIHNldHVwX2JyZXFfbm90XzBiCisJOzsgMGI6IFNldF9JbnRlcmZhY2UuIHNldCBhbHRzZXR0aW5nIGZvciBpbnRlcmZhY2Vbd0luZGV4TF0uIGlnbm9yZWQKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wYjoKKwlsam1wIHNldHVwX3N0YWxsCisKKwkJCitzZXR1cF9kb25lX2FjazoJCisJOzsgbm93IGNsZWFyIEhTTkFLCisJbW92IGRwdHIsIEVQMENTCisJbW92IGEsICMweDAyCisJbW92eCBAZHB0ciwgYQorCXNqbXAgc2V0dXBfZG9uZQorc2V0dXBfc3RhbGw6CQorCTs7IHVuaGFuZGxlZC4gU1RBTEwKKwk7RVAwQ1MgfD0gYm1FUFNUQUxMCisJbW92IGRwdHIsIEVQMENTCisJbW92eCBhLCBAZHB0cgorCW9ybCBhLCBFUDBTVEFMTGJpdAorCW1vdnggQGRwdHIsIGEKKwlzam1wIHNldHVwX2RvbmUKKwkKK3NldHVwX2RvbmU6CQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK3NldF9iYXVkOgkJCTsgYmF1ZCBpbmRleCBpbiByMworCTs7IHZlcmlmeSBhIDwgMTAKKwltb3YgYSwgcjMKKwlqYiBBQ0MuNywgc2V0X2JhdWRfX2JhZGJhdWQKKwljbHIgYworCXN1YmIgYSwgIzEwCisJam5jIHNldF9iYXVkX19iYWRiYXVkCisJbW92IGEsIHIzCisJcmwgYQkJCTsgYSA9IGluZGV4KjIKKwlhZGQgYSwgI0xPVyhiYXVkX3RhYmxlKQorCW1vdiBkcGwsIGEKKwltb3YgYSwgI0hJR0goYmF1ZF90YWJsZSkKKwlhZGRjIGEsICMwCisJbW92IGRwaCwgYQorCTs7IFRPRE86IHNodXQgZG93biB4bWl0L3JlY2VpdmUKKwk7OyBUT0RPOiB3YWl0IGZvciBjdXJyZW50IHhtaXQgY2hhciB0byBsZWF2ZQorCTs7IFRPRE86IHNodXQgZG93biB0aW1lciB0byBhdm9pZCBwYXJ0aWFsLWNoYXIgZ2xpdGNoCisJbW92eCBhLEBkcHRyCQk7IEJBVURfSElHSAorCW1vdiBSQ0FQMkgsIGEKKwltb3YgVEgyLCBhCisJaW5jIGRwdHIKKwltb3Z4IGEsQGRwdHIJCTsgQkFVRF9MT1cKKwltb3YgUkNBUDJMLCBhCisJbW92IFRMMiwgYQorCTs7IFRPRE86IHJlc3RhcnQgeG1pdC9yZWNlaXZlCisJOzsgVE9ETzogcmVlbmFibGUgaW50ZXJydXB0cywgcmVzdW1lIHR4IGlmIHBlbmRpbmcKKwljbHIgYwkJCTsgYz0wOiBzdWNjZXNzCisJcmV0CitzZXRfYmF1ZF9fYmFkYmF1ZDoKKwlzZXRiIGMJCQk7IGM9MTogZmFpbHVyZQorCXJldAorCQorOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citjb250cm9sX3BpbnM6CisJY2puZSByMSwgIzB4NDEsIGNvbnRyb2xfcGluc19pbgorY29udHJvbF9waW5zX291dDoKKwltb3YgYSwgcjMgOyB3VmFsdWVbMF0gaG9sZHMgbmV3IGJpdHM6CWI3IGlzIG5ldyBEVFIsIGIyIGlzIG5ldyBSVFMKKwl4cmwgYSwgIzB4ZmYJCTsgMSBtZWFucyBhY3RpdmUsIDBWLCArMTJWID8KKwlhbmwgYSwgIzB4ODQKKwltb3YgcjMsIGEKKwltb3YgZHB0ciwgT1VUQworCW1vdnggYSwgQGRwdHIJCTsgb25seSBjaGFuZ2UgYml0cyA3IGFuZCAyCisJYW5sIGEsICMweDdiCQk7IH4weDg0CisJb3JsIGEsIHIzCisJbW92eCBAZHB0ciwgYQkJOyBvdGhlciBwaW5zIGFyZSBpbnB1dHMsIGJpdHMgaWdub3JlZAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK2NvbnRyb2xfcGluc19pbjoKKwltb3YgZHB0ciwgUElOU0MKKwltb3Z4IGEsIEBkcHRyCisJeHJsIGEsICMweGZmCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKKworOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK0lTUl9FcDJpbjoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgSU4wN0lSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDRoCisJbW92eCBAZHB0cixhCisKKwk7OyBkbyBzdHVmZgorCWxjYWxsIHN0YXJ0X2luCisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK0lTUl9FcDJvdXQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIE9VVDA3SVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwNGgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGRvIHN0dWZmCisKKwk7OyBjb3B5IGRhdGEgaW50byBidWZmZXIuIGZvciBub3csIGFzc3VtZSB3ZSB3aWxsIGhhdmUgZW5vdWdoIHNwYWNlCisJbW92IGRwdHIsIE9VVDJCQwk7IGdldCBieXRlIGNvdW50CisJbW92eCBhLEBkcHRyCisJbW92IHIxLCBhCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIE9VVDJCVUYJOyBsb2FkIERQVFIwIHdpdGggc291cmNlCisJbW92IGRwaDEsICNISUdIKHR4X3JpbmcpCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdiBkcGwxLCB0eF9yaW5nX2luCitPVVRfbG9vcDoKKwltb3Z4IGEsQGRwdHIJCTsgcmVhZAorCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMTogdGFyZ2V0CisJaW5jIGRwbDEJCTsgdGFyZ2V0ID0gdHhfcmluZ19pbisxCisJbW92eCBAZHB0cixhCQk7IHN0b3JlCisJbW92IGEsZHBsMQorCWNqbmUgYSwgdHhfcmluZ19vdXQsIE9VVF9ub19vdmVyZmxvdworCXNqbXAgT1VUX292ZXJmbG93CitPVVRfbm9fb3ZlcmZsb3c6CQorCWluYyB0eF9yaW5nX2luCQk7IHR4X3JpbmdfaW4rKworCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMDogc291cmNlCisJaW5jIGRwdHIKKwlkam56IHIxLCBPVVRfbG9vcAorCXNqbXAgT1VUX2RvbmUKK09VVF9vdmVyZmxvdzoKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwk7OyBmYWxsIHRocm91Z2gKK09VVF9kb25lOgkKKwk7OyBhY2sKKwltb3YgZHB0cixPVVQyQkMKKwltb3Z4IEBkcHRyLGEKKworCTs7IHN0YXJ0IHR4CisJYWNhbGwgbWF5YmVfc3RhcnRfdHgKKwk7YWNhbGwgZHVtcF9zdGF0CisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK2R1bXBfc3RhdDoKKwk7OyBmaWxsIGluIEVQNGluIHdpdGggYSBkZWJ1Z2dpbmcgbWVzc2FnZToKKwk7OyAgIHR4X3JpbmdfaW4sIHR4X3Jpbmdfb3V0LCByeF9yaW5nX2luLCByeF9yaW5nX291dAorCTs7ICAgdHhfYWN0aXZlCisJOzsgICB0eF9yaW5nWzAuLjE1XQorCTs7ICAgMHhmYworCTs7ICAgcnhfcmluZ1swLi4xNV0KKwljbHIgYQorCW1vdiBkcHMsIGEKKwkKKwltb3YgZHB0ciwgSU40Q1MKKwltb3Z4IGEsIEBkcHRyCisJamIgYWNjLjEsIGR1bXBfc3RhdF9fZG9uZTsgYnVzeTogY2Fubm90IGR1bXAsIG9sZCBvbmUgc3RpbGwgcGVuZGluZworCW1vdiBkcHRyLCBJTjRCVUYKKwkKKwltb3YgYSwgdHhfcmluZ19pbgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCB0eF9yaW5nX291dAorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCisJbW92IGEsIHJ4X3JpbmdfaW4KKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgcnhfcmluZ19vdXQKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwkKKwljbHIgYQorCWpuYiBUWF9SVU5OSU5HLCBkdW1wX3N0YXRfX25vX3R4X3J1bm5pbmcKKwlpbmMgYQorZHVtcF9zdGF0X19ub190eF9ydW5uaW5nOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCTs7IHR4X3JpbmdbMC4uMTVdCisJaW5jIGRwcworCW1vdiBkcHRyLCAjdHhfcmluZwk7IERQVFIxOiBzb3VyY2UKKwltb3YgcjEsICMxNgorZHVtcF9zdGF0X190eF9yaW5nX2xvb3A6CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlkam56IHIxLCBkdW1wX3N0YXRfX3R4X3JpbmdfbG9vcAorCWluYyBkcHMKKwkKKwltb3YgYSwgIzB4ZmMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwkKKwk7OyByeF9yaW5nWzAuLjE1XQorCWluYyBkcHMKKwltb3YgZHB0ciwgI3J4X3JpbmcJOyBEUFRSMTogc291cmNlCisJbW92IHIxLCAjMTYKK2R1bXBfc3RhdF9fcnhfcmluZ19sb29wOgorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJZGpueiByMSwgZHVtcF9zdGF0X19yeF9yaW5nX2xvb3AKKwkKKwk7OyBub3cgc2VuZCBpdAorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBJTjRCQworCW1vdiBhLCAjMzgKKwltb3Z4IEBkcHRyLCBhCitkdW1wX3N0YXRfX2RvbmU6CQorCXJldAorCQkKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK21heWJlX3N0YXJ0X3R4OgorCTs7IG1ha2Ugc3VyZSB0aGUgdHggcHJvY2VzcyBpcyBydW5uaW5nLgorCWpiIFRYX1JVTk5JTkcsIHN0YXJ0X3R4X2RvbmUKK3N0YXJ0X3R4OgorCTs7IGlzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KKwltb3YgYSwgdHhfcmluZ19pbgorCWNqbmUgYSx0eF9yaW5nX291dCwgc3RhcnRfdHhfX3dvcmsKKwlyZXQJCQk7IG5vIHdvcmsKK3N0YXJ0X3R4X193b3JrOgkKKwk7OyB0eCB3YXMgbm90IHJ1bm5pbmcuIHNlbmQgdGhlIGZpcnN0IGNoYXJhY3Rlciwgc2V0dXAgdGhlIFRJIGludAorCWluYyB0eF9yaW5nX291dAkJOyBbKyt0eF9yaW5nX291dF0KKwltb3YgZHBoLCAjSElHSCh0eF9yaW5nKQorCW1vdiBkcGwsIHR4X3Jpbmdfb3V0CisJbW92eCBhLCBAZHB0cgorCW1vdiBzYnVmLCBhCisJc2V0YiBUWF9SVU5OSU5HCitzdGFydF90eF9kb25lOgorCTs7IGNhbiB3ZSB1bnRocm90dGxlIHRoZSBob3N0IHR4IHByb2Nlc3M/CisJOzsgIHN0ZXAgMTogZG8gd2UgY2FyZT8KKwltb3YgYSwgIzAKKwljam5lIGEsIHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCBzdGFydF90eF9fbWF5YmVfdW50aHJvdHRsZV90eAorCTs7IG5vcGUKK3N0YXJ0X3R4X3JlYWxseV9kb25lOgorCXJldAorc3RhcnRfdHhfX21heWJlX3VudGhyb3R0bGVfdHg6CisJOzsgIHN0ZXAgMjogaXMgdGhlcmUgbm93IHJvb20/CisJbW92IGEsIHR4X3Jpbmdfb3V0CisJc2V0YiBjCisJc3ViYiBhLCB0eF9yaW5nX2luCisJOzsgYSBpcyBub3cgd3JpdGVfcm9vbS4gSWYgdGhyZXNoID49IGEsIHdlIGNhbiB1bnRocm90dGxlCisJY2xyIGMKKwlzdWJiIGEsIHR4X3VudGhyb3R0bGVfdGhyZXNob2xkCisJamMgc3RhcnRfdHhfcmVhbGx5X2RvbmUJOyBub3BlCisJOzsgeWVzLCB3ZSBjYW4gdW50aHJvdHRsZS4gcmVtb3ZlIHRoZSB0aHJlc2hvbGQgYW5kIG1hcmsgYSByZXF1ZXN0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCAjMAorCXNldGIgRE9fVFhfVU5USFJPVFRMRQorCTs7IHByb2QgcngsIHdoaWNoIHdpbGwgYWN0dWFsbHkgc2VuZCB0aGUgbWVzc2FnZSB3aGVuIGluMiBiZWNvbWVzIGZyZWUKKwlsam1wIHN0YXJ0X2luCisJCisKK3NlcmlhbF9pbnQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwlqbmIgVEksIHNlcmlhbF9pbnRfX25vdF90eAorCTs7IHR4IGZpbmlzaGVkLiBzZW5kIGFub3RoZXIgY2hhcmFjdGVyIGlmIHdlIGhhdmUgb25lCisJY2xyIFRJCQkJOyBjbGVhciBpbnQKKwljbHIgVFhfUlVOTklORworCWxjYWxsIHN0YXJ0X3R4CitzZXJpYWxfaW50X19ub3RfdHg6CisJam5iIFJJLCBzZXJpYWxfaW50X19ub3RfcngKKwlsY2FsbCBnZXRfcnhfY2hhcgorCWNsciBSSQkJCTsgY2xlYXIgaW50CitzZXJpYWxfaW50X19ub3Rfcng6CQorCTs7IHJldHVybgorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitnZXRfcnhfY2hhcjoKKwltb3YgZHBoLCAjSElHSChyeF9yaW5nKQorCW1vdiBkcGwsIHJ4X3JpbmdfaW4KKwlpbmMgZHBsCQkJOyB0YXJnZXQgPSByeF9yaW5nX2luKzEKKwltb3YgYSwgc2J1ZgorCW1vdnggQGRwdHIsIGEKKwk7OyBjaGVjayBmb3Igb3ZlcmZsb3cgYmVmb3JlIGluY3JlbWVudGluZyByeF9yaW5nX2luCisJbW92IGEsIGRwbAorCWNqbmUgYSwgcnhfcmluZ19vdXQsIGdldF9yeF9jaGFyX19ub19vdmVyZmxvdworCTs7IHNpZ25hbCBvdmVyZmxvdworCXJldAorZ2V0X3J4X2NoYXJfX25vX292ZXJmbG93OgkKKwlpbmMgcnhfcmluZ19pbgorCTs7IGtpY2sgb2ZmIFVTQiBJTnBpcGUKKwlhY2FsbCBzdGFydF9pbgorCXJldAorCitzdGFydF9pbjoKKwk7OyBjaGVjayBpZiB0aGUgaW5waXBlIGlzIGFscmVhZHkgcnVubmluZy4KKwltb3YgZHB0ciwgSU4yQ1MKKwltb3Z4IGEsIEBkcHRyCisJamIgYWNjLjEsIHN0YXJ0X2luX19kb25lOyBpbnQgd2lsbCBoYW5kbGUgaXQKKwlqYiBET19UWF9VTlRIUk9UVExFLCBzdGFydF9pbl9fZG9fdHhfdW50aHJvdHRsZQorCTs7IHNlZSBpZiB0aGVyZSBpcyBhbnkgd29yayB0byBkby4gYSBzZXJpYWwgaW50ZXJydXB0IG1pZ2h0IG9jY3VyCisJOzsgZHVyaW5nIHRoaXMgc2VxdWVuY2U/CisJbW92IGEsIHJ4X3JpbmdfaW4KKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBzdGFydF9pbl9faGF2ZV93b3JrCisJcmV0CQkJOyBub3BlCitzdGFydF9pbl9faGF2ZV93b3JrOgkKKwk7OyBub3cgY29weSBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgaW50byB0aGUgcGlwZS4gNjMgYnl0ZXMgbWF4LgorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcGgsICNISUdIKHJ4X3JpbmcpCTsgbG9hZCBEUFRSMCB3aXRoIHNvdXJjZQorCWluYyBkcHMKKwltb3YgZHB0ciwgSU4yQlVGCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdnggQGRwdHIsIGEJCTsgaW5bMF0gc2lnbmFscyB0aGF0IHJlc3Qgb2YgSU4gaXMgcnggZGF0YQorCWluYyBkcHRyCisJaW5jIGRwcworCTs7IGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiBkYXRhLCBvciB3ZSBoYXZlIGNvcGllZCA2NCBieXRlcworCW1vdiByMSwgIzEJCTsgSU5idWYgc2l6ZSBjb3VudGVyCitzdGFydF9pbl9fbG9vcDoKKwltb3YgYSwgcnhfcmluZ19pbgorCWNqbmUgYSwgcnhfcmluZ19vdXQsIHN0YXJ0X2lubG9jYWxfaXJxX2VuYWJsZWxsX2NvcHlpbmcKKwlzam1wIHN0YXJ0X2luX19raWNrCitzdGFydF9pbmxvY2FsX2lycV9lbmFibGVsbF9jb3B5aW5nOgorCWluYyByeF9yaW5nX291dAorCW1vdiBkcGwsIHJ4X3Jpbmdfb3V0CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCQk7IHdyaXRlIGludG8gSU4gYnVmZmVyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJaW5jIHIxCisJY2puZSByMSwgIzY0LCBzdGFydF9pbl9fbG9vcDsgbG9vcAorc3RhcnRfaW5fX2tpY2s6CisJOzsgZWl0aGVyIHdlIHJhbiBvdXQgb2YgZGF0YSwgb3Igd2UgY29waWVkIDY0IGJ5dGVzLiByMSBoYXMgYnl0ZSBjb3VudAorCTs7IGtpY2sgb2ZmIElOCisJbW92IGRwdHIsIElOMkJDCisJbW92IGEsIHIxCisJanogc3RhcnRfaW5fX2RvbmUKKwltb3Z4IEBkcHRyLCBhCisJOzsgZG9uZQorc3RhcnRfaW5fX2RvbmU6CisJO2FjYWxsIGR1bXBfc3RhdAorCXJldAorc3RhcnRfaW5fX2RvX3R4X3VudGhyb3R0bGU6CisJOzsgc3BlY2lhbCBzZXF1ZW5jZTogc2VuZCBhIHR4IHVudGhyb3R0bGUgbWVzc2FnZQorCWNsciBET19UWF9VTlRIUk9UVExFCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIElOMkJVRgorCW1vdiBhLCAjMQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCAjMgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4yQkMKKwltb3Z4IEBkcHRyLCBhCisJcmV0CisJCitwdXRjaGFyOgorCWNsciBUSQorCW1vdiBTQlVGLCBhCitwdXRjaGFyX3dhaXQ6CisJam5iIFRJLCBwdXRjaGFyX3dhaXQKKwljbHIgVEkKKwlyZXQKKworCQorYmF1ZF90YWJsZToJCQk7IGJhdWRfaGlnaCwgdGhlbiBiYXVkX2xvdworCTs7IGJhdWRbMF06IDExMAorCS5ieXRlIEJBVURfSElHSCgxMTApCisJLmJ5dGUgQkFVRF9MT1coMTEwKQorCTs7IGJhdWRbMV06IDMwMAorCS5ieXRlIEJBVURfSElHSCgzMDApCisJLmJ5dGUgQkFVRF9MT1coMzAwKQorCTs7IGJhdWRbMl06IDEyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxMjAwKQorCTs7IGJhdWRbM106IDI0MDAKKwkuYnl0ZSBCQVVEX0hJR0goMjQwMCkKKwkuYnl0ZSBCQVVEX0xPVygyNDAwKQorCTs7IGJhdWRbNF06IDQ4MDAKKwkuYnl0ZSBCQVVEX0hJR0goNDgwMCkKKwkuYnl0ZSBCQVVEX0xPVyg0ODAwKQorCTs7IGJhdWRbNV06IDk2MDAKKwkuYnl0ZSBCQVVEX0hJR0goOTYwMCkKKwkuYnl0ZSBCQVVEX0xPVyg5NjAwKQorCTs7IGJhdWRbNl06IDE5MjAwCisJLmJ5dGUgQkFVRF9ISUdIKDE5MjAwKQorCS5ieXRlIEJBVURfTE9XKDE5MjAwKQorCTs7IGJhdWRbN106IDM4NDAwCisJLmJ5dGUgQkFVRF9ISUdIKDM4NDAwKQorCS5ieXRlIEJBVURfTE9XKDM4NDAwKQorCTs7IGJhdWRbOF06IDU3NjAwCisJLmJ5dGUgQkFVRF9ISUdIKDU3NjAwKQorCS5ieXRlIEJBVURfTE9XKDU3NjAwKQorCTs7IGJhdWRbOV06IDExNTIwMAorCS5ieXRlIEJBVURfSElHSCgxMTUyMDApCisJLmJ5dGUgQkFVRF9MT1coMTE1MjAwKQorCitkZXNjX2RldmljZToKKwkuYnl0ZSAweDEyLCAweDAxLCAweDAwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweDQwCisJLmJ5dGUgMHhjZCwgMHgwNiwgMHgwNCwgMHgwMSwgMHg4OSwgMHhhYiwgMSwgMiwgMywgMHgwMQorOzs7IFRoZSAicmVhbCIgZGV2aWNlIGlkLCB3aGljaCBtdXN0IG1hdGNoIHRoZSBob3N0IGRyaXZlciwgaXMgdGhhdAorOzs7ICIweGNkIDB4MDYgMHgwNCAweDAxIiBzZXF1ZW5jZSwgd2hpY2ggaXMgMHgwNmNkLCAweDAxMDQKKwkKK2Rlc2NfY29uZmlnMToKKwkuYnl0ZSAweDA5LCAweDAyLCAweDIwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyCisJLmJ5dGUgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMAorCS5ieXRlIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MDEKKwkuYnl0ZSAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwCisKK2Rlc2Nfc3RyaW5nczoKKwkud29yZCBzdHJpbmdfbGFuZ2lkcywgc3RyaW5nX21mZywgc3RyaW5nX3Byb2R1Y3QsIHN0cmluZ19zZXJpYWwKK2Rlc2Nfc3RyaW5nc19lbmQ6CisKK3N0cmluZ19sYW5naWRzOgkuYnl0ZSBzdHJpbmdfbGFuZ2lkc19lbmQtc3RyaW5nX2xhbmdpZHMKKwkuYnl0ZSAzCisJLndvcmQgMAorc3RyaW5nX2xhbmdpZHNfZW5kOgorCisJOzsgc2lnaC4gVGhlc2Ugc3RyaW5ncyBhcmUgVW5pY29kZSwgbWVhbmluZyBVVEYxNj8gMiBieXRlcyBlYWNoLiBOb3cKKwk7OyAqdGhhdCogaXMgYSBwYWluIGluIHRoZSBhc3MgdG8gZW5jb2RlLiBBbmQgdGhleSBhcmUgbGl0dGxlLWVuZGlhbgorCTs7IHRvby4gVXNlIHRoaXMgcGVybCBzbmlwcGV0IHRvIGdldCB0aGUgYnl0ZWNvZGVzOgorCS8qIHdoaWxlICg8PikgeworCSAgICBAYyA9IHNwbGl0KC8vKTsKKwkgICAgZm9yZWFjaCAkYyAoQGMpIHsKKwkgICAgIHByaW50ZigiMHglMDJ4LCAweDAwLCAiLCBvcmQoJGMpKTsKKwkgICAgfQorCSAgIH0KKwkqLworCitzdHJpbmdfbWZnOgkuYnl0ZSBzdHJpbmdfbWZnX2VuZC1zdHJpbmdfbWZnCisJLmJ5dGUgMworOwkuYnl0ZSAiQUNNRSB1c2Igd2lkZ2V0cyIKKwkuYnl0ZSAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDc1LCAweDAwLCAweDczLCAweDAwLCAweDYyLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwLCAweDY0LCAweDAwLCAweDY3LCAweDAwLCAweDY1LCAweDAwLCAweDc0LCAweDAwLCAweDczLCAweDAwCitzdHJpbmdfbWZnX2VuZDoKKwkKK3N0cmluZ19wcm9kdWN0OgkuYnl0ZSBzdHJpbmdfcHJvZHVjdF9lbmQtc3RyaW5nX3Byb2R1Y3QKKwkuYnl0ZSAzCis7CS5ieXRlICJBQ01FIFVTQiBzZXJpYWwgd2lkZ2V0IgorCS5ieXRlIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAKK3N0cmluZ19wcm9kdWN0X2VuZDoKKwkKK3N0cmluZ19zZXJpYWw6CS5ieXRlIHN0cmluZ19zZXJpYWxfZW5kLXN0cmluZ19zZXJpYWwKKwkuYnl0ZSAzCis7CS5ieXRlICI0NyIKKwkuYnl0ZSAweDM0LCAweDAwLCAweDM3LCAweDAwCitzdHJpbmdfc2VyaWFsX2VuZDoKKwkJCis7OzsgcmluZyBidWZmZXIgbWVtb3J5CisJOzsgdHhfcmluZ19pbisxIGlzIHdoZXJlIHRoZSBuZXh0IGlucHV0IGJ5dGUgd2lsbCBnbworCTs7IFt0eF9yaW5nX291dF0gaGFzIGJlZW4gc2VudAorCTs7IGlmIHR4X3JpbmdfaW4gPT0gdHhfcmluZ19vdXQsIHRoZXJlcyBubyB3b3JrIHRvIGRvCisJOzsgdGhlcmUgYXJlICh0eF9yaW5nX2luIC0gdHhfcmluZ19vdXQpIGNoYXJzIHRvIGJlIHdyaXR0ZW4KKwk7OyBkb250IGxldCBfaW4gbGFwIF9vdXQKKwk7OyAgIGNhbm5vdCBpbmMgaWYgdHhfcmluZ19pbisxID09IHR4X3Jpbmdfb3V0CisJOzsgIHdyaXRlIFt0eF9yaW5nX2luKzFdIHRoZW4gdHhfcmluZ19pbisrCisJOzsgICBpZiAodHhfcmluZ19pbisxID09IHR4X3Jpbmdfb3V0KSwgb3ZlcmZsb3cKKwk7OyAgIGVsc2UgdHhfcmluZ19pbisrCisJOzsgIHJlYWQvc2VuZCBbdHhfcmluZ19vdXQrMV0sIHRoZW4gdHhfcmluZ19vdXQrKworCisJOzsgcnhfcmluZ19pbiB3b3JrcyB0aGUgc2FtZSB3YXkKKwkKKwkub3JnIDB4MTAwMAordHhfcmluZzoKKwkuc2tpcCAweDEwMAkJOyAyNTYgYnl0ZXMKK3J4X3Jpbmc6CisJLnNraXAgMHgxMDAJCTsgMjU2IGJ5dGVzCisJCisJCisJLkVORAorCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQwYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qCisgKiBVU0IgS2V5c3BhbiBQREEgLyBYaXJjb20gLyBFbnRyZWdyYSBDb252ZXJ0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4JPGdyZWdAa3JvYWguY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEJyaWFuIFdhcm5lcgk8d2FybmVyQGxvdGhhci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWwgQm9yY2hlcnMJCTxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKiAKKyAqICgwOS8wNy8yMDAxKSBna2gKKyAqCWNsZWFuZWQgdXAgdGhlIFhpcmNvbSBzdXBwb3J0LiAgQWRkZWQgaWRzIGZvciBFbnRyZWdyYSBkZXZpY2Ugd2hpY2ggaXMKKyAqCXRoZSBzYW1lIGFzIHRoZSBYaXJjb20gZGV2aWNlLiAgRW5hYmxlZCB0aGUgY29kZSB0byBiZSBjb21waWxlZCBmb3IKKyAqCWVpdGhlciBYaXJjb20gb3IgS2V5c3BhbiBkZXZpY2VzLgorICoKKyAqICgwOC8xMS8yMDAxKSBDcmlzdGlhbiBNLiBDcmFjaXVuZXNjdQorICoJc3VwcG9ydCBmb3IgWGlyY29tIFBHU0RCOQorICoKKyAqICgwNS8zMS8yMDAxKSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcy4KKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCisgKgl0aGFuIG9uY2UuCisgKiAKKyAqICgwNy8yMC8yMDAwKSBib3JjaGVycworICoJLSBrZXlzcGFuX3BkYV93cml0ZSBubyBsb25nZXIgc2xlZXBzIGlmIGl0IGlzIGNhbGxlZCBvbiBpbnRlcnJ1cHQgdGltZTsKKyAqCSAgUFBQIGFuZCB0aGUgbGluZSBkaXNjaXBsaW5lIHdpdGggc3R0eSBlY2hvIG9uIGNhbiBjYWxsIHdyaXRlIG9uCisgKgkgIGludGVycnVwdCB0aW1lIGFuZCB0aGlzIHdvdWxkIGNhdXNlIGFuIG9vcHMgaWYgd3JpdGUgc2xlcHQKKyAqCS0gaWYga2V5c3Bhbl9wZGFfd3JpdGUgaXMgaW4gYW4gaW50ZXJydXB0LCBpdCB3aWxsIG5vdCBjYWxsCisgKgkgIHVzYl9jb250cm9sX21zZyAod2hpY2ggc2xlZXBzKSB0byBxdWVyeSB0aGUgcm9vbSBpbiB0aGUgZGV2aWNlCisgKgkgIGJ1ZmZlciwgaXQgc2ltcGx5IHVzZXMgdGhlIGN1cnJlbnQgcm9vbSB2YWx1ZSBpdCBoYXMKKyAqCS0gaWYgdGhlIHVyYiBpcyBidXN5IG9yIGlmIGl0IGlzIHRocm90dGxlZCBrZXlzcGFuX3BkYV93cml0ZSBqdXN0CisgKgkgIHJldHVybnMgMCwgcmF0aGVyIHRoYW4gc2xlZXBpbmcgdG8gd2FpdCBmb3IgdGhpcyB0byBjaGFuZ2U7IHRoZQorICoJICB3cml0ZV9jaGFuIGNvZGUgaW4gbl90dHkuYyB3aWxsIHNsZWVwIGlmIG5lZWRlZCBiZWZvcmUgY2FsbGluZworICoJICBrZXlzcGFuX3BkYV93cml0ZSBhZ2FpbgorICoJLSBpZiB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIHVudGhyb3R0bGVkLCB3cml0ZSBub3cgcXVldWVzIHVwIHRoZQorICoJICBjYWxsIHRvIHVzYl9jb250cm9sX21zZyAod2hpY2ggc2xlZXBzKSB0byB1bnRocm90dGxlIHRoZSBkZXZpY2UKKyAqCS0gdGhlIHdha2V1cHMgZnJvbSBrZXlzcGFuX3BkYV93cml0ZV9idWxrX2NhbGxiYWNrIGFyZSBxdWV1ZWQgcmF0aGVyCisgKgkgIHRoYW4gZG9uZSBkaXJlY3RseSBmcm9tIHRoZSBjYWxsYmFjayB0byBhdm9pZCB0aGUgcmFjZSBpbiB3cml0ZV9jaGFuCisgKgktIGtleXNwYW5fcGRhX2NoYXJzX2luX2J1ZmZlciBhbHNvIGluZGljYXRlcyBpdHMgYnVmZmVyIGlzIGZ1bGwgaWYgdGhlCisgKgkgIHVyYiBzdGF0dXMgaXMgLUVJTlBST0dSRVNTLCBtZWFuaW5nIGl0IGNhbm5vdCB3cml0ZSBhdCB0aGUgbW9tZW50CisgKiAgICAgIAorICogKDA3LzE5LzIwMDApIGdraAorICoJQWRkZWQgbW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdCB0aGlzCisgKglkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorICoKKyAqICgwMy8yNi8yMDAwKSBna2gKKyAqCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisgKiAKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCB7CisJX191MTYgYWRkcmVzczsKKwlfX3U4IGRhdGFfc2l6ZTsKKwlfX3U4IGRhdGFbMTZdOworfTsKKworLyogbWFrZSBhIHNpbXBsZSBkZWZpbmUgdG8gaGFuZGxlIGlmIHdlIGFyZSBjb21waWxpbmcga2V5c3Bhbl9wZGEgb3IgeGlyY29tIHN1cHBvcnQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBX01PRFVMRSkKKwkjZGVmaW5lIEtFWVNQQU4KKyNlbHNlCisJI3VuZGVmIEtFWVNQQU4KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTV9NT0RVTEUpCisJI2RlZmluZSBYSVJDT00KKyNlbHNlCisJI3VuZGVmIFhJUkNPTQorI2VuZGlmCisKKyNpZmRlZiBLRVlTUEFOCisjaW5jbHVkZSAia2V5c3Bhbl9wZGFfZncuaCIKKyNlbmRpZgorCisjaWZkZWYgWElSQ09NCisjaW5jbHVkZSAieGlyY29tX3Bnc19mdy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkJyaWFuIFdhcm5lciA8d2FybmVyQGxvdGhhci5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEtleXNwYW4gUERBIENvbnZlcnRlciBkcml2ZXIiCisKK3N0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlIHsKKwlpbnQJCQl0eF9yb29tOworCWludAkJCXR4X3Rocm90dGxlZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQl3YWtldXBfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQl1bnRocm90dGxlX3dvcms7Cit9OworCisKKyNkZWZpbmUgS0VZU1BBTl9WRU5ET1JfSUQJCTB4MDZjZAorI2RlZmluZSBLRVlTUEFOX1BEQV9GQUtFX0lECQkweDAxMDMKKyNkZWZpbmUgS0VZU1BBTl9QREFfSUQJCQkweDAxMDQgLyogbm8gY2x1ZSAqLworCisvKiBGb3IgWGlyY29tIFBHU0RCOSBhbmQgb2xkZXIgRW50cmVncmEgdmVyc2lvbiBvZiB0aGUgc2FtZSBkZXZpY2UgKi8KKyNkZWZpbmUgWElSQ09NX1ZFTkRPUl9JRAkJMHgwODVhCisjZGVmaW5lIFhJUkNPTV9GQUtFX0lECQkJMHg4MDI3CisjZGVmaW5lIEVOVFJFR1JBX1ZFTkRPUl9JRAkJMHgxNjQ1CisjZGVmaW5lIEVOVFJFR1JBX0ZBS0VfSUQJCTB4ODA5MworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisjaWZkZWYgS0VZU1BBTgorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwgS0VZU1BBTl9QREFfRkFLRV9JRCkgfSwKKyNlbmRpZgorI2lmZGVmIFhJUkNPTQorCXsgVVNCX0RFVklDRShYSVJDT01fVkVORE9SX0lELCBYSVJDT01fRkFLRV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRU5UUkVHUkFfVkVORE9SX0lELCBFTlRSRUdSQV9GQUtFX0lEKSB9LAorI2VuZGlmCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBLRVlTUEFOX1BEQV9JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrZXlzcGFuX3BkYV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImtleXNwYW5fcGRhIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjaWZkZWYgS0VZU1BBTgorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2UgW10gPSB7CisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBLRVlTUEFOX1BEQV9GQUtFX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworI2VuZGlmCisKKyNpZmRlZiBYSVJDT00KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9mYWtlX3hpcmNvbSBbXSA9IHsKKyAgICAgICAgeyBVU0JfREVWSUNFKFhJUkNPTV9WRU5ET1JfSUQsIFhJUkNPTV9GQUtFX0lEKSB9LAorICAgICAgICB7IFVTQl9ERVZJQ0UoRU5UUkVHUkFfVkVORE9SX0lELCBFTlRSRUdSQV9GQUtFX0lEKSB9LAorICAgICAgICB7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK307CisjZW5kaWYKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfd2FrZXVwX3dyaXRlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisKKwkvKiB3YWtlIHVwIHBvcnQgcHJvY2Vzc2VzICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcG9ydC0+d3JpdGVfd2FpdCApOworCisJLyogd2FrZSB1cCBsaW5lIGRpc2NpcGxpbmUgKi8KKwl0dHlfd2FrZXVwKHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3JlcXVlc3RfdW50aHJvdHRsZSggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApCit7CisJaW50IHJlc3VsdDsKKworCWRiZygiIHJlcXVlc3RfdW50aHJvdHRsZSIpOworCS8qIGFzayB0aGUgZGV2aWNlIHRvIHRlbGwgdXMgd2hlbiB0aGUgdHggYnVmZmVyIGJlY29tZXMKKwkgICBzdWZmaWNpZW50bHkgZW1wdHkgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIAorCQkJCSB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSA3LCAvKiByZXF1ZXN0X3VudGhyb3R0bGUgKi8KKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJCSB8IFVTQl9ESVJfT1VULAorCQkJCSAxNiwgLyogdmFsdWU6IHRocmVzaG9sZCAqLworCQkJCSAwLCAvKiBpbmRleCAqLworCQkJCSBOVUxMLAorCQkJCSAwLAorCQkJCSAyMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGJnKCIlcyAtIGVycm9yICVkIGZyb20gdXNiX2NvbnRyb2xfbXNnIiwgCisJCSAgICBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfaW50ZXJydXB0IChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKyAgICAgICAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGk7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKyAJLyogc2VlIGlmIHRoZSBtZXNzYWdlIGlzIGRhdGEgb3IgYSBzdGF0dXMgaW50ZXJydXB0ICovCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgorCQkvKiByZXN0IG9mIG1lc3NhZ2UgaXMgcnggZGF0YSAqLworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJCX0KKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBzdGF0dXMgaW50ZXJydXB0ICovCisJCWRiZygiIHJ4IGludCwgZDE9JWQsIGQyPSVkIiwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIDE6IC8qIG1vZGVtbGluZSBjaGFuZ2UgKi8KKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIHR4IHVudGhyb3R0bGUgaW50ZXJydXB0ICovCisJCQlwcml2LT50eF90aHJvdHRsZWQgPSAwOworCQkJLyogcXVldWUgdXAgYSB3YWtldXAgYXQgc2NoZWR1bGVyIHRpbWUgKi8KKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndha2V1cF93b3JrKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJLyogc3RvcCByZWNlaXZpbmcgY2hhcmFjdGVycy4gV2UganVzdCB0dXJuIG9mZiB0aGUgVVJCIHJlcXVlc3QsIGFuZAorCSAgIGxldCBjaGFycyBwaWxlIHVwIGluIHRoZSBkZXZpY2UuIElmIHdlJ3JlIGRvaW5nIGhhcmR3YXJlCisJICAgZmxvd2NvbnRyb2wsIHRoZSBkZXZpY2Ugd2lsbCBzaWduYWwgdGhlIG90aGVyIGVuZCB3aGVuIGl0cyBidWZmZXIKKwkgICBmaWxscyB1cC4gSWYgd2UncmUgZG9pbmcgWE9OL1hPRkYsIHRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8KKwkgICBzZW5kIGFuIFhPRkYsIGFsdGhvdWdoIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZm9pc3QgdGhhdCBvZmYKKwkgICB1cG9uIHRoZSBkZXZpY2UgdG9vLiAqLworCisJZGJnKCJrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwkvKiBqdXN0IHJlc3RhcnQgdGhlIHJlY2VpdmUgaW50ZXJydXB0IFVSQiAqLworCWRiZygia2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQykpCisJCWRiZygiIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSBmYWlsZWQiKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9zZXRiYXVkIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBpbnQgYmF1ZCkKK3sKKwlpbnQgcmM7CisJaW50IGJpbmRleDsKKworCXN3aXRjaChiYXVkKSB7CisJCWNhc2UgMTEwOiBiaW5kZXggPSAwOyBicmVhazsKKwkJY2FzZSAzMDA6IGJpbmRleCA9IDE7IGJyZWFrOworCQljYXNlIDEyMDA6IGJpbmRleCA9IDI7IGJyZWFrOworCQljYXNlIDI0MDA6IGJpbmRleCA9IDM7IGJyZWFrOworCQljYXNlIDQ4MDA6IGJpbmRleCA9IDQ7IGJyZWFrOworCQljYXNlIDk2MDA6IGJpbmRleCA9IDU7IGJyZWFrOworCQljYXNlIDE5MjAwOiBiaW5kZXggPSA2OyBicmVhazsKKwkJY2FzZSAzODQwMDogYmluZGV4ID0gNzsgYnJlYWs7CisJCWNhc2UgNTc2MDA6IGJpbmRleCA9IDg7IGJyZWFrOworCQljYXNlIDExNTIwMDogYmluZGV4ID0gOTsgYnJlYWs7CisJCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJhdGhlciB0aGFuIGZpZ3VyZSBvdXQgaG93IHRvIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMKKwkgICB0byBjb21wbGV0ZSwgSSBqdXN0IHVzZSB0aGUgImxlZ2FjeSIgQVBJLiAqLworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAwLCAvKiBzZXQgYmF1ZCAqLworCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgCisJCQkgICAgIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJICAgICB8IFVTQl9ESVJfT1VULCAvKiB0eXBlICovCisJCQkgICAgIGJpbmRleCwgLyogdmFsdWUgKi8KKwkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCSAgICAgTlVMTCwgLyogJmRhdGEgKi8KKwkJCSAgICAgMCwgLyogc2l6ZSAqLworCQkJICAgICAyMDAwKTsgLyogdGltZW91dCAqLworCXJldHVybihyYyk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgdmFsdWU7CisJaW50IHJlc3VsdDsKKworCWlmIChicmVha19zdGF0ZSA9PSAtMSkKKwkJdmFsdWUgPSAxOyAvKiBzdGFydCBicmVhayAqLworCWVsc2UKKwkJdmFsdWUgPSAwOyAvKiBjbGVhciBicmVhayAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQk0LCAvKiBzZXQgYnJlYWsgKi8KKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJdmFsdWUsIDAsIE5VTEwsIDAsIDIwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkYmcoIiVzIC0gZXJyb3IgJWQgZnJvbSB1c2JfY29udHJvbF9tc2ciLCAKKwkJICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkvKiB0aGVyZSBpcyBzb21ldGhpbmcgZnVua3kgYWJvdXQgdGhpcy4uIHRoZSBUQ1NCUksgdGhhdCAnY3UnIHBlcmZvcm1zCisJICAgb3VnaHQgdG8gdHJhbnNsYXRlIGludG8gYSBicmVha19jdGwoLTEpLGJyZWFrX2N0bCgwKSBwYWlyIEhaLzQKKwkgICBzZWNvbmRzIGFwYXJ0LCBidXQgaXQgZmVlbHMgbGlrZSB0aGUgYnJlYWsgc2VudCBpc24ndCBhcyBsb25nIGFzIGl0CisJICAgaXMgb24gL2Rldi90dHlTMCAqLworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCQkgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCS8qIGNmbGFnIHNwZWNpZmllcyBsb3RzIG9mIHN0dWZmOiBudW1iZXIgb2Ygc3RvcCBiaXRzLCBwYXJpdHksIG51bWJlcgorCSAgIG9mIGRhdGEgYml0cywgYmF1ZC4gV2hhdCBjYW4gdGhlIGRldmljZSBhY3R1YWxseSBoYW5kbGU/OgorCSAgIENTVE9QQiAoMSBzdG9wIGJpdCBvciAyKQorCSAgIFBBUkVOQiAocGFyaXR5KQorCSAgIENTSVpFICg1Yml0IC4uIDhiaXQpCisJICAgVGhlcmUgaXMgbWluaW1hbCBodyBzdXBwb3J0IGZvciBwYXJpdHkgKGEgUFNXIGJpdCBzZWVtcyB0byBob2xkIHRoZQorCSAgIHBhcml0eSBvZiB3aGF0ZXZlciBpcyBpbiB0aGUgYWNjdW11bGF0b3IpLiBUaGUgVUFSVCBlaXRoZXIgZGVhbHMKKwkgICB3aXRoIDEwIGJpdHMgKHN0YXJ0LCA4IGRhdGEsIHN0b3ApIG9yIDExIGJpdHMgKHN0YXJ0LCA4IGRhdGEsCisJICAgMSBzcGVjaWFsLCBzdG9wKS4gU28sIHdpdGggZmlybXdhcmUgY2hhbmdlcywgd2UgY291bGQgZG86CisJICAgOE4xOiAxMCBiaXQKKwkgICA4TjI6IDExIGJpdCwgZXh0cmEgYml0IGFsd2F5cyAobWFyaz8pCisJICAgOFtFT01TXTE6IDExIGJpdCwgZXh0cmEgYml0IGlzIHBhcml0eQorCSAgIDdbRU9NU10xOiAxMCBiaXQsIGIwL2I3IGlzIHBhcml0eQorCSAgIDdbRU9NU10yOiAxMSBiaXQsIGIwL2I3IGlzIHBhcml0eSwgZXh0cmEgYml0IGFsd2F5cyAobWFyaz8pCisKKwkgICBIVyBmbG93IGNvbnRyb2wgaXMgZGljdGF0ZWQgYnkgdGhlIHR0eS0+dGVybWlvcy0+Y19jZmxhZ3MgJiBDUlRTQ1RTCisJICAgYml0LgorCisJICAgRm9yIG5vdywganVzdCBkbyBiYXVkLiAqLworCisJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCS8qIHdlIGNvdWxkIHN1cHBvcnQgbW9yZSB2YWx1ZXMgaGVyZSwganVzdCBuZWVkIHRvIGNhbGN1bGF0ZQorCQkgICB0aGUgbmVjZXNzYXJ5IGRpdmlzb3JzIGluIHRoZSBmaXJtd2FyZS4gPGFzbS90ZXJtYml0cy5oPgorCQkgICBoYXMgdGhlIEJubm4gY29uc3RhbnRzLiAqLworCQljYXNlIEIxMTA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAxMTApOyBicmVhazsKKwkJY2FzZSBCMzAwOiBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgMzAwKTsgYnJlYWs7CisJCWNhc2UgQjEyMDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAxMjAwKTsgYnJlYWs7CisJCWNhc2UgQjI0MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAyNDAwKTsgYnJlYWs7CisJCWNhc2UgQjQ4MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCA0ODAwKTsgYnJlYWs7CisJCWNhc2UgQjk2MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCA5NjAwKTsgYnJlYWs7CisJCWNhc2UgQjE5MjAwOiBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgMTkyMDApOyBicmVhazsKKwkJY2FzZSBCMzg0MDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAzODQwMCk7IGJyZWFrOworCQljYXNlIEI1NzYwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDU3NjAwKTsgYnJlYWs7CisJCWNhc2UgQjExNTIwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDExNTIwMCk7IGJyZWFrOworCQlkZWZhdWx0OiBkYmcoImNhbid0IGhhbmRsZSByZXF1ZXN0ZWQgYmF1ZCByYXRlIik7IGJyZWFrOworCX0KK30KKworCisvKiBtb2RlbSBjb250cm9sIHBpbnM6IERUUiBhbmQgUlRTIGFyZSBvdXRwdXRzIGFuZCBjYW4gYmUgY29udHJvbGxlZC4KKyAgIERDRCwgUkksIERTUiwgQ1RTIGFyZSBpbnB1dHMgYW5kIGNhbiBiZSByZWFkLiBBbGwgb3V0cHV0cyBjYW4gYWxzbyBiZQorICAgcmVhZC4gVGhlIGJ5dGUgcGFzc2VkIGlzOiBEVFIoYjcpIERDRCBSSSBEU1IgQ1RTIFJUUyhiMikgdW51c2VkIHVudXNlZCAqLworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX2dldF9tb2RlbV9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciAqdmFsdWUpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgMywgLyogZ2V0IHBpbnMgKi8KKwkJCSAgICAgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9JTlRFUkZBQ0V8VVNCX0RJUl9JTiwKKwkJCSAgICAgMCwgMCwgJmRhdGEsIDEsIDIwMDApOworCWlmIChyYyA+IDApCisJCSp2YWx1ZSA9IGRhdGE7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfc2V0X21vZGVtX2luZm8oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWludCByYzsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgMywgLyogc2V0IHBpbnMgKi8KKwkJCSAgICAgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9JTlRFUkZBQ0V8VVNCX0RJUl9PVVQsCisJCQkgICAgIHZhbHVlLCAwLCBOVUxMLCAwLCAyMDAwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IHZhbHVlOworCisJcmMgPSBrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZzdGF0dXMpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwl2YWx1ZSA9CisJCSgoc3RhdHVzICYgKDE8PDcpKSA/IFRJT0NNX0RUUiA6IDApIHwKKwkJKChzdGF0dXMgJiAoMTw8NikpID8gVElPQ01fQ0FSIDogMCkgfAorCQkoKHN0YXR1cyAmICgxPDw1KSkgPyBUSU9DTV9STkcgOiAwKSB8CisJCSgoc3RhdHVzICYgKDE8PDQpKSA/IFRJT0NNX0RTUiA6IDApIHwKKwkJKChzdGF0dXMgJiAoMTw8MykpID8gVElPQ01fQ1RTIDogMCkgfAorCQkoKHN0YXR1cyAmICgxPDwyKSkgPyBUSU9DTV9SVFMgOiAwKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisJcmMgPSBrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZzdGF0dXMpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXN0YXR1cyB8PSAoMTw8Mik7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJc3RhdHVzIHw9ICgxPDw3KTsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJc3RhdHVzICY9IH4oMTw8Mik7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlzdGF0dXMgJj0gfigxPDw3KTsKKwlyYyA9IGtleXNwYW5fcGRhX3NldF9tb2RlbV9pbmZvKHNlcmlhbCwgc3RhdHVzKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUlXQUlUOgorCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLworCQkvKiBUT0RPICovCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQlyZXR1cm4gMDsgLyogVE9ETyAqLworCX0KKwkKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXF1ZXN0X3VudGhyb3R0bGUgPSAwOworCWludCByYyA9IDA7CisJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCS8qIGd1ZXNzIGhvdyBtdWNoIHJvb20gaXMgbGVmdCBpbiB0aGUgZGV2aWNlJ3MgcmluZyBidWZmZXIsIGFuZCBpZiB3ZQorCSAgIHdhbnQgdG8gc2VuZCBtb3JlIHRoYW4gdGhhdCwgY2hlY2sgZmlyc3QsIHVwZGF0aW5nIG91ciBub3Rpb24gb2YKKwkgICB3aGF0IGlzIGxlZnQuIElmIG91ciB3cml0ZSB3aWxsIHJlc3VsdCBpbiBubyByb29tIGxlZnQsIGFzayB0aGUKKwkgICBkZXZpY2UgdG8gZ2l2ZSB1cyBhbiBpbnRlcnJ1cHQgd2hlbiB0aGUgcm9vbSBhdmFpbGFibGUgcmlzZXMgYWJvdmUKKwkgICBhIHRocmVzaG9sZCwgYW5kIGhvbGQgb2ZmIGFsbCB3cml0ZXJzIChldmVudHVhbGx5LCB0aG9zZSB1c2luZworCSAgIHNlbGVjdCgpIG9yIHBvbGwoKSB0b28pIHVudGlsIHdlIHJlY2VpdmUgdGhhdCB1bnRocm90dGxlIGludGVycnVwdC4KKwkgICBCbG9jayBpZiB3ZSBjYW4ndCB3cml0ZSBhbnl0aGluZyBhdCBhbGwsIG90aGVyd2lzZSB3cml0ZSBhcyBtdWNoIGFzCisJICAgd2UgY2FuLiAqLworCWRiZygia2V5c3Bhbl9wZGFfd3JpdGUoJWQpIixjb3VudCk7CisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIgd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIik7CisJCXJldHVybiAoMCk7CisJfQorCisJLyogd2UgbWlnaHQgYmxvY2sgYmVjYXVzZSBvZjoKKwkgICB0aGUgVFggdXJiIGlzIGluLWZsaWdodCAod2FpdCB1bnRpbCBpdCBjb21wbGV0ZXMpCisJICAgdGhlIGRldmljZSBpcyBmdWxsICh3YWl0IHVudGlsIGl0IHNheXMgdGhlcmUgaXMgcm9vbSkKKwkqLworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwgcHJpdi0+dHhfdGhyb3R0bGVkICkgeworCQlyZXR1cm4oIDAgKTsKKwl9CisKKwkvKiBBdCB0aGlzIHBvaW50IHRoZSBVUkIgaXMgaW4gb3VyIGNvbnRyb2wsIG5vYm9keSBlbHNlIGNhbiBzdWJtaXQgaXQKKwkgICBhZ2FpbiAodGhlIG9ubHkgc3VkZGVuIHRyYW5zaXRpb24gd2FzIHRoZSBvbmUgZnJvbSBFSU5QUk9HUkVTUyB0bworCSAgIGZpbmlzaGVkKS4gIEFsc28sIHRoZSB0eCBwcm9jZXNzIGlzIG5vdCB0aHJvdHRsZWQuIFNvIHdlIGFyZQorCSAgIHJlYWR5IHRvIHdyaXRlLiAqLworCisJY291bnQgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKworCS8qIENoZWNrIGlmIHdlIG1pZ2h0IG92ZXJydW4gdGhlIFR4IGJ1ZmZlci4gICBJZiBzbywgYXNrIHRoZQorCSAgIGRldmljZSBob3cgbXVjaCByb29tIGl0IHJlYWxseSBoYXMuICBUaGlzIGlzIGRvbmUgb25seSBvbgorCSAgIHNjaGVkdWxlciB0aW1lLCBzaW5jZSB1c2JfY29udHJvbF9tc2coKSBzbGVlcHMuICovCisJaWYgKGNvdW50ID4gcHJpdi0+dHhfcm9vbSAmJiAhaW5faW50ZXJydXB0KCkpIHsKKwkJdW5zaWduZWQgY2hhciByb29tOworCQlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgCisJCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgICAgNiwgLyogd3JpdGVfcm9vbSAqLworCQkJCSAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJCSAgICAgfCBVU0JfRElSX0lOLAorCQkJCSAgICAgMCwgLyogdmFsdWU6IDAgbWVhbnMgInJlbWFpbmluZyByb29tIiAqLworCQkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCQkgICAgICZyb29tLAorCQkJCSAgICAgMSwKKwkJCQkgICAgIDIwMDApOworCQlpZiAocmMgPCAwKSB7CisJCQlkYmcoIiByb29tcXVlcnkgZmFpbGVkIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKHJjID09IDApIHsKKwkJCWRiZygiIHJvb21xdWVyeSByZXR1cm5lZCAwIGJ5dGVzIik7CisJCQlyYyA9IC1FSU87IC8qIGRldmljZSBkaWRuJ3QgcmV0dXJuIGFueSBkYXRhICovCisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJZGJnKCIgcm9vbXF1ZXJ5IHNheXMgJWQiLCByb29tKTsKKwkJcHJpdi0+dHhfcm9vbSA9IHJvb207CisJfQorCWlmIChjb3VudCA+IHByaXYtPnR4X3Jvb20pIHsKKwkJLyogd2UncmUgYWJvdXQgdG8gY29tcGxldGVseSBmaWxsIHRoZSBUeCBidWZmZXIsIHNvCisJCSAgIHdlJ2xsIGJlIHRocm90dGxlZCBhZnRlcndhcmRzLiAqLworCQljb3VudCA9IHByaXYtPnR4X3Jvb207CisJCXJlcXVlc3RfdW50aHJvdHRsZSA9IDE7CisJfQorCisJaWYgKGNvdW50KSB7CisJCS8qIG5vdyB0cmFuc2ZlciBkYXRhICovCisJCW1lbWNweSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgY291bnQpOworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OworCQkKKwkJcHJpdi0+dHhfcm9vbSAtPSBjb3VudDsKKworCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyYykgeworCQkJZGJnKCIgdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIFRoZXJlIHdhc24ndCBhbnkgcm9vbSBsZWZ0LCBzbyB3ZSBhcmUgdGhyb3R0bGVkIHVudGlsCisJCSAgIHRoZSBidWZmZXIgZW1wdGllcyBhIGJpdCAqLworCQlyZXF1ZXN0X3VudGhyb3R0bGUgPSAxOworCX0KKworCWlmIChyZXF1ZXN0X3VudGhyb3R0bGUpIHsKKwkJcHJpdi0+dHhfdGhyb3R0bGVkID0gMTsgLyogYmxvY2sgd3JpdGVycyAqLworCQlzY2hlZHVsZV93b3JrKCZwcml2LT51bnRocm90dGxlX3dvcmspOworCX0KKworCXJjID0gY291bnQ7CitleGl0OgorCXJldHVybiByYzsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBxdWV1ZSB1cCBhIHdha2V1cCBhdCBzY2hlZHVsZXIgdGltZSAqLworCXNjaGVkdWxlX3dvcmsoJnByaXYtPndha2V1cF93b3JrKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJLyogdXNlZCBieSBuX3R0eS5jIGZvciBwcm9jZXNzaW5nIG9mIHRhYnMgYW5kIHN1Y2guIEdpdmluZyBpdCBvdXIKKwkgICBjb25zZXJ2YXRpdmUgZ3Vlc3MgaXMgcHJvYmFibHkgZ29vZCBlbm91Z2gsIGJ1dCBuZWVkcyB0ZXN0aW5nIGJ5CisJICAgcnVubmluZyBhIGNvbnNvbGUgdGhyb3VnaCB0aGUgZGV2aWNlLiAqLworCisJcmV0dXJuIChwcml2LT50eF9yb29tKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKwkKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCS8qIHdoZW4gdGhyb3R0bGVkLCByZXR1cm4gYXQgbGVhc3QgV0FLRVVQX0NIQVJTIHRvIHRlbGwgc2VsZWN0KCkgKHZpYQorCSAgIG5fdHR5LmM6bm9ybWFsX3BvbGwoKSApIHRoYXQgd2UncmUgbm90IHdyaXRlYWJsZS4gKi8KKwlpZiggcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTIHx8IHByaXYtPnR4X3Rocm90dGxlZCApCisJCXJldHVybiAyNTY7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGNoYXIgcm9vbTsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCisJLyogZmluZCBvdXQgaG93IG11Y2ggcm9vbSBpcyBpbiB0aGUgVHggcmluZyAqLworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICA2LCAvKiB3cml0ZV9yb29tICovCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UKKwkJCSAgICAgfCBVU0JfRElSX0lOLAorCQkJICAgICAwLCAvKiB2YWx1ZSAqLworCQkJICAgICAwLCAvKiBpbmRleCAqLworCQkJICAgICAmcm9vbSwKKwkJCSAgICAgMSwKKwkJCSAgICAgMjAwMCk7CisJaWYgKHJjIDwgMCkgeworCQlkYmcoIiVzIC0gcm9vbXF1ZXJ5IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChyYyA9PSAwKSB7CisJCWRiZygiJXMgLSByb29tcXVlcnkgcmV0dXJuZWQgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlwcml2LT50eF9yb29tID0gcm9vbTsKKwlwcml2LT50eF90aHJvdHRsZWQgPSByb29tID8gMCA6IDE7CisKKwkvKiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gYWx3YXlzIHR1cm4gb24gRFRSIGFuZCBSVFMgaGVyZSwKKwkgICBzbyBkbyB0aGUgc2FtZSAqLworCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJa2V5c3Bhbl9wZGFfc2V0X21vZGVtX2luZm8oc2VyaWFsLCAoMTw8NykgfCAoMTw8MikgKTsKKwllbHNlCisJCWtleXNwYW5fcGRhX3NldF9tb2RlbV9pbmZvKHNlcmlhbCwgMCk7CisKKwkvKlN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlKi8KKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyYykgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCitlcnJvcjoKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gYWx3YXlzIHNodXQgb2ZmIERUUiBhbmQgUlRTIG5vdyAqLworCQlpZiAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpCisJCQlrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzZXJpYWwsIDApOworCisJCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWRzIGFuZCB3cml0ZXMgKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl9Cit9CisKKworLyogZG93bmxvYWQgdGhlIGZpcm13YXJlIHRvIGEgImZha2UiIGRldmljZSAocHJlLXJlbnVtZXJhdGlvbikgKi8KK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfZmFrZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCByZXNwb25zZTsKKwljb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqcmVjb3JkID0gTlVMTDsKKworCS8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBoZXJlIC4uLiAqLworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0KHNlcmlhbCwgMSk7CisKKyNpZmRlZiBLRVlTUEFOCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBLRVlTUEFOX1ZFTkRPUl9JRCkKKwkJcmVjb3JkID0gJmtleXNwYW5fcGRhX2Zpcm13YXJlWzBdOworI2VuZGlmCisjaWZkZWYgWElSQ09NCisJaWYgKChsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gWElSQ09NX1ZFTkRPUl9JRCkgfHwKKwkgICAgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBFTlRSRUdSQV9WRU5ET1JfSUQpKQorCQlyZWNvcmQgPSAmeGlyY29tX3Bnc19maXJtd2FyZVswXTsKKyNlbmRpZgorCWlmIChyZWNvcmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJd2hpbGUocmVjb3JkLT5hZGRyZXNzICE9IDB4ZmZmZikgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5KHNlcmlhbCwgcmVjb3JkLT5hZGRyZXNzLAorCQkJCQkgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAorCQkJCQkgICAgIHJlY29yZC0+ZGF0YV9zaXplLCAweGEwKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4gUERBICIKKwkJCSAgICAiZmlybXdhcmUgKCVkICUwNFggJXAgJWQpIiwKKwkJCSAgICByZXNwb25zZSwgCisJCQkgICAgcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCXJlY29yZCsrOworCX0KKwkvKiBicmluZyBkZXZpY2Ugb3V0IG9mIHJlc2V0LiBSZW51bWVyYXRpb24gd2lsbCBvY2N1ciBpbiBhIG1vbWVudAorCSAgIGFuZCB0aGUgbmV3IGRldmljZSB3aWxsIGJpbmQgdG8gdGhlIHJlYWwgZHJpdmVyICovCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAwKTsKKworCS8qIHdlIHdhbnQgdGhpcyBkZXZpY2UgdG8gZmFpbCB0byBoYXZlIGEgZHJpdmVyIGFzc2lnbmVkIHRvIGl0LiAqLworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCisJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhbGwgcG9ydHMuIFdlbGwsIGZvciBhbGwKKwkgICBvbmUgcG9ydHMuICovCisKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAoMSk7IC8qIGVycm9yICovCisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKKwlJTklUX1dPUksoJnByaXYtPndha2V1cF93b3JrLCAodm9pZCAqKWtleXNwYW5fcGRhX3dha2V1cF93cml0ZSwKKwkJCSh2b2lkICopKHNlcmlhbC0+cG9ydFswXSkpOworCUlOSVRfV09SSygmcHJpdi0+dW50aHJvdHRsZV93b3JrLAorCQkJKHZvaWQgKilrZXlzcGFuX3BkYV9yZXF1ZXN0X3VudGhyb3R0bGUsCisJCQkodm9pZCAqKShzZXJpYWwpKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwkKKwlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKSk7Cit9CisKKyNpZmRlZiBLRVlTUEFOCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl9wZGFfZmFrZV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiS2V5c3BhbiBQREEgLSAocHJlcmVudW1lcmF0aW9uKSIsCisJLnNob3J0X25hbWUgPQkJImtleXNwYW5fcGRhX3ByZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2Zha2UsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCisJLmF0dGFjaCA9CQlrZXlzcGFuX3BkYV9mYWtlX3N0YXJ0dXAsCit9OworI2VuZGlmCisKKyNpZmRlZiBYSVJDT00KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB4aXJjb21fcGdzX2Zha2VfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlhpcmNvbSAvIEVudHJlZ3JhIFBHUyAtIChwcmVyZW51bWVyYXRpb24pIiwKKwkuc2hvcnRfbmFtZSA9CQkieGlyY29tX25vX2Zpcm0iLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9mYWtlX3hpcmNvbSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuYXR0YWNoID0JCWtleXNwYW5fcGRhX2Zha2Vfc3RhcnR1cCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fcGRhX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJLZXlzcGFuIFBEQSIsCisJLnNob3J0X25hbWUgPQkJImtleXNwYW5fcGRhIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfc3RkLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMCwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlrZXlzcGFuX3BkYV9vcGVuLAorCS5jbG9zZSA9CQlrZXlzcGFuX3BkYV9jbG9zZSwKKwkud3JpdGUgPQkJa2V5c3Bhbl9wZGFfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJa2V5c3Bhbl9wZGFfd3JpdGVfcm9vbSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9IAlrZXlzcGFuX3BkYV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CWtleXNwYW5fcGRhX3J4X2ludGVycnVwdCwKKwkuY2hhcnNfaW5fYnVmZmVyID0Ja2V5c3Bhbl9wZGFfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQlrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlrZXlzcGFuX3BkYV9yeF91bnRocm90dGxlLAorCS5pb2N0bCA9CQlrZXlzcGFuX3BkYV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJa2V5c3Bhbl9wZGFfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlrZXlzcGFuX3BkYV9icmVha19jdGwsCisJLnRpb2NtZ2V0ID0JCWtleXNwYW5fcGRhX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlrZXlzcGFuX3BkYV90aW9jbXNldCwKKwkuYXR0YWNoID0JCWtleXNwYW5fcGRhX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWtleXNwYW5fcGRhX3NodXRkb3duLAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBrZXlzcGFuX3BkYV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9wZGFfcmVnaXN0ZXI7CisjaWZkZWYgS0VZU1BBTgorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2Zha2VfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9wZGFfZmFrZV9yZWdpc3RlcjsKKyNlbmRpZgorI2lmZGVmIFhJUkNPTQorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnhpcmNvbV9wZ3NfZmFrZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3hpcmNvbV9yZWdpc3RlcjsKKyNlbmRpZgorCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoJCisjaWZkZWYgWElSQ09NCisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ4aXJjb21fcGdzX2Zha2VfZGV2aWNlKTsKK2ZhaWxlZF94aXJjb21fcmVnaXN0ZXI6CisjZW5kaWYgLyogWElSQ09NICovCisjaWZkZWYgS0VZU1BBTgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl9wZGFfZmFrZV9kZXZpY2UpOworI2VuZGlmCisjaWZkZWYgS0VZU1BBTgorZmFpbGVkX3BkYV9mYWtlX3JlZ2lzdGVyOgorI2VuZGlmCisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuX3BkYV9kZXZpY2UpOworZmFpbGVkX3BkYV9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrZXlzcGFuX3BkYV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgma2V5c3Bhbl9wZGFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX3BkYV9kZXZpY2UpOworI2lmZGVmIEtFWVNQQU4KKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX3BkYV9mYWtlX2RldmljZSk7CisjZW5kaWYKKyNpZmRlZiBYSVJDT00KKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZ4aXJjb21fcGdzX2Zha2VfZGV2aWNlKTsKKyNlbmRpZgorfQorCisKK21vZHVsZV9pbml0KGtleXNwYW5fcGRhX2luaXQpOworbW9kdWxlX2V4aXQoa2V5c3Bhbl9wZGFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGFfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjUzYWNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhX2Z3LmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIFVTQiBLZXlzcGFuIFBEQSBGaXJtd2FyZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBCcmlhbiBXYXJuZXIJPHdhcm5lckBsb3RoYXIuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogR2VuZXJhdGVkIGZyb20ga2V5c3Bhbl9wZGEucyBieSBlenVzYl9jb252ZXJ0LnBsCisgKgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3BkYV9maXJtd2FyZVtdID0geworeyAweDAwMDAsCTMsCXsweDAyLCAweDAyLCAweDAwfSB9LAoreyAweDAwMjMsCTQsCXsweDAyLCAweDA1LCAweDVmLCAweDAwfSB9LAoreyAweDAwNDMsCTQsCXsweDAyLCAweDAxLCAweDAwLCAweDAwfSB9LAoreyAweDAwMzAsCTUsCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDAxMDAsCTE2LAl7MHgwMiwgMHgwMiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMTEwLAkxNiwJezB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDEyMCwJMTYsCXsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDYxLCAweDAwLCAweDAyLCAweDA0LCAweDg5LCAweDAwfSB9LAoreyAweDAyMDAsCTE2LAl7MHg3NSwgMHg4MSwgMHg1ZSwgMHhlNCwgMHhmNSwgMHgzMiwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzNCwgMHhjMiwgMHgwMH0gfSwKK3sgMHgwMjEwLAkxNiwJezB4YzIsIDB4MDEsIDB4YTksIDB4MDAsIDB4NzQsIDB4ZmUsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZDksIDB4ZmMsIDB4NzQsIDB4ZmQsIDB4OTB9IH0sCit7IDB4MDIyMCwJMTYsCXsweDExLCAweDAwLCAweGYwLCAweGEzLCAweGQ5LCAweGZjLCAweDc0LCAweDAyLCAweDkwLCAweDdmLCAweDlkLCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmfSB9LAoreyAweDAyMzAsCTE2LAl7MHg5NywgMHhmMCwgMHg3NCwgMHg4NiwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMjQwLAkxNiwJezB4YWYsIDB4ZTAsIDB4ZDIsIDB4ZTAsIDB4ZjAsIDB4NzQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4YWIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDI1MCwJMTYsCXsweDdmLCAweGFjLCAweDc0LCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGFkLCAweDc0LCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDc0fSB9LAoreyAweDAyNjAsCTE2LAl7MHg4NCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg3NCwgMHgwMCwgMHhmNSwgMHg5OCwgMHg3NSwgMHhjOCwgMHgzMCwgMHg3YiwgMHgwNSwgMHg5MSwgMHgyMH0gfSwKK3sgMHgwMjcwLAkxNiwJezB4ZDIsIDB4Y2EsIDB4NzUsIDB4OTgsIDB4NTAsIDB4ZDIsIDB4ZTgsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YWMsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTB9IH0sCit7IDB4MDI4MCwJMTYsCXsweDdmLCAweGQ2LCAweDc0LCAweDAyLCAweGYwLCAweDc5LCAweDJlLCAweDdhLCAweDAwLCAweDdiLCAweDAwLCAweGRiLCAweGZlLCAweGRhLCAweGZhLCAweGQ5fSB9LAoreyAweDAyOTAsCTE2LAl7MHhmNiwgMHg3NCwgMHgwNiwgMHhmMCwgMHg4MCwgMHhmZSwgMHhjMCwgMHg4NiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NX0gfSwKK3sgMHgwMmEwLAkxNiwJezB4YzAsIDB4ZTAsIDB4ZTUsIDB4OTEsIDB4YzIsIDB4ZTQsIDB4ZjUsIDB4OTEsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDJiMCwJMTYsCXsweGU4LCAweGUwLCAweGY5LCAweGEzLCAweGUwLCAweGZhLCAweGEzLCAweGUwLCAweGZiLCAweGEzLCAweGUwLCAweGZjLCAweGU5LCAweDU0LCAweDYwLCAweGI0fSB9LAoreyAweDAyYzAsCTE2LAl7MHgwMCwgMHgwMywgMHgwMiwgMHgwMywgMHgzOSwgMHhiNCwgMHg0MCwgMHg2ZSwgMHhiYSwgMHgwMCwgMHgwYiwgMHgxMiwgMHgwNCwgMHgyMCwgMHg0MCwgMHgwM30gfSwKK3sgMHgwMmQwLAkxNiwJezB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDIsIDB4MDMsIDB4MDJ9IH0sCit7IDB4MDJlMCwJMTYsCXsweDA0LCAweDBhLCAweGJhLCAweDAzLCAweDAzLCAweDAyLCAweDA0LCAweDQ0LCAweGJhLCAweDA0LCAweDFlLCAweGJiLCAweDAwLCAweDBhLCAweDkwLCAweDdmfSB9LAoreyAweDAyZjAsCTE2LAl7MHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMzAwLAkxNiwJezB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YmEsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmF9IH0sCit7IDB4MDMxMCwJMTYsCXsweDA2LCAweDE5LCAweGJiLCAweDAwLCAweDA4LCAweGU1LCAweDMzLCAweGQzLCAweDk1LCAweDMyLCAweDAyLCAweDAzLCAweGRlLCAweGJiLCAweDAxLCAweDA4fSB9LAoreyAweDAzMjAsCTE2LAl7MHhlNSwgMHgzMiwgMHhjMywgMHg5NSwgMHgzMywgMHgwMiwgMHgwMywgMHhkZSwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwNywgMHgwNSwgMHg4YiwgMHgzNH0gfSwKK3sgMHgwMzMwLAkxNiwJezB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDAsIDB4MjAsIDB4YjksIDB4ODAsIDB4MTAsIDB4OTB9IH0sCit7IDB4MDM0MCwJMTYsCXsweDdmLCAweDAwLCAweGU0LCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweGI5fSB9LAoreyAweDAzNTAsCTE2LAl7MHg4MiwgMHgwMiwgMHg4MCwgMHhlYiwgMHhiOSwgMHg4MSwgMHgwMiwgMHg4MCwgMHhlNiwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwMSwgMHgwZiwgMHhiYn0gfSwKK3sgMHgwMzYwLAkxNiwJezB4MDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmIsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDN9IH0sCit7IDB4MDM3MCwJMTYsCXsweDBmLCAweGJiLCAweDAwLCAweDAzLCAweDAyLCAweDA0LCAweDBhLCAweGJiLCAweDAxLCAweDAzLCAweDAyLCAweDA0LCAweDAyLCAweDAyLCAweDA0LCAweDBhfSB9LAoreyAweDAzODAsCTE2LAl7MHhiYSwgMHgwNiwgMHg1NiwgMHhiYywgMHgwMSwgMHgwZiwgMHg5MCwgMHg3ZiwgMHhkNCwgMHg3NCwgMHgwNiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHg3NH0gfSwKK3sgMHgwMzkwLAkxNiwJezB4MTIsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YmMsIDB4MDIsIDB4MTIsIDB4YmIsIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4NzQsIDB4MDZ9IH0sCit7IDB4MDNhMCwJMTYsCXsweGYwLCAweDkwLCAweDdmLCAweGQ1LCAweDc0LCAweDI0LCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweGJjLCAweDAzLCAweDI5LCAweDc0LCAweDA0LCAweGMzfSB9LAoreyAweDAzYjAsCTE2LAl7MHg5YiwgMHg0MCwgMHg1NywgMHg2MCwgMHg1NSwgMHhlYiwgMHgyYiwgMHg5MCwgMHgwNiwgMHg0NCwgMHgyNSwgMHg4MiwgMHhmNSwgMHg4MiwgMHg3NCwgMHgwMH0gfSwKK3sgMHgwM2MwLAkxNiwJezB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZTksIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDNkMCwJMTYsCXsweGQ1LCAweGVhLCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweDAyLCAweDA0LCAweDBhLCAweGJhLCAweDA4LCAweDBmLCAweDc0LCAweDAxLCAweDkwLCAweDdmfSB9LAoreyAweDAzZTAsCTE2LAl7MHgwMCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhiYSwgMHgwOSwgMHgwMywgMHgwMiwgMHgwNH0gfSwKK3sgMHgwM2YwLAkxNiwJezB4MDIsIDB4YmEsIDB4MGEsIDB4MDUsIDB4NzQsIDB4MDAsIDB4MDIsIDB4MDMsIDB4ZGUsIDB4YmEsIDB4MGIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDJ9IH0sCit7IDB4MDQwMCwJMTYsCXsweDA0LCAweDBhLCAweDkwLCAweDdmLCAweGI0LCAweDc0LCAweDAyLCAweGYwLCAweDgwLCAweDA5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxfSB9LAoreyAweDA0MTAsCTE2LAl7MHhmMCwgMHg4MCwgMHgwMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMn0gfSwKK3sgMHgwNDIwLAkxNiwJezB4ZWIsIDB4MjAsIDB4ZTcsIDB4MWUsIDB4YzMsIDB4OTQsIDB4MGEsIDB4NTAsIDB4MTksIDB4ZWIsIDB4MjMsIDB4MjQsIDB4ZmUsIDB4ZjUsIDB4ODIsIDB4NzR9IH0sCit7IDB4MDQzMCwJMTYsCXsweDA1LCAweDM0LCAweDAwLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGNiLCAweGY1LCAweGNkLCAweGEzLCAweGUwLCAweGY1LCAweGNhLCAweGY1LCAweGNjfSB9LAoreyAweDA0NDAsCTE2LAl7MHhjMywgMHgyMiwgMHhkMywgMHgyMiwgMHhiOSwgMHg0MSwgMHgxMSwgMHhlYiwgMHg2NCwgMHhmZiwgMHg1NCwgMHg4NCwgMHhmYiwgMHg5MCwgMHg3ZiwgMHg5OH0gfSwKK3sgMHgwNDUwLAkxNiwJezB4ZTAsIDB4NTQsIDB4N2IsIDB4NGIsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NjQsIDB4ZmYsIDB4MDIsIDB4MDN9IH0sCit7IDB4MDQ2MCwJMTYsCXsweGRlLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweGU1LCAweDkxLCAweGMyfSB9LAoreyAweDA0NzAsCTE2LAl7MHhlNCwgMHhmNSwgMHg5MSwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwNCwgMHhmMCwgMHgxMiwgMHgwNSwgMHhhMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NX0gfSwKK3sgMHgwNDgwLAkxNiwJezB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzB9IH0sCit7IDB4MDQ5MCwJMTYsCXsweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweGU1LCAweDkxLCAweGMyLCAweGU0LCAweGY1LCAweDkxLCAweDkwLCAweDdmLCAweGFhLCAweDc0LCAweDA0fSB9LAoreyAweDA0YTAsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmOSwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3ZCwgMHhjMCwgMHg3NSwgMHg4NSwgMHgxMCwgMHg4NX0gfSwKK3sgMHgwNGIwLAkxNiwJezB4MzIsIDB4ODQsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4MDUsIDB4ODQsIDB4ZjAsIDB4ZTUsIDB4ODQsIDB4YjUsIDB4MzMsIDB4MDIsIDB4ODAsIDB4MDksIDB4MDV9IH0sCit7IDB4MDRjMCwJMTYsCXsweDMyLCAweDA1LCAweDg2LCAweGEzLCAweGQ5LCAweGVjLCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGIxLCAweDMxLCAweGQwLCAweGUwfSB9LAoreyAweDA0ZDAsCTE2LAl7MHhkMCwgMHg4NSwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNGUwLAkxNiwJezB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NGIsIDB4OTAsIDB4N2QsIDB4MDAsIDB4ZTUsIDB4MzIsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4MzMsIDB4ZjAsIDB4YTN9IH0sCit7IDB4MDRmMCwJMTYsCXsweGU1LCAweDMwLCAweGYwLCAweGEzLCAweGU1LCAweDMxLCAweGYwLCAweGEzLCAweGU0LCAweDMwLCAweDAwLCAweDAxLCAweDA0LCAweGYwLCAweGEzLCAweDA1fSB9LAoreyAweDA1MDAsCTE2LAl7MHg4NiwgMHg5MCwgMHgxMCwgMHgwMCwgMHg3OSwgMHgxMCwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkOSwgMHhmNn0gfSwKK3sgMHgwNTEwLAkxNiwJezB4MDUsIDB4ODYsIDB4NzQsIDB4ZmMsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4MTEsIDB4MDAsIDB4NzksIDB4MTAsIDB4ZTAsIDB4YTMsIDB4MDV9IH0sCit7IDB4MDUyMCwJMTYsCXsweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGQ5LCAweGY2LCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdmLCAweGJkLCAweDc0LCAweDI2LCAweGYwfSB9LAoreyAweDA1MzAsCTE2LAl7MHgyMiwgMHgyMCwgMHgwMCwgMHgxMywgMHhlNSwgMHgzMiwgMHhiNSwgMHgzMywgMHgwMSwgMHgyMiwgMHgwNSwgMHgzMywgMHg3NSwgMHg4MywgMHgxMCwgMHg4NX0gfSwKK3sgMHgwNTQwLAkxNiwJezB4MzMsIDB4ODIsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4ZDIsIDB4MDAsIDB4NzQsIDB4MDAsIDB4YjUsIDB4MzQsIDB4MDEsIDB4MjIsIDB4ZTUsIDB4MzMsIDB4ZDN9IH0sCit7IDB4MDU1MCwJMTYsCXsweDk1LCAweDMyLCAweGMzLCAweDk1LCAweDM0LCAweDQwLCAweGY1LCAweDc1LCAweDM0LCAweDAwLCAweGQyLCAweDAxLCAweDAyLCAweDA1LCAweGEwLCAweGMwfSB9LAoreyAweDA1NjAsCTE2LAl7MHg4NiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NSwgMHhjMCwgMHhlMCwgMHgzMCwgMHg5OSwgMHgwNywgMHhjMiwgMHg5OX0gfSwKK3sgMHgwNTcwLAkxNiwJezB4YzIsIDB4MDAsIDB4MTIsIDB4MDUsIDB4MzQsIDB4MzAsIDB4OTgsIDB4MDUsIDB4MTIsIDB4MDUsIDB4OGEsIDB4YzIsIDB4OTgsIDB4ZDAsIDB4ZTAsIDB4ZDB9IH0sCit7IDB4MDU4MCwJMTYsCXsweDg1LCAweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweDg2LCAweDMyLCAweDc1LCAweDgzLCAweDExLCAweDg1LCAweDMwLCAweDgyfSB9LAoreyAweDA1OTAsCTE2LAl7MHgwNSwgMHg4MiwgMHhlNSwgMHg5OSwgMHhmMCwgMHhlNSwgMHg4MiwgMHhiNSwgMHgzMSwgMHgwMSwgMHgyMiwgMHgwNSwgMHgzMCwgMHhiMSwgMHhhMCwgMHgyMn0gfSwKK3sgMHgwNWEwLAkxNiwJezB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzgsIDB4MjAsIDB4MDEsIDB4MzYsIDB4ZTUsIDB4MzAsIDB4YjUsIDB4MzEsIDB4MDEsIDB4MjJ9IH0sCit7IDB4MDViMCwJMTYsCXsweGU0LCAweGY1LCAweDg2LCAweDc1LCAweDgzLCAweDExLCAweDA1LCAweDg2LCAweDkwLCAweDdlLCAweDAwLCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweDc5fSB9LAoreyAweDA1YzAsCTE2LAl7MHgwMSwgMHhlNSwgMHgzMCwgMHhiNSwgMHgzMSwgMHgwMiwgMHg4MCwgMHgxMCwgMHgwNSwgMHgzMSwgMHg4NSwgMHgzMSwgMHg4MiwgMHhlMCwgMHgwNSwgMHg4Nn0gfSwKK3sgMHgwNWQwLAkxNiwJezB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4MDksIDB4YjksIDB4NDAsIDB4ZTksIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTksIDB4NjAsIDB4MDEsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MDVlMCwJMTYsCXsweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdlLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweDAyLCAweGYwLCAweDkwfSB9LAoreyAweDA1ZjAsCTE2LAl7MHg3ZiwgMHhiOSwgMHhmMCwgMHgyMiwgMHhjMiwgMHg5OSwgMHhmNSwgMHg5OSwgMHgzMCwgMHg5OSwgMHhmZCwgMHhjMiwgMHg5OSwgMHgyMiwgMHhlNSwgMHg1ZX0gfSwKK3sgMHgwNjAwLAkxNiwJezB4ZjYsIDB4M2MsIDB4ZmQsIDB4OGYsIDB4ZmUsIDB4YzgsIDB4ZmYsIDB4NjQsIDB4ZmYsIDB4YjIsIDB4ZmYsIDB4ZDksIDB4ZmYsIDB4ZWQsIDB4ZmYsIDB4ZjN9IH0sCit7IDB4MDYxMCwJMTYsCXsweGZmLCAweGZhLCAweDEyLCAweDAxLCAweDAwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweDQwLCAweGNkLCAweDA2LCAweDA0LCAweDAxLCAweDg5LCAweGFifSB9LAoreyAweDA2MjAsCTE2LAl7MHgwMSwgMHgwMiwgMHgwMywgMHgwMSwgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMH0gfSwKK3sgMHgwNjMwLAkxNiwJezB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4MDJ9IH0sCit7IDB4MDY0MCwJMTYsCXsweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDA2LCAweDUwLCAweDA2LCAweDcyLCAweDA2LCAweGEwLCAweDA0LCAweDAzLCAweDAwLCAweDAwfSB9LAoreyAweDA2NTAsCTE2LAl7MHgyMiwgMHgwMywgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MywgMHgwMH0gfSwKK3sgMHgwNjYwLAkxNiwJezB4NjIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDY3MCwJMTYsCXsweDczLCAweDAwLCAweDJlLCAweDAzLCAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwfSB9LAoreyAweDA2ODAsCTE2LAl7MHg1MywgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMH0gfSwKK3sgMHgwNjkwLAkxNiwJezB4NmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDZhMCwJNiwJezB4MDYsIDB4MDMsIDB4MzQsIDB4MDAsIDB4MzcsIDB4MDB9IH0sCit7IDB4ZmZmZiwJMCwJezB4MDB9IH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOHhfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE4eF9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjNiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOHhfZncuaApAQCAtMCwwICsxLDQ0NyBAQAorLyoga2V5c3Bhbl91c2ExOHhfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOHhfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTh4X2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgxMiwgMHhmN319LAorIHsweDAwMDMsIDE2LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjB9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDkwfX0sCisgezB4MDAyMywgMTUsIHsgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgwNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHgyMn19LAorIHsweDAwNDYsIDE2LCB7IDB4MzAsIDB4MDksIDB4MTgsIDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4M2MsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDAsIDB4ZDgsIDB4OTB9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDdmLCAweGJmLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDA5LCAweGMyLCAweDAwLCAweDgwLCAweDc3LCAweDMwLCAweDAzLCAweDNiLCAweDkwLCAweDdmfX0sCisgezB4MDA2NiwgMTYsIHsgMHhjNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHgxYiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZX19LAorIHsweDAwNzYsIDE2LCB7IDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MDksIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjB9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDQxLCAweDc1LCAweDBjLCAweDdlLCAweDc1LCAweDBkLCAweDQxLCAweDEyLCAweDBjLCAweGJhfX0sCisgezB4MDA5NiwgMTYsIHsgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMn19LAorIHsweDAwYTYsIDE2LCB7IDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MDl9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdkfX0sCisgezB4MDBjNiwgMTYsIHsgMHg3ZiwgMHhjMSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHhjMSwgMHgxMiwgMHgwYywgMHhiYSwgMHhkMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3Zn19LAorIHsweDAwZDYsIDE2LCB7IDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4NjAsIDB4MTIsIDB4MTEsIDB4ZDYsIDB4OGZ9fSwKKyB7MHgwMGU2LCAxNiwgeyAweDE5LCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDM2LCAweGU1LCAweDE5LCAweGMzLCAweDk1LCAweDNhLCAweDUwLCAweDBmLCAweDEyLCAweDEyLCAweGVifX0sCisgezB4MDBmNiwgMTYsIHsgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNiwgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgwYiwgMHg1ZSwgMHhjMiwgMHgwYiwgMHhlNSwgMHgxOX19LAorIHsweDAwMzYsIDEyLCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjJ9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDEzLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAxMDYsIDY0LCB7IDB4NjAsIDB4NTgsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MzYsIDB4MDIsIDB4ZTUsIDB4MzYsIDB4MzAsIDB4ZTcsIDB4MjYsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsCisgIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MGMsIDB4N2UsCisgIDB4NzUsIDB4MGQsIDB4ODAsIDB4YWYsIDB4MzYsIDB4MTIsIDB4MGYsIDB4NGIsIDB4ZTUsIDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsCisgIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDh9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDkwLCAweDdlLCAweDgwLCAweGU1LCAweDM2LCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDgxLCAweDc1LCAweDBjLCAweDdlLCAweDc1LCAweDBkLCAweDgxLCAweDEyLAorICAweDBjLCAweGRmLCAweGU1LCAweDE5LCAweDA0LCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDkwLCAweDdmLCAweGNlLCAweGUwLCAweDMwLCAweGUxLCAweDA2LAorICAweDIwLCAweDA1LCAweDAzLCAweDAyLCAweDAzLCAweGMxLCAweGMyLCAweDA1LCAweGU0LCAweGY1LCAweDE4LCAweDc0LCAweDQwLCAweDI1LCAweDE4LCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LCAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhfX0sCisgezB4MDE4NiwgNjQsIHsgMHg3ZSwgMHg3OSwgMHgwMCwgMHgyNCwgMHgwMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwKKyAgMHgxOCwgMHhiNCwgMHgyMCwgMHhkNywgMHg5MCwgMHg3ZSwgMHgwMCwgMHhlMCwgMHg2MCwgMHg2OCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgyNCwKKyAgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg0MywgMHg0NiwKKyAgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHhlNCwgMHg5MH19LAorIHsweDAxYzYsIDY0LCB7IDB4N2UsIDB4MTMsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4OTAsIDB4N2UsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4MzUsIDB4OTAsIDB4N2UsIDB4MDIsIDB4ZTAsCisgIDB4ZmYsIDB4MTIsIDB4MTAsIDB4NWIsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MDMsCisgIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NDMsIDB4NDYsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDYsIDB4OTB9fSwKKyB7MHgwMjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDcwLCAweDA2LCAweDkwLCAweDdlLCAweDEzLCAweGUwLCAweDcwLCAweDA4LCAweGU0LCAweDkwLAorICAweDdlLCAweDEzLCAweGYwLCAweDc1LCAweDI1LCAweGZmLCAweDkwLCAweDdlLCAweDA1LCAweGUwLCAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLAorICAweGY1LCAweDQ0LCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ0LCAweGYwLCAweDkwLCAweDdlLAorICAweDA3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQyLCAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQyfX0sCisgezB4MDI0NiwgNjQsIHsgMHg3ZiwgMHg1MywgMHg0MiwgMHhmYywgMHg5MCwgMHg3ZSwgMHgwOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHg0MiwgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMCwgMHhhNywgMHg5MCwgMHg3ZSwgMHgwYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHhjZCwgMHhhZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwKKyAgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgwOCwgMHg1MywgMHg0MiwgMHg3ZiwgMHhhZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwgMHg3ZSwgMHgwYywKKyAgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMiwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZH19LAorIHsweDAyODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MGUsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4M2EsIDB4YTMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2MsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MTB9fSwKKyB7MHgwMmM2LCA2NCwgeyAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLAorICAweDkwLCAweDdlLCAweDE2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDQ0LCAweGJmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LAorICAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDEyLCAweDEyLCAweGRmLAorICAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNlLCAweGZkLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyfX0sCisgezB4MDMwNiwgNjQsIHsgMHgxMSwgMHhiMSwgMHhlNCwgMHhmNSwgMHgyYSwgMHhmNSwgMHgyOSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwKKyAgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3NSwgMHgyOSwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxOCwKKyAgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgxOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHg0NCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDAzNDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWEsIDB4ZTAsIDB4NjAsIDB4MGYsCisgIDB4NTMsIDB4M2UsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NzUsIDB4MmIsIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsCisgIDB4N2UsIDB4MWIsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsIDB4MDEsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4ZTQsCisgIDB4ZjUsIDB4MmIsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MWMsIDB4ZTAsIDB4NjAsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTJ9fSwKKyB7MHgwMzg2LCA2NCwgeyAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBiLAorICAweDkwLCAweDdlLCAweDFlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDJjLCAweDAxLCAweGU0LCAweGY1LCAweDM4LCAweGQyLCAweDA3LCAweDkwLCAweDdlLAorICAweDFmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LCAweDE1LCAweGYwLAorICAweDc0LCAweDM1LCAweGYwLCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGNmLCAweGYwLCAweDMwLCAweDFhLCAweDUyLCAweGU1LCAweDM4fX0sCisgezB4MDNjNiwgNjQsIHsgMHg2MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHgyMCwgMHgxMywgMHg0OSwgMHhlNSwgMHgxMywgMHhkMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgxMywgMHg4MCwKKyAgMHgzZSwgMHg3NSwgMHgxMywgMHgwYSwgMHgzMCwgMHgxYiwgMHgwMiwgMHhkMiwgMHgxMywgMHgxMiwgMHgxMiwgMHhkZiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmNSwKKyAgMHgxOSwgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyYSwgMHhkMiwgMHgwNywgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHg1NCwgMHg4MCwKKyAgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNiwgMHhkMiwgMHgwNywgMHgzMCwgMHgwZCwgMHgxMSwgMHgxMn19LAorIHsweDA0MDYsIDY0LCB7IDB4MTMsIDB4MzMsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjUsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjUsIDB4ZDIsIDB4MDcsIDB4MjAsCisgIDB4MWIsIDB4MDMsIDB4MDIsIDB4MDcsIDB4ZWMsIDB4MzAsIDB4MGEsIDB4MTgsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4M2QsIDB4NDAsCisgIDB4MDMsIDB4MDIsIDB4MDQsIDB4YWUsIDB4OTAsIDB4N2YsIDB4YzEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsCisgIDB4MzAsIDB4MDQsIDB4M2IsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzN9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdkLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweDE0LCAweGY1LAorICAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdkLCAweDdmLCAweDQxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LAorICAweDBkLCAweDQxLCAweDEyLCAweDBkLCAweDA0LCAweGMyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLAorICAweGNjLCAweGUwLCAweDIwLCAweGUxLCAweDMyLCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwfX0sCisgezB4MDQ4NiwgNjQsIHsgMHg3YywgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwKKyAgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHhjMSwgMHg3NSwgMHgwYywgMHg3YywgMHg3NSwgMHgwZCwgMHhjMSwgMHgxMiwgMHgwZCwgMHgwNCwKKyAgMHhkMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwKKyAgMHgzNiwgMHgxMiwgMHgxMiwgMHgyMCwgMHg4ZiwgMHgxOSwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgzNywgMHhlNSwgMHgxOSwgMHhjMywgMHg5NX19LAorIHsweDA0YzYsIDY0LCB7IDB4M2IsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4NTcsIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzcsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGMsCisgIDB4NWUsIDB4YzIsIDB4MGMsIDB4ZTUsIDB4MTksIDB4NjAsIDB4NTgsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MzcsIDB4MDIsIDB4ZTUsIDB4MzcsIDB4MzAsCisgIDB4ZTcsIDB4MjYsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MDgsIDB4N2UsCisgIDB4N2QsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODAsIDB4YWYsIDB4MzcsIDB4MTIsIDB4MGYsIDB4ODQsIDB4ZTV9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGJiLCAweGYwLCAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LAorICAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4LCAweDkwLCAweDdkLCAweDgwLCAweGU1LCAweDM3LCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweDgxLCAweDc1LAorICAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgxLCAweDEyLCAweDBkLCAweDI5LCAweGU1LCAweDE5LCAweDA0LCAweDkwLCAweDdmLCAweGJiLCAweGYwLCAweDkwLAorICAweDdmLCAweGQwLCAweGUwLCAweDMwLCAweGUxLCAweDA2LCAweDIwLCAweDA2LCAweDAzLCAweDAyLCAweDA3LCAweDk3LCAweGMyLCAweDA2LCAweGU0fX0sCisgezB4MDU0NiwgNjQsIHsgMHhmNSwgMHgxOCwgMHg3NCwgMHhjMCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwKKyAgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHg3ZSwgMHg3OSwgMHgyMCwgMHgyNCwgMHgyMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwKKyAgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgyMCwgMHhkNywgMHg5MCwgMHg3ZSwgMHgyMCwgMHhlMCwgMHg2MCwgMHg2OCwKKyAgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg2MCwgMHgyNCwgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgwM319LAorIHsweDA1ODYsIDY0LCB7IDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NDMsIDB4NDcsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4OTAsIDB4N2UsIDB4MjEsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MTEsIDB4MTksIDB4OTAsIDB4N2UsIDB4MjIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4M2YsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MzEsIDB4ZTAsCisgIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NDMsIDB4NDcsIDB4ODAsIDB4OTB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLAorICAweGU1LCAweDQxLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDcwLCAweDA2LCAweDkwLCAweDdlLAorICAweDMzLCAweGUwLCAweDcwLCAweDA4LCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDc1LCAweDJlLCAweGZmLCAweDkwLCAweDdlLCAweDI1LCAweGUwLAorICAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLCAweGY1LCAweDQ1LCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwfX0sCisgezB4MDYwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyNywgMHhlMCwgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MywKKyAgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0MywgMHg3ZiwgMHg1MywgMHg0MywgMHhmYywgMHg5MCwgMHg3ZSwgMHgyOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0MywgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg2NSwgMHg5MCwgMHg3ZSwgMHgyYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg4YiwKKyAgMHhhZiwgMHg0MywgMHgxMiwgMHgxMCwgMHhmMywgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg2MCwgMHgwOCwgMHg1MywgMHg0MywgMHg3ZiwgMHhhZn19LAorIHsweDA2NDYsIDY0LCB7IDB4NDMsIDB4MTIsIDB4MTAsIDB4ZjMsIDB4OTAsIDB4N2UsIDB4MmMsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MDIsCisgIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsCisgIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MmUsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MDEsIDB4ODAsIDB4MDMsCisgIDB4NTMsIDB4NDcsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjB9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDkwLCAweDdlLCAweDMyLCAweGUwLCAweGY1LCAweDNiLCAweGEzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGEzLCAweGUwLCAweGY1LCAweDNkLCAweGEzLCAweGUwLAorICAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDEwLCAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwLCAweDkwLCAweDdlLCAweDM2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDQ1LCAweGJmLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MDZjNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHgxMiwgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZiwgMHhmZCwKKyAgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMiwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwKKyAgMHgzNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3NSwgMHgzMiwKKyAgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzOCwgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMH19LAorIHsweDA3MDYsIDY0LCB7IDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZDIsIDB4MDAsIDB4OTAsIDB4N2UsIDB4MzksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4M2EsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NTMsIDB4M2YsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsCisgIDB4NzUsIDB4MzQsIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2IsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDEsIDB4ZTR9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGY1LCAweDM0LCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNjLCAweGUwLCAweDYwLCAweDBlLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweGU1LCAweDQxLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLAorICAweDNkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBjLCAweDkwLCAweDdlLCAweDNlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDM1LCAweDAxLCAweGU0LAorICAweGY1LCAweDM5LCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDEzfX0sCisgezB4MDc4NiwgNjQsIHsgMHhmMCwgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg3NCwgMHgzNiwgMHhmMCwgMHhkMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMSwgMHhmMCwKKyAgMHgzMCwgMHgxYSwgMHg1MiwgMHhlNSwgMHgzOSwgMHg2MCwgMHgwMiwgMHgxNSwgMHgzOSwgMHgzMCwgMHgxMywgMHg0OSwgMHhlNSwgMHgxMywgMHhkMywgMHg5NCwKKyAgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgxMywgMHg4MCwgMHgzZSwgMHg3NSwgMHgxMywgMHgwYSwgMHgzMCwgMHgxYiwgMHgwMiwgMHhjMiwgMHgxMywgMHgxMiwKKyAgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmNSwgMHgxOSwgMHg2NSwgMHgzMywgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgzMywgMHhkMn19LAorIHsweDA3YzYsIDY0LCB7IDB4MDgsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4NTQsIDB4ODAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MmYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmYsIDB4ZDIsCisgIDB4MDgsIDB4MzAsIDB4MGUsIDB4MTEsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MmUsIDB4NjAsIDB4MDUsCisgIDB4ODUsIDB4MTksIDB4MmUsIDB4ZDIsIDB4MDgsIDB4MzAsIDB4MWEsIDB4MmEsIDB4OTAsIDB4N2YsIDB4ZDIsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjMsIDB4OTAsCisgIDB4N2IsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MDksIDB4ZTAsIDB4ZjUsIDB4MTUsIDB4OTAsIDB4N2IsIDB4NDIsIDB4ZTAsIDB4ZjUsIDB4MTYsIDB4OTB9fSwKKyB7MHgwODA2LCA2NCwgeyAweDdiLCAweDQxLCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDE3LCAweGYwLCAweDc0LCAweDM3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweGQzLCAweGYwLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA5LCAweDIwLCAweGU1LCAweDBhLCAweDcwLCAweDQwLAorICAweDMwLCAweDA3LCAweDM5LCAweGU1LCAweDM4LCAweDcwLCAweDM1LCAweGMyLCAweDA3LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LAorICAweDI0LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1fX0sCisgezB4MDg0NiwgNjQsIHsgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwKKyAgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgzOCwgMHgxMCwgMHhlNCwgMHhmNSwgMHgyYywgMHg3NSwgMHgwYSwgMHgwMSwgMHgyMiwKKyAgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMSwgMHg3MCwgMHg0MCwgMHgzMCwgMHgwOCwgMHgzOSwgMHhlNSwgMHgzOSwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwOCwgMHhmNSwKKyAgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMn19LAorIHsweDA4ODYsIDY0LCB7IDB4MGUsIDB4OGMsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsCisgIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MTAsIDB4ZTQsCisgIDB4ZjUsIDB4MzUsIDB4NzUsIDB4MGEsIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MzYsIDB4MzAsIDB4MTQsIDB4MmYsIDB4YzIsCisgIDB4MTQsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MGUsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDB9fSwKKyB7MHgwOGM2LCA2NCwgeyAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLAorICAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA1LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA1LCAweGYwLCAweDc1LCAweDBhLAorICAweDAzLCAweDIyLCAweGU1LCAweDE1LCAweDYwLCAweDMwLCAweDE1LCAweDE1LCAweGU0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LAorICAweDE0LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1fX0sCisgezB4MDkwNiwgNjQsIHsgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMywgMHhkYiwKKyAgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgwYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwZSwKKyAgMHhlNCwgMHgwYSwgMHgwOCwgMHgwMCwgMHgwYSwgMHg3YywgMHgwMSwgMHgwYSwgMHhlOCwgMHgwMywgMHgwOSwgMHg0NCwgMHgwNiwgMHgwOSwgMHhmYiwgMHgwOCwKKyAgMHgwOSwgMHhmNSwgMHgwOSwgMHgwOSwgMHhkZCwgMHgwYSwgMHgwOSwgMHhlYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHg5MCwgMHg3Zn19LAorIHsweDA5NDYsIDY0LCB7IDB4ZWIsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MTQsIDB4NjAsIDB4NjEsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDksIDB4ZDMsIDB4NzQsCisgIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksCisgIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4N2IsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NzQsIDB4NzUsIDB4ODMsIDB4MTl9fSwKKyB7MHgwOTg2LCA2NCwgeyAweGYwLCAweDc1LCAweDgyLCAweDY2LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDU4LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLAorICAweDc0LCAweDEyLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBmLAorICAweDBhLCAweGVhLCAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwfX0sCisgezB4MDljNiwgNjQsIHsgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgwOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgwOSwgMHgwMiwgMHgwYiwgMHgzZSwgMHgxMiwgMHgwYiwKKyAgMHg0NiwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMn19LAorIHsweDBhMDYsIDY0LCB7IDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsCisgIDB4YTIsIDB4MTAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MTYsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LAorICAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LAorICAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyfX0sCisgezB4MGE4NiwgNjQsIHsgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgxMCwgMHgwMiwgMHgwYiwgMHgzZSwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwKKyAgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwKKyAgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBhYzYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsCisgIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsCisgIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsIDB4MTAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjB9fSwKKyB7MHgwYjA2LCA2NCwgeyAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LAorICAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLAorICAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyfX0sCisgezB4MGI0NiwgNjQsIHsgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxOCwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhlNCwgMHhmNSwKKyAgMHgyNCwgMHg3NSwgMHgxOCwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYX19LAorIHsweDBiODYsIDY0LCB7IDB4ZTQsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2EsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsCisgIDB4ZjUsIDB4MTMsIDB4ZjUsIDB4MzYsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MDUsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MTMsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4NDQsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsCisgIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MTAsIDB4OGYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDQwLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDc1LCAweDQ2LCAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLAorICAweDEyLCAweDExLCAweGIxLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDExfX0sCisgezB4MGMwNiwgNjQsIHsgMHhiMSwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHg2YSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhiMSwgMHgyMCwgMHgxYiwgMHgwMywgMHgwMiwKKyAgMHgwYywgMHhiNywgMHg3NSwgMHgyZCwgMHgwMSwgMHg3NSwgMHgxOCwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlNCwKKyAgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYiwKKyAgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgxMywgMHhmNSwgMHgzNywgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMn19LAorIHsweDBjNDYsIDY0LCB7IDB4MDAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MTMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4NzUsIDB4NDUsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MTAsIDB4OGYsIDB4NDMsIDB4MTIsIDB4MTAsCisgIDB4ZjMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDEsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzR9fSwKKyB7MHgwYzg2LCA2NCwgeyAweDgwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDNmLCAweDEyLAorICAweDExLCAweGZiLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLAorICAweDdmLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDhiLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGZiLAorICAweGQyLCAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyfX0sCisgezB4MGNjNiwgNjQsIHsgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwKKyAgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgwOCwKKyAgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwKKyAgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3Zn19LAorIHsweDBkMDYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsCisgIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsCisgIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsCisgIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDV9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LAorICAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLAorICAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweGQyLCAweDE5LCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLAorICAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwfX0sCisgezB4MGQ4NiwgNjQsIHsgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwKKyAgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwZCwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwKKyAgMHgxYSwgMHgxMiwgMHgxMiwgMHg0NSwgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxMn19LAorIHsweDBkYzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YTEsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTcsIDB4NjAsIDB4MTAsIDB4MzAsIDB4MTIsIDB4MDUsIDB4ZDIsCisgIDB4MWEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MTcsIDB4ODAsIDB4MDgsIDB4MzAsIDB4MTIsIDB4MDUsIDB4YzIsCisgIDB4MWEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4MzAsIDB4MTEsIDB4MDcsIDB4YzIsIDB4MTEsIDB4MTIsIDB4MDksIDB4MjEsIDB4ODAsIDB4ZDYsIDB4MzAsIDB4MTgsCisgIDB4ZDMsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4OTMsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmR9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDc1LCAweDgxLCAweDQ3LCAweDAyLCAweDBlLCAweDQ3LCAweDAyLCAweDBkLCAweDZmLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLAorICAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LAorICAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LAorICAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwfX0sCisgezB4MGU0NiwgNjQsIHsgMHg4MCwgMHg5MCwgMHgxMiwgMHhhYywgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwKKyAgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwKKyAgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwKKyAgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX19LAorIHsweDBlODYsIDY0LCB7IDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsCisgIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsCisgIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksCisgIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTV9fSwKKyB7MHgwZWM2LCA2NCwgeyAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLAorICAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLAorICAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LAorICAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzfX0sCisgezB4MGYwNiwgNjQsIHsgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg4ZiwgMHgxOCwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3NSwgMHgxYSwgMHhmZiwgMHg3NSwgMHgxYiwgMHgxOSwgMHg3NSwgMHgxYywKKyAgMHg4NiwgMHhhYiwgMHgxYSwgMHhhYSwgMHgxYiwgMHhhOSwgMHgxYywgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwZSwgMHhhNSwgMHhiNCwgMHgwMywgMHgxZCwKKyAgMHhhZiwgMHgxOSwgMHgwNSwgMHgxOSwgMHhlZiwgMHhiNSwgMHgxOCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwZSwgMHg4YywgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwKKyAgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMH19LAorIHsweDBmNDYsIDY0LCB7IDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4OGYsIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsCisgIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsCisgIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsCisgIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsIDB4MWF9fSwKKyB7MHgwZjg2LCA2NCwgeyAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLAorICAweGYwLCAweDEyLCAweDEzLCAweDNmLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFjLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LAorICAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDA4LCAweGU1LCAweDA4LCAweDYwLCAweDBhLCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFhLAorICAweGVmLCAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwfX0sCisgezB4MGZjNiwgNjQsIHsgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwKKyAgMHgxMSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMH19LAorIHsweDEwMDYsIDY0LCB7IDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsCisgIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsCisgIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTB9fSwKKyB7MHgxMDQ2LCA2NCwgeyAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLAorICAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MTA4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NH19LAorIHsweDEwYzYsIDY0LCB7IDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsCisgIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMTA2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LAorICAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwfX0sCisgezB4MTE0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3Zn19LAorIHsweDExODYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsCisgIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMWM2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLAorICAweDEzLCAweDBmLCAweDhmLCAweDFhLCAweDEyLCAweDEzLCAweDBmLCAweDhmLCAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLAorICAweDEzLCAweDBmLCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDBmLCAweDhmLCAweDFiLCAweDgwLAorICAweGU4LCAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwfX0sCisgezB4MTIwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywKKyAgMHg2MywgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwKKyAgMHg2NSwgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MH19LAorIHsweDEyNDYsIDY0LCB7IDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCisgIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MTIsIDB4YzgsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsCisgIDB4MDQsIDB4ZjAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2UsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODB9fSwKKyB7MHgxMjg2LCA2NCwgeyAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDNmLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDExLCAweGZiLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDNmLCAweDQ0LCAweDgwLAorICAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDIyLCAweDA1LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE0LCAweDAzLCAweDAwLAorICAweDAwLCAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxfX0sCisgezB4MTJjNiwgNjQsIHsgMHgxYiwgMHgwMCwgMHg4ZSwgMHgxOCwgMHg4ZiwgMHgxOSwgMHhlNSwgMHgxOSwgMHgxNSwgMHgxOSwgMHhhZSwgMHgxOCwgMHg3MCwgMHgwMiwgMHgxNSwgMHgxOCwgMHg0ZSwKKyAgMHg2MCwgMHgwNSwgMHgxMiwgMHgwZCwgMHg0ZSwgMHg4MCwgMHhlZSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwZiwgMHhlNywgMHgwMCwgMHgwMiwgMHgxM319LAorIHsweDEzMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MGYsIDB4YmQsIDB4MDAsIDB4MDIsIDB4MTAsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMzQ2LCA2NCwgeyAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmfX0sCisgezB4MTM4NiwgNjQsIHsgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMCwgMHgwMywgMHgxMiwKKyAgMHgwZCwgMHg1ZiwgMHgxMiwgMHgwYiwgMHg0NiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTUwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxN2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTgwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MThjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHgwMH19LAorIHsweDE5MDYsIDY0LCB7IDB4MDAsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDIsIDB4NzQsIDB4MDAsIDB4MDEsCisgIDB4MDEsIDB4MDAsIDB4YTAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDUsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgxOTQ2LCA2NCwgeyAweDAwLCAweDA3LCAweDA1LCAweDA2LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LAorICAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLAorICAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg1LCAweDAyLCAweDQwLCAweDAwLAorICAweDAxLCAweDA3LCAweDA1LCAweDg2LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg3LCAweDAyLCAweDQwLCAweDAwLCAweDAxfX0sCisgezB4MTk4NiwgNjQsIHsgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHg0OCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwKKyAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2NiwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MywgMHgwMCwgMHg3OSwgMHgwMH19LAorIHsweDE5YzYsIDY0LCB7IDB4NzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MzYsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsCisgIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDB9fSwKKyB7MHgxYTA2LCAyMCwgeyAweDcyLCAweDAwLCAweDEwLCAweDAzLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLAorICAweDAwLCAweDAwLCAweDAwfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9IH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOV9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDIzYzUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlfZncuaApAQCAtMCwwICsxLDI4NSBAQAorLyoga2V5c3Bhbl91c2ExOV9mdy5oCisgCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOV9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisqLworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTE5X2Zpcm13YXJlW10gPSB7CisgezB4MDAyNiwgMTAsIHsgMHgxMiwgMHgwZCwgMHhiZiwgMHgxMiwgMHgwZiwgMHg0NywgMHgxMiwgMHgwZCwgMHg2YiwgMHgyMn19LAorIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MWF9fSwKKyB7MHgwMDFhLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDAwMywgMTYsIHsgMHg4ZSwgMHgxMywgMHg4ZiwgMHgxNCwgMHhlNSwgMHgxNCwgMHgxNSwgMHgxNCwgMHhhZSwgMHgxMywgMHg3MCwgMHgwMiwgMHgxNSwgMHgxMywgMHg0ZSwgMHg2MH19LAorIHsweDAwMTMsICA3LCB7IDB4MDUsIDB4MTIsIDB4MGYsIDB4MzYsIDB4ODAsIDB4ZWUsIDB4MjJ9fSwKKyB7MHgwMDIzLCAgMywgeyAweDAyLCAweDAwLCAweDQ2fX0sCisgezB4MDA0NiwgMTYsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOH19LAorIHsweDAwNTYsIDE2LCB7IDB4MzAsIDB4OTksIDB4MGUsIDB4MzAsIDB4MDgsIDB4MDcsIDB4YTIsIDB4MGIsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MzUsIDB4OTksIDB4YzIsIDB4OTksIDB4ZDJ9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDBmLCAweDIwLCAweDBmLCAweDAzLCAweDAyLCAweDA0LCAweDMxLCAweGMyLCAweDBmLCAweDIwLCAweDAyLCAweDAzLCAweDAyLCAweDAyLCAweDU2LCAweDIwfX0sCisgezB4MDA3NiwgMTYsIHsgMHgwOCwgMHgwMywgMHgwMiwgMHgwMSwgMHgyNywgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgzZSwgMHgyMCwgMHgwOSwgMHgzNiwgMHgyMH19LAorIHsweDAwODYsIDE2LCB7IDB4MDYsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4MjksIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWZ9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDAwYjYsIDE2LCB7IDB4ZjUsIDB4MzUsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzJ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDAyLCAweDMwLCAweDBhLCAweDBjLCAweGMyLCAweDBhLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmfX0sCisgezB4MDBkNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgwOCwgMHgwMiwgMHgwNCwgMHgyZiwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMH19LAorIHsweDAwZTYsIDE2LCB7IDB4ZjUsIDB4NTAsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4MjAsIDB4MDksIDB4MmQsIDB4MjAsIDB4MDYsIDB4MmEsIDB4OTB9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDIwLCAweDMwLCAweDBkLCAweDExLCAweDkwLCAweDdkLCAweGMxLCAweGUwfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZiwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MGMsIDB4NjF9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDEzLCAweDkyLCAweDBiLCAweGEzLCAweGUwLCAweGY1LCAweDM1LCAweDc1LCAweDM3LCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweDc1LCAweDM3LCAweDAyLCAweDkwLAorICAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDM1LCAweDAyLCAweDA0LCAweDJmLCAweDc1LCAweDM3LCAweDAxLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLAorICAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDUwLCAweDAzLCAweDAyLCAweDAxLCAweGNmLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDMwLCAweGUxLAorICAweDA3LCAweGMyLCAweDEwLCAweGMyLCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUwLCAweDkwfX0sCisgezB4MDE0NiwgNjQsIHsgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwMSwgMHhjNywgMHgyMCwgMHgwNiwgMHg3MiwgMHgyMCwgMHgwMCwKKyAgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHg2NSwgMHgzMCwgMHgwZCwgMHgxMCwgMHg5MCwgMHg3ZSwKKyAgMHg0MSwgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzNywgMHgwMywgMHg4MCwgMHgwOSwgMHg5MCwgMHg3ZSwKKyAgMHg0MSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzNywgMHgwMiwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg0MCwgMHgxNywgMHg5MH19LAorIHsweDAxODYsIDY0LCB7IDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDIsIDB4MjAsIDB4MGEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YmIsCisgIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MmYsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDgsIDB4MDIsIDB4MDR9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDJmLCAweDc1LCAweDM3LCAweDAxLCAweGMyLCAweDEwLCAweDAyLCAweDA0LCAweDJmLCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDAyLCAweDUxLCAweDIwLCAweDA2LAorICAweDc5LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDZmLCAweDMwLCAweDBkLCAweDEyLCAweGFmLCAweDM3LAorICAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDliLAorICAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmNSwgMHg5OSwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwMiwgMHgyMCwKKyAgMHgwYSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZiwgMHhjMiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyZiwgMHgzMCwKKyAgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH19LAorIHsweDAyNDYsIDY0LCB7IDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MTAsIDB4MDIsIDB4MDQsIDB4MmYsIDB4MjAsCisgIDB4MDgsIDB4MDMsIDB4MDIsIDB4MDMsIDB4MDgsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4M2UsIDB4MjAsIDB4MDksIDB4MzYsIDB4MjAsCisgIDB4MDYsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4MjksIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsCisgIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDkyLCAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLAorICAweGY1LCAweDM1LCAweDAyLCAweDA0LCAweDJmLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLAorICAweDAyLCAweDMwLCAweDBhLCAweDBjLCAweGMyLCAweDBhLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLAorICAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDMwLCAweGUxLCAweDA1LCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM3fX0sCisgezB4MDJjNiwgNjQsIHsgMHhlMCwgMHhmNSwgMHg1MCwgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHgyMCwgMHgwOSwgMHgyZCwgMHgyMCwgMHgwNiwgMHgyYSwgMHg5MCwKKyAgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHgyMCwgMHgzMCwgMHgwZCwgMHgxMSwgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgwYiwgMHhhMywgMHhlMCwgMHhmNSwgMHgzNSwgMHg3NSwgMHgzNywgMHgwMywgMHgwMiwgMHgwNCwgMHgyZiwgMHg3NSwgMHgzNywgMHgwMiwKKyAgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwgMHhmNSwgMHgzNSwgMHgwMiwgMHgwNCwgMHgyZiwgMHg3NSwgMHgzNywgMHgwMSwgMHhjMiwgMHgwOCwgMHgwMn19LAorIHsweDAzMDYsIDY0LCB7IDB4MDQsIDB4MmYsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YjAsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MzAsCisgIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZjUsIDB4NTAsIDB4OTAsCisgIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDMsIDB4YTgsIDB4MjAsIDB4MDYsIDB4NzIsIDB4MjAsCisgIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4NjUsIDB4MzAsIDB4MGQsIDB4MTB9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGEzLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDM3LCAweDAzLCAweDgwLCAweDA5LCAweDkwLAorICAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDM3LCAweDAyLCAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDQwLCAweDE3LCAweDkwLAorICAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAyLCAweDIwLCAweDBhLCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweGMyLCAweDBhLCAweDkwLCAweDdmLAorICAweGJiLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDJmLCAweDMwLCAweDBkLCAweDEyLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwfX0sCisgezB4MDM4NiwgNjQsIHsgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwKKyAgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNSwgMHhkMiwgMHgwOCwgMHgwMiwgMHgwNCwKKyAgMHgyZiwgMHg3NSwgMHgzNywgMHgwMSwgMHhjMiwgMHgxMCwgMHgwMiwgMHgwNCwgMHgyZiwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZCwgMHgyMCwKKyAgMHgwNiwgMHg3NCwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHg2YSwgMHgzMCwgMHgwZCwgMHgxMn19LAorIHsweDAzYzYsIDY0LCB7IDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsCisgIDB4OWIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4OTksIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NDAsIDB4MTMsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4ZDIsIDB4MDIsCisgIDB4MzAsIDB4MGEsIDB4MzUsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MmMsIDB4MzAsIDB4MGQsIDB4MTJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLAorICAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLAorICAweGY1LCAweDM1LCAweGQyLCAweDA4LCAweDgwLCAweDAyLCAweGMyLCAweDEwLCAweGQyLCAweDEyLCAweDIwLCAweDk4LCAweDAzLCAweDAyLCAweDA1LCAweDZkLAorICAweGMyLCAweDk4LCAweDIwLCAweDAxLCAweDAzLCAweDAyLCAweDA0LCAweGRhLCAweDIwLCAweDExLCAweDI3LCAweGFmLCAweDM2LCAweDA1LCAweDM2fX0sCisgezB4MDQ0NiwgNjQsIHsgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgwZCwgMHg0ZCwgMHhhZiwKKyAgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwKKyAgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NCwgMHgwNCwgMHhkMiwgMHgwNiwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwKKyAgMHhiNSwgMHg0MywgMHgwNCwgMHhjMiwgMHgwNiwgMHg4MCwgMHgyNSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNX19LAorIHsweDA0ODYsIDY0LCB7IDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MTAsIDB4ZjAsIDB4MzAsIDB4MGQsIDB4MTEsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzYsIDB4NzQsCisgIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGMsIDB4ZTUsIDB4MzYsCisgIDB4YzMsIDB4OTUsIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NmIsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTYsIDB4ZTUsCisgIDB4MzYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NmIsIDB4MTUsIDB4MzYsIDB4MTUsIDB4MzYsIDB4MDUsIDB4MmJ9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDQzLCAweDMzLCAweDAxLCAweDAyLCAweDA1LCAweDZiLCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDM2LCAweGYwLCAweDc1LCAweDM2LCAweDAwLCAweGMyLCAweDAxLAorICAweDAyLCAweDA1LCAweDZiLCAweDIwLCAweDExLCAweDI3LCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDBkLCAweDRkLCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDAwLAorICAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweDgwLCAweDNhLCAweDg1LCAweDk5fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NCwgMHgwNCwgMHhkMiwgMHgwNiwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0MywgMHgwNCwgMHhjMiwgMHgwNiwKKyAgMHg4MCwgMHgyNSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywKKyAgMHhlNSwgMHgxMCwgMHhmMCwgMHgzMCwgMHgwZCwgMHgxMSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHhkMiwgMHgwYywgMHhlNSwgMHgzNiwgMHhjMywgMHg5NSwgMHg0MCwgMHg0MH19LAorIHsweDA1NDYsIDY0LCB7IDB4MjQsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTIsIDB4ZTUsIDB4MzYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTYsIDB4MTUsIDB4MzYsCisgIDB4MTUsIDB4MzYsIDB4MDUsIDB4MmIsIDB4NDMsIDB4MzMsIDB4MDEsIDB4ODAsIDB4MGIsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4NzUsCisgIDB4MzYsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4ZDIsIDB4MTIsIDB4MzAsIDB4MTIsIDB4MDUsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDAsIDB4NTYsIDB4ZDAsIDB4ZDAsCisgIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsIDB4ZTF9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDAzLCAweDAyLCAweDA2LCAweGFiLCAweGU0LCAweGY1LCAweDEzLCAweDc0LCAweDQwLCAweDI1LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LAorICAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDEzLCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDM4LCAweGY5LCAweGVjLCAweDM0LCAweDAwLCAweGZhLAorICAweGVmLCAweDEyLCAweDBkLCAweDMzLCAweDA1LCAweDEzLCAweGU1LCAweDEzLCAweGI0LCAweDE4LCAweGRiLCAweGU1LCAweDM4LCAweDYwLCAweDBjLCAweDc1LAorICAweGM5LCAweDIwLCAweDc1LCAweGM4LCAweDM0LCAweDg1LCAweDM5LCAweGNhLCAweDg1LCAweDNhLCAweGNiLCAweGU1LCAweDNiLCAweDEzLCAweDkyfX0sCisgezB4MDVjNiwgNjQsIHsgMHgwZCwgMHg5MiwgMHg5ZiwgMHhlNSwgMHgzYywgMHgxMywgMHg5MiwgMHgwZSwgMHhlNSwgMHgzZCwgMHgxMywgMHg5MiwgMHgxMSwgMHhlNSwgMHgzZSwgMHg2MCwgMHgwOSwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwKKyAgMHhlNSwgMHgzZiwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg0NSwgMHg2MCwgMHgwYiwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwNiwgMHg5MCwgMHg3ZiwgMHg5NX19LAorIHsweDA2MDYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NDYsIDB4NjAsIDB4MGMsIDB4ZDIsIDB4MDYsIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsCisgIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDgsIDB4ZDIsIDB4MDAsIDB4ZTQsIDB4ZjUsIDB4NTAsCisgIDB4ZjUsIDB4MzcsIDB4ZDIsIDB4YWYsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4MDUsIDB4MzAsIDB4MTEsIDB4MDIsIDB4ZDIsIDB4MDYsIDB4ZTUsIDB4NDksIDB4NjAsCisgIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDRhLCAweDYwLCAweDBhLCAweGQyLCAweDljLCAweGMyLCAweDk4LCAweDc1LCAweDJjLAorICAweDAxLCAweDc1LCAweDMxLCAweDFlLCAweGU1LCAweDRiLCAweDYwLCAweDA3LCAweGMyLCAweDljLCAweGU0LCAweGY1LCAweDM2LCAweGY1LCAweDJjLCAweGU1LAorICAweDRjLCAweDYwLCAweDAzLCAweGU0LCAweGY1LCAweDM2LCAweGU1LCAweDRkLCAweDYwLCAweDAyLCAweGQyLCAweDA0LCAweGU1LCAweDRlLCAweDYwLCAweDBhLAorICAweGU1LCAweDRhLCAweDcwLCAweDAyLCAweGY1LCAweDMxLCAweGU1LCAweDRlLCAweDQyLCAweDMzLCAweGU1LCAweDRmLCAweDYwLCAweDFmLCAweDkwfX0sCisgezB4MDY4NiwgNjQsIHsgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3NCwgMHgzMiwgMHhmMCwgMHg3NCwgMHgxMywgMHhmMCwKKyAgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NCwgMHgzNCwgMHhmMCwgMHhkMiwgMHgwMiwgMHhkMiwgMHgwMSwgMHhkMiwgMHgwNSwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHhhMiwgMHgwOSwgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgyOSwgMHg2MCwgMHgwNSwgMHg4ZiwgMHgyOSwgMHg0MywKKyAgMHgzMywgMHgwMSwgMHhhMiwgMHgwNiwgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4ZiwgMHgyYSwgMHg0MywgMHgzM319LAorIHsweDA2YzYsIDY0LCB7IDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4MDgsIDB4YjUsIDB4MjUsIDB4MGEsIDB4ZTAsIDB4NTQsIDB4MDgsIDB4NjQsIDB4MDgsIDB4ZjUsIDB4MjUsCisgIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4YjUsIDB4MjYsIDB4MGEsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4NjQsCisgIDB4MTAsIDB4ZjUsIDB4MjYsIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4YjUsIDB4MjcsIDB4MGEsIDB4ZTAsCisgIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsIDB4ZjUsIDB4MjcsIDB4NDMsIDB4MzMsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4MjB9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGI1LCAweDI4LCAweDBhLCAweGUwLCAweDU0LCAweDIwLCAweDY0LCAweDIwLCAweGY1LCAweDI4LCAweDQzLCAweDMzLCAweDAxLCAweDMwLCAweDA0LCAweDM1LCAweGMyLAorICAweGFmLCAweDMwLCAweDAxLCAweDE4LCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDI3LCAweGU1LCAweDM2LCAweDYwLCAweDA5LCAweDkwLAorICAweDdmLCAweGI3LCAweGYwLCAweGU0LCAweGY1LCAweDM2LCAweGMyLCAweDAxLCAweGMyLCAweDA0LCAweDgwLCAweDE2LCAweDkwLCAweDdmLCAweGI2LCAweGUwLAorICAweDIwLCAweGUxLCAweDBmLCAweGU1LCAweDM2LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweGU0LCAweGY1LCAweDM2LCAweGQyfX0sCisgezB4MDc0NiwgNjQsIHsgMHgwMSwgMHhjMiwgMHgwNCwgMHhkMiwgMHhhZiwgMHgyMCwgMHgwMywgMHgzNywgMHgzMCwgMHgwMiwgMHgxYiwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgyMCwgMHhlMSwKKyAgMHgyZCwgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg3NSwgMHgzNywgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwKKyAgMHg1MCwgMHhkMiwgMHgwMywgMHg4MCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgwYSwgMHg3NSwgMHgzNywgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1MCwgMHhkMiwgMHgwMywgMHgyMH19LAorIHsweDA3ODYsIDY0LCB7IDB4MTAsIDB4MzMsIDB4MjAsIDB4MDAsIDB4MDYsIDB4ZTUsIDB4MzcsIDB4NjUsIDB4NTAsIDB4NzAsIDB4MmEsIDB4MzAsIDB4MDMsIDB4MWEsIDB4MzAsIDB4MDIsIDB4MDksCisgIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4YzIsIDB4MDIsIDB4ODAsIDB4MDcsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDIsCisgIDB4YzIsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ZjUsIDB4MzcsIDB4MzAsIDB4MGEsIDB4MGEsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsCisgIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MTAsIDB4MDMsIDB4MDIsIDB4MDgsIDB4YzUsIDB4MjAsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDh9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGM1LCAweDMwLCAweDBlLCAweDBhLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDAyLCAweDA4LCAweGM1LCAweDMwLCAweDA2LCAweDAzLAorICAweDAyLCAweDA4LCAweGM1LCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDA4LCAweGM1LCAweDMwLCAweDAyLCAweDYyLCAweDMwLCAweDBkLCAweDEyLCAweGFmLAorICAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLAorICAweDE5LCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzfX0sCisgezB4MDgwNiwgNjQsIHsgMHhlMCwgMHhmNSwgMHgxNCwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgyYSwgMHgzMCwgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywKKyAgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywKKyAgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNSwgMHhkMiwKKyAgMHgwOCwgMHg4MCwgMHg2YiwgMHhjMiwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMiwgMHg4MCwgMHg2MCwgMHgzMH19LAorIHsweDA4NDYsIDY0LCB7IDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4MTMsIDB4OTIsIDB4MTksIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MTQsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsCisgIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwODg2LCA2NCwgeyAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LAorICAweDM1LCAweGQyLCAweDA4LCAweDgwLCAweDA5LCAweGMyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGQyLCAweDAyLCAweDMwLCAweDBkLAorICAweDA0LCAweGEyLCAweDE5LCAweDkyLCAweDliLCAweGQyLCAweDEwLCAweGMyLCAweGFmLCAweDg1LCAweDE0LCAweDk5LCAweDIwLCAweDA4LCAweDBkLCAweDMwLAorICAweDBhLCAweDBhLCAweGMyLCAweDBhLCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDkwfX0sCisgezB4MDhjNiwgNjQsIHsgMHg3ZiwgMHhiYywgMHhlMCwgMHgyMCwgMHhlMSwgMHg1MSwgMHhlNSwgMHgzMywgMHg2MCwgMHg0ZCwgMHhlNSwgMHgzMSwgMHg3MCwgMHg0OSwgMHhlNSwgMHgzMywgMHgzMCwKKyAgMHhlMSwgMHgwOCwgMHhlNCwgMHhmNSwgMHgyZiwgMHg3NSwgMHgzMywgMHgwMSwgMHg4MCwgMHgwYiwgMHhhMiwgMHgwNSwgMHhlNCwgMHgzMywgMHhmNSwgMHgyZiwKKyAgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHgzMywgMHhlNCwgMHhmNSwgMHgxMywgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxMywKKyAgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwYywgMHhlZCwgMHhmZiwgMHg3NCwgMHgwMCwgMHgyNSwgMHgxMywgMHhmNSwgMHg4Mn19LAorIHsweDA5MDYsIDY0LCB7IDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTMsIDB4ZTUsIDB4MTMsIDB4YjQsIDB4MGMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YmQsCisgIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4MzEsIDB4MTAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGQsIDB4NDUsIDB4MGEsIDB4MDMsCisgIDB4MDAsIDB4MGEsIDB4NzcsIDB4MDEsIDB4MGEsIDB4ZTMsIDB4MDMsIDB4MDksIDB4NDEsIDB4MDYsIDB4MDksIDB4ZjQsIDB4MDgsIDB4MDksIDB4ZTgsIDB4MDksCisgIDB4MDksIDB4ZDAsIDB4MGEsIDB4MDksIDB4ZGYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzIsIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsIDB4MjR9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLCAweDU3LCAweDI0LCAweDAyLCAweDcwLCAweDc2LCAweDc0LCAweDBmLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LAorICAweDY0LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLAorICAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweGI1LCAweDc1LCAweDgzLCAweDBmLCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweGFlLCAweDc1LAorICAweDgzLCAweDBmLCAweGYwLCAweDc1LCAweDgyLCAweGE3LCAweDc1LCAweDgzLCAweDBmLCAweGYwLCAweDc1LCAweDgyLCAweGEwLCAweDc1LCAweDgzfX0sCisgezB4MDk4NiwgNjQsIHsgMHgwZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgwZiwgMHhmMCwgMHg3NCwgMHgwZiwgMHg5MCwKKyAgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHg3NiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwKKyAgMHhmZiwgMHgxMiwgMHgwZSwgMHg0OCwgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwKKyAgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOX19LAorIHsweDA5YzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTksIDB4MDIsIDB4MGIsCisgIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTgsIDB4MTIsIDB4MGQsIDB4NmIsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZTUsIDB4MTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZTh9fSwKKyB7MHgwYTA2LCA2NCwgeyAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyLCAweDEzLCAweGU0LCAweDMzLCAweGZmLAorICAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE3LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwfX0sCisgezB4MGE0NiwgNjQsIHsgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwKKyAgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgzOX19LAorIHsweDBhODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MTMsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmZ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLAorICAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLAorICAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLAorICAweDEzLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhfX0sCisgezB4MGIwNiwgNjQsIHsgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwKKyAgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwgMHgyMCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwYn19LAorIHsweDBiNDYsIDY0LCB7IDB4ZDMsIDB4ZTUsIDB4MzEsIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzEsIDB4ZTUsIDB4MzYsIDB4NjAsIDB4NGYsIDB4NjUsIDB4MzQsIDB4NzAsIDB4NDUsIDB4ZTUsIDB4MzIsCisgIDB4ZjQsIDB4NjAsIDB4MDIsIDB4MDUsIDB4MzIsIDB4ZTUsIDB4MzIsIDB4YzMsIDB4OTUsIDB4NDEsIDB4NDAsIDB4M2QsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsCisgIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4YzIsIDB4MDEsCisgIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MzIsIDB4ZjUsIDB4MzQsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjAsIDB4ZTF9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDBmLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDM2LCAweGYwLCAweGQyLCAweDAxLCAweGU0LCAweGY1LCAweDM2LCAweGY1LCAweDMyLCAweGY1LCAweDM0LCAweGQyLAorICAweGFmLCAweDgwLCAweDA2LCAweDg1LCAweDM2LCAweDM0LCAweGU0LCAweGY1LCAweDMyLCAweGU1LCAweDJjLCAweDYwLCAweDJmLCAweDIwLCAweDBjLCAweDA3LAorICAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUwLCAweDBmLCAweGU1LCAweDJkLCAweDYwLCAweDA2LCAweGU0LCAweGY1LCAweDJkLCAweDQzLCAweDMzLAorICAweDAxLCAweGU0LCAweGY1LCAweDMwLCAweDgwLCAweDE0LCAweGU1LCAweDMwLCAweGQzLCAweDk1LCAweDQyLCAweDUwLCAweDBkLCAweGU1LCAweDMwfX0sCisgezB4MGJjNiwgNjQsIHsgMHhiNSwgMHg0MiwgMHgwNiwgMHg3NSwgMHgyZCwgMHgwMSwgMHg0MywgMHgzMywgMHgwMSwgMHgwNSwgMHgzMCwgMHhjMiwgMHgwYywgMHgyMiwgMHg3NSwgMHgxMiwgMHgwMSwKKyAgMHhjMiwgMHgxNCwgMHhjMiwgMHgxOCwgMHhjMiwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxNSwgMHhjMiwgMHgxMiwgMHhkMiwgMHgxNiwgMHhlNCwgMHhmNSwKKyAgMHgxOCwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHhmZiwgMHhkMywgMHg5MiwgMHgxMywKKyAgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NH19LAorIHsweDBjMDYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsCisgIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YmMsIDB4ZDIsIDB4MTksIDB4MTIsIDB4MGUsIDB4ZGEsIDB4YzIsIDB4MTQsIDB4MzAsCisgIDB4MTUsIDB4MDMsIDB4MTIsIDB4MDUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTEsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4ZjV9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDExLCAweDEyLCAweDBiLCAweDQxLCAweDgwLCAweGVhLCAweDMwLCAweDE0LCAweDA3LCAweGMyLCAweDE0LCAweDEyLCAweDA5LCAweDFlLCAweDgwLCAweGUwLCAweDMwLAorICAweDE4LCAweGRkLCAweGMyLCAweDE4LCAweDEyLCAweDAwLCAweDI2LCAweDgwLCAweGQ2LCAweDIyLCAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLAorICAweDc1LCAweDgxLCAweDUwLCAweDAyLCAweDBjLCAweGE4LCAweDAyLCAweDBiLCAweGQ0LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLAorICAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4fX0sCisgezB4MGM4NiwgNjQsIHsgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwKKyAgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKyAgMHg4MCwgMHg5MCwgMHgwZSwgMHgwNCwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwKKyAgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMH19LAorIHsweDBjYzYsIDY0LCB7IDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsCisgIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsCisgIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsCisgIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjJ9fSwKKyB7MHgwZDA2LCA2NCwgeyAweGJiLCAweDAxLCAweDBjLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LAorICAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LAorICAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LAorICAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwfX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwKKyAgMHg3NCwgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywKKyAgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NiwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHgwNH19LAorIHsweDBkODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsCisgIDB4ODQsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsIDB4NDMsIDB4YTgsIDB4MTAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MWYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4ZGYsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLAorICAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDIwLCAweGYwLAorICAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweGZkLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LAorICAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDIyLCAweDBjLCAweDI0fX0sCisgezB4MGUwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwMSwgMHgzMywKKyAgMHgwMSwgMHgwMSwgMHgzMiwgMHgwMCwgMHgwMSwgMHgzNywgMHgwMCwgMHgwMSwgMHg1MCwgMHgwMCwgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMSwgMHgzNCwgMHgwMCwKKyAgMHhjMSwgMHgwNSwgMHhjMSwgMHgwYywgMHhjMSwgMHgwMywgMHhjMSwgMHgwZiwgMHhjMSwgMHgwNCwgMHhjMSwgMHgwZSwgMHhjMSwgMHgxMSwgMHhjMSwgMHgwYSwKKyAgMHhjMSwgMHgxMCwgMHhjMSwgMHgwOCwgMHhjMSwgMHgwOSwgMHhjMSwgMHgwNiwgMHhjMSwgMHgwMCwgMHhjMSwgMHgwZCwgMHhjMSwgMHg4MSwgMHhjMX19LAorIHsweDBlNDYsIDY0LCB7IDB4ODIsIDB4MDAsIDB4OGYsIDB4MTMsIDB4ZTQsIDB4ZjUsIDB4MTQsIDB4NzUsIDB4MTUsIDB4ZmYsIDB4NzUsIDB4MTYsIDB4MGYsIDB4NzUsIDB4MTcsIDB4YjksIDB4YWIsCisgIDB4MTUsIDB4YWEsIDB4MTYsIDB4YTksIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGQsIDB4MDYsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MTQsCisgIDB4MDUsIDB4MTQsIDB4ZWYsIDB4YjUsIDB4MTMsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGMsIDB4ZWQsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsCisgIDB4YTksIDB4MDcsIDB4NzUsIDB4MTUsIDB4ZmYsIDB4ZjUsIDB4MTYsIDB4ODksIDB4MTcsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDc5LCAweDAwLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LAorICAweDAwLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLAorICAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLAorICAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE0LCAweDUzLCAweDkxfX0sCisgezB4MGVjNiwgNjQsIHsgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywKKyAgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxOSwKKyAgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwKKyAgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHgwMCwgMHgwMiwgMHgwZSwgMHhiMywgMHgwMCwgMHgwMiwgMHgwZn19LAorIHsweDBmMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ODksIDB4MDAsIDB4MDIsIDB4MGYsIDB4MGYsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsCisgIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsCisgIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4NzQsCisgIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4Zjl9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLAorICAweDAxLCAweGZmLCAweDAwLCAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDA3LCAweDAxLCAweDAxLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LAorICAweDAyLCAweDQzLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDA3LCAweGZmLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywKKyAgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMSwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgxMCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3M319LAorIHsweDBmYzYsIDIzLCB7IDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MGUsIDB4MDMsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsCisgIDB4NjEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cWlfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cWlfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI2NDcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxaV9mdy5oCkBAIC0wLDAgKzEsMjg0IEBACisvKiBrZXlzcGFuX3VzYTE5cWlfZncuaAorIAorCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwbl91c2ExOXFpX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTlxaV9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MWF9fSwKKyB7MHgwMDFhLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDAwMywgMTYsIHsgMHg4ZSwgMHgxMSwgMHg4ZiwgMHgxMiwgMHhlNSwgMHgxMiwgMHgxNSwgMHgxMiwgMHhhZSwgMHgxMSwgMHg3MCwgMHgwMiwgMHgxNSwgMHgxMSwgMHg0ZSwgMHg2MH19LAorIHsweDAwMTMsICA3LCB7IDB4MDUsIDB4MTIsIDB4MGYsIDB4ODQsIDB4ODAsIDB4ZWUsIDB4MjJ9fSwKKyB7MHgwMDIzLCAgMywgeyAweDAyLCAweDAwLCAweDQ2fX0sCisgezB4MDA0NiwgMTYsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOH19LAorIHsweDAwNTYsIDE2LCB7IDB4MzAsIDB4OTksIDB4MGUsIDB4MzAsIDB4MGIsIDB4MDcsIDB4YTIsIDB4MGUsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MzYsIDB4OTksIDB4YzIsIDB4OTksIDB4ZDJ9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDEyLCAweDIwLCAweDEyLCAweDAzLCAweDAyLCAweDA0LCAweDFlLCAweGMyLCAweDEyLCAweDIwLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDRlLCAweDIwfX0sCisgezB4MDA3NiwgMTYsIHsgMHgwYiwgMHgwMywgMHgwMiwgMHgwMSwgMHgyNiwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgzYywgMHgyMCwgMHgwYywgMHgzNCwgMHgyMH19LAorIHsweDAwODYsIDE2LCB7IDB4MDksIDB4MzEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MjksIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDV9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmfX0sCisgezB4MDBhNiwgMTYsIHsgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNn19LAorIHsweDAwYjYsIDE2LCB7IDB4MDIsIDB4MDQsIDB4MWMsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MWMsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsIDB4MzB9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDBkLCAweDBjLCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweGMyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1M319LAorIHsweDAwZTYsIDE2LCB7IDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTYsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4MmIsIDB4MjAsIDB4MDksIDB4Mjh9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDIwLCAweDMwLCAweDEwLCAweDExLCAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MDAsIDB4MjZ9fSwKKyB7MHgwMDI2LCAxMiwgeyAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDU0LCAweDAyLCAweDBiLCAweDI4fX0sCisgezB4MDEwNiwgNjQsIHsgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzNiwgMHg3NSwgMHgzYSwgMHgwMywgMHgwMiwgMHgwNCwgMHgxYywgMHg3NSwgMHgzYSwgMHgwMiwgMHg5MCwgMHg3ZCwKKyAgMHhjMSwgMHhlMCwgMHhmNSwgMHgzNiwgMHgwMiwgMHgwNCwgMHgxYywgMHg3NSwgMHgzYSwgMHgwMSwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHhlNSwKKyAgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgwMywgMHgwMiwgMHgwMSwgMHhjOSwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNywKKyAgMHhjMiwgMHgxNCwgMHhjMiwgMHgwNSwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwgMHg1MywgMHg5MCwgMHg3ZX19LAorIHsweDAxNDYsIDY0LCB7IDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTYsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4NzAsIDB4MjAsIDB4MDksIDB4NmQsIDB4OTAsIDB4N2YsIDB4OWIsCisgIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4NjUsIDB4MzAsIDB4MTAsIDB4MTAsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YTMsCisgIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4M2EsIDB4MDMsIDB4ODAsIDB4MDksIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4M2EsCisgIDB4MDIsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDN9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDIwLCAweDBkLCAweDAzLCAweDAyLCAweDA0LCAweDFjLCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDFjLCAweDMwLAorICAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLAorICAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweGQyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweDc1LCAweDNhLCAweDAxLCAweGMyLCAweDE0fX0sCisgezB4MDFjNiwgNjQsIHsgMHgwMiwgMHgwNCwgMHgxYywgMHgzMCwgMHgwYywgMHgwMywgMHgwMiwgMHgwMiwgMHg0OSwgMHgyMCwgMHgwOSwgMHg3NywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwKKyAgMHgzOCwgMHg3MCwgMHg2ZiwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg5OSwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg0MH19LAorIHsweDAyMDYsIDY0LCB7IDB4MTcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MWMsIDB4YzIsIDB4MGQsIDB4OTAsCisgIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MWMsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsCisgIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4ZDIsIDB4MGJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDAyLCAweDA0LCAweDFjLCAweGMyLCAweDE0LCAweDAyLCAweDA0LCAweDFjLCAweDIwLCAweDBiLCAweDAzLCAweDAyLCAweDAyLCAweGZmLCAweGU1LCAweDNhLCAweGMzLAorICAweDk1LCAweDUzLCAweDUwLCAweDNjLCAweDIwLCAweDBjLCAweDM0LCAweDIwLCAweDA5LCAweDMxLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LAorICAweDcwLCAweDI5LCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1fX0sCisgezB4MDI4NiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHgwMiwgMHgwNCwgMHgxYywgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywKKyAgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMywgMHgzMCwgMHgwZCwgMHgwYywgMHhjMiwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwKKyAgMHhmMCwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgwYiwgMHgwMiwKKyAgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwgMHg1MywgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZH19LAorIHsweDAyYzYsIDY0LCB7IDB4NzUsIDB4MTYsIDB4ZmYsIDB4MjAsIDB4MGMsIDB4MmIsIDB4MjAsIDB4MDksIDB4MjgsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MjAsCisgIDB4MzAsIDB4MTAsIDB4MTEsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4NzUsIDB4M2EsCisgIDB4MDMsIDB4MDIsIDB4MDQsIDB4MWMsIDB4NzUsIDB4M2EsIDB4MDIsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4MDIsIDB4MDQsIDB4MWMsCisgIDB4NzUsIDB4M2EsIDB4MDEsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MWMsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NTAsIDB4MDN9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDAyLCAweDAzLCAweGEyLCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDMwLCAweGUxLCAweDA3LCAweGMyLCAweDE0LCAweGMyLCAweDA1LCAweDAyLCAweDA0LCAweDFjLAorICAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUzLCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDE2LCAweGZmLAorICAweDIwLCAweDBjLCAweDcwLCAweDIwLCAweDA5LCAweDZkLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDY1LCAweDMwLCAweDEwLAorICAweDEwLCAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGEzLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDNhLCAweDAzfX0sCisgezB4MDM0NiwgNjQsIHsgMHg4MCwgMHgwOSwgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzYSwgMHgwMiwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg0MCwKKyAgMHgxNywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMywgMHgyMCwgMHgwZCwgMHgwMywgMHgwMiwgMHgwNCwgMHgxYywgMHhjMiwgMHgwZCwKKyAgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgxYywgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwKKyAgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYX19LAorIHsweDAzODYsIDY0LCB7IDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4ZDIsIDB4MGIsCisgIDB4MDIsIDB4MDQsIDB4MWMsIDB4NzUsIDB4M2EsIDB4MDEsIDB4YzIsIDB4MTQsIDB4MDIsIDB4MDQsIDB4MWMsIDB4MjAsIDB4MGMsIDB4NzUsIDB4MjAsIDB4MDksCisgIDB4NzIsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4NmEsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsCisgIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YWZ9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDk5LCAweGU1LAorICAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDQwLCAweDEzLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAzLCAweDMwLCAweDBkLCAweDM1LAorICAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweDgwLCAweDJjLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLAorICAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmfX0sCisgezB4MDQwNiwgNjQsIHsgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHhkMiwKKyAgMHgwYiwgMHg4MCwgMHgwMiwgMHhjMiwgMHgxNCwgMHhkMiwgMHgwMSwgMHgyMCwgMHg5OCwgMHgwMywgMHgwMiwgMHgwNSwgMHg1YSwgMHhjMiwgMHg5OCwgMHgyMCwKKyAgMHgwMiwgMHgwMywgMHgwMiwgMHgwNCwgMHhjNywgMHgyMCwgMHgxNiwgMHgyNywgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxMCwgMHg0ZCwgMHhhZiwgMHgzOSwgMHgwNX19LAorIHsweDA0NDYsIDY0LCB7IDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ODAsIDB4M2EsIDB4ODUsCisgIDB4OTksIDB4MTAsIDB4ZTUsIDB4MTAsIDB4YjUsIDB4NDcsIDB4MDQsIDB4ZDIsIDB4MDksIDB4ODAsIDB4MmUsIDB4ZTUsIDB4MTAsIDB4YjUsIDB4NDYsIDB4MDQsCisgIDB4YzIsIDB4MDksIDB4ODAsIDB4MjUsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsCisgIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MTAsIDB4ZjAsIDB4MzAsIDB4MTAsIDB4MTEsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4ODAsIDB4MmZ9fSwKKyB7MHgwNDg2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDBmLCAweGU1LCAweDM5LCAweGMzLCAweDk1LCAweDQzLAorICAweDUwLCAweDAzLCAweDAyLCAweDA1LCAweDU4LCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDMwLCAweGUxLCAweDE2LCAweGU1LCAweDM5LCAweGMzLCAweDk0LAorICAweDQwLCAweDUwLCAweDAzLCAweDAyLCAweDA1LCAweDU4LCAweDE1LCAweDM5LCAweDE1LCAweDM5LCAweDA1LCAweDJiLCAweDQzLCAweDM0LCAweDAxLCAweDAyLAorICAweDA1LCAweDU4LCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDM5LCAweGYwLCAweDc1LCAweDM5LCAweDAwLCAweGMyLCAweDAyLCAweDAyLCAweDA1fX0sCisgezB4MDRjNiwgNjQsIHsgMHg1OCwgMHgyMCwgMHgxNiwgMHgyNywgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwKKyAgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxMCwgMHg0ZCwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwgMHg5OSwgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwKKyAgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NiwgMHgwNCwgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNX19LAorIHsweDA1MDYsIDY0LCB7IDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MTAsIDB4ZjAsCisgIDB4MzAsIDB4MTAsIDB4MTEsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsCisgIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsIDB4NDAsIDB4MjQsIDB4OTAsIDB4N2YsIDB4YjYsCisgIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTIsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTYsIDB4MTUsIDB4MzksIDB4MTUsIDB4Mzl9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweDA1LCAweDJiLCAweDQzLCAweDM0LCAweDAxLCAweDgwLCAweDBiLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDM5LCAweGYwLCAweDc1LCAweDM5LCAweDAwLCAweGQyLAorICAweDAyLCAweGQyLCAweDAxLCAweDMwLCAweDAxLCAweDA1LCAweGMyLCAweDAxLCAweDAyLCAweDAwLCAweDU2LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLAorICAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweDIwLCAweGUxLCAweDUxLCAweGU1LCAweDM0LCAweDYwLAorICAweDRkLCAweGU1LCAweDMxLCAweDcwLCAweDQ5LCAweGU1LCAweDM0LCAweDMwLCAweGUxLCAweDA4LCAweGU0LCAweGY1LCAweDJmLCAweDc1LCAweDM0fX0sCisgezB4MDU4NiwgNjQsIHsgMHgwMSwgMHg4MCwgMHgwYiwgMHhhMiwgMHgwOCwgMHhlNCwgMHgzMywgMHhmNSwgMHgyZiwgMHhjMiwgMHgwOCwgMHhlNCwgMHhmNSwgMHgzNCwgMHhlNCwgMHhmNSwgMHgxMSwKKyAgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxMSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZCwgMHgwNiwKKyAgMHhmZiwgMHg3NCwgMHgwMCwgMHgyNSwgMHgxMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxMSwKKyAgMHhlNSwgMHgxMSwgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHgzMSwgMHgxMCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDYsIDB4ZjMsIDB4ZTQsIDB4ZjUsIDB4MTEsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTEsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTEsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MjQsIDB4M2IsCisgIDB4ZjksIDB4ZWMsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGQsIDB4MWYsIDB4MDUsIDB4MTEsIDB4ZTUsIDB4MTEsIDB4YjQsIDB4MTgsIDB4ZGIsCisgIDB4ZTUsIDB4M2IsIDB4NjAsIDB4MTEsIDB4NzUsIDB4YzksIDB4MjAsIDB4NzUsIDB4YzgsIDB4MzYsIDB4ODUsIDB4M2MsIDB4Y2EsIDB4ODUsIDB4M2R9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGNiLCAweGU0LCAweDkwLCAweDdmLCAweDlmLCAweGYwLCAweGU1LCAweDNlLCAweDEzLCAweDkyLCAweDEwLCAweDkyLCAweDlmLCAweDg1LCAweDNmLCAweDM4LCAweGU1LAorICAweDQwLCAweDEzLCAweDkyLCAweDE2LCAweGU1LCAweDQxLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLAorICAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDQyLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLAorICAweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDQ4LCAweDYwfX0sCisgezB4MDY0NiwgNjQsIHsgMHgwYiwgMHhjMiwgMHgwYywgMHhjMiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg0OSwgMHg2MCwgMHgwYywgMHhkMiwKKyAgMHgwOSwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg0YSwgMHg2MCwgMHgwZCwgMHhjMiwKKyAgMHhhZiwgMHhjMiwgMHgwYiwgMHhkMiwgMHgwMCwgMHhlNCwgMHhmNSwgMHg1MywgMHhmNSwgMHgzYSwgMHhkMiwgMHhhZiwgMHhlNSwgMHg0YiwgMHg2MCwgMHgwNSwKKyAgMHgzMCwgMHgxNiwgMHgwMiwgMHhkMiwgMHgwOSwgMHhlNSwgMHg0YywgMHg2MCwgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZH19LAorIHsweDA2ODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4NGQsCisgIDB4NjAsIDB4MGEsIDB4ZDIsIDB4OWMsIDB4YzIsIDB4OTgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4NzUsIDB4MzEsIDB4MWUsIDB4ZTUsIDB4NGUsIDB4NjAsIDB4MDcsCisgIDB4YzIsIDB4OWMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MmMsIDB4ZTUsIDB4NGYsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZTUsIDB4NTAsCisgIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MDcsIDB4ZTUsIDB4NTEsIDB4NjAsIDB4MGEsIDB4ZTUsIDB4NGQsIDB4NzAsIDB4MDIsIDB4ZjUsIDB4MzEsIDB4ZTV9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDUxLCAweDQyLCAweDM0LCAweGU1LCAweDUyLCAweDYwLCAweDFmLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LAorICAweDEyLCAweGYwLCAweDc0LCAweDMyLCAweGYwLCAweDc0LCAweDEzLCAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE0LCAweGYwLCAweDc0LCAweDM0LAorICAweGYwLCAweGQyLCAweDAzLCAweGQyLCAweDAyLCAweGQyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGEyLCAweDBjLCAweGU0LCAweDMzLAorICAweGZmLCAweDY1LCAweDI5LCAweDYwLCAweDA1LCAweDhmLCAweDI5LCAweDQzLCAweDM0LCAweDAxLCAweGEyLCAweDA5LCAweGU0LCAweDMzLCAweGZmfX0sCisgezB4MDcwNiwgNjQsIHsgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4ZiwgMHgyYSwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHhmZiwgMHg1NCwgMHgwOCwgMHg2NCwKKyAgMHgwOCwgMHhmZSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyNSwgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHgxMCwgMHg2NCwgMHgxMCwKKyAgMHhmZSwgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyNiwgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmZSwKKyAgMHg2NSwgMHgyNywgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyNywgMHg0MywgMHgzNCwgMHgwMSwgMHhlZiwgMHg1NCwgMHgyMCwgMHg2NCwgMHgyMCwgMHhmZX19LAorIHsweDA3NDYsIDY0LCB7IDB4NjUsIDB4MjgsIDB4NjAsIDB4MDUsIDB4OGUsIDB4MjgsIDB4NDMsIDB4MzQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsCisgIDB4ZmUsIDB4NjUsIDB4MmUsIDB4NjAsIDB4MDUsIDB4OGUsIDB4MmUsIDB4NDMsIDB4MzQsIDB4MDEsIDB4MzAsIDB4MDcsIDB4MzUsIDB4YzIsIDB4YWYsIDB4MzAsCisgIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjcsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDcsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjB9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGUxLCAweDBmLCAweGU1LCAweDM5LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweGU0LCAweGY1LCAweDM5LCAweGQyLCAweDAyLCAweGMyLCAweDA3LAorICAweGQyLCAweGFmLCAweDIwLCAweDA1LCAweDNkLCAweDMwLCAweDAzLCAweDFlLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDMzLCAweDkwLAorICAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLCAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUzLCAweGQyLAorICAweDA1LCAweDc1LCAweDE2LCAweGZmLCAweDgwLCAweDFjLCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDE1LCAweDkwLCAweDdkfX0sCisgezB4MDdjNiwgNjQsIHsgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgzYSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1MywgMHhkMiwgMHgwNSwgMHg3NSwKKyAgMHgxNiwgMHhmZiwgMHgyMCwgMHgxNCwgMHgzMywgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHgzYSwgMHg2NSwgMHg1MywgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNSwKKyAgMHgxYSwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHg1MywgMHhmNSwgMHgzYSwgMHgzMCwgMHgwZCwgMHgwYSwgMHhjMn19LAorIHsweDA4MDYsIDY0LCB7IDB4MGQsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MjAsIDB4MDUsCisgIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MzAsIDB4MGMsIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsCisgIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDksIDB4MTQsIDB4MzAsIDB4MDMsIDB4NjEsIDB4MzAsIDB4MTAsCisgIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwODQ2LCA2NCwgeyAweGUwLCAweDEzLCAweDkyLCAweDFiLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LAorICAweDgzLCAweGUwLCAweGZlLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDJhLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LAorICAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLAorICAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1fX0sCisgezB4MDg4NiwgNjQsIHsgMHgzNiwgMHhkMiwgMHgwYiwgMHg4MCwgMHg2YSwgMHhjMiwgMHgwYiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHg1ZiwgMHgzMCwKKyAgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgxYiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgyYSwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZn19LAorIHsweDA4YzYsIDY0LCB7IDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsCisgIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsCisgIDB4MzYsIDB4ZDIsIDB4MGIsIDB4ODAsIDB4MDksIDB4YzIsIDB4MGIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4MzAsIDB4MTAsCisgIDB4MDQsIDB4YTIsIDB4MWIsIDB4OTIsIDB4OWIsIDB4ZDIsIDB4MTQsIDB4YzIsIDB4YWYsIDB4OGUsIDB4OTksIDB4MjAsIDB4MGIsIDB4MGQsIDB4MzB9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDBkLCAweDBhLCAweGMyLCAweDBkLCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLAorICAweGU5LCAweGUwLCAweDEyLCAweDBkLCAweDMxLCAweDBhLCAweDExLCAweDAwLCAweDBhLCAweDdlLCAweDAxLCAweDBhLCAweGRiLCAweDAzLCAweDA5LCAweDM4LAorICAweDA2LCAweDBhLCAweDAyLCAweDA4LCAweDA5LCAweGY2LCAweDA5LCAweDA5LCAweGRlLCAweDBhLCAweDA5LCAweGVkLCAweDBiLCAweDAwLCAweDAwLCAweDBiLAorICAweDE5LCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDE0LCAweDYwLCAweDVhLCAweDI0LCAweDAyLCAweDYwfX0sCisgezB4MDk0NiwgNjQsIHsgMHgwMywgMHgwMiwgMHgwYiwgMHgxOSwgMHg3NCwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHg4NywgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwKKyAgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwKKyAgMHhkOCwgMHg3NSwgMHg4MywgMHgwZCwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHhkMSwgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg3NSwgMHg4MiwgMHhjYSwKKyAgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg3NSwgMHg4MiwgMHhjMywgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH19LAorIHsweDA5ODYsIDY0LCB7IDB4MDQsIDB4NzUsIDB4ODIsIDB4OWUsIDB4NzUsIDB4ODMsIDB4MGQsIDB4ZjAsIDB4NzQsIDB4MGQsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4OTksIDB4OTAsCisgIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MGIsIDB4NzUsIDB4MTEsIDB4ZmYsIDB4NzUsCisgIDB4MTIsIDB4MGQsIDB4NzUsIDB4MTMsIDB4ZGMsIDB4ODAsIDB4MWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MGIsIDB4NzUsIDB4MTEsCisgIDB4ZmYsIDB4NzUsIDB4MTIsIDB4MGQsIDB4NzUsIDB4MTMsIDB4ZTAsIDB4ODAsIDB4MDksIDB4NzUsIDB4MTEsIDB4ZmYsIDB4NzUsIDB4MTIsIDB4MGR9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDc1LCAweDEzLCAweGYwLCAweGFhLCAweDEyLCAweGE5LCAweDEzLCAweGFlLCAweDAyLCAweGVlLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGFmLCAweDAxLCAweGVmLAorICAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDE1LCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDE1LCAweDAyLCAweDBiLCAweDIwLCAweDEyLAorICAweDBjLCAweGIxLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDE0LCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweDAwLCAweGU1fX0sCisgezB4MGEwNiwgNjQsIHsgMHgxNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwKKyAgMHg2MCwgMHgyNywgMHgxNCwgMHg2MCwgMHgzNCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgxOSwgMHhhMiwgMHgxNywgMHhlNCwgMHgzMywKKyAgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxOSwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhM319LAorIHsweDBhNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsCisgIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTd9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBiLAorICAweDE5LCAweGMyLCAweDE3LCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDc2LCAweDkwLCAweDdmLCAweGVjLCAweGUwLAorICAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LAorICAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwfX0sCisgezB4MGFjNiwgNjQsIHsgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwKKyAgMHgyMCwgMHhmMCwgMHg4MCwgMHg0NSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxMCwgMHgyNCwgMHgwMiwgMHg3MCwgMHgzOSwKKyAgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg2NCwgMHgwMSwgMHg3MCwgMHgyYSwgMHhkMiwgMHgxNywgMHg4MCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwKKyAgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMH19LAorIHsweDBiMDYsIDY0LCB7IDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsCisgIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCisgIDB4MjIsIDB4YzIsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MTQsIDB4ZjUsIDB4MzQsIDB4YzIsIDB4MDksIDB4YzIsIDB4MGMsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MTQsCisgIDB4YzIsIDB4MGQsIDB4YzIsIDB4MTYsIDB4YzIsIDB4MTEsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MGYsIDB4YzIsIDB4MDgsIDB4ZjV9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDM1LCAweGY1LCAweDM5LCAweGY1LCAweDUzLCAweGY1LCAweDNhLCAweGY1LCAweDMzLCAweGY1LCAweDMwLCAweGY1LCAweDJmLCAweGY1LCAweDJlLCAweGY1LCAweDJkLAorICAweGY1LCAweDJjLCAweGY1LCAweDJiLCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGY1LCAweDI4LCAweGY1LCAweDI3LCAweGY1LCAweDI2LCAweGY1LCAweDI1LAorICAweGY1LCAweDI0LCAweGMyLCAweDA1LCAweGMyLCAweDE4LCAweGMyLCAweDFhLCAweGMyLCAweDE3LCAweGMyLCAweDE5LCAweGMyLCAweDE1LCAweGMyLCAweDA0LAorICAweGQyLCAweDEzLCAweGMyLCAweDA2LCAweGMyLCAweDAxLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGQyLCAweGU4fX0sCisgezB4MGI4NiwgNjQsIHsgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwKKyAgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwKKyAgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHg3NCwgMHgwZSwKKyAgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhiYywgMHhkMiwgMHgxYiwgMHgxMiwgMHgwZiwgMHg1ZiwgMHhjMiwgMHgxOCwgMHgzMCwgMHgwNCwgMHgwM319LAorIHsweDBiYzYsIDY0LCB7IDB4MTIsIDB4MDUsIDB4NmQsIDB4MzAsIDB4MDQsIDB4MmEsIDB4MzAsIDB4MDYsIDB4MjcsIDB4YzIsIDB4MDYsIDB4ZTUsIDB4MTYsIDB4NjAsIDB4MTYsIDB4MTUsIDB4MTYsCisgIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4MzAsIDB4ZTYsIDB4MDQsIDB4N2YsIDB4MDAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDYsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4MTIsIDB4MGMsIDB4MGIsIDB4ODAsIDB4Y2QsIDB4MzAsCisgIDB4MTgsIDB4MDcsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MDksIDB4MTUsIDB4ODAsIDB4YzMsIDB4MzAsIDB4MWEsIDB4YzAsIDB4YzIsIDB4MWEsIDB4MTJ9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDBmLCAweGJiLCAweDgwLCAweGI5LCAweDIyLCAweGU1LCAweDMxLCAweDYwLCAweDAyLCAweDE1LCAweDMxLCAweGU1LCAweDM5LCAweDYwLCAweDU1LCAweDY1LCAweDM1LAorICAweDcwLCAweDRiLCAweGU1LCAweDMzLCAweGY0LCAweDYwLCAweDAyLCAweDA1LCAweDMzLCAweGU1LCAweDMzLCAweGMzLCAweDk1LCAweDQ0LCAweDQwLCAweDQzLAorICAweGMyLCAweGFmLCAweDMwLCAweDAyLCAweDFiLCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDJkLCAweDkwLCAweDdmLCAweGI3LCAweGU1LAorICAweDM5LCAweGYwLCAweGMyLCAweDAyLCAweGU0LCAweGY1LCAweDM5LCAweGY1LCAweDMzLCAweGY1LCAweDM1LCAweDc1LCAweDE2LCAweGZmLCAweDgwfX0sCisgezB4MGM0NiwgNjQsIHsgMHgxOSwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlNSwgMHgzOSwgMHhmMCwgMHhkMiwgMHgwMiwgMHhlNCwKKyAgMHhmNSwgMHgzOSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNSwgMHg3NSwgMHgxNiwgMHhmZiwgMHhkMiwgMHhhZiwgMHg4MCwgMHgwNiwgMHg4NSwgMHgzOSwgMHgzNSwKKyAgMHhlNCwgMHhmNSwgMHgzMywgMHhlNSwgMHgyYywgMHg2MCwgMHgzMCwgMHgyMCwgMHgwZiwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMCwKKyAgMHgwZiwgMHhlNSwgMHgyZCwgMHg2MCwgMHgwNiwgMHhlNCwgMHhmNSwgMHgyZCwgMHg0MywgMHgzNCwgMHgwMSwgMHhlNCwgMHhmNSwgMHgzMCwgMHg4MH19LAorIHsweDBjODYsIDY0LCB7IDB4MTQsIDB4ZTUsIDB4MzAsIDB4ZDMsIDB4OTUsIDB4NDUsIDB4NTAsIDB4MGQsIDB4ZTUsIDB4MzAsIDB4YjUsIDB4NDUsIDB4MDYsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NDMsCisgIDB4MzQsIDB4MDEsIDB4MDUsIDB4MzAsIDB4YzIsIDB4MGYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDAsCisgIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4NzR9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweDc0LCAweDg2LCAweGYwLCAweDkwLCAweDdmLCAweDk1LAorICAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDg0LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweGM3LCAweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDc1LCAweDk4LCAweDQwLCAweDQzLCAweGE4LCAweDEwLAorICAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDFmLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweDBmLCAweGYwLCAweGQyLCAweDA0LCAweDIyfX0sCisgezB4MGQwNiwgNjQsIHsgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywKKyAgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhmMCwKKyAgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwKKyAgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgMHg5M319LAorIHsweDBkNDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsCisgIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsCisgIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsCisgIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwLCAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDBjLCAweDAxLCAweDAxLCAweDAwLCAweDAxLCAweDAyLAorICAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDQzLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDA3LAorICAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MGRjNiwgNjQsIHsgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwKKyAgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgxMCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwKKyAgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgwZSwgMHgwMywgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwZSwgMHhhMiwgMHgwMCwgMHgwMiwgMHgwZX19LAorIHsweDBlMDYsIDY0LCB7IDB4N2IsIDB4MDAsIDB4MDIsIDB4MGQsIDB4NTcsIDB4MDAsIDB4MDIsIDB4MGUsIDB4YzksIDB4MDAsIDB4MDIsIDB4MGUsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MTQsCisgIDB4MDAsIDB4MDIsIDB4MGUsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MWMsIDB4MDAsIDB4MDIsIDB4MGUsIDB4ZjAsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MjQsCisgIDB4MDAsIDB4MDIsIDB4MGYsIDB4MTUsIDB4MDAsIDB4MDIsIDB4MGUsIDB4MmMsIDB4MDAsIDB4MDIsIDB4MGYsIDB4M2EsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZTAsIDB4NDQsIDB4MDJ9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDEwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZlLCAweGYwLCAweDMwLCAweDE3LCAweDA0LCAweDdmLCAweDgwLCAweDgwLCAweDAyLCAweDdmLAorICAweDAwLCAweDkwLCAweDdmLCAweDk3LCAweGVmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweGYwLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwfX0sCisgezB4MGU4NiwgNjQsIHsgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMiwgMHhmMCwgMHhkMiwgMHgwNiwgMHhkMCwgMHg4NiwKKyAgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwKKyAgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwKKyAgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4M319LAorIHsweDBlYzYsIDY0LCB7IDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsCisgIDB4MDAsIDB4ZDIsIDB4MWEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsCisgIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsCisgIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzR9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDAyLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLAorICAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDUzLCAweDkxLCAweGVmLAorICAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLAorICAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2fX0sCisgezB4MGY0NiwgNjQsIHsgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwKKyAgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwKKyAgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYiwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwMCwKKyAgMHgwMywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHg3NCwgMHgwMH19LAorIHsweDBmODYsIDY0LCB7IDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MGQsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDMsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsCisgIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MGUsIDB4MzMsIDB4MTIsIDB4MGYsIDB4OTUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzB9fSwKKyB7MHgwZmM2LCAgOSwgeyAweGU3LCAweDAzLCAweDEyLCAweDBmLCAweGE1LCAweDEyLCAweDBjLCAweGIxLCAweDIyfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cXdfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5cXdfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODAzZjhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxd19mdy5oCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBrZXlzcGFuX3VzYTE5cXdfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOXdxX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTlxd19maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MmR9fSwKKyB7MHgwMDJkLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgxMCwgMHgxOSwgMHgxMiwgMHgwZSwgMHgwZiwgMHhlZiwgMHhjMywgMHg5NSwgMHgxNCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkZiwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDAsIDB4ZGYsIDB4MzAsIDB4MGQsIDB4M2UsIDB4OTB9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDczLCAweDEyLCAweDBlLCAweDBmLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDZhLCAweDkwfX0sCisgezB4MDA3NiwgMTYsIHsgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgzNiwgMHgyMCwgMHgwYiwgMHgxMX19LAorIHsweDAwODYsIDE2LCB7IDB4NjAsIDB4MGYsIDB4ZjUsIDB4MjQsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MjksIDB4N2UsIDB4NzUsIDB4MmEsIDB4NDEsIDB4MTIsIDB4MDl9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDEwLCAweGMyLCAweDBkLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDc1LCAweDI2LCAweGZmLCAweDgwLCAweDNjLCAweDkwLCAweDdmLCAweGM4fX0sCisgezB4MDBhNiwgMTYsIHsgMHhlMCwgMHgyMCwgMHhlMSwgMHgzNSwgMHgxMiwgMHgwZSwgMHgwZiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyYywgMHg5MCwgMHg3ZCwgMHhjMH19LAorIHsweDAwYjYsIDE2LCB7IDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MzYsIDB4MjAsIDB4MGIsIDB4MTEsIDB4NjAsIDB4MGZ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweGY1LCAweDI0LCAweDdlLCAweDdkLCAweDdmLCAweGMxLCAweDc1LCAweDI5LCAweDdkLCAweDc1LCAweDJhLCAweGMxLCAweDEyLCAweDA5LCAweDEwLCAweGQyfX0sCisgezB4MDBkNiwgMTYsIHsgMHgwZCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHg3NSwgMHgyNiwgMHhmZiwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwM319LAorIHsweDAwZTYsIDE2LCB7IDB4MDIsIDB4MDEsIDB4NjgsIDB4MTIsIDB4MGMsIDB4ZmYsIDB4OGYsIDB4MzYsIDB4MTIsIDB4MGUsIDB4MWIsIDB4OGYsIDB4MTEsIDB4ZTUsIDB4MzYsIDB4YzN9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDk1LCAweDEzLCAweDUwLCAweDBmLCAweDEyLCAweDBkLCAweGRlLCAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDExLCAweDIwLCAweGU3LCAweDAzfX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MGUsIDB4MDB9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwfX0sCisgezB4MDAxMywgMTYsIHsgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMH19LAorIHsweDAwMjMsIDEwLCB7IDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDA5LCAweGM1fX0sCisgezB4MDEwNiwgNjQsIHsgMHgzMCwgMHgxMywgMHg1ZiwgMHhjMiwgMHgxMywgMHhlNSwgMHgzNiwgMHg2MCwgMHg1OSwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgxMSwgMHgwMiwgMHhlNSwgMHgxMSwKKyAgMHgzMCwgMHhlNywgMHgyNCwgMHhlNSwgMHgzNiwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgzNiwgMHgyMCwgMHg4NSwgMHgzNiwgMHgyNCwKKyAgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgyOSwgMHg3ZSwgMHg3NSwgMHgyYSwgMHg4MCwgMHgxMiwgMHgwYiwgMHg5YSwgMHhlNSwgMHgzNiwgMHgyNSwKKyAgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg4MCwgMHgyYSwgMHhlNSwgMHgzNiwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NX19LAorIHsweDAxNDYsIDY0LCB7IDB4MzYsIDB4M2YsIDB4ODUsIDB4MzYsIDB4MjQsIDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MTEsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MjksCisgIDB4N2UsIDB4NzUsIDB4MmEsIDB4ODEsIDB4MTIsIDB4MDksIDB4MzUsIDB4ZTUsIDB4MzYsIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4NzUsIDB4MjYsCisgIDB4ZmYsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MGUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzQsIDB4ZTQsIDB4ZjUsCisgIDB4MzUsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTV9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDM1LCAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBhLCAweDk3LCAweDA1LCAweDM1LCAweGU1LCAweDM1LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDZlLAorICAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDExLCAweGUwLCAweGZkLCAweDEyLCAweDBjLCAweGRhLCAweDkwLCAweDdlLCAweDAxLCAweGUwLCAweGZmLCAweDEyLAorICAweDBjLCAweDFjLCAweDkwLCAweDdlLCAweDAyLCAweGUwLCAweGZmLCAweDEyLCAweDBjLCAweDQyLCAweGQyLCAweDExLCAweGQyLCAweDEyLCAweDc1fX0sCisgezB4MDFjNiwgNjQsIHsgMHgzNiwgMHgwNCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgwNSwgMHhjMiwgMHgxMiwgMHg0MywgMHgzNiwgMHhjMCwgMHg5MCwgMHg3ZSwgMHgwNCwgMHhlMCwKKyAgMHhiNCwgMHgwMSwgMHgwNywgMHhjMiwgMHgxMiwgMHg0MywgMHgzNiwgMHgwYiwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZSwgMHgwNCwgMHhlMCwgMHg2MCwgMHgwNywKKyAgMHhjMiwgMHgxMSwgMHg0MywgMHgzNiwgMHgwOSwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHg3ZiwgMHgwMywgMHhhZCwgMHgzNiwgMHgxMiwgMHgwYywKKyAgMHhkYSwgMHg0MywgMHgxYSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYX19LAorIHsweDAyMDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDcsIDB4ZTAsIDB4NjAsIDB4NDIsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTYsIDB4MDQsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTYsIDB4ZmIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTYsIDB4MTJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDBjLCAweGRhLCAweDkwLCAweDdlLCAweDA4LCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE4LCAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDE4LCAweDdmLCAweDUzLAorICAweDE4LCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDE4LCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDBjLAorICAweDhlLCAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDBjLCAweGI0LCAweGFmLCAweDE4LCAweDEyLCAweDBjLCAweDY4LCAweDkwLCAweDdlLAorICAweDBlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDFhLCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDFhfX0sCisgezB4MDI4NiwgNjQsIHsgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwYywgMHhlMCwKKyAgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxYSwgMHgwMiwgMHg4MCwgMHgwMywgMHg1MywgMHgxYSwgMHhmZCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgxMywKKyAgMHhhMywgMHhlMCwgMHgxMywgMHg5MiwgMHgxNCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxNCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxYX19LAorIHsweDAyYzYsIDY0LCB7IDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MWEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4MWEsCisgIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4MTksIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MGQsCisgIDB4ZDIsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4MTYsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTZ9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDEyLCAweDBjLCAweGRhLCAweGU0LCAweGY1LCAweDBlLCAweGY1LCAweDBkLCAweGQyLCAweDBmLCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLAorICAweDE2LCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDE2LCAweDEyLCAweDBjLCAweGRhLCAweDc1LCAweDBkLCAweDAxLCAweGQyLCAweDBmLCAweDkwLCAweDdlLAorICAweDE4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDE3LCAweDQ0LCAweDA0LCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweGQyLCAweDBiLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDE5LCAweDQwLCAweDkwLCAweDdmfX0sCisgezB4MDM0NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwKKyAgMHgwZiwgMHg1MywgMHgxNiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNiwgMHgxMiwgMHgwYywgMHhkYSwgMHg3NSwgMHgwZiwgMHgwMSwgMHhkMiwgMHgwZiwKKyAgMHg5MCwgMHg3ZSwgMHgxYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgxNiwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNiwgMHgxMiwgMHgwYywgMHhkYSwKKyAgMHhlNCwgMHhmNSwgMHgwZiwgMHhkMiwgMHgwZiwgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NH19LAorIHsweDAzODYsIDY0LCB7IDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsCisgIDB4MTMsIDB4OTAsIDB4N2UsIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MTAsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4ZDIsIDB4MGYsIDB4OTAsCisgIDB4N2UsIDB4MWYsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsCisgIDB4ZjAsIDB4NzQsIDB4MzUsIDB4ZjAsIDB4ZDIsIDB4MGQsIDB4YzIsIDB4MGUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MTZ9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDcxLCAweGU1LCAweDEyLCAweDYwLCAweDAyLCAweDE1LCAweDEyLCAweGU1LCAweDMwLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDMwLCAweDgwLAorICAweDYwLCAweDc1LCAweDMwLCAweDBhLCAweDEyLCAweDBkLCAweGQyLCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDM2LCAweDY1LCAweDBlLCAweDYwLCAweDA3LAorICAweDg1LCAweDM2LCAweDBlLCAweGQyLCAweDBmLCAweDgwLCAweDExLCAweDEyLCAweDBlLCAweDI3LCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDM2LCAweDY1LAorICAweDA5LCAweDYwLCAweDA1LCAweDg1LCAweDM2LCAweDA5LCAweGQyLCAweDBmLCAweDEyLCAweDBlLCAweDI3LCAweGVmLCAweDU0LCAweDgwLCAweGY1fX0sCisgezB4MDQwNiwgNjQsIHsgMHgzNiwgMHg2NSwgMHgwYSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgzNiwgMHgwYSwgMHhkMiwgMHgwZiwgMHgxMiwgMHgwZSwgMHgyNywgMHhlZiwgMHg1NCwgMHgyMCwgMHhmNSwKKyAgMHgzNiwgMHg2NSwgMHgwYiwgMHg2MCwgMHgwOCwgMHg4NSwgMHgzNiwgMHgwYiwgMHgzMCwgMHgxMSwgMHgwMiwgMHhkMiwgMHgwZiwgMHgxMiwgMHgwZSwgMHgyNywKKyAgMHhlZiwgMHg1NCwgMHg0MCwgMHhmNSwgMHgzNiwgMHg2NSwgMHgwYywgMHg2MCwgMHgwOCwgMHg4NSwgMHgzNiwgMHgwYywgMHgzMCwgMHgxMiwgMHgwMiwgMHhkMiwKKyAgMHgwZiwgMHgzMCwgMHgxNiwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMH19LAorIHsweDA0NDYsIDY0LCB7IDB4NjAsIDB4MDksIDB4ZTAsIDB4ZjUsIDB4MzIsIDB4OTAsIDB4N2IsIDB4NDIsIDB4ZTAsIDB4ZjUsIDB4MzMsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksCisgIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDUsIDB4MjksIDB4ZTUsIDB4MjcsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MGYsIDB4MzksIDB4ZTUsCisgIDB4MTIsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MGYsIDB4ZjUsIDB4MzUsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MjUsIDB4MzV9fSwKKyB7MHgwNDg2LCA2NCwgeyAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBhLCAweDUxLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDM1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDM1LCAweGU1LCAweDM1LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LAorICAweDA5LCAweGYwLCAweDc1LCAweDEyLCAweDEwLCAweGU0LCAweGY1LCAweDEwLCAweDc1LCAweDI3LCAweDAyLCAweDIyLCAweGU1LCAweDI3LCAweDY0LCAweDAyLAorICAweDcwLCAweDM2LCAweDMwLCAweDA1LCAweDJmLCAweGMyLCAweDA1LCAweGY1LCAweDM1LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJifX0sCisgezB4MDRjNiwgNjQsIHsgMHgyNSwgMHgzNSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwYSwgMHg1MSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgzNSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgzNSwgMHhlNSwgMHgzNSwgMHhiNCwgMHgwNSwgMHhkYiwgMHg5MCwgMHg3ZiwKKyAgMHhjMywgMHg3NCwgMHgwNSwgMHhmMCwgMHg3NSwgMHgyNywgMHgwMywgMHgyMiwgMHhlNSwgMHgzMiwgMHg2MCwgMHgzMywgMHg3NSwgMHgzMSwgMHgwMywgMHgxNSwKKyAgMHgzMiwgMHhlNCwgMHhmNSwgMHgzNSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgzMSwgMHgyNSwgMHgzNSwgMHhmOSwgMHhlZSwgMHgzNH19LAorIHsweDA1MDYsIDY0LCB7IDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGEsIDB4NTEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsCisgIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzUsIDB4ZTUsIDB4MzUsIDB4YjQsIDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsCisgIDB4ZjUsIDB4MjcsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGEsIDB4YTksIDB4MDYsIDB4MDgsIDB4MDAsIDB4MDYsIDB4N2MsIDB4MDEsCisgIDB4MDYsIDB4ZTksIDB4MDMsIDB4MDUsIDB4NGQsIDB4MDYsIDB4MDUsIDB4ZjksIDB4MDgsIDB4MDUsIDB4ZWQsIDB4MDksIDB4MDUsIDB4ZDUsIDB4MGF9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweDA1LCAweGU0LCAweDBiLCAweDAwLCAweDAwLCAweDA3LCAweDM5LCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLAorICAweDUwLCAweDI0LCAweDAyLCAweDcwLCAweDZmLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LAorICAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLAorICAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweDc0LCAweDc1LCAweDgzLCAweDE5LCAweGYwfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywKKyAgMHgxOSwgMHhmMCwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNywKKyAgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYiwgMHgxYywgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwKKyAgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NH19LAorIHsweDA1YzYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZTUsIDB4MjUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4ZjUsIDB4MjUsIDB4MDIsIDB4MDcsIDB4NDAsIDB4MTIsIDB4MDcsIDB4NDgsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MjMsIDB4MDIsCisgIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDJ9fSwKKyB7MHgwNjA2LCA2NCwgeyAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLAorICAweGEyLCAweDAxLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDA3LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLAorICAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweGU0LCAweDkwLCAweDdmLAorICAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmfX0sCisgezB4MDY0NiwgNjQsIHsgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwKKyAgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZSwgMHgyNCwgMHgwMn19LAorIHsweDA2ODYsIDY0LCB7IDB4NjAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDYsIDB4MTIsIDB4MGQsIDB4ZjksIDB4MDIsIDB4MDcsCisgIDB4NDAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsCisgIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsCisgIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLAorICAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLAorICAweDgwLCAweDU3LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDI0LCAweDAyLCAweDcwLCAweDRiLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweDEyLCAweDBkLCAweGY2LCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0fX0sCisgezB4MDcwNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwKKyAgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMn19LAorIHsweDA3NDYsIDY0LCB7IDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsCisgIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MDgsIDB4N2YsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MmYsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDB9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGZhLCAweGU0LCAweDEyLCAweDBhLCAweDk3LCAweDBmLCAweGJmLCAweDA5LCAweGVlLCAweDc1LCAweDEzLCAweDAxLCAweGU0LCAweGY1LCAweDEyLCAweGY1LCAweDMwLAorICAweGY1LCAweDExLCAweGMyLCAweDBmLCAweGMyLCAweDEzLCAweGMyLCAweDBlLCAweGMyLCAweDBiLCAweGMyLCAweDEwLCAweGMyLCAweDA0LCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDc1LCAweDE5LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLCAweGU0LAorICAweGZkLCAweDEyLCAweDBjLCAweGRhLCAweDdmLCAweDEwLCAweDhmLCAweDE4LCAweDEyLCAweDBjLCAweDY4LCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MDdjNiwgNjQsIHsgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHgxNywgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwKKyAgMHgwYywgMHhkYSwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgxNiwgMHgxMiwgMHgwYywgMHhkYSwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgwYywgMHhkYSwgMHg3ZiwKKyAgMHgwMSwgMHgxMiwgMHgwZCwgMHg2YSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgwYywgMHhkYSwgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNn19LAorIHsweDA4MDYsIDY0LCB7IDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4MTIsIDB4MGUsIDB4MGYsIDB4OGYsIDB4MTUsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4NDQsIDB4ODAsCisgIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4ZTUsIDB4MTUsIDB4MzAsIDB4ZTcsIDB4MDQsIDB4YzIsIDB4MDgsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4MDgsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4MWEsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZDIsIDB4MDMsCisgIDB4MjIsIDB4ZDIsIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MTIsIDB4MGQsIDB4ZjksIDB4ZDIsIDB4ZTh9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LAorICAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLAorICAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDE2LCAweDEyLCAweDBkLAorICAweDI0LCAweGMyLCAweDAyLCAweGU0LCAweGY1LCAweDI4LCAweGY1LCAweDMwLCAweGMyLCAweDA5LCAweGY1LCAweDIzLCAweGMyLCAweDAzLCAweDkwfX0sCisgezB4MDg4NiwgNjQsIHsgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgzNCwgMHg2MCwgMHg0OCwgMHgzMCwgMHgwMywgMHgwNSwgMHhkMiwgMHgxNiwKKyAgMHgxMiwgMHgwMCwgMHg0NiwgMHhlNSwgMHgwZiwgMHg2MCwgMHgyMiwgMHhlNSwgMHgyNiwgMHg2MCwgMHgxNiwgMHgxNSwgMHgyNiwgMHg5MCwgMHg3ZiwgMHhkOCwKKyAgMHhlMCwgMHgzMCwgMHhlNiwgMHgwNCwgMHg3ZiwgMHgyMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgzMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHg4MCwKKyAgMHgxYSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgzMCwgMHhmMCwgMHg4MCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkOSwgMHhlMCwgMHgzMCwgMHhlMn19LAorIHsweDA4YzYsIDY0LCB7IDB4MDQsIDB4N2YsIDB4MzAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsCisgIDB4MzQsIDB4ODAsIDB4MjAsIDB4MzAsIDB4MDMsIDB4MDcsIDB4YzIsIDB4MTYsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MTYsIDB4ZTUsIDB4MGYsIDB4NzAsCisgIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MzAsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MjAsIDB4OTAsIDB4N2YsCisgIDB4OTYsIDB4ZWYsIDB4ZjAsIDB4MzAsIDB4MDIsIDB4MDcsIDB4YzIsIDB4MDIsIDB4MTIsIDB4MDUsIDB4MmEsIDB4ODAsIDB4ODYsIDB4MzAsIDB4MGF9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDgzLCAweGMyLCAweDBhLCAweDEyLCAweDBiLCAweDVkLCAweDAyLCAweDA4LCAweDhhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLAorICAweDI0LCAweGU1LCAweDJhLCAweGY1LCAweDgyLCAweGU1LCAweDI5LCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLAorICAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDI0LCAweGU1LCAweDJhLCAweGY1LCAweDgyLCAweGU1LCAweDI5LCAweGY1LCAweDgzLCAweGMyfX0sCisgezB4MDk0NiwgNjQsIHsgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwKKyAgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgyNCwgMHhlNSwgMHgyYSwgMHhmNSwgMHg4MiwgMHhlNSwKKyAgMHgyOSwgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwKKyAgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZn19LAorIHsweDA5ODYsIDY0LCB7IDB4MjQsIDB4ZTUsIDB4MmEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsCisgIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsCisgIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4Nzh9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDM5LCAweDAyLCAweDBhLCAweDBjLCAweDAyLCAweDA4LCAweDM4LCAweGU0LCAweDkzLCAweGEzLAorICAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LAorICAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LAorICAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyfX0sCisgezB4MGEwNiwgNjQsIHsgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwZCwgMHg4YiwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwKKyAgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwKKyAgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwKKyAgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4Mn19LAorIHsweDBhNDYsIDY0LCB7IDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsCisgIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsCisgIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjV9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLAorICAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLAorICAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLAorICAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyfX0sCisgezB4MGFjNiwgNjQsIHsgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywKKyAgMHg3NCwgMHgyMCwgMHhmMCwgMHgzMCwgMHgwMSwgMHgwMywgMHhmZiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwKKyAgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwKKyAgMHgzMCwgMHgwOCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBiMDYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4ZTQsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4MzUsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4NzUsIDB4MzcsIDB4ZmYsIDB4NzUsIDB4MzgsIDB4MTksCisgIDB4NzUsIDB4MzksIDB4ODYsIDB4YWIsIDB4MzcsIDB4YWEsIDB4MzgsIDB4YTksIDB4MzksIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGEsIDB4NmEsIDB4YjQsCisgIDB4MDMsIDB4MWQsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzYsIDB4ZWYsIDB4YjUsIDB4MzUsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGEsIDB4NTEsIDB4N2V9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDM3LCAweGZmLCAweGY1LCAweDM4LCAweDg5LCAweDM5LCAweDgwLCAweGQ0LCAweDdiLAorICAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDM1LCAweDEyLCAweDBhLCAweGNmLCAweDIwLAorICAweDA4LCAweDA3LCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLAorICAweDEyLCAweDA5LCAweGI1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDBlLCAweDMwLCAweDAxLCAweDA1LCAweDEyLCAweDBkfX0sCisgezB4MGI4NiwgNjQsIHsgMHhiYywgMHg4MCwgMHgwNiwgMHgxMiwgMHgwZCwgMHg0OSwgMHhlZiwgMHg2MCwgMHhlMSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgxMiwKKyAgMHgwNywgMHg0OCwgMHgyMiwgMHgwNSwgMHgyYSwgMHhlNSwgMHgyYSwgMHhhZSwgMHgyOSwgMHg3MCwgMHgwMiwgMHgwNSwgMHgyOSwgMHgxNCwgMHhmNSwgMHg4MiwKKyAgMHg4ZSwgMHg4MywgMHhlNSwgMHgxMSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgyYSwgMHhlNSwgMHgyYSwgMHhhYywgMHgyOSwgMHg3MCwgMHgwMiwKKyAgMHgwNSwgMHgyOSwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgyNCwgMHhlNSwgMHgyNCwgMHg2MCwgMHgwN319LAorIHsweDBiYzYsIDY0LCB7IDB4MTIsIDB4MGUsIDB4MWIsIDB4OGYsIDB4MTEsIDB4ODAsIDB4Y2QsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsCisgIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsCisgIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsCisgIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MGF9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MGM0NiwgNjQsIHsgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNX19LAorIHsweDBjODYsIDY0LCB7IDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjB9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE3LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDBkLCAweGVhLCAweDhmLCAweDM3LCAweDEyLCAweDBkfX0sCisgezB4MGQwNiwgNjQsIHsgMHhlYSwgMHg4ZiwgMHgzOCwgMHhlNSwgMHgzNywgMHg2NSwgMHgzOCwgMHg2MCwgMHgxMiwgMHgxMiwgMHgwZCwgMHhlYSwgMHg4ZiwgMHgzNywgMHhlNSwgMHgzNywgMHg2NSwKKyAgMHgzOCwgMHg2MCwgMHgwNywgMHgxMiwgMHgwZCwgMHhlYSwgMHg4ZiwgMHgzOCwgMHg4MCwgMHhlOCwgMHhhZiwgMHgzNywgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwKKyAgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxNiwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwKKyAgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwZCwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NH19LAorIHsweDBkNDYsIDY0LCB7IDB4MDQsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4MTIsIDB4MDcsIDB4NDgsIDB4MTIsIDB4MGUsIDB4MjcsIDB4ZWYsIDB4MzAsCisgIDB4ZTYsIDB4MGIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MzYsIDB4NjAsIDB4ZjEsIDB4N2YsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGEsIDB4Y2YsCisgIDB4N2YsIDB4MDAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4MTYsIDB4NDQsIDB4ODB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweGZkLCAweDEyLCAweDBjLCAweGRhLCAweDIyLCAweDA1LCAweDJiLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDMxLCAweDAzLCAweDAwLCAweDAwLAorICAweGMxLCAweDg2LCAweGMxLCAweDAyLCAweGMxLCAweDBhLCAweGMxLCAweDAxLCAweGMxLCAweDA3LCAweDAxLCAweDI3LCAweDAwLCAweDAwLCAweDhlLCAweDM2LAorICAweDhmLCAweDM3LCAweGU1LCAweDM3LCAweDE1LCAweDM3LCAweGFlLCAweDM2LCAweDcwLCAweDAyLCAweDE1LCAweDM2LCAweDRlLCAweDYwLCAweDA1LCAweDEyLAorICAweDA5LCAweGE0LCAweDgwLCAweGVlLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDBkLCAweDdlfX0sCisgezB4MGRjNiwgNjQsIHsgMHgwMCwgMHgxMiwgMHgwZCwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhkMiwKKyAgMHgwMSwgMHgyMiwgMHhjMiwgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwYiwgMHhjZSwgMHgwMCwgMHgwMiwgMHgwZX19LAorIHsweDBlMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ZjUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBlYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTAwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTBjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTE4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTI0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsICA0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLCAwLAl7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTl3X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOXdfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ2MTkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTl3X2Z3LmgKQEAgLTAsMCArMSw0NDYgQEAKKy8qIGtleXNwYW5fdXNhMTl3X2Z3LmgKKworCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fdXNhMTl3X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTE5d19maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MGQsIDB4NWN9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDAxMywgMTYsIHsgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MH19LAorIHsweDAwMjMsIDE1LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDBmLCAweDE4LCAweDEyLCAweDBkLCAweDM4LCAweGVmLCAweGMzLCAweDk1LCAweDE0LCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGQ4LCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwZiwgMHhjMiwgMHgwYSwgMHg4MCwgMHg3NywgMHgzMCwgMHgwYywgMHgzYiwgMHg5MCwgMHg3Zn19LAorIHsweDAwNjYsIDE2LCB7IDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MGQsIDB4MzgsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBmLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDFjLCAweDIwLCAweDBhLCAweDExLCAweDYwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwZiwgMHhmNSwgMHgyMywgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgyNywgMHg3ZSwgMHg3NSwgMHgyOCwgMHg0MSwgMHgxMiwgMHgwOCwgMHgwMX19LAorIHsweDAwOTYsIDE2LCB7IDB4YzIsIDB4MGMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDEyLCAweDBkLCAweDM4LCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBmfX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxYywgMHgyMCwgMHgwYSwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgyMywgMHg3ZSwgMHg3ZH19LAorIHsweDAwYzYsIDE2LCB7IDB4N2YsIDB4YzEsIDB4NzUsIDB4MjcsIDB4N2QsIDB4NzUsIDB4MjgsIDB4YzEsIDB4MTIsIDB4MDgsIDB4MDEsIDB4ZDIsIDB4MGMsIDB4ZTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweDVlLCAweDEyLCAweDBjLCAweDQxLCAweDhmfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxYywgMHgxMiwgMHgwZCwgMHg0NCwgMHg4ZiwgMHgxMSwgMHhlNSwgMHgxYywgMHhjMywgMHg5NSwgMHgxMywgMHg1MCwgMHgwZiwgMHgxMiwgMHgwZCwgMHgyMH19LAorIHsweDAwZjYsIDE2LCB7IDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MTEsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MTIsIDB4NWMsIDB4YzIsIDB4MTIsIDB4ZTUsIDB4MWN9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MDgsIDB4YjZ9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDYwLCAweDU2LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDExLCAweDAyLCAweGU1LCAweDExLCAweDMwLCAweGU3LCAweDI0LCAweGU1LCAweDFjLCAweGQzLCAweDk0LAorICAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDFjLCAweDIwLCAweDg1LCAweDFjLCAweDIzLCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDI3LCAweDdlLAorICAweDc1LCAweDI4LCAweDgwLCAweDEyLCAweDBhLCAweDg2LCAweGU1LCAweDFjLCAweDI1LCAweDFjLCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDgwLCAweDI3LAorICAweGU1LCAweDFjLCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LCAweDFjLCAweDNmLCAweDg1LCAweDFjLCAweDIzLCAweDkwLCAweDdlfX0sCisgezB4MDE0NiwgNjQsIHsgMHg4MCwgMHhlNSwgMHgxMSwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgyNywgMHg3ZSwgMHg3NSwgMHgyOCwgMHg4MSwgMHgxMiwgMHgwOCwgMHgyNiwKKyAgMHhlNSwgMHgxYywgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwZCwKKyAgMHgwMywgMHgwMiwgMHgwMywgMHhiYSwgMHhlNCwgMHhmNSwgMHgxYiwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxYiwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHg3ZSwgMHg3OSwgMHgwMCwgMHgyNH19LAorIHsweDAxODYsIDY0LCB7IDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGEsIDB4MGQsIDB4MDUsIDB4MWIsIDB4ZTUsIDB4MWIsIDB4YjQsIDB4MjAsIDB4ZDcsCisgIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NmUsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4MWMsCisgIDB4OTAsIDB4N2UsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4NWUsIDB4OTAsIDB4N2UsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4ODQsCisgIDB4ZDIsIDB4MTAsIDB4ZDIsIDB4MTEsIDB4NzUsIDB4MWMsIDB4MDQsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4YzIsIDB4MTF9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDQzLCAweDFjLCAweGMwLCAweDkwLCAweDdlLCAweDA0LCAweGUwLCAweGI0LCAweDAxLCAweDA3LCAweGMyLCAweDExLCAweDQzLCAweDFjLCAweDBiLCAweDgwLCAweDEwLAorICAweDkwLCAweDdlLCAweDA0LCAweGUwLCAweDYwLCAweDA3LCAweGMyLCAweDEwLCAweDQzLCAweDFjLCAweDA5LCAweDgwLCAweDAzLCAweDQzLCAweDFjLCAweDAyLAorICAweDdmLCAweDAzLCAweGFkLCAweDFjLCAweDEyLCAweDBjLCAweDFjLCAweDQzLCAweDE5LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDE2LCAweDQ0fX0sCisgezB4MDIwNiwgNjQsIHsgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHgxOCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxOCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwNywgMHhlMCwKKyAgMHg2MCwgMHg0MiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxNSwgMHgwNCwgMHg4MCwgMHgwMywgMHg1MywgMHgxNSwgMHhmYiwKKyAgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNSwgMHgxMiwgMHgwYywgMHgxYywgMHg5MCwgMHg3ZSwgMHgwOCwgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxN319LAorIHsweDAyNDYsIDY0LCB7IDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTcsIDB4N2YsIDB4NTMsIDB4MTcsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4MTcsCisgIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4ZDAsIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGIsIDB4ZjYsIDB4YWYsCisgIDB4MTcsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4N2UsIDB4MGUsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTksCisgIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTksIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDB9fSwKKyB7MHgwMjg2LCA2NCwgeyAweGU1LCAweDE5LCAweGYwLCAweDkwLCAweDdlLCAweDBjLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE5LCAweDAyLCAweDgwLAorICAweDAzLCAweDUzLCAweDE5LCAweGZkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDE5LCAweGYwLAorICAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDEzLCAweGEzLCAweGUwLCAweDEzLCAweDkyLCAweDEzLCAweGEzLCAweGUwLCAweGY1LCAweDE0LCAweGEzLAorICAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE5LCAweDEwLCAweDgwLCAweDAzLCAweDUzLCAweDE5LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MDJjNiwgNjQsIHsgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHgxOCwgMHhiZiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHgxNCwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgxNSwKKyAgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNSwgMHgxMiwgMHgwYywgMHgxYywgMHhlNCwgMHhmNSwgMHgwZSwgMHhmNSwgMHgwZCwgMHhkMiwgMHgwZX19LAorIHsweDAzMDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4MTUsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTUsIDB4MTIsIDB4MGMsIDB4MWMsIDB4NzUsCisgIDB4MGQsIDB4MDEsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2UsIDB4MTgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsCisgIDB4ZTUsIDB4MTYsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZDIsIDB4MGEsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsCisgIDB4NDMsIDB4MTgsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzB9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDE1LCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDE1LCAweDEyLCAweDBjLAorICAweDFjLCAweDc1LCAweDBmLCAweDAxLCAweGQyLCAweDBlLCAweDkwLCAweDdlLCAweDFiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDE1LCAweDAxLCAweGU0LAorICAweGZmLCAweGFkLCAweDE1LCAweDEyLCAweDBjLCAweDFjLCAweGU0LCAweGY1LCAweDBmLCAweGQyLCAweDBlLCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLAorICAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDE2LCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwfX0sCisgezB4MDM4NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgxMiwgMHg5MCwgMHg3ZSwgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgxMCwgMHgwMSwKKyAgMHhlNCwgMHhmNSwgMHgxMiwgMHhkMiwgMHgwZSwgMHg5MCwgMHg3ZSwgMHgxZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwKKyAgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwYywgMHhjMiwgMHgwZCwgMHhlNCwgMHg5MCwKKyAgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxNSwgMHg3MSwgMHhlNSwgMHgxMiwgMHg2MCwgMHgwMiwgMHgxNSwgMHgxMiwgMHhlNSwgMHgyZSwgMHhkM319LAorIHsweDAzYzYsIDY0LCB7IDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MmUsIDB4ODAsIDB4NjAsIDB4NzUsIDB4MmUsIDB4MGEsIDB4MTIsIDB4MGQsIDB4MTQsIDB4ZWYsIDB4NTQsIDB4MDEsCisgIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MGUsIDB4NjAsIDB4MDcsIDB4ODUsIDB4MWMsIDB4MGUsIDB4ZDIsIDB4MGUsIDB4ODAsIDB4MTEsIDB4MTIsIDB4MGQsIDB4NTAsCisgIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MDksIDB4NjAsIDB4MDUsIDB4ODUsIDB4MWMsIDB4MDksIDB4ZDIsIDB4MGUsIDB4MTIsIDB4MGQsCisgIDB4NTAsIDB4ZWYsIDB4NTQsIDB4ODAsIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MGEsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MWMsIDB4MGEsIDB4ZDIsIDB4MGV9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDEyLCAweDBkLCAweDUwLCAweGVmLCAweDU0LCAweDIwLCAweGY1LCAweDFjLCAweDY1LCAweDBiLCAweDYwLCAweDA4LCAweDg1LCAweDFjLCAweDBiLCAweDMwLCAweDEwLAorICAweDAyLCAweGQyLCAweDBlLCAweDEyLCAweDBkLCAweDUwLCAweGVmLCAweDU0LCAweDQwLCAweGY1LCAweDFjLCAweDY1LCAweDBjLCAweDYwLCAweDA4LCAweDg1LAorICAweDFjLCAweDBjLCAweDMwLCAweDExLCAweDAyLCAweGQyLCAweDBlLCAweDMwLCAweDE1LCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLAorICAweDIzLCAweDkwLCAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LCAweDMwLCAweDkwLCAweDdiLCAweDQyLCAweGUwLCAweGY1fX0sCisgezB4MDQ0NiwgNjQsIHsgMHgzMSwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwgMHgxZiwgMHhlNSwgMHgyNSwKKyAgMHg3MCwgMHg0MCwgMHgzMCwgMHgwZSwgMHgzOSwgMHhlNSwgMHgxMiwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwZSwgMHhmNSwgMHgxYiwgMHg3ZSwgMHgwMCwgMHg3YiwKKyAgMHgwMCwgMHg3NCwgMHgwOCwgMHgyNSwgMHgxYiwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwOSwgMHhjNywgMHhmZiwgMHg3NH19LAorIHsweDA0ODYsIDY0LCB7IDB4ODAsIDB4MjUsIDB4MWIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MWIsIDB4ZTUsIDB4MWIsIDB4YjQsCisgIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MTIsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MTAsIDB4NzUsIDB4MjUsCisgIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MjUsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MzYsIDB4MzAsIDB4MDUsIDB4MmYsIDB4YzIsIDB4MDUsIDB4ZjUsIDB4MWIsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjksIDB4MjUsIDB4MWIsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MDksIDB4Yzd9fSwKKyB7MHgwNGM2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDFiLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDFiLCAweGU1LAorICAweDFiLCAweGI0LCAweDA1LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA1LCAweGYwLCAweDc1LCAweDI1LCAweDAzLCAweDIyLCAweGU1LCAweDMwLAorICAweDYwLCAweDMzLCAweDc1LCAweDJmLCAweDAzLCAweDE1LCAweDMwLCAweGU0LCAweGY1LCAweDFiLCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJmLAorICAweDI1LCAweDFiLCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDA5LCAweGM3LCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDFifX0sCisgezB4MDUwNiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxYiwgMHhlNSwgMHgxYiwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MCwKKyAgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgyNSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwYSwgMHgxZiwKKyAgMHgwNSwgMHhmNiwgMHgwMCwgMHgwNiwgMHg2YSwgMHgwMSwgMHgwNiwgMHhkNywgMHgwMywgMHgwNSwgMHg0MywgMHgwNiwgMHgwNSwgMHhlOSwgMHgwOCwgMHgwNSwKKyAgMHhlMywgMHgwOSwgMHgwNSwgMHhjYiwgMHgwYSwgMHgwNSwgMHhkYSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwNywgMHgyNywgMHg5MCwgMHg3ZiwgMHhlYn19LAorIHsweDA1NDYsIDY0LCB7IDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTYsIDB4MTQsIDB4NjAsIDB4NTAsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NmYsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsCisgIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsCisgIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsCisgIDB4NzQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgwNTg2LCA2NCwgeyAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDEyLAorICAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBhLCAweDQ1LCAweGVhLAorICAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA3LCAweDJlLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0fX0sCisgezB4MDVjNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyNCwgMHgwMiwgMHgwNywgMHgyZSwgMHgxMiwgMHgwNywgMHgzNiwgMHgwMiwKKyAgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwKKyAgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMn19LAorIHsweDA2MDYsIDY0LCB7IDB4MDEsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDcsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjR9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLAorICAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLAorICAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFlLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLAorICAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA2LCAweDEyLCAweDBkLCAweDYzLCAweDAyLCAweDA3LCAweDJlfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwgMHg5MCwKKyAgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwKKyAgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3Zn19LAorIHsweDA2YzYsIDY0LCB7IDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTcsCisgIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsCisgIDB4YjQsIDB4MDEsIDB4MDUsIDB4MTIsIDB4MGQsIDB4NjAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsCisgIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmZ9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLAorICAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweGU0LAorICAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDc0NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxOCwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhlNCwgMHhmNSwKKyAgMHgwOCwgMHg3ZiwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwOCwgMHgyZiwgMHhmOSwgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwYSwKKyAgMHgwZCwgMHgwZiwgMHhiZiwgMHgwOSwgMHhlZSwgMHg3NSwgMHgxMywgMHgwMSwgMHhlNCwgMHhmNSwgMHgxMiwgMHhmNSwgMHgyZSwgMHhmNSwgMHgxMX19LAorIHsweDA3ODYsIDY0LCB7IDB4YzIsIDB4MGUsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MGQsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MGYsIDB4YzIsIDB4MDQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsCisgIDB4ZjAsIDB4NzUsIDB4MTgsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MGMsCisgIDB4MWMsIDB4N2YsIDB4MTAsIDB4OGYsIDB4MTcsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsCisgIDB4OGYsIDB4MTYsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4MWN9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDE1LCAweDEyLCAweDBjLCAweDFjLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDBjLCAweDFjLCAweDdmLCAweDAxLCAweDEyLCAweDBjLAorICAweGFjLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDBjLCAweDFjLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDc1LCAweDE5LAorICAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweGQyLCAweDAzLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwfX0sCisgezB4MDgwNiwgNjQsIHsgMHhmMCwgMHhhZiwgMHgyMywgMHhlNSwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgyNywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgyMywgMHhlNSwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgyNywgMHhmNSwgMHg4MywgMHhjMiwKKyAgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmN319LAorIHsweDA4NDYsIDY0LCB7IDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MjMsIDB4ZTUsIDB4MjgsIDB4ZjUsIDB4ODIsCisgIDB4ZTUsIDB4MjcsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsCisgIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsCisgIDB4MjMsIDB4ZTUsIDB4MjgsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MjcsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzB9fSwKKyB7MHgwODg2LCA2NCwgeyAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDc0LCAweDAwLAorICAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLAorICAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDc4LAorICAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDMxLCAweDAyLCAweDA4LCAweGZkLCAweDAyLCAweDA5LCAweDQyLCAweGU0fX0sCisgezB4MDhjNiwgNjQsIHsgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwKKyAgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwKKyAgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwKKyAgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwYywgMHhjZCwgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiY319LAorIHsweDA5MDYsIDY0LCB7IDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsCisgIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsCisgIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsCisgIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4ZDIsIDB4MTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDEyLCAweDBkLCAweDYzLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLAorICAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLAorICAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDE1LCAweDEyLCAweDBjLCAweDY2LCAweGMyLCAweDAyLCAweGU0LCAweGY1fX0sCisgezB4MDk4NiwgNjQsIHsgMHgyNiwgMHhmNSwgMHgyZSwgMHhjMiwgMHgwOCwgMHhjMiwgMHgwMywgMHg5MCwgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwKKyAgMHgxYSwgMHg2MCwgMHgxMCwgMHgzMCwgMHgwMywgMHgwNSwgMHhkMiwgMHgxNSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwKKyAgMHgxYSwgMHg4MCwgMHgwOCwgMHgzMCwgMHgwMywgMHgwNSwgMHhjMiwgMHgxNSwgMHgxMiwgMHgwMCwgMHg0NiwgMHgzMCwgMHgwMiwgMHgwNywgMHhjMiwgMHgwMiwKKyAgMHgxMiwgMHgwNSwgMHgyMCwgMHg4MCwgMHhkNiwgMHgzMCwgMHgwOSwgMHhkMywgMHhjMiwgMHgwOSwgMHgxMiwgMHgwYSwgMHhiYSwgMHg4MCwgMHhjY319LAorIHsweDA5YzYsIDY0LCB7IDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsCisgIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsCisgIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTV9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLAorICAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLAorICAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LAorICAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweDhmfX0sCisgezB4MGE0NiwgNjQsIHsgMHgxYiwgMHhlNCwgMHhmNSwgMHgxYywgMHg3NSwgMHgxZCwgMHhmZiwgMHg3NSwgMHgxZSwgMHgxOSwgMHg3NSwgMHgxZiwgMHg4NiwgMHhhYiwgMHgxZCwgMHhhYSwgMHgxZSwKKyAgMHhhOSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwOSwgMHhlMCwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgxYywgMHgwNSwgMHgxYywgMHhlZiwKKyAgMHhiNSwgMHgxYiwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwOSwgMHhjNywgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwKKyAgMHgxZCwgMHhmZiwgMHhmNSwgMHgxZSwgMHg4OSwgMHgxZiwgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMn19LAorIHsweDBhODYsIDY0LCB7IDB4MDUsIDB4MjgsIDB4ZTUsIDB4MjgsIDB4YWUsIDB4MjcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MjcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MTEsCisgIDB4ZjAsIDB4MTIsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MjgsIDB4ZTUsIDB4MjgsIDB4YWMsIDB4MjcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MjcsIDB4MTQsIDB4ZjUsCisgIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MjMsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MGQsIDB4NDQsIDB4OGYsIDB4MTEsCisgIDB4ODAsIDB4Y2QsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MWIsIDB4MTIsIDB4MDAsIDB4MDMsIDB4OTAsIDB4N2YsIDB4ZDZ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDEyLCAweDA4LCAweGE2LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDBlLCAweDMwLCAweDAxLCAweDA1LAorICAweDEyLCAweDBjLCAweGZlLCAweDgwLCAweDA2LCAweDEyLCAweDBjLCAweDhiLCAweGVmLCAweDYwLCAweGUxLCAweDEyLCAweDA3LCAweDM2LCAweDIyLCAweGMwLAorICAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLAorICAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwKKyAgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgwMiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMH19LAorIHsweDBiNDYsIDY0LCB7IDB4ZDIsIDB4MDksIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsCisgIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE4LCAweDU0LCAweDdmLCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MGJjNiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NH19LAorIHsweDBjMDYsIDY0LCB7IDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MGQsIDB4MmMsIDB4OGYsIDB4MWR9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDEyLCAweDBkLCAweDJjLCAweDhmLCAweDFlLCAweGU1LCAweDFkLCAweDY1LCAweDFlLCAweDYwLCAweDEyLCAweDEyLCAweDBkLCAweDJjLCAweDhmLCAweDFkLCAweGU1LAorICAweDFkLCAweDY1LCAweDFlLCAweDYwLCAweDA3LCAweDEyLCAweDBkLCAweDJjLCAweDhmLCAweDFlLCAweDgwLCAweGU4LCAweGFmLCAweDFkLCAweDIyLCAweDkwLAorICAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDE1LCAweDA0LCAweGUwLCAweDQ0LCAweDAyLAorICAweGYwLCAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDBjLCAweGU3LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwfX0sCisgezB4MGM4NiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxYywgMHgxMiwgMHgwNywgMHgzNiwgMHgxMiwgMHgwZCwgMHg1MCwKKyAgMHhlZiwgMHgzMCwgMHhlNiwgMHgwYiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxYywgMHg2MCwgMHhmMSwgMHg3ZiwgMHgwMSwgMHgyMiwgMHgxMiwKKyAgMHgwMCwgMHgwMywgMHg3ZiwgMHgwMCwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNSwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgwYywKKyAgMHgxYywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgxNX19LAorIHsweDBjYzYsIDY0LCB7IDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4MWMsIDB4MjIsIDB4MDUsIDB4MjksIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MmYsIDB4MDMsCisgIDB4MDAsIDB4MDAsIDB4YzEsIDB4ODYsIDB4YzEsIDB4MDIsIDB4YzEsIDB4MDksIDB4YzEsIDB4MDEsIDB4YzEsIDB4MDcsIDB4MDEsIDB4MjUsIDB4MDAsIDB4MDAsCisgIDB4OGUsIDB4MWMsIDB4OGYsIDB4MWQsIDB4ZTUsIDB4MWQsIDB4MTUsIDB4MWQsIDB4YWUsIDB4MWMsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MWMsIDB4NGUsIDB4NjAsCisgIDB4MDUsIDB4MTIsIDB4MDgsIDB4OTUsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2Z9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDBkLCAweDdlLCAweDAwLCAweDEyLCAweDBjLCAweGU3LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLAorICAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmfX0sCisgezB4MGQ0NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHhkMiwgMHgwMSwgMHgyMiwgMHhjMiwgMHgwMSwgMHgyMiwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBkODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDEwLCAweDAwLCAweDAyLCAweDBlfX0sCisgezB4MGUwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwYSwgMHhlNiwgMHgwMCwgMHgwMiwgMHgwYiwgMHgzNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBlNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTA0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTEwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTI4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTM0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsCTAsCXsweDAwfSB9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjZtc2cuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI2bXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwODcyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI2bXNnLmgKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisJdXNhMjZtc2cuaAorCisJQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCUtleXNwYW4gVVNCIEFzeW5jIE1lc3NhZ2UgRm9ybWF0cyBmb3IgdGhlIFVTQTI4WAorCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorCW1ldDoKKworCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIGxpY2VuY2UgdGV4dAorICAgCXdpdGhvdXQgbW9kaWZpY2F0aW9uLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIAlkaXNjbGFpbWVyLiAgVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIG11c3QgYXBwZWFyIGltbWVkaWF0ZWx5IGF0CisgICAJdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIAlDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBJbm5vU3lzIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworICAgICAgICAJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCTIuIFRoZSBuYW1lIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIAlwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIAlwZXJtaXNzaW9uLgorCisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTk5PU1lTIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKwlJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisJT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKwlOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisJKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisJU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKwlDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKwlMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisJT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorCVNVQ0ggREFNQUdFLiAgICAKKworCVRoaXJkIHJldmlzaW9uOiBVU0EyOFggdmVyc2lvbiAoYWthIFVTQTI2KQorCisJQnVmZmVyIGZvcm1hdHMgZm9yIFJYL1RYIGRhdGEgbWVzc2FnZXMgYXJlIG5vdCBkZWZpbmVkIGJ5CisJYSBzdHJ1Y3R1cmUsIGJ1dCBhcmUgZGVzY3JpYmVkIGhlcmU6CisKKwlVU0IgT1VUIChob3N0IC0+IFVTQXh4LCB0cmFuc21pdCkgbWVzc2FnZXMgY29udGFpbiBhIAorCVJFUVVFU1RfQUNLIGluZGljYXRvciAoc2V0IHRvIDB4ZmYgdG8gcmVxdWVzdCBhbiBBQ0sgYXQgdGhlIAorCWNvbXBsZXRpb24gb2YgdHJhbnNtaXQ7IDB4MDAgb3RoZXJ3aXNlKSwgZm9sbG93ZWQgYnkgZGF0YToKKworCQlSUVNUQUNLIERBVCBEQVQgREFUIC4uLgorCisJd2l0aCBhIHRvdGFsIGRhdGEgbGVuZ3RoIG9mIDYzLgorCisJVVNCIElOIChVU0F4eCAtPiBob3N0LCByZWNlaXZlKSBtZXNzYWdlcyBiZWdpbiB3aXRoIGEgc3RhdHVzCisJYnl0ZSBpbiB3aGljaCB0aGUgMHg4MCBiaXQgaXMgZWl0aGVyOgorCisJCShhKQkweDgwIGJpdCBjbGVhcgorCQkJaW5kaWNhdGVzIHRoYXQgdGhlIGJ5dGVzIGZvbGxvd2luZyBpdCBhcmUgYWxsIGRhdGEKKwkJCWJ5dGVzOgorCisJCQkJU1RBVCBEQVRBIERBVEEgREFUQSBEQVRBIERBVEEgLi4uCisKKwkJCWZvciBhIHRvdGFsIG9mIHVwIHRvIDYzIERBVEEgYnl0ZXMsCisKKwlvcjoKKworCQkoYikJMHg4MCBiaXQgc2V0CisJCQlpbmRpYXRlcyB0aGF0IHRoZSBieXRlcyBmb2xsb3dpbmcgYWx0ZXJuYXRlIGRhdGEgYW5kCisJCQlzdGF0dXMgYnl0ZXM6CisKKwkJCQlTVEFUIERBVEEgU1RBVCBEQVRBIFNUQVQgREFUQSBTVEFUIERBVEEgLi4uCisKKwkJCWZvciBhIHRvdGFsIG9mIHVwIHRvIDMyIERBVEEgYnl0ZXMuCisKKwlUaGUgdmFsaWQgYml0cyBpbiB0aGUgU1RBVCBieXRlcyBhcmU6CisKKwkJT1ZFUlJVTgkweDAyCisJCVBBUklUWQkweDA0CisJCUZSQU1JTkcJMHgwOAorCQlCUkVBSwkweDEwCisKKwlOb3RlczoKKworCSgxKSBUaGUgT1ZFUlJVTiBiaXQgY2FuIGFwcGVhciBpbiBlaXRoZXIgKGEpIG9yIChiKSBmb3JtYXQKKwkJbWVzc2FnZXMsIGJ1dCB0aGUgYnV0IHRoZSBQQVJJVFkvRlJBTUlORy9CUkVBSyBiaXRzCisJCW9ubHkgYXBwZWFyIGluIChiKSBmb3JtYXQgbWVzc2FnZXMuCisJKDIpIEZvciB0aGUgaG9zdCB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHBvaW50IGF0IHdoaWNoIHRoZQorCQlvdmVycnVuIG9jY3VycmVkICh0byBpZGVudGlmeSB0aGUgcG9pbnQgaW4gdGhlIGRhdGEKKwkJc3RyZWFtIGF0IHdoaWNoIHRoZSBkYXRhIHdhcyBsb3N0KSwgaXQgbmVlZHMgdG8gY291bnQKKwkJMTI4IGNoYXJhY3RlcnMsIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisJCW1lc3NhZ2UgaW4gd2hpY2ggT1ZFUlJVTiB3YXMgcmVwb3J0ZWQ7IHRoZSBsb3N0IGNoYXJhY3RlcihzKQorCQl3b3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmV0d2VlbiB0aGUgMTI4dGggYW5kIDEyOXRoCisJCWNoYXJhY3RlcnMuCisJKDMpCUFuIFJYIGRhdGEgbWVzc2FnZSBpbiB3aGljaCB0aGUgZmlyc3QgYnl0ZSBoYXMgMHg4MCBjbGVhcgorCQlzZXJ2ZXMgYXMgYSAiYnJlYWsgb2ZmIiBpbmRpY2F0b3IuCisKKwlyZXZpc2lvbiBoaXN0b3J5OgorCisJMTk5OWZlYjEwCWFkZCByZXBvcnRIc2tpYUNoYW5nZXMgdG8gYWxsb3cgdXMgdG8gaWdub3JlIHRoZW0KKwkxOTk5ZmViMTAJYWRkIHR4QWNrVGhyZXNob2xkIGZvciBmYXN0K2xvb3NlIHRocm91Z2hwdXQgZW5oYW5jZW1lbnQKKwkxOTk5bWFyMzAJYmVlZiB1cCBzdXBwb3J0IGZvciBSWCBlcnJvciByZXBvcnRpbmcKKwkxOTk5YXByMTQJYWRkIHJlc2V0RGF0YVRvZ2dsZSB0byBjb250cm9sIG1lc3NhZ2UKKwkyMDAwamFuMDQJbWVyZ2Ugd2l0aCB1c2ExN21zZy5oCisJMjAwMGp1bjAxCWFkZCBleHRlbmRlZCBCU0Qtc3R5bGUgY29weXJpZ2h0IHRleHQKKwkyMDAxanVsMDUJY2hhbmdlIG1lc3NhZ2UgZm9ybWF0IHRvIGltcHJvdmUgT1ZFUlJVTiBjYXNlCisKKwlOb3RlIG9uIHNoYXJlZCBuYW1lczoKKworCUluIHRoZSBjYXNlIG9mIGZpZWxkcyB3aGljaCBoYXZlIGJlZW4gbWVyZ2VkIGJldHdlZW4gdGhlIFVTQTE3CisJYW5kIFVTQTI2IGRlZmluaXRpb25zLCB0aGUgVVNBMjYgZGVmaW5pdGlvbiBpcyB0aGUgZmlyc3QgcGFydAorCW9mIHRoZSBuYW1lIGFuZCB0aGUgVVNBMTcgZGVmaW5pdGlvbiBpcyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlCisJbmFtZTsgYm90aCBtZWFuaW5ncyBhcmUgZGVzY3JpYmVkIGJlbG93LgorKi8KKworI2lmbmRlZglfX1VTQTI2TVNHX18KKyNkZWZpbmUJX19VU0EyNk1TR19fCisKKworc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydENvbnRyb2xNZXNzYWdlCit7CisJLyoKKwkJdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBVU0EyNik6CisJKi8KKwl1OAlzZXRDbG9ja2luZywJLy8gQk9USDogaG9zdCByZXF1ZXN0cyBiYXVkIHJhdGUgYmUgc2V0CisJCWJhdWRMbywJCS8vIEJPVEg6IGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24KKwkJYmF1ZEhpLAkJLy8gQk9USDogYmF1ZEhpIGlzIG9ubHkgdXNlZCBmb3IgZmlyc3QgcG9ydCAoZ2l2ZXMgbG93ZXIgcmF0ZXMpCisJCWV4dGVybmFsQ2xvY2tfdHhDbG9ja2luZywKKwkJCQkJLy8gVVNBMjY6IDA9aW50ZXJuYWwsIG90aGVyPWV4dGVybmFsCisJCQkJCS8vIFVTQTE3OiAwPWludGVybmFsLCBvdGhlcj1leHRlcm5hbC9SSQorCQlyeENsb2NraW5nLAkJLy8gVVNBMTc6IDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwvUkksIG90aGVyPWV4dGVybmFsL0RTUgorCisKKwkJc2V0TGNyLAkJCS8vIEJPVEg6IGhvc3QgcmVxdWVzdHMgbGNyIGJlIHNldAorCQlsY3IsCQkJLy8gQk9USDogdXNlIFBBUklUWSwgU1RPUEJJVFMsIERBVEFCSVRTIGJlbG93CisKKwkJc2V0Rmxvd0NvbnRyb2wsCQkvLyBCT1RIOiBob3N0IHJlcXVlc3RzIGZsb3cgY29udHJvbCBiZSBzZXQKKwkJY3RzRmxvd0NvbnRyb2wsCQkvLyBCT1RIOiAxPXVzZSBDVFMgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXhvbkZsb3dDb250cm9sLAkJLy8gQk9USDogMT11c2UgWE9OL1hPRkYgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXhvbkNoYXIsCQkvLyBCT1RIOiBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisJCXhvZmZDaGFyLAkJLy8gQk9USDogc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCisJCXNldFR4VHJpU3RhdGVfc2V0UnRzLAorCQkJCQkvLyBVU0EyNjogaG9zdCByZXF1ZXN0cyBUWCB0cmktc3RhdGUgYmUgc2V0CisJCQkJCS8vIFVTQTE3OiBob3N0IHJlcXVlc3RzIFJUUyBvdXRwdXQgYmUgc2V0CisJCXR4VHJpU3RhdGVfcnRzLAkJLy8gQk9USDogMT1hY3RpdmUgKG5vcm1hbCksIDA9dHJpc3RhdGUgKG9mZikKKworCQlzZXRIc2tvYV9zZXREdHIsCisJCQkJCS8vIFVTQTI2OiBob3N0IHJlcXVlc3RzIEhTS09BIG91dHB1dCBiZSBzZXQKKwkJCQkJLy8gVVNBMTc6IGhvc3QgcmVxdWVzdHMgRFRSIG91dHB1dCBiZSBzZXQKKwkJaHNrb2FfZHRyLAkJLy8gQk9USDogMT1vbiwgMD1vZmYKKworCQlzZXRQcmVzY2FsZXIsCQkvLyBVU0EyNjogaG9zdCByZXF1ZXN0cyBwcmVzY2FsYXIgYmUgc2V0IChkZWZhdWx0OiAxMykKKwkJcHJlc2NhbGVyOwkJLy8gQk9USDogc3BlY2lmaWVkIGFzIE4vODsgdmFsdWVzIDgtZmYgYXJlIHZhbGlkCisJCQkJCS8vIG11c3QgYmUgc2V0IGFueSB0aW1lIGludGVybmFsIGJhdWQgcmF0ZSBpcyBzZXQ7CisJCQkJCS8vIG11c3Qgbm90IGJlIHNldCB3aGVuIGV4dGVybmFsIGNsb2NraW5nIGlzIHVzZWQKKwkJCQkJLy8gbm90ZTogaW4gVVNBMTcsIHByZXNjYWxlciBpcyBhcHBsaWVkIHdoZW5ldmVyCisJCQkJCS8vIHNldENsb2NraW5nIGlzIHJlcXVlc3RlZAorCisJLyoKKwkJMy4JY29uZmlndXJhdGlvbiBkYXRhIHdoaWNoIGlzIHNpbXBseSB1c2VkIGFzIGlzIChubyBvdmVyaGVhZCwKKwkJCWJ1dCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlKS4KKwkqLworCXU4CWZvcndhcmRpbmdMZW5ndGgsICAvLyBCT1RIOiBmb3J3YXJkIHdoZW4gdGhpcyBudW1iZXIgb2YgY2hhcnMgYXZhaWxhYmxlCisJCXJlcG9ydEhza2lhQ2hhbmdlc19kc3JGbG93Q29udHJvbCwKKwkJCQkJCS8vIFVTQTI2OiAxPW5vcm1hbDsgMD1pZ25vcmUgZXh0ZXJuYWwgY2xvY2sKKwkJCQkJCS8vIFVTQTE3OiAxPXVzZSBEU1IgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXR4QWNrVGhyZXNob2xkLAkvLyBCT1RIOiAwPW5vdCBhbGxvd2VkLCAxPW5vcm1hbCwgMi0yNTUgZGVsaXZlciBBQ0sgZmFzdGVyCisJCWxvb3BiYWNrTW9kZTsJLy8gQk9USDogMD1ubyBsb29wYmFjaywgMT1sb29wYmFjayBlbmFibGVkCisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIGJvdGggX3R4T24gYW5kIF90eE9mZiBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgZW5kcyBpbiBhIFRYX09GRiBzdGF0ZSk7IGFueSBub24temVybyB2YWx1ZSBpcyByZXNwZWN0ZWQKKwkqLworCXU4CV90eE9uLAkJCS8vIEJPVEg6IGVuYWJsZSB0cmFuc21pdHRpbmcgKGFuZCBjb250aW51ZSBpZiB0aGVyZSdzIGRhdGEpCisJCV90eE9mZiwJCQkvLyBCT1RIOiBzdG9wIHRyYW5zbWl0dGluZworCQl0eEZsdXNoLAkJLy8gQk9USDogdG9zcyBvdXRib3VuZCBkYXRhCisJCXR4QnJlYWssCQkvLyBCT1RIOiB0dXJuIG9uIGJyZWFrIChjbGVhcmVkIGJ5IF90eE9uKQorCQlyeE9uLAkJCS8vIEJPVEg6IHR1cm4gb24gcmVjZWl2ZXIKKwkJcnhPZmYsCQkJLy8gQk9USDogdHVybiBvZmYgcmVjZWl2ZXIKKwkJcnhGbHVzaCwJCS8vIEJPVEg6IHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIEJPVEg6IGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XIChhcyBpZiBmd2RMZW49PTEpCisJCXJldHVyblN0YXR1cywJLy8gQk9USDogcmV0dXJuIGN1cnJlbnQgc3RhdHVzIChldmVuIGlmIGl0IGhhc24ndCBjaGFuZ2VkKQorCQlyZXNldERhdGFUb2dnbGU7Ly8gQk9USDogcmVzZXQgZGF0YSB0b2dnbGUgc3RhdGUgdG8gREFUQTAKKwkKK307CisKKy8vIGRlZmluZXMgZm9yIGJpdHMgaW4gbGNyCisjZGVmaW5lCVVTQV9EQVRBQklUU181CQkweDAwCisjZGVmaW5lCVVTQV9EQVRBQklUU182CQkweDAxCisjZGVmaW5lCVVTQV9EQVRBQklUU183CQkweDAyCisjZGVmaW5lCVVTQV9EQVRBQklUU184CQkweDAzCisjZGVmaW5lCVNUT1BCSVRTXzU2NzhfMQkweDAwCS8vIDEgc3RvcCBiaXQgZm9yIGFsbCBieXRlIHNpemVzCisjZGVmaW5lCVNUT1BCSVRTXzVfMXA1CTB4MDQJLy8gMS41IHN0b3AgYml0cyBmb3IgNS1iaXQgYnl0ZQorI2RlZmluZQlTVE9QQklUU182NzhfMgkweDA0CS8vIDIgc3RvcCBiaXRzIGZvciA2LzcvOC1iaXQgYnl0ZQorI2RlZmluZQlVU0FfUEFSSVRZX05PTkUJCTB4MDAKKyNkZWZpbmUJVVNBX1BBUklUWV9PREQJCTB4MDgKKyNkZWZpbmUJVVNBX1BBUklUWV9FVkVOCQkweDE4CisjZGVmaW5lCVBBUklUWV8xCQkweDI4CisjZGVmaW5lCVBBUklUWV8wCQkweDM4CisKKy8vIGFsbCB0aGluZ3MgY2FsbGVkICJTdGF0dXNNZXNzYWdlIiBhcmUgc2VudCBvbiB0aGUgc3RhdHVzIGVuZHBvaW50CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRTdGF0dXNNZXNzYWdlCS8vIG9uZSBmb3IgZWFjaCBwb3J0Cit7CisJdTgJcG9ydCwJCQkvLyBCT1RIOiAwPWZpcnN0LCAxPXNlY29uZCwgb3RoZXI9c2VlIGJlbG93CisJCWhza2lhX2N0cywJCS8vIFVTQTI2OiByZXBvcnRzIEhTS0lBIHBpbgorCQkJCQkJLy8gVVNBMTc6IHJlcG9ydHMgQ1RTIHBpbgorCQlncGlhX2RjZCwJCS8vIFVTQTI2OiByZXBvcnRzIEdQSUEgcGluCisJCQkJCQkvLyBVU0ExNzogcmVwb3J0cyBEQ0QgcGluCisJCWRzciwJCQkvLyBVU0ExNzogcmVwb3J0cyBEU1IgcGluCisJCXJpLAkJCQkvLyBVU0ExNzogcmVwb3J0cyBSSSBwaW4KKwkJX3R4T2ZmLAkJCS8vIHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQgKGJ5IGhvc3QpCisJCV90eFhvZmYsCQkvLyBwb3J0IGlzIGluIFhPRkYgc3RhdGUgKGVpdGhlciBob3N0IG9yIFJYIFhPRkYpCisJCXJ4RW5hYmxlZCwJCS8vIGFzIGNvbmZpZ3VyZWQgYnkgcnhPbi9yeE9mZiAxPW9uLCAwPW9mZgorCQljb250cm9sUmVzcG9uc2U7Ly8gMT1hIGNvbnRyb2wgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQKK307CisKKy8vIGJpdHMgaW4gUlggZGF0YSBtZXNzYWdlIHdoZW4gU1RBVCBieXRlIGlzIGluY2x1ZGVkCisjZGVmaW5lCVJYRVJST1JfT1ZFUlJVTgkweDAyCisjZGVmaW5lCVJYRVJST1JfUEFSSVRZCTB4MDQKKyNkZWZpbmUJUlhFUlJPUl9GUkFNSU5HCTB4MDgKKyNkZWZpbmUJUlhFUlJPUl9CUkVBSwkweDEwCisKK3N0cnVjdCBrZXlzcGFuX3VzYTI2X2dsb2JhbENvbnRyb2xNZXNzYWdlCit7CisJdTgJc2VuZEdsb2JhbFN0YXR1cywJLy8gMj1yZXF1ZXN0IGZvciB0d28gc3RhdHVzIHJlc3BvbnNlcworCQlyZXNldFN0YXR1c1RvZ2dsZSwJLy8gMT1yZXNldCBnbG9iYWwgc3RhdHVzIHRvZ2dsZQorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhIGN5Y2xpbmcgdmFsdWUKK307CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI2X2dsb2JhbFN0YXR1c01lc3NhZ2UKK3sKKwl1OAlwb3J0LAkJCQkvLyAzCisJCXNlbmRHbG9iYWxTdGF0dXMsCS8vIGZyb20gcmVxdWVzdCwgZGVjcmVtZW50ZWQKKwkJcmVzZXRTdGF0dXNDb3VudDsJLy8gYXMgaW4gcmVxdWVzdAorfTsKKworc3RydWN0IGtleXNwYW5fdXNhMjZfZ2xvYmFsRGVidWdNZXNzYWdlCit7CisJdTgJcG9ydCwJCQkJLy8gMgorCQlhLAorCQliLAorCQljLAorCQlkOworfTsKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBFWlVTQiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJTUFYX0RBVEFfTEVOCQkJNjQKKworLy8gdXBkYXRlIHN0YXR1cyBhcHByb3guIDYwIHRpbWVzIGEgc2Vjb25kICgxNi42NjY2IG1zKQorI2RlZmluZQlTVEFUVVNfVVBEQVRFX0lOVEVSVkFMCTE2CisKKy8vIHN0YXR1cyByYXRpb25pbmcgdHVuaW5nIHZhbHVlIChlYWNoIHBvcnQgZ2V0cyBjaGVja2VkIGVhY2ggbiBtcykKKyNkZWZpbmUJU1RBVFVTX1JBVElPTgkxMAorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOF9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhiMGEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhfZncuaApAQCAtMCwwICsxLDQ2NiBAQAorLyoga2V5c3Bhbl91c2EyOF9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTI4X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMjhfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDI2LCAxMCwgeyAweDEyLCAweDE3LCAweGRiLCAweDEyLCAweDE4LCAweGI1LCAweDEyLCAweDE0LCAweGMzLCAweDIyfX0sCisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwMCwgMHgxZH19LAorIHsweDAwMWQsICA0LCB7IDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9fSwKKyB7MHgwMDA2LCAxNiwgeyAweDhlLCAweDEyLCAweDhmLCAweDEzLCAweGU1LCAweDEzLCAweDE1LCAweDEzLCAweGFlLCAweDEyLCAweDcwLCAweDAyLCAweDE1LCAweDEyLCAweDRlLCAweDYwfX0sCisgezB4MDAxNiwgIDcsIHsgMHgwNSwgMHgxMiwgMHgxOCwgMHhhNCwgMHg4MCwgMHhlZSwgMHgyMn19LAorIHsweDAwMDMsICAzLCB7IDB4MDIsIDB4MDAsIDB4NDZ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4fX0sCisgezB4MDA1NiwgMTYsIHsgMHgzMCwgMHg5OSwgMHgwZSwgMHgzMCwgMHgxMSwgMHgwNywgMHhhMiwgMHgxNywgMHg5MiwgMHg5YiwgMHg4NSwgMHg0NiwgMHg5OSwgMHhjMiwgMHg5OSwgMHhkMn19LAorIHsweDAwNjYsIDE2LCB7IDB4MWYsIDB4MzAsIDB4YzEsIDB4MGUsIDB4MzAsIDB4MTIsIDB4MDcsIDB4YTIsIDB4MTgsIDB4OTIsIDB4YzMsIDB4ODUsIDB4NDcsIDB4YzEsIDB4YzIsIDB4YzF9fSwKKyB7MHgwMDc2LCAxNiwgeyAweGQyLCAweDIwLCAweDIwLCAweDFmLCAweDAzLCAweDAyLCAweDA0LCAweDQyLCAweGMyLCAweDFmLCAweDIwLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDY3fX0sCisgezB4MDA4NiwgMTYsIHsgMHgyMCwgMHgxMSwgMHgwMywgMHgwMiwgMHgwMSwgMHgzOCwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg1MCwgMHgzZSwgMHgyMCwgMHgxMywgMHgzNn19LAorIHsweDAwOTYsIDE2LCB7IDB4MjAsIDB4MGIsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4MjksIDB4MzAsIDB4MWIsIDB4MTJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzfX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4M319LAorIHsweDAwYzYsIDE2LCB7IDB4ZTAsIDB4ZjUsIDB4NDYsIDB4MDIsIDB4MDQsIDB4NDAsIDB4YzIsIDB4MTEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjB9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGMyLCAweDAzLCAweDMwLCAweDE1LCAweDBjLCAweGMyLCAweDE1LCAweDkwLCAweDdmLCAweGJmLCAweDA0LCAweGYwLCAweGMyLCAweDExLCAweDAyLCAweDA0fX0sCisgezB4MDBlNiwgMTYsIHsgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjOX19LAorIHsweDAwZjYsIDE2LCB7IDB4ZTAsIDB4ZjUsIDB4N2MsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MjAsIDB4MTMsIDB4MmQsIDB4MjAsIDB4MGIsIDB4MmF9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDFiLCAweDAwfX0sCisgezB4MDAyMywgIDMsIHsgMHgwMiwgMHgwMCwgMHg0Nn19LAorIHsweDAwM2IsICAzLCB7IDB4MDIsIDB4MDAsIDB4NDZ9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDE2LCAweDNkfX0sCisgezB4MDEwNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHgyMCwgMHgzMCwgMHgxYiwgMHgxMSwgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgxNywgMHhhMywgMHhlMCwgMHhmNSwgMHg0NiwgMHg3NSwgMHg0YSwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMiwKKyAgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHhmNSwgMHg0NiwgMHgwMiwgMHgwNCwgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMSwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwKKyAgMHg0MCwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg1MCwgMHgwMywgMHgwMiwgMHgwMSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMH19LAorIHsweDAxNDYsIDY0LCB7IDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MjEsIDB4YzIsIDB4MDUsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZjUsIDB4N2MsIDB4OTAsCisgIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ZDgsIDB4MjAsIDB4MGIsIDB4NzIsIDB4MjAsCisgIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4NjUsIDB4MzAsIDB4MWIsIDB4MTAsIDB4OTAsCisgIDB4N2UsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4NGEsIDB4MDMsIDB4ODAsIDB4MDl9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDkwLCAweDdlLCAweDQxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDRhLCAweDAyLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDQwLCAweDE3LCAweDkwLAorICAweDdmLCAweGM3LCAweGU0LCAweGYwLCAweGMyLCAweDAzLCAweDIwLCAweDE1LCAweDAzLCAweDAyLCAweDA0LCAweDQwLCAweGMyLCAweDE1LCAweDkwLCAweDdmLAorICAweGJmLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDQwLCAweDMwLCAweDFiLCAweDEyLCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLAorICAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhfX0sCisgezB4MDFjNiwgNjQsIHsgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NiwgMHhkMiwgMHgxMSwgMHgwMiwgMHgwNCwKKyAgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMSwgMHhjMiwgMHgyMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHgzMCwgMHgxMywgMHgwMywgMHgwMiwgMHgwMiwgMHg2MiwgMHgyMCwKKyAgMHgwYiwgMHg3OSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHg2ZiwgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZSwKKyAgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxM319LAorIHsweDAyMDYsIDY0LCB7IDB4OTIsIDB4OWIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4OTksIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsCisgIDB4MjAsIDB4MTUsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDAsIDB4YzIsIDB4MTUsIDB4OTAsIDB4N2YsIDB4YmYsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4NDAsCisgIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2V9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ2LCAweGQyLCAweDExLCAweDAyLCAweDA0LCAweDQwLCAweGMyLCAweDIxLCAweDAyLCAweDA0LCAweDQwLAorICAweDIwLCAweDExLCAweDAzLCAweDAyLCAweDAzLCAweDE5LCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDNlLCAweDIwLCAweDEzLCAweDM2LAorICAweDIwLCAweDBiLCAweDMzLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDI5LCAweDMwLCAweDFifX0sCisgezB4MDI4NiwgNjQsIHsgMHgxMiwgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHhmNSwgMHg0NiwgMHgwMiwgMHgwNCwgMHg0MCwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwKKyAgMHhkMiwgMHgwMywgMHgzMCwgMHgxNSwgMHgwYywgMHhjMiwgMHgxNSwgMHg5MCwgMHg3ZiwgMHhiZiwgMHgwNCwgMHhmMCwgMHhjMiwgMHgxMSwgMHgwMn19LAorIHsweDAyYzYsIDY0LCB7IDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDUsIDB4YzIsIDB4MTEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzcsCisgIDB4ZTAsIDB4ZjUsIDB4N2MsIDB4OTAsIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MjAsIDB4MTMsIDB4MmQsIDB4MjAsIDB4MGIsIDB4MmEsCisgIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4MjAsIDB4MzAsIDB4MWIsIDB4MTEsIDB4OTAsIDB4N2UsIDB4NDEsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4NzUsIDB4NGEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDAsIDB4NzV9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDRhLCAweDAyLCAweDkwLCAweDdlLCAweDQxLCAweGUwLCAweGY1LCAweDQ2LCAweDAyLCAweDA0LCAweDQwLCAweDc1LCAweDRhLCAweDAxLCAweGMyLCAweDExLCAweDAyLAorICAweDA0LCAweDQwLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDAzLCAweDAyLCAweDAzLCAweGMxLCAweDkwLCAweDdmLCAweGM4LCAweGUwLAorICAweDMwLCAweGUxLCAweDA3LCAweGMyLCAweDIxLCAweGMyLCAweDA1LCAweDAyLCAweDA0LCAweDQwLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDdjLAorICAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDE1LCAweDMwLCAweDEzLCAweDAzLCAweDAyLCAweDAzLCAweGI5LCAweDIwLCAweDBifX0sCisgezB4MDM0NiwgNjQsIHsgMHg3MiwgMHgyMCwgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHg2NSwgMHgzMCwgMHgxYiwgMHgxMCwKKyAgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHg0YSwgMHgwMywgMHg4MCwgMHgwOSwKKyAgMHg5MCwgMHg3ZCwgMHhjMSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHg0YSwgMHgwMiwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg0MCwgMHgxNywKKyAgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMywgMHgyMCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHhjMiwgMHgxNX19LAorIHsweDAzODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YmYsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsCisgIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsCisgIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4ZDIsIDB4MTEsIDB4MDIsCisgIDB4MDQsIDB4NDAsIDB4NzUsIDB4NGEsIDB4MDEsIDB4YzIsIDB4MjEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MDR9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDNlLCAweDIwLCAweDBiLCAweDc0LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDZhLCAweDMwLCAweDFiLCAweDEyLAorICAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLAorICAweDkyLCAweDliLCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLAorICAweGUwLCAweGY1LCAweDk5LCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDQwLCAweDEzLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwfX0sCisgezB4MDQwNiwgNjQsIHsgMHhkMiwgMHgwMywgMHgzMCwgMHgxNSwgMHgzNSwgMHhjMiwgMHgxNSwgMHg5MCwgMHg3ZiwgMHhiZiwgMHgwNCwgMHhmMCwgMHg4MCwgMHgyYywgMHgzMCwgMHgxYiwgMHgxMiwKKyAgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHhmNSwgMHg0NiwgMHhkMiwgMHgxMSwgMHg4MCwgMHgwMiwgMHhjMiwgMHgyMSwgMHhkMiwgMHgyNSwgMHgyMCwgMHgyMCwgMHgwMywgMHgwMn19LAorIHsweDA0NDYsIDY0LCB7IDB4MDgsIDB4MGMsIDB4YzIsIDB4MjAsIDB4MjAsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDYsIDB4MzEsIDB4MjAsIDB4MTIsIDB4MDMsIDB4MDIsIDB4MDUsIDB4MDIsIDB4ZTUsCisgIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NTAsIDB4M2UsIDB4MjAsIDB4MTQsIDB4MzYsIDB4MjAsIDB4MGQsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsCisgIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MjAsIDB4MWUsIDB4MjksIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmUsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGJ9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LCAweDAyLCAweDA4LCAweDBhLCAweGMyLAorICAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGU0LCAweGYwLCAweGMyLCAweDA0LCAweDMwLCAweDE2LCAweDBjLCAweGMyLCAweDE2LAorICAweDkwLCAweDdmLCAweGMxLCAweDA0LCAweGYwLCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweDMwLCAweGUxLAorICAweDA1LCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGY1LCAweDdkLCAweDkwLCAweDdjLCAweGMwfX0sCisgezB4MDRjNiwgNjQsIHsgMHhlMCwgMHgxMywgMHg5MiwgMHgxNiwgMHgyMCwgMHgxNCwgMHgyZCwgMHgyMCwgMHgwZCwgMHgyYSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywKKyAgMHgyMCwgMHgxZSwgMHgyMCwgMHgzMCwgMHgxZCwgMHgxMSwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhMywgMHhlMCwgMHhmNSwKKyAgMHg0NywgMHg3NSwgMHg0YiwgMHgwMywgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMiwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHhmNSwgMHg0NywKKyAgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMSwgMHhjMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHhlNSwgMHg0YiwgMHhjMywgMHg5NX19LAorIHsweDA1MDYsIDY0LCB7IDB4N2QsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YWEsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MjIsIDB4YzIsIDB4MDYsCisgIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4ZjUsIDB4N2QsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTYsCisgIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MjAsIDB4MGQsIDB4NzIsIDB4MjAsIDB4MDAsIDB4NmYsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsCisgIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MjAsIDB4MWUsIDB4NjUsIDB4MzAsIDB4MWQsIDB4MTAsIDB4OTAsIDB4N2QsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGMzLCAweGEzLCAweGUwLCAweGY1LCAweGMxLCAweDc1LCAweDRiLCAweDAzLCAweDgwLCAweDA5LCAweDkwLCAweDdkLCAweDQxLCAweGUwLCAweGY1LCAweGMxLCAweDc1LAorICAweDRiLCAweDAyLCAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDQwLCAweDE3LCAweDkwLCAweDdmLCAweGNiLCAweGU0LCAweGYwLCAweGMyLCAweDA0LAorICAweDIwLCAweDE2LCAweDAzLCAweDAyLCAweDA4LCAweDBhLCAweGMyLCAweDE2LCAweDkwLCAweDdmLCAweGMxLCAweDA0LCAweGYwLCAweDAyLCAweDA4LCAweDBhLAorICAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkfX0sCisgezB4MDU4NiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMSwgMHhjMiwgMHgyMiwKKyAgMHgwMiwgMHgwOCwgMHgwYSwgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNiwgMHgyYywgMHgyMCwgMHgwZCwgMHg3OSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwKKyAgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHg2ZiwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MH19LAorIHsweDA1YzYsIDY0LCB7IDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4YzMsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsCisgIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4YzEsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsCisgIDB4N2QsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDQsIDB4MjAsIDB4MTYsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MGEsCisgIDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4MGEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGJ9fSwKKyB7MHgwNjA2LCA2NCwgeyAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFlLAorICAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LAorICAweGQyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweGMyLCAweDIyLCAweDAyLCAweDA4LCAweDBhLCAweDIwLCAweDEyLCAweDAzLCAweDAyLCAweDA2LCAweGUzLAorICAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDUwLCAweDNlLCAweDIwLCAweDE0LCAweDM2LCAweDIwLCAweDBkLCAweDMzLCAweDkwLCAweDdmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg5YSwgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHgyOSwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwKKyAgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHgwMiwgMHgwOCwgMHgwYSwKKyAgMHhjMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwNCwgMHgzMCwgMHgxNiwgMHgwY319LAorIHsweDA2ODYsIDY0LCB7IDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MzAsCisgIDB4ZTEsIDB4MDUsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4ZjUsIDB4N2QsIDB4OTAsIDB4N2QsIDB4NDAsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTYsIDB4MjAsIDB4MTQsIDB4MmQsIDB4MjAsIDB4MGQsIDB4MmEsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4MjAsIDB4ZTUsCisgIDB4MDMsIDB4MjAsIDB4MWUsIDB4MjAsIDB4MzAsIDB4MWQsIDB4MTEsIDB4OTAsIDB4N2QsIDB4NDEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YTN9fSwKKyB7MHgwNmM2LCA2NCwgeyAweGUwLCAweGY1LCAweDQ3LCAweDc1LCAweDRiLCAweDAzLCAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAyLCAweDkwLCAweDdkLCAweDQxLCAweGUwLCAweGY1LAorICAweDQ3LCAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAxLCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweGU1LCAweDRiLCAweGMzLCAweDk1LAorICAweDdkLCAweDUwLCAweDAzLCAweDAyLCAweDA3LCAweDhiLCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweDMwLCAweGUxLCAweDA3LCAweGMyLCAweDIyLCAweGMyLAorICAweDA2LCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGY1LCAweDdkLCAweDkwLCAweDdjLCAweGMwLCAweGUwLCAweDEzfX0sCisgezB4MDcwNiwgNjQsIHsgMHg5MiwgMHgxNiwgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNywgMHg4MywgMHgyMCwgMHgwZCwgMHg3MiwgMHgyMCwgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YSwKKyAgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHg2NSwgMHgzMCwgMHgxZCwgMHgxMCwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHgxMywgMHg5MiwKKyAgMHhjMywgMHhhMywgMHhlMCwgMHhmNSwgMHhjMSwgMHg3NSwgMHg0YiwgMHgwMywgMHg4MCwgMHgwOSwgMHg5MCwgMHg3YywgMHhjMSwgMHhlMCwgMHhmNSwgMHhjMSwKKyAgMHg3NSwgMHg0YiwgMHgwMiwgMHhlNSwgMHg0YiwgMHhjMywgMHg5NSwgMHg3ZCwgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlNCwgMHhmMH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZDIsIDB4MDQsIDB4MjAsIDB4MTYsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MGEsIDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDgsCisgIDB4MGEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDcsIDB4ZDIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4NzUsIDB4NGIsIDB4MDF9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGMyLCAweDIyLCAweDAyLCAweDA4LCAweDBhLCAweDMwLCAweDE0LCAweDAzLCAweDAyLCAweDA4LCAweDA4LCAweDIwLCAweDBkLCAweDc0LCAweDkwLCAweDdmLCAweDlhLAorICAweGUwLCAweDIwLCAweGU1LCAweDAzLCAweDIwLCAweDFlLCAweDZhLCAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweGMwLAorICAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweGMzLCAweGFlLCAweDRiLCAweDA1LCAweDRiLAorICAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGMxLCAweGU1LCAweDRifX0sCisgezB4MDdjNiwgNjQsIHsgMHhjMywgMHg5NSwgMHg3ZCwgMHg0MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwNCwgMHgzMCwgMHgxNiwgMHgzNSwgMHhjMiwgMHgxNiwKKyAgMHg5MCwgMHg3ZiwgMHhjMSwgMHgwNCwgMHhmMCwgMHg4MCwgMHgyYywgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwKKyAgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMn19LAorIHsweDA4MDYsIDY0LCB7IDB4ODAsIDB4MDIsIDB4YzIsIDB4MjIsIDB4ZDIsIDB4MjUsIDB4MjAsIDB4OTgsIDB4MDMsIDB4MDIsIDB4MDksIDB4M2UsIDB4YzIsIDB4OTgsIDB4MjAsIDB4MDEsIDB4MDMsCisgIDB4MDIsIDB4MDgsIDB4YjAsIDB4MjAsIDB4MjMsIDB4MjcsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTksIDB4ZjAsIDB4MzAsIDB4MWIsIDB4NDksIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4ODAsCisgIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4YWYsIDB4OTl9fSwKKyB7MHgwODQ2LCA2NCwgeyAweGVmLCAweGI1LCAweDU4LCAweDA0LCAweGQyLCAweDBiLCAweDgwLCAweDJjLCAweGVmLCAweGI1LCAweDU3LCAweDA0LCAweGMyLCAweDBiLCAweDgwLCAweDI0LCAweGFlLAorICAweDQ4LCAweDA1LCAweDQ4LCAweDc0LCAweDgwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDMwLAorICAweDFiLCAweDExLCAweGFlLCAweDQ4LCAweDA1LCAweDQ4LCAweDc0LCAweDgwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLAorICAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDE5LCAweGU1LCAweDQ4LCAweGMzLCAweDk1LCAweDU0LCAweDUwLCAweDAzLCAweDAyLCAweDA5LCAweDNjfX0sCisgezB4MDg4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxNSwgMHhlNSwgMHg0OCwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwOSwgMHgzYywKKyAgMHgxNSwgMHg0OCwgMHgxNSwgMHg0OCwgMHgwNSwgMHgyZCwgMHhkMiwgMHgwYywgMHgwMiwgMHgwOSwgMHgzYywgMHg5MCwgMHg3ZiwgMHhiNywgMHhlNSwgMHg0OCwKKyAgMHhmMCwgMHg3NSwgMHg0OCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMiwgMHgwOSwgMHgzYywgMHgyMCwgMHgyMywgMHgyNywgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwKKyAgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxYn19LAorIHsweDA4YzYsIDY0LCB7IDB4NDksIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsCisgIDB4ZjAsIDB4ODAsIDB4MzYsIDB4YWYsIDB4OTksIDB4ZWYsIDB4YjUsIDB4NTgsIDB4MDQsIDB4ZDIsIDB4MGIsIDB4ODAsIDB4MmMsIDB4ZWYsIDB4YjUsIDB4NTcsCisgIDB4MDQsIDB4YzIsIDB4MGIsIDB4ODAsIDB4MjQsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MzAsIDB4MWIsIDB4MTEsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MmV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDE5LCAweGU1LCAweDQ4LCAweGMzLCAweDk1LCAweDU0LAorICAweDQwLCAweDIzLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDExLCAweGU1LCAweDQ4LCAweGMzLCAweDk0LCAweDQwLCAweDQwLCAweDE1LAorICAweDE1LCAweDQ4LCAweDE1LCAweDQ4LCAweDA1LCAweDJkLCAweGQyLCAweDBjLCAweDgwLCAweDBiLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDQ4LCAweGYwLAorICAweDc1LCAweDQ4LCAweDAwLCAweGQyLCAweDAxLCAweGQyLCAweDI1LCAweDIwLCAweGMwLCAweDAzLCAweDAyLCAweDBhLCAweDcwLCAweGMyLCAweGMwfX0sCisgezB4MDk0NiwgNjQsIHsgMHgyMCwgMHgwMiwgMHgwMywgMHgwMiwgMHgwOSwgMHhlMiwgMHgyMCwgMHgyNCwgMHgyNywgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlNSwgMHhjMSwgMHhmMCwgMHgzMCwgMHgxZCwgMHg0OSwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwKKyAgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHg4MCwgMHgzNiwgMHhhZiwKKyAgMHhjMSwgMHhlZiwgMHhiNSwgMHg3MCwgMHgwNCwgMHhkMiwgMHgwZCwgMHg4MCwgMHgyYywgMHhlZiwgMHhiNSwgMHg2ZiwgMHgwNCwgMHhjMiwgMHgwZH19LAorIHsweDA5ODYsIDY0LCB7IDB4ODAsIDB4MjQsIDB4YWUsIDB4NDksIDB4MDUsIDB4NDksIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZWYsCisgIDB4ZjAsIDB4MzAsIDB4MWQsIDB4MTEsIDB4YWUsIDB4NDksIDB4MDUsIDB4NDksIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsCisgIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4YzAsIDB4ZjAsIDB4ZDIsIDB4MWEsIDB4ZTUsIDB4NDksIDB4YzMsIDB4OTUsIDB4NmMsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4NmUsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTUsIDB4ZTUsIDB4NDksIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MDN9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDAyLCAweDBhLCAweDZlLCAweDE1LCAweDQ5LCAweDE1LCAweDQ5LCAweDA1LCAweDM5LCAweGQyLCAweDBlLCAweDAyLCAweDBhLCAweDZlLCAweDkwLCAweDdmLCAweGJiLAorICAweGU1LCAweDQ5LCAweGYwLCAweDc1LCAweDQ5LCAweDAwLCAweGMyLCAweDAyLCAweDAyLCAweDBhLCAweDZlLCAweDIwLCAweDI0LCAweDI3LCAweGFlLCAweDQ5LAorICAweDA1LCAweDQ5LCAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGU1LCAweGMxLCAweGYwLCAweDMwLAorICAweDFkLCAweDQ5LCAweGFlLCAweDQ5LCAweDA1LCAweDQ5LCAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1fX0sCisgezB4MGEwNiwgNjQsIHsgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHg4MCwgMHgzNiwgMHhhZiwgMHhjMSwgMHhlZiwgMHhiNSwgMHg3MCwgMHgwNCwgMHhkMiwgMHgwZCwgMHg4MCwgMHgyYywgMHhlZiwKKyAgMHhiNSwgMHg2ZiwgMHgwNCwgMHhjMiwgMHgwZCwgMHg4MCwgMHgyNCwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgzMCwgMHgxZCwgMHgxMSwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHgwMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHhkMiwgMHgxYSwgMHhlNSwgMHg0OX19LAorIHsweDBhNDYsIDY0LCB7IDB4YzMsIDB4OTUsIDB4NmMsIDB4NDAsIDB4MjMsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTEsIDB4ZTUsIDB4NDksIDB4YzMsIDB4OTQsIDB4NDAsCisgIDB4NDAsIDB4MTUsIDB4MTUsIDB4NDksIDB4MTUsIDB4NDksIDB4MDUsIDB4MzksIDB4ZDIsIDB4MGUsIDB4ODAsIDB4MGIsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZTUsCisgIDB4NDksIDB4ZjAsIDB4NzUsIDB4NDksIDB4MDAsIDB4ZDIsIDB4MDIsIDB4ZDIsIDB4MjUsIDB4MzAsIDB4MjUsIDB4MDUsIDB4YzIsIDB4MjUsIDB4MDIsIDB4MDAsCisgIDB4NTYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4Y2V9fSwKKyB7MHgwYTg2LCA2NCwgeyAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDBiLCAweGE1LCAweGU0LCAweGY1LCAweDEyLCAweDc0LCAweDQwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDEyLCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDRjLCAweGY5LCAweGVjLAorICAweDM0LCAweDAwLCAweGZhLCAweGVmLCAweDEyLCAweDE1LCAweGNkLCAweDA1LCAweDEyLCAweGU1LCAweDEyLCAweGI0LCAweDE4LCAweGRiLCAweGU1LCAweDRjLAorICAweDYwLCAweDBjLCAweDc1LCAweGM5LCAweDIwLCAweDc1LCAweGM4LCAweDM2LCAweDg1LCAweDRkLCAweGNhLCAweDg1LCAweDRlLCAweGNiLCAweGU1fX0sCisgezB4MGFjNiwgNjQsIHsgMHg0ZiwgMHgxMywgMHg5MiwgMHgxYiwgMHg5MiwgMHg5ZiwgMHhlNSwgMHg1MCwgMHgxMywgMHg5MiwgMHgxYywgMHhlNSwgMHg1MSwgMHgxMywgMHg5MiwgMHgyMywgMHhlNSwKKyAgMHg1MiwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwKKyAgMHg0NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHg1MywgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHgwNywKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg1OSwgMHg2MCwgMHgwYiwgMHhjMiwgMHgxMywgMHhjMiwgMHgwYn19LAorIHsweDBiMDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NWEsIDB4NjAsIDB4MGIsIDB4ZDIsIDB4MGIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2YsCisgIDB4OTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NWIsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MTEsIDB4ZDIsIDB4MDAsIDB4ZTQsCisgIDB4ZjUsIDB4N2MsIDB4ZjUsIDB4NGEsIDB4ZDIsIDB4YWYsIDB4ZTUsIDB4NWMsIDB4NjAsIDB4MDUsIDB4MzAsIDB4MjMsIDB4MDIsIDB4ZDIsIDB4MGIsIDB4ZTUsCisgIDB4NWQsIDB4NjAsIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZTAsIDB4NDR9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDVlLCAweDYwLCAweDBhLCAweGQyLCAweDljLCAweGMyLCAweDk4LAorICAweDc1LCAweDJlLCAweDAxLCAweDc1LCAweDQwLCAweDI4LCAweGU1LCAweDVmLCAweDYwLCAweDA3LCAweGMyLCAweDljLCAweGU0LCAweGY1LCAweDQ4LCAweGY1LAorICAweDJlLCAweGU1LCAweDYwLCAweDYwLCAweDAzLCAweGU0LCAweGY1LCAweDQ4LCAweGU1LCAweDYxLCAweDYwLCAweDAyLCAweGQyLCAweDA3LCAweGU1LCAweDYyLAorICAweDYwLCAweDA4LCAweGU1LCAweDVlLCAweDcwLCAweDAyLCAweGY1LCAweDQwLCAweGQyLCAweDBjLCAweGU1LCAweDYzLCAweDYwLCAweDE5LCAweDkwfX0sCisgezB4MGI4NiwgNjQsIHsgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3NCwgMHgzMiwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwKKyAgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwMywgMHhkMiwgMHgwMSwgMHhkMiwgMHgwOSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHhhMiwgMHgxMywKKyAgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgyYiwgMHg2MCwgMHgwNCwgMHg4ZiwgMHgyYiwgMHhkMiwgMHgwYywgMHhhMiwgMHgwYiwgMHhlNCwgMHgzMywgMHhmZiwKKyAgMHg2NSwgMHgyYywgMHg2MCwgMHgwNCwgMHg4ZiwgMHgyYywgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHgwOCwgMHg2NX19LAorIHsweDBiYzYsIDY0LCB7IDB4MjcsIDB4NjAsIDB4MDcsIDB4ZTAsIDB4NTQsIDB4MDgsIDB4ZjUsIDB4MjcsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4YjUsCisgIDB4MjksIDB4MDksIDB4ZTAsIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsIDB4ZjUsIDB4MjksIDB4ZDIsIDB4MGMsIDB4MzAsIDB4MDcsIDB4MzUsIDB4YzIsIDB4YWYsCisgIDB4MzAsIDB4MDEsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsCisgIDB4YjcsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NDgsIDB4YzIsIDB4MDEsIDB4YzIsIDB4MDcsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTB9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDIwLCAweGUxLCAweDBmLCAweGU1LCAweDQ4LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweGU0LCAweGY1LCAweDQ4LCAweGQyLCAweDAxLCAweGMyLAorICAweDA3LCAweGQyLCAweGFmLCAweDIwLCAweDA1LCAweDM3LCAweDMwLCAweDAzLCAweDFiLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDJkLAorICAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDE1LCAweDc1LCAweDRhLCAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDdjLAorICAweGQyLCAweDA1LCAweDgwLCAweDE5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDEyLCAweDkwLCAweDdkLCAweGMwLCAweGUwfX0sCisgezB4MGM0NiwgNjQsIHsgMHgxMywgMHg5MiwgMHgxNSwgMHg3NSwgMHg0YSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg3YywgMHhkMiwgMHgwNSwgMHgyMCwgMHgyMSwgMHgzMywKKyAgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHg0YSwgMHg2NSwgMHg3YywgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNSwgMHgxYSwgMHgzMCwgMHgwMywgMHgwOSwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwKKyAgMHgwNSwgMHhlNCwgMHhmNSwgMHg3YywgMHhmNSwgMHg0YSwgMHgzMCwgMHgxNSwgMHgwYSwgMHhjMiwgMHgxNSwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3Zn19LAorIHsweDBjODYsIDY0LCB7IDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MjEsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MzAsCisgIDB4MWMsIDB4MGEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MzAsIDB4MGIsIDB4MDMsIDB4MDIsCisgIDB4MGQsIDB4OTQsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MGQsIDB4OTQsIDB4MzAsIDB4MDMsIDB4NjIsIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWYsIDB4NGEsCisgIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDJkLCAweGFmLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LAorICAweDEzLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDJhLCAweDMwLCAweDFiLCAweDEyLCAweGFmLCAweDRhLCAweDA1LCAweDRhLCAweDc0LAorICAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE3LCAweGFmLCAweDRhLCAweDA1LAorICAweDRhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ2LCAweGQyfX0sCisgezB4MGQwNiwgNjQsIHsgMHgxMSwgMHg4MCwgMHg2YiwgMHhjMiwgMHgxMSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMywgMHg4MCwgMHg2MCwgMHgzMCwgMHgxYiwgMHgxMiwKKyAgMHhhZiwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgyZCwgMHhhZiwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHhmNSwgMHgxMywgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg1MCwgMHgyYSwgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZiwgMHg0YX19LAorIHsweDBkNDYsIDY0LCB7IDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWYsCisgIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDYsCisgIDB4ZDIsIDB4MTEsIDB4ODAsIDB4MDksIDB4YzIsIDB4MTEsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4MzAsIDB4MWIsIDB4MDQsCisgIDB4YTIsIDB4MmQsIDB4OTIsIDB4OWIsIDB4ZDIsIDB4MjEsIDB4YzIsIDB4YWYsIDB4ODUsIDB4MTMsIDB4OTksIDB4MjAsIDB4MTEsIDB4MGQsIDB4MzB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDE1LCAweDBhLCAweGMyLCAweDE1LCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJmLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDkwLCAweDdmLCAweGQwLAorICAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDBlLCAweGI1LCAweGU0LCAweGY1LCAweDEyLCAweDc0LCAweGMwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDEyLCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDY0LCAweGY5LAorICAweGVjLCAweDM0LCAweDAwLCAweGZhLCAweGVmLCAweDEyLCAweDE1LCAweGNkLCAweDA1LCAweDEyLCAweGU1LCAweDEyLCAweGI0LCAweDE4LCAweGRifX0sCisgezB4MGRjNiwgNjQsIHsgMHhlNSwgMHg2NCwgMHg2MCwgMHgwYiwgMHg3NSwgMHg4OSwgMHg2MCwgMHg3NSwgMHg4OCwgMHg0MCwgMHhkMiwgMHhkZiwgMHg4NSwgMHg2NSwgMHg4ZCwgMHhlNSwgMHg2NywKKyAgMHgxMywgMHg5MiwgMHgxZCwgMHg5MiwgMHhjNywgMHhlNSwgMHg2OCwgMHgxMywgMHg5MiwgMHgxZSwgMHhlNSwgMHg2OSwgMHgxMywgMHg5MiwgMHgyNCwgMHhlNSwKKyAgMHg2YSwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwKKyAgMHg0NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHg2YiwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MH19LAorIHsweDBlMDYsIDY0LCB7IDB4MDcsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4NzEsIDB4NjAsIDB4MGIsIDB4YzIsIDB4MTQsIDB4YzIsIDB4MGQsIDB4OTAsCisgIDB4N2YsIDB4OTQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4ZTUsIDB4NzIsIDB4NjAsIDB4MGIsIDB4ZDIsIDB4MGQsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2YsCisgIDB4OTQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4ZTUsIDB4NzMsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MTIsIDB4ZDIsIDB4MDAsIDB4ZTQsCisgIDB4ZjUsIDB4N2QsIDB4ZjUsIDB4NGIsIDB4ZDIsIDB4YWYsIDB4ZTUsIDB4NzQsIDB4NjAsIDB4MDUsIDB4MzAsIDB4MjQsIDB4MDIsIDB4ZDIsIDB4MGR9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweGU1LCAweDc1LCAweDYwLCAweDE1LCAweDkwLCAweDdmLCAweDk0LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweDA4LAorICAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGU1LCAweDc2LCAweDYwLCAweDBhLCAweGQyLCAweGM0LCAweGMyLCAweGMwLAorICAweDc1LCAweDNhLCAweDAxLCAweDc1LCAweDQxLCAweDI4LCAweGU1LCAweDc3LCAweDYwLCAweDA3LCAweGMyLCAweGM0LCAweGU0LCAweGY1LCAweDQ5LCAweGY1LAorICAweDNhLCAweGU1LCAweDc4LCAweDYwLCAweDAzLCAweGU0LCAweGY1LCAweDQ5LCAweGU1LCAweDc5LCAweDYwLCAweDAyLCAweGQyLCAweDA4LCAweGU1fX0sCisgezB4MGU4NiwgNjQsIHsgMHg3YSwgMHg2MCwgMHgwOCwgMHhlNSwgMHg3NiwgMHg3MCwgMHgwMiwgMHhmNSwgMHg0MSwgMHhkMiwgMHgwZSwgMHhlNSwgMHg3YiwgMHg2MCwgMHgxOSwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHg3NCwgMHgxMywgMHhmMCwgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NCwgMHgzNCwgMHhmMCwgMHg3NCwgMHgxNiwgMHhmMCwKKyAgMHg3NCwgMHgzNiwgMHhmMCwgMHhkMiwgMHgwNCwgMHhkMiwgMHgwMiwgMHhkMiwgMHgwYSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMSwgMHhmMCwgMHhhMiwgMHgxNCwKKyAgMHhlNCwgMHgzMywgMHhmZiwgMHg2NSwgMHgzNywgMHg2MCwgMHgwNCwgMHg4ZiwgMHgzNywgMHhkMiwgMHgwZSwgMHhhMiwgMHgwZCwgMHhlNCwgMHgzM319LAorIHsweDBlYzYsIDY0LCB7IDB4ZmYsIDB4NjUsIDB4MzgsIDB4NjAsIDB4MDQsIDB4OGYsIDB4MzgsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4NjUsIDB4MzMsCisgIDB4NjAsIDB4MDcsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4ZjUsIDB4MzMsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4NTQsIDB4NDAsIDB4YjUsCisgIDB4MzUsIDB4MDksIDB4ZTAsIDB4NTQsIDB4NDAsIDB4NjQsIDB4NDAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MGUsIDB4MzAsIDB4MDgsIDB4MzUsIDB4YzIsIDB4YWYsCisgIDB4MzAsIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4NDksIDB4NjAsIDB4MDksIDB4OTB9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDdmLCAweGJiLCAweGYwLCAweGU0LCAweGY1LCAweDQ5LCAweGMyLCAweDAyLCAweGMyLCAweDA4LCAweDgwLCAweDE2LCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDIwLAorICAweGUxLCAweDBmLCAweGU1LCAweDQ5LCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGJkLCAweGYwLCAweGU0LCAweGY1LCAweDQ5LCAweGQyLCAweDAyLCAweGMyLAorICAweDA4LCAweGQyLCAweGFmLCAweDIwLCAweDA2LCAweDM3LCAweDMwLCAweDA0LCAweDFiLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweDIwLCAweGUxLCAweDJkLAorICAweDkwLCAweDdkLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDE2LCAweDc1LCAweDRiLCAweDAxLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweGY1fX0sCisgezB4MGY0NiwgNjQsIHsgMHg3ZCwgMHhkMiwgMHgwNiwgMHg4MCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhjYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgxMiwgMHg5MCwgMHg3YywgMHhjMCwgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgxNiwgMHg3NSwgMHg0YiwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmNSwgMHg3ZCwgMHhkMiwgMHgwNiwgMHgyMCwgMHgyMiwgMHgzMywKKyAgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHg0YiwgMHg2NSwgMHg3ZCwgMHg3MCwgMHgyYSwgMHgzMCwgMHgwNiwgMHgxYSwgMHgzMCwgMHgwNCwgMHgwOSwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHhjMiwgMHgwNCwgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHhkMiwgMHgwNH19LAorIHsweDBmODYsIDY0LCB7IDB4YzIsIDB4MDYsIDB4ZTQsIDB4ZjUsIDB4N2QsIDB4ZjUsIDB4NGIsIDB4MzAsIDB4MTYsIDB4MGEsIDB4YzIsIDB4MTYsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzEsCisgIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MzAsIDB4MjIsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MzAsCisgIDB4MWUsIDB4MGEsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MzAsIDB4MGQsIDB4MDMsIDB4MDIsCisgIDB4MTAsIDB4YTQsIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MTAsIDB4YTQsIDB4MzAsIDB4MDQsIDB4NjIsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWZ9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDJkLAorICAweGFmLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LAorICAweDEzLCAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDUwLCAweDJhLCAweDMwLCAweDFkLCAweDEyLCAweGFmLCAweDRiLCAweDA1LCAweDRiLCAweDc0LAorICAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFmLCAweDRifX0sCisgezB4MTAwNiwgNjQsIHsgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMiwKKyAgMHg4MCwgMHg2YiwgMHhjMiwgMHgxMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHhjMiwgMHgwNCwgMHg4MCwgMHg2MCwgMHgzMCwgMHgxZCwgMHgxMiwKKyAgMHhhZiwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgyZCwgMHhhZiwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNX19LAorIHsweDEwNDYsIDY0LCB7IDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MTMsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWYsIDB4NGIsIDB4MDUsCisgIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWYsCisgIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDcsCisgIDB4ZDIsIDB4MTIsIDB4ODAsIDB4MDksIDB4YzIsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4MzAsIDB4MWR9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDA0LCAweGEyLCAweDJkLCAweDkyLCAweGMzLCAweGQyLCAweDIyLCAweGMyLCAweGFmLCAweDg1LCAweDEzLCAweGMxLCAweDIwLCAweDEyLCAweDBkLCAweDMwLCAweDE2LAorICAweDBhLCAweGMyLCAweDE2LCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGMxLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDkwLCAweDdmLCAweGMyLAorICAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDExLCAweDdhLCAweGU1LCAweDFhLCAweDcwLCAweDQ2LCAweDMwLCAweDBjLCAweDNmLCAweGU1LCAweDQwLAorICAweDcwLCAweDNiLCAweGEyLCAweDA5LCAweDMzLCAweGY1LCAweDMxLCAweGMyLCAweDA5LCAweGMyLCAweDBjLCAweGU0LCAweGY1LCAweDEyLCAweDdlfX0sCisgezB4MTBjNiwgNjQsIHsgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNiwgMHgyNSwgMHgxMiwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgxNSwgMHg4NywgMHhmZiwgMHg3NCwKKyAgMHg4MCwgMHgyNSwgMHgxMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxMiwgMHhlNSwgMHgxMiwKKyAgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHg0MCwgMHgxMCwgMHgyMiwgMHg3NSwgMHgxYSwgMHgwMSwKKyAgMHgyMiwgMHhlNSwgMHgxYSwgMHg2NCwgMHgwMSwgMHg3MCwgMHg0NSwgMHgzMCwgMHgwZSwgMHgzZSwgMHhlNSwgMHg0MSwgMHg3MCwgMHgzYSwgMHhhMn19LAorIHsweDExMDYsIDY0LCB7IDB4MGEsIDB4MzMsIDB4ZjUsIDB4M2QsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MGUsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MzIsCisgIDB4MjUsIDB4MTIsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MTUsIDB4ODcsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTIsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTIsIDB4ZTUsIDB4MTIsIDB4YjQsIDB4MGMsIDB4ZGIsIDB4OTAsCisgIDB4N2YsIDB4YzMsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDEsIDB4MTAsIDB4NzUsIDB4MWEsIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MWMsIDB4NjB9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDMwLCAweDE1LCAweDFjLCAweGU0LCAweGY1LCAweDEyLCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDFiLCAweDI1LCAweDEyLCAweGY5LCAweGVlLCAweDM0LAorICAweDAwLCAweGZhLCAweDEyLCAweDE1LCAweDg3LCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LAorICAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDEyLCAweGU1LCAweDEyLCAweGI0LCAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLAorICAweGU0LCAweGY1LCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDE2LCAweDE3LCAweDEyLCAweDQwLCAweDAwLCAweDEyfX0sCisgezB4MTE4NiwgNjQsIHsgMHhiNCwgMHgwMSwgMHgxMywgMHgyMCwgMHgwMywgMHgxMSwgMHg5ZSwgMHgwNiwgMHgxMiwgMHgzMywgMHgwOCwgMHgxMiwgMHgyZCwgMHgwOSwgMHgxMiwgMHgyMCwgMHgwYSwKKyAgMHgxMywgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgxMywgMHg2ZiwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwKKyAgMHg2MCwgMHg0MCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg2OSwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwKKyAgMHhkNSwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNywgMHg0YiwgMHg4YiwgMHgxMn19LAorIHsweDExYzYsIDY0LCB7IDB4OGEsIDB4MTMsIDB4ODksIDB4MTQsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsCisgIDB4ZWYsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsCisgIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTcsIDB4OWEsIDB4OGIsIDB4MTIsIDB4OGEsIDB4MTMsIDB4ODksIDB4MTQsCisgIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsIDB4ZWYsIDB4OTB9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLAorICAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLAorICAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDEyLCAweDE0LCAweGMzLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmfX0sCisgezB4MTI0NiwgNjQsIHsgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMiwgMHgyNiwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwKKyAgMHhhMiwgMHgyYiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMiwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMiwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NH19LAorIHsweDEyODYsIDY0LCB7IDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsCisgIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZTgsCisgIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDI2LCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLAorICAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLAorICAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwKKyAgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgyNiwgMHg4MCwgMHgzZiwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMH19LAorIHsweDEzNDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsCisgIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4MjAsIDB4MjgsIDB4MDMsIDB4MDIsIDB4MTQsIDB4YzIsIDB4ZTUsIDB4NDB9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDQwLCAweGU1LCAweDQ4LCAweDYwLCAweDRmLCAweDY1LCAweDQ0LCAweDcwLCAweDQ1LCAweGU1LCAweDQyLCAweGY0LCAweDYwLCAweDAyLAorICAweDA1LCAweDQyLCAweGU1LCAweDQyLCAweGMzLCAweDk1LCAweDU1LCAweDQwLCAweDNkLCAweGMyLCAweGFmLCAweDMwLCAweDAxLCAweDE4LCAweDkwLCAweDdmLAorICAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDI3LCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDQ4LCAweGYwLCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDQ4LAorICAweGY1LCAweDQyLCAweGY1LCAweDQ0LCAweDgwLCAweDE2LCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDIwLCAweGUxLCAweDBmLCAweDkwLCAweDdmfX0sCisgezB4MTNjNiwgNjQsIHsgMHhiOSwgMHhlNSwgMHg0OCwgMHhmMCwgMHhkMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg0OCwgMHhmNSwgMHg0MiwgMHhmNSwgMHg0NCwgMHhkMiwgMHhhZiwgMHg4MCwgMHgwNiwKKyAgMHg4NSwgMHg0OCwgMHg0NCwgMHhlNCwgMHhmNSwgMHg0MiwgMHhlNSwgMHgyZSwgMHg2MCwgMHgyZCwgMHgyMCwgMHgxOSwgMHgwNywgMHg5MCwgMHg3ZiwgMHg5YiwKKyAgMHhlMCwgMHgzMCwgMHhlMCwgMHgwZSwgMHhlNSwgMHgyZiwgMHg2MCwgMHgwNSwgMHhlNCwgMHhmNSwgMHgyZiwgMHhkMiwgMHgwYywgMHhlNCwgMHhmNSwgMHgzZSwKKyAgMHg4MCwgMHgxMywgMHhlNSwgMHgzZSwgMHhkMywgMHg5NSwgMHg1NiwgMHg1MCwgMHgwYywgMHhlNSwgMHgzZSwgMHhiNSwgMHg1NiwgMHgwNSwgMHg3NX19LAorIHsweDE0MDYsIDY0LCB7IDB4MmYsIDB4MDEsIDB4ZDIsIDB4MGMsIDB4MDUsIDB4M2UsIDB4YzIsIDB4MTksIDB4ZTUsIDB4NDEsIDB4NjAsIDB4MDIsIDB4MTUsIDB4NDEsIDB4ZTUsIDB4NDksIDB4NjAsCisgIDB4NGYsIDB4NjUsIDB4NDUsIDB4NzAsIDB4NDUsIDB4ZTUsIDB4NDMsIDB4ZjQsIDB4NjAsIDB4MDIsIDB4MDUsIDB4NDMsIDB4ZTUsIDB4NDMsIDB4YzMsIDB4OTUsCisgIDB4NmQsIDB4NDAsIDB4M2QsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDIsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4OTAsCisgIDB4N2YsIDB4YmIsIDB4ZTUsIDB4NDksIDB4ZjAsIDB4YzIsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NDksIDB4ZjUsIDB4NDMsIDB4ZjUsIDB4NDUsIDB4ODB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDE2LCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDIwLCAweGUxLCAweDBmLCAweDkwLCAweDdmLCAweGJkLCAweGU1LCAweDQ5LCAweGYwLCAweGQyLCAweDAyLCAweGU0LAorICAweGY1LCAweDQ5LCAweGY1LCAweDQzLCAweGY1LCAweDQ1LCAweGQyLCAweGFmLCAweDgwLCAweDA2LCAweDg1LCAweDQ5LCAweDQ1LCAweGU0LCAweGY1LCAweDQzLAorICAweGU1LCAweDNhLCAweDYwLCAweDJkLCAweDIwLCAweDFhLCAweDA3LCAweDkwLCAweDdmLCAweDlhLCAweGUwLCAweDMwLCAweGUyLCAweDBlLCAweGU1LCAweDNiLAorICAweDYwLCAweDA1LCAweGU0LCAweGY1LCAweDNiLCAweGQyLCAweDBlLCAweGU0LCAweGY1LCAweDNmLCAweDgwLCAweDEzLCAweGU1LCAweDNmLCAweGQzfX0sCisgezB4MTQ4NiwgNjQsIHsgMHg5NSwgMHg2ZSwgMHg1MCwgMHgwYywgMHhlNSwgMHgzZiwgMHhiNSwgMHg2ZSwgMHgwNSwgMHg3NSwgMHgzYiwgMHgwMSwgMHhkMiwgMHgwZSwgMHgwNSwgMHgzZiwgMHhjMiwKKyAgMHgxYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwKKyAgMHgxYywgMHg5MCwgMHg3YiwgMHg0MiwgMHhlMCwgMHhmNSwgMHgxZCwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywKKyAgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMywgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3Zn19LAorIHsweDE0YzYsIDY0LCB7IDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTQsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4OWEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsIDB4NTQsIDB4ZmQsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4MjMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsIDB4NDMsIDB4YTh9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDEwLCAweGMyLCAweDFiLCAweGMyLCAweDA1LCAweGMyLCAweDIxLCAweGMyLCAweDBiLCAweGMyLCAweDEzLCAweGY1LCAweDdjLCAweGY1LCAweDRhLCAweGMyLCAweDExLAorICAweGMyLCAweDE1LCAweGY1LCAweDQyLCAweGMyLCAweDE5LCAweGY1LCAweDQ0LCAweGY1LCAweDQ4LCAweGMyLCAweDIzLCAweGMyLCAweDFjLCAweGY1LCAweDJkLAorICAweGY1LCAweDJmLCAweGMyLCAweDA3LCAweGMyLCAweDAwLCAweGMyLCAweDFmLCAweGY1LCAweDNlLCAweGMyLCAweDA5LCAweGQyLCAweDBjLCAweGY1LCAweDI2LAorICAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGQxLCAweGYwLCAweDc1LCAweGMwLCAweDQwfX0sCisgezB4MTU0NiwgNjQsIHsgMHg0MywgMHhhOCwgMHg0MCwgMHhjMiwgMHgxZCwgMHhjMiwgMHgwNiwgMHhjMiwgMHgyMiwgMHhjMiwgMHgwZCwgMHhjMiwgMHgxNCwgMHhmNSwgMHg3ZCwgMHhmNSwgMHg0YiwKKyAgMHhjMiwgMHgxMiwgMHhjMiwgMHgxNiwgMHhmNSwgMHg0MywgMHhjMiwgMHgxYSwgMHhmNSwgMHg0NSwgMHhmNSwgMHg0OSwgMHhjMiwgMHgyNCwgMHhjMiwgMHgxZSwKKyAgMHhmNSwgMHgzOSwgMHhmNSwgMHgzYiwgMHhjMiwgMHgwOCwgMHhjMiwgMHgwMCwgMHhjMiwgMHgyMCwgMHhmNSwgMHgzZiwgMHhjMiwgMHgwYSwgMHhkMiwgMHgwZSwKKyAgMHg3NSwgMHgzMiwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhkMiwgMHgyOH19LAorIHsweDE1ODYsIDY0LCB7IDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsCisgIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsCisgIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTV9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLAorICAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLAorICAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwLCAweGEzLCAweGUwLCAweDIyLCAweDUwLCAweDA5LCAweGU5LCAweDI1LCAweDgyLAorICAweGY4LCAweDg2LCAweGYwLCAweDA4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDBhLCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweGY1fX0sCisgezB4MTYwNiwgNjQsIHsgMHhmMCwgMHgwOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MywgMHgyYSwgMHhmNSwgMHg4MywgMHhlOSwgMHg5MywgMHhmNSwgMHhmMCwgMHhhMywgMHhlOSwgMHg5MywgMHgyMiwKKyAgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywKKyAgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwKKyAgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg3ZH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDIsIDB4MTYsIDB4ODQsIDB4MDIsIDB4MTYsIDB4YzksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsCisgIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsCisgIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsCisgIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4MTh9fSwKKyB7MHgxNjg2LCA2NCwgeyAweGM1LCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLAorICAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LAorICAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LAorICAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlfX0sCisgezB4MTZjNiwgNjQsIHsgMHhlNywgMHg4MCwgMHhiZSwgMHg3NSwgMHgxMSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwKKyAgMHhmZiwgMHhkMywgMHg5MiwgMHgyNiwgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwKKyAgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4YmMsIDB4ZDIsIDB4YmUsIDB4ZDIsIDB4MmQsCisgIDB4MTIsIDB4MTgsIDB4N2YsIDB4YzIsIDB4MjcsIDB4YzIsIDB4MjUsIDB4YzIsIDB4MjgsIDB4MzAsIDB4MjgsIDB4MDMsIDB4MTIsIDB4MGEsIDB4ODMsIDB4OTAsCisgIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTAsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4ZjUsIDB4MTAsIDB4MTIsIDB4MTMsIDB4N2UsIDB4ODAsIDB4ZWEsIDB4MzAsCisgIDB4MjcsIDB4MDcsIDB4YzIsIDB4MjcsIDB4MTIsIDB4MTEsIDB4N2IsIDB4ODAsIDB4ZTAsIDB4MzAsIDB4MmMsIDB4ZGQsIDB4YzIsIDB4MmMsIDB4MTJ9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDI2LCAweDgwLCAweGQ2LCAweDIyLCAweGU0LCAweGZlLCAweDc1LCAweDE3LCAweGZmLCAweDc1LCAweDE4LCAweDE5LCAweDc1LCAweDE5LCAweDEyLCAweGFiLAorICAweDE3LCAweGFhLCAweDE4LCAweGE5LCAweDE5LCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDE1LCAweGEwLCAweDY0LCAweDAyLCAweDcwLCAweDJkLCAweGFkLAorICAweDA2LCAweDBlLCAweGVkLCAweGI1LCAweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDE1LCAweGRmLCAweDg1LCAweGYwLCAweDE1LAorICAweGY1LCAweDE2LCAweDYyLCAweDE1LCAweGU1LCAweDE1LCAweDYyLCAweDE2LCAweGU1LCAweDE2LCAweDYyLCAweDE1LCAweDI5LCAweGZkLCAweGU1fX0sCisgezB4MTc4NiwgNjQsIHsgMHgxNSwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NSwgMHgxNywgMHhmZiwgMHhmNSwgMHgxOCwgMHg4OSwgMHgxOSwgMHg4MCwgMHhjMywgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwKKyAgMHg3OSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxNSwgMHhlNCwgMHhmNSwgMHgxNiwgMHg3NSwgMHgxNywgMHhmZiwgMHg3NSwgMHgxOCwgMHgxOSwgMHg3NSwgMHgxOSwKKyAgMHg4NiwgMHhhYiwgMHgxNywgMHhhYSwgMHgxOCwgMHhhOSwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgxNSwgMHhhMCwgMHhiNCwgMHgwMywgMHgxZCwKKyAgMHhhZiwgMHgxNiwgMHgwNSwgMHgxNiwgMHhlZiwgMHhiNSwgMHgxNSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgxNSwgMHg4NywgMHg3ZSwgMHgwMCwgMHgyOX19LAorIHsweDE3YzYsIDY0LCB7IDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MTcsIDB4ZmYsIDB4ZjUsIDB4MTgsIDB4ODksIDB4MTksIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZjB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLAorICAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLAorICAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLAorICAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDI3LCAweDUzLCAweDkxLCAweGVmLCAweDkwfX0sCisgezB4MTg0NiwgNjQsIHsgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwKKyAgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwKKyAgMHhkMiwgMHgyYywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwKKyAgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMH19LAorIHsweDE4ODYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MmQsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MDAsCisgIDB4MDYsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsCisgIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4YzF9fSwKKyB7MHgxOGM2LCA2NCwgeyAweGFhLCAweDAxLCAweDFhLCAweDAwLCAweDAzLCAweDFiLCAweDAzLCAweDAwLCAweDAwLCAweGMxLCAweDI3LCAweGMxLCAweDJjLCAweGMxLCAweDI2LCAweGMxLCAweDJiLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgwZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsIDY0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWE4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDIsIDB4MWJ9fSwKKyB7MHgxYjA2LCAgOSwgeyAweDA0LCAweDAwLCAweDAyLCAweDE4LCAweDA3LCAweDAwLCAweDAyLCAweDE4LCAweDU4fX0sCisgezB4ZmZmZiwgIDAsIHsweDAwfX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOG1zZy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWU0NTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjhtc2cuaApAQCAtMCwwICsxLDIwMSBAQAorLyoKKwl1c2EyOG1zZy5oCisKKwlDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBJbm5vU3lzIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKwlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJS2V5c3BhbiBVU0IgQXN5bmMgTWVzc2FnZSBGb3JtYXRzIGZvciB0aGUgVVNBMjZYCisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisJbWV0OgorCisJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoaXMgbGljZW5jZSB0ZXh0CisgICAJd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgCWRpc2NsYWltZXIuICBUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgbXVzdCBhcHBlYXIgaW1tZWRpYXRlbHkgYXQKKyAgIAl0aGUgYmVnaW5uaW5nIG9mIGFsbCBzb3VyY2UgZmlsZXM6CisKKyAgICAgICAgCUNvcHlyaWdodCAoQykgMTk5OC0yMDAwIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisgICAgICAgIAlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJMi4gVGhlIG5hbWUgb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgCXByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgCXBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElOTk9TWVMgQ09SUC4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorCUlNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKwlPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorCU5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKwlJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKwkoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKwlTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorCUNBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorCUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKwlPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisJU1VDSCBEQU1BR0UuICAgIAorCisJTm90ZTogdGhlc2UgbWVzc2FnZSBmb3JtYXRzIGFyZSBjb21tb24gdG8gVVNBMTgsIFVTQTE5LCBhbmQgVVNBMjg7CisJKGZvciBVU0EyOFgsIHNlZSB1c2EyNm1zZy5oKQorCisJQnVmZmVyIGZvcm1hdHMgZm9yIFJYL1RYIGRhdGEgbWVzc2FnZXMgYXJlIG5vdCBkZWZpbmVkIGJ5CisJYSBzdHJ1Y3R1cmUsIGJ1dCBhcmUgZGVzY3JpYmVkIGhlcmU6CisKKwlVU0IgT1VUIChob3N0IC0+IFVTQTI4LCB0cmFuc21pdCkgbWVzc2FnZXMgY29udGFpbiBhIAorCVJFUVVFU1RfQUNLIGluZGljYXRvciAoc2V0IHRvIDB4ZmYgdG8gcmVxdWVzdCBhbiBBQ0sgYXQgdGhlIAorCWNvbXBsZXRpb24gb2YgdHJhbnNtaXQ7IDB4MDAgb3RoZXJ3aXNlKSwgZm9sbG93ZWQgYnkgZGF0YS4KKwlJZiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGZvciBwYXJpdHksIHRoZSBkYXRhIHdpbGwgYmUgYW4gCisJYWx0ZXJuYXRpbmcgc3RyaW5nIG9mIHBhcml0eSBhbmQgZGF0YSBieXRlcywgc28gdGhlIG1lc3NhZ2UKKwlmb3JtYXQgd2lsbCBiZToKKworCQlSUVNUQUNLIFBBUiBEQVQgUEFSIERBVCAuLi4KKworCXNvIHRoZSBtYXhpbXVtIGxlbmd0aCBpcyA2MyBieXRlcyAoMSArIDYyLCBvciAzMSBkYXRhIGJ5dGVzKTsKKwlhbHdheXMgYW4gb2RkIG51bWJlciBmb3IgdGhlIHRvdGFsIG1lc3NhZ2UgbGVuZ3RoLgorCisJSWYgdGhlcmUgaXMgbm8gcGFyaXR5LCB0aGUgZm9ybWF0IGlzIHNpbXBseToKKworCQlSUVNUQUNLIERBVCBEQVQgREFUIC4uLgorCisJd2l0aCBhIHRvdGFsIGRhdGEgbGVuZ3RoIG9mIDYzLgorCisJVVNCIElOIChVU0EyOCAtPiBob3N0LCByZWNlaXZlKSBtZXNzYWdlcyBjb250YWluIGRhdGEgYW5kIHBhcml0eQorCWlmIHBhcml0eSBpcyBjb25maWdyZWQsIHRodXNseToKKwkKKwkJREFUIFBBUiBEQVQgUEFSIERBVCBQQVIgLi4uCisKKwlmb3IgYSB0b3RhbCBvZiAzMiBkYXRhIGJ5dGVzOworCQorCUlmIHBhcml0eSBpcyBub3QgY29uZmlndXJlZCwgdGhlIGZvcm1hdCBpczoKKworCQlEQVQgREFUIERBVCAuLi4KKworCWZvciBhIHRvdGFsIG9mIDY0IGRhdGEgYnl0ZXMuCisKKwlJbiB0aGUgVFggbWVzc2FnZXMgKFVTQiBPVVQpLCB0aGUgMHgwMSBiaXQgb2YgdGhlIFBBUml0eSBieXRlIGlzIAorCXRoZSBwYXJpdHkgYml0LiAgSW4gdGhlIFJYIG1lc3NhZ2VzIChVU0IgSU4pLCB0aGUgUEFSaXR5IGJ5dGUgaXMgCisJdGhlIGNvbnRlbnQgb2YgdGhlIDgwNTEncyBzdGF0dXMgcmVnaXN0ZXI7IHRoZSBwYXJpdHkgYml0IAorCShSWF9QQVJJVFlfQklUKSBpcyB0aGUgMHgwNCBiaXQuCisKKwlyZXZpc2lvbiBoaXN0b3J5OgorCisJMTk5OW1heTA2CWFkZCByZXNldERhdGFUb2dnbGUgdG8gY29udHJvbCBtZXNzYWdlCisJMjAwMG1hcjIxCWFkZCByczIzMmludmFsaWQgdG8gc3RhdHVzIHJlc3BvbnNlIG1lc3NhZ2UKKwkyMDAwYXByMDQJYWRkIDIzMC40S2IgZGVmaW5pdGlvbiB0byBzZXRCYXVkUmF0ZQorCTIwMDBhcHIxMwlhZGQvcmVtb3ZlIGxvb3BiYWNrTW9kZSBzd2l0Y2gKKwkyMDAwYXByMTMJY2hhbmdlIGRlZmluaXRpb24gb2Ygc2V0QmF1ZFJhdGUgdG8gY292ZXIgMTE1LjJLYiwgdG9vCisJMjAwMGp1bjAxCWFkZCBleHRlbmRlZCBCU0Qtc3R5bGUgY29weXJpZ2h0IHRleHQKKyovCisKKyNpZm5kZWYJX19VU0EyOE1TR19fCisjZGVmaW5lCV9fVVNBMjhNU0dfXworCisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X3BvcnRDb250cm9sTWVzc2FnZQoreworCS8qCisJCXRoZXJlIGFyZSBmb3VyIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBVU0EyOCk6CisJKi8KKwl1OAlzZXRCYXVkUmF0ZSwJLy8gMD1kb24ndCBzZXQsIDE9YmF1ZExvL0hpLCAyPTExNS4ySywgMz0yMzAuNEsKKwkJYmF1ZExvLAkJCS8vIGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24KKwkJYmF1ZEhpOwkJCS8vIGJhdWRIaSBpcyBvbmx5IHVzZWQgZm9yIGZpcnN0IHBvcnQgKGdpdmVzIGxvd2VyIHJhdGVzKQorCisJLyoKKwkJMi4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIGFyZSBkb25lIGV2ZXJ5IHRpbWUgKGJlY2F1c2UgaXQncworCQkJaGFyZGx5IG1vcmUgdHJvdWJsZSB0byBkbyB0aGVtIHRoYW4gdG8gY2hlY2sgd2hldGhlciB0byBkbyB0aGVtKToKKwkqLworCXU4CXBhcml0eSwJCQkvLyAxPXVzZSBwYXJpdHksIDA9ZG9uJ3QKKwkJY3RzRmxvd0NvbnRyb2wsCSAgICAgICAgLy8gYWxsIGV4Y2VwdCAxOVE6IDE9dXNlIENUUyBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJCQkJLy8gMTlROiAweDA4OkNUU2Zsb3dDb250cm9sIDB4MTA6RFNSZmxvd0NvbnRyb2wKKwkJeG9uRmxvd0NvbnRyb2wsCS8vIDE9dXNlIFhPTi9YT0ZGIGZsb3cgY29udHJvbCwgMD1kb24ndAorCQlydHMsCQkJLy8gMT1vbiwgMD1vZmYKKwkJZHRyOwkJCS8vIDE9b24sIDA9b2ZmCisKKwkvKgorCQkzLgljb25maWd1cmF0aW9uIGRhdGEgd2hpY2ggaXMgc2ltcGx5IHVzZWQgYXMgaXMgKG5vIG92ZXJoZWFkLAorCQkJYnV0IG11c3QgYmUgY29ycmVjdCBpbiBldmVyeSBob3N0IG1lc3NhZ2UpLgorCSovCisJdTgJZm9yd2FyZGluZ0xlbmd0aCwgIC8vIGZvcndhcmQgd2hlbiB0aGlzIG51bWJlciBvZiBjaGFycyBhdmFpbGFibGUKKwkJZm9yd2FyZE1zLAkJLy8gZm9yd2FyZCB0aGlzIG1hbnkgbXMgYWZ0ZXIgbGFzdCByeCBkYXRhCisJCWJyZWFrVGhyZXNob2xkLAkvLyBzcGVjaWZpZWQgaW4gbXMsIDEtMjU1IChzZWUgbm90ZSBiZWxvdykKKwkJeG9uQ2hhciwJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKwkJeG9mZkNoYXI7CQkvLyBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIGJvdGggX3R4T24gYW5kIF90eE9mZiBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgZW5kcyBpbiBhIFRYX09GRiBzdGF0ZSk7IGFueSBub24temVybyB2YWx1ZSBpcyByZXNwZWN0ZWQKKwkqLworCXU4CV90eE9uLAkJCS8vIGVuYWJsZSB0cmFuc21pdHRpbmcgKGFuZCBjb250aW51ZSBpZiB0aGVyZSdzIGRhdGEpCisJCV90eE9mZiwJCQkvLyBzdG9wIHRyYW5zbWl0dGluZworCQl0eEZsdXNoLAkJLy8gdG9zcyBvdXRib3VuZCBkYXRhCisJCXR4Rm9yY2VYb2ZmLAkvLyBwcmV0ZW5kIHdlJ3ZlIHJlY2VpdmVkIFhPRkYKKwkJdHhCcmVhaywJCS8vIHR1cm4gb24gYnJlYWsgKGxlYXZlIG9uIHVudGlsIHR4T24gY2xlYXJzIGl0KQorCQlyeE9uLAkJCS8vIHR1cm4gb24gcmVjZWl2ZXIKKwkJcnhPZmYsCQkJLy8gdHVybiBvZmYgcmVjZWl2ZXIKKwkJcnhGbHVzaCwJCS8vIHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XCisJCXJldHVyblN0YXR1cywJLy8gcmV0dXJuIGN1cnJlbnQgc3RhdHVzIG4gdGltZXMgKDEgb3IgMikKKwkJcmVzZXREYXRhVG9nZ2xlOy8vIHJlc2V0IGRhdGEgdG9nZ2xlIHN0YXRlIHRvIERBVEEwCisJCit9OworCitzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0U3RhdHVzTWVzc2FnZQoreworCXU4CXBvcnQsCQkJLy8gMD1maXJzdCwgMT1zZWNvbmQsIDI9Z2xvYmFsIChzZWUgYmVsb3cpCisJCWN0cywKKwkJZHNyLAkJCS8vIChub3QgdXNlZCBpbiBhbGwgcHJvZHVjdHMpCisJCWRjZCwKKworCQlyaSwJCQkJLy8gKG5vdCB1c2VkIGluIGFsbCBwcm9kdWN0cykKKwkJX3R4T2ZmLAkJCS8vIHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQgKGJ5IGhvc3QpCisJCV90eFhvZmYsCQkvLyBwb3J0IGlzIGluIFhPRkYgc3RhdGUgKGVpdGhlciBob3N0IG9yIFJYIFhPRkYpCisJCWRhdGFMb3N0LAkJLy8gY291bnQgb2YgbG9zdCBjaGFyczsgd3JhcHM7IG5vdCBndWFyYW50ZWVkIGV4YWN0CisKKwkJcnhFbmFibGVkLAkJLy8gYXMgY29uZmlndXJlZCBieSByeE9uL3J4T2ZmIDE9b24sIDA9b2ZmCisJCXJ4QnJlYWssCQkvLyAxPXdlJ3JlIGluIGJyZWFrIHN0YXRlCisJCXJzMjMyaW52YWxpZCwJLy8gMT1ubyB2YWxpZCBzaWduYWxzIG9uIHJzLTIzMiBpbnB1dHMKKwkJY29udHJvbFJlc3BvbnNlOy8vIDE9YSBjb250cm9sIG1lc3NhZ2VzIGhhcyBiZWVuIHByb2Nlc3NlZAorfTsKKworLy8gYml0IGRlZmluZXMgaW4gdHhTdGF0ZQorI2RlZmluZQlUWF9PRkYJCQkweDAxCS8vIHJlcXVlc3RlZCBieSBob3N0IHR4T2ZmIGNvbW1hbmQKKyNkZWZpbmUJVFhfWE9GRgkJCTB4MDIJLy8gZWl0aGVyIHJlYWwsIG9yIHNpbXVsYXRlZCBieSBob3N0CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X2dsb2JhbENvbnRyb2xNZXNzYWdlCit7CisJdTgJc2VuZEdsb2JhbFN0YXR1cywJLy8gMj1yZXF1ZXN0IGZvciB0d28gc3RhdHVzIHJlc3BvbnNlcworCQlyZXNldFN0YXR1c1RvZ2dsZSwJLy8gMT1yZXNldCBnbG9iYWwgc3RhdHVzIHRvZ2dsZQorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhIGN5Y2xpbmcgdmFsdWUKK307CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X2dsb2JhbFN0YXR1c01lc3NhZ2UKK3sKKwl1OAlwb3J0LAkJCQkvLyAzCisJCXNlbmRHbG9iYWxTdGF0dXMsCS8vIGZyb20gcmVxdWVzdCwgZGVjcmVtZW50ZWQKKwkJcmVzZXRTdGF0dXNDb3VudDsJLy8gYXMgaW4gcmVxdWVzdAorfTsKKworc3RydWN0IGtleXNwYW5fdXNhMjhfZ2xvYmFsRGVidWdNZXNzYWdlCit7CisJdTgJcG9ydCwJCQkJLy8gMgorCQluLAkJCQkJLy8gdHlwaWNhbGx5IGEgY291bnQvc3RhdHVzIGJ5dGUKKwkJYjsJCQkJCS8vIHR5cGljYWxseSBhIGRhdGEgYnl0ZQorfTsKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBFWlVTQiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJTUFYX0RBVEFfTEVOCQkJNjQKKworLy8gdGhlIHBhcml0eSBieXRlcyBoYXZlIG9ubHkgb25lIHNpZ25pZmljYW50IGJpdAorI2RlZmluZQlSWF9QQVJJVFlfQklUCQkJMHgwNAorI2RlZmluZQlUWF9QQVJJVFlfQklUCQkJMHgwMQorCisvLyB1cGRhdGUgc3RhdHVzIGFwcHJveC4gNjAgdGltZXMgYSBzZWNvbmQgKDE2LjY2NjYgbXMpCisjZGVmaW5lCVNUQVRVU19VUERBVEVfSU5URVJWQUwJMTYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eF9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4N2VkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eF9mdy5oCkBAIC0wLDAgKzEsNDQ3IEBACisvKiBrZXlzcGFuX3VzYTI4eF9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTI4eF9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTI4eF9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MTIsIDB4Zjd9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDAxMywgMTYsIHsgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MH19LAorIHsweDAwMjMsIDE1LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDA5LCAweDE4LCAweDEyLCAweDEzLCAweDFiLCAweGVmLCAweGMzLCAweDk1LCAweDNjLCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGQ4LCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywgMHgzMCwgMHgwMywgMHgzYiwgMHg5MCwgMHg3Zn19LAorIHsweDAwNjYsIDE2LCB7IDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDA5LCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg0MSwgMHgxMiwgMHgwYywgMHhiYX19LAorIHsweDAwOTYsIDE2LCB7IDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDEyLCAweDEzLCAweDFiLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDA5fX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZH19LAorIHsweDAwYzYsIDE2LCB7IDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGMsIDB4YmEsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweDYwLCAweDEyLCAweDExLCAweGQ2LCAweDhmfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxOSwgMHgxMiwgMHgxMywgMHgyNywgMHg4ZiwgMHgzNiwgMHhlNSwgMHgxOSwgMHhjMywgMHg5NSwgMHgzYSwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMiwgMHhlYn19LAorIHsweDAwZjYsIDE2LCB7IDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzYsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGIsIDB4NWUsIDB4YzIsIDB4MGIsIDB4ZTUsIDB4MTl9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxMywgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MGUsIDB4MDB9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM2LCAweDAyLCAweGU1LCAweDM2LCAweDMwLCAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LAorICAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdlLAorICAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM2LCAweDEyLCAweDBmLCAweDRiLCAweGU1LCAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGI3LCAweGYwLAorICAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4fX0sCisgezB4MDE0NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHg4MCwgMHhlNSwgMHgzNiwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwKKyAgMHgwYywgMHhkZiwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwKKyAgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwMywgMHhjMSwgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxOCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YX19LAorIHsweDAxODYsIDY0LCB7IDB4N2UsIDB4NzksIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsCisgIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NjgsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MjQsCisgIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MDMsIDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NDMsIDB4NDYsCisgIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4ZTQsIDB4OTB9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDdlLCAweDEzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDAxLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweDM1LCAweDkwLCAweDdlLCAweDAyLCAweGUwLAorICAweGZmLCAweDEyLCAweDEwLCAweDViLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDExLCAweGUwLCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDdmLCAweDAzLAorICAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGIxLCAweDQzLCAweDQ2LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA2LCAweDkwfX0sCisgezB4MDIwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwKKyAgMHg3ZSwgMHgxMywgMHhmMCwgMHg3NSwgMHgyNSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwKKyAgMHhmNSwgMHg0NCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgwNywgMHhlMCwgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MiwgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0Mn19LAorIHsweDAyNDYsIDY0LCB7IDB4N2YsIDB4NTMsIDB4NDIsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDIsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MTAsIDB4YTcsIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4Y2QsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsCisgIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDIsIDB4N2YsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsIDB4N2UsIDB4MGMsCisgIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmR9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDBlLCAweGUwLCAweDYwLAorICAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZlLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDNhLCAweGEzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweGEzLCAweGUwLCAweGY1LCAweDNjLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDEwfX0sCisgezB4MDJjNiwgNjQsIHsgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NCwgMHhiZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwKKyAgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgxMiwgMHhkZiwKKyAgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZSwgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMn19LAorIHsweDAzMDYsIDY0LCB7IDB4MTEsIDB4YjEsIDB4ZTQsIDB4ZjUsIDB4MmEsIDB4ZjUsIDB4MjksIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsCisgIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NzUsIDB4MjksIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTgsCisgIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4ZDIsIDB4MDAsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTh9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLCAweDBmLAorICAweDUzLCAweDNlLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweDc1LCAweDJiLCAweDAxLCAweGQyLCAweDA3LCAweDkwLAorICAweDdlLCAweDFiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLCAweDAxLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweGU0LAorICAweGY1LCAweDJiLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyfX0sCisgezB4MDM4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYiwKKyAgMHg5MCwgMHg3ZSwgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgyYywgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwKKyAgMHgxZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwKKyAgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxYSwgMHg1MiwgMHhlNSwgMHgzOH19LAorIHsweDAzYzYsIDY0LCB7IDB4NjAsIDB4MDIsIDB4MTUsIDB4MzgsIDB4MjAsIDB4MTMsIDB4NDksIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsCisgIDB4M2UsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4ZDIsIDB4MTMsIDB4MTIsIDB4MTIsIDB4ZGYsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsCisgIDB4MTksIDB4NjUsIDB4MmEsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmEsIDB4ZDIsIDB4MDcsIDB4MTIsIDB4MTMsIDB4MzMsIDB4ZWYsIDB4NTQsIDB4ODAsCisgIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjYsIDB4ZDIsIDB4MDcsIDB4MzAsIDB4MGQsIDB4MTEsIDB4MTJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDEzLCAweDMzLCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDI1LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI1LCAweGQyLCAweDA3LCAweDIwLAorICAweDFiLCAweDAzLCAweDAyLCAweDA3LCAweGVjLCAweDMwLCAweDBhLCAweDE4LCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzLCAweDk1LCAweDNkLCAweDQwLAorICAweDAzLCAweDAyLCAweDA0LCAweGFlLCAweDkwLCAweDdmLCAweGMxLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDAwLCAweDgwLCAweDc3LAorICAweDMwLCAweDA0LCAweDNiLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzfX0sCisgezB4MDQ0NiwgNjQsIHsgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZCwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHgxNCwgMHhmNSwKKyAgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwKKyAgMHgwZCwgMHg0MSwgMHgxMiwgMHgwZCwgMHgwNCwgMHhjMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwKKyAgMHhjYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMiwgMHgxMiwgMHgxMywgMHg2ZiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MH19LAorIHsweDA0ODYsIDY0LCB7IDB4N2MsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsCisgIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2MsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGQsIDB4MDQsCisgIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDUsCisgIDB4MzYsIDB4MTIsIDB4MTIsIDB4MjAsIDB4OGYsIDB4MTksIDB4MTIsIDB4MTMsIDB4N2IsIDB4OGYsIDB4MzcsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDNiLCAweDUwLCAweDBmLCAweDEyLCAweDEzLCAweDU3LCAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM3LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBjLAorICAweDVlLCAweGMyLCAweDBjLCAweGU1LCAweDE5LCAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM3LCAweDAyLCAweGU1LCAweDM3LCAweDMwLAorICAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLAorICAweDdkLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM3LCAweDEyLCAweDBmLCAweDg0LCAweGU1fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwKKyAgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOCwgMHg5MCwgMHg3ZCwgMHg4MCwgMHhlNSwgMHgzNywgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MSwgMHg3NSwKKyAgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwgMHgwZCwgMHgyOSwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhkMCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwNiwgMHgwMywgMHgwMiwgMHgwNywgMHg5NywgMHhjMiwgMHgwNiwgMHhlNH19LAorIHsweDA1NDYsIDY0LCB7IDB4ZjUsIDB4MTgsIDB4NzQsIDB4YzAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsCisgIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4NzksIDB4MjAsIDB4MjQsIDB4MjAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsCisgIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MjAsIDB4ZTAsIDB4NjAsIDB4NjgsCisgIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MjQsIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MDN9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGZiLCAweDQzLCAweDQ3LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweGU1LCAweDQ3LCAweGYwLCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDIxLCAweGUwLCAweGZmLCAweDEyLAorICAweDExLCAweDE5LCAweDkwLCAweDdlLCAweDIyLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDNmLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDMxLCAweGUwLAorICAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGZiLCAweDQzLCAweDQ3LCAweDgwLCAweDkwfX0sCisgezB4MDVjNiwgNjQsIHsgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwKKyAgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwKKyAgMHgzMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg3NSwgMHgyZSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgyNSwgMHhlMCwKKyAgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHg0NSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MH19LAorIHsweDA2MDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDUsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDMsCisgIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDMsIDB4N2YsIDB4NTMsIDB4NDMsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDMsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4NjUsIDB4OTAsIDB4N2UsIDB4MmIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4OGIsCisgIDB4YWYsIDB4NDMsIDB4MTIsIDB4MTAsIDB4ZjMsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDMsIDB4N2YsIDB4YWZ9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDQzLCAweDEyLCAweDEwLCAweGYzLCAweDkwLCAweDdlLCAweDJjLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAyLAorICAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGZkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LAorICAweGYwLCAweDkwLCAweDdlLCAweDJlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAxLCAweDgwLCAweDAzLAorICAweDUzLCAweDQ3LCAweGZlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgzMiwgMHhlMCwgMHhmNSwgMHgzYiwgMHhhMywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzZCwgMHhhMywgMHhlMCwKKyAgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgxMCwgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZSwgMHgzNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NSwgMHhiZiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDA2YzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4MTIsIDB4MTMsIDB4NGIsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2YsIDB4ZmQsCisgIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4ZTQsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsCisgIDB4MzcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NzUsIDB4MzIsCisgIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4MzgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjB9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGU1LCAweDQxLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDM5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQ1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDkwLCAweDdlLCAweDNhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDNmLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLAorICAweDc1LCAweDM0LCAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAxLCAweGU0fX0sCisgezB4MDc0NiwgNjQsIHsgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmNSwgMHgzNCwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYywgMHhlMCwgMHg2MCwgMHgwZSwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHhlNSwgMHg0MSwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgzZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZSwgMHgzZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgzNSwgMHgwMSwgMHhlNCwKKyAgMHhmNSwgMHgzOSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxM319LAorIHsweDA3ODYsIDY0LCB7IDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4NzQsIDB4MzYsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDEsIDB4ZjAsCisgIDB4MzAsIDB4MWEsIDB4NTIsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzksIDB4MzAsIDB4MTMsIDB4NDksIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsCisgIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsIDB4M2UsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4YzIsIDB4MTMsIDB4MTIsCisgIDB4MTMsIDB4NGIsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MzMsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MzMsIDB4ZDJ9fSwKKyB7MHgwN2M2LCA2NCwgeyAweDA4LCAweDEyLCAweDEzLCAweDg3LCAweGVmLCAweDU0LCAweDgwLCAweGY1LCAweDE5LCAweDY1LCAweDJmLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJmLCAweGQyLAorICAweDA4LCAweDMwLCAweDBlLCAweDExLCAweDEyLCAweDEzLCAweDg3LCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDJlLCAweDYwLCAweDA1LAorICAweDg1LCAweDE5LCAweDJlLCAweGQyLCAweDA4LCAweDMwLCAweDFhLCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLCAweDIzLCAweDkwLAorICAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LCAweDE1LCAweDkwLCAweDdiLCAweDQyLCAweGUwLCAweGY1LCAweDE2LCAweDkwfX0sCisgezB4MDgwNiwgNjQsIHsgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwOSwgMHgyMCwgMHhlNSwgMHgwYSwgMHg3MCwgMHg0MCwKKyAgMHgzMCwgMHgwNywgMHgzOSwgMHhlNSwgMHgzOCwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwNywgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwKKyAgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNX19LAorIHsweDA4NDYsIDY0LCB7IDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsCisgIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzgsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MmMsIDB4NzUsIDB4MGEsIDB4MDEsIDB4MjIsCisgIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDEsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MDgsIDB4MzksIDB4ZTUsIDB4MzksIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDgsIDB4ZjUsCisgIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTJ9fSwKKyB7MHgwODg2LCA2NCwgeyAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LAorICAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM5LCAweDEwLCAweGU0LAorICAweGY1LCAweDM1LCAweDc1LCAweDBhLCAweDAyLCAweDIyLCAweGU1LCAweDBhLCAweDY0LCAweDAyLCAweDcwLCAweDM2LCAweDMwLCAweDE0LCAweDJmLCAweGMyLAorICAweDE0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDBlLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwfX0sCisgezB4MDhjNiwgNjQsIHsgMHhmYSwgMHgxMiwgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwKKyAgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwNSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwNSwgMHhmMCwgMHg3NSwgMHgwYSwKKyAgMHgwMywgMHgyMiwgMHhlNSwgMHgxNSwgMHg2MCwgMHgzMCwgMHgxNSwgMHgxNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwKKyAgMHgxNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNX19LAorIHsweDA5MDYsIDY0LCB7IDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDMsIDB4ZGIsCisgIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGUsCisgIDB4ZTQsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MGEsIDB4N2MsIDB4MDEsIDB4MGEsIDB4ZTgsIDB4MDMsIDB4MDksIDB4NDQsIDB4MDYsIDB4MDksIDB4ZmIsIDB4MDgsCisgIDB4MDksIDB4ZjUsIDB4MDksIDB4MDksIDB4ZGQsIDB4MGEsIDB4MDksIDB4ZWMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDE0LCAweDYwLCAweDYxLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA5LCAweGQzLCAweDc0LAorICAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LAorICAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweDdiLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDc0LCAweDc1LCAweDgzLCAweDE5fX0sCisgezB4MDk4NiwgNjQsIHsgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwKKyAgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwZiwKKyAgMHgwYSwgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMH19LAorIHsweDA5YzYsIDY0LCB7IDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsCisgIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MDksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MDksIDB4MDIsIDB4MGIsIDB4M2UsIDB4MTIsIDB4MGIsCisgIDB4NDYsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZjAsIDB4MDJ9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLAorICAweGEyLCAweDEwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE2LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLAorICAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweGU0LCAweDkwLCAweDdmLAorICAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmfX0sCisgezB4MGE0NiwgNjQsIHsgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwKKyAgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMn19LAorIHsweDBhODYsIDY0LCB7IDB4NjAsIDB4MDMsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MTAsIDB4MDIsIDB4MGIsIDB4M2UsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsCisgIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsCisgIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLAorICAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLAorICAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLAorICAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLCAweDEwLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwKKyAgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwKKyAgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMn19LAorIHsweDBiNDYsIDY0LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTgsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4ZTQsIDB4ZjUsCisgIDB4MjQsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDAsIDB4ZmF9fSwKKyB7MHgwYjg2LCA2NCwgeyAweGU0LCAweDEyLCAweDBlLCAweGQyLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNhLCAweDAxLCAweGU0LCAweGY1LCAweDM4LAorICAweGY1LCAweDEzLCAweGY1LCAweDM2LCAweGMyLCAweDA3LCAweGMyLCAweDBiLCAweGMyLCAweDA1LCAweGMyLCAweDAwLCAweGMyLCAweDA5LCAweGMyLCAweDEzLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDc1LCAweDQ0LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLAorICAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDdmLCAweDEwLCAweDhmLCAweDQyLCAweDEyLCAweDEwLCAweDgxLCAweDkwLCAweDdmfX0sCisgezB4MGJjNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MCwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NSwgMHg0NiwgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwKKyAgMHgxMiwgMHgxMSwgMHhiMSwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxMX19LAorIHsweDBjMDYsIDY0LCB7IDB4YjEsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4NmEsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4YjEsIDB4MjAsIDB4MWIsIDB4MDMsIDB4MDIsCisgIDB4MGMsIDB4YjcsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsCisgIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2IsCisgIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MTMsIDB4ZjUsIDB4MzcsIDB4YzIsIDB4MDgsIDB4YzIsIDB4MGMsIDB4YzIsIDB4MDYsIDB4YzJ9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDAwLCAweGMyLCAweDBhLCAweGMyLCAweDEzLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDc1LCAweDQ1LCAweDAzLCAweDkwLCAweGMwLCAweDAwLAorICAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDEwLCAweDhmLCAweDQzLCAweDEyLCAweDEwLAorICAweGYzLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDQxLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDc1LCAweDQ3LCAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0fX0sCisgezB4MGM4NiwgNjQsIHsgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZiwgMHgxMiwKKyAgMHgxMSwgMHhmYiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwKKyAgMHg3ZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHg4YiwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhmYiwKKyAgMHhkMiwgMHgxMiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4Mn19LAorIHsweDBjYzYsIDY0LCB7IDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsCisgIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MDgsCisgIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsCisgIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LAorICAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLAorICAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLAorICAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1fX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwKKyAgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywKKyAgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhkMiwgMHgxOSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHhmZiwgMHhkMywgMHg5MiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMH19LAorIHsweDBkODYsIDY0LCB7IDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsCisgIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsCisgIDB4MWEsIDB4MTIsIDB4MTIsIDB4NDUsIDB4YzIsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MGIsIDB4ZjUsIDB4MTMsIDB4YzIsIDB4MTcsIDB4YzIsIDB4MTJ9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDkwLCAweDdmLCAweGExLCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDE3LCAweDYwLCAweDEwLCAweDMwLCAweDEyLCAweDA1LCAweGQyLAorICAweDFhLCAweDEyLCAweDAwLCAweDQ2LCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDE3LCAweDgwLCAweDA4LCAweDMwLCAweDEyLCAweDA1LCAweGMyLAorICAweDFhLCAweDEyLCAweDAwLCAweDQ2LCAweDMwLCAweDExLCAweDA3LCAweGMyLCAweDExLCAweDEyLCAweDA5LCAweDIxLCAweDgwLCAweGQ2LCAweDMwLCAweDE4LAorICAweGQzLCAweGMyLCAweDE4LCAweDEyLCAweDEzLCAweDkzLCAweDgwLCAweGNjLCAweDIyLCAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkfX0sCisgezB4MGUwNiwgNjQsIHsgMHg3NSwgMHg4MSwgMHg0NywgMHgwMiwgMHgwZSwgMHg0NywgMHgwMiwgMHgwZCwgMHg2ZiwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwKKyAgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywKKyAgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwKKyAgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MH19LAorIHsweDBlNDYsIDY0LCB7IDB4ODAsIDB4OTAsIDB4MTIsIDB4YWMsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksCisgIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsCisgIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsCisgIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2F9fSwKKyB7MHgwZTg2LCA2NCwgeyAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLAorICAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLAorICAweDBjLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LAorICAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLCAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1fX0sCisgezB4MGVjNiwgNjQsIHsgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwKKyAgMHg4YSwgMHg4MywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwKKyAgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwKKyAgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhM319LAorIHsweDBmMDYsIDY0LCB7IDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsIDB4OGYsIDB4MTgsIDB4ZTQsIDB4ZjUsIDB4MTksIDB4NzUsIDB4MWEsIDB4ZmYsIDB4NzUsIDB4MWIsIDB4MTksIDB4NzUsIDB4MWMsCisgIDB4ODYsIDB4YWIsIDB4MWEsIDB4YWEsIDB4MWIsIDB4YTksIDB4MWMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGUsIDB4YTUsIDB4YjQsIDB4MDMsIDB4MWQsCisgIDB4YWYsIDB4MTksIDB4MDUsIDB4MTksIDB4ZWYsIDB4YjUsIDB4MTgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGUsIDB4OGMsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsCisgIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MWEsIDB4ZmYsIDB4ZjUsIDB4MWIsIDB4ODksIDB4MWMsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDB9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweDhmLCAweDFhLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLAorICAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFjLAorICAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDA4LCAweGU1LCAweDA4LAorICAweDYwLCAweDBhLCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDFhLCAweGVmLCAweDQyLCAweDM2LCAweDgwLCAweGNhLCAweDIyLCAweDhmLCAweDFhfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwKKyAgMHhmMCwgMHgxMiwgMHgxMywgMHgzZiwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwKKyAgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MCwgMHgwYSwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgxYSwKKyAgMHhlZiwgMHg0MiwgMHgzNywgMHg4MCwgMHhjYSwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMH19LAorIHsweDBmYzYsIDY0LCB7IDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsCisgIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsCisgIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsCisgIDB4MTEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDB9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLAorICAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LAorICAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwfX0sCisgezB4MTA0NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywKKyAgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxM319LAorIHsweDEwODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDR9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LAorICAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDkwfX0sCisgezB4MTEwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwKKyAgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MH19LAorIHsweDExNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2Z9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLAorICAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLAorICAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE3LCAweGYwLCAweDkwfX0sCisgezB4MTFjNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwKKyAgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwKKyAgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHgwZiwgMHg4ZiwgMHgxYiwgMHg4MCwKKyAgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MH19LAorIHsweDEyMDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4NjMsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsCisgIDB4NjMsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTIsIDB4MTMsIDB4NjMsIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsCisgIDB4NjUsIDB4MWIsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTMsIDB4NjMsIDB4OGYsIDB4MWIsIDB4ODAsIDB4ZTgsIDB4YWYsIDB4MWEsIDB4MjIsIDB4OTB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDFhLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLAorICAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDEyLCAweGM4LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LAorICAweDA0LCAweGYwLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDNlLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDNlLCAweDQ0LCAweDgwfX0sCisgezB4MTI4NiwgNjQsIHsgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZiwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZiwgMHg0NCwgMHg4MCwKKyAgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHgyMiwgMHgwNSwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxNCwgMHgwMywgMHgwMCwKKyAgMHgwMCwgMHhjMSwgMHgxMSwgMHhjMSwgMHgxOCwgMHhjMSwgMHg5NSwgMHhjMSwgMHgxMCwgMHhjMSwgMHgxNiwgMHgwMSwgMHgwYSwgMHgwMCwgMHhjMX19LAorIHsweDEyYzYsIDY0LCB7IDB4OWIsIDB4MDAsIDB4OGUsIDB4MTgsIDB4OGYsIDB4MTksIDB4ZTUsIDB4MTksIDB4MTUsIDB4MTksIDB4YWUsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTgsIDB4NGUsCisgIDB4NjAsIDB4MDUsIDB4MTIsIDB4MGQsIDB4NGUsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGYsIDB4ZTcsIDB4MDAsIDB4MDIsIDB4MTN9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDA0LCAweDAwLCAweDAyLCAweDBmLCAweGJkLCAweDAwLCAweDAyLCAweDEwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwfX0sCisgezB4MTM0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZn19LAorIHsweDEzODYsIDY0LCB7IDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDAsIDB4MDMsIDB4MTIsCisgIDB4MGQsIDB4NWYsIDB4MTIsIDB4MGIsIDB4NDYsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsICAwLCAgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGFfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGFfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU2Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4YV9mdy5oCkBAIC0wLDAgKzEsNDQ5IEBACisvKiBrZXlzcGFuX3VzYTI4eGFfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2EyOHhhLmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTI4eGFfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDEyLCAweGY5fX0sCisgezB4MDAwMywgMTYsIHsgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMH19LAorIHsweDAwMTMsIDE2LCB7IDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwMDIzLCAxNSwgeyAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDA3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDIyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgwOSwgMHgxOCwgMHgxMiwgMHgxMywgMHgyNywgMHhlZiwgMHhjMywgMHg5NSwgMHgzYywgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkOCwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsIDB4MzAsIDB4MDMsIDB4M2IsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDI3LCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdlfX0sCisgezB4MDA3NiwgMTYsIHsgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MH19LAorIHsweDAwODYsIDE2LCB7IDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGMsIDB4Yzh9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDMyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgxMiwgMHgxMywgMHgyNywgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOX19LAorIHsweDAwYjYsIDE2LCB7IDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2R9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBjLCAweGM4LCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwMSwgMHg2MCwgMHgxMiwgMHgxMSwgMHhlNCwgMHg4Zn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTksIDB4MTIsIDB4MTMsIDB4MzMsIDB4OGYsIDB4MzYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTUsIDB4M2EsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4MGZ9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM2LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBiLCAweDVlLCAweGMyLCAweDBiLCAweGU1LCAweDE5fX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MTMsIDB4MDB9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDBlLCAweDBlfX0sCisgezB4MDEwNiwgNjQsIHsgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHhlNSwgMHgzNiwgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwKKyAgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZSwKKyAgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNiwgMHgxMiwgMHgwZiwgMHg1OSwgMHhlNSwgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwKKyAgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOH19LAorIHsweDAxNDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsCisgIDB4MGMsIDB4ZWQsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsCisgIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzEsIDB4YzIsIDB4MDUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTgsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2F9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDdlLCAweDc5LCAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLCAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDY4LCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDI0LAorICAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGJmLCAweDdmLCAweDAzLCAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGJmLCAweDQzLCAweDQ2LAorICAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweGU0LCAweDkwfX0sCisgezB4MDFjNiwgNjQsIHsgMHg3ZSwgMHgxMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgwMSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHg0MywgMHg5MCwgMHg3ZSwgMHgwMiwgMHhlMCwKKyAgMHhmZiwgMHgxMiwgMHgxMCwgMHg2OSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgxMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiZiwgMHg3ZiwgMHgwMywKKyAgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhiZiwgMHg0MywgMHg0NiwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MH19LAorIHsweDAyMDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsCisgIDB4N2UsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4MjUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsCisgIDB4ZjUsIDB4NDQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MDcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDIsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDdmLCAweDUzLCAweDQyLCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQyLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLAorICAweDEwLCAweGI1LCAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGRiLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweDhmLCAweDkwLAorICAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQyLCAweDdmLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweDhmLCAweDkwLCAweDdlLCAweDBjLAorICAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAyLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZkfX0sCisgezB4MDI4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwZSwgMHhlMCwgMHg2MCwKKyAgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzYSwgMHhhMywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgzYywgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgxMH19LAorIHsweDAyYzYsIDY0LCB7IDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDQsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsCisgIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MTIsIDB4ZWQsCisgIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2UsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTJ9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDExLCAweGJmLCAweGU0LCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLAorICAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGJmLCAweDc1LCAweDI5LCAweDAxLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE4LAorICAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQ0LCAweDQwLCAweDkwLCAweDdmLCAweDk4fX0sCisgezB4MDM0NiwgNjQsIHsgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwgMHgwZiwKKyAgMHg1MywgMHgzZSwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiZiwgMHg3NSwgMHgyYiwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwKKyAgMHg3ZSwgMHgxYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiZiwgMHhlNCwKKyAgMHhmNSwgMHgyYiwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMn19LAorIHsweDAzODYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGIsCisgIDB4OTAsIDB4N2UsIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsCisgIDB4MWYsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsIDB4ZjAsCisgIDB4NzQsIDB4MzUsIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4NTIsIDB4ZTUsIDB4Mzh9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDM4LCAweDIwLCAweDEzLCAweDQ5LCAweGU1LCAweDEzLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLAorICAweDNlLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGQyLCAweDEzLCAweDEyLCAweDEyLCAweGVkLCAweGVmLCAweDU0LCAweDAxLCAweGY1LAorICAweDE5LCAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJhLCAweGQyLCAweDA3LCAweDEyLCAweDEzLCAweDNmLCAweGVmLCAweDU0LCAweDgwLAorICAweGY1LCAweDE5LCAweDY1LCAweDI2LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI2LCAweGQyLCAweDA3LCAweDMwLCAweDBkLCAweDExLCAweDEyfX0sCisgezB4MDQwNiwgNjQsIHsgMHgxMywgMHgzZiwgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNSwgMHhkMiwgMHgwNywgMHgyMCwKKyAgMHgxYiwgMHgwMywgMHgwMiwgMHgwNywgMHhlYywgMHgzMCwgMHgwYSwgMHgxOCwgMHgxMiwgMHgxMywgMHg3YiwgMHhlZiwgMHhjMywgMHg5NSwgMHgzZCwgMHg0MCwKKyAgMHgwMywgMHgwMiwgMHgwNCwgMHhhZSwgMHg5MCwgMHg3ZiwgMHhjMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywKKyAgMHgzMCwgMHgwNCwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHg3YiwgMHhlZiwgMHhjM319LAorIHsweDA0NDYsIDY0LCB7IDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4MTQsIDB4ZjUsCisgIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2QsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsCisgIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGQsIDB4MTIsIDB4YzIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsCisgIDB4Y2MsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzIsIDB4MTIsIDB4MTMsIDB4N2IsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTB9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDdjLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLAorICAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdjLCAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdjLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBkLCAweDEyLAorICAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA1LAorICAweDM2LCAweDEyLCAweDEyLCAweDJlLCAweDhmLCAweDE5LCAweDEyLCAweDEzLCAweDg3LCAweDhmLCAweDM3LCAweGU1LCAweDE5LCAweGMzLCAweDk1fX0sCisgezB4MDRjNiwgNjQsIHsgMHgzYiwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHg2MywgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNywgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgwYywKKyAgMHg1ZSwgMHhjMiwgMHgwYywgMHhlNSwgMHgxOSwgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNywgMHgwMiwgMHhlNSwgMHgzNywgMHgzMCwKKyAgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwKKyAgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNywgMHgxMiwgMHgwZiwgMHg5MiwgMHhlNX19LAorIHsweDA1MDYsIDY0LCB7IDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsCisgIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDgsIDB4OTAsIDB4N2QsIDB4ODAsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4ODEsIDB4NzUsCisgIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsIDB4MGQsIDB4MzcsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4ZDAsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDcsIDB4OTcsIDB4YzIsIDB4MDYsIDB4ZTR9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGY1LCAweDE4LCAweDc0LCAweGMwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LAorICAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDIwLCAweDI0LCAweDIwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDIwLCAweGUwLCAweDYwLCAweDY4LAorICAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDEyLCAweDA5LCAweDdmLCAweDAzfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlNSwgMHg0NywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgyMSwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMSwgMHgyNywgMHg5MCwgMHg3ZSwgMHgyMiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg0ZCwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgzMSwgMHhlMCwKKyAgMHhmZCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsCisgIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsCisgIDB4MzMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MjUsIDB4ZTAsCisgIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGU1LCAweDQ1LCAweGYwLCAweDkwLCAweDdlLCAweDI3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQzLAorICAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQzLCAweDdmLCAweDUzLCAweDQzLCAweGZjLCAweDkwLCAweDdlLCAweDI5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQzLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDczLCAweDkwLCAweDdlLCAweDJiLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDk5LAorICAweGFmLCAweDQzLCAweDEyLCAweDExLCAweDAxLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQzLCAweDdmLCAweGFmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg0MywgMHgxMiwgMHgxMSwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgyYywgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMiwKKyAgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhmZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywKKyAgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMSwgMHg4MCwgMHgwMywKKyAgMHg1MywgMHg0NywgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMH19LAorIHsweDA2ODYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MzIsIDB4ZTAsIDB4ZjUsIDB4M2IsIDB4YTMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2QsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MzYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDUsIDB4YmYsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDEyLCAweDEzLCAweDU3LCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNmLCAweGZkLAorICAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDA5LCAweGU0LCAweGY1LCAweDMzLCAweGY1LCAweDMyLCAweGQyLCAweDA4LCAweDkwLCAweDdlLAorICAweDM3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDA5LCAweDc1LCAweDMyLAorICAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDM4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwfX0sCisgezB4MDcwNiwgNjQsIHsgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgzOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0NSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgzYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgwOSwKKyAgMHg3NSwgMHgzNCwgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMSwgMHhlNH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZTQsIDB4ZjUsIDB4MzQsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2MsIDB4ZTAsIDB4NjAsIDB4MGUsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4M2QsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2UsIDB4M2UsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MzUsIDB4MDEsIDB4ZTQsCisgIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2YsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTN9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE2LCAweGYwLCAweDc0LCAweDM2LCAweGYwLCAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGQxLCAweGYwLAorICAweDMwLCAweDFhLCAweDUyLCAweGU1LCAweDM5LCAweDYwLCAweDAyLCAweDE1LCAweDM5LCAweDMwLCAweDEzLCAweDQ5LCAweGU1LCAweDEzLCAweGQzLCAweDk0LAorICAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLCAweDNlLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGMyLCAweDEzLCAweDEyLAorICAweDEzLCAweDU3LCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDE5LCAweDY1LCAweDMzLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDMzLCAweGQyfX0sCisgezB4MDdjNiwgNjQsIHsgMHgwOCwgMHgxMiwgMHgxMywgMHg5MywgMHhlZiwgMHg1NCwgMHg4MCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZiwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyZiwgMHhkMiwKKyAgMHgwOCwgMHgzMCwgMHgwZSwgMHgxMSwgMHgxMiwgMHgxMywgMHg5MywgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNSwKKyAgMHg4NSwgMHgxOSwgMHgyZSwgMHhkMiwgMHgwOCwgMHgzMCwgMHgxYSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwKKyAgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwgMHgxNSwgMHg5MCwgMHg3YiwgMHg0MiwgMHhlMCwgMHhmNSwgMHgxNiwgMHg5MH19LAorIHsweDA4MDYsIDY0LCB7IDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDksIDB4MjAsIDB4ZTUsIDB4MGEsIDB4NzAsIDB4NDAsCisgIDB4MzAsIDB4MDcsIDB4MzksIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDcsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsCisgIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjV9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLAorICAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM4LCAweDEwLCAweGU0LCAweGY1LCAweDJjLCAweDc1LCAweDBhLCAweDAxLCAweDIyLAorICAweGU1LCAweDBhLCAweDY0LCAweDAxLCAweDcwLCAweDQwLCAweDMwLCAweDA4LCAweDM5LCAweGU1LCAweDM5LCAweDcwLCAweDM1LCAweGMyLCAweDA4LCAweGY1LAorICAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyfX0sCisgezB4MDg4NiwgNjQsIHsgMHgwZSwgMHg5YSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwKKyAgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgzOSwgMHgxMCwgMHhlNCwKKyAgMHhmNSwgMHgzNSwgMHg3NSwgMHgwYSwgMHgwMiwgMHgyMiwgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNiwgMHgzMCwgMHgxNCwgMHgyZiwgMHhjMiwKKyAgMHgxNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwZSwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMH19LAorIHsweDA4YzYsIDY0LCB7IDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsCisgIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDUsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4NzUsIDB4MGEsCisgIDB4MDMsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4NjAsIDB4MzAsIDB4MTUsIDB4MTUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsCisgIDB4MTQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDAzLCAweGRiLAorICAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDBhLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDBlLAorICAweGYyLCAweDBhLCAweDA4LCAweDAwLCAweDBhLCAweDdjLCAweDAxLCAweDBhLCAweGU4LCAweDAzLCAweDA5LCAweDQ0LCAweDA2LCAweDA5LCAweGZiLCAweDA4LAorICAweDA5LCAweGY1LCAweDA5LCAweDA5LCAweGRkLCAweDBhLCAweDA5LCAweGVjLCAweDBiLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweDkwLCAweDdmfX0sCisgezB4MDk0NiwgNjQsIHsgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOSwgMHgxNCwgMHg2MCwgMHg2MSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwOSwgMHhkMywgMHg3NCwKKyAgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3NCwgMHg3NSwgMHg4MywgMHgxOX19LAorIHsweDA5ODYsIDY0LCB7IDB4ZjAsIDB4NzUsIDB4ODIsIDB4NjYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4MDQsIDB4NzUsIDB4ODIsIDB4MTcsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsCisgIDB4NzQsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGYsCisgIDB4MTgsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGQsIDB4ZWEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4ZTksIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjB9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDA5LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDA5LCAweDAyLCAweDBiLCAweDNlLCAweDEyLCAweDBiLAorICAweDQ2LCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyfX0sCisgezB4MGEwNiwgNjQsIHsgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwKKyAgMHhhMiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwKKyAgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3Zn19LAorIHsweDBhNDYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsCisgIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjQsIDB4MDJ9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDEwLCAweDAyLCAweDBiLCAweDNlLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LAorICAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLAorICAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MGFjNiwgNjQsIHsgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwKKyAgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwKKyAgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgxMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMH19LAorIHsweDBiMDYsIDY0LCB7IDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsCisgIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsCisgIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLAorICAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE4LAorICAweGYwLCAweGU0LCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweGU0LCAweGY1LAorICAweDI0LCAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhfX0sCisgezB4MGI4NiwgNjQsIHsgMHhlNCwgMHgxMiwgMHgwZSwgMHhlMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYSwgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwKKyAgMHhmNSwgMHgxMywgMHhmNSwgMHgzNiwgMHhjMiwgMHgwNywgMHhjMiwgMHgwYiwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgxMywKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg3NSwgMHg0NCwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwKKyAgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiZiwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4ZiwgMHg5MCwgMHg3Zn19LAorIHsweDBiYzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDAsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4NDYsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsCisgIDB4MTIsIDB4MTEsIDB4YmYsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YmYsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTF9fSwKKyB7MHgwYzA2LCA2NCwgeyAweGJmLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDc4LCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGJmLCAweDdmLCAweDEzLCAweDdkLCAweDAxLAorICAweDEyLCAweDExLCAweGJmLCAweDIwLCAweDFiLCAweDAzLCAweDAyLCAweDBjLCAweGM1LCAweDc1LCAweDJkLCAweDAxLCAweDc1LCAweDE4LCAweDAxLCAweDdiLAorICAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LAorICAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNiLCAweDAxLCAweGU0LCAweGY1LCAweDM5LCAweGY1LCAweDEzLCAweGY1LCAweDM3fX0sCisgezB4MGM0NiwgNjQsIHsgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgxMywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwKKyAgMHhmMCwgMHg3NSwgMHg0NSwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMiwKKyAgMHgwOSwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MywgMHgxMiwgMHgxMSwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg3ZiwgMHgwMSwKKyAgMHg4ZiwgMHg0MSwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMH19LAorIHsweDBjODYsIDY0LCB7IDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZTQsIDB4ZmYsCisgIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4OTksCisgIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTIsIDB4MDksIDB4N2YsIDB4MTMsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZDJ9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LAorICAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LAorICAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLAorICAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweDA1fX0sCisgezB4MGQwNiwgNjQsIHsgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwKKyAgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNX19LAorIHsweDBkNDYsIDY0LCB7IDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsCisgIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsCisgIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ZDIsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwLCAweGQyLCAweGU4LCAweDQzLAorICAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LAorICAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLAorICAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDFhfX0sCisgezB4MGRjNiwgNjQsIHsgMHgxMiwgMHgxMiwgMHg1MywgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhhMSwKKyAgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxNywgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMiwgMHgwNSwgMHhkMiwgMHgxYSwgMHgxMiwKKyAgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxNywgMHg4MCwgMHgwOCwgMHgzMCwgMHgxMiwgMHgwNSwgMHhjMiwgMHgxYSwgMHgxMiwKKyAgMHgwMCwgMHg0NiwgMHgzMCwgMHgxMSwgMHgwNywgMHhjMiwgMHgxMSwgMHgxMiwgMHgwOSwgMHgyMSwgMHg4MCwgMHhkNiwgMHgzMCwgMHgxOCwgMHhkM319LAorIHsweDBlMDYsIDY0LCB7IDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4OWYsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NDcsCisgIDB4MDIsIDB4MGUsIDB4NTUsIDB4MDIsIDB4MGQsIDB4N2QsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsCisgIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsCisgIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDEyLAorICAweGJhLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLAorICAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LAorICAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4fX0sCisgezB4MGU4NiwgNjQsIHsgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwKKyAgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwKKyAgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwKKyAgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNX19LAorIHsweDBlYzYsIDY0LCB7IDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsCisgIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsCisgIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDF9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLAorICAweGRmLCAweDhmLCAweDE4LCAweGU0LCAweGY1LCAweDE5LCAweDc1LCAweDFhLCAweGZmLCAweDc1LCAweDFiLCAweDE5LCAweDc1LCAweDFjLCAweDg2LCAweGFiLAorICAweDFhLCAweGFhLCAweDFiLCAweGE5LCAweDFjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDBlLCAweGIzLCAweGI0LCAweDAzLCAweDFkLCAweGFmLCAweDE5LAorICAweDA1LCAweDE5LCAweGVmLCAweGI1LCAweDE4LCAweDAxLCAweDIyLCAweDEyLCAweDBlLCAweDlhLCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlfX0sCisgezB4MGY0NiwgNjQsIHsgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwKKyAgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwKKyAgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwKKyAgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MH19LAorIHsweDBmODYsIDY0LCB7IDB4MGEsIDB4MTIsIDB4MTMsIDB4MzMsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsCisgIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsCisgIDB4MTMsIDB4NGIsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsCisgIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4ODcsIDB4OGYsIDB4MWEsIDB4ZWZ9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LAorICAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LAorICAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLAorICAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDExfX0sCisgezB4MTAwNiwgNjQsIHsgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwKKyAgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwKKyAgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwKKyAgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDEwNDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0fX0sCisgezB4MTBjNiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywKKyAgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYn19LAorIHsweDExMDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDV9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LAorICAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwfX0sCisgezB4MTE4NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwKKyAgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNX19LAorIHsweDExYzYsIDY0LCB7IDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4MWIsCisgIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsIDB4MWIsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTIsIDB4MTMsIDB4MWIsCisgIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTMsIDB4MWIsIDB4OGYsIDB4MWIsIDB4ODAsIDB4ZTh9fSwKKyB7MHgxMjA2LCA2NCwgeyAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLAorICAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDEzLCAweDZmLCAweDhmLCAweDFhLCAweDEyLCAweDEzLCAweDZmLCAweDhmLAorICAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLCAweDEzLCAweDZmLCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1fX0sCisgezB4MTI0NiwgNjQsIHsgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg2ZiwgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwKKyAgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYSwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwKKyAgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxMiwgMHhkNiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwKKyAgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZSwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiZiwgMHg5MCwgMHg3Zn19LAorIHsweDEyODYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsIDB4MTEsCisgIDB4YmYsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2YsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MDksIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2YsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsCisgIDB4MTIsIDB4MDksIDB4MjIsIDB4MDUsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTQsIDB4MDMsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxLCAweDliLCAweDAwLCAweDhlLAorICAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLCAweDE1LCAweDE4LCAweDRlLCAweDYwLCAweDA1LAorICAweDEyLCAweDBkLCAweDVjLCAweDgwLCAweGVlLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLAorICAweGZmLCAweDIyLCAweDUzLCAweGQ4LCAweGVmLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBmLCAweGY1LCAweDAwLCAweDAyLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwZiwgMHhjYiwgMHgwMCwgMHgwMiwgMHgxMCwgMHgxYywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MH19LAorIHsweDEzNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmZ9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDEyLCAweDAwLCAweDAzLCAweDEyLCAweDBkLCAweDZkLCAweDEyLCAweDBiLAorICAweDQ2LCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsICA0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLCAgMCwgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGJfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4eGJfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWZjYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4Yl9mdy5oCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBrZXlzcGFuX3VzYTI4eGJfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2EyOXhiX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMjh4Yl9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MmR9fSwKKyB7MHgwMDJkLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgwOSwgMHgxOCwgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHhjMywgMHg5NSwgMHgzYywgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkOCwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsIDB4MzAsIDB4MDMsIDB4M2IsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDMzLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdlfX0sCisgezB4MDA3NiwgMTYsIHsgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MH19LAorIHsweDAwODYsIDE2LCB7IDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGMsIDB4Y2N9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDMyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOX19LAorIHsweDAwYjYsIDE2LCB7IDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2R9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBjLCAweGNjLCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwMSwgMHg2MCwgMHgxMiwgMHgxMSwgMHhmNSwgMHg4Zn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTksIDB4MTIsIDB4MTMsIDB4M2YsIDB4OGYsIDB4MzYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTUsIDB4M2EsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4MWJ9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM2LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBiLCAweDVlLCAweGMyLCAweDBiLCAweGU1LCAweDE5fX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MTMsIDB4MDB9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwfX0sCisgezB4MDAxMywgMTYsIHsgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMH19LAorIHsweDAwMjMsIDEwLCB7IDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDBlLCAweDEyfX0sCisgezB4MDEwNiwgNjQsIHsgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHhlNSwgMHgzNiwgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwKKyAgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZSwKKyAgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNiwgMHgxMiwgMHgwZiwgMHg1ZCwgMHhlNSwgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwKKyAgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOH19LAorIHsweDAxNDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsCisgIDB4MGMsIDB4ZjEsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsCisgIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzEsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4Nzl9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLCAweDEyLCAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LAorICAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDY4LCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLAorICAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGQwLCAweDdmLCAweDAzLCAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGQwLCAweDQzLCAweDQ2LCAweDgwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweGU0LCAweDkwLCAweDdlLCAweDEzfX0sCisgezB4MDFjNiwgNjQsIHsgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgwMSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHg1NCwgMHg5MCwgMHg3ZSwgMHgwMiwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMCwgMHg3YSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgxMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhkMCwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywKKyAgMHgxMiwgMHgxMSwgMHhkMCwgMHg0MywgMHg0NiwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwKKyAgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMH19LAorIHsweDAyMDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MTMsCisgIDB4ZjAsIDB4NzUsIDB4MjUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDQsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDcsIDB4ZTAsCisgIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDIsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDIsIDB4N2YsIDB4NTN9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDQyLCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQyLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGM2LAorICAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGVjLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweGEwLCAweDkwLCAweDdlLCAweDAzLAorICAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQyLCAweDdmLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweGEwLCAweDkwLCAweDdlLCAweDBjLCAweGUwLCAweDYwLAorICAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAyLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZkLCAweDkwLCAweDdmfX0sCisgezB4MDI4NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywKKyAgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzYSwgMHhhMywgMHhlMCwgMHgxMywKKyAgMHg5MiwgMHgwZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgzYywgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgxMCwgMHg4MCwgMHgwM319LAorIHsweDAyYzYsIDY0LCB7IDB4NTMsIDB4NDYsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDQsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsCisgIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MTMsIDB4MGYsIDB4ZWYsIDB4NTQsCisgIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2UsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4ZDB9fSwKKyB7MHgwMzA2LCA2NCwgeyAweGU0LCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLCAweDAyLCAweGU0LAorICAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGQwLCAweDc1LCAweDI5LCAweDAxLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE4LCAweGUwLCAweDYwLAorICAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGQyLAorICAweDAwLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQ0LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MDM0NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZSwKKyAgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhkMCwgMHg3NSwgMHgyYiwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYiwKKyAgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhkMCwgMHhlNCwgMHhmNSwgMHgyYiwKKyAgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNX19LAorIHsweDAzODYsIDY0LCB7IDB4NDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGIsIDB4OTAsIDB4N2UsCisgIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MWYsIDB4ZTAsCisgIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4NzQsIDB4MzUsCisgIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4YzIsIDB4MDUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4NTQsIDB4ZTUsIDB4Mzh9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDM4LCAweDIwLCAweDEzLCAweDRiLCAweGU1LCAweDEzLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLAorICAweDQwLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGQyLCAweDEzLCAweDEyLCAweDEzLCAweDBmLCAweGVmLCAweDU0LCAweDAxLCAweGY1LAorICAweDE5LCAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJhLCAweGQyLCAweDA3LCAweDEyLCAweDEzLCAweDRiLCAweGVmLCAweDU0LCAweDgwLAorICAweDY0LCAweDgwLCAweGY1LCAweDE5LCAweDY1LCAweDI2LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI2LCAweGQyLCAweDA3LCAweDMwLCAweDBkfX0sCisgezB4MDQwNiwgNjQsIHsgMHgxMSwgMHgxMiwgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNSwgMHhkMiwKKyAgMHgwNywgMHgyMCwgMHgxYiwgMHgwMywgMHgwMiwgMHgwNywgMHhmMCwgMHgzMCwgMHgwYSwgMHgxOCwgMHgxMiwgMHgxMywgMHg4NywgMHhlZiwgMHhjMywgMHg5NSwKKyAgMHgzZCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNCwgMHhiMCwgMHg5MCwgMHg3ZiwgMHhjMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwMCwKKyAgMHg4MCwgMHg3NywgMHgzMCwgMHgwNCwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHg4N319LAorIHsweDA0NDYsIDY0LCB7IDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsCisgIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2QsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsCisgIDB4N2QsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGQsIDB4MTYsIDB4YzIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4ODAsIDB4MzksCisgIDB4OTAsIDB4N2YsIDB4Y2MsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzIsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTB9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDI5LCAweDkwLCAweDdjLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLAorICAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdjLCAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdjLCAweDc1LCAweDBkLCAweGMxLCAweDEyLAorICAweDBkLCAweDE2LCAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDMwLCAweGUxLCAweDAzLAorICAweDAyLCAweDA1LCAweDM4LCAweDEyLCAweDEyLCAweDNmLCAweDhmLCAweDE5LCAweDEyLCAweDEzLCAweDkzLCAweDhmLCAweDM3LCAweGU1LCAweDE5fX0sCisgezB4MDRjNiwgNjQsIHsgMHhjMywgMHg5NSwgMHgzYiwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHg2ZiwgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNywgMHgyMCwgMHhlNywgMHgwMywKKyAgMHgzMCwgMHgwYywgMHg1ZSwgMHhjMiwgMHgwYywgMHhlNSwgMHgxOSwgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNywgMHgwMiwgMHhlNSwKKyAgMHgzNywgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwKKyAgMHgwOCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNywgMHgxMiwgMHgwZn19LAorIHsweDA1MDYsIDY0LCB7IDB4OTYsIDB4ZTUsIDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsCisgIDB4MDMsIDB4NzUsIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDgsIDB4OTAsIDB4N2QsIDB4ODAsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsCisgIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsIDB4MGQsIDB4M2IsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YmIsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDAsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDcsIDB4OTksIDB4ZTR9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGY1LCAweDE4LCAweDc0LCAweGMwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LAorICAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDIwLCAweDI0LCAweDIwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDIwLCAweGUwLCAweDYwLCAweDY4LAorICAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDEyLCAweDFhLCAweDdmLCAweDAzfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlNSwgMHg0NywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgyMSwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMSwgMHgzOCwgMHg5MCwgMHg3ZSwgMHgyMiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg1ZSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgzMSwgMHhlMCwKKyAgMHhmZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMiwgMHgxYSwgMHg0MywgMHg0NywgMHg4MCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsCisgIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsCisgIDB4MzMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MjUsIDB4ZTAsCisgIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGU1LCAweDQ1LCAweGYwLCAweDkwLCAweDdlLCAweDI3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQzLAorICAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQzLCAweDdmLCAweDUzLCAweDQzLCAweGZjLCAweDkwLCAweDdlLCAweDI5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQzLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDg0LCAweDkwLCAweDdlLCAweDJiLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweGFhLAorICAweGFmLCAweDQzLCAweDEyLCAweDExLCAweDEyLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQzLCAweDdmLCAweGFmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg0MywgMHgxMiwgMHgxMSwgMHgxMiwgMHg5MCwgMHg3ZSwgMHgyYywgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMiwKKyAgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhmZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywKKyAgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMSwgMHg4MCwgMHgwMywKKyAgMHg1MywgMHg0NywgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMH19LAorIHsweDA2ODYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MzIsIDB4ZTAsIDB4ZjUsIDB4M2IsIDB4YTMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2QsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MzYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDUsIDB4YmYsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDEyLCAweDEzLCAweDYzLCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNmLCAweGZkLAorICAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDFhLCAweGU0LCAweGY1LCAweDMzLCAweGY1LCAweDMyLCAweGQyLCAweDA4LCAweDkwLCAweDdlLAorICAweDM3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDFhLCAweDc1LCAweDMyLAorICAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDM4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwfX0sCisgezB4MDcwNiwgNjQsIHsgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgzOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0NSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgzYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgxYSwKKyAgMHg3NSwgMHgzNCwgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMSwgMHhlNH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4ZTQsIDB4ZjUsIDB4MzQsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2MsIDB4ZTAsIDB4NjAsIDB4MGUsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4M2QsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2UsIDB4M2UsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MzUsIDB4MDEsIDB4ZTQsCisgIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2YsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTN9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE2LCAweGYwLCAweDc0LCAweDM2LCAweGYwLCAweGQyLCAweDA0LCAweGMyLCAweDA2LCAweGU0LCAweDkwLCAweDdmLAorICAweGQxLCAweGYwLCAweDMwLCAweDFhLCAweDU0LCAweGU1LCAweDM5LCAweDYwLCAweDAyLCAweDE1LCAweDM5LCAweDMwLCAweDEzLCAweDRiLCAweGU1LCAweDEzLAorICAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLCAweDQwLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGMyLAorICAweDEzLCAweDEyLCAweDEzLCAweDYzLCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDE5LCAweDY1LCAweDMzLCAweDYwLCAweDA1LCAweDg1LCAweDE5fX0sCisgezB4MDdjNiwgNjQsIHsgMHgzMywgMHhkMiwgMHgwOCwgMHgxMiwgMHgxMywgMHg5ZiwgMHhlZiwgMHg1NCwgMHg4MCwgMHg2NCwgMHg4MCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZiwgMHg2MCwgMHgwNSwKKyAgMHg4NSwgMHgxOSwgMHgyZiwgMHhkMiwgMHgwOCwgMHgzMCwgMHgwZSwgMHgxMSwgMHgxMiwgMHgxMywgMHg5ZiwgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwKKyAgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyZSwgMHhkMiwgMHgwOCwgMHgzMCwgMHgxYSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwKKyAgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwgMHgxNSwgMHg5MCwgMHg3YiwgMHg0Mn19LAorIHsweDA4MDYsIDY0LCB7IDB4ZTAsIDB4ZjUsIDB4MTYsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsCisgIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDksIDB4MjQsCisgIDB4ZTUsIDB4MGEsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MDcsIDB4MzksIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDcsIDB4ZjUsIDB4MTgsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWV9fSwKKyB7MHgwODQ2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM4LCAweDEwLCAweGU0LCAweGY1LCAweDJjLAorICAweDc1LCAweDBhLCAweDAxLCAweDIyLCAweGU1LCAweDBhLCAweDY0LCAweDAxLCAweDcwLCAweDQwLCAweDMwLCAweDA4LCAweDM5LCAweGU1LCAweDM5LCAweDcwLAorICAweDM1LCAweGMyLCAweDA4LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGVlfX0sCisgezB4MDg4NiwgNjQsIHsgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5ZSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwKKyAgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwKKyAgMHg3NSwgMHgzOSwgMHgxMCwgMHhlNCwgMHhmNSwgMHgzNSwgMHg3NSwgMHgwYSwgMHgwMiwgMHgyMiwgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNiwKKyAgMHgzMCwgMHgxNCwgMHgyZiwgMHhjMiwgMHgxNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwZSwgMHgyNSwgMHgxOH19LAorIHsweDA4YzYsIDY0LCB7IDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWUsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDUsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsCisgIDB4MDUsIDB4ZjAsIDB4NzUsIDB4MGEsIDB4MDMsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4NjAsIDB4MzAsIDB4MTUsIDB4MTUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MTQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OWV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDBhLCAweDIyLCAweDkwLCAweDdmLAorICAweGU5LCAweGUwLCAweDEyLCAweDBlLCAweGY2LCAweDBhLCAweDBjLCAweDAwLCAweDBhLCAweDgwLCAweDAxLCAweDBhLCAweGVjLCAweDAzLCAweDA5LCAweDQ4LAorICAweDA2LCAweDA5LCAweGZmLCAweDA4LCAweDA5LCAweGY5LCAweDA5LCAweDA5LCAweGUxLCAweDBhLCAweDA5LCAweGYwLCAweDBiLCAweDAwLCAweDAwfX0sCisgezB4MDk0NiwgNjQsIHsgMHgwYiwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOSwgMHgxNCwgMHg2MCwgMHg2MSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywKKyAgMHgwMiwgMHgwOSwgMHhkNywgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwKKyAgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwKKyAgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4Mn19LAorIHsweDA5ODYsIDY0LCB7IDB4NzQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NjYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsCisgIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4MDQsIDB4NzUsIDB4ODIsIDB4MTcsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzQsIDB4MTksCisgIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4MWMsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGQsIDB4ZWEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4ZTl9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDA5LCAweGYwLAorICAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDA5LCAweDAyLAorICAweDBiLCAweDQyLCAweDEyLCAweDBiLCAweDRhLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwfX0sCisgezB4MGEwNiwgNjQsIHsgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwKKyAgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywKKyAgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwKKyAgMHg0MiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMn19LAorIHsweDBhNDYsIDY0LCB7IDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsCisgIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsCisgIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmV9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLAorICAweDEwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLAorICAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfX0sCisgezB4MGFjNiwgNjQsIHsgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwKKyAgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwKKyAgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgxMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNH19LAorIHsweDBiMDYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsCisgIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTB9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLAorICAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDE4LCAweGYwLCAweGU0LCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLAorICAweGRlLCAweGYwLCAweGU0LCAweGY1LCAweDI0LCAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDE4LCAweGY5fX0sCisgezB4MGI4NiwgNjQsIHsgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwZSwgMHhlNCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYSwKKyAgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwgMHhmNSwgMHgxMywgMHhmNSwgMHgzNiwgMHhjMiwgMHgwNywgMHhjMiwgMHgwYiwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMCwKKyAgMHhjMiwgMHgwOSwgMHhjMiwgMHgxMywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg3NSwgMHg0NCwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhkMCwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MiwgMHgxMn19LAorIHsweDBiYzYsIDY0LCB7IDB4MTAsIDB4YTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDAsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4NDYsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsCisgIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2UsIDB4MTIsCisgIDB4MTEsIDB4ZDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDV9fSwKKyB7MHgwYzA2LCA2NCwgeyAweDdkLCAweDdmLCAweDEyLCAweDExLCAweGQwLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDg5LCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGQwLAorICAweDdmLCAweDEzLCAweDdkLCAweDA5LCAweDEyLCAweDExLCAweGQwLCAweDIwLCAweDFiLCAweDAzLCAweDAyLCAweDBjLCAweGM5LCAweDc1LCAweDJkLCAweDAxLAorICAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLAorICAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNiLCAweDAxLCAweGU0LCAweGY1LCAweDM5fX0sCisgezB4MGM0NiwgNjQsIHsgMHhmNSwgMHgxMywgMHhmNSwgMHgzNywgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgxMywgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg3NSwgMHg0NSwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywKKyAgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MywgMHgxMiwgMHgxMSwgMHgxMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwYSwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MSwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBjODYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsCisgIDB4MTIsIDB4MWEsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4N2YsCisgIDB4MDEsIDB4MTIsIDB4MTIsIDB4YWEsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTIsIDB4MWEsIDB4N2YsIDB4MTMsIDB4N2QsIDB4MDl9fSwKKyB7MHgwY2M2LCA2NCwgeyAweDEyLCAweDEyLCAweDFhLCAweGQyLCAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LAorICAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLAorICAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLAorICAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwfX0sCisgezB4MGQwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwKKyAgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwKKyAgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNX19LAorIHsweDBkNDYsIDY0LCB7IDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsCisgIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsCisgIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsCisgIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ZDIsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTJ9fSwKKyB7MHgwZDg2LCA2NCwgeyAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLAorICAweGYwLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLAorICAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLAorICAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0LCAweDBkLCAweGYwfX0sCisgezB4MGRjNiwgNjQsIHsgMHhkMiwgMHhhZiwgMHhkMiwgMHgxYSwgMHgxMiwgMHgxMiwgMHg2NCwgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwKKyAgMHgxMiwgMHg5MCwgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxNywgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMiwKKyAgMHgwNSwgMHhkMiwgMHgxYSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxNywgMHg4MCwgMHgwOCwgMHgzMCwgMHgxMiwKKyAgMHgwNSwgMHhjMiwgMHgxYSwgMHgxMiwgMHgwMCwgMHg0NiwgMHgzMCwgMHgxMSwgMHgwNywgMHhjMiwgMHgxMSwgMHgxMiwgMHgwOSwgMHgyNSwgMHg4MH19LAorIHsweDBlMDYsIDY0LCB7IDB4ZDYsIDB4MzAsIDB4MTgsIDB4ZDMsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4YWIsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsCisgIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NDcsIDB4MDIsIDB4MGUsIDB4NTksIDB4MDIsIDB4MGQsIDB4ODEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsCisgIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsCisgIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLAorICAweDQwLCAweDgwLCAweDkwLCAweDEyLCAweGNiLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLAorICAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLAorICAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzfX0sCisgezB4MGU4NiwgNjQsIHsgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywKKyAgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwKKyAgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwKKyAgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMn19LAorIHsweDBlYzYsIDY0LCB7IDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsCisgIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsCisgIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsCisgIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTN9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLAorICAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweDhmLCAweDE4LCAweGU0LCAweGY1LCAweDE5LCAweDc1LCAweDFhLCAweGZmLCAweDc1LCAweDFiLCAweDE5LAorICAweDc1LCAweDFjLCAweDg2LCAweGFiLCAweDFhLCAweGFhLCAweDFiLCAweGE5LCAweDFjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDBlLCAweGI3LCAweGI0LAorICAweDAzLCAweDFkLCAweGFmLCAweDE5LCAweDA1LCAweDE5LCAweGVmLCAweGI1LCAweDE4LCAweDAxLCAweDIyLCAweDEyLCAweDBlLCAweDllLCAweDdlfX0sCisgezB4MGY0NiwgNjQsIHsgMHgwMCwgMHgyOSwgMHhmZiwgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwKKyAgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwKKyAgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgwZCwgMHhlNSwKKyAgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNX19LAorIHsweDBmODYsIDY0LCB7IDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4M2YsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsCisgIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsCisgIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsIDB4MTMsIDB4NTcsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsCisgIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTN9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDkzLCAweDhmLCAweDFhLCAweGVmLCAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLAorICAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LAorICAweDI3LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDIwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDA3LCAweGYwLCAweGU0LCAweDkwLAorICAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDIyfX0sCisgezB4MTAwNiwgNjQsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxMSwKKyAgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwKKyAgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwKKyAgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOH19LAorIHsweDEwNDYsIDY0LCB7IDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjB9fSwKKyB7MHgxMDg2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLAorICAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyfX0sCisgezB4MTBjNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDExMDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsCisgIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsCisgIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LAorICAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmfX0sCisgezB4MTE4NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYn19LAorIHsweDExYzYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsCisgIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsCisgIDB4MjcsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTJ9fSwKKyB7MHgxMjA2LCA2NCwgeyAweDEzLCAweDI3LCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDFiLCAweDgwLCAweGU4LAorICAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFhLCAweDEyLCAweDEzfX0sCisgezB4MTI0NiwgNjQsIHsgMHg3YiwgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwgMHg2NSwKKyAgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwKKyAgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYSwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwKKyAgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxMiwgMHhlNywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NH19LAorIHsweDEyODYsIDY0LCB7IDB4MDQsIDB4ZjAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2UsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsCisgIDB4MTEsIDB4ZDAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2YsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MWEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2YsIDB4NDQsIDB4ODB9fSwKKyB7MHgxMmM2LCA2NCwgeyAweGZkLCAweDEyLCAweDEyLCAweDFhLCAweDIyLCAweDA1LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE0LCAweDAzLCAweDAwLCAweDAwLAorICAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxLCAweDliLCAweDAwLAorICAweDhlLCAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLCAweDE1LCAweDE4LCAweDRlLCAweDYwLAorICAweDA1LCAweDEyLCAweDBkLCAweDYwLCAweDgwLCAweGVlLCAweDIyLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweDA2LCAweDAwLCAweDAyLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgxMCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MH19LAorIHsweDEzNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmZ9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDEyLCAweDBmLCAweGNmLCAweDEyLCAweDBkLCAweDcxLCAweDEyLCAweDBiLCAweDRhLCAweDIyLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsICA0LCB7IDB4NzIsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLCAgMCwgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5bXNnLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OW1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2IyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OW1zZy5oCkBAIC0wLDAgKzEsMjgyIEBACisvKgorCXVzYTQ5bXNnLmgKKworCUNvcHlyaWdodCAoQykgMTk5OC0yMDAwIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwlLZXlzcGFuIFVTQiBBc3luYyBNZXNzYWdlIEZvcm1hdHMgZm9yIHRoZSBVU0E0OVcKKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKwltZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhpcyBsaWNlbmNlIHRleHQKKyAgIAl3aXRob3V0IG1vZGlmaWNhdGlvbiwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICAJZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgCXRoZSBiZWdpbm5pbmcgb2YgYWxsIHNvdXJjZSBmaWxlczoKKworICAgICAgICAJQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAJcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICAJcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSU5OT1NZUyBDT1JQLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisJSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworCU9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisJTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworCShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorCVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisJQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisJTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorCU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKwlTVUNIIERBTUFHRS4gICAgCisKKwk0dGggcmV2aXNpb246IFVTQTQ5VyB2ZXJzaW9uCisKKwlCdWZmZXIgZm9ybWF0cyBmb3IgUlgvVFggZGF0YSBtZXNzYWdlcyBhcmUgbm90IGRlZmluZWQgYnkKKwlhIHN0cnVjdHVyZSwgYnV0IGFyZSBkZXNjcmliZWQgaGVyZToKKworCVVTQiBPVVQgKGhvc3QgLT4gVVNBeHgsIHRyYW5zbWl0KSBtZXNzYWdlcyBjb250YWluIGEgCisJUkVRVUVTVF9BQ0sgaW5kaWNhdG9yIChzZXQgdG8gMHhmZiB0byByZXF1ZXN0IGFuIEFDSyBhdCB0aGUgCisJY29tcGxldGlvbiBvZiB0cmFuc21pdDsgMHgwMCBvdGhlcndpc2UpLCBmb2xsb3dlZCBieSBkYXRhOgorCisJCVJRU1RBQ0sgREFUIERBVCBEQVQgLi4uCisKKwl3aXRoIGEgdG90YWwgZGF0YSBsZW5ndGggb2YgNjMuCisKKwlVU0IgSU4gKFVTQXh4IC0+IGhvc3QsIHJlY2VpdmUpIG1lc3NhZ2VzIGJlZ2luIHdpdGggYSBzdGF0dXMKKwlieXRlIGluIHdoaWNoIHRoZSAweDgwIGJpdCBpcyBlaXRoZXI6CisJCQkJICAgCQorCQkoYSkJMHg4MCBiaXQgY2xlYXIKKwkJCWluZGljYXRlcyB0aGF0IHRoZSBieXRlcyBmb2xsb3dpbmcgaXQgYXJlIGFsbCBkYXRhCisJCQlieXRlczoKKworCQkJCVNUQVQgREFUQSBEQVRBIERBVEEgREFUQSBEQVRBIC4uLgorCisJCQlmb3IgYSB0b3RhbCBvZiB1cCB0byA2MyBEQVRBIGJ5dGVzLAorCisJb3I6CisKKwkJKGIpCTB4ODAgYml0IHNldAorCQkJaW5kaWF0ZXMgdGhhdCB0aGUgYnl0ZXMgZm9sbG93aW5nIGFsdGVybmF0ZSBkYXRhIGFuZAorCQkJc3RhdHVzIGJ5dGVzOgorCisJCQkJU1RBVCBEQVRBIFNUQVQgREFUQSBTVEFUIERBVEEgU1RBVCBEQVRBIC4uLgorCisJCQlmb3IgYSB0b3RhbCBvZiB1cCB0byAzMiBEQVRBIGJ5dGVzLgorCisJVGhlIHZhbGlkIGJpdHMgaW4gdGhlIFNUQVQgYnl0ZXMgYXJlOgorCisJCU9WRVJSVU4JMHgwMgorCQlQQVJJVFkJMHgwNAorCQlGUkFNSU5HCTB4MDgKKwkJQlJFQUsJMHgxMAorCisJTm90ZXM6CisJCisJKDEpIFRoZSBPVkVSUlVOIGJpdCBjYW4gYXBwZWFyIGluIGVpdGhlciAoYSkgb3IgKGIpIGZvcm1hdAorCQltZXNzYWdlcywgYnV0IHRoZSBidXQgdGhlIFBBUklUWS9GUkFNSU5HL0JSRUFLIGJpdHMKKwkJb25seSBhcHBlYXIgaW4gKGIpIGZvcm1hdCBtZXNzYWdlcy4KKwkoMikgRm9yIHRoZSBob3N0IHRvIGRldGVybWluZSB0aGUgZXhhY3QgcG9pbnQgYXQgd2hpY2ggdGhlCisJCW92ZXJydW4gb2NjdXJyZWQgKHRvIGlkZW50aWZ5IHRoZSBwb2ludCBpbiB0aGUgZGF0YQorCQlzdHJlYW0gYXQgd2hpY2ggdGhlIGRhdGEgd2FzIGxvc3QpLCBpdCBuZWVkcyB0byBjb3VudAorCQkxMjggY2hhcmFjdGVycywgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUKKwkJbWVzc2FnZSBpbiB3aGljaCBPVkVSUlVOIHdhcyByZXBvcnRlZDsgdGhlIGxvc3QgY2hhcmFjdGVyKHMpCisJCXdvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZXR3ZWVuIHRoZSAxMjh0aCBhbmQgMTI5dGgKKwkJY2hhcmFjdGVycy4KKwkoMykJQW4gUlggZGF0YSBtZXNzYWdlIGluIHdoaWNoIHRoZSBmaXJzdCBieXRlIGhhcyAweDgwIGNsZWFyCisJCXNlcnZlcyBhcyBhICJicmVhayBvZmYiIGluZGljYXRvci4KKwkoNCkJYSBjb250cm9sIG1lc3NhZ2Ugc3BlY2lmeWluZyBkaXNhYmxlUG9ydCB3aWxsIGJlIGFuc3dlcmVkCisJCXdpdGggYSBzdGF0dXMgbWVzc2FnZSwgYnV0IG5vIGZ1cnRoZXIgc3RhdHVzIHdpbGwgYmUgc2VudAorCQl1bnRpbCBhIGNvbnRyb2wgbWVzc2FnZXMgd2l0aCBlbmFibGVQb3J0IGlzIHNlbnQKKworCXJldmlzaW9uIGhpc3Rvcnk6CisKKwkxOTk5ZmViMTAJYWRkIHJlcG9ydEhza2lhQ2hhbmdlcyB0byBhbGxvdyB1cyB0byBpZ25vcmUgdGhlbQorCTE5OTlmZWIxMAlhZGQgdHhBY2tUaHJlc2hvbGQgZm9yIGZhc3QrbG9vc2UgdGhyb3VnaHB1dCBlbmhhbmNlbWVudAorCTE5OTltYXIzMAliZWVmIHVwIHN1cHBvcnQgZm9yIFJYIGVycm9yIHJlcG9ydGluZworCTE5OTlhcHIxNAlhZGQgcmVzZXREYXRhVG9nZ2xlIHRvIGNvbnRyb2wgbWVzc2FnZQorCTIwMDBqYW4wNAltZXJnZSB3aXRoIHVzYTE3bXNnLmgKKwkyMDAwbWFyMDgJY2xvbmUgZnJvbSB1c2EyNm1zZy5oIC0+IHVzYTQ5bXNnLmgKKwkyMDAwbWFyMDkJY2hhbmdlIHRvIHN1cHBvcnQgNCBwb3J0cworCTIwMDBtYXkwMwljaGFuZ2UgZXh0ZXJuYWwgY2xvY2tpbmcgdG8gbWF0Y2ggVVNBLTQ5VyBoYXJkd2FyZQorCTIwMDBqdW4wMQlhZGQgZXh0ZW5kZWQgQlNELXN0eWxlIGNvcHlyaWdodCB0ZXh0CisJMjAwMWp1bDA1CWNoYW5nZSBtZXNzYWdlIGZvcm1hdCB0byBpbXByb3ZlIE9WRVJSVU4gY2FzZQorKi8KKworI2lmbmRlZglfX1VTQTQ5TVNHX18KKyNkZWZpbmUJX19VU0E0OU1TR19fCisKKworLyoKKwlIb3N0LT5kZXZpY2UgbWVzc2FnZXMgc2VudCBvbiB0aGUgZ2xvYmFsIGNvbnRyb2wgZW5kcG9pbnQ6CisKKwlwb3J0TnVtYmVyCW1lc3NhZ2UKKwktLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMCwxLDIsMwkJcG9ydENvbnRyb2xNZXNzYWdlCisJMHg4MAkJZ2xvYmFsQ29udHJvbE1lc3NhZ2UKKyovCisKK3N0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRDb250cm9sTWVzc2FnZQoreworCS8qCisJCTAuCTAvMS8yLzMgCXBvcnQgY29udHJvbCBtZXNzYWdlIGZvbGxvd3MKKwkJCTB4ODAgc2V0CW5vbi1wb3J0IGNvbnRyb2wgbWVzc2FnZSBmb2xsb3dzCisJKi8KKwl1OAlwb3J0TnVtYmVyLAorCisJLyoKKwkJdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mICJjb21tYW5kcyIgc2VudCBpbiB0aGUgY29udHJvbCBtZXNzYWdlOgorCisJCTEuCWNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aGljaCBtdXN0IGJlIHJlcXVlc3RlZCBieSBzZXR0aW5nCisJCQl0aGUgY29ycmVzcG9uZGluZyAic2V0IiBmbGFnIChhbmQgc2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkCisJCQl3aGVuIG5lY2Vzc2FyeSwgdG8gcmVkdWNlIG92ZXJoZWFkIG9uIHRoZSBVU0EyNik6CisJKi8KKwkJc2V0Q2xvY2tpbmcsCS8vIGhvc3QgcmVxdWVzdHMgYmF1ZCByYXRlIGJlIHNldAorCQliYXVkTG8sCQkJLy8gaG9zdCBkb2VzIGJhdWQgZGl2aXNvciBjYWxjdWxhdGlvbgorCQliYXVkSGksCQkJLy8gYmF1ZEhpIGlzIG9ubHkgdXNlZCBmb3IgZmlyc3QgcG9ydCAoZ2l2ZXMgbG93ZXIgcmF0ZXMpCisJCXByZXNjYWxlciwJCS8vIHNwZWNpZmllZCBhcyBOLzg7IHZhbHVlcyA4LWZmIGFyZSB2YWxpZAorCQkJCQkJLy8gbXVzdCBiZSBzZXQgYW55IHRpbWUgaW50ZXJuYWwgYmF1ZCByYXRlIGlzIHNldDsKKwkJdHhDbG9ja2luZywJCS8vIDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwvRFNSCisJCXJ4Q2xvY2tpbmcsCQkvLyAwPWludGVybmFsLCAxPWV4dGVybmFsL0RTUgorCisJCXNldExjciwJCQkvLyBob3N0IHJlcXVlc3RzIGxjciBiZSBzZXQKKwkJbGNyLAkJCS8vIHVzZSBQQVJJVFksIFNUT1BCSVRTLCBEQVRBQklUUyBiZWxvdworCisJCXNldEZsb3dDb250cm9sLAkvLyBob3N0IHJlcXVlc3RzIGZsb3cgY29udHJvbCBiZSBzZXQKKwkJY3RzRmxvd0NvbnRyb2wsCS8vIDE9dXNlIENUUyBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJeG9uRmxvd0NvbnRyb2wsCS8vIDE9dXNlIFhPTi9YT0ZGIGZsb3cgY29udHJvbCwgMD1kb24ndAorCQl4b25DaGFyLAkJLy8gc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCQl4b2ZmQ2hhciwJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKworCQlzZXRSdHMsCQkJLy8gaG9zdCByZXF1ZXN0cyBSVFMgb3V0cHV0IGJlIHNldAorCQlydHMsCQkJLy8gMT1hY3RpdmUsIDA9aW5hY3RpdmUKKworCQlzZXREdHIsCQkJLy8gaG9zdCByZXF1ZXN0cyBEVFIgb3V0cHV0IGJlIHNldAorCQlkdHI7CQkJLy8gMT1vbiwgMD1vZmYKKworCisJLyoKKwkJMy4JY29uZmlndXJhdGlvbiBkYXRhIHdoaWNoIGlzIHNpbXBseSB1c2VkIGFzIGlzIChubyBvdmVyaGVhZCwKKwkJCWJ1dCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlKS4KKwkqLworCXU4CWZvcndhcmRpbmdMZW5ndGgsICAvLyBmb3J3YXJkIHdoZW4gdGhpcyBudW1iZXIgb2YgY2hhcnMgYXZhaWxhYmxlCisJCWRzckZsb3dDb250cm9sLAkvLyAxPXVzZSBEU1IgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXR4QWNrVGhyZXNob2xkLAkvLyAwPW5vdCBhbGxvd2VkLCAxPW5vcm1hbCwgMi0yNTUgZGVsaXZlciBBQ0sgZmFzdGVyCisJCWxvb3BiYWNrTW9kZTsJLy8gMD1ubyBsb29wYmFjaywgMT1sb29wYmFjayBlbmFibGVkCisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIGJvdGggX3R4T24gYW5kIF90eE9mZiBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgZW5kcyBpbiBhIFRYX09GRiBzdGF0ZSk7IGFueSBub24temVybyB2YWx1ZSBpcyByZXNwZWN0ZWQKKwkqLworCXU4CV90eE9uLAkJCS8vIGVuYWJsZSB0cmFuc21pdHRpbmcgKGFuZCBjb250aW51ZSBpZiB0aGVyZSdzIGRhdGEpCisJCV90eE9mZiwJCQkvLyBzdG9wIHRyYW5zbWl0dGluZworCQl0eEZsdXNoLAkJLy8gdG9zcyBvdXRib3VuZCBkYXRhCisJCXR4QnJlYWssCQkvLyB0dXJuIG9uIGJyZWFrIChjbGVhcmVkIGJ5IF90eE9uKQorCQlyeE9uLAkJCS8vIHR1cm4gb24gcmVjZWl2ZXIKKwkJcnhPZmYsCQkJLy8gdHVybiBvZmYgcmVjZWl2ZXIKKwkJcnhGbHVzaCwJCS8vIHRvc3MgaW5ib3VuZCBkYXRhCisJCXJ4Rm9yd2FyZCwJCS8vIGZvcndhcmQgYWxsIGluYm91bmQgZGF0YSwgTk9XIChhcyBpZiBmd2RMZW49PTEpCisJCXJldHVyblN0YXR1cywJLy8gcmV0dXJuIGN1cnJlbnQgc3RhdHVzIChldmVuIGlmIGl0IGhhc24ndCBjaGFuZ2VkKQorCQlyZXNldERhdGFUb2dnbGUsLy8gcmVzZXQgZGF0YSB0b2dnbGUgc3RhdGUgdG8gREFUQTAKKwkJZW5hYmxlUG9ydCwJCS8vIHN0YXJ0IHNlcnZpY2luZyBwb3J0IChtb3ZlIGRhdGEsIGNoZWNrIHN0YXR1cykKKwkJZGlzYWJsZVBvcnQ7CS8vIHN0b3Agc2VydmljaW5nIHBvcnQgKGRvZXMgaW1wbGljaXQgdHgvcnggZmx1c2gvb2ZmKQorCQorfTsKKworLy8gZGVmaW5lcyBmb3IgYml0cyBpbiBsY3IKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzUJCTB4MDAKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzYJCTB4MDEKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzcJCTB4MDIKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzgJCTB4MDMKKyNkZWZpbmUJU1RPUEJJVFNfNTY3OF8xCQkweDAwCS8vIDEgc3RvcCBiaXQgZm9yIGFsbCBieXRlIHNpemVzCisjZGVmaW5lCVNUT1BCSVRTXzVfMXA1CQkweDA0CS8vIDEuNSBzdG9wIGJpdHMgZm9yIDUtYml0IGJ5dGUKKyNkZWZpbmUJU1RPUEJJVFNfNjc4XzIJCTB4MDQJLy8gMiBzdG9wIGJpdHMgZm9yIDYvNy84LWJpdCBieXRlCisjZGVmaW5lCVVTQV9QQVJJVFlfTk9ORQkJMHgwMAorI2RlZmluZQlVU0FfUEFSSVRZX09ERAkJMHgwOAorI2RlZmluZQlVU0FfUEFSSVRZX0VWRU4JCTB4MTgKKyNkZWZpbmUJUEFSSVRZXzEJCQkweDI4CisjZGVmaW5lCVBBUklUWV8wCQkJMHgzOAorCisvKgorCWR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCBzdGF0dXMgbWVzc2FnZXMgYXJlIHJldHVybmVkIAorCXRvIHRoZSBob3N0IHdoZW5ldmVyIHRoZSBib2FyZCBkZXRlY3RzIGNoYW5nZXMuICBJbiBzb21lCisJY2lyY3Vtc3RhbmNlcyAoZS5nLiBXaW5kb3dzKSwgc3RhdHVzIG1lc3NhZ2VzIGZyb20gdGhlCisJZGV2aWNlIGNhdXNlIHByb2JsZW1zOyB0byBzaHV0IHRoZW0gb2ZmLCB0aGUgaG9zdCBpc3N1ZXMKKwlhIGNvbnRyb2wgbWVzc2FnZSB3aXRoIHRoZSBkaXNhYmxlU3RhdHVzTWVzc2FnZXMgZmxhZ3MKKwlzZXQgKHRvIGFueSBub24temVybyB2YWx1ZSkuICBUaGUgZGV2aWNlIHdpbGwgcmVzcG9uZCB0bworCXRoaXMgbWVzc2FnZSwgYW5kIHRoZW4gc3VwcHJlc3MgZnVydGhlciBzdGF0dXMgbWVzc2FnZXM7CisJaXQgd2lsbCByZXN1bWUgc2VuZGluZyBzdGF0dXMgbWVzc2FnZXMgYW55IHRpbWUgdGhlIGhvc3QKKwlzZW5kcyBhbnkgY29udHJvbCBtZXNzYWdlIChlaXRoZXIgZ2xvYmFsIG9yIHBvcnQtc3BlY2lmaWMpLgorKi8KKworc3RydWN0IGtleXNwYW5fdXNhNDlfZ2xvYmFsQ29udHJvbE1lc3NhZ2UKK3sKKwl1OAlwb3J0TnVtYmVyLAkJCS8vIDB4ODAKKwkJc2VuZEdsb2JhbFN0YXR1cywJLy8gMS8yPW51bWJlciBvZiBzdGF0dXMgcmVzcG9uc2VzIHJlcXVlc3RlZAorCQlyZXNldFN0YXR1c1RvZ2dsZSwJLy8gMT1yZXNldCBnbG9iYWwgc3RhdHVzIHRvZ2dsZQorCQlyZXNldFN0YXR1c0NvdW50LAkvLyBhIGN5Y2xpbmcgdmFsdWUKKwkJcmVtb3RlV2FrZXVwRW5hYmxlLAkJLy8gMHgxMD1QMSwgMHgyMD1QMiwgMHg0MD1QMywgMHg4MD1QNAorCQlkaXNhYmxlU3RhdHVzTWVzc2FnZXM7CS8vIDE9c2VuZCBubyBzdGF0dXMgdW50aWwgaG9zdCB0YWxrcworfTsKKworLyoKKwlEZXZpY2UtPmhvc3QgbWVzc2FnZXMgc2VuZCBvbiB0aGUgZ2xvYmFsIHN0YXR1cyBlbmRwb2ludAorCisJcG9ydE51bWJlcgkJCW1lc3NhZ2UKKwktLS0tLS0tLS0tCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkweDAwLDB4MDEsMHgwMiwweDAzCXBvcnRTdGF0dXNNZXNzYWdlCisJMHg4MAkJCQlnbG9iYWxTdGF0dXNNZXNzYWdlCisJMHg4MQkJCQlnbG9iYWxEZWJ1Z01lc3NhZ2UKKyovCisKK3N0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlCS8vIG9uZSBmb3IgZWFjaCBwb3J0Cit7CisJdTgJcG9ydE51bWJlciwJCS8vIDAsMSwyLDMKKwkJY3RzLAkJCS8vIHJlcG9ydHMgQ1RTIHBpbgorCQlkY2QsCQkJLy8gcmVwb3J0cyBEQ0QgcGluCisJCWRzciwJCQkvLyByZXBvcnRzIERTUiBwaW4KKwkJcmksCQkJCS8vIHJlcG9ydHMgUkkgcGluCisJCV90eE9mZiwJCQkvLyB0cmFuc21pdCBoYXMgYmVlbiBkaXNhYmxlZCAoYnkgaG9zdCkKKwkJX3R4WG9mZiwJCS8vIHRyYW5zbWl0IGlzIGluIFhPRkYgc3RhdGUgKGVpdGhlciBob3N0IG9yIFJYIFhPRkYpCisJCXJ4RW5hYmxlZCwJCS8vIGFzIGNvbmZpZ3VyZWQgYnkgcnhPbi9yeE9mZiAxPW9uLCAwPW9mZgorCQljb250cm9sUmVzcG9uc2UsLy8gMT1hIGNvbnRyb2wgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQKKwkJdHhBY2ssCQkJLy8gQUNLIChkYXRhIFRYIGNvbXBsZXRlKQorCQlyczIzMnZhbGlkOwkJLy8gUlMtMjMyIHNpZ25hbCB2YWxpZAorfTsKKworLy8gYml0cyBpbiBSWCBkYXRhIG1lc3NhZ2Ugd2hlbiBTVEFUIGJ5dGUgaXMgaW5jbHVkZWQKKyNkZWZpbmUJUlhFUlJPUl9PVkVSUlVOCTB4MDIKKyNkZWZpbmUJUlhFUlJPUl9QQVJJVFkJMHgwNAorI2RlZmluZQlSWEVSUk9SX0ZSQU1JTkcJMHgwOAorI2RlZmluZQlSWEVSUk9SX0JSRUFLCTB4MTAKKworc3RydWN0IGtleXNwYW5fdXNhNDlfZ2xvYmFsU3RhdHVzTWVzc2FnZQoreworCXU4CXBvcnROdW1iZXIsCQkJLy8gMHg4MD1nbG9iYWxTdGF0dXNNZXNzYWdlCisJCXNlbmRHbG9iYWxTdGF0dXMsCS8vIGZyb20gcmVxdWVzdCwgZGVjcmVtZW50ZWQKKwkJcmVzZXRTdGF0dXNDb3VudDsJLy8gYXMgaW4gcmVxdWVzdAorfTsKKworc3RydWN0IGtleXNwYW5fdXNhNDlfZ2xvYmFsRGVidWdNZXNzYWdlCit7CisJdTgJcG9ydE51bWJlciwJCQkvLyAweDgxPWdsb2JhbERlYnVnTWVzc2FnZQorCQluLAkJCQkJLy8gdHlwaWNhbGx5IGEgY291bnQvc3RhdHVzIGJ5dGUKKwkJYjsJCQkJCS8vIHR5cGljYWxseSBhIGRhdGEgYnl0ZQorfTsKKworLy8gaWU6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBFWlVTQiBlbmRwb2ludCBidWZmZXIKKyNkZWZpbmUJTUFYX0RBVEFfTEVOCQkJNjQKKworLy8gdXBkYXRlIHN0YXR1cyBhcHByb3guIDYwIHRpbWVzIGEgc2Vjb25kICgxNi42NjY2IG1zKQorI2RlZmluZQlTVEFUVVNfVVBEQVRFX0lOVEVSVkFMCTE2CisKKy8vIHN0YXR1cyByYXRpb25pbmcgdHVuaW5nIHZhbHVlIChlYWNoIHBvcnQgZ2V0cyBjaGVja2VkIGVhY2ggbiBtcykKKyNkZWZpbmUJU1RBVFVTX1JBVElPTgkxMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d19mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhNDl3X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyNGRhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d19mdy5oCkBAIC0wLDAgKzEsNDY0IEBACisvKiBrZXlzcGFuX3VzYTQ5d19mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTQ5d19mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTQ5d19maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MTgsIDB4ZmJ9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0NiwgMTYsIHsgMHhlNCwgMHhmZiwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhlNSwgMHgxNX19LAorIHsweDAwNTYsIDE2LCB7IDB4MjQsIDB4MDQsIDB4ZmQsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZmEsIDB4YTksIDB4MDUsIDB4N2IsIDB4MDEsIDB4ZWYsIDB4N2MsIDB4MDAsIDB4MjksIDB4Zjl9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGVjLCAweDNhLCAweGZhLCAweGVlLCAweDEyLCAweDExLCAweGYxLCAweDBmLCAweGJmLCAweDIyLCAweGQ3LCAweGU1LCAweDE1LCAweDI0LCAweDA1LCAweGY1fX0sCisgezB4MDA3NiwgMTYsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMSwgMHgzNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwOX19LAorIHsweDAwODYsIDE2LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDE4LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweGU1fX0sCisgezB4MDBhNiwgMTYsIHsgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhjZiwgMHhmMCwgMHg4MCwgMHg0MX19LAorIHsweDAwYjYsIDE2LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NzZ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweGU1LCAweDE1LCAweDI0LCAweDA3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDAwLCAweDAzfX0sCisgezB4MDBkNiwgMTYsIHsgMHg3ZiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHgxMn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTYsIDB4NDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MzB9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwfX0sCisgezB4MDAwMywgMTYsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NH19LAorIHsweDAwMTMsIDE2LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjR9fSwKKyB7MHgwMDIzLCAxNiwgeyAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxYiwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MTAsIDB4OTV9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDA0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDMyLCAweGU1LCAweDE1LCAweDI0LCAweDBjfX0sCisgezB4MDE0NiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMiwgMHg0ZiwgMHhlNX19LAorIHsweDAxODYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NDcsIDB4ZTV9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDE1LCAweDI0LCAweDBlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDMzLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LAorICAweDMzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMzLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDBmfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHhlNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNiwgMHgxNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNH19LAorIHsweDAyNDYsIDY0LCB7IDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4YjcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4NDQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjV9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDgzLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDA0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDEyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDQ0LCAweGU1LCAweDE1LCAweDI0LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0fX0sCisgezB4MDJjNiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNSwgMHhmNSwgMHg4Mn19LAorIHsweDAzMDYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjV9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDNiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LAorICAweDE1LCAweDI0LCAweDE5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LAorICAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LAorICAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDkwLCAweDc4fX0sCisgezB4MDM4NiwgNjQsIHsgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHg2YiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNH19LAorIHsweDAzYzYsIDY0LCB7IDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MDAsCisgIDB4MzYsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NDcsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDFiLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDBlLCAweGU1LCAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI4LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDQ3LCAweGU1fX0sCisgezB4MDQ0NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgyYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHg3MCwgMHgwZSwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyYSwgMHg5MCwgMHg3OCwgMHg0MSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDA0ODYsIDY0LCB7IDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZWYsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDFlLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI4LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZlLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDQ3LAorICAweGU1LCAweDE1LCAweDI0LCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgxZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwZSwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyNywgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwKKyAgMHhmZiwgMHgxMiwgMHgxNiwgMHg0NywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4M319LAorIHsweDA1NDYsIDY0LCB7IDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwNTg2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDIyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDYwLCAweDFmLCAweGU1LCAweDE1LCAweDI0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LAorICAweDAxLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwfX0sCisgezB4MDVjNiwgNjQsIHsgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHgwMywgMHgxMiwgMHgxOCwgMHg4NSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHg2MCwgMHgxYiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwOCwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHhmZiwgMHhlNSwgMHgxNiwgMHhmNCwgMHhmZSwgMHhlZiwgMHg1ZSwgMHhmMCwgMHhlNSwgMHgxNX19LAorIHsweDA2MDYsIDY0LCB7IDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NDUsIDB4MTYsCisgIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MTIsIDB4MDMsIDB4MDcsIDB4ODMsIDB4MDAsIDB4MDcsIDB4ZjcsIDB4MDEsIDB4MDgsCisgIDB4NjMsIDB4MDMsIDB4MDYsIDB4NGMsIDB4MDYsIDB4MDcsIDB4NzQsIDB4MDgsIDB4MDcsIDB4NjgsIDB4MDksIDB4MDcsIDB4NTAsIDB4MGEsIDB4MDd9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDVmLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGIyLCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFjLCAweDE0LCAweDcwLCAweDAzLAorICAweDAyLCAweDA2LCAweGZlLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA3LCAweDQ2LCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLAorICAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLAorICAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDAzLCAweDgwfX0sCisgezB4MDY4NiwgNjQsIHsgMHgwMiwgMHg3ZiwgMHgwMiwgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg2ZCwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1ZiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwKKyAgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNCwgMHg3ZiwgMHg2NCwgMHg4MCwKKyAgMHgwMiwgMHg3ZiwgMHgzMiwgMHg3NSwgMHg4MiwgMHgxYSwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlZiwgMHhlMH19LAorIHsweDA2YzYsIDY0LCB7IDB4ZmUsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4N2MsIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4MTksIDB4ZWMsIDB4M2UsIDB4ZjUsIDB4MTgsIDB4NzUsIDB4MzMsCisgIDB4MTksIDB4NzUsIDB4MzQsIDB4MTIsIDB4NzUsIDB4ODIsIDB4MTQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZTAsIDB4NzUsIDB4MjcsIDB4MDAsIDB4ZjUsIDB4MjgsCisgIDB4ZDMsIDB4ZTUsIDB4MjgsIDB4OTUsIDB4MTksIDB4ZTUsIDB4MjcsIDB4OTUsIDB4MTgsIDB4NDAsIDB4MDYsIDB4ODUsIDB4MTgsIDB4MjcsIDB4ODUsIDB4MTksCisgIDB4MjgsIDB4MTIsIDB4MTMsIDB4MTIsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4MmJ9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGVhLCAweDQ5LCAweDYwLCAweDMyLCAweDkwLCAweDdmLCAweGVlLCAweGUwLCAweDc1LCAweDE4LCAweDAwLCAweGY1LCAweDE5LCAweGFlLCAweDAyLCAweGFmLCAweDAxLAorICAweDhlLCAweDMzLCAweDhmLCAweDM0LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweDhlLCAweDI3LCAweGY1LCAweDI4LAorICAweGQzLCAweDk1LCAweDE5LCAweGU1LCAweDI3LCAweDk1LCAweDE4LCAweDQwLCAweDA2LCAweDg1LCAweDE4LCAweDI3LCAweDg1LCAweDE5LCAweDI4LCAweDEyLAorICAweDEzLCAweDEyLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGI5fX0sCisgezB4MDc0NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyNSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyNSwgMHgwMiwgMHgwOCwKKyAgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyMiwgMHgxMiwgMHgwYSwgMHhiOCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHgwMCwKKyAgMHhlNSwgMHgyMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlOH19LAorIHsweDA3ODYsIDY0LCB7IDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsIDB4YTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsCisgIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDYsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODB9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGI5LAorICAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA4LCAweGI5fX0sCisgezB4MDgwNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgwMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZn19LAorIHsweDA4NDYsIDY0LCB7IDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsCisgIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsCisgIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsCisgIDB4MDAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgwODg2LCA2NCwgeyAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LAorICAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLAorICAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweGU1LCAweDExLCAweDU0LCAweDBmLCAweDcwfX0sCisgezB4MDhjNiwgNjQsIHsgMHgwMywgMHgwMiwgMHgwOSwgMHhiMiwgMHgxMiwgMHgxNiwgMHhhNSwgMHhlZiwgMHgyMCwgMHhlMSwgMHg3NSwgMHgxMiwgMHgxNywgMHgwMywgMHhlZiwgMHgxNCwgMHhmNSwKKyAgMHgxOSwgMHgxMiwgMHgxOCwgMHhjYywgMHhlZiwgMHgyNSwgMHgxOSwgMHhmZiwgMHhlNCwgMHgzMywgMHhmZSwgMHhjMywgMHhlZiwgMHg5NCwgMHg4MCwgMHhlZSwKKyAgMHg2NCwgMHg4MCwgMHg5NCwgMHg4MCwgMHg1MCwgMHg1OSwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwKKyAgMHhmZiwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4Mn19LAorIHsweDA5MDYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTIsIDB4MTIsIDB4ZTUsIDB4MTksIDB4NjAsIDB4MGUsIDB4ZjUsIDB4MjMsIDB4ZWYsIDB4MjQsCisgIDB4MDEsIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4YWQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4ZTN9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU3LCAweDVkLCAweDEyLCAweDE4LAorICAweGNjLCAweGU1LCAweDE1LCAweDI0LCAweDNiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZlLCAweGVmLCAweGMzLAorICAweDllLCAweDUwLCAweDQ4LCAweGU1LCAweDE1LCAweDI0LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLAorICAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdifX0sCisgezB4MDk4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwKKyAgMHgxMywgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgyNCwgMHg4MCwgMHgwMywgMHgxMiwgMHgxMiwgMHhhMSwgMHgxMiwgMHgxNiwgMHhkNCwgMHhlZiwgMHgzMCwKKyAgMHhlMSwgMHgwMywgMHgwMiwgMHgwYSwgMHhiNywgMHgxMiwgMHgxNywgMHhkMiwgMHg4ZiwgMHgxOSwgMHgxMiwgMHgxOCwgMHhkOCwgMHhlNSwgMHgxNX19LAorIHsweDA5YzYsIDY0LCB7IDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzUsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OWYsIDB4NTAsIDB4MjgsIDB4MTIsIDB4MTgsIDB4YjQsCisgIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MjEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4MjAsIDB4ZTcsIDB4MTIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDBhLCAweGI3LCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDE5LCAweDcwLCAweDAzLCAweDAyLCAweDBhLCAweGI3LCAweGI0LCAweDgwLCAweDBmLCAweGU1LCAweDE1LAorICAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDI5LCAweGU1LCAweDE5fX0sCisgezB4MGE0NiwgNjQsIHsgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgyMywgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywKKyAgMHhhMywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHg4YywgMHgyYywgMHhmNSwgMHgyZCwgMHgxMiwgMHgxMywgMHhkZCwgMHhlNSwgMHgxOSwgMHgyNSwKKyAgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHgxOSwgMHgyMiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwKKyAgMHg4NSwgMHgxOSwgMHgyMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDBhODYsIDY0LCB7IDB4ZmYsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsCisgIDB4ZWYsIDB4ZjAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4MjQsIDB4MDEsCisgIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4NmMsIDB4ZTUsIDB4MTksIDB4MDQsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4MTksCisgIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4ZjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTZ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDc4LCAweDRhLCAweDA0LCAweGYwLCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweDk1LCAweDc0LAorICAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDFmLCAweGYwLCAweDkwLCAweDc4LAorICAweDQzLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweDlmLCAweGYwLCAweDkwLAorICAweDdmLCAweGRlLCAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1fX0sCisgezB4MGIwNiwgNjQsIHsgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgwZiwgMHgxMiwKKyAgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwKKyAgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NH19LAorIHsweDBiNDYsIDY0LCB7IDB4NDAsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2UsIDB4ZjAsCisgIDB4YTMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsCisgIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MGYsIDB4MTIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4ZTUsIDB4MTV9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweGMwLCAweDg1LAorICAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweDc0LCAweDdkLCAweGYwLCAweGEzLCAweDc0LCAweGMwLCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDAwLAorICAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdlLCAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweDdlLAorICAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGJmLCAweGYwfX0sCisgezB4MGJjNiwgNjQsIHsgMHg3NSwgMHgxNiwgMHgwNCwgMHgxMiwgMHgwZiwgMHgxMiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwKKyAgMHg3ZiwgMHg5NiwgMHg3NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMiwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywKKyAgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NX19LAorIHsweDBjMDYsIDY0LCB7IDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4MTIsIDB4MGYsIDB4MTIsCisgIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzR9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDAzLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweGMwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweDc0LCAweDdjLCAweGYwLCAweGEzLCAweDc0LAorICAweGMwLCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweDAwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdkLAorICAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDA5LCAweGQyLCAweDAyLCAweDIyLCAweGU1LCAweDEwLCAweDA0LCAweDU0LAorICAweDAzLCAweGY1LCAweDEwLCAweDE0LCAweDYwLCAweDFmLCAweDE0LCAweDYwLCAweDMxLCAweDE0LCAweDYwLCAweDQzLCAweDI0LCAweDAzLCAweDcwfX0sCisgezB4MGM4NiwgNjQsIHsgMHg1MiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwMSwgMHg4MCwgMHgzZCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NiwgMHg3NCwgMHhkZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHg4MCwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwKKyAgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHg4MCwgMHgxM319LAorIHsweDBjYzYsIDY0LCB7IDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsIDB4NzUsCisgIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MzIsIDB4NTUsIDB4MTYsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MGUsIDB4MTEsIDB4ZTUsIDB4MTYsIDB4ZjQsIDB4ZmYsIDB4NTIsCisgIDB4MzIsIDB4ZTUsIDB4MjYsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NzAsIDB4MGYsIDB4ZTUsIDB4MmEsIDB4NTUsIDB4MTYsIDB4NjAsIDB4MjQsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4ZTAsIDB4NDUsIDB4MTYsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4YmUsIDB4MjAsIDB4MTgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjV9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUzLCAweDA5LCAweGU0LCAweGY1LCAweDJhLCAweDkwLCAweDdmLCAweDk4LCAweGUwLAorICAweDVmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDAzLAorICAweGUwLCAweDE0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDAzLCAweGUwLCAweDE0LCAweGYwLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBlLCAweDExLCAweDc0LCAweDBhLCAweGYwLCAweDEyLCAweDAwfX0sCisgezB4MGQ0NiwgNjQsIHsgMHgzNiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmZiwgMHhmNSwgMHgxOSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg2ZiwgMHg2MCwgMHgwNywgMHhlNSwgMHgxOSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHgxMiwgMHgxOCwgMHhlNCwgMHg4ZiwKKyAgMHgxOSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOSwKKyAgMHg1NCwgMHgxMCwgMHhmZSwgMHg2ZiwgMHg2MCwgMHgwNiwgMHhlZSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDBkODYsIDY0LCB7IDB4MjgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksIDB4NTQsIDB4ODAsIDB4ZmUsIDB4NmYsIDB4NjAsCisgIDB4MDYsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksIDB4NTQsIDB4MjAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MTUsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTQsIDB4MDQsIDB4ZTUsIDB4MTZ9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDQyLCAweDEzLCAweGU1LCAweDEyLCAweDU1LCAweDE2LCAweGZmLCAweGY1LCAweDE5LCAweGU1LCAweDE1LCAweDI0LCAweDJhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDZmLCAweDYwLCAweDE2LCAweGU1LCAweDE5LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU1LCAweDA0LCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE3LCAweDU1LAorICAweDE2LCAweGZmLCAweGY1LCAweDE5LCAweGU1LCAweDE1LCAweDI0LCAweDMwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzfX0sCisgezB4MGUwNiwgNjQsIHsgMHhlMCwgMHg2ZiwgMHg2MCwgMHgwNywgMHhlNSwgMHgxOSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHgyMiwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwZiwKKyAgMHgxMSwgMHhlNSwgMHgyNCwgMHgxNCwgMHg2MCwgMHgyYSwgMHgxNCwgMHg2MCwgMHg0MSwgMHgxNCwgMHg2MCwgMHg1OCwgMHgxNCwgMHg2MCwgMHg2ZiwgMHgyNCwKKyAgMHgwNCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZSwgMHhjZiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwKKyAgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgxMiwgMHhhMSwgMHg3NSwgMHgyNCwgMHgwMX19LAorIHsweDBlNDYsIDY0LCB7IDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MTIsIDB4YTEsIDB4NzUsIDB4MjQsIDB4MDIsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTIsIDB4MTIsIDB4YTEsCisgIDB4NzUsIDB4MjQsIDB4MDMsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDdmLCAweDk2LCAweDc0LCAweDdmLCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDEyLCAweGExLCAweDc1LCAweDI0LCAweDA0LCAweDIyLCAweDMwLCAweDA0LAorICAweDMzLCAweGMyLCAweDA0LCAweDUzLCAweDEzLCAweGRmLCAweGU0LCAweGY1LCAweDE5LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJlLCAweDI1LAorICAweDE5LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDExLCAweGFiLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE5LCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE5LCAweGU1LCAweDE5LCAweGI0LCAweDAzLCAweGRiLCAweDkwfX0sCisgezB4MGVjNiwgNjQsIHsgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHg3NSwgMHgyNCwgMHgwNSwgMHgyMiwgMHhlNSwgMHgzNiwgMHg2MCwgMHgzYiwgMHhkNSwgMHgzNiwgMHgwYSwgMHg1MywKKyAgMHgxMywgMHhlZiwgMHgzMCwgMHgwYSwgMHgwNCwgMHhkMiwgMHgwOSwgMHhjMiwgMHgwYSwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwKKyAgMHg3NCwgMHgzNSwgMHgyNSwgMHgxOSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgxMSwgMHhhYiwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwKKyAgMHgxOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOSwgMHhlNSwgMHgxOSwgMHhiNH19LAorIHsweDBmMDYsIDY0LCB7IDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MjQsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MWEsIDB4N2UsIDB4MDAsCisgIDB4N2IsIDB4MDEsIDB4ZTUsIDB4MTUsIDB4MjUsIDB4MWEsIDB4ZjksIDB4ZWUsIDB4MzUsIDB4MTQsIDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MTEsIDB4ZjEsIDB4MDUsCisgIDB4MWEsIDB4ZTUsIDB4MWEsIDB4YjQsIDB4M2MsIDB4ZTgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjV9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLAorICAweDEyLCAweDE2LCAweDQ3LCAweDdmLCAweDEwLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGVmLCAweGYwLCAweDEyLCAweDE1LCAweGI3LCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAyLCAweGYwLCAweDdmLCAweDAxLCAweGU1LCAweDE1LCAweDI0LAorICAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg0NywgMHhlNCwgMHhmZiwKKyAgMHg3ZSwgMHhhMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZSwgMHhmMCwgMHhmZCwKKyAgMHgxMiwgMHgxNiwgMHg0NywgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3Zn19LAorIHsweDBmYzYsIDY0LCB7IDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTYsIDB4NDcsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTUsIDB4NGYsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTYsCisgIDB4NDcsIDB4MjIsIDB4NTMsIDB4MTMsIDB4M2YsIDB4OTAsIDB4N2IsIDB4ZjEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzAsCisgIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsCisgIDB4MDgsIDB4YzEsIDB4OTAsIDB4N2MsIDB4MzEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTR9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGRmLCAweGYwLCAweDc1LCAweDE2LCAweDAyLCAweDEyLCAweDA4LCAweGMxLCAweDkwLAorICAweDdjLCAweDcxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLAorICAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGJmLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyLCAweDA4LCAweGMxLCAweDkwLCAweDdjLCAweGIxLCAweGUwLAorICAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmfX0sCisgezB4MTA0NiwgNjQsIHsgMHg5NiwgMHg3NCwgMHg3ZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgwOCwgMHhjMSwgMHgwNSwgMHgxMSwgMHhlNSwgMHgxMSwgMHg1NCwgMHgwZiwgMHhmNSwKKyAgMHgxOCwgMHg3MCwgMHgxZiwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OSwgMHhlMCwgMHhmNSwgMHgxNywKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OSwgMHhlMCwgMHhmNCwgMHhmNSwgMHgxMiwgMHgxMiwgMHgxMSwKKyAgMHgyMSwgMHgyMiwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMSwgMHgwNCwgMHgxMiwgMHgwYywgMHg3MywgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMH19LAorIHsweDEwODYsIDY0LCB7IDB4MjAsIDB4ZTEsIDB4MDgsIDB4ZTUsIDB4MTMsIDB4NjAsIDB4MDQsIDB4MTIsIDB4MGUsIDB4MTIsIDB4MjIsIDB4MTIsIDB4MGMsIDB4NzMsIDB4MjIsIDB4NzgsIDB4N2YsCisgIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4MzcsIDB4MDIsIDB4MTAsIDB4ZGMsIDB4MDIsIDB4MTIsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsCisgIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsCisgIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjB9fSwKKyB7MHgxMGM2LCA2NCwgeyAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LAorICAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDE4LCAweDUwLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLAorICAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LAorICAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4fX0sCisgezB4MTEwNiwgNjQsIHsgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwKKyAgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgzMCwgMHhlMSwKKyAgMHgwMywgMHgwMiwgMHgxMSwgMHhhYSwgMHhjMiwgMHgwOSwgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHgxNCwgMHg2MCwgMHgyNiwgMHgxNCwgMHg2MCwgMHgzYiwKKyAgMHgxNCwgMHg2MCwgMHg1MCwgMHgyNCwgMHg4MywgMHg2MCwgMHg2NCwgMHgyNCwgMHg4MCwgMHg3MCwgMHg2MywgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMH19LAorIHsweDExNDYsIDY0LCB7IDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MDAsCisgIDB4NDYsIDB4ODAsIDB4NGIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MzMsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsCisgIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTJ9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDAwLCAweDQ2LCAweDgwLCAweDFiLCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk2LAorICAweDc0LCAweDdmLCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDAwLCAweDQ2LCAweDgwLCAweDAzLCAweDEyLCAweDE3LCAweDVjLCAweGU0LCAweDkwLAorICAweDdmLCAweGQzLCAweGYwLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LAorICAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxfX0sCisgezB4MTFjNiwgNjQsIHsgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwKKyAgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwKKyAgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwKKyAgMHg4MywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMH19LAorIHsweDEyMDYsIDY0LCB7IDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsCisgIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsCisgIDB4ODAsIDB4ZGYsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjAsCisgIDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLAorICAweDkwLCAweDdmLCAweGFmLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDBiLAorICAweDEyLCAweDE4LCAweDE0LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDJiLCAweGY1LCAweDMxLCAweGMyLCAweDA3LCAweGMyLCAweDAyLCAweDc1LCAweDI5LAorICAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDI2LCAweDYwLCAweDA2LCAweDc1LCAweDMyLCAweDBmLCAweGUwLCAweGY1LCAweDI2fX0sCisgezB4MTI4NiwgNjQsIHsgMHgzMCwgMHgwMiwgMHgwMywgMHgxMiwgMHgwZiwgMHhkOSwgMHgzMCwgMHgwMSwgMHgwNywgMHhjMiwgMHgwMSwgMHgxMiwgMHgwNiwgMHgyOSwgMHg4MCwgMHhlMiwgMHgzMCwKKyAgMHgwOCwgMHhkZiwgMHhjMiwgMHgwOCwgMHgxMiwgMHgxOCwgMHgzNSwgMHg4MCwgMHhkOCwgMHgyMiwgMHhlNSwgMHgxMywgMHg1NSwgMHgxNiwgMHg2MCwgMHg2YSwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHg1YywgMHhlNSwgMHgxNiwKKyAgMHhmNCwgMHg1MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmZiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmZSwgMHhlNCwgMHhmZCwgMHgwZn19LAorIHsweDEyYzYsIDY0LCB7IDB4ZWYsIDB4YWEsIDB4MDYsIDB4NzAsIDB4MDEsIDB4MGUsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NzQsIDB4ODAsIDB4MmQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4MGQsIDB4YmQsIDB4MGIsIDB4ZTIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MTAsIDB4ZjAsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTV9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDI0LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDIyLCAweGU1LCAweDI4LCAweDQ1LCAweDI3LCAweDYwLAorICAweDU3LCAweGFlLCAweDI3LCAweGFmLCAweDI4LCAweGQzLCAweGVmLCAweDk0LCAweDQwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdlLCAweDAwLAorICAweDdmLCAweDQwLCAweGMzLCAweGU1LCAweDI4LCAweDlmLCAweGY1LCAweDI4LCAweGU1LCAweDI3LCAweDllLCAweGY1LCAweDI3LCAweGU0LCAweGZkLCAweGVkLAorICAweGMzLCAweDlmLCAweGU0LCAweDllLCAweDUwLCAweDFmLCAweDg1LCAweDM0LCAweDgyLCAweDg1LCAweDMzLCAweDgzLCAweGUwLCAweGZjLCAweDc0fX0sCisgezB4MTM0NiwgNjQsIHsgMHgwMCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMCwgMHgwZCwgMHgwNSwgMHgzNCwgMHhlNSwgMHgzNCwgMHg3MCwKKyAgMHgwMiwgMHgwNSwgMHgzMywgMHg4MCwgMHhkYSwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhmMH19LAorIHsweDEzODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NGEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsCisgIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4MzAsIDB4MDAsIDB4MDcsIDB4ZTUsIDB4MjksIDB4NTQsIDB4ZjAsIDB4ZmYsCisgIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZWYsIDB4NDQsIDB4MDgsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweGYwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLAorICAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDIyLCAweDhmLCAweDFhLCAweDA1LCAweDJkLCAweGU1LCAweDJkLCAweGFlLCAweDJjLCAweDcwLCAweDAyLAorICAweDA1LCAweDJjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLCAweGYwLCAweDEyLCAweDE4LCAweGYwLCAweDA1LCAweDJkLCAweGU1LAorICAweDJkLCAweGFjLCAweDJjLCAweDcwLCAweDAyLCAweDA1LCAweDJjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1fX0sCisgezB4MTQwNiwgNjQsIHsgMHgyMywgMHhlNSwgMHgyMywgMHg2MCwgMHgxZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhjMCwKKyAgMHg4MywgMHhjMCwgMHg4MiwgMHhlMCwgMHhmZSwgMHgxMiwgMHgxOCwgMHhkOCwgMHg4ZiwgMHgxYSwgMHhlZSwgMHg0ZiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywKKyAgMHhmMCwgMHg4MCwgMHhiNSwgMHgyMiwgMHg4ZiwgMHgxYSwgMHhlNCwgMHhmNSwgMHgxYiwgMHg3NSwgMHgxYywgMHhmZiwgMHg3NSwgMHgxZCwgMHgxOSwgMHg3NSwKKyAgMHgxZSwgMHg4NiwgMHhhYiwgMHgxYywgMHhhYSwgMHgxZCwgMHhhOSwgMHgxZSwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgxMSwgMHhjNCwgMHhiNH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDMsIDB4MWQsIDB4YWYsIDB4MWIsIDB4MDUsIDB4MWIsIDB4ZWYsIDB4YjUsIDB4MWEsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MTEsIDB4YWIsIDB4N2UsIDB4MDAsIDB4MjksCisgIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MWMsIDB4ZmYsIDB4ZjUsIDB4MWQsIDB4ODksIDB4MWUsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsCisgIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NGYsIDB4NzQsIDB4YzAsIDB4ZjAsCisgIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTAsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4OTAsIDB4NzgsIDB4NTEsIDB4ZjAsIDB4YWUsIDB4MmMsIDB4ZTUsIDB4MmR9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDkwLCAweDc4LCAweDUyLCAweGYwLCAweDkwLCAweDc4LCAweDU0LCAweGU1LCAweDIzLCAweGYwLCAweDkwLCAweDc4LCAweDU3LCAweDc0LCAweDA0LCAweGYwLCAweDkwLAorICAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDU1LCAweGYwLCAweDkwLAorICAweDc4LCAweDU1LCAweGUwLCAweDYwLCAweGZhLCAweDIyLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweGU1LCAweDJjLCAweDkwLCAweDc4LCAweDRmLAorICAweGYwLCAweGFlLCAweDJjLCAweGU1LCAweDJkLCAweDkwLCAweDc4LCAweDUwLCAweGYwLCAweDkwLCAweDc4LCAweDUxLCAweDc0LCAweGMwLCAweGYwfX0sCisgezB4MTRjNiwgNjQsIHsgMHhlNCwgMHg5MCwgMHg3OCwgMHg1MiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NCwgMHhlNSwgMHgyMywgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NywgMHg3NCwgMHgwNCwgMHhmMCwKKyAgMHhlNCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhlMCwgMHg2MCwgMHhmYSwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxMywgMHgxNCwgMHg2MCwKKyAgMHgxNywgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlZiwgMHhmMCwgMHg4MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlZiwgMHhmMH19LAorIHsweDE1MDYsIDY0LCB7IDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsCisgIDB4MmEsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsCisgIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTMsIDB4MTQsIDB4NjAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MTMsCisgIDB4OTAsIDB4N2YsIDB4YjksIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDdmLCAweGJkLCAweGVmLCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDJhLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDMyLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweDkwLCAweDc4LAorICAweDQxLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweDIyLCAweGMwLCAweGUwfX0sCisgezB4MTU4NiwgNjQsIHsgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwKKyAgMHg3NSwgMHhkMCwgMHgwOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgxMywgMHgxMiwgMHhkMCwKKyAgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MX19LAorIHsweDE1YzYsIDY0LCB7IDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsCisgIDB4MDQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTV9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LAorICAweDA2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNywgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHg5MCwKKyAgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg0MX19LAorIHsweDE2ODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsIDB4MGUsIDB4MTQsIDB4NjAsIDB4MTEsCisgIDB4MTQsIDB4NjAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweGZmLCAweDIyLCAweGU1LCAweDE1LCAweDI0LAorICAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLCAweDBlLCAweDE0LCAweDYwLCAweDExLCAweDE0LAorICAweDYwLCAweDE0LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweGZmLCAweDIyLCAweGU1LCAweDE1LCAweDI0fX0sCisgezB4MTcwNiwgNjQsIHsgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZSwgMHgxNCwgMHg2MCwgMHgxMSwgMHgxNCwgMHg2MCwKKyAgMHgxNCwgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHhjYiwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwKKyAgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMH19LAorIHsweDE3NDYsIDY0LCB7IDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsCisgIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4NDMsIDB4MTMsIDB4MTAsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4OTAsIDB4N2IsIDB4NDMsIDB4ZTAsIDB4ZjUsCisgIDB4MzcsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjUsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGEsIDB4MjIsIDB4YzAsIDB4ZTB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDAxLCAweDUzLCAweDkxLAorICAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLAorICAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LAorICAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDA4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwfX0sCisgezB4MTdjNiwgNjQsIHsgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZSwgMHgwNywKKyAgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZCwgMHgwNywgMHhlZSwgMHg2ZCwgMHg2MCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZSwgMHgwNywgMHhlZSwgMHg2ZCwKKyAgMHg2MCwgMHgwNywgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZCwgMHgwNywgMHg4MCwgMHhlYywgMHhhZiwgMHgwNiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwKKyAgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3Zn19LAorIHsweDE4MDYsIDY0LCB7IDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsCisgIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MGIsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsCisgIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MTgsIDB4NmIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsCisgIDB4N2MsIDB4MTIsIDB4MTgsIDB4MDQsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MGEsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDEyLCAweDE4LCAweDZiLCAweDEyLCAweDE4LCAweDllLCAweDEyLCAweDBhLCAweGI4LCAweDIyLCAweDAzLCAweDM1LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDJlLAorICAweDgxLCAweDAwLCAweDAwLCAweGMxLCAweDg1LCAweGMxLCAweDgxLCAweGMxLCAweDA4LCAweGMxLCAweDAwLCAweGMxLCAweDA2LCAweDAxLCAweDIyLCAweDAwLAorICAweDAxLCAweDI0LCAweDAwLCAweDAwLCAweDhlLCAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLAorICAweDE1LCAweDE4LCAweDRlLCAweDYwLCAweDA4LCAweDEyLCAweDE3LCAweGYzLCAweDEyLCAweDE3LCAweGYzLCAweDgwLCAweGViLCAweDIyLCAweGU1fX0sCisgezB4MTg4NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgwNCwgMHhmZiwgMHg0NCwgMHgxMCwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHhmMCwgMHhlZiwgMHg0NCwgMHgzMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgwZCwKKyAgMHg3ZSwgMHgwMCwgMHgxMiwgMHgxOCwgMHg2YiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMH19LAorIHsweDE4YzYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsCisgIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsCisgIDB4NzQsIDB4MDYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzIsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDBhLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDA0LCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweDAwLCAweDcwLCAweDAwLCAweDZmLCAweDAwLCAweDcyLCAweDAwLCAweDc0LAorICAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLAorICAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwfX0sCisgezB4MWEwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxNywgMHg4NCwgMHgwMCwgMHgwMiwgMHgxYn19LAorIHsweDFiMDYsIDIxLCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MzIsIDB4MDAsIDB4MDIsIDB4MTcsIDB4YWIsIDB4MDAsIDB4MDIsIDB4MWIsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MWIsIDB4MTQsCisgIDB4MDAsIDB4MDIsIDB4MTUsIDB4ODR9fSwKKyB7MHhmZmZmLCAwLCB7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhNDl3bGNfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d2xjX2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmMDZhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d2xjX2Z3LmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qIGtleXNwYW5fdXNhNDl3X2Z3LmgKKworCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fdXNhNDl3X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMworCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworc3RhdGljIGNoYXIgdGhlRmlybXdhcmVEYXRlNDlbXSA9CisJIjAyLzE0LzIwMDIgIDAyOjM3cCAgICAgICAgICAgICAgMTksMzQ3IFVTQTQ5IjsKKworCisKK3N0YXRpYyBjaGFyIHRoZUZpcm13YXJlRGF0ZTY1W10gPQorCSIwMS8zMS8yMDAzICAwOTozNGEgICAgICAgICAgICAgIDE5LDMzMSBVU0E2NSI7CisKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhNDl3bGNfZmlybXdhcmVbXSA9IHsKKyB7MHg3ZjkyLCAgMSwgeyAweDAxfX0sCisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgxOCwgMHhmYn19LAorIHsweDAwMzYsIDEzLCB7IDB4ZTUsIDB4MTEsIDB4MDQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweGU0LCAweGZmLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZlLCAweGU1LCAweDE1fX0sCisgezB4MDA1NiwgMTYsIHsgMHgyNCwgMHgwNCwgMHhmZCwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmYSwgMHhhOSwgMHgwNSwgMHg3YiwgMHgwMSwgMHhlZiwgMHg3YywgMHgwMCwgMHgyOSwgMHhmOX19LAorIHsweDAwNjYsIDE2LCB7IDB4ZWMsIDB4M2EsIDB4ZmEsIDB4ZWUsIDB4MTIsIDB4MTEsIDB4ZWMsIDB4MGYsIDB4YmYsIDB4MjIsIDB4ZDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDUsIDB4ZjV9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDAxLCAweDM0LCAweGU1LCAweDE1LCAweDI0LCAweDA5fX0sCisgezB4MDA4NiwgMTYsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwZSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwYSwgMHhmNSwgMHg4Mn19LAorIHsweDAwOTYsIDE2LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsIDB4ZTV9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGNmLCAweGYwLCAweDgwLCAweDQxfX0sCisgezB4MDBiNiwgMTYsIHsgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgwMCwgMHgwM319LAorIHsweDAwYzYsIDE2LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4YWJ9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweDdmLCAweDAxLCAweGU1LCAweDE1LCAweDI0LCAweDA4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZkLCAweDEyfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxNiwgMHg2YiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgzMH19LAorIHsweDAwZjYsIDE2LCB7IDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjB9fSwKKyB7MHgwMDAzLCAxNiwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0fX0sCisgezB4MDAxMywgMTYsIHsgMHhmMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDAwMjMsIDE2LCB7IDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDFiLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgxMCwgMHg5MH19LAorIHsweDAxMDYsIDY0LCB7IDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzYsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGN9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDNmLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDBkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDAyLCAweDRmLCAweGU1fX0sCisgezB4MDE4NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgxNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg2YiwgMHhlNX19LAorIHsweDAxYzYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MGUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGZ9fSwKKyB7MHgwMjA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDJmLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LCAweDgyLCAweGU0LAorICAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDEwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE2LCAweDBiLCAweGU1LCAweDE1LCAweDI0LCAweDExLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE2LCAweDNiLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LCAweDgyLCAweGU0fX0sCisgezB4MDI0NiwgNjQsIHsgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHhkYiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHg0NCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNX19LAorIHsweDAyODYsIDY0LCB7IDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTIsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4NDQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTR9fSwKKyB7MHgwMmM2LCA2NCwgeyAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDE2LAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDM1LCAweGY1LCAweDgyfX0sCisgezB4MDMwNiwgNjQsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNX19LAorIHsweDAzNDYsIDY0LCB7IDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2IsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsCisgIDB4MTUsIDB4MjQsIDB4MTksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4Nzh9fSwKKyB7MHgwMzg2LCA2NCwgeyAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDFhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDZiLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGJmLCAweGYwLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0fX0sCisgezB4MDNjNiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMSwgMHhmMCwgMHgxMiwgMHgwMCwKKyAgMHgzNiwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwgMHhmZiwgMHgxMiwgMHgxNiwgMHg2YiwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyYn19LAorIHsweDA0MDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWIsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NmIsIDB4ZTV9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDE1LCAweDI0LCAweDJiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLAorICAweGU1LCAweDE1LCAweDI0LCAweDFjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDcwLCAweDBlLCAweGU1LAorICAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDJhLCAweDkwLCAweDc4LCAweDQxLAorICAweDc0LCAweGYyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MDQ4NiwgNjQsIHsgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlZiwgMHg2MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNX19LAorIHsweDA0YzYsIDY0LCB7IDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWUsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NmIsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZTV9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDFmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDBlLAorICAweGU1LCAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI3LCAweGU1LCAweDE1LAorICAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAxLCAweGZmLCAweGYwLCAweGZkLCAweGU0LAorICAweGZmLCAweDEyLCAweDE2LCAweDZiLCAweGU1LCAweDE1LCAweDI0LCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzfX0sCisgezB4MDU0NiwgNjQsIHsgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg3MCwgMHgwZSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHgxOCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMSwgMHhmNSwgMHg4Mn19LAorIHsweDA1ODYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MWYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDIzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDAzLCAweDEyLCAweDE4LCAweDdhLCAweGU1LCAweDE1LCAweDI0LCAweDI0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLAorICAweDYwLCAweDIzLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA4LAorICAweGYwLCAweGU1LCAweDE2LCAweGM0LCAweDU0LCAweGYwLCAweGZmLCAweDQyLCAweDExLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDRmLCAweGYwfX0sCisgezB4MDYwNiwgNjQsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg0ZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg2MCwgMHgyNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwKKyAgMHhmNywgMHhmMCwgMHhlNSwgMHgxNiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmNCwgMHhmZiwgMHg1MiwgMHgxMSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1ZiwKKyAgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg1ZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgxMSwgMHhmZX19LAorIHsweDA2NDYsIDY0LCB7IDB4MDcsIDB4OTksIDB4MDAsIDB4MDgsIDB4MGQsIDB4MDEsIDB4MDgsIDB4NzksIDB4MDMsIDB4MDYsIDB4NjIsIDB4MDYsIDB4MDcsIDB4OGEsIDB4MDgsIDB4MDcsIDB4N2UsCisgIDB4MDksIDB4MDcsIDB4NjYsIDB4MGEsIDB4MDcsIDB4NzUsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YzgsIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsIDB4MjQsCisgIDB4ZmUsIDB4NjAsIDB4MWMsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4MTQsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4NWMsCisgIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2Z9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDMwLAorICAweGUwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LCAweGVmLCAweGYwLAorICAweDc1LCAweDgyLCAweDZkLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDY2LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLAorICAweDVmLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDU4LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhfX0sCisgezB4MDZjNiwgNjQsIHsgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNCwgMHg3ZiwgMHg2NCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgzMiwgMHg3NSwgMHg4MiwgMHgxYSwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlZiwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3ZiwgMHhlZSwgMHhlMCwgMHg3YywgMHgwMCwgMHgyNCwgMHgwMCwgMHhmNSwgMHgxOCwKKyAgMHhlYywgMHgzZSwgMHhmNSwgMHgxNywgMHg3NSwgMHgzMywgMHgxOSwgMHg3NSwgMHgzNCwgMHgxMiwgMHg3NSwgMHg4MiwgMHgxNCwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhlMCwgMHg3NSwgMHgyNywgMHgwMCwgMHhmNSwgMHgyOCwgMHhkMywgMHhlNSwgMHgyOCwgMHg5NSwgMHgxOCwgMHhlNSwgMHgyNywgMHg5NSwgMHgxN319LAorIHsweDA3MDYsIDY0LCB7IDB4NDAsIDB4MDYsIDB4ODUsIDB4MTcsIDB4MjcsIDB4ODUsIDB4MTgsIDB4MjgsIDB4MTIsIDB4MTMsIDB4MGQsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4NWYsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4NzUsIDB4MTcsIDB4MDAsCisgIDB4ZjUsIDB4MTgsIDB4YWUsIDB4MDIsIDB4YWYsIDB4MDEsIDB4OGUsIDB4MzMsIDB4OGYsIDB4MzQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmUsCisgIDB4YTMsIDB4ZTAsIDB4OGUsIDB4MjcsIDB4ZjUsIDB4MjgsIDB4ZDMsIDB4OTUsIDB4MTgsIDB4ZTUsIDB4MjcsIDB4OTUsIDB4MTcsIDB4NDAsIDB4MDZ9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweDg1LCAweDE3LCAweDI3LCAweDg1LCAweDE4LCAweDI4LCAweDEyLCAweDEzLCAweDBkLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLAorICAweDdmLCAweDAwLCAweGU1LCAweDI1LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweGY1LCAweDI1LCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDIyLCAweDEyLCAweDBhfX0sCisgezB4MDc4NiwgNjQsIHsgMHhjZSwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwKKyAgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwKKyAgMHg1YiwgMHhhMiwgMHgwMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgwNiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwKKyAgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHhlNH19LAorIHsweDA3YzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsCisgIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsCisgIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsCisgIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4YjR9fSwKKyB7MHgwODA2LCA2NCwgeyAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLAorICAweDYwLCAweDAzLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDAwLCAweDAyLCAweDA4LAorICAweGNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLAorICAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0fX0sCisgezB4MDg0NiwgNjQsIHsgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwKKyAgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MH19LAorIHsweDA4ODYsIDY0LCB7IDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsIDB4MDAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsCisgIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsCisgIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjB9fSwKKyB7MHgwOGM2LCA2NCwgeyAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLAorICAweGU1LCAweDEyLCAweDU0LCAweDBmLCAweDcwLCAweDAzLCAweDAyLCAweDA5LCAweGM4LCAweDEyLCAweDE2LCAweDlhLCAweGVmLCAweDIwLCAweGUxLCAweDc1LAorICAweDEyLCAweDE2LCAweGY4LCAweGVmLCAweDE0LCAweGY1LCAweDE4LCAweDEyLCAweDE4LCAweGM1LCAweGVmLCAweDI1LCAweDE4LCAweGZmLCAweGU0LCAweDMzLAorICAweGZlLCAweGMzLCAweGVmLCAweDk0LCAweDgwLCAweGVlLCAweDY0LCAweDgwLCAweDk0LCAweDgwLCAweDUwLCAweDU5LCAweDg1LCAweDE1LCAweDgyfX0sCisgezB4MDkwNiwgNjQsIHsgMHg4NSwgMHgxNCwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxMSwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHgwZiwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMCwgMHhlMiwgMHgxMiwgMHhlNX19LAorIHsweDA5NDYsIDY0LCB7IDB4MTgsIDB4NjAsIDB4MGUsIDB4ZjUsIDB4MjMsIDB4ZWYsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4YTAsCisgIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4ZDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4NWQsIDB4MTIsIDB4MTgsIDB4YzUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2IsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4ZWYsIDB4YzMsIDB4OWUsIDB4NTAsIDB4NDgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmYsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwOTg2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdiLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDMwLCAweGUxLCAweDEwLCAweGU1LCAweDE1LAorICAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDI0LCAweDgwLCAweDAzLCAweDEyfX0sCisgezB4MDljNiwgNjQsIHsgMHgxMiwgMHg5YywgMHgxMiwgMHgxNiwgMHhjOSwgMHhlZiwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwYSwgMHhjZCwgMHgxMiwgMHgxNywgMHhjNywgMHg4ZiwgMHgxOCwKKyAgMHgxMiwgMHgxOCwgMHhkMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHhjMywKKyAgMHg5ZiwgMHg1MCwgMHgyOCwgMHgxMiwgMHgxOCwgMHhhOSwgMHhlZiwgMHgzMCwgMHhlMCwgMHgyMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNX19LAorIHsweDBhMDYsIDY0LCB7IDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MTIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGEsIDB4Y2QsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4Y2QsIDB4YjQsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLAorICAweDMwLCAweGU3LCAweDI5LCAweGU1LCAweDE4LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE4LCAweDIwLCAweDg1LCAweDE4LCAweDIzLAorICAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweDhjLCAweDJjLCAweGY1LCAweDJkLAorICAweDEyLCAweDEzLCAweGNmLCAweGU1LCAweDE4LCAweDI1LCAweGUwLCAweGZmLCAweDEyLCAweDE1LCAweDBkLCAweDIyLCAweGU1LCAweDE4LCAweGQzfX0sCisgezB4MGE4NiwgNjQsIHsgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOCwgMHgzZiwgMHg4NSwgMHgxOCwgMHgyMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmYywKKyAgMHhhMywgMHhlMCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywKKyAgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHgyNCwgMHgwMSwgMHhmNSwgMHgyZCwgMHhlNCwgMHgzZSwgMHhmNSwgMHgyYywgMHgxMiwgMHgxNCwgMHgxZH19LAorIHsweDBhYzYsIDY0LCB7IDB4ZTUsIDB4MTgsIDB4MDQsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4MGQsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsCisgIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NGEsIDB4MDQsIDB4ZjAsCisgIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MmYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDMsIDB4NzQsIDB4ZjcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjB9fSwKKyB7MHgwYjA2LCA2NCwgeyAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweDlmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLAorICAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1LCAweGMwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJlLCAweGYwLAorICAweDc1LCAweDE2LCAweDAxLCAweDEyLCAweDBmLCAweDI4LCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1LCAweGMwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJlLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweGU1LCAweDE1LCAweDI0LCAweDI2LCAweGY1LCAweDgyfX0sCisgezB4MGI0NiwgNjQsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywKKyAgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwKKyAgMHg4MywgMHhhMywgMHhhMywgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NCwgMHg4MCwgMHhmMCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwKKyAgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHgxMiwgMHgwZn19LAorIHsweDBiODYsIDY0LCB7IDB4MjgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsCisgIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsCisgIDB4YzAsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4MDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzR9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDdlLCAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDJiLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyLCAweDBmLCAweDI4LCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LAorICAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJiLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweGU1LCAweDE1LAorICAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAyLCAweGYwLCAweDdlLCAweDdkLCAweDdmfX0sCisgezB4MGMwNiwgNjQsIHsgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwKKyAgMHg4MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHg4MCwgMHhmMCwKKyAgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyNywgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgwZiwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNX19LAorIHsweDBjNDYsIDY0LCB7IDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4YzAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsCisgIDB4ODMsIDB4NzQsIDB4N2MsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4MDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsCisgIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDl9fSwKKyB7MHgwYzg2LCA2NCwgeyAweGU0LCAweGY1LCAweDExLCAweGQyLCAweDAyLCAweDIyLCAweGU1LCAweDEwLCAweDA0LCAweDU0LCAweDAzLCAweGY1LCAweDEwLCAweDE0LCAweDYwLCAweDFmLCAweDE0LAorICAweDYwLCAweDMxLCAweDE0LCAweDYwLCAweDQzLCAweDI0LCAweDAzLCAweDcwLCAweDUyLCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLAorICAweDc1LCAweDE1LCAweGMwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJlLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweDgwLCAweDNkLCAweDdlLCAweDdjLAorICAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJkLCAweGYwLCAweDc1fX0sCisgezB4MGNjNiwgNjQsIHsgMHgxNiwgMHgwMiwgMHg4MCwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgyYiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHg4MCwgMHgxMywgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwKKyAgMHgxNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyNywgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHhlNSwgMHgzMiwgMHg1NSwgMHgxNiwgMHg3MCwKKyAgMHgwMywgMHgwMiwgMHgwZSwgMHgyNywgMHhlNSwgMHgxNiwgMHhmNCwgMHg1MiwgMHgzMiwgMHhlNSwgMHgyNiwgMHg1NCwgMHg3ZiwgMHhmZiwgMHg3MH19LAorIHsweDBkMDYsIDY0LCB7IDB4MTcsIDB4ZTUsIDB4MmEsIDB4NTUsIDB4MTYsIDB4NjAsIDB4MzQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4ZmUsIDB4ZTUsIDB4MTYsIDB4YzQsIDB4NTQsIDB4ZjAsCisgIDB4ZjQsIDB4ZmQsIDB4ZWUsIDB4NWQsIDB4ZjAsIDB4ODAsIDB4MjMsIDB4YmYsIDB4MjAsIDB4MjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MmEsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsCisgIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjV9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDAzLCAweGUwLCAweDE0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM0LCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDAzLCAweGUwLCAweDE0LCAweGYwLCAweGUwLCAweDYwLCAweDAzLCAweDAyLAorICAweDBlLCAweDI3LCAweDc0LCAweDBhLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweGVmLCAweDU0LCAweDAxLCAweGZmLCAweGY1LCAweDE4LCAweGU1LCAweDE1LAorICAweDI0LCAweDJjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDZmLCAweDYwLCAweDA3LCAweGU1LCAweDE4fX0sCisgezB4MGQ4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHgxMiwgMHgxOCwgMHhlMSwgMHg4ZiwgMHgxOCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNywgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHg1NCwgMHgxMCwgMHhmZSwgMHg2ZiwgMHg2MCwgMHgwNiwgMHhlZSwgMHhmMCwKKyAgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHhmZiwgMHhlNSwgMHgxOCwgMHg1NCwgMHg4MCwgMHhmZSwgMHg2ZiwgMHg2MCwgMHgwNiwgMHhlZSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxM319LAorIHsweDBkYzYsIDY0LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4MjAsCisgIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MTUsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTQsIDB4MDQsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmEsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4NDAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MTUsIDB4ZWV9fSwKKyB7MHgwZTA2LCA2NCwgeyAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU1LCAweDA0LCAweGU1LAorICAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDMwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLAorICAweDIyLCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDBmLCAweDI3LCAweGU1LCAweDI0LCAweDE0LCAweDYwLCAweDJhLCAweDE0LCAweDYwLCAweDQxLCAweDE0LAorICAweDYwLCAweDU4LCAweDE0LCAweDYwLCAweDZmLCAweDI0LCAweDA0LCAweDYwLCAweDAzLCAweDAyLCAweDBlLCAweGU1LCAweDdlLCAweDdiLCAweDdmfX0sCisgezB4MGU0NiwgNjQsIHsgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwKKyAgMHgxMiwgMHg5YywgMHg3NSwgMHgyNCwgMHgwMSwgMHgyMiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHgxMiwgMHgxMiwgMHg5YywgMHg3NSwgMHgyNCwgMHgwMiwgMHgyMiwKKyAgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyYn19LAorIHsweDBlODYsIDY0LCB7IDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTIsIDB4MTIsIDB4OWMsIDB4NzUsIDB4MjQsIDB4MDMsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4MTIsIDB4MTIsIDB4OWMsCisgIDB4NzUsIDB4MjQsIDB4MDQsIDB4MjIsIDB4MzAsIDB4MDQsIDB4MzMsIDB4YzIsIDB4MDQsIDB4NTMsIDB4MTMsIDB4ZGYsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmUsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MTEsIDB4YTZ9fSwKKyB7MHgwZWM2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweDc1LCAweDI0LCAweDA1LCAweDIyLCAweGU1LCAweDM2LAorICAweDYwLCAweDNiLCAweGQ1LCAweDM2LCAweDBhLCAweDUzLCAweDEzLCAweGVmLCAweDMwLCAweDBhLCAweDA0LCAweGQyLCAweDA5LCAweGMyLCAweDBhLCAweGU0LAorICAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDM1LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhfX0sCisgezB4MGYwNiwgNjQsIHsgMHgxMiwgMHgxMSwgMHhhNiwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwKKyAgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgyNCwKKyAgMHgyMiwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNSwgMHgxOSwgMHhmOSwgMHhlZSwgMHgzNSwgMHgxNCwKKyAgMHhmYSwgMHhlNCwgMHgxMiwgMHgxMSwgMHhlYywgMHgwNSwgMHgxOSwgMHhlNSwgMHgxOSwgMHhiNCwgMHgzYywgMHhlOCwgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDBmNDYsIDY0LCB7IDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsIDB4N2YsIDB4MTAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTIsIDB4MTUsIDB4ZGIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzR9fSwKKyB7MHgwZjg2LCA2NCwgeyAweGYyLCAweGYwLCAweDdmLCAweDAxLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLAorICAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDgwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDBmLCAweGU0LAorICAweGZkLCAweDEyLCAweDE2LCAweDZiLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0fX0sCisgezB4MGZjNiwgNjQsIHsgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZSwgMHhmMCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg2YiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMSwgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxNiwgMHg2YiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxNSwgMHg0MywKKyAgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxNiwgMHg2YiwgMHgyMiwgMHg1MywgMHgxMywgMHgzZiwgMHg5MCwgMHg3YiwgMHhmMSwgMHhlMCwgMHgzMCwKKyAgMHhlMywgMHgxNiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDEwMDYsIDY0LCB7IDB4NzQsIDB4MmUsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MDgsIDB4ZDcsIDB4OTAsIDB4N2MsIDB4MzEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsCisgIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsIDB4NzUsCisgIDB4MTYsIDB4MDIsIDB4MTIsIDB4MDgsIDB4ZDcsIDB4OTAsIDB4N2MsIDB4NzEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsCisgIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmIsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDR9fSwKKyB7MHgxMDQ2LCA2NCwgeyAweDEyLCAweDA4LCAweGQ3LCAweDkwLCAweDdjLCAweGIxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLAorICAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDI3LCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDA4LCAweGQ3LCAweDA1LAorICAweDEyLCAweGU1LCAweDEyLCAweDU0LCAweDBmLCAweGY1LCAweDE3LCAweDcwLCAweDA0LCAweDEyLCAweDExLCAweDFjLCAweDIyLCAweGU1LCAweDE3LCAweGI0LAorICAweDAxLCAweDA0LCAweDEyLCAweDBjLCAweDhjLCAweDIyLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDIwLCAweGUxLCAweDA4LCAweGU1LCAweDEzfX0sCisgezB4MTA4NiwgNjQsIHsgMHg2MCwgMHgwNCwgMHgxMiwgMHgwZSwgMHgyOCwgMHgyMiwgMHgxMiwgMHgwYywgMHg4YywgMHgyMiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwKKyAgMHg4MSwgMHgzNywgMHgwMiwgMHgxMCwgMHhkNywgMHgwMiwgMHgxMiwgMHgyNCwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwKKyAgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywKKyAgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNH19LAorIHsweDEwYzYsIDY0LCB7IDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisgIDB4OTAsIDB4MTgsIDB4NDUsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksCisgIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsCisgIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzV9fSwKKyB7MHgxMTA2LCA2NCwgeyAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLAorICAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDExLCAweGE1LCAweGMyLAorICAweDA5LCAweDkwLCAweDdiLCAweDQwLCAweGUwLCAweDE0LCAweDYwLCAweDI2LCAweDE0LCAweDYwLCAweDNiLCAweDE0LCAweDYwLCAweDUwLCAweDI0LCAweDgzLAorICAweDYwLCAweDY0LCAweDI0LCAweDgwLCAweDcwLCAweDYzLCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1fX0sCisgezB4MTE0NiwgNjQsIHsgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHg0YiwgMHg3ZSwgMHg3YywKKyAgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NSwgMHgxNiwKKyAgMHgwMiwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHgzMywgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyYiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHgxYiwgMHg3ZX19LAorIHsweDExODYsIDY0LCB7IDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsCisgIDB4MDgsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MDMsIDB4MTIsIDB4MTcsIDB4NTEsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4MjIsIDB4YmIsCisgIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsCisgIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjV9fSwKKyB7MHgxMWM2LCA2NCwgeyAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLAorICAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLAorICAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLAorICAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwfX0sCisgezB4MTIwNiwgNjQsIHsgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywKKyAgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg5MCwgMHg3ZiwgMHhhZSwKKyAgMHhlMCwgMHhmZiwgMHhkMywgMHg5MiwgMHgwMCwgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwKKyAgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZn19LAorIHsweDEyNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4NzQsIDB4MDEsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4MGIsIDB4MTIsIDB4MTgsIDB4MDksIDB4YzIsIDB4MDEsCisgIDB4ZTQsIDB4ZjUsIDB4MmIsIDB4ZjUsIDB4MzEsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MDIsIDB4NzUsIDB4MjksIDB4MGYsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsCisgIDB4NjUsIDB4MjYsIDB4NjAsIDB4MDYsIDB4NzUsIDB4MzIsIDB4MGYsIDB4ZTAsIDB4ZjUsIDB4MjYsIDB4MzAsIDB4MDIsIDB4MDMsIDB4MTIsIDB4MGZ9fSwKKyB7MHgxMjg2LCA2NCwgeyAweGVmLCAweDMwLCAweDAxLCAweDA3LCAweGMyLCAweDAxLCAweDEyLCAweDA2LCAweDNmLCAweDgwLCAweGUyLCAweDMwLCAweDA4LCAweGRmLCAweGMyLCAweDA4LCAweDEyLAorICAweDE4LCAweDJhLCAweDgwLCAweGQ4LCAweDIyLCAweGU1LCAweDEzLCAweDU1LCAweDE2LCAweDYwLCAweDZhLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDVjLCAweGU1LCAweDE2LCAweGY0LCAweDUyLCAweDEzLCAweGU1LCAweDE1LAorICAweDI0LCAweDI2LCAweGZmLCAweGU0LCAweDM1LCAweDE0LCAweGZlLCAweGU0LCAweGZkLCAweDBmLCAweGVmLCAweGFhLCAweDA2LCAweDcwLCAweDAxfX0sCisgezB4MTJjNiwgNjQsIHsgMHgwZSwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhmYywgMHg3NCwgMHg4MCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwKKyAgMHg4MywgMHhlYywgMHhmMCwgMHgwZCwgMHhiZCwgMHgwYiwgMHhlMiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZSwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNH19LAorIHsweDEzMDYsIDY0LCB7IDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MjgsIDB4NDUsIDB4MjcsIDB4NjAsIDB4NTcsIDB4YWUsIDB4MjcsIDB4YWYsIDB4MjgsCisgIDB4ZDMsIDB4ZWYsIDB4OTQsIDB4NDAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4NDAsIDB4YzMsIDB4ZTUsIDB4MjgsCisgIDB4OWYsIDB4ZjUsIDB4MjgsIDB4ZTUsIDB4MjcsIDB4OWUsIDB4ZjUsIDB4MjcsIDB4ZTQsIDB4ZmQsIDB4ZWQsIDB4YzMsIDB4OWYsIDB4ZTQsIDB4OWUsIDB4NTAsCisgIDB4MWYsIDB4ODUsIDB4MzQsIDB4ODIsIDB4ODUsIDB4MzMsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NzQsIDB4MDAsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTR9fSwKKyB7MHgxMzQ2LCA2NCwgeyAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweDBkLCAweDA1LCAweDM0LCAweGU1LCAweDM0LCAweDcwLCAweDAyLCAweDA1LCAweDMzLCAweDgwLCAweGRhLAorICAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweGVmLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDRhLCAweGYwLCAweDkwLCAweDdmLCAweDk0LCAweGYwfX0sCisgezB4MTM4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhmZiwgMHhmMCwgMHgzMCwgMHgwMCwgMHgwNywgMHhlNSwgMHgyOSwgMHg1NCwgMHgwZiwgMHhmZiwKKyAgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxZiwgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHhkZn19LAorIHsweDEzYzYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4MTksIDB4MDUsIDB4MmQsIDB4ZTUsIDB4MmQsIDB4YWUsIDB4MmMsCisgIDB4NzAsIDB4MDIsIDB4MDUsIDB4MmMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4MTIsIDB4MTgsIDB4ZWYsIDB4MDUsCisgIDB4MmQsIDB4ZTUsIDB4MmQsIDB4YWMsIDB4MmMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MmMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsCisgIDB4MTUsIDB4MjMsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MWYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTR9fSwKKyB7MHgxNDA2LCA2NCwgeyAweGY1LCAweDgzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZlLCAweDEyLCAweDE4LCAweGQzLCAweDhmLCAweDE5LCAweGVlLCAweDRmLCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGYwLCAweDgwLCAweGI1LCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweGU1LCAweDExLCAweGYwLCAweDkwLCAweDc4LCAweDRmLCAweDc0LAorICAweGMwLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDUwLCAweGYwLCAweGU1LCAweDJjLCAweDkwLCAweDc4LCAweDUxLCAweGYwLCAweGFlLCAweDJjLCAweGU1LAorICAweDJkLCAweDkwLCAweDc4LCAweDUyLCAweGYwLCAweDkwLCAweDc4LCAweDU0LCAweGU1LCAweDIzLCAweGYwLCAweDkwLCAweDc4LCAweDU3LCAweDc0fX0sCisgezB4MTQ0NiwgNjQsIHsgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg1NSwKKyAgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhlMCwgMHg2MCwgMHhmYSwgMHgyMiwgMHg4ZiwgMHgxOSwgMHhlNCwgMHhmNSwgMHgxYSwgMHg3NSwgMHgxYiwgMHhmZiwKKyAgMHg3NSwgMHgxYywgMHgxOSwgMHg3NSwgMHgxZCwgMHg4NiwgMHhhYiwgMHgxYiwgMHhhYSwgMHgxYywgMHhhOSwgMHgxZCwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwKKyAgMHgxMSwgMHhiZiwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgxYSwgMHgwNSwgMHgxYSwgMHhlZiwgMHhiNSwgMHgxOSwgMHgwMSwgMHgyMiwgMHgxMn19LAorIHsweDE0ODYsIDY0LCB7IDB4MTEsIDB4YTYsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MWIsIDB4ZmYsIDB4ZjUsIDB4MWMsIDB4ODksIDB4MWQsCisgIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTUsIDB4MTEsIDB4ZjAsIDB4ZTUsCisgIDB4MmMsIDB4OTAsIDB4NzgsIDB4NGYsIDB4ZjAsIDB4YWUsIDB4MmMsIDB4ZTUsIDB4MmQsIDB4OTAsIDB4NzgsIDB4NTAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTEsCisgIDB4NzQsIDB4YzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTIsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTQsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxNGM2LCA2NCwgeyAweDc4LCAweDU3LCAweDc0LCAweDA0LCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDU1LCAweGYwLCAweDkwLCAweDc4LCAweDU1LCAweGUwLCAweDYwLCAweGZhLCAweDIyLAorICAweGU1LCAweDE1LCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLCAweDBmLCAweDE0LAorICAweDYwLCAweDEzLCAweDE0LCAweDYwLCAweDE3LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM3LCAweGVmLCAweGYwLCAweDgwLCAweDEzLCAweDkwLCAweDdmLAorICAweGM5LCAweGVmLCAweGYwLCAweDgwLCAweDBjLCAweDkwLCAweDdmLCAweGNiLCAweGVmLCAweGYwLCAweDgwLCAweDA1LCAweDkwLCAweDdmLCAweGNkfX0sCisgezB4MTUwNiwgNjQsIHsgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgyYSwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxMywgMHgxNCwgMHg2MCwgMHgxNywgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhiNywKKyAgMHhlZiwgMHhmMCwgMHg4MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwYywgMHg5MCwgMHg3ZiwgMHhiYiwgMHhlZiwgMHhmMCwKKyAgMHg4MCwgMHgwNSwgMHg5MCwgMHg3ZiwgMHhiZCwgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgyYSwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNH19LAorIHsweDE1NDYsIDY0LCB7IDB4ZmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsCisgIDB4MTYsIDB4NmIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsCisgIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODZ9fSwKKyB7MHgxNTg2LCA2NCwgeyAweDc1LCAweDg2LCAweDAwLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDAxLCAweGYwLAorICAweDEyLCAweDEzLCAweDBkLCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLAorICAweGYwLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0fX0sCisgezB4MTVjNiwgNjQsIHsgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywKKyAgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3Zn19LAorIHsweDE2MDYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsCisgIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmZ9fSwKKyB7MHgxNjQ2LCA2NCwgeyAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLAorICAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxfX0sCisgezB4MTY4NiwgNjQsIHsgMHg3NCwgMHhmNywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlZCwgMHhmMCwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwKKyAgMHg2MCwgMHgwZSwgMHgxNCwgMHg2MCwgMHgxMSwgMHgxNCwgMHg2MCwgMHgxNCwgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjY319LAorIHsweDE2YzYsIDY0LCB7IDB4ZTAsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsCisgIDB4MGUsIDB4MTQsIDB4NjAsIDB4MTEsIDB4MTQsIDB4NjAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsCisgIDB4N2YsIDB4YjgsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4ZmYsCisgIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjB9fSwKKyB7MHgxNzA2LCA2NCwgeyAweDBlLCAweDE0LCAweDYwLCAweDExLCAweDE0LCAweDYwLCAweDE0LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLAorICAweGM5LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGZmLCAweDIyLAorICAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLAorICAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2fX0sCisgezB4MTc0NiwgNjQsIHsgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHhmNSwgMHgzNiwKKyAgMHg0MywgMHgxMywgMHgxMCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwKKyAgMHg5MCwgMHg3YiwgMHg0MywgMHhlMCwgMHhmNSwgMHgzNywgMHhhMywgMHhlMCwgMHg1NCwgMHhmMCwgMHhmNSwgMHgyOSwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwKKyAgMHgwYSwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NX19LAorIHsweDE3ODYsIDY0LCB7IDB4ODYsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsCisgIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsCisgIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MDgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsCisgIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTB9fSwKKyB7MHgxN2M2LCA2NCwgeyAweDMyLCAweDEyLCAweDE4LCAweGI3LCAweGFlLCAweDA3LCAweDEyLCAweDE4LCAweGI3LCAweGFkLCAweDA3LCAweGVlLCAweDZkLCAweDYwLCAweDEwLCAweDEyLCAweDE4LAorICAweGI3LCAweGFlLCAweDA3LCAweGVlLCAweDZkLCAweDYwLCAweDA3LCAweDEyLCAweDE4LCAweGI3LCAweGFkLCAweDA3LCAweDgwLCAweGVjLCAweGFmLCAweDA2LAorICAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLAorICAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTgwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgwYiwgMHgwNCwKKyAgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxOCwgMHg2MCwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwKKyAgMHhmNywgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywgMHg3NywgMHgxMiwgMHgxNywgMHhmOSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHgwYSwKKyAgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgxOCwgMHg2MCwgMHgxMiwgMHgxOCwgMHg5MywgMHgxMiwgMHgwYSwgMHhjZSwgMHgyMiwgMHgwM319LAorIHsweDE4NDYsIDY0LCB7IDB4MzUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MmUsIDB4ODEsIDB4MDAsIDB4MDAsIDB4YzEsIDB4ODUsIDB4YzEsIDB4ODEsIDB4YzEsIDB4MDgsIDB4YzEsIDB4MDAsCisgIDB4YzEsIDB4MDYsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MDAsIDB4OGUsIDB4MTcsIDB4OGYsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4MTUsCisgIDB4MTgsIDB4YWUsIDB4MTcsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTcsIDB4NGUsIDB4NjAsIDB4MDgsIDB4MTIsIDB4MTcsIDB4ZTgsIDB4MTIsIDB4MTcsIDB4ZTgsCisgIDB4ODAsIDB4ZWIsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgxODg2LCA2NCwgeyAweDA0LCAweGZmLCAweDQ0LCAweDEwLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGVmLCAweDQ0LCAweDMwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDBkLCAweDdlLCAweDAwLCAweDEyLCAweDE4LCAweDYwLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZlLAorICAweGYwLCAweDIyLCAweGU1LCAweDExLCAweDI0LCAweDAyLCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweGU1LCAweDExLCAweDI0LCAweDAzLCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweGU1fX0sCisgezB4MThjNiwgNjQsIHsgMHgxMSwgMHgyNCwgMHgwNCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNSwgMHgxMSwgMHgyNCwgMHgwNSwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNSwgMHgxMSwgMHgyNCwgMHgwNiwgMHg5MCwgMHg3OCwKKyAgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlNSwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHhmZn19LAorIHsweDE5MDYsIDY0LCB7IDB4ZmYsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDIsIDB4NzQsIDB4MDAsIDB4MDEsCisgIDB4MDEsIDB4MDAsIDB4YTAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDUsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgxOTQ2LCA2NCwgeyAweDAwLCAweDA3LCAweDA1LCAweDA2LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LAorICAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLAorICAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg1LCAweDAyLCAweDQwLCAweDAwLAorICAweDAxLCAweDA3LCAweDA1LCAweDg2LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg3LCAweDAyLCAweDQwLCAweDAwLCAweDAxfX0sCisgezB4MTk4NiwgNjQsIHsgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHg0OCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwKKyAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2NiwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MywgMHgwMCwgMHg3OSwgMHgwMH19LAorIHsweDE5YzYsIDY0LCB7IDB4NzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MjQsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsCisgIDB4MDAsIDB4NDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MzksIDB4MDAsIDB4NTcsIDB4MDAsIDB4NGMsIDB4MDAsIDB4NDMsIDB4MDAsIDB4MjIsCisgIDB4MDMsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4MDB9fSwKKyB7MHgxYTA2LCA2NCwgeyAweDMyLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMzLCAweDAwLCAweDZhLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDMzLCAweDAwLCAweDMxLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWE0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDE3LCAweDc5LCAweDAwLCAweDAyLCAweDFifX0sCisgezB4MWIwNiwgMjEsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgxNywgMHgyNywgMHgwMCwgMHgwMiwgMHgxNywgMHhhMCwgMHgwMCwgMHgwMiwgMHgxYiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgxYiwgMHgxNCwKKyAgMHgwMCwgMHgwMiwgMHgxNSwgMHg3OH19LAorIHsweGZmZmYsICAwLCB7IDB4MDB9fSwKK307CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhOTBtc2cuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTkwbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5MzViNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTkwbXNnLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisJdXNhOTBtc2cuaAorCisJQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCUtleXNwYW4gVVNCIEFzeW5jIE1lc3NhZ2UgRm9ybWF0cyBmb3IgdGhlIFVTQTE5SFMKKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKwltZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhpcyBsaWNlbmNlIHRleHQKKyAgIAl3aXRob3V0IG1vZGlmaWNhdGlvbiwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICAJZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgCXRoZSBiZWdpbm5pbmcgb2YgYWxsIHNvdXJjZSBmaWxlczoKKworICAgICAgICAJQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycHJhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIAlwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIAlwZXJtaXNzaW9uLgorCisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTk5PU1lTIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKwlJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisJT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKwlOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisJKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisJU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKwlDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKwlMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisJT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorCVNVQ0ggREFNQUdFLiAgICAKKworCVJldmlzaW9uczoKKworCTIwMDNmZWIxNAkJYWRkIHNldFR4TW9kZS90eE1vZGUgIGFuZCBjYW5jZWxSeFhvZmYgdG8gcG9ydENvbnRyb2wKKwkyMDAzbWFyMjEJCWNoYW5nZSBuYW1lIG9mIFBBUklUWV8wLzEgdG8gYWRkIE1BUksvU1BBQ0UKKyovCisKKyNpZm5kZWYJX19VU0E5ME1TR19fCisjZGVmaW5lCV9fVVNBOTBNU0dfXworCitzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0Q29udHJvbE1lc3NhZ2UKK3sKKwkvKgorCQl0aGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgImNvbW1hbmRzIiBzZW50IGluIHRoZSBjb250cm9sIG1lc3NhZ2U6CisKKwkJMS4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIG11c3QgYmUgcmVxdWVzdGVkIGJ5IHNldHRpbmcKKwkJCXRoZSBjb3JyZXNwb25kaW5nICJzZXQiIGZsYWcgKGFuZCBzaG91bGQgb25seSBiZSByZXF1ZXN0ZWQKKwkJCXdoZW4gbmVjZXNzYXJ5LCB0byByZWR1Y2Ugb3ZlcmhlYWQgb24gdGhlIGRldmljZSk6CisJKi8KKworCXU4CXNldENsb2NraW5nLAkvLyBob3N0IHJlcXVlc3RzIGJhdWQgcmF0ZSBiZSBzZXQKKwkJYmF1ZExvLAkJCS8vIGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24KKwkJYmF1ZEhpLAkJCS8vIGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24gCisJCQorCQlzZXRMY3IsCQkJLy8gaG9zdCByZXF1ZXN0cyBsY3IgYmUgc2V0CisJCWxjciwJCQkvLyB1c2UgUEFSSVRZLCBTVE9QQklUUywgREFUQUJJVFMgYmVsb3cKKwkJCisJCXNldFJ4TW9kZSwJCS8vIHNldCByZWNlaXZlIG1vZGUKKwkJcnhNb2RlLAkJCS8vIFJYTU9ERV9ETUEgb3IgUlhNT0RFX0JZSEFORAorCisJCXNldFR4TW9kZSwJCS8vIHNldCB0cmFuc21pdCBtb2RlCisJCXR4TW9kZSwJCQkvLyBUWE1PREVfRE1BIG9yIFRYTU9ERV9CWUhBTkQKKworCQlzZXRUeEZsb3dDb250cm9sLAkvLyBob3N0IHJlcXVlc3RzIHR4IGZsb3cgY29udHJvbCBiZSBzZXQKKwkJdHhGbG93Q29udHJvbAksCS8vIHVzZSBUWF9GTE9XLi4uIGJpdHMgYmVsb3cKKwkJc2V0UnhGbG93Q29udHJvbCwJLy8gaG9zdCByZXF1ZXN0cyByeCBmbG93IGNvbnRyb2wgYmUgc2V0CisJCXJ4Rmxvd0NvbnRyb2wsCS8vIHVzZSBSWF9GTE9XLi4uIGJpdHMgYmVsb3cKKwkJc2VuZFhvZmYsCQkvLyBob3N0IHJlcXVlc3RzIFhPRkYgdHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkKKwkJc2VuZFhvbiwJCS8vIGhvc3QgcmVxdWVzdHMgWE9OIGNoYXIgdHJhbnNtaXR0ZWQKKwkJeG9uQ2hhciwJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKwkJeG9mZkNoYXIsCQkvLyBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisKKwkJc2VuZENoYXIsCQkvLyBob3N0IHJlcXVlc3RzIGNoYXIgdHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkKKwkJdHhDaGFyLAkJCS8vIGNoYXJhY3RlciB0byBzZW5kCisKKwkJc2V0UnRzLAkJCS8vIGhvc3QgcmVxdWVzdHMgUlRTIG91dHB1dCBiZSBzZXQKKwkJcnRzLAkJCS8vIDE9b24sIDA9b2ZmCisJCXNldER0ciwgCQkvLyBob3N0IHJlcXVlc3RzIERUUiBvdXRwdXQgYmUgc2V0CisJCWR0cjsJCQkvLyAxPW9uLCAwPW9mZgorCisJCisJLyoKKwkJMi4JY29uZmlndXJhdGlvbiBkYXRhIHdoaWNoIGlzIHNpbXBseSB1c2VkIGFzIGlzIAorCQkJYW5kIG11c3QgYmUgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiBldmVyeSBob3N0IG1lc3NhZ2UuCisJKi8KKworCXU4CXJ4Rm9yd2FyZGluZ0xlbmd0aCwgIC8vIGZvcndhcmQgd2hlbiB0aGlzIG51bWJlciBvZiBjaGFycyBhdmFpbGFibGUKKwkJcnhGb3J3YXJkaW5nVGltZW91dCwgLy8gKDEtMzEgaW4gbXMpCisJCXR4QWNrU2V0dGluZzsJICAgLy8gMD1kb24ndCBhY2ssIDE9bm9ybWFsLCAyLTI1NSBUQkQuLi4KKwkvKgorCQkzLglGaXJtd2FyZSBzdGF0ZXMgd2hpY2ggY2F1c2UgYWN0aW9ucyBpZiB0aGV5IGNoYW5nZQkJCQkJCisJCWFuZCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlLgorCSovCisKKwl1OAlwb3J0RW5hYmxlZCwJLy8gMD1kaXNhYmxlZCwgMT1lbmFibGVkCisJCXR4Rmx1c2gsCQkvLyAwPW5vcm1hbCwgMT10b3NzIG91dGJvdW5kIGRhdGEKKwkJdHhCcmVhaywJCS8vIDA9YnJlYWsgb2ZmLCAxPWJyZWFrIG9uCisJCWxvb3BiYWNrTW9kZTsJLy8gMD1ubyBsb29wYmFjaywgMT1sb29wYmFjayBlbmFibGVkCisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIHJ4Rmx1c2ggYW5kIHJ4Rm9yd2FyZCBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgd2lsbCBoYXZlIG5vIGRhdGEgdG8gZm9yd2FyZCk7IGFueSBub24temVybyB2YWx1ZSAKKwkJCWlzIHJlc3BlY3RlZAorCSovCisKKwl1OAlyeEZsdXNoLAkJLy8gdG9zcyBpbmJvdW5kIGRhdGEKKwkJcnhGb3J3YXJkLAkJLy8gZm9yd2FyZCBhbGwgaW5ib3VuZCBkYXRhLCBOT1cgKGFzIGlmIGZ3ZExlbj09MSkKKwkJY2FuY2VsUnhYb2ZmLAkvLyBjYW5jZWwgYW55IHJlY2VpdmUgWE9GRiBzdGF0ZSAoX3R4WG9mZikKKwkJcmV0dXJuU3RhdHVzOwkvLyByZXR1cm4gY3VycmVudCBzdGF0dXMgTk9XCit9OworCisvLyBkZWZpbmVzIGZvciBiaXRzIGluIGxjcgorI2RlZmluZQkJVVNBX0RBVEFCSVRTXzUJCTB4MDAKKyNkZWZpbmUJCVVTQV9EQVRBQklUU182CQkweDAxCisjZGVmaW5lCQlVU0FfREFUQUJJVFNfNwkJMHgwMgorI2RlZmluZQkJVVNBX0RBVEFCSVRTXzgJCTB4MDMKKyNkZWZpbmUJCVNUT1BCSVRTXzU2NzhfMQkJMHgwMAkvLyAxIHN0b3AgYml0IGZvciBhbGwgYnl0ZSBzaXplcworI2RlZmluZQkJU1RPUEJJVFNfNV8xcDUJCTB4MDQJLy8gMS41IHN0b3AgYml0cyBmb3IgNS1iaXQgYnl0ZQorI2RlZmluZQkJU1RPUEJJVFNfNjc4XzIJCTB4MDQJLy8gMiBzdG9wIGJpdHMgZm9yIDYtOCBiaXQgYnl0ZQorI2RlZmluZQkJVVNBX1BBUklUWV9OT05FCQkweDAwCisjZGVmaW5lCQlVU0FfUEFSSVRZX09ERAkJMHgwOAorI2RlZmluZQkJVVNBX1BBUklUWV9FVkVOCQkweDE4CisjZGVmaW5lCQlQQVJJVFlfTUFSS18xICAJCTB4MjggICAJLy8gZm9yY2UgcGFyaXR5IE1BUksKKyNkZWZpbmUJCVBBUklUWV9TUEFDRV8wIAkJMHgzOAkvLyBmb3JjZSBwYXJpdHkgU1BBQ0UKKworI2RlZmluZQkJVFhGTE9XX0NUUwkJCTB4MDQJCisjZGVmaW5lCQlUWEZMT1dfRFNSCQkJMHgwOAorI2RlZmluZQkJVFhGTE9XX1hPRkYJCQkweDAxCQorI2RlZmluZQkJVFhGTE9XX1hPRkZfQU5ZCQkweDAyCQorI2RlZmluZQkJVFhGTE9XX1hPRkZfQklUUwkoVFhGTE9XX1hPRkYgfCBUWEZMT1dfWE9GRl9BTlkpCisKKyNkZWZpbmUJCVJYRkxPV19YT0ZGCQkJMHgxMAkKKyNkZWZpbmUJCVJYRkxPV19SVFMJCQkweDIwCQorI2RlZmluZQkJUlhGTE9XX0RUUgkJCTB4NDAKKyNkZWZpbmUJCVJYRkxPV19EU1JfU0VOU0lUSVZJVFkJMHg4MAorCisjZGVmaW5lCQlSWE1PREVfQllIQU5ECQkweDAwCQorI2RlZmluZQkJUlhNT0RFX0RNQQkJCTB4MDIJCisKKyNkZWZpbmUJCVRYTU9ERV9CWUhBTkQJCTB4MDAJCisjZGVmaW5lCQlUWE1PREVfRE1BCQkJMHgwMgkKKworCisvLyBhbGwgdGhpbmdzIGNhbGxlZCAiU3RhdHVzTWVzc2FnZSIgYXJlIHNlbnQgb24gdGhlIHN0YXR1cyBlbmRwb2ludAorCitzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0U3RhdHVzTWVzc2FnZQkKK3sKKwl1OAltc3IsCQkJLy8gcmVwb3J0cyB0aGUgYWN0dWFsIE1TUiByZWdpc3RlcgorCQljdHMsCQkJLy8gcmVwb3J0cyBDVFMgcGluCisJCWRjZCwJCQkvLyByZXBvcnRzIERDRCBwaW4KKwkJZHNyLAkJCS8vIHJlcG9ydHMgRFNSIHBpbgorCQlyaSwJCQkJLy8gcmVwb3J0cyBSSSBwaW4KKwkJX3R4WG9mZiwJCS8vIHBvcnQgaXMgaW4gWE9GRiBzdGF0ZSAod2UgcmVjZWl2ZWQgWE9GRikKKwkJcnhCcmVhaywJCS8vIHJlcG9ydHMgYnJlYWsgc3RhdGUKKwkJcnhPdmVycnVuLAkJLy8gY291bnQgb2Ygb3ZlcnJ1biBlcnJvcnMgKHNpbmNlIGxhc3QgcmVwb3J0ZWQpCisJCXJ4UGFyaXR5LAkJLy8gY291bnQgb2YgcGFyaXR5IGVycm9ycyAoc2luY2UgbGFzdCByZXBvcnRlZCkKKwkJcnhGcmFtZSwJCS8vIGNvdW50IG9mIGZyYW1lIGVycm9ycyAoc2luY2UgbGFzdCByZXBvcnRlZCkKKwkJcG9ydFN0YXRlLAkJLy8gUE9SVFNUQVRFX3h4eCBiaXRzICh1c2VmdWwgZm9yIGRlYnVnZ2luZykKKwkJbWVzc2FnZUFjaywJCS8vIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisJCWNoYXJBY2ssCQkvLyBjaGFyYWN0ZXIgYWNrbm93bGVkZ2VtZW50CisJCWNvbnRyb2xSZXNwb25zZTsJLy8gKHZhbHVlID0gcmV0dXJuU3RhdHVzKSBhIGNvbnRyb2wgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQgCit9OworCisvLyBiaXRzIGluIFJYIGRhdGEgbWVzc2FnZSB3aGVuIFNUQVQgYnl0ZSBpcyBpbmNsdWRlZAorCisjZGVmaW5lCVJYRVJST1JfT1ZFUlJVTgkJMHgwMgorI2RlZmluZQlSWEVSUk9SX1BBUklUWQkJMHgwNAorI2RlZmluZQlSWEVSUk9SX0ZSQU1JTkcJCTB4MDgKKyNkZWZpbmUJUlhFUlJPUl9CUkVBSwkJMHgxMAorCisjZGVmaW5lCVBPUlRTVEFURV9FTkFCTEVECTB4ODAKKyNkZWZpbmUJUE9SVFNUQVRFX1RYRkxVU0gJMHgwMQorI2RlZmluZQlQT1JUU1RBVEVfVFhCUkVBSwkweDAyCisjZGVmaW5lCVBPUlRTVEFURV9MT09QQkFDSyAJMHgwNAorCisvLyBNU1IgYml0cworCisjZGVmaW5lIFVTQV9NU1JfZENUUwkgIAkJMHgwMQkJLy8gQ1RTIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVwb3J0CQorI2RlZmluZSBVU0FfTVNSX2REU1IJICAJCTB4MDIKKyNkZWZpbmUgVVNBX01TUl9kUkkJCQkweDA0CisjZGVmaW5lIFVTQV9NU1JfZERDRAkgIAkJMHgwOAorCisjZGVmaW5lIFVTQV9NU1JfQ1RTCQkJMHgxMAkgIAkvLyBjdXJyZW50IHN0YXRlIG9mIENUUworI2RlZmluZSBVU0FfTVNSX0RTUgkJCTB4MjAKKyNkZWZpbmUgVVNBX1VTQV9NU1JfUkkJCQkweDQwCisjZGVmaW5lIE1TUl9EQ0QJCQkJMHg4MAorCisvLyBpZTogdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIGVuZHBvaW50IGJ1ZmZlcgorI2RlZmluZQkJTUFYX0RBVEFfTEVOCQkJNjQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWM2MDJhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTAsMCArMSwxMDM0IEBACisvKgorICogS0xTSSBLTDVLVVNCMTA1IGNoaXAgUlMyMzIgY29udmVydGVyIGRyaXZlcgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAxIFV0ei1Vd2UgSGF1cyA8aGF1c0B1dWhhdXMuZGU+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHdhcyBhY3F1aXJlZCB1c2luZyBTbmlmZlVTQiBhbnMgc25vb3BVU0IKKyAqIG9uIFdpbmRvd3M5OC4KKyAqIEl0IHdhcyB3cml0dGVuIG91dCBvZiBmcnVzdHJhdGlvbiB3aXRoIHRoZSBQYWxtQ29ubmVjdCBVU0IgU2VyaWFsIGFkYXB0ZXIKKyAqIHNvbGQgYnkgUGFsbSBJbmMuCisgKiBOZWl0aGVyIFBhbG0sIG5vciB0aGVpciBjb250cmFjdG9yIChNQ0NJKSBvciB0aGVpciBzdXBwbGllciAoS0xTSSkgcHJvdmlkZWQKKyAqIGluZm9ybWF0aW9uIHRoYXQgd2FzIG5vdCBhbHJlYWR5IGF2YWlsYWJsZS4KKyAqCisgKiBJdCBzZWVtcyB0aGF0IEtMU0kgYm91Z2h0IHNvbWUgc2lsaWNvbi1kZXNpZ24gaW5mb3JtYXRpb24gZnJvbSBTY2FuTG9naWMsIAorICogd2hvc2UgU0wxMVIgcHJvY2Vzc29yIGlzIGF0IHRoZSBjb3JlIG9mIHRoZSBLTDVLVVNCIGNoaXBzZXQgZnJvbSBLTFNJLgorICogS0xTSSBoYXMgZmlybXdhcmUgYXZhaWxhYmxlIGZvciB0aGVpciBkZXZpY2VzOyBpdCBpcyBwcm9iYWJsZSB0aGF0IHRoZQorICogZmlybXdhcmUgZGlmZmVycyBmcm9tIHRoYXQgdXNlZCBieSBLTFNJIGluIHRoZWlyIHByb2R1Y3RzLiBJZiB5b3UgaGF2ZSBhbgorICogb3JpZ2luYWwgS0xTSSBkZXZpY2UgYW5kIGNhbiBwcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gb24gaXQsIEkgd291bGQgYmUgCisgKiBtb3N0IGludGVyZXN0ZWQgaW4gYWRkaW5nIHN1cHBvcnQgZm9yIGl0IGhlcmUuIElmIHlvdSBoYXZlIGFueSBpbmZvcm1hdGlvbiAKKyAqIG9uIHRoZSBwcm90b2NvbCB1c2VkIChvciBmaW5kIGVycm9ycyBpbiBteSByZXZlcnNlLWVuZ2luZWVyZWQgc3R1ZmYpLCBwbGVhc2UKKyAqIGxldCBtZSBrbm93LgorICoKKyAqIFRoZSBjb2RlIHdhcyBvbmx5IHRlc3RlZCB3aXRoIGEgUGFsbUNvbm5lY3QgVVNCIGFkYXB0ZXI7IGlmIHlvdQorICogYXJlIGFkdmVudHVyb3VzLCB0cnkgaXQgd2l0aCBhbnkgS0xTSS1iYXNlZCBkZXZpY2UgYW5kIGxldCBtZSBrbm93IGhvdyBpdAorICogYnJlYWtzIHNvIHRoYXQgSSBjYW4gZml4IGl0IQorICovCisKKy8qIFRPRE86CisgKgljaGVjayBtb2RlbSBsaW5lIHNpZ25hbHMKKyAqCWltcGxlbWVudCBoYW5kc2hha2luZyBvciBkZWNpZGUgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCBpdAorICovCisKKy8qIEhpc3Rvcnk6CisgKiAgIDAuM2EgLSBpbXBsZW1lbnRlZCBwb29scyBvZiB3cml0ZSBVUkJzCisgKiAgIDAuMyAgLSBhbHBoYSB2ZXJzaW9uIGZvciBwdWJsaWMgdGVzdGluZworICogICAwLjIgIC0gVElPQ01HRVQgd29ya3MsIHNvIGF1dG9waWxvdCgxKSBjYW4gYmUgdXNlZCEKKyAqICAgMC4xICAtIGNhbiBiZSB1c2VkIHRvIHRvIHBpbG90LXhmZXIgLXAgL2Rldi90dHlVU0IwIC1sCisgKgorICogICBUaGUgZHJpdmVyIHNrZWxldG9uIGlzIG1haW5seSBiYXNlZCBvbiBtY3RfdTIzMi5jIGFuZCB2YXJpb3VzIG90aGVyIAorICogICBwaWVjZXMgb2YgY29kZSBzaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB0aGUgZHJpdmVycy91c2Ivc2VyaWFsLyBkaXJlY3RvcnkuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImtsNWt1c2IxMDUuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuM2EiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlV0ei1Vd2UgSGF1cyA8aGF1c0B1dWhhdXMuZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiS0xTSSBLTDVLVVNCMTA1IGNoaXBzZXQgVVNCLT5TZXJpYWwgQ29udmVydGVyIGRyaXZlciIKKworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcworICovCitzdGF0aWMgaW50ICBrbHNpXzEwNV9zdGFydHVwCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3NodXRkb3duCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X29wZW4JICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2UJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAga2xzaV8xMDVfd3JpdGUJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkgIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBrbHNpXzEwNV93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlciAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga2xzaV8xMDVfd3JpdGVfcm9vbSAgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjayAgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQga2xzaV8xMDVfc2V0X3Rlcm1pb3MgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV9pb2N0bAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkJCSAgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBrbHNpXzEwNV90aHJvdHRsZQkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3VudGhyb3R0bGUJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisvKgorc3RhdGljIHZvaWQga2xzaV8xMDVfYnJlYWtfY3RsCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIGludCBicmVha19zdGF0ZSApOworICovCitzdGF0aWMgaW50ICBrbHNpXzEwNV90aW9jbWdldAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV90aW9jbXNldAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgY2xlYXIpOworCisvKgorICogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBLTFNJIGNvbnZlcnRlcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoUEFMTUNPTk5FQ1RfVklELCBQQUxNQ09OTkVDVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEtMU0lfVklELCBLTFNJX0tMNUtVU0IxMDVEX1BJRCkgfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGtsNWt1c2IxMDVkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkia2w1a3VzYjEwNWQiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2w1a3VzYjEwNWRfZGV2aWNlID0geworCS5vd25lciA9ICAgICAgICAgICAgIFRISVNfTU9EVUxFLAorCS5uYW1lID0JCSAgICAgIktMNUtVU0IxMDVEIC8gUGFsbUNvbm5lY3QiLAorCS5zaG9ydF9uYW1lID0JICAgICAia2w1a3VzYjEwNWQiLAorCS5pZF90YWJsZSA9CSAgICAgaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPSAgMSwKKwkubnVtX2J1bGtfaW4gPQkgICAgIDEsCisJLm51bV9idWxrX291dCA9CSAgICAgMSwKKwkubnVtX3BvcnRzID0JICAgICAxLAorCS5vcGVuID0JCSAgICAga2xzaV8xMDVfb3BlbiwKKwkuY2xvc2UgPQkgICAgIGtsc2lfMTA1X2Nsb3NlLAorCS53cml0ZSA9CSAgICAga2xzaV8xMDVfd3JpdGUsCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPSBrbHNpXzEwNV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5jaGFyc19pbl9idWZmZXIgPSAgIGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlciwKKwkud3JpdGVfcm9vbSA9ICAgICAgICBrbHNpXzEwNV93cml0ZV9yb29tLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPWtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjaywKKwkuaW9jdGwgPQkgICAgIGtsc2lfMTA1X2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CSAgICAga2xzaV8xMDVfc2V0X3Rlcm1pb3MsCisJLyouYnJlYWtfY3RsID0JICAgICBrbHNpXzEwNV9icmVha19jdGwsKi8KKwkudGlvY21nZXQgPSAgICAgICAgICBrbHNpXzEwNV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICBrbHNpXzEwNV90aW9jbXNldCwKKwkuYXR0YWNoID0JICAgICBrbHNpXzEwNV9zdGFydHVwLAorCS5zaHV0ZG93biA9CSAgICAga2xzaV8xMDVfc2h1dGRvd24sCisJLnRocm90dGxlID0JICAgICBrbHNpXzEwNV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CSAgICAga2xzaV8xMDVfdW50aHJvdHRsZSwKK307CisKK3N0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzIHsKKwlfX3U4CXBrdGxlbjsJCS8qIGFsd2F5cyA1LCBpdCBzZWVtcyAqLworCV9fdTgJYmF1ZHJhdGU7CisJX191OAlkYXRhYml0czsKKwlfX3U4CXVua25vd24xOworCV9fdTgJdW5rbm93bjI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogd2UgaW1wbGVtZW50IGEgcG9vbCBvZiBOVU1fVVJCUyB1cmJzIHBlciB1c2Jfc2VyaWFsICovCisjZGVmaW5lIE5VTV9VUkJTCQkJMQorI2RlZmluZSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUJNjQKK3N0cnVjdCBrbHNpXzEwNV9wcml2YXRlIHsKKwlzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncwljZmc7CisJc3RydWN0IHRlcm1pb3MJCQl0ZXJtaW9zOworCXVuc2lnbmVkIGxvbmcJCQlsaW5lX3N0YXRlOyAvKiBtb2RlbSBsaW5lIHNldHRpbmdzICovCisJLyogd3JpdGUgcG9vbCAqLworCXN0cnVjdCB1cmIgKgkJCXdyaXRlX3VyYl9wb29sW05VTV9VUkJTXTsKKwlzcGlubG9ja190CQkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQkJYnl0ZXNfaW47CisJdW5zaWduZWQgbG9uZwkJCWJ5dGVzX291dDsKK307CisKKworLyoKKyAqIEhhbmRsZSB2ZW5kb3Igc3BlY2lmaWMgVVNCIHJlcXVlc3RzCisgKi8KKworCisjZGVmaW5lIEtMU0lfVElNRU9VVAkgNTAwMCAvKiBkZWZhdWx0IHVyYiB0aW1lb3V0ICovCisKK3N0YXRpYyBpbnQga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgICBzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyAqc2V0dGluZ3MpCit7CisJaW50IHJjOworCisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fU0VUX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgLyogdmFsdWUgKi8KKwkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCSAgICAgc2V0dGluZ3MsCisJCQkgICAgIHNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyksCisJCQkgICAgIEtMU0lfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCWluZm8oIiVzIC0gJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWQiLAorCSAgICBfX0ZVTkNUSU9OX18sCisJICAgIHNldHRpbmdzLT5wa3RsZW4sCisJICAgIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAorCSAgICBzZXR0aW5ncy0+dW5rbm93bjEsIHNldHRpbmdzLT51bmtub3duMik7CisgICAgICAgIHJldHVybiByYzsKK30gLyoga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MgKi8KKworLyogdHJhbnNsYXRlIGEgMTYtYml0IHN0YXR1cyB2YWx1ZSBmcm9tIHRoZSBkZXZpY2UgdG8gbGludXgncyBUSU8gYml0cyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga2xzaV8xMDVfc3RhdHVzMmxpbmVzdGF0ZShjb25zdCBfX3UxNiBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyByZXMgPSAwOworCisJcmVzID0gICAoKHN0YXR1cyAmIEtMNUtVU0IxMDVBX0RTUikgPyBUSU9DTV9EU1IgOiAwKQorCSAgICAgIHwgKChzdGF0dXMgJiBLTDVLVVNCMTA1QV9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkgICAgICA7CisKKwlyZXR1cm4gcmVzOworfQorLyogCisgKiBSZWFkIGxpbmUgY29udHJvbCB2aWEgdmVuZG9yIGNvbW1hbmQgYW5kIHJldHVybiByZXN1bHQgdGhyb3VnaAorICogKmxpbmVfc3RhdGVfcCAKKyAqLworLyogSXQgc2VlbXMgdGhhdCB0aGUgc3RhdHVzIGJ1ZmZlciBoYXMgYWx3YXlzIG9ubHkgMiBieXRlcyBsZW5ndGggKi8KKyNkZWZpbmUgS0xTSV9TVEFUVVNCVUZfTEVOCTIKK3N0YXRpYyBpbnQga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpsaW5lX3N0YXRlX3ApCit7CisJaW50IHJjOworCV9fdTggc3RhdHVzX2J1ZltLTFNJX1NUQVRVU0JVRl9MRU5dID0geyAtMSwtMX07CisJX191MTYgc3RhdHVzOworCisJaW5mbygiJXMgLSBzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3QiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1BPTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkgICAgIDAsIC8qIHZhbHVlICovCisJCQkgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgIHN0YXR1c19idWYsIEtMU0lfU1RBVFVTQlVGX0xFTiwKKwkJCSAgICAgMTAwMDAKKwkJCSAgICAgKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlJlYWRpbmcgbGluZSBzdGF0dXMgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwllbHNlIHsKKwkJc3RhdHVzID0gc3RhdHVzX2J1ZlswXSArIChzdGF0dXNfYnVmWzFdPDw4KTsKKworCQlpbmZvKCIlcyAtIHJlYWQgc3RhdHVzICV4ICV4IiwgX19GVU5DVElPTl9fLAorCQkgICAgIHN0YXR1c19idWZbMF0sIHN0YXR1c19idWZbMV0pOworCisJCSpsaW5lX3N0YXRlX3AgPSBrbHNpXzEwNV9zdGF0dXMybGluZXN0YXRlKHN0YXR1cyk7CisJfQorCisgICAgICAgIHJldHVybiByYzsKK30KKworCisvKgorICogRHJpdmVyJ3MgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IGtsc2lfMTA1X3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXY7CisJaW50IGk7CisKKwkvKiBjaGVjayBpZiB3ZSBzdXBwb3J0IHRoZSBwcm9kdWN0IGlkIChzZWUga2V5c3Bhbi5jKQorCSAqIEZJWE1FCisJICovCisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCWZvciAoaT0wOyBpPHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJaW50IGo7CisJCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSksCisJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2KSB7CisJCQlkYmcoIiVza21hbGxvYyBmb3Iga2xzaV8xMDVfcHJpdmF0ZSBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCS8qIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzICovCisJCXByaXYtPmNmZy5wa3RsZW4gICAgPSA1OworCQlwcml2LT5jZmcuYmF1ZHJhdGUgID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCQlwcml2LT5jZmcuZGF0YWJpdHMgID0ga2w1a3VzYjEwNWFfZHRiXzg7CisJCXByaXYtPmNmZy51bmtub3duMSAgPSAwOworCQlwcml2LT5jZmcudW5rbm93bjIgID0gMTsKKworCQlwcml2LT5saW5lX3N0YXRlICAgID0gMDsKKworCQlwcml2LT5ieXRlc19pbgkgICAgPSAwOworCQlwcml2LT5ieXRlc19vdXQJICAgID0gMDsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CisKKwkJc3Bpbl9sb2NrX2luaXQgKCZwcml2LT5sb2NrKTsKKwkJZm9yIChqPTA7IGo8TlVNX1VSQlM7IGorKykgeworCQkJc3RydWN0IHVyYiogdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKworCQkJcHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CisJCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19GVU5DVElPTl9fKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8qIHByaXYtPnRlcm1pb3MgaXMgbGVmdCB1bmluaXRhbGl6ZWQgdW50aWwgcG9ydCBvcGVuaW5nICovCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcmlhbC0+cG9ydFtpXS0+d3JpdGVfd2FpdCk7CisJfQorCQorCXJldHVybiAoMCk7Cit9IC8qIGtsc2lfMTA1X3N0YXJ0dXAgKi8KKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAocHJpdikgeworCQkJLyoga2lsbCBvdXIgd3JpdGUgdXJiIHBvb2wgKi8KKwkJCWludCBqOworCQkJc3RydWN0IHVyYiAqKndyaXRlX3VyYnMgPSBwcml2LT53cml0ZV91cmJfcG9vbDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLGZsYWdzKTsKKworCQkJZm9yIChqID0gMDsgaiA8IE5VTV9VUkJTOyBqKyspIHsKKwkJCQlpZiAod3JpdGVfdXJic1tqXSkgeworCQkJCQkvKiBGSVhNRSAtIHVuY29tbWVudCB0aGUgZm9sbG93aW5nCisJCQkJCSAqIHVzYl9raWxsX3VyYiBjYWxsIHdoZW4gdGhlIGhvc3QKKwkJCQkJICogY29udHJvbGxlcnMgZ2V0IGZpeGVkIHRvIHNldAorCQkJCQkgKiB1cmItPmRldiA9IE5VTEwgYWZ0ZXIgdGhlIHVyYiBpcworCQkJCQkgKiBmaW5pc2hlZC4gIE90aGVyd2lzZSB0aGlzIGNhbGwKKwkJCQkJICogb29wc2VzLiAqLworCQkJCQkvKiB1c2Jfa2lsbF91cmIod3JpdGVfdXJic1tqXSk7ICovCisJCQkJCWlmICh3cml0ZV91cmJzW2pdLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJCQkgICAga2ZyZWUod3JpdGVfdXJic1tqXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCQkJdXNiX2ZyZWVfdXJiICh3cml0ZV91cmJzW2pdKTsKKwkJCQl9CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJCWtmcmVlKHByaXYpOworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwl9Cit9IC8qIGtsc2lfMTA1X3NodXRkb3duICovCisKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByZXR2YWwgPSAwOworCWludCByYzsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGxpbmVfc3RhdGU7CisJc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMKKwkgKiB0aGUgZGF0YSB0aHJvdWdoCisJICogcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7ICovCisKKwkvKiBEbyBhIGRlZmluZWQgcmVzdGFydDoKKwkgKiBTZXQgdXAgc2FuZSBkZWZhdWx0IGJhdWQgcmF0ZSBhbmQgc2VuZCB0aGUgJ1JFQURfT04nCisJICogdmVuZG9yIGNvbW1hbmQuIAorCSAqIEZJWE1FOiBzZXQgbW9kZW0gbGluZSBjb250cm9sIChob3c/KQorCSAqIFRoZW4gcmVhZCB0aGUgbW9kZW0gbGluZSBjb250cm9sIGFuZCBzdG9yZSB2YWx1ZXMgaW4KKwkgKiBwcml2LT5saW5lX3N0YXRlLgorCSAqLworCWNmZy5wa3RsZW4gICA9IDU7CisJY2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCWNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OworCWNmZy51bmtub3duMSA9IDA7CisJY2ZnLnVua25vd24yID0gMTsKKwlrbHNpXzEwNV9jaGdfcG9ydF9zZXR0aW5ncyhwb3J0LCAmY2ZnKTsKKwkKKwkvKiBzZXQgdXAgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50ZXJtaW9zLmNfaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJcHJpdi0+dGVybWlvcy5jX29mbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnOworCXByaXYtPnRlcm1pb3MuY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlwcml2LT50ZXJtaW9zLmNfbGZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfbGZsYWc7CisJZm9yIChpPTA7IGk8TkNDUzsgaSsrKQorCQlwcml2LT50ZXJtaW9zLmNfY2NbaV0gPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2NbaV07CisJcHJpdi0+Y2ZnLnBrdGxlbiAgID0gY2ZnLnBrdGxlbjsKKwlwcml2LT5jZmcuYmF1ZHJhdGUgPSBjZmcuYmF1ZHJhdGU7CisJcHJpdi0+Y2ZnLmRhdGFiaXRzID0gY2ZnLmRhdGFiaXRzOworCXByaXYtPmNmZy51bmtub3duMSA9IGNmZy51bmtub3duMTsKKwlwcml2LT5jZmcudW5rbm93bjIgPSBjZmcudW5rbm93bjI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIFJFQURfT04gYW5kIHVyYiBzdWJtaXNzaW9uICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjaywKKwkJICAgICAgcG9ydCk7CisKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmMpIHsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmMpOworCQlyZXR2YWwgPSByYzsKKwkJZ290byBleGl0OworCX0KKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsMCksCisJCQkgICAgIEtMNUtVU0IxMDVBX1NJT19DT05GSUdVUkUsCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUnxVU0JfRElSX09VVHxVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT04sCisJCQkgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgIE5VTEwsCisJCQkgICAgIDAsCisJCQkgICAgIEtMU0lfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJcmV0dmFsID0gcmM7CisJfSBlbHNlIAorCQlkYmcoIiVzIC0gZW5hYmxlZCByZWFkaW5nIiwgX19GVU5DVElPTl9fKTsKKworCXJjID0ga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUocG9ydCwgJmxpbmVfc3RhdGUpOworCWlmIChyYyA+PSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX3N0YXRlID0gbGluZV9zdGF0ZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHJlYWQgbGluZSBzdGF0ZSAweCVseCIsIF9fRlVOQ1RJT05fXywgbGluZV9zdGF0ZSk7CisJCXJldHZhbCA9IDA7CisJfSBlbHNlCisJCXJldHZhbCA9IHJjOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9IC8qIGtsc2lfMTA1X29wZW4gKi8KKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJjOworCisJZGJnKCIlcyBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2VuZCBSRUFEX09GRiAqLworCXJjID0gdXNiX2NvbnRyb2xfbXNnIChwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT0ZGLAorCQkJICAgICAgMCwgLyogaW5kZXggKi8KKwkJCSAgICAgIE5VTEwsIDAsCisJCQkgICAgICBLTFNJX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCSAgICBlcnIoIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkcyBhbmQgd3JpdGVzICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkvKiB1bmxpbmsgb3VyIHdyaXRlIHBvb2wgKi8KKwkvKiBGSVhNRSAqLworCS8qIHdnZyAtIGRvIEkgbmVlZCB0aGlzPyBJIHRoaW5rIHNvLiAqLworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwlpbmZvKCJrbDVrdXNiMTA1IHBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dCIsIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOworfSAvKiBrbHNpXzEwNV9jbG9zZSAqLworCisKKy8qIFdlIG5lZWQgdG8gd3JpdGUgYSBjb21wbGV0ZSA2NC1ieXRlIGRhdGEgYmxvY2sgYW5kIGVuY29kZSB0aGUKKyAqIG51bWJlciBhY3R1YWxseSBzZW50IGluIHRoZSBmaXJzdCBkb3VibGUtYnl0ZSwgTFNCLW9yZGVyLiBUaGF0IAorICogbGVhdmVzIGF0IG1vc3QgNjIgYnl0ZXMgb2YgcGF5bG9hZC4KKyAqLworI2RlZmluZSBLTFNJXzEwNV9EQVRBX09GRlNFVAkyICAgLyogaW4gdGhlIGJ1bGsgdXJiIGRhdGEgYmxvY2sgKi8KKworCitzdGF0aWMgaW50IGtsc2lfMTA1X3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJlc3VsdCwgc2l6ZTsKKwlpbnQgYnl0ZXNfc2VudD0wOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgKHdyaXRlIDAgYnl0ZXMgaWYgbm9uZSkgKi8KKwkJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IGk7CisJCS8qIHNpbmNlIHRoZSBwb29sIGlzIHBlci1wb3J0IHdlIG1pZ2h0IG5vdCBuZWVkIHRoZSBzcGluIGxvY2sgIT8gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWZvciAoaT0wOyBpPE5VTV9VUkJTOyBpKyspIHsKKwkJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJCXVyYiA9IHByaXYtPndyaXRlX3VyYl9wb29sW2ldOworCQkJCWRiZygiJXMgLSB1c2luZyBwb29sIFVSQiAlZCIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAodXJiPT1OVUxMKSB7CisJCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCQkJZ290byBleGl0OworCQl9CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQkJZXJyKCIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisKKwkJc2l6ZSA9IG1pbiAoY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUgLSBLTFNJXzEwNV9EQVRBX09GRlNFVCk7CisJCXNpemUgPSBtaW4gKHNpemUsIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSAtIEtMU0lfMTA1X0RBVEFfT0ZGU0VUKTsKKworCQltZW1jcHkgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgS0xTSV8xMDVfREFUQV9PRkZTRVQsIGJ1Ziwgc2l6ZSk7CisKKwkJLyogd3JpdGUgcGF5bG9hZCBzaXplIGludG8gdHJhbnNmZXIgYnVmZmVyICovCisJCSgoX191OCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IChfX3U4KSAoc2l6ZSAmIDB4RkYpOworCQkoKF9fdTggKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMV0gPSAoX191OCkgKChzaXplICYgMHhGRjAwKT4+OCk7CisKKwkJLyogc2V0IHVwIG91ciB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgICAgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAorCQkJICAgICAga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCSAgICAgIHBvcnQpOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmICs9IHNpemU7CisJCWJ5dGVzX3NlbnQgKz0gc2l6ZTsKKwkJY291bnQgLT0gc2l6ZTsKKwl9CitleGl0OgorCS8qIGxvY2tsZXNzLCBidXQgaXQncyBmb3IgZGVidWcgaW5mbyBvbmx5Li4uICovCisJcHJpdi0+Ynl0ZXNfb3V0Kz1ieXRlc19zZW50OworCisJcmV0dXJuIGJ5dGVzX3NlbnQ7CS8qIHRoYXQncyBob3cgbXVjaCB3ZSB3cm90ZSAqLworfSAvKiBrbHNpXzEwNV93cml0ZSAqLworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV93cml0ZV9idWxrX2NhbGxiYWNrICggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogZnJvbSBnZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2sgKi8KKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30gLyoga2xzaV8xMDVfd3JpdGVfYnVsa19jb21wbGV0aW9uX2NhbGxiYWNrICovCisKKworLyogcmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgd3JpdGluZyBwcm9jZXNzICovCitzdGF0aWMgaW50IGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgY2hhcnMgPSAwOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJY2hhcnMgKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIChjaGFycyk7Cit9CisKK3N0YXRpYyBpbnQga2xzaV8xMDVfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCByb29tID0gMDsKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJcm9vbSArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiAocm9vbSk7Cit9CisKKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByYzsKKworICAgICAgICBkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIFRoZSB1cmIgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZC4gKi8KKyAgICAgICAgaWYgKHVyYi0+c3RhdHVzKSB7CisgICAgICAgICAgICAgICAgZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJCisJLyogVGhlIGRhdGEgcmVjZWl2ZWQgaXMgYWdhaW4gcHJlY2VkZWQgYnkgYSBsZW5ndGggZG91YmxlLWJ5dGUgaW4gTFNCLQorCSAqIGZpcnN0IG9yZGVyIChzZWUga2xzaV8xMDVfd3JpdGUoKSApCisJICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKSB7CisJCS8qIGVtcHR5IHVyYnMgc2VlbSB0byBoYXBwZW4sIHdlIGlnbm9yZSB0aGVtICovCisJCS8qIGRiZygiJXMgLSBlbXRweSBVUkIiLCBfX0ZVTkNUSU9OX18pOyAqLworCSAgICAgICA7CisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gMikgeworCQlkYmcoIiVzIC0gc2l6ZSAlZCBVUkIgbm90IHVuZGVyc3Rvb2QiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCX0gZWxzZSB7CisJCWludCBpOworCQlpbnQgYnl0ZXNfc2VudCA9ICgoX191OCAqKSBkYXRhKVswXSArCisJCQkJICgodW5zaWduZWQgaW50KSAoKF9fdTggKikgZGF0YSlbMV0gPDwgOCk7CisJCXR0eSA9IHBvcnQtPnR0eTsKKwkJLyogd2Ugc2hvdWxkIGltbWVkaWF0ZWx5IHJlc3VibWl0IHRoZSBVUkIsIGJlZm9yZSBhdHRlbXB0aW5nCisJCSAqIHRvIHBhc3MgdGhlIGRhdGEgb24gdG8gdGhlIHR0eSBsYXllci4gQnV0IHRoYXQgbmVlZHMgbG9ja2luZworCQkgKiBhZ2FpbnN0IHJlLWVudHJ5IGFuIHRoZW4gbWl4ZWQtdXAgZGF0YSBiZWNhdXNlIG9mCisJCSAqIGludGVybWl4ZWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goKXMKKwkJICogRklYTUUKKwkJICovIAorCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJCWlmIChieXRlc19zZW50ICsgMiA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJZGJnKCIlcyAtIHRyeWluZyB0byByZWFkIG1vcmUgZGF0YSB0aGFuIGF2YWlsYWJsZSIKKwkJCSAgICAiICglZCB2cy4gJWQpIiwgX19GVU5DVElPTl9fLAorCQkJICAgIGJ5dGVzX3NlbnQrMiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCS8qIGNhcCBhdCBpbXBsaWVkIGxpbWl0ICovCisJCQlieXRlc19zZW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMjsKKwkJfQorCisJCWZvciAoaSA9IDI7IGkgPCAyK2J5dGVzX3NlbnQ7IGkrKykgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsCisJCQkgKiB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyAKKwkJCSAqIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksICgoX191OCopIGRhdGEpW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCisJCS8qIGFnYWluIGxvY2tsZXNzLCBidXQgZGVidWcgaW5mbyBvbmx5ICovCisJCXByaXYtPmJ5dGVzX2luICs9IGJ5dGVzX3NlbnQ7CisJfQorCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJICAgICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrLAorCQkgICAgICBwb3J0KTsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmMpCisJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmMpOworfSAvKiBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9pZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJLyogbG9jayB3aGlsZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBzZXR0aW5ncyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCS8qCisJICogVXBkYXRlIGJhdWQgcmF0ZQorCSAqLworCWlmKCAoY2ZsYWcgJiBDQkFVRCkgIT0gKG9sZF9jZmxhZyAmIENCQVVEKSApIHsKKwkgICAgICAgIC8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCisJCWlmKCAob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwICkgeworCQkJZGJnKCIlczogYmF1ZCB3YXMgQjAiLCBfX0ZVTkNUSU9OX18pOworI2lmIDAKKwkJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCQkJLyogZG9uJ3Qgc2V0IFJUUyBpZiB1c2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKwkJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKSB7CisJCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SVFM7CisJCQl9CisJCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIHByaXYtPmNvbnRyb2xfc3RhdGUpOworI2VuZGlmCisJCX0KKwkJCisJCXN3aXRjaChjZmxhZyAmIENCQVVEKSB7CisJCWNhc2UgQjA6IC8qIGhhbmRsZWQgYmVsb3cgKi8KKwkJCWJyZWFrOworCQljYXNlIEIxMjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjEyMDA7CisJCQlicmVhazsKKwkJY2FzZSBCMjQwMDogcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IyNDAwOworCQkJYnJlYWs7CisJCWNhc2UgQjQ4MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iNDgwMDsKKwkJCWJyZWFrOworCQljYXNlIEI5NjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjk2MDA7CisJCQlicmVhazsKKwkJY2FzZSBCMTkyMDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMTkyMDA7CisJCQlicmVhazsKKwkJY2FzZSBCMzg0MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMzg0MDA7CisJCQlicmVhazsKKwkJY2FzZSBCNTc2MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iNTc2MDA7CisJCQlicmVhazsKKwkJY2FzZSBCMTE1MjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjExNTIwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJLTFNJIFVTQi0+U2VyaWFsIGNvbnZlcnRlcjoiCisJCQkgICAgIiB1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0LCB1c2luZyBkZWZhdWx0IgorCQkJICAgICIgb2YgOTYwMCIpOworCQkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwkJCWRiZygiJXM6IGJhdWQgaXMgQjAiLCBfX0ZVTkNUSU9OX18pOworCQkJLyogRHJvcCBSVFMgYW5kIERUUiAqLworCQkJLyogbWF5YmUgdGhpcyBzaG91bGQgYmUgc2ltdWxhdGVkIGJ5IHNlbmRpbmcgcmVhZAorCQkJICogZGlzYWJsZSBhbmQgcmVhZCBlbmFibGUgbWVzc2FnZXM/CisJCQkgKi8KKwkJCTsKKyNpZiAwCisJCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKyAgICAgICAgCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIHByaXYtPmNvbnRyb2xfc3RhdGUpOworI2VuZGlmCisJCX0KKwl9CisKKwlpZiAoKGNmbGFnICYgQ1NJWkUpICE9IChvbGRfY2ZsYWcgJiBDU0laRSkpIHsKKwkJLyogc2V0IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzICovCisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCWRiZygiJXMgLSA1IGJpdHMvYnl0ZSBub3Qgc3VwcG9ydGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gOworCQljYXNlIENTNjoKKwkJCWRiZygiJXMgLSA2IGJpdHMvYnl0ZSBub3Qgc3VwcG9ydGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gOworCQljYXNlIENTNzoKKwkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl83OworCQkJYnJlYWs7CisJCWNhc2UgQ1M4OgorCQkJcHJpdi0+Y2ZnLmRhdGFiaXRzID0ga2w1a3VzYjEwNWFfZHRiXzg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDgiKTsKKwkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKExDUikKKwkgKi8KKwlpZiAoKGNmbGFnICYgKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnICYgKFBBUkVOQnxQQVJPREQpKQorCSAgICB8fCAoY2ZsYWcgJiBDU1RPUEIpICE9IChvbGRfY2ZsYWcgJiBDU1RPUEIpICkgeworCQkKKyNpZiAwCisJCXByaXYtPmxhc3RfbGNyID0gMDsKKworCQkvKiBzZXQgdGhlIHBhcml0eSAqLworCQlpZiAoY2ZsYWcgJiBQQVJFTkIpCisJCQlwcml2LT5sYXN0X2xjciB8PSAoY2ZsYWcgJiBQQVJPREQpID8KKwkJCQlNQ1RfVTIzMl9QQVJJVFlfT0REIDogTUNUX1UyMzJfUEFSSVRZX0VWRU47CisJCWVsc2UKKwkJCXByaXYtPmxhc3RfbGNyIHw9IE1DVF9VMjMyX1BBUklUWV9OT05FOworCisJCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLworCQlwcml2LT5sYXN0X2xjciB8PSAoY2ZsYWcgJiBDU1RPUEIpID8KKwkJCU1DVF9VMjMyX1NUT1BfQklUU18yIDogTUNUX1UyMzJfU1RPUF9CSVRTXzE7CisKKwkJbWN0X3UyMzJfc2V0X2xpbmVfY3RybChzZXJpYWwsIHByaXYtPmxhc3RfbGNyKTsKKyNlbmRpZgorCQk7CisJfQorCQorCS8qCisJICogU2V0IGZsb3cgY29udHJvbDogd2VsbCwgSSBkbyBub3QgcmVhbGx5IG5vdyBob3cgdG8gaGFuZGxlIERUUi9SVFMuCisJICogSnVzdCBkbyB3aGF0IHdlIGhhdmUgc2VlbiB3aXRoIFNuaWZmVVNCIG9uIFdpbjk4LgorCSAqLworCWlmKCAoaWZsYWcgJiBJWE9GRikgIT0gKG9sZF9pZmxhZyAmIElYT0ZGKQorCSAgICB8fCAoaWZsYWcgJiBJWE9OKSAhPSAob2xkX2lmbGFnICYgSVhPTikKKwkgICAgfHwgIChjZmxhZyAmIENSVFNDVFMpICE9IChvbGRfY2ZsYWcgJiBDUlRTQ1RTKSApIHsKKwkJCisJCS8qIERyb3AgRFRSL1JUUyBpZiBubyBmbG93IGNvbnRyb2wgb3RoZXJ3aXNlIGFzc2VydCAqLworI2lmIDAKKwkJaWYgKChpZmxhZyAmIElYT0ZGKSB8fCAoaWZsYWcgJiBJWE9OKSB8fCAoY2ZsYWcgJiBDUlRTQ1RTKSApCisJCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUzsKKwkJZWxzZQorCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CisJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgcHJpdi0+Y29udHJvbF9zdGF0ZSk7CisjZW5kaWYKKwkJOworCX0KKwltZW1jcHkgKCZjZmcsICZwcml2LT5jZmcsIHNpemVvZihjZmcpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCS8qIG5vdyBjb21taXQgY2hhbmdlcyB0byBkZXZpY2UgKi8KKwlrbHNpXzEwNV9jaGdfcG9ydF9zZXR0aW5ncyhwb3J0LCAmY2ZnKTsKK30gLyoga2xzaV8xMDVfc2V0X3Rlcm1pb3MgKi8KKworCisjaWYgMAorc3RhdGljIHZvaWQgbWN0X3UyMzJfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKilwb3J0LT5wcml2YXRlOworCXVuc2lnbmVkIGNoYXIgbGNyID0gcHJpdi0+bGFzdF9sY3I7CisKKwlkYmcoIiVzc3RhdGU9JWQiLCBfX0ZVTkNUSU9OX18sIGJyZWFrX3N0YXRlKTsKKworCWlmIChicmVha19zdGF0ZSkKKwkJbGNyIHw9IE1DVF9VMjMyX1NFVF9CUkVBSzsKKworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsY3IpOworfSAvKiBtY3RfdTIzMl9icmVha19jdGwgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IGtsc2lfMTA1X3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGxpbmVfc3RhdGU7CisJZGJnKCIlcyAtIHJlcXVlc3QsIGp1c3QgZ3Vlc3NpbmciLCBfX0ZVTkNUSU9OX18pOworCisJcmMgPSBrbHNpXzEwNV9nZXRfbGluZV9zdGF0ZShwb3J0LCAmbGluZV9zdGF0ZSk7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIlJlYWRpbmcgbGluZSBjb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCS8qIGJldHRlciByZXR1cm4gdmFsdWU/IEVBR0FJTj8gKi8KKwkJcmV0dXJuIHJjOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmxpbmVfc3RhdGUgPSBsaW5lX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJZGJnKCIlcyAtIHJlYWQgbGluZSBzdGF0ZSAweCVseCIsIF9fRlVOQ1RJT05fXywgbGluZV9zdGF0ZSk7CisJcmV0dXJuIChpbnQpbGluZV9zdGF0ZTsKK30KKworc3RhdGljIGludCBrbHNpXzEwNV90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKy8qIGlmIHRoaXMgZXZlciBnZXRzIGltcGxlbWVudGVkLCBpdCBzaG91bGQgYmUgZG9uZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY29udHJvbDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fRFRSOworCWNvbnRyb2wgPSBwcml2LT5jb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBjb250cm9sKTsKKyovCisJcmV0dXJuIHJldHZhbDsKK30KKwkJCQkJCitzdGF0aWMgaW50IGtsc2lfMTA1X2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJCisJZGJnKCIlc2NtZD0weCV4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJLyogQmFzZWQgb24gY29kZSBmcm9tIGFjbS5jIGFuZCBvdGhlcnMgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01JV0FJVDoKKwkJLyogd2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpKi8KKwkJLyogVE9ETyAqLworCQlkYmcoIiVzIC0gVElPQ01JV0FJVCBub3QgaGFuZGxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQkvKiBUT0RPICovCisJCWRiZygiJXMgLSBUSU9DR0lDT1VOVCBub3QgaGFuZGxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJY2FzZSBUQ0dFVFM6CisJCS8qIHJldHVybiBjdXJyZW50IGluZm8gdG8gY2FsbGVyICovCisJCWRiZygiJXMgLSBUQ0dFVFMgZGF0YSBmYWtlZC9pbmNvbXBsZXRlIiwgX19GVU5DVElPTl9fKTsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3MoKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZywKKwkJCQkJCSAgICZwcml2LT50ZXJtaW9zKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwljYXNlIFRDU0VUUzoKKwkJLyogc2V0IHBvcnQgdGVybWlvcyB0byB0aGUgb25lIGdpdmVuIGJ5IHRoZSB1c2VyICovCisJCWRiZygiJXMgLSBUQ1NFVFMgbm90IGhhbmRsZWQiLCBfX0ZVTkNUSU9OX18pOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX2FyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAodXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKCZwcml2LT50ZXJtaW9zLAorCQkJCQkJICAgKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJa2xzaV8xMDVfc2V0X3Rlcm1pb3MocG9ydCwgJnByaXYtPnRlcm1pb3MpOworCQlyZXR1cm4gMDsKKwljYXNlIFRDU0VUU1c6IHsKKwkJLyogc2V0IHBvcnQgdGVybWlvcyBhbmQgdHJ5IHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgbGFzdAorCQkgKiB3cml0ZSBvcGVyYXRpb24gKi8KKwkJLyogV2UgZ3Vlc3MgaGVyZS4gSWYgdGhlcmUgYXJlIG5vdCB0b28gbWFueSB3cml0ZSB1cmJzCisJCSAqIG91dHN0YW5kaW5nLCB3ZSBsaWUuICovCisJCS8qIHdoYXQgaXMgdGhlIHJpZ2h0IHdheSB0byB3YWl0IGhlcmU/IHNjaGVkdWxlKCkgPyAqLworCSAgICAgICAgLyoKKwkJd2hpbGUgKGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlcihwb3J0KSA+IChOVU1fVVJCUyAvIDQgKSAqIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSkKKwkJCSAgICBzY2hlZHVsZSgpOworCQkgKi8KKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJICAgICAgfQorCWRlZmF1bHQ6CisJCWRiZygiJXM6IGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IiwgX19GVU5DVElPTl9fLGNtZCk7CisJCXJldHVybigtRU5PSU9DVExDTUQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9IC8qIGtsc2lfMTA1X2lvY3RsICovCisKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgcmVzdWx0KTsKK30KKworCisKK3N0YXRpYyBpbnQgX19pbml0IGtsc2lfMTA1X2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQga2xzaV8xMDVfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmtsNWt1c2IxMDVkX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2w1a3VzYjEwNWRfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdCAoa2xzaV8xMDVfaW5pdCk7Cittb2R1bGVfZXhpdCAoa2xzaV8xMDVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsgCisKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGV4dGVuc2l2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKKworLyogdmltOiBzZXQgc3RzPTggdHM9OCBzdz04OiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzMWQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgS0xTSSBLTDVLVVNCMTA1IHNlcmlhbCBwb3J0IGFkYXB0ZXIKKyAqLworCisvKiB2ZW5kb3IvcHJvZHVjdCBwYWlycyB0aGF0IGFyZSBrbm93biB0byBjb250YWluIHRoaXMgY2hpcHNldCAqLworI2RlZmluZSBQQUxNQ09OTkVDVF9WSUQJCTB4MDgzMAorI2RlZmluZSBQQUxNQ09OTkVDVF9QSUQJCTB4MDA4MAorCisjZGVmaW5lIEtMU0lfVklECQkweDA1ZTkKKyNkZWZpbmUgS0xTSV9LTDVLVVNCMTA1RF9QSUQJMHgwMGMwCisKKy8qIFZlbmRvciBjb21tYW5kczogKi8KKworCisvKiBwb3J0IHRhYmxlIC0tIHRoZSBjaGlwIHN1cHBvcnRzIHVwIHRvIDQgY2hhbm5lbHMgKi8KKworLyogYmF1ZCByYXRlcyAqLworCitlbnVtIHsKKyAga2w1a3VzYjEwNWFfc2lvX2IxMTUyMDAgPSAwLAorICBrbDVrdXNiMTA1YV9zaW9fYjU3NjAwICA9IDEsCisgIGtsNWt1c2IxMDVhX3Npb19iMzg0MDAgID0gMiwKKyAga2w1a3VzYjEwNWFfc2lvX2IxOTIwMCAgPSA0LAorICBrbDVrdXNiMTA1YV9zaW9fYjE0NDAwICA9IDUsCisgIGtsNWt1c2IxMDVhX3Npb19iOTYwMCAgID0gNiwKKyAga2w1a3VzYjEwNWFfc2lvX2I0ODAwICAgPSA4LCAgIC8qIHVuY2hlY2tlZCAqLworICBrbDVrdXNiMTA1YV9zaW9fYjI0MDAgICA9IDksICAgLyogdW5jaGVja2VkICovCisgIGtsNWt1c2IxMDVhX3Npb19iMTIwMCAgID0gMHhhLCAgLyogdW5jaGVja2VkICovCisgIGtsNWt1c2IxMDVhX3Npb19iNjAwICAgID0gMHhiICAgLyogdW5jaGVja2VkICovCit9OworCisvKiBkYXRhIGJpdHMgKi8KKyNkZWZpbmUga2w1a3VzYjEwNWFfZHRiXzcgICA3CisjZGVmaW5lIGtsNWt1c2IxMDVhX2R0Yl84ICAgOAorCisKKworLyogcmVxdWVzdHM6ICovCisjZGVmaW5lIEtMNUtVU0IxMDVBX1NJT19TRVRfREFUQSAgMQorI2RlZmluZSBLTDVLVVNCMTA1QV9TSU9fUE9MTCAgICAgIDIKKyNkZWZpbmUgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRSAgICAgIDMKKy8qIHZhbHVlcyB1c2VkIGZvciByZXF1ZXN0IEtMNUtVU0IxMDVBX1NJT19DT05GSUdVUkUgKi8KKyNkZWZpbmUgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRV9SRUFEX09OICAgICAgMworI2RlZmluZSBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT0ZGICAgICAyCisKKy8qIEludGVycHJldGF0aW9uIG9mIG1vZGVtIHN0YXR1cyBsaW5lcyAqLworLyogVGhlc2UgbmVlZCBzb3J0aW5nIG91dCBieSBpbmRpdmlkdWFsbHkgY29ubmVjdGluZyBwaW5zIGFuZCBjaGVja2luZworICogcmVzdWx0cy4gRklYTUUhCisgKiBXaGVuIGRhdGEgaXMgYmVpbmcgc2VudCB3ZSBzZWUgMHgzMCBpbiB0aGUgbG93ZXIgYnl0ZTsgdGhpcyBtdXN0CisgKiBjb250YWluIERTUiBhbmQgQ1RTIC4uLgorICovCisjZGVmaW5lIEtMNUtVU0IxMDVBX0RTUgkJCSgoMTw8NCkgfCAoMTw8NSkpCisjZGVmaW5lIEtMNUtVU0IxMDVBX0NUUwkJCSgoMTw8NSkgfCAoMTw8NCkpCisKKyNkZWZpbmUgS0w1S1VTQjEwNUFfV0FOVFNfVE9fU0VORAkweDMwCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfRFRSCQkJLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworLy8jZGVmaW5lIEtMNUtVU0IxMDVBX0NUUwkJCS8qIENsZWFyIFRvIFNlbmQgKi8KKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9DRAkJCS8qIENhcnJpZXIgRGV0ZWN0ICovCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfRFNSCQkJLyogRGF0YSBTZXQgUmVhZHkgKi8KKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9SeEQJCQkvKiBSZWNlaXZlIHBpbiAqLworCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfTEUKKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9SVFMJCQorLy8jZGVmaW5lIEtMNUtVU0IxMDVBX1NUCQkKKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9TUgkJCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfUkkJCQkvKiBSaW5nIEluZGljYXRvciAqLworCisvKiB2aW06IHNldCB0cz04IHN0cz04OiAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0Yzk4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtMCwwICsxLDc3NCBAQAorLyoKKyAqICBLT0JJTCBVU0IgU21hcnQgQ2FyZCBUZXJtaW5hbCBEcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBLT0JJTCBTeXN0ZW1zIEdtYkggCisgKiAgQXV0aG9yOiBUaG9tYXMgV2FocmVuYnJ1Y2gKKyAqCisgKiAgQ29udGFjdDogbGludXh1c2JAa29iaWwuZGUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAorICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCisgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGFua3MgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkgZm9yIGhpcyBoZWxwIGFuZAorICogIHBhdGllbmNlLgorICoKKyAqIFN1cHBvcnRlZCByZWFkZXJzOiBVU0IgVFdJTiwgS0FBTiBTdGFuZGFyZCBQbHVzIGFuZCBTZWNPVklEIFJlYWRlciBQbHVzCisgKiAoQWRhcHRlciBLKSwgQjEgUHJvZmVzc2lvbmFsIGFuZCBLQUFOIFByb2Zlc3Npb25hbCAoQWRhcHRlciBCKQorICogCisgKiAoMjEvMDUvMjAwNCkgdHcKKyAqICAgICAgRml4IGJ1ZyB3aXRoIFAnbidQIHJlYWRlcnMKKyAqCisgKiAoMjgvMDUvMjAwMykgdHcKKyAqICAgICAgQWRkIHN1cHBvcnQgZm9yIEtBQU4gU0lNCisgKgorICogKDEyLzA5LzIwMDIpIHR3CisgKiAgICAgIEFkYXB0ZWQgdG8gMi41LgorICoKKyAqICgxMS8wOC8yMDAyKSB0dworICogICAgICBJbml0aWFsIHZlcnNpb24uCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJrb2JpbF9zY3QuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjEvMDUvMjAwNCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiS09CSUwgU3lzdGVtcyBHbWJIIC0gaHR0cDovL3d3dy5rb2JpbC5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDICJLT0JJTCBVU0IgU21hcnQgQ2FyZCBUZXJtaW5hbCBEcml2ZXIgKGV4cGVyaW1lbnRhbCkiCisKKyNkZWZpbmUgS09CSUxfVkVORE9SX0lECQkJMHgwRDQ2CisjZGVmaW5lIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lECTB4MjAxMQorI2RlZmluZSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRAkweDIwMTIKKyNkZWZpbmUgS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lECTB4MDA3OAorI2RlZmluZSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEICAgICAgIDB4MDA4MQorCisjZGVmaW5lIEtPQklMX1RJTUVPVVQJCTUwMAorI2RlZmluZSBLT0JJTF9CVUZfTEVOR1RICTMwMAorCisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgIGtvYmlsX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQga29iaWxfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAga29iaWxfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQga29iaWxfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtvYmlsX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICBrb2JpbF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga29iaWxfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50ICBrb2JpbF90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBrb2JpbF90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgdm9pZCBrb2JpbF9yZWFkX2ludF9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApOworc3RhdGljIHZvaWQga29iaWxfd3JpdGVfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICk7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga29iaWxfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJrb2JpbCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtvYmlsX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJLT0JJTCBVU0Igc21hcnQgY2FyZCB0ZXJtaW5hbCIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMCwKKwkubnVtX2J1bGtfb3V0ID0JCTAsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJa29iaWxfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJa29iaWxfc2h1dGRvd24sCisJLmlvY3RsID0JCWtvYmlsX2lvY3RsLAorCS50aW9jbWdldCA9CQlrb2JpbF90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJa29iaWxfdGlvY21zZXQsCisJLm9wZW4gPQkJCWtvYmlsX29wZW4sCisJLmNsb3NlID0JCWtvYmlsX2Nsb3NlLAorCS53cml0ZSA9CQlrb2JpbF93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlrb2JpbF93cml0ZV9yb29tLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CWtvYmlsX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworCitzdHJ1Y3Qga29iaWxfcHJpdmF0ZSB7CisJaW50IHdyaXRlX2ludF9lbmRwb2ludF9hZGRyZXNzOworCWludCByZWFkX2ludF9lbmRwb2ludF9hZGRyZXNzOworCXVuc2lnbmVkIGNoYXIgYnVmW0tPQklMX0JVRl9MRU5HVEhdOyAvLyBidWZmZXIgZm9yIHRoZSBBUERVIHRvIHNlbmQKKwlpbnQgZmlsbGVkOyAgLy8gaW5kZXggb2YgdGhlIGxhc3QgY2hhciBpbiBidWYKKwlpbnQgY3VyX3BvczsgLy8gaW5kZXggb2YgdGhlIG5leHQgY2hhciB0byBzZW5kIGluIGJ1ZgorCV9fdTE2IGRldmljZV90eXBlOworCWludCBsaW5lX3N0YXRlOworCXN0cnVjdCB0ZXJtaW9zIGludGVybmFsX3Rlcm1pb3M7Cit9OworCisKK3N0YXRpYyBpbnQga29iaWxfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICphY3Rjb25maWc7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQ7CisKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtvYmlsX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2LT5maWxsZWQgPSAwOworCXByaXYtPmN1cl9wb3MgPSAwOworCXByaXYtPmRldmljZV90eXBlID0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlwcml2LT5saW5lX3N0YXRlID0gMDsKKworCXN3aXRjaCAocHJpdi0+ZGV2aWNlX3R5cGUpeworCWNhc2UgS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBCMSBQUk8gLyBLQUFOIFBSTyBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworCWNhc2UgS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBLQUFOIFN0YW5kYXJkIFBsdXMgLyBTZWNPVklEIFJlYWRlciBQbHVzIGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBVU0JUV0lOIGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEOgorCQlwcmludGsoS0VSTl9ERUJVRyAiS09CSUwgS0FBTiBTSU0gZGV0ZWN0ZWRcbiIpOworCQlicmVhazsKKwl9CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisKKwkvLyBzZWFyY2ggZm9yIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzCisJcGRldiA9IHNlcmlhbC0+ZGV2OworIAlhY3Rjb25maWcgPSBwZGV2LT5hY3Rjb25maWc7CisgCWludGVyZmFjZSA9IGFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdOworCWFsdHNldHRpbmcgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworIAllbmRwb2ludCA9IGFsdHNldHRpbmctPmVuZHBvaW50OworICAKKyAJZm9yIChpID0gMDsgaSA8IGFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWVuZHBvaW50ID0gJmFsdHNldHRpbmctPmVuZHBvaW50W2ldOworCQlpZiAoKChlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCkgJiYgCisgCQkgICAgKChlbmRwb2ludC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkgeworCQkgCWRiZygiJXMgRm91bmQgaW50ZXJydXB0IG91dCBlbmRwb2ludC4gQWRkcmVzczogJWQiLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCQkgCXByaXYtPndyaXRlX2ludF9lbmRwb2ludF9hZGRyZXNzID0gZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKyAJCX0KKyAJCWlmICgoKGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pICYmIAorIAkJICAgICgoZW5kcG9pbnQtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJIAlkYmcoIiVzIEZvdW5kIGludGVycnVwdCBpbiAgZW5kcG9pbnQuIEFkZHJlc3M6ICVkIiwgX19GVU5DVElPTl9fLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJIAlwcml2LT5yZWFkX2ludF9lbmRwb2ludF9hZGRyZXNzID0gZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkgCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQga29iaWxfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl3aGlsZSAoc2VyaWFsLT5wb3J0W2ldLT5vcGVuX2NvdW50ID4gMCkgeworCQkJa29iaWxfY2xvc2UgKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwl9Cit9CisKKworc3RhdGljIGludCBrb2JpbF9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCWludCB3cml0ZV91cmJfdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXByaXYtPmxpbmVfc3RhdGUgPSAwOworCisJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMKKwkgKiB0aGUgZGF0YSB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoCisJICogZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLy8gd2l0aG91dCB0aGlzLCBldmVyeSBwdXNoX3R0eV9jaGFyIGlzIGVjaG9lZCA6LSggIAorCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7CisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnICY9IH4oSVNJRyB8IElDQU5PTiB8IEVDSE8gfCBJRVhURU4gfCBYQ0FTRSk7CisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gSUdOQlJLIHwgSUdOUEFSIHwgSVhPRkY7CisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnICY9IH5PTkxDUjsgLy8gZG8gTk9UIHRyYW5zbGF0ZSBDUiB0byBDUi1OTCAoMHgwQSAtPiAweDBBIDB4MEQpCisJCisJLy8gc2V0IHVwIGludGVybmFsIHRlcm1pb3Mgc3RydWN0dXJlIAorCXByaXYtPmludGVybmFsX3Rlcm1pb3MuY19pZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwlwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfb2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfb2ZsYWc7CisJcHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXByaXYtPmludGVybmFsX3Rlcm1pb3MuY19sZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZzsKKworCWZvciAoaT0wOyBpPE5DQ1M7IGkrKykgeworCQlwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2NbaV0gPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2NbaV07CisJfQorCQorCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyCisJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsgIAorCWlmICghIHRyYW5zZmVyX2J1ZmZlcikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwl9CisJCisJLy8gYWxsb2NhdGUgd3JpdGVfdXJiCisJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsgCisJCWRiZygiJXMgLSBwb3J0ICVkICBBbGxvY2F0aW5nIHBvcnQtPndyaXRlX3VyYiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsgIAorCQlpZiAoIXBvcnQtPndyaXRlX3VyYikgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgdXNiX2FsbG9jX3VyYiBmYWlsZWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdyaXRlX3VyYiB0cmFuc2ZlciBidWZmZXIKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2Mod3JpdGVfdXJiX3RyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CisJCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOworCQlwb3J0LT53cml0ZV91cmIgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9IAorCisJLy8gZ2V0IGhhcmR3YXJlIHZlcnNpb24KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkgIFNVU0JDUmVxdWVzdF9HZXRNaXNjLAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9JTiwKKwkJCQkgIFNVU0JDUl9NU0NfR2V0SFdWZXJzaW9uLAorCQkJCSAgMCwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBLT0JJTF9USU1FT1VUCisJCSk7CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfSFdfdmVyc2lvbiBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlkYmcoIkhhcndhcmUgdmVyc2lvbjogJWkuJWkuJWkiLCB0cmFuc2Zlcl9idWZmZXJbMF0sIHRyYW5zZmVyX2J1ZmZlclsxXSwgdHJhbnNmZXJfYnVmZmVyWzJdICk7CisJCisJLy8gZ2V0IGZpcm13YXJlIHZlcnNpb24KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkgIFNVU0JDUmVxdWVzdF9HZXRNaXNjLAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9JTiwKKwkJCQkgIFNVU0JDUl9NU0NfR2V0RldWZXJzaW9uLAorCQkJCSAgMCwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBLT0JJTF9USU1FT1VUCisJCSk7CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfRldfdmVyc2lvbiBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlkYmcoIkZpcm13YXJlIHZlcnNpb246ICVpLiVpLiVpIiwgdHJhbnNmZXJfYnVmZmVyWzBdLCB0cmFuc2Zlcl9idWZmZXJbMV0sIHRyYW5zZmVyX2J1ZmZlclsyXSApOworCisJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8IHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEKSB7CisJCS8vIFNldHRpbmcgQmF1ZHJhdGUsIFBhcml0eSBhbmQgU3RvcGJpdHMKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgIFNVU0JDUl9TQlJfOTYwMCB8IFNVU0JDUl9TUEFTQl9FdmVuUGFyaXR5IHwgU1VTQkNSX1NQQVNCXzFTdG9wQml0LAorCQkJCQkgIDAsCisJCQkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIDAsCisJCQkJCSAgS09CSUxfVElNRU9VVAorCQkJKTsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBzZXRfYmF1ZHJhdGUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJCQorCQkvLyByZXNldCBhbGwgcXVldWVzCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfTWlzYywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICBTVVNCQ1JfTVNDX1Jlc2V0QWxsUXVldWVzLAorCQkJCQkgIDAsCisJCQkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIDAsCisJCQkJCSAgS09CSUxfVElNRU9VVAorCQkJKTsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZXNldF9hbGxfcXVldWVzIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCX0KKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEIHx8IHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8CisJICAgIHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpIHsKKwkJLy8gc3RhcnQgcmVhZGluZyAoQWRhcHRlciBCICdjYXVzZSBQTlAgc3RyaW5nKQorCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyAgKTsgCisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVhZCBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwl9CisKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGtvYmlsX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT53cml0ZV91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCXVzYl9mcmVlX3VyYiggcG9ydC0+d3JpdGVfdXJiICk7CisJCXBvcnQtPndyaXRlX3VyYiA9IE5VTEw7CisJfQorCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Cit9CisKKworc3RhdGljIHZvaWQga29iaWxfcmVhZF9pbnRfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHB1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gcHVyYi0+dHJhbnNmZXJfYnVmZmVyOworLy8JY2hhciAqZGJnX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwdXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgUmVhZCBpbnQgc3RhdHVzIG5vdCB6ZXJvOiAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBwdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCQorCXR0eSA9IHBvcnQtPnR0eTsgCisJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCisJCS8vIEJFR0lOIERFQlVHCisJCS8qCisJCSAgZGJnX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKCgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkgKiBzaXplb2YoY2hhciksIEdGUF9LRVJORUwpOworCQkgIGlmICghIGRiZ19kYXRhKSB7CisJCSAgcmV0dXJuOworCQkgIH0KKwkJICBtZW1zZXQoZGJnX2RhdGEsIDAsICgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkpOworCQkgIGZvciAoaSA9IDA7IGkgPCBwdXJiLT5hY3R1YWxfbGVuZ3RoOyBpKyspIHsgCisJCSAgc3ByaW50ZihkYmdfZGF0YSArMyppLCAiJTAyWCAiLCBkYXRhW2ldKTsgCisJCSAgfQorCQkgIGRiZygiIDwtLSAlcyIsIGRiZ19kYXRhICk7CisJCSAga2ZyZWUoZGJnX2RhdGEpOworCQkqLworCQkvLyBFTkQgREVCVUcKKworCQlmb3IgKGkgPSAwOyBpIDwgcHVyYi0+YWN0dWFsX2xlbmd0aDsgKytpKSB7CisJCQkvLyBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLgorCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLy8gdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwkvLyBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyApOyAKKwlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlYWQgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7Cit9CisKKworc3RhdGljIHZvaWQga29iaWxfd3JpdGVfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKK3sKK30KKworCitzdGF0aWMgaW50IGtvYmlsX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBsZW5ndGggPSAwOworCWludCByZXN1bHQgPSAwOworCWludCB0b2RvID0gMDsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqIHByaXY7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gcG9ydCAlZCB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiAwOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoY291bnQgPiAoS09CSUxfQlVGX0xFTkdUSCAtIHByaXYtPmZpbGxlZCkpIHsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3I6IHdyaXRlIHJlcXVlc3QgYmlnZ2VyIHRoYW4gYnVmZmVyIHNpemUiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIENvcHkgZGF0YSB0byBidWZmZXIKKwltZW1jcHkgKHByaXYtPmJ1ZiArIHByaXYtPmZpbGxlZCwgYnVmLCBjb3VudCk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHByaXYtPmJ1ZiArIHByaXYtPmZpbGxlZCk7CisKKwlwcml2LT5maWxsZWQgPSBwcml2LT5maWxsZWQgKyBjb3VudDsKKworCisJLy8gb25seSBzZW5kIGNvbXBsZXRlIGJsb2NrLiBUV0lOLCBLQUFOIFNJTSBhbmQgYWRhcHRlciBLIHVzZSB0aGUgc2FtZSBwcm90b2NvbC4KKwlpZiAoICgocHJpdi0+ZGV2aWNlX3R5cGUgIT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpICYmIChwcml2LT5maWxsZWQgPiAyKSAmJiAocHJpdi0+ZmlsbGVkID49IChwcml2LT5idWZbMV0gKyAzKSkpIHx8IAorCSAgICAgKChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCkgJiYgKHByaXYtPmZpbGxlZCA+IDMpICYmIChwcml2LT5maWxsZWQgPj0gKHByaXYtPmJ1ZlsyXSArIDQpKSkgKSB7CisJCQorCQkvLyBzdG9wIHJlYWRpbmcgKGV4Y2VwdCBUV0lOIGFuZCBLQUFOIFNJTSkKKwkJaWYgKCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHx8IChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgKQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJCXRvZG8gPSBwcml2LT5maWxsZWQgLSBwcml2LT5jdXJfcG9zOworCisJCXdoaWxlKHRvZG8gPiAwKSB7CisJCQkvLyBtYXggOCBieXRlIGluIG9uZSB1cmIgKGVuZHBvaW50IHNpemUpCisJCQlsZW5ndGggPSAodG9kbyA8IDgpID8gdG9kbyA6IDg7CisJCQkvLyBjb3B5IGRhdGEgdG8gdHJhbnNmZXIgYnVmZmVyCisJCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHByaXYtPmJ1ZiArIHByaXYtPmN1cl9wb3MsIGxlbmd0aCApOworCQkJdXNiX2ZpbGxfaW50X3VyYiggcG9ydC0+d3JpdGVfdXJiLAorCQkJCQkgIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQkgIHVzYl9zbmRpbnRwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2LT53cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzcyksCisJCQkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgbGVuZ3RoLAorCQkJCQkgIGtvYmlsX3dyaXRlX2NhbGxiYWNrLAorCQkJCQkgIHBvcnQsCisJCQkJCSAgOAorCQkJCSk7CisKKwkJCXByaXYtPmN1cl9wb3MgPSBwcml2LT5jdXJfcG9zICsgbGVuZ3RoOworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPndyaXRlX3VyYiwgR0ZQX05PSU8gKTsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgd3JpdGUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJCQl0b2RvID0gcHJpdi0+ZmlsbGVkIC0gcHJpdi0+Y3VyX3BvczsKKworCQkJaWYgKHRvZG8gPiAwKSB7CisJCQkJbXNsZWVwKDI0KTsKKwkJCX0KKworCQl9IC8vIGVuZCB3aGlsZQorCQkKKwkJcHJpdi0+ZmlsbGVkID0gMDsKKwkJcHJpdi0+Y3VyX3BvcyA9IDA7CisKKwkJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJCisJCS8vIHN0YXJ0IHJlYWRpbmcgKGV4Y2VwdCBUV0lOIGFuZCBLQUFOIFNJTSkKKwkJaWYgKCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHx8IChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgKSB7CisJCQkvLyBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJCQorCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPICk7IAorCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQl9CisJfQorCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IGtvYmlsX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJLy9kYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlyZXR1cm4gODsKK30KKworCitzdGF0aWMgaW50IGtvYmlsX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKKwkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyCisJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsgIAorCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCSAgU1VTQkNSZXF1ZXN0X0dldFN0YXR1c0xpbmVTdGF0ZSwKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfSU4sCisJCQkJICAwLAorCQkJCSAgMCwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBLT0JJTF9USU1FT1VUKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgZ2V0X3N0YXR1c19saW5lX3N0YXRlIFVSQiByZXR1cm5zOiAlaS4gU3RhdHVzbGluZTogJTAyeCIsIAorCSAgICBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0LCB0cmFuc2Zlcl9idWZmZXJbMF0pOworCisJaWYgKCh0cmFuc2Zlcl9idWZmZXJbMF0gJiBTVVNCQ1JfR1NMX0RTUikgIT0gMCkgeworCQlwcml2LT5saW5lX3N0YXRlIHw9IFRJT0NNX0RTUjsKKwl9IGVsc2UgeworCQlwcml2LT5saW5lX3N0YXRlICY9IH5USU9DTV9EU1I7IAorCX0KKworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHByaXYtPmxpbmVfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgIGtvYmlsX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlpbnQgcmVzdWx0OworCWludCBkdHIgPSAwOworCWludCBydHMgPSAwOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKKwkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyCisJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoISB0cmFuc2Zlcl9idWZmZXIpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0cmFuc2Zlcl9idWZmZXIsIDAsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcnRzID0gMTsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlkdHIgPSAxOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcnRzID0gMDsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCWR0ciA9IDA7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHsKKwkJaWYgKGR0ciAhPSAwKQorCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2V0dGluZyBEVFIiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCWVsc2UKKwkJCWRiZygiJXMgLSBwb3J0ICVkIENsZWFyaW5nIERUUiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgICgoZHRyICE9IDApID8gU1VTQkNSX1NTTF9TRVREVFIgOiBTVVNCQ1JfU1NMX0NMUkRUUiksCisJCQkJCSAgMCwKKwkJCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgMCwKKwkJCQkJICBLT0JJTF9USU1FT1VUKTsKKwl9IGVsc2UgeworCQlpZiAocnRzICE9IDApCisJCQlkYmcoIiVzIC0gcG9ydCAlZCBTZXR0aW5nIFJUUyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJZWxzZQorCQkJZGJnKCIlcyAtIHBvcnQgJWQgQ2xlYXJpbmcgUlRTIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCisJCQkJCSAgU1VTQkNSZXF1ZXN0X1NldFN0YXR1c0xpbmVzT3JRdWV1ZXMsCisJCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCisJCQkJCSAgKChydHMgIT0gMCkgPyBTVVNCQ1JfU1NMX1NFVFJUUyA6IFNVU0JDUl9TU0xfQ0xSUlRTKSwKKwkJCQkJICAwLAorCQkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQpOworCX0KKwlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHNldF9zdGF0dXNfbGluZSBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiAocmVzdWx0IDwgMCkgPyByZXN1bHQgOiAwOworfQorCisKK3N0YXRpYyBpbnQgIGtvYmlsX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGtvYmlsX3ByaXZhdGUgKiBwcml2OworCWludCByZXN1bHQ7CisJdW5zaWduZWQgc2hvcnQgdXJiX3ZhbCA9IDA7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKKwljaGFyICpzZXR0aW5nczsKKwl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKKwkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUQ0dFVFM6ICAgLy8gMHg1NDAxCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXNlcl9hcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7CisJCQlkYmcoIiVzIC0gcG9ydCAlZCBFcnJvciBpbiBhY2Nlc3Nfb2siLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcsCisJCQkJCQkgICAmcHJpdi0+aW50ZXJuYWxfdGVybWlvcykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRDU0VUUzogICAvLyAweDU0MDIKKwkJaWYgKCEocG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3I6IHBvcnQtPnR0eS0+dGVybWlvcyBpcyBOVUxMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIC1FTk9UVFk7CisJCX0KKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3IgaW4gYWNjZXNzX29rIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmcHJpdi0+aW50ZXJuYWxfdGVybWlvcywKKwkJCQkJCSAgIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQorCQlzZXR0aW5ncyA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoNTAsIEdGUF9LRVJORUwpOyAgCisJCWlmICghIHNldHRpbmdzKSB7CisJCQlyZXR1cm4gLUVOT0JVRlM7CisJCX0KKwkJbWVtc2V0KHNldHRpbmdzLCAwLCA1MCk7CisKKwkJc3dpdGNoIChwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2ZsYWcgJiBDQkFVRCkgeworCQljYXNlIEIxMjAwOgorCQkJdXJiX3ZhbCA9IFNVU0JDUl9TQlJfMTIwMDsKKwkJCXN0cmNhdChzZXR0aW5ncywgIjEyMDAgIik7CisJCQlicmVhazsKKwkJY2FzZSBCOTYwMDoKKwkJZGVmYXVsdDoKKwkJCXVyYl92YWwgPSBTVVNCQ1JfU0JSXzk2MDA7CisJCQlzdHJjYXQoc2V0dGluZ3MsICI5NjAwICIpOworCQkJYnJlYWs7CisJCX0KKworCQl1cmJfdmFsIHw9IChwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2ZsYWcgJiBDU1RPUEIpID8gU1VTQkNSX1NQQVNCXzJTdG9wQml0cyA6IFNVU0JDUl9TUEFTQl8xU3RvcEJpdDsKKwkJc3RyY2F0KHNldHRpbmdzLCAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgQ1NUT1BCKSA/ICIyIFN0b3BCaXRzICIgOiAiMSBTdG9wQml0ICIpOworCisJCWlmIChwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2ZsYWcgJiBQQVJFTkIpIHsKKwkJCWlmICAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgUEFST0REKSB7CisJCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfT2RkUGFyaXR5OworCQkJCXN0cmNhdChzZXR0aW5ncywgIk9kZCBQYXJpdHkiKTsKKwkJCX0gZWxzZSB7CisJCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfRXZlblBhcml0eTsKKwkJCQlzdHJjYXQoc2V0dGluZ3MsICJFdmVuIFBhcml0eSIpOworCQkJfQorCQl9IGVsc2UgeworCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfTm9QYXJpdHk7CisJCQlzdHJjYXQoc2V0dGluZ3MsICJObyBQYXJpdHkiKTsKKwkJfQorCQlkYmcoIiVzIC0gcG9ydCAlZCBzZXR0aW5nIHBvcnQgdG86ICVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHNldHRpbmdzICk7CisKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgIHVyYl92YWwsCisJCQkJCSAgMCwKKwkJCQkJICBzZXR0aW5ncywKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQKKwkJCSk7CisKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBzZXRfYmF1ZHJhdGUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJCWtmcmVlKHNldHRpbmdzKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRDRkxTSDogICAvLyAweDU0MEIKKwkJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEgdHJhbnNmZXJfYnVmZmVyKSB7CisJCSAJcmV0dXJuIC1FTk9CVUZTOworCQl9CisKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfTWlzYywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICBTVVNCQ1JfTVNDX1Jlc2V0QWxsUXVldWVzLAorCQkJCQkgIDAsCisJCQkJCSAgTlVMTCwvL3RyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQKKwkJCSk7CisJCQorCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlc2V0X2FsbF9xdWV1ZXMgKEZMVVNIKSBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKworCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCQlyZXR1cm4gKChyZXN1bHQgPCAwKSA/IC1FRkFVTFQgOiAwKTsKKworCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGtvYmlsX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrb2JpbF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrb2JpbF9kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKKwlpbmZvKERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtvYmlsX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrb2JpbF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgma29iaWxfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrb2JpbF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChrb2JpbF9pbml0KTsKK21vZHVsZV9leGl0KGtvYmlsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSggIkdQTCIgKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTFmYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5oCkBAIC0wLDAgKzEsNjAgQEAKKyNkZWZpbmUgU1VTQkNSZXF1ZXN0X1NldEJhdWRSYXRlUGFyaXR5QW5kU3RvcEJpdHMgICAgICAgMQorI2RlZmluZSBTVVNCQ1JfU0JSX01BU0sJCQkJMHhGRjAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMTIwMAkJCQkweDAxMDAKKyNkZWZpbmUgU1VTQkNSX1NCUl85NjAwCQkJCTB4MDIwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzE5MjAwCQkJMHgwNDAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMjg4MDAJCQkweDA4MDAKKyNkZWZpbmUgU1VTQkNSX1NCUl8zODQwMAkJCTB4MTAwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzU3NjAwCQkJMHgyMDAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMTE1MjAwCQkJMHg0MDAwCisKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX01BU0sJCQkweDAwNzAKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX05vUGFyaXR5CQkJMHgwMDEwCisjZGVmaW5lIFNVU0JDUl9TUEFTQl9PZGRQYXJpdHkJCQkweDAwMjAKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX0V2ZW5QYXJpdHkJCQkweDAwNDAKKworI2RlZmluZSBTVVNCQ1JfU1BBU0JfU1RQTUFTSwkJCTB4MDAwMworI2RlZmluZSBTVVNCQ1JfU1BBU0JfMVN0b3BCaXQJCQkweDAwMDEKKyNkZWZpbmUgU1VTQkNSX1NQQVNCXzJTdG9wQml0cwkJCTB4MDAwMgorCisjZGVmaW5lIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzCTIKKyNkZWZpbmUgU1VTQkNSX1NTTF9TRVRSVFMJCQkweDAwMDEKKyNkZWZpbmUgU1VTQkNSX1NTTF9DTFJSVFMJCQkweDAwMDIKKyNkZWZpbmUgU1VTQkNSX1NTTF9TRVREVFIJCQkweDAwMDQKKyNkZWZpbmUgU1VTQkNSX1NTTF9DTFJEVFIJCQkweDAwMTAKKworI2RlZmluZSBTVVNCQ1JfU1NMX1BVUkdFX1RYQUJPUlQJCTB4MDEwMCAgLy8gS2lsbCB0aGUgcGVuZGluZy9jdXJyZW50IHdyaXRlcyB0byB0aGUgY29tbSBwb3J0LgorI2RlZmluZSBTVVNCQ1JfU1NMX1BVUkdFX1JYQUJPUlQJCTB4MDIwMCAgLy8gS2lsbCB0aGUgcGVuZGluZy9jdXJyZW50IHJlYWRzIHRvIHRoZSBjb21tIHBvcnQuCisjZGVmaW5lIFNVU0JDUl9TU0xfUFVSR0VfVFhDTEVBUgkJMHgwNDAwICAvLyBLaWxsIHRoZSB0cmFuc21pdCBxdWV1ZSBpZiB0aGVyZS4KKyNkZWZpbmUgU1VTQkNSX1NTTF9QVVJHRV9SWENMRUFSCQkweDA4MDAgIC8vIEtpbGwgdGhlIHR5cGVhaGVhZCBidWZmZXIgaWYgdGhlcmUuCisKKyNkZWZpbmUgU1VTQkNSZXF1ZXN0X0dldFN0YXR1c0xpbmVTdGF0ZQkJNAorI2RlZmluZSBTVVNCQ1JfR1NMX1JYQ0hBUgkJCTB4MDAwMSAgLy8gQW55IENoYXJhY3RlciByZWNlaXZlZAorI2RlZmluZSBTVVNCQ1JfR1NMX1RYRU1QVFkJCQkweDAwMDQgIC8vIFRyYW5zbWl0dCBRdWV1ZSBFbXB0eQorI2RlZmluZSBTVVNCQ1JfR1NMX0NUUwkJCQkweDAwMDggIC8vIENUUyBjaGFuZ2VkIHN0YXRlCisjZGVmaW5lIFNVU0JDUl9HU0xfRFNSCQkJCTB4MDAxMCAgLy8gRFNSIGNoYW5nZWQgc3RhdGUKKyNkZWZpbmUgU1VTQkNSX0dTTF9STFNECQkJCTB4MDAyMCAgLy8gUkxTRCBjaGFuZ2VkIHN0YXRlCisjZGVmaW5lIFNVU0JDUl9HU0xfQlJFQUsJCQkweDAwNDAgIC8vIEJSRUFLIHJlY2VpdmVkCisjZGVmaW5lIFNVU0JDUl9HU0xfRVJSCQkJCTB4MDA4MCAgLy8gTGluZSBzdGF0dXMgZXJyb3Igb2NjdXJyZWQKKyNkZWZpbmUgU1VTQkNSX0dTTF9SSU5HCQkJCTB4MDEwMCAgLy8gUmluZyBzaWduYWwgZGV0ZWN0ZWQKKworI2RlZmluZSBTVVNCQ1JlcXVlc3RfTWlzYwkJCTgKKyNkZWZpbmUgU1VTQkNSX01TQ19SZXNldFJlYWRlcgkJCTB4MDAwMQkvLyB1c2UgYSBwcmVkZWZpbmVkIHJlc2V0IHNlcXVlbmNlCisjZGVmaW5lIFNVU0JDUl9NU0NfUmVzZXRBbGxRdWV1ZXMJCTB4MDAwMgkvLyB1c2UgYSBwcmVkZWZpbmVkIHNlcXVlbmNlIHRvIHJlc2V0IHRoZSBpbnRlcm5hbCBxdWV1ZXMKKworI2RlZmluZSBTVVNCQ1JlcXVlc3RfR2V0TWlzYwkJCTB4MTAKKyNkZWZpbmUgU1VTQkNSX01TQ19HZXRGV1ZlcnNpb24JCQkweDAwMDEJLyogZ2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGZyb20gZGV2aWNlLAorCQkJCQkJCSAgIGNvZGVkIGxpa2UgdGhpcyAweEhITExCQlBQCisJCQkJCQkJICAgd2l0aCBISCA9IEZpcm13YXJlIFZlcnNpb24gSGlnaCBCeXRlCisJCQkJCQkJICAgTEwgPSBGaXJtd2FyZSBWZXJzaW9uIExvdyBCeXRlCisJCQkJCQkJICAgQkIgPSBCdWlsZCBOdW1iZXIKKwkJCQkJCQkgICBQUCA9IEZ1cnRoZXIgQXR0cmlidXRlcworCQkJCQkJCSovCisKKyNkZWZpbmUgU1VTQkNSX01TQ19HZXRIV1ZlcnNpb24JCQkweDAwMDIJLyogZ2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGZyb20gZGV2aWNlCisJCQkJCQkJICAgY29kZWQgbGlrZSB0aGlzIDB4SEhMTFBQUlIKKwkJCQkJCQkgICB3aXRoIEhIID0gU29mdHdhcmUgVmVyc2lvbiBIaWdoIEJ5dGUKKwkJCQkJCQkgICBMTCA9IFNvZnR3YXJlIFZlcnNpb24gTG93IEJ5dGUKKwkJCQkJCQkgICBQUCA9IEZ1cnRoZXIgQXR0cmlidXRlcworCQkJCQkJCSAgIFJSID0gUmVzZXJ2ZWQgZm9yIHRoZSBoYXJkd2FyZSBJRCAKKwkJCQkJCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGI2MzY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCkBAIC0wLDAgKzEsNzgxIEBACisvKgorICogTUNUIChNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kgQ29ycC4pIFVTQiBSUzIzMiBDb252ZXJ0ZXIgRHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDAgV29sZmdhbmcgR3JhbmRlZ2dlciAod29sZmdhbmdAY2VzLmNoKQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgbGFyZ2VseSBkZXJpdmVkIGZyb20gdGhlIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRHJpdmVyCisgKiAoc2VlIGJlbGtpbl9zYS5bY2hdKS4gQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHdhcyBhY3F1aXJlZAorICogYnkgdXNpbmcgU25pZmZVU0Igb24gV2luZG93czk4LiBGb3IgdGVjaG5pY2FsIGRldGFpbHMgc2VlIG1jdF91MjMyLmguCisgKgorICogV2lsbGlhbSBHLiBHcmVhdGhvdXNlIGFuZCBHcmVnIEtyb2FoLUhhcnRtYW4gcHJvdmlkZWQgZ3JlYXQgaGVscCBvbiBob3cgdG8KKyAqIGRvIHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIGFuZCBob3cgdG8gd3JpdGUgYSBVU0Igc2VyaWFsIGRldmljZSBkcml2ZXIuCisgKgorICogVE8gQkUgRE9ORSwgVE8gQkUgQ0hFQ0tFRDoKKyAqICAgRFRSL1JUUyBzaWduYWwgaGFuZGxpbmcgbWF5IGJlIGluY29tcGxldGUgb3IgaW5jb3JyZWN0LiBJIGhhdmUgbWFpbmx5CisgKiAgIGltcGxlbWVudGVkIHdoYXQgSSBoYXZlIHNlZW4gd2l0aCBTbmlmZlVTQiBvciBmb3VuZCBpbiBiZWxraW5fc2EuYy4KKyAqICAgRm9yIGZ1cnRoZXIgVE9ET3MgY2hlY2sgYWxzbyBiZWxraW5fc2EuYy4KKyAqCisgKiBURVNUIFNUQVRVUzoKKyAqICAgQmFzaWMgdGVzdHMgaGF2ZSBiZWVuIHBlcmZvcm1lZCB3aXRoIG1pbmljb20vem1vZGVtIHRyYW5zZmVycyBhbmQKKyAqICAgbW9kZW0gZGlhbGluZyB1bmRlciBMaW51eCAyLjQuMC10ZXN0MTAgKGZvciBtZSBpdCB3b3JrcyBmaW5lKS4KKyAqCisgKiAwNC1Ob3YtMjAwMyBCaWxsIE1hcnIgPG1hcnIgYXQgZmxleCBkb3QgY29tPgorICogICAtIE1pbWljIFdpbmRvd3MgZHJpdmVyIGJ5IHNlbmRpbmcgMiBVU0IgJ2RldmljZSByZXF1ZXN0JyBtZXNzYWdlcworICogICAgIGZvbGxvd2luZyBub3JtYWwgJ2JhdWQgcmF0ZSBjaGFuZ2UnIG1lc3NhZ2UuICBUaGlzIGFsbG93cyBkYXRhIHRvIGJlCisgKiAgICAgdHJhbnNtaXR0ZWQgdG8gUlMtMjMyIGRldmljZXMgd2hpY2ggZG9uJ3QgYXNzZXJ0IHRoZSAnQ1RTJyBzaWduYWwuCisgKgorICogMTAtTm92LTIwMDEgV29sZmdhbmcgR3JhbmRlZ2dlcgorICogICAtIEZpeGVkIGFuIGVuZGlhbmVzcyBwcm9ibGVtIHdpdGggdGhlIGJhdWRyYXRlIHNlbGVjdGlvbiBmb3IgUG93ZXJQQy4KKyAqCisgKiAwNi1EZWMtMjAwMSBNYXJ0aW4gSGFtaWx0b24gPG1hcnRpbmhAZ251Lm9yZz4KKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBCZWxraW4gRjVVMTA5IERCOSBhZGFwdG9yCisgKgorICogMzAtTWF5LTIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqIDA0LU1heS0yMDAxIFN0ZWxpYW4gUG9wCisgKiAgIC0gU2V0IHRoZSBtYXhpbXVtIGJ1bGsgb3V0cHV0IHNpemUgZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwgdG8gMTYgYnl0ZXMKKyAqICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgcmVwb3J0ZWQgMzIgKHVzaW5nIDMyIGJ5dGVzIGNhdXNlcyBtYW55IGRhdGEKKyAqICAgICBsb3NzLCBXaW5kb3dzIGRyaXZlciB1c2VzIDE2IHRvbykuCisgKgorICogMDItTWF5LTIwMDEgU3RlbGlhbiBQb3AKKyAqICAgLSBGaXhlZCB0aGUgYmF1ZCBjYWxjdWxhdGlvbiBmb3IgU2l0ZWNvbSBVMjMyLVAyNSBtb2RlbAorICoKKyAqIDA4LUFwci0yMDAxIGdiCisgKiAgIC0gSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAwNi1KYW4tMjAwMSBDb3JuZWwgQ2lvY2lybGFuIAorICogICAtIEFkZGVkIHN1cHBvcnQgZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwgKFByb2R1Y3QgSWQgMHgwMjMwKQorICogICAtIEFkZGVkIHN1cHBvcnQgZm9yIEQtTGluayBEVS1IM1NQIFVTQiBCQVkgKFByb2R1Y3QgSWQgMHgwMjAwKQorICoKKyAqIDI5LU5vdi0yMDAwIEdyZWcgS3JvYWgtSGFydG1hbgorICogICAtIEFkZGVkIGRldmljZSBpZCB0YWJsZSB0byBmaXQgd2l0aCAyLjQuMC10ZXN0MTEgc3RydWN0dXJlLgorICogICAtIHRvb2sgb3V0IERFQUxfV0lUSF9UV09fSU5UX0lOX0VORFBPSU5UUyAjZGVmaW5lIGFzIGl0J3Mgbm90IG5lZWRlZAorICogICAgIChsb3RzIG9mIHRoaW5ncyB3aWxsIGNoYW5nZSBpZi93aGVuIHRoZSB1c2Itc2VyaWFsIGNvcmUgY2hhbmdlcyB0bworICogICAgIGhhbmRsZSB0aGVzZSBpc3N1ZXMuCisgKgorICogMjctTm92LTIwMDAgV29sZmdhbmcgR3JhbmRlZ2dlcgorICogICBBIHZlcnNpb24gZm9yIGtlcm5lbCAyLjQuMC10ZXN0MTAgcmVsZWFzZWQgdG8gdGhlIExpbnV4IGNvbW11bml0eSAKKyAqICAgKHZpYSBsaW51eC11c2ItZGV2ZWwpLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJtY3RfdTIzMi5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ6Mi4wIgkJLyogTGludXggaW4ta2VybmVsIHZlcnNpb24gKi8KKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiV29sZmdhbmcgR3JhbmRlZ2dlciA8d29sZmdhbmdAY2VzLmNoPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSBVU0ItUlMyMzIgY29udmVydGVyIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCAgbWN0X3UyMzJfc3RhcnR1cAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9zaHV0ZG93bgkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX2Nsb3NlCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICAgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3MgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9pb2N0bAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkJCSAgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9icmVha19jdGwJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgaW50IGJyZWFrX3N0YXRlICk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl90aW9jbWdldAkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIG1jdF91MjMyX3Rpb2Ntc2V0CQkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsCisJCQkJCSAgdW5zaWduZWQgaW50IGNsZWFyKTsKKy8qCisgKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIE1DVCBVU0ItUlMyMzIgY29udmVydGVyLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKE1DVF9VMjMyX1ZJRCwgTUNUX1UyMzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX1NJVEVDT01fUElEKSB9LAorCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX0RVX0gzU1BfUElEKSB9LAorCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9CRUxLSU5fRjVVMTA5X1ZJRCwgTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9QSUQpIH0sCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtY3RfdTIzMl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm1jdF91MjMyIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIG1jdF91MjMyX2RldmljZSA9IHsKKwkub3duZXIgPQkgICAgIFRISVNfTU9EVUxFLAorCS5uYW1lID0JCSAgICAgIk1DVCBVMjMyIiwKKwkuc2hvcnRfbmFtZSA9CSAgICAgIm1jdF91MjMyIiwKKwkuaWRfdGFibGUgPQkgICAgIGlkX3RhYmxlX2NvbWJpbmVkLAorCS5udW1faW50ZXJydXB0X2luID0gIDIsCisJLm51bV9idWxrX2luID0JICAgICAwLAorCS5udW1fYnVsa19vdXQgPQkgICAgIDEsCisJLm51bV9wb3J0cyA9CSAgICAgMSwKKwkub3BlbiA9CQkgICAgIG1jdF91MjMyX29wZW4sCisJLmNsb3NlID0JICAgICBtY3RfdTIzMl9jbG9zZSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPSBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjaywKKwkuaW9jdGwgPQkgICAgIG1jdF91MjMyX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CSAgICAgbWN0X3UyMzJfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CSAgICAgbWN0X3UyMzJfYnJlYWtfY3RsLAorCS50aW9jbWdldCA9CSAgICAgbWN0X3UyMzJfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JICAgICBtY3RfdTIzMl90aW9jbXNldCwKKwkuYXR0YWNoID0JICAgICBtY3RfdTIzMl9zdGFydHVwLAorCS5zaHV0ZG93biA9CSAgICAgbWN0X3UyMzJfc2h1dGRvd24sCit9OworCisKK3N0cnVjdCBtY3RfdTIzMl9wcml2YXRlIHsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50CSAgICAgY29udHJvbF9zdGF0ZTsgLyogTW9kZW0gTGluZSBTZXR0aW5nIChUSU9DTSkgKi8KKwl1bnNpZ25lZCBjaGFyICAgICAgICBsYXN0X2xjcjsgICAgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSAgICAgbGFzdF9sc3I7ICAgICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSAgICAgbGFzdF9tc3I7ICAgICAgLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCit9OworCisvKgorICogSGFuZGxlIHZlbmRvciBzcGVjaWZpYyBVU0IgcmVxdWVzdHMKKyAqLworCisjZGVmaW5lIFdEUl9USU1FT1VUIDUwMDAgLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisvKgorICogTGF0ZXIgZGF5IDIuNi4wLXRlc3Qga2VybmVscyBoYXZlIG5ldyBiYXVkIHJhdGVzIGxpa2UgQjIzMDQwMCB3aGljaAorICogd2UgZG8gbm90IGtub3cgaG93IHRvIHN1cHBvcnQuIFdlIGlnbm9yZSB0aGVtIGZvciB0aGUgbW9tZW50LgorICogWFhYIFJhdGUtbGltaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGl0J3MgdXNlciB0cmlnZ2VyYWJsZS4KKyAqLworc3RhdGljIGludCBtY3RfdTIzMl9jYWxjdWxhdGVfYmF1ZF9yYXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCB2YWx1ZSkKK3sKKwlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBNQ1RfVTIzMl9TSVRFQ09NX1BJRAorCSAgfHwgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBNQ1RfVTIzMl9CRUxLSU5fRjVVMTA5X1BJRCkgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgICAgQjMwMDogcmV0dXJuIDB4MDE7CisJCWNhc2UgICAgQjYwMDogcmV0dXJuIDB4MDI7IC8qIHRoaXMgb25lIG5vdCB0ZXN0ZWQgKi8KKwkJY2FzZSAgIEIxMjAwOiByZXR1cm4gMHgwMzsKKwkJY2FzZSAgIEIyNDAwOiByZXR1cm4gMHgwNDsKKwkJY2FzZSAgIEI0ODAwOiByZXR1cm4gMHgwNjsKKwkJY2FzZSAgIEI5NjAwOiByZXR1cm4gMHgwODsKKwkJY2FzZSAgQjE5MjAwOiByZXR1cm4gMHgwOTsKKwkJY2FzZSAgQjM4NDAwOiByZXR1cm4gMHgwYTsKKwkJY2FzZSAgQjU3NjAwOiByZXR1cm4gMHgwYjsKKwkJY2FzZSBCMTE1MjAwOiByZXR1cm4gMHgwYzsKKwkJZGVmYXVsdDoKKwkJCWVycigiTUNUIFVTQi1SUzIzMjogdW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCAweCV4LCIKKwkJCSAgICAiIHVzaW5nIGRlZmF1bHQgb2YgQjk2MDAiLCB2YWx1ZSk7CisJCQlyZXR1cm4gMHgwODsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSAgICBCMzAwOiB2YWx1ZSA9ICAgICAzMDA7IGJyZWFrOworCQljYXNlICAgIEI2MDA6IHZhbHVlID0gICAgIDYwMDsgYnJlYWs7CisJCWNhc2UgICBCMTIwMDogdmFsdWUgPSAgICAxMjAwOyBicmVhazsKKwkJY2FzZSAgIEIyNDAwOiB2YWx1ZSA9ICAgIDI0MDA7IGJyZWFrOworCQljYXNlICAgQjQ4MDA6IHZhbHVlID0gICAgNDgwMDsgYnJlYWs7CisJCWNhc2UgICBCOTYwMDogdmFsdWUgPSAgICA5NjAwOyBicmVhazsKKwkJY2FzZSAgQjE5MjAwOiB2YWx1ZSA9ICAgMTkyMDA7IGJyZWFrOworCQljYXNlICBCMzg0MDA6IHZhbHVlID0gICAzODQwMDsgYnJlYWs7CisJCWNhc2UgIEI1NzYwMDogdmFsdWUgPSAgIDU3NjAwOyBicmVhazsKKwkJY2FzZSBCMTE1MjAwOiB2YWx1ZSA9ICAxMTUyMDA7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJNQ1QgVVNCLVJTMjMyOiB1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0IDB4JXgsIgorCQkJICAgICIgdXNpbmcgZGVmYXVsdCBvZiBCOTYwMCIsIHZhbHVlKTsKKwkJCXZhbHVlID0gOTYwMDsKKwkJfQorCQlyZXR1cm4gMTE1MjAwL3ZhbHVlOworCX0KK30KKworc3RhdGljIGludCBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCB2YWx1ZSkKK3sKKwlfX2xlMzIgZGl2aXNvcjsKKyAgICAgICAgaW50IHJjOworICAgICAgICB1bnNpZ25lZCBjaGFyIHplcm9fYnl0ZSA9IDA7CisKKwlkaXZpc29yID0gY3B1X3RvX2xlMzIobWN0X3UyMzJfY2FsY3VsYXRlX2JhdWRfcmF0ZShzZXJpYWwsIHZhbHVlKSk7CisKKyAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfUkVRVUVTVCwKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKKwkJCSAgICAgV0RSX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCWVycigiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgdmFsdWUsIHJjKTsKKwlkYmcoInNldF9iYXVkX3JhdGU6IHZhbHVlOiAweCV4LCBkaXZpc29yOiAweCV4IiwgdmFsdWUsIGRpdmlzb3IpOworCisJLyogTWltaWMgdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzIGRyaXZlciAodmVyc2lvbiAxLjIxUC4wMTA0KSwgd2hpY2gKKwkgICBhbHdheXMgc2VuZHMgdHdvIGV4dHJhIFVTQiAnZGV2aWNlIHJlcXVlc3QnIG1lc3NhZ2VzIGFmdGVyIHRoZQorCSAgICdiYXVkIHJhdGUgY2hhbmdlJyBtZXNzYWdlLiAgVGhlIGFjdHVhbCBmdW5jdGlvbmFsaXR5IG9mIHRoZQorCSAgIHJlcXVlc3QgY29kZXMgaW4gdGhlc2UgbWVzc2FnZXMgaXMgbm90IGZ1bGx5IHVuZGVyc3Rvb2QgYnV0IHRoZXNlCisJICAgcGFydGljdWxhciBjb2RlcyBhcmUgbmV2ZXIgc2VlbiBpbiBhbnkgb3BlcmF0aW9uIGJlc2lkZXMgYSBiYXVkCisJICAgcmF0ZSBjaGFuZ2UuICBCb3RoIG9mIHRoZXNlIG1lc3NhZ2VzIHNlbmQgYSBzaW5nbGUgYnl0ZSBvZiBkYXRhCisJICAgd2hvc2UgdmFsdWUgaXMgYWx3YXlzIHplcm8uICBUaGUgc2Vjb25kIG9mIHRoZXNlIHR3byBleHRyYSBtZXNzYWdlcworCSAgIGlzIHJlcXVpcmVkIGluIG9yZGVyIGZvciBkYXRhIHRvIGJlIHByb3Blcmx5IHdyaXR0ZW4gdG8gYW4gUlMtMjMyCisJICAgZGV2aWNlIHdoaWNoIGRvZXMgbm90IGFzc2VydCB0aGUgJ0NUUycgc2lnbmFsLiAqLworCisJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCAKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsIAorCQkJICAgICBXRFJfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCAKKwkJICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCByYyk7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1VOS05PV04yX1JFUVVFU1QsIAorCQkJICAgICBNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorCQkJICAgICAwLCAwLCAmemVyb19ieXRlLCBNQ1RfVTIzMl9TRVRfVU5LTk9XTjJfU0laRSwgCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIAorCQkgICAgTUNUX1UyMzJfU0VUX1VOS05PV04yX1JFUVVFU1QsIHJjKTsKKworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX3NldF9iYXVkX3JhdGUgKi8KKworc3RhdGljIGludCBtY3RfdTIzMl9zZXRfbGluZV9jdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgbGNyKQoreworICAgICAgICBpbnQgcmM7CisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1JFUVVFU1QsCisJCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKKwkJCSAgICAgV0RSX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCWVycigiU2V0IExJTkUgQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCBsY3IsIHJjKTsKKwlkYmcoInNldF9saW5lX2N0cmw6IDB4JXgiLCBsY3IpOworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX3NldF9saW5lX2N0cmwgKi8KKworc3RhdGljIGludCBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgIHVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlKQoreworICAgICAgICBpbnQgcmM7CisJdW5zaWduZWQgY2hhciBtY3IgPSBNQ1RfVTIzMl9NQ1JfTk9ORTsKKworCWlmIChjb250cm9sX3N0YXRlICYgVElPQ01fRFRSKQorCQltY3IgfD0gTUNUX1UyMzJfTUNSX0RUUjsKKwlpZiAoY29udHJvbF9zdGF0ZSAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IE1DVF9VMjMyX01DUl9SVFM7CisKKyAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsCisJCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZtY3IsIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUsCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlNldCBNT0RFTSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKSIsIG1jciwgcmMpOworCWRiZygic2V0X21vZGVtX2N0cmw6IHN0YXRlPTB4JXggPT0+IG1jcj0weCV4IiwgY29udHJvbF9zdGF0ZSwgbWNyKTsKKworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsICovCisKK3N0YXRpYyBpbnQgbWN0X3UyMzJfZ2V0X21vZGVtX3N0YXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgY2hhciAqbXNyKQoreworICAgICAgICBpbnQgcmM7CisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9SRVFVRVNULAorCQkJICAgICBNQ1RfVTIzMl9HRVRfUkVRVUVTVF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBtc3IsIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1NJWkUsCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKSB7CisJCWVycigiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQkqbXNyID0gMDsKKwl9CisJZGJnKCJnZXRfbW9kZW1fc3RhdDogMHgleCIsICptc3IpOworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX2dldF9tb2RlbV9zdGF0ICovCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX21zcl90b19zdGF0ZSh1bnNpZ25lZCBpbnQgKmNvbnRyb2xfc3RhdGUsIHVuc2lnbmVkIGNoYXIgbXNyKQoreworIAkvKiBUcmFuc2xhdGUgQ29udHJvbCBMaW5lIHN0YXRlcyAqLworCWlmIChtc3IgJiBNQ1RfVTIzMl9NU1JfRFNSKQorCQkqY29udHJvbF9zdGF0ZSB8PSAgVElPQ01fRFNSOworCWVsc2UKKwkJKmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0RTUjsKKwlpZiAobXNyICYgTUNUX1UyMzJfTVNSX0NUUykKKwkJKmNvbnRyb2xfc3RhdGUgfD0gIFRJT0NNX0NUUzsKKwllbHNlCisJCSpjb250cm9sX3N0YXRlICY9IH5USU9DTV9DVFM7CisJaWYgKG1zciAmIE1DVF9VMjMyX01TUl9SSSkKKwkJKmNvbnRyb2xfc3RhdGUgfD0gIFRJT0NNX1JJOworCWVsc2UKKwkJKmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JJOworCWlmIChtc3IgJiBNQ1RfVTIzMl9NU1JfQ0QpCisJCSpjb250cm9sX3N0YXRlIHw9ICBUSU9DTV9DRDsKKwllbHNlCisJCSpjb250cm9sX3N0YXRlICY9IH5USU9DTV9DRDsKKyAJZGJnKCJtc3JfdG9fc3RhdGU6IG1zcj0weCV4ID09PiBzdGF0ZT0weCV4IiwgbXNyLCAqY29udHJvbF9zdGF0ZSk7Cit9IC8qIG1jdF91MjMyX21zcl90b19zdGF0ZSAqLworCisvKgorICogRHJpdmVyJ3MgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IG1jdF91MjMyX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgKnJwb3J0OworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY3RfdTIzMl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBtY3RfdTIzMl9wcml2YXRlKSk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKKworCS8qIFB1aCwgdGhhdCdzIGRpcnR5ICovCisJcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlycG9ydCA9IHNlcmlhbC0+cG9ydFsxXTsKKwlpZiAocG9ydC0+cmVhZF91cmIpIHsKKwkJLyogTm8gdW5saW5raW5nLCBpdCB3YXNuJ3Qgc3VibWl0dGVkIHlldC4gKi8KKwkJdXNiX2ZyZWVfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl9CisJcG9ydC0+cmVhZF91cmIgPSBycG9ydC0+aW50ZXJydXB0X2luX3VyYjsKKwlycG9ydC0+aW50ZXJydXB0X2luX3VyYiA9IE5VTEw7CisJcG9ydC0+cmVhZF91cmItPmNvbnRleHQgPSBwb3J0OworCisJcmV0dXJuICgwKTsKK30gLyogbWN0X3UyMzJfc3RhcnR1cCAqLworCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2OworCWludCBpOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCS8qIE15IHNwZWNpYWwgaXRlbXMsIHRoZSBzdGFuZGFyZCByb3V0aW5lcyBmcmVlIG15IHVyYnMgKi8KKwkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAocHJpdikgeworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCQlrZnJlZShwcml2KTsKKwkJfQorCX0KK30gLyogbWN0X3UyMzJfc2h1dGRvd24gKi8KKworc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgbGFzdF9sY3I7CisJdW5zaWduZWQgY2hhciBsYXN0X21zcjsKKworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIENvbXBlbnNhdGUgZm9yIGEgaGFyZHdhcmUgYnVnOiBhbHRob3VnaCB0aGUgU2l0ZWNvbSBVMjMyLVAyNQorCSAqIGRldmljZSByZXBvcnRzIGEgbWF4aW11bSBvdXRwdXQgcGFja2V0IHNpemUgb2YgMzIgYnl0ZXMsCisJICogaXQgc2VlbXMgdG8gYmUgYWJsZSB0byBhY2NlcHQgb25seSAxNiBieXRlcyAoYW5kIHRoYXQncyB3aGF0CisJICogU25pZmZVU0Igc2F5cyB0b28uLi4pCisJICovCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTUNUX1UyMzJfU0lURUNPTV9QSUQpCisJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSAxNjsKKworCS8qIERvIGEgZGVmaW5lZCByZXN0YXJ0OiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gCisJICogYWx3YXlzIHR1cm4gb24gRFRSIGFuZCBSVFMgaGVyZSwgc28gZG8gdGhlIHNhbWUuIEknbSBub3QKKwkgKiBzdXJlIGlmIHRoaXMgaXMgcmVhbGx5IG5lY2Vzc2FyeS4gQnV0IGl0IHNob3VsZCBub3QgaGFybQorCSAqIGVpdGhlci4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUzsKKwllbHNlCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgPSAwOworCQorCXByaXYtPmxhc3RfbGNyID0gKE1DVF9VMjMyX0RBVEFfQklUU184IHwgCisJCQkgIE1DVF9VMjMyX1BBUklUWV9OT05FIHwKKwkJCSAgTUNUX1UyMzJfU1RPUF9CSVRTXzEpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCWxhc3RfbGNyID0gcHJpdi0+bGFzdF9sY3I7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CisJbWN0X3UyMzJfc2V0X2xpbmVfY3RybChzZXJpYWwsIGxhc3RfbGNyKTsKKworCS8qIFJlYWQgbW9kZW0gc3RhdHVzIGFuZCB1cGRhdGUgY29udHJvbCBzdGF0ZSAqLworCW1jdF91MjMyX2dldF9tb2RlbV9zdGF0KHNlcmlhbCwgJmxhc3RfbXNyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmxhc3RfbXNyID0gbGFzdF9tc3I7CisJbWN0X3UyMzJfbXNyX3RvX3N0YXRlKCZwcml2LT5jb250cm9sX3N0YXRlLCBwcml2LT5sYXN0X21zcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCSAgICBwb3J0LT5yZWFkX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpCisJCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCSAgICBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5waXBlLCByZXR2YWwpOworCitleGl0OgorCXJldHVybiAwOworfSAvKiBtY3RfdTIzMl9vcGVuICovCisKKworc3RhdGljIHZvaWQgbWN0X3UyMzJfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT5zZXJpYWwtPmRldikgeworCQkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCX0KK30gLyogbWN0X3UyMzJfY2xvc2UgKi8KKworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICghc2VyaWFsKSB7CisJCWRiZygiJXMgLSBiYWQgc2VyaWFsIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisgICAgICAgIGRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJLyoKKwkgKiBXb3JrLWEtcm91bmQ6IGhhbmRsZSB0aGUgJ3VzdWFsJyBidWxrLWluIHBpcGUgaGVyZQorCSAqLworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAyKSB7CisJCWludCBpOworCQl0dHkgPSBwb3J0LT50dHk7CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQkJfQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQorCQlnb3RvIGV4aXQ7CisJfQorCQorCS8qCisJICogVGhlIGludGVycnVwdC1pbiBwaXBlIHNpZ25hbHMgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyAobW9kZW0gbGluZQorCSAqIHNpZ25hbCBjaGFuZ2VzIGFuZCBlcnJvcnMpLiBkYXRhWzBdIGhvbGRzIE1TUiwgZGF0YVsxXSBob2xkcyBMU1IuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5sYXN0X21zciA9IGRhdGFbTUNUX1UyMzJfTVNSX0lOREVYXTsKKwkKKwkvKiBSZWNvcmQgQ29udHJvbCBMaW5lIHN0YXRlcyAqLworCW1jdF91MjMyX21zcl90b19zdGF0ZSgmcHJpdi0+Y29udHJvbF9zdGF0ZSwgcHJpdi0+bGFzdF9tc3IpOworCisjaWYgMAorCS8qIE5vdCB5ZXQgaGFuZGxlZC4gU2VlIGJlbGluX3NhLmMgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gKi8KKwkvKiBOb3cgdG8gcmVwb3J0IGFueSBlcnJvcnMgKi8KKwlwcml2LT5sYXN0X2xzciA9IGRhdGFbTUNUX1UyMzJfTFNSX0lOREVYXTsKKwkvKgorCSAqIGZpbGwgaW4gdGhlIGZsaXAgYnVmZmVyIGhlcmUsIGJ1dCBJIGRvIG5vdCBrbm93IHRoZSByZWxhdGlvbgorCSAqIHRvIHRoZSBjdXJyZW50L25leHQgcmVjZWl2ZSBidWZmZXIgb3IgY2hhcmFjdGVycy4gIEkgbmVlZAorCSAqIHRvIGxvb2sgaW4gdG8gdGhpcyBiZWZvcmUgY29tbWl0dGluZyBhbnkgY29kZS4KKwkgKi8KKwlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfRVJSKSB7CisJCXR0eSA9IHBvcnQtPnR0eTsKKwkJLyogT3ZlcnJ1biBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfT0UpIHsKKwkJfQorCQkvKiBQYXJpdHkgRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX1BFKSB7CisJCX0KKwkJLyogRnJhbWluZyBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfRkUpIHsKKwkJfQorCQkvKiBCcmVhayBJbmRpY2F0b3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX0JJKSB7CisJCX0KKwl9CisjZW5kaWYKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9IC8qIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICovCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlOworCXVuc2lnbmVkIGNoYXIgbGFzdF9sY3I7CisKKwkvKiBnZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBjdXJyZW50IHBvcnQgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlsYXN0X2xjciA9IDA7CisKKwkvKgorCSAqIFVwZGF0ZSBiYXVkIHJhdGUuCisJICogRG8gbm90IGF0dGVtcHQgdG8gY2FjaGUgb2xkIHJhdGVzIGFuZCBza2lwIHNldHRpbmdzLAorCSAqIGRpc2Nvbm5lY3RzIHNjcmV3IHN1Y2ggdHJpY2tzIHVwIGNvbXBsZXRlbHkuCisJICogUHJlbWF0dXJlIG9wdGltaXphdGlvbiBpcyB0aGUgcm9vdCBvZiBhbGwgZXZpbC4KKwkgKi8KKworICAgICAgICAvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLworCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CisJCWRiZygiJXM6IGJhdWQgd2FzIEIwIiwgX19GVU5DVElPTl9fKTsKKwkJY29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EVFI7CisJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKSB7CisJCQljb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKKwkJfQorCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworCX0KKworCW1jdF91MjMyX3NldF9iYXVkX3JhdGUoc2VyaWFsLCBjZmxhZyAmIENCQVVEKTsKKworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjAgKSB7CisJCWRiZygiJXM6IGJhdWQgaXMgQjAiLCBfX0ZVTkNUSU9OX18pOworCQkvKiBEcm9wIFJUUyBhbmQgRFRSICovCisJCWNvbnRyb2xfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworICAgICAgIAkJbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBjb250cm9sX3N0YXRlKTsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKExDUikKKwkgKi8KKworCS8qIHNldCB0aGUgcGFyaXR5ICovCisJaWYgKGNmbGFnICYgUEFSRU5CKQorCQlsYXN0X2xjciB8PSAoY2ZsYWcgJiBQQVJPREQpID8KKwkJCU1DVF9VMjMyX1BBUklUWV9PREQgOiBNQ1RfVTIzMl9QQVJJVFlfRVZFTjsKKwllbHNlCisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX1BBUklUWV9OT05FOworCisJLyogc2V0IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzICovCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU181OyBicmVhazsKKwljYXNlIENTNjoKKwkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzY7IGJyZWFrOworCWNhc2UgQ1M3OgorCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfNzsgYnJlYWs7CisJY2FzZSBDUzg6CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU184OyBicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU184OworCQlicmVhazsKKwl9CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBzdG9wIGJpdHMgKi8KKwlsYXN0X2xjciB8PSAoY2ZsYWcgJiBDU1RPUEIpID8KKwkJTUNUX1UyMzJfU1RPUF9CSVRTXzIgOiBNQ1RfVTIzMl9TVE9QX0JJVFNfMTsKKworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsYXN0X2xjcik7CisKKwkvKgorCSAqIFNldCBmbG93IGNvbnRyb2w6IHdlbGwsIEkgZG8gbm90IHJlYWxseSBub3cgaG93IHRvIGhhbmRsZSBEVFIvUlRTLgorCSAqIEp1c3QgZG8gd2hhdCB3ZSBoYXZlIHNlZW4gd2l0aCBTbmlmZlVTQiBvbiBXaW45OC4KKwkgKi8KKwkvKiBEcm9wIERUUi9SVFMgaWYgbm8gZmxvdyBjb250cm9sIG90aGVyd2lzZSBhc3NlcnQgKi8KKwluZXdfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikgfHwgKGNmbGFnICYgQ1JUU0NUUykpCisJCW5ld19zdGF0ZSB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CisJZWxzZQorCQluZXdfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCWlmIChuZXdfc3RhdGUgIT0gY29udHJvbF9zdGF0ZSkgeworCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIG5ld19zdGF0ZSk7CisJCWNvbnRyb2xfc3RhdGUgPSBuZXdfc3RhdGU7CisJfQorCisJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmNvbnRyb2xfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCXByaXYtPmxhc3RfbGNyID0gbGFzdF9sY3I7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfSAvKiBtY3RfdTIzMl9zZXRfdGVybWlvcyAqLworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9icmVha19jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyIGxjcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlc3N0YXRlPSVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWxjciA9IHByaXYtPmxhc3RfbGNyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChicmVha19zdGF0ZSkKKwkJbGNyIHw9IE1DVF9VMjMyX1NFVF9CUkVBSzsKKworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsY3IpOworfSAvKiBtY3RfdTIzMl9icmVha19jdGwgKi8KKworCitzdGF0aWMgaW50IG1jdF91MjMyX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY29udHJvbF9zdGF0ZTsKK30KKworc3RhdGljIGludCBtY3RfdTIzMl90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fRFRSOworCisJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IGNvbnRyb2xfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworfQorCitzdGF0aWMgaW50IG1jdF91MjMyX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkYmcoIiVzY21kPTB4JXgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwkvKiBCYXNlZCBvbiBjb2RlIGZyb20gYWNtLmMgYW5kIG90aGVycyAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUlXQUlUOgorCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLworCQkvKiBUT0RPICovCisJCXJldHVybiggMCApOworCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQkvKiBUT0RPICovCisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJZGJnKCIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLCBfX0ZVTkNUSU9OX18sY21kKTsKKwkJcmV0dXJuKC1FTk9JT0NUTENNRCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30gLyogbWN0X3UyMzJfaW9jdGwgKi8KKworCitzdGF0aWMgaW50IF9faW5pdCBtY3RfdTIzMl9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmbWN0X3UyMzJfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbWN0X3UyMzJfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm1jdF91MjMyX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY3RfdTIzMl9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmbWN0X3UyMzJfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZtY3RfdTIzMl9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0IChtY3RfdTIzMl9pbml0KTsKK21vZHVsZV9leGl0KG1jdF91MjMyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZGQwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuaApAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBNQ1QgKE1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSkgVVNCLVJTMjMyIENvbnZlcnRlciBEcml2ZXIKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwMCBXb2xmZ2FuZyBHcmFuZGVnZ2VyICh3b2xmZ2FuZ0BjZXMuY2gpCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgZGV2aWNlIE1DVCBVU0ItUlMyMzIgQ29udmVydGVyICgyNSBwaW4sIE1vZGVsIE5vLgorICogVTIzMi1QMjUpIGZyb20gTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuICh0aGVyZSBpcyBhbHNvIGEgOSBwaW4KKyAqIE1vZGVsIE5vLiBVMjMyLVA5KS4gU2VlIGh0dHA6Ly93d3cubWN0LmNvbS50dy9wX3UyMzIuaHRtbCBmb3IgZnVydGhlcgorICogaW5mb3JtYXRpb24uIFRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgZGV2aWNlIGFyZSBsaXN0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzCisgKiBmaWxlLiBUaGlzIGRldmljZSBpcyBhdmFpbGFibGUgZnJvbSB2YXJpb3VzIGRpc3RyaWJ1dG9ycy4gSSBrbm93IEhhbmEsCisgKiBodHRwOi8vd3d3LmhhbmEuZGUgYW5kIEQtTGluaywgaHR0cDovL3d3dy5kbGluay5jb20vcHJvZHVjdHMvdXNiL2RzYnMyNS4KKyAqCisgKiBBbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2Ugd2FzIGFjcXVpcmVkIGJ5IHVzaW5nIFNuaWZmVVNCCisgKiBvbiBXaW5kb3dzOTguIFRoZSB0ZWNobmljYWwgZGV0YWlscyBvZiB0aGUgcmV2ZXJzZSBlbmdpbmVlcmluZyBhcmUKKyAqIHN1bW1hcml6ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfTUNUX1UyMzJfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfTUNUX1UyMzJfSAorCisjZGVmaW5lIE1DVF9VMjMyX1ZJRAkgICAgICAgICAgICAgICAgMHgwNzExCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBNQ1RfVTIzMl9QSUQJICAgICAgICAgICAgICAgIDB4MDIxMAkvKiBPcmlnaW5hbCBNQ1QgUHJvZHVjdCBJZCAqLworCisvKiBVMjMyLVAyNSwgU2l0ZWNvbSAqLworI2RlZmluZSBNQ1RfVTIzMl9TSVRFQ09NX1BJRAkJMHgwMjMwCS8qIFNpdGVjb20gUHJvZHVjdCBJZCAqLworCisvKiBEVS1IM1NQIFVTQiBCQVkgaHViICovCisjZGVmaW5lIE1DVF9VMjMyX0RVX0gzU1BfUElECQkweDAyMDAJLyogRC1MaW5rIERVLUgzU1AgVVNCIEJBWSAqLworCisvKiBCZWxraW4gYmFkZ2UgdGhlIE1DVCBVMjMyLVA5IGFzIHRoZSBGNVUxMDkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9WSUQJMHgwNTBkCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBNQ1RfVTIzMl9CRUxLSU5fRjVVMTA5X1BJRAkweDAxMDkJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogVmVuZG9yIFJlcXVlc3QgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRQkweDQwCisjZGVmaW5lIE1DVF9VMjMyX0dFVF9SRVFVRVNUX1RZUEUJMHhjMAorCisjZGVmaW5lIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1JFUVVFU1QgMiAgLyogR2V0IE1vZGVtIFN0YXR1cyBSZWdpc3RlciAoTVNSKSAqLworI2RlZmluZSBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFICAgIDEKKworI2RlZmluZSBNQ1RfVTIzMl9HRVRfTElORV9DVFJMX1JFUVVFU1QgIDYgIC8qIEdldCBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKExDUikgKi8KKyNkZWZpbmUgTUNUX1UyMzJfR0VUX0xJTkVfQ1RSTF9TSVpFICAgICAxICAvKiAuLi4gbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgKi8KKworI2RlZmluZSBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1JFUVVFU1QJNSAgLyogU2V0IEJhdWQgUmF0ZSBEaXZpc29yICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSAgICAgNAorCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfUkVRVUVTVAk3ICAvKiBTZXQgTGluZSBDb250cm9sIFJlZ2lzdGVyIChMQ1IpICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSAgICAgMQorCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QJMTAgLyogU2V0IE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKE1DUikgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX01PREVNX0NUUkxfU0laRSAgICAxCisKKy8qIFRoaXMgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgaXMgbm90IHdlbGwgdW5kZXJzdG9vZC4gIEl0IGlzIHRyYW5zbWl0dGVkIGJ5CisgICB0aGUgTUNULXN1cHBsaWVkIFdpbmRvd3MgZHJpdmVyIHdoZW5ldmVyIHRoZSBiYXVkIHJhdGUgY2hhbmdlcy4gCisqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCAgIDExICAvKiBVbmtub3duIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUgICAgICAgMQorCisvKiBUaGlzIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlIGlzIG5vdCB3ZWxsIHVuZGVyc3Rvb2QuICBJdCBpcyB0cmFuc21pdHRlZCBieQorICAgdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzIGRyaXZlciB3aGVuZXZlciB0aGUgYmF1ZCByYXRlIGNoYW5nZXMuIAorICAgCisgICBXaXRob3V0IHRoaXMgVVNCIGRldmljZSByZXF1ZXN0LCB0aGUgVVNCL1JTLTIzMiBhZGFwdGVyIHdpbGwgbm90IHdyaXRlIHRvCisgICBSUy0yMzIgZGV2aWNlcyB3aGljaCBkbyBub3QgYXNzZXJ0IHRoZSAnQ1RTJyBzaWduYWwuCisqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfVU5LTk9XTjJfUkVRVUVTVCAgIDEyICAvKiBVbmtub3duIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1VOS05PV04yX1NJWkUgICAgICAgMQorCisvKgorICogQmF1ZCByYXRlIChkaXZpc29yKQorICogQWN0dWFsbHksIHRoZXJlIGFyZSB0d28gb2YgdGhlbSwgTUNUIHdlYnNpdGUgY2FsbHMgdGhlbSAiUGhpbGlwcyBzb2x1dGlvbiIKKyAqIGFuZCAiSW50ZWwgc29sdXRpb24iLiBUaGV5IGFyZSB0aGUgcmVndWxhciBNQ1QgYW5kICJTaXRlY29tIiBmb3IgdXMuCisgKiBUaGlzIGlzIHBvaW50bGVzcyB0byBkb2N1bWVudCBpbiB0aGUgaGVhZGVyLCBzZWUgdGhlIGNvZGUgZm9yIHRoZSBiaXRzLgorICovCitzdGF0aWMgaW50IG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IHZhbHVlKTsKKworLyoKKyAqIExpbmUgQ29udHJvbCBSZWdpc3RlciAoTENSKQorICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9CUkVBSyAgICAgICAgICAgICAgMHg0MAorCisjZGVmaW5lIE1DVF9VMjMyX1BBUklUWV9TUEFDRQkJMHgzOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfTUFSSwkJMHgyOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfRVZFTgkJMHgxOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfT0RECQkweDA4CisjZGVmaW5lIE1DVF9VMjMyX1BBUklUWV9OT05FCQkweDAwCisKKyNkZWZpbmUgTUNUX1UyMzJfREFUQV9CSVRTXzUgICAgICAgICAgICAweDAwCisjZGVmaW5lIE1DVF9VMjMyX0RBVEFfQklUU182ICAgICAgICAgICAgMHgwMQorI2RlZmluZSBNQ1RfVTIzMl9EQVRBX0JJVFNfNyAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTUNUX1UyMzJfREFUQV9CSVRTXzggICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgTUNUX1UyMzJfU1RPUF9CSVRTXzIgICAgICAgICAgICAweDA0CisjZGVmaW5lIE1DVF9VMjMyX1NUT1BfQklUU18xICAgICAgICAgICAgMHgwMAorCisvKgorICogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAoTUNSKQorICovCisjZGVmaW5lIE1DVF9VMjMyX01DUl9OT05FICAgICAgICAgICAgICAgMHg4ICAgICAvKiBEZWFjdGl2YXRlIERUUiBhbmQgUlRTICovCisjZGVmaW5lIE1DVF9VMjMyX01DUl9SVFMgICAgICAgICAgICAgICAgMHhhICAgICAvKiBBY3RpdmF0ZSBSVFMgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTUNSX0RUUiAgICAgICAgICAgICAgICAweDkgICAgIC8qIEFjdGl2YXRlIERUUiAqLworCisvKgorICogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyIChNU1IpCisgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTVNSX0lOREVYICAgICAgICAgICAgICAweDAgICAgIC8qIGRhdGFbaW5kZXhdICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9DRCAgICAgICAgICAgICAgICAgMHg4MCAgICAvKiBDdXJyZW50IENEICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9SSSAgICAgICAgICAgICAgICAgMHg0MCAgICAvKiBDdXJyZW50IFJJICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EU1IgICAgICAgICAgICAgICAgMHgyMCAgICAvKiBDdXJyZW50IERTUiAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfQ1RTICAgICAgICAgICAgICAgIDB4MTAgICAgLyogQ3VycmVudCBDVFMgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTVNSX0RDRCAgICAgICAgICAgICAgICAweDA4ICAgIC8qIERlbHRhIENEICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EUkkgICAgICAgICAgICAgICAgMHgwNCAgICAvKiBEZWx0YSBSSSAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfRERTUiAgICAgICAgICAgICAgIDB4MDIgICAgLyogRGVsdGEgRFNSICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EQ1RTICAgICAgICAgICAgICAgMHgwMSAgICAvKiBEZWx0YSBDVFMgKi8KKworLyoKKyAqIExpbmUgU3RhdHVzIFJlZ2lzdGVyIChMU1IpCisgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX0lOREVYICAgICAgICAgICAgICAxICAgICAgIC8qIGRhdGFbaW5kZXhdICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9FUlIgICAgICAgICAgICAgICAgMHg4MCAgICAvKiBPRSB8IFBFIHwgRkUgfCBCSSAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfVEVNVCAgICAgICAgICAgICAgIDB4NDAgICAgLyogdHJhbnNtaXQgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX1RIUkUgICAgICAgICAgICAgICAweDIwICAgIC8qIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX0JJICAgICAgICAgICAgICAgICAweDEwICAgIC8qIGJyZWFrIGluZGljYXRvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfRkUgICAgICAgICAgICAgICAgIDB4MDggICAgLyogZnJhbWluZyBlcnJvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfT0UgICAgICAgICAgICAgICAgIDB4MDIgICAgLyogb3ZlcnJ1biBlcnJvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfUEUgICAgICAgICAgICAgICAgIDB4MDQgICAgLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9PRSAgICAgICAgICAgICAgICAgMHgwMiAgICAvKiBvdmVycnVuIGVycm9yICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9EUiAgICAgICAgICAgICAgICAgMHgwMSAgICAvKiByZWNlaXZlIGRhdGEgcmVhZHkgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGVjaG5pY2FsIFNwZWNpZmljYXRpb24gcmV2ZXJzZSBlbmdpbmVlcmVkIHdpdGggU25pZmZVU0Igb24gV2luZG93czk4CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgVGhlIHRlY2huaWNhbCBkZXRhaWxzIG9mIHRoZSBkZXZpY2UgaGF2ZSBiZWVuIGFjcXVpcmVkIGJlIHVzaW5nICJTbmlmZlVTQiIKKyAqICBhbmQgdGhlIHZlbmRvci1zdXBwbGllZCBkZXZpY2UgZHJpdmVyICh2ZXJzaW9uIDIuM0EpIHVuZGVyIFdpbmRvd3M5OC4gVG8KKyAqICBpZGVudGlmeSB0aGUgVVNCIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0cyBhbmQgdG8gYXNzaWduIHRoZW0gdG8gdGVybWluYWwgCisgKiAgc2V0dGluZ3MgKGZsb3cgY29udHJvbCwgYmF1ZCByYXRlLCBldGMuKSB0aGUgcHJvZ3JhbSAiU2VyaWFsU2V0dGluZ3MiIGZyb20KKyAqICBXaWxsaWFtIEcuIEdyZWF0aG91c2UgaGFzIGJlZW4gcHJvdmVuIHRvIGJlIHZlcnkgdXNlZnVsLiBJIGFsc28gdXNlZCB0aGUKKyAqICBXaW45OCAiSHlwZXJUZXJtaW5hbCIgYW5kICJ1c2Itcm9ib3QiIG9uIExpbnV4IGZvciB0ZXN0aW5nLiBUaGUgcmVzdWx0cyBhbmQgCisgKiAgb2JzZXJ2YXRpb25zIGFyZSBzdW1tYXJpemVkIGJlbG93OgorICoKKyAqICBUaGUgVVNCIHJlcXVlc3RzIHNlZW0gdG8gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIHRoZSByZWdpc3RlcnMgb2YgYSA4MjUwLAorICogIDE2NDUwIG9yIDE2NTUwIFVBUlQuIFRoZSBGcmVlQlNEIGhhbmRib29rIChhcHBlbmRpeCBGLjQgIklucHV0L091dHB1dAorICogIGRldmljZXMiKSBjb250YWlucyBhIGNvbXByZWhlbnNpdmUgZGVzY3JpcHRpb24gb2YgVUFSVHMgYW5kIGl0cyByZWdpc3RlcnMuCisgKiAgVGhlIGJpdCBkZXNjcmlwdGlvbnMgYXJlIGFjdHVhbGx5IHRha2VuIGZyb20gdGhlcmUuCisgKgorICoKKyAqIEJhdWQgcmF0ZSAoZGl2aXNvcikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAweDQwICgwMTAwIDAwMDBCKQorICogICBiUmVxdWVzdDogICAgICAgMHgwNQorICogICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICAgd0xlbmd0aDogICAgICAgIDB4MDAwNAorICogICBEYXRhOiAgICAgICAgICAgZGl2aXNvciA9IDExNTIwMCAvIGJhdWRfcmF0ZQorICoKKyAqICAgU25pZmZVU0Igb2JzZXJ2YXRpb25zIChOb3YgMjAwMyk6IENvbnRyYXJ5IHRvIHRoZSAnd0xlbmd0aCcgdmFsdWUgb2YgNAorICogICBzaG93biBhYm92ZSwgb2JzZXJ2YXRpb25zIHdpdGggYSBCZWxraW4gRjVVMTA5IGFkYXB0ZXIsIHVzaW5nIHRoZQorICogICBNQ1Qtc3VwcGxpZWQgV2luZG93czk4IGRyaXZlciAoVTJTUE9SVC5WWEQsICJGaWxlIHZlcnNpb246IDEuMjFQLjAxMDQgZm9yCisgKiAgIFdpbjk4L01lIiksIHNob3cgdGhpcyByZXF1ZXN0IGhhcyBhIGxlbmd0aCBvZiAxIGJ5dGUsIHByZXN1bWFibHkgYmVjYXVzZQorICogICBvZiB0aGUgZmFjdCB0aGF0IHRoZSBCZWxraW4gYWRhcHRlciBhbmQgdGhlICdTaXRlY29tIFUyMzItUDI1JyBhZGFwdGVyCisgKiAgIHVzZSBhIGJhdWQtcmF0ZSBjb2RlIGluc3RlYWQgb2YgYSBjb252ZW50aW9uYWwgUlMtMjMyIGJhdWQgcmF0ZSBkaXZpc29yLgorICogICBUaGUgY3VycmVudCBzb3VyY2UgY29kZSBmb3IgdGhpcyBkcml2ZXIgZG9lcyBub3QgcmVmbGVjdCB0aGlzIGZhY3QsIGJ1dAorICogICB0aGUgZHJpdmVyIHdvcmtzIGZpbmUgd2l0aCB0aGlzIGFkYXB0ZXIvZHJpdmVyIGNvbWJpbmF0aW9uIG5vbmV0aGVsZXNzLgorICoKKyAqCisgKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKExDUikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBCbVJlcXVlc3RUeXBlOiAgMHg0MCAoMDEwMCAwMDAwQikgICAgMHhjMCAoMTEwMCAwMDAwQikKKyAqICBiUmVxdWVzdDogICAgICAgMHgwNyAgICAgICAgICAgICAgICAgMHgwNgorICogIHdWYWx1ZTogICAgICAgICAweDAwMDAKKyAqICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogIERhdGE6ICAgICAgICAgICBMQ1IgKHNlZSBiZWxvdykKKyAqCisgKiAgQml0IDc6IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCAoRExBQikuIFdoZW4gc2V0LCBhY2Nlc3MgdG8gdGhlIGRhdGEKKyAqICAJICAgdHJhbnNtaXQvcmVjZWl2ZSByZWdpc3RlciAoVEhSL1JCUikgYW5kIHRoZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgKiAgCSAgIChJRVIpIGlzIGRpc2FibGVkLiBBbnkgYWNjZXNzIHRvIHRoZXNlIHBvcnRzIGlzIG5vdyByZWRpcmVjdGVkIHRvIHRoZQorICogIAkgICBEaXZpc29yIExhdGNoIFJlZ2lzdGVycy4gU2V0dGluZyB0aGlzIGJpdCwgbG9hZGluZyB0aGUgRGl2aXNvcgorICogIAkgICBSZWdpc3RlcnMsIGFuZCBjbGVhcmluZyBETEFCIHNob3VsZCBiZSBkb25lIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqICBCaXQgNjogU2V0IEJyZWFrLiBXaGVuIHNldCB0byAiMSIsIHRoZSB0cmFuc21pdHRlciBiZWdpbnMgdG8gdHJhbnNtaXQKKyAqICAJICAgY29udGludW91cyBTcGFjaW5nIHVudGlsIHRoaXMgYml0IGlzIHNldCB0byAiMCIuIFRoaXMgb3ZlcnJpZGVzIGFueQorICogIAkgICBiaXRzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYmVpbmcgdHJhbnNtaXR0ZWQuCisgKiAgQml0IDU6IFN0aWNrIFBhcml0eS4gV2hlbiBwYXJpdHkgaXMgZW5hYmxlZCwgc2V0dGluZyB0aGlzIGJpdCBjYXVzZXMgcGFyaXR5CisgKiAgCSAgIHRvIGFsd2F5cyBiZSAiMSIgb3IgIjAiLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgQml0IDQuCisgKiAgQml0IDQ6IEV2ZW4gUGFyaXR5IFNlbGVjdCAoRVBTKS4gV2hlbiBwYXJpdHkgaXMgZW5hYmxlZCBhbmQgQml0IDUgaXMgIjAiLAorICogIAkgICBzZXR0aW5nIHRoaXMgYml0IGNhdXNlcyBldmVuIHBhcml0eSB0byBiZSB0cmFuc21pdHRlZCBhbmQgZXhwZWN0ZWQuCisgKiAgCSAgIE90aGVyd2lzZSwgb2RkIHBhcml0eSBpcyB1c2VkLgorICogIEJpdCAzOiBQYXJpdHkgRW5hYmxlIChQRU4pLiBXaGVuIHNldCB0byAiMSIsIGEgcGFyaXR5IGJpdCBpcyBpbnNlcnRlZAorICogIAkgICBiZXR3ZWVuIHRoZSBsYXN0IGJpdCBvZiB0aGUgZGF0YSBhbmQgdGhlIFN0b3AgQml0LiBUaGUgVUFSVCB3aWxsIGFsc28KKyAqICAJICAgZXhwZWN0IHBhcml0eSB0byBiZSBwcmVzZW50IGluIHRoZSByZWNlaXZlZCBkYXRhLgorICogIEJpdCAyOiBOdW1iZXIgb2YgU3RvcCBCaXRzIChTVEIpLiBJZiBzZXQgdG8gIjEiIGFuZCB1c2luZyA1LWJpdCBkYXRhIHdvcmRzLAorICogIAkgICAxLjUgU3RvcCBCaXRzIGFyZSB0cmFuc21pdHRlZCBhbmQgZXhwZWN0ZWQgaW4gZWFjaCBkYXRhIHdvcmQuIEZvcgorICogIAkgICA2LCA3IGFuZCA4LWJpdCBkYXRhIHdvcmRzLCAyIFN0b3AgQml0cyBhcmUgdHJhbnNtaXR0ZWQgYW5kIGV4cGVjdGVkLgorICogIAkgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byAiMCIsIG9uZSBTdG9wIEJpdCBpcyB1c2VkIG9uIGVhY2ggZGF0YSB3b3JkLgorICogIEJpdCAxOiBXb3JkIExlbmd0aCBTZWxlY3QgQml0ICMxIChXTFNCMSkKKyAqICBCaXQgMDogV29yZCBMZW5ndGggU2VsZWN0IEJpdCAjMCAoV0xTQjApCisgKiAgCSAgIFRvZ2V0aGVyIHRoZXNlIGJpdHMgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBkYXRhIHdvcmQuCisgKiAgCSAgICAgMSAwICBXb3JkIExlbmd0aAorICogIAkgICAgIDAgMCAgNSBEYXRhIEJpdHMKKyAqICAJICAgICAwIDEgIDYgRGF0YSBCaXRzCisgKiAgCSAgICAgMSAwICA3IERhdGEgQml0cworICogIAkgICAgIDEgMSAgOCBEYXRhIEJpdHMKKyAqCisgKiAgU25pZmZVU0Igb2JzZXJ2YXRpb25zOiBCaXQgNyBzZWVtcyBub3QgdG8gYmUgdXNlZC4gVGhlcmUgc2VlbSB0byBiZSB0d28gYnVncworICogIGluIHRoZSBXaW45OCBkcml2ZXI6IHRoZSBicmVhayBkb2VzIG5vdCB3b3JrIChiaXQgNiBpcyBub3QgYXNzZXJ0ZWQpIGFuZCB0aGUKKyAqICBzdGljayBwYXJpdHkgYml0IGlzIG5vdCBjbGVhcmVkIHdoZW4gc2V0IG9uY2UuIFRoZSBMQ1IgY2FuIGFsc28gYmUgcmVhZAorICogIGJhY2sgd2l0aCBVU0IgcmVxdWVzdCA2IGJ1dCB0aGlzIGhhcyBuZXZlciBiZWVuIG9ic2VydmVkIHdpdGggU25pZmZVU0IuCisgKgorICoKKyAqIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKE1DUikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgQm1SZXF1ZXN0VHlwZTogIDB4NDAgICgwMTAwIDAwMDBCKQorICogIGJSZXF1ZXN0OiAgICAgICAweDBhCisgKiAgd1ZhbHVlOiAgICAgICAgIDB4MDAwMAorICogIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICB3TGVuZ3RoOiAgICAgICAgMHgwMDAxCisgKiAgRGF0YTogICAgICAgICAgIE1DUiAoQml0IDQuLjcsIHNlZSBiZWxvdykKKyAqCisgKiAgQml0IDc6IFJlc2VydmVkLCBhbHdheXMgMC4KKyAqICBCaXQgNjogUmVzZXJ2ZWQsIGFsd2F5cyAwLgorICogIEJpdCA1OiBSZXNlcnZlZCwgYWx3YXlzIDAuCisgKiAgQml0IDQ6IExvb3AtQmFjayBFbmFibGUuIFdoZW4gc2V0IHRvICIxIiwgdGhlIFVBUlQgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyCisgKiAgCSAgIGFyZSBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0b2dldGhlciB0byBhbGxvdyBkaWFnbm9zdGljIG9wZXJhdGlvbnMuIEluCisgKiAgCSAgIGFkZGl0aW9uLCB0aGUgVUFSVCBtb2RlbSBjb250cm9sIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgVUFSVAorICogIAkgICBtb2RlbSBjb250cm9sIGlucHV0cy4gQ1RTIGlzIGNvbm5lY3RlZCB0byBSVFMsIERUUiBpcyBjb25uZWN0ZWQgdG8KKyAqICAJICAgRFNSLCBPVVQxIGlzIGNvbm5lY3RlZCB0byBSSSwgYW5kIE9VVCAyIGlzIGNvbm5lY3RlZCB0byBEQ0QuCisgKiAgQml0IDM6IE9VVCAyLiBBbiBhdXhpbGlhcnkgb3V0cHV0IHRoYXQgdGhlIGhvc3QgcHJvY2Vzc29yIG1heSBzZXQgaGlnaCBvcgorICogIAkgICBsb3cuIEluIHRoZSBJQk0gUEMgc2VyaWFsIGFkYXB0ZXIgKGFuZCBtb3N0IGNsb25lcyksIE9VVCAyIGlzIHVzZWQKKyAqICAJICAgdG8gdHJpLXN0YXRlIChkaXNhYmxlKSB0aGUgaW50ZXJydXB0IHNpZ25hbCBmcm9tIHRoZQorICogIAkgICA4MjUwLzE2NDUwLzE2NTUwIFVBUlQuCisgKiAgQml0IDI6IE9VVCAxLiBBbiBhdXhpbGlhcnkgb3V0cHV0IHRoYXQgdGhlIGhvc3QgcHJvY2Vzc29yIG1heSBzZXQgaGlnaCBvcgorICogIAkgICBsb3cuIFRoaXMgb3V0cHV0IGlzIG5vdCB1c2VkIG9uIHRoZSBJQk0gUEMgc2VyaWFsIGFkYXB0ZXIuCisgKiAgQml0IDE6IFJlcXVlc3QgdG8gU2VuZCAoUlRTKS4gV2hlbiBzZXQgdG8gIjEiLCB0aGUgb3V0cHV0IG9mIHRoZSBVQVJUIC1SVFMKKyAqICAJICAgbGluZSBpcyBMb3cgKEFjdGl2ZSkuCisgKiAgQml0IDA6IERhdGEgVGVybWluYWwgUmVhZHkgKERUUikuIFdoZW4gc2V0IHRvICIxIiwgdGhlIG91dHB1dCBvZiB0aGUgVUFSVAorICogIAkgICAtRFRSIGxpbmUgaXMgTG93IChBY3RpdmUpLgorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IEJpdCAyIGFuZCA0IHNlZW0gbm90IHRvIGJlIHVzZWQgYnV0IGJpdCAzIGhhcyBiZWVuCisgKiAgc2VlbiBfYWx3YXlzXyBzZXQuCisgKgorICoKKyAqIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAoTVNSKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIEJtUmVxdWVzdFR5cGU6ICAweGMwICAoMTEwMCAwMDAwQikKKyAqICBiUmVxdWVzdDogICAgICAgMHgwMgorICogIHdWYWx1ZTogICAgICAgICAweDAwMDAKKyAqICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogIERhdGE6ICAgICAgICAgICBNU1IgKHNlZSBiZWxvdykKKyAqCisgKiAgQml0IDc6IERhdGEgQ2FycmllciBEZXRlY3QgKENEKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBEQ0QgbGluZSBvbiB0aGUKKyAqICAJICAgVUFSVC4KKyAqICBCaXQgNjogUmluZyBJbmRpY2F0b3IgKFJJKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBSSSBsaW5lIG9uIHRoZSBVQVJULgorICogIEJpdCA1OiBEYXRhIFNldCBSZWFkeSAoRFNSKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBEU1IgbGluZSBvbiB0aGUgVUFSVC4KKyAqICBCaXQgNDogQ2xlYXIgVG8gU2VuZCAoQ1RTKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBDVFMgbGluZSBvbiB0aGUgVUFSVC4KKyAqICBCaXQgMzogRGVsdGEgRGF0YSBDYXJyaWVyIERldGVjdCAoRERDRCkuIFNldCB0byAiMSIgaWYgdGhlIC1EQ0QgbGluZSBoYXMKKyAqICAJICAgY2hhbmdlZCBzdGF0ZSBvbmUgbW9yZSBtb3JlIHRpbWVzIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIE1TUiB3YXMKKyAqICAJICAgcmVhZCBieSB0aGUgaG9zdC4KKyAqICBCaXQgMjogVHJhaWxpbmcgRWRnZSBSaW5nIEluZGljYXRvciAoVEVSSSkuIFNldCB0byAiMSIgaWYgdGhlIC1SSSBsaW5lIGhhcworICogIAkgICBoYWQgYSBsb3cgdG8gaGlnaCB0cmFuc2l0aW9uIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIE1TUiB3YXMgcmVhZCBieQorICogIAkgICB0aGUgaG9zdC4KKyAqICBCaXQgMTogRGVsdGEgRGF0YSBTZXQgUmVhZHkgKEREU1IpLiBTZXQgdG8gIjEiIGlmIHRoZSAtRFNSIGxpbmUgaGFzIGNoYW5nZWQKKyAqICAJICAgc3RhdGUgb25lIG1vcmUgbW9yZSB0aW1lcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBNU1Igd2FzIHJlYWQgYnkgdGhlCisgKiAgCSAgIGhvc3QuCisgKiAgQml0IDA6IERlbHRhIENsZWFyIFRvIFNlbmQgKERDVFMpLiBTZXQgdG8gIjEiIGlmIHRoZSAtQ1RTIGxpbmUgaGFzIGNoYW5nZWQKKyAqICAJICAgc3RhdGUgb25lIG1vcmUgdGltZXMgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgTVNSIHdhcyByZWFkIGJ5IHRoZQorICogIAkgICBob3N0LgorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IHRoZSBNU1IgaXMgYWxzbyByZXR1cm5lZCBhcyBmaXJzdCBieXRlIG9uIHRoZQorICogIGludGVycnVwdC1pbiBlbmRwb2ludCAweDgzIHRvIHNpZ25hbCBjaGFuZ2VzIG9mIG1vZGVtIHN0YXR1cyBsaW5lcy4gVGhlIFVTQgorICogIHJlcXVlc3QgdG8gcmVhZCBNU1IgY2Fubm90IGJlIGFwcGxpZWQgZHVyaW5nIG5vcm1hbCBkZXZpY2Ugb3BlcmF0aW9uLgorICoKKyAqCisgKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAoTFNSKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgQml0IDcgICBFcnJvciBpbiBSZWNlaXZlciBGSUZPLiBPbiB0aGUgODI1MC8xNjQ1MCBVQVJULCB0aGlzIGJpdCBpcyB6ZXJvLgorICogIAkgICAgVGhpcyBiaXQgaXMgc2V0IHRvICIxIiB3aGVuIGFueSBvZiB0aGUgYnl0ZXMgaW4gdGhlIEZJRk8gaGF2ZSBvbmUgb3IKKyAqICAJICAgIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb25kaXRpb25zOiBQRSwgRkUsIG9yIEJJLgorICogIEJpdCA2ICAgVHJhbnNtaXR0ZXIgRW1wdHkgKFRFTVQpLiBXaGVuIHNldCB0byAiMSIsIHRoZXJlIGFyZSBubyB3b3JkcworICogIAkgICAgcmVtYWluaW5nIGluIHRoZSB0cmFuc21pdCBGSUZPIG9yIHRoZSB0cmFuc21pdCBzaGlmdCByZWdpc3Rlci4gVGhlCisgKiAgCSAgICB0cmFuc21pdHRlciBpcyBjb21wbGV0ZWx5IGlkbGUuCisgKiAgQml0IDUgICBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IChUSFJFKS4gV2hlbiBzZXQgdG8gIjEiLCB0aGUgRklGTworICogIAkgICAgKG9yIGhvbGRpbmcgcmVnaXN0ZXIpIG5vdyBoYXMgcm9vbSBmb3IgYXQgbGVhc3Qgb25lIGFkZGl0aW9uYWwgd29yZAorICogIAkgICAgdG8gdHJhbnNtaXQuIFRoZSB0cmFuc21pdHRlciBtYXkgc3RpbGwgYmUgdHJhbnNtaXR0aW5nIHdoZW4gdGhpcyBiaXQKKyAqICAJICAgIGlzIHNldCB0byAiMSIuCisgKiAgQml0IDQgICBCcmVhayBJbnRlcnJ1cHQgKEJJKS4gVGhlIHJlY2VpdmVyIGhhcyBkZXRlY3RlZCBhIEJyZWFrIHNpZ25hbC4KKyAqICBCaXQgMyAgIEZyYW1pbmcgRXJyb3IgKEZFKS4gQSBTdGFydCBCaXQgd2FzIGRldGVjdGVkIGJ1dCB0aGUgU3RvcCBCaXQgZGlkIG5vdAorICogIAkgICAgYXBwZWFyIGF0IHRoZSBleHBlY3RlZCB0aW1lLiBUaGUgcmVjZWl2ZWQgd29yZCBpcyBwcm9iYWJseSBnYXJibGVkLgorICogIEJpdCAyICAgUGFyaXR5IEVycm9yIChQRSkuIFRoZSBwYXJpdHkgYml0IHdhcyBpbmNvcnJlY3QgZm9yIHRoZSB3b3JkIHJlY2VpdmVkLgorICogIEJpdCAxICAgT3ZlcnJ1biBFcnJvciAoT0UpLiBBIG5ldyB3b3JkIHdhcyByZWNlaXZlZCBhbmQgdGhlcmUgd2FzIG5vIHJvb20gaW4KKyAqICAJICAgIHRoZSByZWNlaXZlIGJ1ZmZlci4gVGhlIG5ld2x5LWFycml2ZWQgd29yZCBpbiB0aGUgc2hpZnQgcmVnaXN0ZXIgaXMKKyAqICAJICAgIGRpc2NhcmRlZC4gT24gODI1MC8xNjQ1MCBVQVJUcywgdGhlIHdvcmQgaW4gdGhlIGhvbGRpbmcgcmVnaXN0ZXIgaXMKKyAqICAJICAgIGRpc2NhcmRlZCBhbmQgdGhlIG5ld2x5LSBhcnJpdmVkIHdvcmQgaXMgcHV0IGluIHRoZSBob2xkaW5nIHJlZ2lzdGVyLgorICogIEJpdCAwICAgRGF0YSBSZWFkeSAoRFIpLiBPbmUgb3IgbW9yZSB3b3JkcyBhcmUgaW4gdGhlIHJlY2VpdmUgRklGTyB0aGF0IHRoZQorICogIAkgICAgaG9zdCBtYXkgcmVhZC4gQSB3b3JkIG11c3QgYmUgY29tcGxldGVseSByZWNlaXZlZCBhbmQgbW92ZWQgZnJvbSB0aGUKKyAqICAJICAgIHNoaWZ0IHJlZ2lzdGVyIGludG8gdGhlIEZJRk8gKG9yIGhvbGRpbmcgcmVnaXN0ZXIgZm9yIDgyNTAvMTY0NTAKKyAqICAJICAgIGRlc2lnbnMpIGJlZm9yZSB0aGlzIGJpdCBpcyBzZXQuCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogdGhlIExTUiBpcyByZXR1cm5lZCBhcyBzZWNvbmQgYnl0ZSBvbiB0aGUgaW50ZXJydXB0LWluCisgKiAgZW5kcG9pbnQgMHg4MyB0byBzaWduYWwgZXJyb3IgY29uZGl0aW9ucy4gU3VjaCBlcnJvcnMgaGF2ZSBiZWVuIHNlZW4gd2l0aAorICogIG1pbmljb20vem1vZGVtIHRyYW5zZmVycyAoQ1JDIGVycm9ycykuCisgKgorICoKKyAqIFVua25vd24gIzEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAweDQwICgwMTAwIDAwMDBCKQorICogICBiUmVxdWVzdDogICAgICAgMHgwYgorICogICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogICBEYXRhOiAgICAgICAgICAgMHgwMAorICoKKyAqICAgU25pZmZVU0Igb2JzZXJ2YXRpb25zIChOb3YgMjAwMyk6IFdpdGggdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzOTggZHJpdmVyCisgKiAgIChVMlNQT1JULlZYRCwgIkZpbGUgdmVyc2lvbjogMS4yMVAuMDEwNCBmb3IgV2luOTgvTWUiKSwgdGhpcyByZXF1ZXN0CisgKiAgIG9jY3VycyBpbW1lZGlhdGVseSBhZnRlciBhICJCYXVkIHJhdGUgKGRpdmlzb3IpIiBtZXNzYWdlLiAgSXQgd2FzIG5vdAorICogICBvYnNlcnZlZCBhdCBhbnkgb3RoZXIgdGltZS4gIEl0IGlzIHVuY2xlYXIgd2hhdCBwdXJwb3NlIHRoaXMgbWVzc2FnZQorICogICBzZXJ2ZXMuCisgKgorICoKKyAqIFVua25vd24gIzIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAweDQwICgwMTAwIDAwMDBCKQorICogICBiUmVxdWVzdDogICAgICAgMHgwYworICogICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogICBEYXRhOiAgICAgICAgICAgMHgwMAorICoKKyAqICAgU25pZmZVU0Igb2JzZXJ2YXRpb25zIChOb3YgMjAwMyk6IFdpdGggdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzOTggZHJpdmVyCisgKiAgIChVMlNQT1JULlZYRCwgIkZpbGUgdmVyc2lvbjogMS4yMVAuMDEwNCBmb3IgV2luOTgvTWUiKSwgdGhpcyByZXF1ZXN0CisgKiAgIG9jY3VycyBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ1Vua25vd24gIzEnIG1lc3NhZ2UgKHNlZSBhYm92ZSkuICBJdCB3YXMKKyAqICAgbm90IG9ic2VydmVkIGF0IGFueSBvdGhlciB0aW1lLiAgSXQgaXMgdW5jbGVhciB3aGF0IG90aGVyIHB1cnBvc2UgKGlmCisgKiAgIGFueSkgdGhpcyBtZXNzYWdlIG1pZ2h0IHNlcnZlLCBidXQgd2l0aG91dCBpdCwgdGhlIFVTQi9SUy0yMzIgYWRhcHRlcgorICogICB3aWxsIG5vdCB3cml0ZSB0byBSUy0yMzIgZGV2aWNlcyB3aGljaCBkbyBub3QgYXNzZXJ0IHRoZSAnQ1RTJyBzaWduYWwuCisgKgorICoKKyAqIEZsb3cgY29udHJvbAorICogLS0tLS0tLS0tLS0tCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogbm8gZmxvdyBjb250cm9sIHNwZWNpZmljIHJlcXVlc3RzIGhhdmUgYmVlbiByZWFsaXplZAorICogIGFwYXJ0IGZyb20gRFRSL1JUUyBzZXR0aW5ncy4gQm90aCBzaWduYWxzIGFyZSBkcm9wcGVkIGZvciBubyBmbG93IGNvbnRyb2wKKyAqICBidXQgYXNzZXJ0ZWQgZm9yIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGZsb3cgY29udHJvbC4KKyAqCisgKgorICogRW5kcG9pbnQgdXNhZ2UKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogdGhlIGJ1bGstb3V0IGVuZHBvaW50IDB4MSBhbmQgaW50ZXJydXB0LWluIGVuZHBvaW50CisgKiAgMHg4MSBpcyB1c2VkIHRvIHRyYW5zbWl0IGFuZCByZWNlaXZlIGNoYXJhY3RlcnMuIFRoZSBzZWNvbmQgaW50ZXJydXB0LWluIAorICogIGVuZHBvaW50IDB4ODMgc2lnbmFscyBleGNlcHRpb25hbCBjb25kaXRpb25zIGxpa2UgbW9kZW0gbGluZSBjaGFuZ2VzIGFuZCAKKyAqICBlcnJvcnMuIFRoZSBmaXJzdCBieXRlIHJldHVybmVkIGlzIHRoZSBNU1IgYW5kIHRoZSBzZWNvbmQgYnl0ZSB0aGUgTFNSLgorICoKKyAqCisgKiBPdGhlciBvYnNlcnZhdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBRdWV1ZWQgYnVsayB0cmFuc2ZlcnMgbGlrZSB1c2VkIGluIHZpc29yLmMgZGlkIG5vdCB3b3JrLiAKKyAqICAKKyAqCisgKiBQcm9wZXJ0aWVzIG9mIHRoZSBVU0IgZGV2aWNlIHVzZWQgKGFzIGZvdW5kIGluIC92YXIvbG9nL21lc3NhZ2VzKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgTWFudWZhY3R1cmVyOiBNQ1QgQ29ycG9yYXRpb24uCisgKiAgUHJvZHVjdDogVVNCLTIzMiBJbnRlcmZhY3QgQ29udHJvbGxlcgorICogIFNlcmlhbE51bWJlcjogVTJTMjIwNTAKKyAqCisgKiAgICBMZW5ndGggICAgICAgICAgICAgID0gMTgKKyAqICAgIERlc2NyaXB0b3JUeXBlICAgICAgPSAwMQorICogICAgVVNCIHZlcnNpb24gICAgICAgICA9IDEuMDAKKyAqICAgIFZlbmRvcjpQcm9kdWN0ICAgICAgPSAwNzExOjAyMTAKKyAqICAgIE1heFBhY2tldFNpemUwICAgICAgPSA4CisgKiAgICBOdW1Db25maWd1cmF0aW9ucyAgID0gMQorICogICAgRGV2aWNlIHZlcnNpb24gICAgICA9IDEuMDIKKyAqICAgIERldmljZSBDbGFzczpTdWJDbGFzczpQcm90b2NvbCA9IDAwOjAwOjAwCisgKiAgICAgIFBlci1pbnRlcmZhY2UgY2xhc3NlcworICogIENvbmZpZ3VyYXRpb246CisgKiAgICBiTGVuZ3RoICAgICAgICAgICAgID0gICAgOQorICogICAgYkRlc2NyaXB0b3JUeXBlICAgICA9ICAgMDIKKyAqICAgIHdUb3RhbExlbmd0aCAgICAgICAgPSAwMDI3CisgKiAgICBiTnVtSW50ZXJmYWNlcyAgICAgID0gICAwMQorICogICAgYkNvbmZpZ3VyYXRpb25WYWx1ZSA9ICAgMDEKKyAqICAgIGlDb25maWd1cmF0aW9uICAgICAgPSAgIDAwCisgKiAgICBibUF0dHJpYnV0ZXMgICAgICAgID0gICBjMAorICogICAgTWF4UG93ZXIgICAgICAgICAgICA9ICAxMDBtQQorICoKKyAqICAgIEludGVyZmFjZTogMAorICogICAgQWx0ZXJuYXRlIFNldHRpbmc6ICAwCisgKiAgICAgIGJMZW5ndGggICAgICAgICAgICAgPSAgICA5CisgKiAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA0CisgKiAgICAgIGJJbnRlcmZhY2VOdW1iZXIgICAgPSAgIDAwCisgKiAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgPSAgIDAwCisgKiAgICAgIGJOdW1FbmRwb2ludHMgICAgICAgPSAgIDAzCisgKiAgICAgIGJJbnRlcmZhY2UgQ2xhc3M6U3ViQ2xhc3M6UHJvdG9jb2wgPSAgIDAwOjAwOjAwCisgKiAgICAgIGlJbnRlcmZhY2UgICAgICAgICAgPSAgIDAwCisgKiAgICAgIEVuZHBvaW50OgorICogCSAgYkxlbmd0aCAgICAgICAgICAgICA9ICAgIDcKKyAqIAkgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA1CisgKiAJICBiRW5kcG9pbnRBZGRyZXNzICAgID0gICA4MSAoaW4pCisgKiAJICBibUF0dHJpYnV0ZXMgICAgICAgID0gICAwMyAoSW50ZXJydXB0KQorICogCSAgd01heFBhY2tldFNpemUgICAgICA9IDAwNDAKKyAqIAkgIGJJbnRlcnZhbCAgICAgICAgICAgPSAgIDAyCisgKiAgICAgIEVuZHBvaW50OgorICogCSAgYkxlbmd0aCAgICAgICAgICAgICA9ICAgIDcKKyAqIAkgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA1CisgKiAJICBiRW5kcG9pbnRBZGRyZXNzICAgID0gICAwMSAob3V0KQorICogCSAgYm1BdHRyaWJ1dGVzICAgICAgICA9ICAgMDIgKEJ1bGspCisgKiAJICB3TWF4UGFja2V0U2l6ZSAgICAgID0gMDA0MAorICogCSAgYkludGVydmFsICAgICAgICAgICA9ICAgMDAKKyAqICAgICAgRW5kcG9pbnQ6CisgKiAJICBiTGVuZ3RoICAgICAgICAgICAgID0gICAgNworICogCSAgYkRlc2NyaXB0b3JUeXBlICAgICA9ICAgMDUKKyAqIAkgIGJFbmRwb2ludEFkZHJlc3MgICAgPSAgIDgzIChpbikKKyAqIAkgIGJtQXR0cmlidXRlcyAgICAgICAgPSAgIDAzIChJbnRlcnJ1cHQpCisgKiAJICB3TWF4UGFja2V0U2l6ZSAgICAgID0gMDAwMgorICogCSAgYkludGVydmFsICAgICAgICAgICA9ICAgMDIKKyAqCisgKgorICogSGFyZHdhcmUgZGV0YWlscyAoYWRkZWQgYnkgTWFydGluIEhhbWlsdG9uLCAyMDAxLzEyLzA2KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGluZm8gd2FzIGdsZWFuZWQgZnJvbSBvcGVuaW5nIGEgQmVsa2luIEY1VTEwOSBEQjkgVVNCIHNlcmlhbAorICogYWRhcHRvciwgd2hpY2ggdHVybnMgb3V0IHRvIHNpbXBseSBiZSBhIHJlLWJhZGdlZCBVMjMyLVA5LiAgV2UKKyAqIGtub3cgdGhpcyBiZWNhdXNlIHRoZXJlIGlzIGEgc3RpY2t5IGxhYmVsIG9uIHRoZSBjaXJjdWl0IGJvYXJkCisgKiB3aGljaCBzYXlzICJVMjMyLVA5IiA7LSkKKyAqIAorICogVGhlIGNpcmN1aXQgYm9hcmQgaW5zaWRlIHRoZSBhZGFwdG9yIGNvbnRhaW5zIGEgUGhpbGlwcyBQRElVU0JEMTIKKyAqIFVTQiBlbmRwb2ludCBjaGlwIGFuZCBhIFBoaWxsaXBzIFA4N0M1MlVCQUEgbWljcm9jb250cm9sbGVyIHdpdGgKKyAqIGVtYmVkZGVkIFVBUlQuICBFeGhhdXN0aXZlIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIGlzIGF2YWlsYWJsZSBhdDoKKyAqCisgKiAgIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL3A4N2M1MnViYWEKKyAqICAgaHR0cDovL3d3dy5zZW1pY29uZHVjdG9ycy5waGlsaXBzLmNvbS9waXAvcGRpdXNiZDEyCisgKgorICogVGhhbmtzIHRvIEp1bGlhbiBIaWdoZmllbGQgZm9yIHRoZSBwb2ludGVyIHRvIHRoZSBQaGlsaXBzIGRhdGFiYXNlLgorICogCisgKi8KKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX1NFUklBTF9NQ1RfVTIzMl9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExY2JhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogVVNCIFp5WEVMIG9tbmkubmV0IExDRCBQTFVTIGRyaXZlcgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogUGxlYXNlIHJlcG9ydCBib3RoIHN1Y2Nlc3NlcyBhbmQgdHJvdWJsZXMgdG8gdGhlIGF1dGhvciBhdCBvbW5pbmV0QGtyb2FoLmNvbQorICogCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgwNC8wOC8yMDAxKSBnYgorICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcy4KKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCisgKgl0aGFuIG9uY2UuCisgKglGaXhlZCBwb3RlbnRpYWwgcmFjZSBpbiBvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2sKKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxlc3NhbmRybyBadW1tbyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBaeVhFTCBvbW5pLm5ldCBMQ0QgUExVUyBEcml2ZXIiCisKKyNkZWZpbmUgWllYRUxfVkVORE9SX0lECQkweDA1ODYKKyNkZWZpbmUgWllYRUxfT01OSU5FVF9JRAkweDEwMDAKKyNkZWZpbmUgQlRfSUdOSVRJT05QUk9fSUQJMHgyMDAwICAvKiBUaGlzIG9uZSBzZWVtcyB0byBiZSBhIHJlLWJyYW5kZWQgWnlYRUwgZGV2aWNlICovCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgIG9tbmluZXRfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG9tbmluZXRfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCAgb21uaW5ldF93cml0ZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIG9tbmluZXRfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgb21uaW5ldF9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFpZWEVMX1ZFTkRPUl9JRCwgWllYRUxfT01OSU5FVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoWllYRUxfVkVORE9SX0lELCBCVF9JR05JVElPTlBST19JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvbW5pbmV0X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkib21uaW5ldCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHp5eGVsX29tbmluZXRfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlp5WEVMIC0gb21uaS5uZXQgbGNkIHBsdXMgdXNiIiwKKwkuc2hvcnRfbmFtZSA9CQkib21uaW5ldCIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTIsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlvbW5pbmV0X29wZW4sCisJLmNsb3NlID0JCW9tbmluZXRfY2xvc2UsCisJLndyaXRlID0JCW9tbmluZXRfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJb21uaW5ldF93cml0ZV9yb29tLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CW9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkuc2h1dGRvd24gPQkJb21uaW5ldF9zaHV0ZG93biwKK307CisKKworLyogVGhlIHByb3RvY29sLgorICoKKyAqIFRoZSBvbW5pLm5ldCBhbHdheXMgZXhjaGFuZ2UgNjQgYnl0ZXMgb2YgZGF0YSB3aXRoIHRoZSBob3N0LiBUaGUgZmlyc3QKKyAqIGZvdXIgYnl0ZXMgYXJlIHRoZSBjb250cm9sIGhlYWRlciwgeW91IGNhbiBzZWUgaXQgaW4gdGhlIGFib3ZlIHN0cnVjdHVyZS4KKyAqCisgKiBvaF9zZXEgaXMgYSBzZXF1ZW5jZSBudW1iZXIuIERvbid0IGtub3cgaWYvaG93IGl0J3MgdXNlZC4KKyAqIG9oX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGJ5dGVzIGluIHRoZSBwYWNrZXQuCisgKiBvaF94eHggQml0LW1hcHBlZCwgcmVsYXRlZCB0byBoYW5kc2hha2luZyBhbmQgc3RhdHVzIGluZm8uCisgKglJIG5vcm1hbGx5IHNldCBpdCB0byAweDAzIGluIHRyYXNtaXR0ZWQgZnJhbWVzLgorICoJNzogQWN0aXZlIHdoZW4gdGhlIFRBIGlzIGluIGEgQ09OTkVDVGVkIHN0YXRlLgorICoJNjogdW5rbm93bgorICoJNTogaGFuZHNoYWtpbmcsIHVua25vd24KKyAqCTQ6IGhhbmRzaGFraW5nLCB1bmtub3duCisgKgkzOiB1bmtub3duLCB1c3VhbGx5IDAKKyAqCTI6IHVua25vd24sIHVzdWFsbHkgMAorICoJMTogaGFuZHNoYWtpbmcsIHVua25vd24sIHVzdWFsbHkgc2V0IHRvIDEgaW4gdHJhc21pdHRlZCBmcmFtZXMKKyAqCTA6IGhhbmRzaGFraW5nLCB1bmtub3duLCB1c3VhbGx5IHNldCB0byAxIGluIHRyYXNtaXR0ZWQgZnJhbWVzCisgKiBvaF9wYWQgUHJvYmFibHkgYSBwYWQgYnl0ZS4KKyAqCisgKiBBZnRlciB0aGUgaGVhZGVyIHlvdSB3aWxsIGZpbmQgZGF0YSBieXRlcyBpZiBvaF9sZW4gd2FzIGdyZWF0ZXIgdGhhbiB6ZXJvLgorICoKKyAqLworCitzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIKK3sKKwlfX3U4CW9oX3NlcTsKKwlfX3U4CW9oX2xlbjsKKwlfX3U4CW9oX3h4eDsKKwlfX3U4CW9oX3BhZDsKK307CisKK3N0cnVjdCBvbW5pbmV0X2RhdGEKK3sKKwlfX3U4CW9kX291dHNlcTsJLy8gU2VxdWVuY2UgbnVtYmVyIGZvciBidWxrX291dCBVUkJzCit9OworCitzdGF0aWMgaW50IG9tbmluZXRfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSp3cG9ydDsKKwlzdHJ1Y3Qgb21uaW5ldF9kYXRhCSpvZDsKKwlpbnQJCQlyZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlvZCA9IGttYWxsb2MoIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSwgR0ZQX0tFUk5FTCApOworCWlmKCAhb2QgKSB7CisJCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19GVU5DVElPTl9fLCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgb2QpOworCXdwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOworCXdwb3J0LT50dHkgPSBwb3J0LT50dHk7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgb21uaW5ldF9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsIAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgCSp3cG9ydDsKKwlzdHJ1Y3Qgb21uaW5ldF9kYXRhIAkqb2Q7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXdwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOworCXVzYl9raWxsX3VyYih3cG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCisJb2QgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKG9kKQorCQlrZnJlZShvZCk7Cit9CisKKworI2RlZmluZSBPTU5JTkVUX0RBVEFPRkZTRVQJMHgwNAorI2RlZmluZSBPTU5JTkVUX0hFQURFUkxFTglzaXplb2Yoc3RydWN0IG9tbmluZXRfaGVhZGVyKQorI2RlZmluZSBPTU5JTkVUX0JVTEtPVVRTSVpFIAkoNjQgLSBPTU5JTkVUX0hFQURFUkxFTikKKworc3RhdGljIHZvaWQgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgCT0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAJCSpkYXRhIAk9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBvbW5pbmV0X2hlYWRlciAJKmhlYWRlciA9IChzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgKikgJmRhdGFbMF07CisKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisvLwlkYmcoIm9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrIik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoZGVidWcpICYmIChoZWFkZXItPm9oX3h4eCAhPSAweDMwKSkgeworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogb21uaW5ldF9yZWFkICVkOiAiLCBoZWFkZXItPm9oX2xlbik7CisJCQlmb3IgKGkgPSAwOyBpIDwgKGhlYWRlci0+b2hfbGVuICsgT01OSU5FVF9IRUFERVJMRU4pOyBpKyspIHsKKwkJCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCQkJfQorCQkJcHJpbnRrICgiXG4iKTsKKwkJfQorCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggJiYgaGVhZGVyLT5vaF9sZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IGhlYWRlci0+b2hfbGVuOyBpKyspIHsKKwkJCSB0dHlfaW5zZXJ0X2ZsaXBfY2hhcihwb3J0LT50dHksIGRhdGFbT01OSU5FVF9EQVRBT0ZGU0VUICsgaV0sIDApOworCSAgCX0KKwkgIAl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT50dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIG9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBvbW5pbmV0X3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAJKnNlcmlhbAk9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqd3BvcnQJPSBzZXJpYWwtPnBvcnRbMV07CisKKwlzdHJ1Y3Qgb21uaW5ldF9kYXRhIAkqb2QgCT0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBvbW5pbmV0X2hlYWRlcgkqaGVhZGVyID0gKHN0cnVjdCBvbW5pbmV0X2hlYWRlciAqKSB3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpbnQJCQlyZXN1bHQ7CisKKy8vCWRiZygib21uaW5ldF93cml0ZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAod3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwljb3VudCA9IChjb3VudCA+IE9NTklORVRfQlVMS09VVFNJWkUpID8gT01OSU5FVF9CVUxLT1VUU0laRSA6IGNvdW50OworCisJbWVtY3B5ICh3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBPTU5JTkVUX0RBVEFPRkZTRVQsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCB3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaGVhZGVyLT5vaF9zZXEgCT0gb2QtPm9kX291dHNlcSsrOworCWhlYWRlci0+b2hfbGVuIAk9IGNvdW50OworCWhlYWRlci0+b2hfeHh4ICA9IDB4MDM7CisJaGVhZGVyLT5vaF9wYWQgCT0gMHgwMDsKKworCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQsIGFsd2F5cyA2NCBieXRlcyAqLworCXdwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA2NDsKKworCXdwb3J0LT53cml0ZV91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHdwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCWVsc2UKKwkJcmVzdWx0ID0gY291bnQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgb21uaW5ldF93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsIAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgCSp3cG9ydCAJPSBzZXJpYWwtPnBvcnRbMV07CisKKwlpbnQgcm9vbSA9IDA7IC8vIERlZmF1bHQ6IG5vIHJvb20KKworCWlmICh3cG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlyb29tID0gd3BvcnQtPmJ1bGtfb3V0X3NpemUgLSBPTU5JTkVUX0hFQURFUkxFTjsKKworLy8JZGJnKCJvbW5pbmV0X3dyaXRlX3Jvb20gcmV0dXJucyAlZCIsIHJvb20pOworCisJcmV0dXJuIChyb29tKTsKK30KKworc3RhdGljIHZvaWQgb21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworLyoJc3RydWN0IG9tbmluZXRfaGVhZGVyCSpoZWFkZXIgPSAoc3RydWN0IG9tbmluZXRfaGVhZGVyICAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqcG9ydCAgID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCisvLwlkYmcoIm9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCAlMHhcbiIsIHBvcnQpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7CisKKy8vCWRiZygib21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrLCB0dHkgJTB4XG4iLCB0dHkpOworfQorCisKK3N0YXRpYyB2b2lkIG9tbmluZXRfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG9tbmluZXRfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb21uaW5ldF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmenl4ZWxfb21uaW5ldF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgb21uaW5ldF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmb21uaW5ldF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChvbW5pbmV0X2luaXQpOworbW9kdWxlX2V4aXQob21uaW5ldF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjhkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTAsMCArMSwxMjAwIEBACisvKgorICogUHJvbGlmaWMgUEwyMzAzIFVTQiB0byBzZXJpYWwgYWRhcHRvciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzIElCTSBDb3JwLgorICoKKyAqIE9yaWdpbmFsIGRyaXZlciBmb3IgMi4yLnggYnkgYW5vbnltb3VzCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiAyMDAyX01hcl8yNiBna2gKKyAqCWFsbG93ZWQgZHJpdmVyIHRvIHdvcmsgcHJvcGVybHkgaWYgdGhlcmUgaXMgbm8gdHR5IGFzc2lnbmVkIHRvIGEgcG9ydAorICoJKHRoaXMgaGFwcGVucyBmb3Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCisgKgorICogMjAwMV9PY3RfMDYgZ2toCisgKglBZGRlZCBSVFMgYW5kIERUUiBsaW5lIGNvbnRyb2wuICBUaGFua3MgdG8gam9lQGJuZGxnLmRlIGZvciBwYXJ0cyBvZiBpdC4KKyAqCisgKiAyMDAxX1NlcF8xOSBna2gKKyAqCUFkZGVkIGJyZWFrIHN1cHBvcnQuCisgKgorICogMjAwMV9BdWdfMzAgZ2toCisgKglmaXhlZCBvb3BzIGluIHdyaXRlX2J1bGtfY2FsbGJhY2suCisgKgorICogMjAwMV9BdWdfMjggZ2toCisgKglyZXdvcmtlZCBidWZmZXIgbG9naWMgdG8gYmUgbGlrZSBvdGhlciB1c2Itc2VyaWFsIGRyaXZlcnMuICBIb3BlZnVsbHkKKyAqCXJlbW92aW5nIHNvbWUgcmVwb3J0ZWQgcHJvYmxlbXMuCisgKgorICogMjAwMV9KdW5fMDYgZ2toCisgKglmaW5pc2hlZCBwb3J0aW5nIHRvIDIuNCBmb3JtYXQuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJwbDIzMDMuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTIiCisjZGVmaW5lIERSSVZFUl9ERVNDICJQcm9saWZpYyBQTDIzMDMgVVNCIHRvIHNlcmlhbCBhZGFwdG9yIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworI2RlZmluZSBQTDIzMDNfQ0xPU0lOR19XQUlUCSgzMCpIWikKKworI2RlZmluZSBQTDIzMDNfQlVGX1NJWkUJCTEwMjQKKyNkZWZpbmUgUEwyMzAzX1RNUF9CVUZfU0laRQkxMDI0CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKHBsMjMwM190bXBfYnVmX3NlbSk7CisKK3N0cnVjdCBwbDIzMDNfYnVmIHsKKwl1bnNpZ25lZCBpbnQJYnVmX3NpemU7CisJY2hhcgkJKmJ1Zl9idWY7CisJY2hhcgkJKmJ1Zl9nZXQ7CisJY2hhcgkJKmJ1Zl9wdXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9SU0FRMikgfSwKKwl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTMpIH0sCisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX1BIQVJPUykgfSwKKwl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFURU5fVkVORE9SX0lELCBBVEVOX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFURU5fVkVORE9SX0lEMiwgQVRFTl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShFTENPTV9WRU5ET1JfSUQsIEVMQ09NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEVMQ09NX1ZFTkRPUl9JRCwgRUxDT01fUFJPRFVDVF9JRF9VQ1NHVCkgfSwKKwl7IFVTQl9ERVZJQ0UoSVRFR05PX1ZFTkRPUl9JRCwgSVRFR05PX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE1BNjIwX1ZFTkRPUl9JRCwgTUE2MjBfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUkFUT0NfVkVORE9SX0lELCBSQVRPQ19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUUklQUF9WRU5ET1JfSUQsIFRSSVBQX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFJBRElPU0hBQ0tfVkVORE9SX0lELCBSQURJT1NIQUNLX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKERDVTEwX1ZFTkRPUl9JRCwgRENVMTBfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lURUNPTV9WRU5ET1JfSUQsIFNJVEVDT01fUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUxDQVRFTF9WRU5ET1JfSUQsIEFMQ0FURUxfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIFNJRU1FTlNfUFJPRFVDVF9JRF9YNjUpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwbDIzMDNfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJwbDIzMDMiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisjZGVmaW5lIFNFVF9MSU5FX1JFUVVFU1RfVFlQRQkJMHgyMQorI2RlZmluZSBTRVRfTElORV9SRVFVRVNUCQkweDIwCisKKyNkZWZpbmUgU0VUX0NPTlRST0xfUkVRVUVTVF9UWVBFCTB4MjEKKyNkZWZpbmUgU0VUX0NPTlRST0xfUkVRVUVTVAkJMHgyMgorI2RlZmluZSBDT05UUk9MX0RUUgkJCTB4MDEKKyNkZWZpbmUgQ09OVFJPTF9SVFMJCQkweDAyCisKKyNkZWZpbmUgQlJFQUtfUkVRVUVTVF9UWVBFCQkweDIxCisjZGVmaW5lIEJSRUFLX1JFUVVFU1QJCQkweDIzCQorI2RlZmluZSBCUkVBS19PTgkJCTB4ZmZmZgorI2RlZmluZSBCUkVBS19PRkYJCQkweDAwMDAKKworI2RlZmluZSBHRVRfTElORV9SRVFVRVNUX1RZUEUJCTB4YTEKKyNkZWZpbmUgR0VUX0xJTkVfUkVRVUVTVAkJMHgyMQorCisjZGVmaW5lIFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUJMHg0MAorI2RlZmluZSBWRU5ET1JfV1JJVEVfUkVRVUVTVAkJMHgwMQorCisjZGVmaW5lIFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRQkweGMwCisjZGVmaW5lIFZFTkRPUl9SRUFEX1JFUVVFU1QJCTB4MDEKKworI2RlZmluZSBVQVJUX1NUQVRFCQkJMHgwOAorI2RlZmluZSBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLCTB4NzQKKyNkZWZpbmUgVUFSVF9EQ0QJCQkweDAxCisjZGVmaW5lIFVBUlRfRFNSCQkJMHgwMgorI2RlZmluZSBVQVJUX0JSRUFLX0VSUk9SCQkweDA0CisjZGVmaW5lIFVBUlRfUklORwkJCTB4MDgKKyNkZWZpbmUgVUFSVF9GUkFNRV9FUlJPUgkJMHgxMAorI2RlZmluZSBVQVJUX1BBUklUWV9FUlJPUgkJMHgyMAorI2RlZmluZSBVQVJUX09WRVJSVU5fRVJST1IJCTB4NDAKKyNkZWZpbmUgVUFSVF9DVFMJCQkweDgwCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgUEwyMzAzIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgcGwyMzAzX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCB0ZXJtaW9zICpvbGQpOworc3RhdGljIGludCBwbDIzMDNfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHBsMjMwM193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIHBsMjMwM19zZW5kIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IHBsMjMwM19jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBwbDIzMDNfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgcGwyMzAzX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHBsMjMwM190aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgcGwyMzAzX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgcGwyMzAzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGwyMzAzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2ZyZWUoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19idWZfY2xlYXIoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYik7CitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfc3BhY2VfYXZhaWwoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9wdXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9nZXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKKworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIFBMMjMwMyBTSU8gc2VyaWFsIGNvbnZlcnRlciAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHBsMjMwM19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiUEwtMjMwMyIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlwbDIzMDNfb3BlbiwKKwkuY2xvc2UgPQkJcGwyMzAzX2Nsb3NlLAorCS53cml0ZSA9CQlwbDIzMDNfd3JpdGUsCisJLmlvY3RsID0JCXBsMjMwM19pb2N0bCwKKwkuYnJlYWtfY3RsID0JCXBsMjMwM19icmVha19jdGwsCisJLnNldF90ZXJtaW9zID0JCXBsMjMwM19zZXRfdGVybWlvcywKKwkudGlvY21nZXQgPQkJcGwyMzAzX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlwbDIzMDNfdGlvY21zZXQsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CXBsMjMwM19yZWFkX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrID0JcGwyMzAzX3JlYWRfaW50X2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JcGwyMzAzX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX3Jvb20gPQkJcGwyMzAzX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CXBsMjMwM19jaGFyc19pbl9idWZmZXIsCisJLmF0dGFjaCA9CQlwbDIzMDNfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJcGwyMzAzX3NodXRkb3duLAorfTsKKworZW51bSBwbDIzMDNfdHlwZSB7CisJdHlwZV8wLAkJLyogZG9uJ3Qga25vdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR5cGUgMCBhbmQgKi8KKwl0eXBlXzEsCQkvKiB0eXBlIDEsIHVudGlsIHNvbWVvbmUgZnJvbSBwcm9saWZpYyB0ZWxscyB1cy4uLiAqLworCUhYLAkJLyogSFggdmVyc2lvbiBvZiB0aGUgcGwyMzAzIGNoaXAgKi8KK307CisKK3N0cnVjdCBwbDIzMDNfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBwbDIzMDNfYnVmICpidWY7CisJaW50IHdyaXRlX3VyYl9pbl91c2U7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7CisJdTggbGluZV9jb250cm9sOworCXU4IGxpbmVfc3RhdHVzOworCXU4IHRlcm1pb3NfaW5pdGlhbGl6ZWQ7CisJZW51bSBwbDIzMDNfdHlwZSB0eXBlOworfTsKKworCitzdGF0aWMgaW50IHBsMjMwM19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdjsKKwllbnVtIHBsMjMwM190eXBlIHR5cGUgPSB0eXBlXzA7CisJaW50IGk7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IDB4MDIpCisJCXR5cGUgPSB0eXBlXzA7CisJZWxzZSBpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwID09IDB4NDApCisJCXR5cGUgPSBIWDsKKwllbHNlIGlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gMHgwMCkKKwkJdHlwZSA9IHR5cGVfMTsKKwllbHNlIGlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gMHhGRikKKwkJdHlwZSA9IHR5cGVfMTsKKwlkYmcoImRldmljZSB0eXBlOiAlZCIsIHR5cGUpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcHJpdiA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHBsMjMwM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdikKKwkJCWdvdG8gY2xlYW51cDsKKwkJbWVtc2V0IChwcml2LCAweDAwLCBzaXplb2YgKHN0cnVjdCBwbDIzMDNfcHJpdmF0ZSkpOworCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJCXByaXYtPmJ1ZiA9IHBsMjMwM19idWZfYWxsb2MoUEwyMzAzX0JVRl9TSVpFKTsKKwkJaWYgKHByaXYtPmJ1ZiA9PSBOVUxMKSB7CisJCQlrZnJlZShwcml2KTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCXByaXYtPnR5cGUgPSB0eXBlOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBwcml2KTsKKwl9CisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJZm9yICgtLWk7IGk+PTA7IC0taSkgeworCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCXBsMjMwM19idWZfZnJlZShwcml2LT5idWYpOworCQlrZnJlZShwcml2KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IHNldF9jb250cm9sX2xpbmVzIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCB2YWx1ZSkKK3sKKwlpbnQgcmV0dmFsOworCQorCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAoZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldiwgMCksCisJCQkJICBTRVRfQ09OVFJPTF9SRVFVRVNULCBTRVRfQ09OVFJPTF9SRVFVRVNUX1RZUEUsCisJCQkJICB2YWx1ZSwgMCwgTlVMTCwgMCwgMTAwKTsKKwlkYmcoIiVzIC0gdmFsdWUgPSAlZCwgcmV0dmFsID0gJWQiLCBfX0ZVTkNUSU9OX18sIHZhbHVlLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIGNvdW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb3VudCA9IHBsMjMwM19idWZfcHV0KHByaXYtPmJ1ZiwgYnVmLCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcGwyMzAzX3NlbmQocG9ydCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHBsMjMwM19zZW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGNvdW50LCByZXN1bHQ7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+d3JpdGVfdXJiX2luX3VzZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljb3VudCA9IHBsMjMwM19idWZfZ2V0KHByaXYtPmJ1ZiwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPmJ1bGtfb3V0X3NpemUpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OworCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCS8vIFRPRE86IHJlc2NoZWR1bGUgcGwyMzAzX3NlbmQKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworc3RhdGljIGludCBwbDIzMDNfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyb29tID0gcGwyMzAzX2J1Zl9zcGFjZV9hdmFpbChwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KKworc3RhdGljIGludCBwbDIzMDNfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBjaGFycyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljaGFycyA9IHBsMjMwM19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCitzdGF0aWMgdm9pZCBwbDIzMDNfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjZmxhZzsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IGJhdWQ7CisJaW50IGk7CisJdTggY29udHJvbDsKKworCWRiZygiJXMgLSAgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgeworCQkqKHBvcnQtPnR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCSAgICBkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkgICAgcmV0dXJuOworCQl9CisJfQorCisJYnVmID0ga21hbGxvYyAoNywgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQgKGJ1ZiwgMHgwMCwgMHgwNyk7CisJCisJaSA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBHRVRfTElORV9SRVFVRVNULCBHRVRfTElORV9SRVFVRVNUX1RZUEUsCisJCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcgKCIweGExOjB4MjE6MDowICAlZCAtICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgaSwKKwkgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CisKKworCWlmIChjZmxhZyAmIENTSVpFKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQkJY2FzZSBDUzU6CWJ1Zls2XSA9IDU7CWJyZWFrOworCQkJY2FzZSBDUzY6CWJ1Zls2XSA9IDY7CWJyZWFrOworCQkJY2FzZSBDUzc6CWJ1Zls2XSA9IDc7CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCWNhc2UgQ1M4OglidWZbNl0gPSA4OwlicmVhazsKKwkJfQorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJ1Zls2XSk7CisJfQorCisJYmF1ZCA9IDA7CisJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCWNhc2UgQjA6CWJhdWQgPSAwOwlicmVhazsKKwkJY2FzZSBCNzU6CWJhdWQgPSA3NTsJYnJlYWs7CisJCWNhc2UgQjE1MDoJYmF1ZCA9IDE1MDsJYnJlYWs7CisJCWNhc2UgQjMwMDoJYmF1ZCA9IDMwMDsJYnJlYWs7CisJCWNhc2UgQjYwMDoJYmF1ZCA9IDYwMDsJYnJlYWs7CisJCWNhc2UgQjEyMDA6CWJhdWQgPSAxMjAwOwlicmVhazsKKwkJY2FzZSBCMTgwMDoJYmF1ZCA9IDE4MDA7CWJyZWFrOworCQljYXNlIEIyNDAwOgliYXVkID0gMjQwMDsJYnJlYWs7CisJCWNhc2UgQjQ4MDA6CWJhdWQgPSA0ODAwOwlicmVhazsKKwkJY2FzZSBCOTYwMDoJYmF1ZCA9IDk2MDA7CWJyZWFrOworCQljYXNlIEIxOTIwMDoJYmF1ZCA9IDE5MjAwOwlicmVhazsKKwkJY2FzZSBCMzg0MDA6CWJhdWQgPSAzODQwMDsJYnJlYWs7CisJCWNhc2UgQjU3NjAwOgliYXVkID0gNTc2MDA7CWJyZWFrOworCQljYXNlIEIxMTUyMDA6CWJhdWQgPSAxMTUyMDA7CWJyZWFrOworCQljYXNlIEIyMzA0MDA6CWJhdWQgPSAyMzA0MDA7CWJyZWFrOworCQljYXNlIEI0NjA4MDA6CWJhdWQgPSA0NjA4MDA7CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAicGwyMzAzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBiYXVkcmF0ZSByZXF1ZXN0ZWQgKGZpeCBpdClcbiIpOworCQkJYnJlYWs7CisJfQorCWRiZygiJXMgLSBiYXVkID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWQpOworCWlmIChiYXVkKSB7CisJCWJ1ZlswXSA9IGJhdWQgJiAweGZmOworCQlidWZbMV0gPSAoYmF1ZCA+PiA4KSAmIDB4ZmY7CisJCWJ1ZlsyXSA9IChiYXVkID4+IDE2KSAmIDB4ZmY7CisJCWJ1ZlszXSA9IChiYXVkID4+IDI0KSAmIDB4ZmY7CisJfQorCisJLyogRm9yIHJlZmVyZW5jZSBidWZbNF09MCBpcyAxIHN0b3AgYml0cyAqLworCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTEgaXMgMS41IHN0b3AgYml0cyAqLworCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTIgaXMgMiBzdG9wIGJpdHMgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJYnVmWzRdID0gMjsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZSB7CisJCWJ1Zls0XSA9IDA7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09MCBpcyBub25lIHBhcml0eSAqLworCQkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls1XT0xIGlzIG9kZCBwYXJpdHkgKi8KKwkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09MiBpcyBldmVuIHBhcml0eSAqLworCQkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls1XT0zIGlzIG1hcmsgcGFyaXR5ICovCisJCS8qIEZvciByZWZlcmVuY2UgYnVmWzVdPTQgaXMgc3BhY2UgcGFyaXR5ICovCisJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJYnVmWzVdID0gMTsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJYnVmWzVdID0gMjsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCX0gZWxzZSB7CisJCWJ1Zls1XSA9IDA7CisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIFNFVF9MSU5FX1JFUVVFU1QsIFNFVF9MSU5FX1JFUVVFU1RfVFlQRSwgCisJCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcgKCIweDIxOjB4MjA6MDowICAlZCIsIGkpOworCisJLyogY2hhbmdlIGNvbnRyb2wgbGluZXMgaWYgd2UgYXJlIHN3aXRjaGluZyB0byBvciBmcm9tIEIwICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sID0gcHJpdi0+bGluZV9jb250cm9sOworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjApCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+KENPTlRST0xfRFRSIHwgQ09OVFJPTF9SVFMpOworCWVsc2UKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IChDT05UUk9MX0RUUiB8IENPTlRST0xfUlRTKTsKKwlpZiAoY29udHJvbCAhPSBwcml2LT5saW5lX2NvbnRyb2wpIHsKKwkJY29udHJvbCA9IHByaXYtPmxpbmVfY29udHJvbDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzZXRfY29udHJvbF9saW5lcyhzZXJpYWwtPmRldiwgY29udHJvbCk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwkKKwlidWZbMF0gPSBidWZbMV0gPSBidWZbMl0gPSBidWZbM10gPSBidWZbNF0gPSBidWZbNV0gPSBidWZbNl0gPSAwOworCisJaSA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBHRVRfTElORV9SRVFVRVNULCBHRVRfTElORV9SRVFVRVNUX1RZUEUsCisJCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcgKCIweGExOjB4MjE6MDowICAlZCAtICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgaSwKKwkgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCV9fdTE2IGluZGV4OworCQlpZiAocHJpdi0+dHlwZSA9PSBIWCkKKwkJCWluZGV4ID0gMHg2MTsKKwkJZWxzZQorCQkJaW5kZXggPSAweDQxOworCQlpID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCAKKwkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgICAgVkVORE9SX1dSSVRFX1JFUVVFU1QsCisJCQkJICAgIFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsCisJCQkJICAgIDB4MCwgaW5kZXgsIE5VTEwsIDAsIDEwMCk7CisJCWRiZyAoIjB4NDA6MHgxOjB4MDoweCV4ICAlZCIsIGluZGV4LCBpKTsKKwl9CisKKwlrZnJlZSAoYnVmKTsKK30KKworc3RhdGljIGludCBwbDIzMDNfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJYnVmID0ga21hbGxvYygxMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1Zj09TlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKyNkZWZpbmUgRklTSChhLGIsYyxkKQkJCQkJCQkJXAorCXJlc3VsdD11c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwwKSwJXAorCQkJICAgICAgIGIsIGEsIGMsIGQsIGJ1ZiwgMSwgMTAwKTsJCQlcCisJZGJnKCIweCV4OjB4JXg6MHgleDoweCV4ICAlZCAtICV4IixhLGIsYyxkLHJlc3VsdCxidWZbMF0pOworCisjZGVmaW5lIFNPVVAoYSxiLGMsZCkJCQkJCQkJCVwKKwlyZXN1bHQ9dXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsMCksCVwKKwkJCSAgICAgICBiLCBhLCBjLCBkLCBOVUxMLCAwLCAxMDApOwkJCVwKKwlkYmcoIjB4JXg6MHgleDoweCV4OjB4JXggICVkIixhLGIsYyxkLHJlc3VsdCk7CisKKwlGSVNIIChWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUsIFZFTkRPUl9SRUFEX1JFUVVFU1QsIDB4ODQ4NCwgMCk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDB4MDQwNCwgMCk7CisJRklTSCAoVkVORE9SX1JFQURfUkVRVUVTVF9UWVBFLCBWRU5ET1JfUkVBRF9SRVFVRVNULCAweDg0ODQsIDApOworCUZJU0ggKFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRSwgVkVORE9SX1JFQURfUkVRVUVTVCwgMHg4MzgzLCAwKTsKKwlGSVNIIChWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUsIFZFTkRPUl9SRUFEX1JFUVVFU1QsIDB4ODQ4NCwgMCk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDB4MDQwNCwgMSk7CisJRklTSCAoVkVORE9SX1JFQURfUkVRVUVTVF9UWVBFLCBWRU5ET1JfUkVBRF9SRVFVRVNULCAweDg0ODQsIDApOworCUZJU0ggKFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRSwgVkVORE9SX1JFQURfUkVRVUVTVCwgMHg4MzgzLCAwKTsKKwlTT1VQIChWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFLCBWRU5ET1JfV1JJVEVfUkVRVUVTVCwgMCwgMSk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDEsIDApOworCisJaWYgKHByaXYtPnR5cGUgPT0gSFgpIHsKKwkJLyogSFggY2hpcCAqLworCQlTT1VQIChWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFLCBWRU5ET1JfV1JJVEVfUkVRVUVTVCwgMiwgMHg0NCk7CisJCS8qIHJlc2V0IHVwc3RyZWFtIGRhdGEgcGlwZXMgKi8KKyAgICAgICAgICAJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDgsIDApOworICAgICAgICAJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDksIDApOworCX0gZWxzZSB7CisJCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCAyLCAweDI0KTsKKwl9CisKKwlrZnJlZShidWYpOworCisJLyogU2V0dXAgdGVybWlvcyAqLworCWlmIChwb3J0LT50dHkpIHsKKwkJcGwyMzAzX3NldF90ZXJtaW9zIChwb3J0LCAmdG1wX3Rlcm1pb3MpOworCX0KKworCS8vRklYTUU6IG5lZWQgdG8gYXNzZXJ0IFJUUyBhbmQgRFRSIGlmIENSVFNDVFMgb2ZmCisKKwlkYmcoIiVzIC0gc3VibWl0dGluZyByZWFkIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlwbDIzMDNfY2xvc2UgKHBvcnQsIE5VTEwpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlkYmcoIiVzIC0gc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19GVU5DVElPTl9fKTsKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXBsMjMwM19jbG9zZSAocG9ydCwgTlVMTCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBwbDIzMDNfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjX2NmbGFnOworCWludCBicHM7CisJbG9uZyB0aW1lb3V0OworCXdhaXRfcXVldWVfdCB3YWl0OwkJCQkJCVwKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBmcm9tIHRoZSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXRpbWVvdXQgPSBQTDIzMDNfQ0xPU0lOR19XQUlUOworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAocGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHByaXYtPmJ1ZikgPT0gMAorCQl8fCB0aW1lb3V0ID09IDAgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkJfHwgIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKQkvKiBkaXNjb25uZWN0ICovCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJLyogY2xlYXIgb3V0IGFueSByZW1haW5pbmcgZGF0YSBpbiB0aGUgYnVmZmVyICovCisJcGwyMzAzX2J1Zl9jbGVhcihwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGNoYXJhY3RlcnMgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCisJLyogKHRoaXMgaXMgbG9uZyBlbm91Z2ggZm9yIHRoZSBlbnRpcmUgMjU2IGJ5dGUgKi8KKwkvKiBwbDIzMDMgaGFyZHdhcmUgYnVmZmVyIHRvIGRyYWluIHdpdGggbm8gZmxvdyAqLworCS8qIGNvbnRyb2wgZm9yIGRhdGEgcmF0ZXMgb2YgMTIwMCBicHMgb3IgbW9yZSwgKi8KKwkvKiBmb3IgbG93ZXIgcmF0ZXMgd2Ugc2hvdWxkIHJlYWxseSBrbm93IGhvdyBtdWNoICovCisJLyogZGF0YSBpcyBpbiB0aGUgYnVmZmVyIHRvIGNvbXB1dGUgYSBkZWxheSAqLworCS8qIHRoYXQgaXMgbm90IHVubmVjZXNzYXJpbHkgbG9uZykgKi8KKwlicHMgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWlmIChicHMgPiAxMjAwKQorCQl0aW1lb3V0ID0gbWF4KChIWioyNTYwKS9icHMsSFovMTApOworCWVsc2UKKwkJdGltZW91dCA9IDIqSFo7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwlkYmcoIiVzIC0gc2h1dHRpbmcgZG93biB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCWlmIChwb3J0LT50dHkpIHsKKwkJY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgeworCQkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJc2V0X2NvbnRyb2xfbGluZXMgKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwbDIzMDNfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBjb250cm9sOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENPTlRST0xfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q09OVFJPTF9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfRFRSOworCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzZXRfY29udHJvbF9saW5lcyAocG9ydC0+c2VyaWFsLT5kZXYsIGNvbnRyb2wpOworfQorCitzdGF0aWMgaW50IHBsMjMwM190aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1jcjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlkYmcoIiVzICglZCkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltY3IgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJlc3VsdCA9ICgobWNyICYgQ09OVFJPTF9EVFIpCQk/IFRJT0NNX0RUUiA6IDApCisJCSAgfCAoKG1jciAmIENPTlRST0xfUlRTKQk/IFRJT0NNX1JUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIFVBUlRfQ1RTKQk/IFRJT0NNX0NUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIFVBUlRfRFNSKQk/IFRJT0NNX0RTUiA6IDApCisJCSAgfCAoKHN0YXR1cyAmIFVBUlRfUklORykJPyBUSU9DTV9SSSAgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBVQVJUX0RDRCkJPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSByZXN1bHQgPSAleCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9tb2RlbV9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBhcmcpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHByZXZzdGF0dXM7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByZXZzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKDEpIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQorCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQorCQljaGFuZ2VkPXByZXZzdGF0dXNec3RhdHVzOworCQkKKwkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY2hhbmdlZCAmIFVBUlRfUklORykpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNoYW5nZWQgJiBVQVJUX0RTUikpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNoYW5nZWQgJiBVQVJUX0RDRCkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNoYW5nZWQgJiBVQVJUX0NUUykpICkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJldnN0YXR1cyA9IHN0YXR1czsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsMjMwM19pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ01JV0FJVDoKKwkJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiB3YWl0X21vZGVtX2luZm8ocG9ydCwgYXJnKTsKKworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyBub3Qgc3VwcG9ydGVkID0gMHglMDR4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIHZvaWQgcGwyMzAzX2JyZWFrX2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdTE2IHN0YXRlOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChicmVha19zdGF0ZSA9PSAwKQorCQlzdGF0ZSA9IEJSRUFLX09GRjsKKwllbHNlCisJCXN0YXRlID0gQlJFQUtfT047CisJZGJnKCIlcyAtIHR1cm5pbmcgYnJlYWsgJXMiLCBfX0ZVTkNUSU9OX18sIHN0YXRlPT1CUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCisJCQkJICBCUkVBS19SRVFVRVNULCBCUkVBS19SRVFVRVNUX1RZUEUsIHN0YXRlLCAKKwkJCQkgIDAsIE5VTEwsIDAsIDEwMCk7CisJaWYgKHJlc3VsdCkKKwkJZGJnKCIlcyAtIGVycm9yIHNlbmRpbmcgYnJlYWsgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworCitzdGF0aWMgdm9pZCBwbDIzMDNfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWlmIChwcml2KSB7CisJCQlwbDIzMDNfYnVmX2ZyZWUocHJpdi0+YnVmKTsKKwkJCWtmcmVlKHByaXYpOworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwl9CQkKK30KKworCitzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKwl1OCB1YXJ0X3N0YXRlOworCisJZGJnKCIlcyAoJWQpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBVQVJUX1NUQVRFKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCisJdWFydF9zdGF0ZSA9IGRhdGFbVUFSVF9TVEFURV07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl1YXJ0X3N0YXRlIHw9IChwcml2LT5saW5lX3N0YXR1cyAmIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0spOworCXByaXYtPmxpbmVfc3RhdHVzID0gdWFydF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQorZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgcGwyMzAzX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCByZXN1bHQ7CisJdTggc3RhdHVzOworCWNoYXIgdHR5X2ZsYWc7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gdXJiLT5zdGF0dXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCwgZXhpdGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7CisJCQkvKiBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlIHRoZSByZWFkICovCisJCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJCXVyYi0+c3RhdHVzID0gMDsKKwkJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJcmV0dXJuOworCQl9CisJCWRiZygiJXMgLSB1bmFibGUgdG8gaGFuZGxlIHRoZSBlcnJvciwgZXhpdGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkvKiBnZXQgdHR5X2ZsYWcgZnJvbSBzdGF0dXMgKi8KKwl0dHlfZmxhZyA9IFRUWV9OT1JNQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCXByaXYtPmxpbmVfc3RhdHVzICY9IH5VQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisKKwkvKiBicmVhayB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcGFyaXR5LCAqLworCS8qIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmcmFtaW5nIGVycm9ycyAqLworCWlmIChzdGF0dXMgJiBVQVJUX0JSRUFLX0VSUk9SICkKKwkJdHR5X2ZsYWcgPSBUVFlfQlJFQUs7CisJZWxzZSBpZiAoc3RhdHVzICYgVUFSVF9QQVJJVFlfRVJST1IpCisJCXR0eV9mbGFnID0gVFRZX1BBUklUWTsKKwllbHNlIGlmIChzdGF0dXMgJiBVQVJUX0ZSQU1FX0VSUk9SKQorCQl0dHlfZmxhZyA9IFRUWV9GUkFNRTsKKwlkYmcoIiVzIC0gdHR5X2ZsYWcgPSAlZCIsIF9fRlVOQ1RJT05fXywgdHR5X2ZsYWcpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KKwkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkgeworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyICh0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCAodHR5KTsKKwl9CisKKwkvKiBTY2hlZHVsZSB0aGUgbmV4dCByZWFkIF9pZl8gd2UgYXJlIHN0aWxsIG9wZW4gKi8KKwlpZiAocG9ydC0+b3Blbl9jb3VudCkgeworCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm47Cit9CisKKworCitzdGF0aWMgdm9pZCBwbDIzMDNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KKwkJZGJnKCIlcyAtIE92ZXJmbG93IGluIHdyaXRlIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDE7CisJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWVsc2UKKwkJCXJldHVybjsKKwl9CisKKwlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKworCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKwlwbDIzMDNfc2VuZChwb3J0KTsKK30KKworCisvKgorICogcGwyMzAzX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHN0cnVjdCBwbDIzMDNfYnVmICpwbDIzMDNfYnVmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKQoreworCisJc3RydWN0IHBsMjMwM19idWYgKnBiOworCisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXBiID0gKHN0cnVjdCBwbDIzMDNfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHBsMjMwM19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYi0+YnVmX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBiLT5idWZfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUocGIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwYi0+YnVmX3NpemUgPSBzaXplOworCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9wdXQgPSBwYi0+YnVmX2J1ZjsKKworCXJldHVybiBwYjsKKworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworCitzdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2ZyZWUoc3RydWN0IHBsMjMwM19idWYgKnBiKQoreworCWlmIChwYiAhPSBOVUxMKSB7CisJCWlmIChwYi0+YnVmX2J1ZiAhPSBOVUxMKQorCQkJa2ZyZWUocGItPmJ1Zl9idWYpOworCQlrZnJlZShwYik7CisJfQorfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KKworc3RhdGljIHZvaWQgcGwyMzAzX2J1Zl9jbGVhcihzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIpCit7CisJaWYgKHBiICE9IE5VTEwpCisJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9wdXQ7CisJCS8qIGVxdWl2YWxlbnQgdG8gYSBnZXQgb2YgYWxsIGRhdGEgYXZhaWxhYmxlICovCit9CisKKworLyoKKyAqIHBsMjMwM19idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKK3sKKwlpZiAocGIgIT0gTlVMTCkKKwkJcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9wdXQgLSBwYi0+YnVmX2dldCkgJSBwYi0+YnVmX3NpemUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHBsMjMwM19idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKK3sKKwlpZiAocGIgIT0gTlVMTCkKKwkJcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9nZXQgLSBwYi0+YnVmX3B1dCAtIDEpICUgcGItPmJ1Zl9zaXplKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfcHV0KHN0cnVjdCBwbDIzMDNfYnVmICpwYiwgY29uc3QgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChwYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHBiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gcGItPmJ1Zl9idWYgKyBwYi0+YnVmX3NpemUgLSBwYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShwYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJcGItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKKworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX2dldChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIsIGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpCit7CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBwbDIzMDNfYnVmX2RhdGFfYXZhaWwocGIpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBwYi0+YnVmX2J1ZiArIHBiLT5idWZfc2l6ZSAtIHBiLT5idWZfZ2V0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoYnVmLCBwYi0+YnVmX2dldCwgbGVuKTsKKwkJbWVtY3B5KGJ1ZitsZW4sIHBiLT5idWZfYnVmLCBjb3VudCAtIGxlbik7CisJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLCBwYi0+YnVmX2dldCwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQlwYi0+YnVmX2dldCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworCit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMjMwM19pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbDIzMDNfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJnBsMjMwM19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnBsMjMwM19kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KHBsMjMwM19pbml0KTsKK21vZHVsZV9leGl0KHBsMjMwM19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWI0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFByb2xpZmljIFBMMjMwMyBVU0IgdG8gc2VyaWFsIGFkYXB0b3IgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICovCisjZGVmaW5lIFBMMjMwM19WRU5ET1JfSUQJMHgwNjdiCisjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lECTB4MjMwMworI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9SU0FRMgkJMHgwNGJiCisjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX1BIQVJPUwkweGFhYTAKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTMJCTB4YWFhMgorCisjZGVmaW5lIEFURU5fVkVORE9SX0lECQkweDA1NTcKKyNkZWZpbmUgQVRFTl9WRU5ET1JfSUQyCQkweDA1NDcKKyNkZWZpbmUgQVRFTl9QUk9EVUNUX0lECQkweDIwMDgKKworI2RlZmluZSBJT0RBVEFfVkVORE9SX0lECTB4MDRiYgorI2RlZmluZSBJT0RBVEFfUFJPRFVDVF9JRAkweDBhMDMKKworI2RlZmluZSBFTENPTV9WRU5ET1JfSUQJCTB4MDU2ZQorI2RlZmluZSBFTENPTV9QUk9EVUNUX0lECTB4NTAwMworI2RlZmluZSBFTENPTV9QUk9EVUNUX0lEX1VDU0dUCTB4NTAwNAorCisjZGVmaW5lIElURUdOT19WRU5ET1JfSUQJMHgwZWJhCisjZGVmaW5lIElURUdOT19QUk9EVUNUX0lECTB4MTA4MAorCisjZGVmaW5lIE1BNjIwX1ZFTkRPUl9JRAkJMHgwZGY3CisjZGVmaW5lIE1BNjIwX1BST0RVQ1RfSUQJMHgwNjIwCisKKyNkZWZpbmUgUkFUT0NfVkVORE9SX0lECQkweDA1ODQKKyNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRAkweGIwMDAKKworI2RlZmluZSBUUklQUF9WRU5ET1JfSUQJCTB4MjQ3OAorI2RlZmluZSBUUklQUF9QUk9EVUNUX0lECTB4MjAwOAorCisjZGVmaW5lIFJBRElPU0hBQ0tfVkVORE9SX0lECTB4MTQ1MworI2RlZmluZSBSQURJT1NIQUNLX1BST0RVQ1RfSUQJMHg0MDI2CisKKyNkZWZpbmUgRENVMTBfVkVORE9SX0lECQkweDA3MzEKKyNkZWZpbmUgRENVMTBfUFJPRFVDVF9JRAkweDA1MjgKKworI2RlZmluZSBTSVRFQ09NX1ZFTkRPUl9JRAkweDYxODkKKyNkZWZpbmUgU0lURUNPTV9QUk9EVUNUX0lECTB4MjA2OAorCisvKiBBbGNhdGVsIE9UNTM1LzczNSBVU0IgY2FibGUgKi8KKyNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJMHgxMWY3CisjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9JRAkweDAyZGYKKworLyogU2Ftc3VuZyBJMzMwIHBob25lIGNyYWRsZSAqLworI2RlZmluZSBTQU1TVU5HX1ZFTkRPUl9JRAkweDA0ZTgKKyNkZWZpbmUgU0FNU1VOR19QUk9EVUNUX0lECTB4ODAwMQorCisjZGVmaW5lIFNJRU1FTlNfVkVORE9SX0lECTB4MTFmNQorI2RlZmluZSBTSUVNRU5TX1BST0RVQ1RfSURfWDY1CTB4MDAwMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTg1ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBTYWZlIEVuY2Fwc3VsYXRlZCBVU0IgU2VyaWFsIERyaXZlcgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxIExpbmVvCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSBIZXdsZXR0LVBhY2thcmQKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJ5OgorICogICAgICBTdHVhcnQgTHlubmUgPHNsQGxpbmVvLmNvbT4sIFRvbSBSdXNod29ydGggPHRickBsaW5lby5jb20+CisgKi8KKworLyogCisgKiBUaGUgZW5jYXBzdWx0YWlvbiBpcyBkZXNpZ25lZCB0byBvdmVyY29tZSBkaWZmaWN1bHRpZXMgd2l0aCBzb21lIFVTQiBoYXJkd2FyZS4KKyAqCisgKiBXaGlsZSB0aGUgVVNCIHByb3RvY29sIGhhcyBhIENSQyBvdmVyIHRoZSBkYXRhIHdoaWxlIGluIHRyYW5zaXQsIGkuZS4gd2hpbGUKKyAqIGJlaW5nIGNhcnJpZWQgb3ZlciB0aGUgYnVzLCB0aGVyZSBpcyBubyBlbmQgdG8gZW5kIHByb3RlY3Rpb24uIElmIHRoZSBoYXJkd2FyZQorICogaGFzIGFueSBwcm9ibGVtcyBnZXR0aW5nIHRoZSBkYXRhIGludG8gb3Igb3V0IG9mIHRoZSBVU0IgdHJhbnNtaXQgYW5kIHJlY2VpdmUKKyAqIEZJRk8ncyB0aGVuIGRhdGEgY2FuIGJlIGxvc3QuIAorICoKKyAqIFRoaXMgcHJvdG9jb2wgYWRkcyBhIHR3byBieXRlIHRyYWlsZXIgdG8gZWFjaCBVU0IgcGFja2V0IHRvIHNwZWNpZnkgdGhlIG51bWJlcgorICogb2YgYnl0ZXMgb2YgdmFsaWQgZGF0YSBhbmQgYSAxMCBiaXQgQ1JDIHRoYXQgd2lsbCBhbGxvdyB0aGUgcmVjZWl2ZXIgdG8gdmVyaWZ5CisgKiB0aGF0IHRoZSBlbnRpcmUgVVNCIHBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aG91dCBlcnJvci4KKyAqCisgKiBCZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgc2VuZGVyIGFuZCByZWNlaXZlciBhcmUgdGhlIGNsYXNzIGFuZCBmdW5jdGlvbiBkcml2ZXJzCisgKiB0aGVyZSBpcyBub3cgZW5kIHRvIGVuZCBwcm90ZWN0aW9uLgorICoKKyAqIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgb3B0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgYWxsIHRyYW5zbWl0dGVkIHBhY2tldHMKKyAqIHRvIGJlIHBhZGRlZCB0byB0aGUgbWF4aW11bSBwYWNrZXQgc2l6ZS4gVGhpcyBwcm92aWRlcyBhIHdvcmsgYXJvdW5kIGZvciBzb21lCisgKiBkZXZpY2VzIHdoaWNoIGhhdmUgcHJvYmxlbXMgd2l0aCBzbWFsbCBVU0IgcGFja2V0cy4KKyAqCisgKiBBc3N1bWluZyBhIHBhY2tldHNpemUgb2YgTjoKKyAqCisgKiAgICAgIDAuLk4tMiAgZGF0YSBhbmQgb3B0aW9uYWwgcGFkZGluZworICoKKyAqICAgICAgTi0yICAgICBiaXRzIDctMiAtIG51bWJlciBvZiBieXRlcyBvZiB2YWxpZCBkYXRhCisgKiAgICAgICAgICAgICAgYml0cyAxLTAgdG9wIHR3byBiaXRzIG9mIDEwIGJpdCBDUkMKKyAqICAgICAgTi0xICAgICBib3R0b20gOCBiaXRzIG9mIDEwIGJpdCBDUkMKKyAqCisgKgorICogICAgICB8IERhdGEgTGVuZ3RoICAgICAgIHwgMTAgYml0IENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArIDcgLiA2IC4gNSAuIDQgLiAzIC4gMiAuIDEgLiAwIHwgNyAuIDYgLiA1IC4gNCAuIDMgLiAyIC4gMSAuIDAgKworICoKKyAqIFRoZSAxMCBiaXQgQ1JDIGlzIGNvbXB1dGVkIGFjcm9zcyB0aGUgc2VudCBkYXRhLCBmb2xsb3dlZCBieSB0aGUgdHJhaWxlciB3aXRoCisgKiB0aGUgbGVuZ3RoIHNldCBhbmQgdGhlIENSQyBzZXQgdG8gemVyby4gVGhlIENSQyBpcyB0aGVuIE9SJ2QgaW50byB0aGUgdHJhaWxlci4KKyAqCisgKiBXaGVuIHJlY2VpdmVkIGEgMTAgYml0IENSQyBpcyBjb21wdXRlZCBvdmVyIHRoZSBlbnRpcmUgZnJhbWUgaW5jbHVkaW5nIHRoZSB0cmFpbGVyCisgKiBhbmQgc2hvdWxkIGJlIGVxdWFsIHRvIHplcm8uCisgKgorICogVHdvIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGVuY2Fwc3VsYXRpb24sIGlmIGJvdGggYXJlCisgKiB0dXJuZWQgb2YgdGhlIG1vZHVsZSB3b3JrcyBhcyBhIHNpbXBsZSBzZXJpYWwgZGV2aWNlIHdpdGggTk8KKyAqIGVuY2Fwc3VsYXRpb24uCisgKgorICogU2VlIGxpbnV4L2RyaXZlcnMvdXNiZC9zZXJpYWxfZmQgZm9yIGEgZGV2aWNlIGZ1bmN0aW9uIGRyaXZlcgorICogaW1wbGVtZW50YXRpb24gb2YgdGhpcy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKworI2lmbmRlZiBDT05GSUdfVVNCX1NBRkVfUEFEREVECisjZGVmaW5lIENPTkZJR19VU0JfU0FGRV9QQURERUQgMAorI2VuZGlmCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IHNhZmUgPSAxOworc3RhdGljIGludCBwYWRkZWQgPSBDT05GSUdfVVNCX1NBRkVfUEFEREVEOworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wYiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAic2xAbGluZW8uY29tLCB0YnJAbGluZW8uY29tIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFNhZmUgRW5jYXBzdWxhdGVkIFNlcmlhbCIKKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQkRfU0FGRV9TRVJJQUxfVkVORE9SKSAmJiAhZGVmaW5lZChDT05GSUdfVVNCRF9TQUZFX1NFUklBTF9QUk9EVUNUKQorI2Fib3J0ICJTQUZFX1NFUklBTF9WRU5ET1IgZGVmaW5lZCB3aXRob3V0IFNBRkVfU0VSSUFMX1BST0RVQ1QiCisjZW5kaWYKKworI2lmICEgZGVmaW5lZChDT05GSUdfVVNCRF9TQUZFX1NFUklBTF9WRU5ET1IpCitzdGF0aWMgX191MTYgdmVuZG9yOwkJLy8gbm8gZGVmYXVsdAorc3RhdGljIF9fdTE2IHByb2R1Y3Q7CQkvLyBubyBkZWZhdWx0Cittb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IgKHJlcXVpcmVkKSIpOworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0IChyZXF1aXJlZCkiKTsKKyNlbmRpZgorCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCittb2R1bGVfcGFyYW0oc2FmZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNhZmUsICJUdXJuIFNhZmUgRW5jYXBzdWxhdGlvbiBPbi9PZmYiKTsKKworbW9kdWxlX3BhcmFtKHBhZGRlZCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBhZGRlZCwgIlBhZCB0byBmdWxsIHdNYXhQYWNrZXRTaXplIE9uL09mZiIpOworCisjZGVmaW5lIENEQ19ERVZJQ0VfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgQ0RDX0lOVEVSRkFDRV9DTEFTUyAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ0RDX0lOVEVSRkFDRV9TVUJDTEFTUyAgICAgICAgICAgICAgICAgIDB4MDYKKworI2RlZmluZSBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MgICAgICAgICAgICAgICAgICAgMHhmZgorCisjZGVmaW5lIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFTkVUICAgICAgICAweDAxCisjZGVmaW5lIExJTkVPX1NBRkVORVRfQ1JDICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTkVPX1NBRkVORVRfQ1JDX1BBRERFRCAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwgICAgIDB4MDIKKyNkZWZpbmUgTElORU9fU0FGRVNFUklBTF9DUkMgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElORU9fU0FGRVNFUklBTF9DUkNfUEFEREVEICAgICAgICAgICAgIDB4MDIKKworCisjZGVmaW5lIE1ZX1VTQl9ERVZJQ0UodmVuZCxwcm9kLGRjLGljLGlzYykgXAorICAgICAgICAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTIHwgXAorICAgICAgICAgICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsIFwKKyAgICAgICAgLmlkVmVuZG9yID0gKHZlbmQpLCBcCisgICAgICAgIC5pZFByb2R1Y3QgPSAocHJvZCksXAorICAgICAgICAuYkRldmljZUNsYXNzID0gKGRjKSxcCisgICAgICAgIC5iSW50ZXJmYWNlQ2xhc3MgPSAoaWMpLCBcCisgICAgICAgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAoaXNjKSwKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJe01ZX1VTQl9ERVZJQ0UgKDB4NDlmLCAweGZmZmYsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gSXRzeQorCXtNWV9VU0JfREVWSUNFICgweDNmMCwgMHgyMTAxLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIENhbHlwc28KKwl7TVlfVVNCX0RFVklDRSAoMHg0ZGQsIDB4ODAwMSwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBJcmlzIAorCXtNWV9VU0JfREVWSUNFICgweDRkZCwgMHg4MDAyLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIENvbGxpZSAKKwl7TVlfVVNCX0RFVklDRSAoMHg0ZGQsIDB4ODAwMywgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBDb2xsaWUgCisJe01ZX1VTQl9ERVZJQ0UgKDB4NGRkLCAweDgwMDQsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gQ29sbGllIAorCXtNWV9VU0JfREVWSUNFICgweDVmOSwgMHhmZmZmLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIFNoYXJwIHRtcAorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TQUZFX1NFUklBTF9WRU5ET1IpCisJe01ZX1VTQl9ERVZJQ0UKKwkgKENPTkZJR19VU0JfU0FGRV9TRVJJQUxfVkVORE9SLCBDT05GSUdfVVNCX1NBRkVfU0VSSUFMX1BST0RVQ1QsIENEQ19ERVZJQ0VfQ0xBU1MsCisJICBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCisjZW5kaWYKKwkvLyBleHRyYSBudWxsIGVudHJ5IGZvciBtb2R1bGUgCisJLy8gdmVuZG9yL3Byb2R1YyBwYXJhbWV0ZXJzCisJe01ZX1VTQl9ERVZJQ0UgKDAsIDAsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwKKwl7fQkJCS8vIHRlcm1pbmF0aW5nIGVudHJ5IAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzYWZlX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkic2FmZV9zZXJpYWwiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgX191MTYgY3JjMTBfdGFibGVbMjU2XSA9IHsKKwkweDAwMCwgMHgyMzMsIDB4MjU1LCAweDA2NiwgMHgyOTksIDB4MGFhLCAweDBjYywgMHgyZmYsIDB4MzAxLCAweDEzMiwgMHgxNTQsIDB4MzY3LCAweDE5OCwgMHgzYWIsIDB4M2NkLCAweDFmZSwKKwkweDAzMSwgMHgyMDIsIDB4MjY0LCAweDA1NywgMHgyYTgsIDB4MDliLCAweDBmZCwgMHgyY2UsIDB4MzMwLCAweDEwMywgMHgxNjUsIDB4MzU2LCAweDFhOSwgMHgzOWEsIDB4M2ZjLCAweDFjZiwKKwkweDA2MiwgMHgyNTEsIDB4MjM3LCAweDAwNCwgMHgyZmIsIDB4MGM4LCAweDBhZSwgMHgyOWQsIDB4MzYzLCAweDE1MCwgMHgxMzYsIDB4MzA1LCAweDFmYSwgMHgzYzksIDB4M2FmLCAweDE5YywKKwkweDA1MywgMHgyNjAsIDB4MjA2LCAweDAzNSwgMHgyY2EsIDB4MGY5LCAweDA5ZiwgMHgyYWMsIDB4MzUyLCAweDE2MSwgMHgxMDcsIDB4MzM0LCAweDFjYiwgMHgzZjgsIDB4MzllLCAweDFhZCwKKwkweDBjNCwgMHgyZjcsIDB4MjkxLCAweDBhMiwgMHgyNWQsIDB4MDZlLCAweDAwOCwgMHgyM2IsIDB4M2M1LCAweDFmNiwgMHgxOTAsIDB4M2EzLCAweDE1YywgMHgzNmYsIDB4MzA5LCAweDEzYSwKKwkweDBmNSwgMHgyYzYsIDB4MmEwLCAweDA5MywgMHgyNmMsIDB4MDVmLCAweDAzOSwgMHgyMGEsIDB4M2Y0LCAweDFjNywgMHgxYTEsIDB4MzkyLCAweDE2ZCwgMHgzNWUsIDB4MzM4LCAweDEwYiwKKwkweDBhNiwgMHgyOTUsIDB4MmYzLCAweDBjMCwgMHgyM2YsIDB4MDBjLCAweDA2YSwgMHgyNTksIDB4M2E3LCAweDE5NCwgMHgxZjIsIDB4M2MxLCAweDEzZSwgMHgzMGQsIDB4MzZiLCAweDE1OCwKKwkweDA5NywgMHgyYTQsIDB4MmMyLCAweDBmMSwgMHgyMGUsIDB4MDNkLCAweDA1YiwgMHgyNjgsIDB4Mzk2LCAweDFhNSwgMHgxYzMsIDB4M2YwLCAweDEwZiwgMHgzM2MsIDB4MzVhLCAweDE2OSwKKwkweDE4OCwgMHgzYmIsIDB4M2RkLCAweDFlZSwgMHgzMTEsIDB4MTIyLCAweDE0NCwgMHgzNzcsIDB4Mjg5LCAweDBiYSwgMHgwZGMsIDB4MmVmLCAweDAxMCwgMHgyMjMsIDB4MjQ1LCAweDA3NiwKKwkweDFiOSwgMHgzOGEsIDB4M2VjLCAweDFkZiwgMHgzMjAsIDB4MTEzLCAweDE3NSwgMHgzNDYsIDB4MmI4LCAweDA4YiwgMHgwZWQsIDB4MmRlLCAweDAyMSwgMHgyMTIsIDB4Mjc0LCAweDA0NywKKwkweDFlYSwgMHgzZDksIDB4M2JmLCAweDE4YywgMHgzNzMsIDB4MTQwLCAweDEyNiwgMHgzMTUsIDB4MmViLCAweDBkOCwgMHgwYmUsIDB4MjhkLCAweDA3MiwgMHgyNDEsIDB4MjI3LCAweDAxNCwKKwkweDFkYiwgMHgzZTgsIDB4MzhlLCAweDFiZCwgMHgzNDIsIDB4MTcxLCAweDExNywgMHgzMjQsIDB4MmRhLCAweDBlOSwgMHgwOGYsIDB4MmJjLCAweDA0MywgMHgyNzAsIDB4MjE2LCAweDAyNSwKKwkweDE0YywgMHgzN2YsIDB4MzE5LCAweDEyYSwgMHgzZDUsIDB4MWU2LCAweDE4MCwgMHgzYjMsIDB4MjRkLCAweDA3ZSwgMHgwMTgsIDB4MjJiLCAweDBkNCwgMHgyZTcsIDB4MjgxLCAweDBiMiwKKwkweDE3ZCwgMHgzNGUsIDB4MzI4LCAweDExYiwgMHgzZTQsIDB4MWQ3LCAweDFiMSwgMHgzODIsIDB4MjdjLCAweDA0ZiwgMHgwMjksIDB4MjFhLCAweDBlNSwgMHgyZDYsIDB4MmIwLCAweDA4MywKKwkweDEyZSwgMHgzMWQsIDB4MzdiLCAweDE0OCwgMHgzYjcsIDB4MTg0LCAweDFlMiwgMHgzZDEsIDB4MjJmLCAweDAxYywgMHgwN2EsIDB4MjQ5LCAweDBiNiwgMHgyODUsIDB4MmUzLCAweDBkMCwKKwkweDExZiwgMHgzMmMsIDB4MzRhLCAweDE3OSwgMHgzODYsIDB4MWI1LCAweDFkMywgMHgzZTAsIDB4MjFlLCAweDAyZCwgMHgwNGIsIDB4Mjc4LCAweDA4NywgMHgyYjQsIDB4MmQyLCAweDBlMSwKK307CisKKyNkZWZpbmUgQ1JDMTBfSU5JVEZDUyAgICAgMHgwMDAJLy8gSW5pdGlhbCBGQ1MgdmFsdWUKKyNkZWZpbmUgQ1JDMTBfR09PREZDUyAgICAgMHgwMDAJLy8gR29vZCBmaW5hbCBGQ1MgdmFsdWUKKyNkZWZpbmUgQ1JDMTBfRkNTKGZjcywgYykgKCAoKChmY3MpIDw8IDgpICYgMHgzZmYpIF4gY3JjMTBfdGFibGVbKChmY3MpID4+IDIpICYgMHhmZl0gXiAoYykpCisKKy8qKiAgICAgCisgKiBmY3NfY29tcHV0ZTEwIC0gbWVtY3B5IGFuZCBjYWxjdWxhdGUgMTAgYml0IENSQyBhY3Jvc3MgYnVmZmVyCisgKiBAc3A6IHBvaW50ZXIgdG8gYnVmZmVyCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMKKyAqIEBmY3M6IHN0YXJ0aW5nIEZDUworICoKKyAqIFBlcmZvcm0gYSBtZW1jcHkgYW5kIGNhbGN1bGF0ZSBmY3MgdXNpbmcgcHBwIDEwYml0IENSQyBhbGdvcml0aG0uIFJldHVybgorICogbmV3IDEwIGJpdCBGQ1MuCisgKi8KK3N0YXRpYyBfX3UxNiBfX2lubGluZV9fIGZjc19jb21wdXRlMTAgKHVuc2lnbmVkIGNoYXIgKnNwLCBpbnQgbGVuLCBfX3UxNiBmY3MpCit7CisJZm9yICg7IGxlbi0tID4gMDsgZmNzID0gQ1JDMTBfRkNTIChmY3MsICpzcCsrKSk7CisJcmV0dXJuIGZjczsKK30KKworc3RhdGljIHZvaWQgc2FmZV9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgY2hhciBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcgKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWRiZyAoInNhZmVfcmVhZF9idWxrX2NhbGxiYWNrIGxlbmd0aDogJWQiLCBwb3J0LT5yZWFkX3VyYi0+YWN0dWFsX2xlbmd0aCk7CisjaWZkZWYgRUNIT19SQ1YKKwl7CisJCWludCBpOworCQl1bnNpZ25lZCBjaGFyICpjcCA9IHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5yZWFkX3VyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKSB7CisJCQlpZiAoKGkgJSAzMikgPT0gMCkgeworCQkJCXByaW50ayAoIlxucnVbJTAyeF0gIiwgaSk7CisJCQl9CisJCQlwcmludGsgKCIlMDJ4ICIsICpjcCsrKTsKKwkJfQorCQlwcmludGsgKCJcbiIpOworCX0KKyNlbmRpZgorCWlmIChzYWZlKSB7CisJCV9fdTE2IGZjczsKKwkJaWYgKCEoZmNzID0gZmNzX2NvbXB1dGUxMCAoZGF0YSwgbGVuZ3RoLCBDUkMxMF9JTklURkNTKSkpIHsKKworCQkJaW50IGFjdHVhbF9sZW5ndGggPSBkYXRhW2xlbmd0aCAtIDJdID4+IDI7CisKKwkJCWlmIChhY3R1YWxfbGVuZ3RoIDw9IChsZW5ndGggLSAyKSkgeworCisJCQkJaW5mbyAoIiVzIC0gYWN0dWFsOiAlZCIsIF9fRlVOQ1RJT05fXywgYWN0dWFsX2xlbmd0aCk7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgYWN0dWFsX2xlbmd0aDsgaSsrKSB7CisJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyIChwb3J0LT50dHksIGRhdGFbaV0sIDApOworCQkJCX0KKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCAocG9ydC0+dHR5KTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyICgiJXMgLSBpbmNvbnNpc3RlbnQgbGVuZ3RocyAlZDolZCIsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgIGFjdHVhbF9sZW5ndGgsIGxlbmd0aCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQllcnIgKCIlcyAtIGJhZCBDUkMgJXgiLCBfX0ZVTkNUSU9OX18sIGZjcyk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyIChwb3J0LT50dHksIGRhdGFbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoIChwb3J0LT50dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJICAgICAgIHVzYl9yY3ZidWxrcGlwZSAocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgICBzYWZlX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwlpZiAoKHJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKSkgeworCQllcnIgKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KK30KKworc3RhdGljIGludCBzYWZlX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCByZXN1bHQ7CisJaW50IGk7CisJaW50IHBhY2tldF9sZW5ndGg7CisKKwlkYmcgKCJzYWZlX3dyaXRlIHBvcnQ6ICVwICVkIHVyYjogJXAgY291bnQ6ICVkIiwgcG9ydCwgcG9ydC0+bnVtYmVyLCBwb3J0LT53cml0ZV91cmIsCisJICAgICBjb3VudCk7CisKKwlpZiAoIXBvcnQtPndyaXRlX3VyYikgeworCQlkYmcgKCIlcyAtIHdyaXRlIHVyYiBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlkYmcgKCJzYWZlX3dyaXRlIHdyaXRlX3VyYjogJWQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCIsCisJICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJaWYgKCFwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJZGJnICgiJXMgLSB3cml0ZSB1cmIgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCB6ZXJvIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnICgiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlwYWNrZXRfbGVuZ3RoID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsJLy8gZ2V0IG1heCBwYWNrZXRzaXplCisKKwlpID0gcGFja2V0X2xlbmd0aCAtIChzYWZlID8gMiA6IDApOwkvLyBnZXQgYnl0ZXMgdG8gc2VuZAorCWNvdW50ID0gKGNvdW50ID4gaSkgPyBpIDogY291bnQ7CisKKworCS8vIGdldCB0aGUgZGF0YSBpbnRvIHRoZSB0cmFuc2ZlciBidWZmZXIKKwlkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJbWVtc2V0IChkYXRhLCAnMCcsIHBhY2tldF9sZW5ndGgpOworCisJbWVtY3B5IChkYXRhLCBidWYsIGNvdW50KTsKKworCWlmIChzYWZlKSB7CisJCV9fdTE2IGZjczsKKworCQkvLyBwYWQgaWYgbmVjZXNzYXJ5CisJCWlmICghcGFkZGVkKSB7CisJCQlwYWNrZXRfbGVuZ3RoID0gY291bnQgKyAyOworCQl9CisJCS8vIHNldCBjb3VudAorCQlkYXRhW3BhY2tldF9sZW5ndGggLSAyXSA9IGNvdW50IDw8IDI7CisJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDFdID0gMDsKKworCQkvLyBjb21wdXRlIGZjcyBhbmQgaW5zZXJ0IGludG8gdHJhaWxlcgorCQlmY3MgPSBmY3NfY29tcHV0ZTEwIChkYXRhLCBwYWNrZXRfbGVuZ3RoLCBDUkMxMF9JTklURkNTKTsKKwkJZGF0YVtwYWNrZXRfbGVuZ3RoIC0gMl0gfD0gZmNzID4+IDg7CisJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDFdIHw9IGZjcyAmIDB4ZmY7CisKKwkJLy8gc2V0IGxlbmd0aCB0byBzZW5kCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBhY2tldF9sZW5ndGg7CisJfSBlbHNlIHsKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisjaWZkZWYgRUNIT19UWAorCXsKKwkJaW50IGk7CisJCXVuc2lnbmVkIGNoYXIgKmNwID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCWZvciAoaSA9IDA7IGkgPCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7IGkrKykgeworCQkJaWYgKChpICUgMzIpID09IDApIHsKKwkJCQlwcmludGsgKCJcbnN1WyUwMnhdICIsIGkpOworCQkJfQorCQkJcHJpbnRrICgiJTAyeCAiLCAqY3ArKyk7CisJCX0KKwkJcHJpbnRrICgiXG4iKTsKKwl9CisjZW5kaWYKKwlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWlmICgocmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciAoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcmV0dXJuIDA7CisJfQorCWRiZyAoIiVzIHVyYjogJXAgc3VibWl0dGVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT53cml0ZV91cmIpOworCisJcmV0dXJuIChjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgc2FmZV93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCByb29tID0gMDsJCS8vIERlZmF1bHQ6IG5vIHJvb20KKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplIC0gKHNhZmUgPyAyIDogMCk7CisKKwlpZiAocm9vbSkgeworCQlkYmcgKCJzYWZlX3dyaXRlX3Jvb20gcmV0dXJucyAlZCIsIHJvb20pOworCX0KKworCXJldHVybiAocm9vbSk7Cit9CisKK3N0YXRpYyBpbnQgc2FmZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN3aXRjaCAoc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkgeworCWNhc2UgTElORU9fU0FGRVNFUklBTF9DUkM6CisJCWJyZWFrOworCWNhc2UgTElORU9fU0FGRVNFUklBTF9DUkNfUEFEREVEOgorCQlwYWRkZWQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBzYWZlX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJTYWZlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCisJLndyaXRlID0JCXNhZmVfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJc2FmZV93cml0ZV9yb29tLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlzYWZlX3JlYWRfYnVsa19jYWxsYmFjaywKKwkuYXR0YWNoID0JCXNhZmVfc3RhcnR1cCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhZmVfaW5pdCAodm9pZCkKK3sKKwlpbnQgaSwgcmV0dmFsOworCisJaW5mbyAoRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOworCWluZm8gKERSSVZFUl9ERVNDKTsKKwlpbmZvICgidmVuZG9yOiAleCBwcm9kdWN0OiAleCBzYWZlOiAlZCBwYWRkZWQ6ICVkXG4iLCB2ZW5kb3IsIHByb2R1Y3QsIHNhZmUsIHBhZGRlZCk7CisKKwkvLyBpZiB3ZSBoYXZlIHZlbmRvciAvIHByb2R1Y3QgcGFyYW1ldGVycyBwYXRjaCB0aGVtIGludG8gaWQgbGlzdAorCWlmICh2ZW5kb3IgfHwgcHJvZHVjdCkgeworCQlpbmZvICgidmVuZG9yOiAleCBwcm9kdWN0OiAleFxuIiwgdmVuZG9yLCBwcm9kdWN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZiAoaWRfdGFibGUpIC8gc2l6ZW9mIChzdHJ1Y3QgdXNiX2RldmljZV9pZCkpOyBpKyspIHsKKwkJCWlmICghaWRfdGFibGVbaV0uaWRWZW5kb3IgJiYgIWlkX3RhYmxlW2ldLmlkUHJvZHVjdCkgeworCQkJCWlkX3RhYmxlW2ldLmlkVmVuZG9yID0gdmVuZG9yOworCQkJCWlkX3RhYmxlW2ldLmlkUHJvZHVjdCA9IHByb2R1Y3Q7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZzYWZlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNhZmVfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZzYWZlX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2FmZV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmc2FmZV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnNhZmVfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQgKHNhZmVfaW5pdCk7Cittb2R1bGVfZXhpdCAoc2FmZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV9md18zNDEwLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfMzQxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTg4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfMzQxMC5oCkBAIC0wLDAgKzEsODg1IEBACisvKiB2aTogdHM9OCBzdz04CisgKgorICogVEkgMzQxMCBVU0IgU2VyaWFsIERyaXZlciBGaXJtd2FyZSBIZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1RJX0ZXXzM0MTBfSF8KKyNkZWZpbmUgX1RJX0ZXXzM0MTBfSF8KKworLyogZmlybXdhcmUgOS8xMC8wNCBGVzM0MTBfU3BlY2lhbF9TdGFydFdkb2dPblN0YXJ0UG9ydCAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciB0aV9md18zNDEwW10gPSB7CisweEMyLCAweDM1LAkvKiBmaXJtd2FyZSBpbWFnZSBsZW5ndGggZXhjbHVkaW5nIGhlYWRlciwgbGl0dGxlIGVuZGlhbiAqLworMHgwMCwgCQkvKiBwbGFjZWhvbGRlciBmb3IgY2hlY2tzdW0gKi8KKworMHgwMiwweDAwLDB4MWUsMHgwMiwweDFhLDB4ZGIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MDIsMHgzMiwweGNiLDB4ZmYsMHhmZiwKKzB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAyLDB4MzMsMHg3NiwweDc1LDB4ODEsCisweGNlLDB4OTAsMHhmZCwweGU4LDB4ODUsMHg4MywweGEwLDB4MTIsMHgzNCwweGVhLDB4ZWMsMHg0ZCwweDYwLDB4NmEsMHg3OCwweGFiLAorMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsMHg5YywweGZhLDB4NzgsMHg3ZiwweDgwLDB4MDMsMHg3NiwweDAwLDB4MTgsMHhiOCwKKzB4NjUsMHhmYSwweDc4LDB4MjAsMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsMHgyMCwweGZhLDB4OTAsMHhmZCwweGRkLDB4YWUsCisweDgzLDB4YWYsMHg4MiwweDkwLDB4ZmIsMHhmOCwweDEyLDB4MDAsMHhhMSwweDYwLDB4MDUsMHhlNCwweGYwLDB4YTMsMHg4MCwweGY2LAorMHg5MCwweGZkLDB4ZTgsMHhhOCwweDgyLDB4OTAsMHhmZCwweGU4LDB4YTksMHg4MiwweGU4LDB4YzMsMHg5OSwweDUwLDB4MDUsMHg3NiwKKzB4MDAsMHgwOCwweDgwLDB4ZjYsMHg5MCwweDAwLDB4ZmYsMHgxMiwweDAwLDB4YWEsMHg5MCwweDAxLDB4MDMsMHgxMiwweDAwLDB4YWEsCisweDkwLDB4MDEsMHgwNywweDEyLDB4MDAsMHhhYSwweDkwLDB4MDEsMHgwYiwweDEyLDB4MDAsMHhjOCwweDkwLDB4MDEsMHgxMSwweDEyLAorMHgwMCwweGM4LDB4OTAsMHgwMSwweDE3LDB4MTIsMHgwMCwweGM4LDB4NzUsMHhkMCwweDAwLDB4MTIsMHgzMywweGM4LDB4MDIsMHgwMSwKKzB4MWQsMHhlZiwweDY1LDB4ODIsMHg3MCwweDAzLDB4ZWUsMHg2NSwweDgzLDB4MjIsMHhlNCwweDkzLDB4ZjgsMHg3NCwweDAxLDB4OTMsCisweGY5LDB4NzQsMHgwMiwweDkzLDB4ZmUsMHg3NCwweDAzLDB4OTMsMHhmNSwweDgyLDB4OGUsMHg4MywweGU4LDB4NjksMHg3MCwweDAxLAorMHgyMiwweGU0LDB4OTMsMHhmNiwweGEzLDB4MDgsMHg4MCwweGY0LDB4ZTQsMHg5MywweGZjLDB4NzQsMHgwMSwweDkzLDB4ZmQsMHg3NCwKKzB4MDIsMHg5MywweGZlLDB4NzQsMHgwMywweDkzLDB4ZmYsMHg3NCwweDA0LDB4OTMsMHhmOCwweDc0LDB4MDUsMHg5MywweGY1LDB4ODIsCisweDg4LDB4ODMsMHgxMiwweDAwLDB4YTEsMHg3MCwweDAxLDB4MjIsMHhlNCwweDkzLDB4YTMsMHhhOCwweDgzLDB4YTksMHg4MiwweDhjLAorMHg4MywweDhkLDB4ODIsMHhmMCwweGEzLDB4YWMsMHg4MywweGFkLDB4ODIsMHg4OCwweDgzLDB4ODksMHg4MiwweDgwLDB4ZTMsMHgyMSwKKzB4MjEsMHgwNCwweDkyLDB4ODAsMHg4MCwweDA0LDB4OTIsMHhhYywweGFlLDB4MDQsMHg5MiwweGZkLDB4ZTgsMHgwNCwweDk0LDB4MDQsCisweDk0LDB4ZmIsMHhmMywweDA0LDB4OTksMHgwNCwweDk0LDB4ZmIsMHhmMywweDA0LDB4ZjksMHgwNCwweGY5LDB4ODAsMHhmZSwweGQwLAorMHhmMCwweDMwLDB4ZjAsMHgwOSwweDIwLDB4ZjMsMHgwMywweGY2LDB4ODAsMHgxMCwweGY3LDB4ODAsMHgwZCwweDMwLDB4ZjEsMHgwOSwKKzB4MjAsMHhmMywweDAzLDB4ZjIsMHg4MCwweDA0LDB4ZjMsMHg4MCwweDAxLDB4ZjAsMHgyMCwweGY0LDB4MDQsMHhmYywweGQwLDB4ZTAsCisweGNjLDB4MjIsMHhjYywweGMwLDB4ZTAsMHgxMiwweDAxLDB4NWEsMHgwMiwweDAxLDB4NGIsMHhiYywweDAwLDB4MDUsMHhkMCwweGYwLAorMHhhYywweGYwLDB4MjIsMHhjMywweDEzLDB4ZGMsMHhmYywweDAyLDB4MDEsMHgyMSwweGJmLDB4MDAsMHgwOSwweGVkLDB4MjUsMHg4MiwKKzB4NzUsMHhmMCwweDAxLDB4ZjgsMHhlNiwweDIyLDB4YmYsMHgwMSwweDBmLDB4ZWQsMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVlLDB4MzUsCisweDgzLDB4ZjUsMHg4MywweDc1LDB4ZjAsMHgwNCwweGUwLDB4MjIsMHhlZCwweDI1LDB4ODIsMHg3NSwweGYwLDB4MDIsMHhmOCwweGUyLAorMHgyMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjUsMHhmMCwweGMzLDB4ZTQsMHg5MywweGEzLDB4YzUsMHhmMCwweDk1LDB4ZjAsMHhjMCwKKzB4ZTAsMHhjMywweGQwLDB4ZjAsMHhlNCwweDkzLDB4YTMsMHg5NSwweGYwLDB4NDAsMHgxMiwweGEzLDB4YTMsMHhjMywweGU1LDB4ZjAsCisweDMzLDB4NTAsMHgwMiwweDA1LDB4ODMsMHgyNSwweDgyLDB4ZjUsMHg4MiwweDUwLDB4MDIsMHgwNSwweDgzLDB4NzQsMHgwMSwweDkzLAorMHhjMCwweGUwLDB4ZTQsMHg5MywweGMwLDB4ZTAsMHgyMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjUsMHhmMCwweGU0LDB4OTMsMHg3MCwKKzB4MDksMHg3NCwweDAxLDB4OTMsMHg3MCwweDA0LDB4YTMsMHhhMywweDgwLDB4MGMsMHg3NCwweDAyLDB4OTMsMHg2NSwweGYwLDB4NjAsCisweDA1LDB4YTMsMHhhMywweGEzLDB4ODAsMHhlNywweDc0LDB4MDEsMHg5MywweGMwLDB4ZTAsMHhlNCwweDkzLDB4YzAsMHhlMCwweDIyLAorMHgxMiwweDAyLDB4NWIsMHgwMiwweDAxLDB4ZjIsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAxLDB4ZjIsMHgxMiwweDAyLDB4ZDMsMHgwMiwKKzB4MDEsMHhmMiwweDMwLDB4ZTAsMHgwNywweDIwLDB4ZTMsMHgwMiwweGU2LDB4MjIsMHhlNywweDIyLDB4MzAsMHhlMSwweDA3LDB4MjAsCisweGUzLDB4MDIsMHhlMiwweDIyLDB4ZTMsMHgyMiwweDMwLDB4ZTIsMHgwMiwweGUwLDB4MjIsMHhlNCwweDkzLDB4MjIsMHgxMiwweDAyLAorMHhkMywweDAyLDB4MDIsMHgxYSwweDEyLDB4MDIsMHhhZiwweDAyLDB4MDIsMHgxYSwweGFiLDB4ZjAsMHgxMiwweDAyLDB4MjQsMHhjYiwKKzB4YzUsMHhmMCwweGNiLDB4MjIsMHgzMCwweGUwLDB4MTAsMHgyMCwweGUzLDB4MDYsMHhlNiwweGY1LDB4ZjAsMHgwOCwweGU2LDB4MjIsCisweGU3LDB4ZjUsMHhmMCwweDA5LDB4ZTcsMHgxOSwweDIyLDB4MzAsMHhlMSwweDEwLDB4MjAsMHhlMywweDA2LDB4ZTIsMHhmNSwweGYwLAorMHgwOCwweGUyLDB4MjIsMHhlMywweGY1LDB4ZjAsMHgwOSwweGUzLDB4MTksMHgyMiwweDMwLDB4ZTIsMHgwNiwweGUwLDB4ZjUsMHhmMCwKKzB4YTMsMHhlMCwweDIyLDB4ZTQsMHg5MywweGY1LDB4ZjAsMHg3NCwweDAxLDB4OTMsMHgyMiwweGJiLDB4MDAsMHgwMywweDc0LDB4MDksCisweDIyLDB4YmIsMHgwMSwweDA3LDB4ODksMHg4MiwweDhhLDB4ODMsMHg3NCwweDA0LDB4MjIsMHhiYiwweDAyLDB4MDcsMHg4OSwweDgyLAorMHg4YSwweDgzLDB4NzQsMHgxMCwweDIyLDB4NzQsMHgwYSwweDIyLDB4MDIsMHgwMiwweDdiLDB4YmIsMHgwMCwweDA3LDB4ZTksMHgyNSwKKzB4ODIsMHhmOCwweDc0LDB4MDEsMHgyMiwweGJiLDB4MDEsMHgwZCwweGU5LDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlYSwweDM1LDB4ODMsCisweGY1LDB4ODMsMHg3NCwweDA0LDB4MjIsMHhiYiwweDAyLDB4MGQsMHhlOSwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWEsMHgzNSwweDgzLAorMHhmNSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZTksMHgyNSwweDgyLDB4ZjgsMHg3NCwweDAyLDB4MjIsMHgwMiwweDAyLDB4YWYsMHhiZiwKKzB4MDAsMHgwNSwweGVkLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiZiwweDAxLDB4MDcsMHg4ZCwweDgyLDB4OGUsMHg4MywweDc0LDB4MDQsCisweDIyLDB4YmYsMHgwMiwweDA3LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg3NCwweDEwLDB4MjIsMHhlZCwweGY4LDB4NzQsMHgwMiwweDIyLAorMHgwMiwweDAyLDB4ZDMsMHhiZiwweDAwLDB4MDcsMHhlZCwweDI1LDB4ODIsMHhmOCwweDc0LDB4MDEsMHgyMiwweGJmLDB4MDEsMHgwZCwKKzB4ZWQsMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVlLDB4MzUsMHg4MywweGY1LDB4ODMsMHg3NCwweDA0LDB4MjIsMHhiZiwweDAyLDB4MGQsCisweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LDB4ODMsMHhmNSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZWQsMHgyNSwweDgyLAorMHhmOCwweDc0LDB4MDIsMHgyMiwweDAyLDB4MDMsMHgwNywweGMwLDB4ZTAsMHgxMiwweDAyLDB4NWIsMHgwMiwweDAzLDB4MWYsMHhjMCwKKzB4ZTAsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAzLDB4MWYsMHhjMCwweGUwLDB4MTIsMHgwMiwweGQzLDB4MDIsMHgwMywweDFmLDB4MzAsCisweGUwLDB4MGIsMHgyMCwweGUzLDB4MDQsMHhkMCwweGUwLDB4ZjYsMHgyMiwweGQwLDB4ZTAsMHhmNywweDIyLDB4MzAsMHhlMSwweDBiLAorMHgyMCwweGUzLDB4MDQsMHhkMCwweGUwLDB4ZjIsMHgyMiwweGQwLDB4ZTAsMHhmMywweDIyLDB4ZDAsMHhlMCwweGYwLDB4MjIsMHhjOSwKKzB4Y2QsMHhjOSwweGNhLDB4Y2UsMHhjYSwweGNiLDB4Y2YsMHhjYiwweDEyLDB4MDMsMHg1MiwweGVkLDB4ZjksMHhlZSwweGZhLDB4ZWYsCisweGZiLDB4MjIsMHhiYiwweDAwLDB4MmYsMHhiZiwweDAwLDB4MGEsMHhmYSwweGVkLDB4ZjgsMHhlNywweGY2LDB4MDgsMHgwOSwweGRhLAorMHhmYSwweDIyLDB4YmYsMHgwMSwweDEyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOCwweDAyLDB4MDMsMHg2ZiwweDA5LDB4YTMsMHhlNywKKzB4ZjAsMHhkOCwweGZhLDB4MjIsMHgwMiwweDAzLDB4N2EsMHhmYSwweGVkLDB4ZjgsMHhlNywweGYyLDB4MDgsMHgwOSwweGRhLDB4ZmEsCisweDIyLDB4MDIsMHgwMywweDg0LDB4YmIsMHgwMSwweDRkLDB4YmYsMHgwMCwweDE0LDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLAorMHhmOCwweDAyLDB4MDMsMHg5NiwweDA4LDB4YTMsMHhlMCwweGY2LDB4ZDksMHhmYSwweDIyLDB4MDIsMHgwMywweGE3LDB4YmYsMHgwMSwKKzB4MjIsMHg4ZCwweDgyLDB4OGUsMHg4MywweGZiLDB4MDgsMHhjOSwweGM1LDB4ODIsMHhjOSwweGNhLDB4YzUsMHg4MywweGNhLDB4ZTAsCisweGEzLDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGYwLDB4YTMsMHhkYiwweGVhLDB4ZDgsMHhlOCwweDIyLAorMHgwMiwweDAzLDB4Y2EsMHg4ZCwweDgyLDB4OGUsMHg4MywweGY5LDB4ZWQsMHhmOCwweGUwLDB4ZjIsMHgwOCwweGEzLDB4ZDksMHhmYSwKKzB4MjIsMHgwMiwweDAzLDB4ZDQsMHhiYiwweDAyLDB4NGQsMHhiZiwweDAwLDB4MTIsMHg4OSwweDgyLDB4OGEsMHg4MywweGY5LDB4ZWQsCisweGY4LDB4MDIsMHgwMywweGU2LDB4MDgsMHhhMywweGU0LDB4OTMsMHhmNiwweGQ5LDB4ZjksMHgyMiwweGJmLDB4MDEsMHgyMywweDhkLAorMHg4MiwweDhlLDB4ODMsMHhmYiwweDA4LDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGU0LDB4OTMsMHhhMywKKzB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGYwLDB4YTMsMHhkYiwweGU5LDB4ZDgsMHhlNywweDIyLDB4MDIsCisweDA0LDB4MTksMHg4OSwweDgyLDB4OGEsMHg4MywweGY5LDB4ZWQsMHhmOCwweGU0LDB4OTMsMHhmMiwweDA4LDB4YTMsMHhkOSwweGY5LAorMHgyMiwweDAyLDB4MDQsMHgyYSwweGJmLDB4MDAsMHgwZCwweGZhLDB4ZWQsMHhmOCwweGUzLDB4ZjYsMHgwOCwweDA5LDB4ZGEsMHhmYSwKKzB4MjIsMHgwMiwweDA0LDB4MzQsMHhiZiwweDAxLDB4MTIsMHg4ZCwweDgyLDB4OGUsMHg4MywweGY4LDB4MDIsMHgwNCwweDQxLDB4MDksCisweGEzLDB4ZTMsMHhmMCwweGQ4LDB4ZmEsMHgyMiwweDAyLDB4MDQsMHg0YywweGZhLDB4ZWQsMHhmOCwweGUzLDB4ZjIsMHgwOCwweDA5LAorMHhkYSwweGZhLDB4MjIsMHgwMiwweDA0LDB4NTYsMHhlNiwweGZiLDB4MDgsMHhlNiwweGZhLDB4MDgsMHhlNiwweGY5LDB4MDQsMHhmNiwKKzB4MTgsMHg3MCwweDAxLDB4MDYsMHgyMiwweGU2LDB4ZmYsMHgwOCwweGU2LDB4ZmUsMHgwOCwweGU2LDB4ZmQsMHgyMiwweGVmLDB4ZjAsCisweGEzLDB4ZWUsMHhmMCwweGEzLDB4ZWQsMHhmMCwweDIyLDB4ZWIsMHhmMCwweGEzLDB4ZWEsMHhmMCwweGEzLDB4ZTksMHhmMCwweDIyLAorMHhlMCwweGZmLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZkLDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwKKzB4ZjksMHgyMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHhmOSwweDAwLDB4NjEsMHgwNSwweDY4LDB4MDAsCisweDI2LDB4MDUsMHg4ZiwweDAwLDB4MzMsMHgwYSwweDAwLDB4MDAsMHg2MSwweDBhLDB4NmMsMHgwMCwweDY2LDB4MTUsMHgxZCwweDAwLAorMHg2MSwweDBjLDB4ZjAsMHgwMCwweDYxLDB4MDksMHhhMCwweDAwLDB4NjEsMHgwOSwweGQ3LDB4MDAsMHg2MSwweDBkLDB4YjcsMHgwMCwKKzB4NjEsMHgwYiwweGU4LDB4MDAsMHg2MSwweDBhLDB4MTMsMHgwMCwweDYxLDB4MGEsMHg0OCwweDAwLDB4NjEsMHgxNywweDE1LDB4MDAsCisweDMzLDB4MTcsMHgyOCwweDAwLDB4MzQsMHgxZCwweGY2LDB4MDAsMHg0MywweDFlLDB4YTEsMHgwMCwweDQ0LDB4MjAsMHgwZSwweDAwLAorMHg0NCwweDFmLDB4ZmMsMHgwMCwweDQ3LDB4MWUsMHhjOCwweDAwLDB4NDcsMHgxZiwweDZkLDB4MDAsMHg0ZCwweDFmLDB4YmUsMHgwMCwKKzB4NGYsMHgxZSwweGVhLDB4MDAsMHg1OCwweDMyLDB4NTYsMHgwMCwweDYxLDB4N2MsMHhjYywweDdkLDB4ZmYsMHgxMiwweDFjLDB4YTcsCisweDIyLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHgyMCwweGU3LDB4MmQsMHhjMiwweGFmLDB4YWUsMHg1OSwweGFmLDB4NTgsMHg3NSwweDVhLAorMHgyMCwweGU1LDB4NWEsMHgxNCwweGM1LDB4NWEsMHg2MCwweDE5LDB4ZTQsMHhmZSwweDdmLDB4MDUsMHhlZSwweDRmLDB4Y2UsMHgyNCwKKzB4ZmYsMHhjZSwweGNmLDB4MzQsMHhmZiwweGNmLDB4NjAsMHgwNywweGU0LDB4OTAsMHhmZiwweDkyLDB4ZjAsMHg4MCwweGVkLDB4ODAsCisweGUwLDB4OGUsMHg1OSwweDhmLDB4NTgsMHgyMiwweDEyLDB4MDUsMHgwMSwweDdkLDB4MDcsMHg3YywweGI3LDB4MTIsMHgzMiwweDcyLAorMHg3ZCwweDBmLDB4N2MsMHg2ZSwweDEyLDB4MzIsMHg4YywweDc4LDB4OWQsMHg3YSwweDA2LDB4ZTQsMHhmNiwweDA4LDB4ZGEsMHhmYywKKzB4N2EsMHgwNiwweDEyLDB4MDUsMHhjNCwweDdjLDB4MDMsMHgxMiwweDBlLDB4NGMsMHgxMiwweDIxLDB4NGEsMHhlNCwweGZlLDB4ZmYsCisweDdjLDB4MGYsMHgxMiwweDMxLDB4ZmIsMHhkMiwweGE4LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHhlNCwweDkwLDB4ZmMsMHgzOCwweGYwLAorMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLDB4ZTQsMHgwOCwweDc0LDB4MDEsMHg5MCwweGZjLDB4MzksMHhmMCwweDgwLDB4MDUsMHhlNCwKKzB4OTAsMHhmYywweDM5LDB4ZjAsMHg3ZCwweDBhLDB4N2MsMHgwMCwweDEyLDB4MjUsMHgyNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsCisweDMwLDB4ZTYsMHg5MCwweGZjLDB4MzksMHhlMCwweDE0LDB4NzAsMHgwZSwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgxMCwweGYwLAorMHg3YywweDAwLDB4MTIsMHgyNSwweGJmLDB4ODAsMHgxOSwweDkwLDB4ZmMsMHgzOSwweGUwLDB4NzAsMHgwZSwweDkwLDB4ZmYsMHhmMCwKKzB4ZTAsMHg1NCwweGVmLDB4ZjAsMHg3YywweDAwLDB4MTIsMHgyNSwweGJmLDB4ODAsMHgwNSwweDdjLDB4MTcsMHgxMiwweDI1LDB4YmYsCisweDEyLDB4MzEsMHg2OSwweDIyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGFiLDB4ZjAsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LAorMHgyMCwweGYwLDB4MjIsMHg4YywweDM3LDB4OGQsMHgzNiwweDc4LDB4ODIsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4ZWQsMHhmZSwKKzB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsMHg3OCwweDgwLDB4ZjYsMHg3OCwweDgyLDB4ZTYsCisweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLAorMHg1NCwweDBmLDB4ZmMsMHg3ZCwweDgwLDB4MTIsMHgxNywweDQ2LDB4NzgsMHg4MCwweGU2LDB4NzAsMHgwZCwweGFkLDB4M2EsMHhhZSwKKzB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHg3YywweDA4LDB4MjIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmUsCisweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg4MCwweDFlLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LAorMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDI1LDB4ZTAsMHg0NCwKKzB4MDEsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDAyLDB4MDYsMHhkMCwweDc4LDB4ODIsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsCisweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAyLDB4MGUsMHg1NCwweGZlLDB4OTAsMHhmZiwweGYzLAorMHhmMCwweDgwLDB4MmIsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwKKzB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhlYiwweDkwLDB4ZmYsMHhmMSwweGYwLDB4MTIsMHgwOCwweGJmLDB4NDAsCisweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHg3YywweDE4LDB4MjIsMHg3OCwweDgyLAorMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwKKzB4MGUsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLDB4MGQsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsCisweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLAorMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDIsMHgwZSwweDQ0LDB4MDEsMHg5MCwweGZmLDB4ZjMsMHhmMCwKKzB4NzgsMHg4MywweGU2LDB4MjQsMHgwMywweGY2LDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNiwweDc4LDB4ODAsMHhlNiwweDI0LDB4ZmUsCisweDUwLDB4MDksMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDgwLDB4MDcsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LAorMHgwMiwweGYwLDB4ZTQsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDc4LDB4ODEsMHg3NiwweDAwLDB4NzgsMHg4MCwweGU2LDB4MjQsMHhmZiwKKzB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwweDc4LDB4ODEsMHhlNiwweDdmLDB4MDAsMHhmZSwweGVjLDB4ZDMsMHg5ZSwweGVmLDB4NjQsCisweDgwLDB4Y2QsMHg2NCwweDgwLDB4OWQsMHg0MCwweDJmLDB4MTIsMHgwOCwweGE0LDB4NDAsMHgwZiwweDc4LDB4ODEsMHhlNiwweGFkLAorMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4OTAsMHhmZiwweGYyLDB4ZTAsMHhmYywKKzB4NzgsMHg4MiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywweGYwLDB4NzgsMHg4MSwweDA2LDB4YTMsMHg3OCwweDgyLDB4YTYsCisweDgzLDB4MDgsMHhhNiwweDgyLDB4ODAsMHhiNSwweDEyLDB4MDgsMHhhNCwweDQwLDB4MGYsMHg3OCwweDgxLDB4ZTYsMHhhZCwweDNhLAorMHhhZSwweDM5LDB4YWYsMHgzOCwweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDkwLDB4ZmYsMHhmMiwweGUwLDB4ZmMsMHg3OCwKKzB4ODIsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmMCwweDc4LDB4ODAsMHhlNiwweGFkLDB4M2EsMHhhZSwweDM5LDB4YWYsCisweDM4LDB4MTIsMHgwMywweDBmLDB4N2MsMHgwMCwweDIyLDB4OGMsMHgzNywweDhkLDB4MzYsMHg3OCwweDgyLDB4ZWQsMHhmNiwweDA4LAorMHhlYywweGY2LDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4NzgsMHg4MSwKKzB4ZjYsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsCisweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGZjLDB4N2QsMHg4MSwweDEyLDB4MTcsMHg0NiwweDc4LDB4ODEsMHhlNiwweDcwLAorMHgwMywweDdjLDB4MDgsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhmZSwweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwKKzB4ZmQsMHhmMCwweDgwLDB4MWIsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsCisweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4MjUsMHhlMCwweDkwLDB4ZmYsMHhmMywweGYwLDB4ODAsMHg1YiwweDc4LAorMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDYsMHgxMiwKKzB4MDIsMHgwZSwweDU0LDB4ZmUsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDgwLDB4MjEsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsCisweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhlYiwweDkwLAorMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwKKzB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDkwLDB4ZmYsCisweGYxLDB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MywweGU2LDB4MjQsMHgwYSwweGY2LAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY2LDB4NzgsMHg4MCwweDc2LDB4MDAsMHg3OCwweDgxLDB4ZTYsMHgyNCwweGZmLDB4ZmMsMHhlNCwKKzB4MzQsMHhmZiwweGZkLDB4NzgsMHg4MCwweGU2LDB4N2YsMHgwMCwweGZlLDB4ZWMsMHhkMywweDllLDB4ZWYsMHg2NCwweDgwLDB4Y2QsCisweDY0LDB4ODAsMHg5ZCwweDQwLDB4MjEsMHg3OCwweDgyLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4OTAsMHhmZiwweGYxLAorMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLDB4MDMsMHg3YywweDE4LDB4MjIsMHg3OCwweDgwLDB4MDYsMHg3OCwweDgzLDB4MDYsMHhlNiwKKzB4MTgsMHg3MCwweDAxLDB4MDYsMHg4MCwweGMzLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3OCwweDgyLDB4ODYsCisweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLDB4MDMsMHg3YywweDE4LAorMHgyMiwweDdjLDB4MDAsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MjAsMHhlNywweDEyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHgzMCwKKzB4ZTUsMHgwOSwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgyMCwweGYwLDB4YzMsMHgyMiwweDgwLDB4ZTcsMHhkMywweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDIwLDB4ZTMsMHgxMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsMHhlNSwweDA5LDB4OTAsMHhmZiwweGYwLAorMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMzLDB4MjIsMHg4MCwweGU3LDB4ZDMsMHgyMiwweDhjLDB4NDIsMHg4ZCwweDQxLDB4N2MsMHgwMCwKKzB4ZWQsMHg1NCwweGYwLDB4ZmQsMHhlYywweDcwLDB4MDMsMHhlZCwweDY0LDB4MzAsMHg3MCwweDA1LDB4NzUsMHgzZSwweDAzLDB4ODAsCisweDAzLDB4NzUsMHgzZSwweDA0LDB4YWMsMHgzZSwweDEyLDB4MGYsMHg2OSwweDc1LDB4ODMsMHgwMCwweDg1LDB4ODMsMHg0MCwweGU1LAorMHg0MSwweDU0LDB4MGYsMHhmNSwweDNmLDB4ZTUsMHg0MCwweDcwLDB4MDQsMHhlNSwweDNmLDB4NjQsMHgwMywweDcwLDB4MzUsMHhlNSwKKzB4M2UsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDAyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsCisweGUwLDB4MzAsMHhlNiwweDA1LDB4MTIsMHgxMCwweDRiLDB4ODAsMHgxOSwweGU1LDB4M2UsMHgyNCwweDlkLDB4ZjgsMHhjNiwweDU0LAorMHhmYiwweGY2LDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHg3NCwKKzB4MGYsMHhmMCwweDgwLDB4NTksMHhlNSwweDQwLDB4NzAsMHgwNCwweGU1LDB4M2YsMHg2NCwweDA0LDB4NzAsMHg0OCwweGU1LDB4M2UsCisweDI0LDB4ZmQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4MDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLAorMHgzMCwweGU1LDB4MDcsMHhhYywweDQyLDB4YWQsMHg0MSwweDEyLDB4MWMsMHgzYywweGU1LDB4NDIsMHgzMCwweGUyLDB4MTUsMHg3OCwKKzB4YWQsMHhlNiwweDMwLDB4ZTAsMHgwZiwweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTEsMHgwOSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsCisweDA0LDB4MTIsMHgzMSwweGZiLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweDc0LDB4MGYsMHhmMCwweDgwLDB4MDcsMHhlNCwweGZjLDB4N2QsMHhlZSwweDEyLDB4MWMsMHgzYywweGMyLDB4MDMsMHgyMiwKKzB4MTIsMHgzMCwweGU2LDB4MTIsMHgwZiwweDY5LDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHhmYywweDM4LDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwweGZjLDB4MzksMHhmMCwweGMyLDB4MDMsMHg3ZCwweDAyLDB4N2MsMHgwMCwKKzB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLDB4MjQsCisweDlkLDB4ZjgsMHhlNiwweDMwLDB4ZTEsMHgwNywweDdjLDB4MTMsMHgxMiwweDI1LDB4YmYsMHg4MCwweDBmLDB4OTAsMHhmYywweDM5LAorMHhlMCwweGZkLDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDEzLDB4YzgsMHgxMiwweDI1LDB4YmYsMHgxMiwweDMxLDB4NjksMHgyMiwKKzB4MTIsMHgzMCwweGU2LDB4NzgsMHg5NSwweGVjLDB4ZjYsMHg3ZCwweDAwLDB4MTIsMHgwZiwweDA5LDB4MTIsMHgyNSwweGJmLDB4MTIsCisweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4ZWMsMHgyNCwweDlkLDB4ZjgsMHhlNiwweDMwLAorMHhlMiwweDA3LDB4N2MsMHgxMywweDEyLDB4MjUsMHhiZiwweDgwLDB4MWIsMHg3OCwweDk1LDB4ZTYsMHgyNCwweDlkLDB4ZjgsMHhlNiwKKzB4MjAsMHhlMSwweDA3LDB4N2MsMHgxMiwweDEyLDB4MjUsMHhiZiwweDgwLDB4MGEsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MTMsCisweGVjLDB4MTIsMHgyNSwweGJmLDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLAorMHgyNCwweDlkLDB4ZjgsMHhlNiwweDIwLDB4ZTIsMHgwNywweDdjLDB4MTEsMHgxMiwweDI1LDB4YmYsMHg4MCwweDBhLDB4NzgsMHg5NSwKKzB4ZTYsMHhmYywweDEyLDB4MTQsMHhlZCwweDEyLDB4MjUsMHhiZiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4NzgsCisweDk1LDB4ZWMsMHhmNiwweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDksMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDkwLDB4ZmMsMHgzZiwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYSwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHhmYywweDQwLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAzLDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LDB4NjIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwweDYzLDB4OGMsMHg2MSwweGU0LDB4ZWMsMHgzMywweDMzLDB4NTQsCisweDAxLDB4NzgsMHg5NSwweGY2LDB4NjAsMHgwOCwweGU1LDB4NjIsMHgzMCwweGUxLDB4MDMsMHg3OCwweDk1LDB4MDYsMHg3OCwweDk1LAorMHhlNiwweDkwLDB4ZmMsMHg0MSwweGYwLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4ZmQsMHhhMywweGUwLDB4NTQsMHgwYywweGZjLDB4ZWQsMHg1NCwweGU2LDB4OGMsMHg2NSwweGY1LDB4NjQsCisweGU1LDB4NjEsMHgzMCwweGU1LDB4MDMsMHg0MywweDY1LDB4MDEsMHhlNSwweDYyLDB4MjAsMHhlNSwweDBlLDB4ZTUsMHg2MSwweDU0LAorMHg3ZiwweDcwLDB4MDgsMHhlNSwweDYxLDB4MjAsMHhlNywweDAzLDB4NDMsMHg2NSwweDAyLDB4ZTUsMHg2MSwweDMwLDB4ZTMsMHgwMywKKzB4NDMsMHg2NSwweDEwLDB4ZTUsMHg2MSwweDMwLDB4ZTIsMHgwMywweDQzLDB4NjUsMHgyMCwweGU1LDB4NjEsMHg1NCwweDAzLDB4NjAsCisweDAzLDB4NDMsMHg2NSwweDQwLDB4ZTUsMHg2MSwweDMwLDB4ZTEsMHgwMywweDQzLDB4NjUsMHg4MCwweGU1LDB4NjEsMHgzMCwweGU0LAorMHgwMywweDQzLDB4NjQsMHgwMSwweGU1LDB4NjEsMHgzMCwweGU2LDB4MDMsMHg0MywweDY0LDB4MDgsMHhlNSwweDYyLDB4MjAsMHhlNCwKKzB4MGUsMHhlNSwweDYxLDB4NTQsMHg3ZiwweDcwLDB4MDgsMHhlNSwweDYxLDB4MjAsMHhlNywweDAzLDB4NDMsMHg2NCwweDEwLDB4NTMsCisweDY1LDB4ZmIsMHg1MywweDY0LDB4NzksMHhhZCwweDY0LDB4ZTUsMHg2NSwweDkwLDB4ZmMsMHgzYSwweGNkLDB4ZjAsMHhhMywweGNkLAorMHhmMCwweGU1LDB4NjMsMHgzMCwweGUzLDB4MGQsMHhlNSwweDYzLDB4NTQsMHgzMCwweGM0LDB4NTQsMHgwZiwweDkwLDB4ZmMsMHgzZCwKKzB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MCwweGZjLDB4M2QsMHhmMCwweGU1LDB4NjMsMHg1NCwweDAzLDB4OTAsMHhmYywweDNjLDB4ZjAsCisweGU1LDB4NjMsMHg1NCwweDA0LDB4YzMsMHgxMywweDkwLDB4ZmMsMHgzZSwweGYwLDB4OTAsMHhmYywweDNjLDB4ZTAsMHg3MCwweDBlLAorMHg3ZCwweDM1LDB4N2UsMHhmYywweDdmLDB4MDEsMHg3NCwweDAxLDB4OTAsMHgwMCwweDA5LDB4MTIsMHgwMSwweDQyLDB4NzgsMHhhOSwKKzB4ZTYsMHgyNCwweDA4LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4N2MsMHgwMCwweGZkLDB4NzgsCisweGE5LDB4ZTYsMHgyNCwweDA3LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4N2YsMHgwMCwweDRjLAorMHhmZSwweGVmLDB4NGQsMHg5MCwweGZjLDB4MzgsMHhmMCwweGEzLDB4Y2UsMHhmMCwweGNlLDB4YzIsMHgwMywweDdkLDB4MGEsMHg3YywKKzB4MDAsMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4NzgsCisweDlhLDB4NzYsMHgwMSwweDA4LDB4NzYsMHhmYywweDA4LDB4NzYsMHgzOCwweDc4LDB4OTcsMHg3NiwweDBjLDB4NzgsMHg5YSwweDEyLAorMHgwNCwweDY1LDB4MTIsMHgwMiwweDE0LDB4NzgsMHg5OCwweGNiLDB4ZjYsMHhjYiwweDA4LDB4ZjYsMHg3ZiwweDAwLDB4ZWYsMHgyNCwKKzB4ZWEsMHg0MCwweDFmLDB4ZTQsMHhlZiwweDI1LDB4ZTAsMHg5MCwweDM1LDB4MmMsMHhmZCwweDkzLDB4Y2QsMHgwNCwweDkzLDB4NzgsCisweDk5LDB4NjYsMHg3MCwweDAzLDB4ZWQsMHgxOCwweDY2LDB4NzAsMHgwNiwweDc4LDB4OTcsMHg3NiwweDAwLDB4ODAsMHgwMywweDBmLAorMHg4MCwweGRjLDB4NzgsMHg5NiwweGVmLDB4ZjYsMHg3OCwweDlhLDB4MTIsMHgwNCwweDY1LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMiwKKzB4MGUsMHg3OCwweDk4LDB4Y2IsMHhmNiwweGNiLDB4MDgsMHhmNiwweDU0LDB4MDQsMHhjYiwweDU0LDB4ODYsMHg0YiwweDYwLDB4MDQsCisweDc4LDB4OTcsMHg3NiwweDBiLDB4NzgsMHg5OSwweGU2LDB4MzAsMHhlMywweDEzLDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDkwLAorMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4MjQsMHhmYiwweDUwLDB4MDQsMHg3OCwweDk3LDB4NzYsMHgwZCwweDc4LDB4OTksMHhlNiwKKzB4NTQsMHhjMCwweDdkLDB4MDAsMHg2NCwweGMwLDB4NGQsMHg3MCwweDA0LDB4NzgsMHg5NywweDc2LDB4MGIsMHg3OCwweDlhLDB4MTIsCisweDA0LDB4NjUsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHgyNCwweGZjLDB4NTAsMHgwNCwweDc4LDB4OTcsMHg3NiwweDBmLAorMHg3OCwweDlhLDB4MTIsMHgwNCwweDY1LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMSwweGVjLDB4MjQsMHhmZCwweDUwLDB4MDQsMHg3OCwKKzB4OTcsMHg3NiwweDBlLDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MDEsMHhlYywweDI0LDB4ZmQsCisweDUwLDB4MDQsMHg3OCwweDk3LDB4NzYsMHgwYSwweDc4LDB4OTcsMHhlNiwweDcwLDB4MmEsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLAorMHgwZiwweDY5LDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDc4LDB4YTcsMHhlNiwweGY5LDB4NzgsMHhhNiwweGU2LDB4ZmEsMHg3YiwKKzB4MDEsMHg3NCwweDBhLDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweGMyLDB4MDMsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MTEsCisweDA3LDB4NzgsMHg5NywweGVjLDB4ZjYsMHg3OCwweDk3LDB4ZTYsMHhmYywweDEyLDB4MjUsMHhiZiwweDEyLDB4MzEsMHg2OSwweDIyLAorMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweDEyLDB4MGYsMHg2OSwweDc4LDB4OTUsMHhlNiwweDI0LDB4ZmQsMHg3NSwKKzB4ZjAsMHgwYSwweGE0LDB4MjQsMHgxNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4YWMsMHg4MiwweGFkLDB4ODMsCisweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmOSwweGVkLDB4ZmEsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLAorMHgwMywweGE3LDB4YzIsMHgwMywweDc4LDB4OTUsMHhlNiwweGZjLDB4MTIsMHgxMSwweDA3LDB4MTIsMHgzMSwweDY5LDB4MjIsMHg4ZCwKKzB4MmIsMHg4YywweDJhLDB4ZWQsMHg2MCwweDQwLDB4NzUsMHgyNywweDAxLDB4NzUsMHgyOSwweDQ4LDB4NzUsMHgyOCwweGZmLDB4ZTUsCisweDJhLDB4MjQsMHhmZCwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLDB4Y2QsMHgzMywweGNkLAorMHhkYywweGY5LDB4ZmMsMHhlNSwweDI5LDB4MmMsMHhmNSwweDI5LDB4ZTUsMHgyOCwweDNkLDB4ZjUsMHgyOCwweGFkLDB4MjksMHhhZSwKKzB4MjgsMHhhZiwweDI3LDB4NzQsMHg4MCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweDc0LDB4ODAsMHg5MCwweDAwLDB4MDIsCisweDEyLDB4MDMsMHgxNywweDEyLDB4MGYsMHhiNywweGU1LDB4MmIsMHgxNCwweDYwLDB4M2IsMHg3NSwweDI3LDB4MDEsMHg3NSwweDI5LAorMHgwOCwweDc1LDB4MjgsMHhmZiwweGU1LDB4MmEsMHgyNCwweGZkLDB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwweGVjLDB4N2MsMHgwMywKKzB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MjksMHgyYywweGY1LDB4MjksMHhlNSwweDI4LDB4M2QsCisweGY1LDB4MjgsMHhhZCwweDI5LDB4YWUsMHgyOCwweGFmLDB4MjcsMHhlNCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweGU0LAorMHg5MCwweDAwLDB4MDIsMHgxMiwweDAzLDB4MTcsMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4ZWMsMHgyNCwKKzB4OWQsMHhmOCwweGU2LDB4MzAsMHhlMiwweDA5LDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDE0LDB4ZWQsMHhkMiwweDAwLDB4NzgsCisweDk1LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwweDc4LDB4OTYsMHg3NiwweDAwLDB4OTAsMHhmYywweDM5LDB4ZTAsMHgzMCwweGU3LAorMHgwNCwweDc4LDB4OTYsMHg3NiwweDAxLDB4NzgsMHg5NiwweGU2LDB4ZmQsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MGQsMHgyZiwKKzB4YzIsMHgwMywweDMwLDB4MDAsMHgwNywweDc4LDB4OTUsMHhlNiwweGZjLDB4MTIsMHgxMywweGVjLDB4N2MsMHgwMCwweDEyLDB4MjUsCisweGJmLDB4MTIsMHgzMSwweDY5LDB4MjIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDIsMHg4MCwweGVkLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmOCwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHg4MCwweGYwLDB4MjIsMHhjMiwweDAzLDB4OGMsMHg1OCwKKzB4MTIsMHgwZiwweDY5LDB4NzgsMHhhNiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHg3OSwweDVkLDB4N2EsMHgzNSwweDdiLDB4MGEsCisweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHgxMiwweDBlLDB4MDUsMHhhYywweDU4LDB4N2QsMHgwMiwweDEyLDB4MGQsMHgyZiwweGMyLAorMHgwMywweGFjLDB4NTgsMHgxMiwweDExLDB4MDcsMHgyMiwweDhkLDB4NTMsMHg4ZSwweDUyLDB4OGYsMHg1MSwweDhjLDB4NTAsMHgxMiwKKzB4MGYsMHg2OSwweDc1LDB4NGYsMHgwMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDIwLDB4ZTQsMHgxZiwweGU1LDB4NGYsMHgyNCwweGY2LDB4NDAsMHgxOSwweDA1LDB4NGYsMHhjMiwweDAzLAorMHg3YywweDE4LDB4MTIsMHgzMiwweGE5LDB4OTAsMHhmZiwweDkzLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhiMiwweGIzLDB4YWMsMHg1MCwKKzB4MTIsMHgwZiwweDY5LDB4ODAsMHhkMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDIwLDB4ZTQsMHgwNSwweGMyLDB4MDMsMHg3YywweDAyLDB4MjIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LAorMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDBmLDB4NjAsMHgxNiwweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4MGYsMHhmMCwweGMyLDB4MDMsCisweDdjLDB4MDEsMHgyMiwweDc4LDB4YTgsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHhhZCwweDUzLDB4YWUsMHg1MiwweGFmLAorMHg1MSwweDEyLDB4MDMsMHgwZiwweGMyLDB4MDMsMHg3YywweDAwLDB4MjIsMHg4ZCwweDMxLDB4OGMsMHgzMCwweDEyLDB4MTQsMHhlZCwKKzB4ZTUsMHgzMSwweDYwLDB4MGYsMHhlNSwweDMwLDB4YjQsMHgwMywweDBhLDB4N2MsMHgwMSwweDEyLDB4MjQsMHhlZSwweDdjLDB4ODEsCisweDEyLDB4MjQsMHhlZSwweGFjLDB4MzAsMHgxMiwweDBmLDB4NjksMHhlNSwweDMxLDB4NjAsMHgxYSwweDc4LDB4YWEsMHg4NiwweDgzLAorMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LDB4ZTcsMHhmMCwweGEzLDB4YTMsMHhhMywweGEzLDB4ZTAsMHg1NCwweGU3LDB4ZjAsMHhhYywKKzB4MzAsMHg3ZCwweDAyLDB4MTIsMHgwZCwweDJmLDB4NzgsMHhhNiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHg3OSwweDY3LDB4N2EsCisweDM1LDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHhjMiwweDAzLDB4ZTUsMHgzMCwweDI0LDB4OWQsMHhmOCwweGM2LAorMHg1NCwweGZkLDB4ZjYsMHhhYywweDMwLDB4MTIsMHgxMSwweDA3LDB4MjIsMHg4YywweDI2LDB4MzAsMHgwMywweDA1LDB4MTIsMHgzMiwKKzB4NDgsMHg4MCwweGY4LDB4N2MsMHgwYSwweDEyLDB4MzEsMHg1YiwweGQyLDB4MDMsMHhlNSwweDI2LDB4MjQsMHhmZCwweDc4LDB4YTMsCisweGY2LDB4NzAsMHgwNywweDc4LDB4YWEsMHg3NiwweGZmLDB4MDgsMHg3NiwweGUwLDB4NzgsMHhhMywweGU2LDB4NzUsMHhmMCwweDEwLAorMHhhNCwweGFkLDB4ZjAsMHhmYywweDI0LDB4YTAsMHg3OCwweGE5LDB4ZjYsMHhlZCwweDM0LDB4ZmYsMHgxOCwweGY2LDB4NzgsMHhhMywKKzB4ZTYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4MDAsMHhmYywweGU0LDB4MzQsMHhmYywweGZkLDB4NzgsMHhhNiwweGVkLDB4ZjYsCisweDA4LDB4ZWMsMHhmNiwweDEyLDB4MzEsMHhmNCwweDIyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNywweDIyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHg4MCwweGYwLDB4MjIsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LAorMHg4NiwweDgyLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHhhZCwweDgzLDB4ZTUsMHg4MiwweDI0LDB4MDQsMHhmYywweGU0LDB4M2QsMHg4YywKKzB4ODIsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGY4LDB4ZjAsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4MjIsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LAorMHg4NiwweDgyLDB4ZTAsMHg1NCwweDNmLDB4ZjAsMHhhZCwweDgzLDB4ZTUsMHg4MiwweDI0LDB4MDQsMHhmYywweGU0LDB4M2QsMHg4YywKKzB4ODIsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDNmLDB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweGE0LDB4ZjgsMHhlNiwweGZjLDB4NzgsCisweGFiLDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGEzLAorMHhlNiwweDI0LDB4YTQsMHhmOCwweGU2LDB4ZmMsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDU0LDB4ZmIsMHg0NCwweDAyLDB4ZjUsMHgyNiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTUsMHgwMywweDQzLDB4MjYsMHgwMSwweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTAsMHgwMywweDEyLDB4MGYsCisweGI3LDB4ZTUsMHgyNiwweGZjLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGVjLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4NzQsMHgwZiwweGYwLDB4NzgsMHhhYSwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDQ0LDB4ODAsMHhmMCwweGEzLDB4YTMsCisweGEzLDB4YTMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4OGMsMHgyYSwweDEyLDB4MGYsMHg2OSwweDc4LDB4YTcsMHhlNiwweDI0LAorMHgwOCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGZjLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYSwKKzB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA3LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MDksMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhNiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwKKzB4ZmQsMHhhMywweGUwLDB4ZmMsMHhlZCwweGZlLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwOCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlYywweGZlLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNywweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg4YywweDI5LDB4OGQsMHgyOCwweGMzLDB4ZWMsMHg5NCwweDA1LDB4ZWQsMHg5NCwKKzB4MGMsMHg0MCwweDA1LDB4NzUsMHgyNywweDdjLDB4ODAsMHgzMywweGQzLDB4ZTUsMHgyOSwweDk0LDB4MDEsMHhlNSwweDI4LDB4OTQsCisweDAzLDB4NDAsMHgwNSwweDc1LDB4MjcsMHgzYywweDgwLDB4MjMsMHhkMywweGU1LDB4MjksMHg5NCwweDgxLDB4ZTUsMHgyOCwweDk0LAorMHgwMSwweDQwLDB4MDUsMHg3NSwweDI3LDB4MTgsMHg4MCwweDEzLDB4ZDMsMHhlNSwweDI5LDB4OTQsMHg2MCwweGU1LDB4MjgsMHg5NCwKKzB4MDAsMHg0MCwweDA1LDB4NzUsMHgyNywweDBjLDB4ODAsMHgwMywweDc1LDB4MjcsMHgwOCwweGFmLDB4MjcsMHhlNCwweGVmLDB4NTQsCisweDdjLDB4NDQsMHg4MywweGZmLDB4OGYsMHgyNywweGU1LDB4MjcsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDEsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNSwKKzB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGEzLDB4ZTYsCisweDI0LDB4YTQsMHhmOCwweGVjLDB4ZjYsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHhmNSwweDI3LDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGUzLDB4MTcsMHg1MywweDI3LDB4YzcsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA1LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDM1LDB4NTgsMHg5MywweDQyLDB4MjcsMHg1MywweDI3LAorMHhmYiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg2MCwKKzB4MDMsMHg0MywweDI3LDB4MDQsMHg1MywweDI3LDB4ZmMsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0MiwweDI3LDB4NDMsMHgyNywweDgwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhOSwweGU2LAorMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwKKzB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwweDI3LDB4NzgsMHhhNywweGU2LDB4MjQsCisweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGUxLDB4MDUsMHg1MywweDI3LAorMHhkZiwweDgwLDB4MDMsMHg0MywweDI3LDB4MjAsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU0LDB4MDUsMHg1MywweDI3LDB4ZWYsMHg4MCwweDAzLDB4NDMsMHgyNywweDEwLDB4NzgsCisweGE3LDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4YjQsMHgwMiwweDAzLAorMHg0MywweDI3LDB4MDIsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDMsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweGY1LDB4MjcsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg3MCwweDA1LDB4NTMsMHgyNywweDdmLDB4ODAsMHgwMywweDQzLDB4MjcsMHg4MCwweDc4LDB4YTcsMHhlNiwKKzB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlMCwweDA1LDB4NDMsCisweDI3LDB4MjAsMHg4MCwweDAzLDB4NTMsMHgyNywweGRmLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlMywweDA1LDB4NDMsMHgyNywweDQwLDB4ODAsMHgwMywweDUzLDB4MjcsMHhiZiwKKzB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTAsCisweDA1LDB4NDMsMHgyNywweDEwLDB4ODAsMHgwMywweDUzLDB4MjcsMHhlZiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlNCwweDA1LDB4NDMsMHgyNywweDA4LDB4ODAsMHgwMywKKzB4NTMsMHgyNywweGY3LDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweGEzLDB4ZTAsMHgzMCwweGU1LDB4MDUsMHg0MywweDI3LDB4MDQsMHg4MCwweDAzLDB4NTMsMHgyNywweGZiLDB4NzgsMHhhNywweGU2LAorMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGU2LDB4MDUsMHg0MywKKzB4MjcsMHgwMSwweDgwLDB4MDMsMHg1MywweDI3LDB4ZmUsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTcsMHgwNSwweDQzLDB4MjcsMHgwMiwweDgwLDB4MDMsMHg1MywweDI3LAorMHhmZCwweGU1LDB4MjcsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MDMsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlYywweGYwLDB4YzIsMHgwMywweDdjLDB4MDAsMHgyMiwweDhkLDB4MjcsMHg4YywweDI2LDB4ZWQsMHg1NCwweDAzLDB4MTQsCisweDYwLDB4MDMsMHg3YywweDEwLDB4MjIsMHhlNSwweDI3LDB4NTQsMHg3YywweDI0LDB4ZmMsMHg0MCwweDAzLDB4N2MsMHgwYiwweDIyLAorMHhlNSwweDI2LDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg0NCwweDAyLDB4ZjYsMHg3YywweDAwLDB4MjIsMHg4YywweDMwLDB4MTIsMHgwZiwKKzB4NjksMHhlNSwweDMwLDB4MjQsMHg5ZCwweGY4LDB4ZTYsMHgyMCwweGUyLDB4NGYsMHhhYywweDMwLDB4N2QsMHgwMiwweDEyLDB4MGQsCisweDJmLDB4ZTUsMHgzMCwweDI0LDB4ZmUsMHg0NCwweDI4LDB4ZmMsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGVjLAorMHhmMCwweGFmLDB4ODMsMHhlNSwweDgyLDB4MjQsMHgwNCwweGZlLDB4ZTQsMHgzZiwweGZmLDB4ZWMsMHg4ZSwweDgyLDB4OGYsMHg4MywKKzB4ZjAsMHg3YywweDAzLDB4OGMsMHgyYywweGU1LDB4MmMsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDEsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyYywweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNSwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3NSwweDJkLDB4MDEsMHg3NSwweDJmLDB4NDgsMHg3NSwKKzB4MmUsMHhmZiwweGU1LDB4MzAsMHgyNCwweGZkLDB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwweGVjLDB4N2MsMHgwMywweDI1LDB4ZTAsCisweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MmYsMHgyYywweGY1LDB4MmYsMHhlNSwweDJlLDB4M2QsMHhmNSwweDJlLAorMHg3OCwweGFiLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhlNywKKzB4ZjUsMHgyYywweGFkLDB4MmYsMHhhZSwweDJlLDB4YWYsMHgyZCwweGU0LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMywweDE3LDB4ZTQsCisweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweDEyLDB4MDEsMHhlNiwweDMwLDB4ZTUsMHgwMywweDQzLDB4MmMsMHgxMCwweGU1LAorMHgyYywweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywKKzB4ZjAsMHgxMiwweDEwLDB4NGIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA2LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHhjMiwweDAzLDB4ZmMsMHhlNSwweDMwLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg0NCwweDA0LDB4ZjYsMHg4YywweDJjLAorMHhlNSwweDMwLDB4NTQsMHgwZiwweGM0LDB4NTQsMHhmMCwweDdlLDB4MDAsMHhmZiwweGVlLDB4ZWYsMHg0NCwweDA0LDB4N2QsMHgwMCwKKzB4ZmYsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHgxMiwweDFjLDB4YTcsMHg3YywweDAwLDB4MjIsMHg4YywweDJmLDB4MTIsCisweDBmLDB4NjksMHgxMiwweDBmLDB4ZWIsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4NTQsMHgwOCwweGYwLAorMHhhMywweGEzLDB4YTMsMHhhMywweGUwLDB4NTQsMHgwOCwweGYwLDB4YWMsMHgyZiwweDdkLDB4MDIsMHgxMiwweDBkLDB4MmYsMHhjMiwKKzB4MDMsMHhlNSwweDJmLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg1NCwweGZiLDB4ZjYsMHg3YywweDAwLDB4MjIsMHgxMiwweDMwLDB4ZTYsCisweDc4LDB4OTYsMHhlYywweGY2LDB4ZWMsMHgyNCwweDlkLDB4ZjgsMHhlNiwweDMwLDB4ZTEsMHgwYSwweDdkLDB4MDAsMHg3YywweDEzLAorMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHg3OCwweDk2LDB4ZTYsMHgyNCwweDlkLDB4ZjgsMHhjNiwweDQ0LDB4MDEsMHhmNiwKKzB4NzgsMHg5NiwweGU2LDB4ZmMsMHgxMiwweDBmLDB4NjksMHg3OCwweDk2LDB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsCisweDI0LDB4MTQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweDc4LDB4YTYsMHhlNiwweGZhLDB4MDgsMHhlNiwweGY5LAorMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhhNywweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4NzksMHg2NywKKzB4N2EsMHgzNSwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGY1LDB4MTIsMHgwZiwweGI3LDB4YzIsMHgwMywweDc4LDB4OTYsCisweGU2LDB4ZmMsMHgxMiwweDExLDB4MDcsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLDB4NjAsMHgwYSwweDdkLDB4MDAsMHg3YywweDA4LAorMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MTAsMHg1NCwweGRmLDB4ZmMsCisweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LAorMHg5NSwweGVjLDB4ZjYsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwKKzB4NjksMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsCisweGVmLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LAorMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgxMCwKKzB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LDB4NzgsCisweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgyMCwweGYwLAorMHhjMiwweDAzLDB4N2MsMHhmMCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LDB4NzgsMHhhOSwKKzB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNCwweDE1LDB4YzIsCisweDAzLDB4NzgsMHg5NiwweGU2LDB4NDQsMHgxMCwweDdmLDB4MDAsMHhmZSwweDdjLDB4MDcsMHgxMiwweDMxLDB4ZmIsMHgxMiwweDMxLAorMHg2OSwweDAyLDB4MTcsMHgxNCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDU0LDB4Y2YsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweGE5LDB4NzgsMHg5NiwweGU2LDB4ZmMsCisweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDQ0LDB4MzAsMHhmMCwweGMyLDB4MDMsMHg3YywweGYwLDB4MTIsMHgzMiwweGE5LDB4NzgsMHg5NiwweGU2LDB4ZmMsMHgxMiwKKzB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsCisweDMwLDB4ZTQsMHgxNCwweGMyLDB4MDMsMHg3OCwweDk2LDB4ZTYsMHg0NCwweDEwLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgwNywweDEyLAorMHgzMSwweGZiLDB4MTIsMHgzMSwweDY5LDB4ODAsMHg1ZCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZWYsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZGYsMHhmMCwweDc4LDB4OTYsMHhlNiwweDI0LDB4ZmQsMHg3NSwweGYwLAorMHgwYSwweGE0LDB4MjQsMHgxNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4YWMsMHg4MiwweGFkLDB4ODMsMHg3OCwKKzB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmOSwweGVkLDB4ZmEsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsCisweGE3LDB4YzIsMHgwMywweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgxMSwweDA3LDB4N2QsMHgwMCwweDdjLDB4MGIsMHgxMiwweDI1LAorMHgyNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4ZTQsMHg5MCwweGZjLDB4MzksMHhmMCwweDdkLDB4MDIsMHg3YywKKzB4MDAsMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDdjLDB4MDAsMHgxMiwweDI1LDB4YmYsCisweDEyLDB4MzEsMHg2OSwweDIyLDB4NzQsMHgzYywweDkwLDB4ZmIsMHhlMCwweGYwLDB4NzQsMHgzZSwweDkwLDB4ZmIsMHhlMCwweGYwLAorMHhlNCwweDkwLDB4ZmMsMHgyOCwweGYwLDB4MjIsMHg4ZCwweDM1LDB4OGMsMHgzNCwweGVjLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywKKzB4ZDMsMHg0MCwweDAyLDB4ODAsMHgyOCwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDgsMHhhOCwweDM1LDB4YzYsCisweDI1LDB4ZTAsMHhmNiwweDgwLDB4MTgsMHhiNCwweDA0LDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4YTgsMHgzNSwweGM2LAorMHgyNSwweGUwLDB4MjUsMHhlMCwweGY2LDB4ODAsMHgwNiwweGE4LDB4MzUsMHg3NiwweDAwLDB4ODAsMHgwMCwweDIyLDB4OGMsMHgzYywKKzB4OGQsMHgzYiwweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDc1LDB4NjYsMHgwNiwweDc1LDB4NjcsMHgwMCwweDkwLDB4ZmMsCisweDI5LDB4MTIsMHgwNCwweDZlLDB4MTIsMHgwMSwweGU2LDB4YjQsMHg4MCwweDAyLDB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLAorMHgxOCwweDQ3LDB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDAzLDB4MTIsMHgwMSwweGVjLDB4NTQsMHhmMCwKKzB4YjQsMHgzMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg1ZiwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsCisweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhmZCwweGViLDB4ZmUsMHg3ZiwweDAxLDB4OTAsMHhmYywweDJjLDB4MTIsMHgwNCwweDZlLAorMHhlZSwweGNkLDB4OTAsMHgzNSwweDcxLDB4ZmMsMHhlNCwweDkzLDB4ZmYsMHg3NCwweDAxLDB4OTMsMHhmZSwweGY5LDB4ZWYsMHhmYSwKKzB4N2IsMHgwMSwweGVhLDB4ZmYsMHhlOSwweGZlLDB4ZWMsMHhjMywweDllLDB4ZWQsMHg5ZiwweDQwLDB4MjUsMHg5MCwweDM1LDB4NzMsCisweGU0LDB4OTMsMHhmZCwweDc0LDB4MDEsMHg5MywweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4ZWUsMHhjZCwweGZjLAorMHg5MCwweGZjLDB4MmUsMHhlMCwweGQzLDB4OWMsMHg5MCwweGZjLDB4MmQsMHhlMCwweDlkLDB4NTAsMHgwNSwweDc1LDB4NjYsMHg4MCwKKzB4ODAsMHgzMywweDEyLDB4MTksMHg2NSwweDgwLDB4MmUsMHhiNCwweDYwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBiLDB4YWMsCisweDNjLDB4YWQsMHgzYiwweDEyLDB4MDcsMHg3NywweDhjLDB4NjYsMHg4MCwweDFiLDB4YjQsMHgxMCwweDAzLDB4YjMsMHg0MCwweDEwLAorMHhjMywweGI0LDB4MjAsMHgwMywweGIzLDB4NDAsMHgwOSwweGMzLDB4YjQsMHg0MCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwMCwKKzB4NzUsMHg2NiwweDgxLDB4ODAsMHgwMCwweDgwLDB4NzUsMHhiNCwweDgxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDZiLDB4OTAsCisweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDMsMHgxMiwweDAxLDB4ZWMsMHg1NCwweGYwLDB4YjQsMHgzMCwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDFkLDB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwKKzB4MGUsMHhmYSwweGZkLDB4ZWIsMHhmZSwweDdmLDB4MDEsMHg5MCwweGZjLDB4MmYsMHgxMiwweDA0LDB4NmUsMHgxMiwweDE4LDB4Y2YsCisweDgwLDB4MzYsMHhiNCwweDYwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDEzLDB4NzUsMHgzYSwweDY3LDB4ZTQsMHhmNSwweDM5LAorMHhmNSwweDM4LDB4YWMsMHgzYywweGFkLDB4M2IsMHgxMiwweDA1LDB4ZDMsMHg4YywweDY2LDB4ODAsMHgxYiwweGI0LDB4MTAsMHgwMywKKzB4YjMsMHg0MCwweDEwLDB4YzMsMHhiNCwweDIwLDB4MDMsMHhiMywweDQwLDB4MDksMHhjMywweGI0LDB4NDAsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHgwMCwweDc1LDB4NjYsMHg4MSwweDgwLDB4MDAsMHg4MCwweDAyLDB4ODAsMHgwMCwweGU1LDB4NjYsMHhmYywweDkwLAorMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4ZWMsMHg5MCwweDAwLDB4MDIsMHgxMiwweDAzLDB4MTcsMHhhYywweDY3LDB4MjIsMHg5MCwKKzB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDYwLDB4MDQsMHg3NCwweDAxLDB4ODAsCisweDAxLDB4ZTQsMHhhMiwweGUwLDB4OTIsMHgwMSwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweGVkLDB4MjQsMHgwMywweGZkLAorMHg1MCwweDAxLDB4MGUsMHg5MCwweGZjLDB4MmMsMHgxMiwweDA0LDB4NmUsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwKKzB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweGY1LDB4NjcsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwweDBmLDB4ZmMsCisweDdkLDB4NjcsMHgxMiwweDE3LDB4NDYsMHhlNSwweDY3LDB4NzAsMHgwNCwweDc1LDB4NjYsMHgwOCwweDIyLDB4NzUsMHg2NiwweDAwLAorMHg3OCwweDg0LDB4NzYsMHgwMCwweDc4LDB4ODQsMHhlNiwweGMzLDB4OTUsMHg2NywweDUwLDB4MzgsMHg5MCwweGZjLDB4MmYsMHgxMiwKKzB4MDQsMHg4MCwweDEyLDB4MDEsMHhlNiwweGZjLDB4OTAsMHhmYywweDJjLDB4MTIsMHgwNCwweDgwLDB4ZWMsMHgxMiwweDAzLDB4MGYsCisweDMwLDB4MDEsMHgwZSwweDkwLDB4ZmMsMHgzMSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsMHgzMCwweDcwLDB4MDMsMHhlMCwweDA0LAorMHhmMCwweDc4LDB4ODQsMHgwNiwweDkwLDB4ZmMsMHgyZSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsMHgyZCwweDcwLDB4MDMsMHhlMCwKKzB4MDQsMHhmMCwweDgwLDB4YzAsMHgyMiwweDkwLDB4ZmMsMHgyYSwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsMHhlZCwweGZlLDB4ZWMsCisweGZkLDB4N2YsMHgwMSwweGVkLDB4MjQsMHgwYSwweGZkLDB4NTAsMHgwMSwweDBlLDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDZlLAorMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwweDBmLDB4YjQsMHgwMSwKKzB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE3LDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDgwLDB4MGQsMHhlZCwweDcwLDB4MDEsCisweDBlLDB4OTAsMHhmYywweDJmLDB4MTIsMHgwNCwweDZlLDB4NzgsMHg4OCwweDc2LDB4MDEsMHg4MCwweDRlLDB4YjQsMHgwMiwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE5LDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDgwLDB4ZWQsMHgyNCwweDAyLDB4ZmQsMHg1MCwKKzB4MDEsMHgwZSwweDkwLDB4ZmMsMHgyZiwweDEyLDB4MDQsMHg2ZSwweDc4LDB4ODgsMHg3NiwweDAyLDB4ODAsMHgyZCwweGI0LDB4MDQsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxOSwweDkwLDB4ZmMsMHgzMiwweDEyLDB4MDQsMHg4MCwweGVkLDB4MjQsMHgwNCwweGZkLAorMHg1MCwweDAxLDB4MGUsMHg5MCwweGZjLDB4MmYsMHgxMiwweDA0LDB4NmUsMHg3OCwweDg4LDB4NzYsMHgwNCwweDgwLDB4MGMsMHhiNCwKKzB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg3NSwweDY2LDB4MDgsMHgyMiwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsCisweDgwLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4ZjUsMHg2NywweDc4LDB4ODUsMHg3NiwweDAwLDB4NzgsMHg4NSwweGU2LAorMHhjMywweDk1LDB4NjcsMHg0MCwweDAzLDB4MDIsMHgxYSwweGNkLDB4NzgsMHg4NiwweDc2LDB4MDAsMHg3OCwweDg2LDB4ZTYsMHhjMywKKzB4NzgsMHg4OCwweDk2LDB4NTAsMHg3NiwweDkwLDB4ZmMsMHgyYywweDEyLDB4MDQsMHg4MCwweDEyLDB4MDEsMHhlNiwweGZjLDB4OTAsCisweGZjLDB4MzIsMHgxMiwweDA0LDB4ODksMHgxMiwweDAxLDB4ZTAsMHhmNCwweDVjLDB4ZmMsMHgxMiwweDAxLDB4ZTAsMHhmOCwweDkwLAorMHhmYywweDJmLDB4MTIsMHgwNCwweDgwLDB4ZTgsMHhjMCwweGUwLDB4MTIsMHgwMSwweGU2LDB4YzgsMHhkMCwweGUwLDB4YzgsMHg1OCwKKzB4NGMsMHhmYywweDkwLDB4ZmMsMHgyYywweDEyLDB4MDQsMHg4MCwweGVjLDB4MTIsMHgwMywweDBmLDB4NzgsMHg4NywweGVjLDB4ZjYsCisweDkwLDB4ZmMsMHgzMSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsMHgzMCwweDcwLDB4MDMsMHhlMCwweDA0LDB4ZjAsMHgwOSwweGU5LAorMHg3MCwweDAxLDB4MGEsMHg5MCwweGZjLDB4MzIsMHgxMiwweDA0LDB4NzcsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwKKzB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDMwLDB4ZTQsMHgwZSwweDkwLDB4ZmMsMHgyZSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsCisweDJkLDB4NzAsMHgwMywweGUwLDB4MDQsMHhmMCwweDc4LDB4ODYsMHgwNiwweDgwLDB4ODEsMHg3OCwweDg4LDB4ZTYsMHhmZCwweGU0LAorMHhmZSwweGZmLDB4ZWUsMHhjZCwweGZjLDB4OTAsMHhmYywweDMxLDB4ZTAsMHgyYywweGYwLDB4OTAsMHhmYywweDMwLDB4ZTAsMHgzZCwKKzB4ZjAsMHg3OCwweDg4LDB4ZTYsMHhmZCwweGU0LDB4ZmUsMHhmZiwweGVlLDB4Y2QsMHhmYywweDkwLDB4ZmMsMHgzNCwweGUwLDB4MmMsCisweGYwLDB4OTAsMHhmYywweDMzLDB4ZTAsMHgzZCwweGYwLDB4NzgsMHg4NSwweDA2LDB4MDIsMHgxYSwweDBkLDB4NzUsMHg2NiwweDAwLAorMHgyMiwweGU1LDB4M2QsMHgwNSwweDNkLDB4MDQsMHg3MCwweDAyLDB4YjIsMHhiMCwweDIyLDB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwKKzB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMCwweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsCisweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWYsMHhjMCwweGUwLDB4OTAsMHhmZiwweDkyLAorMHhlMCwweDEyLDB4MDEsMHhiNywweDFiLDB4MjksMHgzMCwweDFiLDB4MjksMHgzMiwweDFiLDB4MzgsMHgzOCwweDFiLDB4NGEsMHgzYSwKKzB4MWIsMHg1YywweDNlLDB4MWIsMHg3NCwweDQ0LDB4MWIsMHg2OCwweDQ2LDB4MWIsMHg4MCwweDUwLDB4MWIsMHhjMiwweDUyLDB4MWIsCisweGExLDB4NTQsMHgxYiwweGUzLDB4NTYsMHgwMCwweDAwLDB4MWMsMHgwNCwweDkwLDB4ZmYsMHg5MiwweGUwLDB4N2YsMHgwMCwweGZlLAorMHg3YywweDAxLDB4MTIsMHgzMSwweGZiLDB4MDIsMHgxYywweDE0LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDAzLDB4MTIsMHgzMSwKKzB4ZmIsMHg3NCwweDIwLDB4OTAsMHhmZiwweGZlLDB4ZjAsMHgwMiwweDFjLDB4MTQsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDIsCisweDEyLDB4MzEsMHhmYiwweDc0LDB4NDAsMHg5MCwweGZmLDB4ZmUsMHhmMCwweDAyLDB4MWMsMHgxNCwweGU0LDB4ZmYsMHgwNCwweGZlLAorMHg3YywweDA0LDB4MTIsMHgzMSwweGZiLDB4MDIsMHgxYywweDE0LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA1LDB4MTIsMHgzMSwKKzB4ZmIsMHgwMiwweDFjLDB4MTQsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDYsMHgxMiwweDMxLDB4ZmIsMHgwMiwweDFjLDB4MTQsCisweDkwLDB4ZmYsMHhhNSwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmIsMHhmOCwweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZiLAorMHhmOSwweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmYiwweGY4LDB4ZTAsMHg0NCwweDMzLDB4ZmQsMHgxMiwweDFjLDB4YTcsMHg4MCwKKzB4NzMsMHg5MCwweGZmLDB4YjUsMHhlMCwweDdkLDB4MDAsMHg5MCwweGZiLDB4ZmEsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsCisweGZiLDB4ZmIsMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmIsMHhmYSwweGUwLDB4NDQsMHg0MywweGZkLDB4MTIsMHgxYywweGE3LAorMHg4MCwweDUyLDB4OTAsMHhmZiwweGE2LDB4ZTAsMHg3ZCwweDAwLDB4OTAsMHhmYiwweGZjLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwKKzB4OTAsMHhmYiwweGZkLDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwweGZiLDB4ZmMsMHhlMCwweDQ0LDB4MzQsMHhmZCwweDEyLDB4MWMsCisweGE3LDB4ODAsMHgzMSwweDkwLDB4ZmYsMHhiNiwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmIsMHhmZSwweGNkLDB4ZjAsMHhhMywweGNkLAorMHhmMCwweDkwLDB4ZmIsMHhmZiwweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmYiwweGZlLDB4ZTAsMHg0NCwweDQ0LDB4ZmQsMHgxMiwKKzB4MWMsMHhhNywweDgwLDB4MTAsMHg5MCwweGZmLDB4OTIsMHhlMCwweDdkLDB4MDAsMHhmYywweGVkLDB4NDQsMHhhYSwweGZkLDB4MTIsCisweDFjLDB4YTcsMHg4MCwweDAwLDB4ZTQsMHg5MCwweGZmLDB4OTIsMHhmMCwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLAorMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDAsMHhlMCwweGZhLDB4ZDAsMHhlMCwweGY5LDB4ZDAsMHhlMCwKKzB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyLDB4MDUsMHg4MSwweDA1LDB4ODEsCisweDA1LDB4ODEsMHgwNSwweDgxLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHg5MCwweGZmLAorMHg1YSwweGUwLDB4MjAsMHhlNywweDAyLDB4ODAsMHhmNywweDkwLDB4ZmYsMHg1OSwweGUwLDB4N2QsMHgwMCwweGE4LDB4ODEsMHgxOCwKKzB4Y2QsMHhmNiwweGNkLDB4MDgsMHhmNiwweDdkLDB4MDMsMHhhOCwweDgxLDB4ZTYsMHgxOCwweGZjLDB4ZTYsMHhjYywweDI1LDB4ZTAsCisweGNjLDB4MzMsMHhjYywweGRkLDB4ZjksMHhjYywweGY2LDB4Y2MsMHgwOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4ZTYsMHg0NCwweGY4LAorMHhmNiwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4YTgsMHg4MSwweDE4LDB4ODYsMHg4MywKKzB4MDgsMHg4NiwweDgyLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweDc0LDB4MDIsMHg5MCwweGZmLDB4NWEsMHhmMCwweDE1LDB4ODEsCisweDE1LDB4ODEsMHgxNSwweDgxLDB4MTUsMHg4MSwweDIyLDB4ZTUsMHg4MSwweDI0LDB4MDUsMHhmNSwweDgxLDB4ZTQsMHhhOCwweDgxLAorMHgxOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDkwLDB4ZmIsMHhmNSwKKzB4ZTAsMHgyNCwweGY4LDB4NTAsMHgwMywweDAyLDB4MWQsMHhjOCwweGU0LDB4YTgsMHg4MSwweDE4LDB4MTgsMHhmNiwweGE4LDB4ODEsCisweDE4LDB4ZTYsMHhmZSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHg3ZiwweDAwLAorMHhlZiwweDI0LDB4ZjgsMHg0MCwweDRkLDB4ZTQsMHhlZiwweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywKKzB4ZjUsMHg4MywweGUwLDB4ZmIsMHhhMywweGUwLDB4NmMsMHg3MCwweDAzLDB4ZmEsMHhlYiwweDZkLDB4NzAsMHgwOSwweDc0LDB4MDEsCisweGE4LDB4ODEsMHgxOCwweDE4LDB4ZjYsMHg4MCwweDJiLDB4ZTQsMHhlZiwweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZjLDB4ZjUsMHg4MywweDdhLDB4MDAsMHhlMCwweDU0LDB4ZjAsMHhjYywweGY4LDB4Y2MsMHhjZCwweGY5LDB4Y2QsMHhmYiwKKzB4NzgsMHgwMCwweGU5LDB4NTQsMHhmMCwweGY5LDB4ZWEsMHg2OCwweDcwLDB4MDIsMHhlYiwweDY5LDB4NzAsMHgwMSwweDBlLDB4MGYsCisweDgwLDB4YWUsMHhhOCwweDgxLDB4MTgsMHhlZSwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZWQsMHhmNiwweDA4LAorMHhlYywweGY2LDB4YTgsMHg4MSwweGVmLDB4ZjYsMHhhOCwweDgxLDB4MTgsMHgxOCwweGU2LDB4NzAsMHg3OSwweGE4LDB4ODEsMHgxOCwKKzB4ZTYsMHgyNCwweGY3LDB4NDAsMHg3MSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGU2LDB4NTQsMHgwZiwweGE4LDB4ODEsCisweGY2LDB4NjQsMHgwNCwweDYwLDB4MTcsMHhhOCwweDgxLDB4ZTYsMHg2NCwweDAzLDB4NjAsMHgxMCwweGE4LDB4ODEsMHgxOCwweDE4LAorMHgxOCwweDE4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDEyLDB4MWMsMHgzYywweDgwLDB4NGEsMHg3YywweDBhLDB4MTIsMHgzMSwKKzB4NWIsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4OTAsMHhmYiwweGY0LDB4ZTAsCisweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlZCwweGYwLDB4YTMsMHhlYywweGYwLAorMHg5MCwweGZiLDB4ZjQsMHhlMCwweGZmLDB4ZTQsMHhlZiwweDA0LDB4NTQsMHgwNywweGZmLDB4OTAsMHhmYiwweGY0LDB4ZjAsMHg5MCwKKzB4ZmIsMHhmNSwweGUwLDB4MDQsMHhmMCwweDEyLDB4MzEsMHhmNCwweDkwLDB4ZmIsMHhmNiwweGUwLDB4NzAsMHgwOCwweGU0LDB4ZmUsCisweGZmLDB4N2MsMHgwZiwweDEyLDB4MzEsMHhmYiwweDgwLDB4MjcsMHg5MCwweGZiLDB4ZjcsMHhlMCwweDA0LDB4ZjAsMHg1NCwweDNmLAorMHg3MCwweDFkLDB4OTAsMHhmYiwweGY3LDB4ZTAsMHg0NCwweGZlLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmYiwweGY0LDB4ZTAsMHgyNSwKKzB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlZCwweGYwLDB4YTMsMHhlYywweGYwLDB4ZTUsCisweDgxLDB4MjQsMHhmYiwweGY1LDB4ODEsMHgyMiwweDc4LDB4OGIsMHg3NiwweDAwLDB4NzgsMHg4YywweDc2LDB4MDAsMHg3NCwweDAxLAorMHg5MCwweGZiLDB4ZjYsMHhmMCwweDEyLDB4MzAsMHhlNiwweDkwLDB4ZmIsMHhmNSwweGUwLDB4NjAsMHg1NywweDdjLDB4MGEsMHgxMiwKKzB4MzEsMHg1YiwweDkwLDB4ZmIsMHhmMywweGUwLDB4MjUsMHhlMCwweDI0LDB4N2QsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsCisweDgzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywweDkwLDB4ZmIsMHhmMywweGUwLDB4MjUsMHhlMCwweDI0LDB4N2QsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGEzLDB4ZjAsMHg5MCwweGZiLDB4ZjMsMHhlMCwweGZmLDB4ZTQsMHhlZiwKKzB4MDQsMHg1NCwweDA3LDB4ZmYsMHg5MCwweGZiLDB4ZjMsMHhmMCwweDkwLDB4ZmIsMHhmNSwweGUwLDB4MTQsMHhmMCwweDc4LDB4ODksCisweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHgxMiwweDMxLDB4ZjQsMHg3OCwweDg5LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDEyLAorMHgwOCwweGRhLDB4ODAsMHhhMywweDEyLDB4MzIsMHg0OCwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLDB4YjIsMHhiMywKKzB4NzgsMHg4YiwweDA2LDB4YjYsMHgwMCwweDExLDB4NzgsMHg4YiwweDc2LDB4MDAsMHg3OCwweDhjLDB4ZTYsMHhmNCwweDA0LDB4MDQsCisweGEyLDB4ZTAsMHg5MiwweGI0LDB4NzgsMHg4YywweGY2LDB4MDIsMHgxZSwweDA3LDB4ZTQsMHg5MCwweGZiLDB4ZjYsMHhmMCwweDkwLAorMHhmYiwweGY1LDB4ZTAsMHg3ZCwweDAwLDB4ZmMsMHhlZCwweDQ0LDB4Y2YsMHhmZCwweDEyLDB4MWMsMHgzYywweDEyLDB4MzEsMHg2OSwKKzB4MjIsMHgxMiwweDMwLDB4ZTYsMHhlNSwweDcwLDB4NjQsMHg0OSwweDQ1LDB4NmYsMHg2MCwweDE1LDB4OTAsMHhmZiwweDgzLDB4ZTAsCisweDU0LDB4MGYsMHg3ZCwweDAwLDB4ZDMsMHg5NSwweDcwLDB4ZWQsMHg5NSwweDZmLDB4NTAsMHgwNSwweDEyLDB4MmYsMHgyZiwweDgwLAorMHgwMywweDEyLDB4MmYsMHhmZiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4ZTUsMHg3MCwweDY0LDB4NDksMHg0NSwKKzB4NmYsMHg2MCwweDA1LDB4MTIsMHgzMCwweDM5LDB4ODAsMHgwZSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsCisweGZmLDB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4OGMsMHg1NCwweGVjLAorMHg1NCwweGYwLDB4YjQsMHgxMCwweDE1LDB4NzUsMHg2YSwweDM1LDB4NzUsMHg2OSwweGZjLDB4NzUsMHg2OCwweDAxLDB4ZTUsMHg2YSwKKzB4MjQsMHgwMywweGY1LDB4NmEsMHhlNSwweDY5LDB4MzQsMHgwMCwweGY1LDB4NjksMHhlNCwweGY1LDB4NTcsMHhmNSwweDU2LDB4ZTUsCisweDU2LDB4YzMsMHg5NCwweDAxLDB4NTAsMHgyNywweGU1LDB4NTQsMHg1NCwweDBmLDB4ZmMsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLAorMHg2OCwweDEyLDB4MGUsMHg3NywweDhjLDB4NTUsMHhlYywweDYwLDB4MDIsMHg4MCwweDEyLDB4MDUsMHg2YSwweGU1LDB4NmEsMHg3MCwKKzB4MDIsMHgwNSwweDY5LDB4MDUsMHg1NywweGU1LDB4NTcsMHg3MCwweDAyLDB4MDUsMHg1NiwweDgwLDB4ZDIsMHhlNSwweDU0LDB4NTQsCisweDBmLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg1NCwweGZlLDB4ZjYsMHhlNSwweDU0LDB4NTQsMHgwZiwweDdmLDB4MDAsMHhmZSwweDdjLAorMHgxMiwweDEyLDB4MzEsMHhmYiwweGU1LDB4NTUsMHgxNCwweDcwLDB4MDksMHg3ZCwweDAwLDB4N2MsMHgwOSwweDEyLDB4MjUsMHgyNiwKKzB4ODAsMHgwNywweGFkLDB4NTcsMHg3YywweDAwLDB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsCisweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHgzMCwweGU3LDB4MTMsMHg5MCwweGZmLAorMHg4MywweGUwLDB4NDQsMHg4MCwweGYwLDB4NDMsMHg2ZCwweDgwLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwKKzB4MTEsMHg5MCwweGZmLDB4ODIsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDUzLDB4NmQsMHg3ZiwweDkwLDB4ZmYsMHhmYywweGUwLDB4NTQsCisweGZlLDB4ZjAsMHg5MCwweGZmLDB4ODEsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDEyLDB4MjUsMHhkOSwweDkwLDB4ZmYsMHhmZSwweGUwLAorMHg0NCwweDA1LDB4ZjAsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwKKzB4ZTYsMHg3YywweDAxLDB4MTIsMHgzMiwweGE5LDB4NzgsMHhhZCwweGU2LDB4NDQsMHgwMiwweGY2LDB4NzQsMHhmZSwweGZjLDB4MDQsCisweGZkLDB4MTIsMHgxYywweGE3LDB4OTAsMHhmZiwweDVhLDB4ZTAsMHgzMCwweGU3LDB4MDIsMHg4MCwweGY3LDB4ZTQsMHhmNSwweDRlLAorMHg3NSwweDRkLDB4MTAsMHhhYywweDRlLDB4YWQsMHg0ZCwweGU1LDB4NGUsMHgxNSwweDRlLDB4NzAsMHgwMiwweDE1LDB4NGQsMHhlYywKKzB4NGQsMHg2MCwweDAyLDB4ODAsMHhlZSwweDQzLDB4ODcsMHgwMSwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4N2MsCisweDAyLDB4MTIsMHgzMSwweDc1LDB4NzgsMHhhZCwweGU2LDB4NTQsMHhmZCwweGY2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLAorMHhlNiwweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTAsMHgyYywweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTEsMHgyNiwweDc4LDB4YWQsMHhlNiwKKzB4ZmMsMHhmNSwweDgzLDB4MTgsMHhlNiwweDQ0LDB4ZjAsMHhmZCwweDEyLDB4MWMsMHgzYywweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsCisweDIwLDB4ZjAsMHg3YywweDAyLDB4MTIsMHgzMiwweGE5LDB4NzgsMHhhZCwweGU2LDB4NTQsMHhmZCwweGY2LDB4NzQsMHgxYSwweDkwLAorMHhmZiwweGZlLDB4ZjAsMHg3OCwweGFkLDB4ZTYsMHhmYywweGY1LDB4ODMsMHgxOCwweGU2LDB4NDQsMHhmMSwweGZkLDB4MTIsMHgxYywKKzB4M2MsMHgxMiwweDMxLDB4NjksMHgyMiwweDc1LDB4NmQsMHgwMCwweDkwLDB4ZmYsMHhmZiwweGUwLDB4NjAsMHgwMywweDQzLDB4NmQsCisweDAxLDB4NzUsMHg2ZSwweDAwLDB4ZTQsMHhmNSwweDZjLDB4ZjUsMHg2YiwweGU0LDB4ZjUsMHg2ZiwweDc1LDB4NzAsMHg0OSwweDc0LAorMHg4NCwweDkwLDB4ZmYsMHg4MiwweGYwLDB4NzQsMHg4NCwweDkwLDB4ZmYsMHg4MCwweGYwLDB4NzQsMHg4MCwweDkwLDB4ZmYsMHg1OCwKKzB4ZjAsMHg3NCwweDgwLDB4OTAsMHhmZiwweDVhLDB4ZjAsMHhhZCwweDQ2LDB4YWYsMHg0NSwweDdlLDB4MDAsMHhlZSwweDI0LDB4ZmUsCisweDUwLDB4MDMsMHgwMiwweDIxLDB4MjQsMHhlNCwweGVlLDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDdmLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlNCwweGVmLDB4NTQsMHg4MCwweGZkLDB4ZTQsMHhlZiwweDU0LDB4MGYsMHgxNCwKKzB4ZmYsMHhlZCwweDYwLDB4MzgsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsCisweGZmLDB4ZjUsMHg4MywweDc0LDB4OTAsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGEsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHg4MCwweDM0LDB4ZTQsMHhlZiwweDc1LDB4ZjAsCisweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDkwLDB4ZjAsMHhlNCwweGVmLAorMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlNCwKKzB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsCisweDBlLDB4MDIsMHgyMCwweDhkLDB4OGQsMHg0NiwweDhlLDB4NDQsMHg4ZiwweDQ1LDB4NzQsMHg3ZiwweDkwLDB4ZmYsMHhmZCwweGYwLAorMHg3NCwweDkwLDB4OTAsMHhmZiwweGZjLDB4ZjAsMHgyMiwweDhjLDB4NTgsMHhlYywweDI0LDB4ZjYsMHg1MCwweDA2LDB4ZTUsMHg1OCwKKzB4MjQsMHgzNywweGZjLDB4MjIsMHhlNSwweDU4LDB4MjQsMHgzMCwweGZjLDB4MjIsMHgxMiwweDI1LDB4MjMsMHhlYywweDcwLDB4MDMsCisweDAyLDB4MjIsMHg1ZSwweDc1LDB4NWMsMHgwMywweGFlLDB4NWIsMHg3ZiwweDAwLDB4ZTUsMHg1YywweDE1LDB4NWMsMHg2NCwweDgwLAorMHgyNCwweDdmLDB4NTAsMHgzNSwweGVmLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZTAsMHhmZSwKKzB4MjQsMHhmZSwweDUwLDB4MWUsMHhlZiwweDdkLDB4MDAsMHhmYywweGU0LDB4ZmIsMHg3NCwweDc0LDB4YzMsMHg5YywweGZhLDB4ZWIsCisweDlkLDB4ZmIsMHhlZSwweDdkLDB4MDAsMHhmYywweGVhLDB4YzMsMHg5YywweGVkLDB4NjQsMHg4MCwweGNiLDB4NjQsMHg4MCwweDliLAorMHg1MCwweDAyLDB4ODAsMHgwNSwweGVmLDB4MmUsMHhmZiwweDgwLDB4YzEsMHg4ZSwweDViLDB4OGYsMHg1YSwweGU1LDB4NWMsMHg2NCwKKzB4ODAsMHgyNCwweDdmLDB4NTAsMHgwMywweDAyLDB4MjIsMHg1ZSwweGU1LDB4NWEsMHgyNCwweDhlLDB4NTAsMHgwMywweDAyLDB4MjIsCisweDVlLDB4ODUsMHg1YSwweDVkLDB4NzUsMHg1YiwweDAwLDB4YWUsMHg1YSwweGFmLDB4NWIsMHg5MCwweDM1LDB4OWMsMHhlNCwweDkzLAorMHhmNSwweDVjLDB4ZTUsMHg1YywweDE1LDB4NWMsMHg2NCwweDgwLDB4MjQsMHg3ZiwweDUwLDB4MTgsMHhlZSwweDI0LDB4MDAsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZTAsMHhmYywweGVmLDB4OTAsMHgzNSwweDljLDB4OTMsMHg2YywweDcwLDB4MDQsCisweDBlLDB4MGYsMHg4MCwweGRlLDB4OGUsMHg1YSwweDhmLDB4NWIsMHhlNSwweDVjLDB4NjQsMHg4MCwweDI0LDB4N2YsMHg0MCwweDZlLAorMHg3NSwweDVlLDB4MDEsMHg3NSwweDYwLDB4ZTgsMHg3NSwweDVmLDB4ZmYsMHhlNSwweDVkLDB4MjQsMHgwMiwweGY1LDB4NWEsMHg3NSwKKzB4NWMsMHgwNywweGU1LDB4NWMsMHgzMywweDQwLDB4NTcsMHhhZCwweDYwLDB4YWUsMHg1ZiwweGFmLDB4NWUsMHhlNSwweDVjLDB4ZjUsCisweDgyLDB4MzMsMHg5NSwweGUwLDB4ZjUsMHg4MywweDEyLDB4MDEsMHhlYywweGM0LDB4NTQsMHgwZiwweGZjLDB4MTIsMHgyMSwweDM3LAorMHhlNSwweDVhLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDA1LDB4NWEsMHgwNSwKKzB4NWEsMHhhZCwweDYwLDB4YWUsMHg1ZiwweGFmLDB4NWUsMHhlNSwweDVjLDB4ZjUsMHg4MiwweDMzLDB4OTUsMHhlMCwweGY1LDB4ODMsCisweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhmYywweDEyLDB4MjEsMHgzNywweGU1LDB4NWEsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZiLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHgwNSwweDVhLDB4MDUsMHg1YSwweDE1LDB4NWMsMHg4MCwweGE0LDB4NzQsMHgwMiwKKzB4OTAsMHhmOCwweDUxLDB4ZjAsMHg5MCwweGY4LDB4NmIsMHg3OSwweDc1LDB4N2EsMHgzNSwweDdiLDB4MjcsMHg3OCwweDAxLDB4MTIsCisweDAzLDB4ZjUsMHg3NSwweDZhLDB4MzUsMHg3NSwweDY5LDB4ZmMsMHg3NSwweDY4LDB4MDEsMHhlNCwweDkwLDB4ZmYsMHg4MywweGYwLAorMHg3NCwweDgwLDB4OTAsMHhmZiwweDgxLDB4ZjAsMHg3NSwweDU5LDB4MDIsMHhlNSwweDU5LDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwKKzB4N2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4NzgsMHg4ZiwweGY2LDB4ZmMsMHg1NCwweDBmLDB4MTQsCisweGZjLDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlNSwweDU5LDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDgxLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4NzgsMHg5MiwweDc2LDB4ZmQsMHgwOCwweDc2LDB4ZTgsMHhmYywweDc4LDB4OGYsMHhlNiwKKzB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsCisweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVjLAorMHhmMCwweDc4LDB4OTIsMHhlNiwweGZmLDB4MDgsMHhlNiwweDdlLDB4MDMsMHhjZiwweGMzLDB4MTMsMHhjZiwweDEzLDB4ZGUsMHhmOSwKKzB4ZmUsMHg3OCwweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDksMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4ZWUsMHhmMCwweDc4LDB4OGYsMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0YSwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHg3OCwweDkwLDB4ZWMsMHhmNiwweDdkLDB4MDAsMHg3OCwweDkzLDB4ZTYsMHgyYywKKzB4ZjYsMHgxOCwweGU2LDB4M2QsMHhmNiwweDc4LDB4OTIsMHhlNiwweGZkLDB4MDgsMHhlNiwweDdjLDB4MDMsMHhjZCwweGMzLDB4MTMsCisweGNkLDB4MTMsMHhkYywweGY5LDB4ZmMsMHg3OCwweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGQsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4OGYsMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg5MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsCisweDc4LDB4OGYsMHhlNiwweGZmLDB4N2UsMHgwMCwweGVlLDB4MjQsMHhmZSwweDUwLDB4MDMsMHgwMiwweDI0LDB4ZGQsMHhlNCwweGVlLAorMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4N2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlNCwKKzB4ZWYsMHg1NCwweDgwLDB4ZmEsMHhlNCwweGVmLDB4NTQsMHgwZiwweDE0LDB4ZmYsMHhlNCwweGVlLDB4NzUsMHhmMCwweDA3LDB4YTQsCisweDI0LDB4ODEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4NzgsMHg5MCwweGY2LDB4ZTQsMHhlZSwweDEzLAorMHgxMywweDU0LDB4ODAsMHgyNCwweGYwLDB4ZjgsMHhlNCwweDM0LDB4ZmQsMHhmOSwweGU4LDB4ZmMsMHhlOSwweGZkLDB4OGEsMHg1YSwKKzB4ZWEsMHg3MCwweDAzLDB4MDIsMHgyNCwweDRhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsCisweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg5MCwweGU2LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LAorMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHhlZCwweGZiLDB4ZWMsMHg3YSwKKzB4MDMsMHhjYiwweGMzLDB4MTMsMHhjYiwweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsCisweDQ5LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4NzgsMHg5MCwweGU2LDB4N2IsMHgwMCwweGZhLAorMHhlYywweDJhLDB4ZmMsMHhlZCwweDNiLDB4ZmQsMHhmYiwweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwKKzB4ZjksMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4ZWEsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLAorMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHgwMiwweDI0LDB4ZDksMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsCisweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDkwLDB4ZTYsMHhmYSwweGU0LAorMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwKKzB4ZWQsMHhmYiwweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsCisweGYwLDB4MDgsMHhhNCwweDI0LDB4MDksMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHg3OCwweDkwLAorMHhlNiwweDdiLDB4MDAsMHhmYSwweGVjLDB4MmEsMHhmYywweGVkLDB4M2IsMHhmZCwweGZiLDB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywKKzB4MTMsMHhjYiwweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZCwweGY1LDB4ODIsCisweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwYSwweGY1LAorMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZSwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4MGUsMHgwMiwweDIzLDB4NjYsMHg4ZSwweDU5LDB4NzgsCisweDkyLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDc4LDB4OGYsMHhlZiwweGY2LDB4MTIsMHgyMCwweDU1LDB4MjIsMHg4YywweDI2LAorMHhlYywweDMwLDB4ZTcsMHgxOCwweGU1LDB4MjYsMHg1NCwweDBmLDB4MTQsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGRmLDB4ZjAsMHg4MCwweDE2LDB4ZTUsMHgyNiwweDU0LDB4MGYsCisweDE0LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LAorMHhkZiwweGYwLDB4MjIsMHg3YywweDAwLDB4MjIsMHhlYywweDkwLDB4ZmMsMHgzNywweGYwLDB4OGMsMHgyNCwweGVkLDB4MjQsMHgwMywKKzB4ZjUsMHgyNSwweDdkLDB4MDAsMHhkMywweDk1LDB4NzIsMHhlZCwweDk1LDB4NzEsMHg0MCwweDAzLDB4ODUsMHg3MiwweDI1LDB4ZTUsCisweDI1LDB4MjQsMHhiNywweDUwLDB4MDksMHg3NSwweDI1LDB4MDMsMHg3NCwweDAyLDB4OTAsMHhmYywweDM3LDB4ZjAsMHhhYywweDI1LAorMHgxMiwweDMwLDB4MjQsMHgyMiwweGU0LDB4ZjUsMHg2YywweGY1LDB4NmIsMHgxMiwweDI1LDB4NWQsMHgyMiwweDkwLDB4ZmMsMHgzNSwKKzB4ZTAsMHg2NSwweDczLDB4NjAsMHgwZSwweDc0LDB4MDQsMHg5MCwweGZjLDB4MzcsMHhmMCwweGU0LDB4ZjUsMHg2YiwweDc1LDB4NmMsCisweDAzLDB4ODAsMHg0NiwweDdkLDB4NzMsMHhlNCwweGZlLDB4ZmYsMHg3OSwweDM1LDB4N2EsMHhmYywweDdiLDB4MDEsMHg3NCwweDA1LAorMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4ZTUsMHg2YywweDI0LDB4MDMsMHhmNSwweDZjLDB4ZTUsMHg2YiwweDM0LDB4MDAsMHhmNSwKKzB4NmIsMHhlNSwweDZjLDB4ZDMsMHg5NSwweDcyLDB4ZTUsMHg2YiwweDk1LDB4NzEsMHg0MCwweDA2LDB4ODUsMHg3MiwweDZjLDB4ODUsCisweDcxLDB4NmIsMHhkMywweGU1LDB4NmMsMHg5NCwweDQ4LDB4ZTUsMHg2YiwweDk0LDB4MDAsMHg0MCwweDBjLDB4NzQsMHgwMiwweDkwLAorMHhmYywweDM3LDB4ZjAsMHhlNCwweGY1LDB4NmIsMHg3NSwweDZjLDB4MDMsMHhhYywweDZjLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhlYywKKzB4OTAsMHhmYywweDM3LDB4ZjAsMHhlNCwweGY1LDB4NmMsMHhmNSwweDZiLDB4OGMsMHgzMiwweGVjLDB4NjAsMHgwNSwweDEyLDB4MzAsCisweDE1LDB4ODAsMHgwNSwweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLAorMHhiMiwweGIzLDB4OTAsMHhmZiwweDA0LDB4ZTAsMHhmNSwweDRhLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhlZCwKKzB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZiwweGEzLDB4ZTAsMHg3ZSwweDAwLDB4ZmYsCisweGU0LDB4ZmUsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHhjMywweGVjLDB4OTQsMHg0OCwweGVkLDB4OTQsMHgwMCwweDUwLAorMHgyMiwweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHg5MCwKKzB4ZmYsMHgwNiwweGUwLDB4ZmYsMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmYywweGVkLDB4NGYsCisweGZkLDB4ODAsMHgwNCwweGU0LDB4ZmQsMHg3YywweDQ4LDB4OGMsMHg3MiwweDhkLDB4NzEsMHg5MCwweGZmLDB4MDIsMHhlMCwweGZkLAorMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHg5MCwweGZmLDB4MDIsMHhlMCwweGZmLDB4YTMsMHhlMCwKKzB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmNSwweDRjLDB4ZWQsMHg0ZiwweGY1LDB4NGIsMHg3NSwweDZhLDB4MzUsCisweDc1LDB4NjksMHhmYywweDc1LDB4NjgsMHgwMSwweDdkLDB4MzUsMHg3ZSwweGZjLDB4N2YsMHgwMSwweDc5LDB4NzMsMHhlNCwweGZhLAorMHhmYiwweDc0LDB4MDUsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4NzUsMHg0OSwweDAwLDB4ZTUsMHg0OSwweDI0LDB4ZmUsMHg0MCwKKzB4MTksMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHhlNCwweDEyLDB4MDMsMHgwZiwweDA1LDB4NDksMHgwZCwweGVkLDB4NzAsCisweDAxLDB4MGUsMHg4ZCwweDZhLDB4OGUsMHg2OSwweDhmLDB4NjgsMHg4MCwweGUxLDB4NzUsMHg2YSwweDM1LDB4NzUsMHg2OSwweGZjLAorMHg3NSwweDY4LDB4MDEsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4NjAsMHhiNCwweDAwLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwKKzB4MDMsMHgwMiwweDJjLDB4NmQsMHhlNSwweDRhLDB4NTQsMHgwZiwweGY1LDB4NDksMHhlNSwweDRhLDB4NTQsMHg4MCwweGEyLDB4ZTAsCisweDkyLDB4MDIsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLDB4MDEsMHg4MSwweDAwLDB4MGIsMHgyYywweDY4LDB4MjYsMHhlNSwweDI4LAorMHgwMywweDJjLDB4NjgsMHgyOSwweDBmLDB4MmMsMHg2OCwweDI5LDB4ZjIsMHgyYSwweDI2LDB4MmIsMHg4ZCwweDJiLDB4OTAsMHgyYiwKKzB4ZDAsMHgyYywweDExLDB4MmMsMHgzZiwweGU1LDB4NmQsMHgzMCwweGU3LDB4MGUsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDgsCisweGU1LDB4NzIsMHg2NCwweDAyLDB4NDUsMHg3MSwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LAorMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MjksMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjgsMHgwMCwKKzB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4NzQsMHgwMSwweDEyLDB4MDMsMHgwZiwweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTAsCisweDBiLDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4NzQsMHgwMiwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDIsMHgxMiwweDMwLAorMHgyNCwweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYiwweGU1LDB4NmQsMHgyMCwweGUxLDB4MDcsMHhlNSwKKzB4NGEsMHg2MCwweDAzLDB4MDIsMHgyOCwweDAwLDB4ZTUsMHg0YSwweDI0LDB4ZmUsMHg1MCwweDAzLDB4MDIsMHgyOCwweDAwLDB4N2MsCisweDAyLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyNywweGZlLAorMHhlNSwweDZkLDB4MjAsMHhlMSwweDBkLDB4ZTUsMHg0YSwweDYwLDB4MDksMHhlNSwweDRhLDB4NjQsMHg4MCwweDYwLDB4MDMsMHgwMiwKKzB4MjgsMHgwMCwweGFjLDB4NGEsMHgxMiwweDMwLDB4YWIsMHg0MCwweDAzLDB4MDIsMHgyOCwweDAwLDB4ZTUsMHg0OSwweDcwLDB4MjUsCisweDMwLDB4MDIsMHgxMSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwweDEyLAorMHgwMywweDBmLDB4ODAsMHgwZiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwKKzB4MTIsMHgwMywweDBmLDB4ODAsMHgzZCwweDE1LDB4NDksMHgzMCwweDAyLDB4MWQsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsCisweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LAorMHhhZiwweDY4LDB4MTIsMHgwMywweDBmLDB4ODAsMHgxYiwweGU1LDB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDA4LDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4MTIsCisweDAzLDB4MGYsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHgxMiwweDAxLDB4ZTYsMHg2MCwweDBiLDB4YWQsMHg2YSwweGFlLAorMHg2OSwweGFmLDB4NjgsMHg3NCwweDAxLDB4MTIsMHgwMywweDBmLDB4N2MsMHgwMiwweDEyLDB4MzAsMHgyNCwweDIyLDB4ODAsMHgwMCwKKzB4MDIsMHgyYywweDZhLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweGU1LDB4NzIsMHg0NSwweDcxLDB4NjAsMHgwMywweDAyLDB4MmMsCisweDZhLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYSwweGU1LAorMHg0YywweDE0LDB4NDUsMHg0YiwweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjksMHgwYywweDc4LDB4YWQsMHhlNiwKKzB4NTQsMHhmZSwweGY2LDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsCisweDJhLDB4ZTUsMHg2ZCwweDIwLDB4ZTEsMHgwOCwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHhlNSwweDZkLAorMHgzMCwweGUwLDB4MDQsMHhlNSwweDRhLDB4NzAsMHgwYiwweGU1LDB4NmQsMHgzMCwweGUxLDB4MDksMHhlNSwweDRhLDB4MjQsMHhmZSwKKzB4NTAsMHgwMywweDAyLDB4MjksMHgwYywweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDYsCisweGQzLDB4NTAsMHgwMywweDAyLDB4MjksMHgwYSwweGU1LDB4NGMsMHg0NSwweDRiLDB4NjAsMHgwMywweDAyLDB4MjksMHgwYywweGFjLAorMHg0YSwweDEyLDB4MzAsMHhhYiwweDQwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHhlNSwweDZkLDB4MjAsMHhlMSwweDA3LDB4ZTUsMHg2ZCwKKzB4MjAsMHhlMCwweDAyLDB4ODAsMHg3NywweGU1LDB4NmQsMHgzMCwweGUwLDB4MDYsMHhlNSwweDQ5LDB4NjAsMHgwMiwweDgwLDB4NmMsCisweGU1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg5MCwweGZmLDB4ODAsMHhlMCwweDU0LAorMHhmNywweGYwLDB4MjIsMHhlNSwweDQ5LDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwweDdkLDB4MDEsMHg3YywKKzB4MDMsMHgxMiwweDBmLDB4MDksMHg4MCwweDExLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwweDdkLDB4MDEsCisweDdjLDB4MDQsMHgxMiwweDBmLDB4MDksMHg4MCwweDAwLDB4MTUsMHg0OSwweDMwLDB4MDIsMHgxNSwweGU1LDB4NDksMHg3NSwweGYwLAorMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg4MCwKKzB4MTMsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsCisweGUwLDB4NTQsMHhmNywweGYwLDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsMHg2YSwweGU1LAorMHg2ZCwweDIwLDB4ZTcsMHgwNiwweGU1LDB4NzIsMHg0NSwweDcxLDB4NjAsMHgwMywweDAyLDB4MmMsMHg2YSwweDkwLDB4ZmYsMHgwMCwKKzB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYSwweGU1LDB4NGMsMHgxNCwweDQ1LDB4NGIsCisweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjksMHhlZiwweDc4LDB4YWQsMHhlNiwweDQ0LDB4MDEsMHhmNiwweDdjLAorMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgyOSwweGU1LDB4NmQsMHgyMCwKKzB4ZTEsMHgwOCwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI5LDB4ZWYsMHhlNSwweDZkLDB4MzAsMHhlMCwweDA0LDB4ZTUsCisweDQ5LDB4NzAsMHgwYiwweGU1LDB4NmQsMHgzMCwweGUxLDB4MDgsMHhlNSwweDQ5LDB4MjQsMHhmZSwweDUwLDB4MDIsMHg4MCwweDdmLAorMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDZmLDB4ZTUsMHg0YywKKzB4NDUsMHg0YiwweDYwLDB4MDIsMHg4MCwweDY5LDB4YWMsMHg0YSwweDEyLDB4MzAsMHhhYiwweDQwLDB4MDIsMHg4MCwweDYwLDB4ZTUsCisweDZkLDB4MjAsMHhlMSwweDA3LDB4ZTUsMHg2ZCwweDIwLDB4ZTAsMHgwMiwweDgwLDB4NTQsMHhlNSwweDQ5LDB4NzAsMHgxNCwweDMwLAorMHgwMiwweDA5LDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwKKzB4MDgsMHhmMCwweDIyLDB4ZTUsMHg2ZCwweDMwLDB4ZTEsMHgzMywweDE1LDB4NDksMHgzMCwweDAyLDB4MTUsMHhlNSwweDQ5LDB4NzUsCisweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgwOCwweGYwLAorMHg4MCwweDEzLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwKKzB4ODMsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweDgwLDB4MDIsMHg4MCwweDAwLDB4MDIsCisweDJjLDB4NmEsMHhlNSwweDZkLDB4MjAsMHhlNywweDEyLDB4ZTUsMHg3MiwweDQ1LDB4NzEsMHg3MCwweDBjLDB4ZTUsMHg0YSwweDcwLAorMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHhlNSwweDRjLDB4OTAsMHhmZiwKKzB4ZmYsMHhmMCwweDkwLDB4ZmYsMHhmZiwweGUwLDB4NjAsMHgwNSwweDQzLDB4NmQsMHgwMSwweDgwLDB4MDMsMHg1MywweDZkLDB4ZmUsCisweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweGU1LDB4NmQsMHgzMCwweGU3LDB4MGUsMHhlNSwweDcyLDB4NDUsMHg3MSwweDYwLAorMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHhhZCwweDRiLDB4ZTUsMHg0YywKKzB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHhiZCwweDAwLDB4MDIsMHg4MCwweDAzLDB4MDIsMHgyYiwweDg4LDB4YjQsCisweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDMyLDB4ZTUsMHg0YSwweDcwLDB4MDUsMHhlNSwweDRjLDB4ZmMsMHg2MCwweDAzLAorMHgwMiwweDJiLDB4OGEsMHg3NSwweDZhLDB4NDAsMHg3NSwweDY5LDB4ZjgsMHg3NSwweDY4LDB4MDEsMHhkMywweGU1LDB4NzIsMHg5NCwKKzB4MTIsMHhlNSwweDcxLDB4OTQsMHgwMCwweDQwLDB4MDYsMHhlNCwweGZkLDB4N2MsMHgxMiwweDgwLDB4MDQsMHhhYywweDcyLDB4YWQsCisweDcxLDB4OGMsMHg3MCwweDhkLDB4NmYsMHgxMiwweDMwLDB4MzksMHgyMiwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLAorMHg1OSwweGU1LDB4NGEsMHg2MCwweDAzLDB4MDIsMHgyYiwweDhhLDB4ZTUsMHg0YywweGZjLDB4NzAsMHgyNywweDc1LDB4NmEsMHg1MiwKKzB4NzUsMHg2OSwweGY4LDB4NzUsMHg2OCwweDAxLDB4ZDMsMHhlNSwweDcyLDB4OTQsMHgxOSwweGU1LDB4NzEsMHg5NCwweDAwLDB4NDAsCisweDA2LDB4ZTQsMHhmZCwweDdjLDB4MTksMHg4MCwweDA0LDB4YWMsMHg3MiwweGFkLDB4NzEsMHg4YywweDcwLDB4OGQsMHg2ZiwweDEyLAorMHgzMCwweDM5LDB4ODAsMHgyNSwweDc1LDB4NmEsMHg2YiwweDc1LDB4NjksMHhmOCwweDc1LDB4NjgsMHgwMSwweGQzLDB4ZTUsMHg3MiwKKzB4OTQsMHgyNywweGU1LDB4NzEsMHg5NCwweDAwLDB4NDAsMHgwNiwweGU0LDB4ZmQsMHg3YywweDI3LDB4ODAsMHgwNCwweGFjLDB4NzIsCisweGFkLDB4NzEsMHg4YywweDcwLDB4OGQsMHg2ZiwweDEyLDB4MzAsMHgzOSwweDIyLDB4YjQsMHgwMywweDAyLDB4ODAsMHgwNiwweGQzLAorMHg1MCwweDAzLDB4MDIsMHgyYiwweDg4LDB4ZTUsMHg0YywweGY1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDA0LDB4ZTAsMHhmZCwKKzB4YTMsMHhlMCwweDRkLDB4NjAsMHgwMywweDAyLDB4MmIsMHg4YSwweDgwLDB4MTgsMHg5MCwweGZiLDB4MDIsMHhlMCwweGZkLDB4YTMsCisweGUwLDB4ZmMsMHg5MCwweGZmLDB4MDUsMHhlMCwweDZjLDB4NzAsMHgwNywweDkwLDB4ZmYsMHgwNCwweGUwLDB4NmQsMHg2MCwweDAyLAorMHg4MCwweDY4LDB4ZTQsMHhmNSwweDcwLDB4ZjUsMHg2ZiwweDdmLDB4MDAsMHhlNSwweDQ5LDB4MTQsMHhjNSwweDQ5LDB4NjAsMHgwZiwKKzB4ZWYsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYiwweGY1LDB4ODMsMHhlMCwweDJmLDB4ZmYsMHg4MCwweGVhLDB4OGYsCisweDRhLDB4ZTUsMHg0YSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGUwLDB4N2QsMHgwMCwweGQzLAorMHg5NSwweDcyLDB4ZWQsMHg5NSwweDcxLDB4NDAsMHgwNiwweGFjLDB4NzIsMHhhZCwweDcxLDB4ODAsMHgwZiwweGU1LDB4NGEsMHgyNCwKKzB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGUwLDB4N2QsMHgwMCwweGZjLDB4OGMsMHg3MCwweDhkLDB4NmYsCisweGU1LDB4NGEsMHgyNCwweDAwLDB4ZmMsMHhlNCwweDM0LDB4ZmIsMHhmZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg4ZCwweDZhLAorMHg4ZSwweDY5LDB4OGYsMHg2OCwweDEyLDB4MzAsMHgzOSwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsMHg2YSwweDAyLDB4MmMsMHg2YSwKKzB4ZTUsMHg2ZCwweDMwLDB4ZTcsMHgxOSwweGU1LDB4NzIsMHgxNCwweDQ1LDB4NzEsMHg3MCwweDEyLDB4ZTUsMHg0YSwweDcwLDB4MGUsCisweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLAorMHg2YSwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDgsMHhlNSwweDZkLDB4MjAsMHhlMSwweDAzLDB4MDIsMHgyYywweDZhLDB4NzUsMHg2YSwKKzB4NmUsMHhlNCwweGY1LDB4NjksMHhmNSwweDY4LDB4ZTQsMHhmNSwweDZmLDB4MDQsMHhmNSwweDcwLDB4MTIsMHgzMCwweDM5LDB4MjIsCisweGU1LDB4NmQsMHgyMCwweGU3LDB4MTIsMHhlNSwweDcyLDB4NDUsMHg3MSwweDcwLDB4MGMsMHhlNSwweDRhLDB4NzAsMHgwOCwweDkwLAorMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NjAsMHgwMywweDAyLDB4MmMsMHg2YSwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDcsMHhlNSwKKzB4NmQsMHgyMCwweGUxLDB4MDIsMHg4MCwweDc0LDB4ODUsMHg0YywweDZlLDB4ZTUsMHg2ZSwweDcwLDB4MDgsMHg0MywweDZkLDB4MDEsCisweDUzLDB4NmQsMHhmZCwweDgwLDB4MDYsMHg1MywweDZkLDB4ZmUsMHg0MywweDZkLDB4MDIsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LAorMHgyMiwweGU1LDB4NmQsMHgzMCwweGU3LDB4MWEsMHhlNSwweDcyLDB4MTQsMHg0NSwweDcxLDB4NzAsMHgxMywweGU1LDB4NGEsMHg3MCwKKzB4MGYsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDksMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHgxNCwweDYwLDB4MDIsCisweDgwLDB4MzgsMHhlNSwweDZkLDB4MjAsMHhlMSwweDAyLDB4ODAsMHgzMSwweDdjLDB4MDEsMHgxMiwweDMwLDB4MjQsMHgyMiwweGU1LAorMHg2ZCwweDIwLDB4ZTcsMHgxNSwweGU1LDB4NzIsMHg0NSwweDcxLDB4NzAsMHgwZiwweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOSwKKzB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4MTQsMHg2MCwweDAyLDB4ODAsMHgwZiwweGU1LDB4NmQsMHgyMCwweGUxLDB4MDIsCisweDgwLDB4MDgsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHg4MCwweDAwLDB4MDIsMHgyZiwweDJiLDB4YjQsMHg0MCwweDAyLAorMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyZiwweDIxLDB4OTAsMHhmZiwweDAxLDB4ZTAsMHg5MCwweGZjLDB4MzUsMHhmMCwKKzB4ZTUsMHg0YSwweDkwLDB4ZmMsMHgzNiwweGYwLDB4ZTQsMHg5MCwweGZjLDB4MzcsMHhmMCwweGU1LDB4NmEsMHgyNCwweDAzLDB4ZjUsCisweDZhLDB4ZTUsMHg2OSwweDM0LDB4MDAsMHhmNSwweDY5LDB4YWQsMHg0YiwweGU1LDB4NGMsMHg4NSwweDZhLDB4ODIsMHg4NSwweDY5LAorMHg4MywweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLDB4MDEsMHhiNywweDJjLDB4ZDgsMHgwMSwKKzB4MmMsMHhmZSwweDAyLDB4MmQsMHgyOCwweDAzLDB4MmQsMHg1MiwweDA0LDB4MmQsMHhhMCwweDA1LDB4MmQsMHhkZCwweDA2LDB4MmUsCisweDAzLDB4MDcsMHgyZSwweDI5LDB4MDgsMHgyZSwweDU1LDB4MDksMHgyZSwweDdiLDB4MGIsMHgyZSwweGExLDB4MGMsMHgyZSwweGIwLAorMHg4MCwweDJlLDB4YjAsMHg4MSwweDAwLDB4MDAsMHgyZiwweDBlLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwKKzB4MjUsMHhiZiwweDIyLDB4N2QsMHgyNCwweDdlLDB4MzUsMHg3ZiwweDAyLDB4NzksMHgzOCwweDdhLDB4ZmMsMHg3YiwweDAxLDB4NzQsCisweDA4LDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweDdkLDB4MDgsMHg3YywweDAwLDB4MTIsMHgyNSwweDI2LDB4MjIsMHhlNSwweDZkLAorMHgyMCwweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwweGJmLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwKKzB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDEwLDB4MTIsMHgzMSwweGZiLDB4MjIsCisweDdkLDB4MDAsMHg3YywweDA3LDB4MTIsMHgyNSwweDI2LDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLAorMHgyNSwweGJmLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwKKzB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDExLDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3ZCwweDAwLDB4N2MsMHgwNywweDEyLDB4MjUsCisweDI2LDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLDB4MjUsMHhiZiwweDIyLDB4ZTUsMHg0YSwweGI0LAorMHgwNSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwYSwweDEyLDB4MzEsMHhmYiwKKzB4MjIsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA4LDB4MTIsCisweDMxLDB4ZmIsMHgyMiwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLAorMHgwMCwweGZlLDB4N2MsMHgxMywweDEyLDB4MzEsMHhmYiwweDIyLDB4N2QsMHgwMCwweDdjLDB4MDcsMHgxMiwweDI1LDB4MjYsMHgyMiwKKzB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgzNCwweGQzLDB4ZTUsMHg3MiwweDk0LDB4NDgsMHhlNSwweDcxLDB4OTQsMHgwMCwweDUwLDB4MDYsCisweGU1LDB4NzIsMHg0NSwweDcxLDB4NzAsMHgwNiwweDdjLDB4MDIsMHgxMiwweDI1LDB4YmYsMHgyMiwweGU1LDB4NGEsMHhiNCwweDAxLAorMHgwMywweGIzLDB4NDAsMHgwYiwweGMzLDB4YjQsMHgwMywweDAwLDB4NDAsMHgwOSwweGI0LDB4MDYsMHgwMCwweDUwLDB4MDQsMHgxMiwKKzB4MzAsMHhkMSwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLDB4MjIsMHhlNSwweDZkLDB4MjAsCisweGU3LDB4MWQsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLAorMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE2LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHgxMiwKKzB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsCisweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTksMHgxMiwweDMxLDB4ZmIsMHgyMiwweDdjLAorMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDIzLDB4NzQsMHg4MSwKKzB4OTAsMHhmZiwweDkzLDB4ZjAsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsCisweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE3LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLAorMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwKKzB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTgsMHgxMiwweDMxLDB4ZmIsCisweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDFkLAorMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwKKzB4ZmUsMHg3YywweDE1LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHgxMiwweDI1LDB4NWQsCisweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDcsMHgxMiwweDI1LDB4YmYsMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLAorMHhlNSwweDZkLDB4MzAsMHhlNywweDIwLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NzAsMHgxMCwweDkwLDB4ZmYsMHgwMSwKKzB4ZTAsMHhiNCwweDgwLDB4MDUsMHgxMiwweDI1LDB4NTQsMHg4MCwweDAzLDB4MTIsMHgyNSwweDVkLDB4MjIsMHg3ZCwweDAwLDB4N2MsCisweDA1LDB4MTIsMHgyNSwweDI2LDB4MjIsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDA2LDB4N2MsMHgwNSwweDEyLAorMHgyNSwweGJmLDB4MjIsMHhkMywweGU1LDB4NzIsMHg5NCwweDQ4LDB4ZTUsMHg3MSwweDk0LDB4MDAsMHg1MCwweDBiLDB4YzMsMHhlNSwKKzB4NzIsMHg5NCwweDA3LDB4ZTUsMHg3MSwweDk0LDB4MDAsMHg1MCwweDA2LDB4N2MsMHgwMywweDEyLDB4MjUsMHhiZiwweDIyLDB4ZTUsCisweDRhLDB4YjQsMHgwNSwweDA0LDB4MTIsMHgzMCwweGQxLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHhlNSwweDZkLAorMHgzMCwweGU3LDB4MDgsMHg3ZCwweDAwLDB4N2MsMHgwNSwweDEyLDB4MjUsMHgyNiwweDIyLDB4N2MsMHgwNSwweDEyLDB4MjUsMHhiZiwKKzB4MjIsMHhiNCwweDIwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4ODAsMHgwMCwweDEyLDB4MmYsMHhmZiwweDIyLDB4NzUsCisweDQzLDB4MDAsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LDB4MGYsMHhkMywweDk1LDB4NDMsMHg0MCwweDI0LDB4ZTUsMHg0MywweDI0LAorMHhmMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmUsMHhmNSwweDgzLDB4ZTAsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHgxMiwKKzB4MDMsMHgwZiwweDA1LDB4NDMsMHgwZCwweGVkLDB4NzAsMHgwMSwweDBlLDB4OGQsMHg2YSwweDhlLDB4NjksMHg4ZiwweDY4LDB4ODAsCisweGQxLDB4ZTUsMHg0MywweDdkLDB4MDAsMHhmYywweGMzLDB4ZTUsMHg3MCwweDljLDB4ZjUsMHg3MCwweGU1LDB4NmYsMHg5ZCwweGY1LAorMHg2ZiwweGU1LDB4NzAsMHg0NSwweDZmLDB4NjAsMHgwNiwweGU0LDB4OTAsMHhmZiwweDgzLDB4ZjAsMHgyMiwweDkwLDB4ZmYsMHg4MiwKKzB4ZTAsMHg0NCwweDA4LDB4ZjAsMHhlNCwweGY1LDB4NmYsMHg3NSwweDcwLDB4NDksMHg5MCwweGZjLDB4MzUsMHhlMCwweGI0LDB4MDUsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg0MCwweDkwLDB4ZmMsMHgzNiwweGUwLDB4ZjUsMHg0MywweGI0LDB4MDUsMHgwMiwweDgwLAorMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwYiwweDEyLDB4MzEsMHhmYiwweDIyLDB4YjQsMHgwMSwKKzB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA5LDB4MTIsMHgzMSwweGZiLDB4MjIsCisweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0MywweDdmLDB4MDAsMHhmZSwweDdjLAorMHgxNCwweDEyLDB4MzEsMHhmYiwweDIyLDB4MjIsMHhiNCwweDgwLDB4MDAsMHg0MCwweDIzLDB4YjQsMHg4MiwweDAwLDB4NTAsMHgxZSwKKzB4N2MsMHgzNSwweDdkLDB4ZmMsMHgxMiwweDE3LDB4N2UsMHg3ZCwweDAwLDB4OGMsMHg2YywweDhkLDB4NmIsMHg5MCwweGZjLDB4MzcsCisweGUwLDB4NjAsMHgwNSwweDEyLDB4MmYsMHhmZiwweDgwLDB4MDUsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHgyMiwweDkwLAorMHhmZiwweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg5MCwweGZmLDB4ODIsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLDB4ZmYsMHg4MCwKKzB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgyMiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsMHhmZiwweDgwLDB4ZTAsCisweDQ0LDB4MDgsMHhmMCwweDIyLDB4OGMsMHgyMywweDdkLDB4MDAsMHg4YywweDcwLDB4OGQsMHg2ZiwweDc1LDB4NmEsMHgzNSwweDc1LAorMHg2OSwweGZjLDB4NzUsMHg2OCwweDAxLDB4MTIsMHgzMCwweDM5LDB4MjIsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwKKzB4ZTUsMHg3MCwweDY0LDB4NDksMHg0NSwweDZmLDB4NzAsMHgwMSwweDIyLDB4YzMsMHhlNSwweDcwLDB4OTQsMHgwOCwweGU1LDB4NmYsCisweDk0LDB4MDAsMHg0MCwweDE1LDB4NzUsMHgyMSwweDA4LDB4ZTUsMHgyMSwweDdkLDB4MDAsMHhmYywweGMzLDB4ZTUsMHg3MCwweDljLAorMHhmNSwweDcwLDB4ZTUsMHg2ZiwweDlkLDB4ZjUsMHg2ZiwweDgwLDB4MDksMHg4NSwweDcwLDB4MjEsMHhlNCwweGY1LDB4NmYsMHg3NSwKKzB4NzAsMHg0OSwweDc1LDB4MjIsMHgwMCwweGU1LDB4MjIsMHhjMywweDk1LDB4MjEsMHg1MCwweDI2LDB4YWQsMHg2YSwweGFlLDB4NjksCisweGFmLDB4NjgsMHgxMiwweDAxLDB4ZTYsMHhmYywweGU1LDB4MjIsMHgyNCwweGY4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZSwweGY1LAorMHg4MywweGVjLDB4ZjAsMHgwNSwweDIyLDB4MGQsMHhlZCwweDcwLDB4MDEsMHgwZSwweDhkLDB4NmEsMHg4ZSwweDY5LDB4OGYsMHg2OCwKKzB4ODAsMHhkMywweGU1LDB4MjEsMHg1NCwweDdmLDB4OTAsMHhmZiwweDgxLDB4ZjAsMHgyMiwweDhjLDB4NDgsMHg3ZiwweDAwLDB4ZWYsCisweDI0LDB4ZmQsMHg0MCwweDE5LDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwNywweGE0LDB4MjQsMHg3ZiwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmOCwweGY1LDB4ODMsMHhlMCwweDY1LDB4NDgsMHg3MCwweDAyLDB4ZDMsMHgyMiwweDBmLDB4ODAsMHhlMiwweDhmLDB4NDcsMHhjMywKKzB4MjIsMHg4NSwweDcyLDB4NzAsMHg4NSwweDcxLDB4NmYsMHg5MCwweGZmLDB4ODIsMHhlMCwweDU0LDB4ZjcsMHhmMCwweDkwLDB4ZmYsCisweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHgyMiwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDYsMHhjMCwweDA3LAorMHhlNSwweDc4LDB4MjQsMHgwOCwweGY4LDB4ODYsMHgwNiwweDUzLDB4MDYsMHg3ZiwweDdjLDB4ZmYsMHgxMiwweDMxLDB4NWIsMHg3YywKKzB4MDAsMHg3ZCwweDAwLDB4ZTUsMHg3YiwweDYwLDB4NDYsMHhmZiwweDkwLDB4ZmQsMHg5NSwweGUwLDB4NTQsMHg3ZiwweDZlLDB4NzAsCisweDBmLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsMHhhMywweDE1LDB4N2IsMHg4MCwweDA3LAorMHhhMywweGEzLDB4YTMsMHhkZiwweGU2LDB4ODAsMHgyNiwweGRmLDB4MDYsMHhkMCwweDgyLDB4ZDAsMHg4MywweDgwLDB4MWUsMHhlMCwKKzB4ZjgsMHhhMywweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhkMCwweDgyLDB4ZDAsMHg4MywweGU4LDB4ZjAsMHhhMywweGU5LDB4ZjAsCisweGEzLDB4ZWEsMHhmMCwweGEzLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHg4MCwweGRhLDB4MTIsMHgzMSwweGY0LAorMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDIsMHhkMCwweDAxLDB4ZDAsMHgwMCwweDIyLDB4ODUsMHhhOCwweDdhLDB4NzUsMHhhOCwKKzB4ODgsMHhlYywweDcwLDB4MDIsMHg3YywweDNmLDB4OGMsMHg3OSwweDIyLDB4ZTUsMHg3OCwweDI0LDB4MDgsMHhmOCwweDc2LDB4MDAsCisweDEyLDB4MzIsMHg0OCwweDgwLDB4ZmIsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsMHhjMCwweDA2LDB4YzAsMHgwNywweGFlLAorMHgwNCwweDdjLDB4ZmYsMHgxMiwweDMxLDB4NWIsMHhlNSwweDdiLDB4NjAsMHg0MiwweGZmLDB4OTAsMHhmZCwweDk1LDB4ZTAsMHg1NCwKKzB4N2YsMHg2ZSwweDcwLDB4MGIsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDE1LDB4N2IsMHg4MCwweDA3LDB4YTMsCisweGEzLDB4YTMsMHhkZiwweGVhLDB4ODAsMHgyNiwweGRmLDB4MDYsMHhkMCwweDgyLDB4ZDAsMHg4MywweDgwLDB4ZDgsMHhlMCwweGY4LAorMHhhMywweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhkMCwweDgyLDB4ZDAsMHg4MywweGU4LDB4ZjAsMHhhMywweGU5LDB4ZjAsMHhhMywKKzB4ZWEsMHhmMCwweGEzLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHg4MCwweGRhLDB4NzgsMHgwOCwweDA4LDB4NzksCisweDE4LDB4MDksMHg3YywweDAxLDB4ZTYsMHg1NCwweDdmLDB4NmUsMHg3MCwweDA2LDB4NzYsMHgwMCwweDc3LDB4MDAsMHg4MCwweDA2LAorMHgwOCwweDA5LDB4MGMsMHhiYywweDA4LDB4ZWUsMHgxMiwweDMxLDB4ZjQsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDIsMHhkMCwKKzB4MDEsMHhkMCwweDAwLDB4MjIsMHg3NSwweDc5LDB4MDAsMHg4NSwweDdhLDB4YTgsMHgyMiwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsCisweDgzLDB4YzMsMHhlNSwweDdiLDB4MjQsMHhlOCwweDUwLDB4MDUsMHgxMiwweDMyLDB4NDgsMHg4MCwweGY0LDB4ZWMsMHg2MCwweDMxLAorMHg5MCwweDM1LDB4MjMsMHhlNCwweDkzLDB4YzMsMHg5YywweDQwLDB4MjgsMHhjMCwweDA0LDB4N2MsMHhmZiwweDEyLDB4MzEsMHg1YiwKKzB4ZDAsMHgwNCwweDQzLDB4MDQsMHg4MCwweGU1LDB4N2IsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4OTUsMHhmNSwweDgyLDB4ZTQsCisweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZWMsMHhmMCwweGVmLDB4YTMsMHhmMCwweGVlLDB4YTMsMHhmMCwweDA1LDB4N2IsMHgxMiwweDMxLAorMHhmNCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweDIyLDB4YzAsMHgwNCwweDdjLDB4MjAsMHhkMiwweDhjLDB4ZDIsMHg4ZCwKKzB4ZDUsMHgwNCwweGZkLDB4ZDAsMHgwNCwweDIyLDB4NzUsMHhhOCwweDAwLDB4NzUsMHg4OCwweDAwLDB4NzUsMHhiOCwweDAwLDB4NzUsCisweGYwLDB4MDAsMHg3NSwweGQwLDB4MDAsMHhlNCwweGY4LDB4OTAsMHgwMCwweDAwLDB4ZjYsMHgwOCwweGI4LDB4MDAsMHhmYiwweDAyLAorMHgwMCwweDAwLDB4YzMsMHhlZCwweDk0LDB4MDIsMHg1MCwweDA0LDB4N2QsMHgwMywweDdjLDB4ZTgsMHhlYywweGY0LDB4ZmMsMHhlZCwKKzB4ZjQsMHhmZCwweDBjLDB4YmMsMHgwMCwweDAxLDB4MGQsMHg4YywweDdmLDB4OGQsMHg3ZSwweDIyLDB4YzMsMHhlYywweDk0LDB4YmMsCisweGVkLDB4OTQsMHgwMiwweDUwLDB4MDQsMHg3ZCwweDA3LDB4N2MsMHhkMCwweGVjLDB4ZjQsMHhmYywweGVkLDB4ZjQsMHhmZCwweDBjLAorMHhiYywweDAwLDB4MDEsMHgwZCwweDhjLDB4N2QsMHg4ZCwweDdjLDB4MjIsMHhlYywweDcwLDB4MDEsMHgyMiwweGMwLDB4MDAsMHhlNSwKKzB4NzgsMHgyNCwweDE4LDB4ZjgsMHhhNiwweDA0LDB4ZTUsMHg3OCwweDI0LDB4MDgsMHhmOCwweGM2LDB4NTQsMHg3ZiwweGY2LDB4ZTYsCisweDMwLDB4ZTcsMHgwMywweGQwLDB4MDAsMHgyMiwweDEyLDB4MzIsMHg0OCwweDgwLDB4ZjQsMHhjMiwweDhjLDB4ODUsMHg3YywweDhjLAorMHg4NSwweDdkLDB4OGEsMHhkMiwweDhjLDB4YzAsMHhlMCwweGMwLDB4ZDAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwKKzB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4YzAsMHgwNSwweGMwLDB4MDYsMHhjMCwweDA3LDB4MTIsCisweDFhLDB4ZDEsMHhlNSwweDc4LDB4MjQsMHgwOCwweGY4LDB4ZTYsMHg2MCwweDI0LDB4ZTUsMHg3OCwweDI0LDB4MTAsMHhmOCwweGE2LAorMHg4MSwweGU1LDB4NzgsMHg3NSwweGYwLDB4MjEsMHhhNCwweDI0LDB4OGQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywKKzB4NzgsMHhhZSwweGU1LDB4ODEsMHgwNCwweGMzLDB4OTgsMHhmOSwweGU2LDB4ZjAsMHgwOCwweGEzLDB4ZDksMHhmYSwweDc0LDB4MDgsCisweDI1LDB4NzgsMHhmOCwweDA1LDB4NzgsMHgwOCwweGU2LDB4NTQsMHg4MCwweDcwLDB4MGMsMHhlNSwweDc4LDB4YjQsMHgwNywweGYzLAorMHg3OCwweDA4LDB4NzUsMHg3OCwweDAwLDB4ODAsMHhlZiwweGU1LDB4NzgsMHgyNCwweDEwLDB4ZjgsMHg4NiwweDgxLDB4ZTUsMHg3OCwKKzB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDhkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHg3OCwweGFlLDB4ZTUsCisweDgxLDB4MDQsMHhjMywweDk4LDB4ZjksMHhlMCwweGY2LDB4MDgsMHhhMywweGQ5LDB4ZmEsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLAorMHgwNSwweGQwLDB4MDQsMHhkMCwweDAzLDB4ZDAsMHgwMiwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwKKzB4ZjAsMHhkMCwweGQwLDB4ZDAsMHhlMCwweDMyLDB4YzAsMHhlMCwweGMwLDB4ZDAsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsCisweGMyLDB4OGUsMHg4NSwweDdlLDB4OGQsMHg4NSwweDdmLDB4OGIsMHhkMiwweDhlLDB4NzgsMHgxOSwweDc5LDB4MDksMHg3YSwweDA3LAorMHhlNywweDcwLDB4MDQsMHhhNiwweDAwLDB4ODAsMHgwYiwweGU2LDB4NjAsMHgwOCwweDE2LDB4ZTYsMHg3MCwweDA0LDB4ZTcsMHg0NCwKKzB4ODAsMHhmNywweDA4LDB4MDksMHhkYSwweGVhLDB4ZTUsMHg3OSwweDYwLDB4MTMsMHgxNCwweGY1LDB4NzksMHg3MCwweDBlLDB4ZTUsCisweDc4LDB4MjQsMHgwOCwweGY4LDB4NzYsMHgwMCwweDEyLDB4MzEsMHhmNCwweGQyLDB4OGMsMHhkMiwweDhkLDB4ZDAsMHgwMiwweGQwLAorMHgwMSwweGQwLDB4MDAsMHhkMCwweGQwLDB4ZDAsMHhlMCwweDMyLDB4NzUsMHg4MSwweGFkLDB4NzQsMHgyYSwweDkwLDB4ZmYsMHg5MywKKzB4ZjAsMHg3NSwweDdmLDB4MzAsMHg3NSwweDdlLDB4ZjgsMHg3NSwweDdkLDB4NjAsMHg3NSwweDdjLDB4ZjAsMHgxMiwweDA1LDB4MzYsCisweDEyLDB4MzQsMHg3YywweDEyLDB4MTcsMHgzNCwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLDB4YjIsMHhiMywweDEyLAorMHgzNCwweGE2LDB4MTIsMHgzMiwweDU2LDB4ODAsMHhkYSwweDIyLDB4YzAsMHgwMCwweDdjLDB4MDEsMHhlYywweDI0LDB4MDgsMHhmOCwKKzB4ZTYsMHg2MCwweDA5LDB4MGMsMHhiYywweDA4LDB4ZjUsMHgxMiwweDMyLDB4NDgsMHg4MCwweGVlLDB4ZDAsMHgwMCwweDIyLDB4YzAsCisweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAwLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhlZCwweDI0LDB4MTAsMHhmOCwweDc2LAorMHhiYywweGVkLDB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDhkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhjMCwKKzB4ODIsMHhjMCwweDgzLDB4YTMsMHhhMywweGU0LDB4NzgsMHgwZCwweGYwLDB4YTMsMHhkOCwweGZjLDB4ZWMsMHg1NCwweDdmLDB4NzUsCisweGYwLDB4MDIsMHhhNCwweDI0LDB4ZWYsMHhmNSwweDgyLDB4ZTUsMHhmMCwweDM0LDB4MzQsMHhmNSwweDgzLDB4ZTQsMHg5MywweGZlLAorMHg3NCwweDAxLDB4OTMsMHhmNSwweDgyLDB4OGUsMHg4MywweGU0LDB4OTMsMHhmZSwweDc0LDB4MDEsMHg5MywweGZmLDB4ZDAsMHg4MywKKzB4ZDAsMHg4MiwweGVmLDB4ZjAsMHhhMywweGVlLDB4ZjAsMHhlZCwweDI0LDB4MDgsMHhmOCwweGVjLDB4NDQsMHg4MCwweGY2LDB4ZDAsCisweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHgyMiwweDc1LDB4NzgsMHgwMCwweDc1LAorMHg3YiwweDAwLDB4N2EsMHgwOCwweDc5LDB4MTgsMHg3OCwweDA4LDB4NzYsMHgwMCwweDc3LDB4MDAsMHgwOCwweDA5LDB4ZGEsMHhmOCwKKzB4ZTQsMHg3OCwweDA4LDB4NzQsMHg4MCwweDQ0LDB4N2YsMHhmNiwweDc0LDB4MDEsMHg0NCwweDEwLDB4ZjUsMHg4OSwweDc1LDB4YjgsCisweDA4LDB4ZDIsMHhhYiwweGQyLDB4YTksMHgyMiwweDc1LDB4ODEsMHhhZCwweGQyLDB4OGUsMHhkMiwweDhjLDB4ZDIsMHhhZiwweGU1LAorMHg3YiwweDYwLDB4MzIsMHhmZiwweDkwLDB4ZmQsMHg5NSwweGUwLDB4NTQsMHg4MCwweDYwLDB4MjQsMHg3OCwweDA4LDB4NzksMHgwOCwKKzB4ZTAsMHg1NCwweDdmLDB4ZmEsMHg3YiwweDAwLDB4ZTYsMHg1NCwweDdmLDB4YjUsMHgwMiwweDAyLDB4N2IsMHhmZiwweDA4LDB4ZDksCisweGY1LDB4ZWIsMHg3MCwweDBjLDB4ZWEsMHhmMCwweDEyLDB4MzMsMHhmOCwweGFkLDB4MDQsMHhhYywweDAyLDB4MTIsMHgzNCwweDBmLAorMHhhMywweGEzLDB4YTMsMHhkZiwweGQyLDB4MTIsMHgzMiwweDQ4LDB4ODAsMHhjNSwweDdjLDB4MDEsMHg3ZCwweDAwLDB4MjIsMHgwNCwKKzB4ZjUsMHgwNCwweGU5LDB4MDQsMHhlZCwweDA0LDB4ZTEsMHgwNCwweGRkLDB4MDQsMHhkOSwweDA0LDB4ZTUsMHgwNCwweGYxLDB4MDQsCisweDlkLDB4MDQsMHhhMSwweDA0LDB4Y2QsMHgwNCwweGQxLDB4MDQsMHg5OSwweDA0LDB4OTksMHgwNCwweDk5LDB4MDQsMHhkNSwweDA0LAorMHhiNSwweDA0LDB4YWQsMHgwNCwweGIxLDB4MDQsMHhhOSwweDA0LDB4YzEsMHgwNCwweGJkLDB4MDQsMHhiOSwweDA0LDB4YzUsMHgwNCwKKzB4YzksMHgwNCwweGE1LDB4MTksMHgwMSwweDAzLDB4MDAsMHgyMiwweDAwLDB4NDgsMHgwMiwweDAwLDB4NDgsMHgwZSwweDMwLDB4MTQsCisweDIwLDB4YzgsMHgxYSwweGQwLDB4MTgsMHgwYSwweDBjLDB4MDUsMHgwNiwweDAyLDB4MDMsMHgwMSwweDAyLDB4MDAsMHgwMSwweGNlLAorMHgwMSwweDgxLDB4MDEsMHgwMCwweDAwLDB4YzAsMHgwMCwweDgwLDB4MDAsMHg2MCwweDAwLDB4MzAsMHgwMCwweDE4LDB4MDAsMHgxMCwKKzB4MDAsMHgwOCwweDAwLDB4MDQsMHgwMCwweDAyLDB4MDAsMHgwMSwweDAwLDB4MDgsMHgxOCwweDM4LDB4MjgsMHgwYywweDA1LDB4MTAsCisweDBhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMSwweDEwLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweGZiLDB4ZTAsMHhmYiwweGYyLDB4MDksMHgwMiwweDI3LDB4MDAsMHgwMSwweDAyLDB4MDAsMHhhMCwweDMyLDB4MDksMHgwNCwKKzB4MDAsMHgwMCwweDAzLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwNywweDA1LDB4ODEsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsCisweDAxLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywweDA1LDB4ODMsMHgwMywweDAyLDB4MDAsMHgwMSwweDIyLDB4MDMsMHg1NCwweDAwLAorMHg1NSwweDAwLDB4NTMsMHgwMCwweDQyLDB4MDAsMHgzMywweDAwLDB4MzQsMHgwMCwweDMxLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMCwKKzB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsCisweDAwLDB4MDAsCit9OworCisjZW5kaWYgLyogaWZuZGVmIF9USV9GV18zNDEwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfNTA1Mi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzUwNTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzUwNTIuaApAQCAtMCwwICsxLDg4NSBAQAorLyogdmk6IHRzPTggc3c9OAorICoKKyAqIFRJIDUwNTIgVVNCIFNlcmlhbCBEcml2ZXIgRmlybXdhcmUgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9USV9GV181MDUyX0hfCisjZGVmaW5lIF9USV9GV181MDUyX0hfCisKKy8qIGZpcm13YXJlIDkvMTgvMDQgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdGlfZndfNTA1MltdID0geworMHhDMSwgMHgzNSwJLyogZmlybXdhcmUgaW1hZ2UgbGVuZ3RoIGV4Y2x1ZGluZyBoZWFkZXIsIGxpdHRsZSBlbmRpYW4gKi8KKzB4MDAsIAkJLyogcGxhY2Vob2xkZXIgZm9yIGNoZWNrc3VtICovCisKKzB4MDIsMHgwMCwweDFlLDB4MDIsMHgxYiwweDMyLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAyLDB4MzIsMHg2YSwweGZmLDB4ZmYsCisweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMiwweDMzLDB4MTUsMHg3NSwweDgxLAorMHhjOCwweDkwLDB4ZmUsMHhmMCwweDg1LDB4ODMsMHhhMCwweDEyLDB4MzQsMHg3ZCwweGVjLDB4NGQsMHg2MCwweDZhLDB4NzgsMHhhNSwKKzB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LDB4OTYsMHhmYSwweDc4LDB4NzksMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsCisweDVmLDB4ZmEsMHg3OCwweDIwLDB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LDB4MjAsMHhmYSwweDkwLDB4ZmUsMHhlNSwweGFlLAorMHg4MywweGFmLDB4ODIsMHg5MCwweGZkLDB4MDAsMHgxMiwweDAwLDB4YTEsMHg2MCwweDA1LDB4ZTQsMHhmMCwweGEzLDB4ODAsMHhmNiwKKzB4OTAsMHhmZSwweGYwLDB4YTgsMHg4MiwweDkwLDB4ZmUsMHhmMCwweGE5LDB4ODIsMHhlOCwweGMzLDB4OTksMHg1MCwweDA1LDB4NzYsCisweDAwLDB4MDgsMHg4MCwweGY2LDB4OTAsMHgwMCwweGZmLDB4MTIsMHgwMCwweGFhLDB4OTAsMHgwMSwweDAzLDB4MTIsMHgwMCwweGFhLAorMHg5MCwweDAxLDB4MDcsMHgxMiwweDAwLDB4YWEsMHg5MCwweDAxLDB4MGIsMHgxMiwweDAwLDB4YzgsMHg5MCwweDAxLDB4MTEsMHgxMiwKKzB4MDAsMHhjOCwweDkwLDB4MDEsMHgxNywweDEyLDB4MDAsMHhjOCwweDc1LDB4ZDAsMHgwMCwweDEyLDB4MzMsMHg2NywweDAyLDB4MDEsCisweDFkLDB4ZWYsMHg2NSwweDgyLDB4NzAsMHgwMywweGVlLDB4NjUsMHg4MywweDIyLDB4ZTQsMHg5MywweGY4LDB4NzQsMHgwMSwweDkzLAorMHhmOSwweDc0LDB4MDIsMHg5MywweGZlLDB4NzQsMHgwMywweDkzLDB4ZjUsMHg4MiwweDhlLDB4ODMsMHhlOCwweDY5LDB4NzAsMHgwMSwKKzB4MjIsMHhlNCwweDkzLDB4ZjYsMHhhMywweDA4LDB4ODAsMHhmNCwweGU0LDB4OTMsMHhmYywweDc0LDB4MDEsMHg5MywweGZkLDB4NzQsCisweDAyLDB4OTMsMHhmZSwweDc0LDB4MDMsMHg5MywweGZmLDB4NzQsMHgwNCwweDkzLDB4ZjgsMHg3NCwweDA1LDB4OTMsMHhmNSwweDgyLAorMHg4OCwweDgzLDB4MTIsMHgwMCwweGExLDB4NzAsMHgwMSwweDIyLDB4ZTQsMHg5MywweGEzLDB4YTgsMHg4MywweGE5LDB4ODIsMHg4YywKKzB4ODMsMHg4ZCwweDgyLDB4ZjAsMHhhMywweGFjLDB4ODMsMHhhZCwweDgyLDB4ODgsMHg4MywweDg5LDB4ODIsMHg4MCwweGUzLDB4MjEsCisweDIxLDB4MDQsMHg5MiwweDdhLDB4N2EsMHgwNCwweDkyLDB4YTYsMHhhOCwweDA0LDB4OTIsMHhmZSwweGYwLDB4MDQsMHg5NCwweDA0LAorMHg5NCwweGZiLDB4ZmIsMHgwNCwweDk5LDB4MDQsMHg5NCwweGZiLDB4ZmIsMHgwNCwweGY5LDB4MDQsMHhmOSwweDgwLDB4ZmUsMHhkMCwKKzB4ZjAsMHgzMCwweGYwLDB4MDksMHgyMCwweGYzLDB4MDMsMHhmNiwweDgwLDB4MTAsMHhmNywweDgwLDB4MGQsMHgzMCwweGYxLDB4MDksCisweDIwLDB4ZjMsMHgwMywweGYyLDB4ODAsMHgwNCwweGYzLDB4ODAsMHgwMSwweGYwLDB4MjAsMHhmNCwweDA0LDB4ZmMsMHhkMCwweGUwLAorMHhjYywweDIyLDB4Y2MsMHhjMCwweGUwLDB4MTIsMHgwMSwweDVhLDB4MDIsMHgwMSwweDRiLDB4YmMsMHgwMCwweDA1LDB4ZDAsMHhmMCwKKzB4YWMsMHhmMCwweDIyLDB4YzMsMHgxMywweGRjLDB4ZmMsMHgwMiwweDAxLDB4MjEsMHhiZiwweDAwLDB4MDksMHhlZCwweDI1LDB4ODIsCisweDc1LDB4ZjAsMHgwMSwweGY4LDB4ZTYsMHgyMiwweGJmLDB4MDEsMHgwZiwweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LAorMHg4MywweGY1LDB4ODMsMHg3NSwweGYwLDB4MDQsMHhlMCwweDIyLDB4ZWQsMHgyNSwweDgyLDB4NzUsMHhmMCwweDAyLDB4ZjgsMHhlMiwKKzB4MjIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGY1LDB4ZjAsMHhjMywweGU0LDB4OTMsMHhhMywweGM1LDB4ZjAsMHg5NSwweGYwLDB4YzAsCisweGUwLDB4YzMsMHhkMCwweGYwLDB4ZTQsMHg5MywweGEzLDB4OTUsMHhmMCwweDQwLDB4MTIsMHhhMywweGEzLDB4YzMsMHhlNSwweGYwLAorMHgzMywweDUwLDB4MDIsMHgwNSwweDgzLDB4MjUsMHg4MiwweGY1LDB4ODIsMHg1MCwweDAyLDB4MDUsMHg4MywweDc0LDB4MDEsMHg5MywKKzB4YzAsMHhlMCwweGU0LDB4OTMsMHhjMCwweGUwLDB4MjIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGY1LDB4ZjAsMHhlNCwweDkzLDB4NzAsCisweDA5LDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwNCwweGEzLDB4YTMsMHg4MCwweDBjLDB4NzQsMHgwMiwweDkzLDB4NjUsMHhmMCwweDYwLAorMHgwNSwweGEzLDB4YTMsMHhhMywweDgwLDB4ZTcsMHg3NCwweDAxLDB4OTMsMHhjMCwweGUwLDB4ZTQsMHg5MywweGMwLDB4ZTAsMHgyMiwKKzB4MTIsMHgwMiwweDViLDB4MDIsMHgwMSwweGYyLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMSwweGYyLDB4MTIsMHgwMiwweGQzLDB4MDIsCisweDAxLDB4ZjIsMHgzMCwweGUwLDB4MDcsMHgyMCwweGUzLDB4MDIsMHhlNiwweDIyLDB4ZTcsMHgyMiwweDMwLDB4ZTEsMHgwNywweDIwLAorMHhlMywweDAyLDB4ZTIsMHgyMiwweGUzLDB4MjIsMHgzMCwweGUyLDB4MDIsMHhlMCwweDIyLDB4ZTQsMHg5MywweDIyLDB4MTIsMHgwMiwKKzB4ZDMsMHgwMiwweDAyLDB4MWEsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAyLDB4MWEsMHhhYiwweGYwLDB4MTIsMHgwMiwweDI0LDB4Y2IsCisweGM1LDB4ZjAsMHhjYiwweDIyLDB4MzAsMHhlMCwweDEwLDB4MjAsMHhlMywweDA2LDB4ZTYsMHhmNSwweGYwLDB4MDgsMHhlNiwweDIyLAorMHhlNywweGY1LDB4ZjAsMHgwOSwweGU3LDB4MTksMHgyMiwweDMwLDB4ZTEsMHgxMCwweDIwLDB4ZTMsMHgwNiwweGUyLDB4ZjUsMHhmMCwKKzB4MDgsMHhlMiwweDIyLDB4ZTMsMHhmNSwweGYwLDB4MDksMHhlMywweDE5LDB4MjIsMHgzMCwweGUyLDB4MDYsMHhlMCwweGY1LDB4ZjAsCisweGEzLDB4ZTAsMHgyMiwweGU0LDB4OTMsMHhmNSwweGYwLDB4NzQsMHgwMSwweDkzLDB4MjIsMHhiYiwweDAwLDB4MDMsMHg3NCwweDA5LAorMHgyMiwweGJiLDB4MDEsMHgwNywweDg5LDB4ODIsMHg4YSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmIsMHgwMiwweDA3LDB4ODksMHg4MiwKKzB4OGEsMHg4MywweDc0LDB4MTAsMHgyMiwweDc0LDB4MGEsMHgyMiwweDAyLDB4MDIsMHg3YiwweGJiLDB4MDAsMHgwNywweGU5LDB4MjUsCisweDgyLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiYiwweDAxLDB4MGQsMHhlOSwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWEsMHgzNSwweDgzLAorMHhmNSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmIsMHgwMiwweDBkLDB4ZTksMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVhLDB4MzUsMHg4MywKKzB4ZjUsMHg4MywweDc0LDB4MTAsMHgyMiwweGU5LDB4MjUsMHg4MiwweGY4LDB4NzQsMHgwMiwweDIyLDB4MDIsMHgwMiwweGFmLDB4YmYsCisweDAwLDB4MDUsMHhlZCwweGY4LDB4NzQsMHgwMSwweDIyLDB4YmYsMHgwMSwweDA3LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg3NCwweDA0LAorMHgyMiwweGJmLDB4MDIsMHgwNywweDhkLDB4ODIsMHg4ZSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZWQsMHhmOCwweDc0LDB4MDIsMHgyMiwKKzB4MDIsMHgwMiwweGQzLDB4YmYsMHgwMCwweDA3LDB4ZWQsMHgyNSwweDgyLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiZiwweDAxLDB4MGQsCisweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LDB4ODMsMHhmNSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmYsMHgwMiwweDBkLAorMHhlZCwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWUsMHgzNSwweDgzLDB4ZjUsMHg4MywweDc0LDB4MTAsMHgyMiwweGVkLDB4MjUsMHg4MiwKKzB4ZjgsMHg3NCwweDAyLDB4MjIsMHgwMiwweDAzLDB4MDcsMHhjMCwweGUwLDB4MTIsMHgwMiwweDViLDB4MDIsMHgwMywweDFmLDB4YzAsCisweGUwLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMywweDFmLDB4YzAsMHhlMCwweDEyLDB4MDIsMHhkMywweDAyLDB4MDMsMHgxZiwweDMwLAorMHhlMCwweDBiLDB4MjAsMHhlMywweDA0LDB4ZDAsMHhlMCwweGY2LDB4MjIsMHhkMCwweGUwLDB4ZjcsMHgyMiwweDMwLDB4ZTEsMHgwYiwKKzB4MjAsMHhlMywweDA0LDB4ZDAsMHhlMCwweGYyLDB4MjIsMHhkMCwweGUwLDB4ZjMsMHgyMiwweGQwLDB4ZTAsMHhmMCwweDIyLDB4YzksCisweGNkLDB4YzksMHhjYSwweGNlLDB4Y2EsMHhjYiwweGNmLDB4Y2IsMHgxMiwweDAzLDB4NTIsMHhlZCwweGY5LDB4ZWUsMHhmYSwweGVmLAorMHhmYiwweDIyLDB4YmIsMHgwMCwweDJmLDB4YmYsMHgwMCwweDBhLDB4ZmEsMHhlZCwweGY4LDB4ZTcsMHhmNiwweDA4LDB4MDksMHhkYSwKKzB4ZmEsMHgyMiwweGJmLDB4MDEsMHgxMiwweDhkLDB4ODIsMHg4ZSwweDgzLDB4ZjgsMHgwMiwweDAzLDB4NmYsMHgwOSwweGEzLDB4ZTcsCisweGYwLDB4ZDgsMHhmYSwweDIyLDB4MDIsMHgwMywweDdhLDB4ZmEsMHhlZCwweGY4LDB4ZTcsMHhmMiwweDA4LDB4MDksMHhkYSwweGZhLAorMHgyMiwweDAyLDB4MDMsMHg4NCwweGJiLDB4MDEsMHg0ZCwweGJmLDB4MDAsMHgxNCwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjksMHhlZCwKKzB4ZjgsMHgwMiwweDAzLDB4OTYsMHgwOCwweGEzLDB4ZTAsMHhmNiwweGQ5LDB4ZmEsMHgyMiwweDAyLDB4MDMsMHhhNywweGJmLDB4MDEsCisweDIyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmYiwweDA4LDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGUwLAorMHhhMywweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhmMCwweGEzLDB4ZGIsMHhlYSwweGQ4LDB4ZTgsMHgyMiwKKzB4MDIsMHgwMywweGNhLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOSwweGVkLDB4ZjgsMHhlMCwweGYyLDB4MDgsMHhhMywweGQ5LDB4ZmEsCisweDIyLDB4MDIsMHgwMywweGQ0LDB4YmIsMHgwMiwweDRkLDB4YmYsMHgwMCwweDEyLDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLAorMHhmOCwweDAyLDB4MDMsMHhlNiwweDA4LDB4YTMsMHhlNCwweDkzLDB4ZjYsMHhkOSwweGY5LDB4MjIsMHhiZiwweDAxLDB4MjMsMHg4ZCwKKzB4ODIsMHg4ZSwweDgzLDB4ZmIsMHgwOCwweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhlNCwweDkzLDB4YTMsCisweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhmMCwweGEzLDB4ZGIsMHhlOSwweGQ4LDB4ZTcsMHgyMiwweDAyLAorMHgwNCwweDE5LDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLDB4ZjgsMHhlNCwweDkzLDB4ZjIsMHgwOCwweGEzLDB4ZDksMHhmOSwKKzB4MjIsMHgwMiwweDA0LDB4MmEsMHhiZiwweDAwLDB4MGQsMHhmYSwweGVkLDB4ZjgsMHhlMywweGY2LDB4MDgsMHgwOSwweGRhLDB4ZmEsCisweDIyLDB4MDIsMHgwNCwweDM0LDB4YmYsMHgwMSwweDEyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOCwweDAyLDB4MDQsMHg0MSwweDA5LAorMHhhMywweGUzLDB4ZjAsMHhkOCwweGZhLDB4MjIsMHgwMiwweDA0LDB4NGMsMHhmYSwweGVkLDB4ZjgsMHhlMywweGYyLDB4MDgsMHgwOSwKKzB4ZGEsMHhmYSwweDIyLDB4MDIsMHgwNCwweDU2LDB4ZTYsMHhmYiwweDA4LDB4ZTYsMHhmYSwweDA4LDB4ZTYsMHhmOSwweDA0LDB4ZjYsCisweDE4LDB4NzAsMHgwMSwweDA2LDB4MjIsMHhlNiwweGZmLDB4MDgsMHhlNiwweGZlLDB4MDgsMHhlNiwweGZkLDB4MjIsMHhlZiwweGYwLAorMHhhMywweGVlLDB4ZjAsMHhhMywweGVkLDB4ZjAsMHgyMiwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5LDB4ZjAsMHgyMiwKKzB4ZTAsMHhmZiwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsCisweGY5LDB4MjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4ZjksMHgwMCwweDViLDB4MDUsMHg3MywweDAwLAorMHgyNiwweDA1LDB4OWEsMHgwMCwweDMzLDB4MGEsMHgwYiwweDAwLDB4NWIsMHgwYSwweDc3LDB4MDAsMHg2MCwweDE1LDB4NTIsMHgwMCwKKzB4NWIsMHgwYywweGZiLDB4MDAsMHg1YiwweDA5LDB4YWIsMHgwMCwweDViLDB4MDksMHhlMiwweDAwLDB4NWIsMHgwZCwweGMyLDB4MDAsCisweDViLDB4MGIsMHhmMywweDAwLDB4NWIsMHgwYSwweDFlLDB4MDAsMHg1YiwweDBhLDB4NTMsMHgwMCwweDViLDB4MTcsMHg0YSwweDAwLAorMHgzMywweDE3LDB4NjAsMHgwMCwweDM0LDB4MWUsMHg0ZCwweDAwLDB4NDMsMHgxZSwweGYwLDB4MDAsMHg0NCwweDIwLDB4NWQsMHgwMCwKKzB4NDQsMHgyMCwweDRiLDB4MDAsMHg0NywweDFmLDB4MTcsMHgwMCwweDQ3LDB4MWYsMHhiYywweDAwLDB4NGQsMHgyMCwweDBkLDB4MDAsCisweDRmLDB4MWYsMHgzOSwweDAwLDB4NTgsMHgzMSwweGY1LDB4MDAsMHg1YiwweDdjLDB4Y2MsMHg3ZCwweGZmLDB4MTIsMHgxYywweGZlLAorMHgyMiwweDc0LDB4OTAsMHg5MCwweGZmLDB4OTEsMHhmMCwweDkwLDB4ZmYsMHhmYywweGUwLDB4MjAsMHhlNywweDJkLDB4YzIsMHhhZiwKKzB4YWUsMHg1OSwweGFmLDB4NTgsMHg3NSwweDVhLDB4MjAsMHhlNSwweDVhLDB4MTQsMHhjNSwweDVhLDB4NjAsMHgxOSwweGU0LDB4ZmUsCisweDdmLDB4MDUsMHhlZSwweDRmLDB4Y2UsMHgyNCwweGZmLDB4Y2UsMHhjZiwweDM0LDB4ZmYsMHhjZiwweDYwLDB4MDcsMHhlNCwweDkwLAorMHhmZiwweDkyLDB4ZjAsMHg4MCwweGVkLDB4ODAsMHhlMCwweDhlLDB4NTksMHg4ZiwweDU4LDB4MjIsMHgxMiwweDA1LDB4MDEsMHg3ZCwKKzB4MDcsMHg3YywweGI3LDB4MTIsMHgzMiwweDExLDB4N2QsMHgwZiwweDdjLDB4NmUsMHgxMiwweDMyLDB4MmIsMHg3OCwweDk3LDB4N2EsCisweDA2LDB4ZTQsMHhmNiwweDA4LDB4ZGEsMHhmYywweDdhLDB4MDYsMHgxMiwweDA1LDB4Y2YsMHg3YywweDAzLDB4MTIsMHgwZSwweDU3LAorMHg3YywweDA0LDB4MTIsMHgwZSwweDU3LDB4MTIsMHgyMSwweDhiLDB4ZTQsMHhmZSwweGZmLDB4N2MsMHgwZiwweDEyLDB4MzEsMHg5YSwKKzB4ZDIsMHhhOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4ZTQsMHg5MCwweGZkLDB4NDAsMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsCisweGU0LDB4MDgsMHg3NCwweDAxLDB4OTAsMHhmZCwweDQxLDB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MCwweGZkLDB4NDEsMHhmMCwweDdkLAorMHgwYSwweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDkwLDB4ZmQsMHg0MSwKKzB4ZTAsMHgxNCwweDcwLDB4MGUsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LDB4MTAsMHhmMCwweDdjLDB4MDAsMHgxMiwweDI1LDB4NGEsCisweDgwLDB4MTksMHg5MCwweGZkLDB4NDEsMHhlMCwweDcwLDB4MGUsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZWYsMHhmMCwweDdjLAorMHgwMCwweDEyLDB4MjUsMHg0YSwweDgwLDB4MDUsMHg3YywweDE3LDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHg5MCwKKzB4ZmYsMHhmMCwweGUwLDB4NTQsMHhhYiwweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDIwLDB4ZjAsMHgyMiwweDhjLDB4MzcsCisweDhkLDB4MzYsMHg3OCwweDdjLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLAorMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4NzgsMHg3YSwweGY2LDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwKKzB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhmYywweDdkLDB4N2EsCisweDEyLDB4MTcsMHg5ZCwweDc4LDB4N2EsMHhlNiwweDcwLDB4MGQsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsMHhlNCwweDEyLAorMHgwMywweDBmLDB4N2MsMHgwOCwweDIyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg5MCwweGZmLDB4ZjAsMHhlMCwKKzB4NTQsMHhmZCwweGYwLDB4ODAsMHgxZSwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsCisweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHgyNSwweGUwLDB4NDQsMHgwMSwweDkwLDB4ZmYsMHhmMywweGYwLAorMHgwMiwweDA2LDB4ZGIsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwKKzB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMiwweDBlLDB4NTQsMHhmZSwweDkwLDB4ZmYsMHhmMywweGYwLDB4ODAsMHgyYiwweDc4LDB4N2MsCisweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLAorMHgwZSwweGZhLDB4ZWIsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhjYSwweDQwLDB4MGQsMHhhZCwweDNhLDB4YWUsMHgzOSwKKzB4YWYsMHgzOCwweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsCisweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDkwLDB4ZmYsMHhmMSwweGYwLAorMHgxMiwweDA4LDB4Y2EsMHg0MCwweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHg3YywKKzB4MTgsMHgyMiwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsCisweDAwLDB4MDYsMHgxMiwweDAyLDB4MGUsMHg0NCwweDAxLDB4OTAsMHhmZiwweGYzLDB4ZjAsMHg3OCwweDdkLDB4ZTYsMHgyNCwweDAzLAorMHhmNiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjYsMHg3OCwweDdhLDB4ZTYsMHgyNCwweGZlLDB4NTAsMHgwOSwweDkwLDB4ZmYsMHhmMCwKKzB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHhlNCwweDkwLDB4ZmYsCisweGYxLDB4ZjAsMHg3OCwweDdiLDB4NzYsMHgwMCwweDc4LDB4N2EsMHhlNiwweDI0LDB4ZmYsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLAorMHg3OCwweDdiLDB4ZTYsMHg3ZiwweDAwLDB4ZmUsMHhlYywweGQzLDB4OWUsMHhlZiwweDY0LDB4ODAsMHhjZCwweDY0LDB4ODAsMHg5ZCwKKzB4NDAsMHgyZiwweDEyLDB4MDgsMHhhZiwweDQwLDB4MGYsMHg3OCwweDdiLDB4ZTYsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsCisweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDkwLDB4ZmYsMHhmMiwweGUwLDB4ZmMsMHg3OCwweDdjLDB4ODYsMHg4MywweDA4LAorMHg4NiwweDgyLDB4ZWMsMHhmMCwweDc4LDB4N2IsMHgwNiwweGEzLDB4NzgsMHg3YywweGE2LDB4ODMsMHgwOCwweGE2LDB4ODIsMHg4MCwKKzB4YjUsMHgxMiwweDA4LDB4YWYsMHg0MCwweDBmLDB4NzgsMHg3YiwweGU2LDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4MTIsCisweDAzLDB4MGYsMHg3YywweDE4LDB4MjIsMHg5MCwweGZmLDB4ZjIsMHhlMCwweGZjLDB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwweDg2LAorMHg4MiwweGVjLDB4ZjAsMHg3OCwweDdhLDB4ZTYsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsMHgxMiwweDAzLDB4MGYsMHg3YywKKzB4MDAsMHgyMiwweDhjLDB4MzcsMHg4ZCwweDM2LDB4NzgsMHg3YywweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHhlZCwweGZlLDB4ZWMsCisweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweDc4LDB4N2IsMHhmNiwweDc4LDB4N2MsMHhlNiwweGZkLAorMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwKKzB4MGYsMHhmYywweDdkLDB4N2IsMHgxMiwweDE3LDB4OWQsMHg3OCwweDdiLDB4ZTYsMHg3MCwweDAzLDB4N2MsMHgwOCwweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhmZCwweGYwLDB4ODAsMHgxYiwweDc4LAorMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwKKzB4MDIsMHgwZSwweDI1LDB4ZTAsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDgwLDB4NWIsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsCisweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMiwweDBlLDB4NTQsMHhmZSwweDkwLAorMHhmZiwweGYzLDB4ZjAsMHg4MCwweDIxLDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwKKzB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZWIsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsCisweGNhLDB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLAorMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhjYSwKKzB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4N2QsMHhlNiwweDI0LDB4MGEsMHhmNiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjYsCisweDc4LDB4N2EsMHg3NiwweDAwLDB4NzgsMHg3YiwweGU2LDB4MjQsMHhmZiwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHg3OCwweDdhLAorMHhlNiwweDdmLDB4MDAsMHhmZSwweGVjLDB4ZDMsMHg5ZSwweGVmLDB4NjQsMHg4MCwweGNkLDB4NjQsMHg4MCwweDlkLDB4NDAsMHgyMSwKKzB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDkwLDB4ZmYsMHhmMSwweGYwLDB4MTIsMHgwOCwweGNhLDB4NDAsCisweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg3YSwweDA2LDB4NzgsMHg3ZCwweDA2LDB4ZTYsMHgxOCwweDcwLDB4MDEsMHgwNiwweDgwLAorMHhjMywweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwKKzB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4Y2EsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4N2MsMHgwMCwweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDIwLDB4ZTcsMHgxMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsMHhlNSwweDA5LDB4OTAsMHhmZiwweGYwLAorMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMzLDB4MjIsMHg4MCwweGU3LDB4ZDMsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MjAsMHhlMywKKzB4MTIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLDB4ZTUsMHgwOSwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgyMCwweGYwLDB4YzMsCisweDIyLDB4ODAsMHhlNywweGQzLDB4MjIsMHg4YywweDQyLDB4OGQsMHg0MSwweDdjLDB4MDAsMHhlZCwweDU0LDB4ZjAsMHhmZCwweGVjLAorMHg3MCwweDAzLDB4ZWQsMHg2NCwweDMwLDB4NzAsMHgwNSwweDc1LDB4M2UsMHgwMywweDgwLDB4MDMsMHg3NSwweDNlLDB4MDQsMHhhYywKKzB4M2UsMHgxMiwweDBmLDB4N2MsMHg3NSwweDgzLDB4MDAsMHg4NSwweDgzLDB4NDAsMHhlNSwweDQxLDB4NTQsMHgwZiwweGY1LDB4M2YsCisweGU1LDB4NDAsMHg3MCwweDA0LDB4ZTUsMHgzZiwweDY0LDB4MDMsMHg3MCwweDM1LDB4ZTUsMHgzZSwweDI0LDB4ZmQsMHg3NSwweGYwLAorMHgwYSwweGE0LDB4MjQsMHgwYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU2LDB4MDUsMHgxMiwKKzB4MTAsMHg2NywweDgwLDB4MTksMHhlNSwweDNlLDB4MjQsMHg5NywweGY4LDB4YzYsMHg1NCwweGZiLDB4ZjYsMHg3OCwweGEzLDB4ZTYsCisweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4ODAsMHg1OSwweGU1LAorMHg0MCwweDcwLDB4MDQsMHhlNSwweDNmLDB4NjQsMHgwNCwweDcwLDB4NDgsMHhlNSwweDNlLDB4MjQsMHhmZCwweDc1LDB4ZjAsMHgwYSwKKzB4YTQsMHgyNCwweDBhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTUsMHgwNywweGFjLDB4NDIsCisweGFkLDB4NDEsMHgxMiwweDFjLDB4OTMsMHhlNSwweDQyLDB4MzAsMHhlMiwweDE1LDB4NzgsMHhhNywweGU2LDB4MzAsMHhlMCwweDBmLAorMHg3OCwweGE3LDB4ZTYsMHgzMCwweGUxLDB4MDksMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDQsMHgxMiwweDMxLDB4OWEsMHg3OCwKKzB4YTMsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4ODAsCisweDA3LDB4ZTQsMHhmYywweDdkLDB4ZWUsMHgxMiwweDFjLDB4OTMsMHhjMiwweDAzLDB4MjIsMHgxMiwweDMwLDB4ODUsMHgxMiwweDBmLAorMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwKKzB4ZmQsMHg0MCwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweGUwLDB4OTAsMHhmZCwweDQxLDB4ZjAsMHhjMiwweDAzLDB4N2QsMHgwMiwweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLAorMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MzAsMHhlMSwKKzB4MDcsMHg3YywweDEzLDB4MTIsMHgyNSwweDRhLDB4ODAsMHgwZiwweDkwLDB4ZmQsMHg0MSwweGUwLDB4ZmQsMHg3OCwweDhmLDB4ZTYsCisweGZjLDB4MTIsMHgxMywweGZkLDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLAorMHhlYywweGY2LDB4N2QsMHgwMCwweDEyLDB4MGYsMHgwYiwweDEyLDB4MjUsMHg0YSwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwKKzB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGVjLDB4MjQsMHg5NywweGY4LDB4ZTYsMHgzMCwweGUyLDB4MDcsMHg3YywweDEzLDB4MTIsCisweDI1LDB4NGEsMHg4MCwweDFiLDB4NzgsMHg4ZiwweGU2LDB4MjQsMHg5NywweGY4LDB4ZTYsMHgyMCwweGUxLDB4MDcsMHg3YywweDEyLAorMHgxMiwweDI1LDB4NGEsMHg4MCwweDBhLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDE0LDB4MjEsMHgxMiwweDI1LDB4NGEsMHgxMiwKKzB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MjAsCisweGUyLDB4MDcsMHg3YywweDExLDB4MTIsMHgyNSwweDRhLDB4ODAsMHgwYSwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgxNSwweDIyLAorMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OGYsMHhlYywweGY2LDB4MTIsMHgwZiwKKzB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsCisweGZkLDB4NDcsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MGEsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDkwLDB4ZmQsMHg0OCwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMywweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHhmNSwweDVjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGUwLDB4ZjUsMHg1ZCwweDhjLDB4NWIsMHhlNCwweGVjLDB4MzMsMHgzMywweDU0LDB4MDEsMHg3OCwweDhmLDB4ZjYsMHg2MCwKKzB4MDgsMHhlNSwweDVjLDB4MzAsMHhlMSwweDAzLDB4NzgsMHg4ZiwweDA2LDB4NzgsMHg4ZiwweGU2LDB4OTAsMHhmZCwweDQ5LDB4ZjAsCisweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmZCwweGEzLAorMHhlMCwweDU0LDB4MGMsMHhmYywweGVkLDB4NTQsMHhlNiwweDhjLDB4NWYsMHhmNSwweDVlLDB4ZTUsMHg1YiwweDMwLDB4ZTUsMHgwMywKKzB4NDMsMHg1ZiwweDAxLDB4ZTUsMHg1YywweDIwLDB4ZTUsMHgwZSwweGU1LDB4NWIsMHg1NCwweDdmLDB4NzAsMHgwOCwweGU1LDB4NWIsCisweDIwLDB4ZTcsMHgwMywweDQzLDB4NWYsMHgwMiwweGU1LDB4NWIsMHgzMCwweGUzLDB4MDMsMHg0MywweDVmLDB4MTAsMHhlNSwweDViLAorMHgzMCwweGUyLDB4MDMsMHg0MywweDVmLDB4MjAsMHhlNSwweDViLDB4NTQsMHgwMywweDYwLDB4MDMsMHg0MywweDVmLDB4NDAsMHhlNSwKKzB4NWIsMHgzMCwweGUxLDB4MDMsMHg0MywweDVmLDB4ODAsMHhlNSwweDViLDB4MzAsMHhlNCwweDAzLDB4NDMsMHg1ZSwweDAxLDB4ZTUsCisweDViLDB4MzAsMHhlNiwweDAzLDB4NDMsMHg1ZSwweDA4LDB4ZTUsMHg1YywweDIwLDB4ZTQsMHgwZSwweGU1LDB4NWIsMHg1NCwweDdmLAorMHg3MCwweDA4LDB4ZTUsMHg1YiwweDIwLDB4ZTcsMHgwMywweDQzLDB4NWUsMHgxMCwweDUzLDB4NWYsMHhmYiwweDUzLDB4NWUsMHhmOSwKKzB4YWQsMHg1ZSwweGU1LDB4NWYsMHg5MCwweGZkLDB4NDIsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4ZTUsMHg1ZCwweDMwLDB4ZTMsCisweDBkLDB4ZTUsMHg1ZCwweDU0LDB4MzAsMHhjNCwweDU0LDB4MGYsMHg5MCwweGZkLDB4NDUsMHhmMCwweDgwLDB4MDUsMHhlNCwweDkwLAorMHhmZCwweDQ1LDB4ZjAsMHhlNSwweDVkLDB4NTQsMHgwMywweDkwLDB4ZmQsMHg0NCwweGYwLDB4ZTUsMHg1ZCwweDU0LDB4MDQsMHhjMywKKzB4MTMsMHg5MCwweGZkLDB4NDYsMHhmMCwweDkwLDB4ZmQsMHg0NCwweGUwLDB4NzAsMHgwZSwweDdkLDB4M2QsMHg3ZSwweGZkLDB4N2YsCisweDAxLDB4NzQsMHgwMSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MDEsMHg0MiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDgsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDdjLDB4MDAsMHhmZCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDcsMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDdmLDB4MDAsMHg0YywweGZlLDB4ZWYsMHg0ZCwweDkwLDB4ZmQsCisweDQwLDB4ZjAsMHhhMywweGNlLDB4ZjAsMHhjZSwweGMyLDB4MDMsMHg3ZCwweDBhLDB4N2MsMHgwMCwweDEyLDB4MjQsMHhiMSwweDEyLAorMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweDc4LDB4OTQsMHg3NiwweDAxLDB4MDgsMHg3NiwKKzB4ZmQsMHgwOCwweDc2LDB4NDAsMHg3OCwweDkxLDB4NzYsMHgwYywweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsMHgxMiwweDAyLDB4MTQsCisweDc4LDB4OTIsMHhjYiwweGY2LDB4Y2IsMHgwOCwweGY2LDB4N2YsMHgwMCwweGVmLDB4MjQsMHhlYiwweDQwLDB4MWYsMHhlNCwweGVmLAorMHgyNSwweGUwLDB4OTAsMHgzNCwweGJmLDB4ZmQsMHg5MywweGNkLDB4MDQsMHg5MywweDc4LDB4OTMsMHg2NiwweDcwLDB4MDMsMHhlZCwKKzB4MTgsMHg2NiwweDcwLDB4MDYsMHg3OCwweDkxLDB4NzYsMHgwMCwweDgwLDB4MDMsMHgwZiwweDgwLDB4ZGMsMHg3OCwweDkwLDB4ZWYsCisweGY2LDB4NzgsMHg5NCwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwZSwweDc4LDB4OTIsMHhjYiwweGY2LAorMHhjYiwweDA4LDB4ZjYsMHg1NCwweDA0LDB4Y2IsMHg1NCwweDA2LDB4NGIsMHg2MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGIsMHg3OCwKKzB4OTMsMHhlNiwweDMwLDB4ZTMsMHgxMywweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsCisweDI0LDB4ZmIsMHg1MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGQsMHg3OCwweDkzLDB4ZTYsMHg1NCwweGMwLDB4N2QsMHgwMCwweDY0LAorMHhjMCwweDRkLDB4NzAsMHgwNCwweDc4LDB4OTEsMHg3NiwweDBiLDB4NzgsMHg5NCwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwNCwKKzB4MTIsMHgwMSwweGVjLDB4MjQsMHhmYywweDUwLDB4MDQsMHg3OCwweDkxLDB4NzYsMHgwZiwweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsCisweDkwLDB4MDAsMHgwNiwweDEyLDB4MDEsMHhlYywweDI0LDB4ZmQsMHg1MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGUsMHg3OCwweDk0LAorMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDksMHgxMiwweDAxLDB4ZWMsMHgyNCwweGZkLDB4NTAsMHgwNCwweDc4LDB4OTEsMHg3NiwKKzB4MGEsMHg3OCwweDkxLDB4ZTYsMHg3MCwweDJhLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDBmLDB4N2MsMHg3OCwweDk0LDB4MTIsCisweDA0LDB4NjUsMHg3OCwweGExLDB4ZTYsMHhmOSwweDc4LDB4YTAsMHhlNiwweGZhLDB4N2IsMHgwMSwweDc0LDB4MGEsMHg3OCwweDAwLAorMHgxMiwweDAzLDB4M2YsMHhjMiwweDAzLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDExLDB4MjMsMHg3OCwweDkxLDB4ZWMsMHhmNiwKKzB4NzgsMHg5MSwweGU2LDB4ZmMsMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OGYsCisweGVjLDB4ZjYsMHgxMiwweDBmLDB4N2MsMHg3OCwweDhmLDB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDFjLAorMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweGFjLDB4ODIsMHhhZCwweDgzLDB4NzgsMHhhMCwweDg2LDB4ODMsMHgwOCwKKzB4ODYsMHg4MiwweGVjLDB4ZjksMHhlZCwweGZhLDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4YTcsMHhjMiwweDAzLDB4NzgsCisweDhmLDB4ZTYsMHhmYywweDEyLDB4MTEsMHgyMywweDEyLDB4MzEsMHgwOCwweDIyLDB4OGQsMHgyYiwweDhjLDB4MmEsMHhlZCwweDYwLAorMHg0MCwweDc1LDB4MjcsMHgwMSwweDc1LDB4MjksMHg0OCwweDc1LDB4MjgsMHhmZiwweGU1LDB4MmEsMHgyNCwweGZkLDB4ZmMsMHhlNCwKKzB4MzQsMHhmZiwweGZkLDB4ZWMsMHg3YywweDAzLDB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MjksCisweDJjLDB4ZjUsMHgyOSwweGU1LDB4MjgsMHgzZCwweGY1LDB4MjgsMHhhZCwweDI5LDB4YWUsMHgyOCwweGFmLDB4MjcsMHg3NCwweDgwLAorMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHg3NCwweDgwLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMywweDE3LDB4MTIsMHgwZiwKKzB4ZDMsMHhlNSwweDJiLDB4MTQsMHg2MCwweDNiLDB4NzUsMHgyNywweDAxLDB4NzUsMHgyOSwweDA4LDB4NzUsMHgyOCwweGZmLDB4ZTUsCisweDJhLDB4MjQsMHhmZCwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLDB4Y2QsMHgzMywweGNkLAorMHhkYywweGY5LDB4ZmMsMHhlNSwweDI5LDB4MmMsMHhmNSwweDI5LDB4ZTUsMHgyOCwweDNkLDB4ZjUsMHgyOCwweGFkLDB4MjksMHhhZSwKKzB4MjgsMHhhZiwweDI3LDB4ZTQsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHhlNCwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDMsCisweDE3LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGVjLDB4MjQsMHg5NywweGY4LDB4ZTYsMHgzMCwweGUyLAorMHgwOSwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgxNSwweDIyLDB4ZDIsMHgwMCwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgwZiwKKzB4N2MsMHg3OCwweDkwLDB4NzYsMHgwMCwweDkwLDB4ZmQsMHg0MSwweGUwLDB4MzAsMHhlNywweDA0LDB4NzgsMHg5MCwweDc2LDB4MDEsCisweDc4LDB4OTAsMHhlNiwweGZkLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDBkLDB4M2EsMHhjMiwweDAzLDB4MzAsMHgwMCwweDA3LAorMHg3OCwweDhmLDB4ZTYsMHhmYywweDEyLDB4MTQsMHgyMSwweDdjLDB4MDAsMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwKKzB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MDEsCisweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLAorMHhlMCwweDAyLDB4ODAsMHhlZCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDU0LDB4ZjgsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4YzIsMHgwMywweDhjLDB4NTgsMHgxMiwweDBmLDB4N2MsMHg3OCwweGEwLAorMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4NzksMHhlZSwweDdhLDB4MzQsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwKKzB4MTIsMHgwZSwweDEwLDB4YWMsMHg1OCwweDdkLDB4MDIsMHgxMiwweDBkLDB4M2EsMHhjMiwweDAzLDB4YWMsMHg1OCwweDEyLDB4MTEsCisweDIzLDB4MjIsMHg4ZCwweDUzLDB4OGUsMHg1MiwweDhmLDB4NTEsMHg4YywweDUwLDB4MTIsMHgwZiwweDdjLDB4NzUsMHg0ZiwweDAwLAorMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MjAsMHhlNCwKKzB4MTYsMHhlNSwweDRmLDB4MjQsMHhmNiwweDQwLDB4MTAsMHgwNSwweDRmLDB4YzIsMHgwMywweDdjLDB4MTgsMHgxMiwweDMyLDB4NDgsCisweGFjLDB4NTAsMHgxMiwweDBmLDB4N2MsMHg4MCwweGQ5LDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MjAsMHhlNCwweDA1LDB4YzIsMHgwMywweDdjLDB4MDIsMHgyMiwweDc4LDB4YTMsMHhlNiwKKzB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4MGYsMHg2MCwweDE2LDB4NzgsCisweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwZiwweGYwLAorMHhjMiwweDAzLDB4N2MsMHgwMSwweDIyLDB4NzgsMHhhMiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweGFkLDB4NTMsMHhhZSwKKzB4NTIsMHhhZiwweDUxLDB4MTIsMHgwMywweDBmLDB4YzIsMHgwMywweDdjLDB4MDAsMHgyMiwweDhkLDB4MzEsMHg4YywweDMwLDB4MTIsCisweDE1LDB4MjIsMHhlNSwweDMxLDB4NjAsMHgyMCwweGU1LDB4MzAsMHhiNCwweDAzLDB4MGMsMHg3YywweDAxLDB4MTIsMHgyNCwweDdjLAorMHg3YywweDgxLDB4MTIsMHgyNCwweDdjLDB4ODAsMHgwZiwweGU1LDB4MzAsMHhiNCwweDA0LDB4MGEsMHg3YywweDAyLDB4MTIsMHgyNCwKKzB4N2MsMHg3YywweDgyLDB4MTIsMHgyNCwweDdjLDB4YWMsMHgzMCwweDEyLDB4MGYsMHg3YywweGU1LDB4MzEsMHg2MCwweDFhLDB4NzgsCisweGE0LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4NTQsMHhlNywweGYwLDB4YTMsMHhhMywweGEzLDB4YTMsMHhlMCwweDU0LAorMHhlNywweGYwLDB4YWMsMHgzMCwweDdkLDB4MDIsMHgxMiwweDBkLDB4M2EsMHg3OCwweGEwLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwKKzB4NzksMHhmOCwweDdhLDB4MzQsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwweGMyLDB4MDMsMHhlNSwweDMwLDB4MjQsCisweDk3LDB4ZjgsMHhjNiwweDU0LDB4ZmQsMHhmNiwweGFjLDB4MzAsMHgxMiwweDExLDB4MjMsMHgyMiwweDhjLDB4MjYsMHgzMCwweDAzLAorMHgwNSwweDEyLDB4MzEsMHhlNywweDgwLDB4ZjgsMHg3YywweDBhLDB4MTIsMHgzMCwweGZhLDB4ZDIsMHgwMywweGU1LDB4MjYsMHgyNCwKKzB4ZmQsMHg3OCwweDlkLDB4ZjYsMHg3MCwweDA5LDB4NzgsMHhhNCwweDc2LDB4ZmYsMHgwOCwweDc2LDB4ZTAsMHg4MCwweDA3LDB4NzgsCisweGE0LDB4NzYsMHhmZiwweDA4LDB4NzYsMHhlMiwweDc4LDB4OWQsMHhlNiwweDc1LDB4ZjAsMHgxMCwweGE0LDB4YWQsMHhmMCwweGZjLAorMHgyNCwweGEwLDB4NzgsMHhhMywweGY2LDB4ZWQsMHgzNCwweGZmLDB4MTgsMHhmNiwweDc4LDB4OWQsMHhlNiwweDc1LDB4ZjAsMHgwYSwKKzB4YTQsMHgyNCwweDA4LDB4ZmMsMHhlNCwweDM0LDB4ZmQsMHhmZCwweDc4LDB4YTAsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4MTIsCisweDMxLDB4OTMsMHgyMiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDMwLDB4ZTcsMHgyMiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4NzgsMHhhNCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LAorMHg3ZiwweGYwLDB4YWQsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmMsMHhlNCwweDNkLDB4OGMsMHg4MiwweGY1LDB4ODMsMHhlMCwKKzB4NTQsMHg3ZiwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweGUwLDB4NTQsMHhmOCwweGYwLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwMSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGUwLDB4NDQsMHgwMywweGYwLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4NDQsMHgwMywweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweDc0LDB4MGYsMHhmMCwweDIyLDB4NzgsMHhhNCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LAorMHgzZiwweGYwLDB4YWQsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmMsMHhlNCwweDNkLDB4OGMsMHg4MiwweGY1LDB4ODMsMHhlMCwKKzB4NTQsMHgzZiwweGYwLDB4NzgsMHg5ZCwweGU2LDB4MjQsMHg5ZSwweGY4LDB4ZTYsMHhmYywweDc4LDB4YTUsMHhlNiwweDI0LDB4MDEsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHg5ZCwweGU2LDB4MjQsMHg5ZSwweGY4LAorMHhlNiwweGZjLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywKKzB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsCisweGZiLDB4NDQsMHgwMiwweGY1LDB4MjYsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU1LDB4MDMsMHg0MywweDI2LDB4MDEsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDMsMHgxMiwweDBmLDB4ZDMsMHhlNSwweDI2LDB4ZmMsCisweDc4LDB4YTMsMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LAorMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHg3NCwweDBmLDB4ZjAsMHg3OCwKKzB4YTQsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHhhMywweGEzLDB4YTMsMHhhMywweGUwLDB4NDQsCisweDgwLDB4ZjAsMHgyMiwweDhjLDB4MmEsMHgxMiwweDBmLDB4N2MsMHg3OCwweGExLDB4ZTYsMHgyNCwweDA4LDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MGEsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwNywweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTAsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywKKzB4ZWQsMHhmZSwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDgsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWUsCisweGYwLDB4ZWMsMHhmZSwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDcsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlZSwweGYwLDB4OGMsMHgyOSwweDhkLDB4MjgsMHhjMywweGVjLDB4OTQsMHgwMiwweGVkLDB4OTQsMHgwNiwweDQwLDB4MDUsMHg3NSwKKzB4MjcsMHg3YywweDgwLDB4MzMsMHhkMywweGU1LDB4MjksMHg5NCwweDgxLDB4ZTUsMHgyOCwweDk0LDB4MDEsMHg0MCwweDA1LDB4NzUsCisweDI3LDB4M2MsMHg4MCwweDIzLDB4ZDMsMHhlNSwweDI5LDB4OTQsMHhjMCwweGU1LDB4MjgsMHg5NCwweDAwLDB4NDAsMHgwNSwweDc1LAorMHgyNywweDE4LDB4ODAsMHgxMywweGQzLDB4ZTUsMHgyOSwweDk0LDB4MzAsMHhlNSwweDI4LDB4OTQsMHgwMCwweDQwLDB4MDUsMHg3NSwKKzB4MjcsMHgwYywweDgwLDB4MDMsMHg3NSwweDI3LDB4MDgsMHhhZiwweDI3LDB4ZTQsMHhlZiwweDU0LDB4N2MsMHg0NCwweDgzLDB4ZmYsCisweDhmLDB4MjcsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZWMsMHhmMCwweGU1LDB4MjcsMHhmYywweDc4LDB4YTUsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHg5ZCwweGU2LDB4MjQsMHg5ZSwweGY4LDB4ZWMsCisweGY2LDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LAorMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwKKzB4MzAsMHhlMywweDE3LDB4NTMsMHgyNywweGM3LDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHgzNCwweGU5LDB4OTMsMHg0MiwweDI3LDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwMiwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNywweDA1LDB4NDMsMHgyNywweDQwLDB4ODAsMHgwMywKKzB4NTMsMHgyNywweGJmLDB4NTMsMHgyNywweGZiLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4NjAsMHgwMywweDQzLDB4MjcsMHgwNCwweDUzLDB4MjcsMHhmYywweDc4LDB4YTEsMHhlNiwweDI0LAorMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQyLDB4MjcsMHg0MywweDI3LDB4ODAsMHhlNSwKKzB4MjcsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsCisweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LAorMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwKKzB4MzAsMHhlMSwweDA1LDB4NTMsMHgyNywweGRmLDB4ODAsMHgwMywweDQzLDB4MjcsMHgyMCwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTQsMHgwNSwweDUzLDB4MjcsMHhlZiwweDgwLAorMHgwMywweDQzLDB4MjcsMHgxMCwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDksMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweGI0LDB4MDIsMHgwMywweDQzLDB4MjcsMHgwMiwweGU1LDB4MjcsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMywweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDksMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDcwLDB4MDUsMHg1MywweDI3LDB4N2YsMHg4MCwweDAzLDB4NDMsCisweDI3LDB4ODAsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLAorMHhlMCwweDMwLDB4ZTAsMHgwNSwweDQzLDB4MjcsMHgyMCwweDgwLDB4MDMsMHg1MywweDI3LDB4ZGYsMHg3OCwweGExLDB4ZTYsMHgyNCwKKzB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUzLDB4MDUsMHg0MywweDI3LDB4NDAsCisweDgwLDB4MDMsMHg1MywweDI3LDB4YmYsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDUsMHg0MywweDI3LDB4MTAsMHg4MCwweDAzLDB4NTMsMHgyNywweGVmLDB4NzgsMHhhMSwKKzB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGU0LDB4MDUsCisweDQzLDB4MjcsMHgwOCwweDgwLDB4MDMsMHg1MywweDI3LDB4ZjcsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTUsMHgwNSwweDQzLDB4MjcsMHgwNCwweDgwLDB4MDMsMHg1MywKKzB4MjcsMHhmYiwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsCisweGUwLDB4MzAsMHhlNiwweDA1LDB4NDMsMHgyNywweDAxLDB4ODAsMHgwMywweDUzLDB4MjcsMHhmZSwweDc4LDB4YTEsMHhlNiwweDI0LAorMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlNywweDA1LDB4NDMsMHgyNywKKzB4MDIsMHg4MCwweDAzLDB4NTMsMHgyNywweGZkLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMywweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHgwMCwweDIyLDB4OGQsMHgyNywweDhjLAorMHgyNiwweGVkLDB4NTQsMHgwMywweDE0LDB4NjAsMHgwMywweDdjLDB4MTAsMHgyMiwweGU1LDB4MjcsMHg1NCwweDdjLDB4MjQsMHhmYywKKzB4NDAsMHgwMywweDdjLDB4MGIsMHgyMiwweGU1LDB4MjYsMHgyNCwweDk3LDB4ZjgsMHhjNiwweDQ0LDB4MDIsMHhmNiwweDdjLDB4MDAsCisweDIyLDB4OGMsMHgzMCwweDEyLDB4MGYsMHg3YywweGU1LDB4MzAsMHgyNCwweDk3LDB4ZjgsMHhlNiwweDIwLDB4ZTIsMHg0ZiwweGFjLAorMHgzMCwweDdkLDB4MDIsMHgxMiwweDBkLDB4M2EsMHhlNSwweDMwLDB4MjQsMHhmZSwweDQ0LDB4MjgsMHhmYywweDc4LDB4YTQsMHg4NiwKKzB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywweGYwLDB4YWYsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmUsMHhlNCwweDNmLDB4ZmYsCisweGVjLDB4OGUsMHg4MiwweDhmLDB4ODMsMHhmMCwweDdjLDB4MDMsMHg4YywweDJjLDB4ZTUsMHgyYywweGZjLDB4NzgsMHhhNSwweGU2LAorMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhlNSwweDJjLDB4ZmMsMHg3OCwKKzB4YTUsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc1LDB4MmQsCisweDAxLDB4NzUsMHgyZiwweDQ4LDB4NzUsMHgyZSwweGZmLDB4ZTUsMHgzMCwweDI0LDB4ZmQsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLAorMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLDB4Y2QsMHgzMywweGNkLDB4ZGMsMHhmOSwweGZjLDB4ZTUsMHgyZiwweDJjLDB4ZjUsMHgyZiwKKzB4ZTUsMHgyZSwweDNkLDB4ZjUsMHgyZSwweDc4LDB4YTUsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDU0LDB4ZTcsMHhmNSwweDJjLDB4YWQsMHgyZiwweGFlLDB4MmUsMHhhZiwweDJkLDB4ZTQsMHg5MCwweDAwLAorMHgwMiwweDEyLDB4MDMsMHgxNywweGU0LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMywweDE3LDB4MTIsMHgwMSwweGU2LDB4MzAsMHhlNSwKKzB4MDMsMHg0MywweDJjLDB4MTAsMHhlNSwweDJjLDB4ZmMsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDEyLDB4MTAsMHg2NywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGMyLDB4MDMsMHhmYywweGU1LDB4MzAsMHgyNCwweDk3LDB4ZjgsMHhjNiwKKzB4NDQsMHgwNCwweGY2LDB4OGMsMHgyYywweGU1LDB4MzAsMHg1NCwweDBmLDB4YzQsMHg1NCwweGYwLDB4N2UsMHgwMCwweGZmLDB4ZWUsCisweGVmLDB4NDQsMHgwNCwweDdkLDB4MDAsMHhmZiwweGVjLDB4NGUsMHhmYywweGVkLDB4NGYsMHhmZCwweDEyLDB4MWMsMHhmZSwweDdjLAorMHgwMCwweDIyLDB4OGMsMHgyZiwweDEyLDB4MGYsMHg3YywweDEyLDB4MTAsMHgwNywweDc4LDB4YTQsMHg4NiwweDgzLDB4MDgsMHg4NiwKKzB4ODIsMHhlMCwweDU0LDB4MDgsMHhmMCwweGEzLDB4YTMsMHhhMywweGEzLDB4ZTAsMHg1NCwweDA4LDB4ZjAsMHhhYywweDJmLDB4N2QsCisweDAyLDB4MTIsMHgwZCwweDNhLDB4YzIsMHgwMywweGU1LDB4MmYsMHgyNCwweDk3LDB4ZjgsMHhjNiwweDU0LDB4ZmIsMHhmNiwweDdjLAorMHgwMCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg5MCwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MzAsMHhlMSwKKzB4MGEsMHg3ZCwweDAwLDB4N2MsMHgxMywweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDc4LDB4OTAsMHhlNiwweDI0LDB4OTcsCisweGY4LDB4YzYsMHg0NCwweDAxLDB4ZjYsMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4OTAsMHhlNiwweDI0LAorMHhmZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHgxYywweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4NzgsMHhhMCwKKzB4ZTYsMHhmYSwweDA4LDB4ZTYsMHhmOSwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGE3LDB4NzgsMHhhMCwweDg2LDB4ODMsCisweDA4LDB4ODYsMHg4MiwweDc5LDB4ZjgsMHg3YSwweDM0LDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHgxMiwweDBmLAorMHhkMywweGMyLDB4MDMsMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLDB4MTEsMHgyMywweDc4LDB4OGYsMHhlYywweGY2LDB4ZWMsMHg2MCwKKzB4MGEsMHg3ZCwweDAwLDB4N2MsMHgwOCwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsCisweDBmLDB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLAorMHg0NCwweDEwLDB4NTQsMHhkZiwweGZjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweDQ4LDB4NzgsCisweDkwLDB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZWYsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweDQ4LDB4NzgsMHg5MCwKKzB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4MTAsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweDQ4LDB4NzgsMHg5MCwweGU2LAorMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMyLDB4MDMsMHg3YywweGYwLDB4MTIsMHgzMiwweDQ4LDB4NzgsMHg5MCwweGU2LDB4ZmMsCisweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDMwLDB4ZTQsMHgxNSwweGMyLDB4MDMsMHg3OCwweDkwLDB4ZTYsMHg0NCwweDEwLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgwNywKKzB4MTIsMHgzMSwweDlhLDB4MTIsMHgzMSwweDA4LDB4MDIsMHgxNywweDQ5LDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhjZiwweGYwLDB4YzIsMHgwMywweDdjLDB4YzgsMHgxMiwweDMyLAorMHg0OCwweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsMHgwZiwweDdjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgzMCwweGYwLDB4YzIsMHgwMywweDdjLDB4ZjAsMHgxMiwweDMyLDB4NDgsCisweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsMHgwZiwweDdjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNCwweDE0LDB4YzIsMHgwMywweDc4LDB4OTAsMHhlNiwweDQ0LDB4MTAsMHg3ZiwKKzB4MDAsMHhmZSwweDdjLDB4MDcsMHgxMiwweDMxLDB4OWEsMHgxMiwweDMxLDB4MDgsMHg4MCwweDVkLDB4NzgsMHhhMywweGU2LDB4MjQsCisweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhlZiwweGYwLDB4NzgsMHhhMywweGU2LAorMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhkZiwweGYwLDB4NzgsMHg5MCwKKzB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsCisweGFjLDB4ODIsMHhhZCwweDgzLDB4NzgsMHhhMCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywweGY5LDB4ZWQsMHhmYSwweDdiLAorMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4YTcsMHhjMiwweDAzLDB4NzgsMHg5MCwweGU2LDB4ZmMsMHgxMiwweDExLDB4MjMsMHg3ZCwKKzB4MDAsMHg3YywweDBiLDB4MTIsMHgyNCwweGIxLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg5MCwweGZmLDB4OTEsCisweGUwLDB4OTAsMHhmZCwweDQxLDB4ZjAsMHg3ZCwweDAyLDB4N2MsMHgwMCwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDIyLAorMHgxMiwweDMwLDB4ODUsMHg5MCwweGZkLDB4NDAsMHhlMCwweGY0LDB4ZmMsMHg5MCwweGZmLDB4OTEsMHhlMCwweDVjLDB4ZjUsMHgzMywKKzB4OTAsMHhmZCwweDQxLDB4ZTAsMHhmYywweDkwLDB4ZmQsMHg0MCwweGUwLDB4NWMsMHg0MiwweDMzLDB4ZTUsMHgzMywweDkwLDB4ZmYsCisweDkxLDB4ZjAsMHg3YywweDAwLDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHg3NCwweDNjLDB4OTAsMHhmYiwweGU4LAorMHhmMCwweDc0LDB4M2UsMHg5MCwweGZiLDB4ZTgsMHhmMCwweGU0LDB4OTAsMHhmZCwweDMwLDB4ZjAsMHgyMiwweDhkLDB4MzUsMHg4YywKKzB4MzQsMHhlYywweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDIsMHg4MCwweDI4LDB4YjQsMHgwMiwweDAyLDB4ODAsCisweDAzLDB4ZDMsMHg0MCwweDA4LDB4YTgsMHgzNSwweGM2LDB4MjUsMHhlMCwweGY2LDB4ODAsMHgxOCwweGI0LDB4MDQsMHgwMiwweDgwLAorMHgwMywweGQzLDB4NDAsMHgwYSwweGE4LDB4MzUsMHhjNiwweDI1LDB4ZTAsMHgyNSwweGUwLDB4ZjYsMHg4MCwweDA2LDB4YTgsMHgzNSwKKzB4NzYsMHgwMCwweDgwLDB4MDAsMHgyMiwweDhjLDB4M2MsMHg4ZCwweDNiLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4NzUsCisweDYwLDB4MDYsMHg3NSwweDYxLDB4MDAsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4NmUsMHgxMiwweDAxLDB4ZTYsMHhiNCwweDgwLAorMHgwMiwweDgwLDB4MDYsMHhkMywweDUwLDB4MDMsMHgwMiwweDE4LDB4OWUsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwKKzB4MDAsMHgwMywweDEyLDB4MDEsMHhlYywweDU0LDB4ZjAsMHhiNCwweDMwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDVmLDB4OTAsCisweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHhmYSwweGZkLDB4ZWIsMHhmZSwweDdmLAorMHgwMSwweDkwLDB4ZmQsMHgzNCwweDEyLDB4MDQsMHg2ZSwweGVlLDB4Y2QsMHg5MCwweDM1LDB4MDIsMHhmYywweGU0LDB4OTMsMHhmZiwKKzB4NzQsMHgwMSwweDkzLDB4ZmUsMHhmOSwweGVmLDB4ZmEsMHg3YiwweDAxLDB4ZWEsMHhmZiwweGU5LDB4ZmUsMHhlYywweGMzLDB4OWUsCisweGVkLDB4OWYsMHg0MCwweDI1LDB4OTAsMHgzNSwweDA0LDB4ZTQsMHg5MywweGZkLDB4NzQsMHgwMSwweDkzLDB4ZmMsMHhlZCwweGZlLAorMHhlYywweGZkLDB4N2YsMHgwMSwweGVlLDB4Y2QsMHhmYywweDkwLDB4ZmQsMHgzNiwweGUwLDB4ZDMsMHg5YywweDkwLDB4ZmQsMHgzNSwKKzB4ZTAsMHg5ZCwweDUwLDB4MDUsMHg3NSwweDYwLDB4ODAsMHg4MCwweDMzLDB4MTIsMHgxOSwweGJjLDB4ODAsMHgyZSwweGI0LDB4NjAsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYiwweGFjLDB4M2MsMHhhZCwweDNiLDB4MTIsMHgwNywweDgyLDB4OGMsMHg2MCwweDgwLAorMHgxYiwweGI0LDB4MTAsMHgwMywweGIzLDB4NDAsMHgxMCwweGMzLDB4YjQsMHgyMCwweDAzLDB4YjMsMHg0MCwweDA5LDB4YzMsMHhiNCwKKzB4NDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg3NSwweDYwLDB4ODEsMHg4MCwweDAwLDB4ODAsMHg3NSwweGI0LDB4ODEsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg2YiwweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwMywweDEyLAorMHgwMSwweGVjLDB4NTQsMHhmMCwweGI0LDB4MzAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWQsMHg5MCwweGZkLDB4MzEsMHgxMiwKKzB4MDQsMHg4MCwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZmQsMHhlYiwweGZlLDB4N2YsMHgwMSwweDkwLDB4ZmQsCisweDM3LDB4MTIsMHgwNCwweDZlLDB4MTIsMHgxOSwweDI2LDB4ODAsMHgzNiwweGI0LDB4NjAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLAorMHgxMywweDc1LDB4M2EsMHg2MSwweGU0LDB4ZjUsMHgzOSwweGY1LDB4MzgsMHhhYywweDNjLDB4YWQsMHgzYiwweDEyLDB4MDUsMHhkZSwKKzB4OGMsMHg2MCwweDgwLDB4MWIsMHhiNCwweDEwLDB4MDMsMHhiMywweDQwLDB4MTAsMHhjMywweGI0LDB4MjAsMHgwMywweGIzLDB4NDAsCisweDA5LDB4YzMsMHhiNCwweDQwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4NzUsMHg2MCwweDgxLDB4ODAsMHgwMCwweDgwLAorMHgwMiwweDgwLDB4MDAsMHhlNSwweDYwLDB4ZmMsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHhlYywweDkwLDB4MDAsMHgwMiwKKzB4MTIsMHgwMywweDE3LDB4YWMsMHg2MSwweDIyLDB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA0LDB4MTIsCisweDAxLDB4ZWMsMHg2MCwweDA0LDB4NzQsMHgwMSwweDgwLDB4MDEsMHhlNCwweGEyLDB4ZTAsMHg5MiwweDAxLDB4OTAsMHhmZCwweDMxLAorMHgxMiwweDA0LDB4ODAsMHhlZCwweDI0LDB4MDMsMHhmZCwweDUwLDB4MDEsMHgwZSwweDkwLDB4ZmQsMHgzNCwweDEyLDB4MDQsMHg2ZSwKKzB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4ZjUsMHg2MSwweDkwLDB4MDAsCisweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGZjLDB4N2QsMHg2MSwweDEyLDB4MTcsMHg5ZCwweGU1LDB4NjEsMHg3MCwweDA0LAorMHg3NSwweDYwLDB4MDgsMHgyMiwweDc1LDB4NjAsMHgwMCwweDc4LDB4N2UsMHg3NiwweDAwLDB4NzgsMHg3ZSwweGU2LDB4YzMsMHg5NSwKKzB4NjEsMHg1MCwweDM4LDB4OTAsMHhmZCwweDM3LDB4MTIsMHgwNCwweDgwLDB4MTIsMHgwMSwweGU2LDB4ZmMsMHg5MCwweGZkLDB4MzQsCisweDEyLDB4MDQsMHg4MCwweGVjLDB4MTIsMHgwMywweDBmLDB4MzAsMHgwMSwweDBlLDB4OTAsMHhmZCwweDM5LDB4ZTAsMHgwNCwweGYwLAorMHg5MCwweGZkLDB4MzgsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4NzgsMHg3ZSwweDA2LDB4OTAsMHhmZCwweDM2LDB4ZTAsMHgwNCwKKzB4ZjAsMHg5MCwweGZkLDB4MzUsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhjMCwweDIyLDB4OTAsMHhmZCwweDMyLDB4ZTAsCisweGZkLDB4YTMsMHhlMCwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4ZWQsMHgyNCwweDBhLDB4ZmQsMHg1MCwweDAxLAorMHgwZSwweDkwLDB4ZmQsMHgzYSwweDEyLDB4MDQsMHg2ZSwweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNCwKKzB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MTcsMHg5MCwweGZkLDB4M2EsCisweDEyLDB4MDQsMHg4MCwweDBkLDB4ZWQsMHg3MCwweDAxLDB4MGUsMHg5MCwweGZkLDB4MzcsMHgxMiwweDA0LDB4NmUsMHg3OCwweDgyLAorMHg3NiwweDAxLDB4ODAsMHg0ZSwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MTksMHg5MCwweGZkLDB4M2EsMHgxMiwKKzB4MDQsMHg4MCwweGVkLDB4MjQsMHgwMiwweGZkLDB4NTAsMHgwMSwweDBlLDB4OTAsMHhmZCwweDM3LDB4MTIsMHgwNCwweDZlLDB4NzgsCisweDgyLDB4NzYsMHgwMiwweDgwLDB4MmQsMHhiNCwweDA0LDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE5LDB4OTAsMHhmZCwweDNhLAorMHgxMiwweDA0LDB4ODAsMHhlZCwweDI0LDB4MDQsMHhmZCwweDUwLDB4MDEsMHgwZSwweDkwLDB4ZmQsMHgzNywweDEyLDB4MDQsMHg2ZSwKKzB4NzgsMHg4MiwweDc2LDB4MDQsMHg4MCwweDBjLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwMCwweDc1LDB4NjAsCisweDA4LDB4MjIsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsMHhmNSwweDYxLAorMHg3OCwweDdmLDB4NzYsMHgwMCwweDc4LDB4N2YsMHhlNiwweGMzLDB4OTUsMHg2MSwweDQwLDB4MDMsMHgwMiwweDFiLDB4MjQsMHg3OCwKKzB4ODAsMHg3NiwweDAwLDB4NzgsMHg4MCwweGU2LDB4YzMsMHg3OCwweDgyLDB4OTYsMHg1MCwweDc2LDB4OTAsMHhmZCwweDM0LDB4MTIsCisweDA0LDB4ODAsMHgxMiwweDAxLDB4ZTYsMHhmYywweDkwLDB4ZmQsMHgzYSwweDEyLDB4MDQsMHg4OSwweDEyLDB4MDEsMHhlMCwweGY0LAorMHg1YywweGZjLDB4MTIsMHgwMSwweGUwLDB4ZjgsMHg5MCwweGZkLDB4MzcsMHgxMiwweDA0LDB4ODAsMHhlOCwweGMwLDB4ZTAsMHgxMiwKKzB4MDEsMHhlNiwweGM4LDB4ZDAsMHhlMCwweGM4LDB4NTgsMHg0YywweGZjLDB4OTAsMHhmZCwweDM0LDB4MTIsMHgwNCwweDgwLDB4ZWMsCisweDEyLDB4MDMsMHgwZiwweDc4LDB4ODEsMHhlYywweGY2LDB4OTAsMHhmZCwweDM5LDB4ZTAsMHgwNCwweGYwLDB4OTAsMHhmZCwweDM4LAorMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4MDksMHhlOSwweDcwLDB4MDEsMHgwYSwweDkwLDB4ZmQsMHgzYSwweDEyLDB4MDQsMHg3NywKKzB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLDB4MzAsMHhlNCwweDBlLDB4OTAsCisweGZkLDB4MzYsMHhlMCwweDA0LDB4ZjAsMHg5MCwweGZkLDB4MzUsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4NzgsMHg4MCwweDA2LAorMHg4MCwweDgxLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHhlNCwweGZlLDB4ZmYsMHhlZSwweGNkLDB4ZmMsMHg5MCwweGZkLDB4MzksMHhlMCwKKzB4MmMsMHhmMCwweDkwLDB4ZmQsMHgzOCwweGUwLDB4M2QsMHhmMCwweDc4LDB4ODIsMHhlNiwweGZkLDB4ZTQsMHhmZSwweGZmLDB4ZWUsCisweGNkLDB4ZmMsMHg5MCwweGZkLDB4M2MsMHhlMCwweDJjLDB4ZjAsMHg5MCwweGZkLDB4M2IsMHhlMCwweDNkLDB4ZjAsMHg3OCwweDdmLAorMHgwNiwweDAyLDB4MWEsMHg2NCwweDc1LDB4NjAsMHgwMCwweDIyLDB4ZTUsMHgzZCwweDA1LDB4M2QsMHgwNCwweDcwLDB4MDIsMHhiMiwKKzB4YjAsMHgyMiwweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksCisweGMwLDB4ZTAsMHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLAorMHhlMCwweGVmLDB4YzAsMHhlMCwweDkwLDB4ZmYsMHg5MiwweGUwLDB4MTIsMHgwMSwweGI3LDB4MWIsMHg4MCwweDMwLDB4MWIsMHg4MCwKKzB4MzIsMHgxYiwweDhmLDB4MzgsMHgxYiwweGExLDB4M2EsMHgxYiwweGIzLDB4M2UsMHgxYiwweGNiLDB4NDQsMHgxYiwweGJmLDB4NDYsCisweDFiLDB4ZDcsMHg1MCwweDFjLDB4MTksMHg1MiwweDFiLDB4ZjgsMHg1NCwweDFjLDB4M2EsMHg1NiwweDAwLDB4MDAsMHgxYywweDViLAorMHg5MCwweGZmLDB4OTIsMHhlMCwweDdmLDB4MDAsMHhmZSwweDdjLDB4MDEsMHgxMiwweDMxLDB4OWEsMHgwMiwweDFjLDB4NmIsMHhlNCwKKzB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwMywweDEyLDB4MzEsMHg5YSwweDc0LDB4MjAsMHg5MCwweGZmLDB4ZmUsMHhmMCwweDAyLDB4MWMsCisweDZiLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDAyLDB4MTIsMHgzMSwweDlhLDB4NzQsMHg0MCwweDkwLDB4ZmYsMHhmZSwweGYwLAorMHgwMiwweDFjLDB4NmIsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDQsMHgxMiwweDMxLDB4OWEsMHgwMiwweDFjLDB4NmIsMHhlNCwKKzB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwNSwweDEyLDB4MzEsMHg5YSwweDAyLDB4MWMsMHg2YiwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsCisweDA2LDB4MTIsMHgzMSwweDlhLDB4MDIsMHgxYywweDZiLDB4OTAsMHhmZiwweGE1LDB4ZTAsMHg3ZCwweDAwLDB4OTAsMHhmZCwweDAwLAorMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmZCwweDAxLDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwweGZkLDB4MDAsMHhlMCwKKzB4NDQsMHgzMywweGZkLDB4MTIsMHgxYywweGZlLDB4ODAsMHg3MywweDkwLDB4ZmYsMHhiNSwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmQsCisweDAyLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLDB4ZmQsMHgwMywweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmZCwweDAyLAorMHhlMCwweDQ0LDB4NDMsMHhmZCwweDEyLDB4MWMsMHhmZSwweDgwLDB4NTIsMHg5MCwweGZmLDB4YTYsMHhlMCwweDdkLDB4MDAsMHg5MCwKKzB4ZmQsMHgwNCwweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZkLDB4MDUsMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmQsCisweDA0LDB4ZTAsMHg0NCwweDM0LDB4ZmQsMHgxMiwweDFjLDB4ZmUsMHg4MCwweDMxLDB4OTAsMHhmZiwweGI2LDB4ZTAsMHg3ZCwweDAwLAorMHg5MCwweGZkLDB4MDYsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmZCwweDA3LDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwKKzB4ZmQsMHgwNiwweGUwLDB4NDQsMHg0NCwweGZkLDB4MTIsMHgxYywweGZlLDB4ODAsMHgxMCwweDkwLDB4ZmYsMHg5MiwweGUwLDB4N2QsCisweDAwLDB4ZmMsMHhlZCwweDQ0LDB4YWEsMHhmZCwweDEyLDB4MWMsMHhmZSwweDgwLDB4MDAsMHhlNCwweDkwLDB4ZmYsMHg5MiwweGYwLAorMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMCwKKzB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsCisweGQwLDB4ZTAsMHgzMiwweDA1LDB4ODEsMHgwNSwweDgxLDB4MDUsMHg4MSwweDA1LDB4ODEsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LAorMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4OTAsMHhmZiwweDZhLDB4ZTAsMHgyMCwweGU3LDB4MDIsMHg4MCwweGY3LDB4OTAsMHhmZiwKKzB4NjksMHhlMCwweDdkLDB4MDAsMHhhOCwweDgxLDB4MTgsMHhjZCwweGY2LDB4Y2QsMHgwOCwweGY2LDB4N2QsMHgwMywweGE4LDB4ODEsCisweGU2LDB4MTgsMHhmYywweGU2LDB4Y2MsMHgyNSwweGUwLDB4Y2MsMHgzMywweGNjLDB4ZGQsMHhmOSwweGNjLDB4ZjYsMHhjYywweDA4LAorMHhmNiwweGE4LDB4ODEsMHgxOCwweGU2LDB4NDQsMHhmOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweGU2LDB4ZmQsMHgwOCwKKzB4ZTYsMHhmYywweGE4LDB4ODEsMHgxOCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlZCwweGYwLDB4YTMsMHhlYywweGYwLDB4NzQsCisweDAyLDB4OTAsMHhmZiwweDZhLDB4ZjAsMHgxNSwweDgxLDB4MTUsMHg4MSwweDE1LDB4ODEsMHgxNSwweDgxLDB4MjIsMHhlNSwweDgxLAorMHgyNCwweDA1LDB4ZjUsMHg4MSwweGU0LDB4YTgsMHg4MSwweDE4LDB4ZjYsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlZCwKKzB4ZjYsMHgwOCwweGVjLDB4ZjYsMHg5MCwweGZiLDB4ZmQsMHhlMCwweDI0LDB4ZjgsMHg1MCwweDAzLDB4MDIsMHgxZSwweDFmLDB4ZTQsCisweGE4LDB4ODEsMHgxOCwweDE4LDB4ZjYsMHhhOCwweDgxLDB4MTgsMHhlNiwweGZlLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LAorMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4N2YsMHgwMCwweGVmLDB4MjQsMHhmOCwweDQwLDB4NGQsMHhlNCwweGVmLDB4MjUsMHhlMCwKKzB4MjQsMHg4NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHg2YywweDcwLDB4MDMsCisweGZhLDB4ZWIsMHg2ZCwweDcwLDB4MDksMHg3NCwweDAxLDB4YTgsMHg4MSwweDE4LDB4MTgsMHhmNiwweDgwLDB4MmIsMHhlNCwweGVmLAorMHgyNSwweGUwLDB4MjQsMHg4NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4N2EsMHgwMCwweGUwLDB4NTQsMHhmMCwKKzB4Y2MsMHhmOCwweGNjLDB4Y2QsMHhmOSwweGNkLDB4ZmIsMHg3OCwweDAwLDB4ZTksMHg1NCwweGYwLDB4ZjksMHhlYSwweDY4LDB4NzAsCisweDAyLDB4ZWIsMHg2OSwweDcwLDB4MDEsMHgwZSwweDBmLDB4ODAsMHhhZSwweGE4LDB4ODEsMHgxOCwweGVlLDB4ZjYsMHhhOCwweDgxLAorMHgxOCwweDE4LDB4MTgsMHgxOCwweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHhhOCwweDgxLDB4ZWYsMHhmNiwweGE4LDB4ODEsMHgxOCwKKzB4MTgsMHhlNiwweDcwLDB4NzksMHhhOCwweDgxLDB4MTgsMHhlNiwweDI0LDB4ZjcsMHg0MCwweDcxLDB4YTgsMHg4MSwweDE4LDB4MTgsCisweDE4LDB4MTgsMHhlNiwweDU0LDB4MGYsMHhhOCwweDgxLDB4ZjYsMHg2NCwweDA0LDB4NjAsMHgxNywweGE4LDB4ODEsMHhlNiwweDY0LAorMHgwMywweDYwLDB4MTAsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4MTIsMHgxYywKKzB4OTMsMHg4MCwweDRhLDB4N2MsMHgwYSwweDEyLDB4MzAsMHhmYSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGU2LDB4ZmQsCisweDA4LDB4ZTYsMHhmYywweDkwLDB4ZmIsMHhmYywweGUwLDB4MjUsMHhlMCwweDI0LDB4ODUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLAorMHhmNSwweDgzLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweDkwLDB4ZmIsMHhmYywweGUwLDB4ZmYsMHhlNCwweGVmLDB4MDQsMHg1NCwKKzB4MDcsMHhmZiwweDkwLDB4ZmIsMHhmYywweGYwLDB4OTAsMHhmYiwweGZkLDB4ZTAsMHgwNCwweGYwLDB4MTIsMHgzMSwweDkzLDB4OTAsCisweGZiLDB4ZmUsMHhlMCwweDcwLDB4MDgsMHhlNCwweGZlLDB4ZmYsMHg3YywweDBmLDB4MTIsMHgzMSwweDlhLDB4ODAsMHgyNywweDkwLAorMHhmYiwweGZmLDB4ZTAsMHgwNCwweGYwLDB4NTQsMHgzZiwweDcwLDB4MWQsMHg5MCwweGZiLDB4ZmYsMHhlMCwweDQ0LDB4ZmUsMHg3ZCwKKzB4MDAsMHhmYywweDkwLDB4ZmIsMHhmYywweGUwLDB4MjUsMHhlMCwweDI0LDB4ODUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsCisweDgzLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweGU1LDB4ODEsMHgyNCwweGZiLDB4ZjUsMHg4MSwweDIyLDB4NzgsMHg4NSwweDc2LAorMHgwMCwweDc4LDB4ODYsMHg3NiwweDAwLDB4NzQsMHgwMSwweDkwLDB4ZmIsMHhmZSwweGYwLDB4MTIsMHgzMCwweDg1LDB4OTAsMHhmYiwKKzB4ZmQsMHhlMCwweDYwLDB4NTksMHg3YywweDBhLDB4MTIsMHgzMCwweGZhLDB4OTAsMHhmYiwweGZiLDB4ZTAsMHgyNSwweGUwLDB4MjQsCisweDg1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZjLDB4OTAsMHhmYiwweGZiLAorMHhlMCwweDI1LDB4ZTAsMHgyNCwweDg1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhlNCwweGYwLDB4YTMsMHhmMCwKKzB4OTAsMHhmYiwweGZiLDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHgwNCwweDU0LDB4MDcsMHhmZiwweDkwLDB4ZmIsMHhmYiwweGYwLDB4OTAsCisweGZiLDB4ZmQsMHhlMCwweDE0LDB4ZjAsMHg3OCwweDgzLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDEyLDB4MzEsMHg5MywweGIyLAorMHhiMywweDc4LDB4ODMsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4MTIsMHgwOCwweGU1LDB4ODAsMHhhMSwweDEyLDB4MzEsMHhlNywKKzB4NzgsMHg4NSwweDA2LDB4YjYsMHgwMCwweDExLDB4NzgsMHg4NSwweDc2LDB4MDAsMHg3OCwweDg2LDB4ZTYsMHhmNCwweDA0LDB4MDQsCisweGEyLDB4ZTAsMHg5MiwweGI0LDB4NzgsMHg4NiwweGY2LDB4ODAsMHg4NSwweGU0LDB4OTAsMHhmYiwweGZlLDB4ZjAsMHg5MCwweGZiLAorMHhmZCwweGUwLDB4N2QsMHgwMCwweGZjLDB4ZWQsMHg0NCwweGNmLDB4ZmQsMHgxMiwweDFjLDB4OTMsMHgxMiwweDMxLDB4MDgsMHgyMiwKKzB4MTIsMHgzMCwweDg1LDB4ZTUsMHg2YSwweDY0LDB4NDksMHg0NSwweDY5LDB4NjAsMHgxNSwweDkwLDB4ZmYsMHg4MywweGUwLDB4NTQsCisweDBmLDB4N2QsMHgwMCwweGQzLDB4OTUsMHg2YSwweGVkLDB4OTUsMHg2OSwweDUwLDB4MDUsMHgxMiwweDJlLDB4Y2UsMHg4MCwweDAzLAorMHgxMiwweDJmLDB4OWUsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweGU1LDB4NmEsMHg2NCwweDQ5LDB4NDUsMHg2OSwKKzB4NjAsMHgwNSwweDEyLDB4MmYsMHhkOCwweDgwLDB4MGUsMHg5MCwweGZmLDB4ODAsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLDB4ZmYsCisweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDhjLDB4NTQsMHhlYywweDU0LAorMHhmMCwweGI0LDB4MTAsMHgxNSwweDc1LDB4NjQsMHgzZCwweDc1LDB4NjMsMHhmZCwweDc1LDB4NjIsMHgwMSwweGU1LDB4NjQsMHgyNCwKKzB4MDMsMHhmNSwweDY0LDB4ZTUsMHg2MywweDM0LDB4MDAsMHhmNSwweDYzLDB4ZTQsMHhmNSwweDU3LDB4ZjUsMHg1NiwweGU1LDB4NTYsCisweGMzLDB4OTQsMHgwMSwweDUwLDB4MjcsMHhlNSwweDU0LDB4NTQsMHgwZiwweGZjLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLAorMHgxMiwweDBlLDB4ODIsMHg4YywweDU1LDB4ZWMsMHg2MCwweDAyLDB4ODAsMHgxMiwweDA1LDB4NjQsMHhlNSwweDY0LDB4NzAsMHgwMiwKKzB4MDUsMHg2MywweDA1LDB4NTcsMHhlNSwweDU3LDB4NzAsMHgwMiwweDA1LDB4NTYsMHg4MCwweGQyLDB4ZTUsMHg1NCwweDU0LDB4MGYsCisweDI0LDB4OTcsMHhmOCwweGM2LDB4NTQsMHhmZSwweGY2LDB4ZTUsMHg1NCwweDU0LDB4MGYsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDEyLAorMHgxMiwweDMxLDB4OWEsMHhlNSwweDU1LDB4MTQsMHg3MCwweDA5LDB4N2QsMHgwMCwweDdjLDB4MDksMHgxMiwweDI0LDB4YjEsMHg4MCwKKzB4MDcsMHhhZCwweDU3LDB4N2MsMHgwMCwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4OTAsCisweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4MzAsMHhlNywweDEzLDB4OTAsMHhmZiwweDgzLAorMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4NjcsMHg4MCwweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMSwKKzB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg1MywweDY3LDB4N2YsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDU0LDB4ZmUsCisweGYwLDB4OTAsMHhmZiwweDgxLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHgxMiwweDI1LDB4NjQsMHg5MCwweGZmLDB4ZmUsMHhlMCwweDQ0LAorMHgwNSwweGYwLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwKKzB4N2MsMHgwMSwweDEyLDB4MzIsMHg0OCwweDc4LDB4YTcsMHhlNiwweDQ0LDB4MDIsMHhmNiwweDc0LDB4ZmUsMHhmYywweDA0LDB4ZmQsCisweDEyLDB4MWMsMHhmZSwweDkwLDB4ZmYsMHg2YSwweGUwLDB4MzAsMHhlNywweDAyLDB4ODAsMHhmNywweGU0LDB4ZjUsMHg0ZSwweDc1LAorMHg0ZCwweDEwLDB4YWMsMHg0ZSwweGFkLDB4NGQsMHhlNSwweDRlLDB4MTUsMHg0ZSwweDcwLDB4MDIsMHgxNSwweDRkLDB4ZWMsMHg0ZCwKKzB4NjAsMHgwMiwweDgwLDB4ZWUsMHg0MywweDg3LDB4MDEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDdjLDB4MDIsCisweDEyLDB4MzEsMHgxNCwweDc4LDB4YTcsMHhlNiwweDU0LDB4ZmQsMHhmNiwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LAorMHg3OCwweGE3LDB4ZTYsMHgzMCwweGUwLDB4MmMsMHg3OCwweGE3LDB4ZTYsMHgzMCwweGUxLDB4MjYsMHg3OCwweGE3LDB4ZTYsMHhmYywKKzB4ZjUsMHg4MywweDE4LDB4ZTYsMHg0NCwweGYwLDB4ZmQsMHgxMiwweDFjLDB4OTMsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MjAsCisweGYwLDB4N2MsMHgwMiwweDEyLDB4MzIsMHg0OCwweDc4LDB4YTcsMHhlNiwweDU0LDB4ZmQsMHhmNiwweDc0LDB4MWEsMHg5MCwweGZmLAorMHhmZSwweGYwLDB4NzgsMHhhNywweGU2LDB4ZmMsMHhmNSwweDgzLDB4MTgsMHhlNiwweDQ0LDB4ZjEsMHhmZCwweDEyLDB4MWMsMHg5MywKKzB4MTIsMHgzMSwweDA4LDB4MjIsMHg3NSwweDY3LDB4MDAsMHg3NSwweDY4LDB4MDAsMHhlNCwweGY1LDB4NjYsMHhmNSwweDY1LDB4ZTQsCisweGY1LDB4NjksMHg3NSwweDZhLDB4NDksMHg3NCwweDg0LDB4OTAsMHhmZiwweDgyLDB4ZjAsMHg3NCwweDg0LDB4OTAsMHhmZiwweDgwLAorMHhmMCwweDc0LDB4ODAsMHg5MCwweGZmLDB4NjgsMHhmMCwweDc0LDB4ODAsMHg5MCwweGZmLDB4NmEsMHhmMCwweGFkLDB4NDYsMHhhZiwKKzB4NDUsMHg3ZSwweDAwLDB4ZWUsMHgyNCwweGZjLDB4NTAsMHgwMywweDAyLDB4MjEsMHg2YSwweGU0LDB4ZWUsMHg3NSwweGYwLDB4MDcsCisweGE0LDB4MjQsMHgzZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHg1NCwweDgwLAorMHhmZCwweGU0LDB4ZWYsMHg1NCwweDBmLDB4MTQsMHhmZiwweGVkLDB4NjAsMHgzOCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwKKzB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg5MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsCisweDA4LDB4YTQsMHgyNCwweDRhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHhlNCwweGVmLAorMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwKKzB4ODAsMHgzNCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4NzQsMHg5MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwYSwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4MGUsMHgwMiwweDIwLDB4ZDMsMHg4ZCwweDQ2LDB4OGUsMHg0NCwweDhmLDB4NDUsCisweDc0LDB4N2YsMHg5MCwweGZmLDB4ZmQsMHhmMCwweDc0LDB4OTAsMHg5MCwweGZmLDB4ZmMsMHhmMCwweDkwLDB4ZmMsMHgxOSwweGUwLAorMHgzMCwweGU2LDB4MDcsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDIyLDB4OTAsMHhmYywweDBkLDB4ZTAsMHgxNCwKKzB4NzAsMHgwNCwweDkwLDB4ZmMsMHgwYywweGUwLDB4NzAsMHgzOSwweDkwLDB4ZmMsMHgwMCwweDc5LDB4MDYsMHg3YSwweDM1LDB4N2IsCisweDEyLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwweDdmLDB4MDAsMHhlZiwweDMzLDB4NDAsMHgxNSwweGVmLDB4OTAsMHgzNSwweDRkLAorMHg5MywweGZjLDB4ZWYsMHgyNCwweDgwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlYywweGYwLDB4MGYsMHg4MCwKKzB4ZTcsMHg4ZiwweDU5LDB4OTAsMHhmYywweDJiLDB4NzksMHgxOCwweDdhLDB4MzUsMHg3YiwweDM1LDB4NzgsMHgwMSwweDEyLDB4MDMsCisweGY1LDB4ZTQsMHg5MCwweGZmLDB4ZmYsMHhmMCwweDc0LDB4NTEsMHg5MCwweGZmLDB4ZmEsMHhmMCwweDc0LDB4MDQsMHg5MCwweGZmLAorMHhmYiwweGYwLDB4NzQsMHg1MywweDkwLDB4ZmYsMHhmOCwweGYwLDB4NzQsMHg1MSwweDkwLDB4ZmYsMHhmOSwweGYwLDB4NzQsMHg1NSwKKzB4OTAsMHhmZiwweGY3LDB4ZjAsMHg3NCwweDkzLDB4OTAsMHhmZiwweGY2LDB4ZjAsMHg3NCwweDMyLDB4OTAsMHhmZiwweGY1LDB4ZjAsCisweDc1LDB4NjQsMHgzZCwweDc1LDB4NjMsMHhmZCwweDc1LDB4NjIsMHgwMSwweGU0LDB4OTAsMHhmZiwweDgzLDB4ZjAsMHg3NCwweDgwLAorMHg5MCwweGZmLDB4ODEsMHhmMCwweDc1LDB4NTgsMHgwNCwweGU1LDB4NTgsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4M2YsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHg3OCwweDg5LDB4ZjYsMHhmYywweDU0LDB4MGYsMHgxNCwweGZjLDB4NzgsCisweDg5LDB4ZWMsMHhmNiwweGU1LDB4NTgsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLAorMHhmNSwweDgzLDB4ZTAsMHg3OCwweDhjLDB4NzYsMHhmOCwweDA4LDB4NzYsMHgwMCwweGZjLDB4NzgsMHg4OSwweGU2LDB4NzUsMHhmMCwKKzB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDg5LDB4ZTYsCisweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LAorMHg4YywweGU2LDB4ZmYsMHgwOCwweGU2LDB4N2UsMHgwMywweGNmLDB4YzMsMHgxMywweGNmLDB4MTMsMHhkZSwweGY5LDB4ZmUsMHg3OCwKKzB4ODksMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWUsCisweGYwLDB4NzgsMHg4OSwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LAorMHg4MywweDc0LDB4ODAsMHhmMCwweDc4LDB4OGEsMHhlYywweGY2LDB4N2QsMHgwMCwweDc4LDB4OGQsMHhlNiwweDJjLDB4ZjYsMHgxOCwKKzB4ZTYsMHgzZCwweGY2LDB4NzgsMHg4YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4N2MsMHgwMywweGNkLDB4YzMsMHgxMywweGNkLDB4MTMsCisweGRjLDB4ZjksMHhmYywweDc4LDB4ODksMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHg4OSwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRlLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDhjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDc4LDB4ODksCisweGU2LDB4ZmYsMHg3ZSwweDAwLDB4ZWUsMHgyNCwweGZjLDB4NTAsMHgwMywweDAyLDB4MjQsMHg2YiwweGU0LDB4ZWUsMHg3NSwweGYwLAorMHgwNywweGE0LDB4MjQsMHgzZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHg1NCwKKzB4ODAsMHhmYSwweGU0LDB4ZWYsMHg1NCwweDBmLDB4MTQsMHhmZiwweGU0LDB4ZWUsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4NDEsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHg3OCwweDhhLDB4ZjYsMHhlZSwweDc1LDB4ZjAsMHg4MCwweGE0LAorMHgyNCwweDA4LDB4ZjgsMHhlNSwweGYwLDB4MzQsMHhmOCwweGY5LDB4ZTgsMHhmYywweGU5LDB4ZmQsMHg4YSwweDU5LDB4ZWEsMHg3MCwKKzB4MDMsMHgwMiwweDIzLDB4ZDgsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsCisweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDhhLDB4ZTYsMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LAorMHg0ZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweGVkLDB4ZmIsMHhlYywweDdhLDB4MDMsMHhjYiwKKzB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ5LDB4ZjUsCisweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHg3OCwweDhhLDB4ZTYsMHg3YiwweDAwLDB4ZmEsMHhlYywweDJhLAorMHhmYywweGVkLDB4M2IsMHhmZCwweGZiLDB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywweDEzLDB4Y2IsMHgxMywweGRhLDB4ZjksMHhmYSwKKzB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsCisweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0YSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLAorMHg3NCwweDgwLDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwKKzB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwweDAyLDB4MjQsMHg2NywweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc4LDB4OGEsMHhlNiwweGZhLDB4ZTQsMHhlZiwweDc1LAorMHhmMCwweDA4LDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4ZWQsMHhmYiwKKzB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywweDEzLDB4Y2IsMHgxMywweGRhLDB4ZjksMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsCisweGE0LDB4MjQsMHgwOSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweDc4LDB4OGEsMHhlNiwweDdiLAorMHgwMCwweGZhLDB4ZWMsMHgyYSwweGZjLDB4ZWQsMHgzYiwweGZkLDB4ZmIsMHhlYywweDdhLDB4MDMsMHhjYiwweGMzLDB4MTMsMHhjYiwKKzB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBkLDB4ZjUsMHg4MiwweGU0LDB4MzQsCisweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBhLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHgwZSwweDAyLDB4MjIsMHhmNCwweDhlLDB4NTgsMHg3OCwweDhjLDB4ZWQsCisweGY2LDB4MDgsMHhlYywweGY2LDB4NzgsMHg4OSwweGVmLDB4ZjYsMHgxMiwweDIwLDB4YTQsMHgyMiwweDhjLDB4MjYsMHhlYywweDMwLAorMHhlNywweDE4LDB4ZTUsMHgyNiwweDU0LDB4MGYsMHgxNCwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZGYsMHhmMCwweDgwLDB4MTYsMHhlNSwweDI2LDB4NTQsMHgwZiwweDE0LDB4NzUsCisweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhkZiwweGYwLAorMHgyMiwweGVjLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHg4YywweDI0LDB4ZWQsMHgyNCwweDAzLDB4ZjUsMHgyNSwweDdkLDB4MDAsMHhkMywKKzB4OTUsMHg2YywweGVkLDB4OTUsMHg2YiwweDQwLDB4MDMsMHg4NSwweDZjLDB4MjUsMHhlNSwweDI1LDB4MjQsMHhiNywweDUwLDB4MDksCisweDc1LDB4MjUsMHgwMywweDc0LDB4MDIsMHg5MCwweGZkLDB4M2YsMHhmMCwweGFjLDB4MjUsMHgxMiwweDJmLDB4YzMsMHgyMiwweGU0LAorMHhmNSwweDY2LDB4ZjUsMHg2NSwweDEyLDB4MjQsMHhlOCwweDIyLDB4OTAsMHhmZCwweDNkLDB4ZTAsMHg2NSwweDZkLDB4NjAsMHgwZSwKKzB4NzQsMHgwNCwweDkwLDB4ZmQsMHgzZiwweGYwLDB4ZTQsMHhmNSwweDY1LDB4NzUsMHg2NiwweDAzLDB4ODAsMHg0NiwweDdkLDB4NmQsCisweGU0LDB4ZmUsMHhmZiwweDc5LDB4M2QsMHg3YSwweGZkLDB4N2IsMHgwMSwweDc0LDB4MDUsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLAorMHhlNSwweDY2LDB4MjQsMHgwMywweGY1LDB4NjYsMHhlNSwweDY1LDB4MzQsMHgwMCwweGY1LDB4NjUsMHhlNSwweDY2LDB4ZDMsMHg5NSwKKzB4NmMsMHhlNSwweDY1LDB4OTUsMHg2YiwweDQwLDB4MDYsMHg4NSwweDZjLDB4NjYsMHg4NSwweDZiLDB4NjUsMHhkMywweGU1LDB4NjYsCisweDk0LDB4NDgsMHhlNSwweDY1LDB4OTQsMHgwMCwweDQwLDB4MGMsMHg3NCwweDAyLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHhlNCwweGY1LAorMHg2NSwweDc1LDB4NjYsMHgwMywweGFjLDB4NjYsMHgxMiwweDJmLDB4YzMsMHgyMiwweGVjLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHhlNCwKKzB4ZjUsMHg2NiwweGY1LDB4NjUsMHg4YywweDMyLDB4ZWMsMHg2MCwweDA1LDB4MTIsMHgyZiwweGI0LDB4ODAsMHgwNSwweDdjLDB4MDAsCisweDEyLDB4MmYsMHhjMywweDIyLDB4OTAsMHhmZiwweDA0LDB4ZTAsMHhmNSwweDRhLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZCwweGEzLAorMHhlMCwweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZiwweGEzLDB4ZTAsMHg3ZSwKKzB4MDAsMHhmZiwweGU0LDB4ZmUsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHhjMywweGVjLDB4OTQsMHg0OCwweGVkLDB4OTQsCisweDAwLDB4NTAsMHgyMiwweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLAorMHhmYywweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmYsMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmYywKKzB4ZWQsMHg0ZiwweGZkLDB4ODAsMHgwNCwweGU0LDB4ZmQsMHg3YywweDQ4LDB4OGMsMHg2YywweDhkLDB4NmIsMHg5MCwweGZmLDB4MDIsCisweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHg5MCwweGZmLDB4MDIsMHhlMCwweGZmLAorMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmNSwweDRjLDB4ZWQsMHg0ZiwweGY1LDB4NGIsMHg3NSwKKzB4NjQsMHgzZCwweDc1LDB4NjMsMHhmZCwweDc1LDB4NjIsMHgwMSwweDdkLDB4M2QsMHg3ZSwweGZkLDB4N2YsMHgwMSwweDc5LDB4NmQsCisweGU0LDB4ZmEsMHhmYiwweDc0LDB4MDUsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4NzUsMHg0OSwweDAwLDB4ZTUsMHg0OSwweDI0LAorMHhmZSwweDQwLDB4MTksMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHhlNCwweDEyLDB4MDMsMHgwZiwweDA1LDB4NDksMHgwZCwKKzB4ZWQsMHg3MCwweDAxLDB4MGUsMHg4ZCwweDY0LDB4OGUsMHg2MywweDhmLDB4NjIsMHg4MCwweGUxLDB4NzUsMHg2NCwweDNkLDB4NzUsCisweDYzLDB4ZmQsMHg3NSwweDYyLDB4MDEsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4NjAsMHhiNCwweDAwLDB4MDIsMHg4MCwweDA2LAorMHhkMywweDUwLDB4MDMsMHgwMiwweDJjLDB4MTIsMHhlNSwweDRhLDB4NTQsMHgwZiwweGY1LDB4NDksMHhlNSwweDRhLDB4NTQsMHg4MCwKKzB4YTIsMHhlMCwweDkyLDB4MDIsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLDB4MDEsMHg4MSwweDAwLDB4MGIsMHgyYywweDBkLDB4MjYsCisweDY3LDB4MjcsMHg4NSwweDJjLDB4MGQsMHgyOCwweDkxLDB4MmMsMHgwZCwweDI5LDB4NzQsMHgyOSwweGE4LDB4MmIsMHgwZiwweDJiLAorMHgxMiwweDJiLDB4NTIsMHgyYiwweGI2LDB4MmIsMHhlNCwweGU1LDB4NjcsMHgzMCwweGU3LDB4MGUsMHhlNSwweDRjLDB4NDUsMHg0YiwKKzB4NzAsMHgwOCwweGU1LDB4NmMsMHg2NCwweDAyLDB4NDUsMHg2YiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHg5MCwweGZmLDB4MDAsCisweGUwLDB4NTQsMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MjksMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLAorMHgyNywweDgyLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4NzQsMHgwMSwweDEyLDB4MDMsMHgwZiwweDc4LDB4YTcsMHhlNiwKKzB4MzAsMHhlMCwweDBiLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4NzQsMHgwMiwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDIsCisweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYiwweGU1LDB4NjcsMHgyMCwweGUxLAorMHgwNywweGU1LDB4NGEsMHg2MCwweDAzLDB4MDIsMHgyNywweDgyLDB4ZTUsMHg0YSwweDI0LDB4ZmUsMHg1MCwweDAzLDB4MDIsMHgyNywKKzB4ODIsMHg3YywweDAyLDB4MTIsMHgyZiwweGMzLDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsCisweDI3LDB4ODAsMHhlNSwweDY3LDB4MjAsMHhlMSwweDBkLDB4ZTUsMHg0YSwweDYwLDB4MDksMHhlNSwweDRhLDB4NjQsMHg4MCwweDYwLAorMHgwMywweDAyLDB4MjcsMHg4MiwweGFjLDB4NGEsMHgxMiwweDMwLDB4NGEsMHg0MCwweDAzLDB4MDIsMHgyNywweDgyLDB4ZTUsMHg0OSwKKzB4NzAsMHgyNSwweDMwLDB4MDIsMHgxMSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsCisweDYyLDB4MTIsMHgwMywweDBmLDB4ODAsMHgwZiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsMHhhZSwweDYzLAorMHhhZiwweDYyLDB4MTIsMHgwMywweDBmLDB4ODAsMHgzZCwweDE1LDB4NDksMHgzMCwweDAyLDB4MWQsMHhlNSwweDQ5LDB4NzUsMHhmMCwKKzB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsCisweGFlLDB4NjMsMHhhZiwweDYyLDB4MTIsMHgwMywweDBmLDB4ODAsMHgxYiwweGU1LDB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LAorMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDA4LDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwKKzB4NjIsMHgxMiwweDAzLDB4MGYsMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHgxMiwweDAxLDB4ZTYsMHg2MCwweDBiLDB4YWQsCisweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHg3NCwweDAxLDB4MTIsMHgwMywweDBmLDB4N2MsMHgwMiwweDEyLDB4MmYsMHhjMywweDIyLAorMHg4MCwweDAwLDB4MDIsMHgyYywweDBmLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweGU1LDB4NmMsMHg0NSwweDZiLDB4NjAsMHgwMywKKzB4MDIsMHgyYywweDBmLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsCisweDFhLDB4ZTUsMHg0YywweDE0LDB4NDUsMHg0YiwweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjgsMHg4ZSwweDc4LAorMHhhNywweGU2LDB4NTQsMHhmZSwweGY2LDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywKKzB4ZDMsMHg0MCwweDJhLDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwOCwweGU1LDB4NjcsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI4LDB4OGUsCisweGU1LDB4NjcsMHgzMCwweGUwLDB4MDQsMHhlNSwweDRhLDB4NzAsMHgwYiwweGU1LDB4NjcsMHgzMCwweGUxLDB4MDksMHhlNSwweDRhLAorMHgyNCwweGZlLDB4NTAsMHgwMywweDAyLDB4MjgsMHg4ZSwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGI0LDB4MDIsMHgwMiwKKzB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLDB4MjgsMHg4YywweGU1LDB4NGMsMHg0NSwweDRiLDB4NjAsMHgwMywweDAyLDB4MjgsCisweDhlLDB4YWMsMHg0YSwweDEyLDB4MzAsMHg0YSwweDQwLDB4MDMsMHgwMiwweDI4LDB4OGUsMHhlNSwweDY3LDB4MjAsMHhlMSwweDA3LAorMHhlNSwweDY3LDB4MjAsMHhlMCwweDAyLDB4ODAsMHg3NywweGU1LDB4NjcsMHgzMCwweGUwLDB4MDYsMHhlNSwweDQ5LDB4NjAsMHgwMiwKKzB4ODAsMHg2YywweGU1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg5MCwweGZmLDB4ODAsCisweGUwLDB4NTQsMHhmNywweGYwLDB4MjIsMHhlNSwweDQ5LDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwweDdkLAorMHgwMSwweDdjLDB4MDMsMHgxMiwweDBmLDB4MGIsMHg4MCwweDExLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwKKzB4N2QsMHgwMSwweDdjLDB4MDQsMHgxMiwweDBmLDB4MGIsMHg4MCwweDAwLDB4MTUsMHg0OSwweDMwLDB4MDIsMHgxNSwweGU1LDB4NDksCisweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGY3LAorMHhmMCwweDgwLDB4MTMsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwKKzB4ZjUsMHg4MywweGUwLDB4NTQsMHhmNywweGYwLDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsCisweDBmLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweGU1LDB4NmMsMHg0NSwweDZiLDB4NjAsMHgwMywweDAyLDB4MmMsMHgwZiwweDkwLAorMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYSwweGU1LDB4NGMsMHgxNCwKKzB4NDUsMHg0YiwweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjksMHg3MSwweDc4LDB4YTcsMHhlNiwweDQ0LDB4MDEsCisweGY2LDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgyOSwweGU1LAorMHg2NywweDIwLDB4ZTEsMHgwOCwweGU1LDB4NjcsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI5LDB4NzEsMHhlNSwweDY3LDB4MzAsMHhlMCwKKzB4MDQsMHhlNSwweDQ5LDB4NzAsMHgwYiwweGU1LDB4NjcsMHgzMCwweGUxLDB4MDgsMHhlNSwweDQ5LDB4MjQsMHhmZSwweDUwLDB4MDIsCisweDgwLDB4N2YsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDZmLAorMHhlNSwweDRjLDB4NDUsMHg0YiwweDYwLDB4MDIsMHg4MCwweDY5LDB4YWMsMHg0YSwweDEyLDB4MzAsMHg0YSwweDQwLDB4MDIsMHg4MCwKKzB4NjAsMHhlNSwweDY3LDB4MjAsMHhlMSwweDA3LDB4ZTUsMHg2NywweDIwLDB4ZTAsMHgwMiwweDgwLDB4NTQsMHhlNSwweDQ5LDB4NzAsCisweDE0LDB4MzAsMHgwMiwweDA5LDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweDgyLAorMHhlMCwweDQ0LDB4MDgsMHhmMCwweDIyLDB4ZTUsMHg2NywweDMwLDB4ZTEsMHgzMywweDE1LDB4NDksMHgzMCwweDAyLDB4MTUsMHhlNSwKKzB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NDQsCisweDA4LDB4ZjAsMHg4MCwweDEzLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDgwLDB4MDIsMHg4MCwKKzB4MDAsMHgwMiwweDJjLDB4MGYsMHhlNSwweDY3LDB4MjAsMHhlNywweDEyLDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDBjLDB4ZTUsCisweDRhLDB4NzAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHhlNSwweDRjLAorMHg5MCwweGZmLDB4ZmYsMHhmMCwweDkwLDB4ZmYsMHhmZiwweGUwLDB4NjAsMHgwNSwweDQzLDB4NjcsMHgwMSwweDgwLDB4MDMsMHg1MywKKzB4NjcsMHhmZSwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGU1LDB4NjcsMHgzMCwweGU3LDB4MGUsMHhlNSwweDZjLDB4NDUsCisweDZiLDB4NjAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHhhZCwweDRiLAorMHhlNSwweDRjLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHhiZCwweDAwLDB4MDIsMHg4MCwweDAzLDB4MDIsMHgyYiwKKzB4MGEsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDMyLDB4ZTUsMHg0YSwweDcwLDB4MDUsMHhlNSwweDRjLDB4ZmMsCisweDYwLDB4MDMsMHgwMiwweDJiLDB4MGMsMHg3NSwweDY0LDB4MDAsMHg3NSwweDYzLDB4ZmMsMHg3NSwweDYyLDB4MDEsMHhkMywweGU1LAorMHg2YywweDk0LDB4MTIsMHhlNSwweDZiLDB4OTQsMHgwMCwweDQwLDB4MDYsMHhlNCwweGZkLDB4N2MsMHgxMiwweDgwLDB4MDQsMHhhYywKKzB4NmMsMHhhZCwweDZiLDB4OGMsMHg2YSwweDhkLDB4NjksMHgxMiwweDJmLDB4ZDgsMHgyMiwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHg1OSwweGU1LDB4NGEsMHg2MCwweDAzLDB4MDIsMHgyYiwweDBjLDB4ZTUsMHg0YywweGZjLDB4NzAsMHgyNywweDc1LAorMHg2NCwweDEyLDB4NzUsMHg2MywweGZjLDB4NzUsMHg2MiwweDAxLDB4ZDMsMHhlNSwweDZjLDB4OTQsMHgxOSwweGU1LDB4NmIsMHg5NCwKKzB4MDAsMHg0MCwweDA2LDB4ZTQsMHhmZCwweDdjLDB4MTksMHg4MCwweDA0LDB4YWMsMHg2YywweGFkLDB4NmIsMHg4YywweDZhLDB4OGQsCisweDY5LDB4MTIsMHgyZiwweGQ4LDB4ODAsMHgyNSwweDc1LDB4NjQsMHgyYiwweDc1LDB4NjMsMHhmYywweDc1LDB4NjIsMHgwMSwweGQzLAorMHhlNSwweDZjLDB4OTQsMHgzNSwweGU1LDB4NmIsMHg5NCwweDAwLDB4NDAsMHgwNiwweGU0LDB4ZmQsMHg3YywweDM1LDB4ODAsMHgwNCwKKzB4YWMsMHg2YywweGFkLDB4NmIsMHg4YywweDZhLDB4OGQsMHg2OSwweDEyLDB4MmYsMHhkOCwweDIyLDB4YjQsMHgwMywweDAyLDB4ODAsCisweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyYiwweDBhLDB4ZTUsMHg0YywweGY1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDA0LAorMHhlMCwweGZkLDB4YTMsMHhlMCwweDRkLDB4NjAsMHgwMywweDAyLDB4MmIsMHgwYywweDgwLDB4MTgsMHg5MCwweGZjLDB4ODIsMHhlMCwKKzB4ZmQsMHhhMywweGUwLDB4ZmMsMHg5MCwweGZmLDB4MDUsMHhlMCwweDZjLDB4NzAsMHgwNywweDkwLDB4ZmYsMHgwNCwweGUwLDB4NmQsCisweDYwLDB4MDIsMHg4MCwweDY4LDB4ZTQsMHhmNSwweDZhLDB4ZjUsMHg2OSwweDdmLDB4MDAsMHhlNSwweDQ5LDB4MTQsMHhjNSwweDQ5LAorMHg2MCwweDBmLDB4ZWYsMHgyNCwweDgwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlMCwweDJmLDB4ZmYsMHg4MCwKKzB4ZWEsMHg4ZiwweDRhLDB4ZTUsMHg0YSwweDI0LDB4ODAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4N2QsCisweDAwLDB4ZDMsMHg5NSwweDZjLDB4ZWQsMHg5NSwweDZiLDB4NDAsMHgwNiwweGFjLDB4NmMsMHhhZCwweDZiLDB4ODAsMHgwZiwweGU1LAorMHg0YSwweDI0LDB4ODAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4N2QsMHgwMCwweGZjLDB4OGMsMHg2YSwKKzB4OGQsMHg2OSwweGU1LDB4NGEsMHgyNCwweDgwLDB4ZmMsMHhlNCwweDM0LDB4ZmMsMHhmZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsCisweDhkLDB4NjQsMHg4ZSwweDYzLDB4OGYsMHg2MiwweDEyLDB4MmYsMHhkOCwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsMHgwZiwweDAyLAorMHgyYywweDBmLDB4ZTUsMHg2NywweDMwLDB4ZTcsMHgxOSwweGU1LDB4NmMsMHgxNCwweDQ1LDB4NmIsMHg3MCwweDEyLDB4ZTUsMHg0YSwKKzB4NzAsMHgwZSwweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsCisweDAyLDB4MmMsMHgwZiwweGU1LDB4NjcsMHgyMCwweGUwLDB4MDgsMHhlNSwweDY3LDB4MjAsMHhlMSwweDAzLDB4MDIsMHgyYywweDBmLAorMHg3NSwweDY0LDB4NjgsMHhlNCwweGY1LDB4NjMsMHhmNSwweDYyLDB4ZTQsMHhmNSwweDY5LDB4MDQsMHhmNSwweDZhLDB4MTIsMHgyZiwKKzB4ZDgsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MjcsMHhlNSwweDZjLDB4NDUsMHg2YiwweDcwLDB4MjEsMHhlNSwweDRhLDB4NzAsCisweDFkLDB4ZTUsMHg0YywweDY0LDB4MDIsMHg0NSwweDRiLDB4NjAsMHgwZCwweGU1LDB4NGMsMHgxNCwweDQ1LDB4NGIsMHg2MCwweDA2LAorMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywKKzB4MGYsMHhlNSwweDY3LDB4MjAsMHhlMCwweDA4LDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwMywweDAyLDB4MmMsMHgwZiwweDg1LDB4NGMsCisweDY4LDB4ZTUsMHg2OCwweDcwLDB4MDgsMHg0MywweDY3LDB4MDEsMHg1MywweDY3LDB4ZmQsMHg4MCwweDEzLDB4ZTUsMHg2OCwweDY0LAorMHgwMiwweDYwLDB4MDcsMHhlNSwweDY4LDB4MTQsMHg2MCwweDAyLDB4ODAsMHg2NSwweDUzLDB4NjcsMHhmZSwweDQzLDB4NjcsMHgwMiwKKzB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4ZTUsMHg2NywweDMwLDB4ZTcsMHgxYSwweGU1LDB4NmMsMHgxNCwweDQ1LDB4NmIsCisweDcwLDB4MTMsMHhlNSwweDRhLDB4NzAsMHgwZiwweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOSwweDkwLDB4ZmYsMHgwMCwweGUwLAorMHg1NCwweDFmLDB4MTQsMHg2MCwweDAyLDB4ODAsMHgzOCwweGU1LDB4NjcsMHgyMCwweGUxLDB4MDIsMHg4MCwweDMxLDB4N2MsMHgwMSwKKzB4MTIsMHgyZiwweGMzLDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDE1LDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDBmLDB4ZTUsCisweDRjLDB4NDUsMHg0YiwweDcwLDB4MDksMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHgxNCwweDYwLDB4MDIsMHg4MCwweDBmLAorMHhlNSwweDY3LDB4MjAsMHhlMSwweDAyLDB4ODAsMHgwOCwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDgwLDB4MDAsMHgwMiwKKzB4MmUsMHhjYSwweGI0LDB4NDAsMHgwMiwweDgwLDB4MDYsMHhkMywweDUwLDB4MDMsMHgwMiwweDJlLDB4YzAsMHg5MCwweGZmLDB4MDEsCisweGUwLDB4OTAsMHhmZCwweDNkLDB4ZjAsMHhlNSwweDRhLDB4OTAsMHhmZCwweDNlLDB4ZjAsMHhlNCwweDkwLDB4ZmQsMHgzZiwweGYwLAorMHhlNSwweDY0LDB4MjQsMHgwMywweGY1LDB4NjQsMHhlNSwweDYzLDB4MzQsMHgwMCwweGY1LDB4NjMsMHhhZCwweDRiLDB4ZTUsMHg0YywKKzB4ODUsMHg2NCwweDgyLDB4ODUsMHg2MywweDgzLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLDB4ZmYsMHgwMSwweGUwLDB4MTIsCisweDAxLDB4YjcsMHgyYywweDdkLDB4MDEsMHgyYywweGEzLDB4MDIsMHgyYywweGNkLDB4MDMsMHgyYywweGY3LDB4MDQsMHgyZCwweDQ1LAorMHgwNSwweDJkLDB4ODIsMHgwNiwweDJkLDB4YTgsMHgwNywweDJkLDB4Y2UsMHgwOCwweDJkLDB4ZjQsMHgwOSwweDJlLDB4MWEsMHgwYiwKKzB4MmUsMHg0MCwweDBjLDB4MmUsMHg0ZiwweDgwLDB4MmUsMHg0ZiwweDgxLDB4MDAsMHgwMCwweDJlLDB4YWQsMHhlNSwweDY3LDB4MjAsCisweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwweDRhLDB4MjIsMHg3ZCwweGI3LDB4N2UsMHgzNCwweDdmLDB4MDIsMHg3OSwweDQwLAorMHg3YSwweGZkLDB4N2IsMHgwMSwweDc0LDB4MDgsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4N2QsMHgwOCwweDdjLDB4MDAsMHgxMiwKKzB4MjQsMHhiMSwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwweDI1LDB4NGEsMHgyMiwweGU1LDB4NGEsCisweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLAorMHgxMCwweDEyLDB4MzEsMHg5YSwweDIyLDB4N2QsMHgwMCwweDdjLDB4MDcsMHgxMiwweDI0LDB4YjEsMHgyMiwweGU1LDB4NjcsMHgyMCwKKzB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwweDI1LDB4NGEsMHgyMiwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsCisweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTEsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdkLAorMHgwMCwweDdjLDB4MDcsMHgxMiwweDI0LDB4YjEsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwKKzB4NGEsMHgyMiwweGU1LDB4NGEsMHhiNCwweDA1LDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsCisweDdjLDB4MGEsMHgxMiwweDMxLDB4OWEsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MGEsMHhlNCwweGZmLAorMHgwNCwweGZlLDB4N2MsMHgwOCwweDEyLDB4MzEsMHg5YSwweDIyLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwKKzB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDEzLDB4MTIsMHgzMSwweDlhLDB4MjIsMHg3ZCwweDAwLDB4N2MsCisweDA3LDB4MTIsMHgyNCwweGIxLDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDM0LDB4ZDMsMHhlNSwweDZjLDB4OTQsMHg0OCwweGU1LAorMHg2YiwweDk0LDB4MDAsMHg1MCwweDA2LDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDA2LDB4N2MsMHgwMiwweDEyLDB4MjUsMHg0YSwKKzB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMSwweDAzLDB4YjMsMHg0MCwweDBiLDB4YzMsMHhiNCwweDAzLDB4MDAsMHg0MCwweDA5LDB4YjQsCisweDA2LDB4MDAsMHg1MCwweDA0LDB4MTIsMHgzMCwweDcwLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LAorMHhlOCwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwKKzB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTYsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdjLDB4MDcsCisweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDFkLDB4ZTUsMHg0YSwweGI0LAorMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxOSwKKzB4MTIsMHgzMSwweDlhLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LDB4ZTgsMHgyMiwweGU1LDB4NjcsCisweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LAorMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTcsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwKKzB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDFkLDB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsCisweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxOCwweDEyLDB4MzEsMHg5YSwweDIyLAorMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LDB4ZTgsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MWQsMHhlNSwKKzB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsCisweDdjLDB4MTUsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwweDEyLDB4MjQsMHhlOCwweDIyLAorMHhlNSwweDY3LDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNywweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwKKzB4NjcsMHgzMCwweGU3LDB4MjAsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg3MCwweDEwLDB4OTAsMHhmZiwweDAxLDB4ZTAsCisweGI0LDB4ODAsMHgwNSwweDEyLDB4MjQsMHhkZiwweDgwLDB4MDMsMHgxMiwweDI0LDB4ZTgsMHgyMiwweDdkLDB4MDAsMHg3YywweDA1LAorMHgxMiwweDI0LDB4YjEsMHgyMiwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwKKzB4NGEsMHgyMiwweGQzLDB4ZTUsMHg2YywweDk0LDB4NDgsMHhlNSwweDZiLDB4OTQsMHgwMCwweDUwLDB4MGIsMHhjMywweGU1LDB4NmMsCisweDk0LDB4MDcsMHhlNSwweDZiLDB4OTQsMHgwMCwweDUwLDB4MDYsMHg3YywweDAzLDB4MTIsMHgyNSwweDRhLDB4MjIsMHhlNSwweDRhLAorMHhiNCwweDA1LDB4MDQsMHgxMiwweDMwLDB4NzAsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwweGU1LDB4NjcsMHgzMCwKKzB4ZTcsMHgwOCwweDdkLDB4MDAsMHg3YywweDA1LDB4MTIsMHgyNCwweGIxLDB4MjIsMHg3YywweDA1LDB4MTIsMHgyNSwweDRhLDB4MjIsCisweGI0LDB4MjAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg4MCwweDAwLDB4MTIsMHgyZiwweDllLDB4MjIsMHg3NSwweDQzLAorMHgwMCwweDkwLDB4ZmYsMHg4MywweGUwLDB4NTQsMHgwZiwweGQzLDB4OTUsMHg0MywweDQwLDB4MjQsMHhlNSwweDQzLDB4MjQsMHhmMCwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZSwweGY1LDB4ODMsMHhlMCwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsMHg2MiwweDEyLDB4MDMsCisweDBmLDB4MDUsMHg0MywweDBkLDB4ZWQsMHg3MCwweDAxLDB4MGUsMHg4ZCwweDY0LDB4OGUsMHg2MywweDhmLDB4NjIsMHg4MCwweGQxLAorMHhlNSwweDQzLDB4N2QsMHgwMCwweGZjLDB4YzMsMHhlNSwweDZhLDB4OWMsMHhmNSwweDZhLDB4ZTUsMHg2OSwweDlkLDB4ZjUsMHg2OSwKKzB4ZTUsMHg2YSwweDQ1LDB4NjksMHg2MCwweDA2LDB4ZTQsMHg5MCwweGZmLDB4ODMsMHhmMCwweDIyLDB4OTAsMHhmZiwweDgyLDB4ZTAsCisweDQ0LDB4MDgsMHhmMCwweGU0LDB4ZjUsMHg2OSwweDc1LDB4NmEsMHg0OSwweDkwLDB4ZmQsMHgzZCwweGUwLDB4YjQsMHgwNSwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDQwLDB4OTAsMHhmZCwweDNlLDB4ZTAsMHhmNSwweDQzLDB4YjQsMHgwNSwweDAyLDB4ODAsMHgwMywKKzB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDBiLDB4MTIsMHgzMSwweDlhLDB4MjIsMHhiNCwweDAxLDB4MDIsCisweDgwLDB4MDMsMHhkMywweDQwLDB4MGEsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDksMHgxMiwweDMxLDB4OWEsMHgyMiwweGI0LAorMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDQzLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxNCwKKzB4MTIsMHgzMSwweDlhLDB4MjIsMHgyMiwweGI0LDB4ODAsMHgwMCwweDQwLDB4MjMsMHhiNCwweDgyLDB4MDAsMHg1MCwweDFlLDB4N2MsCisweDNkLDB4N2QsMHhmZCwweDEyLDB4MTcsMHhkNSwweDdkLDB4MDAsMHg4YywweDY2LDB4OGQsMHg2NSwweDkwLDB4ZmQsMHgzZiwweGUwLAorMHg2MCwweDA1LDB4MTIsMHgyZiwweDllLDB4ODAsMHgwNSwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDIyLDB4OTAsMHhmZiwKKzB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsMHhmZiwweDgwLDB4ZTAsCisweDQ0LDB4MDgsMHhmMCwweDIyLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg5MCwweGZmLDB4ODAsMHhlMCwweDQ0LAorMHgwOCwweGYwLDB4MjIsMHg4YywweDIzLDB4N2QsMHgwMCwweDhjLDB4NmEsMHg4ZCwweDY5LDB4NzUsMHg2NCwweDNkLDB4NzUsMHg2MywKKzB4ZmQsMHg3NSwweDYyLDB4MDEsMHgxMiwweDJmLDB4ZDgsMHgyMiwweDkwLDB4ZmYsMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4ZTUsCisweDZhLDB4NjQsMHg0OSwweDQ1LDB4NjksMHg3MCwweDAxLDB4MjIsMHhjMywweGU1LDB4NmEsMHg5NCwweDA4LDB4ZTUsMHg2OSwweDk0LAorMHgwMCwweDQwLDB4MTUsMHg3NSwweDIxLDB4MDgsMHhlNSwweDIxLDB4N2QsMHgwMCwweGZjLDB4YzMsMHhlNSwweDZhLDB4OWMsMHhmNSwKKzB4NmEsMHhlNSwweDY5LDB4OWQsMHhmNSwweDY5LDB4ODAsMHgwOSwweDg1LDB4NmEsMHgyMSwweGU0LDB4ZjUsMHg2OSwweDc1LDB4NmEsCisweDQ5LDB4NzUsMHgyMiwweDAwLDB4ZTUsMHgyMiwweGMzLDB4OTUsMHgyMSwweDUwLDB4MjYsMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLAorMHg2MiwweDEyLDB4MDEsMHhlNiwweGZjLDB4ZTUsMHgyMiwweDI0LDB4ZjgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZlLDB4ZjUsMHg4MywKKzB4ZWMsMHhmMCwweDA1LDB4MjIsMHgwZCwweGVkLDB4NzAsMHgwMSwweDBlLDB4OGQsMHg2NCwweDhlLDB4NjMsMHg4ZiwweDYyLDB4ODAsCisweGQzLDB4ZTUsMHgyMSwweDU0LDB4N2YsMHg5MCwweGZmLDB4ODEsMHhmMCwweDIyLDB4OGMsMHg0OCwweDdmLDB4MDAsMHhlZiwweDI0LAorMHhmYiwweDQwLDB4MTksMHhlNCwweGVmLDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDNmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywKKzB4ZjUsMHg4MywweGUwLDB4NjUsMHg0OCwweDcwLDB4MDIsMHhkMywweDIyLDB4MGYsMHg4MCwweGUyLDB4OGYsMHg0NywweGMzLDB4MjIsCisweDg1LDB4NmMsMHg2YSwweDg1LDB4NmIsMHg2OSwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHhmNywweGYwLDB4OTAsMHhmZiwweDgzLAorMHhlMCwweDU0LDB4N2YsMHhmMCwweDIyLDB4YzAsMHgwMCwweGMwLDB4MDEsMHhjMCwweDAyLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhlNSwKKzB4NzIsMHgyNCwweDA4LDB4ZjgsMHg4NiwweDA2LDB4NTMsMHgwNiwweDdmLDB4N2MsMHhmZiwweDEyLDB4MzAsMHhmYSwweDdjLDB4MDAsCisweDdkLDB4MDAsMHhlNSwweDc1LDB4NjAsMHg0NiwweGZmLDB4OTAsMHhmZSwweDlkLDB4ZTAsMHg1NCwweDdmLDB4NmUsMHg3MCwweDBmLAorMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywweGEzLDB4MTUsMHg3NSwweDgwLDB4MDcsMHhhMywKKzB4YTMsMHhhMywweGRmLDB4ZTYsMHg4MCwweDI2LDB4ZGYsMHgwNiwweGQwLDB4ODIsMHhkMCwweDgzLDB4ODAsMHgxZSwweGUwLDB4ZjgsCisweGEzLDB4ZTAsMHhmOSwweGEzLDB4ZTAsMHhmYSwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZTgsMHhmMCwweGEzLDB4ZTksMHhmMCwweGEzLAorMHhlYSwweGYwLDB4YTMsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGEsMHgxMiwweDMxLDB4OTMsMHhkMCwKKzB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwMiwweGQwLDB4MDEsMHhkMCwweDAwLDB4MjIsMHg4NSwweGE4LDB4NzQsMHg3NSwweGE4LDB4ODgsCisweGVjLDB4NzAsMHgwMiwweDdjLDB4M2YsMHg4YywweDczLDB4MjIsMHhlNSwweDcyLDB4MjQsMHgwOCwweGY4LDB4NzYsMHgwMCwweDEyLAorMHgzMSwweGU3LDB4ODAsMHhmYiwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDYsMHhjMCwweDA3LDB4YWUsMHgwNCwKKzB4N2MsMHhmZiwweDEyLDB4MzAsMHhmYSwweGU1LDB4NzUsMHg2MCwweDQyLDB4ZmYsMHg5MCwweGZlLDB4OWQsMHhlMCwweDU0LDB4N2YsCisweDZlLDB4NzAsMHgwYiwweGMwLDB4ODMsMHhjMCwweDgyLDB4YTMsMHhhMywweGEzLDB4MTUsMHg3NSwweDgwLDB4MDcsMHhhMywweGEzLAorMHhhMywweGRmLDB4ZWEsMHg4MCwweDI2LDB4ZGYsMHgwNiwweGQwLDB4ODIsMHhkMCwweDgzLDB4ODAsMHhkOCwweGUwLDB4ZjgsMHhhMywKKzB4ZTAsMHhmOSwweGEzLDB4ZTAsMHhmYSwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZTgsMHhmMCwweGEzLDB4ZTksMHhmMCwweGEzLDB4ZWEsCisweGYwLDB4YTMsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGEsMHg3OCwweDA4LDB4MDgsMHg3OSwweDE4LAorMHgwOSwweDdjLDB4MDEsMHhlNiwweDU0LDB4N2YsMHg2ZSwweDcwLDB4MDYsMHg3NiwweDAwLDB4NzcsMHgwMCwweDgwLDB4MDYsMHgwOCwKKzB4MDksMHgwYywweGJjLDB4MDgsMHhlZSwweDEyLDB4MzEsMHg5MywweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwMiwweGQwLDB4MDEsCisweGQwLDB4MDAsMHgyMiwweDc1LDB4NzMsMHgwMCwweDg1LDB4NzQsMHhhOCwweDIyLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLAorMHhjMywweGU1LDB4NzUsMHgyNCwweGU4LDB4NTAsMHgwNSwweDEyLDB4MzEsMHhlNywweDgwLDB4ZjQsMHhlYywweDYwLDB4MzEsMHg5MCwKKzB4MzQsMHhiNiwweGU0LDB4OTMsMHhjMywweDljLDB4NDAsMHgyOCwweGMwLDB4MDQsMHg3YywweGZmLDB4MTIsMHgzMCwweGZhLDB4ZDAsCisweDA0LDB4NDMsMHgwNCwweDgwLDB4ZTUsMHg3NSwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHg5ZCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZSwweGY1LDB4ODMsMHhlYywweGYwLDB4ZWYsMHhhMywweGYwLDB4ZWUsMHhhMywweGYwLDB4MDUsMHg3NSwweDEyLDB4MzEsMHg5MywKKzB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4MjIsMHhjMCwweDA0LDB4N2MsMHgyMCwweGQyLDB4OGMsMHhkMiwweDhkLDB4ZDUsCisweDA0LDB4ZmQsMHhkMCwweDA0LDB4MjIsMHg3NSwweGE4LDB4MDAsMHg3NSwweDg4LDB4MDAsMHg3NSwweGI4LDB4MDAsMHg3NSwweGYwLAorMHgwMCwweDc1LDB4ZDAsMHgwMCwweGU0LDB4ZjgsMHg5MCwweDAwLDB4MDAsMHhmNiwweDA4LDB4YjgsMHgwMCwweGZiLDB4MDIsMHgwMCwKKzB4MDAsMHhjMywweGVkLDB4OTQsMHgwMiwweDUwLDB4MDQsMHg3ZCwweDAzLDB4N2MsMHhlOCwweGVjLDB4ZjQsMHhmYywweGVkLDB4ZjQsCisweGZkLDB4MGMsMHhiYywweDAwLDB4MDEsMHgwZCwweDhjLDB4NzksMHg4ZCwweDc4LDB4MjIsMHhjMywweGVjLDB4OTQsMHhiYywweGVkLAorMHg5NCwweDAyLDB4NTAsMHgwNCwweDdkLDB4MDcsMHg3YywweGQwLDB4ZWMsMHhmNCwweGZjLDB4ZWQsMHhmNCwweGZkLDB4MGMsMHhiYywKKzB4MDAsMHgwMSwweDBkLDB4OGMsMHg3NywweDhkLDB4NzYsMHgyMiwweGVjLDB4NzAsMHgwMSwweDIyLDB4YzAsMHgwMCwweGU1LDB4NzIsCisweDI0LDB4MTgsMHhmOCwweGE2LDB4MDQsMHhlNSwweDcyLDB4MjQsMHgwOCwweGY4LDB4YzYsMHg1NCwweDdmLDB4ZjYsMHhlNiwweDMwLAorMHhlNywweDAzLDB4ZDAsMHgwMCwweDIyLDB4MTIsMHgzMSwweGU3LDB4ODAsMHhmNCwweGMyLDB4OGMsMHg4NSwweDc2LDB4OGMsMHg4NSwKKzB4NzcsMHg4YSwweGQyLDB4OGMsMHhjMCwweGUwLDB4YzAsMHhkMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4MDAsCisweGMwLDB4MDEsMHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDQsMHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHgxMiwweDFiLAorMHgyOCwweGU1LDB4NzIsMHgyNCwweDA4LDB4ZjgsMHhlNiwweDYwLDB4MjQsMHhlNSwweDcyLDB4MjQsMHgxMCwweGY4LDB4YTYsMHg4MSwKKzB4ZTUsMHg3MiwweDc1LDB4ZjAsMHgyMSwweGE0LDB4MjQsMHg5NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4NzgsCisweGE4LDB4ZTUsMHg4MSwweDA0LDB4YzMsMHg5OCwweGY5LDB4ZTYsMHhmMCwweDA4LDB4YTMsMHhkOSwweGZhLDB4NzQsMHgwOCwweDI1LAorMHg3MiwweGY4LDB4MDUsMHg3MiwweDA4LDB4ZTYsMHg1NCwweDgwLDB4NzAsMHgwYywweGU1LDB4NzIsMHhiNCwweDA3LDB4ZjMsMHg3OCwKKzB4MDgsMHg3NSwweDcyLDB4MDAsMHg4MCwweGVmLDB4ZTUsMHg3MiwweDI0LDB4MTAsMHhmOCwweDg2LDB4ODEsMHhlNSwweDcyLDB4NzUsCisweGYwLDB4MjEsMHhhNCwweDI0LDB4OTUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweDc4LDB4YTgsMHhlNSwweDgxLAorMHgwNCwweGMzLDB4OTgsMHhmOSwweGUwLDB4ZjYsMHgwOCwweGEzLDB4ZDksMHhmYSwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwKKzB4ZDAsMHgwNCwweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHgwMSwweGQwLDB4MDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsCisweGQwLDB4ZDAsMHhkMCwweGUwLDB4MzIsMHhjMCwweGUwLDB4YzAsMHhkMCwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMyLAorMHg4ZSwweDg1LDB4NzgsMHg4ZCwweDg1LDB4NzksMHg4YiwweGQyLDB4OGUsMHg3OCwweDE5LDB4NzksMHgwOSwweDdhLDB4MDcsMHhlNywKKzB4NzAsMHgwNCwweGE2LDB4MDAsMHg4MCwweDBiLDB4ZTYsMHg2MCwweDA4LDB4MTYsMHhlNiwweDcwLDB4MDQsMHhlNywweDQ0LDB4ODAsCisweGY3LDB4MDgsMHgwOSwweGRhLDB4ZWEsMHhlNSwweDczLDB4NjAsMHgxMywweDE0LDB4ZjUsMHg3MywweDcwLDB4MGUsMHhlNSwweDcyLAorMHgyNCwweDA4LDB4ZjgsMHg3NiwweDAwLDB4MTIsMHgzMSwweDkzLDB4ZDIsMHg4YywweGQyLDB4OGQsMHhkMCwweDAyLDB4ZDAsMHgwMSwKKzB4ZDAsMHgwMCwweGQwLDB4ZDAsMHhkMCwweGUwLDB4MzIsMHg3NSwweDgxLDB4YTcsMHg3NSwweDkwLDB4MDAsMHg3NSwweDc5LDB4MzAsCisweDc1LDB4NzgsMHhmOCwweDc1LDB4NzcsMHg2MCwweDc1LDB4NzYsMHhmMCwweDEyLDB4MDUsMHgzYywweDEyLDB4MzQsMHgwZiwweDEyLAorMHgxNywweDhiLDB4MTIsMHgzNCwweDM5LDB4MTIsMHgzMSwweGY1LDB4ODAsMHhlMywweDIyLDB4YzAsMHgwMCwweDdjLDB4MDEsMHhlYywKKzB4MjQsMHgwOCwweGY4LDB4ZTYsMHg2MCwweDA5LDB4MGMsMHhiYywweDA4LDB4ZjUsMHgxMiwweDMxLDB4ZTcsMHg4MCwweGVlLDB4ZDAsCisweDAwLDB4MjIsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAwLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhlZCwweDI0LAorMHgxMCwweGY4LDB4NzYsMHhiNiwweGVkLDB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDk1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwKKzB4ZjUsMHg4MywweGMwLDB4ODIsMHhjMCwweDgzLDB4YTMsMHhhMywweGU0LDB4NzgsMHgwZCwweGYwLDB4YTMsMHhkOCwweGZjLDB4ZWMsCisweDU0LDB4N2YsMHg3NSwweGYwLDB4MDIsMHhhNCwweDI0LDB4ODIsMHhmNSwweDgyLDB4ZTUsMHhmMCwweDM0LDB4MzQsMHhmNSwweDgzLAorMHhlNCwweDkzLDB4ZmUsMHg3NCwweDAxLDB4OTMsMHhmNSwweDgyLDB4OGUsMHg4MywweGU0LDB4OTMsMHhmZSwweDc0LDB4MDEsMHg5MywKKzB4ZmYsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGVmLDB4ZjAsMHhhMywweGVlLDB4ZjAsMHhlZCwweDI0LDB4MDgsMHhmOCwweGVjLDB4NDQsCisweDgwLDB4ZjYsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHgyMiwweDc1LAorMHg3MiwweDAwLDB4NzUsMHg3NSwweDAwLDB4N2EsMHgwOCwweDc5LDB4MTgsMHg3OCwweDA4LDB4NzYsMHgwMCwweDc3LDB4MDAsMHgwOCwKKzB4MDksMHhkYSwweGY4LDB4ZTQsMHg3OCwweDA4LDB4NzQsMHg4MCwweDQ0LDB4N2YsMHhmNiwweDc0LDB4MDEsMHg0NCwweDEwLDB4ZjUsCisweDg5LDB4NzUsMHhiOCwweDA4LDB4ZDIsMHhhYiwweGQyLDB4YTksMHgyMiwweDc1LDB4ODEsMHhhNywweGQyLDB4OGUsMHhkMiwweDhjLAorMHhkMiwweGFmLDB4ZTUsMHg3NSwweDYwLDB4MzIsMHhmZiwweDkwLDB4ZmUsMHg5ZCwweGUwLDB4NTQsMHg4MCwweDYwLDB4MjQsMHg3OCwKKzB4MDgsMHg3OSwweDA4LDB4ZTAsMHg1NCwweDdmLDB4ZmEsMHg3YiwweDAwLDB4ZTYsMHg1NCwweDdmLDB4YjUsMHgwMiwweDAyLDB4N2IsCisweGZmLDB4MDgsMHhkOSwweGY1LDB4ZWIsMHg3MCwweDBjLDB4ZWEsMHhmMCwweDEyLDB4MzMsMHg4YiwweGFkLDB4MDQsMHhhYywweDAyLAorMHgxMiwweDMzLDB4YTIsMHhhMywweGEzLDB4YTMsMHhkZiwweGQyLDB4MTIsMHgzMSwweGU3LDB4ODAsMHhjNSwweDdjLDB4MDEsMHg3ZCwKKzB4MDAsMHgyMiwweDA0LDB4ZjUsMHgwNCwweGU5LDB4MDQsMHhlZCwweDA0LDB4ZTEsMHgwNCwweGRkLDB4MDQsMHhkOSwweDA0LDB4ZTUsCisweDA0LDB4ZjEsMHgwNCwweDlkLDB4MDQsMHhhMSwweDA0LDB4Y2QsMHgwNCwweGQxLDB4MDQsMHg5OSwweDA0LDB4OTksMHgwNCwweDk5LAorMHgwNCwweGQ1LDB4MDQsMHhiNSwweDA0LDB4YWQsMHgwNCwweGIxLDB4MDQsMHhhOSwweDA0LDB4YzEsMHgwNCwweGJkLDB4MDQsMHhiOSwKKzB4MDQsMHhjNSwweDA0LDB4YzksMHgwNCwweGE1LDB4MTksMHgwMSwweDAzLDB4MDAsMHgyMiwweDAwLDB4NDgsMHgwMiwweDAwLDB4MjQsCisweDBmLDB4MTgsMHgwYSwweDEwLDB4NjQsMHgwZCwweDY4LDB4MGMsMHgwNSwweDA2LDB4MDIsMHgwMywweDAxLDB4MDEsMHg4MSwweDAxLAorMHgwMCwweDAwLDB4ZTcsMHgwMCwweGMwLDB4MDAsMHg4MCwweDAwLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgzMCwweDAwLDB4MTgsMHgwMCwKKzB4MGMsMHgwMCwweDA4LDB4MDAsMHgwNCwweDAwLDB4MDIsMHgwMCwweDAxLDB4MDAsMHgwOCwweDE4LDB4MzgsMHgyOCwweDA2LDB4MDIsCisweDEwLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgxLDB4MTAsMHgwYSwweDAyLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweDAwLDB4ZmIsMHhlOCwweGZiLDB4ZmEsMHgxMiwweDAxLDB4MTAsMHgwMSwweGZmLDB4MDAsMHgwMCwweDA4LDB4NTEsMHgwNCwKKzB4NWYsMHg1MCwweDE2LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMiwweDA5LDB4MDIsMHgzNSwweDAwLDB4MDEsMHgwMiwweDAwLDB4ZTAsCisweDAwLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDgxLDB4MDIsMHg0MCwweDAwLAorMHgwMCwweDA3LDB4MDUsMHgwMSwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDgyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywKKzB4MDUsMHgwMiwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDg1LDB4MDMsMHgwMiwweDAwLDB4MDEsMHgwNCwweDAzLDB4MDksCisweDA0LDB4MjQsMHgwMywweDU0LDB4MDAsMHg2NSwweDAwLDB4NzgsMHgwMCwweDYxLDB4MDAsMHg3MywweDAwLDB4MjAsMHgwMCwweDQ5LAorMHgwMCwweDZlLDB4MDAsMHg3MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg3NSwweDAwLDB4NmQsMHgwMCwweDY1LDB4MDAsMHg2ZSwKKzB4MDAsMHg3NCwweDAwLDB4NzMsMHgwMCwweDJhLDB4MDMsMHg1NCwweDAwLDB4NTUsMHgwMCwweDUzLDB4MDAsMHg0MiwweDAwLDB4MzUsCisweDAwLDB4MzAsMHgwMCwweDM1LDB4MDAsMHgzMiwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg2NSwweDAwLDB4NzIsMHgwMCwweDY5LAorMHgwMCwweDYxLDB4MDAsMHg2YywweDAwLDB4MjAsMHgwMCwweDUwLDB4MDAsMHg2ZiwweDAwLDB4NzIsMHgwMCwweDc0LDB4MDAsMHgyMiwKKzB4MDMsMHg1NCwweDAwLDB4NTUsMHgwMCwweDUzLDB4MDAsMHg0MiwweDAwLDB4MzUsMHgwMCwweDMwLDB4MDAsMHgzNSwweDAwLDB4MzIsCisweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLAorMHgwMCwKK307CisKKyNlbmRpZiAvKiBpZm5kZWYgX1RJX0ZXXzUwNTJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MDU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0wLDAgKzEsMTg0MiBAQAorLyogdmk6IHRzPTggc3c9OAorICoKKyAqIFRJIDM0MTAvNTA1MiBVU0IgU2VyaWFsIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBMaW51eCBpb190aSBkcml2ZXIsIHdoaWNoIGlzCisgKiAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEluc2lkZSBPdXQgTmV0d29ya3MKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGNvbnRhY3QgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIHRlY2huaWNhbCBzdXBwb3J0LCBvciBBbCBCb3JjaGVycyA8YWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPiwgb3IKKyAqIFBldGVyIEJlcmdlciA8cGJlcmdlckBicmltc29uLmNvbT4uCisgKiAKKyAqIFRoaXMgZHJpdmVyIG5lZWRzIHRoaXMgaG90cGx1ZyBzY3JpcHQgaW4gL2V0Yy9ob3RwbHVnL3VzYi90aV91c2JfMzQxMF81MDUyCisgKiBvciBpbiAvZXRjL2hvdHBsdWcuZC91c2IvdGlfdXNiXzM0MTBfNTA1Mi5ob3RwbHVnIHRvIHNldCB0aGUgZGV2aWNlCisgKiBjb25maWd1cmF0aW9uLgorICoKKyAqICMhL2Jpbi9iYXNoCisgKgorICogQk9PVF9DT05GSUc9MQorICogQUNUSVZFX0NPTkZJRz0yCisgKgorICogaWYgW1sgIiRBQ1RJT04iICE9ICJhZGQiIF1dCisgKiB0aGVuCisgKiAJZXhpdAorICogZmkKKyAqCisgKiBDT05GSUdfUEFUSD0vc3lzJHtERVZQQVRIJS8/Kn0vYkNvbmZpZ3VyYXRpb25WYWx1ZQorICoKKyAqIGlmIFtbIDBgY2F0ICRDT05GSUdfUEFUSGAgLW5lICRCT09UX0NPTkZJRyBdXQorICogdGhlbgorICogCWV4aXQKKyAqIGZpCisgKgorICogUFJPRFVDVD0ke1BST0RVQ1QlLz8qfQkJIyBkZWxldGUgdmVyc2lvbgorICogVkVORE9SX0lEPWBwcmludGYgIiVkIiAweCR7UFJPRFVDVCUvPyp9YAorICogUFJPRFVDVF9JRD1gcHJpbnRmICIlZCIgMHgke1BST0RVQ1QjKj8vfWAKKyAqCisgKiBQQVJBTV9QQVRIPS9zeXMvbW9kdWxlL3RpX3VzYl8zNDEwXzUwNTIvcGFyYW1ldGVycworICoKKyAqIGZ1bmN0aW9uIHNjYW4oKSB7CisgKiAJcz0kMQorICogCXNoaWZ0CisgKiAJZm9yIGkKKyAqIAlkbworICogCQlpZiBbWyAkcyAtZXEgJGkgXV0KKyAqIAkJdGhlbgorICogCQkJcmV0dXJuIDAKKyAqIAkJZmkKKyAqIAlkb25lCisgKiAJcmV0dXJuIDEKKyAqIH0KKyAqCisgKiBJRlM9JElGUywKKyAqCisgKiBpZiAoc2NhbiAkVkVORE9SX0lEIDExMDUgYGNhdCAkUEFSQU1fUEFUSC92ZW5kb3JfMzQxMGAgJiYKKyAqIHNjYW4gJFBST0RVQ1RfSUQgMTMzMjggYGNhdCAkUEFSQU1fUEFUSC9wcm9kdWN0XzM0MTBgKSB8fAorICogKHNjYW4gJFZFTkRPUl9JRCAxMTA1IGBjYXQgJFBBUkFNX1BBVEgvdmVuZG9yXzUwNTJgICYmCisgKiBzY2FuICRQUk9EVUNUX0lEIDIwNTYyIDIwODE4IDIwNTcwIDIwNTc1IGBjYXQgJFBBUkFNX1BBVEgvcHJvZHVjdF81MDUyYCkKKyAqIHRoZW4KKyAqIAllY2hvICRBQ1RJVkVfQ09ORklHID4gJENPTkZJR19QQVRICisgKiBmaQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAidGlfdXNiXzM0MTBfNTA1Mi5oIgorI2luY2x1ZGUgInRpX2Z3XzM0MTAuaCIJCS8qIGZpcm13YXJlIGltYWdlIGZvciAzNDEwICovCisjaW5jbHVkZSAidGlfZndfNTA1Mi5oIgkJLyogZmlybXdhcmUgaW1hZ2UgZm9yIDUwNTIgKi8KKworCisvKiBEZWZpbmVzICovCisKKyNkZWZpbmUgVElfRFJJVkVSX1ZFUlNJT04JInYwLjkiCisjZGVmaW5lIFRJX0RSSVZFUl9BVVRIT1IJIkFsIEJvcmNoZXJzIDxhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+IgorI2RlZmluZSBUSV9EUklWRVJfREVTQwkJIlRJIFVTQiAzNDEwLzUwNTIgU2VyaWFsIERyaXZlciIKKworI2RlZmluZSBUSV9GSVJNV0FSRV9CVUZfU0laRQkxNjI4NAorCisjZGVmaW5lIFRJX1dSSVRFX0JVRl9TSVpFCTEwMjQKKworI2RlZmluZSBUSV9UUkFOU0ZFUl9USU1FT1VUCTIKKworI2RlZmluZSBUSV9ERUZBVUxUX0xPV19MQVRFTkNZCTAKKyNkZWZpbmUgVElfREVGQVVMVF9DTE9TSU5HX1dBSVQJNDAwMAkJLyogaW4gLjAxIHNlY3MgKi8KKworLyogc3VwcG9ydGVkIHNldHNlcmlhbCBmbGFncyAqLworI2RlZmluZSBUSV9TRVRfU0VSSUFMX0ZMQUdTCShBU1lOQ19MT1dfTEFURU5DWSkKKworLyogcmVhZCB1cmIgc3RhdGVzICovCisjZGVmaW5lIFRJX1JFQURfVVJCX1JVTk5JTkcJMAorI2RlZmluZSBUSV9SRUFEX1VSQl9TVE9QUElORwkxCisjZGVmaW5lIFRJX1JFQURfVVJCX1NUT1BQRUQJMgorCisjZGVmaW5lIFRJX0VYVFJBX1ZJRF9QSURfQ09VTlQJNQorCisKKy8qIFN0cnVjdHVyZXMgKi8KKworc3RydWN0IHRpX3BvcnQgeworCWludAkJCXRwX2lzX29wZW47CisJX191OAkJCXRwX21zcjsKKwlfX3U4CQkJdHBfbHNyOworCV9fdTgJCQl0cF9zaGFkb3dfbWNyOworCV9fdTgJCQl0cF91YXJ0X21vZGU7CS8qIDIzMiBvciA0ODUgbW9kZXMgKi8KKwl1bnNpZ25lZCBpbnQJCXRwX3VhcnRfYmFzZV9hZGRyOworCWludAkJCXRwX2ZsYWdzOworCWludAkJCXRwX2Nsb3Npbmdfd2FpdDsvKiBpbiAuMDEgc2VjcyAqLworCXN0cnVjdCBhc3luY19pY291bnQJdHBfaWNvdW50OworCXdhaXRfcXVldWVfaGVhZF90CXRwX21zcl93YWl0OwkvKiB3YWl0IGZvciBtc3IgY2hhbmdlICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJdHBfd3JpdGVfd2FpdDsKKwlzdHJ1Y3QgdGlfZGV2aWNlCSp0cF90ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnRwX3BvcnQ7CisJc3BpbmxvY2tfdAkJdHBfbG9jazsKKwlpbnQJCQl0cF9yZWFkX3VyYl9zdGF0ZTsKKwlpbnQJCQl0cF93cml0ZV91cmJfaW5fdXNlOworCXN0cnVjdCBjaXJjX2J1ZgkJKnRwX3dyaXRlX2J1ZjsKK307CisKK3N0cnVjdCB0aV9kZXZpY2UgeworCXN0cnVjdCBzZW1hcGhvcmUJdGRfb3Blbl9jbG9zZV9zZW07CisJaW50CQkJdGRfb3Blbl9wb3J0X2NvdW50OworCXN0cnVjdCB1c2Jfc2VyaWFsCSp0ZF9zZXJpYWw7CisJaW50CQkJdGRfaXNfMzQxMDsKKwlpbnQJCQl0ZF91cmJfZXJyb3I7Cit9OworCisKKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgaW50IHRpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCB0aV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCB0aV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgdGlfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgdGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdGlfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCB0aV91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCB0aV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCB0aV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgdm9pZCB0aV9icmVhayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIHZvaWQgdGlfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgdGlfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHRpX2J1bGtfb3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgdm9pZCB0aV9yZWN2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIHRpX3NlbmQoc3RydWN0IHRpX3BvcnQgKnRwb3J0KTsKK3N0YXRpYyBpbnQgdGlfc2V0X21jcihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHVuc2lnbmVkIGludCBtY3IpOworc3RhdGljIGludCB0aV9nZXRfbHNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCk7CitzdGF0aWMgaW50IHRpX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRfYXJnKTsKK3N0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19hcmcpOworc3RhdGljIHZvaWQgdGlfaGFuZGxlX25ld19tc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBfX3U4IG1zcik7CisKK3N0YXRpYyB2b2lkIHRpX2RyYWluKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgZmx1c2gpOworCitzdGF0aWMgdm9pZCB0aV9zdG9wX3JlYWQoc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgdGlfcmVzdGFydF9yZWFkKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisKK3N0YXRpYyBpbnQgdGlfY29tbWFuZF9vdXRfc3luYyhzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBfX3U4IGNvbW1hbmQsCisJX191MTYgbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCBfX3U4ICpkYXRhLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IHRpX2NvbW1hbmRfaW5fc3luYyhzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBfX3U4IGNvbW1hbmQsCisJX191MTYgbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCBfX3U4ICpkYXRhLCBpbnQgc2l6ZSk7CisKK3N0YXRpYyBpbnQgdGlfd3JpdGVfYnl0ZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsCisJX191OCBtYXNrLCBfX3U4IGJ5dGUpOworCitzdGF0aWMgaW50IHRpX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB0aV9kZXZpY2UgKnRkZXYsCisJdW5zaWduZWQgY2hhciAqZmlybXdhcmUsIHVuc2lnbmVkIGludCBmaXJtd2FyZV9zaXplKTsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdGF0aWMgc3RydWN0IGNpcmNfYnVmICp0aV9idWZfYWxsb2Modm9pZCk7CitzdGF0aWMgdm9pZCB0aV9idWZfZnJlZShzdHJ1Y3QgY2lyY19idWYgKmNiKTsKK3N0YXRpYyB2b2lkIHRpX2J1Zl9jbGVhcihzdHJ1Y3QgY2lyY19idWYgKmNiKTsKK3N0YXRpYyBpbnQgdGlfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYik7CitzdGF0aWMgaW50IHRpX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgY2lyY19idWYgKmNiKTsKK3N0YXRpYyBpbnQgdGlfYnVmX3B1dChzdHJ1Y3QgY2lyY19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50IHRpX2J1Zl9nZXQoc3RydWN0IGNpcmNfYnVmICpjYiwgY2hhciAqYnVmLCBpbnQgY291bnQpOworCisKKy8qIERhdGEgKi8KKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGxvd19sYXRlbmN5ID0gVElfREVGQVVMVF9MT1dfTEFURU5DWTsKK3N0YXRpYyBpbnQgY2xvc2luZ193YWl0ID0gVElfREVGQVVMVF9DTE9TSU5HX1dBSVQ7CitzdGF0aWMgdXNob3J0IHZlbmRvcl8zNDEwW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCB2ZW5kb3JfMzQxMF9jb3VudDsKK3N0YXRpYyB1c2hvcnQgcHJvZHVjdF8zNDEwW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCBwcm9kdWN0XzM0MTBfY291bnQ7CitzdGF0aWMgdXNob3J0IHZlbmRvcl81MDUyW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCB2ZW5kb3JfNTA1Ml9jb3VudDsKK3N0YXRpYyB1c2hvcnQgcHJvZHVjdF81MDUyW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCBwcm9kdWN0XzUwNTJfY291bnQ7CisKKy8qIHN1cHBvcnRlZCBkZXZpY2VzICovCisvKiB0aGUgYXJyYXkgZGltZW5zaW9uIGlzIHRoZSBudW1iZXIgb2YgZGVmYXVsdCBlbnRyaWVzIHBsdXMgKi8KKy8qIFRJX0VYVFJBX1ZJRF9QSURfQ09VTlQgdXNlciBkZWZpbmVkIGVudHJpZXMgcGx1cyAxIHRlcm1pbmF0aW5nICovCisvKiBudWxsIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdGlfaWRfdGFibGVfMzQxMFsxK1RJX0VYVFJBX1ZJRF9QSURfQ09VTlQrMV0gPSB7CisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfMzQxMF9QUk9EVUNUX0lEKSB9LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRpX2lkX3RhYmxlXzUwNTJbNCtUSV9FWFRSQV9WSURfUElEX0NPVU5UKzFdID0geworCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUxNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfRUVQUk9NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfNTA1Ml9GSVJNV0FSRV9QUk9EVUNUX0lEKSB9LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRpX2lkX3RhYmxlX2NvbWJpbmVkW10gPSB7CisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfMzQxMF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUxNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfRUVQUk9NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfNTA1Ml9GSVJNV0FSRV9QUk9EVUNUX0lEKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHRpX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gInRpX3VzYl8zNDEwXzUwNTIiLAorCS5wcm9iZQkJCT0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdAkJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCQk9IHRpX2lkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHRpXzFwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiVEkgVVNCIDM0MTAgMSBwb3J0IGFkYXB0ZXIiLAorCS5pZF90YWJsZQkJPSB0aV9pZF90YWJsZV8zNDEwLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2J1bGtfb3V0CQk9IDEsCisJLm51bV9wb3J0cwkJPSAxLAorCS5hdHRhY2gJCQk9IHRpX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRpX3NodXRkb3duLAorCS5vcGVuCQkJPSB0aV9vcGVuLAorCS5jbG9zZQkJCT0gdGlfY2xvc2UsCisJLndyaXRlCQkJPSB0aV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSB0aV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSB0aV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IHRpX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IHRpX3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSB0aV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gdGlfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IHRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSB0aV90aW9jbXNldCwKKwkuYnJlYWtfY3RsCQk9IHRpX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IHRpX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gdGlfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IHRpX2J1bGtfb3V0X2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHRpXzJwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiVEkgVVNCIDUwNTIgMiBwb3J0IGFkYXB0ZXIiLAorCS5pZF90YWJsZQkJPSB0aV9pZF90YWJsZV81MDUyLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMiwKKwkubnVtX2J1bGtfb3V0CQk9IDIsCisJLm51bV9wb3J0cwkJPSAyLAorCS5hdHRhY2gJCQk9IHRpX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRpX3NodXRkb3duLAorCS5vcGVuCQkJPSB0aV9vcGVuLAorCS5jbG9zZQkJCT0gdGlfY2xvc2UsCisJLndyaXRlCQkJPSB0aV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSB0aV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSB0aV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IHRpX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IHRpX3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSB0aV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gdGlfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IHRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSB0aV90aW9jbXNldCwKKwkuYnJlYWtfY3RsCQk9IHRpX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IHRpX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gdGlfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IHRpX2J1bGtfb3V0X2NhbGxiYWNrLAorfTsKKworCisvKiBNb2R1bGUgKi8KKworTU9EVUxFX0FVVEhPUihUSV9EUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihUSV9EUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihUSV9EUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcsIDA9bm8sIDE9eWVzIik7CisKK21vZHVsZV9wYXJhbShsb3dfbGF0ZW5jeSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsb3dfbGF0ZW5jeSwgIlRUWSBsb3dfbGF0ZW5jeSBmbGFnLCAwPW9mZiwgMT1vbiwgZGVmYXVsdCBpcyBvZmYiKTsKKworbW9kdWxlX3BhcmFtKGNsb3Npbmdfd2FpdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb3Npbmdfd2FpdCwgIk1heGltdW0gd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBpbiBjbG9zZSwgaW4gLjAxIHNlY3MsIGRlZmF1bHQgaXMgNDAwMCIpOworCittb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yXzM0MTAsIHVzaG9ydCwgJnZlbmRvcl8zNDEwX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yXzM0MTAsICJWZW5kb3IgaWRzIGZvciAzNDEwIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworbW9kdWxlX3BhcmFtX2FycmF5KHByb2R1Y3RfMzQxMCwgdXNob3J0LCAmcHJvZHVjdF8zNDEwX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdF8zNDEwLCAiUHJvZHVjdCBpZHMgZm9yIDM0MTAgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7Cittb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yXzUwNTIsIHVzaG9ydCwgJnZlbmRvcl81MDUyX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yXzUwNTIsICJWZW5kb3IgaWRzIGZvciA1MDUyIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworbW9kdWxlX3BhcmFtX2FycmF5KHByb2R1Y3RfNTA1MiwgdXNob3J0LCAmcHJvZHVjdF81MDUyX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdF81MDUyLCAiUHJvZHVjdCBpZHMgZm9yIDUwNTIgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB0aV9pZF90YWJsZV9jb21iaW5lZCk7CisKKworLyogRnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgX19pbml0IHRpX2luaXQodm9pZCkKK3sKKwlpbnQgaSxqOworCWludCByZXQ7CisKKworCS8qIGluc2VydCBleHRyYSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRzICovCisJaiA9IHNpemVvZih0aV9pZF90YWJsZV8zNDEwKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpCisJCS0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7CisJZm9yIChpPTA7IGk8bWluKHZlbmRvcl8zNDEwX2NvdW50LHByb2R1Y3RfMzQxMF9jb3VudCk7IGkrKyxqKyspIHsKKwkJdGlfaWRfdGFibGVfMzQxMFtqXS5pZFZlbmRvciA9IHZlbmRvcl8zNDEwW2ldOworCQl0aV9pZF90YWJsZV8zNDEwW2pdLmlkUHJvZHVjdCA9IHByb2R1Y3RfMzQxMFtpXTsKKwkJdGlfaWRfdGFibGVfMzQxMFtqXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOworCX0KKwlqID0gc2l6ZW9mKHRpX2lkX3RhYmxlXzUwNTIpL3NpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9pZCkKKwkJLSBUSV9FWFRSQV9WSURfUElEX0NPVU5UIC0gMTsKKwlmb3IgKGk9MDsgaTxtaW4odmVuZG9yXzUwNTJfY291bnQscHJvZHVjdF81MDUyX2NvdW50KTsgaSsrLGorKykgeworCQl0aV9pZF90YWJsZV81MDUyW2pdLmlkVmVuZG9yID0gdmVuZG9yXzUwNTJbaV07CisJCXRpX2lkX3RhYmxlXzUwNTJbal0uaWRQcm9kdWN0ID0gcHJvZHVjdF81MDUyW2ldOworCQl0aV9pZF90YWJsZV81MDUyW2pdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7CisJfQorCisJcmV0ID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmdGlfMXBvcnRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF8xcG9ydDsKKwlyZXQgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkXzJwb3J0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF91c2I7CisKKwlpbmZvKFRJX0RSSVZFUl9ERVNDICIgIiBUSV9EUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX3VzYjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnRpXzJwb3J0X2RldmljZSk7CitmYWlsZWRfMnBvcnQ6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8xcG9ydF9kZXZpY2UpOworZmFpbGVkXzFwb3J0OgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHRpX2V4aXQodm9pZCkKK3sKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnRpXzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKK30KKworCittb2R1bGVfaW5pdCh0aV9pbml0KTsKK21vZHVsZV9leGl0KHRpX2V4aXQpOworCisKK3N0YXRpYyBpbnQgdGlfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB0aV9kZXZpY2UgKnRkZXY7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzZXJpYWwtPmRldjsKKwlpbnQgc3RhdHVzOworCWludCBpOworCisKKwlkYmcoIiVzIC0gcHJvZHVjdCAweCU0WCwgbnVtIGNvbmZpZ3VyYXRpb25zICVkLCBjb25maWd1cmF0aW9uIHZhbHVlICVkIiwKKwkgICAgX19GVU5DVElPTl9fLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkgICAgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucywKKwkgICAgZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisKKwkvKiBjcmVhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCXRkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0ZGV2LCAwLCBzaXplb2Yoc3RydWN0IHRpX2RldmljZSkpOworCXNlbWFfaW5pdCgmdGRldi0+dGRfb3Blbl9jbG9zZV9zZW0sIDEpOworCXRkZXYtPnRkX3NlcmlhbCA9IHNlcmlhbDsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgdGRldik7CisKKwkvKiBkZXRlcm1pbmUgZGV2aWNlIHR5cGUgKi8KKwlpZiAodXNiX21hdGNoX2lkKHNlcmlhbC0+aW50ZXJmYWNlLCB0aV9pZF90YWJsZV8zNDEwKSkKKwkJdGRldi0+dGRfaXNfMzQxMCA9IDE7CisJZGJnKCIlcyAtIGRldmljZSB0eXBlIGlzICVzIiwgX19GVU5DVElPTl9fLCB0ZGV2LT50ZF9pc18zNDEwID8gIjM0MTAiIDogIjUwNTIiKTsKKworCS8qIGlmIHdlIGhhdmUgb25seSAxIGNvbmZpZ3VyYXRpb24sIGRvd25sb2FkIGZpcm13YXJlICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPT0gMSkgeworCisJCWlmICh0ZGV2LT50ZF9pc18zNDEwKQorCQkJc3RhdHVzID0gdGlfZG93bmxvYWRfZmlybXdhcmUodGRldiwgdGlfZndfMzQxMCwKKwkJCQlzaXplb2YodGlfZndfMzQxMCkpOworCQllbHNlCisJCQlzdGF0dXMgPSB0aV9kb3dubG9hZF9maXJtd2FyZSh0ZGV2LCB0aV9md181MDUyLAorCQkJCXNpemVvZih0aV9md181MDUyKSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZyZWVfdGRldjsKKworCQkvKiAzNDEwIG11c3QgYmUgcmVzZXQsIDUwNTIgcmVzZXRzIGl0c2VsZiAqLworCQlpZiAodGRldi0+dGRfaXNfMzQxMCkgeworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKKwkJCXVzYl9yZXNldF9kZXZpY2UoZGV2KTsKKwkJfQorCisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV90ZGV2OworCX0gCisKKwkvKiB0aGUgc2Vjb25kIGNvbmZpZ3VyYXRpb24gbXVzdCBiZSBzZXQgKGluIHN5c2ZzIGJ5IGhvdHBsdWcgc2NyaXB0KSAqLworCWlmIChkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlID09IFRJX0JPT1RfQ09ORklHKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV90ZGV2OworCX0KKworCS8qIHNldCB1cCBwb3J0IHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl0cG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aV9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0cG9ydCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfdHBvcnRzOworCQl9CisJCW1lbXNldCh0cG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCB0aV9wb3J0KSk7CisJCXNwaW5fbG9ja19pbml0KCZ0cG9ydC0+dHBfbG9jayk7CisJCXRwb3J0LT50cF91YXJ0X2Jhc2VfYWRkciA9IChpID09IDAgPyBUSV9VQVJUMV9CQVNFX0FERFIgOiBUSV9VQVJUMl9CQVNFX0FERFIpOworCQl0cG9ydC0+dHBfZmxhZ3MgPSBsb3dfbGF0ZW5jeSA/IEFTWU5DX0xPV19MQVRFTkNZIDogMDsKKwkJdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCA9IGNsb3Npbmdfd2FpdDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHBvcnQtPnRwX21zcl93YWl0KTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCQl0cG9ydC0+dHBfd3JpdGVfYnVmID0gdGlfYnVmX2FsbG9jKCk7CisJCWlmICh0cG9ydC0+dHBfd3JpdGVfYnVmID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJa2ZyZWUodHBvcnQpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnJlZV90cG9ydHM7CisJCX0KKwkJdHBvcnQtPnRwX3BvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXRwb3J0LT50cF90ZGV2ID0gdGRldjsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgdHBvcnQpOworCQl0cG9ydC0+dHBfdWFydF9tb2RlID0gMDsJLyogZGVmYXVsdCBpcyBSUzIzMiAqLworCX0KKwkKKwlyZXR1cm4gMDsKKworZnJlZV90cG9ydHM6CisJZm9yICgtLWk7IGk+PTA7IC0taSkgeworCQl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQl0aV9idWZfZnJlZSh0cG9ydC0+dHBfd3JpdGVfYnVmKTsKKwkJa2ZyZWUodHBvcnQpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwl9CitmcmVlX3RkZXY6CisJa2ZyZWUodGRldik7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQgdGlfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWlmICh0cG9ydCkgeworCQkJdGlfYnVmX2ZyZWUodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJCQlrZnJlZSh0cG9ydCk7CisJCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwkJfQorCX0KKworCWlmICh0ZGV2KQorCQlrZnJlZSh0ZGV2KTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCB0aV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBwb3J0X251bWJlcjsKKwlpbnQgc3RhdHVzOworCV9fdTE2IG9wZW5fc2V0dGluZ3MgPSAoX191OCkoVElfUElQRV9NT0RFX0NPTlRJTk9VUyB8IAorCQkJICAgICBUSV9QSVBFX1RJTUVPVVRfRU5BQkxFIHwgCisJCQkgICAgIChUSV9UUkFOU0ZFUl9USU1FT1VUIDw8IDIpKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdGRldiA9IHRwb3J0LT50cF90ZGV2OworCisJLyogb25seSBvbmUgb3BlbiBvbiBhbnkgcG9ydCBvbiBhIGRldmljZSBhdCBhIHRpbWUgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ0ZGV2LT50ZF9vcGVuX2Nsb3NlX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gCisJCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisKKwlwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwltZW1zZXQoJih0cG9ydC0+dHBfaWNvdW50KSwgMHgwMCwgc2l6ZW9mKHRwb3J0LT50cF9pY291bnQpKTsKKworCXRwb3J0LT50cF9tc3IgPSAwOworCXRwb3J0LT50cF9zaGFkb3dfbWNyIHw9IChUSV9NQ1JfUlRTIHwgVElfTUNSX0RUUik7CisKKwkvKiBzdGFydCBpbnRlcnJ1cHQgdXJiIHRoZSBmaXJzdCB0aW1lIGEgcG9ydCBpcyBvcGVuZWQgb24gdGhpcyBkZXZpY2UgKi8KKwlpZiAodGRldi0+dGRfb3Blbl9wb3J0X2NvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHN0YXJ0IGludGVycnVwdCBpbiB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl1cmIgPSB0ZGV2LT50ZF9zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmI7CisJCWlmICghdXJiKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG5vIGludGVycnVwdCB1cmJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJZ290byB1cF9zZW07CisJCX0KKwkJdXJiLT5jb21wbGV0ZSA9IHRpX2ludGVycnVwdF9jYWxsYmFjazsKKwkJdXJiLT5jb250ZXh0ID0gdGRldjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gc3VibWl0IGludGVycnVwdCB1cmIgZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJZ290byB1cF9zZW07CisJCX0KKwl9CisKKwl0aV9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX09QRU5fUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9PUEVOX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCBvcGVuX3NldHRpbmdzLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgb3BlbiBjb21tYW5kLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX1NUQVJUX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfU1RBUlRfUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIDAsIE5VTEwsIDApOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBzdGFydCBjb21tYW5kLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX1BVUkdFX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfUFVSR0VfUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIFRJX1BVUkdFX0lOUFVULCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IGNsZWFyIGlucHV0IGJ1ZmZlcnMsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfUFVSR0VfUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIFRJX1BVUkdFX09VVFBVVCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBjbGVhciBvdXRwdXQgYnVmZmVycywgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwkvKiByZXNldCB0aGUgZGF0YSB0b2dnbGUgb24gdGhlIGJ1bGsgZW5kcG9pbnRzIHRvIHdvcmsgYXJvdW5kIGJ1ZyBpbgorCSAqIGhvc3QgY29udHJvbGxlcnMgd2hlcmUgdGhpbmdzIGdldCBvdXQgb2Ygc3luYyBzb21lIHRpbWVzICovCisJdXNiX2NsZWFyX2hhbHQoZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOworCXVzYl9jbGVhcl9oYWx0KGRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJdGlfc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisKKwlkYmcoIiVzIC0gc2VuZGluZyBUSV9PUEVOX1BPUlQgKDIpIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX09QRU5fUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIG9wZW5fc2V0dGluZ3MsIE5VTEwsIDApOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQgKDIpLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX1NUQVJUX1BPUlQgKDIpIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1NUQVJUX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCAwLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgc3RhcnQgY29tbWFuZCAoMiksICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCisJLyogc3RhcnQgcmVhZCB1cmIgKi8KKwlkYmcoIiVzIC0gc3RhcnQgcmVhZCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCXVyYiA9IHBvcnQtPnJlYWRfdXJiOworCWlmICghdXJiKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gcmVhZCB1cmJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCXRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9IFRJX1JFQURfVVJCX1JVTk5JTkc7CisJdXJiLT5jb21wbGV0ZSA9IHRpX2J1bGtfaW5fY2FsbGJhY2s7CisJdXJiLT5jb250ZXh0ID0gdHBvcnQ7CisJdXJiLT5kZXYgPSBkZXY7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gc3VibWl0IHJlYWQgdXJiIGZhaWxlZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwl0cG9ydC0+dHBfaXNfb3BlbiA9IDE7CisJKyt0ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQ7CisKKwlnb3RvIHVwX3NlbTsKKwordW5saW5rX2ludF91cmI6CisJaWYgKHRkZXYtPnRkX29wZW5fcG9ydF9jb3VudCA9PSAwKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+c2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiKTsKK3VwX3NlbToKKwl1cCgmdGRldi0+dGRfb3Blbl9jbG9zZV9zZW0pOworCWRiZygiJXMgLSBleGl0ICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQgdGlfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRpX2RldmljZSAqdGRldjsKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQ7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBzdGF0dXM7CisJaW50IGRvX3VwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJdGRldiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAodGRldiA9PSBOVUxMIHx8IHRwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXRwb3J0LT50cF9pc19vcGVuID0gMDsKKworCXRpX2RyYWluKHRwb3J0LCAodHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCpIWikvMTAwLCAxKTsKKworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCisJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnKCIlcyAtIHNlbmRpbmcgVElfQ0xPU0VfUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9DTE9TRV9QT1JULAorCQkgICAgIChfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCAwLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIGNsb3NlIHBvcnQgY29tbWFuZCwgJWRcbiIgLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisKKwkvKiBpZiBkb3duIGlzIGludGVycnVwdGVkLCBjb250aW51ZSBhbnl3YXkgKi8KKwlkb191cCA9ICFkb3duX2ludGVycnVwdGlibGUoJnRkZXYtPnRkX29wZW5fY2xvc2Vfc2VtKTsKKwktLXRwb3J0LT50cF90ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQ7CisJaWYgKHRwb3J0LT50cF90ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQgPD0gMCkgeworCQkvKiBsYXN0IHBvcnQgaXMgY2xvc2VkLCBzaHV0IGRvd24gaW50ZXJydXB0IHVyYiAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+c2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX29wZW5fcG9ydF9jb3VudCA9IDA7CisJfQorCWlmIChkb191cCkKKwkJdXAoJnRkZXYtPnRkX29wZW5fY2xvc2Vfc2VtKTsKKworCWRiZygiJXMgLSBleGl0IiwgX19GVU5DVElPTl9fKTsKK30KKworCitzdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJaW50IGNvdW50KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRwb3J0ID09IE5VTEwgfHwgIXRwb3J0LT50cF9pc19vcGVuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCWNvdW50ID0gdGlfYnVmX3B1dCh0cG9ydC0+dHBfd3JpdGVfYnVmLCBkYXRhLCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCXRpX3NlbmQodHBvcnQpOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBpbnQgdGlfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCXJvb20gPSB0aV9idWZfc3BhY2VfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KKworCitzdGF0aWMgaW50IHRpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCWNoYXJzID0gdGlfYnVmX2RhdGFfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCisKK3N0YXRpYyB2b2lkIHRpX3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoSV9JWE9GRih0dHkpIHx8IENfQ1JUU0NUUyh0dHkpKQorCQl0aV9zdG9wX3JlYWQodHBvcnQsIHR0eSk7CisKK30KKworCitzdGF0aWMgdm9pZCB0aV91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChJX0lYT0ZGKHR0eSkgfHwgQ19DUlRTQ1RTKHR0eSkpIHsKKwkJc3RhdHVzID0gdGlfcmVzdGFydF9yZWFkKHRwb3J0LCB0dHkpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3QgcmVzdGFydCByZWFkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KK30KKworCitzdGF0aWMgaW50IHRpX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCUwNFgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DR1NFUklBTCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiB0aV9nZXRfc2VyaWFsX2luZm8odHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NTU0VSSUFMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIHRpX3NldF9zZXJpYWxfaW5mbyh0cG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NNSVdBSVQ6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJY3ByZXYgPSB0cG9ydC0+dHBfaWNvdW50OworCQkJd2hpbGUgKDEpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZ0cG9ydC0+dHBfbXNyX3dhaXQpOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCQljbm93ID0gdHBvcnQtPnRwX2ljb3VudDsKKwkJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJCSAgICBjbm93LmRjZCA9PSBjcHJldi5kY2QgJiYgY25vdy5jdHMgPT0gY3ByZXYuY3RzKQorCQkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSkgKSB7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQljcHJldiA9IGNub3c7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFRJT0NHSUNPVU5UOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHRwb3J0LT50cF9pY291bnQucngsIHRwb3J0LT50cF9pY291bnQudHgpOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ0cG9ydC0+dHBfaWNvdW50LCBzaXplb2YodHBvcnQtPnRwX2ljb3VudCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCB0aV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3QgdGlfdWFydF9jb25maWcgKmNvbmZpZzsKKwl0Y2ZsYWdfdCBjZmxhZyxpZmxhZzsKKwlpbnQgYmF1ZDsKKwlpbnQgc3RhdHVzOworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCF0dHkgfHwgIXR0eS0+dGVybWlvcykgeworCQlkYmcoIiVzIC0gbm8gdHR5IG9yIHRlcm1pb3MiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CisKKwlpZiAob2xkX3Rlcm1pb3MgJiYgY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcKKwkmJiBpZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19pZmxhZykgeworCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyAtIGNsZmFnICUwOHgsIGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIGNmbGFnLCBpZmxhZyk7CisKKwlpZiAob2xkX3Rlcm1pb3MpCisJCWRiZygiJXMgLSBvbGQgY2xmYWcgJTA4eCwgb2xkIGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBvbGRfdGVybWlvcy0+Y19pZmxhZyk7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY29uZmlnID0ga21hbGxvYyhzaXplb2YoKmNvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghY29uZmlnKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNvbmZpZy0+d0ZsYWdzID0gMDsKKworCS8qIHRoZXNlIGZsYWdzIG11c3QgYmUgc2V0ICovCisJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfTVNfSU5UUzsKKwljb25maWctPndGbGFncyB8PSBUSV9VQVJUX0VOQUJMRV9BVVRPX1NUQVJUX0RNQTsKKwljb25maWctPmJVYXJ0TW9kZSA9IChfX3U4KSh0cG9ydC0+dHBfdWFydF9tb2RlKTsKKworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfNV9EQVRBX0JJVFM7CisJCQkgICAgYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVElfVUFSVF82X0RBVEFfQklUUzsKKwkJCSAgICBicmVhazsKKwkJY2FzZSBDUzc6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzdfREFUQV9CSVRTOworCQkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfOF9EQVRBX0JJVFM7CisJCQkgICAgYnJlYWs7CisJfQorCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HOworCQkJY29uZmlnLT5iUGFyaXR5ID0gVElfVUFSVF9PRERfUEFSSVRZOworCQl9IGVsc2UgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HOworCQkJY29uZmlnLT5iUGFyaXR5ID0gVElfVUFSVF9FVkVOX1BBUklUWTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbmZpZy0+d0ZsYWdzICY9IH5USV9VQVJUX0VOQUJMRV9QQVJJVFlfQ0hFQ0tJTkc7CisJCWNvbmZpZy0+YlBhcml0eSA9IFRJX1VBUlRfTk9fUEFSSVRZOyAJCisJfQorCisJaWYgKGNmbGFnICYgQ1NUT1BCKQorCQljb25maWctPmJTdG9wQml0cyA9IFRJX1VBUlRfMl9TVE9QX0JJVFM7CisJZWxzZQorCQljb25maWctPmJTdG9wQml0cyA9IFRJX1VBUlRfMV9TVE9QX0JJVFM7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCS8qIFJUUyBmbG93IGNvbnRyb2wgbXVzdCBiZSBvZmYgdG8gZHJvcCBSVFMgZm9yIGJhdWQgcmF0ZSBCMCAqLworCQlpZiAoKGNmbGFnICYgQ0JBVUQpICE9IEIwKQorCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfUlRTX0lOOworCQljb25maWctPndGbGFncyB8PSBUSV9VQVJUX0VOQUJMRV9DVFNfT1VUOworCX0gZWxzZSB7CisJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCXRpX3Jlc3RhcnRfcmVhZCh0cG9ydCwgdHR5KTsKKwl9CisKKwlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CisJCWNvbmZpZy0+Y1hvbiAgPSBTVEFSVF9DSEFSKHR0eSk7CisJCWNvbmZpZy0+Y1hvZmYgPSBTVE9QX0NIQVIodHR5KTsKKworCQlpZiAoSV9JWE9GRih0dHkpKQorCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfWF9JTjsKKwkJZWxzZQorCQkJdGlfcmVzdGFydF9yZWFkKHRwb3J0LCB0dHkpOworCisJCWlmIChJX0lYT04odHR5KSkKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX1hfT1VUOworCX0KKworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkgYmF1ZCA9IDk2MDA7CisJaWYgKHRwb3J0LT50cF90ZGV2LT50ZF9pc18zNDEwKQorCQljb25maWctPndCYXVkUmF0ZSA9IChfX3UxNikoKDkyMzA3NyArIGJhdWQvMikgLyBiYXVkKTsKKwllbHNlCisJCWNvbmZpZy0+d0JhdWRSYXRlID0gKF9fdTE2KSgoNDYxNTM4ICsgYmF1ZC8yKSAvIGJhdWQpOworCisJZGJnKCIlcyAtIEJhdWRSYXRlPSVkLCB3QmF1ZFJhdGU9JWQsIHdGbGFncz0weCUwNFgsIGJEYXRhQml0cz0lZCwgYlBhcml0eT0lZCwgYlN0b3BCaXRzPSVkLCBjWG9uPSVkLCBjWG9mZj0lZCwgYlVhcnRNb2RlPSVkIiwKKwlfX0ZVTkNUSU9OX18sIGJhdWQsIGNvbmZpZy0+d0JhdWRSYXRlLCBjb25maWctPndGbGFncywgY29uZmlnLT5iRGF0YUJpdHMsIGNvbmZpZy0+YlBhcml0eSwgY29uZmlnLT5iU3RvcEJpdHMsIGNvbmZpZy0+Y1hvbiwgY29uZmlnLT5jWG9mZiwgY29uZmlnLT5iVWFydE1vZGUpOworCisJY3B1X3RvX2JlMTZzKCZjb25maWctPndCYXVkUmF0ZSk7CisJY3B1X3RvX2JlMTZzKCZjb25maWctPndGbGFncyk7CisKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRwb3J0LT50cF90ZGV2LCBUSV9TRVRfQ09ORklHLAorCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgMCwgKF9fdTggKiljb25maWcsCisJCXNpemVvZigqY29uZmlnKSk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2V0IGNvbmZpZyBvbiBwb3J0ICVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgc3RhdHVzKTsKKworCS8qIFNFVF9DT05GSUcgYXNzZXJ0cyBSVFMgYW5kIERUUiwgcmVzZXQgdGhlbSBjb3JyZWN0bHkgKi8KKwltY3IgPSB0cG9ydC0+dHBfc2hhZG93X21jcjsKKwkvKiBpZiBiYXVkIHJhdGUgaXMgQjAsIGNsZWFyIFJUUyBhbmQgRFRSICovCisJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCkKKwkJbWNyICY9IH4oVElfTUNSX0RUUiB8IFRJX01DUl9SVFMpOworCXN0YXR1cyA9IHRpX3NldF9tY3IodHBvcnQsIG1jcik7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2V0IG1vZGVtIGNvbnRyb2wgb24gcG9ydCAlZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIHN0YXR1cyk7CisKKwlrZnJlZShjb25maWcpOworfQorCisKK3N0YXRpYyBpbnQgdGlfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IG1zcjsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltc3IgPSB0cG9ydC0+dHBfbXNyOworCW1jciA9IHRwb3J0LT50cF9zaGFkb3dfbWNyOworCisJcmVzdWx0ID0gKChtY3IgJiBUSV9NQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCisJCXwgKChtY3IgJiBUSV9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCXwgKChtY3IgJiBUSV9NQ1JfTE9PUCkgPyBUSU9DTV9MT09QIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQorCQl8ICgobXNyICYgVElfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9EU1IpID8gVElPQ01fRFNSIDogMCk7CisKKwlkYmcoIiVzIC0gMHglMDRYIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IHRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWNyID0gdHBvcnQtPnRwX3NoYWRvd19tY3I7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gVElfTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gVElfTUNSX0RUUjsKKwlpZiAoc2V0ICYgVElPQ01fTE9PUCkKKwkJbWNyIHw9IFRJX01DUl9MT09QOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQltY3IgJj0gflRJX01DUl9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQltY3IgJj0gflRJX01DUl9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fTE9PUCkKKwkJbWNyICY9IH5USV9NQ1JfTE9PUDsKKworCXJldHVybiB0aV9zZXRfbWNyKHRwb3J0LCBtY3IpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBzdGF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdGlfZHJhaW4odHBvcnQsICh0cG9ydC0+dHBfY2xvc2luZ193YWl0KkhaKS8xMDAsIDApOworCisJc3RhdHVzID0gdGlfd3JpdGVfYnl0ZSh0cG9ydC0+dHBfdGRldiwKKwkJdHBvcnQtPnRwX3VhcnRfYmFzZV9hZGRyICsgVElfVUFSVF9PRkZTRVRfTENSLAorCQlUSV9MQ1JfQlJFQUssIGJyZWFrX3N0YXRlID09IC0xID8gVElfTENSX0JSRUFLIDogMCk7CisKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gZXJyb3Igc2V0dGluZyBicmVhaywgJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IChzdHJ1Y3QgdGlfZGV2aWNlICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHRkZXYtPnRkX3NlcmlhbDsKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBmdW5jdGlvbjsKKwlpbnQgc3RhdHVzOworCV9fdTggbXNyOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biwgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChsZW5ndGggIT0gMikgeworCQlkYmcoIiVzIC0gYmFkIHBhY2tldCBzaXplLCAlZCIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzBdID09IFRJX0NPREVfSEFSRFdBUkVfRVJST1IpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGhhcmR3YXJlIGVycm9yLCAlZFxuIiwgX19GVU5DVElPTl9fLCBkYXRhWzFdKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnRfbnVtYmVyID0gVElfR0VUX1BPUlRfRlJPTV9DT0RFKGRhdGFbMF0pOworCWZ1bmN0aW9uID0gVElfR0VUX0ZVTkNfRlJPTV9DT0RFKGRhdGFbMF0pOworCisJZGJnKCIlcyAtIHBvcnRfbnVtYmVyICVkLCBmdW5jdGlvbiAlZCwgZGF0YSAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBmdW5jdGlvbiwgZGF0YVsxXSk7CisKKwlpZiAocG9ydF9udW1iZXIgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGJhZCBwb3J0IG51bWJlciwgJWRcbiIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG9ydCA9IHNlcmlhbC0+cG9ydFtwb3J0X251bWJlcl07CisKKwl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXRwb3J0KQorCQlnb3RvIGV4aXQ7CisKKwlzd2l0Y2ggKGZ1bmN0aW9uKSB7CisJY2FzZSBUSV9DT0RFX0RBVEFfRVJST1I6CisJCWRldl9lcnIoZGV2LCAiJXMgLSBEQVRBIEVSUk9SLCBwb3J0ICVkLCBkYXRhIDB4JTAyWFxuIiwgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBUSV9DT0RFX01PREVNX1NUQVRVUzoKKwkJbXNyID0gZGF0YVsxXTsKKwkJZGJnKCIlcyAtIHBvcnQgJWQsIG1zciAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBtc3IpOworCQl0aV9oYW5kbGVfbmV3X21zcih0cG9ydCwgbXNyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzIC0gdW5rbm93biBpbnRlcnJ1cHQgY29kZSwgMHglMDJYXG4iLCBfX0ZVTkNUSU9OX18sIGRhdGFbMV0pOworCQlicmVhazsKKwl9CisKK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKGRldiwgIiVzIC0gcmVzdWJtaXQgaW50ZXJydXB0IHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IChzdHJ1Y3QgdGlfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHBvcnQtPnRwX3BvcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duLCAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQl0cG9ydC0+dHBfdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzLCAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyApOworCQl0cG9ydC0+dHBfdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkKKwkJZ290byBleGl0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBzdG9wcGluZyByZWFkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0LT50dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgZGV2LCBfX0ZVTkNUSU9OX18sCisJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCQlpZiAoIXRwb3J0LT50cF9pc19vcGVuKQorCQkJZGJnKCIlcyAtIHBvcnQgY2xvc2VkLCBkcm9wcGluZyBkYXRhIiwgX19GVU5DVElPTl9fKTsKKwkJZWxzZQorCQkJdGlfcmVjdigmdXJiLT5kZXYtPmRldiwgcG9ydC0+dHR5LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCisJCXNwaW5fbG9jaygmdHBvcnQtPnRwX2xvY2spOworCQl0cG9ydC0+dHBfaWNvdW50LnJ4ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJc3Bpbl91bmxvY2soJnRwb3J0LT50cF9sb2NrKTsKKwl9CisKK2V4aXQ6CisJLyogY29udGludWUgdG8gcmVhZCB1bmxlc3Mgc3RvcHBpbmcgKi8KKwlzcGluX2xvY2soJnRwb3J0LT50cF9sb2NrKTsKKwlpZiAodHBvcnQtPnRwX3JlYWRfdXJiX3N0YXRlID09IFRJX1JFQURfVVJCX1JVTk5JTkcpIHsKKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UgaWYgKHRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9PSBUSV9SRUFEX1VSQl9TVE9QUElORykgeworCQl0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPSBUSV9SRUFEX1VSQl9TVE9QUEVEOworCX0KKwlzcGluX3VubG9jaygmdHBvcnQtPnRwX2xvY2spOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoZGV2LCAiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfYnVsa19vdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSAoc3RydWN0IHRpX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl0cG9ydC0+dHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biwgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cywgJWRcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQl0cG9ydC0+dHBfdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7CisJfQorCisJLyogc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSAqLworCXRpX3NlbmQodHBvcnQpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX3JlY3Yoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGNudDsKKworCWRvIHsKKwkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY250ID0gbWluKGxlbmd0aCwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCk7CisJCW1lbWNweSh0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBkYXRhLCBjbnQpOworCQltZW1zZXQodHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgMCwgY250KTsKKwkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuY291bnQgKz0gY250OworCQlkYXRhICs9IGNudDsKKwkJbGVuZ3RoIC09IGNudDsKKwl9IHdoaWxlIChsZW5ndGggPiAwKTsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfc2VuZChzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQpCit7CisJaW50IGNvdW50LCByZXN1bHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cG9ydC0+dHBfd3JpdGVfdXJiX2luX3VzZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY291bnQgPSB0aV9idWZfZ2V0KHRwb3J0LT50cF93cml0ZV9idWYsCisJCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJcG9ydC0+YnVsa19vdXRfc2l6ZSk7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJdHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCisJCQkgICB0aV9idWxrX291dF9jYWxsYmFjaywgdHBvcnQpOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gc3VibWl0IHdyaXRlIHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXRwb3J0LT50cF93cml0ZV91cmJfaW5fdXNlID0gMDsgCisJCS8qIFRPRE86IHJlc2NoZWR1bGUgdGlfc2VuZCAqLworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQl0cG9ydC0+dHBfaWNvdW50LnR4ICs9IGNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCX0KKworCS8qIG1vcmUgcm9vbSBpbiB0aGUgYnVmZmVyIGZvciBuZXcgd3JpdGVzLCB3YWtldXAgKi8KKwlpZiAodHR5KQorCQl0dHlfd2FrZXVwKHR0eSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7Cit9CisKKworc3RhdGljIGludCB0aV9zZXRfbWNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgdW5zaWduZWQgaW50IG1jcikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdGlfd3JpdGVfYnl0ZSh0cG9ydC0+dHBfdGRldiwKKwkJdHBvcnQtPnRwX3VhcnRfYmFzZV9hZGRyICsgVElfVUFSVF9PRkZTRVRfTUNSLAorCQlUSV9NQ1JfUlRTIHwgVElfTUNSX0RUUiB8IFRJX01DUl9MT09QLCBtY3IpOworCisJaWYgKCFzdGF0dXMpCisJCXRwb3J0LT50cF9zaGFkb3dfbWNyID0gbWNyOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2dldF9sc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0KQoreworCWludCBzaXplLHN0YXR1czsKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2ID0gdHBvcnQtPnRwX3RkZXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJc3RydWN0IHRpX3BvcnRfc3RhdHVzICpkYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCB0aV9wb3J0X3N0YXR1cyk7CisJZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3RhdHVzID0gdGlfY29tbWFuZF9pbl9zeW5jKHRkZXYsIFRJX0dFVF9QT1JUX1NUQVRVUywKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQrcG9ydF9udW1iZXIpLCAwLCAoX191OCAqKWRhdGEsIHNpemUpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBnZXQgcG9ydCBzdGF0dXMgY29tbWFuZCBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gZnJlZV9kYXRhOworCX0KKworCWRiZygiJXMgLSBsc3IgMHglMDJYIiwgX19GVU5DVElPTl9fLCBkYXRhLT5iTFNSKTsKKworCXRwb3J0LT50cF9sc3IgPSBkYXRhLT5iTFNSOworCitmcmVlX2RhdGE6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRfYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCByZXRfc2VyaWFsOworCisJaWYgKCFyZXRfYXJnKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmcmV0X3NlcmlhbCwgMCwgc2l6ZW9mKHJldF9zZXJpYWwpKTsKKworCXJldF9zZXJpYWwudHlwZSA9IFBPUlRfMTY1NTBBOworCXJldF9zZXJpYWwubGluZSA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJcmV0X3NlcmlhbC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlyZXRfc2VyaWFsLmZsYWdzID0gdHBvcnQtPnRwX2ZsYWdzOworCXJldF9zZXJpYWwueG1pdF9maWZvX3NpemUgPSBUSV9XUklURV9CVUZfU0laRTsKKwlyZXRfc2VyaWFsLmJhdWRfYmFzZSA9IHRwb3J0LT50cF90ZGV2LT50ZF9pc18zNDEwID8gOTIxNjAwIDogNDYwODAwOworCXJldF9zZXJpYWwuY2xvc2luZ193YWl0ID0gdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdDsKKworCWlmIChjb3B5X3RvX3VzZXIocmV0X2FyZywgJnJldF9zZXJpYWwsIHNpemVvZigqcmV0X2FyZykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19hcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld19hcmcsIHNpemVvZihuZXdfc2VyaWFsKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJdHBvcnQtPnRwX2ZsYWdzID0gbmV3X3NlcmlhbC5mbGFncyAmIFRJX1NFVF9TRVJJQUxfRkxBR1M7CisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9CisJCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisJdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0OworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdGlfaGFuZGxlX25ld19tc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBfX3U4IG1zcikKK3sKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50ICppY291bnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIG1zciAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIG1zcik7CisKKwlpZiAobXNyICYgVElfTVNSX0RFTFRBX01BU0spIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisJCWljb3VudCA9ICZ0cG9ydC0+dHBfaWNvdW50OworCQlpZiAobXNyICYgVElfTVNSX0RFTFRBX0NUUykKKwkJCWljb3VudC0+Y3RzKys7CisJCWlmIChtc3IgJiBUSV9NU1JfREVMVEFfRFNSKQorCQkJaWNvdW50LT5kc3IrKzsKKwkJaWYgKG1zciAmIFRJX01TUl9ERUxUQV9DRCkKKwkJCWljb3VudC0+ZGNkKys7CisJCWlmIChtc3IgJiBUSV9NU1JfREVMVEFfUkkpCisJCQlpY291bnQtPnJuZysrOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRwb3J0LT50cF9tc3Jfd2FpdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisJfQorCisJdHBvcnQtPnRwX21zciA9IG1zciAmIFRJX01TUl9NQVNLOworCisJLyogaGFuZGxlIENUUyBmbG93IGNvbnRyb2wgKi8KKwl0dHkgPSB0cG9ydC0+dHBfcG9ydC0+dHR5OworCWlmICh0dHkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKKwkJaWYgKG1zciAmIFRJX01TUl9DVFMpIHsKKwkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQl0dHlfd2FrZXVwKHR0eSk7CisJCX0gZWxzZSB7CisJCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHRpX2RyYWluKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgZmx1c2gpCit7CisJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IHRwb3J0LT50cF90ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgYnVmZmVyICovCisJdGRldi0+dGRfdXJiX2Vycm9yID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisJYWRkX3dhaXRfcXVldWUoJnRwb3J0LT50cF93cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAodGlfYnVmX2RhdGFfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1ZikgPT0gMAorCQl8fCB0aW1lb3V0ID09IDAgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkJfHwgdGRldi0+dGRfdXJiX2Vycm9yCisJCXx8ICF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkgIC8qIGRpc2Nvbm5lY3QgKi8KKwkJCWJyZWFrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnRwb3J0LT50cF93cml0ZV93YWl0LCAmd2FpdCk7CisKKwkvKiBmbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworCWlmIChmbHVzaCkKKwkJdGlfYnVmX2NsZWFyKHRwb3J0LT50cF93cml0ZV9idWYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCisJLyogd2FpdCBmb3IgZW1wdHkgdHggcmVnaXN0ZXIsIHBsdXMgMjAgbXMgKi8KKwl0aW1lb3V0ICs9IGppZmZpZXM7CisJdHBvcnQtPnRwX2xzciAmPSB+VElfTFNSX1RYX0VNUFRZOworCXdoaWxlICgobG9uZykoamlmZmllcyAtIHRpbWVvdXQpIDwgMCAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkmJiAhKHRwb3J0LT50cF9sc3ImVElfTFNSX1RYX0VNUFRZKSAmJiAhdGRldi0+dGRfdXJiX2Vycm9yCisJJiYgdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpIHsgIC8qIG5vdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKHRpX2dldF9sc3IodHBvcnQpKQorCQkJYnJlYWs7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgdGlfc3RvcF9yZWFkKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwlpZiAodHBvcnQtPnRwX3JlYWRfdXJiX3N0YXRlID09IFRJX1JFQURfVVJCX1JVTk5JTkcpCisJCXRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9IFRJX1JFQURfVVJCX1NUT1BQSU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKK30KKworCitzdGF0aWMgaW50IHRpX3Jlc3RhcnRfcmVhZChzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPT0gVElfUkVBRF9VUkJfU1RPUFBFRCkgeworCQl1cmIgPSB0cG9ydC0+dHBfcG9ydC0+cmVhZF91cmI7CisJCXVyYi0+Y29tcGxldGUgPSB0aV9idWxrX2luX2NhbGxiYWNrOworCQl1cmItPmNvbnRleHQgPSB0cG9ydDsKKwkJdXJiLT5kZXYgPSB0cG9ydC0+dHBfcG9ydC0+c2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJfQorCXRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9IFRJX1JFQURfVVJCX1JVTk5JTkc7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2NvbW1hbmRfb3V0X3N5bmMoc3RydWN0IHRpX2RldmljZSAqdGRldiwgX191OCBjb21tYW5kLAorCV9fdTE2IG1vZHVsZWlkLCBfX3UxNiB2YWx1ZSwgX191OCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh0ZGV2LT50ZF9zZXJpYWwtPmRldiwKKwkJdXNiX3NuZGN0cmxwaXBlKHRkZXYtPnRkX3NlcmlhbC0+ZGV2LCAwKSwgY29tbWFuZCwKKwkJKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCksCisJCXZhbHVlLCBtb2R1bGVpZCwgZGF0YSwgc2l6ZSwgMTAwMCk7CisKKwlpZiAoc3RhdHVzID09IHNpemUpCisJCXN0YXR1cyA9IDA7CisKKwlpZiAoc3RhdHVzID4gMCkKKwkJc3RhdHVzID0gLUVDT01NOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2NvbW1hbmRfaW5fc3luYyhzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBfX3U4IGNvbW1hbmQsCisJX191MTYgbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCBfX3U4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHRkZXYtPnRkX3NlcmlhbC0+ZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUodGRldi0+dGRfc2VyaWFsLT5kZXYsIDApLCBjb21tYW5kLAorCQkoVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4pLAorCQl2YWx1ZSwgbW9kdWxlaWQsIGRhdGEsIHNpemUsIDEwMDApOworCisJaWYgKHN0YXR1cyA9PSBzaXplKQorCQlzdGF0dXMgPSAwOworCisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IC1FQ09NTTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV93cml0ZV9ieXRlKHN0cnVjdCB0aV9kZXZpY2UgKnRkZXYsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwlfX3U4IG1hc2ssIF9fdTggYnl0ZSkKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCB0aV93cml0ZV9kYXRhX2J5dGVzICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ0ZGV2LT50ZF9zZXJpYWwtPmRldi0+ZGV2OworCisJZGJnKCIlcyAtIGFkZHIgMHglMDhsWCwgbWFzayAweCUwMlgsIGJ5dGUgMHglMDJYIiwgX19GVU5DVElPTl9fLCBhZGRyLCBtYXNrLCBieXRlKTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHRpX3dyaXRlX2RhdGFfYnl0ZXMpICsgMjsKKwlkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRhdGEtPmJBZGRyVHlwZSA9IFRJX1JXX0RBVEFfQUREUl9YREFUQTsKKwlkYXRhLT5iRGF0YVR5cGUgPSBUSV9SV19EQVRBX0JZVEU7CisJZGF0YS0+YkRhdGFDb3VudGVyID0gMTsKKwlkYXRhLT53QmFzZUFkZHJIaSA9IGNwdV90b19iZTE2KGFkZHI+PjE2KTsKKwlkYXRhLT53QmFzZUFkZHJMbyA9IGNwdV90b19iZTE2KGFkZHIpOworCWRhdGEtPmJEYXRhWzBdID0gbWFzazsKKwlkYXRhLT5iRGF0YVsxXSA9IGJ5dGU7CisKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1dSSVRFX0RBVEEsIFRJX1JBTV9QT1JULCAwLAorCQkoX191OCAqKWRhdGEsIHNpemUpOworCisJaWYgKHN0YXR1cyA8IDApCisJCWRldl9lcnIoZGV2LCAiJXMgLSBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LAorCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlLCB1bnNpZ25lZCBpbnQgZmlybXdhcmVfc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgYnVmZmVyX3NpemU7CisJaW50IHBvczsKKwlpbnQgbGVuOworCWludCBkb25lOworCV9fdTggY3MgPSAwOworCV9fdTggKmJ1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdGRldi0+dGRfc2VyaWFsLT5kZXY7CisJc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlciAqaGVhZGVyOworCXVuc2lnbmVkIGludCBwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwKKwkJdGRldi0+dGRfc2VyaWFsLT5wb3J0WzBdLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCisKKwlidWZmZXJfc2l6ZSA9IFRJX0ZJUk1XQVJFX0JVRl9TSVpFICsgc2l6ZW9mKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIpOworCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoYnVmZmVyLCBmaXJtd2FyZSwgZmlybXdhcmVfc2l6ZSk7CisJbWVtc2V0KGJ1ZmZlcitmaXJtd2FyZV9zaXplLCAweGZmLCBidWZmZXJfc2l6ZS1maXJtd2FyZV9zaXplKTsKKworCWZvcihwb3MgPSBzaXplb2Yoc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlcik7IHBvcyA8IGJ1ZmZlcl9zaXplOyBwb3MrKykKKwkJY3MgPSAoX191OCkoY3MgKyBidWZmZXJbcG9zXSk7CisKKwloZWFkZXIgPSAoc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlciAqKWJ1ZmZlcjsKKwloZWFkZXItPndMZW5ndGggPSBjcHVfdG9fbGUxNigoX191MTYpKGJ1ZmZlcl9zaXplIC0gc2l6ZW9mKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIpKSk7CisJaGVhZGVyLT5iQ2hlY2tTdW0gPSBjczsKKworCWRiZygiJXMgLSBkb3dubG9hZGluZyBmaXJtd2FyZSIsIF9fRlVOQ1RJT05fXyk7CisJZm9yIChwb3MgPSAwOyBwb3MgPCBidWZmZXJfc2l6ZTsgcG9zICs9IGRvbmUpIHsKKwkJbGVuID0gbWluKGJ1ZmZlcl9zaXplIC0gcG9zLCBUSV9ET1dOTE9BRF9NQVhfUEFDS0VUX1NJWkUpOworCQlzdGF0dXMgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCBidWZmZXIrcG9zLCBsZW4sICZkb25lLCAxMDAwKTsKKwkJaWYgKHN0YXR1cykKKwkJCWJyZWFrOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBlcnJvciBkb3dubG9hZGluZyBmaXJtd2FyZSwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlkYmcoIiVzIC0gZG93bmxvYWQgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBDaXJjdWxhciBCdWZmZXIgRnVuY3Rpb25zICovCisKKy8qCisgKiB0aV9idWZfYWxsb2MKKyAqCisgKiBBbGxvY2F0ZSBhIGNpcmN1bGFyIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY2lyY19idWYgKnRpX2J1Zl9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBjaXJjX2J1ZiAqY2I7CisKKwljYiA9IChzdHJ1Y3QgY2lyY19idWYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lyY19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2IgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwljYi0+YnVmID0ga21hbGxvYyhUSV9XUklURV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNiLT5idWYgPT0gTlVMTCkgeworCQlrZnJlZShjYik7CisJCXJldHVybiBOVUxMOworCX0KKworCXRpX2J1Zl9jbGVhcihjYik7CisKKwlyZXR1cm4gY2I7Cit9CisKKworLyoKKyAqIHRpX2J1Zl9mcmVlCisgKgorICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHZvaWQgdGlfYnVmX2ZyZWUoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwlrZnJlZShjYi0+YnVmKTsKKwlrZnJlZShjYik7Cit9CisKKworLyoKKyAqIHRpX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCisKK3N0YXRpYyB2b2lkIHRpX2J1Zl9jbGVhcihzdHJ1Y3QgY2lyY19idWYgKmNiKQoreworCWNiLT5oZWFkID0gY2ItPnRhaWwgPSAwOworfQorCisKKy8qCisgKiB0aV9idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyBpbnQgdGlfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwlyZXR1cm4gQ0lSQ19DTlQoY2ItPmhlYWQsY2ItPnRhaWwsVElfV1JJVEVfQlVGX1NJWkUpOworfQorCisKKy8qCisgKiB0aV9idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIGludCB0aV9idWZfc3BhY2VfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwlyZXR1cm4gQ0lSQ19TUEFDRShjYi0+aGVhZCxjYi0+dGFpbCxUSV9XUklURV9CVUZfU0laRSk7Cit9CisKKworLyoKKyAqIHRpX2J1Zl9wdXQKKyAqCisgKiBDb3B5IGRhdGEgZGF0YSBmcm9tIGEgdXNlciBidWZmZXIgYW5kIHB1dCBpdCBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIGludCB0aV9idWZfcHV0KHN0cnVjdCBjaXJjX2J1ZiAqY2IsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBjLCByZXQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJYyA9IENJUkNfU1BBQ0VfVE9fRU5EKGNiLT5oZWFkLCBjYi0+dGFpbCwgVElfV1JJVEVfQlVGX1NJWkUpOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCQlpZiAoYyA8PSAwKQorCQkJYnJlYWs7CisJCW1lbWNweShjYi0+YnVmICsgY2ItPmhlYWQsIGJ1ZiwgYyk7CisJCWNiLT5oZWFkID0gKGNiLT5oZWFkICsgYykgJiAoVElfV1JJVEVfQlVGX1NJWkUtMSk7CisJCWJ1ZiArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiB0aV9idWZfZ2V0CisgKgorICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgaW50IHRpX2J1Zl9nZXQoc3RydWN0IGNpcmNfYnVmICpjYiwgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IGMsIHJldCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQljID0gQ0lSQ19DTlRfVE9fRU5EKGNiLT5oZWFkLCBjYi0+dGFpbCwgVElfV1JJVEVfQlVGX1NJWkUpOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCQlpZiAoYyA8PSAwKQorCQkJYnJlYWs7CisJCW1lbWNweShidWYsIGNiLT5idWYgKyBjYi0+dGFpbCwgYyk7CisJCWNiLT50YWlsID0gKGNiLT50YWlsICsgYykgJiAoVElfV1JJVEVfQlVGX1NJWkUtMSk7CisJCWJ1ZiArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjMWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qIHZpOiB0cz04IHN3PTgKKyAqCisgKiBUSSAzNDEwLzUwNTIgVVNCIFNlcmlhbCBEcml2ZXIgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIExpbnV4IGlvX3RpIGRyaXZlciwgd2hpY2ggaXMKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgSW5zaWRlIE91dCBOZXR3b3JrcworICogICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZvciBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgY29udGFjdCBUZXhhcyBJbnN0cnVtZW50cworICogdGVjaG5pY2FsIHN1cHBvcnQsIG9yIEFsIEJvcmNoZXJzIDxhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+LCBvcgorICogUGV0ZXIgQmVyZ2VyIDxwYmVyZ2VyQGJyaW1zb24uY29tPi4KKyAqLworCisjaWZuZGVmIF9USV8zNDEwXzUwNTJfSF8KKyNkZWZpbmUgX1RJXzM0MTBfNTA1Ml9IXworCisvKiBDb25maWd1cmF0aW9uIGlkcyAqLworI2RlZmluZSBUSV9CT09UX0NPTkZJRwkJCTEKKyNkZWZpbmUgVElfQUNUSVZFX0NPTkZJRwkJMgorCisvKiBWZW5kb3IgYW5kIHByb2R1Y3QgaWRzICovCisjZGVmaW5lIFRJX1ZFTkRPUl9JRAkJCTB4MDQ1MQorI2RlZmluZSBUSV8zNDEwX1BST0RVQ1RfSUQJCTB4MzQxMAorI2RlZmluZSBUSV81MDUyX0JPT1RfUFJPRFVDVF9JRAkJMHg1MDUyCS8qIG5vIEVFUFJPTSwgbm8gZmlybXdhcmUgKi8KKyNkZWZpbmUgVElfNTE1Ml9CT09UX1BST0RVQ1RfSUQJCTB4NTE1MgkvKiBubyBFRVBST00sIG5vIGZpcm13YXJlICovCisjZGVmaW5lIFRJXzUwNTJfRUVQUk9NX1BST0RVQ1RfSUQJMHg1MDVBCS8qIEVFUFJPTSwgbm8gZmlybXdhcmUgKi8KKyNkZWZpbmUgVElfNTA1Ml9GSVJNV0FSRV9QUk9EVUNUX0lECTB4NTA1RgkvKiBmaXJtd2FyZSBpcyBydW5uaW5nICovCisKKy8qIENvbW1hbmRzICovCisjZGVmaW5lIFRJX0dFVF9WRVJTSU9OCQkJMHgwMQorI2RlZmluZSBUSV9HRVRfUE9SVF9TVEFUVVMJCTB4MDIKKyNkZWZpbmUgVElfR0VUX1BPUlRfREVWX0lORk8JCTB4MDMKKyNkZWZpbmUgVElfR0VUX0NPTkZJRwkJCTB4MDQKKyNkZWZpbmUgVElfU0VUX0NPTkZJRwkJCTB4MDUKKyNkZWZpbmUgVElfT1BFTl9QT1JUCQkJMHgwNgorI2RlZmluZSBUSV9DTE9TRV9QT1JUCQkJMHgwNworI2RlZmluZSBUSV9TVEFSVF9QT1JUCQkJMHgwOAorI2RlZmluZSBUSV9TVE9QX1BPUlQJCQkweDA5CisjZGVmaW5lIFRJX1RFU1RfUE9SVAkJCTB4MEEKKyNkZWZpbmUgVElfUFVSR0VfUE9SVAkJCTB4MEIKKyNkZWZpbmUgVElfUkVTRVRfRVhUX0RFVklDRQkJMHgwQworI2RlZmluZSBUSV9XUklURV9EQVRBCQkJMHg4MAorI2RlZmluZSBUSV9SRUFEX0RBVEEJCQkweDgxCisjZGVmaW5lIFRJX1JFUV9UWVBFX0NMQVNTCQkweDgyCisKKy8qIE1vZHVsZSBpZGVudGlmaWVycyAqLworI2RlZmluZSBUSV9JMkNfUE9SVAkJCTB4MDEKKyNkZWZpbmUgVElfSUVFRTEyODRfUE9SVAkJMHgwMgorI2RlZmluZSBUSV9VQVJUMV9QT1JUCQkJMHgwMworI2RlZmluZSBUSV9VQVJUMl9QT1JUCQkJMHgwNAorI2RlZmluZSBUSV9SQU1fUE9SVAkJCTB4MDUKKworLyogTW9kZW0gc3RhdHVzICovCisjZGVmaW5lIFRJX01TUl9ERUxUQV9DVFMJCTB4MDEKKyNkZWZpbmUgVElfTVNSX0RFTFRBX0RTUgkJMHgwMgorI2RlZmluZSBUSV9NU1JfREVMVEFfUkkJCQkweDA0CisjZGVmaW5lIFRJX01TUl9ERUxUQV9DRAkJCTB4MDgKKyNkZWZpbmUgVElfTVNSX0NUUwkJCTB4MTAKKyNkZWZpbmUgVElfTVNSX0RTUgkJCTB4MjAKKyNkZWZpbmUgVElfTVNSX1JJCQkJMHg0MAorI2RlZmluZSBUSV9NU1JfQ0QJCQkweDgwCisjZGVmaW5lIFRJX01TUl9ERUxUQV9NQVNLCQkweDBGCisjZGVmaW5lIFRJX01TUl9NQVNLCQkJMHhGMAorCisvKiBMaW5lIHN0YXR1cyAqLworI2RlZmluZSBUSV9MU1JfT1ZFUlJVTl9FUlJPUgkJMHgwMQorI2RlZmluZSBUSV9MU1JfUEFSSVRZX0VSUk9SCQkweDAyCisjZGVmaW5lIFRJX0xTUl9GUkFNSU5HX0VSUk9SCQkweDA0CisjZGVmaW5lIFRJX0xTUl9CUkVBSwkJCTB4MDgKKyNkZWZpbmUgVElfTFNSX0VSUk9SCQkJMHgwRgorI2RlZmluZSBUSV9MU1JfUlhfRlVMTAkJCTB4MTAKKyNkZWZpbmUgVElfTFNSX1RYX0VNUFRZCQkJMHgyMAorCisvKiBMaW5lIGNvbnRyb2wgKi8KKyNkZWZpbmUgVElfTENSX0JSRUFLCQkJMHg0MAorCisvKiBNb2RlbSBjb250cm9sICovCisjZGVmaW5lIFRJX01DUl9MT09QCQkJMHgwNAorI2RlZmluZSBUSV9NQ1JfRFRSCQkJMHgxMAorI2RlZmluZSBUSV9NQ1JfUlRTCQkJMHgyMAorCisvKiBNYXNrIHNldHRpbmdzICovCisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX1JUU19JTgkJMHgwMDAxCisjZGVmaW5lIFRJX1VBUlRfRElTQUJMRV9SVFMJCTB4MDAwMgorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9QQVJJVFlfQ0hFQ0tJTkcJMHgwMDA4CisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX0RTUl9PVVQJCTB4MDAxMAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9DVFNfT1VUCQkweDAwMjAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfWF9PVVQJCTB4MDA0MAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9YQV9PVVQJCTB4MDA4MAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9YX0lOCQkweDAxMDAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfRFRSX0lOCQkweDA4MDAKKyNkZWZpbmUgVElfVUFSVF9ESVNBQkxFX0RUUgkJMHgxMDAwCisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX01TX0lOVFMJCTB4MjAwMAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9BVVRPX1NUQVJUX0RNQQkweDQwMDAKKworLyogUGFyaXR5ICovCisjZGVmaW5lIFRJX1VBUlRfTk9fUEFSSVRZCQkweDAwCisjZGVmaW5lIFRJX1VBUlRfT0REX1BBUklUWQkJMHgwMQorI2RlZmluZSBUSV9VQVJUX0VWRU5fUEFSSVRZCQkweDAyCisjZGVmaW5lIFRJX1VBUlRfTUFSS19QQVJJVFkJCTB4MDMKKyNkZWZpbmUgVElfVUFSVF9TUEFDRV9QQVJJVFkJCTB4MDQKKworLyogU3RvcCBiaXRzICovCisjZGVmaW5lIFRJX1VBUlRfMV9TVE9QX0JJVFMJCTB4MDAKKyNkZWZpbmUgVElfVUFSVF8xXzVfU1RPUF9CSVRTCQkweDAxCisjZGVmaW5lIFRJX1VBUlRfMl9TVE9QX0JJVFMJCTB4MDIKKworLyogQml0cyBwZXIgY2hhcmFjdGVyICovCisjZGVmaW5lIFRJX1VBUlRfNV9EQVRBX0JJVFMJCTB4MDAKKyNkZWZpbmUgVElfVUFSVF82X0RBVEFfQklUUwkJMHgwMQorI2RlZmluZSBUSV9VQVJUXzdfREFUQV9CSVRTCQkweDAyCisjZGVmaW5lIFRJX1VBUlRfOF9EQVRBX0JJVFMJCTB4MDMKKworLyogMjMyLzQ4NSBtb2RlcyAqLworI2RlZmluZSBUSV9VQVJUXzIzMgkJCTB4MDAKKyNkZWZpbmUgVElfVUFSVF80ODVfUkVDRUlWRVJfRElTQUJMRUQJMHgwMQorI2RlZmluZSBUSV9VQVJUXzQ4NV9SRUNFSVZFUl9FTkFCTEVECTB4MDIKKworLyogUGlwZSB0cmFuc2ZlciBtb2RlIGFuZCB0aW1lb3V0ICovCisjZGVmaW5lIFRJX1BJUEVfTU9ERV9DT05USU5PVVMJCTB4MDEKKyNkZWZpbmUgVElfUElQRV9NT0RFX01BU0sJCTB4MDMKKyNkZWZpbmUgVElfUElQRV9USU1FT1VUX01BU0sJCTB4N0MKKyNkZWZpbmUgVElfUElQRV9USU1FT1VUX0VOQUJMRQkJMHg4MAorCisvKiBDb25maWcgc3RydWN0ICovCitzdHJ1Y3QgdGlfdWFydF9jb25maWcgeworCV9fdTE2CXdCYXVkUmF0ZTsKKwlfX3UxNgl3RmxhZ3M7CisJX191OAliRGF0YUJpdHM7CisJX191OAliUGFyaXR5OworCV9fdTgJYlN0b3BCaXRzOworCWNoYXIJY1hvbjsKKwljaGFyCWNYb2ZmOworCV9fdTgJYlVhcnRNb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogR2V0IHBvcnQgc3RhdHVzICovCitzdHJ1Y3QgdGlfcG9ydF9zdGF0dXMgeworCV9fdTgJYkNtZENvZGU7CisJX191OAliTW9kdWxlSWQ7CisJX191OAliRXJyb3JDb2RlOworCV9fdTgJYk1TUjsKKwlfX3U4CWJMU1I7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBQdXJnZSBtb2RlcyAqLworI2RlZmluZSBUSV9QVVJHRV9PVVRQVVQJCQkweDAwCisjZGVmaW5lIFRJX1BVUkdFX0lOUFVUCQkJMHg4MAorCisvKiBSZWFkL1dyaXRlIGRhdGEgKi8KKyNkZWZpbmUgVElfUldfREFUQV9BRERSX1NGUgkJMHgxMAorI2RlZmluZSBUSV9SV19EQVRBX0FERFJfSURBVEEJCTB4MjAKKyNkZWZpbmUgVElfUldfREFUQV9BRERSX1hEQVRBCQkweDMwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9DT0RFCQkweDQwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9HUElPCQkweDUwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9JMkMJCTB4NjAKKyNkZWZpbmUgVElfUldfREFUQV9BRERSX0ZMQVNICQkweDcwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9EU1AJCTB4ODAKKworI2RlZmluZSBUSV9SV19EQVRBX1VOU1BFQ0lGSUVECQkweDAwCisjZGVmaW5lIFRJX1JXX0RBVEFfQllURQkJCTB4MDEKKyNkZWZpbmUgVElfUldfREFUQV9XT1JECQkJMHgwMgorI2RlZmluZSBUSV9SV19EQVRBX0RPVUJMRV9XT1JECQkweDA0CisKK3N0cnVjdCB0aV93cml0ZV9kYXRhX2J5dGVzIHsKKwlfX3U4CWJBZGRyVHlwZTsKKwlfX3U4CWJEYXRhVHlwZTsKKwlfX3U4CWJEYXRhQ291bnRlcjsKKwlfX2JlMTYJd0Jhc2VBZGRySGk7CisJX19iZTE2CXdCYXNlQWRkckxvOworCV9fdTgJYkRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdGlfcmVhZF9kYXRhX3JlcXVlc3QgeworCV9fdTgJYkFkZHJUeXBlOworCV9fdTgJYkRhdGFUeXBlOworCV9fdTgJYkRhdGFDb3VudGVyOworCV9fYmUxNgl3QmFzZUFkZHJIaTsKKwlfX2JlMTYJd0Jhc2VBZGRyTG87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdGlfcmVhZF9kYXRhX2J5dGVzIHsKKwlfX3U4CWJDbWRDb2RlOworCV9fdTgJYk1vZHVsZUlkOworCV9fdTgJYkVycm9yQ29kZTsKKwlfX3U4CWJEYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogSW50ZXJydXB0IHN0cnVjdCAqLworc3RydWN0IHRpX2ludGVycnVwdCB7CisJX191OAliSUNvZGU7CisJX191OAliSUluZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBJbnRlcnJ1cHQgY29kZXMgKi8KKyNkZWZpbmUgVElfR0VUX1BPUlRfRlJPTV9DT0RFKGMpCSgoKGMpID4+IDQpIC0gMykKKyNkZWZpbmUgVElfR0VUX0ZVTkNfRlJPTV9DT0RFKGMpCSgoYykgJiAweDBmKQorI2RlZmluZSBUSV9DT0RFX0hBUkRXQVJFX0VSUk9SCQkweEZGCisjZGVmaW5lIFRJX0NPREVfREFUQV9FUlJPUgkJMHgwMworI2RlZmluZSBUSV9DT0RFX01PREVNX1NUQVRVUwkJMHgwNAorCisvKiBEb3dubG9hZCBmaXJtd2FyZSBtYXggcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgVElfRE9XTkxPQURfTUFYX1BBQ0tFVF9TSVpFCTY0CisKKy8qIEZpcm13YXJlIGltYWdlIGhlYWRlciAqLworc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlciB7CisJX19sZTE2CXdMZW5ndGg7CisJX191OAliQ2hlY2tTdW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBVQVJUIGFkZHJlc3NlcyAqLworI2RlZmluZSBUSV9VQVJUMV9CQVNFX0FERFIJCTB4RkZBMAkvKiBVQVJUIDEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRJX1VBUlQyX0JBU0VfQUREUgkJMHhGRkIwCS8qIFVBUlQgMiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVElfVUFSVF9PRkZTRVRfTENSCQkweDAwMDIJLyogVUFSVCBNQ1IgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIFRJX1VBUlRfT0ZGU0VUX01DUgkJMHgwMDA0CS8qIFVBUlQgTUNSIHJlZ2lzdGVyIG9mZnNldCAqLworCisjZW5kaWYgLyogX1RJXzM0MTBfNTA1Ml9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzNmY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTAsMCArMSwxNDM1IEBACisvKgorICogVVNCIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbCBCb3JjaGVycyAoYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRoZSBBQ00gZHJpdmVyIGJ5IEFybWluIEZ1ZXJzdCAod2hpY2ggd2FzIAorICogYmFzZWQgb24gYSBkcml2ZXIgYnkgQnJhZCBLZXJ5YW4pCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogKDEyLzEwLzIwMDIpIGdraAorICoJU3BsaXQgdGhlIHBvcnRzIG9mZiBpbnRvIHRoZWlyIG93biBzdHJ1Y3QgZGV2aWNlLCBhbmQgYWRkZWQgYQorICoJdXNiLXNlcmlhbCBidXMgZHJpdmVyLgorICoKKyAqICgxMS8xOS8yMDAyKSBna2gKKyAqCXJlbW92ZWQgYSBmZXcgI2lmZGVmcyBmb3IgdGhlIGdlbmVyaWMgY29kZSBhbmQgY2xlYW5lZCB1cCB0aGUgZmFpbHVyZQorICoJbG9naWMgaW4gaW5pdGlhbGl6YXRpb24uCisgKgorICogKDEwLzAyLzIwMDIpIGdraAorICoJbW92ZWQgdGhlIGNvbnNvbGUgY29kZSB0byBjb25zb2xlLmMgYW5kIG91dCBvZiB0aGlzIGZpbGUuCisgKgorICogKDA2LzA1LzIwMDIpIGdraAorICoJbW92ZWQgbG9jYXRpb24gb2Ygc3RhcnR1cCgpIGNhbGwgaW4gc2VyaWFsX3Byb2JlKCkgdW50aWwgYWZ0ZXIgYWxsCisgKglvZiB0aGUgcG9ydCBpbmZvcm1hdGlvbiBhbmQgZW5kcG9pbnRzIGFyZSBpbml0aWFsaXplZC4gIFRoaXMgbWFrZXMKKyAqCXRoaW5ncyBlYXNpZXIgZm9yIHNvbWUgZHJpdmVycy4KKyAqCisgKiAoMDQvMTAvMjAwMikgZ2toCisgKglhZGRlZCBzZXJpYWxfcmVhZF9wcm9jIGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYQorICoJL3Byb2MvdHR5L2RyaXZlci91c2Itc2VyaWFsIGZpbGUuCisgKgorICogKDAzLzI3LzIwMDIpIGdraAorICoJR290IFVTQiBzZXJpYWwgY29uc29sZSBjb2RlIHdvcmtpbmcgcHJvcGVybHkgYW5kIG1lcmdlZCBpbnRvIHRoZSBtYWluCisgKgl2ZXJzaW9uIG9mIHRoZSB0cmVlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgdGhlIGluaXRpYWwgdmVyc2lvbgorICoJb2YgdGhpcyBjb2RlLCBhbmQgZm9yIHB1c2hpbmcgbWUgdG8gZmluaXNoIGl0IHVwLgorICoJVGhlIFVTQiBzZXJpYWwgY29uc29sZSB3b3JrcyB3aXRoIGFueSB1c2Igc2VyaWFsIGRyaXZlciBkZXZpY2UuCisgKgorICogKDAzLzIxLzIwMDIpIGdraAorICoJTW92ZWQgYWxsIG1hbmlwdWxhdGlvbiBvZiBwb3J0LT5vcGVuX2NvdW50IGludG8gdGhlIGNvcmUuICBOb3cgdGhlCisgKglpbmRpdmlkdWFsIGRyaXZlcidzIG9wZW4gYW5kIGNsb3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUKKyAqCWZpcnN0IG9wZW4oKSBhbmQgbGFzdCBjbG9zZSgpIGlzIGNhbGxlZC4gIE1ha2luZyB0aGUgZHJpdmVycyBhIGJpdAorICoJc21hbGxlciBhbmQgc2ltcGxlci4KKyAqCUZpeGVkIGEgYnVnIGlmIGEgZHJpdmVyIGRpZG4ndCBoYXZlIHRoZSBvd25lciBmaWVsZCBzZXQuCisgKgorICogKDAyLzI2LzIwMDIpIGdraAorICoJTW92ZWQgYWxsIGxvY2tpbmcgaW50byB0aGUgbWFpbiBzZXJpYWxfKiBmdW5jdGlvbnMsIGluc3RlYWQgb2YgaGF2aW5nIAorICoJdGhlIGluZGl2aWR1YWwgZHJpdmVycyBoYXZlIHRvIGdyYWIgdGhlIHBvcnQgc2VtYXBob3JlLiAgVGhpcyBzaG91bGQKKyAqCXJlZHVjZSByYWNlcy4KKyAqCVJld29ya2VkIHRoZSBNT0RfSU5DIGxvZ2ljIGEgYml0IHRvIGFsd2F5cyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCwgZXZlbgorICoJaWYgdGhlIGdlbmVyaWMgZHJpdmVyIGlzIGJlaW5nIHVzZWQuCisgKgorICogKDEwLzEwLzIwMDEpIGdraAorICoJdXNiX3NlcmlhbF9kaXNjb25uZWN0KCkgbm93IHNldHMgdGhlIHNlcmlhbC0+ZGV2IHBvaW50ZXIgaXMgdG8gTlVMTCB0bworICoJaGVscCBwcmV2ZW50IGNoaWxkIGRyaXZlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRldmljZSBzaW5jZSBpdCBpcyBub3cKKyAqCWdvbmUuCisgKgorICogKDA5LzEzLzIwMDEpIGdraAorICoJTW92ZWQgZ2VuZXJpYyBkcml2ZXIgaW5pdGlhbGl6ZSBhZnRlciB3ZSBoYXZlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVVNCCisgKgljb3JlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgcG9pbnRpbmcgdGhpcyBwcm9ibGVtIG91dC4KKyAqCisgKiAoMDcvMDMvMjAwMSkgZ2toCisgKglGaXhlZCBtb2R1bGUgcGFyYW1hdGVyIHNpemUuICBUaGFua3MgdG8gSm9obiBCcm9ja21leWVyIGZvciB0aGUgcG9pbnRlci4KKyAqCUZpeGVkIHZlbmRvciBhbmQgcHJvZHVjdCBnZXR0aW5nIGRlZmluZWQgdGhyb3VnaCB0aGUgTU9EVUxFX1BBUk0gbWFjcm8KKyAqCWlmIHRoZSBHZW5lcmljIGRyaXZlciB3YXNuJ3QgY29tcGlsZWQgaW4uCisgKglGaXhlZCBwcm9ibGVtIHdpdGggZ2VuZXJpY19zaHV0ZG93bigpIG5vdCBiZWluZyBjYWxsZWQgZm9yIGRyaXZlcnMgdGhhdAorICoJZG9uJ3QgaGF2ZSBhIHNodXRkb3duKCkgZnVuY3Rpb24uCisgKgorICogKDA2LzA2LzIwMDEpIGdraAorICoJYWRkZWQgZXZpbCBoYWNrIHRoYXQgaXMgbmVlZGVkIGZvciB0aGUgcHJvbGlmaWMgcGwyMzAzIGRldmljZSBkdWUgdG8gdGhlCisgKgljcmF6eSB3YXkgaXRzIGVuZHBvaW50cyBhcmUgc2V0IHVwLgorICoKKyAqICgwNS8zMC8yMDAxKSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqIDIwMDFfMDJfMDUgZ2toCisgKglGaXhlZCBidWZmZXIgb3ZlcmZsb3dzIGJ1ZyB3aXRoIHRoZSBnZW5lcmljIHNlcmlhbCBkcml2ZXIuICBUaGFua3MgdG8KKyAqCVRvZGQgU3F1aXJlcyA8c3F1aXJlc3RAY3QwLmNvbT4gZm9yIGZpeGluZyB0aGlzLgorICoKKyAqICgwMS8xMC8yMDAxKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBzZXJpYWwgYWRhcHRvciBncmFiYmVkIF9hbnlfIGRldmljZSB0aGF0IHdhcworICoJb2ZmZXJlZCB0byBpdC4KKyAqCisgKiAoMTIvMTIvMjAwMCkgZ2toCisgKglSZW1vdmVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgZnJvbSBwb2xsIGFuZCBkaXNjb25uZWN0IGZ1bmN0aW9ucywgYW5kCisgKgltb3ZlZCB0aGVtIHRvIHRoZSBzZXJpYWxfb3BlbiBhbmQgc2VyaWFsX2Nsb3NlIGZ1bmN0aW9ucy4KKyAqCUFsc28gZml4ZWQgYnVnIHdpdGggdGhlcmUgbm90IGJlaW5nIGEgTU9EX0RFQyBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyCisgKgkodGhhbmtzIHRvIEdhcnkgQnJ1YmFrZXIgZm9yIGZpbmRpbmcgdGhpcy4pCisgKgorICogKDExLzI5LzIwMDApIGdraAorICoJU21hbGwgTlVMTCBwb2ludGVyIGluaXRpYWxpemF0aW9uIGNsZWFudXAgd2hpY2ggc2F2ZXMgYSBiaXQgb2YgZGlzayBpbWFnZQorICoKKyAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKyAqCWluc3RlYWQgb2YgdXNpbmcgaWRWZW5kb3IvaWRQcm9kdWN0IHBhaXJzLCB1c2Igc2VyaWFsIGRyaXZlcnMKKyAqCW5vdyBpZGVudGlmeSB0aGVpciBoYXJkd2FyZSBpbnRlcmVzdCB3aXRoIHVzYl9kZXZpY2VfaWQgdGFibGVzLAorICoJd2hpY2ggdGhleSB1c3VhbGx5IGhhdmUgYW55aG93IGZvciB1c2Ugd2l0aCBNT0RVTEVfREVWSUNFX1RBQkxFLgorICoKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgwOS8xMS8yMDAwKSBna2gKKyAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisgKgorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgcG9ydF9sb2NrIHRvIHBvcnQgc3RydWN0dXJlLgorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcyB0byBnZW5lcmljIGRyaXZlcgorICoJRml4ZWQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIGdlbmVyaWMgZGV2aWNlJ3MgcG9ydCBtb3JlIHRoYW4gb25jZS4KKyAqCisgKiAoMDcvMjMvMjAwMCkgZ2toCisgKglBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCisgKgorICogKDA3LzE5LzIwMDApIGdraCwgcGJlcmdlciwgYW5kIGJvcmNoZXJzCisgKglNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgorICoKKyAqICgwNy8wMy8yMDAwKSBna2gKKyAqCUFkZGVkIG1vcmUgZGVidWdnaW5nIHRvIHNlcmlhbF9pb2N0bCBjYWxsCisgKiAKKyAqICgwNi8yNS8yMDAwKSBna2gKKyAqCUNoYW5nZWQgZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrIHRvIG5vdCBjYWxsIHdha2VfdXBfaW50ZXJydXB0aWJsZQorICoJZGlyZWN0bHksIGJ1dCB0byBoYXZlIHBvcnRfc29mdGludCBkbyBpdCBhdCBhIHNhZmVyIHRpbWUuCisgKgorICogKDA2LzIzLzIwMDApIGdraAorICoJQ2xlYW5lZCB1cCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBpbiBhIHF1ZXN0IHRvIGZpbmQgVUhDSSB0aW1lb3V0IGJ1Zy4KKyAqCisgKiAoMDUvMjIvMjAwMCkgZ2toCisgKglDaGFuZ2VkIHRoZSBtYWtlZmlsZSwgZW5hYmxpbmcgdGhlIGJpZyBDT05GSUdfVVNCX1NFUklBTF9TT01USElORyB0byBiZSAKKyAqCXJlbW92ZWQgZnJvbSB0aGUgaW5kaXZpZHVhbCBkZXZpY2Ugc291cmNlIGZpbGVzLgorICoKKyAqICgwNS8wMy8yMDAwKSBna2gKKyAqCUFkZGVkIHRoZSBEaWdpIEFjY2VsZXBvcnQgZHJpdmVyIGZyb20gQWwgQm9yY2hlcnMgYW5kIFBldGVyIEJlcmdlci4KKyAqIAorICogKDA1LzAyLzIwMDApIGdraAorICoJQ2hhbmdlZCBkZXZmcyBhbmQgdHR5IHJlZ2lzdGVyIGNvZGUgdG8gd29yayBwcm9wZXJseSBub3cuIFRoaXMgd2FzIGJhc2VkIG9uCisgKgl0aGUgQUNNIGRyaXZlciBjaGFuZ2VzIGJ5IFZvanRlY2ggUGF2bGlrLgorICoKKyAqICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKKyAqIAlQdXQgY2FsbHMgdG8gKl9wYXJhbm9pYV9jaGVja3MgaW50byBvbmUgZnVuY3Rpb24uCisgKiAKKyAqICgwNC8yMy8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB0aGF0IFJhbmR5IER1bmxhcCBmb3VuZCBmb3IgR2VuZXJpYyBkZXZpY2VzIHdpdGggbm8gYnVsayBvdXQgcG9ydHMuCisgKglNb3ZlZCB3aGVuIHRoZSBzdGFydHVwIGNvZGUgcHJpbnRlZCBvdXQgdGhlIGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkLgorICoKKyAqICgwNC8xOS8yMDAwKSBna2gKKyAqCUFkZGVkIGRyaXZlciBmb3IgWnlYRUwgb21uaS5uZXQgbGNkIHBsdXMgSVNETiBUQQorICoJTWFkZSBzdGFydHVwIGluZm8gbWVzc2FnZSBzcGVjaWZ5IHdoaWNoIGRyaXZlcnMgd2VyZSBjb21waWxlZCBpbi4KKyAqCisgKiAoMDQvMDMvMjAwMCkgZ2toCisgKglDaGFuZ2VkIHRoZSBwcm9iZSBwcm9jZXNzIHRvIHJlbW92ZSB0aGUgbW9kdWxlIHVubG9hZCByYWNlcy4KKyAqCUNoYW5nZWQgd2hlcmUgdGhlIHR0eSBsYXllciBnZXRzIGluaXRpYWxpemVkIHRvIGhhdmUgZGV2ZnMgd29yayBuaWNlci4KKyAqCUFkZGVkIGluaXRpYWwgZGV2ZnMgc3VwcG9ydC4KKyAqCisgKiAoMDMvMjYvMjAwMCkgZ2toCisgKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgorICogCisgKiAoMDMvMTkvMjAwMCkgZ2toCisgKglGaXhlZCBvb3BzIHRoYXQgY291bGQgaGFwcGVuIHdoZW4gZGV2aWNlIHdhcyByZW1vdmVkIHdoaWxlIGEgcHJvZ3JhbQorICoJd2FzIHRhbGtpbmcgdG8gdGhlIGRldmljZS4KKyAqCVJlbW92ZWQgdGhlIHN0YXRpYyB1cmJzIGFuZCBub3cgYWxsIHVyYnMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZAorICoJZHluYW1pY2FsbHkuCisgKglSZXdvcmtlZCB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlLiBOb3cgZXZlcnl0aGluZyBpcyBiYXNlZCBvbiB0aGUgCisgKgl1c2Jfc2VyaWFsX3BvcnQgc3RydWN0dXJlIGluc3RlYWQgb2YgdGhlIGxhcmdlciB1c2Jfc2VyaWFsIHN0cnVjdHVyZS4KKyAqCVRoaXMgZml4ZXMgdGhlIGJ1ZyB0aGF0IGEgbXVsdGlwb3J0IGRldmljZSBjb3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4KKyAqCW9uZSBwb3J0IG9wZW4gYXQgb25lIHRpbWUuCisgKgorICogKDAzLzE3LzIwMDApIGdraAorICoJQWRkZWQgY29uZmlnIG9wdGlvbiBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzLgorICoJQWRkZWQgcGF0Y2ggZm9yIGtleXNwYW4gcGRhIGZyb20gQnJpYW4gV2FybmVyLgorICoKKyAqICgwMy8wNi8yMDAwKSBna2gKKyAqCUFkZGVkIHRoZSBrZXlzcGFuIHBkYSBjb2RlIGZyb20gQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqCU1vdmVkIGEgYnVuY2ggb2YgdGhlIHBvcnQgc3BlY2lmaWMgc3R1ZmYgaW50byBpdHMgb3duIHN0cnVjdHVyZS4gVGhpcworICoJaXMgaW4gYW50aWNpcGF0aW9uIG9mIHRoZSB0cnVlIG11bHRpcG9ydCBkZXZpY2VzICh0aGVyZSdzIGEgYnVnIGlmIHlvdQorICoJdHJ5IHRvIGFjY2VzcyBtb3JlIHRoYW4gb25lIHBvcnQgb2YgYW55IG11bHRpcG9ydCBkZXZpY2UgcmlnaHQgbm93KQorICoKKyAqICgwMi8yMS8yMDAwKSBna2gKKyAqCU1hZGUgaXQgc28gdGhhdCBhbnkgc2VyaWFsIGRldmljZXMgb25seSBoYXZlIHRvIHNwZWNpZnkgd2hpY2ggZnVuY3Rpb25zCisgKgl0aGV5IHdhbnQgdG8gb3ZlcmxvYWQgZnJvbSB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBjYWxscyAoZ3JlYXQsIAorICoJaW5oZXJpdGFuY2UgaW4gQywgaW4gYSBkcml2ZXIsIGp1c3Qgd2hhdCBJIHdhbnRlZC4uLikKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHNldF90ZXJtaW9zIGFuZCBpb2N0bCBmdW5jdGlvbiBjYWxscy4gTm8gZHJpdmVycyB0YWtlCisgKglhZHZhbnRhZ2Ugb2YgdGhpcyB5ZXQuCisgKglSZW1vdmVkIHRoZSAjaWZkZWYgTU9EVUxFLCBub3cgdGhlcmUgaXMgbm8gbW9kdWxlIHNwZWNpZmljIGNvZGUuCisgKglDbGVhbmVkIHVwIGEgZmV3IGNvbW1lbnRzIGluIHVzYi1zZXJpYWwuaCB0aGF0IHdlcmUgd3JvbmcgKHRoYW5rcyBhZ2FpbgorICoJdG8gTWlsZXMgTG90dCkuCisgKglTbWFsbCBmaXggdG8gZ2V0X2ZyZWVfc2VyaWFsLgorICoKKyAqICgwMi8xNC8yMDAwKSBna2gKKyAqCVJlbW92ZWQgdGhlIEJlbGtpbiBhbmQgUGVyYWNvbSBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIGRyaXZlciBkdWUgdG8KKyAqCXRoZSBsYWNrIG9mIHN1cHBvcnQgZnJvbSB0aGUgdmVuZG9yLCBhbmQgbWUgbm90IHdhbnRpbmcgcGVvcGxlIHRvIAorICoJYWNjaWRlbmF0bHkgYnV5IHRoZSBkZXZpY2UsIGV4cGVjdGluZyBpdCB0byB3b3JrIHdpdGggTGludXguCisgKglBZGRlZCByZWFkX2J1bGtfY2FsbGJhY2sgYW5kIHdyaXRlX2J1bGtfY2FsbGJhY2sgdG8gdGhlIHR5cGUgc3RydWN0dXJlCisgKglmb3IgdGhlIG5lZWRzIG9mIHRoZSBGVERJIGFuZCBXaGl0ZUhFQVQgZHJpdmVyLgorICoJQ2hhbmdlZCBhbGwgcmV2ZXJlbmNlcyB0byBGVERJIHRvIEZURElfU0lPIGF0IHRoZSByZXF1ZXN0IG9mIEJpbGwKKyAqCVJ5ZGVyLgorICoJQ2hhbmdlZCB0aGUgb3V0cHV0IHVyYiBzaXplIGJhY2sgdG8gdGhlIG1heCBlbmRwb2ludCBzaXplIHRvIG1ha2UKKyAqCXRoZSBmdGRpX3NpbyBkcml2ZXIgaGF2ZSBpdCBlYXNpZXIsIGFuZCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBpdCBkaWRuJ3QKKyAqCXJlYWxseSBpbmNyZWFzZSB0aGUgc3BlZWQgYW55LgorICoKKyAqICgwMi8xMS8yMDAwKSBna2gKKyAqCUFkZGVkIFZJU09SX0ZVTkNUSU9OX0NPTlNPTEUgdG8gdGhlIHZpc29yIHN0YXJ0dXAgZnVuY3Rpb24uIFRoaXMgd2FzIGEKKyAqCXBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkuCisgKglGaXhlZCBidWcgd2l0aCBub3QgcmVzdG9yaW5nIHRoZSBtaW5vciByYW5nZSB0aGF0IGEgZGV2aWNlIGdyYWJzLCBpZgorICoJdGhlIHN0YXJ0dXAgZnVuY3Rpb24gZmFpbHMgKHRoYW5rcyBNaWxlcyBmb3IgZmluZGluZyB0aGlzKS4KKyAqCisgKiAoMDIvMDUvMjAwMCkgZ2toCisgKglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgdGhlIEtleXNwYW4gUERBIHNlcmlhbCBjb252ZXJ0ZXIgc28gdGhhdAorICoJQnJpYW4gV2FybmVyIGhhcyBhIHBsYWNlIHRvIHB1dCBoaXMgY29kZS4KKyAqCU1hZGUgdGhlIGV6dXNiIHNwZWNpZmljIGZ1bmN0aW9ucyBnZW5lcmljIGVub3VnaCB0aGF0IGRpZmZlcmVudAorICoJZGV2aWNlcyBjYW4gdXNlIHRoZW0gKHdoaXRlaGVhdCBhbmQga2V5c3Bhbl9wZGEgYm90aCBuZWVkIHRoZW0pLgorICoJU3BsaXQgb3V0IGEgd2hvbGUgYnVuY2ggb2Ygc3RydWN0dXJlIGFuZCBvdGhlciBzdHVmZiB0byBhIHNlcGFyYXRlCisgKgl1c2Itc2VyaWFsLmggZmlsZS4KKyAqCU1hZGUgdGhlIFZpc29yIGNvbm5lY3Rpb24gbWVzc2FnZXMgYSBsaXR0bGUgbW9yZSB1bmRlcnN0YW5kYWJsZSwgbm93CisgKgl0aGF0IE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpIGhhcyBnb3R0ZW4gdGhlIEdlbmVyaWMgY2hhbm5lbCB0bworICoJd29yay4gQWxzbyBtYWRlIHRoZW0gYWx3YXlzIHNob3cgdXAgaW4gdGhlIGxvZyBmaWxlLgorICogCisgKiAoMDEvMjUvMjAwMCkgZ2toCisgKglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgRlRESSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQgQmlsbCBSeWRlcgorICoJaGFzIGEgcGxhY2UgdG8gcHV0IGhpcyBjb2RlLgorICoJQWRkZWQgdGhlIHZlbmRvciBzcGVjaWZpYyBpbmZvIGZyb20gSGFuZHNwcmluZy4gTm93IHdlIGNhbiBwcmludCBvdXQKKyAqCWluZm9ybWF0aW9uYWwgZGVidWcgbWVzc2FnZXMgYXMgd2VsbCBhcyB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nLgorICoKKyAqICgwMS8yMy8yMDAwKSBna2gKKyAqCUZpeGVkIHByb2JsZW0gb2YgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gb3BlbiBhIHBvcnQgdGhhdCBkaWRuJ3QgaGF2ZSBhCisgKglkZXZpY2UgYXNzaWduZWQgdG8gaXQuIE1hZGUgdGhlIG1pbm9yIG5vZGUgZmluZGluZyBhIGxpdHRsZSBzbWFydGVyLAorICoJbm93IGl0IGxvb2tzIHRvIGZpbmQgYSBjb250aW51b3VzIHNwYWNlIGZvciB0aGUgbmV3IGRldmljZS4KKyAqCisgKiAoMDEvMjEvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgaW4gdmlzb3Jfc3RhcnR1cCB3aXRoIHBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkKKyAqCUZpeGVkIGdldF9zZXJpYWxfYnlfbWlub3Igd2hpY2ggd2FzIGFsbCBtZXNzZWQgdXAgZm9yIG11bHRpIHBvcnQgCisgKglkZXZpY2VzLiBGaXhlZCBtdWx0aSBwb3J0IHByb2JsZW0gZm9yIGdlbmVyaWMgZGV2aWNlcy4gTm93IHRoZSBudW1iZXIKKyAqCW9mIHBvcnRzIGlzIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBidWxrIG91dCBlbmRwb2ludHMgZm9yIHRoZQorICoJZ2VuZXJpYyBkZXZpY2UuCisgKgorICogKDAxLzE5LzIwMDApIGdraAorICoJUmVtb3ZlZCBsb3RzIG9mIGNydWZ0IHRoYXQgd2FzIGFyb3VuZCBmcm9tIHRoZSBvbGQgKHByZSB1cmIpIGRyaXZlciAKKyAqCWludGVyZmFjZS4KKyAqCU1hZGUgdGhlIHNlcmlhbF90YWJsZSBkeW5hbWljLiBUaGlzIHNob3VsZCBzYXZlIGxvdHMgb2YgbWVtb3J5IHdoZW4KKyAqCXRoZSBudW1iZXIgb2YgbWlub3Igbm9kZXMgZ29lcyB1cCB0byAyNTYuCisgKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBvbmUgcG9ydC4gCisgKglBZGRlZCBtb3JlIGRlYnVnZ2luZyBjb21tZW50cyBmb3IgdGhlIFZpc29yLCBhbmQgYWRkZWQgYSBuZWVkZWQgCisgKglzZXRfY29uZmlndXJhdGlvbiBjYWxsLgorICoKKyAqICgwMS8xNy8yMDAwKSBna2gKKyAqCUZpeGVkIHRoZSBXaGl0ZUhFQVQgZmlybXdhcmUgKG15IHByb2Nlc3NpbmcgdG9vbCBoYWQgYSBidWcpCisgKglhbmQgYWRkZWQgbmV3IGRlYnVnIGxvYWRlciBmaXJtd2FyZSBmb3IgaXQuCisgKglSZW1vdmVkIHRoZSBwdXRfY2hhciBmdW5jdGlvbiBhcyBpdCBpc24ndCByZWFsbHkgbmVlZGVkLgorICoJQWRkZWQgdmlzb3Igc3RhcnR1cCBjb21tYW5kcyBhcyBmb3VuZCBieSB0aGUgV2luOTggZHVtcC4KKyAqIAorICogKDAxLzEzLzIwMDApIGdraAorICoJRml4ZWQgdGhlIHZlbmRvciBpZCBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyIHRvIHRoZSBvbmUgSSBtZWFudCBpdCB0byBiZS4KKyAqCisgKiAoMDEvMTIvMjAwMCkgZ2toCisgKglGb3JnZXQgdGhlIHZlcnNpb24gbnVtYmVyaW5nLi4udGhhdCdzIHByZXR0eSB1c2VsZXNzLi4uCisgKglNYWRlIHRoZSBkcml2ZXIgYWJsZSB0byBiZSBjb21waWxlZCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3Qgd2hpY2gKKyAqCWNvbnZlcnRlciB0aGV5IHdhbnQgdG8gdXNlLiBUaGlzIGFsbG93cyBwZW9wbGUgd2hvIG9ubHkgd2FudCB0aGUgVmlzb3IKKyAqCXN1cHBvcnQgdG8gbm90IHBheSB0aGUgbWVtb3J5IHNpemUgcHJpY2Ugb2YgdGhlIFdoaXRlSEVBVC4KKyAqCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBkcml2ZXIgKGlkVmVuZG9yPTAwMDAgYW5kIGlkUHJvZHVjdD0wMDAwKQorICoJZ3JhYmJlZCB0aGUgcm9vdCBodWIuIE5vdCBnb29kLgorICogCisgKiB2ZXJzaW9uIDAuNC4wICgwMS8xMC8yMDAwKSBna2gKKyAqCUFkZGVkIHdoaXRlaGVhdC5oIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIGZvciB0aGUgQ29ubmVjdFRlY2ggV2hpdGVIRUFUCisgKglkZXZpY2UuIEFkZGVkIHN0YXJ0dXAgZnVuY3Rpb24gdG8gYWxsb3cgZmlybXdhcmUgdG8gYmUgZG93bmxvYWRlZCB0bworICoJYSBkZXZpY2UgaWYgaXQgbmVlZHMgdG8gYmUuCisgKglBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBsb2dpYyB0byB0aGUgV2hpdGVIRUFUIGRldmljZS4KKyAqCVN0YXJ0ZWQgdG8gYWRkICNkZWZpbmVzIHRvIHNwbGl0IHVwIHRoZSBkaWZmZXJlbnQgZHJpdmVycyBmb3IgcG90ZW50aWFsCisgKgljb25maWd1cmF0aW9uIG9wdGlvbi4KKyAqCQorICogdmVyc2lvbiAwLjMuMSAoMTIvMzAvOTkpIGdraAorICogICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIHVyYiBmb3IgYnVsayBvdXQuCisgKiAgICAgIEFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2V0cyBvZiBlbmRwb2ludHMuIFRoaXMgZW5hYmxlcworICogICAgICB0aGUgSGFuZHNwcmluZyBWaXNvciB0byBiZSBhdHRhY2hlZCBzdWNjZXNzZnVsbHkuIE9ubHkgdGhlIGZpcnN0CisgKiAgICAgIGJ1bGsgaW4gLyBidWxrIG91dCBlbmRwb2ludCBwYWlyIGlzIGJlaW5nIHVzZWQgcmlnaHQgbm93LgorICoKKyAqIHZlcnNpb24gMC4zLjAgKDEyLzI3Lzk5KSBna2gKKyAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIEhhbmRzcHJpbmcgVmlzb3IgYmFzZWQgb24gYSBwYXRjaCBmcm9tCisgKglNaWxlcyBMb3R0IChtaWxvc0BzbmVldHkuaW5zeW5jLm5ldCkKKyAqCUNsZWFuZWQgdXAgdGhlIGNvZGUgYSBidW5jaCBhbmQgY29udmVydGVkIG92ZXIgdG8gdXNpbmcgdXJicyBvbmx5LgorICoKKyAqIHZlcnNpb24gMC4yLjMgKDEyLzIxLzk5KSBna2gKKyAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIENvbm5lY3QgVGVjaCBXaGl0ZUhFQVQgY29udmVydGVyLgorICoJSW5jcmVtZW50ZWQgdGhlIG51bWJlciBvZiBwb3J0cyBpbiBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIHRoZQorICoJV2hpdGVIRUFUIHRvIHdvcmsgcHJvcGVybHkgKDQgcG9ydHMgcGVyIGNvbm5lY3Rpb24pLgorICoJQWRkZWQgbm90aWZpY2F0aW9uIG9uIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiB3aGF0IHBvcnQgdGhlCisgKglkZXZpY2UgaXMvd2FzIGNvbm5lY3RlZCB0byAoYW5kIHdoYXQga2luZCBvZiBkZXZpY2UgaXQgd2FzKS4KKyAqCisgKiB2ZXJzaW9uIDAuMi4yICgxMi8xNi85OSkgZ2toCisgKglDaGFuZ2VkIG1ham9yIG51bWJlciB0byB0aGUgbmV3IGFsbG9jYXRlZCBudW1iZXIuIFdlJ3JlIGxlZ2FsIG5vdyEKKyAqCisgKiB2ZXJzaW9uIDAuMi4xICgxMi8xNC85OSkgZ2toCisgKglGaXhlZCBidWcgdGhhdCBoYXBwZW5zIHdoZW4gZGV2aWNlIG5vZGUgaXMgb3BlbmVkIHdoZW4gdGhlcmUgaXNuJ3QgYQorICoJZGV2aWNlIGF0dGFjaGVkIHRvIGl0LiBUaGFua3MgdG8gbWFyZWtAd2ViZGVzaWduLm5vIGZvciBub3RpY2luZyB0aGlzLgorICoKKyAqIHZlcnNpb24gMC4yLjAgKDExLzEwLzk5KSBna2gKKyAqCVNwbGl0IHVwIGludGVybmFscyB0byBtYWtlIGl0IGVhc2llciB0byBhZGQgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbCAKKyAqCWNvbnZlcnRlcnMgdG8gdGhlIGNvZGUuCisgKglBZGRlZCBhICJnZW5lcmljIiBkcml2ZXIgdGhhdCBnZXRzIGl0J3MgdmVuZG9yIGFuZCBwcm9kdWN0IGlkCisgKglmcm9tIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuIFRoYW5rcyB0byBEYXZpZCBFLiBOZWxzb24gKGRuZWxzb25AanVtcC5uZXQpCisgKglmb3IgdGhlIGlkZWEgYW5kIHNhbXBsZSBjb2RlIChmcm9tIHRoZSB1c2Igc2Nhbm5lciBkcml2ZXIuKQorICoJQ2xlYXJlZCB1cCBhbnkgbGljZW5zaW5nIHF1ZXN0aW9ucyBieSByZWxlYXNpbmcgaXQgdW5kZXIgdGhlIEdOVSBHUEwuCisgKgorICogdmVyc2lvbiAwLjEuMiAoMTAvMjUvOTkpIGdraAorICogCUZpeGVkIGJ1ZyBpbiBkZXRlY3RpbmcgZGV2aWNlLgorICoKKyAqIHZlcnNpb24gMC4xLjEgKDEwLzA1Lzk5KSBna2gKKyAqIAlDaGFuZ2VkIHRoZSBtYWpvciBudW1iZXIgdG8gbm90IGNvbmZsaWN0IHdpdGggYW55dGhpbmcgZWxzZS4KKyAqCisgKiB2ZXJzaW9uIDAuMSAoMDkvMjgvOTkpIGdraAorICogCUNhbiByZWNvZ25pemUgdGhlIHR3byBkaWZmZXJlbnQgZGV2aWNlcyBhbmQgc3RhcnQgdXAgYSByZWFkIGZyb20KKyAqCWRldmljZSB3aGVuIGFza2VkIHRvLiBXcml0ZXMgYWxzbyB3b3JrLiBObyBjb250cm9sIHNpZ25hbHMgeWV0LCB0aGlzCisgKglhbGwgaXMgdmVuZG9yIHNwZWNpZmljIGRhdGEgKGkuZS4gbm8gc3BlYyksIGFsc28gbm8gY29udHJvbCBmb3IKKyAqCWRpZmZlcmVudCBiYXVkIHJhdGVzIG9yIG90aGVyIGJpdCBzZXR0aW5ncy4KKyAqCUN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGhlIHNhbWUgZGV2aWQgYXMgdGhlIGFjbSBkcml2ZXIuIFRoaXMgbmVlZHMKKyAqCXRvIGNoYW5nZS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgInBsMjMwMy5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIGdyZWdAa3JvYWguY29tLCBodHRwOi8vd3d3Lmtyb2FoLmNvbS9saW51eC8iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgU2VyaWFsIERyaXZlciBjb3JlIgorCisvKiBEcml2ZXIgc3RydWN0dXJlIHdlIHJlZ2lzdGVyIHdpdGggdGhlIFVTQiBjb3JlICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3NlcmlhbF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYnNlcmlhbCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKK307CisKKy8qIFRoZXJlIGlzIG5vIE1PRFVMRV9ERVZJQ0VfVEFCTEUgZm9yIHVzYnNlcmlhbC5jLiAgSW5zdGVhZAorICAgdGhlIE1PRFVMRV9ERVZJQ0VfVEFCTEUgZGVjbGFyYXRpb25zIGluIGVhY2ggc2VyaWFsIGRyaXZlcgorICAgY2F1c2UgdGhlICJob3RwbHVnIiBwcm9ncmFtIHRvIHB1bGwgaW4gd2hhdGV2ZXIgbW9kdWxlIGlzIG5lY2Vzc2FyeQorICAgdmlhIG1vZHByb2JlLCBhbmQgbW9kcHJvYmUgd2lsbCBsb2FkIHVzYnNlcmlhbCBiZWNhdXNlIHRoZSBzZXJpYWwKKyAgIGRyaXZlcnMgZGVwZW5kIG9uIGl0LgorKi8KKworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsX3RhYmxlW1NFUklBTF9UVFlfTUlOT1JTXTsJLyogaW5pdGlhbGx5IGFsbCBOVUxMICovCitzdGF0aWMgTElTVF9IRUFEKHVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpOworCitzdHJ1Y3QgdXNiX3NlcmlhbCAqdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHNlcmlhbF90YWJsZVtpbmRleF07CisKKwlpZiAoc2VyaWFsKQorCQlrcmVmX2dldCgmc2VyaWFsLT5rcmVmKTsKKwlyZXR1cm4gc2VyaWFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKmdldF9mcmVlX3NlcmlhbCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IG51bV9wb3J0cywgdW5zaWduZWQgaW50ICptaW5vcikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgZ29vZF9zcG90OworCisJZGJnKCIlcyAlZCIsIF9fRlVOQ1RJT05fXywgbnVtX3BvcnRzKTsKKworCSptaW5vciA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpXSkKKwkJCWNvbnRpbnVlOworCisJCWdvb2Rfc3BvdCA9IDE7CisJCWZvciAoaiA9IDE7IGogPD0gbnVtX3BvcnRzLTE7ICsraikKKwkJCWlmICgoaStqID49IFNFUklBTF9UVFlfTUlOT1JTKSB8fCAoc2VyaWFsX3RhYmxlW2kral0pKSB7CisJCQkJZ29vZF9zcG90ID0gMDsKKwkJCQlpICs9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCWlmIChnb29kX3Nwb3QgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCSptaW5vciA9IGk7CisJCWRiZygiJXMgLSBtaW5vciBiYXNlID0gJWQiLCBfX0ZVTkNUSU9OX18sICptaW5vcik7CisJCWZvciAoaSA9ICptaW5vcjsgKGkgPCAoKm1pbm9yICsgbnVtX3BvcnRzKSkgJiYgKGkgPCBTRVJJQUxfVFRZX01JTk9SUyk7ICsraSkKKwkJCXNlcmlhbF90YWJsZVtpXSA9IHNlcmlhbDsKKwkJcmV0dXJuIHNlcmlhbDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJldHVybl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlzZXJpYWxfdGFibGVbc2VyaWFsLT5taW5vciArIGldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfc2VyaWFsKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgaTsKKworCXNlcmlhbCA9IHRvX3VzYl9zZXJpYWwoa3JlZik7CisKKwlkYmcgKCIlcyAtICVzIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCisJc2VyaWFsLT50eXBlLT5zaHV0ZG93bihzZXJpYWwpOworCisJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQlzZXJpYWwtPnBvcnRbaV0tPm9wZW5fY291bnQgPSAwOworCisJLyogdGhlIHBvcnRzIGFyZSBjbGVhbmVkIHVwIGFuZCByZWxlYXNlZCBpbiBwb3J0X3JlbGVhc2UoKSAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQlpZiAoc2VyaWFsLT5wb3J0W2ldLT5kZXYucGFyZW50ICE9IE5VTEwpIHsKKwkJCWRldmljZV91bnJlZ2lzdGVyKCZzZXJpYWwtPnBvcnRbaV0tPmRldik7CisJCQlzZXJpYWwtPnBvcnRbaV0gPSBOVUxMOworCQl9CisKKwkvKiBJZiB0aGlzIGlzIGEgImZha2UiIHBvcnQsIHdlIGhhdmUgdG8gY2xlYW4gaXQgdXAgaGVyZSwgYXMgaXQgd2lsbAorCSAqIG5vdCBnZXQgY2xlYW5lZCB1cCBpbiBwb3J0X3JlbGVhc2UoKSBhcyBpdCB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoCisJICogdGhlIGRyaXZlciBjb3JlICovCisJaWYgKHNlcmlhbC0+bnVtX3BvcnRzIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVycykgeworCQlmb3IgKGkgPSBzZXJpYWwtPm51bV9wb3J0czsgaSA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnM7ICsraSkgeworCQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJCWlmICghcG9ydCkKKwkJCQljb250aW51ZTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOworCQkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCQkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCQkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwkJCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOworCQkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIpOworCQl9CisJfQorCisJdXNiX3B1dF9kZXYoc2VyaWFsLT5kZXYpOworCisJLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCisJa2ZyZWUgKHNlcmlhbCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlcmlhbF9vcGVuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCBwb3J0TnVtYmVyOworCWludCByZXR2YWw7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBnZXQgdGhlIHNlcmlhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KKwlzZXJpYWwgPSB1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCh0dHktPmluZGV4KTsKKwlpZiAoIXNlcmlhbCkgeworCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG9ydE51bWJlciA9IHR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCXBvcnQgPSBzZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07CisJIAorCSsrcG9ydC0+b3Blbl9jb3VudDsKKworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDEpIHsKKworCQkvKiBzZXQgdXAgb3VyIHBvcnQgc3RydWN0dXJlIG1ha2luZyB0aGUgdHR5IGRyaXZlcgorCQkgKiByZW1lbWJlciBvdXIgcG9ydCBvYmplY3QsIGFuZCB1cyBpdCAqLworCQl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKKwkJcG9ydC0+dHR5ID0gdHR5OworCisJCS8qIGxvY2sgdGhpcyBtb2R1bGUgYmVmb3JlIHdlIGNhbGwgaXQKKwkJICogdGhpcyBtYXkgZmFpbCwgd2hpY2ggbWVhbnMgd2UgbXVzdCBiYWlsIG91dCwKKwkJICogc2FmZSBiZWNhdXNlIHdlIGFyZSBjYWxsZWQgd2l0aCBCS0wgaGVsZCAqLworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNlcmlhbC0+dHlwZS0+b3duZXIpKSB7CisJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJZ290byBiYWlsb3V0X2tyZWZfcHV0OworCQl9CisKKwkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgb3BlbiBpZiB0aGlzIAorCQkgKiBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcG9ydCBpcyBvcGVuZWQgKi8KKwkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKHBvcnQsIGZpbHApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBiYWlsb3V0X21vZHVsZV9wdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2JhaWxvdXRfbW9kdWxlX3B1dDoKKwltb2R1bGVfcHV0KHNlcmlhbC0+dHlwZS0+b3duZXIpOworYmFpbG91dF9rcmVmX3B1dDoKKwlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CisJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAwKQorCQlyZXR1cm47CisKKwktLXBvcnQtPm9wZW5fY291bnQ7CisJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgeworCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBjbG9zZSBpZiB0aGlzIAorCQkgKiBwb3J0IGlzIGJlaW5nIGNsb3NlZCBieSB0aGUgbGFzdCBvd25lciAqLworCQlwb3J0LT5zZXJpYWwtPnR5cGUtPmNsb3NlKHBvcnQsIGZpbHApOworCisJCWlmIChwb3J0LT50dHkpIHsKKwkJCWlmIChwb3J0LT50dHktPmRyaXZlcl9kYXRhKQorCQkJCXBvcnQtPnR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCQkJcG9ydC0+dHR5ID0gTlVMTDsKKwkJfQorCisJCW1vZHVsZV9wdXQocG9ydC0+c2VyaWFsLT50eXBlLT5vd25lcik7CisJfQorCisJa3JlZl9wdXQoJnBvcnQtPnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOworfQorCitzdGF0aWMgaW50IHNlcmlhbF93cml0ZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCisJZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGUocykiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLworCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGUocG9ydCwgYnVmLCBjb3VudCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBzZXJpYWxfd3JpdGVfcm9vbSAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9yb29tKHBvcnQpOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlkYmcoIiVzID0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT5jaGFyc19pbl9idWZmZXIocG9ydCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3Rocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUpCisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF91bnRocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlpZiAocG9ydC0+c2VyaWFsLT50eXBlLT51bnRocm90dGxlKQorCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnVudGhyb3R0bGUocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2lvY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRU5PREVWOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKwlpZiAocG9ydC0+c2VyaWFsLT50eXBlLT5pb2N0bCkKKwkJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT5pb2N0bChwb3J0LCBmaWxlLCBjbWQsIGFyZyk7CisJZWxzZQorCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3NldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MpCisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MocG9ydCwgb2xkKTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2JyZWFrIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmJyZWFrX2N0bCkKKwkJcG9ydC0+c2VyaWFsLT50eXBlLT5icmVha19jdGwocG9ydCwgYnJlYWtfc3RhdGUpOworfQorCitzdGF0aWMgaW50IHNlcmlhbF9yZWFkX3Byb2MgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJaW50IGxlbmd0aCA9IDA7CisJaW50IGk7CisJb2ZmX3QgYmVnaW4gPSAwOworCWNoYXIgdG1wWzQwXTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlLCAidXNic2VyaW5mbzoxLjAgZHJpdmVyOiVzXG4iLCBEUklWRVJfVkVSU0lPTik7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTICYmIGxlbmd0aCA8IFBBR0VfU0laRTsgKytpKSB7CisJCXNlcmlhbCA9IHVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KGkpOworCQlpZiAoc2VyaWFsID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIlZDoiLCBpKTsKKwkJaWYgKHNlcmlhbC0+dHlwZS0+b3duZXIpCisJCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbW9kdWxlOiVzIiwgbW9kdWxlX25hbWUoc2VyaWFsLT50eXBlLT5vd25lcikpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbmFtZTpcIiVzXCIiLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgdmVuZG9yOiUwNHggcHJvZHVjdDolMDR4IiwgCisJCQkJICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLCAKKwkJCQkgICBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIG51bV9wb3J0czolZCIsIHNlcmlhbC0+bnVtX3BvcnRzKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHBvcnQ6JWQiLCBpIC0gc2VyaWFsLT5taW5vciArIDEpOworCisJCXVzYl9tYWtlX3BhdGgoc2VyaWFsLT5kZXYsIHRtcCwgc2l6ZW9mKHRtcCkpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgcGF0aDolcyIsIHRtcCk7CisJCQkKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiXG4iKTsKKwkJaWYgKChsZW5ndGggKyBiZWdpbikgPiAob2ZmICsgY291bnQpKQorCQkJZ290byBkb25lOworCQlpZiAoKGxlbmd0aCArIGJlZ2luKSA8IG9mZikgeworCQkJYmVnaW4gKz0gbGVuZ3RoOworCQkJbGVuZ3RoID0gMDsKKwkJfQorCQlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CisJfQorCSplb2YgPSAxOworZG9uZToKKwlpZiAob2ZmID49IChsZW5ndGggKyBiZWdpbikpCisJCXJldHVybiAwOworCSpzdGFydCA9IHBhZ2UgKyAob2ZmLWJlZ2luKTsKKwlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbmd0aC1vZmYpID8gY291bnQgOiBiZWdpbitsZW5ndGgtb2ZmKTsKK30KKworc3RhdGljIGludCBzZXJpYWxfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21nZXQpCisJCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2NtZ2V0KHBvcnQsIGZpbGUpOworCitleGl0OgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNlcmlhbF90aW9jbXNldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21zZXQpCisJCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2Ntc2V0KHBvcnQsIGZpbGUsIHNldCwgY2xlYXIpOworCitleGl0OgorCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopcHJpdmF0ZTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCXR0eV93YWtldXAodHR5KTsKK30KKworc3RhdGljIHZvaWQgcG9ydF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisKKwlkYmcgKCIlcyAtICVzIiwgX19GVU5DVElPTl9fLCBkZXYtPmJ1c19pZCk7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKKwlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOworCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOworCWtmcmVlKHBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyKTsKKwlrZnJlZShwb3J0KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICogY3JlYXRlX3NlcmlhbCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgCisJCQkJCSAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJICBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCisJc2VyaWFsID0ga21hbGxvYyAoc2l6ZW9mICgqc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQgKHNlcmlhbCwgMCwgc2l6ZW9mKCpzZXJpYWwpKTsKKwlzZXJpYWwtPmRldiA9IHVzYl9nZXRfZGV2KGRldik7CisJc2VyaWFsLT50eXBlID0gdHlwZTsKKwlzZXJpYWwtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwlrcmVmX2luaXQoJnNlcmlhbC0+a3JlZik7CisKKwlyZXR1cm4gc2VyaWFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnNlYXJjaF9zZXJpYWxfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqdDsKKworCS8qIExpc3QgdHJvdWdoIGtub3cgZGV2aWNlcyBhbmQgc2VlIGlmIHRoZSB1c2IgaWQgbWF0Y2hlcyAqLworCWxpc3RfZm9yX2VhY2gocCwgJnVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpIHsKKwkJdCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUsIGRyaXZlcl9saXN0KTsKKwkJaWQgPSB1c2JfbWF0Y2hfaWQoaWZhY2UsIHQtPmlkX3RhYmxlKTsKKwkJaWYgKGlkICE9IE5VTEwpIHsKKwkJCWRiZygiZGVzY3JpcHRvciBtYXRjaGVzIik7CisJCQlyZXR1cm4gdDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgdXNiX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX2luX2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnR5cGUgPSBOVUxMOworCWludCByZXR2YWw7CisJaW50IG1pbm9yOworCWludCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgbnVtX2ludGVycnVwdF9pbiA9IDA7CisJaW50IG51bV9pbnRlcnJ1cHRfb3V0ID0gMDsKKwlpbnQgbnVtX2J1bGtfaW4gPSAwOworCWludCBudW1fYnVsa19vdXQgPSAwOworCWludCBudW1fcG9ydHMgPSAwOworCWludCBtYXhfZW5kcG9pbnRzOworCisJdHlwZSA9IHNlYXJjaF9zZXJpYWxfZGV2aWNlKGludGVyZmFjZSk7CisJaWYgKCF0eXBlKSB7CisJCWRiZygibm9uZSBtYXRjaGVkIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNlcmlhbCA9IGNyZWF0ZV9zZXJpYWwgKGRldiwgaW50ZXJmYWNlLCB0eXBlKTsKKwlpZiAoIXNlcmlhbCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogaWYgdGhpcyBkZXZpY2UgdHlwZSBoYXMgYSBwcm9iZSBmdW5jdGlvbiwgY2FsbCBpdCAqLworCWlmICh0eXBlLT5wcm9iZSkgeworCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CisKKwkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5vd25lcikpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOworCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWlkID0gdXNiX21hdGNoX2lkKGludGVyZmFjZSwgdHlwZS0+aWRfdGFibGUpOworCQlyZXR2YWwgPSB0eXBlLT5wcm9iZShzZXJpYWwsIGlkKTsKKwkJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7CisKKwkJaWYgKHJldHZhbCkgeworCQkJZGJnICgic3ViIGRyaXZlciByZWplY3RlZCBkZXZpY2UiKTsKKwkJCWtmcmVlIChzZXJpYWwpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKworCS8qIGRlc2NyaXB0b3IgbWF0Y2hlcywgbGV0J3MgZmluZCB0aGUgZW5kcG9pbnRzIG5lZWRlZCAqLworCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCQorCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgYnVsayBpbiBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJYnVsa19pbl9lbmRwb2ludFtudW1fYnVsa19pbl0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfaW47CisJCX0KKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBidWxrIG91dCBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJYnVsa19vdXRfZW5kcG9pbnRbbnVtX2J1bGtfb3V0XSA9IGVuZHBvaW50OworCQkJKytudW1fYnVsa19vdXQ7CisJCX0KKwkJCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGludGVycnVwdCBpbiBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJaW50ZXJydXB0X2luX2VuZHBvaW50W251bV9pbnRlcnJ1cHRfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9pbnRlcnJ1cHRfaW47CisJCX0KKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJLyogd2UgZm91bmQgYW4gaW50ZXJydXB0IG91dCBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBpbnRlcnJ1cHQgb3V0IG9uIGVuZHBvaW50ICVkIiwgaSk7CisJCQlpbnRlcnJ1cHRfb3V0X2VuZHBvaW50W251bV9pbnRlcnJ1cHRfb3V0XSA9IGVuZHBvaW50OworCQkJKytudW1faW50ZXJydXB0X291dDsKKwkJfQorCX0KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwM19NT0RVTEUpCisJLyogQkVHSU4gSE9SUklCTEUgSEFDSyBGT1IgUEwyMzAzICovIAorCS8qIHRoaXMgaXMgbmVlZGVkIGR1ZSB0byB0aGUgbG9vbmV5IHdheSBpdHMgZW5kcG9pbnRzIGFyZSBzZXQgdXAgKi8KKwlpZiAoKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFBMMjMwM19WRU5ET1JfSUQpICYmCisJICAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gUEwyMzAzX1BST0RVQ1RfSUQpKSB8fAorCSAgICAoKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gQVRFTl9WRU5ET1JfSUQpICYmCisJICAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gQVRFTl9QUk9EVUNUX0lEKSkpIHsKKwkJaWYgKGludGVyZmFjZSAhPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKSB7CisJCQkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyBvZiB0aGUgb3RoZXIgaW50ZXJmYWNlKi8KKwkJCWlmYWNlX2Rlc2MgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdLT5jdXJfYWx0c2V0dGluZzsKKwkJCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQkJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCQkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCQkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDMpKSB7CisJCQkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQkJCWRiZygiZm91bmQgaW50ZXJydXB0IGluIGZvciBQcm9saWZpYyBkZXZpY2Ugb24gc2VwYXJhdGUgaW50ZXJmYWNlIik7CisJCQkJCWludGVycnVwdF9pbl9lbmRwb2ludFtudW1faW50ZXJydXB0X2luXSA9IGVuZHBvaW50OworCQkJCQkrK251bV9pbnRlcnJ1cHRfaW47CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogTm93IG1ha2Ugc3VyZSB0aGUgUEwtMjMwMyBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4KKwkJICogSWYgbm90LCBnaXZlIHVwIG5vdyBhbmQgaG9wZSB0aGlzIGhhY2sgd2lsbCB3b3JrCisJCSAqIHByb3Blcmx5IGR1cmluZyBhIGxhdGVyIGludm9jYXRpb24gb2YgdXNiX3NlcmlhbF9wcm9iZQorCQkgKi8KKwkJaWYgKG51bV9idWxrX2luID09IDAgfHwgbnVtX2J1bGtfb3V0ID09IDApIHsKKwkJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlBMLTIzMDMgaGFjazogZGVzY3JpcHRvcnMgbWF0Y2hlZCBidXQgZW5kcG9pbnRzIGRpZCBub3RcbiIpOworCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwkvKiBFTkQgSE9SUklCTEUgSEFDSyBGT1IgUEwyMzAzICovCisjZW5kaWYKKworCS8qIGZvdW5kIGFsbCB0aGF0IHdlIG5lZWQgKi8KKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICIlcyBjb252ZXJ0ZXIgZGV0ZWN0ZWRcbiIsIHR5cGUtPm5hbWUpOworCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQworCWlmICh0eXBlID09ICZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKSB7CisJCW51bV9wb3J0cyA9IG51bV9idWxrX291dDsKKwkJaWYgKG51bV9wb3J0cyA9PSAwKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkdlbmVyaWMgZGV2aWNlIHdpdGggbm8gYnVsayBvdXQsIG5vdCBhbGxvd2VkLlxuIik7CisJCQlrZnJlZSAoc2VyaWFsKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFudW1fcG9ydHMpIHsKKwkJLyogaWYgdGhpcyBkZXZpY2UgdHlwZSBoYXMgYSBjYWxjX251bV9wb3J0cyBmdW5jdGlvbiwgY2FsbCBpdCAqLworCQlpZiAodHlwZS0+Y2FsY19udW1fcG9ydHMpIHsKKwkJCWlmICghdHJ5X21vZHVsZV9nZXQodHlwZS0+b3duZXIpKSB7CisJCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQludW1fcG9ydHMgPSB0eXBlLT5jYWxjX251bV9wb3J0cyAoc2VyaWFsKTsKKwkJCW1vZHVsZV9wdXQodHlwZS0+b3duZXIpOworCQl9CisJCWlmICghbnVtX3BvcnRzKQorCQkJbnVtX3BvcnRzID0gdHlwZS0+bnVtX3BvcnRzOworCX0KKworCWlmIChnZXRfZnJlZV9zZXJpYWwgKHNlcmlhbCwgbnVtX3BvcnRzLCAmbWlub3IpID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJObyBtb3JlIGZyZWUgc2VyaWFsIGRldmljZXNcbiIpOworCQlrZnJlZSAoc2VyaWFsKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2VyaWFsLT5taW5vciA9IG1pbm9yOworCXNlcmlhbC0+bnVtX3BvcnRzID0gbnVtX3BvcnRzOworCXNlcmlhbC0+bnVtX2J1bGtfaW4gPSBudW1fYnVsa19pbjsKKwlzZXJpYWwtPm51bV9idWxrX291dCA9IG51bV9idWxrX291dDsKKwlzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW4gPSBudW1faW50ZXJydXB0X2luOworCXNlcmlhbC0+bnVtX2ludGVycnVwdF9vdXQgPSBudW1faW50ZXJydXB0X291dDsKKworCS8qIGNyZWF0ZSBvdXIgcG9ydHMsIHdlIG5lZWQgYXMgbWFueSBhcyB0aGUgbWF4IGVuZHBvaW50cyAqLworCS8qIHdlIGRvbid0IHVzZSBudW1fcG9ydHMgaGVyZSBjYXV6IHNvbWUgZGV2aWNlcyBoYXZlIG1vcmUgZW5kcG9pbnQgcGFpcnMgdGhhbiBwb3J0cyAqLworCW1heF9lbmRwb2ludHMgPSBtYXgobnVtX2J1bGtfaW4sIG51bV9idWxrX291dCk7CisJbWF4X2VuZHBvaW50cyA9IG1heChtYXhfZW5kcG9pbnRzLCBudW1faW50ZXJydXB0X2luKTsKKwltYXhfZW5kcG9pbnRzID0gbWF4KG1heF9lbmRwb2ludHMsIG51bV9pbnRlcnJ1cHRfb3V0KTsKKwltYXhfZW5kcG9pbnRzID0gbWF4KG1heF9lbmRwb2ludHMsIChpbnQpc2VyaWFsLT5udW1fcG9ydHMpOworCXNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMgPSBtYXhfZW5kcG9pbnRzOworCWRiZygiJXMgLSBzZXR0aW5nIHVwICVkIHBvcnQgc3RydWN0dXJlcyBmb3IgdGhpcyBkZXZpY2UiLCBfX0ZVTkNUSU9OX18sIG1heF9lbmRwb2ludHMpOworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW5kcG9pbnRzOyArK2kpIHsKKwkJcG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0KQorCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJbWVtc2V0KHBvcnQsIDB4MDAsIHNpemVvZihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KSk7CisJCXBvcnQtPm51bWJlciA9IGkgKyBzZXJpYWwtPm1pbm9yOworCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CisJCUlOSVRfV09SSygmcG9ydC0+d29yaywgdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQsIHBvcnQpOworCQlzZXJpYWwtPnBvcnRbaV0gPSBwb3J0OworCX0KKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfaW47ICsraSkgeworCQllbmRwb2ludCA9IGJ1bGtfaW5fZW5kcG9pbnRbaV07CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPnJlYWRfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+cmVhZF91cmIpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJcG9ydC0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyXG4iKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBkZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChkZXYsCisJCQkJCSAgIAkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCQkgICBzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaywKKwkJCQkgICBwb3J0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfb3V0OyArK2kpIHsKKwkJZW5kcG9pbnQgPSBidWxrX291dF9lbmRwb2ludFtpXTsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPmJ1bGtfb3V0X2J1ZmZlcikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXJcbiIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+d3JpdGVfdXJiLCBkZXYsCisJCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChkZXYsCisJCQkJCQkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgIHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsIAorCQkJCSAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCQkgICBwb3J0KTsKKwl9CisKKwlpZiAoc2VyaWFsLT50eXBlLT5yZWFkX2ludF9jYWxsYmFjaykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVycnVwdF9pbjsgKytpKSB7CisJCQllbmRwb2ludCA9IGludGVycnVwdF9pbl9lbmRwb2ludFtpXTsKKwkJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJCX0KKwkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCXBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCXBvcnQtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpIHsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOworCQkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCQl9CisJCQl1c2JfZmlsbF9pbnRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBkZXYsIAorCQkJCQkgIHVzYl9yY3ZpbnRwaXBlIChkZXYsCisJCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgcG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlciwgYnVmZmVyX3NpemUsIAorCQkJCQkgIHNlcmlhbC0+dHlwZS0+cmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsIAorCQkJCQkgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQl9CisJfSBlbHNlIGlmIChudW1faW50ZXJydXB0X2luKSB7CisJCWRiZygidGhlIGRldmljZSBjbGFpbXMgdG8gc3VwcG9ydCBpbnRlcnJ1cHQgaW4gdHJhbnNmZXJzLCBidXQgcmVhZF9pbnRfY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTsKKwl9CisJCisJaWYgKHNlcmlhbC0+dHlwZS0+d3JpdGVfaW50X2NhbGxiYWNrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X291dDsgKytpKSB7CisJCQllbmRwb2ludCA9IGludGVycnVwdF9vdXRfZW5kcG9pbnRbaV07CisJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQkJcG9ydC0+aW50ZXJydXB0X291dF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYikgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJCX0KKwkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQkJcG9ydC0+aW50ZXJydXB0X291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcikgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXJcbiIpOworCQkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCQl9CisJCQl1c2JfZmlsbF9pbnRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgZGV2LAorCQkJCQkgIHVzYl9zbmRpbnRwaXBlIChkZXYsCisJCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlcl9zaXplLAorCQkJCQkgIHNlcmlhbC0+dHlwZS0+d3JpdGVfaW50X2NhbGxiYWNrLCBwb3J0LAorCQkJCQkgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQl9CisJfSBlbHNlIGlmIChudW1faW50ZXJydXB0X291dCkgeworCQlkYmcoInRoZSBkZXZpY2UgY2xhaW1zIHRvIHN1cHBvcnQgaW50ZXJydXB0IG91dCB0cmFuc2ZlcnMsIGJ1dCB3cml0ZV9pbnRfY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTsKKwl9CisJCisJLyogaWYgdGhpcyBkZXZpY2UgdHlwZSBoYXMgYW4gYXR0YWNoIGZ1bmN0aW9uLCBjYWxsIGl0ICovCisJaWYgKHR5cGUtPmF0dGFjaCkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm93bmVyKSkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCXJldHZhbCA9IHR5cGUtPmF0dGFjaCAoc2VyaWFsKTsKKwkJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJaWYgKHJldHZhbCA+IDApIHsKKwkJCS8qIHF1aWV0bHkgYWNjZXB0IHRoaXMgZGV2aWNlLCBidXQgZG9uJ3QgYmluZCB0byBhIHNlcmlhbCBwb3J0CisJCQkgKiBhcyBpdCdzIGFib3V0IHRvIGRpc2FwcGVhciAqLworCQkJZ290byBleGl0OworCQl9CisJfQorCisJLyogcmVnaXN0ZXIgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHBvcnRzIHdpdGggdGhlIGRyaXZlciBjb3JlICovCisJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPmRldi5wYXJlbnQgPSAmaW50ZXJmYWNlLT5kZXY7CisJCXBvcnQtPmRldi5kcml2ZXIgPSBOVUxMOworCQlwb3J0LT5kZXYuYnVzID0gJnVzYl9zZXJpYWxfYnVzX3R5cGU7CisJCXBvcnQtPmRldi5yZWxlYXNlID0gJnBvcnRfcmVsZWFzZTsKKworCQlzbnByaW50ZiAoJnBvcnQtPmRldi5idXNfaWRbMF0sIHNpemVvZihwb3J0LT5kZXYuYnVzX2lkKSwgInR0eVVTQiVkIiwgcG9ydC0+bnVtYmVyKTsKKwkJZGJnICgiJXMgLSByZWdpc3RlcmluZyAlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+ZGV2LmJ1c19pZCk7CisJCWRldmljZV9yZWdpc3RlciAoJnBvcnQtPmRldik7CisJfQorCisJdXNiX3NlcmlhbF9jb25zb2xlX2luaXQgKGRlYnVnLCBtaW5vcik7CisKK2V4aXQ6CisJLyogc3VjY2VzcyAqLworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgc2VyaWFsKTsKKwlyZXR1cm4gMDsKKworcHJvYmVfZXJyb3I6CisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisJCWlmIChwb3J0LT5yZWFkX3VyYikKKwkJCXVzYl9mcmVlX3VyYiAocG9ydC0+cmVhZF91cmIpOworCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpZiAoIXBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYikKKwkJCXVzYl9mcmVlX3VyYiAocG9ydC0+d3JpdGVfdXJiKTsKKwkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9pbnRlcnJ1cHRfaW47ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpZiAoIXBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpCisJCQl1c2JfZnJlZV91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9pbnRlcnJ1cHRfb3V0OyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisJCWlmIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYikKKwkJCXVzYl9mcmVlX3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7CisJfQorCisJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCXJldHVybl9zZXJpYWwgKHNlcmlhbCk7CisKKwkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVyczsgKytpKQorCQlrZnJlZShzZXJpYWwtPnBvcnRbaV0pOworCWtmcmVlIChzZXJpYWwpOworCXJldHVybiAtRUlPOworfQorCit2b2lkIHVzYl9zZXJpYWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCWludCBpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwlpZiAoc2VyaWFsKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQkJaWYgKHBvcnQgJiYgcG9ydC0+dHR5KQorCQkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKKwkJfQorCQkvKiBsZXQgdGhlIGxhc3QgaG9sZGVyIG9mIHRoaXMgb2JqZWN0IAorCQkgKiBjYXVzZSBpdCB0byBiZSBjbGVhbmVkIHVwICovCisJCWtyZWZfcHV0KCZzZXJpYWwtPmtyZWYsIGRlc3Ryb3lfc2VyaWFsKTsKKwl9CisJZGV2X2luZm8oZGV2LCAiZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKKwkub3BlbiA9CQkJc2VyaWFsX29wZW4sCisJLmNsb3NlID0JCXNlcmlhbF9jbG9zZSwKKwkud3JpdGUgPQkJc2VyaWFsX3dyaXRlLAorCS53cml0ZV9yb29tID0JCXNlcmlhbF93cml0ZV9yb29tLAorCS5pb2N0bCA9CQlzZXJpYWxfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCXNlcmlhbF9zZXRfdGVybWlvcywKKwkudGhyb3R0bGUgPQkJc2VyaWFsX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXNlcmlhbF91bnRocm90dGxlLAorCS5icmVha19jdGwgPQkJc2VyaWFsX2JyZWFrLAorCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX3Byb2MgPQkJc2VyaWFsX3JlYWRfcHJvYywKKwkudGlvY21nZXQgPQkJc2VyaWFsX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlzZXJpYWxfdGlvY21zZXQsCit9OworCitzdHJ1Y3QgdHR5X2RyaXZlciAqdXNiX3NlcmlhbF90dHlfZHJpdmVyOworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJdXNiX3NlcmlhbF90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihTRVJJQUxfVFRZX01JTk9SUyk7CisJaWYgKCF1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogSW5pdGlhbGl6ZSBvdXIgZ2xvYmFsIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlM7ICsraSkgeworCQlzZXJpYWxfdGFibGVbaV0gPSBOVUxMOworCX0KKworCXJlc3VsdCA9IGJ1c19yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CisJaWYgKHJlc3VsdCkgeworCQllcnIoIiVzIC0gcmVnaXN0ZXJpbmcgYnVzIGRyaXZlciBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXRfYnVzOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBnZW5lcmljIGRyaXZlciwgaWYgd2Ugc2hvdWxkICovCisJcmVzdWx0ID0gdXNiX3NlcmlhbF9nZW5lcmljX3JlZ2lzdGVyKGRlYnVnKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoIiVzIC0gcmVnaXN0ZXJpbmcgZ2VuZXJpYyBkcml2ZXIgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0X2dlbmVyaWM7CisJfQorCisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSAidXNic2VyaWFsIjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL3R0cy8iOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+bmFtZSA9IAkidHR5VVNCIjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPm1ham9yID0gU0VSSUFMX1RUWV9NQUpPUjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMDsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfTk9fREVWRlM7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnModXNiX3NlcmlhbF90dHlfZHJpdmVyLCAmc2VyaWFsX29wcyk7CisJcmVzdWx0ID0gdHR5X3JlZ2lzdGVyX2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCIlcyAtIHR0eV9yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0X3JlZ19kcml2ZXI7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIFVTQiBkcml2ZXIgKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoIiVzIC0gdXNiX3JlZ2lzdGVyIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdF90dHk7CisJfQorCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHJlc3VsdDsKKworZXhpdF90dHk6CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHVzYl9zZXJpYWxfdHR5X2RyaXZlcik7CisKK2V4aXRfcmVnX2RyaXZlcjoKKwl1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlcigpOworCitleGl0X2dlbmVyaWM6CisJYnVzX3VucmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOworCitleGl0X2J1czoKKwllcnIgKCIlcyAtIHJldHVybmluZyB3aXRoIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCXB1dF90dHlfZHJpdmVyKHVzYl9zZXJpYWxfdHR5X2RyaXZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NlcmlhbF9leGl0KHZvaWQpCit7CisJdXNiX3NlcmlhbF9jb25zb2xlX2V4aXQoKTsKKworCXVzYl9zZXJpYWxfZ2VuZXJpY19kZXJlZ2lzdGVyKCk7CisKKwl1c2JfZGVyZWdpc3RlcigmdXNiX3NlcmlhbF9kcml2ZXIpOworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCXB1dF90dHlfZHJpdmVyKHVzYl9zZXJpYWxfdHR5X2RyaXZlcik7CisJYnVzX3VucmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOworfQorCisKK21vZHVsZV9pbml0KHVzYl9zZXJpYWxfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc2VyaWFsX2V4aXQpOworCisjZGVmaW5lIHNldF90b19nZW5lcmljX2lmX251bGwodHlwZSwgZnVuY3Rpb24pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICghdHlwZS0+ZnVuY3Rpb24pIHsJCQkJCVwKKwkJCXR5cGUtPmZ1bmN0aW9uID0gdXNiX3NlcmlhbF9nZW5lcmljXyMjZnVuY3Rpb247CVwKKwkJCWRiZygiSGFkIHRvIG92ZXJyaWRlIHRoZSAiICNmdW5jdGlvbgkJXAorCQkJCSAiIHVzYiBzZXJpYWwgb3BlcmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgb25lLiIpO1wKKwkJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgZml4dXBfZ2VuZXJpYyhzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQoreworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBvcGVuKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgd3JpdGUpOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBjbG9zZSk7CisJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHdyaXRlX3Jvb20pOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBjaGFyc19pbl9idWZmZXIpOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCByZWFkX2J1bGtfY2FsbGJhY2spOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCB3cml0ZV9idWxrX2NhbGxiYWNrKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgc2h1dGRvd24pOworfQorCitpbnQgdXNiX3NlcmlhbF9yZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqbmV3X2RldmljZSkKK3sKKwlpbnQgcmV0dmFsOworCisJZml4dXBfZ2VuZXJpYyhuZXdfZGV2aWNlKTsKKworCS8qIEFkZCB0aGlzIGRldmljZSB0byBvdXIgbGlzdCBvZiBkZXZpY2VzICovCisJbGlzdF9hZGQoJm5ld19kZXZpY2UtPmRyaXZlcl9saXN0LCAmdXNiX3NlcmlhbF9kcml2ZXJfbGlzdCk7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX2J1c19yZWdpc3RlcihuZXdfZGV2aWNlKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigicHJvYmxlbSAlZCB3aGVuIHJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIHJldHZhbCwgbmV3X2RldmljZS0+bmFtZSk7CisJCWxpc3RfZGVsKCZuZXdfZGV2aWNlLT5kcml2ZXJfbGlzdCk7CisJfQorCWVsc2UKKwkJaW5mbygiVVNCIFNlcmlhbCBzdXBwb3J0IHJlZ2lzdGVyZWQgZm9yICVzIiwgbmV3X2RldmljZS0+bmFtZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3ZvaWQgdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpCit7CisJaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+bmFtZSk7CisJbGlzdF9kZWwoJmRldmljZS0+ZHJpdmVyX2xpc3QpOworCXVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIoZGV2aWNlKTsKK30KKworCisKKy8qIElmIHRoZSB1c2Itc2VyaWFsIGNvcmUgaXMgYnVpbHQgaW50byB0aGUgY29yZSwgdGhlIHVzYi1zZXJpYWwgZHJpdmVycworICAgbmVlZCB0aGVzZSBzeW1ib2xzIHRvIGxvYWQgcHJvcGVybHkgYXMgbW9kdWxlcy4gKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kZXJlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcHJvYmUpOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kaXNjb25uZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KTsKKworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9WRVJTSU9OKCBEUklWRVJfVkVSU0lPTiApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmMGM0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBVU0IgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA0CisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqICgwMy8yNi8yMDAyKSBna2gKKyAqCXJlbW92ZWQgdGhlIHBvcnQtPnR0eSBjaGVjayBmcm9tIHBvcnRfcGFyYW5vaWFfY2hlY2soKSBkdWUgdG8gc2VyaWFsCisgKgljb25zb2xlcyBub3QgaGF2aW5nIGEgdHR5IGRldmljZSBhc3NpZ25lZCB0byB0aGVtLgorICoKKyAqICgxMi8wMy8yMDAxKSBna2gKKyAqCXJlbW92ZWQgYWN0aXZlIGZyb20gdGhlIHBvcnQgc3RydWN0dXJlLgorICoJYWRkZWQgZG9jdW1lbnRhdGlvbiB0byB0aGUgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBzdHJ1Y3R1cmUKKyAqCisgKiAoMTAvMTAvMjAwMSkgZ2toCisgKglhZGRlZCB2ZW5kb3IgYW5kIHByb2R1Y3QgdG8gc2VyaWFsIHN0cnVjdHVyZS4gIE5lZWRlZCB0byBkZXRlcm1pbmUgZGV2aWNlCisgKglvd25lciB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkLgorICoKKyAqICgwNS8zMC8yMDAxKSBna2gKKyAqCWFkZGVkIHNlbSB0byBwb3J0IHN0cnVjdHVyZSBhbmQgcmVtb3ZlZCBwb3J0X2xvY2sKKyAqCisgKiAoMTAvMDUvMjAwMCkgZ2toCisgKglBZGRlZCBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzIGFuZCBidWxrX2luX2VuZHBvaW50QWRkcmVzcyB0byBoZWxwCisgKglmaXggYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYiBjb3JlCisgKgluZWVkcyBpdC4KKyAqIAorICogKDA5LzExLzIwMDApIGdraAorICoJQWRkZWQgdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIGZ1bmN0aW9uIHRvIGhlbHAgZ2V0IHJpZCBvZiAjREVCVUcgaW4gdGhlCisgKglkcml2ZXJzLgorICoKKyAqICgwOC8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIHBvcnRfbG9jayB0byBwb3J0IHN0cnVjdHVyZS4KKyAqCisgKiAoMDgvMDgvMjAwMCkgZ2toCisgKglBZGRlZCBvcGVuX2NvdW50IHRvIHBvcnQgc3RydWN0dXJlLgorICoKKyAqICgwNy8yMy8yMDAwKSBna2gKKyAqCUFkZGVkIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyB0byBwb3J0IHN0cnVjdHVyZS4KKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toLCBwYmVyZ2VyLCBhbmQgYm9yY2hlcnMKKyAqCU1vZGlmaWNhdGlvbnMgdG8gYWxsb3cgdXNiLXNlcmlhbCBkcml2ZXJzIHRvIGJlIG1vZHVsZXMuCisgKgorICogCisgKi8KKworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1NFUklBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisKKyNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkxODgJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCisjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCTI1NQkvKiBsb2FkcyBvZiBkZXZpY2VzIDopICovCisKKyNkZWZpbmUgTUFYX05VTV9QT1JUUwkJOAkvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9ydHMgb25lIGRldmljZSBjYW4gZ3JhYiBhdCBvbmNlICovCisKKy8qIHBhcml0eSBjaGVjayBmbGFnICovCisjZGVmaW5lIFJFTEVWQU5UX0lGTEFHKGlmbGFnKQkoaWZsYWcgJiAoSUdOQlJLfEJSS0lOVHxJR05QQVJ8UEFSTVJLfElOUENLKSkKKworLyoqCisgKiB1c2Jfc2VyaWFsX3BvcnQ6IHN0cnVjdHVyZSBmb3IgdGhlIHNwZWNpZmljIHBvcnRzIG9mIGEgZGV2aWNlLgorICogQHNlcmlhbDogcG9pbnRlciBiYWNrIHRvIHRoZSBzdHJ1Y3QgdXNiX3NlcmlhbCBvd25lciBvZiB0aGlzIHBvcnQuCisgKiBAdHR5OiBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR0eSBmb3IgdGhpcyBwb3J0LgorICogQG51bWJlcjogdGhlIG51bWJlciBvZiB0aGUgcG9ydCAodGhlIG1pbm9yIG51bWJlcikuCisgKiBAaW50ZXJydXB0X2luX2J1ZmZlcjogcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGluIGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9pbl91cmI6IHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBpbiBzdHJ1Y3QgdXJiIGZvciB0aGlzIHBvcnQuCisgKiBAaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczogZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIGludGVycnVwdCBpbiBwaXBlCisgKglmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9vdXRfYnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgb3V0IGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9vdXRfc2l6ZTogdGhlIHNpemUgb2YgdGhlIGludGVycnVwdF9vdXRfYnVmZmVyLCBpbiBieXRlcy4KKyAqIEBpbnRlcnJ1cHRfb3V0X3VyYjogcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IG91dCBzdHJ1Y3QgdXJiIGZvciB0aGlzIHBvcnQuCisgKiBAaW50ZXJydXB0X291dF9lbmRwb2ludEFkZHJlc3M6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBpbnRlcnJ1cHQgb3V0IHBpcGUKKyAqIAlmb3IgdGhpcyBwb3J0LgorICogQGJ1bGtfaW5fYnVmZmVyOiBwb2ludGVyIHRvIHRoZSBidWxrIGluIGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQHJlYWRfdXJiOiBwb2ludGVyIHRvIHRoZSBidWxrIGluIHN0cnVjdCB1cmIgZm9yIHRoaXMgcG9ydC4KKyAqIEBidWxrX2luX2VuZHBvaW50QWRkcmVzczogZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIGJ1bGsgaW4gcGlwZSBmb3IgdGhpcworICoJcG9ydC4KKyAqIEBidWxrX291dF9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIGJ1bGsgb3V0IGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQGJ1bGtfb3V0X3NpemU6IHRoZSBzaXplIG9mIHRoZSBidWxrX291dF9idWZmZXIsIGluIGJ5dGVzLgorICogQHdyaXRlX3VyYjogcG9pbnRlciB0byB0aGUgYnVsayBvdXQgc3RydWN0IHVyYiBmb3IgdGhpcyBwb3J0LgorICogQGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczogZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIGJ1bGsgb3V0IHBpcGUgZm9yIHRoaXMKKyAqCXBvcnQuCisgKiBAd3JpdGVfd2FpdDogYSB3YWl0X3F1ZXVlX2hlYWRfdCB1c2VkIGJ5IHRoZSBwb3J0LgorICogQHdvcms6IHdvcmsgcXVldWUgZW50cnkgZm9yIHRoZSBsaW5lIGRpc2NpcGxpbmUgd2FraW5nIHVwLgorICogQG9wZW5fY291bnQ6IG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIHVzYi1zZXJpYWwgY29yZSBhbmQgZHJpdmVycyBmb3IgdGhlIHNwZWNpZmljCisgKiBwb3J0cyBvZiBhIGRldmljZS4KKyAqLworc3RydWN0IHVzYl9zZXJpYWxfcG9ydCB7CisJc3RydWN0IHVzYl9zZXJpYWwgKglzZXJpYWw7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKgl0dHk7CisJdW5zaWduZWQgY2hhcgkJbnVtYmVyOworCisJdW5zaWduZWQgY2hhciAqCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOworCXN0cnVjdCB1cmIgKgkJaW50ZXJydXB0X2luX3VyYjsKKwlfX3U4CQkJaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKKworCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X291dF9idWZmZXI7CisJaW50CQkJaW50ZXJydXB0X291dF9zaXplOworCXN0cnVjdCB1cmIgKgkJaW50ZXJydXB0X291dF91cmI7CisJX191OAkJCWludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsKKwlpbnQJCQlidWxrX2luX3NpemU7CisJc3RydWN0IHVyYiAqCQlyZWFkX3VyYjsKKwlfX3U4CQkJYnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisKKwl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfb3V0X2J1ZmZlcjsKKwlpbnQJCQlidWxrX291dF9zaXplOworCXN0cnVjdCB1cmIgKgkJd3JpdGVfdXJiOworCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cml0ZV93YWl0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCWludAkJCW9wZW5fY291bnQ7CisJc3RydWN0IGRldmljZQkJZGV2OworfTsKKyNkZWZpbmUgdG9fdXNiX3NlcmlhbF9wb3J0KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0LCBkZXYpCisKKy8qIGdldCBhbmQgc2V0IHRoZSBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJnBvcnQtPmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZwb3J0LT5kZXYsIGRhdGEpOworfQorCisvKioKKyAqIHVzYl9zZXJpYWwgLSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgdXNiLXNlcmlhbCBjb3JlIGZvciBhIGRldmljZQorICogQGRldjogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9kZXZpY2UgZm9yIHRoaXMgZGV2aWNlCisgKiBAdHlwZTogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZm9yIHRoaXMgZGV2aWNlCisgKiBAaW50ZXJmYWNlOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgdXNiX2ludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UKKyAqIEBtaW5vcjogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UKKyAqIEBudW1fcG9ydHM6IHRoZSBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgaGFzCisgKiBAbnVtX2ludGVycnVwdF9pbjogbnVtYmVyIG9mIGludGVycnVwdCBpbiBlbmRwb2ludHMgd2UgaGF2ZQorICogQG51bV9pbnRlcnJ1cHRfb3V0OiBudW1iZXIgb2YgaW50ZXJydXB0IG91dCBlbmRwb2ludHMgd2UgaGF2ZQorICogQG51bV9idWxrX2luOiBudW1iZXIgb2YgYnVsayBpbiBlbmRwb2ludHMgd2UgaGF2ZQorICogQG51bV9idWxrX291dDogbnVtYmVyIG9mIGJ1bGsgb3V0IGVuZHBvaW50cyB3ZSBoYXZlCisgKiBAcG9ydDogYXJyYXkgb2Ygc3RydWN0IHVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmVzIGZvciB0aGUgZGlmZmVyZW50IHBvcnRzLgorICogQHByaXZhdGU6IHBsYWNlIHRvIHB1dCBhbnkgZHJpdmVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgaXMgbmVlZGVkLiAgVGhlCisgKgl1c2Itc2VyaWFsIGRyaXZlciBpcyByZXF1aXJlZCB0byBtYW5hZ2UgdGhpcyBkYXRhLCB0aGUgdXNiLXNlcmlhbCBjb3JlCisgKgl3aWxsIG5vdCB0b3VjaCB0aGlzLiAgVXNlIHVzYl9nZXRfc2VyaWFsX2RhdGEoKSBhbmQKKyAqCXVzYl9zZXRfc2VyaWFsX2RhdGEoKSB0byBhY2Nlc3MgdGhpcy4KKyAqLworc3RydWN0IHVzYl9zZXJpYWwgeworCXN0cnVjdCB1c2JfZGV2aWNlICoJCWRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqCXR5cGU7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKgkJaW50ZXJmYWNlOworCXVuc2lnbmVkIGNoYXIJCQltaW5vcjsKKwl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRzOworCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydF9wb2ludGVyczsKKwljaGFyCQkJCW51bV9pbnRlcnJ1cHRfaW47CisJY2hhcgkJCQludW1faW50ZXJydXB0X291dDsKKwljaGFyCQkJCW51bV9idWxrX2luOworCWNoYXIJCQkJbnVtX2J1bGtfb3V0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKglwb3J0W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCBrcmVmCQkJa3JlZjsKKwl2b2lkICoJCQkJcHJpdmF0ZTsKK307CisjZGVmaW5lIHRvX3VzYl9zZXJpYWwoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2VyaWFsLCBrcmVmKQorCisjZGVmaW5lIE5VTV9ET05UX0NBUkUJKC0xKQorCisvKiBnZXQgYW5kIHNldCB0aGUgc2VyaWFsIHByaXZhdGUgZGF0YSBwb2ludGVyIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdXNiX2dldF9zZXJpYWxfZGF0YSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlyZXR1cm4gc2VyaWFsLT5wcml2YXRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3NldF9zZXJpYWxfZGF0YSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdm9pZCAqZGF0YSkKK3sKKwlzZXJpYWwtPnByaXZhdGUgPSBkYXRhOworfQorCisvKioKKyAqIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgLSBhIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYSB1c2Igc2VyaWFsIGRldmljZQorICogQG93bmVyOiBwb2ludGVyIHRvIHRoZSBtb2R1bGUgdGhhdCBvd25zIHRoaXMgZGV2aWNlLgorICogQG5hbWU6IHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkZXZpY2UuICBUaGlzIHN0cmluZyB1c2VkCisgKglpbiB0aGUgc3lzbG9nIG1lc3NhZ2VzIHdoZW4gYSBkZXZpY2UgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KKyAqIEBzaG9ydF9uYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkZXZpY2UgaW4KKyAqCUtPQkpfTkFNRV9MRU4gY2hhcmFjdGVycyBvciBsZXNzLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlCisgKgl0byBkZXNjcmliZSB0aGUgZHJpdmVyLgorICogQGlkX3RhYmxlOiBwb2ludGVyIHRvIGEgbGlzdCBvZiB1c2JfZGV2aWNlX2lkIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgYWxsCisgKglvZiB0aGUgZGV2aWNlcyB0aGlzIHN0cnVjdHVyZSBjYW4gc3VwcG9ydC4KKyAqIEBudW1faW50ZXJydXB0X2luOiB0aGUgbnVtYmVyIG9mIGludGVycnVwdCBpbiBlbmRwb2ludHMgdGhpcyBkZXZpY2Ugd2lsbAorICoJaGF2ZS4KKyAqIEBudW1faW50ZXJydXB0X291dDogdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50cyB0aGlzIGRldmljZSB3aWxsCisgKgloYXZlLgorICogQG51bV9idWxrX2luOiB0aGUgbnVtYmVyIG9mIGJ1bGsgaW4gZW5kcG9pbnRzIHRoaXMgZGV2aWNlIHdpbGwgaGF2ZS4KKyAqIEBudW1fYnVsa19vdXQ6IHRoZSBudW1iZXIgb2YgYnVsayBvdXQgZW5kcG9pbnRzIHRoaXMgZGV2aWNlIHdpbGwgaGF2ZS4KKyAqIEBudW1fcG9ydHM6IHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IHBvcnRzIHRoaXMgZGV2aWNlIHdpbGwgaGF2ZS4KKyAqIEBjYWxjX251bV9wb3J0czogcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSBob3cgbWFueSBwb3J0cyB0aGlzCisgKglkZXZpY2UgaGFzIGR5bmFtaWNhbGx5LiAgSXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHByb2JlKCkKKyAqCWNhbGxiYWNrIGlzIGNhbGxlZCwgYnV0IGJlZm9yZSBhdHRhY2goKQorICogQHByb2JlOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbi4KKyAqCVRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGluc2VydGVkIGludG8gdGhlIHN5c3RlbSwKKyAqCWJ1dCBiZWZvcmUgdGhlIGRldmljZSBoYXMgYmVlbiBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgdXNiX3NlcmlhbAorICoJc3Vic3lzdGVtLiAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZG93bmxvYWQgYW55IGZpcm13YXJlIHRvIHRoZSBkZXZpY2UsCisgKglvciBhbnkgb3RoZXIgZWFybHkgaW5pdGlhbGl6YXRpb24gdGhhdCBtaWdodCBiZSBuZWVkZWQuCisgKglSZXR1cm4gMCB0byBjb250aW51ZSBvbiB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gIEFueXRoaW5nIAorICoJZWxzZSB3aWxsIGFib3J0IGl0LgorICogQGF0dGFjaDogcG9pbnRlciB0byB0aGUgZHJpdmVyJ3MgYXR0YWNoIGZ1bmN0aW9uLgorICoJVGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJ1Y3QgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUgaXMgZnVsbHkgc2V0CisgKglzZXQgdXAuICBEbyBhbnkgbG9jYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSwgb3IgYW55IHByaXZhdGUKKyAqCW1lbW9yeSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhdCB0aGlzIHBvaW50IGluIHRpbWUuCisgKiBAc2h1dGRvd246IHBvaW50ZXIgdG8gdGhlIGRyaXZlcidzIHNodXRkb3duIGZ1bmN0aW9uLiAgVGhpcyB3aWxsIGJlCisgKgljYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGRlZmluZXMgYSBVU0IgU2VyaWFsIGRldmljZS4gIEl0IHByb3ZpZGVzIGFsbCBvZgorICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIFVTQiBzZXJpYWwgY29yZSBjb2RlIG5lZWRzLiAgSWYgdGhlIGZ1bmN0aW9uCisgKiBwb2ludGVycyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgVVNCIHNlcmlhbCBjb3JlIGNvZGUgd2lsbCBjYWxsIHRoZW0gd2hlbgorICogdGhlIGNvcnJlc3BvbmRpbmcgdHR5IHBvcnQgZnVuY3Rpb25zIGFyZSBjYWxsZWQuICBJZiB0aGV5IGFyZSBub3QKKyAqIGNhbGxlZCwgdGhlIGdlbmVyaWMgc2VyaWFsIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorICovCitzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY2hhcgkqbmFtZTsKKwljaGFyCSpzaG9ydF9uYW1lOworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZTsKKwljaGFyCW51bV9pbnRlcnJ1cHRfaW47CisJY2hhcgludW1faW50ZXJydXB0X291dDsKKwljaGFyCW51bV9idWxrX2luOworCWNoYXIJbnVtX2J1bGtfb3V0OworCWNoYXIJbnVtX3BvcnRzOworCisJc3RydWN0IGxpc3RfaGVhZAlkcml2ZXJfbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7CisKKwlpbnQgKCpwcm9iZSkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisJaW50ICgqYXR0YWNoKSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisJaW50ICgqY2FsY19udW1fcG9ydHMpIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKKworCXZvaWQgKCpzaHV0ZG93bikgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCisJaW50ICgqcG9ydF9wcm9iZSkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCWludCAoKnBvcnRfcmVtb3ZlKSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKwkvKiBzZXJpYWwgZnVuY3Rpb24gY2FsbHMgKi8KKwlpbnQgICgqb3BlbikJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCXZvaWQgKCpjbG9zZSkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCWludCAgKCp3cml0ZSkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CisJaW50ICAoKndyaXRlX3Jvb20pCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwlpbnQgICgqaW9jdGwpCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJdm9pZCAoKnNldF90ZXJtaW9zKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworCXZvaWQgKCpicmVha19jdGwpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOworCWludCAgKCpjaGFyc19pbl9idWZmZXIpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwl2b2lkICgqdGhyb3R0bGUpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwl2b2lkICgqdW50aHJvdHRsZSkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCWludCAgKCp0aW9jbWdldCkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKKwlpbnQgICgqdGlvY21zZXQpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKKworCXZvaWQgKCpyZWFkX2ludF9jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZCAoKndyaXRlX2ludF9jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZCAoKnJlYWRfYnVsa19jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZCAoKndyaXRlX2J1bGtfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworfTsKKyNkZWZpbmUgdG9fdXNiX3NlcmlhbF9kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlLCBkcml2ZXIpCisKK2V4dGVybiBpbnQgIHVzYl9zZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKm5ld19kZXZpY2UpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQodm9pZCAqcHJpdmF0ZSk7CisKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCBlenVzYl93cml0ZW1lbW9yeSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggYlJlcXVlc3QpOworZXh0ZXJuIGludCBlenVzYl9zZXRfcmVzZXQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KTsKKworLyogVVNCIFNlcmlhbCBjb25zb2xlIGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEUKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChpbnQgZGVidWcsIGludCBtaW5vcik7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfZXhpdCAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChpbnQgZGVidWcsIGludCBtaW5vcikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3NlcmlhbF9jb25zb2xlX2V4aXQgKHZvaWQpIHsgfQorI2VuZGlmCisKKy8qIEZ1bmN0aW9ucyBuZWVkZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHVzYnNlcmlhbCBjb3JlICovCitleHRlcm4gc3RydWN0IHVzYl9zZXJpYWwgKnVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4ICh1bnNpZ25lZCBpbnQgbWlub3IpOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVnaXN0ZXIgKGludCBkZWJ1Zyk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlciAodm9pZCk7CisKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9idXNfZGVyZWdpc3RlciAoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSk7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSB1c2Jfc2VyaWFsX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICp1c2Jfc2VyaWFsX3R0eV9kcml2ZXI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoaW50IGRlYnVnLAorCQkJCQkgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBzaXplLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWlmIChkZWJ1ZykgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIiVzIC0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBmdW5jdGlvbiwgc2l6ZSk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpCisJCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCQlwcmludGsgKCJcbiIpOworCX0KK30KKworLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCisjdW5kZWYgZGJnCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiAsIF9fRklMRV9fICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworCisKKyNlbmRpZgkvKiBpZmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDMxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpAQCAtMCwwICsxLDExNjEgQEAKKy8qCisgKiBVU0IgSGFuZFNwcmluZyBWaXNvciwgUGFsbSBtNTB4LCBhbmQgU29ueSBDbGllIGRyaXZlcgorICogKHN1cHBvcnRzIGFsbCBvZiB0aGUgUGFsbSBPUyBVU0IgZGV2aWNlcykKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA0CisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqICgwNi8wMy8yMDAzKSBKdWRkIE1vbnRnb21lcnkgPGp1ZGQgYXQganBpbG90Lm9yZz4KKyAqICAgICBBZGRlZCBzdXBwb3J0IGZvciBtb2R1bGUgcGFyYW1ldGVyIG9wdGlvbnMgZm9yIHVudGVzdGVkL3Vua25vd24KKyAqICAgICBkZXZpY2VzLgorICoKKyAqICgwMy8wOS8yMDAzKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTb255IENsaWUgTlo5MFYgZGV2aWNlLiAgVGhhbmtzIHRvIE1hcnRpbiBCcmFjaHRsCisgKgk8YnJhY2h0bEByZWRncmVwLmN6PiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMy8wNS8yMDAzKSBna2gKKyAqCVRoaW5rIFRyZW8gc3VwcG9ydCBpcyBub3cgd29ya2luZy4KKyAqCisgKiAoMDQvMDMvMjAwMikgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgU29ueSBPUyA0LjEgZGV2aWNlcy4gIFRoYW5rcyB0byBIaXJveXVraSBBUkFLSQorICoJPGhpcm9Aem9iLm5lLmpwPiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMy8yNy8yMDAyKSBna2gKKyAqCVJlbW92ZWQgYXNzdW1wdGlvbnMgdGhhdCBwb3J0LT50dHkgd2FzIGFsd2F5cyB2YWxpZCAoaXMgbm90IHRydWUKKyAqCWZvciB1c2Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCisgKgorICogKDAzLzIzLzIwMDIpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFBhbG0gaTcwNSBkZXZpY2UsIHRoYW5rcyB0byBUaG9tYXMgUmllbWVyCisgKgk8dG9tQG5ldG1lY2guY29tPiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMy8yMS8yMDAyKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBQYWxtIG0xMzAgZGV2aWNlLCB0aGFua3MgdG8gVWRvIEVpc2VuYmFydGgKKyAqCTx1ZG8uZWlzZW5iYXJ0aEB3ZWIuZGU+IGZvciB0aGUgaW5mb3JtYXRpb24uCisgKgorICogKDAyLzI3LzIwMDIpIGdraAorICoJUmV3b3JrZWQgdGhlIHVyYiBoYW5kbGluZyBsb2dpYy4gIFdlIGhhdmUgbm8gbW9yZSBwb29sLCBidXQgZHluYW1pY2FsbHkKKyAqCWFsbG9jYXRlIHRoZSB1cmIgYW5kIHRoZSB0cmFuc2ZlciBidWZmZXIgb24gdGhlIGZseS4gIEluIHRlc3RpbmcgdGhpcworICoJZG9lcyBub3QgaW5jdXJlIGFueSBtZWFzdXJhYmxlIG92ZXJoZWFkLiAgVGhpcyBhbHNvIHJlbGllcyBvbiB0aGUgZmFjdAorICoJdGhhdCB3ZSBoYXZlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIHVyYnMuCisgKgorICogKDAyLzIxLzIwMDIpIFNpbGFTCisgKiAgQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgUGFsbSBtNTE1IGRldmljZXMuCisgKgorICogKDAyLzE0LzIwMDIpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIENsaWUgUy0zNjAgZGV2aWNlLgorICoKKyAqICgxMi8xOC8yMDAxKSBna2gKKyAqCUFkZGVkIGJldHRlciBDbGllIHN1cHBvcnQgZm9yIDMuNSBkZXZpY2VzLiAgVGhhbmtzIHRvIEdlb2ZmcmV5IExldmFuZAorICoJZm9yIHRoZSBwYXRjaC4KKyAqCisgKiAoMTEvMTEvMjAwMSkgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgbTEyNSBkZXZpY2VzLCBhbmQgYWRkZWQgY2hlY2sgdG8gcHJldmVudCBvb3BzZXMKKyAqCWZvciBDbGnpIGRldmljZXMgdGhhdCBsaWUgYWJvdXQgdGhlIG51bWJlciBvZiBwb3J0cyB0aGV5IGhhdmUuCisgKgorICogKDA4LzMwLzIwMDEpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIENsaWUgZGV2aWNlcywgYm90aCB0aGUgMy41IGFuZCA0LjAgb3MgdmVyc2lvbnMuCisgKglNYW55IHRoYW5rcyB0byBEYW5pZWwgQnVya2UsIGFuZCBCcnlhbiBQYXluZSBmb3IgaGVscGluZyB3aXRoIHRoaXMuCisgKgorICogKDA4LzIzLzIwMDEpIGdraAorICoJZml4ZWQgYSBmZXcgcG90ZW50aWFsIGJ1Z3MgcG9pbnRlZCBvdXQgYnkgT2xpdmVyIE5ldWt1bS4KKyAqCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgwNS8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIFBhbG0gbTUwMCBhbmQgUGFsbSBtNTA1IGRldmljZXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqICgwMS8yMS8yMDAwKSBna2gKKyAqCUFkZGVkIHdyaXRlX3Jvb20gYW5kIGNoYXJzX2luX2J1ZmZlciwgYXMgdGhleSB3ZXJlIHByZXZpb3VzbHkgdXNpbmcgdGhlCisgKglnZW5lcmljIGRyaXZlciB2ZXJzaW9ucyB3aGljaCBpcyBhbGwgd3Jvbmcgbm93IHRoYXQgd2UgYXJlIHVzaW5nIGFuIHVyYgorICoJcG9vbC4gIFRoYW5rcyB0byBXb2xmZ2FuZyBHcmFuZGVnZ2VyIGZvciBwb2ludGluZyB0aGlzIG91dCB0byBtZS4KKyAqCVJlbW92ZWQgY291bnQgYXNzaWdubWVudCBpbiB0aGUgd3JpdGUgZnVuY3Rpb24sIHdoaWNoIHdhcyBub3QgbmVlZGVkIGFueW1vcmUKKyAqCWVpdGhlci4gIFRoYW5rcyB0byBBbCBCb3JjaGVycyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisgKgorICogKDEyLzEyLzIwMDApIGdraAorICoJTW92ZWQgTU9EX0RFQyB0byBlbmQgb2Ygdmlzb3JfY2xvc2UgdG8gYmUgbmljZXIsIGFzIHRoZSBmaW5hbCB3cml0ZSAKKyAqCW1lc3NhZ2UgY2FuIHNsZWVwLgorICogCisgKiAoMTEvMTIvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgd2l0aCBkYXRhIGJlaW5nIGRyb3BwZWQgb24gdGhlIGZsb29yIGJ5IGZvcmNpbmcgdHR5LT5sb3dfbGF0ZW5jeQorICoJdG8gYmUgb24uICBIb3BlZnVsbHkgdGhpcyBmaXhlcyB0aGUgT0hDSSBpc3N1ZSEKKyAqCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA5LzExLzIwMDApIGdraAorICoJR290IHJpZCBvZiBhbHdheXMgY2FsbGluZyBrbWFsbG9jIGZvciBldmVyeSB1cmIgd2Ugd3JvdGUgb3V0IHRvIHRoZQorICoJZGV2aWNlLgorICoJQWRkZWQgdmlzb3JfcmVhZF9jYWxsYmFjayBzbyB3ZSBjYW4ga2VlcCB0cmFjayBvZiBieXRlcyBpbiBhbmQgb3V0IGZvcgorICoJdGhvc2UgcGVvcGxlIHdobyBsaWtlIHRvIGtub3cgdGhlIHNwZWVkIG9mIHRoZWlyIGRldmljZS4KKyAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisgKgorICogKDA5LzA2LzIwMDApIGdraAorICoJRml4ZWQgb29wcyBpbiB2aXNvcl9leGl0LiAgTmVlZCB0byB1bmNvbW1lbnQgdXNiX3VubGlua191cmIgY2FsbCBfYWZ0ZXJfCisgKgl0aGUgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgc2V0IHVyYi0+ZGV2ID0gTlVMTCB3aGVuIHRoZSB1cmIgaXMgZmluaXNoZWQuCisgKgorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcy4KKyAqCisgKiAoMDgvMDgvMjAwMCkgZ2toCisgKglGaXhlZCBlbmRpYW4gcHJvYmxlbSBpbiB2aXNvcl9zdGFydHVwLgorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYyBhbmQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZSAKKyAqCXRoYW4gb25jZS4KKyAqIAorICogKDA3LzIzLzIwMDApIGdraAorICoJQWRkZWQgcG9vbCBvZiB3cml0ZSB1cmJzIHRvIHNwZWVkIHVwIHRyYW5zZmVycyB0byB0aGUgdmlzb3IuCisgKiAKKyAqICgwNy8xOS8yMDAwKSBna2gKKyAqCUFkZGVkIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQgdGhpcworICoJZHJpdmVyIGlzIGEgbG9hZGFibGUgbW9kdWxlIG5vdy4KKyAqCisgKiAoMDcvMDMvMjAwMCkgZ2toCisgKglBZGRlZCB2aXNvcl9zZXRfaW9jdGwgYW5kIHZpc29yX3NldF90ZXJtaW9zIGZ1bmN0aW9ucyAodGhleSBkb24ndCBkbyBtdWNoCisgKglvZiBhbnl0aGluZywgYnV0IGFyZSBnb29kIGZvciBkZWJ1Z2dpbmcuKQorICogCisgKiAoMDYvMjUvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgaW4gdmlzb3JfdW50aHJvdHRsZSB0aGF0IHNob3VsZCBoZWxwIHdpdGggdGhlIGRpc2Nvbm5lY3QgaW4gUFBQCisgKglidWcgdGhhdCBwZW9wbGUgaGF2ZSBiZWVuIHJlcG9ydGluZy4KKyAqCisgKiAoMDYvMjMvMjAwMCkgZ2toCisgKglDbGVhbmVkIHVwIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIGEgcXVlc3QgdG8gZmluZCBVSENJIHRpbWVvdXQgYnVnLgorICoKKyAqICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKKyAqIAlGaXhlZCBtZW1vcnkgbGVhayBpbiB2aXNvcl9jbG9zZQorICoKKyAqICgwMy8yNi8yMDAwKSBna2gKKyAqCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJ2aXNvci5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4xIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBIYW5kU3ByaW5nIFZpc29yIC8gUGFsbSBPUyBkcml2ZXIiCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgaGFuZHNwcmluZyB2aXNvciAqLworc3RhdGljIGludCAgdmlzb3Jfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIHZpc29yX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgdmlzb3Jfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICB2aXNvcl93cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICB2aXNvcl9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdmlzb3JfdGhyb3R0bGUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdmlzb3JfdW50aHJvdHRsZQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICB2aXNvcl9wcm9iZQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50ICB2aXNvcl9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHZpc29yX3NodXRkb3duCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIHZpc29yX2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCB2aXNvcl9zZXRfdGVybWlvcwkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIHZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHZpc29yX3JlYWRfaW50X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgIGNsaWVfM181X3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgdHJlb19hdHRhY2gJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgY2xpZV81X2F0dGFjaCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50IHBhbG1fb3NfM19wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgcGFsbV9vc180X3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCisvKiBQYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHBhc3NlZCBpbnRvIHRoZSBtb2R1bGUuICovCitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIF9fdTE2IHZlbmRvcjsKK3N0YXRpYyBfX3UxNiBwcm9kdWN0OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1ZJU09SX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzNfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFT19JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1RSRU82MDBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTAwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTUwNV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX001MTVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9JNzA1X0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTEwMF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX00xMjVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTMwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fVFVOR1NURU5fVF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX1RVTkdTVEVOX1pfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFMzFfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV80XzBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1MzNjBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzRfMV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfTlg2MF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfTlo5MFZfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1RKMjVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TQ0hfSTMzMF9JRCksIAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TUEhfSTUwMF9JRCksIAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCBHQVJNSU5fSVFVRV8zNjAwX0lEKSwgCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEFDRUVDQV9WRU5ET1JfSUQsIEFDRUVDQV9NRVoxMDAwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoS1lPQ0VSQV9WRU5ET1JfSUQsIEtZT0NFUkFfNzEzNV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEZPU1NJTF9WRU5ET1JfSUQsIEZPU1NJTF9BQkFDVVNfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgfSwJCQkJCS8qIG9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLworCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjbGllX2lkXzVfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfVVg1MF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyB9LAkJCQkJLyogb3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNsaWVfaWRfM181X3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzNfNV9JRCkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1ZJU09SX0lEKSB9LAorCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19UUkVPX0lEKSB9LAorCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19UUkVPNjAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTA1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTE1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9JNzA1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTI1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTMwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9UVU5HU1RFTl9UX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9UVU5HU1RFTl9aX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFMzFfSUQpIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX1pJUkVfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfM181X0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzRfMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9TMzYwX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzRfMV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9OWDYwX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX05aOTBWX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1VYNTBfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfVEoyNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfU0NIX0kzMzBfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1NQSF9JNTAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCBHQVJNSU5fSVFVRV8zNjAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShBQ0VFQ0FfVkVORE9SX0lELCBBQ0VFQ0FfTUVaMTAwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoS1lPQ0VSQV9WRU5ET1JfSUQsIEtZT0NFUkFfNzEzNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRk9TU0lMX1ZFTkRPUl9JRCwgRk9TU0lMX0FCQUNVU19JRCkgfSwKKwl7IH0sCQkJCQkvKiBvcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpc29yX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidmlzb3IiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIEhhbmRzcHJpbmcgVmlzb3IsIGFuZCBQYWxtIDQuMCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgaGFuZHNwcmluZ19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiSGFuZHNwcmluZyBWaXNvciAvIFBhbG0gT1MiLAorCS5zaG9ydF9uYW1lID0JCSJ2aXNvciIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMiwKKwkubnVtX2J1bGtfb3V0ID0JCTIsCisJLm51bV9wb3J0cyA9CQkyLAorCS5vcGVuID0JCQl2aXNvcl9vcGVuLAorCS5jbG9zZSA9CQl2aXNvcl9jbG9zZSwKKwkudGhyb3R0bGUgPQkJdmlzb3JfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJdmlzb3JfdW50aHJvdHRsZSwKKwkuYXR0YWNoID0JCXRyZW9fYXR0YWNoLAorCS5wcm9iZSA9CQl2aXNvcl9wcm9iZSwKKwkuY2FsY19udW1fcG9ydHMgPQl2aXNvcl9jYWxjX251bV9wb3J0cywKKwkuc2h1dGRvd24gPQkJdmlzb3Jfc2h1dGRvd24sCisJLmlvY3RsID0JCXZpc29yX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQl2aXNvcl9zZXRfdGVybWlvcywKKwkud3JpdGUgPQkJdmlzb3Jfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJdmlzb3Jfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0Jdmlzb3JfY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0Jdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CXZpc29yX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBDbGllIFVYNTAsIFRINTUgUGFsbSA1LjAgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGNsaWVfNV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiU29ueSBDbGllIDUuMCIsCisJLnNob3J0X25hbWUgPQkJImNsaWVfNSIsCisJLmlkX3RhYmxlID0JCWNsaWVfaWRfNV90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCTIsCisJLm51bV9idWxrX291dCA9CQkyLAorCS5udW1fcG9ydHMgPQkJMiwKKwkub3BlbiA9CQkJdmlzb3Jfb3BlbiwKKwkuY2xvc2UgPQkJdmlzb3JfY2xvc2UsCisJLnRocm90dGxlID0JCXZpc29yX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXZpc29yX3VudGhyb3R0bGUsCisJLmF0dGFjaCA9CQljbGllXzVfYXR0YWNoLAorCS5wcm9iZSA9CQl2aXNvcl9wcm9iZSwKKwkuY2FsY19udW1fcG9ydHMgPQl2aXNvcl9jYWxjX251bV9wb3J0cywKKwkuc2h1dGRvd24gPQkJdmlzb3Jfc2h1dGRvd24sCisJLmlvY3RsID0JCXZpc29yX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQl2aXNvcl9zZXRfdGVybWlvcywKKwkud3JpdGUgPQkJdmlzb3Jfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJdmlzb3Jfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0Jdmlzb3JfY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0Jdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CXZpc29yX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworLyogZGV2aWNlIGluZm8gZm9yIHRoZSBTb255IENsaWUgT1MgdmVyc2lvbiAzLjUgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjbGllXzNfNV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiU29ueSBDbGllIDMuNSIsCisJLnNob3J0X25hbWUgPQkJImNsaWVfMy41IiwKKwkuaWRfdGFibGUgPQkJY2xpZV9pZF8zXzVfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCXZpc29yX29wZW4sCisJLmNsb3NlID0JCXZpc29yX2Nsb3NlLAorCS50aHJvdHRsZSA9CQl2aXNvcl90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQl2aXNvcl91bnRocm90dGxlLAorCS5hdHRhY2ggPQkJY2xpZV8zXzVfc3RhcnR1cCwKKwkuaW9jdGwgPQkJdmlzb3JfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCXZpc29yX3NldF90ZXJtaW9zLAorCS53cml0ZSA9CQl2aXNvcl93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQl2aXNvcl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQl2aXNvcl9jaGFyc19pbl9idWZmZXIsCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssCit9OworCitzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBieXRlc19pbjsKKwlpbnQgYnl0ZXNfb3V0OworCWludCBvdXRzdGFuZGluZ191cmJzOworCWludCB0aHJvdHRsZWQ7Cit9OworCisvKiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgdXJicyB0byBwcmV2ZW50IHVzZXJzcGFjZSBEb1MgZnJvbSBoYXBwZW5pbmcgKi8KKyNkZWZpbmUgVVJCX1VQUEVSX0xJTUlUCTQyCisKK3N0YXRpYyBpbnQgc3RhdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRzcHJpbmcgVmlzb3Igc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgdmlzb3Jfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7CisJCS8qIHRoaXMgaXMgbmVlZGVkIGZvciBzb21lIGJyYWluIGRlYWQgU29ueSBkZXZpY2VzICovCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkRldmljZSBsaWVkIGFib3V0IG51bWJlciBvZiBwb3J0cywgcGxlYXNlIHVzZSBhIGxvd2VyIG9uZS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmJ5dGVzX2luID0gMDsKKwlwcml2LT5ieXRlc19vdXQgPSAwOworCXByaXYtPm91dHN0YW5kaW5nX3VyYnMgPSAwOworCXByaXYtPnRocm90dGxlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEKKwkgKiB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2UKKwkgKiB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwgCisJCQkJCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICB2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlnb3RvIGV4aXQ7CisJfQorCQorCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CisJCWRiZygiJXMgLSBhZGRpbmcgaW50ZXJydXB0IGlucHV0IGZvciB0cmVvIiwgX19GVU5DVElPTl9fKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CitleGl0OgkKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkIHZpc29yX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisKKwkvKiBUcnkgdG8gc2VuZCBzaHV0ZG93biBtZXNzYWdlLCBpZiB0aGUgZGV2aWNlIGlzIGdvbmUsIHRoaXMgd2lsbCBqdXN0IGZhaWwuICovCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDB4MTIsIEdGUF9LRVJORUwpOworCWlmICh0cmFuc2Zlcl9idWZmZXIpIHsKKwkJdXNiX2NvbnRyb2xfbXNnIChwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgVklTT1JfQ0xPU0VfTk9USUZJQ0FUSU9OLCAweGMyLAorCQkJCSAweDAwMDAsIDB4MDAwMCwgCisJCQkJIHRyYW5zZmVyX2J1ZmZlciwgMHgxMiwgMzAwKTsKKwkJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJfQorCisJaWYgKHN0YXRzKQorCQlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiQnl0ZXMgSW4gPSAlZCAgQnl0ZXMgT3V0ID0gJWRcbiIsCisJCQkgcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCk7Cit9CisKKworc3RhdGljIGludCB2aXNvcl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlidWZmZXIgPSBrbWFsbG9jIChjb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5IChidWZmZXIsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBidWZmZXIpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCQkgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIGJ1ZmZlciwgY291bnQsIAorCQkJICAgdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJY291bnQgPSBzdGF0dXM7CisJCWtmcmVlIChidWZmZXIpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCSsrcHJpdi0+b3V0c3RhbmRpbmdfdXJiczsKKwkJcHJpdi0+Ynl0ZXNfb3V0ICs9IGNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfQorCisJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgorCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCXVzYl9mcmVlX3VyYiAodXJiKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IHZpc29yX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKgorCSAqIFdlIHJlYWxseSBjYW4gdGFrZSBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKKwkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKKwkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlCisJICovCisJcmV0dXJuIDIwNDg7Cit9CisKKworc3RhdGljIGludCB2aXNvcl9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiAKKwkgKiBXZSBjYW4ndCByZWFsbHkgYWNjb3VudCBmb3IgaG93IG11Y2ggZGF0YSB3ZQorCSAqIGhhdmUgc2VudCBvdXQsIGJ1dCBoYXNuJ3QgbWFkZSBpdCB0aHJvdWdoIHRvIHRoZQorCSAqIGRldmljZSwgc28ganVzdCB0ZWxsIHRoZSB0dHkgbGF5ZXIgdGhhdCBldmVyeXRoaW5nCisJICogaXMgZmx1c2hlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwktLXByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKKworc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCB0aHJvdHRsZWQ7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5ieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdGhyb3R0bGVkID0gcHJpdi0+dGhyb3R0bGVkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCBpZiB3ZSBzaG91bGQgKi8KKwlpZiAoIXRocm90dGxlZCkgeworCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJCSAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJaW50IHJlc3VsdDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKgorCSAqIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RpbGwgdW5rbm93biB3aGF0IGl0IGNhbiBiZSB1c2VkIGZvci4KKwkgKiBJZiBhbnlvbmUgaGFzIGFuIGlkZWEsIHBsZWFzZSBsZXQgdGhlIGF1dGhvciBrbm93Li4uCisJICoKKwkgKiBSdW1vciBoYXMgaXQgdGhpcyBlbmRwb2ludCBpcyB1c2VkIHRvIG5vdGlmeSB3aGVuIGRhdGEKKwkgKiBpcyByZWFkeSB0byBiZSByZWFkIGZyb20gdGhlIGJ1bGsgb25lcy4KKwkgKi8KKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywKKwkJCSAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCitleGl0OgorCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgdmlzb3JfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIHZvaWQgdmlzb3JfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IHBhbG1fb3NfM19wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJpYWwtPmRldi0+ZGV2OworCXN0cnVjdCB2aXNvcl9jb25uZWN0aW9uX2luZm8gKmNvbm5lY3Rpb25faW5mbzsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJY2hhciAqc3RyaW5nOworCWludCByZXR2YWwgPSAwOworCWludCBpOworCWludCBudW1fcG9ydHMgPSAwOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChzaXplb2YgKCpjb25uZWN0aW9uX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlkZXZfZXJyKGRldiwgIiVzIC0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywKKwkJCXNpemVvZigqY29ubmVjdGlvbl9pbmZvKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHNlbmQgYSBnZXQgY29ubmVjdGlvbiBpbmZvIHJlcXVlc3QgKi8KKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgIFZJU09SX0dFVF9DT05ORUNUSU9OX0lORk9STUFUSU9OLAorCQkJCSAgMHhjMiwgMHgwMDAwLCAweDAwMDAsIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHNpemVvZigqY29ubmVjdGlvbl9pbmZvKSwgMzAwKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIiVzIC0gZXJyb3IgJWQgZ2V0dGluZyBjb25uZWN0aW9uIGluZm9ybWF0aW9uXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHJldHZhbCA9PSBzaXplb2YoKmNvbm5lY3Rpb25faW5mbykpIHsKKwkgICAgICAgIGNvbm5lY3Rpb25faW5mbyA9IChzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvICopdHJhbnNmZXJfYnVmZmVyOworCisJCW51bV9wb3J0cyA9IGxlMTZfdG9fY3B1KGNvbm5lY3Rpb25faW5mby0+bnVtX3BvcnRzKTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgKytpKSB7CisJCQlzd2l0Y2ggKGNvbm5lY3Rpb25faW5mby0+Y29ubmVjdGlvbnNbaV0ucG9ydF9mdW5jdGlvbl9pZCkgeworCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fR0VORVJJQzoKKwkJCQkJc3RyaW5nID0gIkdlbmVyaWMiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0RFQlVHR0VSOgorCQkJCQlzdHJpbmcgPSAiRGVidWdnZXIiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0hPVFNZTkM6CisJCQkJCXN0cmluZyA9ICJIb3RTeW5jIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWSVNPUl9GVU5DVElPTl9DT05TT0xFOgorCQkJCQlzdHJpbmcgPSAiQ29uc29sZSI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fUkVNT1RFX0ZJTEVfU1lTOgorCQkJCQlzdHJpbmcgPSAiUmVtb3RlIEZpbGUgU3lzdGVtIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc3RyaW5nID0gInVua25vd24iOworCQkJCQlicmVhazsKKwkJCX0KKwkJCWRldl9pbmZvKGRldiwgIiVzOiBwb3J0ICVkLCBpcyBmb3IgJXMgdXNlXG4iLAorCQkJCXNlcmlhbC0+dHlwZS0+bmFtZSwKKwkJCQljb25uZWN0aW9uX2luZm8tPmNvbm5lY3Rpb25zW2ldLnBvcnQsIHN0cmluZyk7CisJCX0KKwl9CisJLyoKKwkqIEhhbmRsZSBkZXZpY2VzIHRoYXQgcmVwb3J0IGludmFsaWQgc3R1ZmYgaGVyZS4KKwkqLworCWlmIChudW1fcG9ydHMgPT0gMCB8fCBudW1fcG9ydHMgPiAyKSB7CisJCWRldl93YXJuIChkZXYsICIlczogTm8gdmFsaWQgY29ubmVjdCBpbmZvIGF2YWlsYWJsZVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCW51bV9wb3J0cyA9IDI7CisJfQorICAKKwlkZXZfaW5mbyhkZXYsICIlczogTnVtYmVyIG9mIHBvcnRzOiAlZFxuIiwgc2VyaWFsLT50eXBlLT5uYW1lLAorCQludW1fcG9ydHMpOworCisJLyoKKwkgKiBzYXZlIG9mZiBvdXIgbnVtX3BvcnRzIGluZm8gc28gdGhhdCB3ZSBjYW4gdXNlIGl0IGluIHRoZQorCSAqIGNhbGNfbnVtX3BvcnRzIGNhbGxiYWNrCisJICovCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsICh2b2lkICopKGxvbmcpbnVtX3BvcnRzKTsKKworCS8qIGFzayBmb3IgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIGJ1dCBpZ25vcmUgdGhlIHJlc3BvbnNlIGFzIGl0IGlzIGJyb2tlbiAqLworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsCisJCQkJICB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgVklTT1JfUkVRVUVTVF9CWVRFU19BVkFJTEFCTEUsCisJCQkJICAweGMyLCAweDAwMDAsIDB4MDAwNSwgdHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgMHgwMiwgMzAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X2VycihkZXYsICIlcyAtIGVycm9yICVkIGdldHRpbmcgYnl0ZXMgYXZhaWxhYmxlIHJlcXVlc3RcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJcmV0dmFsID0gMDsKKworZXhpdDoKKwlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcGFsbV9vc180X3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+ZGV2LT5kZXY7CisJc3RydWN0IHBhbG1fZXh0X2Nvbm5lY3Rpb25faW5mbyAqY29ubmVjdGlvbl9pbmZvOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmV0dmFsOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoc2l6ZW9mICgqY29ubmVjdGlvbl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGttYWxsb2MoJVpkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlzaXplb2YoKmNvbm5lY3Rpb25faW5mbykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgCisJCQkJICBQQUxNX0dFVF9FWFRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiwKKwkJCQkgIDB4YzIsIDB4MDAwMCwgMHgwMDAwLCB0cmFuc2Zlcl9idWZmZXIsCisJCQkJICBzaXplb2YgKCpjb25uZWN0aW9uX2luZm8pLCAzMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfZXJyKGRldiwgIiVzIC0gZXJyb3IgJWQgZ2V0dGluZyBjb25uZWN0aW9uIGluZm9cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJZWxzZQorCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkJICAgICAgcmV0dmFsLCB0cmFuc2Zlcl9idWZmZXIpOworCisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2aXNvcl9wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXR2YWwgPSAwOworCWludCAoKnN0YXJ0dXApIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKKwkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChpZC0+ZHJpdmVyX2luZm8pIHsKKwkJc3RhcnR1cCA9ICh2b2lkICopaWQtPmRyaXZlcl9pbmZvOworCQlyZXR2YWwgPSBzdGFydHVwKHNlcmlhbCwgaWQpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlzb3JfY2FsY19udW1fcG9ydHMgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IG51bV9wb3J0cyA9IChpbnQpKGxvbmcpKHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSk7CisKKwlpZiAobnVtX3BvcnRzKQorCQl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CisKKwlyZXR1cm4gbnVtX3BvcnRzOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcHJpdiA9IGttYWxsb2MgKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtc2V0IChwcml2LCAweDAwLCBzaXplb2YoKnByaXYpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBwcml2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xpZV8zXzVfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5kZXYtPmRldjsKKwlpbnQgcmVzdWx0OworCXU4IGRhdGE7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qCisJICogTm90ZSB0aGF0IFBFRy0zMDAgc2VyaWVzIGRldmljZXMgZXhwZWN0IHRoZSBmb2xsb3dpbmcgdHdvIGNhbGxzLgorCSAqLworCisJLyogZ2V0IHRoZSBjb25maWcgbnVtYmVyICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04sIFVTQl9ESVJfSU4sCisJCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGNvbmZpZyBudW1iZXIgZmFpbGVkOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAocmVzdWx0ICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGNvbmZpZyBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGdldCB0aGUgaW50ZXJmYWNlIG51bWJlciAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJICBVU0JfUkVRX0dFVF9JTlRFUkZBQ0UsIAorCQkJCSAgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgZmFpbGVkOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAocmVzdWx0ICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiBnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKTsKK30KKyAKK3N0YXRpYyBpbnQgdHJlb19hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqc3dhcF9wb3J0OworCisJLyogT25seSBkbyB0aGlzIGVuZHBvaW50IGhhY2sgZm9yIHRoZSBIYW5kc3ByaW5nIGRldmljZXMgd2l0aAorCSAqIGludGVycnVwdCBpbiBlbmRwb2ludHMsIHdoaWNoIGZvciBub3cgYXJlIHRoZSBUcmVvIGRldmljZXMuICovCisJaWYgKCEoKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBIQU5EU1BSSU5HX1ZFTkRPUl9JRCkgfHwKKwkgICAgICAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IEtZT0NFUkFfVkVORE9SX0lEKSkgfHwKKwkgICAgKHNlcmlhbC0+bnVtX2ludGVycnVwdF9pbiA9PSAwKSkKKwkJZ290byBnZW5lcmljX3N0YXJ0dXA7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qCisJKiBJdCBhcHBlYXJzIHRoYXQgVHJlb3MgYW5kIEt5b2NlcmFzIHdhbnQgdG8gdXNlIHRoZSAKKwkqIDFzdCBidWxrIGluIGVuZHBvaW50IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIDJuZCBidWxrIG91dCBlbmRwb2ludCwgCisJKiBzbyBsZXQncyBzd2FwIHRoZSAxc3QgYW5kIDJuZCBidWxrIGluIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLiAgCisJKiBOb3RlIHRoYXQgc3dhcHBpbmcgdGhlIGJ1bGsgb3V0IGVuZHBvaW50cyB3b3VsZCBicmVhayBsb3RzIG9mIAorCSogYXBwcyB0aGF0IHdhbnQgdG8gY29tbXVuaWNhdGUgb24gdGhlIHNlY29uZCBwb3J0LgorCSovCisjZGVmaW5lIENPUFlfUE9SVChkZXN0LCBzcmMpCQkJCQkJXAorCWRlc3QtPnJlYWRfdXJiID0gc3JjLT5yZWFkX3VyYjsJCQkJCVwKKwlkZXN0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyA9IHNyYy0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CVwKKwlkZXN0LT5idWxrX2luX2J1ZmZlciA9IHNyYy0+YnVsa19pbl9idWZmZXI7CQkJXAorCWRlc3QtPmludGVycnVwdF9pbl91cmIgPSBzcmMtPmludGVycnVwdF9pbl91cmI7CQkJXAorCWRlc3QtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBzcmMtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CVwKKwlkZXN0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gc3JjLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOworCisJc3dhcF9wb3J0ID0ga21hbGxvYyhzaXplb2YoKnN3YXBfcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghc3dhcF9wb3J0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlDT1BZX1BPUlQoc3dhcF9wb3J0LCBzZXJpYWwtPnBvcnRbMF0pOworCUNPUFlfUE9SVChzZXJpYWwtPnBvcnRbMF0sIHNlcmlhbC0+cG9ydFsxXSk7CisJQ09QWV9QT1JUKHNlcmlhbC0+cG9ydFsxXSwgc3dhcF9wb3J0KTsKKwlrZnJlZShzd2FwX3BvcnQpOworCitnZW5lcmljX3N0YXJ0dXA6CisJcmV0dXJuIGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpOworfQorCitzdGF0aWMgaW50IGNsaWVfNV9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBUSDU1IHJlZ2lzdGVycyAyIHBvcnRzLiAKKwkgICBDb21tdW5pY2F0aW9uIGluIGZyb20gdGhlIFVYNTAvVEg1NSB1c2VzIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzIGZyb20gcG9ydCAwIAorCSAgIENvbW11bmljYXRpb24gb3V0IHRvIHRoZSBVWDUwL1RINTUgdXNlcyBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgZnJvbSBwb3J0IDEgCisJICAgCisJICAgTGV0cyBkbyBhIHF1aWNrIGFuZCBkaXJ0eSBtYXBwaW5nCisJICovCisJCisJLyogc29tZSBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoc2VyaWFsLT5udW1fcG9ydHMgPCAyKQorCQlyZXR1cm4gLTE7CisJCQorCS8qIHBvcnQgMCBub3cgdXNlcyB0aGUgbW9kaWZpZWQgZW5kcG9pbnQgQWRkcmVzcyAqLworCXNlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID0gc2VyaWFsLT5wb3J0WzFdLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisKKwlyZXR1cm4gZ2VuZXJpY19zdGFydHVwKHNlcmlhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpc29yX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgaW50IHZpc29yX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgYWxsIG5pY2UgYW5kIGdvb2QsIGJ1dCB3ZSBkb24ndCBjaGFuZ2UgYW55dGhpbmcgYmFzZWQgb24gaXQgOikgKi8KK3N0YXRpYyB2b2lkIHZpc29yX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJdW5zaWduZWQgaW50IGNmbGFnOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJICAgIChSRUxFVkFOVF9JRkxBRyhwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcpID09IFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGNoYW5nZS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBnZXQgdGhlIGJ5dGUgc2l6ZSAqLworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQljYXNlIENTNjoJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQljYXNlIENTNzoJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCX0KKwkKKwkvKiBkZXRlcm1pbmUgdGhlIHBhcml0eSAqLworCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJZGJnKCIlcyAtIHBhcml0eSA9IG9kZCIsIF9fRlVOQ1RJT05fXyk7CisJCWVsc2UKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIHN0b3AgYml0cyByZXF1ZXN0ZWQgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpCisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKworCQorCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCWRiZygiJXMgLSBSVFMvQ1RTIGlzIGVuYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCWVsc2UKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQorCS8qIGRldGVybWluZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAoSV9JWE9GRihwb3J0LT50dHkpKQorCQlkYmcoIiVzIC0gWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwKKwkJICAgIF9fRlVOQ1RJT05fXywgU1RBUlRfQ0hBUihwb3J0LT50dHkpLCBTVE9QX0NIQVIocG9ydC0+dHR5KSk7CisJZWxzZQorCQlkYmcoIiVzIC0gWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCisJLyogZ2V0IHRoZSBiYXVkIHJhdGUgd2FudGVkICovCisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCB2aXNvcl9pbml0ICh2b2lkKQoreworCWludCBpLCByZXR2YWw7CisJLyogT25seSBpZiBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIHRvIHVzICovCisJaWYgKCh2ZW5kb3I+MCkgJiYgKHByb2R1Y3Q+MCkpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2Rldl90ZW1wW109CisJCQl7e1VTQl9ERVZJQ0UodmVuZG9yLCBwcm9kdWN0KSwKKwkJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH19OworCisJCS8qIEZpbmQgdGhlIGxhc3QgZW50cnkgaW4gaWRfdGFibGUgKi8KKwkJZm9yIChpPTA7IDsgaSsrKSB7CisJCQlpZiAoaWRfdGFibGVbaV0uaWRWZW5kb3I9PTApIHsKKwkJCQlpZF90YWJsZVtpXSA9IHVzYl9kZXZfdGVtcFswXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBGaW5kIHRoZSBsYXN0IGVudHJ5IGluIGlkX3RhYmxlX2NvbWJpbmVkICovCisJCWZvciAoaT0wOyA7IGkrKykgeworCQkJaWYgKGlkX3RhYmxlX2NvbWJpbmVkW2ldLmlkVmVuZG9yPT0wKSB7CisJCQkJaWRfdGFibGVfY29tYmluZWRbaV0gPSB1c2JfZGV2X3RlbXBbMF07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaW5mbygiVW50ZXN0ZWQgVVNCIGRldmljZSBzcGVjaWZpZWQgYXQgdGltZSBvZiBtb2R1bGUgaW5zZXJ0aW9uIik7CisJCWluZm8oIldhcm5pbmc6IFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayIpOworCQlpbmZvKCJVc2luZyBhIG5ld2VyIGtlcm5lbCBpcyBwcmVmZXJyZWQgdG8gdGhpcyBtZXRob2QiKTsKKwkJaW5mbygiQWRkaW5nIFBhbG0gT1MgcHJvdG9jb2wgNC54IHN1cHBvcnQgZm9yIHVua25vd24gZGV2aWNlOiAweCV4LzB4JXgiLAorCQkJdmVuZG9yLCBwcm9kdWN0KTsKKwl9CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaGFuZHNwcmluZ19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2hhbmRzcHJpbmdfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY2xpZV8zXzVfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9jbGllXzNfNV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjbGllXzVfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9jbGllXzVfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ2aXNvcl9kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY2xpZV81X2RldmljZSk7CitmYWlsZWRfY2xpZV81X3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY2xpZV8zXzVfZGV2aWNlKTsKK2ZhaWxlZF9jbGllXzNfNV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhhbmRzcHJpbmdfZGV2aWNlKTsKK2ZhaWxlZF9oYW5kc3ByaW5nX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHZpc29yX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZ2aXNvcl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmhhbmRzcHJpbmdfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjbGllXzNfNV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmNsaWVfNV9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KHZpc29yX2luaXQpOworbW9kdWxlX2V4aXQodmlzb3JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKK21vZHVsZV9wYXJhbShzdGF0cywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhzdGF0cywgIkVuYWJsZXMgc3RhdGlzdGljcyBvciBub3QiKTsKKworbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgdmVuZG9yIElEIik7Cittb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIHByb2R1Y3QgSUQiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmZhMmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBVU0IgSGFuZFNwcmluZyBWaXNvciBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzCisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfVklTT1JfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfVklTT1JfSAorCisKKyNkZWZpbmUgSEFORFNQUklOR19WRU5ET1JfSUQJCTB4MDgyZAorI2RlZmluZSBIQU5EU1BSSU5HX1ZJU09SX0lECQkweDAxMDAKKyNkZWZpbmUgSEFORFNQUklOR19UUkVPX0lECQkweDAyMDAKKyNkZWZpbmUgSEFORFNQUklOR19UUkVPNjAwX0lECQkweDAzMDAKKworI2RlZmluZSBQQUxNX1ZFTkRPUl9JRAkJCTB4MDgzMAorI2RlZmluZSBQQUxNX001MDBfSUQJCQkweDAwMDEKKyNkZWZpbmUgUEFMTV9NNTA1X0lECQkJMHgwMDAyCisjZGVmaW5lIFBBTE1fTTUxNV9JRAkJCTB4MDAwMworI2RlZmluZSBQQUxNX0k3MDVfSUQJCQkweDAwMjAKKyNkZWZpbmUgUEFMTV9NMTI1X0lECQkJMHgwMDQwCisjZGVmaW5lIFBBTE1fTTEzMF9JRAkJCTB4MDA1MAorI2RlZmluZSBQQUxNX1RVTkdTVEVOX1RfSUQJCTB4MDA2MAorI2RlZmluZSBQQUxNX1RVTkdTVEVOX1pfSUQJCTB4MDAzMQorI2RlZmluZSBQQUxNX1pJUkUzMV9JRAkJCTB4MDA2MQorI2RlZmluZSBQQUxNX1pJUkVfSUQJCQkweDAwNzAKKyNkZWZpbmUgUEFMTV9NMTAwX0lECQkJMHgwMDgwCisKKyNkZWZpbmUgU09OWV9WRU5ET1JfSUQJCQkweDA1NEMKKyNkZWZpbmUgU09OWV9DTElFXzNfNV9JRAkJMHgwMDM4CisjZGVmaW5lIFNPTllfQ0xJRV80XzBfSUQJCTB4MDA2NgorI2RlZmluZSBTT05ZX0NMSUVfUzM2MF9JRAkJMHgwMDk1CisjZGVmaW5lIFNPTllfQ0xJRV80XzFfSUQJCTB4MDA5QQorI2RlZmluZSBTT05ZX0NMSUVfTlg2MF9JRAkJMHgwMERBCisjZGVmaW5lIFNPTllfQ0xJRV9OWjkwVl9JRAkJMHgwMEU5CisjZGVmaW5lIFNPTllfQ0xJRV9VWDUwX0lECQkweDAxNDQKKyNkZWZpbmUgU09OWV9DTElFX1RKMjVfSUQJCTB4MDE2OQorCisjZGVmaW5lIFNBTVNVTkdfVkVORE9SX0lECQkweDA0RTgKKyNkZWZpbmUgU0FNU1VOR19TQ0hfSTMzMF9JRAkJMHg4MDAxCisjZGVmaW5lIFNBTVNVTkdfU1BIX0k1MDBfSUQJCTB4NjYwMQorCisjZGVmaW5lIEdBUk1JTl9WRU5ET1JfSUQJCTB4MDkxRQorI2RlZmluZSBHQVJNSU5fSVFVRV8zNjAwX0lECQkweDAwMDQKKworI2RlZmluZSBBQ0VFQ0FfVkVORE9SX0lECQkweDQ3NjYKKyNkZWZpbmUgQUNFRUNBX01FWjEwMDBfSUQJCTB4MDAwMQorCisjZGVmaW5lIEtZT0NFUkFfVkVORE9SX0lECQkweDBDODgKKyNkZWZpbmUgS1lPQ0VSQV83MTM1X0lECQkJMHgwMDIxIAorCisjZGVmaW5lIEZPU1NJTF9WRU5ET1JfSUQJCTB4MEU2NworI2RlZmluZSBGT1NTSUxfQUJBQ1VTX0lECQkweDAwMDIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRzcHJpbmcgVmlzb3IgVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZXMgKGJSZXF1ZXN0IHZhbHVlcykKKyAqIEEgYmlnIHRoYW5rIHlvdSB0byBIYW5kc3ByaW5nIGZvciBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4KKyAqIElmIGFueW9uZSB3YW50cyB0aGUgb3JpZ2luYWwgZmlsZSB3aGVyZSB0aGVzZSB2YWx1ZXMgYW5kIHN0cnVjdHVyZXMgY2FtZQorICogZnJvbSwgc2VuZCBlbWFpbCB0byA8Z3JlZ0Brcm9haC5jb20+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWSVNPUl9SRVFVRVNUX0JZVEVTX0FWQUlMQUJMRSBhc2tzIHRoZSB2aXNvciBmb3IgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0CisgKiBhcmUgYXZhaWxhYmxlIHRvIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBob3N0IGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50LgorICogQ3VycmVudGx5IHRoaXMgaXMgbm90IHVzZWQsIGFuZCBhbHdheXMgcmV0dXJucyAweDAwMDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBWSVNPUl9SRVFVRVNUX0JZVEVTX0FWQUlMQUJMRQkJMHgwMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVklTT1JfQ0xPU0VfTk9USUZJQ0FUSU9OIGlzIHNldCB0byB0aGUgZGV2aWNlIHRvIG5vdGlmeSBpdCB0aGF0IHRoZSBob3N0CisgKiBpcyBub3cgY2xvc2luZyB0aGUgcGlwZS4gQW4gZW1wdHkgcGFja2V0IGlzIHNlbnQgaW4gcmVzcG9uc2UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVklTT1JfQ0xPU0VfTk9USUZJQ0FUSU9OCQkweDAyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiBpcyBzZW50IGJ5IHRoZSBob3N0IGR1cmluZyBlbnVtZXJhdGlvbiB0bworICogZ2V0IHRoZSBlbmRwb2ludHMgdXNlZCBieSB0aGUgY29ubmVjdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTgkweDAzCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZJU09SX0dFVF9DT05ORUNUSU9OX0lORk9STUFUSU9OIHJldHVybnMgZGF0YSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvIHsKKwlfX2xlMTYJbnVtX3BvcnRzOworCXN0cnVjdCB7CisJCV9fdTgJcG9ydF9mdW5jdGlvbl9pZDsKKwkJX191OAlwb3J0OworCX0gY29ubmVjdGlvbnNbMl07Cit9OworCisKKy8qIHN0cnVjdCB2aXNvcl9jb25uZWN0aW9uX2luZm8uY29ubmVjdGlvblt4XS5wb3J0IGRlZmluZXM6ICovCisjZGVmaW5lIFZJU09SX0VORFBPSU5UXzEJCTB4MDEKKyNkZWZpbmUgVklTT1JfRU5EUE9JTlRfMgkJMHgwMgorCisvKiBzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvLmNvbm5lY3Rpb25beF0ucG9ydF9mdW5jdGlvbl9pZCBkZWZpbmVzOiAqLworI2RlZmluZSBWSVNPUl9GVU5DVElPTl9HRU5FUklDCQkweDAwCisjZGVmaW5lIFZJU09SX0ZVTkNUSU9OX0RFQlVHR0VSCQkweDAxCisjZGVmaW5lIFZJU09SX0ZVTkNUSU9OX0hPVFNZTkMJCTB4MDIKKyNkZWZpbmUgVklTT1JfRlVOQ1RJT05fQ09OU09MRQkJMHgwMworI2RlZmluZSBWSVNPUl9GVU5DVElPTl9SRU1PVEVfRklMRV9TWVMJMHgwNAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQUxNX0dFVF9TT01FX1VOS05PV05fSU5GT1JNQVRJT04gaXMgc2VudCBieSB0aGUgaG9zdCBkdXJpbmcgZW51bWVyYXRpb24gdG8KKyAqIGdldCBzb21lIGluZm9ybWF0aW9uIGZyb20gdGhlIE0gc2VyaWVzIGRldmljZXMsIHRoYXQgaXMgY3VycmVudGx5IHVua25vd24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUEFMTV9HRVRfRVhUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04JMHgwNAorCisvKioKKyAqIHN0cnVjdCBwYWxtX2V4dF9jb25uZWN0aW9uX2luZm8gLSByZXR1cm4gZGF0YSBmcm9tIGEgUEFMTV9HRVRfRVhUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04gcmVxdWVzdAorICogQG51bV9wb3J0czogbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb25zL2Nvbm5lY3Rpb25zIGluIHVzZQorICogQGVuZHBvaW50X251bWJlcnNfZGlmZmVyZW50OiB3aWxsIGJlIDEgaWYgaW4gYW5kIG91dCBlbmRwb2ludHMgbnVtYmVycyBhcmUKKyAqCWRpZmZlcmVudCwgb3RoZXJ3aXNlIGl0IGlzIDAuICBJZiB2YWx1ZSBpcyAxLCB0aGVuCisgKgljb25uZWN0aW9ucy5lbmRfcG9pbnRfaW5mbyBpcyBub24temVyby4gIElmIHZhbHVlIGlzIDAsIHRoZW4KKyAqCWNvbm5lY3Rpb25zLnBvcnQgY29udGFpbnMgdGhlIGVuZHBvaW50IG51bWJlciwgd2hpY2ggaXMgdGhlIHNhbWUgZm9yIGluCisgKglhbmQgb3V0LgorICogQHBvcnRfZnVuY3Rpb25faWQ6IGNvbnRhaW5zIHRoZSBjcmVhdG9yIGlkIG9mIHRoZSBhcHBsaWNhdG9uIHRoYXQgb3BlbmVkCisgKgl0aGlzIGNvbm5lY3Rpb24uCisgKiBAcG9ydDogY29udGFpbnMgdGhlIGluL291dCBlbmRwb2ludCBudW1iZXIuICBJcyAwIGlmIGluIGFuZCBvdXQgZW5kcG9pbnQKKyAqCW51bWJlcnMgYXJlIGRpZmZlcmVudC4KKyAqIEBlbmRfcG9pbnRfaW5mbzogaGlnaCBudWJiZSBpcyBpbiBlbmRwb2ludCBhbmQgbG93IG5pYmJsZSB3aWxsIGluZGljYXRlIG91dAorICoJZW5kcG9pbnQuICBJcyAwIGlmIGluIGFuZCBvdXQgZW5kcG9pbnRzIGFyZSB0aGUgc2FtZS4KKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IHN1cHBvcnRlZCBpcyAyCisgKi8KK3N0cnVjdCBwYWxtX2V4dF9jb25uZWN0aW9uX2luZm8geworCV9fdTggbnVtX3BvcnRzOwkJCisJX191OCBlbmRwb2ludF9udW1iZXJzX2RpZmZlcmVudDsKKwlfX2xlMTYgcmVzZXJ2ZWQxOworCXN0cnVjdCB7CisJCV9fdTMyIHBvcnRfZnVuY3Rpb25faWQ7CisJCV9fdTggcG9ydDsKKwkJX191OCBlbmRfcG9pbnRfaW5mbzsKKwkJX19sZTE2IHJlc2VydmVkOworCX0gY29ubmVjdGlvbnNbMl07Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmM2JjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKQEAgLTAsMCArMSwxNTEyIEBACisvKgorICogVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDIKKyAqCSAgICBDb25uZWN0IFRlY2ggSW5jLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OSAtIDIwMDEKKyAqCSAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogKDEwLzA5LzIwMDIpIFN0dWFydCBNYWNEb25hbGQgKHN0dWFydG1AY29ubmVjdHRlY2guY29tKQorICoJVXBncmFkZSB0byBmdWxsIHdvcmtpbmcgZHJpdmVyCisgKgorICogKDA1LzMwLzIwMDEpIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMDQvMDgvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKiAKKyAqIDIwMDFfTWFyXzE5IGdraAorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYywgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZSAKKyAqCXRoYW4gb25jZSwgYW5kIHRoZSBnb3QgdGhlIHByb3BlciB1c2JfZGV2aWNlX2lkIHRhYmxlIGVudHJpZXMgc28KKyAqCXRoZSBkcml2ZXIgd29ya3MgYWdhaW4uCisgKgorICogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorICoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisgKiAKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgxMC8wMy8yMDAwKSBzbWQKKyAqCWZpcm13YXJlIGlzIGltcHJvdmVkIHRvIGd1YXJkIGFnYWluc3QgY3JhcCBzZW50IHRvIGRldmljZQorICoJZmlybXdhcmUgbm93IHJlcGxpZXMgQ01EX0ZBSUxVUkUgb24gYmFkIHRoaW5ncworICoJcmVhZF9jYWxsYmFjayBmaXggeW91IHByb3ZpZGVkIGZvciBwcml2YXRlIGluZm8gc3RydWN0CisgKgljb21tYW5kX2ZpbmlzaGVkIG5vdyBpbmRpY2F0ZXMgc3VjY2VzcyBvciBmYWlsCisgKglzZXR1cF9wb3J0IHN0cnVjdCBub3cgcGFja2VkIHRvIGF2b2lkIGdjYyBwYWRkaW5nCisgKglmaXJtd2FyZSB1c2VzIDEgYmFzZWQgcG9ydCBudW1iZXJpbmcsIGRyaXZlciBub3cgaGFuZGxlcyB0aGF0CisgKgorICogKDA5LzExLzIwMDApIGdraAorICoJUmVtb3ZlZCBERUJVRyAjaWZkZWZzIHdpdGggY2FsbCB0byB1c2Jfc2VyaWFsX2RlYnVnX2RhdGEKKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKglGaXhlZCBidWcgd2l0aCBwb3J0LT5taW5vciB0aGF0IHdhcyBmb3VuZCBieSBBbCBCb3JjaGVycworICoKKyAqICgwNy8wNC8yMDAwKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHBvcnQgc2V0dGluZ3MuIEJhdWQgcmF0ZSBjYW4gbm93IGJlIGNoYW5nZWQuIExpbmUgc2lnbmFscworICoJYXJlIG5vdCB0cmFuc2ZlcnJlZCB0byBhbmQgZnJvbSB0aGUgdHR5IGxheWVyIHlldCwgYnV0IHRoaW5ncyBzZWVtIHRvIGJlIAorICoJd29ya2luZyB3ZWxsIG5vdy4KKyAqCisgKiAoMDUvMDQvMjAwMCkgZ2toCisgKglGaXJzdCBjdXQgYXQgb3BlbiBhbmQgY2xvc2UgY29tbWFuZHMuIERhdGEgY2FuIGZsb3cgdGhyb3VnaCB0aGUgcG9ydHMgYXQKKyAqCWRlZmF1bHQgc3BlZWRzIG5vdy4KKyAqCisgKiAoMDMvMjYvMjAwMCkgZ2toCisgKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgorICogCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJ3aGl0ZWhlYXRfZncuaCIJCS8qIGZpcm13YXJlIGZvciB0aGUgQ29ubmVjdFRlY2ggV2hpdGVIRUFUIGRldmljZSAqLworI2luY2x1ZGUgIndoaXRlaGVhdC5oIgkJCS8qIFdoaXRlSEVBVCBzcGVjaWZpYyBjb21tYW5kcyAqLworCitzdGF0aWMgaW50IGRlYnVnOworCisjaWZuZGVmIENNU1BBUgorI2RlZmluZSBDTVNQQVIgMAorI2VuZGlmCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBTdHVhcnQgTWFjRG9uYWxkIDxzdHVhcnRtQGNvbm5lY3R0ZWNoLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQ29ubmVjdFRlY2ggV2hpdGVIRUFUIGRyaXZlciIKKworI2RlZmluZSBDT05ORUNUX1RFQ0hfVkVORE9SX0lECQkweDA3MTAKKyNkZWZpbmUgQ09OTkVDVF9URUNIX0ZBS0VfV0hJVEVfSEVBVF9JRAkweDAwMDEKKyNkZWZpbmUgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQJMHg4MDAxCisKKy8qCisgICBJRCB0YWJsZXMgZm9yIHdoaXRlaGVhdCBhcmUgdW51c3VhbCwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpZmZlcmVudAorICAgdGhpbmdzIGZvciBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGRldmljZS4gIEV2ZW50dWFsbHksIHRoaXMKKyAgIHdpbGwgYmUgZG9hYmxlIGZyb20gYSBzaW5nbGUgdGFibGUuICBCdXQsIGZvciBub3csIHdlIGRlZmluZSB0d28KKyAgIHNlcGFyYXRlIElEIHRhYmxlcywgYW5kIHRoZW4gYSB0aGlyZCB0YWJsZSB0aGF0IGNvbWJpbmVzIHRoZW0KKyAgIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGV4cG9ydGluZyB0aGUgYXV0b2xvYWRpbmcgaW5mb3JtYXRpb24uCisqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9wcmVyZW51bWVyYXRpb24gW10gPSB7CisJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9GQUtFX1dISVRFX0hFQVRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQpIH0sCisJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9GQUtFX1dISVRFX0hFQVRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgd2hpdGVoZWF0X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkid2hpdGVoZWF0IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIENvbm5lY3QgVGVjaCBXaGl0ZUhFQVQgcHJlcmVudW1lcmF0aW9uIGRldmljZSAqLworc3RhdGljIGludCAgd2hpdGVoZWF0X2Zpcm13YXJlX2Rvd25sb2FkCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCAgd2hpdGVoZWF0X2Zpcm13YXJlX2F0dGFjaAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBDb25uZWN0IFRlY2ggV2hpdGVIRUFUIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9hdHRhY2gJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgd2hpdGVoZWF0X29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfd3JpdGVfcm9vbQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfaW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zZXRfdGVybWlvcwkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAgd2hpdGVoZWF0X3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgd2hpdGVoZWF0X3Rpb2Ntc2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdW50aHJvdHRsZQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfcmVhZF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgd2hpdGVoZWF0X2Zha2VfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkNvbm5lY3QgVGVjaCAtIFdoaXRlSEVBVCAtIChwcmVyZW51bWVyYXRpb24pIiwKKwkuc2hvcnRfbmFtZSA9CQkid2hpdGVoZWF0bm9maXJtIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfcHJlcmVudW1lcmF0aW9uLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorCS5wcm9iZSA9CQl3aGl0ZWhlYXRfZmlybXdhcmVfZG93bmxvYWQsCisJLmF0dGFjaCA9CQl3aGl0ZWhlYXRfZmlybXdhcmVfYXR0YWNoLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHdoaXRlaGVhdF9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiQ29ubmVjdCBUZWNoIC0gV2hpdGVIRUFUIiwKKwkuc2hvcnRfbmFtZSA9CQkid2hpdGVoZWF0IiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfc3RkLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQk0LAorCS5hdHRhY2ggPQkJd2hpdGVoZWF0X2F0dGFjaCwKKwkuc2h1dGRvd24gPQkJd2hpdGVoZWF0X3NodXRkb3duLAorCS5vcGVuID0JCQl3aGl0ZWhlYXRfb3BlbiwKKwkuY2xvc2UgPQkJd2hpdGVoZWF0X2Nsb3NlLAorCS53cml0ZSA9CQl3aGl0ZWhlYXRfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJd2hpdGVoZWF0X3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCXdoaXRlaGVhdF9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJd2hpdGVoZWF0X3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJd2hpdGVoZWF0X2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkJd2hpdGVoZWF0X3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQl3aGl0ZWhlYXRfdGlvY21zZXQsCisJLmNoYXJzX2luX2J1ZmZlciA9CXdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCXdoaXRlaGVhdF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQl3aGl0ZWhlYXRfdW50aHJvdHRsZSwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jd2hpdGVoZWF0X3JlYWRfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQl3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2ssCit9OworCisKK3N0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlIHsKKwlzcGlubG9ja190CQlsb2NrOworCV9fdTgJCQlwb3J0X3J1bm5pbmc7CisJX191OAkJCWNvbW1hbmRfZmluaXNoZWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jb21tYW5kOwkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgYSBjb21tYW5kIHRvIGZpbmlzaCAqLworCV9fdTgJCQlyZXN1bHRfYnVmZmVyWzY0XTsKK307CisKKworI2RlZmluZSBUSFJPVFRMRUQJCTB4MDEKKyNkZWZpbmUgQUNUVUFMTFlfVEhST1RUTEVECTB4MDIKKworc3RhdGljIGludCB1cmJfcG9vbF9zaXplID0gODsKKworc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCB1cmIJCSp1cmI7Cit9OworCitzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJX191OAkJCWZsYWdzOworCV9fdTgJCQltY3I7CisJc3RydWN0IGxpc3RfaGVhZAlyeF91cmJzX2ZyZWU7CisJc3RydWN0IGxpc3RfaGVhZAlyeF91cmJzX3N1Ym1pdHRlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJ4X3VyYl9xOworCXN0cnVjdCB3b3JrX3N0cnVjdAlyeF93b3JrOworCXN0cnVjdCBsaXN0X2hlYWQJdHhfdXJic19mcmVlOworCXN0cnVjdCBsaXN0X2hlYWQJdHhfdXJic19zdWJtaXR0ZWQ7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgc3RhcnRfY29tbWFuZF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgc3RvcF9jb21tYW5kX3BvcnQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfcmVhZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIGludCBzdGFydF9wb3J0X3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqdXJiX3RvX3dyYXAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2ZpcnN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RhdGljIHZvaWQgcnhfZGF0YV9zb2Z0aW50KHZvaWQgKnByaXZhdGUpOworCitzdGF0aWMgaW50IGZpcm1fc2VuZF9jb21tYW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwgX191OCAqZGF0YSwgX191OCBkYXRhc2l6ZSk7CitzdGF0aWMgaW50IGZpcm1fb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBmaXJtX3NldF9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CitzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKTsKK3N0YXRpYyBpbnQgZmlybV9zZXRfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CitzdGF0aWMgaW50IGZpcm1fcHVyZ2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCByeHR4KTsKK3N0YXRpYyBpbnQgZmlybV9nZXRfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9yZXBvcnRfdHhfZG9uZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKworCisjZGVmaW5lIENPTU1BTkRfUE9SVAkJNAorI2RlZmluZSBDT01NQU5EX1RJTUVPVVQJCSgyKkhaKQkvKiAyIHNlY29uZCB0aW1lb3V0IGZvciBhIGNvbW1hbmQgKi8KKyNkZWZpbmUJQ09NTUFORF9USU1FT1VUX01TCTIwMDAKKyNkZWZpbmUgQ0xPU0lOR19ERUxBWQkJKDMwICogSFopCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IHByZXJlbnVtZXJhdGlvbiBkcml2ZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHN0ZXBzIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSB0byB0aGUgV2hpdGVIRUFUIGRldmljZToKKyAtIGhvbGQgdGhlIHJlc2V0IChieSB3cml0aW5nIHRvIHRoZSByZXNldCBiaXQgb2YgdGhlIENQVUNTIHJlZ2lzdGVyKQorIC0gZG93bmxvYWQgdGhlIFZFTkRfQVguSEVYIGZpbGUgdG8gdGhlIGNoaXAgdXNpbmcgVkVORE9SX1JFUVVFU1QtQU5DSE9SX0xPQUQKKyAtIHJlbGVhc2UgdGhlIHJlc2V0IChieSB3cml0aW5nIHRvIHRoZSBDUFVDUyByZWdpc3RlcikKKyAtIGRvd25sb2FkIHRoZSBXSC5IRVggZmlsZSBmb3IgYWxsIGFkZHJlc3NlcyBncmVhdGVyIHRoYW4gMHgxYjNmIHVzaW5nCisgICBWRU5ET1JfUkVRVUVTVC1BTkNIT1JfRVhURVJOQUxfUkFNX0xPQUQKKyAtIGhvbGQgdGhlIHJlc2V0CisgLSBkb3dubG9hZCB0aGUgV0guSEVYIGZpbGUgZm9yIGFsbCBhZGRyZXNzZXMgbGVzcyB0aGFuIDB4MWI0MCB1c2luZworICAgVkVORE9SX1JFUVVFU1RfQU5DSE9SX0xPQUQKKyAtIHJlbGVhc2UgdGhlIHJlc2V0CisgLSBkZXZpY2UgcmVudW1lcmF0ZWQgaXRzZWxmIGFuZCBjb21lcyB1cCBhcyBuZXcgZGV2aWNlIGlkIHdpdGggYWxsCisgICBmaXJtd2FyZSBkb3dubG9hZCBjb21wbGV0ZWQuCisqLworc3RhdGljIGludCB3aGl0ZWhlYXRfZmlybXdhcmVfZG93bmxvYWQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmVzcG9uc2U7CisJY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkICpyZWNvcmQ7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQgKHNlcmlhbCwgMSk7CisKKwlyZWNvcmQgPSAmd2hpdGVoZWF0X2xvYWRlclswXTsKKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzICE9IDB4ZmZmZikgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5IChzZXJpYWwsIHJlY29yZC0+YWRkcmVzcywgCisJCQkJKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplLCAweGEwKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgbG9hZGVyICglZCAlMDRYICVwICVkKSIsCisJCQkJX19GVU5DVElPTl9fLCByZXNwb25zZSwgcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCSsrcmVjb3JkOworCX0KKworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDApOworCisJcmVjb3JkID0gJndoaXRlaGVhdF9maXJtd2FyZVswXTsKKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzIDwgMHgxYjQwKSB7CisJCSsrcmVjb3JkOworCX0KKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzICE9IDB4ZmZmZikgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5IChzZXJpYWwsIHJlY29yZC0+YWRkcmVzcywgCisJCQkJKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplLCAweGEzKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgZmlyc3QgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3BvbnNlLCByZWNvcmQtPmFkZHJlc3MsIHJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJKytyZWNvcmQ7CisJfQorCQorCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDEpOworCisJcmVjb3JkID0gJndoaXRlaGVhdF9maXJtd2FyZVswXTsKKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzIDwgMHgxYjQwKSB7CisJCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkgKHNlcmlhbCwgcmVjb3JkLT5hZGRyZXNzLCAKKwkJCQkodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUsIDB4YTApOworCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBzZWNvbmQgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3BvbnNlLCByZWNvcmQtPmFkZHJlc3MsIHJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJKytyZWNvcmQ7CisJfQorCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQgKHNlcmlhbCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9maXJtd2FyZV9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJLyogV2Ugd2FudCB0aGlzIGRldmljZSB0byBmYWlsIHRvIGhhdmUgYSBkcml2ZXIgYXNzaWduZWQgdG8gaXQgKi8KKwlyZXR1cm4gMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbm5lY3QgVGVjaCdzIFdoaXRlIEhlYXQgc2VyaWFsIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgd2hpdGVoZWF0X2F0dGFjaCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbzsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8gKmh3X2luZm87CisJaW50IHBpcGU7CisJaW50IHJldDsKKwlpbnQgYWxlbjsKKwlfX3U4ICpjb21tYW5kOworCV9fdTggKnJlc3VsdDsKKwlpbnQgaTsKKwlpbnQgajsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGJ1Zl9zaXplOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCisJY29tbWFuZF9wb3J0ID0gc2VyaWFsLT5wb3J0W0NPTU1BTkRfUE9SVF07CisKKwlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwgY29tbWFuZF9wb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCWNvbW1hbmQgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghY29tbWFuZCkKKwkJZ290byBub19jb21tYW5kX2J1ZmZlcjsKKwljb21tYW5kWzBdID0gV0hJVEVIRUFUX0dFVF9IV19JTkZPOworCWNvbW1hbmRbMV0gPSAwOworCQorCXJlc3VsdCA9IGttYWxsb2Moc2l6ZW9mKCpod19pbmZvKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KQorCQlnb3RvIG5vX3Jlc3VsdF9idWZmZXI7CisJLyoKKwkgKiBXaGVuIHRoZSBtb2R1bGUgaXMgcmVsb2FkZWQgdGhlIGZpcm13YXJlIGlzIHN0aWxsIHRoZXJlIGFuZAorCSAqIHRoZSBlbmRwb2ludHMgYXJlIHN0aWxsIGluIHRoZSB1c2IgY29yZSB1bmNoYW5nZWQuIFRoaXMgaXMgdGhlCisgICAgICAgICAqIHVubGlua2luZyBidWcgaW4gZGlzZ3Vpc2UuIFNhbWUgZm9yIHRoZSBjYWxsIGJlbG93LgorICAgICAgICAgKi8KKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcGlwZSk7CisJcmV0ID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwgcGlwZSwgY29tbWFuZCwgMiwgJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQllcnIoIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmV0KTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9IGVsc2UgaWYgKGFsZW4gIT0gc2l6ZW9mKGNvbW1hbmQpKSB7CisJCWVycigiJXM6IFNlbmQgY29tbWFuZCBpbmNvbXBsZXRlIFslZF0iLCBzZXJpYWwtPnR5cGUtPm5hbWUsIGFsZW4pOworCQlnb3RvIG5vX2Zpcm13YXJlOworCX0KKworCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LCBjb21tYW5kX3BvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwkvKiBTZWUgdGhlIGNvbW1lbnQgb24gdGhlIHVzYl9jbGVhcl9oYWx0KCkgYWJvdmUgKi8KKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcGlwZSk7CisJcmV0ID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwgcGlwZSwgcmVzdWx0LCBzaXplb2YoKmh3X2luZm8pICsgMSwgJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQllcnIoIiVzOiBDb3VsZG4ndCBnZXQgcmVzdWx0cyBbJWRdIiwgc2VyaWFsLT50eXBlLT5uYW1lLCByZXQpOworCQlnb3RvIG5vX2Zpcm13YXJlOworCX0gZWxzZSBpZiAoYWxlbiAhPSBzaXplb2YocmVzdWx0KSkgeworCQllcnIoIiVzOiBHZXQgcmVzdWx0cyBpbmNvbXBsZXRlIFslZF0iLCBzZXJpYWwtPnR5cGUtPm5hbWUsIGFsZW4pOworCQlnb3RvIG5vX2Zpcm13YXJlOworCX0gZWxzZSBpZiAocmVzdWx0WzBdICE9IGNvbW1hbmRbMF0pIHsKKwkJZXJyKCIlczogQ29tbWFuZCBmYWlsZWQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmVzdWx0WzBdKTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9CisKKwlod19pbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfaHdfaW5mbyAqKSZyZXN1bHRbMV07CisKKwlpbmZvKCIlczogRHJpdmVyICVzOiBGaXJtd2FyZSB2JWQuJTAyZCIsIHNlcmlhbC0+dHlwZS0+bmFtZSwKKwkgICAgIERSSVZFUl9WRVJTSU9OLCBod19pbmZvLT5zd19tYWpvcl9yZXYsIGh3X2luZm8tPnN3X21pbm9yX3Jldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCisJCWluZm8gPSAoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpbmZvID09IE5VTEwpIHsKKwkJCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwkJCWdvdG8gbm9fcHJpdmF0ZTsKKwkJfQorCisJCXNwaW5fbG9ja19pbml0KCZpbmZvLT5sb2NrKTsKKwkJaW5mby0+ZmxhZ3MgPSAwOworCQlpbmZvLT5tY3IgPSAwOworCQlJTklUX1dPUksoJmluZm8tPnJ4X3dvcmssIHJ4X2RhdGFfc29mdGludCwgcG9ydCk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5yeF91cmJfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT50eF91cmJzX2ZyZWUpOworCQlJTklUX0xJU1RfSEVBRCgmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpOworCisJCWZvciAoaiA9IDA7IGogPCB1cmJfcG9vbF9zaXplOyBqKyspIHsKKwkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYikgeworCQkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJCWdvdG8gbm9fcnhfdXJiOworCQkJfQorCQkJYnVmX3NpemUgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyIik7CisJCQkJZ290byBub19yeF9idWY7CisJCQl9CisJCQl3cmFwID0ga21hbGxvYyhzaXplb2YoKndyYXApLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghd3JhcCkgeworCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXIiKTsKKwkJCQlnb3RvIG5vX3J4X3dyYXA7CisJCQl9CisJCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWZfc2l6ZSwKKwkJCQkJd2hpdGVoZWF0X3JlYWRfY2FsbGJhY2ssIHBvcnQpOworCQkJd3JhcC0+dXJiID0gdXJiOworCQkJbGlzdF9hZGQoJndyYXAtPmxpc3QsICZpbmZvLT5yeF91cmJzX2ZyZWUpOworCisJCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKCF1cmIpIHsKKwkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlnb3RvIG5vX3R4X3VyYjsKKwkJCX0KKwkJCWJ1Zl9zaXplID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXIiKTsKKwkJCQlnb3RvIG5vX3R4X2J1ZjsKKwkJCX0KKwkJCXdyYXAgPSBrbWFsbG9jKHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCF3cmFwKSB7CisJCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlciIpOworCQkJCWdvdG8gbm9fdHhfd3JhcDsKKwkJCX0KKwkJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWZfc2l6ZSwKKwkJCQkJd2hpdGVoZWF0X3dyaXRlX2NhbGxiYWNrLCBwb3J0KTsKKwkJCXdyYXAtPnVyYiA9IHVyYjsKKwkJCWxpc3RfYWRkKCZ3cmFwLT5saXN0LCAmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJfQorCisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBpbmZvKTsKKwl9CisKKwljb21tYW5kX2luZm8gPSAoc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmIChjb21tYW5kX2luZm8gPT0gTlVMTCkgeworCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCWdvdG8gbm9fY29tbWFuZF9wcml2YXRlOworCX0KKworCXNwaW5fbG9ja19pbml0KCZjb21tYW5kX2luZm8tPmxvY2spOworCWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb21tYW5kX2luZm8tPndhaXRfY29tbWFuZCk7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCwgY29tbWFuZF9pbmZvKTsKKwljb21tYW5kX3BvcnQtPndyaXRlX3VyYi0+Y29tcGxldGUgPSBjb21tYW5kX3BvcnRfd3JpdGVfY2FsbGJhY2s7CisJY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+Y29tcGxldGUgPSBjb21tYW5kX3BvcnRfcmVhZF9jYWxsYmFjazsKKwlrZnJlZShyZXN1bHQpOworCWtmcmVlKGNvbW1hbmQpOworCisJcmV0dXJuIDA7CisKK25vX2Zpcm13YXJlOgorCS8qIEZpcm13YXJlIGxpa2VseSBub3QgcnVubmluZyAqLworCWVycigiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwllcnIoIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwllcnIoIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwlyZXR1cm4gLUVOT0RFVjsKKworbm9fY29tbWFuZF9wcml2YXRlOgorCWZvciAoaSA9IHNlcmlhbC0+bnVtX3BvcnRzIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJZm9yIChqID0gdXJiX3Bvb2xfc2l6ZSAtIDE7IGogPj0gMDsgai0tKSB7CisJCQl0bXAgPSBsaXN0X2ZpcnN0KCZpbmZvLT50eF91cmJzX2ZyZWUpOworCQkJbGlzdF9kZWwodG1wKTsKKwkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQl1cmIgPSB3cmFwLT51cmI7CisJCQlrZnJlZSh3cmFwKTsKK25vX3R4X3dyYXA6CisJCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7Citub190eF9idWY6CisJCQl1c2JfZnJlZV91cmIodXJiKTsKK25vX3R4X3VyYjoKKwkJCXRtcCA9IGxpc3RfZmlyc3QoJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCQlsaXN0X2RlbCh0bXApOworCQkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJCXVyYiA9IHdyYXAtPnVyYjsKKwkJCWtmcmVlKHdyYXApOworbm9fcnhfd3JhcDoKKwkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKK25vX3J4X2J1ZjoKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworbm9fcnhfdXJiOgorCQkJOworCQl9CisJCWtmcmVlKGluZm8pOworbm9fcHJpdmF0ZToKKwkJOworCX0KKwlrZnJlZShyZXN1bHQpOworbm9fcmVzdWx0X2J1ZmZlcjoKKwlrZnJlZShjb21tYW5kKTsKK25vX2NvbW1hbmRfYnVmZmVyOgorCXJldHVybiAtRU5PTUVNOworfQorCisKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm87CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDI7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZyZWUgdXAgb3VyIHByaXZhdGUgZGF0YSBmb3Igb3VyIGNvbW1hbmQgcG9ydCAqLworCWNvbW1hbmRfcG9ydCA9IHNlcmlhbC0+cG9ydFtDT01NQU5EX1BPUlRdOworCWtmcmVlICh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19mcmVlKSB7CisJCQlsaXN0X2RlbCh0bXApOworCQkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJCXVyYiA9IHdyYXAtPnVyYjsKKwkJCWtmcmVlKHdyYXApOworCQkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnR4X3VyYnNfZnJlZSkgeworCQkJbGlzdF9kZWwodG1wKTsKKwkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQl1cmIgPSB3cmFwLT51cmI7CisJCQlrZnJlZSh3cmFwKTsKKwkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQl9CisJCWtmcmVlKGluZm8pOworCX0KKworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQJCXJldHZhbCA9IDA7CisJc3RydWN0IHRlcm1pb3MJb2xkX3Rlcm07CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXJldHZhbCA9IHN0YXJ0X2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXhpdDsKKworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogc2VuZCBhbiBvcGVuIHBvcnQgY29tbWFuZCAqLworCXJldHZhbCA9IGZpcm1fb3Blbihwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBmaXJtX3B1cmdlKHBvcnQsIFdISVRFSEVBVF9QVVJHRV9SWCB8IFdISVRFSEVBVF9QVVJHRV9UWCk7CisJaWYgKHJldHZhbCkgeworCQlmaXJtX2Nsb3NlKHBvcnQpOworCQlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJb2xkX3Rlcm0uY19jZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJb2xkX3Rlcm0uY19pZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJd2hpdGVoZWF0X3NldF90ZXJtaW9zKHBvcnQsICZvbGRfdGVybSk7CisKKwkvKiBXb3JrIGFyb3VuZCBIQ0QgYnVncyAqLworCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5yZWFkX3VyYi0+cGlwZSk7CisJdXNiX2NsZWFyX2hhbHQocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXJldHZhbCA9IHN0YXJ0X3BvcnRfcmVhZChwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCWZpcm1fY2xvc2UocG9ydCk7CisJCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKK2V4aXQ6CisJZGJnKCIlcyAtIGV4aXQsIHJldHZhbCA9ICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCS8qIGZpbHAgaXMgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIHVzYl9zZXJpYWxfZGlzY29ubmVjdCAqLworCWlmIChmaWxwICYmICh0dHlfaHVuZ191cF9wKGZpbHApKSkgeworCQlyZXR1cm47CisJfQorCisJcG9ydC0+dHR5LT5jbG9zaW5nID0gMTsKKworLyoKKyAqIE5vdCBjdXJyZW50bHkgaW4gdXNlOyB0dHlfd2FpdF91bnRpbF9zZW50KCkgY2FsbHMKKyAqIHNlcmlhbF9jaGFyc19pbl9idWZmZXIoKSB3aGljaCBkZWFkbG9ja3Mgb24gdGhlIHNlY29uZCBzZW1hcGhvcmUKKyAqIGFjcXVpc2l0aW9uLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBhdCBzb21lIHBvaW50LiBHcmVnJ3MgYmVlbgorICogbm90aWZpZWQuCisJaWYgKChmaWxwLT5mX2ZsYWdzICYgKE9fTkRFTEFZIHwgT19OT05CTE9DSykpID09IDApIHsKKwkJdHR5X3dhaXRfdW50aWxfc2VudChwb3J0LT50dHksIENMT1NJTkdfREVMQVkpOworCX0KKyovCisKKwlpZiAocG9ydC0+dHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKKwkJcG9ydC0+dHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcihwb3J0LT50dHkpOworCXR0eV9sZGlzY19mbHVzaChwb3J0LT50dHkpOworCisJZmlybV9yZXBvcnRfdHhfZG9uZShwb3J0KTsKKworCWZpcm1fY2xvc2UocG9ydCk7CisKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkcyBhbmQgd3JpdGVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpIHsKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJdXJiID0gd3JhcC0+dXJiOworCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJbGlzdF9kZWwodG1wKTsKKwkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwl9CisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYl9xKSB7CisJCWxpc3RfZGVsKHRtcCk7CisJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT50eF91cmJzX3N1Ym1pdHRlZCkgeworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQl1cmIgPSB3cmFwLT51cmI7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQlsaXN0X2RlbCh0bXApOworCQlsaXN0X2FkZCh0bXAsICZpbmZvLT50eF91cmJzX2ZyZWUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCisJcG9ydC0+dHR5LT5jbG9zaW5nID0gMDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcmVzdWx0OworCWludCBieXRlczsKKwlpbnQgc2VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKworCXdoaWxlIChjb3VudCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQlpZiAobGlzdF9lbXB0eSgmaW5mby0+dHhfdXJic19mcmVlKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKwkJdG1wID0gbGlzdF9maXJzdCgmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJbGlzdF9kZWwodG1wKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCXVyYiA9IHdyYXAtPnVyYjsKKwkJYnl0ZXMgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKwkJbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmICsgc2VudCwgYnl0ZXMpOworCisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBieXRlcywgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCXNlbnQgPSByZXN1bHQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc2VudCArPSBieXRlczsKKwkJCWNvdW50IC09IGJ5dGVzOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJfQorCX0KKworCXJldHVybiBzZW50OworfQorCisKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCByb29tID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmluZm8tPnR4X3VyYnNfZnJlZSkKKwkJcm9vbSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlyb29tICo9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIChyb29tKTsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBtb2RlbV9zaWduYWxzID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJZmlybV9nZXRfZHRyX3J0cyhwb3J0KTsKKwlpZiAoaW5mby0+bWNyICYgVUFSVF9NQ1JfRFRSKQorCQltb2RlbV9zaWduYWxzIHw9IFRJT0NNX0RUUjsKKwlpZiAoaW5mby0+bWNyICYgVUFSVF9NQ1JfUlRTKQorCQltb2RlbV9zaWduYWxzIHw9IFRJT0NNX1JUUzsKKworCXJldHVybiBtb2RlbV9zaWduYWxzOworfQorCisKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCWluZm8tPm1jciB8PSBVQVJUX01DUl9EVFI7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCWluZm8tPm1jciAmPSB+VUFSVF9NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJaW5mby0+bWNyICY9IH5VQVJUX01DUl9EVFI7CisKKwlmaXJtX3NldF9kdHIocG9ydCwgaW5mby0+bWNyICYgVUFSVF9NQ1JfRFRSKTsKKwlmaXJtX3NldF9ydHMocG9ydCwgaW5mby0+bWNyICYgVUFSVF9NQ1JfUlRTKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJzdHJ1Y3Q7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQltZW1zZXQoJnNlcnN0cnVjdCwgMCwgc2l6ZW9mKHNlcnN0cnVjdCkpOworCQkJc2Vyc3RydWN0LnR5cGUgPSBQT1JUXzE2NjU0OworCQkJc2Vyc3RydWN0LmxpbmUgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCQkJc2Vyc3RydWN0LnBvcnQgPSBwb3J0LT5udW1iZXI7CisJCQlzZXJzdHJ1Y3QuZmxhZ3MgPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwkJCXNlcnN0cnVjdC54bWl0X2ZpZm9fc2l6ZSA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CisJCQlzZXJzdHJ1Y3QuY3VzdG9tX2Rpdmlzb3IgPSAwOworCQkJc2Vyc3RydWN0LmJhdWRfYmFzZSA9IDQ2MDgwMDsKKwkJCXNlcnN0cnVjdC5jbG9zZV9kZWxheSA9IENMT1NJTkdfREVMQVk7CisJCQlzZXJzdHJ1Y3QuY2xvc2luZ193YWl0ID0gQ0xPU0lOR19ERUxBWTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnNlcnN0cnVjdCwgc2l6ZW9mKHNlcnN0cnVjdCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlicmVhazsKKworCQljYXNlIFRJT0NTU0VSSUFMOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzZXJzdHJ1Y3QsIHVzZXJfYXJnLCBzaXplb2Yoc2Vyc3RydWN0KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCS8qCisJCQkgKiBGb3Igbm93IHRoaXMgaXMgaWdub3JlZC4gZGlwIHNldHMgdGhlIEFTWU5DX1tWXUhJIGZsYWdzCisJCQkgKiBidXQgdGhpcyBpc24ndCB1c2VkIGJ5IHVzIGF0IGFsbC4gTWF5YmUgc29tZW9uZSBzb21ld2hlcmUKKwkJCSAqIHdpbGwgbmVlZCB0aGUgY3VzdG9tX2Rpdmlzb3Igc2V0dGluZy4KKwkJCSAqLworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlkYmcoIiVzIC1wb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKwkKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJICAgIChwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJZmlybV9zZXR1cF9wb3J0KHBvcnQpOworCitleGl0OgorCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkgeworCWZpcm1fc2V0X2JyZWFrKHBvcnQsIGJyZWFrX3N0YXRlKTsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJaW50IGNoYXJzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2godG1wLCAmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpIHsKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJY2hhcnMgKz0gd3JhcC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlkYmcgKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKwlyZXR1cm4gKGNoYXJzKTsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJaW5mby0+ZmxhZ3MgfD0gVEhST1RUTEVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWFjdHVhbGx5X3Rocm90dGxlZCA9IGluZm8tPmZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOworCWluZm8tPmZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKQorCQlyeF9kYXRhX3NvZnRpbnQocG9ydCk7CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IGNhbGxiYWNrIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfd3JpdGVfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnICgibm9uemVybyB1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KK30KKworCitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfcmVhZF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSAqY29tbWFuZF9pbmZvOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmY29tbWFuZF9wb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCWNvbW1hbmRfaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShjb21tYW5kX3BvcnQpOworCWlmICghY29tbWFuZF9pbmZvKSB7CisJCWRiZyAoIiVzIC0gY29tbWFuZF9pbmZvIGlzIE5VTEwsIGV4aXRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfQ01EX0NPTVBMRVRFKSB7CisJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfQ09NUExFVEU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQpOworCX0gZWxzZSBpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfQ01EX0ZBSUxVUkUpIHsKKwkJY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkID0gV0hJVEVIRUFUX0NNRF9GQUlMVVJFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1hbmRfaW5mby0+d2FpdF9jb21tYW5kKTsKKwl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gV0hJVEVIRUFUX0VWRU5UKSB7CisJCS8qIFRoZXNlIGFyZSB1bnNvbGljaXRlZCByZXBvcnRzIGZyb20gdGhlIGZpcm13YXJlLCBoZW5jZSBubyB3YWl0aW5nIGNvbW1hbmQgdG8gd2FrZXVwICovCisJCWRiZygiJXMgLSBldmVudCByZWNlaXZlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIGlmIChkYXRhWzBdID09IFdISVRFSEVBVF9HRVRfRFRSX1JUUykgeworCQltZW1jcHkoY29tbWFuZF9pbmZvLT5yZXN1bHRfYnVmZmVyLCAmZGF0YVsxXSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSk7CisJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfQ09NUExFVEU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQpOworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBiYWQgcmVwbHkgZnJvbSBmaXJtd2FyZSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCQorCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAqLworCWNvbW1hbmRfcG9ydC0+cmVhZF91cmItPmRldiA9IGNvbW1hbmRfcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJaWYgKHJlc3VsdCkKKwkJZGJnKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworfQorCisKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwl3cmFwID0gdXJiX3RvX3dyYXAodXJiLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpOworCWlmICghd3JhcCkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCWVycigiJXMgLSBOb3QgbXkgdXJiISIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJbGlzdF9kZWwoJndyYXAtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlzcGluX2xvY2soJmluZm8tPmxvY2spOworCQlsaXN0X2FkZCgmd3JhcC0+bGlzdCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ3cmFwLT5saXN0LCAmaW5mby0+cnhfdXJiX3EpOworCWlmIChpbmZvLT5mbGFncyAmIFRIUk9UVExFRCkgeworCQlpbmZvLT5mbGFncyB8PSBBQ1RVQUxMWV9USFJPVFRMRUQ7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZpbmZvLT5yeF93b3JrKTsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJd3JhcCA9IHVyYl90b193cmFwKHVyYiwgJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKTsKKwlpZiAoIXdyYXApIHsKKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWxpc3RfZGVsKCZ3cmFwLT5saXN0KTsKKwlsaXN0X2FkZCgmd3JhcC0+bGlzdCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQoKHZvaWQgKilwb3J0KTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBmaXJtd2FyZSBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZmlybV9zZW5kX2NvbW1hbmQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwgX191OCAqZGF0YSwgX191OCBkYXRhc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm87CisJX191OCAqdHJhbnNmZXJfYnVmZmVyOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gY29tbWFuZCAlZCIsIF9fRlVOQ1RJT05fXywgY29tbWFuZCk7CisKKwljb21tYW5kX3BvcnQgPSBwb3J0LT5zZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkID0gRkFMU0U7CisJCisJdHJhbnNmZXJfYnVmZmVyID0gKF9fdTggKiljb21tYW5kX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXRyYW5zZmVyX2J1ZmZlclswXSA9IGNvbW1hbmQ7CisJbWVtY3B5ICgmdHJhbnNmZXJfYnVmZmVyWzFdLCBkYXRhLCBkYXRhc2l6ZSk7CisJY29tbWFuZF9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBkYXRhc2l6ZSArIDE7CisJY29tbWFuZF9wb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChjb21tYW5kX3BvcnQtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlkYmcoIiVzIC0gc3VibWl0IHVyYiBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCisJLyogd2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChjb21tYW5kX2luZm8tPndhaXRfY29tbWFuZCwgCisJCShjb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgIT0gRkFMU0UpLCBDT01NQU5EX1RJTUVPVVQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCisJaWYgKGNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9PSBGQUxTRSkgeworCQlkYmcoIiVzIC0gY29tbWFuZCB0aW1lZCBvdXQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVUSU1FRE9VVDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChjb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPT0gV0hJVEVIRUFUX0NNRF9GQUlMVVJFKSB7CisJCWRiZygiJXMgLSBjb21tYW5kIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9PSBXSElURUhFQVRfQ01EX0NPTVBMRVRFKSB7CisJCWRiZygiJXMgLSBjb21tYW5kIGNvbXBsZXRlZC4iLCBfX0ZVTkNUSU9OX18pOworCQlzd2l0Y2ggKGNvbW1hbmQpIHsKKwkJCWNhc2UgV0hJVEVIRUFUX0dFVF9EVFJfUlRTOgorCQkJCWluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCQkJbWVtY3B5KCZpbmZvLT5tY3IsIGNvbW1hbmRfaW5mby0+cmVzdWx0X2J1ZmZlciwgc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfZHJfaW5mbykpOworCQkJCWJyZWFrOworCQl9CisJfQorCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworCXN0cnVjdCB3aGl0ZWhlYXRfc2ltcGxlIG9wZW5fY29tbWFuZDsKKworCW9wZW5fY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9PUEVOLCAoX191OCAqKSZvcGVuX2NvbW1hbmQsIHNpemVvZihvcGVuX2NvbW1hbmQpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworCXN0cnVjdCB3aGl0ZWhlYXRfc2ltcGxlIGNsb3NlX2NvbW1hbmQ7CisKKwljbG9zZV9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX0NMT1NFLCAoX191OCAqKSZjbG9zZV9jb21tYW5kLCBzaXplb2YoY2xvc2VfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3BvcnRfc2V0dGluZ3MgcG9ydF9zZXR0aW5nczsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlwb3J0X3NldHRpbmdzLnBvcnQgPSBwb3J0LT5udW1iZXIgKyAxOworCisJLyogZ2V0IHRoZSBieXRlIHNpemUgKi8KKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDU7ICAgYnJlYWs7CisJCWNhc2UgQ1M2Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA2OyAgIGJyZWFrOworCQljYXNlIENTNzoJcG9ydF9zZXR0aW5ncy5iaXRzID0gNzsgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDg7ICAgYnJlYWs7CisJfQorCWRiZygiJXMgLSBkYXRhIGJpdHMgPSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy5iaXRzKTsKKwkKKwkvKiBkZXRlcm1pbmUgdGhlIHBhcml0eSAqLworCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJaWYgKGNmbGFnICYgQ01TUEFSKQorCQkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9NQVJLOworCQkJZWxzZQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9TUEFDRTsKKwkJZWxzZQorCQkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9PREQ7CisJCQllbHNlCisJCQkJcG9ydF9zZXR0aW5ncy5wYXJpdHkgPSBXSElURUhFQVRfUEFSX0VWRU47CisJZWxzZQorCQlwb3J0X3NldHRpbmdzLnBhcml0eSA9IFdISVRFSEVBVF9QQVJfTk9ORTsKKwlkYmcoIiVzIC0gcGFyaXR5ID0gJWMiLCBfX0ZVTkNUSU9OX18sIHBvcnRfc2V0dGluZ3MucGFyaXR5KTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIHN0b3AgYml0cyByZXF1ZXN0ZWQgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpCisJCXBvcnRfc2V0dGluZ3Muc3RvcCA9IDI7CisJZWxzZQorCQlwb3J0X3NldHRpbmdzLnN0b3AgPSAxOworCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy5zdG9wKTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCXBvcnRfc2V0dGluZ3MuaGZsb3cgPSAoV0hJVEVIRUFUX0hGTE9XX0NUUyB8IFdISVRFSEVBVF9IRkxPV19SVFMpOworCWVsc2UKKwkJcG9ydF9zZXR0aW5ncy5oZmxvdyA9IFdISVRFSEVBVF9IRkxPV19OT05FOworCWRiZygiJXMgLSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgPSAlcyAlcyAlcyAlcyIsIF9fRlVOQ1RJT05fXywKKwkgICAgKHBvcnRfc2V0dGluZ3MuaGZsb3cgJiBXSElURUhFQVRfSEZMT1dfQ1RTKSA/ICJDVFMiIDogIiIsCisJICAgIChwb3J0X3NldHRpbmdzLmhmbG93ICYgV0hJVEVIRUFUX0hGTE9XX1JUUykgPyAiUlRTIiA6ICIiLAorCSAgICAocG9ydF9zZXR0aW5ncy5oZmxvdyAmIFdISVRFSEVBVF9IRkxPV19EU1IpID8gIkRTUiIgOiAiIiwKKwkgICAgKHBvcnRfc2V0dGluZ3MuaGZsb3cgJiBXSElURUhFQVRfSEZMT1dfRFRSKSA/ICJEVFIiIDogIiIpOworCQorCS8qIGRldGVybWluZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAoSV9JWE9GRihwb3J0LT50dHkpKQorCQlwb3J0X3NldHRpbmdzLnNmbG93ID0gV0hJVEVIRUFUX1NGTE9XX1JYVFg7CisJZWxzZQorCQlwb3J0X3NldHRpbmdzLnNmbG93ID0gV0hJVEVIRUFUX1NGTE9XX05PTkU7CisJZGJnKCIlcyAtIHNvZnR3YXJlIGZsb3cgY29udHJvbCA9ICVjIiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLnNmbG93KTsKKwkKKwlwb3J0X3NldHRpbmdzLnhvbiA9IFNUQVJUX0NIQVIocG9ydC0+dHR5KTsKKwlwb3J0X3NldHRpbmdzLnhvZmYgPSBTVE9QX0NIQVIocG9ydC0+dHR5KTsKKwlkYmcoIiVzIC0gWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLnhvbiwgcG9ydF9zZXR0aW5ncy54b2ZmKTsKKworCS8qIGdldCB0aGUgYmF1ZCByYXRlIHdhbnRlZCAqLworCXBvcnRfc2V0dGluZ3MuYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLmJhdWQpOworCisJLyogaGFuZGxlIGFueSBzZXR0aW5ncyB0aGF0IGFyZW4ndCBzcGVjaWZpZWQgaW4gdGhlIHR0eSBzdHJ1Y3R1cmUgKi8KKwlwb3J0X3NldHRpbmdzLmxsb29wID0gMDsKKwkKKwkvKiBub3cgc2VuZCB0aGUgbWVzc2FnZSB0byB0aGUgZGV2aWNlICovCisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRVUF9QT1JULCAoX191OCAqKSZwb3J0X3NldHRpbmdzLCBzaXplb2YocG9ydF9zZXR0aW5ncykpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9zZXRfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NldF9yZGIgcnRzX2NvbW1hbmQ7CisKKwlydHNfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcnRzX2NvbW1hbmQuc3RhdGUgPSBvbm9mZjsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1NFVF9SVFMsIChfX3U4ICopJnJ0c19jb21tYW5kLCBzaXplb2YocnRzX2NvbW1hbmQpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CisJc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIGR0cl9jb21tYW5kOworCisJZHRyX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOworCWR0cl9jb21tYW5kLnN0YXRlID0gb25vZmY7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRfUlRTLCAoX191OCAqKSZkdHJfY29tbWFuZCwgc2l6ZW9mKGR0cl9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX3NldF9icmVhayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CisJc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIGJyZWFrX2NvbW1hbmQ7CisKKwlicmVha19jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlicmVha19jb21tYW5kLnN0YXRlID0gb25vZmY7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRfUlRTLCAoX191OCAqKSZicmVha19jb21tYW5kLCBzaXplb2YoYnJlYWtfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9wdXJnZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IHJ4dHgpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3B1cmdlIHB1cmdlX2NvbW1hbmQ7CisKKwlwdXJnZV9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlwdXJnZV9jb21tYW5kLndoYXQgPSByeHR4OworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfUFVSR0UsIChfX3U4ICopJnB1cmdlX2NvbW1hbmQsIHNpemVvZihwdXJnZV9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX2dldF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBnZXRfZHJfY29tbWFuZDsKKworCWdldF9kcl9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX0dFVF9EVFJfUlRTLCAoX191OCAqKSZnZXRfZHJfY29tbWFuZCwgc2l6ZW9mKGdldF9kcl9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX3JlcG9ydF90eF9kb25lKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBjbG9zZV9jb21tYW5kOworCisJY2xvc2VfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9SRVBPUlRfVFhfRE9ORSwgKF9fdTggKikmY2xvc2VfY29tbWFuZCwgc2l6ZW9mKGNsb3NlX2NvbW1hbmQpKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbm5lY3QgVGVjaCdzIFdoaXRlIEhlYXQgdXRpbGl0eSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc3RhcnRfY29tbWFuZF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OworCXN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICpjb21tYW5kX2luZm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKwkKKwljb21tYW5kX3BvcnQgPSBzZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJaWYgKCFjb21tYW5kX2luZm8tPnBvcnRfcnVubmluZykgeworCQkvKiBXb3JrIGFyb3VuZCBIQ0QgYnVncyAqLworCQl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+cGlwZSk7CisKKwkJY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGNvbW1hbmRfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0dmFsKSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJZ290byBleGl0OworCQl9CisJfQorCWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nKys7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBzdG9wX2NvbW1hbmRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKmNvbW1hbmRfcG9ydDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSAqY29tbWFuZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21tYW5kX3BvcnQgPSBzZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJY29tbWFuZF9pbmZvLT5wb3J0X3J1bm5pbmctLTsKKwlpZiAoIWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nKQorCQl1c2Jfa2lsbF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIGludCBzdGFydF9wb3J0X3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wMjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19mcmVlKSB7CisJCWxpc3RfZGVsKHRtcCk7CisJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCXVyYiA9IHdyYXAtPnVyYjsKKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldHZhbCkgeworCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCkgeworCQkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQkJdXJiID0gd3JhcC0+dXJiOworCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJCWxpc3RfZGVsKHRtcCk7CisJCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfc3VibWl0dGVkKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp1cmJfdG9fd3JhcChzdHJ1Y3QgdXJiKiB1cmIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgaGVhZCkgeworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQlpZiAod3JhcC0+dXJiID09IHVyYikKKwkJCXJldHVybiB3cmFwOworCX0KKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2ZpcnN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhlYWQtPm5leHQ7Cit9CisKKworc3RhdGljIHZvaWQgcnhfZGF0YV9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopcHJpdmF0ZTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAyOworCWludCByZXN1bHQ7CisJaW50IHNlbnQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBUSFJPVFRMRUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYl9xKSB7CisJCWxpc3RfZGVsKHRtcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQl1cmIgPSB3cmFwLT51cmI7CisKKwkJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiBUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50KSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJfcSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQkJc2NoZWR1bGVfd29yaygmaW5mby0+cnhfd29yayk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQltZW1jcHkodHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXR0eS0+ZmxpcC5jb3VudCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlzZW50ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJfQorCisJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJzX2ZyZWUpOworCQkJY29udGludWU7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCWlmIChzZW50KQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBtb2R1bGUgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCB3aGl0ZWhlYXRfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJndoaXRlaGVhdF9mYWtlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfZmFrZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJndoaXRlaGVhdF9kZXZpY2UpOworZmFpbGVkX2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJndoaXRlaGVhdF9mYWtlX2RldmljZSk7CitmYWlsZWRfZmFrZV9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aGl0ZWhlYXRfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJndoaXRlaGVhdF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJndoaXRlaGVhdF9mYWtlX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmd2hpdGVoZWF0X2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQod2hpdGVoZWF0X2luaXQpOworbW9kdWxlX2V4aXQod2hpdGVoZWF0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbSh1cmJfcG9vbF9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1cmJfcG9vbF9zaXplLCAiTnVtYmVyIG9mIHVyYnMgdG8gdXNlIGZvciBidWZmZXJpbmciKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzE0ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5oCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkcml2ZXIKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMgorICogICAgICAgICAgQ29ubmVjdCBUZWNoIEluYy4JCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAKKyAqICAgICAgICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9XSElURUhFQVRfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfV0hJVEVIRUFUX0gKKworCisjZGVmaW5lIEZBTFNFCTAKKyNkZWZpbmUgVFJVRQkxCisKKworLyogV2hpdGVIRUFUIGNvbW1hbmRzICovCisjZGVmaW5lIFdISVRFSEVBVF9PUEVOCQkJMQkvKiBvcGVuIHRoZSBwb3J0ICovCisjZGVmaW5lIFdISVRFSEVBVF9DTE9TRQkJCTIJLyogY2xvc2UgdGhlIHBvcnQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NFVFVQX1BPUlQJCTMJLyogY2hhbmdlIHBvcnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NFVF9SVFMJCTQJLyogdHVybiBSVFMgb24gb3Igb2ZmICovCisjZGVmaW5lIFdISVRFSEVBVF9TRVRfRFRSCQk1CS8qIHR1cm4gRFRSIG9uIG9yIG9mZiAqLworI2RlZmluZSBXSElURUhFQVRfU0VUX0JSRUFLCQk2CS8qIHR1cm4gQlJFQUsgb24gb3Igb2ZmICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QCQkJNwkvKiBkdW1wIG1lbW9yeSAqLworI2RlZmluZSBXSElURUhFQVRfU1RBVFVTCQk4CS8qIGdldCBzdGF0dXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BVUkdFCQkJOQkvKiBjbGVhciB0aGUgVUFSVCBmaWZvcyAqLworI2RlZmluZSBXSElURUhFQVRfR0VUX0RUUl9SVFMJCTEwCS8qIGdldCB0aGUgc3RhdGUgb2YgRFRSIGFuZCBSVFMgZm9yIGEgcG9ydCAqLworI2RlZmluZSBXSElURUhFQVRfR0VUX0hXX0lORk8JCTExCS8qIGdldCBFRVBST00gaW5mbyBhbmQgaGFyZHdhcmUgSUQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1JFUE9SVF9UWF9ET05FCTEyCS8qIGdldCB0aGUgbmV4dCBUWCBkb25lICovCisjZGVmaW5lIFdISVRFSEVBVF9FVkVOVAkJCTEzCS8qIHVuc29saWNpdGVkIHN0YXR1cyBldmVudHMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VDSE8JCQkxNAkvKiBzZW5kIGRhdGEgdG8gdGhlIGluZGljYXRlZCBJTiBlbmRwb2ludCAqLworI2RlZmluZSBXSElURUhFQVRfRE9fVEVTVAkJMTUJLyogcGVyZm9ybSB0aGUgc3BlY2lmaWVkIHRlc3QgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0NNRF9DT01QTEVURQkJMTYJLyogcmVwbHkgZm9yIGNlcnRhaW4gY29tbWFuZHMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0NNRF9GQUlMVVJFCQkxNwkvKiByZXBseSBmb3IgZmFpbGVkIGNvbW1hbmRzICovCisKKworLyoKKyAqIENvbW1hbmRzIHRvIHRoZSBmaXJtd2FyZQorICovCisKKworLyoKKyAqIFdISVRFSEVBVF9PUEVOCisgKiBXSElURUhFQVRfQ0xPU0UKKyAqIFdISVRFSEVBVF9TVEFUVVMKKyAqIFdISVRFSEVBVF9HRVRfRFRSX1JUUworICogV0hJVEVIRUFUX1JFUE9SVF9UWF9ET05FCisqLworc3RydWN0IHdoaXRlaGVhdF9zaW1wbGUgeworCV9fdTgJcG9ydDsJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9TRVRVUF9QT1JUCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BBUl9OT05FCSduJwkvKiBubyBwYXJpdHkgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BBUl9FVkVOCSdlJwkvKiBldmVuIHBhcml0eSAqLworI2RlZmluZSBXSElURUhFQVRfUEFSX09ERAknbycJLyogb2RkIHBhcml0eSAqLworI2RlZmluZSBXSElURUhFQVRfUEFSX1NQQUNFCScwJwkvKiBzcGFjZSAoZm9yY2UgMCkgcGFyaXR5ICovCisjZGVmaW5lIFdISVRFSEVBVF9QQVJfTUFSSwknMScJLyogbWFyayAoZm9yY2UgMSkgcGFyaXR5ICovCisKKyNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX05PTkUJJ24nCS8qIG5vIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBXSElURUhFQVRfU0ZMT1dfUlgJJ3InCS8qIFhPRkYvT04gaXMgc2VudCB3aGVuIFJYIGZpbGxzL2VtcHRpZXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX1RYCSd0JwkvKiB3aGVuIHJlY2VpdmVkIFhPRkYvT04gd2lsbCBzdG9wL3N0YXJ0IFRYICovCisjZGVmaW5lIFdISVRFSEVBVF9TRkxPV19SWFRYCSdiJwkvKiBib3RoIFNGTE9XX1JYIGFuZCBTRkxPV19UWCAqLworCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19OT05FCQkweDAwCS8qIG5vIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfUlRTX1RPR0dMRQkweDAxCS8qIFJUUyBpcyBvbiBkdXJpbmcgdHJhbnNtaXQsIG9mZiBvdGhlcndpc2UgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0RUUgkJMHgwMgkvKiBEVFIgaXMgb2ZmL29uIHdoZW4gUlggZmlsbHMvZW1wdGllcyAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfQ1RTCQkweDA4CS8qIHdoZW4gcmVjZWl2ZWQgQ1RTIG9mZi9vbiB3aWxsIHN0b3Avc3RhcnQgVFggKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0RTUgkJMHgxMAkvKiB3aGVuIHJlY2VpdmVkIERTUiBvZmYvb24gd2lsbCBzdG9wL3N0YXJ0IFRYICovCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19SVFMJCTB4ODAJLyogUlRTIGlzIG9mZi9vbiB3aGVuIFJYIGZpbGxzL2VtcHRpZXMgKi8KKworc3RydWN0IHdoaXRlaGVhdF9wb3J0X3NldHRpbmdzIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTMyCWJhdWQ7CQkvKiBhbnkgdmFsdWUgNyAtIDQ2MDgwMCwgZmlybXdhcmUgY2FsY3VsYXRlcyBiZXN0IGZpdDsgYXJyaXZlcyBsaXR0bGUgZW5kaWFuICovCisJX191OAliaXRzOwkJLyogNSwgNiwgNywgb3IgOCAqLworCV9fdTgJc3RvcDsJCS8qIDEgb3IgMiwgZGVmYXVsdCAxICgyID0gMS41IGlmIGJpdHMgPSA1KSAqLworCV9fdTgJcGFyaXR5OwkJLyogc2VlIFdISVRFSEVBVF9QQVJfKiBhYm92ZSAqLworCV9fdTgJc2Zsb3c7CQkvKiBzZWUgV0hJVEVIRUFUX1NGTE9XXyogYWJvdmUgKi8KKwlfX3U4CXhvZmY7CQkvKiBYT0ZGIGJ5dGUgdmFsdWUgKi8KKwlfX3U4CXhvbjsJCS8qIFhPTiBieXRlIHZhbHVlICovCisJX191OAloZmxvdzsJCS8qIHNlZSBXSElURUhFQVRfSEZMT1dfKiBhYm92ZSAqLworCV9fdTgJbGxvb3A7CQkvKiAwLzEgdHVybnMgbG9jYWwgbG9vcGJhY2sgbW9kZSBvZmYvb24gKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBXSElURUhFQVRfU0VUX1JUUworICogV0hJVEVIRUFUX1NFVF9EVFIKKyAqIFdISVRFSEVBVF9TRVRfQlJFQUsKKyAqLworI2RlZmluZSBXSElURUhFQVRfUlRTX09GRgkweDAwCisjZGVmaW5lIFdISVRFSEVBVF9SVFNfT04JMHgwMQorI2RlZmluZSBXSElURUhFQVRfRFRSX09GRgkweDAwCisjZGVmaW5lIFdISVRFSEVBVF9EVFJfT04JMHgwMQorI2RlZmluZSBXSElURUhFQVRfQlJFQUtfT0ZGCTB4MDAKKyNkZWZpbmUgV0hJVEVIRUFUX0JSRUFLX09OCTB4MDEKKworc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJc3RhdGU7CQkvKiAwLzEgdHVybnMgc2lnbmFsIG9mZi9vbiAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0RVTVAKKyAqLworI2RlZmluZSBXSElURUhFQVRfRFVNUF9NRU1fREFUQQkJJ2QnICAvKiBkYXRhICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QX01FTV9JREFUQQknaScgIC8qIGlkYXRhICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QX01FTV9CREFUQQknYicgIC8qIGJkYXRhICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QX01FTV9YREFUQQkneCcgIC8qIHhkYXRhICovCisKKy8qCisgKiBBbGxvd2FibGUgYWRkcmVzcyByYW5nZXMgKGZpcm13YXJlIGNoZWNrcyBhZGRyZXNzKToKKyAqIFR5cGUgREFUQTogIDB4MDAgLSAweGZmCisgKiBUeXBlIElEQVRBOiAweDgwIC0gMHhmZgorICogVHlwZSBCREFUQTogMHgyMCAtIDB4MmYKKyAqIFR5cGUgWERBVEE6IDB4MDAwMCAtIDB4ZmZmZgorICoKKyAqIEIvSS9EQVRBIGFsbCByZWFkIHRoZSBsb2NhbCBtZW1vcnkgc3BhY2UKKyAqIFhEQVRBIHJlYWRzIHRoZSBleHRlcm5hbCBtZW1vcnkgc3BhY2UKKyAqIEJEQVRBIHJldHVybnMgYml0cyBhcyBieXRlcworICoKKyAqIE5PVEU6IDB4ODAgLSAweGZmIChsb2NhbCBzcGFjZSkgYXJlIHRoZSBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVycworICogICAgICAgb2YgdGhlIDgwNTEsIGFuZCBzb21lIGhhdmUgb24tcmVhZCBzaWRlLWVmZmVjdHMuCisgKi8KKworc3RydWN0IHdoaXRlaGVhdF9kdW1wIHsKKwlfX3U4CW1lbV90eXBlOwkvKiBzZWUgV0hJVEVIRUFUX0RVTVBfKiBhYm92ZSAqLworCV9fdTE2CWFkZHI7CQkvKiBhZGRyZXNzLCBzZWUgcmVzdHJpY3Rpb25zIGFib3ZlICovCisJX191MTYJbGVuZ3RoOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGR1bXAsIG1heCA2MyBieXRlcyAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX1BVUkdFCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BVUkdFX1JYCTB4MDEJLyogcHVyZ2UgcnggZmlmb3MgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BVUkdFX1RYCTB4MDIJLyogcHVyZ2UgdHggZmlmb3MgKi8KKworc3RydWN0IHdoaXRlaGVhdF9wdXJnZSB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CXdoYXQ7CQkvKiBiaXQgcGF0dGVybiBvZiB3aGF0IHRvIHB1cmdlICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfRUNITworICovCitzdHJ1Y3Qgd2hpdGVoZWF0X2VjaG8geworCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCisJX191OAlsZW5ndGg7CQkvKiBsZW5ndGggb2YgbWVzc2FnZSB0byBlY2hvLCBtYXggNjEgYnl0ZXMgKi8KKwlfX3U4CWVjaG9fZGF0YVs2MV07CS8qIGRhdGEgdG8gZWNobyAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0RPX1RFU1QKKyAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VQVJUX1JXCQkweDAxICAvKiByZWFkL3dyaXRlIHVhcnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1VBUlRfSU5UUgkweDAyICAvKiB1YXJ0IGludGVycnVwdCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9TRVRVUF9DT05UCTB4MDMgIC8qIHNldHVwIGZvciBQT1JUX0NPTlQvUE9SVF9ESVNDT05UICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1BPUlRfQ09OVAkweDA0ICAvKiBwb3J0IGNvbm5lY3QgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfUE9SVF9ESVNDT05UCTB4MDUgIC8qIHBvcnQgZGlzY29ubmVjdCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VQVJUX0NMS19TVEFSVAkweDA2ICAvKiB1YXJ0IGNsb2NrIHRlc3Qgc3RhcnQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVUFSVF9DTEtfU1RPUAkweDA3ICAvKiB1YXJ0IGNsb2NrIHRlc3Qgc3RvcCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9NT0RFTV9GVAkJMHgwOCAgLyogbW9kZW0gc2lnbmFscywgcmVxdWlyZXMgYSBsb29wYmFjayBjYWJsZS9jb25uZWN0b3IgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfRVJBU0VfRUVQUk9NCTB4MDkgIC8qIGVyYXNlIGVlcHJvbSAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9SRUFEX0VFUFJPTQkweDBhICAvKiByZWFkIGVlcHJvbSAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9QUk9HUkFNX0VFUFJPTQkweDBiICAvKiBwcm9ncmFtIGVlcHJvbSAqLworCitzdHJ1Y3Qgd2hpdGVoZWF0X3Rlc3QgeworCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIG4pICovCisJX191OAl0ZXN0OwkJLyogc2VlIFdISVRFSEVBVF9URVNUXyogYWJvdmUqLworCV9fdTgJaW5mb1szMl07CS8qIGFkZGl0aW9uYWwgaW5mbyAqLworfTsKKworCisvKgorICogUmVwbGllcyBmcm9tIHRoZSBmaXJtd2FyZQorICovCisKKworLyoKKyAqIFdISVRFSEVBVF9TVEFUVVMKKyAqLworI2RlZmluZSBXSElURUhFQVRfRVZFTlRfTU9ERU0JCTB4MDEJLyogbW9kZW0gZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VWRU5UX0VSUk9SCQkweDAyCS8qIGVycm9yIGZpZWxkIGlzIHZhbGlkICovCisjZGVmaW5lIFdISVRFSEVBVF9FVkVOVF9GTE9XCQkweDA0CS8qIGZsb3cgZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VWRU5UX0NPTk5FQ1QJCTB4MDgJLyogY29ubmVjdCBmaWVsZCBpcyB2YWxpZCAqLworCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX05PTkUJCTB4MDAJLyogbm8gZmxvdyBjb250cm9sIGFjdGl2ZSAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19IQVJEX09VVAkJMHgwMQkvKiBUWCBpcyBzdG9wcGVkIGJ5IENUUyAod2FpdGluZyBmb3IgQ1RTIHRvIGdvIG9uKSAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19IQVJEX0lOCQkweDAyCS8qIHJlbW90ZSBUWCBpcyBzdG9wcGVkIGJ5IFJUUyAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19TT0ZUX09VVAkJMHgwNAkvKiBUWCBpcyBzdG9wcGVkIGJ5IFhPRkYgcmVjZWl2ZWQgKHdhaXRpbmcgZm9yIFhPTikgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfU09GVF9JTgkJMHgwOAkvKiByZW1vdGUgVFggaXMgc3RvcHBlZCBieSBYT0ZGIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX1RYX0RPTkUJCTB4ODAJLyogVFggaGFzIGNvbXBsZXRlZCAqLworCitzdHJ1Y3Qgd2hpdGVoZWF0X3N0YXR1c19pbmZvIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJZXZlbnQ7CQkvKiBpbmRpY2F0ZXMgd2hhdCB0aGUgY3VycmVudCBldmVudCBpcywgc2VlIFdISVRFSEVBVF9FVkVOVF8qIGFib3ZlICovCisJX191OAltb2RlbTsJCS8qIG1vZGVtIHNpZ25hbCBzdGF0dXMgKGNvcHkgb2YgdWFydCdzIE1TUiByZWdpc3RlcikgKi8KKwlfX3U4CWVycm9yOwkJLyogbGluZSBzdGF0dXMgKGNvcHkgb2YgdWFydCdzIExTUiByZWdpc3RlcikgKi8KKwlfX3U4CWZsb3c7CQkvKiBmbG93IGNvbnRyb2wgc3RhdGUsIHNlZSBXSElURUhFQVRfRkxPV18qIGFib3ZlICovCisJX191OAljb25uZWN0OwkvKiAwIG1lYW5zIG5vdCBjb25uZWN0ZWQsIG5vbi16ZXJvIG1lYW5zIGNvbm5lY3RlZCAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0dFVF9EVFJfUlRTCisgKi8KK3N0cnVjdCB3aGl0ZWhlYXRfZHJfaW5mbyB7CisJX191OAltY3I7CQkvKiBjb3B5IG9mIHVhcnQncyBNQ1IgcmVnaXN0ZXIgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9HRVRfSFdfSU5GTworICovCitzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8geworCV9fdTgJaHdfaWQ7CQkvKiBoYXJkd2FyZSBpZCBudW1iZXIsIFdoaXRlSEVBVCA9IDAgKi8KKwlfX3U4CXN3X21ham9yX3JldjsJLyogbWFqb3IgdmVyc2lvbiBudW1iZXIgKi8KKwlfX3U4CXN3X21pbm9yX3JldjsJLyogbWlub3IgdmVyc2lvbiBudW1iZXIgKi8KKwlzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2VlcHJvbV9pbmZvIHsKKwkJX191OAliMDsJCQkvKiBCMCAqLworCQlfX3U4CXZlbmRvcl9pZF9sb3c7CQkvKiB2ZW5kb3IgaWQgKGxvdyBieXRlKSAqLworCQlfX3U4CXZlbmRvcl9pZF9oaWdoOwkJLyogdmVuZG9yIGlkIChoaWdoIGJ5dGUpICovCisJCV9fdTgJcHJvZHVjdF9pZF9sb3c7CQkvKiBwcm9kdWN0IGlkIChsb3cgYnl0ZSkgKi8KKwkJX191OAlwcm9kdWN0X2lkX2hpZ2g7CS8qIHByb2R1Y3QgaWQgKGhpZ2ggYnl0ZSkgKi8KKwkJX191OAlkZXZpY2VfaWRfbG93OwkJLyogZGV2aWNlIGlkIChsb3cgYnl0ZSkgKi8KKwkJX191OAlkZXZpY2VfaWRfaGlnaDsJCS8qIGRldmljZSBpZCAoaGlnaCBieXRlKSAqLworCQlfX3U4CW5vdF91c2VkXzE7CisJCV9fdTgJc2VyaWFsX251bWJlcl8wOwkvKiBzZXJpYWwgbnVtYmVyIChsb3cgYnl0ZSkgKi8KKwkJX191OAlzZXJpYWxfbnVtYmVyXzE7CS8qIHNlcmlhbCBudW1iZXIgKi8KKwkJX191OAlzZXJpYWxfbnVtYmVyXzI7CS8qIHNlcmlhbCBudW1iZXIgKi8KKwkJX191OAlzZXJpYWxfbnVtYmVyXzM7CS8qIHNlcmlhbCBudW1iZXIgKGhpZ2ggYnl0ZSkgKi8KKwkJX191OAlub3RfdXNlZF8yOworCQlfX3U4CW5vdF91c2VkXzM7CisJCV9fdTgJY2hlY2tzdW1fbG93OwkJLyogY2hlY2tzdW0gKGxvdyBieXRlKSAqLworCQlfX3U4CWNoZWNrc3VtX2hpZ2g7CQkvKiBjaGVja3N1bSAoaGlnaCBieXRlICovCisJfSBod19lZXByb21faW5mbzsJLyogRUVQUk9NIGNvbnRlbnRzICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfRVZFTlQKKyAqLworc3RydWN0IHdoaXRlaGVhdF9ldmVudF9pbmZvIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJZXZlbnQ7CQkvKiBzZWUgd2hpdGVoZWF0X3N0YXR1c19pbmZvLmV2ZW50ICovCisJX191OAlpbmZvOwkJLyogc2VlIHdoaXRlaGVhdF9zdGF0dXNfaW5mby5tb2RlbSwgLmVycm9yLCAuZmxvdywgLmNvbm5lY3QgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9ET19URVNUCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfRkFJTAkweDAwICAvKiB0ZXN0IGZhaWxlZCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VTktOT1dOCTB4MDEgIC8qIHVua25vd24gdGVzdCByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfUEFTUwkweGZmICAvKiB0ZXN0IHBhc3NlZCAqLworCitzdHJ1Y3Qgd2hpdGVoZWF0X3Rlc3RfaW5mbyB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CXRlc3Q7CQkvKiBpbmRpY2F0ZXMgd2hpY2ggdGVzdCB0aGlzIGlzIGEgcmVzcG9uc2UgZm9yLCBzZWUgV0hJVEVIRUFUX0RPX1RFU1QgYWJvdmUgKi8KKwlfX3U4CXN0YXR1czsJCS8qIHNlZSBXSElURUhFQVRfVEVTVF8qIGFib3ZlICovCisJX191OAlyZXN1bHRzWzMyXTsJLyogdGVzdC1kZXBlbmRlbnQgcmVzdWx0cyAqLworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXRfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXRfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTBiZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdF9mdy5oCkBAIC0wLDAgKzEsMTY2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICB3aGl0ZWhlYXQuaCAgLS0gIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBGaXJtd2FyZS4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyICBDb25uZWN0VGVjaCBJbmMgKGh0dHA6Ly93d3cuY29ubmVjdHRlY2guY29tLykKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogKDEwLzA5LzIwMDIpIFN0dWFydCBNYWNEb25hbGQKKyAqCUZpcm13YXJlIDQuMDYKKyAqCisgKiAoMDQvMDkvMjAwMCkgZ2toCisgKglVcGRhdGVkIHRoZSBmaXJtd2FyZSB3aXRoIHRoZSBsYXRlc3QgcHJvdmlkZWQgYnkgQ29ubmVjdFRlY2guCisgKgorICogKDAxLzE2LzIwMDApIGdraAorICoJRml4ZWQgbXkgaW50ZWwgaGV4IHByb2Nlc3NpbmcgdG9vbCwgc28gbm93IHRoZSBmaXJtd2FyZSBhY3R1YWxseQorICoJbWF0Y2hlcyB0aGUgb3JpZ2luYWwgZmlsZSAodGhpcyB3YXMgY2F1c2luZyBhIGZldyBwcm9ibGVtcy4uLikKKyAqCisgKiAoMDEvMTUvMjAwMCkgZ2toCisgKglBZGRlZCBkZWJ1ZyBsb2FkZXIgZmlybXdhcmUgaWYgREVCVUcgaXMgI2RlZmluZWQ6CisgKgkJUG9ydCAxIExFRCBmbGFzaGVzIHdoZW4gdGhlIHZlbmRfYXggcHJvZ3JhbSBpcyBydW5uaW5nCisgKgkJUG9ydCAyIExFRCBmbGFzaGVzIHdoZW4gYW55IFNFVFVQIGNvbW1hbmQgYXJyaXZlcworICoJCVBvcnQgMyBMRUQgZmxhc2hlcyB3aGVuIGFueSB2YWxpZCBWRU5ET1IgcmVxdWVzdCBvY2N1cnMKKyAqCQlQb3J0IDQgTEVEIGZsYXNoZXMgd2hlbiB0aGUgRVhURVJOQUwgUkFNIERPV05MT0FEIHJlcXVlc3Qgb2NjdXJzCisgKgorICogdmVyc2lvbiAxLjAgKDAxLzA5LzIwMDApIGdraAorICoJT3JpZ2luYWwgZmlybXdhcmUgZnJvbSBDb25uZWN0VGVjaCBtYXNzYWdlZCBhIGxpdHRsZSB0byBiZSBwcm9ncmFtCisgKglyZWFkYWJsZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgd2hpdGVoZWF0X0RBVEUgIjIwMDAwMTA2IgorCitzdHJ1Y3Qgd2hpdGVoZWF0X2hleF9yZWNvcmQgeworCV9fdTE2CWFkZHJlc3M7CisJX191OAlkYXRhX3NpemU7CisJX191OAlkYXRhWzE2XTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2hpdGVoZWF0X2hleF9yZWNvcmQgd2hpdGVoZWF0X2Zpcm13YXJlW10gPSB7Cit7IDB4MDAwMCwJMywJezB4MDIsIDB4OTcsIDB4ZTN9IH0sCit7IDB4MDAwMywJMywJezB4MDIsIDB4MTMsIDB4MTJ9IH0sCit7IDB4MDAwYiwJMywJezB4MDIsIDB4MGIsIDB4YjV9IH0sCit7IDB4MDAzMywJMywJezB4MDIsIDB4MDgsIDB4MWN9IH0sCit7IDB4MDA0MywJMywJezB4MDIsIDB4MGEsIDB4MDB9IH0sCit7IDB4MDA1YiwJMywJezB4MDIsIDB4ODMsIDB4M2J9IH0sCit7IDB4MDM3MCwJMTYsCXsweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDczLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweGU3LCAweDI0fSB9LAoreyAweDAzODAsCTE2LAl7MHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg0ZiwgMHgyNCwgMHhmYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg2NCwgMHgxNCwgMHg3MCwgMHgwM30gfSwKK3sgMHgwMzkwLAkxNiwJezB4MDIsIDB4MDQsIDB4NTIsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4M2EsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDksIDB4MjR9IH0sCit7IDB4MDNhMCwJMTYsCXsweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweDllLCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwfSB9LAoreyAweDAzYjAsCTE2LAl7MHgzNiwgMHgyNCwgMHgwMiwgMHg3MCwgMHg3YiwgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNX0gfSwKK3sgMHgwM2MwLAkxNiwJezB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGEsIDB4OTksIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGR9IH0sCit7IDB4MDNkMCwJMTYsCXsweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGI0fSB9LAoreyAweDAzZTAsCTE2LAl7MHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYSwgMHg1OCwgMHhlYX0gfSwKK3sgMHgwM2YwLAkxNiwJezB4NDksIDB4NjAsIDB4MzMsIDB4MTIsIDB4YTIsIDB4M2IsIDB4ZjUsIDB4NGUsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4NGUsIDB4ZDN9IH0sCit7IDB4MDQwMCwJMTYsCXsweDlmLCAweDQwLCAweDAzLCAweGUwLCAweGY1LCAweDRlLCAweGU1LCAweDRlLCAweGQzLCAweDk0LCAweDQwLCAweDQwLCAweDAzLCAweDc1LCAweDRlLCAweDQwfSB9LAoreyAweDA0MTAsCTE2LAl7MHhhZSwgMHgwMiwgMHhhZiwgMHgwMSwgMHg3YywgMHg3ZiwgMHg3ZCwgMHgwMCwgMHhhYiwgMHg0ZSwgMHgxMiwgMHg5MSwgMHgzNywgMHg5MCwgMHg3ZiwgMHhiNX0gfSwKK3sgMHgwNDIwLAkxNiwJezB4ZTUsIDB4NGUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTV9IH0sCit7IDB4MDQzMCwJMTYsCXsweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDIxLCAweGYwfSB9LAoreyAweDA0NDAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyMSwgMHgwMn0gfSwKK3sgMHgwNDUwLAkxNiwJezB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDIsIDB4NDMsIDB4ODgsIDB4MTAsIDB4ZDIsIDB4ZWIsIDB4ZDJ9IH0sCit7IDB4MDQ2MCwJMTYsCXsweGE4LCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDM1LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwfSB9LAoreyAweDA0NzAsCTE2LAl7MHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMn0gfSwKK3sgMHgwNDgwLAkxNiwJezB4NzAsIDB4NWIsIDB4YTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDUsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTB9IH0sCit7IDB4MDQ5MCwJMTYsCXsweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweGU0fSB9LAoreyAweDA0YTAsCTE2LAl7MHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MH0gfSwKK3sgMHgwNGIwLAkxNiwJezB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjV9IH0sCit7IDB4MDRjMCwJMTYsCXsweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDAxLCAweDkwLCAweDdmLCAweDAwfSB9LAoreyAweDA0ZDAsCTE2LAl7MHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhiNH0gfSwKK3sgMHgwNGUwLAkxNiwJezB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjR9IH0sCit7IDB4MDRmMCwJMTYsCXsweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDAwLCAweDAyfSB9LAoreyAweDA1MDAsCTE2LAl7MHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwNTEwLAkxNiwJezB4NzAsIDB4MzQsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZmYsIDB4NTQsIDB4MDcsIDB4ZmUsIDB4ZjUsIDB4NGUsIDB4ZWYsIDB4MzAsIDB4ZTcsIDB4MDN9IH0sCit7IDB4MDUyMCwJMTYsCXsweDQzLCAweDRlLCAweDEwLCAweDkwLCAweDdmLCAweGQ3LCAweGU1LCAweDRlLCAweGYwLCAweGU1LCAweDRlLCAweDQ0LCAweDIwLCAweGYwLCAweGVmLCAweGY0fSB9LAoreyAweDA1MzAsCTE2LAl7MHg1NCwgMHg4MCwgMHhmZCwgMHhjNCwgMHg1NCwgMHgwZiwgMHgyZSwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3Zn0gfSwKK3sgMHgwNTQwLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTYsIDB4OTB9IH0sCit7IDB4MDU1MCwJMTYsCXsweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0fSB9LAoreyAweDA1NjAsCTE2LAl7MHgwMSwgMHgwNCwgMHhkMiwgMHgwMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MH0gfSwKK3sgMHgwNTcwLAkxNiwJezB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGZ9IH0sCit7IDB4MDU4MCwJMTYsCXsweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfSB9LAoreyAweDA1OTAsCTE2LAl7MHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNWEwLAkxMiwJezB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9IH0sCit7IDB4MDVhYywJMSwJezB4MjJ9IH0sCit7IDB4MDVhZCwJMTYsCXsweDc1LCAweDRhLCAweGZmLCAweDc1LCAweDQ5LCAweGZmLCAweDc1LCAweDQ4LCAweDBmLCAweDc1LCAweDQ3LCAweDAwLCAweGQyLCAweDAzLCAweGMyLCAweDA2fSB9LAoreyAweDA1YmQsCTE2LAl7MHhjMiwgMHgwMiwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMSwgMHg5MCwgMHgwMywgMHgwMCwgMHg3NCwgMHgxOSwgMHhmMCwgMHhlNCwgMHg5MH0gfSwKK3sgMHgwNWNkLAkxNiwJezB4MDEsIDB4YmMsIDB4ZjAsIDB4YzIsIDB4MDQsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YzIsIDB4YWYsIDB4YzIsIDB4YTgsIDB4MTJ9IH0sCit7IDB4MDVkZCwJMTYsCXsweDBjLCAweDIyLCAweGU0LCAweDkwLCAweDAyLCAweGFmLCAweGYwLCAweDkwLCAweDAxLCAweGJkLCAweGYwLCAweDkwLCAweDAxLCAweDAwLCAweGYwLCAweGEzfSB9LAoreyAweDA1ZWQsCTE2LAl7MHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHg3NCwgMHgxMCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMSwgMHhmMCwgMHhhM30gfSwKK3sgMHgwNWZkLAkxNiwJezB4NzQsIDB4MDgsIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4MDAsIDB4MTIsIDB4MTksIDB4YzEsIDB4NzUsIDB4NGMsIDB4MTIsIDB4NzUsIDB4NGQsIDB4MGF9IH0sCit7IDB4MDYwZCwJMTYsCXsweDkwLCAweDAxLCAweDBiLCAweGUwLCAweGZmLCAweDA1LCAweDRkLCAweGU1LCAweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0fSB9LAoreyAweDA2MWQsCTE2LAl7MHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHgwYywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNX0gfSwKK3sgMHgwNjJkLAkxNiwJezB4NGQsIDB4YWMsIDB4NGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDF9IH0sCit7IDB4MDYzZCwJMTYsCXsweDBkLCAweGUwLCAweGZmLCAweDA1LCAweDRkLCAweGU1LCAweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyfSB9LAoreyAweDA2NGQsCTE2LAl7MHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHgwZSwgMHhlMCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MH0gfSwKK3sgMHgwNjVkLAkxNiwJezB4MDIsIDB4MDUsIDB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MGEsIDB4ZTQsIDB4OTMsIDB4ZmZ9IH0sCit7IDB4MDY2ZCwJMTYsCXsweDc0LCAweDAxLCAweDkzLCAweDkwLCAweDAxLCAweDFjLCAweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDFjLCAweGUwLCAweGZmfSB9LAoreyAweDA2N2QsCTE2LAl7MHhhMywgMHhlMCwgMHhmZSwgMHhlZiwgMHg2ZSwgMHhmZiwgMHg5MCwgMHgwMSwgMHgxYywgMHhmMCwgMHhhMywgMHhlMCwgMHg2ZiwgMHhmZiwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwNjhkLAkxNiwJezB4MDEsIDB4MWMsIDB4ZTAsIDB4NmYsIDB4ZjAsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4ZTQsIDB4ZmMsIDB4ZmQsIDB4NzUsIDB4NTIsIDB4MTB9IH0sCit7IDB4MDY5ZCwJMTYsCXsweDc1LCAweDUzLCAweDAyLCAweDc1LCAweDU0LCAweDEyLCAweDc1LCAweDU1LCAweGFjLCAweDEyLCAweDk0LCAweDI2LCAweDc1LCAweDRjLCAweDEyLCAweDc1fSB9LAoreyAweDA2YWQsCTE2LAl7MHg0ZCwgMHhiMiwgMHg5MCwgMHgwMSwgMHgwZCwgMHhlMCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MCwgMHgwMiwgMHgwNX0gfSwKK3sgMHgwNmJkLAkxNiwJezB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MGUsIDB4ZTAsIDB4ZmYsIDB4MDUsIDB4NGQsIDB4ZTV9IH0sCit7IDB4MDZjZCwJMTYsCXsweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDA2ZGQsCTE2LAl7MHg5MiwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHgyNCwgMHg0MSwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MH0gfSwKK3sgMHgwNmVkLAkxNiwJezB4MDIsIDB4MDUsIDB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4NGQsIDB4ZTUsIDB4NGQsIDB4YWUsIDB4NGN9IH0sCit7IDB4MDZmZCwJMTYsCXsweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU0LCAweGYwLCAweDc1LCAweDgyLCAweDEwLCAweDc1LCAweDgzfSB9LAoreyAweDA3MGQsCTE2LAl7MHgwMSwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMSwgMHgxOCwgMHgxMn0gfSwKK3sgMHgwNzFkLAkxNiwJezB4YTMsIDB4ZWUsIDB4N2UsIDB4MDEsIDB4N2YsIDB4MTgsIDB4MTIsIDB4ODYsIDB4YmUsIDB4OTAsIDB4MDEsIDB4MTgsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTB9IH0sCit7IDB4MDcyZCwJMTYsCXsweGZkLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweDc1LCAweDUyLCAweDBhLCAweDc1LCAweDUzLCAweDA2LCAweDc1LCAweDU0LCAweDEyfSB9LAoreyAweDA3M2QsCTE2LAl7MHg3NSwgMHg1NSwgMHhiOCwgMHgxMiwgMHg5NCwgMHgyNiwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZn0gfSwKK3sgMHgwNzRkLAkxNiwJezB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MDc1ZCwJMTYsCXsweDFmLCAweGYwLCAweGQyLCAweGFmLCAweDIwLCAweDAxLCAweDJlLCAweDIwLCAweDAxLCAweDJiLCAweGEyLCAweDAzLCAweDkyLCAweDA3LCAweDEyLCAweDA5fSB9LAoreyAweDA3NmQsCTE2LAl7MHhjNSwgMHg3NSwgMHg0NiwgMHg1MCwgMHg3NSwgMHg0NSwgMHg2ZCwgMHg3NSwgMHg0NCwgMHgzMywgMHg3NSwgMHg0MywgMHgwMCwgMHgyMCwgMHgwMSwgMHhlNH0gfSwKK3sgMHgwNzdkLAkxNiwJezB4N2YsIDB4ZmYsIDB4N2UsIDB4ZmYsIDB4N2QsIDB4ZmYsIDB4N2MsIDB4ZmYsIDB4NzgsIDB4NDMsIDB4MTIsIDB4YTMsIDB4ZDcsIDB4ZWMsIDB4NGQsIDB4NGV9IH0sCit7IDB4MDc4ZCwJMTYsCXsweDRmLCAweDYwLCAweGQxLCAweDgwLCAweGU4LCAweDMwLCAweDAxLCAweDA1LCAweDEyLCAweDAzLCAweDcwLCAweGMyLCAweDAxLCAweDMwLCAweDA2LCAweDBhfSB9LAoreyAweDA3OWQsCTE2LAl7MHgxMiwgMHgwOSwgMHhmYiwgMHg1MCwgMHgwMywgMHgxMiwgMHgwYSwgMHhlOCwgMHhjMiwgMHgwNiwgMHgxMiwgMHg5NiwgMHg1ZSwgMHg5MCwgMHgwMSwgMHhiZH0gfSwKK3sgMHgwN2FkLAkxNiwJezB4ZTAsIDB4NjAsIDB4MGMsIDB4MTIsIDB4OTIsIDB4MDEsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4YmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDdiZCwJMTYsCXsweDAyLCAweGFmLCAweGUwLCAweGI0LCAweDBmLCAweDAzLCAweDEyLCAweDk5LCAweGI5LCAweDEyLCAweGEwLCAweDk1LCAweGU0LCAweGZmLCAweDc0LCAweDAxfSB9LAoreyAweDA3Y2QsCTE2LAl7MHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmZSwgMHg5MCwgMHgwMSwgMHhiYywgMHhlMCwgMHg1ZSwgMHg2MH0gfSwKK3sgMHgwN2RkLAkxNiwJezB4MTQsIDB4NzQsIDB4MjgsIDB4MmYsIDB4ZjgsIDB4ZTYsIDB4ZDMsIDB4OTQsIDB4MGEsIDB4NDAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2V9IH0sCit7IDB4MDdlZCwJMTYsCXsweDAwLCAweDhlLCAweDRiLCAweDgwLCAweDAzLCAweDc1LCAweDRiLCAweDAxLCAweDc0LCAweDY4LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwfSB9LAoreyAweDA3ZmQsCTE2LAl7MHhmNSwgMHg4MywgMHhlNSwgMHg0YiwgMHhmMCwgMHgwZiwgMHhiZiwgMHgwNCwgMHhjNSwgMHhlNSwgMHgyYywgMHhkMywgMHg5NCwgMHgwYSwgMHg0MCwgMHgwNH0gfSwKK3sgMHgwODBkLAkxNCwJezB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MjAsIDB4NmMsIDB4ZWYsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4OTJ9IH0sCit7IDB4MDgxYiwJMSwJezB4MjJ9IH0sCit7IDB4MDgxYywJNCwJezB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9IH0sCit7IDB4MDgyMCwJMTYsCXsweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBlLCAweDkwLCAweDdmLCAweDkzLCAweGUwLCAweDQ0LCAweDMwLCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDA4MzAsCTE2LAl7MHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMH0gfSwKK3sgMHgwODQwLAkxNiwJezB4NTQsIDB4ZmUsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4MDh9IH0sCit7IDB4MDg1MCwJMTYsCXsweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDdmfSB9LAoreyAweDA4NjAsCTE2LAl7MHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgwZSwgMHg3ZiwgMHgwMiwgMHg3ZH0gfSwKK3sgMHgwODcwLAkxNiwJezB4ZmYsIDB4MTIsIDB4ODIsIDB4ZWEsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MDg4MCwJMTYsCXsweDAyLCAweGYwLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2fSB9LAoreyAweDA4OTAsCTE2LAl7MHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1NH0gfSwKK3sgMHgwOGEwLAkxNiwJezB4YmYsIDB4ZjAsIDB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjB9IH0sCit7IDB4MDhiMCwJOCwJezB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4MjJ9IH0sCit7IDB4MDhiOCwJMTYsCXsweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDdmLCAweDBhLCAweDdlLCAweDAwLCAweDEyfSB9LAoreyAweDA4YzgsCTE2LAl7MHgwOSwgMHhhZSwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgwZSwgMHg3ZiwgMHgwMiwgMHhlNCwgMHhmZCwgMHgxMiwgMHg4MiwgMHhlYX0gfSwKK3sgMHgwOGQ4LAkxNiwJezB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MDV9IH0sCit7IDB4MDhlOCwJMTYsCXsweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwfSB9LAoreyAweDA4ZjgsCTE2LAl7MHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOX0gfSwKK3sgMHgwOTA4LAkxNiwJezB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4ZTV9IH0sCit7IDB4MDkxOCwJMTYsCXsweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBlLCAweDkwLCAweDdmLCAweDkzLCAweGUwLCAweDU0LCAweGNmLCAweGYwLCAweDkwLCAweDdmLCAweDk1fSB9LAoreyAweDA5MjgsCTgsCXsweGUwLCAweDU0LCAweDNmLCAweGYwLCAweDEyLCAweDBiLCAweDAwLCAweDIyfSB9LAoreyAweDA5MzAsCTE2LAl7MHg5MCwgMHgwYSwgMHhmNCwgMHhlNCwgMHg5MywgMHg3MCwgMHg3NiwgMHg5MCwgMHg3ZiwgMHg5MywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NH0gfSwKK3sgMHgwOTQwLAkxNiwJezB4NzQsIDB4M2MsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzYsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWV9IH0sCit7IDB4MDk1MCwJMTYsCXsweGU0LCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweGNmfSB9LAoreyAweDA5NjAsCTE2LAl7MHhmMCwgMHg3ZiwgMHgwYSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHgyMCwgMHg3MCwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZn0gfSwKK3sgMHgwOTcwLAkxNiwJezB4ZjUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTB9IH0sCit7IDB4MDk4MCwJMTYsCXsweDdmLCAweDk3LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweDAyLCAweGYwLCAweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBifSB9LAoreyAweDA5OTAsCTE2LAl7MHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHg3NCwgMHgxMn0gfSwKK3sgMHgwOWEwLAkxNCwJezB4ZjAsIDB4MTIsIDB4MDgsIDB4MjAsIDB4NzUsIDB4ODIsIDB4ZjQsIDB4NzUsIDB4ODMsIDB4MGEsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MDlhZSwJMTYsCXsweDhlLCAweDVkLCAweDhmLCAweDVlLCAweGU1LCAweDVlLCAweDE1LCAweDVlLCAweGFlLCAweDVkLCAweDcwLCAweDAyLCAweDE1LCAweDVkLCAweDRlLCAweDYwfSB9LAoreyAweDA5YmUsCTcsCXsweDA1LCAweDEyLCAweDA5LCAweGVhLCAweDgwLCAweGVlLCAweDIyfSB9LAoreyAweDA5YzUsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgwNywgMHgwNCwgMHhlMCwgMHg0NH0gfSwKK3sgMHgwOWQ1LAkxNiwJezB4MDIsIDB4ZjAsIDB4N2YsIDB4ZDAsIDB4N2UsIDB4MDcsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjB9IH0sCit7IDB4MDllNSwJNSwJezB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MDllYSwJMTYsCXsweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5fSB9LAoreyAweDA5ZmEsCTEsCXsweDIyfSB9LAoreyAweDA5ZmIsCTUsCXsweDEyLCAweDA4LCAweGI4LCAweGQzLCAweDIyfSB9LAoreyAweDBhMDAsCTE2LAl7MHgwMiwgMHgwYywgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwYywgMHg4MSwgMHgwMCwgMHgwMiwgMHgwYywgMHg2NiwgMHgwMCwgMHgwMiwgMHgwYywgMHhjMCwgMHgwMH0gfSwKK3sgMHgwYTEwLAkxNiwJezB4MDIsIDB4MGMsIDB4YWEsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZWQsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZWUsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZWYsIDB4MDB9IH0sCit7IDB4MGEyMCwJMTYsCXsweDAyLCAweDBjLCAweGRiLCAweDAwLCAweDAyLCAweDBkLCAweGNiLCAweDAwLCAweDAyLCAweDBkLCAweDE3LCAweDAwLCAweDAyLCAweDBlLCAweDJiLCAweDAwfSB9LAoreyAweDBhMzAsCTE2LAl7MHgwMiwgMHgwZCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwZSwgMHg4YiwgMHgwMCwgMHgwMiwgMHgwZCwgMHg4ZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHhlYiwgMHgwMH0gfSwKK3sgMHgwYTQwLAkxNiwJezB4MDIsIDB4MGEsIDB4ZjAsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZjIsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZjEsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZjMsIDB4MDB9IH0sCit7IDB4MGE1MCwJOCwJezB4MDIsIDB4MGYsIDB4NGIsIDB4MDAsIDB4MDIsIDB4MGYsIDB4NjEsIDB4MDB9IH0sCit7IDB4MGE1OCwJMiwJezB4OGYsIDB4NGZ9IH0sCit7IDB4MGE1YSwJMTYsCXsweGU0LCAweGY1LCAweDUwLCAweDc1LCAweDUxLCAweGZmLCAweDc1LCAweDUyLCAweDEyLCAweDc1LCAweDUzLCAweDZhLCAweGFiLCAweDUxLCAweGFhLCAweDUyfSB9LAoreyAweDBhNmEsCTE2LAl7MHhhOSwgMHg1MywgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg1NCwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHg1MCwgMHgwNSwgMHg1MCwgMHhlZn0gfSwKK3sgMHgwYTdhLAkxNiwJezB4YjUsIDB4NGYsIDB4MDEsIDB4MjIsIDB4MTIsIDB4YTIsIDB4M2IsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzV9IH0sCit7IDB4MGE4YSwJMTQsCXsweDUxLCAweGZmLCAweGY1LCAweDUyLCAweDg5LCAweDUzLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBhOTgsCTEsCXsweDIyfSB9LAoreyAweDBhOTksCTE2LAl7MHhlNCwgMHhmZSwgMHg3NSwgMHg1MSwgMHhmZiwgMHg3NSwgMHg1MiwgMHgxMiwgMHg3NSwgMHg1MywgMHgxMiwgMHhhYiwgMHg1MSwgMHhhYSwgMHg1MiwgMHhhOX0gfSwKK3sgMHgwYWE5LAkxNiwJezB4NTMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4NTQsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjV9IH0sCit7IDB4MGFiOSwJMTYsCXsweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweGEyLCAweGFkLCAweDg1LCAweGYwLCAweDRmLCAweGY1LCAweDUwLCAweDYyLCAweDRmfSB9LAoreyAweDBhYzksCTE2LAl7MHhlNSwgMHg0ZiwgMHg2MiwgMHg1MCwgMHhlNSwgMHg1MCwgMHg2MiwgMHg0ZiwgMHgyOSwgMHhmZCwgMHhlNSwgMHg0ZiwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NX0gfSwKK3sgMHgwYWQ5LAkxNCwJezB4NTEsIDB4ZmYsIDB4ZjUsIDB4NTIsIDB4ODksIDB4NTMsIDB4ODAsIDB4YzMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MGFlNywJMSwJezB4MjJ9IH0sCit7IDB4MGFlOCwJNSwJezB4MTIsIDB4MDgsIDB4MjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGFlZCwJMSwJezB4MzJ9IH0sCit7IDB4MGFlZSwJMSwJezB4MzJ9IH0sCit7IDB4MGFlZiwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMCwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMSwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMiwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMywJMSwJezB4MzJ9IH0sCit7IDB4MGFmNCwJMywJezB4MDAsIDB4MDQsIDB4MDd9IH0sCit7IDB4MGIwMCwJOSwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4NzR9IH0sCit7IDB4MGI3ZCwJMTYsCXsweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyfSB9LAoreyAweDBiOGQsCTE2LAl7MHg1MywgMHg4ZSwgMHhmNywgMHhlNSwgMHg4OSwgMHg1NCwgMHhmMSwgMHg0NCwgMHgwMSwgMHhmNSwgMHg4OSwgMHg3NSwgMHg4YywgMHhiMSwgMHhkMiwgMHhhOX0gfSwKK3sgMHgwYjlkLAkxNiwJezB4NzUsIDB4OTgsIDB4NDAsIDB4NzUsIDB4Y2IsIDB4ZmYsIDB4NzUsIDB4Y2EsIDB4ZjMsIDB4NzUsIDB4YzgsIDB4MzQsIDB4ZTQsIDB4ZmYsIDB4N2YsIDB4MDV9IH0sCit7IDB4MGJhZCwJNywJezB4NzgsIDB4MjgsIDB4ZTQsIDB4ZjYsIDB4MDgsIDB4ZGYsIDB4ZmN9IH0sCit7IDB4MGJiNCwJMSwJezB4MjJ9IH0sCit7IDB4MGJiNSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDAwLCAweGMwLCAweDAwLCAweGMwLCAweDA2LCAweGMwfSB9LAoreyAweDBiYzUsCTEsCXsweDA3fSB9LAoreyAweDBiYzYsCTE2LAl7MHgzMCwgMHgwNCwgMHgxNiwgMHg3NSwgMHg4YywgMHhmOCwgMHg3NSwgMHg4YSwgMHgzMCwgMHg3ZiwgMHgyZiwgMHhhZSwgMHgwNywgMHgxZiwgMHhlZSwgMHg2MH0gfSwKK3sgMHgwYmQ2LAkxNiwJezB4M2MsIDB4OTAsIDB4MjAsIDB4MDAsIDB4NzQsIDB4NTUsIDB4ZjAsIDB4ODAsIDB4ZjIsIDB4NzUsIDB4OGMsIDB4YjEsIDB4N2YsIDB4MjgsIDB4ZWYsIDB4ZDN9IH0sCit7IDB4MGJlNiwJMTYsCXsweDk0LCAweDJjLCAweDUwLCAweDA5LCAweGE4LCAweDA3LCAweGU2LCAweDYwLCAweDAxLCAweDE2LCAweDBmLCAweDgwLCAweGYxLCAweDkwLCAweDAzLCAweDAwfSB9LAoreyAweDBiZjYsCTE2LAl7MHhlMCwgMHg2MCwgMHgwMiwgMHgxNCwgMHhmMCwgMHg5MCwgMHgwMSwgMHhjMCwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MH0gfSwKK3sgMHgwYzA2LAkxMywJezB4MDEsIDB4YzEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4MzQsIDB4ZmYsIDB4ZjB9IH0sCit7IDB4MGMxMywJMTUsCXsweGQwLCAweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDAwLCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjMjIsCTE2LAl7MHhkMiwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgxMCwgMHgxMiwgMHgwOSwgMHgzMCwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg0MCwgMHgwOCwgMHg5MH0gfSwKK3sgMHgwYzMyLAkxNiwJezB4N2YsIDB4OTIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZjAsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MTJ9IH0sCit7IDB4MGM0MiwJMTIsCXsweDBmLCAweDdkLCAweDEyLCAweDk0LCAweGY3LCAweDEyLCAweDFiLCAweDBjLCAweDEyLCAweDBiLCAweDhkLCAweDIyfSB9LAoreyAweDBjNGUsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhkMiwgMHgwMSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMX0gfSwKK3sgMHgwYzVlLAk4LAl7MHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwYzY2LAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGM3NiwJMTEsCXsweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjODEsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwYzkxLAkxNiwJezB4N2YsIDB4ZDgsIDB4ZTAsIDB4NzAsIDB4MGQsIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4NzAsIDB4MDcsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzV9IH0sCit7IDB4MGNhMSwJOSwJezB4MmMsIDB4MTQsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGNhYSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDEwLCAweGYwLCAweGQwfSB9LAoreyAweDBjYmEsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjYzAsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHgzMCwgMHgwMiwgMHgwMiwgMHhkMiwgMHgwNiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwY2QwLAkxMSwJezB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGNkYiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBjZWIsCTE2LAl7MHhhOSwgMHg3NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgzNCwgMHgzMCwgMHhlMCwgMHgxMywgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgyMH0gfSwKK3sgMHgwY2ZiLAkxNiwJezB4MDQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDN9IH0sCit7IDB4MGQwYiwJMTIsCXsweDc1LCAweDJjLCAweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkMTcsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgxMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwZDI3LAkxNiwJezB4YTksIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MzAsIDB4ZTEsIDB4MTMsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4OTAsIDB4MjB9IH0sCit7IDB4MGQzNywJMTYsCXsweDBjLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDIwLCAweDA5LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzfSB9LAoreyAweDBkNDcsCTEyLAl7MHg3NSwgMHgyYywgMHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZDUzLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGQ2MywJMTYsCXsweGE5LCAweDc0LCAweDA4LCAweGYwLCAweGU1LCAweDM0LCAweDMwLCAweGUyLCAweDEzLCAweGU1LCAweDMyLCAweDMwLCAweGUyLCAweDA3LCAweDkwLCAweDIwfSB9LAoreyAweDBkNzMsCTE2LAl7MHgxNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgyMCwgMHgxMSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgyYywgMHg3MCwgMHgwM30gfSwKK3sgMHgwZDgzLAkxMiwJezB4NzUsIDB4MmMsIDB4MTQsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ4ZiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBkOWYsCTE2LAl7MHhhOSwgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHgzNCwgMHgzMCwgMHhlMywgMHgxMywgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMywgMHgwNywgMHg5MCwgMHgyMH0gfSwKK3sgMHgwZGFmLAkxNiwJezB4MWMsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDN9IH0sCit7IDB4MGRiZiwJMTIsCXsweDc1LCAweDJjLCAweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkY2IsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZGRiLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGRlYiwJMTYsCXsweGUwLCAweDA2LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUwLCAweDBhLCAweDkwLCAweDdmLCAweGM3fSB9LAoreyAweDBkZmIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmOCwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgyMCwgMHgwNCwgMHhlMH0gfSwKK3sgMHgwZTBiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGUxYiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlMmIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZTNiLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGU0YiwJMTYsCXsweGUxLCAweDA2LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUxLCAweDBhLCAweDkwLCAweDdmLCAweGM5fSB9LAoreyAweDBlNWIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmOSwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMSwgMHgwNywgMHg5MCwgMHgyMCwgMHgwYywgMHhlMH0gfSwKK3sgMHgwZTZiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDksIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGU3YiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlOGIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZTliLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGVhYiwJMTYsCXsweGUyLCAweDA2LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUyLCAweDBhLCAweDkwLCAweDdmLCAweGNifSB9LAoreyAweDBlYmIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmYSwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMiwgMHgwNywgMHg5MCwgMHgyMCwgMHgxNCwgMHhlMH0gfSwKK3sgMHgwZWNiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTEsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGVkYiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlZWIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZWZiLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGYwYiwJMTYsCXsweGUzLCAweDA2LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUzLCAweDBhLCAweDkwLCAweDdmLCAweGNkfSB9LAoreyAweDBmMWIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmYiwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMywgMHgwNywgMHg5MCwgMHgyMCwgMHgxYywgMHhlMH0gfSwKK3sgMHgwZjJiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGYzYiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBmNGIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHg4MCwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwZjViLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZjYxLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MGY3MSwJMTIsCXsweDAxLCAweGJkLCAweDc0LCAweGZmLCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBmN2QsCTE2LAl7MHg5MCwgMHgwMSwgMHgyMCwgMHgxMiwgMHhhMywgMHhmYSwgMHgwMCwgMHgwMCwgMHgyNSwgMHg4MCwgMHg5MCwgMHgwMSwgMHgyNCwgMHg3NCwgMHgwOCwgMHhmMH0gfSwKK3sgMHgwZjhkLAkxNiwJezB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4NmUsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4YTMsIDB4NzR9IH0sCit7IDB4MGY5ZCwJMTYsCXsweDExLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweGZmfSB9LAoreyAweDBmYWQsCTE2LAl7MHgwNCwgMHhhMywgMHhmMCwgMHhlZiwgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmOSwgMHg3NCwgMHgwMywgMHgzNSwgMHhmMCwgMHhhOH0gfSwKK3sgMHgwZmJkLAkxNiwJezB4MDEsIDB4ZmMsIDB4N2QsIDB4MDEsIDB4N2IsIDB4MDEsIDB4N2EsIDB4MDEsIDB4NzksIDB4MWYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MGQsIDB4MTIsIDB4YTJ9IH0sCit7IDB4MGZjZCwJMTYsCXsweDEyLCAweDdlLCAweDAxLCAweDdmLCAweDFmLCAweDEyLCAweDg3LCAweGE2LCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweDA0LCAweGYwLCAweGUwLCAweGMzfSB9LAoreyAweDBmZGQsCTE2LAl7MHg5NCwgMHgwNCwgMHg0MCwgMHhjNywgMHhlNCwgMHhmNSwgMHgyNywgMHg5MCwgMHgwMSwgMHgxZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHhmZn0gfSwKK3sgMHgwZmVkLAkxNiwJezB4YzMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MWEsIDB4NzQsIDB4ZjgsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTR9IH0sCit7IDB4MGZmZCwJMTYsCXsweGYwLCAweDc0LCAweDIzLCAweDJmLCAweGY4LCAweGU0LCAweGY2LCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweDA0LCAweGYwLCAweDgwLCAweGRjLCAweGU0fSB9LAoreyAweDEwMGQsCTE2LAl7MHhmNSwgMHgzNCwgMHhlNSwgMHhjMCwgMHg2MCwgMHgyZiwgMHg5MCwgMHgwMSwgMHgxZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMH0gfSwKK3sgMHgxMDFkLAkxNiwJezB4ZmYsIDB4ZDMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MWYsIDB4ZWYsIDB4MTQsIDB4ZmYsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDJ9IH0sCit7IDB4MTAyZCwJMTYsCXsweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDQyLCAweDM0LCAweDdlLCAweDAxLCAweDdmLCAweDFlLCAweDEyLCAweDg0LCAweDQxLCAweDkwLCAweDAxLCAweDFlfSB9LAoreyAweDEwM2QsCTE2LAl7MHhlMCwgMHgwNCwgMHhmMCwgMHg4MCwgMHhkNywgMHhlNCwgMHhmNSwgMHgzZSwgMHhmNSwgMHgyMiwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzMiwgMHg5MCwgMHgwMX0gfSwKK3sgMHgxMDRkLAkxNiwJezB4MWUsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZTAsIDB4ZmYsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4MTA1ZCwJMTYsCXsweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGYwLCAweGZlLCAweDc0LCAweGM1LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAxfSB9LAoreyAweDEwNmQsCTE2LAl7MHhmNSwgMHg4MywgMHhlZSwgMHhmMCwgMHg3NCwgMHgzYSwgMHgyZiwgMHhmOCwgMHhhNiwgMHgwNiwgMHg3NCwgMHgzNiwgMHgyZiwgMHhmOCwgMHhlNCwgMHhmNn0gfSwKK3sgMHgxMDdkLAkxNiwJezB4NzQsIDB4MmQsIDB4MmYsIDB4ZjgsIDB4ZTQsIDB4ZjYsIDB4NzQsIDB4ZmMsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MTA4ZCwJMTYsCXsweGU0LCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweDA0LCAweGYwLCAweGUwLCAweGI0LCAweDA0LCAweGI2LCAweDkwLCAweDIwLCAweDYwLCAweGUwfSB9LAoreyAweDEwOWQsCTQsCXsweDU0LCAweDBmLCAweGY1LCAweDRlfSB9LAoreyAweDEwYTEsCTE2LAl7MHg3MCwgMHgwMywgMHgwMiwgMHgxMSwgMHgyNiwgMHhlNCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHhmZiwgMHhjM30gfSwKK3sgMHgxMGIxLAkxNiwJezB4OTQsIDB4MDQsIDB4NTAsIDB4ZTQsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4NTV9IH0sCit7IDB4MTBjMSwJMTYsCXsweDRlLCAweDYwLCAweDVhLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweGZlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyfSB9LAoreyAweDEwZDEsCTE2LAl7MHhlNCwgMHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlZSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgxMGUxLAkxNiwJezB4ZTQsIDB4MzQsIDB4MjAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZWUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4MTBmMSwJMTYsCXsweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGFmLCAweDA2LCAweGVlLCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAyLCAweGY1fSB9LAoreyAweDExMDEsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMH0gfSwKK3sgMHgxMTExLAkxNiwJezB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4MTIsIDB4ODMsIDB4ZGYsIDB4OTAsIDB4MDEsIDB4MWV9IH0sCit7IDB4MTEyMSwJNiwJezB4ZTAsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4ODUsIDB4MjJ9IH0sCit7IDB4MTEyNywJMiwJezB4YWMsIDB4MDd9IH0sCit7IDB4MTEyOSwJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGVjLCAweDI1LCAweGUwLCAweDQ0LCAweDQxLCAweDkwLCAweDdmLCAweGE2LCAweGYwfSB9LAoreyAweDExMzksCTE2LAl7MHg3YiwgMHgzYywgMHhhZiwgMHgwMywgMHgxYiwgMHhlZiwgMHg3MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxMTQ5LAkxNiwJezB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmQsIDB4N2QsIDB4MzIsIDB4YWYsIDB4MDUsIDB4MWQsIDB4ZWYsIDB4NjAsIDB4ZDQsIDB4ODAsIDB4ZjgsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MTE1OSwJMTYsCXsweGE1LCAweGUwLCAweGZkLCAweDMwLCAweGUwLCAweGRjLCAweDIwLCAweGUxLCAweDA5LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdlLCAweGZmLCAweDdmfSB9LAoreyAweDExNjksCTE2LAl7MHhmOSwgMHgyMiwgMHhlZCwgMHgzMCwgMHhlMiwgMHgwYywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHhmZiwgMHg3Zn0gfSwKK3sgMHgxMTc5LAkxNiwJezB4ZmEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmQsIDB4N2IsIDB4MWV9IH0sCit7IDB4MTE4OSwJMTYsCXsweGFmLCAweDAzLCAweDFiLCAweGVmLCAweDcwLCAweDE2LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2fSB9LAoreyAweDExOTksCTE2LAl7MHhlMCwgMHhmZCwgMHg3ZCwgMHgzMiwgMHhhZiwgMHgwNSwgMHgxZCwgMHhlZiwgMHg2MCwgMHg4NiwgMHg4MCwgMHhmOCwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMH0gfSwKK3sgMHgxMWE5LAkxNiwJezB4ZmQsIDB4MjAsIDB4ZTAsIDB4ZGMsIDB4N2IsIDB4M2MsIDB4YWYsIDB4MDMsIDB4MWIsIDB4ZWYsIDB4NzAsIDB4MTksIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTB9IH0sCit7IDB4MTFiOSwJMTYsCXsweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZkLCAweDdkLCAweDMyLCAweGFmLCAweDA1LCAweDFkLCAweGVmLCAweDcwLCAweDAzfSB9LAoreyAweDExYzksCTE2LAl7MHgwMiwgMHgxMSwgMHgyOSwgMHg4MCwgMHhmNSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHhmZCwgMHgzMCwgMHhlMCwgMHhkOSwgMHgzMCwgMHhlMiwgMHgwOX0gfSwKK3sgMHgxMWQ5LAkxNiwJezB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmEsIDB4MjIsIDB4YzIsIDB4YWYsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MTFlOSwJMTIsCXsweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZkLCAweGQyLCAweGFmLCAweGZmLCAweDdlLCAweDAwfSB9LAoreyAweDExZjUsCTEsCXsweDIyfSB9LAoreyAweDEyMDAsCTE2LAl7MHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MCwgMHgxMCwgMHgwNywgMHgwMSwgMHg4MCwgMHg0MiwgMHgwMCwgMHgwMSwgMHgwMn0gfSwKK3sgMHgxMjEwLAkxNiwJezB4MDMsIDB4MDEsIDB4MDksIDB4MDIsIDB4NTgsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsIDB4ODAsIDB4M2MsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGF9IH0sCit7IDB4MTIyMCwJMTYsCXsweGZmLCAweGZmLCAweGZmLCAweDA1LCAweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLCAweDAyLCAweDQwfSB9LAoreyAweDEyMzAsCTE2LAl7MHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgxMjQwLAkxNiwJezB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDV9IH0sCit7IDB4MTI1MCwJMTYsCXsweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDg3LCAweDAyfSB9LAoreyAweDEyNjAsCTE2LAl7MHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgyNCwgMHgwM30gfSwKK3sgMHgxMjcwLAkxNiwJezB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjAsIDB4MDB9IH0sCit7IDB4MTI4MCwJMTYsCXsweDU0LCAweDAwLCAweDY1LCAweDAwLCAweDYzLCAweDAwLCAweDY4LCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwfSB9LAoreyAweDEyOTAsCTE2LAl7MHgyZSwgMHgwMCwgMHgxOCwgMHgwMywgMHg1NywgMHgwMCwgMHg2OCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg0OCwgMHgwMH0gfSwKK3sgMHgxMmEwLAkxNiwJezB4NDUsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MWEsIDB4MDMsIDB4NTgsIDB4MDAsIDB4NTgsIDB4MDB9IH0sCit7IDB4MTJiMCwJMTYsCXsweDJkLCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwLCAweDJkLCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwfSB9LAoreyAweDEyYzAsCTE2LAl7MHg1OCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgyYSwgMHgwMywgMHg0MywgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NiwgMHgwMCwgMHg2OSwgMHgwMH0gfSwKK3sgMHgxMmQwLAkxNiwJezB4NjcsIDB4MDAsIDB4NzUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDB9IH0sCit7IDB4MTJlMCwJMTYsCXsweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwLCAweDIyLCAweDAzfSB9LAoreyAweDEyZjAsCTE2LAl7MHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2NiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2MywgMHgwMH0gfSwKK3sgMHgxMzAwLAkxNiwJezB4NjUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjcsIDB4MDB9IH0sCit7IDB4MTMxMCwJMiwJezB4MDAsIDB4MDB9IH0sCit7IDB4MTMxMiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweGMwLCAweGQwfSB9LAoreyAweDEzMjIsCTE2LAl7MHg3NSwgMHg4NiwgMHgwMCwgMHg3NSwgMHhkMCwgMHgxOCwgMHg5MCwgMHgyMCwgMHg2MCwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHhmMCwgMHg3MCwgMHgxMX0gfSwKK3sgMHgxMzMyLAkxNiwJezB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTB9IH0sCit7IDB4MTM0MiwJMTYsCXsweDMyLCAweDc1LCAweDg2LCAweDAwLCAweDEwLCAweGYwLCAweDBiLCAweDEwLCAweGYxLCAweDEyLCAweDEwLCAweGYyLCAweDE5LCAweDEwLCAweGYzLCAweDIwfSB9LAoreyAweDEzNTIsCTE2LAl7MHg4MCwgMHhkNCwgMHhlNSwgMHgyOCwgMHg3MCwgMHgwMywgMHg3NSwgMHgyOCwgMHgxNCwgMHgwMiwgMHgxMywgMHg3YywgMHhlNSwgMHgyOSwgMHg3MCwgMHgwM30gfSwKK3sgMHgxMzYyLAkxNiwJezB4NzUsIDB4MjksIDB4MTQsIDB4MDIsIDB4MTUsIDB4MGQsIDB4ZTUsIDB4MmEsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmEsIDB4MTQsIDB4MDIsIDB4MTYsIDB4OWV9IH0sCit7IDB4MTM3MiwJMTYsCXsweGU1LCAweDJiLCAweDcwLCAweDAzLCAweDc1LCAweDJiLCAweDE0LCAweDAyLCAweDE4LCAweDJmLCAweDkwLCAweDIwLCAweDAyLCAweGUwLCAweDU0LCAweDNmfSB9LAoreyAweDEzODIsCTE2LAl7MHgyMCwgMHhlMiwgMHgzYSwgMHgyMCwgMHhlMSwgMHgwYiwgMHgyMCwgMHhlNCwgMHgwYiwgMHgyMCwgMHhlNSwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwMiwgMHgxM30gfSwKK3sgMHgxMzkyLAkxNiwJezB4NDMsIDB4MDIsIDB4MTQsIDB4NjUsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4ZjUsIDB4M2EsIDB4MDIsIDB4MTMsIDB4NDN9IH0sCit7IDB4MTNhMiwJMTYsCXsweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDQzLCAweDJkLCAweDAxLCAweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDgyLCAweGY4LCAweDQzLCAweDgyLCAweDA1fSB9LAoreyAweDEzYjIsCTE2LAl7MHhlMCwgMHg0MiwgMHgzNiwgMHg1MywgMHg4MiwgMHhmYiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHgzMCwgMHhlMSwgMHgwMn0gfSwKK3sgMHgxM2MyLAkxNiwJezB4ODAsIDB4ZTgsIDB4ZjUsIDB4ODUsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTAsIDB4MGEsIDB4NTMsIDB4ODIsIDB4ZjgsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTB9IH0sCit7IDB4MTNkMiwJMTYsCXsweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDg1LCAweDIwLCAweGUzLCAweDU2LCAweDkwLCAweDIwLCAweDUwLCAweDc0LCAweDAwLCAweGYwLCAweDkwLCAweDIwfSB9LAoreyAweDEzZTIsCTE2LAl7MHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMywgMHgwNSwgMHg4Nn0gfSwKK3sgMHgxM2YyLAkxNiwJezB4OTAsIDB4N2UsIDB4ODAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODQsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MTQwMiwJMTYsCXsweGU1LCAweGU1LCAweDNmLCAweGZkLCAweDAzLCAweDAzLCAweDAzLCAweGZlLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwfSB9LAoreyAweDE0MTIsCTE2LAl7MHhkZSwgMHhmNiwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxNDIyLAkxNiwJezB4N2YsIDB4YjcsIDB4ZWQsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4N2YsIDB4NDB9IH0sCit7IDB4MTQzMiwJMTYsCXsweDkwLCAweDdlLCAweDgwLCAweDA1LCAweDg2LCAweDkwLCAweDIwLCAweDAwLCAweGU1LCAweDg0LCAweGZlLCAweDI0LCAweDA1LCAweGZkLCAweDhkLCAweDg0fSB9LAoreyAweDE0NDIsCTE2LAl7MHhlMCwgMHg4ZSwgMHg4NCwgMHgzMCwgMHhlMCwgMHgwOSwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhlZiwgMHgwNX0gfSwKK3sgMHgxNDUyLAkxNiwJezB4ODYsIDB4YzMsIDB4NzQsIDB4NDAsIDB4OWYsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjB9IH0sCit7IDB4MTQ2MiwJMTYsCXsweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDJkLCAweGZhLCAweGU1LCAweDIzLCAweDYwLCAweDA4LCAweDc1LCAweDIzLCAweDAwLCAweGQyLCAweGU3LCAweGZlfSB9LAoreyAweDE0NzIsCTE2LAl7MHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgxNCwgMHhmZiwgMHg5MCwgMHgyMCwgMHg1MCwgMHg3NH0gfSwKK3sgMHgxNDgyLAkxNiwJezB4MDAsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MTQ5MiwJMTYsCXsweDdmLCAweGUzLCAweDA1LCAweDg2LCAweDkwLCAweDdlLCAweDQwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwLCAweGEzLCAweGU1LCAweDg0LCAweGYwfSB9LAoreyAweDE0YTIsCTE2LAl7MHgwNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhlNSwgMHhlZSwgMHgzMCwgMHhlNywgMHgwOCwgMHgwNSwgMHg4NiwgMHhlMCwgMHgyNCwgMHgzOCwgMHhmMCwgMHgwNX0gfSwKK3sgMHgxNGIyLAkxNiwJezB4ODYsIDB4ZWUsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NTQsIDB4MDcsIDB4ZmIsIDB4ZWUsIDB4NTQsIDB4NzgsIDB4NjAsIDB4MzAsIDB4MDMsIDB4MDMsIDB4MDN9IH0sCit7IDB4MTRjMiwJMTYsCXsweDMwLCAweGUzLCAweDA0LCAweDc0LCAweDA3LCAweDdiLCAweDA4LCAweGZkLCAweGZjLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwfSB9LAoreyAweDE0ZDIsCTE2LAl7MHhlMCwgMHhkZCwgMHhmNiwgMHhlYiwgMHhmZSwgMHg2MCwgMHgxOSwgMHhlYywgMHg2NCwgMHgwNywgMHg3MCwgMHgxMSwgMHg4YiwgMHgyMywgMHg5MCwgMHg3Zn0gfSwKK3sgMHgxNGUyLAkxNiwJezB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4ZTAsIDB4ZGUsIDB4ZmR9IH0sCit7IDB4MTRmMiwJMTYsCXsweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwLCAweDkwLCAweDIwLCAweDAxfSB9LAoreyAweDE1MDIsCTE2LAl7MHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg5MCwgMHgyMCwgMHgwYSwgMHhlMCwgMHg1NH0gfSwKK3sgMHgxNTEyLAkxNiwJezB4M2YsIDB4MjAsIDB4ZTIsIDB4M2EsIDB4MjAsIDB4ZTEsIDB4MGIsIDB4MjAsIDB4ZTQsIDB4MGIsIDB4MjAsIDB4ZTUsIDB4MTQsIDB4NjAsIDB4MDksIDB4MDJ9IH0sCit7IDB4MTUyMiwJMTYsCXsweDEzLCAweDQzLCAweDAyLCAweDE1LCAweGY2LCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweGY1LCAweDNiLCAweDAyLCAweDEzfSB9LAoreyAweDE1MzIsCTE2LAl7MHg0MywgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHg0MywgMHgyZSwgMHgwMSwgMHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHg4MiwgMHhmOCwgMHg0MywgMHg4Mn0gfSwKK3sgMHgxNTQyLAkxNiwJezB4MDUsIDB4ZTAsIDB4NDIsIDB4MzcsIDB4NTMsIDB4ODIsIDB4ZmIsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4MzAsIDB4ZTF9IH0sCit7IDB4MTU1MiwJMTYsCXsweDAyLCAweDgwLCAweGU4LCAweGY1LCAweDg1LCAweGU1LCAweDMyLCAweDMwLCAweGUxLCAweDBhLCAweDUzLCAweDgyLCAweGY4LCAweDQzLCAweDgyLCAweDA0fSB9LAoreyAweDE1NjIsCTE2LAl7MHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg4NSwgMHgyMCwgMHhlMywgMHg1NiwgMHg5MCwgMHgyMCwgMHg1MCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxNTcyLAkxNiwJezB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTMsIDB4MDV9IH0sCit7IDB4MTU4MiwJMTYsCXsweDg2LCAweDkwLCAweDdlLCAweDAwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwLCAweGEzLCAweGU1LCAweDg0LCAweGYwLCAweDA1LCAweDg2LCAweDkwfSB9LAoreyAweDE1OTIsCTE2LAl7MHg3ZiwgMHhlNSwgMHhlNSwgMHg0MCwgMHhmZCwgMHgwMywgMHgwMywgMHgwMywgMHhmZSwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMH0gfSwKK3sgMHgxNWEyLAkxNiwJezB4ZjAsIDB4ZGUsIDB4ZjYsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MTViMiwJMTYsCXsweDkwLCAweDdmLCAweGI5LCAweGVkLCAweGYwLCAweDkwLCAweDIwLCAweDA5LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDdmfSB9LAoreyAweDE1YzIsCTE2LAl7MHg0MCwgMHg5MCwgMHg3ZSwgMHgwMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHgyMCwgMHgwOCwgMHhlNSwgMHg4NCwgMHhmZSwgMHgyNCwgMHgwNSwgMHhmZCwgMHg4ZH0gfSwKK3sgMHgxNWQyLAkxNiwJezB4ODQsIDB4ZTAsIDB4OGUsIDB4ODQsIDB4MzAsIDB4ZTAsIDB4MDksIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZWZ9IH0sCit7IDB4MTVlMiwJMTYsCXsweDA1LCAweDg2LCAweGMzLCAweDc0LCAweDQwLCAweDlmLCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweDA1LCAweDg2LCAweGEzLCAweGUwLCAweDU0LCAweGZlfSB9LAoreyAweDE1ZjIsCTE2LAl7MHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHgyZSwgMHhmYSwgMHhlNSwgMHgyNCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgyNCwgMHgwMCwgMHhkMiwgMHhlN30gfSwKK3sgMHgxNjAyLAkxNiwJezB4ZmUsIDB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4OTAsIDB4OTAsIDB4MjAsIDB4NTB9IH0sCit7IDB4MTYxMiwJMTYsCXsweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwfSB9LAoreyAweDE2MjIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlMywgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZCwgMHhjMCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NSwgMHhmMCwgMHhhMywgMHhlNSwgMHg4NH0gfSwKK3sgMHgxNjMyLAkxNiwJezB4ZjAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZTUsIDB4ZWUsIDB4MzAsIDB4ZTcsIDB4MDgsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4MjQsIDB4MzgsIDB4ZjB9IH0sCit7IDB4MTY0MiwJMTYsCXsweDA1LCAweDg2LCAweGVlLCAweDU0LCAweDdmLCAweGZlLCAweDU0LCAweDA3LCAweGZiLCAweGVlLCAweDU0LCAweDc4LCAweDYwLCAweDMwLCAweDAzLCAweDAzfSB9LAoreyAweDE2NTIsCTE2LAl7MHgwMywgMHgzMCwgMHhlMywgMHgwNCwgMHg3NCwgMHgwNywgMHg3YiwgMHgwOCwgMHhmZCwgMHhmYywgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMH0gfSwKK3sgMHgxNjYyLAkxNiwJezB4ZTAsIDB4ZTAsIDB4ZGQsIDB4ZjYsIDB4ZWIsIDB4ZmUsIDB4NjAsIDB4MTksIDB4ZWMsIDB4NjQsIDB4MDcsIDB4NzAsIDB4MTEsIDB4OGIsIDB4MjQsIDB4OTB9IH0sCit7IDB4MTY3MiwJMTYsCXsweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwLCAweDgwLCAweDFiLCAweGUwLCAweGRlfSB9LAoreyAweDE2ODIsCTE0LAl7MHhmZCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMH0gfSwKK3sgMHgxNjkwLAkxNiwJezB4OTAsIDB4MjAsIDB4MDksIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4OTAsIDB4MjB9IH0sCit7IDB4MTZhMCwJMTYsCXsweDEyLCAweGUwLCAweDU0LCAweDNmLCAweDIwLCAweGUyLCAweDNhLCAweDIwLCAweGUxLCAweDBiLCAweDIwLCAweGU0LCAweDBiLCAweDIwLCAweGU1LCAweDE0fSB9LAoreyAweDE2YjAsCTE2LAl7MHg2MCwgMHgwOSwgMHgwMiwgMHgxMywgMHg0MywgMHgwMiwgMHgxNywgMHg4NywgMHgwMiwgMHgxMywgMHg0MywgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHhmNX0gfSwKK3sgMHgxNmMwLAkxNiwJezB4M2MsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4NDMsIDB4MmYsIDB4MDEsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NTMsIDB4ODJ9IH0sCit7IDB4MTZkMCwJMTYsCXsweGY4LCAweDQzLCAweDgyLCAweDA1LCAweGUwLCAweDQyLCAweDM4LCAweDUzLCAweDgyLCAweGZiLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDAyLCAweDEzfSB9LAoreyAweDE2ZTAsCTE2LAl7MHg0MywgMHgzMCwgMHhlMSwgMHgwMiwgMHg4MCwgMHhlOCwgMHhmNSwgMHg4NSwgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMiwgMHgwYSwgMHg1MywgMHg4MiwgMHhmOH0gfSwKK3sgMHgxNmYwLAkxNiwJezB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4ODUsIDB4MjAsIDB4ZTMsIDB4NTYsIDB4OTAsIDB4MjAsIDB4NTAsIDB4NzR9IH0sCit7IDB4MTcwMCwJMTYsCXsweDAyLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwfSB9LAoreyAweDE3MTAsCTE2LAl7MHg3ZiwgMHhlMywgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZCwgMHg4MCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NSwgMHhmMCwgMHhhMywgMHhlNSwgMHg4NCwgMHhmMH0gfSwKK3sgMHgxNzIwLAkxNiwJezB4MDUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZTUsIDB4ZTUsIDB4NDEsIDB4ZmQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4ZmUsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjB9IH0sCit7IDB4MTczMCwJMTYsCXsweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGRlLCAweGY2LCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4fSB9LAoreyAweDE3NDAsCTE2LAl7MHg3NCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhlZCwgMHhmMCwgMHg5MCwgMHgyMCwgMHgxMSwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMn0gfSwKK3sgMHgxNzUwLAkxNiwJezB4MTMsIDB4NDMsIDB4N2YsIDB4NDAsIDB4OTAsIDB4N2QsIDB4ODAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4MjAsIDB4MTAsIDB4ZTUsIDB4ODQsIDB4ZmUsIDB4MjR9IH0sCit7IDB4MTc2MCwJMTYsCXsweDA1LCAweGZkLCAweDhkLCAweDg0LCAweGUwLCAweDhlLCAweDg0LCAweDMwLCAweGUwLCAweDA5LCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1fSB9LAoreyAweDE3NzAsCTE2LAl7MHg4NiwgMHhkZiwgMHhlZiwgMHgwNSwgMHg4NiwgMHhjMywgMHg3NCwgMHg0MCwgMHg5ZiwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhhM30gfSwKK3sgMHgxNzgwLAkxNiwJezB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NTMsIDB4MmYsIDB4ZmEsIDB4ZTUsIDB4MjUsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MjV9IH0sCit7IDB4MTc5MCwJMTYsCXsweDAwLCAweGQyLCAweGU3LCAweGZlLCAweDgwLCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweGZlLCAweDcwLCAweDAzLCAweDAyLCAweDE4LCAweDIxfSB9LAoreyAweDE3YTAsCTE2LAl7MHg5MCwgMHgyMCwgMHg1MCwgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMH0gfSwKK3sgMHgxN2IwLAkxNiwJezB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2QsIDB4NDAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjB9IH0sCit7IDB4MTdjMCwJMTYsCXsweGEzLCAweGU1LCAweDg0LCAweGYwLCAweDA1LCAweDg2LCAweDkwLCAweDdmLCAweGU1LCAweGVlLCAweDMwLCAweGU3LCAweDA4LCAweDA1LCAweDg2LCAweGUwfSB9LAoreyAweDE3ZDAsCTE2LAl7MHgyNCwgMHgzOCwgMHhmMCwgMHgwNSwgMHg4NiwgMHhlZSwgMHg1NCwgMHg3ZiwgMHhmZSwgMHg1NCwgMHgwNywgMHhmYiwgMHhlZSwgMHg1NCwgMHg3OCwgMHg2MH0gfSwKK3sgMHgxN2UwLAkxNiwJezB4MzAsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MzAsIDB4ZTMsIDB4MDQsIDB4NzQsIDB4MDcsIDB4N2IsIDB4MDgsIDB4ZmQsIDB4ZmMsIDB4ZTAsIDB4ZTAsIDB4ZTB9IH0sCit7IDB4MTdmMCwJMTYsCXsweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGRkLCAweGY2LCAweGViLCAweGZlLCAweDYwLCAweDE5LCAweGVjLCAweDY0LCAweDA3LCAweDcwLCAweDExfSB9LAoreyAweDE4MDAsCTE2LAl7MHg4YiwgMHgyNSwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg4MH0gfSwKK3sgMHgxODEwLAkxNiwJezB4MWIsIDB4ZTAsIDB4ZGUsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDB9IH0sCit7IDB4MTgyMCwJMTYsCXsweGYwLCAweDkwLCAweDIwLCAweDExLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDkwfSB9LAoreyAweDE4MzAsCTE2LAl7MHgyMCwgMHgxYSwgMHhlMCwgMHg1NCwgMHgzZiwgMHgyMCwgMHhlMiwgMHgzYSwgMHgyMCwgMHhlMSwgMHgwYiwgMHgyMCwgMHhlNCwgMHgwYiwgMHgyMCwgMHhlNX0gfSwKK3sgMHgxODQwLAkxNiwJezB4MTQsIDB4NjAsIDB4MDksIDB4MDIsIDB4MTMsIDB4NDMsIDB4MDIsIDB4MTksIDB4MTgsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTB9IH0sCit7IDB4MTg1MCwJMTYsCXsweGY1LCAweDNkLCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDQzLCAweDMwLCAweDAxLCAweDAyLCAweDEzLCAweDQzLCAweDUzfSB9LAoreyAweDE4NjAsCTE2LAl7MHg4MiwgMHhmOCwgMHg0MywgMHg4MiwgMHgwNSwgMHhlMCwgMHg0MiwgMHgzOSwgMHg1MywgMHg4MiwgMHhmYiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHgwMn0gfSwKK3sgMHgxODcwLAkxNiwJezB4MTMsIDB4NDMsIDB4MzAsIDB4ZTEsIDB4MDIsIDB4ODAsIDB4ZTgsIDB4ZjUsIDB4ODUsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTMsIDB4MGEsIDB4NTMsIDB4ODJ9IH0sCit7IDB4MTg4MCwJMTYsCXsweGY4LCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDg1LCAweDIwLCAweGUzLCAweDU2LCAweDkwLCAweDIwLCAweDUwfSB9LAoreyAweDE4OTAsCTE2LAl7MHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMH0gfSwKK3sgMHgxOGEwLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2QsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODR9IH0sCit7IDB4MThiMCwJMTYsCXsweGYwLCAweDA1LCAweDg2LCAweDkwLCAweDdmLCAweGU1LCAweGU1LCAweDQyLCAweGZkLCAweDAzLCAweDAzLCAweDAzLCAweGZlLCAweGYwLCAweGYwLCAweGYwfSB9LAoreyAweDE4YzAsCTE2LAl7MHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhkZSwgMHhmNiwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMH0gfSwKK3sgMHgxOGQwLAkxNiwJezB4NTgsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZWQsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjB9IH0sCit7IDB4MThlMCwJMTYsCXsweDAyLCAweDEzLCAweDQzLCAweDdmLCAweDQwLCAweDkwLCAweDdkLCAweDAwLCAweDA1LCAweDg2LCAweDkwLCAweDIwLCAweDE4LCAweGU1LCAweDg0LCAweGZlfSB9LAoreyAweDE4ZjAsCTE2LAl7MHgyNCwgMHgwNSwgMHhmZCwgMHg4ZCwgMHg4NCwgMHhlMCwgMHg4ZSwgMHg4NCwgMHgzMCwgMHhlMCwgMHgwOSwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhM30gfSwKK3sgMHgxOTAwLAkxNiwJezB4MDUsIDB4ODYsIDB4ZGYsIDB4ZWYsIDB4MDUsIDB4ODYsIDB4YzMsIDB4NzQsIDB4NDAsIDB4OWYsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZjAsIDB4MDUsIDB4ODZ9IH0sCit7IDB4MTkxMCwJMTYsCXsweGEzLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDMwLCAweGZhLCAweGU1LCAweDI2LCAweDYwLCAweDA4LCAweDc1fSB9LAoreyAweDE5MjAsCTE2LAl7MHgyNiwgMHgwMCwgMHhkMiwgMHhlNywgMHhmZSwgMHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgxOX0gfSwKK3sgMHgxOTMwLAkxNiwJezB4YjIsIDB4OTAsIDB4MjAsIDB4NTAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTJ9IH0sCit7IDB4MTk0MCwJMTYsCXsweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGUzLCAweDA1LCAweDg2LCAweDkwLCAweDdjLCAweGMwLCAweDA1LCAweDg2LCAweGU1LCAweDg1fSB9LAoreyAweDE5NTAsCTE2LAl7MHhmMCwgMHhhMywgMHhlNSwgMHg4NCwgMHhmMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhlNSwgMHhlZSwgMHgzMCwgMHhlNywgMHgwOCwgMHgwNSwgMHg4Nn0gfSwKK3sgMHgxOTYwLAkxNiwJezB4ZTAsIDB4MjQsIDB4MzgsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZWUsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NTQsIDB4MDcsIDB4ZmIsIDB4ZWUsIDB4NTQsIDB4Nzh9IH0sCit7IDB4MTk3MCwJMTYsCXsweDYwLCAweDMwLCAweDAzLCAweDAzLCAweDAzLCAweDMwLCAweGUzLCAweDA0LCAweDc0LCAweDA3LCAweDdiLCAweDA4LCAweGZkLCAweGZjLCAweGUwLCAweGUwfSB9LAoreyAweDE5ODAsCTE2LAl7MHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhkZCwgMHhmNiwgMHhlYiwgMHhmZSwgMHg2MCwgMHgxOSwgMHhlYywgMHg2NCwgMHgwNywgMHg3MH0gfSwKK3sgMHgxOTkwLAkxNiwJezB4MTEsIDB4OGIsIDB4MjYsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MTlhMCwJMTYsCXsweDgwLCAweDFiLCAweGUwLCAweGRlLCAweGZkLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0fSB9LAoreyAweDE5YjAsCTE2LAl7MHgwMCwgMHhmMCwgMHg5MCwgMHgyMCwgMHgxOSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHgwMiwgMHgxMywgMHg0M30gfSwKK3sgMHgxOWMwLAkxLAl7MHgzMn0gfSwKK3sgMHgxOWMxLAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHgxOWM1LAkxNiwJezB4NzksIDB4MDYsIDB4ZWQsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmEsIDB4YTMsIDB4ZTAsIDB4ZmJ9IH0sCit7IDB4MTlkNSwJMTYsCXsweDRhLCAweDcwLCAweDAzLCAweDAyLCAweDFiLCAweDA5LCAweGU5LCAweGI0LCAweDA3LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDFhLCAweGRiLCAweDkwfSB9LAoreyAweDE5ZTUsCTE2LAl7MHgxOSwgMHhlYiwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHgxYSwgMHhiOSwgMHgwMiwgMHgxYSwgMHg3MSwgMHgwMiwgMHgxYSwgMHg1YSwgMHgwMn0gfSwKK3sgMHgxOWY1LAkxNiwJezB4MWEsIDB4NDAsIDB4MDIsIDB4MWEsIDB4MmYsIDB4MDIsIDB4MWEsIDB4MWEsIDB4MDIsIDB4MWEsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MWEwNSwJMTYsCXsweDgwLCAweGYwLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweDI1LCAweGUwLCAweDQ0LCAweGEwLCAweDkwLCAweDdmLCAweGE2fSB9LAoreyAweDFhMTUsCTE2LAl7MHhmMCwgMHgxOSwgMHgwMiwgMHgxYSwgMHhkYiwgMHgxOSwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHhjMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwYX0gfSwKK3sgMHgxYTI1LAkxNiwJezB4YTMsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4MDIsIDB4MWEsIDB4ZGIsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4YTN9IH0sCit7IDB4MWEzNSwJMTYsCXsweGUwLCAweGEzLCAweGUwLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDE5LCAweDAyLCAweDFhLCAweGRiLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDFhNDUsCTE2LAl7MHg4MCwgMHhmMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHgyNSwgMHhlMCwgMHg0NCwgMHhhMSwgMHg5MCwgMHg3ZiwgMHhhNn0gfSwKK3sgMHgxYTU1LAkxNiwJezB4ZjAsIDB4MTksIDB4MDIsIDB4MWEsIDB4ZGIsIDB4ZWIsIDB4NjQsIDB4MDEsIDB4NGEsIDB4NzAsIDB4MDgsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MWE2NSwJMTYsCXsweDIwLCAweGYwLCAweDE5LCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGY1LCAweDU5LCAweDE5LCAweDgwLCAweDZhLCAweGVkLCAweDI0LCAweDA0LCAweGY1fSB9LAoreyAweDFhNzUsCTE2LAl7MHg4MiwgMHhlNCwgMHgzYywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHg2NCwgMHgwMiwgMHg0ZSwgMHg3MCwgMHgwOCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgxYTg1LAkxNiwJezB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4MTksIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmYsIDB4ZWQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4MWE5NSwJMTYsCXsweGU0LCAweDNjLCAweGY1LCAweDgzLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzfSB9LAoreyAweDFhYTUsCTE2LAl7MHhlZiwgMHhmMCwgMHhlZCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYywgMHhmNSwgMHg4MywgMHg3NCwgMHhmZiwgMHhmNSwgMHhmMCwgMHgxMn0gfSwKK3sgMHgxYWI1LAkxNiwJezB4YTIsIDB4ODEsIDB4ODAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmZ9IH0sCit7IDB4MWFjNSwJMTYsCXsweGVkLCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDNjLCAweGY1LCAweDgzLCAweGUwLCAweGZhLCAweGEzLCAweGUwLCAweGY1LCAweDgyLCAweDhhfSB9LAoreyAweDFhZDUsCTE2LAl7MHg4MywgMHhlZiwgMHhmMCwgMHg3ZiwgMHgwOCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHhmNSwgMHg1OSwgMHgzMCwgMHhlMCwgMHhmNywgMHgzMH0gfSwKK3sgMHgxYWU1LAkxNiwJezB4ZTIsIDB4MDcsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDYsIDB4MjIsIDB4ZTksIDB4ZDMsIDB4OTQsIDB4MDIsIDB4NTAsIDB4MDMsIDB4MDJ9IH0sCit7IDB4MWFmNSwJMTYsCXsweDE5LCAweGM3LCAweGU1LCAweDU5LCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDE5LCAweGM3LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwfSB9LAoreyAweDFiMDUsCTYsCXsweGYwLCAweDdmLCAweDA3LCAweDIyLCAweDdmLCAweDA4fSB9LAoreyAweDFiMGIsCTEsCXsweDIyfSB9LAoreyAweDFiMGMsCTE2LAl7MHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgxYywgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg3ZiwgMHgwMn0gfSwKK3sgMHgxYjFjLAkxNiwJezB4N2QsIDB4ZmYsIDB4MTIsIDB4ODIsIDB4ZWEsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4N2YsIDB4MDMsIDB4N2QsIDB4ZmZ9IH0sCit7IDB4MWIyYywJNCwJezB4MTIsIDB4ODIsIDB4ZWEsIDB4MjJ9IH0sCit7IDB4ODAwMCwJMTYsCXsweDdiLCAweGZmLCAweDdhLCAweDEyLCAweDc5LCAweDFiLCAweDkwLCAweDAwLCAweDA0LCAweDEyLCAweGEyLCAweDU0LCAweGZkLCAweDhiLCAweDUwLCAweDc1fSB9LAoreyAweDgwMTAsCTE2LAl7MHg1MSwgMHgxMiwgMHg3NSwgMHg1MiwgMHgyNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhlMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMCwgMHhmMCwgMHhmNSwgMHg0ZX0gfSwKK3sgMHg4MDIwLAkxNiwJezB4ZjUsIDB4NGYsIDB4OTAsIDB4MDIsIDB4YWUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4ODAzMCwJMTYsCXsweGE5LCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweGU0LCAweGZjLCAweGVjLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1fSB9LAoreyAweDgwNDAsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHgwYywgMHhiYywgMHgxMCwgMHhlZSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkZH0gfSwKK3sgMHg4MDUwLAkxNiwJezB4ZjAsIDB4YWYsIDB4MDUsIDB4MWQsIDB4ZWYsIDB4NzAsIDB4MDMsIDB4MDIsIDB4ODEsIDB4YzYsIDB4YWIsIDB4NTAsIDB4YWEsIDB4NTEsIDB4YTksIDB4NTJ9IH0sCit7IDB4ODA2MCwJMTYsCXsweDkwLCAweDAwLCAweDAxLCAweDEyLCAweGEyLCAweDU0LCAweDY0LCAweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDgxLCAweGI1LCAweDkwLCAweDAwLCAweDAzfSB9LAoreyAweDgwNzAsCTE2LAl7MHgxMiwgMHhhMiwgMHg1NCwgMHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHg4MSwgMHgzYywgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHhhMiwgMHg1NH0gfSwKK3sgMHg4MDgwLAkxNiwJezB4ZmYsIDB4NTQsIDB4N2YsIDB4ZmMsIDB4ZDMsIDB4OTQsIDB4MDcsIDB4NTAsIDB4MDMsIDB4MDIsIDB4ODEsIDB4MTYsIDB4ZWMsIDB4YzMsIDB4OTQsIDB4MTB9IH0sCit7IDB4ODA5MCwJMTYsCXsweDQwLCAweDAzLCAweDAyLCAweDgxLCAweDE2LCAweGVmLCAweDMwLCAweGU3LCAweDQyLCAweGU1LCAweDRmLCAweGFlLCAweDRlLCAweDc4LCAweDAyLCAweGNlfSB9LAoreyAweDgwYTAsCTE2LAl7MHhjMywgMHgxMywgMHhjZSwgMHgxMywgMHhkOCwgMHhmOSwgMHhmZiwgMHg3NCwgMHhmMCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNX0gfSwKK3sgMHg4MGIwLAkxNiwJezB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTAsIDB4ZTAsIDB4ZmYsIDB4ZWMsIDB4MjQsIDB4ZjgsIDB4ZmUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDZ9IH0sCit7IDB4ODBjMCwJMTYsCXsweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDRmLCAweDkwLCAweDdmLCAweGUwLCAweGYwLCAweDkwLCAweDAyLCAweGFlLCAweGUwfSB9LAoreyAweDgwZDAsCTE2LAl7MHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZCwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHgzZSwgMHhlNSwgMHg0ZiwgMHhhZSwgMHg0ZSwgMHg3OH0gfSwKK3sgMHg4MGUwLAkxNiwJezB4MDIsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4NzQsIDB4ZTgsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzR9IH0sCit7IDB4ODBmMCwJMTYsCXsweDdmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweGUxLCAweGUwLCAweGZmLCAweGVjLCAweDI0LCAweGY4LCAweGZlLCAweDc0LCAweDAxfSB9LAoreyAweDgxMDAsCTE2LAl7MHhhOCwgMHgwNiwgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhlMSwgMHhmMCwgMHg5MCwgMHgwMn0gfSwKK3sgMHg4MTEwLAkxNiwJezB4YWUsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4YTIsIDB4NTQsIDB4MjV9IH0sCit7IDB4ODEyMCwJMTYsCXsweDRmLCAweGY1LCAweDRmLCAweGU0LCAweDM1LCAweDRlLCAweGY1LCAweDRlLCAweDkwLCAweDAwLCAweDA1LCAweDEyLCAweGEyLCAweDU0LCAweGZlLCAweGU0fSB9LAoreyAweDgxMzAsCTE2LAl7MHgyNSwgMHg0ZiwgMHhmNSwgMHg0ZiwgMHhlZSwgMHgzNSwgMHg0ZSwgMHhmNSwgMHg0ZSwgMHgwMiwgMHg4MSwgMHhiOCwgMHhhYiwgMHg1MCwgMHhhYSwgMHg1MX0gfSwKK3sgMHg4MTQwLAkxNiwJezB4YTksIDB4NTIsIDB4OTAsIDB4MDAsIDB4MDMsIDB4MTIsIDB4YTIsIDB4NTQsIDB4ZmYsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDUsIDB4ZWYsIDB4NjQsIDB4MDN9IH0sCit7IDB4ODE1MCwJMTYsCXsweDcwLCAweDYwLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweGEyLCAweDU0LCAweGZmLCAweDU0LCAweDdmLCAweGZjLCAweGQzLCAweDk0LCAweDA3LCAweDUwfSB9LAoreyAweDgxNjAsCTE2LAl7MHg0ZSwgMHhlZiwgMHgzMCwgMHhlNywgMHgxZSwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhlMCwgMHhmZiwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNCwgMHgwOCwgMHg4MH0gfSwKK3sgMHg4MTcwLAkxNiwJezB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZmUsIDB4NGYsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWMsIDB4ZTAsIDB4NGV9IH0sCit7IDB4ODE4MCwJMTYsCXsweGYwLCAweDgwLCAweDM1LCAweDkwLCAweDdmLCAweGRmLCAweGUwLCAweGZmLCAweDc0LCAweDAxLCAweGE4LCAweDA0LCAweDA4LCAweDgwLCAweDAyLCAweGMzfSB9LAoreyAweDgxOTAsCTE2LAl7MHgzMywgMHhkOCwgMHhmYywgMHhmZSwgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZCwgMHhlMCwgMHg0ZSwgMHhmMCwgMHhlY30gfSwKK3sgMHg4MWEwLAkxNiwJezB4MjUsIDB4ZTAsIDB4MjQsIDB4YzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4ODAsIDB4MDksIDB4N2Z9IH0sCit7IDB4ODFiMCwJMTYsCXsweGZmLCAweDIyLCAweDdmLCAweGZmLCAweDIyLCAweDdmLCAweGZmLCAweDIyLCAweDc0LCAweDA3LCAweDI1LCAweDUyLCAweGY1LCAweDUyLCAweGU0LCAweDM1fSB9LAoreyAweDgxYzAsCTE2LAl7MHg1MSwgMHhmNSwgMHg1MSwgMHgwMiwgMHg4MCwgMHg1MSwgMHgyMCwgMHgwMywgMHgwZCwgMHg5MCwgMHgwMiwgMHhhZSwgMHhlMCwgMHg2MCwgMHgwNywgMHg5MH0gfSwKK3sgMHg4MWQwLAk4LAl7MHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4MWQ4LAkxLAl7MHgyMn0gfSwKK3sgMHg4MWQ5LAk0LAl7MHg4ZSwgMHg1OSwgMHg4ZiwgMHg1YX0gfSwKK3sgMHg4MWRkLAkxNiwJezB4NzUsIDB4NWIsIDB4MDMsIDB4ZTUsIDB4NWEsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTksIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmV9IH0sCit7IDB4ODFlZCwJMTYsCXsweGEzLCAweGUwLCAweDRlLCAweDcwLCAweDAzLCAweDAyLCAweDgyLCAweGU3LCAweGU1LCAweDViLCAweDYwLCAweDRlLCAweDE0LCAweDYwLCAweDM4LCAweDE0fSB9LAoreyAweDgxZmQsCTE2LAl7MHg2MCwgMHgyMCwgMHgxNCwgMHg2MCwgMHgwMywgMHgwMiwgMHg4MiwgMHg4YiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4NX0gfSwKK3sgMHg4MjBkLAkxNiwJezB4NWEsIDB4ODIsIDB4ODUsIDB4NTksIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4YTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjB9IH0sCit7IDB4ODIxZCwJMTYsCXsweDgwLCAweDZjLCAweDg1LCAweDVhLCAweDgyLCAweDg1LCAweDU5LCAweDgzLCAweGUwLCAweGMzLCAweDk0LCAweDIwLCAweDQwLCAweDA5LCAweGEzLCAweGEzfSB9LAoreyAweDgyMmQsCTE2LAl7MHhlMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHg4MCwgMHg1NywgMHgxNSwgMHg1YiwgMHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhhM30gfSwKK3sgMHg4MjNkLAkxNiwJezB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ODAsIDB4NDQsIDB4ZTUsIDB4NWEsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4ODI0ZCwJMTYsCXsweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDgzLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1fSB9LAoreyAweDgyNWQsCTE2LAl7MHg4MywgMHhlMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHhlNSwgMHg1YSwgMHgyNH0gfSwKK3sgMHg4MjZkLAkxNiwJezB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTksIDB4ZjUsIDB4ODMsIDB4NzQsIDB4ZmYsIDB4ZjUsIDB4ZjAsIDB4MTIsIDB4YTIsIDB4ODEsIDB4ODV9IH0sCit7IDB4ODI3ZCwJMTYsCXsweDVhLCAweDgyLCAweDg1LCAweDU5LCAweDgzLCAweGEzLCAweGEzLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDgxLCAweDkwLCAweDdmfSB9LAoreyAweDgyOGQsCTE2LAl7MHhhNSwgMHhlMCwgMHhmNSwgMHg1YywgMHgzMCwgMHhlMCwgMHhmNywgMHgzMCwgMHhlMiwgMHgwNywgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNn0gfSwKK3sgMHg4MjlkLAkxNiwJezB4MjIsIDB4ZTUsIDB4NWMsIDB4MjAsIDB4ZTEsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDcsIDB4MjJ9IH0sCit7IDB4ODJhZCwJMTYsCXsweGU1LCAweDViLCAweDcwLCAweDMxLCAweDdmLCAweDAxLCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDgyYmQsCTE2LAl7MHg4MCwgMHhmMCwgMHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHgyNSwgMHhlMCwgMHg0NCwgMHhhMCwgMHg5MH0gfSwKK3sgMHg4MmNkLAkxNiwJezB4N2YsIDB4YTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4ZjUsIDB4NWMsIDB4MzAsIDB4ZTAsIDB4ZjcsIDB4MzAsIDB4ZTEsIDB4ZDUsIDB4NzV9IH0sCit7IDB4ODJkZCwJMTIsCXsweDViLCAweDAzLCAweDAyLCAweDgxLCAweGUwLCAweDE1LCAweDViLCAweDAyLCAweDgxLCAweGUwLCAweDdmLCAweDA4fSB9LAoreyAweDgyZTksCTEsCXsweDIyfSB9LAoreyAweDgyZWEsCTIsCXsweGFlLCAweDA3fSB9LAoreyAweDgyZWMsCTE2LAl7MHg3YywgMHgwMiwgMHhlYywgMHgxNCwgMHg2MCwgMHgxNSwgMHgxNCwgMHg3MCwgMHgxZSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMH0gfSwKK3sgMHg4MmZjLAkxNiwJezB4ZWUsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZWQsIDB4ZjB9IH0sCit7IDB4ODMwYywJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweGZiLCAweDMwLCAweGUwLCAweGY4LCAweGJjfSB9LAoreyAweDgzMWMsCTE2LAl7MHgwMiwgMHgwYSwgMHgyMCwgMHhlMSwgMHgwNywgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlYiwgMHgzMCwgMHhlMiwgMHgwYX0gfSwKK3sgMHg4MzJjLAkxNCwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDYsIDB4MjIsIDB4ZGMsIDB4YjYsIDB4N2YsIDB4MDh9IH0sCit7IDB4ODMzYSwJMSwJezB4MjJ9IH0sCit7IDB4ODMzYiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMyLCAweGE5LCAweDkwLCAweDAzLCAweDAwLCAweDc0LCAweDE5LCAweGYwLCAweGQyLCAweGE5fSB9LAoreyAweDgzNGIsCTE1LAl7MHg1MywgMHg5MSwgMHg3ZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhlNCwgMHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHg4MzVhLAkxNiwJezB4ZWYsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWIsIDB4ODIsIDB4ZmEsIDB4ZjV9IH0sCit7IDB4ODM2YSwJMTYsCXsweDgzLCAweGEzLCAweGU0LCAweGYwLCAweDhiLCAweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweGY1LCAweDYxLCAweDc0LCAweGJmfSB9LAoreyAweDgzN2EsCTE2LAl7MHhmMCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhM30gfSwKK3sgMHg4MzhhLAkxNiwJezB4YTMsIDB4YTMsIDB4ZTQsIDB4ZjAsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTMsIDB4ZjAsIDB4ZjksIDB4ZWQsIDB4NjAsIDB4MWQsIDB4NzQsIDB4MDF9IH0sCit7IDB4ODM5YSwJMTYsCXsweDdlLCAweDAwLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDA1LCAweGMzLCAweDMzLCAweGNlLCAweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweGU0fSB9LAoreyAweDgzYWEsCTE2LAl7MHhlZiwgMHg1NSwgMHgzMSwgMHg2MCwgMHgwNCwgMHg3OSwgMHgwOSwgMHg4MCwgMHgwMiwgMHg3OSwgMHgwZCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhM30gfSwKK3sgMHg4M2JhLAkxNiwJezB4YTMsIDB4YTMsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4OGJ9IH0sCit7IDB4ODNjYSwJMTYsCXsweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGU1LCAweDYxLCAweGYwLCAweGFlLCAweDAyLCAweGFmLCAweDAzLCAweDhmLCAweDgyLCAweDhlfSB9LAoreyAweDgzZGEsCTQsCXsweDgzLCAweGEzLCAweGU5LCAweGYwfSB9LAoreyAweDgzZGUsCTEsCXsweDIyfSB9LAoreyAweDgzZGYsCTQsCXsweDhmLCAweDYxLCAweDhkLCAweDYyfSB9LAoreyAweDgzZTMsCTE2LAl7MHhlNCwgMHhmNSwgMHg2NywgMHg3NCwgMHgzZiwgMHgyZiwgMHhmOCwgMHg3NiwgMHgwOCwgMHg3ZiwgMHg4MCwgMHg3ZSwgMHgyNSwgMHg3ZCwgMHgwMCwgMHg3Y30gfSwKK3sgMHg4M2YzLAkxNiwJezB4MDAsIDB4YWIsIDB4NjYsIDB4YWEsIDB4NjUsIDB4YTksIDB4NjQsIDB4YTgsIDB4NjMsIDB4ZDMsIDB4MTIsIDB4YTMsIDB4YjMsIDB4NDAsIDB4MjYsIDB4N2Z9IH0sCit7IDB4ODQwMywJMTYsCXsweDAwLCAweDdlLCAweDk2LCAweDdkLCAweDAwLCAweDdjLCAweDAwLCAweGE4LCAweDYzLCAweGQzLCAweDEyLCAweGEzLCAweGIzLCAweDUwLCAweDBjLCAweDc1fSB9LAoreyAweDg0MTMsCTE2LAl7MHg2NywgMHg0MCwgMHg3NCwgMHgzZiwgMHgyNSwgMHg2MSwgMHhmOCwgMHg3NiwgMHgxMCwgMHg4MCwgMHgwYSwgMHg3NSwgMHg2NywgMHg4MCwgMHg3NCwgMHgzZn0gfSwKK3sgMHg4NDIzLAkxNiwJezB4MjUsIDB4NjEsIDB4ZjgsIDB4NzYsIDB4MzgsIDB4ZTUsIDB4NjcsIDB4NDUsIDB4NjIsIDB4NDQsIDB4MDEsIDB4ZmYsIDB4ZTUsIDB4NjEsIDB4NzUsIDB4ZjB9IH0sCit7IDB4ODQzMywJMTMsCXsweDA4LCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGVmLCAweGYwfSB9LAoreyAweDg0NDAsCTEsCXsweDIyfSB9LAoreyAweDg0NDEsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmNSwgMHg1NywgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMn0gfSwKK3sgMHg4NDUxLAkxNiwJezB4ZTUsIDB4NTcsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZjV9IH0sCit7IDB4ODQ2MSwJMTYsCXsweDU4LCAweDhmLCAweDU5LCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweDI0LCAweGM2LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfSB9LAoreyAweDg0NzEsCTE2LAl7MHhlMCwgMHgyMCwgMHhlMSwgMHgwZiwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMCwgMHgyNCwgMHhjNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNX0gfSwKK3sgMHg4NDgxLAkxNiwJezB4ODMsIDB4ZTQsIDB4ZjAsIDB4NzQsIDB4MjMsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4ZTQsIDB4ZjYsIDB4ZTUsIDB4NTksIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4ODQ5MSwJMTYsCXsweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAzLCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0fSB9LAoreyAweDg0YTEsCTE2LAl7MHgwMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4NGIxLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4YWYsIDB4NTcsIDB4MTIsIDB4ODN9IH0sCit7IDB4ODRjMSwJMTYsCXsweGRmLCAweGFmLCAweDU3LCAweDdkLCAweDAxLCAweDEyLCAweDgzLCAweDVhLCAweDg1LCAweDU5LCAweDgyLCAweDg1LCAweDU4LCAweDgzLCAweGEzLCAweGEzfSB9LAoreyAweDg0ZDEsCTE2LAl7MHhlMCwgMHgyMCwgMHhlMCwgMHg0MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg1OSwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1OCwgMHhmNX0gfSwKK3sgMHg4NGUxLAkxNiwJezB4ODMsIDB4ZTAsIDB4ZTUsIDB4NTksIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTV9IH0sCit7IDB4ODRmMSwJMTYsCXsweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGUwLCAweGZjfSB9LAoreyAweDg1MDEsCTE2LAl7MHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmNSwgMHg2NiwgMHg4ZSwgMHg2NSwgMHg4ZCwgMHg2NCwgMHg4YywgMHg2M30gfSwKK3sgMHg4NTExLAkxNiwJezB4N2QsIDB4MDYsIDB4YWYsIDB4NTcsIDB4MTIsIDB4ODMsIDB4ZGYsIDB4NzQsIDB4ZjgsIDB4MjUsIDB4NTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDJ9IH0sCit7IDB4ODUyMSwJMTYsCXsweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweGZmLCAweGMzLCAweDc0LCAweDBjLCAweDlmLCAweDc1LCAweGYwLCAweDQwfSB9LAoreyAweDg1MzEsCTE2LAl7MHhhNCwgMHgyNCwgMHg0MCwgMHhmNSwgMHg4MiwgMHhlNSwgMHhmMCwgMHgzNCwgMHg3YiwgMHhhZiwgMHg4MiwgMHhmZSwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMH0gfSwKK3sgMHg4NTQxLAkxNiwJezB4MjQsIDB4ZWYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4YWYsIDB4NTd9IH0sCit7IDB4ODU1MSwJMTUsCXsweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDQyLCAweDM0LCAweDdmLCAweDAwfSB9LAoreyAweDg1NjAsCTEsCXsweDIyfSB9LAoreyAweDg1NjEsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmNSwgMHg1NywgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMn0gfSwKK3sgMHg4NTcxLAkxNiwJezB4YWYsIDB4NTcsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4ODMsIDB4NWEsIDB4NzQsIDB4ZjgsIDB4MjUsIDB4NTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDJ9IH0sCit7IDB4ODU4MSwJMTYsCXsweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDg1OTEsCTE2LAl7MHgyMCwgMHhhZiwgMHg4MiwgMHhmNSwgMHg1OSwgMHg4ZiwgMHg1YSwgMHhmNSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNH0gfSwKK3sgMHg4NWExLAkxNiwJezB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4NTcsIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MGN9IH0sCit7IDB4ODViMSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0fSB9LAoreyAweDg1YzEsCTE2LAl7MHgwMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4NWQxLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4YWYsIDB4NTcsIDB4MTIsIDB4ODN9IH0sCit7IDB4ODVlMSwJMTYsCXsweGRmLCAweGU1LCAweDVhLCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUwLCAweDA5fSB9LAoreyAweDg1ZjEsCTE2LAl7MHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1OCwgMHhhZiwgMHg1NywgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOH0gfSwKK3sgMHg4NjAxLAkxNiwJezB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjQsIDB4NTIsIDB4MzQsIDB4ZTUsIDB4NTcsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YzYsIDB4ZjV9IH0sCit7IDB4ODYxMSwJMTYsCXsweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDIwLCAweGUxLCAweDBmLCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweDI0LCAweGM3fSB9LAoreyAweDg2MjEsCTExLAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4NjJjLAkxLAl7MHgyMn0gfSwKK3sgMHg4NjJkLAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4NjMxLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4NTksIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjJ9IH0sCit7IDB4ODY0MSwJMTYsCXsweGU1LCAweDU5LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDg2NTEsCTE2LAl7MHg1NCwgMHgwMywgMHg3MCwgMHg2NiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHgzMCwgMHhlMCwgMHgyOCwgMHhlNX0gfSwKK3sgMHg4NjYxLAkxNiwJezB4NTksIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmN9IH0sCit7IDB4ODY3MSwJMTYsCXsweGEzLCAweGUwLCAweGZkLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkLCAweDY0LCAweDhjLCAweDYzfSB9LAoreyAweDg2ODEsCTE2LAl7MHg3ZCwgMHgwMiwgMHhhZiwgMHg1OSwgMHgxMiwgMHg4MywgMHhkZiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHgzMH0gfSwKK3sgMHg4NjkxLAkxNiwJezB4ZTEsIDB4MjgsIDB4ZTUsIDB4NTksIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjV9IH0sCit7IDB4ODZhMSwJMTYsCXsweDgzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkfSB9LAoreyAweDg2YjEsCTEyLAl7MHg2NCwgMHg4YywgMHg2MywgMHg3ZCwgMHgwNCwgMHhhZiwgMHg1OSwgMHgxMiwgMHg4MywgMHhkZiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4NmJkLAkxLAl7MHgyMn0gfSwKK3sgMHg4NmJlLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4ZWR9IH0sCit7IDB4ODZjZSwJMTYsCXsweDZjLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGMwLCAweDgzLCAweGMwfSB9LAoreyAweDg2ZGUsCTE2LAl7MHg4MiwgMHhlMCwgMHhmZCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmYywgMHhlZCwgMHg2YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMH0gfSwKK3sgMHg4NmVlLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4ZWMsIDB4NmQsIDB4ZDB9IH0sCit7IDB4ODZmZSwJMTYsCXsweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZkLCAweDhmfSB9LAoreyAweDg3MGUsCTE2LAl7MHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmYywgMHhlZCwgMHg2YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHg4ZiwgMHg4Mn0gfSwKK3sgMHg4NzFlLAkxNiwJezB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4ZTB9IH0sCit7IDB4ODcyZSwJMTYsCXsweGZjLCAweGVkLCAweDZjLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGMwLCAweDgzLCAweGMwfSB9LAoreyAweDg3M2UsCTE2LAl7MHg4MiwgMHhlMCwgMHhmZCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmZiwgMHhlZCwgMHg2ZiwgMHhkMCwgMHg4MiwgMHhkMH0gfSwKK3sgMHg4NzRlLAkzLAl7MHg4MywgMHhmMCwgMHgyMn0gfSwKK3sgMHg4NzUxLAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHg4NzU1LAkxNiwJezB4NzksIDB4MGQsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmZ9IH0sCit7IDB4ODc2NSwJMTYsCXsweDIyLCAweDhjLCAweDU3LCAweDhkLCAweDU4LCAweGVlLCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDg3NzUsCTE2LAl7MHgwMywgMHhhZiwgMHg4MiwgMHhmZSwgMHhhZCwgMHgwMSwgMHgxOSwgMHhlZCwgMHg2MCwgMHgyNCwgMHgwZiwgMHhlZiwgMHhhYywgMHgwNiwgMHg3MCwgMHgwMX0gfSwKK3sgMHg4Nzg1LAkxNiwJezB4MGUsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MDUsIDB4NTgsIDB4ZTUsIDB4NTgsIDB4YWEsIDB4NTcsIDB4NzAsIDB4MDJ9IH0sCit7IDB4ODc5NSwJMTYsCXsweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDZkLCAweDYwLCAweGQ5LCAweDdmLCAweDAxLCAweDIyLCAweDdmLCAweDAwfSB9LAoreyAweDg3YTUsCTEsCXsweDIyfSB9LAoreyAweDg3YTYsCTQsCXsweDhlLCAweDU3LCAweDhmLCAweDU4fSB9LAoreyAweDg3YWEsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmNSwgMHg1ZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMn0gfSwKK3sgMHg4N2JhLAkxNiwJezB4ZTUsIDB4NWUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZjV9IH0sCit7IDB4ODdjYSwJMTYsCXsweDVmLCAweDhmLCAweDYwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGEzfSB9LAoreyAweDg3ZGEsCTE2LAl7MHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg3YiwgMHgwOCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3OCwgMHgwMCwgMHhkMywgMHgxMiwgMHhhM30gfSwKK3sgMHg4N2VhLAkxNiwJezB4YjMsIDB4NDAsIDB4MTAsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4MTIsIDB4YTMsIDB4ZmEsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4ODdmYSwJMTYsCXsweDA4LCAweDgwLCAweDJlLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGEzfSB9LAoreyAweDg4MGEsCTE2LAl7MHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwOCwgMHg3OSwgMHgwNywgMHg3OCwgMHgwMCwgMHhjMywgMHgxMiwgMHhhM30gfSwKK3sgMHg4ODFhLAkxNiwJezB4YjMsIDB4NTAsIDB4MGUsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4MTIsIDB4YTMsIDB4ZmEsIDB4MDAsIDB4MDcsIDB4MDh9IH0sCit7IDB4ODgyYSwJMTYsCXsweDAwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGY4LCAweGEzLCAweGUwLCAweGY5LCAweGEzLCAweGUwLCAweGZhfSB9LAoreyAweDg4M2EsCTE2LAl7MHhhMywgMHhlMCwgMHhmYiwgMHg3ZiwgMHgwMCwgMHg3ZSwgMHg1MCwgMHg3ZCwgMHg0NiwgMHg3YywgMHgwMCwgMHgxMiwgMHhhMywgMHgyMSwgMHg4ZiwgMHg1Y30gfSwKK3sgMHg4ODRhLAkxNiwJezB4OGUsIDB4NWIsIDB4OGQsIDB4NWEsIDB4OGMsIDB4NTksIDB4N2IsIDB4MGEsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzgsIDB4MDAsIDB4MTIsIDB4YTN9IH0sCit7IDB4ODg1YSwJMTYsCXsweDIxLCAweGFmLCAweDAzLCAweDhmLCAweDVkLCAweGFmLCAweDVjLCAweGFlLCAweDViLCAweGFkLCAweDVhLCAweGFjLCAweDU5LCAweDdiLCAweDBhLCAweDdhfSB9LAoreyAweDg4NmEsCTE2LAl7MHgwMCwgMHg3OSwgMHgwMCwgMHg3OCwgMHgwMCwgMHgxMiwgMHhhMywgMHgyMSwgMHg4ZiwgMHg1YywgMHg4ZSwgMHg1YiwgMHg4ZCwgMHg1YSwgMHg4YywgMHg1OX0gfSwKK3sgMHg4ODdhLAkxNiwJezB4ZTUsIDB4NWQsIDB4YzMsIDB4OTQsIDB4MDUsIDB4NDAsIDB4MTUsIDB4ZTUsIDB4NWMsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4NWMsIDB4ZTQsIDB4MzUsIDB4NWJ9IH0sCit7IDB4ODg4YSwJMTYsCXsweGY1LCAweDViLCAweGU0LCAweDM1LCAweDVhLCAweGY1LCAweDVhLCAweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDU5LCAweDg1LCAweDYwLCAweDgyLCAweDg1fSB9LAoreyAweDg4OWEsCTE2LAl7MHg1ZiwgMHg4MywgMHhhMywgMHhlNCwgMHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg0NH0gfSwKK3sgMHg4OGFhLAkxNiwJezB4ODAsIDB4ZjAsIDB4ODUsIDB4NjAsIDB4ODIsIDB4ODUsIDB4NWYsIDB4ODMsIDB4ZTUsIDB4NWMsIDB4ZjAsIDB4YWYsIDB4NWMsIDB4YWUsIDB4NWIsIDB4YWR9IH0sCit7IDB4ODhiYSwJMTYsCXsweDVhLCAweGFjLCAweDU5LCAweDc4LCAweDA4LCAweDEyLCAweGEzLCAweGM0LCAweDg1LCAweDYwLCAweDgyLCAweDg1LCAweDVmLCAweDgzLCAweGEzLCAweGVmfSB9LAoreyAweDg4Y2EsCTE2LAl7MHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhlNCwgMHhmNX0gfSwKK3sgMHg4OGRhLAkxNiwJezB4NWQsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTB9IH0sCit7IDB4ODhlYSwJMTYsCXsweDIzLCAweDU0LCAweDAxLCAweGYwLCAweGU1LCAweDYwLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDg4ZmEsCTE2LAl7MHg1NCwgMHhmZCwgMHhmMCwgMHhhZiwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmY30gfSwKK3sgMHg4OTBhLAkxNiwJezB4NDIsIDB4MjIsIDB4ODAsIDB4MzYsIDB4NzQsIDB4MDEsIDB4N2UsIDB4MDAsIDB4YTgsIDB4NWUsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2V9IH0sCit7IDB4ODkxYSwJMTYsCXsweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweGU0LCAweGVmLCAweDU1LCAweDIyLCAweDYwLCAweDFmLCAweGU1LCAweDYwLCAweDI0LCAweDA0LCAweGY1fSB9LAoreyAweDg5MmEsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhhZiwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwN30gfSwKK3sgMHg4OTNhLAkxNiwJezB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjQsIDB4NTIsIDB4MjIsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDgsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4ODk0YSwJMTYsCXsweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGI0LCAweDYyLCAweDA1LCAweDQzLCAweDVkLCAweDBhLCAweDgwLCAweDFhLCAweGVmfSB9LAoreyAweDg5NWEsCTE2LAl7MHhiNCwgMHg3MiwgMHgwNSwgMHg0MywgMHg1ZCwgMHgwOCwgMHg4MCwgMHgxMSwgMHhlZiwgMHhiNCwgMHg3NCwgMHgwNSwgMHg0MywgMHg1ZCwgMHgwMiwgMHg4MH0gfSwKK3sgMHg4OTZhLAkxNiwJezB4MDgsIDB4ZWYsIDB4NjQsIDB4NmUsIDB4NjAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4ODk3YSwJMTYsCXsweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGUzLCAweDAzLCAweDQzLCAweDVkLCAweDgwLCAweGVmLCAweDMwLCAweGU3LCAweDEyfSB9LAoreyAweDg5OGEsCTE2LAl7MHg0MywgMHg1ZCwgMHg0MCwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NH0gfSwKK3sgMHg4OTlhLAkxNiwJezB4MDIsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTF9IH0sCit7IDB4ODlhYSwJMTYsCXsweDIwLCAweGFmLCAweDVlLCAweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDQyLCAweDMyfSB9LAoreyAweDg5YmEsCTE2LAl7MHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MH0gfSwKK3sgMHg4OWNhLAkxNiwJezB4MTAsIDB4YWYsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjQsIDB4NTJ9IH0sCit7IDB4ODlkYSwJMTYsCXsweDMyLCAweGU1LCAweDU4LCAweDI0LCAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGU0fSB9LAoreyAweDg5ZWEsCTE2LAl7MHgxMSwgMHhhZSwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNiwgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzMX0gfSwKK3sgMHg4OWZhLAkxNiwJezB4ODAsIDB4MTAsIDB4YWUsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDYsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjR9IH0sCit7IDB4OGEwYSwJMTYsCXsweDUyLCAweDMxLCAweGVmLCAweDIwLCAweGUxLCAweDAzLCAweDMwLCAweGU0LCAweDAzLCAweGU0LCAweGY1LCAweDVkLCAweDg1LCAweDYwLCAweDgyLCAweDg1fSB9LAoreyAweDhhMWEsCTE2LAl7MHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHg3NCwgMHhiZiwgMHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhM30gfSwKK3sgMHg4YTJhLAkxNiwJezB4ZTQsIDB4ZjAsIDB4ZTUsIDB4NWQsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODN9IH0sCit7IDB4OGEzYSwJMTYsCXsweGUwLCAweGZmLCAweGU1LCAweDYwLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1fSB9LAoreyAweDhhNGEsCTE2LAl7MHg1OCwgMHgyNCwgMHgwYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNX0gfSwKK3sgMHg4YTVhLAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDksIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4OGE2YSwJMTYsCXsweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDYwLCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1fSB9LAoreyAweDhhN2EsCTE2LAl7MHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZn0gfSwKK3sgMHg4YThhLAkxNiwJezB4ZTUsIDB4NjAsIDB4MjQsIDB4MDcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ODUsIDB4NjAsIDB4ODJ9IH0sCit7IDB4OGE5YSwJMTYsCXsweDg1LCAweDVmLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGU0LCAweGYwLCAweDg1LCAweDYwLCAweDgyLCAweDg1LCAweDVmLCAweDgzLCAweGEzLCAweGEzfSB9LAoreyAweDhhYWEsCTE2LAl7MHhmMCwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4YWJhLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4YWYsIDB4NWUsIDB4MTIsIDB4ODN9IH0sCit7IDB4OGFjYSwJMTYsCXsweGRmLCAweDc1LCAweDVkLCAweDA4LCAweGU1LCAweDU4LCAweDI0LCAweDBjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDhhZGEsCTE2LAl7MHg2MCwgMHgwMywgMHg0MywgMHg1ZCwgMHgxMCwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4M30gfSwKK3sgMHg4YWVhLAkxNiwJezB4ZTAsIDB4NTQsIDB4MDMsIDB4NDUsIDB4NWQsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjV9IH0sCit7IDB4OGFmYSwJMTYsCXsweDgzLCAweGUwLCAweGZlLCAweGMzLCAweDk0LCAweDA1LCAweDQwLCAweDA2LCAweGVlLCAweGQzLCAweDk0LCAweDA4LCAweDQwLCAweDAzLCAweDdmLCAweGZmfSB9LAoreyAweDhiMGEsCTE2LAl7MHgyMiwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHhjMywgMHg5NH0gfSwKK3sgMHg4YjFhLAkxNiwJezB4MDEsIDB4NDAsIDB4MDYsIDB4ZWQsIDB4ZDMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWQsIDB4MTQsIDB4ZmYsIDB4MjV9IH0sCit7IDB4OGIyYSwJMTYsCXsweGUwLCAweDI1LCAweGUwLCAweGZmLCAweGVlLCAweDI0LCAweGZiLCAweDRmLCAweGY1LCAweDVkLCAweGU1LCAweDU4LCAweDI0LCAweDA3LCAweGY1LCAweDgyfSB9LAoreyAweDhiM2EsCTE2LAl7MHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHgyNCwgMHhkMCwgMHg2MCwgMHgxOCwgMHgxNCwgMHg2MCwgMHgxYSwgMHgyNCwgMHhjMywgMHg2MH0gfSwKK3sgMHg4YjRhLAkxNiwJezB4MWUsIDB4MTQsIDB4NjAsIDB4MDksIDB4MjQsIDB4MGEsIDB4NzAsIDB4MTQsIDB4NDMsIDB4NWQsIDB4MTgsIDB4ODAsIDB4MTIsIDB4NDMsIDB4NWQsIDB4MDh9IH0sCit7IDB4OGI1YSwJMTYsCXsweDgwLCAweDBkLCAweDQzLCAweDVkLCAweDM4LCAweDgwLCAweDA4LCAweDQzLCAweDVkLCAweDI4LCAweDgwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweDg1fSB9LAoreyAweDhiNmEsCTE2LAl7MHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlNSwgMHg1ZCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg3ZSwgMHgwMCwgMHhhOH0gfSwKK3sgMHg4YjdhLAkxNiwJezB4NWUsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2UsIDB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4ZTQsIDB4ZWYsIDB4NTUsIDB4MzR9IH0sCit7IDB4OGI4YSwJMTYsCXsweDYwLCAweDA3LCAweGFmLCAweDVlLCAweDdkLCAweDAxLCAweDEyLCAweDgzLCAweDVhLCAweGFhLCAweDU3LCAweGE5LCAweDU4LCAweDdiLCAweDAxLCAweGMwfSB9LAoreyAweDhiOWEsCTE2LAl7MHgwMywgMHhjMCwgMHgwMSwgMHhlNSwgMHg1ZSwgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmOSwgMHg3NCwgMHgwMywgMHgzNSwgMHhmMH0gfSwKK3sgMHg4YmFhLAkxNiwJezB4YTgsIDB4MDEsIDB4ZmMsIDB4YWQsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDMsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MGQsIDB4MTIsIDB4YTIsIDB4MTJ9IH0sCit7IDB4OGJiYSwJMiwJezB4N2YsIDB4MDB9IH0sCit7IDB4OGJiYywJMSwJezB4MjJ9IH0sCit7IDB4OGJiZCwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGVlfSB9LAoreyAweDhiY2QsCTE2LAl7MHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZCwgMHg4MiwgMHhmYywgMHg5MCwgMHgwMX0gfSwKK3sgMHg4YmRkLAkxNiwJezB4MmMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZWUsIDB4MDQsIDB4YTMsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTV9IH0sCit7IDB4OGJlZCwJMTYsCXsweDgyLCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDgzLCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweDAxLCAweDJmLCAweGYwLCAweDhkfSB9LAoreyAweDhiZmQsCTE2LAl7MHg4MiwgMHg4YywgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg1NH0gfSwKK3sgMHg4YzBkLAkxNiwJezB4MWUsIDB4OTAsIDB4MDEsIDB4MzAsIDB4ZjAsIDB4NzQsIDB4MmQsIDB4MmUsIDB4ZjgsIDB4ZTYsIDB4YTMsIDB4ZjAsIDB4YWYsIDB4MDYsIDB4NzQsIDB4MDF9IH0sCit7IDB4OGMxZCwJMTYsCXsweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY1LCAweDU3LCAweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxfSB9LAoreyAweDhjMmQsCTE2LAl7MHg0MCwgMHgwZCwgMHg5MCwgMHgyMCwgMHg3OCwgMHhlMCwgMHg1NCwgMHgwZiwgMHg3NSwgMHg1OCwgMHgwMCwgMHhmNSwgMHg1OSwgMHg4MCwgMHgwOSwgMHg3Zn0gfSwKK3sgMHg4YzNkLAkxNiwJezB4MDIsIDB4MTIsIDB4MTEsIDB4MjcsIDB4OGUsIDB4NTgsIDB4OGYsIDB4NTksIDB4YzMsIDB4ZTUsIDB4NTgsIDB4NjQsIDB4ODAsIDB4OTQsIDB4ODAsIDB4NDB9IH0sCit7IDB4OGM0ZCwJMTYsCXsweGRhLCAweGU1LCAweDU3LCAweDU1LCAweDU5LCAweDkwLCAweDAxLCAweDMyLCAweGYwLCAweDdlLCAweDAxLCAweDdmLCAweDJjLCAweDdkLCAweDA3LCAweDEyfSB9LAoreyAweDhjNWQsCTQsCXsweDkxLCAweDZhLCAweDdmLCAweDAwfSB9LAoreyAweDhjNjEsCTEsCXsweDIyfSB9LAoreyAweDhjNjIsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhlZX0gfSwKK3sgMHg4YzcyLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZmUsIDB4OTAsIDB4MDF9IH0sCit7IDB4OGM4MiwJMTYsCXsweDMzLCAweDc0LCAweDBhLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDgyLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1fSB9LAoreyAweDhjOTIsCTE2LAl7MHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHgzNCwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHgzMywgMHg3ZCwgMHgwMiwgMHgxMiwgMHg5MX0gfSwKK3sgMHg4Y2EyLAkzLAl7MHg2YSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4Y2E1LAkxLAl7MHgyMn0gfSwKK3sgMHg4Y2E2LAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4Y2FhLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWV9IH0sCit7IDB4OGNiYSwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFkLCAweDgyLCAweGZjLCAweDg1LCAweDU4fSB9LAoreyAweDhjY2EsCTE2LAl7MHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHg2MCwgMHgwZiwgMHhlZCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYywgMHhmNX0gfSwKK3sgMHg4Y2RhLAkxNiwJezB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4NDMsIDB4ZWUsIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MGMsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4OGNlYSwJMTYsCXsweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUwLCAweDIwLCAweGVlLCAweDI1LCAweGUwLCAweDI0LCAweGM2LCAweGY1LCAweDgyfSB9LAoreyAweDhjZmEsCTE2LAl7MHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMSwgMHhmMCwgMHg3ZiwgMHg2MCwgMHhlZCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4Mn0gfSwKK3sgMHg4ZDBhLAkxNiwJezB4ZTQsIDB4M2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NWYsIDB4YjUsIDB4MDcsIDB4ZjIsIDB4YWUsIDB4MDQsIDB4YWYsIDB4MDUsIDB4ZWYsIDB4MjQsIDB4MDR9IH0sCit7IDB4OGQxYSwJMTIsCXsweGY1LCAweDgyLCAweGU0LCAweDNlLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDdmLCAweDAwfSB9LAoreyAweDhkMjYsCTEsCXsweDIyfSB9LAoreyAweDhkMjcsCTQsCXsweGFkLCAweDA3LCAweGFjLCAweDA2fSB9LAoreyAweDhkMmIsCTE2LAl7MHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHgxNCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhlZX0gfSwKK3sgMHg4ZDNiLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZmUsIDB4OGQsIDB4ODJ9IH0sCit7IDB4OGQ0YiwJMTYsCXsweDhjLCAweDgzLCAweGEzLCAweGUwLCAweDYwLCAweDBmLCAweGVmLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDNlLCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDhkNWIsCTE2LAl7MHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwZCwgMHhlZiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NH0gfSwKK3sgMHg4ZDZiLAk0LAl7MHhmZSwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZDZmLAkxLAl7MHgyMn0gfSwKK3sgMHg4ZDcwLAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHg4ZDc0LAkxNiwJezB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWV9IH0sCit7IDB4OGQ4NCwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGZlLCAweDhkLCAweDgyfSB9LAoreyAweDhkOTQsCTE2LAl7MHg4YywgMHg4MywgMHhhMywgMHhlMCwgMHg2MCwgMHgwZCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg0NCwgMHg0MH0gfSwKK3sgMHg4ZGE0LAkxNiwJezB4ZjAsIDB4ODAsIDB4MGIsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MDB9IH0sCit7IDB4OGRiNCwJMSwJezB4MjJ9IH0sCit7IDB4OGRiNSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGFmfSB9LAoreyAweDhkYzUsCTE2LAl7MHgwNiwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzZSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZGQ1LAkxLAl7MHgyMn0gfSwKK3sgMHg4ZGQ2LAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4ZGRhLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NWMsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTksIDB4ZDN9IH0sCit7IDB4OGRlYSwJMTYsCXsweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGU1LCAweDU5LCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLCAweDFmfSB9LAoreyAweDhkZmEsCTE2LAl7MHgxNCwgMHg2MCwgMHgyOCwgMHgyNCwgMHgwMywgMHg3MCwgMHgyZSwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHg1YSwgMHg3ZSwgMHg3NSwgMHg1Yn0gfSwKK3sgMHg4ZTBhLAkxNiwJezB4ODAsIDB4ODAsIDB4MjIsIDB4N2UsIDB4N2UsIDB4N2YsIDB4MDAsIDB4NzUsIDB4NWEsIDB4N2UsIDB4NzUsIDB4NWIsIDB4MDAsIDB4ODAsIDB4MTYsIDB4N2V9IH0sCit7IDB4OGUxYSwJMTYsCXsweDdkLCAweDdmLCAweDgwLCAweDc1LCAweDVhLCAweDdkLCAweDc1LCAweDViLCAweDgwLCAweDgwLCAweDBhLCAweDdlLCAweDdkLCAweDdmLCAweDAwLCAweDc1fSB9LAoreyAweDhlMmEsCTE2LAl7MHg1YSwgMHg3ZCwgMHg3NSwgMHg1YiwgMHgwMCwgMHhlNSwgMHg1YywgMHg3MCwgMHgxYiwgMHg4NSwgMHg1YiwgMHg4MiwgMHg4NSwgMHg1YSwgMHg4MywgMHg3NH0gfSwKK3sgMHg4ZTNhLAkxNiwJezB4ZmYsIDB4ZjAsIDB4ZTUsIDB4NTksIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzR9IH0sCit7IDB4OGU0YSwJMTYsCXsweDAxLCAweGYwLCAweDgwLCAweDQ4LCAweGU1LCAweDU4LCAweDI0LCAweDAyLCAweGZmLCAweGU0LCAweDM1LCAweDU3LCAweGZlLCAweGU1LCAweDVjLCAweDYwfSB9LAoreyAweDhlNWEsCTE2LAl7MHgyMywgMHgwZiwgMHhlZiwgMHhhYywgMHgwNiwgMHg3MCwgMHgwMSwgMHgwZSwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHhmZCwgMHgwNX0gfSwKK3sgMHg4ZTZhLAkxNiwJezB4NWIsIDB4ZTUsIDB4NWIsIDB4YWEsIDB4NWEsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NWEsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZWQsIDB4ZjB9IH0sCit7IDB4OGU3YSwJMTYsCXsweDE1LCAweDVjLCAweDgwLCAweGQ5LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweGU1LCAweDU5LCAweDI1fSB9LAoreyAweDhlOGEsCTE0LAl7MHhlMCwgMHgyNCwgMHhiNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZTk4LAkxLAl7MHgyMn0gfSwKK3sgMHg4ZTk5LAkxNiwJezB4ZWYsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4NTgsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4MDEsIDB4MzUsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4OTB9IH0sCit7IDB4OGVhOSwJMTYsCXsweDAxLCAweDdhLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweDM2LCAweGYwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzfSB9LAoreyAweDhlYjksCTE2LAl7MHhhMywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHg4ZSwgMHg1OSwgMHhmNSwgMHg1YSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4M30gfSwKK3sgMHg4ZWM5LAkxNiwJezB4ZTAsIDB4MjQsIDB4OWUsIDB4NjAsIDB4NjEsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MGUsIDB4MjQsIDB4ZjEsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OGYsIDB4N2F9IH0sCit7IDB4OGVkOSwJMTYsCXsweDI0LCAweDE0LCAweDYwLCAweDAzLCAweDAyLCAweDhmLCAweGM4LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZlfSB9LAoreyAweDhlZTksCTE2LAl7MHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHhlNCwgMHg5ZiwgMHhmNSwgMHg1YywgMHg3NCwgMHgwMSwgMHg5ZSwgMHhmNSwgMHg1YiwgMHhkMywgMHhlNSwgMHg1Y30gfSwKK3sgMHg4ZWY5LAkxNiwJezB4OTQsIDB4M2YsIDB4ZTUsIDB4NWIsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDYsIDB4NzUsIDB4NWIsIDB4MDAsIDB4NzUsIDB4NWMsIDB4M2YsIDB4ZDMsIDB4ZTV9IH0sCit7IDB4OGYwOSwJMTYsCXsweDVhLCAweDk1LCAweDVjLCAweGU1LCAweDU5LCAweDk1LCAweDViLCAweDUwLCAweDAzLCAweDAyLCAweDhmLCAweGNiLCAweGFlLCAweDViLCAweGFmLCAweDVjfSB9LAoreyAweDhmMTksCTE2LAl7MHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlZSwgMHhmMCwgMHhmZSwgMHhhMywgMHhlZiwgMHhmMCwgMHg4ZX0gfSwKK3sgMHg4ZjI5LAkxNiwJezB4NTksIDB4ZjUsIDB4NWEsIDB4MDIsIDB4OGYsIDB4Y2IsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTN9IH0sCit7IDB4OGYzOSwJMTYsCXsweGUwLCAweGZmLCAweGMzLCAweDc0LCAweDMwLCAweDlmLCAweGY1LCAweDVjLCAweGU0LCAweDllLCAweGY1LCAweDViLCAweGQzLCAweGU1LCAweDVjLCAweDk0fSB9LAoreyAweDhmNDksCTE2LAl7MHgxMCwgMHhlNSwgMHg1YiwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNiwgMHg3NSwgMHg1YiwgMHgwMCwgMHg3NSwgMHg1YywgMHgxMCwgMHhkMywgMHhlNSwgMHg1YX0gfSwKK3sgMHg4ZjU5LAkxNiwJezB4OTUsIDB4NWMsIDB4ZTUsIDB4NTksIDB4OTUsIDB4NWIsIDB4NDAsIDB4NmEsIDB4YWUsIDB4NWIsIDB4YWYsIDB4NWMsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODV9IH0sCit7IDB4OGY2OSwJMTYsCXsweDU3LCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGVlLCAweGYwLCAweGZlLCAweGEzLCAweGVmLCAweGYwLCAweDhlLCAweDU5LCAweGY1LCAweDVhLCAweDgwfSB9LAoreyAweDhmNzksCTE2LAl7MHg1MSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHhlNCwgMHg5Zn0gfSwKK3sgMHg4Zjg5LAkxNiwJezB4ZjUsIDB4NWMsIDB4ZTQsIDB4OWUsIDB4ZjUsIDB4NWIsIDB4NDUsIDB4NWMsIDB4NjAsIDB4MGIsIDB4ZDMsIDB4ZTUsIDB4NWMsIDB4OTQsIDB4M2YsIDB4ZTV9IH0sCit7IDB4OGY5OSwJMTYsCXsweDViLCAweDk0LCAweDAwLCAweDQwLCAweDA2LCAweDc1LCAweDViLCAweDAwLCAweDc1LCAweDVjLCAweDNmLCAweGQzLCAweGU1LCAweDVhLCAweDk1LCAweDVjfSB9LAoreyAweDhmYTksCTE2LAl7MHhlNSwgMHg1OSwgMHg5NSwgMHg1YiwgMHg0MCwgMHgxYywgMHhhZSwgMHg1YiwgMHhhZiwgMHg1YywgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4M30gfSwKK3sgMHg4ZmI5LAkxNiwJezB4YTMsIDB4YTMsIDB4YTMsIDB4ZWUsIDB4ZjAsIDB4ZmUsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4OGUsIDB4NTksIDB4ZjUsIDB4NWEsIDB4ODAsIDB4MDMsIDB4N2Z9IH0sCit7IDB4OGZjOSwJMTYsCXsweDAxLCAweDIyLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGUwLCAweDI0LCAweDllLCAweDcwLCAweDAzLCAweDAyLCAweDkwLCAweDhifSB9LAoreyAweDhmZDksCTE2LAl7MHgyNCwgMHhmOSwgMHg2MCwgMHg1OCwgMHgyNCwgMHhmMSwgMHg3MCwgMHgwMywgMHgwMiwgMHg5MCwgMHhkYiwgMHgyNCwgMHgxNCwgMHg2MCwgMHgwMywgMHgwMn0gfSwKK3sgMHg4ZmU5LAkxNiwJezB4OTEsIDB4MWYsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTR9IH0sCit7IDB4OGZmOSwJMTYsCXsweGZmLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDkxLCAweDFmLCAweDkwLCAweDAxLCAweDc1LCAweGVmLCAweGYwLCAweGU1LCAweDVhfSB9LAoreyAweDkwMDksCTE2LAl7MHgxNSwgMHg1YSwgMHhhZSwgMHg1OSwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1OSwgMHg0ZSwgMHg3MCwgMHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHg5MCwgMHgwMX0gfSwKK3sgMHg5MDE5LAkxNiwJezB4NzUsIDB4ZTAsIDB4ZmYsIDB4MDQsIDB4ZjAsIDB4YTgsIDB4MDcsIDB4ZTYsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDF9IH0sCit7IDB4OTAyOSwJMTYsCXsweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDgwLCAweGQyLCAweDg1LCAweDU4LCAweDgyLCAweDg1fSB9LAoreyAweDkwMzksCTE2LAl7MHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHg5NCwgMHg4MCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg1MCwgMHgwM30gfSwKK3sgMHg5MDQ5LAkxNiwJezB4MDIsIDB4OTEsIDB4MWYsIDB4ZDMsIDB4ZWYsIDB4OTQsIDB4ZmYsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4OTEsIDB4MWYsIDB4OTB9IH0sCit7IDB4OTA1OSwJMTYsCXsweDAxLCAweDc2LCAweGVmLCAweGYwLCAweGU1LCAweDVhLCAweDE1LCAweDVhLCAweGFlLCAweDU5LCAweDcwLCAweDAyLCAweDE1LCAweDU5LCAweDRlLCAweDcwfSB9LAoreyAweDkwNjksCTE2LAl7MHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHg5MCwgMHgwMSwgMHg3NiwgMHhlMCwgMHhmZiwgMHgwNCwgMHhmMCwgMHhhOCwgMHgwNywgMHhlNiwgMHhmZiwgMHg5MH0gfSwKK3sgMHg5MDc5LAkxNiwJezB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4OTcsIDB4ODUsIDB4ZjAsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjB9IH0sCit7IDB4OTA4OSwJMTYsCXsweDgwLCAweGQyLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweGMzLCAweDk0fSB9LAoreyAweDkwOTksCTE2LAl7MHgyMCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHhkMywgMHhlZiwgMHg5NCwgMHgyZiwgMHhlZSwgMHg5NCwgMHgwMH0gfSwKK3sgMHg5MGE5LAkxNiwJezB4NTAsIDB4NzQsIDB4OTAsIDB4MDEsIDB4NzcsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4NWEsIDB4MTUsIDB4NWEsIDB4YWUsIDB4NTksIDB4NzAsIDB4MDIsIDB4MTV9IH0sCit7IDB4OTBiOSwJMTYsCXsweDU5LCAweDRlLCAweDYwLCAweDYyLCAweDkwLCAweDAxLCAweDc3LCAweGUwLCAweGZmLCAweDA0LCAweGYwLCAweGE4LCAweDA3LCAweGU2LCAweGZmLCAweDkwfSB9LAoreyAweDkwYzksCTE2LAl7MHgwMSwgMHg3YSwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMH0gfSwKK3sgMHg5MGQ5LAkxNiwJezB4ODAsIDB4ZDUsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4MDEsIDB4Nzh9IH0sCit7IDB4OTBlOSwJMTYsCXsweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweGU1LCAweDVhLCAweDE1LCAweDVhLCAweGFlLCAweDU5LCAweDcwLCAweDAyLCAweDE1LCAweDU5LCAweDRlfSB9LAoreyAweDkwZjksCTE2LAl7MHg2MCwgMHgyNCwgMHg5MCwgMHgwMSwgMHg3OCwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNX0gfSwKK3sgMHg5MTA5LAkxNiwJezB4ODMsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4OTcsIDB4ODUsIDB4ZjAsIDB4ODJ9IH0sCit7IDB4OTExOSwJMTYsCXsweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDgwLCAweGNmLCAweDdlLCAweDAxLCAweDdmLCAweDM1LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzfSB9LAoreyAweDkxMjksCTEzLAl7MHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHgwNCwgMHhmZCwgMHgxMiwgMHg5MSwgMHg2YSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5MTM2LAkxLAl7MHgyMn0gfSwKK3sgMHg5MTM3LAkxNiwJezB4OGUsIDB4NjIsIDB4OGYsIDB4NjMsIDB4OGMsIDB4NjQsIDB4OGQsIDB4NjUsIDB4YWYsIDB4MDMsIDB4MWIsIDB4ZWYsIDB4NjAsIDB4MjQsIDB4MDUsIDB4NjN9IH0sCit7IDB4OTE0NywJMTYsCXsweGU1LCAweDYzLCAweGFlLCAweDYyLCAweDcwLCAweDAyLCAweDA1LCAweDYyLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZmLCAweDA1fSB9LAoreyAweDkxNTcsCTE2LAl7MHg2NSwgMHhlNSwgMHg2NSwgMHhhYywgMHg2NCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg2NCwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMH0gfSwKK3sgMHg5MTY3LAkzLAl7MHg4MCwgMHhkNiwgMHgyMn0gfSwKK3sgMHg5MTZhLAk2LAl7MHg4ZCwgMHg1ZCwgMHhhYiwgMHgwNywgMHhhYSwgMHgwNn0gfSwKK3sgMHg5MTcwLAkxNiwJezB4NzUsIDB4NjEsIDB4NDAsIDB4NzUsIDB4NjAsIDB4MGQsIDB4NzUsIDB4NWYsIDB4MDMsIDB4NzUsIDB4NWUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTB9IH0sCit7IDB4OTE4MCwJMTYsCXsweDIwLCAweGUxLCAweGY5LCAweGFmLCAweDYxLCAweGFlLCAweDYwLCAweGFkLCAweDVmLCAweGFjLCAweDVlLCAweGVjLCAweDRkLCAweDRlLCAweDRmLCAweDcwfSB9LAoreyAweDkxOTAsCTE2LAl7MHgwOCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHg3NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHhkNywgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxNn0gfSwKK3sgMHg5MWEwLAkxNiwJezB4YWYsIDB4MDMsIDB4YWUsIDB4MDIsIDB4N2MsIDB4N2IsIDB4N2QsIDB4ODAsIDB4YWIsIDB4NWQsIDB4MTIsIDB4OTEsIDB4MzcsIDB4OTAsIDB4N2YsIDB4YzN9IH0sCit7IDB4OTFiMCwJOCwJezB4ZTUsIDB4NWQsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MjIsIDB4N2YsIDB4MDB9IH0sCit7IDB4OTFiOCwJMSwJezB4MjJ9IH0sCit7IDB4OTFiOSwJMTYsCXsweDkwLCAweDAxLCAweDg0LCAweDc0LCAweDBiLCAweGYwLCAweGEzLCAweGU1LCAweDMzLCAweGYwLCAweDkwLCAweDBhLCAweGY1LCAweGU0LCAweDkzLCAweDkwfSB9LAoreyAweDkxYzksCTE2LAl7MHgwMSwgMHg4NiwgMHhmMCwgMHg5MCwgMHgwYSwgMHhmNiwgMHhlNCwgMHg5MywgMHg5MCwgMHgwMSwgMHg4NywgMHhmMCwgMHhlNCwgMHg5MCwgMHgwMSwgMHg3Y30gfSwKK3sgMHg5MWQ5LAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDF9IH0sCit7IDB4OTFlOSwJMTYsCXsweGYwLCAweGEzLCAweDc0LCAweDg4LCAweGYwLCAweDdlLCAweDAxLCAweDdmLCAweDdjLCAweDEyLCAweDE5LCAweGMxLCAweDdlLCAweDAxLCAweDdmLCAweDg0fSB9LAoreyAweDkxZjksCTcsCXsweDdkLCAweDE0LCAweDEyLCAweDkxLCAweDZhLCAweDdmLCAweDAwfSB9LAoreyAweDkyMDAsCTEsCXsweDIyfSB9LAoreyAweDkyMDEsCTE2LAl7MHg3ZSwgMHg3YiwgMHg3ZiwgMHg0MCwgMHg3NSwgMHg0ZSwgMHg3YiwgMHg3NSwgMHg0ZiwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhkMywgMHhlMCwgMHhmZiwgMHg4NX0gfSwKK3sgMHg5MjExLAkxNiwJezB4NGUsIDB4NTEsIDB4ODUsIDB4NGYsIDB4NTIsIDB4ZTUsIDB4NTIsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4NTYsIDB4ZTQsIDB4MzUsIDB4NTEsIDB4ZjUsIDB4NTV9IH0sCit7IDB4OTIyMSwJMTYsCXsweGU0LCAweGY1LCAweDUwLCAweDg1LCAweDUyLCAweDgyLCAweDg1LCAweDUxLCAweDgzLCAweGUwLCAweGZlLCAweDE0LCAweGI0LCAweDBjLCAweDAwLCAweDUwfSB9LAoreyAweDkyMzEsCTE2LAl7MHg1YiwgMHg5MCwgMHg5MiwgMHgzOSwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHg5MiwgMHg1ZCwgMHgwMiwgMHg5MiwgMHg1ZCwgMHgwMiwgMHg5Mn0gfSwKK3sgMHg5MjQxLAkxNiwJezB4NjcsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MDIsIDB4OTIsIDB4ODUsIDB4MDIsIDB4OTIsIDB4NWR9IH0sCit7IDB4OTI1MSwJMTYsCXsweDAyLCAweDkyLCAweDdiLCAweDAyLCAweDkyLCAweDVkLCAweDAyLCAweDkyLCAweDhkLCAweDAyLCAweDkyLCAweDVkLCAweGVmLCAweDY0LCAweDAyLCAweDYwfSB9LAoreyAweDkyNjEsCTE2LAl7MHgyYiwgMHg3NSwgMHg1MCwgMHhmZiwgMHg4MCwgMHgyNiwgMHhlZiwgMHg2NCwgMHgwZSwgMHg2MCwgMHgyMSwgMHg3NSwgMHg1MCwgMHhmZiwgMHg4MCwgMHgxY30gfSwKK3sgMHg5MjcxLAkxNiwJezB4ZWYsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MTcsIDB4NzUsIDB4NTAsIDB4ZmYsIDB4ODAsIDB4MTIsIDB4ZWYsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MGQsIDB4NzV9IH0sCit7IDB4OTI4MSwJMTYsCXsweDUwLCAweGZmLCAweDgwLCAweDA4LCAweGVmLCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDc1LCAweDUwLCAweGZmLCAweGU1LCAweDUwLCAweDYwLCAweDE1fSB9LAoreyAweDkyOTEsCTE2LAl7MHg5MCwgMHgwMSwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHhhMywgMHhlZSwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg5OCwgMHg3ZCwgMHgwMiwgMHgxMn0gfSwKK3sgMHg5MmExLAkxNiwJezB4OTEsIDB4NmEsIDB4YWYsIDB4NTAsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ODUsIDB4NTIsIDB4ODIsIDB4ODUsIDB4NTEsIDB4ODMsIDB4ZTAsIDB4MTR9IH0sCit7IDB4OTJiMSwJMTYsCXsweGI0LCAweDBmLCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDkzLCAweGNmLCAweDkwLCAweDkyLCAweGMwLCAweGY4LCAweDI4LCAweDI4LCAweDczLCAweDAyfSB9LAoreyAweDkyYzEsCTE2LAl7MHg5MiwgMHhlZCwgMHgwMiwgMHg5MiwgMHhmOSwgMHgwMiwgMHg5MywgMHgwNSwgMHgwMiwgMHg5MywgMHg1MywgMHgwMiwgMHg5MywgMHg1ZSwgMHgwMiwgMHg5M30gfSwKK3sgMHg5MmQxLAkxNiwJezB4NjksIDB4MDIsIDB4OTMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4N2YsIDB4MDIsIDB4OTMsIDB4OGEsIDB4MDIsIDB4OTMsIDB4OTUsIDB4MDIsIDB4OTMsIDB4YTB9IH0sCit7IDB4OTJlMSwJMTYsCXsweDAyLCAweDkzLCAweGE3LCAweDAyLCAweDkzLCAweGNmLCAweDAyLCAweDkzLCAweGIyLCAweDAyLCAweDkzLCAweGJkLCAweGFmLCAweDU2LCAweGFlLCAweDU1fSB9LAoreyAweDkyZjEsCTE2LAl7MHgxMiwgMHg4NCwgMHg0MSwgMHg4ZiwgMHg1MCwgMHgwMiwgMHg5MywgMHhkMiwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4NSwgMHg2MSwgMHg4Zn0gfSwKK3sgMHg5MzAxLAkxNiwJezB4NTAsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4ODUsIDB4NTUsIDB4NTMsIDB4ODUsIDB4NTYsIDB4NTQsIDB4ZTUsIDB4NTQsIDB4MjQsIDB4MDEsIDB4ZmYsIDB4ZTR9IH0sCit7IDB4OTMxMSwJMTYsCXsweDM1LCAweDUzLCAweGZlLCAweDEyLCAweDg2LCAweGJlLCAweGFmLCAweDU0LCAweGFlLCAweDUzLCAweDEyLCAweDg3LCAweDUxLCAweDhmLCAweDUwLCAweGVmfSB9LAoreyAweDkzMjEsCTE2LAl7MHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHg5MywgMHhkMiwgMHhhZiwgMHg1NCwgMHhhZSwgMHg1MywgMHgxMiwgMHg4NywgMHhhNiwgMHg4ZiwgMHg1MH0gfSwKK3sgMHg5MzMxLAkxNiwJezB4ZTUsIDB4NTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTMsIDB4ODMsIDB4ZTAsIDB4NzUsIDB4ZjB9IH0sCit7IDB4OTM0MSwJMTYsCXsweDBkLCAweGE0LCAweDI0LCAweGY0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGFmLCAweDgyLCAweGZlLCAweDEyLCAweDg3LCAweGE2LCAweDAyfSB9LAoreyAweDkzNTEsCTE2LAl7MHg5MywgMHhkMiwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4YywgMHhhNiwgMHg4ZiwgMHg1MCwgMHg4MCwgMHg3NCwgMHhhZiwgMHg1NiwgMHhhZX0gfSwKK3sgMHg5MzYxLAkxNiwJezB4NTUsIDB4MTIsIDB4OGQsIDB4MjcsIDB4OGYsIDB4NTAsIDB4ODAsIDB4NjksIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4OGQsIDB4NzAsIDB4OGZ9IH0sCit7IDB4OTM3MSwJMTYsCXsweDUwLCAweDgwLCAweDVlLCAweGFmLCAweDRmLCAweGFlLCAweDRlLCAweDEyLCAweDhlLCAweDk5LCAweDhmLCAweDUwLCAweDgwLCAweDUzLCAweGFmLCAweDU2fSB9LAoreyAweDkzODEsCTE2LAl7MHhhZSwgMHg1NSwgMHgxMiwgMHg4YiwgMHhiZCwgMHg4ZiwgMHg1MCwgMHg4MCwgMHg0OCwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4NiwgMHgyZH0gfSwKK3sgMHg5MzkxLAkxNiwJezB4OGYsIDB4NTAsIDB4ODAsIDB4M2QsIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4OGMsIDB4NjIsIDB4OGYsIDB4NTAsIDB4ODAsIDB4MzIsIDB4MTJ9IH0sCit7IDB4OTNhMSwJMTYsCXsweDkxLCAweGI5LCAweDhmLCAweDUwLCAweDgwLCAweDJiLCAweGFmLCAweDU2LCAweGFlLCAweDU1LCAweDEyLCAweDhkLCAweGI1LCAweDhmLCAweDUwLCAweDgwfSB9LAoreyAweDkzYjEsCTE2LAl7MHgyMCwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4ZCwgMHhkNiwgMHg4ZiwgMHg1MCwgMHg4MCwgMHgxNSwgMHhhZiwgMHg0ZiwgMHhhZSwgMHg0ZX0gfSwKK3sgMHg5M2MxLAkxNiwJezB4N2MsIDB4MDIsIDB4N2QsIDB4YWYsIDB4N2IsIDB4NDAsIDB4MTIsIDB4OTEsIDB4MzcsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ODAsIDB4MDMsIDB4NzUsIDB4NTB9IH0sCit7IDB4OTNkMSwJMTYsCXsweGZmLCAweGU1LCAweDUwLCAweDYwLCAweDFkLCAweDkwLCAweDAxLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDg1LCAweDUyLCAweDgyLCAweDg1LCAweDUxfSB9LAoreyAweDkzZTEsCTE2LAl7MHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHg5OSwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg5OCwgMHg3ZCwgMHgwMiwgMHgxMiwgMHg5MSwgMHg2YSwgMHhhZn0gfSwKK3sgMHg5M2YxLAkxNiwJezB4NTAsIDB4MjIsIDB4ODUsIDB4NTIsIDB4ODIsIDB4ODUsIDB4NTEsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTQsIDB4MjQsIDB4ZmEsIDB4NTAsIDB4MDQsIDB4MjR9IH0sCit7IDB4OTQwMSwJMTYsCXsweGZlLCAweDcwLCAweDFmLCAweDkwLCAweDAxLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDg1LCAweDU2LCAweDgyLCAweDg1fSB9LAoreyAweDk0MTEsCTE2LAl7MHg1NSwgMHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHg5YSwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg5OCwgMHg3ZCwgMHgwMywgMHgxMiwgMHg5MSwgMHg2YX0gfSwKK3sgMHg5NDIxLAk0LAl7MHg4ZiwgMHg1MCwgMHhhZiwgMHg1MH0gfSwKK3sgMHg5NDI1LAkxLAl7MHgyMn0gfSwKK3sgMHg5NDI2LAk4LAl7MHg4ZiwgMHg1MSwgMHg4ZSwgMHg1MCwgMHg4ZCwgMHg0ZiwgMHg4YywgMHg0ZX0gfSwKK3sgMHg5NDJlLAkxNiwJezB4NzUsIDB4NTgsIDB4MDEsIDB4NzUsIDB4NTksIDB4OWMsIDB4ZTQsIDB4ZjUsIDB4NTcsIDB4YWYsIDB4NTMsIDB4MTUsIDB4NTMsIDB4ZWYsIDB4NzAsIDB4MDN9IH0sCit7IDB4OTQzZSwJMTYsCXsweDAyLCAweDk0LCAweGM0LCAweGFmLCAweDUyLCAweGU0LCAweGZjLCAweGZkLCAweGZlLCAweGY4LCAweGY5LCAweGZhLCAweGFiLCAweDA3LCAweGFmLCAweDUxfSB9LAoreyAweDk0NGUsCTE2LAl7MHhhZSwgMHg1MCwgMHhhZCwgMHg0ZiwgMHhhYywgMHg0ZSwgMHgxMiwgMHhhMywgMHgyMSwgMHhhZiwgMHgwMywgMHg4ZiwgMHg1NiwgMHhhZiwgMHg1MSwgMHhhZX0gfSwKK3sgMHg5NDVlLAkxNiwJezB4NTAsIDB4YWQsIDB4NGYsIDB4YWMsIDB4NGUsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDUsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MDcsIDB4YWYsIDB4NTIsIDB4ZTR9IH0sCit7IDB4OTQ2ZSwJMTYsCXsweGZjLCAweGZkLCAweGZlLCAweGY4LCAweGY5LCAweGZhLCAweGFiLCAweDA3LCAweGQwLCAweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDA1LCAweGQwLCAweDA0fSB9LAoreyAweDk0N2UsCTE2LAl7MHgxMiwgMHhhMywgMHgyMSwgMHg4ZiwgMHg1MSwgMHg4ZSwgMHg1MCwgMHg4ZCwgMHg0ZiwgMHg4YywgMHg0ZSwgMHhlNSwgMHg1NiwgMHgyNCwgMHgzMCwgMHhmNX0gfSwKK3sgMHg5NDhlLAkxNiwJezB4NTYsIDB4ZDMsIDB4OTQsIDB4MzksIDB4NDAsIDB4MDYsIDB4NzQsIDB4MDcsIDB4MjUsIDB4NTYsIDB4ZjUsIDB4NTYsIDB4MDUsIDB4NTksIDB4ZTUsIDB4NTl9IH0sCit7IDB4OTQ5ZSwJMTYsCXsweGFlLCAweDU4LCAweDcwLCAweDAyLCAweDA1LCAweDU4LCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU0LCAweGYwLCAweDA1LCAweDU5LCAweGU1fSB9LAoreyAweDk0YWUsCTE2LAl7MHg1OSwgMHhhZSwgMHg1OCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1OCwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHg1NiwgMHhmMCwgMHgwNX0gfSwKK3sgMHg5NGJlLAkxNiwJezB4NTcsIDB4MDUsIDB4NTcsIDB4MDIsIDB4OTQsIDB4MzcsIDB4ZTUsIDB4NTksIDB4MTUsIDB4NTksIDB4NzAsIDB4MDIsIDB4MTUsIDB4NTgsIDB4YWYsIDB4NTd9IH0sCit7IDB4OTRjZSwJMTYsCXsweDE1LCAweDU3LCAweGVmLCAweDYwLCAweDIzLCAweGU1LCAweDU5LCAweDE1LCAweDU5LCAweGFlLCAweDU4LCAweDcwLCAweDAyLCAweDE1LCAweDU4LCAweGY1fSB9LAoreyAweDk0ZGUsCTE2LAl7MHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmZiwgMHgwNSwgMHg1NSwgMHhlNSwgMHg1NSwgMHhhYywgMHg1NCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NCwgMHgxNH0gfSwKK3sgMHg5NGVlLAk4LAl7MHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4MCwgMHhkNn0gfSwKK3sgMHg5NGY2LAkxLAl7MHgyMn0gfSwKK3sgMHg5NGY3LAkxNiwJezB4ZTQsIDB4OTAsIDB4MDEsIDB4YzksIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4Y2EsIDB4OTAsIDB4MDEsIDB4YmUsIDB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWZ9IH0sCit7IDB4OTUwNywJMTAsCXsweGYwLCAweDkwLCAweDAxLCAweGMyLCAweGVlLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDIyfSB9LAoreyAweDk1MTEsCTE2LAl7MHhhYSwgMHgwNywgMHhhOSwgMHgwNSwgMHg5MCwgMHgwMSwgMHhjOSwgMHhlMCwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2MSwgMHhhYywgMHgwMiwgMHg3NH0gfSwKK3sgMHg5NTIxLAkxNiwJezB4MDEsIDB4N2UsIDB4MDAsIDB4YTgsIDB4MDQsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2UsIDB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmZ9IH0sCit7IDB4OTUzMSwJMTYsCXsweGU0LCAweGVmLCAweDU1LCAweDM0LCAweDYwLCAweDQ1LCAweGVhLCAweDA0LCAweGZmLCAweDkwLCAweDAxLCAweGMyLCAweGUwLCAweGZjLCAweGEzLCAweGUwfSB9LAoreyAweDk1NDEsCTE2LAl7MHhmZCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHhhMywgMHhlOSwgMHhmMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhhM30gfSwKK3sgMHg5NTUxLAkxNiwJezB4ZWIsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzIsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4YTIsIDB4ODEsIDB4ZmMsIDB4ZDMsIDB4ZTUsIDB4ZjB9IH0sCit7IDB4OTU2MSwJMTYsCXsweDk0LCAweDg3LCAweGVjLCAweDk0LCAweDAyLCAweDQwLCAweDBhLCAweDkwLCAweDAxLCAweGMyLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweGNhfSB9LAoreyAweDk1NzEsCTE2LAl7MHhmMCwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwMSwgMHhjOSwgMHhlMCwgMHgwNCwgMHhmMCwgMHhkMiwgMHhhZiwgMHg3ZiwgMHgwMSwgMHgyMiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5NTgxLAkxLAl7MHgyMn0gfSwKK3sgMHg5NTgyLAkxNiwJezB4OTAsIDB4MDEsIDB4YzksIDB4ZTAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OTAsIDB4MDEsIDB4YmUsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTB9IH0sCit7IDB4OTU5MiwJMTYsCXsweGFhLCAweDA0LCAweGY5LCAweDdiLCAweDAxLCAweGMwLCAweDAzLCAweGMwLCAweDAyLCAweGMwLCAweDAxLCAweGFhLCAweDA2LCAweGE5LCAweDA3LCAweGE4fSB9LAoreyAweDk1YTIsCTE2LAl7MHgwMSwgMHhhYywgMHgwMiwgMHhhZCwgMHgwMywgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMywgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMywgMHgxMn0gfSwKK3sgMHg5NWIyLAkxNiwJezB4YTIsIDB4MTIsIDB4OTAsIDB4MDEsIDB4YmUsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4YTIsIDB4ODEsIDB4ZmMsIDB4ZDMsIDB4ZTUsIDB4ZjB9IH0sCit7IDB4OTVjMiwJMTYsCXsweDk0LCAweDg3LCAweGVjLCAweDk0LCAweDAyLCAweDQwLCAweDBhLCAweDkwLCAweDAxLCAweGJlLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweGNhfSB9LAoreyAweDk1ZDIsCTE2LAl7MHhmMCwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwMSwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmMCwgMHhkMiwgMHhhZiwgMHg3ZiwgMHgwMSwgMHgyMiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5NWUyLAkxLAl7MHgyMn0gfSwKK3sgMHg5NWUzLAkxNiwJezB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NzMsIDB4N2UsIDB4N2IsIDB4N2YsIDB4ODAsIDB4NzUsIDB4NTMsIDB4N2IsIDB4NzUsIDB4NTR9IH0sCit7IDB4OTVmMywJMTYsCXsweDgwLCAweGU1LCAweDU0LCAweDI0LCAweDAxLCAweGZmLCAweGU0LCAweDM1LCAweDUzLCAweGE5LCAweDA3LCAweDdiLCAweDAxLCAweDhiLCAweDU1LCAweGY1fSB9LAoreyAweDk2MDMsCTE2LAl7MHg1NiwgMHg4OSwgMHg1NywgMHhmZSwgMHgxMiwgMHg5NSwgMHg4MiwgMHhlZiwgMHg2MCwgMHg1MCwgMHhhYiwgMHg1NSwgMHhhYSwgMHg1NiwgMHhhOSwgMHg1N30gfSwKK3sgMHg5NjEzLAkxNiwJezB4MTIsIDB4YTIsIDB4M2IsIDB4MTQsIDB4ZmYsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4NTQsIDB4YjQsIDB4MDIsIDB4MTYsIDB4YzIsIDB4YWZ9IH0sCit7IDB4OTYyMywJMTYsCXsweGVmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweDQ0fSB9LAoreyAweDk2MzMsCTE2LAl7MHgwNCwgMHhmMCwgMHhkMiwgMHhhZiwgMHg3NCwgMHgwMSwgMHg3ZSwgMHgwMCwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwNSwgMHhjMywgMHgzMywgMHhjZX0gfSwKK3sgMHg5NjQzLAkxNiwJezB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4ZTQsIDB4ZWYsIDB4NTUsIDB4MzQsIDB4NjAsIDB4MGYsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTN9IH0sCit7IDB4OTY1MywJMTAsCXsweDgzLCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA0LCAweGYwfSB9LAoreyAweDk2NWQsCTEsCXsweDIyfSB9LAoreyAweDk2NWUsCTE2LAl7MHgxMiwgMHg5NSwgMHhlMywgMHhlNCwgMHhmNSwgMHg0ZSwgMHg3NCwgMHgzYSwgMHgyNSwgMHg0ZSwgMHhmOCwgMHhlNiwgMHg1NCwgMHhmMCwgMHhmNSwgMHg0Zn0gfSwKK3sgMHg5NjZlLAkxNiwJezB4NzQsIDB4YzUsIDB4MjUsIDB4NGUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjUsIDB4NGYsIDB4ZmYsIDB4YzR9IH0sCit7IDB4OTY3ZSwJMTYsCXsweDU0LCAweDBmLCAweGY1LCAweDUwLCAweDYwLCAweDIyLCAweDc0LCAweGM1LCAweDI1LCAweDRlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAxLCAweGY1fSB9LAoreyAweDk2OGUsCTE2LAl7MHg4MywgMHhlNSwgMHg0ZiwgMHhmMCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMSwgMHhlNSwgMHg0ZiwgMHg0NSwgMHg1MCwgMHhmYiwgMHgxMiwgMHg5NSwgMHgxMX0gfSwKK3sgMHg5NjllLAkxNiwJezB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODAsIDB4ZWMsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDB9IH0sCit7IDB4OTZhZSwJMTYsCXsweGI1LCAweDEyLCAweDk1LCAweGUzLCAweGU1LCAweDNlLCAweDYwLCAweDQ4LCAweGU0LCAweGY1LCAweDRlLCAweGFmLCAweDRlLCAweDc0LCAweDAxLCAweGE4fSB9LAoreyAweDk2YmUsCTE2LAl7MHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmNSwgMHg0ZiwgMHg1NSwgMHgzZSwgMHg2MCwgMHgyOSwgMHhlNSwgMHg0ZX0gfSwKK3sgMHg5NmNlLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTZ9IH0sCit7IDB4OTZkZSwJMTYsCXsweDE2LCAweGFmLCAweDRlLCAweDdkLCAweDA0LCAweDdiLCAweDgwLCAweDEyLCAweDk1LCAweDExLCAweGVmLCAweDcwLCAweDA1LCAweDEyLCAweDk1LCAweGUzfSB9LAoreyAweDk2ZWUsCTE2LAl7MHg4MCwgMHhlZiwgMHhlNSwgMHg0ZiwgMHhmNCwgMHg1MiwgMHgzZSwgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHhiYn0gfSwKK3sgMHg5NmZlLAkxNiwJezB4OTAsIDB4MDMsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OTcsIDB4ZGYsIDB4NzQsIDB4MTksIDB4ZjAsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTR9IH0sCit7IDB4OTcwZSwJMTYsCXsweDAxLCAweDQwLCAweDBkLCAweDkwLCAweDIwLCAweDc4LCAweGUwLCAweDU0LCAweDBmLCAweDc1LCAweDUxLCAweDAwLCAweGY1LCAweDUyLCAweDgwLCAweDA5fSB9LAoreyAweDk3MWUsCTE2LAl7MHg3ZiwgMHgwMiwgMHgxMiwgMHgxMSwgMHgyNywgMHg4ZSwgMHg1MSwgMHg4ZiwgMHg1MiwgMHhjMywgMHhlNSwgMHg1MSwgMHg2NCwgMHg4MCwgMHg5NCwgMHg4MH0gfSwKK3sgMHg5NzJlLAkxNiwJezB4NDAsIDB4ZGEsIDB4OTAsIDB4MDEsIDB4YmMsIDB4ZTAsIDB4NjUsIDB4NTIsIDB4ZjAsIDB4NjAsIDB4MzcsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4YWYsIDB4NGV9IH0sCit7IDB4OTczZSwJMTYsCXsweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY1LCAweDRmLCAweDkwLCAweDAxLCAweGJjfSB9LAoreyAweDk3NGUsCTE2LAl7MHhlMCwgMHg1NSwgMHg0ZiwgMHg2MCwgMHgxNCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwOCwgMHhlNSwgMHg0ZiwgMHg1NSwgMHg1MiwgMHhmYiwgMHgxMiwgMHg5NX0gfSwKK3sgMHg5NzVlLAkxNiwJezB4MTEsIDB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODAsIDB4ZWMsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4YzMsIDB4OTQsIDB4MDR9IH0sCit7IDB4OTc2ZSwJMTYsCXsweDQwLCAweGNjLCAweDkwLCAweDAxLCAweGJjLCAweGU1LCAweDUyLCAweGYwLCAweGU0LCAweGY1LCAweDRlLCAweGMyLCAweGFmLCAweDc0LCAweDM2LCAweDI1fSB9LAoreyAweDk3N2UsCTE2LAl7MHg0ZSwgMHhmOCwgMHhlNiwgMHhmNSwgMHg0ZiwgMHhlNCwgMHhmNiwgMHhkMiwgMHhhZiwgMHg1MywgMHg0ZiwgMHgxZSwgMHhlNSwgMHg0ZiwgMHg2MCwgMHgxMX0gfSwKK3sgMHg5NzhlLAkxNiwJezB4YWYsIDB4NGUsIDB4N2QsIDB4MDIsIDB4YWIsIDB4NGYsIDB4MTIsIDB4OTUsIDB4MTEsIDB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODB9IH0sCit7IDB4OTc5ZSwJMTYsCXsweGVmLCAweDc0LCAweDJkLCAweDI1LCAweDRlLCAweGY4LCAweGU2LCAweGY1LCAweDRmLCAweDc0LCAweGZjLCAweDI1LCAweDRlLCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDk3YWUsCTE2LAl7MHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHg2NSwgMHg0ZiwgMHg2MCwgMHgxMSwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwNCwgMHhhYiwgMHg0ZiwgMHgxMn0gfSwKK3sgMHg5N2JlLAkxNiwJezB4OTUsIDB4MTEsIDB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODAsIDB4ZWYsIDB4NzQsIDB4ZmMsIDB4MjUsIDB4NGUsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4OTdjZSwJMTYsCXsweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGMzLCAweDk0LCAweDA0LCAweDQwfSB9LAoreyAweDk3ZGUsCTQsCXsweDlhLCAweDEyLCAweDk1LCAweGUzfSB9LAoreyAweDk3ZTIsCTEsCXsweDIyfSB9LAoreyAweDk3ZTMsCTEyLAl7MHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg2NywgMHgwMiwgMHg5OCwgMHgyYX0gfSwKK3sgMHg5N2VmLAkxNiwJezB4MDIsIDB4MDUsIDB4YWQsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjJ9IH0sCit7IDB4OTdmZiwJMTYsCXsweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzfSB9LAoreyAweDk4MGYsCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZn0gfSwKK3sgMHg5ODFmLAkxNiwJezB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4OTgsIDB4NmYsIDB4ZTQsIDB4N2V9IH0sCit7IDB4OTgyZiwJMTYsCXsweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzfSB9LAoreyAweDk4M2YsCTE2LAl7MHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhM30gfSwKK3sgMHg5ODRmLAkxNiwJezB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2F9IH0sCit7IDB4OTg1ZiwJMTYsCXsweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlfSB9LAoreyAweDk4NmYsCTE2LAl7MHg2MCwgMHgyNCwgMHgwMiwgMHg4YSwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg4MSwgMHg4MiwgMHg4NCwgMHg4OH0gfSwKK3sgMHg5ODdmLAkxNiwJezB4OTAsIDB4YTAsIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzQsIDB4YzgsIDB4ZDAsIDB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTQsIDB4ZTgsIDB4ZjAsIDB4ZjEsIDB4ZjJ9IH0sCit7IDB4OTg4ZiwJOCwJezB4ZjQsIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmZ9IH0sCit7IDB4OTg5NywJMSwJezB4MDB9IH0sCit7IDB4OTg5OCwJOCwJezB4OGIsIDB4NTksIDB4OGEsIDB4NWEsIDB4ODksIDB4NWIsIDB4OGQsIDB4NWN9IH0sCit7IDB4OThhMCwJMTYsCXsweGU0LCAweGY1LCAweDVkLCAweGY1LCAweDVlLCAweGFmLCAweDVjLCAweDE1LCAweDVjLCAweGVmLCAweDYwLCAweDM2LCAweGFiLCAweDU5LCAweDA1LCAweDVifSB9LAoreyAweDk4YjAsCTE2LAl7MHhlNSwgMHg1YiwgMHhhYSwgMHg1YSwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1YSwgMHgxNCwgMHhmOSwgMHgxMiwgMHhhMiwgMHgzYiwgMHhmZiwgMHhlNSwgMHg1ZH0gfSwKK3sgMHg5OGMwLAkxNiwJezB4ZTUsIDB4NWUsIDB4NmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4NzQsIDB4OTUsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZWUsIDB4MzR9IH0sCit7IDB4OThkMCwJMTYsCXsweDllLCAweGY1LCAweDgzLCAweGU1LCAweDVkLCAweGZmLCAweGU0LCAweDkzLCAweGY1LCAweDVkLCAweDc0LCAweDAxLCAweDkzLCAweDZmLCAweGY1LCAweDVlfSB9LAoreyAweDk4ZTAsCTYsCXsweDgwLCAweGMzLCAweGFlLCAweDVkLCAweGFmLCAweDVlfSB9LAoreyAweDk4ZTYsCTEsCXsweDIyfSB9LAoreyAweDk4ZTcsCTExLAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgxOH0gfSwKK3sgMHg5OGYyLAkxNiwJezB4OTAsIDB4MjAsIDB4NjAsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZmUsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4OTAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4ZWV9IH0sCit7IDB4OTkwMiwJMTYsCXsweDMwLCAweGUxLCAweDA1LCAweDkwLCAweDIwLCAweDBhLCAweGUwLCAweGZmLCAweGVlLCAweDMwLCAweGUyLCAweDA1LCAweDkwLCAweDIwLCAweDEyLCAweGUwfSB9LAoreyAweDk5MTIsCTE2LAl7MHhmZiwgMHhlZSwgMHgzMCwgMHhlMywgMHgwNSwgMHg5MCwgMHgyMCwgMHgxYSwgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhlMCwgMHhiNSwgMHgxZX0gfSwKK3sgMHg5OTIyLAkxMCwJezB4MDQsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZWUsIDB4ZjB9IH0sCit7IDB4OTkyYywJOSwJezB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4OTkzNSwJMiwJezB4YTksIDB4MDN9IH0sCit7IDB4OTkzNywJMTYsCXsweGVmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFiLCAweDgyLCAweGZhLCAweGU1fSB9LAoreyAweDk5NDcsCTE2LAl7MHg1YywgMHg0NSwgMHg1ZCwgMHhmNSwgMHg1ZSwgMHhlOSwgMHg2MCwgMHgxNCwgMHg4YSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4Mn0gfSwKK3sgMHg5OTU3LAkxNiwJezB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NGQsIDB4ZjAsIDB4ZTQsIDB4ZmUsIDB4ODAsIDB4MTMsIDB4ZWIsIDB4MjQsIDB4MDQsIDB4ZjV9IH0sCit7IDB4OTk2NywJMTYsCXsweDgyLCAweGU0LCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGVkLCAweGY0LCAweGZjLCAweGVmLCAweDVjLCAweGYwLCAweGFlLCAweDVlLCAweGVifSB9LAoreyAweDk5NzcsCTE2LAl7MHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NSwgMHg1ZSwgMHhmYywgMHhiNSwgMHgwNiwgMHgwMywgMHhhZn0gfSwKK3sgMHg5OTg3LAkxNiwJezB4MDUsIDB4MjIsIDB4ZTUsIDB4NWMsIDB4NWMsIDB4ZmUsIDB4ZTUsIDB4NWQsIDB4NWMsIDB4ZmQsIDB4ZTksIDB4NjAsIDB4MTYsIDB4ZWUsIDB4NzAsIDB4MDR9IH0sCit7IDB4OTk5NywJMTYsCXsweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGFlLCAweDA3LCAweGVkLCAweDcwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmfSB9LAoreyAweDk5YTcsCTE2LAl7MHgwMCwgMHhhZCwgMHgwNywgMHhlZSwgMHg2MCwgMHgwMywgMHhhZiwgMHg1YywgMHgyMiwgMHhlZCwgMHg2MCwgMHgwMywgMHhhZiwgMHg1ZCwgMHgyMiwgMHg3Zn0gfSwKK3sgMHg5OWI3LAkxLAl7MHgwMH0gfSwKK3sgMHg5OWI4LAkxLAl7MHgyMn0gfSwKK3sgMHg5OWI5LAkxNiwJezB4NzUsIDB4NTUsIDB4MDIsIDB4NzUsIDB4NTYsIDB4YjAsIDB4OTAsIDB4MDMsIDB4MzUsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ODUsIDB4NTYsIDB4ODIsIDB4ODV9IH0sCit7IDB4OTljOSwJMTYsCXsweDU1LCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweDkwLCAweDAzLCAweDM3LCAweGYwLCAweDg1LCAweDU2LCAweDgyLCAweDg1LCAweDU1LCAweDgzLCAweGUwfSB9LAoreyAweDk5ZDksCTE2LAl7MHg5MCwgMHgwMywgMHgzNiwgMHhmMCwgMHg5MCwgMHgwMywgMHgzOCwgMHg3NCwgMHhmZiwgMHhmMCwgMHg3NSwgMHg1NywgMHgwMywgMHg3NSwgMHg1OCwgMHgzOX0gfSwKK3sgMHg5OWU5LAkxNiwJezB4ZWYsIDB4MTQsIDB4YjQsIDB4MGIsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4OWUsIDB4NWQsIDB4OTAsIDB4OTksIDB4ZmEsIDB4ZjgsIDB4MjgsIDB4Mjh9IH0sCit7IDB4OTlmOSwJMTYsCXsweDczLCAweDAyLCAweDlhLCAweDFiLCAweDAyLCAweDlhLCAweGJhLCAweDAyLCAweDliLCAweGJmLCAweDAyLCAweDliLCAweGRlLCAweDAyLCAweDliLCAweGRlfSB9LAoreyAweDlhMDksCTE2LAl7MHgwMiwgMHg5YywgMHg5NCwgMHgwMiwgMHg5YywgMHhjZiwgMHgwMiwgMHg5YywgMHhmNCwgMHgwMiwgMHg5ZCwgMHhiMiwgMHgwMiwgMHg5ZCwgMHhlMiwgMHgwMn0gfSwKK3sgMHg5YTE5LAkxNiwJezB4OWUsIDB4MGUsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4OWEyOSwJMTYsCXsweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGY1LCAweDUzLCAweDhmLCAweDU0LCAweGU0LCAweGZmLCAweGU0LCAweGZlLCAweGVmLCAweDYwLCAweDEwLCAweDc0fSB9LAoreyAweDlhMzksCTE2LAl7MHg4YSwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNCwgMHhmNSwgMHg0ZiwgMHg4MCwgMHgwZCwgMHg3NH0gfSwKK3sgMHg5YTQ5LAkxNiwJezB4OGEsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NGYsIDB4ZTUsIDB4NTQsIDB4MjQsIDB4MDd9IH0sCit7IDB4OWE1OSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDUzLCAweGY1LCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweGUwLCAweGY1LCAweDUwLCAweDY1LCAweDRmLCAweDYwfSB9LAoreyAweDlhNjksCTE2LAl7MHgzOCwgMHhlNCwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHhlNSwgMHg0ZSwgMHgwNCwgMHhmZCwgMHgwNSwgMHg1OCwgMHhlNSwgMHg1OCwgMHhhYSwgMHg1N30gfSwKK3sgMHg5YTc5LAkxNiwJezB4NzAsIDB4MDIsIDB4MDUsIDB4NTcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MDUsIDB4NTgsIDB4ZTUsIDB4NTgsIDB4YWN9IH0sCit7IDB4OWE4OSwJMTYsCXsweDU3LCAweDcwLCAweDAyLCAweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweDg1LCAweDU4LCAweDgyfSB9LAoreyAweDlhOTksCTE2LAl7MHg4NSwgMHg1NywgMHg4MywgMHhlNSwgMHg1MCwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHgwZSwgMHhiZSwgMHgyNCwgMHg4ZiwgMHgwZiwgMHhlZiwgMHg2NH0gfSwKK3sgMHg5YWE5LAkxNiwJezB4MDIsIDB4NzAsIDB4ODcsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4NjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OWEsIDB4MWUsIDB4MDIsIDB4OWV9IH0sCit7IDB4OWFiOSwJMTYsCXsweDYzLCAweGU0LCAweGY1LCAweDRlLCAweGFmLCAweDRlLCAweGU0LCAweGZkLCAweDEyLCAweDgzLCAweDVhLCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGQzfSB9LAoreyAweDlhYzksCTE2LAl7MHg5NCwgMHgwMywgMHg0MCwgMHhmMCwgMHg5MCwgMHgwMCwgMHgwNCwgMHg3NCwgMHg5OCwgMHhmMCwgMHhhMywgMHg3NCwgMHhlNywgMHhmMCwgMHhlNCwgMHhmNX0gfSwKK3sgMHg5YWQ5LAkxNiwJezB4NTAsIDB4N2UsIDB4MjAsIDB4N2YsIDB4MDAsIDB4NzUsIDB4NTMsIDB4MjAsIDB4NzUsIDB4NTQsIDB4MDAsIDB4ZjUsIDB4NGUsIDB4YWYsIDB4NGUsIDB4NzR9IH0sCit7IDB4OWFlOSwJMTYsCXsweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY1LCAweDRmLCAweDkwLCAweDAxLCAweGM0LCAweGYwfSB9LAoreyAweDlhZjksCTE2LAl7MHg5MCwgMHgwMSwgMHhjMCwgMHhlNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwYSwgMHhmMCwgMHg4NSwgMHg1NCwgMHg4MiwgMHg4NSwgMHg1MywgMHg4MywgMHhhM30gfSwKK3sgMHg5YjA5LAkxNiwJezB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZTAsIDB4YjUsIDB4NGYsIDB4MzQsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4NzAsIDB4MDJ9IH0sCit7IDB4OWIxOSwJMTYsCXsweGEzLCAweGUwLCAweDcwLCAweGVmLCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweGU1LCAweDRlLCAweDA0LCAweGZmLCAweDA1LCAweDU4LCAweGU1LCAweDU4fSB9LAoreyAweDliMjksCTE2LAl7MHhhYywgMHg1NywgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4NSwgMHg1OCwgMHg4Mn0gfSwKK3sgMHg5YjM5LAkxNiwJezB4ODUsIDB4NTcsIDB4ODMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZjAsIDB4NzUsIDB4NTAsIDB4ZmYsIDB4OTAsIDB4MDF9IH0sCit7IDB4OWI0OSwJMTYsCXsweGM0LCAweGUwLCAweGZmLCAweDYwLCAweDM3LCAweGU0LCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweGU1LCAweDRlLCAweDA0LCAweGZlLCAweDA1LCAweDU4fSB9LAoreyAweDliNTksCTE2LAl7MHhlNSwgMHg1OCwgMHhhYywgMHg1NywgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZSwgMHhmMCwgMHgwNX0gfSwKK3sgMHg5YjY5LAkxNiwJezB4NTgsIDB4ZTUsIDB4NTgsIDB4YWMsIDB4NTcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NTcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjB9IH0sCit7IDB4OWI3OSwJMTYsCXsweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweDc1LCAweDUwLCAweGZmLCAweGU1LCAweDUwLCAweDcwLCAweDE2fSB9LAoreyAweDliODksCTE2LAl7MHg3NCwgMHgwOCwgMHgyNSwgMHg1NCwgMHhmNSwgMHg1NCwgMHhlNCwgMHgzNSwgMHg1MywgMHhmNSwgMHg1MywgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHg2NH0gfSwKK3sgMHg5Yjk5LAkxNiwJezB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OWEsIDB4ZTYsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4ODMsIDB4NWF9IH0sCit7IDB4OWJhOSwJMTYsCXsweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGQzLCAweDk0LCAweDAzLCAweDQwLCAweGYwLCAweDkwLCAweDAwLCAweDA0LCAweDc0LCAweDEzLCAweGYwLCAweGEzfSB9LAoreyAweDliYjksCTE2LAl7MHg3NCwgMHgxMiwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHg4NSwgMHg1NiwgMHg4MiwgMHg4NSwgMHg1NSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmZiwgMHg3NH0gfSwKK3sgMHg5YmM5LAkxNiwJezB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4OTAsIDB4MDIsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4MDF9IH0sCit7IDB4OWJkOSwJMTYsCXsweGM0LCAweGYwLCAweDAyLCAweDllLCAweDYzLCAweDkwLCAweDAxLCAweGMwLCAweDc0LCAweDAzLCAweGYwLCAweGEzLCAweDc0LCAweGU4LCAweGYwLCAweGU0fSB9LAoreyAweDliZTksCTE2LAl7MHhmNSwgMHg1MCwgMHg5MCwgMHgwMiwgMHhmNywgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhlMCwgMHhiNSwgMHgwNywgMHgxOSwgMHg5MCwgMHgwMX0gfSwKK3sgMHg5YmY5LAkxNiwJezB4YzAsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NzAsIDB4ZWEsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODV9IH0sCit7IDB4OWMwOSwJMTYsCXsweDU3LCAweDgzLCAweDc0LCAweGZmLCAweGYwLCAweGY1LCAweDUwLCAweGU1LCAweDUwLCAweDYwLCAweDAzLCAweDAyLCAweDllLCAweDYzLCAweDkwLCAweDAxfSB9LAoreyAweDljMTksCTE2LAl7MHhjMCwgMHhmMCwgMHhhMywgMHg3NCwgMHg5NiwgMHhmMCwgMHg5MCwgMHgwMSwgMHhjMCwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg3MCwgMHhmNn0gfSwKK3sgMHg5YzI5LAkxNiwJezB4ZTUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NDAsIDB4MGQsIDB4OTAsIDB4MjAsIDB4NzgsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4NzUsIDB4NTEsIDB4MDB9IH0sCit7IDB4OWMzOSwJMTYsCXsweGY1LCAweDUyLCAweDgwLCAweDA5LCAweDdmLCAweDAyLCAweDEyLCAweDExLCAweDI3LCAweDhlLCAweDUxLCAweDhmLCAweDUyLCAweGMzLCAweGU1LCAweDUxfSB9LAoreyAweDljNDksCTE2LAl7MHg2NCwgMHg4MCwgMHg5NCwgMHg4MCwgMHg0MCwgMHhkYSwgMHhlNSwgMHg1MiwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1MCwgMHg5MCwgMHgwMiwgMHhmNywgMHhlMH0gfSwKK3sgMHg5YzU5LAkxNiwJezB4NTUsIDB4NTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OGYsIDB4NGYsIDB4ODUsIDB4NTYsIDB4ODIsIDB4ODV9IH0sCit7IDB4OWM2OSwJMTYsCXsweDU1LCAweDgzLCAweGEzLCAweGUwLCAweGI0LCAweDA1LCAweDBjLCAweGU1LCAweDRmLCAweDcwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmfSB9LAoreyAweDljNzksCTE2LAl7MHgwMCwgMHg4ZiwgMHg0ZiwgMHhlNSwgMHg0ZiwgMHg3MCwgMHgwMywgMHgwMiwgMHg5ZSwgMHg2MywgMHhlNCwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHg4NX0gfSwKK3sgMHg5Yzg5LAkxNiwJezB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4ZTUsIDB4NTAsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4ZmYsIDB4ZmQsIDB4MTIsIDB4ODN9IH0sCit7IDB4OWM5OSwJMTYsCXsweDVhLCAweDdlLCAweDIwLCAweDdmLCAweDAwLCAweDc1LCAweDUzLCAweDIwLCAweDc1LCAweDU0LCAweDAwLCAweDg1LCAweDU0LCAweDgyLCAweDg1LCAweDUzfSB9LAoreyAweDljYTksCTE2LAl7MHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4NSwgMHg1NCwgMHg4MiwgMHg4NSwgMHg1MywgMHg4MywgMHg3NCwgMHgwMX0gfSwKK3sgMHg5Y2I5LAkxNiwJezB4ZjAsIDB4YTMsIDB4ZTQsIDB4ZjAsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTMsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4N2Z9IH0sCit7IDB4OWNjOSwJMTYsCXsweGYwLCAweGQyLCAweDA0LCAweDAyLCAweDllLCAweDYzLCAweGMyLCAweDA0LCAweDdlLCAweDIwLCAweDdmLCAweDAwLCAweDc1LCAweDUzLCAweDIwLCAweDc1fSB9LAoreyAweDljZDksCTE2LAl7MHg1NCwgMHgwMCwgMHhlNSwgMHg1NCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1MywgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlNn0gfSwKK3sgMHg5Y2U5LAkxNiwJezB4ZjEsIDB4ZTQsIDB4ZmYsIDB4N2QsIDB4MDEsIDB4MTIsIDB4ODMsIDB4NWEsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ZjUsIDB4NGV9IH0sCit7IDB4OWNmOSwJMTYsCXsweGFmLCAweDRlLCAweGU0LCAweGZkLCAweDEyLCAweDgzLCAweDVhLCAweGU1LCAweDRlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1fSB9LAoreyAweDlkMDksCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZiwgMHg4MiwgMHhmNSwgMHg1MywgMHg4ZiwgMHg1NCwgMHhmNSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNH0gfSwKK3sgMHg5ZDE5LAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4N2J9IH0sCit7IDB4OWQyOSwJMTYsCXsweDAxLCAweDc1LCAweDVjLCAweDgwLCAweDc1LCAweDVkLCAweDQwLCAweDEyLCAweDk5LCAweDM1LCAweDhmLCAweDUwLCAweGU1LCAweDUwLCAweDcwLCAweDExfSB9LAoreyAweDlkMzksCTE2LAl7MHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMiwgMHg3YiwgMHgwMSwgMHg3NSwgMHg1YywgMHgxMCwgMHg3NSwgMHg1ZCwgMHgyMCwgMHgxMiwgMHg5OSwgMHgzNSwgMHg4Zn0gfSwKK3sgMHg5ZDQ5LAkxNiwJezB4NTAsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MTAsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4ZmIsIDB4NzUsIDB4NWMsIDB4ODAsIDB4NzUsIDB4NWQsIDB4NDB9IH0sCit7IDB4OWQ1OSwJMTYsCXsweDEyLCAweDk5LCAweDM1LCAweDhmLCAweDUwLCAweGU1LCAweDUwLCAweDcwLCAweDEwLCAweGFmLCAweDRlLCAweDdkLCAweDAyLCAweGZiLCAweDc1LCAweDVjfSB9LAoreyAweDlkNjksCTE2LAl7MHgxMCwgMHg3NSwgMHg1ZCwgMHgyMCwgMHgxMiwgMHg5OSwgMHgzNSwgMHg4ZiwgMHg1MCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHg4MywgMHg1YX0gfSwKK3sgMHg5ZDc5LAkxNiwJezB4ZTUsIDB4NTAsIDB4NjAsIDB4MjYsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4ZTUsIDB4NGUsIDB4MDQsIDB4ZmYsIDB4MDUsIDB4NTgsIDB4ZTV9IH0sCit7IDB4OWQ4OSwJMTYsCXsweDU4LCAweGFjLCAweDU3LCAweDcwLCAweDAyLCAweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDg1LCAweDU4fSB9LAoreyAweDlkOTksCTE2LAl7MHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhlNSwgMHg1MCwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhkMywgMHg5NH0gfSwKK3sgMHg5ZGE5LAkxNiwJezB4MDMsIDB4NTAsIDB4MDMsIDB4MDIsIDB4OWMsIDB4ZjksIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4NTksIDB4ZjAsIDB4YTMsIDB4ZjB9IH0sCit7IDB4OWRiOSwJMTYsCXsweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweDc0LCAweDllLCAweGYwLCAweGEzLCAweDc0fSB9LAoreyAweDlkYzksCTE2LAl7MHg4NSwgMHhmMCwgMHg3ZSwgMHgwMywgMHg3ZiwgMHg1OSwgMHgxMiwgMHg4MSwgMHhkOSwgMHhlZiwgMHg2NCwgMHgwOCwgMHg3MCwgMHgwMywgMHgwMiwgMHg5ZX0gfSwKK3sgMHg5ZGQ5LAkxNiwJezB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4NTksIDB4ZjAsIDB4YTMsIDB4ZjB9IH0sCit7IDB4OWRlOSwJMTYsCXsweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweGU1LCAweDU3LCAweGYwLCAweGEzLCAweGU1fSB9LAoreyAweDlkZjksCTE2LAl7MHg1OCwgMHhmMCwgMHg3ZSwgMHgwMywgMHg3ZiwgMHg1OSwgMHgxMiwgMHgxOSwgMHhjMSwgMHhlZiwgMHg2NCwgMHgwOCwgMHg2MCwgMHg1YywgMHhlNCwgMHg5MH0gfSwKK3sgMHg5ZTA5LAkxNiwJezB4MDMsIDB4MzgsIDB4ZjAsIDB4ODAsIDB4NTUsIDB4ZTUsIDB4NTYsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZTQsIDB4MzUsIDB4NTUsIDB4ZmEsIDB4YTksIDB4MDd9IH0sCit7IDB4OWUxOSwJMTYsCXsweDdiLCAweDAxLCAweDdkLCAweDEwLCAweDEyLCAweDk4LCAweDk4LCAweGVmLCAweDRlLCAweDcwLCAweDMyLCAweDkwLCAweDAzLCAweDU5LCAweGYwLCAweGEzfSB9LAoreyAweDllMjksCTE2LAl7MHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHg1NiwgMHgyNCwgMHgwMiwgMHg5MH0gfSwKK3sgMHg5ZTM5LAkxNiwJezB4MDMsIDB4NjAsIDB4ZjAsIDB4ZTQsIDB4MzUsIDB4NTUsIDB4OTAsIDB4MDMsIDB4NWYsIDB4ZjAsIDB4N2UsIDB4MDMsIDB4N2YsIDB4NTksIDB4MTIsIDB4ODF9IH0sCit7IDB4OWU0OSwJMTYsCXsweGQ5LCAweGVmLCAweDY0LCAweDA4LCAweDYwLCAweDE0LCAweGU0LCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweDgwLCAweDBkLCAweGU0LCAweDkwLCAweDAzfSB9LAoreyAweDllNTksCTE2LAl7MHgzOCwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHgwMywgMHgzOCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgwMSwgMHhjMCwgMHhlNCwgMHhmMCwgMHhhM30gfSwKK3sgMHg5ZTY5LAkxNiwJezB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NzAsIDB4ZjYsIDB4N2UsIDB4MDMsIDB4N2Z9IH0sCit7IDB4OWU3OSwJMTEsCXsweDM1LCAweDdkLCAweDI0LCAweDEyLCAweDkxLCAweDZhLCAweGU0LCAweDkwLCAweDAyLCAweGFmLCAweGYwfSB9LAoreyAweDllODQsCTEsCXsweDIyfSB9LAoreyAweDllODUsCTE2LAl7MHhmZiwgMHhmZSwgMHhmYywgMHhmOCwgMHhmMCwgMHhlMCwgMHhjMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHgwNywgMHgwZiwgMHgxZiwgMHgzZiwgMHg3Zn0gfSwKK3sgMHg5ZTk1LAkxNiwJezB4MDAsIDB4MDAsIDB4YzAsIDB4YzEsIDB4YzEsIDB4ODEsIDB4MDEsIDB4NDAsIDB4YzMsIDB4MDEsIDB4MDMsIDB4YzAsIDB4MDIsIDB4ODAsIDB4YzIsIDB4NDF9IH0sCit7IDB4OWVhNSwJMTYsCXsweGM2LCAweDAxLCAweDA2LCAweGMwLCAweDA3LCAweDgwLCAweGM3LCAweDQxLCAweDA1LCAweDAwLCAweGM1LCAweGMxLCAweGM0LCAweDgxLCAweDA0LCAweDQwfSB9LAoreyAweDllYjUsCTE2LAl7MHhjYywgMHgwMSwgMHgwYywgMHhjMCwgMHgwZCwgMHg4MCwgMHhjZCwgMHg0MSwgMHgwZiwgMHgwMCwgMHhjZiwgMHhjMSwgMHhjZSwgMHg4MSwgMHgwZSwgMHg0MH0gfSwKK3sgMHg5ZWM1LAkxNiwJezB4MGEsIDB4MDAsIDB4Y2EsIDB4YzEsIDB4Y2IsIDB4ODEsIDB4MGIsIDB4NDAsIDB4YzksIDB4MDEsIDB4MDksIDB4YzAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4NDF9IH0sCit7IDB4OWVkNSwJMTYsCXsweGQ4LCAweDAxLCAweDE4LCAweGMwLCAweDE5LCAweDgwLCAweGQ5LCAweDQxLCAweDFiLCAweDAwLCAweGRiLCAweGMxLCAweGRhLCAweDgxLCAweDFhLCAweDQwfSB9LAoreyAweDllZTUsCTE2LAl7MHgxZSwgMHgwMCwgMHhkZSwgMHhjMSwgMHhkZiwgMHg4MSwgMHgxZiwgMHg0MCwgMHhkZCwgMHgwMSwgMHgxZCwgMHhjMCwgMHgxYywgMHg4MCwgMHhkYywgMHg0MX0gfSwKK3sgMHg5ZWY1LAkxNiwJezB4MTQsIDB4MDAsIDB4ZDQsIDB4YzEsIDB4ZDUsIDB4ODEsIDB4MTUsIDB4NDAsIDB4ZDcsIDB4MDEsIDB4MTcsIDB4YzAsIDB4MTYsIDB4ODAsIDB4ZDYsIDB4NDF9IH0sCit7IDB4OWYwNSwJMTYsCXsweGQyLCAweDAxLCAweDEyLCAweGMwLCAweDEzLCAweDgwLCAweGQzLCAweDQxLCAweDExLCAweDAwLCAweGQxLCAweGMxLCAweGQwLCAweDgxLCAweDEwLCAweDQwfSB9LAoreyAweDlmMTUsCTE2LAl7MHhmMCwgMHgwMSwgMHgzMCwgMHhjMCwgMHgzMSwgMHg4MCwgMHhmMSwgMHg0MSwgMHgzMywgMHgwMCwgMHhmMywgMHhjMSwgMHhmMiwgMHg4MSwgMHgzMiwgMHg0MH0gfSwKK3sgMHg5ZjI1LAkxNiwJezB4MzYsIDB4MDAsIDB4ZjYsIDB4YzEsIDB4ZjcsIDB4ODEsIDB4MzcsIDB4NDAsIDB4ZjUsIDB4MDEsIDB4MzUsIDB4YzAsIDB4MzQsIDB4ODAsIDB4ZjQsIDB4NDF9IH0sCit7IDB4OWYzNSwJMTYsCXsweDNjLCAweDAwLCAweGZjLCAweGMxLCAweGZkLCAweDgxLCAweDNkLCAweDQwLCAweGZmLCAweDAxLCAweDNmLCAweGMwLCAweDNlLCAweDgwLCAweGZlLCAweDQxfSB9LAoreyAweDlmNDUsCTE2LAl7MHhmYSwgMHgwMSwgMHgzYSwgMHhjMCwgMHgzYiwgMHg4MCwgMHhmYiwgMHg0MSwgMHgzOSwgMHgwMCwgMHhmOSwgMHhjMSwgMHhmOCwgMHg4MSwgMHgzOCwgMHg0MH0gfSwKK3sgMHg5ZjU1LAkxNiwJezB4MjgsIDB4MDAsIDB4ZTgsIDB4YzEsIDB4ZTksIDB4ODEsIDB4MjksIDB4NDAsIDB4ZWIsIDB4MDEsIDB4MmIsIDB4YzAsIDB4MmEsIDB4ODAsIDB4ZWEsIDB4NDF9IH0sCit7IDB4OWY2NSwJMTYsCXsweGVlLCAweDAxLCAweDJlLCAweGMwLCAweDJmLCAweDgwLCAweGVmLCAweDQxLCAweDJkLCAweDAwLCAweGVkLCAweGMxLCAweGVjLCAweDgxLCAweDJjLCAweDQwfSB9LAoreyAweDlmNzUsCTE2LAl7MHhlNCwgMHgwMSwgMHgyNCwgMHhjMCwgMHgyNSwgMHg4MCwgMHhlNSwgMHg0MSwgMHgyNywgMHgwMCwgMHhlNywgMHhjMSwgMHhlNiwgMHg4MSwgMHgyNiwgMHg0MH0gfSwKK3sgMHg5Zjg1LAkxNiwJezB4MjIsIDB4MDAsIDB4ZTIsIDB4YzEsIDB4ZTMsIDB4ODEsIDB4MjMsIDB4NDAsIDB4ZTEsIDB4MDEsIDB4MjEsIDB4YzAsIDB4MjAsIDB4ODAsIDB4ZTAsIDB4NDF9IH0sCit7IDB4OWY5NSwJMTYsCXsweGEwLCAweDAxLCAweDYwLCAweGMwLCAweDYxLCAweDgwLCAweGExLCAweDQxLCAweDYzLCAweDAwLCAweGEzLCAweGMxLCAweGEyLCAweDgxLCAweDYyLCAweDQwfSB9LAoreyAweDlmYTUsCTE2LAl7MHg2NiwgMHgwMCwgMHhhNiwgMHhjMSwgMHhhNywgMHg4MSwgMHg2NywgMHg0MCwgMHhhNSwgMHgwMSwgMHg2NSwgMHhjMCwgMHg2NCwgMHg4MCwgMHhhNCwgMHg0MX0gfSwKK3sgMHg5ZmI1LAkxNiwJezB4NmMsIDB4MDAsIDB4YWMsIDB4YzEsIDB4YWQsIDB4ODEsIDB4NmQsIDB4NDAsIDB4YWYsIDB4MDEsIDB4NmYsIDB4YzAsIDB4NmUsIDB4ODAsIDB4YWUsIDB4NDF9IH0sCit7IDB4OWZjNSwJMTYsCXsweGFhLCAweDAxLCAweDZhLCAweGMwLCAweDZiLCAweDgwLCAweGFiLCAweDQxLCAweDY5LCAweDAwLCAweGE5LCAweGMxLCAweGE4LCAweDgxLCAweDY4LCAweDQwfSB9LAoreyAweDlmZDUsCTE2LAl7MHg3OCwgMHgwMCwgMHhiOCwgMHhjMSwgMHhiOSwgMHg4MSwgMHg3OSwgMHg0MCwgMHhiYiwgMHgwMSwgMHg3YiwgMHhjMCwgMHg3YSwgMHg4MCwgMHhiYSwgMHg0MX0gfSwKK3sgMHg5ZmU1LAkxNiwJezB4YmUsIDB4MDEsIDB4N2UsIDB4YzAsIDB4N2YsIDB4ODAsIDB4YmYsIDB4NDEsIDB4N2QsIDB4MDAsIDB4YmQsIDB4YzEsIDB4YmMsIDB4ODEsIDB4N2MsIDB4NDB9IH0sCit7IDB4OWZmNSwJMTYsCXsweGI0LCAweDAxLCAweDc0LCAweGMwLCAweDc1LCAweDgwLCAweGI1LCAweDQxLCAweDc3LCAweDAwLCAweGI3LCAweGMxLCAweGI2LCAweDgxLCAweDc2LCAweDQwfSB9LAoreyAweGEwMDUsCTE2LAl7MHg3MiwgMHgwMCwgMHhiMiwgMHhjMSwgMHhiMywgMHg4MSwgMHg3MywgMHg0MCwgMHhiMSwgMHgwMSwgMHg3MSwgMHhjMCwgMHg3MCwgMHg4MCwgMHhiMCwgMHg0MX0gfSwKK3sgMHhhMDE1LAkxNiwJezB4NTAsIDB4MDAsIDB4OTAsIDB4YzEsIDB4OTEsIDB4ODEsIDB4NTEsIDB4NDAsIDB4OTMsIDB4MDEsIDB4NTMsIDB4YzAsIDB4NTIsIDB4ODAsIDB4OTIsIDB4NDF9IH0sCit7IDB4YTAyNSwJMTYsCXsweDk2LCAweDAxLCAweDU2LCAweGMwLCAweDU3LCAweDgwLCAweDk3LCAweDQxLCAweDU1LCAweDAwLCAweDk1LCAweGMxLCAweDk0LCAweDgxLCAweDU0LCAweDQwfSB9LAoreyAweGEwMzUsCTE2LAl7MHg5YywgMHgwMSwgMHg1YywgMHhjMCwgMHg1ZCwgMHg4MCwgMHg5ZCwgMHg0MSwgMHg1ZiwgMHgwMCwgMHg5ZiwgMHhjMSwgMHg5ZSwgMHg4MSwgMHg1ZSwgMHg0MH0gfSwKK3sgMHhhMDQ1LAkxNiwJezB4NWEsIDB4MDAsIDB4OWEsIDB4YzEsIDB4OWIsIDB4ODEsIDB4NWIsIDB4NDAsIDB4OTksIDB4MDEsIDB4NTksIDB4YzAsIDB4NTgsIDB4ODAsIDB4OTgsIDB4NDF9IH0sCit7IDB4YTA1NSwJMTYsCXsweDg4LCAweDAxLCAweDQ4LCAweGMwLCAweDQ5LCAweDgwLCAweDg5LCAweDQxLCAweDRiLCAweDAwLCAweDhiLCAweGMxLCAweDhhLCAweDgxLCAweDRhLCAweDQwfSB9LAoreyAweGEwNjUsCTE2LAl7MHg0ZSwgMHgwMCwgMHg4ZSwgMHhjMSwgMHg4ZiwgMHg4MSwgMHg0ZiwgMHg0MCwgMHg4ZCwgMHgwMSwgMHg0ZCwgMHhjMCwgMHg0YywgMHg4MCwgMHg4YywgMHg0MX0gfSwKK3sgMHhhMDc1LAkxNiwJezB4NDQsIDB4MDAsIDB4ODQsIDB4YzEsIDB4ODUsIDB4ODEsIDB4NDUsIDB4NDAsIDB4ODcsIDB4MDEsIDB4NDcsIDB4YzAsIDB4NDYsIDB4ODAsIDB4ODYsIDB4NDF9IH0sCit7IDB4YTA4NSwJMTYsCXsweDgyLCAweDAxLCAweDQyLCAweGMwLCAweDQzLCAweDgwLCAweDgzLCAweDQxLCAweDQxLCAweDAwLCAweDgxLCAweGMxLCAweDgwLCAweDgxLCAweDQwLCAweDQwfSB9LAoreyAweGEwOTUsCTE2LAl7MHhlNCwgMHhmZiwgMHg3NCwgMHhmOCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMn0gfSwKK3sgMHhhMGE1LAkxNiwJezB4YTEsIDB4MzgsIDB4NzQsIDB4M2EsIDB4MmYsIDB4ZjgsIDB4ZTYsIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MDIsIDB4YTEsIDB4MzgsIDB4ZWYsIDB4NzUsIDB4ZjB9IH0sCit7IDB4YTBiNSwJMTYsCXsweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFkLCAweDgyLCAweGZjLCAweGY1LCAweDgzLCAweGU1LCAweDgyfSB9LAoreyAweGEwYzUsCTE2LAl7MHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg2MCwgMHg2NCwgMHg2MCwgMHg3MCwgMHg2M30gfSwKK3sgMHhhMGQ1LAkxNiwJezB4ZWYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4ZWYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDF9IH0sCit7IDB4YTBlNSwJMTYsCXsweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzLCAweGUwLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGYwLCAweDc0LCAweGY4fSB9LAoreyAweGEwZjUsCTE2LAl7MHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmMCwgMHg3MCwgMHgzNiwgMHhlZiwgMHgyNSwgMHhlMH0gfSwKK3sgMHhhMTA1LAkxNiwJezB4MjQsIDB4YzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZWYsIDB4MjUsIDB4ZTAsIDB4ZmUsIDB4YzN9IH0sCit7IDB4YTExNSwJMTYsCXsweDc0LCAweDBjLCAweDllLCAweDc1LCAweGYwLCAweDQwLCAweGE0LCAweDI0LCAweDQwLCAweGY1LCAweDgyLCAweGU1LCAweGYwLCAweDM0LCAweDdiLCAweGFkfSB9LAoreyAweGExMjUsCTE2LAl7MHg4MiwgMHhmYywgMHhlZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhlZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMH0gfSwKK3sgMHhhMTM1LAkxMiwJezB4YTMsIDB4ZWQsIDB4ZjAsIDB4MGYsIDB4ZWYsIDB4NjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4YTAsIDB4OTd9IH0sCit7IDB4YTE0MSwJMSwJezB4MjJ9IH0sCit7IDB4YTE0MiwJMTYsCXsweGU3LCAweDA5LCAweGY2LCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDQ2LCAweGU3LCAweDA5LCAweGYyLCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDNlfSB9LAoreyAweGExNTIsCTE2LAl7MHg4OCwgMHg4MiwgMHg4YywgMHg4MywgMHhlNywgMHgwOSwgMHhmMCwgMHhhMywgMHhkZiwgMHhmYSwgMHg4MCwgMHgzMiwgMHhlMywgMHgwOSwgMHhmNiwgMHgwOH0gfSwKK3sgMHhhMTYyLAkxNiwJezB4ZGYsIDB4ZmEsIDB4ODAsIDB4NzgsIDB4ZTMsIDB4MDksIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NzAsIDB4ODgsIDB4ODIsIDB4OGMsIDB4ODN9IH0sCit7IDB4YTE3MiwJMTYsCXsweGUzLCAweDA5LCAweGYwLCAweGEzLCAweGRmLCAweGZhLCAweDgwLCAweDY0LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweGEzLCAweGY2LCAweDA4fSB9LAoreyAweGExODIsCTE2LAl7MHhkZiwgMHhmYSwgMHg4MCwgMHg1OCwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhhMywgMHhmMiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg0Y30gfSwKK3sgMHhhMTkyLAkxNiwJezB4ODAsIDB4ZDIsIDB4ODAsIDB4ZmEsIDB4ODAsIDB4YzYsIDB4ODAsIDB4ZDQsIDB4ODAsIDB4NjksIDB4ODAsIDB4ZjIsIDB4ODAsIDB4MzMsIDB4ODAsIDB4MTB9IH0sCit7IDB4YTFhMiwJMTYsCXsweDgwLCAweGE2LCAweDgwLCAweGVhLCAweDgwLCAweDlhLCAweDgwLCAweGE4LCAweDgwLCAweGRhLCAweDgwLCAweGUyLCAweDgwLCAweGNhLCAweDgwLCAweDMzfSB9LAoreyAweGExYjIsCTE2LAl7MHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlYywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYywgMHhjNSwgMHg4M30gfSwKK3sgMHhhMWMyLAkxNiwJezB4Y2MsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODB9IH0sCit7IDB4YTFkMiwJMTYsCXsweDBkLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweGEzLCAweGY2LCAweDA4LCAweGRmLCAweGY5LCAweGVjLCAweGZhLCAweGE5LCAweGYwfSB9LAoreyAweGExZTIsCTE2LAl7MHhlZCwgMHhmYiwgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlYywgMHhmYSwgMHhlMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjY30gfSwKK3sgMHhhMWYyLAkxNiwJezB4YzUsIDB4ODMsIDB4Y2MsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZGYsIDB4ZWEsIDB4ZGV9IH0sCit7IDB4YTIwMiwJMTYsCXsweGU4LCAweDgwLCAweGRiLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweGEzLCAweGYyLCAweDA4LCAweGRmLCAweGY5LCAweDgwLCAweGNjfSB9LAoreyAweGEyMTIsCTE2LAl7MHg4OCwgMHhmMCwgMHhlZCwgMHgyNCwgMHgwMiwgMHhiNCwgMHgwNCwgMHgwMCwgMHg1MCwgMHhjMiwgMHhmNSwgMHg4MiwgMHhlYiwgMHgyNCwgMHgwMiwgMHhiNH0gfSwKK3sgMHhhMjIyLAkxNiwJezB4MDQsIDB4MDAsIDB4NTAsIDB4YjgsIDB4MjMsIDB4MjMsIDB4NDUsIDB4ODIsIDB4ZjUsIDB4ODIsIDB4ZWYsIDB4NGUsIDB4NjAsIDB4YWUsIDB4ZWYsIDB4NjB9IH0sCit7IDB4YTIzMiwJOSwJezB4MDEsIDB4MGUsIDB4ZTUsIDB4ODIsIDB4MjMsIDB4OTAsIDB4YTEsIDB4OTIsIDB4NzN9IH0sCit7IDB4YTIzYiwJMTYsCXsweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyfSB9LAoreyAweGEyNGIsCTksCXsweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweGEyNTQsCTE2LAl7MHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MH0gfSwKK3sgMHhhMjY0LAkxNiwJezB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjJ9IH0sCit7IDB4YTI3NCwJMTMsCXsweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweGEyODEsCTE2LAl7MHhjNSwgMHhmMCwgMHhmOCwgMHhhMywgMHhlMCwgMHgyOCwgMHhmMCwgMHhjNSwgMHhmMCwgMHhmOCwgMHhlNSwgMHg4MiwgMHgxNSwgMHg4MiwgMHg3MCwgMHgwMn0gfSwKK3sgMHhhMjkxLAk2LAl7MHgxNSwgMHg4MywgMHhlMCwgMHgzOCwgMHhmMCwgMHgyMn0gfSwKK3sgMHhhMjk3LAkxNiwJezB4YTMsIDB4ZjgsIDB4ZTAsIDB4YzUsIDB4ZjAsIDB4MjUsIDB4ZjAsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MTUsIDB4ODIsIDB4NzAsIDB4MDIsIDB4MTUsIDB4ODN9IH0sCit7IDB4YTJhNywJNiwJezB4ZTAsIDB4YzgsIDB4MzgsIDB4ZjAsIDB4ZTgsIDB4MjJ9IH0sCit7IDB4YTJhZCwJMTYsCXsweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwfSB9LAoreyAweGEyYmQsCTE2LAl7MHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZX0gfSwKK3sgMHhhMmNkLAkxNiwJezB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIDB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODN9IH0sCit7IDB4YTJkZCwJOCwJezB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjJ9IH0sCit7IDB4YTJlNSwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweDc1LCAweDgyLCAweDAwLCAweGVmLCAweDJmLCAweGZmLCAweGVlLCAweDMzLCAweGZlLCAweGNkLCAweDMzLCAweGNkLCAweGNjfSB9LAoreyAweGEyZjUsCTE2LAl7MHgzMywgMHhjYywgMHhjNSwgMHg4MiwgMHgzMywgMHhjNSwgMHg4MiwgMHg5YiwgMHhlZCwgMHg5YSwgMHhlYywgMHg5OSwgMHhlNSwgMHg4MiwgMHg5OCwgMHg0MH0gfSwKK3sgMHhhMzA1LAkxNiwJezB4MGMsIDB4ZjUsIDB4ODIsIDB4ZWUsIDB4OWIsIDB4ZmUsIDB4ZWQsIDB4OWEsIDB4ZmQsIDB4ZWMsIDB4OTksIDB4ZmMsIDB4MGYsIDB4ZDUsIDB4ZjAsIDB4ZDZ9IH0sCit7IDB4YTMxNSwJMTYsCXsweGU0LCAweGNlLCAweGZiLCAweGU0LCAweGNkLCAweGZhLCAweGU0LCAweGNjLCAweGY5LCAweGE4LCAweDgyLCAweDIyLCAweGI4LCAweDAwLCAweGMxLCAweGI5fSB9LAoreyAweGEzMjUsCTE2LAl7MHgwMCwgMHg1OSwgMHhiYSwgMHgwMCwgMHgyZCwgMHhlYywgMHg4YiwgMHhmMCwgMHg4NCwgMHhjZiwgMHhjZSwgMHhjZCwgMHhmYywgMHhlNSwgMHhmMCwgMHhjYn0gfSwKK3sgMHhhMzM1LAkxNiwJezB4ZjksIDB4NzgsIDB4MTgsIDB4ZWYsIDB4MmYsIDB4ZmYsIDB4ZWUsIDB4MzMsIDB4ZmUsIDB4ZWQsIDB4MzMsIDB4ZmQsIDB4ZWMsIDB4MzMsIDB4ZmMsIDB4ZWJ9IH0sCit7IDB4YTM0NSwJMTYsCXsweDMzLCAweGZiLCAweDEwLCAweGQ3LCAweDAzLCAweDk5LCAweDQwLCAweDA0LCAweGViLCAweDk5LCAweGZiLCAweDBmLCAweGQ4LCAweGU1LCAweGU0LCAweGY5fSB9LAoreyAweGEzNTUsCTE2LAl7MHhmYSwgMHgyMiwgMHg3OCwgMHgxOCwgMHhlZiwgMHgyZiwgMHhmZiwgMHhlZSwgMHgzMywgMHhmZSwgMHhlZCwgMHgzMywgMHhmZCwgMHhlYywgMHgzMywgMHhmY30gfSwKK3sgMHhhMzY1LAkxNiwJezB4YzksIDB4MzMsIDB4YzksIDB4MTAsIDB4ZDcsIDB4MDUsIDB4OWIsIDB4ZTksIDB4OWEsIDB4NDAsIDB4MDcsIDB4ZWMsIDB4OWIsIDB4ZmMsIDB4ZTksIDB4OWF9IH0sCit7IDB4YTM3NSwJMTYsCXsweGY5LCAweDBmLCAweGQ4LCAweGUwLCAweGU0LCAweGM5LCAweGZhLCAweGU0LCAweGNjLCAweGZiLCAweDIyLCAweDc1LCAweGYwLCAweDEwLCAweGVmLCAweDJmfSB9LAoreyAweGEzODUsCTE2LAl7MHhmZiwgMHhlZSwgMHgzMywgMHhmZSwgMHhlZCwgMHgzMywgMHhmZCwgMHhjYywgMHgzMywgMHhjYywgMHhjOCwgMHgzMywgMHhjOCwgMHgxMCwgMHhkNywgMHgwN30gfSwKK3sgMHhhMzk1LAkxNiwJezB4OWIsIDB4ZWMsIDB4OWEsIDB4ZTgsIDB4OTksIDB4NDAsIDB4MGEsIDB4ZWQsIDB4OWIsIDB4ZmQsIDB4ZWMsIDB4OWEsIDB4ZmMsIDB4ZTgsIDB4OTksIDB4Zjh9IH0sCit7IDB4YTNhNSwJMTQsCXsweDBmLCAweGQ1LCAweGYwLCAweGRhLCAweGU0LCAweGNkLCAweGZiLCAweGU0LCAweGNjLCAweGZhLCAweGU0LCAweGM4LCAweGY5LCAweDIyfSB9LAoreyAweGEzYjMsCTE2LAl7MHhlYiwgMHg5ZiwgMHhmNSwgMHhmMCwgMHhlYSwgMHg5ZSwgMHg0MiwgMHhmMCwgMHhlOSwgMHg5ZCwgMHg0MiwgMHhmMCwgMHhlOCwgMHg5YywgMHg0NSwgMHhmMH0gfSwKK3sgMHhhM2MzLAkxLAl7MHgyMn0gfSwKK3sgMHhhM2M0LAkxNiwJezB4ZTgsIDB4NjAsIDB4MGYsIDB4ZWMsIDB4YzMsIDB4MTMsIDB4ZmMsIDB4ZWQsIDB4MTMsIDB4ZmQsIDB4ZWUsIDB4MTMsIDB4ZmUsIDB4ZWYsIDB4MTMsIDB4ZmZ9IH0sCit7IDB4YTNkNCwJMywJezB4ZDgsIDB4ZjEsIDB4MjJ9IH0sCit7IDB4YTNkNywJMTYsCXsweDA4LCAweDA4LCAweDA4LCAweGU2LCAweGNmLCAweDJmLCAweGY2LCAweDE4LCAweGU2LCAweGNlLCAweDNlLCAweGY2LCAweDE4LCAweGU2LCAweGNkLCAweDNkfSB9LAoreyAweGEzZTcsCTcsCXsweGY2LCAweDE4LCAweGU2LCAweGNjLCAweDNjLCAweGY2LCAweDIyfSB9LAoreyAweGEzZWUsCTEyLAl7MHhlYywgMHhmMCwgMHhhMywgMHhlZCwgMHhmMCwgMHhhMywgMHhlZSwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHgyMn0gfSwKK3sgMHhhM2ZhLAkxNiwJezB4YTgsIDB4ODIsIDB4ODUsIDB4ODMsIDB4ZjAsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4MTIsIDB4YTQsIDB4MTEsIDB4MTIsIDB4YTQsIDB4MTEsIDB4MTJ9IH0sCit7IDB4YTQwYSwJMTYsCXsweGE0LCAweDExLCAweDEyLCAweGE0LCAweDExLCAweGU0LCAweDczLCAweGU0LCAweDkzLCAweGEzLCAweGM1LCAweDgzLCAweGM1LCAweGYwLCAweGM1LCAweDgzfSB9LAoreyAweGE0MWEsCTE2LAl7MHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhmMCwgMHhhMywgMHhjNSwgMHg4MywgMHhjNSwgMHhmMCwgMHhjNSwgMHg4MywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOH0gfSwKK3sgMHhhNDJhLAkxLAl7MHgyMn0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKKworI2lmZGVmIERFQlVHCitzdGF0aWMgY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkIHdoaXRlaGVhdF9sb2FkZXJbXSA9IHsKK3sgMHgwMDAwLAkzLAl7MHgwMiwgMHgwOSwgMHg4ZH0gfSwKK3sgMHgwMDMzLAkzLAl7MHgwMiwgMHgwZSwgMHg3MH0gfSwKK3sgMHgwMDQzLAkzLAl7MHgwMiwgMHgwYiwgMHgwMH0gfSwKK3sgMHgwMDRiLAkzLAl7MHgwMiwgMHgwNSwgMHhiM30gfSwKK3sgMHgwMTAwLAkxNiwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4NTAsIDB4ZjUsIDB4MGYsIDB4MTMsIDB4ZTR9IH0sCit7IDB4MDExMCwJMTYsCXsweDMzLCAweGY1LCAweDExLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDI0LCAweDVlLCAweGI0LCAweDA3LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDAzfSB9LAoreyAweDAxMjAsCTE2LAl7MHg3YywgMHg5MCwgMHgwMSwgMHgyOCwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMX0gfSwKK3sgMHgwMTMwLAkxNiwJezB4OTEsIDB4MDIsIDB4MDEsIDB4M2QsIDB4MDIsIDB4MDEsIDB4NTMsIDB4MDIsIDB4MDEsIDB4NmYsIDB4MDIsIDB4MDEsIDB4OWEsIDB4OTAsIDB4N2YsIDB4MDB9IH0sCit7IDB4MDE0MCwJMTYsCXsweGU1LCAweDExLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwfSB9LAoreyAweDAxNTAsCTE2LAl7MHgwMiwgMHgwMywgMHg3YywgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMTYwLAkxNiwJezB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDMsIDB4N2MsIDB4MTJ9IH0sCit7IDB4MDE3MCwJMTYsCXsweDBhLCAweDg5LCAweDUwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweDgwLCAweDA2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDBmfSB9LAoreyAweDAxODAsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwM30gfSwKK3sgMHgwMTkwLAkxNiwJezB4N2MsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGYsIDB4MDIsIDB4MDMsIDB4N2MsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDcsIDB4ZjB9IH0sCit7IDB4MDFhMCwJMTYsCXsweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGU4LCAweDdlfSB9LAoreyAweDAxYjAsCTE2LAl7MHgwMywgMHgxMiwgMHgwZCwgMHhkNSwgMHhkMiwgMHgwNiwgMHgxMiwgMHgwZCwgMHgwZCwgMHgwMiwgMHgwMywgMHg3YywgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwMWMwLAkxNiwJezB4NzUsIDB4MjksIDB4MDAsIDB4ZjUsIDB4MmEsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4ZTQsIDB4ZWUsIDB4NDIsIDB4MjksIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTB9IH0sCit7IDB4MDFkMCwJMTYsCXsweDc1LCAweDJiLCAweDAwLCAweGY1LCAweDJjLCAweGEzLCAweGUwLCAweGZlLCAweGU0LCAweGVlLCAweDQyLCAweDJiLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDAxZTAsCTE2LAl7MHg2NCwgMHhjMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwMiwgMHhjOSwgMHhlNSwgMHgyYywgMHg0NSwgMHgyYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3Y30gfSwKK3sgMHgwMWYwLAkxNiwJezB4YzMsIDB4ZTUsIDB4MmMsIDB4OTQsIDB4NDAsIDB4ZTUsIDB4MmIsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDgsIDB4ODUsIDB4MmIsIDB4MmQsIDB4ODUsIDB4MmN9IH0sCit7IDB4MDIwMCwJMTYsCXsweDJlLCAweDgwLCAweDA2LCAweDc1LCAweDJkLCAweDAwLCAweDc1LCAweDJlLCAweDQwLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDY0LCAweGEzLCAweDcwfSB9LAoreyAweDAyMTAsCTE2LAl7MHgzNCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzMiwgMHhjMywgMHhlNSwgMHgzMiwgMHg5NSwgMHgyZSwgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHg1MCwgMHg1Y30gfSwKK3sgMHgwMjIwLAkxNiwJezB4ZTUsIDB4MmEsIDB4MjUsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzEsIDB4MzUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDIzMCwJMTYsCXsweDI1LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDMyLCAweGU1LCAweDMyLCAweDcwfSB9LAoreyAweDAyNDAsCTE2LAl7MHgwMiwgMHgwNSwgMHgzMSwgMHg4MCwgMHhkMCwgMHhlNCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzMiwgMHhjMywgMHhlNSwgMHgzMiwgMHg5NSwgMHgyZSwgMHhlNX0gfSwKK3sgMHgwMjUwLAkxNiwJezB4MzEsIDB4OTUsIDB4MmQsIDB4NTAsIDB4MTgsIDB4NzQsIDB4MDAsIDB4MjUsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDI2MCwJMTYsCXsweDc0LCAweGNkLCAweGYwLCAweDA1LCAweDMyLCAweGU1LCAweDMyLCAweDcwLCAweDAyLCAweDA1LCAweDMxLCAweDgwLCAweGRkLCAweGFmLCAweDJhLCAweGFlfSB9LAoreyAweDAyNzAsCTE2LAl7MHgyOSwgMHhhZCwgMHgyZSwgMHg3YSwgMHg3ZiwgMHg3OSwgMHgwMCwgMHg3YiwgMHgwMCwgMHgxMiwgMHgwYiwgMHhmNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlNX0gfSwKK3sgMHgwMjgwLAkxNiwJezB4MmUsIDB4ZjAsIDB4ZTUsIDB4MmUsIDB4MjUsIDB4MmEsIDB4ZjUsIDB4MmEsIDB4ZTUsIDB4MmQsIDB4MzUsIDB4MjksIDB4ZjUsIDB4MjksIDB4YzMsIDB4ZTV9IH0sCit7IDB4MDI5MCwJMTYsCXsweDJjLCAweDk1LCAweDJlLCAweGY1LCAweDJjLCAweGU1LCAweDJiLCAweDk1LCAweDJkLCAweGY1LCAweDJiLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweGZmfSB9LAoreyAweDAyYTAsCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg3NSwgMHgyZiwgMHgwMCwgMHhmNSwgMHgzMCwgMHhkMywgMHg5NCwgMHgwMCwgMHhlNSwgMHgyZiwgMHg5NCwgMHgwMCwgMHg1MH0gfSwKK3sgMHgwMmIwLAkxNiwJezB4MGMsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ZTcsIDB4ODAsIDB4ZjQsIDB4OTAsIDB4N2YsIDB4YjR9IH0sCit7IDB4MDJjMCwJMTYsCXsweGUwLCAweDIwLCAweGUyLCAweDAzLCAweDAyLCAweDAxLCAweGU3LCAweDgwLCAweGY0LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDY0LCAweDQwLCAweDYwfSB9LAoreyAweDAyZDAsCTE2LAl7MHgwMywgMHgwMiwgMHgwMywgMHg3YywgMHhlNSwgMHgyYywgMHg0NSwgMHgyYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3YywgMHhlNCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMmUwLAkxNiwJezB4YzUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NzUsIDB4MmYsIDB4MDAsIDB4ZjUsIDB4MzAsIDB4ZDN9IH0sCit7IDB4MDJmMCwJMTYsCXsweDk0LCAweDAwLCAweGU1LCAweDJmLCAweDk0LCAweDAwLCAweDUwLCAweDA5LCAweDkwLCAweDdmLCAweGM0LCAweGUwLCAweDMwLCAweGUxLCAweDA5LCAweDgwfSB9LAoreyAweDAzMDAsCTE2LAl7MHhmNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHgyMCwgMHhlMywgMHhmOSwgMHg5MCwgMHg3ZiwgMHhjNSwgMHhlMCwgMHg3NSwgMHgyZCwgMHgwMCwgMHhmNX0gfSwKK3sgMHgwMzEwLAkxNiwJezB4MmUsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4NjQsIDB4YTMsIDB4NzAsIDB4MzgsIDB4OTAsIDB4MjAsIDB4NmIsIDB4ZjAsIDB4ZjUsIDB4MzEsIDB4ZjV9IH0sCit7IDB4MDMyMCwJMTYsCXsweDMyLCAweGMzLCAweGU1LCAweDMyLCAweDk1LCAweDJlLCAweGU1LCAweDMxLCAweDk1LCAweDJkLCAweDUwLCAweDM0LCAweDc0LCAweGMwLCAweDI1LCAweDMyfSB9LAoreyAweDAzMzAsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgyYSwgMHgyNSwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNX0gfSwKK3sgMHgwMzQwLAkxNiwJezB4MzEsIDB4MzUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzIsIDB4ZTUsIDB4MzIsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MzEsIDB4ODB9IH0sCit7IDB4MDM1MCwJMTYsCXsweGQwLCAweGFmLCAweDJhLCAweGFlLCAweDI5LCAweGFkLCAweDJlLCAweDdhLCAweDdlLCAweDc5LCAweGMwLCAweDdiLCAweGMwLCAweDEyLCAweDBjLCAweDgwfSB9LAoreyAweDAzNjAsCTE2LAl7MHhlNSwgMHgyZSwgMHgyNSwgMHgyYSwgMHhmNSwgMHgyYSwgMHhlNSwgMHgyZCwgMHgzNSwgMHgyOSwgMHhmNSwgMHgyOSwgMHhjMywgMHhlNSwgMHgyYywgMHg5NX0gfSwKK3sgMHgwMzcwLAkxMywJezB4MmUsIDB4ZjUsIDB4MmMsIDB4ZTUsIDB4MmIsIDB4OTUsIDB4MmQsIDB4ZjUsIDB4MmIsIDB4MDIsIDB4MDIsIDB4ZDQsIDB4YzN9IH0sCit7IDB4MDM3ZCwJMSwJezB4MjJ9IH0sCit7IDB4MDM3ZSwJMTYsCXsweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDU2LCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweGQyLCAweDI0fSB9LAoreyAweDAzOGUsCTE2LAl7MHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg0NiwgMHgyNCwgMHhmYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg1MCwgMHgxNCwgMHg3MCwgMHgwM30gfSwKK3sgMHgwMzllLAkxNiwJezB4MDIsIDB4MDQsIDB4NGEsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4M2UsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDQsIDB4MjR9IH0sCit7IDB4MDNhZSwJMTYsCXsweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweDlhLCAweDEyLCAweDBlLCAweDdiLCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmfSB9LAoreyAweDAzYmUsCTE2LAl7MHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwgMHg2MCwgMHg0MCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg2OSwgMHg3NCwgMHgxMSwgMHg5MH0gfSwKK3sgMHgwM2NlLAkxNiwJezB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTB9IH0sCit7IDB4MDNkZSwJMTYsCXsweGZmLCAweDEyLCAweDBiLCAweDU4LCAweDhiLCAweDI2LCAweDhhLCAweDI3LCAweDg5LCAweDI4LCAweGVhLCAweDQ5LCAweDYwLCAweDExLCAweGFlLCAweDAyfSB9LAoreyAweDAzZWUsCTE2LAl7MHhlZSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MH0gfSwKK3sgMHgwM2ZlLAkxNiwJezB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGN9IH0sCit7IDB4MDQwZSwJMTYsCXsweDNmLCAweDhiLCAweDI2LCAweDhhLCAweDI3LCAweDg5LCAweDI4LCAweGVhLCAweDQ5LCAweDYwLCAweDExLCAweGFlLCAweDAyLCAweGVlLCAweDkwLCAweDdmfSB9LAoreyAweDA0MWUsCTE2LAl7MHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMH0gfSwKK3sgMHgwNDJlLAkxNiwJezB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWJ9IH0sCit7IDB4MDQzZSwJMTYsCXsweDEyLCAweDBlLCAweDUyLCAweDAyLCAweDA1LCAweGFiLCAweDEyLCAweDBlLCAweDYwLCAweDAyLCAweDA1LCAweGFiLCAweDEyLCAweDBhLCAweGY3LCAweDAyfSB9LAoreyAweDA0NGUsCTE2LAl7MHgwNSwgMHhhYiwgMHgxMiwgMHgwOCwgMHhmMSwgMHgwMiwgMHgwNSwgMHhhYiwgMHgxMiwgMHgwZSwgMHg3ZCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYn0gfSwKK3sgMHgwNDVlLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsIDB4YTJ9IH0sCit7IDB4MDQ2ZSwJMTYsCXsweDAwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDAyLCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwfSB9LAoreyAweDA0N2UsCTE2LAl7MHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHgwNDhlLAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTB9IH0sCit7IDB4MDQ5ZSwJMTYsCXsweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0fSB9LAoreyAweDA0YWUsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhM30gfSwKK3sgMHgwNGJlLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDF9IH0sCit7IDB4MDRjZSwJMTYsCXsweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDEyLCAweDBlLCAweDdmLCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDA0ZGUsCTE2LAl7MHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNH0gfSwKK3sgMHgwNGVlLAkxNiwJezB4MDEsIDB4MDUsIDB4YzIsIDB4MDAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDV9IH0sCit7IDB4MDRmZSwJMTYsCXsweGFiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0fSB9LAoreyAweDA1MGUsCTE2LAl7MHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3Zn0gfSwKK3sgMHgwNTFlLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWZ9IH0sCit7IDB4MDUyZSwJMTYsCXsweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDZlLCAweDkwfSB9LAoreyAweDA1M2UsCTE2LAl7MHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg2NSwgMHgxMiwgMHgwZSwgMHg4MSwgMHg1MCwgMHg2MCwgMHg5MCwgMHg3ZiwgMHhlOH0gfSwKK3sgMHgwNTRlLAkxNiwJezB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NTQsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDR9IH0sCit7IDB4MDU1ZSwJMTYsCXsweGQyLCAweDAwLCAweDgwLCAweDQ5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDQwLCAweDkwLCAweDdmLCAweGVhfSB9LAoreyAweDA1NmUsCTE2LAl7MHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMH0gfSwKK3sgMHgwNTdlLAkxNiwJezB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDF9IH0sCit7IDB4MDU4ZSwJMTYsCXsweGYwLCAweDgwLCAweDFhLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDExLCAweGU0LCAweDkwLCAweDIwLCAweDZhfSB9LAoreyAweDA1OWUsCTE2LAl7MHhmMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNH0gfSwKK3sgMHgwNWFlLAk0LAl7MHhlMCwgMHg0NCwgMHgwMiwgMHhmMH0gfSwKK3sgMHgwNWIyLAkxLAl7MHgyMn0gfSwKK3sgMHgwNWIzLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MDVjMywJMTYsCXsweGQwLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDAzLCAweGMwLCAweDA2LCAweGMwLCAweDA3LCAweDkwLCAweDdmLCAweGE1fSB9LAoreyAweDA1ZDMsCTE2LAl7MHhlMCwgMHgzMCwgMHhlMiwgMHgwNiwgMHg3NSwgMHgwZCwgMHgwNiwgMHgwMiwgMHgwNiwgMHg3ZiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHgyMCwgMHhlMX0gfSwKK3sgMHgwNWUzLAkxNiwJezB4MGMsIDB4ZTUsIDB4MGQsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDYsIDB4NzUsIDB4MGQsIDB4MDcsIDB4MDIsIDB4MDYsIDB4N2YsIDB4YWYsIDB4MGQsIDB4ZWZ9IH0sCit7IDB4MDVmMywJMTYsCXsweDI0LCAweGZlLCAweDYwLCAweDQ4LCAweDE0LCAweDYwLCAweDJjLCAweDI0LCAweGZlLCAweDYwLCAweDc3LCAweDI0LCAweDA0LCAweDYwLCAweDAzLCAweDAyfSB9LAoreyAweDA2MDMsCTE2LAl7MHgwNiwgMHg3ZiwgMHhhYiwgMHgwOSwgMHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZiwgMHgwYywgMHgwNSwgMHgwYywgMHg4ZiwgMHg4MiwgMHg3NSwgMHg4M30gfSwKK3sgMHgwNjEzLAkxNiwJezB4MDAsIDB4MTIsIDB4MDcsIDB4ODUsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ZTUsIDB4MGMsIDB4NjUsIDB4MDgsIDB4NzAsIDB4NWUsIDB4NzUsIDB4MGR9IH0sCit7IDB4MDYyMywJMTYsCXsweDA1LCAweDgwLCAweDU5LCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGFiLCAweDA5LCAweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFlLCAweDBjLCAweDhlfSB9LAoreyAweDA2MzMsCTE2LAl7MHg4MiwgMHg3NSwgMHg4MywgMHgwMCwgMHgxMiwgMHgwNywgMHhiMiwgMHg3NSwgMHgwZCwgMHgwMiwgMHg4MCwgMHg0MCwgMHhlNSwgMHgwOCwgMHgyNCwgMHhmZX0gfSwKK3sgMHgwNjQzLAkxNiwJezB4YjUsIDB4MGMsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ZTUsIDB4MDgsIDB4MTQsIDB4YjUsIDB4MGMsIDB4MGF9IH0sCit7IDB4MDY1MywJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweGU0LCAweGY1LCAweDBkLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGFiLCAweDA5fSB9LAoreyAweDA2NjMsCTE2LAl7MHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZSwgMHgwYywgMHg4ZSwgMHg4MiwgMHg3NSwgMHg4MywgMHgwMCwgMHgxMiwgMHgwNywgMHhiMiwgMHgwNSwgMHgwY30gfSwKK3sgMHgwNjczLAkxNiwJezB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4NTMsIDB4OTEsIDB4ZGYsIDB4ZDB9IH0sCit7IDB4MDY4MywJMTYsCXsweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDAzLCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwfSB9LAoreyAweDA2OTMsCTEwLAl7MHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwNjlkLAkxNiwJezB4YzIsIDB4MDQsIDB4ZDIsIDB4MDUsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4YzIsIDB4MDMsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDEsIDB4MTJ9IH0sCit7IDB4MDZhZCwJMTYsCXsweDBlLCAweDc0LCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5fSB9LAoreyAweDA2YmQsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwNmNkLAkxNiwJezB4N2YsIDB4OTMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4MTIsIDB4MGEsIDB4MTksIDB4NzUsIDB4MjQsIDB4NDgsIDB4NzUsIDB4MjMsIDB4OTIsIDB4NzUsIDB4MjJ9IH0sCit7IDB4MDZkZCwJMTYsCXsweDAwLCAweDc1LCAweDIxLCAweDAwLCAweGU0LCAweGZmLCAweGZlLCAweDdlLCAweDA1LCAweDkwLCAweDIwLCAweDY4LCAweDc0LCAweDAxLCAweGYwLCAweGEzfSB9LAoreyAweDA2ZWQsCTE2LAl7MHhkZSwgMHhmYywgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwNSwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZX0gfSwKK3sgMHgwNmZkLAkxNiwJezB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MTIsIDB4MGUsIDB4NjgsIDB4MzAsIDB4MDEsIDB4MGEsIDB4ZTQsIDB4OTAsIDB4MjAsIDB4Njl9IH0sCit7IDB4MDcwZCwJMTYsCXsweGYwLCAweDEyLCAweDAzLCAweDdlLCAweGMyLCAweDAxLCAweDMwLCAweDA0LCAweDFhLCAweDEyLCAweDBlLCAweDc3LCAweDUwLCAweDEzLCAweDEyLCAweDA5fSB9LAoreyAweDA3MWQsCTE2LAl7MHgwMCwgMHgzMCwgMHgwMCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHhmMywgMHgxMiwgMHgwZCwgMHg4YiwgMHgxMiwgMHgwZX0gfSwKK3sgMHgwNzJkLAkxNiwJezB4NzksIDB4YzIsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4N2UsIDB4ZmYsIDB4N2QsIDB4ZmYsIDB4N2MsIDB4ZmYsIDB4NzgsIDB4MjEsIDB4MTIsIDB4MDgsIDB4MWR9IH0sCit7IDB4MDczZCwJMTYsCXsweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDc4LCAweDAwLCAweGMzLCAweDEyLCAweDA4LCAweDBjLCAweDcwLCAweDFiLCAweDc1LCAweDI0fSB9LAoreyAweDA3NGQsCTE2LAl7MHg0OCwgMHg3NSwgMHgyMywgMHg5MiwgMHhmNSwgMHgyMiwgMHhmNSwgMHgyMSwgMHg2MywgMHgyNSwgMHhmZiwgMHg5MCwgMHgyMCwgMHg2OCwgMHhlNSwgMHgyNX0gfSwKK3sgMHgwNzVkLAkxNCwJezB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4MTIsIDB4MDgsIDB4ZmYsIDB4ODAsIDB4OWJ9IH0sCit7IDB4MDc2YiwJMSwJezB4MjJ9IH0sCit7IDB4MDc2YywJMTYsCXsweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyfSB9LAoreyAweDA3N2MsCTksCXsweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA3ODUsCTE2LAl7MHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MH0gfSwKK3sgMHgwNzk1LAkxNiwJezB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjJ9IH0sCit7IDB4MDdhNSwJMTMsCXsweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA3YjIsCTE2LAl7MHhmOCwgMHhiYiwgMHgwMSwgMHgwZCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlOCwgMHhmMH0gfSwKK3sgMHgwN2MyLAkxNiwJezB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDUsIDB4ZTksIDB4MjUsIDB4ODIsIDB4Yzh9IH0sCit7IDB4MDdkMiwJMiwJezB4ZjIsIDB4MjJ9IH0sCit7IDB4MDdkNCwJMTYsCXsweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwfSB9LAoreyAweDA3ZTQsCTE2LAl7MHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZX0gfSwKK3sgMHgwN2Y0LAkxNiwJezB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIDB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDgwNCwJOCwJezB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjJ9IH0sCit7IDB4MDgwYywJMTYsCXsweGViLCAweDlmLCAweGY1LCAweGYwLCAweGVhLCAweDllLCAweDQyLCAweGYwLCAweGU5LCAweDlkLCAweDQyLCAweGYwLCAweGU4LCAweDljLCAweDQ1LCAweGYwfSB9LAoreyAweDA4MWMsCTEsCXsweDIyfSB9LAoreyAweDA4MWQsCTE2LAl7MHgwOCwgMHgwOCwgMHgwOCwgMHhlNiwgMHgyZiwgMHhmZiwgMHhmNiwgMHgxOCwgMHhlNiwgMHgzZSwgMHhmZSwgMHhmNiwgMHgxOCwgMHhlNiwgMHgzZCwgMHhmZH0gfSwKK3sgMHgwODJkLAk3LAl7MHhmNiwgMHgxOCwgMHhlNiwgMHgzYywgMHhmYywgMHhmNiwgMHgyMn0gfSwKK3sgMHgwODM0LAk0LAl7MHg4YywgMHgzNCwgMHg4ZCwgMHgzNX0gfSwKK3sgMHgwODM4LAkxNiwJezB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MzcsIDB4YzMsIDB4ZTUsIDB4MzcsIDB4OTV9IH0sCit7IDB4MDg0OCwJMTYsCXsweDM1LCAweGU1LCAweDM2LCAweDk1LCAweDM0LCAweDUwLCAweDY5LCAweGVmLCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU1LCAweDM2LCAweDNlLCAweGY1fSB9LAoreyAweDA4NTgsCTE2LAl7MHg4MywgMHg3NCwgMHhmZiwgMHhmMCwgMHhmNCwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhlZiwgMHgyNSwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNn0gfSwKK3sgMHgwODY4LAkxNiwJezB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4ZWYsIDB4MjUsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzZ9IH0sCit7IDB4MDg3OCwJMTYsCXsweDNlLCAweGY1LCAweDgzLCAweDc0LCAweGFhLCAweGYwLCAweDY0LCAweGFhLCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweGVmLCAweDI1LCAweDM3LCAweGY1fSB9LAoreyAweDA4ODgsCTE2LAl7MHg4MiwgMHhlNSwgMHgzNiwgMHgzZSwgMHhmNSwgMHg4MywgMHg3NCwgMHg1NSwgMHhmMCwgMHg2NCwgMHg1NSwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhhZH0gfSwKK3sgMHgwODk4LAkxNiwJezB4MzcsIDB4ZTUsIDB4MzcsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzYsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4ZmMsIDB4YWMsIDB4MDV9IH0sCit7IDB4MDhhOCwJMTYsCXsweGVkLCAweDZjLCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweDA1LCAweDM3LCAweGU1LCAweDM3LCAweDcwLCAweDAyLCAweDA1LCAweDM2LCAweDgwLCAweDhjfSB9LAoreyAweDA4YjgsCTE2LAl7MHhlNCwgMHhmNSwgMHgzNiwgMHhmNSwgMHgzNywgMHhjMywgMHhlNSwgMHgzNywgMHg5NSwgMHgzNSwgMHhlNSwgMHgzNiwgMHg5NSwgMHgzNCwgMHg1MCwgMHgyN30gfSwKK3sgMHgwOGM4LAkxNiwJezB4ZWYsIDB4MjUsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzYsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjUsIDB4MzcsIDB4NjAsIDB4MDIsIDB4YzN9IH0sCit7IDB4MDhkOCwJMTYsCXsweDIyLCAweGVmLCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU1LCAweDM2LCAweDNlLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDA1LCAweDM3LCAweGU1fSB9LAoreyAweDA4ZTgsCTgsCXsweDM3LCAweDcwLCAweDAyLCAweDA1LCAweDM2LCAweDgwLCAweGNlLCAweGQzfSB9LAoreyAweDA4ZjAsCTEsCXsweDIyfSB9LAoreyAweDA4ZjEsCTE0LAl7MHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwOGZmLAkxLAl7MHgyMn0gfSwKK3sgMHgwOTAwLAk5LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHg3NH0gfSwKK3sgMHgwOTdkLAkxNiwJezB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MDk4ZCwJMTIsCXsweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDNhLCAweDAyLCAweDA5LCAweGQ0fSB9LAoreyAweDA5OTksCTE2LAl7MHgwMiwgMHgwNiwgMHg5ZCwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMn0gfSwKK3sgMHgwOWE5LAkxNiwJezB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzN9IH0sCit7IDB4MDliOSwJMTYsCXsweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmfSB9LAoreyAweDA5YzksCTE2LAl7MHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwZSwgMHgyZCwgMHhlNCwgMHg3ZX0gfSwKK3sgMHgwOWQ5LAkxNiwJezB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTN9IH0sCit7IDB4MDllOSwJMTYsCXsweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzfSB9LAoreyAweDA5ZjksCTE2LAl7MHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX0gfSwKK3sgMHgwYTA5LAkxNiwJezB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmV9IH0sCit7IDB4MGExOSwJMTYsCXsweGU0LCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweDdmLCAweDBhLCAweGZlLCAweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDg5fSB9LAoreyAweDBhMjksCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhjZiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwYTM5LAkxNiwJezB4OTYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4ZDUsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9IH0sCit7IDB4MGE0OSwJMTYsCXsweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDdmLCAweDA1fSB9LAoreyAweDBhNTksCTE2LAl7MHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwYTY5LAkxNiwJezB4MTIsIDB4MGQsIDB4ZDUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGR9IH0sCit7IDB4MGE3OSwJMTYsCXsweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweGQ1LCAweDIyfSB9LAoreyAweDBhODksCTE2LAl7MHg3NSwgMHgzMywgMHgwMSwgMHhlNSwgMHgzMywgMHg2MCwgMHgxYiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgwZSwgMHgxOCwgMHg3ZiwgMHgwMCwgMHg3ZSwgMHgwZX0gfSwKK3sgMHgwYTk5LAkxNiwJezB4N2QsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTIsIDB4MDgsIDB4MzQsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MzMsIDB4NzAsIDB4MDUsIDB4N2YsIDB4MGYsIDB4MTJ9IH0sCit7IDB4MGFhOSwJMTYsCXsweDBlLCAweDE4LCAweGU1LCAweDMzLCAweDYwLCAweDFiLCAweDdmLCAweDAyLCAweDEyLCAweDBlLCAweDE4LCAweDdmLCAweDAwLCAweDdlLCAweDgwLCAweDdkfSB9LAoreyAweDBhYjksCTE2LAl7MHgwMCwgMHg3YywgMHg4MCwgMHgxMiwgMHgwOCwgMHgzNCwgMHhlNCwgMHgzMywgMHhmNSwgMHgzMywgMHg3MCwgMHgwNSwgMHg3ZiwgMHgwZiwgMHgxMiwgMHgwZX0gfSwKK3sgMHgwYWM5LAkxNiwJezB4MTgsIDB4ZTUsIDB4MzMsIDB4NjAsIDB4MWIsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MGUsIDB4MTgsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MjAsIDB4N2QsIDB4NDB9IH0sCit7IDB4MGFkOSwJMTYsCXsweDdjLCAweDViLCAweDEyLCAweDA4LCAweDM0LCAweGU0LCAweDMzLCAweGY1LCAweDMzLCAweDcwLCAweDA1LCAweDdmLCAweDBmLCAweDEyLCAweDBlLCAweDE4fSB9LAoreyAweDBhZTksCTEzLAl7MHhlNSwgMHgzMywgMHg2MCwgMHgwNSwgMHhlNCwgMHhmZiwgMHgxMiwgMHgwZSwgMHgxOCwgMHhlNSwgMHgzMywgMHgyNCwgMHhmZn0gfSwKK3sgMHgwYWY2LAkxLAl7MHgyMn0gfSwKK3sgMHgwYWY3LAk4LAl7MHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgxMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwYWZmLAkxLAl7MHgzMn0gfSwKK3sgMHgwYjAwLAkxNiwJezB4MDIsIDB4MGQsIDB4YTUsIDB4MDAsIDB4MDIsIDB4MGQsIDB4ZWMsIDB4MDAsIDB4MDIsIDB4MGQsIDB4NzAsIDB4MDAsIDB4MDIsIDB4MGQsIDB4YmQsIDB4MDB9IH0sCit7IDB4MGIxMCwJMTYsCXsweDAyLCAweDBlLCAweDAyLCAweDAwLCAweDAyLCAweDBhLCAweGZmLCAweDAwLCAweDAyLCAweDBlLCAweDgzLCAweDAwLCAweDAyLCAweDBlLCAweDg0LCAweDAwfSB9LAoreyAweDBiMjAsCTE2LAl7MHgwMiwgMHgwZSwgMHg4NSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4NiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4NywgMHgwMCwgMHgwMiwgMHgwZSwgMHg4OCwgMHgwMH0gfSwKK3sgMHgwYjMwLAkxNiwJezB4MDIsIDB4MGUsIDB4ODksIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGEsIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGMsIDB4MDB9IH0sCit7IDB4MGI0MCwJMTYsCXsweDAyLCAweDBlLCAweDhkLCAweDAwLCAweDAyLCAweDBlLCAweDhlLCAweDAwLCAweDAyLCAweDBlLCAweDhmLCAweDAwLCAweDAyLCAweDBlLCAweDkwLCAweDAwfSB9LAoreyAweDBiNTAsCTgsCXsweDAyLCAweDBlLCAweDkxLCAweDAwLCAweDAyLCAweDBlLCAweDkyLCAweDAwfSB9LAoreyAweDBiNTgsCTE2LAl7MHhlNCwgMHhmZSwgMHg3NSwgMHgyYiwgMHhmZiwgMHg3NSwgMHgyYywgMHgxMSwgMHg3NSwgMHgyZCwgMHgxMiwgMHhhYiwgMHgyYiwgMHhhYSwgMHgyYywgMHhhOX0gfSwKK3sgMHgwYjY4LAkxNiwJezB4MmQsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDcsIDB4ODUsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjV9IH0sCit7IDB4MGI3OCwJMTYsCXsweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDA3LCAweGQ0LCAweDg1LCAweGYwLCAweDI5LCAweGY1LCAweDJhLCAweDYyLCAweDI5fSB9LAoreyAweDBiODgsCTE2LAl7MHhlNSwgMHgyOSwgMHg2MiwgMHgyYSwgMHhlNSwgMHgyYSwgMHg2MiwgMHgyOSwgMHgyOSwgMHhmZCwgMHhlNSwgMHgyOSwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NX0gfSwKK3sgMHgwYjk4LAkxNCwJezB4MmIsIDB4ZmYsIDB4ZjUsIDB4MmMsIDB4ODksIDB4MmQsIDB4ODAsIDB4YzMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MGJhNiwJMSwJezB4MjJ9IH0sCit7IDB4MGJhNywJNiwJezB4YWIsIDB4MDcsIDB4YWEsIDB4MDYsIDB4YWMsIDB4MDV9IH0sCit7IDB4MGJhZCwJMTYsCXsweGU0LCAweGZkLCAweGU1LCAweDExLCAweDYwLCAweDExLCAweGVhLCAweGZmLCAweGFlLCAweDA1LCAweDBkLCAweGVlLCAweDI0LCAweDEwLCAweGY1LCAweDgyfSB9LAoreyAweDBiYmQsCTE2LAl7MHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlYiwgMHhhZSwgMHgwNSwgMHgwZCwgMHg3NCwgMHgxMCwgMHgyZSwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgwYmNkLAkxNiwJezB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZWIsIDB4ZjAsIDB4YWYsIDB4MDUsIDB4MGQsIDB4NzQsIDB4MTAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4MGJkZCwJMTYsCXsweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweGFmLCAweDBmLCAweDdhLCAweDBmLCAweDdiLCAweDEwLCAweDEyLCAweDBkLCAweDUxLCAweDdmfSB9LAoreyAweDBiZWQsCTYsCXsweDBhLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweGQ1fSB9LAoreyAweDBiZjMsCTEsCXsweDIyfSB9LAoreyAweDBiZjQsCTEwLAl7MHg4ZSwgMHgzMywgMHg4ZiwgMHgzNCwgMHg4ZCwgMHgzNSwgMHg4YSwgMHgzNiwgMHg4YiwgMHgzN30gfSwKK3sgMHgwYmZlLAkxNiwJezB4ZTQsIDB4ZmQsIDB4ZjUsIDB4MzgsIDB4ZTUsIDB4MTEsIDB4NjAsIDB4MTIsIDB4ZTUsIDB4MzMsIDB4ZmYsIDB4YWUsIDB4MDUsIDB4MGQsIDB4ZWUsIDB4MjR9IH0sCit7IDB4MGMwZSwJMTYsCXsweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LCAweDM0LCAweGFlLCAweDA1LCAweDBkLCAweDc0fSB9LAoreyAweDBjMWUsCTE2LAl7MHgxMywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlNSwgMHgzNCwgMHhmMCwgMHhhZiwgMHgwZiwgMHg3YSwgMHgwZn0gfSwKK3sgMHgwYzJlLAkxNiwJezB4N2IsIDB4MTMsIDB4MTIsIDB4MGQsIDB4NTEsIDB4YWYsIDB4MGYsIDB4YWQsIDB4MzUsIDB4YWIsIDB4MzcsIDB4YWEsIDB4MzYsIDB4MTIsIDB4MGQsIDB4MzJ9IH0sCit7IDB4MGMzZSwJMSwJezB4MjJ9IH0sCit7IDB4MGMzZiwJMiwJezB4OGYsIDB4Mjl9IH0sCit7IDB4MGM0MSwJMTYsCXsweGU0LCAweGY1LCAweDJhLCAweDc1LCAweDJiLCAweGZmLCAweDc1LCAweDJjLCAweDExLCAweDc1LCAweDJkLCAweDMyLCAweGFiLCAweDJiLCAweGFhLCAweDJjfSB9LAoreyAweDBjNTEsCTE2LAl7MHhhOSwgMHgyZCwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwNywgMHg4NSwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgyYSwgMHgwNSwgMHgyYSwgMHhlZn0gfSwKK3sgMHgwYzYxLAkxNiwJezB4YjUsIDB4MjksIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDcsIDB4NmMsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzV9IH0sCit7IDB4MGM3MSwJMTQsCXsweDJiLCAweGZmLCAweGY1LCAweDJjLCAweDg5LCAweDJkLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBjN2YsCTEsCXsweDIyfSB9LAoreyAweDBjODAsCTEwLAl7MHg4ZSwgMHgzMywgMHg4ZiwgMHgzNCwgMHg4ZCwgMHgzNSwgMHg4YSwgMHgzNiwgMHg4YiwgMHgzN30gfSwKK3sgMHgwYzhhLAkxNiwJezB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZTUsIDB4MzgsIDB4YzMsIDB4OTUsIDB4MzUsIDB4NTAsIDB4MjAsIDB4MDUsIDB4MzQsIDB4ZTUsIDB4MzQsIDB4YWUsIDB4MzN9IH0sCit7IDB4MGM5YSwJMTYsCXsweDcwLCAweDAyLCAweDA1LCAweDMzLCAweDE0LCAweGZmLCAweGU1LCAweDM3LCAweDI1LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDM2LCAweGY1fSB9LAoreyAweDBjYWEsCTEwLAl7MHg4MywgMHhlMCwgMHhmZCwgMHgxMiwgMHgwYiwgMHhhNywgMHgwNSwgMHgzOCwgMHg4MCwgMHhkOX0gfSwKK3sgMHgwY2I0LAkxLAl7MHgyMn0gfSwKK3sgMHgwY2I1LAkxNiwJezB4YTksIDB4MDcsIDB4ZTUsIDB4MGQsIDB4NzAsIDB4MjUsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTksIDB4MjUsIDB4ZTB9IH0sCit7IDB4MGNjNSwJMTYsCXsweDQ0LCAweDAxLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDhkLCAweDA4LCAweGFmLCAweDAzLCAweGE5LCAweDA3LCAweDc1LCAweDA5LCAweDAxLCAweDhhfSB9LAoreyAweDBjZDUsCTEzLAl7MHgwYSwgMHg4OSwgMHgwYiwgMHhlNCwgMHhmNSwgMHgwYywgMHg3NSwgMHgwZCwgMHgwMywgMHhkMywgMHgyMiwgMHhjMywgMHgyMn0gfSwKK3sgMHgwY2UyLAkxNiwJezB4YTksIDB4MDcsIDB4ZTUsIDB4MGQsIDB4NzAsIDB4MjMsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTksIDB4MjUsIDB4ZTB9IH0sCit7IDB4MGNmMiwJMTYsCXsweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDhkLCAweDA4LCAweGFmLCAweDAzLCAweGE5LCAweDA3LCAweDc1LCAweDA5LCAweDAxLCAweDhhLCAweDBhLCAweDg5fSB9LAoreyAweDBkMDIsCTExLAl7MHgwYiwgMHhlNCwgMHhmNSwgMHgwYywgMHg3NSwgMHgwZCwgMHgwMSwgMHhkMywgMHgyMiwgMHhjMywgMHgyMn0gfSwKK3sgMHgwZDBkLAkxNiwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MDYsIDB4MDQsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MGQxZCwJMTYsCXsweDAyLCAweGYwLCAweDdmLCAweGQwLCAweDdlLCAweDA3LCAweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwfSB9LAoreyAweDBkMmQsCTUsCXsweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyfSB9LAoreyAweDBkMzIsCTE2LAl7MHgxMiwgMHgwYywgMHhiNSwgMHhlNSwgMHgwZCwgMHgyNCwgMHhmYSwgMHg2MCwgMHgxMCwgMHgxNCwgMHg2MCwgMHgwNywgMHgyNCwgMHgwNywgMHg3MCwgMHhmM30gfSwKK3sgMHgwZDQyLAkxNSwJezB4N2YsIDB4MDgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDcsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDYsIDB4MjJ9IH0sCit7IDB4MGQ1MSwJMTYsCXsweDEyLCAweDBjLCAweGUyLCAweGU1LCAweDBkLCAweDI0LCAweGZhLCAweDYwLCAweDEwLCAweDE0LCAweDYwLCAweDA3LCAweDI0LCAweDA3LCAweDcwLCAweGYzfSB9LAoreyAweDBkNjEsCTE1LAl7MHg3ZiwgMHgwOCwgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNiwgMHgyMn0gfSwKK3sgMHgwZDcwLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGQ4MCwJMTEsCXsweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkOGIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHgxMiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgxNCwgMHg3ZSwgMHgwMCwgMHgxMn0gfSwKK3sgMHgwZDliLAkxMCwJezB4MGQsIDB4ZDUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MGRhNSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGQyLCAweDAxLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxfSB9LAoreyAweDBkYjUsCTgsCXsweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkYmQsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhkMiwgMHgwMywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOH0gfSwKK3sgMHgwZGNkLAk4LAl7MHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZGQ1LAkxNiwJezB4OGUsIDB4MzksIDB4OGYsIDB4M2EsIDB4ZTUsIDB4M2EsIDB4MTUsIDB4M2EsIDB4YWUsIDB4MzksIDB4NzAsIDB4MDIsIDB4MTUsIDB4MzksIDB4NGUsIDB4NjB9IH0sCit7IDB4MGRlNSwJNywJezB4MDUsIDB4MTIsIDB4MGUsIDB4NDEsIDB4ODAsIDB4ZWUsIDB4MjJ9IH0sCit7IDB4MGRlYywJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAyLCAweGYwLCAweGQwfSB9LAoreyAweDBkZmMsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlMDIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgxMCwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwZTEyLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZTE4LAkxNiwJezB4YWUsIDB4MDcsIDB4N2YsIDB4MjEsIDB4N2QsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4YWIsIDB4ODJ9IH0sCit7IDB4MGUyOCwJNSwJezB4ZmEsIDB4MTIsIDB4MGQsIDB4NTEsIDB4MjJ9IH0sCit7IDB4MGUyZCwJMTYsCXsweDUwLCAweDBmLCAweDAwLCAweGMwLCAweGY5LCAweGE0LCAweGIwLCAweDk5LCAweDkyLCAweDgyLCAweGY4LCAweDgwLCAweDk4LCAweDg4LCAweDgzLCAweGM2fSB9LAoreyAweDBlM2QsCTMsCXsweGExLCAweDg2LCAweDhlfSB9LAoreyAweDBlNDAsCTEsCXsweDAwfSB9LAoreyAweDBlNDEsCTE2LAl7MHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOX0gfSwKK3sgMHgwZTUxLAkxLAl7MHgyMn0gfSwKK3sgMHgwZTUyLAkxNCwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU2MCwJOCwJezB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGUsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU2OCwJOCwJezB4ZTQsIDB4ZjUsIDB4MGQsIDB4ZDIsIDB4ZTksIDB4ZDIsIDB4YWYsIDB4MjJ9IH0sCit7IDB4MGU3MCwJNCwJezB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9IH0sCit7IDB4MGU3NCwJMywJezB4ZDIsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MGU3NywJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3OSwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3YiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3ZCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3ZiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU4MSwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU4MywJMSwJezB4MzJ9IH0sCit7IDB4MGU4NCwJMSwJezB4MzJ9IH0sCit7IDB4MGU4NSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4NiwJMSwJezB4MzJ9IH0sCit7IDB4MGU4NywJMSwJezB4MzJ9IH0sCit7IDB4MGU4OCwJMSwJezB4MzJ9IH0sCit7IDB4MGU4OSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4YSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4YiwJMSwJezB4MzJ9IH0sCit7IDB4MGU4YywJMSwJezB4MzJ9IH0sCit7IDB4MGU4ZCwJMSwJezB4MzJ9IH0sCit7IDB4MGU4ZSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4ZiwJMSwJezB4MzJ9IH0sCit7IDB4MGU5MCwJMSwJezB4MzJ9IH0sCit7IDB4MGU5MSwJMSwJezB4MzJ9IH0sCit7IDB4MGU5MiwJMSwJezB4MzJ9IH0sCit7IDB4MTEwMCwJMTYsCXsweDEyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDA1LCAweDEwLCAweDI3LCAweDAxLCAweDAwLCAweDAxLCAweDAyfSB9LAoreyAweDExMTAsCTE2LAl7MHgwMCwgMHgwMSwgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMywgMHhhMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMn0gfSwKK3sgMHgxMTIwLAkxNiwJezB4ZmYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDB9IH0sCit7IDB4MTEzMCwJMTYsCXsweDAwLCAweDAwLCAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDI2LCAweDAzLCAweDQxLCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDY4LCAweDAwfSB9LAoreyAweDExNDAsCTE2LAl7MHg2ZiwgMHgwMCwgMHg3MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3MywgMHgwMH0gfSwKK3sgMHgxMTUwLAkxNiwJezB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDYsIDB4MDB9IH0sCit7IDB4MTE2MCwJMTYsCXsweDY5LCAweDAwLCAweDcyLCAweDAwLCAweDZkLCAweDAwLCAweDc3LCAweDAwLCAweDYxLCAweDAwLCAweDcyLCAweDAwLCAweDY1LCAweDAwLCAweDIwLCAweDAwfSB9LAoreyAweDExNzAsCTE2LAl7MHg0NiwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg1NywgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MiwgMHgwMH0gfSwKK3sgMHgxMTgwLAkxNiwJezB4NmIsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MmEsIDB4MDMsIDB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjksIDB4MDB9IH0sCit7IDB4MTE5MCwJMTYsCXsweDY3LCAweDAwLCAweDc1LCAweDAwLCAweDcyLCAweDAwLCAweDYxLCAweDAwLCAweDc0LCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwfSB9LAoreyAweDExYTAsCTE2LAl7MHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMCwgMHgyMiwgMHgwM30gfSwKK3sgMHgxMWIwLAkxNiwJezB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NjMsIDB4MDB9IH0sCit7IDB4MTFjMCwJMTYsCXsweDY1LCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwfSB9LAoreyAweDExZDAsCTIsCXsweDAwLCAweDAwfSB9LAoreyAweGZmZmYsCTAsCXsweDAwfSB9Cit9OworCisjZWxzZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkIHdoaXRlaGVhdF9sb2FkZXJbXSA9IHsKK3sgMHgwMDAwLAkzLAl7MHgwMiwgMHgwOSwgMHg4ZH0gfSwKK3sgMHgwMDMzLAkzLAl7MHgwMiwgMHgwOCwgMHhmYn0gfSwKK3sgMHgwMDQzLAkzLAl7MHgwMiwgMHgwYiwgMHgwMH0gfSwKK3sgMHgwMDRiLAkzLAl7MHgwMiwgMHgwNSwgMHhhYX0gfSwKK3sgMHgwMTAwLAkxNiwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4NTAsIDB4ZjUsIDB4MGYsIDB4MTMsIDB4ZTR9IH0sCit7IDB4MDExMCwJMTYsCXsweDMzLCAweGY1LCAweDExLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDI0LCAweDVlLCAweGI0LCAweDA3LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDAzfSB9LAoreyAweDAxMjAsCTE2LAl7MHg3OCwgMHg5MCwgMHgwMSwgMHgyOCwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMX0gfSwKK3sgMHgwMTMwLAkxNiwJezB4OTEsIDB4MDIsIDB4MDEsIDB4M2QsIDB4MDIsIDB4MDEsIDB4NTMsIDB4MDIsIDB4MDEsIDB4NmYsIDB4MDIsIDB4MDEsIDB4OWEsIDB4OTAsIDB4N2YsIDB4MDB9IH0sCit7IDB4MDE0MCwJMTYsCXsweGU1LCAweDExLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwfSB9LAoreyAweDAxNTAsCTE2LAl7MHgwMiwgMHgwMywgMHg3OCwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMTYwLAkxNiwJezB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDMsIDB4NzgsIDB4MTJ9IH0sCit7IDB4MDE3MCwJMTYsCXsweDBhLCAweDg5LCAweDUwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweDgwLCAweDA2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDBmfSB9LAoreyAweDAxODAsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwM30gfSwKK3sgMHgwMTkwLAkxNiwJezB4NzgsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGYsIDB4MDIsIDB4MDMsIDB4NzgsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDcsIDB4ZjB9IH0sCit7IDB4MDFhMCwJMTYsCXsweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGU4LCAweDdlfSB9LAoreyAweDAxYjAsCTE2LAl7MHgwMywgMHgxMiwgMHgwZCwgMHg5NCwgMHhkMiwgMHgwNiwgMHgxMiwgMHgwYywgMHhjYywgMHgwMiwgMHgwMywgMHg3OCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwMWMwLAkxNiwJezB4NzUsIDB4MjgsIDB4MDAsIDB4ZjUsIDB4MjksIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4ZTQsIDB4ZWUsIDB4NDIsIDB4MjgsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTB9IH0sCit7IDB4MDFkMCwJMTYsCXsweDc1LCAweDJhLCAweDAwLCAweGY1LCAweDJiLCAweGEzLCAweGUwLCAweGZlLCAweGU0LCAweGVlLCAweDQyLCAweDJhLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDAxZTAsCTE2LAl7MHg2NCwgMHhjMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwMiwgMHhjOSwgMHhlNSwgMHgyYiwgMHg0NSwgMHgyYSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3OH0gfSwKK3sgMHgwMWYwLAkxNiwJezB4YzMsIDB4ZTUsIDB4MmIsIDB4OTQsIDB4NDAsIDB4ZTUsIDB4MmEsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDgsIDB4ODUsIDB4MmEsIDB4MmMsIDB4ODUsIDB4MmJ9IH0sCit7IDB4MDIwMCwJMTYsCXsweDJkLCAweDgwLCAweDA2LCAweDc1LCAweDJjLCAweDAwLCAweDc1LCAweDJkLCAweDQwLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDY0LCAweGEzLCAweDcwfSB9LAoreyAweDAyMTAsCTE2LAl7MHgzNCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhjMywgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHhlNSwgMHgzMCwgMHg5NSwgMHgyYywgMHg1MCwgMHg1Y30gfSwKK3sgMHgwMjIwLAkxNiwJezB4ZTUsIDB4MjksIDB4MjUsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzAsIDB4MzUsIDB4MjgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDIzMCwJMTYsCXsweDI1LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDMxLCAweGU1LCAweDMxLCAweDcwfSB9LAoreyAweDAyNDAsCTE2LAl7MHgwMiwgMHgwNSwgMHgzMCwgMHg4MCwgMHhkMCwgMHhlNCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhjMywgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHhlNX0gfSwKK3sgMHgwMjUwLAkxNiwJezB4MzAsIDB4OTUsIDB4MmMsIDB4NTAsIDB4MTgsIDB4NzQsIDB4MDAsIDB4MjUsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDI2MCwJMTYsCXsweDc0LCAweGNkLCAweGYwLCAweDA1LCAweDMxLCAweGU1LCAweDMxLCAweDcwLCAweDAyLCAweDA1LCAweDMwLCAweDgwLCAweGRkLCAweGFmLCAweDI5LCAweGFlfSB9LAoreyAweDAyNzAsCTE2LAl7MHgyOCwgMHhhZCwgMHgyZCwgMHg3YSwgMHg3ZiwgMHg3OSwgMHgwMCwgMHg3YiwgMHgwMCwgMHgxMiwgMHgwYiwgMHhmNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlNX0gfSwKK3sgMHgwMjgwLAkxNiwJezB4MmQsIDB4ZjAsIDB4ZTUsIDB4MmQsIDB4MjUsIDB4MjksIDB4ZjUsIDB4MjksIDB4ZTUsIDB4MmMsIDB4MzUsIDB4MjgsIDB4ZjUsIDB4MjgsIDB4YzMsIDB4ZTV9IH0sCit7IDB4MDI5MCwJMTYsCXsweDJiLCAweDk1LCAweDJkLCAweGY1LCAweDJiLCAweGU1LCAweDJhLCAweDk1LCAweDJjLCAweGY1LCAweDJhLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweGZmfSB9LAoreyAweDAyYTAsCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg3NSwgMHgyZSwgMHgwMCwgMHhmNSwgMHgyZiwgMHhkMywgMHg5NCwgMHgwMCwgMHhlNSwgMHgyZSwgMHg5NCwgMHgwMCwgMHg1MH0gfSwKK3sgMHgwMmIwLAkxNiwJezB4MGMsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ZTcsIDB4ODAsIDB4ZjQsIDB4OTAsIDB4N2YsIDB4YjR9IH0sCit7IDB4MDJjMCwJMTYsCXsweGUwLCAweDIwLCAweGUyLCAweDAzLCAweDAyLCAweDAxLCAweGU3LCAweDgwLCAweGY0LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDY0LCAweDQwLCAweDYwfSB9LAoreyAweDAyZDAsCTE2LAl7MHgwMywgMHgwMiwgMHgwMywgMHg3OCwgMHhlNSwgMHgyYiwgMHg0NSwgMHgyYSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3OCwgMHhlNCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMmUwLAkxNiwJezB4YzUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NzUsIDB4MmUsIDB4MDAsIDB4ZjUsIDB4MmYsIDB4ZDN9IH0sCit7IDB4MDJmMCwJMTYsCXsweDk0LCAweDAwLCAweGU1LCAweDJlLCAweDk0LCAweDAwLCAweDUwLCAweDA5LCAweDkwLCAweDdmLCAweGM0LCAweGUwLCAweDMwLCAweGUxLCAweDA5LCAweDgwfSB9LAoreyAweDAzMDAsCTE2LAl7MHhmNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHgyMCwgMHhlMywgMHhmOSwgMHg5MCwgMHg3ZiwgMHhjNSwgMHhlMCwgMHg3NSwgMHgyYywgMHgwMCwgMHhmNX0gfSwKK3sgMHgwMzEwLAkxNiwJezB4MmQsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4NjQsIDB4YTMsIDB4NzAsIDB4MzQsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4YzMsIDB4ZTUsIDB4MzF9IH0sCit7IDB4MDMyMCwJMTYsCXsweDk1LCAweDJkLCAweGU1LCAweDMwLCAweDk1LCAweDJjLCAweDUwLCAweDM0LCAweDc0LCAweGMwLCAweDI1LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDAzMzAsCTEsCXsweDdlfSB9LAoreyAweDAzMzEsCTE2LAl7MHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgyOSwgMHgyNSwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzMCwgMHgzNSwgMHgyOCwgMHhmNSwgMHg4M30gfSwKK3sgMHgwMzQxLAkxNiwJezB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzEsIDB4ZTUsIDB4MzEsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MzAsIDB4ODAsIDB4ZDAsIDB4YWYsIDB4MjksIDB4YWUsIDB4Mjh9IH0sCit7IDB4MDM1MSwJMTYsCXsweGFkLCAweDJkLCAweDdhLCAweDdlLCAweDc5LCAweGMwLCAweDdiLCAweGMwLCAweDEyLCAweDBjLCAweDNmLCAweGU1LCAweDJkLCAweDI1LCAweDI5LCAweGY1fSB9LAoreyAweDAzNjEsCTE2LAl7MHgyOSwgMHhlNSwgMHgyYywgMHgzNSwgMHgyOCwgMHhmNSwgMHgyOCwgMHhjMywgMHhlNSwgMHgyYiwgMHg5NSwgMHgyZCwgMHhmNSwgMHgyYiwgMHhlNSwgMHgyYX0gfSwKK3sgMHgwMzcxLAk5LAl7MHg5NSwgMHgyYywgMHhmNSwgMHgyYSwgMHgwMiwgMHgwMiwgMHhkNCwgMHhjMywgMHgyMn0gfSwKK3sgMHgwMzdhLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NTIsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4Y2UsIDB4MjR9IH0sCit7IDB4MDM4YSwJMTYsCXsweGZlLCAweDcwLCAweDAzLCAweDAyLCAweDA1LCAweDQyLCAweDI0LCAweGZiLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDRjLCAweDE0LCAweDcwLCAweDAzfSB9LAoreyAweDAzOWEsCTE2LAl7MHgwMiwgMHgwNCwgMHg0NiwgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHgzYSwgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHgyNH0gfSwKK3sgMHgwM2FhLAkxNiwJezB4MDUsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4OTYsIDB4MTIsIDB4MGUsIDB4NDQsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDNiYSwJMTYsCXsweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLCAweDQwLCAweDI0LCAweDAyLCAweDcwLCAweDY5LCAweDc0LCAweDExLCAweDkwfSB9LAoreyAweDAzY2EsCTE2LAl7MHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwM2RhLAkxNiwJezB4ZmYsIDB4MTIsIDB4MGIsIDB4NTgsIDB4OGIsIDB4MjUsIDB4OGEsIDB4MjYsIDB4ODksIDB4MjcsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDJ9IH0sCit7IDB4MDNlYSwJMTYsCXsweGVlLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGFmLCAweDAxLCAweGVmLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGEyLCAweDkwfSB9LAoreyAweDAzZmEsCTE2LAl7MHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwOH0gfSwKK3sgMHgwNDBhLAkxNiwJezB4YmEsIDB4OGIsIDB4MjUsIDB4OGEsIDB4MjYsIDB4ODksIDB4MjcsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDQxYSwJMTYsCXsweGQ0LCAweGYwLCAweGFmLCAweDAxLCAweGVmLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGEyLCAweDkwLCAweDdmLCAweGI0LCAweGUwfSB9LAoreyAweDA0MmEsCTE2LAl7MHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMn0gfSwKK3sgMHgwNDNhLAkxNiwJezB4MTIsIDB4MGUsIDB4MWYsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MTIsIDB4MGUsIDB4MmQsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MTIsIDB4MGEsIDB4ZjcsIDB4MDJ9IH0sCit7IDB4MDQ0YSwJMTYsCXsweDA1LCAweGEyLCAweDEyLCAweDBlLCAweDExLCAweDAyLCAweDA1LCAweGEyLCAweDEyLCAweDBlLCAweDQ2LCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGEyfSB9LAoreyAweDA0NWEsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMn0gfSwKK3sgMHgwNDZhLAkxNiwJezB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDIsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MDQ3YSwJMTYsCXsweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA1LCAweGEyLCAweGU0LCAweDkwLCAweDdmLCAweDAwfSB9LAoreyAweDA0OGEsCTE2LAl7MHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMH0gfSwKK3sgMHgwNDlhLAkxNiwJezB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjR9IH0sCit7IDB4MDRhYSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzfSB9LAoreyAweDA0YmEsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMX0gfSwKK3sgMHgwNGNhLAkxNiwJezB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MTIsIDB4MGUsIDB4NDgsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTB9IH0sCit7IDB4MDRkYSwJMTYsCXsweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweGEyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0fSB9LAoreyAweDA0ZWEsCTE2LAl7MHgwMSwgMHgwNSwgMHhjMiwgMHgwMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNX0gfSwKK3sgMHgwNGZhLAkxNiwJezB4YTIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzR9IH0sCit7IDB4MDUwYSwJMTYsCXsweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmfSB9LAoreyAweDA1MWEsCTE2LAl7MHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZn0gfSwKK3sgMHgwNTJhLAkxNiwJezB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NjksIDB4OTB9IH0sCit7IDB4MDUzYSwJMTYsCXsweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDYwLCAweDEyLCAweDBlLCAweDRhLCAweDUwLCAweDViLCAweDkwLCAweDdmLCAweGU4fSB9LAoreyAweDA1NGEsCTE2LAl7MHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNH0gfSwKK3sgMHgwNTVhLAkxNiwJezB4ZDIsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4M2IsIDB4OTAsIDB4N2YsIDB4ZWF9IH0sCit7IDB4MDU2YSwJMTYsCXsweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwfSB9LAoreyAweDA1N2EsCTE2LAl7MHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMX0gfSwKK3sgMHgwNThhLAkxNiwJezB4ZjAsIDB4ODAsIDB4MTUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NTB9IH0sCit7IDB4MDU5YSwJMTYsCXsweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyfSB9LAoreyAweDA1YWEsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwNWJhLAkxNiwJezB4ZDAsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDMsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YTV9IH0sCit7IDB4MDVjYSwJMTYsCXsweGUwLCAweDMwLCAweGUyLCAweDA2LCAweDc1LCAweDBkLCAweDA2LCAweDAyLCAweDA2LCAweDc2LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDIwLCAweGUxfSB9LAoreyAweDA1ZGEsCTE2LAl7MHgwYywgMHhlNSwgMHgwZCwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwNiwgMHg3NSwgMHgwZCwgMHgwNywgMHgwMiwgMHgwNiwgMHg3NiwgMHhhZiwgMHgwZCwgMHhlZn0gfSwKK3sgMHgwNWVhLAkxNiwJezB4MjQsIDB4ZmUsIDB4NjAsIDB4NDgsIDB4MTQsIDB4NjAsIDB4MmMsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4NzcsIDB4MjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDJ9IH0sCit7IDB4MDVmYSwJMTYsCXsweDA2LCAweDc2LCAweGFiLCAweDA5LCAweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFmLCAweDBjLCAweDA1LCAweDBjLCAweDhmLCAweDgyLCAweDc1LCAweDgzfSB9LAoreyAweDA2MGEsCTE2LAl7MHgwMCwgMHgxMiwgMHgwOCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHhlNSwgMHgwYywgMHg2NSwgMHgwOCwgMHg3MCwgMHg1ZSwgMHg3NSwgMHgwZH0gfSwKK3sgMHgwNjFhLAkxNiwJezB4MDUsIDB4ODAsIDB4NTksIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4YWIsIDB4MDksIDB4YWEsIDB4MGEsIDB4YTksIDB4MGIsIDB4YWUsIDB4MGMsIDB4OGV9IH0sCit7IDB4MDYyYSwJMTYsCXsweDgyLCAweDc1LCAweDgzLCAweDAwLCAweDEyLCAweDA4LCAweDRmLCAweDc1LCAweDBkLCAweDAyLCAweDgwLCAweDQwLCAweGU1LCAweDA4LCAweDI0LCAweGZlfSB9LAoreyAweDA2M2EsCTE2LAl7MHhiNSwgMHgwYywgMHgwNywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHhlNSwgMHgwOCwgMHgxNCwgMHhiNSwgMHgwYywgMHgwYX0gfSwKK3sgMHgwNjRhLAkxNiwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4YWIsIDB4MDl9IH0sCit7IDB4MDY1YSwJMTYsCXsweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFlLCAweDBjLCAweDhlLCAweDgyLCAweDc1LCAweDgzLCAweDAwLCAweDEyLCAweDA4LCAweDRmLCAweDA1LCAweDBjfSB9LAoreyAweDA2NmEsCTE2LAl7MHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHhlNCwgMHhmNSwgMHgwZCwgMHg1MywgMHg5MSwgMHhkZiwgMHhkMH0gfSwKK3sgMHgwNjdhLAkxNiwJezB4MDcsIDB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDB9IH0sCit7IDB4MDY4YSwJMTAsCXsweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDA2OTQsCTE2LAl7MHg4YywgMHgzMywgMHg4ZCwgMHgzNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHhlNCwgMHhmNSwgMHgzNSwgMHhmNSwgMHgzNn0gfSwKK3sgMHgwNmE0LAkxNiwJezB4YzMsIDB4ZTUsIDB4MzYsIDB4OTUsIDB4MzQsIDB4ZTUsIDB4MzUsIDB4OTUsIDB4MzMsIDB4NTAsIDB4NjksIDB4ZWYsIDB4MjUsIDB4MzYsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4MDZiNCwJMTYsCXsweGU1LCAweDM1LCAweDNlLCAweGY1LCAweDgzLCAweDc0LCAweGZmLCAweGYwLCAweGY0LCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweGVmLCAweDI1LCAweDM2fSB9LAoreyAweDA2YzQsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhlZiwgMHgyNSwgMHgzNn0gfSwKK3sgMHgwNmQ0LAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4YWEsIDB4ZjAsIDB4NjQsIDB4YWEsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjJ9IH0sCit7IDB4MDZlNCwJMTYsCXsweGVmLCAweDI1LCAweDM2LCAweGY1LCAweDgyLCAweGU1LCAweDM1LCAweDNlLCAweGY1LCAweDgzLCAweDc0LCAweDU1LCAweGYwLCAweDY0LCAweDU1LCAweDYwfSB9LAoreyAweDA2ZjQsCTE2LAl7MHgwMiwgMHhjMywgMHgyMiwgMHhhZCwgMHgzNiwgMHhlNSwgMHgzNiwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHhlZH0gfSwKK3sgMHgwNzA0LAkxNiwJezB4ZjAsIDB4ZmMsIDB4YWMsIDB4MDUsIDB4ZWQsIDB4NmMsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4MDUsIDB4MzYsIDB4ZTUsIDB4MzYsIDB4NzAsIDB4MDJ9IH0sCit7IDB4MDcxNCwJMTYsCXsweDA1LCAweDM1LCAweDgwLCAweDhjLCAweGU0LCAweGY1LCAweDM1LCAweGY1LCAweDM2LCAweGMzLCAweGU1LCAweDM2LCAweDk1LCAweDM0LCAweGU1LCAweDM1fSB9LAoreyAweDA3MjQsCTE2LAl7MHg5NSwgMHgzMywgMHg1MCwgMHgyNywgMHhlZiwgMHgyNSwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMCwgMHg2NX0gfSwKK3sgMHgwNzM0LAkxNiwJezB4MzYsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4ZWYsIDB4MjUsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTR9IH0sCit7IDB4MDc0NCwJMTMsCXsweGYwLCAweDA1LCAweDM2LCAweGU1LCAweDM2LCAweDcwLCAweDAyLCAweDA1LCAweDM1LCAweDgwLCAweGNlLCAweGQzLCAweDIyfSB9LAoreyAweDA3NTEsCTE2LAl7MHhjMiwgMHgwNCwgMHhkMiwgMHgwNSwgMHhjMiwgMHgwMywgMHhjMiwgMHgwMCwgMHhjMiwgMHgwMiwgMHhjMiwgMHgwMSwgMHgxMiwgMHgwZSwgMHgzZCwgMHhkMn0gfSwKK3sgMHgwNzYxLAkxNiwJezB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDc3MSwJMTYsCXsweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDkzLCAweDc0fSB9LAoreyAweDA3ODEsCTE2LAl7MHgzMCwgMHhmMCwgMHgxMiwgMHgwYSwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMH0gfSwKK3sgMHgwNzkxLAkxNiwJezB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MTIsIDB4MGUsIDB4MzUsIDB4MjAsIDB4MDEsIDB4NDIsIDB4NzUsIDB4MjQsIDB4MDAsIDB4NzUsIDB4MjN9IH0sCit7IDB4MDdhMSwJMTYsCXsweDAwLCAweDc1LCAweDIyLCAweDAwLCAweDc1LCAweDIxLCAweDAwLCAweDdmLCAweDQ4LCAweDdlLCAweDkyLCAweDdkLCAweDAwLCAweDdjLCAweDAwLCAweGFifSB9LAoreyAweDA3YjEsCTE2LAl7MHgyNCwgMHhhYSwgMHgyMywgMHhhOSwgMHgyMiwgMHhhOCwgMHgyMSwgMHhjMywgMHgxMiwgMHgwOCwgMHhhOSwgMHg1MCwgMHhkYiwgMHgyMCwgMHgwMSwgMHhkOH0gfSwKK3sgMHgwN2MxLAkxNiwJezB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzgsIDB4MDAsIDB4ZTUsIDB4MjQsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4MjQsIDB4ZWEsIDB4MzUsIDB4MjMsIDB4ZjV9IH0sCit7IDB4MDdkMSwJMTYsCXsweDIzLCAweGU5LCAweDM1LCAweDIyLCAweGY1LCAweDIyLCAweGU4LCAweDM1LCAweDIxLCAweGY1LCAweDIxLCAweDgwLCAweGNhLCAweDMwLCAweDAxLCAweDA1fSB9LAoreyAweDA3ZTEsCTE2LAl7MHgxMiwgMHgwMywgMHg3YSwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwNCwgMHgxYSwgMHgxMiwgMHgwZSwgMHg0MCwgMHg1MCwgMHgxMywgMHgxMiwgMHgwOSwgMHgwMH0gfSwKK3sgMHgwN2YxLAkxNiwJezB4MzAsIDB4MDAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4ZjMsIDB4MTIsIDB4MGQsIDB4NGEsIDB4MTIsIDB4MGUsIDB4NDJ9IH0sCit7IDB4MDgwMSwJOCwJezB4YzIsIDB4MDMsIDB4MTIsIDB4MDgsIDB4ZmYsIDB4ODAsIDB4ZDYsIDB4MjJ9IH0sCit7IDB4MDgwOSwJMTYsCXsweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyfSB9LAoreyAweDA4MTksCTksCXsweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA4MjIsCTE2LAl7MHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MH0gfSwKK3sgMHgwODMyLAkxNiwJezB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjJ9IH0sCit7IDB4MDg0MiwJMTMsCXsweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA4NGYsCTE2LAl7MHhmOCwgMHhiYiwgMHgwMSwgMHgwZCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlOCwgMHhmMH0gfSwKK3sgMHgwODVmLAkxNiwJezB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDUsIDB4ZTksIDB4MjUsIDB4ODIsIDB4Yzh9IH0sCit7IDB4MDg2ZiwJMiwJezB4ZjIsIDB4MjJ9IH0sCit7IDB4MDg3MSwJMTYsCXsweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwfSB9LAoreyAweDA4ODEsCTE2LAl7MHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZX0gfSwKK3sgMHgwODkxLAkxNiwJezB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIDB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDhhMSwJOCwJezB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjJ9IH0sCit7IDB4MDhhOSwJMTYsCXsweGViLCAweDlmLCAweGY1LCAweGYwLCAweGVhLCAweDllLCAweDQyLCAweGYwLCAweGU5LCAweDlkLCAweDQyLCAweGYwLCAweGU4LCAweDljLCAweDQ1LCAweGYwfSB9LAoreyAweDA4YjksCTEsCXsweDIyfSB9LAoreyAweDA4YmEsCTIsCXsweDhmLCAweDI4fSB9LAoreyAweDA4YmMsCTE2LAl7MHhlNCwgMHhmNSwgMHgyOSwgMHg3NSwgMHgyYSwgMHhmZiwgMHg3NSwgMHgyYiwgMHgxMSwgMHg3NSwgMHgyYywgMHgzMiwgMHhhYiwgMHgyYSwgMHhhYSwgMHgyYn0gfSwKK3sgMHgwOGNjLAkxNiwJezB4YTksIDB4MmMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDgsIDB4MjIsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MjksIDB4MDUsIDB4MjksIDB4ZWZ9IH0sCit7IDB4MDhkYywJMTYsCXsweGI1LCAweDI4LCAweDAxLCAweDIyLCAweDEyLCAweDA4LCAweDA5LCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1fSB9LAoreyAweDA4ZWMsCTE0LAl7MHgyYSwgMHhmZiwgMHhmNSwgMHgyYiwgMHg4OSwgMHgyYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMH0gfSwKK3sgMHgwOGZhLAkxLAl7MHgyMn0gfSwKK3sgMHgwOGZiLAk0LAl7MHg1MywgMHhkOCwgMHhlZiwgMHgzMn0gfSwKK3sgMHgwOGZmLAkxLAl7MHgyMn0gfSwKK3sgMHgwOTAwLAk5LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHg3NH0gfSwKK3sgMHgwOTdkLAkxNiwJezB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MDk4ZCwJMTIsCXsweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDM5LCAweDAyLCAweDA5LCAweGQ0fSB9LAoreyAweDA5OTksCTE2LAl7MHgwMiwgMHgwNywgMHg1MSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMn0gfSwKK3sgMHgwOWE5LAkxNiwJezB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzN9IH0sCit7IDB4MDliOSwJMTYsCXsweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmfSB9LAoreyAweDA5YzksCTE2LAl7MHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwZCwgMHhlYywgMHhlNCwgMHg3ZX0gfSwKK3sgMHgwOWQ5LAkxNiwJezB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTN9IH0sCit7IDB4MDllOSwJMTYsCXsweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzfSB9LAoreyAweDA5ZjksCTE2LAl7MHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX0gfSwKK3sgMHgwYTA5LAkxNiwJezB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmV9IH0sCit7IDB4MGExOSwJMTYsCXsweGU0LCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweDdmLCAweDBhLCAweGZlLCAweDEyLCAweDBkLCAweDk0LCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDg5fSB9LAoreyAweDBhMjksCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhjZiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwZCwgMHg5NCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwYTM5LAkxNiwJezB4OTYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4OTQsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9IH0sCit7IDB4MGE0OSwJMTYsCXsweDEyLCAweDBkLCAweDk0LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDdmLCAweDA1fSB9LAoreyAweDBhNTksCTE2LAl7MHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHg5NCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwYTY5LAkxNiwJezB4MTIsIDB4MGQsIDB4OTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGR9IH0sCit7IDB4MGE3OSwJMTYsCXsweDk0LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweDk0LCAweDIyfSB9LAoreyAweDBhODksCTE2LAl7MHg3NSwgMHgzMiwgMHgwMSwgMHhlNSwgMHgzMiwgMHg2MCwgMHgxYiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgwZCwgMHhkNywgMHg3ZiwgMHgwMCwgMHg3ZSwgMHgwZX0gfSwKK3sgMHgwYTk5LAkxNiwJezB4N2QsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTIsIDB4MDYsIDB4OTQsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4NzAsIDB4MDUsIDB4N2YsIDB4MGYsIDB4MTJ9IH0sCit7IDB4MGFhOSwJMTYsCXsweDBkLCAweGQ3LCAweGU1LCAweDMyLCAweDYwLCAweDFiLCAweDdmLCAweDAyLCAweDEyLCAweDBkLCAweGQ3LCAweDdmLCAweDAwLCAweDdlLCAweDgwLCAweDdkfSB9LAoreyAweDBhYjksCTE2LAl7MHgwMCwgMHg3YywgMHg4MCwgMHgxMiwgMHgwNiwgMHg5NCwgMHhlNCwgMHgzMywgMHhmNSwgMHgzMiwgMHg3MCwgMHgwNSwgMHg3ZiwgMHgwZiwgMHgxMiwgMHgwZH0gfSwKK3sgMHgwYWM5LAkxNiwJezB4ZDcsIDB4ZTUsIDB4MzIsIDB4NjAsIDB4MWIsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MGQsIDB4ZDcsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MjAsIDB4N2QsIDB4NDB9IH0sCit7IDB4MGFkOSwJMTYsCXsweDdjLCAweDViLCAweDEyLCAweDA2LCAweDk0LCAweGU0LCAweDMzLCAweGY1LCAweDMyLCAweDcwLCAweDA1LCAweDdmLCAweDBmLCAweDEyLCAweDBkLCAweGQ3fSB9LAoreyAweDBhZTksCTE0LAl7MHhlNSwgMHgzMiwgMHg2MCwgMHgwNSwgMHhlNCwgMHhmZiwgMHgxMiwgMHgwZCwgMHhkNywgMHhlNSwgMHgzMiwgMHgyNCwgMHhmZiwgMHgyMn0gfSwKK3sgMHgwYWY3LAk4LAl7MHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgxMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwYWZmLAkxLAl7MHgzMn0gfSwKK3sgMHgwYjAwLAkxNiwJezB4MDIsIDB4MGQsIDB4NjQsIDB4MDAsIDB4MDIsIDB4MGQsIDB4YWIsIDB4MDAsIDB4MDIsIDB4MGQsIDB4MmYsIDB4MDAsIDB4MDIsIDB4MGQsIDB4N2MsIDB4MDB9IH0sCit7IDB4MGIxMCwJMTYsCXsweDAyLCAweDBkLCAweGMxLCAweDAwLCAweDAyLCAweDBhLCAweGZmLCAweDAwLCAweDAyLCAweDBlLCAweDRjLCAweDAwLCAweDAyLCAweDBlLCAweDRkLCAweDAwfSB9LAoreyAweDBiMjAsCTE2LAl7MHgwMiwgMHgwZSwgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg0ZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1MSwgMHgwMH0gfSwKK3sgMHgwYjMwLAkxNiwJezB4MDIsIDB4MGUsIDB4NTIsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTQsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTUsIDB4MDB9IH0sCit7IDB4MGI0MCwJMTYsCXsweDAyLCAweDBlLCAweDU2LCAweDAwLCAweDAyLCAweDBlLCAweDU3LCAweDAwLCAweDAyLCAweDBlLCAweDU4LCAweDAwLCAweDAyLCAweDBlLCAweDU5LCAweDAwfSB9LAoreyAweDBiNTAsCTgsCXsweDAyLCAweDBlLCAweDVhLCAweDAwLCAweDAyLCAweDBlLCAweDViLCAweDAwfSB9LAoreyAweDBiNTgsCTE2LAl7MHhlNCwgMHhmZSwgMHg3NSwgMHgyYSwgMHhmZiwgMHg3NSwgMHgyYiwgMHgxMSwgMHg3NSwgMHgyYywgMHgxMiwgMHhhYiwgMHgyYSwgMHhhYSwgMHgyYiwgMHhhOX0gfSwKK3sgMHgwYjY4LAkxNiwJezB4MmMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDgsIDB4MjIsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjV9IH0sCit7IDB4MGI3OCwJMTYsCXsweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDA4LCAweDcxLCAweDg1LCAweGYwLCAweDI4LCAweGY1LCAweDI5LCAweDYyLCAweDI4fSB9LAoreyAweDBiODgsCTE2LAl7MHhlNSwgMHgyOCwgMHg2MiwgMHgyOSwgMHhlNSwgMHgyOSwgMHg2MiwgMHgyOCwgMHgyOSwgMHhmZCwgMHhlNSwgMHgyOCwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NX0gfSwKK3sgMHgwYjk4LAkxNCwJezB4MmEsIDB4ZmYsIDB4ZjUsIDB4MmIsIDB4ODksIDB4MmMsIDB4ODAsIDB4YzMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MGJhNiwJMSwJezB4MjJ9IH0sCit7IDB4MGJhNywJMTYsCXsweGFiLCAweDA3LCAweGFhLCAweDA2LCAweGFjLCAweDA1LCAweGU0LCAweGZkLCAweGU1LCAweDExLCAweDYwLCAweDExLCAweGVhLCAweGZmLCAweGFlLCAweDA1fSB9LAoreyAweDBiYjcsCTE2LAl7MHgwZCwgMHhlZSwgMHgyNCwgMHgxMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlYiwgMHhhZSwgMHgwNX0gfSwKK3sgMHgwYmM3LAkxNiwJezB4MGQsIDB4NzQsIDB4MTAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZWIsIDB4ZjAsIDB4YWYsIDB4MDUsIDB4MGR9IH0sCit7IDB4MGJkNywJMTYsCXsweDc0LCAweDEwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweGFmLCAweDBmLCAweDdhLCAweDBmfSB9LAoreyAweDBiZTcsCTEzLAl7MHg3YiwgMHgxMCwgMHgxMiwgMHgwZCwgMHgxMCwgMHg3ZiwgMHgwYSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHg5NCwgMHgyMn0gfSwKK3sgMHgwYmY0LAkxNiwJezB4OGUsIDB4MzIsIDB4OGYsIDB4MzMsIDB4OGQsIDB4MzQsIDB4OGEsIDB4MzUsIDB4OGIsIDB4MzYsIDB4ZTQsIDB4ZmQsIDB4ZjUsIDB4MzcsIDB4ZTUsIDB4MTF9IH0sCit7IDB4MGMwNCwJMTYsCXsweDYwLCAweDEyLCAweGU1LCAweDMyLCAweGZmLCAweGFlLCAweDA1LCAweDBkLCAweGVlLCAweDI0LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmfSB9LAoreyAweDBjMTQsCTE2LAl7MHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHgzMywgMHhhZSwgMHgwNSwgMHgwZCwgMHg3NCwgMHgxMywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH0gfSwKK3sgMHgwYzI0LAkxNiwJezB4MGYsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MzMsIDB4ZjAsIDB4YWYsIDB4MGYsIDB4N2EsIDB4MGYsIDB4N2IsIDB4MTMsIDB4MTIsIDB4MGQsIDB4MTAsIDB4YWZ9IH0sCit7IDB4MGMzNCwJMTEsCXsweDBmLCAweGFkLCAweDM0LCAweGFiLCAweDM2LCAweGFhLCAweDM1LCAweDEyLCAweDBjLCAweGYxLCAweDIyfSB9LAoreyAweDBjM2YsCTE2LAl7MHg4ZSwgMHgzMiwgMHg4ZiwgMHgzMywgMHg4ZCwgMHgzNCwgMHg4YSwgMHgzNSwgMHg4YiwgMHgzNiwgMHhlNCwgMHhmNSwgMHgzNywgMHhlNSwgMHgzNywgMHhjM30gfSwKK3sgMHgwYzRmLAkxNiwJezB4OTUsIDB4MzQsIDB4NTAsIDB4MjAsIDB4MDUsIDB4MzMsIDB4ZTUsIDB4MzMsIDB4YWUsIDB4MzIsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MzIsIDB4MTQsIDB4ZmZ9IH0sCit7IDB4MGM1ZiwJMTYsCXsweGU1LCAweDM2LCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDM1LCAweGY1LCAweDgzLCAweGUwLCAweGZkLCAweDEyLCAweDBiLCAweGE3fSB9LAoreyAweDBjNmYsCTUsCXsweDA1LCAweDM3LCAweDgwLCAweGQ5LCAweDIyfSB9LAoreyAweDBjNzQsCTE2LAl7MHhhOSwgMHgwNywgMHhlNSwgMHgwZCwgMHg3MCwgMHgyNSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlOSwgMHgyNSwgMHhlMH0gfSwKK3sgMHgwYzg0LAkxNiwJezB4NDQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4OGQsIDB4MDgsIDB4YWYsIDB4MDMsIDB4YTksIDB4MDcsIDB4NzUsIDB4MDksIDB4MDEsIDB4OGF9IH0sCit7IDB4MGM5NCwJMTMsCXsweDBhLCAweDg5LCAweDBiLCAweGU0LCAweGY1LCAweDBjLCAweDc1LCAweDBkLCAweDAzLCAweGQzLCAweDIyLCAweGMzLCAweDIyfSB9LAoreyAweDBjYTEsCTE2LAl7MHhhOSwgMHgwNywgMHhlNSwgMHgwZCwgMHg3MCwgMHgyMywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlOSwgMHgyNSwgMHhlMH0gfSwKK3sgMHgwY2IxLAkxNiwJezB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4OGQsIDB4MDgsIDB4YWYsIDB4MDMsIDB4YTksIDB4MDcsIDB4NzUsIDB4MDksIDB4MDEsIDB4OGEsIDB4MGEsIDB4ODl9IH0sCit7IDB4MGNjMSwJMTEsCXsweDBiLCAweGU0LCAweGY1LCAweDBjLCAweDc1LCAweDBkLCAweDAxLCAweGQzLCAweDIyLCAweGMzLCAweDIyfSB9LAoreyAweDBjY2MsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgwNiwgMHgwNCwgMHhlMCwgMHg0NH0gfSwKK3sgMHgwY2RjLAkxNiwJezB4MDIsIDB4ZjAsIDB4N2YsIDB4ZDAsIDB4N2UsIDB4MDcsIDB4MTIsIDB4MGQsIDB4OTQsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjB9IH0sCit7IDB4MGNlYywJNSwJezB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MGNmMSwJMTYsCXsweDEyLCAweDBjLCAweDc0LCAweGU1LCAweDBkLCAweDI0LCAweGZhLCAweDYwLCAweDEwLCAweDE0LCAweDYwLCAweDA3LCAweDI0LCAweDA3LCAweDcwLCAweGYzfSB9LAoreyAweDBkMDEsCTE1LAl7MHg3ZiwgMHgwOCwgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNiwgMHgyMn0gfSwKK3sgMHgwZDEwLAkxNiwJezB4MTIsIDB4MGMsIDB4YTEsIDB4ZTUsIDB4MGQsIDB4MjQsIDB4ZmEsIDB4NjAsIDB4MTAsIDB4MTQsIDB4NjAsIDB4MDcsIDB4MjQsIDB4MDcsIDB4NzAsIDB4ZjN9IH0sCit7IDB4MGQyMCwJMTUsCXsweDdmLCAweDA4LCAweDIyLCAweGU0LCAweGY1LCAweDBkLCAweDdmLCAweDA3LCAweDIyLCAweGU0LCAweGY1LCAweDBkLCAweDdmLCAweDA2LCAweDIyfSB9LAoreyAweDBkMmYsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwZDNmLAkxMSwJezB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ0YSwJMTYsCXsweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDEyLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDE0LCAweDdlLCAweDAwLCAweDEyfSB9LAoreyAweDBkNWEsCTEwLAl7MHgwZCwgMHg5NCwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMn0gfSwKK3sgMHgwZDY0LAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZDIsIDB4MDEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDF9IH0sCit7IDB4MGQ3NCwJOCwJezB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ3YywJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGQyLCAweDAzLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4fSB9LAoreyAweDBkOGMsCTgsCXsweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkOTQsCTE2LAl7MHg4ZSwgMHgzOCwgMHg4ZiwgMHgzOSwgMHhlNSwgMHgzOSwgMHgxNSwgMHgzOSwgMHhhZSwgMHgzOCwgMHg3MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHg0ZSwgMHg2MH0gfSwKK3sgMHgwZGE0LAk3LAl7MHgwNSwgMHgxMiwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlZSwgMHgyMn0gfSwKK3sgMHgwZGFiLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZDB9IH0sCit7IDB4MGRiYiwJNiwJezB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGRjMSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDEwLCAweGYwLCAweGQwfSB9LAoreyAweDBkZDEsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkZDcsCTE2LAl7MHhhZSwgMHgwNywgMHg3ZiwgMHgyMSwgMHg3ZCwgMHgwMSwgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhhYiwgMHg4Mn0gfSwKK3sgMHgwZGU3LAk1LAl7MHhmYSwgMHgxMiwgMHgwZCwgMHgxMCwgMHgyMn0gfSwKK3sgMHgwZGVjLAkxNiwJezB4NTAsIDB4MGYsIDB4MDAsIDB4YzAsIDB4ZjksIDB4YTQsIDB4YjAsIDB4OTksIDB4OTIsIDB4ODIsIDB4ZjgsIDB4ODAsIDB4OTgsIDB4ODgsIDB4ODMsIDB4YzZ9IH0sCit7IDB4MGRmYywJMywJezB4YTEsIDB4ODYsIDB4OGV9IH0sCit7IDB4MGRmZiwJMSwJezB4MDB9IH0sCit7IDB4MGUwMCwJMTYsCXsweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5fSB9LAoreyAweDBlMTAsCTEsCXsweDIyfSB9LAoreyAweDBlMTEsCTE0LAl7MHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwZTFmLAkxNCwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGUyZCwJOCwJezB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGUsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGUzNSwJOCwJezB4ZTQsIDB4ZjUsIDB4MGQsIDB4ZDIsIDB4ZTksIDB4ZDIsIDB4YWYsIDB4MjJ9IH0sCit7IDB4MGUzZCwJMywJezB4ZDIsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MGU0MCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0MiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0NCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0NiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0OCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0YSwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0YywJMSwJezB4MzJ9IH0sCit7IDB4MGU0ZCwJMSwJezB4MzJ9IH0sCit7IDB4MGU0ZSwJMSwJezB4MzJ9IH0sCit7IDB4MGU0ZiwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MCwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MiwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MywJMSwJezB4MzJ9IH0sCit7IDB4MGU1NCwJMSwJezB4MzJ9IH0sCit7IDB4MGU1NSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1NiwJMSwJezB4MzJ9IH0sCit7IDB4MGU1NywJMSwJezB4MzJ9IH0sCit7IDB4MGU1OCwJMSwJezB4MzJ9IH0sCit7IDB4MGU1OSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1YSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1YiwJMSwJezB4MzJ9IH0sCit7IDB4MTEwMCwJMTYsCXsweDEyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDA1LCAweDEwLCAweDI3LCAweDAxLCAweDAwLCAweDAxLCAweDAyfSB9LAoreyAweDExMTAsCTE2LAl7MHgwMCwgMHgwMSwgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMywgMHhhMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMn0gfSwKK3sgMHgxMTIwLAkxNiwJezB4ZmYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDB9IH0sCit7IDB4MTEzMCwJMTYsCXsweDAwLCAweDAwLCAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDI2LCAweDAzLCAweDQxLCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDY4LCAweDAwfSB9LAoreyAweDExNDAsCTE2LAl7MHg2ZiwgMHgwMCwgMHg3MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3MywgMHgwMH0gfSwKK3sgMHgxMTUwLAkxNiwJezB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDYsIDB4MDB9IH0sCit7IDB4MTE2MCwJMTYsCXsweDY5LCAweDAwLCAweDcyLCAweDAwLCAweDZkLCAweDAwLCAweDc3LCAweDAwLCAweDYxLCAweDAwLCAweDcyLCAweDAwLCAweDY1LCAweDAwLCAweDIwLCAweDAwfSB9LAoreyAweDExNzAsCTE2LAl7MHg0NiwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg1NywgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MiwgMHgwMH0gfSwKK3sgMHgxMTgwLAkxNiwJezB4NmIsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MmEsIDB4MDMsIDB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjksIDB4MDB9IH0sCit7IDB4MTE5MCwJMTYsCXsweDY3LCAweDAwLCAweDc1LCAweDAwLCAweDcyLCAweDAwLCAweDYxLCAweDAwLCAweDc0LCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwfSB9LAoreyAweDExYTAsCTE2LAl7MHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMCwgMHgyMiwgMHgwM30gfSwKK3sgMHgxMWIwLAkxNiwJezB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NjMsIDB4MDB9IH0sCit7IDB4MTFjMCwJMTYsCXsweDY1LCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwfSB9LAoreyAweDExZDAsCTIsCXsweDAwLCAweDAwfSB9LAoreyAweGZmZmYsCTAsCXsweDAwfSB9Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bncy5TIGIvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWQ5OWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3MuUwpAQCAtMCwwICsxLDExOTIgQEAKKy8qICAkSWQ6IGxvb3Aucyx2IDEuMjMgMjAwMC8wMy8yMCAwOTo0OTowNiB3YXJuZXIgRXhwICQKKyAqIAorICogIEZpcm13YXJlIGZvciB0aGUgS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIsIGEgVVNCIHNlcmlhbCBwb3J0IGJhc2VkIG9uCisgKiAgdGhlIEV6VVNCIG1pY3JvY29udHJvbGxlci4KKyAqIAorICogIChDKSBDb3B5cmlnaHQgMjAwMCBCcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorICogCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICJLZXlzcGFuIFBEQSBTZXJpYWwgQWRhcHRlciIgaXMgcHJvYmFibHkgYSBjb3B5cmlnaHQgb2YgS2V5c3BhbiwgdGhlCisgKiAgY29tcGFueS4KKyAqIAorICogIFRoaXMgc2VyaWFsIGFkYXB0ZXIgaXMgYmFzaWNhbGx5IGFuIEV6VVNCIGNoaXAgYW5kIGFuIFJTLTIzMiBsaW5lIGRyaXZlcgorICogIGluIGEgbGl0dGxlIHdpZGdldCB0aGF0IGhhcyBhIERCLTkgb24gb25lIGVuZCBhbmQgYSBVU0IgcGx1ZyBvbiB0aGUgb3RoZXIuCisgKiAgSXQgdXNlcyB0aGUgRXpVU0IncyBpbnRlcm5hbCBVQVJUMCAodXNpbmcgdGhlIHBpbnMgZnJvbSBQb3J0IEMpIGFuZCB0aW1lcjIKKyAqICBhcyBhIGJhdWQtcmF0ZSBnZW5lcmF0b3IuIFRoZSB3aXJpbmcgaXM6CisgKiAgIFBDMC9SeEQwIDwtIHJ4ZCAoREI5IHBpbiAyKSAgICAgICAgIFBDNCA8LSBkc3IgcGluIDYKKyAqICAgUEMxL1R4RDAgLT4gdHhkIHBpbiAzICAgICAgICAgICAgICAgUEM1IDwtIHJpICBwaW4gOQorICogICBQQzIgICAgICAtPiBydHMgcGluIDcgICAgICAgICAgICAgICBQQzYgPC0gZGNkIHBpbiAxCisgKiAgIFBDMyAgICAgIDwtIGN0cyBwaW4gOCAgICAgICAgICAgICAgIFBDNyAtPiBkdHIgcGluIDQKKyAqICAgUEIxIC0+IGxpbmUgZHJpdmVyIHN0YW5kYnkKKyAqCisgKiAgVGhlIEV6VVNCIHJlZ2lzdGVyIGNvbnN0YW50cyBiZWxvdyBjb21lIGZyb20gdGhlaXIgZXhjZWxsZW50IGRvY3VtZW50YXRpb24KKyAqICBhbmQgc2FtcGxlIGNvZGUgKHdoaWNoIHVzZWQgdG8gYmUgYXZhaWxhYmxlIGF0IHd3dy5hbmNob3JjaGlwcy5jb20sIGJ1dAorICogIHRoYXQgaGFzIG5vdyBiZWVuIGFic29yYmVkIGludG8gQ3lwcmVzcycgc2l0ZSBhbmQgdGhlIENELVJPTSBjb250ZW50cworICogIGRvbid0IGFwcGVhciB0byBiZSBhdmFpbGFibGUgb25saW5lIGFueW1vcmUpLiBJZiB3ZSBnZXQgbXVsdGlwbGUKKyAqICBFelVTQi1iYXNlZCBkcml2ZXJzIGludG8gdGhlIGtlcm5lbCwgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIHB1bGwgdGhlbSBvdXQKKyAqICBpbnRvIGEgc2VwYXJhdGUgLmggZmlsZS4KKyAqIAorICogVEhFT1JZIE9GIE9QRVJBVElPTjoKKyAqCisgKiAgIFRoZXJlIGFyZSB0d28gMjU2LWJ5dGUgcmluZyBidWZmZXJzLCBvbmUgZm9yIHR4LCBvbmUgZm9yIHJ4LgorICoKKyAqICAgRVAyb3V0IGlzIHB1cmUgdHggZGF0YS4gV2hlbiBpdCBhcHBlYXJzLCB0aGUgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgdHgKKyAqICAgcmluZyBhbmQgc2VyaWFsIHRyYW5zbWlzc2lvbiBpcyBzdGFydGVkIGlmIGl0IHdhc24ndCBhbHJlYWR5IHJ1bm5pbmcuIFRoZQorICogICAidHggYnVmZmVyIGVtcHR5IiBpbnRlcnJ1cHQgbWF5IGtpY2sgb2ZmIGFub3RoZXIgY2hhcmFjdGVyIGlmIHRoZSByaW5nCisgKiAgIHN0aWxsIGhhcyBkYXRhLiBJZiB0aGUgaG9zdCBpcyB0eC1ibG9ja2VkIGJlY2F1c2UgdGhlIHJpbmcgZmlsbGVkIHVwLAorICogICBpdCB3aWxsIHJlcXVlc3QgYSAidHggdW50aHJvdHRsZSIgaW50ZXJydXB0LiBJZiBzZW5kaW5nIGEgc2VyaWFsIGNoYXJhY3RlcgorICogICBlbXB0aWVzIHRoZSByaW5nIGJlbG93IHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgd2Ugc2V0IGEgYml0IHRoYXQgd2lsbCBzZW5kCisgKiAgIHVwIHRoZSB0eCB1bnRocm90dGxlIG1lc3NhZ2UgYXMgc29vbiBhcyB0aGUgcnggYnVmZmVyIGJlY29tZXMgZnJlZS4KKyAqCisgKiAgIEVQMmluIChpbnRlcnJ1cHQpIGlzIHVzZWQgdG8gc2VuZCBib3RoIHJ4IGNoYXJzIGFuZCByeCBzdGF0dXMgbWVzc2FnZXMKKyAqICAgKG9ubHkgInR4IHVudGhyb3R0bGUiIGF0IHRoaXMgdGltZSkgYmFjayB1cCB0byB0aGUgaG9zdC4gVGhlIGZpcnN0IGJ5dGUKKyAqICAgb2YgdGhlIHJ4IG1lc3NhZ2UgaW5kaWNhdGVzIGRhdGEgKDApIG9yIHN0YXR1cyBtc2cgKDEpLiBTdGF0dXMgbWVzc2FnZXMKKyAqICAgYXJlIHNlbnQgYmVmb3JlIGFueSBkYXRhLgorICoKKyAqICAgSW5jb21pbmcgc2VyaWFsIGNoYXJhY3RlcnMgYXJlIHB1dCBpbnRvIHRoZSByeCByaW5nIGJ5IHRoZSBzZXJpYWwKKyAqICAgaW50ZXJydXB0LCBhbmQgdGhlIEVQMmluIGJ1ZmZlciBzZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5IGluIHRyYW5zaXQuCisgKiAgIFdoZW4gdGhlIEVQMmluIGJ1ZmZlciByZXR1cm5zLCB0aGUgaW50ZXJydXB0IHByb21wdHMgdXMgdG8gc2VuZCBtb3JlCisgKiAgIHJ4IGNoYXJzIChvciBzdGF0dXMgbWVzc2FnZXMpIGlmIHRoZXkgYXJlIHBlbmRpbmcuCisgKgorICogICBEZXZpY2UgY29udHJvbCBoYXBwZW5zIHRocm91Z2ggInZlbmRvciBzcGVjaWZpYyIgY29udHJvbCBtZXNzYWdlcyBvbiBFUDAuCisgKiAgIEFsbCBtZXNzYWdlcyBhcmUgZGVzdGluZWQgZm9yIHRoZSAiSW50ZXJmYWNlIiAod2l0aCB0aGUgaW5kZXggYWx3YXlzIDAsCisgKiAgIHNvIHRoYXQgaWYgdGhlaXIgdHdvLXBvcnQgZGV2aWNlIG1pZ2h0IHNvbWVkYXkgdXNlIHNpbWlsYXIgZmlybXdhcmUsIHdlCisgKiAgIGNhbiB1c2UgaW5kZXg9MSB0byByZWZlciB0byB0aGUgc2Vjb25kIHBvcnQpLiBUaGUgbWVzc2FnZXMgZGVmaW5lZCBhcmU6CisgKgorICogICAgYlJlcXVlc3QgPSAwIDogc2V0IGJhdWQvYml0cy9wYXJpdHkKKyAqICAgICAgICAgICAgICAgMSA6IHVudXNlZAorICogICAgICAgICAgICAgICAyIDogcmVzZXJ2ZWQgZm9yIHNldHRpbmcgSFcgZmxvdyBjb250cm9sIChDVFNSVFMpCisgKiAgICAgICAgICAgICAgIDMgOiBnZXQvc2V0ICJtb2RlbSBpbmZvIiAocGluIHN0YXRlczogRFRSLCBSVFMsIERDRCwgUkksIGV0YykKKyAqICAgICAgICAgICAgICAgNCA6IHNldCBicmVhayAob24vb2ZmKQorICogICAgICAgICAgICAgICA1IDogcmVzZXJ2ZWQgZm9yIHJlcXVlc3RpbmcgaW50ZXJydXB0cyBvbiBwaW4gc3RhdGUgY2hhbmdlCisgKiAgICAgICAgICAgICAgIDYgOiBxdWVyeSBidWZmZXIgcm9vbSBvciBjaGFycyBpbiB0eCBidWZmZXIKKyAqICAgICAgICAgICAgICAgNyA6IHJlcXVlc3QgdHggdW50aHJvdHRsZSBpbnRlcnJ1cHQKKyAqCisgKiAgVGhlIGhvc3Qtc2lkZSBkcml2ZXIgaXMgc2V0IHRvIHJlY29nbml6ZSB0aGUgZGV2aWNlIElEIHZhbHVlcyBzdGFzaGVkIGluCisgKiAgc2VyaWFsIEVFUFJPTSAoMHgwNmNkLCAweDAxMDMpLCBwcm9ncmFtIHRoaXMgZmlybXdhcmUgaW50byBwbGFjZSwgdGhlbgorICogIHN0YXJ0IGl0IHJ1bm5pbmcuIFRoaXMgZmlybXdhcmUgd2lsbCB1c2UgRXpVU0IncyAicmVudW1lcmF0aW9uIiB0cmljayBieQorICogIHNpbXVsYXRpbmcgYSBidXMgZGlzY29ubmVjdCwgdGhlbiByZWNvbm5lY3Qgd2l0aCBhIGRpZmZlcmVudCBkZXZpY2UgSUQKKyAqICAoZW5jb2RlZCBpbiB0aGUgZGVzY19kZXZpY2UgZGVzY3JpcHRvciBiZWxvdykuIFRoZSBob3N0IGRyaXZlciB0aGVuCisgKiAgcmVjb2duaXplcyB0aGUgbmV3IGRldmljZSBJRCBhbmQgZ2x1ZXMgaXQgdG8gdGhlIHJlYWwgc2VyaWFsIGRyaXZlciBjb2RlLgorICoKKyAqIFVTRUZVTCBET0NTOgorICogIEV6VVNCIFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsOiA8aHR0cDovL3d3dy5hbmNob3JjaGlwcy5jb20+CisgKiAgODA1MSBtYW51YWxzOiBldmVyeXdoZXJlLCBidXQgdHJ5IHd3dy5kYWxzZW1pLmNvbSBiZWNhdXNlIHRoZSBFelVTQiBpcworICogICBiYXNpY2FsbHkgdGhlIERhbGxhcyBlbmhhbmNlZCA4MDUxIGNvZGUuIFJlbWVtYmVyIHRoYXQgdGhlIEV6VVNCIElPIHBvcnRzCisgKiAgIHVzZSB0b3RhbGx5IGRpZmZlcmVudCByZWdpc3RlcnMhCisgKiAgVVNCIDEuMSBzcGVjOiB3d3cudXNiLm9yZworICoKKyAqIEhPVyBUTyBCVUlMRDoKKyAqICBnY2MgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1QIC1FIC1vIGtleXNwYW5fcGRhLmFzbSBrZXlzcGFuX3BkYS5zCisgKiAgYXMzMSAtbCBrZXlzcGFuX3BkYS5hc20KKyAqICBtdiBrZXlzcGFuX3BkYS5vYmoga2V5c3Bhbl9wZGEuaGV4CisgKiAgcGVybCBlenVzYl9jb252ZXJ0LnBsIGtleXNwYW5fcGRhIDwga2V5c3Bhbl9wZGEuaGV4ID4ga2V5c3Bhbl9wZGFfZncuaAorICogR2V0IGFzMzEgZnJvbSA8aHR0cDovL3d3dy5wanJjLmNvbS90ZWNoLzgwNTEvaW5kZXguaHRtbD4sIGFuZCBoYWNrIG9uIGl0CisgKiBhIGJpdCB0byBtYWtlIGl0IGJ1aWxkLgorICoKKyAqIFRIQU5LUzoKKyAqICBHcmVnIEtyb2FoLUhhcnRtYW4sIGZvciBjb29yZGluYXRpbmcgdGhlIHdob2xlIHVzYi1zZXJpYWwgdGhpbmcuCisgKiAgQW5jaG9yQ2hpcHMsIGZvciBtYWtpbmcgc3VjaCBhbiBpbmNyZWRpYmx5IHVzZWZ1bCBsaXR0bGUgbWljcm9jb250cm9sbGVyLgorICogIEtleVNwYW4sIGZvciBtYWtpbmcgYSBoYW5keSwgY2hlYXAgKCQ0MCkgd2lkZ2V0IHRoYXQgd2FzIHNvIGVhc3kgdG8gdGFrZQorICogICAgICAgICAgIGFwYXJ0IGFuZCB0cmFjZSB3aXRoIGFuIG9obW1ldGVyLgorICoKKyAqIFRPRE86CisgKiAgbG90cy4gZ3JlcCBmb3IgVE9ETy4gSW50ZXJydXB0IHNhZmV0eSBuZWVkcyBzdHJlc3MtdGVzdGluZy4gQmV0dGVyIGZsb3cKKyAqICBjb250cm9sLiBJbnRlcnJ1cHRpbmcgaG9zdCB1cG9uIGNoYW5nZSBpbiBEQ0QsIGV0YywgY291bnRpbmcgdHJhbnNpdGlvbnMuCisgKiAgTmVlZCB0byBmaW5kIGEgc2FmZSBkZXZpY2UgaWQgdG8gdXNlICh0aGUgb25lIHVzZWQgYnkgdGhlIEtleXNwYW4gZmlybXdhcmUKKyAqICB1bmRlciBXaW5kb3dzIHdvdWxkIGJlIGlkZWFsLi4gY2FuIGFueW9uZSBmaWd1cmUgb3V0IHdoYXQgaXQgaXM/KS4gUGFyaXR5LgorICogIE1vcmUgYmF1ZCByYXRlcy4gT2gsIGFuZCB0aGUgc3RyaW5nLWRlc2NyaXB0b3ItbGVuZ3RoIHNpbGljb24gYnVnCisgKiAgd29ya2Fyb3VuZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQsIGJ1dCBJJ20gbGF6eSwgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcworICogIHRoYXQgdGhlIGRldmljZSBuYW1lIHN0cmluZ3MgdGhhdCBzaG93IHVwIGluIHlvdXIga2VybmVsIGxvZyB3aWxsIGhhdmUKKyAqICBsb3RzIG9mIHRyYWlsaW5nIGJpbmFyeSBnYXJiYWdlIGluIHRoZW0gKGFwcGVhcnMgYXMgPz8/PykuIERldmljZSBzdHJpbmdzCisgKiAgc2hvdWxkIGJlIG1hZGUgbW9yZSBhY2N1cmF0ZS4KKyAqCisgKiBRdWVzdGlvbnMsIGJ1Z3MsIHBhdGNoZXMgdG8gQnJpYW4uCisgKgorICogIC1CcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorICoKKyAqLworCQorI2RlZmluZSBISUdIKHgpICgoKHgpICYgMHhmZjAwKSAvIDI1NikKKyNkZWZpbmUgTE9XKHgpICgoeCkgJiAweGZmKQorCisjZGVmaW5lIGRwbDEgMHg4NAorI2RlZmluZSBkcGgxIDB4ODUKKyNkZWZpbmUgZHBzIDB4ODYKKworOzs7IG91ciBiaXQgYXNzaWdubWVudHMKKyNkZWZpbmUgVFhfUlVOTklORyAwCisjZGVmaW5lIERPX1RYX1VOVEhST1RUTEUgMQorCQorCTs7IHN0YWNrIGZyb20gMHg2MCB0byAweDdmOiBzaG91bGQgcmVhbGx5IHNldCBTUCB0byAweDYwLTEsIG5vdCAweDYwCisjZGVmaW5lIFNUQUNLICMweDYwLTEKKworI2RlZmluZSBFWElGIDB4OTEKKyNkZWZpbmUgRUlFIDB4ZTgKKwkuZmxhZyBFVVNCLCBFSUUuMAorCS5mbGFnIEVTMCwgSUUuNAorCisjZGVmaW5lIEVQMENTICMweDdmYjQKKyNkZWZpbmUgRVAwU1RBTExiaXQgIzB4MDEKKyNkZWZpbmUgSU4wQlVGICMweDdmMDAKKyNkZWZpbmUgSU4wQkMgIzB4N2ZiNQorI2RlZmluZSBPVVQwQlVGICMweDdlYzAKKyNkZWZpbmUgT1VUMEJDICMweDdmYzUJCQorI2RlZmluZSBJTjJCVUYgIzB4N2UwMAorI2RlZmluZSBJTjJCQyAjMHg3ZmI5CisjZGVmaW5lIElOMkNTICMweDdmYjgKKyNkZWZpbmUgT1VUMkJDICMweDdmYzkKKyNkZWZpbmUgT1VUMkNTICMweDdmYzgKKyNkZWZpbmUgT1VUMkJVRiAjMHg3ZGMwCisjZGVmaW5lIElONEJVRiAjMHg3ZDAwCisjZGVmaW5lIElONEJDICMweDdmYmQKKyNkZWZpbmUgSU40Q1MgIzB4N2ZiYworI2RlZmluZSBPRUIgIzB4N2Y5ZAorI2RlZmluZSBPVVRCICMweDdmOTcKKyNkZWZpbmUgT0VDICMweDdmOWUKKyNkZWZpbmUgT1VUQyAjMHg3Zjk4CisjZGVmaW5lIFBJTlNDICMweDdmOWIKKyNkZWZpbmUgUE9SVEJDRkcgIzB4N2Y5NAorI2RlZmluZSBQT1JUQ0NGRyAjMHg3Zjk1CisjZGVmaW5lIE9FQQkjMHg3ZjljCisjZGVmaW5lIElOMDdJUlEgIzB4N2ZhOQorI2RlZmluZSBPVVQwN0lSUSAjMHg3ZmFhCisjZGVmaW5lIElOMDdJRU4gIzB4N2ZhYworI2RlZmluZSBPVVQwN0lFTiAjMHg3ZmFkCisjZGVmaW5lIFVTQklSUSAjMHg3ZmFiCisjZGVmaW5lIFVTQklFTiAjMHg3ZmFlCisjZGVmaW5lIFVTQkJBViAjMHg3ZmFmCisjZGVmaW5lIFVTQkNTICMweDdmZDYKKyNkZWZpbmUgU1VEUFRSSCAjMHg3ZmQ0CisjZGVmaW5lIFNVRFBUUkwgIzB4N2ZkNQorI2RlZmluZSBTRVRVUERBVCAjMHg3ZmU4CisJCQorCTs7IHVzYiBpbnRlcnJ1cHQgOiBlbmFibGUgaXMgRUlFLjAgKDB4ZTgpLCBmbGFnIGlzIEVYSUYuNCAoMHg5MSkKKworCS5vcmcgMAorCWxqbXAgc3RhcnQKKwk7OyBpbnRlcnJ1cHQgdmVjdG9ycworCS5vcmcgMjNICisJbGptcCBzZXJpYWxfaW50CisJLmJ5dGUgMAorCQorCS5vcmcgNDNICisJbGptcCBVU0JfSnVtcF9UYWJsZQorCS5ieXRlIDAJCQk7IGZpbGxlZCBpbiBieSB0aGUgVVNCIGNvcmUKKworOzs7IGxvY2FsIHZhcmlhYmxlcy4gVGhlc2UgYXJlIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseTogZG8gaXQgYnkgaGFuZC4KKwkub3JnIDMwSAorcnhfcmluZ19pbjoJLmJ5dGUgMAorcnhfcmluZ19vdXQ6CS5ieXRlIDAKK3R4X3JpbmdfaW46CS5ieXRlIDAKK3R4X3Jpbmdfb3V0OgkuYnl0ZSAwCit0eF91bnRocm90dGxlX3RocmVzaG9sZDoJLmJ5dGUgMAorCQkKKwkub3JnIDB4MTAwSAkJOyB3YW50cyB0byBiZSBvbiBhIHBhZ2UgYm91bmRhcnkKK1VTQl9KdW1wX1RhYmxlOgorCWxqbXAJSVNSX1N1ZGF2CTsgU2V0dXAgRGF0YSBBdmFpbGFibGUKKwkuYnl0ZSAwCisJbGptcAkwCQk7IFN0YXJ0IG9mIEZyYW1lCisJLmJ5dGUgMAorCWxqbXAJMAkJOyBTZXR1cCBEYXRhIExvYWRpbmcKKwkuYnl0ZSAwCisJbGptcAkwCQk7IEdsb2JhbCBTdXNwZW5kCisJLmJ5dGUgCTAKKwlsam1wCTAJCTsgVVNCIFJlc2V0ICAJCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBSZXNlcnZlZAorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDAgSW4KKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAwIE91dAorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDEgSW4KKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAxIE91dAorCS5ieXRlCTAKKwlsam1wCUlTUl9FcDJpbgorCS5ieXRlCTAKKwlsam1wCUlTUl9FcDJvdXQKKwkuYnl0ZQkwCisKKworCS5vcmcgMHgyMDAKKwkJCitzdGFydDoJbW92IFNQLFNUQUNLLTEgOyBzZXQgc3RhY2sKKwk7OyBjbGVhciBsb2NhbCB2YXJpYWJsZXMKKwljbHIgYQorCW1vdiB0eF9yaW5nX2luLCBhCisJbW92IHR4X3Jpbmdfb3V0LCBhCisJbW92IHJ4X3JpbmdfaW4sIGEKKwltb3YgcnhfcmluZ19vdXQsIGEKKwltb3YgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsIGEKKwljbHIgVFhfUlVOTklORworCWNsciBET19UWF9VTlRIUk9UVExFCisJCisJOzsgY2xlYXIgZmlmbyB3aXRoICJmZSIKKwltb3YgcjEsIDAKKwltb3YgYSwgIzB4ZmUKKwltb3YgZHB0ciwgI3R4X3JpbmcKK2NsZWFyX3R4X3JpbmdfbG9vcDoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlkam56IHIxLCBjbGVhcl90eF9yaW5nX2xvb3AKKworCW1vdiBhLCAjMHhmZAorCW1vdiBkcHRyLCAjcnhfcmluZworY2xlYXJfcnhfcmluZ19sb29wOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWRqbnogcjEsIGNsZWFyX3J4X3JpbmdfbG9vcAorCis7OzsgdHVybiBvbiB0aGUgUlMtMjMyIGRyaXZlciBjaGlwIChicmluZyB0aGUgU1RBTkRCWSBwaW4gbG93KQorOzs7IG9uIFhpcmNvbSB0aGUgU1RBTkRCWSBpcyB3aXJlZCB0byBQQjYgYW5kIFBDNCAKKwltb3YgZHB0ciwgUE9SVEJDRkcKKyAgICAgICAgbW92IGEsICMweEJmCisgICAgICAgIG1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgUE9SVENDRkcKKyAgICAgICAgbW92IGEsICMweGVmCisgICAgICAgIG1vdnggQGRwdHIsIGEKKwkKKwk7OyBzZXQgT0VDLjQKKyAgICAgICAgbW92IGEsICMweDEwCisgICAgICAgIG1vdiBkcHRyLE9FQworICAgICAgICBtb3Z4IEBkcHRyLGEKKworICAgICAgICA7OyBjbGVhciBQQzQKKyAgICAgICAgbW92IGEsICMweDAwCisgICAgICAgIG1vdiBkcHRyLE9VVEMKKyAgICAgICAgbW92eCBAZHB0cixhCisKKwk7OyBzZXQgT0VCLjYKKwltb3YgYSwgIzB4NDAKKwltb3YgZHB0cixPRUIKKwltb3Z4IEBkcHRyLGEKKworCTs7IGNsZWFyIFBCNgorCW1vdiBhLCAjMHgwMAorCW1vdiBkcHRyLE9VVEIKKwltb3Z4IEBkcHRyLGEKKworCTs7IHNldCBPRUMuWzE3XQorCW1vdiBhLCAjMHg4MgorCW1vdiBkcHRyLE9FQworCW1vdnggQGRwdHIsYQorCisKKwk7OyBzZXQgUE9SVENDRkcuWzAxXSB0byByb3V0ZSBUeEQwLFJ4RDAgdG8gc2VyaWFsIHBvcnQKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3YgYSwgIzB4MDMKKwltb3Z4IEBkcHRyLCBhCisJCisJOzsgc2V0IHVwIGludGVycnVwdHMsIGF1dG92ZWN0b3JpbmcKKwk7OyBzZXQgQktQVAorCW1vdiBkcHRyLCBVU0JCQVYKKwltb3Z4IGEsQGRwdHIKKwlzZXRiIGFjYy4wCQk7IEFWRU4gYml0IHRvIDAKKwltb3Z4IEBkcHRyLCBhCisKKwltb3YgYSwjMHgwMQkJOyBlbmFibGUgU1VEQVY6CXNldHVwIGRhdGEgYXZhaWxhYmxlIChmb3IgZXAwKQorCW1vdiBkcHRyLCBVU0JJUlEKKwltb3Z4IEBkcHRyLCBhCQk7IGNsZWFyIFNVREFWSQorCW1vdiBkcHRyLCBVU0JJRU4KKwltb3Z4IEBkcHRyLCBhCisJCisJbW92IGRwdHIsIElOMDdJRU4KKwltb3YgYSwjMHgwNAkJOyBlbmFibGUgSU4yIGludAorCW1vdnggQGRwdHIsIGEKKwkKKwltb3YgZHB0ciwgT1VUMDdJRU4KKwltb3YgYSwjMHgwNAkJOyBlbmFibGUgT1VUMiBpbnQKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIE9VVDJCQworCW1vdnggQGRwdHIsIGEJCTsgYXJtIE9VVDIKKworOzsJbW92IGEsICMweDg0CQk7IHR1cm4gb24gUlRTLCBEVFIKKzs7CW1vdiBkcHRyLE9VVEMKKzs7CW1vdnggQGRwdHIsIGEKKworCW1vdiBhLCAjMHg3ICAgICAgICAgICAgIDsgdHVybiBvbiAgRFRSCisgICAgICAgIG1vdiBkcHRyLFVTQkJBVgorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKwltb3YgYSwgIzB4MjAgICAgICAgICAgICAgOyB0dXJuIG9uIHRoZSBSRUQgbGVkIAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisJbW92IGEsICMweDgwICAgICAgICAgICAgOyB0dXJuIG9uICBSVFMKKyAgICAgICAgbW92IGRwdHIsT1VUQworICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKwk7OyBzZXR1cCB0aGUgc2VyaWFsIHBvcnQuIDk2MDAgOE4xLgorCW1vdiBhLCMweDUzCQk7IG1vZGUgMSwgZW5hYmxlIHJ4LCBjbGVhciBpbnQKKwltb3YgU0NPTiwgYQorCTs7ICB1c2luZyB0aW1lcjIsIGluIDE2LWJpdCBiYXVkLXJhdGUtZ2VuZXJhdG9yIG1vZGUKKwk7OyAgICh4dGFsIDEyTUh6LCBpbnRlcm5hbCBmb3NjIDI0TUh6KQorCTs7ICBSQ0FQMkgsUkNBUDJMID0gNjU1MzYgLSBmb3NjLygzMipiYXVkKQorCTs7ICA1NzYwMDogMHhGRkYyLkYsIHNheSAweEZGRjMKKwk7OyAgIDk2MDA6IDB4RkZCMS5FLCBzYXkgMHhGRkIyCisJOzsgICAgMzAwOiAweEY2M0MKKyNkZWZpbmUgQkFVRCA5NjAwCisjZGVmaW5lIEJBVURfVElNRU9VVChyYXRlKSAoNjU1MzYgLSAoMjQgKiAxMDAwICogMTAwMCkgLyAoMzIgKiByYXRlKSkKKyNkZWZpbmUgQkFVRF9ISUdIKHJhdGUpIEhJR0goQkFVRF9USU1FT1VUKHJhdGUpKQorI2RlZmluZSBCQVVEX0xPVyhyYXRlKSBMT1coQkFVRF9USU1FT1VUKHJhdGUpKQorCQkKKwltb3YgVDJDT04sICMwMzBoCTsgcmNsaz0xLHRjbGs9MSxjcD0wLHRyMj0wKGVuYWJsZSBsYXRlcikKKwltb3YgcjMsICM1CisJYWNhbGwgc2V0X2JhdWQKKwlzZXRiIFRSMgorCW1vdiBTQ09OLCAjMDUwaAorCQorI2lmIDAKKwltb3YgcjEsICMweDQwCisJbW92IGEsICMweDQxCitzZW5kOgkKKwltb3YgU0JVRiwgYQorCWluYyBhCisJYW5sIGEsICMweDNGCisJb3JsIGEsICMweDQwCis7CXhybCBhLCAjMHgwMgord2FpdDE6CQorCWpuYiBUSSwgd2FpdDEKKwljbHIgVEkKKwlkam56IHIxLCBzZW5kCis7ZG9uZToJc2ptcCBkb25lCisKKyNlbmRpZgorCQorCXNldGIgRVVTQgorCXNldGIgRUEKKwlzZXRiIEVTMAorCTthY2FsbCBkdW1wX3N0YXQKKworCTs7IGhleSwgd2hhdCBzYXkgd2UgUkVOVU1FUkFURSEgKFRSTSBwLjYyKQorCW1vdiBhLCAjMAorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgVVNCQ1MKKwltb3YgYSwgIzB4MDIJCTsgRElTQ09OPTAsIERJU0NPRT0wLCBSRU5VTT0xCisJbW92eCBAZHB0ciwgYQorCTs7IG5vdyBwcmVzZW5jZSBwaW4gaXMgZmxvYXRpbmcsIHNpbXVsYXRpbmcgZGlzY29ubmVjdC4gd2FpdCAwLjVzCisJbW92IHIxLCAjNDYKK3JlbnVtX3dhaXQxOgorCW1vdiByMiwgIzAKK3JlbnVtX3dhaXQyOgorCW1vdiByMywgIzAKK3JlbnVtX3dhaXQzOgorCWRqbnogcjMsIHJlbnVtX3dhaXQzCisJZGpueiByMiwgcmVudW1fd2FpdDIKKwlkam56IHIxLCByZW51bV93YWl0MQk7IHdhaXQgYWJvdXQgbiooMjU2XjIpIDZNSHogY2xvY2tzCisJbW92IGEsICMweDA2CQk7IERJU0NPTj0wLCBESVNDT0U9MSwgUkVOVU09MQorCW1vdnggQGRwdHIsIGEKKwk7OyB3ZSBhcmUgYmFjayBvbmxpbmUuIHRoZSBob3N0IGRldmljZSB3aWxsIG5vdyByZS1xdWVyeSB1cworCQorCQorbWFpbjoJc2ptcCBtYWluCisKKwkKKworSVNSX1N1ZGF2OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBVU0JJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzAxaAorCW1vdnggQGRwdHIsYQorCisJOzsgZ2V0IHJlcXVlc3QgdHlwZQorCW1vdiBkcHRyLCBTRVRVUERBVAorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEJCTsgcjEgPSBibVJlcXVlc3RUeXBlCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIyLCBhCQk7IHIyID0gYlJlcXVlc3QKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjMsIGEJCTsgcjMgPSB3VmFsdWVMCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHI0LCBhCQk7IHI0ID0gd1ZhbHVlSAorCisJOzsgbWFpbiBzd2l0Y2ggb24gYm1SZXF1ZXN0LnR5cGU6IHN0YW5kYXJkIG9yIHZlbmRvcgorCW1vdiBhLCByMQorCWFubCBhLCAjMHg2MAorCWNqbmUgYSwgIzB4MDAsIHNldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkCisJOzsgc3RhbmRhcmQgcmVxdWVzdDogbm93IG1haW4gc3dpdGNoIGlzIG9uIGJSZXF1ZXN0CisJbGptcCBzZXR1cF9ibXJlcV9pc19zdGFuZGFyZAorCQorc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmQ6CQorCTs7IGEgc3RpbGwgaGFzIGJtcmVxJjB4NjAKKwljam5lIGEsICMweDQwLCBzZXR1cF9ibXJlcV90eXBlX25vdF92ZW5kb3IKKwk7OyBBbmNob3IgcmVzZXJ2ZXMgYlJlcXVlc3QgMHhhMC0weGFmLCB3ZSB1c2Ugc21hbGwgb25lcworCTs7IHN3aXRjaCBvbiBiUmVxdWVzdC4gYm1SZXF1ZXN0IHdpbGwgYWx3YXlzIGJlIDB4NDEgb3IgMHhjMQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9jdHJsX25vdF8wMAorCTs7IDAwIGlzIHNldCBiYXVkLCB3VmFsdWVbMF0gaGFzIGJhdWQgcmF0ZSBpbmRleAorCWxjYWxsIHNldF9iYXVkCQk7IGluZGV4IGluIHIzLCBjYXJyeSBzZXQgaWYgZXJyb3IKKwlqYyBzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGwKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGw6CisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDA6CisJY2puZSByMiwgIzB4MDEsIHNldHVwX2N0cmxfbm90XzAxCisJOzsgMDEgaXMgcmVzZXJ2ZWQgZm9yIHNldCBiaXRzIChwYXJpdHkpLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDE6CisJY2puZSByMiwgIzB4MDIsIHNldHVwX2N0cmxfbm90XzAyCisJOzsgMDIgaXMgc2V0IEhXIGZsb3cgY29udHJvbC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAyOgorCWNqbmUgcjIsICMweDAzLCBzZXR1cF9jdHJsX25vdF8wMworCTs7IDAzIGlzIGNvbnRyb2wgcGlucyAoUlRTLCBEVFIpLgorCWxqbXAgY29udHJvbF9waW5zCTsgd2lsbCBqdW1wIHRvIHNldHVwX2RvbmVfYWNrLAorCQkJCTsgIG9yIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF9ub3RfMDM6CisJY2puZSByMiwgIzB4MDQsIHNldHVwX2N0cmxfbm90XzA0CisJOzsgMDQgaXMgc2VuZCBicmVhayAocmVhbGx5ICJ0dXJuIGJyZWFrIG9uL29mZiIpLiBUT0RPCisJY2puZSByMywgIzB4MDAsIHNldHVwX2N0cmxfZG9fYnJlYWtfb24KKwk7OyBkbyBicmVhayBvZmY6IHJlc3RvcmUgUE9SVENDRkcuMSB0byByZWNvbm5lY3QgVHhEMCB0byBzZXJpYWwgcG9ydAorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlvcmwgYSwgIzB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9kb19icmVha19vbjoKKwk7OyBkbyBicmVhayBvbjogY2xlYXIgUE9SVENDRkcuMCwgc2V0IFR4RCBoaWdoKD8pIChiMSBsb3cpCisJbW92IGRwdHIsIE9VVEMKKwltb3Z4IGEsIEBkcHRyCisJYW5sIGEsICMweGZkCQk7IH4weDAyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlhbmwgYSwgIzB4ZmQJCTsgfjB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9ub3RfMDQ6CisJY2puZSByMiwgIzB4MDUsIHNldHVwX2N0cmxfbm90XzA1CisJOzsgMDUgaXMgc2V0IGRlc2lyZWQgaW50ZXJydXB0IGJpdG1hcC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzA1OgorCWNqbmUgcjIsICMweDA2LCBzZXR1cF9jdHJsX25vdF8wNgorCTs7IDA2IGlzIHF1ZXJ5IHJvb20KKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfY3RybF8wNl9ub3RfMDAKKwk7OyAwNiwgd1ZhbHVlWzBdPTAgaXMgcXVlcnkgd3JpdGVfcm9vbQorCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgk7IG91dC0xLWluID0gMjU1IC0gKGluLW91dCkKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF8wNl9ub3RfMDA6CisJY2puZSByMywgIzB4MDEsIHNldHVwX2N0cmxfMDZfbm90XzAxCisJOzsgMDYsIHdWYWx1ZVswXT0xIGlzIHF1ZXJ5IGNoYXJzX2luX2J1ZmZlcgorCW1vdiBhLCB0eF9yaW5nX2luCisJY2xyIGMKKwlzdWJiIGEsIHR4X3Jpbmdfb3V0CTsgaW4tb3V0CisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfMDZfbm90XzAxOgkKKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wNjoKKwljam5lIHIyLCAjMHgwNywgc2V0dXBfY3RybF9ub3RfMDcKKwk7OyAwNyBpcyByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCByMzsgd1ZhbHVlWzBdIGlzIHRocmVzaG9sZCB2YWx1ZQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfbm90XzA3OgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JtcmVxX3R5cGVfbm90X3ZlbmRvcjoKKwlsam1wIHNldHVwX3N0YWxsCisKKworc2V0dXBfYm1yZXFfaXNfc3RhbmRhcmQ6CQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9icmVxX25vdF8wMAorCTs7IDAwOglHZXRfU3RhdHVzIChzdWItc3dpdGNoIG9uIGJtUmVxdWVzdFR5cGU6IGRldmljZSwgZXAsIGludCkKKwljam5lIHIxLCAjMHg4MCwgc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlCisJOzsgR2V0X1N0YXR1cyhkZXZpY2UpCisJOzsgIGFyZSB3ZSBzZWxmLXBvd2VyZWQ/IG5vLiBjYW4gd2UgZG8gcmVtb3RlIHdha2V1cD8gbm8KKwk7OyAgIHNvIHJldHVybiB0d28gemVybyBieXRlcy4gVGhpcyBpcyByZXVzYWJsZQorc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzOgorCW1vdiBkcHRyLCBJTjBCVUYKKwljbHIgYQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4wQkMKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlOgorCWNqbmUgcjEsICMweDgyLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9lbmRwb2ludAorCTs7IEdldF9TdGF0dXMoZW5kcG9pbnQpCisJOzsgIG11c3QgZ2V0IHN0YWxsIGJpdCBmb3IgZXBbd0luZGV4TF0sIHJldHVybiB0d28gYnl0ZXMsIGJpdCBpbiBsc2IgMAorCTs7IGZvciBub3c6IGNoZWF0LiBUT0RPCisJc2ptcCBzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXMKK3NldHVwX0dldF9TdGF0dXNfbm90X2VuZHBvaW50OgorCWNqbmUgcjEsICMweDgxLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9pbnRlcmZhY2UKKwk7OyBHZXRfU3RhdHVzKGludGVyZmFjZSk6IHJldHVybiB0d28gemVyb3MKKwlzam1wIHNldHVwX3JldHVybl90d29femVyb19ieXRlcworc2V0dXBfR2V0X1N0YXR1c19ub3RfaW50ZXJmYWNlOgkKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMDoKKwljam5lIHIyLCAjMHgwMSwgc2V0dXBfYnJlcV9ub3RfMDEKKwk7OyAwMToJQ2xlYXJfRmVhdHVyZSAoc3ViLXN3aXRjaCBvbiB3VmFsdWVMOiBzdGFsbCwgcmVtb3RlIHdha2V1cCkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGwKKwk7OyBDbGVhcl9GZWF0dXJlKHN0YWxsKS4gc2hvdWxkIGNsZWFyIGEgc3RhbGwgYml0LiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGw6CisJY2puZSByMywgIzB4MDEsIHNldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgQ2xlYXJfRmVhdHVyZShyZW1vdGUgd2FrZXVwKS4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9yd2FrZToKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMToKKwljam5lIHIyLCAjMHgwMywgc2V0dXBfYnJlcV9ub3RfMDMKKwk7OyAwMzoJU2V0X0ZlYXR1cmUgKHN1Yi1zd2l0Y2ggb24gd1ZhbHVlTDogc3RhbGwsIHJlbW90ZSB3YWtldXApCisJY2puZSByMywgIzB4MDAsIHNldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbAorCTs7IFNldF9GZWF0dXJlKHN0YWxsKS4gU2hvdWxkIHNldCBhIHN0YWxsIGJpdC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgU2V0X0ZlYXR1cmUocmVtb3RlIHdha2V1cCkuIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAzOgkKKwljam5lIHIyLCAjMHgwNiwgc2V0dXBfYnJlcV9ub3RfMDYKKwk7OyAwNjoJR2V0X0Rlc2NyaXB0b3IgKHMtc3dpdGNoIG9uIHdWYWx1ZUg6IGRldiwgY29uZmlnW25dLCBzdHJpbmdbbl0pCisJY2puZSByNCwgIzB4MDEsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2UKKwk7OyBHZXRfRGVzY3JpcHRvcihkZXZpY2UpCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgI0hJR0goZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsICNMT1coZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2U6CisJY2puZSByNCwgIzB4MDIsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWcKKwk7OyBHZXRfRGVzY3JpcHRvcihjb25maWdbbl0pCisJY2puZSByMywgIzB4MDAsIHNldHVwX3N0YWxsOyBvbmx5IGhhbmRsZSBuPT0wCisJOzsgR2V0X0Rlc2NyaXB0b3IoY29uZmlnWzBdKQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsICNISUdIKGRlc2NfY29uZmlnMSkKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgI0xPVyhkZXNjX2NvbmZpZzEpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWc6CisJY2puZSByNCwgIzB4MDMsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9zdHJpbmcKKwk7OyBHZXRfRGVzY3JpcHRvcihzdHJpbmdbd1ZhbHVlTF0pCisJOzsgIGlmICh3VmFsdWVMID49IG1heHN0cmluZ3MpIHN0YWxsCisJbW92IGEsICMoKGRlc2Nfc3RyaW5nc19lbmQtZGVzY19zdHJpbmdzKS8yKQorCWNsciBjCisJc3ViYiBhLHIzCQk7IGE9NCwgcjMgPSAwLi4zIC4gaWYgYTw9MCB0aGVuIHN0YWxsCisJamMgIHNldHVwX3N0YWxsCisJanogIHNldHVwX3N0YWxsCisJbW92IGEsIHIzCisJYWRkIGEsIHIzCQk7IGEgPSAyKndWYWx1ZUwKKwltb3YgZHB0ciwgI2Rlc2Nfc3RyaW5ncworCWFkZCBhLCBkcGwKKwltb3YgZHBsLCBhCisJbW92IGEsICMwCisJYWRkYyBhLCBkcGgKKwltb3YgZHBoLCBhCQk7IGRwaCA9IGRlc2Nfc3RyaW5nc1thXS4gYmlnIGVuZGlhbiEgKGhhbmR5KQorCTs7IGl0IGxvb2tzIGxpa2UgbXkgYWRhcHRlciB1c2VzIGEgcmV2aXNpb24gb2YgdGhlIEVaVVNCIHRoYXQKKwk7OyBjb250YWlucyAicmV2IEQgZXJyYXRhIG51bWJlciA4IiwgYXMgaGludGVkIGluIHRoZSBFelVTQiBleGFtcGxlCisJOzsgY29kZS4gSSBjYW5ub3QgZmluZCBhbiBhY3R1YWwgZXJyYXRhIGRlc2NyaXB0aW9uIG9uIHRoZSBDeXByZXNzCisJOzsgd2ViIHNpdGUsIGJ1dCBmcm9tIHRoZSBleGFtcGxlIGNvZGUgaXQgbG9va3MgbGlrZSB0aGlzIGJ1ZyBjYXVzZXMKKwk7OyB0aGUgbGVuZ3RoIG9mIHN0cmluZyBkZXNjcmlwdG9ycyB0byBiZSByZWFkIGluY29ycmVjdGx5LCBwb3NzaWJseQorCTs7IHNlbmRpbmcgYmFjayBtb3JlIGNoYXJhY3RlcnMgdGhhbiB0aGUgZGVzY3JpcHRvciBoYXMuIFRoZSB3b3JrYXJvdW5kCisJOzsgaXMgdG8gbWFudWFsbHkgc2VuZCBvdXQgYWxsIG9mIHRoZSBkYXRhLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90CisJOzsgdXNpbmcgdGhlIHdvcmthcm91bmQgaXMgdGhhdCB0aGUgc3RyaW5ncyBnYXRoZXJlZCBieSB0aGUga2VybmVsCisJOzsgZHJpdmVyIGFyZSB0b28gbG9uZyBhbmQgYXJlIGZpbGxlZCB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgKGluY2x1ZGluZworCTs7IGxlZnRvdmVyIHN0cmluZ3MpLiBXcml0aW5nIHRoaXMgb3V0IGJ5IGhhbmQgaXMgYSBudWlzYW5jZSwgc28gZm9yCisJOzsgbm93IEkgd2lsbCBqdXN0IGxpdmUgd2l0aCB0aGUgYnVnLgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjIsIGEKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCByMQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCByMgorCW1vdnggQGRwdHIsIGEKKwk7OyBkb25lCisJbGptcCBzZXR1cF9kb25lX2FjaworCQorc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X3N0cmluZzoKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wNjoKKwljam5lIHIyLCAjMHgwOCwgc2V0dXBfYnJlcV9ub3RfMDgKKwk7OyBHZXRfQ29uZmlndXJhdGlvbi4gYWx3YXlzIDEuIHJldHVybiBvbmUgYnl0ZS4KKwk7OyB0aGlzIGlzIHJldXNhYmxlCisJbW92IGEsICMxCitzZXR1cF9yZXR1cm5fb25lX2J5dGU6CQorCW1vdiBkcHRyLCBJTjBCVUYKKwltb3Z4IEBkcHRyLCBhCisJbW92IGEsICMxCisJbW92IGRwdHIsIElOMEJDCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzA4OgorCWNqbmUgcjIsICMweDA5LCBzZXR1cF9icmVxX25vdF8wOQorCTs7IDA5OiBTZXRfQ29uZmlndXJhdGlvbi4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wOToKKwljam5lIHIyLCAjMHgwYSwgc2V0dXBfYnJlcV9ub3RfMGEKKwk7OyAwYTogR2V0X0ludGVyZmFjZS4gZ2V0IHRoZSBjdXJyZW50IGFsdHNldHRpbmcgZm9yIGludFt3SW5kZXhMXQorCTs7ICBzaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGludGVyZmFjZSwgaWdub3JlIHdJbmRleEwsIHJldHVybiBhIDAKKwltb3YgYSwgIzAKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfYnJlcV9ub3RfMGE6CisJY2puZSByMiwgIzB4MGIsIHNldHVwX2JyZXFfbm90XzBiCisJOzsgMGI6IFNldF9JbnRlcmZhY2UuIHNldCBhbHRzZXR0aW5nIGZvciBpbnRlcmZhY2Vbd0luZGV4TF0uIGlnbm9yZWQKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wYjoKKwlsam1wIHNldHVwX3N0YWxsCisKKwkJCitzZXR1cF9kb25lX2FjazoJCisJOzsgbm93IGNsZWFyIEhTTkFLCisJbW92IGRwdHIsIEVQMENTCisJbW92IGEsICMweDAyCisJbW92eCBAZHB0ciwgYQorCXNqbXAgc2V0dXBfZG9uZQorc2V0dXBfc3RhbGw6CQorCTs7IHVuaGFuZGxlZC4gU1RBTEwKKwk7RVAwQ1MgfD0gYm1FUFNUQUxMCisJbW92IGRwdHIsIEVQMENTCisJbW92eCBhLCBAZHB0cgorCW9ybCBhLCBFUDBTVEFMTGJpdAorCW1vdnggQGRwdHIsIGEKKwlzam1wIHNldHVwX2RvbmUKKwkKK3NldHVwX2RvbmU6CQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK3NldF9iYXVkOgkJCTsgYmF1ZCBpbmRleCBpbiByMworCTs7IHZlcmlmeSBhIDwgMTAKKwltb3YgYSwgcjMKKwlqYiBBQ0MuNywgc2V0X2JhdWRfX2JhZGJhdWQKKwljbHIgYworCXN1YmIgYSwgIzEwCisJam5jIHNldF9iYXVkX19iYWRiYXVkCisJbW92IGEsIHIzCisJcmwgYQkJCTsgYSA9IGluZGV4KjIKKwlhZGQgYSwgI0xPVyhiYXVkX3RhYmxlKQorCW1vdiBkcGwsIGEKKwltb3YgYSwgI0hJR0goYmF1ZF90YWJsZSkKKwlhZGRjIGEsICMwCisJbW92IGRwaCwgYQorCTs7IFRPRE86IHNodXQgZG93biB4bWl0L3JlY2VpdmUKKwk7OyBUT0RPOiB3YWl0IGZvciBjdXJyZW50IHhtaXQgY2hhciB0byBsZWF2ZQorCTs7IFRPRE86IHNodXQgZG93biB0aW1lciB0byBhdm9pZCBwYXJ0aWFsLWNoYXIgZ2xpdGNoCisJbW92eCBhLEBkcHRyCQk7IEJBVURfSElHSAorCW1vdiBSQ0FQMkgsIGEKKwltb3YgVEgyLCBhCisJaW5jIGRwdHIKKwltb3Z4IGEsQGRwdHIJCTsgQkFVRF9MT1cKKwltb3YgUkNBUDJMLCBhCisJbW92IFRMMiwgYQorCTs7IFRPRE86IHJlc3RhcnQgeG1pdC9yZWNlaXZlCisJOzsgVE9ETzogcmVlbmFibGUgaW50ZXJydXB0cywgcmVzdW1lIHR4IGlmIHBlbmRpbmcKKwljbHIgYwkJCTsgYz0wOiBzdWNjZXNzCisJcmV0CitzZXRfYmF1ZF9fYmFkYmF1ZDoKKwlzZXRiIGMJCQk7IGM9MTogZmFpbHVyZQorCXJldAorCQorOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citjb250cm9sX3BpbnM6CisJY2puZSByMSwgIzB4NDEsIGNvbnRyb2xfcGluc19pbgorY29udHJvbF9waW5zX291dDoKKwkJO1RPRE8gQktQVCBpcyBEVFIKKwltb3YgYSwgcjMgOyB3VmFsdWVbMF0gaG9sZHMgbmV3IGJpdHM6CWI3IGlzIG5ldyBSVFMKKwl4cmwgYSwgIzB4ZmYJCTsgMSBtZWFucyBhY3RpdmUsIDBWLCArMTJWID8KKwlhbmwgYSwgIzB4ODAKKwltb3YgcjMsIGEKKwltb3YgZHB0ciwgT1VUQworCW1vdnggYSwgQGRwdHIJCTsgb25seSBjaGFuZ2UgYml0IDcgCisJYW5sIGEsICMweDdGCQk7IH4weDg0CisJb3JsIGEsIHIzCisJbW92eCBAZHB0ciwgYQkJOyBvdGhlciBwaW5zIGFyZSBpbnB1dHMsIGJpdHMgaWdub3JlZAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK2NvbnRyb2xfcGluc19pbjoKKwltb3YgZHB0ciwgUElOU0MKKwltb3Z4IGEsIEBkcHRyCisJeHJsIGEsICMweGZmCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKKworOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK0lTUl9FcDJpbjoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgSU4wN0lSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDRoCisJbW92eCBAZHB0cixhCisKKwltb3YgYSwgIzB4MjAgICAgICAgICAgICAgOyBUdXJuIG9mZiB0aGUgZ3JlZW4gTEVECisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKworCTs7IGRvIHN0dWZmCisJbGNhbGwgc3RhcnRfaW4KKworCW1vdiBhLCAjMHgyMCAgICAgICAgICAgICA7IFR1cm4gb2ZmIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK0lTUl9FcDJvdXQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKworICAgICAgICBtb3YgYSwgIzB4MTAgICAgICAgICAgICAgOyBUdXJuIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCisKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIE9VVDA3SVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwNGgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGRvIHN0dWZmCisKKwk7OyBjb3B5IGRhdGEgaW50byBidWZmZXIuIGZvciBub3csIGFzc3VtZSB3ZSB3aWxsIGhhdmUgZW5vdWdoIHNwYWNlCisJbW92IGRwdHIsIE9VVDJCQwk7IGdldCBieXRlIGNvdW50CisJbW92eCBhLEBkcHRyCisJbW92IHIxLCBhCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIE9VVDJCVUYJOyBsb2FkIERQVFIwIHdpdGggc291cmNlCisJbW92IGRwaDEsICNISUdIKHR4X3JpbmcpCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdiBkcGwxLCB0eF9yaW5nX2luCitPVVRfbG9vcDoKKwltb3Z4IGEsQGRwdHIJCTsgcmVhZAorCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMTogdGFyZ2V0CisJaW5jIGRwbDEJCTsgdGFyZ2V0ID0gdHhfcmluZ19pbisxCisJbW92eCBAZHB0cixhCQk7IHN0b3JlCisJbW92IGEsZHBsMQorCWNqbmUgYSwgdHhfcmluZ19vdXQsIE9VVF9ub19vdmVyZmxvdworCXNqbXAgT1VUX292ZXJmbG93CitPVVRfbm9fb3ZlcmZsb3c6CQorCWluYyB0eF9yaW5nX2luCQk7IHR4X3JpbmdfaW4rKworCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMDogc291cmNlCisJaW5jIGRwdHIKKwlkam56IHIxLCBPVVRfbG9vcAorCXNqbXAgT1VUX2RvbmUKK09VVF9vdmVyZmxvdzoKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwk7OyBmYWxsIHRocm91Z2gKK09VVF9kb25lOgkKKwk7OyBhY2sKKwltb3YgZHB0cixPVVQyQkMKKwltb3Z4IEBkcHRyLGEKKworCTs7IHN0YXJ0IHR4CisJYWNhbGwgbWF5YmVfc3RhcnRfdHgKKwk7YWNhbGwgZHVtcF9zdGF0CisKKyAgICAgICAgbW92IGEsICMweDIwICAgICAgICAgICAgIDsgVHVybiBvZmYgdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitkdW1wX3N0YXQ6CisJOzsgZmlsbCBpbiBFUDRpbiB3aXRoIGEgZGVidWdnaW5nIG1lc3NhZ2U6CisJOzsgICB0eF9yaW5nX2luLCB0eF9yaW5nX291dCwgcnhfcmluZ19pbiwgcnhfcmluZ19vdXQKKwk7OyAgIHR4X2FjdGl2ZQorCTs7ICAgdHhfcmluZ1swLi4xNV0KKwk7OyAgIDB4ZmMKKwk7OyAgIHJ4X3JpbmdbMC4uMTVdCisJY2xyIGEKKwltb3YgZHBzLCBhCisJCisJbW92IGRwdHIsIElONENTCisJbW92eCBhLCBAZHB0cgorCWpiIGFjYy4xLCBkdW1wX3N0YXRfX2RvbmU7IGJ1c3k6IGNhbm5vdCBkdW1wLCBvbGQgb25lIHN0aWxsIHBlbmRpbmcKKwltb3YgZHB0ciwgSU40QlVGCisJCisJbW92IGEsIHR4X3JpbmdfaW4KKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgdHhfcmluZ19vdXQKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKworCW1vdiBhLCByeF9yaW5nX2luCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsIHJ4X3Jpbmdfb3V0CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJCisJY2xyIGEKKwlqbmIgVFhfUlVOTklORywgZHVtcF9zdGF0X19ub190eF9ydW5uaW5nCisJaW5jIGEKK2R1bXBfc3RhdF9fbm9fdHhfcnVubmluZzoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwk7OyB0eF9yaW5nWzAuLjE1XQorCWluYyBkcHMKKwltb3YgZHB0ciwgI3R4X3JpbmcJOyBEUFRSMTogc291cmNlCisJbW92IHIxLCAjMTYKK2R1bXBfc3RhdF9fdHhfcmluZ19sb29wOgorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJZGpueiByMSwgZHVtcF9zdGF0X190eF9yaW5nX2xvb3AKKwlpbmMgZHBzCisJCisJbW92IGEsICMweGZjCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJCisJOzsgcnhfcmluZ1swLi4xNV0KKwlpbmMgZHBzCisJbW92IGRwdHIsICNyeF9yaW5nCTsgRFBUUjE6IHNvdXJjZQorCW1vdiByMSwgIzE2CitkdW1wX3N0YXRfX3J4X3JpbmdfbG9vcDoKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJaW5jIGRwcworCWRqbnogcjEsIGR1bXBfc3RhdF9fcnhfcmluZ19sb29wCisJCisJOzsgbm93IHNlbmQgaXQKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgSU40QkMKKwltb3YgYSwgIzM4CisJbW92eCBAZHB0ciwgYQorZHVtcF9zdGF0X19kb25lOgkKKwlyZXQKKwkJCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCittYXliZV9zdGFydF90eDoKKwk7OyBtYWtlIHN1cmUgdGhlIHR4IHByb2Nlc3MgaXMgcnVubmluZy4KKwlqYiBUWF9SVU5OSU5HLCBzdGFydF90eF9kb25lCitzdGFydF90eDoKKwk7OyBpcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/CisJbW92IGEsIHR4X3JpbmdfaW4KKwljam5lIGEsdHhfcmluZ19vdXQsIHN0YXJ0X3R4X193b3JrCisJcmV0CQkJOyBubyB3b3JrCitzdGFydF90eF9fd29yazoJCisJOzsgdHggd2FzIG5vdCBydW5uaW5nLiBzZW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHNldHVwIHRoZSBUSSBpbnQKKwlpbmMgdHhfcmluZ19vdXQJCTsgWysrdHhfcmluZ19vdXRdCisJbW92IGRwaCwgI0hJR0godHhfcmluZykKKwltb3YgZHBsLCB0eF9yaW5nX291dAorCW1vdnggYSwgQGRwdHIKKwltb3Ygc2J1ZiwgYQorCXNldGIgVFhfUlVOTklORworc3RhcnRfdHhfZG9uZToKKwk7OyBjYW4gd2UgdW50aHJvdHRsZSB0aGUgaG9zdCB0eCBwcm9jZXNzPworCTs7ICBzdGVwIDE6IGRvIHdlIGNhcmU/CisJbW92IGEsICMwCisJY2puZSBhLCB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgc3RhcnRfdHhfX21heWJlX3VudGhyb3R0bGVfdHgKKwk7OyBub3BlCitzdGFydF90eF9yZWFsbHlfZG9uZToKKwlyZXQKK3N0YXJ0X3R4X19tYXliZV91bnRocm90dGxlX3R4OgorCTs7ICBzdGVwIDI6IGlzIHRoZXJlIG5vdyByb29tPworCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgorCTs7IGEgaXMgbm93IHdyaXRlX3Jvb20uIElmIHRocmVzaCA+PSBhLCB3ZSBjYW4gdW50aHJvdHRsZQorCWNsciBjCisJc3ViYiBhLCB0eF91bnRocm90dGxlX3RocmVzaG9sZAorCWpjIHN0YXJ0X3R4X3JlYWxseV9kb25lCTsgbm9wZQorCTs7IHllcywgd2UgY2FuIHVudGhyb3R0bGUuIHJlbW92ZSB0aGUgdGhyZXNob2xkIGFuZCBtYXJrIGEgcmVxdWVzdAorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgIzAKKwlzZXRiIERPX1RYX1VOVEhST1RUTEUKKwk7OyBwcm9kIHJ4LCB3aGljaCB3aWxsIGFjdHVhbGx5IHNlbmQgdGhlIG1lc3NhZ2Ugd2hlbiBpbjIgYmVjb21lcyBmcmVlCisJbGptcCBzdGFydF9pbgorCQorCitzZXJpYWxfaW50OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJam5iIFRJLCBzZXJpYWxfaW50X19ub3RfdHgKKwk7OyB0eCBmaW5pc2hlZC4gc2VuZCBhbm90aGVyIGNoYXJhY3RlciBpZiB3ZSBoYXZlIG9uZQorCWNsciBUSQkJCTsgY2xlYXIgaW50CisJY2xyIFRYX1JVTk5JTkcKKwlsY2FsbCBzdGFydF90eAorc2VyaWFsX2ludF9fbm90X3R4OgorCWpuYiBSSSwgc2VyaWFsX2ludF9fbm90X3J4CisJbGNhbGwgZ2V0X3J4X2NoYXIKKwljbHIgUkkJCQk7IGNsZWFyIGludAorc2VyaWFsX2ludF9fbm90X3J4OgkKKwk7OyByZXR1cm4KKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworZ2V0X3J4X2NoYXI6CisJbW92IGRwaCwgI0hJR0gocnhfcmluZykKKwltb3YgZHBsLCByeF9yaW5nX2luCisJaW5jIGRwbAkJCTsgdGFyZ2V0ID0gcnhfcmluZ19pbisxCisJbW92IGEsIHNidWYKKwltb3Z4IEBkcHRyLCBhCisJOzsgY2hlY2sgZm9yIG92ZXJmbG93IGJlZm9yZSBpbmNyZW1lbnRpbmcgcnhfcmluZ19pbgorCW1vdiBhLCBkcGwKKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBnZXRfcnhfY2hhcl9fbm9fb3ZlcmZsb3cKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwlyZXQKK2dldF9yeF9jaGFyX19ub19vdmVyZmxvdzoJCisJaW5jIHJ4X3JpbmdfaW4KKwk7OyBraWNrIG9mZiBVU0IgSU5waXBlCisJYWNhbGwgc3RhcnRfaW4KKwlyZXQKKworc3RhcnRfaW46CisJOzsgY2hlY2sgaWYgdGhlIGlucGlwZSBpcyBhbHJlYWR5IHJ1bm5pbmcuCisJbW92ICBhLCMweDEwCisJbW92IGRwdHIsIE9FQQorCW1vdnggQGRwdHIsYQorCisJbW92IGRwdHIsIElOMkNTCisJbW92eCBhLCBAZHB0cgorCWpiIGFjYy4xLCBzdGFydF9pbl9fZG9uZTsgaW50IHdpbGwgaGFuZGxlIGl0CisJamIgRE9fVFhfVU5USFJPVFRMRSwgc3RhcnRfaW5fX2RvX3R4X3VudGhyb3R0bGUKKwk7OyBzZWUgaWYgdGhlcmUgaXMgYW55IHdvcmsgdG8gZG8uIGEgc2VyaWFsIGludGVycnVwdCBtaWdodCBvY2N1cgorCTs7IGR1cmluZyB0aGlzIHNlcXVlbmNlPworCW1vdiBhLCByeF9yaW5nX2luCisJY2puZSBhLCByeF9yaW5nX291dCwgc3RhcnRfaW5fX2hhdmVfd29yaworCXJldAkJCTsgbm9wZQorc3RhcnRfaW5fX2hhdmVfd29yazoJCisJOzsgbm93IGNvcHkgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlIGludG8gdGhlIHBpcGUuIDYzIGJ5dGVzIG1heC4KKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHBoLCAjSElHSChyeF9yaW5nKQk7IGxvYWQgRFBUUjAgd2l0aCBzb3VyY2UKKwlpbmMgZHBzCisJbW92IGRwdHIsIElOMkJVRgk7IGxvYWQgRFBUUjEgd2l0aCB0YXJnZXQKKwltb3Z4IEBkcHRyLCBhCQk7IGluWzBdIHNpZ25hbHMgdGhhdCByZXN0IG9mIElOIGlzIHJ4IGRhdGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwk7OyBsb29wIHVudGlsIHdlIHJ1biBvdXQgb2YgZGF0YSwgb3Igd2UgaGF2ZSBjb3BpZWQgNjQgYnl0ZXMKKwltb3YgcjEsICMxCQk7IElOYnVmIHNpemUgY291bnRlcgorc3RhcnRfaW5fX2xvb3A6CisJbW92IGEsIHJ4X3JpbmdfaW4KKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBzdGFydF9pbmxvY2FsX2lycV9lbmFibGVsbF9jb3B5aW5nCisJc2ptcCBzdGFydF9pbl9fa2ljaworc3RhcnRfaW5sb2NhbF9pcnFfZW5hYmxlbGxfY29weWluZzoKKwlpbmMgcnhfcmluZ19vdXQKKwltb3YgZHBsLCByeF9yaW5nX291dAorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQkJOyB3cml0ZSBpbnRvIElOIGJ1ZmZlcgorCWluYyBkcHRyCisJaW5jIGRwcworCWluYyByMQorCWNqbmUgcjEsICM2NCwgc3RhcnRfaW5fX2xvb3A7IGxvb3AKK3N0YXJ0X2luX19raWNrOgorCTs7IGVpdGhlciB3ZSByYW4gb3V0IG9mIGRhdGEsIG9yIHdlIGNvcGllZCA2NCBieXRlcy4gcjEgaGFzIGJ5dGUgY291bnQKKwk7OyBraWNrIG9mZiBJTgorCW1vdiBhLCAjMHgxMCAgICAgICAgICAgICA7IFR1cm4gdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBJTjJCQworCW1vdiBhLCByMQorCWp6IHN0YXJ0X2luX19kb25lCisJbW92eCBAZHB0ciwgYQorCTs7IGRvbmUKK3N0YXJ0X2luX19kb25lOgorCTthY2FsbCBkdW1wX3N0YXQKKwlyZXQKK3N0YXJ0X2luX19kb190eF91bnRocm90dGxlOgorCTs7IHNwZWNpYWwgc2VxdWVuY2U6IHNlbmQgYSB0eCB1bnRocm90dGxlIG1lc3NhZ2UKKwljbHIgRE9fVFhfVU5USFJPVFRMRQorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBJTjJCVUYKKwltb3YgYSwgIzEKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIElOMkJDCisJbW92eCBAZHB0ciwgYQorCXJldAorCQorcHV0Y2hhcjoKKwljbHIgVEkKKwltb3YgU0JVRiwgYQorcHV0Y2hhcl93YWl0OgorCWpuYiBUSSwgcHV0Y2hhcl93YWl0CisJY2xyIFRJCisJcmV0CisKKwkKK2JhdWRfdGFibGU6CQkJOyBiYXVkX2hpZ2gsIHRoZW4gYmF1ZF9sb3cKKwk7OyBiYXVkWzBdOiAxMTAKKwkuYnl0ZSBCQVVEX0hJR0goMTEwKQorCS5ieXRlIEJBVURfTE9XKDExMCkKKwk7OyBiYXVkWzFdOiAzMDAKKwkuYnl0ZSBCQVVEX0hJR0goMzAwKQorCS5ieXRlIEJBVURfTE9XKDMwMCkKKwk7OyBiYXVkWzJdOiAxMjAwCisJLmJ5dGUgQkFVRF9ISUdIKDEyMDApCisJLmJ5dGUgQkFVRF9MT1coMTIwMCkKKwk7OyBiYXVkWzNdOiAyNDAwCisJLmJ5dGUgQkFVRF9ISUdIKDI0MDApCisJLmJ5dGUgQkFVRF9MT1coMjQwMCkKKwk7OyBiYXVkWzRdOiA0ODAwCisJLmJ5dGUgQkFVRF9ISUdIKDQ4MDApCisJLmJ5dGUgQkFVRF9MT1coNDgwMCkKKwk7OyBiYXVkWzVdOiA5NjAwCisJLmJ5dGUgQkFVRF9ISUdIKDk2MDApCisJLmJ5dGUgQkFVRF9MT1coOTYwMCkKKwk7OyBiYXVkWzZdOiAxOTIwMAorCS5ieXRlIEJBVURfSElHSCgxOTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxOTIwMCkKKwk7OyBiYXVkWzddOiAzODQwMAorCS5ieXRlIEJBVURfSElHSCgzODQwMCkKKwkuYnl0ZSBCQVVEX0xPVygzODQwMCkKKwk7OyBiYXVkWzhdOiA1NzYwMAorCS5ieXRlIEJBVURfSElHSCg1NzYwMCkKKwkuYnl0ZSBCQVVEX0xPVyg1NzYwMCkKKwk7OyBiYXVkWzldOiAxMTUyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTE1MjAwKQorCS5ieXRlIEJBVURfTE9XKDExNTIwMCkKKworZGVzY19kZXZpY2U6CisJLmJ5dGUgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MAorCS5ieXRlIDB4Y2QsIDB4MDYsIDB4MDQsIDB4MDEsIDB4ODksIDB4YWIsIDEsIDIsIDMsIDB4MDEKKzs7OyBUaGUgInJlYWwiIGRldmljZSBpZCwgd2hpY2ggbXVzdCBtYXRjaCB0aGUgaG9zdCBkcml2ZXIsIGlzIHRoYXQKKzs7OyAiMHhjZCAweDA2IDB4MDQgMHgwMSIgc2VxdWVuY2UsIHdoaWNoIGlzIDB4MDZjZCwgMHgwMTA0CisJCitkZXNjX2NvbmZpZzE6CisJLmJ5dGUgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMgorCS5ieXRlIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKKwkuYnl0ZSAweDA3LCAweDA1LCAweDgyLCAweDAzLCAweDQwLCAweDAwLCAweDAxCisJLmJ5dGUgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMAorCitkZXNjX3N0cmluZ3M6CisJLndvcmQgc3RyaW5nX2xhbmdpZHMsIHN0cmluZ19tZmcsIHN0cmluZ19wcm9kdWN0LCBzdHJpbmdfc2VyaWFsCitkZXNjX3N0cmluZ3NfZW5kOgorCitzdHJpbmdfbGFuZ2lkczoJLmJ5dGUgc3RyaW5nX2xhbmdpZHNfZW5kLXN0cmluZ19sYW5naWRzCisJLmJ5dGUgMworCS53b3JkIDAKK3N0cmluZ19sYW5naWRzX2VuZDoKKworCTs7IHNpZ2guIFRoZXNlIHN0cmluZ3MgYXJlIFVuaWNvZGUsIG1lYW5pbmcgVVRGMTY/IDIgYnl0ZXMgZWFjaC4gTm93CisJOzsgKnRoYXQqIGlzIGEgcGFpbiBpbiB0aGUgYXNzIHRvIGVuY29kZS4gQW5kIHRoZXkgYXJlIGxpdHRsZS1lbmRpYW4KKwk7OyB0b28uIFVzZSB0aGlzIHBlcmwgc25pcHBldCB0byBnZXQgdGhlIGJ5dGVjb2RlczoKKwkvKiB3aGlsZSAoPD4pIHsKKwkgICAgQGMgPSBzcGxpdCgvLyk7CisJICAgIGZvcmVhY2ggJGMgKEBjKSB7CisJICAgICBwcmludGYoIjB4JTAyeCwgMHgwMCwgIiwgb3JkKCRjKSk7CisJICAgIH0KKwkgICB9CisJKi8KKworc3RyaW5nX21mZzoJLmJ5dGUgc3RyaW5nX21mZ19lbmQtc3RyaW5nX21mZworCS5ieXRlIDMKKzsJLmJ5dGUgIkFDTUUgdXNiIHdpZGdldHMiCisJLmJ5dGUgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MywgMHgwMAorc3RyaW5nX21mZ19lbmQ6CisJCitzdHJpbmdfcHJvZHVjdDoJLmJ5dGUgc3RyaW5nX3Byb2R1Y3RfZW5kLXN0cmluZ19wcm9kdWN0CisJLmJ5dGUgMworOwkuYnl0ZSAiQUNNRSBVU0Igc2VyaWFsIHdpZGdldCIKKwkuYnl0ZSAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDczLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwLCAweDY0LCAweDAwLCAweDY3LCAweDAwLCAweDY1LCAweDAwLCAweDc0LCAweDAwCitzdHJpbmdfcHJvZHVjdF9lbmQ6CisJCitzdHJpbmdfc2VyaWFsOgkuYnl0ZSBzdHJpbmdfc2VyaWFsX2VuZC1zdHJpbmdfc2VyaWFsCisJLmJ5dGUgMworOwkuYnl0ZSAiNDciCisJLmJ5dGUgMHgzNCwgMHgwMCwgMHgzNywgMHgwMAorc3RyaW5nX3NlcmlhbF9lbmQ6CisJCQorOzs7IHJpbmcgYnVmZmVyIG1lbW9yeQorCTs7IHR4X3JpbmdfaW4rMSBpcyB3aGVyZSB0aGUgbmV4dCBpbnB1dCBieXRlIHdpbGwgZ28KKwk7OyBbdHhfcmluZ19vdXRdIGhhcyBiZWVuIHNlbnQKKwk7OyBpZiB0eF9yaW5nX2luID09IHR4X3Jpbmdfb3V0LCB0aGVyZXMgbm8gd29yayB0byBkbworCTs7IHRoZXJlIGFyZSAodHhfcmluZ19pbiAtIHR4X3Jpbmdfb3V0KSBjaGFycyB0byBiZSB3cml0dGVuCisJOzsgZG9udCBsZXQgX2luIGxhcCBfb3V0CisJOzsgICBjYW5ub3QgaW5jIGlmIHR4X3JpbmdfaW4rMSA9PSB0eF9yaW5nX291dAorCTs7ICB3cml0ZSBbdHhfcmluZ19pbisxXSB0aGVuIHR4X3JpbmdfaW4rKworCTs7ICAgaWYgKHR4X3JpbmdfaW4rMSA9PSB0eF9yaW5nX291dCksIG92ZXJmbG93CisJOzsgICBlbHNlIHR4X3JpbmdfaW4rKworCTs7ICByZWFkL3NlbmQgW3R4X3Jpbmdfb3V0KzFdLCB0aGVuIHR4X3Jpbmdfb3V0KysKKworCTs7IHJ4X3JpbmdfaW4gd29ya3MgdGhlIHNhbWUgd2F5CisJCisJLm9yZyAweDEwMDAKK3R4X3Jpbmc6CisJLnNraXAgMHgxMDAJCTsgMjU2IGJ5dGVzCityeF9yaW5nOgorCS5za2lwIDB4MTAwCQk7IDI1NiBieXRlcworCQorCQorCS5FTkQKKwkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC94aXJjb21fcGdzX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bnc19mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjc0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bnc19mdy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogVVNCIFhpcmNvbSBQR1MgRmlybXdhcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgQnJpYW4gV2FybmVyICAgICAgICA8d2FybmVyQGxvdGhhci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQ3Jpc3RpYW4gTS4gQ3JhY2l1bmVzY3UJPGNyaXN0aUBkbnQucm8+CisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEdlbmVyYXRlZCBmcm9tIHhpcmNvbV9wZ3MuUyBieSBlenVzYl9jb252ZXJ0X3gucGwKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgeGlyY29tX3Bnc19maXJtd2FyZVtdID0geworeyAweDAwMDAsCTMsCXsweDAyLCAweDAyLCAweDAwfSB9LAoreyAweDAwMjMsCTQsCXsweDAyLCAweDA1LCAweDliLCAweDAwfSB9LAoreyAweDAwMzAsCTUsCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDAwNDMsCTQsCXsweDAyLCAweDAxLCAweDAwLCAweDAwfSB9LAoreyAweDAxMDAsCTE2LAl7MHgwMiwgMHgwMiwgMHhiYSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMTEwLAkxNiwJezB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDEyMCwJMTYsCXsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDg1LCAweDAwLCAweDAyLCAweDA0LCAweGI5LCAweDAwfSB9LAoreyAweDAyMDAsCTE2LAl7MHg3NSwgMHg4MSwgMHg1ZSwgMHhlNCwgMHhmNSwgMHgzMiwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzNCwgMHhjMiwgMHgwMH0gfSwKK3sgMHgwMjEwLAkxNiwJezB4YzIsIDB4MDEsIDB4YTksIDB4MDAsIDB4NzQsIDB4ZmUsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZDksIDB4ZmMsIDB4NzQsIDB4ZmQsIDB4OTB9IH0sCit7IDB4MDIyMCwJMTYsCXsweDExLCAweDAwLCAweGYwLCAweGEzLCAweGQ5LCAweGZjLCAweDkwLCAweDdmLCAweDk0LCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweDc0fSB9LAoreyAweDAyMzAsCTE2LAl7MHhlZiwgMHhmMCwgMHg3NCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg3NCwgMHg0MH0gfSwKK3sgMHgwMjQwLAkxNiwJezB4OTAsIDB4N2YsIDB4OWQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4NzQsIDB4ODIsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZjB9IH0sCit7IDB4MDI1MCwJMTYsCXsweDkwLCAweDdmLCAweDk1LCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweGQyLCAweGUwLCAweGYwLCAweDc0LCAweDAxLCAweDkwfSB9LAoreyAweDAyNjAsCTE2LAl7MHg3ZiwgMHhhYiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHg3NCwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZH0gfSwKK3sgMHgwMjcwLAkxNiwJezB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4NzQsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZjAsIDB4NzQsIDB4MjAsIDB4OTB9IH0sCit7IDB4MDI4MCwJMTYsCXsweDdmLCAweDljLCAweGYwLCAweDc0LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDc0LCAweDUzLCAweGY1LCAweDk4LCAweDc1LCAweGM4LCAweDMwfSB9LAoreyAweDAyOTAsCTE2LAl7MHg3YiwgMHgwNSwgMHg5MSwgMHg0NCwgMHhkMiwgMHhjYSwgMHg3NSwgMHg5OCwgMHg1MCwgMHhkMiwgMHhlOCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhhYywgMHg3NH0gfSwKK3sgMHgwMmEwLAkxNiwJezB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4NzksIDB4MmUsIDB4N2EsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ZGJ9IH0sCit7IDB4MDJiMCwJMTYsCXsweGZlLCAweGRhLCAweGZhLCAweGQ5LCAweGY2LCAweDc0LCAweDA2LCAweGYwLCAweDgwLCAweGZlLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzfSB9LAoreyAweDAyYzAsCTE2LAl7MHhjMCwgMHg4NCwgMHhjMCwgMHg4NSwgMHhjMCwgMHhlMCwgMHhlNSwgMHg5MSwgMHhjMiwgMHhlNCwgMHhmNSwgMHg5MSwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NH0gfSwKK3sgMHgwMmQwLAkxNiwJezB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4YTMsIDB4ZTAsIDB4ZmIsIDB4YTMsIDB4ZTAsIDB4ZmN9IH0sCit7IDB4MDJlMCwJMTYsCXsweGU5LCAweDU0LCAweDYwLCAweGI0LCAweDAwLCAweDAzLCAweDAyLCAweDAzLCAweDVkLCAweGI0LCAweDQwLCAweDZlLCAweGJhLCAweDAwLCAweDBiLCAweDEyfSB9LAoreyAweDAyZjAsCTE2LAl7MHgwNCwgMHg0NCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNCwgMHgyNiwgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYSwgMHgwMSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZX0gfSwKK3sgMHgwMzAwLAkxNiwJezB4YmEsIDB4MDIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NjgsIDB4YmEsIDB4MDQsIDB4MWUsIDB4YmJ9IH0sCit7IDB4MDMxMCwJMTYsCXsweDAwLCAweDBhLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDAyLCAweDA0LCAweDI2LCAweDkwLCAweDdmLCAweDk4LCAweGUwfSB9LAoreyAweDAzMjAsCTE2LAl7MHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYSwgMHgwNSwgMHgwM30gfSwKK3sgMHgwMzMwLAkxNiwJezB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDYsIDB4MTksIDB4YmIsIDB4MDAsIDB4MDgsIDB4ZTUsIDB4MzMsIDB4ZDMsIDB4OTUsIDB4MzIsIDB4MDIsIDB4MDR9IH0sCit7IDB4MDM0MCwJMTYsCXsweDAyLCAweGJiLCAweDAxLCAweDA4LCAweGU1LCAweDMyLCAweGMzLCAweDk1LCAweDMzLCAweDAyLCAweDA0LCAweDAyLCAweDAyLCAweDA0LCAweDJlLCAweGJhfSB9LAoreyAweDAzNTAsCTE2LAl7MHgwNywgMHgwNSwgMHg4YiwgMHgzNCwgMHgwMiwgMHgwNCwgMHgyNiwgMHgwMiwgMHgwNCwgMHgyZSwgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYSwgMHgwMCwgMHgyMH0gfSwKK3sgMHgwMzYwLAkxNiwJezB4YjksIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjB9IH0sCit7IDB4MDM3MCwJMTYsCXsweDAyLCAweDA0LCAweDI2LCAweGI5LCAweDgyLCAweDAyLCAweDgwLCAweGViLCAweGI5LCAweDgxLCAweDAyLCAweDgwLCAweGU2LCAweDAyLCAweDA0LCAweDJlfSB9LAoreyAweDAzODAsCTE2LAl7MHhiYSwgMHgwMSwgMHgwZiwgMHhiYiwgMHgwMCwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYiwgMHgwMSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyNiwgMHgwMn0gfSwKK3sgMHgwMzkwLAkxNiwJezB4MDQsIDB4MmUsIDB4YmEsIDB4MDMsIDB4MGYsIDB4YmIsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmIsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDR9IH0sCit7IDB4MDNhMCwJMTYsCXsweDI2LCAweDAyLCAweDA0LCAweDJlLCAweGJhLCAweDA2LCAweDU2LCAweGJjLCAweDAxLCAweDBmLCAweDkwLCAweDdmLCAweGQ0LCAweDc0LCAweDA2LCAweGYwfSB9LAoreyAweDAzYjAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNSwgMHg3NCwgMHg1YSwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYywgMHgwMiwgMHgxMiwgMHhiYiwgMHgwMCwgMHg2ZiwgMHg5MH0gfSwKK3sgMHgwM2MwLAkxNiwJezB4N2YsIDB4ZDQsIDB4NzQsIDB4MDYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4NzQsIDB4NmMsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4YmMsIDB4MDN9IH0sCit7IDB4MDNkMCwJMTYsCXsweDI5LCAweDc0LCAweDA0LCAweGMzLCAweDliLCAweDQwLCAweDU3LCAweDYwLCAweDU1LCAweGViLCAweDJiLCAweDkwLCAweDA2LCAweDhjLCAweDI1LCAweDgyfSB9LAoreyAweDAzZTAsCTE2LAl7MHhmNSwgMHg4MiwgMHg3NCwgMHgwMCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHhmOSwgMHhhMywgMHhlMCwgMHhmYSwgMHg5MCwgMHg3ZiwgMHhkNH0gfSwKK3sgMHgwM2YwLAkxNiwJezB4ZTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZWEsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDgsIDB4MGZ9IH0sCit7IDB4MDQwMCwJMTYsCXsweDc0LCAweDAxLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweDc0LCAweDAxLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDA0LCAweDI2LCAweGJhfSB9LAoreyAweDA0MTAsCTE2LAl7MHgwOSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYSwgMHgwYSwgMHgwNSwgMHg3NCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhiYSwgMHgwYiwgMHgwM30gfSwKK3sgMHgwNDIwLAkxNiwJezB4MDIsIDB4MDQsIDB4MjYsIDB4MDIsIDB4MDQsIDB4MmUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDksIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDQzMCwJMTYsCXsweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDAwLCAweGQwLCAweGUwLCAweGQwLCAweDg1LCAweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwfSB9LAoreyAweDA0NDAsCTE2LAl7MHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHhlYiwgMHgyMCwgMHhlNywgMHgxZSwgMHhjMywgMHg5NCwgMHgwYSwgMHg1MCwgMHgxOSwgMHhlYiwgMHgyMywgMHgyNH0gfSwKK3sgMHgwNDUwLAkxNiwJezB4NDYsIDB4ZjUsIDB4ODIsIDB4NzQsIDB4MDYsIDB4MzQsIDB4MDAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4Y2IsIDB4ZjUsIDB4Y2QsIDB4YTMsIDB4ZTB9IH0sCit7IDB4MDQ2MCwJMTYsCXsweGY1LCAweGNhLCAweGY1LCAweGNjLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAweGI5LCAweDQxLCAweDExLCAweGViLCAweDY0LCAweGZmLCAweDU0LCAweDgwfSB9LAoreyAweDA0NzAsCTE2LAl7MHhmYiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg0YiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMH0gfSwKK3sgMHgwNDgwLAkxNiwJezB4NjQsIDB4ZmYsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODUsIDB4YzB9IH0sCit7IDB4MDQ5MCwJMTYsCXsweGUwLCAweGU1LCAweDkxLCAweGMyLCAweGU0LCAweGY1LCAweDkxLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDA0LCAweGYwLCAweDc0LCAweDIwLCAweDkwfSB9LAoreyAweDA0YTAsCTE2LAl7MHg3ZiwgMHg5YywgMHhmMCwgMHgxMiwgMHgwNSwgMHhkYywgMHg3NCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NX0gfSwKK3sgMHgwNGIwLAkxNiwJezB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzB9IH0sCit7IDB4MDRjMCwJMTYsCXsweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweDc0LCAweDEwLCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweGU1LCAweDkxLCAweGMyLCAweGU0LCAweGY1fSB9LAoreyAweDA0ZDAsCTE2LAl7MHg5MSwgMHg5MCwgMHg3ZiwgMHhhYSwgMHg3NCwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmOSwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MH0gfSwKK3sgMHgwNGUwLAkxNiwJezB4N2QsIDB4YzAsIDB4NzUsIDB4ODUsIDB4MTAsIDB4ODUsIDB4MzIsIDB4ODQsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4MDUsIDB4ODQsIDB4ZjAsIDB4ZTUsIDB4ODR9IH0sCit7IDB4MDRmMCwJMTYsCXsweGI1LCAweDMzLCAweDAyLCAweDgwLCAweDA5LCAweDA1LCAweDMyLCAweDA1LCAweDg2LCAweGEzLCAweGQ5LCAweGVjLCAweDgwLCAweDAwLCAweDkwLCAweDdmfSB9LAoreyAweDA1MDAsCTE2LAl7MHhjOSwgMHhmMCwgMHhiMSwgMHg2ZCwgMHg3NCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4NH0gfSwKK3sgMHgwNTEwLAkxNiwJezB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTF9IH0sCit7IDB4MDUyMCwJMTYsCXsweDRiLCAweDkwLCAweDdkLCAweDAwLCAweGU1LCAweDMyLCAweGYwLCAweGEzLCAweGU1LCAweDMzLCAweGYwLCAweGEzLCAweGU1LCAweDMwLCAweGYwLCAweGEzfSB9LAoreyAweDA1MzAsCTE2LAl7MHhlNSwgMHgzMSwgMHhmMCwgMHhhMywgMHhlNCwgMHgzMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHg5MCwgMHgxMCwgMHgwMH0gfSwKK3sgMHgwNTQwLAkxNiwJezB4NzksIDB4MTAsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZDksIDB4ZjYsIDB4MDUsIDB4ODYsIDB4NzQsIDB4ZmN9IH0sCit7IDB4MDU1MCwJMTYsCXsweGYwLCAweGEzLCAweDA1LCAweDg2LCAweDkwLCAweDExLCAweDAwLCAweDc5LCAweDEwLCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1fSB9LAoreyAweDA1NjAsCTE2LAl7MHg4NiwgMHhkOSwgMHhmNiwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHg3NCwgMHgyNiwgMHhmMCwgMHgyMiwgMHgyMCwgMHgwMCwgMHgxM30gfSwKK3sgMHgwNTcwLAkxNiwJezB4ZTUsIDB4MzIsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MjIsIDB4MDUsIDB4MzMsIDB4NzUsIDB4ODMsIDB4MTAsIDB4ODUsIDB4MzMsIDB4ODIsIDB4ZTAsIDB4ZjV9IH0sCit7IDB4MDU4MCwJMTYsCXsweDk5LCAweGQyLCAweDAwLCAweDc0LCAweDAwLCAweGI1LCAweDM0LCAweDAxLCAweDIyLCAweGU1LCAweDMzLCAweGQzLCAweDk1LCAweDMyLCAweGMzLCAweDk1fSB9LAoreyAweDA1OTAsCTE2LAl7MHgzNCwgMHg0MCwgMHhmNSwgMHg3NSwgMHgzNCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMiwgMHgwNSwgMHhkYywgMHhjMCwgMHg4NiwgMHhjMCwgMHg4MiwgMHhjMH0gfSwKK3sgMHgwNWEwLAkxNiwJezB4ODMsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ZTAsIDB4MzAsIDB4OTksIDB4MDcsIDB4YzIsIDB4OTksIDB4YzIsIDB4MDAsIDB4MTIsIDB4MDV9IH0sCit7IDB4MDViMCwJMTYsCXsweDcwLCAweDMwLCAweDk4LCAweDA1LCAweDEyLCAweDA1LCAweGM2LCAweGMyLCAweDk4LCAweGQwLCAweGUwLCAweGQwLCAweDg1LCAweGQwLCAweDg0LCAweGQwfSB9LAoreyAweDA1YzAsCTE2LAl7MHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHg3NSwgMHg4MywgMHgxMSwgMHg4NSwgMHgzMCwgMHg4MiwgMHgwNSwgMHg4MiwgMHhlNSwgMHg5OX0gfSwKK3sgMHgwNWQwLAkxNiwJezB4ZjAsIDB4ZTUsIDB4ODIsIDB4YjUsIDB4MzEsIDB4MDEsIDB4MjIsIDB4MDUsIDB4MzAsIDB4YjEsIDB4ZGMsIDB4MjIsIDB4NzQsIDB4MTAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDVlMCwJMTYsCXsweDljLCAweGYwLCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDNlLCAweDIwLCAweDAxLCAweDNjLCAweGU1LCAweDMwLCAweGI1LCAweDMxfSB9LAoreyAweDA1ZjAsCTE2LAl7MHgwMSwgMHgyMiwgMHhlNCwgMHhmNSwgMHg4NiwgMHg3NSwgMHg4MywgMHgxMSwgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZSwgMHgwMCwgMHhmMCwgMHhhMywgMHgwNX0gfSwKK3sgMHgwNjAwLAkxNiwJezB4ODYsIDB4NzksIDB4MDEsIDB4ZTUsIDB4MzAsIDB4YjUsIDB4MzEsIDB4MDIsIDB4ODAsIDB4MTAsIDB4MDUsIDB4MzEsIDB4ODUsIDB4MzEsIDB4ODIsIDB4ZTB9IH0sCit7IDB4MDYxMCwJMTYsCXsweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweDA5LCAweGI5LCAweDQwLCAweGU5LCAweDc0LCAweDEwLCAweDkwLCAweDdmLCAweDljLCAweGYwfSB9LAoreyAweDA2MjAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiOSwgMHhlOSwgMHg2MCwgMHgwMSwgMHhmMCwgMHgyMiwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwNjMwLAkxNiwJezB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZjAsIDB4MjIsIDB4YzIsIDB4OTksIDB4ZjUsIDB4OTl9IH0sCit7IDB4MDY0MCwJMTYsCXsweDMwLCAweDk5LCAweGZkLCAweGMyLCAweDk5LCAweDIyLCAweGU1LCAweDVlLCAweGY2LCAweDNjLCAweGZkLCAweDhmLCAweGZlLCAweGM4LCAweGZmLCAweDY0fSB9LAoreyAweDA2NTAsCTE2LAl7MHhmZiwgMHhiMiwgMHhmZiwgMHhkOSwgMHhmZiwgMHhlZCwgMHhmZiwgMHhmMywgMHhmZiwgMHhmYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZn0gfSwKK3sgMHgwNjYwLAkxNiwJezB4ZmYsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MDQsIDB4MDEsIDB4ODksIDB4YWIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDksIDB4MDIsIDB4MjAsIDB4MDB9IH0sCit7IDB4MDY3MCwJMTYsCXsweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDAyLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDA1fSB9LAoreyAweDA2ODAsCTE2LAl7MHg4MiwgMHgwMywgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NCwgMHgwNiwgMHg5OH0gfSwKK3sgMHgwNjkwLAkxNiwJezB4MDYsIDB4YmEsIDB4MDYsIDB4ZTgsIDB4MDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDMsIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDB9IH0sCit7IDB4MDZhMCwJMTYsCXsweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDc1LCAweDAwLCAweDczLCAweDAwLCAweDYyLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwfSB9LAoreyAweDA2YjAsCTE2LAl7MHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MywgMHgwMCwgMHgyZSwgMHgwMywgMHg0MSwgMHgwMCwgMHg0MywgMHgwMH0gfSwKK3sgMHgwNmMwLAkxNiwJezB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzMsIDB4MDB9IH0sCit7IDB4MDZkMCwJMTYsCXsweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwfSB9LAoreyAweDA2ZTAsCTE0LAl7MHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwNiwgMHgwMywgMHgzNCwgMHgwMCwgMHgzNywgMHgwMH0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYxYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCkBAIC0wLDAgKzEsMTEzIEBACisjCisjIFVTQiBTdG9yYWdlIGRyaXZlciBjb25maWd1cmF0aW9uCisjCisKK2NvbW1lbnQgIk5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX1NUT1JBR0UKKwl0cmlzdGF0ZSAiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJc2VsZWN0IFNDU0kKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCCisJICBmbG9wcHkgZHJpdmVzLCBVU0IgaGFyZCBkaXNrcywgVVNCIHRhcGUgZHJpdmVzLCBVU0IgQ0QtUk9NcywKKwkgIFVTQiBmbGFzaCBkZXZpY2VzLCBhbmQgbWVtb3J5IHN0aWNrcywgYWxvbmcgd2l0aAorCSAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXMKKwkgIGFuZCBjYXJkIHJlYWRlcnMuCisKKwkgIFRoaXMgb3B0aW9uICdzZWxlY3RzJyAodHVybnMgb24sIGVuYWJsZXMpICdTQ1NJJywgYnV0IHlvdQorCSAgcHJvYmFibHkgYWxzbyBuZWVkICdTQ1NJIGRldmljZSBzdXBwb3J0OiBTQ1NJIGRpc2sgc3VwcG9ydCcKKwkgIChCTEtfREVWX1NEKSBmb3IgbW9zdCBVU0Igc3RvcmFnZSBkZXZpY2VzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Itc3RvcmFnZS4KKworY29uZmlnIFVTQl9TVE9SQUdFX0RFQlVHCisJYm9vbCAiVVNCIE1hc3MgU3RvcmFnZSB2ZXJib3NlIGRlYnVnIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKKwloZWxwCisJICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGhhdmUgdGhlIFVTQiBNYXNzIFN0b3JhZ2UgY29kZSBnZW5lcmF0ZQorCSAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCCisJYm9vbCAiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU3VwcG9ydCBmb3IgY2VydGFpbiBEYXRhZmFiIENvbXBhY3RGbGFzaCByZWFkZXJzLgorCSAgRGF0YWZhYiBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5kYXRhZmFidXNhLmNvbS8+LgorCitjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTQorCWJvb2wgIkZyZWVjb20gVVNCL0FUQVBJIEJyaWRnZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IgdG8gSURFL0FUQVBJIGFkYXB0b3IuCisJICBGcmVlY29tIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LmZyZWVjb20uZGUvPi4KKworY29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMAorCWJvb2wgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEJMS19ERVZfSURFCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZAorCSAgb24gdGhlIEluLVN5c3RlbXMgRGVzaWduIElTRC0yMDAgVVNCL0FUQSBicmlkZ2UuCisKKwkgIFNvbWUgb2YgdGhlIHByb2R1Y3RzIHRoYXQgdXNlIHRoaXMgY2hpcCBhcmU6CisKKwkgIC0gQXJjaG9zIEp1a2Vib3ggNjAwMAorCSAgLSBJU0QgU21hcnRDYWJsZSBmb3IgU3RvcmFnZQorCSAgLSBUYWl3YW4gU2t5bWFzdGVyIENENTMwVS9ERUwtMDI0MSBJREUgYnJpZGdlCisJICAtIFNvbnkgQ1JYMTBVIENELVIvUlcgZHJpdmUKKwkgIC0gQ3lRJ3ZlIENRODA2MEEgQ0RSVyBkcml2ZQorCSAgLSBQbGFuZXggZVh0cmVtZSBEcml2ZSBSWC0yNUhVIFVTQi1JREUgY2FibGUgKG5vdCBtb2RlbCBSWC0yNVUpCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9EUENNCisJYm9vbCAiTWljcm90ZWNoL1ppTyEgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBNaWNyb3RlY2gvWmlPISBDb21wYWN0Rmxhc2ggcmVhZGVyLgorCSAgVGhlcmUgaXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy56aW9jb3JwLmNvbS9wcm9kdWN0cy8+LgorCitjb25maWcgVVNCX1NUT1JBR0VfVVNCQVQKKwlib29sICJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCBzdG9yYWdlIGRldmljZXMKKwkgIGJhc2VkIG9uIHRoZSBTQ00vU2h1dHRsZSBVU0JBVC9VU0JBVDAyIHByb2Nlc3NvcnMuCisKKwkgIERldmljZXMgcmVwb3J0ZWQgdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyIGluY2x1ZGU6CisJICAtIENvbXBhY3RGbGFzaCByZWFkZXIgaW5jbHVkZWQgd2l0aCBLb2RhayBEQzM4MDAgY2FtZXJhCisJICAtIERhbmUtRWxlYyBabWF0ZSBDb21wYWN0Rmxhc2ggcmVhZGVyCisJICAtIERlbGtpbiBFZmlsbSByZWFkZXIyCisJICAtIEhQIDgyMDBlLzgyMTBlLzgyMzBlIENELVdyaXRlciBQbHVzIGRyaXZlcworCSAgLSBJLUpBTSBKUy01MFUKKwkgIC0gSmVzc29wcyBDb21wYWN0Rmxhc2ggSkVTRENGUlUgQkxBQ0sKKwkgIC0gS2luZ3N0b24gVGVjaG5vbG9neSBQQ1JFQUQtVVNCL0NGCisJICAtIE1heGVsbCBVQTQgQ29tcGFjdEZsYXNoIHJlYWRlcgorCSAgLSBNZW1vcmV4IFVDRi0xMDAKKwkgIC0gTWljcm90ZWNoIFppTyEgSUNTLTQ1IENGMgorCSAgLSBSQ0EgTFlSQSBNUDMgcG9ydGFibGUKKwkgIC0gU2FuZGlzayBJbWFnZU1hdGUgU0REUi0wNWIKKworY29uZmlnIFVTQl9TVE9SQUdFX1NERFIwOQorCWJvb2wgIlNhbkRpc2sgU0REUi0wOSAoYW5kIG90aGVyIFNtYXJ0TWVkaWEpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFNhbmRpc2sgU0REUi0wOQorCSAgU21hcnRNZWRpYSByZWFkZXIgaW4gdGhlIFVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyLgorCSAgQWxzbyB3b3JrcyBmb3IgdGhlIE1pY3JvdGVjaCBaaW8hIFNtYXJ0TWVkaWEgcmVhZGVyLgorCitjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1CisJYm9vbCAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgU2FuZGlzayBTRERSLTU1CisJICBTbWFydE1lZGlhIHJlYWRlciBpbiB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVAorCWJvb2wgIkxleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdAorCSAgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjUyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkcml2ZXJzLgorIworIyAxNSBBdWcgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgorIyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy4KKyMKKworRVhUUkFfQ0ZMQUdTCTo9IC1JZHJpdmVycy9zY3NpCisKK29iai0kKENPTkZJR19VU0JfU1RPUkFHRSkJKz0gdXNiLXN0b3JhZ2UubworCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpCSs9IGRlYnVnLm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkJKz0gc2h1dHRsZV91c2JhdC5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KQkrPSBzZGRyMDkubwordXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gc2RkcjU1Lm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKQkrPSBmcmVlY29tLm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9EUENNKQkrPSBkcGNtLm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IGlzZDIwMC5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gZGF0YWZhYi5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IGp1bXBzaG90Lm8KKwordXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAorCQkJaW5pdGlhbGl6ZXJzLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlM2U2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCkBAIC0wLDAgKzEsNjY5IEBACisvKiBEcml2ZXIgZm9yIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKgorICogJElkOiBkYXRhZmFiLmMsdiAxLjcgMjAwMi8wMi8yNSAwMDo0MDoxMyBtZGhhcm0gRXhwICQKKyAqCisgKiBkYXRhZmFiIGRyaXZlciB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmcpCisgKgorICogICBNYW55IHRoYW5rcyB0byBSb2JlcnQgQmFydWNoIGZvciB0aGUgU2FuRGlzayBTbWFydE1lZGlhIHJlYWRlciBkcml2ZXIKKyAqICAgd2hpY2ggSSB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqICAgU29tZSBidWdmaXhlcyBhbmQgc2NhdHRlci1nYXRoZXIgY29kZSBieSBHcmVnb3J5IFAuIFNtaXRoIAorICogICAoZ3JlZy11c2JAZWxlY3RyaWNyYWluLmNvbSkKKyAqCisgKiAgIEZpeCBmb3IgbWVkaWEgY2hhbmdlIGJ5IEpvZXJnIFNjaG5laWRlciAoanNAam9lcmdzY2huZWlkZXIuY29tKQorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIHN1cHBvcnQgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIvd3JpdGVyIGRldmljZXMKKyAqIGJhc2VkIG9uIERhdGFmYWIgVVNCLXRvLUFUQSBjaGlwcy4gIEl0IHdhcyBzcGVjaWZpY2FsbHkgZGV2ZWxvcGVkIGZvciB0aGUgCisgKiBEYXRhZmFiIE1EQ0ZFLUIgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIgYnV0IGhhcyBzaW5jZSBiZWVuIGZvdW5kIHRvIHdvcmsgCisgKiB3aXRoIGEgdmFyaWV0eSBvZiBEYXRhZmFiLWJhc2VkIGRldmljZXMgZnJvbSBhIG51bWJlciBvZiBtYW51ZmFjdHVyZXJzLgorICogSSd2ZSByZWNlaXZlZCBhIHJlcG9ydCBvZiB0aGlzIGRyaXZlciB3b3JraW5nIHdpdGggYSBEYXRhZmFiLWJhc2VkCisgKiBTbWFydE1lZGlhIGRldmljZSB0aG91Z2ggcGxlYXNlIGJlIGF3YXJlIHRoYXQgSSdtIHBlcnNvbmFsbHkgdW5hYmxlIHRvCisgKiB0ZXN0IFNtYXJ0TWVkaWEgc3VwcG9ydC4KKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nLiAgSWYgeW91J3JlIHRydWx5IHBhcmFub2lkLAorICogaG93ZXZlciwgeW91IGNhbiBmb3JjZSB0aGUgZHJpdmVyIGludG8gYSB3cml0ZS1wcm90ZWN0ZWQgc3RhdGUgYnkgc2V0dGluZworICogdGhlIFdQIGVuYWJsZSBiaXRzIGluIGRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2UoKS4gIFNlZSB0aGUgY29tbWVudHMKKyAqIGluIHRoYXQgcm91dGluZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiZGF0YWZhYi5oIgorCitzdGF0aWMgaW50IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8pOworCisKK3N0YXRpYyBpbmxpbmUgaW50CitkYXRhZmFiX2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwlVU19ERUJVR1AoImRhdGFmYWJfYnVsa19yZWFkOiAgbGVuID0gJWRcbiIsIGxlbik7CisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQlkYXRhLCBsZW4sIE5VTEwpOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50CitkYXRhZmFiX2J1bGtfd3JpdGUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJkYXRhZmFiX2J1bGtfd3JpdGU6ICBsZW4gPSAlZFxuIiwgbGVuKTsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJCWRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8sCisJCQkgICAgIHUzMiBzZWN0b3IsCisJCQkgICAgIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIERhdGFmYWIKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0IAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisJLy8KKwlpZiAoc2VjdG9ycyA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAoaW5mby0+bHVuID09IC0xKSB7CisJCXJlc3VsdCA9IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bih1cywgaW5mbyk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3QgcmVhZCBtb3JlIHRoYW4gNjQgS0IgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJYWxsb2NsZW4gPSBtaW4odG90YWxsZW4sIDY1NTM2dSk7CisJYnVmZmVyID0ga21hbGxvYyhhbGxvY2xlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWRvIHsKKwkJLy8gbG9vcCwgbmV2ZXIgYWxsb2NhdGUgb3IgdHJhbnNmZXIgbW9yZSB0aGFuIDY0ayBhdCBvbmNlCisJCS8vIChtaW4oMTI4aywgMjU1KmluZm8tPnNzaXplKSBpcyB0aGUgcmVhbCBsaW1pdCkKKworCQlsZW4gPSBtaW4odG90YWxsZW4sIGFsbG9jbGVuKTsKKwkJdGhpc3RpbWUgPSAobGVuIC8gaW5mby0+c3NpemUpICYgMHhmZjsKKworCQljb21tYW5kWzBdID0gMDsKKwkJY29tbWFuZFsxXSA9IHRoaXN0aW1lOworCQljb21tYW5kWzJdID0gc2VjdG9yICYgMHhGRjsKKwkJY29tbWFuZFszXSA9IChzZWN0b3IgPj4gOCkgJiAweEZGOworCQljb21tYW5kWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCisJCWNvbW1hbmRbNV0gPSAweEUwICsgKGluZm8tPmx1biA8PCA0KTsKKwkJY29tbWFuZFs1XSB8PSAoc2VjdG9yID4+IDI0KSAmIDB4MEY7CisJCWNvbW1hbmRbNl0gPSAweDIwOworCQljb21tYW5kWzddID0gMHgwMTsKKworCQkvLyBzZW5kIHRoZSByZWFkIGNvbW1hbmQKKwkJcmVzdWx0ID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBjb21tYW5kLCA4KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHJlYWQgdGhlIHJlc3VsdAorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfcmVhZCh1cywgYnVmZmVyLCBsZW4pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJICZzZ19pZHgsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICAgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbywKKwkJCSAgICAgIHUzMiBzZWN0b3IsCisJCQkgICAgICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKnJlcGx5ID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIERhdGFmYWIKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0IAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisJLy8KKwlpZiAoc2VjdG9ycyA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAoaW5mby0+bHVuID09IC0xKSB7CisJCXJlc3VsdCA9IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bih1cywgaW5mbyk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJnNnX2lkeCwgJnNnX29mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJY29tbWFuZFswXSA9IDA7CisJCWNvbW1hbmRbMV0gPSB0aGlzdGltZTsKKwkJY29tbWFuZFsyXSA9IHNlY3RvciAmIDB4RkY7CisJCWNvbW1hbmRbM10gPSAoc2VjdG9yID4+IDgpICYgMHhGRjsKKwkJY29tbWFuZFs0XSA9IChzZWN0b3IgPj4gMTYpICYgMHhGRjsKKworCQljb21tYW5kWzVdID0gMHhFMCArIChpbmZvLT5sdW4gPDwgNCk7CisJCWNvbW1hbmRbNV0gfD0gKHNlY3RvciA+PiAyNCkgJiAweDBGOworCQljb21tYW5kWzZdID0gMHgzMDsKKwkJY29tbWFuZFs3XSA9IDB4MDI7CisKKwkJLy8gc2VuZCB0aGUgY29tbWFuZAorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGNvbW1hbmQsIDgpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gc2VuZCB0aGUgZGF0YQorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGJ1ZmZlciwgbGVuKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHJlYWQgdGhlIHJlc3VsdAorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfcmVhZCh1cywgcmVwbHksIDIpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJaWYgKHJlcGx5WzBdICE9IDB4NTAgJiYgcmVwbHlbMV0gIT0gMCkgeworCQkJVVNfREVCVUdQKCJkYXRhZmFiX3dyaXRlX2RhdGE6ICBHYWghICIKKwkJCQkgICJ3cml0ZSByZXR1cm4gY29kZTogJTAyeCAlMDJ4XG4iLAorCQkJCSAgcmVwbHlbMF0sIHJlcGx5WzFdKTsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX2RldGVybWluZV9sdW4oc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSBzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvKQoreworCS8vIER1YWwtc2xvdCByZWFkZXJzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGR1YWwtTFVOIGRldmljZXMuCisJLy8gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggY2FyZCBzbG90IGlzIGJlaW5nIHVzZWQuCisJLy8gV2UnbGwgc2VuZCBhbiBJREVOVElGWSBERVZJQ0UgY29tbWFuZCBhbmQgc2VlIHdoaWNoIExVTiByZXNwb25kcy4uLgorCS8vCisJLy8gVGhlcmUgbWlnaHQgYmUgYSBiZXR0ZXIgd2F5IG9mIGRvaW5nIHRoaXM/CisKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBzY29tbWFuZFs4XSA9IHsgMCwgMSwgMCwgMCwgMCwgMHhhMCwgMHhlYywgMSB9OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCBjb3VudCA9IDAsIHJjOworCisJaWYgKCF1cyB8fCAhaW5mbykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCW1lbWNweShjb21tYW5kLCBzY29tbWFuZCwgOCk7CisJYnVmID0ga21hbGxvYyg1MTIsIEdGUF9OT0lPKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiZGF0YWZhYl9kZXRlcm1pbmVfbHVuOiAgbG9jYXRpbmcuLi5cbiIpOworCisJLy8gd2UnbGwgdHJ5IDMgdGltZXMgYmVmb3JlIGdpdmluZyB1cC4uLgorCS8vCisJd2hpbGUgKGNvdW50KysgPCAzKSB7CisJCWNvbW1hbmRbNV0gPSAweGEwOworCisJCXJjID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBjb21tYW5kLCA4KTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJcmMgPSBkYXRhZmFiX2J1bGtfcmVhZCh1cywgYnVmLCA1MTIpOworCQlpZiAocmMgPT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlpbmZvLT5sdW4gPSAwOworCQkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQljb21tYW5kWzVdID0gMHhiMDsKKworCQlyYyA9IGRhdGFmYWJfYnVsa193cml0ZSh1cywgY29tbWFuZCwgOCk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJZ290byBsZWF2ZTsKKwkJfQorCisJCXJjID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIGJ1ZiwgNTEyKTsKKwkJaWYgKHJjID09IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJaW5mby0+bHVuID0gMTsKKwkJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJbXNsZWVwKDIwKTsKKwl9CisKKwlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworIGxlYXZlOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRhdGFmYWJfaWRfZGV2aWNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbykKK3sKKwkvLyB0aGlzIGlzIGEgdmFyaWF0aW9uIG9mIHRoZSBBVEEgIklERU5USUZZIERFVklDRSIgY29tbWFuZC4uLmFjY29yZGluZworCS8vIHRvIHRoZSBBVEEgc3BlYywgJ1NlY3RvciBDb3VudCcgaXNuJ3QgdXNlZCBidXQgdGhlIFdpbmRvd3MgZHJpdmVyCisJLy8gc2V0cyB0aGlzIGJpdCBzbyB3ZSBkbyB0b28uLi4KKwkvLworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNjb21tYW5kWzhdID0geyAwLCAxLCAwLCAwLCAwLCAweGEwLCAweGVjLCAxIH07CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXBseTsKKwlpbnQgcmM7CisKKwlpZiAoIXVzIHx8ICFpbmZvKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJaWYgKGluZm8tPmx1biA9PSAtMSkgeworCQlyYyA9IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bih1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKwl9CisKKwltZW1jcHkoY29tbWFuZCwgc2NvbW1hbmQsIDgpOworCXJlcGx5ID0ga21hbGxvYyg1MTIsIEdGUF9OT0lPKTsKKwlpZiAoIXJlcGx5KQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJY29tbWFuZFs1XSArPSAoaW5mby0+bHVuIDw8IDQpOworCisJcmMgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGNvbW1hbmQsIDgpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLy8gd2UnbGwgZ28gYWhlYWQgYW5kIGV4dHJhY3QgdGhlIG1lZGlhIGNhcGFjaXR5IHdoaWxlIHdlJ3JlIGhlcmUuLi4KKwkvLworCXJjID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIHJlcGx5LCA1MTIpOworCWlmIChyYyA9PSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJLy8gY2FwYWNpdHkgaXMgYXQgd29yZCBvZmZzZXQgNTctNTgKKwkJLy8KKwkJaW5mby0+c2VjdG9ycyA9ICgodTMyKShyZXBseVsxMTddKSA8PCAyNCkgfCAKKwkJCQkoKHUzMikocmVwbHlbMTE2XSkgPDwgMTYpIHwKKwkJCQkoKHUzMikocmVwbHlbMTE1XSkgPDwgIDgpIHwgCisJCQkJKCh1MzIpKHJlcGx5WzExNF0pICAgICAgKTsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworIGxlYXZlOgorCWtmcmVlKHJlcGx5KTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX2hhbmRsZV9tb2RlX3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgIHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIAorCQkJCSAgICAgaW50IHNlbnNlXzYpCit7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgcndfZXJyX3BhZ2VbMTJdID0geworCQkweDEsIDB4QSwgMHgyMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfcGFnZVsxMl0gPSB7CisJCTB4OCwgMHhBLCAweDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKwl9OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJiYWNfcGFnZVsxMl0gPSB7CisJCTB4MUIsIDB4QSwgMCwgMHg4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgdGltZXJfcGFnZVs4XSA9IHsKKwkJMHgxQywgMHg2LCAwLCAwLCAwLCAwCisJfTsKKwl1bnNpZ25lZCBjaGFyIHBjLCBwYWdlX2NvZGU7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8gPSAoc3RydWN0IGRhdGFmYWJfaW5mbyAqKSAodXMtPmV4dHJhKTsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisKKwkvLyBtb3N0IG9mIHRoaXMgc3R1ZmYgaXMganVzdCBhIGhhY2sgdG8gZ2V0IHRoaW5ncyB3b3JraW5nLiAgdGhlCisJLy8gZGF0YWZhYiByZWFkZXIgZG9lc24ndCBwcmVzZW50IGEgU0NTSSBpbnRlcmZhY2Ugc28gd2UKKwkvLyBmdWRnZSB0aGUgU0NTSSBjb21tYW5kcy4uLgorCS8vCisKKwlwYyA9IHNyYi0+Y21uZFsyXSA+PiA2OworCXBhZ2VfY29kZSA9IHNyYi0+Y21uZFsyXSAmIDB4M0Y7CisKKwlzd2l0Y2ggKHBjKSB7CisJICAgY2FzZSAweDA6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIEN1cnJlbnQgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDE6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIENoYW5nZWFibGUgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDI6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIERlZmF1bHQgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDM6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIFNhdmVzIHZhbHVlc1xuIik7CisJCWJyZWFrOworCX0KKworCW1lbXNldChwdHIsIDAsIDgpOworCWlmIChzZW5zZV82KSB7CisJCXB0clsyXSA9IDB4MDA7CQkvLyBXUCBlbmFibGU6IDB4ODAKKwkJaSA9IDQ7CisJfSBlbHNlIHsKKwkJcHRyWzNdID0gMHgwMDsJCS8vIFdQIGVuYWJsZTogMHg4MAorCQlpID0gODsKKwl9CisKKwlzd2l0Y2ggKHBhZ2VfY29kZSkgeworCSAgIGRlZmF1bHQ6CisJCS8vIHZlbmRvci1zcGVjaWZpYyBtb2RlCisJCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJCWluZm8tPnNlbnNlX2FzYyA9IDB4MjQ7CisJCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCSAgIGNhc2UgMHgxOgorCQltZW1jcHkocHRyICsgaSwgcndfZXJyX3BhZ2UsIHNpemVvZihyd19lcnJfcGFnZSkpOworCQlpICs9IHNpemVvZihyd19lcnJfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDg6CisJCW1lbWNweShwdHIgKyBpLCBjYWNoZV9wYWdlLCBzaXplb2YoY2FjaGVfcGFnZSkpOworCQlpICs9IHNpemVvZihjYWNoZV9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUI6CisJCW1lbWNweShwdHIgKyBpLCByYmFjX3BhZ2UsIHNpemVvZihyYmFjX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocmJhY19wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUM6CisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4M0Y6CQkvLyByZXRyaWV2ZSBhbGwgcGFnZXMKKwkJbWVtY3B5KHB0ciArIGksIHRpbWVyX3BhZ2UsIHNpemVvZih0aW1lcl9wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHRpbWVyX3BhZ2UpOworCQltZW1jcHkocHRyICsgaSwgcmJhY19wYWdlLCBzaXplb2YocmJhY19wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJiYWNfcGFnZSk7CisJCW1lbWNweShwdHIgKyBpLCBjYWNoZV9wYWdlLCBzaXplb2YoY2FjaGVfcGFnZSkpOworCQlpICs9IHNpemVvZihjYWNoZV9wYWdlKTsKKwkJbWVtY3B5KHB0ciArIGksIHJ3X2Vycl9wYWdlLCBzaXplb2YocndfZXJyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocndfZXJyX3BhZ2UpOworCQlicmVhazsKKwl9CisKKwlpZiAoc2Vuc2VfNikKKwkJcHRyWzBdID0gaSAtIDE7CisJZWxzZQorCQkoKF9fYmUxNiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMTYoaSAtIDIpOworCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIGksIHNyYik7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGFmYWJfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKQoreworCS8vIHRoaXMgcm91dGluZSBpcyBhIHBsYWNlaG9sZGVyLi4uCisJLy8gY3VycmVudGx5LCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgZXh0cmEgbWVtb3J5IHNvIHdlJ3JlIG9rYXkKK30KKworCisvLyBUcmFuc3BvcnQgZm9yIHRoZSBEYXRhZmFiIE1EQ0ZFLUIKKy8vCitpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm87CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgYmxvY2ssIGJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXBseVs4XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGF0YWZhYl9pbmZvKSwgR0ZQX05PSU8pOworCQlpZiAoIXVzLT5leHRyYSkgeworCQkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIEdhaCEgIgorCQkJCSAgIkNhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIERhdGFmYWIgaW5mbyBzdHJ1Y3QhXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKwkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBkYXRhZmFiX2luZm8pKTsKKwkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBkYXRhZmFiX2luZm9fZGVzdHJ1Y3RvcjsKKyAgCQkoKHN0cnVjdCBkYXRhZmFiX2luZm8gKil1cy0+ZXh0cmEpLT5sdW4gPSAtMTsKKwl9CisKKwlpbmZvID0gKHN0cnVjdCBkYXRhZmFiX2luZm8gKikgKHVzLT5leHRyYSk7CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIElOUVVJUlkuICBSZXR1cm5pbmcgYm9ndXMgcmVzcG9uc2UiKTsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXBseSwgc2l6ZW9mKGlucXVpcnlfcmVwbHkpKTsKKwkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBwdHIsIDM2KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF9DQVBBQ0lUWSkgeworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOyAgLy8gaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYworCQlyYyA9IGRhdGFmYWJfaWRfZGV2aWNlKHVzLCBpbmZvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJjOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBSRUFEX0NBUEFDSVRZOiAgJWxkIHNlY3RvcnMsICVsZCBieXRlcyBwZXIgc2VjdG9yXG4iLAorCQkJICBpbmZvLT5zZWN0b3JzLCBpbmZvLT5zc2l6ZSk7CisKKwkJLy8gYnVpbGQgdGhlIHJlcGx5CisJCS8vIHdlIG5lZWQgdGhlIGxhc3Qgc2VjdG9yLCBub3QgdGhlIG51bWJlciBvZiBzZWN0b3JzCisJCSgoX19iZTMyICopIHB0cilbMF0gPSBjcHVfdG9fYmUzMihpbmZvLT5zZWN0b3JzIC0gMSk7CisJCSgoX19iZTMyICopIHB0cilbMV0gPSBjcHVfdG9fYmUzMihpbmZvLT5zc2l6ZSk7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRUxFQ1RfMTApIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIEdhaCEgTU9ERV9TRUxFQ1RfMTAuXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvLyBkb24ndCBib3RoZXIgaW1wbGVtZW50aW5nIFJFQURfNiBvciBXUklURV82LgorCS8vCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCA4KSB8ICgodTMyKShzcmItPmNtbmRbOF0pKTsKKworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgUkVBRF8xMDogcmVhZCBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gZGF0YWZhYl9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMikgeworCQkvLyB3ZSdsbCBwcm9iYWJseSBuZXZlciBzZWUgYSBSRUFEXzEyIGJ1dCB3ZSdsbCBkbyBpdCBhbnl3YXkuLi4KKwkJLy8KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCQkgKCh1MzIpKHNyYi0+Y21uZFs4XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs5XSkpOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBSRUFEXzEyOiByZWFkIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiBkYXRhZmFiX3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFdSSVRFXzEwOiB3cml0ZSBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gZGF0YWZhYl93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFdSSVRFXzEyKSB7CisJCS8vIHdlJ2xsIHByb2JhYmx5IG5ldmVyIHNlZSBhIFdSSVRFXzEyIGJ1dCB3ZSdsbCBkbyBpdCBhbnl3YXkuLi4KKwkJLy8KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCQkgKCh1MzIpKHNyYi0+Y21uZFs4XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs5XSkpOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBXUklURV8xMjogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGRhdGFmYWJfd3JpdGVfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFRFU1RfVU5JVF9SRUFEWS5cbiIpOworCQlyZXR1cm4gZGF0YWZhYl9pZF9kZXZpY2UodXMsIGluZm8pOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgUkVRVUVTVF9TRU5TRS4gIFJldHVybmluZyBmYWtlZCByZXNwb25zZVxuIik7CisKKwkJLy8gdGhpcyByZXNwb25zZSBpcyBwcmV0dHkgYm9ndXMgcmlnaHQgbm93LiAgZXZlbnR1YWxseSBpZiBuZWNlc3NhcnkKKwkJLy8gd2UgY2FuIHNldCB0aGUgY29ycmVjdCBzZW5zZSBkYXRhLiAgc28gZmFyIHRob3VnaCBpdCBoYXNuJ3QgYmVlbgorCQkvLyBuZWNlc3NhcnkKKwkJLy8KKwkJbWVtc2V0KHB0ciwgMCwgMTgpOworCQlwdHJbMF0gPSAweEYwOworCQlwdHJbMl0gPSBpbmZvLT5zZW5zZV9rZXk7CisJCXB0cls3XSA9IDExOworCQlwdHJbMTJdID0gaW5mby0+c2Vuc2VfYXNjOworCQlwdHJbMTNdID0gaW5mby0+c2Vuc2VfYXNjcTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgMTgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRSkgeworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgTU9ERV9TRU5TRV82IGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2UodXMsIHNyYiwgMSk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSB7CisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBNT0RFX1NFTlNFXzEwIGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2UodXMsIHNyYiwgMCk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkgeworCQkvLyBzdXJlLiAgd2hhdGV2ZXIuICBub3QgbGlrZSB3ZSBjYW4gc3RvcCB0aGUgdXNlciBmcm9tCisJCS8vIHBvcHBpbmcgdGhlIG1lZGlhIG91dCBvZiB0aGUgZGV2aWNlIChubyBsb2NraW5nIGRvb3JzLCBldGMpCisJCS8vCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFNUQVJUX1NUT1ApIHsKKwkJLyogdGhpcyBpcyB1c2VkIGJ5IHNkLmMnY2hlY2tfc2NzaWRpc2tfbWVkaWFfY2hhbmdlIHRvIGRldGVjdAorCQkgICBtZWRpYSBjaGFuZ2UgKi8KKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFNUQVJUX1NUT1AuXG4iKTsKKwkJLyogdGhlIGZpcnN0IGRhdGFmYWJfaWRfZGV2aWNlIGFmdGVyIGEgbWVkaWEgY2hhbmdlIHJldHVybnMKKwkJICAgYW4gZXJyb3IgKGRldGVybWluZWQgZXhwZXJpbWVudGFsbHkpICovCisJCXJjID0gZGF0YWZhYl9pZF9kZXZpY2UodXMsIGluZm8pOworCQlpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCWluZm8tPnNlbnNlX2tleSA9IE5PX1NFTlNFOworCQkJc3JiLT5yZXN1bHQgPSBTVUNDRVNTOworCQl9IGVsc2UgeworCQkJaW5mby0+c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJfQorCQlyZXR1cm4gcmM7CisJfQorCisJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIEdhaCEgVW5rbm93biBjb21tYW5kOiAlZCAoMHgleClcbiIsCisJCSAgc3JiLT5jbW5kWzBdLCBzcmItPmNtbmRbMF0pOworCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJaW5mby0+c2Vuc2VfYXNjID0gMHgyMDsKKwlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlM2YyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIERyaXZlciBmb3IgRGF0YWZhYiBNRENGRS1CIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmcpCisgKgorICogU2VlIGRhdGFmYWIuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAorI2RlZmluZSBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICisKK2V4dGVybiBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCitzdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLy8gdG90YWwgc2VjdG9yIGNvdW50CisJdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKKwlzaWduZWQgY2hhcglsdW47CQkvLyB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycworCQorCS8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0CisJdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2NDgzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwpAQCAtMCwwICsxLDE3NyBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBEZWJ1Z2dpbmcgRnVuY3Rpb25zIFNvdXJjZSBDb2RlIEZpbGUKKyAqCisgKiAkSWQ6IGRlYnVnLmMsdiAxLjkgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzY3NpLmgiCisKKwordm9pZCB1c2Jfc3Rvcl9zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCWNoYXIgKndoYXQgPSBOVUxMOworCWludCBpOworCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKwljYXNlIFRFU1RfVU5JVF9SRUFEWTogd2hhdCA9ICJURVNUX1VOSVRfUkVBRFkiOyBicmVhazsKKwljYXNlIFJFWkVST19VTklUOiB3aGF0ID0gIlJFWkVST19VTklUIjsgYnJlYWs7CisJY2FzZSBSRVFVRVNUX1NFTlNFOiB3aGF0ID0gIlJFUVVFU1RfU0VOU0UiOyBicmVhazsKKwljYXNlIEZPUk1BVF9VTklUOiB3aGF0ID0gIkZPUk1BVF9VTklUIjsgYnJlYWs7CisJY2FzZSBSRUFEX0JMT0NLX0xJTUlUUzogd2hhdCA9ICJSRUFEX0JMT0NLX0xJTUlUUyI7IGJyZWFrOworCWNhc2UgUkVBU1NJR05fQkxPQ0tTOiB3aGF0ID0gIlJFQVNTSUdOX0JMT0NLUyI7IGJyZWFrOworCWNhc2UgUkVBRF82OiB3aGF0ID0gIlJFQURfNiI7IGJyZWFrOworCWNhc2UgV1JJVEVfNjogd2hhdCA9ICJXUklURV82IjsgYnJlYWs7CisJY2FzZSBTRUVLXzY6IHdoYXQgPSAiU0VFS182IjsgYnJlYWs7CisJY2FzZSBSRUFEX1JFVkVSU0U6IHdoYXQgPSAiUkVBRF9SRVZFUlNFIjsgYnJlYWs7CisJY2FzZSBXUklURV9GSUxFTUFSS1M6IHdoYXQgPSAiV1JJVEVfRklMRU1BUktTIjsgYnJlYWs7CisJY2FzZSBTUEFDRTogd2hhdCA9ICJTUEFDRSI7IGJyZWFrOworCWNhc2UgSU5RVUlSWTogd2hhdCA9ICJJTlFVSVJZIjsgYnJlYWs7CisJY2FzZSBSRUNPVkVSX0JVRkZFUkVEX0RBVEE6IHdoYXQgPSAiUkVDT1ZFUl9CVUZGRVJFRF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVDogd2hhdCA9ICJNT0RFX1NFTEVDVCI7IGJyZWFrOworCWNhc2UgUkVTRVJWRTogd2hhdCA9ICJSRVNFUlZFIjsgYnJlYWs7CisJY2FzZSBSRUxFQVNFOiB3aGF0ID0gIlJFTEVBU0UiOyBicmVhazsKKwljYXNlIENPUFk6IHdoYXQgPSAiQ09QWSI7IGJyZWFrOworCWNhc2UgRVJBU0U6IHdoYXQgPSAiRVJBU0UiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0U6IHdoYXQgPSAiTU9ERV9TRU5TRSI7IGJyZWFrOworCWNhc2UgU1RBUlRfU1RPUDogd2hhdCA9ICJTVEFSVF9TVE9QIjsgYnJlYWs7CisJY2FzZSBSRUNFSVZFX0RJQUdOT1NUSUM6IHdoYXQgPSAiUkVDRUlWRV9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBTRU5EX0RJQUdOT1NUSUM6IHdoYXQgPSAiU0VORF9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDogd2hhdCA9ICJBTExPV19NRURJVU1fUkVNT1ZBTCI7IGJyZWFrOworCWNhc2UgU0VUX1dJTkRPVzogd2hhdCA9ICJTRVRfV0lORE9XIjsgYnJlYWs7CisJY2FzZSBSRUFEX0NBUEFDSVRZOiB3aGF0ID0gIlJFQURfQ0FQQUNJVFkiOyBicmVhazsKKwljYXNlIFJFQURfMTA6IHdoYXQgPSAiUkVBRF8xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTA6IHdoYXQgPSAiV1JJVEVfMTAiOyBicmVhazsKKwljYXNlIFNFRUtfMTA6IHdoYXQgPSAiU0VFS18xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZOiB3aGF0ID0gIldSSVRFX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgVkVSSUZZOiB3aGF0ID0gIlZFUklGWSI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0g6IHdoYXQgPSAiU0VBUkNIX0hJR0giOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTDogd2hhdCA9ICJTRUFSQ0hfRVFVQUwiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1c6IHdoYXQgPSAiU0VBUkNIX0xPVyI7IGJyZWFrOworCWNhc2UgU0VUX0xJTUlUUzogd2hhdCA9ICJTRVRfTElNSVRTIjsgYnJlYWs7CisJY2FzZSBSRUFEX1BPU0lUSU9OOiB3aGF0ID0gIlJFQURfUE9TSVRJT04iOyBicmVhazsKKwljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOiB3aGF0ID0gIlNZTkNIUk9OSVpFX0NBQ0hFIjsgYnJlYWs7CisJY2FzZSBMT0NLX1VOTE9DS19DQUNIRTogd2hhdCA9ICJMT0NLX1VOTE9DS19DQUNIRSI7IGJyZWFrOworCWNhc2UgUkVBRF9ERUZFQ1RfREFUQTogd2hhdCA9ICJSRUFEX0RFRkVDVF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNRURJVU1fU0NBTjogd2hhdCA9ICJNRURJVU1fU0NBTiI7IGJyZWFrOworCWNhc2UgQ09NUEFSRTogd2hhdCA9ICJDT01QQVJFIjsgYnJlYWs7CisJY2FzZSBDT1BZX1ZFUklGWTogd2hhdCA9ICJDT1BZX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgV1JJVEVfQlVGRkVSOiB3aGF0ID0gIldSSVRFX0JVRkZFUiI7IGJyZWFrOworCWNhc2UgUkVBRF9CVUZGRVI6IHdoYXQgPSAiUkVBRF9CVUZGRVIiOyBicmVhazsKKwljYXNlIFVQREFURV9CTE9DSzogd2hhdCA9ICJVUERBVEVfQkxPQ0siOyBicmVhazsKKwljYXNlIFJFQURfTE9ORzogd2hhdCA9ICJSRUFEX0xPTkciOyBicmVhazsKKwljYXNlIFdSSVRFX0xPTkc6IHdoYXQgPSAiV1JJVEVfTE9ORyI7IGJyZWFrOworCWNhc2UgQ0hBTkdFX0RFRklOSVRJT046IHdoYXQgPSAiQ0hBTkdFX0RFRklOSVRJT04iOyBicmVhazsKKwljYXNlIFdSSVRFX1NBTUU6IHdoYXQgPSAiV1JJVEVfU0FNRSI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVBRF9TVUJDSEFOTkVMOiB3aGF0ID0gIlJFQUQgU1VCQ0hBTk5FTCI7IGJyZWFrOworCWNhc2UgUkVBRF9UT0M6IHdoYXQgPSAiUkVBRF9UT0MiOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfSEVBREVSOiB3aGF0ID0gIlJFQUQgSEVBREVSIjsgYnJlYWs7CisJY2FzZSBHUENNRF9QTEFZX0FVRElPXzEwOiB3aGF0ID0gIlBMQVkgQVVESU8gKDEwKSI7IGJyZWFrOworCWNhc2UgR1BDTURfUExBWV9BVURJT19NU0Y6IHdoYXQgPSAiUExBWSBBVURJTyBNU0YiOyBicmVhazsKKwljYXNlIEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OOgorCQl3aGF0ID0gIkdFVCBFVkVOVC9TVEFUVVMgTk9USUZJQ0FUSU9OIjsgYnJlYWs7CisJY2FzZSBHUENNRF9QQVVTRV9SRVNVTUU6IHdoYXQgPSAiUEFVU0UvUkVTVU1FIjsgYnJlYWs7CisJY2FzZSBMT0dfU0VMRUNUOiB3aGF0ID0gIkxPR19TRUxFQ1QiOyBicmVhazsKKwljYXNlIExPR19TRU5TRTogd2hhdCA9ICJMT0dfU0VOU0UiOyBicmVhazsKKwljYXNlIEdQQ01EX1NUT1BfUExBWV9TQ0FOOiB3aGF0ID0gIlNUT1AgUExBWS9TQ0FOIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX0RJU0NfSU5GTzogd2hhdCA9ICJSRUFEIERJU0MgSU5GT1JNQVRJT04iOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfVFJBQ0tfUlpPTkVfSU5GTzoKKwkJd2hhdCA9ICJSRUFEIFRSQUNLIElORk9STUFUSU9OIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRVNFUlZFX1JaT05FX1RSQUNLOiB3aGF0ID0gIlJFU0VSVkUgVFJBQ0siOyBicmVhazsKKwljYXNlIEdQQ01EX1NFTkRfT1BDOiB3aGF0ID0gIlNFTkQgT1BDIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVF8xMDogd2hhdCA9ICJNT0RFX1NFTEVDVF8xMCI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVQQUlSX1JaT05FX1RSQUNLOiB3aGF0ID0gIlJFUEFJUiBUUkFDSyI7IGJyZWFrOworCWNhc2UgMHg1OTogd2hhdCA9ICJSRUFEIE1BU1RFUiBDVUUiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0VfMTA6IHdoYXQgPSAiTU9ERV9TRU5TRV8xMCI7IGJyZWFrOworCWNhc2UgR1BDTURfQ0xPU0VfVFJBQ0s6IHdoYXQgPSAiQ0xPU0UgVFJBQ0svU0VTU0lPTiI7IGJyZWFrOworCWNhc2UgMHg1Qzogd2hhdCA9ICJSRUFEIEJVRkZFUiBDQVBBQ0lUWSI7IGJyZWFrOworCWNhc2UgMHg1RDogd2hhdCA9ICJTRU5EIENVRSBTSEVFVCI7IGJyZWFrOworCWNhc2UgR1BDTURfQkxBTks6IHdoYXQgPSAiQkxBTksiOyBicmVhazsKKwljYXNlIE1PVkVfTUVESVVNOiB3aGF0ID0gIk1PVkVfTUVESVVNIG9yIFBMQVkgQVVESU8gKDEyKSI7IGJyZWFrOworCWNhc2UgUkVBRF8xMjogd2hhdCA9ICJSRUFEXzEyIjsgYnJlYWs7CisJY2FzZSBXUklURV8xMjogd2hhdCA9ICJXUklURV8xMiI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZXzEyOiB3aGF0ID0gIldSSVRFX1ZFUklGWV8xMiI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0hfMTI6IHdoYXQgPSAiU0VBUkNIX0hJR0hfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTF8xMjogd2hhdCA9ICJTRUFSQ0hfRVFVQUxfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1dfMTI6IHdoYXQgPSAiU0VBUkNIX0xPV18xMiI7IGJyZWFrOworCWNhc2UgU0VORF9WT0xVTUVfVEFHOiB3aGF0ID0gIlNFTkRfVk9MVU1FX1RBRyI7IGJyZWFrOworCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzogd2hhdCA9ICJSRUFEX0VMRU1FTlRfU1RBVFVTIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX0NEX01TRjogd2hhdCA9ICJSRUFEIENEIE1TRiI7IGJyZWFrOworCWNhc2UgR1BDTURfU0NBTjogd2hhdCA9ICJTQ0FOIjsgYnJlYWs7CisJY2FzZSBHUENNRF9TRVRfU1BFRUQ6IHdoYXQgPSAiU0VUIENEIFNQRUVEIjsgYnJlYWs7CisJY2FzZSBHUENNRF9NRUNIQU5JU01fU1RBVFVTOiB3aGF0ID0gIk1FQ0hBTklTTSBTVEFUVVMiOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfQ0Q6IHdoYXQgPSAiUkVBRCBDRCI7IGJyZWFrOworCWNhc2UgMHhFMTogd2hhdCA9ICJXUklURSBDT05USU5VRSI7IGJyZWFrOworCWNhc2UgV1JJVEVfTE9OR18yOiB3aGF0ID0gIldSSVRFX0xPTkdfMiI7IGJyZWFrOworCWRlZmF1bHQ6IHdoYXQgPSAiKHVua25vd24gY29tbWFuZCkiOyBicmVhazsKKwl9CisJVVNfREVCVUdQKCJDb21tYW5kICVzICglZCBieXRlcylcbiIsIHdoYXQsIHNyYi0+Y21kX2xlbik7CisJVVNfREVCVUdQKCIiKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3JiLT5jbWRfbGVuICYmIGkgPCAxNjsgaSsrKQorCQlVU19ERUJVR1BYKCIgJTAyeCIsIHNyYi0+Y21uZFtpXSk7CisJVVNfREVCVUdQWCgiXG4iKTsKK30KKwordm9pZCB1c2Jfc3Rvcl9zaG93X3NlbnNlKAorCQl1bnNpZ25lZCBjaGFyIGtleSwKKwkJdW5zaWduZWQgY2hhciBhc2MsCisJCXVuc2lnbmVkIGNoYXIgYXNjcSkgeworCisJY29uc3QgY2hhciAqd2hhdCwgKmtleXN0cjsKKworCWtleXN0ciA9IHNjc2lfc2Vuc2Vfa2V5X3N0cmluZyhrZXkpOworCXdoYXQgPSBzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KGFzYywgYXNjcSk7CisKKwlpZiAoa2V5c3RyID09IE5VTEwpCisJCWtleXN0ciA9ICIoVW5rbm93biBLZXkpIjsKKwlpZiAod2hhdCA9PSBOVUxMKQorCQl3aGF0ID0gIih1bmtub3duIEFTQy9BU0NRKSI7CisKKwlVU19ERUJVR1AoIiVzOiAiLCBrZXlzdHIpOworCVVTX0RFQlVHUFgod2hhdCwgYXNjcSk7CisJVVNfREVCVUdQWCgiXG4iKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIwOTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogRGVidWdnaW5nIEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogZGVidWcuaCx2IDEuNiAyMDAxLzAxLzEyIDIzOjUxOjA0IG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIEluaXRpYWwgd29yayBieToKKyAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVCVUdfSF8KKyNkZWZpbmUgX0RFQlVHX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2RlZmluZSBVU0JfU1RPUkFHRSAidXNiLXN0b3JhZ2U6ICIKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRwordm9pZCB1c2Jfc3Rvcl9zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKK3ZvaWQgdXNiX3N0b3Jfc2hvd19zZW5zZSggdW5zaWduZWQgY2hhciBrZXksCisJCXVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EgKTsKKyNkZWZpbmUgVVNfREVCVUdQKHguLi4pIHByaW50ayggS0VSTl9ERUJVRyBVU0JfU1RPUkFHRSB4ICkKKyNkZWZpbmUgVVNfREVCVUdQWCh4Li4uKSBwcmludGsoIHggKQorI2RlZmluZSBVU19ERUJVRyh4KSB4IAorI2Vsc2UKKyNkZWZpbmUgVVNfREVCVUdQKHguLi4pCisjZGVmaW5lIFVTX0RFQlVHUFgoeC4uLikKKyNkZWZpbmUgVVNfREVCVUcoeCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiNjllNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIERyaXZlciBmb3IgTWljcm90ZWNoIERQQ00tVVNCIENvbXBhY3RGbGFzaC9TbWFydE1lZGlhIHJlYWRlcgorICoKKyAqICRJZDogZHBjbS5jLHYgMS40IDIwMDEvMDYvMTEgMDI6NTQ6MjUgbWRoYXJtIEV4cCAkCisgKgorICogRFBDTSBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEJyaWFuIFdlYmIgKHdlYmJiQGVhcnRobGluay5uZXQpCisgKgorICogVGhpcyBkZXZpY2UgY29udGFpbnMgYm90aCBhIENvbXBhY3RGbGFzaCBjYXJkIHJlYWRlciwgd2hpY2gKKyAqIHVzZXMgdGhlIENvbnRyb2wvQnVsayB3L28gSW50ZXJydXB0IHByb3RvY29sIGFuZAorICogYSBTbWFydE1lZGlhIGNhcmQgcmVhZGVyIHRoYXQgdXNlcyB0aGUgc2FtZSBwcm90b2NvbAorICogYXMgdGhlIFNERFIwOS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiZHBjbS5oIgorI2luY2x1ZGUgInNkZHIwOS5oIgorCisvKgorICogVHJhbnNwb3J0IGZvciB0aGUgTWljcm90ZWNoIERQQ00tVVNCCisgKgorICovCitpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisgIGludCByZXQ7CisKKyAgaWYoc3JiID09IE5VTEwpCisgICAgcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworICBVU19ERUJVR1AoImRwY21fdHJhbnNwb3J0OiBMVU49JWRcbiIsIHNyYi0+ZGV2aWNlLT5sdW4pOworCisgIHN3aXRjaChzcmItPmRldmljZS0+bHVuKSB7CisgIGNhc2UgMDoKKworICAgIC8qCisgICAgICogTFVOIDAgY29ycmVzcG9uZHMgdG8gdGhlIENvbXBhY3RGbGFzaCBjYXJkIHJlYWRlci4KKyAgICAgKi8KKyAgICByZXQgPSB1c2Jfc3Rvcl9DQl90cmFuc3BvcnQoc3JiLCB1cyk7CisgICAgYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisgIGNhc2UgMToKKworICAgIC8qCisgICAgICogTFVOIDEgY29ycmVzcG9uZHMgdG8gdGhlIFNtYXJ0TWVkaWEgY2FyZCByZWFkZXIuCisgICAgICovCisKKyAgICAvKgorICAgICAqIFNldCB0aGUgTFVOIHRvIDAgKGp1c3QgaW4gY2FzZSkuCisgICAgICovCisgICAgc3JiLT5kZXZpY2UtPmx1biA9IDA7IHVzLT5zcmItPmRldmljZS0+bHVuID0gMDsKKyAgICByZXQgPSBzZGRyMDlfdHJhbnNwb3J0KHNyYiwgdXMpOworICAgIHNyYi0+ZGV2aWNlLT5sdW4gPSAxOyB1cy0+c3JiLT5kZXZpY2UtPmx1biA9IDE7CisgICAgYnJlYWs7CisKKyNlbmRpZgorCisgIGRlZmF1bHQ6CisgICAgVVNfREVCVUdQKCJkcGNtX3RyYW5zcG9ydDogSW52YWxpZCBMVU4gJWRcbiIsIHNyYi0+ZGV2aWNlLT5sdW4pOworICAgIHJldCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWI0NjRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmgKQEAgLTAsMCArMSwzNCBAQAorLyogRHJpdmVyIGZvciBNaWNyb3RlY2ggRFBDTS1VU0IgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogJElkOiBkcGNtLmgsdiAxLjIgMjAwMC8wOC8yNSAwMDoxMzo1MSBtZGhhcm0gRXhwICQKKyAqCisgKiBEUENNIGRyaXZlciB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgQnJpYW4gV2ViYiAod2ViYmJAZWFydGhsaW5rLm5ldCkKKyAqCisgKiBTZWUgZHBjbS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTUlDUk9URUNIX0RQQ01fVVNCX0gKKyNkZWZpbmUgX01JQ1JPVEVDSF9EUENNX1VTQl9ICisKK2V4dGVybiBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlOTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCkBAIC0wLDAgKzEsNDg4IEBACisvKiBEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yCisgKgorICogJElkOiBmcmVlY29tLmMsdiAxLjIyIDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogRnJlZWNvbSB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKEMpIDIwMDAgRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCB3aXRoIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIEZSRUVDT00ncyBVU0IKKyAqIFByb2dyYW1tZXJzIFJlZmVyZW5jZSBHdWlkZS4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGNvbnRhY3QgRnJlZWNvbQorICogKGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImZyZWVjb20uaCIKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworc3RhdGljIHZvaWQgcGR1bXAgKHZvaWQgKiwgaW50KTsKKyNlbmRpZgorCisvKiBCaXRzIG9mIEhEX1NUQVRVUyAqLworI2RlZmluZSBFUlJfU1RBVAkJMHgwMQorI2RlZmluZSBEUlFfU1RBVAkJMHgwOAorCisvKiBBbGwgb2YgdGhlIG91dGdvaW5nIHBhY2tldHMgYXJlIDY0IGJ5dGVzIGxvbmcuICovCitzdHJ1Y3QgZnJlZWNvbV9jYl93cmFwIHsKKwl1OCAgICBUeXBlOwkJLyogQ29tbWFuZCB0eXBlLiAqLworCXU4ICAgIFRpbWVvdXQ7CQkvKiBUaW1lb3V0IGluIHNlY29uZHMuICovCisJdTggICAgQXRhcGlbMTJdOwkvKiBBbiBBVEFQSSBwYWNrZXQuICovCisJdTggICAgRmlsbGVyWzUwXTsJLyogUGFkZGluZyBEYXRhLiAqLworfTsKKworc3RydWN0IGZyZWVjb21feGZlcl93cmFwIHsKKwl1OCAgICBUeXBlOwkJLyogQ29tbWFuZCB0eXBlLiAqLworCXU4ICAgIFRpbWVvdXQ7CQkvKiBUaW1lb3V0IGluIHNlY29uZHMuICovCisJX19sZTMyICAgQ291bnQ7CQkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuICovCisJdTggICAgUGFkWzU4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZnJlZWNvbV9pZGVfb3V0IHsKKwl1OCAgICBUeXBlOwkJLyogVHlwZSArIElERSByZWdpc3Rlci4gKi8KKwl1OCAgICBQYWQ7CisJX19sZTE2ICAgVmFsdWU7CQkvKiBWYWx1ZSB0byB3cml0ZS4gKi8KKwl1OCAgICBQYWQyWzYwXTsKK307CisKK3N0cnVjdCBmcmVlY29tX2lkZV9pbiB7CisJdTggICAgVHlwZTsJCS8qIFR5cGUgfCBJREUgcmVnaXN0ZXIuICovCisJdTggICAgUGFkWzYzXTsKK307CisKK3N0cnVjdCBmcmVlY29tX3N0YXR1cyB7CisJdTggICAgU3RhdHVzOworCXU4ICAgIFJlYXNvbjsKKwlfX2xlMTYgICBDb3VudDsKKwl1OCAgICBQYWRbNjBdOworfTsKKworLyogRnJlZWNvbSBzdHVmZnMgdGhlIGludGVycnVwdCBzdGF0dXMgaW4gdGhlIElOREVYX1NUQVQgYml0IG9mIHRoZSBpZGUKKyAqIHJlZ2lzdGVyLiAqLworI2RlZmluZSBGQ01fSU5UX1NUQVRVUwkJMHgwMiAvKiBJTkRFWF9TVEFUICovCisjZGVmaW5lIEZDTV9TVEFUVVNfQlVTWQkJMHg4MAorCisvKiBUaGVzZSBhcmUgdGhlIHBhY2tldCB0eXBlcy4gIFRoZSBsb3cgYml0IGluZGljYXRlcyB0aGF0IHRoaXMgY29tbWFuZAorICogc2hvdWxkIHdhaXQgZm9yIGFuIGludGVycnVwdC4gKi8KKyNkZWZpbmUgRkNNX1BBQ0tFVF9BVEFQSQkweDIxCisjZGVmaW5lIEZDTV9QQUNLRVRfU1RBVFVTCTB4MjAKKworLyogUmVjZWl2ZSBkYXRhIGZyb20gdGhlIElERSBpbnRlcmZhY2UuICBUaGUgQVRBUEkgcGFja2V0IGhhcyBhbHJlYWR5CisgKiB3YWl0ZWQsIHNvIHRoZSBkYXRhIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGUuICovCisjZGVmaW5lIEZDTV9QQUNLRVRfSU5QVVQJMHg4MQorCisvKiBTZW5kIGRhdGEgdG8gdGhlIElERSBpbnRlcmZhY2UuICovCisjZGVmaW5lIEZDTV9QQUNLRVRfT1VUUFVUCTB4MDEKKworLyogV3JpdGUgYSB2YWx1ZSB0byBhbiBpZGUgcmVnaXN0ZXIuICBPciB0aGUgaWRlIHJlZ2lzdGVyIHRvIHdyaXRlIGFmdGVyCisgKiBtdW5naW5nIHRoZSBhZGRyZXNzIGEgYml0LiAqLworI2RlZmluZSBGQ01fUEFDS0VUX0lERV9XUklURQkweDQwCisjZGVmaW5lIEZDTV9QQUNLRVRfSURFX1JFQUQJMHhDMAorCisvKiBBbGwgcGFja2V0cyAoZXhjZXB0IGZvciBzdGF0dXMpIGFyZSA2NCBieXRlcyBsb25nLiAqLworI2RlZmluZSBGQ01fUEFDS0VUX0xFTkdUSAkJNjQKKyNkZWZpbmUgRkNNX1NUQVRVU19QQUNLRVRfTEVOR1RICTQKKworc3RhdGljIGludAorZnJlZWNvbV9yZWFkZGF0YSAoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCXVuc2lnbmVkIGludCBpcGlwZSwgdW5zaWduZWQgaW50IG9waXBlLCBpbnQgY291bnQpCit7CisJc3RydWN0IGZyZWVjb21feGZlcl93cmFwICpmeGZyID0KKwkJKHN0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCAqKSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCWZ4ZnItPlR5cGUgPSBGQ01fUEFDS0VUX0lOUFVUIHwgMHgwMDsKKwlmeGZyLT5UaW1lb3V0ID0gMDsgICAgLyogU2hvcnQgdGltZW91dCBmb3IgZGVidWdnaW5nLiAqLworCWZ4ZnItPkNvdW50ID0gY3B1X3RvX2xlMzIgKGNvdW50KTsKKwltZW1zZXQgKGZ4ZnItPlBhZCwgMCwgc2l6ZW9mIChmeGZyLT5QYWQpKTsKKworCVVTX0RFQlVHUCgiUmVhZCBkYXRhIEZyZWVjb20hIChjPSVkKVxuIiwgY291bnQpOworCisJLyogSXNzdWUgdGhlIHRyYW5zZmVyIGNvbW1hbmQuICovCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBvcGlwZSwgZnhmciwKKwkJCUZDTV9QQUNLRVRfTEVOR1RILCBOVUxMKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AgKCJGcmVlY29tIHJlYWRkYXRhIHRyYW5zcG9ydCBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogTm93IHRyYW5zZmVyIGFsbCBvZiBvdXIgYmxvY2tzLiAqLworCVVTX0RFQlVHUCgiU3RhcnQgb2YgcmVhZFxuIik7CisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywgaXBpcGUsIHNyYi0+cmVxdWVzdF9idWZmZXIsCisJCQljb3VudCwgc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwlVU19ERUJVR1AoImZyZWVjb21fcmVhZGRhdGEgZG9uZSFcbiIpOworCisJaWYgKHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU0hPUlQpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCitzdGF0aWMgaW50CitmcmVlY29tX3dyaXRlZGF0YSAoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCWludCB1bnNpZ25lZCBpcGlwZSwgdW5zaWduZWQgaW50IG9waXBlLCBpbnQgY291bnQpCit7CisJc3RydWN0IGZyZWVjb21feGZlcl93cmFwICpmeGZyID0KKwkJKHN0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCAqKSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCWZ4ZnItPlR5cGUgPSBGQ01fUEFDS0VUX09VVFBVVCB8IDB4MDA7CisJZnhmci0+VGltZW91dCA9IDA7ICAgIC8qIFNob3J0IHRpbWVvdXQgZm9yIGRlYnVnZ2luZy4gKi8KKwlmeGZyLT5Db3VudCA9IGNwdV90b19sZTMyIChjb3VudCk7CisJbWVtc2V0IChmeGZyLT5QYWQsIDAsIHNpemVvZiAoZnhmci0+UGFkKSk7CisKKwlVU19ERUJVR1AoIldyaXRlIGRhdGEgRnJlZWNvbSEgKGM9JWQpXG4iLCBjb3VudCk7CisKKwkvKiBJc3N1ZSB0aGUgdHJhbnNmZXIgY29tbWFuZC4gKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIG9waXBlLCBmeGZyLAorCQkJRkNNX1BBQ0tFVF9MRU5HVEgsIE5VTEwpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCAoIkZyZWVjb20gd3JpdGVkYXRhIHRyYW5zcG9ydCBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogTm93IHRyYW5zZmVyIGFsbCBvZiBvdXIgYmxvY2tzLiAqLworCVVTX0RFQlVHUCgiU3RhcnQgb2Ygd3JpdGVcbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIG9waXBlLCBzcmItPnJlcXVlc3RfYnVmZmVyLAorCQkJY291bnQsIHNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisKKwlVU19ERUJVR1AoImZyZWVjb21fd3JpdGVkYXRhIGRvbmUhXG4iKTsKKwlpZiAocmVzdWx0ID4gVVNCX1NUT1JfWEZFUl9TSE9SVCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvci4KKyAqCisgKi8KK2ludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgZnJlZWNvbV9jYl93cmFwICpmY2I7CisJc3RydWN0IGZyZWVjb21fc3RhdHVzICAqZnN0OworCXVuc2lnbmVkIGludCBpcGlwZSwgb3BpcGU7CQkvKiBXZSBuZWVkIGJvdGggcGlwZXMuICovCisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKwlpbnQgbGVuZ3RoOworCisJZmNiID0gKHN0cnVjdCBmcmVlY29tX2NiX3dyYXAgKikgdXMtPmlvYnVmOworCWZzdCA9IChzdHJ1Y3QgZnJlZWNvbV9zdGF0dXMgKikgdXMtPmlvYnVmOworCisJVVNfREVCVUdQKCJGcmVlY29tIFRSQU5TUE9SVCBTVEFSVEVEXG4iKTsKKworCS8qIEdldCBoYW5kbGVzIGZvciBib3RoIHRyYW5zcG9ydHMuICovCisJb3BpcGUgPSB1cy0+c2VuZF9idWxrX3BpcGU7CisJaXBpcGUgPSB1cy0+cmVjdl9idWxrX3BpcGU7CisKKwkvKiBUaGUgQVRBUEkgQ29tbWFuZCBhbHdheXMgZ29lcyBvdXQgZmlyc3QuICovCisJZmNiLT5UeXBlID0gRkNNX1BBQ0tFVF9BVEFQSSB8IDB4MDA7CisJZmNiLT5UaW1lb3V0ID0gMDsKKwltZW1jcHkgKGZjYi0+QXRhcGksIHNyYi0+Y21uZCwgMTIpOworCW1lbXNldCAoZmNiLT5GaWxsZXIsIDAsIHNpemVvZiAoZmNiLT5GaWxsZXIpKTsKKworCVVTX0RFQlVHKHBkdW1wIChzcmItPmNtbmQsIDEyKSk7CisKKwkvKiBTZW5kIGl0IG91dC4gKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIG9waXBlLCBmY2IsCisJCQlGQ01fUEFDS0VUX0xFTkdUSCwgTlVMTCk7CisKKwkvKiBUaGUgRnJlZWNvbSBkZXZpY2Ugd2lsbCBvbmx5IGZhaWwgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIGluCisJICogVVNCIGxhbmQuICBJdCByZXR1cm5zIHRoZSBzdGF0dXMgaW4gaXRzIG93biByZWdpc3RlcnMsIHdoaWNoCisJICogY29tZSBiYWNrIGluIHRoZSBidWxrIHBpcGUuICovCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJVVNfREVCVUdQICgiZnJlZWNvbSB0cmFuc3BvcnQgZXJyb3JcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIFRoZXJlIGFyZSB0aW1lcyB3ZSBjYW4gb3B0aW1pemUgb3V0IHRoaXMgc3RhdHVzIHJlYWQsIGJ1dCBpdAorCSAqIGRvZXNuJ3QgaHVydCB1cyB0byBhbHdheXMgZG8gaXQgbm93LiAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgaXBpcGUsIGZzdCwKKwkJCUZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCVVTX0RFQlVHUCgiZm9vIFN0YXR1cyByZXN1bHQgJWQgJXVcbiIsIHJlc3VsdCwgcGFydGlhbCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVRyhwZHVtcCAoKHZvaWQgKikgZnN0LCBwYXJ0aWFsKSk7CisKKwkvKiBUaGUgZmlybXdhcmUgd2lsbCB0aW1lLW91dCBjb21tYW5kcyBhZnRlciAyMCBzZWNvbmRzLiBTb21lIGNvbW1hbmRzCisJICogY2FuIGxlZ2l0aW1hdGVseSB0YWtlIGxvbmdlciB0aGFuIHRoaXMsIHNvIHdlIHVzZSBhIGRpZmZlcmVudAorCSAqIGNvbW1hbmQgdGhhdCBvbmx5IHdhaXRzIGZvciB0aGUgaW50ZXJydXB0IGFuZCB0aGVuIHNlbmRzIHN0YXR1cywKKwkgKiB3aXRob3V0IGhhdmluZyB0byBzZW5kIGEgbmV3IEFUQVBJIGNvbW1hbmQgdG8gdGhlIGRldmljZS4gCisJICoKKwkgKiBOT1RFOiBUaGVyZSBpcyBzb21lIGluZGljYXRpb24gdGhhdCBhIGRhdGEgdHJhbnNmZXIgYWZ0ZXIgYSB0aW1lb3V0CisJICogbWF5IG5vdCB3b3JrLCBidXQgdGhhdCBpcyBhIGNvbmRpdGlvbiB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uCisJICovCisJd2hpbGUgKGZzdC0+U3RhdHVzICYgRkNNX1NUQVRVU19CVVNZKSB7CisJCVVTX0RFQlVHUCgiMjAgc2Vjb25kIFVTQi9BVEFQSSBicmlkZ2UgVElNRU9VVCBvY2N1cnJlZCFcbiIpOworCQlVU19ERUJVR1AoImZzdC0+U3RhdHVzIGlzICV4XG4iLCBmc3QtPlN0YXR1cyk7CisKKwkJLyogR2V0IHRoZSBzdGF0dXMgYWdhaW4gKi8KKwkJZmNiLT5UeXBlID0gRkNNX1BBQ0tFVF9TVEFUVVM7CisJCWZjYi0+VGltZW91dCA9IDA7CisJCW1lbXNldCAoZmNiLT5BdGFwaSwgMCwgc2l6ZW9mKGZjYi0+QXRhcGkpKTsKKwkJbWVtc2V0IChmY2ItPkZpbGxlciwgMCwgc2l6ZW9mIChmY2ItPkZpbGxlcikpOworCisJCS8qIFNlbmQgaXQgb3V0LiAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIG9waXBlLCBmY2IsCisJCQkJRkNNX1BBQ0tFVF9MRU5HVEgsIE5VTEwpOworCisJCS8qIFRoZSBGcmVlY29tIGRldmljZSB3aWxsIG9ubHkgZmFpbCBpZiB0aGVyZSBpcyBzb21ldGhpbmcKKwkJICogd3JvbmcgaW4gVVNCIGxhbmQuICBJdCByZXR1cm5zIHRoZSBzdGF0dXMgaW4gaXRzIG93bgorCQkgKiByZWdpc3RlcnMsIHdoaWNoIGNvbWUgYmFjayBpbiB0aGUgYnVsayBwaXBlLgorCQkgKi8KKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCVVTX0RFQlVHUCAoImZyZWVjb20gdHJhbnNwb3J0IGVycm9yXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKworCQkvKiBnZXQgdGhlIGRhdGEgKi8KKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBpcGlwZSwgZnN0LAorCQkJCUZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCisJCVVTX0RFQlVHUCgiYmFyIFN0YXR1cyByZXN1bHQgJWQgJXVcbiIsIHJlc3VsdCwgcGFydGlhbCk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlVU19ERUJVRyhwZHVtcCAoKHZvaWQgKikgZnN0LCBwYXJ0aWFsKSk7CisJfQorCisJaWYgKHBhcnRpYWwgIT0gNCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwlpZiAoKGZzdC0+U3RhdHVzICYgMSkgIT0gMCkgeworCQlVU19ERUJVR1AoIm9wZXJhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwkvKiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBoYXZlIGFzIG11Y2ggZGF0YSBhdmFpbGFibGUgYXMgd2UKKwkgKiByZXF1ZXN0ZWQuICBJZiB5b3UgYXNrIGZvciBtb3JlIHRoYW4gdGhlIGRldmljZSBoYXMsIHRoaXMgcmVhZHMKKwkgKiBhbmQgc3VjaCB3aWxsIGhhbmcuICovCisJVVNfREVCVUdQKCJEZXZpY2UgaW5kaWNhdGVzIHRoYXQgaXQgaGFzICVkIGJ5dGVzIGF2YWlsYWJsZVxuIiwKKwkJCWxlMTZfdG9fY3B1IChmc3QtPkNvdW50KSk7CisJVVNfREVCVUdQKCJTQ1NJIHJlcXVlc3RlZCAlZFxuIiwgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pOworCisJLyogRmluZCB0aGUgbGVuZ3RoIHdlIGRlc2lyZSB0byByZWFkLiAqLworCXN3aXRjaCAoc3JiLT5jbW5kWzBdKSB7CisJCWNhc2UgSU5RVUlSWToKKwkJY2FzZSBSRVFVRVNUX1NFTlNFOgkJLyogMTYgb3IgMTggYnl0ZXM/IHNwZWMgc2F5cyAxOCwgbG90cyBvZiBkZXZpY2VzIG9ubHkgaGF2ZSAxNiAqLworCQljYXNlIE1PREVfU0VOU0U6CisJCWNhc2UgTU9ERV9TRU5TRV8xMDoKKwkJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGZzdC0+Q291bnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisgCQkJbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJfQorCisJLyogdmVyaWZ5IHRoYXQgdGhpcyBhbW91bnQgaXMgbGVnYWwgKi8KKwlpZiAobGVuZ3RoID4gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKKwkJbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJCVVTX0RFQlVHUCgiVHJ1bmNhdGluZyByZXF1ZXN0IHRvIG1hdGNoIGJ1ZmZlciBsZW5ndGg6ICVkXG4iLCBsZW5ndGgpOworCX0KKworCS8qIFdoYXQgd2UgZG8gbm93IGRlcGVuZHMgb24gd2hhdCBkaXJlY3Rpb24gdGhlIGRhdGEgaXMgc3VwcG9zZWQgdG8KKwkgKiBtb3ZlIGluLiAqLworCisJc3dpdGNoICh1cy0+c3JiLT5zY19kYXRhX2RpcmVjdGlvbikgeworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQkvKiBjYXRjaCBib2d1cyAicmVhZCAwIGxlbmd0aCIgY2FzZSAqLworCQlpZiAoIWxlbmd0aCkKKwkJCWJyZWFrOworCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc3RhdHVzIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UKKwkJICogd2FudHMgZGF0YSBhcyB3ZWxsLiAqLworCQlpZiAoKGZzdC0+U3RhdHVzICYgRFJRX1NUQVQpID09IDAgfHwgKGZzdC0+UmVhc29uICYgMykgIT0gMikgeworCQkJVVNfREVCVUdQKCJTQ1NJIHdhbnRzIGRhdGEsIGRyaXZlIGRvZXNuJ3QgaGF2ZSBhbnlcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKwkJcmVzdWx0ID0gZnJlZWNvbV9yZWFkZGF0YSAoc3JiLCB1cywgaXBpcGUsIG9waXBlLCBsZW5ndGgpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlVU19ERUJVR1AoIkZDTTogV2FpdGluZyBmb3Igc3RhdHVzXG4iKTsKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBpcGlwZSwgZnN0LAorCQkJCUZDTV9QQUNLRVRfTEVOR1RILCAmcGFydGlhbCk7CisJCVVTX0RFQlVHKHBkdW1wICgodm9pZCAqKSBmc3QsIHBhcnRpYWwpKTsKKworCQlpZiAocGFydGlhbCAhPSA0IHx8IHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU0hPUlQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlpZiAoKGZzdC0+U3RhdHVzICYgRVJSX1NUQVQpICE9IDApIHsKKwkJCVVTX0RFQlVHUCgib3BlcmF0aW9uIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCQlpZiAoKGZzdC0+UmVhc29uICYgMykgIT0gMykgeworCQkJVVNfREVCVUdQKCJEcml2ZSBzZWVtcyBzdGlsbCBodW5ncnlcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKwkJVVNfREVCVUdQKCJUcmFuc2ZlciBoYXBweVxuIik7CisJCWJyZWFrOworCisJY2FzZSBETUFfVE9fREVWSUNFOgorCQkvKiBjYXRjaCBib2d1cyAid3JpdGUgMCBsZW5ndGgiIGNhc2UgKi8KKwkJaWYgKCFsZW5ndGgpCisJCQlicmVhazsKKwkJLyogTWFrZSBzdXJlIHRoZSBzdGF0dXMgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSB3YW50cyB0bworCQkgKiBzZW5kIHVzIGRhdGEuICovCisJCS8qICEhSU1QTEVNRU5UISEgKi8KKwkJcmVzdWx0ID0gZnJlZWNvbV93cml0ZWRhdGEgKHNyYiwgdXMsIGlwaXBlLCBvcGlwZSwgbGVuZ3RoKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJVVNfREVCVUdQKCJGQ006IFdhaXRpbmcgZm9yIHN0YXR1c1xuIik7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgaXBpcGUsIGZzdCwKKwkJCQlGQ01fUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCisJCWlmIChwYXJ0aWFsICE9IDQgfHwgcmVzdWx0ID4gVVNCX1NUT1JfWEZFUl9TSE9SVCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWlmICgoZnN0LT5TdGF0dXMgJiBFUlJfU1RBVCkgIT0gMCkgeworCQkJVVNfREVCVUdQKCJvcGVyYXRpb24gZmFpbGVkXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJCWlmICgoZnN0LT5SZWFzb24gJiAzKSAhPSAzKSB7CisJCQlVU19ERUJVR1AoIkRyaXZlIHNlZW1zIHN0aWxsIGh1bmdyeVxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCisJCVVTX0RFQlVHUCgiVHJhbnNmZXIgaGFwcHlcbiIpOworCQlicmVhazsKKworCisJY2FzZSBETUFfTk9ORToKKwkJLyogRWFzeSwgZG8gbm90aGluZy4gKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBzaG91bGQgbmV2ZXIgaGl0IGhlcmUgLS0gZmlsdGVyZWQgaW4gdXNiLmMgKi8KKwkJVVNfREVCVUdQICgiZnJlZWNvbSB1bmltcGxlbWVudGVkIGRpcmVjdGlvbjogJWRcbiIsCisJCQkJdXMtPnNyYi0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQkvLyBSZXR1cm4gZmFpbCwgU0NTSSBzZWVtcyB0byBoYW5kbGUgdGhpcyBiZXR0ZXIuCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK2ludAorZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJlc3VsdDsKKwljaGFyICpidWZmZXIgPSB1cy0+aW9idWY7CisKKwkvKiBUaGUgRE1BLW1hcHBlZCBJL08gYnVmZmVyIGlzIDY0IGJ5dGVzIGxvbmcsIGp1c3QgcmlnaHQgZm9yCisJICogYWxsIG91ciBwYWNrZXRzLiAgTm8gbmVlZCB0byBhbGxvY2F0ZSBhbnkgZXh0cmEgYnVmZmVyIHNwYWNlLgorCSAqLworCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJCTB4NGMsIDB4YzAsIDB4NDM0NiwgMHgwLCBidWZmZXIsIDB4MjAsIDMqSFopOworCWJ1ZmZlclszMl0gPSAnXDAnOworCVVTX0RFQlVHUCgiU3RyaW5nIHJldHVybmVkIGZyb20gRkMgaW5pdCBpczogJXNcbiIsIGJ1ZmZlcik7CisKKwkvKiBTcGVjaWFsIHRoYW5rcyB0byB0aGUgcGVvcGxlIGF0IEZyZWVjb20gZm9yIHByb3ZpZGluZyBtZSB3aXRoCisJICogdGhpcyAibWFnaWMgc2VxdWVuY2UiLCB3aGljaCB0aGV5IHVzZSBpbiB0aGVpciBXaW5kb3dzIGFuZCBNYWNPUworCSAqIGRyaXZlcnMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBhdHRhY2hlZCBwZXJoaXBlcmFscyBhcmUKKwkgKiBwcm9wZXJseSByZXNldC4KKwkgKi8KKworCS8qIHNlbmQgcmVzZXQgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJMHg0ZCwgMHg0MCwgMHgyNGQ4LCAweDAsIE5VTEwsIDB4MCwgMypIWik7CisJVVNfREVCVUdQKCJyZXN1bHQgZnJvbSBhY3RpdmF0ZSByZXNldCBpcyAlZFxuIiwgcmVzdWx0KTsKKworCS8qIHdhaXQgMjUwbXMgKi8KKwltZGVsYXkoMjUwKTsKKworCS8qIGNsZWFyIHJlc2V0ICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCTB4NGQsIDB4NDAsIDB4MjRmOCwgMHgwLCBOVUxMLCAweDAsIDMqSFopOworCVVTX0RFQlVHUCgicmVzdWx0IGZyb20gY2xlYXIgcmVzZXQgaXMgJWRcbiIsIHJlc3VsdCk7CisKKwkvKiB3YWl0IDMgc2Vjb25kcyAqLworCW1kZWxheSgzICogMTAwMCk7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK2ludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlwcmludGsgKEtFUk5fQ1JJVCAiZnJlZWNvbSByZXNldCBjYWxsZWRcbiIpOworCisJLyogV2UgZG9uJ3QgcmVhbGx5IGhhdmUgdGhpcyBmZWF0dXJlLiAqLworCXJldHVybiBGQUlMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKK3N0YXRpYyB2b2lkIHBkdW1wICh2b2lkICppYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworCXN0YXRpYyBjaGFyIGxpbmVbODBdOworCWludCBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGlidWZmZXI7CisJaW50IGksIGo7CisJaW50IGZyb20sIGJhc2U7CisKKwlvZmZzZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlpZiAoKGkgJiAxNSkgPT0gMCkgeworCQkJaWYgKGkgPiAwKSB7CisJCQkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiIC0gIik7CisJCQkJZm9yIChqID0gaSAtIDE2OyBqIDwgaTsgaisrKSB7CisJCQkJCWlmIChidWZmZXJbal0gPj0gMzIgJiYgYnVmZmVyW2pdIDw9IDEyNikKKwkJCQkJCWxpbmVbb2Zmc2V0KytdID0gYnVmZmVyW2pdOworCQkJCQllbHNlCisJCQkJCQlsaW5lW29mZnNldCsrXSA9ICcuJzsKKwkJCQl9CisJCQkJbGluZVtvZmZzZXRdID0gMDsKKwkJCQlVU19ERUJVR1AoIiVzXG4iLCBsaW5lKTsKKwkJCQlvZmZzZXQgPSAwOworCQkJfQorCQkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiJTA4eDoiLCBpKTsKKwkJfQorCQllbHNlIGlmICgoaSAmIDcpID09IDApIHsKKwkJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAtIik7CisJCX0KKwkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiICUwMngiLCBidWZmZXJbaV0gJiAweGZmKTsKKwl9CisKKwkvKiBBZGQgdGhlIGxhc3QgImNodW5rIiBvZiBkYXRhLiAqLworCWZyb20gPSAobGVuZ3RoIC0gMSkgJSAxNjsKKwliYXNlID0gKChsZW5ndGggLSAxKSAvIDE2KSAqIDE2OworCisJZm9yIChpID0gZnJvbSArIDE7IGkgPCAxNjsgaSsrKQorCQlvZmZzZXQgKz0gc3ByaW50ZiAobGluZStvZmZzZXQsICIgICAiKTsKKwlpZiAoZnJvbSA8IDgpCisJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAgIik7CisJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiIC0gIik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGZyb207IGkrKykgeworCQlpZiAoYnVmZmVyW2Jhc2UraV0gPj0gMzIgJiYgYnVmZmVyW2Jhc2UraV0gPD0gMTI2KQorCQkJbGluZVtvZmZzZXQrK10gPSBidWZmZXJbYmFzZStpXTsKKwkJZWxzZQorCQkJbGluZVtvZmZzZXQrK10gPSAnLic7CisJfQorCWxpbmVbb2Zmc2V0XSA9IDA7CisJVVNfREVCVUdQKCIlc1xuIiwgbGluZSk7CisJb2Zmc2V0ID0gMDsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDEyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaApAQCAtMCwwICsxLDM2IEBACisvKiBEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yCisgKgorICogJElkOiBmcmVlY29tLmgsdiAxLjQgMjAwMC8wOC8yOSAxNDo0OToxNSBkbGJyb3duIEV4cCAkCisgKgorICogRnJlZWNvbSB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+CisgKgorICogU2VlIGZyZWVjb20uYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0ZSRUVDT01fVVNCX0gKKyNkZWZpbmUgX0ZSRUVDT01fVVNCX0gKKworZXh0ZXJuIGludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiBpbnQgZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDZmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIFNwZWNpYWwgSW5pdGlhbGl6ZXJzIGZvciBjZXJ0YWluIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICoKKyAqICRJZDogaW5pdGlhbGl6ZXJzLmMsdiAxLjIgMjAwMC8wOS8wNiAyMjozNTo1NyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTksIDIwMDAgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKKy8qIFRoaXMgcGxhY2VzIHRoZSBTaHV0dGxlL1NDTSBVU0I8LT5TQ1NJIGJyaWRnZSBkZXZpY2VzIGluIG11bHRpLXRhcmdldAorICogbW9kZSAqLworaW50IHVzYl9zdG9yX2V1c2NzaV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJBdHRlbXB0aW5nIHRvIGluaXQgZVVTQ1NJIGJyaWRnZS4uLlxuIik7CisJdXMtPmlvYnVmWzBdID0gMHgxOworCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkweDBDLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfVkVORE9SLAorCQkJMHgwMSwgMHgwLCB1cy0+aW9idWYsIDB4MSwgNSpIWik7CisJVVNfREVCVUdQKCItLSByZXN1bHQgaXMgJWRcbiIsIHJlc3VsdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCB0byBhY3RpdmF0ZSBhbGwgZm91ciBzbG90cyBvbiB0aGUgVUNSLTYxUzJCCisgKiBmbGFzaCByZWFkZXIgKi8KK2ludCB1c2Jfc3Rvcl91Y3I2MXMyYl9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgYnVsa19jYl93cmFwICpiY2IgPSAoc3RydWN0IGJ1bGtfY2Jfd3JhcCopIHVzLT5pb2J1ZjsKKwlzdHJ1Y3QgYnVsa19jc193cmFwICpiY3MgPSAoc3RydWN0IGJ1bGtfY3Nfd3JhcCopIHVzLT5pb2J1ZjsKKwlpbnQgcmVzLCBwYXJ0aWFsOworCXN0YXRpYyBjaGFyIGluaXRfc3RyaW5nW10gPSAiXHhlY1x4MGFceDA2XHgwMCRQQ0NISVBTIjsKKworCVVTX0RFQlVHUCgiU2VuZGluZyBVQ1ItNjFTMkIgaW5pdGlhbGl6YXRpb24gcGFja2V0Li4uXG4iKTsKKworCWJjYi0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNfQlVMS19DQl9TSUdOKTsKKwliY2ItPlRhZyA9IDA7CisJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSBjcHVfdG9fbGUzMigwKTsKKwliY2ItPkZsYWdzID0gYmNiLT5MdW4gPSAwOworCWJjYi0+TGVuZ3RoID0gc2l6ZW9mKGluaXRfc3RyaW5nKSAtIDE7CisJbWVtc2V0KGJjYi0+Q0RCLCAwLCBzaXplb2YoYmNiLT5DREIpKTsKKwltZW1jcHkoYmNiLT5DREIsIGluaXRfc3RyaW5nLCBzaXplb2YoaW5pdF9zdHJpbmcpIC0gMSk7CisKKwlyZXMgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLCBiY2IsCisJCQlVU19CVUxLX0NCX1dSQVBfTEVOLCAmcGFydGlhbCk7CisJaWYocmVzKQorCQlyZXR1cm4gcmVzOworCisJVVNfREVCVUdQKCJHZXR0aW5nIHN0YXR1cyBwYWNrZXQuLi5cbiIpOworCXJlcyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsIGJjcywKKwkJCVVTX0JVTEtfQ1NfV1JBUF9MRU4sICZwYXJ0aWFsKTsKKworCXJldHVybiAocmVzID8gLTEgOiAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzIzODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBTcGVjaWFsIEluaXRpYWxpemVycyBmb3IgY2VydGFpbiBVU0IgTWFzcyBTdG9yYWdlIGRldmljZXMKKyAqCisgKiAkSWQ6IGluaXRpYWxpemVycy5oLHYgMS4xIDIwMDAvMDgvMjkgMjM6MDc6MDIgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworLyogVGhpcyBwbGFjZXMgdGhlIFNodXR0bGUvU0NNIFVTQjwtPlNDU0kgYnJpZGdlIGRldmljZXMgaW4gbXVsdGktdGFyZ2V0CisgKiBtb2RlICovCitpbnQgdXNiX3N0b3JfZXVzY3NpX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK2ludCBzZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworI2VuZGlmCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYWN0aXZhdGUgYWxsIGZvdXIgc2xvdHMgb24gdGhlIFVDUi02MVMyQgorICogZmxhc2ggcmVhZGVyICovCitpbnQgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiMzI4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTAsMCArMSwxNDQyIEBACisvKiBUcmFuc3BvcnQgJiBQcm90b2NvbCBEcml2ZXIgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMKKyAqCisgKiAkSWQ6IGlzZDIwMC5jLHYgMS4xNiAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlOgorICogICAoQykgMjAwMS0yMDAyIEJq9nJuIFN0ZW5iZXJnIChiam9ybkBoYXh4LnNlKQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoQykgMjAwMiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLm9yZz4KKyAqCisgKiBJbml0aWFsIHdvcms6CisgKiAgIChDKSAyMDAwIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gKHN1cHBvcnRAaW4tc3lzdGVtLmNvbSkKKyAqCisgKiBUaGUgSVNEMjAwIEFTSUMgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBBVEEgZGV2aWNlcy4gIFRoZSBjaGlwCisgKiBkb2VzIGltcGxlbWVudCBhbiBpbnRlcmZhY2UsIHRoZSBBVEEgQ29tbWFuZCBCbG9jayAoQVRBQ0IpIHdoaWNoIHByb3ZpZGVzCisgKiBhIG1lYW5zIG9mIHBhc3NpbmcgQVRBIGNvbW1hbmRzIGFuZCBBVEEgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gYSBkZXZpY2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogSGlzdG9yeToKKyAqCisgKiAgMjAwMi0xMC0xOTogUmVtb3ZlZCB0aGUgc3BlY2lhbGl6ZWQgdHJhbnNmZXIgcm91dGluZXMuCisgKgkJKEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+KQorICogIDIwMDEtMDItMjQ6IFJlbW92ZWQgbG90cyBvZiBkdXBsaWNhdGUgY29kZSBhbmQgc2ltcGxpZmllZCB0aGUgc3RydWN0dXJlLgorICoJICAgICAgKGJqb3JuQGhheHguc2UpCisgKiAgMjAwMi0wMS0xNjogRml4ZWQgZW5kaWFubmVzcyBidWcgc28gaXQgd29ya3Mgb24gdGhlIHBwYyBhcmNoLgorICoJICAgICAgKEx1YyBTYWlsbGFyZCA8bHVjQHNhaWxsYXJkLm9yZz4pCisgKiAgMjAwMi0wMS0xNzogQWxsIGJpdGZpZWxkcyByZW1vdmVkLgorICoJICAgICAgKGJqb3JuQGhheHguc2UpCisgKi8KKworCisvKiBJbmNsdWRlIGZpbGVzICovCisKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInNjc2lnbHVlLmgiCisjaW5jbHVkZSAiaXNkMjAwLmgiCisKKworLyogVGltZW91dCBkZWZpbmVzIChpbiBTZWNvbmRzKSAqLworCisjZGVmaW5lIElTRDIwMF9FTlVNX0JTWV9USU1FT1VUCQkzNQorI2RlZmluZSBJU0QyMDBfRU5VTV9ERVRFQ1RfVElNRU9VVCAgICAgIDMwCisjZGVmaW5lIElTRDIwMF9ERUZBVUxUX1RJTUVPVVQJCTMwCisKKy8qIGRldmljZSBmbGFncyAqLworI2RlZmluZSBERl9BVEFfREVWSUNFCQkweDAwMDEKKyNkZWZpbmUgREZfTUVESUFfU1RBVFVTX0VOQUJMRUQJMHgwMDAyCisjZGVmaW5lIERGX1JFTU9WQUJMRV9NRURJQQkweDAwMDQKKworLyogY2FwYWJpbGl0eSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FQQUJJTElUWV9ETUEJCTB4MDEKKyNkZWZpbmUgQ0FQQUJJTElUWV9MQkEJCTB4MDIKKworLyogY29tbWFuZF9zZXRYIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDT01NQU5EU0VUX1JFTU9WQUJMRQkweDAyCisjZGVmaW5lIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTIDB4MTAKKworLyogQVRBIFZlbmRvciBTcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIEFUQV9BRERSRVNTX0RFVkhFQURfU1REICAgICAgMHhhMAorI2RlZmluZSBBVEFfQUREUkVTU19ERVZIRUFEX0xCQV9NT0RFIDB4NDAgICAgCisjZGVmaW5lIEFUQV9BRERSRVNTX0RFVkhFQURfU0xBVkUgICAgMHgxMAorCisvKiBBY3Rpb24gU2VsZWN0IGJpdHMgKi8KKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF8wCSAgICAgMHgwMQorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzEJICAgICAweDAyCisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfMgkgICAgIDB4MDQKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF8zCSAgICAgMHgwOAorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzQJICAgICAweDEwCisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfNQkgICAgIDB4MjAKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF82CSAgICAgMHg0MAorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzcJICAgICAweDgwCisKKy8qIFJlZ2lzdGVyIFNlbGVjdCBiaXRzICovCisjZGVmaW5lIFJFR19BTFRFUk5BVEVfU1RBVFVTCTB4MDEKKyNkZWZpbmUgUkVHX0RFVklDRV9DT05UUk9MCTB4MDEKKyNkZWZpbmUgUkVHX0VSUk9SCQkweDAyCisjZGVmaW5lIFJFR19GRUFUVVJFUwkJMHgwMgorI2RlZmluZSBSRUdfU0VDVE9SX0NPVU5UCTB4MDQKKyNkZWZpbmUgUkVHX1NFQ1RPUl9OVU1CRVIJMHgwOAorI2RlZmluZSBSRUdfQ1lMSU5ERVJfTE9XCTB4MTAKKyNkZWZpbmUgUkVHX0NZTElOREVSX0hJR0gJMHgyMAorI2RlZmluZSBSRUdfREVWSUNFX0hFQUQJCTB4NDAKKyNkZWZpbmUgUkVHX1NUQVRVUwkJMHg4MAorI2RlZmluZSBSRUdfQ09NTUFORAkJMHg4MAorCisvKiBBVEEgZXJyb3IgZGVmaW5pdGlvbnMgbm90IGluIDxsaW51eC9oZHJlZy5oPiAqLworI2RlZmluZSBBVEFfRVJST1JfTUVESUFfQ0hBTkdFCQkweDIwCisKKy8qIEFUQSBjb21tYW5kIGRlZmluaXRpb25zIG5vdCBpbiA8bGludXgvaGRyZWcuaD4gKi8KKyNkZWZpbmUgQVRBX0NPTU1BTkRfR0VUX01FRElBX1NUQVRVUwkweERBCisjZGVmaW5lIEFUQV9DT01NQU5EX01FRElBX0VKRUNUCQkweEVECisKKy8qIEFUQSBkcml2ZSBjb250cm9sIGRlZmluaXRpb25zICovCisjZGVmaW5lIEFUQV9EQ19ESVNBQkxFX0lOVEVSUlVQVFMJMHgwMgorI2RlZmluZSBBVEFfRENfUkVTRVRfQ09OVFJPTExFUgkJMHgwNAorI2RlZmluZSBBVEFfRENfUkVFTkFCTEVfQ09OVFJPTExFUgkweDAwCisKKy8qCisgKiAgR2VuZXJhbCBwdXJwb3NlIHJldHVybiBjb2RlcworICovIAorCisjZGVmaW5lIElTRDIwMF9FUlJPUgkJLTEKKyNkZWZpbmUgSVNEMjAwX0dPT0QJCSAwCisKKy8qCisgKiBUcmFuc3BvcnQgcmV0dXJuIGNvZGVzCisgKi8KKworI2RlZmluZSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QgICAgICAgMCAgIC8qIFRyYW5zcG9ydCBnb29kLCBjb21tYW5kIGdvb2QgICAgICovCisjZGVmaW5lIElTRDIwMF9UUkFOU1BPUlRfRkFJTEVEICAgICAxICAgLyogVHJhbnNwb3J0IGdvb2QsIGNvbW1hbmQgZmFpbGVkICAgKi8KKyNkZWZpbmUgSVNEMjAwX1RSQU5TUE9SVF9FUlJPUiAgICAgIDIgICAvKiBUcmFuc3BvcnQgYmFkIChpLmUuIGRldmljZSBkZWFkKSAqLworCisvKiBkcml2ZXIgYWN0aW9uIGNvZGVzICovCisjZGVmaW5lCUFDVElPTl9SRUFEX1NUQVRVUwkwCisjZGVmaW5lCUFDVElPTl9SRVNFVAkJMQorI2RlZmluZQlBQ1RJT05fUkVFTkFCTEUJCTIKKyNkZWZpbmUJQUNUSU9OX1NPRlRfUkVTRVQJMworI2RlZmluZQlBQ1RJT05fRU5VTQkJNAorI2RlZmluZQlBQ1RJT05fSURFTlRJRlkJCTUKKworCisvKgorICogYXRhX2NkYiBzdHJ1Y3QKKyAqLworCisKK3VuaW9uIGF0YV9jZGIgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgU2lnbmF0dXJlQnl0ZTA7CisJCXVuc2lnbmVkIGNoYXIgU2lnbmF0dXJlQnl0ZTE7CisJCXVuc2lnbmVkIGNoYXIgQWN0aW9uU2VsZWN0OworCQl1bnNpZ25lZCBjaGFyIFJlZ2lzdGVyU2VsZWN0OworCQl1bnNpZ25lZCBjaGFyIFRyYW5zZmVyQmxvY2tTaXplOworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTNGNjsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjE7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUYyOworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTFGMzsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjQ7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUY1OworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTFGNjsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjc7CisJCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWRbM107CisJfSBnZW5lcmljOworCisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBTaWduYXR1cmVCeXRlMDsKKwkJdW5zaWduZWQgY2hhciBTaWduYXR1cmVCeXRlMTsKKwkJdW5zaWduZWQgY2hhciBBY3Rpb25TZWxlY3Q7CisJCXVuc2lnbmVkIGNoYXIgUmVnaXN0ZXJTZWxlY3Q7CisJCXVuc2lnbmVkIGNoYXIgVHJhbnNmZXJCbG9ja1NpemU7CisJCXVuc2lnbmVkIGNoYXIgQWx0ZXJuYXRlU3RhdHVzQnl0ZTsKKwkJdW5zaWduZWQgY2hhciBFcnJvckJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgU2VjdG9yQ291bnRCeXRlOworCQl1bnNpZ25lZCBjaGFyIFNlY3Rvck51bWJlckJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgQ3lsaW5kZXJMb3dCeXRlOworCQl1bnNpZ25lZCBjaGFyIEN5bGluZGVySGlnaEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgRGV2aWNlSGVhZEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgU3RhdHVzQnl0ZTsKKwkJdW5zaWduZWQgY2hhciBSZXNlcnZlZFszXTsKKwl9IHJlYWQ7CisKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIFNpZ25hdHVyZUJ5dGUwOworCQl1bnNpZ25lZCBjaGFyIFNpZ25hdHVyZUJ5dGUxOworCQl1bnNpZ25lZCBjaGFyIEFjdGlvblNlbGVjdDsKKwkJdW5zaWduZWQgY2hhciBSZWdpc3RlclNlbGVjdDsKKwkJdW5zaWduZWQgY2hhciBUcmFuc2ZlckJsb2NrU2l6ZTsKKwkJdW5zaWduZWQgY2hhciBEZXZpY2VDb250cm9sQnl0ZTsKKwkJdW5zaWduZWQgY2hhciBGZWF0dXJlc0J5dGU7CisJCXVuc2lnbmVkIGNoYXIgU2VjdG9yQ291bnRCeXRlOworCQl1bnNpZ25lZCBjaGFyIFNlY3Rvck51bWJlckJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgQ3lsaW5kZXJMb3dCeXRlOworCQl1bnNpZ25lZCBjaGFyIEN5bGluZGVySGlnaEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgRGV2aWNlSGVhZEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgQ29tbWFuZEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWRbM107CisJfSB3cml0ZTsKK307CisKKworLyoKKyAqIElucXVpcnkgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgaXMgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgdGFyZ2V0CisgKiBhZnRlciBpdCByZWNlaXZlcyBhbiBpbnF1aXJ5LgorICoKKyAqIFRoaXMgc3RydWN0dXJlIG1heSBiZSBleHRlbmRlZCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZAorICogaW4gdGhlIGZpZWxkIEFkZGl0aW9uYWxMZW5ndGguIFRoZSBkZWZpbmVkIHNpemUgY29uc3RhbnQgb25seQorICogaW5jbHVkZXMgZmllbGRzIHRocm91Z2ggUHJvZHVjdFJldmlzaW9uTGV2ZWwuCisgKi8KKworLyoKKyAqIERldmljZVR5cGUgZmllbGQKKyAqLworI2RlZmluZSBESVJFQ1RfQUNDRVNTX0RFVklDRQkgICAgMHgwMCAgICAvKiBkaXNrcyAqLworI2RlZmluZSBERVZJQ0VfUkVNT1ZBQkxFCQkweDgwCisKK3N0cnVjdCBpbnF1aXJ5X2RhdGEgeworICAgCXVuc2lnbmVkIGNoYXIgRGV2aWNlVHlwZTsKKwl1bnNpZ25lZCBjaGFyIERldmljZVR5cGVNb2RpZmllcjsKKwl1bnNpZ25lZCBjaGFyIFZlcnNpb25zOworCXVuc2lnbmVkIGNoYXIgRm9ybWF0OyAKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxMZW5ndGg7CisJdW5zaWduZWQgY2hhciBSZXNlcnZlZFsyXTsKKwl1bnNpZ25lZCBjaGFyIENhcGFiaWxpdHk7CisJdW5zaWduZWQgY2hhciBWZW5kb3JJZFs4XTsKKwl1bnNpZ25lZCBjaGFyIFByb2R1Y3RJZFsxNl07CisJdW5zaWduZWQgY2hhciBQcm9kdWN0UmV2aXNpb25MZXZlbFs0XTsKKwl1bnNpZ25lZCBjaGFyIFZlbmRvclNwZWNpZmljWzIwXTsKKwl1bnNpZ25lZCBjaGFyIFJlc2VydmVkM1s0MF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIElOUVVJUlkgZGF0YSBidWZmZXIgc2l6ZQorICovCisKKyNkZWZpbmUgSU5RVUlSWURBVEFCVUZGRVJTSVpFIDM2CisKKworLyoKKyAqIElTRDIwMCBDT05GSUcgZGF0YSBzdHJ1Y3QKKyAqLworCisjZGVmaW5lIEFUQUNGR19USU1JTkcJICAweDBmCisjZGVmaW5lIEFUQUNGR19BVEFQSV9SRVNFVCAgICAgMHgxMAorI2RlZmluZSBBVEFDRkdfTUFTVEVSCSAgMHgyMAorI2RlZmluZSBBVEFDRkdfQkxPQ0tTSVpFICAgICAgIDB4YTAKKworI2RlZmluZSBBVEFDRkdFX0xBU1RfTFVOICAgICAgIDB4MDcKKyNkZWZpbmUgQVRBQ0ZHRV9ERVNDX09WRVJSSURFICAweDA4CisjZGVmaW5lIEFUQUNGR0VfU1RBVEVfU1VTUEVORCAgMHgxMAorI2RlZmluZSBBVEFDRkdFX1NLSVBfQk9PVCAgICAgIDB4MjAKKyNkZWZpbmUgQVRBQ0ZHRV9DT05GX0RFU0MyICAgICAweDQwCisjZGVmaW5lIEFUQUNGR0VfSU5JVF9TVEFUVVMgICAgMHg4MAorCisjZGVmaW5lIENGR19DQVBBQklMSVRZX1NSU1QgICAgMHgwMQorCitzdHJ1Y3QgaXNkMjAwX2NvbmZpZyB7CisJdW5zaWduZWQgY2hhciBFdmVudE5vdGlmaWNhdGlvbjsKKwl1bnNpZ25lZCBjaGFyIEV4dGVybmFsQ2xvY2s7CisJdW5zaWduZWQgY2hhciBBVEFJbml0VGltZW91dDsKKwl1bnNpZ25lZCBjaGFyIEFUQUNvbmZpZzsKKwl1bnNpZ25lZCBjaGFyIEFUQU1ham9yQ29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIEFUQU1pbm9yQ29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIEFUQUV4dHJhQ29uZmlnOworCXVuc2lnbmVkIGNoYXIgQ2FwYWJpbGl0eTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyoKKyAqIElTRDIwMCBkcml2ZXIgaW5mb3JtYXRpb24gc3RydWN0CisgKi8KKworc3RydWN0IGlzZDIwMF9pbmZvIHsKKwlzdHJ1Y3QgaW5xdWlyeV9kYXRhIElucXVpcnlEYXRhOworCXN0cnVjdCBoZF9kcml2ZWlkICppZDsKKwlzdHJ1Y3QgaXNkMjAwX2NvbmZpZyBDb25maWdEYXRhOworCXVuc2lnbmVkIGNoYXIgKlJlZ3NCdWY7CisJdW5zaWduZWQgY2hhciBBVEFSZWdzWzhdOworCXVuc2lnbmVkIGNoYXIgRGV2aWNlSGVhZDsKKwl1bnNpZ25lZCBjaGFyIERldmljZUZsYWdzOworCisJLyogbWF4aW11bSBudW1iZXIgb2YgTFVOcyBzdXBwb3J0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIE1heExVTnM7CisJc3RydWN0IHNjc2lfY21uZCBzcmI7Cit9OworCisKKy8qCisgKiBSZWFkIENhcGFjaXR5IERhdGEgLSByZXR1cm5lZCBpbiBCaWcgRW5kaWFuIGZvcm1hdAorICovCisKK3N0cnVjdCByZWFkX2NhcGFjaXR5X2RhdGEgeworCV9fYmUzMiBMb2dpY2FsQmxvY2tBZGRyZXNzOworCV9fYmUzMiBCeXRlc1BlckJsb2NrOworfTsKKworLyoKKyAqIFJlYWQgQmxvY2sgTGltaXRzIERhdGEgLSByZXR1cm5lZCBpbiBCaWcgRW5kaWFuIGZvcm1hdAorICogVGhpcyBzdHJ1Y3R1cmUgcmV0dXJucyB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBibG9jaworICogc2l6ZSBmb3IgYSBUQVBFIGRldmljZS4KKyAqLworCitzdHJ1Y3QgcmVhZF9ibG9ja19saW1pdHMgeworCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWQ7CisJdW5zaWduZWQgY2hhciBCbG9ja01heGltdW1TaXplWzNdOworCXVuc2lnbmVkIGNoYXIgQmxvY2tNaW5pbXVtU2l6ZVsyXTsKK307CisKKworLyoKKyAqIFNlbnNlIERhdGEgRm9ybWF0CisgKi8KKworI2RlZmluZSBTRU5TRV9FUlJDT0RFCSAgIDB4N2YKKyNkZWZpbmUgU0VOU0VfRVJSQ09ERV9WQUxJRCAgICAgMHg4MAorI2RlZmluZSBTRU5TRV9GTEFHX1NFTlNFX0tFWSAgICAweDBmCisjZGVmaW5lIFNFTlNFX0ZMQUdfQkFEX0xFTkdUSCAgIDB4MjAKKyNkZWZpbmUgU0VOU0VfRkxBR19FTkRfT0ZfTUVESUEgMHg0MAorI2RlZmluZSBTRU5TRV9GTEFHX0ZJTEVfTUFSSyAgICAweDgwCitzdHJ1Y3Qgc2Vuc2VfZGF0YSB7CisJdW5zaWduZWQgY2hhciBFcnJvckNvZGU7CisJdW5zaWduZWQgY2hhciBTZWdtZW50TnVtYmVyOworCXVuc2lnbmVkIGNoYXIgRmxhZ3M7CisJdW5zaWduZWQgY2hhciBJbmZvcm1hdGlvbls0XTsKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxTZW5zZUxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIENvbW1hbmRTcGVjaWZpY0luZm9ybWF0aW9uWzRdOworCXVuc2lnbmVkIGNoYXIgQWRkaXRpb25hbFNlbnNlQ29kZTsKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXI7CisJdW5zaWduZWQgY2hhciBGaWVsZFJlcGxhY2VhYmxlVW5pdENvZGU7CisJdW5zaWduZWQgY2hhciBTZW5zZUtleVNwZWNpZmljWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBEZWZhdWx0IHJlcXVlc3Qgc2Vuc2UgYnVmZmVyIHNpemUKKyAqLworCisjZGVmaW5lIFNFTlNFX0JVRkZFUl9TSVpFIDE4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGVscGVyIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2J1aWxkX3NlbnNlCisgKgkJCQkJCQkJCSAKKyAqICBCdWlsZHMgYW4gYXJ0aWZpY2lhbCBzZW5zZSBidWZmZXIgdG8gcmVwb3J0IHRoZSByZXN1bHRzIG9mIGEgCisgKiAgZmFpbGVkIGNvbW1hbmQuCisgKgkJCQkJCQkJICAgICAgIAorICogUkVUVVJOUzoKKyAqICAgIHZvaWQKKyAqLworc3RhdGljIHZvaWQgaXNkMjAwX2J1aWxkX3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJc3RydWN0IHNlbnNlX2RhdGEgKmJ1ZiA9IChzdHJ1Y3Qgc2Vuc2VfZGF0YSAqKSAmc3JiLT5zZW5zZV9idWZmZXJbMF07CisJdW5zaWduZWQgY2hhciBlcnJvciA9IGluZm8tPkFUQVJlZ3NbSURFX0VSUk9SX09GRlNFVF07CisKKwlpZihlcnJvciAmIEFUQV9FUlJPUl9NRURJQV9DSEFOR0UpIHsKKwkJYnVmLT5FcnJvckNvZGUgPSAweDcwIHwgU0VOU0VfRVJSQ09ERV9WQUxJRDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VMZW5ndGggPSAweGI7CisJCWJ1Zi0+RmxhZ3MgPSBVTklUX0FUVEVOVElPTjsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgaWYoZXJyb3IgJiBNQ1JfRVJSKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gIFVOSVRfQVRURU5USU9OOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOworCX0gZWxzZSBpZihlcnJvciAmIFRSSzBfRVJSKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gIE5PVF9SRUFEWTsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgaWYoZXJyb3IgJiBFQ0NfRVJSKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gIERBVEFfUFJPVEVDVDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgeworCQlidWYtPkVycm9yQ29kZSA9IDA7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMDsKKwkJYnVmLT5GbGFncyA9ICAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRyYW5zcG9ydCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGlzZDIwMF9hY3Rpb24KKyAqCisgKiBSb3V0aW5lIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBpc2QyMDAKKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX2FjdGlvbiggc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgYWN0aW9uLCAKKwkJCSAgdm9pZCogcG9pbnRlciwgaW50IHZhbHVlICkKK3sKKwl1bmlvbiBhdGFfY2RiIGF0YTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2Ugc3JiX2RldjsKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCXN0cnVjdCBzY3NpX2NtbmQgKnNyYiA9ICZpbmZvLT5zcmI7CisJaW50IHN0YXR1czsKKworCW1lbXNldCgmYXRhLCAwLCBzaXplb2YoYXRhKSk7CisJbWVtc2V0KCZzcmJfZGV2LCAwLCBzaXplb2Yoc3JiX2RldikpOworCXNyYi0+ZGV2aWNlID0gJnNyYl9kZXY7CisJKytzcmItPnNlcmlhbF9udW1iZXI7CisKKwlhdGEuZ2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOworCWF0YS5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJYXRhLmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCisJc3dpdGNoICggYWN0aW9uICkgeworCWNhc2UgQUNUSU9OX1JFQURfU1RBVFVTOgorCQlVU19ERUJVR1AoIiAgIGlzZDIwMF9hY3Rpb24oUkVBRF9TVEFUVVMpXG4iKTsKKwkJYXRhLmdlbmVyaWMuQWN0aW9uU2VsZWN0ID0gQUNUSU9OX1NFTEVDVF8wfEFDVElPTl9TRUxFQ1RfMjsKKwkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPQorCQkgIFJFR19DWUxJTkRFUl9MT1cgfCBSRUdfQ1lMSU5ERVJfSElHSCB8CisJCSAgUkVHX1NUQVRVUyB8IFJFR19FUlJPUjsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZlciA9IHBvaW50ZXI7CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gdmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fRU5VTToKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKEVOVU0sMHglMDJ4KVxuIix2YWx1ZSk7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzJ8CisJCQkJCSAgIEFDVElPTl9TRUxFQ1RfM3xBQ1RJT05fU0VMRUNUXzR8CisJCQkJCSAgIEFDVElPTl9TRUxFQ1RfNTsKKwkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfREVWSUNFX0hFQUQ7CisJCWF0YS53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IHZhbHVlOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fUkVTRVQ6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihSRVNFVClcbiIpOworCQlhdGEuZ2VuZXJpYy5BY3Rpb25TZWxlY3QgPSBBQ1RJT05fU0VMRUNUXzF8QUNUSU9OX1NFTEVDVF8yfAorCQkJCQkgICBBQ1RJT05fU0VMRUNUXzN8QUNUSU9OX1NFTEVDVF80OworCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19ERVZJQ0VfQ09OVFJPTDsKKwkJYXRhLndyaXRlLkRldmljZUNvbnRyb2xCeXRlID0gQVRBX0RDX1JFU0VUX0NPTlRST0xMRVI7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEFDVElPTl9SRUVOQUJMRToKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKFJFRU5BQkxFKVxuIik7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzJ8CisJCQkJCSAgIEFDVElPTl9TRUxFQ1RfM3xBQ1RJT05fU0VMRUNUXzQ7CisJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0RFVklDRV9DT05UUk9MOworCQlhdGEud3JpdGUuRGV2aWNlQ29udHJvbEJ5dGUgPSBBVEFfRENfUkVFTkFCTEVfQ09OVFJPTExFUjsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOworCQlicmVhazsKKworCWNhc2UgQUNUSU9OX1NPRlRfUkVTRVQ6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihTT0ZUX1JFU0VUKVxuIik7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzU7CisJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0RFVklDRV9IRUFEIHwgUkVHX0NPTU1BTkQ7CisJCWF0YS53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IGluZm8tPkRldmljZUhlYWQ7CisJCWF0YS53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9TUlNUOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fSURFTlRJRlk6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihJREVOVElGWSlcbiIpOworCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fSURFTlRJRlk7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisJCXNyYi0+cmVxdWVzdF9idWZmZXIgPSAodm9pZCAqKSBpbmZvLT5pZDsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSBzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVVTX0RFQlVHUCgiRXJyb3I6IFVuZGVmaW5lZCBhY3Rpb24gJWRcbiIsYWN0aW9uKTsKKwkJYnJlYWs7CisJfQorCisJbWVtY3B5KHNyYi0+Y21uZCwgJmF0YSwgc2l6ZW9mKGF0YS5nZW5lcmljKSk7CisJc3JiLT5jbWRfbGVuID0gc2l6ZW9mKGF0YS5nZW5lcmljKTsKKwlzdGF0dXMgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzcmIsIHVzKTsKKwlpZiAoc3RhdHVzID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlzdGF0dXMgPSBJU0QyMDBfR09PRDsKKwllbHNlIHsKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKDB4JTAyeCkgZXJyb3I6ICVkXG4iLGFjdGlvbixzdGF0dXMpOworCQlzdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJCS8qIG5lZWQgdG8gcmVzZXQgZGV2aWNlIGhlcmUgKi8KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9yZWFkX3JlZ3MKKyAqCQkJCQkJCQkJIAorICogUmVhZCBBVEEgUmVnaXN0ZXJzCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9yZWFkX3JlZ3MoIHN0cnVjdCB1c19kYXRhICp1cyApCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJaW50IHRyYW5zZmVyU3RhdHVzOworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfSXNzdWVBVEFSZWFkUmVnc1xuIik7CisKKwl0cmFuc2ZlclN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fUkVBRF9TVEFUVVMsCisJCQkJICAgIGluZm8tPlJlZ3NCdWYsIHNpemVvZihpbmZvLT5BVEFSZWdzKSApOworCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCIgICBFcnJvciByZWFkaW5nIEFUQSByZWdpc3RlcnNcbiIpOworCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGluZm8tPkFUQVJlZ3MsIGluZm8tPlJlZ3NCdWYsIHNpemVvZihpbmZvLT5BVEFSZWdzKSk7CisJCVVTX0RFQlVHUCgiICAgR290IEFUQSBSZWdpc3RlcltJREVfRVJST1JfT0ZGU0VUXSA9IDB4JXhcbiIsIAorCQkJICBpbmZvLT5BVEFSZWdzW0lERV9FUlJPUl9PRkZTRVRdKTsKKwl9CisKKwlyZXR1cm4gcmV0U3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW52b2tlIHRoZSB0cmFuc3BvcnQgYW5kIGJhc2ljIGVycm9yLWhhbmRsaW5nL3JlY292ZXJ5IG1ldGhvZHMKKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIHByb3RvY29sIGxheWVycyB0byBhY3R1YWxseSBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKiB0aGUgZGV2aWNlIGFuZCByZWNlaXZlIHRoZSByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQgaXNkMjAwX2ludm9rZV90cmFuc3BvcnQoIHN0cnVjdCB1c19kYXRhICp1cywgCisJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIAorCQkJICAgICAgdW5pb24gYXRhX2NkYiAqYXRhQ2RiICkKK3sKKwlpbnQgbmVlZF9hdXRvX3NlbnNlID0gMDsKKwlpbnQgdHJhbnNmZXJTdGF0dXM7CisJaW50IHJlc3VsdDsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCW1lbWNweShzcmItPmNtbmQsIGF0YUNkYiwgc2l6ZW9mKGF0YUNkYi0+Z2VuZXJpYykpOworCXNyYi0+Y21kX2xlbiA9IHNpemVvZihhdGFDZGItPmdlbmVyaWMpOworCXRyYW5zZmVyU3RhdHVzID0gdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3JiLCB1cyk7CisKKwkvKiBpZiB0aGUgY29tbWFuZCBnZXRzIGFib3J0ZWQgYnkgdGhlIGhpZ2hlciBsYXllcnMsIHdlIG5lZWQgdG8KKwkgKiBzaG9ydC1jaXJjdWl0IGFsbCBvdGhlciBwcm9jZXNzaW5nCisJICovCisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCItLSBjb21tYW5kIHdhcyBhYm9ydGVkXG4iKTsKKwkJZ290byBIYW5kbGVfQWJvcnQ7CisJfQorCisJc3dpdGNoICh0cmFuc2ZlclN0YXR1cykgeworCisJY2FzZSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDoKKwkJLyogSW5kaWNhdGUgYSBnb29kIHJlc3VsdCAqLworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCWJyZWFrOworCisJY2FzZSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0U6CisJCVVTX0RFQlVHUCgiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBwcm90b2NvbCBmYWlsdXJlXG4iKTsKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCXJldHVybjsKKworCWNhc2UgVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDoKKwkJVVNfREVCVUdQKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGNvbW1hbmQgZmFpbHVyZVxuIik7CisJCW5lZWRfYXV0b19zZW5zZSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I6CisJCVVTX0RFQlVHUCgiLS0gdHJhbnNwb3J0IGluZGljYXRlcyB0cmFuc3BvcnQgZXJyb3JcbiIpOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJLyogTmVlZCByZXNldCBoZXJlICovCisJCXJldHVybjsKKyAgICAKKwlkZWZhdWx0OgorCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgdW5rbm93biBlcnJvclxuIik7ICAgCisJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkvKiBOZWVkIHJlc2V0IGhlcmUgKi8KKwkJcmV0dXJuOworCX0KKworCWlmICgoc3JiLT5yZXNpZCA+IDApICYmCisJICAgICEoKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgfHwKKwkgICAgICAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBMT0dfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSkpIHsKKwkJVVNfREVCVUdQKCItLSB1bmV4cGVjdGVkbHkgc2hvcnQgdHJhbnNmZXJcbiIpOworCQluZWVkX2F1dG9fc2Vuc2UgPSAxOworCX0KKworCWlmIChuZWVkX2F1dG9fc2Vuc2UpIHsKKwkJcmVzdWx0ID0gaXNkMjAwX3JlYWRfcmVncyh1cyk7CisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgYWJvcnRlZFxuIik7CisJCQlnb3RvIEhhbmRsZV9BYm9ydDsKKwkJfQorCQlpZiAocmVzdWx0ID09IElTRDIwMF9HT09EKSB7CisJCQlpc2QyMDBfYnVpbGRfc2Vuc2UodXMsIHNyYik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKworCQkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQgKi8KKwkJCWlmICgoc3JiLT5zZW5zZV9idWZmZXJbMl0gJiAweGYpID09IDB4MCkKKwkJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCX0gZWxzZSB7CisJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCS8qIE5lZWQgcmVzZXQgaGVyZSAqLworCQl9CisJfQorCisJLyogUmVnYXJkbGVzcyBvZiBhdXRvLXNlbnNlLCBpZiB3ZSBfa25vd18gd2UgaGF2ZSBhbiBlcnJvcgorCSAqIGNvbmRpdGlvbiwgc2hvdyB0aGF0IGluIHRoZSByZXN1bHQgY29kZQorCSAqLworCWlmICh0cmFuc2ZlclN0YXR1cyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEKQorCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwlyZXR1cm47CisKKwkvKiBhYm9ydCBwcm9jZXNzaW5nOiB0aGUgYnVsay1vbmx5IHRyYW5zcG9ydCByZXF1aXJlcyBhIHJlc2V0CisJICogZm9sbG93aW5nIGFuIGFib3J0ICovCisJSGFuZGxlX0Fib3J0OgorCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCisJLyogcGVybWl0IHRoZSByZXNldCB0cmFuc2ZlciB0byB0YWtlIHBsYWNlICovCisJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwkvKiBOZWVkIHJlc2V0IGhlcmUgKi8KK30KKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworc3RhdGljIHZvaWQgaXNkMjAwX2xvZ19jb25maWcoIHN0cnVjdCBpc2QyMDBfaW5mbyogaW5mbyApCit7CisJVVNfREVCVUdQKCIgICAgICBFdmVudCBOb3RpZmljYXRpb246IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuRXZlbnROb3RpZmljYXRpb24pOworCVVTX0RFQlVHUCgiICAgICAgRXh0ZXJuYWwgQ2xvY2s6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuRXh0ZXJuYWxDbG9jayk7CisJVVNfREVCVUdQKCIgICAgICBBVEEgSW5pdCBUaW1lb3V0OiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUluaXRUaW1lb3V0KTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQVBJIENvbW1hbmQgQmxvY2sgU2l6ZTogMHgleFxuIiwgCisJCSAgKGluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnICYgQVRBQ0ZHX0JMT0NLU0laRSkgPj4gNik7CisJVVNfREVCVUdQKCIgICAgICBNYXN0ZXIvU2xhdmUgU2VsZWN0aW9uOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUNvbmZpZyAmIEFUQUNGR19NQVNURVIpOworCVVTX0RFQlVHUCgiICAgICAgQVRBUEkgUmVzZXQ6IDB4JXhcbiIsCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJiBBVEFDRkdfQVRBUElfUkVTRVQpOworCVVTX0RFQlVHUCgiICAgICAgQVRBIFRpbWluZzogMHgleFxuIiwKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUNvbmZpZyAmIEFUQUNGR19USU1JTkcpOworCVVTX0RFQlVHUCgiICAgICAgQVRBIE1ham9yIENvbW1hbmQ6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kKTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQSBNaW5vciBDb21tYW5kOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZCk7CisJVVNfREVCVUdQKCIgICAgICBJbml0IFN0YXR1czogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIEFUQUNGR0VfSU5JVF9TVEFUVVMpOworCVVTX0RFQlVHUCgiICAgICAgQ29uZmlnIERlc2NyaXB0b3IgMjogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIEFUQUNGR0VfQ09ORl9ERVNDMik7CisJVVNfREVCVUdQKCIgICAgICBTa2lwIERldmljZSBCb290OiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX1NLSVBfQk9PVCk7CisJVVNfREVCVUdQKCIgICAgICBBVEEgMyBTdGF0ZSBTdXBzZW5kOiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX1NUQVRFX1NVU1BFTkQpOworCVVTX0RFQlVHUCgiICAgICAgRGVzY3JpcHRvciBPdmVycmlkZTogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIEFUQUNGR0VfREVTQ19PVkVSUklERSk7CisJVVNfREVCVUdQKCIgICAgICBMYXN0IExVTiBJZGVudGlmaWVyOiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX0xBU1RfTFVOKTsKKwlVU19ERUJVR1AoIiAgICAgIFNSU1QgRW5hYmxlOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUV4dHJhQ29uZmlnICYgQ0ZHX0NBUEFCSUxJVFlfU1JTVCk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfd3JpdGVfY29uZmlnCisgKgkJCQkJCQkJCSAKKyAqIFdyaXRlIHRoZSBJU0QyMDAgQ29uZmlndXJhdGlvbiBkYXRhCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF93cml0ZV9jb25maWcoIHN0cnVjdCB1c19kYXRhICp1cyApIAoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCByZXN1bHQ7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKKwlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF93cml0ZV9jb25maWdcbiIpOworCVVTX0RFQlVHUCgiICAgV3JpdGluZyB0aGUgZm9sbG93aW5nIElTRDIwMCBDb25maWcgRGF0YTpcbiIpOworCWlzZDIwMF9sb2dfY29uZmlnKGluZm8pOworI2VuZGlmCisKKwkvKiBsZXQncyBzZW5kIHRoZSBjb21tYW5kIHZpYSB0aGUgY29udHJvbCBwaXBlICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigKKwkJdXMsIAorCQl1cy0+c2VuZF9jdHJsX3BpcGUsCisJCTB4MDEsIAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCTB4MDAwMCwgCisJCTB4MDAwMiwgCisJCSh2b2lkICopICZpbmZvLT5Db25maWdEYXRhLCAKKwkJc2l6ZW9mKGluZm8tPkNvbmZpZ0RhdGEpKTsKKworCWlmIChyZXN1bHQgPj0gMCkgeworCQlVU19ERUJVR1AoIiAgIElTRDIwMCBDb25maWcgRGF0YSB3YXMgd3JpdHRlbiBzdWNjZXNzZnVsbHlcbiIpOworCX0gZWxzZSB7CisJCVVTX0RFQlVHUCgiICAgUmVxdWVzdCB0byB3cml0ZSBJU0QyMDAgQ29uZmlnIERhdGEgZmFpbGVkIVxuIik7CisJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwl9CisKKwlVU19ERUJVR1AoIkxlYXZpbmcgaXNkMjAwX3dyaXRlX2NvbmZpZyAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybiByZXRTdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfcmVhZF9jb25maWcKKyAqCQkJCQkJCQkJIAorICogUmVhZHMgdGhlIElTRDIwMCBDb25maWd1cmF0aW9uIGRhdGEKKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX3JlYWRfY29uZmlnKCBzdHJ1Y3QgdXNfZGF0YSAqdXMgKSAKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfcmVhZF9jb25maWdcbiIpOworCisJLyogcmVhZCB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIElTRDIwMC4gIFVzZSB0aGlzIHRvICovCisJLyogZGV0ZXJtaW5lIHdoYXQgdGhlIHNwZWNpYWwgQVRBIENEQiBieXRlcyBhcmUuCQkqLworCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigKKwkJdXMsIAorCQl1cy0+cmVjdl9jdHJsX3BpcGUsCisJCTB4MDIsIAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJMHgwMDAwLCAKKwkJMHgwMDAyLCAKKwkJKHZvaWQgKikgJmluZm8tPkNvbmZpZ0RhdGEsIAorCQlzaXplb2YoaW5mby0+Q29uZmlnRGF0YSkpOworCisKKwlpZiAocmVzdWx0ID49IDApIHsKKwkJVVNfREVCVUdQKCIgICBSZXRyaWV2ZWQgdGhlIGZvbGxvd2luZyBJU0QyMDAgQ29uZmlnIERhdGE6XG4iKTsKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKKwkJaXNkMjAwX2xvZ19jb25maWcoaW5mbyk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlVU19ERUJVR1AoIiAgIFJlcXVlc3QgdG8gZ2V0IElTRDIwMCBDb25maWcgRGF0YSBmYWlsZWQhXG4iKTsKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfcmVhZF9jb25maWcgJTA4WFxuIiwgcmV0U3RhdHVzKTsKKwlyZXR1cm4gcmV0U3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXQKKyAqCQkJCQkJCQkJIAorICogUGVyZm9ybSBhbiBBdGFwaSBTb2Z0IFJlc2V0IG9uIHRoZSBkZXZpY2UKKyAqCisgKiBSRVRVUk5TOgorICogICAgTlQgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfYXRhcGlfc29mdF9yZXNldCggc3RydWN0IHVzX2RhdGEgKnVzICkgCit7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCB0cmFuc2ZlclN0YXR1czsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXRcbiIpOworCisJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1NPRlRfUkVTRVQsIE5VTEwsIDAgKTsKKwlpZiAodHJhbnNmZXJTdGF0dXMgIT0gSVNEMjAwX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgiICAgRXJyb3IgaXNzdWluZyBBdGFwaSBTb2Z0IFJlc2V0XG4iKTsKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfYXRhcGlfc29mdF9yZXNldCAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybiByZXRTdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfc3JzdAorICoJCQkJCQkJCQkgCisgKiBQZXJmb3JtIGFuIFNSU1Qgb24gdGhlIGRldmljZQorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfc3JzdCggc3RydWN0IHVzX2RhdGEgKnVzICkgCit7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCB0cmFuc2ZlclN0YXR1czsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX1NSU1RcbiIpOworCisJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1JFU0VULCBOVUxMLCAwICk7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGhpcyByZXF1ZXN0IGZhaWxlZCAqLworCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCIgICBFcnJvciBpc3N1aW5nIFNSU1RcbiIpOworCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJfSBlbHNlIHsKKwkJLyogZGVsYXkgMTBtcyB0byBnaXZlIHRoZSBkcml2ZSBhIGNoYW5jZSB0byBzZWUgaXQgKi8KKwkJbXNsZWVwKDEwKTsKKworCQl0cmFuc2ZlclN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fUkVFTkFCTEUsIE5VTEwsIDAgKTsKKwkJaWYgKHRyYW5zZmVyU3RhdHVzICE9IElTRDIwMF9UUkFOU1BPUlRfR09PRCkgeworCQkJVVNfREVCVUdQKCIgICBFcnJvciB0YWtpbmcgZHJpdmUgb3V0IG9mIHJlc2V0XG4iKTsKKwkJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwkJfSBlbHNlIHsKKwkJCS8qIGRlbGF5IDUwbXMgdG8gZ2l2ZSB0aGUgZHJpdmUgYSBjaGFuY2UgdG8gcmVjb3ZlciBhZnRlciBTUlNUICovCisJCQltc2xlZXAoNTApOworCQl9CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF9zcnN0ICUwOFhcbiIsIHJldFN0YXR1cyk7CisJcmV0dXJuIHJldFN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF90cnlfZW51bQorICoJCQkJCQkJCQkgCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGlzZDIwMF9tYW51YWxfZW51bSgpLiBEb2VzIEVOVU0gYW5kIFJFQURfU1RBVFVTCisgKiBhbmQgdHJpZXMgdG8gYW5hbHl6ZSB0aGUgc3RhdHVzIHJlZ2lzdGVycworICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfdHJ5X2VudW0oc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyIG1hc3Rlcl9zbGF2ZSwKKwkJCSAgIGludCBkZXRlY3QgKQoreworCWludCBzdGF0dXMgPSBJU0QyMDBfR09PRDsKKwl1bnNpZ25lZCBsb25nIGVuZFRpbWU7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpyZWdzID0gaW5mby0+UmVnc0J1ZjsKKwlpbnQgcmVjaGVja0FzTWFzdGVyID0gMDsKKworCWlmICggZGV0ZWN0ICkKKwkJZW5kVGltZSA9IGppZmZpZXMgKyBJU0QyMDBfRU5VTV9ERVRFQ1RfVElNRU9VVCAqIEhaOworCWVsc2UKKwkJZW5kVGltZSA9IGppZmZpZXMgKyBJU0QyMDBfRU5VTV9CU1lfVElNRU9VVCAqIEhaOworCisJLyogbG9vcCB1bnRpbCB3ZSBkZXRlY3QgIUJTWSBvciB0aW1lb3V0ICovCisJd2hpbGUoMSkgeworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworCQljaGFyKiBtc3RyID0gbWFzdGVyX3NsYXZlID09IEFUQV9BRERSRVNTX0RFVkhFQURfU1REID8KKwkJCSJNYXN0ZXIiIDogIlNsYXZlIjsKKyNlbmRpZgorCisJCXN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fRU5VTSwgTlVMTCwgbWFzdGVyX3NsYXZlICk7CisJCWlmICggc3RhdHVzICE9IElTRDIwMF9HT09EICkKKwkJCWJyZWFrOworCisJCXN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fUkVBRF9TVEFUVVMsIAorCQkJCQlyZWdzLCA4ICk7CisJCWlmICggc3RhdHVzICE9IElTRDIwMF9HT09EICkKKwkJCWJyZWFrOworCisJCWlmICghZGV0ZWN0KSB7CisJCQlpZiAocmVnc1tJREVfU1RBVFVTX09GRlNFVF0gJiBCVVNZX1NUQVQgKSB7CisJCQkJVVNfREVCVUdQKCIgICAlcyBzdGF0dXMgaXMgc3RpbGwgQlNZLCB0cnkgYWdhaW4uLi5cbiIsbXN0cik7CisJCQl9IGVsc2UgeworCQkJCVVTX0RFQlVHUCgiICAgJXMgc3RhdHVzICFCU1ksIGNvbnRpbnVlIHdpdGggbmV4dCBvcGVyYXRpb25cbiIsbXN0cik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogY2hlY2sgZm9yIEJVU1lfU1RBVCBhbmQgKi8KKwkJLyogV1JFUlJfU1RBVCAod29ya2Fyb3VuZCBBVEEgWmlwIGRyaXZlKSBhbmQgKi8gCisJCS8qIEVSUl9TVEFUICh3b3JrYXJvdW5kIGZvciBBcmNob3MgQ0QtUk9NKSAqLworCQllbHNlIGlmIChyZWdzW0lERV9TVEFUVVNfT0ZGU0VUXSAmIAorCQkJIChCVVNZX1NUQVQgfCBXUkVSUl9TVEFUIHwgRVJSX1NUQVQgKSkgeworCQkJVVNfREVCVUdQKCIgICBTdGF0dXMgaW5kaWNhdGVzIGl0IGlzIG5vdCByZWFkeSwgdHJ5IGFnYWluLi4uXG4iKTsKKwkJfQorCQkvKiBjaGVjayBmb3IgRFJEWSwgQVRBIGRldmljZXMgc2V0IERSRFkgYWZ0ZXIgU1JTVCAqLworCQllbHNlIGlmIChyZWdzW0lERV9TVEFUVVNfT0ZGU0VUXSAmIFJFQURZX1NUQVQpIHsKKwkJCVVTX0RFQlVHUCgiICAgSWRlbnRpZmllZCBBVEEgZGV2aWNlXG4iKTsKKwkJCWluZm8tPkRldmljZUZsYWdzIHw9IERGX0FUQV9ERVZJQ0U7CisJCQlpbmZvLT5EZXZpY2VIZWFkID0gbWFzdGVyX3NsYXZlOworCQkJYnJlYWs7CisJCX0gCisJCS8qIGNoZWNrIEN5bGluZGVyIEhpZ2gvTG93IHRvCisJCSAgIGRldGVybWluZSBpZiBpdCBpcyBhbiBBVEFQSSBkZXZpY2UKKwkJKi8KKwkJZWxzZSBpZiAoKHJlZ3NbSURFX0hDWUxfT0ZGU0VUXSA9PSAweEVCKSAmJgorCQkJIChyZWdzW0lERV9MQ1lMX09GRlNFVF0gPT0gMHgxNCkpIHsKKwkJCS8qIEl0IHNlZW1zIHRoYXQgdGhlIFJJQ09IIAorCQkJICAgTVA2MjAwQSBDRC9SVyBkcml2ZSB3aWxsIAorCQkJICAgcmVwb3J0IGl0c2VsZiBva2F5IGFzIGEKKwkJCSAgIHNsYXZlIHdoZW4gaXQgaXMgcmVhbGx5IGEKKwkJCSAgIG1hc3Rlci4gU28gdGhpcyBjaGVjayBhZ2FpbgorCQkJICAgYXMgYSBtYXN0ZXIgZGV2aWNlIGp1c3QgdG8KKwkJCSAgIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlcG9ydAorCQkJICAgaXRzZWxmIG9rYXkgYXMgYSBtYXN0ZXIgYWxzbworCQkJKi8KKwkJCWlmICgobWFzdGVyX3NsYXZlICYgQVRBX0FERFJFU1NfREVWSEVBRF9TTEFWRSkgJiYKKwkJCSAgICAhcmVjaGVja0FzTWFzdGVyKSB7CisJCQkJVVNfREVCVUdQKCIgICBJZGVudGlmaWVkIEFUQVBJIGRldmljZSBhcyBzbGF2ZS4gIFJlY2hlY2tpbmcgYWdhaW4gYXMgbWFzdGVyXG4iKTsKKwkJCQlyZWNoZWNrQXNNYXN0ZXIgPSAxOworCQkJCW1hc3Rlcl9zbGF2ZSA9IEFUQV9BRERSRVNTX0RFVkhFQURfU1REOworCQkJfSBlbHNlIHsKKwkJCQlVU19ERUJVR1AoIiAgIElkZW50aWZpZWQgQVRBUEkgZGV2aWNlXG4iKTsKKwkJCQlpbmZvLT5EZXZpY2VIZWFkID0gbWFzdGVyX3NsYXZlOworCQkJICAgICAgCisJCQkJc3RhdHVzID0gaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXQodXMpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworIAkJCVVTX0RFQlVHUCgiICAgTm90IEFUQSwgbm90IEFUQVBJLiBXZWlyZC5cbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBjaGVjayBmb3IgdGltZW91dCBvbiB0aGlzIHJlcXVlc3QgKi8KKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kVGltZSkpIHsKKwkJCWlmICghZGV0ZWN0KQorCQkJCVVTX0RFQlVHUCgiICAgQlNZIGNoZWNrIHRpbWVvdXQsIGp1c3QgY29udGludWUgd2l0aCBuZXh0IG9wZXJhdGlvbi4uLlxuIik7CisJCQllbHNlCisJCQkJVVNfREVCVUdQKCIgICBEZXZpY2UgZGV0ZWN0IHRpbWVvdXQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfbWFudWFsX2VudW0KKyAqCQkJCQkJCQkJIAorICogRGV0ZXJtaW5lcyBpZiB0aGUgZHJpdmUgYXR0YWNoZWQgaXMgYW4gQVRBIG9yIEFUQVBJIGFuZCBpZiBpdCBpcyBhCisgKiBtYXN0ZXIgb3Igc2xhdmUuCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9tYW51YWxfZW51bShzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisKKwlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF9tYW51YWxfZW51bVxuIik7CisKKwlyZXRTdGF0dXMgPSBpc2QyMDBfcmVhZF9jb25maWcodXMpOworCWlmIChyZXRTdGF0dXMgPT0gSVNEMjAwX0dPT0QpIHsKKwkJaW50IGlzc2xhdmU7CisJCS8qIG1hc3RlciBvciBzbGF2ZT8gKi8KKwkJcmV0U3RhdHVzID0gaXNkMjAwX3RyeV9lbnVtKCB1cywgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQsIDApOworCQlpZiAocmV0U3RhdHVzID09IElTRDIwMF9HT09EKQorCQkJcmV0U3RhdHVzID0gaXNkMjAwX3RyeV9lbnVtKCB1cywgQVRBX0FERFJFU1NfREVWSEVBRF9TTEFWRSwgMCk7CisKKwkJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkgeworCQkJcmV0U3RhdHVzID0gaXNkMjAwX3Nyc3QodXMpOworCQkJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkKKwkJCQkvKiBhdGEgb3IgYXRhcGk/ICovCisJCQkJcmV0U3RhdHVzID0gaXNkMjAwX3RyeV9lbnVtKCB1cywgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQsIDEpOworCQl9CisKKwkJaXNzbGF2ZSA9IChpbmZvLT5EZXZpY2VIZWFkICYgQVRBX0FERFJFU1NfREVWSEVBRF9TTEFWRSkgPyAxIDogMDsKKwkJaWYgKCEoaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJiBBVEFDRkdfTUFTVEVSKSkgeworCQkJVVNfREVCVUdQKCIgICBTZXR0aW5nIE1hc3Rlci9TbGF2ZSBzZWxlY3Rpb24gdG8gJWRcbiIsIGlzc2xhdmUpOworCQkJaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJj0gMHgzZjsKKwkJCWluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnIHw9IChpc3NsYXZlPDw2KTsKKwkJCXJldFN0YXR1cyA9IGlzZDIwMF93cml0ZV9jb25maWcodXMpOworCQl9CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF9tYW51YWxfZW51bSAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybihyZXRTdGF0dXMpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2dldF9pbnF1aXJ5X2RhdGEKKyAqCisgKiBHZXQgaW5xdWlyeSBkYXRhCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhKCBzdHJ1Y3QgdXNfZGF0YSAqdXMgKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGluZm8tPmlkOworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YVxuIik7CisKKwkvKiBzZXQgZGVmYXVsdCB0byBNYXN0ZXIgKi8KKwlpbmZvLT5EZXZpY2VIZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9TVEQ7CisKKwkvKiBhdHRlbXB0IHRvIG1hbnVhbGx5IGVudW1lcmF0ZSB0aGlzIGRldmljZSAqLworCXJldFN0YXR1cyA9IGlzZDIwMF9tYW51YWxfZW51bSh1cyk7CisJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkgeworCQlpbnQgdHJhbnNmZXJTdGF0dXM7CisKKwkJLyogY2hlY2sgZm9yIGFuIEFUQSBkZXZpY2UgKi8KKwkJaWYgKGluZm8tPkRldmljZUZsYWdzICYgREZfQVRBX0RFVklDRSkgeworCQkJLyogdGhpcyBtdXN0IGJlIGFuIEFUQSBkZXZpY2UgKi8KKwkJCS8qIHBlcmZvcm0gYW4gQVRBIENvbW1hbmQgSWRlbnRpZnkgKi8KKwkJCXRyYW5zZmVyU3RhdHVzID0gaXNkMjAwX2FjdGlvbiggdXMsIEFDVElPTl9JREVOVElGWSwKKwkJCQkJCQlpZCwgCisJCQkJCQkJc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSApOworCQkJaWYgKHRyYW5zZmVyU3RhdHVzICE9IElTRDIwMF9UUkFOU1BPUlRfR09PRCkgeworCQkJCS8qIEVycm9yIGlzc3VpbmcgQVRBIENvbW1hbmQgSWRlbnRpZnkgKi8KKwkJCQlVU19ERUJVR1AoIiAgIEVycm9yIGlzc3VpbmcgQVRBIENvbW1hbmQgSWRlbnRpZnlcbiIpOworCQkJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwkJCX0gZWxzZSB7CisJCQkJLyogQVRBIENvbW1hbmQgSWRlbnRpZnkgc3VjY2Vzc2Z1bCAqLworCQkJCWludCBpOworCQkJCV9fYmUxNiAqc3JjOworCQkJCV9fdTE2ICpkZXN0OworCQkJCWlkZV9maXhfZHJpdmVpZChpZCk7CisKKwkJCQlVU19ERUJVR1AoIiAgIElkZW50aWZ5IERhdGEgU3RydWN0dXJlOlxuIik7CisJCQkJVVNfREVCVUdQKCIgICAgICBjb25maWcgPSAweCV4XG4iLCBpZC0+Y29uZmlnKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN5bHMgPSAweCV4XG4iLCBpZC0+Y3lscyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBoZWFkcyA9IDB4JXhcbiIsIGlkLT5oZWFkcyk7CisJCQkJVVNfREVCVUdQKCIgICAgICB0cmFja19ieXRlcyA9IDB4JXhcbiIsIGlkLT50cmFja19ieXRlcyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBzZWN0b3JfYnl0ZXMgPSAweCV4XG4iLCBpZC0+c2VjdG9yX2J5dGVzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIHNlY3RvcnMgPSAweCV4XG4iLCBpZC0+c2VjdG9ycyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBzZXJpYWxfbm9bMF0gPSAweCV4XG4iLCBpZC0+c2VyaWFsX25vWzBdKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGJ1Zl90eXBlID0gMHgleFxuIiwgaWQtPmJ1Zl90eXBlKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGJ1Zl9zaXplID0gMHgleFxuIiwgaWQtPmJ1Zl9zaXplKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGVjY19ieXRlcyA9IDB4JXhcbiIsIGlkLT5lY2NfYnl0ZXMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgZndfcmV2WzBdID0gMHgleFxuIiwgaWQtPmZ3X3JldlswXSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBtb2RlbFswXSA9IDB4JXhcbiIsIGlkLT5tb2RlbFswXSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBtYXhfbXVsdHNlY3QgPSAweCV4XG4iLCBpZC0+bWF4X211bHRzZWN0KTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGR3b3JkX2lvID0gMHgleFxuIiwgaWQtPmR3b3JkX2lvKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGNhcGFiaWxpdHkgPSAweCV4XG4iLCBpZC0+Y2FwYWJpbGl0eSk7CisJCQkJVVNfREVCVUdQKCIgICAgICB0UElPID0gMHgleFxuIiwgaWQtPnRQSU8pOworCQkJCVVTX0RFQlVHUCgiICAgICAgdERNQSA9IDB4JXhcbiIsIGlkLT50RE1BKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGZpZWxkX3ZhbGlkID0gMHgleFxuIiwgaWQtPmZpZWxkX3ZhbGlkKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9jeWxzID0gMHgleFxuIiwgaWQtPmN1cl9jeWxzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9oZWFkcyA9IDB4JXhcbiIsIGlkLT5jdXJfaGVhZHMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX3NlY3RvcnMgPSAweCV4XG4iLCBpZC0+Y3VyX3NlY3RvcnMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX2NhcGFjaXR5ID0gMHgleFxuIiwgKGlkLT5jdXJfY2FwYWNpdHkxIDw8IDE2KSArIGlkLT5jdXJfY2FwYWNpdHkwICk7CisJCQkJVVNfREVCVUdQKCIgICAgICBtdWx0c2VjdCA9IDB4JXhcbiIsIGlkLT5tdWx0c2VjdCk7CisJCQkJVVNfREVCVUdQKCIgICAgICBsYmFfY2FwYWNpdHkgPSAweCV4XG4iLCBpZC0+bGJhX2NhcGFjaXR5KTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGNvbW1hbmRfc2V0XzEgPSAweCV4XG4iLCBpZC0+Y29tbWFuZF9zZXRfMSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8yID0gMHgleFxuIiwgaWQtPmNvbW1hbmRfc2V0XzIpOworCisJCQkJbWVtc2V0KCZpbmZvLT5JbnF1aXJ5RGF0YSwgMCwgc2l6ZW9mKGluZm8tPklucXVpcnlEYXRhKSk7CisKKwkJCQkvKiBTdGFuZGFyZCBJREUgaW50ZXJmYWNlIG9ubHkgc3VwcG9ydHMgZGlza3MgKi8KKwkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5EZXZpY2VUeXBlID0gRElSRUNUX0FDQ0VTU19ERVZJQ0U7CisKKwkJCQkvKiBUaGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMzYgKDUgKyAzMSkgKi8KKwkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5BZGRpdGlvbmFsTGVuZ3RoID0gMHgxRjsKKworCQkJCWlmIChpZC0+Y29tbWFuZF9zZXRfMSAmIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTKSB7CisJCQkJCS8qIHNldCB0aGUgcmVtb3ZhYmxlIGJpdCAqLworCQkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5EZXZpY2VUeXBlTW9kaWZpZXIgPSBERVZJQ0VfUkVNT1ZBQkxFOworCQkJCQlpbmZvLT5EZXZpY2VGbGFncyB8PSBERl9SRU1PVkFCTEVfTUVESUE7CisJCQkJfQorCisJCQkJLyogRmlsbCBpbiB2ZW5kb3IgaWRlbnRpZmljYXRpb24gZmllbGRzICovCisJCQkJc3JjID0gKF9fYmUxNiopaWQtPm1vZGVsOworCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlZlbmRvcklkOworCQkJCWZvciAoaT0wO2k8NDtpKyspCisJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOworCisJCQkJc3JjID0gKF9fYmUxNiopKGlkLT5tb2RlbCs4KTsKKwkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5Qcm9kdWN0SWQ7CisJCQkJZm9yIChpPTA7aTw4O2krKykKKwkJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KHNyY1tpXSk7CisKKwkJCQlzcmMgPSAoX19iZTE2KilpZC0+ZndfcmV2OworCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlByb2R1Y3RSZXZpc2lvbkxldmVsOworCQkJCWZvciAoaT0wO2k8MjtpKyspCisJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOworCisJCQkJLyogZGV0ZXJtaW5lIGlmIGl0IHN1cHBvcnRzIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb24gKi8KKwkJCQlpZiAoaWQtPmNvbW1hbmRfc2V0XzIgJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgeworCQkJCQlVU19ERUJVR1AoIiAgIERldmljZSBzdXBwb3J0cyBNZWRpYSBTdGF0dXMgTm90aWZpY2F0aW9uXG4iKTsKKworCQkJCQkvKiBJbmRpY2F0ZSB0aGF0IGl0IGlzIGVuYWJsZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdAorCQkJCQkgKiBUaGlzIGFsbG93cyB0aGUgbG9jay91bmxvY2sgb2YgdGhlIG1lZGlhIHRvIHdvcmsKKwkJCQkJICogY29ycmVjdGx5LgorCQkJCQkgKi8KKwkJCQkJaW5mby0+RGV2aWNlRmxhZ3MgfD0gREZfTUVESUFfU1RBVFVTX0VOQUJMRUQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJaW5mby0+RGV2aWNlRmxhZ3MgJj0gfkRGX01FRElBX1NUQVRVU19FTkFCTEVEOworCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiAKKwkJCSAqIHRoaXMgbXVzdCBiZSBhbiBBVEFQSSBkZXZpY2UgCisJCQkgKiB1c2UgYW4gQVRBUEkgcHJvdG9jb2wgKFRyYW5zcGFyZW50IFNDU0kpCisJCQkgKi8KKwkJCXVzLT5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kiOworCQkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQ7CisKKwkJCVVTX0RFQlVHUCgiUHJvdG9jb2wgY2hhbmdlZCB0bzogJXNcbiIsIHVzLT5wcm90b2NvbF9uYW1lKTsKKwkgICAgCisJCQkvKiBGcmVlIGRyaXZlciBzdHJ1Y3R1cmUgKi8JICAgIAorCQkJdXMtPmV4dHJhX2Rlc3RydWN0b3IoaW5mbyk7CisJCQl1cy0+ZXh0cmEgPSBOVUxMOworCQkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBOVUxMOworCQl9CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhICUwOFhcbiIsIHJldFN0YXR1cyk7CisKKwlyZXR1cm4ocmV0U3RhdHVzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9zY3NpX3RvX2F0YQorICoJCQkJCQkJCQkgCisgKiBUcmFuc2xhdGUgU0NTSSBjb21tYW5kcyB0byBBVEEgY29tbWFuZHMuCisgKgorICogUkVUVVJOUzoKKyAqICAgIDEgaWYgdGhlIGNvbW1hbmQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgdHJhbnNwb3J0IGxheWVyCisgKiAgICAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9zY3NpX3RvX2F0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgIHVuaW9uIGF0YV9jZGIgKiBhdGFDZGIpCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBpbmZvLT5pZDsKKwlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMTsKKwl1bnNpZ25lZCBjaGFyIHNlY3RudW0sIGhlYWQ7CisJdW5zaWduZWQgc2hvcnQgY3lsaW5kZXI7CisJdW5zaWduZWQgbG9uZyBsYmE7CisJdW5zaWduZWQgbG9uZyBibG9ja0NvdW50OworCXVuc2lnbmVkIGNoYXIgc2Vuc2VEYXRhWzhdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwltZW1zZXQoYXRhQ2RiLCAwLCBzaXplb2YodW5pb24gYXRhX2NkYikpOworCisJLyogU0NTSSBDb21tYW5kICovCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKwljYXNlIElOUVVJUlk6CisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIElOUVVJUllcbiIpOworCisJCS8qIGNvcHkgSW5xdWlyeURhdGEgKi8KKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKCh1bnNpZ25lZCBjaGFyICopICZpbmZvLT5JbnF1aXJ5RGF0YSwKKwkJCQlzaXplb2YoaW5mby0+SW5xdWlyeURhdGEpLCBzcmIpOworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBNT0RFX1NFTlNFOgorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfTU9ERV9TRU5TRVxuIik7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgcmV0dXJuIGJ1ZmZlciAqLworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoc2Vuc2VEYXRhLCBzaXplb2Yoc2Vuc2VEYXRhKSwgc3JiKTsKKworCQlpZiAoaW5mby0+RGV2aWNlRmxhZ3MgJiBERl9NRURJQV9TVEFUVVNfRU5BQkxFRCkKKwkJeworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CisJCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKKwkJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ09NTUFORF9HRVRfTUVESUFfU1RBVFVTOworCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSAwOworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCIgICBNZWRpYSBTdGF0dXMgbm90IHN1cHBvcnRlZCwganVzdCByZXBvcnQgb2theVxuIik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBURVNUX1VOSVRfUkVBRFk6CisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9URVNUX1VOSVRfUkVBRFlcbiIpOworCisJCWlmIChpbmZvLT5EZXZpY2VGbGFncyAmIERGX01FRElBX1NUQVRVU19FTkFCTEVEKQorCQl7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DT01NQU5EX0dFVF9NRURJQV9TVEFUVVM7CisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlVU19ERUJVR1AoIiAgIE1lZGlhIFN0YXR1cyBub3Qgc3VwcG9ydGVkLCBqdXN0IHJlcG9ydCBva2F5XG4iKTsKKwkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKKwkJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJFQURfQ0FQQUNJVFk6CisJeworCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCQlzdHJ1Y3QgcmVhZF9jYXBhY2l0eV9kYXRhIHJlYWRDYXBhY2l0eURhdGE7CisKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX1JFQURfQ0FQQUNJVFlcbiIpOworCisJCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBICkgeworCQkJY2FwYWNpdHkgPSBpZC0+bGJhX2NhcGFjaXR5IC0gMTsKKwkJfSBlbHNlIHsKKwkJCWNhcGFjaXR5ID0gKGlkLT5oZWFkcyAqCisJCQkJICAgIGlkLT5jeWxzICoKKwkJCQkgICAgaWQtPnNlY3RvcnMpIC0gMTsKKwkJfQorCQlyZWFkQ2FwYWNpdHlEYXRhLkxvZ2ljYWxCbG9ja0FkZHJlc3MgPSBjcHVfdG9fYmUzMihjYXBhY2l0eSk7CisJCXJlYWRDYXBhY2l0eURhdGEuQnl0ZXNQZXJCbG9jayA9IGNwdV90b19iZTMyKDB4MjAwKTsKKworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoKHVuc2lnbmVkIGNoYXIgKikgJnJlYWRDYXBhY2l0eURhdGEsCisJCQkJc2l6ZW9mKHJlYWRDYXBhY2l0eURhdGEpLCBzcmIpOworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJfQorCWJyZWFrOworCisJY2FzZSBSRUFEXzEwOgorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfUkVBRFxuIik7CisKKwkJbGJhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikmc3JiLT5jbW5kWzJdKTsKKwkJYmxvY2tDb3VudCA9ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs3XTw8OCB8ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs4XTsKKworCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSkgeworCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKShsYmEpOworCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYT4+OCk7CisJCQloZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9MQkFfTU9ERSB8ICh1bnNpZ25lZCBjaGFyKShsYmE+PjI0ICYgMHgwRik7CisJCX0gZWxzZSB7CisJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgJSBpZC0+c2VjdG9ycykgKyAxKTsKKwkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmEgLyAoaWQtPnNlY3RvcnMgKgorCQkJCQkJCSAgIGlkLT5oZWFkcykpOworCQkJaGVhZCA9ICh1bnNpZ25lZCBjaGFyKSgobGJhIC8gaWQtPnNlY3RvcnMpICUKKwkJCQkJICAgICAgIGlkLT5oZWFkcyk7CisJCX0KKwkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPQorCQkgIFJFR19TRUNUT1JfQ09VTlQgfCBSRUdfU0VDVE9SX05VTUJFUiB8CisJCSAgUkVHX0NZTElOREVSX0xPVyB8IFJFR19DWUxJTkRFUl9ISUdIIHwKKwkJICBSRUdfREVWSUNFX0hFQUQgIHwgUkVHX0NPTU1BTkQ7CisJCWF0YUNkYi0+d3JpdGUuU2VjdG9yQ291bnRCeXRlID0gKHVuc2lnbmVkIGNoYXIpYmxvY2tDb3VudDsKKwkJYXRhQ2RiLT53cml0ZS5TZWN0b3JOdW1iZXJCeXRlID0gc2VjdG51bTsKKwkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckhpZ2hCeXRlID0gKHVuc2lnbmVkIGNoYXIpKGN5bGluZGVyPj44KTsKKwkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckxvd0J5dGUgPSAodW5zaWduZWQgY2hhciljeWxpbmRlcjsKKwkJYXRhQ2RiLT53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IChoZWFkIHwgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQpOworCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX1JFQUQ7CisJCWJyZWFrOworCisJY2FzZSBXUklURV8xMDoKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX1dSSVRFXG4iKTsKKworCQlsYmEgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSZzcmItPmNtbmRbMl0pOworCQlibG9ja0NvdW50ID0gKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzddPDw4IHwgKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzhdOworCisJCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBKSB7CisJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKGxiYSk7CisJCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhPj44KTsKKwkJCWhlYWQgPSBBVEFfQUREUkVTU19ERVZIRUFEX0xCQV9NT0RFIHwgKHVuc2lnbmVkIGNoYXIpKGxiYT4+MjQgJiAweDBGKTsKKwkJfSBlbHNlIHsKKwkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikoKGxiYSAlIGlkLT5zZWN0b3JzKSArIDEpOworCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYSAvIChpZC0+c2VjdG9ycyAqIGlkLT5oZWFkcykpOworCQkJaGVhZCA9ICh1bnNpZ25lZCBjaGFyKSgobGJhIC8gaWQtPnNlY3RvcnMpICUgaWQtPmhlYWRzKTsKKwkJfQorCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CisJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9CisJCSAgUkVHX1NFQ1RPUl9DT1VOVCB8IFJFR19TRUNUT1JfTlVNQkVSIHwKKwkJICBSRUdfQ1lMSU5ERVJfTE9XIHwgUkVHX0NZTElOREVSX0hJR0ggfAorCQkgIFJFR19ERVZJQ0VfSEVBRCAgfCBSRUdfQ09NTUFORDsKKwkJYXRhQ2RiLT53cml0ZS5TZWN0b3JDb3VudEJ5dGUgPSAodW5zaWduZWQgY2hhcilibG9ja0NvdW50OworCQlhdGFDZGItPndyaXRlLlNlY3Rvck51bWJlckJ5dGUgPSBzZWN0bnVtOworCQlhdGFDZGItPndyaXRlLkN5bGluZGVySGlnaEJ5dGUgPSAodW5zaWduZWQgY2hhcikoY3lsaW5kZXI+PjgpOworCQlhdGFDZGItPndyaXRlLkN5bGluZGVyTG93Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyKWN5bGluZGVyOworCQlhdGFDZGItPndyaXRlLkRldmljZUhlYWRCeXRlID0gKGhlYWQgfCBBVEFfQUREUkVTU19ERVZIRUFEX1NURCk7CisJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fV1JJVEU7CisJCWJyZWFrOworCisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX01FRElVTV9SRU1PVkFMXG4iKTsKKworCQlpZiAoaW5mby0+RGV2aWNlRmxhZ3MgJiBERl9SRU1PVkFCTEVfTUVESUEpIHsKKwkJCVVTX0RFQlVHUCgiICAgc3JiLT5jbW5kWzRdID0gMHglWFxuIiwgc3JiLT5jbW5kWzRdKTsKKwkgICAgCisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IChzcmItPmNtbmRbNF0gJiAweDEpID8KKwkJCQlXSU5fRE9PUkxPQ0sgOiBXSU5fRE9PUlVOTE9DSzsKKwkJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVTX0RFQlVHUCgiICAgTm90IHJlbW92ZWFibGUgbWVkaWEsIGp1c3QgcmVwb3J0IG9rYXlcbiIpOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJc2VuZFRvVHJhbnNwb3J0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU1RBUlRfU1RPUDogICAgCisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9TVEFSVF9TVE9QX1VOSVRcbiIpOworCQlVU19ERUJVR1AoIiAgIHNyYi0+Y21uZFs0XSA9IDB4JVhcbiIsIHNyYi0+Y21uZFs0XSk7CisKKwkJaWYgKChzcmItPmNtbmRbNF0gJiAweDMpID09IDB4MikgeworCQkJVVNfREVCVUdQKCIgICBNZWRpYSBFamVjdFxuIik7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DT01NQU5EX01FRElBX0VKRUNUOworCQl9IGVsc2UgaWYgKChzcmItPmNtbmRbNF0gJiAweDMpID09IDB4MSkgeworCQkJVVNfREVCVUdQKCIgICBHZXQgTWVkaWEgU3RhdHVzXG4iKTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCQkJYXRhQ2RiLT5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0NPTU1BTkQ7CisJCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NPTU1BTkRfR0VUX01FRElBX1NUQVRVUzsKKwkJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVTX0RFQlVHUCgiICAgTm90aGluZyB0byBkbywganVzdCByZXBvcnQgb2theVxuIik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJVVNfREVCVUdQKCJVbnN1cHBvcnRlZCBTQ1NJIGNvbW1hbmQgLSAweCVYXG4iLCBzcmItPmNtbmRbMF0pOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJc2VuZFRvVHJhbnNwb3J0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuKHNlbmRUb1RyYW5zcG9ydCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfZnJlZV9pbmZvCisgKgorICogRnJlZXMgdGhlIGRyaXZlciBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIGlzZDIwMF9mcmVlX2luZm9fcHRycyh2b2lkICppbmZvXykKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopIGluZm9fOworCisJaWYgKGluZm8pIHsKKwkJa2ZyZWUoaW5mby0+aWQpOworCQlrZnJlZShpbmZvLT5SZWdzQnVmKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2luaXRfaW5mbworICoJCQkJCQkJCQkgCisgKiBBbGxvY2F0ZXMgKGlmIG5lY2Vzc2FyeSkgYW5kIGluaXRpYWxpemVzIHRoZSBkcml2ZXIgc3RydWN0dXJlLgorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfaW5pdF9pbmZvKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvOworCisJaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKikKKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2QyMDBfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCWVsc2UgeworCQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpc2QyMDBfaW5mbykpOworCQlpbmZvLT5pZCA9IChzdHJ1Y3QgaGRfZHJpdmVpZCAqKQorCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSwgR0ZQX0tFUk5FTCk7CisJCWluZm8tPlJlZ3NCdWYgPSAodW5zaWduZWQgY2hhciAqKQorCQkJCWttYWxsb2Moc2l6ZW9mKGluZm8tPkFUQVJlZ3MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpbmZvLT5pZCB8fCAhaW5mby0+UmVnc0J1ZikgeworCQkJaXNkMjAwX2ZyZWVfaW5mb19wdHJzKGluZm8pOworCQkJa2ZyZWUoaW5mbyk7CisJCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJCX0gZWxzZQorCQkJbWVtc2V0KGluZm8tPmlkLCAwLCBzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpKTsKKwl9CisKKwlpZiAocmV0U3RhdHVzID09IElTRDIwMF9HT09EKSB7CisJCXVzLT5leHRyYSA9IGluZm87CisJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gaXNkMjAwX2ZyZWVfaW5mb19wdHJzOworCX0gZWxzZQorCQlVU19ERUJVR1AoIkVSUk9SIC0ga21hbGxvYyBmYWlsdXJlXG4iKTsKKworCXJldHVybihyZXRTdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemF0aW9uIGZvciB0aGUgSVNEMjAwIAorICovCisKK2ludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKQoreworCVVTX0RFQlVHUCgiSVNEMjAwIEluaXRpYWxpemF0aW9uLi4uXG4iKTsKKworCS8qIEluaXRpYWxpemUgSVNEMjAwIGluZm8gc3RydWN0ICovCisKKwlpZiAoaXNkMjAwX2luaXRfaW5mbyh1cykgPT0gSVNEMjAwX0VSUk9SKSB7CisJCVVTX0RFQlVHUCgiRVJST1IgSW5pdGlhbGl6aW5nIElTRDIwMCBJbmZvIHN0cnVjdFxuIik7CisJfSBlbHNlIHsKKwkJLyogR2V0IGRldmljZSBzcGVjaWZpYyBkYXRhICovCisKKwkJaWYgKGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhKHVzKSAhPSBJU0QyMDBfR09PRCkKKwkJCVVTX0RFQlVHUCgiSVNEMjAwIEluaXRpYWxpemF0aW9uIEZhaWx1cmVcbiIpOworCQllbHNlCisJCQlVU19ERUJVR1AoIklTRDIwMCBJbml0aWFsaXphdGlvbiBjb21wbGV0ZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b2NvbCBhbmQgVHJhbnNwb3J0IGZvciB0aGUgSVNEMjAwIEFTSUMKKyAqCisgKiBUaGlzIHByb3RvY29sIGFuZCB0cmFuc3BvcnQgYXJlIGZvciBBVEEgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYW4gSVNEMjAwCisgKiBBU0lDLiAgQW4gQVRBUEkgZGV2aWNlIHRoYXQgaXMgY29uZWN0ZWQgYXMgYSBzbGF2ZSBkZXZpY2Ugd2lsbCBiZQorICogZGV0ZWN0ZWQgaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBhbmQgdGhlIHByb3RvY29sIHdpbGwKKyAqIGJlIGNoYW5nZWQgdG8gYW4gQVRBUEkgcHJvdG9jb2wgKFRyYW5zcGFyZW50IFNDU0kpLgorICoKKyAqLworCit2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMTsKKwl1bmlvbiBhdGFfY2RiIGF0YUNkYjsKKworCS8qIE1ha2Ugc3VyZSBkcml2ZXIgd2FzIGluaXRpYWxpemVkICovCisKKwlpZiAodXMtPmV4dHJhID09IE5VTEwpCisJCVVTX0RFQlVHUCgiRVJST1IgRHJpdmVyIG5vdCBpbml0aWFsaXplZFxuIik7CisKKwkvKiBDb252ZXJ0IGNvbW1hbmQgKi8KKwlzcmItPnJlc2lkID0gMDsKKwlzZW5kVG9UcmFuc3BvcnQgPSBpc2QyMDBfc2NzaV90b19hdGEoc3JiLCB1cywgJmF0YUNkYik7CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwlpZiAoc2VuZFRvVHJhbnNwb3J0KQorCQlpc2QyMDBfaW52b2tlX3RyYW5zcG9ydCh1cywgc3JiLCAmYXRhQ2RiKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzVmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIEhlYWRlciBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogRmlyc3QgcmVsZWFzZQorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIChzdXBwb3J0QGluLXN5c3RlbS5jb20pCisgKgorICogU2VlIGlzZDIwMC5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9JU0QyMDBfSAorI2RlZmluZSBfVVNCX0lTRDIwMF9ICisKK2V4dGVybiB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmY5ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCkBAIC0wLDAgKzEsNTk2IEBACisvKiBEcml2ZXIgZm9yIExleGFyICJKdW1wc2hvdCIgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiAkSWQ6IGp1bXBzaG90LmMsdiAxLjcgMjAwMi8wMi8yNSAwMDo0MDoxMyBtZGhhcm0gRXhwICQKKyAqCisgKiBqdW1wc2hvdCBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrdXNiQHNhY2toZWFkcy5vcmcpCisgKgorICogICBNYW55IHRoYW5rcyB0byBSb2JlcnQgQmFydWNoIGZvciB0aGUgU2FuRGlzayBTbWFydE1lZGlhIHJlYWRlciBkcml2ZXIKKyAqICAgd2hpY2ggSSB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqICAgU29tZSBidWdmaXhlcyBhbmQgc2NhdHRlci1nYXRoZXIgY29kZSBieSBHcmVnb3J5IFAuIFNtaXRoIAorICogICAoZ3JlZy11c2JAZWxlY3RyaWNyYWluLmNvbSkKKyAqCisgKiAgIEZpeCBmb3IgbWVkaWEgY2hhbmdlIGJ5IEpvZXJnIFNjaG5laWRlciAoanNAam9lcmdzY2huZWlkZXIuY29tKQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICoKKyAqICAgKEMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyAKKyAvKgorICAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90IFVTQiBDb21wYWN0Rmxhc2ggCisgICogcmVhZGVyLiAgTGlrZSBtYW55IG90aGVyIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVycywgdGhlIEp1bXBzaG90IGNvbnRhaW5zCisgICogYSBVU0ItdG8tQVRBIGNoaXAuIAorICAqCisgICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZy4gIElmIHlvdSdyZSB0cnVseSBwYXJhbm9pZCwKKyAgKiBob3dldmVyLCB5b3UgY2FuIGZvcmNlIHRoZSBkcml2ZXIgaW50byBhIHdyaXRlLXByb3RlY3RlZCBzdGF0ZSBieSBzZXR0aW5nCisgICogdGhlIFdQIGVuYWJsZSBiaXRzIGluIGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlLiAgU2VlIHRoZSBjb21tZW50cworICAqIGluIHRoYXQgcm91dGluZS4KKyAgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImp1bXBzaG90LmgiCisKKworc3RhdGljIGlubGluZSBpbnQganVtcHNob3RfYnVsa19yZWFkKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAorCQkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID09IDApCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwlVU19ERUJVR1AoImp1bXBzaG90X2J1bGtfcmVhZDogIGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQkJZGF0YSwgbGVuLCBOVUxMKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBqdW1wc2hvdF9idWxrX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKKworCVVTX0RFQlVHUCgianVtcHNob3RfYnVsa193cml0ZTogIGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQkJZGF0YSwgbGVuLCBOVUxMKTsKK30KKworCitzdGF0aWMgaW50IGp1bXBzaG90X2dldF9zdGF0dXMoc3RydWN0IHVzX2RhdGEgICp1cykKK3sKKwlpbnQgcmM7CisKKwlpZiAoIXVzKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJLy8gc2VuZCB0aGUgc2V0dXAKKwlyYyA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJCQkgICAwLCAweEEwLCAwLCA3LCB1cy0+aW9idWYsIDEpOworCisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWlmICh1cy0+aW9idWZbMF0gIT0gMHg1MCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X2dldF9zdGF0dXM6ICAweCUyeFxuIiwKKwkJCSAgdXMtPmlvYnVmWzBdKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK3N0YXRpYyBpbnQganVtcHNob3RfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgIHN0cnVjdCBqdW1wc2hvdF9pbmZvICppbmZvLAorCQkJICAgICAgdTMyIHNlY3RvciwKKwkJCSAgICAgIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIEp1bXBzaG90CisJLy8gc3VwcG9ydHMgYmV5b25kIDI0LWJpdCBhZGRyZXNzaW5nLiAgSXQncyBraW5kIG9mIGhhcmQgdG8gdGVzdCAKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCisJaWYgKHNlY3RvciA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHJlYWQgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworCisJCWNvbW1hbmRbMF0gPSAwOworCQljb21tYW5kWzFdID0gdGhpc3RpbWU7CisJCWNvbW1hbmRbMl0gPSBzZWN0b3IgJiAweEZGOworCQljb21tYW5kWzNdID0gKHNlY3RvciA+PiAgOCkgJiAweEZGOworCQljb21tYW5kWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCisJCWNvbW1hbmRbNV0gPSAweEUwIHwgKChzZWN0b3IgPj4gMjQpICYgMHgwRik7CisJCWNvbW1hbmRbNl0gPSAweDIwOworCisJCS8vIHNlbmQgdGhlIHNldHVwICsgY29tbWFuZAorCQlyZXN1bHQgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkJCSAgICAgICAwLCAweDIwLCAwLCAxLCBjb21tYW5kLCA3KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHJlYWQgdGhlIHJlc3VsdAorCQlyZXN1bHQgPSBqdW1wc2hvdF9idWxrX3JlYWQodXMsIGJ1ZmZlciwgbGVuKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCVVTX0RFQlVHUCgianVtcHNob3RfcmVhZF9kYXRhOiAgJWQgYnl0ZXNcbiIsIGxlbik7CisKKwkJLy8gU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJICZzZ19pZHgsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKworc3RhdGljIGludCBqdW1wc2hvdF93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgICBzdHJ1Y3QganVtcHNob3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1MzIgc2VjdG9yLAorCQkJICAgICAgIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0LCB3YWl0Y291bnQ7CisJdW5zaWduZWQgaW50IHNnX2lkeCA9IDAsIHNnX29mZnNldCA9IDA7CisKKwkvLyB3ZSdyZSB3b3JraW5nIGluIExCQSBtb2RlLiAgYWNjb3JkaW5nIHRvIHRoZSBBVEEgc3BlYywgCisJLy8gd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0IAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisJLy8KKwlpZiAoc2VjdG9yID4gMHgwRkZGRkZGRikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJnNnX2lkeCwgJnNnX29mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJY29tbWFuZFswXSA9IDA7CisJCWNvbW1hbmRbMV0gPSB0aGlzdGltZTsKKwkJY29tbWFuZFsyXSA9IHNlY3RvciAmIDB4RkY7CisJCWNvbW1hbmRbM10gPSAoc2VjdG9yID4+ICA4KSAmIDB4RkY7CisJCWNvbW1hbmRbNF0gPSAoc2VjdG9yID4+IDE2KSAmIDB4RkY7CisKKwkJY29tbWFuZFs1XSA9IDB4RTAgfCAoKHNlY3RvciA+PiAyNCkgJiAweDBGKTsKKwkJY29tbWFuZFs2XSA9IDB4MzA7CisKKwkJLy8gc2VuZCB0aGUgc2V0dXAgKyBjb21tYW5kCisJCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCTAsIDB4MjAsIDAsIDEsIGNvbW1hbmQsIDcpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gc2VuZCB0aGUgZGF0YQorCQlyZXN1bHQgPSBqdW1wc2hvdF9idWxrX3dyaXRlKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyByZWFkIHRoZSByZXN1bHQuICBhcHBhcmVudGx5IHRoZSBidWxrIHdyaXRlIGNhbiBjb21wbGV0ZQorCQkvLyBiZWZvcmUgdGhlIGp1bXBzaG90IGRyaXZlIGlzIGZpbmlzaGVkIHdyaXRpbmcuICBzbyB3ZSBsb29wCisJCS8vIGhlcmUgdW50aWwgd2UgZ2V0IGEgZ29vZCByZXR1cm4gY29kZQorCQl3YWl0Y291bnQgPSAwOworCQlkbyB7CisJCQlyZXN1bHQgPSBqdW1wc2hvdF9nZXRfc3RhdHVzKHVzKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCQkvLyBJIGhhdmUgbm90IGV4cGVyaW1lbnRlZCB0byBmaW5kIHRoZSBzbWFsbGVzdCB2YWx1ZS4KKwkJCQkvLworCQkJCW1zbGVlcCg1MCk7IAorCQkJfQorCQl9IHdoaWxlICgocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSAmJiAod2FpdGNvdW50IDwgMTApKTsKKworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJVVNfREVCVUdQKCJqdW1wc2hvdF93cml0ZV9kYXRhOiAgR2FoISAgV2FpdGNvdW50ID0gMTAuICBCYWQgd3JpdGUhP1xuIik7CisKKwkJc2VjdG9yICs9IHRoaXN0aW1lOworCQl0b3RhbGxlbiAtPSBsZW47CisJfSB3aGlsZSAodG90YWxsZW4gPiAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKKworIGxlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworc3RhdGljIGludCBqdW1wc2hvdF9pZF9kZXZpY2Uoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICAgc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXBseTsKKwlpbnQgCSByYzsKKworCWlmICghdXMgfHwgIWluZm8pCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwljb21tYW5kWzBdID0gMHhFMDsKKwljb21tYW5kWzFdID0gMHhFQzsKKwlyZXBseSA9IGttYWxsb2MoNTEyLCBHRlBfTk9JTyk7CisJaWYgKCFyZXBseSkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIHNlbmQgdGhlIHNldHVwCisJcmMgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkJICAgMCwgMHgyMCwgMCwgNiwgY29tbWFuZCwgMik7CisKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgianVtcHNob3RfaWRfZGV2aWNlOiAgR2FoISAiCisJCQkgICJzZW5kX2NvbnRyb2wgZm9yIHJlYWRfY2FwYWNpdHkgZmFpbGVkXG4iKTsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLy8gcmVhZCB0aGUgcmVwbHkKKwlyYyA9IGp1bXBzaG90X2J1bGtfcmVhZCh1cywgcmVwbHksIDUxMik7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlpbmZvLT5zZWN0b3JzID0gKCh1MzIpKHJlcGx5WzExN10pIDw8IDI0KSB8CisJCQkoKHUzMikocmVwbHlbMTE2XSkgPDwgMTYpIHwKKwkJCSgodTMyKShyZXBseVsxMTVdKSA8PCAgOCkgfAorCQkJKCh1MzIpKHJlcGx5WzExNF0pICAgICAgKTsKKworCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCAKKwkJCQkgICAgICBpbnQgc2Vuc2VfNikKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciByd19lcnJfcGFnZVsxMl0gPSB7CisJCTB4MSwgMHhBLCAweDIxLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwCisJfTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZV9wYWdlWzEyXSA9IHsKKwkJMHg4LCAweEEsIDB4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgcmJhY19wYWdlWzEyXSA9IHsKKwkJMHgxQiwgMHhBLCAwLCAweDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisJfTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciB0aW1lcl9wYWdlWzhdID0geworCQkweDFDLCAweDYsIDAsIDAsIDAsIDAKKwl9OworCXVuc2lnbmVkIGNoYXIgcGMsIHBhZ2VfY29kZTsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm8gPSAoc3RydWN0IGp1bXBzaG90X2luZm8gKikgKHVzLT5leHRyYSk7CisJdW5zaWduZWQgY2hhciAqcHRyID0gdXMtPmlvYnVmOworCisJcGMgPSBzcmItPmNtbmRbMl0gPj4gNjsKKwlwYWdlX2NvZGUgPSBzcmItPmNtbmRbMl0gJiAweDNGOworCisJc3dpdGNoIChwYykgeworCSAgIGNhc2UgMHgwOgorCQlVU19ERUJVR1AoImp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlOiAgQ3VycmVudCB2YWx1ZXNcbiIpOworCQlicmVhazsKKwkgICBjYXNlIDB4MToKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZTogIENoYW5nZWFibGUgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDI6CisJCVVTX0RFQlVHUCgianVtcHNob3RfaGFuZGxlX21vZGVfc2Vuc2U6ICBEZWZhdWx0IHZhbHVlc1xuIik7CisJCWJyZWFrOworCSAgIGNhc2UgMHgzOgorCQlVU19ERUJVR1AoImp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlOiAgU2F2ZXMgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJfQorCisJbWVtc2V0KHB0ciwgMCwgOCk7CisJaWYgKHNlbnNlXzYpIHsKKwkJcHRyWzJdID0gMHgwMDsJCS8vIFdQIGVuYWJsZTogMHg4MAorCQlpID0gNDsKKwl9IGVsc2UgeworCQlwdHJbM10gPSAweDAwOwkJLy8gV1AgZW5hYmxlOiAweDgwCisJCWkgPSA4OworCX0KKworCXN3aXRjaCAocGFnZV9jb2RlKSB7CisJICAgY2FzZSAweDA6CisJCS8vIHZlbmRvci1zcGVjaWZpYyBtb2RlCisJCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJCWluZm8tPnNlbnNlX2FzYyA9IDB4MjQ7CisJCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCSAgIGNhc2UgMHgxOgorCQltZW1jcHkocHRyICsgaSwgcndfZXJyX3BhZ2UsIHNpemVvZihyd19lcnJfcGFnZSkpOworCQlpICs9IHNpemVvZihyd19lcnJfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDg6CisJCW1lbWNweShwdHIgKyBpLCBjYWNoZV9wYWdlLCBzaXplb2YoY2FjaGVfcGFnZSkpOworCQlpICs9IHNpemVvZihjYWNoZV9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUI6CisJCW1lbWNweShwdHIgKyBpLCByYmFjX3BhZ2UsIHNpemVvZihyYmFjX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocmJhY19wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUM6CisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4M0Y6CisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJbWVtY3B5KHB0ciArIGksIHJiYWNfcGFnZSwgc2l6ZW9mKHJiYWNfcGFnZSkpOworCQlpICs9IHNpemVvZihyYmFjX3BhZ2UpOworCQltZW1jcHkocHRyICsgaSwgY2FjaGVfcGFnZSwgc2l6ZW9mKGNhY2hlX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YoY2FjaGVfcGFnZSk7CisJCW1lbWNweShwdHIgKyBpLCByd19lcnJfcGFnZSwgc2l6ZW9mKHJ3X2Vycl9wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJ3X2Vycl9wYWdlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNlbnNlXzYpCisJCXB0clswXSA9IGkgLSAxOworCWVsc2UKKwkJKChfX2JlMTYgKikgcHRyKVswXSA9IGNwdV90b19iZTE2KGkgLSAyKTsKKwl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCBpLCBzcmIpOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisKK3N0YXRpYyB2b2lkIGp1bXBzaG90X2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSkKK3sKKwkvLyB0aGlzIHJvdXRpbmUgaXMgYSBwbGFjZWhvbGRlci4uLgorCS8vIGN1cnJlbnRseSwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGV4dHJhIGJsb2NrcyBzbyB3ZSdyZSBva2F5Cit9CisKKworCisvLyBUcmFuc3BvcnQgZm9yIHRoZSBMZXhhciAnSnVtcHNob3QnCisvLworaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm87CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgYmxvY2ssIGJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVs4XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QganVtcHNob3RfaW5mbyksIEdGUF9OT0lPKTsKKwkJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgR2FoISBDYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciBqdW1wc2hvdCBpbmZvIHN0cnVjdCFcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJfQorCQltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IGp1bXBzaG90X2luZm8pKTsKKwkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBqdW1wc2hvdF9pbmZvX2Rlc3RydWN0b3I7CisJfQorCisJaW5mbyA9IChzdHJ1Y3QganVtcHNob3RfaW5mbyAqKSAodXMtPmV4dHJhKTsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIElOUVVJUlkuICBSZXR1cm5pbmcgYm9ndXMgcmVzcG9uc2UuXG4iKTsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgc2l6ZW9mKGlucXVpcnlfcmVzcG9uc2UpKTsKKwkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBwdHIsIDM2KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF9DQVBBQ0lUWSkgeworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOyAgLy8gaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYworCisJCXJjID0ganVtcHNob3RfZ2V0X3N0YXR1cyh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlyYyA9IGp1bXBzaG90X2lkX2RldmljZSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFQURfQ0FQQUNJVFk6ICAlbGQgc2VjdG9ycywgJWxkIGJ5dGVzIHBlciBzZWN0b3JcbiIsCisJCQkgIGluZm8tPnNlY3RvcnMsIGluZm8tPnNzaXplKTsKKworCQkvLyBidWlsZCB0aGUgcmVwbHkKKwkJLy8KKwkJKChfX2JlMzIgKikgcHRyKVswXSA9IGNwdV90b19iZTMyKGluZm8tPnNlY3RvcnMgLSAxKTsKKwkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKGluZm8tPnNzaXplKTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTEVDVF8xMCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIEdhaCEgTU9ERV9TRUxFQ1RfMTAuXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTApIHsKKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgUkVBRF8xMDogcmVhZCBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4ganVtcHNob3RfcmVhZF9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFJFQURfMTIgYnV0IHN1cHBvcnQgaXQgYW55d2F5Li4uCisJCS8vCisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkJICgodTMyKShzcmItPmNtbmRbOF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbOV0pKTsKKworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFQURfMTI6IHJlYWQgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBXUklURV8xMDogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFdSSVRFXzEyIGJ1dCBzdXBwb3J0IGl0IGFueXdheS4uLgorCQkvLworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs2XSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgMTYpIHwKKwkJCSAoKHUzMikoc3JiLT5jbW5kWzhdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzldKSk7CisKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBXUklURV8xMjogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBURVNUX1VOSVRfUkVBRFkuXG4iKTsKKwkJcmV0dXJuIGp1bXBzaG90X2dldF9zdGF0dXModXMpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFUVVFU1RfU0VOU0UuXG4iKTsKKworCQltZW1zZXQocHRyLCAwLCAxOCk7CisJCXB0clswXSA9IDB4RjA7CisJCXB0clsyXSA9IGluZm8tPnNlbnNlX2tleTsKKwkJcHRyWzddID0gMTE7CisJCXB0clsxMl0gPSBpbmZvLT5zZW5zZV9hc2M7CisJCXB0clsxM10gPSBpbmZvLT5zZW5zZV9hc2NxOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCAxOCwgc3JiKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFKSB7CisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgTU9ERV9TRU5TRV82IGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlKHVzLCBzcmIsIDEpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIE1PREVfU0VOU0VfMTAgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4ganVtcHNob3RfaGFuZGxlX21vZGVfc2Vuc2UodXMsIHNyYiwgMCk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkgeworCQkvLyBzdXJlLiAgd2hhdGV2ZXIuICBub3QgbGlrZSB3ZSBjYW4gc3RvcCB0aGUgdXNlciBmcm9tIHBvcHBpbmcKKwkJLy8gdGhlIG1lZGlhIG91dCBvZiB0aGUgZGV2aWNlIChubyBsb2NraW5nIGRvb3JzLCBldGMpCisJCS8vCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFNUQVJUX1NUT1ApIHsKKwkJLyogdGhpcyBpcyB1c2VkIGJ5IHNkLmMnY2hlY2tfc2NzaWRpc2tfbWVkaWFfY2hhbmdlIHRvIGRldGVjdAorCQkgICBtZWRpYSBjaGFuZ2UgKi8KKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBTVEFSVF9TVE9QLlxuIik7CisJCS8qIHRoZSBmaXJzdCBqdW1wc2hvdF9pZF9kZXZpY2UgYWZ0ZXIgYSBtZWRpYSBjaGFuZ2UgcmV0dXJucworCQkgICBhbiBlcnJvciAoZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseSkgKi8KKwkJcmMgPSBqdW1wc2hvdF9pZF9kZXZpY2UodXMsIGluZm8pOworCQlpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCWluZm8tPnNlbnNlX2tleSA9IE5PX1NFTlNFOworCQkJc3JiLT5yZXN1bHQgPSBTVUNDRVNTOworCQl9IGVsc2UgeworCQkJaW5mby0+c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJfQorCQlyZXR1cm4gcmM7CisJfQorCisJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBHYWghIFVua25vd24gY29tbWFuZDogJWQgKDB4JXgpXG4iLAorCQkgIHNyYi0+Y21uZFswXSwgc3JiLT5jbW5kWzBdKTsKKwlpbmZvLT5zZW5zZV9rZXkgPSAweDA1OworCWluZm8tPnNlbnNlX2FzYyA9IDB4MjA7CisJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliYWM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaApAQCAtMCwwICsxLDM5IEBACisvKiBEcml2ZXIgZm9yIExleGFyICJKdW1wc2hvdCIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKiBIZWFkZXIgRmlsZQorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK3VzYkBzYWNraGVhZHMub3JnKQorICoKKyAqIFNlZSBqdW1wc2hvdC5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVNCX0pVTVBTSE9UX0gKKyNkZWZpbmUgX1VTQl9KVU1QU0hPVF9ICisKK2V4dGVybiBpbnQganVtcHNob3RfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IGp1bXBzaG90X2luZm8geworICAgdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7ICAgICAvLyB0b3RhbCBzZWN0b3IgY291bnQKKyAgIHVuc2lnbmVkIGxvbmcgICBzc2l6ZTsgICAgICAgLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKKyAKKyAgIC8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0CisgICB1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsgICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOyAgLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkMzA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDI1NCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKgorICogJElkOiBwcm90b2NvbC5jLHYgMS4xNCAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoYykgMjAwMCBEYXZpZCBMLiBCcm93biwgSnIuICh1c2Itc3RvcmFnZUBkYXZpZGIub3JnKQorICogICAoYykgMjAwMiBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLm9yZykKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzY3NpZ2x1ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvY29sIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJLyogUGFkIHRoZSBBVEFQSSBjb21tYW5kIHdpdGggemVyb3MgCisJICoKKwkgKiBOT1RFOiBUaGlzIG9ubHkgd29ya3MgYmVjYXVzZSBhIHNjc2lfY21uZCBzdHJ1Y3QgZmllbGQgY29udGFpbnMKKwkgKiBhIHVuc2lnbmVkIGNoYXIgY21uZFsxNl0sIHNvIHdlIGtub3cgd2UgaGF2ZSBzdG9yYWdlIGF2YWlsYWJsZQorCSAqLworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwkvKiBzZXQgY29tbWFuZCBsZW5ndGggdG8gMTIgYnl0ZXMgKi8KKwlzcmItPmNtZF9sZW4gPSAxMjsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7Cit9CisKK3ZvaWQgdXNiX3N0b3JfQVRBUElfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwkvKiBQYWQgdGhlIEFUQVBJIGNvbW1hbmQgd2l0aCB6ZXJvcyAKKwkgKgorCSAqIE5PVEU6IFRoaXMgb25seSB3b3JrcyBiZWNhdXNlIGEgc2NzaV9jbW5kIHN0cnVjdCBmaWVsZCBjb250YWlucworCSAqIGEgdW5zaWduZWQgY2hhciBjbW5kWzE2XSwgc28gd2Uga25vdyB3ZSBoYXZlIHN0b3JhZ2UgYXZhaWxhYmxlCisJICovCisKKwkvKiBQYWQgdGhlIEFUQVBJIGNvbW1hbmQgd2l0aCB6ZXJvcyAqLworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwkvKiBzZXQgY29tbWFuZCBsZW5ndGggdG8gMTIgYnl0ZXMgKi8KKwlzcmItPmNtZF9sZW4gPSAxMjsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7Cit9CisKKwordm9pZCB1c2Jfc3Rvcl91ZmlfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwkvKiBmaXggc29tZSBjb21tYW5kcyAtLSB0aGlzIGlzIGEgZm9ybSBvZiBtb2RlIHRyYW5zbGF0aW9uCisJICogVUZJIGRldmljZXMgb25seSBhY2NlcHQgMTIgYnl0ZSBsb25nIGNvbW1hbmRzIAorCSAqCisJICogTk9URTogVGhpcyBvbmx5IHdvcmtzIGJlY2F1c2UgYSBzY3NpX2NtbmQgc3RydWN0IGZpZWxkIGNvbnRhaW5zCisJICogYSB1bnNpZ25lZCBjaGFyIGNtbmRbMTZdLCBzbyB3ZSBrbm93IHdlIGhhdmUgc3RvcmFnZSBhdmFpbGFibGUKKwkgKi8KKworCS8qIFBhZCB0aGUgQVRBUEkgY29tbWFuZCB3aXRoIHplcm9zICovCisJZm9yICg7IHNyYi0+Y21kX2xlbjwxMjsgc3JiLT5jbWRfbGVuKyspCisJCXNyYi0+Y21uZFtzcmItPmNtZF9sZW5dID0gMDsKKworCS8qIHNldCBjb21tYW5kIGxlbmd0aCB0byAxMiBieXRlcyAodGhpcyBhZmZlY3RzIHRoZSB0cmFuc3BvcnQgbGF5ZXIpICovCisJc3JiLT5jbWRfbGVuID0gMTI7CisKKwkvKiBYWFggV2Ugc2hvdWxkIGJlIGNvbnN0YW50bHkgcmUtZXZhbHVhdGluZyB0aGUgbmVlZCBmb3IgdGhlc2UgKi8KKworCS8qIGRldGVybWluZSB0aGUgY29ycmVjdCBkYXRhIGxlbmd0aCBmb3IgdGhlc2UgY29tbWFuZHMgKi8KKwlzd2l0Y2ggKHNyYi0+Y21uZFswXSkgeworCisJCS8qIGZvciBJTlFVSVJZLCBVRkkgZGV2aWNlcyBvbmx5IGV2ZXIgcmV0dXJuIDM2IGJ5dGVzICovCisJY2FzZSBJTlFVSVJZOgorCQlzcmItPmNtbmRbNF0gPSAzNjsKKwkJYnJlYWs7CisKKwkJLyogYWdhaW4sIGZvciBNT0RFX1NFTlNFXzEwLCB3ZSBnZXQgdGhlIG1pbmltdW0gKDgpICovCisJY2FzZSBNT0RFX1NFTlNFXzEwOgorCQlzcmItPmNtbmRbN10gPSAwOworCQlzcmItPmNtbmRbOF0gPSA4OworCQlicmVhazsKKworCQkvKiBmb3IgUkVRVUVTVF9TRU5TRSwgVUZJIGRldmljZXMgb25seSBldmVyIHJldHVybiAxOCBieXRlcyAqLworCWNhc2UgUkVRVUVTVF9TRU5TRToKKwkJc3JiLT5jbW5kWzRdID0gMTg7CisJCWJyZWFrOworCX0gLyogZW5kIHN3aXRjaCBvbiBjbW5kWzBdICovCisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCit2b2lkIHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCisJCQkJICAgICAgIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIGJ1ZmZlciBhY2Nlc3Mgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29weSBhIGJ1ZmZlciBvZiBsZW5ndGggYnVmbGVuIHRvL2Zyb20gdGhlIHNyYidzIHRyYW5zZmVyIGJ1ZmZlci4KKyAqIChOb3RlOiBmb3Igc2NhdHRlci1nYXRoZXIgdHJhbnNmZXJzIChzcmItPnVzZV9zZyA+IDApLCBzcmItPnJlcXVlc3RfYnVmZmVyCisgKiBwb2ludHMgdG8gYSBsaXN0IG9mIHMtZyBlbnRyaWVzIGFuZCB3ZSBpZ25vcmUgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4uCisgKiBGb3Igbm9uLXNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycywgc3JiLT5yZXF1ZXN0X2J1ZmZlciBwb2ludHMgdG8gdGhlCisgKiB0cmFuc2ZlciBidWZmZXIgaXRzZWxmIGFuZCBzcmItPnJlcXVlc3RfYnVmZmxlbiBpcyB0aGUgYnVmZmVyJ3MgbGVuZ3RoLikKKyAqIFVwZGF0ZSB0aGUgKmluZGV4IGFuZCAqb2Zmc2V0IHZhcmlhYmxlcyBzbyB0aGF0IHRoZSBuZXh0IGNvcHkgd2lsbAorICogcGljayB1cCBmcm9tIHdoZXJlIHRoaXMgb25lIGxlZnQgb2ZmLiAqLworCit1bnNpZ25lZCBpbnQgdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHVuc2lnbmVkIGludCAqaW5kZXgsCisJdW5zaWduZWQgaW50ICpvZmZzZXQsIGVudW0geGZlcl9idWZfZGlyIGRpcikKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCisJLyogSWYgbm90IHVzaW5nIHNjYXR0ZXItZ2F0aGVyLCBqdXN0IHRyYW5zZmVyIHRoZSBkYXRhIGRpcmVjdGx5LgorCSAqIE1ha2UgY2VydGFpbiBpdCB3aWxsIGZpdCBpbiB0aGUgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4gKi8KKwlpZiAoc3JiLT51c2Vfc2cgPT0gMCkgeworCQlpZiAoKm9mZnNldCA+PSBzcmItPnJlcXVlc3RfYnVmZmxlbikKKwkJCXJldHVybiAwOworCQljbnQgPSBtaW4oYnVmbGVuLCBzcmItPnJlcXVlc3RfYnVmZmxlbiAtICpvZmZzZXQpOworCQlpZiAoZGlyID09IFRPX1hGRVJfQlVGKQorCQkJbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopIHNyYi0+cmVxdWVzdF9idWZmZXIgKyAqb2Zmc2V0LAorCQkJCQlidWZmZXIsIGNudCk7CisJCWVsc2UKKwkJCW1lbWNweShidWZmZXIsICh1bnNpZ25lZCBjaGFyICopIHNyYi0+cmVxdWVzdF9idWZmZXIgKworCQkJCQkqb2Zmc2V0LCBjbnQpOworCQkqb2Zmc2V0ICs9IGNudDsKKworCS8qIFVzaW5nIHNjYXR0ZXItZ2F0aGVyLiAgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBsaXN0IG9uZSBlbnRyeQorCSAqIGF0IGEgdGltZS4gIEVhY2ggcy1nIGVudHJ5IGNvbnRhaW5zIHNvbWUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKKwkgKiBlYWNoIHBhZ2UgaGFzIHRvIGJlIGttYXAoKSdlZCBzZXBhcmF0ZWx5LiAgSWYgdGhlIHBhZ2UgaXMgYWxyZWFkeQorCSAqIGluIGtlcm5lbC1hZGRyZXNzYWJsZSBtZW1vcnkgdGhlbiBrbWFwKCkgd2lsbCByZXR1cm4gaXRzIGFkZHJlc3MuCisJICogSWYgdGhlIHBhZ2UgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgLS0gc3VjaCBhcyBhIHVzZXIgYnVmZmVyCisJICogbG9jYXRlZCBpbiBoaWdoIG1lbW9yeSAtLSB0aGVuIGttYXAoKSB3aWxsIG1hcCBpdCB0byBhIHRlbXBvcmFyeQorCSAqIHBvc2l0aW9uIGluIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuICovCisJfSBlbHNlIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9CisJCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBzcmItPnJlcXVlc3RfYnVmZmVyCisJCQkJKyAqaW5kZXg7CisKKwkJLyogVGhpcyBsb29wIGhhbmRsZXMgYSBzaW5nbGUgcy1nIGxpc3QgZW50cnksIHdoaWNoIG1heQorCQkgKiBpbmNsdWRlIG11bHRpcGxlIHBhZ2VzLiAgRmluZCB0aGUgaW5pdGlhbCBwYWdlIHN0cnVjdHVyZQorCQkgKiBhbmQgdGhlIHN0YXJ0aW5nIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UsIGFuZCB1cGRhdGUKKwkJICogdGhlICpvZmZzZXQgYW5kICppbmRleCB2YWx1ZXMgZm9yIHRoZSBuZXh0IGxvb3AuICovCisJCWNudCA9IDA7CisJCXdoaWxlIChjbnQgPCBidWZsZW4gJiYgKmluZGV4IDwgc3JiLT51c2Vfc2cpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gc2ctPnBhZ2UgKworCQkJCQkoKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSA+PiBQQUdFX1NISUZUKTsKKwkJCXVuc2lnbmVkIGludCBwb2ZmID0KKwkJCQkJKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSAmIChQQUdFX1NJWkUtMSk7CisJCQl1bnNpZ25lZCBpbnQgc2dsZW4gPSBzZy0+bGVuZ3RoIC0gKm9mZnNldDsKKworCQkJaWYgKHNnbGVuID4gYnVmbGVuIC0gY250KSB7CisKKwkJCQkvKiBUcmFuc2ZlciBlbmRzIHdpdGhpbiB0aGlzIHMtZyBlbnRyeSAqLworCQkJCXNnbGVuID0gYnVmbGVuIC0gY250OworCQkJCSpvZmZzZXQgKz0gc2dsZW47CisJCQl9IGVsc2UgeworCisJCQkJLyogVHJhbnNmZXIgY29udGludWVzIHRvIG5leHQgcy1nIGVudHJ5ICovCisJCQkJKm9mZnNldCA9IDA7CisJCQkJKysqaW5kZXg7CisJCQkJKytzZzsKKwkJCX0KKworCQkJLyogVHJhbnNmZXIgdGhlIGRhdGEgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhpcworCQkJICogcy1nIGVudHJ5LiAgRm9yIGVhY2ggcGFnZTogY2FsbCBrbWFwKCksIGRvIHRoZQorCQkJICogdHJhbnNmZXIsIGFuZCBjYWxsIGt1bm1hcCgpIGltbWVkaWF0ZWx5IGFmdGVyLiAqLworCQkJd2hpbGUgKHNnbGVuID4gMCkgeworCQkJCXVuc2lnbmVkIGludCBwbGVuID0gbWluKHNnbGVuLCAodW5zaWduZWQgaW50KQorCQkJCQkJUEFHRV9TSVpFIC0gcG9mZik7CisJCQkJdW5zaWduZWQgY2hhciAqcHRyID0ga21hcChwYWdlKTsKKworCQkJCWlmIChkaXIgPT0gVE9fWEZFUl9CVUYpCisJCQkJCW1lbWNweShwdHIgKyBwb2ZmLCBidWZmZXIgKyBjbnQsIHBsZW4pOworCQkJCWVsc2UKKwkJCQkJbWVtY3B5KGJ1ZmZlciArIGNudCwgcHRyICsgcG9mZiwgcGxlbik7CisJCQkJa3VubWFwKHBhZ2UpOworCisJCQkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBwYWdlICovCisJCQkJcG9mZiA9IDA7CisJCQkJKytwYWdlOworCQkJCWNudCArPSBwbGVuOworCQkJCXNnbGVuIC09IHBsZW47CisJCQl9CisJCX0KKwl9CisKKwkvKiBSZXR1cm4gdGhlIGFtb3VudCBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLworCXJldHVybiBjbnQ7Cit9CisKKy8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKKyAqIFNDU0kgcmVzaWR1ZS4gKi8KK3ZvaWQgdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCit7CisJdW5zaWduZWQgaW50IGluZGV4ID0gMCwgb2Zmc2V0ID0gMDsKKworCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGJ1Zmxlbiwgc3JiLCAmaW5kZXgsICZvZmZzZXQsCisJCQlUT19YRkVSX0JVRik7CisJaWYgKGJ1ZmxlbiA8IHNyYi0+cmVxdWVzdF9idWZmbGVuKQorCQlzcmItPnJlc2lkID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSBidWZsZW47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiZmYwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuaApAQCAtMCwwICsxLDc0IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIFByb3RvY29sIEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogcHJvdG9jb2wuaCx2IDEuNCAyMDAxLzAyLzEzIDA3OjEwOjAzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9QUk9UT0NPTF9IXworI2RlZmluZSBfUFJPVE9DT0xfSF8KKworLyogU3ViIENsYXNzZXMgKi8KKworI2RlZmluZSBVU19TQ19SQkMJMHgwMQkJLyogVHlwaWNhbGx5LCBmbGFzaCBkZXZpY2VzICovCisjZGVmaW5lIFVTX1NDXzgwMjAJMHgwMgkJLyogQ0QtUk9NICovCisjZGVmaW5lIFVTX1NDX1FJQwkweDAzCQkvKiBRSUMtMTU3IFRhcGVzICovCisjZGVmaW5lIFVTX1NDX1VGSQkweDA0CQkvKiBGbG9wcHkgKi8KKyNkZWZpbmUgVVNfU0NfODA3MAkweDA1CQkvKiBSZW1vdmFibGUgbWVkaWEgKi8KKyNkZWZpbmUgVVNfU0NfU0NTSQkweDA2CQkvKiBUcmFuc3BhcmVudCAqLworI2RlZmluZSBVU19TQ19JU0QyMDAgICAgMHgwNwkJLyogSVNEMjAwIEFUQSAqLworI2RlZmluZSBVU19TQ19NSU4JVVNfU0NfUkJDCisjZGVmaW5lIFVTX1NDX01BWAlVU19TQ19JU0QyMDAKKworI2RlZmluZSBVU19TQ19ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCisKKy8qIFByb3RvY29sIGhhbmRsaW5nIHJvdXRpbmVzICovCitleHRlcm4gdm9pZCB1c2Jfc3Rvcl9BVEFQSV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gdm9pZCB1c2Jfc3Rvcl91ZmlfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kKiwKKwkJc3RydWN0IHVzX2RhdGEqKTsKKworLyogc3RydWN0IHNjc2lfY21uZCB0cmFuc2ZlciBidWZmZXIgYWNjZXNzIHV0aWxpdGllcyAqLworZW51bSB4ZmVyX2J1Zl9kaXIJe1RPX1hGRVJfQlVGLCBGUk9NX1hGRVJfQlVGfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYodW5zaWduZWQgY2hhciAqYnVmZmVyLAorCXVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgdW5zaWduZWQgaW50ICppbmRleCwKKwl1bnNpZ25lZCBpbnQgKm9mZnNldCwgZW51bSB4ZmVyX2J1Zl9kaXIgZGlyKTsKKworZXh0ZXJuIHZvaWQgdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlNDhhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMCwwICsxLDUwMCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBTQ1NJIGxheWVyIGdsdWUgY29kZQorICoKKyAqICRJZDogc2NzaWdsdWUuYyx2IDEuMjYgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDAgRGF2aWQgTC4gQnJvd24sIEpyLiAodXNiLXN0b3JhZ2VAZGF2aWRiLm9yZykKKyAqICAgKGMpIDIwMDAgU3RlcGhlbiBKLiBHb3dkeSAoU0dvd2R5QGxibC5nb3YpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aW5mby5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInNjc2lnbHVlLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhvc3QgZnVuY3Rpb25zIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY29uc3QgY2hhciogaG9zdF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCit7CisJcmV0dXJuICJTQ1NJIGVtdWxhdGlvbiBmb3IgVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2VzIjsKK30KKworc3RhdGljIGludCBzbGF2ZV9hbGxvYyAoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCS8qCisJICogU2V0IHRoZSBJTlFVSVJZIHRyYW5zZmVyIGxlbmd0aCB0byAzNi4gIFdlIGRvbid0IHVzZSBhbnkgb2YKKwkgKiB0aGUgZXh0cmEgZGF0YSBhbmQgbWFueSBkZXZpY2VzIGNob2tlIGlmIGFza2VkIGZvciBtb3JlIG9yCisJICogbGVzcyB0aGFuIDM2IGJ5dGVzLgorCSAqLworCXNkZXYtPmlucXVpcnlfbGVuID0gMzY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNkZXYtPmhvc3QpOworCisJLyogU2NhdHRlci1nYXRoZXIgYnVmZmVycyAoYWxsIGJ1dCB0aGUgbGFzdCkgbXVzdCBoYXZlIGEgbGVuZ3RoCisJICogZGl2aXNpYmxlIGJ5IHRoZSBidWxrIG1heHBhY2tldCBzaXplLiAgT3RoZXJ3aXNlIGEgZGF0YSBwYWNrZXQKKwkgKiB3b3VsZCBlbmQgdXAgYmVpbmcgc2hvcnQsIGNhdXNpbmcgYSBwcmVtYXR1cmUgZW5kIHRvIHRoZSBkYXRhCisJICogdHJhbnNmZXIuICBTaW5jZSBoaWdoLXNwZWVkIGJ1bGsgcGlwZXMgaGF2ZSBhIG1heHBhY2tldCBzaXplCisJICogb2YgNTEyLCB3ZSdsbCB1c2UgdGhhdCBhcyB0aGUgc2NzaSBkZXZpY2UgcXVldWUncyBETUEgYWxpZ25tZW50CisJICogbWFzay4gIEd1YXJhbnRlZWluZyBwcm9wZXIgYWxpZ25tZW50IG9mIHRoZSBmaXJzdCBidWZmZXIgd2lsbAorCSAqIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0IGJlY2F1c2UsIGV4Y2VwdCBhdCB0aGUgYmVnaW5uaW5nIGFuZAorCSAqIHRoZSBlbmQsIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMgZm9sbG93IHBhZ2UgYm91bmRhcmllcy4gKi8KKwlibGtfcXVldWVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAoNTEyIC0gMSkpOworCisJLyogU2V0IHRoZSBTQ1NJIGxldmVsIHRvIGF0IGxlYXN0IDIuICBXZSdsbCBsZWF2ZSBpdCBhdCAzIGlmIHRoYXQncworCSAqIHdoYXQgaXMgb3JpZ2luYWxseSByZXBvcnRlZC4gIFdlIG5lZWQgdGhpcyB0byBhdm9pZCBjb25mdXNpbmcKKwkgKiB0aGUgU0NTSSBsYXllciB3aXRoIGRldmljZXMgdGhhdCByZXBvcnQgMCBvciAxLCBidXQgbmVlZCAxMC1ieXRlCisJICogY29tbWFuZHMgKGFsYSBBVEFQSSBkZXZpY2VzIGJlaGluZCBjZXJ0YWluIGJyaWRnZXMsIG9yIGRldmljZXMKKwkgKiB3aGljaCBzaW1wbHkgaGF2ZSBicm9rZW4gSU5RVUlSWSBkYXRhKS4KKwkgKgorCSAqIE5PVEU6IFRoaXMgbWVhbnMgL2Rldi9zZyBwcm9ncmFtcyAoYWxhIGNkcmVjb3JkKSB3aWxsIGdldCB0aGUKKwkgKiBhY3R1YWwgaW5mb3JtYXRpb24uICBUaGlzIHNlZW1zIHRvIGJlIHRoZSBwcmVmZXJlbmNlIGZvcgorCSAqIHByb2dyYW1zIGxpa2UgdGhhdC4KKwkgKgorCSAqIE5PVEU6IFRoaXMgYWxzbyBtZWFucyB0aGF0IC9wcm9jL3Njc2kvc2NzaSBhbmQgc3lzZnMgbWF5IHJlcG9ydAorCSAqIHRoZSBhY3R1YWwgdmFsdWUgb3IgdGhlIG1vZGlmaWVkIG9uZSwgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZQorCSAqIGRhdGEgY29tZXMgZnJvbS4KKwkgKi8KKwlpZiAoc2Rldi0+c2NzaV9sZXZlbCA8IFNDU0lfMikKKwkJc2Rldi0+c2NzaV9sZXZlbCA9IFNDU0lfMjsKKworCS8qIEFjY29yZGluZyB0byB0aGUgdGVjaG5pY2FsIHN1cHBvcnQgcGVvcGxlIGF0IEdlbmVzeXMgTG9naWMsCisJICogZGV2aWNlcyB1c2luZyB0aGVpciBjaGlwcyBoYXZlIHByb2JsZW1zIHRyYW5zZmVycmluZyBtb3JlIHRoYW4KKwkgKiAzMiBLQiBhdCBhIHRpbWUuICBJbiBwcmFjdGljZSBwZW9wbGUgaGF2ZSBmb3VuZCB0aGF0IDY0IEtCCisJICogd29ya3Mgb2theSBhbmQgdGhhdCdzIHdoYXQgV2luZG93cyBkb2VzLiAgQnV0IHdlJ2xsIGJlCisJICogY29uc2VydmF0aXZlOyBwZW9wbGUgY2FuIGFsd2F5cyB1c2UgdGhlIHN5c2ZzIGludGVyZmFjZSB0bworCSAqIGluY3JlYXNlIG1heF9zZWN0b3JzLiAqLworCWlmIChsZTE2X3RvX2NwdSh1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9WRU5ET1JfSURfR0VORVNZUyAmJgorCQkJc2Rldi0+cmVxdWVzdF9xdWV1ZS0+bWF4X3NlY3RvcnMgPiA2NCkKKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDY0KTsKKworCS8qIFdlIGNhbid0IHB1dCB0aGVzZSBzZXR0aW5ncyBpbiBzbGF2ZV9hbGxvYygpIGJlY2F1c2UgdGhhdCBnZXRzCisJICogY2FsbGVkIGJlZm9yZSB0aGUgZGV2aWNlIHR5cGUgaXMga25vd24uICBDb25zZXF1ZW50bHkgdGhlc2UKKwkgKiBzZXR0aW5ncyBjYW4ndCBiZSBvdmVycmlkZGVuIHZpYSB0aGUgc2NzaSBkZXZpbmZvIG1lY2hhbmlzbS4gKi8KKwlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spIHsKKworCQkvKiBEaXNrLXR5cGUgZGV2aWNlcyB1c2UgTU9ERSBTRU5TRSg2KSBpZiB0aGUgcHJvdG9jb2wKKwkJICogKFN1YkNsYXNzKSBpcyBUcmFuc3BhcmVudCBTQ1NJLCBvdGhlcndpc2UgdGhleSB1c2UKKwkJICogTU9ERSBTRU5TRSgxMCkuICovCisJCWlmICh1cy0+c3ViY2xhc3MgIT0gVVNfU0NfU0NTSSkKKwkJCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOworCisJCS8qIE1hbnkgZGlza3Mgb25seSBhY2NlcHQgTU9ERSBTRU5TRSB0cmFuc2ZlciBsZW5ndGhzIG9mCisJCSAqIDE5MiBieXRlcyAodGhhdCdzIHdoYXQgV2luZG93cyB1c2VzKS4gKi8KKwkJc2Rldi0+dXNlXzE5Ml9ieXRlc19mb3JfM2YgPSAxOworCisJCS8qIFNvbWUgZGV2aWNlcyBkb24ndCBsaWtlIE1PREUgU0VOU0Ugd2l0aCBwYWdlPTB4M2YsCisJCSAqIHdoaWNoIGlzIHRoZSBjb21tYW5kIHVzZWQgZm9yIGNoZWNraW5nIGlmIGEgZGV2aWNlCisJCSAqIGlzIHdyaXRlLXByb3RlY3RlZC4gIE5vdyB0aGF0IHdlIHRlbGwgdGhlIHNkIGRyaXZlcgorCQkgKiB0byBkbyBhIDE5Mi1ieXRlIHRyYW5zZmVyIHdpdGggdGhpcyBjb21tYW5kIHRoZQorCQkgKiBtYWpvcml0eSBvZiBkZXZpY2VzIHdvcmsgZmluZSwgYnV0IGEgZmV3IHN0aWxsIGNhbid0CisJCSAqIGhhbmRsZSBpdC4gIFRoZSBzZCBkcml2ZXIgd2lsbCBzaW1wbHkgYXNzdW1lIHRob3NlCisJCSAqIGRldmljZXMgYXJlIHdyaXRlLWVuYWJsZWQuICovCisJCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9OT19XUF9ERVRFQ1QpCisJCQlzZGV2LT5za2lwX21zX3BhZ2VfM2YgPSAxOworCisJCS8qIEEgbnVtYmVyIG9mIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3aXRoIE1PREUgU0VOU0UgZm9yCisJCSAqIHBhZ2UgeDA4LCBzbyB3ZSB3aWxsIHNraXAgaXQuICovCisJCXNkZXYtPnNraXBfbXNfcGFnZV84ID0gMTsKKworCQkvKiBTb21lIGRpc2tzIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2NrcyBpbiByZXNwb25zZQorCQkgKiB0byBSRUFEIENBUEFDSVRZIHJhdGhlciB0aGFuIHRoZSBoaWdoZXN0IGJsb2NrIG51bWJlci4KKwkJICogSWYgdGhpcyBkZXZpY2UgbWFrZXMgdGhhdCBtaXN0YWtlLCB0ZWxsIHRoZSBzZCBkcml2ZXIuICovCisJCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9GSVhfQ0FQQUNJVFkpCisJCQlzZGV2LT5maXhfY2FwYWNpdHkgPSAxOworCX0gZWxzZSB7CisKKwkJLyogTm9uLWRpc2stdHlwZSBkZXZpY2VzIGRvbid0IG5lZWQgdG8gYmxhY2tsaXN0IGFueSBwYWdlcworCQkgKiBvciB0byBmb3JjZSAxOTItYnl0ZSB0cmFuc2ZlciBsZW5ndGhzIGZvciBNT0RFIFNFTlNFLgorCQkgKiBCdXQgdGhleSBkbyBuZWVkIHRvIHVzZSBNT0RFIFNFTlNFKDEwKS4gKi8KKwkJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CisJfQorCisJLyogU29tZSBkZXZpY2VzIGNob2tlIHdoZW4gdGhleSByZWNlaXZlIGEgUFJFVkVOVC1BTExPVyBNRURJVU0KKwkgKiBSRU1PVkFMIGNvbW1hbmQsIHNvIHN1cHByZXNzIHRob3NlIGNvbW1hbmRzLiAqLworCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9OT1RfTE9DS0FCTEUpCisJCXNkZXYtPmxvY2thYmxlID0gMDsKKworCS8qIHRoaXMgaXMgdG8gc2F0aXNmeSB0aGUgY29tcGlsZXIsIHRobyBJIGRvbid0IHRoaW5rIHRoZSAKKwkgKiByZXR1cm4gY29kZSBpcyBldmVyIGNoZWNrZWQgYW55d2hlcmUuICovCisJcmV0dXJuIDA7Cit9CisKKy8qIHF1ZXVlIGEgY29tbWFuZCAqLworLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KK3N0YXRpYyBpbnQgcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwKKwkJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc3JiLT5kZXZpY2UtPmhvc3QpOworCisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBjaGVjayBmb3Igc3RhdGUtdHJhbnNpdGlvbiBlcnJvcnMgKi8KKwlpZiAodXMtPnNyYiAhPSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBVU0JfU1RPUkFHRSAiRXJyb3IgaW4gJXM6IHVzLT5zcmIgPSAlcFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgdXMtPnNyYik7CisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KKworCS8qIGZhaWwgdGhlIGNvbW1hbmQgaWYgd2UgYXJlIGRpc2Nvbm5lY3RpbmcgKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCJGYWlsIGNvbW1hbmQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOworCQlzcmItPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlkb25lKHNyYik7CisJCXJldHVybiAwOworCX0KKworCS8qIGVucXVldWUgdGhlIGNvbW1hbmQgYW5kIHdha2UgdXAgdGhlIGNvbnRyb2wgdGhyZWFkICovCisJc3JiLT5zY3NpX2RvbmUgPSBkb25lOworCXVzLT5zcmIgPSBzcmI7CisJdXAoJih1cy0+c2VtYSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXJyb3IgaGFuZGxpbmcgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENvbW1hbmQgdGltZW91dCBhbmQgYWJvcnQgKi8KKy8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHNjc2lfbG9jayhob3N0KSBoZWxkICovCitzdGF0aWMgaW50IGNvbW1hbmRfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc3JiLT5kZXZpY2UtPmhvc3QpOworCisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBJcyB0aGlzIGNvbW1hbmQgc3RpbGwgYWN0aXZlPyAqLworCWlmICh1cy0+c3JiICE9IHNyYikgeworCQlVU19ERUJVR1AgKCItLSBub3RoaW5nIHRvIGFib3J0XG4iKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwkvKiBTZXQgdGhlIFRJTUVEX09VVCBiaXQuICBBbHNvIHNldCB0aGUgQUJPUlRJTkcgYml0LCBidXQgb25seSBpZgorCSAqIGEgZGV2aWNlIHJlc2V0IGlzbid0IGFscmVhZHkgaW4gcHJvZ3Jlc3MgKHRvIGF2b2lkIGludGVyZmVyaW5nCisJICogd2l0aCB0aGUgcmVzZXQpLiAgVG8gcHJldmVudCByYWNlcyB3aXRoIGF1dG8tcmVzZXQsIHdlIG11c3QKKwkgKiBzdG9wIGFueSBvbmdvaW5nIFVTQiB0cmFuc2ZlcnMgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgaG9zdAorCSAqIGxvY2suICovCisJc2V0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpOworCWlmICghdGVzdF9iaXQoVVNfRkxJRFhfUkVTRVRUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlzZXRfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwkJdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQodXMpOworCX0KKwlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CisKKwkvKiBXYWl0IGZvciB0aGUgYWJvcnRlZCBjb21tYW5kIHRvIGZpbmlzaCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVzLT5ub3RpZnkpOworCisJLyogUmVhY3F1aXJlIHRoZSBsb2NrIGFuZCBhbGxvdyBVU0IgdHJhbnNmZXJzIHRvIHJlc3VtZSAqLworCXNjc2lfbG9jayh1c190b19ob3N0KHVzKSk7CisJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKTsKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworLyogVGhpcyBpbnZva2VzIHRoZSB0cmFuc3BvcnQgcmVzZXQgbWVjaGFuaXNtIHRvIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUKKyAqIGRldmljZSAqLworLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CisKKwkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgYW5kIGRvIHRoZSByZXNldCAqLworCWRvd24oJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlyZXN1bHQgPSBGQUlMRUQ7CisJCVVTX0RFQlVHUCgiTm8gcmVzZXQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOworCX0gZWxzZQorCQlyZXN1bHQgPSB1cy0+dHJhbnNwb3J0X3Jlc2V0KHVzKTsKKwl1cCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisKKwkvKiBsb2NrIHRoZSBob3N0IGZvciB0aGUgcmV0dXJuICovCisJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBUaGlzIHJlc2V0cyB0aGUgZGV2aWNlJ3MgVVNCIHBvcnQuICovCisvKiBJdCByZWZ1c2VzIHRvIHdvcmsgaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIGludGVyZmFjZSBpbgorICogdGhlIGRldmljZSwgc28gdGhhdCBvdGhlciB1c2VycyBhcmUgbm90IGFmZmVjdGVkLiAqLworLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KK3N0YXRpYyBpbnQgYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKKwlpbnQgcmVzdWx0LCByYzsKKworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc2NzaV91bmxvY2sodXNfdG9faG9zdCh1cykpOworCisJLyogVGhlIFVTQiBzdWJzeXN0ZW0gZG9lc24ndCBoYW5kbGUgc3luY2hyb25pc2F0aW9uIGJldHdlZW4KKwkgKiBhIGRldmljZSdzIHNldmVyYWwgZHJpdmVycy4gVGhlcmVmb3JlIHdlIHJlc2V0IG9ubHkgZGV2aWNlcworCSAqIHdpdGgganVzdCBvbmUgaW50ZXJmYWNlLCB3aGljaCB3ZSBvZiBjb3Vyc2Ugb3duLiAqLworCisJZG93bigmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCXJlc3VsdCA9IC1FSU87CisJCVVTX0RFQlVHUCgiTm8gcmVzZXQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOworCX0gZWxzZSBpZiAodXMtPnB1c2JfZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgIT0gMSkgeworCQlyZXN1bHQgPSAtRUJVU1k7CisJCVVTX0RFQlVHUCgiUmVmdXNpbmcgdG8gcmVzZXQgYSBtdWx0aS1pbnRlcmZhY2UgZGV2aWNlXG4iKTsKKwl9IGVsc2UgeworCQlyYyA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodXMtPnB1c2JfZGV2LCB1cy0+cHVzYl9pbnRmKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJVVNfREVCVUdQKCJ1bmFibGUgdG8gbG9jayBkZXZpY2UgZm9yIHJlc2V0OiAlZFxuIiwgcmMpOworCQkJcmVzdWx0ID0gcmM7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSB1c2JfcmVzZXRfZGV2aWNlKHVzLT5wdXNiX2Rldik7CisJCQlpZiAocmMpCisJCQkJdXNiX3VubG9ja19kZXZpY2UodXMtPnB1c2JfZGV2KTsKKwkJCVVTX0RFQlVHUCgidXNiX3Jlc2V0X2RldmljZSByZXR1cm5zICVkXG4iLCByZXN1bHQpOworCQl9CisJfQorCXVwKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKworCS8qIGxvY2sgdGhlIGhvc3QgZm9yIHRoZSByZXR1cm4gKi8KKwlzY3NpX2xvY2sodXNfdG9faG9zdCh1cykpOworCXJldHVybiByZXN1bHQgPCAwID8gRkFJTEVEIDogU1VDQ0VTUzsKK30KKworLyogUmVwb3J0IGEgZHJpdmVyLWluaXRpYXRlZCBkZXZpY2UgcmVzZXQgdG8gdGhlIFNDU0kgbGF5ZXIuCisgKiBDYWxsaW5nIHRoaXMgZm9yIGEgU0NTSS1pbml0aWF0ZWQgcmVzZXQgaXMgdW5uZWNlc3NhcnkgYnV0IGhhcm1sZXNzLgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgU0NTSSBob3N0IGxvY2suICovCit2b2lkIHVzYl9zdG9yX3JlcG9ydF9kZXZpY2VfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCBpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSB1c190b19ob3N0KHVzKTsKKworCXNjc2lfcmVwb3J0X2RldmljZV9yZXNldChob3N0LCAwLCAwKTsKKwlpZiAodXMtPmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykgeworCQlmb3IgKGkgPSAxOyBpIDwgaG9zdC0+bWF4X2lkOyArK2kpCisJCQlzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoaG9zdCwgMCwgaSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIC9wcm9jL3Njc2kvIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB3ZSB1c2UgdGhpcyBtYWNybyB0byBoZWxwIHVzIHdyaXRlIGludG8gdGhlIGJ1ZmZlciAqLworI3VuZGVmIFNQUklOVEYKKyNkZWZpbmUgU1BSSU5URihhcmdzLi4uKSBcCisJZG8geyBpZiAocG9zIDwgYnVmZmVyK2xlbmd0aCkgcG9zICs9IHNwcmludGYocG9zLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBwcm9jX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIGNoYXIgKmJ1ZmZlciwKKwkJY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCBpbm91dCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKGhvc3QpOworCWNoYXIgKnBvcyA9IGJ1ZmZlcjsKKwljb25zdCBjaGFyICpzdHJpbmc7CisKKwkvKiBpZiBzb21lb25lIGlzIHNlbmRpbmcgdXMgZGF0YSwganVzdCB0aHJvdyBpdCBhd2F5ICovCisJaWYgKGlub3V0KQorCQlyZXR1cm4gbGVuZ3RoOworCisJLyogcHJpbnQgdGhlIGNvbnRyb2xsZXIgbmFtZSAqLworCVNQUklOVEYoIiAgIEhvc3Qgc2NzaSVkOiB1c2Itc3RvcmFnZVxuIiwgaG9zdC0+aG9zdF9ubyk7CisKKwkvKiBwcmludCBwcm9kdWN0LCB2ZW5kb3IsIGFuZCBzZXJpYWwgbnVtYmVyIHN0cmluZ3MgKi8KKwlpZiAodXMtPnB1c2JfZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmluZyA9IHVzLT5wdXNiX2Rldi0+bWFudWZhY3R1cmVyOworCWVsc2UgaWYgKHVzLT51bnVzdWFsX2Rldi0+dmVuZG9yTmFtZSkKKwkJc3RyaW5nID0gdXMtPnVudXN1YWxfZGV2LT52ZW5kb3JOYW1lOworCWVsc2UKKwkJc3RyaW5nID0gIlVua25vd24iOworCVNQUklOVEYoIiAgICAgICBWZW5kb3I6ICVzXG4iLCBzdHJpbmcpOworCWlmICh1cy0+cHVzYl9kZXYtPnByb2R1Y3QpCisJCXN0cmluZyA9IHVzLT5wdXNiX2Rldi0+cHJvZHVjdDsKKwllbHNlIGlmICh1cy0+dW51c3VhbF9kZXYtPnByb2R1Y3ROYW1lKQorCQlzdHJpbmcgPSB1cy0+dW51c3VhbF9kZXYtPnByb2R1Y3ROYW1lOworCWVsc2UKKwkJc3RyaW5nID0gIlVua25vd24iOworCVNQUklOVEYoIiAgICAgIFByb2R1Y3Q6ICVzXG4iLCBzdHJpbmcpOworCWlmICh1cy0+cHVzYl9kZXYtPnNlcmlhbCkKKwkJc3RyaW5nID0gdXMtPnB1c2JfZGV2LT5zZXJpYWw7CisJZWxzZQorCQlzdHJpbmcgPSAiTm9uZSI7CisJU1BSSU5URigiU2VyaWFsIE51bWJlcjogJXNcbiIsIHN0cmluZyk7CisKKwkvKiBzaG93IHRoZSBwcm90b2NvbCBhbmQgdHJhbnNwb3J0ICovCisJU1BSSU5URigiICAgICBQcm90b2NvbDogJXNcbiIsIHVzLT5wcm90b2NvbF9uYW1lKTsKKwlTUFJJTlRGKCIgICAgVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKworCS8qIHNob3cgdGhlIGRldmljZSBmbGFncyAqLworCWlmIChwb3MgPCBidWZmZXIgKyBsZW5ndGgpIHsKKwkJcG9zICs9IHNwcmludGYocG9zLCAiICAgICAgIFF1aXJrczoiKTsKKworI2RlZmluZSBVU19GTEFHKG5hbWUsIHZhbHVlKSBcCisJaWYgKHVzLT5mbGFncyAmIHZhbHVlKSBwb3MgKz0gc3ByaW50Zihwb3MsICIgIiAjbmFtZSk7CitVU19ET19BTExfRkxBR1MKKyN1bmRlZiBVU19GTEFHCisKKwkJKihwb3MrKykgPSAnXG4nOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHN0YXJ0IG9mIG5leHQgYnVmZmVyLCBhbmQgcmV0dXJuIHZhbHVlLgorCSAqLworCSpzdGFydCA9IGJ1ZmZlciArIG9mZnNldDsKKworCWlmICgocG9zIC0gYnVmZmVyKSA8IG9mZnNldCkKKwkJcmV0dXJuICgwKTsKKwllbHNlIGlmICgocG9zIC0gYnVmZmVyIC0gb2Zmc2V0KSA8IGxlbmd0aCkKKwkJcmV0dXJuIChwb3MgLSBidWZmZXIgLSBvZmZzZXQpOworCWVsc2UKKwkJcmV0dXJuIChsZW5ndGgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5c2ZzIGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBPdXRwdXQgcm91dGluZSBmb3IgdGhlIHN5c2ZzIG1heF9zZWN0b3JzIGZpbGUgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfbWF4X3NlY3RvcnMoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5tYXhfc2VjdG9ycyk7Cit9CisKKy8qIElucHV0IHJvdXRpbmUgZm9yIHRoZSBzeXNmcyBtYXhfc2VjdG9ycyBmaWxlICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXhfc2VjdG9ycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJdW5zaWduZWQgc2hvcnQgbXM7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwICYmIG1zIDw9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUykgeworCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgbXMpOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCXJldHVybiAtRUlOVkFMOwkKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1heF9zZWN0b3JzLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19tYXhfc2VjdG9ycywKKwkJc3RvcmVfbWF4X3NlY3RvcnMpOworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnN5c2ZzX2RldmljZV9hdHRyX2xpc3RbXSA9IHsKKwkJJmRldl9hdHRyX21heF9zZWN0b3JzLAorCQlOVUxMLAorCQl9OworCisvKgorICogdGhpcyBkZWZpbmVzIG91ciBob3N0IHRlbXBsYXRlLCB3aXRoIHdoaWNoIHdlJ2xsIGFsbG9jYXRlIGhvc3RzCisgKi8KKworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB1c2Jfc3Rvcl9ob3N0X3RlbXBsYXRlID0geworCS8qIGJhc2ljIHVzZXJsYW5kIGludGVyZmFjZSBzdHVmZiAqLworCS5uYW1lID0JCQkJInVzYi1zdG9yYWdlIiwKKwkucHJvY19uYW1lID0JCQkidXNiLXN0b3JhZ2UiLAorCS5wcm9jX2luZm8gPQkJCXByb2NfaW5mbywKKwkuaW5mbyA9CQkJCWhvc3RfaW5mbywKKworCS8qIGNvbW1hbmQgaW50ZXJmYWNlIC0tIHF1ZXVlZCBvbmx5ICovCisJLnF1ZXVlY29tbWFuZCA9CQkJcXVldWVjb21tYW5kLAorCisJLyogZXJyb3IgYW5kIGFib3J0IGhhbmRsZXJzICovCisJLmVoX2Fib3J0X2hhbmRsZXIgPQkJY29tbWFuZF9hYm9ydCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPQlkZXZpY2VfcmVzZXQsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyID0JCWJ1c19yZXNldCwKKworCS8qIHF1ZXVlIGNvbW1hbmRzIG9ubHksIG9ubHkgb25lIGNvbW1hbmQgcGVyIExVTiAqLworCS5jYW5fcXVldWUgPQkJCTEsCisJLmNtZF9wZXJfbHVuID0JCQkxLAorCisJLyogdW5rbm93biBpbml0aWF0b3IgaWQgKi8KKwkudGhpc19pZCA9CQkJLTEsCisKKwkuc2xhdmVfYWxsb2MgPQkJCXNsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPQkJc2xhdmVfY29uZmlndXJlLAorCisJLyogbG90cyBvZiBzZyBzZWdtZW50cyBjYW4gYmUgaGFuZGxlZCAqLworCS5zZ190YWJsZXNpemUgPQkJCVNHX0FMTCwKKworCS8qIGxpbWl0IHRoZSB0b3RhbCBzaXplIG9mIGEgdHJhbnNmZXIgdG8gMTIwIEtCICovCisJLm1heF9zZWN0b3JzID0gICAgICAgICAgICAgICAgICAyNDAsCisKKwkvKiBtZXJnZSBjb21tYW5kcy4uLiB0aGlzIHNlZW1zIHRvIGhlbHAgcGVyZm9ybWFuY2UsIGJ1dAorCSAqIHBlcmlvZGljYWxseSBzb21lb25lIHNob3VsZCB0ZXN0IHRvIHNlZSB3aGljaCBzZXR0aW5nIGlzIG1vcmUKKwkgKiBvcHRpbWFsLgorCSAqLworCS51c2VfY2x1c3RlcmluZyA9CQkxLAorCisJLyogZW11bGF0ZWQgSEJBICovCisJLmVtdWxhdGVkID0JCQkxLAorCisJLyogd2UgZG8gb3VyIG93biBkZWxheSBhZnRlciBhIGRldmljZSBvciBidXMgcmVzZXQgKi8KKwkuc2tpcF9zZXR0bGVfZGVsYXkgPQkJMSwKKworCS8qIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzICovCisJLnNkZXZfYXR0cnMgPQkJCXN5c2ZzX2RldmljZV9hdHRyX2xpc3QsCisKKwkvKiBtb2R1bGUgbWFuYWdlbWVudCAqLworCS5tb2R1bGUgPQkJCVRISVNfTU9EVUxFCit9OworCisvKiBUbyBSZXBvcnQgIklsbGVnYWwgUmVxdWVzdDogSW52YWxpZCBGaWVsZCBpbiBDREIgKi8KK3Vuc2lnbmVkIGNoYXIgdXNiX3N0b3Jfc2Vuc2VfaW52YWxpZENEQlsxOF0gPSB7CisJWzBdCT0gMHg3MCwJCQkgICAgLyogY3VycmVudCBlcnJvciAqLworCVsyXQk9IElMTEVHQUxfUkVRVUVTVCwJICAgIC8qIElsbGVnYWwgUmVxdWVzdCA9IDB4MDUgKi8KKwlbN10JPSAweDBhLAkJCSAgICAvKiBhZGRpdGlvbmFsIGxlbmd0aCAqLworCVsxMl0JPSAweDI0CQkJICAgIC8qIEludmFsaWQgRmllbGQgaW4gQ0RCICovCit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhNDlhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuaApAQCAtMCwwICsxLDQ5IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIFNDU0kgQ29ubmVjdGluZyBHbHVlIEhlYWRlciBGaWxlCisgKgorICogJElkOiBzY3NpZ2x1ZS5oLHYgMS40IDIwMDAvMDgvMjUgMDA6MTM6NTEgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1NDU0lHTFVFX0hfCisjZGVmaW5lIF9TQ1NJR0xVRV9IXworCitleHRlcm4gdm9pZCB1c2Jfc3Rvcl9yZXBvcnRfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREJbMThdOworZXh0ZXJuIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWEyZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpAQCAtMCwwICsxLDE2MDggQEAKKy8qIERyaXZlciBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogJElkOiBzZGRyMDkuYyx2IDEuMjQgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqICAgKGMpIDIwMDAsIDIwMDEgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQHN0YXJiYW5kLm5ldCkKKyAqICAgKGMpIDIwMDIgQW5kcmllcyBCcm91d2VyIChhZWJAY3dpLm5sKQorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIFRoZSBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIgdXNlcyB0aGUgU2h1dHRsZSBFVVNCLTAxIGNoaXAuCisgKiBUaGlzIGNoaXAgaXMgYSBwcm9ncmFtbWFibGUgVVNCIGNvbnRyb2xsZXIuIEluIHRoZSBTRERSLTA5LCBpdCBoYXMKKyAqIGJlZW4gcHJvZ3JhbW1lZCB0byBvYmV5IGEgY2VydGFpbiBsaW1pdGVkIHNldCBvZiBTQ1NJIGNvbW1hbmRzLgorICogVGhpcyBkcml2ZXIgdHJhbnNsYXRlcyB0aGUgInJlYWwiIFNDU0kgY29tbWFuZHMgdG8gdGhlIFNERFItMDkgU0NTSQorICogY29tbWFuZHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIEtub3duIHZlbmRvciBjb21tYW5kczogMTIgYnl0ZXMsIGZpcnN0IGJ5dGUgaXMgb3Bjb2RlCisgKgorICogRTc6IHJlYWQgc2NhdHRlciBnYXRoZXIKKyAqIEU4OiByZWFkCisgKiBFOTogd3JpdGUKKyAqIEVBOiBlcmFzZQorICogRUI6IHJlc2V0CisgKiBFQzogcmVhZCBzdGF0dXMKKyAqIEVEOiByZWFkIElECisgKiBFRTogd3JpdGUgQ0lTICg/KQorICogRUY6IGNvbXB1dGUgY2hlY2tzdW0gKD8pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInNkZHIwOS5oIgorCisKKyNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQorI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQorI2RlZmluZSBNU0Jfb2YocykgKChzKT4+OCkKKworLyogI2RlZmluZSBVU19ERUJVR1AgcHJpbnRrICovCisKKy8qCisgKiBGaXJzdCBzb21lIHN0dWZmIHRoYXQgZG9lcyBub3QgYmVsb25nIGhlcmU6CisgKiBkYXRhIG9uIFNtYXJ0TWVkaWEgYW5kIG90aGVyIGNhcmRzLCBjb21wbGV0ZWx5CisgKiB1bnJlbGF0ZWQgdG8gdGhpcyBkcml2ZXIuCisgKiBTaW1pbGFyIHN0dWZmIG9jY3VycyBpbiA8bGludXgvbXRkL25hbmRfaWRzLmg+LgorICovCisKK3N0cnVjdCBuYW5kX2ZsYXNoX2RldiB7CisJaW50IG1vZGVsX2lkOworCWludCBjaGlwc2hpZnQ7CQkvKiAxPDxjcyBieXRlcyB0b3RhbCBjYXBhY2l0eSAqLworCWNoYXIgcGFnZXNoaWZ0OwkJLyogMTw8cHMgYnl0ZXMgaW4gYSBwYWdlICovCisJY2hhciBibG9ja3NoaWZ0OwkvKiAxPDxicyBwYWdlcyBpbiBhbiBlcmFzZSBibG9jayAqLworCWNoYXIgem9uZXNoaWZ0OwkJLyogMTw8enMgYmxvY2tzIGluIGEgem9uZSAqLworCQkJCS8qICMgb2YgbG9naWNhbCBibG9ja3MgaXMgMTI1LzEyOCBvZiB0aGlzICovCisJY2hhciBwYWdlYWRybGVuOwkvKiBsZW5ndGggb2YgYW4gYWRkcmVzcyBpbiBieXRlcyAtIDEgKi8KK307CisKKy8qCisgKiBOQU5EIEZsYXNoIE1hbnVmYWN0dXJlciBJRCBDb2RlcworICovCisjZGVmaW5lIE5BTkRfTUZSX0FNRAkJMHgwMQorI2RlZmluZSBOQU5EX01GUl9OQVRTRU1JCTB4OGYKKyNkZWZpbmUgTkFORF9NRlJfVE9TSElCQQkweDk4CisjZGVmaW5lIE5BTkRfTUZSX1NBTVNVTkcJMHhlYworCitzdGF0aWMgaW5saW5lIGNoYXIgKm5hbmRfZmxhc2hfbWFudWZhY3R1cmVyKGludCBtYW51Zl9pZCkgeworCXN3aXRjaChtYW51Zl9pZCkgeworCWNhc2UgTkFORF9NRlJfQU1EOgorCQlyZXR1cm4gIkFNRCI7CisJY2FzZSBOQU5EX01GUl9OQVRTRU1JOgorCQlyZXR1cm4gIk5BVFNFTUkiOworCWNhc2UgTkFORF9NRlJfVE9TSElCQToKKwkJcmV0dXJuICJUb3NoaWJhIjsKKwljYXNlIE5BTkRfTUZSX1NBTVNVTkc6CisJCXJldHVybiAiU2Ftc3VuZyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKy8qCisgKiBJdCBsb29rcyBsaWtlIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGF0dGFjaCBtYW51ZmFjdHVyZXIgdG8gdGhlCisgKiByZW1haW5pbmcgZGF0YTogU1NGREMgcHJlc2NyaWJlcyBtYW51ZmFjdHVyZXItaW5kZXBlbmRlbnQgaWQgY29kZXMuCisgKgorICogMjU2IE1CIE5BTkQgZmxhc2ggaGFzIGEgNS1ieXRlIElEIHdpdGggMm5kIGJ5dGUgMHhhYSwgMHhiYSwgMHhjYSBvciAweGRhLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgbmFuZF9mbGFzaF9pZHNbXSA9IHsKKwkvKiBOQU5EIGZsYXNoICovCisJeyAweDZlLCAyMCwgOCwgNCwgOCwgMn0sCS8qIDEgTUIgKi8KKwl7IDB4ZTgsIDIwLCA4LCA0LCA4LCAyfSwJLyogMSBNQiAqLworCXsgMHhlYywgMjAsIDgsIDQsIDgsIDJ9LAkvKiAxIE1CICovCisJeyAweDY0LCAyMSwgOCwgNCwgOSwgMn0sIAkvKiAyIE1CICovCisJeyAweGVhLCAyMSwgOCwgNCwgOSwgMn0sCS8qIDIgTUIgKi8KKwl7IDB4NmIsIDIyLCA5LCA0LCA5LCAyfSwJLyogNCBNQiAqLworCXsgMHhlMywgMjIsIDksIDQsIDksIDJ9LAkvKiA0IE1CICovCisJeyAweGU1LCAyMiwgOSwgNCwgOSwgMn0sCS8qIDQgTUIgKi8KKwl7IDB4ZTYsIDIzLCA5LCA0LCAxMCwgMn0sCS8qIDggTUIgKi8KKwl7IDB4NzMsIDI0LCA5LCA1LCAxMCwgMn0sCS8qIDE2IE1CICovCisJeyAweDc1LCAyNSwgOSwgNSwgMTAsIDJ9LAkvKiAzMiBNQiAqLworCXsgMHg3NiwgMjYsIDksIDUsIDEwLCAzfSwJLyogNjQgTUIgKi8KKwl7IDB4NzksIDI3LCA5LCA1LCAxMCwgM30sCS8qIDEyOCBNQiAqLworCisJLyogTUFTSyBST00gKi8KKwl7IDB4NWQsIDIxLCA5LCA0LCA4LCAyfSwJLyogMiBNQiAqLworCXsgMHhkNSwgMjIsIDksIDQsIDksIDJ9LAkvKiA0IE1CICovCisJeyAweGQ2LCAyMywgOSwgNCwgMTAsIDJ9LAkvKiA4IE1CICovCisJeyAweDU3LCAyNCwgOSwgNCwgMTEsIDJ9LAkvKiAxNiBNQiAqLworCXsgMHg1OCwgMjUsIDksIDQsIDEyLCAyfSwJLyogMzIgTUIgKi8KKwl7IDAsfQorfTsKKworI2RlZmluZSBTSVpFKGEpCShzaXplb2YoYSkvc2l6ZW9mKChhKVswXSkpCisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKgorbmFuZF9maW5kX2lkKHVuc2lnbmVkIGNoYXIgaWQpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTSVpFKG5hbmRfZmxhc2hfaWRzKTsgaSsrKQorCQlpZiAobmFuZF9mbGFzaF9pZHNbaV0ubW9kZWxfaWQgPT0gaWQpCisJCQlyZXR1cm4gJihuYW5kX2ZsYXNoX2lkc1tpXSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFQ0MgY29tcHV0YXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcml0eVsyNTZdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZWNjMlsyNTZdOworCitzdGF0aWMgdm9pZCBuYW5kX2luaXRfZWNjKHZvaWQpIHsKKwlpbnQgaSwgaiwgYTsKKworCXBhcml0eVswXSA9IDA7CisJZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKQorCQlwYXJpdHlbaV0gPSAocGFyaXR5W2kmKGktMSldIF4gMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJYSA9IDA7CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWlmIChpICYgKDE8PGopKSB7CisJCQkJaWYgKChqICYgMSkgPT0gMCkKKwkJCQkJYSBePSAweDA0OworCQkJCWlmICgoaiAmIDIpID09IDApCisJCQkJCWEgXj0gMHgxMDsKKwkJCQlpZiAoKGogJiA0KSA9PSAwKQorCQkJCQlhIF49IDB4NDA7CisJCQl9CisJCX0KKwkJZWNjMltpXSA9IH4oYSBeIChhPDwxKSBeIChwYXJpdHlbaV0gPyAweGE4IDogMCkpOworCX0KK30KKworLyogY29tcHV0ZSAzLWJ5dGUgZWNjIG9uIDI1NiBieXRlcyAqLworc3RhdGljIHZvaWQgbmFuZF9jb21wdXRlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpIHsKKwlpbnQgaSwgaiwgYTsKKwl1bnNpZ25lZCBjaGFyIHBhciwgYml0LCBiaXRzWzhdOworCisJcGFyID0gMDsKKwlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQliaXRzW2pdID0gMDsKKworCS8qIGNvbGxlY3QgMTYgY2hlY2tzdW0gYml0cyAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlwYXIgXj0gZGF0YVtpXTsKKwkJYml0ID0gcGFyaXR5W2RhdGFbaV1dOworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQkJaWYgKChpICYgKDE8PGopKSA9PSAwKQorCQkJCWJpdHNbal0gXj0gYml0OworCX0KKworCS8qIHB1dCA0KzQrNCA9IDEyIGJpdHMgaW4gdGhlIGVjYyAqLworCWEgPSAoYml0c1szXSA8PCA2KSArIChiaXRzWzJdIDw8IDQpICsgKGJpdHNbMV0gPDwgMikgKyBiaXRzWzBdOworCWVjY1swXSA9IH4oYSBeIChhPDwxKSBeIChwYXJpdHlbcGFyXSA/IDB4YWEgOiAwKSk7CisKKwlhID0gKGJpdHNbN10gPDwgNikgKyAoYml0c1s2XSA8PCA0KSArIChiaXRzWzVdIDw8IDIpICsgYml0c1s0XTsKKwllY2NbMV0gPSB+KGEgXiAoYTw8MSkgXiAocGFyaXR5W3Bhcl0gPyAweGFhIDogMCkpOworCisJZWNjWzJdID0gZWNjMltwYXJdOworfQorCitzdGF0aWMgaW50IG5hbmRfY29tcGFyZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKSB7CisJcmV0dXJuIChkYXRhWzBdID09IGVjY1swXSAmJiBkYXRhWzFdID09IGVjY1sxXSAmJiBkYXRhWzJdID09IGVjY1syXSk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfc3RvcmVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYykgeworCW1lbWNweShkYXRhLCBlY2MsIDMpOworfQorCisvKgorICogVGhlIGFjdHVhbCBkcml2ZXIgc3RhcnRzIGhlcmUuCisgKi8KKworLyoKKyAqIE9uIG15IDE2TUIgY2FyZCwgY29udHJvbCBibG9ja3MgaGF2ZSBzaXplIDY0ICgxNiByZWFsIGNvbnRyb2wgYnl0ZXMsCisgKiBhbmQgNDgganVuayBieXRlcykuIEluIHJlYWxpdHkgb2YgY291cnNlIHRoZSBjYXJkIHVzZXMgMTYgY29udHJvbCBieXRlcywKKyAqIHNvIHRoZSByZWFkZXIgbWFrZXMgdXAgdGhlIHJlbWFpbmluZyA0OC4gRG9uJ3Qga25vdyB3aGV0aGVyIHRoZXNlIG51bWJlcnMKKyAqIGRlcGVuZCBvbiB0aGUgY2FyZC4gRm9yIG5vdyBhIGNvbnN0YW50LgorICovCisjZGVmaW5lIENPTlRST0xfU0hJRlQgNgorCisvKgorICogT24gbXkgQ29tYm8gQ0YvU00gcmVhZGVyLCB0aGUgU00gcmVhZGVyIGhhcyBMVU4gMS4KKyAqIChhbmQgdGhpbmdzIGZhaWwgd2l0aCBMVU4gMCkuCisgKiBJdCBzZWVtcyBMVU4gaXMgaXJyZWxldmFudCBmb3Igb3RoZXJzLgorICovCisjZGVmaW5lIExVTgkxCisjZGVmaW5lCUxVTkJJVFMJKExVTiA8PCA1KQorCisvKgorICogTEJBIGFuZCBQQkEgYXJlIHVuc2lnbmVkIGludHMuIFNwZWNpYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFVOREVGICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgU1BBUkUgICAgMHhmZmZmZmZmZQorI2RlZmluZSBVTlVTQUJMRSAweGZmZmZmZmZkCisKK3N0YXRpYyBpbnQgZXJhc2VfYmFkX2xiYV9lbnRyaWVzID0gMDsKKworLyogc2VuZCB2ZW5kb3IgaW50ZXJmYWNlIGNvbW1hbmQgKDB4NDEpICovCisvKiBjYWxsZWQgZm9yIHJlcXVlc3RzIDAsIDEsIDggKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9zZW5kX2NvbW1hbmQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgICAgdW5zaWduZWQgY2hhciByZXF1ZXN0LAorCQkgICAgdW5zaWduZWQgY2hhciBkaXJlY3Rpb24sCisJCSAgICB1bnNpZ25lZCBjaGFyICp4ZmVyX2RhdGEsCisJCSAgICB1bnNpZ25lZCBpbnQgeGZlcl9sZW4pIHsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwl1bnNpZ25lZCBjaGFyIHJlcXVlc3R0eXBlID0gKDB4NDEgfCBkaXJlY3Rpb24pOworCWludCByYzsKKworCS8vIEdldCB0aGUgcmVjZWl2ZSBvciBzZW5kIGNvbnRyb2wgcGlwZSBudW1iZXIKKworCWlmIChkaXJlY3Rpb24gPT0gVVNCX0RJUl9JTikKKwkJcGlwZSA9IHVzLT5yZWN2X2N0cmxfcGlwZTsKKwllbHNlCisJCXBpcGUgPSB1cy0+c2VuZF9jdHJsX3BpcGU7CisKKwlyYyA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHBpcGUsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAorCQkJCSAgIDAsIDAsIHhmZXJfZGF0YSwgeGZlcl9sZW4pOworCXJldHVybiAocmMgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOgorCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKK30KKworc3RhdGljIGludAorc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSB1bnNpZ25lZCBjaGFyICpjb21tYW5kLAorCQkJIHVuc2lnbmVkIGludCBjb21tYW5kX2xlbikgeworCXJldHVybiBzZGRyMDlfc2VuZF9jb21tYW5kKHVzLCAwLCBVU0JfRElSX09VVCwgY29tbWFuZCwgY29tbWFuZF9sZW4pOworfQorCisjaWYgMAorLyoKKyAqIFRlc3QgVW5pdCBSZWFkeSBDb21tYW5kOiAxMiBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlOiAwMAorICovCitzdGF0aWMgaW50CitzZGRyMDlfdGVzdF91bml0X3JlYWR5KHN0cnVjdCB1c19kYXRhICp1cykgeworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCW1lbXNldChjb21tYW5kLCAwLCA2KTsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgNik7CisKKwlVU19ERUJVR1AoInNkZHIwOV90ZXN0X3VuaXRfcmVhZHkgcmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLyoKKyAqIFJlcXVlc3QgU2Vuc2UgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogMDMKKyAqIGJ5dGUgNDogZGF0YSBsZW5ndGgKKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlcXVlc3Rfc2Vuc2Uoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpzZW5zZWJ1ZiwgaW50IGJ1ZmxlbikgeworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4MDM7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisJY29tbWFuZFs0XSA9IGJ1ZmxlbjsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJyZXF1ZXN0IHNlbnNlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCXNlbnNlYnVmLCBidWZsZW4sIE5VTEwpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgicmVxdWVzdCBzZW5zZSBidWxrIGluIGZhaWxlZFxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfSBlbHNlIHsKKwkJVVNfREVCVUdQKCJyZXF1ZXN0IHNlbnNlIHdvcmtlZFxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9Cit9CisKKy8qCisgKiBSZWFkIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEU4CisgKiBieXRlIDE6IGxhc3QgdHdvIGJpdHM6IDAwOiByZWFkIGRhdGEsIDAxOiByZWFkIGJsb2Nrd2lzZSBjb250cm9sLAorICoJCQkxMDogcmVhZCBib3RoLCAxMTogcmVhZCBwYWdld2lzZSBjb250cm9sLgorICoJIEl0IHR1cm5zIG91dCB3ZSBuZWVkIHZhbHVlcyAyMCwgMjEsIDIyLCAyMyBoZXJlIChMVU4gMSkuCisgKiBieXRlcyAyLTU6IGFkZHJlc3MgKGludGVycHJldGF0aW9uIGRlcGVuZHMgb24gYnl0ZSAxLCBzZWUgYmVsb3cpCisgKiBieXRlcyAxMC0xMTogY291bnQgKGlkZW0pCisgKgorICogQSBwYWdlIGhhcyA1MTIgZGF0YSBieXRlcyBhbmQgNjQgY29udHJvbCBieXRlcyAoMTYgY29udHJvbCBhbmQgNDgganVuaykuCisgKiBBIHJlYWQgZGF0YSBjb21tYW5kIGdldHMgZGF0YSBpbiA1MTItYnl0ZSBwYWdlcy4KKyAqIEEgcmVhZCBjb250cm9sIGNvbW1hbmQgZ2V0cyBjb250cm9sIGluIDY0LWJ5dGUgY2h1bmtzLgorICogQSByZWFkIGJvdGggY29tbWFuZCBnZXRzIGRhdGErY29udHJvbCBpbiA1NzYtYnl0ZSBjaHVua3MuCisgKgorICogQmxvY2tzIGFyZSBncm91cHMgb2YgMzIgcGFnZXMsIGFuZCByZWFkIGJsb2Nrd2lzZSBjb250cm9sIGp1bXBzIHRvIHRoZQorICogbmV4dCBibG9jaywgd2hpbGUgcmVhZCBwYWdld2lzZSBjb250cm9sIGp1bXBzIHRvIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIKKyAqIHJlYWRpbmcgYSBncm91cCBvZiA2NCBjb250cm9sIGJ5dGVzLgorICogW0hlcmUgNTEyID0gMTw8cGFnZXNoaWZ0LCAzMiA9IDE8PGJsb2Nrc2hpZnQsIDY0IGlzIGNvbnN0YW50P10KKyAqCisgKiAoMSBNQiBhbmQgMiBNQiBjYXJkcyBhcmUgYSBiaXQgZGlmZmVyZW50LCBidXQgSSBoYXZlIG9ubHkgYSAxNiBNQiBjYXJkLikKKyAqLworCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZFgoc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgeCwgdW5zaWduZWQgbG9uZyBmcm9tYWRkcmVzcywKKwkgICAgIGludCBucl9vZl9wYWdlcywgaW50IGJ1bGtsZW4sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkgICAgIGludCB1c2Vfc2cpIHsKKworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCWNvbW1hbmRbMF0gPSAweEU4OworCWNvbW1hbmRbMV0gPSBMVU5CSVRTIHwgeDsKKwljb21tYW5kWzJdID0gTVNCX29mKGZyb21hZGRyZXNzPj4xNik7CisJY29tbWFuZFszXSA9IExTQl9vZihmcm9tYWRkcmVzcz4+MTYpOyAKKwljb21tYW5kWzRdID0gTVNCX29mKGZyb21hZGRyZXNzICYgMHhGRkZGKTsKKwljb21tYW5kWzVdID0gTFNCX29mKGZyb21hZGRyZXNzICYgMHhGRkZGKTsgCisJY29tbWFuZFs2XSA9IDA7CisJY29tbWFuZFs3XSA9IDA7CisJY29tbWFuZFs4XSA9IDA7CisJY29tbWFuZFs5XSA9IDA7CisJY29tbWFuZFsxMF0gPSBNU0Jfb2YobnJfb2ZfcGFnZXMpOworCWNvbW1hbmRbMTFdID0gTFNCX29mKG5yX29mX3BhZ2VzKTsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9yZWFkMiVkICVkXG4iLAorCQkJICB4LCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQkgICAgICAgYnVmLCBidWxrbGVuLCB1c2Vfc2csIE5VTEwpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIGJ1bGtfdHJhbnNmZXIgaW4gc2RkcjA5X3JlYWQyJWQgJWRcbiIsCisJCQkgIHgsIHJlc3VsdCk7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFJlYWQgRGF0YQorICoKKyAqIGZyb21hZGRyZXNzIGNvdW50cyBkYXRhIHNob3J0czoKKyAqIGluY3JlYXNpbmcgaXQgYnkgMjU2IHNoaWZ0cyB0aGUgYnl0ZXN0cmVhbSBieSA1MTIgYnl0ZXM7CisgKiB0aGUgbGFzdCA4IGJpdHMgYXJlIGlnbm9yZWQuCisgKgorICogbnJfb2ZfcGFnZXMgY291bnRzIHBhZ2VzIG9mIHNpemUgKDEgPDwgcGFnZXNoaWZ0KS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgcGFnZXNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKwlpbnQgYnVsa2xlbiA9IG5yX29mX3BhZ2VzIDw8IHBhZ2VzaGlmdDsKKworCS8qIFRoZSBsYXN0IDggYml0cyBvZiBmcm9tYWRkcmVzcyBhcmUgaWdub3JlZC4gKi8KKwlyZXR1cm4gc2RkcjA5X3JlYWRYKHVzLCAwLCBmcm9tYWRkcmVzcywgbnJfb2ZfcGFnZXMsIGJ1bGtsZW4sCisJCQkgICAgYnVmLCB1c2Vfc2cpOworfQorCisvKgorICogUmVhZCBCbG9ja3dpc2UgQ29udHJvbAorICoKKyAqIGZyb21hZGRyZXNzIGdpdmVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiAoYXMgaW4gcmVhZCBkYXRhOworICogdGhlIGxhc3QgOCBiaXRzIGFyZSBpZ25vcmVkKTsgaW5jcmVhc2luZyBpdCBieSAzMioyNTYgc2hpZnRzCisgKiB0aGUgb3V0cHV0IHN0cmVhbSBieSA2NCBieXRlcy4KKyAqCisgKiBjb3VudCBjb3VudHMgY29udHJvbCBncm91cHMgb2Ygc2l6ZSAoMSA8PCBjb250cm9sc2hpZnQpLgorICogRm9yIG1lLCBjb250cm9sc2hpZnQgPSA2LiBJcyB0aGlzIGNvbnN0YW50PworICoKKyAqIEFmdGVyIGdldHRpbmcgb25lIGNvbnRyb2wgZ3JvdXAsIGp1bXAgdG8gdGhlIG5leHQgYmxvY2sKKyAqIChmcm9tYWRkcmVzcyArPSA4MTkyKS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IGNvdW50LCBpbnQgY29udHJvbHNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKworCWludCBidWxrbGVuID0gKGNvdW50IDw8IGNvbnRyb2xzaGlmdCk7CisJcmV0dXJuIHNkZHIwOV9yZWFkWCh1cywgMSwgZnJvbWFkZHJlc3MsIGNvdW50LCBidWxrbGVuLAorCQkJICAgIGJ1ZiwgdXNlX3NnKTsKK30KKworLyoKKyAqIFJlYWQgYm90aCBEYXRhIGFuZCBDb250cm9sCisgKgorICogZnJvbWFkZHJlc3MgY291bnRzIGRhdGEgc2hvcnRzLCBpZ25vcmluZyBjb250cm9sOgorICogaW5jcmVhc2luZyBpdCBieSAyNTYgc2hpZnRzIHRoZSBieXRlc3RyZWFtIGJ5IDU3NiA9IDUxMis2NCBieXRlczsKKyAqIHRoZSBsYXN0IDggYml0cyBhcmUgaWdub3JlZC4KKyAqCisgKiBucl9vZl9wYWdlcyBjb3VudHMgcGFnZXMgb2Ygc2l6ZSAoMSA8PCBwYWdlc2hpZnQpICsgKDEgPDwgY29udHJvbHNoaWZ0KS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgcGFnZXNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKworCWludCBidWxrbGVuID0gKG5yX29mX3BhZ2VzIDw8IHBhZ2VzaGlmdCkgKyAobnJfb2ZfcGFnZXMgPDwgQ09OVFJPTF9TSElGVCk7CisJVVNfREVCVUdQKCJzZGRyMDlfcmVhZDIyOiByZWFkaW5nICVkIHBhZ2VzLCAlZCBieXRlc1xuIiwKKwkJICBucl9vZl9wYWdlcywgYnVsa2xlbik7CisJcmV0dXJuIHNkZHIwOV9yZWFkWCh1cywgMiwgZnJvbWFkZHJlc3MsIG5yX29mX3BhZ2VzLCBidWxrbGVuLAorCQkJICAgIGJ1ZiwgdXNlX3NnKTsKK30KKworI2lmIDAKKy8qCisgKiBSZWFkIFBhZ2V3aXNlIENvbnRyb2wKKyAqCisgKiBmcm9tYWRkcmVzcyBnaXZlcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gKGFzIGluIHJlYWQgZGF0YTsKKyAqIHRoZSBsYXN0IDggYml0cyBhcmUgaWdub3JlZCk7IGluY3JlYXNpbmcgaXQgYnkgMjU2IHNoaWZ0cworICogdGhlIG91dHB1dCBzdHJlYW0gYnkgNjQgYnl0ZXMuCisgKgorICogY291bnQgY291bnRzIGNvbnRyb2wgZ3JvdXBzIG9mIHNpemUgKDEgPDwgY29udHJvbHNoaWZ0KS4KKyAqIEZvciBtZSwgY29udHJvbHNoaWZ0ID0gNi4gSXMgdGhpcyBjb25zdGFudD8KKyAqCisgKiBBZnRlciBnZXR0aW5nIG9uZSBjb250cm9sIGdyb3VwLCBqdW1wIHRvIHRoZSBuZXh0IHBhZ2UKKyAqIChmcm9tYWRkcmVzcyArPSAyNTYpLgorICovCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZDIzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBmcm9tYWRkcmVzcywKKwkgICAgICBpbnQgY291bnQsIGludCBjb250cm9sc2hpZnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHVzZV9zZykgeworCisJaW50IGJ1bGtsZW4gPSAoY291bnQgPDwgY29udHJvbHNoaWZ0KTsKKwlyZXR1cm4gc2RkcjA5X3JlYWRYKHVzLCAzLCBmcm9tYWRkcmVzcywgY291bnQsIGJ1bGtsZW4sCisJCQkgICAgYnVmLCB1c2Vfc2cpOworfQorI2VuZGlmCisKKy8qCisgKiBFcmFzZSBDb21tYW5kOiAxMiBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlOiBFQQorICogYnl0ZXMgNi05OiBlcmFzZSBhZGRyZXNzIChiaWctZW5kaWFuLCBjb3VudGluZyBzaG9ydHMsIHNlY3RvciBhbGlnbmVkKS4KKyAqIAorICogQWx3YXlzIHByZWNpc2VseSBvbmUgYmxvY2sgaXMgZXJhc2VkOyBieXRlcyAyLTUgYW5kIDEwLTExIGFyZSBpZ25vcmVkLgorICogVGhlIGJ5dGUgYWRkcmVzcyBiZWluZyBlcmFzZWQgaXMgMipFYWRkcmVzcy4KKyAqIFRoZSBDSVMgY2Fubm90IGJlIGVyYXNlZC4KKyAqLworc3RhdGljIGludAorc2RkcjA5X2VyYXNlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBFYWRkcmVzcykgeworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgic2RkcjA5X2VyYXNlOiBlcmFzZSBhZGRyZXNzICVsdVxuIiwgRWFkZHJlc3MpOworCisJbWVtc2V0KGNvbW1hbmQsIDAsIDEyKTsKKwljb21tYW5kWzBdID0gMHhFQTsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKwljb21tYW5kWzZdID0gTVNCX29mKEVhZGRyZXNzPj4xNik7CisJY29tbWFuZFs3XSA9IExTQl9vZihFYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbOF0gPSBNU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCWNvbW1hbmRbOV0gPSBMU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9lcmFzZSAlZFxuIiwKKwkJCSAgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXcml0ZSBDSVMgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUUKKyAqIGJ5dGVzIDItNTogd3JpdGUgYWRkcmVzcyBpbiBzaG9ydHMKKyAqIGJ5dGVzIDEwLTExOiBzZWN0b3IgY291bnQKKyAqCisgKiBUaGlzIHdyaXRlcyBhdCB0aGUgaW5kaWNhdGVkIGFkZHJlc3MuIERvbid0IGtub3cgaG93IGl0IGRpZmZlcnMKKyAqIGZyb20gRTkuIE1heWJlIGl0IGRvZXMgbm90IGVyYXNlPyBIb3dldmVyLCBpdCB3aWxsIGFsc28gd3JpdGUgdG8KKyAqIHRoZSBDSVMuCisgKgorICogV2hlbiB0d28gc3VjaCBjb21tYW5kcyBvbiB0aGUgc2FtZSBwYWdlIGZvbGxvdyBlYWNoIG90aGVyIGRpcmVjdGx5LAorICogdGhlIHNlY29uZCBvbmUgaXMgbm90IGRvbmUuCisgKi8KKworLyoKKyAqIFdyaXRlIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEU5CisgKiBieXRlcyAyLTU6IHdyaXRlIGFkZHJlc3MgKGJpZy1lbmRpYW4sIGNvdW50aW5nIHNob3J0cywgc2VjdG9yIGFsaWduZWQpLgorICogYnl0ZXMgNi05OiBlcmFzZSBhZGRyZXNzIChiaWctZW5kaWFuLCBjb3VudGluZyBzaG9ydHMsIHNlY3RvciBhbGlnbmVkKS4KKyAqIGJ5dGVzIDEwLTExOiBzZWN0b3IgY291bnQgKGJpZy1lbmRpYW4sIGluIDUxMi1ieXRlIHNlY3RvcnMpLgorICoKKyAqIElmIHdyaXRlIGFkZHJlc3MgZXF1YWxzIGVyYXNlIGFkZHJlc3MsIHRoZSBlcmFzZSBpcyBkb25lIGZpcnN0LAorICogb3RoZXJ3aXNlIHRoZSB3cml0ZSBpcyBkb25lIGZpcnN0LiBXaGVuIGVyYXNlIGFkZHJlc3MgZXF1YWxzIHplcm8KKyAqIG5vIGVyYXNlIGlzIGRvbmU/CisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV93cml0ZVgoc3RydWN0IHVzX2RhdGEgKnVzLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgV2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgRWFkZHJlc3MsCisJICAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgYnVsa2xlbiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdXNlX3NnKSB7CisKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwljb21tYW5kWzBdID0gMHhFOTsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKworCWNvbW1hbmRbMl0gPSBNU0Jfb2YoV2FkZHJlc3M+PjE2KTsKKwljb21tYW5kWzNdID0gTFNCX29mKFdhZGRyZXNzPj4xNik7CisJY29tbWFuZFs0XSA9IE1TQl9vZihXYWRkcmVzcyAmIDB4RkZGRik7CisJY29tbWFuZFs1XSA9IExTQl9vZihXYWRkcmVzcyAmIDB4RkZGRik7CisKKwljb21tYW5kWzZdID0gTVNCX29mKEVhZGRyZXNzPj4xNik7CisJY29tbWFuZFs3XSA9IExTQl9vZihFYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbOF0gPSBNU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCWNvbW1hbmRbOV0gPSBMU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCisJY29tbWFuZFsxMF0gPSBNU0Jfb2YobnJfb2ZfcGFnZXMpOworCWNvbW1hbmRbMTFdID0gTFNCX29mKG5yX29mX3BhZ2VzKTsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV93cml0ZVggJWRcbiIsCisJCQkgIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQkJCSAgICAgICBidWYsIGJ1bGtsZW4sIHVzZV9zZywgTlVMTCk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgYnVsa190cmFuc2ZlciBpbiBzZGRyMDlfd3JpdGVYICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qIGVyYXNlIGFkZHJlc3MsIHdyaXRlIHNhbWUgYWRkcmVzcyAqLworc3RhdGljIGludAorc2RkcjA5X3dyaXRlX2lucGxhY2Uoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgcGFnZXNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgaW50IHVzZV9zZykgeworCWludCBidWxrbGVuID0gKG5yX29mX3BhZ2VzIDw8IHBhZ2VzaGlmdCkgKyAobnJfb2ZfcGFnZXMgPDwgQ09OVFJPTF9TSElGVCk7CisJcmV0dXJuIHNkZHIwOV93cml0ZVgodXMsIGFkZHJlc3MsIGFkZHJlc3MsIG5yX29mX3BhZ2VzLCBidWxrbGVuLAorCQkJICAgICBidWYsIHVzZV9zZyk7Cit9CisKKyNpZiAwCisvKgorICogUmVhZCBTY2F0dGVyIEdhdGhlciBDb21tYW5kOiAzKzRuIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGUgRTcKKyAqIGJ5dGUgMjogbgorICogYnl0ZXMgNGktMSw0aSw0aSsxOiBwYWdlIGFkZHJlc3MKKyAqIGJ5dGUgNGkrMjogcGFnZSBjb3VudAorICogKGk9MS4ubikKKyAqCisgKiBUaGlzIHJlYWRzIHNldmVyYWwgcGFnZXMgZnJvbSB0aGUgY2FyZCB0byBhIHNpbmdsZSBtZW1vcnkgYnVmZmVyLgorICogVGhlIGxhc3QgdHdvIGJpdHMgb2YgYnl0ZSAxIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgRTguCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX3NnX3Rlc3Rfb25seShzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQsIGJ1bGtsZW4sIG5zZywgY3Q7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCW5zZyA9IGJ1bGtsZW4gPSAwOworCWNvbW1hbmRbMF0gPSAweEU3OworCWNvbW1hbmRbMV0gPSBMVU5CSVRTOworCWNvbW1hbmRbMl0gPSAwOworCWFkZHJlc3MgPSAwNDAwMDA7IGN0ID0gMTsKKwluc2crKzsKKwlidWxrbGVuICs9IChjdCA8PCA5KTsKKwljb21tYW5kWzQqbnNnKzJdID0gY3Q7CisJY29tbWFuZFs0Km5zZysxXSA9ICgoYWRkcmVzcyA+PiA5KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2crMF0gPSAoKGFkZHJlc3MgPj4gMTcpICYgMHhGRik7CisJY29tbWFuZFs0Km5zZy0xXSA9ICgoYWRkcmVzcyA+PiAyNSkgJiAweEZGKTsKKworCWFkZHJlc3MgPSAwMzQwMDAwOyBjdCA9IDE7CisJbnNnKys7CisJYnVsa2xlbiArPSAoY3QgPDwgOSk7CisJY29tbWFuZFs0Km5zZysyXSA9IGN0OworCWNvbW1hbmRbNCpuc2crMV0gPSAoKGFkZHJlc3MgPj4gOSkgJiAweEZGKTsKKwljb21tYW5kWzQqbnNnKzBdID0gKChhZGRyZXNzID4+IDE3KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2ctMV0gPSAoKGFkZHJlc3MgPj4gMjUpICYgMHhGRik7CisKKwlhZGRyZXNzID0gMDEwMDAwMDA7IGN0ID0gMjsKKwluc2crKzsKKwlidWxrbGVuICs9IChjdCA8PCA5KTsKKwljb21tYW5kWzQqbnNnKzJdID0gY3Q7CisJY29tbWFuZFs0Km5zZysxXSA9ICgoYWRkcmVzcyA+PiA5KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2crMF0gPSAoKGFkZHJlc3MgPj4gMTcpICYgMHhGRik7CisJY29tbWFuZFs0Km5zZy0xXSA9ICgoYWRkcmVzcyA+PiAyNSkgJiAweEZGKTsKKworCWNvbW1hbmRbMl0gPSBuc2c7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDQqbnNnKzMpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9yZWFkX3NnICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoYnVsa2xlbiwgR0ZQX05PSU8pOworCWlmICghYnVmKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQkgICAgICAgYnVmLCBidWxrbGVuLCBOVUxMKTsKKwlrZnJlZShidWYpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBidWxrX3RyYW5zZmVyIGluIHNkZHIwOV9yZWFkX3NnICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKyNlbmRpZgorCisvKgorICogUmVhZCBTdGF0dXMgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUMKKyAqCisgKiBSZXR1cm5zIDY0IGJ5dGVzLCBhbGwgemVybyBleGNlcHQgZm9yIHRoZSBmaXJzdC4KKyAqIGJpdCAwOiAxOiBFcnJvcgorICogYml0IDU6IDE6IFN1c3BlbmRlZAorICogYml0IDY6IDE6IFJlYWR5CisgKiBiaXQgNzogMTogTm90IHdyaXRlLXByb3RlY3RlZAorICovCisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX3N0YXR1cyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cykgeworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIlJlYWRpbmcgc3RhdHVzLi4uXG4iKTsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUM7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQkgICAgICAgZGF0YSwgNjQsIE5VTEwpOworCSpzdGF0dXMgPSBkYXRhWzBdOworCXJldHVybiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfR09PRCA/CisJCQlVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgdW5zaWduZWQgaW50IHNlY3RvcnMpIHsKKworCXN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICopIHVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGxiYSwgbWF4bGJhLCBwYmE7CisJdW5zaWduZWQgaW50IHBhZ2UsIHBhZ2VzOworCXVuc2lnbmVkIGludCBsZW4sIGluZGV4LCBvZmZzZXQ7CisJaW50IHJlc3VsdDsKKworCS8vIFNpbmNlIHdlIG9ubHkgcmVhZCBpbiBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKKwlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoInNkZHIwOV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8vIEZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgTEJBIGFuZCBwYWdlCisJbGJhID0gYWRkcmVzcyA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCXBhZ2UgPSAoYWRkcmVzcyAmIGluZm8tPmJsb2NrbWFzayk7CisJbWF4bGJhID0gaW5mby0+Y2FwYWNpdHkgPj4gKGluZm8tPnBhZ2VzaGlmdCArIGluZm8tPmJsb2Nrc2hpZnQpOworCisJLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgYnkgY2hlY2tpbmcgZm9yCisJLy8gY29udGlndW91cyBMQkEncy4gQW5vdGhlciBleGVyY2lzZSBsZWZ0IHRvIHRoZSBzdHVkZW50LgorCisJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJaW5kZXggPSBvZmZzZXQgPSAwOworCisJd2hpbGUgKHNlY3RvcnMgPiAwKSB7CisKKwkJLyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqLworCQlwYWdlcyA9IG1pbihzZWN0b3JzLCBpbmZvLT5ibG9ja3NpemUgLSBwYWdlKTsKKwkJbGVuID0gcGFnZXMgPDwgaW5mby0+cGFnZXNoaWZ0OworCisJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KKwkJaWYgKGxiYSA+PSBtYXhsYmEpIHsKKwkJCVVTX0RFQlVHUCgiRXJyb3I6IFJlcXVlc3RlZCBsYmEgJXUgZXhjZWVkcyAiCisJCQkJICAibWF4aW11bSAldVxuIiwgbGJhLCBtYXhsYmEpOworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBGaW5kIHdoZXJlIHRoaXMgbGJhIGxpdmVzIG9uIGRpc2sgKi8KKwkJcGJhID0gaW5mby0+bGJhX3RvX3BiYVtsYmFdOworCisJCWlmIChwYmEgPT0gVU5ERUYpIHsJLyogdGhpcyBsYmEgd2FzIG5ldmVyIHdyaXR0ZW4gKi8KKworCQkJVVNfREVCVUdQKCJSZWFkICVkIHplcm8gcGFnZXMgKExCQSAlZCkgcGFnZSAlZFxuIiwKKwkJCQkgIHBhZ2VzLCBsYmEsIHBhZ2UpOworCisJCQkvKiBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3IuIEl0IGp1c3QgbWVhbnMKKwkJCSAgIHRoYXQgdGhlIGJsb2NrIGhhcyBuZXZlciBiZWVuIHdyaXR0ZW4uCisJCQkgICBJbnN0ZWFkIG9mIHJldHVybmluZyBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IKKwkJCSAgIGl0IGlzIGJldHRlciB0byByZXR1cm4gYWxsIHplcm8gZGF0YS4gKi8KKworCQkJbWVtc2V0KGJ1ZmZlciwgMCwgbGVuKTsKKworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCJSZWFkICVkIHBhZ2VzLCBmcm9tIFBCQSAlZCIKKwkJCQkgICIgKExCQSAlZCkgcGFnZSAlZFxuIiwKKwkJCQkgIHBhZ2VzLCBwYmEsIGxiYSwgcGFnZSk7CisKKwkJCWFkZHJlc3MgPSAoKHBiYSA8PCBpbmZvLT5ibG9ja3NoaWZ0KSArIHBhZ2UpIDw8IAorCQkJCWluZm8tPnBhZ2VzaGlmdDsKKworCQkJcmVzdWx0ID0gc2RkcjA5X3JlYWQyMCh1cywgYWRkcmVzcz4+MSwKKwkJCQkJcGFnZXMsIGluZm8tPnBhZ2VzaGlmdCwgYnVmZmVyLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQkJYnJlYWs7CisJCX0KKworCQkvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkmaW5kZXgsICZvZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlwYWdlID0gMDsKKwkJbGJhKys7CisJCXNlY3RvcnMgLT0gcGFnZXM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitzZGRyMDlfZmluZF91bnVzZWRfcGJhKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbGJhKSB7CisJc3RhdGljIHVuc2lnbmVkIGludCBsYXN0cGJhID0gMTsKKwlpbnQgem9uZXN0YXJ0LCBlbmQsIGk7CisKKwl6b25lc3RhcnQgPSAobGJhLzEwMDApIDw8IDEwOworCWVuZCA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5ibG9ja3NoaWZ0ICsgaW5mby0+cGFnZXNoaWZ0KTsKKwllbmQgLT0gem9uZXN0YXJ0OworCWlmIChlbmQgPiAxMDI0KQorCQllbmQgPSAxMDI0OworCisJZm9yIChpID0gbGFzdHBiYSsxOyBpIDwgZW5kOyBpKyspIHsKKwkJaWYgKGluZm8tPnBiYV90b19sYmFbem9uZXN0YXJ0K2ldID09IFVOREVGKSB7CisJCQlsYXN0cGJhID0gaTsKKwkJCXJldHVybiB6b25lc3RhcnQraTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDw9IGxhc3RwYmE7IGkrKykgeworCQlpZiAoaW5mby0+cGJhX3RvX2xiYVt6b25lc3RhcnQraV0gPT0gVU5ERUYpIHsKKwkJCWxhc3RwYmEgPSBpOworCQkJcmV0dXJuIHpvbmVzdGFydCtpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZGRyMDlfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IGxiYSwKKwkJIHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsCisJCSB1bnNpZ25lZCBjaGFyICpwdHIsIHVuc2lnbmVkIGNoYXIgKmJsb2NrYnVmZmVyKSB7CisKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKSB1cy0+ZXh0cmE7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXVuc2lnbmVkIGludCBwYmEsIGxiYXA7CisJdW5zaWduZWQgaW50IHBhZ2VsZW47CisJdW5zaWduZWQgY2hhciAqYnB0ciwgKmNwdHIsICp4cHRyOworCXVuc2lnbmVkIGNoYXIgZWNjWzNdOworCWludCBpLCByZXN1bHQsIGlzbmV3OworCisJbGJhcCA9ICgobGJhICUgMTAwMCkgPDwgMSkgfCAweDEwMDA7CisJaWYgKHBhcml0eVtNU0Jfb2YobGJhcCkgXiBMU0Jfb2YobGJhcCldKQorCQlsYmFwIF49IDE7CisJcGJhID0gaW5mby0+bGJhX3RvX3BiYVtsYmFdOworCWlzbmV3ID0gMDsKKworCWlmIChwYmEgPT0gVU5ERUYpIHsKKwkJcGJhID0gc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShpbmZvLCBsYmEpOworCQlpZiAoIXBiYSkgeworCQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQl9CisJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IGxiYTsKKwkJaW5mby0+bGJhX3RvX3BiYVtsYmFdID0gcGJhOworCQlpc25ldyA9IDE7CisJfQorCisJaWYgKHBiYSA9PSAxKSB7CisJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCisJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLworCQlwcmludGsoInNkZHIwOTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlwYWdlbGVuID0gKDEgPDwgaW5mby0+cGFnZXNoaWZ0KSArICgxIDw8IENPTlRST0xfU0hJRlQpOworCisJLyogcmVhZCBvbGQgY29udGVudHMgKi8KKwlhZGRyZXNzID0gKHBiYSA8PCAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCkpOworCXJlc3VsdCA9IHNkZHIwOV9yZWFkMjIodXMsIGFkZHJlc3M+PjEsIGluZm8tPmJsb2Nrc2l6ZSwKKwkJCSAgICAgICBpbmZvLT5wYWdlc2hpZnQsIGJsb2NrYnVmZmVyLCAwKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogY2hlY2sgb2xkIGNvbnRlbnRzIGFuZCBmaWxsIGxiYSAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ibG9ja3NpemU7IGkrKykgeworCQlicHRyID0gYmxvY2tidWZmZXIgKyBpKnBhZ2VsZW47CisJCWNwdHIgPSBicHRyICsgaW5mby0+cGFnZXNpemU7CisJCW5hbmRfY29tcHV0ZV9lY2MoYnB0ciwgZWNjKTsKKwkJaWYgKCFuYW5kX2NvbXBhcmVfZWNjKGNwdHIrMTMsIGVjYykpIHsKKwkJCVVTX0RFQlVHUCgiV2FybmluZzogYmFkIGVjYyBpbiBwYWdlICVkLSBvZiBwYmEgJWRcbiIsCisJCQkJICBpLCBwYmEpOworCQkJbmFuZF9zdG9yZV9lY2MoY3B0cisxMywgZWNjKTsKKwkJfQorCQluYW5kX2NvbXB1dGVfZWNjKGJwdHIrKGluZm8tPnBhZ2VzaXplIC8gMiksIGVjYyk7CisJCWlmICghbmFuZF9jb21wYXJlX2VjYyhjcHRyKzgsIGVjYykpIHsKKwkJCVVTX0RFQlVHUCgiV2FybmluZzogYmFkIGVjYyBpbiBwYWdlICVkKyBvZiBwYmEgJWRcbiIsCisJCQkJICBpLCBwYmEpOworCQkJbmFuZF9zdG9yZV9lY2MoY3B0cis4LCBlY2MpOworCQl9CisJCWNwdHJbNl0gPSBjcHRyWzExXSA9IE1TQl9vZihsYmFwKTsKKwkJY3B0cls3XSA9IGNwdHJbMTJdID0gTFNCX29mKGxiYXApOworCX0KKworCS8qIGNvcHkgaW4gbmV3IHN0dWZmIGFuZCBjb21wdXRlIEVDQyAqLworCXhwdHIgPSBwdHI7CisJZm9yIChpID0gcGFnZTsgaSA8IHBhZ2UrcGFnZXM7IGkrKykgeworCQlicHRyID0gYmxvY2tidWZmZXIgKyBpKnBhZ2VsZW47CisJCWNwdHIgPSBicHRyICsgaW5mby0+cGFnZXNpemU7CisJCW1lbWNweShicHRyLCB4cHRyLCBpbmZvLT5wYWdlc2l6ZSk7CisJCXhwdHIgKz0gaW5mby0+cGFnZXNpemU7CisJCW5hbmRfY29tcHV0ZV9lY2MoYnB0ciwgZWNjKTsKKwkJbmFuZF9zdG9yZV9lY2MoY3B0cisxMywgZWNjKTsKKwkJbmFuZF9jb21wdXRlX2VjYyhicHRyKyhpbmZvLT5wYWdlc2l6ZSAvIDIpLCBlY2MpOworCQluYW5kX3N0b3JlX2VjYyhjcHRyKzgsIGVjYyk7CisJfQorCisJVVNfREVCVUdQKCJSZXdyaXRlIFBCQSAlZCAoTEJBICVkKVxuIiwgcGJhLCBsYmEpOworCisJcmVzdWx0ID0gc2RkcjA5X3dyaXRlX2lucGxhY2UodXMsIGFkZHJlc3M+PjEsIGluZm8tPmJsb2Nrc2l6ZSwKKwkJCQkgICAgICBpbmZvLT5wYWdlc2hpZnQsIGJsb2NrYnVmZmVyLCAwKTsKKworCVVTX0RFQlVHUCgic2RkcjA5X3dyaXRlX2lucGxhY2UgcmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKworI2lmIDAKKwl7CisJCXVuc2lnbmVkIGNoYXIgc3RhdHVzID0gMDsKKwkJaW50IHJlc3VsdDIgPSBzZGRyMDlfcmVhZF9zdGF0dXModXMsICZzdGF0dXMpOworCQlpZiAocmVzdWx0MiAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCVVTX0RFQlVHUCgic2RkcjA5X3dyaXRlX2lucGxhY2U6IGNhbm5vdCByZWFkIHN0YXR1c1xuIik7CisJCWVsc2UgaWYgKHN0YXR1cyAhPSAweGMwKQorCQkJVVNfREVCVUdQKCJzZGRyMDlfd3JpdGVfaW5wbGFjZTogc3RhdHVzIGFmdGVyIHdyaXRlOiAweCV4XG4iLAorCQkJCSAgc3RhdHVzKTsKKwl9CisjZW5kaWYKKworI2lmIDAKKwl7CisJCWludCByZXN1bHQyID0gc2RkcjA5X3Rlc3RfdW5pdF9yZWFkeSh1cyk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitzZGRyMDlfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgIHVuc2lnbmVkIGludCBzZWN0b3JzKSB7CisKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKSB1cy0+ZXh0cmE7CisJdW5zaWduZWQgaW50IGxiYSwgcGFnZSwgcGFnZXM7CisJdW5zaWduZWQgaW50IHBhZ2VsZW4sIGJsb2NrbGVuOworCXVuc2lnbmVkIGNoYXIgKmJsb2NrYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgbGVuLCBpbmRleCwgb2Zmc2V0OworCWludCByZXN1bHQ7CisKKwkvLyBibG9ja2J1ZmZlciBpcyB1c2VkIGZvciByZWFkaW5nIGluIHRoZSBvbGQgZGF0YSwgb3ZlcndyaXRpbmcKKwkvLyB3aXRoIHRoZSBuZXcgZGF0YSwgYW5kIHBlcmZvcm1pbmcgRUNDIGNhbGN1bGF0aW9ucworCisJLyogVE9ETzogaW5zdGVhZCBvZiBkb2luZyBrbWFsbG9jL2tmcmVlIGZvciBlYWNoIHdyaXRlLAorCSAgIGFkZCBhIGJ1ZmZlcnBvaW50ZXIgdG8gdGhlIGluZm8gc3RydWN0dXJlICovCisKKwlwYWdlbGVuID0gKDEgPDwgaW5mby0+cGFnZXNoaWZ0KSArICgxIDw8IENPTlRST0xfU0hJRlQpOworCWJsb2NrbGVuID0gKHBhZ2VsZW4gPDwgaW5mby0+YmxvY2tzaGlmdCk7CisJYmxvY2tidWZmZXIgPSBrbWFsbG9jKGJsb2NrbGVuLCBHRlBfTk9JTyk7CisJaWYgKCFibG9ja2J1ZmZlcikgeworCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvLyBTaW5jZSB3ZSBkb24ndCB3cml0ZSB0aGUgdXNlciBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UsCisJLy8gd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UKKwkvLyBhdCBhIHRpbWUgYmV0d2VlbiB0aGUgYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOworCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCXByaW50aygic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlrZnJlZShibG9ja2J1ZmZlcik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLy8gRmlndXJlIG91dCB0aGUgaW5pdGlhbCBMQkEgYW5kIHBhZ2UKKwlsYmEgPSBhZGRyZXNzID4+IGluZm8tPmJsb2Nrc2hpZnQ7CisJcGFnZSA9IChhZGRyZXNzICYgaW5mby0+YmxvY2ttYXNrKTsKKworCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCWluZGV4ID0gb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzZWN0b3JzID4gMCkgeworCisJCS8vIFdyaXRlIGFzIG1hbnkgc2VjdG9ycyBhcyBwb3NzaWJsZSBpbiB0aGlzIGJsb2NrCisKKwkJcGFnZXMgPSBtaW4oc2VjdG9ycywgaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IChwYWdlcyA8PCBpbmZvLT5wYWdlc2hpZnQpOworCisJCS8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZpbmRleCwgJm9mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJcmVzdWx0ID0gc2RkcjA5X3dyaXRlX2xiYSh1cywgbGJhLCBwYWdlLCBwYWdlcywKKwkJCQlidWZmZXIsIGJsb2NrYnVmZmVyKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWJyZWFrOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlczsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKGJsb2NrYnVmZmVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX2NvbnRyb2woc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCXVuc2lnbmVkIGludCBibG9ja3MsCisJCXVuc2lnbmVkIGNoYXIgKmNvbnRlbnQsCisJCWludCB1c2Vfc2cpIHsKKworCVVTX0RFQlVHUCgiUmVhZCBjb250cm9sIGFkZHJlc3MgJWx1LCBibG9ja3MgJWRcbiIsCisJCWFkZHJlc3MsIGJsb2Nrcyk7CisKKwlyZXR1cm4gc2RkcjA5X3JlYWQyMSh1cywgYWRkcmVzcywgYmxvY2tzLAorCQkJICAgICBDT05UUk9MX1NISUZULCBjb250ZW50LCB1c2Vfc2cpOworfQorCisvKgorICogUmVhZCBEZXZpY2UgSUQgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUQKKyAqCisgKiBSZXR1cm5zIDIgYnl0ZXM6IE1hbnVmYWN0dXJlciBJRCBhbmQgRGV2aWNlIElELgorICogT24gbW9yZSByZWNlbnQgY2FyZHMgMyBieXRlczogdGhlIHRoaXJkIGJ5dGUgaXMgYW4gb3B0aW9uIGNvZGUgQTUKKyAqIHNpZ25pZnlpbmcgdGhhdCB0aGUgc2VjcmV0IGNvbW1hbmQgdG8gcmVhZCBhbiAxMjgtYml0IElEIGlzIGF2YWlsYWJsZS4KKyAqIE9uIHN0aWxsIG1vcmUgcmVjZW50IGNhcmRzIDQgYnl0ZXM6IHRoZSBmb3VydGggYnl0ZSBDMCBtZWFucyB0aGF0CisgKiBhIHNlY29uZCByZWFkIElEIGNtZCBpcyBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX2RldmljZUlEKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGV2aWNlSUQpIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmNvbnRlbnQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdCwgaTsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUQ7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCWNvbnRlbnQsIDY0LCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWRldmljZUlEW2ldID0gY29udGVudFtpXTsKKworCXJldHVybiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfR09PRCA/CisJCQlVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9nZXRfd3Aoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbykgeworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisKKwlyZXN1bHQgPSBzZGRyMDlfcmVhZF9zdGF0dXModXMsICZzdGF0dXMpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfZ2V0X3dwOiByZWFkX3N0YXR1cyBmYWlsc1xuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCVVTX0RFQlVHUCgic2RkcjA5X2dldF93cDogc3RhdHVzIDB4JTAyWCIsIHN0YXR1cyk7CisJaWYgKChzdGF0dXMgJiAweDgwKSA9PSAwKSB7CisJCWluZm8tPmZsYWdzIHw9IFNERFIwOV9XUDsJLyogd3JpdGUgcHJvdGVjdGVkICovCisJCVVTX0RFQlVHUCgiIFdQIik7CisJfQorCWlmIChzdGF0dXMgJiAweDQwKQorCQlVU19ERUJVR1AoIiBSZWFkeSIpOworCWlmIChzdGF0dXMgJiBMVU5CSVRTKQorCQlVU19ERUJVR1AoIiBTdXNwZW5kZWQiKTsKKwlpZiAoc3RhdHVzICYgMHgxKQorCQlVU19ERUJVR1AoIiBFcnJvciIpOworCVVTX0RFQlVHUCgiXG4iKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKyNpZiAwCisvKgorICogUmVzZXQgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUIKKyAqLworc3RhdGljIGludAorc2RkcjA5X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykgeworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUI7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXR1cm4gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqCitzZGRyMDlfZ2V0X2NhcmRpbmZvKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciBmbGFncykgeworCXN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqY2FyZGluZm87CisJdW5zaWduZWQgY2hhciBkZXZpY2VJRFs0XTsKKwljaGFyIGJsdXJidHh0WzI1Nl07CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgiUmVhZGluZyBjYXBhY2l0eS4uLlxuIik7CisKKwlyZXN1bHQgPSBzZGRyMDlfcmVhZF9kZXZpY2VJRCh1cywgZGV2aWNlSUQpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBvZiByZWFkX2RldmljZUlEIGlzICVkXG4iLCByZXN1bHQpOworCQlwcmludGsoInNkZHIwOTogY291bGQgbm90IHJlYWQgY2FyZCBpbmZvXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc3ByaW50ZihibHVyYnR4dCwgInNkZHIwOTogRm91bmQgRmxhc2ggY2FyZCwgSUQgPSAlMDJYICUwMlggJTAyWCAlMDJYIiwKKwkJZGV2aWNlSURbMF0sIGRldmljZUlEWzFdLCBkZXZpY2VJRFsyXSwgZGV2aWNlSURbM10pOworCisJLyogQnl0ZSAwIGlzIHRoZSBtYW51ZmFjdHVyZXIgKi8KKwlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKKwkJIjogTWFudWYuICVzIiwKKwkJbmFuZF9mbGFzaF9tYW51ZmFjdHVyZXIoZGV2aWNlSURbMF0pKTsKKworCS8qIEJ5dGUgMSBpcyB0aGUgZGV2aWNlIHR5cGUgKi8KKwljYXJkaW5mbyA9IG5hbmRfZmluZF9pZChkZXZpY2VJRFsxXSk7CisJaWYgKGNhcmRpbmZvKSB7CisJCS8qIE1CIG9yIE1pQj8gSXQgaXMgbmVpdGhlci4gQSAxNiBNQiBjYXJkIGhhcworCQkgICAxNzMwMTUwNCByYXcgYnl0ZXMsIG9mIHdoaWNoIDE2Mzg0MDAwIGFyZQorCQkgICB1c2FibGUgZm9yIHVzZXIgZGF0YS4gKi8KKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCAlZCBNQiIsIDE8PChjYXJkaW5mby0+Y2hpcHNoaWZ0IC0gMjApKTsKKwl9IGVsc2UgeworCQlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKKwkJCSIsIHR5cGUgdW5yZWNvZ25pemVkIik7CisJfQorCisJLyogQnl0ZSAyIGlzIGNvZGUgdG8gc2lnbmFsIGF2YWlsYWJpbGl0eSBvZiAxMjgtYml0IElEICovCisJaWYgKGRldmljZUlEWzJdID09IDB4YTUpIHsKKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCAxMjgtYml0IElEIik7CisJfQorCisJLyogQnl0ZSAzIGFubm91bmNlcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGFub3RoZXIgcmVhZCBJRCBjb21tYW5kICovCisJaWYgKGRldmljZUlEWzNdID09IDB4YzApIHsKKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCBleHRyYSBjbWQiKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBTRERSMDlfV1ApCisJCXNwcmludGYoYmx1cmJ0eHQgKyBzdHJsZW4oYmx1cmJ0eHQpLAorCQkJIiwgV1AiKTsKKworCXByaW50aygiJXNcbiIsIGJsdXJidHh0KTsKKworCXJldHVybiBjYXJkaW5mbzsKK30KKworc3RhdGljIGludAorc2RkcjA5X3JlYWRfbWFwKHN0cnVjdCB1c19kYXRhICp1cykgeworCisJc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKikgdXMtPmV4dHJhOworCWludCBudW1ibG9ja3MsIGFsbG9jX2xlbiwgYWxsb2NfYmxvY2tzOworCWludCBpLCBqLCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqYnVmZmVyX2VuZCwgKnB0cjsKKwl1bnNpZ25lZCBpbnQgbGJhLCBsYmFjdDsKKworCWlmICghaW5mby0+Y2FwYWNpdHkpCisJCXJldHVybiAtMTsKKworCS8vIHNpemUgb2YgYSBibG9jayBpcyAxIDw8IChibG9ja3NoaWZ0ICsgcGFnZXNoaWZ0KSBieXRlcworCS8vIGRpdmlkZSBpbnRvIHRoZSB0b3RhbCBjYXBhY2l0eSB0byBnZXQgdGhlIG51bWJlciBvZiBibG9ja3MKKworCW51bWJsb2NrcyA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5ibG9ja3NoaWZ0ICsgaW5mby0+cGFnZXNoaWZ0KTsKKworCS8vIHJlYWQgNjQgYnl0ZXMgZm9yIGV2ZXJ5IGJsb2NrIChhY3R1YWxseSAxIDw8IENPTlRST0xfU0hJRlQpCisJLy8gYnV0IG9ubHkgdXNlIGEgNjQgS0IgYnVmZmVyCisJLy8gYnVmZmVyIHNpemUgdXNlZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgKDEgPDwgQ09OVFJPTF9TSElGVCkKKyNkZWZpbmUgU0REUjA5X1JFQURfTUFQX0JVRlNaIDY1NTM2CisKKwlhbGxvY19ibG9ja3MgPSBtaW4obnVtYmxvY2tzLCBTRERSMDlfUkVBRF9NQVBfQlVGU1ogPj4gQ09OVFJPTF9TSElGVCk7CisJYWxsb2NfbGVuID0gKGFsbG9jX2Jsb2NrcyA8PCBDT05UUk9MX1NISUZUKTsKKwlidWZmZXIgPSBrbWFsbG9jKGFsbG9jX2xlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJlc3VsdCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCWJ1ZmZlcl9lbmQgPSBidWZmZXIgKyBhbGxvY19sZW47CisKKyN1bmRlZiBTRERSMDlfUkVBRF9NQVBfQlVGU1oKKworCWtmcmVlKGluZm8tPmxiYV90b19wYmEpOworCWtmcmVlKGluZm8tPnBiYV90b19sYmEpOworCWluZm8tPmxiYV90b19wYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOworCWluZm8tPnBiYV90b19sYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOworCisJaWYgKGluZm8tPmxiYV90b19wYmEgPT0gTlVMTCB8fCBpbmZvLT5wYmFfdG9fbGJhID09IE5VTEwpIHsKKwkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7IGkrKykKKwkJaW5mby0+bGJhX3RvX3BiYVtpXSA9IGluZm8tPnBiYV90b19sYmFbaV0gPSBVTkRFRjsKKworCS8qCisJICogRGVmaW5lIGxiYS1wYmEgdHJhbnNsYXRpb24gdGFibGUKKwkgKi8KKworCXB0ciA9IGJ1ZmZlcl9lbmQ7CisJZm9yIChpID0gMDsgaSA8IG51bWJsb2NrczsgaSsrKSB7CisJCXB0ciArPSAoMSA8PCBDT05UUk9MX1NISUZUKTsKKwkJaWYgKHB0ciA+PSBidWZmZXJfZW5kKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwkJCWFkZHJlc3MgPSBpIDw8IChpbmZvLT5wYWdlc2hpZnQgKyBpbmZvLT5ibG9ja3NoaWZ0KTsKKwkJCXJlc3VsdCA9IHNkZHIwOV9yZWFkX2NvbnRyb2woCisJCQkJdXMsIGFkZHJlc3M+PjEsCisJCQkJbWluKGFsbG9jX2Jsb2NrcywgbnVtYmxvY2tzIC0gaSksCisJCQkJYnVmZmVyLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCQlyZXN1bHQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlwdHIgPSBidWZmZXI7CisJCX0KKworCQlpZiAoaSA9PSAwIHx8IGkgPT0gMSkgeworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzcGVjaWFsIFBCQXMgaGF2ZSBjb250cm9sIGZpZWxkIDBeMTYgKi8KKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQlpZiAocHRyW2pdICE9IDApCisJCQkJZ290byBub256OworCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CisJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZ1xuIiwgaSk7CisJCWNvbnRpbnVlOworCisJbm9uejoKKwkJLyogdW53cml0dGVuIFBCQXMgaGF2ZSBjb250cm9sIGZpZWxkIEZGXjE2ICovCisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQorCQkJaWYgKHB0cltqXSAhPSAweGZmKQorCQkJCWdvdG8gbm9uZmY7CisJCWNvbnRpbnVlOworCisJbm9uZmY6CisJCS8qIG5vcm1hbCBQQkFzIHN0YXJ0IHdpdGggc2l4IEZGcyAqLworCQlpZiAoaiA8IDYpIHsKKwkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgorCQkJICAgICAgICJyZXNlcnZlZCBhcmVhID0gJTAyWCUwMlglMDJYJTAyWCAiCisJCQkgICAgICAgImRhdGEgc3RhdHVzICUwMlggYmxvY2sgc3RhdHVzICUwMlhcbiIsCisJCQkgICAgICAgaSwgcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdLAorCQkJICAgICAgIHB0cls0XSwgcHRyWzVdKTsKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChwdHJbNl0gPj4gNCkgIT0gMHgwMSkgeworCQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgaW52YWxpZCBhZGRyZXNzIGZpZWxkICIKKwkJCSAgICAgICAiJTAyWCUwMlgvJTAyWCUwMlhcbiIsCisJCQkgICAgICAgaSwgcHRyWzZdLCBwdHJbN10sIHB0clsxMV0sIHB0clsxMl0pOworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjaGVjayBldmVuIHBhcml0eSAqLworCQlpZiAocGFyaXR5W3B0cls2XSBeIHB0cls3XV0pIHsKKwkJCXByaW50aygic2RkcjA5OiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCisJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgcHRyWzZdLCBwdHJbN10pOworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQkJY29udGludWU7CisJCX0KKworCQlsYmEgPSBzaG9ydF9wYWNrKHB0cls3XSwgcHRyWzZdKTsKKwkJbGJhID0gKGxiYSAmIDB4MDdGRikgPj4gMTsKKworCQkvKgorCQkgKiBFdmVyeSAxMDI0IHBoeXNpY2FsIGJsb2NrcyAoInpvbmUiKSwgdGhlIExCQSBudW1iZXJzCisJCSAqIGdvIGJhY2sgdG8gemVybywgYnV0IGFyZSB3aXRoaW4gYSBoaWdoZXIgYmxvY2sgb2YgTEJBJ3MuCisJCSAqIEFsc28sIHRoZXJlIGlzIGEgbWF4aW11bSBvZiAxMDAwIExCQSdzIHBlciB6b25lLgorCQkgKiBJbiBvdGhlciB3b3JkcywgaW4gUEJBIDEwMjQtMjA0NyB5b3Ugd2lsbCBmaW5kIExCQSAwLTk5OQorCQkgKiB3aGljaCBhcmUgcmVhbGx5IExCQSAxMDAwLTE5OTkuIFRoaXMgYWxsb3dzIGZvciAyNCBiYWQKKwkJICogb3Igc3BlY2lhbCBwaHlzaWNhbCBibG9ja3MgcGVyIHpvbmUuCisJCSAqLworCisJCWlmIChsYmEgPj0gMTAwMCkgeworCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKKwkJCSAgICAgICBsYmEsIGkpOworCQkJZ290byBwb3NzaWJseV9lcmFzZTsKKwkJfQorCisJCWxiYSArPSAxMDAwKihpLzB4NDAwKTsKKworCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmFdICE9IFVOREVGKSB7CisJCQlwcmludGsoInNkZHIwOTogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCisJCQkgICAgICAgbGJhLCBpbmZvLT5sYmFfdG9fcGJhW2xiYV0sIGkpOworCQkJZ290byBwb3NzaWJseV9lcmFzZTsKKwkJfQorCisJCWluZm8tPnBiYV90b19sYmFbaV0gPSBsYmE7CisJCWluZm8tPmxiYV90b19wYmFbbGJhXSA9IGk7CisJCWNvbnRpbnVlOworCisJcG9zc2libHlfZXJhc2U6CisJCWlmIChlcmFzZV9iYWRfbGJhX2VudHJpZXMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCQkJYWRkcmVzcyA9IChpIDw8IChpbmZvLT5wYWdlc2hpZnQgKyBpbmZvLT5ibG9ja3NoaWZ0KSk7CisJCQlzZGRyMDlfZXJhc2UodXMsIGFkZHJlc3M+PjEpOworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOREVGOworCQl9IGVsc2UKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwl9CisKKwkvKgorCSAqIEFwcHJveGltYXRlIGNhcGFjaXR5LiBUaGlzIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0IHlldCwKKwkgKiBzaW5jZSBhIHpvbmUgd2l0aCBsZXNzIHRoYW4gMTAwMCB1c2FibGUgcGFnZXMgbGVhZHMgdG8KKwkgKiBtaXNzaW5nIExCQXMuIEVzcGVjaWFsbHkgaWYgaXQgaXMgdGhlIGxhc3Qgem9uZSwgc29tZQorCSAqIExCQXMgY2FuIGJlIHBhc3QgY2FwYWNpdHkuCisJICovCisJbGJhY3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7IGkgKz0gMTAyNCkgeworCQlpbnQgY3QgPSAwOworCisJCWZvciAoaiA9IDA7IGogPCAxMDI0ICYmIGkraiA8IG51bWJsb2NrczsgaisrKSB7CisJCQlpZiAoaW5mby0+cGJhX3RvX2xiYVtpK2pdICE9IFVOVVNBQkxFKSB7CisJCQkJaWYgKGN0ID49IDEwMDApCisJCQkJCWluZm8tPnBiYV90b19sYmFbaStqXSA9IFNQQVJFOworCQkJCWVsc2UKKwkJCQkJY3QrKzsKKwkJCX0KKwkJfQorCQlsYmFjdCArPSBjdDsKKwl9CisJaW5mby0+bGJhY3QgPSBsYmFjdDsKKwlVU19ERUJVR1AoIkZvdW5kICVkIExCQSdzXG4iLCBsYmFjdCk7CisJcmVzdWx0ID0gMDsKKworIGRvbmU6CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGluZm8tPmxiYV90b19wYmEpOworCQlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwkJaW5mby0+bGJhX3RvX3BiYSA9IE5VTEw7CisJCWluZm8tPnBiYV90b19sYmEgPSBOVUxMOworCX0KKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZGRyMDlfY2FyZF9pbmZvX2Rlc3RydWN0b3Iodm9pZCAqZXh0cmEpIHsKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKWV4dHJhOworCisJaWYgKCFpbmZvKQorCQlyZXR1cm47CisKKwlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKK30KKworc3RhdGljIHZvaWQKK3NkZHIwOV9pbml0X2NhcmRfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyksIEdGUF9OT0lPKTsKKwkJaWYgKHVzLT5leHRyYSkgeworCQkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvKSk7CisJCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IHNkZHIwOV9jYXJkX2luZm9fZGVzdHJ1Y3RvcjsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgbmVlZGVkIGF0IGEgdmVyeSBlYXJseSBzdGFnZS4gSWYgdGhpcyBpcyBub3QgbGlzdGVkIGluIHRoZQorICogdW51c3VhbCBkZXZpY2VzIGxpc3QgYnV0IGNhbGxlZCBmcm9tIGhlcmUgdGhlbiBMVU4gMCBvZiB0aGUgY29tYm8gcmVhZGVyCisgKiBpcyBub3QgcmVjb2duaXplZC4gQnV0IEkgZG8gbm90IGtub3cgd2hhdCBwcmVjaXNlbHkgdGhlc2UgY2FsbHMgZG8uCisgKi8KK2ludAorc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfY29tbWFuZCh1cywgMHgwMSwgVVNCX0RJUl9JTiwgZGF0YSwgMik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoInNkZHIwOV9pbml0OiBzZW5kX2NvbW1hbmQgZmFpbHNcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCVVTX0RFQlVHUCgiU0REUjA5aW5pdDogJTAyWCAlMDJYXG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKwkvLyBnZXQgMDcgMDIKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX2NvbW1hbmQodXMsIDB4MDgsIFVTQl9ESVJfSU4sIGRhdGEsIDIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfaW5pdDogMm5kIHNlbmRfY29tbWFuZCBmYWlsc1xuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJVVNfREVCVUdQKCJTRERSMDlpbml0OiAlMDJYICUwMlhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCS8vIGdldCAwNyAwMAorCisJcmVzdWx0ID0gc2RkcjA5X3JlcXVlc3Rfc2Vuc2UodXMsIGRhdGEsIDE4KTsKKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EICYmIGRhdGFbMl0gIT0gMCkgeworCQlpbnQgajsKKwkJZm9yIChqPTA7IGo8MTg7IGorKykKKwkJCXByaW50aygiICUwMlgiLCBkYXRhW2pdKTsKKwkJcHJpbnRrKCJcbiIpOworCQkvLyBnZXQgNzAgMDAgMDAgMDAgMDAgMDAgMDAgKiAwMCAwMCAwMCAwMCAwMCAwMAorCQkvLyA3MDogY3VycmVudCBjb21tYW5kCisJCS8vIHNlbnNlIGtleSAwLCBzZW5zZSBjb2RlIDAsIGV4dGQgc2Vuc2UgY29kZSAwCisJCS8vIGFkZGl0aW9uYWwgdHJhbnNmZXIgbGVuZ3RoICogPSBzaXplb2YoZGF0YSkgLSA3CisJCS8vIE9yOiA3MCAwMCAwNiAwMCAwMCAwMCAwMCAwYiAwMCAwMCAwMCAwMCAyOCAwMCAwMCAwMCAwMCAwMAorCQkvLyBzZW5zZSBrZXkgMDYsIHNlbnNlIGNvZGUgMjg6IHVuaXQgYXR0ZW50aW9uLAorCQkvLyBub3QgcmVhZHkgdG8gcmVhZHkgdHJhbnNpdGlvbgorCX0KKworCS8vIHRlc3QgdW5pdCByZWFkeQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwkJLyogbm90IHJlc3VsdCAqLworfQorCisvKgorICogVHJhbnNwb3J0IGZvciB0aGUgU2FuZGlzayBTRERSLTA5CisgKi8KK2ludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlbnNla2V5ID0gMCwgc2Vuc2Vjb2RlID0gMDsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBoYXZlZmFrZXNlbnNlID0gMDsKKwlpbnQgcmVzdWx0LCBpOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCXVuc2lnbmVkIGludCBwYWdlLCBwYWdlczsKKworCXN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvOworCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVs4XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMiwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwkvKiBub3RlOiBubyBibG9jayBkZXNjcmlwdG9yIHN1cHBvcnQgKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBtb2RlX3BhZ2VfMDFbMTldID0geworCQkweDAwLCAweDBGLCAweDAwLCAweDAsIDB4MCwgMHgwLCAweDAwLAorCQkweDAxLCAweDBBLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisJfTsKKworCWluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisJaWYgKCFpbmZvKSB7CisJCW5hbmRfaW5pdF9lY2MoKTsKKwkJc2RkcjA5X2luaXRfY2FyZF9pbmZvKHVzKTsKKwkJaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKwkJaWYgKCFpbmZvKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UgJiYgaGF2ZWZha2VzZW5zZSkgeworCQkvKiBmb3IgYSBmYWtlZCBjb21tYW5kLCB3ZSBoYXZlIHRvIGZvbGxvdyB3aXRoIGEgZmFrZWQgc2Vuc2UgKi8KKwkJbWVtc2V0KHB0ciwgMCwgMTgpOworCQlwdHJbMF0gPSAweDcwOworCQlwdHJbMl0gPSBzZW5zZWtleTsKKwkJcHRyWzddID0gMTE7CisJCXB0clsxMl0gPSBzZW5zZWNvZGU7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDE4LCBzcmIpOworCQlzZW5zZWtleSA9IHNlbnNlY29kZSA9IGhhdmVmYWtlc2Vuc2UgPSAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaGF2ZWZha2VzZW5zZSA9IDE7CisKKwkvKiBEdW1teSB1cCBhIHJlc3BvbnNlIGZvciBJTlFVSVJZIHNpbmNlIFNERFIwOSBkb2Vzbid0CisJICAgcmVzcG9uZCB0byBJTlFVSVJZIGNvbW1hbmRzICovCisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgOCk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKwkJc3RydWN0IG5hbmRfZmxhc2hfZGV2ICpjYXJkaW5mbzsKKworCQlzZGRyMDlfZ2V0X3dwKHVzLCBpbmZvKTsJLyogcmVhZCBXUCBiaXQgKi8KKworCQljYXJkaW5mbyA9IHNkZHIwOV9nZXRfY2FyZGluZm8odXMsIGluZm8tPmZsYWdzKTsKKwkJaWYgKCFjYXJkaW5mbykgeworCQkJLyogcHJvYmFibHkgbm8gbWVkaWEgKi8KKwkJaW5pdF9lcnJvcjoKKwkJCXNlbnNla2V5ID0gMHgwMjsJLyogbm90IHJlYWR5ICovCisJCQlzZW5zZWNvZGUgPSAweDNhOwkvKiBtZWRpdW0gbm90IHByZXNlbnQgKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisKKwkJaW5mby0+Y2FwYWNpdHkgPSAoMSA8PCBjYXJkaW5mby0+Y2hpcHNoaWZ0KTsKKwkJaW5mby0+cGFnZXNoaWZ0ID0gY2FyZGluZm8tPnBhZ2VzaGlmdDsKKwkJaW5mby0+cGFnZXNpemUgPSAoMSA8PCBpbmZvLT5wYWdlc2hpZnQpOworCQlpbmZvLT5ibG9ja3NoaWZ0ID0gY2FyZGluZm8tPmJsb2Nrc2hpZnQ7CisJCWluZm8tPmJsb2Nrc2l6ZSA9ICgxIDw8IGluZm8tPmJsb2Nrc2hpZnQpOworCQlpbmZvLT5ibG9ja21hc2sgPSBpbmZvLT5ibG9ja3NpemUgLSAxOworCisJCS8vIG1hcCBpbml0aWFsaXphdGlvbiwgbXVzdCBmb2xsb3cgZ2V0X2NhcmRpbmZvKCkKKwkJaWYgKHNkZHIwOV9yZWFkX21hcCh1cykpIHsKKwkJCS8qIHByb2JhYmx5IG91dCBvZiBtZW1vcnkgKi8KKwkJCWdvdG8gaW5pdF9lcnJvcjsKKwkJfQorCisJCS8vIFJlcG9ydCBjYXBhY2l0eQorCisJCWNhcGFjaXR5ID0gKGluZm8tPmxiYWN0IDw8IGluZm8tPmJsb2Nrc2hpZnQpIC0gMTsKKworCQkoKF9fYmUzMiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMzIoY2FwYWNpdHkpOworCisJCS8vIFJlcG9ydCBwYWdlIHNpemUKKworCQkoKF9fYmUzMiAqKSBwdHIpWzFdID0gY3B1X3RvX2JlMzIoaW5mby0+cGFnZXNpemUpOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCA4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0VfMTApIHsKKwkJaW50IG1vZGVwYWdlID0gKHNyYi0+Y21uZFsyXSAmIDB4M0YpOworCisJCS8qIFRoZXkgYXNrIGZvciB0aGUgUmVhZC9Xcml0ZSBlcnJvciByZWNvdmVyeSBwYWdlLAorCQkgICBvciBmb3IgYWxsIHBhZ2VzLiAqLworCQkvKiAlJSBXZSBzaG91bGQgY2hlY2sgREJEICUlICovCisJCWlmIChtb2RlcGFnZSA9PSAweDAxIHx8IG1vZGVwYWdlID09IDB4M0YpIHsKKwkJCVVTX0RFQlVHUCgiU0REUjA5OiBEdW1teSB1cCByZXF1ZXN0IGZvciAiCisJCQkJICAibW9kZSBwYWdlIDB4JXhcbiIsIG1vZGVwYWdlKTsKKworCQkJbWVtY3B5KHB0ciwgbW9kZV9wYWdlXzAxLCBzaXplb2YobW9kZV9wYWdlXzAxKSk7CisJCQkoKF9fYmUxNiopcHRyKVswXSA9IGNwdV90b19iZTE2KHNpemVvZihtb2RlX3BhZ2VfMDEpIC0gMik7CisJCQlwdHJbM10gPSAoaW5mby0+ZmxhZ3MgJiBTRERSMDlfV1ApID8gMHg4MCA6IDA7CisJCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCBzaXplb2YobW9kZV9wYWdlXzAxKSwgc3JiKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJfQorCisJCXNlbnNla2V5ID0gMHgwNTsJLyogaWxsZWdhbCByZXF1ZXN0ICovCisJCXNlbnNlY29kZSA9IDB4MjQ7CS8qIGludmFsaWQgZmllbGQgaW4gQ0RCICovCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gQUxMT1dfTUVESVVNX1JFTU9WQUwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCWhhdmVmYWtlc2Vuc2UgPSAwOworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisKKwkJcGFnZSA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbMl0pOworCQlwYWdlIDw8PSAxNjsKKwkJcGFnZSB8PSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs1XSwgc3JiLT5jbW5kWzRdKTsKKwkJcGFnZXMgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzddKTsKKworCQlVU19ERUJVR1AoIlJFQURfMTA6IHJlYWQgcGFnZSAlZCBwYWdlY3QgJWRcbiIsCisJCQkgIHBhZ2UsIHBhZ2VzKTsKKworCQlyZXR1cm4gc2RkcjA5X3JlYWRfZGF0YSh1cywgcGFnZSwgcGFnZXMpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKKworCQlwYWdlID0gc2hvcnRfcGFjayhzcmItPmNtbmRbM10sIHNyYi0+Y21uZFsyXSk7CisJCXBhZ2UgPDw9IDE2OworCQlwYWdlIHw9IHNob3J0X3BhY2soc3JiLT5jbW5kWzVdLCBzcmItPmNtbmRbNF0pOworCQlwYWdlcyA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzhdLCBzcmItPmNtbmRbN10pOworCisJCVVTX0RFQlVHUCgiV1JJVEVfMTA6IHdyaXRlIHBhZ2UgJWQgcGFnZWN0ICVkXG4iLAorCQkJICBwYWdlLCBwYWdlcyk7CisKKwkJcmV0dXJuIHNkZHIwOV93cml0ZV9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7CisJfQorCisJLyogY2F0Y2gtYWxsIGZvciBhbGwgb3RoZXIgY29tbWFuZHMsIGV4Y2VwdAorCSAqIHBhc3MgVEVTVF9VTklUX1JFQURZIGFuZCBSRVFVRVNUX1NFTlNFIHRocm91Z2gKKwkgKi8KKwlpZiAoc3JiLT5jbW5kWzBdICE9IFRFU1RfVU5JVF9SRUFEWSAmJgorCSAgICBzcmItPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSkgeworCQlzZW5zZWtleSA9IDB4MDU7CS8qIGlsbGVnYWwgcmVxdWVzdCAqLworCQlzZW5zZWNvZGUgPSAweDIwOwkvKiBpbnZhbGlkIGNvbW1hbmQgKi8KKwkJaGF2ZWZha2VzZW5zZSA9IDE7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwlzcmItPmNtbmRbMV0gPSBMVU5CSVRTOworCisJcHRyWzBdID0gMDsKKwlmb3IgKGk9MDsgaTwxMjsgaSsrKQorCQlzcHJpbnRmKHB0citzdHJsZW4ocHRyKSwgIiUwMlggIiwgc3JiLT5jbW5kW2ldKTsKKworCVVTX0RFQlVHUCgiU0REUjA5OiBTZW5kIGNvbnRyb2wgZm9yIGNvbW1hbmQgJXNcbiIsIHB0cik7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIHNyYi0+Y21uZCwgMTIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfdHJhbnNwb3J0OiBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQgIgorCQkJICAicmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlpZiAoc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSB8fAorCSAgICBzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgeworCQl1bnNpZ25lZCBpbnQgcGlwZSA9IChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCQkJPyB1cy0+c2VuZF9idWxrX3BpcGUgOiB1cy0+cmVjdl9idWxrX3BpcGU7CisKKwkJVVNfREVCVUdQKCJTRERSMDk6ICVzICVkIGJ5dGVzXG4iLAorCQkJICAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSA/CisJCQkgICJzZW5kaW5nIiA6ICJyZWNlaXZpbmciLAorCQkJICBzcmItPnJlcXVlc3RfYnVmZmxlbik7CisKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywgcGlwZSwKKwkJCQkJc3JiLT5yZXF1ZXN0X2J1ZmZlciwKKwkJCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4sCisJCQkJCXNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisKKwkJcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KKwkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKKwl9IAorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ3OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApAQCAtMCwwICsxLDQ4IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IHNkZHIwOS5oLHYgMS41IDIwMDAvMDgvMjUgMDA6MTM6NTEgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQorICogICAoYykgMjAwMiBBbmRyaWVzIEJyb3V3ZXIgKGFlYkBjd2kubmwpCisgKgorICogU2VlIHNkZHIwOS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAorI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAorCisvKiBTYW5kaXNrIFNERFItMDkgc3R1ZmYgKi8KKworZXh0ZXJuIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IHNkZHIwOV9jYXJkX2luZm8geworCXVuc2lnbmVkIGxvbmcJY2FwYWNpdHk7CS8qIFNpemUgb2YgY2FyZCBpbiBieXRlcyAqLworCWludAkJcGFnZXNpemU7CS8qIFNpemUgb2YgcGFnZSBpbiBieXRlcyAqLworCWludAkJcGFnZXNoaWZ0OwkvKiBsb2cyIG9mIHBhZ2VzaXplICovCisJaW50CQlibG9ja3NpemU7CS8qIFNpemUgb2YgYmxvY2sgaW4gcGFnZXMgKi8KKwlpbnQJCWJsb2Nrc2hpZnQ7CS8qIGxvZzIgb2YgYmxvY2tzaXplICovCisJaW50CQlibG9ja21hc2s7CS8qIDJeYmxvY2tzaGlmdCAtIDEgKi8KKwlpbnQJCSpsYmFfdG9fcGJhOwkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcCAqLworCWludAkJKnBiYV90b19sYmE7CS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgbWFwICovCisJaW50CQlsYmFjdDsJCS8qIG51bWJlciBvZiBhdmFpbGFibGUgcGFnZXMgKi8KKwlpbnQJCWZsYWdzOworI2RlZmluZQlTRERSMDlfV1AJMQkJLyogd3JpdGUgcHJvdGVjdGVkICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWNhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCkBAIC0wLDAgKzEsOTM4IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlcgorICoKKyAqICRJZDokCisgKgorICogU0REUjU1IGRyaXZlciB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDIgU2ltb24gTXVudG9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAic2RkcjU1LmgiCisKKworI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCisjZGVmaW5lIExTQl9vZihzKSAoKHMpJjB4RkYpCisjZGVmaW5lIE1TQl9vZihzKSAoKHMpPj44KQorI2RlZmluZSBQQUdFU0laRSAgNTEyCisKKyNkZWZpbmUgc2V0X3NlbnNlX2luZm8oc2ssIGFzYywgYXNjcSkJXAorICAgIGRvIHsJCQkJXAorCWluZm8tPnNlbnNlX2RhdGFbMl0gPSBzazsJXAorCWluZm8tPnNlbnNlX2RhdGFbMTJdID0gYXNjOwlcCisJaW5mby0+c2Vuc2VfZGF0YVsxM10gPSBhc2NxOwlcCisJfSB3aGlsZSAoMCkKKworCitzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyB7CisJdW5zaWduZWQgbG9uZwljYXBhY2l0eTsJLyogU2l6ZSBvZiBjYXJkIGluIGJ5dGVzICovCisJaW50CQltYXhfbG9nX2Jsa3M7CS8qIG1heGltdW0gbnVtYmVyIG9mIGxvZ2ljYWwgYmxvY2tzICovCisJaW50CQlwYWdlc2hpZnQ7CS8qIGxvZzIgb2YgcGFnZXNpemUgKi8KKwlpbnQJCXNtYWxscGFnZXNoaWZ0OwkvKiAxIGlmIHBhZ2VzaXplID09IDI1NiAqLworCWludAkJYmxvY2tzaXplOwkvKiBTaXplIG9mIGJsb2NrIGluIHBhZ2VzICovCisJaW50CQlibG9ja3NoaWZ0OwkvKiBsb2cyIG9mIGJsb2Nrc2l6ZSAqLworCWludAkJYmxvY2ttYXNrOwkvKiAyXmJsb2Nrc2hpZnQgLSAxICovCisJaW50CQlyZWFkX29ubHk7CS8qIG5vbiB6ZXJvIGlmIGNhcmQgaXMgd3JpdGUgcHJvdGVjdGVkICovCisJaW50CQlmb3JjZV9yZWFkX29ubHk7CS8qIG5vbiB6ZXJvIGlmIHdlIGZpbmQgYSBtYXAgZXJyb3IqLworCWludAkJKmxiYV90b19wYmE7CS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgbWFwICovCisJaW50CQkqcGJhX3RvX2xiYTsJLyogcGh5c2ljYWwgdG8gbG9naWNhbCBtYXAgKi8KKwlpbnQJCWZhdGFsX2Vycm9yOwkvKiBzZXQgaWYgd2UgZGV0ZWN0IHNvbWV0aGluZyBuYXN0eSAqLworCXVuc2lnbmVkIGxvbmcgCWxhc3RfYWNjZXNzOwkvKiBudW1iZXIgb2YgamlmZmllcyBzaW5jZSB3ZSBsYXN0IHRhbGtlZCB0byBkZXZpY2UgKi8KKwl1bnNpZ25lZCBjaGFyICAgc2Vuc2VfZGF0YVsxOF07Cit9OworCisKKyNkZWZpbmUgTk9UX0FMTE9DQVRFRAkJMHhmZmZmZmZmZgorI2RlZmluZSBCQURfQkxPQ0sJCTB4ZmZmZgorI2RlZmluZSBDSVNfQkxPQ0sJCTB4NDAwCisjZGVmaW5lIFVOVVNFRF9CTE9DSwkJMHgzZmYKKworc3RhdGljIGludAorc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cywgaW50IGRpcmVjdGlvbiwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikgeworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopdXMtPmV4dHJhOworCXVuc2lnbmVkIGludCBwaXBlID0gKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpID8KKwkJCXVzLT5yZWN2X2J1bGtfcGlwZSA6IHVzLT5zZW5kX2J1bGtfcGlwZTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCWluZm8tPmxhc3RfYWNjZXNzID0gamlmZmllczsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHBpcGUsIGRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKy8qIGNoZWNrIGlmIGNhcmQgaW5zZXJ0ZWQsIGlmIHRoZXJlIGlzLCB1cGRhdGUgcmVhZF9vbmx5IHN0YXR1cworICogcmV0dXJuIG5vbiB6ZXJvIGlmIG5vIGNhcmQKKyAqLworCitzdGF0aWMgaW50IHNkZHI1NV9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0+aW9idWY7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisKKwkvKiBzZW5kIGNvbW1hbmQgKi8KKwltZW1zZXQoY29tbWFuZCwgMCwgOCk7CisJY29tbWFuZFs1XSA9IDB4QjA7CisJY29tbWFuZFs3XSA9IDB4ODA7CisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQlETUFfVE9fREVWSUNFLCBjb21tYW5kLCA4KTsKKworCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2NvbW1hbmQgaW4gc3RhdHVzICVkXG4iLAorCQlyZXN1bHQpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJc2V0X3NlbnNlX2luZm8gKDQsIDAsIDApOwkvKiBoYXJkd2FyZSBlcnJvciAqLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJRE1BX0ZST01fREVWSUNFLCBzdGF0dXMsCTQpOworCisJLyogZXhwZWN0IHRvIGdldCBzaG9ydCB0cmFuc2ZlciBpZiBubyBjYXJkIGZpdHRlZCAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TSE9SVCB8fCByZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKSB7CisJCS8qIGhhZCBhIHNob3J0IHRyYW5zZmVyLCBubyBjYXJkIGluc2VydGVkLCBmcmVlIG1hcCBtZW1vcnkgKi8KKwkJaWYgKGluZm8tPmxiYV90b19wYmEpCisJCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwkJaWYgKGluZm8tPnBiYV90b19sYmEpCisJCQlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwkJaW5mby0+bGJhX3RvX3BiYSA9IE5VTEw7CisJCWluZm8tPnBiYV90b19sYmEgPSBOVUxMOworCisJCWluZm8tPmZhdGFsX2Vycm9yID0gMDsKKwkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMDsKKworCQlzZXRfc2Vuc2VfaW5mbyAoMiwgMHgzYSwgMCk7CS8qIG5vdCByZWFkeSwgbWVkaXVtIG5vdCBwcmVzZW50ICovCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXNldF9zZW5zZV9pbmZvICg0LCAwLCAwKTsJLyogaGFyZHdhcmUgZXJyb3IgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCQorCS8qIGNoZWNrIHdyaXRlIHByb3RlY3Qgc3RhdHVzICovCisJaW5mby0+cmVhZF9vbmx5ID0gKHN0YXR1c1swXSAmIDB4MjApOworCisJLyogbm93IHJlYWQgc3RhdHVzICovCisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQlETUFfRlJPTV9ERVZJQ0UsIHN0YXR1cywJMik7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlzZXRfc2Vuc2VfaW5mbyAoNCwgMCwgMCk7CS8qIGhhcmR3YXJlIGVycm9yICovCisJfQorCisJcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KKwkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCk7Cit9CisKKworc3RhdGljIGludCBzZGRyNTVfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJdW5zaWduZWQgaW50IGxiYSwKKwkJdW5zaWduZWQgaW50IHBhZ2UsCisJCXVuc2lnbmVkIHNob3J0IHNlY3RvcnMpIHsKKworCWludCByZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwl1bnNpZ25lZCBpbnQgcGJhOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCXVuc2lnbmVkIHNob3J0IHBhZ2VzOworCXVuc2lnbmVkIGludCBsZW4sIGluZGV4LCBvZmZzZXQ7CisKKwkvLyBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWxlbiA9IG1pbigodW5zaWduZWQgaW50KSBzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUgPj4KKwkJCWluZm8tPnNtYWxscGFnZXNoaWZ0KSAqIFBBR0VTSVpFOworCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOyAvKiBvdXQgb2YgbWVtb3J5ICovCisJaW5kZXggPSBvZmZzZXQgPSAwOworCisJd2hpbGUgKHNlY3RvcnM+MCkgeworCisJCS8qIGhhdmUgd2UgZ290IHRvIGVuZD8gKi8KKwkJaWYgKGxiYSA+PSBpbmZvLT5tYXhfbG9nX2Jsa3MpCisJCQlicmVhazsKKworCQlwYmEgPSBpbmZvLT5sYmFfdG9fcGJhW2xiYV07CisKKwkJLy8gUmVhZCBhcyBtYW55IHNlY3RvcnMgYXMgcG9zc2libGUgaW4gdGhpcyBibG9jaworCisJCXBhZ2VzID0gbWluKCh1bnNpZ25lZCBpbnQpIHNlY3RvcnMgPDwgaW5mby0+c21hbGxwYWdlc2hpZnQsCisJCQkJaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IHBhZ2VzIDw8IGluZm8tPnBhZ2VzaGlmdDsKKworCQlVU19ERUJVR1AoIlJlYWQgJTAyWCBwYWdlcywgZnJvbSBQQkEgJTA0WCIKKwkJCSIgKExCQSAlMDRYKSBwYWdlICUwMlhcbiIsCisJCQlwYWdlcywgcGJhLCBsYmEsIHBhZ2UpOworCisJCWlmIChwYmEgPT0gTk9UX0FMTE9DQVRFRCkgeworCQkJLyogbm8gcGJhIGZvciB0aGlzIGxiYSwgZmlsbCB3aXRoIHplcm9lcyAqLworCQkJbWVtc2V0IChidWZmZXIsIDAsIGxlbik7CisJCX0gZWxzZSB7CisKKwkJCWFkZHJlc3MgPSAocGJhIDw8IGluZm8tPmJsb2Nrc2hpZnQpICsgcGFnZTsKKworCQkJY29tbWFuZFswXSA9IDA7CisJCQljb21tYW5kWzFdID0gTFNCX29mKGFkZHJlc3M+PjE2KTsKKwkJCWNvbW1hbmRbMl0gPSBMU0Jfb2YoYWRkcmVzcz4+OCk7CisJCQljb21tYW5kWzNdID0gTFNCX29mKGFkZHJlc3MpOworCisJCQljb21tYW5kWzRdID0gMDsKKwkJCWNvbW1hbmRbNV0gPSAweEIwOworCQkJY29tbWFuZFs2XSA9IExTQl9vZihwYWdlcyA8PCAoMSAtIGluZm8tPnNtYWxscGFnZXNoaWZ0KSk7CisJCQljb21tYW5kWzddID0gMHg4NTsKKworCQkJLyogc2VuZCBjb21tYW5kICovCisJCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQkJRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwkJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2NvbW1hbmQgaW4gcmVhZF9kYXRhICVkXG4iLAorCQkJCXJlc3VsdCk7CisKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisKKwkJCS8qIHJlYWQgZGF0YSAqLworCQkJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQkJCURNQV9GUk9NX0RFVklDRSwgYnVmZmVyLCBsZW4pOworCisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCQlnb3RvIGxlYXZlOworCQkJfQorCisJCQkvKiBub3cgcmVhZCBzdGF0dXMgKi8KKwkJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCQlETUFfRlJPTV9ERVZJQ0UsIHN0YXR1cywgMik7CisKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisKKwkJCS8qIGNoZWNrIHN0YXR1cyBmb3IgZXJyb3IgKi8KKwkJCWlmIChzdGF0dXNbMF0gPT0gMHhmZiAmJiBzdGF0dXNbMV0gPT0gMHg0KSB7CisJCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MTEsIDApOworCQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQkJZ290byBsZWF2ZTsKKwkJCX0KKwkJfQorCisJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZpbmRleCwgJm9mZnNldCwgVE9fWEZFUl9CVUYpOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlcyA+PiBpbmZvLT5zbWFsbHBhZ2VzaGlmdDsKKwl9CisKKwlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworbGVhdmU6CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2RkcjU1X3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBpbnQgbGJhLAorCQl1bnNpZ25lZCBpbnQgcGFnZSwKKwkJdW5zaWduZWQgc2hvcnQgc2VjdG9ycykgeworCisJaW50IHJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopdXMtPmV4dHJhOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCXVuc2lnbmVkIGludCBwYmE7CisJdW5zaWduZWQgaW50IG5ld19wYmE7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJdW5zaWduZWQgc2hvcnQgcGFnZXM7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGxlbiwgaW5kZXgsIG9mZnNldDsKKworCS8qIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHdyaXRlICovCisJaWYgKGluZm8tPnJlYWRfb25seSB8fCBpbmZvLT5mb3JjZV9yZWFkX29ubHkpIHsKKwkJc2V0X3NlbnNlX2luZm8gKDcsIDB4MjcsIDApOwkvKiByZWFkIG9ubHkgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJLy8gU2luY2Ugd2Ugb25seSB3cml0ZSBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJbGVuID0gbWluKCh1bnNpZ25lZCBpbnQpIHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSA+PgorCQkJaW5mby0+c21hbGxwYWdlc2hpZnQpICogUEFHRVNJWkU7CisJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJaW5kZXggPSBvZmZzZXQgPSAwOworCisJd2hpbGUgKHNlY3RvcnMgPiAwKSB7CisKKwkJLyogaGF2ZSB3ZSBnb3QgdG8gZW5kPyAqLworCQlpZiAobGJhID49IGluZm8tPm1heF9sb2dfYmxrcykKKwkJCWJyZWFrOworCisJCXBiYSA9IGluZm8tPmxiYV90b19wYmFbbGJhXTsKKworCQkvLyBXcml0ZSBhcyBtYW55IHNlY3RvcnMgYXMgcG9zc2libGUgaW4gdGhpcyBibG9jaworCisJCXBhZ2VzID0gbWluKCh1bnNpZ25lZCBpbnQpIHNlY3RvcnMgPDwgaW5mby0+c21hbGxwYWdlc2hpZnQsCisJCQkJaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IHBhZ2VzIDw8IGluZm8tPnBhZ2VzaGlmdDsKKworCQkvLyBHZXQgdGhlIGRhdGEgZnJvbSB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkmaW5kZXgsICZvZmZzZXQsIEZST01fWEZFUl9CVUYpOworCisJCVVTX0RFQlVHUCgiV3JpdGUgJTAyWCBwYWdlcywgdG8gUEJBICUwNFgiCisJCQkiIChMQkEgJTA0WCkgcGFnZSAlMDJYXG4iLAorCQkJcGFnZXMsIHBiYSwgbGJhLCBwYWdlKTsKKwkJCQorCQljb21tYW5kWzRdID0gMDsKKworCQlpZiAocGJhID09IE5PVF9BTExPQ0FURUQpIHsKKwkJCS8qIG5vIHBiYSBhbGxvY2F0ZWQgZm9yIHRoaXMgbGJhLCBmaW5kIGEgZnJlZSBwYmEgdG8gdXNlICovCisKKwkJCWludCBtYXhfcGJhID0gKGluZm8tPm1heF9sb2dfYmxrcyAvIDI1MCApICogMjU2OworCQkJaW50IGZvdW5kX2NvdW50ID0gMDsKKwkJCWludCBmb3VuZF9wYmEgPSAtMTsKKworCQkJLyogc2V0IHBiYSB0byBmaXJzdCBibG9jayBpbiB6b25lIGxiYSBpcyBpbiAqLworCQkJcGJhID0gKGxiYSAvIDEwMDApICogMTAyNDsKKworCQkJVVNfREVCVUdQKCJObyBQQkEgZm9yIExCQSAlMDRYXG4iLGxiYSk7CisKKwkJCWlmIChtYXhfcGJhID4gMTAyNCkKKwkJCQltYXhfcGJhID0gMTAyNDsKKworCQkJLyoKKwkJCSAqIFNjYW4gdGhyb3VnaCB0aGUgbWFwIGxvb2tpbmcgZm9yIGFuIHVudXNlZCBibG9jaworCQkJICogbGVhdmUgMTYgdW51c2VkIGJsb2NrcyBhdCBzdGFydCAob3IgYXMgbWFueSBhcworCQkJICogcG9zc2libGUpIHNpbmNlIHRoZSBzZGRyNTUgc2VlbXMgdG8gcmV1c2UgYSB1c2VkCisJCQkgKiBibG9jayB3aGVuIGl0IHNob3VsZG4ndCBpZiB3ZSBkb24ndCBsZWF2ZSBzcGFjZS4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IG1heF9wYmE7IGkrKywgcGJhKyspIHsKKwkJCQlpZiAoaW5mby0+cGJhX3RvX2xiYVtwYmFdID09IFVOVVNFRF9CTE9DSykgeworCQkJCQlmb3VuZF9wYmEgPSBwYmE7CisJCQkJCWlmIChmb3VuZF9jb3VudCsrID4gMTYpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCXBiYSA9IGZvdW5kX3BiYTsKKworCQkJaWYgKHBiYSA9PSAtMSkgeworCQkJCS8qIG9oIGRlYXIgKi8KKwkJCQlVU19ERUJVR1AoIkNvdWxkbid0IGZpbmQgdW5hbGxvY2F0ZWQgYmxvY2tcbiIpOworCisJCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MzEsIDApOwkvKiBtZWRpdW0gZXJyb3IgKi8KKwkJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisKKwkJCVVTX0RFQlVHUCgiQWxsb2NhdGluZyBQQkEgJTA0WCBmb3IgTEJBICUwNFhcbiIsIHBiYSwgbGJhKTsKKworCQkJLyogc2V0IHdyaXRpbmcgdG8gdW5hbGxvY2F0ZWQgYmxvY2sgZmxhZyAqLworCQkJY29tbWFuZFs0XSA9IDB4NDA7CisJCX0KKworCQlhZGRyZXNzID0gKHBiYSA8PCBpbmZvLT5ibG9ja3NoaWZ0KSArIHBhZ2U7CisKKwkJY29tbWFuZFsxXSA9IExTQl9vZihhZGRyZXNzPj4xNik7CisJCWNvbW1hbmRbMl0gPSBMU0Jfb2YoYWRkcmVzcz4+OCk7IAorCQljb21tYW5kWzNdID0gTFNCX29mKGFkZHJlc3MpOworCisJCS8qIHNldCB0aGUgbGJhIGludG8gdGhlIGNvbW1hbmQsIG1vZHVsbyAxMDAwICovCisJCWNvbW1hbmRbMF0gPSBMU0Jfb2YobGJhICUgMTAwMCk7CisJCWNvbW1hbmRbNl0gPSBNU0Jfb2YobGJhICUgMTAwMCk7CisKKwkJY29tbWFuZFs0XSB8PSBMU0Jfb2YocGFnZXMgPj4gaW5mby0+c21hbGxwYWdlc2hpZnQpOworCQljb21tYW5kWzVdID0gMHhCMDsKKwkJY29tbWFuZFs3XSA9IDB4ODY7CisKKwkJLyogc2VuZCBjb21tYW5kICovCisJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCURNQV9UT19ERVZJQ0UsIGNvbW1hbmQsIDgpOworCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb21tYW5kIGluIHdyaXRlX2RhdGEgJWRcbiIsCisJCQlyZXN1bHQpOworCisJCQkvKiBzZXRfc2Vuc2VfaW5mbyBpcyBzdXBlcmZsdW91cyBoZXJlPyAqLworCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MywgMCk7LyogcGVyaXBoZXJhbCB3cml0ZSBlcnJvciAqLworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQkvKiBzZW5kIHRoZSBkYXRhICovCisJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCURNQV9UT19ERVZJQ0UsIGJ1ZmZlciwgbGVuKTsKKworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfZGF0YSBpbiB3cml0ZV9kYXRhICVkXG4iLAorCQkJCSAgcmVzdWx0KTsKKworCQkJLyogc2V0X3NlbnNlX2luZm8gaXMgc3VwZXJmbHVvdXMgaGVyZT8gKi8KKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMsIDApOy8qIHBlcmlwaGVyYWwgd3JpdGUgZXJyb3IgKi8KKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJLyogbm93IHJlYWQgc3RhdHVzICovCisJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX0ZST01fREVWSUNFLCBzdGF0dXMsIDYpOworCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgZ2V0X3N0YXR1cyBpbiB3cml0ZV9kYXRhICVkXG4iLAorCQkJCSAgcmVzdWx0KTsKKworCQkJLyogc2V0X3NlbnNlX2luZm8gaXMgc3VwZXJmbHVvdXMgaGVyZT8gKi8KKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMsIDApOy8qIHBlcmlwaGVyYWwgd3JpdGUgZXJyb3IgKi8KKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJbmV3X3BiYSA9IChzdGF0dXNbM10gKyAoc3RhdHVzWzRdIDw8IDgpICsgKHN0YXR1c1s1XSA8PCAxNikpCisJCQkJCQkgID4+IGluZm8tPmJsb2Nrc2hpZnQ7CisKKwkJLyogY2hlY2sgc3RhdHVzIGZvciBlcnJvciAqLworCQlpZiAoc3RhdHVzWzBdID09IDB4ZmYgJiYgc3RhdHVzWzFdID09IDB4NCkgeworCQkJaW5mby0+cGJhX3RvX2xiYVtuZXdfcGJhXSA9IEJBRF9CTE9DSzsKKworCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MGMsIDApOworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQlVU19ERUJVR1AoIlVwZGF0aW5nIG1hcHMgZm9yIExCQSAlMDRYOiBvbGQgUEJBICUwNFgsIG5ldyBQQkEgJTA0WFxuIiwKKwkJCWxiYSwgcGJhLCBuZXdfcGJhKTsKKworCQkvKiB1cGRhdGUgdGhlIGxiYTwtPnBiYSBtYXBzLCBub3RlIG5ld19wYmEgbWlnaHQgYmUgdGhlIHNhbWUgYXMgcGJhICovCisJCWluZm8tPmxiYV90b19wYmFbbGJhXSA9IG5ld19wYmE7CisJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IFVOVVNFRF9CTE9DSzsKKworCQkvKiBjaGVjayB0aGF0IG5ld19wYmEgd2Fzbid0IGFscmVhZHkgYmVpbmcgdXNlZCAqLworCQlpZiAoaW5mby0+cGJhX3RvX2xiYVtuZXdfcGJhXSAhPSBVTlVTRURfQkxPQ0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2RkcjU1IGVycm9yOiBuZXcgUEJBICUwNFggYWxyZWFkeSBpbiB1c2UgZm9yIExCQSAlMDRYXG4iLAorCQkJCW5ld19wYmEsIGluZm8tPnBiYV90b19sYmFbbmV3X3BiYV0pOworCQkJaW5mby0+ZmF0YWxfZXJyb3IgPSAxOworCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MzEsIDApOworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQkvKiB1cGRhdGUgdGhlIHBiYTwtPmxiYSBtYXBzIGZvciBuZXdfcGJhICovCisJCWluZm8tPnBiYV90b19sYmFbbmV3X3BiYV0gPSBsYmEgJSAxMDAwOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlcyA+PiBpbmZvLT5zbWFsbHBhZ2VzaGlmdDsKKwl9CisJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2RkcjU1X3JlYWRfZGV2aWNlSUQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBjaGFyICptYW51ZmFjdHVyZXJJRCwKKwkJdW5zaWduZWQgY2hhciAqZGV2aWNlSUQpIHsKKworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpjb250ZW50ID0gdXMtPmlvYnVmOworCisJbWVtc2V0KGNvbW1hbmQsIDAsIDgpOworCWNvbW1hbmRbNV0gPSAweEIwOworCWNvbW1hbmRbN10gPSAweDg0OworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwlVU19ERUJVR1AoIlJlc3VsdCBvZiBzZW5kX2NvbnRyb2wgZm9yIGRldmljZSBJRCBpcyAlZFxuIiwKKwkJcmVzdWx0KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQlETUFfRlJPTV9ERVZJQ0UsIGNvbnRlbnQsIDQpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkqbWFudWZhY3R1cmVySUQgPSBjb250ZW50WzBdOworCSpkZXZpY2VJRCA9IGNvbnRlbnRbMV07CisKKwlpZiAoY29udGVudFswXSAhPSAweGZmKQl7CisgICAgCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQlETUFfRlJPTV9ERVZJQ0UsIGNvbnRlbnQsIDIpOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworCitpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykgeworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNkZHI1NV9nZXRfY2FwYWNpdHkoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisKKwl1bnNpZ25lZCBjaGFyIG1hbnVmYWN0dXJlcklEOworCXVuc2lnbmVkIGNoYXIgZGV2aWNlSUQ7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKworCVVTX0RFQlVHUCgiUmVhZGluZyBjYXBhY2l0eS4uLlxuIik7CisKKwlyZXN1bHQgPSBzZGRyNTVfcmVhZF9kZXZpY2VJRCh1cywKKwkJJm1hbnVmYWN0dXJlcklELAorCQkmZGV2aWNlSUQpOworCisJVVNfREVCVUdQKCJSZXN1bHQgb2YgcmVhZF9kZXZpY2VJRCBpcyAlZFxuIiwKKwkJcmVzdWx0KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gMDsKKworCVVTX0RFQlVHUCgiRGV2aWNlIElEID0gJTAyWFxuIiwgZGV2aWNlSUQpOworCVVTX0RFQlVHUCgiTWFudWYgIElEID0gJTAyWFxuIiwgbWFudWZhY3R1cmVySUQpOworCisJaW5mby0+cGFnZXNoaWZ0ID0gOTsKKwlpbmZvLT5zbWFsbHBhZ2VzaGlmdCA9IDA7CisJaW5mby0+YmxvY2tzaXplID0gMTY7CisJaW5mby0+YmxvY2tzaGlmdCA9IDQ7CisJaW5mby0+YmxvY2ttYXNrID0gMTU7CisKKwlzd2l0Y2ggKGRldmljZUlEKSB7CisKKwljYXNlIDB4NmU6IC8vIDFNQgorCWNhc2UgMHhlODoKKwljYXNlIDB4ZWM6CisJCWluZm8tPnBhZ2VzaGlmdCA9IDg7CisJCWluZm8tPnNtYWxscGFnZXNoaWZ0ID0gMTsKKwkJcmV0dXJuIDB4MDAxMDAwMDA7CisKKwljYXNlIDB4ZWE6IC8vIDJNQgorCWNhc2UgMHg2NDoKKwkJaW5mby0+cGFnZXNoaWZ0ID0gODsKKwkJaW5mby0+c21hbGxwYWdlc2hpZnQgPSAxOworCWNhc2UgMHg1ZDogLy8gNWQgaXMgYSBST00gY2FyZCB3aXRoIHBhZ2VzaXplIDUxMi4KKwkJcmV0dXJuIDB4MDAyMDAwMDA7CisKKwljYXNlIDB4ZTM6IC8vIDRNQgorCWNhc2UgMHhlNToKKwljYXNlIDB4NmI6CisJY2FzZSAweGQ1OgorCQlyZXR1cm4gMHgwMDQwMDAwMDsKKworCWNhc2UgMHhlNjogLy8gOE1CCisJY2FzZSAweGQ2OgorCQlyZXR1cm4gMHgwMDgwMDAwMDsKKworCWNhc2UgMHg3MzogLy8gMTZNQgorCQlpbmZvLT5ibG9ja3NpemUgPSAzMjsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IDU7CisJCWluZm8tPmJsb2NrbWFzayA9IDMxOworCQlyZXR1cm4gMHgwMTAwMDAwMDsKKworCWNhc2UgMHg3NTogLy8gMzJNQgorCQlpbmZvLT5ibG9ja3NpemUgPSAzMjsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IDU7CisJCWluZm8tPmJsb2NrbWFzayA9IDMxOworCQlyZXR1cm4gMHgwMjAwMDAwMDsKKworCWNhc2UgMHg3NjogLy8gNjRNQgorCQlpbmZvLT5ibG9ja3NpemUgPSAzMjsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IDU7CisJCWluZm8tPmJsb2NrbWFzayA9IDMxOworCQlyZXR1cm4gMHgwNDAwMDAwMDsKKworCWNhc2UgMHg3OTogLy8gMTI4TUIKKwkJaW5mby0+YmxvY2tzaXplID0gMzI7CisJCWluZm8tPmJsb2Nrc2hpZnQgPSA1OworCQlpbmZvLT5ibG9ja21hc2sgPSAzMTsKKwkJcmV0dXJuIDB4MDgwMDAwMDA7CisKKwlkZWZhdWx0OiAvLyB1bmtub3duCisJCXJldHVybiAwOworCisJfQorfQorCitzdGF0aWMgaW50IHNkZHI1NV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopKHVzLT5leHRyYSk7CisJaW50IG51bWJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBsYmE7CisJdW5zaWduZWQgc2hvcnQgbWF4X2xiYTsKKwlpbnQgcmVzdWx0OworCisJaWYgKCFpbmZvLT5jYXBhY2l0eSkKKwkJcmV0dXJuIC0xOworCisJbnVtYmxvY2tzID0gaW5mby0+Y2FwYWNpdHkgPj4gKGluZm8tPmJsb2Nrc2hpZnQgKyBpbmZvLT5wYWdlc2hpZnQpOworCQorCWJ1ZmZlciA9IGttYWxsb2MoIG51bWJsb2NrcyAqIDIsIEdGUF9OT0lPICk7CisJCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtMTsKKworCW1lbXNldChjb21tYW5kLCAwLCA4KTsKKwljb21tYW5kWzVdID0gMHhCMDsKKwljb21tYW5kWzZdID0gbnVtYmxvY2tzICogMiAvIDI1NjsKKwljb21tYW5kWzddID0gMHg4QTsKKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwlpZiAoIHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsIERNQV9GUk9NX0RFVklDRSwgYnVmZmVyLCBudW1ibG9ja3MgKiAyKTsKKworCWlmICggcmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX0ZST01fREVWSUNFLCBjb21tYW5kLCAyKTsKKworCWlmICggcmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpbmZvLT5sYmFfdG9fcGJhKQorCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlpZiAoaW5mby0+cGJhX3RvX2xiYSkKKwkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7CisJaW5mby0+bGJhX3RvX3BiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CisJaW5mby0+cGJhX3RvX2xiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CisKKwlpZiAoaW5mby0+bGJhX3RvX3BiYSA9PSBOVUxMIHx8IGluZm8tPnBiYV90b19sYmEgPT0gTlVMTCkgeworCQlpZiAoaW5mby0+bGJhX3RvX3BiYSAhPSBOVUxMKQorCQkJa2ZyZWUoaW5mby0+bGJhX3RvX3BiYSk7CisJCWlmIChpbmZvLT5wYmFfdG9fbGJhICE9IE5VTEwpCisJCQlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwkJaW5mby0+bGJhX3RvX3BiYSA9IE5VTEw7CisJCWluZm8tPnBiYV90b19sYmEgPSBOVUxMOworCQlrZnJlZShidWZmZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtc2V0KGluZm8tPmxiYV90b19wYmEsIDB4ZmYsIG51bWJsb2NrcypzaXplb2YoaW50KSk7CisJbWVtc2V0KGluZm8tPnBiYV90b19sYmEsIDB4ZmYsIG51bWJsb2NrcypzaXplb2YoaW50KSk7CisKKwkvKiBzZXQgbWF4aW11bSBsYmEgKi8KKwltYXhfbGJhID0gaW5mby0+bWF4X2xvZ19ibGtzOworCWlmIChtYXhfbGJhID4gMTAwMCkKKwkJbWF4X2xiYSA9IDEwMDA7CisKKwkvLyBFYWNoIGJsb2NrIGlzIDY0IGJ5dGVzIG9mIGNvbnRyb2wgZGF0YSwgc28gYmxvY2sgaSBpcyBsb2NhdGVkIGluCisJLy8gc2NhdHRlcmxpc3QgYmxvY2sgaSo2NC8xMjhrID0gaSooMl42KSooMl4tMTcpID0gaSooMl4tMTEpCisKKwlmb3IgKGk9MDsgaTxudW1ibG9ja3M7IGkrKykgeworCQlpbnQgem9uZSA9IGkgLyAxMDI0OworCisJCWxiYSA9IHNob3J0X3BhY2soYnVmZmVyW2kgKiAyXSwgYnVmZmVyW2kgKiAyICsgMV0pOworCisJCQkvKiBFdmVyeSAxMDI0IHBoeXNpY2FsIGJsb2NrcyAoInpvbmUiKSwgdGhlIExCQSBudW1iZXJzCisJCQkgKiBnbyBiYWNrIHRvIHplcm8sIGJ1dCBhcmUgd2l0aGluIGEgaGlnaGVyCisJCQkgKiBibG9jayBvZiBMQkEncy4gQWxzbywgdGhlcmUgaXMgYSBtYXhpbXVtIG9mCisJCQkgKiAxMDAwIExCQSdzIHBlciB6b25lLiBJbiBvdGhlciB3b3JkcywgaW4gUEJBCisJCQkgKiAxMDI0LTIwNDcgeW91IHdpbGwgZmluZCBMQkEgMC05OTkgd2hpY2ggYXJlCisJCQkgKiByZWFsbHkgTEJBIDEwMDAtMTk5OS4gWWVzLCB0aGlzIHdhc3RlcyAyNAorCQkJICogcGh5c2ljYWwgYmxvY2tzIHBlciB6b25lLiBHbyBmaWd1cmUuIAorCQkJICogVGhlc2UgZGV2aWNlcyBjYW4gaGF2ZSBibG9ja3MgZ28gYmFkLCBzbyB0aGVyZQorCQkJICogYXJlIDI0IHNwYXJlIGJsb2NrcyB0byB1c2Ugd2hlbiBibG9ja3MgZG8gZ28gYmFkLgorCQkJICovCisKKwkJCS8qIFNERFI1NSByZXR1cm5zIDB4ZmZmZiBmb3IgYSBiYWQgYmxvY2ssIGFuZCAweDQwMCBmb3IgdGhlIAorCQkJICogQ0lTIGJsb2NrLiAoSXMgdGhpcyB0cnVlIGZvciBjYXJkcyA4TUIgb3IgbGVzcz8/KQorCQkJICogUmVjb3JkIHRoZXNlIGluIHRoZSBwaHlzaWNhbCB0byBsb2dpY2FsIG1hcAorCQkJICovIAorCisJCWluZm8tPnBiYV90b19sYmFbaV0gPSBsYmE7CisKKwkJaWYgKGxiYSA+PSBtYXhfbGJhKSB7CisJCQljb250aW51ZTsKKwkJfQorCQkKKwkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhICsgem9uZSAqIDEwMDBdICE9IE5PVF9BTExPQ0FURUQgJiYKKwkJICAgICFpbmZvLT5mb3JjZV9yZWFkX29ubHkpIHsKKwkJCXByaW50aygic2RkcjU1OiBtYXAgaW5jb25zaXN0ZW5jeSBhdCBMQkEgJTA0WFxuIiwgbGJhICsgem9uZSAqIDEwMDApOworCQkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMTsKKwkJfQorCisJCWlmIChsYmE8MHgxMCB8fCAobGJhPj0weDNFMCAmJiBsYmE8MHgzRUYpKQorCQkJVVNfREVCVUdQKCJMQkEgJTA0WCA8LT4gUEJBICUwNFhcbiIsIGxiYSwgaSk7CisKKwkJaW5mby0+bGJhX3RvX3BiYVtsYmEgKyB6b25lICogMTAwMF0gPSBpOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc2RkcjU1X2NhcmRfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKSB7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKilleHRyYTsKKworCWlmICghZXh0cmEpCisJCXJldHVybjsKKworCWlmIChpbmZvLT5sYmFfdG9fcGJhKQorCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlpZiAoaW5mby0+cGJhX3RvX2xiYSkKKwkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7Cit9CisKKworLyoKKyAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi01NQorICovCitpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbOF0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworIAkvLyB3cml0ZS1wcm90ZWN0ZWQgZm9yIG5vdywgbm8gYmxvY2sgZGVzY3JpcHRvciBzdXBwb3J0CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbW9kZV9wYWdlXzAxWzIwXSA9IHsKKwkJMHgwLCAweDEyLCAweDAwLCAweDgwLCAweDAsIDB4MCwgMHgwLCAweDAsCisJCTB4MDEsIDB4MEEsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCXVuc2lnbmVkIGludCBsYmE7CisJdW5zaWduZWQgaW50IHBiYTsKKwl1bnNpZ25lZCBpbnQgcGFnZTsKKwl1bnNpZ25lZCBzaG9ydCBwYWdlczsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbzsKKworCWlmICghdXMtPmV4dHJhKSB7CisJCXVzLT5leHRyYSA9IGttYWxsb2MoCisJCQlzaXplb2Yoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8pLCBHRlBfTk9JTyk7CisJCWlmICghdXMtPmV4dHJhKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvKSk7CisJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gc2RkcjU1X2NhcmRfaW5mb19kZXN0cnVjdG9yOworCX0KKworCWluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKikodXMtPmV4dHJhKTsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoIlNERFI1NTogcmVxdWVzdCBzZW5zZSAlMDJ4LyUwMngvJTAyeFxuIiwgaW5mby0+c2Vuc2VfZGF0YVsyXSwgaW5mby0+c2Vuc2VfZGF0YVsxMl0sIGluZm8tPnNlbnNlX2RhdGFbMTNdKTsKKworCQltZW1jcHkgKHB0ciwgaW5mby0+c2Vuc2VfZGF0YSwgc2l6ZW9mIGluZm8tPnNlbnNlX2RhdGEpOworCQlwdHJbMF0gPSAweDcwOworCQlwdHJbN10gPSAxMTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmIChwdHIsIHNpemVvZiBpbmZvLT5zZW5zZV9kYXRhLCBzcmIpOworCQltZW1zZXQgKGluZm8tPnNlbnNlX2RhdGEsIDAsIHNpemVvZiBpbmZvLT5zZW5zZV9kYXRhKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJbWVtc2V0IChpbmZvLT5zZW5zZV9kYXRhLCAwLCBzaXplb2YgaW5mby0+c2Vuc2VfZGF0YSk7CisKKwkvKiBEdW1teSB1cCBhIHJlc3BvbnNlIGZvciBJTlFVSVJZIHNpbmNlIFNERFI1NSBkb2Vzbid0CisJICAgcmVzcG9uZCB0byBJTlFVSVJZIGNvbW1hbmRzICovCisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgOCk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwkvKiBvbmx5IGNoZWNrIGNhcmQgc3RhdHVzIGlmIHRoZSBtYXAgaXNuJ3QgYWxsb2NhdGVkLCBpZSBubyBjYXJkIHNlZW4geWV0CisJICogb3IgaWYgaXQncyBiZWVuIG92ZXIgaGFsZiBhIHNlY29uZCBzaW5jZSB3ZSBsYXN0IGFjY2Vzc2VkIGl0CisJICovCisJaWYgKGluZm8tPmxiYV90b19wYmEgPT0gTlVMTCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGluZm8tPmxhc3RfYWNjZXNzICsgSFovMikpIHsKKworCQkvKiBjaGVjayB0byBzZWUgaWYgYSBjYXJkIGlzIGZpdHRlZCAqLworCQlyZXN1bHQgPSBzZGRyNTVfc3RhdHVzICh1cyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXJlc3VsdCA9IHNkZHI1NV9zdGF0dXMgKHVzKTsKKwkJCWlmICghcmVzdWx0KSB7CisJCQlzZXRfc2Vuc2VfaW5mbyAoNiwgMHgyOCwgMCk7CS8qIG5ldyBtZWRpYSwgc2V0IHVuaXQgYXR0ZW50aW9uLCBub3QgcmVhZHkgdG8gcmVhZHkgKi8KKwkJCX0KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJfQorCisJLyogaWYgd2UgZGV0ZWN0ZWQgYSBwcm9ibGVtIHdpdGggdGhlIG1hcCB3aGVuIHdyaXRpbmcsCisJICAgZG9uJ3QgYWxsb3cgYW55IG1vcmUgYWNjZXNzICovCisJaWYgKGluZm8tPmZhdGFsX2Vycm9yKSB7CisKKwkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MzEsIDApOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKworCQljYXBhY2l0eSA9IHNkZHI1NV9nZXRfY2FwYWNpdHkodXMpOworCisJCWlmICghY2FwYWNpdHkpIHsKKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMwLCAwKTsgLyogaW5jb21wYXRpYmxlIG1lZGl1bSAqLworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKworCQlpbmZvLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworCisJCS8qIGZpZ3VyZSBvdXQgdGhlIG1heGltdW0gbG9naWNhbCBibG9jayBudW1iZXIsIGFsbG93aW5nIGZvcgorCQkgKiB0aGUgZmFjdCB0aGF0IG9ubHkgMjUwIG91dCBvZiBldmVyeSAyNTYgYXJlIHVzZWQgKi8KKwkJaW5mby0+bWF4X2xvZ19ibGtzID0gKChpbmZvLT5jYXBhY2l0eSA+PiAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCkpIC8gMjU2KSAqIDI1MDsKKworCQkvKiBMYXN0IHBhZ2UgaW4gdGhlIGNhcmQsIGFkanVzdCBhcyB3ZSBvbmx5IHVzZSAyNTAgb3V0IG9mCisJCSAqIGV2ZXJ5IDI1NiBwYWdlcyAqLworCQljYXBhY2l0eSA9IChjYXBhY2l0eSAvIDI1NikgKiAyNTA7CisKKwkJY2FwYWNpdHkgLz0gUEFHRVNJWkU7CisJCWNhcGFjaXR5LS07CisKKwkJKChfX2JlMzIgKikgcHRyKVswXSA9IGNwdV90b19iZTMyKGNhcGFjaXR5KTsKKwkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKFBBR0VTSVpFKTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKKworCQlzZGRyNTVfcmVhZF9tYXAodXMpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0VfMTApIHsKKworCQltZW1jcHkocHRyLCBtb2RlX3BhZ2VfMDEsIHNpemVvZiBtb2RlX3BhZ2VfMDEpOworCQlwdHJbM10gPSAoaW5mby0+cmVhZF9vbmx5IHx8IGluZm8tPmZvcmNlX3JlYWRfb25seSkgPyAweDgwIDogMDsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgc2l6ZW9mKG1vZGVfcGFnZV8wMSksIHNyYik7CisKKwkJaWYgKCAoc3JiLT5jbW5kWzJdICYgMHgzRikgPT0gMHgwMSApIHsKKwkJCVVTX0RFQlVHUCgKKwkJCSAgIlNERFI1NTogRHVtbXkgdXAgcmVxdWVzdCBmb3IgbW9kZSBwYWdlIDFcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJCX0gZWxzZSBpZiAoIChzcmItPmNtbmRbMl0gJiAweDNGKSA9PSAweDNGICkgeworCQkJVVNfREVCVUdQKAorCQkJICAiU0REUjU1OiBEdW1teSB1cCByZXF1ZXN0IGZvciBhbGwgbW9kZSBwYWdlc1xuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCX0KKworCQlzZXRfc2Vuc2VfaW5mbyAoNSwgMHgyNCwgMCk7CS8qIGludmFsaWQgZmllbGQgaW4gY29tbWFuZCAqLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IEFMTE9XX01FRElVTV9SRU1PVkFMKSB7CisKKwkJVVNfREVCVUdQKAorCQkgICJTRERSNTU6ICVzIG1lZGl1bSByZW1vdmFsLiBOb3QgdGhhdCBJIGNhbiBkbyIKKwkJICAiIGFueXRoaW5nIGFib3V0IGl0Li4uXG4iLAorCQkgIChzcmItPmNtbmRbNF0mMHgwMykgPyAiUHJldmVudCIgOiAiQWxsb3ciKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTAgfHwgc3JiLT5jbW5kWzBdID09IFdSSVRFXzEwKSB7CisKKwkJcGFnZSA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbMl0pOworCQlwYWdlIDw8PSAxNjsKKwkJcGFnZSB8PSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs1XSwgc3JiLT5jbW5kWzRdKTsKKwkJcGFnZXMgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzddKTsKKworCQlwYWdlIDw8PSBpbmZvLT5zbWFsbHBhZ2VzaGlmdDsKKworCQkvLyBjb252ZXJ0IHBhZ2UgdG8gYmxvY2sgYW5kIHBhZ2Utd2l0aGluLWJsb2NrCisKKwkJbGJhID0gcGFnZSA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCQlwYWdlID0gcGFnZSAmIGluZm8tPmJsb2NrbWFzazsKKworCQkvLyBsb2NhdGUgcGh5c2ljYWwgYmxvY2sgY29ycmVzcG9uZGluZyB0byBsb2dpY2FsIGJsb2NrCisKKwkJaWYgKGxiYSA+PSBpbmZvLT5tYXhfbG9nX2Jsa3MpIHsKKworCQkJVVNfREVCVUdQKCJFcnJvcjogUmVxdWVzdGVkIExCQSAlMDRYIGV4Y2VlZHMgbWF4aW11bSAiCisJCQkgICJibG9jayAlMDRYXG4iLCBsYmEsIGluZm8tPm1heF9sb2dfYmxrcy0xKTsKKworCQkJc2V0X3NlbnNlX2luZm8gKDUsIDB4MjQsIDApOwkvKiBpbnZhbGlkIGZpZWxkIGluIGNvbW1hbmQgKi8KKworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKworCQlwYmEgPSBpbmZvLT5sYmFfdG9fcGJhW2xiYV07CisKKwkJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQkJVVNfREVCVUdQKCJXUklURV8xMDogd3JpdGUgYmxvY2sgJTA0WCAoTEJBICUwNFgpIHBhZ2UgJTAxWCIKKwkJCQkiIHBhZ2VzICVkXG4iLAorCQkJCXBiYSwgbGJhLCBwYWdlLCBwYWdlcyk7CisKKwkJCXJldHVybiBzZGRyNTVfd3JpdGVfZGF0YSh1cywgbGJhLCBwYWdlLCBwYWdlcyk7CisJCX0gZWxzZSB7CisJCQlVU19ERUJVR1AoIlJFQURfMTA6IHJlYWQgYmxvY2sgJTA0WCAoTEJBICUwNFgpIHBhZ2UgJTAxWCIKKwkJCQkiIHBhZ2VzICVkXG4iLAorCQkJCXBiYSwgbGJhLCBwYWdlLCBwYWdlcyk7CisKKwkJCXJldHVybiBzZGRyNTVfcmVhZF9kYXRhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzKTsKKwkJfQorCX0KKworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gU1RBUlRfU1RPUCkgeworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJc2V0X3NlbnNlX2luZm8gKDUsIDB4MjAsIDApOwkvKiBpbGxlZ2FsIGNvbW1hbmQgKi8KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOyAvLyBGSVhNRTogc2Vuc2UgYnVmZmVyPworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApAQCAtMCwwICsxLDM0IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6JAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMiBTaW1vbiBNdW50b24KKyAqCisgKiBTZWUgc2RkcjU1LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9VU0JfU0hVVFRMRV9FVVNCX1NERFI1NV9ICisjZGVmaW5lIF9VU0JfU0hVVFRMRV9FVVNCX1NERFI1NV9ICisKKy8qIFNhbmRpc2sgU0REUi01NSBzdHVmZiAqLworCitleHRlcm4gaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIGludCBzZGRyNTVfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZmYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpAQCAtMCwwICsxLDE3MTIgQEAKKy8qIERyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyBVU0ItQVRBUEkgY2FibGUKKyAqCisgKiAkSWQ6IHNodXR0bGVfdXNiYXQuYyx2IDEuMTcgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAsIDIwMDEgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQHN0YXJiYW5kLm5ldCkKKyAqICAgKGMpIDIwMDQsIDIwMDUgRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4KKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogRmxhc2ggc3VwcG9ydCBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnk6CisgKiAgIChjKSAyMDAyIFRob21hcyBLcmVpbGluZyA8dXNiZGV2QHNtMDQuZGU+CisgKgorICogTWFueSBvcmlnaW5hbGx5IEFUQVBJIGRldmljZXMgd2VyZSBzbGlnaHRseSBtb2RpZmllZCB0byBtZWV0IHRoZSBVU0IKKyAqIG1hcmtldCBieSB1c2luZyBzb21lIGtpbmQgb2YgdHJhbnNsYXRpb24gZnJvbSBBVEFQSSB0byBVU0Igb24gdGhlIGhvc3QsCisgKiBhbmQgdGhlIHBlcmlwaGVyYWwgd291bGQgdHJhbnNsYXRlIGZyb20gVVNCIGJhY2sgdG8gQVRBUEkuCisgKgorICogU0NNIE1pY3Jvc3lzdGVtcyAod3d3LnNjbW1pY3JvLmNvbSkgbWFrZXMgYSBkZXZpY2UsIHNvbGQgdG8gT0VNJ3Mgb25seSwgCisgKiB3aGljaCBkb2VzIHRoZSBVU0ItdG8tQVRBUEkgY29udmVyc2lvbi4gIEJ5IG9idGFpbmluZyB0aGUgZGF0YSBzaGVldCBvbgorICogdGhlaXIgZGV2aWNlIHVuZGVyIG5vbmRpc2Nsb3N1cmUgYWdyZWVtZW50LCBJIGhhdmUgYmVlbiBhYmxlIHRvIHdyaXRlCisgKiB0aGlzIGRyaXZlciBmb3IgTGludXguCisgKgorICogVGhlIGNoaXAgdXNlZCBpbiB0aGUgZGV2aWNlIGNhbiBhbHNvIGJlIHVzZWQgZm9yIEVQUCBhbmQgSVNBIHRyYW5zbGF0aW9uCisgKiBhcyB3ZWxsLiBUaGlzIGRyaXZlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoZSBBVEFQSQorICogdHJhbnNsYXRpb24uCisgKgorICogU2VlIHRoZSBLY29uZmlnIGhlbHAgdGV4dCBmb3IgYSBsaXN0IG9mIGRldmljZXMga25vd24gdG8gYmUgc3VwcG9ydGVkIGJ5CisgKiB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisKKyNkZWZpbmUgc2hvcnRfcGFjayhMU0IsTVNCKSAoICgodTE2KShMU0IpKSB8ICggKCh1MTYpKE1TQikpPDw4ICkgKQorI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQorI2RlZmluZSBNU0Jfb2YocykgKChzKT4+OCkKKworc3RhdGljIGludCB0cmFuc2ZlcnJlZCA9IDA7CisKK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBUEkgcmVhZC93cml0ZSBzZWN0b3JzIGNvbW1hbmQKKyAqIFVzZSBjbWQ9MHgyMCBmb3IgcmVhZCwgY21kPTB4MzAgZm9yIHdyaXRlCisgKi8KK3N0YXRpYyB2b2lkIHVzYmF0X3BhY2tfYXRhcGlfc2VjdG9yX2NtZCh1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJCXVuc2lnbmVkIGNoYXIgdGhpc3RpbWUsCisJCQkJCXUzMiBzZWN0b3IsIHVuc2lnbmVkIGNoYXIgY21kKQoreworCWJ1ZlswXSA9IDA7CisJYnVmWzFdID0gdGhpc3RpbWU7CisJYnVmWzJdID0gc2VjdG9yICYgMHhGRjsKKwlidWZbM10gPSAoc2VjdG9yID4+ICA4KSAmIDB4RkY7CisJYnVmWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCWJ1Zls1XSA9IDB4RTAgfCAoKHNlY3RvciA+PiAyNCkgJiAweDBGKTsKKwlidWZbNl0gPSBjbWQ7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBnZXQgdGhlIGRldmljZSB0eXBlIChmbGFzaCBvciBocDgyMDApCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZ2V0X2RldmljZV90eXBlKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgdXNiYXRfaW5mbyopdXMtPmV4dHJhKS0+ZGV2aWNldHlwZTsKK30KKworLyoKKyAqIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIGludCB1c2JhdF9yZWFkKHN0cnVjdCB1c19kYXRhICp1cywKKwkJICAgICAgdW5zaWduZWQgY2hhciBhY2Nlc3MsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50KQoreworCXJldHVybiB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLAorCQl1cy0+cmVjdl9jdHJsX3BpcGUsCisJCWFjY2VzcyB8IFVTQkFUX0NNRF9SRUFEX1JFRywKKwkJMHhDMCwKKwkJKHUxNilyZWcsCisJCTAsCisJCWNvbnRlbnQsCisJCTEpOworfQorCisvKgorICogV3JpdGUgdG8gYSByZWdpc3RlciBvbiB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfd3JpdGUoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgICAgICAgdW5zaWduZWQgY2hhciBhY2Nlc3MsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgY29udGVudCkKK3sKKwlyZXR1cm4gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywKKwkJdXMtPnNlbmRfY3RybF9waXBlLAorCQlhY2Nlc3MgfCBVU0JBVF9DTURfV1JJVEVfUkVHLAorCQkweDQwLAorCQlzaG9ydF9wYWNrKHJlZywgY29udGVudCksCisJCTAsCisJCU5VTEwsCisJCTApOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIGJ1bGsgcmVhZAorICovCitzdGF0aWMgaW50IHVzYmF0X2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJ1c2JhdF9idWxrX3JlYWQ6IGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLCBkYXRhLCBsZW4sIE5VTEwpOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIGJ1bGsgd3JpdGUKKyAqLworc3RhdGljIGludCB1c2JhdF9idWxrX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQkJCXVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJ1c2JhdF9idWxrX3dyaXRlOiAgbGVuID0gJWRcbiIsIGxlbik7CisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+c2VuZF9idWxrX3BpcGUsIGRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKy8qCisgKiBTb21lIFVTQkFULXNwZWNpZmljIGNvbW1hbmRzIGNhbiBvbmx5IGJlIGV4ZWN1dGVkIG92ZXIgYSBjb21tYW5kIHRyYW5zcG9ydAorICogVGhpcyB0cmFuc3BvcnQgYWxsb3dzIG9uZSAobGVuPTgpIG9yIHR3byAobGVuPTE2KSB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMKKyAqIHRvIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgaW50IHVzYmF0X2V4ZWN1dGVfY29tbWFuZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJCSB1bnNpZ25lZCBjaGFyICpjb21tYW5kcywKKwkJCQkJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCQkJCQkJICBVU0JBVF9DTURfRVhFQ19DTUQsIDB4NDAsIDAsIDAsCisJCQkJCQkJCSAgY29tbWFuZHMsIGxlbik7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF9nZXRfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqc3RhdHVzKQoreworCWludCByYzsKKwlyYyA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX1NUQVRVUywgc3RhdHVzKTsKKworCVVTX0RFQlVHUCgidXNiYXRfZ2V0X3N0YXR1czogMHglMDJYXG4iLCAodW5zaWduZWQgc2hvcnQpICgqc3RhdHVzKSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2hlY2sgdGhlIGRldmljZSBzdGF0dXMKKyAqLworc3RhdGljIGludCB1c2JhdF9jaGVja19zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXVuc2lnbmVkIGNoYXIgKnJlcGx5ID0gdXMtPmlvYnVmOworCWludCByYzsKKworCWlmICghdXMpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyYyA9IHVzYmF0X2dldF9zdGF0dXModXMsIHJlcGx5KTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCWlmICgqcmVwbHkgJiAweDAxICYmICpyZXBseSAhPSAweDUxKSAvLyBlcnJvci9jaGVjayBjb25kaXRpb24gKDB4NTEgaXMgb2spCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCisJaWYgKCpyZXBseSAmIDB4MjApIC8vIGRldmljZSBmYXVsdAorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFN0b3JlcyBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbiBpbnRlcm5hbCByZWdpc3RlcnMgaW4gcHJlcGFydGlvbiBmb3IgdGhlIGV4ZWN1dGlvbgorICogb2YgYSBjb25kaXRpb25hbCB1c2JhdF9yZWFkX2Jsb2NrcyBvciB1c2JhdF93cml0ZV9ibG9ja3MgY2FsbC4KKyAqLworc3RhdGljIGludCB1c2JhdF9zZXRfc2h1dHRsZV9mZWF0dXJlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBleHRlcm5hbF90cmlnZ2VyLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZXBwX2NvbnRyb2wsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBtYXNrX2J5dGUsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciB0ZXN0X3BhdHRlcm4sCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBzdWJjb3VudEgsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBzdWJjb3VudEwpCit7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCWNvbW1hbmRbMF0gPSAweDQwOworCWNvbW1hbmRbMV0gPSBVU0JBVF9DTURfU0VUX0ZFQVQ7CisKKwkvLyBUaGUgb25seSBiaXQgcmVsZXZhbnQgdG8gQVRBIGFjY2VzcyBpcyBiaXQgNgorCS8vIHdoaWNoIGRlZmluZXMgOCBiaXQgZGF0YSBhY2Nlc3MgKHNldCkgb3IgMTYgYml0ICh1bnNldCkKKwljb21tYW5kWzJdID0gZXBwX2NvbnRyb2w7CisKKwkvLyBJZiBGQ1EgaXMgc2V0IGluIHRoZSBxdWFsaWZpZXIgKGRlZmluZWQgaW4gUi9XIGNtZCksIHRoZW4gYml0cyBVMCwgVTEsCisJLy8gRVQxIGFuZCBFVDIgZGVmaW5lIGFuIGV4dGVybmFsIGV2ZW50IHRvIGJlIGNoZWNrZWQgZm9yIG9uIGV2ZW50IG9mIGEKKwkvLyBfcmVhZF9ibG9ja3Mgb3IgX3dyaXRlX2Jsb2NrcyBvcGVyYXRpb24uIFRoZSByZWFkL3dyaXRlIHdpbGwgbm90IHRha2UKKwkvLyBwbGFjZSB1bmxlc3MgdGhlIGRlZmluZWQgdHJpZ2dlciBzaWduYWwgaXMgYWN0aXZlLgorCWNvbW1hbmRbM10gPSBleHRlcm5hbF90cmlnZ2VyOworCisJLy8gVGhlIHJlc3VsdGFudCBieXRlIG9mIHRoZSBtYXNrIG9wZXJhdGlvbiAoc2VlIG1hc2tfYnl0ZSkgaXMgY29tcGFyZWQgZm9yCisJLy8gZXF1aXZhbGVuY2Ugd2l0aCB0aGlzIHRlc3QgcGF0dGVybi4gSWYgZXF1YWwsIHRoZSByZWFkL3dyaXRlIHdpbGwgdGFrZQorCS8vIHBsYWNlLgorCWNvbW1hbmRbNF0gPSB0ZXN0X3BhdHRlcm47CisKKwkvLyBUaGlzIHZhbHVlIGlzIGxvZ2ljYWxseSBBTkRlZCB3aXRoIHRoZSBzdGF0dXMgcmVnaXN0ZXIgZmllbGQgc3BlY2lmaWVkCisJLy8gaW4gdGhlIHJlYWQvd3JpdGUgY29tbWFuZC4KKwljb21tYW5kWzVdID0gbWFza19ieXRlOworCisJLy8gSWYgQUxRIGlzIHNldCBpbiB0aGUgcXVhbGlmaWVyLCB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZQorCS8vIHJlZ2lzdGVycyB3aGVyZSB0aGUgYnl0ZSBjb3VudCBzaG91bGQgYmUgcmVhZCBmb3IgdHJhbnNmZXJyaW5nIHRoZSBkYXRhLgorCS8vIElmIEFMUSBpcyBub3Qgc2V0LCB0aGVuIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZQorCS8vIHRyYW5zZmVycmVkLgorCWNvbW1hbmRbNl0gPSBzdWJjb3VudEw7CisJY29tbWFuZFs3XSA9IHN1YmNvdW50SDsKKworCXJldHVybiB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOworfQorCisvKgorICogQmxvY2ssIHdhaXRpbmcgZm9yIGFuIEFUQSBkZXZpY2UgdG8gYmVjb21lIG5vdCBidXN5IG9yIHRvIHJlcG9ydAorICogYW4gZXJyb3IgY29uZGl0aW9uLgorICovCitzdGF0aWMgaW50IHVzYmF0X3dhaXRfbm90X2J1c3koc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgbWludXRlcykKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKworCS8qIFN5bmNocm9uaXppbmcgY2FjaGUgb24gYSBDRFIgY291bGQgdGFrZSBhIGhlY2sgb2YgYSBsb25nIHRpbWUsCisJICogYnV0IHByb2JhYmx5IG5vdCBtb3JlIHRoYW4gMTAgbWludXRlcyBvciBzby4gT24gdGhlIG90aGVyIGhhbmQsCisJICogZG9pbmcgYSBmdWxsIGJsYW5rIG9uIGEgQ0RSVyBhdCBzcGVlZCAxIHdpbGwgdGFrZSBhYm91dCA3NQorCSAqIG1pbnV0ZXMhCisJICovCisKKwlmb3IgKGk9MDsgaTwxMjAwK21pbnV0ZXMqNjA7IGkrKykgeworCisgCQlyZXN1bHQgPSB1c2JhdF9nZXRfc3RhdHVzKHVzLCBzdGF0dXMpOworCisJCWlmIChyZXN1bHQhPVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWlmICgqc3RhdHVzICYgMHgwMSkgeyAvLyBjaGVjayBjb25kaXRpb24KKwkJCXJlc3VsdCA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgMHgxMCwgc3RhdHVzKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJCWlmICgqc3RhdHVzICYgMHgyMCkgLy8gZGV2aWNlIGZhdWx0CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCQlpZiAoKCpzdGF0dXMgJiAweDgwKT09MHgwMCkgeyAvLyBub3QgYnVzeQorCQkJVVNfREVCVUdQKCJXYWl0ZWQgbm90IGJ1c3kgZm9yICVkIHN0ZXBzXG4iLCBpKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJfQorCisJCWlmIChpPDUwMCkKKwkJCW1zbGVlcCgxMCk7IC8vIDUgc2Vjb25kcworCQllbHNlIGlmIChpPDcwMCkKKwkJCW1zbGVlcCg1MCk7IC8vIDEwIHNlY29uZHMKKwkJZWxzZSBpZiAoaTwxMjAwKQorCQkJbXNsZWVwKDEwMCk7IC8vIDUwIHNlY29uZHMKKwkJZWxzZQorCQkJbXNsZWVwKDEwMDApOyAvLyBYIG1pbnV0ZXMKKwl9CisKKwlVU19ERUJVR1AoIldhaXRlZCBub3QgYnVzeSBmb3IgJWQgbWludXRlcywgdGltaW5nIG91dC5cbiIsCisJCW1pbnV0ZXMpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworfQorCisvKgorICogUmVhZCBibG9jayBkYXRhIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQkJICAgIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJY29tbWFuZFswXSA9IDB4QzA7CisJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9SRUFEX0JMT0NLOworCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKKwljb21tYW5kWzNdID0gMDsKKwljb21tYW5kWzRdID0gMDsKKwljb21tYW5kWzVdID0gMDsKKwljb21tYW5kWzZdID0gTFNCX29mKGxlbik7CisJY29tbWFuZFs3XSA9IE1TQl9vZihsZW4pOworCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJlc3VsdCA9IHVzYmF0X2J1bGtfcmVhZCh1cywgY29udGVudCwgbGVuKTsKKwlyZXR1cm4gKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0dPT0QgPworCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpOworfQorCisvKgorICogV3JpdGUgYmxvY2sgZGF0YSB2aWEgdGhlIGRhdGEgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgYWNjZXNzLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkgICAgIGludCBtaW51dGVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCWlmICghbGVuKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKwljb21tYW5kWzBdID0gMHg0MDsKKwljb21tYW5kWzFdID0gYWNjZXNzIHwgVVNCQVRfQ01EX1dSSVRFX0JMT0NLOworCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKKwljb21tYW5kWzNdID0gMDsKKwljb21tYW5kWzRdID0gMDsKKwljb21tYW5kWzVdID0gMDsKKwljb21tYW5kWzZdID0gTFNCX29mKGxlbik7CisJY29tbWFuZFs3XSA9IE1TQl9vZihsZW4pOworCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVzdWx0ID0gdXNiYXRfYnVsa193cml0ZSh1cywgY29udGVudCwgbGVuKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJldHVybiB1c2JhdF93YWl0X25vdF9idXN5KHVzLCBtaW51dGVzKTsKK30KKworLyoKKyAqIFByb2Nlc3MgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMKKyAqLworc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3J3X2Jsb2NrX3Rlc3Qoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGFjY2VzcywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVnaXN0ZXJzLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhX291dCwKKwkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbnVtX3JlZ2lzdGVycywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciBkYXRhX3JlZywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciBzdGF0dXNfcmVnLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHRpbWVvdXQsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcXVhbGlmaWVyLAorCQkJCSAgICAgICBpbnQgZGlyZWN0aW9uLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJICAgICAgIGludCB1c2Vfc2csCisJCQkJICAgICAgIGludCBtaW51dGVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHBpcGUgPSAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgPworCQkJdXMtPnJlY3ZfYnVsa19waXBlIDogdXMtPnNlbmRfYnVsa19waXBlOworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwlpbnQgaSwgajsKKwlpbnQgY21kbGVuOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCisJQlVHX09OKG51bV9yZWdpc3RlcnMgPiBVU19JT0JVRl9TSVpFLzIpOworCisJZm9yIChpPTA7IGk8MjA7IGkrKykgeworCisJCS8qCisJCSAqIFRoZSBmaXJzdCB0aW1lIHdlIHNlbmQgdGhlIGZ1bGwgY29tbWFuZCwgd2hpY2ggY29uc2lzdHMKKwkJICogb2YgZG93bmxvYWRpbmcgdGhlIFNDU0kgY29tbWFuZCBmb2xsb3dlZCBieSBkb3dubG9hZGluZworCQkgKiB0aGUgZGF0YSB2aWEgYSB3cml0ZS1hbmQtdGVzdC4gIEFueSBvdGhlciB0aW1lIHdlIG9ubHkKKwkJICogc2VuZCB0aGUgY29tbWFuZCB0byBkb3dubG9hZCB0aGUgZGF0YSAtLSB0aGUgU0NTSSBjb21tYW5kCisJCSAqIGlzIHN0aWxsICdhY3RpdmUnIGluIHNvbWUgc2Vuc2UgaW4gdGhlIGRldmljZS4KKwkJICogCisJCSAqIFdlJ3JlIG9ubHkgZ29pbmcgdG8gdHJ5IHNlbmRpbmcgdGhlIGRhdGEgMTAgdGltZXMuIEFmdGVyCisJCSAqIHRoYXQsIHdlIGp1c3QgcmV0dXJuIGEgZmFpbHVyZS4KKwkJICovCisKKwkJaWYgKGk9PTApIHsKKwkJCWNtZGxlbiA9IDE2OworCQkJLy8gV3JpdGUgdG8gbXVsdGlwbGUgcmVnaXN0ZXJzCisJCQkvLyBOb3QgcmVhbGx5IHN1cmUgdGhlIDB4MDcsIDB4MTcsIDB4ZmMsIDB4ZTcgaXMgbmVjZXNzYXJ5IGhlcmUsCisJCQkvLyBidXQgdGhhdCdzIHdoYXQgY2FtZSBvdXQgb2YgdGhlIHRyYWNlIGV2ZXJ5IHNpbmdsZSB0aW1lLgorCQkJY29tbWFuZFswXSA9IDB4NDA7CisJCQljb21tYW5kWzFdID0gYWNjZXNzIHwgVVNCQVRfQ01EX1dSSVRFX1JFR1M7CisJCQljb21tYW5kWzJdID0gMHgwNzsKKwkJCWNvbW1hbmRbM10gPSAweDE3OworCQkJY29tbWFuZFs0XSA9IDB4RkM7CisJCQljb21tYW5kWzVdID0gMHhFNzsKKwkJCWNvbW1hbmRbNl0gPSBMU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKwkJCWNvbW1hbmRbN10gPSBNU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKwkJfSBlbHNlCisJCQljbWRsZW4gPSA4OworCisJCS8vIENvbmRpdGlvbmFsbHkgcmVhZCBvciB3cml0ZSBibG9ja3MKKwkJY29tbWFuZFtjbWRsZW4tOF0gPSAoZGlyZWN0aW9uPT1ETUFfVE9fREVWSUNFID8gMHg0MCA6IDB4QzApOworCQljb21tYW5kW2NtZGxlbi03XSA9IGFjY2VzcyB8CisJCQkJKGRpcmVjdGlvbj09RE1BX1RPX0RFVklDRSA/CisJCQkJIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLIDogVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSyk7CisJCWNvbW1hbmRbY21kbGVuLTZdID0gZGF0YV9yZWc7CisJCWNvbW1hbmRbY21kbGVuLTVdID0gc3RhdHVzX3JlZzsKKwkJY29tbWFuZFtjbWRsZW4tNF0gPSB0aW1lb3V0OworCQljb21tYW5kW2NtZGxlbi0zXSA9IHF1YWxpZmllcjsKKwkJY29tbWFuZFtjbWRsZW4tMl0gPSBMU0Jfb2YobGVuKTsKKwkJY29tbWFuZFtjbWRsZW4tMV0gPSBNU0Jfb2YobGVuKTsKKworCQlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIGNtZGxlbik7CisKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmIChpPT0wKSB7CisKKwkJCWZvciAoaj0wOyBqPG51bV9yZWdpc3RlcnM7IGorKykgeworCQkJCWRhdGFbajw8MV0gPSByZWdpc3RlcnNbal07CisJCQkJZGF0YVsxKyhqPDwxKV0gPSBkYXRhX291dFtqXTsKKwkJCX0KKworCQkJcmVzdWx0ID0gdXNiYXRfYnVsa193cml0ZSh1cywgZGF0YSwgbnVtX3JlZ2lzdGVycyoyKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJfQorCisKKwkJLy9VU19ERUJVR1AoIlRyYW5zZmVyICVzICVkIGJ5dGVzLCBzZyBidWZmZXJzICVkXG4iLAorCQkvLwlkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSA/ICJvdXQiIDogImluIiwKKwkJLy8JbGVuLCB1c2Vfc2cpOworCisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsCisJCQlwaXBlLCBjb250ZW50LCBsZW4sIHVzZV9zZywgTlVMTCk7CisKKwkJLyoKKwkJICogSWYgd2UgZ2V0IGEgc3RhbGwgb24gdGhlIGJ1bGsgZG93bmxvYWQsIHdlJ2xsIHJldHJ5CisJCSAqIHRoZSBidWxrIGRvd25sb2FkIC0tIGJ1dCBub3QgdGhlIFNDU0kgY29tbWFuZCBiZWNhdXNlCisJCSAqIGluIHNvbWUgc2Vuc2UgdGhlIFNDU0kgY29tbWFuZCBpcyBzdGlsbCAnYWN0aXZlJyBhbmQKKwkJICogd2FpdGluZyBmb3IgdGhlIGRhdGEuIERvbid0IGFzayBtZSB3aHkgdGhpcyBzaG91bGQgYmU7CisJCSAqIEknbSBvbmx5IGZvbGxvd2luZyB3aGF0IHRoZSBXaW5kb3plIGRyaXZlciBkaWQuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBhIHN0YWxsIGZvciB0aGUgdGVzdC1hbmQtcmVhZC93cml0ZSBjb21tYW5kIG1lYW5zCisJCSAqIHRoYXQgdGhlIHRlc3QgZmFpbGVkLiBJbiB0aGlzIGNhc2Ugd2UncmUgdGVzdGluZyB0byBtYWtlCisJCSAqIHN1cmUgdGhhdCB0aGUgZGV2aWNlIGlzIGVycm9yLWZyZWUKKwkJICogKGkuZS4gYml0IDAgLS0gQ0hLIC0tIG9mIHN0YXR1cyBpcyAwKS4gVGhlIG1vc3QgbGlrZWx5CisJCSAqIGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgVVNCQVQgY2hpcCBzb21laG93IGtub3dzIHdoYXQKKwkJICogdGhlIGRldmljZSB3aWxsIGFjY2VwdCwgYnV0IGRvZXNuJ3QgZ2l2ZSB0aGUgZGV2aWNlIGFueQorCQkgKiBkYXRhIHVudGlsIGFsbCBkYXRhIGlzIHJlY2VpdmVkLiBUaHVzLCB0aGUgZGV2aWNlIHdvdWxkCisJCSAqIHN0aWxsIGJlIHdhaXRpbmcgZm9yIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgaWYgYSBzdGFsbAorCQkgKiBvY2N1cnMsIGV2ZW4gaWYgdGhlIHN0YWxsIGltcGxpZXMgdGhhdCBzb21lIGRhdGEgd2FzCisJCSAqIHRyYW5zZmVycmVkLgorCQkgKi8KKworCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU0hPUlQgfHwKKwkJCQlyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKSB7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSdyZSByZWFkaW5nIGFuZCB3ZSBzdGFsbGVkLCB0aGVuIGNsZWFyCisJCQkgKiB0aGUgYnVsayBvdXRwdXQgcGlwZSBvbmx5IHRoZSBmaXJzdCB0aW1lLgorCQkJICovCisKKwkJCWlmIChkaXJlY3Rpb249PURNQV9GUk9NX0RFVklDRSAmJiBpPT0wKSB7CisJCQkJaWYgKHVzYl9zdG9yX2NsZWFyX2hhbHQodXMsCisJCQkJCQl1cy0+c2VuZF9idWxrX3BpcGUpIDwgMCkKKwkJCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFJlYWQgc3RhdHVzOiBpcyB0aGUgZGV2aWNlIGFuZ3J5LCBvciBqdXN0IGJ1c3k/CisJCQkgKi8KKworIAkJCXJlc3VsdCA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgCisJCQkJZGlyZWN0aW9uPT1ETUFfVE9fREVWSUNFID8KKwkJCQkJVVNCQVRfQVRBX1NUQVRVUyA6IFVTQkFUX0FUQV9BTFRTVEFUVVMsCisJCQkJc3RhdHVzKTsKKworCQkJaWYgKHJlc3VsdCE9VVNCX1NUT1JfWEZFUl9HT09EKQorCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQlpZiAoKnN0YXR1cyAmIDB4MDEpIC8vIGNoZWNrIGNvbmRpdGlvbgorCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJaWYgKCpzdGF0dXMgJiAweDIwKSAvLyBkZXZpY2UgZmF1bHQKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCQkJVVNfREVCVUdQKCJSZWRvaW5nICVzXG4iLAorCQkJICBkaXJlY3Rpb249PURNQV9UT19ERVZJQ0UgPyAid3JpdGUiIDogInJlYWQiKTsKKworCQl9IGVsc2UgaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQllbHNlCisJCQlyZXR1cm4gdXNiYXRfd2FpdF9ub3RfYnVzeSh1cywgbWludXRlcyk7CisKKwl9CisKKwlVU19ERUJVR1AoIkJ1bW1lciEgJXMgYnVsayBkYXRhIDIwIHRpbWVzIGZhaWxlZC5cbiIsCisJCWRpcmVjdGlvbj09RE1BX1RPX0RFVklDRSA/ICJXcml0aW5nIiA6ICJSZWFkaW5nIik7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKworLyoKKyAqIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVyczoKKyAqIEFsbG93cyB1cyB0byB3cml0ZSBzcGVjaWZpYyBkYXRhIHRvIGFueSByZWdpc3RlcnMuIFRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIGdldHMgcGFja2VkIGluIHRoaXMgc2VxdWVuY2U6IHJlZzAsIGRhdGEwLCByZWcxLCBkYXRhMSwgLi4uLCByZWdOLCBkYXRhTgorICogd2hpY2ggZ2V0cyBzZW50IHRocm91Z2ggYnVsayBvdXQuCisgKiBOb3QgZGVzaWduZWQgZm9yIGxhcmdlIHRyYW5zZmVycyBvZiBkYXRhIQorICovCitzdGF0aWMgaW50IHVzYmF0X211bHRpcGxlX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQl1bnNpZ25lZCBjaGFyICpyZWdpc3RlcnMsCisJCQkJdW5zaWduZWQgY2hhciAqZGF0YV9vdXQsCisJCQkJdW5zaWduZWQgc2hvcnQgbnVtX3JlZ2lzdGVycykKK3sKKwlpbnQgaSwgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCUJVR19PTihudW1fcmVnaXN0ZXJzID4gVVNfSU9CVUZfU0laRS8yKTsKKworCS8vIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVycywgQVRBIGFjY2VzcworCWNvbW1hbmRbMF0gPSAweDQwOworCWNvbW1hbmRbMV0gPSBVU0JBVF9BVEEgfCBVU0JBVF9DTURfV1JJVEVfUkVHUzsKKworCS8vIE5vIHJlbGV2YW5jZQorCWNvbW1hbmRbMl0gPSAwOworCWNvbW1hbmRbM10gPSAwOworCWNvbW1hbmRbNF0gPSAwOworCWNvbW1hbmRbNV0gPSAwOworCisJLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIChpbmNsLiBhZGRyZXNzZXMgYW5kIGRhdGEpCisJY29tbWFuZFs2XSA9IExTQl9vZihudW1fcmVnaXN0ZXJzKjIpOworCWNvbW1hbmRbN10gPSBNU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKworCS8vIFRoZSBzZXR1cCBjb21tYW5kCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIENyZWF0ZSB0aGUgcmVnL2RhdGEsIHJlZy9kYXRhIHNlcXVlbmNlCisJZm9yIChpPTA7IGk8bnVtX3JlZ2lzdGVyczsgaSsrKSB7CisJCWRhdGFbaTw8MV0gPSByZWdpc3RlcnNbaV07CisJCWRhdGFbMSsoaTw8MSldID0gZGF0YV9vdXRbaV07CisJfQorCisJLy8gU2VuZCB0aGUgZGF0YQorCXJlc3VsdCA9IHVzYmF0X2J1bGtfd3JpdGUodXMsIGRhdGEsIG51bV9yZWdpc3RlcnMqMik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAodXNiYXRfZ2V0X2RldmljZV90eXBlKHVzKSA9PSBVU0JBVF9ERVZfSFA4MjAwKQorCQlyZXR1cm4gdXNiYXRfd2FpdF9ub3RfYnVzeSh1cywgMCk7CisJZWxzZQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBDb25kaXRpb25hbGx5IHJlYWQgYmxvY2tzIGZyb20gZGV2aWNlOgorICogQWxsb3dzIHVzIHRvIHJlYWQgYmxvY2tzIGZyb20gYSBzcGVjaWZpYyBkYXRhIHJlZ2lzdGVyLCBiYXNlZCB1cG9uIHRoZQorICogY29uZGl0aW9uIHRoYXQgYSBzdGF0dXMgcmVnaXN0ZXIgY2FuIGJlIHN1Y2Nlc3NmdWxseSBtYXNrZWQgd2l0aCBhIHN0YXR1cworICogcXVhbGlmaWVyLiBJZiB0aGlzIGNvbmRpdGlvbiBpcyBub3QgaW5pdGlhbGx5IG1ldCwgdGhlIHJlYWQgd2lsbCB3YWl0CisgKiB1cCB1bnRpbCBhIG1heGltdW0gYW1vdW50IG9mIHRpbWUgaGFzIGVsYXBzZWQsIGFzIHNwZWNpZmllZCBieSB0aW1lb3V0LgorICogVGhlIHJlYWQgd2lsbCBzdGFydCB3aGVuIHRoZSBjb25kaXRpb24gaXMgbWV0LCBvdGhlcndpc2UgdGhlIGNvbW1hbmQgYWJvcnRzLgorICoKKyAqIFRoZSBxdWFsaWZpZXIgZGVmaW5lZCBoZXJlIGlzIG5vdCB0aGUgdmFsdWUgdGhhdCBpcyBtYXNrZWQsIGl0IGRlZmluZXMKKyAqIGNvbmRpdGlvbnMgZm9yIHRoZSB3cml0ZSB0byB0YWtlIHBsYWNlLiBUaGUgYWN0dWFsIG1hc2tlZCBxdWFsaWZpZXIgKGFuZAorICogb3RoZXIgcmVsYXRlZCBkZXRhaWxzKSBhcmUgZGVmaW5lZCBiZWZvcmVoYW5kIHdpdGggX3NldF9zaHV0dGxlX2ZlYXR1cmVzKCkuCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfcmVhZF9ibG9ja3Moc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCQkJIGludCBsZW4pCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCisJY29tbWFuZFswXSA9IDB4QzA7CisJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0s7CisJY29tbWFuZFsyXSA9IFVTQkFUX0FUQV9EQVRBOworCWNvbW1hbmRbM10gPSBVU0JBVF9BVEFfU1RBVFVTOworCWNvbW1hbmRbNF0gPSAweEZEOyAvLyBUaW1lb3V0IChtcyk7CisJY29tbWFuZFs1XSA9IFVTQkFUX1FVQUxfRkNROworCWNvbW1hbmRbNl0gPSBMU0Jfb2YobGVuKTsKKwljb21tYW5kWzddID0gTVNCX29mKGxlbik7CisKKwkvLyBNdWx0aXBsZSBibG9jayByZWFkIHNldHVwIGNvbW1hbmQKKwlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkKKwkvLyBSZWFkIHRoZSBibG9ja3Mgd2UganVzdCBhc2tlZCBmb3IKKwlyZXN1bHQgPSB1c2JhdF9idWxrX3JlYWQodXMsIGJ1ZmZlciwgbGVuKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBDb25kaXRpb25hbGx5IHdyaXRlIGJsb2NrcyB0byBkZXZpY2U6CisgKiBBbGxvd3MgdXMgdG8gd3JpdGUgYmxvY2tzIHRvIGEgc3BlY2lmaWMgZGF0YSByZWdpc3RlciwgYmFzZWQgdXBvbiB0aGUKKyAqIGNvbmRpdGlvbiB0aGF0IGEgc3RhdHVzIHJlZ2lzdGVyIGNhbiBiZSBzdWNjZXNzZnVsbHkgbWFza2VkIHdpdGggYSBzdGF0dXMKKyAqIHF1YWxpZmllci4gSWYgdGhpcyBjb25kaXRpb24gaXMgbm90IGluaXRpYWxseSBtZXQsIHRoZSB3cml0ZSB3aWxsIHdhaXQKKyAqIHVwIHVudGlsIGEgbWF4aW11bSBhbW91bnQgb2YgdGltZSBoYXMgZWxhcHNlZCwgYXMgc3BlY2lmaWVkIGJ5IHRpbWVvdXQuCisgKiBUaGUgcmVhZCB3aWxsIHN0YXJ0IHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBtZXQsIG90aGVyd2lzZSB0aGUgY29tbWFuZCBhYm9ydHMuCisgKgorICogVGhlIHF1YWxpZmllciBkZWZpbmVkIGhlcmUgaXMgbm90IHRoZSB2YWx1ZSB0aGF0IGlzIG1hc2tlZCwgaXQgZGVmaW5lcworICogY29uZGl0aW9ucyBmb3IgdGhlIHdyaXRlIHRvIHRha2UgcGxhY2UuIFRoZSBhY3R1YWwgbWFza2VkIHF1YWxpZmllciAoYW5kCisgKiBvdGhlciByZWxhdGVkIGRldGFpbHMpIGFyZSBkZWZpbmVkIGJlZm9yZWhhbmQgd2l0aCBfc2V0X3NodXR0bGVfZmVhdHVyZXMoKS4KKyAqLworc3RhdGljIGludCB1c2JhdF93cml0ZV9ibG9ja3Moc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCSAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCQkJCSAgaW50IGxlbikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwljb21tYW5kWzBdID0gMHg0MDsKKwljb21tYW5kWzFdID0gVVNCQVRfQVRBIHwgVVNCQVRfQ01EX0NPTkRfV1JJVEVfQkxPQ0s7CisJY29tbWFuZFsyXSA9IFVTQkFUX0FUQV9EQVRBOworCWNvbW1hbmRbM10gPSBVU0JBVF9BVEFfU1RBVFVTOworCWNvbW1hbmRbNF0gPSAweEZEOyAvLyBUaW1lb3V0IChtcykKKwljb21tYW5kWzVdID0gVVNCQVRfUVVBTF9GQ1E7CisJY29tbWFuZFs2XSA9IExTQl9vZihsZW4pOworCWNvbW1hbmRbN10gPSBNU0Jfb2YobGVuKTsKKworCS8vIE11bHRpcGxlIGJsb2NrIHdyaXRlIHNldHVwIGNvbW1hbmQKKwlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkKKwkvLyBXcml0ZSB0aGUgZGF0YQorCXJlc3VsdCA9IHVzYmF0X2J1bGtfd3JpdGUodXMsIGJ1ZmZlciwgbGVuKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBVc2VyIElPIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfcmVhZF91c2VyX2lvKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YV9mbGFncykKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywKKwkJdXMtPnJlY3ZfY3RybF9waXBlLAorCQlVU0JBVF9DTURfVUlPLAorCQkweEMwLAorCQkwLAorCQkwLAorCQlkYXRhX2ZsYWdzLAorCQlVU0JBVF9VSU9fUkVBRCk7CisKKwlVU19ERUJVR1AoInVzYmF0X3JlYWRfdXNlcl9pbzogVUlPIHJlZ2lzdGVyIHJlYWRzICUwMlhcbiIsICh1bnNpZ25lZCBzaG9ydCkgKCpkYXRhX2ZsYWdzKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV3JpdGUgdG8gdGhlIFVzZXIgSU8gcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF93cml0ZV91c2VyX2lvKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGVuYWJsZV9mbGFncywKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFfZmxhZ3MpCit7CisJcmV0dXJuIHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsCisJCXVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJVVNCQVRfQ01EX1VJTywKKwkJMHg0MCwKKwkJc2hvcnRfcGFjayhlbmFibGVfZmxhZ3MsIGRhdGFfZmxhZ3MpLAorCQkwLAorCQlOVUxMLAorCQlVU0JBVF9VSU9fV1JJVEUpOworfQorCisvKgorICogUmVzZXQgdGhlIGRldmljZQorICogT2Z0ZW4gbmVlZGVkIG9uIG1lZGlhIGNoYW5nZS4KKyAqLworc3RhdGljIGludCB1c2JhdF9kZXZpY2VfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByYzsKKworCS8vIFJlc2V0IHBlcmlwaGVyYWwsIGVuYWJsZSBwZXJpcGhlcmFsIGNvbnRyb2wgc2lnbmFscworCS8vIChicmluZyByZXNldCBzaWduYWwgdXApCisJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAorCQkJCQkJCSBVU0JBVF9VSU9fRFJWUlNUIHwgVVNCQVRfVUlPX09FMSB8IFVTQkFUX1VJT19PRTAsCisJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQkKKwkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMKKwkvLyAoYnJpbmcgcmVzZXQgc2lnbmFsIGRvd24pCisJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAorCQkJCQkJCSBVU0JBVF9VSU9fT0UxICB8IFVTQkFUX1VJT19PRTAsCisJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBFbmFibGUgY2FyZCBkZXRlY3QKKyAqLworc3RhdGljIGludCB1c2JhdF9kZXZpY2VfZW5hYmxlX2NkdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCisJLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzIGFuZCBjYXJkIGRldGVjdAorCXJjID0gdXNiYXRfd3JpdGVfdXNlcl9pbyh1cywKKwkJCQkJCQkgVVNCQVRfVUlPX0FDS0QgfCBVU0JBVF9VSU9fT0UxICB8IFVTQkFUX1VJT19PRTAsCisJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgbWVkaWEgaXMgcHJlc2VudC4KKyAqLworc3RhdGljIGludCB1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9wcmVzZW50KHVuc2lnbmVkIGNoYXIgKnVpbykKK3sKKwlpZiAoKnVpbyAmIFVTQkFUX1VJT19VSTApIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9wcmVzZW50OiBubyBtZWRpYSBkZXRlY3RlZFxuIik7CisJCXJldHVybiBVU0JBVF9GTEFTSF9NRURJQV9OT05FOworCX0KKworCXJldHVybiBVU0JBVF9GTEFTSF9NRURJQV9DRjsKK30KKworLyoKKyAqIERldGVybWluZSBpZiBtZWRpYSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0IG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhX2NoYW5nZWQodW5zaWduZWQgY2hhciAqdWlvKQoreworCWlmICgqdWlvICYgVVNCQVRfVUlPXzApIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9jaGFuZ2VkOiBtZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gVVNCQVRfRkxBU0hfTUVESUFfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gVVNCQVRfRkxBU0hfTUVESUFfU0FNRTsKK30KKworLyoKKyAqIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgLyBubyBtZWRpYSBhbmQgaGFuZGxlIHRoZSBzaXR1YXRpb24gYXBwcm9wcmlhdGVseQorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICBzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciAqdWlvID0gdXMtPmlvYnVmOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHVpbyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIENoZWNrIGZvciBtZWRpYSBleGlzdGFuY2UKKwlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhX3ByZXNlbnQodWlvKTsKKwlpZiAocmMgPT0gVVNCQVRfRkxBU0hfTUVESUFfTk9ORSkgeworCQlpbmZvLT5zZW5zZV9rZXkgPSAweDAyOworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDNBOworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJLy8gQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZQorCXJjID0gdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfY2hhbmdlZCh1aW8pOworCWlmIChyYyA9PSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VEKSB7CisKKwkJLy8gUmVzZXQgYW5kIHJlLWVuYWJsZSBjYXJkIGRldGVjdAorCQlyYyA9IHVzYmF0X2RldmljZV9yZXNldCh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKwkJcmMgPSB1c2JhdF9kZXZpY2VfZW5hYmxlX2NkdCh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQltc2xlZXAoNTApOworCisJCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCB1aW8pOworCQlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCisJCWluZm8tPnNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDI4OworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgYXJlIGNvbnRyb2xsaW5nIGEgZmxhc2gtYmFzZWQgcmVhZGVyL3dyaXRlciwKKyAqIG9yIGEgSFA4MjAwLWJhc2VkIENEIGRyaXZlLgorICogU2V0cyB0cmFuc3BvcnQgZnVuY3Rpb25zIGFzIGFwcHJvcHJpYXRlLgorICovCitzdGF0aWMgaW50IHVzYmF0X2lkZW50aWZ5X2RldmljZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvKQoreworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKworCWlmICghdXMgfHwgIWluZm8pCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyYyA9IHVzYmF0X2RldmljZV9yZXNldCh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIEJ5IGV4YW1pbmluZyB0aGUgZGV2aWNlIHNpZ25hdHVyZSBhZnRlciBhIHJlc2V0LCB3ZSBjYW4gaWRlbnRpZnkKKwkgKiB3aGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIEFUQVBJIHBhY2tldCBpbnRlcmZhY2UuCisJICogVGhlIGZsYXNoLWRldmljZXMgZG8gbm90IHN1cHBvcnQgdGhpcywgd2hlcmVhcyB0aGUgSFAgQ0RSVydzIG9idmlvdXNseQorCSAqIGRvLgorCSAqCisJICogVGhpcyBtZXRob2QgaXMgbm90IGlkZWFsLCBidXQgd29ya3MgYmVjYXVzZSBubyBvdGhlciBkZXZpY2VzIGhhdmUgYmVlbgorCSAqIHByb2R1Y2VkIGJhc2VkIG9uIHRoZSBVU0JBVC9VU0JBVDAyLgorCSAqCisJICogU2VjdGlvbiA5LjEgb2YgdGhlIEFUQVBJLTQgc3BlYyBzdGF0ZXMgKGFtb25nc3Qgb3RoZXIgdGhpbmdzKSB0aGF0CisJICogYWZ0ZXIgYSBkZXZpY2UgcmVzZXQsIGEgQ3lsaW5kZXIgbG93IG9mIDB4MTQgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZQorCSAqIGRvZXMgc3VwcG9ydCBwYWNrZXQgY29tbWFuZHMuCisJICovCisJcmMgPSB1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsICZzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoInVzYmF0X2lkZW50aWZ5X2RldmljZTogQ3lsaW5kZXIgbG93IGlzICUwMlhcbiIsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzID09IDB4MTQpIHsKKwkJLy8gRGV2aWNlIGlzIEhQIDgyMDAKKwkJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IERldGVjdGVkIEhQODIwMCBDRFJXXG4iKTsKKwkJaW5mby0+ZGV2aWNldHlwZSA9IFVTQkFUX0RFVl9IUDgyMDA7CisJfSBlbHNlIHsKKwkJLy8gRGV2aWNlIGlzIGEgQ29tcGFjdEZsYXNoIHJlYWRlci93cml0ZXIKKwkJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IERldGVjdGVkIEZsYXNoIHJlYWRlci93cml0ZXJcbiIpOworCQlpbmZvLT5kZXZpY2V0eXBlID0gVVNCQVRfREVWX0ZMQVNIOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFNldCB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBkZXZpY2UgdHlwZQorICovCitzdGF0aWMgaW50IHVzYmF0X3NldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICAgIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvKQoreworCWludCByYzsKKworCWlmICghaW5mby0+ZGV2aWNldHlwZSkgeworCQlyYyA9IHVzYmF0X2lkZW50aWZ5X2RldmljZSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQkJVVNfREVCVUdQKCJ1c2JhdF9zZXRfdHJhbnNwb3J0OiBDb3VsZCBub3QgaWRlbnRpZnkgZGV2aWNlXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0hQODIwMCkKKwkJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0OworCWVsc2UgaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0ZMQVNIKQorCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfZmxhc2hfdHJhbnNwb3J0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBtZWRpYSBjYXBhY2l0eQorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX2dldF9zZWN0b3JfY291bnQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVyc1szXSA9IHsKKwkJVVNCQVRfQVRBX1NFQ0NOVCwKKwkJVVNCQVRfQVRBX0RFVklDRSwKKwkJVVNCQVRfQVRBX0NNRCwKKwl9OworCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmRbM10gPSB7IDB4MDEsIDB4QTAsIDB4RUMgfTsKKwl1bnNpZ25lZCBjaGFyICpyZXBseTsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgcmM7CisKKwlpZiAoIXVzIHx8ICFpbmZvKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVwbHkgPSBrbWFsbG9jKDUxMiwgR0ZQX05PSU8pOworCWlmICghcmVwbHkpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvLyBBVEFQSSBjb21tYW5kIDogSURFTlRJRlkgREVWSUNFCisJcmMgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgcmVnaXN0ZXJzLCBjb21tYW5kLCAzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfZ2V0X3NlY3Rvcl9jb3VudDogR2FoISBpZGVudGlmeV9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLy8gUmVhZCBkZXZpY2Ugc3RhdHVzCisJaWYgKHVzYmF0X2dldF9zdGF0dXModXMsICZzdGF0dXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwltc2xlZXAoMTAwKTsKKworCS8vIFJlYWQgdGhlIGRldmljZSBpZGVudGlmaWNhdGlvbiBkYXRhCisJcmMgPSB1c2JhdF9yZWFkX2Jsb2NrKHVzLCByZXBseSwgNTEyKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCWdvdG8gbGVhdmU7CisKKwlpbmZvLT5zZWN0b3JzID0gKCh1MzIpKHJlcGx5WzExN10pIDw8IDI0KSB8CisJCSgodTMyKShyZXBseVsxMTZdKSA8PCAxNikgfAorCQkoKHUzMikocmVwbHlbMTE1XSkgPDwgIDgpIHwKKwkJKCh1MzIpKHJlcGx5WzExNF0pICAgICAgKTsKKworCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogUmVhZCBkYXRhIGZyb20gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJCQkJIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvLAorCQkJCQkJCQkgdTMyIHNlY3RvciwKKwkJCQkJCQkJIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgcmVnaXN0ZXJzWzddID0geworCQlVU0JBVF9BVEFfRkVBVFVSRVMsCisJCVVTQkFUX0FUQV9TRUNDTlQsCisJCVVTQkFUX0FUQV9TRUNOVU0sCisJCVVTQkFUX0FUQV9MQkFfTUUsCisJCVVTQkFUX0FUQV9MQkFfSEksCisJCVVTQkFUX0FUQV9ERVZJQ0UsCisJCVVTQkFUX0FUQV9TVEFUVVMsCisJfTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRbN107CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJcmVzdWx0ID0gdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWEodXMsIGluZm8pOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCXJldHVybiByZXN1bHQ7CisKKwkvLyB3ZSdyZSB3b3JraW5nIGluIExCQSBtb2RlLiAgYWNjb3JkaW5nIHRvIHRoZSBBVEEgc3BlYywKKwkvLyB3ZSBjYW4gc3VwcG9ydCB1cCB0byAyOC1iaXQgYWRkcmVzc2luZy4gIEkgZG9uJ3Qga25vdyBpZiBKdW1wc2hvdAorCS8vIHN1cHBvcnRzIGJleW9uZCAyNC1iaXQgYWRkcmVzc2luZy4gIEl0J3Mga2luZCBvZiBoYXJkIHRvIHRlc3QKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCisJaWYgKHNlY3RvciA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHJlYWQgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworIAorCQkvLyBBVEFQSSBjb21tYW5kIDB4MjAgKFJFQUQgU0VDVE9SUykKKwkJdXNiYXRfcGFja19hdGFwaV9zZWN0b3JfY21kKGNvbW1hbmQsIHRoaXN0aW1lLCBzZWN0b3IsIDB4MjApOworCisJCS8vIFdyaXRlL2V4ZWN1dGUgQVRBUEkgcmVhZCBjb21tYW5kCisJCXJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCByZWdpc3RlcnMsIGNvbW1hbmQsIDcpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyBSZWFkIHRoZSBkYXRhIHdlIGp1c3QgcmVxdWVzdGVkCisJCXJlc3VsdCA9IHVzYmF0X3JlYWRfYmxvY2tzKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlnb3RvIGxlYXZlOworICAJIAorCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3JlYWRfZGF0YTogICVkIGJ5dGVzXG4iLCBsZW4pOworCQorCQkvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkJICZzZ19pZHgsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKK2xlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworLyoKKyAqIFdyaXRlIGRhdGEgdG8gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJCSAgc3RydWN0IHVzYmF0X2luZm8gKmluZm8sCisJCQkJCQkJCSAgdTMyIHNlY3RvciwKKwkJCQkJCQkJICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVyc1s3XSA9IHsKKwkJVVNCQVRfQVRBX0ZFQVRVUkVTLAorCQlVU0JBVF9BVEFfU0VDQ05ULAorCQlVU0JBVF9BVEFfU0VDTlVNLAorCQlVU0JBVF9BVEFfTEJBX01FLAorCQlVU0JBVF9BVEFfTEJBX0hJLAorCQlVU0JBVF9BVEFfREVWSUNFLAorCQlVU0JBVF9BVEFfU1RBVFVTLAorCX07CisJdW5zaWduZWQgY2hhciBjb21tYW5kWzddOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgc2dfaWR4ID0gMCwgc2dfb2Zmc2V0ID0gMDsKKworCXJlc3VsdCA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsCisJLy8gd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0CisJLy8gc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgQ0YgY2FyZC4KKworCWlmIChzZWN0b3IgPiAweDBGRkZGRkZGKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJdG90YWxsZW4gPSBzZWN0b3JzICogaW5mby0+c3NpemU7CisKKwkvLyBTaW5jZSB3ZSBkb24ndCB3cml0ZSBtb3JlIHRoYW4gNjQgS0IgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJYWxsb2NsZW4gPSBtaW4odG90YWxsZW4sIDY1NTM2dSk7CisJYnVmZmVyID0ga21hbGxvYyhhbGxvY2xlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWRvIHsKKwkJLy8gbG9vcCwgbmV2ZXIgYWxsb2NhdGUgb3IgdHJhbnNmZXIgbW9yZSB0aGFuIDY0ayBhdCBvbmNlCisJCS8vIChtaW4oMTI4aywgMjU1KmluZm8tPnNzaXplKSBpcyB0aGUgcmVhbCBsaW1pdCkKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJCSAmc2dfaWR4LCAmc2dfb2Zmc2V0LCBGUk9NX1hGRVJfQlVGKTsKKworCQkvLyBBVEFQSSBjb21tYW5kIDB4MzAgKFdSSVRFIFNFQ1RPUlMpCisJCXVzYmF0X3BhY2tfYXRhcGlfc2VjdG9yX2NtZChjb21tYW5kLCB0aGlzdGltZSwgc2VjdG9yLCAweDMwKTsJCQorCisJCS8vIFdyaXRlL2V4ZWN1dGUgQVRBUEkgd3JpdGUgY29tbWFuZAorCQlyZXN1bHQgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgcmVnaXN0ZXJzLCBjb21tYW5kLCA3KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gV3JpdGUgdGhlIGRhdGEKKwkJcmVzdWx0ID0gdXNiYXRfd3JpdGVfYmxvY2tzKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCXNlY3RvciArPSB0aGlzdGltZTsKKwkJdG90YWxsZW4gLT0gbGVuOworCX0gd2hpbGUgKHRvdGFsbGVuID4gMCk7CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7CisKK2xlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworLyoKKyAqIFNxdWVlemUgYSBwb3RlbnRpYWxseSBodWdlICg+IDY1NTM1IGJ5dGUpIHJlYWQxMCBjb21tYW5kIGludG8KKyAqIGEgbGl0dGxlICggPD0gNjU1MzUgYnl0ZSkgQVRBUEkgcGlwZQorICovCitzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfaGFuZGxlX3JlYWQxMChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlZ2lzdGVycywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCWludCByZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yOworCXVuc2lnbmVkIGludCBzZ19zZWdtZW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgc2dfb2Zmc2V0ID0gMDsKKworCVVTX0RFQlVHUCgiaGFuZGxlX3JlYWQxMDogdHJhbnNmZXJzaXplICVkXG4iLAorCQlzcmItPnRyYW5zZmVyc2l6ZSk7CisKKwlpZiAoc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPCAweDEwMDAwKSB7CisKKwkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAorCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKKwkJCVVTQkFUX0FUQV9EQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCAweEZELAorCQkJKFVTQkFUX1FVQUxfRkNRIHwgVVNCQVRfUVVBTF9BTFEpLAorCQkJRE1BX0ZST01fREVWSUNFLAorCQkJc3JiLT5yZXF1ZXN0X2J1ZmZlciwgCisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiwgc3JiLT51c2Vfc2csIDEpOworCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSByZXF1ZXN0aW5nIG1vcmUgZGF0YSB0aGFuIHdlIGNhbiBoYW5kbGUgaW4KKwkgKiBhIHNpbmdsZSByZWFkIGNvbW1hbmQgKG1heCBpcyA2NGstMSksIHdlIHdpbGwgcGVyZm9ybQorCSAqIG11bHRpcGxlIHJlYWRzLCBidXQgZWFjaCByZWFkIG11c3QgYmUgaW4gbXVsdGlwbGVzIG9mCisJICogYSBzZWN0b3IuICBMdWNraWx5IHRoZSBzZWN0b3Igc2l6ZSBpcyBpbiBzcmItPnRyYW5zZmVyc2l6ZQorCSAqIChzZWUgbGludXgvZHJpdmVycy9zY3NpL3NyLmMpLgorCSAqLworCisJaWYgKGRhdGFbNyswXSA9PSBHUENNRF9SRUFEX0NEKSB7CisJCWxlbiA9IHNob3J0X3BhY2soZGF0YVs3KzldLCBkYXRhWzcrOF0pOworCQlsZW4gPDw9IDE2OworCQlsZW4gfD0gZGF0YVs3KzddOworCQlVU19ERUJVR1AoImhhbmRsZV9yZWFkMTA6IEdQQ01EX1JFQURfQ0Q6IGxlbiAlZFxuIiwgbGVuKTsKKwkJc3JiLT50cmFuc2ZlcnNpemUgPSBzcmItPnJlcXVlc3RfYnVmZmxlbi9sZW47CisJfQorCisJaWYgKCFzcmItPnRyYW5zZmVyc2l6ZSkgIHsKKwkJc3JiLT50cmFuc2ZlcnNpemUgPSAyMDQ4OyAvKiBBIGd1ZXNzICovCisJCVVTX0RFQlVHUCgiaGFuZGxlX3JlYWQxMDogdHJhbnNmZXJzaXplIDAsIGZvcmNpbmcgJWRcbiIsCisJCQlzcmItPnRyYW5zZmVyc2l6ZSk7CisJfQorCisJLy8gU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlsZW4gPSAoNjU1MzUvc3JiLT50cmFuc2ZlcnNpemUpICogc3JiLT50cmFuc2ZlcnNpemU7CisJVVNfREVCVUdQKCJNYXggcmVhZCBpcyAlZCBieXRlc1xuIiwgbGVuKTsKKwlsZW4gPSBtaW4obGVuLCBzcmItPnJlcXVlc3RfYnVmZmxlbik7CisJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIC8vIGJsb29keSBoZWxsIQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwlzZWN0b3IgPSBzaG9ydF9wYWNrKGRhdGFbNyszXSwgZGF0YVs3KzJdKTsKKwlzZWN0b3IgPDw9IDE2OworCXNlY3RvciB8PSBzaG9ydF9wYWNrKGRhdGFbNys1XSwgZGF0YVs3KzRdKTsKKwl0cmFuc2ZlcnJlZCA9IDA7CisKKwlzZ19zZWdtZW50ID0gMDsgLy8gZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgd2UgYXJlIGluCisJc2dfb2Zmc2V0ID0gMDsgIC8vIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0CisKKwl3aGlsZSAodHJhbnNmZXJyZWQgIT0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKKworCQlpZiAobGVuID4gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSB0cmFuc2ZlcnJlZCkKKwkJCWxlbiA9IHNyYi0+cmVxdWVzdF9idWZmbGVuIC0gdHJhbnNmZXJyZWQ7CisKKwkJZGF0YVszXSA9IGxlbiYweEZGOyAJICAvLyAoY3lsTCkgPSBleHBlY3RlZCBsZW5ndGggKEwpCisJCWRhdGFbNF0gPSAobGVuPj44KSYweEZGOyAgLy8gKGN5bEgpID0gZXhwZWN0ZWQgbGVuZ3RoIChIKQorCisJCS8vIEZpeCB1cCB0aGUgU0NTSSBjb21tYW5kIHNlY3RvciBhbmQgbnVtIHNlY3RvcnMKKworCQlkYXRhWzcrMl0gPSBNU0Jfb2Yoc2VjdG9yPj4xNik7IC8vIFNDU0kgY29tbWFuZCBzZWN0b3IKKwkJZGF0YVs3KzNdID0gTFNCX29mKHNlY3Rvcj4+MTYpOworCQlkYXRhWzcrNF0gPSBNU0Jfb2Yoc2VjdG9yJjB4RkZGRik7CisJCWRhdGFbNys1XSA9IExTQl9vZihzZWN0b3ImMHhGRkZGKTsKKwkJaWYgKGRhdGFbNyswXSA9PSBHUENNRF9SRUFEX0NEKQorCQkJZGF0YVs3KzZdID0gMDsKKwkJZGF0YVs3KzddID0gTVNCX29mKGxlbiAvIHNyYi0+dHJhbnNmZXJzaXplKTsgLy8gU0NTSSBjb21tYW5kCisJCWRhdGFbNys4XSA9IExTQl9vZihsZW4gLyBzcmItPnRyYW5zZmVyc2l6ZSk7IC8vIG51bSBzZWN0b3JzCisKKwkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAorCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKKwkJCVVTQkFUX0FUQV9EQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCAweEZELCAKKwkJCShVU0JBVF9RVUFMX0ZDUSB8IFVTQkFUX1FVQUxfQUxRKSwKKwkJCURNQV9GUk9NX0RFVklDRSwKKwkJCWJ1ZmZlciwKKwkJCWxlbiwgMCwgMSk7CisKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWJyZWFrOworCisJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCBzcmIsCisJCQkJICZzZ19zZWdtZW50LCAmc2dfb2Zmc2V0LCBUT19YRkVSX0JVRik7CisKKwkJLy8gVXBkYXRlIHRoZSBhbW91bnQgdHJhbnNmZXJyZWQgYW5kIHRoZSBzZWN0b3IgbnVtYmVyCisKKwkJdHJhbnNmZXJyZWQgKz0gbGVuOworCQlzZWN0b3IgKz0gbGVuIC8gc3JiLT50cmFuc2ZlcnNpemU7CisKKwl9IC8vIHdoaWxlIHRyYW5zZmVycmVkICE9IHNyYi0+cmVxdWVzdF9idWZmbGVuCisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiYXRfc2VsZWN0X2FuZF90ZXN0X3JlZ2lzdGVycyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHNlbGVjdG9yOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyIG1heF9zZWxlY3RvciA9IDB4QjA7CisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0ZMQVNIKQorCQltYXhfc2VsZWN0b3IgPSAweEEwOworCisJLy8gdHJ5IGRldmljZSA9IG1hc3RlciwgdGhlbiBkZXZpY2UgPSBzbGF2ZS4KKworCWZvciAoc2VsZWN0b3IgPSAweEEwOyBzZWxlY3RvciA8PSBtYXhfc2VsZWN0b3I7IHNlbGVjdG9yICs9IDB4MTApIHsKKworCQlpZiAodXNiYXRfZ2V0X2RldmljZV90eXBlKHVzKSA9PSBVU0JBVF9ERVZfSFA4MjAwICYmCisJCQl1c2JhdF93cml0ZSh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfREVWSUNFLCBzZWxlY3RvcikgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCBzdGF0dXMpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0RFVklDRSwgc3RhdHVzKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIHN0YXR1cykgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX0hJLCBzdGF0dXMpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3dyaXRlKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIDB4NTUpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3dyaXRlKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfSEksIDB4QUEpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9NRSwgc3RhdHVzKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIHN0YXR1cykgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBVU0JBVCBwcm9jZXNzb3IgYW5kIHRoZSBzdG9yYWdlIGRldmljZQorICovCitpbnQgaW5pdF91c2JhdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvOworCXVuc2lnbmVkIGNoYXIgc3ViY291bnRIID0gVVNCQVRfQVRBX0xCQV9ISTsKKwl1bnNpZ25lZCBjaGFyIHN1YmNvdW50TCA9IFVTQkFUX0FUQV9MQkFfTUU7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCisJdXMtPmV4dHJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pLCBHRlBfTk9JTyk7CisJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJVVNfREVCVUdQKCJpbml0X3VzYmF0OiBHYWghIENhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIHVzYmF0IGluZm8gc3RydWN0IVxuIik7CisJCXJldHVybiAxOworCX0KKwltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pKTsKKwlpbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvICopICh1cy0+ZXh0cmEpOworCisJLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzCisJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAorCQkJCSBVU0JBVF9VSU9fT0UxIHwgVVNCQVRfVUlPX09FMCwKKwkJCQkgVVNCQVRfVUlPX0VQQUQgfCBVU0JBVF9VSU9fMSk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxXG4iKTsKKworCW1zbGVlcCgyMDAwKTsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJjOworCisJVVNfREVCVUdQKCJJTklUIDJcbiIpOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHN0YXR1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgM1xuIik7CisKKwkvLyBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIHRvIGRldGVjdCB3aGljaCBkZXZpY2Ugd2UgYXJlIHVzaW5nCisJaWYgKHVzYmF0X3NldF90cmFuc3BvcnQodXMsIGluZm8pKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJJTklUIDRcbiIpOworCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0hQODIwMCkgeworCQltc2xlZXAoMjUwKTsKKworCQkvLyBXcml0ZSAweDgwIHRvIElTQSBwb3J0IDB4M0YKKwkJcmMgPSB1c2JhdF93cml0ZSh1cywgVVNCQVRfSVNBLCAweDNGLCAweDgwKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJVVNfREVCVUdQKCJJTklUIDVcbiIpOworCisJCS8vIFJlYWQgSVNBIHBvcnQgMHgyNworCQlyYyA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0lTQSwgMHgyNywgc3RhdHVzKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJVVNfREVCVUdQKCJJTklUIDZcbiIpOworCisJCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlVU19ERUJVR1AoIklOSVQgN1xuIik7CisJfQorCisJcmMgPSB1c2JhdF9zZWxlY3RfYW5kX3Rlc3RfcmVnaXN0ZXJzKHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCXJldHVybiByYzsKKworCVVTX0RFQlVHUCgiSU5JVCA4XG4iKTsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgOVxuIik7CisKKwkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMgYW5kIGNhcmQgZGV0ZWN0CisJcmMgPSB1c2JhdF9kZXZpY2VfZW5hYmxlX2NkdCh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwlVU19ERUJVR1AoIklOSVQgMTBcbiIpOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHN0YXR1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxMVxuIik7CisKKwltc2xlZXAoMTQwMCk7CisKKwlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgc3RhdHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJJTklUIDEyXG4iKTsKKworCXJjID0gdXNiYXRfc2VsZWN0X2FuZF90ZXN0X3JlZ2lzdGVycyh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwlVU19ERUJVR1AoIklOSVQgMTNcbiIpOworCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0ZMQVNIKSB7IAorCQlzdWJjb3VudEggPSAweDAyOworCQlzdWJjb3VudEwgPSAweDAwOworCX0KKwlyYyA9IHVzYmF0X3NldF9zaHV0dGxlX2ZlYXR1cmVzKHVzLCAoVVNCQVRfRkVBVF9FVEVOIHwgVVNCQVRfRkVBVF9FVDIgfCBVU0JBVF9GRUFUX0VUMSksCisJCQkJCQkJCQkweDAwLCAweDg4LCAweDA4LCBzdWJjb3VudEgsIHN1YmNvdW50TCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxNFxuIik7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIHRoZSBIUCA4MjAwZQorICovCitzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgcmVnaXN0ZXJzWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMzJdOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IGk7CisJY2hhciBzdHJpbmdbNjRdOworCisJbGVuID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisKKwkvKiBTZW5kIEEwIChBVEEgUEFDS0VUIENPTU1BTkQpLgorCSAgIE5vdGU6IEkgZ3Vlc3Mgd2UncmUgbmV2ZXIgZ29pbmcgdG8gZ2V0IGFueSBvZiB0aGUgQVRBCisJICAgY29tbWFuZHMuLi4ganVzdCBBVEEgUGFja2V0IENvbW1hbmRzLgorIAkgKi8KKworCXJlZ2lzdGVyc1swXSA9IFVTQkFUX0FUQV9GRUFUVVJFUzsKKwlyZWdpc3RlcnNbMV0gPSBVU0JBVF9BVEFfU0VDQ05UOworCXJlZ2lzdGVyc1syXSA9IFVTQkFUX0FUQV9TRUNOVU07CisJcmVnaXN0ZXJzWzNdID0gVVNCQVRfQVRBX0xCQV9NRTsKKwlyZWdpc3RlcnNbNF0gPSBVU0JBVF9BVEFfTEJBX0hJOworCXJlZ2lzdGVyc1s1XSA9IFVTQkFUX0FUQV9ERVZJQ0U7CisJcmVnaXN0ZXJzWzZdID0gVVNCQVRfQVRBX0NNRDsKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHgwMDsKKwlkYXRhWzJdID0gMHgwMDsKKwlkYXRhWzNdID0gbGVuJjB4RkY7IAkJLy8gKGN5bEwpID0gZXhwZWN0ZWQgbGVuZ3RoIChMKQorCWRhdGFbNF0gPSAobGVuPj44KSYweEZGOyAJLy8gKGN5bEgpID0gZXhwZWN0ZWQgbGVuZ3RoIChIKQorCWRhdGFbNV0gPSAweEIwOyAJCS8vIChkZXZpY2Ugc2VsKSA9IHNsYXZlCisJZGF0YVs2XSA9IDB4QTA7IAkJLy8gKGNvbW1hbmQpID0gQVRBIFBBQ0tFVCBDT01NQU5ECisKKwlmb3IgKGk9NzsgaTwxOTsgaSsrKSB7CisJCXJlZ2lzdGVyc1tpXSA9IDB4MTA7CisJCWRhdGFbaV0gPSAoaS03ID49IHNyYi0+Y21kX2xlbikgPyAwIDogc3JiLT5jbW5kW2ktN107CisJfQorCisJcmVzdWx0ID0gdXNiYXRfZ2V0X3N0YXR1cyh1cywgc3RhdHVzKTsKKwlVU19ERUJVR1AoIlN0YXR1cyA9ICUwMlhcbiIsICpzdGF0dXMpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKQorCQl0cmFuc2ZlcnJlZCA9IDA7CisKKwlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisKKwkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAorCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKKwkJCVVTQkFUX0FUQV9EQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCAweEZELAorCQkJKFVTQkFUX1FVQUxfRkNRIHwgVVNCQVRfUVVBTF9BTFEpLAorCQkJRE1BX1RPX0RFVklDRSwKKwkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIAorCQkJbGVuLCBzcmItPnVzZV9zZywgMTApOworCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCXRyYW5zZmVycmVkICs9IGxlbjsKKwkJCVVTX0RFQlVHUCgiV3JvdGUgJTA4WCBieXRlc1xuIiwgdHJhbnNmZXJyZWQpOworCQl9CisKKwkJcmV0dXJuIHJlc3VsdDsKKworCX0gZWxzZSBpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTAgfHwKKwkJICAgc3JiLT5jbW5kWzBdID09IEdQQ01EX1JFQURfQ0QpIHsKKworCQlyZXR1cm4gdXNiYXRfaHA4MjAwZV9oYW5kbGVfcmVhZDEwKHVzLCByZWdpc3RlcnMsIGRhdGEsIHNyYik7CisKKwl9CisKKwlpZiAobGVuID4gMHhGRkZGKSB7CisJCVVTX0RFQlVHUCgiRXJyb3I6IGxlbiA9ICUwOFguLi4gd2hhdCBkbyBJIGRvIG5vdz9cbiIsCisJCQlsZW4pOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCWlmICggKHJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCAKKwkJCXJlZ2lzdGVycywgZGF0YSwgNykpICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLy8gV3JpdGUgdGhlIDEyLWJ5dGUgY29tbWFuZCBoZWFkZXIuCisKKwkvLyBJZiB0aGUgY29tbWFuZCBpcyBCTEFOSyB0aGVuIHNldCB0aGUgdGltZXIgZm9yIDc1IG1pbnV0ZXMuCisJLy8gT3RoZXJ3aXNlIHNldCBpdCBmb3IgMTAgbWludXRlcy4KKworCS8vIE5PVEU6IFRIRSA4MjAwIERPQ1VNRU5UQVRJT04gU1RBVEVTIFRIQVQgQkxBTktJTkcgQSBDRFJXCisJLy8gQVQgU1BFRUQgNCBJUyBVTlJFTElBQkxFISEhCisKKwlpZiAoIChyZXN1bHQgPSB1c2JhdF93cml0ZV9ibG9jayh1cywgCisJCQlVU0JBVF9BVEEsIHNyYi0+Y21uZCwgMTIsCisJCQlzcmItPmNtbmRbMF09PUdQQ01EX0JMQU5LID8gNzUgOiAxMCkpICE9CisJCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvLyBJZiB0aGVyZSBpcyByZXNwb25zZSBkYXRhIHRvIGJlIHJlYWQgaW4gCisJLy8gdGhlbiBkbyBpdCBoZXJlLgorCisJaWYgKGxlbiAhPSAwICYmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkpIHsKKworCQkvLyBIb3cgbWFueSBieXRlcyB0byByZWFkIGluPyBDaGVjayBjeWxMIHJlZ2lzdGVyCisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9NRSwgc3RhdHVzKSAhPSAKKwkJICAgIAlVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKworCQlpZiAobGVuID4gMHhGRikgeyAvLyBuZWVkIHRvIHJlYWQgY3lsSCBhbHNvCisJCQlsZW4gPSAqc3RhdHVzOworCQkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9ISSwgc3RhdHVzKSAhPQorCQkJCSAgICBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJfQorCQkJbGVuICs9ICgodW5zaWduZWQgaW50KSAqc3RhdHVzKTw8ODsKKwkJfQorCQllbHNlCisJCQlsZW4gPSAqc3RhdHVzOworCisKKwkJcmVzdWx0ID0gdXNiYXRfcmVhZF9ibG9jayh1cywgc3JiLT5yZXF1ZXN0X2J1ZmZlciwgbGVuKTsKKworCQkvKiBEZWJ1Zy1wcmludCB0aGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhlIHRyYW5zZmVyICovCisKKwkJaWYgKCFzcmItPnVzZV9zZykgeworCQkJc3RyaW5nWzBdID0gMDsKKwkJCWZvciAoaT0wOyBpPGxlbiAmJiBpPDMyOyBpKyspIHsKKwkJCQlzcHJpbnRmKHN0cmluZytzdHJsZW4oc3RyaW5nKSwgIiUwMlggIiwKKwkJCQkgICgodW5zaWduZWQgY2hhciAqKXNyYi0+cmVxdWVzdF9idWZmZXIpW2ldKTsKKwkJCQlpZiAoKGklMTYpPT0xNSkgeworCQkJCQlVU19ERUJVR1AoIiVzXG4iLCBzdHJpbmcpOworCQkJCQlzdHJpbmdbMF0gPSAwOworCQkJCX0KKwkJCX0KKwkJCWlmIChzdHJpbmdbMF0hPTApCisJCQkJVVNfREVCVUdQKCIlc1xuIiwgc3RyaW5nKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIFVTQkFUMDItYmFzZWQgQ29tcGFjdEZsYXNoIGFuZCBzaW1pbGFyIHN0b3JhZ2UgZGV2aWNlcworICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvICopICh1cy0+ZXh0cmEpOworCXVuc2lnbmVkIGxvbmcgYmxvY2ssIGJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVszNl0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBJTlFVSVJZLiBSZXR1cm5pbmcgYm9ndXMgcmVzcG9uc2UuXG4iKTsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgc2l6ZW9mKGlucXVpcnlfcmVzcG9uc2UpKTsKKwkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBwdHIsIDM2KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF9DQVBBQ0lUWSkgeworCQlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJjOworCisJCXJjID0gdXNiYXRfZmxhc2hfZ2V0X3NlY3Rvcl9jb3VudCh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOyAgLy8gaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogUkVBRF9DQVBBQ0lUWTogJWxkIHNlY3RvcnMsICVsZCBieXRlcyBwZXIgc2VjdG9yXG4iLAorCQkJICBpbmZvLT5zZWN0b3JzLCBpbmZvLT5zc2l6ZSk7CisKKwkJLy8gYnVpbGQgdGhlIHJlcGx5CisJCS8vIG5vdGU6IG11c3QgcmV0dXJuIHRoZSBzZWN0b3IgbnVtYmVyIG9mIHRoZSBsYXN0IHNlY3RvciwKKwkJLy8gKm5vdCogdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzCisJCSgoX19iZTMyICopIHB0cilbMF0gPSBjcHVfdG9fYmUzMihpbmZvLT5zZWN0b3JzIC0gMSk7CisJCSgoX19iZTMyICopIHB0cilbMV0gPSBjcHVfdG9fYmUzMihpbmZvLT5zc2l6ZSk7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRUxFQ1RfMTApIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6ICBHYWghIE1PREVfU0VMRUNUXzEwLlxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6ICBSRUFEXzEwOiByZWFkIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiB1c2JhdF9mbGFzaF9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMikgeworCQkvLyBJIGRvbid0IHRoaW5rIHdlJ2xsIGV2ZXIgc2VlIGEgUkVBRF8xMiBidXQgc3VwcG9ydCBpdCBhbnl3YXkuLi4KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkgICAgICAgICgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkgICAgICAgICAoKHUzMikoc3JiLT5jbW5kWzhdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzldKSk7CisKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6IFJFQURfMTI6IHJlYWQgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIHVzYmF0X2ZsYXNoX3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCSAgICAgICAgKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBXUklURV8xMDogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIHVzYmF0X2ZsYXNoX3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFdSSVRFXzEyIGJ1dCBzdXBwb3J0IGl0IGFueXdheS4uLgorCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCSAgICAgICAgKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCSAgICAgICAgICgodTMyKShzcmItPmNtbmRbOF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbOV0pKTsKKworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogV1JJVEVfMTI6IHdyaXRlIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiB1c2JhdF9mbGFzaF93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBURVNUX1VOSVRfUkVBRFkuXG4iKTsKKworCQlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJjOworCisJCXJldHVybiB1c2JhdF9jaGVja19zdGF0dXModXMpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogUkVRVUVTVF9TRU5TRS5cbiIpOworCisJCW1lbXNldChwdHIsIDAsIDE4KTsKKwkJcHRyWzBdID0gMHhGMDsKKwkJcHRyWzJdID0gaW5mby0+c2Vuc2Vfa2V5OworCQlwdHJbN10gPSAxMTsKKwkJcHRyWzEyXSA9IGluZm8tPnNlbnNlX2FzYzsKKwkJcHRyWzEzXSA9IGluZm8tPnNlbnNlX2FzY3E7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDE4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IEFMTE9XX01FRElVTV9SRU1PVkFMKSB7CisJCS8vIHN1cmUuICB3aGF0ZXZlci4gIG5vdCBsaWtlIHdlIGNhbiBzdG9wIHRoZSB1c2VyIGZyb20gcG9wcGluZworCQkvLyB0aGUgbWVkaWEgb3V0IG9mIHRoZSBkZXZpY2UgKG5vIGxvY2tpbmcgZG9vcnMsIGV0YykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBHYWghIFVua25vd24gY29tbWFuZDogJWQgKDB4JXgpXG4iLAorCQkJICBzcmItPmNtbmRbMF0sIHNyYi0+Y21uZFswXSk7CisJaW5mby0+c2Vuc2Vfa2V5ID0gMHgwNTsKKwlpbmZvLT5zZW5zZV9hc2MgPSAweDIwOworCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworfQorCisvKgorICogRGVmYXVsdCB0cmFuc3BvcnQgZnVuY3Rpb24uIEF0dGVtcHRzIHRvIGRldGVjdCB3aGljaCB0cmFuc3BvcnQgZnVuY3Rpb24KKyAqIHNob3VsZCBiZSBjYWxsZWQsIG1ha2VzIGl0IHRoZSBuZXcgZGVmYXVsdCwgYW5kIGNhbGxzIGl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gT3VyIHVzYmF0X2luaXQoKSBmdW5jdGlvbiBkZXRlY3RzIHRoZQorICogZGV2aWNlIHR5cGUgYW5kIGNoYW5nZXMgdGhlIHVzLT50cmFuc3BvcnQgcHRyIHRvIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24KKyAqIHJlbGV2YW50IHRvIHRoZSBkZXZpY2UuCisgKiBIb3dldmVyLCB3ZSdsbCBzdXBwb3J0IHRoaXMgaW1wb3NzaWJsZSg/KSBjYXNlIGFueXdheS4KKyAqLworaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgdXNiYXRfaW5mbyopICh1cy0+ZXh0cmEpOworCisJaWYgKHVzYmF0X3NldF90cmFuc3BvcnQodXMsIGluZm8pKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmV0dXJuIHVzLT50cmFuc3BvcnQoc3JiLCB1cyk7CQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOGU4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaApAQCAtMCwwICsxLDEyMyBAQAorLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQorICogSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IHNodXR0bGVfdXNiYXQuaCx2IDEuNSAyMDAwLzA5LzE3IDE0OjQ0OjUyIGdyb292eWphdmEgRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCisgKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisgKgorICogU2VlIHNodXR0bGVfdXNiYXQuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9TSFVUVExFX1VTQkFUX0gKKyNkZWZpbmUgX1VTQl9TSFVUVExFX1VTQkFUX0gKKworLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKKyNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCisKKyNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKKyNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKKyNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCisjZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAorCisvKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0CisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNworCisvKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKKyNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKKyNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgorCisvKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQorI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAorCisvKiBRdWFsaWZpZXIgYml0cyAqLworI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwIC8vIGZ1bGwgY29tcGFyZQorI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwIC8vIGF1dG8gbG9hZCBzdWJjb3VudAorCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKKworLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8vIHJlYWQvd3JpdGUgZGF0YSAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8vIHNldCBmZWF0dXJlcyAoVykKKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvLyBlcnJvciAoUikKKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvLyBzZWN0b3IgY291bnQgKFIvVykKKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvLyBzZWN0b3IgbnVtYmVyIChSL1cpCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLy8gY3lsaW5kZXIgbG93IChSL1cpCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLy8gY3lsaW5kZXIgaGlnaCAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8vIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8vIGRldmljZSBzdGF0dXMgKFIpCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLy8gZGV2aWNlIGNvbW1hbmQgKFcpCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLy8gc3RhdHVzIChubyBjbGVhciBJUlEpIChSKQorCisvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvLyBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMKKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvLyBDYXJkIERldGVjdCAoUmVhZCBPbmx5KQorCQkJCSAgICAgLy8gQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8vIEkvTyAxCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8vIEkvTyAwCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLy8gMT1FUFAgbW9kZSwgMD1BVEEgbW9kZQorI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8vIElucHV0IDEKKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvLyBJbnB1dCAwCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8vIEludGVycnVwdCAoQVRBICYgSVNBKS9BY2tub3dsZWRnZSAoRVBQKQorCisvKiBVU0JBVCBVc2VyIEkvTyBFbmFibGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQkFUX1VJT19EUlZSU1QJMHg4MCAvLyBSZXNldCBQZXJpcGhlcmFsCisjZGVmaW5lIFVTQkFUX1VJT19BQ0tECQkweDQwIC8vIEVuYWJsZSBDYXJkIERldGVjdAorI2RlZmluZSBVU0JBVF9VSU9fT0UxCQkweDIwIC8vIEkvTyAxIHNldD1vdXRwdXQvY2xyPWlucHV0CisJCQkJICAgICAvLyBJZiBBQ0tEPTEsIHNldCBPRTEgdG8gMSBhbHNvLgorI2RlZmluZSBVU0JBVF9VSU9fT0UwCQkweDEwIC8vIEkvTyAwIHNldD1vdXRwdXQvY2xyPWlucHV0CisjZGVmaW5lIFVTQkFUX1VJT19BRFBSU1QJMHgwMSAvLyBSZXNldCBTQ00gY2hpcAorCisvKiBVU0JBVCBGZWF0dXJlcyAqLworI2RlZmluZSBVU0JBVF9GRUFUX0VURU4JMHg4MCAvLyBFeHRlcm5hbCB0cmlnZ2VyIGVuYWJsZQorI2RlZmluZSBVU0JBVF9GRUFUX1UxCTB4MDgKKyNkZWZpbmUgVVNCQVRfRkVBVF9VMAkweDA0CisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQxCTB4MDIKKyNkZWZpbmUgVVNCQVRfRkVBVF9FVDIJMHgwMQorCitleHRlcm4gaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IGluaXRfdXNiYXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IHVzYmF0X2luZm8geworCWludCBkZXZpY2V0eXBlOworCisJLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLy8gdG90YWwgc2VjdG9yIGNvdW50CisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQorCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjM2QyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxMjE1IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqCisgKiAkSWQ6IHRyYW5zcG9ydC5jLHYgMS40NyAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoYykgMjAwMCBEYXZpZCBMLiBCcm93biwgSnIuICh1c2Itc3RvcmFnZUBkYXZpZGIub3JnKQorICogICAoYykgMjAwMCBTdGVwaGVuIEouIEdvd2R5IChTR293ZHlAbGJsLmdvdikKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJzY3NpZ2x1ZS5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEYXRhIHRyYW5zZmVyIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGlzIHN1YnRsZSwgc28gcGF5IGF0dGVudGlvbjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2UncmUgdmVyeSBjb25jZXJuZWQgYWJvdXQgcmFjZXMgd2l0aCBhIGNvbW1hbmQgYWJvcnQuICBIYW5naW5nIHRoaXMgY29kZQorICogaXMgYSBzdXJlIGZpcmUgd2F5IHRvIGhhbmcgdGhlIGtlcm5lbC4gIChOb3RlIHRoYXQgdGhpcyBkaXNjdXNzaW9uIGFwcGxpZXMKKyAqIG9ubHkgdG8gdHJhbnNhY3Rpb25zIHJlc3VsdGluZyBmcm9tIGEgc2NzaSBxdWV1ZWQtY29tbWFuZCwgc2luY2Ugb25seQorICogdGhlc2UgdHJhbnNhY3Rpb25zIGFyZSBzdWJqZWN0IHRvIGEgc2NzaSBhYm9ydC4gIE90aGVyIHRyYW5zYWN0aW9ucywgc3VjaAorICogYXMgdGhvc2Ugb2NjdXJyaW5nIGR1cmluZyBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIG11c3QgYmUgaGFuZGxlZAorICogYnkgYSBzZXBhcmF0ZSBjb2RlIHBhdGguKQorICoKKyAqIFRoZSBhYm9ydCBmdW5jdGlvbiAodXNiX3N0b3JhZ2VfY29tbWFuZF9hYm9ydCgpIGluIHNjc2lnbHVlLmMpIGZpcnN0CisgKiBzZXRzIHRoZSBtYWNoaW5lIHN0YXRlIGFuZCB0aGUgQUJPUlRJTkcgYml0IGluIHVzLT5mbGFncyB0byBwcmV2ZW50CisgKiBuZXcgVVJCcyBmcm9tIGJlaW5nIHN1Ym1pdHRlZC4gIEl0IHRoZW4gY2FsbHMgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoKQorICogYmVsb3csIHdoaWNoIGF0b21pY2FsbHkgdGVzdHMtYW5kLWNsZWFycyB0aGUgVVJCX0FDVElWRSBiaXQgaW4gdXMtPmZsYWdzCisgKiB0byBzZWUgaWYgdGhlIGN1cnJlbnRfdXJiIG5lZWRzIHRvIGJlIHN0b3BwZWQuICBMaWtld2lzZSwgdGhlIFNHX0FDVElWRQorICogYml0IGlzIHRlc3RlZCB0byBzZWUgaWYgdGhlIGN1cnJlbnRfc2cgc2NhdHRlci1nYXRoZXIgcmVxdWVzdCBuZWVkcyB0byBiZQorICogc3RvcHBlZC4gIFRoZSB0aW1lb3V0IGNhbGxiYWNrIHJvdXRpbmUgZG9lcyBtdWNoIHRoZSBzYW1lIHRoaW5nLgorICoKKyAqIFdoZW4gYSBkaXNjb25uZWN0IG9jY3VycywgdGhlIERJU0NPTk5FQ1RJTkcgYml0IGluIHVzLT5mbGFncyBpcyBzZXQgdG8KKyAqIHByZXZlbnQgbmV3IFVSQnMgZnJvbSBiZWluZyBzdWJtaXR0ZWQsIGFuZCB1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydCgpIGlzCisgKiBjYWxsZWQgdG8gc3RvcCBhbnkgb25nb2luZyByZXF1ZXN0cy4KKyAqCisgKiBUaGUgc3VibWl0IGZ1bmN0aW9uIGZpcnN0IHZlcmlmaWVzIHRoYXQgdGhlIHN1Ym1pdHRpbmcgaXMgYWxsb3dlZAorICogKG5laXRoZXIgQUJPUlRJTkcgbm9yIERJU0NPTk5FQ1RJTkcgYml0cyBhcmUgc2V0KSBhbmQgdGhhdCB0aGUgc3VibWl0CisgKiBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnMsIGFuZCBvbmx5IHRoZW4gc2V0cyB0aGUgVVJCX0FDVElWRSBiaXQuICBUaGlzCisgKiBwcmV2ZW50cyB0aGUgc3RvcF90cmFuc3BvcnQoKSBmdW5jdGlvbiBmcm9tIHRyeWluZyB0byBjYW5jZWwgdGhlIFVSQgorICogd2hpbGUgdGhlIHN1Ym1pdCBjYWxsIGlzIHVuZGVyd2F5LiAgTmV4dCwgdGhlIHN1Ym1pdCBmdW5jdGlvbiBtdXN0IHRlc3QKKyAqIHRoZSBmbGFncyB0byBzZWUgaWYgYW4gYWJvcnQgb3IgZGlzY29ubmVjdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHN1Ym1pc3Npb24KKyAqIG9yIGJlZm9yZSB0aGUgVVJCX0FDVElWRSBiaXQgd2FzIHNldC4gIElmIHNvLCBpdCdzIGVzc2VudGlhbCB0byBjYW5jZWwKKyAqIHRoZSBVUkIgaWYgaXQgaGFzbid0IGJlZW4gY2FuY2VsbGVkIGFscmVhZHkgKGkuZS4sIGlmIHRoZSBVUkJfQUNUSVZFIGJpdAorICogaXMgc3RpbGwgc2V0KS4gIEVpdGhlciB3YXksIHRoZSBmdW5jdGlvbiBtdXN0IHRoZW4gd2FpdCBmb3IgdGhlIFVSQiB0bworICogZmluaXNoLiAgTm90ZSB0aGF0IGJlY2F1c2UgdGhlIFVSQl9BU1lOQ19VTkxJTksgZmxhZyBpcyBzZXQsIHRoZSBVUkIgY2FuCisgKiBzdGlsbCBiZSBpbiBwcm9ncmVzcyBldmVuIGFmdGVyIGEgY2FsbCB0byB1c2JfdW5saW5rX3VyYigpIHJldHVybnMuCisgKgorICogVGhlIGlkZWEgaXMgdGhhdCAoMSkgb25jZSB0aGUgQUJPUlRJTkcgb3IgRElTQ09OTkVDVElORyBiaXQgaXMgc2V0LAorICogZWl0aGVyIHRoZSBzdG9wX3RyYW5zcG9ydCgpIGZ1bmN0aW9uIG9yIHRoZSBzdWJtaXR0aW5nIGZ1bmN0aW9uCisgKiBpcyBndWFyYW50ZWVkIHRvIGNhbGwgdXNiX3VubGlua191cmIoKSBmb3IgYW4gYWN0aXZlIFVSQiwKKyAqIGFuZCAoMikgdGVzdF9hbmRfY2xlYXJfYml0KCkgcHJldmVudHMgdXNiX3VubGlua191cmIoKSBmcm9tIGJlaW5nCisgKiBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb3IgZnJvbSBiZWluZyBjYWxsZWQgZHVyaW5nIHVzYl9zdWJtaXRfdXJiKCkuCisgKi8KKworLyogVGhpcyBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdoaWNoIHdpbGwgd2FrZSB1cyB1cCB3aGVuIGFuIFVSQgorICogY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNvbXBsZXRpb24gKnVyYl9kb25lX3B0ciA9IChzdHJ1Y3QgY29tcGxldGlvbiAqKXVyYi0+Y29udGV4dDsKKworCWNvbXBsZXRlKHVyYl9kb25lX3B0cik7Cit9CisgCisvKiBUaGlzIGlzIHRoZSB0aW1lb3V0IGhhbmRsZXIgd2hpY2ggd2lsbCBjYW5jZWwgYW4gVVJCIHdoZW4gaXRzIHRpbWVvdXQKKyAqIGV4cGlyZXMuCisgKi8KK3N0YXRpYyB2b2lkIHRpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIHVzXykKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSAoc3RydWN0IHVzX2RhdGEgKikgdXNfOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIlRpbWVvdXQgLS0gY2FuY2VsbGluZyBVUkJcbiIpOworCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOworCX0KK30KKworLyogVGhpcyBpcyB0aGUgY29tbW9uIHBhcnQgb2YgdGhlIFVSQiBtZXNzYWdlIHN1Ym1pc3Npb24gY29kZQorICoKKyAqIEFsbCBVUkJzIGZyb20gdGhlIHVzYi1zdG9yYWdlIGRyaXZlciBpbnZvbHZlZCBpbiBoYW5kbGluZyBhIHF1ZXVlZCBzY3NpCisgKiBjb21tYW5kIF9tdXN0XyBwYXNzIHRocm91Z2ggdGhpcyBmdW5jdGlvbiAob3Igc29tZXRoaW5nIGxpa2UgaXQpIGZvciB0aGUKKyAqIGFib3J0IG1lY2hhbmlzbXMgdG8gd29yayBwcm9wZXJseS4KKyAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9tc2dfY29tbW9uKHN0cnVjdCB1c19kYXRhICp1cywgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGNvbXBsZXRpb24gdXJiX2RvbmU7CisJc3RydWN0IHRpbWVyX2xpc3QgdG9fdGltZXI7CisJaW50IHN0YXR1czsKKworCS8qIGRvbid0IHN1Ym1pdCBVUkJzIGR1cmluZyBhYm9ydC9kaXNjb25uZWN0IHByb2Nlc3NpbmcgKi8KKwlpZiAodXMtPmZsYWdzICYgQUJPUlRJTkdfT1JfRElTQ09OTkVDVElORykKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBzZXQgdXAgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgd2FrZXVwIHN5c3RlbSAqLworCWluaXRfY29tcGxldGlvbigmdXJiX2RvbmUpOworCisJLyogZmlsbCB0aGUgY29tbW9uIGZpZWxkcyBpbiB0aGUgVVJCICovCisJdXMtPmN1cnJlbnRfdXJiLT5jb250ZXh0ID0gJnVyYl9kb25lOworCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXMtPmN1cnJlbnRfdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJdXMtPmN1cnJlbnRfdXJiLT5zdGF0dXMgPSAwOworCisJLyogd2UgYXNzdW1lIHRoYXQgaWYgdHJhbnNmZXJfYnVmZmVyIGlzbid0IHVzLT5pb2J1ZiB0aGVuIGl0CisJICogaGFzbid0IGJlZW4gbWFwcGVkIGZvciBETUEuICBZZXMsIHRoaXMgaXMgY2x1bmt5LCBidXQgaXQncworCSAqIGVhc2llciB0aGFuIGFsd2F5cyBoYXZpbmcgdGhlIGNhbGxlciB0ZWxsIHVzIHdoZXRoZXIgdGhlCisJICogdHJhbnNmZXIgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gbWFwcGVkLiAqLworCXVzLT5jdXJyZW50X3VyYi0+dHJhbnNmZXJfZmxhZ3MgPQorCQkJVVJCX0FTWU5DX1VOTElOSyB8IFVSQl9OT19TRVRVUF9ETUFfTUFQOworCWlmICh1cy0+Y3VycmVudF91cmItPnRyYW5zZmVyX2J1ZmZlciA9PSB1cy0+aW9idWYpCisJCXVzLT5jdXJyZW50X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJdXMtPmN1cnJlbnRfdXJiLT50cmFuc2Zlcl9kbWEgPSB1cy0+aW9idWZfZG1hOworCXVzLT5jdXJyZW50X3VyYi0+c2V0dXBfZG1hID0gdXMtPmNyX2RtYTsKKworCS8qIHN1Ym1pdCB0aGUgVVJCICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXMtPmN1cnJlbnRfdXJiLCBHRlBfTk9JTyk7CisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIHNpbmNlIHRoZSBVUkIgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSwgaXQncyBub3cgb2theQorCSAqIHRvIGNhbmNlbCBpdCAqLworCXNldF9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncyk7CisKKwkvKiBkaWQgYW4gYWJvcnQvZGlzY29ubmVjdCBvY2N1ciBkdXJpbmcgdGhlIHN1Ym1pc3Npb24/ICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpIHsKKworCQkvKiBjYW5jZWwgdGhlIFVSQiwgaWYgaXQgaGFzbid0IGJlZW4gY2FuY2VsbGVkIGFscmVhZHkgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIFVSQlxuIik7CisJCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOworCQl9CisJfQorIAorCS8qIHN1Ym1pdCB0aGUgdGltZW91dCB0aW1lciwgaWYgYSB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQgKi8KKwlpZiAodGltZW91dCA+IDApIHsKKwkJaW5pdF90aW1lcigmdG9fdGltZXIpOworCQl0b190aW1lci5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJCXRvX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9oYW5kbGVyOworCQl0b190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHVzOworCQlhZGRfdGltZXIoJnRvX3RpbWVyKTsKKwl9CisKKwkvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgVVJCICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmdXJiX2RvbmUpOworCWNsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKTsKKyAKKwkvKiBjbGVhbiB1cCB0aGUgdGltZW91dCB0aW1lciAqLworCWlmICh0aW1lb3V0ID4gMCkKKwkJZGVsX3RpbWVyX3N5bmMoJnRvX3RpbWVyKTsKKworCS8qIHJldHVybiB0aGUgVVJCIHN0YXR1cyAqLworCXJldHVybiB1cy0+Y3VycmVudF91cmItPnN0YXR1czsKK30KKworLyoKKyAqIFRyYW5zZmVyIG9uZSBjb250cm9sIG1lc3NhZ2UsIHdpdGggdGltZW91dHMsIGFuZCBhbGxvd2luZyBlYXJseQorICogdGVybWluYXRpb24uICBSZXR1cm4gY29kZXMgYXJlIHVzdWFsIC1FeHh4LCAqbm90KiBVU0JfU1RPUl9YRkVSX3h4eC4KKyAqLworaW50IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCSB1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIAorCQkgdm9pZCAqZGF0YSwgdTE2IHNpemUsIGludCB0aW1lb3V0KQoreworCWludCBzdGF0dXM7CisKKwlVU19ERUJVR1AoIiVzOiBycT0lMDJ4IHJxdHlwZT0lMDJ4IHZhbHVlPSUwNHggaW5kZXg9JTAyeCBsZW49JXVcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAorCQkJdmFsdWUsIGluZGV4LCBzaXplKTsKKworCS8qIGZpbGwgaW4gdGhlIGRldnJlcXVlc3Qgc3RydWN0dXJlICovCisJdXMtPmNyLT5iUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTsKKwl1cy0+Y3ItPmJSZXF1ZXN0ID0gcmVxdWVzdDsKKwl1cy0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKKwl1cy0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKKwl1cy0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKworCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIAorCQkJICh1bnNpZ25lZCBjaGFyKikgdXMtPmNyLCBkYXRhLCBzaXplLCAKKwkJCSB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwlzdGF0dXMgPSB1c2Jfc3Rvcl9tc2dfY29tbW9uKHVzLCB0aW1lb3V0KTsKKworCS8qIHJldHVybiB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCBpZiBubyBlcnJvciAqLworCWlmIChzdGF0dXMgPT0gMCkKKwkJc3RhdHVzID0gdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHVzYl9jbGVhcl9oYWx0KCkgdGhhdCBhbGxvd3MgZWFybHkgdGVybWluYXRpb24gYW5kCisgKiBkb2Vzbid0IHJlYWQgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgLS0gdGhpcyBpcyBiZWNhdXNlIHNvbWUgZGV2aWNlcworICogY3Jhc2ggdGhlaXIgaW50ZXJuYWwgZmlybXdhcmUgd2hlbiB0aGUgc3RhdHVzIGlzIHJlcXVlc3RlZCBhZnRlciBhIGhhbHQuCisgKgorICogQSBkZWZpbml0aXZlIGxpc3Qgb2YgdGhlc2UgJ2JhZCcgZGV2aWNlcyBpcyB0b28gZGlmZmljdWx0IHRvIG1haW50YWluIG9yCisgKiBtYWtlIGNvbXBsZXRlIGVub3VnaCB0byBiZSB1c2VmdWwuICBUaGlzIHByb2JsZW0gd2FzIGZpcnN0IG9ic2VydmVkIG9uIHRoZQorICogSGFnaXdhcmEgRmxhc2hHYXRlIERVQUwgdW5pdC4gIEhvd2V2ZXIsIGJ1cyB0cmFjZXMgcmV2ZWFsIHRoYXQgbmVpdGhlcgorICogTWFjT1Mgbm9yIFdpbmRvd3MgY2hlY2tzIHRoZSBzdGF0dXMgYWZ0ZXIgY2xlYXJpbmcgYSBoYWx0LgorICoKKyAqIFNpbmNlIG1hbnkgdmVuZG9ycyBpbiB0aGlzIHNwYWNlIGxpbWl0IHRoZWlyIHRlc3RpbmcgdG8gaW50ZXJvcGVyYWJpbGl0eQorICogd2l0aCB0aGVzZSB0d28gT1Nlcywgc3BlY2lmaWNhdGlvbiB2aW9sYXRpb25zIGxpa2UgdGhpcyBvbmUgYXJlIGNvbW1vbi4KKyAqLworaW50IHVzYl9zdG9yX2NsZWFyX2hhbHQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBlbmRwID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKworCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJZW5kcCB8PSBVU0JfRElSX0lOOworCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCVVTQl9FTkRQT0lOVF9IQUxULCBlbmRwLAorCQlOVUxMLCAwLCAzKkhaKTsKKworCS8qIHJlc2V0IHRoZSBlbmRwb2ludCB0b2dnbGUgKi8KKwl1c2Jfc2V0dG9nZ2xlKHVzLT5wdXNiX2RldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSwKKwkJdXNiX3BpcGVvdXQocGlwZSksIDApOworCisJVVNfREVCVUdQKCIlczogcmVzdWx0ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qCisgKiBJbnRlcnByZXQgdGhlIHJlc3VsdHMgb2YgYSBVUkIgdHJhbnNmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByaW50cyBhcHByb3ByaWF0ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGNsZWFycyBoYWx0cyBvbgorICogbm9uLWNvbnRyb2wgZW5kcG9pbnRzLCBhbmQgdHJhbnNsYXRlcyB0aGUgc3RhdHVzIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgKiBVU0JfU1RPUl9YRkVSX3h4eCByZXR1cm4gY29kZS4KKyAqLworc3RhdGljIGludCBpbnRlcnByZXRfdXJiX3Jlc3VsdChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgcmVzdWx0LCB1bnNpZ25lZCBpbnQgcGFydGlhbCkKK3sKKwlVU19ERUJVR1AoIlN0YXR1cyBjb2RlICVkOyB0cmFuc2ZlcnJlZCAldS8ldVxuIiwKKwkJCXJlc3VsdCwgcGFydGlhbCwgbGVuZ3RoKTsKKwlzd2l0Y2ggKHJlc3VsdCkgeworCisJLyogbm8gZXJyb3IgY29kZTsgZGlkIHdlIHNlbmQgYWxsIHRoZSBkYXRhPyAqLworCWNhc2UgMDoKKwkJaWYgKHBhcnRpYWwgIT0gbGVuZ3RoKSB7CisJCQlVU19ERUJVR1AoIi0tIHNob3J0IHRyYW5zZmVyXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9YRkVSX1NIT1JUOworCQl9CisKKwkJVVNfREVCVUdQKCItLSB0cmFuc2ZlciBjb21wbGV0ZVxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwkvKiBzdGFsbGVkICovCisJY2FzZSAtRVBJUEU6CisJCS8qIGZvciBjb250cm9sIGVuZHBvaW50cywgKHVzZWQgYnkgQ0JbSV0pIGEgc3RhbGwgaW5kaWNhdGVzCisJCSAqIGEgZmFpbGVkIGNvbW1hbmQgKi8KKwkJaWYgKHVzYl9waXBlY29udHJvbChwaXBlKSkgeworCQkJVVNfREVCVUdQKCItLSBzdGFsbCBvbiBjb250cm9sIHBpcGVcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfU1RBTExFRDsKKwkJfQorCisJCS8qIGZvciBvdGhlciBzb3J0cyBvZiBlbmRwb2ludCwgY2xlYXIgdGhlIHN0YWxsICovCisJCVVTX0RFQlVHUCgiY2xlYXJpbmcgZW5kcG9pbnQgaGFsdCBmb3IgcGlwZSAweCV4XG4iLCBwaXBlKTsKKwkJaWYgKHVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHBpcGUpIDwgMCkKKwkJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9TVEFMTEVEOworCisJLyogdGltZW91dCBvciBleGNlc3NpdmVseSBsb25nIE5BSyAqLworCWNhc2UgLUVUSU1FRE9VVDoKKwkJVVNfREVCVUdQKCItLSB0aW1lb3V0IG9yIE5BS1xuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCisJLyogYmFiYmxlIC0gdGhlIGRldmljZSB0cmllZCB0byBzZW5kIG1vcmUgdGhhbiB3ZSB3YW50ZWQgdG8gcmVhZCAqLworCWNhc2UgLUVPVkVSRkxPVzoKKwkJVVNfREVCVUdQKCItLSBiYWJibGVcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9MT05HOworCisJLyogdGhlIHRyYW5zZmVyIHdhcyBjYW5jZWxsZWQgYnkgYWJvcnQsIGRpc2Nvbm5lY3QsIG9yIHRpbWVvdXQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgorCQlVU19ERUJVR1AoIi0tIHRyYW5zZmVyIGNhbmNlbGxlZFxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCisJLyogc2hvcnQgc2NhdHRlci1nYXRoZXIgcmVhZCB0cmFuc2ZlciAqLworCWNhc2UgLUVSRU1PVEVJTzoKKwkJVVNfREVCVUdQKCItLSBzaG9ydCByZWFkIHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfU0hPUlQ7CisKKwkvKiBhYm9ydCBvciBkaXNjb25uZWN0IGluIHByb2dyZXNzICovCisJY2FzZSAtRUlPOgorCQlVU19ERUJVR1AoIi0tIGFib3J0IG9yIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKworCS8qIHRoZSBjYXRjaC1hbGwgZXJyb3IgY2FzZSAqLworCWRlZmF1bHQ6CisJCVVTX0RFQlVHUCgiLS0gdW5rbm93biBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCX0KK30KKworLyoKKyAqIFRyYW5zZmVyIG9uZSBjb250cm9sIG1lc3NhZ2UsIHdpdGhvdXQgdGltZW91dHMsIGJ1dCBhbGxvd2luZyBlYXJseQorICogdGVybWluYXRpb24uICBSZXR1cm4gY29kZXMgYXJlIFVTQl9TVE9SX1hGRVJfeHh4LgorICovCitpbnQgdXNiX3N0b3JfY3RybF90cmFuc2ZlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCXZvaWQgKmRhdGEsIHUxNiBzaXplKQoreworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIiVzOiBycT0lMDJ4IHJxdHlwZT0lMDJ4IHZhbHVlPSUwNHggaW5kZXg9JTAyeCBsZW49JXVcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAorCQkJdmFsdWUsIGluZGV4LCBzaXplKTsKKworCS8qIGZpbGwgaW4gdGhlIGRldnJlcXVlc3Qgc3RydWN0dXJlICovCisJdXMtPmNyLT5iUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTsKKwl1cy0+Y3ItPmJSZXF1ZXN0ID0gcmVxdWVzdDsKKwl1cy0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKKwl1cy0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKKwl1cy0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKworCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIAorCQkJICh1bnNpZ25lZCBjaGFyKikgdXMtPmNyLCBkYXRhLCBzaXplLCAKKwkJCSB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9tc2dfY29tbW9uKHVzLCAwKTsKKworCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgc2l6ZSwgcmVzdWx0LAorCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKK30KKworLyoKKyAqIFJlY2VpdmUgb25lIGludGVycnVwdCBidWZmZXIsIHdpdGhvdXQgdGltZW91dHMsIGJ1dCBhbGxvd2luZyBlYXJseQorICogdGVybWluYXRpb24uICBSZXR1cm4gY29kZXMgYXJlIFVTQl9TVE9SX1hGRVJfeHh4LgorICoKKyAqIFRoaXMgcm91dGluZSBhbHdheXMgdXNlcyB1cy0+cmVjdl9pbnRyX3BpcGUgYXMgdGhlIHBpcGUgYW5kCisgKiB1cy0+ZXBfYkludGVydmFsIGFzIHRoZSBpbnRlcnJ1cHQgaW50ZXJ2YWwuCisgKi8KK3N0YXRpYyBpbnQgdXNiX3N0b3JfaW50cl90cmFuc2ZlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHZvaWQgKmJ1ZiwKKwkJCQkgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzLT5yZWN2X2ludHJfcGlwZTsKKwl1bnNpZ25lZCBpbnQgbWF4cDsKKworCVVTX0RFQlVHUCgiJXM6IHhmZXIgJXUgYnl0ZXNcbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgbWF4IHBhY2tldCBzaXplICovCisJbWF4cCA9IHVzYl9tYXhwYWNrZXQodXMtPnB1c2JfZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJaWYgKG1heHAgPiBsZW5ndGgpCisJCW1heHAgPSBsZW5ndGg7CisKKwkvKiBmaWxsIGFuZCBzdWJtaXQgdGhlIFVSQiAqLworCXVzYl9maWxsX2ludF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIGJ1ZiwKKwkJCW1heHAsIHVzYl9zdG9yX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwsCisJCQl1cy0+ZXBfYkludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9tc2dfY29tbW9uKHVzLCAwKTsKKworCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsCisJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOworfQorCisvKgorICogVHJhbnNmZXIgb25lIGJ1ZmZlciB2aWEgYnVsayBwaXBlLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKKyAqIHRlcm1pbmF0aW9uLiAgUmV0dXJuIGNvZGVzIGFyZSBVU0JfU1RPUl9YRkVSX3h4eC4gIElmIHRoZSBidWxrIHBpcGUKKyAqIHN0YWxscyBkdXJpbmcgdGhlIHRyYW5zZmVyLCB0aGUgaGFsdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQuCisgKi8KK2ludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50ICphY3RfbGVuKQoreworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIiVzOiB4ZmVyICV1IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisKKwkvKiBmaWxsIGFuZCBzdWJtaXQgdGhlIFVSQiAqLworCXVzYl9maWxsX2J1bGtfdXJiKHVzLT5jdXJyZW50X3VyYiwgdXMtPnB1c2JfZGV2LCBwaXBlLCBidWYsIGxlbmd0aCwKKwkJICAgICAgdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisJcmVzdWx0ID0gdXNiX3N0b3JfbXNnX2NvbW1vbih1cywgMCk7CisKKwkvKiBzdG9yZSB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCAqLworCWlmIChhY3RfbGVuKQorCQkqYWN0X2xlbiA9IHVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aDsKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LCAKKwkJCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCk7Cit9CisKKy8qCisgKiBUcmFuc2ZlciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgdmlhIGJ1bGsgdHJhbnNmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYmFzaWNhbGx5IHRoZSBzYW1lIHRoaW5nIGFzIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKCkKKyAqIGFib3ZlLCBidXQgaXQgdXNlcyB0aGUgdXNiY29yZSBzY2F0dGVyLWdhdGhlciBsaWJyYXJ5LgorICovCitzdGF0aWMgaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0KHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fc2csIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCXVuc2lnbmVkIGludCAqYWN0X2xlbikKK3sKKwlpbnQgcmVzdWx0OworCisJLyogZG9uJ3Qgc3VibWl0IHMtZyByZXF1ZXN0cyBkdXJpbmcgYWJvcnQvZGlzY29ubmVjdCBwcm9jZXNzaW5nICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCisJLyogaW5pdGlhbGl6ZSB0aGUgc2NhdHRlci1nYXRoZXIgcmVxdWVzdCBibG9jayAqLworCVVTX0RFQlVHUCgiJXM6IHhmZXIgJXUgYnl0ZXMsICVkIGVudHJpZXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWxlbmd0aCwgbnVtX3NnKTsKKwlyZXN1bHQgPSB1c2Jfc2dfaW5pdCgmdXMtPmN1cnJlbnRfc2csIHVzLT5wdXNiX2RldiwgcGlwZSwgMCwKKwkJCXNnLCBudW1fc2csIGxlbmd0aCwgU0xBQl9OT0lPKTsKKwlpZiAocmVzdWx0KSB7CisJCVVTX0RFQlVHUCgidXNiX3NnX2luaXQgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCX0KKworCS8qIHNpbmNlIHRoZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHksIGl0J3Mgbm93CisJICogb2theSB0byBjYW5jZWwgaXQgKi8KKwlzZXRfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncyk7CisKKwkvKiBkaWQgYW4gYWJvcnQvZGlzY29ubmVjdCBvY2N1ciBkdXJpbmcgdGhlIHN1Ym1pc3Npb24/ICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpIHsKKworCQkvKiBjYW5jZWwgdGhlIHJlcXVlc3QsIGlmIGl0IGhhc24ndCBiZWVuIGNhbmNlbGxlZCBhbHJlYWR5ICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOworCQkJdXNiX3NnX2NhbmNlbCgmdXMtPmN1cnJlbnRfc2cpOworCQl9CisJfQorCisJLyogd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRyYW5zZmVyICovCisJdXNiX3NnX3dhaXQoJnVzLT5jdXJyZW50X3NnKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmZsYWdzKTsKKworCXJlc3VsdCA9IHVzLT5jdXJyZW50X3NnLnN0YXR1czsKKwlpZiAoYWN0X2xlbikKKwkJKmFjdF9sZW4gPSB1cy0+Y3VycmVudF9zZy5ieXRlczsKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LAorCQkJdXMtPmN1cnJlbnRfc2cuYnl0ZXMpOworfQorCisvKgorICogVHJhbnNmZXIgYW4gZW50aXJlIFNDU0kgY29tbWFuZCdzIHdvcnRoIG9mIGRhdGEgcGF5bG9hZCBvdmVyIHRoZSBidWxrCisgKiBwaXBlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHVzZXMgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYoKSBhbmQKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0KCkgdG8gYWNoaWV2ZSBpdHMgZ29hbHMgLS0KKyAqIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGRldGVybWluZXMgd2hldGhlciB3ZSdyZSBnb2luZyB0byB1c2UKKyAqIHNjYXR0ZXItZ2F0aGVyIG9yIG5vdCwgYW5kIGFjdHMgYXBwcm9wcmlhdGVseS4KKyAqLworaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2coc3RydWN0IHVzX2RhdGEqIHVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xlZnQsIGludCB1c2Vfc2csIGludCAqcmVzaWR1YWwpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKworCS8qIGFyZSB3ZSBzY2F0dGVyLWdhdGhlcmluZz8gKi8KKwlpZiAodXNlX3NnKSB7CisJCS8qIHVzZSB0aGUgdXNiIGNvcmUgc2NhdHRlci1nYXRoZXIgcHJpbWl0aXZlcyAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdCh1cywgcGlwZSwKKwkJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopIGJ1ZiwgdXNlX3NnLAorCQkJCWxlbmd0aF9sZWZ0LCAmcGFydGlhbCk7CisJCWxlbmd0aF9sZWZ0IC09IHBhcnRpYWw7CisJfSBlbHNlIHsKKwkJLyogbm8gc2NhdHRlci1nYXRoZXIsIGp1c3QgbWFrZSB0aGUgcmVxdWVzdCAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgcGlwZSwgYnVmLCAKKwkJCQlsZW5ndGhfbGVmdCwgJnBhcnRpYWwpOworCQlsZW5ndGhfbGVmdCAtPSBwYXJ0aWFsOworCX0KKworCS8qIHN0b3JlIHRoZSByZXNpZHVhbCBhbmQgcmV0dXJuIHRoZSBlcnJvciBjb2RlICovCisJaWYgKHJlc2lkdWFsKQorCQkqcmVzaWR1YWwgPSBsZW5ndGhfbGVmdDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRyYW5zcG9ydCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbnZva2UgdGhlIHRyYW5zcG9ydCBhbmQgYmFzaWMgZXJyb3ItaGFuZGxpbmcvcmVjb3ZlcnkgbWV0aG9kcworICoKKyAqIFRoaXMgaXMgdXNlZCBieSB0aGUgcHJvdG9jb2wgbGF5ZXJzIHRvIGFjdHVhbGx5IHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqIHRoZSBkZXZpY2UgYW5kIHJlY2VpdmUgdGhlIHJlc3BvbnNlLgorICovCit2b2lkIHVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IG5lZWRfYXV0b19zZW5zZTsKKwlpbnQgcmVzdWx0OworCisJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCisJc3JiLT5yZXNpZCA9IDA7CisJcmVzdWx0ID0gdXMtPnRyYW5zcG9ydChzcmIsIHVzKTsKKworCS8qIGlmIHRoZSBjb21tYW5kIGdldHMgYWJvcnRlZCBieSB0aGUgaGlnaGVyIGxheWVycywgd2UgbmVlZCB0bworCSAqIHNob3J0LWNpcmN1aXQgYWxsIG90aGVyIHByb2Nlc3NpbmcKKwkgKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIi0tIGNvbW1hbmQgd2FzIGFib3J0ZWRcbiIpOworCQlnb3RvIEhhbmRsZV9BYm9ydDsKKwl9CisKKwkvKiBpZiB0aGVyZSBpcyBhIHRyYW5zcG9ydCBlcnJvciwgcmVzZXQgYW5kIGRvbid0IGF1dG8tc2Vuc2UgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUikgeworCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgZXJyb3IsIHJlc2V0dGluZ1xuIik7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQodXMpOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHRoZSB0cmFuc3BvcnQgcHJvdmlkZWQgaXRzIG93biBzZW5zZSBkYXRhLCBkb24ndCBhdXRvLXNlbnNlICovCisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UpIHsKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCXJldHVybjsKKwl9CisKKwlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBhdXRvLXNlbnNlCisJICoKKwkgKiBJIG5vcm1hbGx5IGRvbid0IHVzZSBhIGZsYWcgbGlrZSB0aGlzLCBidXQgaXQncyBhbG1vc3QgaW1wb3NzaWJsZQorCSAqIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIGhlcmUgaWYgSSBkb24ndC4KKwkgKi8KKwluZWVkX2F1dG9fc2Vuc2UgPSAwOworCisJLyoKKwkgKiBJZiB3ZSdyZSBydW5uaW5nIHRoZSBDQiB0cmFuc3BvcnQsIHdoaWNoIGlzIGluY2FwYWJsZQorCSAqIG9mIGRldGVybWluaW5nIHN0YXR1cyBvbiBpdHMgb3duLCB3ZSB3aWxsIGF1dG8tc2Vuc2UKKwkgKiB1bmxlc3MgdGhlIG9wZXJhdGlvbiBpbnZvbHZlZCBhIGRhdGEtaW4gdHJhbnNmZXIuICBEZXZpY2VzCisJICogY2FuIHNpZ25hbCBtb3N0IGRhdGEtaW4gZXJyb3JzIGJ5IHN0YWxsaW5nIHRoZSBidWxrLWluIHBpcGUuCisJICovCisJaWYgKCh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfQ0IgfHwgdXMtPnByb3RvY29sID09IFVTX1BSX0RQQ01fVVNCKSAmJgorCQkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJVVNfREVCVUdQKCItLSBDQiB0cmFuc3BvcnQgZGV2aWNlIHJlcXVpcmluZyBhdXRvLXNlbnNlXG4iKTsKKwkJbmVlZF9hdXRvX3NlbnNlID0gMTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBmYWlsdXJlLCB3ZSdyZSBnb2luZyB0byBkbyBhIFJFUVVFU1RfU0VOU0UgCisJICogYXV0b21hdGljYWxseS4gIE5vdGUgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBjb21tYW5kCisJICogImZhaWx1cmUiIGFuZCBhbiAiZXJyb3IiIGluIHRoZSB0cmFuc3BvcnQgbWVjaGFuaXNtLgorCSAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCkgeworCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgY29tbWFuZCBmYWlsdXJlXG4iKTsKKwkJbmVlZF9hdXRvX3NlbnNlID0gMTsKKwl9CisKKwkvKgorCSAqIEEgc2hvcnQgdHJhbnNmZXIgb24gYSBjb21tYW5kIHdoZXJlIHdlIGRvbid0IGV4cGVjdCBpdAorCSAqIGlzIHVudXN1YWwsIGJ1dCBpdCBkb2Vzbid0IG1lYW4gd2UgbmVlZCB0byBhdXRvLXNlbnNlLgorCSAqLworCWlmICgoc3JiLT5yZXNpZCA+IDApICYmCisJICAgICEoKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgfHwKKwkgICAgICAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBMT0dfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSkpIHsKKwkJVVNfREVCVUdQKCItLSB1bmV4cGVjdGVkbHkgc2hvcnQgdHJhbnNmZXJcbiIpOworCX0KKworCS8qIE5vdywgaWYgd2UgbmVlZCB0byBkbyB0aGUgYXV0by1zZW5zZSwgbGV0J3MgZG8gaXQgKi8KKwlpZiAobmVlZF9hdXRvX3NlbnNlKSB7CisJCWludCB0ZW1wX3Jlc3VsdDsKKwkJdm9pZCogb2xkX3JlcXVlc3RfYnVmZmVyOworCQl1bnNpZ25lZCBzaG9ydCBvbGRfc2c7CisJCXVuc2lnbmVkIG9sZF9yZXF1ZXN0X2J1ZmZsZW47CisJCXVuc2lnbmVkIGNoYXIgb2xkX3NjX2RhdGFfZGlyZWN0aW9uOworCQl1bnNpZ25lZCBjaGFyIG9sZF9jbWRfbGVuOworCQl1bnNpZ25lZCBjaGFyIG9sZF9jbW5kW01BWF9DT01NQU5EX1NJWkVdOworCQl1bnNpZ25lZCBsb25nIG9sZF9zZXJpYWxfbnVtYmVyOworCQlpbnQgb2xkX3Jlc2lkOworCisJCVVTX0RFQlVHUCgiSXNzdWluZyBhdXRvLVJFUVVFU1RfU0VOU0VcbiIpOworCisJCS8qIHNhdmUgdGhlIG9sZCBjb21tYW5kICovCisJCW1lbWNweShvbGRfY21uZCwgc3JiLT5jbW5kLCBNQVhfQ09NTUFORF9TSVpFKTsKKwkJb2xkX2NtZF9sZW4gPSBzcmItPmNtZF9sZW47CisKKwkJLyogc2V0IHRoZSBjb21tYW5kIGFuZCB0aGUgTFVOICovCisJCW1lbXNldChzcmItPmNtbmQsIDAsIE1BWF9DT01NQU5EX1NJWkUpOworCQlzcmItPmNtbmRbMF0gPSBSRVFVRVNUX1NFTlNFOworCQlzcmItPmNtbmRbMV0gPSBvbGRfY21uZFsxXSAmIDB4RTA7CisJCXNyYi0+Y21uZFs0XSA9IDE4OworCisJCS8qIEZJWE1FOiB3ZSBtdXN0IGRvIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBoZXJlICovCisJCWlmICh1cy0+c3ViY2xhc3MgPT0gVVNfU0NfUkJDIHx8IHVzLT5zdWJjbGFzcyA9PSBVU19TQ19TQ1NJKQorCQkJc3JiLT5jbWRfbGVuID0gNjsKKwkJZWxzZQorCQkJc3JiLT5jbWRfbGVuID0gMTI7CisKKwkJLyogc2V0IHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKwkJb2xkX3NjX2RhdGFfZGlyZWN0aW9uID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbjsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKworCQkvKiB1c2UgdGhlIG5ldyBidWZmZXIgd2UgaGF2ZSAqLworCQlvbGRfcmVxdWVzdF9idWZmZXIgPSBzcmItPnJlcXVlc3RfYnVmZmVyOworCQlzcmItPnJlcXVlc3RfYnVmZmVyID0gc3JiLT5zZW5zZV9idWZmZXI7CisKKwkJLyogc2V0IHRoZSBidWZmZXIgbGVuZ3RoIGZvciB0cmFuc2ZlciAqLworCQlvbGRfcmVxdWVzdF9idWZmbGVuID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMTg7CisKKwkJLyogc2V0IHVwIGZvciBubyBzY2F0dGVyLWdhdGhlciB1c2UgKi8KKwkJb2xkX3NnID0gc3JiLT51c2Vfc2c7CisJCXNyYi0+dXNlX3NnID0gMDsKKworCQkvKiBjaGFuZ2UgdGhlIHNlcmlhbCBudW1iZXIgLS0gdG9nZ2xlIHRoZSBoaWdoIGJpdCovCisJCW9sZF9zZXJpYWxfbnVtYmVyID0gc3JiLT5zZXJpYWxfbnVtYmVyOworCQlzcmItPnNlcmlhbF9udW1iZXIgXj0gMHg4MDAwMDAwMDsKKworCQkvKiBpc3N1ZSB0aGUgYXV0by1zZW5zZSBjb21tYW5kICovCisJCW9sZF9yZXNpZCA9IHNyYi0+cmVzaWQ7CisJCXNyYi0+cmVzaWQgPSAwOworCQl0ZW1wX3Jlc3VsdCA9IHVzLT50cmFuc3BvcnQodXMtPnNyYiwgdXMpOworCisJCS8qIGxldCdzIGNsZWFuIHVwIHJpZ2h0IGF3YXkgKi8KKwkJc3JiLT5yZXNpZCA9IG9sZF9yZXNpZDsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZlciA9IG9sZF9yZXF1ZXN0X2J1ZmZlcjsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSBvbGRfcmVxdWVzdF9idWZmbGVuOworCQlzcmItPnVzZV9zZyA9IG9sZF9zZzsKKwkJc3JiLT5zZXJpYWxfbnVtYmVyID0gb2xkX3NlcmlhbF9udW1iZXI7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBvbGRfc2NfZGF0YV9kaXJlY3Rpb247CisJCXNyYi0+Y21kX2xlbiA9IG9sZF9jbWRfbGVuOworCQltZW1jcHkoc3JiLT5jbW5kLCBvbGRfY21uZCwgTUFYX0NPTU1BTkRfU0laRSk7CisKKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBhYm9ydGVkXG4iKTsKKwkJCWdvdG8gSGFuZGxlX0Fib3J0OworCQl9CisJCWlmICh0ZW1wX3Jlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGZhaWx1cmVcbiIpOworCisJCQkvKiB3ZSBza2lwIHRoZSByZXNldCBpZiB0aGlzIGhhcHBlbnMgdG8gYmUgYQorCQkJICogbXVsdGktdGFyZ2V0IGRldmljZSwgc2luY2UgZmFpbHVyZSBvZiBhbgorCQkJICogYXV0by1zZW5zZSBpcyBwZXJmZWN0bHkgdmFsaWQKKwkJCSAqLworCQkJaWYgKCEodXMtPmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykpCisJCQkJdXMtPnRyYW5zcG9ydF9yZXNldCh1cyk7CisJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCXJldHVybjsKKwkJfQorCisJCVVTX0RFQlVHUCgiLS0gUmVzdWx0IGZyb20gYXV0by1zZW5zZSBpcyAlZFxuIiwgdGVtcF9yZXN1bHQpOworCQlVU19ERUJVR1AoIi0tIGNvZGU6IDB4JXgsIGtleTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclswXSwKKwkJCSAgc3JiLT5zZW5zZV9idWZmZXJbMl0gJiAweGYsCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzEyXSwgCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzEzXSk7CisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHCisJCXVzYl9zdG9yX3Nob3dfc2Vuc2UoCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhmLAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsxMl0sIAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsxM10pOworI2VuZGlmCisKKwkJLyogc2V0IHRoZSByZXN1bHQgc28gdGhlIGhpZ2hlciBsYXllcnMgZXhwZWN0IHRoaXMgZGF0YSAqLworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKworCQkvKiBJZiB0aGluZ3MgYXJlIHJlYWxseSBva2F5LCB0aGVuIGxldCdzIHNob3cgdGhhdC4gIFplcm8KKwkJICogb3V0IHRoZSBzZW5zZSBidWZmZXIgc28gdGhlIGhpZ2hlciBsYXllcnMgd29uJ3QgcmVhbGl6ZQorCQkgKiB3ZSBkaWQgYW4gdW5zb2xpY2l0ZWQgYXV0by1zZW5zZS4gKi8KKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJgorCQkJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCisJCQkJKHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhhZikgPT0gMCAmJgorCQkJLyogTm8gQVNDIG9yIEFTQ1EgKi8KKwkJCQlzcmItPnNlbnNlX2J1ZmZlclsxMl0gPT0gMCAmJgorCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEzXSA9PSAwKSB7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDB4MDsKKwkJfQorCX0KKworCS8qIERpZCB3ZSB0cmFuc2ZlciBsZXNzIHRoYW4gdGhlIG1pbmltdW0gYW1vdW50IHJlcXVpcmVkPyAqLworCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EICYmCisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiAtIHNyYi0+cmVzaWQgPCBzcmItPnVuZGVyZmxvdykKKwkJc3JiLT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KSB8IChTVUdHRVNUX1JFVFJZIDw8IDI0KTsKKworCXJldHVybjsKKworCS8qIGFib3J0IHByb2Nlc3Npbmc6IHRoZSBidWxrLW9ubHkgdHJhbnNwb3J0IHJlcXVpcmVzIGEgcmVzZXQKKwkgKiBmb2xsb3dpbmcgYW4gYWJvcnQgKi8KKyAgSGFuZGxlX0Fib3J0OgorCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfQlVMSykKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCh1cyk7Cit9CisKKy8qIFN0b3AgdGhlIGN1cnJlbnQgVVJCIHRyYW5zZmVyICovCit2b2lkIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIElmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIGJsb2NrZWQgd2FpdGluZyBmb3IgYW4gVVJCLAorCSAqIGxldCdzIHdha2UgaXQgdXAuICBUaGUgdGVzdF9hbmRfY2xlYXJfYml0KCkgY2FsbAorCSAqIGd1YXJhbnRlZXMgdGhhdCBpZiBhIFVSQiBoYXMganVzdCBiZWVuIHN1Ym1pdHRlZCwKKwkgKiBpdCB3b24ndCBiZSBjYW5jZWxsZWQgbW9yZSB0aGFuIG9uY2UuICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIi0tIGNhbmNlbGxpbmcgVVJCXG4iKTsKKwkJdXNiX3VubGlua191cmIodXMtPmN1cnJlbnRfdXJiKTsKKwl9CisKKwkvKiBJZiB3ZSBhcmUgd2FpdGluZyBmb3IgYSBzY2F0dGVyLWdhdGhlciBvcGVyYXRpb24sIGNhbmNlbCBpdC4gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOworCQl1c2Jfc2dfY2FuY2VsKCZ1cy0+Y3VycmVudF9zZyk7CisJfQorfQorCisvKgorICogQ29udHJvbC9CdWxrL0ludGVycnVwdCB0cmFuc3BvcnQKKyAqLworCitpbnQgdXNiX3N0b3JfQ0JJX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJdW5zaWduZWQgaW50IHBpcGUgPSAwOworCWludCByZXN1bHQ7CisKKwkvKiBDT01NQU5EIFNUQUdFICovCisJLyogbGV0J3Mgc2VuZCB0aGUgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgcGlwZSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCQkgICAgICBVU19DQklfQURTQywgCisJCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAKKwkJCQkgICAgICB1cy0+aWZudW0sIHNyYi0+Y21uZCwgc3JiLT5jbWRfbGVuKTsKKworCS8qIGNoZWNrIHRoZSByZXR1cm4gY29kZSBmb3IgdGhlIGNvbW1hbmQgKi8KKwlVU19ERUJVR1AoIkNhbGwgdG8gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXN1bHQpOworCisJLyogaWYgd2Ugc3RhbGxlZCB0aGUgY29tbWFuZCwgaXQgbWVhbnMgY29tbWFuZCBmYWlsZWQgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwkvKiBVaCBvaC4uLiBzZXJpb3VzIHByb2JsZW0gaGVyZSAqLworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogREFUQSBTVEFHRSAqLworCS8qIHRyYW5zZmVyIHRoZSBkYXRhIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCwgaWYgb25lIGV4aXN0cyovCisJaWYgKHRyYW5zZmVyX2xlbmd0aCkgeworCQlwaXBlID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgPyAKKwkJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIHRyYW5zZmVyX2xlbmd0aCwKKwkJCQkJc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwkJVVNfREVCVUdQKCJDQkkgZGF0YSBzdGFnZSByZXN1bHQgaXMgMHgleFxuIiwgcmVzdWx0KTsKKworCQkvKiBpZiB3ZSBzdGFsbGVkIHRoZSBkYXRhIHRyYW5zZmVyIGl0IG1lYW5zIGNvbW1hbmQgZmFpbGVkICovCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCWlmIChyZXN1bHQgPiBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIFNUQVRVUyBTVEFHRSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2ludHJfdHJhbnNmZXIodXMsIHVzLT5pb2J1ZiwgMik7CisJVVNfREVCVUdQKCJHb3QgaW50ZXJydXB0IGRhdGEgKDB4JXgsIDB4JXgpXG4iLCAKKwkJCXVzLT5pb2J1ZlswXSwgdXMtPmlvYnVmWzFdKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8qIFVGSSBnaXZlcyB1cyBBU0MgYW5kIEFTQ1EsIGxpa2UgYSByZXF1ZXN0IHNlbnNlCisJICoKKwkgKiBSRVFVRVNUX1NFTlNFIGFuZCBJTlFVSVJZIGRvbid0IGFmZmVjdCB0aGUgc2Vuc2UgZGF0YSBvbiBVRkkKKwkgKiBkZXZpY2VzLCBzbyB3ZSBpZ25vcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aG9zZSBjb21tYW5kcy4gIE5vdGUKKwkgKiB0aGF0IHRoaXMgbWVhbnMgd2UgY291bGQgYmUgaWdub3JpbmcgYSByZWFsIGVycm9yIG9uIHRoZXNlCisJICogY29tbWFuZHMsIGJ1dCB0aGF0IGNhbid0IGJlIGhlbHBlZC4KKwkgKi8KKwlpZiAodXMtPnN1YmNsYXNzID09IFVTX1NDX1VGSSkgeworCQlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UgfHwKKwkJICAgIHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQlpZiAodXMtPmlvYnVmWzBdKQorCQkJZ290byBGYWlsZWQ7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwkvKiBJZiBub3QgVUZJLCB3ZSBpbnRlcnByZXQgdGhlIGRhdGEgYXMgYSByZXN1bHQgY29kZSAKKwkgKiBUaGUgZmlyc3QgYnl0ZSBzaG91bGQgYWx3YXlzIGJlIGEgMHgwLgorCSAqCisJICogU29tZSBib2d1cyBkZXZpY2VzIGRvbid0IGZvbGxvdyB0aGF0IHJ1bGUuICBUaGV5IHN0dWZmIHRoZSBBU0MKKwkgKiBpbnRvIHRoZSBmaXJzdCBieXRlIC0tIHNvIGlmIGl0J3Mgbm9uLXplcm8sIGNhbGwgaXQgYSBmYWlsdXJlLgorCSAqLworCWlmICh1cy0+aW9idWZbMF0pIHsKKwkJVVNfREVCVUdQKCJDQkkgSVJRIGRhdGEgc2hvd2VkIHJlc2VydmVkIGJUeXBlIDB4JXhcbiIsCisJCQkJdXMtPmlvYnVmWzBdKTsKKwkJZ290byBGYWlsZWQ7CisKKwl9CisKKwkvKiBUaGUgc2Vjb25kIGJ5dGUgJiAweDBGIHNob3VsZCBiZSAweDAgZm9yIGdvb2QsIG90aGVyd2lzZSBlcnJvciAqLworCXN3aXRjaCAodXMtPmlvYnVmWzFdICYgMHgwRikgeworCQljYXNlIDB4MDA6IAorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQljYXNlIDB4MDE6IAorCQkJZ290byBGYWlsZWQ7CisJfQorCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvKiB0aGUgQ0JJIHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUgYnVsayBwaXBlIG11c3QgYmUgY2xlYXJlZAorCSAqIGZvbGxvd2luZyBhbnkgZGF0YS1pbi9vdXQgY29tbWFuZCBmYWlsdXJlIChzZWN0aW9uIDIuNC4zLjEuMykKKwkgKi8KKyAgRmFpbGVkOgorCWlmIChwaXBlKQorCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCBwaXBlKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKworLyoKKyAqIENvbnRyb2wvQnVsayB0cmFuc3BvcnQKKyAqLworaW50IHVzYl9zdG9yX0NCX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJaW50IHJlc3VsdDsKKworCS8qIENPTU1BTkQgU1RBR0UgKi8KKwkvKiBsZXQncyBzZW5kIHRoZSBjb21tYW5kIHZpYSB0aGUgY29udHJvbCBwaXBlICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJCSAgICAgIFVTX0NCSV9BRFNDLCAKKwkJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIAorCQkJCSAgICAgIHVzLT5pZm51bSwgc3JiLT5jbW5kLCBzcmItPmNtZF9sZW4pOworCisJLyogY2hlY2sgdGhlIHJldHVybiBjb2RlIGZvciB0aGUgY29tbWFuZCAqLworCVVTX0RFQlVHUCgiQ2FsbCB0byB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKCkgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CisKKwkvKiBpZiB3ZSBzdGFsbGVkIHRoZSBjb21tYW5kLCBpdCBtZWFucyBjb21tYW5kIGZhaWxlZCAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKSB7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCS8qIFVoIG9oLi4uIHNlcmlvdXMgcHJvYmxlbSBoZXJlICovCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiBEQVRBIFNUQUdFICovCisJLyogdHJhbnNmZXIgdGhlIGRhdGEgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kLCBpZiBvbmUgZXhpc3RzKi8KKwlpZiAodHJhbnNmZXJfbGVuZ3RoKSB7CisJCXVuc2lnbmVkIGludCBwaXBlID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgPyAKKwkJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIHRyYW5zZmVyX2xlbmd0aCwKKwkJCQkJc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwkJVVNfREVCVUdQKCJDQiBkYXRhIHN0YWdlIHJlc3VsdCBpcyAweCV4XG4iLCByZXN1bHQpOworCisJCS8qIGlmIHdlIHN0YWxsZWQgdGhlIGRhdGEgdHJhbnNmZXIgaXQgbWVhbnMgY29tbWFuZCBmYWlsZWQgKi8KKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJaWYgKHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogU1RBVFVTIFNUQUdFICovCisJLyogTk9URTogQ0IgZG9lcyBub3QgaGF2ZSBhIHN0YXR1cyBzdGFnZS4gIFNpbGx5LCBJIGtub3cuICBTbworCSAqIHdlIGhhdmUgdG8gY2F0Y2ggdGhpcyBhdCBhIGhpZ2hlciBsZXZlbC4KKwkgKi8KKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBCdWxrIG9ubHkgdHJhbnNwb3J0CisgKi8KKworLyogRGV0ZXJtaW5lIHdoYXQgdGhlIG1heGltdW0gTFVOIHN1cHBvcnRlZCBpcyAqLworaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJlc3VsdDsKKworCS8qIGlzc3VlIHRoZSBjb21tYW5kICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJCQkgVVNfQlVMS19HRVRfTUFYX0xVTiwgCisJCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IAorCQkJCSBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAwLCB1cy0+aWZudW0sIHVzLT5pb2J1ZiwgMSwgSFopOworCisJVVNfREVCVUdQKCJHZXRNYXhMVU4gY29tbWFuZCByZXN1bHQgaXMgJWQsIGRhdGEgaXMgJWRcbiIsIAorCQkgIHJlc3VsdCwgdXMtPmlvYnVmWzBdKTsKKworCS8qIGlmIHdlIGhhdmUgYSBzdWNjZXNzZnVsIHJlcXVlc3QsIHJldHVybiB0aGUgcmVzdWx0ICovCisJaWYgKHJlc3VsdCA+IDApCisJCXJldHVybiB1cy0+aW9idWZbMF07CisKKwkvKiAKKwkgKiBTb21lIGRldmljZXMgKGkuZS4gSW9tZWdhIFppcDEwMCkgbmVlZCB0aGlzIC0tIGFwcGFyZW50bHkKKwkgKiB0aGUgYnVsayBwaXBlcyBnZXQgU1RBTExlZCB3aGVuIHRoZSBHZXRNYXhMVU4gcmVxdWVzdCBpcworCSAqIHByb2Nlc3NlZC4gICBUaGlzIGlzLCBpbiB0aGVvcnksIGhhcm1sZXNzIHRvIGFsbCBvdGhlciBkZXZpY2VzCisJICogKHJlZ2FyZGxlc3Mgb2YgaWYgdGhleSBzdGFsbCBvciBub3QpLgorCSAqLworCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7CisJCXVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSk7CisJCXVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSk7CisJfQorCisJLyoKKwkgKiBTb21lIGRldmljZXMgZG9uJ3QgbGlrZSBHZXRNYXhMVU4uICBUaGV5IG1heSBTVEFMTCB0aGUgY29udHJvbAorCSAqIHBpcGUsIHRoZXkgbWF5IHJldHVybiBhIHplcm8tbGVuZ3RoIHJlc3VsdCwgdGhleSBtYXkgZG8gbm90aGluZyBhdAorCSAqIGFsbCBhbmQgdGltZW91dCwgb3IgdGhleSBtYXkgZmFpbCBpbiBldmVuIG1vcmUgYml6YXJyZWx5IGNyZWF0aXZlCisJICogd2F5cy4gIEluIHRoZXNlIGNhc2VzIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIHVzZSB0aGUgZGVmYXVsdAorCSAqIHZhbHVlOiBvbmx5IG9uZSBMVU4uCisJICovCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgYnVsa19jYl93cmFwICpiY2IgPSAoc3RydWN0IGJ1bGtfY2Jfd3JhcCAqKSB1cy0+aW9idWY7CisJc3RydWN0IGJ1bGtfY3Nfd3JhcCAqYmNzID0gKHN0cnVjdCBidWxrX2NzX3dyYXAgKikgdXMtPmlvYnVmOworCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9sZW5ndGggPSBzcmItPnJlcXVlc3RfYnVmZmxlbjsKKwl1bnNpZ25lZCBpbnQgcmVzaWR1ZTsKKwlpbnQgcmVzdWx0OworCWludCBmYWtlX3NlbnNlID0gMDsKKwl1bnNpZ25lZCBpbnQgY3N3bGVuOworCXVuc2lnbmVkIGludCBjYndsZW4gPSBVU19CVUxLX0NCX1dSQVBfTEVOOworCisJLyogVGFrZSBjYXJlIG9mIEJVTEszMiBkZXZpY2VzOyBzZXQgZXh0cmEgYnl0ZSB0byAwICovCisJaWYgKCB1bmxpa2VseSh1cy0+ZmxhZ3MgJiBVU19GTF9CVUxLMzIpKSB7CisJCWNid2xlbiA9IDMyOworCQl1cy0+aW9idWZbMzFdID0gMDsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIGNvbW1hbmQgd3JhcHBlciAqLworCWJjYi0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNfQlVMS19DQl9TSUdOKTsKKwliY2ItPkRhdGFUcmFuc2Zlckxlbmd0aCA9IGNwdV90b19sZTMyKHRyYW5zZmVyX2xlbmd0aCk7CisJYmNiLT5GbGFncyA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8gMSA8PCA3IDogMDsKKwliY2ItPlRhZyA9IHNyYi0+c2VyaWFsX251bWJlcjsKKwliY2ItPkx1biA9IHNyYi0+ZGV2aWNlLT5sdW47CisJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpCisJCWJjYi0+THVuIHw9IHNyYi0+ZGV2aWNlLT5pZCA8PCA0OworCWJjYi0+TGVuZ3RoID0gc3JiLT5jbWRfbGVuOworCisJLyogY29weSB0aGUgY29tbWFuZCBwYXlsb2FkICovCisJbWVtc2V0KGJjYi0+Q0RCLCAwLCBzaXplb2YoYmNiLT5DREIpKTsKKwltZW1jcHkoYmNiLT5DREIsIHNyYi0+Y21uZCwgYmNiLT5MZW5ndGgpOworCisJLyogc2VuZCBpdCB0byBvdXQgZW5kcG9pbnQgKi8KKwlVU19ERUJVR1AoIkJ1bGsgQ29tbWFuZCBTIDB4JXggVCAweCV4IEwgJWQgRiAlZCBUcmcgJWQgTFVOICVkIENMICVkXG4iLAorCQkJbGUzMl90b19jcHUoYmNiLT5TaWduYXR1cmUpLCBiY2ItPlRhZywKKwkJCWxlMzJfdG9fY3B1KGJjYi0+RGF0YVRyYW5zZmVyTGVuZ3RoKSwgYmNiLT5GbGFncywKKwkJCShiY2ItPkx1biA+PiA0KSwgKGJjYi0+THVuICYgMHgwRiksIAorCQkJYmNiLT5MZW5ndGgpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+c2VuZF9idWxrX3BpcGUsCisJCQkJYmNiLCBjYndsZW4sIE5VTEwpOworCVVTX0RFQlVHUCgiQnVsayBjb21tYW5kIHRyYW5zZmVyIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8qIERBVEEgU1RBR0UgKi8KKwkvKiBzZW5kL3JlY2VpdmUgZGF0YSBwYXlsb2FkLCBpZiB0aGVyZSBpcyBhbnkgKi8KKworCS8qIFNvbWUgVVNCLUlERSBjb252ZXJ0ZXIgY2hpcHMgbmVlZCBhIDEwMHVzIGRlbGF5IGJldHdlZW4gdGhlCisJICogY29tbWFuZCBwaGFzZSBhbmQgdGhlIGRhdGEgcGhhc2UuICBTb21lIGRldmljZXMgbmVlZCBhIGxpdHRsZQorCSAqIG1vcmUgdGhhbiB0aGF0LCBwcm9iYWJseSBiZWNhdXNlIG9mIGNsb2NrIHJhdGUgaW5hY2N1cmFjaWVzLiAqLworCWlmICh1bmxpa2VseSh1cy0+ZmxhZ3MgJiBVU19GTF9HT19TTE9XKSkKKwkJdWRlbGF5KDExMCk7CisKKwlpZiAodHJhbnNmZXJfbGVuZ3RoKSB7CisJCXVuc2lnbmVkIGludCBwaXBlID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgPyAKKwkJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIHRyYW5zZmVyX2xlbmd0aCwKKwkJCQkJc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwkJVVNfREVCVUdQKCJCdWxrIGRhdGEgdHJhbnNmZXIgcmVzdWx0IDB4JXhcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9FUlJPUikKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJLyogSWYgdGhlIGRldmljZSB0cmllZCB0byBzZW5kIGJhY2sgbW9yZSBkYXRhIHRoYW4gdGhlCisJCSAqIGFtb3VudCByZXF1ZXN0ZWQsIHRoZSBzcGVjIHJlcXVpcmVzIHVzIHRvIHRyYW5zZmVyCisJCSAqIHRoZSBDU1cgYW55d2F5LiAgU2luY2UgdGhlcmUncyBubyBwb2ludCByZXRyeWluZyB0aGUKKwkJICogdGhlIGNvbW1hbmQsIHdlJ2xsIHJldHVybiBmYWtlIHNlbnNlIGRhdGEgaW5kaWNhdGluZworCQkgKiBJbGxlZ2FsIFJlcXVlc3QsIEludmFsaWQgRmllbGQgaW4gQ0RCLgorCQkgKi8KKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0xPTkcpCisJCQlmYWtlX3NlbnNlID0gMTsKKwl9CisKKwkvKiBTZWUgZmxvdyBjaGFydCBvbiBwZyAxNSBvZiB0aGUgQnVsayBPbmx5IFRyYW5zcG9ydCBzcGVjIGZvcgorCSAqIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyB0aGlzIGNvZGUgd29ya3MuCisJICovCisKKwkvKiBnZXQgQ1NXIGZvciBkZXZpY2Ugc3RhdHVzICovCisJVVNfREVCVUdQKCJBdHRlbXB0aW5nIHRvIGdldCBDU1cuLi5cbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJYmNzLCBVU19CVUxLX0NTX1dSQVBfTEVOLCAmY3N3bGVuKTsKKworCS8qIFNvbWUgYnJva2VuIGRldmljZXMgYWRkIHVubmVjZXNzYXJ5IHplcm8tbGVuZ3RoIHBhY2tldHMgdG8gdGhlCisJICogZW5kIG9mIHRoZWlyIGRhdGEgdHJhbnNmZXJzLiAgU3VjaCBwYWNrZXRzIHNob3cgdXAgYXMgMC1sZW5ndGgKKwkgKiBDU1dzLiAgSWYgd2UgZW5jb3VudGVyIHN1Y2ggYSB0aGluZywgdHJ5IHRvIHJlYWQgdGhlIENTVyBhZ2Fpbi4KKwkgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU0hPUlQgJiYgY3N3bGVuID09IDApIHsKKwkJVVNfREVCVUdQKCJSZWNlaXZlZCAwLWxlbmd0aCBDU1c7IHJldHJ5aW5nLi4uXG4iKTsKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQliY3MsIFVTX0JVTEtfQ1NfV1JBUF9MRU4sICZjc3dsZW4pOworCX0KKworCS8qIGRpZCB0aGUgYXR0ZW1wdCB0byByZWFkIHRoZSBDU1cgZmFpbD8gKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCisJCS8qIGdldCB0aGUgc3RhdHVzIGFnYWluICovCisJCVVTX0RFQlVHUCgiQXR0ZW1wdGluZyB0byBnZXQgQ1NXICgybmQgdHJ5KS4uLlxuIik7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJYmNzLCBVU19CVUxLX0NTX1dSQVBfTEVOLCBOVUxMKTsKKwl9CisKKwkvKiBpZiB3ZSBzdGlsbCBoYXZlIGEgZmFpbHVyZSBhdCB0aGlzIHBvaW50LCB3ZSdyZSBpbiB0cm91YmxlICovCisJVVNfREVCVUdQKCJCdWxrIHN0YXR1cyByZXN1bHQgPSAlZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8qIGNoZWNrIGJ1bGsgc3RhdHVzICovCisJcmVzaWR1ZSA9IGxlMzJfdG9fY3B1KGJjcy0+UmVzaWR1ZSk7CisJVVNfREVCVUdQKCJCdWxrIFN0YXR1cyBTIDB4JXggVCAweCV4IFIgJXUgU3RhdCAweCV4XG4iLAorCQkJbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLCBiY3MtPlRhZywgCisJCQlyZXNpZHVlLCBiY3MtPlN0YXR1cyk7CisJaWYgKGJjcy0+VGFnICE9IHNyYi0+c2VyaWFsX251bWJlciB8fCBiY3MtPlN0YXR1cyA+IFVTX0JVTEtfU1RBVF9QSEFTRSkgeworCQlVU19ERUJVR1AoIkJ1bGsgbG9naWNhbCBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogU29tZSBicm9rZW4gZGV2aWNlcyByZXBvcnQgb2RkIHNpZ25hdHVyZXMsIHNvIHdlIGRvIG5vdCBjaGVjayB0aGVtCisJICogZm9yIHZhbGlkaXR5IGFnYWluc3QgdGhlIHNwZWMuIFdlIHN0b3JlIHRoZSBmaXJzdCBvbmUgd2Ugc2VlLAorCSAqIGFuZCBjaGVjayBzdWJzZXF1ZW50IHRyYW5zZmVycyBmb3IgdmFsaWRpdHkgYWdhaW5zdCB0aGlzIHNpZ25hdHVyZS4KKwkgKi8KKwlpZiAoIXVzLT5iY3Nfc2lnbmF0dXJlKSB7CisJCXVzLT5iY3Nfc2lnbmF0dXJlID0gYmNzLT5TaWduYXR1cmU7CisJCWlmICh1cy0+YmNzX3NpZ25hdHVyZSAhPSBjcHVfdG9fbGUzMihVU19CVUxLX0NTX1NJR04pKQorCQkJVVNfREVCVUdQKCJMZWFybnQgQkNTIHNpZ25hdHVyZSAweCUwOFhcbiIsCisJCQkJCWxlMzJfdG9fY3B1KHVzLT5iY3Nfc2lnbmF0dXJlKSk7CisJfSBlbHNlIGlmIChiY3MtPlNpZ25hdHVyZSAhPSB1cy0+YmNzX3NpZ25hdHVyZSkgeworCQlVU19ERUJVR1AoIlNpZ25hdHVyZSBtaXNtYXRjaDogZ290ICUwOFgsIGV4cGVjdGluZyAlMDhYXG4iLAorCQkJICBsZTMyX3RvX2NwdShiY3MtPlNpZ25hdHVyZSksCisJCQkgIGxlMzJfdG9fY3B1KHVzLT5iY3Nfc2lnbmF0dXJlKSk7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogdHJ5IHRvIGNvbXB1dGUgdGhlIGFjdHVhbCByZXNpZHVlLCBiYXNlZCBvbiBob3cgbXVjaCBkYXRhCisJICogd2FzIHJlYWxseSB0cmFuc2ZlcnJlZCBhbmQgd2hhdCB0aGUgZGV2aWNlIHRlbGxzIHVzICovCisJaWYgKHJlc2lkdWUpIHsKKwkJaWYgKCEodXMtPmZsYWdzICYgVVNfRkxfSUdOT1JFX1JFU0lEVUUpKSB7CisJCQlyZXNpZHVlID0gbWluKHJlc2lkdWUsIHRyYW5zZmVyX2xlbmd0aCk7CisJCQlzcmItPnJlc2lkID0gbWF4KHNyYi0+cmVzaWQsIChpbnQpIHJlc2lkdWUpOworCQl9CisJfQorCisJLyogYmFzZWQgb24gdGhlIHN0YXR1cyBjb2RlLCB3ZSByZXBvcnQgZ29vZCBvciBiYWQgKi8KKwlzd2l0Y2ggKGJjcy0+U3RhdHVzKSB7CisJCWNhc2UgVVNfQlVMS19TVEFUX09LOgorCQkJLyogZGV2aWNlIGJhYmJsZWQgLS0gcmV0dXJuIGZha2Ugc2Vuc2UgZGF0YSAqLworCQkJaWYgKGZha2Vfc2Vuc2UpIHsKKwkJCQltZW1jcHkoc3JiLT5zZW5zZV9idWZmZXIsIAorCQkJCSAgICAgICB1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCLCAKKwkJCQkgICAgICAgc2l6ZW9mKHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREIpKTsKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFOworCQkJfQorCisJCQkvKiBjb21tYW5kIGdvb2QgLS0gbm90ZSB0aGF0IGRhdGEgY291bGQgYmUgc2hvcnQgKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCQljYXNlIFVTX0JVTEtfU1RBVF9GQUlMOgorCQkJLyogY29tbWFuZCBmYWlsZWQgKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCisJCWNhc2UgVVNfQlVMS19TVEFUX1BIQVNFOgorCQkJLyogcGhhc2UgZXJyb3IgLS0gbm90ZSB0aGF0IGEgdHJhbnNwb3J0IHJlc2V0IHdpbGwgYmUKKwkJCSAqIGludm9rZWQgYnkgdGhlIGludm9rZV90cmFuc3BvcnQoKSBmdW5jdGlvbgorCQkJICovCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvLCB3ZSdyZSBpbiB0cm91YmxlICovCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXNldCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIHRoZSBjb21tb24gcGFydCBvZiB0aGUgZGV2aWNlIHJlc2V0IGNvZGUuCisgKgorICogSXQncyBoYW5keSB0aGF0IGV2ZXJ5IHRyYW5zcG9ydCBtZWNoYW5pc20gdXNlcyB0aGUgY29udHJvbCBlbmRwb2ludCBmb3IKKyAqIHJlc2V0cy4KKyAqCisgKiBCYXNpY2FsbHksIHdlIHNlbmQgYSByZXNldCB3aXRoIGEgMjAtc2Vjb25kIHRpbWVvdXQsIHNvIHdlIGRvbid0IGdldAorICogamFtbWVkIGF0dGVtcHRpbmcgdG8gZG8gdGhlIHJlc2V0LgorICovCitzdGF0aWMgaW50IHVzYl9zdG9yX3Jlc2V0X2NvbW1vbihzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCXU4IHJlcXVlc3QsIHU4IHJlcXVlc3R0eXBlLAorCQl1MTYgdmFsdWUsIHUxNiBpbmRleCwgdm9pZCAqZGF0YSwgdTE2IHNpemUpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0MjsKKwlpbnQgcmMgPSBGQUlMRUQ7CisKKwkvKiBMZXQgdGhlIFNDU0kgbGF5ZXIga25vdyB3ZSBhcmUgZG9pbmcgYSByZXNldCwgc2V0IHRoZQorCSAqIFJFU0VUVElORyBiaXQsIGFuZCBjbGVhciB0aGUgQUJPUlRJTkcgYml0IHNvIHRoYXQgdGhlIHJlc2V0CisJICogbWF5IHByb2NlZWQuCisJICovCisJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKKwl1c2Jfc3Rvcl9yZXBvcnRfZGV2aWNlX3Jlc2V0KHVzKTsKKwlzZXRfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5mbGFncyk7CisJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CisKKwkvKiBBIDIwLXNlY29uZCB0aW1lb3V0IG1heSBzZWVtIHJhdGhlciBsb25nLCBidXQgYSBMYUNpZQorCSAqIFN0dWRpb0RyaXZlIFVTQjIgZGV2aWNlIHRha2VzIDE2KyBzZWNvbmRzIHRvIGdldCBnb2luZworCSAqIGZvbGxvd2luZyBhIHBvd2VydXAgb3IgVVNCIGF0dGFjaCBldmVudC4KKwkgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSwKKwkJCTIwKkhaKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlVU19ERUJVR1AoIlNvZnQgcmVzZXQgZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBEb25lOworCX0KKworIAkvKiBHaXZlIHRoZSBkZXZpY2Ugc29tZSB0aW1lIHRvIHJlY292ZXIgZnJvbSB0aGUgcmVzZXQsCisgCSAqIGJ1dCBkb24ndCBkZWxheSBkaXNjb25uZWN0IHByb2Nlc3NpbmcuICovCisgCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHVzLT5kZWxheV93YWl0LAorIAkJCXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpLAorIAkJCUhaKjYpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIlJlc2V0IGludGVycnVwdGVkIGJ5IGRpc2Nvbm5lY3RcbiIpOworCQlnb3RvIERvbmU7CisJfQorCisJVVNfREVCVUdQKCJTb2Z0IHJlc2V0OiBjbGVhcmluZyBidWxrLWluIGVuZHBvaW50IGhhbHRcbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSk7CisKKwlVU19ERUJVR1AoIlNvZnQgcmVzZXQ6IGNsZWFyaW5nIGJ1bGstb3V0IGVuZHBvaW50IGhhbHRcbiIpOworCXJlc3VsdDIgPSB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+c2VuZF9idWxrX3BpcGUpOworCisJLyogcmV0dXJuIGEgcmVzdWx0IGNvZGUgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiB0aGUgY29udHJvbCBtZXNzYWdlICovCisJaWYgKHJlc3VsdCA8IDAgfHwgcmVzdWx0MiA8IDApIHsKKwkJVVNfREVCVUdQKCJTb2Z0IHJlc2V0IGZhaWxlZFxuIik7CisJCWdvdG8gRG9uZTsKKwl9CisJVVNfREVCVUdQKCJTb2Z0IHJlc2V0IGRvbmVcbiIpOworCXJjID0gU1VDQ0VTUzsKKworICBEb25lOgorCWNsZWFyX2JpdChVU19GTElEWF9SRVNFVFRJTkcsICZ1cy0+ZmxhZ3MpOworCXJldHVybiByYzsKK30KKworLyogVGhpcyBpc3N1ZXMgYSBDQltJXSBSZXNldCB0byB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uCisgKi8KKyNkZWZpbmUgQ0JfUkVTRVRfQ01EX1NJWkUJMTIKKworaW50IHVzYl9zdG9yX0NCX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKworCW1lbXNldCh1cy0+aW9idWYsIDB4RkYsIENCX1JFU0VUX0NNRF9TSVpFKTsKKwl1cy0+aW9idWZbMF0gPSBTRU5EX0RJQUdOT1NUSUM7CisJdXMtPmlvYnVmWzFdID0gNDsKKwlyZXR1cm4gdXNiX3N0b3JfcmVzZXRfY29tbW9uKHVzLCBVU19DQklfQURTQywgCisJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgMCwgdXMtPmlmbnVtLCB1cy0+aW9idWYsIENCX1JFU0VUX0NNRF9TSVpFKTsKK30KKworLyogVGhpcyBpc3N1ZXMgYSBCdWxrLW9ubHkgUmVzZXQgdG8gdGhlIGRldmljZSBpbiBxdWVzdGlvbiwgaW5jbHVkaW5nCisgKiBjbGVhcmluZyB0aGUgc3Vic2VxdWVudCBlbmRwb2ludCBoYWx0cyB0aGF0IG1heSBvY2N1ci4KKyAqLworaW50IHVzYl9zdG9yX0J1bGtfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIHVzYl9zdG9yX3Jlc2V0X2NvbW1vbih1cywgVVNfQlVMS19SRVNFVF9SRVFVRVNULCAKKwkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAwLCB1cy0+aWZudW0sIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ZjhkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogVHJhbnNwb3J0IEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogdHJhbnNwb3J0LmgsdiAxLjE4IDIwMDIvMDQvMjEgMDI6NTc6NTkgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1RSQU5TUE9SVF9IXworI2RlZmluZSBfVFJBTlNQT1JUX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKworLyogUHJvdG9jb2xzICovCisKKyNkZWZpbmUgVVNfUFJfQ0JJCTB4MDAJCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNfUFJfQ0IJMHgwMQkJLyogQ29udHJvbC9CdWxrIHcvbyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNfUFJfQlVMSwkweDUwCQkvKiBidWxrIG9ubHkgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKyNkZWZpbmUgVVNfUFJfU0NNX0FUQVBJCTB4ODAJCS8qIFNDTS1BVEFQSSBicmlkZ2UgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKKyNkZWZpbmUgVVNfUFJfRVVTQl9TRERSMDkJMHg4MQkvKiBTQ00tU0NTSSBicmlkZ2UgZm9yIFNERFItMDkgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKyNkZWZpbmUgVVNfUFJfU0REUjU1CTB4ODIJCS8qIFNERFItNTUgKG1hZGUgdXApICovCisjZW5kaWYKKyNkZWZpbmUgVVNfUFJfRFBDTV9VU0IgIDB4ZjAJCS8qIENvbWJpbmF0aW9uIENCL1NERFIwOSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KKyNkZWZpbmUgVVNfUFJfRlJFRUNPTSAgIDB4ZjEJCS8qIEZyZWVjb20gKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKyNkZWZpbmUgVVNfUFJfREFUQUZBQiAgIDB4ZjIJCS8qIERhdGFmYWIgY2hpcHNldHMgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCisjZGVmaW5lIFVTX1BSX0pVTVBTSE9UICAweGYzCQkvKiBMZXhhciBKdW1wc2hvdCAqLworI2VuZGlmCisKKyNkZWZpbmUgVVNfUFJfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLworCisvKgorICogQnVsayBvbmx5IGRhdGEgc3RydWN0dXJlcworICovCisKKy8qIGNvbW1hbmQgYmxvY2sgd3JhcHBlciAqLworc3RydWN0IGJ1bGtfY2Jfd3JhcCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8qIGNvbnRhaW5zICdVU0JDJyAqLworCV9fdTMyCVRhZzsJCQkvKiB1bmlxdWUgcGVyIGNvbW1hbmQgaWQgKi8KKwlfX2xlMzIJRGF0YVRyYW5zZmVyTGVuZ3RoOwkvKiBzaXplIG9mIGRhdGEgKi8KKwlfX3U4CUZsYWdzOwkJCS8qIGRpcmVjdGlvbiBpbiBiaXQgMCAqLworCV9fdTgJTHVuOwkJCS8qIExVTiBub3JtYWxseSAwICovCisJX191OAlMZW5ndGg7CQkJLyogb2Ygb2YgdGhlIENEQiAqLworCV9fdTgJQ0RCWzE2XTsJCS8qIG1heCBjb21tYW5kICovCit9OworCisjZGVmaW5lIFVTX0JVTEtfQ0JfV1JBUF9MRU4JMzEKKyNkZWZpbmUgVVNfQlVMS19DQl9TSUdOCQkweDQzNDI1MzU1CS8qc3BlbGxzIG91dCBVU0JDICovCisjZGVmaW5lIFVTX0JVTEtfRkxBR19JTgkJMQorI2RlZmluZSBVU19CVUxLX0ZMQUdfT1VUCTAKKworLyogY29tbWFuZCBzdGF0dXMgd3JhcHBlciAqLworc3RydWN0IGJ1bGtfY3Nfd3JhcCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8qIHNob3VsZCA9ICdVU0JTJyAqLworCV9fdTMyCVRhZzsJCQkvKiBzYW1lIGFzIG9yaWdpbmFsIGNvbW1hbmQgKi8KKwlfX2xlMzIJUmVzaWR1ZTsJCS8qIGFtb3VudCBub3QgdHJhbnNmZXJyZWQgKi8KKwlfX3U4CVN0YXR1czsJCQkvKiBzZWUgYmVsb3cgKi8KKwlfX3U4CUZpbGxlclsxOF07Cit9OworCisjZGVmaW5lIFVTX0JVTEtfQ1NfV1JBUF9MRU4JMTMKKyNkZWZpbmUgVVNfQlVMS19DU19TSUdOCQkweDUzNDI1MzU1CS8qIHNwZWxscyBvdXQgJ1VTQlMnICovCisjZGVmaW5lIFVTX0JVTEtfU1RBVF9PSwkJMAorI2RlZmluZSBVU19CVUxLX1NUQVRfRkFJTAkxCisjZGVmaW5lIFVTX0JVTEtfU1RBVF9QSEFTRQkyCisKKy8qIGJ1bGstb25seSBjbGFzcyBzcGVjaWZpYyByZXF1ZXN0cyAqLworI2RlZmluZSBVU19CVUxLX1JFU0VUX1JFUVVFU1QJMHhmZgorI2RlZmluZSBVU19CVUxLX0dFVF9NQVhfTFVOCTB4ZmUKKworLyoKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfeHh4KCkgcmV0dXJuIGNvZGVzLCBpbiBvcmRlciBvZiBzZXZlcml0eQorICovCisKKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9HT09ECTAJLyogZ29vZCB0cmFuc2ZlciAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9TSE9SVAkxCS8qIHRyYW5zZmVycmVkIGxlc3MgdGhhbiBleHBlY3RlZCAqLworI2RlZmluZSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQJMgkvKiBlbmRwb2ludCBzdGFsbGVkICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfU1RPUl9YRkVSX0xPTkcJMwkvKiBkZXZpY2UgdHJpZWQgdG8gc2VuZCB0b28gbXVjaCAqLworI2RlZmluZSBVU0JfU1RPUl9YRkVSX0VSUk9SCTQJLyogdHJhbnNmZXIgZGllZCBpbiB0aGUgbWlkZGxlICAgKi8KKworLyoKKyAqIFRyYW5zcG9ydCByZXR1cm4gY29kZXMKKyAqLworCisjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09ECSAgIDAgICAvKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBnb29kCSAgICovCisjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQgIDEgICAvKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBmYWlsZWQgICAqLworI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UgMiAgLyogQ29tbWFuZCBmYWlsZWQsIG5vIGF1dG8tc2Vuc2UgICAgKi8KKyNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SICAgMyAgIC8qIFRyYW5zcG9ydCBiYWQgKGkuZS4gZGV2aWNlIGRlYWQpICovCisKKy8qCisgKiBXZSB1c2VkIHRvIGhhdmUgVVNCX1NUT1JfWEZFUl9BQk9SVEVEIGFuZCBVU0JfU1RPUl9UUkFOU1BPUlRfQUJPUlRFRAorICogcmV0dXJuIGNvZGVzLiAgQnV0IG5vdyB0aGUgdHJhbnNwb3J0IGFuZCBsb3ctbGV2ZWwgdHJhbnNmZXIgcm91dGluZXMKKyAqIHRyZWF0IGFuIGFib3J0IGFzIGp1c3QgYW5vdGhlciBlcnJvciAoLUVOT0VOVCBmb3IgYSBjYW5jZWxsZWQgVVJCKS4KKyAqIEl0IGlzIHVwIHRvIHRoZSBpbnZva2VfdHJhbnNwb3J0KCkgZnVuY3Rpb24gdG8gdGVzdCBmb3IgYWJvcnRzIGFuZAorICogZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGdlbnVpbmUgY29tbXVuaWNhdGlvbiBlcnJvcnMuCisgKi8KKworLyoKKyAqIENCSSBhY2NlcHQgZGV2aWNlIHNwZWNpZmljIGNvbW1hbmQKKyAqLworCisjZGVmaW5lIFVTX0NCSV9BRFNDCQkwCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfQ0JJX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7CisKK2V4dGVybiBpbnQgdXNiX3N0b3JfQ0JfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfQ0JfcmVzZXQoc3RydWN0IHVzX2RhdGEqKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3Jlc2V0KHN0cnVjdCB1c19kYXRhKik7CisKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIHZvaWQgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEqKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9jb250cm9sX21zZyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCXZvaWQgKmRhdGEsIHUxNiBzaXplLCBpbnQgdGltZW91dCk7CitleHRlcm4gaW50IHVzYl9zdG9yX2NsZWFyX2hhbHQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSk7CisKK2V4dGVybiBpbnQgdXNiX3N0b3JfY3RybF90cmFuc2ZlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCXZvaWQgKmRhdGEsIHUxNiBzaXplKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgKmFjdF9sZW4pOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCwgaW50IHVzZV9zZywgaW50ICpyZXNpZHVhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUzZjc3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTAsMCArMSw5ODYgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogVW51bnN1YWwgRGV2aWNlcyBGaWxlCisgKgorICogJElkOiB1bnVzdWFsX2RldnMuaCx2IDEuMzIgMjAwMi8wMi8yNSAwMjo0MToyNCBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAtMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAyMDAwIEFkYW0gSi4gUmljaHRlciAoYWRhbUB5Z2dkcmFzaWwuY29tKSwgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIElNUE9SVEFOVCBOT1RFOiBUaGlzIGZpbGUgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbm90aGVyIGZpbGUgd2hpY2ggZG9lcworICogdGhlIGZvbGxvd2luZyB0aGluZyBmb3IgaXQgdG8gd29yazoKKyAqIFRoZSBtYWNybyBVTlVTVUFMX0RFVigpIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogSWYgeW91IGVkaXQgdGhpcyBmaWxlLCBwbGVhc2UgdHJ5IHRvIGtlZXAgaXQgc29ydGVkIGZpcnN0IGJ5IFZlbmRvcklELAorICogdGhlbiBieSBQcm9kdWN0SUQuCisgKgorICogSWYgeW91IHdhbnQgdG8gYWRkIGFuIGVudHJ5IGZvciB0aGlzIGZpbGUsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGUKKyAqIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyAqCS0gYSBwYXRjaCB0aGF0IGFkZHMgdGhlIGVudHJ5IGZvciB5b3VyIGRldmljZSwgaW5jbHVkaW5nIHlvdXIKKyAqCSAgZW1haWwgYWRkcmVzcyByaWdodCBhYm92ZSB0aGUgZW50cnkgKHBsdXMgbWF5YmUgYSBicmllZgorICoJICBleHBsYW5hdGlvbiBvZiB0aGUgcmVhc29uIGZvciB0aGUgZW50cnkpLAorICoJLSBhIGNvcHkgb2YgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIHdpdGggeW91ciBkZXZpY2UgcGx1Z2dlZCBpbgorICoJICBydW5uaW5nIHdpdGggdGhpcyBwYXRjaC4KKyAqIFNlbmQgeW91ciBzdWJtaXNzaW9uIHRvIGVpdGhlciBQaGlsIERpYm93aXR6IDxwaGlsQGlwb20uY29tPiBvcgorICogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4sIGFuZCBkb24ndCBmb3JnZXQgdG8gQ0M6IHRoZQorICogVVNCIGRldmVsb3BtZW50IGxpc3QgPGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+LgorICovCisKK1VOVVNVQUxfREVWKCAgMHgwM2VlLCAweDY5MDEsIDB4MDAwMCwgMHgwMTAwLAorCQkiTWl0c3VtaSIsCisJCSJVU0IgRkREIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDEwNywgMHgwMjAwLCAweDAyMDAsIAorCQkiSFAiLAorCQkiQ0QtV3JpdGVyKyIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCAwKSwgCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKK1VOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAyMDcsIDB4MDAwMSwgMHgwMDAxLCAKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgODIwMGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9TQ01fQVRBUEksIGluaXRfdXNiYXQsIDApLCAKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDMwNywgMHgwMDAxLCAweDAwMDEsIAorCQkiSFAiLAorCQkiQ0QtV3JpdGVyKyBDRC00ZSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX1NDTV9BVEFQSSwgaW5pdF91c2JhdCwgMCksIAorI2VuZGlmCisKKy8qIERlZHVjZWQgYnkgSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PgorICogRW50cnkgbmVlZGVkIGZvciBmbGFnczogVVNfRkxfRklYX0lOUVVJUlkgYmVjYXVzZSBpbml0aWFsIGlucXVpcnkgbWVzc2FnZQorICogYWx3YXlzIGZhaWxzIGFuZCBjb25mdXNlcyBkcml2ZS4KKyAqLworVU5VU1VBTF9ERVYoICAweDA0MTEsIDB4MDAxYywgMHgwMTEzLCAweDAxMTMsCisJCSJCdWZmYWxvIiwKKwkJIkRVQi1QNDBHIEhERCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KK1VOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisgCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAorI2VuZGlmCisKKy8qIFBhdGNoIHN1Ym1pdHRlZCBieSBQaGlsaXBwIEZyaWVkcmljaCA8cGhpbGlwcEB2b2lkLmF0PiAqLworVU5VU1VBTF9ERVYoICAweDA0ODIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJLeW9jZXJhIiwKKwkJIkZpbmVjYW0gUzN4IiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfQ0IsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUGF0Y2ggc3VibWl0dGVkIGJ5IFBoaWxpcHAgRnJpZWRyaWNoIDxwaGlsaXBwQHZvaWQuYXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDQ4MiwgMHgwMTAxLCAweDAxMDAsIDB4MDEwMCwKKwkJIkt5b2NlcmEiLAorCQkiRmluZWNhbSBTNCIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCBVU19GTF9GSVhfSU5RVUlSWSksCisKKy8qIFBhdGNoIHN1Ym1pdHRlZCBieSBTdGVwaGFuZSBHYWxsZXMgPHN0ZXBoYW5lLmdhbGxlc0BmcmVlLmZyPiAqLworVU5VU1VBTF9ERVYoICAweDA0ODIsIDB4MDEwMywgMHgwMTAwLCAweDAxMDAsCisJCSJLeW9jZXJhIiwKKwkJIkZpbmVjYW0gUzUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBQYXRjaCBmb3IgS3lvY2VyYSBGaW5lY2FtIEwzCisgKiBTdWJtaXR0ZWQgYnkgTWljaGFlbCBLcmF1dGggPG1pY2hhZWwua3JhdXRoQHdlYi5kZT4KKyAqIGFuZCBBbGVzc2FuZHJvIEZyYWNjaGV0dGkgPGFsLmZyYWNjaGV0dGlAdGluLml0PgorICovCitVTlVTVUFMX0RFViggIDB4MDQ4MiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIkt5b2NlcmEiLAorCQkiRmluZWNhbSBMMyIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUmVwb3J0ZWQgYnkgUGF1bCBTdGV3YXJ0IDxzdGV3YXJ0QHdldGxvZ2ljLm5ldD4KKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAqLworVU5VU1VBTF9ERVYoICAweDA0YTQsIDB4MDAwNCwgMHgwMDAxLCAweDAwMDEsCisJCSJIaXRhY2hpIiwKKwkJIkRWRC1DQU0gRFotTVYxMDBBIENhbWNvcmRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0NCLCBOVUxMLCBVU19GTF9TSU5HTEVfTFVOKSwKKworLyogUmVwb3J0ZWQgYnkgQW5kcmVhcyBCb2NraG9sZCA8YW5kcmVhc0Bib2NraW9ubGluZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGIwLCAweDA0MDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTklLT04iLAorCQkiTklLT04gRFNDIEQ3MCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkpLAorCisvKiBCRU5RIERDNTMzMAorICogUmVwb3J0ZWQgYnkgTWFudWVsIEZvbWJ1ZW5hIDxtZm9tYnVlbmFAeWEuY29tPiBhbmQKKyAqIEZyYW5rIENvcGVsYW5kIDxmamNAdGhpbmd5LmFwYW5hLm9yZy5hdT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGE1LCAweDMwMTAsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiMzAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBTaW1vbiBMZXZpdHQgPHNpbW9uQHdoYXR0Zi5jb20+CisgKiBUaGlzIGVudHJ5IG5lZWRzIFN1YiBhbmQgUHJvdG8gZmllbGRzICovCitVTlVTVUFMX0RFViggIDB4MDRiOCwgMHgwNjAxLCAweDAxMDAsIDB4MDEwMCwKKwkJIkVwc29uIiwKKwkJIjg3NURDIFN0b3JhZ2UiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBSZXBvcnRlZCBieSBLaGFsaWQgQXppeiA8a2hhbGlkQGdvbmVoaWtpbmcub3JnPgorICogVGhpcyBlbnRyeSBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgZGV2aWNlIHJlcG9ydHMgU3ViPWZmICovCitVTlVTVUFMX0RFViggIDB4MDRiOCwgMHgwNjAyLCAweDAxMTAsIDB4MDExMCwKKwkJIkVwc29uIiwKKwkJIjc4NUVQWCBTdG9yYWdlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwgVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIE5vdCBzdXJlIHdobyByZXBvcnRlZCB0aGlzIG9yaWdpbmFsbHkgYnV0CisgKiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4gcmVwb3J0ZWQgdGhhdCB0aGUgZXh0cmEgVVNfRkxfU0lOR0xFX0xVTgorICogZmxhZyBiZSBhZGRlZCAqLworVU5VU1VBTF9ERVYoICAweDA0Y2IsIDB4MDEwMCwgMHgwMDAwLCAweDIyMTAsCisJCSJGdWppZmlsbSIsCisJCSJGaW5lUGl4IDE0MDBab29tIiwKKwkJVVNfU0NfVUZJLCBVU19QUl9ERVZJQ0UsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZIHwgVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIFJlcG9ydGVkIGJ5IFBldGVyIFfkY2h0bGVyIDxwd2FlY2h0bGVyQGxvZXdlLWtvbXAuZGU+CisgKiBUaGUgZGV2aWNlIG5lZWRzIHRoZSBmbGFncyBvbmx5LgorICovCitVTlVTVUFMX0RFViggIDB4MDRjZSwgMHgwMDAyLCAweDAwNzQsIDB4MDA3NCwKKwkJIlNjYW5Mb2dpYyIsCisJCSJTTDExUi1JREUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBSZXBvcnRlZCBieSBLcmlzdG9uIEZpbmNoZXIgPGtyaXN0b25AYWlybWFpbC5uZXQ+CisgKiBQYXRjaCBzdWJtaXR0ZWQgYnkgU2VhbiBNaWxsaWNoYW1wIDxzZWFuQGJydWVub3Iub3JnPgorICogVGhpcyBpcyB0byBzdXBwb3J0IHRoZSBQYW5hc29uaWMgUGFsbUNhbSBQVi1TRDQwOTAKKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAKKyAqLworVU5VU1VBTF9ERVYoICAweDA0ZGEsIDB4MDkwMSwgMHgwMTAwLCAweDAyMDAsCisJCSJQYW5hc29uaWMiLAorCQkiTFMtMTIwIENhbWVyYSIsCisJCVVTX1NDX1VGSSwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworLyogRnJvbSBZdWtpaGlybyBOYWthaSwgdmlhIHphaXRjZXZAeWFob28uY29tLgorICogVGhpcyBpcyBuZWVkZWQgZm9yIENCIGluc3RlYWQgb2YgQ0JJICovCitVTlVTVUFMX0RFViggIDB4MDRkYSwgMHgwZDA1LCAweDAwMDAsIDB4MDAwMCwKKwkJIlNoYXJwIENFLUNXMDUiLAorCQkiQ0QtUi9SVyBEcml2ZSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworLyogUmVwb3J0ZWQgYnkgQWRyaWFhbiBQZW5uaW5nIDxhLnBlbm5pbmdAbHVvbi5uZXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDRkYSwgMHgyMzcyLCAweDAwMDAsIDB4OTk5OSwKKwkJIlBhbmFzb25pYyIsCisJCSJETUMtTEN4IENhbWVyYSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgfCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKKworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIGVudHJpZXMgd2VyZSBkZXZlbG9wZWQgd2l0aCB0aGUgaGVscCBvZgorICogU2h1dHRsZS9TQ00gZGlyZWN0bHkuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDEsIDB4MDIwMCwgMHgwMjAwLCAKKwkJIk1hdHNoaXRhIiwKKwkJIkxTLTEyMCIsCisJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwMiwgMHgwMTAwLCAweDAxMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNDU0kgQnJpZGdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LCAKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFIwOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKKy8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKKwkJIlNDTSBNaWNyb3N5c3RlbXMiLAorCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgc2RkcjA5X2luaXQsIAorCQkwKSwgCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgTWFya3VzIERlbWxlaXRuZXIgPG1zZGVtbGVpQGNsLnVuaS1oZWlkZWxiZXJnLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsIAorCQkiU0NNIE1pY3Jvc3lzdGVtcyBJbmMuIiwKKwkJImVVU0IgTU1DIEFkYXB0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgCisJCVVTX0ZMX1NJTkdMRV9MVU4pLCAKKworLyogUmVwb3J0ZWQgYnkgRGFuaWVsIE5vdXJpIDxkcHVua3RucHVua3RAd2ViLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNiwgMHgwMjA1LCAweDAyMDUsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNCIE1NQyBBZGFwdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLCAKKwkJVVNfRkxfU0lOR0xFX0xVTiksIAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA3LCAweDAxMDAsIDB4MDIwMCwgCisJCSJTb255IiwKKwkJIkhpZmQiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgCisJCVVTX0ZMX1NJTkdMRV9MVU4pLCAKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwOSwgMHgwMjAwLCAweDAyMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNCIEFUQS9BVEFQSSBBZGFwdGVyIiwKKwkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDBhLCAweDAyMDAsIDB4MDIwMCwgCisJCSJTaHV0dGxlIiwKKwkJImVVU0IgQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAorCQlVU19TQ184MDIwLCBVU19QUl9DQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMEIsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlNodXR0bGUiLAorCQkiZVVTQ1NJIEJyaWRnZSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwQywgMHgwMTAwLCAweDAxMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNDU0kgQnJpZGdlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsIAorCQlVU19GTF9TQ01fTVVMVF9UQVJHICksIAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMTAxLCAweDAyMDAsIDB4MDIwMCwgCisJCSJTaHV0dGxlIiwKKwkJIkNELVJXIERldmljZSIsCisJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworLyogRW50cnkgYW5kIHN1cHBvcnRpbmcgcGF0Y2ggYnkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1Pi4KKyAqIERldmljZSB1c2VzIHN0YW5kYXJkcy12aW9sYXRpbmcgMzItYnl0ZSBCdWxrIENvbW1hbmQgQmxvY2sgV3JhcHBlcnMgYW5kCisgKiByZXBvcnRzIGl0c2VsZiBhcyAiUHJvcHJpZXRhcnkgU0NTSSBCdWxrLiIgQ2YuIGRldmljZSBlbnRyeSAweDA4NGQ6MHgwMDExLgorICovCisKK1VOVVNVQUxfREVWKCAgMHgwNGZjLCAweDgwYzIsIDB4MDEwMCwgMHgwMTAwLAorCQkiS29iaWFuIE1lcmN1cnkiLAorCQkiQmlub2NhbSBEQ0ItMTMyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0JVTEszMiksCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU0NNIiwKKwkJIlNDTSBVU0JBVC0wMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NDTV9BVEFQSSwgaW5pdF91c2JhdCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgQm9iIFNhc3MgPHJsc0B2ZWN0b3JkYi5jb20+IC0tIG9ubHkgcmV2IDEuMzMgdGVzdGVkICovCitVTlVTVUFMX0RFViggIDB4MDUwZCwgMHgwMTE1LCAweDAxMzMsIDB4MDEzMywKKwkJIkJlbGtpbiIsCisJCSJVU0IgU0NTSSBBZGFwdG9yIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKKworLyogSW9tZWdhIENsaWshIERyaXZlIAorICogUmVwb3J0ZWQgYnkgRGF2aWQgQ2hhdGVuYXkgPGRjaGF0ZW5heUBob3RtYWlsLmNvbT4KKyAqIFRoZSByZWFzb24gdGhpcyBpcyBuZWVkZWQgaXMgbm90IGZ1bGx5IGtub3duLgorICovCitVTlVTVUFMX0RFViggIDB4MDUyNSwgMHhhMTQwLCAweDAxMDAsIDB4MDEwMCwKKwkJIklvbWVnYSIsCisJCSJVU0IgQ2xpayEgNDAiLAorCQlVU19TQ184MDcwLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBZYWt1bW8gTWVnYSBJbWFnZSAzNworICogU3VibWl0dGVkIGJ5IFN0ZXBoYW4gRnVocm1hbm4gPGF0b21lbmVyZ2llQHQtb25saW5lLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA1MmIsIDB4MTgwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJUZWtvbSBUZWNobm9sb2dpZXMsIEluYyIsCisJCSIzMDBfQ0FNRVJBIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIEFub3RoZXIgWWFrdW1vIGNhbWVyYS4KKyAqIFJlcG9ydGVkIGJ5IE1pY2hlbGUgQWx6ZXR0YSA8bWljaGVsZS5hbHpldHRhQGFsaWNlcG9zdGEuaXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDUyYiwgMHgxODA0LCAweDAxMDAsIDB4MDEwMCwKKwkJIlRla29tIFRlY2hub2xvZ2llcywgSW5jIiwKKwkJIjMwMF9DQU1FUkEiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgSWFjb3BvIFNwYWxsZXR0aSA8YXZ2aXNpQHNwYWxsZXR0aS5pdD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTJiLCAweDE4MDcsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiMzAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBZYWt1bW8gTWVnYSBJbWFnZSA0NworICogUmVwb3J0ZWQgYnkgQmpvZXJuIFBhZXR6ZWwgPGtvbHJhYmlAa29scmFiaS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTJiLCAweDE5MDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiNDAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBQYXVsIE9ydHlsIDxvcnR5bHBAM21pYXN0by5uZXQ+CisgKiBOb3RlIHRoYXQgaXQncyBzaW1pbGFyIHRvIHRoZSBkZXZpY2UgYWJvdmUsIG9ubHkgZGlmZmVyZW50IHByb2RJRCAqLworVU5VU1VBTF9ERVYoICAweDA1MmIsIDB4MTkxMSwgMHgwMTAwLCAweDAxMDAsCisJCSJUZWtvbSBUZWNobm9sb2dpZXMsIEluYyIsCisJCSI0MDBfQ0FNRVJBIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMTAsIDB4MDEwNiwgMHgwNDUwLCAKKwkJIlNvbnkiLAorCQkiRFNDLVMzMC9TNzAvUzc1LzUwNVYvRjUwNS9GNzA3L0Y3MTcvUDgiLCAKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOIHwgVVNfRkxfTk9UX0xPQ0tBQkxFIHwgVVNfRkxfTk9fV1BfREVURUNUICksCisKKy8qIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAxMCwgMHgwNTAwLCAweDA1MDAsIAorICAgICAgICAgICAgICAgIlNvbnkiLAorICAgICAgICAgICAgICAgIkRTQy1UMSIsIAorICAgICAgICAgICAgICAgVVNfU0NfODA3MCwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfU0lOR0xFX0xVTiApLAorCisKKy8qIFJlcG9ydGVkIGJ5IHdpbUBnZWVrcy5ubCAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyNSwgMHgwMTAwLCAweDAxMDAsIAorCQkiU29ueSIsCisJCSJNZW1vcnlzdGljayBOVy1NUzciLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYiwgMHgwMTAwLCAweDAxMTAsCisJCSJTb255IiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCApLAorI2VuZGlmCisKKy8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZywgPG9saEBzdXNlLmRlPiBTdVNFIEJ1Z3ppbGxhICM0OTA0OSAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYywgMHgwNTAxLCAweDA1MDEsCisJCSJTb255IiwKKwkJIlVTQiBGbG9wcHkgRHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJkLCAweDAxMDAsIDB4MDEwMCwgCisJCSJTb255IiwKKwkJIk1lbW9yeXN0aWNrIE1TQUMtVVMxIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworLyogU3VibWl0dGVkIGJ5IEtsYXVzIE11ZWxsZXIgPGsubXVlbGxlckBpbnRlcnNob3AuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJlLCAweDAxMDYsIDB4MDMxMCwgCisJCSJTb255IiwKKwkJIkhhbmR5Y2FtIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKKy8qIFN1Ym1pdHRlZCBieSBSYWplc2ggS3VtYmxlIE5heWFrIDxuYXlha0BvYnMtbmljZS5mcj4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmUsIDB4MDUwMCwgMHgwNTAwLCAKKwkJIlNvbnkiLAorCQkiSGFuZHljYW0gSEMtODUiLAorCQlVU19TQ19VRkksIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDMyLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiTWVtb3J5c3RpY2sgTVNDLVUwMU4iLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisvKiBTdWJtaXR0ZWQgYnkgTWljaGFsIE1sb3RlayA8bWxvdGVrQGZvb2Jhci5wbD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwNTgsIDB4MDAwMCwgMHg5OTk5LAorCQkiU29ueSIsCisJCSJQRUcgTjc2MGMgTWVtb3J5c3RpY2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKwkJCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDY5LCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiTWVtb3J5c3RpY2sgTVNDLVUwMyIsCisJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworLyogU3VibWl0dGVkIGJ5IE5hdGhhbiBCYWJiIDxuYXRoYW5AbGV4aS5jb20+ICovCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDZkLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiUEVHIE1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBTdWJtaXR0ZWQgYnkgTWlrZSBBbGJvcm4gPG1hbGJvcm5AZGVhbmRyYS5ob21laXAubmV0PiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDE2YSwgMHgwMDAwLCAweDk5OTksCisJCSJTb255IiwKKwkJIlBFRyBNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKwkJCisvKiBTdWJtaXR0ZWQgYnkgRnJhbmsgRW5nZWwgPGZyYW5raWVAY3NlLnVuc3cuZWR1LmF1PiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDA5OSwgMHgwMDAwLCAweDk5OTksCisgICAgICAgICAgICAgICAgIlNvbnkiLAorICAgICAgICAgICAgICAgICJQRUcgTWFzcyBTdG9yYWdlIiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9GSVhfSU5RVUlSWSApLAorCisJCQorVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMDAwLCAweDAyOTksIAorCQkiWS1FIERhdGEiLAorCQkiRmxhc2hidXN0ZXItVSIsCisJCVVTX1NDX0RFVklDRSwgIFVTX1BSX0NCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMzAwLCAweDk5OTksIAorCQkiWS1FIERhdGEiLAorCQkiRmxhc2hidXN0ZXItVSIsCisJCVVTX1NDX0RFVklDRSwgIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIFJlcG9ydGVkIGJ5IEpvaGFubiBDYXJkb24gPGpvaGFubi5jYXJkb25AZnJlZS5mcj4KKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIG9ubHkgYmVjYXVzZSB0aGUgZGV2aWNlIHJlcG9ydHMKKyAqIGJJbnRlcmZhY2VDbGFzcyA9IDB4ZmYgKHZlbmRvci1zcGVjaWZpYykKKyAqLworVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAyMiwgMHgwMDAwLCAweDk5OTksIAorCQkiWS1FIERhdGEiLAorCQkiU2lsaWNvbiBNZWRpYSBSL1ciLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKy8qIEZhYnJpemlvIEZlbGxpbmkgPGZlbGxvQGxpYmVyby5pdD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTk1LCAweDQzNDMsIDB4MDAwMCwgMHgyMjEwLAorCQkiRnVqaWZpbG0iLAorCQkiRGlnaXRhbCBDYW1lcmEgRVgtMjAgRFNDIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfREVWSUNFLCBOVUxMLCAwICksCisKKy8qIFRoZSBlbnRyeSB3YXMgaGVyZSBiZWZvcmUgSSB0b29rIG92ZXIsIGFuZCBoYWQgVVNfU0NfUkJDLiBJdCB0dXJucworICogb3V0IHRoYXQgaXNuJ3QgbmVlZGVkLiBBZGRpdGlvbmFsbHksIFRvcnN0ZW4gRXJpa3Nzb24KKyAqIDxUb3JzdGVuLkVyaWtzc29uQGJlcmdpYW5za2Euc2U+IGlzIGFibGUgdG8gdXNlIGhpcyBkZXZpY2UgZmluZQorICogd2l0aG91dCB0aGlzIGVudHJ5IGF0IGFsbCAtIGJ1dCBJIGRvbid0IHN1c3BlY3QgdGhhdCB3aWxsIGJlIHRydWUKKyAqIGZvciBhbGwgdXNlcnMgKHRoZSBwcm90b2NvbCBpcyBsaWtlbHkgbmVlZGVkKSwgc28gaXMgc3RheWluZyBhdAorICogdGhpcyB0aW1lLiAtIFBoaWwgRGlib3dpdHogPHBoaWxAaXBvbS5jb20+CisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTlmLCAweGE2MDEsIDB4MDIwMCwgMHgwMjAwLCAKKwkJIkxhQ2llIiwKKwkJIlVTQiBIYXJkIERpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0NCLCBOVUxMLCAwICksCisKKy8qIFN1Ym1pdHRlZCBieSBKb2VsIEJvdXJxdWFyZCA8bnVtbG9ja0BmcmVlc3VyZi5jaD4KKyAqIFNvbWUgdmVyc2lvbnMgb2YgdGhpcyBkZXZpY2UgbmVlZCB0aGUgU3ViQ2xhc3MgYW5kIFByb3RvY29sIG92ZXJyaWRlcworICogd2hpbGUgb3RoZXJzIGRvbid0LgorICovCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMDYwLCAweDExMDQsIDB4MTExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJQeXJvR2F0ZSBFeHRlcm5hbCBDRC1ST00gRW5jbG9zdXJlIChGQ0QtNTIzKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAwMzEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQi9JREUgQnJpZGdlIChBVEEvQVRBUEkpIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDMwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCApLAorCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHg1NzAxLCAweDAxMDAsIDB4MDExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJVU0IgU3RvcmFnZSBBZGFwdGVyIFYyIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBBdmkgS2l2aXR5IDxhdmlAYXJnby5jby5pbD4gKi8KK1VOVVNVQUxfREVWKCAweDA1YWMsIDB4MTIwMywgMHgwMDAxLCAweDAwMDEsCisJCSJBcHBsZSIsCisJCSJpUG9kIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCitVTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMDUsIDB4MDAwMSwgMHgwMDAxLAorCQkiQXBwbGUiLAorCQkiaVBvZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAorVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCisJCSJMZXhhciIsCisJCSJKdW1wc2hvdCBVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfSlVNUFNIT1QsIE5VTEwsCisJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBCbGFrZSBNYXRoZW55IDxibWF0aGVueUBwdXJkdWUuZWR1PiAqLworVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4YjAwMiwgMHgwMDAwLCAweDAxMTMsCisJCSJMZXhhciIsCisJCSJVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGVudHJpZXMgYXJlIGZvciBhIEdlbmVzeXMgVVNCIHRvIElERQorICogY29udmVydGVyIGNoaXAsIGJ1dCBpdCBjaGFuZ2VzIGl0cyBQcm9kdWN0SWQgZGVwZW5kaW5nCisgKiBvbiB3aGV0aGVyIG9yIG5vdCBhIGRpc2sgb3IgYW4gb3B0aWNhbCBkZXZpY2UgaXMgZW5jbG9zZWQKKyAqIFRoZXkgd2VyZSBvcmlnaW5hbGx5IHJlcG9ydGVkIGJ5IEFsZXhhbmRlciBPbHR1CisgKiA8YWxleGFuZGVyQGFsbC0yLmNvbT4gYW5kIFBldGVyIE1hcmtzIDxwZXRlci5tYXJrc0B0dXJuZXIuY29tPgorICogcmVzcGVjdGl2ZWx5LgorICovCitVTlVTVUFMX0RFViggIDB4MDVlMywgMHgwNzAxLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkdlbmVzeXMgTG9naWMiLAorCQkiVVNCIHRvIElERSBPcHRpY2FsIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0dPX1NMT1cgKSwKKworVU5VU1VBTF9ERVYoICAweDA1ZTMsIDB4MDcwMiwgMHgwMDAwLCAweGZmZmYsCisJCSJHZW5lc3lzIExvZ2ljIiwKKwkJIlVTQiB0byBJREUgRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9HT19TTE9XICksCisKKy8qIFJlcG9ydGVkIGJ5IEhhbm5vIEJvZWNrIDxoYW5ub0BnbXguZGU+CisgKiBUYWtlbiBmcm9tIHRoZSBMeWNvcmlzIEtlcm5lbCAqLworVU5VU1VBTF9ERVYoICAweDA2MzYsIDB4MDAwMywgMHgwMDAwLCAweDk5OTksCisJCSJWaXZpdGFyIiwKKwkJIlZpdmljYW0gMzVYeCIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKK1VOVVNVQUxfREVWKCAgMHgwNjQ0LCAweDAwMDAsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlRFQUMiLAorCQkiRmxvcHB5IERyaXZlIiwKKwkJVVNfU0NfVUZJLCBVU19QUl9DQiwgTlVMTCwgMCApLCAKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK1VOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIk9seW1wdXMiLAorCQkiQ2FtZWRpYSBNQVVTQi0yIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBEYXJzZW4gTHUgPGRhcnNlbkBtaWNyby5lZS5udGh1LmVkdS50dz4gKi8KK1VOVVNVQUxfREVWKCAweDA2NmYsIDB4ODAwMCwgMHgwMDAxLCAweDAwMDEsCisJCSJTaWdtYVRlbCIsCisJCSJVU0JNU0MgQXVkaW8gUGxheWVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCisvKiBSZXBvcnRlZCBieSBSaWNoYXJkIC09W109LSA8bWljcm9fZmx5ZXJAaG90bWFpbC5jb20+ICovCitVTlVTVUFMX0RFViggMHgwNjdiLCAweDI1MDcsIDB4MDEwMCwgMHgwMTAwLAorCQkiUHJvbGlmaWMgVGVjaG5vbG9neSBJbmMuIiwKKwkJIk1hc3MgU3RvcmFnZSBEZXZpY2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZIHwgVVNfRkxfR09fU0xPVyApLAorCisvKiBSZXBvcnRlZCBieSBBbGV4IEJ1dGNoZXIgPGFsZXguYnV0Y2hlckBhc3N1cnN5cy5jby51az4gKi8KK1VOVVNVQUxfREVWKCAweDA2N2IsIDB4MzUwNywgMHgwMDAxLCAweDAwMDEsCisJCSJQcm9saWZpYyBUZWNobm9sb2d5IEluYy4iLAorCQkiQVRBUEktNiBCcmlkZ2UgQ29udHJvbGxlciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgfCBVU19GTF9HT19TTE9XICksCisKKy8qIFN1Ym1pdHRlZCBieSBCZW5ueSBTam9zdHJhbmQgPGJlbm55QGhvc3Rtb2JpbGl0eS5jb20+ICovCitVTlVTVUFMX0RFViggMHgwNjg2LCAweDQwMTEsIDB4MDAwMSwgMHgwMDAxLAorCQkiTWlub2x0YSIsCisJCSJEaW1hZ2UgRjMwMCIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsIDAgKSwKKworLyogUmVwb3J0ZWQgYnkgTWlndWVsIEEuIEZvc2FzIDxhbW4zczFhQG9uby5jb20+ICovCitVTlVTVUFMX0RFViggIDB4MDY4NiwgMHg0MDE3LCAweDAwMDEsIDB4MDAwMSwKKyAgICAgICAgICAgICAgICAiTWlub2x0YSIsCisgICAgICAgICAgICAgICAgIkRJTUFHRSBFMjIzIiwKKyAgICAgICAgICAgICAgICBVU19TQ19TQ1NJLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDAgKSwKKworVU5VU1VBTF9ERVYoICAweDA2OTMsIDB4MDAwMiwgMHgwMTAwLCAweDAxMDAsIAorCQkiSGFnaXdhcmEiLAorCQkiRmxhc2hHYXRlIFNtYXJ0TWVkaWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLCAwICksCisKK1VOVVNVQUxfREVWKCAgMHgwNjkzLCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiSGFnaXdhcmEiLAorCQkiRmxhc2hnYXRlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwgMCApLCAKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwMSwgMHgwMjAwLCAweDAyMDAsIAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFItMTIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQorVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksIAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCitVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmYzAxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkZyZWVjb20iLAorCQkiVVNCLUlERSIsCisJCVVTX1NDX1FJQywgVVNfUFJfRlJFRUNPTSwgZnJlZWNvbV9pbml0LCAwKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBFZXJvIFZvbG90aW5lbiA8ZWVyb0BwaW5nLXZpaW5pLm9yZz4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjY2QsIDB4MDQwNiwgMHgwNDA2LAorCQkiRnJlZWNvbSBUZWNobm9sb2dpZXMiLAorCQkiRkhELUNsYXNzaWMiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZKSwKKworVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNCwgMHgwMTAwLCAweDAxMzMsIAorCQkiTWljcm90ZWNoIiwKKwkJIlVTQi1TQ1NJLURCMjUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNSwgMHgwMTAwLCAweDAxMDAsIAorCQkiTWljcm90ZWNoIiwKKwkJIlVTQi1TQ1NJLUhENTAiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EUENNCitVTlVTVUFMX0RFViggIDB4MDdhZiwgMHgwMDA2LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAorCQkiRGF0YWZhYiIsCisJCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIERhdGFmYWItYmFzZWQgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrCisgKiB1c2luZyB0aGUgY3VycmVudCBkcml2ZXIuLi50aGUgMHhmZmZmIGlzIGFyYml0cmFyeSBzaW5jZSBJCisgKiBkb24ndCBrbm93IHdoYXQgZGV2aWNlIHZlcnNpb25zIGV4aXN0IGZvciB0aGVzZSBndXlzLgorICoKKyAqIFRoZSAweGEwMDMgYW5kIDB4YTAwNCBkZXZpY2VzIGluIHBhcnRpY3VsYXIgSSdtIGN1cmlvdXMgYWJvdXQuCisgKiBJJ20gdG9sZCB0aGV5IGV4aXN0IGJ1dCBzbyBmYXIgbm9ib2R5IGhhcyBjb21lIGZvcndhcmQgdG8gc2F5IHRoYXQKKyAqIHRoZXkgd29yayB3aXRoIHRoaXMgZHJpdmVyLiAgR2l2ZW4gdGhlIHN1Y2Nlc3Mgd2UndmUgaGFkIGdldHRpbmcKKyAqIG90aGVyIERhdGFmYWItYmFzZWQgY2FyZHMgb3BlcmF0aW9uYWwgd2l0aCB0aGlzIGRyaXZlciwgSSd2ZSBkZWNpZGVkCisgKiB0byBsZWF2ZSB0aGVzZSB0d28gZGV2aWNlcyBpbiB0aGUgbGlzdC4KKyAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAxLCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNJSUcvRGF0YWZhYiIsCisJCSJTSUlHL0RhdGFmYWIgTWVtb3J5IFN0aWNrK0NGIFJlYWRlci9Xcml0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKKy8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNCwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCisJCSJQTlkvRGF0YWZhYiIsCisJCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCisJCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorI2VuZGlmCisJCQorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKy8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKKwkJIkRhdGFmYWIiLAorCQkiTURTTS1CIHJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKy8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCisJCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTAgKSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKy8qIFNNIHBhcnQgLSBhZWIgPEFuZHJpZXMuQnJvdXdlckBjd2kubmw+ICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCisJCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorI2VuZGlmCisKKy8qIERhdGFmYWIgS0VDRi1VU0IgLyBTYWdhdGVrIERDUy1DRiAvIFNpbXBsZXRlY2ggRmxhc2hsaW5rIFVDRi0xMDAKKyAqIE9ubHkgcmV2aXNpb24gMS4xMyB0ZXN0ZWQgKHNhbWUgZm9yIGFsbCBvZiB0aGUgYWJvdmUgZGV2aWNlcywKKyAqIGJhc2VkIG9uIHRoZSBEYXRhZmFiIERGLVVHLTA3IGNoaXApLiAgTmVlZGVkIGZvciBVU19GTF9GSVhfSU5RVUlSWS4KKyAqIFN1Ym1pdHRlZCBieSBNYXJlayBNaWNoYWxraWV3aWN6IDxtYXJla21AYW1lbGVrLmdkYS5wbD4uCisgKiBTZWUgYWxzbyBodHRwOi8vbWFydGluLndpbGNrLmJlaS50LW9ubGluZS5kZS8ja2VjZiAuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGE0MDAsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiIsCisJCSJLRUNGLVVTQiIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBDYXNpbyBRViAyeDAwLzN4MDAvNDAwMC84MDAwIGRpZ2l0YWwgc3RpbGwgY2FtZXJhcyBhcmUgbm90IGNvbmZvcm1hbnQKKyAqIHRvIHRoZSBVU0Igc3RvcmFnZSBzcGVjaWZpY2F0aW9uIGluIHR3byB3YXlzOgorICogLSBUaGV5IHRlbGwgdXMgdGhleSBhcmUgdXNpbmcgdHJhbnNwb3J0IHByb3RvY29sIENCSS4gSW4gcmVhbGl0eSB0aGV5CisgKiAgIGFyZSB1c2luZyB0cmFuc3BvcnQgcHJvdG9jb2wgQ0IuCisgKiAtIFRoZXkgZG9uJ3QgbGlrZSB0aGUgSU5RVUlSWSBjb21tYW5kLiBTbyB3ZSBtdXN0IGhhbmRsZSB0aGlzIGNvbW1hbmQKKyAqICAgb2YgdGhlIFNDU0kgbGF5ZXIgb3Vyc2VsdmVzLgorICogLSBTb21lIGNhbWVyYXMgd2l0aCBpZFByb2R1Y3Q9MHgxMDAxIGFuZCBiY2REZXZpY2U9MHgxMDAwIGhhdmUKKyAqICAgYkludGVyZmFjZVByb3RvY29sPTB4MDAgKFVTX1BSX0NCSSkgd2hpbGUgb3RoZXJzIGhhdmUgMHgwMSAoVVNfUFJfQ0IpLgorICogICBTbyBkb24ndCByZW1vdmUgdGhlIFVTX1BSX0NCIG92ZXJyaWRlIQorICogLSBDYW1lcmFzIHdpdGggYmNkRGV2aWNlPTB4OTAwOSByZXF1aXJlIHRoZSBVU19TQ184MDcwIG92ZXJyaWRlLgorICovCitVTlVTVUFMX0RFViggMHgwN2NmLCAweDEwMDEsIDB4MTAwMCwgMHg5OTk5LAorCQkiQ2FzaW8iLAorCQkiUVYgRGlnaXRhbENhbWVyYSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFIHwgVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogU3VibWl0dGVkIGJ5IEhhcnRtdXQgV2FobCA8aHdhaGxAaHdhaGwuZGU+Ki8KK1VOVVNVQUxfREVWKCAweDA4MzksIDB4MDAwYSwgMHgwMDAxLCAweDAwMDEsCisJCSJTYW1zdW5nIiwKKwkJIkRpZ2ltYXggNDEwIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogRW50cnkgYW5kIHN1cHBvcnRpbmcgcGF0Y2ggYnkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1Pi4KKyAqIEZsYWcgd2lsbCBzdXBwb3J0IEJ1bGsgZGV2aWNlcyB3aGljaCB1c2UgYSBzdGFuZGFyZHMtdmlvbGF0aW5nIDMyLWJ5dGUKKyAqIENvbW1hbmQgQmxvY2sgV3JhcHBlci4gSGVyZSwgdGhlICJEQzJNRUdBIiBjYW1lcmFzIChzZXZlcmFsIGJyYW5kcykgd2l0aAorICogR3JhbmR0ZWNoIEdUODkyeCBjaGlwLCB3aGljaCByZXF1ZXN0ICJQcm9wcmlldGFyeSBTQ1NJIEJ1bGsiIHN1cHBvcnQuCisgKi8KKworVU5VU1VBTF9ERVYoICAweDA4NGQsIDB4MDAxMSwgMHgwMTEwLCAweDAxMTAsCisJCSJHcmFuZHRlY2giLAorCQkiREMyTUVHQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLMzIpLAorCisKKy8qIEVudHJ5IG5lZWRlZCBmb3IgZmxhZ3MuIE1vcmVvdmVyLCBhbGwgZGV2aWNlcyB3aXRoIHRoaXMgSUQgdXNlCisgKiBidWxrLW9ubHkgdHJhbnNwb3J0LCBidXQgX3NvbWVfIGZhbHNlbHkgcmVwb3J0IENvbnRyb2wvQnVsayBpbnN0ZWFkLgorICogT25lIGV4YW1wbGUgaXMgIlRydW1waW9uIERpZ2l0YWwgUmVzZWFyY2ggTVlNUDMiLgorICogU3VibWl0dGVkIGJ5IEJqb2VybiBCcmlsbCA8YnJpbGwoYXQpZnMubWF0aC51bmktZnJhbmtmdXJ0LmRlPgorICovCitVTlVTVUFMX0RFViggIDB4MDkwYSwgMHgxMDAxLCAweDAxMDAsIDB4MDEwMCwKKwkJIlRydW1waW9uIiwKKwkJInQzMzUyMCBVU0IgRmxhc2ggQ2FyZCBDb250cm9sbGVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFICksCisKKy8qIFRydW1waW9uIE1pY3JvZWxlY3Ryb25pY3MgTVAzIHBsYXllciAoZmVsaXBlX2FsZmFyb0BsaW51eG1haWwub3JnKSAqLworVU5VU1VBTF9ERVYoIDB4MDkwYSwgMHgxMjAwLCAweDAwMDAsIDB4OTk5OSwKKwkJIlRydW1waW9uIiwKKwkJIk1QMyBwbGF5ZXIiLAorCQlVU19TQ19SQkMsIFVTX1BSX0JVTEssIE5VTEwsCisJCTAgKSwKKworLyogYWViICovCitVTlVTVUFMX0RFViggMHgwOTBjLCAweDExMzIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRmVpeWEiLAorCQkiNS1pbi0xIENhcmQgUmVhZGVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCisvKiBUaGlzIFBlbnRheCBzdGlsbCBjYW1lcmEgaXMgbm90IGNvbmZvcm1hbnQKKyAqIHRvIHRoZSBVU0Igc3RvcmFnZSBzcGVjaWZpY2F0aW9uOiAtCisgKiAtIEl0IGRvZXMgbm90IGxpa2UgdGhlIElOUVVJUlkgY29tbWFuZC4gU28gd2UgbXVzdCBoYW5kbGUgdGhpcyBjb21tYW5kCisgKiAgIG9mIHRoZSBTQ1NJIGxheWVyIG91cnNlbHZlcy4KKyAqIFRlc3RlZCBvbiBSZXYuIDEwLjAwICgweDEwMDApCisgKiBTdWJtaXR0ZWQgYnkgSmFtZXMgQ291cnRpZXItRHV0dG9uIDxKYW1lc0BzdXBlcmJ1Zy5kZW1vbi5jby51az4KKyAqLworVU5VU1VBTF9ERVYoIDB4MGExNywgMHgwMDA0LCAweDEwMDAsIDB4MTAwMCwKKyAgICAgICAgICAgICAgICAiUGVudGF4IiwKKyAgICAgICAgICAgICAgICAiT3B0aW8gMi8zLzQwMCIsCisgICAgICAgICAgICAgICAgVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisgICAgICAgICAgICAgICAgVVNfRkxfRklYX0lOUVVJUlkgKSwKKworCisvKiBTdWJtaXR0ZWQgYnkgUGVyIFdpbmt2aXN0IDxwZXIud2lua3Zpc3RAdWsuY29tPiAqLworVU5VU1VBTF9ERVYoIDB4MGExNywgMHgwMDYsIDB4MDAwMCwgMHhmZmZmLAorICAgICAgICAgICAgICAgICJQZW50YXgiLAorICAgICAgICAgICAgICAgICJPcHRpbyBTL1M0IiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9GSVhfSU5RVUlSWSApLAorCQkKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCitVTlVTVUFMX0RFViggIDB4MGJmNiwgMHhhMDAxLCAweDAxMDAsIDB4MDExMCwKKwkJIkFUSSIsCisJCSJVU0IgQ2FibGUgMjA1IiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKK1VOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJICAgICAgICJBY29tZGF0YSIsCisJICAgICAgICJDRiIsCisJICAgICAgIFVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJICAgICAgIFVTX0ZMX1NJTkdMRV9MVU4gKSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKK1VOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJICAgICAgICJBY29tZGF0YSIsCisJICAgICAgICJTTSIsCisJICAgICAgIFVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkgICAgICAgVVNfRkxfU0lOR0xFX0xVTiApLAorI2VuZGlmCisKKy8qIFN1Ym1pdHRlZCBieSBKb3JpcyBTdHJ1eXZlIDxqb3Jpc0BzdHJ1eXZlLmJlPiAqLworVU5VU1VBTF9ERVYoIDB4MGQ5NiwgMHg0MTBhLCAweDAwMDEsIDB4ZmZmZiwKKwkJIk1lZGlvbiIsCisJCSJNRCA3NDI1IiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyoKKyAqIEVudHJ5IGZvciBKZW5vcHRpayBKRCA1MjAwejMKKyAqCisgKiBlbWFpbDogY2FyLmJ1c3NlQGdteC5kZQorICovCitVTlVTVUFMX0RFViggIDB4MGQ5NiwgMHg1MjAwLCAweDAwMDEsIDB4MDIwMCwKKwkJIkplbm9wdGlrIiwKKwkJIkpEIDUyMDAgejMiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBSZXBvcnRlZCBieSBMdWJvbWlyIEJsYWhhIDx0cml0b2xAdHJpbG9naWMuY3o+CisgKiBJIF9SRUFMTFlfIGRvbid0IGtub3cgd2hhdCAzcmQsIDR0aCBudW1iZXIgYW5kIGFsbCBkZWZpbmVzIG1lYW4sIGJ1dCB0aGlzCisgKiB3b3JrcyBmb3IgbWUuIENhbiBhbnlib2R5IGNvcnJlY3QgdGhlc2UgdmFsdWVzPyAoSSBhYmxlIHRvIHRlc3QgY29ycmVjdGVkCisgKiB2ZXJzaW9uLikKKyAqLworVU5VU1VBTF9ERVYoIDB4MGRkOCwgMHgxMDYwLCAweDAwMDAsIDB4ZmZmZiwKKwkJIk5ldGFjIiwKKwkJIlVTQi1DRi1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKy8qIFBhdGNoIGJ5IFN0ZXBoYW4gV2FsdGVyIDxzdGVwaGFuLndhbHRlckBlcGZsLmNoPgorICogSSBkb24ndCBrbm93IHdoeSwgYnV0IGl0IHdvcmtzLi4uICovCitVTlVTVUFMX0RFViggMHgwZGRhLCAweDAwMDEsIDB4MDAxMiwgMHgwMDEyLAorCQkiV0lOV0FSRCIsCisJCSJNdXNpYyBEaXNrIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFJlcG9ydGVkIGJ5IElhbiBNY0Nvbm5lbGwgPGlhbiBhdCBlbWl0LmRlbW9uLmNvLnVrPiAqLworVU5VU1VBTF9ERVYoICAweDBkZGEsIDB4MDMwMSwgMHgwMDEyLCAweDAwMTIsCisJCSJQTlBfTVAzIiwKKwkJIlBOUF9NUDMgUExBWUVSIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFN1Ym1pdHRlZCBieSBBbnRvaW5lIE1haXJlc3NlIDxhbnRvaW5lLm1haXJlc3NlQGZyZWUuZnI+ICovCitVTlVTVUFMX0RFViggMHgwZWQxLCAweDY2NjAsIDB4MDEwMCwgMHgwMzAwLAorCQkiVVNCIiwKKwkJIlNvbGlkIHN0YXRlIGRpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogU3VibWl0dGVkIGJ5IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisgKiBSZXBvcnRlZCBieSBkYXl1bCBvbiB0aGUgR2VudG9vIEZvcnVtcyAqLworVU5VU1VBTF9ERVYoICAweDBlYTAsIDB4MjE2OCwgMHgwMTEwLCAweDAxMTAsCisJCSJPdXJzIFRlY2hub2xvZ3kiLAorCQkiRmxhc2ggRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBSYXN0aXNsYXYgU3RhbmlrIDxyc19rZXJuZWxAeWFob28uY29tPiAqLworVU5VU1VBTF9ERVYoICAweDBlYTAsIDB4NjgyOCwgMHgwMTEwLCAweDAxMTAsCisJCSJVU0IiLAorCQkiRmxhc2ggRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBNaWNoYWVsIFN0YXR0bWFubiA8bWljaGFlbEBzdGF0dG1hbm4uY29tPiAqLworVU5VU1VBTF9ERVYoICAweDBmY2UsIDB4ZDAwOCwgMHgwMDAwLCAweDAwMDAsCisJCSJTb255IEVyaWNzc29uIiwKKwkJIlY4MDAtVm9kYWZvbmUgODAyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX1dQX0RFVEVDVCApLAorCisvKiBSZXBvcnRlZCBieSBLZXZpbiBDZXJuZWtlZSA8a3BjLXVzYmRldkBnZWxhdG8udWl1Yy5lZHU+CisgKiBUZXN0ZWQgb24gaGFyZHdhcmUgdmVyc2lvbiAxLjEwLgorICogRW50cnkgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBvdmVycmlkZS4KKyAqLworVU5VU1VBTF9ERVYoICAweDEwMTksIDB4MGM1NSwgMHgwMDAwLCAweDk5OTksCisJCSJEZXNrbm90ZSIsCisJCSJVQ1ItNjFTMkIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdCwKKwkJMCApLAorCisvKiBSZXBvcnRlZCBieSBLb3RybGEgVml0ZXpzbGF2IDxrb3RybGFAY2ViLmN6PiAqLworVU5VU1VBTF9ERVYoICAweDEzNzAsIDB4NjgyOCwgMHgwMTEwLCAweDAxMTAsCisJCSJTV0lTU0JJVCIsCisJCSJCbGFjayBTaWx2ZXIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgUmFkb3ZhbiBHYXJhYmlrIDxnYXJhYmlrQGthc3Npb3BlaWEuanVscy5zYXZiYS5zaz4gKi8KK1VOVVNVQUxfREVWKCAgMHgyNzM1LCAweDEwMGIsIDB4MDAwMCwgMHg5OTk5LAorCQkiTVBJTyIsCisJCSJIUzIwMCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9HT19TTE9XICksCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CitVTlVTVUFMX0RFViggIDB4NTVhYSwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwgCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4pLAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWMxY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtMCwwICsxLDEwNTEgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICoKKyAqICRJZDogdXNiLmMsdiAxLjc1IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LTIwMDMgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCisgKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiB1c2JfZGV2aWNlX2lkIHN1cHBvcnQgYnkgQWRhbSBKLiBSaWNodGVyIChhZGFtQHlnZ2RyYXNpbC5jb20pOgorICogICAoYykgMjAwMCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAic2NzaWdsdWUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaW5pdGlhbGl6ZXJzLmgiCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKyNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisjaW5jbHVkZSAic2RkcjA5LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisjaW5jbHVkZSAic2RkcjU1LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQorI2luY2x1ZGUgImRwY20uaCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCisjaW5jbHVkZSAiZnJlZWNvbS5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorI2luY2x1ZGUgImlzZDIwMC5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKyNpbmNsdWRlICJkYXRhZmFiLmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKKyNpbmNsdWRlICJqdW1wc2hvdC5oIgorI2VuZGlmCisKKworLyogU29tZSBpbmZvcm1hdGlvbmFsIGRhdGEgKi8KK01PRFVMRV9BVVRIT1IoIk1hdHRoZXcgRGhhcm0gPG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgTWFzcyBTdG9yYWdlIGRyaXZlciBmb3IgTGludXgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWxheV91c2UgPSA1OworbW9kdWxlX3BhcmFtKGRlbGF5X3VzZSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWxheV91c2UsICJzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSB1c2luZyBhIG5ldyBkZXZpY2UiKTsKKworCisvKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHN1cmUgdGhlIG1vZHVsZSBkb2Vzbid0IHVubG9hZCBiZWZvcmUgYWxsIHRoZQorICogdGhyZWFkcyBoYXZlIGV4aXRlZC4KKyAqLworc3RhdGljIGF0b21pY190IHRvdGFsX3RocmVhZHMgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04odGhyZWFkc19nb25lKTsKKworCitzdGF0aWMgaW50IHN0b3JhZ2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKK3N0YXRpYyB2b2lkIHN0b3JhZ2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworCisvKiBUaGUgZW50cmllcyBpbiB0aGlzIHRhYmxlLCBleGNlcHQgZm9yIGZpbmFsIG9uZXMgaGVyZQorICogKFVTQl9NQVNTX1NUT1JBR0VfQ0xBU1MgYW5kIHRoZSBlbXB0eSBlbnRyeSksIGNvcnJlc3BvbmQsCisgKiBsaW5lIGZvciBsaW5lIHdpdGggdGhlIGVudHJpZXMgb2YgdXNfdW5zdWF1bF9kZXZfbGlzdFtdLgorICovCisKKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpIH0KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKKworIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKKyN1bmRlZiBVTlVTVUFMX0RFVgorCS8qIENvbnRyb2wvQnVsayB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19SQkMsIFVTX1BSX0NCKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0NCKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQ0IpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfVUZJLCBVU19QUl9DQikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9DQikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9DQikgfSwKKworCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9DQkkpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfODAyMCwgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwNzAsIFVTX1BSX0NCSSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9DQkkpIH0sCisKKwkvKiBCdWxrLW9ubHkgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0JVTEspIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUUlDLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQlVMSykgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1NDU0ksIFVTX1BSX0JVTEspIH0sCisKKwkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBzdG9yYWdlX3VzYl9pZHMpOworCisvKiBUaGlzIGlzIHRoZSBsaXN0IG9mIGRldmljZXMgd2UgcmVjb2duaXplLCBhbG9uZyB3aXRoIHRoZWlyIGZsYWcgZGF0YSAqLworCisvKiBUaGUgdmVuZG9yIG5hbWUgc2hvdWxkIGJlIGtlcHQgYXQgZWlnaHQgY2hhcmFjdGVycyBvciBsZXNzLCBhbmQKKyAqIHRoZSBwcm9kdWN0IG5hbWUgc2hvdWxkIGJlIGtlcHQgYXQgMTYgY2hhcmFjdGVycyBvciBsZXNzLiBJZiBhIGRldmljZQorICogaGFzIHRoZSBVU19GTF9GSVhfSU5RVUlSWSBmbGFnLCB0aGVuIHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgbmFtZXMKKyAqIG5vcm1hbGx5IGdlbmVyYXRlZCBieSBhIGRldmljZSB0aG9ydWdoIHRoZSBJTlFVSVJZIHJlc3BvbnNlIHdpbGwgYmUKKyAqIHRha2VuIGZyb20gdGhpcyBsaXN0LCBhbmQgdGhpcyBpcyB0aGUgcmVhc29uIGZvciB0aGUgYWJvdmUgc2l6ZQorICogcmVzdHJpY3Rpb24uIEhvd2V2ZXIsIGlmIHRoZSBmbGFnIGlzIG5vdCBwcmVzZW50LCB0aGVuIHlvdQorICogYXJlIGZyZWUgdG8gdXNlIGFzIG1hbnkgY2hhcmFjdGVycyBhcyB5b3UgbGlrZS4KKyAqLworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCisJLmZsYWdzID0gRmxhZ3MsIFwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c191bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIiAKKyMJdW5kZWYgVU5VU1VBTF9ERVYKKwkvKiBDb250cm9sL0J1bGsgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19SQkMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfVUZJLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCisKKwkvKiBDb250cm9sL0J1bGsvSW50ZXJydXB0IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ184MDIwLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0JJfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODA3MCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCisJLyogQnVsay1vbmx5IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1FJQywKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQlVMS30sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19TQ1NJLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAorCisJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAorCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Jc3RvcmFnZV91c2JfaWRzLAorfTsKKworLyoKKyAqIGZpbGxfaW5xdWlyeV9yZXNwb25zZSB0YWtlcyBhbiB1bnNpZ25lZCBjaGFyIGFycmF5ICh3aGljaCBtdXN0CisgKiBiZSBhdCBsZWFzdCAzNiBjaGFyYWN0ZXJzKSBhbmQgcG9wdWxhdGVzIHRoZSB2ZW5kb3IgbmFtZSwKKyAqIHByb2R1Y3QgbmFtZSwgYW5kIHJldmlzaW9uIGZpZWxkcy4gVGhlbiB0aGUgYXJyYXkgaXMgY29waWVkCisgKiBpbnRvIHRoZSBTQ1NJIGNvbW1hbmQncyByZXNwb25zZSBidWZmZXIgKG9kZGx5IGVub3VnaAorICogY2FsbGVkIHJlcXVlc3RfYnVmZmVyKS4gZGF0YV9sZW4gY29udGFpbnMgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIGRhdGEgYXJyYXksIHdoaWNoIGFnYWluIG11c3QgYmUgYXQgbGVhc3QgMzYuCisgKi8KKwordm9pZCBmaWxsX2lucXVpcnlfcmVzcG9uc2Uoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4pCit7CisJaWYgKGRhdGFfbGVuPDM2KSAvLyBZb3UgbG9zZS4KKwkJcmV0dXJuOworCisJaWYoZGF0YVswXSYweDIwKSB7IC8qIFVTQiBkZXZpY2UgY3VycmVudGx5IG5vdCBjb25uZWN0ZWQuIFJldHVybgorCQkJICAgICAgcGVyaXBoZXJhbCBxdWFsaWZpZXIgMDAxYiAoIi4uLmhvd2V2ZXIsIHRoZQorCQkJICAgICAgcGh5c2ljYWwgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkCisJCQkgICAgICB0byB0aGlzIGxvZ2ljYWwgdW5pdCIpIGFuZCBsZWF2ZSB2ZW5kb3IgYW5kCisJCQkgICAgICBwcm9kdWN0IGlkZW50aWZpY2F0aW9uIGVtcHR5LiAoIklmIHRoZSB0YXJnZXQKKwkJCSAgICAgIGRvZXMgc3RvcmUgc29tZSBvZiB0aGUgSU5RVUlSWSBkYXRhIG9uIHRoZQorCQkJICAgICAgZGV2aWNlLCBpdCBtYXkgcmV0dXJuIHplcm9zIG9yIEFTQ0lJIHNwYWNlcyAKKwkJCSAgICAgICgyMGgpIGluIHRob3NlIGZpZWxkcyB1bnRpbCB0aGUgZGF0YSBpcworCQkJICAgICAgYXZhaWxhYmxlIGZyb20gdGhlIGRldmljZS4iKS4gKi8KKwkJbWVtc2V0KGRhdGErOCwwLDI4KTsKKwl9IGVsc2UgeworCQl1MTYgYmNkRGV2aWNlID0gbGUxNl90b19jcHUodXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJCW1lbWNweShkYXRhKzgsIHVzLT51bnVzdWFsX2Rldi0+dmVuZG9yTmFtZSwgCisJCQlzdHJsZW4odXMtPnVudXN1YWxfZGV2LT52ZW5kb3JOYW1lKSA+IDggPyA4IDoKKwkJCXN0cmxlbih1cy0+dW51c3VhbF9kZXYtPnZlbmRvck5hbWUpKTsKKwkJbWVtY3B5KGRhdGErMTYsIHVzLT51bnVzdWFsX2Rldi0+cHJvZHVjdE5hbWUsIAorCQkJc3RybGVuKHVzLT51bnVzdWFsX2Rldi0+cHJvZHVjdE5hbWUpID4gMTYgPyAxNiA6CisJCQlzdHJsZW4odXMtPnVudXN1YWxfZGV2LT5wcm9kdWN0TmFtZSkpOworCQlkYXRhWzMyXSA9IDB4MzAgKyAoKGJjZERldmljZT4+MTIpICYgMHgwRik7CisJCWRhdGFbMzNdID0gMHgzMCArICgoYmNkRGV2aWNlPj44KSAmIDB4MEYpOworCQlkYXRhWzM0XSA9IDB4MzAgKyAoKGJjZERldmljZT4+NCkgJiAweDBGKTsKKwkJZGF0YVszNV0gPSAweDMwICsgKChiY2REZXZpY2UpICYgMHgwRik7CisJfQorCisJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKK30KKworc3RhdGljIGludCB1c2Jfc3Rvcl9jb250cm9sX3RocmVhZCh2b2lkICogX191cykKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSAoc3RydWN0IHVzX2RhdGEgKilfX3VzOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSB1c190b19ob3N0KHVzKTsKKworCWxvY2tfa2VybmVsKCk7CisKKwkvKgorCSAqIFRoaXMgdGhyZWFkIGRvZXNuJ3QgbmVlZCBhbnkgdXNlci1sZXZlbCBhY2Nlc3MsCisJICogc28gZ2V0IHJpZCBvZiBhbGwgb3VyIHJlc291cmNlcy4KKwkgKi8KKwlkYWVtb25pemUoInVzYi1zdG9yYWdlIik7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisJdW5sb2NrX2tlcm5lbCgpOworCisJLyogYWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCwgc28gaXQgd29uJ3QgYmUgZGVhbGxvY2F0ZWQKKwkgKiB1bnRpbCB3ZSdyZSByZWFkeSB0byBleGl0ICovCisJc2NzaV9ob3N0X2dldChob3N0KTsKKworCS8qIHNpZ25hbCB0aGF0IHdlJ3ZlIHN0YXJ0ZWQgdGhlIHRocmVhZCAqLworCWNvbXBsZXRlKCYodXMtPm5vdGlmeSkpOworCisJZm9yKDs7KSB7CisJCVVTX0RFQlVHUCgiKioqIHRocmVhZCBzbGVlcGluZy5cbiIpOworCQlpZihkb3duX2ludGVycnVwdGlibGUoJnVzLT5zZW1hKSkKKwkJCWJyZWFrOworCQkJCisJCVVTX0RFQlVHUCgiKioqIHRocmVhZCBhd2FrZW5lZC5cbiIpOworCisJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQlkb3duKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKworCQkvKiBpZiB0aGUgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQsIHdlIGFyZSBmcmVlIHRvIGV4aXQgKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCQlVU19ERUJVR1AoIi0tIGV4aXRpbmdcbiIpOworCQkJdXAoJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBsb2NrIGFjY2VzcyB0byB0aGUgc3RhdGUgKi8KKwkJc2NzaV9sb2NrKGhvc3QpOworCisJCS8qIGhhcyB0aGUgY29tbWFuZCB0aW1lZCBvdXQgKmFscmVhZHkqID8gKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJCXVzLT5zcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKwkJCWdvdG8gU2tpcEZvckFib3J0OworCQl9CisKKwkJc2NzaV91bmxvY2soaG9zdCk7CisKKwkJLyogcmVqZWN0IHRoZSBjb21tYW5kIGlmIHRoZSBkaXJlY3Rpb24gaW5kaWNhdG9yIAorCQkgKiBpcyBVTktOT1dOCisJCSAqLworCQlpZiAodXMtPnNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwpIHsKKwkJCVVTX0RFQlVHUCgiVU5LTk9XTiBkYXRhIGRpcmVjdGlvblxuIik7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCX0KKworCQkvKiByZWplY3QgaWYgdGFyZ2V0ICE9IDAgb3IgaWYgTFVOIGlzIGhpZ2hlciB0aGFuCisJCSAqIHRoZSBtYXhpbXVtIGtub3duIExVTgorCQkgKi8KKwkJZWxzZSBpZiAodXMtPnNyYi0+ZGV2aWNlLT5pZCAmJiAKKwkJCQkhKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpKSB7CisJCQlVU19ERUJVR1AoIkJhZCB0YXJnZXQgbnVtYmVyICglZDolZClcbiIsCisJCQkJICB1cy0+c3JiLT5kZXZpY2UtPmlkLCB1cy0+c3JiLT5kZXZpY2UtPmx1bik7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKKwkJfQorCisJCWVsc2UgaWYgKHVzLT5zcmItPmRldmljZS0+bHVuID4gdXMtPm1heF9sdW4pIHsKKwkJCVVTX0RFQlVHUCgiQmFkIExVTiAoJWQ6JWQpXG4iLAorCQkJCSAgdXMtPnNyYi0+ZGV2aWNlLT5pZCwgdXMtPnNyYi0+ZGV2aWNlLT5sdW4pOworCQkJdXMtPnNyYi0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCX0KKworCQkvKiBIYW5kbGUgdGhvc2UgZGV2aWNlcyB3aGljaCBuZWVkIHVzIHRvIGZha2UgCisJCSAqIHRoZWlyIGlucXVpcnkgZGF0YSAqLworCQllbHNlIGlmICgodXMtPnNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSAmJgorCQkJICAgICh1cy0+ZmxhZ3MgJiBVU19GTF9GSVhfSU5RVUlSWSkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgZGF0YV9wdHJbMzZdID0geworCQkJICAgIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDIsCisJCQkgICAgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMH07CisKKwkJCVVTX0RFQlVHUCgiRmFraW5nIElOUVVJUlkgY29tbWFuZFxuIik7CisJCQlmaWxsX2lucXVpcnlfcmVzcG9uc2UodXMsIGRhdGFfcHRyLCAzNik7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQl9CisKKwkJLyogd2UndmUgZ290IGEgY29tbWFuZCwgbGV0J3MgZG8gaXQhICovCisJCWVsc2UgeworCQkJVVNfREVCVUcodXNiX3N0b3Jfc2hvd19jb21tYW5kKHVzLT5zcmIpKTsKKwkJCXVzLT5wcm90b19oYW5kbGVyKHVzLT5zcmIsIHVzKTsKKwkJfQorCisJCS8qIGxvY2sgYWNjZXNzIHRvIHRoZSBzdGF0ZSAqLworCQlzY3NpX2xvY2soaG9zdCk7CisKKwkJLyogaW5kaWNhdGUgdGhhdCB0aGUgY29tbWFuZCBpcyBkb25lICovCisJCWlmICh1cy0+c3JiLT5yZXN1bHQgIT0gRElEX0FCT1JUIDw8IDE2KSB7CisJCQlVU19ERUJVR1AoInNjc2kgY21kIGRvbmUsIHJlc3VsdD0weCV4XG4iLCAKKwkJCQkgICB1cy0+c3JiLT5yZXN1bHQpOworCQkJdXMtPnNyYi0+c2NzaV9kb25lKHVzLT5zcmIpOworCQl9IGVsc2UgeworU2tpcEZvckFib3J0OgorCQkJVVNfREVCVUdQKCJzY3NpIGNvbW1hbmQgYWJvcnRlZFxuIik7CisJCX0KKworCQkvKiBJZiBhbiBhYm9ydCByZXF1ZXN0IHdhcyByZWNlaXZlZCB3ZSBuZWVkIHRvIHNpZ25hbCB0aGF0CisJCSAqIHRoZSBhYm9ydCBoYXMgZmluaXNoZWQuICBUaGUgcHJvcGVyIHRlc3QgZm9yIHRoaXMgaXMKKwkJICogdGhlIFRJTUVEX09VVCBmbGFnLCBub3Qgc3JiLT5yZXN1bHQgPT0gRElEX0FCT1JULCBiZWNhdXNlCisJCSAqIGEgdGltZW91dC9hYm9ydCByZXF1ZXN0IG1pZ2h0IGJlIHJlY2VpdmVkIGFmdGVyIGFsbCB0aGUKKwkJICogVVNCIHByb2Nlc3Npbmcgd2FzIGNvbXBsZXRlLiAqLworCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkKKwkJCWNvbXBsZXRlKCYodXMtPm5vdGlmeSkpOworCisJCS8qIGZpbmlzaGVkIHdvcmtpbmcgb24gdGhpcyBjb21tYW5kICovCisJCXVzLT5zcmIgPSBOVUxMOworCQlzY3NpX3VubG9jayhob3N0KTsKKworCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQl1cCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJfSAvKiBmb3IgKDs7KSAqLworCisJc2NzaV9ob3N0X3B1dChob3N0KTsKKworCS8qIG5vdGlmeSB0aGUgZXhpdCByb3V0aW5lIHRoYXQgd2UncmUgYWN0dWFsbHkgZXhpdGluZyBub3cgCisJICoKKwkgKiBjb21wbGV0ZSgpL3dhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBzaW1pbGFyIHRvIHVwKCkvZG93bigpLAorCSAqIGV4Y2VwdCB0aGF0IGNvbXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCisJICogaXMgZ2V0dGluZyBkZWxldGVkIGluIGEgcGFyYWxsZWwgbW9kZSBvZiBleGVjdXRpb24gKGkuZS4ganVzdAorCSAqIGFmdGVyIHRoZSBkb3duKCkgLS0gdGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHRocmVhZC1zaHV0ZG93bgorCSAqIGNhc2UuCisJICoKKwkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIGdvZXMgZXZlbiBmdXJ0aGVyIHRoYW4gdGhpcyAtLSBpdCBpcyBzYWZlIGluCisJICogdGhlIGNhc2UgdGhhdCB0aGUgdGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKKwkgKiB0aGUgc3RydWN0dXJlKSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIG1vZHVsZS1yZW1vdmUgY2FzZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBpbiBwcmVlbXB0aW9uIGtlcm5lbHMsIHdoaWNoIHRyYW5zZmVyIHRoZSBmbG93CisJICogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgpLgorCSAqLworCWNvbXBsZXRlX2FuZF9leGl0KCZ0aHJlYWRzX2dvbmUsIDApOworfQkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXZpY2UgcHJvYmluZyBhbmQgZGlzY29ubmVjdGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBc3NvY2lhdGUgb3VyIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBVU0IgZGV2aWNlICovCitzdGF0aWMgaW50IGFzc29jaWF0ZV9kZXYoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlVU19ERUJVR1AoIi0tICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogRmlsbCBpbiB0aGUgZGV2aWNlLXJlbGF0ZWQgZmllbGRzICovCisJdXMtPnB1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl1cy0+cHVzYl9pbnRmID0gaW50ZjsKKwl1cy0+aWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCVVTX0RFQlVHUCgiVmVuZG9yOiAweCUwNHgsIFByb2R1Y3Q6IDB4JTA0eCwgUmV2aXNpb246IDB4JTA0eFxuIiwKKwkJCWxlMTZfdG9fY3B1KHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQlsZTE2X3RvX2NwdSh1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCWxlMTZfdG9fY3B1KHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKwlVU19ERUJVR1AoIkludGVyZmFjZSBTdWJjbGFzczogMHglMDJ4LCBQcm90b2NvbDogMHglMDJ4XG4iLAorCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzLAorCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVByb3RvY29sKTsKKworCS8qIFN0b3JlIG91ciBwcml2YXRlIGRhdGEgaW4gdGhlIGludGVyZmFjZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdXMpOworCisJLyogQWxsb2NhdGUgdGhlIGRldmljZS1yZWxhdGVkIERNQS1tYXBwZWQgYnVmZmVycyAqLworCXVzLT5jciA9IHVzYl9idWZmZXJfYWxsb2ModXMtPnB1c2JfZGV2LCBzaXplb2YoKnVzLT5jciksCisJCQlHRlBfS0VSTkVMLCAmdXMtPmNyX2RtYSk7CisJaWYgKCF1cy0+Y3IpIHsKKwkJVVNfREVCVUdQKCJ1c2JfY3RybHJlcXVlc3QgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cy0+aW9idWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVzLT5wdXNiX2RldiwgVVNfSU9CVUZfU0laRSwKKwkJCUdGUF9LRVJORUwsICZ1cy0+aW9idWZfZG1hKTsKKwlpZiAoIXVzLT5pb2J1ZikgeworCQlVU19ERUJVR1AoIkkvTyBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEdldCB0aGUgdW51c3VhbF9kZXZzIGVudHJpZXMgYW5kIHRoZSBzdHJpbmcgZGVzY3JpcHRvcnMgKi8KK3N0YXRpYyB2b2lkIGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGludCBpZF9pbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXMtPnB1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmlkZXNjID0KKwkJJnVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYgPSAmdXNfdW51c3VhbF9kZXZfbGlzdFtpZF9pbmRleF07CisJc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkID0gJnN0b3JhZ2VfdXNiX2lkc1tpZF9pbmRleF07CisKKwkvKiBTdG9yZSB0aGUgZW50cmllcyAqLworCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OworCXVzLT5zdWJjbGFzcyA9ICh1bnVzdWFsX2Rldi0+dXNlUHJvdG9jb2wgPT0gVVNfU0NfREVWSUNFKSA/CisJCQlpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzIDoKKwkJCXVudXN1YWxfZGV2LT51c2VQcm90b2NvbDsKKwl1cy0+cHJvdG9jb2wgPSAodW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydCA9PSBVU19QUl9ERVZJQ0UpID8KKwkJCWlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wgOgorCQkJdW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydDsKKwl1cy0+ZmxhZ3MgPSB1bnVzdWFsX2Rldi0+ZmxhZ3M7CisKKwkvKgorCSAqIFRoaXMgZmxhZyBpcyBvbmx5IG5lZWRlZCB3aGVuIHdlJ3JlIGluIGhpZ2gtc3BlZWQsIHNvIGxldCdzCisJICogZGlzYWJsZSBpdCBpZiB3ZSdyZSBpbiBmdWxsLXNwZWVkCisJICovCisJaWYgKGRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCisJCXVzLT5mbGFncyAmPSB+VVNfRkxfR09fU0xPVzsKKworCS8qIExvZyBhIG1lc3NhZ2UgaWYgYSBub24tZ2VuZXJpYyB1bnVzdWFsX2RldiBlbnRyeSBjb250YWlucyBhbgorCSAqIHVubmVjZXNzYXJ5IHN1YmNsYXNzIG9yIHByb3RvY29sIG92ZXJyaWRlLiAgVGhpcyBtYXkgc3RpbXVsYXRlCisJICogcmVwb3J0cyBmcm9tIHVzZXJzIHRoYXQgd2lsbCBoZWxwIHVzIHJlbW92ZSB1bm5lZWRlZCBlbnRyaWVzCisJICogZnJvbSB0aGUgdW51c3VhbF9kZXZzLmggdGFibGUuCisJICovCisJaWYgKGlkLT5pZFZlbmRvciB8fCBpZC0+aWRQcm9kdWN0KSB7CisJCXN0YXRpYyBjaGFyICptc2dzWzNdID0geworCQkJImFuIHVubmVlZGVkIFN1YkNsYXNzIGVudHJ5IiwKKwkJCSJhbiB1bm5lZWRlZCBQcm90b2NvbCBlbnRyeSIsCisJCQkidW5uZWVkZWQgU3ViQ2xhc3MgYW5kIFByb3RvY29sIGVudHJpZXMifTsKKwkJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGRlc2MgPSAmZGV2LT5kZXNjcmlwdG9yOworCQlpbnQgbXNnID0gLTE7CisKKwkJaWYgKHVudXN1YWxfZGV2LT51c2VQcm90b2NvbCAhPSBVU19TQ19ERVZJQ0UgJiYKKwkJCXVzLT5zdWJjbGFzcyA9PSBpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzKQorCQkJbXNnICs9IDE7CisJCWlmICh1bnVzdWFsX2Rldi0+dXNlVHJhbnNwb3J0ICE9IFVTX1BSX0RFVklDRSAmJgorCQkJdXMtPnByb3RvY29sID09IGlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wpCisJCQltc2cgKz0gMjsKKwkJaWYgKG1zZyA+PSAwICYmICEodW51c3VhbF9kZXYtPmZsYWdzICYgVVNfRkxfTkVFRF9PVkVSUklERSkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgVVNCX1NUT1JBR0UgIlRoaXMgZGV2aWNlICIKKwkJCQkiKCUwNHgsJTA0eCwlMDR4IFMgJTAyeCBQICUwMngpIgorCQkJCSIgaGFzICVzIGluIHVudXN1YWxfZGV2cy5oXG4iCisJCQkJIiAgIFBsZWFzZSBzZW5kIGEgY29weSBvZiB0aGlzIG1lc3NhZ2UgdG8gIgorCQkJCSI8bGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIsCisJCQkJbGUxNl90b19jcHUoZGRlc2MtPmlkVmVuZG9yKSwKKwkJCQlsZTE2X3RvX2NwdShkZGVzYy0+aWRQcm9kdWN0KSwKKwkJCQlsZTE2X3RvX2NwdShkZGVzYy0+YmNkRGV2aWNlKSwKKwkJCQlpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzLAorCQkJCWlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wsCisJCQkJbXNnc1ttc2ddKTsKKwl9Cit9CisKKy8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCitzdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN3aXRjaCAodXMtPnByb3RvY29sKSB7CisJY2FzZSBVU19QUl9DQjoKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wvQnVsayI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9DQl90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSA3OworCQlicmVhazsKKworCWNhc2UgVVNfUFJfQ0JJOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrL0ludGVycnVwdCI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9DQklfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gNzsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1BSX0JVTEs6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJCdWxrIjsKKwkJdXMtPnRyYW5zcG9ydCA9IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKwljYXNlIFVTX1BSX1NDTV9BVEFQSToKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNDTS9BVEFQSSI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2JhdF90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQorCWNhc2UgVVNfUFJfRVVTQl9TRERSMDk6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJFVVNCL1NERFIwOSI7CisJCXVzLT50cmFuc3BvcnQgPSBzZGRyMDlfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKwljYXNlIFVTX1BSX1NERFI1NToKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNERFI1NSI7CisJCXVzLT50cmFuc3BvcnQgPSBzZGRyNTVfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQorCWNhc2UgVVNfUFJfRFBDTV9VU0I6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sL0J1bGstRVVTQi9TRERSMDkiOworCQl1cy0+dHJhbnNwb3J0ID0gZHBjbV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KKwljYXNlIFVTX1BSX0ZSRUVDT006CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJGcmVlY29tIjsKKwkJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfZnJlZWNvbV9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAwOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKwljYXNlIFVTX1BSX0RBVEFGQUI6CisJCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiRGF0YWZhYiBCdWxrLU9ubHkiOworCQl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKKwljYXNlIFVTX1BSX0pVTVBTSE9UOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkxleGFyIEp1bXBzaG90IENvbnRyb2wvQnVsayI7CisJCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTzsKKwl9CisJVVNfREVCVUdQKCJUcmFuc3BvcnQ6ICVzXG4iLCB1cy0+dHJhbnNwb3J0X25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKKwkJdXMtPm1heF9sdW4gPSAwOworCXJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCitzdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3dpdGNoICh1cy0+c3ViY2xhc3MpIHsKKwljYXNlIFVTX1NDX1JCQzoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiUmVkdWNlZCBCbG9jayBDb21tYW5kcyAoUkJDKSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kOworCQlicmVhazsKKworCWNhc2UgVVNfU0NfODAyMDoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiODAyMGkiOworCQl1cy0+cHJvdG9faGFuZGxlciA9IHVzYl9zdG9yX0FUQVBJX2NvbW1hbmQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1NDX1FJQzoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiUUlDLTE1NyI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1NDXzgwNzA6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIjgwNzBpIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl9BVEFQSV9jb21tYW5kOworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworCisJY2FzZSBVU19TQ19TQ1NJOgorCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQ7CisJCWJyZWFrOworCisJY2FzZSBVU19TQ19VRkk6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorCWNhc2UgVVNfU0NfSVNEMjAwOgorCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTzsKKwl9CisJVVNfREVCVUdQKCJQcm90b2NvbDogJXNcbiIsIHVzLT5wcm90b2NvbF9uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IHRoZSBwaXBlIHNldHRpbmdzICovCitzdGF0aWMgaW50IGdldF9waXBlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9CisJCXVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nOworCWludCBpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pbiA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9vdXQgPSBOVUxMOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaW50ID0gTlVMTDsKKworCS8qCisJICogRmluZCB0aGUgZW5kcG9pbnRzIHdlIG5lZWQuCisJICogV2UgYXJlIGV4cGVjdGluZyBhIG1pbmltdW0gb2YgMiBlbmRwb2ludHMgLSBpbiBhbmQgb3V0IChidWxrKS4KKwkgKiBBbiBvcHRpb25hbCBpbnRlcnJ1cHQgaXMgT0sgKG5lY2Vzc2FyeSBmb3IgQ0JJIHByb3RvY29sKS4KKwkgKiBXZSB3aWxsIGlnbm9yZSBhbnkgb3RoZXJzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllcCA9ICZhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjOworCisJCS8qIElzIGl0IGEgQlVMSyBlbmRwb2ludD8gKi8KKwkJaWYgKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkJLyogQlVMSyBpbiBvciBvdXQ/ICovCisJCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCWVwX2luID0gZXA7CisJCQllbHNlCisJCQkJZXBfb3V0ID0gZXA7CisJCX0KKworCQkvKiBJcyBpdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQ/ICovCisJCWVsc2UgaWYgKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCQllcF9pbnQgPSBlcDsKKwkJfQorCX0KKworCWlmICghZXBfaW4gfHwgIWVwX291dCB8fCAodXMtPnByb3RvY29sID09IFVTX1BSX0NCSSAmJiAhZXBfaW50KSkgeworCQlVU19ERUJVR1AoIkVuZHBvaW50IHNhbml0eSBjaGVjayBmYWlsZWQhIFJlamVjdGluZyBkZXYuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogQ2FsY3VsYXRlIGFuZCBzdG9yZSB0aGUgcGlwZSB2YWx1ZXMgKi8KKwl1cy0+c2VuZF9jdHJsX3BpcGUgPSB1c2Jfc25kY3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKKwl1cy0+cmVjdl9jdHJsX3BpcGUgPSB1c2JfcmN2Y3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKKwl1cy0+c2VuZF9idWxrX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXMtPnB1c2JfZGV2LAorCQllcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCXVzLT5yZWN2X2J1bGtfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1cy0+cHVzYl9kZXYsIAorCQllcF9pbi0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJaWYgKGVwX2ludCkgeworCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCisJCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1cy0+ZXBfYkludGVydmFsID0gZXBfaW50LT5iSW50ZXJ2YWw7CisJfQorCXJldHVybiAwOworfQorCisvKiBJbml0aWFsaXplIGFsbCB0aGUgZHluYW1pYyByZXNvdXJjZXMgd2UgbmVlZCAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHA7CisKKwl1cy0+Y3VycmVudF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXMtPmN1cnJlbnRfdXJiKSB7CisJCVVTX0RFQlVHUCgiVVJCIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTG9jayB0aGUgZGV2aWNlIHdoaWxlIHdlIGNhcnJ5IG91dCB0aGUgbmV4dCB0d28gb3BlcmF0aW9ucyAqLworCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKKworCS8qIEZvciBidWxrLW9ubHkgZGV2aWNlcywgZGV0ZXJtaW5lIHRoZSBtYXggTFVOIHZhbHVlICovCisJaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9CVUxLKSB7CisJCXAgPSB1c2Jfc3Rvcl9CdWxrX21heF9sdW4odXMpOworCQlpZiAocCA8IDApIHsKKwkJCXVwKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJCQlyZXR1cm4gcDsKKwkJfQorCQl1cy0+bWF4X2x1biA9IHA7CisJfQorCisJLyogSnVzdCBiZWZvcmUgd2Ugc3RhcnQgb3VyIGNvbnRyb2wgdGhyZWFkLCBpbml0aWFsaXplCisJICogdGhlIGRldmljZSBpZiBpdCBuZWVkcyBpbml0aWFsaXphdGlvbiAqLworCWlmICh1cy0+dW51c3VhbF9kZXYtPmluaXRGdW5jdGlvbikKKwkJdXMtPnVudXN1YWxfZGV2LT5pbml0RnVuY3Rpb24odXMpOworCisJdXAoJnVzLT5kZXZfc2VtYXBob3JlKTsKKworCS8qIFN0YXJ0IHVwIG91ciBjb250cm9sIHRocmVhZCAqLworCXAgPSBrZXJuZWxfdGhyZWFkKHVzYl9zdG9yX2NvbnRyb2xfdGhyZWFkLCB1cywgQ0xPTkVfVk0pOworCWlmIChwIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFIAorCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCBjb250cm9sIHRocmVhZFxuIik7CisJCXJldHVybiBwOworCX0KKwl1cy0+cGlkID0gcDsKKwlhdG9taWNfaW5jKCZ0b3RhbF90aHJlYWRzKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbGVhc2UgYWxsIG91ciBkeW5hbWljIHJlc291cmNlcyAqLworc3RhdGljIHZvaWQgdXNiX3N0b3JfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCVVTX0RFQlVHUCgiLS0gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBUZWxsIHRoZSBjb250cm9sIHRocmVhZCB0byBleGl0LiAgVGhlIFNDU0kgaG9zdCBtdXN0CisJICogYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCBzbyBpdCB3b24ndCB0cnkgdG8gcXVldWUKKwkgKiBhbnkgbW9yZSBjb21tYW5kcy4KKwkgKi8KKwlVU19ERUJVR1AoIi0tIHNlbmRpbmcgZXhpdCBjb21tYW5kIHRvIHRocmVhZFxuIik7CisJdXAoJnVzLT5zZW1hKTsKKworCS8qIENhbGwgdGhlIGRlc3RydWN0b3Igcm91dGluZSwgaWYgaXQgZXhpc3RzICovCisJaWYgKHVzLT5leHRyYV9kZXN0cnVjdG9yKSB7CisJCVVTX0RFQlVHUCgiLS0gY2FsbGluZyBleHRyYV9kZXN0cnVjdG9yKClcbiIpOworCQl1cy0+ZXh0cmFfZGVzdHJ1Y3Rvcih1cy0+ZXh0cmEpOworCX0KKworCS8qIEZyZWUgdGhlIGV4dHJhIGRhdGEgYW5kIHRoZSBVUkIgKi8KKwlrZnJlZSh1cy0+ZXh0cmEpOworCXVzYl9mcmVlX3VyYih1cy0+Y3VycmVudF91cmIpOworfQorCisvKiBEaXNzb2NpYXRlIGZyb20gdGhlIFVTQiBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGRpc3NvY2lhdGVfZGV2KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIi0tICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogRnJlZSB0aGUgZGV2aWNlLXJlbGF0ZWQgRE1BLW1hcHBlZCBidWZmZXJzICovCisJaWYgKHVzLT5jcikKKwkJdXNiX2J1ZmZlcl9mcmVlKHVzLT5wdXNiX2Rldiwgc2l6ZW9mKCp1cy0+Y3IpLCB1cy0+Y3IsCisJCQkJdXMtPmNyX2RtYSk7CisJaWYgKHVzLT5pb2J1ZikKKwkJdXNiX2J1ZmZlcl9mcmVlKHVzLT5wdXNiX2RldiwgVVNfSU9CVUZfU0laRSwgdXMtPmlvYnVmLAorCQkJCXVzLT5pb2J1Zl9kbWEpOworCisJLyogUmVtb3ZlIG91ciBwcml2YXRlIGRhdGEgZnJvbSB0aGUgaW50ZXJmYWNlICovCisJdXNiX3NldF9pbnRmZGF0YSh1cy0+cHVzYl9pbnRmLCBOVUxMKTsKK30KKworLyogVGhyZWFkIHRvIGNhcnJ5IG91dCBkZWxheWVkIFNDU0ktZGV2aWNlIHNjYW5uaW5nICovCitzdGF0aWMgaW50IHVzYl9zdG9yX3NjYW5fdGhyZWFkKHZvaWQgKiBfX3VzKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IChzdHJ1Y3QgdXNfZGF0YSAqKV9fdXM7CisKKwkvKgorCSAqIFRoaXMgdGhyZWFkIGRvZXNuJ3QgbmVlZCBhbnkgdXNlci1sZXZlbCBhY2Nlc3MsCisJICogc28gZ2V0IHJpZCBvZiBhbGwgb3VyIHJlc291cmNlcy4KKwkgKi8KKwlsb2NrX2tlcm5lbCgpOworCWRhZW1vbml6ZSgidXNiLXN0b3Itc2NhbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCS8qIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIGhvc3QsIHNvIGl0IHdvbid0IGJlIGRlYWxsb2NhdGVkCisJICogdW50aWwgd2UncmUgcmVhZHkgdG8gZXhpdCAqLworCXNjc2lfaG9zdF9nZXQodXNfdG9faG9zdCh1cykpOworCisJLyogU2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCisJY29tcGxldGUoJih1cy0+bm90aWZ5KSk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkidXNiLXN0b3JhZ2U6IGRldmljZSBmb3VuZCBhdCAlZFxuIiwgdXMtPnB1c2JfZGV2LT5kZXZudW0pOworCisJLyogV2FpdCBmb3IgdGhlIHRpbWVvdXQgdG8gZXhwaXJlIG9yIGZvciBhIGRpc2Nvbm5lY3QgKi8KKwlpZiAoZGVsYXlfdXNlID4gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAidXNiLXN0b3JhZ2U6IHdhaXRpbmcgZm9yIGRldmljZSAiCisJCQkJInRvIHNldHRsZSBiZWZvcmUgc2Nhbm5pbmdcbiIpOworcmV0cnk6CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHVzLT5kZWxheV93YWl0LAorCQkJCXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpLAorCQkJCWRlbGF5X3VzZSAqIEhaKTsKKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRlJFRVpFKSB7CisJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9CisKKwkvKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIGNvbm5lY3RlZCwgcGVyZm9ybSB0aGUgc2Nhbm5pbmcgKi8KKwlpZiAoIXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCXNjc2lfc2Nhbl9ob3N0KHVzX3RvX2hvc3QodXMpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzYi1zdG9yYWdlOiBkZXZpY2Ugc2NhbiBjb21wbGV0ZVxuIik7CisKKwkJLyogU2hvdWxkIHdlIHVuYmluZCBpZiBubyBkZXZpY2VzIHdlcmUgZGV0ZWN0ZWQ/ICovCisJfQorCisJc2NzaV9ob3N0X3B1dCh1c190b19ob3N0KHVzKSk7CisJY29tcGxldGVfYW5kX2V4aXQoJnRocmVhZHNfZ29uZSwgMCk7Cit9CisKKworLyogUHJvYmUgdG8gc2VlIGlmIHdlIGNhbiBkcml2ZSBhIG5ld2x5LWNvbm5lY3RlZCBVU0IgZGV2aWNlICovCitzdGF0aWMgaW50IHN0b3JhZ2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWNvbnN0IGludCBpZF9pbmRleCA9IGlkIC0gc3RvcmFnZV91c2JfaWRzOyAKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkZXRlY3RlZFxuIik7CisKKwkvKgorCSAqIEFzayB0aGUgU0NTSSBsYXllciB0byBhbGxvY2F0ZSBhIGhvc3Qgc3RydWN0dXJlLCB3aXRoIGV4dHJhCisJICogc3BhY2UgYXQgdGhlIGVuZCBmb3Igb3VyIHByaXZhdGUgdXNfZGF0YSBzdHJ1Y3R1cmUuCisJICovCisJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZSwgc2l6ZW9mKCp1cykpOworCWlmICghaG9zdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBzY3NpIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJbWVtc2V0KHVzLCAwLCBzaXplb2Yoc3RydWN0IHVzX2RhdGEpKTsKKwlpbml0X01VVEVYKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwlpbml0X01VVEVYX0xPQ0tFRCgmKHVzLT5zZW1hKSk7CisJaW5pdF9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzLT5kZWxheV93YWl0KTsKKworCS8qIEFzc29jaWF0ZSB0aGUgdXNfZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgVVNCIGRldmljZSAqLworCXJlc3VsdCA9IGFzc29jaWF0ZV9kZXYodXMsIGludGYpOworCWlmIChyZXN1bHQpCisJCWdvdG8gQmFkRGV2aWNlOworCisJLyoKKwkgKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgZGVzY3JpcHRvcnMKKwkgKgorCSAqIGlkX2luZGV4IGlzIGNhbGN1bGF0ZWQgaW4gdGhlIGRlY2xhcmF0aW9uIHRvIGJlIHRoZSBpbmRleCBudW1iZXIKKwkgKiBvZiB0aGUgbWF0Y2ggZnJvbSB0aGUgdXNiX2RldmljZV9pZCB0YWJsZSwgc28gd2UgY2FuIGZpbmQgdGhlCisJICogY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgcHJpdmF0ZSB0YWJsZS4KKwkgKi8KKwlnZXRfZGV2aWNlX2luZm8odXMsIGlkX2luZGV4KTsKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKKwlpZiAodXMtPnByb3RvY29sID09IFVTX1BSX0VVU0JfU0REUjA5IHx8CisJCQl1cy0+cHJvdG9jb2wgPT0gVVNfUFJfRFBDTV9VU0IpIHsKKwkJLyogc2V0IHRoZSBjb25maWd1cmF0aW9uIC0tIFNUQUxMIGlzIGFuIGFjY2VwdGFibGUgcmVzcG9uc2UgaGVyZSAqLworCQlpZiAodXMtPnB1c2JfZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCQlVU19ERUJVR1AoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsIHVzLT5wdXNiX2RldgorCQkJCS0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCQkJZ290byBCYWREZXZpY2U7CisJCX0KKwkJcmVzdWx0ID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24odXMtPnB1c2JfZGV2KTsKKworCQlVU19ERUJVR1AoIlJlc3VsdCBvZiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiBpcyAlZFxuIiwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCVVTX0RFQlVHUCgiLS0gc3RhbGwgb24gY29udHJvbCBpbnRlcmZhY2VcbiIpOworCQl9IGVsc2UgaWYgKHJlc3VsdCAhPSAwKSB7CisJCQkvKiBpdCdzIG5vdCBhIHN0YWxsLCBidXQgYW5vdGhlciBlcnJvciAtLSB0aW1lIHRvIGJhaWwgKi8KKwkJCVVTX0RFQlVHUCgiLS0gVW5rbm93biBlcnJvci4gIFJlamVjdGluZyBkZXZpY2VcbiIpOworCQkJZ290byBCYWREZXZpY2U7CisJCX0KKwl9CisjZW5kaWYKKworCS8qIEdldCB0aGUgdHJhbnNwb3J0LCBwcm90b2NvbCwgYW5kIHBpcGUgc2V0dGluZ3MgKi8KKwlyZXN1bHQgPSBnZXRfdHJhbnNwb3J0KHVzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIEJhZERldmljZTsKKwlyZXN1bHQgPSBnZXRfcHJvdG9jb2wodXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gQmFkRGV2aWNlOworCXJlc3VsdCA9IGdldF9waXBlcyh1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBCYWREZXZpY2U7CisKKwkvKiBBY3F1aXJlIGFsbCB0aGUgb3RoZXIgcmVzb3VyY2VzIGFuZCBhZGQgdGhlIGhvc3QgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBCYWREZXZpY2U7CisJcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKKwkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOworCQlnb3RvIEJhZERldmljZTsKKwl9CisKKwkvKiBTdGFydCB1cCB0aGUgdGhyZWFkIGZvciBkZWxheWVkIFNDU0ktZGV2aWNlIHNjYW5uaW5nICovCisJcmVzdWx0ID0ga2VybmVsX3RocmVhZCh1c2Jfc3Rvcl9zY2FuX3RocmVhZCwgdXMsIENMT05FX1ZNKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFIAorCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCB0aGUgZGV2aWNlLXNjYW5uaW5nIHRocmVhZFxuIik7CisJCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7CisJCWdvdG8gQmFkRGV2aWNlOworCX0KKwlhdG9taWNfaW5jKCZ0b3RhbF90aHJlYWRzKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOworCisJcmV0dXJuIDA7CisKKwkvKiBXZSBjb21lIGhlcmUgaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyAqLworQmFkRGV2aWNlOgorCVVTX0RFQlVHUCgic3RvcmFnZV9wcm9iZSgpIGZhaWxlZFxuIik7CisJc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKTsKKwl1c2Jfc3Rvcl9yZWxlYXNlX3Jlc291cmNlcyh1cyk7CisJZGlzc29jaWF0ZV9kZXYodXMpOworCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogSGFuZGxlIGEgZGlzY29ubmVjdCBldmVudCBmcm9tIHRoZSBVU0IgY29yZSAqLworc3RhdGljIHZvaWQgc3RvcmFnZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlVU19ERUJVR1AoInN0b3JhZ2VfZGlzY29ubmVjdCgpIGNhbGxlZFxuIik7CisKKwkvKiBQcmV2ZW50IG5ldyBVU0IgdHJhbnNmZXJzLCBzdG9wIHRoZSBjdXJyZW50IGNvbW1hbmQsIGFuZAorCSAqIGludGVycnVwdCBhIFNDU0ktc2NhbiBvciBkZXZpY2UtcmVzZXQgZGVsYXkgKi8KKwlzZXRfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpOworCXVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHVzKTsKKwl3YWtlX3VwKCZ1cy0+ZGVsYXlfd2FpdCk7CisKKwkvKiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgU0NTSS1zY2FubmluZyB0aHJlYWQgaXMgc3RpbGwgcnVubmluZy4KKwkgKiBUaGUgdGhyZWFkIHdpbGwgZXhpdCB3aGVuIGl0IHNlZXMgdGhlIERJU0NPTk5FQ1RJTkcgZmxhZy4gKi8KKworCS8qIFdhaXQgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQgdG8gZmluaXNoLCB0aGVuIHJlbW92ZSB0aGUgaG9zdCAqLworCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKKwl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCXNjc2lfcmVtb3ZlX2hvc3QodXNfdG9faG9zdCh1cykpOworCisJLyogV2FpdCBmb3IgZXZlcnl0aGluZyB0byBiZWNvbWUgaWRsZSBhbmQgcmVsZWFzZSBhbGwgb3VyIHJlc291cmNlcyAqLworCXVzYl9zdG9yX3JlbGVhc2VfcmVzb3VyY2VzKHVzKTsKKwlkaXNzb2NpYXRlX2Rldih1cyk7CisKKwkvKiBEcm9wIG91ciByZWZlcmVuY2UgdG8gdGhlIGhvc3Q7IHRoZSBTQ1NJIGNvcmUgd2lsbCBmcmVlIGl0CisJICogKGFuZCAidXMiIGFsb25nIHdpdGggaXQpIHdoZW4gdGhlIHJlZmNvdW50IGJlY29tZXMgMC4gKi8KKwlzY3NpX2hvc3RfcHV0KHVzX3RvX2hvc3QodXMpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zdG9yX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4uLlxuIik7CisKKwkvKiByZWdpc3RlciB0aGUgZHJpdmVyLCByZXR1cm4gdXNiX3JlZ2lzdGVyIHJldHVybiBjb2RlIGlmIGVycm9yICovCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2Jfc3RvcmFnZV9kcml2ZXIpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0IHJlZ2lzdGVyZWQuXG4iKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc3Rvcl9leGl0KHZvaWQpCit7CisJVVNfREVCVUdQKCJ1c2Jfc3Rvcl9leGl0KCkgY2FsbGVkXG4iKTsKKworCS8qIERlcmVnaXN0ZXIgdGhlIGRyaXZlcgorCSAqIFRoaXMgd2lsbCBjYXVzZSBkaXNjb25uZWN0KCkgdG8gYmUgY2FsbGVkIGZvciBlYWNoCisJICogYXR0YWNoZWQgdW5pdAorCSAqLworCVVTX0RFQlVHUCgiLS0gY2FsbGluZyB1c2JfZGVyZWdpc3RlcigpXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmdXNiX3N0b3JhZ2VfZHJpdmVyKSA7CisKKwkvKiBEb24ndCByZXR1cm4gdW50aWwgYWxsIG9mIG91ciBjb250cm9sIGFuZCBzY2FubmluZyB0aHJlYWRzCisJICogaGF2ZSBleGl0ZWQuICBTaW5jZSBlYWNoIHRocmVhZCBzaWduYWxzIHRocmVhZHNfZ29uZSBhcyBpdHMKKwkgKiBsYXN0IGFjdCwgd2UgaGF2ZSB0byBjYWxsIHdhaXRfZm9yX2NvbXBsZXRpb24gdGhlIHJpZ2h0IG51bWJlcgorCSAqIG9mIHRpbWVzLgorCSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmdG90YWxfdGhyZWFkcykgPiAwKSB7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRocmVhZHNfZ29uZSk7CisJCWF0b21pY19kZWMoJnRvdGFsX3RocmVhZHMpOworCX0KK30KKworbW9kdWxlX2luaXQodXNiX3N0b3JfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc3Rvcl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWI3YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaApAQCAtMCwwICsxLDIwNCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBNYWluIEhlYWRlciBGaWxlCisgKgorICogJElkOiB1c2IuaCx2IDEuMjEgMjAwMi8wNC8yMSAwMjo1Nzo1OSBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9IXworI2RlZmluZSBfVVNCX0hfCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCitzdHJ1Y3QgdXNfZGF0YTsKK3N0cnVjdCBzY3NpX2NtbmQ7CisKKy8qCisgKiBVbnVzdWFsIGRldmljZSBsaXN0IGRlZmluaXRpb25zIAorICovCisKK3N0cnVjdCB1c191bnVzdWFsX2RldiB7CisJY29uc3QgY2hhciogdmVuZG9yTmFtZTsKKwljb25zdCBjaGFyKiBwcm9kdWN0TmFtZTsKKwlfX3U4ICB1c2VQcm90b2NvbDsKKwlfX3U4ICB1c2VUcmFuc3BvcnQ7CisJaW50ICgqaW5pdEZ1bmN0aW9uKShzdHJ1Y3QgdXNfZGF0YSAqKTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisvKgorICogU3RhdGljIGZsYWcgZGVmaW5pdGlvbnMuICBXZSB1c2UgdGhpcyByb3VuZGFib3V0IHRlY2huaXF1ZSBzbyB0aGF0IHRoZQorICogcHJvY19pbmZvKCkgcm91dGluZSBjYW4gYXV0b21hdGljYWxseSBkaXNwbGF5IGEgbWVzc2FnZSBmb3IgZWFjaCBmbGFnLgorICovCisjZGVmaW5lIFVTX0RPX0FMTF9GTEFHUwkJCQkJCVwKKwlVU19GTEFHKFNJTkdMRV9MVU4sCTB4MDAwMDAwMDEpCQkJXAorCQkvKiBhbGxvdyBhY2Nlc3MgdG8gb25seSBMVU4gMCAqLwkJXAorCVVTX0ZMQUcoTkVFRF9PVkVSUklERSwJMHgwMDAwMDAwMikJCQlcCisJCS8qIHVudXN1YWxfZGV2cyBlbnRyeSBpcyBuZWNlc3NhcnkgKi8JCVwKKwlVU19GTEFHKFNDTV9NVUxUX1RBUkcsCTB4MDAwMDAwMDQpCQkJXAorCQkvKiBzdXBwb3J0cyBtdWx0aXBsZSB0YXJnZXRzICovCQkJXAorCVVTX0ZMQUcoRklYX0lOUVVJUlksCTB4MDAwMDAwMDgpCQkJXAorCQkvKiBJTlFVSVJZIHJlc3BvbnNlIG5lZWRzIGZha2luZyAqLwkJXAorCVVTX0ZMQUcoRklYX0NBUEFDSVRZLAkweDAwMDAwMDEwKQkJCVwKKwkJLyogUkVBRCBDQVBBQ0lUWSByZXNwb25zZSB0b28gYmlnICovCQlcCisJVVNfRkxBRyhJR05PUkVfUkVTSURVRSwJMHgwMDAwMDAyMCkJCQlcCisJCS8qIHJlcG9ydGVkIHJlc2lkdWUgaXMgd3JvbmcgKi8JCQlcCisJVVNfRkxBRyhCVUxLMzIsCQkweDAwMDAwMDQwKQkJCVwKKwkJLyogVXNlcyAzMi1ieXRlIENCVyBsZW5ndGggKi8JCQlcCisJVVNfRkxBRyhOT1RfTE9DS0FCTEUsCTB4MDAwMDAwODApCQkJXAorCQkvKiBQUkVWRU5UL0FMTE9XIG5vdCBzdXBwb3J0ZWQgKi8JCVwKKwlVU19GTEFHKEdPX1NMT1csCTB4MDAwMDAxMDApCQkJXAorCQkvKiBOZWVkIGRlbGF5IGFmdGVyIENvbW1hbmQgcGhhc2UgKi8JCVwKKwlVU19GTEFHKE5PX1dQX0RFVEVDVCwJMHgwMDAwMDIwMCkJCQlcCisJCS8qIERvbid0IGNoZWNrIGZvciB3cml0ZS1wcm90ZWN0ICovCQlcCisKKyNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAorZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OworI3VuZGVmIFVTX0ZMQUcKKworLyogRHluYW1pYyBmbGFnIGRlZmluaXRpb25zOiB1c2VkIGluIHNldF9iaXQoKSBldGMuICovCisjZGVmaW5lIFVTX0ZMSURYX1VSQl9BQ1RJVkUJMTggIC8qIDB4MDAwNDAwMDAgIGN1cnJlbnRfdXJiIGlzIGluIHVzZSAgKi8KKyNkZWZpbmUgVVNfRkxJRFhfU0dfQUNUSVZFCTE5ICAvKiAweDAwMDgwMDAwICBjdXJyZW50X3NnIGlzIGluIHVzZSAgICovCisjZGVmaW5lIFVTX0ZMSURYX0FCT1JUSU5HCTIwICAvKiAweDAwMTAwMDAwICBhYm9ydCBpcyBpbiBwcm9ncmVzcyAgICovCisjZGVmaW5lIFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcJMjEgIC8qIDB4MDAyMDAwMDAgIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgQUJPUlRJTkdfT1JfRElTQ09OTkVDVElORwkoKDFVTCA8PCBVU19GTElEWF9BQk9SVElORykgfCBcCisJCQkJCSAoMVVMIDw8IFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcpKQorI2RlZmluZSBVU19GTElEWF9SRVNFVFRJTkcJMjIgIC8qIDB4MDA0MDAwMDAgIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBVU19GTElEWF9USU1FRF9PVVQJMjMgIC8qIDB4MDA4MDAwMDAgIFNDU0kgbWlkbGF5ZXIgdGltZWQgb3V0ICAqLworCisKKyNkZWZpbmUgVVNCX1NUT1JfU1RSSU5HX0xFTiAzMgorCisvKgorICogV2UgcHJvdmlkZSBhIERNQS1tYXBwZWQgSS9PIGJ1ZmZlciBmb3IgdXNlIHdpdGggc21hbGwgVVNCIHRyYW5zZmVycy4KKyAqIEl0IHR1cm5zIG91dCB0aGF0IENCW0ldIG5lZWRzIGEgMTItYnl0ZSBidWZmZXIgYW5kIEJ1bGstb25seSBuZWVkcyBhCisgKiAzMS1ieXRlIGJ1ZmZlci4gIEJ1dCBGcmVlY29tIG5lZWRzIGEgNjQtYnl0ZSBidWZmZXIsIHNvIHRoYXQncyB0aGUKKyAqIHNpemUgd2UnbGwgYWxsb2NhdGUuCisgKi8KKworI2RlZmluZSBVU19JT0JVRl9TSVpFCQk2NAkvKiBTaXplIG9mIHRoZSBETUEtbWFwcGVkIEkvTyBidWZmZXIgKi8KKwordHlwZWRlZiBpbnQgKCp0cmFuc19jbW5kKShzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7Cit0eXBlZGVmIGludCAoKnRyYW5zX3Jlc2V0KShzdHJ1Y3QgdXNfZGF0YSopOwordHlwZWRlZiB2b2lkICgqcHJvdG9fY21uZCkoc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Cit0eXBlZGVmIHZvaWQgKCpleHRyYV9kYXRhX2Rlc3RydWN0b3IpKHZvaWQgKik7CSAvKiBleHRyYSBkYXRhIGRlc3RydWN0b3IgICAqLworCisvKiB3ZSBhbGxvY2F0ZSBvbmUgb2YgdGhlc2UgZm9yIGV2ZXJ5IGRldmljZSB0aGF0IHdlIHJlbWVtYmVyICovCitzdHJ1Y3QgdXNfZGF0YSB7CisJLyogVGhlIGRldmljZSB3ZSdyZSB3b3JraW5nIHdpdGgKKwkgKiBJdCdzIGltcG9ydGFudCB0byBub3RlOgorCSAqICAgIChvKSB5b3UgbXVzdCBob2xkIGRldl9zZW1hcGhvcmUgdG8gY2hhbmdlIHB1c2JfZGV2CisJICovCisJc3RydWN0IHNlbWFwaG9yZQlkZXZfc2VtYXBob3JlOwkgLyogcHJvdGVjdCBwdXNiX2RldiAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSpwdXNiX2RldjsJIC8qIHRoaXMgdXNiX2RldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSpwdXNiX2ludGY7CSAvKiB0aGlzIGludGVyZmFjZSAqLworCXN0cnVjdCB1c191bnVzdWFsX2RldiAgICp1bnVzdWFsX2RldjsJIC8qIGRldmljZS1maWx0ZXIgZW50cnkgICAgICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkgLyogZnJvbSBmaWx0ZXIgaW5pdGlhbGx5ICovCisJdW5zaWduZWQgaW50CQlzZW5kX2J1bGtfcGlwZTsJIC8qIGNhY2hlZCBwaXBlIHZhbHVlcyAqLworCXVuc2lnbmVkIGludAkJcmVjdl9idWxrX3BpcGU7CisJdW5zaWduZWQgaW50CQlzZW5kX2N0cmxfcGlwZTsKKwl1bnNpZ25lZCBpbnQJCXJlY3ZfY3RybF9waXBlOworCXVuc2lnbmVkIGludAkJcmVjdl9pbnRyX3BpcGU7CisKKwkvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlICovCisJY2hhcgkJCSp0cmFuc3BvcnRfbmFtZTsKKwljaGFyCQkJKnByb3RvY29sX25hbWU7CisJX19sZTMyCQkJYmNzX3NpZ25hdHVyZTsKKwl1OAkJCXN1YmNsYXNzOworCXU4CQkJcHJvdG9jb2w7CisJdTgJCQltYXhfbHVuOworCisJdTgJCQlpZm51bTsJCSAvKiBpbnRlcmZhY2UgbnVtYmVyICAgKi8KKwl1OAkJCWVwX2JJbnRlcnZhbDsJIC8qIGludGVycnVwdCBpbnRlcnZhbCAqLyAKKworCS8qIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGlzIGRldmljZSAqLworCXRyYW5zX2NtbmQJCXRyYW5zcG9ydDsJIC8qIHRyYW5zcG9ydCBmdW5jdGlvbgkgICAqLworCXRyYW5zX3Jlc2V0CQl0cmFuc3BvcnRfcmVzZXQ7IC8qIHRyYW5zcG9ydCBkZXZpY2UgcmVzZXQgKi8KKwlwcm90b19jbW5kCQlwcm90b19oYW5kbGVyOwkgLyogcHJvdG9jb2wgaGFuZGxlcgkgICAqLworCisJLyogU0NTSSBpbnRlcmZhY2VzICovCisJc3RydWN0IHNjc2lfY21uZAkqc3JiOwkJIC8qIGN1cnJlbnQgc3JiCQkqLworCisJLyogdGhyZWFkIGluZm9ybWF0aW9uICovCisJaW50CQkJcGlkOwkJIC8qIGNvbnRyb2wgdGhyZWFkCSAqLworCisJLyogY29udHJvbCBhbmQgYnVsayBjb21tdW5pY2F0aW9ucyBkYXRhICovCisJc3RydWN0IHVyYgkJKmN1cnJlbnRfdXJiOwkgLyogVVNCIHJlcXVlc3RzCSAqLworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJKmNyOwkJIC8qIGNvbnRyb2wgcmVxdWVzdHMJICovCisJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CWN1cnJlbnRfc2c7CSAvKiBzY2F0dGVyLWdhdGhlciByZXEuICAqLworCXVuc2lnbmVkIGNoYXIJCSppb2J1ZjsJCSAvKiBJL08gYnVmZmVyCQkgKi8KKwlkbWFfYWRkcl90CQljcl9kbWE7CQkgLyogYnVmZmVyIERNQSBhZGRyZXNzZXMgKi8KKwlkbWFfYWRkcl90CQlpb2J1Zl9kbWE7CisKKwkvKiBtdXR1YWwgZXhjbHVzaW9uIGFuZCBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAqLworCXN0cnVjdCBzZW1hcGhvcmUJc2VtYTsJCSAvKiB0byBzbGVlcCB0aHJlYWQgb24JICAgICovCisJc3RydWN0IGNvbXBsZXRpb24Jbm90aWZ5OwkJIC8qIHRocmVhZCBiZWdpbi9lbmQJICAgICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsYXlfd2FpdDsJIC8qIHdhaXQgZHVyaW5nIHNjYW4sIHJlc2V0ICovCisKKwkvKiBzdWJkcml2ZXIgaW5mb3JtYXRpb24gKi8KKwl2b2lkCQkJKmV4dHJhOwkJIC8qIEFueSBleHRyYSBkYXRhICAgICAgICAgICovCisJZXh0cmFfZGF0YV9kZXN0cnVjdG9yCWV4dHJhX2Rlc3RydWN0b3I7LyogZXh0cmEgZGF0YSBkZXN0cnVjdG9yICAgKi8KK307CisKKy8qIENvbnZlcnQgYmV0d2VlbiB1c19kYXRhIGFuZCB0aGUgY29ycmVzcG9uZGluZyBTY3NpX0hvc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0IGlubGluZSAqdXNfdG9faG9zdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHVzLCBzdHJ1Y3QgU2NzaV9Ib3N0LCBob3N0ZGF0YSk7Cit9CitzdGF0aWMgc3RydWN0IHVzX2RhdGEgaW5saW5lICpob3N0X3RvX3VzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpIHsKKwlyZXR1cm4gKHN0cnVjdCB1c19kYXRhICopIGhvc3QtPmhvc3RkYXRhOworfQorCisvKiBGdW5jdGlvbiB0byBmaWxsIGFuIGlucXVpcnkgcmVzcG9uc2UuIFNlZSB1c2IuYyBmb3IgZGV0YWlscyAqLworZXh0ZXJuIHZvaWQgZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHN0cnVjdCB1c19kYXRhICp1cywKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4pOworCisvKiBUaGUgc2NzaV9sb2NrKCkgYW5kIHNjc2lfdW5sb2NrKCkgbWFjcm9zIHByb3RlY3QgdGhlIHNtX3N0YXRlIGFuZCB0aGUKKyAqIHNpbmdsZSBxdWV1ZSBlbGVtZW50IHNyYiBmb3Igd3JpdGUgYWNjZXNzICovCisjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCisjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCisKKworLyogVmVuZG9yIElEIGxpc3QgZm9yIGRldmljZXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HRU5FU1lTCQkweDA1ZTMJLyogR2VuZXN5cyBMb2dpYyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1MWE2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogVVNCIFNrZWxldG9uIGRyaXZlciAtIDIuMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIDIuNi4zIHZlcnNpb24gb2YgZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgCisgKiBidXQgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIGVhc3kgdG8gcmVhZCBhbmQgdXNlLCBhcyBubyBsb2NrcyBhcmUgbm93CisgKiBuZWVkZWQgYW55bW9yZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLworI2RlZmluZSBVU0JfU0tFTF9WRU5ET1JfSUQJMHhmZmYwCisjZGVmaW5lIFVTQl9TS0VMX1BST0RVQ1RfSUQJMHhmZmYwCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBza2VsX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc2tlbF90YWJsZSk7CisKKworLyogR2V0IGEgbWlub3IgcmFuZ2UgZm9yIHlvdXIgZGV2aWNlcyBmcm9tIHRoZSB1c2IgbWFpbnRhaW5lciAqLworI2RlZmluZSBVU0JfU0tFTF9NSU5PUl9CQVNFCTE5MgorCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHVzYl9za2VsIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqCXVkZXY7CQkJLyogdGhlIHVzYiBkZXZpY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKglpbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgKgkJYnVsa19pbl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSAqLworCXNpemVfdAkJCWJ1bGtfaW5fc2l6ZTsJCS8qIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKK307CisjZGVmaW5lIHRvX3NrZWxfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NrZWwsIGtyZWYpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBza2VsX2RyaXZlcjsKKworc3RhdGljIHZvaWQgc2tlbF9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CQorCXN0cnVjdCB1c2Jfc2tlbCAqZGV2ID0gdG9fc2tlbF9kZXYoa3JlZik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCWtmcmVlIChkZXYtPmJ1bGtfaW5fYnVmZmVyKTsKKwlrZnJlZSAoZGV2KTsKK30KKworc3RhdGljIGludCBza2VsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlpbnQgc3VibWlub3I7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnNrZWxfZHJpdmVyLCBzdWJtaW5vcik7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZXJyICgiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN1Ym1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpZiAoIWRldikgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCBmb3IgdGhlIGRldmljZSAqLworCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOworCisJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBza2VsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBkZWNyZW1lbnQgdGhlIGNvdW50IG9uIG91ciBkZXZpY2UgKi8KKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBza2VsX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNrZWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX3NrZWwgKmRldjsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgYnl0ZXNfcmVhZDsKKworCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCisJLyogZG8gYSBibG9ja2luZyBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCisJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJICAgICAgZGV2LT5idWxrX2luX2J1ZmZlciwKKwkJCSAgICAgIG1pbihkZXYtPmJ1bGtfaW5fc2l6ZSwgY291bnQpLAorCQkJICAgICAgJmJ5dGVzX3JlYWQsIDEwMDAwKTsKKworCS8qIGlmIHRoZSByZWFkIHdhcyBzdWNjZXNzZnVsLCBjb3B5IHRoZSBkYXRhIHRvIHVzZXJzcGFjZSAqLworCWlmICghcmV0dmFsKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBkZXYtPmJ1bGtfaW5fYnVmZmVyLCBieXRlc19yZWFkKSkKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldHZhbCA9IGJ5dGVzX3JlYWQ7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2tlbF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopdXJiLT5jb250ZXh0OworCisJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMgJiYgCisJICAgICEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCAKKwkgICAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCSAgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwkvKiBmcmVlIHVwIG91ciBhbGxvY2F0ZWQgYnVmZmVyICovCisJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2tlbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJY2hhciAqYnVmID0gTlVMTDsKKworCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLworCWlmIChjb3VudCA9PSAwKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBjcmVhdGUgYSB1cmIsIGFuZCBhIGJ1ZmZlciBmb3IgaXQsIGFuZCBjb3B5IHRoZSBkYXRhIHRvIHRoZSB1cmIgKi8KKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIGNvdW50LCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghYnVmKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWZmZXIsIGNvdW50KSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIHVyYiBwcm9wZXJseSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksCisJCQkgIGJ1ZiwgY291bnQsIHNrZWxfd3JpdGVfYnVsa19jYWxsYmFjaywgZGV2KTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsIHRoZSBVU0IgY29yZSB3aWxsIGV2ZW50dWFsbHkgZnJlZSBpdCBlbnRpcmVseSAqLworCXVzYl9mcmVlX3VyYih1cmIpOworCitleGl0OgorCXJldHVybiBjb3VudDsKKworZXJyb3I6CisJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgY291bnQsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNrZWxfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVhZCA9CQlza2VsX3JlYWQsCisJLndyaXRlID0Jc2tlbF93cml0ZSwKKwkub3BlbiA9CQlza2VsX29wZW4sCisJLnJlbGVhc2UgPQlza2VsX3JlbGVhc2UsCit9OworCisvKiAKKyAqIHVzYiBjbGFzcyBkcml2ZXIgaW5mbyBpbiBvcmRlciB0byBnZXQgYSBtaW5vciBudW1iZXIgZnJvbSB0aGUgdXNiIGNvcmUsCisgKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCBkZXZmcyBhbmQgdGhlIGRyaXZlciBjb3JlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBza2VsX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2Ivc2tlbCVkIiwKKwkuZm9wcyA9CQkmc2tlbF9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCwKKwkubWlub3JfYmFzZSA9CVVTQl9TS0VMX01JTk9SX0JBU0UsCit9OworCitzdGF0aWMgaW50IHNrZWxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mKCpkZXYpKTsKKwlrcmVmX2luaXQoJmRldi0+a3JlZik7CisKKwlkZXYtPnVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCS8qIHVzZSBvbmx5IHRoZSBmaXJzdCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHMgKi8KKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgJiYKKwkJICAgIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJZGV2LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJCWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWRldi0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZGV2LT5idWxrX2luX2J1ZmZlcikgeworCQkJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCisJCWlmICghZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgJiYKKwkJICAgICEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX09VVCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLworCQkJZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJfQorCX0KKwlpZiAoIShkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmIGRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSkgeworCQllcnIoIkNvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmc2tlbF9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCisJaW5mbygiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoZGV2KQorCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBza2VsX2RlbGV0ZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2tlbF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisJaW50IG1pbm9yID0gaW50ZXJmYWNlLT5taW5vcjsKKworCS8qIHByZXZlbnQgc2tlbF9vcGVuKCkgZnJvbSByYWNpbmcgc2tlbF9kaXNjb25uZWN0KCkgKi8KKwlsb2NrX2tlcm5lbCgpOworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8qIGdpdmUgYmFjayBvdXIgbWlub3IgKi8KKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmc2tlbF9jbGFzcyk7CisKKwl1bmxvY2tfa2VybmVsKCk7CisKKwkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOworCisJaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2tlbF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInNrZWxldG9uIiwKKwkucHJvYmUgPQlza2VsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc2tlbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXNrZWxfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2tlbF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnNrZWxfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NrZWxfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZza2VsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0ICh1c2Jfc2tlbF9pbml0KTsKK21vZHVsZV9leGl0ICh1c2Jfc2tlbF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo=